{"version":3,"file":"static/js/main.3e5132e4.js","mappings":"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iBACP,IAAO,iBACP,IAAO,iBACP,IAAO,iBACP,IAAO,iBACP,IAAO,IACP,IAAO,OACP,IAAO,iBACP,IAAO,iBACP,IAAO,iBACP,IAAO,IACP,IAAO,SACP,IAAO,MACP,IAAO,SACP,IAAO,SACP,IAAO,SACP,IAAO,KACP,IAAO,IACP,IAAO,gBACP,IAAO,SACP,IAAO,MACP,IAAO,SACP,IAAO,OACP,IAAO,eACP,IAAO,MACP,IAAO,IACP,IAAO,UACP,IAAO,OACP,IAAO,MACP,IAAO,MACP,IAAO,MACP,IAAO,UACP,IAAO,MACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,MACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,OACP,IAAO,OACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,OACP,IAAO,KACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,SACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,OACP,IAAO,KACP,IAAO,OACP,IAAO,IACP,IAAO,KACP,IAAO,IACP,IAAO,KACP,IAAO,MACP,IAAO,IACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,SACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,MACP,IAAO,KACP,IAAO,SACP,IAAO,IACP,IAAO,OACP,IAAO,2BACP,IAAO,KACP,IAAO,KACP,IAAO,IACP,IAAO,OACP,IAAO,KACP,IAAO,KACP,IAAO,SACP,IAAO,KACP,IAAO,OACP,IAAO,SACP,IAAO,SACP,IAAO,SACP,IAAO,SACP,IAAO,SACP,IAAO,SACP,IAAO,qBACP,IAAO,KACP,IAAO,SACP,IAAO,MACP,IAAO,qBACP,IAAO,SACP,IAAO,IACP,IAAO,IACP,IAAO,KACP,IAAO,eACP,IAAO,OACP,IAAO,IACP,IAAO,UACP,IAAO,SACP,IAAO,KACP,IAAO,IACP,IAAO,MACP,IAAO,SACP,IAAO,gBACP,IAAO,UACP,IAAO,sBACP,IAAO,qBACP,IAAO,SACP,IAAO,KACP,IAAO,SACP,IAAO,qBACP,IAAO,SACP,IAAO,QC/VX,SAAW9C,GACP,IAAI+C,EAAiB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC7G,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACvH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAA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qC,EAAgBlO,EAAQ+L,GAEzD,YADe,IAAX/L,IAAqBA,EAAS,CAAC,GAC5B17E,GAAO4pF,EAAgBlO,EAClC,EACO2P,CACX,CAR4B,KASY9D,SExKpC+D,GAAa,CACb,SACA,QACA,cACA,4BACA,kCACA,wCACA,oCACA,uBACA,0BACA,0BACA,2CAEAC,GAAc,CACd,CAAEC,UAAW,OAAQ/rB,SAAU,yBAC/B,CAAE+rB,UAAW,aAAc/rB,SAAU,+BACrC,CAAE+rB,UAAW,QAAS/rB,SAAU,0BAChC,CAAE+rB,UAAW,QAAS/rB,SAAU,0BAChC,CAAE+rB,UAAW,OAAQ/rB,SAAU,qCAE/BgsB,GAAW,CAAC,WACZ,UACA,cACA,aACA,YACA,SACA,UACA,SACA,UACA,eACA,iBACA,UACA,WACA,eACA,iBACA,gBACA,YACA,mBACA,gBACA,aACA,SACA,YACA,cACA,cACA,aACA,cACA,SACA,mBACA,YACA,UACA,eACA,cACA,cACA,UACA,YACA,aACA,eACA,mBACA,cACA,YACA,cACA,cACA,YACA,eACA,YACA,SACA,WACA,aACA,aACA,UACA,SACA,YACA,aACA,aACA,eACA,qBACA,SACA,WACA,WACA,WACA,YACA,WACA,YACA,YACA,YACA,eACA,SACA,WACA,iBACA,YACA,eACA,eACA,UACA,mBACA,SACA,WACA,eACA,gBACA,iBACA,iBACA,qBACA,gBACA,eACA,cACA,iBAEAC,GAAoC,WACpC,SAASA,IACT,CA6EA,OA5EAA,EAAmBC,eAAiB,WAChC,MAAO,CACHC,UAAW,CACPC,KAAMP,GACN1tB,WAAY2tB,IAGxB,EACAG,EAAmBI,SAAW,SAAUvqF,GACpC,GAAI+1C,GAAkB/1C,GAClB,OAAOA,EAEX,IAAIwqF,EAAOvwF,KAAKmwF,iBAEhB,OADanwF,KAAKwwF,eAAeD,EAAMxqF,EAE3C,EACAmqF,EAAmBM,eAAiB,SAAUD,EAAMxqF,GAChD/F,KAAK+vF,YAAcQ,EAAKH,UAAUhuB,WAClCpiE,KAAK8vF,WAAaS,EAAKH,UAAUC,KACjCrwF,KAAKywF,YAAcvxF,SAASC,cAAc,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CV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,OAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,OAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAU,IACV,SAAU,IACV,SAAU,IA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AM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,OAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,OAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,OAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,OAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,OAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAE7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAM,MAC7C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,MAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,MAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,MAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,MAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,MAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,MAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,MAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,KAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAyBn+c,SAAS,MAAO,OAC9C1F,KAAK6jd,yBAAy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K,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,KAMTf,EAA8B6B,WAAa,CACvC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK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ASjtlB,UAAW,gBAAY,GACnCurE,GAAW,CACPxB,GAAS,OACVkjhB,EAASjtlB,UAAW,gBAAY,GACnCurE,GAAW,CACPxB,IAAS,IACVkjhB,EAASjtlB,UAAW,2BAAuB,GAC9CurE,GAAW,CACPxB,IAAS,IACVkjhB,EAASjtlB,UAAW,yBAAqB,GAC5CurE,GAAW,CACPxB,MACDkjhB,EAASjtlB,UAAW,qBAAiB,GACxCurE,GAAW,CACPxB,GAAS,SACVkjhB,EAASjtlB,UAAW,gBAAY,GACnCurE,GAAW,CACPrB,GAAQ,CAAC,EAAG4ihB,KACbG,EAASjtlB,UAAW,cAAU,GACjCurE,GAAW,CACPxB,IAAS,IACVkjhB,EAASjtlB,UAAW,qBAAiB,GACxCurE,GAAW,CACPxB,IAAS,IACVkjhB,EAASjtlB,UAAW,oBAAgB,GACvCurE,GAAW,CACPxB,MACDkjhB,EAASjtlB,UAAW,cAAU,GACjCurE,GAAW,CACPxB,MACDkjhB,EAASjtlB,UAAW,oBAAgB,GACvCurE,GAAW,CACPxB,MACDkjhB,EAASjtlB,UAAW,qBAAiB,GACxCurE,GAAW,CACPxB,GAAS,SACVkjhB,EAASjtlB,UAAW,iBAAa,GACpCurE,GAAW,CACPxB,IAAS,IACVkjhB,EAASjtlB,UAAW,oBAAgB,GACvCurE,GAAW,CACPxB,IAAS,IACVkjhB,EAASjtlB,UAAW,iBAAa,GACpCurE,GAAW,CACPxB,IAAS,IACVkjhB,EAASjtlB,UAAW,wBAAoB,GAC3CurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,qBAAiB,GACxCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,eAAW,GAClCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,iBAAa,GACpCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,yBAAqB,GAC5CurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,gBAAY,GACnCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,iBAAa,GACpCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,gBAAY,GACnCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,mBAAe,GACtCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,oBAAgB,GACvCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,mBAAe,GACtCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,qBAAiB,GACxCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,sBAAkB,GACzCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,oBAAgB,GACvCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,qBAAiB,GACxCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,oBAAgB,GACvCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,mBAAe,GACtCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,kBAAc,GACrCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,mBAAe,GACtCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,oBAAgB,GACvCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,qBAAiB,GACxCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,oBAAgB,GACvCurE,GAAW,CACPvtB,MACDiviB,EAASjtlB,UAAW,qBAAiB,GACxCitlB,EAAWiB,EAAa3ihB,GAAW,CAC/BhB,IACD0ihB,EAEP,CAztK8B,CAytK5Bv9jB,IC15KE86kB,GAA6B,WAC7B,SAASA,EAAYtogB,GACjB,IAAIt9C,EAAQlkD,KAIZA,KAAK21V,mBAAoB,EACzB31V,KAAKumlB,WAAa,OAClBvmlB,KAAKmsP,eAAYz8M,EACjB1vC,KAAK+pmB,eAAYr6jB,EAEjB1vC,KAAKgqmB,WAAa,aAClBhqmB,KAAKiqmB,YAAc,UACnBjqmB,KAAKkqmB,eAAiB,aACtBlqmB,KAAKmqmB,kBAAoB,UACzBnqmB,KAAKoqmB,qBAAuB,cAC5BpqmB,KAAKqqmB,cAAgB,EACrBrqmB,KAAK+jS,eAAiB,GACtB/jS,KAAKsqmB,eAAgB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qpB,UAAUg9Q,eAAiB,SAAUv2Q,GAC1C,OAAOmlE,EAAO5rE,UAAUg9Q,eAAej7Q,KAAKrB,KAAM+F,EACtD,EAEA6jpB,EAAStqpB,UAAUiqR,kBAAoB,WACnC,EAEJ1+M,GAAW,CACPxB,IAAS,IACVuglB,EAAStqpB,UAAW,gBAAY,GACnCurE,GAAW,CACPxB,IAAS,IACVuglB,EAAStqpB,UAAW,mBAAe,GACtCurE,GAAW,CACPxB,GAAS,CAAC,IACXuglB,EAAStqpB,UAAW,sBAAkB,GACzCurE,GAAW,CACPxB,IAAS,IACVuglB,EAAStqpB,UAAW,sBAAkB,GACzCurE,GAAW,CACPxB,GAAS,OACVuglB,EAAStqpB,UAAW,aAAS,GAChCurE,GAAW,CACPxB,GAAS,OACVuglB,EAAStqpB,UAAW,aAAS,GAChCurE,GAAW,CACPxB,IAAS,IACVuglB,EAAStqpB,UAAW,uBAAmB,GAC1CurE,GAAW,CACPxB,IAAS,IACVuglB,EAAStqpB,UAAW,iBAAa,GACpCurE,GAAW,CACPvtB,MACDssmB,EAAStqpB,UAAW,4BAAwB,GAC/CurE,GAAW,CACPvtB,MACDssmB,EAAStqpB,UAAW,iBAAa,GACpCurE,GAAW,CACPxB,GAAS,OACVuglB,EAAStqpB,UAAW,qBAAiB,GACxCurE,GAAW,CACPxB,GAAS,UACVuglB,EAAStqpB,UAAW,sBAAkB,GACzCurE,GAAW,CACPxB,GAAS,OACVuglB,EAAStqpB,UAAW,4BAAwB,GAC/CurE,GAAW,CACPxB,GAAS,OACVuglB,EAAStqpB,UAAW,gBAAY,GACnCurE,GAAW,CACPxB,GAAS,OACVuglB,EAAStqpB,UAAW,sBAAkB,GACzCurE,GAAW,CACPxB,GAAS,OACVuglB,EAAStqpB,UAAW,sBAAkB,GACzCurE,GAAW,CACPxB,GAAS,OACVuglB,EAAStqpB,UAAW,mBAAe,GACtCurE,GAAW,CACPxB,GAAS,SACVuglB,EAAStqpB,UAAW,aAAS,GAChCurE,GAAW,CACPxB,GAAS,UACVuglB,EAAStqpB,UAAW,mBAAe,GACtCurE,GAAW,CACPxB,GAAS,SACV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AAW,CACPxB,GAAS,CAAEupf,gBAAiB,kBAAmBsjI,WAAY,aAAcD,iBAAkB,mBAAoBn1I,gBAAiB,kBAAmB+pF,QAAS,UAAW64E,kBAAmB,uBAC3LtI,EAAe97sB,UAAW,4BAAwB,GACrDurE,GAAW,CACPxB,GAAS,KACV+xoB,EAAe97sB,UAAW,eAAW,GACxCurE,GAAW,CACPxB,IAAS,IACV+xoB,EAAe97sB,UAAW,oBAAgB,GAC7CurE,GAAW,CACPxB,IAAS,IACV+xoB,EAAe97sB,UAAW,qBAAiB,GAC9CurE,GAAW,CACPxB,IAAS,IACV+xoB,EAAe97sB,UAAW,oCAAgC,GAC7DurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,sBAAkB,GAC/CurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,kBAAc,GAC3CurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,wBAAoB,GACjDurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,uBAAmB,GAChDurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,uBAAmB,GAChDurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,qBAAiB,GAC9CurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,eAAW,GACxCurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,2BAAuB,GACpDurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,eAAW,GACxCurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,iBAAa,GAC1CurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,+BAA2B,GACxDurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,mCAA+B,GAC5DurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,wBAAoB,GACjDurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,oBAAgB,GAC7CurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,kBAAc,GAC3CurE,GAAW,CACPvtB,MACD89pB,EAAe97sB,UAAW,sBAAkB,GAC/CurE,GAAW,CAC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","sources":["../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../webpack/bootstrap","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../node_modules/@remix-run/router/history.ts","../node_modules/@remix-run/router/utils.ts","../node_modules/@remix-run/router/router.ts","../node_modules/react-router/lib/context.ts","../node_modules/react-router/lib/hooks.tsx","../node_modules/react-router/lib/components.tsx","../node_modules/react-router-dom/dom.ts","../node_modules/react-router-dom/index.tsx","../node_modules/@syncfusion/ej2-base/src/util.js","../node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","../node_modules/@syncfusion/ej2-base/src/hijri-parser.js","../node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","../node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","../node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","../node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","../node_modules/@syncfusion/ej2-base/src/observer.js","../node_modules/@syncfusion/ej2-base/src/internationalization.js","../node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","../node_modules/@syncfusion/ej2-base/src/ajax.js","../node_modules/@syncfusion/ej2-base/src/fetch.js","../node_modules/@syncfusion/ej2-base/src/browser.js","../node_modules/@syncfusion/ej2-base/src/event-handler.js","../node_modules/@syncfusion/ej2-base/src/dom.js","../node_modules/@syncfusion/ej2-base/src/base.js","../node_modules/@syncfusion/ej2-base/src/notify-property-change.js","../node_modules/@syncfusion/ej2-base/src/animation.js","../node_modules/@syncfusion/ej2-base/src/module-loader.js","../node_modules/@syncfusion/ej2-base/src/validate-lic.js","../node_modules/@syncfusion/ej2-base/src/child-property.js","../node_modules/@syncfusion/ej2-base/src/component.js","../node_modules/@syncfusion/ej2-base/src/draggable.js","../node_modules/@syncfusion/ej2-base/src/droppable.js","../node_modules/@syncfusion/ej2-base/src/keyboard.js","../node_modules/@syncfusion/ej2-base/src/l10n.js","../node_modules/@syncfusion/ej2-base/src/touch.js","../node_modules/@syncfusion/ej2-base/src/template.js","../node_modules/@syncfusion/ej2-base/src/template-engine.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/types.js","../node_modules/@syncfusion/ej2-base/src/sanitize-helper.js","../node_modules/@syncfusion/ej2-file-utils/src/save.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/ajax-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/constants.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/dictionary.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/abstract-list.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/level-override.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/unique-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/unique-formats.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/border.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/borders.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/list.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/list-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/shading.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/table-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/character-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/track-changes/track-changes.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/row-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/cell-format.js","../node_modules/@syncfusion/ej2-compression/src/utils.js","../node_modules/@syncfusion/ej2-compression/src/decompressor-huffman-tree.js","../node_modules/@syncfusion/ej2-compression/src/checksum-calculator.js","../node_modules/@syncfusion/ej2-compression/src/compression-reader.js","../node_modules/@syncfusion/ej2-file-utils/src/encoding.js","../node_modules/@syncfusion/ej2-compression/src/compression-writer.js","../node_modules/@syncfusion/ej2-compression/src/zip-archive.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/keywords.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/editor-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/page.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/paragraph-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/style.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/section-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/list-level.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/text-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/layout.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/document-canvas.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/render.js","../node_modules/@syncfusion/ej2-buttons/src/common/common.js","../node_modules/@syncfusion/ej2-buttons/src/button/button.js","../node_modules/@syncfusion/ej2-popups/src/common/position.js","../node_modules/@syncfusion/ej2-popups/src/common/collision.js","../node_modules/@syncfusion/ej2-popups/src/popup/popup.js","../node_modules/@syncfusion/ej2-splitbuttons/src/common/common.js","../node_modules/@syncfusion/ej2-splitbuttons/src/drop-down-button/drop-down-button.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-buttons/src/common/common.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-buttons/src/button/button.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-navigations/src/common/v-scroll.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-navigations/src/toolbar/toolbar.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-navigations/src/tab/tab.js","../node_modules/@syncfusion/ej2-popups/node_modules/@syncfusion/ej2-buttons/src/common/common.js","../node_modules/@syncfusion/ej2-popups/node_modules/@syncfusion/ej2-buttons/src/button/button.js","../node_modules/@syncfusion/ej2-popups/src/common/resize.js","../node_modules/@syncfusion/ej2-popups/src/dialog/dialog.js","../node_modules/@syncfusion/ej2-data/src/query.js","../node_modules/@syncfusion/ej2-lists/src/common/list-base.js","../node_modules/@syncfusion/ej2-data/src/adaptors.js","../node_modules/@syncfusion/ej2-data/src/manager.js","../node_modules/@syncfusion/ej2-data/src/util.js","../node_modules/@syncfusion/ej2-notifications/src/skeleton/skeleton.js","../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-base/drop-down-base.js","../node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js","../node_modules/@syncfusion/ej2-dropdowns/src/common/highlight-search.js","../node_modules/@syncfusion/ej2-dropdowns/src/mention/mention.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/comments/comment.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/zooming.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-buttons/src/check-box/check-box.js","../node_modules/@syncfusion/ej2-lists/src/list-view/list-view.js","../node_modules/@syncfusion/ej2-inputs/src/input/input.js","../node_modules/@syncfusion/ej2-lists/node_modules/@syncfusion/ej2-buttons/src/common/common.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/restrict-editing/add-user-dialog.js","../node_modules/@syncfusion/ej2-inputs/src/textbox/textbox.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/restrict-editing/enforce-protection-dialog.js","../node_modules/@syncfusion/ej2-dropdowns/src/common/incremental-search.js","../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-list/drop-down-list.js","../node_modules/@syncfusion/ej2-calendars/src/timepicker/timepicker.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/restrict-editing/restrict-editing-pane.js","../node_modules/@syncfusion/ej2-inputs/src/numerictextbox/numerictextbox.js","../node_modules/@syncfusion/ej2-calendars/src/calendar/calendar.js","../node_modules/@syncfusion/ej2-calendars/src/datepicker/datepicker.js","../node_modules/@syncfusion/ej2-calendars/src/datetimepicker/datetimepicker.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/form-field-popup.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/content-control-popup.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/track-changes/track-changes-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/themes/major-minor-font-scheme.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/themes/font-scheme.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/themes/themes.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/viewer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/bullets-and-numbering-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/print.js","../node_modules/@syncfusion/ej2-charts/src/common/model/base.js","../node_modules/@syncfusion/ej2-svg-base/src/svg-render/svg-renderer.js","../node_modules/@syncfusion/ej2-svg-base/src/svg-render/canvas-renderer.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/helper.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/interface.js","../node_modules/@syncfusion/ej2-charts/src/chart/utils/double-range.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/double-axis.js","../node_modules/@syncfusion/ej2-charts/src/common/model/constants.js","../node_modules/@syncfusion/ej2-charts/src/chart/model/chart-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/src/common/utils/helper.js","../node_modules/@syncfusion/ej2-charts/src/common/model/theme.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/cartesian-panel.js","../node_modules/@syncfusion/ej2-charts/src/chart/utils/get-data.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/chart-series.js","../node_modules/@syncfusion/ej2-charts/src/common/model/data.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/marker-explode.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/marker.js","../node_modules/@syncfusion/ej2-charts/src/common/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/technical-indicator.js","../node_modules/@syncfusion/ej2-charts/src/common/utils/print.js","../node_modules/@syncfusion/ej2-charts/src/chart/chart.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/line-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/column-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/bar-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/model/acc-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/accumulation-base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/enum.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pie-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pie-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-bar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/polar-radar-panel.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/polar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/scatter-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/bubble-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/radar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/axis-helper.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/date-time-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/error-bar.js","../node_modules/@syncfusion/ej2-charts/src/chart/trend-lines/trend-line.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/data-label.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/category-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/common/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/utils.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-main-object-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-string.js","../node_modules/@syncfusion/ej2-file-utils/src/stream-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-name.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-operators.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-dictionary-properties.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-number.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-array.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-stream.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-reference.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-boolean.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-viewer-preferences.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-catalog.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/drawing/pdf-drawing.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-size.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-margins.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-settings.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-stream-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-color.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-solid-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-pen.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-string-format.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-tokenizer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transformation-matrix.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/constants.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/object-object-pair/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transparency.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/graphics-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/byte-array.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-table-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-record.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-head-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-horizontal-header-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-OS2-Table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-post-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-long-hor-metric.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-loca-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-apple-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-header.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/big-endian-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-reader.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/unicode-true-type-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-text-shape.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-bidirectional.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl-renderer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-gradient-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/image-decoder.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/pdf-template.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/unit-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-image.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-bitmap.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-resources.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-tiling-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-graphics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/annotation-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/page-added-event-arguments.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-template.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-templates.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-document-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-cache-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font-metrics-factory.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-template-element.js","../node_modules/@syncfusion/ej2-charts/src/common/utils/export.js","../node_modules/@syncfusion/ej2-excel-export/src/worksheets.js","../node_modules/@syncfusion/ej2-excel-export/src/worksheet.js","../node_modules/@syncfusion/ej2-excel-export/src/cell-style.js","../node_modules/@syncfusion/ej2-excel-export/src/column.js","../node_modules/@syncfusion/ej2-excel-export/src/row.js","../node_modules/@syncfusion/ej2-excel-export/src/image.js","../node_modules/@syncfusion/ej2-excel-export/src/cell.js","../node_modules/@syncfusion/ej2-excel-export/src/value-formatter.js","../node_modules/@syncfusion/ej2-excel-export/src/csv-helper.js","../node_modules/@syncfusion/ej2-excel-export/src/blob-helper.js","../node_modules/@syncfusion/ej2-excel-export/src/auto-filters.js","../node_modules/@syncfusion/ej2-excel-export/src/workbook.js","../node_modules/@syncfusion/ej2-charts/src/chart/print-export/export.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/accumulation.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/legend.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/dataLabel.js","../node_modules/@syncfusion/ej2-office-chart/src/office-chart/keywords.js","../node_modules/@syncfusion/ej2-office-chart/src/office-chart/chart.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/sfdt-reader.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/html-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/events-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/history-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/base-history-info.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/history-info.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/table-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/editor.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/editor-history.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search-result.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search-results.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/search-results.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/search.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-navigations/src/treeview/treeview.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/options-pane.js","../node_modules/@syncfusion/ej2-file-utils/src/xml-writer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/word-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/text-export.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-navigations/src/common/menu-scroll.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/context-menu.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/image-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/sfdt-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/hyperlink-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/bookmark-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-of-contents-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/styles-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/node_modules/@syncfusion/ej2-buttons/src/radio-button/radio-button.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/page-setup-dialog.js","../node_modules/@syncfusion/ej2-dropdowns/src/combo-box/combo-box.js","../node_modules/@syncfusion/ej2-splitbuttons/src/split-button/split-button.js","../node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-inputs/src/slider/slider.js","../node_modules/@syncfusion/ej2-inputs/src/color-picker/color-picker.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/style-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/list-view-model.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/list-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/paragraph-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/font-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-properties-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/borders-and-shading-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/cell-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/spell-check/spell-checker.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/spellCheck-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/form-field-check-box-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/form-field-text-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/form-field-drop-down-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/notes-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/text-helper/optimized.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/text-helper/regular.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/columns-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/tab-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/utility/size.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/ruler/ruler.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/utility/dom-util.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/datepicker-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/content-control-properties-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/pic-contentControl-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/document-editor.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/header-footer-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/image-properties-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/table-of-content-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/text-properties.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/paragraph-properties.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/text-properties-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/table-properties-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/status-bar.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/document-editor-container.js","../node_modules/@syncfusion/ej2-react-base/src/component-base.js","../node_modules/@syncfusion/ej2-react-base/src/complex-base.js","../node_modules/@syncfusion/ej2-react-base/src/services.js","../node_modules/@syncfusion/ej2-react-base/src/template.js","../node_modules/@syncfusion/ej2-react-documenteditor/src/document-editor-container/documenteditorcontainer.component.js","../node_modules/@syncfusion/ej2-react-base/src/util.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/tool-bar/tool-bar.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","title-bar.js","index.js"],"sourcesContent":["/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ba=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function t(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new t(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new t(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new t(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new t(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new t(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new t(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new t(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new t(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new t(a,5,!1,a.toLowerCase(),null,!1,!1)});var qa=/[\\-:]([a-z])/g;function ra(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(qa,\nra);z[b]=new t(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(qa,ra);z[b]=new t(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(qa,ra);z[b]=new t(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new t(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new t(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new t(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction sa(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Ma=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?La(a):\"\"}\nfunction Oa(a){switch(a.tag){case 5:return La(a.type);case 16:return La(\"Lazy\");case 13:return La(\"Suspense\");case 19:return La(\"SuspenseList\");case 0:case 2:case 15:return a=Na(a.type,!1),a;case 11:return a=Na(a.type.render,!1),a;case 1:return a=Na(a.type,!0),a;default:return\"\"}}\nfunction Pa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case wa:return\"Fragment\";case va:return\"Portal\";case za:return\"Profiler\";case xa:return\"StrictMode\";case Da:return\"Suspense\";case Ea:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ba:return(a.displayName||\"Context\")+\".Consumer\";case Aa:return(a._context.displayName||\"Context\")+\".Provider\";case Ca:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Fa:return b=a.displayName||null,null!==b?b:Pa(a.type)||\"Memo\";case Ga:b=a._payload;a=a._init;try{return Pa(a(b))}catch(c){}}return null}\nfunction Qa(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Pa(b);case 8:return b===xa?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Ra(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Sa(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ta(a){var b=Sa(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Ua(a){a._valueTracker||(a._valueTracker=Ta(a))}function Va(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Sa(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Wa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Xa(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Ya(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Ra(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Za(a,b){b=b.checked;null!=b&&sa(a,\"checked\",b,!1)}\nfunction $a(a,b){Za(a,b);var c=Ra(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?bb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&bb(a,b.type,Ra(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction cb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction bb(a,b,c){if(\"number\"!==b||Wa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var db=Array.isArray;\nfunction eb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=lb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction nb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar ob={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},pb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(ob).forEach(function(a){pb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);ob[b]=ob[a]})});function qb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||ob.hasOwnProperty(a)&&ob[a]?(\"\"+b).trim():b+\"px\"}\nfunction rb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=qb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var sb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction tb(a,b){if(b){if(sb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction ub(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var vb=null;function wb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var xb=null,yb=null,zb=null;\nfunction Ab(a){if(a=Bb(a)){if(\"function\"!==typeof xb)throw Error(p(280));var b=a.stateNode;b&&(b=Cb(b),xb(a.stateNode,a.type,b))}}function Db(a){yb?zb?zb.push(a):zb=[a]:yb=a}function Eb(){if(yb){var a=yb,b=zb;zb=yb=null;Ab(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(oc(a)/pc|0)|0}var qc=64,rc=4194304;\nfunction sc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function tc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=sc(h):(f&=g,0!==f&&(d=sc(f)))}else g=c&~e,0!==g?d=sc(g):0!==f&&(d=sc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction zc(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-nc(b);a[b]=c}function Ac(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=ae),de=String.fromCharCode(32),ee=!1;\nfunction fe(a,b){switch(a){case \"keyup\":return-1!==Zd.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function ge(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var he=!1;function ie(a,b){switch(a){case \"compositionend\":return ge(b);case \"keypress\":if(32!==b.which)return null;ee=!0;return de;case \"textInput\":return a=b.data,a===de&&ee?null:a;default:return null}}\nfunction je(a,b){if(he)return\"compositionend\"===a||!$d&&fe(a,b)?(a=md(),ld=kd=jd=null,he=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Ie(c)}}function Ke(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Ke(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Le(){for(var a=window,b=Wa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Wa(a.document)}return b}function Me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Ne(a){var b=Le(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Ke(c.ownerDocument.documentElement,c)){if(null!==d&&Me(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Je(c,f);var g=Je(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Pe=null,Qe=null,Re=null,Se=!1;\nfunction Te(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Se||null==Pe||Pe!==Wa(d)||(d=Pe,\"selectionStart\"in d&&Me(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Re&&He(Re,d)||(Re=d,d=ne(Qe,\"onSelect\"),0Sf||(a.current=Rf[Sf],Rf[Sf]=null,Sf--)}function G(a,b){Sf++;Rf[Sf]=a.current;a.current=b}var Uf={},H=Tf(Uf),Vf=Tf(!1),Wf=Uf;function Xf(a,b){var c=a.type.contextTypes;if(!c)return Uf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Yf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Zf(){E(Vf);E(H)}function $f(a,b,c){if(H.current!==Uf)throw Error(p(168));G(H,b);G(Vf,c)}function ag(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Qa(a)||\"Unknown\",e));return A({},c,d)}\nfunction bg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Uf;Wf=H.current;G(H,a);G(Vf,Vf.current);return!0}function cg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=ag(a,b,Wf),d.__reactInternalMemoizedMergedChildContext=a,E(Vf),E(H),G(H,a)):E(Vf);G(Vf,c)}var dg=null,eg=!1,fg=!1;function gg(a){null===dg?dg=[a]:dg.push(a)}function hg(a){eg=!0;gg(a)}\nfunction ig(){if(!fg&&null!==dg){fg=!0;var a=0,b=C;try{var c=dg;for(C=1;a>=g;e-=g;Yg=1<<32-nc(b)+e|c<m?(x=r,r=null):x=r.sibling;var v=q(e,r,h[m],k);if(null===v){null===r&&(r=x);break}a&&r&&null===v.alternate&&b(e,r);g=f(v,g,m);null===n?l=v:n.sibling=v;n=v;r=x}if(m===h.length)return c(e,r),I&&$g(e,m),l;if(null===r){for(;mr?(x=m,m=null):x=m.sibling;var w=q(e,m,v.value,k);if(null===w){null===m&&(m=x);break}a&&m&&null===w.alternate&&b(e,m);g=f(w,g,r);null===n?l=w:n.sibling=w;n=w;m=x}if(v.done)return c(e,\nm),I&&$g(e,r),l;if(null===m){for(;!v.done;r++,v=h.next())v=u(e,v.value,k),null!==v&&(g=f(v,g,r),null===n?l=v:n.sibling=v,n=v);I&&$g(e,r);return l}for(m=d(e,m);!v.done;r++,v=h.next())v=y(m,e,r,v.value,k),null!==v&&(a&&null!==v.alternate&&m.delete(null===v.key?r:v.key),g=f(v,g,r),null===n?l=v:n.sibling=v,n=v);a&&m.forEach(function(a){return b(e,a)});I&&$g(e,r);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===wa&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case ua:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===wa){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ga&&rh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=ph(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===wa?(d=xh(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=vh(f.type,f.key,f.props,null,a.mode,h),h.ref=ph(a,d,f),h.return=a,a=h)}return g(a);case va:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=wh(f,a.mode,h);d.return=a;a=d}return g(a);case Ga:return l=f._init,J(a,d,l(f._payload),h)}if(db(f))return m(a,d,f,h);if(Ja(f))return w(a,d,f,h);qh(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=uh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var yh=sh(!0),zh=sh(!1),Ah={},Bh=Tf(Ah),Ch=Tf(Ah),Dh=Tf(Ah);function Eh(a){if(a===Ah)throw Error(p(174));return a}function Fh(a,b){G(Dh,b);G(Ch,a);G(Bh,Ah);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:kb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=kb(b,a)}E(Bh);G(Bh,b)}function Gh(){E(Bh);E(Ch);E(Dh)}\nfunction Hh(a){Eh(Dh.current);var b=Eh(Bh.current);var c=kb(b,a.type);b!==c&&(G(Ch,a),G(Bh,c))}function Ih(a){Ch.current===a&&(E(Bh),E(Ch))}var K=Tf(0);\nfunction Jh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Kh=[];\nfunction Lh(){for(var a=0;ac?c:4;a(!0);var d=Nh.transition;Nh.transition={};try{a(!1),b()}finally{C=c,Nh.transition=d}}function Bi(){return ai().memoizedState}\nfunction Ci(a,b,c){var d=Kg(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};Di(a)?Ei(b,c):(Fi(a,b,c),c=Jg(),a=Lg(a,d,c),null!==a&&Gi(a,b,d))}\nfunction ni(a,b,c){var d=Kg(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Di(a))Ei(b,e);else{Fi(a,b,e);var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(Ge(h,g))return}catch(k){}finally{}c=Jg();a=Lg(a,d,c);null!==a&&Gi(a,b,d)}}function Di(a){var b=a.alternate;return a===L||null!==b&&b===L}\nfunction Ei(a,b){Qh=Ph=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Fi(a,b,c){Bg(a)?(a=b.interleaved,null===a?(c.next=c,null===vg?vg=[b]:vg.push(b)):(c.next=a.next,a.next=c),b.interleaved=c):(a=b.pending,null===a?c.next=c:(c.next=a.next,a.next=c),b.pending=c)}function Gi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Bc(a,c)}}\nvar Yh={readContext:ug,useCallback:O,useContext:O,useEffect:O,useImperativeHandle:O,useInsertionEffect:O,useLayoutEffect:O,useMemo:O,useReducer:O,useRef:O,useState:O,useDebugValue:O,useDeferredValue:O,useTransition:O,useMutableSource:O,useSyncExternalStore:O,useId:O,unstable_isNewReconciler:!1},Vh={readContext:ug,useCallback:function(a,b){$h().memoizedState=[a,void 0===b?null:b];return a},useContext:ug,useEffect:ri,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return pi(4194308,\n4,ui.bind(null,b,a),c)},useLayoutEffect:function(a,b){return pi(4194308,4,a,b)},useInsertionEffect:function(a,b){return pi(4,2,a,b)},useMemo:function(a,b){var c=$h();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=$h();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Ci.bind(null,L,a);return[d.memoizedState,a]},useRef:function(a){var b=\n$h();a={current:a};return b.memoizedState=a},useState:mi,useDebugValue:wi,useDeferredValue:function(a){return $h().memoizedState=a},useTransition:function(){var a=mi(!1),b=a[0];a=Ai.bind(null,a[1]);$h().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=L,e=$h();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===P)throw Error(p(349));0!==(Oh&30)||ki(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;ri(hi.bind(null,d,\nf,a),[a]);d.flags|=2048;ii(9,ji.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=$h(),b=P.identifierPrefix;if(I){var c=Zg;var d=Yg;c=(d&~(1<<32-nc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Rh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Nf]=b;a[Of]=d;Ti(a,b,!1,!1);b.stateNode=a;a:{g=ub(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eaj&&(b.flags|=\n128,d=!0,Xi(f,!1),b.lanes=4194304)}else{if(!d)if(a=Jh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Xi(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return Q(b),null}else 2*B()-f.renderingStartTime>aj&&1073741824!==c&&(b.flags|=128,d=!0,Xi(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=b,f.tail=b.sibling,f.renderingStartTime=\nB(),b.sibling=null,c=K.current,G(K,d?c&1|2:c&1),b;Q(b);return null;case 22:case 23:return bj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(cj&1073741824)&&(Q(b),b.subtreeFlags&6&&(b.flags|=8192)):Q(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}var dj=ta.ReactCurrentOwner,tg=!1;function ej(a,b,c,d){b.child=null===a?zh(b,null,c,d):yh(b,a.child,c,d)}\nfunction fj(a,b,c,d,e){c=c.render;var f=b.ref;sg(b,e);d=Uh(a,b,c,d,f,e);c=Zh();if(null!==a&&!tg)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,gj(a,b,e);I&&c&&bh(b);b.flags|=1;ej(a,b,d,e);return b.child}\nfunction hj(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!ij(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,jj(a,b,f,d,e);a=vh(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:He;if(c(g,d)&&a.ref===b.ref)return gj(a,b,e)}b.flags|=1;a=th(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction jj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(He(f,d)&&a.ref===b.ref)if(tg=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(tg=!0);else return b.lanes=a.lanes,gj(a,b,e)}return kj(a,b,c,d,e)}\nfunction lj(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(mj,cj),cj|=c;else if(0!==(c&1073741824))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},d=null!==f?f.baseLanes:c,G(mj,cj),cj|=d;else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(mj,cj),cj|=a,null;\nelse null!==f?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(mj,cj),cj|=d;ej(a,b,e,c);return b.child}function nj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function kj(a,b,c,d,e){var f=Yf(c)?Wf:H.current;f=Xf(b,f);sg(b,e);c=Uh(a,b,c,d,f,e);d=Zh();if(null!==a&&!tg)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,gj(a,b,e);I&&d&&bh(b);b.flags|=1;ej(a,b,c,e);return b.child}\nfunction oj(a,b,c,d,e){if(Yf(c)){var f=!0;bg(b)}else f=!1;sg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),Og(b,c,d),Qg(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=ug(l):(l=Yf(c)?Wf:H.current,l=Xf(b,l));var n=c.getDerivedStateFromProps,u=\"function\"===typeof n||\"function\"===typeof g.getSnapshotBeforeUpdate;u||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Pg(b,g,d,l);wg=!1;var q=b.memoizedState;g.state=q;Eg(b,d,g,e);k=b.memoizedState;h!==d||q!==k||Vf.current||wg?(\"function\"===typeof n&&(Ig(b,c,n,d),k=b.memoizedState),(h=wg||Ng(b,c,h,d,q,k,l))?(u||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.flags|=4194308)):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;yg(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:kg(b.type,h);g.props=l;u=b.pendingProps;q=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=ug(k):(k=Yf(c)?Wf:H.current,k=Xf(b,k));var y=c.getDerivedStateFromProps;(n=\"function\"===\ntypeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==u||q!==k)&&Pg(b,g,d,k);wg=!1;q=b.memoizedState;g.state=q;Eg(b,d,g,e);var m=b.memoizedState;h!==u||q!==m||Vf.current||wg?(\"function\"===typeof y&&(Ig(b,c,y,d),m=b.memoizedState),(l=wg||Ng(b,c,l,d,q,m,k)||!1)?(n||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&\ng.componentWillUpdate(d,m,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,m,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&q===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&q===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=m),g.props=d,g.state=m,g.context=\nk,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&q===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&q===a.memoizedState||(b.flags|=1024),d=!1)}return pj(a,b,c,d,f,e)}\nfunction pj(a,b,c,d,e,f){nj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&cg(b,c,!1),gj(a,b,f);d=b.stateNode;dj.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=yh(b,a.child,null,f),b.child=yh(b,null,h,f)):ej(a,b,h,f);b.memoizedState=d.state;e&&cg(b,c,!0);return b.child}function qj(a){var b=a.stateNode;b.pendingContext?$f(a,b.pendingContext,b.pendingContext!==b.context):b.context&&$f(a,b.context,!1);Fh(a,b.containerInfo)}\nfunction rj(a,b,c,d,e){nh();oh(e);b.flags|=256;ej(a,b,c,d);return b.child}var sj={dehydrated:null,treeContext:null,retryLane:0};function tj(a){return{baseLanes:a,cachePool:null,transitions:null}}function uj(a,b){return{baseLanes:a.baseLanes|b,cachePool:null,transitions:a.transitions}}\nfunction vj(a,b,c){var d=b.pendingProps,e=K.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(K,e&1);if(null===a){kh(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;e=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,e={mode:\"hidden\",children:e},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ne):f=wj(e,d,0,null),a=xh(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=tj(c),b.memoizedState=sj,a):xj(b,e)}e=a.memoizedState;if(null!==e){h=e.dehydrated;if(null!==h){if(g){if(b.flags&256)return b.flags&=-257,yj(a,b,c,Error(p(422)));if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=wj({mode:\"visible\",children:d.children},e,0,null);f=xh(f,e,c,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&yh(b,a.child,\nnull,c);b.child.memoizedState=tj(c);b.memoizedState=sj;return f}if(0===(b.mode&1))b=yj(a,b,c,null);else if(\"$!\"===h.data)b=yj(a,b,c,Error(p(419)));else if(d=0!==(c&a.childLanes),tg||d){d=P;if(null!==d){switch(c&-c){case 4:f=2;break;case 16:f=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:f=32;break;case 536870912:f=\n268435456;break;default:f=0}d=0!==(f&(d.suspendedLanes|c))?0:f;0!==d&&d!==e.retryLane&&(e.retryLane=d,Lg(a,d,-1))}$i();b=yj(a,b,c,Error(p(421)))}else\"$?\"===h.data?(b.flags|=128,b.child=a.child,b=zj.bind(null,a),h._reactRetry=b,b=null):(c=e.treeContext,eh=Kf(h.nextSibling),dh=b,I=!0,fh=null,null!==c&&(Vg[Wg++]=Yg,Vg[Wg++]=Zg,Vg[Wg++]=Xg,Yg=c.id,Zg=c.overflow,Xg=b),b=xj(b,b.pendingProps.children),b.flags|=4096);return b}if(f)return d=Aj(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,\nf.memoizedState=null===e?tj(c):uj(e,c),f.childLanes=a.childLanes&~c,b.memoizedState=sj,d;c=Bj(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=Aj(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?tj(c):uj(e,c),f.childLanes=a.childLanes&~c,b.memoizedState=sj,d;c=Bj(a,b,d.children,c);b.memoizedState=null;return c}function xj(a,b){b=wj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}\nfunction Bj(a,b,c,d){var e=a.child;a=e.sibling;c=th(e,{mode:\"visible\",children:c});0===(b.mode&1)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(d=b.deletions,null===d?(b.deletions=[a],b.flags|=16):d.push(a));return b.child=c}\nfunction Aj(a,b,c,d,e){var f=b.mode;a=a.child;var g=a.sibling,h={mode:\"hidden\",children:c};0===(f&1)&&b.child!==a?(c=b.child,c.childLanes=0,c.pendingProps=h,b.deletions=null):(c=th(a,h),c.subtreeFlags=a.subtreeFlags&14680064);null!==g?d=th(g,d):(d=xh(d,f,e,null),d.flags|=2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function yj(a,b,c,d){null!==d&&oh(d);yh(b,a.child,null,c);a=xj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction Cj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);rg(a.return,b,c)}function Dj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction Ej(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;ej(a,b,d.children,c);d=K.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&Cj(a,c,b);else if(19===a.tag)Cj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(K,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Jh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);Dj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Jh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}Dj(b,!0,c,null,f);break;case \"together\":Dj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction gj(a,b,c){null!==a&&(b.dependencies=a.dependencies);Fg|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=th(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=th(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction Fj(a,b,c){switch(b.tag){case 3:qj(b);nh();break;case 5:Hh(b);break;case 1:Yf(b.type)&&bg(b);break;case 4:Fh(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(lg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(K,K.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return vj(a,b,c);G(K,K.current&1);a=gj(a,b,c);return null!==a?a.sibling:null}G(K,K.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return Ej(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(K,K.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,lj(a,b,c)}return gj(a,b,c)}\nfunction Gj(a,b){ch(b);switch(b.tag){case 1:return Yf(b.type)&&Zf(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Gh(),E(Vf),E(H),Lh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Ih(b),null;case 13:E(K);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));nh()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(K),null;case 4:return Gh(),null;case 10:return qg(b.type._context),null;case 22:case 23:return bj(),\nnull;case 24:return null;default:return null}}var Hj=!1,S=!1,Ij=\"function\"===typeof WeakSet?WeakSet:Set,T=null;function Jj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){U(a,b,d)}else c.current=null}function Kj(a,b,c){try{c()}catch(d){U(a,b,d)}}var Lj=!1;\nfunction Mj(a,b){Bf=cd;a=Le();if(Me(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(Z){c=null;break a}var g=0,h=-1,k=-1,l=0,n=0,u=a,q=null;b:for(;;){for(var y;;){u!==c||0!==e&&3!==u.nodeType||(h=g+e);u!==f||0!==d&&3!==u.nodeType||(k=g+d);3===u.nodeType&&(g+=\nu.nodeValue.length);if(null===(y=u.firstChild))break;q=u;u=y}for(;;){if(u===a)break b;q===c&&++l===e&&(h=g);q===f&&++n===d&&(k=g);if(null!==(y=u.nextSibling))break;u=q;q=u.parentNode}u=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Cf={focusedElem:a,selectionRange:c};cd=!1;for(T=b;null!==T;)if(b=T,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,T=a;else for(;null!==T;){b=T;try{var m=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==m){var w=m.memoizedProps,J=m.memoizedState,v=b.stateNode,x=v.getSnapshotBeforeUpdate(b.elementType===b.type?w:kg(b.type,w),J);v.__reactInternalSnapshotBeforeUpdate=x}break;case 3:var r=b.stateNode.containerInfo;if(1===r.nodeType)r.textContent=\"\";else if(9===r.nodeType){var F=r.body;null!=F&&(F.textContent=\"\")}break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(Z){U(b,b.return,Z)}a=b.sibling;if(null!==a){a.return=b.return;T=a;break}T=b.return}m=Lj;Lj=!1;return m}\nfunction Nj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Kj(b,c,f)}e=e.next}while(e!==d)}}function Oj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Pj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Qj(a){var b=a.alternate;null!==b&&(a.alternate=null,Qj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Nf],delete b[Of],delete b[nf],delete b[Pf],delete b[Qf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Rj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Sj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Rj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Tj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Af));else if(4!==d&&(a=a.child,null!==a))for(Tj(a,b,c),a=a.sibling;null!==a;)Tj(a,b,c),a=a.sibling}\nfunction Uj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Uj(a,b,c),a=a.sibling;null!==a;)Uj(a,b,c),a=a.sibling}var V=null,Vj=!1;function Wj(a,b,c){for(c=c.child;null!==c;)Xj(a,b,c),c=c.sibling}\nfunction Xj(a,b,c){if(kc&&\"function\"===typeof kc.onCommitFiberUnmount)try{kc.onCommitFiberUnmount(jc,c)}catch(h){}switch(c.tag){case 5:S||Jj(c,b);case 6:var d=V,e=Vj;V=null;Wj(a,b,c);V=d;Vj=e;null!==V&&(Vj?(a=V,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):V.removeChild(c.stateNode));break;case 18:null!==V&&(Vj?(a=V,c=c.stateNode,8===a.nodeType?Jf(a.parentNode,c):1===a.nodeType&&Jf(a,c),ad(a)):Jf(V,c.stateNode));break;case 4:d=V;e=Vj;V=c.stateNode.containerInfo;Vj=!0;\nWj(a,b,c);V=d;Vj=e;break;case 0:case 11:case 14:case 15:if(!S&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Kj(c,b,g):0!==(f&4)&&Kj(c,b,g));e=e.next}while(e!==d)}Wj(a,b,c);break;case 1:if(!S&&(Jj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){U(c,b,h)}Wj(a,b,c);break;case 21:Wj(a,b,c);break;case 22:c.mode&1?(S=(d=S)||null!==\nc.memoizedState,Wj(a,b,c),S=d):Wj(a,b,c);break;default:Wj(a,b,c)}}function Yj(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Ij);b.forEach(function(b){var d=Zj.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ak(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*jk(d/1960))-d;if(10a?16:a;if(null===uk)var d=!1;else{a=uk;uk=null;vk=0;if(0!==(W&6))throw Error(p(331));var e=W;W|=4;for(T=a.current;null!==T;){var f=T,g=f.child;if(0!==(T.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-dk?Jk(a,0):pk|=c);Ck(a,b)}function Xk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=rc,rc<<=1,0===(rc&130023424)&&(rc=4194304)));var c=Jg();a=Ak(a,b);null!==a&&(zc(a,b,c),Ck(a,c))}function zj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Xk(a,c)}\nfunction Zj(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Xk(a,c)}var Uk;\nUk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Vf.current)tg=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return tg=!1,Fj(a,b,c);tg=0!==(a.flags&131072)?!0:!1}else tg=!1,I&&0!==(b.flags&1048576)&&ah(b,Ug,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;var e=Xf(b,H.current);sg(b,c);e=Uh(null,b,d,a,e,c);var f=Zh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?\n(b.tag=1,b.memoizedState=null,b.updateQueue=null,Yf(d)?(f=!0,bg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,xg(b),e.updater=Mg,b.stateNode=e,e._reactInternals=b,Qg(b,d,a,c),b=pj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&bh(b),ej(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Yk(d);a=kg(d,a);switch(e){case 0:b=kj(null,b,d,a,c);break a;case 1:b=oj(null,b,\nd,a,c);break a;case 11:b=fj(null,b,d,a,c);break a;case 14:b=hj(null,b,d,kg(d.type,a),c);break a}throw Error(p(306,d,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:kg(d,e),kj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:kg(d,e),oj(a,b,d,e,c);case 3:a:{qj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;yg(a,b);Eg(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,\ncache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=f,b.memoizedState=f,b.flags&256){e=Error(p(423));b=rj(a,b,d,c,e);break a}else if(d!==e){e=Error(p(424));b=rj(a,b,d,c,e);break a}else for(eh=Kf(b.stateNode.containerInfo.firstChild),dh=b,I=!0,fh=null,c=zh(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{nh();if(d===e){b=gj(a,b,c);break a}ej(a,b,d,c)}b=b.child}return b;case 5:return Hh(b),null===a&&kh(b),d=b.type,e=\nb.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Df(d,e)?g=null:null!==f&&Df(d,f)&&(b.flags|=32),nj(a,b),ej(a,b,g,c),b.child;case 6:return null===a&&kh(b),null;case 13:return vj(a,b,c);case 4:return Fh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=yh(b,null,d,c):ej(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:kg(d,e),fj(a,b,d,e,c);case 7:return ej(a,b,b.pendingProps,c),b.child;case 8:return ej(a,b,b.pendingProps.children,c),b.child;case 12:return ej(a,\nb,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;g=e.value;G(lg,d._currentValue);d._currentValue=g;if(null!==f)if(Ge(f.value,g)){if(f.children===e.children&&!Vf.current){b=gj(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=zg(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var n=l.pending;null===n?k.next=\nk:(k.next=n.next,n.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);rg(f.return,c,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);rg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}ej(a,b,e.children,c);b=b.child}return b;\ncase 9:return e=b.type,d=b.pendingProps.children,sg(b,c),e=ug(e),d=d(e),b.flags|=1,ej(a,b,d,c),b.child;case 14:return d=b.type,e=kg(d,b.pendingProps),e=kg(d.type,e),hj(a,b,d,e,c);case 15:return jj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:kg(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),b.tag=1,Yf(d)?(a=!0,bg(b)):a=!1,sg(b,c),Og(b,d,e),Qg(b,d,e,c),pj(null,b,d,!0,a,c);case 19:return Ej(a,b,c);case 22:return lj(a,b,c)}throw Error(p(156,\nb.tag));};function Ek(a,b){return $b(a,b)}function Zk(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function hh(a,b,c,d){return new Zk(a,b,c,d)}\nfunction ij(a){a=a.prototype;return!(!a||!a.isReactComponent)}function Yk(a){if(\"function\"===typeof a)return ij(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Ca)return 11;if(a===Fa)return 14}return 2}\nfunction th(a,b){var c=a.alternate;null===c?(c=hh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction vh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)ij(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case wa:return xh(c.children,e,f,b);case xa:g=8;e|=8;break;case za:return a=hh(12,c,b,e|2),a.elementType=za,a.lanes=f,a;case Da:return a=hh(13,c,b,e),a.elementType=Da,a.lanes=f,a;case Ea:return a=hh(19,c,b,e),a.elementType=Ea,a.lanes=f,a;case Ha:return wj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Aa:g=10;break a;case Ba:g=9;break a;case Ca:g=11;\nbreak a;case Fa:g=14;break a;case Ga:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=hh(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function xh(a,b,c,d){a=hh(7,a,d,b);a.lanes=c;return a}function wj(a,b,c,d){a=hh(22,a,d,b);a.elementType=Ha;a.lanes=c;a.stateNode={};return a}function uh(a,b,c){a=hh(6,a,null,b);a.lanes=c;return a}\nfunction wh(a,b,c){b=hh(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction $k(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=yc(0);this.expirationTimes=yc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=yc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function al(a,b,c,d,e,f,g,h,k){a=new $k(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=hh(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};xg(f);return a}function bl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Actions represent the type of change to a location value.\n */\nexport enum Action {\n /**\n * A POP indicates a change to an arbitrary index in the history stack, such\n * as a back or forward navigation. It does not describe the direction of the\n * navigation, only that the current index changed.\n *\n * Note: This is the default action for newly created history objects.\n */\n Pop = \"POP\",\n\n /**\n * A PUSH indicates a new entry being added to the history stack, such as when\n * a link is clicked and a new page loads. When this happens, all subsequent\n * entries in the stack are lost.\n */\n Push = \"PUSH\",\n\n /**\n * A REPLACE indicates the entry at the current index in the history stack\n * being replaced by a new one.\n */\n Replace = \"REPLACE\",\n}\n\n/**\n * The pathname, search, and hash values of a URL.\n */\nexport interface Path {\n /**\n * A URL pathname, beginning with a /.\n */\n pathname: string;\n\n /**\n * A URL search string, beginning with a ?.\n */\n search: string;\n\n /**\n * A URL fragment identifier, beginning with a #.\n */\n hash: string;\n}\n\n// TODO: (v7) Change the Location generic default from `any` to `unknown` and\n// remove Remix `useLocation` wrapper.\n\n/**\n * An entry in a history stack. A location contains information about the\n * URL path, as well as possibly some arbitrary state and a key.\n */\nexport interface Location extends Path {\n /**\n * A value of arbitrary data associated with this location.\n */\n state: State;\n\n /**\n * A unique string associated with this location. May be used to safely store\n * and retrieve data in some other storage API, like `localStorage`.\n *\n * Note: This value is always \"default\" on the initial location.\n */\n key: string;\n}\n\n/**\n * A change to the current location.\n */\nexport interface Update {\n /**\n * The action that triggered the change.\n */\n action: Action;\n\n /**\n * The new location.\n */\n location: Location;\n\n /**\n * The delta between this location and the former location in the history stack\n */\n delta: number | null;\n}\n\n/**\n * A function that receives notifications about location changes.\n */\nexport interface Listener {\n (update: Update): void;\n}\n\n/**\n * Describes a location that is the destination of some navigation, either via\n * `history.push` or `history.replace`. This may be either a URL or the pieces\n * of a URL path.\n */\nexport type To = string | Partial;\n\n/**\n * A history is an interface to the navigation stack. The history serves as the\n * source of truth for the current location, as well as provides a set of\n * methods that may be used to change it.\n *\n * It is similar to the DOM's `window.history` object, but with a smaller, more\n * focused API.\n */\nexport interface History {\n /**\n * The last action that modified the current location. This will always be\n * Action.Pop when a history instance is first created. This value is mutable.\n */\n readonly action: Action;\n\n /**\n * The current location. This value is mutable.\n */\n readonly location: Location;\n\n /**\n * Returns a valid href for the given `to` value that may be used as\n * the value of an attribute.\n *\n * @param to - The destination URL\n */\n createHref(to: To): string;\n\n /**\n * Returns a URL for the given `to` value\n *\n * @param to - The destination URL\n */\n createURL(to: To): URL;\n\n /**\n * Encode a location the same way window.history would do (no-op for memory\n * history) so we ensure our PUSH/REPLACE navigations for data routers\n * behave the same as POP\n *\n * @param to Unencoded path\n */\n encodeLocation(to: To): Path;\n\n /**\n * Pushes a new location onto the history stack, increasing its length by one.\n * If there were any entries in the stack after the current one, they are\n * lost.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n push(to: To, state?: any): void;\n\n /**\n * Replaces the current location in the history stack with a new one. The\n * location that was replaced will no longer be available.\n *\n * @param to - The new URL\n * @param state - Data to associate with the new location\n */\n replace(to: To, state?: any): void;\n\n /**\n * Navigates `n` entries backward/forward in the history stack relative to the\n * current index. For example, a \"back\" navigation would use go(-1).\n *\n * @param delta - The delta in the stack index\n */\n go(delta: number): void;\n\n /**\n * Sets up a listener that will be called whenever the current location\n * changes.\n *\n * @param listener - A function that will be called when the location changes\n * @returns unlisten - A function that may be used to stop listening\n */\n listen(listener: Listener): () => void;\n}\n\ntype HistoryState = {\n usr: any;\n key?: string;\n idx: number;\n};\n\nconst PopStateEventType = \"popstate\";\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Memory History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A user-supplied object that describes a location. Used when providing\n * entries to `createMemoryHistory` via its `initialEntries` option.\n */\nexport type InitialEntry = string | Partial;\n\nexport type MemoryHistoryOptions = {\n initialEntries?: InitialEntry[];\n initialIndex?: number;\n v5Compat?: boolean;\n};\n\n/**\n * A memory history stores locations in memory. This is useful in stateful\n * environments where there is no web browser, such as node tests or React\n * Native.\n */\nexport interface MemoryHistory extends History {\n /**\n * The current index in the history stack.\n */\n readonly index: number;\n}\n\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nexport function createMemoryHistory(\n options: MemoryHistoryOptions = {}\n): MemoryHistory {\n let { initialEntries = [\"/\"], initialIndex, v5Compat = false } = options;\n let entries: Location[]; // Declare so we can access from createMemoryLocation\n entries = initialEntries.map((entry, index) =>\n createMemoryLocation(\n entry,\n typeof entry === \"string\" ? null : entry.state,\n index === 0 ? \"default\" : undefined\n )\n );\n let index = clampIndex(\n initialIndex == null ? entries.length - 1 : initialIndex\n );\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n function clampIndex(n: number): number {\n return Math.min(Math.max(n, 0), entries.length - 1);\n }\n function getCurrentLocation(): Location {\n return entries[index];\n }\n function createMemoryLocation(\n to: To,\n state: any = null,\n key?: string\n ): Location {\n let location = createLocation(\n entries ? getCurrentLocation().pathname : \"/\",\n to,\n state,\n key\n );\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in memory history: ${JSON.stringify(\n to\n )}`\n );\n return location;\n }\n\n function createHref(to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n let history: MemoryHistory = {\n get index() {\n return index;\n },\n get action() {\n return action;\n },\n get location() {\n return getCurrentLocation();\n },\n createHref,\n createURL(to) {\n return new URL(createHref(to), \"http://localhost\");\n },\n encodeLocation(to: To) {\n let path = typeof to === \"string\" ? parsePath(to) : to;\n return {\n pathname: path.pathname || \"\",\n search: path.search || \"\",\n hash: path.hash || \"\",\n };\n },\n push(to, state) {\n action = Action.Push;\n let nextLocation = createMemoryLocation(to, state);\n index += 1;\n entries.splice(index, entries.length, nextLocation);\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 1 });\n }\n },\n replace(to, state) {\n action = Action.Replace;\n let nextLocation = createMemoryLocation(to, state);\n entries[index] = nextLocation;\n if (v5Compat && listener) {\n listener({ action, location: nextLocation, delta: 0 });\n }\n },\n go(delta) {\n action = Action.Pop;\n let nextIndex = clampIndex(index + delta);\n let nextLocation = entries[nextIndex];\n index = nextIndex;\n if (listener) {\n listener({ action, location: nextLocation, delta });\n }\n },\n listen(fn: Listener) {\n listener = fn;\n return () => {\n listener = null;\n };\n },\n };\n\n return history;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Browser History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A browser history stores the current location in regular URLs in a web\n * browser environment. This is the standard for most web apps and provides the\n * cleanest URLs the browser's address bar.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#browserhistory\n */\nexport interface BrowserHistory extends UrlHistory {}\n\nexport type BrowserHistoryOptions = UrlHistoryOptions;\n\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nexport function createBrowserHistory(\n options: BrowserHistoryOptions = {}\n): BrowserHistory {\n function createBrowserLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let { pathname, search, hash } = window.location;\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createBrowserHref(window: Window, to: To) {\n return typeof to === \"string\" ? to : createPath(to);\n }\n\n return getUrlBasedHistory(\n createBrowserLocation,\n createBrowserHref,\n null,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Hash History\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A hash history stores the current location in the fragment identifier portion\n * of the URL in a web browser environment.\n *\n * This is ideal for apps that do not control the server for some reason\n * (because the fragment identifier is never sent to the server), including some\n * shared hosting environments that do not provide fine-grained controls over\n * which pages are served at which URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#hashhistory\n */\nexport interface HashHistory extends UrlHistory {}\n\nexport type HashHistoryOptions = UrlHistoryOptions;\n\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nexport function createHashHistory(\n options: HashHistoryOptions = {}\n): HashHistory {\n function createHashLocation(\n window: Window,\n globalHistory: Window[\"history\"]\n ) {\n let {\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n } = parsePath(window.location.hash.substr(1));\n\n // Hash URL should always have a leading / just like window.location.pathname\n // does, so if an app ends up at a route like /#something then we add a\n // leading slash so all of our path-matching behaves the same as if it would\n // in a browser router. This is particularly important when there exists a\n // root splat route () since that matches internally against\n // \"/*\" and we'd expect /#something to 404 in a hash router app.\n if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n pathname = \"/\" + pathname;\n }\n\n return createLocation(\n \"\",\n { pathname, search, hash },\n // state defaults to `null` because `window.history.state` does\n (globalHistory.state && globalHistory.state.usr) || null,\n (globalHistory.state && globalHistory.state.key) || \"default\"\n );\n }\n\n function createHashHref(window: Window, to: To) {\n let base = window.document.querySelector(\"base\");\n let href = \"\";\n\n if (base && base.getAttribute(\"href\")) {\n let url = window.location.href;\n let hashIndex = url.indexOf(\"#\");\n href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n }\n\n return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n }\n\n function validateHashLocation(location: Location, to: To) {\n warning(\n location.pathname.charAt(0) === \"/\",\n `relative pathnames are not supported in hash history.push(${JSON.stringify(\n to\n )})`\n );\n }\n\n return getUrlBasedHistory(\n createHashLocation,\n createHashHref,\n validateHashLocation,\n options\n );\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region UTILS\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * @private\n */\nexport function invariant(value: boolean, message?: string): asserts value;\nexport function invariant(\n value: T | null | undefined,\n message?: string\n): asserts value is T;\nexport function invariant(value: any, message?: string) {\n if (value === false || value === null || typeof value === \"undefined\") {\n throw new Error(message);\n }\n}\n\nexport function warning(cond: any, message: string) {\n if (!cond) {\n // eslint-disable-next-line no-console\n if (typeof console !== \"undefined\") console.warn(message);\n\n try {\n // Welcome to debugging history!\n //\n // This error is thrown as a convenience, so you can more easily\n // find the source for a warning that appears in the console by\n // enabling \"pause on exceptions\" in your JavaScript debugger.\n throw new Error(message);\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}\n\nfunction createKey() {\n return Math.random().toString(36).substr(2, 8);\n}\n\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location: Location, index: number): HistoryState {\n return {\n usr: location.state,\n key: location.key,\n idx: index,\n };\n}\n\n/**\n * Creates a Location object with a unique key from the given Path\n */\nexport function createLocation(\n current: string | Location,\n to: To,\n state: any = null,\n key?: string\n): Readonly {\n let location: Readonly = {\n pathname: typeof current === \"string\" ? current : current.pathname,\n search: \"\",\n hash: \"\",\n ...(typeof to === \"string\" ? parsePath(to) : to),\n state,\n // TODO: This could be cleaned up. push/replace should probably just take\n // full Locations now and avoid the need to run through this flow at all\n // But that's a pretty big refactor to the current test suite so going to\n // keep as is for the time being and just let any incoming keys take precedence\n key: (to && (to as Location).key) || key || createKey(),\n };\n return location;\n}\n\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nexport function createPath({\n pathname = \"/\",\n search = \"\",\n hash = \"\",\n}: Partial) {\n if (search && search !== \"?\")\n pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n if (hash && hash !== \"#\")\n pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n return pathname;\n}\n\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nexport function parsePath(path: string): Partial {\n let parsedPath: Partial = {};\n\n if (path) {\n let hashIndex = path.indexOf(\"#\");\n if (hashIndex >= 0) {\n parsedPath.hash = path.substr(hashIndex);\n path = path.substr(0, hashIndex);\n }\n\n let searchIndex = path.indexOf(\"?\");\n if (searchIndex >= 0) {\n parsedPath.search = path.substr(searchIndex);\n path = path.substr(0, searchIndex);\n }\n\n if (path) {\n parsedPath.pathname = path;\n }\n }\n\n return parsedPath;\n}\n\nexport interface UrlHistory extends History {}\n\nexport type UrlHistoryOptions = {\n window?: Window;\n v5Compat?: boolean;\n};\n\nfunction getUrlBasedHistory(\n getLocation: (window: Window, globalHistory: Window[\"history\"]) => Location,\n createHref: (window: Window, to: To) => string,\n validateLocation: ((location: Location, to: To) => void) | null,\n options: UrlHistoryOptions = {}\n): UrlHistory {\n let { window = document.defaultView!, v5Compat = false } = options;\n let globalHistory = window.history;\n let action = Action.Pop;\n let listener: Listener | null = null;\n\n let index = getIndex()!;\n // Index should only be null when we initialize. If not, it's because the\n // user called history.pushState or history.replaceState directly, in which\n // case we should log a warning as it will result in bugs.\n if (index == null) {\n index = 0;\n globalHistory.replaceState({ ...globalHistory.state, idx: index }, \"\");\n }\n\n function getIndex(): number {\n let state = globalHistory.state || { idx: null };\n return state.idx;\n }\n\n function handlePop() {\n action = Action.Pop;\n let nextIndex = getIndex();\n let delta = nextIndex == null ? null : nextIndex - index;\n index = nextIndex;\n if (listener) {\n listener({ action, location: history.location, delta });\n }\n }\n\n function push(to: To, state?: any) {\n action = Action.Push;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex() + 1;\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n\n // try...catch because iOS limits us to 100 pushState calls :/\n try {\n globalHistory.pushState(historyState, \"\", url);\n } catch (error) {\n // If the exception is because `state` can't be serialized, let that throw\n // outwards just like a replace call would so the dev knows the cause\n // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n if (error instanceof DOMException && error.name === \"DataCloneError\") {\n throw error;\n }\n // They are going to lose state here, but there is no real\n // way to warn them about it since the page will refresh...\n window.location.assign(url);\n }\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 1 });\n }\n }\n\n function replace(to: To, state?: any) {\n action = Action.Replace;\n let location = createLocation(history.location, to, state);\n if (validateLocation) validateLocation(location, to);\n\n index = getIndex();\n let historyState = getHistoryState(location, index);\n let url = history.createHref(location);\n globalHistory.replaceState(historyState, \"\", url);\n\n if (v5Compat && listener) {\n listener({ action, location: history.location, delta: 0 });\n }\n }\n\n function createURL(to: To): URL {\n // window.location.origin is \"null\" (the literal string value) in Firefox\n // under certain conditions, notably when serving from a local HTML file\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n let base =\n window.location.origin !== \"null\"\n ? window.location.origin\n : window.location.href;\n\n let href = typeof to === \"string\" ? to : createPath(to);\n // Treating this as a full URL will strip any trailing spaces so we need to\n // pre-encode them since they might be part of a matching splat param from\n // an ancestor route\n href = href.replace(/ $/, \"%20\");\n invariant(\n base,\n `No window.location.(origin|href) available to create URL for href: ${href}`\n );\n return new URL(href, base);\n }\n\n let history: History = {\n get action() {\n return action;\n },\n get location() {\n return getLocation(window, globalHistory);\n },\n listen(fn: Listener) {\n if (listener) {\n throw new Error(\"A history only accepts one active listener\");\n }\n window.addEventListener(PopStateEventType, handlePop);\n listener = fn;\n\n return () => {\n window.removeEventListener(PopStateEventType, handlePop);\n listener = null;\n };\n },\n createHref(to) {\n return createHref(window, to);\n },\n createURL,\n encodeLocation(to) {\n // Encode a Location the same way window.location would\n let url = createURL(to);\n return {\n pathname: url.pathname,\n search: url.search,\n hash: url.hash,\n };\n },\n push,\n replace,\n go(n) {\n return globalHistory.go(n);\n },\n };\n\n return history;\n}\n\n//#endregion\n","import type { Location, Path, To } from \"./history\";\nimport { invariant, parsePath, warning } from \"./history\";\n\n/**\n * Map of routeId -> data returned from a loader/action/error\n */\nexport interface RouteData {\n [routeId: string]: any;\n}\n\nexport enum ResultType {\n data = \"data\",\n deferred = \"deferred\",\n redirect = \"redirect\",\n error = \"error\",\n}\n\n/**\n * Successful result from a loader or action\n */\nexport interface SuccessResult {\n type: ResultType.data;\n data: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Successful defer() result from a loader or action\n */\nexport interface DeferredResult {\n type: ResultType.deferred;\n deferredData: DeferredData;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Redirect result from a loader or action\n */\nexport interface RedirectResult {\n type: ResultType.redirect;\n // We keep the raw Response for redirects so we can return it verbatim\n response: Response;\n}\n\n/**\n * Unsuccessful result from a loader or action\n */\nexport interface ErrorResult {\n type: ResultType.error;\n error: unknown;\n statusCode?: number;\n headers?: Headers;\n}\n\n/**\n * Result from a loader or action - potentially successful or unsuccessful\n */\nexport type DataResult =\n | SuccessResult\n | DeferredResult\n | RedirectResult\n | ErrorResult;\n\n/**\n * Result from a loader or action called via dataStrategy\n */\nexport interface HandlerResult {\n type: \"data\" | \"error\";\n result: unknown; // data, Error, Response, DeferredData, DataWithResponseInit\n}\n\ntype LowerCaseFormMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\ntype UpperCaseFormMethod = Uppercase;\n\n/**\n * Users can specify either lowercase or uppercase form methods on `
`,\n * useSubmit(), ``, etc.\n */\nexport type HTMLFormMethod = LowerCaseFormMethod | UpperCaseFormMethod;\n\n/**\n * Active navigation/fetcher form methods are exposed in lowercase on the\n * RouterState\n */\nexport type FormMethod = LowerCaseFormMethod;\nexport type MutationFormMethod = Exclude;\n\n/**\n * In v7, active navigation/fetcher form methods are exposed in uppercase on the\n * RouterState. This is to align with the normalization done via fetch().\n */\nexport type V7_FormMethod = UpperCaseFormMethod;\nexport type V7_MutationFormMethod = Exclude;\n\nexport type FormEncType =\n | \"application/x-www-form-urlencoded\"\n | \"multipart/form-data\"\n | \"application/json\"\n | \"text/plain\";\n\n// Thanks https://github.com/sindresorhus/type-fest!\ntype JsonObject = { [Key in string]: JsonValue } & {\n [Key in string]?: JsonValue | undefined;\n};\ntype JsonArray = JsonValue[] | readonly JsonValue[];\ntype JsonPrimitive = string | number | boolean | null;\ntype JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\n/**\n * @private\n * Internal interface to pass around for action submissions, not intended for\n * external consumption\n */\nexport type Submission =\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: FormData;\n json: undefined;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: JsonValue;\n text: undefined;\n }\n | {\n formMethod: FormMethod | V7_FormMethod;\n formAction: string;\n formEncType: FormEncType;\n formData: undefined;\n json: undefined;\n text: string;\n };\n\n/**\n * @private\n * Arguments passed to route loader/action functions. Same for now but we keep\n * this as a private implementation detail in case they diverge in the future.\n */\ninterface DataFunctionArgs {\n request: Request;\n params: Params;\n context?: Context;\n}\n\n// TODO: (v7) Change the defaults from any to unknown in and remove Remix wrappers:\n// ActionFunction, ActionFunctionArgs, LoaderFunction, LoaderFunctionArgs\n// Also, make them a type alias instead of an interface\n\n/**\n * Arguments passed to loader functions\n */\nexport interface LoaderFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Arguments passed to action functions\n */\nexport interface ActionFunctionArgs\n extends DataFunctionArgs {}\n\n/**\n * Loaders and actions can return anything except `undefined` (`null` is a\n * valid return value if there is no data to return). Responses are preferred\n * and will ease any future migration to Remix\n */\ntype DataFunctionValue = Response | NonNullable | null;\n\ntype DataFunctionReturnValue = Promise | DataFunctionValue;\n\n/**\n * Route loader function signature\n */\nexport type LoaderFunction = {\n (\n args: LoaderFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n} & { hydrate?: boolean };\n\n/**\n * Route action function signature\n */\nexport interface ActionFunction {\n (\n args: ActionFunctionArgs,\n handlerCtx?: unknown\n ): DataFunctionReturnValue;\n}\n\n/**\n * Arguments passed to shouldRevalidate function\n */\nexport interface ShouldRevalidateFunctionArgs {\n currentUrl: URL;\n currentParams: AgnosticDataRouteMatch[\"params\"];\n nextUrl: URL;\n nextParams: AgnosticDataRouteMatch[\"params\"];\n formMethod?: Submission[\"formMethod\"];\n formAction?: Submission[\"formAction\"];\n formEncType?: Submission[\"formEncType\"];\n text?: Submission[\"text\"];\n formData?: Submission[\"formData\"];\n json?: Submission[\"json\"];\n actionStatus?: number;\n actionResult?: any;\n defaultShouldRevalidate: boolean;\n}\n\n/**\n * Route shouldRevalidate function signature. This runs after any submission\n * (navigation or fetcher), so we flatten the navigation/fetcher submission\n * onto the arguments. It shouldn't matter whether it came from a navigation\n * or a fetcher, what really matters is the URLs and the formData since loaders\n * have to re-run based on the data models that were potentially mutated.\n */\nexport interface ShouldRevalidateFunction {\n (args: ShouldRevalidateFunctionArgs): boolean;\n}\n\n/**\n * Function provided by the framework-aware layers to set `hasErrorBoundary`\n * from the framework-aware `errorElement` prop\n *\n * @deprecated Use `mapRouteProperties` instead\n */\nexport interface DetectErrorBoundaryFunction {\n (route: AgnosticRouteObject): boolean;\n}\n\nexport interface DataStrategyMatch\n extends AgnosticRouteMatch {\n shouldLoad: boolean;\n resolve: (\n handlerOverride?: (\n handler: (ctx?: unknown) => DataFunctionReturnValue\n ) => Promise\n ) => Promise;\n}\n\nexport interface DataStrategyFunctionArgs\n extends DataFunctionArgs {\n matches: DataStrategyMatch[];\n}\n\nexport interface DataStrategyFunction {\n (args: DataStrategyFunctionArgs): Promise;\n}\n\nexport interface AgnosticPatchRoutesOnMissFunction<\n M extends AgnosticRouteMatch = AgnosticRouteMatch\n> {\n (opts: {\n path: string;\n matches: M[];\n patch: (routeId: string | null, children: AgnosticRouteObject[]) => void;\n }): void | Promise;\n}\n\n/**\n * Function provided by the framework-aware layers to set any framework-specific\n * properties from framework-agnostic properties\n */\nexport interface MapRoutePropertiesFunction {\n (route: AgnosticRouteObject): {\n hasErrorBoundary: boolean;\n } & Record;\n}\n\n/**\n * Keys we cannot change from within a lazy() function. We spread all other keys\n * onto the route. Either they're meaningful to the router, or they'll get\n * ignored.\n */\nexport type ImmutableRouteKey =\n | \"lazy\"\n | \"caseSensitive\"\n | \"path\"\n | \"id\"\n | \"index\"\n | \"children\";\n\nexport const immutableRouteKeys = new Set([\n \"lazy\",\n \"caseSensitive\",\n \"path\",\n \"id\",\n \"index\",\n \"children\",\n]);\n\ntype RequireOne = Exclude<\n {\n [K in keyof T]: K extends Key ? Omit & Required> : never;\n }[keyof T],\n undefined\n>;\n\n/**\n * lazy() function to load a route definition, which can add non-matching\n * related properties to a route\n */\nexport interface LazyRouteFunction {\n (): Promise>>;\n}\n\n/**\n * Base RouteObject with common props shared by all types of routes\n */\ntype AgnosticBaseRouteObject = {\n caseSensitive?: boolean;\n path?: string;\n id?: string;\n loader?: LoaderFunction | boolean;\n action?: ActionFunction | boolean;\n hasErrorBoundary?: boolean;\n shouldRevalidate?: ShouldRevalidateFunction;\n handle?: any;\n lazy?: LazyRouteFunction;\n};\n\n/**\n * Index routes must not have children\n */\nexport type AgnosticIndexRouteObject = AgnosticBaseRouteObject & {\n children?: undefined;\n index: true;\n};\n\n/**\n * Non-index routes may have children, but cannot have index\n */\nexport type AgnosticNonIndexRouteObject = AgnosticBaseRouteObject & {\n children?: AgnosticRouteObject[];\n index?: false;\n};\n\n/**\n * A route object represents a logical route, with (optionally) its child\n * routes organized in a tree-like structure.\n */\nexport type AgnosticRouteObject =\n | AgnosticIndexRouteObject\n | AgnosticNonIndexRouteObject;\n\nexport type AgnosticDataIndexRouteObject = AgnosticIndexRouteObject & {\n id: string;\n};\n\nexport type AgnosticDataNonIndexRouteObject = AgnosticNonIndexRouteObject & {\n children?: AgnosticDataRouteObject[];\n id: string;\n};\n\n/**\n * A data route object, which is just a RouteObject with a required unique ID\n */\nexport type AgnosticDataRouteObject =\n | AgnosticDataIndexRouteObject\n | AgnosticDataNonIndexRouteObject;\n\nexport type RouteManifest = Record;\n\n// Recursive helper for finding path parameters in the absence of wildcards\ntype _PathParam =\n // split path into individual path segments\n Path extends `${infer L}/${infer R}`\n ? _PathParam | _PathParam\n : // find params after `:`\n Path extends `:${infer Param}`\n ? Param extends `${infer Optional}?`\n ? Optional\n : Param\n : // otherwise, there aren't any params present\n never;\n\n/**\n * Examples:\n * \"/a/b/*\" -> \"*\"\n * \":a\" -> \"a\"\n * \"/a/:b\" -> \"b\"\n * \"/a/blahblahblah:b\" -> \"b\"\n * \"/:a/:b\" -> \"a\" | \"b\"\n * \"/:a/b/:c/*\" -> \"a\" | \"c\" | \"*\"\n */\nexport type PathParam =\n // check if path is just a wildcard\n Path extends \"*\" | \"/*\"\n ? \"*\"\n : // look for wildcard at the end of the path\n Path extends `${infer Rest}/*`\n ? \"*\" | _PathParam\n : // look for params in the absence of wildcards\n _PathParam;\n\n// Attempt to parse the given string segment. If it fails, then just return the\n// plain string type as a default fallback. Otherwise, return the union of the\n// parsed string literals that were referenced as dynamic segments in the route.\nexport type ParamParseKey =\n // if you could not find path params, fallback to `string`\n [PathParam] extends [never] ? string : PathParam;\n\n/**\n * The parameters that were parsed from the URL path.\n */\nexport type Params = {\n readonly [key in Key]: string | undefined;\n};\n\n/**\n * A RouteMatch contains info about how a route matched a URL.\n */\nexport interface AgnosticRouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The route object that was used to match.\n */\n route: RouteObjectType;\n}\n\nexport interface AgnosticDataRouteMatch\n extends AgnosticRouteMatch {}\n\nfunction isIndexRoute(\n route: AgnosticRouteObject\n): route is AgnosticIndexRouteObject {\n return route.index === true;\n}\n\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nexport function convertRoutesToDataRoutes(\n routes: AgnosticRouteObject[],\n mapRouteProperties: MapRoutePropertiesFunction,\n parentPath: string[] = [],\n manifest: RouteManifest = {}\n): AgnosticDataRouteObject[] {\n return routes.map((route, index) => {\n let treePath = [...parentPath, String(index)];\n let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n invariant(\n route.index !== true || !route.children,\n `Cannot specify children on an index route`\n );\n invariant(\n !manifest[id],\n `Found a route id collision on id \"${id}\". Route ` +\n \"id's must be globally unique within Data Router usages\"\n );\n\n if (isIndexRoute(route)) {\n let indexRoute: AgnosticDataIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n };\n manifest[id] = indexRoute;\n return indexRoute;\n } else {\n let pathOrLayoutRoute: AgnosticDataNonIndexRouteObject = {\n ...route,\n ...mapRouteProperties(route),\n id,\n children: undefined,\n };\n manifest[id] = pathOrLayoutRoute;\n\n if (route.children) {\n pathOrLayoutRoute.children = convertRoutesToDataRoutes(\n route.children,\n mapRouteProperties,\n treePath,\n manifest\n );\n }\n\n return pathOrLayoutRoute;\n }\n });\n}\n\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nexport function matchRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename = \"/\"\n): AgnosticRouteMatch[] | null {\n return matchRoutesImpl(routes, locationArg, basename, false);\n}\n\nexport function matchRoutesImpl<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n locationArg: Partial | string,\n basename: string,\n allowPartial: boolean\n): AgnosticRouteMatch[] | null {\n let location =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n let pathname = stripBasename(location.pathname || \"/\", basename);\n\n if (pathname == null) {\n return null;\n }\n\n let branches = flattenRoutes(routes);\n rankRouteBranches(branches);\n\n let matches = null;\n for (let i = 0; matches == null && i < branches.length; ++i) {\n // Incoming pathnames are generally encoded from either window.location\n // or from router.navigate, but we want to match against the unencoded\n // paths in the route definitions. Memory router locations won't be\n // encoded here but there also shouldn't be anything to decode so this\n // should be a safe operation. This avoids needing matchRoutes to be\n // history-aware.\n let decoded = decodePath(pathname);\n matches = matchRouteBranch(\n branches[i],\n decoded,\n allowPartial\n );\n }\n\n return matches;\n}\n\nexport interface UIMatch {\n id: string;\n pathname: string;\n params: AgnosticRouteMatch[\"params\"];\n data: Data;\n handle: Handle;\n}\n\nexport function convertRouteMatchToUiMatch(\n match: AgnosticDataRouteMatch,\n loaderData: RouteData\n): UIMatch {\n let { route, pathname, params } = match;\n return {\n id: route.id,\n pathname,\n params,\n data: loaderData[route.id],\n handle: route.handle,\n };\n}\n\ninterface RouteMeta<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n relativePath: string;\n caseSensitive: boolean;\n childrenIndex: number;\n route: RouteObjectType;\n}\n\ninterface RouteBranch<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n> {\n path: string;\n score: number;\n routesMeta: RouteMeta[];\n}\n\nfunction flattenRoutes<\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n routes: RouteObjectType[],\n branches: RouteBranch[] = [],\n parentsMeta: RouteMeta[] = [],\n parentPath = \"\"\n): RouteBranch[] {\n let flattenRoute = (\n route: RouteObjectType,\n index: number,\n relativePath?: string\n ) => {\n let meta: RouteMeta = {\n relativePath:\n relativePath === undefined ? route.path || \"\" : relativePath,\n caseSensitive: route.caseSensitive === true,\n childrenIndex: index,\n route,\n };\n\n if (meta.relativePath.startsWith(\"/\")) {\n invariant(\n meta.relativePath.startsWith(parentPath),\n `Absolute route path \"${meta.relativePath}\" nested under path ` +\n `\"${parentPath}\" is not valid. An absolute child route path ` +\n `must start with the combined path of all its parent routes.`\n );\n\n meta.relativePath = meta.relativePath.slice(parentPath.length);\n }\n\n let path = joinPaths([parentPath, meta.relativePath]);\n let routesMeta = parentsMeta.concat(meta);\n\n // Add the children before adding this route to the array, so we traverse the\n // route tree depth-first and child routes appear before their parents in\n // the \"flattened\" version.\n if (route.children && route.children.length > 0) {\n invariant(\n // Our types know better, but runtime JS may not!\n // @ts-expect-error\n route.index !== true,\n `Index routes must not have child routes. Please remove ` +\n `all child routes from route path \"${path}\".`\n );\n flattenRoutes(route.children, branches, routesMeta, path);\n }\n\n // Routes without a path shouldn't ever match by themselves unless they are\n // index routes, so don't add them to the list of possible branches.\n if (route.path == null && !route.index) {\n return;\n }\n\n branches.push({\n path,\n score: computeScore(path, route.index),\n routesMeta,\n });\n };\n routes.forEach((route, index) => {\n // coarse-grain check for optional params\n if (route.path === \"\" || !route.path?.includes(\"?\")) {\n flattenRoute(route, index);\n } else {\n for (let exploded of explodeOptionalSegments(route.path)) {\n flattenRoute(route, index, exploded);\n }\n }\n });\n\n return branches;\n}\n\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path: string): string[] {\n let segments = path.split(\"/\");\n if (segments.length === 0) return [];\n\n let [first, ...rest] = segments;\n\n // Optional path segments are denoted by a trailing `?`\n let isOptional = first.endsWith(\"?\");\n // Compute the corresponding required segment: `foo?` -> `foo`\n let required = first.replace(/\\?$/, \"\");\n\n if (rest.length === 0) {\n // Intepret empty string as omitting an optional segment\n // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n return isOptional ? [required, \"\"] : [required];\n }\n\n let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n\n let result: string[] = [];\n\n // All child paths with the prefix. Do this for all children before the\n // optional version for all children, so we get consistent ordering where the\n // parent optional aspect is preferred as required. Otherwise, we can get\n // child sections interspersed where deeper optional segments are higher than\n // parent optional segments, where for example, /:two would explode _earlier_\n // then /:one. By always including the parent as required _for all children_\n // first, we avoid this issue\n result.push(\n ...restExploded.map((subpath) =>\n subpath === \"\" ? required : [required, subpath].join(\"/\")\n )\n );\n\n // Then, if this is an optional value, add all child versions without\n if (isOptional) {\n result.push(...restExploded);\n }\n\n // for absolute paths, ensure `/` instead of empty segment\n return result.map((exploded) =>\n path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded\n );\n}\n\nfunction rankRouteBranches(branches: RouteBranch[]): void {\n branches.sort((a, b) =>\n a.score !== b.score\n ? b.score - a.score // Higher score first\n : compareIndexes(\n a.routesMeta.map((meta) => meta.childrenIndex),\n b.routesMeta.map((meta) => meta.childrenIndex)\n )\n );\n}\n\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = (s: string) => s === \"*\";\n\nfunction computeScore(path: string, index: boolean | undefined): number {\n let segments = path.split(\"/\");\n let initialScore = segments.length;\n if (segments.some(isSplat)) {\n initialScore += splatPenalty;\n }\n\n if (index) {\n initialScore += indexRouteValue;\n }\n\n return segments\n .filter((s) => !isSplat(s))\n .reduce(\n (score, segment) =>\n score +\n (paramRe.test(segment)\n ? dynamicSegmentValue\n : segment === \"\"\n ? emptySegmentValue\n : staticSegmentValue),\n initialScore\n );\n}\n\nfunction compareIndexes(a: number[], b: number[]): number {\n let siblings =\n a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n\n return siblings\n ? // If two routes are siblings, we should try to match the earlier sibling\n // first. This allows people to have fine-grained control over the matching\n // behavior by simply putting routes with identical paths in the order they\n // want them tried.\n a[a.length - 1] - b[b.length - 1]\n : // Otherwise, it doesn't really make sense to rank non-siblings by index,\n // so they sort equally.\n 0;\n}\n\nfunction matchRouteBranch<\n ParamKey extends string = string,\n RouteObjectType extends AgnosticRouteObject = AgnosticRouteObject\n>(\n branch: RouteBranch,\n pathname: string,\n allowPartial = false\n): AgnosticRouteMatch[] | null {\n let { routesMeta } = branch;\n\n let matchedParams = {};\n let matchedPathname = \"/\";\n let matches: AgnosticRouteMatch[] = [];\n for (let i = 0; i < routesMeta.length; ++i) {\n let meta = routesMeta[i];\n let end = i === routesMeta.length - 1;\n let remainingPathname =\n matchedPathname === \"/\"\n ? pathname\n : pathname.slice(matchedPathname.length) || \"/\";\n let match = matchPath(\n { path: meta.relativePath, caseSensitive: meta.caseSensitive, end },\n remainingPathname\n );\n\n let route = meta.route;\n\n if (\n !match &&\n end &&\n allowPartial &&\n !routesMeta[routesMeta.length - 1].route.index\n ) {\n match = matchPath(\n {\n path: meta.relativePath,\n caseSensitive: meta.caseSensitive,\n end: false,\n },\n remainingPathname\n );\n }\n\n if (!match) {\n return null;\n }\n\n Object.assign(matchedParams, match.params);\n\n matches.push({\n // TODO: Can this as be avoided?\n params: matchedParams as Params,\n pathname: joinPaths([matchedPathname, match.pathname]),\n pathnameBase: normalizePathname(\n joinPaths([matchedPathname, match.pathnameBase])\n ),\n route,\n });\n\n if (match.pathnameBase !== \"/\") {\n matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n }\n }\n\n return matches;\n}\n\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nexport function generatePath(\n originalPath: Path,\n params: {\n [key in PathParam]: string | null;\n } = {} as any\n): string {\n let path: string = originalPath;\n if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n warning(\n false,\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n path = path.replace(/\\*$/, \"/*\") as Path;\n }\n\n // ensure `/` is added at the beginning if the path is absolute\n const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n\n const stringify = (p: any) =>\n p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n\n const segments = path\n .split(/\\/+/)\n .map((segment, index, array) => {\n const isLastSegment = index === array.length - 1;\n\n // only apply the splat if it's the last segment\n if (isLastSegment && segment === \"*\") {\n const star = \"*\" as PathParam;\n // Apply the splat\n return stringify(params[star]);\n }\n\n const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n if (keyMatch) {\n const [, key, optional] = keyMatch;\n let param = params[key as PathParam];\n invariant(optional === \"?\" || param != null, `Missing \":${key}\" param`);\n return stringify(param);\n }\n\n // Remove any optional markers from optional static segments\n return segment.replace(/\\?$/g, \"\");\n })\n // Remove empty segments\n .filter((segment) => !!segment);\n\n return prefix + segments.join(\"/\");\n}\n\n/**\n * A PathPattern is used to match on some portion of a URL pathname.\n */\nexport interface PathPattern {\n /**\n * A string to match against a URL pathname. May contain `:id`-style segments\n * to indicate placeholders for dynamic parameters. May also end with `/*` to\n * indicate matching the rest of the URL pathname.\n */\n path: Path;\n /**\n * Should be `true` if the static portions of the `path` should be matched in\n * the same case.\n */\n caseSensitive?: boolean;\n /**\n * Should be `true` if this pattern should match the entire URL pathname.\n */\n end?: boolean;\n}\n\n/**\n * A PathMatch contains info about how a PathPattern matched on a URL pathname.\n */\nexport interface PathMatch {\n /**\n * The names and values of dynamic parameters in the URL.\n */\n params: Params;\n /**\n * The portion of the URL pathname that was matched.\n */\n pathname: string;\n /**\n * The portion of the URL pathname that was matched before child routes.\n */\n pathnameBase: string;\n /**\n * The pattern that was used to match.\n */\n pattern: PathPattern;\n}\n\ntype Mutable = {\n -readonly [P in keyof T]: T[P];\n};\n\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nexport function matchPath<\n ParamKey extends ParamParseKey,\n Path extends string\n>(\n pattern: PathPattern | Path,\n pathname: string\n): PathMatch | null {\n if (typeof pattern === \"string\") {\n pattern = { path: pattern, caseSensitive: false, end: true };\n }\n\n let [matcher, compiledParams] = compilePath(\n pattern.path,\n pattern.caseSensitive,\n pattern.end\n );\n\n let match = pathname.match(matcher);\n if (!match) return null;\n\n let matchedPathname = match[0];\n let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n let captureGroups = match.slice(1);\n let params: Params = compiledParams.reduce>(\n (memo, { paramName, isOptional }, index) => {\n // We need to compute the pathnameBase here using the raw splat value\n // instead of using params[\"*\"] later because it will be decoded then\n if (paramName === \"*\") {\n let splatValue = captureGroups[index] || \"\";\n pathnameBase = matchedPathname\n .slice(0, matchedPathname.length - splatValue.length)\n .replace(/(.)\\/+$/, \"$1\");\n }\n\n const value = captureGroups[index];\n if (isOptional && !value) {\n memo[paramName] = undefined;\n } else {\n memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n }\n return memo;\n },\n {}\n );\n\n return {\n params,\n pathname: matchedPathname,\n pathnameBase,\n pattern,\n };\n}\n\ntype CompiledPathParam = { paramName: string; isOptional?: boolean };\n\nfunction compilePath(\n path: string,\n caseSensitive = false,\n end = true\n): [RegExp, CompiledPathParam[]] {\n warning(\n path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"),\n `Route path \"${path}\" will be treated as if it were ` +\n `\"${path.replace(/\\*$/, \"/*\")}\" because the \\`*\\` character must ` +\n `always follow a \\`/\\` in the pattern. To get rid of this warning, ` +\n `please change the route path to \"${path.replace(/\\*$/, \"/*\")}\".`\n );\n\n let params: CompiledPathParam[] = [];\n let regexpSource =\n \"^\" +\n path\n .replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n .replace(\n /\\/:([\\w-]+)(\\?)?/g,\n (_: string, paramName: string, isOptional) => {\n params.push({ paramName, isOptional: isOptional != null });\n return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n }\n );\n\n if (path.endsWith(\"*\")) {\n params.push({ paramName: \"*\" });\n regexpSource +=\n path === \"*\" || path === \"/*\"\n ? \"(.*)$\" // Already matched the initial /, just match the rest\n : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n } else if (end) {\n // When matching to the end, ignore trailing slashes\n regexpSource += \"\\\\/*$\";\n } else if (path !== \"\" && path !== \"/\") {\n // If our path is non-empty and contains anything beyond an initial slash,\n // then we have _some_ form of path in our regex, so we should expect to\n // match only if we find the end of this path segment. Look for an optional\n // non-captured trailing slash (to match a portion of the URL) or the end\n // of the path (if we've matched to the end). We used to do this with a\n // word boundary but that gives false positives on routes like\n // /user-preferences since `-` counts as a word boundary.\n regexpSource += \"(?:(?=\\\\/|$))\";\n } else {\n // Nothing to match for \"\" or \"/\"\n }\n\n let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n\n return [matcher, params];\n}\n\nexport function decodePath(value: string) {\n try {\n return value\n .split(\"/\")\n .map((v) => decodeURIComponent(v).replace(/\\//g, \"%2F\"))\n .join(\"/\");\n } catch (error) {\n warning(\n false,\n `The URL path \"${value}\" could not be decoded because it is is a ` +\n `malformed URL segment. This is probably due to a bad percent ` +\n `encoding (${error}).`\n );\n\n return value;\n }\n}\n\n/**\n * @private\n */\nexport function stripBasename(\n pathname: string,\n basename: string\n): string | null {\n if (basename === \"/\") return pathname;\n\n if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n return null;\n }\n\n // We want to leave trailing slash behavior in the user's control, so if they\n // specify a basename with a trailing slash, we should support it\n let startIndex = basename.endsWith(\"/\")\n ? basename.length - 1\n : basename.length;\n let nextChar = pathname.charAt(startIndex);\n if (nextChar && nextChar !== \"/\") {\n // pathname does not start with basename/\n return null;\n }\n\n return pathname.slice(startIndex) || \"/\";\n}\n\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nexport function resolvePath(to: To, fromPathname = \"/\"): Path {\n let {\n pathname: toPathname,\n search = \"\",\n hash = \"\",\n } = typeof to === \"string\" ? parsePath(to) : to;\n\n let pathname = toPathname\n ? toPathname.startsWith(\"/\")\n ? toPathname\n : resolvePathname(toPathname, fromPathname)\n : fromPathname;\n\n return {\n pathname,\n search: normalizeSearch(search),\n hash: normalizeHash(hash),\n };\n}\n\nfunction resolvePathname(relativePath: string, fromPathname: string): string {\n let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n let relativeSegments = relativePath.split(\"/\");\n\n relativeSegments.forEach((segment) => {\n if (segment === \"..\") {\n // Keep the root \"\" segment so the pathname starts at /\n if (segments.length > 1) segments.pop();\n } else if (segment !== \".\") {\n segments.push(segment);\n }\n });\n\n return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\n\nfunction getInvalidPathError(\n char: string,\n field: string,\n dest: string,\n path: Partial\n) {\n return (\n `Cannot include a '${char}' character in a manually specified ` +\n `\\`to.${field}\\` field [${JSON.stringify(\n path\n )}]. Please separate it out to the ` +\n `\\`to.${dest}\\` field. Alternatively you may provide the full path as ` +\n `a string in and the router will parse it for you.`\n );\n}\n\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same. Both of the following examples should link back to the root:\n *\n * \n * \n * \n *\n * \n * \n * }> // <-- Does not contribute\n * // <-- Does not contribute\n * \n * \n */\nexport function getPathContributingMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[]) {\n return matches.filter(\n (match, index) =>\n index === 0 || (match.route.path && match.route.path.length > 0)\n );\n}\n\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nexport function getResolveToMatches<\n T extends AgnosticRouteMatch = AgnosticRouteMatch\n>(matches: T[], v7_relativeSplatPath: boolean) {\n let pathMatches = getPathContributingMatches(matches);\n\n // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n // match so we include splat values for \".\" links. See:\n // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n if (v7_relativeSplatPath) {\n return pathMatches.map((match, idx) =>\n idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase\n );\n }\n\n return pathMatches.map((match) => match.pathnameBase);\n}\n\n/**\n * @private\n */\nexport function resolveTo(\n toArg: To,\n routePathnames: string[],\n locationPathname: string,\n isPathRelative = false\n): Path {\n let to: Partial;\n if (typeof toArg === \"string\") {\n to = parsePath(toArg);\n } else {\n to = { ...toArg };\n\n invariant(\n !to.pathname || !to.pathname.includes(\"?\"),\n getInvalidPathError(\"?\", \"pathname\", \"search\", to)\n );\n invariant(\n !to.pathname || !to.pathname.includes(\"#\"),\n getInvalidPathError(\"#\", \"pathname\", \"hash\", to)\n );\n invariant(\n !to.search || !to.search.includes(\"#\"),\n getInvalidPathError(\"#\", \"search\", \"hash\", to)\n );\n }\n\n let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n let toPathname = isEmptyPath ? \"/\" : to.pathname;\n\n let from: string;\n\n // Routing is relative to the current pathname if explicitly requested.\n //\n // If a pathname is explicitly provided in `to`, it should be relative to the\n // route context. This is explained in `Note on `` values` in our\n // migration guide from v5 as a means of disambiguation between `to` values\n // that begin with `/` and those that do not. However, this is problematic for\n // `to` values that do not provide a pathname. `to` can simply be a search or\n // hash string, in which case we should assume that the navigation is relative\n // to the current location's pathname and *not* the route pathname.\n if (toPathname == null) {\n from = locationPathname;\n } else {\n let routePathnameIndex = routePathnames.length - 1;\n\n // With relative=\"route\" (the default), each leading .. segment means\n // \"go up one route\" instead of \"go up one URL segment\". This is a key\n // difference from how works and a major reason we call this a\n // \"to\" value instead of a \"href\".\n if (!isPathRelative && toPathname.startsWith(\"..\")) {\n let toSegments = toPathname.split(\"/\");\n\n while (toSegments[0] === \"..\") {\n toSegments.shift();\n routePathnameIndex -= 1;\n }\n\n to.pathname = toSegments.join(\"/\");\n }\n\n from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n }\n\n let path = resolvePath(to, from);\n\n // Ensure the pathname has a trailing slash if the original \"to\" had one\n let hasExplicitTrailingSlash =\n toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n // Or if this was a link to the current path which has a trailing slash\n let hasCurrentTrailingSlash =\n (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n if (\n !path.pathname.endsWith(\"/\") &&\n (hasExplicitTrailingSlash || hasCurrentTrailingSlash)\n ) {\n path.pathname += \"/\";\n }\n\n return path;\n}\n\n/**\n * @private\n */\nexport function getToPathname(to: To): string | undefined {\n // Empty strings should be treated the same as / paths\n return to === \"\" || (to as Path).pathname === \"\"\n ? \"/\"\n : typeof to === \"string\"\n ? parsePath(to).pathname\n : to.pathname;\n}\n\n/**\n * @private\n */\nexport const joinPaths = (paths: string[]): string =>\n paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n\n/**\n * @private\n */\nexport const normalizePathname = (pathname: string): string =>\n pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n\n/**\n * @private\n */\nexport const normalizeSearch = (search: string): string =>\n !search || search === \"?\"\n ? \"\"\n : search.startsWith(\"?\")\n ? search\n : \"?\" + search;\n\n/**\n * @private\n */\nexport const normalizeHash = (hash: string): string =>\n !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n\nexport type JsonFunction = (\n data: Data,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nexport const json: JsonFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n let headers = new Headers(responseInit.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n return new Response(JSON.stringify(data), {\n ...responseInit,\n headers,\n });\n};\n\nexport class DataWithResponseInit {\n type: string = \"DataWithResponseInit\";\n data: D;\n init: ResponseInit | null;\n\n constructor(data: D, init?: ResponseInit) {\n this.data = data;\n this.init = init || null;\n }\n}\n\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nexport function data(data: D, init?: number | ResponseInit) {\n return new DataWithResponseInit(\n data,\n typeof init === \"number\" ? { status: init } : init\n );\n}\n\nexport interface TrackedPromise extends Promise {\n _tracked?: boolean;\n _data?: any;\n _error?: any;\n}\n\nexport class AbortedDeferredError extends Error {}\n\nexport class DeferredData {\n private pendingKeysSet: Set = new Set();\n private controller: AbortController;\n private abortPromise: Promise;\n private unlistenAbortSignal: () => void;\n private subscribers: Set<(aborted: boolean, settledKey?: string) => void> =\n new Set();\n data: Record;\n init?: ResponseInit;\n deferredKeys: string[] = [];\n\n constructor(data: Record, responseInit?: ResponseInit) {\n invariant(\n data && typeof data === \"object\" && !Array.isArray(data),\n \"defer() only accepts plain objects\"\n );\n\n // Set up an AbortController + Promise we can race against to exit early\n // cancellation\n let reject: (e: AbortedDeferredError) => void;\n this.abortPromise = new Promise((_, r) => (reject = r));\n this.controller = new AbortController();\n let onAbort = () =>\n reject(new AbortedDeferredError(\"Deferred data aborted\"));\n this.unlistenAbortSignal = () =>\n this.controller.signal.removeEventListener(\"abort\", onAbort);\n this.controller.signal.addEventListener(\"abort\", onAbort);\n\n this.data = Object.entries(data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: this.trackPromise(key, value),\n }),\n {}\n );\n\n if (this.done) {\n // All incoming values were resolved\n this.unlistenAbortSignal();\n }\n\n this.init = responseInit;\n }\n\n private trackPromise(\n key: string,\n value: Promise | unknown\n ): TrackedPromise | unknown {\n if (!(value instanceof Promise)) {\n return value;\n }\n\n this.deferredKeys.push(key);\n this.pendingKeysSet.add(key);\n\n // We store a little wrapper promise that will be extended with\n // _data/_error props upon resolve/reject\n let promise: TrackedPromise = Promise.race([value, this.abortPromise]).then(\n (data) => this.onSettle(promise, key, undefined, data as unknown),\n (error) => this.onSettle(promise, key, error as unknown)\n );\n\n // Register rejection listeners to avoid uncaught promise rejections on\n // errors or aborted deferred values\n promise.catch(() => {});\n\n Object.defineProperty(promise, \"_tracked\", { get: () => true });\n return promise;\n }\n\n private onSettle(\n promise: TrackedPromise,\n key: string,\n error: unknown,\n data?: unknown\n ): unknown {\n if (\n this.controller.signal.aborted &&\n error instanceof AbortedDeferredError\n ) {\n this.unlistenAbortSignal();\n Object.defineProperty(promise, \"_error\", { get: () => error });\n return Promise.reject(error);\n }\n\n this.pendingKeysSet.delete(key);\n\n if (this.done) {\n // Nothing left to abort!\n this.unlistenAbortSignal();\n }\n\n // If the promise was resolved/rejected with undefined, we'll throw an error as you\n // should always resolve with a value or null\n if (error === undefined && data === undefined) {\n let undefinedError = new Error(\n `Deferred data for key \"${key}\" resolved/rejected with \\`undefined\\`, ` +\n `you must resolve/reject with a value or \\`null\\`.`\n );\n Object.defineProperty(promise, \"_error\", { get: () => undefinedError });\n this.emit(false, key);\n return Promise.reject(undefinedError);\n }\n\n if (data === undefined) {\n Object.defineProperty(promise, \"_error\", { get: () => error });\n this.emit(false, key);\n return Promise.reject(error);\n }\n\n Object.defineProperty(promise, \"_data\", { get: () => data });\n this.emit(false, key);\n return data;\n }\n\n private emit(aborted: boolean, settledKey?: string) {\n this.subscribers.forEach((subscriber) => subscriber(aborted, settledKey));\n }\n\n subscribe(fn: (aborted: boolean, settledKey?: string) => void) {\n this.subscribers.add(fn);\n return () => this.subscribers.delete(fn);\n }\n\n cancel() {\n this.controller.abort();\n this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n this.emit(true);\n }\n\n async resolveData(signal: AbortSignal) {\n let aborted = false;\n if (!this.done) {\n let onAbort = () => this.cancel();\n signal.addEventListener(\"abort\", onAbort);\n aborted = await new Promise((resolve) => {\n this.subscribe((aborted) => {\n signal.removeEventListener(\"abort\", onAbort);\n if (aborted || this.done) {\n resolve(aborted);\n }\n });\n });\n }\n return aborted;\n }\n\n get done() {\n return this.pendingKeysSet.size === 0;\n }\n\n get unwrappedData() {\n invariant(\n this.data !== null && this.done,\n \"Can only unwrap data on initialized and settled deferreds\"\n );\n\n return Object.entries(this.data).reduce(\n (acc, [key, value]) =>\n Object.assign(acc, {\n [key]: unwrapTrackedPromise(value),\n }),\n {}\n );\n }\n\n get pendingKeys() {\n return Array.from(this.pendingKeysSet);\n }\n}\n\nfunction isTrackedPromise(value: any): value is TrackedPromise {\n return (\n value instanceof Promise && (value as TrackedPromise)._tracked === true\n );\n}\n\nfunction unwrapTrackedPromise(value: any) {\n if (!isTrackedPromise(value)) {\n return value;\n }\n\n if (value._error) {\n throw value._error;\n }\n return value._data;\n}\n\nexport type DeferFunction = (\n data: Record,\n init?: number | ResponseInit\n) => DeferredData;\n\nexport const defer: DeferFunction = (data, init = {}) => {\n let responseInit = typeof init === \"number\" ? { status: init } : init;\n\n return new DeferredData(data, responseInit);\n};\n\nexport type RedirectFunction = (\n url: string,\n init?: number | ResponseInit\n) => Response;\n\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirect: RedirectFunction = (url, init = 302) => {\n let responseInit = init;\n if (typeof responseInit === \"number\") {\n responseInit = { status: responseInit };\n } else if (typeof responseInit.status === \"undefined\") {\n responseInit.status = 302;\n }\n\n let headers = new Headers(responseInit.headers);\n headers.set(\"Location\", url);\n\n return new Response(null, {\n ...responseInit,\n headers,\n });\n};\n\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const redirectDocument: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n return response;\n};\n\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nexport const replace: RedirectFunction = (url, init) => {\n let response = redirect(url, init);\n response.headers.set(\"X-Remix-Replace\", \"true\");\n return response;\n};\n\nexport type ErrorResponse = {\n status: number;\n statusText: string;\n data: any;\n};\n\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nexport class ErrorResponseImpl implements ErrorResponse {\n status: number;\n statusText: string;\n data: any;\n private error?: Error;\n private internal: boolean;\n\n constructor(\n status: number,\n statusText: string | undefined,\n data: any,\n internal = false\n ) {\n this.status = status;\n this.statusText = statusText || \"\";\n this.internal = internal;\n if (data instanceof Error) {\n this.data = data.toString();\n this.error = data;\n } else {\n this.data = data;\n }\n }\n}\n\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nexport function isRouteErrorResponse(error: any): error is ErrorResponse {\n return (\n error != null &&\n typeof error.status === \"number\" &&\n typeof error.statusText === \"string\" &&\n typeof error.internal === \"boolean\" &&\n \"data\" in error\n );\n}\n","import type { History, Location, Path, To } from \"./history\";\nimport {\n Action as HistoryAction,\n createLocation,\n createPath,\n invariant,\n parsePath,\n warning,\n} from \"./history\";\nimport type {\n AgnosticDataRouteMatch,\n AgnosticDataRouteObject,\n DataStrategyMatch,\n AgnosticRouteObject,\n DataResult,\n DataStrategyFunction,\n DataStrategyFunctionArgs,\n DeferredData,\n DeferredResult,\n DetectErrorBoundaryFunction,\n ErrorResult,\n FormEncType,\n FormMethod,\n HTMLFormMethod,\n HandlerResult,\n ImmutableRouteKey,\n MapRoutePropertiesFunction,\n MutationFormMethod,\n RedirectResult,\n RouteData,\n RouteManifest,\n ShouldRevalidateFunctionArgs,\n Submission,\n SuccessResult,\n UIMatch,\n V7_FormMethod,\n V7_MutationFormMethod,\n AgnosticPatchRoutesOnMissFunction,\n DataWithResponseInit,\n} from \"./utils\";\nimport {\n ErrorResponseImpl,\n ResultType,\n convertRouteMatchToUiMatch,\n convertRoutesToDataRoutes,\n getPathContributingMatches,\n getResolveToMatches,\n immutableRouteKeys,\n isRouteErrorResponse,\n joinPaths,\n matchRoutes,\n matchRoutesImpl,\n resolveTo,\n stripBasename,\n} from \"./utils\";\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * A Router instance manages all navigation and data loading/mutations\n */\nexport interface Router {\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the basename for the router\n */\n get basename(): RouterInit[\"basename\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the future config for the router\n */\n get future(): FutureConfig;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the current state of the router\n */\n get state(): RouterState;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the routes for this router instance\n */\n get routes(): AgnosticDataRouteObject[];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Return the window associated with the router\n */\n get window(): RouterInit[\"window\"];\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Initialize the router, including adding history listeners and kicking off\n * initial data fetches. Returns a function to cleanup listeners and abort\n * any in-progress loads\n */\n initialize(): Router;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Subscribe to router.state updates\n *\n * @param fn function to call with the new state\n */\n subscribe(fn: RouterSubscriber): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Enable scroll restoration behavior in the router\n *\n * @param savedScrollPositions Object that will manage positions, in case\n * it's being restored from sessionStorage\n * @param getScrollPosition Function to get the active Y scroll position\n * @param getKey Function to get the key to use for restoration\n */\n enableScrollRestoration(\n savedScrollPositions: Record,\n getScrollPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ): () => void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Navigate forward/backward in the history stack\n * @param to Delta to move in the history stack\n */\n navigate(to: number): Promise;\n\n /**\n * Navigate to the given path\n * @param to Path to navigate to\n * @param opts Navigation options (method, submission, etc.)\n */\n navigate(to: To | null, opts?: RouterNavigateOptions): Promise;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a fetcher load/submission\n *\n * @param key Fetcher key\n * @param routeId Route that owns the fetcher\n * @param href href to fetch\n * @param opts Fetcher options, (method, submission, etc.)\n */\n fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Trigger a revalidation of all current route loaders and fetcher loads\n */\n revalidate(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to create an href for the given location\n * @param location\n */\n createHref(location: Location | URL): string;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Utility function to URL encode a destination path according to the internal\n * history implementation\n * @param to\n */\n encodeLocation(to: To): Path;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get/create a fetcher for the given key\n * @param key\n */\n getFetcher(key: string): Fetcher;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete the fetcher for a given key\n * @param key\n */\n deleteFetcher(key: string): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Cleanup listeners and abort any in-progress loads\n */\n dispose(): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Get a navigation blocker\n * @param key The identifier for the blocker\n * @param fn The blocker function implementation\n */\n getBlocker(key: string, fn: BlockerFunction): Blocker;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Delete a navigation blocker\n * @param key The identifier for the blocker\n */\n deleteBlocker(key: string): void;\n\n /**\n * @internal\n * PRIVATE DO NOT USE\n *\n * Patch additional children routes into an existing parent route\n * @param routeId The parent route id or a callback function accepting `patch`\n * to perform batch patching\n * @param children The additional children routes\n */\n patchRoutes(routeId: string | null, children: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * HMR needs to pass in-flight route updates to React Router\n * TODO: Replace this with granular route update APIs (addRoute, updateRoute, deleteRoute)\n */\n _internalSetRoutes(routes: AgnosticRouteObject[]): void;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal fetch AbortControllers accessed by unit tests\n */\n _internalFetchControllers: Map;\n\n /**\n * @internal\n * PRIVATE - DO NOT USE\n *\n * Internal pending DeferredData instances accessed by unit tests\n */\n _internalActiveDeferreds: Map;\n}\n\n/**\n * State maintained internally by the router. During a navigation, all states\n * reflect the the \"old\" location unless otherwise noted.\n */\nexport interface RouterState {\n /**\n * The action of the most recent navigation\n */\n historyAction: HistoryAction;\n\n /**\n * The current location reflected by the router\n */\n location: Location;\n\n /**\n * The current set of route matches\n */\n matches: AgnosticDataRouteMatch[];\n\n /**\n * Tracks whether we've completed our initial data load\n */\n initialized: boolean;\n\n /**\n * Current scroll position we should start at for a new view\n * - number -> scroll position to restore to\n * - false -> do not restore scroll at all (used during submissions)\n * - null -> don't have a saved position, scroll to hash or top of page\n */\n restoreScrollPosition: number | false | null;\n\n /**\n * Indicate whether this navigation should skip resetting the scroll position\n * if we are unable to restore the scroll position\n */\n preventScrollReset: boolean;\n\n /**\n * Tracks the state of the current navigation\n */\n navigation: Navigation;\n\n /**\n * Tracks any in-progress revalidations\n */\n revalidation: RevalidationState;\n\n /**\n * Data from the loaders for the current matches\n */\n loaderData: RouteData;\n\n /**\n * Data from the action for the current matches\n */\n actionData: RouteData | null;\n\n /**\n * Errors caught from loaders for the current matches\n */\n errors: RouteData | null;\n\n /**\n * Map of current fetchers\n */\n fetchers: Map;\n\n /**\n * Map of current blockers\n */\n blockers: Map;\n}\n\n/**\n * Data that can be passed into hydrate a Router from SSR\n */\nexport type HydrationState = Partial<\n Pick\n>;\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface FutureConfig {\n v7_fetcherPersist: boolean;\n v7_normalizeFormMethod: boolean;\n v7_partialHydration: boolean;\n v7_prependBasename: boolean;\n v7_relativeSplatPath: boolean;\n v7_skipActionErrorRevalidation: boolean;\n}\n\n/**\n * Initialization options for createRouter\n */\nexport interface RouterInit {\n routes: AgnosticRouteObject[];\n history: History;\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n hydrationData?: HydrationState;\n window?: Window;\n unstable_patchRoutesOnMiss?: AgnosticPatchRoutesOnMissFunction;\n unstable_dataStrategy?: DataStrategyFunction;\n}\n\n/**\n * State returned from a server-side query() call\n */\nexport interface StaticHandlerContext {\n basename: Router[\"basename\"];\n location: RouterState[\"location\"];\n matches: RouterState[\"matches\"];\n loaderData: RouterState[\"loaderData\"];\n actionData: RouterState[\"actionData\"];\n errors: RouterState[\"errors\"];\n statusCode: number;\n loaderHeaders: Record;\n actionHeaders: Record;\n activeDeferreds: Record | null;\n _deepestRenderedBoundaryId?: string | null;\n}\n\n/**\n * A StaticHandler instance manages a singular SSR navigation/fetch event\n */\nexport interface StaticHandler {\n dataRoutes: AgnosticDataRouteObject[];\n query(\n request: Request,\n opts?: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n queryRoute(\n request: Request,\n opts?: {\n routeId?: string;\n requestContext?: unknown;\n unstable_dataStrategy?: DataStrategyFunction;\n }\n ): Promise;\n}\n\ntype ViewTransitionOpts = {\n currentLocation: Location;\n nextLocation: Location;\n};\n\n/**\n * Subscriber function signature for changes to router state\n */\nexport interface RouterSubscriber {\n (\n state: RouterState,\n opts: {\n deletedFetchers: string[];\n unstable_viewTransitionOpts?: ViewTransitionOpts;\n unstable_flushSync: boolean;\n }\n ): void;\n}\n\n/**\n * Function signature for determining the key to be used in scroll restoration\n * for a given location\n */\nexport interface GetScrollRestorationKeyFunction {\n (location: Location, matches: UIMatch[]): string | null;\n}\n\n/**\n * Function signature for determining the current scroll position\n */\nexport interface GetScrollPositionFunction {\n (): number;\n}\n\nexport type RelativeRoutingType = \"route\" | \"path\";\n\n// Allowed for any navigation or fetch\ntype BaseNavigateOrFetchOptions = {\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n};\n\n// Only allowed for navigations\ntype BaseNavigateOptions = BaseNavigateOrFetchOptions & {\n replace?: boolean;\n state?: any;\n fromRouteId?: string;\n unstable_viewTransition?: boolean;\n};\n\n// Only allowed for submission navigations\ntype BaseSubmissionOptions = {\n formMethod?: HTMLFormMethod;\n formEncType?: FormEncType;\n} & (\n | { formData: FormData; body?: undefined }\n | { formData?: undefined; body: any }\n);\n\n/**\n * Options for a navigate() call for a normal (non-submission) navigation\n */\ntype LinkNavigateOptions = BaseNavigateOptions;\n\n/**\n * Options for a navigate() call for a submission navigation\n */\ntype SubmissionNavigateOptions = BaseNavigateOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to navigate() for a navigation\n */\nexport type RouterNavigateOptions =\n | LinkNavigateOptions\n | SubmissionNavigateOptions;\n\n/**\n * Options for a fetch() load\n */\ntype LoadFetchOptions = BaseNavigateOrFetchOptions;\n\n/**\n * Options for a fetch() submission\n */\ntype SubmitFetchOptions = BaseNavigateOrFetchOptions & BaseSubmissionOptions;\n\n/**\n * Options to pass to fetch()\n */\nexport type RouterFetchOptions = LoadFetchOptions | SubmitFetchOptions;\n\n/**\n * Potential states for state.navigation\n */\nexport type NavigationStates = {\n Idle: {\n state: \"idle\";\n location: undefined;\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n formData: undefined;\n json: undefined;\n text: undefined;\n };\n Loading: {\n state: \"loading\";\n location: Location;\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n text: Submission[\"text\"] | undefined;\n };\n Submitting: {\n state: \"submitting\";\n location: Location;\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n text: Submission[\"text\"];\n };\n};\n\nexport type Navigation = NavigationStates[keyof NavigationStates];\n\nexport type RevalidationState = \"idle\" | \"loading\";\n\n/**\n * Potential states for fetchers\n */\ntype FetcherStates = {\n Idle: {\n state: \"idle\";\n formMethod: undefined;\n formAction: undefined;\n formEncType: undefined;\n text: undefined;\n formData: undefined;\n json: undefined;\n data: TData | undefined;\n };\n Loading: {\n state: \"loading\";\n formMethod: Submission[\"formMethod\"] | undefined;\n formAction: Submission[\"formAction\"] | undefined;\n formEncType: Submission[\"formEncType\"] | undefined;\n text: Submission[\"text\"] | undefined;\n formData: Submission[\"formData\"] | undefined;\n json: Submission[\"json\"] | undefined;\n data: TData | undefined;\n };\n Submitting: {\n state: \"submitting\";\n formMethod: Submission[\"formMethod\"];\n formAction: Submission[\"formAction\"];\n formEncType: Submission[\"formEncType\"];\n text: Submission[\"text\"];\n formData: Submission[\"formData\"];\n json: Submission[\"json\"];\n data: TData | undefined;\n };\n};\n\nexport type Fetcher =\n FetcherStates[keyof FetcherStates];\n\ninterface BlockerBlocked {\n state: \"blocked\";\n reset(): void;\n proceed(): void;\n location: Location;\n}\n\ninterface BlockerUnblocked {\n state: \"unblocked\";\n reset: undefined;\n proceed: undefined;\n location: undefined;\n}\n\ninterface BlockerProceeding {\n state: \"proceeding\";\n reset: undefined;\n proceed: undefined;\n location: Location;\n}\n\nexport type Blocker = BlockerUnblocked | BlockerBlocked | BlockerProceeding;\n\nexport type BlockerFunction = (args: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n}) => boolean;\n\ninterface ShortCircuitable {\n /**\n * startNavigation does not need to complete the navigation because we\n * redirected or got interrupted\n */\n shortCircuited?: boolean;\n}\n\ntype PendingActionResult = [string, SuccessResult | ErrorResult];\n\ninterface HandleActionResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * Tuple for the returned or thrown value from the current action. The routeId\n * is the action route for success and the bubbled boundary route for errors.\n */\n pendingActionResult?: PendingActionResult;\n}\n\ninterface HandleLoadersResult extends ShortCircuitable {\n /**\n * Route matches which may have been updated from fog of war discovery\n */\n matches?: RouterState[\"matches\"];\n /**\n * loaderData returned from the current set of loaders\n */\n loaderData?: RouterState[\"loaderData\"];\n /**\n * errors thrown from the current set of loaders\n */\n errors?: RouterState[\"errors\"];\n}\n\n/**\n * Cached info for active fetcher.load() instances so they can participate\n * in revalidation\n */\ninterface FetchLoadMatch {\n routeId: string;\n path: string;\n}\n\n/**\n * Identified fetcher.load() calls that need to be revalidated\n */\ninterface RevalidatingFetcher extends FetchLoadMatch {\n key: string;\n match: AgnosticDataRouteMatch | null;\n matches: AgnosticDataRouteMatch[] | null;\n controller: AbortController | null;\n}\n\nconst validMutationMethodsArr: MutationFormMethod[] = [\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n];\nconst validMutationMethods = new Set(\n validMutationMethodsArr\n);\n\nconst validRequestMethodsArr: FormMethod[] = [\n \"get\",\n ...validMutationMethodsArr,\n];\nconst validRequestMethods = new Set(validRequestMethodsArr);\n\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\n\nexport const IDLE_NAVIGATION: NavigationStates[\"Idle\"] = {\n state: \"idle\",\n location: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_FETCHER: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n data: undefined,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n};\n\nexport const IDLE_BLOCKER: BlockerUnblocked = {\n state: \"unblocked\",\n proceed: undefined,\n reset: undefined,\n location: undefined,\n};\n\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n\nconst defaultMapRouteProperties: MapRoutePropertiesFunction = (route) => ({\n hasErrorBoundary: Boolean(route.hasErrorBoundary),\n});\n\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Create a router and listen to history POP navigations\n */\nexport function createRouter(init: RouterInit): Router {\n const routerWindow = init.window\n ? init.window\n : typeof window !== \"undefined\"\n ? window\n : undefined;\n const isBrowser =\n typeof routerWindow !== \"undefined\" &&\n typeof routerWindow.document !== \"undefined\" &&\n typeof routerWindow.document.createElement !== \"undefined\";\n const isServer = !isBrowser;\n\n invariant(\n init.routes.length > 0,\n \"You must provide a non-empty routes array to createRouter\"\n );\n\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (init.mapRouteProperties) {\n mapRouteProperties = init.mapRouteProperties;\n } else if (init.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = init.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n\n // Routes keyed by ID\n let manifest: RouteManifest = {};\n // Routes in tree format for matching\n let dataRoutes = convertRoutesToDataRoutes(\n init.routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n let inFlightDataRoutes: AgnosticDataRouteObject[] | undefined;\n let basename = init.basename || \"/\";\n let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy;\n let patchRoutesOnMissImpl = init.unstable_patchRoutesOnMiss;\n\n // Config driven behavior flags\n let future: FutureConfig = {\n v7_fetcherPersist: false,\n v7_normalizeFormMethod: false,\n v7_partialHydration: false,\n v7_prependBasename: false,\n v7_relativeSplatPath: false,\n v7_skipActionErrorRevalidation: false,\n ...init.future,\n };\n // Cleanup function for history\n let unlistenHistory: (() => void) | null = null;\n // Externally-provided functions to call on all state changes\n let subscribers = new Set();\n // Externally-provided object to hold scroll restoration locations during routing\n let savedScrollPositions: Record | null = null;\n // Externally-provided function to get scroll restoration keys\n let getScrollRestorationKey: GetScrollRestorationKeyFunction | null = null;\n // Externally-provided function to get current scroll position\n let getScrollPosition: GetScrollPositionFunction | null = null;\n // One-time flag to control the initial hydration scroll restoration. Because\n // we don't get the saved positions from until _after_\n // the initial render, we need to manually trigger a separate updateState to\n // send along the restoreScrollPosition\n // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n // SSR did the initial scroll restoration.\n let initialScrollRestored = init.hydrationData != null;\n\n let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n let initialErrors: RouteData | null = null;\n\n if (initialMatches == null && !patchRoutesOnMissImpl) {\n // If we do not match a user-provided-route, fall back to the root\n // to allow the error boundary to take over\n let error = getInternalRouterError(404, {\n pathname: init.history.location.pathname,\n });\n let { matches, route } = getShortCircuitMatches(dataRoutes);\n initialMatches = matches;\n initialErrors = { [route.id]: error };\n }\n\n // In SPA apps, if the user provided a patchRoutesOnMiss implementation and\n // our initial match is a splat route, clear them out so we run through lazy\n // discovery on hydration in case there's a more accurate lazy route match.\n // In SSR apps (with `hydrationData`), we expect that the server will send\n // up the proper matched routes so we don't want to run lazy discovery on\n // initial hydration and want to hydrate into the splat route.\n if (initialMatches && !init.hydrationData) {\n let fogOfWar = checkFogOfWar(\n initialMatches,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active) {\n initialMatches = null;\n }\n }\n\n let initialized: boolean;\n if (!initialMatches) {\n initialized = false;\n initialMatches = [];\n\n // If partial hydration and fog of war is enabled, we will be running\n // `patchRoutesOnMiss` during hydration so include any partial matches as\n // the initial matches so we can properly render `HydrateFallback`'s\n if (future.v7_partialHydration) {\n let fogOfWar = checkFogOfWar(\n null,\n dataRoutes,\n init.history.location.pathname\n );\n if (fogOfWar.active && fogOfWar.matches) {\n initialMatches = fogOfWar.matches;\n }\n }\n } else if (initialMatches.some((m) => m.route.lazy)) {\n // All initialMatches need to be loaded before we're ready. If we have lazy\n // functions around still then we'll need to run them in initialize()\n initialized = false;\n } else if (!initialMatches.some((m) => m.route.loader)) {\n // If we've got no loaders to run, then we're good to go\n initialized = true;\n } else if (future.v7_partialHydration) {\n // If partial hydration is enabled, we're initialized so long as we were\n // provided with hydrationData for every route with a loader, and no loaders\n // were marked for explicit hydration\n let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n let errors = init.hydrationData ? init.hydrationData.errors : null;\n let isRouteInitialized = (m: AgnosticDataRouteMatch) => {\n // No loader, nothing to initialize\n if (!m.route.loader) {\n return true;\n }\n // Explicitly opting-in to running on hydration\n if (\n typeof m.route.loader === \"function\" &&\n m.route.loader.hydrate === true\n ) {\n return false;\n }\n // Otherwise, initialized if hydrated with data or an error\n return (\n (loaderData && loaderData[m.route.id] !== undefined) ||\n (errors && errors[m.route.id] !== undefined)\n );\n };\n\n // If errors exist, don't consider routes below the boundary\n if (errors) {\n let idx = initialMatches.findIndex(\n (m) => errors![m.route.id] !== undefined\n );\n initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n } else {\n initialized = initialMatches.every(isRouteInitialized);\n }\n } else {\n // Without partial hydration - we're initialized if we were provided any\n // hydrationData - which is expected to be complete\n initialized = init.hydrationData != null;\n }\n\n let router: Router;\n let state: RouterState = {\n historyAction: init.history.action,\n location: init.history.location,\n matches: initialMatches,\n initialized,\n navigation: IDLE_NAVIGATION,\n // Don't restore on initial updateState() if we were SSR'd\n restoreScrollPosition: init.hydrationData != null ? false : null,\n preventScrollReset: false,\n revalidation: \"idle\",\n loaderData: (init.hydrationData && init.hydrationData.loaderData) || {},\n actionData: (init.hydrationData && init.hydrationData.actionData) || null,\n errors: (init.hydrationData && init.hydrationData.errors) || initialErrors,\n fetchers: new Map(),\n blockers: new Map(),\n };\n\n // -- Stateful internal variables to manage navigations --\n // Current navigation in progress (to be committed in completeNavigation)\n let pendingAction: HistoryAction = HistoryAction.Pop;\n\n // Should the current navigation prevent the scroll reset if scroll cannot\n // be restored?\n let pendingPreventScrollReset = false;\n\n // AbortController for the active navigation\n let pendingNavigationController: AbortController | null;\n\n // Should the current navigation enable document.startViewTransition?\n let pendingViewTransitionEnabled = false;\n\n // Store applied view transitions so we can apply them on POP\n let appliedViewTransitions: Map> = new Map<\n string,\n Set\n >();\n\n // Cleanup function for persisting applied transitions to sessionStorage\n let removePageHideEventListener: (() => void) | null = null;\n\n // We use this to avoid touching history in completeNavigation if a\n // revalidation is entirely uninterrupted\n let isUninterruptedRevalidation = false;\n\n // Use this internal flag to force revalidation of all loaders:\n // - submissions (completed or interrupted)\n // - useRevalidator()\n // - X-Remix-Revalidate (from redirect)\n let isRevalidationRequired = false;\n\n // Use this internal array to capture routes that require revalidation due\n // to a cancelled deferred on action submission\n let cancelledDeferredRoutes: string[] = [];\n\n // Use this internal array to capture fetcher loads that were cancelled by an\n // action navigation and require revalidation\n let cancelledFetcherLoads: Set = new Set();\n\n // AbortControllers for any in-flight fetchers\n let fetchControllers = new Map();\n\n // Track loads based on the order in which they started\n let incrementingLoadId = 0;\n\n // Track the outstanding pending navigation data load to be compared against\n // the globally incrementing load when a fetcher load lands after a completed\n // navigation\n let pendingNavigationLoadId = -1;\n\n // Fetchers that triggered data reloads as a result of their actions\n let fetchReloadIds = new Map();\n\n // Fetchers that triggered redirect navigations\n let fetchRedirectIds = new Set();\n\n // Most recent href/match for fetcher.load calls for fetchers\n let fetchLoadMatches = new Map();\n\n // Ref-count mounted fetchers so we know when it's ok to clean them up\n let activeFetchers = new Map();\n\n // Fetchers that have requested a delete when using v7_fetcherPersist,\n // they'll be officially removed after they return to idle\n let deletedFetchers = new Set();\n\n // Store DeferredData instances for active route matches. When a\n // route loader returns defer() we stick one in here. Then, when a nested\n // promise resolves we update loaderData. If a new navigation starts we\n // cancel active deferreds for eliminated routes.\n let activeDeferreds = new Map();\n\n // Store blocker functions in a separate Map outside of router state since\n // we don't need to update UI state if they change\n let blockerFunctions = new Map();\n\n // Map of pending patchRoutesOnMiss() promises (keyed by path/matches) so\n // that we only kick them off once for a given combo\n let pendingPatchRoutes = new Map<\n string,\n ReturnType\n >();\n\n // Flag to ignore the next history update, so we can revert the URL change on\n // a POP navigation that was blocked by the user without touching router state\n let ignoreNextHistoryUpdate = false;\n\n // Initialize the router, all side effects should be kicked off from here.\n // Implemented as a Fluent API for ease of:\n // let router = createRouter(init).initialize();\n function initialize() {\n // If history informs us of a POP navigation, start the navigation but do not update\n // state. We'll update our own state once the navigation completes\n unlistenHistory = init.history.listen(\n ({ action: historyAction, location, delta }) => {\n // Ignore this event if it was just us resetting the URL from a\n // blocked POP navigation\n if (ignoreNextHistoryUpdate) {\n ignoreNextHistoryUpdate = false;\n return;\n }\n\n warning(\n blockerFunctions.size === 0 || delta != null,\n \"You are trying to use a blocker on a POP navigation to a location \" +\n \"that was not created by @remix-run/router. This will fail silently in \" +\n \"production. This can happen if you are navigating outside the router \" +\n \"via `window.history.pushState`/`window.location.hash` instead of using \" +\n \"router navigation APIs. This can also happen if you are using \" +\n \"createHashRouter and the user manually changes the URL.\"\n );\n\n let blockerKey = shouldBlockNavigation({\n currentLocation: state.location,\n nextLocation: location,\n historyAction,\n });\n\n if (blockerKey && delta != null) {\n // Restore the URL to match the current UI, but don't update router state\n ignoreNextHistoryUpdate = true;\n init.history.go(delta * -1);\n\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location,\n });\n // Re-do the same POP navigation we just blocked\n init.history.go(delta);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return startNavigation(historyAction, location);\n }\n );\n\n if (isBrowser) {\n // FIXME: This feels gross. How can we cleanup the lines between\n // scrollRestoration/appliedTransitions persistance?\n restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n let _saveAppliedTransitions = () =>\n persistAppliedTransitions(routerWindow, appliedViewTransitions);\n routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n removePageHideEventListener = () =>\n routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n }\n\n // Kick off initial data load if needed. Use Pop to avoid modifying history\n // Note we don't do any handling of lazy here. For SPA's it'll get handled\n // in the normal navigation flow. For SSR it's expected that lazy modules are\n // resolved prior to router creation since we can't go into a fallbackElement\n // UI for SSR'd apps\n if (!state.initialized) {\n startNavigation(HistoryAction.Pop, state.location, {\n initialHydration: true,\n });\n }\n\n return router;\n }\n\n // Clean up a router and it's side effects\n function dispose() {\n if (unlistenHistory) {\n unlistenHistory();\n }\n if (removePageHideEventListener) {\n removePageHideEventListener();\n }\n subscribers.clear();\n pendingNavigationController && pendingNavigationController.abort();\n state.fetchers.forEach((_, key) => deleteFetcher(key));\n state.blockers.forEach((_, key) => deleteBlocker(key));\n }\n\n // Subscribe to state updates for the router\n function subscribe(fn: RouterSubscriber) {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n }\n\n // Update our state and notify the calling context of the change\n function updateState(\n newState: Partial,\n opts: {\n flushSync?: boolean;\n viewTransitionOpts?: ViewTransitionOpts;\n } = {}\n ): void {\n state = {\n ...state,\n ...newState,\n };\n\n // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n // can be removed\n let completedFetchers: string[] = [];\n let deletedFetchersKeys: string[] = [];\n\n if (future.v7_fetcherPersist) {\n state.fetchers.forEach((fetcher, key) => {\n if (fetcher.state === \"idle\") {\n if (deletedFetchers.has(key)) {\n // Unmounted from the UI and can be totally removed\n deletedFetchersKeys.push(key);\n } else {\n // Returned to idle but still mounted in the UI, so semi-remains for\n // revalidations and such\n completedFetchers.push(key);\n }\n }\n });\n }\n\n // Iterate over a local copy so that if flushSync is used and we end up\n // removing and adding a new subscriber due to the useCallback dependencies,\n // we don't get ourselves into a loop calling the new subscriber immediately\n [...subscribers].forEach((subscriber) =>\n subscriber(state, {\n deletedFetchers: deletedFetchersKeys,\n unstable_viewTransitionOpts: opts.viewTransitionOpts,\n unstable_flushSync: opts.flushSync === true,\n })\n );\n\n // Remove idle fetchers from state since we only care about in-flight fetchers.\n if (future.v7_fetcherPersist) {\n completedFetchers.forEach((key) => state.fetchers.delete(key));\n deletedFetchersKeys.forEach((key) => deleteFetcher(key));\n }\n }\n\n // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n // and setting state.[historyAction/location/matches] to the new route.\n // - Location is a required param\n // - Navigation will always be set to IDLE_NAVIGATION\n // - Can pass any other state in newState\n function completeNavigation(\n location: Location,\n newState: Partial>,\n { flushSync }: { flushSync?: boolean } = {}\n ): void {\n // Deduce if we're in a loading/actionReload state:\n // - We have committed actionData in the store\n // - The current navigation was a mutation submission\n // - We're past the submitting state and into the loading state\n // - The location being loaded is not the result of a redirect\n let isActionReload =\n state.actionData != null &&\n state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n state.navigation.state === \"loading\" &&\n location.state?._isRedirect !== true;\n\n let actionData: RouteData | null;\n if (newState.actionData) {\n if (Object.keys(newState.actionData).length > 0) {\n actionData = newState.actionData;\n } else {\n // Empty actionData -> clear prior actionData due to an action error\n actionData = null;\n }\n } else if (isActionReload) {\n // Keep the current data if we're wrapping up the action reload\n actionData = state.actionData;\n } else {\n // Clear actionData on any other completed navigations\n actionData = null;\n }\n\n // Always preserve any existing loaderData from re-used routes\n let loaderData = newState.loaderData\n ? mergeLoaderData(\n state.loaderData,\n newState.loaderData,\n newState.matches || [],\n newState.errors\n )\n : state.loaderData;\n\n // On a successful navigation we can assume we got through all blockers\n // so we can start fresh\n let blockers = state.blockers;\n if (blockers.size > 0) {\n blockers = new Map(blockers);\n blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n }\n\n // Always respect the user flag. Otherwise don't reset on mutation\n // submission navigations unless they redirect\n let preventScrollReset =\n pendingPreventScrollReset === true ||\n (state.navigation.formMethod != null &&\n isMutationMethod(state.navigation.formMethod) &&\n location.state?._isRedirect !== true);\n\n // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n if (inFlightDataRoutes) {\n dataRoutes = inFlightDataRoutes;\n inFlightDataRoutes = undefined;\n }\n\n if (isUninterruptedRevalidation) {\n // If this was an uninterrupted revalidation then do not touch history\n } else if (pendingAction === HistoryAction.Pop) {\n // Do nothing for POP - URL has already been updated\n } else if (pendingAction === HistoryAction.Push) {\n init.history.push(location, location.state);\n } else if (pendingAction === HistoryAction.Replace) {\n init.history.replace(location, location.state);\n }\n\n let viewTransitionOpts: ViewTransitionOpts | undefined;\n\n // On POP, enable transitions if they were enabled on the original navigation\n if (pendingAction === HistoryAction.Pop) {\n // Forward takes precedence so they behave like the original navigation\n let priorPaths = appliedViewTransitions.get(state.location.pathname);\n if (priorPaths && priorPaths.has(location.pathname)) {\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n } else if (appliedViewTransitions.has(location.pathname)) {\n // If we don't have a previous forward nav, assume we're popping back to\n // the new location and enable if that location previously enabled\n viewTransitionOpts = {\n currentLocation: location,\n nextLocation: state.location,\n };\n }\n } else if (pendingViewTransitionEnabled) {\n // Store the applied transition on PUSH/REPLACE\n let toPaths = appliedViewTransitions.get(state.location.pathname);\n if (toPaths) {\n toPaths.add(location.pathname);\n } else {\n toPaths = new Set([location.pathname]);\n appliedViewTransitions.set(state.location.pathname, toPaths);\n }\n viewTransitionOpts = {\n currentLocation: state.location,\n nextLocation: location,\n };\n }\n\n updateState(\n {\n ...newState, // matches, errors, fetchers go through as-is\n actionData,\n loaderData,\n historyAction: pendingAction,\n location,\n initialized: true,\n navigation: IDLE_NAVIGATION,\n revalidation: \"idle\",\n restoreScrollPosition: getSavedScrollPosition(\n location,\n newState.matches || state.matches\n ),\n preventScrollReset,\n blockers,\n },\n {\n viewTransitionOpts,\n flushSync: flushSync === true,\n }\n );\n\n // Reset stateful navigation vars\n pendingAction = HistoryAction.Pop;\n pendingPreventScrollReset = false;\n pendingViewTransitionEnabled = false;\n isUninterruptedRevalidation = false;\n isRevalidationRequired = false;\n cancelledDeferredRoutes = [];\n }\n\n // Trigger a navigation event, which can either be a numerical POP or a PUSH\n // replace with an optional submission\n async function navigate(\n to: number | To | null,\n opts?: RouterNavigateOptions\n ): Promise {\n if (typeof to === \"number\") {\n init.history.go(to);\n return;\n }\n\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n to,\n future.v7_relativeSplatPath,\n opts?.fromRouteId,\n opts?.relative\n );\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n false,\n normalizedPath,\n opts\n );\n\n let currentLocation = state.location;\n let nextLocation = createLocation(state.location, path, opts && opts.state);\n\n // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n // URL from window.location, so we need to encode it here so the behavior\n // remains the same as POP and non-data-router usages. new URL() does all\n // the same encoding we'd get from a history.pushState/window.location read\n // without having to touch history\n nextLocation = {\n ...nextLocation,\n ...init.history.encodeLocation(nextLocation),\n };\n\n let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n\n let historyAction = HistoryAction.Push;\n\n if (userReplace === true) {\n historyAction = HistoryAction.Replace;\n } else if (userReplace === false) {\n // no-op\n } else if (\n submission != null &&\n isMutationMethod(submission.formMethod) &&\n submission.formAction === state.location.pathname + state.location.search\n ) {\n // By default on submissions to the current location we REPLACE so that\n // users don't have to double-click the back button to get to the prior\n // location. If the user redirects to a different location from the\n // action/loader this will be ignored and the redirect will be a PUSH\n historyAction = HistoryAction.Replace;\n }\n\n let preventScrollReset =\n opts && \"preventScrollReset\" in opts\n ? opts.preventScrollReset === true\n : undefined;\n\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let blockerKey = shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n });\n\n if (blockerKey) {\n // Put the blocker into a blocked state\n updateBlocker(blockerKey, {\n state: \"blocked\",\n location: nextLocation,\n proceed() {\n updateBlocker(blockerKey!, {\n state: \"proceeding\",\n proceed: undefined,\n reset: undefined,\n location: nextLocation,\n });\n // Send the same navigation through\n navigate(to, opts);\n },\n reset() {\n let blockers = new Map(state.blockers);\n blockers.set(blockerKey!, IDLE_BLOCKER);\n updateState({ blockers });\n },\n });\n return;\n }\n\n return await startNavigation(historyAction, nextLocation, {\n submission,\n // Send through the formData serialization error if we have one so we can\n // render at the right error boundary after we match routes\n pendingError: error,\n preventScrollReset,\n replace: opts && opts.replace,\n enableViewTransition: opts && opts.unstable_viewTransition,\n flushSync,\n });\n }\n\n // Revalidate all current loaders. If a navigation is in progress or if this\n // is interrupted by a navigation, allow this to \"succeed\" by calling all\n // loaders during the next loader round\n function revalidate() {\n interruptActiveLoads();\n updateState({ revalidation: \"loading\" });\n\n // If we're currently submitting an action, we don't need to start a new\n // navigation, we'll just let the follow up loader execution call all loaders\n if (state.navigation.state === \"submitting\") {\n return;\n }\n\n // If we're currently in an idle state, start a new navigation for the current\n // action/location and mark it as uninterrupted, which will skip the history\n // update in completeNavigation\n if (state.navigation.state === \"idle\") {\n startNavigation(state.historyAction, state.location, {\n startUninterruptedRevalidation: true,\n });\n return;\n }\n\n // Otherwise, if we're currently in a loading state, just start a new\n // navigation to the navigation.location but do not trigger an uninterrupted\n // revalidation so that history correctly updates once the navigation completes\n startNavigation(\n pendingAction || state.historyAction,\n state.navigation.location,\n { overrideNavigation: state.navigation }\n );\n }\n\n // Start a navigation to the given action/location. Can optionally provide a\n // overrideNavigation which will override the normalLoad in the case of a redirect\n // navigation\n async function startNavigation(\n historyAction: HistoryAction,\n location: Location,\n opts?: {\n initialHydration?: boolean;\n submission?: Submission;\n fetcherSubmission?: Submission;\n overrideNavigation?: Navigation;\n pendingError?: ErrorResponseImpl;\n startUninterruptedRevalidation?: boolean;\n preventScrollReset?: boolean;\n replace?: boolean;\n enableViewTransition?: boolean;\n flushSync?: boolean;\n }\n ): Promise {\n // Abort any in-progress navigations and start a new one. Unset any ongoing\n // uninterrupted revalidations unless told otherwise, since we want this\n // new navigation to update history normally\n pendingNavigationController && pendingNavigationController.abort();\n pendingNavigationController = null;\n pendingAction = historyAction;\n isUninterruptedRevalidation =\n (opts && opts.startUninterruptedRevalidation) === true;\n\n // Save the current scroll position every time we start a new navigation,\n // and track whether we should reset scroll on completion\n saveScrollPosition(state.location, state.matches);\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let loadingNavigation = opts && opts.overrideNavigation;\n let matches = matchRoutes(routesToUse, location, basename);\n let flushSync = (opts && opts.flushSync) === true;\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n // Short circuit with a 404 on the root error boundary if we match nothing\n if (!matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n completeNavigation(\n location,\n {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n },\n { flushSync }\n );\n return;\n }\n\n // Short circuit if it's only a hash change and not a revalidation or\n // mutation submission.\n //\n // Ignore on initial page loads because since the initial load will always\n // be \"same hash\". For example, on /page#hash and submit a \n // which will default to a navigation to /page\n if (\n state.initialized &&\n !isRevalidationRequired &&\n isHashChangeOnly(state.location, location) &&\n !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))\n ) {\n completeNavigation(location, { matches }, { flushSync });\n return;\n }\n\n // Create a controller/Request for this navigation\n pendingNavigationController = new AbortController();\n let request = createClientSideRequest(\n init.history,\n location,\n pendingNavigationController.signal,\n opts && opts.submission\n );\n let pendingActionResult: PendingActionResult | undefined;\n\n if (opts && opts.pendingError) {\n // If we have a pendingError, it means the user attempted a GET submission\n // with binary FormData so assign here and skip to handleLoaders. That\n // way we handle calling loaders above the boundary etc. It's not really\n // different from an actionError in that sense.\n pendingActionResult = [\n findNearestBoundary(matches).route.id,\n { type: ResultType.error, error: opts.pendingError },\n ];\n } else if (\n opts &&\n opts.submission &&\n isMutationMethod(opts.submission.formMethod)\n ) {\n // Call action if we received an action submission\n let actionResult = await handleAction(\n request,\n location,\n opts.submission,\n matches,\n fogOfWar.active,\n { replace: opts.replace, flushSync }\n );\n\n if (actionResult.shortCircuited) {\n return;\n }\n\n // If we received a 404 from handleAction, it's because we couldn't lazily\n // discover the destination route so we don't want to call loaders\n if (actionResult.pendingActionResult) {\n let [routeId, result] = actionResult.pendingActionResult;\n if (\n isErrorResult(result) &&\n isRouteErrorResponse(result.error) &&\n result.error.status === 404\n ) {\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: actionResult.matches,\n loaderData: {},\n errors: {\n [routeId]: result.error,\n },\n });\n return;\n }\n }\n\n matches = actionResult.matches || matches;\n pendingActionResult = actionResult.pendingActionResult;\n loadingNavigation = getLoadingNavigation(location, opts.submission);\n flushSync = false;\n // No need to do fog of war matching again on loader execution\n fogOfWar.active = false;\n\n // Create a GET request for the loaders\n request = createClientSideRequest(\n init.history,\n request.url,\n request.signal\n );\n }\n\n // Call loaders\n let {\n shortCircuited,\n matches: updatedMatches,\n loaderData,\n errors,\n } = await handleLoaders(\n request,\n location,\n matches,\n fogOfWar.active,\n loadingNavigation,\n opts && opts.submission,\n opts && opts.fetcherSubmission,\n opts && opts.replace,\n opts && opts.initialHydration === true,\n flushSync,\n pendingActionResult\n );\n\n if (shortCircuited) {\n return;\n }\n\n // Clean up now that the action/loaders have completed. Don't clean up if\n // we short circuited because pendingNavigationController will have already\n // been assigned to a new controller for the next navigation\n pendingNavigationController = null;\n\n completeNavigation(location, {\n matches: updatedMatches || matches,\n ...getActionDataForCommit(pendingActionResult),\n loaderData,\n errors,\n });\n }\n\n // Call the action matched by the leaf route for this navigation and handle\n // redirects/errors\n async function handleAction(\n request: Request,\n location: Location,\n submission: Submission,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n opts: { replace?: boolean; flushSync?: boolean } = {}\n ): Promise {\n interruptActiveLoads();\n\n // Put us in a submitting state\n let navigation = getSubmittingNavigation(location, submission);\n updateState({ navigation }, { flushSync: opts.flushSync === true });\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let { boundaryId, error } = handleDiscoverRouteError(\n location.pathname,\n discoverResult\n );\n return {\n matches: discoverResult.partialMatches,\n pendingActionResult: [\n boundaryId,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else if (!discoverResult.matches) {\n let { notFoundMatches, error, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n pendingActionResult: [\n route.id,\n {\n type: ResultType.error,\n error,\n },\n ],\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n // Call our action and get the result\n let result: DataResult;\n let actionMatch = getTargetMatch(matches, location);\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n result = {\n type: ResultType.error,\n error: getInternalRouterError(405, {\n method: request.method,\n pathname: location.pathname,\n routeId: actionMatch.route.id,\n }),\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches\n );\n result = results[0];\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n }\n\n if (isRedirectResult(result)) {\n let replace: boolean;\n if (opts && opts.replace != null) {\n replace = opts.replace;\n } else {\n // If the user didn't explicity indicate replace behavior, replace if\n // we redirected to the exact same location we're currently at to avoid\n // double back-buttons\n let location = normalizeRedirectLocation(\n result.response.headers.get(\"Location\")!,\n new URL(request.url),\n basename\n );\n replace = location === state.location.pathname + state.location.search;\n }\n await startRedirectNavigation(request, result, {\n submission,\n replace,\n });\n return { shortCircuited: true };\n }\n\n if (isDeferredResult(result)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n\n // By default, all submissions to the current location are REPLACE\n // navigations, but if the action threw an error that'll be rendered in\n // an errorElement, we fall back to PUSH so that the user can use the\n // back button to get back to the pre-submission form location to try\n // again\n if ((opts && opts.replace) !== true) {\n pendingAction = HistoryAction.Push;\n }\n\n return {\n matches,\n pendingActionResult: [boundaryMatch.route.id, result],\n };\n }\n\n return {\n matches,\n pendingActionResult: [actionMatch.route.id, result],\n };\n }\n\n // Call all applicable loaders for the given matches, handling redirects,\n // errors, etc.\n async function handleLoaders(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n overrideNavigation?: Navigation,\n submission?: Submission,\n fetcherSubmission?: Submission,\n replace?: boolean,\n initialHydration?: boolean,\n flushSync?: boolean,\n pendingActionResult?: PendingActionResult\n ): Promise {\n // Figure out the right navigation we want to use for data loading\n let loadingNavigation =\n overrideNavigation || getLoadingNavigation(location, submission);\n\n // If this was a redirect from an action we don't have a \"submission\" but\n // we have it on the loading navigation so use that if available\n let activeSubmission =\n submission ||\n fetcherSubmission ||\n getSubmissionFromNavigation(loadingNavigation);\n\n // If this is an uninterrupted revalidation, we remain in our current idle\n // state. If not, we need to switch to our loading state and load data,\n // preserving any new action data or existing action data (in the case of\n // a revalidation interrupting an actionReload)\n // If we have partialHydration enabled, then don't update the state for the\n // initial data load since it's not a \"navigation\"\n let shouldUpdateNavigationState =\n !isUninterruptedRevalidation &&\n (!future.v7_partialHydration || !initialHydration);\n\n // When fog of war is enabled, we enter our `loading` state earlier so we\n // can discover new routes during the `loading` state. We skip this if\n // we've already run actions since we would have done our matching already.\n // If the children() function threw then, we want to proceed with the\n // partial matches it discovered.\n if (isFogOfWar) {\n if (shouldUpdateNavigationState) {\n let actionData = getUpdatedActionData(pendingActionResult);\n updateState(\n {\n navigation: loadingNavigation,\n ...(actionData !== undefined ? { actionData } : {}),\n },\n {\n flushSync,\n }\n );\n }\n\n let discoverResult = await discoverRoutes(\n matches,\n location.pathname,\n request.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return { shortCircuited: true };\n } else if (discoverResult.type === \"error\") {\n let { boundaryId, error } = handleDiscoverRouteError(\n location.pathname,\n discoverResult\n );\n return {\n matches: discoverResult.partialMatches,\n loaderData: {},\n errors: {\n [boundaryId]: error,\n },\n };\n } else if (!discoverResult.matches) {\n let { error, notFoundMatches, route } = handleNavigational404(\n location.pathname\n );\n return {\n matches: notFoundMatches,\n loaderData: {},\n errors: {\n [route.id]: error,\n },\n };\n } else {\n matches = discoverResult.matches;\n }\n }\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n activeSubmission,\n location,\n future.v7_partialHydration && initialHydration === true,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n pendingActionResult\n );\n\n // Cancel pending deferreds for no-longer-matched routes or routes we're\n // about to reload. Note that if this is an action reload we would have\n // already cancelled all pending deferreds so this would be a no-op\n cancelActiveDeferreds(\n (routeId) =>\n !(matches && matches.some((m) => m.route.id === routeId)) ||\n (matchesToLoad && matchesToLoad.some((m) => m.route.id === routeId))\n );\n\n pendingNavigationLoadId = ++incrementingLoadId;\n\n // Short circuit if we have no loaders to run\n if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n let updatedFetchers = markFetchRedirectsDone();\n completeNavigation(\n location,\n {\n matches,\n loaderData: {},\n // Commit pending error if we're short circuiting\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? { [pendingActionResult[0]]: pendingActionResult[1].error }\n : null,\n ...getActionDataForCommit(pendingActionResult),\n ...(updatedFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n },\n { flushSync }\n );\n return { shortCircuited: true };\n }\n\n if (shouldUpdateNavigationState) {\n let updates: Partial = {};\n if (!isFogOfWar) {\n // Only update navigation/actionNData if we didn't already do it above\n updates.navigation = loadingNavigation;\n let actionData = getUpdatedActionData(pendingActionResult);\n if (actionData !== undefined) {\n updates.actionData = actionData;\n }\n }\n if (revalidatingFetchers.length > 0) {\n updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n }\n updateState(updates, { flushSync });\n }\n\n revalidatingFetchers.forEach((rf) => {\n if (fetchControllers.has(rf.key)) {\n abortFetcher(rf.key);\n }\n if (rf.controller) {\n // Fetchers use an independent AbortController so that aborting a fetcher\n // (via deleteFetcher) does not abort the triggering navigation that\n // triggered the revalidation\n fetchControllers.set(rf.key, rf.controller);\n }\n });\n\n // Proxy navigation abort through to revalidation fetchers\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((f) => abortFetcher(f.key));\n if (pendingNavigationController) {\n pendingNavigationController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n request\n );\n\n if (request.signal.aborted) {\n return { shortCircuited: true };\n }\n\n // Clean up _after_ loaders have completed. Don't clean up if we short\n // circuited because fetchControllers would have been aborted and\n // reassigned to new controllers for the next navigation\n if (pendingNavigationController) {\n pendingNavigationController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n }\n revalidatingFetchers.forEach((rf) => fetchControllers.delete(rf.key));\n\n // If any loaders returned a redirect Response, start a new REPLACE navigation\n let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n await startRedirectNavigation(request, redirect.result, {\n replace,\n });\n return { shortCircuited: true };\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n matches,\n matchesToLoad,\n loaderResults,\n pendingActionResult,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Wire up subscribers to update loaderData as promises settle\n activeDeferreds.forEach((deferredData, routeId) => {\n deferredData.subscribe((aborted) => {\n // Note: No need to updateState here since the TrackedPromise on\n // loaderData is stable across resolve/reject\n // Remove this instance if we were aborted or if promises have settled\n if (aborted || deferredData.done) {\n activeDeferreds.delete(routeId);\n }\n });\n });\n\n // During partial hydration, preserve SSR errors for routes that don't re-run\n if (future.v7_partialHydration && initialHydration && state.errors) {\n Object.entries(state.errors)\n .filter(([id]) => !matchesToLoad.some((m) => m.route.id === id))\n .forEach(([routeId, error]) => {\n errors = Object.assign(errors || {}, { [routeId]: error });\n });\n }\n\n let updatedFetchers = markFetchRedirectsDone();\n let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n let shouldUpdateFetchers =\n updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n\n return {\n matches,\n loaderData,\n errors,\n ...(shouldUpdateFetchers ? { fetchers: new Map(state.fetchers) } : {}),\n };\n }\n\n function getUpdatedActionData(\n pendingActionResult: PendingActionResult | undefined\n ): Record | null | undefined {\n if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n // This is cast to `any` currently because `RouteData`uses any and it\n // would be a breaking change to use any.\n // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n return {\n [pendingActionResult[0]]: pendingActionResult[1].data as any,\n };\n } else if (state.actionData) {\n if (Object.keys(state.actionData).length === 0) {\n return null;\n } else {\n return state.actionData;\n }\n }\n }\n\n function getUpdatedRevalidatingFetchers(\n revalidatingFetchers: RevalidatingFetcher[]\n ) {\n revalidatingFetchers.forEach((rf) => {\n let fetcher = state.fetchers.get(rf.key);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n fetcher ? fetcher.data : undefined\n );\n state.fetchers.set(rf.key, revalidatingFetcher);\n });\n return new Map(state.fetchers);\n }\n\n // Trigger a fetcher load/submit for the given fetcher key\n function fetch(\n key: string,\n routeId: string,\n href: string | null,\n opts?: RouterFetchOptions\n ) {\n if (isServer) {\n throw new Error(\n \"router.fetch() was called during the server render, but it shouldn't be. \" +\n \"You are likely calling a useFetcher() method in the body of your component. \" +\n \"Try moving it to a useEffect or a callback.\"\n );\n }\n\n if (fetchControllers.has(key)) abortFetcher(key);\n let flushSync = (opts && opts.unstable_flushSync) === true;\n\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let normalizedPath = normalizeTo(\n state.location,\n state.matches,\n basename,\n future.v7_prependBasename,\n href,\n future.v7_relativeSplatPath,\n routeId,\n opts?.relative\n );\n let matches = matchRoutes(routesToUse, normalizedPath, basename);\n\n let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n if (fogOfWar.active && fogOfWar.matches) {\n matches = fogOfWar.matches;\n }\n\n if (!matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: normalizedPath }),\n { flushSync }\n );\n return;\n }\n\n let { path, submission, error } = normalizeNavigateOptions(\n future.v7_normalizeFormMethod,\n true,\n normalizedPath,\n opts\n );\n\n if (error) {\n setFetcherError(key, routeId, error, { flushSync });\n return;\n }\n\n let match = getTargetMatch(matches, path);\n\n pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n\n if (submission && isMutationMethod(submission.formMethod)) {\n handleFetcherAction(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n submission\n );\n return;\n }\n\n // Store off the match so we can call it's shouldRevalidate on subsequent\n // revalidations\n fetchLoadMatches.set(key, { routeId, path });\n handleFetcherLoader(\n key,\n routeId,\n path,\n match,\n matches,\n fogOfWar.active,\n flushSync,\n submission\n );\n }\n\n // Call the action for the matched fetcher.submit(), and then handle redirects,\n // errors, and revalidation\n async function handleFetcherAction(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n requestMatches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n submission: Submission\n ) {\n interruptActiveLoads();\n fetchLoadMatches.delete(key);\n\n function detectAndHandle405Error(m: AgnosticDataRouteMatch) {\n if (!m.route.action && !m.route.lazy) {\n let error = getInternalRouterError(405, {\n method: submission.formMethod,\n pathname: path,\n routeId: routeId,\n });\n setFetcherError(key, routeId, error, { flushSync });\n return true;\n }\n return false;\n }\n\n if (!isFogOfWar && detectAndHandle405Error(match)) {\n return;\n }\n\n // Put this fetcher into it's submitting state\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n flushSync,\n });\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal,\n submission\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n requestMatches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n let { error } = handleDiscoverRouteError(path, discoverResult);\n setFetcherError(key, routeId, error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n requestMatches = discoverResult.matches;\n match = getTargetMatch(requestMatches, path);\n\n if (detectAndHandle405Error(match)) {\n return;\n }\n }\n }\n\n // Call the action for the fetcher\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let actionResults = await callDataStrategy(\n \"action\",\n fetchRequest,\n [match],\n requestMatches\n );\n let actionResult = actionResults[0];\n\n if (fetchRequest.signal.aborted) {\n // We can delete this so long as we weren't aborted by our own fetcher\n // re-submit which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n return;\n }\n\n // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n // or redirects processed for unmounted fetchers so we just revert them to\n // idle\n if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n // Let SuccessResult's fall through for revalidation\n } else {\n if (isRedirectResult(actionResult)) {\n fetchControllers.delete(key);\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our action started, so that\n // should take precedence over this redirect navigation. We already\n // set isRevalidationRequired so all loaders for the new route should\n // fire unless opted out via shouldRevalidate\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n updateFetcherState(key, getLoadingFetcher(submission));\n return startRedirectNavigation(fetchRequest, actionResult, {\n fetcherSubmission: submission,\n });\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(actionResult)) {\n setFetcherError(key, routeId, actionResult.error);\n return;\n }\n }\n\n if (isDeferredResult(actionResult)) {\n throw getInternalRouterError(400, { type: \"defer-action\" });\n }\n\n // Start the data load for current matches, or the next location if we're\n // in the middle of a navigation\n let nextLocation = state.navigation.location || state.location;\n let revalidationRequest = createClientSideRequest(\n init.history,\n nextLocation,\n abortController.signal\n );\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let matches =\n state.navigation.state !== \"idle\"\n ? matchRoutes(routesToUse, state.navigation.location, basename)\n : state.matches;\n\n invariant(matches, \"Didn't find any matches after fetcher action\");\n\n let loadId = ++incrementingLoadId;\n fetchReloadIds.set(key, loadId);\n\n let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n state.fetchers.set(key, loadFetcher);\n\n let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(\n init.history,\n state,\n matches,\n submission,\n nextLocation,\n false,\n future.v7_skipActionErrorRevalidation,\n isRevalidationRequired,\n cancelledDeferredRoutes,\n cancelledFetcherLoads,\n deletedFetchers,\n fetchLoadMatches,\n fetchRedirectIds,\n routesToUse,\n basename,\n [match.route.id, actionResult]\n );\n\n // Put all revalidating fetchers into the loading state, except for the\n // current fetcher which we want to keep in it's current loading state which\n // contains it's action submission info + action data\n revalidatingFetchers\n .filter((rf) => rf.key !== key)\n .forEach((rf) => {\n let staleKey = rf.key;\n let existingFetcher = state.fetchers.get(staleKey);\n let revalidatingFetcher = getLoadingFetcher(\n undefined,\n existingFetcher ? existingFetcher.data : undefined\n );\n state.fetchers.set(staleKey, revalidatingFetcher);\n if (fetchControllers.has(staleKey)) {\n abortFetcher(staleKey);\n }\n if (rf.controller) {\n fetchControllers.set(staleKey, rf.controller);\n }\n });\n\n updateState({ fetchers: new Map(state.fetchers) });\n\n let abortPendingFetchRevalidations = () =>\n revalidatingFetchers.forEach((rf) => abortFetcher(rf.key));\n\n abortController.signal.addEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n let { loaderResults, fetcherResults } =\n await callLoadersAndMaybeResolveData(\n state.matches,\n matches,\n matchesToLoad,\n revalidatingFetchers,\n revalidationRequest\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n abortController.signal.removeEventListener(\n \"abort\",\n abortPendingFetchRevalidations\n );\n\n fetchReloadIds.delete(key);\n fetchControllers.delete(key);\n revalidatingFetchers.forEach((r) => fetchControllers.delete(r.key));\n\n let redirect = findRedirect([...loaderResults, ...fetcherResults]);\n if (redirect) {\n if (redirect.idx >= matchesToLoad.length) {\n // If this redirect came from a fetcher make sure we mark it in\n // fetchRedirectIds so it doesn't get revalidated on the next set of\n // loader executions\n let fetcherKey =\n revalidatingFetchers[redirect.idx - matchesToLoad.length].key;\n fetchRedirectIds.add(fetcherKey);\n }\n return startRedirectNavigation(revalidationRequest, redirect.result);\n }\n\n // Process and commit output from loaders\n let { loaderData, errors } = processLoaderData(\n state,\n state.matches,\n matchesToLoad,\n loaderResults,\n undefined,\n revalidatingFetchers,\n fetcherResults,\n activeDeferreds\n );\n\n // Since we let revalidations complete even if the submitting fetcher was\n // deleted, only put it back to idle if it hasn't been deleted\n if (state.fetchers.has(key)) {\n let doneFetcher = getDoneFetcher(actionResult.data);\n state.fetchers.set(key, doneFetcher);\n }\n\n abortStaleFetchLoads(loadId);\n\n // If we are currently in a navigation loading state and this fetcher is\n // more recent than the navigation, we want the newer data so abort the\n // navigation and complete it with the fetcher data\n if (\n state.navigation.state === \"loading\" &&\n loadId > pendingNavigationLoadId\n ) {\n invariant(pendingAction, \"Expected pending action\");\n pendingNavigationController && pendingNavigationController.abort();\n\n completeNavigation(state.navigation.location, {\n matches,\n loaderData,\n errors,\n fetchers: new Map(state.fetchers),\n });\n } else {\n // otherwise just update with the fetcher data, preserving any existing\n // loaderData for loaders that did not need to reload. We have to\n // manually merge here since we aren't going through completeNavigation\n updateState({\n errors,\n loaderData: mergeLoaderData(\n state.loaderData,\n loaderData,\n matches,\n errors\n ),\n fetchers: new Map(state.fetchers),\n });\n isRevalidationRequired = false;\n }\n }\n\n // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n async function handleFetcherLoader(\n key: string,\n routeId: string,\n path: string,\n match: AgnosticDataRouteMatch,\n matches: AgnosticDataRouteMatch[],\n isFogOfWar: boolean,\n flushSync: boolean,\n submission?: Submission\n ) {\n let existingFetcher = state.fetchers.get(key);\n updateFetcherState(\n key,\n getLoadingFetcher(\n submission,\n existingFetcher ? existingFetcher.data : undefined\n ),\n { flushSync }\n );\n\n let abortController = new AbortController();\n let fetchRequest = createClientSideRequest(\n init.history,\n path,\n abortController.signal\n );\n\n if (isFogOfWar) {\n let discoverResult = await discoverRoutes(\n matches,\n path,\n fetchRequest.signal\n );\n\n if (discoverResult.type === \"aborted\") {\n return;\n } else if (discoverResult.type === \"error\") {\n let { error } = handleDiscoverRouteError(path, discoverResult);\n setFetcherError(key, routeId, error, { flushSync });\n return;\n } else if (!discoverResult.matches) {\n setFetcherError(\n key,\n routeId,\n getInternalRouterError(404, { pathname: path }),\n { flushSync }\n );\n return;\n } else {\n matches = discoverResult.matches;\n match = getTargetMatch(matches, path);\n }\n }\n\n // Call the loader for this fetcher route match\n fetchControllers.set(key, abortController);\n\n let originatingLoadId = incrementingLoadId;\n let results = await callDataStrategy(\n \"loader\",\n fetchRequest,\n [match],\n matches\n );\n let result = results[0];\n\n // Deferred isn't supported for fetcher loads, await everything and treat it\n // as a normal load. resolveDeferredData will return undefined if this\n // fetcher gets aborted, so we just leave result untouched and short circuit\n // below if that happens\n if (isDeferredResult(result)) {\n result =\n (await resolveDeferredData(result, fetchRequest.signal, true)) ||\n result;\n }\n\n // We can delete this so long as we weren't aborted by our our own fetcher\n // re-load which would have put _new_ controller is in fetchControllers\n if (fetchControllers.get(key) === abortController) {\n fetchControllers.delete(key);\n }\n\n if (fetchRequest.signal.aborted) {\n return;\n }\n\n // We don't want errors bubbling up or redirects followed for unmounted\n // fetchers, so short circuit here if it was removed from the UI\n if (deletedFetchers.has(key)) {\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n }\n\n // If the loader threw a redirect Response, start a new REPLACE navigation\n if (isRedirectResult(result)) {\n if (pendingNavigationLoadId > originatingLoadId) {\n // A new navigation was kicked off after our loader started, so that\n // should take precedence over this redirect navigation\n updateFetcherState(key, getDoneFetcher(undefined));\n return;\n } else {\n fetchRedirectIds.add(key);\n await startRedirectNavigation(fetchRequest, result);\n return;\n }\n }\n\n // Process any non-redirect errors thrown\n if (isErrorResult(result)) {\n setFetcherError(key, routeId, result.error);\n return;\n }\n\n invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n\n // Put the fetcher back into an idle state\n updateFetcherState(key, getDoneFetcher(result.data));\n }\n\n /**\n * Utility function to handle redirects returned from an action or loader.\n * Normally, a redirect \"replaces\" the navigation that triggered it. So, for\n * example:\n *\n * - user is on /a\n * - user clicks a link to /b\n * - loader for /b redirects to /c\n *\n * In a non-JS app the browser would track the in-flight navigation to /b and\n * then replace it with /c when it encountered the redirect response. In\n * the end it would only ever update the URL bar with /c.\n *\n * In client-side routing using pushState/replaceState, we aim to emulate\n * this behavior and we also do not update history until the end of the\n * navigation (including processed redirects). This means that we never\n * actually touch history until we've processed redirects, so we just use\n * the history action from the original navigation (PUSH or REPLACE).\n */\n async function startRedirectNavigation(\n request: Request,\n redirect: RedirectResult,\n {\n submission,\n fetcherSubmission,\n replace,\n }: {\n submission?: Submission;\n fetcherSubmission?: Submission;\n replace?: boolean;\n } = {}\n ) {\n if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n isRevalidationRequired = true;\n }\n\n let location = redirect.response.headers.get(\"Location\");\n invariant(location, \"Expected a Location header on the redirect Response\");\n location = normalizeRedirectLocation(\n location,\n new URL(request.url),\n basename\n );\n let redirectLocation = createLocation(state.location, location, {\n _isRedirect: true,\n });\n\n if (isBrowser) {\n let isDocumentReload = false;\n\n if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n // Hard reload if the response contained X-Remix-Reload-Document\n isDocumentReload = true;\n } else if (ABSOLUTE_URL_REGEX.test(location)) {\n const url = init.history.createURL(location);\n isDocumentReload =\n // Hard reload if it's an absolute URL to a new origin\n url.origin !== routerWindow.location.origin ||\n // Hard reload if it's an absolute URL that does not match our basename\n stripBasename(url.pathname, basename) == null;\n }\n\n if (isDocumentReload) {\n if (replace) {\n routerWindow.location.replace(location);\n } else {\n routerWindow.location.assign(location);\n }\n return;\n }\n }\n\n // There's no need to abort on redirects, since we don't detect the\n // redirect until the action/loaders have settled\n pendingNavigationController = null;\n\n let redirectHistoryAction =\n replace === true || redirect.response.headers.has(\"X-Remix-Replace\")\n ? HistoryAction.Replace\n : HistoryAction.Push;\n\n // Use the incoming submission if provided, fallback on the active one in\n // state.navigation\n let { formMethod, formAction, formEncType } = state.navigation;\n if (\n !submission &&\n !fetcherSubmission &&\n formMethod &&\n formAction &&\n formEncType\n ) {\n submission = getSubmissionFromNavigation(state.navigation);\n }\n\n // If this was a 307/308 submission we want to preserve the HTTP method and\n // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n // redirected location\n let activeSubmission = submission || fetcherSubmission;\n if (\n redirectPreserveMethodStatusCodes.has(redirect.response.status) &&\n activeSubmission &&\n isMutationMethod(activeSubmission.formMethod)\n ) {\n await startNavigation(redirectHistoryAction, redirectLocation, {\n submission: {\n ...activeSubmission,\n formAction: location,\n },\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n } else {\n // If we have a navigation submission, we will preserve it through the\n // redirect navigation\n let overrideNavigation = getLoadingNavigation(\n redirectLocation,\n submission\n );\n await startNavigation(redirectHistoryAction, redirectLocation, {\n overrideNavigation,\n // Send fetcher submissions through for shouldRevalidate\n fetcherSubmission,\n // Preserve this flag across redirects\n preventScrollReset: pendingPreventScrollReset,\n });\n }\n }\n\n // Utility wrapper for calling dataStrategy client-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[]\n ): Promise {\n try {\n let results = await callDataStrategyImpl(\n dataStrategyImpl,\n type,\n request,\n matchesToLoad,\n matches,\n manifest,\n mapRouteProperties\n );\n\n return await Promise.all(\n results.map((result, i) => {\n if (isRedirectHandlerResult(result)) {\n let response = result.result as Response;\n return {\n type: ResultType.redirect,\n response: normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n matchesToLoad[i].route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n ),\n };\n }\n\n return convertHandlerResultToDataResult(result);\n })\n );\n } catch (e) {\n // If the outer dataStrategy method throws, just return the error for all\n // matches - and it'll naturally bubble to the root\n return matchesToLoad.map(() => ({\n type: ResultType.error,\n error: e,\n }));\n }\n }\n\n async function callLoadersAndMaybeResolveData(\n currentMatches: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n fetchersToLoad: RevalidatingFetcher[],\n request: Request\n ) {\n let [loaderResults, ...fetcherResults] = await Promise.all([\n matchesToLoad.length\n ? callDataStrategy(\"loader\", request, matchesToLoad, matches)\n : [],\n ...fetchersToLoad.map((f) => {\n if (f.matches && f.match && f.controller) {\n let fetcherRequest = createClientSideRequest(\n init.history,\n f.path,\n f.controller.signal\n );\n return callDataStrategy(\n \"loader\",\n fetcherRequest,\n [f.match],\n f.matches\n ).then((r) => r[0]);\n } else {\n return Promise.resolve({\n type: ResultType.error,\n error: getInternalRouterError(404, {\n pathname: f.path,\n }),\n });\n }\n }),\n ]);\n\n await Promise.all([\n resolveDeferredResults(\n currentMatches,\n matchesToLoad,\n loaderResults,\n loaderResults.map(() => request.signal),\n false,\n state.loaderData\n ),\n resolveDeferredResults(\n currentMatches,\n fetchersToLoad.map((f) => f.match),\n fetcherResults,\n fetchersToLoad.map((f) => (f.controller ? f.controller.signal : null)),\n true\n ),\n ]);\n\n return {\n loaderResults,\n fetcherResults,\n };\n }\n\n function interruptActiveLoads() {\n // Every interruption triggers a revalidation\n isRevalidationRequired = true;\n\n // Cancel pending route-level deferreds and mark cancelled routes for\n // revalidation\n cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n\n // Abort in-flight fetcher loads\n fetchLoadMatches.forEach((_, key) => {\n if (fetchControllers.has(key)) {\n cancelledFetcherLoads.add(key);\n abortFetcher(key);\n }\n });\n }\n\n function updateFetcherState(\n key: string,\n fetcher: Fetcher,\n opts: { flushSync?: boolean } = {}\n ) {\n state.fetchers.set(key, fetcher);\n updateState(\n { fetchers: new Map(state.fetchers) },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function setFetcherError(\n key: string,\n routeId: string,\n error: any,\n opts: { flushSync?: boolean } = {}\n ) {\n let boundaryMatch = findNearestBoundary(state.matches, routeId);\n deleteFetcher(key);\n updateState(\n {\n errors: {\n [boundaryMatch.route.id]: error,\n },\n fetchers: new Map(state.fetchers),\n },\n { flushSync: (opts && opts.flushSync) === true }\n );\n }\n\n function getFetcher(key: string): Fetcher {\n if (future.v7_fetcherPersist) {\n activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n // If this fetcher was previously marked for deletion, unmark it since we\n // have a new instance\n if (deletedFetchers.has(key)) {\n deletedFetchers.delete(key);\n }\n }\n return state.fetchers.get(key) || IDLE_FETCHER;\n }\n\n function deleteFetcher(key: string): void {\n let fetcher = state.fetchers.get(key);\n // Don't abort the controller if this is a deletion of a fetcher.submit()\n // in it's loading phase since - we don't want to abort the corresponding\n // revalidation and want them to complete and land\n if (\n fetchControllers.has(key) &&\n !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))\n ) {\n abortFetcher(key);\n }\n fetchLoadMatches.delete(key);\n fetchReloadIds.delete(key);\n fetchRedirectIds.delete(key);\n deletedFetchers.delete(key);\n cancelledFetcherLoads.delete(key);\n state.fetchers.delete(key);\n }\n\n function deleteFetcherAndUpdateState(key: string): void {\n if (future.v7_fetcherPersist) {\n let count = (activeFetchers.get(key) || 0) - 1;\n if (count <= 0) {\n activeFetchers.delete(key);\n deletedFetchers.add(key);\n } else {\n activeFetchers.set(key, count);\n }\n } else {\n deleteFetcher(key);\n }\n updateState({ fetchers: new Map(state.fetchers) });\n }\n\n function abortFetcher(key: string) {\n let controller = fetchControllers.get(key);\n invariant(controller, `Expected fetch controller: ${key}`);\n controller.abort();\n fetchControllers.delete(key);\n }\n\n function markFetchersDone(keys: string[]) {\n for (let key of keys) {\n let fetcher = getFetcher(key);\n let doneFetcher = getDoneFetcher(fetcher.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n function markFetchRedirectsDone(): boolean {\n let doneKeys = [];\n let updatedFetchers = false;\n for (let key of fetchRedirectIds) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n fetchRedirectIds.delete(key);\n doneKeys.push(key);\n updatedFetchers = true;\n }\n }\n markFetchersDone(doneKeys);\n return updatedFetchers;\n }\n\n function abortStaleFetchLoads(landedId: number): boolean {\n let yeetedKeys = [];\n for (let [key, id] of fetchReloadIds) {\n if (id < landedId) {\n let fetcher = state.fetchers.get(key);\n invariant(fetcher, `Expected fetcher: ${key}`);\n if (fetcher.state === \"loading\") {\n abortFetcher(key);\n fetchReloadIds.delete(key);\n yeetedKeys.push(key);\n }\n }\n }\n markFetchersDone(yeetedKeys);\n return yeetedKeys.length > 0;\n }\n\n function getBlocker(key: string, fn: BlockerFunction) {\n let blocker: Blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n if (blockerFunctions.get(key) !== fn) {\n blockerFunctions.set(key, fn);\n }\n\n return blocker;\n }\n\n function deleteBlocker(key: string) {\n state.blockers.delete(key);\n blockerFunctions.delete(key);\n }\n\n // Utility function to update blockers, ensuring valid state transitions\n function updateBlocker(key: string, newBlocker: Blocker) {\n let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n\n // Poor mans state machine :)\n // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n invariant(\n (blocker.state === \"unblocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"blocked\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"proceeding\") ||\n (blocker.state === \"blocked\" && newBlocker.state === \"unblocked\") ||\n (blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\"),\n `Invalid blocker state transition: ${blocker.state} -> ${newBlocker.state}`\n );\n\n let blockers = new Map(state.blockers);\n blockers.set(key, newBlocker);\n updateState({ blockers });\n }\n\n function shouldBlockNavigation({\n currentLocation,\n nextLocation,\n historyAction,\n }: {\n currentLocation: Location;\n nextLocation: Location;\n historyAction: HistoryAction;\n }): string | undefined {\n if (blockerFunctions.size === 0) {\n return;\n }\n\n // We ony support a single active blocker at the moment since we don't have\n // any compelling use cases for multi-blocker yet\n if (blockerFunctions.size > 1) {\n warning(false, \"A router only supports one blocker at a time\");\n }\n\n let entries = Array.from(blockerFunctions.entries());\n let [blockerKey, blockerFunction] = entries[entries.length - 1];\n let blocker = state.blockers.get(blockerKey);\n\n if (blocker && blocker.state === \"proceeding\") {\n // If the blocker is currently proceeding, we don't need to re-check\n // it and can let this navigation continue\n return;\n }\n\n // At this point, we know we're unblocked/blocked so we need to check the\n // user-provided blocker function\n if (blockerFunction({ currentLocation, nextLocation, historyAction })) {\n return blockerKey;\n }\n }\n\n function handleNavigational404(pathname: string) {\n let error = getInternalRouterError(404, { pathname });\n let routesToUse = inFlightDataRoutes || dataRoutes;\n let { matches, route } = getShortCircuitMatches(routesToUse);\n\n // Cancel all pending deferred on 404s since we don't keep any routes\n cancelActiveDeferreds();\n\n return { notFoundMatches: matches, route, error };\n }\n\n function handleDiscoverRouteError(\n pathname: string,\n discoverResult: DiscoverRoutesErrorResult\n ) {\n return {\n boundaryId: findNearestBoundary(discoverResult.partialMatches).route.id,\n error: getInternalRouterError(400, {\n type: \"route-discovery\",\n pathname,\n message:\n discoverResult.error != null && \"message\" in discoverResult.error\n ? discoverResult.error\n : String(discoverResult.error),\n }),\n };\n }\n\n function cancelActiveDeferreds(\n predicate?: (routeId: string) => boolean\n ): string[] {\n let cancelledRouteIds: string[] = [];\n activeDeferreds.forEach((dfd, routeId) => {\n if (!predicate || predicate(routeId)) {\n // Cancel the deferred - but do not remove from activeDeferreds here -\n // we rely on the subscribers to do that so our tests can assert proper\n // cleanup via _internalActiveDeferreds\n dfd.cancel();\n cancelledRouteIds.push(routeId);\n activeDeferreds.delete(routeId);\n }\n });\n return cancelledRouteIds;\n }\n\n // Opt in to capturing and reporting scroll positions during navigations,\n // used by the component\n function enableScrollRestoration(\n positions: Record,\n getPosition: GetScrollPositionFunction,\n getKey?: GetScrollRestorationKeyFunction\n ) {\n savedScrollPositions = positions;\n getScrollPosition = getPosition;\n getScrollRestorationKey = getKey || null;\n\n // Perform initial hydration scroll restoration, since we miss the boat on\n // the initial updateState() because we've not yet rendered \n // and therefore have no savedScrollPositions available\n if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n initialScrollRestored = true;\n let y = getSavedScrollPosition(state.location, state.matches);\n if (y != null) {\n updateState({ restoreScrollPosition: y });\n }\n }\n\n return () => {\n savedScrollPositions = null;\n getScrollPosition = null;\n getScrollRestorationKey = null;\n };\n }\n\n function getScrollKey(location: Location, matches: AgnosticDataRouteMatch[]) {\n if (getScrollRestorationKey) {\n let key = getScrollRestorationKey(\n location,\n matches.map((m) => convertRouteMatchToUiMatch(m, state.loaderData))\n );\n return key || location.key;\n }\n return location.key;\n }\n\n function saveScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): void {\n if (savedScrollPositions && getScrollPosition) {\n let key = getScrollKey(location, matches);\n savedScrollPositions[key] = getScrollPosition();\n }\n }\n\n function getSavedScrollPosition(\n location: Location,\n matches: AgnosticDataRouteMatch[]\n ): number | null {\n if (savedScrollPositions) {\n let key = getScrollKey(location, matches);\n let y = savedScrollPositions[key];\n if (typeof y === \"number\") {\n return y;\n }\n }\n return null;\n }\n\n function checkFogOfWar(\n matches: AgnosticDataRouteMatch[] | null,\n routesToUse: AgnosticDataRouteObject[],\n pathname: string\n ): { active: boolean; matches: AgnosticDataRouteMatch[] | null } {\n if (patchRoutesOnMissImpl) {\n if (!matches) {\n let fogMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n return { active: true, matches: fogMatches || [] };\n } else {\n let leafRoute = matches[matches.length - 1].route;\n if (\n leafRoute.path &&\n (leafRoute.path === \"*\" || leafRoute.path.endsWith(\"/*\"))\n ) {\n // If we matched a splat, it might only be because we haven't yet fetched\n // the children that would match with a higher score, so let's fetch\n // around and find out\n let partialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n return { active: true, matches: partialMatches };\n }\n }\n }\n\n return { active: false, matches: null };\n }\n\n type DiscoverRoutesSuccessResult = {\n type: \"success\";\n matches: AgnosticDataRouteMatch[] | null;\n };\n type DiscoverRoutesErrorResult = {\n type: \"error\";\n error: any;\n partialMatches: AgnosticDataRouteMatch[];\n };\n type DiscoverRoutesAbortedResult = { type: \"aborted\" };\n type DiscoverRoutesResult =\n | DiscoverRoutesSuccessResult\n | DiscoverRoutesErrorResult\n | DiscoverRoutesAbortedResult;\n\n async function discoverRoutes(\n matches: AgnosticDataRouteMatch[],\n pathname: string,\n signal: AbortSignal\n ): Promise {\n let partialMatches: AgnosticDataRouteMatch[] | null = matches;\n let route =\n partialMatches.length > 0\n ? partialMatches[partialMatches.length - 1].route\n : null;\n while (true) {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n try {\n await loadLazyRouteChildren(\n patchRoutesOnMissImpl!,\n pathname,\n partialMatches,\n routesToUse,\n manifest,\n mapRouteProperties,\n pendingPatchRoutes,\n signal\n );\n } catch (e) {\n return { type: \"error\", error: e, partialMatches };\n } finally {\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity so when we `updateState` at the end of\n // this navigation/fetch `router.routes` will be a new identity and\n // trigger a re-run of memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n }\n }\n\n if (signal.aborted) {\n return { type: \"aborted\" };\n }\n\n let newMatches = matchRoutes(routesToUse, pathname, basename);\n let matchedSplat = false;\n if (newMatches) {\n let leafRoute = newMatches[newMatches.length - 1].route;\n\n if (leafRoute.index) {\n // If we found an index route, we can stop\n return { type: \"success\", matches: newMatches };\n }\n\n if (leafRoute.path && leafRoute.path.length > 0) {\n if (leafRoute.path === \"*\") {\n // If we found a splat route, we can't be sure there's not a\n // higher-scoring route down some partial matches trail so we need\n // to check that out\n matchedSplat = true;\n } else {\n // If we found a non-splat route, we can stop\n return { type: \"success\", matches: newMatches };\n }\n }\n }\n\n let newPartialMatches = matchRoutesImpl(\n routesToUse,\n pathname,\n basename,\n true\n );\n\n // If we are no longer partially matching anything, this was either a\n // legit splat match above, or it's a 404. Also avoid loops if the\n // second pass results in the same partial matches\n if (\n !newPartialMatches ||\n partialMatches.map((m) => m.route.id).join(\"-\") ===\n newPartialMatches.map((m) => m.route.id).join(\"-\")\n ) {\n return { type: \"success\", matches: matchedSplat ? newMatches : null };\n }\n\n partialMatches = newPartialMatches;\n route = partialMatches[partialMatches.length - 1].route;\n if (route.path === \"*\") {\n // The splat is still our most accurate partial, so run with it\n return { type: \"success\", matches: partialMatches };\n }\n }\n }\n\n function _internalSetRoutes(newRoutes: AgnosticDataRouteObject[]) {\n manifest = {};\n inFlightDataRoutes = convertRoutesToDataRoutes(\n newRoutes,\n mapRouteProperties,\n undefined,\n manifest\n );\n }\n\n function patchRoutes(\n routeId: string | null,\n children: AgnosticRouteObject[]\n ): void {\n let isNonHMR = inFlightDataRoutes == null;\n let routesToUse = inFlightDataRoutes || dataRoutes;\n patchRoutesImpl(\n routeId,\n children,\n routesToUse,\n manifest,\n mapRouteProperties\n );\n\n // If we are not in the middle of an HMR revalidation and we changed the\n // routes, provide a new identity and trigger a reflow via `updateState`\n // to re-run memoized `router.routes` dependencies.\n // HMR will already update the identity and reflow when it lands\n // `inFlightDataRoutes` in `completeNavigation`\n if (isNonHMR) {\n dataRoutes = [...dataRoutes];\n updateState({});\n }\n }\n\n router = {\n get basename() {\n return basename;\n },\n get future() {\n return future;\n },\n get state() {\n return state;\n },\n get routes() {\n return dataRoutes;\n },\n get window() {\n return routerWindow;\n },\n initialize,\n subscribe,\n enableScrollRestoration,\n navigate,\n fetch,\n revalidate,\n // Passthrough to history-aware createHref used by useHref so we get proper\n // hash-aware URLs in DOM paths\n createHref: (to: To) => init.history.createHref(to),\n encodeLocation: (to: To) => init.history.encodeLocation(to),\n getFetcher,\n deleteFetcher: deleteFetcherAndUpdateState,\n dispose,\n getBlocker,\n deleteBlocker,\n patchRoutes,\n _internalFetchControllers: fetchControllers,\n _internalActiveDeferreds: activeDeferreds,\n // TODO: Remove setRoutes, it's temporary to avoid dealing with\n // updating the tree while validating the update algorithm.\n _internalSetRoutes,\n };\n\n return router;\n}\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\n\nexport const UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\n\n/**\n * Future flags to toggle new feature behavior\n */\nexport interface StaticHandlerFutureConfig {\n v7_relativeSplatPath: boolean;\n v7_throwAbortReason: boolean;\n}\n\nexport interface CreateStaticHandlerOptions {\n basename?: string;\n /**\n * @deprecated Use `mapRouteProperties` instead\n */\n detectErrorBoundary?: DetectErrorBoundaryFunction;\n mapRouteProperties?: MapRoutePropertiesFunction;\n future?: Partial;\n}\n\nexport function createStaticHandler(\n routes: AgnosticRouteObject[],\n opts?: CreateStaticHandlerOptions\n): StaticHandler {\n invariant(\n routes.length > 0,\n \"You must provide a non-empty routes array to createStaticHandler\"\n );\n\n let manifest: RouteManifest = {};\n let basename = (opts ? opts.basename : null) || \"/\";\n let mapRouteProperties: MapRoutePropertiesFunction;\n if (opts?.mapRouteProperties) {\n mapRouteProperties = opts.mapRouteProperties;\n } else if (opts?.detectErrorBoundary) {\n // If they are still using the deprecated version, wrap it with the new API\n let detectErrorBoundary = opts.detectErrorBoundary;\n mapRouteProperties = (route) => ({\n hasErrorBoundary: detectErrorBoundary(route),\n });\n } else {\n mapRouteProperties = defaultMapRouteProperties;\n }\n // Config driven behavior flags\n let future: StaticHandlerFutureConfig = {\n v7_relativeSplatPath: false,\n v7_throwAbortReason: false,\n ...(opts ? opts.future : null),\n };\n\n let dataRoutes = convertRoutesToDataRoutes(\n routes,\n mapRouteProperties,\n undefined,\n manifest\n );\n\n /**\n * The query() method is intended for document requests, in which we want to\n * call an optional action and potentially multiple loaders for all nested\n * routes. It returns a StaticHandlerContext object, which is very similar\n * to the router state (location, loaderData, actionData, errors, etc.) and\n * also adds SSR-specific information such as the statusCode and headers\n * from action/loaders Responses.\n *\n * It _should_ never throw and should report all errors through the\n * returned context.errors object, properly associating errors to their error\n * boundary. Additionally, it tracks _deepestRenderedBoundaryId which can be\n * used to emulate React error boundaries during SSr by performing a second\n * pass only down to the boundaryId.\n *\n * The one exception where we do not return a StaticHandlerContext is when a\n * redirect response is returned or thrown from any action/loader. We\n * propagate that out and return the raw Response so the HTTP server can\n * return it directly.\n *\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n * the bubbling of errors which allows single-fetch-type implementations\n * where the client will handle the bubbling and we may need to return data\n * for the handling route\n */\n async function query(\n request: Request,\n {\n requestContext,\n skipLoaderErrorBubbling,\n unstable_dataStrategy,\n }: {\n requestContext?: unknown;\n skipLoaderErrorBubbling?: boolean;\n unstable_dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\") {\n let error = getInternalRouterError(405, { method });\n let { matches: methodNotAllowedMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: methodNotAllowedMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n } else if (!matches) {\n let error = getInternalRouterError(404, { pathname: location.pathname });\n let { matches: notFoundMatches, route } =\n getShortCircuitMatches(dataRoutes);\n return {\n basename,\n location,\n matches: notFoundMatches,\n loaderData: {},\n actionData: null,\n errors: {\n [route.id]: error,\n },\n statusCode: error.status,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n unstable_dataStrategy || null,\n skipLoaderErrorBubbling === true,\n null\n );\n if (isResponse(result)) {\n return result;\n }\n\n // When returning StaticHandlerContext, we patch back in the location here\n // since we need it for React Context. But this helps keep our submit and\n // loadRouteData operating on a Request instead of a Location\n return { location, basename, ...result };\n }\n\n /**\n * The queryRoute() method is intended for targeted route requests, either\n * for fetch ?_data requests or resource route requests. In this case, we\n * are only ever calling a single action or loader, and we are returning the\n * returned value directly. In most cases, this will be a Response returned\n * from the action/loader, but it may be a primitive or other value as well -\n * and in such cases the calling context should handle that accordingly.\n *\n * We do respect the throw/return differentiation, so if an action/loader\n * throws, then this method will throw the value. This is important so we\n * can do proper boundary identification in Remix where a thrown Response\n * must go to the Catch Boundary but a returned Response is happy-path.\n *\n * One thing to note is that any Router-initiated Errors that make sense\n * to associate with a status code will be thrown as an ErrorResponse\n * instance which include the raw Error, such that the calling context can\n * serialize the error as they see fit while including the proper response\n * code. Examples here are 404 and 405 errors that occur prior to reaching\n * any user-defined loaders.\n *\n * - `opts.routeId` allows you to specify the specific route handler to call.\n * If not provided the handler will determine the proper route by matching\n * against `request.url`\n * - `opts.requestContext` is an optional server context that will be passed\n * to actions/loaders in the `context` parameter\n */\n async function queryRoute(\n request: Request,\n {\n routeId,\n requestContext,\n unstable_dataStrategy,\n }: {\n requestContext?: unknown;\n routeId?: string;\n unstable_dataStrategy?: DataStrategyFunction;\n } = {}\n ): Promise {\n let url = new URL(request.url);\n let method = request.method;\n let location = createLocation(\"\", createPath(url), null, \"default\");\n let matches = matchRoutes(dataRoutes, location, basename);\n\n // SSR supports HEAD requests while SPA doesn't\n if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n throw getInternalRouterError(405, { method });\n } else if (!matches) {\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let match = routeId\n ? matches.find((m) => m.route.id === routeId)\n : getTargetMatch(matches, location);\n\n if (routeId && !match) {\n throw getInternalRouterError(403, {\n pathname: location.pathname,\n routeId,\n });\n } else if (!match) {\n // This should never hit I don't think?\n throw getInternalRouterError(404, { pathname: location.pathname });\n }\n\n let result = await queryImpl(\n request,\n location,\n matches,\n requestContext,\n unstable_dataStrategy || null,\n false,\n match\n );\n\n if (isResponse(result)) {\n return result;\n }\n\n let error = result.errors ? Object.values(result.errors)[0] : undefined;\n if (error !== undefined) {\n // If we got back result.errors, that means the loader/action threw\n // _something_ that wasn't a Response, but it's not guaranteed/required\n // to be an `instanceof Error` either, so we have to use throw here to\n // preserve the \"error\" state outside of queryImpl.\n throw error;\n }\n\n // Pick off the right state value to return\n if (result.actionData) {\n return Object.values(result.actionData)[0];\n }\n\n if (result.loaderData) {\n let data = Object.values(result.loaderData)[0];\n if (result.activeDeferreds?.[match.route.id]) {\n data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n }\n return data;\n }\n\n return undefined;\n }\n\n async function queryImpl(\n request: Request,\n location: Location,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null\n ): Promise | Response> {\n invariant(\n request.signal,\n \"query()/queryRoute() requests must contain an AbortController signal\"\n );\n\n try {\n if (isMutationMethod(request.method.toLowerCase())) {\n let result = await submit(\n request,\n matches,\n routeMatch || getTargetMatch(matches, location),\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch != null\n );\n return result;\n }\n\n let result = await loadRouteData(\n request,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n routeMatch\n );\n return isResponse(result)\n ? result\n : {\n ...result,\n actionData: null,\n actionHeaders: {},\n };\n } catch (e) {\n // If the user threw/returned a Response in callLoaderOrAction for a\n // `queryRoute` call, we throw the `HandlerResult` to bail out early\n // and then return or throw the raw Response here accordingly\n if (isHandlerResult(e) && isResponse(e.result)) {\n if (e.type === ResultType.error) {\n throw e.result;\n }\n return e.result;\n }\n // Redirects are always returned since they don't propagate to catch\n // boundaries\n if (isRedirectResponse(e)) {\n return e;\n }\n throw e;\n }\n }\n\n async function submit(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n actionMatch: AgnosticDataRouteMatch,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n isRouteRequest: boolean\n ): Promise | Response> {\n let result: DataResult;\n\n if (!actionMatch.route.action && !actionMatch.route.lazy) {\n let error = getInternalRouterError(405, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: actionMatch.route.id,\n });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n } else {\n let results = await callDataStrategy(\n \"action\",\n request,\n [actionMatch],\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n result = results[0];\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n }\n\n if (isRedirectResult(result)) {\n // Uhhhh - this should never happen, we should always throw these from\n // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n // can get back on the \"throw all redirect responses\" train here should\n // this ever happen :/\n throw new Response(null, {\n status: result.response.status,\n headers: {\n Location: result.response.headers.get(\"Location\")!,\n },\n });\n }\n\n if (isDeferredResult(result)) {\n let error = getInternalRouterError(400, { type: \"defer-action\" });\n if (isRouteRequest) {\n throw error;\n }\n result = {\n type: ResultType.error,\n error,\n };\n }\n\n if (isRouteRequest) {\n // Note: This should only be non-Response values if we get here, since\n // isRouteRequest should throw any Response received in callLoaderOrAction\n if (isErrorResult(result)) {\n throw result.error;\n }\n\n return {\n matches: [actionMatch],\n loaderData: {},\n actionData: { [actionMatch.route.id]: result.data },\n errors: null,\n // Note: statusCode + headers are unused here since queryRoute will\n // return the raw Response or value\n statusCode: 200,\n loaderHeaders: {},\n actionHeaders: {},\n activeDeferreds: null,\n };\n }\n\n // Create a GET request for the loaders\n let loaderRequest = new Request(request.url, {\n headers: request.headers,\n redirect: request.redirect,\n signal: request.signal,\n });\n\n if (isErrorResult(result)) {\n // Store off the pending error - we use it to determine which loaders\n // to call and will commit it when we complete the navigation\n let boundaryMatch = skipLoaderErrorBubbling\n ? actionMatch\n : findNearestBoundary(matches, actionMatch.route.id);\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null,\n [boundaryMatch.route.id, result]\n );\n\n // action status codes take precedence over loader status codes\n return {\n ...context,\n statusCode: isRouteErrorResponse(result.error)\n ? result.error.status\n : result.statusCode != null\n ? result.statusCode\n : 500,\n actionData: null,\n actionHeaders: {\n ...(result.headers ? { [actionMatch.route.id]: result.headers } : {}),\n },\n };\n }\n\n let context = await loadRouteData(\n loaderRequest,\n matches,\n requestContext,\n unstable_dataStrategy,\n skipLoaderErrorBubbling,\n null\n );\n\n return {\n ...context,\n actionData: {\n [actionMatch.route.id]: result.data,\n },\n // action status codes take precedence over loader status codes\n ...(result.statusCode ? { statusCode: result.statusCode } : {}),\n actionHeaders: result.headers\n ? { [actionMatch.route.id]: result.headers }\n : {},\n };\n }\n\n async function loadRouteData(\n request: Request,\n matches: AgnosticDataRouteMatch[],\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null,\n skipLoaderErrorBubbling: boolean,\n routeMatch: AgnosticDataRouteMatch | null,\n pendingActionResult?: PendingActionResult\n ): Promise<\n | Omit<\n StaticHandlerContext,\n \"location\" | \"basename\" | \"actionData\" | \"actionHeaders\"\n >\n | Response\n > {\n let isRouteRequest = routeMatch != null;\n\n // Short circuit if we have no loaders to run (queryRoute())\n if (\n isRouteRequest &&\n !routeMatch?.route.loader &&\n !routeMatch?.route.lazy\n ) {\n throw getInternalRouterError(400, {\n method: request.method,\n pathname: new URL(request.url).pathname,\n routeId: routeMatch?.route.id,\n });\n }\n\n let requestMatches = routeMatch\n ? [routeMatch]\n : pendingActionResult && isErrorResult(pendingActionResult[1])\n ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0])\n : matches;\n let matchesToLoad = requestMatches.filter(\n (m) => m.route.loader || m.route.lazy\n );\n\n // Short circuit if we have no loaders to run (query())\n if (matchesToLoad.length === 0) {\n return {\n matches,\n // Add a null for all matched routes for proper revalidation on the client\n loaderData: matches.reduce(\n (acc, m) => Object.assign(acc, { [m.route.id]: null }),\n {}\n ),\n errors:\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? {\n [pendingActionResult[0]]: pendingActionResult[1].error,\n }\n : null,\n statusCode: 200,\n loaderHeaders: {},\n activeDeferreds: null,\n };\n }\n\n let results = await callDataStrategy(\n \"loader\",\n request,\n matchesToLoad,\n matches,\n isRouteRequest,\n requestContext,\n unstable_dataStrategy\n );\n\n if (request.signal.aborted) {\n throwStaticHandlerAbortedError(request, isRouteRequest, future);\n }\n\n // Process and commit output from loaders\n let activeDeferreds = new Map();\n let context = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionResult,\n activeDeferreds,\n skipLoaderErrorBubbling\n );\n\n // Add a null for any non-loader matches for proper revalidation on the client\n let executedLoaders = new Set(\n matchesToLoad.map((match) => match.route.id)\n );\n matches.forEach((match) => {\n if (!executedLoaders.has(match.route.id)) {\n context.loaderData[match.route.id] = null;\n }\n });\n\n return {\n ...context,\n matches,\n activeDeferreds:\n activeDeferreds.size > 0\n ? Object.fromEntries(activeDeferreds.entries())\n : null,\n };\n }\n\n // Utility wrapper for calling dataStrategy server-side without having to\n // pass around the manifest, mapRouteProperties, etc.\n async function callDataStrategy(\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n isRouteRequest: boolean,\n requestContext: unknown,\n unstable_dataStrategy: DataStrategyFunction | null\n ): Promise {\n let results = await callDataStrategyImpl(\n unstable_dataStrategy || defaultDataStrategy,\n type,\n request,\n matchesToLoad,\n matches,\n manifest,\n mapRouteProperties,\n requestContext\n );\n\n return await Promise.all(\n results.map((result, i) => {\n if (isRedirectHandlerResult(result)) {\n let response = result.result as Response;\n // Throw redirects and let the server handle them with an HTTP redirect\n throw normalizeRelativeRoutingRedirectResponse(\n response,\n request,\n matchesToLoad[i].route.id,\n matches,\n basename,\n future.v7_relativeSplatPath\n );\n }\n if (isResponse(result.result) && isRouteRequest) {\n // For SSR single-route requests, we want to hand Responses back\n // directly without unwrapping\n throw result;\n }\n\n return convertHandlerResultToDataResult(result);\n })\n );\n }\n\n return {\n dataRoutes,\n query,\n queryRoute,\n };\n}\n\n//#endregion\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nexport function getStaticContextFromError(\n routes: AgnosticDataRouteObject[],\n context: StaticHandlerContext,\n error: any\n) {\n let newContext: StaticHandlerContext = {\n ...context,\n statusCode: isRouteErrorResponse(error) ? error.status : 500,\n errors: {\n [context._deepestRenderedBoundaryId || routes[0].id]: error,\n },\n };\n return newContext;\n}\n\nfunction throwStaticHandlerAbortedError(\n request: Request,\n isRouteRequest: boolean,\n future: StaticHandlerFutureConfig\n) {\n if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n throw request.signal.reason;\n }\n\n let method = isRouteRequest ? \"queryRoute\" : \"query\";\n throw new Error(`${method}() call aborted: ${request.method} ${request.url}`);\n}\n\nfunction isSubmissionNavigation(\n opts: BaseNavigateOrFetchOptions\n): opts is SubmissionNavigateOptions {\n return (\n opts != null &&\n ((\"formData\" in opts && opts.formData != null) ||\n (\"body\" in opts && opts.body !== undefined))\n );\n}\n\nfunction normalizeTo(\n location: Path,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n prependBasename: boolean,\n to: To | null,\n v7_relativeSplatPath: boolean,\n fromRouteId?: string,\n relative?: RelativeRoutingType\n) {\n let contextualMatches: AgnosticDataRouteMatch[];\n let activeRouteMatch: AgnosticDataRouteMatch | undefined;\n if (fromRouteId) {\n // Grab matches up to the calling route so our route-relative logic is\n // relative to the correct source route\n contextualMatches = [];\n for (let match of matches) {\n contextualMatches.push(match);\n if (match.route.id === fromRouteId) {\n activeRouteMatch = match;\n break;\n }\n }\n } else {\n contextualMatches = matches;\n activeRouteMatch = matches[matches.length - 1];\n }\n\n // Resolve the relative path\n let path = resolveTo(\n to ? to : \".\",\n getResolveToMatches(contextualMatches, v7_relativeSplatPath),\n stripBasename(location.pathname, basename) || location.pathname,\n relative === \"path\"\n );\n\n // When `to` is not specified we inherit search/hash from the current\n // location, unlike when to=\".\" and we just inherit the path.\n // See https://github.com/remix-run/remix/issues/927\n if (to == null) {\n path.search = location.search;\n path.hash = location.hash;\n }\n\n // Add an ?index param for matched index routes if we don't already have one\n if (\n (to == null || to === \"\" || to === \".\") &&\n activeRouteMatch &&\n activeRouteMatch.route.index &&\n !hasNakedIndexQuery(path.search)\n ) {\n path.search = path.search\n ? path.search.replace(/^\\?/, \"?index&\")\n : \"?index\";\n }\n\n // If we're operating within a basename, prepend it to the pathname. If\n // this is a root navigation, then just use the raw basename which allows\n // the basename to have full control over the presence of a trailing slash\n // on root actions\n if (prependBasename && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n }\n\n return createPath(path);\n}\n\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(\n normalizeFormMethod: boolean,\n isFetcher: boolean,\n path: string,\n opts?: BaseNavigateOrFetchOptions\n): {\n path: string;\n submission?: Submission;\n error?: ErrorResponseImpl;\n} {\n // Return location verbatim on non-submission navigations\n if (!opts || !isSubmissionNavigation(opts)) {\n return { path };\n }\n\n if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n return {\n path,\n error: getInternalRouterError(405, { method: opts.formMethod }),\n };\n }\n\n let getInvalidBodyError = () => ({\n path,\n error: getInternalRouterError(400, { type: \"invalid-body\" }),\n });\n\n // Create a Submission on non-GET navigations\n let rawFormMethod = opts.formMethod || \"get\";\n let formMethod = normalizeFormMethod\n ? (rawFormMethod.toUpperCase() as V7_FormMethod)\n : (rawFormMethod.toLowerCase() as FormMethod);\n let formAction = stripHashFromPath(path);\n\n if (opts.body !== undefined) {\n if (opts.formEncType === \"text/plain\") {\n // text only support POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n let text =\n typeof opts.body === \"string\"\n ? opts.body\n : opts.body instanceof FormData ||\n opts.body instanceof URLSearchParams\n ? // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n Array.from(opts.body.entries()).reduce(\n (acc, [name, value]) => `${acc}${name}=${value}\\n`,\n \"\"\n )\n : String(opts.body);\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json: undefined,\n text,\n },\n };\n } else if (opts.formEncType === \"application/json\") {\n // json only supports POST/PUT/PATCH/DELETE submissions\n if (!isMutationMethod(formMethod)) {\n return getInvalidBodyError();\n }\n\n try {\n let json =\n typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n\n return {\n path,\n submission: {\n formMethod,\n formAction,\n formEncType: opts.formEncType,\n formData: undefined,\n json,\n text: undefined,\n },\n };\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n }\n\n invariant(\n typeof FormData === \"function\",\n \"FormData is not available in this environment\"\n );\n\n let searchParams: URLSearchParams;\n let formData: FormData;\n\n if (opts.formData) {\n searchParams = convertFormDataToSearchParams(opts.formData);\n formData = opts.formData;\n } else if (opts.body instanceof FormData) {\n searchParams = convertFormDataToSearchParams(opts.body);\n formData = opts.body;\n } else if (opts.body instanceof URLSearchParams) {\n searchParams = opts.body;\n formData = convertSearchParamsToFormData(searchParams);\n } else if (opts.body == null) {\n searchParams = new URLSearchParams();\n formData = new FormData();\n } else {\n try {\n searchParams = new URLSearchParams(opts.body);\n formData = convertSearchParamsToFormData(searchParams);\n } catch (e) {\n return getInvalidBodyError();\n }\n }\n\n let submission: Submission = {\n formMethod,\n formAction,\n formEncType:\n (opts && opts.formEncType) || \"application/x-www-form-urlencoded\",\n formData,\n json: undefined,\n text: undefined,\n };\n\n if (isMutationMethod(submission.formMethod)) {\n return { path, submission };\n }\n\n // Flatten submission onto URLSearchParams for GET submissions\n let parsedPath = parsePath(path);\n // On GET navigation submissions we can drop the ?index param from the\n // resulting location since all loaders will run. But fetcher GET submissions\n // only run a single loader so we need to preserve any incoming ?index params\n if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n searchParams.append(\"index\", \"\");\n }\n parsedPath.search = `?${searchParams}`;\n\n return { path: createPath(parsedPath), submission };\n}\n\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(\n matches: AgnosticDataRouteMatch[],\n boundaryId: string\n) {\n let boundaryMatches = matches;\n if (boundaryId) {\n let index = matches.findIndex((m) => m.route.id === boundaryId);\n if (index >= 0) {\n boundaryMatches = matches.slice(0, index);\n }\n }\n return boundaryMatches;\n}\n\nfunction getMatchesToLoad(\n history: History,\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n submission: Submission | undefined,\n location: Location,\n isInitialLoad: boolean,\n skipActionErrorRevalidation: boolean,\n isRevalidationRequired: boolean,\n cancelledDeferredRoutes: string[],\n cancelledFetcherLoads: Set,\n deletedFetchers: Set,\n fetchLoadMatches: Map,\n fetchRedirectIds: Set,\n routesToUse: AgnosticDataRouteObject[],\n basename: string | undefined,\n pendingActionResult?: PendingActionResult\n): [AgnosticDataRouteMatch[], RevalidatingFetcher[]] {\n let actionResult = pendingActionResult\n ? isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : pendingActionResult[1].data\n : undefined;\n let currentUrl = history.createURL(state.location);\n let nextUrl = history.createURL(location);\n\n // Pick navigation matches that are net-new or qualify for revalidation\n let boundaryId =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[0]\n : undefined;\n let boundaryMatches = boundaryId\n ? getLoaderMatchesUntilBoundary(matches, boundaryId)\n : matches;\n\n // Don't revalidate loaders by default after action 4xx/5xx responses\n // when the flag is enabled. They can still opt-into revalidation via\n // `shouldRevalidate` via `actionResult`\n let actionStatus = pendingActionResult\n ? pendingActionResult[1].statusCode\n : undefined;\n let shouldSkipRevalidation =\n skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n\n let navigationMatches = boundaryMatches.filter((match, index) => {\n let { route } = match;\n if (route.lazy) {\n // We haven't loaded this route yet so we don't know if it's got a loader!\n return true;\n }\n\n if (route.loader == null) {\n return false;\n }\n\n if (isInitialLoad) {\n if (typeof route.loader !== \"function\" || route.loader.hydrate) {\n return true;\n }\n return (\n state.loaderData[route.id] === undefined &&\n // Don't re-run if the loader ran and threw an error\n (!state.errors || state.errors[route.id] === undefined)\n );\n }\n\n // Always call the loader on new route instances and pending defer cancellations\n if (\n isNewLoader(state.loaderData, state.matches[index], match) ||\n cancelledDeferredRoutes.some((id) => id === match.route.id)\n ) {\n return true;\n }\n\n // This is the default implementation for when we revalidate. If the route\n // provides it's own implementation, then we give them full control but\n // provide this value so they can leverage it if needed after they check\n // their own specific use cases\n let currentRouteMatch = state.matches[index];\n let nextRouteMatch = match;\n\n return shouldRevalidateLoader(match, {\n currentUrl,\n currentParams: currentRouteMatch.params,\n nextUrl,\n nextParams: nextRouteMatch.params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n isRevalidationRequired ||\n currentUrl.pathname + currentUrl.search ===\n nextUrl.pathname + nextUrl.search ||\n // Search params affect all loaders\n currentUrl.search !== nextUrl.search ||\n isNewRouteInstance(currentRouteMatch, nextRouteMatch),\n });\n });\n\n // Pick fetcher.loads that need to be revalidated\n let revalidatingFetchers: RevalidatingFetcher[] = [];\n fetchLoadMatches.forEach((f, key) => {\n // Don't revalidate:\n // - on initial load (shouldn't be any fetchers then anyway)\n // - if fetcher won't be present in the subsequent render\n // - no longer matches the URL (v7_fetcherPersist=false)\n // - was unmounted but persisted due to v7_fetcherPersist=true\n if (\n isInitialLoad ||\n !matches.some((m) => m.route.id === f.routeId) ||\n deletedFetchers.has(key)\n ) {\n return;\n }\n\n let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n\n // If the fetcher path no longer matches, push it in with null matches so\n // we can trigger a 404 in callLoadersAndMaybeResolveData. Note this is\n // currently only a use-case for Remix HMR where the route tree can change\n // at runtime and remove a route previously loaded via a fetcher\n if (!fetcherMatches) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: null,\n match: null,\n controller: null,\n });\n return;\n }\n\n // Revalidating fetchers are decoupled from the route matches since they\n // load from a static href. They revalidate based on explicit revalidation\n // (submission, useRevalidator, or X-Remix-Revalidate)\n let fetcher = state.fetchers.get(key);\n let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n\n let shouldRevalidate = false;\n if (fetchRedirectIds.has(key)) {\n // Never trigger a revalidation of an actively redirecting fetcher\n shouldRevalidate = false;\n } else if (cancelledFetcherLoads.has(key)) {\n // Always mark for revalidation if the fetcher was cancelled\n cancelledFetcherLoads.delete(key);\n shouldRevalidate = true;\n } else if (\n fetcher &&\n fetcher.state !== \"idle\" &&\n fetcher.data === undefined\n ) {\n // If the fetcher hasn't ever completed loading yet, then this isn't a\n // revalidation, it would just be a brand new load if an explicit\n // revalidation is required\n shouldRevalidate = isRevalidationRequired;\n } else {\n // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n // to explicit revalidations only\n shouldRevalidate = shouldRevalidateLoader(fetcherMatch, {\n currentUrl,\n currentParams: state.matches[state.matches.length - 1].params,\n nextUrl,\n nextParams: matches[matches.length - 1].params,\n ...submission,\n actionResult,\n actionStatus,\n defaultShouldRevalidate: shouldSkipRevalidation\n ? false\n : isRevalidationRequired,\n });\n }\n\n if (shouldRevalidate) {\n revalidatingFetchers.push({\n key,\n routeId: f.routeId,\n path: f.path,\n matches: fetcherMatches,\n match: fetcherMatch,\n controller: new AbortController(),\n });\n }\n });\n\n return [navigationMatches, revalidatingFetchers];\n}\n\nfunction isNewLoader(\n currentLoaderData: RouteData,\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let isNew =\n // [a] -> [a, b]\n !currentMatch ||\n // [a, b] -> [a, c]\n match.route.id !== currentMatch.route.id;\n\n // Handle the case that we don't have data for a re-used route, potentially\n // from a prior error or from a cancelled pending deferred\n let isMissingData = currentLoaderData[match.route.id] === undefined;\n\n // Always load if this is a net-new route or we don't yet have data\n return isNew || isMissingData;\n}\n\nfunction isNewRouteInstance(\n currentMatch: AgnosticDataRouteMatch,\n match: AgnosticDataRouteMatch\n) {\n let currentPath = currentMatch.route.path;\n return (\n // param change for this match, /users/123 -> /users/456\n currentMatch.pathname !== match.pathname ||\n // splat param changed, which is not present in match.path\n // e.g. /files/images/avatar.jpg -> files/finances.xls\n (currentPath != null &&\n currentPath.endsWith(\"*\") &&\n currentMatch.params[\"*\"] !== match.params[\"*\"])\n );\n}\n\nfunction shouldRevalidateLoader(\n loaderMatch: AgnosticDataRouteMatch,\n arg: ShouldRevalidateFunctionArgs\n) {\n if (loaderMatch.route.shouldRevalidate) {\n let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n if (typeof routeChoice === \"boolean\") {\n return routeChoice;\n }\n }\n\n return arg.defaultShouldRevalidate;\n}\n\n/**\n * Idempotent utility to execute patchRoutesOnMiss() to lazily load route\n * definitions and update the routes/routeManifest\n */\nasync function loadLazyRouteChildren(\n patchRoutesOnMissImpl: AgnosticPatchRoutesOnMissFunction,\n path: string,\n matches: AgnosticDataRouteMatch[],\n routes: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n pendingRouteChildren: Map>,\n signal: AbortSignal\n) {\n let key = [path, ...matches.map((m) => m.route.id)].join(\"-\");\n try {\n let pending = pendingRouteChildren.get(key);\n if (!pending) {\n pending = patchRoutesOnMissImpl({\n path,\n matches,\n patch: (routeId, children) => {\n if (!signal.aborted) {\n patchRoutesImpl(\n routeId,\n children,\n routes,\n manifest,\n mapRouteProperties\n );\n }\n },\n });\n pendingRouteChildren.set(key, pending);\n }\n\n if (pending && isPromise(pending)) {\n await pending;\n }\n } finally {\n pendingRouteChildren.delete(key);\n }\n}\n\nfunction patchRoutesImpl(\n routeId: string | null,\n children: AgnosticRouteObject[],\n routesToUse: AgnosticDataRouteObject[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction\n) {\n if (routeId) {\n let route = manifest[routeId];\n invariant(\n route,\n `No route found to patch children into: routeId = ${routeId}`\n );\n let dataChildren = convertRoutesToDataRoutes(\n children,\n mapRouteProperties,\n [routeId, \"patch\", String(route.children?.length || \"0\")],\n manifest\n );\n if (route.children) {\n route.children.push(...dataChildren);\n } else {\n route.children = dataChildren;\n }\n } else {\n let dataChildren = convertRoutesToDataRoutes(\n children,\n mapRouteProperties,\n [\"patch\", String(routesToUse.length || \"0\")],\n manifest\n );\n routesToUse.push(...dataChildren);\n }\n}\n\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(\n route: AgnosticDataRouteObject,\n mapRouteProperties: MapRoutePropertiesFunction,\n manifest: RouteManifest\n) {\n if (!route.lazy) {\n return;\n }\n\n let lazyRoute = await route.lazy();\n\n // If the lazy route function was executed and removed by another parallel\n // call then we can return - first lazy() to finish wins because the return\n // value of lazy is expected to be static\n if (!route.lazy) {\n return;\n }\n\n let routeToUpdate = manifest[route.id];\n invariant(routeToUpdate, \"No route found in manifest\");\n\n // Update the route in place. This should be safe because there's no way\n // we could yet be sitting on this route as we can't get there without\n // resolving lazy() first.\n //\n // This is different than the HMR \"update\" use-case where we may actively be\n // on the route being updated. The main concern boils down to \"does this\n // mutation affect any ongoing navigations or any current state.matches\n // values?\". If not, it should be safe to update in place.\n let routeUpdates: Record = {};\n for (let lazyRouteProperty in lazyRoute) {\n let staticRouteValue =\n routeToUpdate[lazyRouteProperty as keyof typeof routeToUpdate];\n\n let isPropertyStaticallyDefined =\n staticRouteValue !== undefined &&\n // This property isn't static since it should always be updated based\n // on the route updates\n lazyRouteProperty !== \"hasErrorBoundary\";\n\n warning(\n !isPropertyStaticallyDefined,\n `Route \"${routeToUpdate.id}\" has a static property \"${lazyRouteProperty}\" ` +\n `defined but its lazy function is also returning a value for this property. ` +\n `The lazy route property \"${lazyRouteProperty}\" will be ignored.`\n );\n\n if (\n !isPropertyStaticallyDefined &&\n !immutableRouteKeys.has(lazyRouteProperty as ImmutableRouteKey)\n ) {\n routeUpdates[lazyRouteProperty] =\n lazyRoute[lazyRouteProperty as keyof typeof lazyRoute];\n }\n }\n\n // Mutate the route with the provided updates. Do this first so we pass\n // the updated version to mapRouteProperties\n Object.assign(routeToUpdate, routeUpdates);\n\n // Mutate the `hasErrorBoundary` property on the route based on the route\n // updates and remove the `lazy` function so we don't resolve the lazy\n // route again.\n Object.assign(routeToUpdate, {\n // To keep things framework agnostic, we use the provided\n // `mapRouteProperties` (or wrapped `detectErrorBoundary`) function to\n // set the framework-aware properties (`element`/`hasErrorBoundary`) since\n // the logic will differ between frameworks.\n ...mapRouteProperties(routeToUpdate),\n lazy: undefined,\n });\n}\n\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nfunction defaultDataStrategy(\n opts: DataStrategyFunctionArgs\n): ReturnType {\n return Promise.all(opts.matches.map((m) => m.resolve()));\n}\n\nasync function callDataStrategyImpl(\n dataStrategyImpl: DataStrategyFunction,\n type: \"loader\" | \"action\",\n request: Request,\n matchesToLoad: AgnosticDataRouteMatch[],\n matches: AgnosticDataRouteMatch[],\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n requestContext?: unknown\n): Promise {\n let routeIdsToLoad = matchesToLoad.reduce(\n (acc, m) => acc.add(m.route.id),\n new Set()\n );\n let loadedMatches = new Set();\n\n // Send all matches here to allow for a middleware-type implementation.\n // handler will be a no-op for unneeded routes and we filter those results\n // back out below.\n let results = await dataStrategyImpl({\n matches: matches.map((match) => {\n let shouldLoad = routeIdsToLoad.has(match.route.id);\n // `resolve` encapsulates the route.lazy, executing the\n // loader/action, and mapping return values/thrown errors to a\n // HandlerResult. Users can pass a callback to take fine-grained control\n // over the execution of the loader/action\n let resolve: DataStrategyMatch[\"resolve\"] = (handlerOverride) => {\n loadedMatches.add(match.route.id);\n return shouldLoad\n ? callLoaderOrAction(\n type,\n request,\n match,\n manifest,\n mapRouteProperties,\n handlerOverride,\n requestContext\n )\n : Promise.resolve({ type: ResultType.data, result: undefined });\n };\n\n return {\n ...match,\n shouldLoad,\n resolve,\n };\n }),\n request,\n params: matches[0].params,\n context: requestContext,\n });\n\n // Throw if any loadRoute implementations not called since they are what\n // ensures a route is fully loaded\n matches.forEach((m) =>\n invariant(\n loadedMatches.has(m.route.id),\n `\\`match.resolve()\\` was not called for route id \"${m.route.id}\". ` +\n \"You must call `match.resolve()` on every match passed to \" +\n \"`dataStrategy` to ensure all routes are properly loaded.\"\n )\n );\n\n // Filter out any middleware-only matches for which we didn't need to run handlers\n return results.filter((_, i) => routeIdsToLoad.has(matches[i].route.id));\n}\n\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(\n type: \"loader\" | \"action\",\n request: Request,\n match: AgnosticDataRouteMatch,\n manifest: RouteManifest,\n mapRouteProperties: MapRoutePropertiesFunction,\n handlerOverride: Parameters[0],\n staticContext?: unknown\n): Promise {\n let result: HandlerResult;\n let onReject: (() => void) | undefined;\n\n let runHandler = (\n handler: AgnosticRouteObject[\"loader\"] | AgnosticRouteObject[\"action\"]\n ): Promise => {\n // Setup a promise we can race against so that abort signals short circuit\n let reject: () => void;\n // This will never resolve so safe to type it as Promise to\n // satisfy the function return value\n let abortPromise = new Promise((_, r) => (reject = r));\n onReject = () => reject();\n request.signal.addEventListener(\"abort\", onReject);\n\n let actualHandler = (ctx?: unknown) => {\n if (typeof handler !== \"function\") {\n return Promise.reject(\n new Error(\n `You cannot call the handler for a route which defines a boolean ` +\n `\"${type}\" [routeId: ${match.route.id}]`\n )\n );\n }\n return handler(\n {\n request,\n params: match.params,\n context: staticContext,\n },\n ...(ctx !== undefined ? [ctx] : [])\n );\n };\n\n let handlerPromise: Promise;\n if (handlerOverride) {\n handlerPromise = handlerOverride((ctx: unknown) => actualHandler(ctx));\n } else {\n handlerPromise = (async () => {\n try {\n let val = await actualHandler();\n return { type: \"data\", result: val };\n } catch (e) {\n return { type: \"error\", result: e };\n }\n })();\n }\n\n return Promise.race([handlerPromise, abortPromise]);\n };\n\n try {\n let handler = match.route[type];\n\n if (match.route.lazy) {\n if (handler) {\n // Run statically defined handler in parallel with lazy()\n let handlerError;\n let [value] = await Promise.all([\n // If the handler throws, don't let it immediately bubble out,\n // since we need to let the lazy() execution finish so we know if this\n // route has a boundary that can handle the error\n runHandler(handler).catch((e) => {\n handlerError = e;\n }),\n loadLazyRouteModule(match.route, mapRouteProperties, manifest),\n ]);\n if (handlerError !== undefined) {\n throw handlerError;\n }\n result = value!;\n } else {\n // Load lazy route module, then run any returned handler\n await loadLazyRouteModule(match.route, mapRouteProperties, manifest);\n\n handler = match.route[type];\n if (handler) {\n // Handler still runs even if we got interrupted to maintain consistency\n // with un-abortable behavior of handler execution on non-lazy or\n // previously-lazy-loaded routes\n result = await runHandler(handler);\n } else if (type === \"action\") {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(405, {\n method: request.method,\n pathname,\n routeId: match.route.id,\n });\n } else {\n // lazy() route has no loader to run. Short circuit here so we don't\n // hit the invariant below that errors on returning undefined.\n return { type: ResultType.data, result: undefined };\n }\n }\n } else if (!handler) {\n let url = new URL(request.url);\n let pathname = url.pathname + url.search;\n throw getInternalRouterError(404, {\n pathname,\n });\n } else {\n result = await runHandler(handler);\n }\n\n invariant(\n result.result !== undefined,\n `You defined ${type === \"action\" ? \"an action\" : \"a loader\"} for route ` +\n `\"${match.route.id}\" but didn't return anything from your \\`${type}\\` ` +\n `function. Please return a value or \\`null\\`.`\n );\n } catch (e) {\n // We should already be catching and converting normal handler executions to\n // HandlerResults and returning them, so anything that throws here is an\n // unexpected error we still need to wrap\n return { type: ResultType.error, result: e };\n } finally {\n if (onReject) {\n request.signal.removeEventListener(\"abort\", onReject);\n }\n }\n\n return result;\n}\n\nasync function convertHandlerResultToDataResult(\n handlerResult: HandlerResult\n): Promise {\n let { result, type } = handlerResult;\n\n if (isResponse(result)) {\n let data: any;\n\n try {\n let contentType = result.headers.get(\"Content-Type\");\n // Check between word boundaries instead of startsWith() due to the last\n // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n if (result.body == null) {\n data = null;\n } else {\n data = await result.json();\n }\n } else {\n data = await result.text();\n }\n } catch (e) {\n return { type: ResultType.error, error: e };\n }\n\n if (type === ResultType.error) {\n return {\n type: ResultType.error,\n error: new ErrorResponseImpl(result.status, result.statusText, data),\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n return {\n type: ResultType.data,\n data,\n statusCode: result.status,\n headers: result.headers,\n };\n }\n\n if (type === ResultType.error) {\n if (isDataWithResponseInit(result)) {\n if (result.data instanceof Error) {\n return {\n type: ResultType.error,\n error: result.data,\n statusCode: result.init?.status,\n };\n }\n\n // Convert thrown unstable_data() to ErrorResponse instances\n result = new ErrorResponseImpl(\n result.init?.status || 500,\n undefined,\n result.data\n );\n }\n return {\n type: ResultType.error,\n error: result,\n statusCode: isRouteErrorResponse(result) ? result.status : undefined,\n };\n }\n\n if (isDeferredData(result)) {\n return {\n type: ResultType.deferred,\n deferredData: result,\n statusCode: result.init?.status,\n headers: result.init?.headers && new Headers(result.init.headers),\n };\n }\n\n if (isDataWithResponseInit(result)) {\n return {\n type: ResultType.data,\n data: result.data,\n statusCode: result.init?.status,\n headers: result.init?.headers\n ? new Headers(result.init.headers)\n : undefined,\n };\n }\n\n return { type: ResultType.data, data: result };\n}\n\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(\n response: Response,\n request: Request,\n routeId: string,\n matches: AgnosticDataRouteMatch[],\n basename: string,\n v7_relativeSplatPath: boolean\n) {\n let location = response.headers.get(\"Location\");\n invariant(\n location,\n \"Redirects returned/thrown from loaders/actions must have a Location header\"\n );\n\n if (!ABSOLUTE_URL_REGEX.test(location)) {\n let trimmedMatches = matches.slice(\n 0,\n matches.findIndex((m) => m.route.id === routeId) + 1\n );\n location = normalizeTo(\n new URL(request.url),\n trimmedMatches,\n basename,\n true,\n location,\n v7_relativeSplatPath\n );\n response.headers.set(\"Location\", location);\n }\n\n return response;\n}\n\nfunction normalizeRedirectLocation(\n location: string,\n currentUrl: URL,\n basename: string\n): string {\n if (ABSOLUTE_URL_REGEX.test(location)) {\n // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n let normalizedLocation = location;\n let url = normalizedLocation.startsWith(\"//\")\n ? new URL(currentUrl.protocol + normalizedLocation)\n : new URL(normalizedLocation);\n let isSameBasename = stripBasename(url.pathname, basename) != null;\n if (url.origin === currentUrl.origin && isSameBasename) {\n return url.pathname + url.search + url.hash;\n }\n }\n return location;\n}\n\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches. During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(\n history: History,\n location: string | Location,\n signal: AbortSignal,\n submission?: Submission\n): Request {\n let url = history.createURL(stripHashFromPath(location)).toString();\n let init: RequestInit = { signal };\n\n if (submission && isMutationMethod(submission.formMethod)) {\n let { formMethod, formEncType } = submission;\n // Didn't think we needed this but it turns out unlike other methods, patch\n // won't be properly normalized to uppercase and results in a 405 error.\n // See: https://fetch.spec.whatwg.org/#concept-method\n init.method = formMethod.toUpperCase();\n\n if (formEncType === \"application/json\") {\n init.headers = new Headers({ \"Content-Type\": formEncType });\n init.body = JSON.stringify(submission.json);\n } else if (formEncType === \"text/plain\") {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.text;\n } else if (\n formEncType === \"application/x-www-form-urlencoded\" &&\n submission.formData\n ) {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = convertFormDataToSearchParams(submission.formData);\n } else {\n // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n init.body = submission.formData;\n }\n }\n\n return new Request(url, init);\n}\n\nfunction convertFormDataToSearchParams(formData: FormData): URLSearchParams {\n let searchParams = new URLSearchParams();\n\n for (let [key, value] of formData.entries()) {\n // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n searchParams.append(key, typeof value === \"string\" ? value : value.name);\n }\n\n return searchParams;\n}\n\nfunction convertSearchParamsToFormData(\n searchParams: URLSearchParams\n): FormData {\n let formData = new FormData();\n for (let [key, value] of searchParams.entries()) {\n formData.append(key, value);\n }\n return formData;\n}\n\nfunction processRouteLoaderData(\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingActionResult: PendingActionResult | undefined,\n activeDeferreds: Map,\n skipLoaderErrorBubbling: boolean\n): {\n loaderData: RouterState[\"loaderData\"];\n errors: RouterState[\"errors\"] | null;\n statusCode: number;\n loaderHeaders: Record;\n} {\n // Fill in loaderData/errors from our loaders\n let loaderData: RouterState[\"loaderData\"] = {};\n let errors: RouterState[\"errors\"] | null = null;\n let statusCode: number | undefined;\n let foundError = false;\n let loaderHeaders: Record = {};\n let pendingError =\n pendingActionResult && isErrorResult(pendingActionResult[1])\n ? pendingActionResult[1].error\n : undefined;\n\n // Process loader results into state.loaderData/state.errors\n results.forEach((result, index) => {\n let id = matchesToLoad[index].route.id;\n invariant(\n !isRedirectResult(result),\n \"Cannot handle redirect results in processLoaderData\"\n );\n if (isErrorResult(result)) {\n let error = result.error;\n // If we have a pending action error, we report it at the highest-route\n // that throws a loader error, and then clear it out to indicate that\n // it was consumed\n if (pendingError !== undefined) {\n error = pendingError;\n pendingError = undefined;\n }\n\n errors = errors || {};\n\n if (skipLoaderErrorBubbling) {\n errors[id] = error;\n } else {\n // Look upwards from the matched route for the closest ancestor error\n // boundary, defaulting to the root match. Prefer higher error values\n // if lower errors bubble to the same boundary\n let boundaryMatch = findNearestBoundary(matches, id);\n if (errors[boundaryMatch.route.id] == null) {\n errors[boundaryMatch.route.id] = error;\n }\n }\n\n // Clear our any prior loaderData for the throwing route\n loaderData[id] = undefined;\n\n // Once we find our first (highest) error, we set the status code and\n // prevent deeper status codes from overriding\n if (!foundError) {\n foundError = true;\n statusCode = isRouteErrorResponse(result.error)\n ? result.error.status\n : 500;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n if (isDeferredResult(result)) {\n activeDeferreds.set(id, result.deferredData);\n loaderData[id] = result.deferredData.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (\n result.statusCode != null &&\n result.statusCode !== 200 &&\n !foundError\n ) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n } else {\n loaderData[id] = result.data;\n // Error status codes always override success status codes, but if all\n // loaders are successful we take the deepest status code.\n if (result.statusCode && result.statusCode !== 200 && !foundError) {\n statusCode = result.statusCode;\n }\n if (result.headers) {\n loaderHeaders[id] = result.headers;\n }\n }\n }\n });\n\n // If we didn't consume the pending action error (i.e., all loaders\n // resolved), then consume it here. Also clear out any loaderData for the\n // throwing route\n if (pendingError !== undefined && pendingActionResult) {\n errors = { [pendingActionResult[0]]: pendingError };\n loaderData[pendingActionResult[0]] = undefined;\n }\n\n return {\n loaderData,\n errors,\n statusCode: statusCode || 200,\n loaderHeaders,\n };\n}\n\nfunction processLoaderData(\n state: RouterState,\n matches: AgnosticDataRouteMatch[],\n matchesToLoad: AgnosticDataRouteMatch[],\n results: DataResult[],\n pendingActionResult: PendingActionResult | undefined,\n revalidatingFetchers: RevalidatingFetcher[],\n fetcherResults: DataResult[],\n activeDeferreds: Map\n): {\n loaderData: RouterState[\"loaderData\"];\n errors?: RouterState[\"errors\"];\n} {\n let { loaderData, errors } = processRouteLoaderData(\n matches,\n matchesToLoad,\n results,\n pendingActionResult,\n activeDeferreds,\n false // This method is only called client side so we always want to bubble\n );\n\n // Process results from our revalidating fetchers\n for (let index = 0; index < revalidatingFetchers.length; index++) {\n let { key, match, controller } = revalidatingFetchers[index];\n invariant(\n fetcherResults !== undefined && fetcherResults[index] !== undefined,\n \"Did not find corresponding fetcher result\"\n );\n let result = fetcherResults[index];\n\n // Process fetcher non-redirect errors\n if (controller && controller.signal.aborted) {\n // Nothing to do for aborted fetchers\n continue;\n } else if (isErrorResult(result)) {\n let boundaryMatch = findNearestBoundary(state.matches, match?.route.id);\n if (!(errors && errors[boundaryMatch.route.id])) {\n errors = {\n ...errors,\n [boundaryMatch.route.id]: result.error,\n };\n }\n state.fetchers.delete(key);\n } else if (isRedirectResult(result)) {\n // Should never get here, redirects should get processed above, but we\n // keep this to type narrow to a success result in the else\n invariant(false, \"Unhandled fetcher revalidation redirect\");\n } else if (isDeferredResult(result)) {\n // Should never get here, deferred data should be awaited for fetchers\n // in resolveDeferredResults\n invariant(false, \"Unhandled fetcher deferred data\");\n } else {\n let doneFetcher = getDoneFetcher(result.data);\n state.fetchers.set(key, doneFetcher);\n }\n }\n\n return { loaderData, errors };\n}\n\nfunction mergeLoaderData(\n loaderData: RouteData,\n newLoaderData: RouteData,\n matches: AgnosticDataRouteMatch[],\n errors: RouteData | null | undefined\n): RouteData {\n let mergedLoaderData = { ...newLoaderData };\n for (let match of matches) {\n let id = match.route.id;\n if (newLoaderData.hasOwnProperty(id)) {\n if (newLoaderData[id] !== undefined) {\n mergedLoaderData[id] = newLoaderData[id];\n } else {\n // No-op - this is so we ignore existing data if we have a key in the\n // incoming object with an undefined value, which is how we unset a prior\n // loaderData if we encounter a loader error\n }\n } else if (loaderData[id] !== undefined && match.route.loader) {\n // Preserve existing keys not included in newLoaderData and where a loader\n // wasn't removed by HMR\n mergedLoaderData[id] = loaderData[id];\n }\n\n if (errors && errors.hasOwnProperty(id)) {\n // Don't keep any loader data below the boundary\n break;\n }\n }\n return mergedLoaderData;\n}\n\nfunction getActionDataForCommit(\n pendingActionResult: PendingActionResult | undefined\n) {\n if (!pendingActionResult) {\n return {};\n }\n return isErrorResult(pendingActionResult[1])\n ? {\n // Clear out prior actionData on errors\n actionData: {},\n }\n : {\n actionData: {\n [pendingActionResult[0]]: pendingActionResult[1].data,\n },\n };\n}\n\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(\n matches: AgnosticDataRouteMatch[],\n routeId?: string\n): AgnosticDataRouteMatch {\n let eligibleMatches = routeId\n ? matches.slice(0, matches.findIndex((m) => m.route.id === routeId) + 1)\n : [...matches];\n return (\n eligibleMatches.reverse().find((m) => m.route.hasErrorBoundary === true) ||\n matches[0]\n );\n}\n\nfunction getShortCircuitMatches(routes: AgnosticDataRouteObject[]): {\n matches: AgnosticDataRouteMatch[];\n route: AgnosticDataRouteObject;\n} {\n // Prefer a root layout route if present, otherwise shim in a route object\n let route =\n routes.length === 1\n ? routes[0]\n : routes.find((r) => r.index || !r.path || r.path === \"/\") || {\n id: `__shim-error-route__`,\n };\n\n return {\n matches: [\n {\n params: {},\n pathname: \"\",\n pathnameBase: \"\",\n route,\n },\n ],\n route,\n };\n}\n\nfunction getInternalRouterError(\n status: number,\n {\n pathname,\n routeId,\n method,\n type,\n message,\n }: {\n pathname?: string;\n routeId?: string;\n method?: string;\n type?: \"defer-action\" | \"invalid-body\" | \"route-discovery\";\n message?: string;\n } = {}\n) {\n let statusText = \"Unknown Server Error\";\n let errorMessage = \"Unknown @remix-run/router error\";\n\n if (status === 400) {\n statusText = \"Bad Request\";\n if (type === \"route-discovery\") {\n errorMessage =\n `Unable to match URL \"${pathname}\" - the \\`unstable_patchRoutesOnMiss()\\` ` +\n `function threw the following error:\\n${message}`;\n } else if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method} request to \"${pathname}\" but ` +\n `did not provide a \\`loader\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (type === \"defer-action\") {\n errorMessage = \"defer() is not supported in actions\";\n } else if (type === \"invalid-body\") {\n errorMessage = \"Unable to encode submission body\";\n }\n } else if (status === 403) {\n statusText = \"Forbidden\";\n errorMessage = `Route \"${routeId}\" does not match URL \"${pathname}\"`;\n } else if (status === 404) {\n statusText = \"Not Found\";\n errorMessage = `No route matches URL \"${pathname}\"`;\n } else if (status === 405) {\n statusText = \"Method Not Allowed\";\n if (method && pathname && routeId) {\n errorMessage =\n `You made a ${method.toUpperCase()} request to \"${pathname}\" but ` +\n `did not provide an \\`action\\` for route \"${routeId}\", ` +\n `so there is no way to handle the request.`;\n } else if (method) {\n errorMessage = `Invalid request method \"${method.toUpperCase()}\"`;\n }\n }\n\n return new ErrorResponseImpl(\n status || 500,\n statusText,\n new Error(errorMessage),\n true\n );\n}\n\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(\n results: DataResult[]\n): { result: RedirectResult; idx: number } | undefined {\n for (let i = results.length - 1; i >= 0; i--) {\n let result = results[i];\n if (isRedirectResult(result)) {\n return { result, idx: i };\n }\n }\n}\n\nfunction stripHashFromPath(path: To) {\n let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n return createPath({ ...parsedPath, hash: \"\" });\n}\n\nfunction isHashChangeOnly(a: Location, b: Location): boolean {\n if (a.pathname !== b.pathname || a.search !== b.search) {\n return false;\n }\n\n if (a.hash === \"\") {\n // /page -> /page#hash\n return b.hash !== \"\";\n } else if (a.hash === b.hash) {\n // /page#hash -> /page#hash\n return true;\n } else if (b.hash !== \"\") {\n // /page#hash -> /page#other\n return true;\n }\n\n // If the hash is removed the browser will re-perform a request to the server\n // /page#hash -> /page\n return false;\n}\n\nfunction isPromise(val: unknown): val is Promise {\n return typeof val === \"object\" && val != null && \"then\" in val;\n}\n\nfunction isHandlerResult(result: unknown): result is HandlerResult {\n return (\n result != null &&\n typeof result === \"object\" &&\n \"type\" in result &&\n \"result\" in result &&\n (result.type === ResultType.data || result.type === ResultType.error)\n );\n}\n\nfunction isRedirectHandlerResult(result: HandlerResult) {\n return (\n isResponse(result.result) && redirectStatusCodes.has(result.result.status)\n );\n}\n\nfunction isDeferredResult(result: DataResult): result is DeferredResult {\n return result.type === ResultType.deferred;\n}\n\nfunction isErrorResult(result: DataResult): result is ErrorResult {\n return result.type === ResultType.error;\n}\n\nfunction isRedirectResult(result?: DataResult): result is RedirectResult {\n return (result && result.type) === ResultType.redirect;\n}\n\nexport function isDataWithResponseInit(\n value: any\n): value is DataWithResponseInit {\n return (\n typeof value === \"object\" &&\n value != null &&\n \"type\" in value &&\n \"data\" in value &&\n \"init\" in value &&\n value.type === \"DataWithResponseInit\"\n );\n}\n\nexport function isDeferredData(value: any): value is DeferredData {\n let deferred: DeferredData = value;\n return (\n deferred &&\n typeof deferred === \"object\" &&\n typeof deferred.data === \"object\" &&\n typeof deferred.subscribe === \"function\" &&\n typeof deferred.cancel === \"function\" &&\n typeof deferred.resolveData === \"function\"\n );\n}\n\nfunction isResponse(value: any): value is Response {\n return (\n value != null &&\n typeof value.status === \"number\" &&\n typeof value.statusText === \"string\" &&\n typeof value.headers === \"object\" &&\n typeof value.body !== \"undefined\"\n );\n}\n\nfunction isRedirectResponse(result: any): result is Response {\n if (!isResponse(result)) {\n return false;\n }\n\n let status = result.status;\n let location = result.headers.get(\"Location\");\n return status >= 300 && status <= 399 && location != null;\n}\n\nfunction isValidMethod(method: string): method is FormMethod | V7_FormMethod {\n return validRequestMethods.has(method.toLowerCase() as FormMethod);\n}\n\nfunction isMutationMethod(\n method: string\n): method is MutationFormMethod | V7_MutationFormMethod {\n return validMutationMethods.has(method.toLowerCase() as MutationFormMethod);\n}\n\nasync function resolveDeferredResults(\n currentMatches: AgnosticDataRouteMatch[],\n matchesToLoad: (AgnosticDataRouteMatch | null)[],\n results: DataResult[],\n signals: (AbortSignal | null)[],\n isFetcher: boolean,\n currentLoaderData?: RouteData\n) {\n for (let index = 0; index < results.length; index++) {\n let result = results[index];\n let match = matchesToLoad[index];\n // If we don't have a match, then we can have a deferred result to do\n // anything with. This is for revalidating fetchers where the route was\n // removed during HMR\n if (!match) {\n continue;\n }\n\n let currentMatch = currentMatches.find(\n (m) => m.route.id === match!.route.id\n );\n let isRevalidatingLoader =\n currentMatch != null &&\n !isNewRouteInstance(currentMatch, match) &&\n (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n\n if (isDeferredResult(result) && (isFetcher || isRevalidatingLoader)) {\n // Note: we do not have to touch activeDeferreds here since we race them\n // against the signal in resolveDeferredData and they'll get aborted\n // there if needed\n let signal = signals[index];\n invariant(\n signal,\n \"Expected an AbortSignal for revalidating fetcher deferred result\"\n );\n await resolveDeferredData(result, signal, isFetcher).then((result) => {\n if (result) {\n results[index] = result || results[index];\n }\n });\n }\n }\n}\n\nasync function resolveDeferredData(\n result: DeferredResult,\n signal: AbortSignal,\n unwrap = false\n): Promise {\n let aborted = await result.deferredData.resolveData(signal);\n if (aborted) {\n return;\n }\n\n if (unwrap) {\n try {\n return {\n type: ResultType.data,\n data: result.deferredData.unwrappedData,\n };\n } catch (e) {\n // Handle any TrackedPromise._error values encountered while unwrapping\n return {\n type: ResultType.error,\n error: e,\n };\n }\n }\n\n return {\n type: ResultType.data,\n data: result.deferredData.data,\n };\n}\n\nfunction hasNakedIndexQuery(search: string): boolean {\n return new URLSearchParams(search).getAll(\"index\").some((v) => v === \"\");\n}\n\nfunction getTargetMatch(\n matches: AgnosticDataRouteMatch[],\n location: Location | string\n) {\n let search =\n typeof location === \"string\" ? parsePath(location).search : location.search;\n if (\n matches[matches.length - 1].route.index &&\n hasNakedIndexQuery(search || \"\")\n ) {\n // Return the leaf index route when index is present\n return matches[matches.length - 1];\n }\n // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n // pathless layout routes)\n let pathMatches = getPathContributingMatches(matches);\n return pathMatches[pathMatches.length - 1];\n}\n\nfunction getSubmissionFromNavigation(\n navigation: Navigation\n): Submission | undefined {\n let { formMethod, formAction, formEncType, text, formData, json } =\n navigation;\n if (!formMethod || !formAction || !formEncType) {\n return;\n }\n\n if (text != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json: undefined,\n text,\n };\n } else if (formData != null) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData,\n json: undefined,\n text: undefined,\n };\n } else if (json !== undefined) {\n return {\n formMethod,\n formAction,\n formEncType,\n formData: undefined,\n json,\n text: undefined,\n };\n }\n}\n\nfunction getLoadingNavigation(\n location: Location,\n submission?: Submission\n): NavigationStates[\"Loading\"] {\n if (submission) {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n } else {\n let navigation: NavigationStates[\"Loading\"] = {\n state: \"loading\",\n location,\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n };\n return navigation;\n }\n}\n\nfunction getSubmittingNavigation(\n location: Location,\n submission: Submission\n): NavigationStates[\"Submitting\"] {\n let navigation: NavigationStates[\"Submitting\"] = {\n state: \"submitting\",\n location,\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n };\n return navigation;\n}\n\nfunction getLoadingFetcher(\n submission?: Submission,\n data?: Fetcher[\"data\"]\n): FetcherStates[\"Loading\"] {\n if (submission) {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data,\n };\n return fetcher;\n } else {\n let fetcher: FetcherStates[\"Loading\"] = {\n state: \"loading\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n }\n}\n\nfunction getSubmittingFetcher(\n submission: Submission,\n existingFetcher?: Fetcher\n): FetcherStates[\"Submitting\"] {\n let fetcher: FetcherStates[\"Submitting\"] = {\n state: \"submitting\",\n formMethod: submission.formMethod,\n formAction: submission.formAction,\n formEncType: submission.formEncType,\n formData: submission.formData,\n json: submission.json,\n text: submission.text,\n data: existingFetcher ? existingFetcher.data : undefined,\n };\n return fetcher;\n}\n\nfunction getDoneFetcher(data: Fetcher[\"data\"]): FetcherStates[\"Idle\"] {\n let fetcher: FetcherStates[\"Idle\"] = {\n state: \"idle\",\n formMethod: undefined,\n formAction: undefined,\n formEncType: undefined,\n formData: undefined,\n json: undefined,\n text: undefined,\n data,\n };\n return fetcher;\n}\n\nfunction restoreAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n try {\n let sessionPositions = _window.sessionStorage.getItem(\n TRANSITIONS_STORAGE_KEY\n );\n if (sessionPositions) {\n let json = JSON.parse(sessionPositions);\n for (let [k, v] of Object.entries(json || {})) {\n if (v && Array.isArray(v)) {\n transitions.set(k, new Set(v || []));\n }\n }\n }\n } catch (e) {\n // no-op, use default empty object\n }\n}\n\nfunction persistAppliedTransitions(\n _window: Window,\n transitions: Map>\n) {\n if (transitions.size > 0) {\n let json: Record = {};\n for (let [k, v] of transitions) {\n json[k] = [...v];\n }\n try {\n _window.sessionStorage.setItem(\n TRANSITIONS_STORAGE_KEY,\n JSON.stringify(json)\n );\n } catch (error) {\n warning(\n false,\n `Failed to save applied view transitions in sessionStorage (${error}).`\n );\n }\n }\n}\n//#endregion\n","import * as React from \"react\";\nimport type {\n AgnosticIndexRouteObject,\n AgnosticNonIndexRouteObject,\n AgnosticRouteMatch,\n History,\n LazyRouteFunction,\n Location,\n Action as NavigationType,\n RelativeRoutingType,\n Router,\n StaticHandlerContext,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nexport interface IndexRouteObject {\n caseSensitive?: AgnosticIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticIndexRouteObject[\"path\"];\n id?: AgnosticIndexRouteObject[\"id\"];\n loader?: AgnosticIndexRouteObject[\"loader\"];\n action?: AgnosticIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticIndexRouteObject[\"handle\"];\n index: true;\n children?: undefined;\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport interface NonIndexRouteObject {\n caseSensitive?: AgnosticNonIndexRouteObject[\"caseSensitive\"];\n path?: AgnosticNonIndexRouteObject[\"path\"];\n id?: AgnosticNonIndexRouteObject[\"id\"];\n loader?: AgnosticNonIndexRouteObject[\"loader\"];\n action?: AgnosticNonIndexRouteObject[\"action\"];\n hasErrorBoundary?: AgnosticNonIndexRouteObject[\"hasErrorBoundary\"];\n shouldRevalidate?: AgnosticNonIndexRouteObject[\"shouldRevalidate\"];\n handle?: AgnosticNonIndexRouteObject[\"handle\"];\n index?: false;\n children?: RouteObject[];\n element?: React.ReactNode | null;\n hydrateFallbackElement?: React.ReactNode | null;\n errorElement?: React.ReactNode | null;\n Component?: React.ComponentType | null;\n HydrateFallback?: React.ComponentType | null;\n ErrorBoundary?: React.ComponentType | null;\n lazy?: LazyRouteFunction;\n}\n\nexport type RouteObject = IndexRouteObject | NonIndexRouteObject;\n\nexport type DataRouteObject = RouteObject & {\n children?: DataRouteObject[];\n id: string;\n};\n\nexport interface RouteMatch<\n ParamKey extends string = string,\n RouteObjectType extends RouteObject = RouteObject\n> extends AgnosticRouteMatch {}\n\nexport interface DataRouteMatch extends RouteMatch {}\n\nexport interface DataRouterContextObject\n // Omit `future` since those can be pulled from the `router`\n // `NavigationContext` needs future since it doesn't have a `router` in all cases\n extends Omit {\n router: Router;\n staticContext?: StaticHandlerContext;\n}\n\nexport const DataRouterContext =\n React.createContext(null);\nif (__DEV__) {\n DataRouterContext.displayName = \"DataRouter\";\n}\n\nexport const DataRouterStateContext = React.createContext<\n Router[\"state\"] | null\n>(null);\nif (__DEV__) {\n DataRouterStateContext.displayName = \"DataRouterState\";\n}\n\nexport const AwaitContext = React.createContext(null);\nif (__DEV__) {\n AwaitContext.displayName = \"Await\";\n}\n\nexport interface NavigateOptions {\n replace?: boolean;\n state?: any;\n preventScrollReset?: boolean;\n relative?: RelativeRoutingType;\n unstable_flushSync?: boolean;\n unstable_viewTransition?: boolean;\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\nexport interface Navigator {\n createHref: History[\"createHref\"];\n // Optional for backwards-compat with Router/HistoryRouter usage (edge case)\n encodeLocation?: History[\"encodeLocation\"];\n go: History[\"go\"];\n push(to: To, state?: any, opts?: NavigateOptions): void;\n replace(to: To, state?: any, opts?: NavigateOptions): void;\n}\n\ninterface NavigationContextObject {\n basename: string;\n navigator: Navigator;\n static: boolean;\n future: {\n v7_relativeSplatPath: boolean;\n };\n}\n\nexport const NavigationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n NavigationContext.displayName = \"Navigation\";\n}\n\ninterface LocationContextObject {\n location: Location;\n navigationType: NavigationType;\n}\n\nexport const LocationContext = React.createContext(\n null!\n);\n\nif (__DEV__) {\n LocationContext.displayName = \"Location\";\n}\n\nexport interface RouteContextObject {\n outlet: React.ReactElement | null;\n matches: RouteMatch[];\n isDataRoute: boolean;\n}\n\nexport const RouteContext = React.createContext({\n outlet: null,\n matches: [],\n isDataRoute: false,\n});\n\nif (__DEV__) {\n RouteContext.displayName = \"Route\";\n}\n\nexport const RouteErrorContext = React.createContext(null);\n\nif (__DEV__) {\n RouteErrorContext.displayName = \"RouteError\";\n}\n","import * as React from \"react\";\nimport type {\n Blocker,\n BlockerFunction,\n Location,\n ParamParseKey,\n Params,\n Path,\n PathMatch,\n PathPattern,\n RelativeRoutingType,\n Router as RemixRouter,\n RevalidationState,\n To,\n UIMatch,\n} from \"@remix-run/router\";\nimport {\n IDLE_BLOCKER,\n Action as NavigationType,\n UNSAFE_convertRouteMatchToUiMatch as convertRouteMatchToUiMatch,\n UNSAFE_decodePath as decodePath,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n isRouteErrorResponse,\n joinPaths,\n matchPath,\n matchRoutes,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\n\nimport type {\n DataRouteMatch,\n NavigateOptions,\n RouteContextObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n RouteErrorContext,\n} from \"./context\";\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nexport function useHref(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): string {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useHref() may be used only in the context of a component.`\n );\n\n let { basename, navigator } = React.useContext(NavigationContext);\n let { hash, pathname, search } = useResolvedPath(to, { relative });\n\n let joinedPathname = pathname;\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to creating the href. If this is a root navigation, then just use the raw\n // basename which allows the basename to have full control over the presence\n // of a trailing slash on root links\n if (basename !== \"/\") {\n joinedPathname =\n pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n }\n\n return navigator.createHref({ pathname: joinedPathname, search, hash });\n}\n\n/**\n * Returns true if this component is a descendant of a ``.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nexport function useInRouterContext(): boolean {\n return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nexport function useLocation(): Location {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useLocation() may be used only in the context of a component.`\n );\n\n return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nexport function useNavigationType(): NavigationType {\n return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * ``.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nexport function useMatch<\n ParamKey extends ParamParseKey,\n Path extends string\n>(pattern: PathPattern | Path): PathMatch | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useMatch() may be used only in the context of a component.`\n );\n\n let { pathname } = useLocation();\n return React.useMemo(\n () => matchPath(pattern, decodePath(pathname)),\n [pathname, pattern]\n );\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\nexport interface NavigateFunction {\n (to: To, options?: NavigateOptions): void;\n (delta: number): void;\n}\n\nconst navigateEffectWarning =\n `You should call navigate() in a React.useEffect(), not when ` +\n `your component is first rendered.`;\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(\n cb: Parameters[0]\n) {\n let isStatic = React.useContext(NavigationContext).static;\n if (!isStatic) {\n // We should be able to get rid of this once react 18.3 is released\n // See: https://github.com/facebook/react/pull/26395\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useLayoutEffect(cb);\n }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by ``s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nexport function useNavigate(): NavigateFunction {\n let { isDataRoute } = React.useContext(RouteContext);\n // Conditional usage is OK here because the usage of a data router is static\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\n\nfunction useNavigateUnstable(): NavigateFunction {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useNavigate() may be used only in the context of a component.`\n );\n\n let dataRouterContext = React.useContext(DataRouterContext);\n let { basename, future, navigator } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our history listener yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n navigator.go(to);\n return;\n }\n\n let path = resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n options.relative === \"path\"\n );\n\n // If we're operating within a basename, prepend it to the pathname prior\n // to handing off to history (but only if we're not in a data router,\n // otherwise it'll prepend the basename inside of the router).\n // If this is a root navigation, then we navigate to the raw basename\n // which allows the basename to have full control over the presence of a\n // trailing slash on root links\n if (dataRouterContext == null && basename !== \"/\") {\n path.pathname =\n path.pathname === \"/\"\n ? basename\n : joinPaths([basename, path.pathname]);\n }\n\n (!!options.replace ? navigator.replace : navigator.push)(\n path,\n options.state,\n options\n );\n },\n [\n basename,\n navigator,\n routePathnamesJson,\n locationPathname,\n dataRouterContext,\n ]\n );\n\n return navigate;\n}\n\nconst OutletContext = React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nexport function useOutletContext(): Context {\n return React.useContext(OutletContext) as Context;\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nexport function useOutlet(context?: unknown): React.ReactElement | null {\n let outlet = React.useContext(RouteContext).outlet;\n if (outlet) {\n return (\n {outlet}\n );\n }\n return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nexport function useParams<\n ParamsOrKey extends string | Record = string\n>(): Readonly<\n [ParamsOrKey] extends [string] ? Params : Partial\n> {\n let { matches } = React.useContext(RouteContext);\n let routeMatch = matches[matches.length - 1];\n return routeMatch ? (routeMatch.params as any) : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nexport function useResolvedPath(\n to: To,\n { relative }: { relative?: RelativeRoutingType } = {}\n): Path {\n let { future } = React.useContext(NavigationContext);\n let { matches } = React.useContext(RouteContext);\n let { pathname: locationPathname } = useLocation();\n let routePathnamesJson = JSON.stringify(\n getResolveToMatches(matches, future.v7_relativeSplatPath)\n );\n\n return React.useMemo(\n () =>\n resolveTo(\n to,\n JSON.parse(routePathnamesJson),\n locationPathname,\n relative === \"path\"\n ),\n [to, routePathnamesJson, locationPathname, relative]\n );\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nexport function useRoutes(\n routes: RouteObject[],\n locationArg?: Partial | string\n): React.ReactElement | null {\n return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nexport function useRoutesImpl(\n routes: RouteObject[],\n locationArg?: Partial | string,\n dataRouterState?: RemixRouter[\"state\"],\n future?: RemixRouter[\"future\"]\n): React.ReactElement | null {\n invariant(\n useInRouterContext(),\n // TODO: This error is probably because they somehow have 2 versions of the\n // router loaded. We can help them understand how to avoid that.\n `useRoutes() may be used only in the context of a component.`\n );\n\n let { navigator } = React.useContext(NavigationContext);\n let { matches: parentMatches } = React.useContext(RouteContext);\n let routeMatch = parentMatches[parentMatches.length - 1];\n let parentParams = routeMatch ? routeMatch.params : {};\n let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n let parentRoute = routeMatch && routeMatch.route;\n\n if (__DEV__) {\n // You won't get a warning about 2 different under a \n // without a trailing *, but this is a best-effort warning anyway since we\n // cannot even give the warning unless they land at the parent route.\n //\n // Example:\n //\n // \n // {/* This route path MUST end with /* because otherwise\n // it will never match /blog/post/123 */}\n // } />\n // } />\n // \n //\n // function Blog() {\n // return (\n // \n // } />\n // \n // );\n // }\n let parentPath = (parentRoute && parentRoute.path) || \"\";\n warningOnce(\n parentPathname,\n !parentRoute || parentPath.endsWith(\"*\"),\n `You rendered descendant (or called \\`useRoutes()\\`) at ` +\n `\"${parentPathname}\" (under ) but the ` +\n `parent route path has no trailing \"*\". This means if you navigate ` +\n `deeper, the parent won't match anymore and therefore the child ` +\n `routes will never render.\\n\\n` +\n `Please change the parent to .`\n );\n }\n\n let locationFromContext = useLocation();\n\n let location;\n if (locationArg) {\n let parsedLocationArg =\n typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n\n invariant(\n parentPathnameBase === \"/\" ||\n parsedLocationArg.pathname?.startsWith(parentPathnameBase),\n `When overriding the location using \\`\\` or \\`useRoutes(routes, location)\\`, ` +\n `the location pathname must begin with the portion of the URL pathname that was ` +\n `matched by all parent routes. The current pathname base is \"${parentPathnameBase}\" ` +\n `but pathname \"${parsedLocationArg.pathname}\" was given in the \\`location\\` prop.`\n );\n\n location = parsedLocationArg;\n } else {\n location = locationFromContext;\n }\n\n let pathname = location.pathname || \"/\";\n\n let remainingPathname = pathname;\n if (parentPathnameBase !== \"/\") {\n // Determine the remaining pathname by removing the # of URL segments the\n // parentPathnameBase has, instead of removing based on character count.\n // This is because we can't guarantee that incoming/outgoing encodings/\n // decodings will match exactly.\n // We decode paths before matching on a per-segment basis with\n // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n // match what `window.location.pathname` would reflect. Those don't 100%\n // align when it comes to encoded URI characters such as % and &.\n //\n // So we may end up with:\n // pathname: \"/descendant/a%25b/match\"\n // parentPathnameBase: \"/descendant/a%b\"\n //\n // And the direct substring removal approach won't work :/\n let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n }\n\n let matches = matchRoutes(routes, { pathname: remainingPathname });\n\n if (__DEV__) {\n warning(\n parentRoute || matches != null,\n `No routes matched location \"${location.pathname}${location.search}${location.hash}\" `\n );\n\n warning(\n matches == null ||\n matches[matches.length - 1].route.element !== undefined ||\n matches[matches.length - 1].route.Component !== undefined ||\n matches[matches.length - 1].route.lazy !== undefined,\n `Matched leaf route at location \"${location.pathname}${location.search}${location.hash}\" ` +\n `does not have an element or Component. This means it will render an with a ` +\n `null value by default resulting in an \"empty\" page.`\n );\n }\n\n let renderedMatches = _renderMatches(\n matches &&\n matches.map((match) =>\n Object.assign({}, match, {\n params: Object.assign({}, parentParams, match.params),\n pathname: joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathname).pathname\n : match.pathname,\n ]),\n pathnameBase:\n match.pathnameBase === \"/\"\n ? parentPathnameBase\n : joinPaths([\n parentPathnameBase,\n // Re-encode pathnames that were decoded inside matchRoutes\n navigator.encodeLocation\n ? navigator.encodeLocation(match.pathnameBase).pathname\n : match.pathnameBase,\n ]),\n })\n ),\n parentMatches,\n dataRouterState,\n future\n );\n\n // When a user passes in a `locationArg`, the associated routes need to\n // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n // to use the scoped location instead of the global location.\n if (locationArg && renderedMatches) {\n return (\n \n {renderedMatches}\n \n );\n }\n\n return renderedMatches;\n}\n\nfunction DefaultErrorComponent() {\n let error = useRouteError();\n let message = isRouteErrorResponse(error)\n ? `${error.status} ${error.statusText}`\n : error instanceof Error\n ? error.message\n : JSON.stringify(error);\n let stack = error instanceof Error ? error.stack : null;\n let lightgrey = \"rgba(200,200,200, 0.5)\";\n let preStyles = { padding: \"0.5rem\", backgroundColor: lightgrey };\n let codeStyles = { padding: \"2px 4px\", backgroundColor: lightgrey };\n\n let devInfo = null;\n if (__DEV__) {\n console.error(\n \"Error handled by React Router default ErrorBoundary:\",\n error\n );\n\n devInfo = (\n <>\n

💿 Hey developer 👋

\n

\n You can provide a way better UX than this when your app throws errors\n by providing your own ErrorBoundary or{\" \"}\n errorElement prop on your route.\n

\n \n );\n }\n\n return (\n <>\n

Unexpected Application Error!

\n

{message}

\n {stack ?
{stack}
: null}\n {devInfo}\n \n );\n}\n\nconst defaultErrorElement = ;\n\ntype RenderErrorBoundaryProps = React.PropsWithChildren<{\n location: Location;\n revalidation: RevalidationState;\n error: any;\n component: React.ReactNode;\n routeContext: RouteContextObject;\n}>;\n\ntype RenderErrorBoundaryState = {\n location: Location;\n revalidation: RevalidationState;\n error: any;\n};\n\nexport class RenderErrorBoundary extends React.Component<\n RenderErrorBoundaryProps,\n RenderErrorBoundaryState\n> {\n constructor(props: RenderErrorBoundaryProps) {\n super(props);\n this.state = {\n location: props.location,\n revalidation: props.revalidation,\n error: props.error,\n };\n }\n\n static getDerivedStateFromError(error: any) {\n return { error: error };\n }\n\n static getDerivedStateFromProps(\n props: RenderErrorBoundaryProps,\n state: RenderErrorBoundaryState\n ) {\n // When we get into an error state, the user will likely click \"back\" to the\n // previous page that didn't have an error. Because this wraps the entire\n // application, that will have no effect--the error page continues to display.\n // This gives us a mechanism to recover from the error when the location changes.\n //\n // Whether we're in an error state or not, we update the location in state\n // so that when we are in an error state, it gets reset when a new location\n // comes in and the user recovers from the error.\n if (\n state.location !== props.location ||\n (state.revalidation !== \"idle\" && props.revalidation === \"idle\")\n ) {\n return {\n error: props.error,\n location: props.location,\n revalidation: props.revalidation,\n };\n }\n\n // If we're not changing locations, preserve the location but still surface\n // any new errors that may come through. We retain the existing error, we do\n // this because the error provided from the app state may be cleared without\n // the location changing.\n return {\n error: props.error !== undefined ? props.error : state.error,\n location: state.location,\n revalidation: props.revalidation || state.revalidation,\n };\n }\n\n componentDidCatch(error: any, errorInfo: any) {\n console.error(\n \"React Router caught the following error during render\",\n error,\n errorInfo\n );\n }\n\n render() {\n return this.state.error !== undefined ? (\n \n \n \n ) : (\n this.props.children\n );\n }\n}\n\ninterface RenderedRouteProps {\n routeContext: RouteContextObject;\n match: RouteMatch;\n children: React.ReactNode | null;\n}\n\nfunction RenderedRoute({ routeContext, match, children }: RenderedRouteProps) {\n let dataRouterContext = React.useContext(DataRouterContext);\n\n // Track how deep we got in our render pass to emulate SSR componentDidCatch\n // in a DataStaticRouter\n if (\n dataRouterContext &&\n dataRouterContext.static &&\n dataRouterContext.staticContext &&\n (match.route.errorElement || match.route.ErrorBoundary)\n ) {\n dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport function _renderMatches(\n matches: RouteMatch[] | null,\n parentMatches: RouteMatch[] = [],\n dataRouterState: RemixRouter[\"state\"] | null = null,\n future: RemixRouter[\"future\"] | null = null\n): React.ReactElement | null {\n if (matches == null) {\n if (!dataRouterState) {\n return null;\n }\n\n if (dataRouterState.errors) {\n // Don't bail if we have data router errors so we can render them in the\n // boundary. Use the pre-matched (or shimmed) matches\n matches = dataRouterState.matches as DataRouteMatch[];\n } else if (\n future?.v7_partialHydration &&\n parentMatches.length === 0 &&\n !dataRouterState.initialized &&\n dataRouterState.matches.length > 0\n ) {\n // Don't bail if we're initializing with partial hydration and we have\n // router matches. That means we're actively running `patchRoutesOnMiss`\n // so we should render down the partial matches to the appropriate\n // `HydrateFallback`. We only do this if `parentMatches` is empty so it\n // only impacts the root matches for `RouterProvider` and no descendant\n // ``\n matches = dataRouterState.matches as DataRouteMatch[];\n } else {\n return null;\n }\n }\n\n let renderedMatches = matches;\n\n // If we have data errors, trim matches to the highest error boundary\n let errors = dataRouterState?.errors;\n if (errors != null) {\n let errorIndex = renderedMatches.findIndex(\n (m) => m.route.id && errors?.[m.route.id] !== undefined\n );\n invariant(\n errorIndex >= 0,\n `Could not find a matching route for errors on route IDs: ${Object.keys(\n errors\n ).join(\",\")}`\n );\n renderedMatches = renderedMatches.slice(\n 0,\n Math.min(renderedMatches.length, errorIndex + 1)\n );\n }\n\n // If we're in a partial hydration mode, detect if we need to render down to\n // a given HydrateFallback while we load the rest of the hydration data\n let renderFallback = false;\n let fallbackIndex = -1;\n if (dataRouterState && future && future.v7_partialHydration) {\n for (let i = 0; i < renderedMatches.length; i++) {\n let match = renderedMatches[i];\n // Track the deepest fallback up until the first route without data\n if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n fallbackIndex = i;\n }\n\n if (match.route.id) {\n let { loaderData, errors } = dataRouterState;\n let needsToRunLoader =\n match.route.loader &&\n loaderData[match.route.id] === undefined &&\n (!errors || errors[match.route.id] === undefined);\n if (match.route.lazy || needsToRunLoader) {\n // We found the first route that's not ready to render (waiting on\n // lazy, or has a loader that hasn't run yet). Flag that we need to\n // render a fallback and render up until the appropriate fallback\n renderFallback = true;\n if (fallbackIndex >= 0) {\n renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n } else {\n renderedMatches = [renderedMatches[0]];\n }\n break;\n }\n }\n }\n }\n\n return renderedMatches.reduceRight((outlet, match, index) => {\n // Only data routers handle errors/fallbacks\n let error: any;\n let shouldRenderHydrateFallback = false;\n let errorElement: React.ReactNode | null = null;\n let hydrateFallbackElement: React.ReactNode | null = null;\n if (dataRouterState) {\n error = errors && match.route.id ? errors[match.route.id] : undefined;\n errorElement = match.route.errorElement || defaultErrorElement;\n\n if (renderFallback) {\n if (fallbackIndex < 0 && index === 0) {\n warningOnce(\n \"route-fallback\",\n false,\n \"No `HydrateFallback` element provided to render during initial hydration\"\n );\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = null;\n } else if (fallbackIndex === index) {\n shouldRenderHydrateFallback = true;\n hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n }\n }\n }\n\n let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n let getChildren = () => {\n let children: React.ReactNode;\n if (error) {\n children = errorElement;\n } else if (shouldRenderHydrateFallback) {\n children = hydrateFallbackElement;\n } else if (match.route.Component) {\n // Note: This is a de-optimized path since React won't re-use the\n // ReactElement since it's identity changes with each new\n // React.createElement call. We keep this so folks can use\n // `` in `` but generally `Component`\n // usage is only advised in `RouterProvider` when we can convert it to\n // `element` ahead of time.\n children = ;\n } else if (match.route.element) {\n children = match.route.element;\n } else {\n children = outlet;\n }\n return (\n \n );\n };\n // Only wrap in an error boundary within data router usages when we have an\n // ErrorBoundary/errorElement on this route. Otherwise let it bubble up to\n // an ancestor ErrorBoundary/errorElement\n return dataRouterState &&\n (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? (\n \n ) : (\n getChildren()\n );\n }, null as React.ReactElement | null);\n}\n\nenum DataRouterHook {\n UseBlocker = \"useBlocker\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n}\n\nenum DataRouterStateHook {\n UseBlocker = \"useBlocker\",\n UseLoaderData = \"useLoaderData\",\n UseActionData = \"useActionData\",\n UseRouteError = \"useRouteError\",\n UseNavigation = \"useNavigation\",\n UseRouteLoaderData = \"useRouteLoaderData\",\n UseMatches = \"useMatches\",\n UseRevalidator = \"useRevalidator\",\n UseNavigateStable = \"useNavigate\",\n UseRouteId = \"useRouteId\",\n}\n\nfunction getDataRouterConsoleError(\n hookName: DataRouterHook | DataRouterStateHook\n) {\n return `${hookName} must be used within a data router. See https://reactrouter.com/routers/picking-a-router.`;\n}\n\nfunction useDataRouterContext(hookName: DataRouterHook) {\n let ctx = React.useContext(DataRouterContext);\n invariant(ctx, getDataRouterConsoleError(hookName));\n return ctx;\n}\n\nfunction useDataRouterState(hookName: DataRouterStateHook) {\n let state = React.useContext(DataRouterStateContext);\n invariant(state, getDataRouterConsoleError(hookName));\n return state;\n}\n\nfunction useRouteContext(hookName: DataRouterStateHook) {\n let route = React.useContext(RouteContext);\n invariant(route, getDataRouterConsoleError(hookName));\n return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName: DataRouterStateHook) {\n let route = useRouteContext(hookName);\n let thisRoute = route.matches[route.matches.length - 1];\n invariant(\n thisRoute.route.id,\n `${hookName} can only be used on routes that contain a unique \"id\"`\n );\n return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nexport function useRouteId() {\n return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nexport function useNavigation() {\n let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nexport function useRevalidator() {\n let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n return React.useMemo(\n () => ({\n revalidate: dataRouterContext.router.revalidate,\n state: state.revalidation,\n }),\n [dataRouterContext.router.revalidate, state.revalidation]\n );\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nexport function useMatches(): UIMatch[] {\n let { matches, loaderData } = useDataRouterState(\n DataRouterStateHook.UseMatches\n );\n return React.useMemo(\n () => matches.map((m) => convertRouteMatchToUiMatch(m, loaderData)),\n [matches, loaderData]\n );\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nexport function useLoaderData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n\n if (state.errors && state.errors[routeId] != null) {\n console.error(\n `You cannot \\`useLoaderData\\` in an errorElement (routeId: ${routeId})`\n );\n return undefined;\n }\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nexport function useRouteLoaderData(routeId: string): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nexport function useActionData(): unknown {\n let state = useDataRouterState(DataRouterStateHook.UseActionData);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error. This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nexport function useRouteError(): unknown {\n let error = React.useContext(RouteErrorContext);\n let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n // If this was a render error, we put it in a RouteError context inside\n // of RenderErrorBoundary\n if (error !== undefined) {\n return error;\n }\n\n // Otherwise look for errors from our data router state\n return state.errors?.[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `` value\n */\nexport function useAsyncValue(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `` value\n */\nexport function useAsyncError(): unknown {\n let value = React.useContext(AwaitContext);\n return value?._error;\n}\n\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation. Mostly used to avoid\n * using half-filled form data. This does not handle hard-reloads or\n * cross-origin navigations.\n */\nexport function useBlocker(shouldBlock: boolean | BlockerFunction): Blocker {\n let { router, basename } = useDataRouterContext(DataRouterHook.UseBlocker);\n let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n\n let [blockerKey, setBlockerKey] = React.useState(\"\");\n let blockerFunction = React.useCallback(\n (arg) => {\n if (typeof shouldBlock !== \"function\") {\n return !!shouldBlock;\n }\n if (basename === \"/\") {\n return shouldBlock(arg);\n }\n\n // If they provided us a function and we've got an active basename, strip\n // it from the locations we expose to the user to match the behavior of\n // useLocation\n let { currentLocation, nextLocation, historyAction } = arg;\n return shouldBlock({\n currentLocation: {\n ...currentLocation,\n pathname:\n stripBasename(currentLocation.pathname, basename) ||\n currentLocation.pathname,\n },\n nextLocation: {\n ...nextLocation,\n pathname:\n stripBasename(nextLocation.pathname, basename) ||\n nextLocation.pathname,\n },\n historyAction,\n });\n },\n [basename, shouldBlock]\n );\n\n // This effect is in charge of blocker key assignment and deletion (which is\n // tightly coupled to the key)\n React.useEffect(() => {\n let key = String(++blockerId);\n setBlockerKey(key);\n return () => router.deleteBlocker(key);\n }, [router]);\n\n // This effect handles assigning the blockerFunction. This is to handle\n // unstable blocker function identities, and happens only after the prior\n // effect so we don't get an orphaned blockerFunction in the router with a\n // key of \"\". Until then we just have the IDLE_BLOCKER.\n React.useEffect(() => {\n if (blockerKey !== \"\") {\n router.getBlocker(blockerKey, blockerFunction);\n }\n }, [router, blockerKey, blockerFunction]);\n\n // Prefer the blocker from `state` not `router.state` since DataRouterContext\n // is memoized so this ensures we update on blocker state updates\n return blockerKey && state.blockers.has(blockerKey)\n ? state.blockers.get(blockerKey)!\n : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable(): NavigateFunction {\n let { router } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n\n let activeRef = React.useRef(false);\n useIsomorphicLayoutEffect(() => {\n activeRef.current = true;\n });\n\n let navigate: NavigateFunction = React.useCallback(\n (to: To | number, options: NavigateOptions = {}) => {\n warning(activeRef.current, navigateEffectWarning);\n\n // Short circuit here since if this happens on first render the navigate\n // is useless because we haven't wired up our router subscriber yet\n if (!activeRef.current) return;\n\n if (typeof to === \"number\") {\n router.navigate(to);\n } else {\n router.navigate(to, { fromRouteId: id, ...options });\n }\n },\n [router, id]\n );\n\n return navigate;\n}\n\nconst alreadyWarned: Record = {};\n\nfunction warningOnce(key: string, cond: boolean, message: string) {\n if (!cond && !alreadyWarned[key]) {\n alreadyWarned[key] = true;\n warning(false, message);\n }\n}\n","import type {\n InitialEntry,\n LazyRouteFunction,\n Location,\n MemoryHistory,\n RelativeRoutingType,\n Router as RemixRouter,\n RouterState,\n RouterSubscriber,\n To,\n TrackedPromise,\n} from \"@remix-run/router\";\nimport {\n AbortedDeferredError,\n Action as NavigationType,\n createMemoryHistory,\n UNSAFE_getResolveToMatches as getResolveToMatches,\n UNSAFE_invariant as invariant,\n parsePath,\n resolveTo,\n stripBasename,\n UNSAFE_warning as warning,\n} from \"@remix-run/router\";\nimport * as React from \"react\";\n\nimport type {\n DataRouteObject,\n IndexRouteObject,\n Navigator,\n NonIndexRouteObject,\n RouteMatch,\n RouteObject,\n} from \"./context\";\nimport {\n AwaitContext,\n DataRouterContext,\n DataRouterStateContext,\n LocationContext,\n NavigationContext,\n RouteContext,\n} from \"./context\";\nimport {\n _renderMatches,\n useAsyncValue,\n useInRouterContext,\n useLocation,\n useNavigate,\n useOutlet,\n useRoutes,\n useRoutesImpl,\n} from \"./hooks\";\n\nexport interface FutureConfig {\n v7_relativeSplatPath: boolean;\n v7_startTransition: boolean;\n}\n\nexport interface RouterProviderProps {\n fallbackElement?: React.ReactNode;\n router: RemixRouter;\n // Only accept future flags relevant to rendering behavior\n // routing flags should be accessed via router.future\n future?: Partial>;\n}\n\n/**\n Webpack + React 17 fails to compile on any of the following because webpack\n complains that `startTransition` doesn't exist in `React`:\n * import { startTransition } from \"react\"\n * import * as React from from \"react\";\n \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n * import * as React from from \"react\";\n \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n Moving it to a constant such as the following solves the Webpack/React 17 issue:\n * import * as React from from \"react\";\n const START_TRANSITION = \"startTransition\";\n START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n However, that introduces webpack/terser minification issues in production builds\n in React 18 where minification/obfuscation ends up removing the call of\n React.startTransition entirely from the first half of the ternary. Grabbing\n this exported reference once up front resolves that issue.\n\n See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nexport function RouterProvider({\n fallbackElement,\n router,\n future,\n}: RouterProviderProps): React.ReactElement {\n let [state, setStateImpl] = React.useState(router.state);\n let { v7_startTransition } = future || {};\n\n let setState = React.useCallback(\n (newState: RouterState) => {\n if (v7_startTransition && startTransitionImpl) {\n startTransitionImpl(() => setStateImpl(newState));\n } else {\n setStateImpl(newState);\n }\n },\n [setStateImpl, v7_startTransition]\n );\n\n // Need to use a layout effect here so we are subscribed early enough to\n // pick up on any render-driven redirects/navigations (useEffect/)\n React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n\n React.useEffect(() => {\n warning(\n fallbackElement == null || !router.future.v7_partialHydration,\n \"`` is deprecated when using \" +\n \"`v7_partialHydration`, use a `HydrateFallback` component instead\"\n );\n // Only log this once on initial mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n let navigator = React.useMemo((): Navigator => {\n return {\n createHref: router.createHref,\n encodeLocation: router.encodeLocation,\n go: (n) => router.navigate(n),\n push: (to, state, opts) =>\n router.navigate(to, {\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n replace: (to, state, opts) =>\n router.navigate(to, {\n replace: true,\n state,\n preventScrollReset: opts?.preventScrollReset,\n }),\n };\n }, [router]);\n\n let basename = router.basename || \"/\";\n\n let dataRouterContext = React.useMemo(\n () => ({\n router,\n navigator,\n static: false,\n basename,\n }),\n [router, navigator, basename]\n );\n\n // The fragment and {null} here are important! We need them to keep React 18's\n // useId happy when we are server-rendering since we may have a ' + '');\n printWindow.document.close();\n printWindow.focus();\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n *\n * @param {number|string} value ?\n * @returns {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result.match(/auto|cm|mm|in|px|pt|pc|%|em|ex|ch|rem|vw|vh|vmin|vmax/)) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {void} result\n * @private\n */\nexport function enableBlazorMode() {\n isBlazorPlatform = true;\n}\n/**\n * Function to check whether the platform is blazor or not.\n *\n * @returns {boolean} result\n * @private\n */\nexport function isBlazor() {\n return isBlazorPlatform;\n}\n/**\n * Function to convert xPath to DOM element in blazor platform\n *\n * @returns {HTMLElement} result\n * @param {HTMLElement | object} element ?\n * @private\n */\nexport function getElement(element) {\n var xPath = 'xPath';\n if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[\"\" + xPath])) {\n return document.evaluate(element[\"\" + xPath], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n }\n return element;\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n *\n * @param {string | HTMLElement} element ?\n * @param {any} component ?\n * @returns {Object} ?\n * @private\n */\nexport function getInstance(element, component) {\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[\"\" + instances]) {\n for (var _i = 0, _a = elem[\"\" + instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n *\n * @param {string | HTMLElement} element ?\n * @param {Object} instance ?\n * @returns {void} ?\n * @private\n */\nexport function addInstance(element, instance) {\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[\"\" + instances]) {\n elem[\"\" + instances].push(instance);\n }\n else {\n elem[\"\" + instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n *\n * @returns {any} ?\n * @private\n */\nexport function uniqueID() {\n if ((typeof window) === 'undefined') {\n return;\n }\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\n/**\n *\n * @param {Int16Array} num ?\n * @returns {string} ?\n */\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[parseInt(i.toString(), 10)];\n }\n return ret;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Parser\n */\nvar defaultNumberingSystem = {\n 'latn': {\n '_digits': '0123456789',\n '_type': 'numeric'\n }\n};\nimport { isUndefined, getValue, isBlazor } from '../util';\nvar defaultNumberSymbols = {\n 'decimal': '.',\n 'group': ',',\n 'percentSign': '%',\n 'plusSign': '+',\n 'minusSign': '-',\n 'infinity': '∞',\n 'nan': 'NaN',\n 'exponential': 'E'\n};\nvar latnNumberSystem = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];\n/**\n * Interface for parser base\n *\n * @private\n */\nvar ParserBase = /** @class */ (function () {\n function ParserBase() {\n }\n /**\n * Returns the cldr object for the culture specifies\n *\n * @param {Object} obj - Specifies the object from which culture object to be acquired.\n * @param {string} cName - Specifies the culture name.\n * @returns {Object} ?\n */\n ParserBase.getMainObject = function (obj, cName) {\n var value = isBlazor() ? cName : 'main.' + cName;\n return getValue(value, obj);\n };\n /**\n * Returns the numbering system object from given cldr data.\n *\n * @param {Object} obj - Specifies the object from which number system is acquired.\n * @returns {Object} ?\n */\n ParserBase.getNumberingSystem = function (obj) {\n return getValue('supplemental.numberingSystems', obj) || this.numberingSystems;\n };\n /**\n * Returns the reverse of given object keys or keys specified.\n *\n * @param {Object} prop - Specifies the object to be reversed.\n * @param {number[]} keys - Optional parameter specifies the custom keyList for reversal.\n * @returns {Object} ?\n */\n ParserBase.reverseObject = function (prop, keys) {\n var propKeys = keys || Object.keys(prop);\n var res = {};\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var key = propKeys_1[_i];\n if (!Object.prototype.hasOwnProperty.call(res, prop[\"\" + key])) {\n res[prop[\"\" + key]] = key;\n }\n }\n return res;\n };\n /**\n * Returns the symbol regex by skipping the escape sequence.\n *\n * @param {string[]} props - Specifies the array values to be skipped.\n * @returns {RegExp} ?\n */\n ParserBase.getSymbolRegex = function (props) {\n var regexStr = props.map(function (str) {\n return str.replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1');\n }).join('|');\n var regExp = RegExp;\n return new regExp(regexStr, 'g');\n };\n /**\n *\n * @param {Object} prop ?\n * @returns {Object} ?\n */\n ParserBase.getSymbolMatch = function (prop) {\n var matchKeys = Object.keys(defaultNumberSymbols);\n var ret = {};\n for (var _i = 0, matchKeys_1 = matchKeys; _i < matchKeys_1.length; _i++) {\n var key = matchKeys_1[_i];\n ret[prop[\"\" + key]] = defaultNumberSymbols[\"\" + key];\n }\n return ret;\n };\n /**\n * Returns regex string for provided value\n *\n * @param {string} val ?\n * @returns {string} ?\n */\n ParserBase.constructRegex = function (val) {\n var len = val.length;\n var ret = '';\n for (var i = 0; i < len; i++) {\n if (i !== len - 1) {\n ret += val[parseInt(i.toString(), 10)] + '|';\n }\n else {\n ret += val[parseInt(i.toString(), 10)];\n }\n }\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\n * @param {string} value - Specifies the values to be replaced.\n * @param {RegExp} regex - Specifies the regex to search.\n * @param {Object} obj - Specifies the object matcher to be replace value parts.\n * @returns {string} ?\n */\n ParserBase.convertValueParts = function (value, regex, obj) {\n return value.replace(regex, function (str) {\n return obj[\"\" + str];\n });\n };\n /**\n * Returns default numbering system object for formatting from cldr data\n *\n * @param {Object} obj ?\n * @returns {NumericObject} ?\n */\n ParserBase.getDefaultNumberingSystem = function (obj) {\n var ret = {};\n ret.obj = getValue('numbers', obj);\n ret.nSystem = getValue('defaultNumberingSystem', ret.obj);\n return ret;\n };\n /**\n * Returns the replaced value of matching regex and obj mapper.\n *\n * @param {Object} curObj ?\n * @param {Object} numberSystem ?\n * @param {boolean} needSymbols ?\n * @param {boolean} blazorMode ?\n * @returns {Object} ?\n */\n ParserBase.getCurrentNumericOptions = function (curObj, numberSystem, needSymbols, blazorMode) {\n var ret = {};\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem) || blazorMode) {\n var digits = blazorMode ? getValue('obj.mapperDigits', cur) : getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n ret.numericPair = this.reverseObject(digits, latnNumberSystem);\n var regExp = RegExp;\n ret.numberParseRegex = new regExp(this.constructRegex(digits), 'g');\n ret.numericRegex = '[' + digits[0] + '-' + digits[9] + ']';\n if (needSymbols) {\n ret.numericRegex = digits[0] + '-' + digits[9];\n ret.symbolNumberSystem = getValue(blazorMode ? 'numberSymbols' : 'symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.symbolMatch = this.getSymbolMatch(ret.symbolNumberSystem);\n ret.numberSystem = cur.nSystem;\n }\n }\n }\n return ret;\n };\n /**\n * Returns number mapper object for the provided cldr data\n *\n * @param {Object} curObj ?\n * @param {Object} numberSystem ?\n * @param {boolean} isNumber ?\n * @returns {NumberMapper} ?\n */\n ParserBase.getNumberMapper = function (curObj, numberSystem, isNumber) {\n var ret = { mapper: {} };\n var cur = this.getDefaultNumberingSystem(curObj);\n if (!isUndefined(cur.nSystem)) {\n ret.numberSystem = cur.nSystem;\n ret.numberSymbols = getValue('symbols-numberSystem-' + cur.nSystem, cur.obj);\n ret.timeSeparator = getValue('timeSeparator', ret.numberSymbols);\n var digits = getValue(cur.nSystem + '._digits', numberSystem);\n if (!isUndefined(digits)) {\n for (var _i = 0, latnNumberSystem_1 = latnNumberSystem; _i < latnNumberSystem_1.length; _i++) {\n var i = latnNumberSystem_1[_i];\n ret.mapper[parseInt(i.toString(), 10)] = digits[parseInt(i.toString(), 10)];\n }\n }\n }\n return ret;\n };\n ParserBase.nPair = 'numericPair';\n ParserBase.nRegex = 'numericRegex';\n ParserBase.numberingSystems = defaultNumberingSystem;\n return ParserBase;\n}());\nexport { ParserBase };\n/**\n * @private\n */\nvar blazorCurrencyData = {\n 'DJF': 'Fdj',\n 'ERN': 'Nfk',\n 'ETB': 'Br',\n 'NAD': '$',\n 'ZAR': 'R',\n 'XAF': 'FCFA',\n 'GHS': 'GH₵',\n 'XDR': 'XDR',\n 'AED': 'د.إ.',\n 'BHD': 'د.ب.',\n 'DZD': 'د.ج.',\n 'EGP': 'ج.م.',\n 'ILS': '₪',\n 'IQD': 'د.ع.',\n 'JOD': 'د.ا.',\n 'KMF': 'CF',\n 'KWD': 'د.ك.',\n 'LBP': 'ل.ل.',\n 'LYD': 'د.ل.',\n 'MAD': 'د.م.',\n 'MRU': 'أ.م.',\n 'OMR': 'ر.ع.',\n 'QAR': 'ر.ق.',\n 'SAR': 'ر.س.',\n 'SDG': 'ج.س.',\n 'SOS': 'S',\n 'SSP': '£',\n 'SYP': 'ل.س.',\n 'TND': 'د.ت.',\n 'YER': 'ر.ي.',\n 'CLP': '$',\n 'INR': '₹',\n 'TZS': 'TSh',\n 'EUR': '€',\n 'AZN': '₼',\n 'RUB': '₽',\n 'BYN': 'Br',\n 'ZMW': 'K',\n 'BGN': 'лв.',\n 'NGN': '₦',\n 'XOF': 'CFA',\n 'BDT': '৳',\n 'CNY': '¥',\n 'BAM': 'КМ',\n 'UGX': 'USh',\n 'USD': '$',\n 'CZK': 'Kč',\n 'GBP': '£',\n 'DKK': 'kr.',\n 'KES': 'Ksh',\n 'CHF': 'CHF',\n 'MVR': 'ރ.',\n 'BTN': 'Nu.',\n 'XCD': 'EC$',\n 'AUD': '$',\n 'BBD': '$',\n 'BIF': 'FBu',\n 'BMD': '$',\n 'BSD': '$',\n 'BWP': 'P',\n 'BZD': '$',\n 'CAD': '$',\n 'NZD': '$',\n 'FJD': '$',\n 'FKP': '£',\n 'GIP': '£',\n 'GMD': 'D',\n 'GYD': '$',\n 'HKD': '$',\n 'IDR': 'Rp',\n 'JMD': '$',\n 'KYD': '$',\n 'LRD': '$',\n 'MGA': 'Ar',\n 'MOP': 'MOP$',\n 'MUR': 'Rs',\n 'MWK': 'MK',\n 'MYR': 'RM',\n 'PGK': 'K',\n 'PHP': '₱',\n 'PKR': 'Rs',\n 'RWF': 'RF',\n 'SBD': '$',\n 'SCR': 'SR',\n 'SEK': 'kr',\n 'SGD': '$',\n 'SHP': '£',\n 'SLL': 'Le',\n 'ANG': 'NAf.',\n 'SZL': 'E',\n 'TOP': 'T$',\n 'TTD': '$',\n 'VUV': 'VT',\n 'WST': 'WS$',\n 'ARS': '$',\n 'BOB': 'Bs',\n 'BRL': 'R$',\n 'COP': '$',\n 'CRC': '₡',\n 'CUP': '$',\n 'DOP': '$',\n 'GTQ': 'Q',\n 'HNL': 'L',\n 'MXN': '$',\n 'NIO': 'C$',\n 'PAB': 'B/.',\n 'PEN': 'S/',\n 'PYG': '₲',\n 'UYU': '$',\n 'VES': 'Bs.S',\n 'IRR': 'ريال',\n 'GNF': 'FG',\n 'CDF': 'FC',\n 'HTG': 'G',\n 'XPF': 'FCFP',\n 'HRK': 'kn',\n 'HUF': 'Ft',\n 'AMD': '֏',\n 'ISK': 'kr',\n 'JPY': '¥',\n 'GEL': '₾',\n 'CVE': '​',\n 'KZT': '₸',\n 'KHR': '៛',\n 'KPW': '₩',\n 'KRW': '₩',\n 'KGS': 'сом',\n 'AOA': 'Kz',\n 'LAK': '₭',\n 'MZN': 'MTn',\n 'MKD': 'ден',\n 'MNT': '₮',\n 'BND': '$',\n 'MMK': 'K',\n 'NOK': 'kr',\n 'NPR': 'रु',\n 'AWG': 'Afl.',\n 'SRD': '$',\n 'PLN': 'zł',\n 'AFN': '؋',\n 'STN': 'Db',\n 'MDL': 'L',\n 'RON': 'lei',\n 'UAH': '₴',\n 'LKR': 'රු.',\n 'ALL': 'Lekë',\n 'RSD': 'дин.',\n 'TJS': 'смн',\n 'THB': '฿',\n 'TMT': 'm.',\n 'TRY': '₺',\n 'UZS': 'сўм',\n 'VND': '₫',\n 'TWD': 'NT$'\n};\n/**\n *\n * @param {string} currencyCode ?\n * @returns {string} ?\n */\nexport function getBlazorCurrencySymbol(currencyCode) {\n return getValue(currencyCode || '', blazorCurrencyData);\n}\n","/***\n * Hijri parser\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var HijriParser;\n(function (HijriParser) {\n var dateCorrection = [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990,\n 29019, 29049, 29078, 29108, 29137, 29167, 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522,\n 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759, 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053,\n 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348, 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585,\n 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939, 30968, 30998, 31027, 31057, 31086, 31116,\n 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530, 31559, 31589, 31618, 31648,\n 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120, 32150, 32180,\n 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711,\n 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243,\n 33272, 33302, 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775,\n 33804, 33834, 33863, 33893, 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306,\n 34336, 34365, 34395, 34424, 34454, 34483, 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837,\n 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074, 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370,\n 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665, 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901,\n 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254, 36284, 36314, 36343, 36373, 36403, 36433,\n 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845, 36875, 36904, 36934, 36963,\n 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436, 37465, 37495,\n 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027,\n 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558,\n 38587, 38617, 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089,\n 39118, 39148, 39178, 39208, 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621,\n 39650, 39680, 39709, 39739, 39768, 39798, 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153,\n 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389, 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685,\n 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980, 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216,\n 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570, 41599, 41629, 41658, 41688, 41718, 41748,\n 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161, 42190, 42220, 42249, 42279,\n 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751, 42780, 42810,\n 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342,\n 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873,\n 43903, 43932, 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405,\n 44434, 44464, 44493, 44523, 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936,\n 44966, 44996, 45025, 45055, 45084, 45114, 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468,\n 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704, 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999,\n 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295, 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531,\n 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885, 46915, 46944, 46974, 47003, 47033, 47063,\n 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476, 47506, 47535, 47565, 47594,\n 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066, 48096, 48125,\n 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657,\n 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189,\n 49218, 49248, 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720,\n 49749, 49779, 49809, 49838, 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252,\n 50281, 50311, 50340, 50370, 50400, 50429, 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784,\n 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019, 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315,\n 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611, 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846,\n 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200, 52230, 52260, 52290, 52319, 52349, 52379,\n 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792, 52822, 52851, 52881, 52910,\n 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383, 53412, 53441,\n 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973,\n 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505,\n 54535, 54564, 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036,\n 55066, 55095, 55125, 55154, 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567,\n 55597, 55627, 55657, 55686, 55716, 55745, 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100,\n 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335, 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631,\n 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926, 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162,\n 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517, 57546, 57576, 57605, 57634, 57664, 57694,\n 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107, 58137, 58167, 58196, 58226,\n 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698, 58727, 58757,\n 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288,\n 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820,\n 59850, 59879, 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352,\n 60381, 60411, 60440, 60469, 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883,\n 60912, 60942, 60972, 61002, 61031, 61061, 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415,\n 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651, 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947,\n 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242, 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478,\n 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832, 62862, 62891, 62921, 62950, 62980, 63009,\n 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423, 63453, 63482, 63512, 63541,\n 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014, 64043, 64073,\n 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603,\n 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136,\n 65166, 65195, 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667,\n 65697, 65726, 65755, 65785, 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199,\n 66228, 66258, 66287, 66317, 66346, 66376, 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730,\n 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967, 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262,\n 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557, 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793,\n 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148, 68177, 68207, 68236, 68266, 68295, 68325,\n 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738, 68768, 68797, 68827, 68857,\n 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330, 69359, 69388,\n 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919,\n 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451,\n 70481, 70510, 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983,\n 71013, 71042, 71071, 71101, 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514,\n 71543, 71573, 71602, 71632, 71662, 71691, 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046,\n 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282, 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577,\n 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872, 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109,\n 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464, 73493, 73523, 73552, 73581, 73611, 73640,\n 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053, 74083, 74113, 74142, 74172,\n 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645, 74675, 74704,\n 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235,\n 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766,\n 75796, 75826, 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299,\n 76328, 76358, 76387, 76416, 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830,\n 76859, 76889, 76918, 76948, 76977, 77007, 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361,\n 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598, 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893,\n 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188, 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425,\n 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779, 78808, 78838, 78867, 78897, 78926, 78956,\n 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369, 79399, 79428, 79458, 79487,\n 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960, 79990\n ];\n /**\n *\n * @param {Date} gDate ?\n * @returns {Object} ?\n */\n function getHijriDate(gDate) {\n var day = gDate.getDate();\n var month = gDate.getMonth();\n var year = gDate.getFullYear();\n var tMonth = month + 1;\n var tYear = year;\n if (tMonth < 3) {\n tYear -= 1;\n tMonth += 12;\n }\n var yPrefix = Math.floor(tYear / 100);\n var julilanOffset = yPrefix - Math.floor(yPrefix / 4.) - 2;\n var julianNumber = Math.floor(365.25 * (tYear + 4716)) + Math.floor(30.6001 * (tMonth + 1)) + day - julilanOffset - 1524;\n yPrefix = Math.floor((julianNumber - 1867216.25) / 36524.25);\n julilanOffset = yPrefix - Math.floor(yPrefix / 4.) + 1;\n var b = julianNumber + julilanOffset + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var tempMonth = Math.floor((b - d) / 30.6001);\n day = (b - d) - Math.floor(30.6001 * tempMonth);\n month = Math.floor((b - d) / 20.6001);\n if (month > 13) {\n c += 1;\n month -= 12;\n }\n month -= 1;\n year = c - 4716;\n var modifiedJulianDate = julianNumber - 2400000;\n // date calculation for year after 2077\n var iyear = 10631 / 30;\n var z = julianNumber - 1948084;\n var cyc = Math.floor(z / 10631.);\n z = z - 10631 * cyc;\n var j = Math.floor((z - 0.1335) / iyear);\n var iy = 30 * cyc + j;\n z = z - Math.floor(j * iyear + 0.1335);\n var im = Math.floor((z + 28.5001) / 29.5);\n /* istanbul ignore next */\n if (im === 13) {\n im = 12;\n }\n var tempDay = z - Math.floor(29.5001 * im - 29);\n var i = 0;\n for (; i < dateCorrection.length; i++) {\n if (dateCorrection[parseInt(i.toString(), 10)] > modifiedJulianDate) {\n break;\n }\n }\n var iln = i + 16260;\n var ii = Math.floor((iln - 1) / 12);\n var hYear = ii + 1;\n var hmonth = iln - 12 * ii;\n var hDate = modifiedJulianDate - dateCorrection[i - 1] + 1;\n if ((hDate + '').length > 2) {\n hDate = tempDay;\n hmonth = im;\n hYear = iy;\n }\n return { year: hYear, month: hmonth, date: hDate };\n }\n HijriParser.getHijriDate = getHijriDate;\n /**\n *\n * @param {number} year ?\n * @param {number} month ?\n * @param {number} day ?\n * @returns {Date} ?\n */\n function toGregorian(year, month, day) {\n var iy = year;\n var im = month;\n var id = day;\n var ii = iy - 1;\n var iln = (ii * 12) + 1 + (im - 1);\n var i = iln - 16260;\n var mcjdn = id + dateCorrection[i - 1] - 1;\n var julianDate = mcjdn + 2400000;\n var z = Math.floor(julianDate + 0.5);\n var a = Math.floor((z - 1867216.25) / 36524.25);\n a = z + 1 + a - Math.floor(a / 4);\n var b = a + 1524;\n var c = Math.floor((b - 122.1) / 365.25);\n var d = Math.floor(365.25 * c);\n var e = Math.floor((b - d) / 30.6001);\n var gDay = b - d - Math.floor(e * 30.6001);\n var gMonth = e - (e > 13.5 ? 13 : 1);\n var gYear = c - (gMonth > 2.5 ? 4716 : 4715);\n /* istanbul ignore next */\n if (gYear <= 0) {\n gMonth--;\n } // No year zero\n return new Date(gYear + '/' + (gMonth) + '/' + gDay);\n }\n HijriParser.toGregorian = toGregorian;\n})(HijriParser || (HijriParser = {}));\n","import { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nimport { isUndefined, throwError, getValue, isBlazor } from '../util';\nimport { HijriParser } from '../hijri-parser';\nimport { isNullOrUndefined, extend } from '../util';\nvar abbreviateRegexGlobal = /\\/MMMMM|MMMM|MMM|a|LLLL|LLL|EEEEE|EEEE|E|K|cccc|ccc|WW|W|G+|z+/gi;\nvar standalone = 'stand-alone';\nvar weekdayKey = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nexport var basicPatterns = ['short', 'medium', 'long', 'full'];\nvar timeSetter = {\n m: 'getMinutes',\n h: 'getHours',\n H: 'getHours',\n s: 'getSeconds',\n d: 'getDate',\n f: 'getMilliseconds'\n};\nexport var datePartMatcher = {\n 'M': 'month',\n 'd': 'day',\n 'E': 'weekday',\n 'c': 'weekday',\n 'y': 'year',\n 'm': 'minute',\n 'h': 'hour',\n 'H': 'hour',\n 's': 'second',\n 'L': 'month',\n 'a': 'designator',\n 'z': 'timeZone',\n 'Z': 'timeZone',\n 'G': 'era',\n 'f': 'milliseconds'\n};\nvar timeSeparator = 'timeSeparator';\n/**\n * Date Format is a framework provides support for date formatting.\n *\n * @private\n */\nvar DateFormat = /** @class */ (function () {\n function DateFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which date will format.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n DateFormat.dateFormat = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numObject = getValue('parserObject.numbers', dependable);\n var dateObject = dependable.dateObject;\n var formatOptions = { isIslamic: base.islamicRegex.test(option.calendar) };\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n formatOptions.dateSeperator = isBlazor() ? getValue('dateSeperator', dateObject) : base.getDateSeparator(dependable.dateObject);\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n if (isBlazor()) {\n resPattern = resPattern.replace(/tt/, 'a');\n }\n formatOptions.pattern = resPattern;\n formatOptions.numMapper = isBlazor() ?\n extend({}, numObject) : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n var patternMatch = resPattern.match(abbreviateRegexGlobal) || [];\n for (var _i = 0, patternMatch_1 = patternMatch; _i < patternMatch_1.length; _i++) {\n var str = patternMatch_1[_i];\n var len = str.length;\n var char = str[0];\n if (char === 'K') {\n char = 'h';\n }\n switch (char) {\n case 'E':\n case 'c':\n if (isBlazor()) {\n formatOptions.weekday = getValue('days.' + base.monthIndex[\"\" + len], dateObject);\n }\n else {\n formatOptions.weekday = dependable.dateObject[\"\" + base.days][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n break;\n case 'M':\n case 'L':\n if (isBlazor()) {\n formatOptions.month = getValue('months.' + base.monthIndex[\"\" + len], dateObject);\n }\n else {\n formatOptions.month = dependable.dateObject[\"\" + base.month][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n break;\n case 'a':\n formatOptions.designator = isBlazor() ?\n getValue('dayPeriods', dateObject) : getValue('dayPeriods.format.wide', dateObject);\n break;\n case 'G': {\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n formatOptions.era = isBlazor() ? getValue('eras', dateObject) : getValue('eras.' + eText, dependable.dateObject);\n break;\n }\n case 'z':\n formatOptions.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n break;\n }\n }\n }\n return function (value) {\n if (isNaN(value.getDate())) {\n return null;\n }\n return _this.intDateFormatter(value, formatOptions);\n };\n };\n /**\n * Returns formatted date string based on options passed.\n *\n * @param {Date} value ?\n * @param {FormatOptions} options ?\n * @returns {string} ?\n */\n DateFormat.intDateFormatter = function (value, options) {\n var pattern = options.pattern;\n var ret = '';\n var matches = pattern.match(base.dateParseRegex);\n var dObject = this.getCurrentDateValue(value, options.isIslamic);\n for (var _i = 0, matches_1 = matches; _i < matches_1.length; _i++) {\n var match = matches_1[_i];\n var length_1 = match.length;\n var char = match[0];\n if (char === 'K') {\n char = 'h';\n }\n var curval = void 0;\n var curvalstr = '';\n var isNumber = void 0;\n var processNumber = void 0;\n var curstr = '';\n switch (char) {\n case 'M':\n case 'L':\n curval = dObject.month;\n if (length_1 > 2) {\n ret += options.month[\"\" + curval];\n }\n else {\n isNumber = true;\n }\n break;\n case 'E':\n case 'c':\n ret += options.weekday[\"\" + weekdayKey[value.getDay()]];\n break;\n case 'H':\n case 'h':\n case 'm':\n case 's':\n case 'd':\n case 'f':\n isNumber = true;\n if (char === 'd') {\n curval = dObject.date;\n }\n else if (char === 'f') {\n isNumber = false;\n processNumber = true;\n curvalstr = value[\"\" + timeSetter[\"\" + char]]().toString();\n curvalstr = curvalstr.substring(0, length_1);\n var curlength = curvalstr.length;\n if (length_1 !== curlength) {\n if (length_1 > 3) {\n continue;\n }\n for (var i = 0; i < length_1 - curlength; i++) {\n curvalstr = '0' + curvalstr.toString();\n }\n }\n curstr += curvalstr;\n }\n else {\n curval = value[\"\" + timeSetter[\"\" + char]]();\n }\n if (char === 'h') {\n curval = curval % 12 || 12;\n }\n break;\n case 'y':\n processNumber = true;\n curstr += dObject.year;\n if (length_1 === 2) {\n curstr = curstr.substr(curstr.length - 2);\n }\n break;\n case 'a': {\n var desig = value.getHours() < 12 ? 'am' : 'pm';\n ret += options.designator[\"\" + desig];\n break;\n }\n case 'G': {\n var dec = value.getFullYear() < 0 ? 0 : 1;\n var retu = options.era[\"\" + dec];\n if (isNullOrUndefined(retu)) {\n retu = options.era[dec ? 0 : 1];\n }\n ret += retu || '';\n break;\n }\n case '\\'':\n ret += (match === '\\'\\'') ? '\\'' : match.replace(/'/g, '');\n break;\n case 'z': {\n var timezone = value.getTimezoneOffset();\n var pattern_1 = (length_1 < 4) ? '+H;-H' : options.timeZone.hourFormat;\n pattern_1 = pattern_1.replace(/:/g, options.numMapper.timeSeparator);\n if (timezone === 0) {\n ret += options.timeZone.gmtZeroFormat;\n }\n else {\n processNumber = true;\n curstr = this.getTimeZoneValue(timezone, pattern_1);\n }\n curstr = options.timeZone.gmtFormat.replace(/\\{0\\}/, curstr);\n break;\n }\n case ':':\n ret += options.numMapper.numberSymbols[\"\" + timeSeparator];\n break;\n case '/':\n ret += options.dateSeperator;\n break;\n case 'W':\n isNumber = true;\n curval = base.getWeekOfYear(value);\n break;\n default:\n ret += match;\n }\n if (isNumber) {\n processNumber = true;\n curstr = this.checkTwodigitNumber(curval, length_1);\n }\n if (processNumber) {\n ret += parser.convertValueParts(curstr, base.latnParseRegex, options.numMapper.mapper);\n }\n }\n return ret;\n };\n DateFormat.getCurrentDateValue = function (value, isIslamic) {\n if (isIslamic) {\n return HijriParser.getHijriDate(value);\n }\n return { year: value.getFullYear(), month: value.getMonth() + 1, date: value.getDate() };\n };\n /**\n * Returns two digit numbers for given value and length\n *\n * @param {number} val ?\n * @param {number} len ?\n * @returns {string} ?\n */\n DateFormat.checkTwodigitNumber = function (val, len) {\n var ret = val + '';\n if (len === 2 && ret.length !== 2) {\n return '0' + ret;\n }\n return ret;\n };\n /**\n * Returns the value of the Time Zone.\n *\n * @param {number} tVal ?\n * @param {string} pattern ?\n * @returns {string} ?\n * @private\n */\n DateFormat.getTimeZoneValue = function (tVal, pattern) {\n var _this = this;\n var splt = pattern.split(';');\n var curPattern = splt[tVal > 0 ? 1 : 0];\n var no = Math.abs(tVal);\n return curPattern = curPattern.replace(/HH?|mm/g, function (str) {\n var len = str.length;\n var ishour = str.indexOf('H') !== -1;\n return _this.checkTwodigitNumber(Math.floor(ishour ? (no / 60) : (no % 60)), len);\n });\n };\n return DateFormat;\n}());\nexport { DateFormat };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isUndefined, throwError, isNullOrUndefined, extend, isBlazor, getValue } from '../util';\nimport { defaultCurrencyCode } from '../internationalization';\nimport { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nvar errorText = {\n 'ms': 'minimumSignificantDigits',\n 'ls': 'maximumSignificantDigits',\n 'mf': 'minimumFractionDigits',\n 'lf': 'maximumFractionDigits'\n};\nvar percentSign = 'percentSign';\nvar minusSign = 'minusSign';\nvar mapper = ['infinity', 'nan', 'group', 'decimal', 'exponential'];\n/**\n * Module for number formatting.\n *\n * @private\n */\nvar NumberFormat = /** @class */ (function () {\n function NumberFormat() {\n }\n /**\n * Returns the formatter function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will format.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n NumberFormat.numberFormatter = function (culture, option, cldr) {\n var _this = this;\n var fOptions = extend({}, option);\n var cOptions = {};\n var dOptions = {};\n var symbolPattern;\n var dependable = base.getDependables(cldr, culture, '', true);\n var numObject = dependable.numericObject;\n dOptions.numberMapper = isBlazor() ? extend({}, numObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n dOptions.currencySymbol = isBlazor() ? getValue('currencySymbol', numObject) : base.getCurrencySymbol(dependable.numericObject, fOptions.currency || defaultCurrencyCode, option.altSymbol);\n dOptions.percentSymbol = isBlazor() ? getValue('numberSymbols.percentSign', numObject) :\n dOptions.numberMapper.numberSymbols[\"\" + percentSign];\n dOptions.minusSymbol = isBlazor() ? getValue('numberSymbols.minusSign', numObject) :\n dOptions.numberMapper.numberSymbols[\"\" + minusSign];\n var symbols = dOptions.numberMapper.numberSymbols;\n if ((option.format) && !(base.formatRegex.test(option.format))) {\n cOptions = base.customFormat(option.format, dOptions, dependable.numericObject);\n if (!isUndefined(fOptions.useGrouping) && fOptions.useGrouping) {\n fOptions.useGrouping = cOptions.pData.useGrouping;\n }\n }\n else {\n extend(fOptions, base.getProperNumericSkeleton(option.format || 'N'));\n fOptions.isCurrency = fOptions.type === 'currency';\n fOptions.isPercent = fOptions.type === 'percent';\n if (!isBlazor()) {\n symbolPattern = base.getSymbolPattern(fOptions.type, dOptions.numberMapper.numberSystem, dependable.numericObject, fOptions.isAccount);\n }\n fOptions.groupOne = this.checkValueRange(fOptions.maximumSignificantDigits, fOptions.minimumSignificantDigits, true);\n this.checkValueRange(fOptions.maximumFractionDigits, fOptions.minimumFractionDigits, false, true);\n if (!isUndefined(fOptions.fractionDigits)) {\n fOptions.minimumFractionDigits = fOptions.maximumFractionDigits = fOptions.fractionDigits;\n }\n if (isUndefined(fOptions.useGrouping)) {\n fOptions.useGrouping = true;\n }\n if (fOptions.isCurrency && !isBlazor()) {\n symbolPattern = symbolPattern.replace(/\\u00A4/g, base.defaultCurrency);\n }\n if (!isBlazor()) {\n var split = symbolPattern.split(';');\n cOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, dOptions.currencySymbol);\n cOptions.pData = base.getFormatData(split[0], false, dOptions.currencySymbol);\n if (fOptions.useGrouping) {\n fOptions.groupSeparator = symbols[mapper[2]];\n fOptions.groupData = this.getGroupingDetails(split[0]);\n }\n }\n else {\n cOptions.nData = extend({}, {}, getValue(fOptions.type + 'nData', numObject));\n cOptions.pData = extend({}, {}, getValue(fOptions.type + 'pData', numObject));\n if (fOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([cOptions.pData, cOptions.nData], dOptions.currencySymbol, option.currency);\n }\n }\n var minFrac = isUndefined(fOptions.minimumFractionDigits);\n if (minFrac) {\n fOptions.minimumFractionDigits = cOptions.nData.minimumFraction;\n }\n if (isUndefined(fOptions.maximumFractionDigits)) {\n var mval = cOptions.nData.maximumFraction;\n fOptions.maximumFractionDigits = isUndefined(mval) && fOptions.isPercent ? 0 : mval;\n }\n var mfrac = fOptions.minimumFractionDigits;\n var lfrac = fOptions.maximumFractionDigits;\n if (!isUndefined(mfrac) && !isUndefined(lfrac)) {\n if (mfrac > lfrac) {\n fOptions.maximumFractionDigits = mfrac;\n }\n }\n }\n extend(cOptions.nData, fOptions);\n extend(cOptions.pData, fOptions);\n return function (value) {\n if (isNaN(value)) {\n return symbols[mapper[1]];\n }\n else if (!isFinite(value)) {\n return symbols[mapper[0]];\n }\n return _this.intNumberFormatter(value, cOptions, dOptions, option);\n };\n };\n /**\n * Returns grouping details for the pattern provided\n *\n * @param {string} pattern ?\n * @returns {GroupDetails} ?\n */\n NumberFormat.getGroupingDetails = function (pattern) {\n var ret = {};\n var match = pattern.match(base.negativeDataRegex);\n if (match && match[4]) {\n var pattern_1 = match[4];\n var p = pattern_1.lastIndexOf(',');\n if (p !== -1) {\n var temp = pattern_1.split('.')[0];\n ret.primary = (temp.length - p) - 1;\n var s = pattern_1.lastIndexOf(',', p - 1);\n if (s !== -1) {\n ret.secondary = p - 1 - s;\n }\n }\n }\n return ret;\n };\n /**\n * Returns if the provided integer range is valid.\n *\n * @param {number} val1 ?\n * @param {number} val2 ?\n * @param {boolean} checkbothExist ?\n * @param {boolean} isFraction ?\n * @returns {boolean} ?\n */\n NumberFormat.checkValueRange = function (val1, val2, checkbothExist, isFraction) {\n var decide = isFraction ? 'f' : 's';\n var dint = 0;\n var str1 = errorText['l' + decide];\n var str2 = errorText['m' + decide];\n if (!isUndefined(val1)) {\n this.checkRange(val1, str1, isFraction);\n dint++;\n }\n if (!isUndefined(val2)) {\n this.checkRange(val2, str2, isFraction);\n dint++;\n }\n if (dint === 2) {\n if (val1 < val2) {\n throwError(str2 + 'specified must be less than the' + str1);\n }\n else {\n return true;\n }\n }\n else if (checkbothExist && dint === 1) {\n throwError('Both' + str2 + 'and' + str2 + 'must be present');\n }\n return false;\n };\n /**\n * Check if the provided fraction range is valid\n *\n * @param {number} val ?\n * @param {string} text ?\n * @param {boolean} isFraction ?\n * @returns {void} ?\n */\n NumberFormat.checkRange = function (val, text, isFraction) {\n var range = isFraction ? [0, 20] : [1, 21];\n if (val < range[0] || val > range[1]) {\n throwError(text + 'value must be within the range' + range[0] + 'to' + range[1]);\n }\n };\n /**\n * Returns formatted numeric string for provided formatting options\n *\n * @param {number} value ?\n * @param {base.GenericFormatOptions} fOptions ?\n * @param {CommonOptions} dOptions ?\n * @param {NumberFormatOptions} [option] ?\n * @returns {string} ?\n */\n NumberFormat.intNumberFormatter = function (value, fOptions, dOptions, option) {\n var curData;\n if (isUndefined(fOptions.nData.type)) {\n return undefined;\n }\n else {\n if (value < 0) {\n value = value * -1;\n curData = fOptions.nData;\n }\n else if (value === 0) {\n curData = fOptions.zeroData || fOptions.pData;\n }\n else {\n curData = fOptions.pData;\n }\n var fValue = '';\n if (curData.isPercent) {\n value = value * 100;\n }\n if (curData.groupOne) {\n fValue = this.processSignificantDigits(value, curData.minimumSignificantDigits, curData.maximumSignificantDigits);\n }\n else {\n fValue = this.processFraction(value, curData.minimumFractionDigits, curData.maximumFractionDigits, option);\n if (curData.minimumIntegerDigits) {\n fValue = this.processMinimumIntegers(fValue, curData.minimumIntegerDigits);\n }\n if (dOptions.isCustomFormat && curData.minimumFractionDigits < curData.maximumFractionDigits\n && /\\d+\\.\\d+/.test(fValue)) {\n var temp = fValue.split('.');\n var decimalPart = temp[1];\n var len = decimalPart.length;\n for (var i = len - 1; i >= 0; i--) {\n if (decimalPart[parseInt(i.toString(), 10)] === '0' && i >= curData.minimumFractionDigits) {\n decimalPart = decimalPart.slice(0, i);\n }\n else {\n break;\n }\n }\n fValue = temp[0] + '.' + decimalPart;\n }\n }\n if (curData.type === 'scientific') {\n fValue = value.toExponential(curData.maximumFractionDigits);\n fValue = fValue.replace('e', dOptions.numberMapper.numberSymbols[mapper[4]]);\n }\n fValue = fValue.replace('.', dOptions.numberMapper.numberSymbols[mapper[3]]);\n fValue = curData.format === '#,###,,;(#,###,,)' ? this.customPivotFormat(parseInt(fValue, 10)) : fValue;\n if (curData.useGrouping) {\n fValue = this.groupNumbers(fValue, curData.groupData.primary, curData.groupSeparator || ',', dOptions.numberMapper.numberSymbols[mapper[3]] || '.', curData.groupData.secondary);\n }\n fValue = parser.convertValueParts(fValue, base.latnParseRegex, dOptions.numberMapper.mapper);\n if (curData.nlead === 'N/A') {\n return curData.nlead;\n }\n else {\n if (fValue === '0' && option && option.format === '0') {\n return fValue + curData.nend;\n }\n return curData.nlead + fValue + curData.nend;\n }\n }\n };\n /**\n * Returns significant digits processed numeric string\n *\n * @param {number} value ?\n * @param {number} min ?\n * @param {number} max ?\n * @returns {string} ?\n */\n NumberFormat.processSignificantDigits = function (value, min, max) {\n var temp = value + '';\n var tn;\n var length = temp.length;\n if (length < min) {\n return value.toPrecision(min);\n }\n else {\n temp = value.toPrecision(max);\n tn = +temp;\n return tn + '';\n }\n };\n /**\n * Returns grouped numeric string\n *\n * @param {string} val ?\n * @param {number} level1 ?\n * @param {string} sep ?\n * @param {string} decimalSymbol ?\n * @param {number} level2 ?\n * @returns {string} ?\n */\n NumberFormat.groupNumbers = function (val, level1, sep, decimalSymbol, level2) {\n var flag = !isNullOrUndefined(level2) && level2 !== 0;\n var split = val.split(decimalSymbol);\n var prefix = split[0];\n var length = prefix.length;\n var str = '';\n while (length > level1) {\n str = prefix.slice(length - level1, length) + (str.length ?\n (sep + str) : '');\n length -= level1;\n if (flag) {\n level1 = level2;\n flag = false;\n }\n }\n split[0] = prefix.slice(0, length) + (str.length ? sep : '') + str;\n return split.join(decimalSymbol);\n };\n /**\n * Returns fraction processed numeric string\n *\n * @param {number} value ?\n * @param {number} min ?\n * @param {number} max ?\n * @param {NumberFormatOptions} [option] ?\n * @returns {string} ?\n */\n NumberFormat.processFraction = function (value, min, max, option) {\n var temp = (value + '').split('.')[1];\n var length = temp ? temp.length : 0;\n if (min && length < min) {\n var ret = '';\n if (length === 0) {\n ret = value.toFixed(min);\n }\n else {\n ret += value;\n for (var j = 0; j < min - length; j++) {\n ret += '0';\n }\n return ret;\n }\n return value.toFixed(min);\n }\n else if (!isNullOrUndefined(max) && (length > max || max === 0)) {\n return value.toFixed(max);\n }\n var str = value + '';\n if (str[0] === '0' && option && option.format === '###.00') {\n str = str.slice(1);\n }\n return str;\n };\n /**\n * Returns integer processed numeric string\n *\n * @param {string} value ?\n * @param {number} min ?\n * @returns {string} ?\n */\n NumberFormat.processMinimumIntegers = function (value, min) {\n var temp = value.split('.');\n var lead = temp[0];\n var len = lead.length;\n if (len < min) {\n for (var i = 0; i < min - len; i++) {\n lead = '0' + lead;\n }\n temp[0] = lead;\n }\n return temp.join('.');\n };\n /**\n * Returns custom format for pivot table\n *\n * @param {number} value ?\n * @returns {string} ?\n */\n NumberFormat.customPivotFormat = function (value) {\n if (value >= 500000) {\n value /= 1000000;\n var _a = value.toString().split('.'), integer = _a[0], decimal = _a[1];\n return decimal && +decimal.substring(0, 1) >= 5\n ? Math.ceil(value).toString()\n : Math.floor(value).toString();\n }\n return '';\n };\n return NumberFormat;\n}());\nexport { NumberFormat };\n","import { IntlBase as base } from './intl-base';\nimport { ParserBase as parser } from './parser-base';\nimport { isUndefined, throwError, getValue, isNullOrUndefined, isBlazor } from '../util';\nimport { datePartMatcher } from './date-formatter';\nimport { HijriParser } from '../hijri-parser';\nvar standalone = 'stand-alone';\nvar latnRegex = /^[0-9]*$/;\nvar timeSetter = {\n minute: 'setMinutes',\n hour: 'setHours',\n second: 'setSeconds',\n day: 'setDate',\n month: 'setMonth',\n milliseconds: 'setMilliseconds'\n};\nvar month = 'months';\n/**\n * Date Parser.\n *\n * @private\n */\nvar DateParser = /** @class */ (function () {\n function DateParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {DateFormatOptions} option - Specific the format in which string date will be parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n DateParser.dateParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, option.calendar);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), false, isBlazor());\n var parseOptions = {};\n if (isBlazor() && option.isServerRendered) {\n option = base.compareBlazorDateFormats(option, culture);\n }\n var resPattern = option.format ||\n base.getResultantPattern(option.skeleton, dependable.dateObject, option.type, false, isBlazor() ? culture : '');\n var regexString = '';\n var hourOnly;\n if (isUndefined(resPattern)) {\n throwError('Format options or type given must be invalid');\n }\n else {\n resPattern = base.ConvertDateToWeekFormat(resPattern);\n parseOptions = { isIslamic: base.islamicRegex.test(option.calendar), pattern: resPattern, evalposition: {}, culture: culture };\n var patternMatch = resPattern.match(base.dateParseRegex) || [];\n var length_1 = patternMatch.length;\n var gmtCorrection = 0;\n var zCorrectTemp = 0;\n var isgmtTraversed = false;\n var nRegx = numOptions.numericRegex;\n var numMapper = isBlazor() ? dependable.parserObject.numbers\n : parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n for (var i = 0; i < length_1; i++) {\n var str = patternMatch[parseInt(i.toString(), 10)];\n var len = str.length;\n var char = (str[0] === 'K') ? 'h' : str[0];\n var isNumber = void 0;\n var canUpdate = void 0;\n var charKey = datePartMatcher[\"\" + char];\n var optional = (len === 2) ? '' : '?';\n if (isgmtTraversed) {\n gmtCorrection = zCorrectTemp;\n isgmtTraversed = false;\n }\n switch (char) {\n case 'E':\n case 'c': {\n var weekData = void 0;\n if (isBlazor()) {\n weekData = getValue('days.' + base.monthIndex[\"\" + len], dependable.dateObject);\n }\n else {\n weekData = dependable.dateObject[\"\" + base.days][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n var weekObject = parser.reverseObject(weekData);\n regexString += '(' + Object.keys(weekObject).join('|') + ')';\n break;\n }\n case 'M':\n case 'L':\n case 'd':\n case 'm':\n case 's':\n case 'h':\n case 'H':\n case 'f':\n canUpdate = true;\n if ((char === 'M' || char === 'L') && len > 2) {\n var monthData = void 0;\n if (isBlazor()) {\n monthData = getValue('months.' + base.monthIndex[\"\" + len], dependable.dateObject);\n }\n else {\n monthData = dependable.dateObject[\"\" + month][\"\" + standalone][base.monthIndex[\"\" + len]];\n }\n parseOptions[\"\" + charKey] = parser.reverseObject(monthData);\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + ')';\n }\n else if (char === 'f') {\n if (len > 3) {\n continue;\n }\n isNumber = true;\n regexString += '(' + nRegx + nRegx + '?' + nRegx + '?' + ')';\n }\n else {\n isNumber = true;\n regexString += '(' + nRegx + nRegx + optional + ')';\n }\n if (char === 'h') {\n parseOptions.hour12 = true;\n }\n break;\n case 'W': {\n var opt = len === 1 ? '?' : '';\n regexString += '(' + nRegx + opt + nRegx + ')';\n break;\n }\n case 'y':\n canUpdate = isNumber = true;\n if (len === 2) {\n regexString += '(' + nRegx + nRegx + ')';\n }\n else {\n regexString += '(' + nRegx + '{' + len + ',})';\n }\n break;\n case 'a': {\n canUpdate = true;\n var periodValur = isBlazor() ?\n getValue('dayPeriods', dependable.dateObject) :\n getValue('dayPeriods.format.wide', dependable.dateObject);\n parseOptions[\"\" + charKey] = parser.reverseObject(periodValur);\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + ')';\n break;\n }\n case 'G': {\n canUpdate = true;\n var eText = (len <= 3) ? 'eraAbbr' : (len === 4) ? 'eraNames' : 'eraNarrow';\n parseOptions[\"\" + charKey] = parser.reverseObject(isBlazor() ?\n getValue('eras', dependable.dateObject) : getValue('eras.' + eText, dependable.dateObject));\n regexString += '(' + Object.keys(parseOptions[\"\" + charKey]).join('|') + '?)';\n break;\n }\n case 'z': {\n var tval = new Date().getTimezoneOffset();\n canUpdate = (tval !== 0);\n parseOptions[\"\" + charKey] = getValue('dates.timeZoneNames', dependable.parserObject);\n var tzone = parseOptions[\"\" + charKey];\n hourOnly = (len < 4);\n var hpattern = hourOnly ? '+H;-H' : tzone.hourFormat;\n hpattern = hpattern.replace(/:/g, numMapper.timeSeparator);\n regexString += '(' + this.parseTimeZoneRegx(hpattern, tzone, nRegx) + ')?';\n isgmtTraversed = true;\n zCorrectTemp = hourOnly ? 6 : 12;\n break;\n }\n case '\\'': {\n var iString = str.replace(/'/g, '');\n regexString += '(' + iString + ')?';\n break;\n }\n default:\n regexString += '([\\\\D])';\n break;\n }\n if (canUpdate) {\n parseOptions.evalposition[\"\" + charKey] = { isNumber: isNumber, pos: i + 1 + gmtCorrection, hourOnly: hourOnly };\n }\n if (i === length_1 - 1 && !isNullOrUndefined(regexString)) {\n var regExp = RegExp;\n parseOptions.parserRegex = new regExp('^' + regexString + '$', 'i');\n }\n }\n }\n return function (value) {\n var parsedDateParts = _this.internalDateParse(value, parseOptions, numOptions);\n if (isNullOrUndefined(parsedDateParts) || !Object.keys(parsedDateParts).length) {\n return null;\n }\n if (parseOptions.isIslamic) {\n var dobj = {};\n var tYear = parsedDateParts.year;\n var tDate = parsedDateParts.day;\n var tMonth = parsedDateParts.month;\n var ystrig = tYear ? (tYear + '') : '';\n var is2DigitYear = (ystrig.length === 2);\n if (!tYear || !tMonth || !tDate || is2DigitYear) {\n dobj = HijriParser.getHijriDate(new Date());\n }\n if (is2DigitYear) {\n tYear = parseInt((dobj.year + '').slice(0, 2) + ystrig, 10);\n }\n var dateObject = HijriParser.toGregorian(tYear || dobj.year, tMonth || dobj.month, tDate || dobj.date);\n parsedDateParts.year = dateObject.getFullYear();\n parsedDateParts.month = dateObject.getMonth() + 1;\n parsedDateParts.day = dateObject.getDate();\n }\n return _this.getDateObject(parsedDateParts);\n };\n };\n /**\n * Returns date object for provided date options\n *\n * @param {DateParts} options ?\n * @param {Date} value ?\n * @returns {Date} ?\n */\n DateParser.getDateObject = function (options, value) {\n var res = value || new Date();\n res.setMilliseconds(0);\n var tKeys = ['hour', 'minute', 'second', 'milliseconds', 'month', 'day'];\n var y = options.year;\n var desig = options.designator;\n var tzone = options.timeZone;\n if (!isUndefined(y)) {\n var len = (y + '').length;\n if (len <= 2) {\n var century = Math.floor(res.getFullYear() / 100) * 100;\n y += century;\n }\n res.setFullYear(y);\n }\n for (var _i = 0, tKeys_1 = tKeys; _i < tKeys_1.length; _i++) {\n var key = tKeys_1[_i];\n var tValue = options[\"\" + key];\n if (isUndefined(tValue) && key === 'day') {\n res.setDate(1);\n }\n if (!isUndefined(tValue)) {\n if (key === 'month') {\n tValue -= 1;\n if (tValue < 0 || tValue > 11) {\n return new Date('invalid');\n }\n var pDate = res.getDate();\n res.setDate(1);\n res[timeSetter[\"\" + key]](tValue);\n var lDate = new Date(res.getFullYear(), tValue + 1, 0).getDate();\n res.setDate(pDate < lDate ? pDate : lDate);\n }\n else {\n if (key === 'day') {\n var lastDay = new Date(res.getFullYear(), res.getMonth() + 1, 0).getDate();\n if ((tValue < 1 || tValue > lastDay)) {\n return null;\n }\n }\n res[\"\" + timeSetter[\"\" + key]](tValue);\n }\n }\n }\n if (!isUndefined(desig)) {\n var hour = res.getHours();\n if (desig === 'pm') {\n res.setHours(hour + (hour === 12 ? 0 : 12));\n }\n else if (hour === 12) {\n res.setHours(0);\n }\n }\n if (!isUndefined(tzone)) {\n var tzValue = tzone - res.getTimezoneOffset();\n if (tzValue !== 0) {\n res.setMinutes(res.getMinutes() + tzValue);\n }\n }\n return res;\n };\n /**\n * Returns date parsing options for provided value along with parse and numeric options\n *\n * @param {string} value ?\n * @param {ParseOptions} parseOptions ?\n * @param {NumericOptions} num ?\n * @returns {DateParts} ?\n */\n DateParser.internalDateParse = function (value, parseOptions, num) {\n var matches = value.match(parseOptions.parserRegex);\n var retOptions = { 'hour': 0, 'minute': 0, 'second': 0 };\n if (isNullOrUndefined(matches)) {\n return null;\n }\n else {\n var props = Object.keys(parseOptions.evalposition);\n for (var _i = 0, props_1 = props; _i < props_1.length; _i++) {\n var prop = props_1[_i];\n var curObject = parseOptions.evalposition[\"\" + prop];\n var matchString = matches[curObject.pos];\n if (curObject.isNumber) {\n retOptions[\"\" + prop] = this.internalNumberParser(matchString, num);\n }\n else {\n if (prop === 'timeZone' && !isUndefined(matchString)) {\n var pos = curObject.pos;\n var val = void 0;\n var tmatch = matches[pos + 1];\n var flag = !isUndefined(tmatch);\n if (curObject.hourOnly) {\n val = this.getZoneValue(flag, tmatch, matches[pos + 4], num) * 60;\n }\n else {\n val = this.getZoneValue(flag, tmatch, matches[pos + 7], num) * 60;\n val += this.getZoneValue(flag, matches[pos + 4], matches[pos + 10], num);\n }\n if (!isNullOrUndefined(val)) {\n retOptions[\"\" + prop] = val;\n }\n }\n else {\n var cultureOptions = ['en-US', 'en-MH', 'en-MP'];\n matchString = ((prop === 'month') && (!parseOptions.isIslamic) && (parseOptions.culture === 'en' || parseOptions.culture === 'en-GB' || parseOptions.culture === 'en-US'))\n ? matchString[0].toUpperCase() + matchString.substring(1).toLowerCase() : matchString;\n matchString = ((prop !== 'month') && (prop === 'designator') && parseOptions.culture && parseOptions.culture.indexOf('en-') !== -1 && cultureOptions.indexOf(parseOptions.culture) === -1)\n ? matchString.toLowerCase() : matchString;\n retOptions[\"\" + prop] = parseOptions[\"\" + prop][\"\" + matchString];\n }\n }\n }\n if (parseOptions.hour12) {\n retOptions.hour12 = true;\n }\n }\n return retOptions;\n };\n /**\n * Returns parsed number for provided Numeric string and Numeric Options\n *\n * @param {string} value ?\n * @param {NumericOptions} option ?\n * @returns {number} ?\n */\n DateParser.internalNumberParser = function (value, option) {\n value = parser.convertValueParts(value, option.numberParseRegex, option.numericPair);\n if (latnRegex.test(value)) {\n return +value;\n }\n return null;\n };\n /**\n * Returns parsed time zone RegExp for provided hour format and time zone\n *\n * @param {string} hourFormat ?\n * @param {base.TimeZoneOptions} tZone ?\n * @param {string} nRegex ?\n * @returns {string} ?\n */\n DateParser.parseTimeZoneRegx = function (hourFormat, tZone, nRegex) {\n var pattern = tZone.gmtFormat;\n var ret;\n var cRegex = '(' + nRegex + ')' + '(' + nRegex + ')';\n ret = hourFormat.replace('+', '\\\\+');\n if (hourFormat.indexOf('HH') !== -1) {\n ret = ret.replace(/HH|mm/g, '(' + cRegex + ')');\n }\n else {\n ret = ret.replace(/H|m/g, '(' + cRegex + '?)');\n }\n var splitStr = (ret.split(';').map(function (str) {\n return pattern.replace('{0}', str);\n }));\n ret = splitStr.join('|') + '|' + tZone.gmtZeroFormat;\n return ret;\n };\n /**\n * Returns zone based value.\n *\n * @param {boolean} flag ?\n * @param {string} val1 ?\n * @param {string} val2 ?\n * @param {NumericOptions} num ?\n * @returns {number} ?\n */\n DateParser.getZoneValue = function (flag, val1, val2, num) {\n var ival = flag ? val1 : val2;\n if (!ival) {\n return 0;\n }\n var value = this.internalNumberParser(ival, num);\n if (flag) {\n return -value;\n }\n return value;\n };\n return DateParser;\n}());\nexport { DateParser };\n","import { extend, isNullOrUndefined, isBlazor, getValue } from '../util';\nimport { ParserBase as parser } from './parser-base';\nimport { IntlBase as base } from './intl-base';\nvar regExp = RegExp;\nvar parseRegex = new regExp('^([^0-9]*)' + '(([0-9,]*[0-9]+)(.[0-9]+)?)' + '([Ee][+-]?[0-9]+)?([^0-9]*)$');\nvar groupRegex = /,/g;\nvar keys = ['minusSign', 'infinity'];\n/**\n * Module for Number Parser.\n *\n * @private\n */\nvar NumberParser = /** @class */ (function () {\n function NumberParser() {\n }\n /**\n * Returns the parser function for given skeleton.\n *\n * @param {string} culture - Specifies the culture name to be which formatting.\n * @param {NumberFormatOptions} option - Specific the format in which number will parsed.\n * @param {Object} cldr - Specifies the global cldr data collection.\n * @returns {Function} ?\n */\n NumberParser.numberParser = function (culture, option, cldr) {\n var _this = this;\n var dependable = base.getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n if ((base.formatRegex.test(option.format)) || !(option.format)) {\n extend(parseOptions, base.getProperNumericSkeleton(option.format || 'N'));\n parseOptions.custom = false;\n if (!parseOptions.fractionDigits) {\n if (option.maximumFractionDigits) {\n parseOptions.maximumFractionDigits = option.maximumFractionDigits;\n }\n }\n }\n else {\n extend(parseOptions, base.customFormat(option.format, null, null));\n }\n var numbers = getValue('numbers', dependable.parserObject);\n var numOptions = parser.getCurrentNumericOptions(dependable.parserObject, parser.getNumberingSystem(cldr), true, isBlazor());\n parseOptions.symbolRegex = parser.getSymbolRegex(Object.keys(numOptions.symbolMatch));\n parseOptions.infinity = numOptions.symbolNumberSystem[keys[1]];\n var symbolpattern;\n if (!isBlazor()) {\n symbolpattern = base.getSymbolPattern(parseOptions.type, numOptions.numberSystem, dependable.numericObject, parseOptions.isAccount);\n if (symbolpattern) {\n symbolpattern = symbolpattern.replace(/\\u00A4/g, base.defaultCurrency);\n var split = symbolpattern.split(';');\n parseOptions.nData = base.getFormatData(split[1] || '-' + split[0], true, '');\n parseOptions.pData = base.getFormatData(split[0], true, '');\n }\n }\n else {\n parseOptions.nData = extend({}, {}, getValue(parseOptions.type + 'nData', numbers));\n parseOptions.pData = extend({}, {}, getValue(parseOptions.type + 'pData', numbers));\n if (parseOptions.type === 'currency' && option.currency) {\n base.replaceBlazorCurrency([parseOptions.pData, parseOptions.nData], getValue('currencySymbol', numbers), option.currency);\n }\n }\n return function (value) {\n return _this.getParsedNumber(value, parseOptions, numOptions);\n };\n };\n /**\n * Returns parsed number for the provided formatting options\n *\n * @param {string} value ?\n * @param {NumericParts} options ?\n * @param {NumericOptions} numOptions ?\n * @returns {number} ?\n */\n NumberParser.getParsedNumber = function (value, options, numOptions) {\n var isNegative;\n var isPercent;\n var tempValue;\n var lead;\n var end;\n var ret;\n if (value.indexOf(options.infinity) !== -1) {\n return Infinity;\n }\n else {\n value = parser.convertValueParts(value, options.symbolRegex, numOptions.symbolMatch);\n value = parser.convertValueParts(value, numOptions.numberParseRegex, numOptions.numericPair);\n value = value.indexOf('-') !== -1 ? value.replace('-.', '-0.') : value;\n if (value.indexOf('.') === 0) {\n value = '0' + value;\n }\n var matches = value.match(parseRegex);\n if (isNullOrUndefined(matches)) {\n return NaN;\n }\n lead = matches[1];\n tempValue = matches[2];\n var exponent = matches[5];\n end = matches[6];\n isNegative = options.custom ? ((lead === options.nData.nlead) && (end === options.nData.nend)) :\n ((lead.indexOf(options.nData.nlead) !== -1) && (end.indexOf(options.nData.nend) !== -1));\n isPercent = isNegative ?\n options.nData.isPercent :\n options.pData.isPercent;\n tempValue = tempValue.replace(groupRegex, '');\n if (exponent) {\n tempValue += exponent;\n }\n ret = +tempValue;\n if (options.type === 'percent' || isPercent) {\n ret = ret / 100;\n }\n if (options.custom || options.fractionDigits) {\n ret = parseFloat(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.fractionDigits));\n }\n if (options.maximumFractionDigits) {\n ret = this.convertMaxFracDigits(tempValue, options, ret, isNegative);\n }\n if (isNegative) {\n ret *= -1;\n }\n return ret;\n }\n };\n NumberParser.convertMaxFracDigits = function (value, options, ret, isNegative) {\n var decimalSplitValue = value.split('.');\n if (decimalSplitValue[1] && decimalSplitValue[1].length > options.maximumFractionDigits) {\n ret = +(ret.toFixed(options.custom ?\n (isNegative ? options.nData.maximumFractionDigits : options.pData.maximumFractionDigits) : options.maximumFractionDigits));\n }\n return ret;\n };\n return NumberParser;\n}());\nexport { NumberParser };\n","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\nimport { isNullOrUndefined, getValue, extend, isBlazor } from './util';\nvar Observer = /** @class */ (function () {\n function Observer(context) {\n this.ranArray = [];\n this.boundedEvents = {};\n if (isNullOrUndefined(context)) {\n return;\n }\n this.context = context;\n }\n /**\n * To attach handler for given property in current context.\n *\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Specifies the handler function to be called while event notified.\n * @param {Object} context - Specifies the context binded to the handler.\n * @param {string} id - specifies the random generated id.\n * @returns {void}\n */\n Observer.prototype.on = function (property, handler, context, id) {\n if (isNullOrUndefined(handler)) {\n return;\n }\n var cntxt = context || this.context;\n if (this.notExist(property)) {\n this.boundedEvents[\"\" + property] = [{ handler: handler, context: cntxt, id: id }];\n return;\n }\n if (!isNullOrUndefined(id)) {\n if (this.ranArray.indexOf(id) === -1) {\n this.ranArray.push(id);\n this.boundedEvents[\"\" + property].push({ handler: handler, context: cntxt, id: id });\n }\n }\n else if (!this.isHandlerPresent(this.boundedEvents[\"\" + property], handler)) {\n this.boundedEvents[\"\" + property].push({ handler: handler, context: cntxt });\n }\n };\n /**\n * To remove handlers from a event attached using on() function.\n *\n * @param {string} property - specifies the name of the event.\n * @param {Function} handler - Optional argument specifies the handler function to be called while event notified.\n * @param {string} id - specifies the random generated id.\n * @returns {void} ?\n */\n Observer.prototype.off = function (property, handler, id) {\n if (this.notExist(property)) {\n return;\n }\n var curObject = getValue(property, this.boundedEvents);\n if (handler) {\n for (var i = 0; i < curObject.length; i++) {\n if (id) {\n if (curObject[parseInt(i.toString(), 10)].id === id) {\n curObject.splice(i, 1);\n var indexLocation = this.ranArray.indexOf(id);\n if (indexLocation !== -1) {\n this.ranArray.splice(indexLocation, 1);\n }\n break;\n }\n }\n else if (handler === curObject[parseInt(i.toString(), 10)].handler) {\n curObject.splice(i, 1);\n break;\n }\n }\n }\n else {\n delete this.boundedEvents[\"\" + property];\n }\n };\n /**\n * To notify the handlers in the specified event.\n *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it was failure to call.\n * @returns {void} ?\n */\n Observer.prototype.notify = function (property, argument, successHandler, errorHandler) {\n if (this.notExist(property)) {\n if (successHandler) {\n successHandler.call(this, argument);\n }\n return;\n }\n if (argument) {\n argument.name = property;\n }\n var blazor = 'Blazor';\n var curObject = getValue(property, this.boundedEvents).slice(0);\n if (window[\"\" + blazor]) {\n return this.blazorCallback(curObject, argument, successHandler, errorHandler, 0);\n }\n else {\n for (var _i = 0, curObject_1 = curObject; _i < curObject_1.length; _i++) {\n var cur = curObject_1[_i];\n cur.handler.call(cur.context, argument);\n }\n if (successHandler) {\n successHandler.call(this, argument);\n }\n }\n };\n Observer.prototype.blazorCallback = function (objs, argument, successHandler, errorHandler, index) {\n var _this = this;\n var isTrigger = index === objs.length - 1;\n if (index < objs.length) {\n var obj_1 = objs[parseInt(index.toString(), 10)];\n var promise = obj_1.handler.call(obj_1.context, argument);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n return promise;\n }\n promise.then(function (data) {\n data = typeof data === 'string' && _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data;\n extend(argument, argument, data, true);\n if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return _this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }).catch(function (data) {\n if (errorHandler) {\n errorHandler.call(obj_1.context, typeof data === 'string' &&\n _this.isJson(data) ? JSON.parse(data, _this.dateReviver) : data);\n }\n });\n }\n else if (successHandler && isTrigger) {\n successHandler.call(obj_1.context, argument);\n }\n else {\n return this.blazorCallback(objs, argument, successHandler, errorHandler, index + 1);\n }\n }\n };\n Observer.prototype.dateReviver = function (key, value) {\n var dPattern = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}/;\n if (isBlazor && typeof value === 'string' && value.match(dPattern) !== null) {\n return (new Date(value));\n }\n return (value);\n };\n Observer.prototype.isJson = function (value) {\n try {\n JSON.parse(value);\n }\n catch (e) {\n return false;\n }\n return true;\n };\n /**\n * To destroy handlers in the event\n *\n * @returns {void} ?\n */\n Observer.prototype.destroy = function () {\n this.boundedEvents = this.context = undefined;\n };\n /**\n * To remove internationalization events\n *\n * @returns {void} ?\n */\n Observer.prototype.offIntlEvents = function () {\n var eventsArr = this.boundedEvents['notifyExternalChange'];\n if (eventsArr) {\n for (var i = 0; i < eventsArr.length; i++) {\n var curContext = eventsArr[parseInt(i.toString(), 10)].context;\n if (curContext && curContext.detectFunction && curContext.randomId && !curContext.isRendered) {\n this.off('notifyExternalChange', curContext.detectFunction, curContext.randomId);\n i--;\n }\n }\n if (!this.boundedEvents['notifyExternalChange'].length) {\n delete this.boundedEvents['notifyExternalChange'];\n }\n }\n };\n /**\n * Returns if the property exists.\n *\n * @param {string} prop ?\n * @returns {boolean} ?\n */\n Observer.prototype.notExist = function (prop) {\n return Object.prototype.hasOwnProperty.call(this.boundedEvents, prop) === false || this.boundedEvents[\"\" + prop].length <= 0;\n };\n /**\n * Returns if the handler is present.\n *\n * @param {BoundOptions[]} boundedEvents ?\n * @param {Function} handler ?\n * @returns {boolean} ?\n */\n Observer.prototype.isHandlerPresent = function (boundedEvents, handler) {\n for (var _i = 0, boundedEvents_1 = boundedEvents; _i < boundedEvents_1.length; _i++) {\n var cur = boundedEvents_1[_i];\n if (cur.handler === handler) {\n return true;\n }\n }\n return false;\n };\n return Observer;\n}());\nexport { Observer };\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue, isBlazor } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n *\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n *\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n *\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n *\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n *\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n *\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n *\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function} ?\n */\n Internationalization.prototype.getNumberParser = function (options) {\n if (isBlazor() && options && !options.format) {\n options.minimumFractionDigits = 0;\n }\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n *\n * @param {number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string} ?\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n *\n * @param {Date} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string} ?\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n *\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date} ?\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n *\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number} ?\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n *\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string} ?\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n *\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @param {boolean} isExcel ?\n * @returns {string} ?\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option, isExcel) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData, isExcel);\n };\n /**\n * Returns the First Day of the Week\n *\n * @returns {number} ?\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n /**\n * Returns the culture\n *\n * @returns {string} ?\n */\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n *\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n * @returns {void} ?\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n *\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void} ?\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n *\n * @param {Object[]} data Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void} ?\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n *\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void} ?\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} type ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = isBlazor() ? getValue('numberSymbols', numObject) : getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the numeric CLDR number base object for given culture\n *\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} currency - Specifies the currency for which numericObject to be returned.\n * @returns {string} ?\n * @ignore\n * @private\n */\nexport function getNumberDependable(locale, currency) {\n var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n *\n * @param {string} mode ?\n * @returns {Object} ?\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\nimport { defaultCurrencyCode } from '../internationalization';\nimport { getValue, isNullOrUndefined, extend, isBlazor } from '../util';\nimport { ParserBase as parser, getBlazorCurrencySymbol } from './parser-base';\nimport { DateFormat } from './date-formatter';\nimport { NumberFormat } from './number-formatter';\nimport { isUndefined } from '../util';\nvar regExp = RegExp;\nexport var blazorCultureFormats = {\n 'en-US': {\n 'd': 'M/d/y',\n 'D': 'EEEE, MMMM d, y',\n 'f': 'EEEE, MMMM d, y h:mm a',\n 'F': 'EEEE, MMMM d, y h:mm:s a',\n 'g': 'M/d/y h:mm a',\n 'G': 'M/d/yyyy h:mm:ss tt',\n 'm': 'MMMM d',\n 'M': 'MMMM d',\n 'r': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 'R': 'ddd, dd MMM yyyy HH\\':\\'mm\\':\\'ss \\'GMT\\'',\n 's': 'yyyy\\'-\\'MM\\'-\\'dd\\'T\\'HH\\':\\'mm\\':\\'ss',\n 't': 'h:mm tt',\n 'T': 'h:m:s tt',\n 'u': 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n 'U': 'dddd, MMMM d, yyyy h:mm:ss tt',\n 'y': 'MMMM yyyy',\n 'Y': 'MMMM yyyy'\n }\n};\n/**\n * Date base common constants and function for date parser and formatter.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var IntlBase;\n(function (IntlBase) {\n // eslint-disable-next-line security/detect-unsafe-regex\n IntlBase.negativeDataRegex = /^(('[^']+'|''|[^*#@0,.E])*)(\\*.)?((([#,]*[0,]*0+)(\\.0*[0-9]*#*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n // eslint-disable-next-line security/detect-unsafe-regex\n IntlBase.customRegex = /^(('[^']+'|''|[^*#@0,.])*)(\\*.)?((([0#,]*[0,]*[0#]*[0# ]*)(\\.[0#]*)?)|([#,]*@+#*))(E\\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/;\n IntlBase.latnParseRegex = /0|1|2|3|4|5|6|7|8|9/g;\n var fractionRegex = /[0-9]/g;\n IntlBase.defaultCurrency = '$';\n var mapper = ['infinity', 'nan', 'group', 'decimal'];\n var patternRegex = /G|M|L|H|c|'| a|yy|y|EEEE|E/g;\n var patternMatch = {\n 'G': '',\n 'M': 'm',\n 'L': 'm',\n 'H': 'h',\n 'c': 'd',\n '\\'': '\"',\n ' a': ' AM/PM',\n 'yy': 'yy',\n 'y': 'yyyy',\n 'EEEE': 'dddd',\n 'E': 'ddd'\n };\n IntlBase.dateConverterMapper = /dddd|ddd/ig;\n var defaultFirstDay = 'sun';\n IntlBase.islamicRegex = /^islamic/;\n var firstDayMapper = {\n 'sun': 0,\n 'mon': 1,\n 'tue': 2,\n 'wed': 3,\n 'thu': 4,\n 'fri': 5,\n 'sat': 6\n };\n IntlBase.formatRegex = new regExp('(^[ncpae]{1})([0-1]?[0-9]|20)?$', 'i');\n IntlBase.currencyFormatRegex = new regExp('(^[ca]{1})([0-1]?[0-9]|20)?$', 'i');\n IntlBase.curWithoutNumberRegex = /(c|a)$/ig;\n var typeMapper = {\n '$': 'isCurrency',\n '%': 'isPercent',\n '-': 'isNegative',\n 0: 'nlead',\n 1: 'nend'\n };\n IntlBase.dateParseRegex = /([a-z])\\1*|'([^']|'')+'|''|./gi;\n IntlBase.basicPatterns = ['short', 'medium', 'long', 'full'];\n IntlBase.defaultObject = {\n 'dates': {\n 'calendars': {\n 'gregorian': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'narrow': {\n '1': 'J',\n '2': 'F',\n '3': 'M',\n '4': 'A',\n '5': 'M',\n '6': 'J',\n '7': 'J',\n '8': 'A',\n '9': 'S',\n '10': 'O',\n '11': 'N',\n '12': 'D'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'Before Christ',\n '0-alt-variant': 'Before Common Era',\n '1': 'Anno Domini',\n '1-alt-variant': 'Common Era'\n },\n 'eraAbbr': {\n '0': 'BC',\n '0-alt-variant': 'BCE',\n '1': 'AD',\n '1-alt-variant': 'CE'\n },\n 'eraNarrow': {\n '0': 'B',\n '0-alt-variant': 'BCE',\n '1': 'A',\n '1-alt-variant': 'CE'\n }\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 '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 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\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 '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 }\n }\n },\n 'islamic': {\n 'months': {\n 'stand-alone': {\n 'abbreviated': {\n '1': 'Muh.',\n '2': 'Saf.',\n '3': 'Rab. I',\n '4': 'Rab. II',\n '5': 'Jum. I',\n '6': 'Jum. II',\n '7': 'Raj.',\n '8': 'Sha.',\n '9': 'Ram.',\n '10': 'Shaw.',\n '11': 'Dhuʻl-Q.',\n '12': 'Dhuʻl-H.'\n },\n 'narrow': {\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n '10': '10',\n '11': '11',\n '12': '12'\n },\n 'wide': {\n '1': 'Muharram',\n '2': 'Safar',\n '3': 'Rabiʻ I',\n '4': 'Rabiʻ II',\n '5': 'Jumada I',\n '6': 'Jumada II',\n '7': 'Rajab',\n '8': 'Shaʻban',\n '9': 'Ramadan',\n '10': 'Shawwal',\n '11': 'Dhuʻl-Qiʻdah',\n '12': 'Dhuʻl-Hijjah'\n }\n }\n },\n 'days': {\n 'stand-alone': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'narrow': {\n 'sun': 'S',\n 'mon': 'M',\n 'tue': 'T',\n 'wed': 'W',\n 'thu': 'T',\n 'fri': 'F',\n 'sat': 'S'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n }\n },\n 'dayPeriods': {\n 'format': {\n 'wide': {\n 'am': 'AM',\n 'pm': 'PM'\n }\n }\n },\n 'eras': {\n 'eraNames': {\n '0': 'AH'\n },\n 'eraAbbr': {\n '0': 'AH'\n },\n 'eraNarrow': {\n '0': 'AH'\n }\n },\n 'dateFormats': {\n 'full': 'EEEE, MMMM d, y G',\n 'long': 'MMMM d, y G',\n 'medium': 'MMM d, y G',\n 'short': 'M/d/y GGGGG'\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 'dateTimeFormats': {\n 'full': '{1} \\'at\\' {0}',\n 'long': '{1} \\'at\\' {0}',\n 'medium': '{1}, {0}',\n 'short': '{1}, {0}',\n 'availableFormats': {\n 'd': 'd',\n 'E': 'ccc',\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 '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 'ms': 'mm:ss',\n 'y': 'y G',\n 'yyyy': 'y G',\n 'yyyyM': 'M/y GGGGG',\n 'yyyyMd': 'M/d/y GGGGG',\n 'yyyyMEd': 'E, M/d/y GGGGG',\n 'yyyyMMM': 'MMM y G',\n 'yyyyMMMd': 'MMM d, y G',\n 'yyyyMMMEd': 'E, MMM d, y G',\n 'yyyyMMMM': 'MMMM y G',\n 'yyyyQQQ': 'QQQ y G',\n 'yyyyQQQQ': 'QQQQ y G'\n }\n }\n }\n },\n 'timeZoneNames': {\n 'hourFormat': '+HH:mm;-HH:mm',\n 'gmtFormat': 'GMT{0}',\n 'gmtZeroFormat': 'GMT'\n }\n },\n 'numbers': {\n 'currencies': {\n 'USD': {\n 'displayName': 'US Dollar',\n 'symbol': '$',\n 'symbol-alt-narrow': '$'\n },\n 'EUR': {\n 'displayName': 'Euro',\n 'symbol': '€',\n 'symbol-alt-narrow': '€'\n },\n 'GBP': {\n 'displayName': 'British Pound',\n 'symbol-alt-narrow': '£'\n }\n },\n 'defaultNumberingSystem': 'latn',\n 'minimumGroupingDigits': '1',\n 'symbols-numberSystem-latn': {\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 'decimalFormats-numberSystem-latn': {\n 'standard': '#,##0.###'\n },\n 'percentFormats-numberSystem-latn': {\n 'standard': '#,##0%'\n },\n 'currencyFormats-numberSystem-latn': {\n 'standard': '¤#,##0.00',\n 'accounting': '¤#,##0.00;(¤#,##0.00)'\n },\n 'scientificFormats-numberSystem-latn': {\n 'standard': '#E0'\n }\n }\n };\n IntlBase.blazorDefaultObject = {\n 'numbers': {\n 'mapper': {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9'\n },\n 'mapperDigits': '0123456789',\n 'numberSymbols': {\n 'decimal': '.',\n 'group': ',',\n 'plusSign': '+',\n 'minusSign': '-',\n 'percentSign': '%',\n 'nan': 'NaN',\n 'timeSeparator': ':',\n 'infinity': '∞'\n },\n 'timeSeparator': ':',\n 'currencySymbol': '$',\n 'currencypData': {\n 'nlead': '$',\n 'nend': '',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentpData': {\n 'nlead': '',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'percentnData': {\n 'nlead': '-',\n 'nend': '%',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'currencynData': {\n 'nlead': '($',\n 'nend': ')',\n 'groupSeparator': ',',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalnData': {\n 'nlead': '-',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n },\n 'decimalpData': {\n 'nlead': '',\n 'nend': '',\n 'groupData': {\n 'primary': 3\n },\n 'maximumFraction': 2,\n 'minimumFraction': 2\n }\n },\n 'dates': {\n 'dayPeriods': {\n 'am': 'AM',\n 'pm': 'PM'\n },\n 'dateSeperator': '/',\n 'days': {\n 'abbreviated': {\n 'sun': 'Sun',\n 'mon': 'Mon',\n 'tue': 'Tue',\n 'wed': 'Wed',\n 'thu': 'Thu',\n 'fri': 'Fri',\n 'sat': 'Sat'\n },\n 'short': {\n 'sun': 'Su',\n 'mon': 'Mo',\n 'tue': 'Tu',\n 'wed': 'We',\n 'thu': 'Th',\n 'fri': 'Fr',\n 'sat': 'Sa'\n },\n 'wide': {\n 'sun': 'Sunday',\n 'mon': 'Monday',\n 'tue': 'Tuesday',\n 'wed': 'Wednesday',\n 'thu': 'Thursday',\n 'fri': 'Friday',\n 'sat': 'Saturday'\n }\n },\n 'months': {\n 'abbreviated': {\n '1': 'Jan',\n '2': 'Feb',\n '3': 'Mar',\n '4': 'Apr',\n '5': 'May',\n '6': 'Jun',\n '7': 'Jul',\n '8': 'Aug',\n '9': 'Sep',\n '10': 'Oct',\n '11': 'Nov',\n '12': 'Dec'\n },\n 'wide': {\n '1': 'January',\n '2': 'February',\n '3': 'March',\n '4': 'April',\n '5': 'May',\n '6': 'June',\n '7': 'July',\n '8': 'August',\n '9': 'September',\n '10': 'October',\n '11': 'November',\n '12': 'December'\n }\n },\n 'eras': {\n '1': 'AD'\n }\n }\n };\n IntlBase.monthIndex = {\n 3: 'abbreviated',\n 4: 'wide',\n 5: 'narrow',\n 1: 'abbreviated'\n };\n /**\n *\n */\n IntlBase.month = 'months';\n IntlBase.days = 'days';\n /**\n * Default numerber Object\n */\n IntlBase.patternMatcher = {\n C: 'currency',\n P: 'percent',\n N: 'decimal',\n A: 'currency',\n E: 'scientific'\n };\n /**\n * Returns the resultant pattern based on the skeleton, dateObject and the type provided\n *\n * @private\n * @param {string} skeleton ?\n * @param {Object} dateObject ?\n * @param {string} type ?\n * @param {boolean} isIslamic ?\n * @param {string} blazorCulture ?\n * @returns {string} ?\n */\n function getResultantPattern(skeleton, dateObject, type, isIslamic, blazorCulture) {\n var resPattern;\n var iType = type || 'date';\n if (blazorCulture) {\n resPattern = compareBlazorDateFormats({ skeleton: skeleton }, blazorCulture).format ||\n compareBlazorDateFormats({ skeleton: 'd' }, 'en-US').format;\n }\n else {\n if (IntlBase.basicPatterns.indexOf(skeleton) !== -1) {\n resPattern = getValue(iType + 'Formats.' + skeleton, dateObject);\n if (iType === 'dateTime') {\n var dPattern = getValue('dateFormats.' + skeleton, dateObject);\n var tPattern = getValue('timeFormats.' + skeleton, dateObject);\n resPattern = resPattern.replace('{1}', dPattern).replace('{0}', tPattern);\n }\n }\n else {\n resPattern = getValue('dateTimeFormats.availableFormats.' + skeleton, dateObject);\n }\n if (isUndefined(resPattern) && skeleton === 'yMd') {\n resPattern = 'M/d/y';\n }\n }\n return resPattern;\n }\n IntlBase.getResultantPattern = getResultantPattern;\n /**\n * Returns the dependable object for provided cldr data and culture\n *\n * @private\n * @param {Object} cldr ?\n * @param {string} culture ?\n * @param {string} mode ?\n * @param {boolean} isNumber ?\n * @returns {any} ?\n */\n function getDependables(cldr, culture, mode, isNumber) {\n var ret = {};\n var calendartype = mode || 'gregorian';\n ret.parserObject = parser.getMainObject(cldr, culture) || (isBlazor() ? IntlBase.blazorDefaultObject : IntlBase.defaultObject);\n if (isNumber) {\n ret.numericObject = getValue('numbers', ret.parserObject);\n }\n else {\n var dateString = isBlazor() ? 'dates' : ('dates.calendars.' + calendartype);\n ret.dateObject = getValue(dateString, ret.parserObject);\n }\n return ret;\n }\n IntlBase.getDependables = getDependables;\n /**\n * Returns the symbol pattern for provided parameters\n *\n * @private\n * @param {string} type ?\n * @param {string} numSystem ?\n * @param {Object} obj ?\n * @param {boolean} isAccount ?\n * @returns {string} ?\n */\n function getSymbolPattern(type, numSystem, obj, isAccount) {\n return getValue(type + 'Formats-numberSystem-' +\n numSystem + (isAccount ? '.accounting' : '.standard'), obj) || (isAccount ? getValue(type + 'Formats-numberSystem-' +\n numSystem + '.standard', obj) : '');\n }\n IntlBase.getSymbolPattern = getSymbolPattern;\n /**\n *\n * @param {string} format ?\n * @returns {string} ?\n */\n function ConvertDateToWeekFormat(format) {\n var convertMapper = format.match(IntlBase.dateConverterMapper);\n if (convertMapper && isBlazor()) {\n var tempString = convertMapper[0].length === 3 ? 'EEE' : 'EEEE';\n return format.replace(IntlBase.dateConverterMapper, tempString);\n }\n return format;\n }\n IntlBase.ConvertDateToWeekFormat = ConvertDateToWeekFormat;\n /**\n *\n * @param {DateFormatOptions} formatOptions ?\n * @param {string} culture ?\n * @returns {DateFormatOptions} ?\n */\n function compareBlazorDateFormats(formatOptions, culture) {\n var format = formatOptions.format || formatOptions.skeleton;\n var curFormatMapper = getValue((culture || 'en-US') + '.' + format, blazorCultureFormats);\n if (!curFormatMapper) {\n curFormatMapper = getValue('en-US.' + format, blazorCultureFormats);\n }\n if (curFormatMapper) {\n curFormatMapper = ConvertDateToWeekFormat(curFormatMapper);\n formatOptions.format = curFormatMapper.replace(/tt/, 'a');\n }\n return formatOptions;\n }\n IntlBase.compareBlazorDateFormats = compareBlazorDateFormats;\n /**\n * Returns proper numeric skeleton\n *\n * @private\n * @param {string} skeleton ?\n * @returns {any} ?\n */\n function getProperNumericSkeleton(skeleton) {\n var matches = skeleton.match(IntlBase.formatRegex);\n var ret = {};\n var pattern = matches[1].toUpperCase();\n ret.isAccount = (pattern === 'A');\n ret.type = IntlBase.patternMatcher[\"\" + pattern];\n if (skeleton.length > 1) {\n ret.fractionDigits = parseInt(matches[2], 10);\n }\n return ret;\n }\n IntlBase.getProperNumericSkeleton = getProperNumericSkeleton;\n /**\n * Returns format data for number formatting like minimum fraction, maximum fraction, etc..,\n *\n * @private\n * @param {string} pattern ?\n * @param {boolean} needFraction ?\n * @param {string} cSymbol ?\n * @param {boolean} fractionOnly ?\n * @returns {any} ?\n */\n function getFormatData(pattern, needFraction, cSymbol, fractionOnly) {\n var nData = fractionOnly ? {} : { nlead: '', nend: '' };\n var match = pattern.match(IntlBase.customRegex);\n if (match) {\n if (!fractionOnly) {\n nData.nlead = changeCurrencySymbol(match[1], cSymbol);\n nData.nend = changeCurrencySymbol(match[10], cSymbol);\n nData.groupPattern = match[4];\n }\n var fraction = match[7];\n if (fraction && needFraction) {\n var fmatch = fraction.match(fractionRegex);\n if (!isNullOrUndefined(fmatch)) {\n nData.minimumFraction = fmatch.length;\n }\n else {\n nData.minimumFraction = 0;\n }\n nData.maximumFraction = fraction.length - 1;\n }\n }\n return nData;\n }\n IntlBase.getFormatData = getFormatData;\n /**\n * Changes currency symbol\n *\n * @private\n * @param {string} val ?\n * @param {string} sym ?\n * @returns {string} ?\n */\n function changeCurrencySymbol(val, sym) {\n if (val) {\n val = val.replace(IntlBase.defaultCurrency, sym);\n return (sym === '') ? val.trim() : val;\n }\n return '';\n }\n IntlBase.changeCurrencySymbol = changeCurrencySymbol;\n /**\n * Returns currency symbol based on currency code ?\n *\n * @private\n * @param {Object} numericObject ?\n * @param {string} currencyCode ?\n * @param {string} altSymbol ?\n * @returns {string} ?\n */\n function getCurrencySymbol(numericObject, currencyCode, altSymbol) {\n var symbol = altSymbol ? ('.' + altSymbol) : '.symbol';\n var getCurrency = getValue('currencies.' + currencyCode + symbol, numericObject) ||\n getValue('currencies.' + currencyCode + '.symbol-alt-narrow', numericObject) || '$';\n return getCurrency;\n }\n IntlBase.getCurrencySymbol = getCurrencySymbol;\n /**\n * Returns formatting options for custom number format\n *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {any} obj ?\n * @returns {any} ?\n */\n function customFormat(format, dOptions, obj) {\n var options = {};\n var formatSplit = format.split(';');\n var data = ['pData', 'nData', 'zeroData'];\n for (var i = 0; i < formatSplit.length; i++) {\n options[\"\" + data[parseInt(i.toString(), 10)]] = customNumberFormat(formatSplit[parseInt(i.toString(), 10)], dOptions, obj);\n }\n if (isNullOrUndefined(options.nData)) {\n options.nData = extend({}, options.pData);\n options.nData.nlead = isNullOrUndefined(dOptions) ? '-' + options.nData.nlead : dOptions.minusSymbol + options.nData.nlead;\n }\n return options;\n }\n IntlBase.customFormat = customFormat;\n /**\n * Returns custom formatting options\n *\n * @private\n * @param {string} format ?\n * @param {CommonOptions} dOptions ?\n * @param {Object} numObject ?\n * @returns {any} ?\n */\n function customNumberFormat(format, dOptions, numObject) {\n var cOptions = { type: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 };\n var pattern = format.match(IntlBase.customRegex);\n if (isNullOrUndefined(pattern) || (pattern[5] === '' && format !== 'N/A')) {\n cOptions.type = undefined;\n return cOptions;\n }\n cOptions.nlead = pattern[1];\n cOptions.nend = pattern[10];\n var integerPart = pattern[6];\n var spaceCapture = integerPart.match(/ $/g) ? true : false;\n var spaceGrouping = integerPart.replace(/ $/g, '').indexOf(' ') !== -1;\n cOptions.useGrouping = integerPart.indexOf(',') !== -1 || spaceGrouping;\n integerPart = integerPart.replace(/,/g, '');\n var fractionPart = pattern[7];\n if (integerPart.indexOf('0') !== -1) {\n cOptions.minimumIntegerDigits = integerPart.length - integerPart.indexOf('0');\n }\n if (!isNullOrUndefined(fractionPart)) {\n cOptions.minimumFractionDigits = fractionPart.lastIndexOf('0');\n cOptions.maximumFractionDigits = fractionPart.lastIndexOf('#');\n if (cOptions.minimumFractionDigits === -1) {\n cOptions.minimumFractionDigits = 0;\n }\n if (cOptions.maximumFractionDigits === -1 || cOptions.maximumFractionDigits < cOptions.minimumFractionDigits) {\n cOptions.maximumFractionDigits = cOptions.minimumFractionDigits;\n }\n }\n if (!isNullOrUndefined(dOptions)) {\n dOptions.isCustomFormat = true;\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '$', dOptions.currencySymbol));\n if (!cOptions.isCurrency) {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', dOptions.percentSymbol));\n }\n }\n else {\n extend(cOptions, isCurrencyPercent([cOptions.nlead, cOptions.nend], '%', '%'));\n }\n if (!isNullOrUndefined(numObject)) {\n var symbolPattern = getSymbolPattern(cOptions.type, dOptions.numberMapper.numberSystem, numObject, false);\n if (cOptions.useGrouping) {\n cOptions.groupSeparator = spaceGrouping ? ' ' : dOptions.numberMapper.numberSymbols[mapper[2]];\n cOptions.groupData = NumberFormat.getGroupingDetails(symbolPattern.split(';')[0]);\n }\n cOptions.nlead = cOptions.nlead.replace(/'/g, '');\n cOptions.nend = spaceCapture ? ' ' + cOptions.nend.replace(/'/g, '') : cOptions.nend.replace(/'/g, '');\n }\n return cOptions;\n }\n IntlBase.customNumberFormat = customNumberFormat;\n /**\n * Returns formatting options for currency or percent type\n *\n * @private\n * @param {string[]} parts ?\n * @param {string} actual ?\n * @param {string} symbol ?\n * @returns {any} ?\n */\n function isCurrencyPercent(parts, actual, symbol) {\n var options = { nlead: parts[0], nend: parts[1] };\n for (var i = 0; i < 2; i++) {\n var part = parts[parseInt(i.toString(), 10)];\n var loc = part.indexOf(actual);\n if ((loc !== -1) && ((loc < part.indexOf('\\'')) || (loc > part.lastIndexOf('\\'')))) {\n options[\"\" + typeMapper[parseInt(i.toString(), 10)]] = part.substr(0, loc) + symbol + part.substr(loc + 1);\n options[\"\" + typeMapper[\"\" + actual]] = true;\n options.type = options.isCurrency ? 'currency' : 'percent';\n break;\n }\n }\n return options;\n }\n IntlBase.isCurrencyPercent = isCurrencyPercent;\n /**\n * Returns culture based date separator\n *\n * @private\n * @param {Object} dateObj ?\n * @returns {string} ?\n */\n function getDateSeparator(dateObj) {\n var value = (getValue('dateFormats.short', dateObj) || '').match(/[dM]([^dM])[dM]/i);\n return value ? value[1] : '/';\n }\n IntlBase.getDateSeparator = getDateSeparator;\n /**\n * Returns Native Date Time pattern\n *\n * @private\n * @param {string} culture ?\n * @param {DateFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcelFormat ?\n * @returns {string} ?\n */\n function getActualDateTimeFormat(culture, options, cldr, isExcelFormat) {\n var dependable = getDependables(cldr, culture, options.calendar);\n if (isBlazor()) {\n options = compareBlazorDateFormats(options, culture);\n }\n var actualPattern = options.format || getResultantPattern(options.skeleton, dependable.dateObject, options.type);\n if (isExcelFormat) {\n actualPattern = actualPattern.replace(patternRegex, function (pattern) {\n return patternMatch[\"\" + pattern];\n });\n if (actualPattern.indexOf('z') !== -1) {\n var tLength = actualPattern.match(/z/g).length;\n var timeZonePattern = void 0;\n var options_1 = { 'timeZone': {} };\n options_1.numMapper = parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr));\n options_1.timeZone = getValue('dates.timeZoneNames', dependable.parserObject);\n var value = new Date();\n var timezone = value.getTimezoneOffset();\n var pattern = (tLength < 4) ? '+H;-H' : options_1.timeZone.hourFormat;\n pattern = pattern.replace(/:/g, options_1.numMapper.timeSeparator);\n if (timezone === 0) {\n timeZonePattern = options_1.timeZone.gmtZeroFormat;\n }\n else {\n timeZonePattern = DateFormat.getTimeZoneValue(timezone, pattern);\n timeZonePattern = options_1.timeZone.gmtFormat.replace(/\\{0\\}/, timeZonePattern);\n }\n actualPattern = actualPattern.replace(/[z]+/, '\"' + timeZonePattern + '\"');\n }\n actualPattern = actualPattern.replace(/ $/, '');\n }\n return actualPattern;\n }\n IntlBase.getActualDateTimeFormat = getActualDateTimeFormat;\n /**\n *\n * @param {string} actual ?\n * @param {any} option ?\n * @returns {any} ?\n */\n function processSymbol(actual, option) {\n if (actual.indexOf(',') !== -1) {\n var split = actual.split(',');\n actual = (split[0] + getValue('numberMapper.numberSymbols.group', option) +\n split[1].replace('.', getValue('numberMapper.numberSymbols.decimal', option)));\n }\n else {\n actual = actual.replace('.', getValue('numberMapper.numberSymbols.decimal', option));\n }\n return actual;\n }\n IntlBase.processSymbol = processSymbol;\n /**\n * Returns Native Number pattern\n *\n * @private\n * @param {string} culture ?\n * @param {NumberFormatOptions} options ?\n * @param {Object} cldr ?\n * @param {boolean} isExcel ?\n * @returns {string} ?\n */\n function getActualNumberFormat(culture, options, cldr, isExcel) {\n var dependable = getDependables(cldr, culture, '', true);\n var parseOptions = { custom: true };\n var numrericObject = dependable.numericObject;\n var minFrac;\n var curObj = {};\n var curMatch = (options.format || '').match(IntlBase.currencyFormatRegex);\n var type = IntlBase.formatRegex.test(options.format) ? getProperNumericSkeleton(options.format || 'N') : {};\n var dOptions = {};\n if (curMatch) {\n dOptions.numberMapper = isBlazor() ?\n extend({}, dependable.numericObject) :\n parser.getNumberMapper(dependable.parserObject, parser.getNumberingSystem(cldr), true);\n var curCode = isBlazor() ? getValue('currencySymbol', dependable.numericObject) :\n getCurrencySymbol(dependable.numericObject, options.currency || defaultCurrencyCode, options.altSymbol);\n var symbolPattern = getSymbolPattern('currency', dOptions.numberMapper.numberSystem, dependable.numericObject, (/a/i).test(options.format));\n symbolPattern = symbolPattern.replace(/\\u00A4/g, curCode);\n var split = symbolPattern.split(';');\n curObj.hasNegativePattern = isBlazor() ? true : (split.length > 1);\n curObj.nData = isBlazor() ? getValue(type.type + 'nData', numrericObject) :\n getFormatData(split[1] || '-' + split[0], true, curCode);\n curObj.pData = isBlazor() ? getValue(type.type + 'pData', numrericObject) :\n getFormatData(split[0], false, curCode);\n if (!curMatch[2] && !options.minimumFractionDigits && !options.maximumFractionDigits) {\n minFrac = getFormatData(symbolPattern.split(';')[0], true, '', true).minimumFraction;\n }\n }\n var actualPattern;\n if ((IntlBase.formatRegex.test(options.format)) || !(options.format)) {\n extend(parseOptions, getProperNumericSkeleton(options.format || 'N'));\n parseOptions.custom = false;\n actualPattern = '###0';\n if (parseOptions.fractionDigits || options.minimumFractionDigits || options.maximumFractionDigits || minFrac) {\n var defaultMinimum = 0;\n if (parseOptions.fractionDigits) {\n options.minimumFractionDigits = options.maximumFractionDigits = parseOptions.fractionDigits;\n }\n actualPattern = fractionDigitsPattern(actualPattern, minFrac || parseOptions.fractionDigits ||\n options.minimumFractionDigits || defaultMinimum, options.maximumFractionDigits || defaultMinimum);\n }\n if (options.minimumIntegerDigits) {\n actualPattern = minimumIntegerPattern(actualPattern, options.minimumIntegerDigits);\n }\n if (options.useGrouping) {\n actualPattern = groupingPattern(actualPattern);\n }\n if (parseOptions.type === 'currency' || (parseOptions.type && isBlazor())) {\n if (isBlazor() && parseOptions.type !== 'currency') {\n curObj.pData = getValue(parseOptions.type + 'pData', numrericObject);\n curObj.nData = getValue(parseOptions.type + 'nData', numrericObject);\n }\n var cPattern = actualPattern;\n actualPattern = curObj.pData.nlead + cPattern + curObj.pData.nend;\n if (curObj.hasNegativePattern || isBlazor()) {\n actualPattern += ';' + curObj.nData.nlead + cPattern + curObj.nData.nend;\n }\n }\n if (parseOptions.type === 'percent' && !isBlazor()) {\n actualPattern += ' %';\n }\n }\n else {\n actualPattern = options.format.replace(/'/g, '\"');\n }\n if (Object.keys(dOptions).length > 0) {\n actualPattern = !isExcel ? processSymbol(actualPattern, dOptions) : actualPattern;\n }\n return actualPattern;\n }\n IntlBase.getActualNumberFormat = getActualNumberFormat;\n /**\n *\n * @param {string} pattern ?\n * @param {number} minDigits ?\n * @param {number} maxDigits ?\n * @returns {string} ?\n */\n function fractionDigitsPattern(pattern, minDigits, maxDigits) {\n pattern += '.';\n for (var a = 0; a < minDigits; a++) {\n pattern += '0';\n }\n if (minDigits < maxDigits) {\n var diff = maxDigits - minDigits;\n for (var b = 0; b < diff; b++) {\n pattern += '#';\n }\n }\n return pattern;\n }\n IntlBase.fractionDigitsPattern = fractionDigitsPattern;\n /**\n *\n * @param {string} pattern ?\n * @param {number} digits ?\n * @returns {string} ?\n */\n function minimumIntegerPattern(pattern, digits) {\n var temp = pattern.split('.');\n var integer = '';\n for (var x = 0; x < digits; x++) {\n integer += '0';\n }\n return temp[1] ? (integer + '.' + temp[1]) : integer;\n }\n IntlBase.minimumIntegerPattern = minimumIntegerPattern;\n /**\n *\n * @param {string} pattern ?\n * @returns {string} ?\n */\n function groupingPattern(pattern) {\n var temp = pattern.split('.');\n var integer = temp[0];\n var no = 3 - integer.length % 3;\n var hash = (no && no === 1) ? '#' : (no === 2 ? '##' : '');\n integer = hash + integer;\n pattern = '';\n for (var x = integer.length - 1; x > 0; x = x - 3) {\n pattern = ',' + integer[x - 2] + integer[x - 1] + integer[parseInt(x.toString(), 10)] + pattern;\n }\n pattern = pattern.slice(1);\n return temp[1] ? (pattern + '.' + temp[1]) : pattern;\n }\n IntlBase.groupingPattern = groupingPattern;\n /**\n *\n * @param {string} culture ?\n * @param {Object} cldr ?\n * @returns {number} ?\n */\n function getWeekData(culture, cldr) {\n var firstDay = defaultFirstDay;\n var mapper = getValue('supplemental.weekData.firstDay', cldr);\n var iCulture = culture;\n if ((/en-/).test(iCulture)) {\n iCulture = iCulture.slice(3);\n }\n iCulture = iCulture.slice(0, 2).toUpperCase() + iCulture.substr(2);\n if (mapper) {\n firstDay = mapper[\"\" + iCulture] || mapper[iCulture.slice(0, 2)] || defaultFirstDay;\n }\n return firstDayMapper[\"\" + firstDay];\n }\n IntlBase.getWeekData = getWeekData;\n /**\n * @private\n * @param {any} pData ?\n * @param {string} aCurrency ?\n * @param {string} rCurrency ?\n * @returns {void} ?\n */\n function replaceBlazorCurrency(pData, aCurrency, rCurrency) {\n var iCurrency = getBlazorCurrencySymbol(rCurrency);\n if (aCurrency !== iCurrency) {\n for (var _i = 0, pData_1 = pData; _i < pData_1.length; _i++) {\n var data = pData_1[_i];\n data.nend = data.nend.replace(aCurrency, iCurrency);\n data.nlead = data.nlead.replace(aCurrency, iCurrency);\n }\n }\n }\n IntlBase.replaceBlazorCurrency = replaceBlazorCurrency;\n /**\n * @private\n * @param {Date} date ?\n * @returns {number} ?\n */\n function getWeekOfYear(date) {\n var newYear = new Date(date.getFullYear(), 0, 1);\n var day = newYear.getDay();\n var weeknum;\n day = (day >= 0 ? day : day + 7);\n var daynum = Math.floor((date.getTime() - newYear.getTime() -\n (date.getTimezoneOffset() - newYear.getTimezoneOffset()) * 60000) / 86400000) + 1;\n if (day < 4) {\n weeknum = Math.floor((daynum + day - 1) / 7) + 1;\n if (weeknum > 52) {\n var nYear = new Date(date.getFullYear() + 1, 0, 1);\n var nday = nYear.getDay();\n nday = nday >= 0 ? nday : nday + 7;\n weeknum = nday < 4 ? 1 : 53;\n }\n }\n else {\n weeknum = Math.floor((daynum + day - 1) / 7);\n }\n return weeknum;\n }\n IntlBase.getWeekOfYear = getWeekOfYear;\n})(IntlBase || (IntlBase = {}));\n","import { isNullOrUndefined, merge } from './util';\nvar headerRegex = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm;\nvar defaultType = 'GET';\n/**\n * Ajax class provides ability to make asynchronous HTTP request to the server\n * ```typescript\n * var ajax = new Ajax(\"index.html\", \"GET\", true);\n * ajax.send().then(\n * function (value) {\n * console.log(value);\n * },\n * function (reason) {\n * console.log(reason);\n * });\n * ```\n */\nvar Ajax = /** @class */ (function () {\n /**\n * Constructor for Ajax class\n *\n * @param {string|Object} options ?\n * @param {string} type ?\n * @param {boolean} async ?\n * @returns defaultType any\n */\n function Ajax(options, type, async, contentType) {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n *\n * @default true\n */\n this.mode = true;\n /**\n * A boolean value indicating whether to ignore the promise reject.\n *\n * @private\n * @default true\n */\n this.emitError = true;\n this.options = {};\n if (typeof options === 'string') {\n this.url = options;\n this.type = type ? type.toUpperCase() : defaultType;\n this.mode = !isNullOrUndefined(async) ? async : true;\n }\n else if (typeof options === 'object') {\n this.options = options;\n merge(this, this.options);\n }\n this.type = this.type ? this.type.toUpperCase() : defaultType;\n this.contentType = (this.contentType !== undefined) ? this.contentType : contentType;\n }\n /**\n *\n * Send the request to server.\n *\n * @param {any} data - To send the user data\n * @returns {Promise} ?\n */\n Ajax.prototype.send = function (data) {\n var _this = this;\n this.data = isNullOrUndefined(data) ? this.data : data;\n var eventArgs = {\n cancel: false,\n httpRequest: null\n };\n var promise = new Promise(function (resolve, reject) {\n _this.httpRequest = new XMLHttpRequest();\n _this.httpRequest.onreadystatechange = function () { _this.stateChange(resolve, reject); };\n if (!isNullOrUndefined(_this.onLoad)) {\n _this.httpRequest.onload = _this.onLoad;\n }\n if (!isNullOrUndefined(_this.onProgress)) {\n _this.httpRequest.onprogress = _this.onProgress;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onAbort)) {\n _this.httpRequest.onabort = _this.onAbort;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onError)) {\n _this.httpRequest.onerror = _this.onError;\n }\n //** Upload Events **/\n /* istanbul ignore next */\n if (!isNullOrUndefined(_this.onUploadProgress)) {\n _this.httpRequest.upload.onprogress = _this.onUploadProgress;\n }\n _this.httpRequest.open(_this.type, _this.url, _this.mode);\n // Set default headers\n if (!isNullOrUndefined(_this.data) && _this.contentType !== null) {\n _this.httpRequest.setRequestHeader('Content-Type', _this.contentType || 'application/json; charset=utf-8');\n }\n if (_this.beforeSend) {\n eventArgs.httpRequest = _this.httpRequest;\n _this.beforeSend(eventArgs);\n }\n if (!eventArgs.cancel) {\n _this.httpRequest.send(!isNullOrUndefined(_this.data) ? _this.data : null);\n }\n });\n return promise;\n };\n Ajax.prototype.successHandler = function (data) {\n if (this.onSuccess) {\n this.onSuccess(data, this);\n }\n return data;\n };\n Ajax.prototype.failureHandler = function (reason) {\n if (this.onFailure) {\n this.onFailure(this.httpRequest);\n }\n return reason;\n };\n Ajax.prototype.stateChange = function (resolve, reject) {\n var data = this.httpRequest.responseText;\n if (this.dataType && this.dataType.toLowerCase() === 'json') {\n if (data === '') {\n data = undefined;\n }\n else {\n try {\n data = JSON.parse(data);\n }\n catch (error) {\n // no exception handle\n }\n }\n }\n if (this.httpRequest.readyState === 4) {\n //success range should be 200 to 299\n if ((this.httpRequest.status >= 200 && this.httpRequest.status <= 299) || this.httpRequest.status === 304) {\n resolve(this.successHandler(data));\n }\n else {\n if (this.emitError) {\n reject(new Error(this.failureHandler(this.httpRequest.statusText)));\n }\n else {\n resolve();\n }\n }\n }\n };\n /**\n * To get the response header from XMLHttpRequest\n *\n * @param {string} key Key to search in the response header\n * @returns {string} ?\n */\n Ajax.prototype.getResponseHeader = function (key) {\n var responseHeaders = {};\n var headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n while (headers) {\n responseHeaders[headers[1].toLowerCase()] = headers[2];\n headers = headerRegex.exec(this.httpRequest.getAllResponseHeaders());\n }\n var header = responseHeaders[key.toLowerCase()];\n return isNullOrUndefined(header) ? null : header;\n };\n return Ajax;\n}());\nexport { Ajax };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isNullOrUndefined as isNOU, isObject, merge } from './util';\n/**\n * The Fetch class provides a way to make asynchronous network requests, typically to retrieve resources from a server.\n * ```typescript\n * var fetchApi = new Fetch('index.html', 'GET');\n * fetchApi.send()\n * .then((value) => {\n * console.log(value);\n * }).catch((error) => {\n * console.log(error);\n * });\n * ```\n */\nvar Fetch = /** @class */ (function () {\n /**\n * Constructor for Fetch class.\n *\n * @param {string|Object} options - Specifies the URL or Request object with URL to which the request is to be sent.\n * @param {string} type - Specifies which request method is to be used, such as GET, POST, etc.\n * @param {string} contentType - Specifies the content type of the request, which is used to indicate the original media type of the resource.\n */\n function Fetch(options, type, contentType) {\n /**\n * Specifies which request method is to be used, such as GET, POST, etc.\n *\n * @default GET\n */\n this.type = 'GET';\n /**\n * A boolean value indicating whether to reject the promise or not.\n *\n * @private\n * @default true\n */\n this.emitError = true;\n if (typeof options === 'string') {\n this.url = options;\n this.type = !isNOU(type) ? type.toUpperCase() : this.type;\n this.contentType = contentType;\n }\n else if (isObject(options) && Object.keys(options).length > 0) {\n merge(this, options);\n }\n this.contentType = !isNOU(this.contentType) ? this.contentType : 'application/json; charset=utf-8';\n }\n /**\n * Send the request to server.\n *\n * @param {string|Object} data - Specifies the data that needs to be added to the request.\n * @returns {Promise} - Returns the response to a request.\n */\n Fetch.prototype.send = function (data) {\n var _this = this;\n var contentTypes = {\n 'application/json': 'json',\n 'multipart/form-data': 'formData',\n 'application/octet-stream': 'blob',\n 'application/x-www-form-urlencoded': 'formData'\n };\n try {\n if (isNOU(this.fetchRequest) && this.type === 'GET') {\n this.fetchRequest = new Request(this.url, { method: this.type });\n }\n else if (isNOU(this.fetchRequest)) {\n this.data = !isNOU(data) ? data : this.data;\n this.fetchRequest = new Request(this.url, {\n method: this.type,\n headers: { 'Content-Type': this.contentType },\n body: this.data\n });\n }\n var eventArgs = { cancel: false, fetchRequest: this.fetchRequest };\n this.triggerEvent(this['beforeSend'], eventArgs);\n if (eventArgs.cancel) {\n return null;\n }\n this.fetchResponse = fetch(this.fetchRequest);\n return this.fetchResponse.then(function (response) {\n _this.triggerEvent(_this['onLoad'], response);\n if (!response.ok) {\n throw response;\n }\n var responseType = 'text';\n for (var _i = 0, _a = Object.keys(contentTypes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (response.headers.get('Content-Type') && response.headers.get('Content-Type').indexOf(key) !== -1) {\n responseType = contentTypes[key];\n }\n }\n return response[responseType]();\n }).then(function (data) {\n _this.triggerEvent(_this['onSuccess'], data, _this);\n return data;\n }).catch(function (error) {\n var returnVal = {};\n if (_this.emitError) {\n _this.triggerEvent(_this['onFailure'], error);\n returnVal = Promise.reject(error);\n }\n return returnVal;\n });\n }\n catch (error) {\n return error;\n }\n };\n Fetch.prototype.triggerEvent = function (callback, data, instance) {\n if (!isNOU(callback) && typeof callback === 'function') {\n callback(data, instance);\n }\n };\n return Fetch;\n}());\nexport { Fetch };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isUndefined } from './util';\nvar REGX_MOBILE = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile/i;\nvar REGX_IE = /msie|trident/i;\nvar REGX_IE11 = /Trident\\/7\\./;\nvar REGX_IOS = /(ipad|iphone|ipod touch)/i;\nvar REGX_IOS7 = /(ipad|iphone|ipod touch);.*os 7_\\d|(ipad|iphone|ipod touch);.*os 8_\\d/i;\nvar REGX_ANDROID = /android/i;\nvar REGX_WINDOWS = /trident|windows phone|edge/i;\nvar REGX_VERSION = /(version)[ /]([\\w.]+)/i;\nvar REGX_BROWSER = {\n OPERA: /(opera|opr)(?:.*version|)[ /]([\\w.]+)/i,\n EDGE: /(edge)(?:.*version|)[ /]([\\w.]+)/i,\n CHROME: /(chrome|crios)[ /]([\\w.]+)/i,\n PANTHOMEJS: /(phantomjs)[ /]([\\w.]+)/i,\n SAFARI: /(safari)[ /]([\\w.]+)/i,\n WEBKIT: /(webkit)[ /]([\\w.]+)/i,\n MSIE: /(msie|trident) ([\\w.]+)/i,\n MOZILLA: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n};\n/* istanbul ignore else */\nif (typeof window !== 'undefined') {\n window.browserDetails = window.browserDetails || {};\n}\n/**\n * Get configuration details for Browser\n *\n * @private\n */\nvar Browser = /** @class */ (function () {\n function Browser() {\n }\n Browser.extractBrowserDetail = function () {\n var browserInfo = { culture: {} };\n var keys = Object.keys(REGX_BROWSER);\n var clientInfo = [];\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n clientInfo = Browser.userAgent.match(REGX_BROWSER[\"\" + key]);\n if (clientInfo) {\n browserInfo.name = (clientInfo[1].toLowerCase() === 'opr' ? 'opera' : clientInfo[1].toLowerCase());\n browserInfo.name = (clientInfo[1].toLowerCase() === 'crios' ? 'chrome' : browserInfo.name);\n browserInfo.version = clientInfo[2];\n browserInfo.culture.name = browserInfo.culture.language = navigator.language;\n if (Browser.userAgent.match(REGX_IE11)) {\n browserInfo.name = 'msie';\n break;\n }\n var version = Browser.userAgent.match(REGX_VERSION);\n if (browserInfo.name === 'safari' && version) {\n browserInfo.version = version[2];\n }\n break;\n }\n }\n return browserInfo;\n };\n /**\n * To get events from the browser\n *\n * @param {string} event - type of event triggered.\n * @returns {string} ?\n */\n Browser.getEvent = function (event) {\n var events = {\n start: {\n isPointer: 'pointerdown', isTouch: 'touchstart', isDevice: 'mousedown'\n },\n move: {\n isPointer: 'pointermove', isTouch: 'touchmove', isDevice: 'mousemove'\n },\n end: {\n isPointer: 'pointerup', isTouch: 'touchend', isDevice: 'mouseup'\n },\n cancel: {\n isPointer: 'pointercancel', isTouch: 'touchcancel', isDevice: 'mouseleave'\n }\n };\n return (Browser.isPointer ? events[\"\" + event].isPointer :\n (Browser.isTouch ? events[\"\" + event].isTouch + (!Browser.isDevice ? ' ' + events[\"\" + event].isDevice : '')\n : events[\"\" + event].isDevice));\n };\n /**\n * To get the Touch start event from browser\n *\n * @returns {string}\n */\n Browser.getTouchStartEvent = function () {\n return Browser.getEvent('start');\n };\n /**\n * To get the Touch end event from browser\n *\n * @returns {string}\n */\n Browser.getTouchEndEvent = function () {\n return Browser.getEvent('end');\n };\n /**\n * To get the Touch move event from browser\n *\n * @returns {string}\n */\n Browser.getTouchMoveEvent = function () {\n return Browser.getEvent('move');\n };\n /**\n * To cancel the touch event from browser\n *\n * @returns {string}\n */\n Browser.getTouchCancelEvent = function () {\n return Browser.getEvent('cancel');\n };\n /**\n * Check whether the browser on the iPad device is Safari or not\n *\n * @returns {boolean}\n */\n Browser.isSafari = function () {\n return (Browser.isDevice && Browser.isIos && Browser.isTouch && typeof window !== 'undefined'\n && window.navigator.userAgent.toLowerCase().indexOf('iphone') === -1\n && window.navigator.userAgent.toLowerCase().indexOf('safari') > -1);\n };\n /**\n * To get the value based on provided key and regX\n *\n * @param {string} key ?\n * @param {RegExp} regX ?\n * @returns {Object} ?\n */\n Browser.getValue = function (key, regX) {\n var browserDetails = typeof window !== 'undefined' ? window.browserDetails : {};\n if (typeof navigator !== 'undefined' && navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 && Browser.isTouch === true && !REGX_BROWSER.CHROME.test(navigator.userAgent)) {\n browserDetails['isIos'] = true;\n browserDetails['isDevice'] = true;\n browserDetails['isTouch'] = true;\n browserDetails['isPointer'] = true;\n }\n if ('undefined' === typeof browserDetails[\"\" + key]) {\n return browserDetails[\"\" + key] = regX.test(Browser.userAgent);\n }\n return browserDetails[\"\" + key];\n };\n Object.defineProperty(Browser, \"userAgent\", {\n get: function () {\n return Browser.uA;\n },\n //Properties\n /**\n * Property specifies the userAgent of the browser. Default userAgent value is based on the browser.\n * Also we can set our own userAgent.\n *\n * @param {string} uA ?\n */\n set: function (uA) {\n Browser.uA = uA;\n window.browserDetails = {};\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"info\", {\n //Read Only Properties\n /**\n * Property is to get the browser information like Name, Version and Language\n *\n * @returns {BrowserInfo} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.info)) {\n return window.browserDetails.info = Browser.extractBrowserDetail();\n }\n return window.browserDetails.info;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIE\", {\n /**\n * Property is to get whether the userAgent is based IE.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIE', REGX_IE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isTouch\", {\n /**\n * Property is to get whether the browser has touch support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isTouch)) {\n return (window.browserDetails.isTouch =\n ('ontouchstart' in window.navigator) ||\n (window &&\n window.navigator &&\n (window.navigator.maxTouchPoints > 0)) || ('ontouchstart' in window));\n }\n return window.browserDetails.isTouch;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isPointer\", {\n /**\n * Property is to get whether the browser has Pointer support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isPointer)) {\n return window.browserDetails.isPointer = ('pointerEnabled' in window.navigator);\n }\n return window.browserDetails.isPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isMSPointer\", {\n /**\n * Property is to get whether the browser has MSPointer support.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isMSPointer)) {\n return window.browserDetails.isMSPointer = ('msPointerEnabled' in window.navigator);\n }\n return window.browserDetails.isMSPointer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isDevice\", {\n /**\n * Property is to get whether the userAgent is device based.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isDevice', REGX_MOBILE);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos\", {\n /**\n * Property is to get whether the userAgent is IOS.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIos', REGX_IOS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isIos7\", {\n /**\n * Property is to get whether the userAgent is Ios7.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isIos7', REGX_IOS7);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isAndroid\", {\n /**\n * Property is to get whether the userAgent is Android.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isAndroid', REGX_ANDROID);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWebView\", {\n /**\n * Property is to identify whether application ran in web view.\n *\n * @returns {boolean} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.isWebView)) {\n window.browserDetails.isWebView = !(isUndefined(window.cordova) && isUndefined(window.PhoneGap)\n && isUndefined(window.phonegap) && window.forge !== 'object');\n return window.browserDetails.isWebView;\n }\n return window.browserDetails.isWebView;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"isWindows\", {\n /**\n * Property is to get whether the userAgent is Windows.\n *\n * @returns {boolean} ?\n */\n get: function () {\n return Browser.getValue('isWindows', REGX_WINDOWS);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchStartEvent\", {\n /**\n * Property is to get the touch start event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchStartEvent)) {\n return window.browserDetails.touchStartEvent = Browser.getTouchStartEvent();\n }\n return window.browserDetails.touchStartEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchMoveEvent\", {\n /**\n * Property is to get the touch move event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchMoveEvent)) {\n return window.browserDetails.touchMoveEvent = Browser.getTouchMoveEvent();\n }\n return window.browserDetails.touchMoveEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchEndEvent\", {\n /**\n * Property is to get the touch end event. It returns event name based on browser.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchEndEvent)) {\n return window.browserDetails.touchEndEvent = Browser.getTouchEndEvent();\n }\n return window.browserDetails.touchEndEvent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Browser, \"touchCancelEvent\", {\n /**\n * Property is to cancel the touch end event.\n *\n * @returns {string} ?\n */\n get: function () {\n if (isUndefined(window.browserDetails.touchCancelEvent)) {\n return window.browserDetails.touchCancelEvent = Browser.getTouchCancelEvent();\n }\n return window.browserDetails.touchCancelEvent;\n },\n enumerable: true,\n configurable: true\n });\n /* istanbul ignore next */\n Browser.uA = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n return Browser;\n}());\nexport { Browser };\n","import { debounce, extend } from './util';\nimport { Browser } from './browser';\n/**\n * EventHandler class provides option to add, remove, clear and trigger events to a HTML DOM element\n * ```html\n *
\n * \n * ```\n */\nvar EventHandler = /** @class */ (function () {\n function EventHandler() {\n }\n // to get the event data based on element\n EventHandler.addOrGetEventData = function (element) {\n if ('__eventList' in element) {\n return element.__eventList.events;\n }\n else {\n element.__eventList = {};\n return element.__eventList.events = [];\n }\n };\n /**\n * Add an event to the specified DOM element.\n *\n * @param {any} element - Target HTML DOM element\n * @param {string} eventName - A string that specifies the name of the event\n * @param {Function} listener - Specifies the function to run when the event occurs\n * @param {Object} bindTo - A object that binds 'this' variable in the event handler\n * @param {number} intDebounce - Specifies at what interval given event listener should be triggered.\n * @returns {Function} ?\n */\n EventHandler.add = function (element, eventName, listener, bindTo, intDebounce) {\n var eventData = EventHandler.addOrGetEventData(element);\n var debounceListener;\n if (intDebounce) {\n debounceListener = debounce(listener, intDebounce);\n }\n else {\n debounceListener = listener;\n }\n if (bindTo) {\n debounceListener = debounceListener.bind(bindTo);\n }\n var event = eventName.split(' ');\n for (var i = 0; i < event.length; i++) {\n eventData.push({\n name: event[parseInt(i.toString(), 10)],\n listener: listener,\n debounce: debounceListener\n });\n if (Browser.isIE) {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener);\n }\n else {\n element.addEventListener(event[parseInt(i.toString(), 10)], debounceListener, { passive: false });\n }\n }\n return debounceListener;\n };\n /**\n * Remove an event listener that has been attached before.\n *\n * @param {any} element - Specifies the target html element to remove the event\n * @param {string} eventName - A string that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @returns {void} ?\n */\n EventHandler.remove = function (element, eventName, listener) {\n var eventData = EventHandler.addOrGetEventData(element);\n var event = eventName.split(' ');\n var _loop_1 = function (j) {\n var index = -1;\n var debounceListener;\n if (eventData && eventData.length !== 0) {\n eventData.some(function (x, i) {\n return x.name === event[parseInt(j.toString(), 10)] && x.listener === listener ?\n (index = i, debounceListener = x.debounce, true) : false;\n });\n }\n if (index !== -1) {\n eventData.splice(index, 1);\n }\n if (debounceListener) {\n element.removeEventListener(event[parseInt(j.toString(), 10)], debounceListener);\n }\n };\n for (var j = 0; j < event.length; j++) {\n _loop_1(j);\n }\n };\n /**\n * Clear all the event listeners that has been previously attached to the element.\n *\n * @param {any} element - Specifies the target html element to clear the events\n * @returns {void} ?\n */\n EventHandler.clearEvents = function (element) {\n var eventData = EventHandler.addOrGetEventData(element);\n var copyData = extend([], undefined, eventData);\n for (var i = 0; i < copyData.length; i++) {\n var parseValue = copyData[parseInt(i.toString(), 10)];\n element.removeEventListener(parseValue.name, parseValue.debounce);\n eventData.shift();\n }\n };\n /**\n * Trigger particular event of the element.\n *\n * @param {any} element - Specifies the target html element to trigger the events\n * @param {string} eventName - Specifies the event to trigger for the specified element.\n * Can be a custom event, or any of the standard events.\n * @param {any} eventProp - Additional parameters to pass on to the event properties\n * @returns {void} ?\n */\n EventHandler.trigger = function (element, eventName, eventProp) {\n var eventData = EventHandler.addOrGetEventData(element);\n for (var _i = 0, eventData_1 = eventData; _i < eventData_1.length; _i++) {\n var event_1 = eventData_1[_i];\n if (event_1.name === eventName) {\n event_1.debounce.call(this, eventProp);\n }\n }\n };\n return EventHandler;\n}());\nexport { EventHandler };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined, getValue, setValue, isObject, extend } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n *\n * @param {string} tagName - Name of the tag, id and class names.\n * @param {ElementProperties} properties - Object to set properties in the element.\n * @param {ElementProperties} properties.id - To set the id to the created element.\n * @param {ElementProperties} properties.className - To add classes to the element.\n * @param {ElementProperties} properties.innerHTML - To set the innerHTML to element.\n * @param {ElementProperties} properties.styles - To set the some custom styles to element.\n * @param {ElementProperties} properties.attrs - To set the attributes to element.\n * @returns {any} ?\n * @private\n */\nexport function createElement(tagName, properties) {\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n *\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @returns {any} .\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n var regExp = RegExp;\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (isObject(ele)) {\n var curClass = getValue('attributes.className', ele);\n if (isNullOrUndefined(curClass)) {\n setValue('attributes.className', className, ele);\n }\n else if (!new regExp('\\\\b' + className + '\\\\b', 'i').test(curClass)) {\n setValue('attributes.className', curClass + ' ' + className, ele);\n }\n }\n else {\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n *\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @returns {any} .\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n var flag = isObject(ele);\n var canRemove = flag ? getValue('attributes.className', ele) : ele.className !== '';\n if (canRemove) {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n if (flag) {\n var classes_1 = getValue('attributes.className', ele);\n var classArr = classes_1.split(' ');\n var index = classArr.indexOf(className);\n if (index !== -1) {\n classArr.splice(index, 1);\n }\n setValue('attributes.className', classArr.join(' '), ele);\n }\n else {\n ele.classList.remove(className);\n }\n }\n }\n }\n return elements;\n}\n/**\n * The function used to get classlist.\n *\n * @param {string | string[]} classes - An element the need to check visibility\n * @returns {string[]} ?\n * @private\n */\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n *\n * @param {Element|Node} element - An element the need to check visibility\n * @returns {boolean} ?\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n *\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\n * @private\n */\nexport function prepend(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n *\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @param {boolean} isEval - ?\n * @returns {Element[] | NodeList} ?\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n if (fromElements instanceof NodeList) {\n while (fromElements.length > 0) {\n docFrag.appendChild(fromElements[0]);\n }\n }\n else {\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n }\n toElement.appendChild(docFrag);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n *\n * @param {Element} ele - An element is going to evaluate the script\n * @returns {void} ?\n */\nfunction executeScript(ele) {\n var eleArray = ele.querySelectorAll('script');\n eleArray.forEach(function (element) {\n var script = document.createElement('script');\n script.text = element.innerHTML;\n document.head.appendChild(script);\n detach(script);\n });\n}\n/**\n * The function used to remove the element from parentnode\n *\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @returns {any} ?\n * @private\n */\nexport function detach(element) {\n var parentNode = element.parentNode;\n if (parentNode) {\n return parentNode.removeChild(element);\n }\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n *\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @returns {void} ?\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n *\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {string} attributes - JSON Object that is going to as attributes.\n * @returns {Element} ?\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (isObject(ele)) {\n var iKey = key;\n if (key === 'tabindex') {\n iKey = 'tabIndex';\n }\n ele.attributes[\"\" + iKey] = attributes[\"\" + key];\n }\n else {\n ele.setAttribute(key, attributes[\"\" + key]);\n }\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {any} ?\n * @private\n */\nexport function select(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @param {Document|Element} context - It is an optional type, That specifies a Dom context.\n * @param {boolean} needsVDOM ?\n * @returns {HTMLElement[]} ?\n * @private\n */\nexport function selectAll(selector, context, needsVDOM) {\n if (context === void 0) { context = document; }\n selector = querySelectId(selector);\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * The function selects an id of element from the given context.\n *\n * @param {string} selector - Selector string need fetch element\n * @returns {string} ?\n * @private\n */\nfunction querySelectId(selector) {\n var charRegex = /(!|\"|\\$|%|&|'|\\(|\\)|\\*|\\/|:|;|<|=|\\?|@|\\]|\\^|`|{|}|\\||\\+|~)/g;\n if (selector.match(/#[0-9]/g) || selector.match(charRegex)) {\n var idList = selector.split(',');\n for (var i = 0; i < idList.length; i++) {\n var list = idList[parseInt(i.toString(), 10)].split(' ');\n for (var j = 0; j < list.length; j++) {\n if (list[parseInt(j.toString(), 10)].indexOf('#') > -1) {\n if (!list[parseInt(j.toString(), 10)].match(/\\[.*\\]/)) {\n var splitId = list[parseInt(j.toString(), 10)].split('#');\n if (splitId[1].match(/^\\d/) || splitId[1].match(charRegex)) {\n var setId = list[parseInt(j.toString(), 10)].split('.');\n setId[0] = setId[0].replace(/#/, '[id=\\'') + '\\']';\n list[parseInt(j.toString(), 10)] = setId.join('.');\n }\n }\n }\n }\n idList[parseInt(i.toString(), 10)] = list.join(' ');\n }\n return idList.join(',');\n }\n return selector;\n}\n/**\n * Returns single closest parent element based on class selector.\n *\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @returns {Element} ?\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n *\n * @param {Element|Node} element - An element that need to get siblings.\n * @returns {Element[]} ?\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n *\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @returns {string} ?\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal;\n var isObj = isObject(element);\n if (isObj) {\n attrVal = getValue('attributes.' + property, element);\n }\n else {\n attrVal = element.getAttribute(property);\n }\n if (isNullOrUndefined(attrVal) && value) {\n if (!isObj) {\n element.setAttribute(property, value.toString());\n }\n else {\n element.attributes[\"\" + property] = value;\n }\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n *\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @returns {void} ?\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n element.style[\"\" + key] = attrs[\"\" + key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n *\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @returns {void} ?\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n *\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @returns {void} ?\n * @private\n */\nexport function matches(element, selector) {\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n/**\n * Method to get the html text from DOM.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} innerHTML - String selector which element will satisfy.\n * @returns {void} ?\n * @private\n */\nexport function includeInnerHTML(ele, innerHTML) {\n ele.innerHTML = innerHTML;\n}\n/**\n * Method to get the containsclass.\n *\n * @param {HTMLElement} ele - Element to compare with the selector.\n * @param {string} className - String selector which element will satisfy.\n * @returns {any} ?\n * @private\n */\nexport function containsClass(ele, className) {\n if (isObject(ele)) {\n var regExp = RegExp;\n return new regExp('\\\\b' + className + '\\\\b', 'i').test(ele.attributes.className);\n }\n else {\n return ele.classList.contains(className);\n }\n}\n/**\n * Method to check whether the element matches the given selector.\n *\n * @param {Object} element - Element to compare with the selector.\n * @param {boolean} deep ?\n * @returns {any} ?\n * @private\n */\nexport function cloneNode(element, deep) {\n if (isObject(element)) {\n if (deep) {\n return extend({}, {}, element, true);\n }\n }\n else {\n return element.cloneNode(deep);\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, isBlazor, getValue, extend } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp(']');\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n *\n * @private\n * @returns {void} ?\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n *\n * @param {Object} options ?\n * @param {string} element ?\n */\n function Base(options, element) {\n this.isRendered = false;\n this.isComplexArraySetter = false;\n this.isServerRendered = false;\n this.allowServerDataBinding = true;\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.bulkChanges = {};\n this.refreshing = false;\n this.ignoreCollectionWatch = false;\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n *\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange ? - Specifies to true when we set properties.\n * @returns {void} ?\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n else if (isBlazor() && this.isRendered) {\n this.serverDataBind(prop);\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n /**\n * Calls for child element data bind\n *\n * @param {Object} obj ?\n * @param {Object} parent ?\n * @returns {void} ?\n */\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[\"\" + key] instanceof Array) {\n for (var _a = 0, _b = parent[\"\" + key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[\"\" + key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n *\n * @returns {void} ?\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n Base.prototype.serverDataBind = function (newChanges) {\n if (!isBlazor()) {\n return;\n }\n newChanges = newChanges ? newChanges : {};\n extend(this.bulkChanges, {}, newChanges, true);\n var sfBlazor = 'sfBlazor';\n if (this.allowServerDataBinding && window[\"\" + sfBlazor].updateModel) {\n window[\"\" + sfBlazor].updateModel(this);\n this.bulkChanges = {};\n }\n };\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (isBlazor()) {\n var newChanges = {};\n newChanges[\"\" + key] = newValue;\n this.serverDataBind(newChanges);\n }\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[\"\" + key] = oldValue;\n this.changedProperties[\"\" + key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n *\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} handler - Specifies the call to run when the event occurs.\n * @returns {void} ?\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n *\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} handler - Specifies the function to remove\n * @returns {void} ?\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n *\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it failured to call.\n * @returns {void} ?\n */\n Base.prototype.trigger = function (eventName, eventProp, successHandler, errorHandler) {\n var _this = this;\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n var data = this.modelObserver.notify(eventName, eventProp, successHandler, errorHandler);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n var blazor = 'Blazor';\n if (window[\"\" + blazor]) {\n var promise = handler.call(this, eventProp);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n data = promise;\n }\n else {\n promise.then(function (data) {\n if (successHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ?\n JSON.parse(data) : data;\n successHandler.call(_this, data);\n }\n }).catch(function (data) {\n if (errorHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ? JSON.parse(data) : data;\n errorHandler.call(_this, data);\n }\n });\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n else {\n handler.call(this, eventProp);\n if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n return data;\n }\n };\n /**\n * To maintain instance in base class\n *\n * @returns {void} ?\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-lib', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n *\n * @returns {void} ?\n */\n Base.prototype.destroy = function () {\n var _this = this;\n // eslint-disable-next-line camelcase\n this.element.ej2_instances =\n this.element.ej2_instances ?\n this.element.ej2_instances.filter(function (i) {\n if (proxyToRaw) {\n return proxyToRaw(i) !== proxyToRaw(_this);\n }\n return i !== _this;\n })\n : [];\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n *\n * @param {HTMLElement} elem Specifies the HTMLElement or element id string.\n * @param {string} comp Specifies the component module name or Component.\n * @returns {any} ?\n */\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < ele.ej2_instances.length; i++) {\n instance = ele.ej2_instances[parseInt(i.toString(), 10)];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n/**\n * Function to remove the child instances.\n *\n * @param {HTMLElement} element ?\n * @returns {void} ?\n * @private\n */\nexport function removeChildInstance(element) {\n var childEle = [].slice.call(element.getElementsByClassName('e-control'));\n for (var i = 0; i < childEle.length; i++) {\n var compName = childEle[parseInt(i.toString(), 10)].classList[1].split('e-')[1];\n var compInstance = getComponent(childEle[parseInt(i.toString(), 10)], compName);\n if (!isUndefined(compInstance)) {\n compInstance.destroy();\n }\n }\n}\nexport var proxyToRaw;\nexport var setProxyToRaw = function (toRaw) { proxyToRaw = toRaw; };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n *\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type ?\n * @returns {ClassObject} ?\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!Object.prototype.hasOwnProperty.call(instance.properties, curKey) || !(instance.properties[\"\" + curKey] instanceof type)) {\n instance.properties[\"\" + curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[\"\" + curKey];\n}\n/**\n * Returns object array\n *\n * @param {ClassObject} instance ?\n * @param {string} curKey ?\n * @param {Object[]} defaultValue ?\n * @param {Object} type ?\n * @param {boolean} isSetter ?\n * @param {boolean} isFactory ?\n * @returns {Object[]} ?\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue ? defaultValue.length : 0;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[parseInt(i.toString(), 10)], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[parseInt(i.toString(), 10)], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[parseInt(i.toString(), 10)], false]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!Object.prototype.hasOwnProperty.call(this.properties, curKey)) {\n this.properties[\"\" + curKey] = defaultValue;\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n * Set the properties for the object\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @returns {void} ?\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[\"\" + curKey] !== newValue) {\n var oldVal = Object.prototype.hasOwnProperty.call(this.properties, curKey) ? this.properties[\"\" + curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[\"\" + curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (Object.prototype.hasOwnProperty.call(this.properties, curKey)) {\n return this.properties[\"\" + curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\n/**\n *\n * @param {Object} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n var _this = this;\n if (!Object.prototype.hasOwnProperty.call(this.properties, curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[\"\" + curKey] = defCollection;\n }\n var ignore = ((this.controlParent !== undefined && this.controlParent.ignoreCollectionWatch)\n || this.ignoreCollectionWatch);\n if (!Object.prototype.hasOwnProperty.call(this.properties[\"\" + curKey], 'push') && !ignore) {\n ['push', 'pop'].forEach(function (extendFunc) {\n var descriptor = {\n value: complexArrayDefinedCallback(extendFunc, curKey, type, _this.properties[\"\" + curKey]).bind(_this),\n configurable: true\n };\n Object.defineProperty(_this.properties[\"\" + curKey], extendFunc, descriptor);\n });\n }\n if (!Object.prototype.hasOwnProperty.call(this.properties[\"\" + curKey], 'isComplexArray')) {\n Object.defineProperty(this.properties[\"\" + curKey], 'isComplexArray', { value: true });\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n this.isComplexArraySetter = true;\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.isComplexArraySetter = false;\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[\"\" + curKey] = newValCollection;\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {Object[]} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = Object.prototype.hasOwnProperty.call(this.properties, curKey) ? this.properties[\"\" + curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[\"\" + curKey] = newValCollection;\n };\n}\n/**\n *\n * @param {Object[]} defaultValue ?\n * @param {string} curKey ?\n * @param {FunctionConstructor} type ?\n * @returns {void} ?\n */\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!Object.prototype.hasOwnProperty.call(this.properties, curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[\"\" + curKey] = defCollection;\n }\n return this.properties[\"\" + curKey];\n };\n}\n/**\n *\n * @param {string} dFunc ?\n * @param {string} curKey ?\n * @param {Object} type ?\n * @param {Object} prop ?\n * @returns {Object} ?\n */\nfunction complexArrayDefinedCallback(dFunc, curKey, type, prop) {\n return function () {\n var newValue = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newValue[_i] = arguments[_i];\n }\n var keyString = this.propName ? this.getParentKey() + '.' + curKey + '-' : curKey + '-';\n switch (dFunc) {\n case 'push':\n for (var i = 0; i < newValue.length; i++) {\n var newValueParse = newValue[parseInt(i.toString(), 10)];\n Array.prototype[\"\" + dFunc].apply(prop, [newValueParse]);\n var model = getArrayModel(keyString + (prop.length - 1), newValueParse, !this.controlParent, dFunc);\n this.serverDataBind(model, newValue[parseInt(i.toString(), 10)], false, dFunc);\n }\n break;\n case 'pop': {\n Array.prototype[\"\" + dFunc].apply(prop);\n var model = getArrayModel(keyString + prop.length, null, !this.controlParent, dFunc);\n this.serverDataBind(model, { ejsAction: 'pop' }, false, dFunc);\n break;\n }\n }\n return prop;\n };\n}\n/**\n *\n * @param {string} keyString ?\n * @param {Object} value ?\n * @param {boolean} isControlParent ?\n * @param {string} arrayFunction ?\n * @returns {Object} ?\n */\nfunction getArrayModel(keyString, value, isControlParent, arrayFunction) {\n var modelObject = keyString;\n if (isControlParent) {\n modelObject = {};\n modelObject[\"\" + keyString] = value;\n if (value && typeof value === 'object') {\n var action = 'ejsAction';\n modelObject[\"\" + keyString][\"\" + action] = arrayFunction;\n }\n }\n return modelObject;\n}\n/**\n * Method used to create property. General syntax below.\n *\n * @param {Object} defaultValue - Specifies the default value of property.\n * @returns {PropertyDecorator} ?\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n *\n * @param {Function} type - Specifies the class factory type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n *\n * @param {any} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyDecorator} ?\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n *\n * @param {Function} type - Specifies the class type of complex object.\n * @returns {PropertyCollectionInfo} ?\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n *\n * @returns {PropertyDecorator} ?\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[\"\" + key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[\"\" + key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * @param {Function} classConstructor ?\n * @returns {void} ?\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n *\n * @param {BuildInfo} target ?\n * @param {string} key ?\n * @param {string} propertyType ?\n * @param {Object} defaultValue ?\n * @param {Function} type ?\n * @returns {void} ?\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n}\n/**\n * Returns an object containing the builder properties\n *\n * @param {Function} component ?\n * @returns {Object} ?\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[\"\" + key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n *\n * @param {any} component -specifies the target component for which builder to be created.\n * @returns {Object} ?\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!Object.prototype.hasOwnProperty.call(builderFunction, 'create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n *\n * @param {Object} context ?\n * @param {string} prefix ?\n * @returns {ParentOption} ?\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (Object.prototype.hasOwnProperty.call(context, 'parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n *\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @returns {void} ?\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n *\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @returns {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (animationMode === 'Disable' || animationMode === GlobalAnimationMode.Disable) {\n if (model.begin) {\n model.begin.call(this, model);\n }\n if (model.end) {\n model.end.call(this, model);\n }\n }\n else {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n }\n };\n /**\n * Triggers animation\n *\n * @param {AnimationModel} model ?\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element\n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame\n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n //startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n *\n * @param {AnimationModel} options ?\n * @returns {AnimationModel} ?\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n * @param {AnimationModel} newProp ?\n * @param {AnimationModel} oldProp ?\n * @returns {void} ?\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n *\n * @private\n * @returns {void} ?\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n *\n * @private\n * @returns {void} ?\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n *
\n * \n * ```\n *\n * @private\n * @param {HTMLElement} element - Target element\n * @param {RippleOptions} rippleOptions - Ripple options .\n * @param {Function} done .\n * @returns {void} .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return (function () {\n // do nothing.\n });\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\n/**\n * Handler for ripple model\n *\n * @param {RippleOptions} rippleOptions ?\n * @returns {RippleOptions} ?\n */\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n *\n * @param {MouseEvent} e ?\n * @returns {void} ?\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n *\n * @param {MouseEvent} e ?\n * @param {RippleArgs} eventArgs ?\n * @returns {void} ?\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n *\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean} ?\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n/**\n * Defines the Modes of Global animation.\n *\n * @private\n */\nexport var animationMode;\n/**\n * This method is used to enable or disable the animation for all components.\n *\n * @param {string|GlobalAnimationMode} value - Specifies the value to enable or disable the animation for all components. When set to 'enable', it enables the animation for all components, regardless of the individual component's animation settings. When set to 'disable', it disables the animation for all components, regardless of the individual component's animation settings.\n * @returns {void}\n */\nexport function setGlobalAnimation(value) {\n animationMode = value;\n}\n/**\n * Defines the global animation modes for all components.\n */\nexport var GlobalAnimationMode;\n(function (GlobalAnimationMode) {\n /**\n * Defines the global animation mode as Default. Animation is enabled or disabled based on the component's animation settings.\n */\n GlobalAnimationMode[\"Default\"] = \"Default\";\n /**\n * Defines the global animation mode as Enable. Enables the animation for all components, regardless of the individual component's animation settings.\n */\n GlobalAnimationMode[\"Enable\"] = \"Enable\";\n /**\n * Defines the global animation mode as Disable. Disables the animation for all components, regardless of the individual component's animation settings.\n */\n GlobalAnimationMode[\"Disable\"] = \"Disable\";\n})(GlobalAnimationMode || (GlobalAnimationMode = {}));\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Module loading operations\n */\nimport { createInstance, setValue, getValue, deleteObject } from './util';\nvar MODULE_SUFFIX = 'Module';\nvar ModuleLoader = /** @class */ (function () {\n function ModuleLoader(parent) {\n this.loadedModules = [];\n this.parent = parent;\n }\n /**\n * Inject required modules in component library\n *\n * @returns {void} ?\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @param {Function[]} moduleList - Array of modules to be injected from sample side\n */\n ModuleLoader.prototype.inject = function (requiredModules, moduleList) {\n var reqLength = requiredModules.length;\n if (reqLength === 0) {\n this.clean();\n return;\n }\n if (this.loadedModules.length) {\n this.clearUnusedModule(requiredModules);\n }\n for (var i = 0; i < reqLength; i++) {\n var modl = requiredModules[parseInt(i.toString(), 10)];\n for (var _i = 0, moduleList_1 = moduleList; _i < moduleList_1.length; _i++) {\n var module = moduleList_1[_i];\n var modName = modl.member;\n if (module && module.prototype.getModuleName() === modl.member && !this.isModuleLoaded(modName)) {\n var moduleObject = createInstance(module, modl.args);\n var memberName = this.getMemberName(modName);\n if (modl.isProperty) {\n setValue(memberName, module, this.parent);\n }\n else {\n setValue(memberName, moduleObject, this.parent);\n }\n var loadedModule = modl;\n loadedModule.member = memberName;\n this.loadedModules.push(loadedModule);\n }\n }\n }\n };\n /**\n * To remove the created object while destroying the control\n *\n * @returns {void}\n */\n ModuleLoader.prototype.clean = function () {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var modules = _a[_i];\n if (!modules.isProperty) {\n getValue(modules.member, this.parent).destroy();\n }\n }\n this.loadedModules = [];\n };\n /**\n * Returns the array of modules that are not loaded in the component library.\n *\n * @param {ModuleDeclaration[]} requiredModules - Array of modules to be required\n * @returns {ModuleDeclaration[]} ?\n * @private\n */\n ModuleLoader.prototype.getNonInjectedModules = function (requiredModules) {\n var _this = this;\n return requiredModules.filter(function (module) { return !_this.isModuleLoaded(module.member); });\n };\n /**\n * Removes all unused modules\n *\n * @param {ModuleDeclaration[]} moduleList ?\n * @returns {void} ?\n */\n ModuleLoader.prototype.clearUnusedModule = function (moduleList) {\n var _this = this;\n var usedModules = moduleList.map(function (arg) { return _this.getMemberName(arg.member); });\n var removableModule = this.loadedModules.filter(function (module) {\n return usedModules.indexOf(module.member) === -1;\n });\n for (var _i = 0, removableModule_1 = removableModule; _i < removableModule_1.length; _i++) {\n var mod = removableModule_1[_i];\n if (!mod.isProperty) {\n getValue(mod.member, this.parent).destroy();\n }\n this.loadedModules.splice(this.loadedModules.indexOf(mod), 1);\n deleteObject(this.parent, mod.member);\n }\n };\n /**\n * To get the name of the member.\n *\n * @param {string} name ?\n * @returns {string} ?\n */\n ModuleLoader.prototype.getMemberName = function (name) {\n return name[0].toLowerCase() + name.substring(1) + MODULE_SUFFIX;\n };\n /**\n * Returns boolean based on whether the module specified is loaded or not\n *\n * @param {string} modName ?\n * @returns {boolean} ?\n */\n ModuleLoader.prototype.isModuleLoaded = function (modName) {\n for (var _i = 0, _a = this.loadedModules; _i < _a.length; _i++) {\n var mod = _a[_i];\n if (mod.member === this.getMemberName(modName)) {\n return true;\n }\n }\n return false;\n };\n return ModuleLoader;\n}());\nexport { ModuleLoader };\n","import { createElement } from './dom';\nimport { getValue, containerObject, setValue, isNullOrUndefined } from './util';\nexport var componentList = ['grid', 'pivotview', 'treegrid', 'spreadsheet', 'rangeNavigator', 'DocumentEditor', 'listbox', 'inplaceeditor', 'PdfViewer', 'richtexteditor', 'DashboardLayout', 'chart', 'stockChart', 'circulargauge', 'diagram', 'heatmap', 'lineargauge', 'maps', 'slider', 'smithchart', 'barcode', 'sparkline', 'treemap', 'bulletChart', 'kanban', 'daterangepicker', 'schedule', 'gantt', 'signature', 'query-builder', 'drop-down-tree', 'carousel', 'filemanager', 'uploader', 'accordion', 'tab', 'treeview'];\nvar bypassKey = [115, 121, 110, 99, 102, 117, 115, 105,\n 111, 110, 46, 105, 115, 76, 105, 99, 86, 97, 108,\n 105, 100, 97, 116, 101, 100];\nvar accountURL;\n/**\n * License validation module\n *\n * @private\n */\nvar LicenseValidator = /** @class */ (function () {\n function LicenseValidator(key) {\n this.isValidated = false;\n this.isLicensed = true;\n this.version = '26';\n this.platform = /JavaScript|ASPNET|ASPNETCORE|ASPNETMVC|FileFormats|essentialstudio/i;\n this.errors = {\n noLicense: 'This application was built using a trial version of Syncfusion Essential Studio.' +\n ' To remove the license validation message permanently, a valid license key must be included.',\n trailExpired: 'This application was built using a trial version of Syncfusion Essential Studio.' +\n ' To remove the license validation message permanently, a valid license key must be included.',\n versionMismatched: 'The included Syncfusion license key is invalid.',\n platformMismatched: 'The included Syncfusion license key is invalid.',\n invalidKey: 'The included Syncfusion license key is invalid.'\n };\n /**\n * To manage licensing operation.\n */\n this.manager = (function () {\n var licKey = null;\n /**\n * Sets the license key.\n *\n * @param {string} key - Specifies the license key.\n * @returns {void}\n */\n function set(key) { licKey = key; }\n /**\n * Gets the license key.\n *\n * @returns {string} -Gets the license key.\n */\n function get() { return licKey; }\n return {\n setKey: set,\n getKey: get\n };\n })();\n /**\n * To manage npx licensing operation.\n */\n this.npxManager = (function () {\n var npxLicKey = 'npxKeyReplace';\n /**\n * Gets the license key.\n *\n * @returns {string} - Gets the license key.\n */\n function get() { return npxLicKey; }\n return {\n getKey: get\n };\n })();\n this.manager.setKey(key);\n }\n /**\n * To validate the provided license key.\n *\n * @returns {boolean} ?\n */\n LicenseValidator.prototype.validate = function () {\n var contentKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,\n 108, 105, 99, 101, 110, 115, 101, 67, 111, 110, 116, 101, 110, 116];\n var URLKey = [115, 121, 110, 99, 102, 117, 115, 105, 111, 110, 46,\n 99, 108, 97, 105, 109, 65, 99, 99, 111, 117, 110, 116, 85, 82, 76];\n if (!this.isValidated && (containerObject && !getValue(convertToChar(bypassKey), containerObject) && !getValue('Blazor', containerObject))) {\n var validateMsg = void 0;\n var validateURL = void 0;\n if ((this.manager && this.manager.getKey()) || (this.npxManager && this.npxManager.getKey() !== 'npxKeyReplace')) {\n var result = this.getInfoFromKey();\n if (result && result.length) {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var res = result_1[_i];\n if (!this.platform.test(res.platform) || res.invalidPlatform) {\n validateMsg = this.errors.platformMismatched;\n }\n else if (res.version.indexOf(this.version) === -1) {\n validateMsg = this.errors.versionMismatched;\n validateMsg = validateMsg.replace('##LicenseVersion', res.version);\n validateMsg = validateMsg.replace('##Requireversion', this.version + '.x');\n }\n else if (res.expiryDate) {\n var expDate = new Date(res.expiryDate);\n var currDate = new Date();\n if (expDate !== currDate && expDate < currDate) {\n validateMsg = this.errors.trailExpired;\n }\n else {\n break;\n }\n }\n }\n }\n else {\n validateMsg = this.errors.invalidKey;\n }\n }\n else {\n var licenseContent = getValue(convertToChar(contentKey), containerObject);\n validateURL = getValue(convertToChar(URLKey), containerObject);\n if (licenseContent && licenseContent !== '') {\n validateMsg = licenseContent;\n }\n else {\n validateMsg = this.errors.noLicense;\n }\n }\n if (validateMsg && typeof document !== 'undefined' && !isNullOrUndefined(document)) {\n accountURL = (validateURL && validateURL !== '') ? validateURL : 'https://www.syncfusion.com/account/claim-license-key?pl=SmF2YVNjcmlwdA==&vs=MjY=&utm_source=es_license_validation_banner&utm_medium=listing&utm_campaign=license-information';\n var errorDiv = createElement('div', {\n innerHTML: \"\" + validateMsg + ' ' + '
Claim your free account'\n });\n errorDiv.setAttribute('style', \"position: fixed;\\n top: 10px;\\n left: 10px;\\n right: 10px;\\n font-size: 14px;\\n background: #EEF2FF;\\n color: #222222;\\n z-index: 999999999;\\n text-align: left;\\n border: 1px solid #EEEEEE;\\n padding: 10px 11px 10px 50px;\\n border-radius: 8px;\\n font-family: Helvetica Neue, Helvetica, Arial;\");\n document.body.appendChild(errorDiv);\n this.isLicensed = false;\n }\n this.isValidated = true;\n setValue(convertToChar(bypassKey), this.isValidated, containerObject);\n }\n return this.isLicensed;\n };\n LicenseValidator.prototype.getDecryptedData = function (key) {\n try {\n return atob(key);\n }\n catch (error) {\n return '';\n }\n };\n /**\n * Get license information from key.\n *\n * @returns {IValidator} - Get license information from key.\n */\n LicenseValidator.prototype.getInfoFromKey = function () {\n try {\n var licKey = '';\n var pkey = [5439488, 7929856, 5111808, 6488064, 4587520, 7667712, 5439488,\n 6881280, 5177344, 7208960, 4194304, 4456448, 6619136, 7733248, 5242880, 7077888,\n 6356992, 7602176, 4587520, 7274496, 7471104, 7143424];\n var decryptedStr = [];\n var resultArray = [];\n var invalidPlatform = false;\n var isNpxKey = false;\n if (this.manager.getKey()) {\n licKey = this.manager.getKey();\n }\n else {\n isNpxKey = true;\n licKey = this.npxManager.getKey().split('npxKeyReplace')[1];\n }\n var licKeySplit = licKey.split(';');\n for (var _i = 0, licKeySplit_1 = licKeySplit; _i < licKeySplit_1.length; _i++) {\n var lKey = licKeySplit_1[_i];\n var decodeStr = this.getDecryptedData(lKey);\n if (!decodeStr) {\n continue;\n }\n var k = 0;\n var buffr = '';\n if (!isNpxKey) {\n for (var i = 0; i < decodeStr.length; i++, k++) {\n if (k === pkey.length) {\n k = 0;\n }\n var c = decodeStr.charCodeAt(i);\n buffr += String.fromCharCode(c ^ (pkey[parseInt(k.toString(), 10)] >> 16));\n }\n }\n else {\n var charKey = decodeStr[decodeStr.length - 1];\n var decryptedKey = [];\n for (var i = 0; i < decodeStr.length; i++) {\n decryptedKey[parseInt(i.toString(), 10)] = decodeStr[parseInt(i.toString(), 10)].charCodeAt(0)\n - charKey.charCodeAt(0);\n }\n for (var i = 0; i < decryptedKey.length; i++) {\n buffr += String.fromCharCode(decryptedKey[parseInt(i.toString(), 10)]);\n }\n }\n if (this.platform.test(buffr)) {\n decryptedStr = buffr.split(';');\n invalidPlatform = false;\n // checked the length to verify the key in proper strucutre\n if (decryptedStr.length > 3) {\n resultArray.push({ platform: decryptedStr[0],\n version: decryptedStr[1],\n expiryDate: decryptedStr[2] });\n }\n }\n else if (buffr && buffr.split(';').length > 3) {\n invalidPlatform = true;\n }\n }\n if (invalidPlatform && !resultArray.length) {\n return [{ invalidPlatform: invalidPlatform }];\n }\n else {\n return resultArray.length ? resultArray : null;\n }\n }\n catch (error) {\n return null;\n }\n };\n return LicenseValidator;\n}());\nvar licenseValidator = new LicenseValidator();\n/**\n * Converts the given number to characters.\n *\n * @param {number} cArr - Specifies the license key as number.\n * @returns {string} ?\n */\nfunction convertToChar(cArr) {\n var ret = '';\n for (var _i = 0, cArr_1 = cArr; _i < cArr_1.length; _i++) {\n var arr = cArr_1[_i];\n ret += String.fromCharCode(arr);\n }\n return ret;\n}\n/**\n * To set license key.\n *\n * @param {string} key - license key\n * @returns {void}\n */\nexport function registerLicense(key) {\n licenseValidator = new LicenseValidator(key);\n}\nexport var validateLicense = function (key) {\n if (key) {\n registerLicense(key);\n }\n return licenseValidator.validate();\n};\nexport var getVersion = function () {\n return licenseValidator.version;\n};\n// Method for create overlay over the sample\nexport var createLicenseOverlay = function () {\n var bannerTemplate = \"\\n
\\n
\\n
\\n \\n
\\n
Claim your FREE account and get a key in less than a minute
\\n
    \\n
  • Access to a 30-day free trial of any of our products.
  • \\n
  • Access to 24x5 support by developers via the support tickets, forum, feature & feedback page and chat.
  • \\n
  • 200+ ebooks on the latest technologies, industry trends, and research topics.\\n
  • \\n
  • Largest collection of over 7,000 flat and wireframe icons for free with Syncfusion Metro Studio.
  • \\n
  • Free and unlimited access to Syncfusion technical blogs and whitepapers.
  • \\n
\\n
Syncfusion is trusted by 29,000+ businesses worldwide
\\n \\n Claim your FREE account\\n
have a Syncfusion account? Sign In
\\n
\\n
\";\n if (typeof document !== 'undefined' && !isNullOrUndefined(document)) {\n var errorBackground = createElement('div', {\n innerHTML: bannerTemplate\n });\n document.body.appendChild(errorBackground);\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { getValue, setValue, merge, isBlazor } from './util';\nimport { Base } from './base';\n/**\n * To detect the changes for inner properties.\n *\n * @private\n * @returns {void} ?\n */\nvar ChildProperty = /** @class */ (function () {\n function ChildProperty(parent, propName, defaultValue, isArray) {\n this.isComplexArraySetter = false;\n this.properties = {};\n this.changedProperties = {};\n this.childChangedProperties = {};\n this.oldProperties = {};\n this.finalUpdate = function () { };\n this.callChildDataBind = getValue('callChildDataBind', Base);\n this.parentObj = parent;\n this.controlParent = this.parentObj.controlParent || this.parentObj;\n this.propName = propName;\n this.isParentArray = isArray;\n this.setProperties(defaultValue, true);\n }\n /**\n * Updates the property changes\n *\n * @param {boolean} val ?\n * @param {string} propName ?\n * @returns {void} ?\n */\n ChildProperty.prototype.updateChange = function (val, propName) {\n if (val === true) {\n this.parentObj.childChangedProperties[\"\" + propName] = val;\n }\n else {\n delete this.parentObj.childChangedProperties[\"\" + propName];\n }\n if (this.parentObj.updateChange) {\n this.parentObj.updateChange(val, this.parentObj.propName);\n }\n };\n /**\n * Updates time out duration\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.updateTimeOut = function () {\n if (this.parentObj.updateTimeOut) {\n this.parentObj.finalUpdate();\n this.parentObj.updateTimeOut();\n }\n else {\n var changeTime_1 = setTimeout(this.parentObj.dataBind.bind(this.parentObj));\n var clearUpdate = function () {\n clearTimeout(changeTime_1);\n };\n this.finalUpdate = clearUpdate;\n }\n };\n /**\n * Clears changed properties\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.clearChanges = function () {\n this.finalUpdate();\n this.updateChange(false, this.propName);\n this.oldProperties = {};\n this.changedProperties = {};\n };\n /**\n * Set property changes\n *\n * @param {Object} prop ?\n * @param {boolean} muteOnChange ?\n * @returns {void} ?\n */\n ChildProperty.prototype.setProperties = function (prop, muteOnChange) {\n if (muteOnChange === true) {\n merge(this, prop);\n this.updateChange(false, this.propName);\n this.clearChanges();\n }\n else {\n merge(this, prop);\n }\n };\n /**\n * Binds data\n *\n * @returns {void} ?\n */\n ChildProperty.prototype.dataBind = function () {\n this.callChildDataBind(this.childChangedProperties, this);\n if (this.isParentArray) {\n var curIndex = this.parentObj[this.propName].indexOf(this);\n if (Object.keys(this.changedProperties).length) {\n setValue(this.propName + '.' + curIndex, this.changedProperties, this.parentObj.changedProperties);\n setValue(this.propName + '.' + curIndex, this.oldProperties, this.parentObj.oldProperties);\n }\n }\n else {\n this.parentObj.changedProperties[this.propName] = this.changedProperties;\n this.parentObj.oldProperties[this.propName] = this.oldProperties;\n }\n this.clearChanges();\n };\n /**\n * Saves changes to newer values\n *\n * @param {string} key ?\n * @param {Object} newValue ?\n * @param {Object} oldValue ?\n * @param {boolean} restrictServerDataBind ?\n * @returns {void} ?\n */\n ChildProperty.prototype.saveChanges = function (key, newValue, oldValue, restrictServerDataBind) {\n if (this.controlParent.isProtectedOnChange) {\n return;\n }\n if (!restrictServerDataBind) {\n this.serverDataBind(key, newValue, true);\n }\n this.oldProperties[\"\" + key] = oldValue;\n this.changedProperties[\"\" + key] = newValue;\n this.updateChange(true, this.propName);\n this.finalUpdate();\n this.updateTimeOut();\n };\n ChildProperty.prototype.serverDataBind = function (key, value, isSaveChanges, action) {\n if (isBlazor() && !this.parentObj.isComplexArraySetter) {\n var parent_1;\n var newChanges = {};\n var parentKey = isSaveChanges ? this.getParentKey(true) + '.' + key : key;\n /* istanbul ignore else */\n if (parentKey.indexOf('.') !== -1) {\n var complexKeys = parentKey.split('.');\n parent_1 = newChanges;\n for (var i = 0; i < complexKeys.length; i++) {\n var isFinal = i === complexKeys.length - 1;\n parent_1[complexKeys[parseInt(i.toString(), 10)]] = isFinal ? value : {};\n parent_1 = isFinal ? parent_1 : parent_1[complexKeys[parseInt(i.toString(), 10)]];\n }\n }\n else {\n newChanges[\"\" + parentKey] = {};\n parent_1 = newChanges[\"\" + parentKey];\n newChanges[\"\" + parentKey][\"\" + key] = value;\n }\n /* istanbul ignore next */\n if (this.isParentArray) {\n var actionProperty = 'ejsAction';\n parent_1[\"\" + actionProperty] = action ? action : 'none';\n }\n this.controlParent.serverDataBind(newChanges);\n }\n };\n ChildProperty.prototype.getParentKey = function (isSaveChanges) {\n var index = '';\n var propName = this.propName;\n /* istanbul ignore next */\n if (this.isParentArray) {\n index = this.parentObj[this.propName].indexOf(this);\n var valueLength = this.parentObj[this.propName].length;\n valueLength = isSaveChanges ? valueLength : (valueLength > 0 ? valueLength - 1 : 0);\n index = index !== -1 ? '-' + index : '-' + valueLength;\n propName = propName + index;\n }\n if (this.controlParent !== this.parentObj) {\n propName = this.parentObj.getParentKey() + '.' + this.propName + index;\n }\n return propName;\n };\n return ChildProperty;\n}());\nexport { ChildProperty };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\nimport { isUndefined, getValue, isNullOrUndefined, setValue, uniqueID, isBlazor } from './util';\nimport { ModuleLoader } from './module-loader';\nimport { Base } from './base';\nimport { Observer } from './observer';\nimport { ChildProperty } from './child-property';\nimport { Property, NotifyPropertyChanges } from './notify-property-change';\nimport { onIntlChange, rightToLeft, defaultCulture } from './internationalization';\nimport { createElement, addClass, removeClass, select } from './dom';\nimport { validateLicense, createLicenseOverlay, componentList } from './validate-lic';\nvar componentCount = 0;\nvar lastPageID;\nvar lastHistoryLen = 0;\n// Decalre the static variable to count the instance\nvar instancecount = 0;\n// Decalre the static variable to find if control limit exceed or not\nvar isvalid = true;\n// We have added styles to inline type so here declare the static variable to detect if banner is added or not\nvar isBannerAdded = false;\nexport var versionBasedStatePersistence = false;\n/**\n * To enable or disable version based statePersistence functionality for all components globally.\n *\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable versionBasedStatePersistence option.\n * @returns {void}\n */\nexport function enableVersionBasedPersistence(status) {\n versionBasedStatePersistence = status;\n}\n/**\n * Base class for all Essential JavaScript components\n */\nvar Component = /** @class */ (function (_super) {\n __extends(Component, _super);\n /**\n * Initialize the constructor for component base\n *\n * @param {Object} options ?\n * @param {string} selector ?\n */\n function Component(options, selector) {\n var _this = _super.call(this, options, selector) || this;\n _this.randomId = uniqueID();\n /**\n * string template option for Blazor template rendering\n *\n * @private\n */\n _this.isStringTemplate = false;\n _this.needsID = false;\n _this.isReactHybrid = false;\n _this.isAngular = false;\n _this.isReact = false;\n _this.isVue = false;\n if (isNullOrUndefined(_this.enableRtl)) {\n _this.setProperties({ 'enableRtl': rightToLeft }, true);\n }\n if (isNullOrUndefined(_this.locale)) {\n _this.setProperties({ 'locale': defaultCulture }, true);\n }\n _this.moduleLoader = new ModuleLoader(_this);\n _this.localObserver = new Observer(_this);\n onIntlChange.on('notifyExternalChange', _this.detectFunction, _this, _this.randomId);\n // Based on the considered control list we have count the instance\n if (typeof window !== 'undefined' && typeof document !== 'undefined' && !validateLicense()) {\n if (componentList.indexOf(_this.getModuleName()) !== -1) {\n instancecount = instancecount + 1;\n if (instancecount > 5) {\n isvalid = false;\n }\n }\n }\n if (!isUndefined(selector)) {\n _this.appendTo();\n }\n return _this;\n }\n Component.prototype.requiredModules = function () {\n return [];\n };\n /**\n * Destroys the sub modules while destroying the widget\n *\n * @returns {void} ?\n */\n Component.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n if (this.enablePersistence) {\n this.setPersistData();\n this.detachUnloadEvent();\n }\n this.localObserver.destroy();\n if (this.refreshing) {\n return;\n }\n removeClass([this.element], ['e-control']);\n this.trigger('destroyed', { cancel: false });\n _super.prototype.destroy.call(this);\n this.moduleLoader.clean();\n onIntlChange.off('notifyExternalChange', this.detectFunction, this.randomId);\n };\n /**\n * Applies all the pending property changes and render the component again.\n *\n * @returns {void} ?\n */\n Component.prototype.refresh = function () {\n this.refreshing = true;\n this.moduleLoader.clean();\n this.destroy();\n this.clearChanges();\n this.localObserver = new Observer(this);\n this.preRender();\n this.injectModules();\n this.render();\n this.refreshing = false;\n };\n Component.prototype.accessMount = function () {\n if (this.mount && !this.isReactHybrid) {\n this.mount();\n }\n };\n /**\n * Returns the route element of the component\n *\n * @returns {HTMLElement} ?\n */\n Component.prototype.getRootElement = function () {\n if (this.isReactHybrid) {\n return this.actualElement;\n }\n else {\n return this.element;\n }\n };\n /**\n * Returns the persistence data for component\n *\n * @returns {any} ?\n */\n Component.prototype.getLocalData = function () {\n var eleId = this.getModuleName() + this.element.id;\n if (versionBasedStatePersistence) {\n return window.localStorage.getItem(eleId + this.ej2StatePersistenceVersion);\n }\n else {\n return window.localStorage.getItem(eleId);\n }\n };\n /**\n * Adding unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.attachUnloadEvent = function () {\n this.handleUnload = this.handleUnload.bind(this);\n window.addEventListener('pagehide', this.handleUnload);\n };\n /**\n * Handling unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.handleUnload = function () {\n this.setPersistData();\n };\n /**\n * Removing unload event to persist data when enable persistence true\n *\n * @returns {void}\n */\n Component.prototype.detachUnloadEvent = function () {\n window.removeEventListener('pagehide', this.handleUnload);\n };\n /**\n * Appends the control within the given HTML element\n *\n * @param {string | HTMLElement} selector - Target element where control needs to be appended\n * @returns {void} ?\n */\n Component.prototype.appendTo = function (selector) {\n if (!isNullOrUndefined(selector) && typeof (selector) === 'string') {\n this.element = select(selector, document);\n }\n else if (!isNullOrUndefined(selector)) {\n this.element = selector;\n }\n if (!isNullOrUndefined(this.element)) {\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-control', moduleClass]);\n this.isProtectedOnChange = false;\n if (this.needsID && !this.element.id) {\n this.element.id = this.getUniqueID(this.getModuleName());\n }\n if (this.enablePersistence) {\n this.mergePersistData();\n this.attachUnloadEvent();\n }\n var inst = getValue('ej2_instances', this.element);\n if (!inst || inst.indexOf(this) === -1) {\n _super.prototype.addInstance.call(this);\n }\n this.preRender();\n this.injectModules();\n // Throw a warning for the required modules to be injected.\n var ignoredComponents = {\n schedule: 'all',\n diagram: 'all',\n PdfViewer: 'all',\n grid: ['logger'],\n richtexteditor: ['link', 'table', 'image', 'audio', 'video', 'formatPainter', 'emojiPicker', 'pasteCleanup', 'htmlEditor', 'toolbar'],\n treegrid: ['filter'],\n gantt: ['tooltip'],\n chart: ['Export', 'Zoom'],\n accumulationchart: ['Export'],\n 'query-builder': 'all'\n };\n var component = this.getModuleName();\n if (this.requiredModules && (!ignoredComponents[\"\" + component] || ignoredComponents[\"\" + component] !== 'all')) {\n var modulesRequired = this.requiredModules();\n for (var _i = 0, _a = this.moduleLoader.getNonInjectedModules(modulesRequired); _i < _a.length; _i++) {\n var module = _a[_i];\n var moduleName = module.name ? module.name : module.member;\n if (ignoredComponents[\"\" + component] && ignoredComponents[\"\" + component].indexOf(module.member) !== -1) {\n continue;\n }\n var componentName = component.charAt(0).toUpperCase() + component.slice(1); // To capitalize the component name\n console.warn(\"[WARNING] :: Module \\\"\" + moduleName + \"\\\" is not available in \" + componentName + \" component! You either misspelled the module name or forgot to load it.\");\n }\n }\n // Checked weather cases are valid or not. If control leads to more than five counts\n if (!isvalid && !isBannerAdded) {\n createLicenseOverlay();\n isBannerAdded = true;\n }\n this.render();\n if (!this.mount) {\n this.trigger('created');\n }\n else {\n this.accessMount();\n }\n }\n };\n /**\n * It is used to process the post rendering functionalities to a component.\n *\n * @param {Node} wrapperElement ?\n * @returns {void} ?\n */\n Component.prototype.renderComplete = function (wrapperElement) {\n if (isBlazor()) {\n var sfBlazor = 'sfBlazor';\n window[\"\" + sfBlazor].renderComplete(this.element, wrapperElement);\n }\n this.isRendered = true;\n };\n /**\n * When invoked, applies the pending property changes immediately to the component.\n *\n * @returns {void} ?\n */\n Component.prototype.dataBind = function () {\n this.injectModules();\n _super.prototype.dataBind.call(this);\n };\n /**\n * Attach one or more event handler to the current component context.\n * It is used for internal handling event internally within the component only.\n *\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the handler to run when the event occurs\n * @param {Object} context - optional parameter Specifies the context to be bind in the handler.\n * @returns {void} ?\n * @private\n */\n Component.prototype.on = function (event, handler, context) {\n if (typeof event === 'string') {\n this.localObserver.on(event, handler, context);\n }\n else {\n for (var _i = 0, event_1 = event; _i < event_1.length; _i++) {\n var arg = event_1[_i];\n this.localObserver.on(arg.event, arg.handler, arg.context);\n }\n }\n };\n /**\n * To remove one or more event handler that has been attached with the on() method.\n *\n * @param {BoundOptions[]| string} event - It is optional type either to Set the collection of event list or the eventName.\n * @param {Function} handler - optional parameter Specifies the function to run when the event occurs\n * @returns {void} ?\n * @private\n */\n Component.prototype.off = function (event, handler) {\n if (typeof event === 'string') {\n this.localObserver.off(event, handler);\n }\n else {\n for (var _i = 0, event_2 = event; _i < event_2.length; _i++) {\n var arg = event_2[_i];\n this.localObserver.off(arg.event, arg.handler);\n }\n }\n };\n /**\n * To notify the handlers in the specified event.\n *\n * @param {string} property - Specifies the event to be notify.\n * @param {Object} argument - Additional parameters to pass while calling the handler.\n * @returns {void} ?\n * @private\n */\n Component.prototype.notify = function (property, argument) {\n if (this.isDestroyed !== true) {\n this.localObserver.notify(property, argument);\n }\n };\n /**\n * Get injected modules\n *\n * @returns {Function} ?\n * @private\n */\n Component.prototype.getInjectedModules = function () {\n return this.injectedModules;\n };\n /**\n * Dynamically injects the required modules to the component.\n *\n * @param {Function} moduleList ?\n * @returns {void} ?\n */\n Component.Inject = function () {\n var moduleList = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n moduleList[_i] = arguments[_i];\n }\n if (!this.prototype.injectedModules) {\n this.prototype.injectedModules = [];\n }\n for (var i = 0; i < moduleList.length; i++) {\n if (this.prototype.injectedModules.indexOf(moduleList[parseInt(i.toString(), 10)]) === -1) {\n this.prototype.injectedModules.push(moduleList[parseInt(i.toString(), 10)]);\n }\n }\n };\n /**\n * This is a instance method to create an element.\n *\n * @param {string} tagName ?\n * @param {ElementProperties} prop ?\n * @param {boolean} isVDOM ?\n * @returns {any} ?\n * @private\n */\n Component.prototype.createElement = function (tagName, prop, isVDOM) {\n return createElement(tagName, prop);\n };\n /**\n *\n * @param {Function} handler - handler to be triggered after state Updated.\n * @param {any} argument - Arguments to be passed to caller.\n * @returns {void} .\n * @private\n */\n Component.prototype.triggerStateChange = function (handler, argument) {\n if (this.isReactHybrid) {\n this.setState();\n this.currentContext = { calls: handler, args: argument };\n }\n };\n Component.prototype.injectModules = function () {\n if (this.injectedModules && this.injectedModules.length) {\n this.moduleLoader.inject(this.requiredModules(), this.injectedModules);\n }\n };\n Component.prototype.detectFunction = function (args) {\n var prop = Object.keys(args);\n if (prop.length) {\n this[prop[0]] = args[prop[0]];\n }\n };\n Component.prototype.mergePersistData = function () {\n var data;\n if (versionBasedStatePersistence) {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id + this.ej2StatePersistenceVersion);\n }\n else {\n data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n }\n if (!(isNullOrUndefined(data) || (data === ''))) {\n this.setProperties(JSON.parse(data), true);\n }\n };\n Component.prototype.setPersistData = function () {\n if (!this.isDestroyed) {\n if (versionBasedStatePersistence) {\n window.localStorage.setItem(this.getModuleName() +\n this.element.id + this.ej2StatePersistenceVersion, this.getPersistData());\n }\n else {\n window.localStorage.setItem(this.getModuleName() + this.element.id, this.getPersistData());\n }\n }\n };\n Component.prototype.renderReactTemplates = function (callback) {\n if (!isNullOrUndefined(callback)) {\n callback();\n }\n };\n Component.prototype.clearTemplate = function (templateName, index) {\n //No Code\n };\n Component.prototype.getUniqueID = function (definedName) {\n if (this.isHistoryChanged()) {\n componentCount = 0;\n }\n lastPageID = this.pageID(location.href);\n lastHistoryLen = history.length;\n return definedName + '_' + lastPageID + '_' + componentCount++;\n };\n Component.prototype.pageID = function (url) {\n var hash = 0;\n if (url.length === 0) {\n return hash;\n }\n for (var i = 0; i < url.length; i++) {\n var char = url.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n };\n Component.prototype.isHistoryChanged = function () {\n return lastPageID !== this.pageID(location.href) || lastHistoryLen !== history.length;\n };\n Component.prototype.addOnPersist = function (options) {\n var _this = this;\n var persistObj = {};\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var key = options_1[_i];\n var objValue = getValue(key, this);\n if (!isUndefined(objValue)) {\n setValue(key, this.getActualProperties(objValue), persistObj);\n }\n }\n return JSON.stringify(persistObj, function (key, value) {\n return _this.getActualProperties(value);\n });\n };\n Component.prototype.getActualProperties = function (obj) {\n if (obj instanceof ChildProperty) {\n return getValue('properties', obj);\n }\n else {\n return obj;\n }\n };\n Component.prototype.ignoreOnPersist = function (options) {\n return JSON.stringify(this.iterateJsonProperties(this.properties, options));\n };\n Component.prototype.iterateJsonProperties = function (obj, ignoreList) {\n var newObj = {};\n var _loop_1 = function (key) {\n if (ignoreList.indexOf(key) === -1) {\n var value = obj[\"\" + key];\n if (typeof value === 'object' && !(value instanceof Array)) {\n var newList = ignoreList.filter(function (str) {\n var regExp = RegExp;\n return new regExp(key + '.').test(str);\n }).map(function (str) {\n return str.replace(key + '.', '');\n });\n newObj[\"\" + key] = this_1.iterateJsonProperties(this_1.getActualProperties(value), newList);\n }\n else {\n newObj[\"\" + key] = value;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var key = _a[_i];\n _loop_1(key);\n }\n return newObj;\n };\n __decorate([\n Property(false)\n ], Component.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"enableRtl\", void 0);\n __decorate([\n Property()\n ], Component.prototype, \"locale\", void 0);\n Component = __decorate([\n NotifyPropertyChanges\n ], Component);\n return Component;\n}(Base));\nexport { Component };\n//Function handling for page navigation detection\n/* istanbul ignore next */\n(function () {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', \n /* istanbul ignore next */\n function () {\n componentCount = 0;\n });\n }\n})();\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible } from './dom';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { ChildProperty } from './child-property';\nimport { select, closest, setStyleAttribute, addClass, createElement } from './dom';\nimport { extend, isUndefined, isNullOrUndefined, compareElementParent, isBlazor } from './util';\nvar defaultPosition = { left: 0, top: 0, bottom: 0, right: 0 };\nvar isDraggedObject = { isDragged: false };\n/**\n * Specifies the position coordinates\n */\nvar Position = /** @class */ (function (_super) {\n __extends(Position, _super);\n function Position() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Position.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], Position.prototype, \"top\", void 0);\n return Position;\n}(ChildProperty));\nexport { Position };\n/**\n * Draggable Module provides support to enable draggable functionality in Dom Elements.\n * ```html\n *
Draggable
\n * \n * ```\n */\nvar Draggable = /** @class */ (function (_super) {\n __extends(Draggable, _super);\n function Draggable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.dragLimit = Draggable_1.getDefaultPosition();\n _this.borderWidth = Draggable_1.getDefaultPosition();\n _this.padding = Draggable_1.getDefaultPosition();\n _this.diffX = 0;\n _this.prevLeft = 0;\n _this.prevTop = 0;\n _this.dragProcessStarted = false;\n _this.eleTop = 0;\n _this.tapHoldTimer = 0;\n _this.externalInitialize = false;\n _this.diffY = 0;\n _this.parentScrollX = 0;\n _this.parentScrollY = 0;\n _this.droppables = {};\n _this.bind();\n return _this;\n }\n Draggable_1 = Draggable;\n Draggable.prototype.bind = function () {\n this.toggleEvents();\n if (Browser.isIE) {\n addClass([this.element], 'e-block-touch');\n }\n this.droppables[this.scope] = {};\n };\n Draggable.getDefaultPosition = function () {\n return extend({}, defaultPosition);\n };\n Draggable.prototype.toggleEvents = function (isUnWire) {\n var ele;\n if (!isUndefined(this.handle)) {\n ele = select(this.handle, this.element);\n }\n var handler = (this.enableTapHold && Browser.isDevice && Browser.isTouch) ? this.mobileInitialize : this.initialize;\n if (isUnWire) {\n EventHandler.remove(ele || this.element, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, handler);\n }\n else {\n EventHandler.add(ele || this.element, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, handler, this);\n }\n };\n /* istanbul ignore next */\n Draggable.prototype.mobileInitialize = function (evt) {\n var _this = this;\n var target = evt.currentTarget;\n this.tapHoldTimer = setTimeout(function () {\n _this.externalInitialize = true;\n _this.removeTapholdTimer();\n _this.initialize(evt, target);\n }, this.tapHoldThreshold);\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer, this);\n };\n /* istanbul ignore next */\n Draggable.prototype.removeTapholdTimer = function () {\n clearTimeout(this.tapHoldTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.removeTapholdTimer);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.removeTapholdTimer);\n };\n /* istanbul ignore next */\n Draggable.prototype.getScrollableParent = function (element, axis) {\n var scroll = { 'vertical': 'scrollHeight', 'horizontal': 'scrollWidth' };\n var client = { 'vertical': 'clientHeight', 'horizontal': 'clientWidth' };\n if (isNullOrUndefined(element)) {\n return null;\n }\n if (element[scroll[\"\" + axis]] > element[client[\"\" + axis]]) {\n if (axis === 'vertical' ? element.scrollTop > 0 : element.scrollLeft > 0) {\n if (axis === 'vertical') {\n this.parentScrollY = this.parentScrollY +\n (this.parentScrollY === 0 ? element.scrollTop : element.scrollTop - this.parentScrollY);\n this.tempScrollHeight = element.scrollHeight;\n }\n else {\n this.parentScrollX = this.parentScrollX +\n (this.parentScrollX === 0 ? element.scrollLeft : element.scrollLeft - this.parentScrollX);\n this.tempScrollWidth = element.scrollWidth;\n }\n if (!isNullOrUndefined(element)) {\n return this.getScrollableParent(element.parentNode, axis);\n }\n else {\n return element;\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n }\n else {\n return this.getScrollableParent(element.parentNode, axis);\n }\n };\n Draggable.prototype.getScrollableValues = function () {\n this.parentScrollX = 0;\n this.parentScrollY = 0;\n var isModalDialog = this.element.classList.contains('e-dialog') && this.element.classList.contains('e-dlg-modal');\n var verticalScrollParent = this.getScrollableParent(this.element.parentNode, 'vertical');\n var horizontalScrollParent = this.getScrollableParent(this.element.parentNode, 'horizontal');\n };\n Draggable.prototype.initialize = function (evt, curTarget) {\n this.currentStateTarget = evt.target;\n if (this.isDragStarted()) {\n return;\n }\n else {\n this.isDragStarted(true);\n this.externalInitialize = false;\n }\n this.target = (evt.currentTarget || curTarget);\n this.dragProcessStarted = false;\n if (this.abort) {\n var abortSelectors = this.abort;\n if (typeof abortSelectors === 'string') {\n abortSelectors = [abortSelectors];\n }\n for (var i = 0; i < abortSelectors.length; i++) {\n if (!isNullOrUndefined(closest(evt.target, abortSelectors[parseInt(i.toString(), 10)]))) {\n /* istanbul ignore next */\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n return;\n }\n }\n }\n if (this.preventDefault && !isUndefined(evt.changedTouches) && evt.type !== 'touchstart') {\n evt.preventDefault();\n }\n this.element.setAttribute('aria-grabbed', 'true');\n var intCoord = this.getCoordinates(evt);\n this.initialPosition = { x: intCoord.pageX, y: intCoord.pageY };\n if (!this.clone) {\n var pos = this.element.getBoundingClientRect();\n this.getScrollableValues();\n if (evt.clientX === evt.pageX) {\n this.parentScrollX = 0;\n }\n if (evt.clientY === evt.pageY) {\n this.parentScrollY = 0;\n }\n this.relativeXPosition = intCoord.pageX - (pos.left + this.parentScrollX);\n this.relativeYPosition = intCoord.pageY - (pos.top + this.parentScrollY);\n }\n if (this.externalInitialize) {\n this.intDragStart(evt);\n }\n else {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy, this);\n }\n this.toggleEvents(true);\n if (evt.type !== 'touchstart' && this.isPreventSelect) {\n document.body.classList.add('e-prevent-select');\n }\n this.externalInitialize = false;\n EventHandler.trigger(document.documentElement, Browser.isSafari() ? 'touchstart' : Browser.touchStartEvent, evt);\n };\n Draggable.prototype.intDragStart = function (evt) {\n this.removeTapholdTimer();\n var isChangeTouch = !isUndefined(evt.changedTouches);\n if (isChangeTouch && (evt.changedTouches.length !== 1)) {\n return;\n }\n var intCordinate = this.getCoordinates(evt);\n var pos;\n var styleProp = getComputedStyle(this.element);\n this.margin = {\n left: parseInt(styleProp.marginLeft, 10),\n top: parseInt(styleProp.marginTop, 10),\n right: parseInt(styleProp.marginRight, 10),\n bottom: parseInt(styleProp.marginBottom, 10)\n };\n var element = this.element;\n if (this.clone && this.dragTarget) {\n var intClosest = closest(evt.target, this.dragTarget);\n if (!isNullOrUndefined(intClosest)) {\n element = intClosest;\n }\n }\n /* istanbul ignore next */\n if (this.isReplaceDragEle) {\n element = this.currentStateCheck(evt.target, element);\n }\n this.offset = this.calculateParentPosition(element);\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var x = this.initialPosition.x - intCordinate.pageX;\n var y = this.initialPosition.y - intCordinate.pageY;\n var distance = Math.sqrt((x * x) + (y * y));\n if ((distance >= this.distance || this.externalInitialize)) {\n var ele = this.getHelperElement(evt);\n if (!ele || isNullOrUndefined(ele)) {\n return;\n }\n if (isChangeTouch) {\n evt.preventDefault();\n }\n var dragTargetElement = this.helperElement = ele;\n this.parentClientRect = this.calculateParentPosition(dragTargetElement.offsetParent);\n if (this.dragStart) {\n var curTarget = this.getProperTargetElement(evt);\n var args = {\n event: evt,\n element: element,\n target: curTarget,\n bindEvents: isBlazor() ? this.bindDragEvents.bind(this) : null,\n dragElement: dragTargetElement\n };\n this.trigger('dragStart', args);\n }\n if (this.dragArea) {\n this.setDragArea();\n }\n else {\n this.dragLimit = { left: 0, right: 0, bottom: 0, top: 0 };\n this.borderWidth = { top: 0, left: 0 };\n }\n pos = { left: this.position.left - this.parentClientRect.left, top: this.position.top - this.parentClientRect.top };\n if (this.clone && !this.enableTailMode) {\n this.diffX = this.position.left - this.offset.left;\n this.diffY = this.position.top - this.offset.top;\n }\n this.getScrollableValues();\n // when drag element has margin-top\n var styles = getComputedStyle(element);\n var marginTop = parseFloat(styles.marginTop);\n /* istanbul ignore next */\n if (this.clone && marginTop !== 0) {\n pos.top += marginTop;\n }\n this.eleTop = !isNaN(parseFloat(styles.top)) ? parseFloat(styles.top) - this.offset.top : 0;\n /* istanbul ignore next */\n // if (this.eleTop > 0) {\n // pos.top += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n pos.top -= this.parentScrollY;\n pos.left -= this.parentScrollX;\n }\n var posValue = this.getProcessedPositionValue({\n top: (pos.top - this.diffY) + 'px',\n left: (pos.left - this.diffX) + 'px'\n });\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n pos.top += this.dragArea.scrollTop;\n }\n this.dragElePosition = { top: pos.top, left: pos.left };\n setStyleAttribute(dragTargetElement, this.getDragPosition({ position: 'absolute', left: posValue.left, top: posValue.top }));\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n if (!isBlazor()) {\n this.bindDragEvents(dragTargetElement);\n }\n }\n };\n Draggable.prototype.bindDragEvents = function (dragTargetElement) {\n if (isVisible(dragTargetElement)) {\n EventHandler.add(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag, this);\n EventHandler.add(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDragStop, this);\n this.setGlobalDroppables(false, this.element, dragTargetElement);\n }\n else {\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n }\n };\n Draggable.prototype.elementInViewport = function (el) {\n this.top = el.offsetTop;\n this.left = el.offsetLeft;\n this.width = el.offsetWidth;\n this.height = el.offsetHeight;\n while (el.offsetParent) {\n el = el.offsetParent;\n this.top += el.offsetTop;\n this.left += el.offsetLeft;\n }\n return (this.top >= window.pageYOffset &&\n this.left >= window.pageXOffset &&\n (this.top + this.height) <= (window.pageYOffset + window.innerHeight) &&\n (this.left + this.width) <= (window.pageXOffset + window.innerWidth));\n };\n Draggable.prototype.getProcessedPositionValue = function (value) {\n if (this.queryPositionInfo) {\n return this.queryPositionInfo(value);\n }\n return value;\n };\n Draggable.prototype.calculateParentPosition = function (ele) {\n if (isNullOrUndefined(ele)) {\n return { left: 0, top: 0 };\n }\n var rect = ele.getBoundingClientRect();\n var style = getComputedStyle(ele);\n return {\n left: (rect.left + window.pageXOffset) - parseInt(style.marginLeft, 10),\n top: (rect.top + window.pageYOffset) - parseInt(style.marginTop, 10)\n };\n };\n Draggable.prototype.intDrag = function (evt) {\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n if (this.clone && evt.changedTouches && Browser.isDevice && Browser.isTouch) {\n evt.preventDefault();\n }\n var left;\n var top;\n this.position = this.getMousePosition(evt, this.isDragScroll);\n var docHeight = this.getDocumentWidthHeight('Height');\n if (docHeight < this.position.top) {\n this.position.top = docHeight;\n }\n var docWidth = this.getDocumentWidthHeight('Width');\n if (docWidth < this.position.left) {\n this.position.left = docWidth;\n }\n if (this.drag) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('drag', { event: evt, element: this.element, target: curTarget });\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n var flag = true;\n if (this.hoverObject) {\n if (this.hoverObject.instance !== eleObj.instance) {\n this.triggerOutFunction(evt, eleObj);\n }\n else {\n flag = false;\n }\n }\n if (flag) {\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intOver(evt, eleObj.target);\n this.hoverObject = eleObj;\n }\n }\n else if (this.hoverObject) {\n this.triggerOutFunction(evt, eleObj);\n }\n var helperElement = this.droppables[this.scope].helper;\n this.parentClientRect = this.calculateParentPosition(this.helperElement.offsetParent);\n var tLeft = this.parentClientRect.left;\n var tTop = this.parentClientRect.top;\n var intCoord = this.getCoordinates(evt);\n var pagex = intCoord.pageX;\n var pagey = intCoord.pageY;\n var dLeft = this.position.left - this.diffX;\n var dTop = this.position.top - this.diffY;\n var styles = getComputedStyle(helperElement);\n if (this.dragArea) {\n if (this.enableAutoScroll) {\n this.setDragArea();\n }\n if (this.pageX !== pagex || this.skipDistanceCheck) {\n var helperWidth = helperElement.offsetWidth + (parseFloat(styles.marginLeft)\n + parseFloat(styles.marginRight));\n if (this.dragLimit.left > dLeft && dLeft > 0) {\n left = this.dragLimit.left;\n }\n else if (this.dragLimit.right + window.pageXOffset < dLeft + helperWidth && dLeft > 0) {\n left = dLeft - (dLeft - this.dragLimit.right) + window.pageXOffset - helperWidth;\n }\n else {\n left = dLeft < 0 ? this.dragLimit.left : dLeft;\n }\n }\n if (this.pageY !== pagey || this.skipDistanceCheck) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n if (this.dragLimit.top > dTop && dTop > 0) {\n top = this.dragLimit.top;\n }\n else if (this.dragLimit.bottom + window.pageYOffset < dTop + helperHeight && dTop > 0) {\n top = dTop - (dTop - this.dragLimit.bottom) + window.pageYOffset - helperHeight;\n }\n else {\n top = dTop < 0 ? this.dragLimit.top : dTop;\n }\n }\n }\n else {\n left = dLeft;\n top = dTop;\n }\n var iTop = tTop + this.borderWidth.top;\n var iLeft = tLeft + this.borderWidth.left;\n if (this.dragProcessStarted) {\n if (isNullOrUndefined(top)) {\n top = this.prevTop;\n }\n if (isNullOrUndefined(left)) {\n left = this.prevLeft;\n }\n }\n var draEleTop;\n var draEleLeft;\n if (this.helperElement.classList.contains('e-treeview')) {\n if (this.dragArea) {\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - this.borderWidth.top);\n draEleLeft = (left - iLeft) < 0 ? this.dragLimit.left : (left - this.borderWidth.left);\n }\n else {\n draEleTop = top - this.borderWidth.top;\n draEleLeft = left - this.borderWidth.left;\n }\n }\n else {\n if (this.dragArea) {\n var isDialogEle = this.helperElement.classList.contains('e-dialog');\n this.dragLimit.top = this.clone ? this.dragLimit.top : 0;\n draEleTop = (top - iTop) < 0 ? this.dragLimit.top : (top - iTop);\n draEleLeft = (left - iLeft) < 0 ? isDialogEle ? (left - (iLeft - this.borderWidth.left)) :\n this.dragElePosition.left : (left - iLeft);\n }\n else {\n draEleTop = top - iTop;\n draEleLeft = left - iLeft;\n }\n }\n var marginTop = parseFloat(getComputedStyle(this.element).marginTop);\n // when drag-element has margin-top\n /* istanbul ignore next */\n if (marginTop > 0) {\n if (this.clone) {\n draEleTop += marginTop;\n if (dTop < 0) {\n if ((marginTop + dTop) >= 0) {\n draEleTop = marginTop + dTop;\n }\n else {\n draEleTop -= marginTop;\n }\n }\n if (this.dragArea) {\n draEleTop = (this.dragLimit.bottom < draEleTop) ? this.dragLimit.bottom : draEleTop;\n }\n }\n if ((top - iTop) < 0) {\n if (dTop + marginTop + (helperElement.offsetHeight - iTop) >= 0) {\n var tempDraEleTop = this.dragLimit.top + dTop - iTop;\n if ((tempDraEleTop + marginTop + iTop) < 0) {\n draEleTop -= marginTop + iTop;\n }\n else {\n draEleTop = tempDraEleTop;\n }\n }\n else {\n draEleTop -= marginTop + iTop;\n }\n }\n }\n if (this.dragArea && this.helperElement.classList.contains('e-treeview')) {\n var helperHeight = helperElement.offsetHeight + (parseFloat(styles.marginTop)\n + parseFloat(styles.marginBottom));\n draEleTop = (draEleTop + helperHeight) > this.dragLimit.bottom ? (this.dragLimit.bottom - helperHeight) : draEleTop;\n }\n /* istanbul ignore next */\n // if(this.eleTop > 0) {\n // draEleTop += this.eleTop;\n // }\n if (this.enableScrollHandler && !this.clone) {\n draEleTop -= this.parentScrollY;\n draEleLeft -= this.parentScrollX;\n }\n if (this.dragArea && typeof this.dragArea !== 'string' && this.dragArea.classList.contains('e-kanban-content') && this.dragArea.style.position === 'relative') {\n draEleTop += this.dragArea.scrollTop;\n }\n var dragValue = this.getProcessedPositionValue({ top: draEleTop + 'px', left: draEleLeft + 'px' });\n setStyleAttribute(helperElement, this.getDragPosition(dragValue));\n if (!this.elementInViewport(helperElement) && this.enableAutoScroll && !this.helperElement.classList.contains('e-treeview')) {\n this.helperElement.scrollIntoView();\n }\n var elements = document.querySelectorAll(':hover');\n if (this.enableAutoScroll && this.helperElement.classList.contains('e-treeview')) {\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n var scrollParent = this.getScrollParent(elements, false);\n if (this.elementInViewport(this.helperElement)) {\n this.getScrollPosition(scrollParent, draEleTop);\n }\n else if (!this.elementInViewport(this.helperElement)) {\n elements = [].slice.call(document.querySelectorAll(':hover'));\n if (elements.length === 0) {\n elements = this.getPathElements(evt);\n }\n scrollParent = this.getScrollParent(elements, true);\n this.getScrollPosition(scrollParent, draEleTop);\n }\n }\n this.dragProcessStarted = true;\n this.prevLeft = left;\n this.prevTop = top;\n this.position.left = left;\n this.position.top = top;\n this.pageX = pagex;\n this.pageY = pagey;\n };\n Draggable.prototype.getScrollParent = function (node, reverse) {\n var nodeEl = reverse ? node.reverse() : node;\n var hasScroll;\n for (var i = nodeEl.length - 1; i >= 0; i--) {\n hasScroll = window.getComputedStyle(nodeEl[parseInt(i.toString(), 10)])['overflow-y'];\n if ((hasScroll === 'auto' || hasScroll === 'scroll')\n && nodeEl[parseInt(i.toString(), 10)].scrollHeight > nodeEl[parseInt(i.toString(), 10)].clientHeight) {\n return nodeEl[parseInt(i.toString(), 10)];\n }\n }\n hasScroll = window.getComputedStyle(document.scrollingElement)['overflow-y'];\n if (hasScroll === 'visible') {\n document.scrollingElement.style.overflow = 'auto';\n return document.scrollingElement;\n }\n };\n Draggable.prototype.getScrollPosition = function (nodeEle, draEleTop) {\n if (nodeEle && nodeEle === document.scrollingElement) {\n if ((nodeEle.clientHeight + document.scrollingElement.scrollTop - this.helperElement.clientHeight) < draEleTop\n && nodeEle.getBoundingClientRect().height + this.parentClientRect.top > draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.scrollTop > draEleTop - this.helperElement.clientHeight) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n else if (nodeEle && nodeEle !== document.scrollingElement) {\n var docScrollTop = document.scrollingElement.scrollTop;\n var helperClientHeight = this.helperElement.clientHeight;\n if ((nodeEle.clientHeight + nodeEle.getBoundingClientRect().top - helperClientHeight + docScrollTop) < draEleTop) {\n nodeEle.scrollTop += this.helperElement.clientHeight;\n }\n else if (nodeEle.getBoundingClientRect().top > (draEleTop - helperClientHeight - docScrollTop)) {\n nodeEle.scrollTop -= this.helperElement.clientHeight;\n }\n }\n };\n Draggable.prototype.getPathElements = function (evt) {\n var elementTop = evt.clientX > 0 ? evt.clientX : 0;\n var elementLeft = evt.clientY > 0 ? evt.clientY : 0;\n return document.elementsFromPoint(elementTop, elementLeft);\n };\n Draggable.prototype.triggerOutFunction = function (evt, eleObj) {\n this.hoverObject.instance.intOut(evt, eleObj.target);\n this.hoverObject.instance.dragData[this.scope] = null;\n this.hoverObject = null;\n };\n Draggable.prototype.getDragPosition = function (dragValue) {\n var temp = extend({}, dragValue);\n if (this.axis) {\n if (this.axis === 'x') {\n delete temp.top;\n }\n else if (this.axis === 'y') {\n delete temp.left;\n }\n }\n return temp;\n };\n Draggable.prototype.getDocumentWidthHeight = function (str) {\n var docBody = document.body;\n var docEle = document.documentElement;\n var returnValue = Math.max(docBody['scroll' + str], docEle['scroll' + str], docBody['offset' + str], docEle['offset' + str], docEle['client' + str]);\n return returnValue;\n };\n Draggable.prototype.intDragStop = function (evt) {\n this.dragProcessStarted = false;\n if (!isUndefined(evt.changedTouches) && (evt.changedTouches.length !== 1)) {\n return;\n }\n var type = ['touchend', 'pointerup', 'mouseup'];\n if (type.indexOf(evt.type) !== -1) {\n if (this.dragStop) {\n var curTarget = this.getProperTargetElement(evt);\n this.trigger('dragStop', { event: evt, element: this.element, target: curTarget, helper: this.helperElement });\n }\n this.intDestroy(evt);\n }\n else {\n this.element.setAttribute('aria-grabbed', 'false');\n }\n var eleObj = this.checkTargetElement(evt);\n if (eleObj.target && eleObj.instance) {\n eleObj.instance.dragStopCalled = true;\n eleObj.instance.dragData[this.scope] = this.droppables[this.scope];\n eleObj.instance.intDrop(evt, eleObj.target);\n }\n this.setGlobalDroppables(true);\n document.body.classList.remove('e-prevent-select');\n };\n /**\n * @param {MouseEvent | TouchEvent} evt ?\n * @returns {void}\n * @private\n */\n Draggable.prototype.intDestroy = function (evt) {\n this.dragProcessStarted = false;\n this.toggleEvents();\n document.body.classList.remove('e-prevent-select');\n this.element.setAttribute('aria-grabbed', 'false');\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDragStart);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDragStop);\n EventHandler.remove(document, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDestroy);\n EventHandler.remove(document, Browser.isSafari() ? 'touchmove' : Browser.touchMoveEvent, this.intDrag);\n if (this.isDragStarted()) {\n this.isDragStarted(true);\n }\n };\n // triggers when property changed\n Draggable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Draggable.prototype.getModuleName = function () {\n return 'draggable';\n };\n Draggable.prototype.isDragStarted = function (change) {\n if (change) {\n isDraggedObject.isDragged = !isDraggedObject.isDragged;\n }\n return isDraggedObject.isDragged;\n };\n Draggable.prototype.setDragArea = function () {\n var eleWidthBound;\n var eleHeightBound;\n var top = 0;\n var left = 0;\n var ele;\n var type = typeof this.dragArea;\n if (type === 'string') {\n ele = select(this.dragArea);\n }\n else {\n ele = this.dragArea;\n }\n if (ele) {\n var elementArea = ele.getBoundingClientRect();\n eleWidthBound = ele.scrollWidth ? ele.scrollWidth : elementArea.right - elementArea.left;\n eleHeightBound = ele.scrollHeight ? (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) ? ele.clientHeight : ele.scrollHeight : elementArea.bottom - elementArea.top;\n var keys = ['Top', 'Left', 'Bottom', 'Right'];\n var styles = getComputedStyle(ele);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[parseInt(i.toString(), 10)];\n var tborder = styles['border' + key + 'Width'];\n var tpadding = styles['padding' + key];\n var lowerKey = key.toLowerCase();\n this.borderWidth[\"\" + lowerKey] = isNaN(parseFloat(tborder)) ? 0 : parseFloat(tborder);\n this.padding[\"\" + lowerKey] = isNaN(parseFloat(tpadding)) ? 0 : parseFloat(tpadding);\n }\n if (this.dragArea && !isNullOrUndefined(this.helperElement) && this.helperElement.classList.contains('e-treeview')) {\n top = elementArea.top + document.scrollingElement.scrollTop;\n }\n else {\n top = elementArea.top;\n }\n left = elementArea.left;\n this.dragLimit.left = left + this.borderWidth.left + this.padding.left;\n this.dragLimit.top = ele.offsetTop + this.borderWidth.top + this.padding.top;\n this.dragLimit.right = left + eleWidthBound - (this.borderWidth.right + this.padding.right);\n this.dragLimit.bottom = top + eleHeightBound - (this.borderWidth.bottom + this.padding.bottom);\n }\n };\n Draggable.prototype.getProperTargetElement = function (evt) {\n var intCoord = this.getCoordinates(evt);\n var ele;\n var prevStyle = this.helperElement.style.pointerEvents || '';\n var isPointer = evt.type.indexOf('pointer') !== -1 && Browser.info.name === 'safari' && parseInt(Browser.info.version, 10) > 12;\n if (compareElementParent(evt.target, this.helperElement) || evt.type.indexOf('touch') !== -1 || isPointer) {\n this.helperElement.style.pointerEvents = 'none';\n ele = document.elementFromPoint(intCoord.clientX, intCoord.clientY);\n this.helperElement.style.pointerEvents = prevStyle;\n }\n else {\n ele = evt.target;\n }\n return ele;\n };\n /* istanbul ignore next */\n Draggable.prototype.currentStateCheck = function (ele, oldEle) {\n var elem;\n if (!isNullOrUndefined(this.currentStateTarget) && this.currentStateTarget !== ele) {\n elem = this.currentStateTarget;\n }\n else {\n elem = !isNullOrUndefined(oldEle) ? oldEle : ele;\n }\n return elem;\n };\n Draggable.prototype.getMousePosition = function (evt, isdragscroll) {\n var dragEle = evt.srcElement !== undefined ? evt.srcElement : evt.target;\n var intCoord = this.getCoordinates(evt);\n var pageX;\n var pageY;\n var isOffsetParent = isNullOrUndefined(dragEle.offsetParent);\n /* istanbul ignore next */\n if (isdragscroll) {\n pageX = this.clone ? intCoord.pageX :\n (intCoord.pageX + (isOffsetParent ? 0 : dragEle.offsetParent.scrollLeft)) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY :\n (intCoord.pageY + (isOffsetParent ? 0 : dragEle.offsetParent.scrollTop)) - this.relativeYPosition;\n }\n else {\n pageX = this.clone ? intCoord.pageX : (intCoord.pageX + window.pageXOffset) - this.relativeXPosition;\n pageY = this.clone ? intCoord.pageY : (intCoord.pageY + window.pageYOffset) - this.relativeYPosition;\n }\n if (document.scrollingElement && (!isdragscroll && !this.clone)) {\n var ele = document.scrollingElement;\n var isVerticalScroll = ele.scrollHeight > 0 && ele.scrollHeight > ele.clientHeight && ele.scrollTop > 0;\n var isHorrizontalScroll = ele.scrollWidth > 0 && ele.scrollWidth > ele.clientWidth && ele.scrollLeft > 0;\n pageX = isHorrizontalScroll ? pageX - ele.scrollLeft : pageX;\n pageY = isVerticalScroll ? pageY - ele.scrollTop : pageY;\n }\n return {\n left: pageX - (this.margin.left + this.cursorAt.left),\n top: pageY - (this.margin.top + this.cursorAt.top)\n };\n };\n Draggable.prototype.getCoordinates = function (evt) {\n if (evt.type.indexOf('touch') > -1) {\n return evt.changedTouches[0];\n }\n return evt;\n };\n Draggable.prototype.getHelperElement = function (evt) {\n var element;\n if (this.clone) {\n if (this.helper) {\n element = this.helper({ sender: evt, element: this.target });\n }\n else {\n element = createElement('div', { className: 'e-drag-helper e-block-touch', innerHTML: 'Draggable' });\n document.body.appendChild(element);\n }\n }\n else {\n element = this.element;\n }\n return element;\n };\n Draggable.prototype.setGlobalDroppables = function (reset, drag, helper) {\n this.droppables[this.scope] = reset ? null : {\n draggable: drag,\n helper: helper,\n draggedElement: this.element\n };\n };\n Draggable.prototype.checkTargetElement = function (evt) {\n var target = this.getProperTargetElement(evt);\n var dropIns = this.getDropInstance(target);\n if (!dropIns && target && !isNullOrUndefined(target.parentNode)) {\n var parent_1 = closest(target.parentNode, '.e-droppable') || target.parentElement;\n if (parent_1) {\n dropIns = this.getDropInstance(parent_1);\n }\n }\n return { target: target, instance: dropIns };\n };\n Draggable.prototype.getDropInstance = function (ele) {\n var name = 'getModuleName';\n var drop;\n var eleInst = ele && ele.ej2_instances;\n if (eleInst) {\n for (var _i = 0, eleInst_1 = eleInst; _i < eleInst_1.length; _i++) {\n var inst = eleInst_1[_i];\n if (inst[\"\" + name]() === 'droppable') {\n drop = inst;\n break;\n }\n }\n }\n return drop;\n };\n Draggable.prototype.destroy = function () {\n this.toggleEvents(true);\n _super.prototype.destroy.call(this);\n };\n var Draggable_1;\n __decorate([\n Complex({}, Position)\n ], Draggable.prototype, \"cursorAt\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"clone\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"dragArea\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isDragScroll\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"isReplaceDragEle\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"isPreventSelect\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Draggable.prototype, \"dragStop\", void 0);\n __decorate([\n Property(1)\n ], Draggable.prototype, \"distance\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"handle\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"abort\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"helper\", void 0);\n __decorate([\n Property('default')\n ], Draggable.prototype, \"scope\", void 0);\n __decorate([\n Property('')\n ], Draggable.prototype, \"dragTarget\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"axis\", void 0);\n __decorate([\n Property()\n ], Draggable.prototype, \"queryPositionInfo\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTailMode\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"skipDistanceCheck\", void 0);\n __decorate([\n Property(true)\n ], Draggable.prototype, \"preventDefault\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableAutoScroll\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableTapHold\", void 0);\n __decorate([\n Property(750)\n ], Draggable.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Property(false)\n ], Draggable.prototype, \"enableScrollHandler\", void 0);\n Draggable = Draggable_1 = __decorate([\n NotifyPropertyChanges\n ], Draggable);\n return Draggable;\n}(Base));\nexport { Draggable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { isVisible, matches } from './dom';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { EventHandler } from './event-handler';\nimport { compareElementParent } from './util';\n/**\n * Droppable Module provides support to enable droppable functionality in Dom Elements.\n * ```html\n *
Droppable
\n * \n * ```\n */\nvar Droppable = /** @class */ (function (_super) {\n __extends(Droppable, _super);\n function Droppable(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseOver = false;\n _this.dragData = {};\n _this.dragStopCalled = false;\n _this.bind();\n return _this;\n }\n Droppable.prototype.bind = function () {\n this.wireEvents();\n };\n Droppable.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop, this);\n };\n // triggers when property changed\n Droppable.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Droppable.prototype.getModuleName = function () {\n return 'droppable';\n };\n Droppable.prototype.intOver = function (event, element) {\n if (!this.mouseOver) {\n var drag = this.dragData[this.scope];\n this.trigger('over', { event: event, target: element, dragData: drag });\n this.mouseOver = true;\n }\n };\n Droppable.prototype.intOut = function (event, element) {\n if (this.mouseOver) {\n this.trigger('out', { evt: event, target: element });\n this.mouseOver = false;\n }\n };\n Droppable.prototype.intDrop = function (evt, element) {\n if (!this.dragStopCalled) {\n return;\n }\n else {\n this.dragStopCalled = false;\n }\n var accept = true;\n var drag = this.dragData[this.scope];\n var isDrag = drag ? (drag.helper && isVisible(drag.helper)) : false;\n var area;\n if (isDrag) {\n area = this.isDropArea(evt, drag.helper, element);\n if (this.accept) {\n accept = matches(drag.helper, this.accept);\n }\n }\n if (isDrag && this.drop && area.canDrop && accept) {\n this.trigger('drop', { event: evt, target: area.target, droppedElement: drag.helper, dragData: drag });\n }\n this.mouseOver = false;\n };\n Droppable.prototype.isDropArea = function (evt, helper, element) {\n var area = { canDrop: true, target: element || evt.target };\n var isTouch = evt.type === 'touchend';\n if (isTouch || area.target === helper) {\n helper.style.display = 'none';\n var coord = isTouch ? (evt.changedTouches[0]) : evt;\n var ele = document.elementFromPoint(coord.clientX, coord.clientY);\n area.canDrop = false;\n area.canDrop = compareElementParent(ele, this.element);\n if (area.canDrop) {\n area.target = ele;\n }\n helper.style.display = '';\n }\n return area;\n };\n Droppable.prototype.destroy = function () {\n EventHandler.remove(this.element, Browser.isSafari() ? 'touchend' : Browser.touchEndEvent, this.intDrop);\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property()\n ], Droppable.prototype, \"accept\", void 0);\n __decorate([\n Property('default')\n ], Droppable.prototype, \"scope\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"drop\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"over\", void 0);\n __decorate([\n Event()\n ], Droppable.prototype, \"out\", void 0);\n Droppable = __decorate([\n NotifyPropertyChanges\n ], Droppable);\n return Droppable;\n}(Base));\nexport { Droppable };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Base } from './base';\nvar keyCode = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'space': 32,\n 'escape': 27,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'leftarrow': 37,\n 'uparrow': 38,\n 'rightarrow': 39,\n 'downarrow': 40,\n 'insert': 45,\n 'delete': 46,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'semicolon': 186,\n 'plus': 187,\n 'comma': 188,\n 'minus': 189,\n 'dot': 190,\n 'forwardslash': 191,\n 'graveaccent': 192,\n 'openbracket': 219,\n 'backslash': 220,\n 'closebracket': 221,\n 'singlequote': 222\n};\n/**\n * KeyboardEvents class enables you to bind key action desired key combinations for ex., Ctrl+A, Delete, Alt+Space etc.\n * ```html\n *
;\n * \n * ```\n */\nvar KeyboardEvents = /** @class */ (function (_super) {\n __extends(KeyboardEvents, _super);\n /**\n * Initializes the KeyboardEvents\n *\n * @param {HTMLElement} element ?\n * @param {KeyboardEventsModel} options ?\n */\n function KeyboardEvents(element, options) {\n var _this = _super.call(this, options, element) || this;\n /**\n * To handle a key press event returns null\n *\n * @param {KeyboardEventArgs} e ?\n * @returns {void} ?\n */\n _this.keyPressHandler = function (e) {\n var isAltKey = e.altKey;\n var isCtrlKey = e.ctrlKey;\n var isShiftKey = e.shiftKey;\n var curkeyCode = e.which;\n var keys = Object.keys(_this.keyConfigs);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n var configCollection = _this.keyConfigs[\"\" + key].split(',');\n for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {\n var rconfig = configCollection_1[_a];\n var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());\n if (isAltKey === rKeyObj.altKey && isCtrlKey === rKeyObj.ctrlKey &&\n isShiftKey === rKeyObj.shiftKey && curkeyCode === rKeyObj.keyCode) {\n e.action = key;\n if (_this.keyAction) {\n _this.keyAction(e);\n }\n }\n }\n }\n };\n _this.bind();\n return _this;\n }\n KeyboardEvents_1 = KeyboardEvents;\n /**\n * Unwire bound events and destroy the instance.\n *\n * @returns {void} ?\n */\n KeyboardEvents.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n /**\n * Function can be used to specify certain action if a property is changed\n *\n * @param {KeyboardEventsModel} newProp ?\n * @param {KeyboardEventsModel} oldProp ?\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.onPropertyChanged = function (newProp, oldProp) {\n // No code are needed\n };\n KeyboardEvents.prototype.bind = function () {\n this.wireEvents();\n };\n /**\n * To get the module name, returns 'keyboard'.\n *\n * @returns {string} ?\n * @private\n */\n KeyboardEvents.prototype.getModuleName = function () {\n return 'keyboard';\n };\n /**\n * Wiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.wireEvents = function () {\n this.element.addEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * Unwiring event handlers to events\n *\n * @returns {void} ?\n * @private\n */\n KeyboardEvents.prototype.unwireEvents = function () {\n this.element.removeEventListener(this.eventName, this.keyPressHandler);\n };\n /**\n * To get the key configuration data\n *\n * @param {string} config - configuration data\n * @returns {KeyData} ?\n */\n KeyboardEvents.getKeyConfigData = function (config) {\n if (config in this.configCache) {\n return this.configCache[\"\" + config];\n }\n var keys = config.toLowerCase().split('+');\n var keyData = {\n altKey: (keys.indexOf('alt') !== -1 ? true : false),\n ctrlKey: (keys.indexOf('ctrl') !== -1 ? true : false),\n shiftKey: (keys.indexOf('shift') !== -1 ? true : false),\n keyCode: null\n };\n if (keys[keys.length - 1].length > 1 && !!Number(keys[keys.length - 1])) {\n keyData.keyCode = Number(keys[keys.length - 1]);\n }\n else {\n keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);\n }\n KeyboardEvents_1.configCache[\"\" + config] = keyData;\n return keyData;\n };\n // Return the keycode value as string\n KeyboardEvents.getKeyCode = function (keyVal) {\n return keyCode[\"\" + keyVal] || keyVal.toUpperCase().charCodeAt(0);\n };\n var KeyboardEvents_1;\n KeyboardEvents.configCache = {};\n __decorate([\n Property({})\n ], KeyboardEvents.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property('keyup')\n ], KeyboardEvents.prototype, \"eventName\", void 0);\n __decorate([\n Event()\n ], KeyboardEvents.prototype, \"keyAction\", void 0);\n KeyboardEvents = KeyboardEvents_1 = __decorate([\n NotifyPropertyChanges\n ], KeyboardEvents);\n return KeyboardEvents;\n}(Base));\nexport { KeyboardEvents };\n","import { extend, isNullOrUndefined } from './util';\nimport { defaultCulture } from './internationalization';\n/**\n * L10n modules provides localized text for different culture.\n * ```typescript\n * import {setCulture} from '@syncfusion/ts-base-library';\n * //load global locale object common for all components.\n * L10n.load({\n * 'fr-BE': {\n * 'button': {\n * 'check': 'vérifié'\n * }\n * }\n * });\n * //set globale default locale culture.\n * setCulture('fr-BE');\n * let instance: L10n = new L10n('button', {\n * check: 'checked'\n * });\n * //Get locale text for current property.\n * instance.getConstant('check');\n * //Change locale culture in a component.\n * instance.setLocale('en-US');\n * ```\n */\nvar L10n = /** @class */ (function () {\n /**\n * Constructor\n *\n * @param {string} controlName ?\n * @param {Object} localeStrings ?\n * @param {string} locale ?\n */\n function L10n(controlName, localeStrings, locale) {\n this.controlName = controlName;\n this.localeStrings = localeStrings;\n this.setLocale(locale || defaultCulture);\n }\n /**\n * Sets the locale text\n *\n * @param {string} locale ?\n * @returns {void} ?\n */\n L10n.prototype.setLocale = function (locale) {\n var intLocale = this.intGetControlConstant(L10n.locale, locale);\n this.currentLocale = intLocale || this.localeStrings;\n };\n /**\n * Sets the global locale for all components.\n *\n * @param {Object} localeObject - specifies the localeObject to be set as global locale.\n * @returns {void} ?\n */\n L10n.load = function (localeObject) {\n this.locale = extend(this.locale, localeObject, {}, true);\n };\n /**\n * Returns current locale text for the property based on the culture name and control name.\n *\n * @param {string} prop - specifies the property for which localize text to be returned.\n * @returns {string} ?\n */\n L10n.prototype.getConstant = function (prop) {\n // Removed conditional operator because this method does not return correct value when passing 0 as value in localization\n if (!isNullOrUndefined(this.currentLocale[\"\" + prop])) {\n return this.currentLocale[\"\" + prop];\n }\n else {\n return this.localeStrings[\"\" + prop] || '';\n }\n };\n /**\n * Returns the control constant object for current object and the locale specified.\n *\n * @param {Object} curObject ?\n * @param {string} locale ?\n * @returns {Object} ?\n */\n L10n.prototype.intGetControlConstant = function (curObject, locale) {\n if ((curObject)[\"\" + locale]) {\n return (curObject)[\"\" + locale][this.controlName];\n }\n return null;\n };\n L10n.locale = {};\n return L10n;\n}());\nexport { L10n };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { extend } from './util';\nimport { Property, Complex, NotifyPropertyChanges, Event } from './notify-property-change';\nimport { Browser } from './browser';\nimport { Base } from './base';\nimport { ChildProperty } from './child-property';\nimport { EventHandler } from './event-handler';\n/**\n * SwipeSettings is a framework module that provides support to handle swipe event like swipe up, swipe right, etc..,\n */\nvar SwipeSettings = /** @class */ (function (_super) {\n __extends(SwipeSettings, _super);\n function SwipeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(50)\n ], SwipeSettings.prototype, \"swipeThresholdDistance\", void 0);\n return SwipeSettings;\n}(ChildProperty));\nexport { SwipeSettings };\nvar swipeRegex = /(Up|Down)/;\n/**\n * Touch class provides support to handle the touch event like tap, double tap, tap hold, etc..,\n * ```typescript\n * let node: HTMLElement;\n * let touchObj: Touch = new Touch({\n * element: node,\n * tap: function (e) {\n * // tap handler function code\n * }\n * tapHold: function (e) {\n * // tap hold handler function code\n * }\n * scroll: function (e) {\n * // scroll handler function code\n * }\n * swipe: function (e) {\n * // swipe handler function code\n * }\n * });\n * ```\n */\nvar Touch = /** @class */ (function (_super) {\n __extends(Touch, _super);\n /* End-Properties */\n function Touch(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.touchAction = true;\n _this.tapCount = 0;\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.startEvent = function (evt) {\n if (_this.touchAction === true) {\n var point = _this.updateChangeTouches(evt);\n if (evt.changedTouches !== undefined) {\n _this.touchAction = false;\n }\n _this.isTouchMoved = false;\n _this.movedDirection = '';\n _this.startPoint = _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n _this.startEventData = point;\n _this.hScrollLocked = _this.vScrollLocked = false;\n _this.tStampStart = Date.now();\n _this.timeOutTapHold = setTimeout(function () { _this.tapHoldEvent(evt); }, _this.tapHoldThreshold);\n EventHandler.add(_this.element, Browser.touchMoveEvent, _this.moveEvent, _this);\n EventHandler.add(_this.element, Browser.touchEndEvent, _this.endEvent, _this);\n EventHandler.add(_this.element, Browser.touchCancelEvent, _this.cancelEvent, _this);\n }\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.moveEvent = function (evt) {\n var point = _this.updateChangeTouches(evt);\n _this.movedPoint = point;\n _this.isTouchMoved = !(point.clientX === _this.startPoint.clientX && point.clientY === _this.startPoint.clientY);\n var eScrollArgs = {};\n if (_this.isTouchMoved) {\n clearTimeout(_this.timeOutTapHold);\n _this.calcScrollPoints(evt);\n var scrollArg = {\n startEvents: _this.startEventData,\n originalEvent: evt, startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY, distanceX: _this.distanceX,\n distanceY: _this.distanceY, scrollDirection: _this.scrollDirection,\n velocity: _this.getVelocity(point)\n };\n eScrollArgs = extend(eScrollArgs, {}, scrollArg);\n _this.trigger('scroll', eScrollArgs);\n _this.lastMovedPoint = { clientX: point.clientX, clientY: point.clientY };\n }\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.cancelEvent = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n _this.tapCount = 0;\n _this.swipeFn(evt);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.endEvent = function (evt) {\n _this.swipeFn(evt);\n if (!_this.isTouchMoved) {\n if (typeof _this.tap === 'function') {\n _this.trigger('tap', { originalEvent: evt, tapCount: ++_this.tapCount });\n _this.timeOutTap = setTimeout(function () {\n _this.tapCount = 0;\n }, _this.tapThreshold);\n }\n }\n _this.modeclear();\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n _this.swipeFn = function (evt) {\n clearTimeout(_this.timeOutTapHold);\n clearTimeout(_this.timeOutTap);\n var point = _this.updateChangeTouches(evt);\n var diffX = point.clientX - _this.startPoint.clientX;\n var diffY = point.clientY - _this.startPoint.clientY;\n diffX = Math.floor(diffX < 0 ? -1 * diffX : diffX);\n diffY = Math.floor(diffY < 0 ? -1 * diffY : diffX);\n _this.isTouchMoved = diffX > 1 || diffY > 1;\n var isFirefox = (/Firefox/).test(Browser.userAgent);\n if (isFirefox && point.clientX === 0 && point.clientY === 0 && evt.type === 'mouseup') {\n _this.isTouchMoved = false;\n }\n _this.endPoint = point;\n _this.calcPoints(evt);\n var swipeArgs = {\n originalEvent: evt,\n startEvents: _this.startEventData,\n startX: _this.startPoint.clientX,\n startY: _this.startPoint.clientY,\n distanceX: _this.distanceX, distanceY: _this.distanceY, swipeDirection: _this.movedDirection,\n velocity: _this.getVelocity(point)\n };\n if (_this.isTouchMoved) {\n var tDistance = _this.swipeSettings.swipeThresholdDistance;\n var eSwipeArgs = extend(undefined, _this.defaultArgs, swipeArgs);\n var canTrigger = false;\n var ele = _this.element;\n var scrollBool = _this.isScrollable(ele);\n var moved = swipeRegex.test(_this.movedDirection);\n if ((tDistance < _this.distanceX && !moved) || (tDistance < _this.distanceY && moved)) {\n if (!scrollBool) {\n canTrigger = true;\n }\n else {\n canTrigger = _this.checkSwipe(ele, moved);\n }\n }\n if (canTrigger) {\n _this.trigger('swipe', eSwipeArgs);\n }\n }\n _this.modeclear();\n };\n _this.modeclear = function () {\n _this.modeClear = setTimeout(function () {\n _this.touchAction = true;\n }, (typeof _this.tap !== 'function' ? 0 : 20));\n _this.lastTapTime = new Date().getTime();\n EventHandler.remove(_this.element, Browser.touchMoveEvent, _this.moveEvent);\n EventHandler.remove(_this.element, Browser.touchEndEvent, _this.endEvent);\n EventHandler.remove(_this.element, Browser.touchCancelEvent, _this.cancelEvent);\n };\n _this.bind();\n return _this;\n }\n // triggers when property changed\n /**\n *\n * @private\n * @param {TouchModel} newProp ?\n * @param {TouchModel} oldProp ?\n * @returns {void} ?\n */\n Touch.prototype.onPropertyChanged = function (newProp, oldProp) {\n //No Code to handle\n };\n Touch.prototype.bind = function () {\n this.wireEvents();\n if (Browser.isIE) {\n this.element.classList.add('e-block-touch');\n }\n };\n /**\n * To destroy the touch instance.\n *\n * @returns {void}\n */\n Touch.prototype.destroy = function () {\n this.unwireEvents();\n _super.prototype.destroy.call(this);\n };\n // Need to changes the event binding once we updated the event handler.\n Touch.prototype.wireEvents = function () {\n EventHandler.add(this.element, Browser.touchStartEvent, this.startEvent, this);\n };\n Touch.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.startEvent);\n };\n /**\n * Returns module name as touch\n *\n * @returns {string} ?\n * @private\n */\n Touch.prototype.getModuleName = function () {\n return 'touch';\n };\n /**\n * Returns if the HTML element is Scrollable.\n *\n * @param {HTMLElement} element - HTML Element to check if Scrollable.\n * @returns {boolean} ?\n */\n Touch.prototype.isScrollable = function (element) {\n var eleStyle = getComputedStyle(element);\n var style = eleStyle.overflow + eleStyle.overflowX + eleStyle.overflowY;\n if ((/(auto|scroll)/).test(style)) {\n return true;\n }\n return false;\n };\n /**\n *\n * @param {MouseEventArgs | TouchEventArgs} evt ?\n * @returns {void} ?\n */\n Touch.prototype.tapHoldEvent = function (evt) {\n this.tapCount = 0;\n this.touchAction = true;\n EventHandler.remove(this.element, Browser.touchMoveEvent, this.moveEvent);\n EventHandler.remove(this.element, Browser.touchEndEvent, this.endEvent);\n var eTapArgs = { originalEvent: evt };\n this.trigger('tapHold', eTapArgs);\n EventHandler.remove(this.element, Browser.touchCancelEvent, this.cancelEvent);\n };\n Touch.prototype.calcPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.startPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.startPoint.clientY)));\n if (this.distanceX > this.distanceY) {\n this.movedDirection = (point.clientX > this.startPoint.clientX) ? 'Right' : 'Left';\n }\n else {\n this.movedDirection = (point.clientY < this.startPoint.clientY) ? 'Up' : 'Down';\n }\n };\n Touch.prototype.calcScrollPoints = function (evt) {\n var point = this.updateChangeTouches(evt);\n this.defaultArgs = { originalEvent: evt };\n this.distanceX = Math.abs((Math.abs(point.clientX) - Math.abs(this.lastMovedPoint.clientX)));\n this.distanceY = Math.abs((Math.abs(point.clientY) - Math.abs(this.lastMovedPoint.clientY)));\n if ((this.distanceX > this.distanceY || this.hScrollLocked === true) && this.vScrollLocked === false) {\n this.scrollDirection = (point.clientX > this.lastMovedPoint.clientX) ? 'Right' : 'Left';\n this.hScrollLocked = true;\n }\n else {\n this.scrollDirection = (point.clientY < this.lastMovedPoint.clientY) ? 'Up' : 'Down';\n this.vScrollLocked = true;\n }\n };\n Touch.prototype.getVelocity = function (pnt) {\n var newX = pnt.clientX;\n var newY = pnt.clientY;\n var newT = Date.now();\n var xDist = newX - this.startPoint.clientX;\n var yDist = newY - this.startPoint.clientX;\n var interval = newT - this.tStampStart;\n return Math.sqrt(xDist * xDist + yDist * yDist) / interval;\n };\n Touch.prototype.checkSwipe = function (ele, flag) {\n var keys = ['scroll', 'offset'];\n var temp = flag ? ['Height', 'Top'] : ['Width', 'Left'];\n if ((ele[keys[0] + temp[0]] <= ele[keys[1] + temp[0]])) {\n return true;\n }\n return (ele[keys[0] + temp[1]] === 0) ||\n (ele[keys[1] + temp[0]] + ele[keys[0] + temp[1]] >= ele[keys[0] + temp[0]]);\n };\n Touch.prototype.updateChangeTouches = function (evt) {\n var point = evt.changedTouches && evt.changedTouches.length !== 0 ? evt.changedTouches[0] : evt;\n return point;\n };\n __decorate([\n Event()\n ], Touch.prototype, \"tap\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"tapHold\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"swipe\", void 0);\n __decorate([\n Event()\n ], Touch.prototype, \"scroll\", void 0);\n __decorate([\n Property(350)\n ], Touch.prototype, \"tapThreshold\", void 0);\n __decorate([\n Property(750)\n ], Touch.prototype, \"tapHoldThreshold\", void 0);\n __decorate([\n Complex({}, SwipeSettings)\n ], Touch.prototype, \"swipeSettings\", void 0);\n Touch = __decorate([\n NotifyPropertyChanges\n ], Touch);\n return Touch;\n}(Base));\nexport { Touch };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(/if|/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar WORDIF = new RegExp('[\\\\w\"\\'@#$.\\\\s-+]+', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\nvar ARR_OBJ = /^\\..*/gm;\nvar SINGLE_SLASH = /\\\\/gi;\nvar DOUBLE_SLASH = /\\\\\\\\/gi;\nvar WORDFUNC = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar WINDOWFUNC = /\\window\\./gm;\n/**\n * The function to set regular expression for template expression string.\n *\n * @param {RegExp} value - Value expression.\n * @returns {RegExp} ?\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n *\n * @param {string | Function} template - The template string which is going to convert.\n * @param {Object} helper - Helper functions as an object.\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n * @private\n */\nexport function compile(template, helper, ignorePrefix) {\n if (typeof template === 'function') {\n return template;\n }\n else {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper, ignorePrefix);\n var condtion = \"var valueRegEx = (/value=\\\\'([A-Za-z0-9 _]*)((.)([\\\\w)(!-;?-\\u25A0\\\\s]+)['])/g);\\n var hrefRegex = (/(?:href)([\\\\s='\\\"./]+)([\\\\w-./?=&\\\\\\\\#\\\"]+)((.)([\\\\w)(!-;/?-\\u25A0\\\\s]+)['])/g);\\n if(str.match(valueRegEx)){\\n var check = str.match(valueRegEx);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(valueRegEx)[i].split('value=')[1];\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n str = str.replace(str, str1);\\n }\\n else if (str.match(/(?:href='')/) === null) {\\n if(str.match(hrefRegex)) {\\n var check = str.match(hrefRegex);\\n var str1 = str;\\n for (var i=0; i < check.length; i++) {\\n var check1 = str.match(hrefRegex)[i].split('href=')[1];\\n if (check1) {\\n var change = check1.match(/^'/) !== null ? check1.replace(/^'/, '\\\"') : check1;\\n change =change.match(/.$/)[0] === '\\\\'' ? change.replace(/.$/,'\\\"') : change;\\n str1 = str1.replace(check1, change);\\n }\\n }\\n str = str.replace(str, str1);\\n }\\n }\\n \";\n var fnCode = 'var str=\"' + evalExpResult + '\";' + condtion + ' return str;';\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n }\n}\n/** function used to evaluate the function expression\n *\n * @param {string} str ?\n * @param {string} nameSpace ?\n * @param {Object} helper ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction evalExp(str, nameSpace, helper, ignorePrefix) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n var isClass = str.match(/class=\"([^\"]+|)\\s{2}/g);\n var singleSpace = '';\n if (isClass) {\n isClass.forEach(function (value) {\n singleSpace = value.replace(/\\s\\s+/g, ' ');\n str = str.replace(value, singleSpace);\n });\n }\n if (exp.test(str)) {\n var insideBraces = false;\n var outputString = '';\n for (var i = 0; i < str.length; i++) {\n if (str[i + ''] === '$' && str[i + 1] === '{') {\n insideBraces = true;\n }\n else if (str[i + ''] === '}') {\n insideBraces = false;\n }\n outputString += (str[i + ''] === '\"' && !insideBraces) ? '\\\\\"' : str[i + ''];\n }\n str = outputString;\n }\n else {\n str = str.replace(/\\\\?\"/g, '\\\\\"');\n }\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var SPECIAL_CHAR = /@|#|\\$/gm;\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys, ignorePrefix);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORDIF, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys, ignorePrefix)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && Object.prototype.hasOwnProperty.call(helper, fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n var ftArray = matches[1].split(',');\n if (matches[1].length !== 0 && !(/data/).test(ftArray[0]) && !(/window./).test(ftArray[0])) {\n matches[1] = (fNameSpace === 'global' ? nameSpace + '.' + matches[1] : matches[1]);\n }\n var splRegexp = /@|\\$|#/gm;\n var arrObj = /\\]\\./gm;\n if (WINDOWFUNC.test(cnt) && arrObj.test(cnt) || splRegexp.test(cnt)) {\n var splArrRegexp = /@|\\$|#|\\]\\./gm;\n if (splArrRegexp.test(cnt)) {\n cnt = '\"+ ' + (fNameSpace === 'global' ? '' : fNameSpace) + cnt.replace(matches[1], rlStr.replace(WORDFUNC, function (strs) {\n return HandleSpecialCharArrObj(strs, nameSpace, localKeys, ignorePrefix);\n })) + '+ \"';\n }\n }\n else {\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(/,( |)data.|,/gi, ',' + nameSpace + '.').replace(/,( |)data.window/gi, ',window'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys, ignorePrefix)) +\n '+\"';\n }\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n // handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (cnt.match(IF_OR_FOR)) {\n // close condition\n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else if (SPECIAL_CHAR.test(cnt)) {\n // template string with double slash with special character\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n }\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // template string with double slash\n if (cnt.match(SINGLE_SLASH)) {\n cnt = SlashReplace(cnt);\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // evaluate normal expression\n cnt = cnt !== '' ? '\"+' + addNameSpace(cnt.replace(/,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys, ignorePrefix) + '+\"' : '${}';\n }\n }\n return cnt;\n });\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction addNameSpace(str, addNS, nameSpace, ignoreList, ignorePrefix) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1 && !ignorePrefix && str !== 'true' && str !== 'false') ? nameSpace + '.' + str : str);\n}\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceArrObj(str, addNS, nameSpace, ignoreList) {\n var arrObjReg = /^\\..*/gm;\n return ((addNS && !(NOT_NUMBER.test(str)) &&\n ignoreList.indexOf(str.split('.')[0]) === -1 && !(arrObjReg.test(str))) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\n/**\n *\n * @param {string} str ?\n * @param {boolean} addNS ?\n * @param {string} nameSpace ?\n * @param {string[]} ignoreList ?\n * @returns {string} ?\n */\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '[\"' + str : str);\n}\n/**\n * Replace double slashes to single slash.\n *\n * @param {string} tempStr ?\n * @returns {any} ?\n */\nfunction SlashReplace(tempStr) {\n var double = '\\\\\\\\';\n if (tempStr.match(DOUBLE_SLASH)) {\n return tempStr;\n }\n else {\n return tempStr.replace(SINGLE_SLASH, double);\n }\n}\n/**\n *\n * @param {string} str ?\n * @param {string} nameSpaceNew ?\n * @param {string[]} keys ?\n * @param {boolean} ignorePrefix ?\n * @returns {string} ?\n */\nfunction HandleSpecialCharArrObj(str, nameSpaceNew, keys, ignorePrefix) {\n str = str.trim();\n var windowFunc = /\\window\\./gm;\n if (!windowFunc.test(str)) {\n var quotes = /'|\"/gm;\n var splRegexp = /@|\\$|#/gm;\n if (splRegexp.test(str)) {\n str = NameSpaceForspecialChar(str, (keys.indexOf(str) === -1), nameSpaceNew, keys) + '\"]';\n }\n if (ARR_OBJ.test(str)) {\n return NameSpaceArrObj(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys);\n }\n else {\n return addNameSpace(str, !(quotes.test(str)) && (keys.indexOf(str) === -1), nameSpaceNew, keys, ignorePrefix);\n }\n }\n else {\n return str;\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\n/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nimport { isNullOrUndefined, isBlazor } from './util';\nvar HAS_ROW = /^[\\n\\r.]+ 0) {\n elements.forEach(function (element) {\n detach(element);\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeJsEvents = function () {\n var elements = this.wrapElement.querySelectorAll('[' + jsEvents.join('],[') + ']');\n if (elements.length > 0) {\n elements.forEach(function (element) {\n jsEvents.forEach(function (attr) {\n if (element.hasAttribute(attr)) {\n element.removeAttribute(attr);\n }\n });\n });\n }\n else {\n return;\n }\n };\n SanitizeHtmlHelper.removeXssAttrs = function () {\n var _this = this;\n this.removeAttrs.forEach(function (item, index) {\n var elements = _this.wrapElement.querySelectorAll(item.selector);\n if (elements.length > 0) {\n elements.forEach(function (element) {\n element.removeAttribute(item.attribute);\n });\n }\n });\n };\n return SanitizeHtmlHelper;\n}());\nexport { SanitizeHtmlHelper };\n","/**\n * Save class provide method to save file\n * ```typescript\n * let blob : Blob = new Blob([''], { type: 'text/plain' });\n * Save.save('fileName.txt',blob);\n */\nvar Save = /** @class */ (function () {\n /**\n * Initialize new instance of {save}\n */\n function Save() {\n // tslint:disable\n }\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n * @param {boolean} isMicrosoftBrowser- specify whether microsoft browser or not\n * @returns {void}\n */\n Save.save = function (fileName, buffer) {\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('ArgumentException: fileName cannot be undefined, null or empty');\n }\n var extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\n var mimeType = this.getMimeType(extension);\n if (mimeType !== '') {\n buffer = new Blob([buffer], { type: mimeType });\n }\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(buffer, fileName);\n }\n else {\n var downloadLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n this.saveInternal(fileName, extension, buffer, downloadLink, 'download' in downloadLink);\n }\n };\n Save.saveInternal = function (fileName, extension, buffer, downloadLink, hasDownloadAttribute) {\n if (hasDownloadAttribute) {\n downloadLink.download = fileName;\n var dataUrl_1 = window.URL.createObjectURL(buffer);\n downloadLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n downloadLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n dataUrl_1 = undefined;\n });\n }\n else {\n if (extension !== 'docx' && extension !== 'xlsx') {\n var url = window.URL.createObjectURL(buffer);\n var isPopupBlocked = window.open(url, '_blank');\n if (!isPopupBlocked) {\n window.location.href = url;\n }\n }\n else {\n var reader_1 = new FileReader();\n reader_1.onloadend = function () {\n var isPopupBlocked = window.open(reader_1.result, '_blank');\n if (!isPopupBlocked) {\n window.location.href = reader_1.result;\n }\n };\n reader_1.readAsDataURL(buffer);\n }\n }\n };\n /**\n *\n * @param {string} extension - get mime type of the specified extension\n * @private\n */\n Save.getMimeType = function (extension) {\n var mimeType = '';\n switch (extension) {\n case 'html':\n mimeType = 'text/html';\n break;\n case 'pdf':\n mimeType = 'application/pdf';\n break;\n case 'docx':\n mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n break;\n case 'xlsx':\n mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n break;\n case 'txt':\n mimeType = 'text/plain';\n break;\n }\n return mimeType;\n };\n return Save;\n}());\nexport { Save };\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar XmlHttpRequestHandler = /** @class */ (function () {\n function XmlHttpRequestHandler() {\n /**\n * A boolean value indicating whether the request should be sent asynchronous or not.\n *\n * @default true\n */\n this.mode = true;\n }\n /**\n * Send the request to server\n *\n * @param {object} jsonObject - To send to service\n */\n XmlHttpRequestHandler.prototype.send = function (jsonObject, httpRequestEventArgs, isAsync) {\n var _this = this;\n this.xmlHttpRequest = new XMLHttpRequest();\n var timeout = 0;\n isAsync = isNullOrUndefined(isAsync) ? true : isAsync;\n if (!isNullOrUndefined(httpRequestEventArgs)) {\n this.xmlHttpRequest.withCredentials = httpRequestEventArgs.withCredentials;\n timeout = (httpRequestEventArgs.timeout >= 0 ? httpRequestEventArgs.timeout : 0);\n this.customHeaders = httpRequestEventArgs.headers;\n }\n this.xmlHttpRequest.onreadystatechange = function () {\n _this.stateChange(_this);\n };\n this.xmlHttpRequest.onerror = function () {\n _this.error(_this);\n };\n if (!this.mode) {\n setTimeout(function () {\n _this.sendRequest(jsonObject, timeout, isAsync);\n });\n }\n else {\n this.sendRequest(jsonObject, timeout, isAsync);\n }\n };\n XmlHttpRequestHandler.prototype.sendRequest = function (jsonObj, timeout, isAsync) {\n this.xmlHttpRequest.open('POST', this.url, isAsync);\n if (isAsync) {\n this.xmlHttpRequest.timeout = timeout;\n }\n if (this.contentType) {\n this.xmlHttpRequest.setRequestHeader('Content-Type', this.contentType);\n }\n this.setCustomAjaxHeaders();\n if (this.responseType) {\n this.xmlHttpRequest.responseType = this.responseType;\n }\n var data = jsonObj instanceof FormData ? jsonObj : JSON.stringify(jsonObj);\n this.xmlHttpRequest.send(data); // jshint ignore:line\n };\n XmlHttpRequestHandler.prototype.stateChange = function (proxyReq) {\n if (proxyReq.xmlHttpRequest.readyState === 4 && proxyReq.xmlHttpRequest.status === 200) {\n var data = void 0;\n if (this.responseType) {\n data = proxyReq.xmlHttpRequest.response;\n }\n else {\n data = proxyReq.xmlHttpRequest.responseText;\n }\n var result = {\n name: 'onSuccess',\n data: data,\n readyState: proxyReq.xmlHttpRequest.readyState,\n status: proxyReq.xmlHttpRequest.status\n };\n proxyReq.successHandler(result);\n }\n else if (proxyReq.xmlHttpRequest.readyState === 4 && !(proxyReq.xmlHttpRequest.status === 200)) { // jshint ignore:line)\n var result = {\n name: 'onFailure',\n status: proxyReq.xmlHttpRequest.status,\n statusText: proxyReq.xmlHttpRequest.statusText,\n url: proxyReq.url\n };\n proxyReq.failureHandler(result);\n }\n };\n XmlHttpRequestHandler.prototype.error = function (proxyReq) {\n var result = {\n name: 'onError',\n status: this.xmlHttpRequest.status,\n statusText: this.xmlHttpRequest.statusText\n };\n proxyReq.errorHandler(result);\n };\n XmlHttpRequestHandler.prototype.successHandler = function (response) {\n if (this.onSuccess) {\n this.onSuccess(response);\n }\n return response;\n };\n XmlHttpRequestHandler.prototype.failureHandler = function (response) {\n if (this.onFailure) {\n this.onFailure(response);\n }\n return response;\n };\n XmlHttpRequestHandler.prototype.errorHandler = function (response) {\n if (this.onError) {\n this.onError(response);\n }\n return response;\n };\n XmlHttpRequestHandler.prototype.setCustomAjaxHeaders = function () {\n for (var i = 0; i < this.customHeaders.length; i++) {\n var header = this.customHeaders[i];\n for (var _i = 0, _a = Object.keys(header); _i < _a.length; _i++) {\n var key = _a[_i];\n this.xmlHttpRequest.setRequestHeader(key, header[key]);\n }\n }\n };\n return XmlHttpRequestHandler;\n}());\nexport { XmlHttpRequestHandler };\n","/** @hidden */\nexport var internalZoomFactorChange = 'internalZoomFactorChange';\n/** @hidden */\nexport var contentChangeEvent = 'contentChange';\n/** @hidden */\nexport var documentChangeEvent = 'documentChange';\n/** @hidden */\nexport var selectionChangeEvent = 'selectionChange';\n/** @hidden */\nexport var zoomFactorChangeEvent = 'zoomFactorChange';\n/** @hidden */\nexport var beforeFieldFillEvent = 'beforeFieldFill';\n/** @hidden */\nexport var afterFieldFillEvent = 'afterFieldFill';\n/** @hidden */\nexport var afterFormFieldFillEvent = 'afterFormFieldFill';\n/** @hidden */\nexport var beforeFormFieldFillEvent = 'beforeFormFieldFill';\n/** @hidden */\nexport var serviceFailureEvent = 'serviceFailure';\n/** @hidden */\nexport var viewChangeEvent = 'viewChange';\n/** @hidden */\nexport var customContextMenuSelectEvent = 'customContextMenuSelect';\n/** @hidden */\nexport var customContextMenuBeforeOpenEvent = 'customContextMenuBeforeOpen';\n/** @hidden */\nexport var contentControlEvent = 'contentControl';\n/** @hidden */\nexport var commentBeginEvent = 'commentBegin';\n/** @hidden */\nexport var commentEndEvent = 'commentEnd';\n/** @hidden */\nexport var beforeCommentActionEvent = 'beforeCommentAction';\n/** @hidden */\nexport var commentDeleteEvent = 'commentDelete';\n/** @hidden */\nexport var revisionActionEvent = 'beforeAcceptRejectChanges';\n/** @hidden */\nexport var beforePaneSwitchEvent = 'beforePaneSwitch';\n/** @hidden */\nexport var requestNavigateEvent = 'requestNavigate';\n/** @hidden */\nexport var actionCompleteEvent = 'actionComplete';\n/** @hidden */\nexport var trackChangeEvent = 'trackChange';\n/** @hidden */\nexport var searchResultsChangeEvent = 'searchResultsChange';\n/** @hidden */\nexport var keyDownEvent = 'keyDown';\n/** @hidden */\nexport var toolbarClickEvent = 'toolbarClick';\n/** @hidden */\nexport var beforeFileOpenEvent = 'beforeFileOpen';\n/** @hidden */\nexport var internalviewChangeEvent = 'internalviewChange';\n/** @hidden */\nexport var beforeXmlHttpRequestSend = 'beforeXmlHttpRequestSend';\n/** @hidden */\nexport var protectionTypeChangeEvent = 'protectionTypeChange';\n/** @hidden */\nexport var internalDocumentEditorSettingsChange = 'internalDocumentEditorSettingsChange';\n/** @hidden */\nexport var internalStyleCollectionChange = 'internalStyleCollectionChange';\n/** @hidden */\nexport var defaultFont = 'Times New Roman';\n/** @hidden */\nexport var internalAutoResize = 'internalAutoResize';\n/** @hidden */\nexport var beforeAutoResize = 'beforeAutoResize';\n/** @hidden */\nexport var trackChanges = 'trackChanges';\n/** @hidden */\nexport var internalOptionPaneChange = 'internalOptionPaneChange';\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Dictionary = /** @class */ (function () {\n function Dictionary() {\n this.keysInternal = [];\n this.valuesInternal = [];\n }\n Object.defineProperty(Dictionary.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.keysInternal.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Dictionary.prototype, \"keys\", {\n /**\n * @private\n */\n get: function () {\n return this.keysInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Dictionary.prototype, \"values\", {\n /**\n * @private\n */\n get: function () {\n return this.valuesInternal;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n Dictionary.prototype.add = function (key, value) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n // if (index < 0 || index > this.keysInternal.length - 1) {\n if (index < 0) {\n this.keysInternal.push(key);\n this.valuesInternal.push(value);\n }\n return 1;\n // else {\n // throw new RangeError('An item with the same key has already been added.');\n // }\n };\n /**\n * @private\n */\n Dictionary.prototype.get = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n return undefined;\n //throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.valuesInternal[index];\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.set = function (key, value) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.valuesInternal[index] = value;\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.remove = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.keysInternal.splice(index, 1);\n this.valuesInternal.splice(index, 1);\n return true;\n }\n };\n /**\n * @private\n */\n Dictionary.prototype.containsKey = function (key) {\n if (isNullOrUndefined(key)) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.keysInternal.indexOf(key);\n if (index < 0 || index > this.keysInternal.length - 1) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n Dictionary.prototype.clear = function () {\n this.keysInternal = [];\n this.valuesInternal = [];\n };\n /**\n * @private\n */\n Dictionary.prototype.destroy = function () {\n this.clear();\n this.keysInternal = undefined;\n this.valuesInternal = undefined;\n };\n return Dictionary;\n}());\nexport { Dictionary };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WAbstractList = /** @class */ (function () {\n function WAbstractList() {\n this.abstractListIdIn = -1;\n this.nsid = -1;\n this.levels = [];\n }\n Object.defineProperty(WAbstractList.prototype, \"abstractListId\", {\n get: function () {\n return this.abstractListIdIn;\n },\n set: function (abstractListId) {\n this.abstractListIdIn = abstractListId;\n },\n enumerable: true,\n configurable: true\n });\n WAbstractList.prototype.clear = function () {\n if (!isNullOrUndefined(this.levels)) {\n for (var i = 0; i < this.levels.length; i++) {\n var listLevel = this.levels[parseInt(i.toString(), 10)];\n listLevel.clearFormat();\n this.levels.splice(this.levels.indexOf(listLevel), 1);\n i--;\n }\n this.levels = [];\n }\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n * @returns {void}\n */\n WAbstractList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levels)) {\n for (var i = 0; i < this.levels.length; i++) {\n var listLevel = this.levels[parseInt(i.toString(), 10)];\n listLevel.destroy();\n this.levels.splice(this.levels.indexOf(listLevel), 1);\n i--;\n }\n this.levels = [];\n }\n this.levels = undefined;\n };\n WAbstractList.prototype.clone = function () {\n var absList = new WAbstractList();\n for (var i = 0; i < this.levels.length; i++) {\n absList.levels.push(this.levels[parseInt(i.toString(), 10)].clone(absList));\n }\n return absList;\n };\n return WAbstractList;\n}());\nexport { WAbstractList };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WLevelOverride = /** @class */ (function () {\n function WLevelOverride() {\n }\n /**\n * @private\n * @returns {void}\n */\n WLevelOverride.prototype.clear = function () {\n if (!isNullOrUndefined(this.overrideListLevel)) {\n this.overrideListLevel.clearFormat();\n }\n this.overrideListLevel = undefined;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n * @returns {void}\n */\n WLevelOverride.prototype.destroy = function () {\n if (!isNullOrUndefined(this.overrideListLevel)) {\n this.overrideListLevel.destroy();\n }\n this.levelNumber = undefined;\n this.startAt = undefined;\n this.overrideListLevel = undefined;\n };\n WLevelOverride.prototype.clone = function () {\n var levelOverride = new WLevelOverride();\n levelOverride.startAt = this.startAt;\n levelOverride.levelNumber = this.levelNumber;\n if (!isNullOrUndefined(this.overrideListLevel)) {\n levelOverride.overrideListLevel = this.overrideListLevel.clone(levelOverride);\n }\n return levelOverride;\n };\n return WLevelOverride;\n}());\nexport { WLevelOverride };\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from './dictionary';\n/**\n * @private\n */\nvar WUniqueFormat = /** @class */ (function () {\n function WUniqueFormat(type) {\n this.referenceCount = 0;\n this.uniqueFormatType = type;\n this.propertiesHash = new Dictionary();\n }\n /**\n * @private\n */\n WUniqueFormat.prototype.isEqual = function (source, property, modifiedValue) {\n var isEqual = false;\n switch (this.uniqueFormatType) {\n case 1:\n isEqual = this.isBorderEqual(source, property, modifiedValue);\n break;\n case 2:\n isEqual = this.isCharacterFormatEqual(source, property, modifiedValue);\n break;\n case 3:\n isEqual = this.isParagraphFormatEqual(source, property, modifiedValue);\n break;\n case 4:\n isEqual = this.isCellFormatEqual(source, property, modifiedValue);\n break;\n case 5:\n isEqual = this.isShadingEqual(source, property, modifiedValue);\n break;\n case 6:\n isEqual = this.isRowFormatEqual(source, property, modifiedValue);\n break;\n case 7:\n isEqual = this.isListFormatEqual(source, property, modifiedValue);\n break;\n case 8:\n isEqual = this.isTableFormatEqual(source, property, modifiedValue);\n break;\n case 9:\n isEqual = this.isListLevelEqual(source, property, modifiedValue);\n break;\n case 10:\n isEqual = this.isSectionFormatEqual(source, property, modifiedValue);\n break;\n case 11:\n isEqual = this.isColumnFormatEqual(source, property, modifiedValue);\n break;\n default:\n break;\n }\n return isEqual;\n };\n WUniqueFormat.prototype.isNotEqual = function (property, source, modifiedProperty, modifiedValue, uniqueFormatType) {\n var targetValue = undefined;\n var propertyType = WUniqueFormat.getPropertyType(uniqueFormatType, property);\n if (this.propertiesHash.containsKey(propertyType)) {\n targetValue = this.propertiesHash.get(propertyType);\n }\n var sourceValue = undefined;\n if (property === modifiedProperty) {\n sourceValue = modifiedValue;\n }\n else if (source.containsKey(propertyType)) {\n sourceValue = source.get(propertyType);\n }\n if (!(targetValue === sourceValue || (!isNullOrUndefined(targetValue) && !isNullOrUndefined(sourceValue) && targetValue === sourceValue))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n WUniqueFormat.getPropertyType = function (uniqueFormatType, property) {\n var type = 0;\n switch (uniqueFormatType) {\n case 1:\n type = this.getBorderPropertyType(property);\n break;\n case 2:\n type = this.getCharacterFormatPropertyType(property);\n break;\n case 3:\n type = this.getParaFormatPropertyType(property);\n break;\n case 4:\n type = this.getCellFormatPropertyType(property);\n break;\n case 5:\n type = this.getShadingPropertyType(property);\n break;\n case 6:\n type = this.getRowFormatType(property);\n break;\n case 7:\n type = this.getListFormatType(property);\n break;\n case 8:\n type = this.getTableFormatType(property);\n break;\n case 9:\n type = this.getListLevelType(property);\n break;\n case 10:\n type = this.getSectionFormatType(property);\n break;\n case 11:\n type = this.getColumnFormatType(property);\n break;\n default:\n break;\n }\n return type;\n };\n WUniqueFormat.getRowFormatType = function (property) {\n if (property === 'allowBreakAcrossPages') {\n return 1;\n }\n if (property === 'isHeader') {\n return 2;\n }\n if (property === 'height') {\n return 3;\n }\n if (property === 'heightType') {\n return 4;\n }\n if (property === 'gridBefore') {\n return 5;\n }\n if (property === 'gridBeforeWidth') {\n return 6;\n }\n if (property === 'gridBeforeWidthType') {\n return 7;\n }\n if (property === 'gridAfter') {\n return 8;\n }\n if (property === 'gridAfterWidth') {\n return 9;\n }\n if (property === 'gridAfterWidthType') {\n return 10;\n }\n if (property === 'leftMargin') {\n return 11;\n }\n if (property === 'topMargin') {\n return 12;\n }\n if (property === 'bottomMargin') {\n return 13;\n }\n if (property === 'rightMargin') {\n return 14;\n }\n if (property === 'leftIndent') {\n return 15;\n }\n return 0;\n };\n WUniqueFormat.getListFormatType = function (property) {\n if (property === 'listId') {\n return 1;\n }\n if (property === 'listLevelNumber') {\n return 2;\n }\n if (property === 'nsid') {\n return 3;\n }\n return 0;\n };\n WUniqueFormat.getTableFormatType = function (property) {\n if (property === 'leftMargin') {\n return 1;\n }\n if (property === 'rightMargin') {\n return 2;\n }\n if (property === 'topMargin') {\n return 3;\n }\n if (property === 'bottomMargin') {\n return 4;\n }\n if (property === 'cellSpacing') {\n return 5;\n }\n if (property === 'leftIndent') {\n return 6;\n }\n if (property === 'tableAlignment') {\n return 7;\n }\n if (property === 'preferredWidth') {\n return 8;\n }\n if (property === 'preferredWidthType') {\n return 9;\n }\n if (property === 'bidi') {\n return 10;\n }\n if (property === 'allowAutoFit') {\n return 11;\n }\n if (property === 'horizontalPositionAbs') {\n return 12;\n }\n if (property === 'horizontalPosition') {\n return 13;\n }\n return 0;\n };\n WUniqueFormat.getListLevelType = function (property) {\n if (property === 'listLevelPattern') {\n return 1;\n }\n if (property === 'startAt') {\n return 2;\n }\n if (property === 'followCharacter') {\n return 3;\n }\n if (property === 'numberFormat') {\n return 4;\n }\n if (property === 'restartLevel') {\n return 5;\n }\n if (property === 'isLegalStyleNumbering') {\n return 6;\n }\n if (property === 'paraStyleName') {\n return 7;\n }\n return 0;\n };\n WUniqueFormat.getShadingPropertyType = function (property) {\n if (property === 'backgroundColor') {\n return 1;\n }\n if (property === 'foregroundColor') {\n return 2;\n }\n if (property === 'textureStyle') {\n return 3;\n }\n return 0;\n };\n WUniqueFormat.getCellFormatPropertyType = function (property) {\n if (property === 'leftMargin') {\n return 1;\n }\n if (property === 'rightMargin') {\n return 2;\n }\n if (property === 'topMargin') {\n return 3;\n }\n if (property === 'bottomMargin') {\n return 4;\n }\n if (property === 'columnSpan') {\n return 5;\n }\n if (property === 'rowSpan') {\n return 6;\n }\n if (property === 'verticalAlignment') {\n return 7;\n }\n if (property === 'preferredWidthType') {\n return 8;\n }\n if (property === 'preferredWidth') {\n return 9;\n }\n if (property === 'cellWidth') {\n return 10;\n }\n return 0;\n };\n WUniqueFormat.getBorderPropertyType = function (property) {\n if (property === 'color') {\n return 1;\n }\n if (property === 'lineStyle') {\n return 2;\n }\n if (property === 'lineWidth') {\n return 3;\n }\n if (property === 'shadow') {\n return 4;\n }\n if (property === 'space') {\n return 5;\n }\n if (property === 'hasNoneStyle') {\n return 6;\n }\n return 0;\n };\n WUniqueFormat.getCharacterFormatPropertyType = function (property) {\n if (property === 'fontColor') {\n return 1;\n }\n if (property === 'fontFamily') {\n return 2;\n }\n if (property === 'fontSize') {\n return 3;\n }\n if (property === 'bold') {\n return 4;\n }\n if (property === 'italic') {\n return 5;\n }\n if (property === 'underline') {\n return 6;\n }\n if (property === 'strikethrough') {\n return 7;\n }\n if (property === 'baselineAlignment') {\n return 8;\n }\n if (property === 'highlightColor') {\n return 9;\n }\n if (property === 'bidi') {\n return 10;\n }\n if (property === 'bdo') {\n return 11;\n }\n if (property === 'boldBidi') {\n return 12;\n }\n if (property === 'italicBidi') {\n return 13;\n }\n if (property === 'fontFamilyBidi') {\n return 14;\n }\n if (property === 'fontSizeBidi') {\n return 15;\n }\n if (property === 'allCaps') {\n return 16;\n }\n if (property === 'localeIdBidi') {\n return 17;\n }\n if (property === 'complexScript') {\n return 18;\n }\n if (property === 'fontFamilyFarEast') {\n return 19;\n }\n if (property === 'fontFamilyAscii') {\n return 20;\n }\n if (property === 'fontFamilyNonFarEast') {\n return 21;\n }\n if (property === 'localeIdAscii') {\n return 22;\n }\n if (property === 'localeIdFarEast') {\n return 23;\n }\n if (property === 'characterSpacing') {\n return 24;\n }\n if (property === 'scaling') {\n return 25;\n }\n return 0;\n };\n WUniqueFormat.getParaFormatPropertyType = function (property) {\n if (property === 'leftIndent') {\n return 1;\n }\n if (property === 'rightIndent') {\n return 2;\n }\n if (property === 'firstLineIndent') {\n return 3;\n }\n if (property === 'textAlignment') {\n return 4;\n }\n if (property === 'beforeSpacing') {\n return 5;\n }\n if (property === 'afterSpacing') {\n return 6;\n }\n if (property === 'lineSpacing') {\n return 7;\n }\n if (property === 'lineSpacingType') {\n return 8;\n }\n if (property === 'outlineLevel') {\n return 9;\n }\n if (property === 'bidi') {\n return 10;\n }\n if (property === 'contextualSpacing') {\n return 11;\n }\n if (property === 'keepWithNext') {\n return 12;\n }\n if (property === 'keepLinesTogether') {\n return 13;\n }\n if (property === 'widowControl') {\n return 14;\n }\n if (property === 'spaceBeforeAuto') {\n return 15;\n }\n if (property === 'spaceAfterAuto') {\n return 16;\n }\n return 0;\n };\n WUniqueFormat.getColumnFormatType = function (property) {\n if (property === 'width') {\n return 1;\n }\n if (property === 'space') {\n return 2;\n }\n return 0;\n };\n WUniqueFormat.getSectionFormatType = function (property) {\n if (property === 'headerDistance') {\n return 1;\n }\n if (property === 'footerDistance') {\n return 2;\n }\n if (property === 'differentFirstPage') {\n return 3;\n }\n if (property === 'differentOddAndEvenPages') {\n return 4;\n }\n if (property === 'pageWidth') {\n return 5;\n }\n if (property === 'pageHeight') {\n return 6;\n }\n if (property === 'leftMargin') {\n return 7;\n }\n if (property === 'topMargin') {\n return 8;\n }\n if (property === 'rightMargin') {\n return 9;\n }\n if (property === 'bottomMargin') {\n return 10;\n }\n if (property === 'bidi') {\n return 11;\n }\n if (property === 'restartPageNumbering') {\n return 12;\n }\n if (property === 'pageStartingNumber') {\n return 13;\n }\n if (property === 'endnoteNumberFormat') {\n return 14;\n }\n if (property === 'endnotePosition') {\n return 15;\n }\n if (property === 'footNoteNumberFormat') {\n return 16;\n }\n if (property === 'footnotePosition') {\n return 17;\n }\n if (property === 'restartIndexForEndnotes') {\n return 18;\n }\n if (property === 'restartIndexForFootnotes') {\n return 19;\n }\n if (property === 'initialFootNoteNumber') {\n return 20;\n }\n if (property === 'initialEndNoteNumber') {\n return 21;\n }\n if (property === 'pageNumberStyle') {\n return 22;\n }\n if (property === 'numberOfColumns') {\n return 23;\n }\n if (property === 'equalWidth') {\n return 24;\n }\n if (property === 'lineBetweenColumns') {\n return 25;\n }\n if (property === 'columns') {\n return 26;\n }\n if (property === 'breakCode') {\n return 27;\n }\n return 0;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isBorderEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('color', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('lineStyle', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('lineWidth', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('shadow', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('space', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n if (this.isNotEqual('hasNoneStyle', source, modifiedProperty, modifiedValue, 1)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isCharacterFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('fontColor', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontFamily', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontSize', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('bold', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('italic', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('underline', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('strikethrough', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('baselineAlignment', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('highlightColor', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('bidi', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('bdo', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontColor', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontFamilyBidi', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontSizeBidi', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('boldBidi', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('italicBidi', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('allCaps', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('localeIdBidi', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('localeIdAscii', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('complexScript', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontFamilyFarEast', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontFamilyAscii', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('fontFamilyNonFarEast', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('characterSpacing', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n if (this.isNotEqual('scaling', source, modifiedProperty, modifiedValue, 2)) {\n return false;\n }\n return true;\n };\n WUniqueFormat.prototype.isParagraphFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('rightIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('firstLineIndent', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('textAlignment', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('beforeSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('afterSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('spaceBeforeAuto', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('spaceAfterAuto', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('lineSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('lineSpacingType', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('outlineLevel', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('bidi', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('contextualSpacing', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('keepWithNext', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('keepLinesTogether', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n if (this.isNotEqual('widowControl', source, modifiedProperty, modifiedValue, 3)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isCellFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('columnSpan', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('rowSpan', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('verticalAlignment', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('preferredWidthType', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('preferredWidth', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n if (this.isNotEqual('cellWidth', source, modifiedProperty, modifiedValue, 4)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isShadingEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('backgroundColor', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n if (this.isNotEqual('foregroundColor', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n if (this.isNotEqual('textureStyle', source, modifiedProperty, modifiedValue, 5)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isRowFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('allowBreakAcrossPages', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('isHeader', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('height', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('heightType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBefore', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBeforeWidth', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridBeforeWidthType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfter', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfterWidth', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('gridAfterWidthType', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n if (this.isNotEqual('leftIndent', source, modifiedProperty, modifiedValue, 6)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isListFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('listId', source, modifiedProperty, modifiedValue, 7)) {\n return false;\n }\n if (this.isNotEqual('listLevelNumber', source, modifiedProperty, modifiedValue, 7)) {\n return false;\n }\n if (this.isNotEqual('nsid', source, modifiedProperty, modifiedValue, 7)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isTableFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('cellSpacing', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('leftIndent', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('tableAlignment', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('preferredWidth', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('preferredWidthType', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('bidi', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('allowAutoFit', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('horizontalPositionAbs', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n if (this.isNotEqual('horizontalPosition', source, modifiedProperty, modifiedValue, 8)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isListLevelEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('listLevelPattern', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('startAt', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('followCharacter', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('numberFormat', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('paraStyleName', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('restartLevel', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n if (this.isNotEqual('isLegalStyleNumbering', source, modifiedProperty, modifiedValue, 9)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isSectionFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('headerDistance', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('footerDistance', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('differentFirstPage', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('differentOddAndEvenPages', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageWidth', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageHeight', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('leftMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('topMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('rightMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('bottomMargin', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('bidi', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('restartPageNumbering', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageStartingNumber', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('endnoteNumberFormat', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('endnotePosition', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('footNoteNumberFormat', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('footnotePosition', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('restartIndexForEndnotes', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('restartIndexForFootnotes', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('initialFootNoteNumber', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('initialEndNoteNumber', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('pageNumberStyle', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('numberOfColumns', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('equalWidth', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('lineBetweenColumns', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n if (this.isNotEqual('breakCode', source, modifiedProperty, modifiedValue, 10)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.isColumnFormatEqual = function (source, modifiedProperty, modifiedValue) {\n if (this.isNotEqual('width', source, modifiedProperty, modifiedValue, 11)) {\n return false;\n }\n if (this.isNotEqual('space', source, modifiedProperty, modifiedValue, 11)) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.cloneItems = function (format, property, value, uniqueFormatType) {\n var propertyType = WUniqueFormat.getPropertyType(uniqueFormatType, property);\n var keys = format.propertiesHash.keys;\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === propertyType) {\n this.propertiesHash.add(propertyType, value);\n }\n else {\n this.propertiesHash.add(keys[i], format.propertiesHash.get(keys[i]));\n }\n }\n if (!format.propertiesHash.containsKey(propertyType)) {\n this.propertiesHash.add(propertyType, value);\n }\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.mergeProperties = function (format) {\n var hash = format.cloneProperties();\n var keys = this.propertiesHash.keys;\n for (var i = 0; i < keys.length; i++) {\n if (!hash.containsKey(keys[i])) {\n hash.add(keys[i], this.propertiesHash.get(keys[i]));\n }\n }\n return hash;\n };\n /**\n * @private\n */\n WUniqueFormat.prototype.cloneProperties = function () {\n var hash = new Dictionary();\n var keys = this.propertiesHash.keys;\n for (var i = 0; i < keys.length; i++) {\n hash.add(keys[i], this.propertiesHash.get(keys[i]));\n }\n return hash;\n };\n // public cloneItemsInternal(format: WUniqueFormat): void {\n // let keys: number[] = format.propertiesHash.getItem();\n // for (let i: number = 0; i < keys.length; i++) {\n // this.propertiesHash.add(keys[i], format.propertiesHash.get(keys[i]));\n // }\n // this.referenceCount = format.referenceCount;\n // }\n /**\n * @private\n */\n WUniqueFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.propertiesHash)) {\n this.propertiesHash.destroy();\n }\n this.propertiesHash = undefined;\n this.referenceCount = undefined;\n this.uniqueFormatType = undefined;\n };\n return WUniqueFormat;\n}());\nexport { WUniqueFormat };\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from './unique-format';\n/**\n * @private\n */\nvar WUniqueFormats = /** @class */ (function () {\n function WUniqueFormats() {\n this.items = [];\n }\n /**\n * @private\n */\n WUniqueFormats.prototype.addUniqueFormat = function (format, type) {\n var matchedFormat = undefined;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEqual(format, undefined, undefined)) {\n matchedFormat = this.items[i];\n break;\n }\n }\n if (isNullOrUndefined(matchedFormat)) {\n matchedFormat = new WUniqueFormat(type);\n matchedFormat.propertiesHash = format;\n matchedFormat.referenceCount = 1;\n this.items.push(matchedFormat);\n }\n else {\n matchedFormat.referenceCount++;\n }\n return matchedFormat;\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.updateUniqueFormat = function (uniqueFormat, property, value) {\n var matchedFormat = undefined;\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i].isEqual(uniqueFormat.propertiesHash, property, value)) {\n matchedFormat = this.items[i];\n break;\n }\n }\n if (isNullOrUndefined(matchedFormat)) {\n matchedFormat = new WUniqueFormat(uniqueFormat.uniqueFormatType);\n matchedFormat.cloneItems(uniqueFormat, property, value, uniqueFormat.uniqueFormatType);\n matchedFormat.referenceCount = 1;\n this.items.push(matchedFormat);\n }\n else {\n matchedFormat.referenceCount++;\n }\n this.remove(uniqueFormat);\n return matchedFormat;\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.remove = function (uniqueFormat) {\n uniqueFormat.referenceCount--;\n if (uniqueFormat.referenceCount <= 0) {\n this.items.splice(this.items.indexOf(uniqueFormat), 1);\n uniqueFormat.destroy();\n uniqueFormat = undefined;\n }\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.clear = function () {\n if (isNullOrUndefined(this.items)) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n }\n this.items = [];\n };\n /**\n * @private\n */\n WUniqueFormats.prototype.destroy = function () {\n this.clear();\n this.items = undefined;\n };\n return WUniqueFormats;\n}());\nexport { WUniqueFormats };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WBorder = /** @class */ (function () {\n function WBorder(node) {\n this.uniqueBorderFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorder.prototype, \"color\", {\n get: function () {\n return this.getPropertyValue('color');\n },\n set: function (value) {\n this.setPropertyValue('color', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineStyle\", {\n get: function () {\n return this.getPropertyValue('lineStyle');\n },\n set: function (value) {\n this.setPropertyValue('lineStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"lineWidth\", {\n get: function () {\n return this.getPropertyValue('lineWidth');\n },\n set: function (value) {\n this.setPropertyValue('lineWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"shadow\", {\n get: function () {\n return this.getPropertyValue('shadow');\n },\n set: function (value) {\n this.setPropertyValue('shadow', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"space\", {\n get: function () {\n return this.getPropertyValue('space');\n },\n set: function (value) {\n this.setPropertyValue('space', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"hasNoneStyle\", {\n get: function () {\n return this.getPropertyValue('hasNoneStyle');\n },\n set: function (value) {\n this.setPropertyValue('hasNoneStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorder.prototype, \"isBorderDefined\", {\n get: function () {\n return (this.lineStyle !== 'None' ||\n (this.hasNoneStyle && this.hasValue('hasNoneStyle')));\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-disable */\n WBorder.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n var propValue = this.uniqueBorderFormat.propertiesHash.get(propertyType);\n if (!isNullOrUndefined(propValue)) {\n return propValue;\n }\n }\n }\n return WBorder.getPropertyDefaultValue(property);\n };\n WBorder.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WBorder.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueBorderFormat)) {\n this.initializeUniqueBorder(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n if (this.uniqueBorderFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueBorderFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.updateUniqueFormat(this.uniqueBorderFormat, property, value);\n }\n };\n WBorder.prototype.initializeUniqueBorder = function (property, propValue) {\n var uniqueBorderFormatTemp = new Dictionary();\n this.addUniqueBorderFormat('color', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineStyle', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('lineWidth', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('shadow', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('space', property, propValue, uniqueBorderFormatTemp);\n this.addUniqueBorderFormat('hasNoneStyle', property, propValue, uniqueBorderFormatTemp);\n this.uniqueBorderFormat = WBorder.uniqueBorderFormats.addUniqueFormat(uniqueBorderFormatTemp, WBorder.uniqueFormatType);\n };\n WBorder.prototype.addUniqueBorderFormat = function (property, modifiedProperty, propValue, uniqueBorderFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WBorder.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueBorderFormatTemp.add(propertyType, propValue);\n }\n };\n WBorder.getPropertyDefaultValue = function (property) {\n var value = undefined;\n /* eslint-enable */\n switch (property) {\n case 'color':\n value = '#000000';\n break;\n case 'lineStyle':\n value = 'None';\n break;\n case 'lineWidth':\n value = 0;\n break;\n case 'shadow':\n value = false;\n break;\n case 'space':\n value = 0;\n break;\n case 'hasNoneStyle':\n value = false;\n break;\n }\n return value;\n };\n WBorder.prototype.getLineWidth = function () {\n /* eslint-disable */\n switch (this.lineStyle) {\n case 'None':\n case 'Cleared':\n return 0;\n case 'Triple':\n case 'Double':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'Emboss3D':\n case 'Engrave3D':\n {\n var lineArray = this.getBorderLineWidthArray(this.lineStyle, this.lineWidth);\n var width = 0;\n for (var i = 0; i < lineArray.length; i++) {\n width += lineArray[i];\n }\n return width;\n }\n case 'Single':\n case 'DashLargeGap':\n case 'DashSmallGap':\n case 'Dot':\n case 'DashDot':\n case 'DashDotDot':\n case 'Thick':\n return (this.lineWidth >= 0.5 ? this.lineWidth : 0.5);\n case 'SingleWavy':\n return (this.lineWidth === 1.5 ? 3 : 2.5); //Double wave border only draw with the fixed width\n case 'DoubleWavy':\n return (6.75); //Double wave border only draw with the fixed width\n case 'DashDotStroked':\n case 'Outset':\n return (this.lineWidth >= 0.5 ? this.lineWidth : 0.5);\n }\n return (this.lineWidth >= 0.5 ? this.lineWidth : 0.5);\n /* eslint-enable */\n };\n WBorder.prototype.getBorderLineWidthArray = function (lineStyle, lineWidth) {\n var borderLineArray = [lineWidth];\n switch (lineStyle) {\n case 'Double':\n borderLineArray = [1, 1, 1];\n break;\n case 'ThinThickSmallGap':\n borderLineArray = [1, -0.75, -0.75];\n break;\n case 'ThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1];\n break;\n case 'ThinThickMediumGap':\n borderLineArray = [1, 0.5, 0.5];\n break;\n case 'ThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1];\n break;\n case 'ThinThickLargeGap':\n borderLineArray = [-1.5, 1, -0.75];\n break;\n case 'ThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5];\n break;\n case 'Triple':\n borderLineArray = [1, 1, 1, 1, 1];\n break;\n case 'ThinThickThinSmallGap':\n borderLineArray = [-0.75, -0.75, 1, -0.75, -0.75];\n break;\n case 'ThinThickThinMediumGap':\n borderLineArray = [0.5, 0.5, 1, 0.5, 0.5];\n break;\n case 'ThinThickThinLargeGap':\n borderLineArray = [-0.75, 1, -1.5, 1, -0.75];\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n borderLineArray = [0.25, 0, 1, 0, 0.25];\n break;\n }\n if (borderLineArray.length === 1) {\n return [lineWidth];\n }\n for (var i = 0; i < borderLineArray.length; i++) {\n if (borderLineArray[parseInt(i.toString(), 10)] >= 0) {\n borderLineArray[parseInt(i.toString(), 10)] = borderLineArray[parseInt(i.toString(), 10)] * lineWidth;\n }\n else {\n borderLineArray[parseInt(i.toString(), 10)] = Math.abs(borderLineArray[parseInt(i.toString(), 10)]);\n }\n }\n return borderLineArray;\n };\n WBorder.prototype.getBorderWeight = function () {\n var weight = 0;\n var numberOfLines = this.getNumberOfLines();\n var borderNumber = this.getBorderNumber();\n switch (this.lineStyle) {\n case 'Single':\n case 'DashSmallGap':\n case 'DashDot':\n case 'DashDotDot':\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 'SingleWavy':\n case 'DoubleWavy':\n case 'DashDotStroked':\n case 'Emboss3D':\n case 'Engrave3D':\n case 'Outset':\n case 'Inset':\n case 'Thick':\n weight = this.lineWidth * borderNumber;\n break;\n case 'Dot':\n case 'DashLargeGap':\n weight = 1;\n break;\n }\n return weight;\n };\n WBorder.prototype.getBorderNumber = function () {\n var borderNumber = 0;\n switch (this.lineStyle) {\n case 'Single':\n borderNumber = 1;\n break;\n case 'Thick':\n borderNumber = 2;\n break;\n case 'Double':\n borderNumber = 3;\n break;\n case 'Dot':\n borderNumber = 4;\n break;\n case 'DashLargeGap': //dashed.\n borderNumber = 5;\n break;\n case 'DashDot':\n borderNumber = 6;\n break;\n case 'DashDotDot':\n borderNumber = 7;\n break;\n case 'Triple':\n borderNumber = 8;\n break;\n case 'ThinThickSmallGap':\n borderNumber = 9;\n break;\n case 'ThickThinSmallGap':\n borderNumber = 10;\n break;\n case 'ThinThickThinSmallGap':\n borderNumber = 11;\n break;\n case 'ThinThickMediumGap':\n borderNumber = 12;\n break;\n case 'ThickThinMediumGap':\n borderNumber = 13;\n break;\n case 'ThinThickThinMediumGap':\n borderNumber = 14;\n break;\n case 'ThinThickLargeGap':\n borderNumber = 15;\n break;\n case 'ThickThinLargeGap':\n borderNumber = 16;\n break;\n case 'ThinThickThinLargeGap':\n borderNumber = 17;\n break;\n case 'SingleWavy': //wave.\n borderNumber = 18;\n break;\n case 'DoubleWavy':\n borderNumber = 19;\n break;\n case 'DashSmallGap':\n borderNumber = 20;\n break;\n case 'DashDotStroked':\n borderNumber = 21;\n break;\n case 'Emboss3D':\n borderNumber = 22;\n break;\n case 'Engrave3D':\n borderNumber = 23;\n break;\n case 'Outset':\n borderNumber = 24;\n break;\n case 'Inset':\n borderNumber = 25;\n break;\n }\n return borderNumber;\n };\n WBorder.prototype.getNumberOfLines = function () {\n //ToDo: Need to analyze more on this.\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n case 'Dot':\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n value = 1;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Triple':\n value = 5;\n break;\n case 'ThinThickSmallGap':\n value = 3;\n break;\n case 'ThickThinSmallGap':\n value = 3;\n break;\n case 'ThinThickThinSmallGap':\n value = 5;\n break;\n case 'ThinThickMediumGap':\n value = 3;\n break;\n case 'ThickThinMediumGap':\n value = 3;\n break;\n case 'ThinThickThinMediumGap':\n value = 5;\n break;\n case 'ThinThickLargeGap':\n value = 3;\n break;\n case 'ThickThinLargeGap':\n value = 3;\n break;\n case 'ThinThickThinLargeGap':\n value = 5;\n break;\n case 'SingleWavy':\n value = 1;\n break;\n case 'DoubleWavy':\n value = 2;\n break;\n case 'DashDotStroked':\n value = 1;\n break;\n case 'Emboss3D':\n case 'Engrave3D':\n value = 3;\n break;\n case 'Outset':\n case 'Inset':\n case 'Thick':\n value = 1;\n break;\n }\n return value;\n };\n WBorder.prototype.getPrecedence = function () {\n var value = 0;\n switch (this.lineStyle) {\n case 'Single':\n value = 1;\n break;\n case 'Thick':\n value = 2;\n break;\n case 'Double':\n value = 3;\n break;\n case 'Dot':\n value = 4;\n break;\n case 'DashLargeGap': //dashed.\n value = 5;\n break;\n case 'DashDot':\n value = 6;\n break;\n case 'DashDotDot':\n value = 7;\n break;\n case 'Triple':\n value = 8;\n break;\n case 'ThinThickSmallGap':\n value = 9;\n break;\n case 'ThickThinSmallGap':\n value = 10;\n break;\n case 'ThinThickThinSmallGap':\n value = 11;\n break;\n case 'ThinThickMediumGap':\n value = 12;\n break;\n case 'ThickThinMediumGap':\n value = 13;\n break;\n case 'ThinThickThinMediumGap':\n value = 14;\n break;\n case 'ThinThickLargeGap':\n value = 15;\n break;\n case 'ThickThinLargeGap':\n value = 16;\n break;\n case 'ThinThickThinLargeGap':\n value = 17;\n break;\n case 'SingleWavy': //wave.\n value = 18;\n break;\n case 'DoubleWavy':\n value = 19;\n break;\n case 'DashSmallGap':\n value = 20;\n break;\n case 'DashDotStroked':\n value = 21;\n break;\n case 'Emboss3D':\n value = 22;\n break;\n case 'Engrave3D':\n value = 23;\n break;\n case 'Outset':\n value = 24;\n break;\n case 'Inset':\n value = 25;\n break;\n }\n return value;\n };\n WBorder.prototype.hasValues = function () {\n return this.hasValue('color') || this.hasValue('lineStyle') || this.hasValue('lineWidth') || this.hasValue('shadow') || this.hasValue('space') || this.hasValue('hasNoneStyle');\n };\n WBorder.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueBorderFormat.uniqueFormatType, property);\n return this.uniqueBorderFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WBorder.prototype.cloneFormat = function () {\n var border = new WBorder(undefined);\n border.color = this.color;\n border.lineStyle = this.lineStyle;\n border.lineWidth = this.lineWidth;\n border.shadow = this.shadow;\n border.space = this.space;\n return border;\n };\n /**\n * @private\n * @returns {void}\n */\n WBorder.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueBorderFormat)) {\n WBorder.uniqueBorderFormats.remove(this.uniqueBorderFormat);\n }\n this.uniqueBorderFormat = undefined;\n };\n /**\n * Disposes the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n WBorder.prototype.destroy = function () {\n this.clearFormat();\n this.ownerBase = undefined;\n };\n /**\n * @private\n * @param {WBorder} border - Specifies the border\n * @returns {boolean} - Returns true or false\n */\n WBorder.prototype.isEqualFormat = function (border) {\n var value = false;\n if (this.color === border.color && this.lineStyle === border.lineStyle\n && this.lineWidth === border.lineWidth && this.shadow === border.shadow\n && this.space === border.space) {\n value = true;\n }\n return value;\n };\n WBorder.prototype.copyFormat = function (border) {\n if (!isNullOrUndefined(border) && !isNullOrUndefined(border.uniqueBorderFormat)) {\n if (border.hasValue('color')) {\n this.color = border.color;\n }\n if (border.hasValue('lineStyle')) {\n this.lineStyle = border.lineStyle;\n }\n if (border.hasValue('lineWidth')) {\n this.lineWidth = border.lineWidth;\n }\n if (border.hasValue('shadow')) {\n this.shadow = border.shadow;\n }\n if (border.hasValue('space')) {\n this.space = border.space;\n }\n if (border.hasValue('hasNoneStyle')) {\n this.hasNoneStyle = border.hasNoneStyle;\n }\n }\n };\n WBorder.clear = function () {\n this.uniqueBorderFormats.clear();\n };\n WBorder.uniqueBorderFormats = new WUniqueFormats();\n WBorder.uniqueFormatType = 1;\n return WBorder;\n}());\nexport { WBorder };\n","import { WBorder } from './border';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WParagraphFormat } from './paragraph-format';\n/**\n * @private\n */\nvar WBorders = /** @class */ (function () {\n function WBorders(node) {\n this.leftIn = new WBorder(this);\n this.rightIn = new WBorder(this);\n this.topIn = new WBorder(this);\n this.bottomIn = new WBorder(this);\n this.horizontalIn = new WBorder(this);\n this.verticalIn = new WBorder(this);\n this.diagonalUpIn = new WBorder(this);\n this.diagonalDownIn = new WBorder(this);\n this.isParsing = false;\n this.ownerBase = node;\n }\n Object.defineProperty(WBorders.prototype, \"left\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('left');\n }\n return this.leftIn;\n },\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"right\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('right');\n }\n return this.rightIn;\n },\n set: function (value) {\n this.rightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"top\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('top');\n }\n return this.topIn;\n },\n set: function (value) {\n this.topIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"bottom\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('bottom');\n }\n return this.bottomIn;\n },\n set: function (value) {\n this.bottomIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"horizontal\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('horizontal');\n }\n return this.horizontalIn;\n },\n set: function (value) {\n this.horizontalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"vertical\", {\n get: function () {\n if (this.ownerBase instanceof WParagraphFormat) {\n return this.getPropertyValue('vertical');\n }\n return this.verticalIn;\n },\n set: function (value) {\n this.verticalIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalUp\", {\n get: function () {\n return this.diagonalUpIn;\n },\n set: function (value) {\n this.diagonalUpIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WBorders.prototype, \"diagonalDown\", {\n get: function () {\n return this.diagonalDownIn;\n },\n set: function (value) {\n this.diagonalDownIn = value;\n },\n enumerable: true,\n configurable: true\n });\n WBorders.prototype.getPropertyValue = function (property) {\n var border = this.getBorder(property);\n if (this.isParsing) {\n return border;\n }\n if (!border.hasValues()) {\n var baseStyle = this.ownerBase.baseStyle;\n if (!isNullOrUndefined(baseStyle)) {\n var currentFormat = this;\n while (!isNullOrUndefined(baseStyle)) {\n var listParaFormat = void 0;\n if (!this.ownerBase.listFormat.hasValue('listId')) {\n listParaFormat = baseStyle.paragraphFormat.getListPargaraphFormat(property);\n }\n if (baseStyle.paragraphFormat.borders.getBorder(property).hasValues()) {\n currentFormat = baseStyle.paragraphFormat.borders;\n break;\n }\n else if (!isNullOrUndefined(listParaFormat) &&\n (listParaFormat.borders.getBorder(property).hasValues())) {\n currentFormat = listParaFormat.borders;\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n return currentFormat.getBorder(property);\n }\n }\n }\n else {\n return border;\n }\n return this.getDefaultValue(property);\n };\n WBorders.prototype.getDefaultValue = function (property) {\n var docParagraphFormat = this.documentParagraphFormat();\n var border;\n if (!isNullOrUndefined(docParagraphFormat) && !isNullOrUndefined(docParagraphFormat.borders)) {\n border = docParagraphFormat.borders.getBorder(property);\n }\n return border;\n };\n WBorders.prototype.documentParagraphFormat = function () {\n var docParagraphFormat;\n if (this.ownerBase instanceof WParagraphFormat) {\n docParagraphFormat = this.ownerBase.getDocumentParagraphFormat();\n }\n return docParagraphFormat;\n };\n WBorders.prototype.getBorder = function (property) {\n var value = undefined;\n switch (property) {\n case 'left':\n return this.leftIn;\n case 'right':\n return this.rightIn;\n case 'top':\n return this.topIn;\n case 'bottom':\n return this.bottomIn;\n case 'vertical':\n return this.verticalIn;\n case 'horizontal':\n return this.horizontalIn;\n }\n return value;\n };\n /**\n * @private\n * @returns {void}\n */\n WBorders.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.leftIn)) {\n this.leftIn.clearFormat();\n }\n if (!isNullOrUndefined(this.topIn)) {\n this.topIn.clearFormat();\n }\n if (!isNullOrUndefined(this.bottomIn)) {\n this.bottomIn.clearFormat();\n }\n if (!isNullOrUndefined(this.rightIn)) {\n this.rightIn.clearFormat();\n }\n if (!isNullOrUndefined(this.horizontalIn)) {\n this.horizontalIn.clearFormat();\n }\n if (!isNullOrUndefined(this.verticalIn)) {\n this.verticalIn.clearFormat();\n }\n if (!isNullOrUndefined(this.diagonalDown)) {\n this.diagonalDown.clearFormat();\n }\n if (!isNullOrUndefined(this.diagonalUp)) {\n this.diagonalUp.clearFormat();\n }\n };\n /* eslint-enable */\n /**\n * Disposes the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n WBorders.prototype.destroy = function () {\n if (!isNullOrUndefined(this.leftIn)) {\n this.leftIn.destroy();\n }\n if (!isNullOrUndefined(this.topIn)) {\n this.topIn.destroy();\n }\n if (!isNullOrUndefined(this.bottomIn)) {\n this.bottomIn.destroy();\n }\n if (!isNullOrUndefined(this.rightIn)) {\n this.rightIn.destroy();\n }\n if (!isNullOrUndefined(this.horizontalIn)) {\n this.horizontalIn.destroy();\n }\n if (!isNullOrUndefined(this.verticalIn)) {\n this.verticalIn.destroy();\n }\n if (!isNullOrUndefined(this.diagonalDown)) {\n this.diagonalDown.destroy();\n }\n if (!isNullOrUndefined(this.diagonalUp)) {\n this.diagonalUp.destroy();\n }\n this.topIn = undefined;\n this.bottomIn = undefined;\n this.leftIn = undefined;\n this.rightIn = undefined;\n this.horizontalIn = undefined;\n this.verticalIn = undefined;\n this.diagonalDownIn = undefined;\n this.diagonalUpIn = undefined;\n this.ownerBase = undefined;\n };\n WBorders.prototype.cloneFormat = function () {\n var borders = new WBorders(undefined);\n borders.top = isNullOrUndefined(this.topIn) ? undefined : this.topIn.cloneFormat();\n borders.bottom = isNullOrUndefined(this.bottomIn) ? undefined : this.bottomIn.cloneFormat();\n borders.left = isNullOrUndefined(this.leftIn) ? undefined : this.leftIn.cloneFormat();\n borders.right = isNullOrUndefined(this.rightIn) ? undefined : this.rightIn.cloneFormat();\n borders.horizontal = isNullOrUndefined(this.horizontalIn) ? undefined : this.horizontalIn.cloneFormat();\n borders.vertical = isNullOrUndefined(this.verticalIn) ? undefined : this.verticalIn.cloneFormat();\n borders.diagonalUp = isNullOrUndefined(this.diagonalUp) ? undefined : this.diagonalUp.cloneFormat();\n borders.diagonalDown = isNullOrUndefined(this.diagonalDown) ? undefined : this.diagonalDown.cloneFormat();\n return borders;\n };\n WBorders.prototype.copyFormat = function (borders) {\n if (!isNullOrUndefined(borders.getBorder('left')) && borders.getBorder('left') instanceof WBorder) {\n var left = new WBorder(this);\n left.copyFormat(borders.getBorder('left'));\n this.left = left;\n }\n if (!isNullOrUndefined(borders.getBorder('right')) && borders.getBorder('right') instanceof WBorder) {\n var right = new WBorder(this);\n right.copyFormat(borders.getBorder('right'));\n this.right = right;\n }\n if (!isNullOrUndefined(borders.getBorder('top')) && borders.getBorder('top') instanceof WBorder) {\n var top_1 = new WBorder(this);\n top_1.copyFormat(borders.getBorder('top'));\n this.top = top_1;\n }\n if (!isNullOrUndefined(borders.getBorder('bottom')) && borders.getBorder('bottom') instanceof WBorder) {\n var bottom = new WBorder(this);\n bottom.copyFormat(borders.getBorder('bottom'));\n this.bottom = bottom;\n }\n if (!isNullOrUndefined(borders.getBorder('horizontal')) && borders.getBorder('horizontal') instanceof WBorder) {\n var horizontal = new WBorder(this);\n horizontal.copyFormat(borders.getBorder('horizontal'));\n this.horizontal = horizontal;\n }\n if (!isNullOrUndefined(borders.getBorder('vertical')) && borders.getBorder('vertical') instanceof WBorder) {\n var vertical = new WBorder(this);\n vertical.copyFormat(borders.getBorder('vertical'));\n this.vertical = vertical;\n }\n if (!isNullOrUndefined(borders.diagonalDown) && borders.diagonalDown instanceof WBorder) {\n this.diagonalDown = new WBorder(this);\n this.diagonalDown.copyFormat(borders.diagonalDown);\n }\n if (!isNullOrUndefined(borders.diagonalUp) && borders.diagonalUp instanceof WBorder) {\n this.diagonalUp = new WBorder(this);\n this.diagonalUp.copyFormat(borders.diagonalUp);\n }\n };\n return WBorders;\n}());\nexport { WBorders };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WLevelOverride } from './level-override';\n/**\n * @private\n */\nvar WList = /** @class */ (function () {\n function WList() {\n this.nsid = -1;\n this.listId = -1;\n this.sourceListId = -1;\n this.abstractListId = -1;\n this.abstractList = undefined;\n this.levelOverrides = [];\n }\n WList.prototype.getListLevel = function (levelNumber) {\n var listLevel = undefined;\n var levelOverride = this.getLevelOverride(levelNumber);\n if (!isNullOrUndefined(levelOverride) && !isNullOrUndefined(levelOverride.overrideListLevel)) {\n listLevel = levelOverride.overrideListLevel;\n }\n else {\n listLevel = this.abstractList.levels[parseInt(levelNumber.toString(), 10)];\n }\n return listLevel;\n };\n WList.prototype.getLevelOverride = function (levelNumber) {\n for (var i = 0; i < this.levelOverrides.length; i++) {\n if (this.levelOverrides[parseInt(i.toString(), 10)] instanceof WLevelOverride) {\n var levelOverride = this.levelOverrides[parseInt(i.toString(), 10)];\n if (levelOverride.levelNumber === levelNumber) {\n return levelOverride;\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n WList.prototype.clear = function () {\n if (!isNullOrUndefined(this.levelOverrides)) {\n for (var i = 0; i < this.levelOverrides.length; i++) {\n var levelOverride = this.levelOverrides[parseInt(i.toString(), 10)];\n levelOverride.clear();\n }\n this.levelOverrides = [];\n }\n if (this.abstractList) {\n this.abstractList.clear();\n }\n this.abstractList = undefined;\n };\n /**\n * Disposes the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n WList.prototype.destroy = function () {\n if (!isNullOrUndefined(this.levelOverrides)) {\n for (var i = 0; i < this.levelOverrides.length; i++) {\n var levelOverride = this.levelOverrides[parseInt(i.toString(), 10)];\n levelOverride.destroy();\n }\n this.levelOverrides = [];\n }\n this.levelOverrides = undefined;\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n this.abstractListId = undefined;\n this.listId = undefined;\n this.sourceListId = undefined;\n };\n WList.prototype.mergeList = function (list) {\n if (!isNullOrUndefined(this.abstractListId) && this.abstractListId !== -1) {\n this.abstractListId = list.abstractListId;\n }\n if (!isNullOrUndefined(this.listId) && this.listId !== -1) {\n this.listId = list.listId;\n }\n if (!isNullOrUndefined(this.sourceListId) && this.sourceListId !== -1) {\n this.sourceListId = list.sourceListId;\n }\n if (!isNullOrUndefined(this.levelOverrides) && this.levelOverrides.length !== 0) {\n this.levelOverrides = list.levelOverrides;\n }\n };\n WList.prototype.clone = function () {\n var list = new WList();\n for (var i = 0; i < this.levelOverrides.length; i++) {\n list.levelOverrides.push(this.levelOverrides[parseInt(i.toString(), 10)].clone());\n }\n return list;\n };\n return WList;\n}());\nexport { WList };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle } from './style';\nimport { WList } from '../list/list';\n/* eslint-disable */\n/**\n * @private\n */\nvar WListFormat = /** @class */ (function () {\n function WListFormat(node) {\n this.uniqueListFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.list = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WListFormat.prototype, \"nsid\", {\n get: function () {\n return this.getPropertyValue('nsid');\n },\n set: function (id) {\n this.setPropertyValue('nsid', id);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listId\", {\n get: function () {\n return this.getPropertyValue('listId');\n },\n set: function (listId) {\n if (listId >= 0) {\n if (!isNullOrUndefined(this.ownerBase)) {\n var helper = this.ownerBase.getDocumentHelperObject();\n if (!isNullOrUndefined(helper)) {\n this.list = helper.getListById(listId);\n }\n }\n }\n else if (!isNullOrUndefined(this.list) && listId < 0) {\n this.list = undefined;\n }\n this.setPropertyValue('listId', listId);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevelNumber\", {\n get: function () {\n return this.getPropertyValue('listLevelNumber');\n },\n set: function (value) {\n this.setPropertyValue('listLevelNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListFormat.prototype, \"listLevel\", {\n get: function () {\n var list = undefined;\n if (!isNullOrUndefined(this.list)) {\n list = this.list;\n }\n else {\n var baseListStyle = this.baseStyle;\n while (!isNullOrUndefined(baseListStyle) && baseListStyle instanceof WParagraphStyle) {\n if (baseListStyle.paragraphFormat.listFormat.list) {\n list = baseListStyle.paragraphFormat.listFormat.list;\n break;\n }\n else {\n baseListStyle = baseListStyle.basedOn;\n }\n }\n }\n if (!isNullOrUndefined(list)) {\n return list.getListLevel(this.listLevelNumber);\n }\n else {\n return undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n WListFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n if (this.baseStyle instanceof WParagraphStyle) {\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.paragraphFormat.listFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n return baseStyle.paragraphFormat.listFormat.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListFormat.propertiesHash.get(propertyType);\n }\n }\n return WListFormat.getPropertyDefaultValue(property);\n };\n WListFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListFormat)) {\n this.initializeUniqueListFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n if (this.uniqueListFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueListFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueListFormat = WListFormat.uniqueListFormats.updateUniqueFormat(this.uniqueListFormat, property, value);\n }\n };\n WListFormat.prototype.initializeUniqueListFormat = function (property, propValue) {\n var uniqueListFormatTemp = new Dictionary();\n this.addUniqueListFormat('listId', property, propValue, uniqueListFormatTemp);\n this.addUniqueListFormat('listLevelNumber', property, propValue, uniqueListFormatTemp);\n this.addUniqueListFormat('nsid', property, propValue, uniqueListFormatTemp);\n this.uniqueListFormat = WListFormat.uniqueListFormats.addUniqueFormat(uniqueListFormatTemp, WListFormat.uniqueFormatType);\n };\n WListFormat.prototype.addUniqueListFormat = function (property, modifiedProperty, propValue, uniqueListFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WListFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueListFormatTemp.add(propertyType, propValue);\n }\n };\n WListFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'listId':\n value = -1;\n break;\n case 'listLevelNumber':\n value = 0;\n break;\n case 'nsid':\n value = -1;\n break;\n }\n return value;\n };\n WListFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueListFormat)) {\n this.listId = format.listId;\n this.listLevelNumber = format.listLevelNumber;\n this.nsid = format.nsid;\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.list)) {\n this.list = format.list;\n }\n }\n };\n WListFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueListFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListFormat.uniqueFormatType, property);\n return this.uniqueListFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WListFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueListFormat) && this.uniqueListFormat.referenceCount === 0) {\n WListFormat.uniqueListFormats.remove(this.uniqueListFormat);\n }\n this.uniqueListFormat = undefined;\n this.list = undefined;\n };\n WListFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueListFormat)) {\n WListFormat.uniqueListFormats.remove(this.uniqueListFormat);\n }\n this.uniqueListFormat = undefined;\n this.list = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n };\n WListFormat.clear = function () {\n this.uniqueListFormats.clear();\n };\n WListFormat.prototype.applyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n };\n WListFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n WListFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('listId'))) {\n this.listId = format.getValue('listId');\n }\n if (isNullOrUndefined(this.getValue('listLevelNumber'))) {\n this.listLevelNumber = format.getValue('listLevelNumber');\n }\n if (isNullOrUndefined(this.getValue('nsid'))) {\n this.nsid = format.getValue('nsid');\n }\n if (!isNullOrUndefined(format.list)) {\n if (isNullOrUndefined(this.list)) {\n this.list = new WList();\n }\n this.list.mergeList(format.list);\n }\n };\n WListFormat.prototype.cloneListFormat = function () {\n var format = new WListFormat(undefined);\n format.list = this.list;\n format.listId = this.listId;\n format.nsid = this.nsid;\n format.baseStyle = this.baseStyle;\n format.listLevelNumber = this.listLevelNumber;\n format.uniqueListFormat = this.uniqueListFormat;\n return format;\n };\n WListFormat.uniqueListFormats = new WUniqueFormats();\n WListFormat.uniqueFormatType = 7;\n return WListFormat;\n}());\nexport { WListFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { Dictionary } from '../../base/dictionary';\n/* eslint-disable */\n/**\n * @private\n */\nvar WShading = /** @class */ (function () {\n function WShading(node) {\n this.uniqueShadingFormat = undefined;\n this.ownerBase = undefined;\n this.ownerBase = node;\n }\n Object.defineProperty(WShading.prototype, \"backgroundColor\", {\n get: function () {\n return this.getPropertyValue('backgroundColor');\n },\n set: function (value) {\n this.setPropertyValue('backgroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"foregroundColor\", {\n get: function () {\n return this.getPropertyValue('foregroundColor');\n },\n set: function (value) {\n this.setPropertyValue('foregroundColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WShading.prototype, \"textureStyle\", {\n get: function () {\n return this.getPropertyValue('textureStyle');\n },\n set: function (value) {\n this.setPropertyValue('textureStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n WShading.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueShadingFormat) && this.uniqueShadingFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueShadingFormat.propertiesHash.get(propertyType);\n }\n }\n return WShading.getPropertyDefaultValue(property);\n };\n WShading.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WShading.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueShadingFormat)) {\n this.initializeUniqueShading(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n if (this.uniqueShadingFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueShadingFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueShadingFormat = WShading.uniqueShadingFormats.updateUniqueFormat(this.uniqueShadingFormat, property, value);\n }\n };\n WShading.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'backgroundColor':\n value = 'empty';\n break;\n case 'foregroundColor':\n value = 'empty';\n break;\n case 'textureStyle':\n value = 'TextureNone';\n break;\n }\n return value;\n };\n WShading.prototype.initializeUniqueShading = function (property, propValue) {\n var uniqueShadingTemp = new Dictionary();\n this.addUniqueShading('backgroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('foregroundColor', property, propValue, uniqueShadingTemp);\n this.addUniqueShading('textureStyle', property, propValue, uniqueShadingTemp);\n this.uniqueShadingFormat = WShading.uniqueShadingFormats.addUniqueFormat(uniqueShadingTemp, WShading.uniqueFormatType);\n };\n WShading.prototype.addUniqueShading = function (property, modifiedProperty, propValue, uniqueShadingTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WShading.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueShadingTemp.add(propertyType, propValue);\n }\n else {\n uniqueShadingTemp.add(propertyType, WShading.getPropertyDefaultValue(property));\n }\n };\n WShading.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n WShading.uniqueShadingFormats.remove(this.uniqueShadingFormat);\n }\n this.uniqueShadingFormat = undefined;\n };\n WShading.prototype.cloneFormat = function () {\n var shading = new WShading(undefined);\n shading.backgroundColor = this.backgroundColor;\n shading.foregroundColor = this.foregroundColor;\n shading.textureStyle = this.textureStyle;\n return shading;\n };\n WShading.prototype.copyFormat = function (shading) {\n if (!isNullOrUndefined(shading) && !isNullOrUndefined(shading.uniqueShadingFormat)) {\n this.backgroundColor = shading.backgroundColor;\n this.foregroundColor = shading.foregroundColor;\n this.textureStyle = shading.textureStyle;\n }\n };\n WShading.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueShadingFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueShadingFormat.uniqueFormatType, property);\n return this.uniqueShadingFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WShading.clear = function () {\n this.uniqueShadingFormats.clear();\n };\n WShading.uniqueShadingFormats = new WUniqueFormats();\n WShading.uniqueFormatType = 5;\n return WShading;\n}());\nexport { WShading };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WTableFormat = /** @class */ (function () {\n function WTableFormat(owner) {\n this.uniqueTableFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this._title = undefined;\n this._description = undefined;\n this.ownerBase = undefined;\n this._styleName = undefined;\n this.ownerBase = owner;\n this.assignTableMarginValue(5.4, 0, 5.4, 0);\n }\n Object.defineProperty(WTableFormat.prototype, \"title\", {\n get: function () {\n return this._title;\n },\n set: function (value) {\n this._title = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"description\", {\n get: function () {\n return this._description;\n },\n set: function (value) {\n this._description = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"allowAutoFit\", {\n get: function () {\n return this.getPropertyValue('allowAutoFit');\n },\n set: function (value) {\n this.setPropertyValue('allowAutoFit', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"cellSpacing\", {\n get: function () {\n return this.getPropertyValue('cellSpacing');\n },\n set: function (value) {\n if (value < 0 || value > 264.6) {\n throw new RangeError('The measurement must be between 0 px and 264.6 px.');\n }\n this.setPropertyValue('cellSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"tableAlignment\", {\n get: function () {\n return this.getPropertyValue('tableAlignment');\n },\n set: function (value) {\n this.setPropertyValue('tableAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n if (value < -1440 || value > 1440) {\n throw new RangeError('The measurement must be between -1440 px and 1440 px.');\n }\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"horizontalPositionAbs\", {\n get: function () {\n return this.getPropertyValue('horizontalPositionAbs');\n },\n set: function (value) {\n this.setPropertyValue('horizontalPositionAbs', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"horizontalPosition\", {\n get: function () {\n return this.getPropertyValue('horizontalPosition');\n },\n set: function (value) {\n this.setPropertyValue('horizontalPosition', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTableFormat.prototype, \"styleName\", {\n get: function () {\n return this._styleName;\n },\n set: function (value) {\n this._styleName = value;\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-disable */\n WTableFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueTableFormat) && this.uniqueTableFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueTableFormat.propertiesHash.get(propertyType);\n }\n }\n return WTableFormat.getPropertyDefaultValue(property);\n };\n WTableFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WTableFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueTableFormat)) {\n this.initializeUniqueTableFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n if (this.uniqueTableFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueTableFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.updateUniqueFormat(this.uniqueTableFormat, property, value);\n }\n };\n WTableFormat.prototype.initializeUniqueTableFormat = function (property, propValue) {\n var uniqueTableFormatTemp = new Dictionary();\n this.addUniqueTableFormat('allowAutoFit', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('cellSpacing', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('topMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('bottomMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('rightMargin', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('leftIndent', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('tableAlignment', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidth', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('preferredWidthType', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('bidi', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('horizontalPositionAbs', property, propValue, uniqueTableFormatTemp);\n this.addUniqueTableFormat('horizontalPosition', property, propValue, uniqueTableFormatTemp);\n this.uniqueTableFormat = WTableFormat.uniqueTableFormats.addUniqueFormat(uniqueTableFormatTemp, WTableFormat.uniqueFormatType);\n };\n WTableFormat.prototype.addUniqueTableFormat = function (property, modifiedProperty, propValue, uniqueTableFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WTableFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueTableFormatTemp.add(propertyType, propValue);\n }\n };\n WTableFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'allowAutoFit':\n value = false;\n break;\n case 'cellSpacing':\n value = 0;\n break;\n case 'leftMargin':\n value = 5.4;\n break;\n case 'topMargin':\n value = 0;\n break;\n case 'bottomMargin':\n value = 0;\n break;\n case 'rightMargin':\n value = 5.4;\n break;\n case 'leftIndent':\n value = 0;\n break;\n case 'tableAlignment':\n value = 'Left';\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n case 'bidi':\n value = false;\n break;\n case 'horizontalPositionAbs':\n value = null;\n break;\n case 'horizontalPosition':\n value = 0;\n break;\n }\n return value;\n };\n WTableFormat.prototype.assignTableMarginValue = function (left, top, right, bottom) {\n this.leftMargin = left;\n this.topMargin = top;\n this.rightMargin = right;\n this.bottomMargin = bottom;\n };\n WTableFormat.prototype.initializeTableBorders = function () {\n this.borders.left.lineStyle = 'Single';\n this.borders.left.lineWidth = 0.5;\n this.borders.right.lineStyle = 'Single';\n this.borders.right.lineWidth = 0.5;\n this.borders.top.lineStyle = 'Single';\n this.borders.top.lineWidth = 0.5;\n this.borders.bottom.lineStyle = 'Single';\n this.borders.bottom.lineWidth = 0.5;\n this.borders.horizontal.lineStyle = 'Single';\n this.borders.horizontal.lineWidth = 0.5;\n this.borders.vertical.lineStyle = 'Single';\n this.borders.vertical.lineWidth = 0.5;\n };\n WTableFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n WTableFormat.uniqueTableFormats.remove(this.uniqueTableFormat);\n }\n this.uniqueTableFormat = undefined;\n this.ownerBase = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WTableFormat.prototype.cloneFormat = function () {\n var tableFormat = new WTableFormat(undefined);\n tableFormat.leftIndent = this.leftIndent;\n tableFormat.tableAlignment = this.tableAlignment;\n tableFormat.cellSpacing = this.cellSpacing;\n tableFormat.leftMargin = this.leftMargin;\n tableFormat.rightMargin = this.rightMargin;\n tableFormat.topMargin = this.topMargin;\n tableFormat.bottomMargin = this.bottomMargin;\n tableFormat.preferredWidth = this.preferredWidth;\n tableFormat.preferredWidthType = this.preferredWidthType;\n tableFormat.horizontalPositionAbs = this.horizontalPositionAbs;\n tableFormat.horizontalPosition = this.horizontalPosition;\n tableFormat.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n tableFormat.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n tableFormat.bidi = this.bidi;\n tableFormat.allowAutoFit = this.allowAutoFit;\n tableFormat.styleName = this.styleName;\n tableFormat.title = this.title;\n tableFormat.description = this.description;\n return tableFormat;\n };\n WTableFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueTableFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueTableFormat.uniqueFormatType, property);\n return this.uniqueTableFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WTableFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueTableFormat)) {\n this.cellSpacing = format.cellSpacing;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.leftIndent = format.leftIndent;\n this.tableAlignment = format.tableAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n this.bidi = format.bidi;\n this.allowAutoFit = format.allowAutoFit;\n this.horizontalPosition = format.horizontalPosition;\n this.horizontalPositionAbs = format.horizontalPositionAbs;\n this.styleName = format.styleName;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n if (!isNullOrUndefined(format.title)) {\n this.title = format.title;\n }\n if (!isNullOrUndefined(format.description)) {\n this.description = format.description;\n }\n }\n };\n WTableFormat.clear = function () {\n this.uniqueTableFormats.clear();\n };\n WTableFormat.uniqueTableFormats = new WUniqueFormats();\n WTableFormat.uniqueFormatType = 8;\n return WTableFormat;\n}());\nexport { WTableFormat };\n","import { TextElementBox, ParagraphWidget } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WParagraphStyle, WCharacterStyle } from './style';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Revision } from '../track-changes/track-changes';\n/* eslint-disable */\n/**\n * @private\n */\nvar WCharacterFormat = /** @class */ (function () {\n function WCharacterFormat(node) {\n this.uniqueCharacterFormat = undefined;\n this.ownerBase = undefined;\n this.baseCharStyle = undefined;\n /**\n * @private\n */\n this.removedIds = [];\n /**\n * @private\n */\n this.revisions = [];\n this.ownerBase = node;\n }\n Object.defineProperty(WCharacterFormat.prototype, \"bold\", {\n get: function () {\n return this.getPropertyValue('bold');\n },\n set: function (value) {\n this.setPropertyValue('bold', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"italic\", {\n get: function () {\n return this.getPropertyValue('italic');\n },\n set: function (value) {\n this.setPropertyValue('italic', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontSize\", {\n get: function () {\n return this.getPropertyValue('fontSize');\n },\n set: function (value) {\n this.setPropertyValue('fontSize', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"characterSpacing\", {\n get: function () {\n return this.getPropertyValue('characterSpacing');\n },\n set: function (value) {\n this.setPropertyValue('characterSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"scaling\", {\n get: function () {\n return this.getPropertyValue('scaling');\n },\n set: function (value) {\n this.setPropertyValue('scaling', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamily\", {\n get: function () {\n return this.getPropertyValue('fontFamily');\n },\n set: function (value) {\n this.setPropertyValue('fontFamily', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"underline\", {\n get: function () {\n return this.getPropertyValue('underline');\n },\n set: function (value) {\n this.setPropertyValue('underline', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"strikethrough\", {\n get: function () {\n return this.getPropertyValue('strikethrough');\n },\n set: function (value) {\n this.setPropertyValue('strikethrough', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"baselineAlignment\", {\n get: function () {\n return this.getPropertyValue('baselineAlignment');\n },\n set: function (value) {\n this.setPropertyValue('baselineAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"highlightColor\", {\n get: function () {\n return this.getPropertyValue('highlightColor');\n },\n set: function (value) {\n this.setPropertyValue('highlightColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontColor\", {\n get: function () {\n return this.getPropertyValue('fontColor');\n },\n set: function (value) {\n this.setPropertyValue('fontColor', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"localeIdBidi\", {\n get: function () {\n return this.getPropertyValue('localeIdBidi');\n },\n set: function (value) {\n this.setPropertyValue('localeIdBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"localeIdFarEast\", {\n get: function () {\n return this.getPropertyValue('localeIdFarEast');\n },\n set: function (value) {\n this.setPropertyValue('localeIdFarEast', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"localeIdAscii\", {\n get: function () {\n return this.getPropertyValue('localeIdAscii');\n },\n set: function (value) {\n this.setPropertyValue('localeIdAscii', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"bdo\", {\n get: function () {\n return this.getPropertyValue('bdo');\n },\n set: function (value) {\n this.setPropertyValue('bdo', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"boldBidi\", {\n get: function () {\n return this.getPropertyValue('boldBidi');\n },\n set: function (value) {\n this.setPropertyValue('boldBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"italicBidi\", {\n get: function () {\n return this.getPropertyValue('italicBidi');\n },\n set: function (value) {\n this.setPropertyValue('italicBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontSizeBidi\", {\n get: function () {\n return this.getPropertyValue('fontSizeBidi');\n },\n set: function (value) {\n this.setPropertyValue('fontSizeBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamilyBidi\", {\n get: function () {\n return this.getPropertyValue('fontFamilyBidi');\n },\n set: function (value) {\n this.setPropertyValue('fontFamilyBidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"allCaps\", {\n get: function () {\n return this.getPropertyValue('allCaps');\n },\n set: function (value) {\n this.setPropertyValue('allCaps', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"Lowercase\", {\n get: function () {\n return this.getPropertyValue('Lowercase');\n },\n set: function (value) {\n this.setPropertyValue('Lowercase', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"Uppercase\", {\n get: function () {\n return this.getPropertyValue('Uppercase');\n },\n set: function (value) {\n this.setPropertyValue('Uppercase', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"SentenceCase\", {\n get: function () {\n return this.getPropertyValue('SentenceCase');\n },\n set: function (value) {\n this.setPropertyValue('SentenceCase', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"ToggleCase\", {\n get: function () {\n return this.getPropertyValue('ToggleCase');\n },\n set: function (value) {\n this.setPropertyValue('ToggleCase', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"CapitalizeEachWord\", {\n get: function () {\n return this.getPropertyValue('CapitalizeEachWord');\n },\n set: function (value) {\n this.setPropertyValue('CapitalizeEachWord', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"complexScript\", {\n get: function () {\n return this.getPropertyValue('complexScript');\n },\n set: function (value) {\n this.setPropertyValue('complexScript', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamilyFarEast\", {\n get: function () {\n return this.getPropertyValue('fontFamilyFarEast');\n },\n set: function (value) {\n this.setPropertyValue('fontFamilyFarEast', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamilyAscii\", {\n get: function () {\n return this.getPropertyValue('fontFamilyAscii');\n },\n set: function (value) {\n this.setPropertyValue('fontFamilyAscii', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCharacterFormat.prototype, \"fontFamilyNonFarEast\", {\n get: function () {\n return this.getPropertyValue('fontFamilyNonFarEast');\n },\n set: function (value) {\n this.setPropertyValue('fontFamilyNonFarEast', value);\n },\n enumerable: true,\n configurable: true\n });\n WCharacterFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var charStyleValue = this.checkCharacterStyle(property);\n if (!isNullOrUndefined(charStyleValue)) {\n return charStyleValue;\n }\n else {\n if (!isNullOrUndefined(this.baseCharStyle)) {\n var paragraph = undefined;\n var line = undefined;\n if (!isNullOrUndefined(this.ownerBase)) {\n paragraph = this.ownerBase.paragraph;\n line = this.ownerBase.line;\n }\n if (!isNullOrUndefined(paragraph) && !isNullOrUndefined(line)) {\n var length_1 = line.children.length;\n for (var i = 0; i < length_1; i++) {\n var element = this.ownerBase.line.children[i];\n if (element instanceof TextElementBox) {\n var text = element.text;\n if (text.startsWith('HYPERLINK')) {\n var index = text.indexOf('_Toc');\n if (index !== -1) {\n this.baseCharStyle = this.ownerBase.paragraph.paragraphFormat.baseStyle;\n }\n }\n }\n }\n }\n }\n var baseStyleValue = this.checkBaseStyle(property);\n if (!isNullOrUndefined(baseStyleValue)) {\n return baseStyleValue;\n }\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WCharacterFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n var docCharacterFormat = this.documentCharacterFormat();\n if (!isNullOrUndefined(docCharacterFormat) && !isNullOrUndefined(docCharacterFormat.uniqueCharacterFormat) && docCharacterFormat.uniqueCharacterFormat.propertiesHash.containsKey(propertyType)) {\n return docCharacterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n else {\n return WCharacterFormat.getPropertyDefaultValue(property);\n }\n };\n WCharacterFormat.prototype.documentCharacterFormat = function () {\n var docCharacterFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph) && !isNullOrUndefined(this.ownerBase.paragraph.bodyWidget) && !isNullOrUndefined(this.ownerBase.paragraph.bodyWidget.page)) {\n docCharacterFormat = this.ownerBase.paragraph.bodyWidget.page.documentHelper.characterFormat;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase.bodyWidget)) {\n docCharacterFormat = this.ownerBase.bodyWidget.page.documentHelper.characterFormat;\n }\n }\n }\n return docCharacterFormat;\n };\n WCharacterFormat.prototype.checkBaseStyle = function (property) {\n var baseStyle;\n if (!isNullOrUndefined(this.ownerBase)) {\n if (!isNullOrUndefined(this.ownerBase.paragraph)) {\n baseStyle = this.ownerBase.paragraph.paragraphFormat.baseStyle;\n }\n else {\n if ((this.ownerBase instanceof ParagraphWidget) && !isNullOrUndefined(this.ownerBase.paragraphFormat)) {\n baseStyle = this.ownerBase.paragraphFormat.baseStyle;\n }\n else {\n if (!isNullOrUndefined(this.ownerBase instanceof WParagraphStyle)) {\n baseStyle = this.ownerBase.basedOn;\n }\n }\n }\n }\n while (!isNullOrUndefined(baseStyle)) {\n if (baseStyle.characterFormat.hasValue(property)) {\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(propertyType);\n }\n return undefined;\n };\n WCharacterFormat.prototype.checkCharacterStyle = function (property) {\n var baseStyle = this.baseCharStyle;\n if (!isNullOrUndefined(baseStyle)) {\n while (!isNullOrUndefined(baseStyle) && baseStyle.name !== 'Default Paragraph Font') {\n var hasKey = baseStyle.characterFormat.hasValue(property);\n if (hasKey) {\n var returnPropertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n return baseStyle.characterFormat.uniqueCharacterFormat.propertiesHash.get(returnPropertyType);\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n }\n return undefined;\n };\n WCharacterFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCharacterFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCharacterFormat)\n || (isNullOrUndefined(this.uniqueCharacterFormat.propertiesHash)\n && isNullOrUndefined(this.uniqueCharacterFormat.uniqueFormatType)\n && isNullOrUndefined(this.uniqueCharacterFormat.referenceCount))) {\n this.initializeUniqueCharacterFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n if (this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueCharacterFormat.propertiesHash.get(propertyType) === value) { //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.updateUniqueFormat(this.uniqueCharacterFormat, property, value);\n }\n };\n WCharacterFormat.prototype.initializeUniqueCharacterFormat = function (property, propValue) {\n var uniqueCharFormatTemp = new Dictionary();\n this.addUniqueCharacterFormat('fontColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamily', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontSize', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bold', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('italic', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('underline', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('strikethrough', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('baselineAlignment', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('highlightColor', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('styleName', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('bdo', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamilyBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontSizeBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('boldBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('italicBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('allCaps', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('Uppercase', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('Lowercase', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('SentenceCase', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('ToggleCase', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('CapitalizeEachWord', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('localeIdAscii', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('localeIdFarEast', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('localeIdBidi', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamilyFarEast', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamilyAscii', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('fontFamilyNonFarEast', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('complexScript', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('characterSpacing', property, propValue, uniqueCharFormatTemp);\n this.addUniqueCharacterFormat('scaling', property, propValue, uniqueCharFormatTemp);\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(uniqueCharFormatTemp, WCharacterFormat.uniqueFormatType);\n };\n WCharacterFormat.prototype.addUniqueCharacterFormat = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WCharacterFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n };\n WCharacterFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'bold':\n value = false;\n break;\n case 'italic':\n value = false;\n break;\n case 'fontSize':\n value = 11;\n break;\n case 'underline':\n value = 'None';\n break;\n case 'strikethrough':\n value = 'None';\n break;\n case 'baselineAlignment':\n value = 'Normal';\n break;\n case 'highlightColor':\n value = 'NoColor';\n break;\n case 'fontColor':\n value = '#00000000';\n break;\n case 'fontFamily':\n value = 'Calibri';\n break;\n case 'styleName':\n value = 'Default Paragraph Font';\n break;\n case 'bidi':\n value = false;\n break;\n case 'bdo':\n value = 'None';\n break;\n case 'boldBidi':\n value = false;\n break;\n case 'italicBidi':\n value = false;\n break;\n case 'fontSizeBidi':\n value = 11;\n break;\n case 'fontFamilyBidi':\n value = 'Calibri';\n break;\n case 'allCaps':\n case 'Uppercase':\n case 'Lowercase':\n case 'CapitalizeEachWord':\n case 'SentenceCase':\n case 'ToggleCase':\n value = false;\n break;\n case 'localeIdAscii':\n case 'localeIdFarEast':\n case 'localeIdBidi':\n value = 0;\n break;\n case 'complexScript':\n value = false;\n break;\n case 'fontFamilyFarEast':\n case 'fontFamilyAscii':\n case 'fontFamilyNonFarEast':\n value = undefined;\n break;\n case 'characterSpacing':\n value = 0;\n break;\n case 'scaling':\n value = 100;\n break;\n }\n return value;\n };\n WCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.fontFamily === format.fontFamily\n && this.bold === format.bold\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.underline === format.underline\n && this.fontColor === format.fontColor\n && this.strikethrough === format.strikethrough\n && this.highlightColor === format.highlightColor && this.bidi === format.bidi\n && this.bdo === format.bdo\n && this.allCaps === format.allCaps\n && this.Uppercase === format.Uppercase\n && this.Lowercase === format.Lowercase\n && this.ToggleCase === format.ToggleCase\n && this.SentenceCase === format.SentenceCase\n && this.CapitalizeEachWord === format.CapitalizeEachWord\n && this.localeIdBidi === format.localeIdBidi\n && this.localeIdAscii === format.localeIdAscii\n && this.localeIdFarEast === format.localeIdFarEast\n && this.complexScript === format.complexScript\n && this.fontFamilyAscii === format.fontFamilyAscii\n && this.fontFamilyBidi === format.fontFamilyBidi\n && this.fontFamilyFarEast === format.fontFamilyFarEast\n && this.characterSpacing === format.characterSpacing\n && this.scaling === format.scaling\n && this.fontFamilyNonFarEast === format.fontFamilyNonFarEast);\n };\n WCharacterFormat.prototype.isSameFormat = function (format) {\n return this.baseCharStyle === format.baseCharStyle &&\n this.uniqueCharacterFormat === format.uniqueCharacterFormat;\n };\n WCharacterFormat.prototype.cloneFormat = function () {\n var format = new WCharacterFormat(undefined);\n format.uniqueCharacterFormat = this.uniqueCharacterFormat;\n format.baseCharStyle = this.baseCharStyle;\n if (this.revisions.length > 0) {\n format.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n format.removedIds = this.removedIds.slice();\n }\n return format;\n };\n WCharacterFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && !isNullOrUndefined(this.uniqueCharacterFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCharacterFormat.uniqueFormatType, property);\n return this.uniqueCharacterFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCharacterFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueCharacterFormat) && this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = undefined;\n this.baseCharStyle = undefined;\n };\n WCharacterFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueCharacterFormat)) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = undefined;\n this.baseCharStyle = undefined;\n this.ownerBase = undefined;\n };\n WCharacterFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCharacterFormat) && format.uniqueCharacterFormat.propertiesHash) {\n this.updateUniqueCharacterFormat(format);\n }\n if (!isNullOrUndefined(format.baseCharStyle)) {\n this.baseCharStyle = format.baseCharStyle;\n }\n if (format.revisions.length > 0) {\n this.removedIds = Revision.cloneRevisions(format.revisions);\n }\n else {\n this.removedIds = format.removedIds.slice();\n }\n }\n };\n WCharacterFormat.prototype.isEqualTocFormat = function (format) {\n return (this.fontFamily === format.fontFamily\n && this.bold === format.bold\n && this.italic === format.italic\n && this.strikethrough === format.strikethrough\n && this.highlightColor === format.highlightColor\n && this.fontFamilyAscii === format.fontFamilyAscii\n && this.fontFamilyFarEast === format.fontFamilyFarEast\n && this.fontFamilyNonFarEast === format.fontFamilyNonFarEast);\n };\n WCharacterFormat.prototype.copyTocFormat = function (format) {\n if (!isNullOrUndefined(format.bold)) {\n this.bold = format.bold;\n }\n if (!isNullOrUndefined(format.italic)) {\n this.italic = format.italic;\n }\n if (!isNullOrUndefined(format.strikethrough)) {\n this.strikethrough = format.strikethrough;\n }\n if (!isNullOrUndefined(format.highlightColor)) {\n this.highlightColor = format.highlightColor;\n }\n if (!isNullOrUndefined(format.fontFamily)) {\n this.fontFamily = format.fontFamily;\n this.fontFamilyAscii = format.fontFamily;\n this.fontFamilyFarEast = format.fontFamily;\n this.fontFamilyNonFarEast = format.fontFamily;\n }\n };\n WCharacterFormat.prototype.updateUniqueCharacterFormat = function (format) {\n var hash = undefined;\n if (this.uniqueCharacterFormat) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n if (this.uniqueCharacterFormat.referenceCount === 0) {\n WCharacterFormat.uniqueCharacterFormats.remove(this.uniqueCharacterFormat);\n this.uniqueCharacterFormat = undefined;\n }\n }\n this.uniqueCharacterFormat = new WUniqueFormat(WCharacterFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueCharacterFormat.mergeProperties(format.uniqueCharacterFormat);\n }\n this.uniqueCharacterFormat = WCharacterFormat.uniqueCharacterFormats.addUniqueFormat(hash, WCharacterFormat.uniqueFormatType);\n };\n WCharacterFormat.clear = function () {\n this.uniqueCharacterFormats.clear();\n };\n WCharacterFormat.prototype.applyStyle = function (baseCharStyle) {\n this.baseCharStyle = baseCharStyle;\n };\n WCharacterFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n WCharacterFormat.prototype.mergeFormat = function (format) {\n if (isNullOrUndefined(this.getValue('bold')) && !isNullOrUndefined(format.getValue('bold'))) {\n this.bold = format.getValue('bold');\n }\n if (isNullOrUndefined(this.getValue('italic')) && !isNullOrUndefined((format.getValue('italic')))) {\n this.italic = format.getValue('italic');\n }\n if (isNullOrUndefined(this.getValue('fontSize')) && !isNullOrUndefined(format.getValue('fontSize'))) {\n this.fontSize = format.getValue('fontSize');\n }\n if (isNullOrUndefined(this.getValue('characterSpacing')) && !isNullOrUndefined(format.getValue('characterSpacing'))) {\n this.characterSpacing = format.getValue('characterSpacing');\n }\n if (isNullOrUndefined(this.getValue('scaling')) && !isNullOrUndefined(format.getValue('scaling'))) {\n this.scaling = format.getValue('scaling');\n }\n if (isNullOrUndefined(this.getValue('fontFamily')) && !isNullOrUndefined(format.getValue('fontFamily'))) {\n this.fontFamily = format.getValue('fontFamily');\n }\n else {\n if (isNullOrUndefined(this.getValue('fontFamilyAscii')) && !isNullOrUndefined(format.getValue('fontFamily'))) {\n this.fontFamilyAscii = format.getValue('fontFamily');\n }\n if (isNullOrUndefined(this.getValue('fontFamilyFarEast')) && !isNullOrUndefined(format.getValue('fontFamily'))) {\n this.fontFamilyFarEast = format.getValue('fontFamily');\n }\n if (isNullOrUndefined(this.getValue('fontFamilyNonFarEast')) && !isNullOrUndefined(format.getValue('fontFamily'))) {\n this.fontFamilyNonFarEast = format.getValue('fontFamily');\n }\n }\n if (isNullOrUndefined(this.getValue('underline')) && !isNullOrUndefined(format.getValue('underline'))) {\n this.underline = format.getValue('underline');\n }\n if (isNullOrUndefined(this.getValue('strikethrough')) && !isNullOrUndefined(format.getValue('strikethrough'))) {\n this.strikethrough = format.getValue('strikethrough');\n }\n if (isNullOrUndefined(this.getValue('baselineAlignment')) && !isNullOrUndefined(format.getValue('baselineAlignment'))) {\n this.baselineAlignment = format.getValue('baselineAlignment');\n }\n if (isNullOrUndefined(this.getValue('highlightColor')) && !isNullOrUndefined(format.getValue('highlightColor'))) {\n this.highlightColor = format.getValue('highlightColor');\n }\n if (isNullOrUndefined(this.getValue('fontColor')) && !isNullOrUndefined(format.getValue('fontColor'))) {\n this.fontColor = format.getValue('fontColor');\n }\n if (isNullOrUndefined(this.getValue('bidi')) && !isNullOrUndefined(format.getValue('bidi'))) {\n this.bidi = format.getValue('bidi');\n }\n if (isNullOrUndefined(this.getValue('bdo')) && !isNullOrUndefined(format.getValue('bdo'))) {\n this.bdo = format.getValue('bdo');\n }\n if (isNullOrUndefined(this.getValue('allCaps')) && !isNullOrUndefined(format.getValue('allCaps'))) {\n this.allCaps = format.getValue('allCaps');\n }\n if (isNullOrUndefined(this.getValue('Lowercase')) && !isNullOrUndefined(format.getValue('Lowercase'))) {\n this.Lowercase = format.getValue('Lowercase');\n }\n if (isNullOrUndefined(this.getValue('SentenceCase')) && !isNullOrUndefined(format.getValue('SentenceCase'))) {\n this.SentenceCase = format.getValue('SentenceCase');\n }\n if (isNullOrUndefined(this.getValue('ToggleCase')) && !isNullOrUndefined(format.getValue('ToggleCase'))) {\n this.ToggleCase = format.getValue('ToggleCase');\n }\n if (isNullOrUndefined(this.getValue('CapitalizeEachWord')) && !isNullOrUndefined(format.getValue('CapitalizeEachWord'))) {\n this.CapitalizeEachWord = format.getValue('CapitalizeEachWord');\n }\n if (isNullOrUndefined(this.getValue('Uppercase')) && !isNullOrUndefined(format.getValue('Uppercase'))) {\n this.Uppercase = format.getValue('Uppercase');\n }\n if (isNullOrUndefined(this.getValue('localeIdBidi')) && !isNullOrUndefined(format.getValue('localeIdBidi'))) {\n this.localeIdBidi = format.getValue('localeIdBidi');\n }\n if (isNullOrUndefined(this.getValue('localeIdAscii')) && !isNullOrUndefined(format.getValue('localeIdAscii'))) {\n this.localeIdAscii = format.getValue('localeIdAscii');\n }\n if (isNullOrUndefined(this.getValue('localeIdFarEast')) && !isNullOrUndefined(format.getValue('localeIdFarEast'))) {\n this.localeIdFarEast = format.getValue('localeIdFarEast');\n }\n if (isNullOrUndefined(this.getValue('complexScript')) && !isNullOrUndefined(format.getValue('complexScript'))) {\n this.complexScript = format.getValue('complexScript');\n }\n if (isNullOrUndefined(this.getValue('fontFamilyAscii')) && !isNullOrUndefined(format.getValue('fontFamilyAscii'))) {\n this.fontFamilyAscii = format.getValue('fontFamilyAscii');\n }\n if (isNullOrUndefined(this.getValue('fontFamilyBidi')) && !isNullOrUndefined(format.getValue('fontFamilyBidi'))) {\n this.fontFamilyBidi = format.getValue('fontFamilyBidi');\n }\n if (isNullOrUndefined(this.getValue('fontFamilyFarEast')) && !isNullOrUndefined(format.getValue('fontFamilyFarEast'))) {\n this.fontFamilyFarEast = format.getValue('fontFamilyFarEast');\n }\n if (isNullOrUndefined(this.getValue('fontFamilyNonFarEast')) && !isNullOrUndefined(format.getValue('fontFamilyNonFarEast'))) {\n this.fontFamilyNonFarEast = format.getValue('fontFamilyNonFarEast');\n }\n };\n WCharacterFormat.prototype.hasValueWithParent = function (property) {\n // 2.1 Define direct VALUE\n var hasValue = this.hasValue(property);\n // 2.2 If SELF VALUE is NULL get BASE VALUE\n // if (!hasValue && this.BaseFormat != null && this.BaseFormat is WCharacterFormat)\n // hasValue = (this.BaseFormat as WCharacterFormat).HasValueWithParent(propertyKey);\n // 2.3 If VALUE not in hash, get CharStyle VALUE\n if (!hasValue && !isNullOrUndefined(this.baseCharStyle) && this.baseCharStyle instanceof WCharacterStyle) {\n hasValue = this.baseCharStyle.characterFormat.hasValue(property);\n }\n // 3. If VALUE is NULL get DEFAULT VALUE\n var defFormat = this.documentCharacterFormat();\n if (!hasValue && !isNullOrUndefined(defFormat)) {\n hasValue = defFormat.hasValue(property);\n }\n return hasValue;\n };\n WCharacterFormat.uniqueCharacterFormats = new WUniqueFormats();\n WCharacterFormat.uniqueFormatType = 2;\n return WCharacterFormat;\n}());\nexport { WCharacterFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ElementBox, ParagraphWidget, BookmarkElementBox, FootnoteElementBox } from '../viewer/page';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WRowFormat } from '../format/row-format';\nimport { revisionActionEvent } from '../../base/index';\n/**\n * The revision class which holds the information related to changes made in the document\n */\nvar Revision = /** @class */ (function () {\n function Revision(documentHelper, author, date) {\n /**\n * Gets or sets the author name who made the change\n *\n * @private\n */\n this.author = null;\n /**\n * Indicates when the track changes made\n *\n * @private\n */\n this.date = null;\n /**\n * Holds the reference of the items which are under this revision.\n *\n * @private\n */\n this.range = [];\n /**\n * @private\n */\n this.revisionID = '';\n /**\n * Used to update cursor position by ensuring items were removed or not\n */\n this.isContentRemoved = false;\n this.isTableRevision = false;\n /**\n * Indicates whether to skip unlinking ranges for table elements.\n */\n this.canSkipTableItems = false;\n this.skipUnLinkElement = false;\n this.author = author;\n if (isNullOrUndefined(this.author)) {\n this.author = \"Unknown\";\n }\n this.date = date;\n this.owner = documentHelper;\n }\n Revision.prototype.handleAcceptReject = function (isFromAccept) {\n this.owner.selectionModule.selectRevision(this);\n var selection = this.owner.selectionModule;\n var startPos = selection.start;\n var endPos = selection.end;\n if (!selection.start.isExistBefore(selection.end)) {\n startPos = selection.end;\n endPos = selection.start;\n }\n var blockInfo = selection.getParagraphInfo(startPos);\n this.owner.editorModule.initHistory(isFromAccept ? 'Accept Change' : 'Reject Change');\n var fieldBegin = selection.getHyperlinkField();\n if (isFromAccept && this.revisionType === 'Deletion' && !isNullOrUndefined(fieldBegin)\n && this.range.indexOf(fieldBegin) !== -1 && this.range.indexOf(fieldBegin.fieldEnd) !== -1 && this.range.indexOf(fieldBegin.fieldSeparator) === this.range.indexOf(fieldBegin.fieldEnd) - 1) {\n this.owner.editorHistoryModule.currentBaseHistoryInfo.isHyperlinkField = true;\n }\n this.owner.editorHistoryModule.currentBaseHistoryInfo.markerData.push(this.owner.editorModule.getMarkerData(undefined, undefined, this));\n if (this.revisionType === 'Deletion') {\n blockInfo = selection.getParagraphInfo(this.owner.selectionModule.start);\n selection.editPosition = this.owner.selectionModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n else {\n selection.editPosition = this.owner.selectionModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.owner.editorModule.updateInsertPosition();\n this.isContentRemoved = false;\n this.canSkipTableItems = false;\n this.skipUnLinkElement = false;\n // Implement to accept/reject the revision\n if (this.revisionType === 'Insertion' || this.revisionType === 'Deletion' || this.revisionType === 'MoveFrom' || this.revisionType === 'MoveTo') {\n this.owner.isShiftingEnabled = true;\n var rangeIndex = 0;\n while (this.range.length > 0) {\n if (this.range[rangeIndex] instanceof ElementBox || this.range[rangeIndex] instanceof WCharacterFormat || this.range[rangeIndex] instanceof WRowFormat) {\n if (this.range[rangeIndex] instanceof BookmarkElementBox && isFromAccept && this.revisionType === 'Deletion') {\n var inline = this.range[rangeIndex];\n if (this.owner.documentHelper.bookmarks.containsKey(inline.name)) {\n this.owner.documentHelper.bookmarks.remove(inline.name);\n }\n }\n var moveToNextItem = this.unlinkRangeItem(this.range[rangeIndex], this, isFromAccept, startPos, endPos);\n if (moveToNextItem) {\n rangeIndex++;\n }\n else {\n rangeIndex = 0;\n }\n }\n else {\n break;\n }\n }\n }\n this.isTableRevision = false;\n if (this.isContentRemoved) {\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n this.owner.selectionModule.selectContent(textPosition, true);\n this.owner.editorModule.updateEndPosition();\n }\n else {\n selection.selectRange(startPos, endPos);\n this.owner.editorModule.updateHistoryPosition(endPos, false);\n }\n if (this.owner.editorHistoryModule && this.owner.editorHistoryModule.currentBaseHistoryInfo\n && this.owner.editorHistoryModule.currentBaseHistoryInfo.action !== 'BackSpace') {\n this.owner.editorHistoryModule.currentBaseHistoryInfo.removedNodes.reverse();\n }\n if (this.owner.editorHistoryModule) {\n if (this.owner.trackChangesPane.isTrackingPageBreak) {\n this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'TrackingPageBreak';\n this.owner.trackChangesPane.isTrackingPageBreak = false;\n }\n var editorHistory = this.owner.editorHistoryModule;\n if (editorHistory.currentHistoryInfo && (editorHistory.currentHistoryInfo.action === 'Accept All' || editorHistory.currentHistoryInfo.action === 'Reject All')) {\n if (this.owner.documentHelper.blockToShift) {\n this.owner.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n editorHistory.updateHistory();\n }\n this.owner.editorModule.reLayout(this.owner.selectionModule);\n if (blockInfo.paragraph.isInHeaderFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n };\n Revision.prototype.handleGroupAcceptReject = function (isAccept) {\n if (this.owner.trackChangesPane.tableRevisions.containsKey(this)) {\n this.owner.editorModule.initComplexHistory(isAccept ? 'Accept All' : 'Reject All');\n var groupingAcceptReject = this.owner.trackChangesPane.tableRevisions.get(this);\n for (var i = groupingAcceptReject.length - 1; i >= 0; i--) {\n if (isAccept) {\n groupingAcceptReject[i].handleAcceptReject(true);\n }\n else {\n groupingAcceptReject[i].handleAcceptReject(false);\n }\n }\n if (this.owner.editorHistoryModule) {\n this.owner.editorHistoryModule.updateComplexHistory();\n }\n if (this.owner.selectionModule.start.paragraph.isInsideTable) {\n var table = this.owner.selectionModule.start.paragraph.containerWidget.ownerTable;\n this.owner.documentHelper.layout.reLayoutTable(table);\n }\n }\n };\n /**\n * Method which accepts the selected revision, revision marks will be removed and changes will be included in the viewer.\n *\n * @returns {void}\n */\n Revision.prototype.accept = function () {\n var eventArgs = { author: this.author, cancel: false, revisionType: this.revisionType, actionType: 'Accept' };\n this.owner.trigger(revisionActionEvent, eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (!this.owner.documentHelper.isTrackedOnlyMode) {\n if (!this.owner.revisions.skipGroupAcceptReject && this.range[0] instanceof WRowFormat\n && this.owner.trackChangesPane.tableRevisions.containsKey(this)) {\n this.handleGroupAcceptReject(true);\n }\n else {\n this.handleAcceptReject(true);\n }\n }\n };\n /**\n * Method which rejects the selected revision, revision marks will be removed leaving the original content.\n */\n Revision.prototype.reject = function () {\n var eventArgs = { author: this.author, cancel: false, revisionType: this.revisionType, actionType: 'Reject' };\n this.owner.trigger(revisionActionEvent, eventArgs);\n if (eventArgs.cancel) {\n return;\n }\n if (!this.owner.documentHelper.isTrackedOnlyMode) {\n if (!this.owner.revisions.skipGroupAcceptReject && this.range[0] instanceof WRowFormat\n && this.owner.trackChangesPane.tableRevisions.containsKey(this)) {\n this.handleGroupAcceptReject(false);\n }\n else {\n this.handleAcceptReject(false);\n }\n }\n };\n /**\n * Unlinks revision and its assosiated range\n * @private\n * @param item\n * @param revision\n * @param isFromAccept\n */\n /* eslint-disable */\n Revision.prototype.unlinkRangeItem = function (item, revision, isFromAccept, start, end) {\n if (this.isTableRevision) {\n this.removeRangeRevisionForItem(item);\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n return false;\n }\n var removeChanges = (!isNullOrUndefined(isFromAccept)) && ((revision.revisionType === 'MoveFrom' || revision.revisionType === 'Deletion') && isFromAccept) || ((revision.revisionType === 'Insertion' || revision.revisionType === 'MoveTo') && !isFromAccept);\n if (this.owner.selectionModule.isTOC()) {\n if (removeChanges) {\n this.owner.editorModule.deleteSelectedContents(this.owner.selectionModule, true);\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n this.isContentRemoved = true;\n this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'BackSpace';\n }\n else {\n while (this.range.length > 0) {\n var currentElement = this.range[0];\n this.removeRangeRevisionForItem(currentElement);\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n }\n this.owner.editorModule.addRemovedNodes(this.revisionID);\n this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'AcceptTOC';\n }\n return false;\n }\n if (item instanceof ElementBox && !this.canSkipTableItems) {\n if (removeChanges) {\n if (!this.skipeElementRemoval(item)) {\n this.owner.editorModule.addRemovedNodes(item.clone());\n }\n else {\n this.skipUnLinkElement = true;\n return true;\n }\n }\n else {\n // Bug 873011: Handled the hyperlink formatting preservation when rejecting the RemoveHyperlink action.\n var fieldBegin = this.owner.selectionModule.getHyperlinkField();\n if (!isFromAccept && !isNullOrUndefined(fieldBegin) && fieldBegin == item && !isNullOrUndefined(fieldBegin.fieldEnd)) {\n this.owner.editorModule.initComplexHistory('ClearRevisions');\n this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'ClearRevisions';\n this.updateRevisionID();\n this.removeRevisionFromPara(start, end);\n if (!isNullOrUndefined(this.owner.editorHistoryModule)) {\n this.owner.editorHistoryModule.currentBaseHistoryInfo.isHyperlinkField = true;\n var endInfo = this.owner.selectionModule.getParagraphInfo(end);\n var endIndex = this.owner.selectionModule.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n this.owner.editorHistoryModule.currentBaseHistoryInfo.endPosition = endIndex;\n this.owner.editorHistoryModule.currentBaseHistoryInfo.selectionEnd = endIndex;\n this.owner.editorHistoryModule.updateHistory();\n }\n if (this.owner.enableTrackChanges) {\n this.owner.enableTrackChanges = false;\n this.owner.editorModule.updateHyperlinkFormat(this.owner.selectionModule);\n this.owner.enableTrackChanges = true;\n }\n else {\n this.owner.editorModule.updateHyperlinkFormat(this.owner.selectionModule);\n }\n if (this.owner.editorHistoryModule && !isNullOrUndefined(this.owner.editorHistoryModule.currentHistoryInfo)) {\n this.owner.editorHistoryModule.updateComplexHistory();\n }\n }\n else {\n this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'ClearRevisions';\n this.updateRevisionID();\n this.removeRevisionFromPara(start, end);\n }\n // Set false to this because we retrived the revision based on above action (after this iteration we have changed the action basded the below property)\n this.owner.trackChangesPane.isTrackingPageBreak = false;\n }\n }\n else if (!this.canSkipTableItems && (item instanceof WCharacterFormat) && (!removeChanges)) {\n this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'ClearRevisions';\n this.updateRevisionID();\n this.removeRevisionFromPara(start, end);\n }\n else if (item instanceof WRowFormat && !removeChanges) {\n this.isTableRevision = true;\n var tableWidget = item.ownerBase.ownerTable;\n var currentRow = item.ownerBase;\n this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'RemoveRowTrack';\n this.owner.editorModule.cloneTableToHistoryInfo(tableWidget.combineWidget(this.owner.viewer));\n }\n removeChanges = removeChanges && !this.canSkipTableItems;\n if (item instanceof ElementBox && removeChanges) {\n var currentPara = item.line.paragraph;\n this.removeRevisionItemsFromRange(item);\n if (item instanceof FootnoteElementBox) {\n if (item.footnoteType === 'Footnote') {\n this.owner.editorModule.removeFootnote(item);\n }\n }\n this.removeItem(item);\n this.isContentRemoved = true;\n this.owner.documentHelper.layout.reLayoutParagraph(currentPara, 0, 0);\n if (isNullOrUndefined(currentPara.childWidgets)) {\n var textPosition = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.owner.selectionModule.editPosition);\n this.owner.selectionModule.selectContent(textPosition, true);\n }\n }\n else if (item instanceof WCharacterFormat && removeChanges) {\n this.isContentRemoved = true;\n this.skipUnLinkElement = false;\n this.removeRevisionItemsFromRange(item);\n if (revision.range.length === 1) {\n this.owner.editorModule.deleteSelectedContents(this.owner.selectionModule, true);\n }\n else {\n this.owner.editorModule.deleteSelectedContents(this.owner.selectionModule, true);\n this.removeRevisionFromPara(start, end);\n var rangeIndex = revision.range.indexOf(item);\n revision.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n while (this.range.length > 0) {\n this.removeRangeRevisionForItem(this.range[0]);\n }\n }\n this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'BackSpace';\n this.owner.editorHistoryModule.currentBaseHistoryInfo.isAcceptOrReject = isFromAccept ? 'Accept' : 'Reject';\n }\n else if (item instanceof WRowFormat && removeChanges) {\n var tableWidget = item.ownerBase.ownerTable;\n tableWidget = tableWidget.combineWidget(this.owner.viewer);\n var currentRow = item.ownerBase;\n this.removeRevisionItemsFromRange(item);\n this.owner.editorHistoryModule.currentBaseHistoryInfo.action = 'DeleteCells';\n this.owner.editorModule.cloneTableToHistoryInfo(tableWidget);\n this.owner.editorModule.removeDeletedCellRevision(currentRow);\n this.isContentRemoved = true;\n tableWidget.removeChild(tableWidget.childWidgets.indexOf(currentRow));\n this.canSkipTableItems = true;\n // Before destroying the table row widget, delete the field element from the row.\n this.owner.editorModule.removeFieldInBlock(currentRow);\n // Before destroying the table row widget, delete the bookmark element from the row.\n this.owner.editorModule.removeFieldInBlock(currentRow, true);\n // Before destroying the table row widget, delete the content control element from the row.\n this.owner.editorModule.removeFieldInBlock(currentRow, undefined, true);\n //currentRow.destroy();\n if (tableWidget.childWidgets.length === 0) {\n this.owner.selectionModule.editPosition = this.owner.selectionModule.getHierarchicalIndex(tableWidget, '0');\n this.owner.editorModule.removeBlock(tableWidget);\n //tableWidget.destroy();\n }\n else {\n this.owner.editorModule.updateTable(tableWidget, true);\n }\n }\n // if the range is of row format, we will remove the row and for history preservation we use whole table to be cloned, hence skipping this part\n if (!(item instanceof WRowFormat) || !removeChanges) {\n if (!this.skipUnLinkElement) {\n this.removeRangeRevisionForItem(item);\n if (removeChanges && item instanceof BookmarkElementBox) {\n this.owner.editorModule.removedBookmarkElements.push(item);\n }\n if (item instanceof BookmarkElementBox) {\n if (this.owner.documentHelper.bookmarks.containsKey(item.name)) {\n if (this.owner.enableCollaborativeEditing && !isNullOrUndefined(this.owner.editorHistory.currentBaseHistoryInfo)) {\n this.owner.editorHistory.currentBaseHistoryInfo.markerData.push({ bookmarkName: item.name });\n }\n this.owner.documentHelper.bookmarks.remove(item.name);\n }\n }\n }\n }\n if (revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n return false;\n };\n Revision.prototype.removeRevisionFromPara = function (start, end) {\n var blockInfo = this.owner.selectionModule.getParagraphInfo(start);\n var endBlockInfo = this.owner.selectionModule.getParagraphInfo(end);\n var para = blockInfo.paragraph;\n while (para instanceof ParagraphWidget) {\n if (para.characterFormat.revisions.length > 0) {\n for (var i = 0; i < para.characterFormat.revisions.length; i++) {\n if (para.characterFormat.revisions[i].range.length === 0) {\n var revisionIndex = para.characterFormat.revisions.indexOf(para.characterFormat.revisions[i]);\n para.characterFormat.revisions.splice(revisionIndex, 1);\n i--;\n }\n }\n }\n if (endBlockInfo.paragraph === para) {\n para = undefined;\n }\n else {\n para = para.nextWidget;\n }\n }\n };\n Revision.prototype.updateRevisionID = function () {\n this.owner.editorModule.addRemovedNodes(this.revisionID);\n while (this.range.length > 0) {\n this.removeRangeRevisionForItem(this.range[0]);\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Revision.prototype.removeRevisionItemsFromRange = function (item) {\n if (item.revisions.length > 0) {\n for (var revisionIndex = 0; revisionIndex < item.revisions.length; revisionIndex++) {\n var currentRevision = item.revisions[revisionIndex];\n if (this.revisionID !== currentRevision.revisionID) {\n var rangeIndex = currentRevision.range.indexOf(item);\n item.revisions[revisionIndex].range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(item.revisions[revisionIndex]);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n };\n /**\n * Method to clear linked ranges in revision\n *\n * @private\n * @param {any} item - Specifies the item\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Revision.prototype.removeRangeRevisionForItem = function (item) {\n var revisionIndex = item.revisions.indexOf(this);\n if (revisionIndex >= 0) {\n item.revisions.splice(revisionIndex, 1);\n var rangeIndex = this.range.indexOf(item);\n this.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(this);\n }\n };\n /**\n * @private\n * @param {Element} element - Specifies the element.\n * @returns {boolean} Resturs skip element removal\n */\n Revision.prototype.skipeElementRemoval = function (element) {\n var elementPara = element.paragraph;\n if (elementPara.characterFormat.revisions.length > 0) {\n for (var i = 0; i < elementPara.characterFormat.revisions.length; i++) {\n var currentRevision = elementPara.characterFormat.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(element);\n if (rangeIndex >= 0) {\n return true;\n }\n }\n }\n return false;\n };\n Revision.prototype.removeRevisionFromRow = function (row) {\n this.owner.editorModule.unlinkRangeFromRevision(row.rowFormat);\n //this.owner.editor.addRemovedRevisionInfo(row.rowFormat, undefined);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n this.owner.editorModule.removeRevisionForCell(cellWidget, false);\n }\n };\n Revision.prototype.removeItem = function (element) {\n var paraWidget = element.line.paragraph;\n this.owner.editorModule.unLinkFieldCharacter(element);\n var elementIndex = element.line.children.indexOf(element);\n element.line.children.splice(elementIndex, 1);\n var paraFloatingElementIndex = element.line.paragraph.floatingElements.indexOf(element);\n element.line.paragraph.floatingElements.splice(paraFloatingElementIndex, 1);\n var blockFloatingElementIndex = element.line.paragraph.bodyWidget.floatingElements.indexOf(element);\n if (blockFloatingElementIndex > -1) {\n element.line.paragraph.bodyWidget.floatingElements.splice(blockFloatingElementIndex, 1);\n }\n this.owner.editorModule.removeEmptyLine(paraWidget);\n };\n Revision.prototype.canSkipCloning = function () {\n if (!isNullOrUndefined(this.owner) && this.owner.editorHistoryModule && this.owner.editorHistoryModule.currentBaseHistoryInfo) {\n var baseHistoryInfo = this.owner.editorHistoryModule.currentBaseHistoryInfo;\n if (baseHistoryInfo.action === 'DeleteCells') {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n *\n */\n Revision.prototype.destroy = function () {\n this.author = undefined;\n this.revisionType = undefined;\n this.revisionID = undefined;\n this.date = undefined;\n this.range = [];\n this.range = undefined;\n this.owner = undefined;\n };\n /**\n * @private\n * @returns {Revision} - Returns revision\n */\n Revision.prototype.clone = function () {\n if (this.canSkipCloning()) {\n return this;\n }\n var revision = new Revision(undefined, this.author, this.date);\n revision.revisionID = this.revisionID;\n revision.revisionType = this.revisionType;\n return revision;\n };\n /**\n * Method to clone the revisions for the element\n *\n * @param {Revision[]} revisions - revision array.\n * @returns {string[]} - returns clones revisions.\n */\n Revision.cloneRevisions = function (revisions) {\n var clonedRevisions = [];\n for (var i = 0; i < revisions.length; i++) {\n clonedRevisions.push(revisions[i].revisionID);\n }\n return clonedRevisions;\n };\n return Revision;\n}());\nexport { Revision };\n/**\n * Represents the revision collections in the document.\n */\nvar RevisionCollection = /** @class */ (function () {\n function RevisionCollection(owner) {\n /**\n * @private\n */\n this.changes = [];\n /**\n * @private\n */\n this.skipGroupAcceptReject = false;\n this.owner = owner;\n }\n /**\n * @private\n */\n RevisionCollection.prototype.get = function (index) {\n if (index >= this.changes.length || index < 0) {\n throw new ReferenceError('Provided index is not within the range');\n }\n return this.changes[index];\n };\n Object.defineProperty(RevisionCollection.prototype, \"length\", {\n get: function () {\n return this.changes.length;\n },\n enumerable: true,\n configurable: true\n });\n RevisionCollection.prototype.remove = function (revision) {\n if (isNullOrUndefined(revision) || this.changes.indexOf(revision) < 0) {\n return;\n }\n this.changes.splice(this.changes.indexOf(revision), 1);\n if (this.owner.trackChangesPane.revisions.indexOf(revision) !== -1) {\n var index = this.owner.trackChangesPane.revisions.indexOf(revision);\n var removeChild = !(this.owner.trackChangesPane.tableRevisions.containsKey(revision) && (this.owner.trackChangesPane.tableRevisions.get(revision))[(this.owner.trackChangesPane.tableRevisions.get(revision)).length - 1] !== revision);\n var changesSingleView = this.owner.trackChangesPane.changes.get(revision);\n if (removeChild) {\n this.owner.trackChangesPane.changesInfoDiv.removeChild(changesSingleView.outerSingleDiv);\n }\n this.owner.trackChangesPane.revisions.splice(index, 1);\n this.owner.trackChangesPane.changes.remove(revision);\n if (this.owner.trackChangesPane.renderedChanges.containsKey(revision)) {\n this.owner.trackChangesPane.renderedChanges.remove(revision);\n }\n if (this.owner.trackChangesPane.tableRevisions.containsKey(revision)) {\n this.owner.trackChangesPane.tableRevisions.remove(revision);\n }\n }\n };\n /**\n * Method which accepts all the revision in the revision collection\n *\n * @returns {void}\n */\n RevisionCollection.prototype.acceptAll = function () {\n if (!this.owner.isReadOnly && !this.owner.documentHelper.isTrackedOnlyMode) {\n this.handleRevisionCollection(true);\n }\n };\n /**\n * Method which rejects all the revision in the revision collection\n *\n * @returns {void}\n */\n RevisionCollection.prototype.rejectAll = function () {\n if (!this.owner.isReadOnly && !this.owner.documentHelper.isTrackedOnlyMode) {\n this.handleRevisionCollection(false);\n }\n };\n /**\n * @private\n * @param {boolean} isfromAcceptAll - Specifies the is accept all.\n * @param {Revision[]} changes - Specifies the revisions.\n * @returns {void}\n */\n RevisionCollection.prototype.handleRevisionCollection = function (isfromAcceptAll, changes) {\n this.skipGroupAcceptReject = true;\n var selection = this.owner.selectionModule;\n var startPos = selection.start;\n var endPos = selection.end;\n var revisionCollec = changes ? changes : this.changes;\n if (revisionCollec.length <= 0) {\n return;\n }\n if (!selection.start.isExistBefore(selection.end)) {\n startPos = selection.end;\n endPos = selection.start;\n }\n startPos = startPos.clone();\n endPos = endPos.clone();\n if (isfromAcceptAll) {\n this.owner.editorModule.initComplexHistory('Accept All');\n }\n else {\n this.owner.editorModule.initComplexHistory('Reject All');\n }\n while (revisionCollec.length > 0) {\n if (isfromAcceptAll) {\n revisionCollec[0].accept();\n }\n else {\n revisionCollec[0].reject();\n }\n if (changes) {\n revisionCollec.splice(0, 1);\n }\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n }\n if (!isNullOrUndefined(selection.editPosition)) {\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n this.owner.selectionModule.selectContent(textPosition, true);\n }\n if (this.owner.editorHistoryModule) {\n this.owner.editorHistoryModule.updateComplexHistory();\n if (isNullOrUndefined(selection.editPosition)) {\n this.owner.editorHistoryModule.undoStack.pop();\n }\n }\n this.owner.editorModule.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.owner.editorModule.reLayout(this.owner.selectionModule, false);\n this.owner.editorModule.isSkipOperationsBuild = false;\n this.skipGroupAcceptReject = false;\n };\n RevisionCollection.prototype.clear = function () {\n this.changes = [];\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n RevisionCollection.prototype.destroy = function () {\n if (this.changes) {\n for (var i = 0; i < this.changes.length; i++) {\n var revision = this.changes[i];\n revision.destroy();\n }\n this.changes = [];\n }\n this.changes = undefined;\n this.owner = undefined;\n };\n return RevisionCollection;\n}());\nexport { RevisionCollection };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { Revision } from '../track-changes/track-changes';\n/* eslint-disable */\n/**\n * @private\n */\nvar WRowFormat = /** @class */ (function () {\n function WRowFormat(node) {\n this.uniqueRowFormat = undefined;\n /**\n * @private\n */\n this.borders = new WBorders(this);\n /**\n * @private\n */\n this.ownerBase = undefined;\n /**\n * @private\n */\n this.beforeWidth = 0;\n /**\n * @private\n */\n this.afterWidth = 0;\n /**\n * @private\n */\n this.revisions = [];\n /**\n * @private\n */\n this.removedIds = [];\n this.ownerBase = node;\n }\n Object.defineProperty(WRowFormat.prototype, \"gridBefore\", {\n get: function () {\n return this.getPropertyValue('gridBefore');\n },\n set: function (value) {\n this.setPropertyValue('gridBefore', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidth\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridBeforeWidthType\", {\n get: function () {\n return this.getPropertyValue('gridBeforeWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridBeforeWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfter\", {\n get: function () {\n return this.getPropertyValue('gridAfter');\n },\n set: function (value) {\n this.setPropertyValue('gridAfter', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidth\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidth');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"gridAfterWidthType\", {\n get: function () {\n return this.getPropertyValue('gridAfterWidthType');\n },\n set: function (value) {\n this.setPropertyValue('gridAfterWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"allowBreakAcrossPages\", {\n get: function () {\n return this.getPropertyValue('allowBreakAcrossPages');\n },\n set: function (value) {\n this.setPropertyValue('allowBreakAcrossPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"isHeader\", {\n get: function () {\n return this.getPropertyValue('isHeader');\n },\n set: function (value) {\n this.setPropertyValue('isHeader', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"height\", {\n get: function () {\n return this.getPropertyValue('height');\n },\n set: function (value) {\n if (value === 0 && (this.heightType === 'AtLeast' || this.heightType === 'Exactly')) {\n value = 1;\n }\n else if (this.heightType === 'Auto') {\n value = 0;\n }\n this.setPropertyValue('height', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"heightType\", {\n get: function () {\n return this.getPropertyValue('heightType');\n },\n set: function (value) {\n if (value === 'AtLeast' || value === 'Exactly') {\n this.height = 1;\n }\n else {\n this.height = 0;\n }\n this.setPropertyValue('heightType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WRowFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n WRowFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueRowFormat) && this.uniqueRowFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueRowFormat.propertiesHash.get(propertyType);\n }\n }\n return WRowFormat.getPropertyDefaultValue(property);\n };\n WRowFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WRowFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueRowFormat)) {\n this.initializeUniqueRowFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n if (this.uniqueRowFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueRowFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.updateUniqueFormat(this.uniqueRowFormat, property, value);\n }\n };\n WRowFormat.prototype.initializeUniqueRowFormat = function (property, propValue) {\n var uniqueRowFormatTemp = new Dictionary();\n this.addUniqueRowFormat('allowBreakAcrossPages', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('isHeader', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('height', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('heightType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBefore', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfter', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridgridAfterWidth', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('gridBeforeWidthType', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('leftMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('rightMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('topMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('bottomMargin', property, propValue, uniqueRowFormatTemp);\n this.addUniqueRowFormat('leftIndent', property, propValue, uniqueRowFormatTemp);\n this.uniqueRowFormat = WRowFormat.uniqueRowFormats.addUniqueFormat(uniqueRowFormatTemp, WRowFormat.uniqueFormatType);\n };\n WRowFormat.prototype.addUniqueRowFormat = function (property, modifiedProperty, propValue, uniqueRowFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WRowFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueRowFormatTemp.add(propertyType, propValue);\n }\n };\n WRowFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'allowBreakAcrossPages':\n value = true;\n break;\n case 'isHeader':\n value = false;\n break;\n case 'height':\n value = 0;\n break;\n case 'heightType':\n value = 'Auto';\n break;\n case 'gridBefore':\n value = 0;\n break;\n case 'gridBeforeWidth':\n value = 0;\n break;\n case 'gridBeforeWidthType':\n value = 'Point';\n break;\n case 'gridAfter':\n value = 0;\n break;\n case 'gridAfterWidth':\n value = 0;\n break;\n case 'gridAfterWidthType':\n value = 'Point';\n break;\n case 'leftMargin':\n value = undefined;\n break;\n case 'topMargin':\n value = undefined;\n break;\n case 'bottomMargin':\n value = undefined;\n break;\n case 'rightMargin':\n value = undefined;\n break;\n case 'leftIndent':\n value = 0;\n break;\n }\n return value;\n };\n WRowFormat.prototype.containsMargins = function () {\n return (!isNullOrUndefined(this.leftMargin)\n || !isNullOrUndefined(this.rightMargin)\n || !isNullOrUndefined(this.bottomMargin)\n || !isNullOrUndefined(this.topMargin));\n };\n WRowFormat.prototype.cloneFormat = function () {\n var format = new WRowFormat();\n format.allowBreakAcrossPages = this.allowBreakAcrossPages;\n format.heightType = this.heightType;\n format.height = this.height;\n format.isHeader = this.isHeader;\n format.gridBefore = this.gridBefore;\n format.gridBeforeWidth = this.gridBeforeWidth;\n format.gridBeforeWidthType = this.gridBeforeWidthType;\n format.gridAfter = this.gridAfter;\n format.gridAfterWidth = this.gridAfterWidth;\n format.gridAfterWidthType = this.gridAfterWidthType;\n format.leftMargin = this.leftMargin;\n format.rightMargin = this.rightMargin;\n format.topMargin = this.topMargin;\n format.bottomMargin = this.bottomMargin;\n format.leftIndent = this.leftIndent;\n if (this.revisions.length > 0) {\n format.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n format.removedIds = this.removedIds.slice();\n }\n return format;\n };\n WRowFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueRowFormat.uniqueFormatType, property);\n return this.uniqueRowFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WRowFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueRowFormat)) {\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n this.heightType = format.heightType;\n this.height = format.height;\n this.gridBefore = format.gridBefore;\n this.gridBeforeWidth = format.gridBeforeWidth;\n this.gridBeforeWidthType = format.gridBeforeWidthType;\n this.gridAfter = format.gridAfter;\n this.gridAfterWidth = format.gridAfterWidth;\n this.gridAfterWidthType = format.gridAfterWidthType;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.leftIndent = format.leftIndent;\n this.revisions = format.revisions;\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.ownerBase = format;\n this.borders.copyFormat(format.borders);\n }\n if (format.revisions.length > 0) {\n this.removedIds = Revision.cloneRevisions(format.revisions);\n }\n else {\n this.removedIds = format.removedIds.slice();\n }\n }\n };\n WRowFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.uniqueRowFormat)) {\n WRowFormat.uniqueRowFormats.remove(this.uniqueRowFormat);\n }\n this.beforeWidth = undefined;\n this.afterWidth = undefined;\n this.borders = undefined;\n this.uniqueRowFormat = undefined;\n };\n WRowFormat.clear = function () {\n this.uniqueRowFormats.clear();\n };\n WRowFormat.uniqueRowFormats = new WUniqueFormats();\n WRowFormat.uniqueFormatType = 6;\n return WRowFormat;\n}());\nexport { WRowFormat };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WBorders } from './borders';\nimport { WShading } from './shading';\n/* eslint-disable */\n/**\n * @private\n */\nvar WCellFormat = /** @class */ (function () {\n function WCellFormat(node) {\n this.uniqueCellFormat = undefined;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n this.ownerBase = node;\n this.borders = new WBorders(this);\n this.shading = new WShading(this);\n }\n Object.defineProperty(WCellFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"cellWidth\", {\n get: function () {\n return this.getPropertyValue('cellWidth');\n },\n set: function (value) {\n this.setPropertyValue('cellWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"columnSpan\", {\n get: function () {\n return this.getPropertyValue('columnSpan');\n },\n set: function (value) {\n this.setPropertyValue('columnSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"rowSpan\", {\n get: function () {\n return this.getPropertyValue('rowSpan');\n },\n set: function (value) {\n this.setPropertyValue('rowSpan', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidth\", {\n get: function () {\n return this.getPropertyValue('preferredWidth');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"verticalAlignment\", {\n get: function () {\n return this.getPropertyValue('verticalAlignment');\n },\n set: function (value) {\n this.setPropertyValue('verticalAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WCellFormat.prototype, \"preferredWidthType\", {\n get: function () {\n return this.getPropertyValue('preferredWidthType');\n },\n set: function (value) {\n this.setPropertyValue('preferredWidthType', value);\n },\n enumerable: true,\n configurable: true\n });\n WCellFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueCellFormat) && this.uniqueCellFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueCellFormat.propertiesHash.get(propertyType);\n }\n }\n return WCellFormat.getPropertyDefaultValue(property);\n };\n WCellFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WCellFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueCellFormat)) {\n this.initializeUniqueCellFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n if (this.uniqueCellFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueCellFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.updateUniqueFormat(this.uniqueCellFormat, property, value);\n }\n };\n WCellFormat.prototype.initializeUniqueCellFormat = function (property, propValue) {\n var uniqueCellFormatTemp = new Dictionary();\n this.addUniqueCellFormat('leftMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('topMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('bottomMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rightMargin', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('cellWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('columnSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('rowSpan', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidth', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('verticalAlignment', property, propValue, uniqueCellFormatTemp);\n this.addUniqueCellFormat('preferredWidthType', property, propValue, uniqueCellFormatTemp);\n this.uniqueCellFormat = WCellFormat.uniqueCellFormats.addUniqueFormat(uniqueCellFormatTemp, WCellFormat.uniqueFormatType);\n };\n WCellFormat.prototype.addUniqueCellFormat = function (property, modifiedProperty, propValue, uniqueCellFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WCellFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCellFormatTemp.add(propertyType, propValue);\n }\n };\n WCellFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftMargin':\n value = undefined;\n break;\n case 'topMargin':\n value = undefined;\n break;\n case 'bottomMargin':\n value = undefined;\n break;\n case 'rightMargin':\n value = undefined;\n break;\n case 'cellWidth':\n value = 0;\n break;\n case 'columnSpan':\n value = 1;\n break;\n case 'rowSpan':\n value = 1;\n break;\n case 'preferredWidth':\n value = 0;\n break;\n case 'verticalAlignment':\n value = 'Top';\n break;\n case 'preferredWidthType':\n value = 'Point';\n break;\n }\n return value;\n };\n WCellFormat.prototype.containsMargins = function () {\n return (!isNullOrUndefined(this.leftMargin)\n || !isNullOrUndefined(this.rightMargin)\n || !isNullOrUndefined(this.bottomMargin)\n || !isNullOrUndefined(this.topMargin));\n };\n WCellFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n if (!isNullOrUndefined(this.shading)) {\n this.shading.destroy();\n }\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n WCellFormat.uniqueCellFormats.remove(this.uniqueCellFormat);\n }\n this.uniqueCellFormat = undefined;\n this.borders = undefined;\n this.shading = undefined;\n };\n WCellFormat.prototype.cloneFormat = function () {\n var format = new WCellFormat(undefined);\n format.verticalAlignment = this.verticalAlignment;\n format.leftMargin = this.leftMargin;\n format.rightMargin = this.rightMargin;\n format.topMargin = this.topMargin;\n format.bottomMargin = this.bottomMargin;\n format.preferredWidth = this.preferredWidth;\n format.preferredWidthType = this.preferredWidthType;\n format.cellWidth = this.cellWidth;\n format.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n format.shading = isNullOrUndefined(this.shading) ? undefined : this.shading.cloneFormat();\n return format;\n };\n WCellFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueCellFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueCellFormat.uniqueFormatType, property);\n return this.uniqueCellFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WCellFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueCellFormat)) {\n this.cellWidth = format.cellWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.preferredWidth = format.preferredWidth;\n this.columnSpan = format.columnSpan;\n this.rowSpan = format.rowSpan;\n this.preferredWidthType = format.preferredWidthType;\n this.verticalAlignment = format.verticalAlignment;\n }\n if (!isNullOrUndefined(format.shading)) {\n this.shading = new WShading(this);\n this.shading.copyFormat(format.shading);\n }\n if (!isNullOrUndefined(format.borders)) {\n this.borders = new WBorders(this);\n this.borders.copyFormat(format.borders);\n }\n }\n };\n WCellFormat.clear = function () {\n this.uniqueCellFormats.clear();\n };\n WCellFormat.uniqueCellFormats = new WUniqueFormats();\n WCellFormat.uniqueFormatType = 4;\n return WCellFormat;\n}());\nexport { WCellFormat };\n","/* eslint-disable */\nvar Utils = /** @class */ (function () {\n function Utils() {\n }\n Utils.bitReverse = function (value) {\n return (Utils.reverseBits[value & 15] << 12\n | Utils.reverseBits[(value >> 4) & 15] << 8\n | Utils.reverseBits[(value >> 8) & 15] << 4\n | Utils.reverseBits[value >> 12]);\n };\n Utils.bitConverterToInt32 = function (value, index) {\n return value[index] | value[index + 1] << 8 | value[index + 2] << 16 | value[index + 3] << 24;\n };\n Utils.bitConverterToInt16 = function (value, index) {\n return value[index] | value[index + 1] << 8;\n };\n Utils.bitConverterToUInt32 = function (value) {\n var uint = new Uint32Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.bitConverterToUInt16 = function (value, index) {\n var uint = new Uint16Array(1);\n uint[0] = (value[index] | value[index + 1] << 8);\n return uint[0];\n };\n Utils.bitConverterUintToInt32 = function (value) {\n var uint = new Int32Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.bitConverterInt32ToUint = function (value) {\n var uint = new Uint32Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.bitConverterInt32ToInt16 = function (value) {\n var uint = new Int16Array(1);\n uint[0] = value;\n return uint[0];\n };\n Utils.byteToString = function (value) {\n var str = '';\n for (var i = 0; i < value.length; i++) {\n str += String.fromCharCode(value[i]);\n }\n return str;\n };\n Utils.byteIntToString = function (value) {\n var str = '';\n for (var i = 0; i < value.length; i++) {\n str += String.fromCharCode(value[i]);\n }\n return str;\n };\n Utils.arrayCopy = function (source, sourceIndex, destination, destinationIndex, dataToCopy) {\n var temp = new Uint8Array(source.buffer, sourceIndex);\n var data = temp.subarray(0, dataToCopy);\n destination.set(data, destinationIndex);\n };\n Utils.mergeArray = function (arrayOne, arrayTwo) {\n var mergedArray = new Uint8Array(arrayOne.length + arrayTwo.length);\n mergedArray.set(arrayOne);\n mergedArray.set(arrayTwo, arrayOne.length);\n return mergedArray;\n };\n /**\n * @private\n */\n Utils.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var encode1;\n var encode2;\n var encode3;\n var encode4;\n var count = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (count < input.length) {\n encode1 = keyStr.indexOf(input.charAt(count++));\n encode2 = keyStr.indexOf(input.charAt(count++));\n encode3 = keyStr.indexOf(input.charAt(count++));\n encode4 = keyStr.indexOf(input.charAt(count++));\n chr1 = (encode1 << 2) | (encode2 >> 4);\n chr2 = ((encode2 & 15) << 4) | (encode3 >> 2);\n chr3 = ((encode3 & 3) << 6) | encode4;\n output[resultIndex++] = chr1;\n if (encode3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (encode4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n Utils.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n Utils.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return Utils;\n}());\nexport { Utils };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { Utils } from './index';\nvar DecompressorHuffmanTree = /** @class */ (function () {\n function DecompressorHuffmanTree(lengths) {\n this.buildTree(lengths);\n }\n DecompressorHuffmanTree.init = function () {\n var lengths;\n var index;\n // Generate huffman tree for lengths.\n lengths = new Uint8Array(288);\n index = 0;\n while (index < 144) {\n lengths[index++] = 8;\n }\n while (index < 256) {\n lengths[index++] = 9;\n }\n while (index < 280) {\n lengths[index++] = 7;\n }\n while (index < 288) {\n lengths[index++] = 8;\n }\n DecompressorHuffmanTree.m_LengthTree = new DecompressorHuffmanTree(lengths);\n // Generate huffman tree for distances.\n lengths = new Uint8Array(32);\n index = 0;\n while (index < 32) {\n lengths[index++] = 5;\n }\n DecompressorHuffmanTree.m_DistanceTree = new DecompressorHuffmanTree(lengths);\n };\n /// \n /// Prepares data for generating huffman tree.\n /// \n /// Array of counts of each code length.\n /// Numerical values of the smallest code for each code length.\n /// Array of code lengths.\n /// Calculated tree size.\n /// Code.\n DecompressorHuffmanTree.prototype.prepareData = function (blCount, nextCode, lengths) {\n var code = 0;\n var treeSize = 512;\n // Count number of codes for each code length.\n for (var i = 0; i < lengths.length; i++) {\n var length_1 = lengths[i];\n if (length_1 > 0) {\n blCount[length_1]++;\n }\n }\n for (var bits = 1; bits <= DecompressorHuffmanTree.MAX_BITLEN; bits++) {\n nextCode[bits] = code;\n code += blCount[bits] << (16 - bits);\n if (bits >= 10) {\n var start = nextCode[bits] & 0x1ff80;\n var end = code & 0x1ff80;\n treeSize += (end - start) >> (16 - bits);\n }\n }\n /* if( code != 65536 )\n throw new ZipException( \"Code lengths don't add up properly.\" );*/\n return { 'code': code, 'treeSize': treeSize };\n };\n /// \n /// Generates huffman tree.\n /// \n /// Array of counts of each code length.\n /// Numerical values of the smallest code for each code length.\n /// Precalculated code.\n /// Array of code lengths.\n /// Calculated size of the tree.\n /// Generated tree.\n DecompressorHuffmanTree.prototype.treeFromData = function (blCount, nextCode, lengths, code, treeSize) {\n var tree = new Int16Array(treeSize);\n var pointer = 512;\n var increment = 1 << 7;\n for (var bits = DecompressorHuffmanTree.MAX_BITLEN; bits >= 10; bits--) {\n var end = code & 0x1ff80;\n code -= blCount[bits] << (16 - bits);\n var start = code & 0x1ff80;\n for (var i = start; i < end; i += increment) {\n tree[Utils.bitReverse(i)] = Utils.bitConverterInt32ToInt16((-pointer << 4) | bits);\n pointer += 1 << (bits - 9);\n }\n }\n for (var i = 0; i < lengths.length; i++) {\n var bits = lengths[i];\n if (bits == 0) {\n continue;\n }\n code = nextCode[bits];\n var revcode = Utils.bitReverse(code);\n if (bits <= 9) {\n do {\n tree[revcode] = Utils.bitConverterInt32ToInt16((i << 4) | bits);\n revcode += 1 << bits;\n } while (revcode < 512);\n }\n else {\n var subTree = tree[revcode & 511];\n var treeLen = 1 << (subTree & 15);\n subTree = -(subTree >> 4);\n do {\n tree[subTree | (revcode >> 9)] = Utils.bitConverterInt32ToInt16((i << 4) | bits);\n revcode += 1 << bits;\n } while (revcode < treeLen);\n }\n nextCode[bits] = code + (1 << (16 - bits));\n }\n return tree;\n };\n /// \n /// Builds huffman tree from array of code lengths.\n /// \n /// Array of code lengths.\n DecompressorHuffmanTree.prototype.buildTree = function (lengths) {\n // Count of codes for each code length.\n var blCount = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n // Numerical value of the smallest code for each code length.\n var nextCode = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n var prepareData = this.prepareData(blCount, nextCode, lengths);\n this.m_Tree = this.treeFromData(blCount, nextCode, lengths, prepareData.code, prepareData.treeSize);\n };\n /// \n /// Reads and decompresses one symbol.\n /// \n /// \n /// \n DecompressorHuffmanTree.prototype.unpackSymbol = function (input) {\n var lookahead;\n var symbol;\n if ((lookahead = input.peekBits(9)) >= 0) {\n if ((symbol = this.m_Tree[lookahead]) >= 0) {\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n var subtree = -(symbol >> 4);\n var bitlen = symbol & 15;\n if ((lookahead = input.peekBits(bitlen)) >= 0) {\n symbol = this.m_Tree[subtree | (lookahead >> 9)];\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n else {\n var bits = input.availableBits;\n lookahead = input.peekBits(bits);\n symbol = this.m_Tree[subtree | (lookahead >> 9)];\n if ((symbol & 15) <= bits) {\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n else {\n return -1;\n }\n }\n }\n else {\n var bits = input.availableBits;\n lookahead = input.peekBits(bits);\n symbol = this.m_Tree[lookahead];\n if (symbol >= 0 && (symbol & 15) <= bits) {\n input.skipBits((symbol & 15));\n return symbol >> 4;\n }\n else {\n return -1;\n }\n }\n };\n Object.defineProperty(DecompressorHuffmanTree, \"lengthTree\", {\n /// \n /// GET huffman tree for encoding and decoding lengths.\n /// \n get: function () {\n return this.m_LengthTree;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DecompressorHuffmanTree, \"distanceTree\", {\n /// \n /// GET huffman tree for encoding and decoding distances.\n /// \n get: function () {\n return this.m_DistanceTree;\n },\n enumerable: true,\n configurable: true\n });\n /// \n /// Maximum count of bits.\n /// \n DecompressorHuffmanTree.MAX_BITLEN = 15;\n return DecompressorHuffmanTree;\n}());\nexport { DecompressorHuffmanTree };\n/* eslint-enable */ \n","/* eslint-disable */\n/// \n/// Checksum calculator, based on Adler32 algorithm.\n/// \nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /// \n /// Updates checksum by calculating checksum of the\n /// given buffer and adding it to current value.\n /// \n /// Current checksum.\n /// Data byte array.\n /// Offset in the buffer.\n /// Length of data to be used from the stream.\n ChecksumCalculator.ChecksumUpdate = function (checksum, buffer, offset, length) {\n var checkSumUInt = checksum;\n var s1 = checkSumUInt & 65535;\n var s2 = checkSumUInt >> this.DEF_CHECKSUM_BIT_OFFSET;\n while (length > 0) {\n var steps = Math.min(length, this.DEF_CHECKSUM_ITERATIONSCOUNT);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (buffer[offset++] & 255);\n s2 = s2 + s1;\n }\n s1 %= this.DEF_CHECKSUM_BASE;\n s2 %= this.DEF_CHECKSUM_BASE;\n }\n checkSumUInt = (s2 << this.DEF_CHECKSUM_BIT_OFFSET) | s1;\n checksum = checkSumUInt;\n };\n /// \n /// Generates checksum by calculating checksum of the\n /// given buffer.\n /// \n /// Data byte array.\n /// Offset in the buffer.\n /// Length of data to be used from the stream.\n ChecksumCalculator.ChecksumGenerate = function (buffer, offset, length) {\n var result = 1;\n ChecksumCalculator.ChecksumUpdate(result, buffer, offset, length);\n return result;\n };\n /// \n /// Bits offset, used in adler checksum calculation.\n /// \n ChecksumCalculator.DEF_CHECKSUM_BIT_OFFSET = 16;\n /// \n /// Lagrest prime, less than 65535\n /// \n ChecksumCalculator.DEF_CHECKSUM_BASE = 65521;\n /// \n /// Count of iteration used in calculated of the adler checksumm.\n /// \n ChecksumCalculator.DEF_CHECKSUM_ITERATIONSCOUNT = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { DecompressorHuffmanTree } from './decompressor-huffman-tree';\nimport { Utils } from './utils';\nimport { ChecksumCalculator } from './checksum-calculator';\nvar CompressedStreamReader = /** @class */ (function () {\n function CompressedStreamReader(stream, bNoWrap) {\n /// \n /// Code lengths for the code length alphabet.\n /// \n this.defaultHuffmanDynamicTree = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n /// \n /// Mask for compression method to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_METHOD_MASK = 15 << 8;\n /// \n /// Mask for compression info to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_INFO_MASK = 240 << 8;\n /// \n /// Mask for check bits to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_FLAGS_FCHECK = 31;\n /// \n /// Mask for dictionary presence to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_FLAGS_FDICT = 32;\n /// \n /// Mask for compression level to be decoded from 16-bit header.\n /// \n this.DEF_HEADER_FLAGS_FLEVEL = 192;\n /// \n /// Maximum size of the data window.\n /// \n this.DEF_MAX_WINDOW_SIZE = 65535;\n /// \n /// Maximum length of the repeatable block.\n /// \n this.DEF_HUFFMAN_REPEATE_MAX = 258;\n /// \n /// End of the block sign.\n /// \n this.DEF_HUFFMAN_END_BLOCK = 256;\n /// \n /// Minimal length code.\n /// \n this.DEF_HUFFMAN_LENGTH_MINIMUMCODE = 257;\n /// \n /// Maximal length code.\n /// \n this.DEF_HUFFMAN_LENGTH_MAXIMUMCODE = 285;\n /// \n /// Maximal distance code.\n /// \n this.DEF_HUFFMAN_DISTANCE_MAXIMUMCODE = 29;\n /// \n /// Currently calculated checksum,\n /// based on Adler32 algorithm.\n /// \n this.mCheckSum = 1;\n /// \n /// Currently read 4 bytes.\n /// \n this.tBuffer = 0;\n /// \n /// Count of bits that are in buffer.\n /// \n this.mBufferedBits = 0;\n /// \n /// Temporary buffer.\n /// \n this.mTempBuffer = new Uint8Array(4);\n /// \n /// 32k buffer for unpacked data.\n /// \n this.mBlockBuffer = new Uint8Array(this.DEF_MAX_WINDOW_SIZE);\n /// \n /// No wrap mode.\n /// \n this.mbNoWrap = false;\n /// \n /// Window size, can not be larger than 32k.\n /// \n this.mWindowSize = 0;\n /// \n /// Current position in output stream.\n /// Current in-block position can be extracted by applying Int16.MaxValue mask.\n /// \n this.mCurrentPosition = 0;\n /// \n /// Data length.\n /// Current in-block position can be extracted by applying Int16.MaxValue mask.\n /// \n this.mDataLength = 0;\n /// \n /// Specifies wheather next block can to be read.\n /// Reading can be denied because the header of the last block have been read.\n /// \n this.mbCanReadNextBlock = true;\n /// \n /// Specifies wheather user can read more data from stream.\n /// \n this.mbCanReadMoreData = true;\n /// \n /// Specifies wheather checksum has been read.\n /// \n this.mbCheckSumRead = false;\n if (stream == null) {\n throw new DOMException('stream');\n }\n if (stream.length === 0) {\n throw new DOMException('stream - string can not be empty');\n }\n DecompressorHuffmanTree.init();\n this.mInputStream = new Stream(stream);\n this.mbNoWrap = bNoWrap;\n if (!this.mbNoWrap) {\n this.readZLibHeader();\n }\n this.decodeBlockHeader();\n }\n Object.defineProperty(CompressedStreamReader.prototype, \"mBuffer\", {\n get: function () {\n return this.tBuffer;\n },\n set: function (value) {\n this.tBuffer = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n /// \n /// Reads specified count of bits without adjusting position.\n /// \n /// Count of bits to be read.\n /// Read value.\n CompressedStreamReader.prototype.peekBits = function (count) {\n if (count < 0) {\n throw new DOMException('count', 'Bits count can not be less than zero.');\n }\n if (count > 32) {\n throw new DOMException('count', 'Count of bits is too large.');\n }\n // If buffered data is not enough to give result,\n // fill buffer.\n if (this.mBufferedBits < count) {\n this.fillBuffer();\n }\n // If you want to read 4 bytes and there is partial data in\n // buffer, than you will fail.\n if (this.mBufferedBits < count) {\n return -1;\n }\n // Create bitmask for reading of count bits\n var bitMask = ~(4294967295 << count);\n var result = Utils.bitConverterUintToInt32(this.mBuffer & bitMask);\n //Debug.WriteLine( /*new string( ' ', 32 - mBufferedBits + (int)( ( 32 - mBufferedBits ) / 8 ) ) + BitsToString( (int)mBuffer, mBufferedBits ) + \" \" + BitsToString( result, count ) +*/ \" \" + result.ToString() );\n return result;\n };\n CompressedStreamReader.prototype.fillBuffer = function () {\n var length = 4 - (this.mBufferedBits >> 3) -\n (((this.mBufferedBits & 7) !== 0) ? 1 : 0);\n if (length === 0) {\n return;\n }\n //TODO: fix this\n var bytesRead = this.mInputStream.read(this.mTempBuffer, 0, length);\n for (var i = 0; i < bytesRead; i++) {\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer |\n (Utils.bitConverterInt32ToUint(this.mTempBuffer[i] << this.mBufferedBits)));\n this.mBufferedBits += 8;\n }\n //TODO: fix this\n };\n /// \n /// Skips specified count of bits.\n /// \n /// Count of bits to be skipped.\n CompressedStreamReader.prototype.skipBits = function (count) {\n if (count < 0) {\n throw new DOMException('count', 'Bits count can not be less than zero.');\n }\n if (count === 0) {\n return;\n }\n if (count >= this.mBufferedBits) {\n count -= this.mBufferedBits;\n this.mBufferedBits = 0;\n this.mBuffer = 0;\n // if something left, skip it.\n if (count > 0) {\n // Skip entire bytes.\n this.mInputStream.position += (count >> 3); //TODO: fix this\n count &= 7;\n // Skip bits.\n if (count > 0) {\n this.fillBuffer();\n this.mBufferedBits -= count;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n }\n }\n }\n else {\n this.mBufferedBits -= count;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n }\n };\n Object.defineProperty(CompressedStreamReader.prototype, \"availableBits\", {\n get: function () {\n return this.mBufferedBits;\n },\n enumerable: true,\n configurable: true\n });\n /// \n /// Reads ZLib header with compression method and flags.\n /// \n CompressedStreamReader.prototype.readZLibHeader = function () {\n // first 8 bits - compression Method and flags\n // 8 other - flags\n var header = this.readInt16();\n //Debug.WriteLine( BitsToString( header ) );\n if (header === -1) {\n throw new DOMException('Header of the stream can not be read.');\n }\n if (header % 31 !== 0) {\n throw new DOMException('Header checksum illegal');\n }\n if ((header & this.DEF_HEADER_METHOD_MASK) !== (8 << 8)) {\n throw new DOMException('Unsupported compression method.');\n }\n this.mWindowSize = Math.pow(2, ((header & this.DEF_HEADER_INFO_MASK) >> 12) + 8);\n if (this.mWindowSize > 65535) {\n throw new DOMException('Unsupported window size for deflate compression method.');\n }\n if ((header & this.DEF_HEADER_FLAGS_FDICT) >> 5 === 1) {\n // Get dictionary.\n throw new DOMException('Custom dictionary is not supported at the moment.');\n }\n };\n /// \n /// TODO: place correct comment here\n /// \n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readInt16 = function () {\n var result = (this.readBits(8) << 8);\n result |= this.readBits(8);\n return result;\n };\n /// \n /// Reads specified count of bits from stream.\n /// \n /// Count of bits to be read.\n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readBits = function (count) {\n var result = this.peekBits(count);\n if (result === -1) {\n return -1;\n }\n this.mBufferedBits -= count;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n return result;\n };\n /// \n /// Reads and decodes block of data.\n /// \n /// True if buffer was empty and new data was read, otherwise - False.\n CompressedStreamReader.prototype.decodeBlockHeader = function () {\n if (!this.mbCanReadNextBlock) {\n return false;\n }\n var bFinalBlock = this.readBits(1);\n if (bFinalBlock === -1) {\n return false;\n }\n var blockType = this.readBits(2);\n if (blockType === -1) {\n return false;\n }\n this.mbCanReadNextBlock = (bFinalBlock === 0);\n // ChecksumReset();\n switch (blockType) {\n case 0:\n // Uncompressed data\n this.mbReadingUncompressed = true;\n this.skipToBoundary();\n var length_1 = this.readInt16Inverted();\n var lengthComplement = this.readInt16Inverted();\n if (length_1 !== (lengthComplement ^ 0xffff)) {\n throw new DOMException('Wrong block length.');\n }\n if (length_1 > 65535) {\n throw new DOMException('Uncompressed block length can not be more than 65535.');\n }\n this.mUncompressedDataLength = length_1;\n this.mCurrentLengthTree = null;\n this.mCurrentDistanceTree = null;\n break;\n case 1:\n // Compressed data with fixed huffman codes.\n this.mbReadingUncompressed = false;\n this.mUncompressedDataLength = -1;\n this.mCurrentLengthTree = DecompressorHuffmanTree.lengthTree;\n this.mCurrentDistanceTree = DecompressorHuffmanTree.distanceTree;\n break;\n case 2:\n // Compressed data with dynamic huffman codes.\n this.mbReadingUncompressed = false;\n this.mUncompressedDataLength = -1;\n var trees = this.decodeDynamicHeader(this.mCurrentLengthTree, this.mCurrentDistanceTree);\n this.mCurrentLengthTree = trees.lengthTree;\n this.mCurrentDistanceTree = trees.distanceTree;\n break;\n default:\n throw new DOMException('Wrong block type.');\n }\n return true;\n };\n /// \n /// Discards left-most partially used byte.\n /// \n CompressedStreamReader.prototype.skipToBoundary = function () {\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> (this.mBufferedBits & 7));\n this.mBufferedBits &= ~7;\n };\n /// \n /// TODO: place correct comment here\n /// \n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readInt16Inverted = function () {\n var result = (this.readBits(8));\n result |= this.readBits(8) << 8;\n return result;\n };\n /// \n /// Reades dynamic huffman codes from block header.\n /// \n /// Literals/Lengths tree.\n /// Distances tree.\n CompressedStreamReader.prototype.decodeDynamicHeader = function (lengthTree, distanceTree) {\n var bLastSymbol = 0;\n var iLengthsCount = this.readBits(5);\n var iDistancesCount = this.readBits(5);\n var iCodeLengthsCount = this.readBits(4);\n if (iLengthsCount < 0 || iDistancesCount < 0 || iCodeLengthsCount < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n iLengthsCount += 257;\n iDistancesCount += 1;\n var iResultingCodeLengthsCount = iLengthsCount + iDistancesCount;\n var arrResultingCodeLengths = new Uint8Array(iResultingCodeLengthsCount);\n var arrDecoderCodeLengths = new Uint8Array(19);\n iCodeLengthsCount += 4;\n var iCurrentCode = 0;\n while (iCurrentCode < iCodeLengthsCount) {\n var len = this.readBits(3);\n if (len < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n arrDecoderCodeLengths[this.defaultHuffmanDynamicTree[iCurrentCode++]] = len;\n }\n var treeInternalDecoder = new DecompressorHuffmanTree(arrDecoderCodeLengths);\n iCurrentCode = 0;\n for (;;) {\n var symbol = void 0;\n var bNeedBreak = false;\n symbol = treeInternalDecoder.unpackSymbol(this);\n while ((symbol & ~15) === 0) {\n arrResultingCodeLengths[iCurrentCode++] = bLastSymbol = symbol;\n if (iCurrentCode === iResultingCodeLengthsCount) {\n bNeedBreak = true;\n break;\n }\n symbol = treeInternalDecoder.unpackSymbol(this);\n }\n if (bNeedBreak) {\n break;\n }\n if (symbol < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n if (symbol >= 17) {\n bLastSymbol = 0;\n }\n else if (iCurrentCode === 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n var miRepSymbol = symbol - 16;\n var bits = CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_BITS[miRepSymbol];\n var count = this.readBits(bits);\n if (count < 0) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n count += CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS[miRepSymbol];\n if (iCurrentCode + count > iResultingCodeLengthsCount) {\n throw new DOMException('Wrong dynamic huffman codes.');\n }\n while (count-- > 0) {\n arrResultingCodeLengths[iCurrentCode++] = bLastSymbol;\n }\n if (iCurrentCode === iResultingCodeLengthsCount) {\n break;\n }\n }\n var tempArray = new Uint8Array(iLengthsCount);\n tempArray.set(arrResultingCodeLengths.subarray(0, iLengthsCount), 0);\n //sourceArray, sourceIndex, destinationArray, destinationIndex, length\n //Array.copy( arrResultingCodeLengths, 0, tempArray, 0, iLengthsCount );\n lengthTree = new DecompressorHuffmanTree(tempArray);\n tempArray = arrResultingCodeLengths.slice(iLengthsCount, iLengthsCount + iDistancesCount);\n //Array.copy( arrResultingCodeLengths, iLengthsCount, tempArray, 0, iDistancesCount );\n distanceTree = new DecompressorHuffmanTree(tempArray);\n return { 'lengthTree': lengthTree, 'distanceTree': distanceTree };\n };\n /// \n /// Decodes huffman codes.\n /// \n /// True if some data was read.\n CompressedStreamReader.prototype.readHuffman = function () {\n var free = this.DEF_MAX_WINDOW_SIZE - (this.mDataLength - this.mCurrentPosition);\n var dataRead = false;\n //long maxdistance = DEF_MAX_WINDOW_SIZE >> 1;\n var readdata = {};\n // DEF_HUFFMAN_REPEATE_MAX - longest repeatable block, we should always reserve space for it because\n // if we should not, we will have buffer overrun.\n while (free >= this.DEF_HUFFMAN_REPEATE_MAX) {\n var symbol = void 0;\n symbol = this.mCurrentLengthTree.unpackSymbol(this);\n // Only codes 0..255 are valid independent symbols.\n while (((symbol) & ~0xff) === 0) {\n readdata[(this.mDataLength + 1) % this.DEF_MAX_WINDOW_SIZE] = symbol;\n this.mBlockBuffer[this.mDataLength++ % this.DEF_MAX_WINDOW_SIZE] = symbol;\n dataRead = true;\n if (--free < this.DEF_HUFFMAN_REPEATE_MAX) {\n return true;\n }\n //if( (mDataLength - mCurrentPosition ) < maxdistance ) return true;\n symbol = this.mCurrentLengthTree.unpackSymbol(this);\n }\n if (symbol < this.DEF_HUFFMAN_LENGTH_MINIMUMCODE) {\n if (symbol < this.DEF_HUFFMAN_END_BLOCK) {\n throw new DOMException('Illegal code.');\n }\n var numDataRead = dataRead ? 1 : 0;\n this.mbCanReadMoreData = this.decodeBlockHeader();\n var numReadMore = (this.mbCanReadMoreData) ? 1 : 0;\n return (numDataRead | numReadMore) ? true : false;\n }\n if (symbol > this.DEF_HUFFMAN_LENGTH_MAXIMUMCODE) {\n throw new DOMException('Illegal repeat code length.');\n }\n var iRepeatLength = CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_BASE[symbol -\n this.DEF_HUFFMAN_LENGTH_MINIMUMCODE];\n var iRepeatExtraBits = CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION[symbol -\n this.DEF_HUFFMAN_LENGTH_MINIMUMCODE];\n if (iRepeatExtraBits > 0) {\n var extra = this.readBits(iRepeatExtraBits);\n if (extra < 0) {\n throw new DOMException('Wrong data.');\n }\n iRepeatLength += extra;\n }\n // Unpack repeat distance.\n symbol = this.mCurrentDistanceTree.unpackSymbol(this);\n if (symbol < 0 || symbol > CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE.length) {\n throw new DOMException('Wrong distance code.');\n }\n var iRepeatDistance = CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE[symbol];\n iRepeatExtraBits = CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION[symbol];\n if (iRepeatExtraBits > 0) {\n var extra = this.readBits(iRepeatExtraBits);\n if (extra < 0) {\n throw new DOMException('Wrong data.');\n }\n iRepeatDistance += extra;\n }\n // Copy data in slow repeat mode\n for (var i = 0; i < iRepeatLength; i++) {\n this.mBlockBuffer[this.mDataLength % this.DEF_MAX_WINDOW_SIZE] =\n this.mBlockBuffer[(this.mDataLength - iRepeatDistance) % this.DEF_MAX_WINDOW_SIZE];\n this.mDataLength++;\n free--;\n }\n dataRead = true;\n }\n return dataRead;\n };\n /// \n /// Reads data to buffer.\n /// \n /// Output buffer for data.\n /// Offset in output data.\n /// Length of the data to be read.\n /// Count of bytes actually read.\n CompressedStreamReader.prototype.read = function (buffer, offset, length) {\n if (buffer == null) {\n throw new DOMException('buffer');\n }\n if (offset < 0 || offset > buffer.length - 1) {\n throw new DOMException('offset', 'Offset does not belong to specified buffer.');\n }\n if (length < 0 || length > buffer.length - offset) {\n throw new DOMException('length', 'Length is illegal.');\n }\n var initialLength = length;\n while (length > 0) {\n // Read from internal buffer.\n if (this.mCurrentPosition < this.mDataLength) {\n // Position in buffer array.\n var inBlockPosition = (this.mCurrentPosition % this.DEF_MAX_WINDOW_SIZE);\n // We can not read more than we have in buffer at once,\n // and we not read more than till the array end.\n var dataToCopy = Math.min(this.DEF_MAX_WINDOW_SIZE - inBlockPosition, (this.mDataLength - this.mCurrentPosition));\n // Reading not more, than the rest of the buffer.\n dataToCopy = Math.min(dataToCopy, length);\n //sourceArray, sourceIndex, destinationArray, destinationIndex, length\n // Copy data.\n //Array.Copy( mBlockBuffer, inBlockPosition, buffer, offset, dataToCopy );\n //buffer.set(this.mBlockBuffer.slice(inBlockPosition, dataToCopy), offset);\n Utils.arrayCopy(this.mBlockBuffer, inBlockPosition, buffer, offset, dataToCopy);\n // Correct position, length,\n this.mCurrentPosition += dataToCopy;\n offset += dataToCopy;\n length -= dataToCopy;\n }\n else {\n if (!this.mbCanReadMoreData) {\n break;\n }\n var oldDataLength = this.mDataLength;\n if (!this.mbReadingUncompressed) {\n if (!this.readHuffman()) {\n break;\n }\n }\n else {\n if (this.mUncompressedDataLength === 0) {\n // If there is no more data in stream, just exit.\n this.mbCanReadMoreData = this.decodeBlockHeader();\n if (!(this.mbCanReadMoreData)) {\n break;\n }\n }\n else {\n // Position of the data end in block buffer.\n var inBlockPosition = (this.mDataLength % this.DEF_MAX_WINDOW_SIZE);\n var dataToRead = Math.min(this.mUncompressedDataLength, this.DEF_MAX_WINDOW_SIZE - inBlockPosition);\n var dataRead = this.readPackedBytes(this.mBlockBuffer, inBlockPosition, dataToRead);\n if (dataToRead !== dataRead) {\n throw new DOMException('Not enough data in stream.');\n }\n this.mUncompressedDataLength -= dataRead;\n this.mDataLength += dataRead;\n }\n }\n if (oldDataLength < this.mDataLength) {\n var start = (oldDataLength % this.DEF_MAX_WINDOW_SIZE);\n var end = (this.mDataLength % this.DEF_MAX_WINDOW_SIZE);\n if (start < end) {\n this.checksumUpdate(this.mBlockBuffer, start, end - start);\n }\n else {\n this.checksumUpdate(this.mBlockBuffer, start, this.DEF_MAX_WINDOW_SIZE - start);\n if (end > 0) {\n this.checksumUpdate(this.mBlockBuffer, 0, end);\n }\n }\n }\n }\n }\n if (!this.mbCanReadMoreData && !this.mbCheckSumRead && !this.mbNoWrap) {\n this.skipToBoundary();\n var checkSum = this.readInt32();\n //Debug.Assert( checkSum == mCheckSum, \"\" );\n if (checkSum !== this.mCheckSum) {\n throw new DOMException('Checksum check failed.');\n }\n this.mbCheckSumRead = true;\n }\n return initialLength - length;\n };\n /// \n /// Reads array of bytes.\n /// \n /// Output buffer.\n /// Offset in output buffer.\n /// Length of the data to be read.\n /// Count of bytes actually read to the buffer.\n CompressedStreamReader.prototype.readPackedBytes = function (buffer, offset, length) {\n if (buffer == null) {\n throw new DOMException('buffer');\n }\n if (offset < 0 || offset > buffer.length - 1) {\n throw new DOMException('offset\", \"Offset can not be less than zero or greater than buffer length - 1.');\n }\n if (length < 0) {\n throw new DOMException('length\", \"Length can not be less than zero.');\n }\n if (length > buffer.length - offset) {\n throw new DOMException('length\", \"Length is too large.');\n }\n if ((this.mBufferedBits & 7) !== 0) {\n throw new DOMException('Reading of unalligned data is not supported.');\n }\n if (length === 0) {\n return 0;\n }\n var result = 0;\n while (this.mBufferedBits > 0 && length > 0) {\n buffer[offset++] = (this.mBuffer);\n this.mBufferedBits -= 8;\n this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> 8);\n length--;\n result++;\n }\n if (length > 0) {\n //TODO: Fix this.\n result += this.mInputStream.read(buffer, offset, length);\n }\n return result;\n };\n /// \n /// TODO: place correct comment here\n /// \n /// \n /// TODO: place correct comment here\n /// \n CompressedStreamReader.prototype.readInt32 = function () {\n var result = this.readBits(8) << 24;\n result |= this.readBits(8) << 16;\n result |= this.readBits(8) << 8;\n result |= this.readBits(8);\n return result;\n };\n /// \n /// Updates checksum by calculating checksum of the\n /// given buffer and adding it to current value.\n /// \n /// Data byte array.\n /// Offset in the buffer.\n /// Length of data to be used from the stream.\n CompressedStreamReader.prototype.checksumUpdate = function (buffer, offset, length) {\n ChecksumCalculator.ChecksumUpdate(this.mCheckSum, buffer, offset, length);\n };\n CompressedStreamReader.DEF_REVERSE_BITS = new Uint8Array([0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]);\n /// \n /// Minimum count of repetions.\n /// \n CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS = [3, 3, 11];\n /// \n /// Bits, that responds for different repetion modes.\n /// \n CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_BITS = [2, 3, 7];\n /// \n /// Length bases.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_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\n ];\n /// \n /// Length extended bits count.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION = [\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0\n ];\n /// \n /// Distance bases.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_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\n ];\n /// \n /// Distance extanded bits count.\n /// \n CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION = [\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n 12, 12, 13, 13\n ];\n return CompressedStreamReader;\n}());\nexport { CompressedStreamReader };\nvar Stream = /** @class */ (function () {\n function Stream(input) {\n this.position = 0;\n this.inputStream = new Uint8Array(input.buffer);\n }\n Object.defineProperty(Stream.prototype, \"length\", {\n get: function () {\n return this.inputStream.buffer.byteLength;\n },\n enumerable: true,\n configurable: true\n });\n Stream.prototype.read = function (buffer, start, length) {\n var temp = new Uint8Array(this.inputStream.buffer, this.position + start);\n var data = temp.subarray(0, length);\n buffer.set(data, 0);\n this.position += data.byteLength;\n return data.byteLength;\n };\n Stream.prototype.readByte = function () {\n return this.inputStream[this.position++];\n };\n Stream.prototype.write = function (inputBuffer, offset, count) {\n Utils.arrayCopy(inputBuffer, 0, this.inputStream, this.position + offset, count);\n // this.inputStream = new Uint8Array(this.inputStream.buffer, this.position + offset);\n // this.inputStream.set(inputBuffer, offset);\n this.position += count;\n };\n Stream.prototype.toByteArray = function () {\n return new Uint8Array(this.inputStream.buffer);\n };\n return Stream;\n}());\nexport { Stream };\n/* eslint-enable */ \n","/**\n * Encoding class: Contains the details about encoding type, whether to write a Unicode byte order mark (BOM).\n * ```typescript\n * let encoding : Encoding = new Encoding();\n * encoding.type = 'Utf8';\n * encoding.getBytes('Encoding', 0, 5);\n * ```\n */\nvar Encoding = /** @class */ (function () {\n /**\n * Initializes a new instance of the Encoding class. A parameter specifies whether to write a Unicode byte order mark\n * @param {boolean} includeBom?-true to specify that a Unicode byte order mark is written; otherwise, false.\n */\n function Encoding(includeBom) {\n this.emitBOM = true;\n this.encodingType = 'Ansi';\n this.initBOM(includeBom);\n }\n Object.defineProperty(Encoding.prototype, \"includeBom\", {\n /**\n * Gets a value indicating whether to write a Unicode byte order mark\n * @returns boolean- true to specify that a Unicode byte order mark is written; otherwise, false\n */\n get: function () {\n return this.emitBOM;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Encoding.prototype, \"type\", {\n /**\n * Gets the encoding type.\n * @returns EncodingType\n */\n get: function () {\n return this.encodingType;\n },\n /**\n * Sets the encoding type.\n * @param {EncodingType} value\n */\n set: function (value) {\n this.encodingType = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Initialize the includeBom to emit BOM or Not\n * @param {boolean} includeBom\n */\n Encoding.prototype.initBOM = function (includeBom) {\n if (includeBom === undefined || includeBom === null) {\n this.emitBOM = true;\n }\n else {\n this.emitBOM = includeBom;\n }\n };\n /**\n * Calculates the number of bytes produced by encoding the characters in the specified string\n * @param {string} chars - The string containing the set of characters to encode\n * @returns {number} - The number of bytes produced by encoding the specified characters\n */\n Encoding.prototype.getByteCount = function (chars) {\n var byteCount = 0;\n validateNullOrUndefined(chars, 'string');\n if (chars === '') {\n var byte = this.utf8Len(chars.charCodeAt(0));\n return byte;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n return this.getByteCountInternal(chars, 0, chars.length);\n };\n /**\n * Return the Byte of character\n * @param {number} codePoint\n * @returns {number}\n */\n Encoding.prototype.utf8Len = function (codePoint) {\n var bytes = codePoint <= 0x7F ? 1 :\n codePoint <= 0x7FF ? 2 :\n codePoint <= 0xFFFF ? 3 :\n codePoint <= 0x1FFFFF ? 4 : 0;\n return bytes;\n };\n /**\n * for 4 byte character return surrogate pair true, otherwise false\n * @param {number} codeUnit\n * @returns {boolean}\n */\n Encoding.prototype.isHighSurrogate = function (codeUnit) {\n return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;\n };\n /**\n * for 4byte character generate the surrogate pair\n * @param {number} highCodeUnit\n * @param {number} lowCodeUnit\n */\n Encoding.prototype.toCodepoint = function (highCodeUnit, lowCodeUnit) {\n highCodeUnit = (0x3FF & highCodeUnit) << 10;\n var u = highCodeUnit | (0x3FF & lowCodeUnit);\n return u + 0x10000;\n };\n /**\n * private method to get the byte count for specific charindex and count\n * @param {string} chars\n * @param {number} charIndex\n * @param {number} charCount\n */\n Encoding.prototype.getByteCountInternal = function (chars, charIndex, charCount) {\n var byteCount = 0;\n if (this.encodingType === 'Utf8' || this.encodingType === 'Unicode') {\n var isUtf8 = this.encodingType === 'Utf8';\n for (var i = 0; i < charCount; i++) {\n var charCode = chars.charCodeAt(isUtf8 ? charIndex : charIndex++);\n if (this.isHighSurrogate(charCode)) {\n if (isUtf8) {\n var high = charCode;\n var low = chars.charCodeAt(++charIndex);\n byteCount += this.utf8Len(this.toCodepoint(high, low));\n }\n else {\n byteCount += 4;\n ++i;\n }\n }\n else {\n if (isUtf8) {\n byteCount += this.utf8Len(charCode);\n }\n else {\n byteCount += 2;\n }\n }\n if (isUtf8) {\n charIndex++;\n }\n }\n return byteCount;\n }\n else {\n byteCount = charCount;\n return byteCount;\n }\n };\n /**\n * Encodes a set of characters from the specified string into the ArrayBuffer.\n * @param {string} s- The string containing the set of characters to encode\n * @param {number} charIndex-The index of the first character to encode.\n * @param {number} charCount- The number of characters to encode.\n * @returns {ArrayBuffer} - The ArrayBuffer that contains the resulting sequence of bytes.\n */\n Encoding.prototype.getBytes = function (s, charIndex, charCount) {\n validateNullOrUndefined(s, 'string');\n validateNullOrUndefined(charIndex, 'charIndex');\n validateNullOrUndefined(charCount, 'charCount');\n if (charIndex < 0 || charCount < 0) {\n throw new RangeError('Argument Out Of Range Exception: charIndex or charCount is less than zero');\n }\n if (s.length - charIndex < charCount) {\n throw new RangeError('Argument Out Of Range Exception: charIndex and charCount do not denote a valid range in string');\n }\n var bytes;\n if (s === '') {\n bytes = new ArrayBuffer(0);\n return bytes;\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var byteCount = this.getByteCountInternal(s, charIndex, charCount);\n switch (this.type) {\n case 'Utf8':\n bytes = this.getBytesOfUtf8Encoding(byteCount, s, charIndex, charCount);\n return bytes;\n case 'Unicode':\n bytes = this.getBytesOfUnicodeEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n default:\n bytes = this.getBytesOfAnsiEncoding(byteCount, s, charIndex, charCount);\n return bytes;\n }\n };\n /**\n * Decodes a sequence of bytes from the specified ArrayBuffer into the string.\n * @param {ArrayBuffer} bytes- The ArrayBuffer containing the sequence of bytes to decode.\n * @param {number} index- The index of the first byte to decode.\n * @param {number} count- The number of bytes to decode.\n * @returns {string} - The string that contains the resulting set of characters.\n */\n Encoding.prototype.getString = function (bytes, index, count) {\n validateNullOrUndefined(bytes, 'bytes');\n validateNullOrUndefined(index, 'index');\n validateNullOrUndefined(count, 'count');\n if (index < 0 || count < 0) {\n throw new RangeError('Argument Out Of Range Exception: index or count is less than zero');\n }\n if (bytes.byteLength - index < count) {\n throw new RangeError('Argument Out Of Range Exception: index and count do not denote a valid range in bytes');\n }\n if (bytes.byteLength === 0 || count === 0) {\n return '';\n }\n if (this.type === null || this.type === undefined) {\n this.type = 'Ansi';\n }\n var out = '';\n var byteCal = new Uint8Array(bytes);\n switch (this.type) {\n case 'Utf8':\n var s = this.getStringOfUtf8Encoding(byteCal, index, count);\n return s;\n case 'Unicode':\n var byteUnicode = new Uint16Array(bytes);\n out = this.getStringofUnicodeEncoding(byteUnicode, index, count);\n return out;\n default:\n var j = index;\n for (var i = 0; i < count; i++) {\n var c = byteCal[j];\n out += String.fromCharCode(c); // 1 byte(ASCII) character \n j++;\n }\n return out;\n }\n };\n Encoding.prototype.getBytesOfAnsiEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var bufview = new Uint8Array(bytes);\n var k = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(charIndex++);\n if (charcode < 0x800) {\n bufview[k] = charcode;\n }\n else {\n bufview[k] = 63; //replacement character '?'\n }\n k++;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUtf8Encoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint = new Uint8Array(bytes);\n var index = charIndex;\n var j = 0;\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(index);\n if (charcode <= 0x7F) { // 1 byte character 2^7\n uint[j] = charcode;\n }\n else if (charcode < 0x800) { // 2 byte character 2^11\n uint[j] = 0xc0 | (charcode >> 6);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else if ((charcode < 0xd800 || charcode >= 0xe000)) { // 3 byte character 2^16 \n uint[j] = 0xe0 | (charcode >> 12);\n uint[++j] = 0x80 | ((charcode >> 6) & 0x3f);\n uint[++j] = 0x80 | (charcode & 0x3f);\n }\n else {\n uint[j] = 0xef;\n uint[++j] = 0xbf;\n uint[++j] = 0xbd; // U+FFFE \"replacement character\"\n }\n ++j;\n ++index;\n }\n return bytes;\n };\n Encoding.prototype.getBytesOfUnicodeEncoding = function (byteCount, s, charIndex, charCount) {\n var bytes = new ArrayBuffer(byteCount);\n var uint16 = new Uint16Array(bytes);\n for (var i = 0; i < charCount; i++) {\n var charcode = s.charCodeAt(i);\n uint16[i] = charcode;\n }\n return bytes;\n };\n Encoding.prototype.getStringOfUtf8Encoding = function (byteCal, index, count) {\n var j = 0;\n var i = index;\n var s = '';\n for (j; j < count; j++) {\n var c = byteCal[i++];\n while (i > byteCal.length) {\n return s;\n }\n if (c > 127) {\n if (c > 191 && c < 224 && i < count) {\n c = (c & 31) << 6 | byteCal[i] & 63;\n }\n else if (c > 223 && c < 240 && i < byteCal.byteLength) {\n c = (c & 15) << 12 | (byteCal[i] & 63) << 6 | byteCal[++i] & 63;\n }\n else if (c > 239 && c < 248 && i < byteCal.byteLength) {\n c = (c & 7) << 18 | (byteCal[i] & 63) << 12 | (byteCal[++i] & 63) << 6 | byteCal[++i] & 63;\n }\n ++i;\n }\n s += String.fromCharCode(c); // 1 byte(ASCII) character \n }\n return s;\n };\n Encoding.prototype.getStringofUnicodeEncoding = function (byteUni, index, count) {\n if (count > byteUni.length) {\n throw new RangeError('ArgumentOutOfRange_Count');\n }\n var byte16 = new Uint16Array(count);\n var out = '';\n for (var i = 0; i < count && i < byteUni.length; i++) {\n byte16[i] = byteUni[index++];\n }\n out = String.fromCharCode.apply(null, byte16);\n return out;\n };\n /**\n * To clear the encoding instance\n * @return {void}\n */\n Encoding.prototype.destroy = function () {\n this.emitBOM = undefined;\n this.encodingType = undefined;\n };\n return Encoding;\n}());\nexport { Encoding };\n/**\n * To check the object is null or undefined and throw error if it is null or undefined\n * @param {Object} value - object to check is null or undefined\n * @return {boolean}\n * @throws {ArgumentException} - if the value is null or undefined\n * @private\n */\nexport function validateNullOrUndefined(value, message) {\n if (value === null || value === undefined) {\n throw new Error('ArgumentException: ' + message + ' cannot be null or undefined');\n }\n}\n","/* eslint-disable */\nimport { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * array literal codes\n */\nvar ARR_LITERAL_CODES = new Int16Array(286);\nvar ARR_LITERAL_LENGTHS = new Uint8Array(286);\nvar ARR_DISTANCE_CODES = new Int16Array(30);\nvar ARR_DISTANCE_LENGTHS = new Uint8Array(30);\n/**\n * represent compression stream writer\n * ```typescript\n * let compressedWriter = new CompressedStreamWriter();\n * let text: string = 'Hello world!!!';\n * compressedWriter.write(text, 0, text.length);\n * compressedWriter.close();\n * ```\n */\nvar CompressedStreamWriter = /** @class */ (function () {\n /**\n * Initializes compressor and writes ZLib header if needed.\n * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n */\n function CompressedStreamWriter(noWrap) {\n this.pendingBuffer = new Uint8Array(1 << 16);\n this.pendingBufLength = 0;\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.currentHash = 0;\n this.matchStart = 0;\n this.matchLength = 0;\n this.matchPrevAvail = false;\n this.blockStart = 0;\n this.stringStart = 0;\n this.lookAhead = 0;\n this.totalBytesIn = 0;\n this.inputOffset = 0;\n this.inputEnd = 0;\n this.windowSize = 1 << 15;\n this.windowMask = this.windowSize - 1;\n this.hashSize = 1 << 15;\n this.hashMask = this.hashSize - 1;\n this.hashShift = Math.floor((15 + 3 - 1) / 3);\n this.maxDist = this.windowSize - 262;\n this.checkSum = 1;\n this.noWrap = false;\n if (!CompressedStreamWriter.isHuffmanTreeInitiated) {\n CompressedStreamWriter.initHuffmanTree();\n CompressedStreamWriter.isHuffmanTreeInitiated = true;\n }\n this.treeLiteral = new CompressorHuffmanTree(this, 286, 257, 15);\n this.treeDistances = new CompressorHuffmanTree(this, 30, 1, 15);\n this.treeCodeLengths = new CompressorHuffmanTree(this, 19, 4, 7);\n this.arrDistances = new Uint16Array((1 << 14));\n this.arrLiterals = new Uint8Array((1 << 14));\n this.stream = [];\n this.dataWindow = new Uint8Array(2 * this.windowSize);\n this.hashHead = new Int16Array(this.hashSize);\n this.hashPrevious = new Int16Array(this.windowSize);\n this.blockStart = this.stringStart = 1;\n this.noWrap = noWrap;\n if (!noWrap) {\n this.writeZLibHeader();\n }\n }\n Object.defineProperty(CompressedStreamWriter.prototype, \"compressedData\", {\n /**\n * get compressed data\n */\n get: function () {\n return this.stream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressedStreamWriter.prototype, \"getCompressedString\", {\n get: function () {\n var compressedString = '';\n if (this.stream !== undefined) {\n for (var i = 0; i < this.stream.length; i++) {\n compressedString += String.fromCharCode.apply(null, this.stream[i]);\n }\n }\n return compressedString;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Compresses data and writes it to the stream.\n * @param {Uint8Array} data - data to compress\n * @param {number} offset - offset in data\n * @param {number} length - length of the data\n * @returns {void}\n */\n CompressedStreamWriter.prototype.write = function (data, offset, length) {\n if (data === undefined || data === null) {\n throw new Error('ArgumentException: data cannot null or undefined');\n }\n var end = offset + length;\n if (0 > offset || offset > end || end > data.length) {\n throw new Error('ArgumentOutOfRangeException: Offset or length is incorrect');\n }\n if (typeof data === 'string') {\n var encode = new Encoding(false);\n encode.type = 'Utf8';\n data = new Uint8Array(encode.getBytes(data, 0, data.length));\n end = offset + data.length;\n }\n this.inputBuffer = data;\n this.inputOffset = offset;\n this.inputEnd = end;\n if (!this.noWrap) {\n this.checkSum = ChecksumCalculator.checksumUpdate(this.checkSum, this.inputBuffer, this.inputOffset, end);\n }\n while (!(this.inputEnd === this.inputOffset) || !(this.pendingBufLength === 0)) {\n this.pendingBufferFlush();\n this.compressData(false);\n }\n };\n /**\n * write ZLib header to the compressed data\n * @return {void}\n */\n CompressedStreamWriter.prototype.writeZLibHeader = function () {\n /* Initialize header.*/\n var headerDate = (8 + (7 << 4)) << 8;\n /* Save compression level.*/\n headerDate |= ((5 >> 2) & 3) << 6;\n /* Align header.*/\n headerDate += 31 - (headerDate % 31);\n /* Write header to stream.*/\n this.pendingBufferWriteShortBytes(headerDate);\n };\n /**\n * Write Most Significant Bytes in to stream\n * @param {number} s - check sum value\n */\n CompressedStreamWriter.prototype.pendingBufferWriteShortBytes = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s >> 8;\n this.pendingBuffer[this.pendingBufLength++] = s;\n };\n CompressedStreamWriter.prototype.compressData = function (finish) {\n var success;\n do {\n this.fillWindow();\n var canFlush = (finish && this.inputEnd === this.inputOffset);\n success = this.compressSlow(canFlush, finish);\n } while (this.pendingBufLength === 0 && success);\n return success;\n };\n CompressedStreamWriter.prototype.compressSlow = function (flush, finish) {\n if (this.lookAhead < 262 && !flush) {\n return false;\n }\n while (this.lookAhead >= 262 || flush) {\n if (this.lookAhead === 0) {\n return this.lookAheadCompleted(finish);\n }\n if (this.stringStart >= 2 * this.windowSize - 262) {\n this.slideWindow();\n }\n var prevMatch = this.matchStart;\n var prevLen = this.matchLength;\n if (this.lookAhead >= 3) {\n this.discardMatch();\n }\n if (prevLen >= 3 && this.matchLength <= prevLen) {\n prevLen = this.matchPreviousBest(prevMatch, prevLen);\n }\n else {\n this.matchPreviousAvailable();\n }\n if (this.bufferPosition >= (1 << 14)) {\n return this.huffmanIsFull(finish);\n }\n }\n return true;\n };\n CompressedStreamWriter.prototype.discardMatch = function () {\n var hashHead = this.insertString();\n if (hashHead !== 0 && this.stringStart - hashHead <= this.maxDist && this.findLongestMatch(hashHead)) {\n if (this.matchLength <= 5 && (this.matchLength === 3 && this.stringStart - this.matchStart > 4096)) {\n this.matchLength = 3 - 1;\n }\n }\n };\n CompressedStreamWriter.prototype.matchPreviousAvailable = function () {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = true;\n this.stringStart++;\n this.lookAhead--;\n };\n CompressedStreamWriter.prototype.matchPreviousBest = function (prevMatch, prevLen) {\n this.huffmanTallyDist(this.stringStart - 1 - prevMatch, prevLen);\n prevLen -= 2;\n do {\n this.stringStart++;\n this.lookAhead--;\n if (this.lookAhead >= 3) {\n this.insertString();\n }\n } while (--prevLen > 0);\n this.stringStart++;\n this.lookAhead--;\n this.matchPrevAvail = false;\n this.matchLength = 3 - 1;\n return prevLen;\n };\n CompressedStreamWriter.prototype.lookAheadCompleted = function (finish) {\n if (this.matchPrevAvail) {\n this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n }\n this.matchPrevAvail = false;\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, this.stringStart - this.blockStart, finish);\n this.blockStart = this.stringStart;\n return false;\n };\n CompressedStreamWriter.prototype.huffmanIsFull = function (finish) {\n var len = this.stringStart - this.blockStart;\n if (this.matchPrevAvail) {\n len--;\n }\n var lastBlock = (finish && this.lookAhead === 0 && !this.matchPrevAvail);\n this.huffmanFlushBlock(this.dataWindow, this.blockStart, len, lastBlock);\n this.blockStart += len;\n return !lastBlock;\n };\n CompressedStreamWriter.prototype.fillWindow = function () {\n if (this.stringStart >= this.windowSize + this.maxDist) {\n this.slideWindow();\n }\n while (this.lookAhead < 262 && this.inputOffset < this.inputEnd) {\n var more = 2 * this.windowSize - this.lookAhead - this.stringStart;\n if (more > this.inputEnd - this.inputOffset) {\n more = this.inputEnd - this.inputOffset;\n }\n this.dataWindow.set(this.inputBuffer.subarray(this.inputOffset, this.inputOffset + more), this.stringStart + this.lookAhead);\n this.inputOffset += more;\n this.totalBytesIn += more;\n this.lookAhead += more;\n }\n if (this.lookAhead >= 3) {\n this.updateHash();\n }\n };\n CompressedStreamWriter.prototype.slideWindow = function () {\n this.dataWindow.set(this.dataWindow.subarray(this.windowSize, this.windowSize + this.windowSize), 0);\n this.matchStart -= this.windowSize;\n this.stringStart -= this.windowSize;\n this.blockStart -= this.windowSize;\n for (var i = 0; i < this.hashSize; ++i) {\n var m = this.hashHead[i] & 0xffff;\n this.hashHead[i] = (((m >= this.windowSize) ? (m - this.windowSize) : 0));\n }\n for (var i = 0; i < this.windowSize; i++) {\n var m = this.hashPrevious[i] & 0xffff;\n this.hashPrevious[i] = ((m >= this.windowSize) ? (m - this.windowSize) : 0);\n }\n };\n CompressedStreamWriter.prototype.insertString = function () {\n var match;\n var hash = ((this.currentHash << this.hashShift) ^ this.dataWindow[this.stringStart + (3 - 1)]) & this.hashMask;\n this.hashPrevious[this.stringStart & this.windowMask] = match = this.hashHead[hash];\n this.hashHead[hash] = this.stringStart;\n this.currentHash = hash;\n return match & 0xffff;\n };\n CompressedStreamWriter.prototype.findLongestMatch = function (curMatch) {\n var chainLen = 4096;\n var niceLen = 258;\n var scan = this.stringStart;\n var match;\n var bestEnd = this.stringStart + this.matchLength;\n var bestLength = Math.max(this.matchLength, 3 - 1);\n var limit = Math.max(this.stringStart - this.maxDist, 0);\n var stringEnd = this.stringStart + 258 - 1;\n var scanEnd1 = this.dataWindow[bestEnd - 1];\n var scanEnd = this.dataWindow[bestEnd];\n var data = this.dataWindow;\n if (bestLength >= 32) {\n chainLen >>= 2;\n }\n if (niceLen > this.lookAhead) {\n niceLen = this.lookAhead;\n }\n do {\n if (data[curMatch + bestLength] !== scanEnd ||\n data[curMatch + bestLength - 1] !== scanEnd1 ||\n data[curMatch] !== data[scan] ||\n data[curMatch + 1] !== data[scan + 1]) {\n continue;\n }\n match = curMatch + 2;\n scan += 2;\n /* tslint:disable */\n while (data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] &&\n data[++scan] === data[++match] && data[++scan] === data[++match] && scan < stringEnd) {\n /* tslint:disable */\n }\n if (scan > bestEnd) {\n this.matchStart = curMatch;\n bestEnd = scan;\n bestLength = scan - this.stringStart;\n if (bestLength >= niceLen) {\n break;\n }\n scanEnd1 = data[bestEnd - 1];\n scanEnd = data[bestEnd];\n }\n scan = this.stringStart;\n } while ((curMatch = (this.hashPrevious[curMatch & this.windowMask] & 0xffff)) > limit && --chainLen !== 0);\n this.matchLength = Math.min(bestLength, this.lookAhead);\n return this.matchLength >= 3;\n };\n CompressedStreamWriter.prototype.updateHash = function () {\n this.currentHash = (this.dataWindow[this.stringStart] << this.hashShift) ^ this.dataWindow[this.stringStart + 1];\n };\n CompressedStreamWriter.prototype.huffmanTallyLit = function (literal) {\n this.arrDistances[this.bufferPosition] = 0;\n this.arrLiterals[this.bufferPosition++] = literal;\n this.treeLiteral.codeFrequencies[literal]++;\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanTallyDist = function (dist, len) {\n this.arrDistances[this.bufferPosition] = dist;\n this.arrLiterals[this.bufferPosition++] = (len - 3);\n var lc = this.huffmanLengthCode(len - 3);\n this.treeLiteral.codeFrequencies[lc]++;\n if (lc >= 265 && lc < 285) {\n this.extraBits += Math.floor((lc - 261) / 4);\n }\n var dc = this.huffmanDistanceCode(dist - 1);\n this.treeDistances.codeFrequencies[dc]++;\n if (dc >= 4) {\n this.extraBits += Math.floor((dc / 2 - 1));\n }\n return this.bufferPosition >= (1 << 14);\n };\n CompressedStreamWriter.prototype.huffmanFlushBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.treeLiteral.codeFrequencies[256]++;\n this.treeLiteral.buildTree();\n this.treeDistances.buildTree();\n this.treeLiteral.calculateBLFreq(this.treeCodeLengths);\n this.treeDistances.calculateBLFreq(this.treeCodeLengths);\n this.treeCodeLengths.buildTree();\n var blTreeCodes = 4;\n for (var i = 18; i > blTreeCodes; i--) {\n if (this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[i]] > 0) {\n blTreeCodes = i + 1;\n }\n }\n var opt_len = 14 + blTreeCodes * 3 + this.treeCodeLengths.getEncodedLength() +\n this.treeLiteral.getEncodedLength() + this.treeDistances.getEncodedLength() + this.extraBits;\n var static_len = this.extraBits;\n for (var i = 0; i < 286; i++) {\n static_len += this.treeLiteral.codeFrequencies[i] * ARR_LITERAL_LENGTHS[i];\n }\n for (var i = 0; i < 30; i++) {\n static_len += this.treeDistances.codeFrequencies[i] * ARR_DISTANCE_LENGTHS[i];\n }\n if (opt_len >= static_len) {\n // Force static trees.\n opt_len = static_len;\n }\n if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) {\n this.huffmanFlushStoredBlock(stored, storedOffset, storedLength, lastBlock);\n }\n else if (opt_len == static_len) {\n // Encode with static tree.\n this.pendingBufferWriteBits((1 << 1) + (lastBlock ? 1 : 0), 3);\n this.treeLiteral.setStaticCodes(ARR_LITERAL_CODES, ARR_LITERAL_LENGTHS);\n this.treeDistances.setStaticCodes(ARR_DISTANCE_CODES, ARR_DISTANCE_LENGTHS);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n else {\n this.pendingBufferWriteBits((2 << 1) + (lastBlock ? 1 : 0), 3);\n this.huffmanSendAllTrees(blTreeCodes);\n this.huffmanCompressBlock();\n this.huffmanReset();\n }\n };\n CompressedStreamWriter.prototype.huffmanFlushStoredBlock = function (stored, storedOffset, storedLength, lastBlock) {\n this.pendingBufferWriteBits((0 << 1) + (lastBlock ? 1 : 0), 3);\n this.pendingBufferAlignToByte();\n this.pendingBufferWriteShort(storedLength);\n this.pendingBufferWriteShort(~storedLength);\n this.pendingBufferWriteByteBlock(stored, storedOffset, storedLength);\n this.huffmanReset();\n };\n CompressedStreamWriter.prototype.huffmanLengthCode = function (len) {\n if (len === 255) {\n return 285;\n }\n var code = 257;\n while (len >= 8) {\n code += 4;\n len >>= 1;\n }\n return code + len;\n };\n CompressedStreamWriter.prototype.huffmanDistanceCode = function (distance) {\n var code = 0;\n while (distance >= 4) {\n code += 2;\n distance >>= 1;\n }\n return code + distance;\n };\n CompressedStreamWriter.prototype.huffmanSendAllTrees = function (blTreeCodes) {\n this.treeCodeLengths.buildCodes();\n this.treeLiteral.buildCodes();\n this.treeDistances.buildCodes();\n this.pendingBufferWriteBits(this.treeLiteral.treeLength - 257, 5);\n this.pendingBufferWriteBits(this.treeDistances.treeLength - 1, 5);\n this.pendingBufferWriteBits(blTreeCodes - 4, 4);\n for (var rank = 0; rank < blTreeCodes; rank++) {\n this.pendingBufferWriteBits(this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[rank]], 3);\n }\n this.treeLiteral.writeTree(this.treeCodeLengths);\n this.treeDistances.writeTree(this.treeCodeLengths);\n };\n CompressedStreamWriter.prototype.huffmanReset = function () {\n this.bufferPosition = 0;\n this.extraBits = 0;\n this.treeLiteral.reset();\n this.treeDistances.reset();\n this.treeCodeLengths.reset();\n };\n CompressedStreamWriter.prototype.huffmanCompressBlock = function () {\n for (var i = 0; i < this.bufferPosition; i++) {\n var literalLen = this.arrLiterals[i] & 255;\n var dist = this.arrDistances[i];\n if (dist-- !== 0) {\n var lc = this.huffmanLengthCode(literalLen);\n this.treeLiteral.writeCodeToStream(lc);\n var bits = Math.floor((lc - 261) / 4);\n if (bits > 0 && bits <= 5) {\n this.pendingBufferWriteBits(literalLen & ((1 << bits) - 1), bits);\n }\n var dc = this.huffmanDistanceCode(dist);\n this.treeDistances.writeCodeToStream(dc);\n bits = Math.floor(dc / 2 - 1);\n if (bits > 0) {\n this.pendingBufferWriteBits(dist & ((1 << bits) - 1), bits);\n }\n }\n else {\n this.treeLiteral.writeCodeToStream(literalLen);\n }\n }\n this.treeLiteral.writeCodeToStream(256);\n };\n /**\n * write bits in to internal buffer\n * @param {number} b - source of bits\n * @param {number} count - count of bits to write\n */\n CompressedStreamWriter.prototype.pendingBufferWriteBits = function (b, count) {\n var uint = new Uint32Array(1);\n uint[0] = this.pendingBufCache | (b << this.pendingBufBitsInCache);\n this.pendingBufCache = uint[0];\n this.pendingBufBitsInCache += count;\n this.pendingBufferFlushBits();\n };\n CompressedStreamWriter.prototype.pendingBufferFlush = function (isClose) {\n this.pendingBufferFlushBits();\n if (this.pendingBufLength > 0) {\n var array = new Uint8Array(this.pendingBufLength);\n array.set(this.pendingBuffer.subarray(0, this.pendingBufLength), 0);\n this.stream.push(array);\n }\n this.pendingBufLength = 0;\n };\n CompressedStreamWriter.prototype.pendingBufferFlushBits = function () {\n var result = 0;\n while (this.pendingBufBitsInCache >= 8 && this.pendingBufLength < (1 << 16)) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n this.pendingBufCache >>= 8;\n this.pendingBufBitsInCache -= 8;\n result++;\n }\n return result;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteByteBlock = function (data, offset, length) {\n var array = data.subarray(offset, offset + length);\n this.pendingBuffer.set(array, this.pendingBufLength);\n this.pendingBufLength += length;\n };\n CompressedStreamWriter.prototype.pendingBufferWriteShort = function (s) {\n this.pendingBuffer[this.pendingBufLength++] = s;\n this.pendingBuffer[this.pendingBufLength++] = (s >> 8);\n };\n CompressedStreamWriter.prototype.pendingBufferAlignToByte = function () {\n if (this.pendingBufBitsInCache > 0) {\n this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n }\n this.pendingBufCache = 0;\n this.pendingBufBitsInCache = 0;\n };\n /**\n * Huffman Tree literal calculation\n * @private\n */\n CompressedStreamWriter.initHuffmanTree = function () {\n var i = 0;\n while (i < 144) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x030 + i) << 8);\n ARR_LITERAL_LENGTHS[i++] = 8;\n }\n while (i < 256) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x190 - 144 + i) << 7);\n ARR_LITERAL_LENGTHS[i++] = 9;\n }\n while (i < 280) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x000 - 256 + i) << 9);\n ARR_LITERAL_LENGTHS[i++] = 7;\n }\n while (i < 286) {\n ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x0c0 - 280 + i) << 8);\n ARR_LITERAL_LENGTHS[i++] = 8;\n }\n for (i = 0; i < 30; i++) {\n ARR_DISTANCE_CODES[i] = CompressorHuffmanTree.bitReverse(i << 11);\n ARR_DISTANCE_LENGTHS[i] = 5;\n }\n };\n /**\n * close the stream and write all pending buffer in to stream\n * @returns {void}\n */\n CompressedStreamWriter.prototype.close = function () {\n do {\n this.pendingBufferFlush(true);\n if (!this.compressData(true)) {\n this.pendingBufferFlush(true);\n this.pendingBufferAlignToByte();\n if (!this.noWrap) {\n this.pendingBufferWriteShortBytes(this.checkSum >> 16);\n this.pendingBufferWriteShortBytes(this.checkSum & 0xffff);\n }\n this.pendingBufferFlush(true);\n }\n } while (!(this.inputEnd === this.inputOffset) ||\n !(this.pendingBufLength === 0));\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n CompressedStreamWriter.prototype.destroy = function () {\n this.stream = [];\n this.stream = undefined;\n this.pendingBuffer = undefined;\n this.treeLiteral = undefined;\n this.treeDistances = undefined;\n this.treeCodeLengths = undefined;\n this.arrLiterals = undefined;\n this.arrDistances = undefined;\n this.hashHead = undefined;\n this.hashPrevious = undefined;\n this.dataWindow = undefined;\n this.inputBuffer = undefined;\n this.pendingBufLength = undefined;\n this.pendingBufCache = undefined;\n this.pendingBufBitsInCache = undefined;\n this.bufferPosition = undefined;\n this.extraBits = undefined;\n this.currentHash = undefined;\n this.matchStart = undefined;\n this.matchLength = undefined;\n this.matchPrevAvail = undefined;\n this.blockStart = undefined;\n this.stringStart = undefined;\n this.lookAhead = undefined;\n this.totalBytesIn = undefined;\n this.inputOffset = undefined;\n this.inputEnd = undefined;\n this.windowSize = undefined;\n this.windowMask = undefined;\n this.hashSize = undefined;\n this.hashMask = undefined;\n this.hashShift = undefined;\n this.maxDist = undefined;\n this.checkSum = undefined;\n this.noWrap = undefined;\n };\n CompressedStreamWriter.isHuffmanTreeInitiated = false;\n return CompressedStreamWriter;\n}());\nexport { CompressedStreamWriter };\n/**\n * represent the Huffman Tree\n */\nvar CompressorHuffmanTree = /** @class */ (function () {\n /**\n * Create new Huffman Tree\n * @param {CompressedStreamWriter} writer instance\n * @param {number} elementCount - element count\n * @param {number} minCodes - minimum count\n * @param {number} maxLength - maximum count\n */\n function CompressorHuffmanTree(writer, elementCount, minCodes, maxLength) {\n this.writer = writer;\n this.codeMinCount = minCodes;\n this.maxLength = maxLength;\n this.codeFrequency = new Uint16Array(elementCount);\n this.lengthCount = new Int32Array(maxLength);\n }\n Object.defineProperty(CompressorHuffmanTree.prototype, \"treeLength\", {\n get: function () {\n return this.codeCount;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeLengths\", {\n get: function () {\n return this.codeLength;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CompressorHuffmanTree.prototype, \"codeFrequencies\", {\n get: function () {\n return this.codeFrequency;\n },\n enumerable: true,\n configurable: true\n });\n CompressorHuffmanTree.prototype.setStaticCodes = function (codes, lengths) {\n var temp = new Int16Array(codes.length);\n temp.set(codes, 0);\n this.codes = temp;\n var lengthTemp = new Uint8Array(lengths.length);\n lengthTemp.set(lengths, 0);\n this.codeLength = lengthTemp;\n };\n /**\n * reset all code data in tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.reset = function () {\n for (var i = 0; i < this.codeFrequency.length; i++) {\n this.codeFrequency[i] = 0;\n }\n this.codes = undefined;\n this.codeLength = undefined;\n };\n /**\n * write code to the compressor output stream\n * @param {number} code - code to be written\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeCodeToStream = function (code) {\n this.writer.pendingBufferWriteBits(this.codes[code] & 0xffff, this.codeLength[code]);\n };\n /**\n * calculate code from their frequencies\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildCodes = function () {\n var nextCode = new Int32Array(this.maxLength);\n this.codes = new Int16Array(this.codeCount);\n var code = 0;\n for (var bitsCount = 0; bitsCount < this.maxLength; bitsCount++) {\n nextCode[bitsCount] = code;\n code += this.lengthCount[bitsCount] << (15 - bitsCount);\n }\n for (var i = 0; i < this.codeCount; i++) {\n var bits = this.codeLength[i];\n if (bits > 0) {\n this.codes[i] = CompressorHuffmanTree.bitReverse(nextCode[bits - 1]);\n nextCode[bits - 1] += 1 << (16 - bits);\n }\n }\n };\n CompressorHuffmanTree.bitReverse = function (value) {\n return (CompressorHuffmanTree.reverseBits[value & 15] << 12\n | CompressorHuffmanTree.reverseBits[(value >> 4) & 15] << 8\n | CompressorHuffmanTree.reverseBits[(value >> 8) & 15] << 4\n | CompressorHuffmanTree.reverseBits[value >> 12]);\n };\n /**\n * calculate length of compressed data\n * @returns {number}\n */\n CompressorHuffmanTree.prototype.getEncodedLength = function () {\n var len = 0;\n for (var i = 0; i < this.codeFrequency.length; i++) {\n len += this.codeFrequency[i] * this.codeLength[i];\n }\n return len;\n };\n /**\n * calculate code frequencies\n * @param {CompressorHuffmanTree} blTree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.calculateBLFreq = function (blTree) {\n var maxCount;\n var minCount;\n var count;\n var curLen = -1;\n var i = 0;\n while (i < this.codeCount) {\n count = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxCount = 138;\n minCount = 3;\n }\n else {\n maxCount = 6;\n minCount = 3;\n if (curLen !== nextLen) {\n blTree.codeFrequency[nextLen]++;\n count = 0;\n }\n }\n curLen = nextLen;\n i++;\n while (i < this.codeCount && curLen === this.codeLength[i]) {\n i++;\n if (++count >= maxCount) {\n break;\n }\n }\n if (count < minCount) {\n blTree.codeFrequency[curLen] += count;\n }\n else if (curLen !== 0) {\n blTree.codeFrequency[16]++;\n }\n else if (count <= 10) {\n blTree.codeFrequency[17]++;\n }\n else {\n blTree.codeFrequency[18]++;\n }\n }\n };\n /**\n * @param {CompressorHuffmanTree} blTree - write tree to output stream\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.writeTree = function (blTree) {\n var maxRepeatCount;\n var minRepeatCount;\n var currentRepeatCount;\n var currentCodeLength = -1;\n var i = 0;\n while (i < this.codeCount) {\n currentRepeatCount = 1;\n var nextLen = this.codeLength[i];\n if (nextLen === 0) {\n maxRepeatCount = 138;\n minRepeatCount = 3;\n }\n else {\n maxRepeatCount = 6;\n minRepeatCount = 3;\n if (currentCodeLength !== nextLen) {\n blTree.writeCodeToStream(nextLen);\n currentRepeatCount = 0;\n }\n }\n currentCodeLength = nextLen;\n i++;\n while (i < this.codeCount && currentCodeLength === this.codeLength[i]) {\n i++;\n if (++currentRepeatCount >= maxRepeatCount) {\n break;\n }\n }\n if (currentRepeatCount < minRepeatCount) {\n while (currentRepeatCount-- > 0) {\n blTree.writeCodeToStream(currentCodeLength);\n }\n }\n else if (currentCodeLength !== 0) {\n blTree.writeCodeToStream(16);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 2);\n }\n else if (currentRepeatCount <= 10) {\n blTree.writeCodeToStream(17);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 3);\n }\n else {\n blTree.writeCodeToStream(18);\n this.writer.pendingBufferWriteBits(currentRepeatCount - 11, 7);\n }\n }\n };\n /**\n * Build huffman tree\n * @returns {void}\n */\n CompressorHuffmanTree.prototype.buildTree = function () {\n var codesCount = this.codeFrequency.length;\n var arrTree = new Int32Array(codesCount);\n var treeLength = 0;\n var maxCount = 0;\n for (var n = 0; n < codesCount; n++) {\n var freq = this.codeFrequency[n];\n if (freq !== 0) {\n var pos = treeLength++;\n var pPos = 0;\n while (pos > 0 && this.codeFrequency[arrTree[pPos = Math.floor((pos - 1) / 2)]] > freq) {\n arrTree[pos] = arrTree[pPos];\n pos = pPos;\n }\n arrTree[pos] = n;\n maxCount = n;\n }\n }\n while (treeLength < 2) {\n arrTree[treeLength++] =\n (maxCount < 2) ? ++maxCount : 0;\n }\n this.codeCount = Math.max(maxCount + 1, this.codeMinCount);\n var leafsCount = treeLength;\n var nodesCount = leafsCount;\n var child = new Int32Array(4 * treeLength - 2);\n var values = new Int32Array(2 * treeLength - 1);\n for (var i = 0; i < treeLength; i++) {\n var node = arrTree[i];\n var iIndex = 2 * i;\n child[iIndex] = node;\n child[iIndex + 1] = -1;\n values[i] = (this.codeFrequency[node] << 8);\n arrTree[i] = i;\n }\n this.constructHuffmanTree(arrTree, treeLength, values, nodesCount, child);\n this.buildLength(child);\n };\n CompressorHuffmanTree.prototype.constructHuffmanTree = function (arrTree, treeLength, values, nodesCount, child) {\n do {\n var first = arrTree[0];\n var last = arrTree[--treeLength];\n var lastVal = values[last];\n var pPos = 0;\n var path = 1;\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n }\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n var second = arrTree[0];\n last = nodesCount++;\n child[2 * last] = first;\n child[2 * last + 1] = second;\n var minDepth = Math.min(values[first] & 0xff, values[second] & 0xff);\n values[last] = lastVal = values[first] + values[second] - minDepth + 1;\n pPos = 0;\n path = 1;\n /* tslint:disable */\n while (path < treeLength) {\n if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n path++;\n }\n arrTree[pPos] = arrTree[path];\n pPos = path;\n path = pPos * 2 + 1;\n } /* tslint:disable */\n while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n arrTree[path] = arrTree[pPos];\n }\n arrTree[path] = last;\n } while (treeLength > 1);\n };\n CompressorHuffmanTree.prototype.buildLength = function (child) {\n this.codeLength = new Uint8Array(this.codeFrequency.length);\n var numNodes = Math.floor(child.length / 2);\n var numLeafs = Math.floor((numNodes + 1) / 2);\n var overflow = 0;\n for (var i = 0; i < this.maxLength; i++) {\n this.lengthCount[i] = 0;\n }\n overflow = this.calculateOptimalCodeLength(child, overflow, numNodes);\n if (overflow === 0) {\n return;\n }\n var iIncreasableLength = this.maxLength - 1;\n do {\n while (this.lengthCount[--iIncreasableLength] === 0) {\n /* tslint:disable */\n }\n do {\n this.lengthCount[iIncreasableLength]--;\n this.lengthCount[++iIncreasableLength]++;\n overflow -= (1 << (this.maxLength - 1 - iIncreasableLength));\n } while (overflow > 0 && iIncreasableLength < this.maxLength - 1);\n } while (overflow > 0);\n this.recreateTree(child, overflow, numLeafs);\n };\n CompressorHuffmanTree.prototype.recreateTree = function (child, overflow, numLeafs) {\n this.lengthCount[this.maxLength - 1] += overflow;\n this.lengthCount[this.maxLength - 2] -= overflow;\n var nodePtr = 2 * numLeafs;\n for (var bits = this.maxLength; bits !== 0; bits--) {\n var n = this.lengthCount[bits - 1];\n while (n > 0) {\n var childPtr = 2 * child[nodePtr++];\n if (child[childPtr + 1] === -1) {\n this.codeLength[child[childPtr]] = bits;\n n--;\n }\n }\n }\n };\n CompressorHuffmanTree.prototype.calculateOptimalCodeLength = function (child, overflow, numNodes) {\n var lengths = new Int32Array(numNodes);\n lengths[numNodes - 1] = 0;\n for (var i = numNodes - 1; i >= 0; i--) {\n var childIndex = 2 * i + 1;\n if (child[childIndex] !== -1) {\n var bitLength = lengths[i] + 1;\n if (bitLength > this.maxLength) {\n bitLength = this.maxLength;\n overflow++;\n }\n lengths[child[childIndex - 1]] = lengths[child[childIndex]] = bitLength;\n }\n else {\n var bitLength = lengths[i];\n this.lengthCount[bitLength - 1]++;\n this.codeLength[child[childIndex - 1]] = lengths[i];\n }\n }\n return overflow;\n };\n CompressorHuffmanTree.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n CompressorHuffmanTree.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n return CompressorHuffmanTree;\n}());\nexport { CompressorHuffmanTree };\n/**\n * Checksum calculator, based on Adler32 algorithm.\n */\nvar ChecksumCalculator = /** @class */ (function () {\n function ChecksumCalculator() {\n }\n /**\n * Updates checksum by calculating checksum of the\n * given buffer and adding it to current value.\n * @param {number} checksum - current checksum.\n * @param {Uint8Array} buffer - data byte array.\n * @param {number} offset - offset in the buffer.\n * @param {number} length - length of data to be used from the stream.\n * @returns {number}\n */\n ChecksumCalculator.checksumUpdate = function (checksum, buffer, offset, length) {\n var uint = new Uint32Array(1);\n uint[0] = checksum;\n var checksum_uint = uint[0];\n var s1 = uint[0] = checksum_uint & 65535;\n var s2 = uint[0] = checksum_uint >> ChecksumCalculator.checkSumBitOffset;\n while (length > 0) {\n var steps = Math.min(length, ChecksumCalculator.checksumIterationCount);\n length -= steps;\n while (--steps >= 0) {\n s1 = s1 + (uint[0] = (buffer[offset++] & 255));\n s2 = s2 + s1;\n }\n s1 %= ChecksumCalculator.checksumBase;\n s2 %= ChecksumCalculator.checksumBase;\n }\n checksum_uint = (s2 << ChecksumCalculator.checkSumBitOffset) | s1;\n return checksum_uint;\n };\n ChecksumCalculator.checkSumBitOffset = 16;\n ChecksumCalculator.checksumBase = 65521;\n ChecksumCalculator.checksumIterationCount = 3800;\n return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { CompressedStreamWriter, Stream, CompressedStreamReader } from './index';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { Utils } from './utils';\nvar CRC32TABLE = [];\n/// \n/// Size of the int value in bytes.\n/// \nvar INT_SIZE = 4;\n/// \n/// Size of the short value in bytes.\n/// \nvar SHORT_SIZE = 2;\n/// \n/// End of central directory signature.\n/// \nvar CentralDirectoryEndSignature = 0x06054b50;\n/// \n/// Offset to the size field in the End of central directory record.\n/// \nvar CentralDirSizeOffset = 12;\n/// \n/// Central header signature.\n/// \nvar CentralHeaderSignature = 0x02014b50;\n/// \n/// Buffer size.\n/// \nvar BufferSize = 4096;\n/**\n * class provide compression library\n * ```typescript\n * let archive = new ZipArchive();\n * archive.compressionLevel = 'Normal';\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * archive.addItem(archiveItem);\n * archive.save(fileName.zip);\n * ```\n */\nvar ZipArchive = /** @class */ (function () {\n /**\n * constructor for creating ZipArchive instance\n */\n function ZipArchive() {\n if (CRC32TABLE.length === 0) {\n ZipArchive.initCrc32Table();\n }\n this.files = [];\n this.level = 'Normal';\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(ZipArchive.prototype, \"items\", {\n get: function () {\n return this.files;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"compressionLevel\", {\n /**\n * gets compression level\n */\n get: function () {\n return this.level;\n },\n /**\n * sets compression level\n */\n set: function (level) {\n this.level = level;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchive.prototype, \"length\", {\n /**\n * gets items count\n */\n get: function () {\n if (this.files === undefined) {\n return 0;\n }\n return this.files.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * add new item to archive\n * @param {ZipArchiveItem} item - item to be added\n * @returns {void}\n */\n ZipArchive.prototype.addItem = function (item) {\n if (item === null || item === undefined) {\n throw new Error('ArgumentException: item cannot be null or undefined');\n }\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n if (file.name === item.name) {\n throw new Error('item with same name already exist');\n }\n }\n }\n this.files.push(item);\n };\n /**\n * add new directory to archive\n * @param directoryName directoryName to be created\n * @returns {void}\n */\n ZipArchive.prototype.addDirectory = function (directoryName) {\n if (directoryName === null || directoryName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (directoryName.length === 0) {\n throw new Error('ArgumentException: string cannot be empty');\n }\n if (directoryName.slice(-1) !== '/') {\n directoryName += '/';\n }\n if (this.files.indexOf(directoryName) !== -1) {\n throw new Error('item with same name already exist');\n }\n this.files.push(directoryName);\n };\n /**\n * gets item at specified index\n * @param {number} index - item index\n * @returns {ZipArchiveItem}\n */\n ZipArchive.prototype.getItem = function (index) {\n if (index >= 0 && index < this.files.length) {\n return this.files[index];\n }\n return undefined;\n };\n /**\n * determines whether an element is in the collection\n * @param {string | ZipArchiveItem} item - item to search\n * @returns {boolean}\n */\n ZipArchive.prototype.contains = function (item) {\n return this.files.indexOf(item) !== -1 ? true : false;\n };\n ZipArchive.prototype.open = function (base64String) {\n //return promise = new Promise((resolve: Function, reject: Function) => {\n var zipArchive = this;\n var zipByteArray = Utils.encodedString(base64String);\n if (zipByteArray.length == 0)\n throw new DOMException(\"stream\");\n var stream = new Stream(zipByteArray);\n //let lCentralDirEndPosition = this.findValueFromEnd( arrBuffer, Constants.CentralDirectoryEndSignature, 65557 );\n var lCentralDirEndPosition = ZipArchive.findValueFromEnd(stream, CentralDirectoryEndSignature, 65557);\n if (lCentralDirEndPosition < 0)\n throw new DOMException(\"Can't locate end of central directory record. Possible wrong file format or archive is corrupt.\");\n // Step2. Locate central directory and iterate through all items\n stream.position = lCentralDirEndPosition + CentralDirSizeOffset;\n var iCentralDirSize = ZipArchive.ReadInt32(stream);\n var lCentralDirPosition = lCentralDirEndPosition - iCentralDirSize;\n // verify that this is really central directory\n stream.position = lCentralDirPosition;\n this.readCentralDirectoryDataAndExtractItems(stream);\n //});\n // let zipArchive: ZipArchive = this;\n //let promise: Promise;\n // return promise = new Promise((resolve: Function, reject: Function) => {\n // let reader: FileReader = new FileReader();\n // reader.onload = (e: Event) => {\n // let data: Uint8Array = new Uint8Array((e.target as any).result);\n // let zipReader: ZipReader = new ZipReader(data);\n // zipReader.readEntries().then((entries: ZipEntry[]) => {\n // for (let i: number = 0; i < entries.length; i++) {\n // let entry: ZipEntry = entries[i];\n // let item: ZipArchiveItem = new ZipArchiveItem(zipArchive, entry.fileName);\n // item.data = entry.data;\n // item.compressionMethod = entry.compressionMethod;\n // item.crc = entry.crc;\n // item.lastModified = entry.lastModified;\n // item.lastModifiedDate = entry.lastModifiedDate;\n // item.size = entry.size;\n // item.uncompressedSize = entry.uncompressedSize;\n // zipArchive.addItem(item);\n // }\n // resolve(zipArchive);\n // });\n // };\n // reader.readAsArrayBuffer(fileName);\n // });\n };\n /// \n /// Read central directory record from the stream.\n /// \n /// Stream to read from.\n ZipArchive.prototype.readCentralDirectoryDataAndExtractItems = function (stream) {\n if (stream == null)\n throw new DOMException(\"stream\");\n var itemHelper;\n while (ZipArchive.ReadInt32(stream) == CentralHeaderSignature) {\n itemHelper = new ZipArchiveItemHelper();\n itemHelper.readCentralDirectoryData(stream);\n itemHelper;\n // let item: ZipArchiveItem = new ZipArchiveItem(this);\n // item.ReadCentralDirectoryData(stream);\n // m_arrItems.Add(item);\n }\n itemHelper.readData(stream, itemHelper.checkCrc);\n itemHelper.decompressData();\n this.files.push(new ZipArchiveItem(itemHelper.unCompressedStream.buffer, itemHelper.name));\n };\n /**\n * save archive with specified file name\n * @param {string} fileName save archive with specified file name\n * @returns {Promise}\n */\n ZipArchive.prototype.save = function (fileName) {\n if (fileName === null || fileName === undefined || fileName.length === 0) {\n throw new Error('ArgumentException: fileName cannot be null or undefined');\n }\n if (this.files.length === 0) {\n throw new Error('InvalidOperation');\n }\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal(fileName, false).then(function () {\n resolve(zipArchive);\n });\n });\n };\n /**\n * Save archive as blob\n * @return {Promise}\n */\n ZipArchive.prototype.saveAsBlob = function () {\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n zipArchive.saveInternal('', true).then(function (blob) {\n resolve(blob);\n });\n });\n };\n ZipArchive.prototype.saveInternal = function (fileName, skipFileSave) {\n var _this = this;\n var zipArchive = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n var zipData = [];\n var dirLength = 0;\n for (var i = 0; i < zipArchive.files.length; i++) {\n var compressedObject = _this.getCompressedData(_this.files[i]);\n compressedObject.then(function (data) {\n dirLength = zipArchive.constructZippedObject(zipData, data, dirLength, data.isDirectory);\n if (zipData.length === zipArchive.files.length) {\n var blob = zipArchive.writeZippedContent(fileName, zipData, dirLength, skipFileSave);\n resolve(blob);\n }\n });\n }\n });\n };\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchive.prototype.destroy = function () {\n if (this.files !== undefined && this.files.length > 0) {\n for (var i = 0; i < this.files.length; i++) {\n var file = this.files[i];\n if (file instanceof ZipArchiveItem) {\n file.destroy();\n }\n file = undefined;\n }\n this.files = [];\n }\n this.files = undefined;\n this.level = undefined;\n };\n ZipArchive.prototype.getCompressedData = function (item) {\n var zipArchive = this;\n var promise = new Promise(function (resolve, reject) {\n if (item instanceof ZipArchiveItem) {\n var reader_1 = new FileReader();\n reader_1.onload = function () {\n var input = new Uint8Array(reader_1.result);\n var data = {\n fileName: item.name, crc32Value: 0, compressedData: [],\n compressedSize: undefined, uncompressedDataSize: input.length, compressionType: undefined,\n isDirectory: false\n };\n if (zipArchive.level === 'Normal') {\n zipArchive.compressData(input, data, CRC32TABLE);\n var length_1 = 0;\n for (var i = 0; i < data.compressedData.length; i++) {\n length_1 += data.compressedData[i].length;\n }\n data.compressedSize = length_1;\n data.compressionType = '\\x08\\x00'; //Deflated = 8\n }\n else {\n data.compressedSize = input.length;\n data.crc32Value = zipArchive.calculateCrc32Value(0, input, CRC32TABLE);\n data.compressionType = '\\x00\\x00'; // Stored = 0\n data.compressedData.push(input);\n }\n resolve(data);\n };\n reader_1.readAsArrayBuffer(item.data);\n }\n else {\n var data = {\n fileName: item, crc32Value: 0, compressedData: '', compressedSize: 0, uncompressedDataSize: 0,\n compressionType: '\\x00\\x00', isDirectory: true\n };\n resolve(data);\n }\n });\n return promise;\n };\n ZipArchive.prototype.compressData = function (input, data, crc32Table) {\n var compressor = new CompressedStreamWriter(true);\n var currentIndex = 0;\n var nextIndex = 0;\n do {\n if (currentIndex >= input.length) {\n compressor.close();\n break;\n }\n nextIndex = Math.min(input.length, currentIndex + 16384);\n var subArray = input.subarray(currentIndex, nextIndex);\n data.crc32Value = this.calculateCrc32Value(data.crc32Value, subArray, crc32Table);\n compressor.write(subArray, 0, nextIndex - currentIndex);\n currentIndex = nextIndex;\n } while (currentIndex <= input.length);\n data.compressedData = compressor.compressedData;\n compressor.destroy();\n };\n ZipArchive.prototype.constructZippedObject = function (zipParts, data, dirLength, isDirectory) {\n var extFileAttr = 0;\n var date = new Date();\n if (isDirectory) {\n extFileAttr = extFileAttr | 0x00010; // directory flag\n }\n extFileAttr = extFileAttr | (0 & 0x3F);\n var header = this.writeHeader(data, date);\n var localHeader = 'PK\\x03\\x04' + header + data.fileName;\n var centralDir = this.writeCentralDirectory(data, header, dirLength, extFileAttr);\n zipParts.push({ localHeader: localHeader, centralDir: centralDir, compressedData: data });\n return dirLength + localHeader.length + data.compressedSize;\n };\n ZipArchive.prototype.writeHeader = function (data, date) {\n var zipHeader = '';\n zipHeader += '\\x0A\\x00' + '\\x00\\x00'; // version needed to extract & general purpose bit flag\n zipHeader += data.compressionType; // compression method Deflate=8,Stored=0\n zipHeader += this.getBytes(this.getModifiedTime(date), 2); // last modified Time\n zipHeader += this.getBytes(this.getModifiedDate(date), 2); // last modified date\n zipHeader += this.getBytes(data.crc32Value, 4); // crc-32 value\n zipHeader += this.getBytes(data.compressedSize, 4); // compressed file size\n zipHeader += this.getBytes(data.uncompressedDataSize, 4); // uncompressed file size\n zipHeader += this.getBytes(data.fileName.length, 2); // file name length\n zipHeader += this.getBytes(0, 2); // extra field length\n return zipHeader;\n };\n ZipArchive.prototype.writeZippedContent = function (fileName, zipData, localDirLen, skipFileSave) {\n var cenDirLen = 0;\n var buffer = [];\n for (var i = 0; i < zipData.length; i++) {\n var item = zipData[i];\n cenDirLen += item.centralDir.length;\n buffer.push(this.getArrayBuffer(item.localHeader));\n while (item.compressedData.compressedData.length) {\n buffer.push(item.compressedData.compressedData.shift().buffer);\n }\n }\n for (var i = 0; i < zipData.length; i++) {\n buffer.push(this.getArrayBuffer(zipData[i].centralDir));\n }\n buffer.push(this.getArrayBuffer(this.writeFooter(zipData, cenDirLen, localDirLen)));\n var blob = new Blob(buffer, { type: 'application/zip' });\n if (!skipFileSave) {\n Save.save(fileName, blob);\n }\n return blob;\n };\n ZipArchive.prototype.writeCentralDirectory = function (data, localHeader, offset, externalFileAttribute) {\n var directoryHeader = 'PK\\x01\\x02' +\n this.getBytes(0x0014, 2) + localHeader + // inherit from file header\n this.getBytes(0, 2) + // comment length\n '\\x00\\x00' + '\\x00\\x00' + // internal file attributes \n this.getBytes(externalFileAttribute, 4) + // external file attributes\n this.getBytes(offset, 4) + // local fileHeader relative offset\n data.fileName;\n return directoryHeader;\n };\n ZipArchive.prototype.writeFooter = function (zipData, centralLength, localLength) {\n var dirEnd = 'PK\\x05\\x06' + '\\x00\\x00' + '\\x00\\x00' +\n this.getBytes(zipData.length, 2) + this.getBytes(zipData.length, 2) +\n this.getBytes(centralLength, 4) + this.getBytes(localLength, 4) +\n this.getBytes(0, 2);\n return dirEnd;\n };\n ZipArchive.prototype.getArrayBuffer = function (input) {\n var a = new Uint8Array(input.length);\n for (var j = 0; j < input.length; ++j) {\n a[j] = input.charCodeAt(j) & 0xFF;\n }\n return a.buffer;\n };\n ZipArchive.prototype.getBytes = function (value, offset) {\n var bytes = '';\n for (var i = 0; i < offset; i++) {\n bytes += String.fromCharCode(value & 0xff);\n value = value >>> 8;\n }\n return bytes;\n };\n ZipArchive.prototype.getModifiedTime = function (date) {\n var modTime = date.getHours();\n modTime = modTime << 6;\n modTime = modTime | date.getMinutes();\n modTime = modTime << 5;\n return modTime = modTime | date.getSeconds() / 2;\n };\n ZipArchive.prototype.getModifiedDate = function (date) {\n var modiDate = date.getFullYear() - 1980;\n modiDate = modiDate << 4;\n modiDate = modiDate | (date.getMonth() + 1);\n modiDate = modiDate << 5;\n return modiDate = modiDate | date.getDate();\n };\n ZipArchive.prototype.calculateCrc32Value = function (crc32Value, input, crc32Table) {\n crc32Value ^= -1;\n for (var i = 0; i < input.length; i++) {\n crc32Value = (crc32Value >>> 8) ^ crc32Table[(crc32Value ^ input[i]) & 0xFF];\n }\n return (crc32Value ^ (-1));\n };\n /**\n * construct cyclic redundancy code table\n * @private\n */\n ZipArchive.initCrc32Table = function () {\n var i;\n for (var j = 0; j < 256; j++) {\n i = j;\n for (var k = 0; k < 8; k++) {\n i = ((i & 1) ? (0xEDB88320 ^ (i >>> 1)) : (i >>> 1));\n }\n CRC32TABLE[j] = i;\n }\n };\n ZipArchive.findValueFromEnd = function (stream, value, maxCount) {\n if (stream == null)\n throw new DOMException(\"stream\");\n // if( !stream.CanSeek || !stream.CanRead )\n // throw new ArgumentOutOfRangeException( \"We need to have seekable and readable stream.\" );\n // read last 4 bytes and compare with required value\n var lStreamSize = stream.inputStream.buffer.byteLength;\n if (lStreamSize < 4)\n return -1;\n var arrBuffer = new Uint8Array(4);\n var lLastPos = Math.max(0, lStreamSize - maxCount);\n var lCurrentPosition = lStreamSize - 1 - INT_SIZE;\n stream.position = lCurrentPosition;\n stream.read(arrBuffer, 0, INT_SIZE);\n var uiCurValue = arrBuffer[0];\n var bFound = (uiCurValue == value);\n if (!bFound) {\n while (lCurrentPosition > lLastPos) {\n // remove unnecessary byte and replace it with new value.\n uiCurValue <<= 8;\n lCurrentPosition--;\n stream.position = lCurrentPosition;\n uiCurValue += stream.readByte();\n if (uiCurValue == value) {\n bFound = true;\n break;\n }\n }\n }\n return bFound ? lCurrentPosition : -1;\n };\n /// \n /// Extracts Int32 value from the stream.\n /// \n /// Stream to read data from.\n /// Extracted value.\n ZipArchive.ReadInt32 = function (stream) {\n var buffer = new Uint8Array(INT_SIZE);\n if (stream.read(buffer, 0, INT_SIZE) != INT_SIZE) {\n throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n }\n return Utils.bitConverterToInt32(buffer, 0);\n };\n /// \n /// Extracts Int16 value from the stream.\n /// \n /// Stream to read data from.\n /// Extracted value.\n ZipArchive.ReadInt16 = function (stream) {\n var buffer = new Uint8Array(SHORT_SIZE);\n if (stream.read(buffer, 0, SHORT_SIZE) != SHORT_SIZE) {\n throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n }\n return Utils.bitConverterToInt16(buffer, 0);\n };\n /// \n /// Extracts unsigned Int16 value from the stream.\n /// \n /// Stream to read data from.\n /// Extracted value.\n ZipArchive.ReadUInt16 = function (stream) {\n {\n var buffer = new Uint8Array(SHORT_SIZE);\n if (stream.read(buffer, 0, SHORT_SIZE) != SHORT_SIZE) {\n throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n }\n return Utils.bitConverterToInt16(buffer, 0);\n }\n };\n return ZipArchive;\n}());\nexport { ZipArchive };\nvar ZipArchiveItemHelper = /** @class */ (function () {\n function ZipArchiveItemHelper() {\n /// \n /// Zip header signature.\n /// \n this.headerSignature = 0x04034b50;\n /// \n /// Indicates whether we should check Crc value when reading item's data. Check\n /// is performed when user gets access to decompressed data for the first time.\n /// \n this.checkCrc = true;\n /// \n /// Crc.\n /// \n this.crc32 = 0;\n }\n /// \n /// Read data from the stream based on the central directory.\n /// \n /// Stream to read data from, stream.Position must point at just after correct file header.\n ZipArchiveItemHelper.prototype.readCentralDirectoryData = function (stream) {\n // on the current moment we ignore \"version made by\" and \"version needed to extract\" fields.\n stream.position += 4;\n this.options = ZipArchive.ReadInt16(stream);\n this.compressionMethod = ZipArchive.ReadInt16(stream);\n this.checkCrc = (this.compressionMethod != 99); //COmpression.Defalte != SecurityConstants.AES\n //m_bCompressed = true;\n // on the current moment we ignore \"last mod file time\" and \"last mod file date\" fields.\n var lastModified = ZipArchive.ReadInt32(stream);\n //LastModified = ConvertToDateTime(lastModified);\n this.crc32 = Utils.bitConverterToUInt32(ZipArchive.ReadInt32(stream));\n this.compressedSize = ZipArchive.ReadInt32(stream);\n this.originalSize = ZipArchive.ReadInt32(stream);\n var iFileNameLength = ZipArchive.ReadInt16(stream);\n var iExtraFieldLenth = ZipArchive.ReadInt16(stream);\n var iCommentLength = ZipArchive.ReadInt16(stream);\n // on the current moment we ignore and \"disk number start\" (2 bytes),\n // \"internal file attributes\" (2 bytes).\n stream.position += 4;\n this.externalAttributes = ZipArchive.ReadInt32(stream);\n this.localHeaderOffset = ZipArchive.ReadInt32(stream);\n var arrBuffer = new Uint8Array(iFileNameLength);\n stream.read(arrBuffer, 0, iFileNameLength);\n var m_strItemName = Utils.byteToString(arrBuffer);\n m_strItemName = m_strItemName.replace(\"\\\\\", \"/\");\n this.name = m_strItemName;\n stream.position += iExtraFieldLenth + iCommentLength;\n if (this.options != 0)\n this.options = 0;\n };\n /// \n /// Reads zipped data from the stream.\n /// \n /// Stream to read data from.\n /// Indicates whether we should check crc value after data decompression.\n ZipArchiveItemHelper.prototype.readData = function (stream, checkCrc) {\n if (stream.length == 0)\n throw new DOMException(\"stream\");\n stream.position = this.localHeaderOffset;\n this.checkCrc = checkCrc;\n this.readLocalHeader(stream);\n this.readCompressedData(stream);\n };\n ZipArchiveItemHelper.prototype.decompressData = function () {\n if (this.compressionMethod == 8) {\n if (this.originalSize > 0) {\n this.decompressDataOld();\n }\n }\n };\n ZipArchiveItemHelper.prototype.decompressDataOld = function () {\n var reader = new CompressedStreamReader(this.compressedStream, true);\n var decompressedData;\n if (this.originalSize > 0)\n decompressedData = new Stream(new Uint8Array(this.originalSize));\n var arrBuffer = new Uint8Array(BufferSize);\n var iReadBytes;\n var past = new Uint8Array(0);\n while ((iReadBytes = reader.read(arrBuffer, 0, BufferSize)) > 0) {\n // past = new Uint8Array(decompressedData.length);\n // let currentBlock: Uint8Array = arrBuffer.subarray(0, iReadBytes);\n decompressedData.write(arrBuffer.subarray(0, iReadBytes), 0, iReadBytes);\n }\n this.unCompressedStream = decompressedData.toByteArray();\n // this.originalSize = decompressedData.Length;\n // m_bControlStream = true;\n // m_streamData = decompressedData;\n // decompressedData.SetLength( m_lOriginalSize );\n // decompressedData.Capacity = ( int )m_lOriginalSize;\n if (this.checkCrc) {\n //TODO: fix this\n //CheckCrc(decompressedData.ToArray());\n }\n //m_streamData.Position = 0;\n };\n /// \n /// Extracts local header from the stream.\n /// \n /// Stream to read data from.\n ZipArchiveItemHelper.prototype.readLocalHeader = function (stream) {\n if (stream.length == 0)\n throw new DOMException(\"stream\");\n if (ZipArchive.ReadInt32(stream) != this.headerSignature)\n throw new DOMException(\"Can't find local header signature - wrong file format or file is corrupt.\");\n // TODO: it is good to verify data read from the central directory record,\n // but on the current moment we simply skip it.\n stream.position += 22;\n var iNameLength = ZipArchive.ReadInt16(stream);\n var iExtraLength = ZipArchive.ReadUInt16(stream);\n if (this.compressionMethod == 99) //SecurityConstants.AES\n {\n // stream.Position += iNameLength + 8;\n // m_archive.EncryptionAlgorithm = (EncryptionAlgorithm)stream.ReadByte();\n // m_actualCompression = new byte[2];\n // stream.Read(m_actualCompression, 0, 2);\n }\n else if (iExtraLength > 2) {\n stream.position += iNameLength;\n var headerVal = ZipArchive.ReadInt16(stream);\n if (headerVal == 0x0017) //PKZipEncryptionHeader\n throw new DOMException(\"UnSupported\");\n else\n stream.position += iExtraLength - 2;\n }\n else\n stream.position += iNameLength + iExtraLength;\n };\n /// \n /// Extracts compressed data from the stream.\n /// \n /// Stream to read data from.\n ZipArchiveItemHelper.prototype.readCompressedData = function (stream) {\n var dataStream;\n if (this.compressedSize > 0) {\n var iBytesLeft = this.compressedSize;\n dataStream = new Stream(new Uint8Array(iBytesLeft));\n var arrBuffer = new Uint8Array(BufferSize);\n while (iBytesLeft > 0) {\n var iBytesToRead = Math.min(iBytesLeft, BufferSize);\n if (stream.read(arrBuffer, 0, iBytesToRead) != iBytesToRead)\n throw new DOMException(\"End of file reached - wrong file format or file is corrupt.\");\n dataStream.write(arrBuffer.subarray(0, iBytesToRead), 0, iBytesToRead);\n iBytesLeft -= iBytesToRead;\n }\n // if(m_archive.Password != null)\n // {\n // byte[] dataBuffer = new byte[dataStream.Length];\n // dataBuffer = dataStream.ToArray();\n // dataStream=new MemoryStream( Decrypt(dataBuffer));\n // }\n this.compressedStream = new Uint8Array(dataStream.inputStream);\n // m_bControlStream = true;\n }\n else if (this.compressedSize < 0) //If compression size is negative, then read until the next header signature reached.\n {\n // MemoryStream dataStream = new MemoryStream();\n // int bt = 0;\n // bool proceed=true;\n // while (proceed)\n // {\n // if ((bt = stream.ReadByte()) == Constants.HeaderSignatureStartByteValue)\n // {\n // stream.Position -= 1;\n // int headerSignature = ZipArchive.ReadInt32(stream);\n // if (headerSignature==Constants.CentralHeaderSignature || headerSignature==Constants.CentralHeaderSignature)\n // {\n // proceed = false;\n // }\n // stream.Position -= 3;\n // }\n // if (proceed)\n // dataStream.WriteByte((byte)bt);\n // }\n // m_streamData = dataStream;\n // m_lCompressedSize = m_streamData.Length;\n // m_bControlStream = true;\n }\n else if (this.compressedSize == 0) {\n // m_streamData = new MemoryStream();\n }\n };\n return ZipArchiveItemHelper;\n}());\nexport { ZipArchiveItemHelper };\n/**\n * Class represent unique ZipArchive item\n * ```typescript\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * ```\n */\nvar ZipArchiveItem = /** @class */ (function () {\n /**\n * constructor for creating {ZipArchiveItem} instance\n * @param {Blob|ArrayBuffer} data file data\n * @param {itemName} itemName absolute file path\n */\n function ZipArchiveItem(data, itemName) {\n if (data === null || data === undefined) {\n throw new Error('ArgumentException: data cannot be null or undefined');\n }\n if (itemName === null || itemName === undefined) {\n throw new Error('ArgumentException: string cannot be null or undefined');\n }\n if (itemName.length === 0) {\n throw new Error('string cannot be empty');\n }\n this.data = data;\n this.name = itemName;\n }\n Object.defineProperty(ZipArchiveItem.prototype, \"dataStream\", {\n get: function () {\n return this.decompressedStream;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ZipArchiveItem.prototype, \"name\", {\n /**\n * Get the name of archive item\n * @returns string\n */\n get: function () {\n return this.fileName;\n },\n /**\n * Set the name of archive item\n * @param {string} value\n */\n set: function (value) {\n this.fileName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * release allocated un-managed resource\n * @returns {void}\n */\n ZipArchiveItem.prototype.destroy = function () {\n this.fileName = undefined;\n this.data = undefined;\n };\n return ZipArchiveItem;\n}());\nexport { ZipArchiveItem };\n/* eslint-enable */ \n","export var sectionsProperty = ['sections', 'sec'];\nexport var fontSubstitutionTableProperty = ['fontSubstitutionTable', 'fst'];\nexport var characterFormatProperty = ['characterFormat', 'cf'];\nexport var paragraphFormatProperty = ['paragraphFormat', 'pf'];\nexport var listsProperty = ['lists', 'li'];\nexport var abstractListsProperty = ['abstractLists', 'al'];\nexport var backgroundProperty = ['background', 'bg'];\nexport var stylesProperty = ['styles', 'sty'];\nexport var commentsProperty = ['comments', 'cm'];\nexport var revisionsProperty = ['revisions', 'r'];\nexport var customXmlProperty = ['customXml', 'cx'];\nexport var defaultTabWidthProperty = ['defaultTabWidth', 'dtw'];\nexport var formattingProperty = ['formatting', 'fmt'];\nexport var trackChangesProperty = ['trackChanges', 'tc'];\nexport var protectionTypeProperty = ['protectionType', 'pt'];\nexport var enforcementProperty = ['enforcement', 'enf'];\nexport var hashValueProperty = ['hashValue', 'hv'];\nexport var saltValueProperty = ['saltValue', 'sv'];\nexport var cryptProviderTypeProperty = ['cryptProviderType', 'cpt'];\nexport var cryptAlgorithmClassProperty = ['cryptAlgorithmClass', 'cac'];\nexport var cryptAlgorithmTypeProperty = ['cryptAlgorithmType', 'cat'];\nexport var cryptAlgorithmSidProperty = ['cryptAlgorithmSid', 'cas'];\nexport var cryptSpinCountProperty = ['cryptSpinCount', 'csc'];\nexport var doNotUseHTMLParagraphAutoSpacingProperty = ['dontUseHTMLParagraphAutoSpacing', 'dhtml'];\nexport var alignTablesRowByRowProperty = ['alignTablesRowByRow', 'atrr'];\nexport var formFieldShadingProperty = ['formFieldShading', 'ffs'];\nexport var lastParagraphMarkCopiedProperty = ['lastParagraphMarkCopied', 'lpmc'];\nexport var footnotesProperty = ['footnotes', 'fn'];\nexport var endnotesProperty = ['endnotes', 'en'];\nexport var compatibilityModeProperty = ['compatibilityMode', 'comp'];\nexport var themeFontLanguagesProperty = ['themeFontLanguages', 'tfl'];\nexport var themesProperty = ['themes', 'thm'];\nexport var nameProperty = ['name', 'n'];\nexport var basedOnProperty = ['basedOn', 'b'];\nexport var nextProperty = ['next', 'nx'];\nexport var linkProperty = ['link', 'l'];\nexport var localeIdProperty = ['localeId', 'id'];\nexport var localeIdFarEastProperty = ['localeIdFarEast', 'idfe'];\nexport var localeIdBidiProperty = ['localeIdBidi', 'idbi'];\nexport var boldProperty = ['bold', 'b'];\nexport var italicProperty = ['italic', 'i'];\nexport var underlineProperty = ['underline', 'u'];\nexport var baselineAlignmentProperty = ['baselineAlignment', 'ba'];\nexport var strikethroughProperty = ['strikethrough', 'st'];\nexport var highlightColorProperty = ['highlightColor', 'hc'];\nexport var fontSizeProperty = ['fontSize', 'fsz'];\nexport var fontColorProperty = ['fontColor', 'fc'];\nexport var fontFamilyProperty = ['fontFamily', 'ff'];\nexport var styleNameProperty = ['styleName', 'stn'];\nexport var bidiProperty = ['bidi', 'bi'];\nexport var bdoProperty = ['bdo', 'bdo'];\nexport var breakClearTypeProperty = ['breakClearType', 'bct'];\nexport var fontSizeBidiProperty = ['fontSizeBidi', 'fszbi'];\nexport var fontFamilyBidiProperty = ['fontFamilyBidi', 'ffbi'];\nexport var boldBidiProperty = ['boldBidi', 'bbi'];\nexport var italicBidiProperty = ['italicBidi', 'ibi'];\nexport var allCapsProperty = ['allCaps', 'ac'];\nexport var complexScriptProperty = ['complexScript', 'cs'];\nexport var fontFamilyAsciiProperty = ['fontFamilyAscii', 'ffa'];\nexport var fontFamilyFarEastProperty = ['fontFamilyFarEast', 'fffe'];\nexport var fontFamilyNonFarEastProperty = ['fontFamilyNonFarEast', 'ffnfe'];\nexport var revisionIdsProperty = ['revisionIds', 'rids'];\nexport var listIdProperty = ['listId', 'lid'];\nexport var characterSpacingProperty = ['characterSpacing', 'csp'];\nexport var scalingProperty = ['scaling', 'sc'];\nexport var listLevelNumberProperty = ['listLevelNumber', 'lilno'];\nexport var leftIndentProperty = ['leftIndent', 'lin'];\nexport var rightIndentProperty = ['rightIndent', 'rin'];\nexport var firstLineIndentProperty = ['firstLineIndent', 'fin'];\nexport var textAlignmentProperty = ['textAlignment', 'ta'];\nexport var afterSpacingProperty = ['afterSpacing', 'as'];\nexport var beforeSpacingProperty = ['beforeSpacing', 'bs'];\nexport var spaceAfterAutoProperty = ['spaceAfterAuto', 'saa'];\nexport var spaceBeforeAutoProperty = ['spaceBeforeAuto', 'sba'];\nexport var lineSpacingProperty = ['lineSpacing', 'ls'];\nexport var lineSpacingTypeProperty = ['lineSpacingType', 'lst'];\nexport var listFormatProperty = ['listFormat', 'lif'];\nexport var keepWithNextProperty = ['keepWithNext', 'kwn'];\nexport var widowControlProperty = ['widowControl', 'wc'];\nexport var keepLinesTogetherProperty = ['keepLinesTogether', 'klt'];\nexport var outlineLevelProperty = ['outlineLevel', 'ol'];\nexport var contextualSpacingProperty = ['contextualSpacing', 'cs'];\nexport var bordersProperty = ['borders', 'bdrs'];\nexport var tabsProperty = ['tabs', 'tb'];\nexport var headerDistanceProperty = ['headerDistance', 'hd'];\nexport var footerDistanceProperty = ['footerDistance', 'fd'];\nexport var differentFirstPageProperty = ['differentFirstPage', 'dfp'];\nexport var differentOddAndEvenPagesProperty = ['differentOddAndEvenPages', 'doep'];\nexport var pageWidthProperty = ['pageWidth', 'pw'];\nexport var pageHeightProperty = ['pageHeight', 'ph'];\nexport var leftMarginProperty = ['leftMargin', 'lm'];\nexport var rightMarginProperty = ['rightMargin', 'rm'];\nexport var topMarginProperty = ['topMargin', 'tm'];\nexport var bottomMarginProperty = ['bottomMargin', 'bm'];\nexport var restartPageNumberingProperty = ['restartPageNumbering', 'rpn'];\nexport var pageStartingNumberProperty = ['pageStartingNumber', 'psn'];\nexport var endnoteNumberFormatProperty = ['endnoteNumberFormat', 'enf'];\nexport var footNoteNumberFormatProperty = ['footNoteNumberFormat', 'fnf'];\nexport var restartIndexForFootnotesProperty = ['restartIndexForFootnotes', 'rif'];\nexport var restartIndexForEndnotesProperty = ['restartIndexForEndnotes', 'rie'];\nexport var initialFootNoteNumberProperty = ['initialFootNoteNumber', 'ifn'];\nexport var initialEndNoteNumberProperty = ['initialEndNoteNumber', 'ien'];\nexport var pageNumberStyleProperty = ['pageNumberStyle', 'pgns'];\nexport var columnsProperty = ['columns', 'cols'];\nexport var numberOfColumnsProperty = ['numberOfColumns', 'ncols'];\nexport var equalWidthProperty = ['equalWidth', 'eqw'];\nexport var lineBetweenColumnsProperty = ['lineBetweenColumns', 'lbtc'];\nexport var breakCodeProperty = ['breakCode', 'bc'];\nexport var cellWidthProperty = ['cellWidth', 'cw'];\nexport var columnSpanProperty = ['columnSpan', 'colsp'];\nexport var rowSpanProperty = ['rowSpan', 'rwsp'];\nexport var verticalAlignmentProperty = ['verticalAlignment', 'va'];\nexport var allowBreakAcrossPagesProperty = ['allowBreakAcrossPages', 'abrk'];\nexport var isHeaderProperty = ['isHeader', 'hdr'];\nexport var heightTypeProperty = ['heightType', 'ht'];\nexport var beforeWidthProperty = ['beforeWidth', 'bw'];\nexport var afterWidthProperty = ['afterWidth', 'aw'];\nexport var gridBeforeProperty = ['gridBefore', 'gb'];\nexport var gridBeforeWidthProperty = ['gridBeforeWidth', 'gbw'];\nexport var gridBeforeWidthTypeProperty = ['gridBeforeWidthType', 'gbwt'];\nexport var gridAfterProperty = ['gridAfter', 'ga'];\nexport var gridAfterWidthProperty = ['gridAfterWidth', 'gaw'];\nexport var gridAfterWidthTypeProperty = ['gridAfterWidthType', 'gawt'];\nexport var allowAutoFitProperty = ['allowAutoFit', 'auft'];\nexport var cellSpacingProperty = ['cellSpacing', 'csp'];\nexport var shadingProperty = ['shading', 'sd'];\nexport var tableAlignmentProperty = ['tableAlignment', 'ta'];\nexport var preferredWidthProperty = ['preferredWidth', 'pw'];\nexport var preferredWidthTypeProperty = ['preferredWidthType', 'pwt'];\nexport var horizontalPositionAbsProperty = ['horizontalPositionAbs', 'hpa'];\nexport var textureProperty = ['texture', 't'];\nexport var backgroundColorProperty = ['backgroundColor', 'bgc'];\nexport var foregroundColorProperty = ['foregroundColor', 'fgc'];\nexport var shadowProperty = ['shadow', 'sh'];\nexport var hasNoneStyleProperty = ['hasNoneStyle', 'hns'];\nexport var verticalProperty = ['vertical', 'v'];\nexport var horizontalProperty = ['horizontal', 'h'];\nexport var diagonalUpProperty = ['diagonalUp', 'du'];\nexport var diagonalDownProperty = ['diagonalDown', 'dd'];\nexport var lineStyleProperty = ['lineStyle', 'ls'];\nexport var lineWidthProperty = ['lineWidth', 'lw'];\nexport var layoutProperty = ['layout', 'l'];\nexport var dataFormatProperty = ['dataFormat', 'df'];\nexport var yValueProperty = ['yValue', 'y'];\nexport var chartDataProperty = ['chartData', 'chd'];\nexport var categoryXNameProperty = ['categoryXName', 'cx'];\nexport var lineProperty = ['line', 'l'];\nexport var foreColorProperty = ['foreColor', 'fc'];\nexport var patternProperty = ['pattern', 'pt'];\nexport var layoutXProperty = ['layoutX', 'x'];\nexport var layoutYProperty = ['layoutY', 'y'];\nexport var directionProperty = ['direction', 'dir'];\nexport var endStyleProperty = ['endStyle', 'est'];\nexport var numberValueProperty = ['numberValue', 'no'];\nexport var markerStyleProperty = ['markerStyle', 'mst'];\nexport var markerColorProperty = ['markerColor', 'mc'];\nexport var markerSizeProperty = ['markerSize', 'msz'];\nexport var forwardProperty = ['forward', 'fw'];\nexport var backwardProperty = ['backward', 'bw'];\nexport var interceptProperty = ['intercept', 'itr'];\nexport var isDisplayRSquaredProperty = ['isDisplayRSquared', 'idrs'];\nexport var isDisplayEquationProperty = ['isDisplayEquation', 'ideq'];\nexport var seriesNameProperty = ['seriesName', 'sn'];\nexport var dataLabelProperty = ['dataLabel', 'sl'];\nexport var errorBarProperty = ['errorBar', 'eb'];\nexport var seriesFormatProperty = ['seriesFormat', 'sf'];\nexport var trendLinesProperty = ['trendLines', 'tl'];\nexport var dataPointsProperty = ['dataPoints', 'dp'];\nexport var firstSliceAngleProperty = ['firstSliceAngle', 'fsa'];\nexport var holeSizeProperty = ['holeSize', 'hsz'];\nexport var isLegendKeyProperty = ['isLegendKey', 'lk'];\nexport var isBubbleSizeProperty = ['isBubbleSize', 'bsz'];\nexport var isCategoryNameProperty = ['isCategoryName', 'icn'];\nexport var isSeriesNameProperty = ['isSeriesName', 'isn'];\nexport var isValueProperty = ['isValue', 'iv'];\nexport var isPercentageProperty = ['isPercentage', 'ip'];\nexport var isLeaderLinesProperty = ['isLeaderLines', 'il'];\nexport var showSeriesKeysProperty = ['showSeriesKeys', 'sk'];\nexport var hasHorizontalBorderProperty = ['hasHorzBorder', 'hhbdr'];\nexport var hasVerticalBorderProperty = ['hasVertBorder', 'hvbdr'];\nexport var hasBordersProperty = ['hasBorders', 'hbdr'];\nexport var categoryTypeProperty = ['categoryType', 'ct'];\nexport var chartCategoryProperty = ['chartCategory', 'c'];\nexport var chartSeriesProperty = ['chartSeries', 'cs'];\nexport var chartAreaProperty = ['chartArea', 'ca'];\nexport var chartTitleAreaProperty = ['chartTitleArea', 'cta'];\nexport var plotAreaProperty = ['plotArea', 'pa'];\nexport var chartLegendProperty = ['chartLegend', 'cl'];\nexport var chartPrimaryCategoryAxisProperty = ['chartPrimaryCategoryAxis', 'cpca'];\nexport var chartPrimaryValueAxisProperty = ['chartPrimaryValueAxis', 'cpva'];\nexport var chartTitleProperty = ['chartTitle', 'ctt'];\nexport var chartTypeProperty = ['chartType', 'ct'];\nexport var gapWidthProperty = ['gapWidth', 'gw'];\nexport var overlapProperty = ['overlap', 'o'];\nexport var chartDataTableProperty = ['chartDataTable', 'cdt'];\nexport var textProperty = ['text', 'tlp'];\nexport var shapeIdProperty = ['shapeId', 'sid'];\nexport var alternativeTextProperty = ['alternativeText', 'at'];\nexport var visibleProperty = ['visible', 'v'];\nexport var belowTextProperty = ['belowText', 'b'];\nexport var horizontalRuleProperty = ['horizontalRule', 'ihr'];\nexport var widthProperty = ['width', 'w'];\nexport var heightProperty = ['height', 'h'];\nexport var widthScaleProperty = ['widthScale', 'ws'];\nexport var heightScaleProperty = ['heightScale', 'hs'];\nexport var lineFormatProperty = ['lineFormat', 'lf'];\nexport var fillFormatProperty = ['fillFormat', 'ff'];\nexport var textWrappingStyleProperty = ['textWrappingStyle', 'tws'];\nexport var textWrappingTypeProperty = ['textWrappingType', 'twt'];\nexport var verticalRelativePercentProperty = ['verticalRelativePercent', 'vrp'];\nexport var horizontalRelativePercentProperty = ['horizontalRelativePercent', 'hrp'];\nexport var heightRelativePercentProperty = ['heightRelativePercent', 'hrp'];\nexport var widthRelativePercentProperty = ['widthRelativePercent', 'wrp'];\nexport var zOrderPositionProperty = ['zOrderPosition', 'z'];\nexport var layoutInCellProperty = ['layoutInCell', 'lc'];\nexport var lockAnchorProperty = ['lockAnchor', 'la'];\nexport var autoShapeTypeProperty = ['autoShapeType', 'ast'];\nexport var textFrameProperty = ['textFrame', 'tf'];\nexport var colorProperty = ['color', 'c'];\nexport var fillProperty = ['fill', 'f'];\nexport var textVerticalAlignmentProperty = ['textVerticalAlignment', 'tva'];\nexport var imageStringProperty = ['imageString', 'img'];\nexport var metaFileImageStringProperty = ['metaFileImageString', 'mtimg'];\nexport var lengthProperty = ['length', 'l'];\nexport var isInlineImageProperty = ['isInlineImage', 'inimg'];\nexport var isMetaFileProperty = ['isMetaFile', 'imf'];\nexport var topProperty = ['top', 'tp'];\nexport var bottomProperty = ['bottom', 'bt'];\nexport var rightProperty = ['right', 'rg'];\nexport var leftProperty = ['left', 'lt'];\nexport var getImageHeightProperty = ['getimageheight', 'gih'];\nexport var getImageWidthProperty = ['getimagewidth', 'giw'];\nexport var hasFieldEndProperty = ['hasFieldEnd', 'hfe'];\nexport var formFieldDataProperty = ['formFieldData', 'ffd'];\nexport var fieldTypeProperty = ['fieldType', 'ft'];\nexport var isCreatedUsingHtmlSpanTagProperty = ['isCreatedUsingHtmlSpanTag', 'ishst'];\nexport var enabledProperty = ['enabled', 'e'];\nexport var helpTextProperty = ['helpText', 'h'];\nexport var statusTextProperty = ['statusText', 'st'];\nexport var textInputProperty = ['textInput', 'ti'];\nexport var checkBoxProperty = ['checkBox', 'c'];\nexport var dropDownListProperty = ['dropDownList', 'ddl'];\nexport var maxLengthProperty = ['maxLength', 'ml'];\nexport var defaultValueProperty = ['defaultValue', 'dv'];\nexport var formatProperty = ['format', 'f'];\nexport var sizeTypeProperty = ['sizeType', 'szt'];\nexport var sizeProperty = ['size', 'sz'];\nexport var checkedProperty = ['checked', 'chk'];\nexport var dropDownItemsProperty = ['dropDownItems', 'ddi'];\nexport var selectedIndexProperty = ['selectedIndex', 'si'];\nexport var commentIdProperty = ['commentId', 'cid'];\nexport var commentCharacterTypeProperty = ['commentCharacterType', 'cct'];\nexport var authorProperty = ['author', 'a'];\nexport var initialProperty = ['initial', 'i'];\nexport var dateProperty = ['date', 'dt'];\nexport var doneProperty = ['done', 'dn'];\nexport var replyCommentsProperty = ['replyComments', 'rc'];\nexport var revisionTypeProperty = ['revisionType', 'rt'];\nexport var revisionIdProperty = ['revisionId', 'rid'];\nexport var itemIDProperty = ['itemID', 'iid'];\nexport var xmlProperty = ['xml', 'x'];\nexport var footnoteTypeProperty = ['footnoteType', 'fnt'];\nexport var symbolCodeProperty = ['symbolCode', 'sc'];\nexport var symbolFontNameProperty = ['symbolFontName', 'sfn'];\nexport var customMarkerProperty = ['customMarker', 'cm'];\nexport var inlinesProperty = ['inlines', 'i'];\nexport var contentControlPropertiesProperty = ['contentControlProperties', 'ccp'];\nexport var lockContentControlProperty = ['lockContentControl', 'lcc'];\nexport var lockContentsProperty = ['lockContents', 'lc'];\nexport var tagProperty = ['tag', 'tg'];\nexport var titleProperty = ['title', 'tt'];\nexport var hasPlaceHolderTextProperty = ['hasPlaceHolderText', 'hpt'];\nexport var multiLineProperty = ['multiline', 'mul'];\nexport var isTemporaryProperty = ['isTemporary', 'it'];\nexport var dateCalendarTypeProperty = ['dateCalendarType', 'dtct'];\nexport var dateStorageFormatProperty = ['dateStorageFormat', 'dtsf'];\nexport var dateDisplayLocaleProperty = ['dateDisplayLocale', 'dtdl'];\nexport var dateDisplayFormatProperty = ['dateDisplayFormat', 'dtdf'];\nexport var isCheckedProperty = ['isChecked', 'ichk'];\nexport var uncheckedStateProperty = ['uncheckedState', 'uchk'];\nexport var checkedStateProperty = ['checkedState', 'chks'];\nexport var contentControlListItemsProperty = ['contentControlListItems', 'ccli'];\nexport var xmlMappingProperty = ['xmlMapping', 'x'];\nexport var fontProperty = ['font', 'f'];\nexport var valueProperty = ['value', 'v'];\nexport var displayTextProperty = ['displayText', 'dt'];\nexport var isMappedProperty = ['isMapped', 'imap'];\nexport var isWordMlProperty = ['isWordMl', 'iwml'];\nexport var prefixMappingProperty = ['prefixMapping', 'pmap'];\nexport var xPathProperty = ['xPath', 'xp'];\nexport var storeItemIdProperty = ['storeItemId', 'siid'];\nexport var customXmlPartProperty = ['customXmlPart', 'cxp'];\nexport var idProperty = ['id', 'i'];\nexport var cellFormatProperty = ['cellFormat', 'tcpr'];\nexport var rowFormatProperty = ['rowFormat', 'trpr'];\nexport var cellsProperty = ['cells', 'c'];\nexport var rowsProperty = ['rows', 'r'];\nexport var descriptionProperty = ['description', 'desc'];\nexport var wrapTextAroundProperty = ['wrapTextAround', 'wta'];\nexport var isLegalStyleNumberingProperty = ['isLegalStyleNumbering', 'isLgl'];\nexport var positioningProperty = ['positioning', 'p'];\nexport var tableFormatProperty = ['tableFormat', 'tblpr'];\nexport var allowOverlapProperty = ['allowOverlap', 'ao'];\nexport var distanceTopProperty = ['distanceTop', 'dt'];\nexport var distanceRightProperty = ['distanceRight', 'dr'];\nexport var distanceLeftProperty = ['distanceLeft', 'dl'];\nexport var distanceBottomProperty = ['distanceBottom', 'db'];\nexport var verticalOriginProperty = ['verticalOrigin', 'vo'];\nexport var verticalPositionProperty = ['verticalPosition', 'vp'];\nexport var horizontalOriginProperty = ['horizontalOrigin', 'ho'];\nexport var horizontalAlignmentProperty = ['horizontalAlignment', 'ha'];\nexport var horizontalPositionProperty = ['horizontalPosition', 'hp'];\nexport var blocksProperty = ['blocks', 'b'];\nexport var headerProperty = ['header', 'h'];\nexport var footerProperty = ['footer', 'f'];\nexport var evenHeaderProperty = ['evenHeader', 'eh'];\nexport var evenFooterProperty = ['evenFooter', 'ef'];\nexport var firstPageHeaderProperty = ['firstPageHeader', 'fph'];\nexport var firstPageFooterProperty = ['firstPageFooter', 'fpf'];\nexport var headersFootersProperty = ['headersFooters', 'hf'];\nexport var sectionFormatProperty = ['sectionFormat', 'secpr'];\nexport var listLevelPatternProperty = ['listLevelPattern', 'lilp'];\nexport var followCharacterProperty = ['followCharacter', 'fchar'];\nexport var startAtProperty = ['startAt', 'sa'];\nexport var restartLevelProperty = ['restartLevel', 'rl'];\nexport var levelNumberProperty = ['levelNumber', 'lvlno'];\nexport var numberFormatProperty = ['numberFormat', 'nf'];\nexport var paraStyleNameProperty = ['paraStyleName', 'psty'];\nexport var abstractListIdProperty = ['abstractListId', 'alid'];\nexport var nsidProperty = 'nsid';\nexport var levelsProperty = ['levels', 'lvl'];\nexport var overrideListLevelProperty = ['overrideListLevel', 'o'];\nexport var levelOverridesProperty = ['levelOverrides', 'lo'];\nexport var separatorProperty = ['separator', 's'];\nexport var continuationSeparatorProperty = ['continuationSeparator', 'cs'];\nexport var continuationNoticeProperty = ['continuationNotice', 'cn'];\nexport var bookmarkTypeProperty = ['bookmarkType', 'bkt'];\nexport var propertiesProperty = ['properties', 'p'];\nexport var tabJustificationProperty = ['tabJustification', 'tj'];\nexport var positionProperty = ['position', 'p'];\nexport var deletePositionProperty = ['deletePosition', 'dp'];\nexport var leaderProperty = ['leader', 'l'];\nexport var tabLeaderProperty = ['tabLeader', 'tl'];\nexport var editRangeIdProperty = ['editRangeId', 'erid'];\nexport var columnFirstProperty = ['columnFirst', 'cft'];\nexport var columnLastProperty = ['columnLast', 'clt'];\nexport var userProperty = ['user', 'u'];\nexport var groupProperty = ['group', 'g'];\nexport var editableRangeStartProperty = ['editableRangeStart', 'ers'];\nexport var spaceProperty = ['space', 'sp'];\nexport var fontSchemeProperty = ['fontScheme', 'fsc'];\nexport var fontSchemeNameProperty = ['fontSchemeName', 'fscn'];\nexport var majorFontSchemeProperty = ['majorFontScheme', 'majfs'];\nexport var minorFontSchemeProperty = ['minorFontScheme', 'minfs'];\nexport var fontSchemeListProperty = ['fontSchemeList', 'fsl'];\nexport var fontTypefaceProperty = ['fontTypeface', 'ft'];\nexport var typefaceProperty = ['typeface', 't'];\nexport var panoseProperty = ['panose', 'p'];\nexport var typeProperty = ['type', 't'];\nexport var majorUnitProperty = ['majorUnit', 'maju'];\nexport var isAutoMajorProperty = ['isAutoMajor', 'iam'];\nexport var maximumValueProperty = ['maximumValue', 'maxv'];\nexport var minimumValueProperty = ['minimumValue', 'minv'];\nexport var hasMajorGridLinesProperty = ['hasMajorGridLines', 'hmajgl'];\nexport var hasMinorGridLinesProperty = ['hasMinorGridLines', 'hmingl'];\nexport var majorTickMarkProperty = ['majorTickMark', 'majtm'];\nexport var minorTickMarkProperty = ['minorTickMark', 'mintm'];\nexport var tickLabelPositionProperty = ['tickLabelPosition', 'tlp'];\nexport var rgbProperty = ['rgb', 'rgb'];\nexport var appearanceProperty = ['appearance', 'a'];\nexport var lineFormatTypeProperty = ['lineFormatType', 'lft'];\nexport var allowSpaceOfSameStyleInTableProperty = ['allowSpaceOfSameStyleInTable', 'stytbl'];\nexport var weightProperty = ['weight', 'w'];\nexport var inlineFormatProperty = ['inlineFormat', 'inf'];\nexport var fontNameProperty = ['fontName', 'fn'];\nexport var isCompressedProperty = ['isCompressed', 'comp'];\nexport var columnIndexProperty = ['columnIndex', 'ci'];\nexport var imagesProperty = ['images', 'imgs'];\nexport var isAfterParagraphMarkProperty = ['isAfterParagraphMark', 'apm'];\nexport var isAfterCellMarkProperty = ['isAfterCellMark', 'acm'];\nexport var isAfterRowMarkProperty = ['isAfterRowMark', 'arm'];\nexport var gridProperty = ['grid', 'grd'];\nexport var columnCountProperty = ['columnCount', 'colc'];\nexport var isAfterTableMarkProperty = ['isAfterTableMark', 'atm'];\nexport var incrementalOps = ['iOps'];\n","import { isNullOrUndefined, Internationalization, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { ZipArchive } from '@syncfusion/ej2-compression';\nimport { ElementBox, TextElementBox } from '../viewer/page';\nimport { FieldElementBox } from '../viewer/page';\nimport { boldProperty, italicProperty, fontSizeProperty, fontFamilyProperty, underlineProperty, strikethroughProperty, baselineAlignmentProperty, highlightColorProperty, fontColorProperty, styleNameProperty, bidiProperty, bdoProperty, boldBidiProperty, italicBidiProperty, fontSizeBidiProperty, fontFamilyBidiProperty, allCapsProperty, localeIdBidiProperty, localeIdProperty, complexScriptProperty, fontFamilyAsciiProperty, characterSpacingProperty, scalingProperty, fontFamilyFarEastProperty, fontFamilyNonFarEastProperty, bordersProperty, leftIndentProperty, rightIndentProperty, firstLineIndentProperty, textAlignmentProperty, beforeSpacingProperty, afterSpacingProperty, spaceBeforeAutoProperty, spaceAfterAutoProperty, lineSpacingProperty, lineSpacingTypeProperty, outlineLevelProperty, keepLinesTogetherProperty, keepWithNextProperty, contextualSpacingProperty, widowControlProperty, topProperty, leftProperty, rightProperty, bottomProperty, horizontalProperty, verticalProperty, colorProperty, hasNoneStyleProperty, lineStyleProperty, lineWidthProperty, shadowProperty, spaceProperty, inlinesProperty, characterFormatProperty, textProperty, fieldTypeProperty, hasFieldEndProperty } from '../../index';\n/**\n * @private\n */\nvar HelperMethods = /** @class */ (function () {\n function HelperMethods() {\n }\n /**\n * Inserts text at specified index in string.\n *\n * @private\n * @param {string} spanText - Specifies the span text.\n * @param {number} index - Specifies the index\n * @param {string} text - Specifies the text\n * @returns {string} - Returns modified string\n */\n HelperMethods.insert = function (spanText, index, text) {\n if (index >= 0) {\n return [spanText.slice(0, index) + text + spanText.slice(index)].join('');\n }\n else {\n return text + this;\n }\n };\n /**\n * @returns {string} returns a string value\n * @param {string} text takes string as parameter\n * @private\n */\n HelperMethods.replaceSpecialChars = function (text) {\n text = text.replace('^[\\\\s]*', '');\n /* eslint-disable quotes */\n text = text.replace(\"^[#@!~\\\\$%^&\\\\*\\\\(\\\\)\\\\-_\\\\+\\\\.=\\\\{\\\\}\\\\[\\\\]:;,<>\\\\?'\\\\\\\\\\\"\\\\“\\\\”\\\\//0123456789]+\", '');\n text = text.replace(\"[#@!~\\\\$%^&\\\\*\\\\(\\\\)\\\\-_\\\\+\\\\.=\\\\{\\\\}\\\\[\\\\]:;,<>\\\\?'\\\\\\\\\\\"\\\\“\\\\”\\\\//0123456789]+$\", '');\n /* eslint-enable quotes */\n return text;\n };\n /**\n * @returns {any} returns any type\n * @param {string} text gets string as a input\n * @public\n */\n HelperMethods.getSpellCheckData = function (text) {\n text = text.replace('\\r\\n', ' ');\n text = text.replace('\\n', ' ');\n text = text.replace('\\r', ' ');\n text = text.replace('\\v', ' ');\n text = text.replace('\\t', ' ');\n text = text.replace('/', ' ');\n var stringarr = text.split(' ');\n var spellColl = [];\n for (var _i = 0, stringarr_1 = stringarr; _i < stringarr_1.length; _i++) {\n var str = stringarr_1[_i];\n var spellInfo = {};\n spellInfo.Text = this.replaceSpecialChars(str);\n spellInfo.HasSpellError = false;\n spellColl.push(spellInfo);\n }\n return spellColl;\n };\n /**\n * Check given string is a valid either roman or arabic number\n * @private\n * @param {string} input input string value to check if it is a number\n * @returns {boolean} weather given string is a number or not\n */\n HelperMethods.checkTextFormat = function (input) {\n // Regular expression patterns for Roman and Arabic numerals\n var romanPattern = /^(M{0,3})(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/i;\n var arabicPattern = /^[0-9]+$/;\n // Check if the input matches either pattern\n if (romanPattern.test(input) || arabicPattern.test(input)) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * @returns {string}\n * Sanitize the string for xss string content\n * @param {string} value accepts a string value\n * @public\n */\n HelperMethods.sanitizeString = function (value) {\n if (isNullOrUndefined(value)) {\n return '';\n }\n var sanitizedContent = SanitizeHtmlHelper.sanitize(value)\n .replace(/&/g, '&')\n .replace(/ /g, String.fromCharCode(160))\n .replace(/>/g, '>')\n .replace(/</g, '<');\n return sanitizedContent;\n };\n /**\n * @returns {any} returns any type\n * Get the SFDT document from the optimized SFDT.\n * @param {any} json accepts a json file\n * @public\n */\n HelperMethods.getSfdtDocument = function (json) {\n json = (json instanceof Object) ? json : JSON.parse(json);\n if (!isNullOrUndefined(json.sfdt)) {\n var zipArchive = new ZipArchive();\n zipArchive.open(JSON.stringify(json.sfdt));\n var zipItem = zipArchive.items[0];\n var value = new Uint8Array(zipItem.data);\n var str = new TextDecoder('utf-8').decode(value);\n json = JSON.parse(str);\n }\n // json = JSON.parse(this.sanitizeString(JSON.stringify(json)));\n return json;\n };\n /**\n * @returns {number}\n * Generates a unique unique hexadecimal ID.\n * @param {WList[]} lists accepts list\n * @param {WAbstractList[]} abstractLists accepts array of abstractList\n * @public\n */\n HelperMethods.generateUniqueId = function (lists, abstractLists) {\n var isAbstractList = !isNullOrUndefined(abstractLists) ? true : false;\n var randomNumber = Math.floor(Math.random() * 100000000);\n if (isAbstractList) {\n return this.isSameListIDExists(randomNumber, undefined, abstractLists, isAbstractList) ?\n this.generateUniqueId(undefined, abstractLists) : randomNumber;\n }\n else {\n return this.isSameListIDExists(randomNumber, lists) ? this.generateUniqueId(lists) : randomNumber;\n }\n };\n /**\n * @returns {boolean} returns a boolean value\n * @param {number} nsid accepts number as a parameter\n * @param {WList[]} lists accepts an array of type WList\n * @param {WAbstractList[]} abstractLists accepts an array of type WAbstractList\n * @param {boolean} isAbstractList accepts a boolean value\n * @private\n */\n HelperMethods.isSameListIDExists = function (nsid, lists, abstractLists, isAbstractList) {\n if (isAbstractList) {\n for (var i = 0; i < abstractLists.length; i++) {\n var abstractList = abstractLists[parseInt(i.toString(), 10)];\n if (nsid === abstractList.nsid) {\n return true;\n }\n }\n }\n else {\n for (var j = 0; j < lists.length; j++) {\n var list = lists[parseInt(j.toString(), 10)];\n if (nsid === list.nsid) {\n return true;\n }\n }\n }\n return false;\n };\n /* eslint-enable */\n /**\n * Removes text from specified index in string.\n *\n * @private\n * @param {string} text - Specifies the text\n * @param {number} index - Specifies the index\n * @returns {string} - Returns modified string\n */\n HelperMethods.remove = function (text, index) {\n if (index === 0) {\n return text.substring(index + 1, text.length);\n }\n else {\n return text.substring(0, index) + text.substring(index + 1, text.length);\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n HelperMethods.indexOfAny = function (text, wordSplitCharacter) {\n var index = undefined;\n for (var j = 0; j < wordSplitCharacter.length; j++) {\n var temp = text.indexOf(wordSplitCharacter[parseInt(j.toString(), 10)]);\n if (temp !== -1 && isNullOrUndefined(index)) {\n index = temp;\n }\n else if (temp !== -1 && temp < index) {\n index = temp;\n }\n }\n return isNullOrUndefined(index) ? -1 : index;\n };\n HelperMethods.lastIndexOfAny = function (text, wordSplitCharacter) {\n for (var i = text.length - 1; i >= 0; i--) {\n for (var j = 0; j <= wordSplitCharacter.length - 1; j++) {\n if (text[parseInt(i.toString(), 10)] === wordSplitCharacter[parseInt(j.toString(), 10)]) {\n return i;\n }\n }\n }\n return -1;\n };\n /**\n * Convert ARGB to RGB\n * @private\n * @param {string} color accepts a color string\n * @returns {string} returns a string value\n */\n HelperMethods.convertArgbToRgb = function (color) {\n if (color.length >= 8) {\n return color.substr(0, 6);\n }\n return color;\n };\n HelperMethods.convertRgbToHex = function (val) {\n var hex = Number(val).toString(16);\n if (hex.length < 2) {\n hex = '0' + hex;\n }\n return hex;\n };\n // public static convertPointsToCentimetre(val: number): number {\n // return val/28.34644;\n // }\n // public static convertCentimetreToPoints(val: number): number {\n // return val*28.34644;\n // }\n /**\n * @returns {number} returns a number\n * @param {string} input accepts a string value as an input\n * @private\n */\n HelperMethods.getNumberFromString = function (input) {\n var numbers = [];\n var currentNumber = '';\n for (var _i = 0, input_1 = input; _i < input_1.length; _i++) {\n var char = input_1[_i];\n if (/\\d|\\./.test(char)) {\n currentNumber += char;\n }\n else if (currentNumber) {\n numbers.push(parseFloat(currentNumber));\n currentNumber = '';\n }\n }\n if (currentNumber) {\n numbers.push(parseFloat(currentNumber));\n }\n return parseFloat(numbers.join(''));\n };\n HelperMethods.convertHexToRgb = function (colorCode) {\n var r;\n var g;\n var b;\n if (colorCode) {\n colorCode = colorCode.replace(/[^0-9A-‌​F]/gi, ''); // To remove # from color code string.\n var colCodeNo = parseInt(colorCode, 16);\n if (colorCode.length === 8) {\n r = (colCodeNo >> 32) & 255;\n g = (colCodeNo >> 16) & 255;\n b = (colCodeNo >> 8) & 255;\n }\n else if (colorCode.length === 6) {\n r = (colCodeNo >> 16) & 255;\n g = (colCodeNo >> 8) & 255;\n b = colCodeNo & 255;\n }\n return { 'r': r, 'g': g, 'b': b };\n }\n return undefined;\n };\n HelperMethods.addCssStyle = function (css) {\n var style = document.createElement('style');\n if (style.style.cssText) {\n style.style.cssText = css;\n }\n else {\n style.appendChild(document.createTextNode(css));\n }\n document.getElementsByTagName('head')[0].appendChild(style);\n };\n /**\n * @returns {HTMLElement[]} returns an array of HTML elements\n * @param {NodeListOf} nodeList accepts a list of HTML elements\n * @public\n */\n HelperMethods.convertNodeListToArray = function (nodeList) {\n var array = [];\n if (!isNullOrUndefined(nodeList)) {\n for (var i = 0; i < nodeList.length; i++) {\n array.push(nodeList[parseInt(i.toString(), 10)]);\n }\n }\n return array;\n };\n HelperMethods.getHighlightColorCode = function (highlightColor) {\n var color = '#ffffff';\n switch (highlightColor) {\n case 'Yellow':\n color = '#ffff00';\n break;\n case 'BrightGreen':\n color = '#00ff00';\n break;\n case 'Turquoise':\n color = '#00ffff';\n break;\n case 'Pink':\n color = '#ff00ff';\n break;\n case 'Blue':\n color = '#0000ff';\n break;\n case 'Red':\n color = '#ff0000';\n break;\n case 'DarkBlue':\n color = '#000080';\n break;\n case 'Teal':\n color = '#008080';\n break;\n case 'Green':\n color = '#008000';\n break;\n case 'Violet':\n color = '#800080';\n break;\n case 'DarkRed':\n color = '#800000';\n break;\n case 'DarkYellow':\n color = '#808000';\n break;\n case 'Gray50':\n color = '#808080';\n break;\n case 'Gray25':\n color = '#c0c0c0';\n break;\n case 'Black':\n color = '#000000';\n break;\n }\n return color;\n };\n HelperMethods.isVeryDark = function (backColor) {\n var backgroundColor = backColor.substring(1);\n var r = parseInt(backgroundColor.substr(0, 2), 16);\n var g = parseInt(backgroundColor.substr(2, 2), 16);\n var b = parseInt(backgroundColor.substr(4, 2), 16);\n var contrast = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n return contrast <= 60;\n };\n HelperMethods.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n if (color.length > 7) {\n return color.substr(0, 7);\n }\n }\n }\n return color;\n };\n HelperMethods.getTextVerticalAlignment = function (textVerticalAlignment) {\n switch (textVerticalAlignment) {\n case 0:\n return 'Top';\n case 1:\n return 'Center';\n case 2:\n return 'Bottom';\n default:\n return textVerticalAlignment;\n }\n };\n HelperMethods.convertPointToPixel = function (point) {\n point = HelperMethods.round(point, 5);\n var pixel = HelperMethods.round((point * 96 / 72), 5);\n return pixel;\n };\n HelperMethods.convertPixelToPoint = function (pixel) {\n var point = HelperMethods.round((pixel * 72 / 96), 5);\n return point;\n };\n HelperMethods.isLinkedFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n return !isNullOrUndefined(inline.fieldEnd);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n return !isNullOrUndefined(inline.fieldBegin) && !isNullOrUndefined(inline.fieldEnd);\n }\n else {\n return !isNullOrUndefined(inline.fieldBegin);\n }\n };\n /**\n * Removes white space in a string.\n *\n * @private\n * @param {string} text - Specifies text to trim.\n * @returns {string} - Returns modified text.\n */\n HelperMethods.removeSpace = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n for (var i = 0; i < text.length; i++) {\n if (text.charAt(i) === ' ') {\n //replace the space by empty string in string\n text = text.replace(' ', '');\n }\n }\n }\n return text;\n };\n /**\n * Trims white space at start of the string.\n *\n * @private\n * @param {string} text - Specifies text to trim.\n * @returns {string} - Returns modified text.\n */\n HelperMethods.trimStart = function (text) {\n var i = 0;\n for (i; i < text.length; i++) {\n if (text[parseInt(i.toString(), 10)] !== ' ') {\n break;\n }\n }\n return text.substring(i, text.length);\n };\n /**\n * Trims white space at end of the string.\n *\n * @private\n * @param {string} text - Specifies text to trim.\n * @returns {string} - Returns modified text.\n */\n HelperMethods.trimEnd = function (text) {\n var i = text.length - 1;\n for (i; i >= 0; i--) {\n if (text[parseInt(i.toString(), 10)] !== ' ') {\n break;\n }\n }\n return text.substring(0, i + 1);\n };\n /**\n * Checks whether string ends with whitespace.\n * @private\n * @param {string} text - Specifies the text.\n * @returns {boolean} - Returns true if text ends with specified text.\n */\n HelperMethods.endsWith = function (text) {\n if (!isNullOrUndefined(text) && text.length !== 0) {\n return text[text.length - 1] === ' ';\n }\n return false;\n };\n HelperMethods.addSpace = function (length) {\n var str = '';\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n str += ' ';\n }\n }\n return str;\n };\n HelperMethods.getBoolValue = function (value) {\n return value ? 1 : 0;\n };\n HelperMethods.getBoolInfo = function (value, keywordIndex) {\n if (keywordIndex === 1) {\n return this.getBoolValue(value);\n }\n else {\n return value;\n }\n };\n HelperMethods.parseBoolValue = function (value) {\n if (value instanceof String) {\n if (isNullOrUndefined(value) || value === 'f' || value === '0' || value === 'off' || value === 'false') {\n return false;\n }\n else {\n return true;\n }\n }\n /* eslint-disable eqeqeq */\n else {\n if (value == 1) {\n return true;\n }\n else {\n return false;\n }\n }\n };\n /* eslint-enable eqeqeq */\n HelperMethods.getBaselineAlignmentEnumValue = function (baselineAlignment) {\n switch (baselineAlignment) {\n case 'Normal':\n return 0;\n case 'Superscript':\n return 1;\n case 'Subscript':\n return 2;\n }\n };\n HelperMethods.getUnderlineEnumValue = function (underline) {\n switch (underline) {\n case 'None':\n return 0;\n case 'Single':\n return 1;\n case 'Words':\n return 2;\n case 'Double':\n return 3;\n case 'Dotted':\n return 4;\n case 'Thick':\n return 5;\n case 'Dash':\n return 6;\n case 'DashLong':\n return 7;\n case 'DotDash':\n return 8;\n case 'DotDotDash':\n return 9;\n case 'Wavy':\n return 10;\n case 'DottedHeavy':\n return 11;\n case 'DashHeavy':\n return 12;\n case 'DashLongHeavy':\n return 13;\n case 'DotDashHeavy':\n return 14;\n case 'DotDotDashHeavy':\n return 15;\n case 'WavyHeavy':\n return 16;\n case 'WavyDouble':\n return 17;\n }\n };\n /* eslint-disable */\n HelperMethods.getStrikeThroughEnumValue = function (strikethrough) {\n switch (strikethrough) {\n case 'None':\n return 0;\n case 'SingleStrike':\n return 1;\n case 'DoubleStrike':\n return 2;\n }\n };\n HelperMethods.getHighlightColorEnumValue = function (highlightColor) {\n switch (highlightColor) {\n case 'NoColor':\n return 0;\n case 'Yellow':\n return 1;\n case 'BrightGreen':\n return 2;\n case 'Turquoise':\n return 3;\n case 'Pink':\n return 4;\n case 'Blue':\n return 5;\n case 'Red':\n return 6;\n case 'DarkBlue':\n return 7;\n case 'Teal':\n return 8;\n case 'Green':\n return 9;\n case 'Violet':\n return 10;\n case 'DarkRed':\n return 11;\n case 'DarkYellow':\n return 12;\n case 'Gray50':\n return 13;\n case 'Gray25':\n return 14;\n case 'Black':\n return 15;\n }\n };\n HelperMethods.getBiDirectionalOverride = function (biDirectionalOverride) {\n switch (biDirectionalOverride) {\n case 'None':\n return 0;\n case 'LTR':\n return 1;\n case 'RTL':\n return 2;\n }\n };\n HelperMethods.getBreakClearType = function (breakClearType) {\n switch (breakClearType) {\n case 'None':\n return 0;\n case 'Left':\n return 1;\n case 'Right':\n return 2;\n case 'All':\n return 3;\n }\n };\n /* eslint-disable */\n HelperMethods.getOutlineLevelEnumValue = function (outlineLevel) {\n switch (outlineLevel) {\n case 'BodyText':\n return 0;\n case 'Level1':\n return 1;\n case 'Level2':\n return 2;\n case 'Level3':\n return 3;\n case 'Level4':\n return 4;\n case 'Level5':\n return 5;\n case 'Level6':\n return 6;\n case 'Level7':\n return 7;\n case 'Level8':\n return 8;\n case 'Level9':\n return 9;\n }\n };\n /* eslint-disable */\n HelperMethods.getTextAlignmentEnumValue = function (textAlignment) {\n switch (textAlignment) {\n case 'Left':\n return 0;\n case 'Center':\n return 1;\n case 'Right':\n return 2;\n case 'Justify':\n return 3;\n }\n };\n /* eslint-disable */\n HelperMethods.getLineStyleEnumValue = function (lineStyle) {\n switch (lineStyle) {\n case 'Single':\n return 0;\n case 'None':\n return 1;\n case 'Dot':\n return 2;\n case 'DashSmallGap':\n return 3;\n case 'DashLargeGap':\n return 4;\n case 'DashDot':\n return 5;\n case 'DashDotDot':\n return 6;\n case 'Double':\n return 7;\n case 'Triple':\n return 8;\n case 'ThinThickSmallGap':\n return 9;\n case 'ThickThinSmallGap':\n return 10;\n case 'ThinThickThinSmallGap':\n return 11;\n case 'ThinThickMediumGap':\n return 12;\n case 'ThickThinMediumGap':\n return 13;\n case 'ThinThickThinMediumGap':\n return 14;\n case 'ThinThickLargeGap':\n return 15;\n case 'ThickThinLargeGap':\n return 16;\n case 'ThinThickThinLargeGap':\n return 17;\n case 'SingleWavy':\n return 18;\n case 'DoubleWavy':\n return 19;\n case 'DashDotStroked':\n return 20;\n case 'Emboss3D':\n return 21;\n case 'Engrave3D':\n return 22;\n case 'Outset':\n return 23;\n case 'Inset':\n return 24;\n case 'Thick':\n return 25;\n case 'Cleared':\n return 26;\n }\n };\n /* eslint-disable */\n HelperMethods.getLineSpacingTypeEnumValue = function (lineSpacing) {\n switch (lineSpacing) {\n case 'Multiple':\n return 0;\n case 'AtLeast':\n return 1;\n case 'Exactly':\n return 2;\n }\n };\n /* eslint-disable */\n HelperMethods.writeBorder = function (wBorder, keywordIndex) {\n var border = {};\n border[colorProperty[keywordIndex]] = wBorder.hasValue('color') ? wBorder.color : undefined;\n border[hasNoneStyleProperty[keywordIndex]] = wBorder.hasValue('hasNoneStyle') ? HelperMethods.getBoolInfo(wBorder.hasNoneStyle, keywordIndex) : undefined;\n border[lineStyleProperty[keywordIndex]] = wBorder.hasValue('lineStyle') ?\n keywordIndex == 1 ? this.getLineStyleEnumValue(wBorder.lineStyle) : wBorder.lineStyle : undefined;\n border[lineWidthProperty[keywordIndex]] = wBorder.hasValue('lineWidth') ? wBorder.lineWidth : undefined;\n border[shadowProperty[keywordIndex]] = wBorder.hasValue('shadow') ? HelperMethods.getBoolInfo(wBorder.shadow, keywordIndex) : undefined;\n border[spaceProperty[keywordIndex]] = wBorder.hasValue('space') ? wBorder.space : undefined;\n return border;\n };\n /* eslint-disable */\n HelperMethods.writeBorders = function (wBorders, keywordIndex) {\n var borders = {};\n borders[topProperty[keywordIndex]] = this.writeBorder(wBorders.getBorder('top'), keywordIndex);\n borders[leftProperty[keywordIndex]] = this.writeBorder(wBorders.getBorder('left'), keywordIndex);\n borders[rightProperty[keywordIndex]] = this.writeBorder(wBorders.getBorder('right'), keywordIndex);\n borders[bottomProperty[keywordIndex]] = this.writeBorder(wBorders.getBorder('bottom'), keywordIndex);\n borders[horizontalProperty[keywordIndex]] = this.writeBorder(wBorders.getBorder('horizontal'), keywordIndex);\n borders[verticalProperty[keywordIndex]] = this.writeBorder(wBorders.getBorder('vertical'), keywordIndex);\n return borders;\n };\n /* eslint-disable */\n HelperMethods.writeParagraphFormat = function (paragraphFormat, isInline, format, keywordIndex) {\n keywordIndex = isNullOrUndefined(keywordIndex) ? 0 : keywordIndex;\n paragraphFormat[bordersProperty[keywordIndex]] = this.writeBorders(format.borders, keywordIndex);\n paragraphFormat[leftIndentProperty[keywordIndex]] = isInline ? format.leftIndent : format.getValue('leftIndent');\n paragraphFormat[rightIndentProperty[keywordIndex]] = isInline ? format.rightIndent : format.getValue('rightIndent');\n paragraphFormat[firstLineIndentProperty[keywordIndex]] = isInline ? format.firstLineIndent : format.getValue('firstLineIndent');\n paragraphFormat[textAlignmentProperty[keywordIndex]] = isInline ?\n keywordIndex == 1 ? this.getTextAlignmentEnumValue(format.textAlignment) : format.textAlignment :\n keywordIndex == 1 ? this.getTextAlignmentEnumValue(format.getValue('textAlignment')) : format.getValue('textAlignment');\n paragraphFormat[beforeSpacingProperty[keywordIndex]] = isInline ? format.beforeSpacing : format.getValue('beforeSpacing');\n paragraphFormat[afterSpacingProperty[keywordIndex]] = isInline ? format.afterSpacing : format.getValue('afterSpacing');\n paragraphFormat[spaceBeforeAutoProperty[keywordIndex]] = isInline ? HelperMethods.getBoolInfo(format.spaceBeforeAuto, keywordIndex) : format.getValue('spaceBeforeAuto');\n paragraphFormat[spaceAfterAutoProperty[keywordIndex]] = isInline ? HelperMethods.getBoolInfo(format.spaceAfterAuto, keywordIndex) : format.getValue('spaceAfterAuto');\n paragraphFormat[lineSpacingProperty[keywordIndex]] = isInline ? format.lineSpacing : format.getValue('lineSpacing');\n paragraphFormat[lineSpacingTypeProperty[keywordIndex]] = isInline ?\n keywordIndex == 1 ? this.getLineSpacingTypeEnumValue(format.lineSpacingType) : format.lineSpacingType :\n keywordIndex == 1 ? this.getLineSpacingTypeEnumValue(format.getValue('lineSpacingType')) : format.getValue('lineSpacingType');\n paragraphFormat[styleNameProperty[keywordIndex]] = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : undefined;\n paragraphFormat[outlineLevelProperty[keywordIndex]] = isInline ?\n keywordIndex == 1 ? this.getOutlineLevelEnumValue(format.outlineLevel) : format.outlineLevel :\n keywordIndex == 1 ? this.getOutlineLevelEnumValue(format.getValue('outlineLevel')) : format.getValue('outlineLevel');\n paragraphFormat[bidiProperty[keywordIndex]] = isInline ? HelperMethods.getBoolInfo(format.bidi, keywordIndex) : format.getValue('bidi');\n paragraphFormat[keepLinesTogetherProperty[keywordIndex]] = isInline ? HelperMethods.getBoolInfo(format.keepLinesTogether, keywordIndex) : format.getValue('keepLinesTogether');\n paragraphFormat[keepWithNextProperty[keywordIndex]] = isInline ? HelperMethods.getBoolInfo(format.keepWithNext, keywordIndex) : format.getValue('keepWithNext');\n paragraphFormat[contextualSpacingProperty[keywordIndex]] = isInline ? HelperMethods.getBoolInfo(format.contextualSpacing, keywordIndex) : format.getValue('contextualSpacing');\n paragraphFormat[widowControlProperty[keywordIndex]] = isInline ? HelperMethods.getBoolInfo(format.widowControl, keywordIndex) : format.getValue('widowControl');\n };\n /* eslint-disable */\n HelperMethods.writeCharacterFormat = function (characterFormat, isInline, format, keywordIndex, isWriteAllValues) {\n keywordIndex = isNullOrUndefined(keywordIndex) ? 0 : keywordIndex;\n characterFormat[boldProperty[keywordIndex]] = isWriteAllValues ? HelperMethods.getBoolInfo(format.bold, keywordIndex) : isInline ? HelperMethods.getBoolInfo(format.bold, keywordIndex) : format.getValue('bold');\n characterFormat[italicProperty[keywordIndex]] = isWriteAllValues ? HelperMethods.getBoolInfo(format.italic, keywordIndex) : isInline ? HelperMethods.getBoolInfo(format.italic, keywordIndex) : format.getValue('italic');\n characterFormat[fontSizeProperty[keywordIndex]] = isWriteAllValues ? format.fontSize : isInline ? this.toWriteInline(format, 'fontSize') : format.getValue('fontSize');\n characterFormat[fontFamilyProperty[keywordIndex]] = isWriteAllValues ? format.fontFamily : isInline ? this.toWriteInline(format, 'fontFamily') : format.getValue('fontFamily');\n characterFormat[underlineProperty[keywordIndex]] = isWriteAllValues ? format.underline : isInline ?\n keywordIndex == 1 ? HelperMethods.getUnderlineEnumValue(format.underline) : format.underline :\n keywordIndex == 1 ? HelperMethods.getUnderlineEnumValue(format.getValue('underline')) : format.getValue('underline');\n characterFormat[strikethroughProperty[keywordIndex]] = isWriteAllValues ? format.strikethrough : isInline ?\n keywordIndex == 1 ? HelperMethods.getStrikeThroughEnumValue(format.strikethrough) : (format.strikethrough) :\n keywordIndex == 1 ? HelperMethods.getStrikeThroughEnumValue(format.getValue('strikethrough')) : format.getValue('strikethrough');\n characterFormat[baselineAlignmentProperty[keywordIndex]] = isWriteAllValues ? format.baselineAlignment : isInline ?\n keywordIndex == 1 ? HelperMethods.getBaselineAlignmentEnumValue(format.baselineAlignment) : (format.baselineAlignment) :\n keywordIndex == 1 ? HelperMethods.getBaselineAlignmentEnumValue(format.getValue('baselineAlignment')) : format.getValue('baselineAlignment');\n characterFormat[highlightColorProperty[keywordIndex]] = isWriteAllValues ? format.highlightColor : isInline ?\n keywordIndex == 1 ? HelperMethods.getHighlightColorEnumValue(format.highlightColor) : (format.highlightColor) :\n keywordIndex == 1 ? HelperMethods.getHighlightColorEnumValue(format.getValue('highlightColor')) : format.getValue('highlightColor');\n characterFormat[fontColorProperty[keywordIndex]] = isWriteAllValues ? format.fontColor : isInline ? this.toWriteInline(format, 'fontColor') : format.getValue('fontColor');\n characterFormat[styleNameProperty[keywordIndex]] = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : undefined;\n characterFormat[bidiProperty[keywordIndex]] = isWriteAllValues ? format.bidi : isInline ? HelperMethods.getBoolInfo(format.bidi, keywordIndex) : format.getValue('bidi');\n characterFormat[bdoProperty[keywordIndex]] = isWriteAllValues ? format.bdo : isInline ?\n keywordIndex == 1 ? HelperMethods.getBiDirectionalOverride(format.bdo) : (format.bdo) :\n keywordIndex == 1 ? HelperMethods.getBiDirectionalOverride(format.getValue('bdo')) : format.getValue('bdo');\n characterFormat[boldBidiProperty[keywordIndex]] = isWriteAllValues ? format.boldBidi : isInline ? HelperMethods.getBoolInfo(format.boldBidi, keywordIndex) : format.getValue('boldBidi');\n characterFormat[italicBidiProperty[keywordIndex]] = isWriteAllValues ? format.italicBidi : isInline ? HelperMethods.getBoolInfo(format.italicBidi, keywordIndex) : format.getValue('italicBidi');\n characterFormat[fontSizeBidiProperty[keywordIndex]] = isWriteAllValues ? format.fontSizeBidi : isInline ? format.fontSizeBidi : format.getValue('fontSizeBidi');\n characterFormat[fontFamilyBidiProperty[keywordIndex]] = isWriteAllValues ? format.fontFamilyBidi : isInline ? format.fontFamilyBidi : format.getValue('fontFamilyBidi');\n characterFormat[allCapsProperty[keywordIndex]] = isWriteAllValues ? format.allCaps : isInline ? HelperMethods.getBoolInfo(format.allCaps, keywordIndex) : format.getValue('allCaps');\n characterFormat[localeIdBidiProperty[keywordIndex]] = isWriteAllValues ? format.localeIdBidi : isInline ? format.localeIdBidi : format.getValue('localeIdBidi');\n characterFormat[localeIdProperty[keywordIndex]] = isWriteAllValues ? format.localeIdBidi : isInline ? format.localeIdAscii : format.getValue('localeIdAscii');\n characterFormat[complexScriptProperty[keywordIndex]] = isWriteAllValues ? format.complexScript : isInline ? HelperMethods.getBoolInfo(format.complexScript, keywordIndex) : format.getValue('complexScript');\n characterFormat[fontFamilyAsciiProperty[keywordIndex]] = isWriteAllValues ? format.fontFamilyAscii : isInline ? this.toWriteInline(format, 'fontFamilyAscii') : format.getValue('fontFamilyAscii');\n characterFormat[fontFamilyNonFarEastProperty[keywordIndex]] = isWriteAllValues ? format.fontFamilyNonFarEast : isInline ? this.toWriteInline(format, 'fontFamilyNonFarEast') : format.getValue('fontFamilyNonFarEast');\n characterFormat[fontFamilyFarEastProperty[keywordIndex]] = isWriteAllValues ? format.fontFamilyFarEast : isInline ? this.toWriteInline(format, 'fontFamilyFarEast') : format.getValue('fontFamilyFarEast');\n characterFormat[characterSpacingProperty[keywordIndex]] = isWriteAllValues ? format.characterSpacing : isInline ? this.toWriteInline(format, 'characterSpacing') : format.getValue('characterSpacing');\n characterFormat[scalingProperty[keywordIndex]] = isWriteAllValues ? format.scaling : isInline ? this.toWriteInline(format, 'scaling') : format.getValue('scaling');\n if (format.hasValue('fontFamily') || isWriteAllValues) {\n if (isNullOrUndefined(characterFormat[fontFamilyAsciiProperty[keywordIndex]])) {\n characterFormat[fontFamilyAsciiProperty[keywordIndex]] = format.fontFamily;\n }\n if (isNullOrUndefined(characterFormat[fontFamilyNonFarEastProperty[keywordIndex]])) {\n characterFormat[fontFamilyNonFarEastProperty[keywordIndex]] = format.fontFamily;\n }\n if (isNullOrUndefined(characterFormat[fontFamilyFarEastProperty[keywordIndex]])) {\n characterFormat[fontFamilyFarEastProperty[keywordIndex]] = format.fontFamily;\n }\n }\n };\n /// \n /// To check whether the font name is theme font or not.\n /// \n /// Specify the font name.\n /// Returns true if the font name is represent a theme font.\n HelperMethods.isThemeFont = function (fontName) {\n return (fontName == \"majorAscii\" || fontName == \"majorBidi\" || fontName == \"majorEastAsia\"\n || fontName == \"majorHAnsi\" || fontName == \"minorAscii\" || fontName == \"minorBidi\" || fontName == \"minorEastAsia\"\n || fontName == \"minorHAnsi\");\n };\n HelperMethods.toWriteInline = function (format, propertyName) {\n if (!isNullOrUndefined(format.ownerBase) && (format.ownerBase instanceof ElementBox)) {\n return format.hasValue(propertyName) ? format[propertyName] : format.getValue(propertyName);\n }\n else {\n return format[propertyName];\n }\n };\n /* eslint-enable */\n HelperMethods.round = function (value, decimalDigits) {\n var temp = value;\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp * 10;\n }\n temp = Math.round(temp);\n for (var i = 0; i < decimalDigits; i++) {\n temp = temp / 10;\n }\n return temp;\n };\n /* eslint-disable */\n HelperMethods.removeInvalidXmlChars = function (text) {\n // From xml spec valid chars:\n // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]\n // any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.\n // and used unicodes in DocumentEditor \\f | \\v | \\r | \\u000E\n var invalidXMLChars = /[^\\x09\\x0A\\x0C\\x0D\\v\\f\\r\\u000E\\x20-\\uD7FF\\uE000-\\uFFFD\\u{10000}-\\u{10FFFF}]/ug;\n return text.replace(invalidXMLChars, '');\n };\n HelperMethods.commentInlines = function (ctext, mentions, keywordIndex) {\n var _this = this;\n var blocks = [];\n var outputArray = ctext.split(/<\\/?div>/).filter(Boolean).map(function (item) { return item.trim(); });\n outputArray = outputArray.filter(Boolean).map(function (item) { return item === \"
\" ? item : item.split(//); }).flat();\n outputArray.forEach(function (text) {\n var block = {};\n block[inlinesProperty[keywordIndex]] = [];\n if (text !== \"\" && text !== \"
\") {\n // Replace   with a space\n text = text.replace(/ /g, \" \");\n // Extracting parts into an array\n var parts = text.match(/(<[^>]+>[^<]*<\\/[^>]+>|[^<]+)/g);\n // Iterate through the parts array\n parts.forEach(function (content) {\n if (content.indexOf(\"]*>([^<]*)<\\/span>/;\n // Extract the text\n var match = content.match(regex);\n var name_1 = match ? match[1].trim() : '';\n var email = _this.getEmailIdByName(name_1, mentions);\n block = _this.serializeMentions(name_1, email, block, keywordIndex);\n }\n else {\n var inlines = {};\n inlines[textProperty[keywordIndex]] = content;\n block[inlinesProperty[keywordIndex]].push(inlines);\n }\n });\n }\n blocks.push(block);\n });\n return blocks;\n };\n HelperMethods.getEmailIdByName = function (name, mentions) {\n for (var _i = 0, mentions_1 = mentions; _i < mentions_1.length; _i++) {\n var item = mentions_1[_i];\n if (item[\"Name\"] === name) {\n return item[\"EmailId\"];\n }\n }\n return \"\";\n };\n HelperMethods.serializeMentions = function (name, email, block, keywordIndex) {\n var inlines = {};\n inlines[characterFormatProperty[keywordIndex]] = {};\n inlines[fieldTypeProperty[keywordIndex]] = 0;\n inlines[hasFieldEndProperty[keywordIndex]] = true;\n block[inlinesProperty[keywordIndex]].push(inlines);\n var inlines2 = {};\n inlines2[characterFormatProperty[keywordIndex]] = {};\n inlines2[textProperty[keywordIndex]] = ' HYPERLINK \\\"' + email + '\\\" ';\n block[inlinesProperty[keywordIndex]].push(inlines2);\n var inlines3 = {};\n inlines3[characterFormatProperty[keywordIndex]] = {};\n inlines3[fieldTypeProperty[keywordIndex]] = 2;\n block[inlinesProperty[keywordIndex]].push(inlines3);\n var inlines4 = {};\n inlines4[characterFormatProperty[keywordIndex]] = {\n \"underline\": \"Single\",\n \"fontColor\": \"#0563c1\",\n \"bidi\": false\n };\n inlines4[textProperty[keywordIndex]] = name;\n block[inlinesProperty[keywordIndex]].push(inlines4);\n var inlines5 = {};\n inlines5[characterFormatProperty[keywordIndex]] = {};\n inlines5[fieldTypeProperty[keywordIndex]] = 1;\n block[inlinesProperty[keywordIndex]].push(inlines5);\n return block;\n };\n HelperMethods.reverseString = function (text) {\n if (!isNullOrUndefined(text) && text !== '') {\n // return a new array\n var splitString = text.split('');\n // reverse the new created array\n var reverseString = splitString.reverse();\n // join all elements of the array into a string\n text = reverseString.join('');\n }\n return text;\n };\n HelperMethods.formatClippedString = function (base64ImageString) {\n var extension = '';\n var formatClippedString = '';\n if (this.startsWith(base64ImageString, 'data:image/svg+xml;base64,')) {\n extension = '.svg';\n formatClippedString = base64ImageString.replace('data:image/svg+xml;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/svg+xml;utf8,')) {\n extension = '.svg';\n formatClippedString = base64ImageString.replace('data:image/svg+xml;utf8,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/bmp;base64,')) {\n extension = '.bmp';\n formatClippedString = base64ImageString.replace('data:image/bmp;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-emf;base64,')) {\n extension = '.emf';\n formatClippedString = base64ImageString.replace('data:image/x-emf;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/exif;base64,')) {\n extension = '.exif';\n formatClippedString = base64ImageString.replace('data:image/exif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/gif;base64,')) {\n extension = '.gif';\n formatClippedString = base64ImageString.replace('data:image/gif;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/icon;base64,')) {\n extension = '.ico';\n formatClippedString = base64ImageString.replace('data:image/icon;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpeg;base64,')) {\n extension = '.jpeg';\n formatClippedString = base64ImageString.replace('data:image/jpeg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/jpg;base64,')) {\n extension = '.jpg';\n formatClippedString = base64ImageString.replace('data:image/jpg;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/png;base64,')) {\n extension = '.png';\n formatClippedString = base64ImageString.replace('data:image/png;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/tiff;base64,')) {\n extension = '.tif';\n formatClippedString = base64ImageString.replace('data:image/tiff;base64,', '');\n }\n else if (this.startsWith(base64ImageString, 'data:image/x-wmf;base64,')) {\n extension = '.wmf';\n formatClippedString = base64ImageString.replace('data:image/x-wmf;base64,', '');\n }\n else {\n extension = '.jpeg';\n }\n return { 'extension': extension, 'formatClippedString': formatClippedString };\n };\n /**\n * @private\n * @param sourceString\n * @param startString\n * @returns\n */\n HelperMethods.startsWith = function (sourceString, startString) {\n return startString.length > 0 && sourceString.substring(0, startString.length) === startString;\n };\n HelperMethods.formatText = function (format, value) {\n var text = value;\n switch (format.toLowerCase()) {\n case 'uppercase':\n text = value.toUpperCase();\n break;\n case 'lowercase':\n text = value.toLowerCase();\n break;\n case 'firstlower':\n text = this.lowerFirstChar(value);\n break;\n case 'firstcapital':\n text = this.capitaliseFirst(value, 'FirstCapital');\n break;\n case 'titlecase':\n text = this.capitaliseFirst(value, 'Titlecase');\n break;\n }\n return text;\n };\n HelperMethods.formatNumber = function (format, value) {\n var intl = new Internationalization();\n var dotData = value.split('.');\n value = dotData[0];\n var numberValue = intl.parseNumber(value);\n if (value.toString() === 'NaN') {\n return '';\n }\n if (format === '') {\n format = '0';\n }\n var numberFormat = { format: format };\n return intl.formatNumber(numberValue, numberFormat);\n };\n HelperMethods.formatDate = function (format, value) {\n var intl = new Internationalization();\n var date = new Date(value);\n if (isNaN(date.getDate())) {\n return '';\n }\n if (format === '') {\n return value;\n }\n if (format.indexOf('am/pm') !== -1) {\n format = format.replace(/am\\/pm/gi, 'a');\n }\n var dateFormat = { 'format': format };\n return intl.formatDate(date, dateFormat);\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n HelperMethods.capitaliseFirst = function (value, type, splitBy) {\n var text = '';\n if (type === 'Titlecase') {\n var valArry = splitBy ? value.split(splitBy) : value.split(' ');\n for (var i = 0; i < valArry.length; i++) {\n /* eslint-disable-next-line max-len */\n text += splitBy ? valArry[parseInt(i.toString(), 10)].charAt(0).toUpperCase() + valArry[parseInt(i.toString(), 10)].slice(1, valArry[parseInt(i.toString(), 10)].length) : this.capitaliseFirstInternal(valArry[parseInt(i.toString(), 10)]);\n if (valArry.length >= 0 && !splitBy) {\n text += ' ';\n }\n }\n if (!splitBy) {\n text = this.capitaliseFirst(text, 'Titlecase', '\\r');\n }\n }\n else if (type === 'FirstCapital') {\n text = this.capitaliseFirstInternal(value);\n }\n return text;\n };\n HelperMethods.lowerFirstChar = function (value) {\n return (value.charAt(0).toLowerCase() + value.slice(1, value.length));\n };\n HelperMethods.capitaliseFirstInternal = function (value) {\n return (value.charAt(0).toUpperCase() + value.slice(1, value.length).toLowerCase());\n };\n HelperMethods.getModifiedDate = function (date) {\n var modifiedDate = HelperMethods.getLocaleDate(date);\n var dateString = modifiedDate.toLocaleDateString([], { year: 'numeric', month: 'long', day: 'numeric' });\n var time = modifiedDate.toLocaleTimeString([], { hour: 'numeric', minute: 'numeric' });\n var dateTime = dateString + ' ' + time;\n return dateTime;\n };\n HelperMethods.getUtcDate = function () {\n var now = new Date();\n return new Date(now.getTime() - now.getTimezoneOffset() * 60000).toISOString();\n };\n HelperMethods.getLocaleDate = function (date) {\n var dt = new Date(date);\n return new Date(dt.getTime() + dt.getTimezoneOffset() * 60000);\n };\n HelperMethods.getCompatibilityModeValue = function (compatibilityMode) {\n var compatValue;\n switch (compatibilityMode) {\n case 1:\n compatValue = '11';\n break;\n case 2:\n compatValue = '12';\n break;\n case 3:\n compatValue = '14';\n break;\n default:\n compatValue = '15';\n break;\n }\n return compatValue;\n };\n /**\n * @private\n * @returns {string} - Returns the unique id for document editor.\n */\n HelperMethods.getUniqueElementId = function () {\n return 'de_element' + Date.now().toString(36) + Math.random().toString(36).substring(2);\n };\n /**\n * @private\n * @param element - element to be splitted of space\n * @param fromStart - weather to removed space from start or end\n * @returns {Boolean} - is the input element is splitted\n */\n /* eslint-disable */\n HelperMethods.splitSpaceInTextElementBox = function (element, fromStart) {\n var elementText = element.text;\n var emptySpace = \"\";\n if (fromStart) {\n while (HelperMethods.startsWith(elementText, \" \")) {\n emptySpace += ' ';\n elementText = elementText.substring(1);\n }\n }\n else {\n while (HelperMethods.endsWith(elementText)) {\n emptySpace += ' ';\n elementText = elementText.slice(0, -1);\n }\n }\n if (emptySpace != \"\") {\n var textBox = new TextElementBox();\n textBox.characterFormat.copyFormat(element.characterFormat);\n if (element.revisions.length > 0) {\n for (var i = 0; i < element.revisions.length; i++) {\n var currentRevision = element.revisions[i];\n textBox.revisions.push(currentRevision);\n var rangeIndex = currentRevision.range.indexOf(element);\n if (rangeIndex < 0) {\n currentRevision.range.push(textBox);\n }\n else {\n currentRevision.range.splice(rangeIndex + 1, 0, textBox);\n }\n }\n textBox.isMarkedForRevision = element.isMarkedForRevision;\n }\n textBox.line = element.line;\n var lineChildren = textBox.line.children;\n if (fromStart) {\n element.text = emptySpace;\n textBox.text = elementText;\n }\n else {\n element.text = elementText;\n textBox.text = emptySpace;\n }\n lineChildren.splice(lineChildren.indexOf(element) + 1, 0, textBox);\n }\n };\n /* eslint-disable */\n HelperMethods.getTextIndexAfterWhitespace = function (text, startIndex) {\n var length = text.length;\n var index = 0;\n index = text.indexOf(' ', startIndex) + 1;\n var nextIndex = index;\n if (nextIndex === 0 || nextIndex === length) {\n return nextIndex;\n }\n while (text[nextIndex] === ' ') {\n nextIndex++;\n if (nextIndex === length) {\n break;\n }\n }\n return nextIndex;\n };\n /**\n * @private\n * @param {TextElementBox} textElementBox text element box to split the text based on max text length.\n * @param {LineWidget} lineWidget line widget to add the splitted text element box.\n * @returns {void}\n */\n HelperMethods.splitWordByMaxLength = function (textElementBox, lineWidget, isInitialParsing) {\n var text = textElementBox.text;\n var index = 0;\n var textLength = text.length;\n var maxLength = 90;\n var splittedText = '';\n var characterFormat = textElementBox.characterFormat;\n var revisions = textElementBox.revisions;\n var spanIndex = lineWidget.children.indexOf(textElementBox);\n while (index < textLength) {\n var nextIndex = index + maxLength;\n if (nextIndex > textLength) {\n nextIndex = textLength;\n }\n var spaceIndex = HelperMethods.getTextIndexAfterWhitespace(text, nextIndex);\n if (spaceIndex === 0 || spaceIndex > textLength) {\n spaceIndex = nextIndex;\n }\n splittedText = text.substring(index, spaceIndex);\n if (index === 0) {\n textElementBox.text = splittedText;\n textElementBox.isWidthUpdated = false;\n }\n else {\n var splittedElement = new TextElementBox();\n splittedElement.text = splittedText;\n splittedElement.line = lineWidget;\n splittedElement.characterFormat.copyFormat(characterFormat);\n if (revisions.length > 0) {\n for (var i = 0; i < revisions.length; i++) {\n var revision = revisions[i];\n splittedElement.revisions.push(revision);\n var rangeIndex = revision.range.indexOf(textElementBox);\n if (isInitialParsing) {\n revision.range.push(splittedElement);\n }\n else {\n if (rangeIndex < 0) {\n revision.range.push(splittedElement);\n }\n else {\n revision.range.splice(rangeIndex + 1, 0, splittedElement);\n }\n }\n }\n }\n if (isInitialParsing) {\n lineWidget.children.push(splittedElement);\n }\n else {\n lineWidget.children.splice(spanIndex + 1, 0, splittedElement);\n spanIndex++;\n }\n }\n index = spaceIndex;\n }\n };\n /**\n * @private\n */\n HelperMethods.wordBefore = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordAfter = '\\\\b';\n /**\n * @private\n */\n HelperMethods.wordSplitCharacters = [' ', ',', '.', ':', ';', '<', '>', '=',\n '+', '-', '_', '{', '}', '[', ']', '`', '~', '!', '@', '#', '$', '%', '^', '&',\n '*', '(', ')', '\"', '?', '/', '|', '\\\\', '”', ' ', '،', '؟', '؛', '’', '‘'];\n return HelperMethods;\n}());\nexport { HelperMethods };\n/**\n * @private\n */\nvar Point = /** @class */ (function () {\n function Point(xPosition, yPosition) {\n this.xIn = 0;\n this.yIn = 0;\n this.xIn = xPosition;\n this.yIn = yPosition;\n }\n Object.defineProperty(Point.prototype, \"x\", {\n get: function () {\n return this.xIn;\n },\n set: function (value) {\n this.xIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Point.prototype, \"y\", {\n get: function () {\n return this.yIn;\n },\n set: function (value) {\n this.yIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Point.prototype.copy = function (point) {\n this.xIn = point.xIn;\n this.yIn = point.yIn;\n };\n /**\n * Destroys the internal objects maintained.\n *\n * @returns {void}\n */\n Point.prototype.destroy = function () {\n this.xIn = undefined;\n this.yIn = undefined;\n };\n return Point;\n}());\nexport { Point };\n/**\n * @private\n */\nvar Base64 = /** @class */ (function () {\n function Base64() {\n this.keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n }\n // public method for encoding\n Base64.prototype.encodeString = function (input) {\n var output = '';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n input = this.unicodeEncode(input);\n while (i < input.length) {\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n }\n else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output +\n this.keyStr.charAt(enc1) + this.keyStr.charAt(enc2) +\n this.keyStr.charAt(enc3) + this.keyStr.charAt(enc4);\n }\n return output;\n };\n // private method for UTF-8 encoding\n Base64.prototype.unicodeEncode = function (input) {\n var tempInput = input.replace(/\\r\\n/g, '\\n');\n var utftext = '';\n for (var n = 0; n < tempInput.length; n++) {\n var c = tempInput.charCodeAt(n);\n if (c < 128) {\n utftext += String.fromCharCode(c);\n }\n else if ((c > 127) && (c < 2048)) {\n utftext += String.fromCharCode((c >> 6) | 192);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n else {\n utftext += String.fromCharCode((c >> 12) | 224);\n utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n }\n return utftext;\n };\n Base64.prototype.decodeString = function (input) {\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9+/=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === this.keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === this.keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = this.keyStr.indexOf(input.charAt(i++));\n enc2 = this.keyStr.indexOf(input.charAt(i++));\n enc3 = this.keyStr.indexOf(input.charAt(i++));\n enc4 = this.keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n if (enc3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (enc4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n /**\n * @private\n * @returns {void}\n */\n Base64.prototype.destroy = function () {\n this.keyStr = undefined;\n };\n return Base64;\n}());\nexport { Base64 };\n/**\n * @private\n */\nvar WrapPosition = /** @class */ (function () {\n function WrapPosition(x, width) {\n this.x = 0;\n this.width = 0;\n this.x = x;\n this.width = width;\n }\n Object.defineProperty(WrapPosition.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n return WrapPosition;\n}());\nexport { WrapPosition };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable */\nimport { WTableFormat, WRowFormat, WCellFormat } from '../format/index';\nimport { CharacterRangeType, FontScriptType } from '../../base/types';\nimport { WParagraphFormat, WCharacterFormat, WBorder, WBorders } from '../format/index';\nimport { isNullOrUndefined, createElement, classList } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { WebLayoutViewer } from './viewer';\nimport { Revision } from '../track-changes/track-changes';\n/**\n * @private\n */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n Object.defineProperty(Rect.prototype, \"right\", {\n get: function () {\n return this.x + this.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"bottom\", {\n get: function () {\n return this.y + this.height;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @param currentBound\n * @private\n */\n Rect.prototype.isIntersecting = function (currentBound) {\n if (currentBound.y > this.bottom || this.y > currentBound.bottom ||\n currentBound.x > this.right || this.x > currentBound.right) {\n return false;\n }\n return true;\n };\n /**\n * @private\n */\n Rect.prototype.clone = function () {\n return new Rect(this.x, this.y, this.width, this.height);\n };\n return Rect;\n}());\nexport { Rect };\n/**\n * @private\n */\nvar Padding = /** @class */ (function () {\n function Padding(right, left, top, bottom) {\n this.right = 10;\n this.left = 10;\n this.top = 10;\n this.bottom = 10;\n this.right = right;\n this.left = left;\n this.top = top;\n this.bottom = bottom;\n }\n return Padding;\n}());\nexport { Padding };\n/**\n * @private\n */\nvar Margin = /** @class */ (function () {\n function Margin(leftMargin, topMargin, rightMargin, bottomMargin) {\n this.left = leftMargin;\n this.top = topMargin;\n this.right = rightMargin;\n this.bottom = bottomMargin;\n }\n Margin.prototype.clone = function () {\n return new Margin(this.left, this.top, this.right, this.bottom);\n };\n Margin.prototype.destroy = function () {\n this.left = undefined;\n this.right = undefined;\n this.top = undefined;\n this.bottom = undefined;\n };\n return Margin;\n}());\nexport { Margin };\n/**\n * @private\n */\nvar Widget = /** @class */ (function () {\n function Widget() {\n /**\n * @private\n */\n this.childWidgets = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.index = 0;\n }\n Object.defineProperty(Widget.prototype, \"indexInOwner\", {\n get: function () {\n if (this instanceof BodyWidget && this.page) {\n if (this.containerWidget instanceof FootNoteWidget) {\n return this.containerWidget.bodyWidgets.indexOf(this);\n }\n else {\n return this.page.bodyWidgets.indexOf(this);\n }\n }\n else if (this.containerWidget && this.containerWidget.childWidgets) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n else if (this instanceof FootNoteWidget) {\n return 0;\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"firstChild\", {\n get: function () {\n return this.childWidgets.length > 0 ? this.childWidgets[0] : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"lastChild\", {\n get: function () {\n if (this.childWidgets) {\n return this.childWidgets.length > 0 ?\n this.childWidgets[this.childWidgets.length - 1] : undefined;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (widget instanceof BodyWidget) {\n widget = index > 0 ? widget.page.bodyWidgets[index - 1] : undefined;\n }\n else {\n widget = index > 0 ? widget.containerWidget.childWidgets[index - 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index === -1) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n widget = index < widget.page.bodyWidgets.length - 1 ?\n widget.page.bodyWidgets[index + 1] : undefined;\n }\n else {\n widget = index < widget.containerWidget.childWidgets.length - 1 ?\n widget.containerWidget.childWidgets[index + 1] : undefined;\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousRenderedWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index > 0 && !(widget.containerWidget instanceof FootNoteWidget)) {\n widget = widget.page.bodyWidgets[index - 1];\n }\n else if ((widget.containerWidget instanceof FootNoteWidget) && !widget.page.documentHelper.owner.editorModule.removeEditRange) {\n if (index <= 0) {\n return undefined;\n }\n widget = widget.containerWidget.bodyWidgets[index - 1];\n }\n else {\n var page = widget.page.previousPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[page.bodyWidgets.length - 1] : undefined;\n }\n }\n else if (widget instanceof FootNoteWidget) {\n var page = widget.page;\n while (page.previousPage) {\n page = page.previousPage;\n widget = page.footnoteWidget;\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n else {\n if (index > 0) {\n widget = widget.containerWidget.childWidgets[index - 1];\n }\n else {\n var previousContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n previousContainer = widget.containerWidget.getPreviousSplitWidget();\n }\n else if (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget &&\n widget.containerWidget.containerWidget.footNoteType === 'Endnote') {\n previousContainer = widget.containerWidget.previousWidget ? widget.containerWidget.previousWidget : widget.containerWidget.previousRenderedWidget;\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget || (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget))) {\n // Since cells are lay outed left to right, we should not navigate to previous row.\n previousContainer = widget.containerWidget.previousRenderedWidget;\n }\n while (previousContainer && previousContainer.childWidgets.length === 0) {\n previousContainer = previousContainer.previousRenderedWidget;\n if (isNullOrUndefined(previousContainer)) {\n break;\n }\n }\n widget = previousContainer && previousContainer.constructor === widget.containerWidget.constructor ?\n previousContainer.lastChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextRenderedWidget\", {\n get: function () {\n var widget = this;\n var index = this.indexInOwner;\n if (index < 0) {\n return undefined;\n }\n if (widget instanceof BodyWidget) {\n if (index < widget.page.bodyWidgets.length - 1 && !(widget.containerWidget instanceof FootNoteWidget)) {\n widget = widget.page.bodyWidgets[index + 1];\n }\n else if (widget.containerWidget instanceof FootNoteWidget) {\n if (index >= widget.containerWidget.bodyWidgets.length - 1 && !widget.page.documentHelper.owner.editorModule.removeEditRange) {\n return undefined;\n }\n widget = widget.containerWidget.bodyWidgets[index + 1];\n }\n else if (widget.page.allowNextPageRendering) {\n var page = widget.page.nextPage;\n widget = page && page.bodyWidgets.length > 0 ? page.bodyWidgets[0] : undefined;\n }\n else {\n widget = undefined;\n }\n }\n else if (widget instanceof FootNoteWidget) {\n var page = widget.page;\n while (page.allowNextPageRendering && page.nextPage) {\n page = page.nextPage;\n widget = page.footnoteWidget;\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n else {\n if (index < widget.containerWidget.childWidgets.length - 1) {\n widget = widget.containerWidget.childWidgets[index + 1];\n }\n else {\n var nextContainer = undefined;\n if (widget.containerWidget instanceof TableCellWidget) {\n nextContainer = widget.containerWidget.getNextSplitWidget();\n }\n else if (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget &&\n widget.containerWidget.containerWidget.footNoteType === 'Endnote') {\n nextContainer = widget.containerWidget.nextWidget ? widget.containerWidget.nextWidget : widget.containerWidget.nextRenderedWidget;\n }\n else if (!(widget.containerWidget instanceof TableRowWidget\n || widget.containerWidget instanceof HeaderFooterWidget || (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget))) {\n // Since cells are lay outed left to right, we should not navigate to next row.\n nextContainer = widget.containerWidget.nextRenderedWidget;\n }\n while (nextContainer && nextContainer.childWidgets.length === 0 && !(nextContainer instanceof TableCellWidget)) {\n nextContainer = nextContainer.nextRenderedWidget;\n if (isNullOrUndefined(nextContainer)) {\n break;\n }\n }\n widget = nextContainer && nextContainer.constructor === widget.containerWidget.constructor ?\n nextContainer.firstChild : undefined;\n }\n }\n return widget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"previousSplitWidget\", {\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getPreviousSplitWidget();\n }\n else {\n var previous = widget.previousRenderedWidget;\n if (widget instanceof BodyWidget && previous instanceof BodyWidget && widget.equals(previous)) {\n return previous;\n }\n else if (previous instanceof BlockWidget && widget.index === previous.index && widget.equals(previous)) {\n return previous;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Widget.prototype, \"nextSplitWidget\", {\n get: function () {\n var widget = this;\n if (widget instanceof TableCellWidget) {\n return widget.getNextSplitWidget();\n }\n else {\n var next = widget.nextRenderedWidget;\n if (widget instanceof BodyWidget && next instanceof BodyWidget && widget.equals(next)) {\n return next;\n }\n else if (next instanceof BlockWidget && widget.index === next.index && widget.equals(next)) {\n return next;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Widget.prototype.getPreviousSplitWidgets = function () {\n var widgets = [];\n var widget = this.previousSplitWidget;\n while (widget) {\n widgets.unshift(widget);\n widget = widget.previousSplitWidget;\n if (widget && widget == widget.previousSplitWidget) {\n break;\n }\n }\n return widgets;\n };\n Widget.prototype.getSplitWidgets = function () {\n var widgets = this.getPreviousSplitWidgets();\n var widget = this;\n while (widget) {\n widgets.push(widget);\n widget = widget.nextSplitWidget;\n }\n return widgets;\n };\n Widget.prototype.combineWidget = function (viewer) {\n var root = this;\n var widgets = this.getSplitWidgets();\n if (widgets.length > 1) {\n root = widgets.shift();\n while (widgets.length > 0) {\n var splitWidget = widgets.shift();\n root.combine(splitWidget, viewer);\n }\n }\n if (root instanceof TableWidget) {\n root.combineRows(viewer);\n }\n return root;\n };\n Widget.prototype.combine = function (widget, viewer) {\n if (widget.childWidgets.length > 0) {\n var lastChild = this.lastChild;\n if (lastChild instanceof TableWidget) {\n lastChild.combineWidget(viewer);\n }\n else {\n var firstChild = widget.firstChild;\n if (!(widget instanceof TableWidget) && lastChild instanceof Widget && firstChild instanceof Widget &&\n lastChild.index === firstChild.index) {\n lastChild.combine(widget.childWidgets.shift(), viewer);\n }\n }\n this.addWidgets(widget.childWidgets);\n widget.childWidgets = [];\n }\n widget.destroyInternal(viewer);\n };\n Widget.prototype.addWidgets = function (childWidgets) {\n while (childWidgets.length > 0) {\n var widget = childWidgets.shift();\n if (widget instanceof LineWidget && this instanceof ParagraphWidget) {\n widget.paragraph = this;\n this.height += widget.height;\n }\n else if (widget instanceof Widget) {\n var lastChild = this.lastChild;\n widget.containerWidget = this;\n widget.y = lastChild instanceof Widget ? lastChild.y + lastChild.height : this.y;\n this.height += widget.height;\n }\n if (widget instanceof TableRowWidget) {\n var previousRow = this.childWidgets[this.childWidgets.length - 1];\n for (var i = 0; i < previousRow.childWidgets.length; i++) {\n var previousCell = previousRow.childWidgets[i];\n if (previousCell.cellFormat.rowSpan > 1) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var currentCell = widget.childWidgets[j];\n if (currentCell.columnIndex === previousCell.columnIndex && currentCell.isSplittedCell && currentCell.cellFormat.rowSpan === previousCell.cellFormat.rowSpan) {\n for (var k = 0; k < currentCell.childWidgets.length; k++) {\n var block = currentCell.childWidgets[k];\n currentCell.childWidgets.splice(block.indexInOwner, 1);\n previousCell.childWidgets.push(block);\n block.containerWidget = previousCell;\n k--;\n }\n currentCell.ownerRow.childWidgets.splice(currentCell.indexInOwner, 1);\n currentCell.containerWidget = undefined;\n j--;\n }\n }\n }\n }\n }\n this.childWidgets.push(widget);\n }\n };\n Widget.prototype.removeChild = function (index) {\n if (index > -1 && index < this.childWidgets.length) {\n this.childWidgets.splice(index, 1);\n }\n };\n Widget.prototype.destroy = function () {\n if (this.childWidgets) {\n while (this.childWidgets.length > 0) {\n var child = this.childWidgets.pop();\n if (child instanceof LineWidget || child instanceof Widget) {\n child.destroy();\n }\n }\n }\n this.childWidgets = undefined;\n if (this.containerWidget) {\n this.containerWidget.removeChild(this.indexInOwner);\n }\n this.containerWidget = undefined;\n // if (this.margin) {\n // this.margin.destroy();\n // }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n this.index = undefined;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n Widget.prototype.componentDestroy = function () {\n if (this.childWidgets) {\n while (this.childWidgets.length > 0) {\n var child = this.childWidgets.pop();\n if (child instanceof LineWidget || child instanceof Widget) {\n child.componentDestroy();\n }\n }\n }\n this.childWidgets = undefined;\n if (this.margin) {\n this.margin.destroy();\n }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n this.index = undefined;\n this.containerWidget = undefined;\n };\n return Widget;\n}());\nexport { Widget };\n/**\n * @private\n */\nvar BlockContainer = /** @class */ (function (_super) {\n __extends(BlockContainer, _super);\n function BlockContainer() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.floatingElements = [];\n /**\n * @private\n */\n _this.footNoteReference = undefined;\n /**\n * @private\n */\n _this.sectionFormatIn = undefined;\n /**\n * @private\n */\n _this.columnIndex = 0;\n /**\n * @private\n */\n _this.isWord2010NextColumn = false;\n return _this;\n }\n Object.defineProperty(BlockContainer.prototype, \"sectionFormat\", {\n get: function () {\n var container = this;\n if (container instanceof BodyWidget) {\n return container.sectionFormatIn;\n }\n else if (container.page && !isNullOrUndefined(container.page.bodyWidgets)) {\n return container.page.bodyWidgets[0].sectionFormat;\n }\n return undefined;\n },\n set: function (value) {\n if (this instanceof BodyWidget) {\n this.sectionFormatIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockContainer.prototype, \"sectionIndex\", {\n get: function () {\n var container = this;\n var index = 0;\n if (container instanceof BodyWidget) {\n index = container.index;\n }\n else if (container.page) {\n index = container.page.bodyWidgets[0].index;\n }\n return index;\n },\n enumerable: true,\n configurable: true\n });\n BlockContainer.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var documentHelper = undefined;\n var node = this;\n if (node instanceof BodyWidget) {\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n }\n else if (node instanceof FootNoteWidget) {\n if (node.footNoteType === 'Footnote') {\n hierarchicalIndex = 'FN' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'EN' + ';' + hierarchicalIndex;\n }\n }\n else {\n if (node.headerFooterType.indexOf('Header') !== -1) {\n hierarchicalIndex = 'H' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'F' + ';' + hierarchicalIndex;\n }\n }\n if (!isNullOrUndefined(node.page)) {\n documentHelper = this.page.documentHelper;\n var pageIndex = documentHelper.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n BlockContainer.prototype.componentDestroy = function () {\n if (this.sectionFormatIn) {\n this.sectionFormatIn.destroy();\n }\n this.sectionFormatIn = undefined;\n this.floatingElements = [];\n this.removedHeaderFooters = [];\n this.footNoteReference = undefined;\n this.page = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return BlockContainer;\n}(Widget));\nexport { BlockContainer };\n/**\n * @private\n */\nvar BodyWidget = /** @class */ (function (_super) {\n __extends(BodyWidget, _super);\n /**\n * Initialize the constructor of BodyWidget\n */\n function BodyWidget() {\n return _super.call(this) || this;\n }\n BodyWidget.prototype.equals = function (widget) {\n return widget instanceof BodyWidget && widget.sectionFormat === this.sectionFormat;\n };\n BodyWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var documentHelper = undefined;\n var node = this;\n if (node.containerWidget instanceof FootNoteWidget) {\n hierarchicalIndex = node.containerWidget.bodyWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (node.containerWidget.footNoteType === 'Footnote') {\n hierarchicalIndex = 'FN' + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = 'EN' + ';' + hierarchicalIndex;\n }\n }\n else {\n if (this.page && this.page.bodyWidgets.indexOf(this) !== -1) {\n hierarchicalIndex = this.page.bodyWidgets.indexOf(this) + ';' + hierarchicalIndex;\n }\n else {\n hierarchicalIndex = node.index + ';' + hierarchicalIndex;\n }\n }\n if (!isNullOrUndefined(node.page)) {\n documentHelper = this.page.documentHelper;\n var pageIndex = documentHelper.pages.indexOf(this.page);\n return pageIndex + ';' + hierarchicalIndex;\n }\n return hierarchicalIndex;\n };\n BodyWidget.prototype.getTableCellWidget = function (touchPoint) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i] instanceof TableWidget) {\n var childWidget = this.childWidgets[i];\n var tableWidth = 0;\n if (childWidget.wrapTextAround) {\n tableWidth = childWidget.getTableCellWidth();\n }\n if (!(childWidget.wrapTextAround) && childWidget.y <= touchPoint.y && (childWidget.y + childWidget.height) >= touchPoint.y) {\n return childWidget.getTableCellWidget(touchPoint);\n }\n if ((childWidget.wrapTextAround &&\n (childWidget.x <= touchPoint.x && (childWidget.x + tableWidth) >= touchPoint.x &&\n childWidget.y <= touchPoint.y && (childWidget.y + childWidget.height) >= touchPoint.y))) {\n return childWidget.getTableCellWidget(touchPoint);\n }\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= touchPoint.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(touchPoint);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(touchPoint);\n }\n }\n return tableCellWidget;\n };\n BodyWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var n = 0; n < this.childWidgets.length; n++) {\n var chilgWidget = this.childWidgets[n];\n if (chilgWidget instanceof ParagraphWidget) {\n chilgWidget.destroyInternal(viewer);\n }\n else {\n chilgWidget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n n--;\n }\n this.childWidgets = undefined;\n }\n // if (this instanceof HeaderFooterWidget && ((this as HeaderFooterWidget).currentNode ))) {\n // if (((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets )) {\n // let index: number = ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.indexOf(this);\n // ((this as HeaderFooterWidget).currentNode as WHeaderFooter).layoutedWidgets.splice(index, 1);\n // }\n // this.currentNode = undefined;\n if (!isNullOrUndefined(this.page)) {\n var index = this.indexInOwner;\n if (this.indexInOwner > -1) {\n this.page.bodyWidgets.splice(index, 1);\n if (this.page.bodyWidgets.length === 0) {\n this.page.destroy();\n // }\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.headerWidget === this) {\n this.page.headerWidget = undefined;\n }\n else if ((this instanceof HeaderFooterWidget)\n && this.page.footerWidget === this) {\n this.page.footerWidget = undefined;\n }\n this.page = undefined;\n }\n }\n this.destroy();\n };\n BodyWidget.prototype.destroy = function () {\n // if (this.sectionFormatIn) {\n // this.sectionFormatIn.destroy();\n // }\n this.sectionFormatIn = undefined;\n if (this.page && this.page.headerWidgetIn) {\n this.page.headerWidgetIn.page = undefined;\n }\n if (this.page && this.page.footerWidgetIn) {\n this.page.footerWidgetIn.page = undefined;\n }\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n BodyWidget.prototype.componentDestroy = function () {\n _super.prototype.componentDestroy.call(this);\n };\n return BodyWidget;\n}(BlockContainer));\nexport { BodyWidget };\n/**\n * @private\n */\nvar HeaderFooterWidget = /** @class */ (function (_super) {\n __extends(HeaderFooterWidget, _super);\n function HeaderFooterWidget(type) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.isEmpty = false;\n _this.headerFooterType = type;\n return _this;\n }\n HeaderFooterWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i] instanceof TableWidget) {\n var child = this.childWidgets[i];\n var tableWidth = 0;\n if (child.wrapTextAround) {\n tableWidth = child.getTableCellWidth();\n }\n if (!(child.wrapTextAround) && child.y <= point.y && (child.y + child.height) >= point.y) {\n return child.getTableCellWidget(point);\n }\n if ((child.wrapTextAround &&\n (child.x <= point.x && (child.x + tableWidth) >= point.x &&\n child.y <= point.y && (child.y + child.height) >= point.y))) {\n return child.getTableCellWidget(point);\n }\n }\n }\n var tableCell = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= point.y) {\n tableCell = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n tableCell = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return tableCell;\n };\n HeaderFooterWidget.prototype.equals = function (widget) {\n // Todo: Need to work\n return widget instanceof HeaderFooterWidget\n && widget.containerWidget === this.containerWidget;\n };\n HeaderFooterWidget.prototype.clone = function () {\n var headerFooter = new HeaderFooterWidget(this.headerFooterType);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n headerFooter.childWidgets.push(block);\n block.index = i;\n block.containerWidget = headerFooter;\n }\n headerFooter.isEmpty = this.isEmpty;\n headerFooter.x = this.x;\n headerFooter.y = this.y;\n headerFooter.height = 0;\n headerFooter.width = 0;\n return headerFooter;\n };\n HeaderFooterWidget.prototype.destroyInternal = function (viewer) {\n this.page = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n HeaderFooterWidget.prototype.componentDestroy = function () {\n _super.prototype.componentDestroy.call(this);\n this.parentHeaderFooter = undefined;\n };\n return HeaderFooterWidget;\n}(BlockContainer));\nexport { HeaderFooterWidget };\n/**\n * @private\n */\nvar BlockWidget = /** @class */ (function (_super) {\n __extends(BlockWidget, _super);\n function BlockWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.isLayouted = false;\n /**\n * @private\n */\n _this.isFieldCodeBlock = false;\n /**\n * @private\n */\n _this.locked = false;\n /**\n * @private\n */\n _this.lockedBy = '';\n return _this;\n }\n Object.defineProperty(BlockWidget.prototype, \"bodyWidget\", {\n get: function () {\n var widget = this;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof TextFrame) {\n var paragraph = widget.containerWidget.containerShape.line.paragraph;\n if (paragraph) {\n return paragraph.bodyWidget;\n }\n }\n else if (widget.containerWidget instanceof BlockContainer) {\n return widget.containerWidget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"leftIndent\", {\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.leftIndent;\n }\n else if (blockAdv instanceof TableWidget && blockAdv.tableFormat instanceof WTableFormat) {\n return blockAdv.tableFormat.leftIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"rightIndent\", {\n get: function () {\n var blockAdv = this;\n if (blockAdv instanceof ParagraphWidget && blockAdv.paragraphFormat instanceof WParagraphFormat) {\n return blockAdv.paragraphFormat.rightIndent;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInsideTable\", {\n get: function () {\n return this.containerWidget instanceof TableCellWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"isInHeaderFooter\", {\n get: function () {\n return this.bodyWidget instanceof HeaderFooterWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BlockWidget.prototype, \"associatedCell\", {\n get: function () {\n if (this.containerWidget instanceof TableCellWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Check whether the paragraph contains only page break.\n *\n * @private\n * @returns {boolean}: Returns true if paragraph contains page break alone.\n */\n BlockWidget.prototype.isPageBreak = function () {\n var isPageBreak = false;\n if (this instanceof ParagraphWidget) {\n var paragraph = this;\n if (paragraph != null && paragraph.childWidgets.length === 1 &&\n paragraph.firstChild.children.length === 1) {\n var pageBreak = paragraph.firstChild.children[0];\n isPageBreak = pageBreak.isPageBreak;\n }\n }\n return isPageBreak;\n };\n BlockWidget.prototype.isColumnBreak = function () {\n var isColumnBreak = false;\n if (this instanceof ParagraphWidget) {\n var paragraph = this;\n if (paragraph != null && paragraph.childWidgets.length === 1 &&\n paragraph.firstChild.children.length === 1) {\n var columnBreak = paragraph.firstChild.children[0];\n isColumnBreak = columnBreak.isColumnBreak;\n }\n }\n return isColumnBreak;\n };\n BlockWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.containerWidget.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (!isNullOrUndefined(node.containerWidget)) {\n if (node.containerWidget instanceof TextFrame) {\n return node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n else if (node.containerWidget instanceof BlockWidget) {\n return node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n else if (node.containerWidget instanceof BlockContainer) {\n hierarchicalIndex = node.containerWidget.getHierarchicalIndex(hierarchicalIndex);\n }\n }\n return hierarchicalIndex;\n };\n BlockWidget.prototype.getIndex = function () {\n if (this instanceof ParagraphWidget || this instanceof TableWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n else if (this instanceof TableRowWidget) {\n return this.ownerTable.childWidgets.indexOf(this);\n }\n else if (this instanceof TableCellWidget) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return 0;\n };\n BlockWidget.prototype.getContainerWidth = function () {\n if (this.isInsideTable) {\n var block = this;\n if ((block instanceof TableWidget) && block.tableFormat.preferredWidthType === 'Auto' && this.associatedCell.ownerTable.isGridUpdated) {\n var containerWidth = 0;\n var columnSpan = this.associatedCell.cellFormat.columnSpan;\n var columnIndex = this.associatedCell.columnIndex;\n for (var i = 0; i < columnSpan; i++) {\n containerWidth += this.associatedCell.ownerTable.tableHolder.columns[columnIndex].preferredWidth;\n columnIndex++;\n }\n if (containerWidth > 0) {\n return containerWidth;\n }\n }\n return this.associatedCell.getCellWidth(this);\n }\n if (this.containerWidget instanceof TextFrame) {\n var shape = this.containerWidget.containerShape;\n return HelperMethods.convertPixelToPoint(shape.width) - HelperMethods.convertPixelToPoint(shape.textFrame.marginLeft)\n - HelperMethods.convertPixelToPoint(shape.textFrame.marginRight);\n }\n else {\n var bodyWidget = this.bodyWidget;\n var sectionFormat = bodyWidget.sectionFormat;\n var padding = 0;\n if (!isNullOrUndefined(bodyWidget.page) && !isNullOrUndefined(bodyWidget.page.documentHelper) &&\n bodyWidget.page.documentHelper.compatibilityMode !== 'Word2013' && !this.isInsideTable && this instanceof TableWidget) {\n var firstRow = this.firstChild;\n padding = firstRow.firstChild.leftMargin + (firstRow).lastChild.rightMargin;\n }\n if (bodyWidget instanceof BodyWidget && sectionFormat.columns.length > 1) {\n var colIndex = bodyWidget.columnIndex;\n return HelperMethods.convertPixelToPoint(sectionFormat.columns[colIndex].width);\n }\n else {\n return sectionFormat.pageWidth - (sectionFormat.leftMargin + sectionFormat.rightMargin) + padding;\n }\n }\n };\n Object.defineProperty(BlockWidget.prototype, \"bidi\", {\n get: function () {\n if (this instanceof ParagraphWidget && this.paragraphFormat instanceof WParagraphFormat) {\n return this.paragraphFormat.bidi;\n }\n if (this instanceof TableWidget && this.tableFormat instanceof WTableFormat) {\n return this.tableFormat.bidi;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n BlockWidget.prototype.componentDestroy = function () {\n _super.prototype.componentDestroy.call(this);\n this.contentControlProperties = undefined;\n };\n return BlockWidget;\n}(Widget));\nexport { BlockWidget };\n/**\n * @private\n */\nvar FootNoteWidget = /** @class */ (function (_super) {\n __extends(FootNoteWidget, _super);\n function FootNoteWidget() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.bodyWidgets = [];\n return _this;\n }\n FootNoteWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n throw new Error('Method not implemented.');\n };\n FootNoteWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n FootNoteWidget.prototype.equals = function (widget) {\n // Todo: Need to work\n return widget instanceof FootNoteWidget\n && widget.containerWidget === this.containerWidget;\n };\n FootNoteWidget.prototype.clone = function () {\n var footNote = new FootNoteWidget();\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n footNote.childWidgets.push(block);\n block.index = i;\n block.containerWidget = footNote;\n }\n footNote.block = this.block;\n return footNote;\n };\n FootNoteWidget.prototype.destroyInternal = function (viewer) {\n this.block = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n FootNoteWidget.prototype.componentDestroy = function () {\n if (this.bodyWidgets && this.bodyWidgets.length > 0) {\n for (var i = 0; i < this.bodyWidgets.length; i++) {\n var bodyWidget = this.bodyWidgets[i];\n bodyWidget.componentDestroy();\n }\n this.bodyWidgets = [];\n }\n this.bodyWidgets = undefined;\n this.block = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return FootNoteWidget;\n}(BlockContainer));\nexport { FootNoteWidget };\n/**\n * @private\n */\nvar ParagraphWidget = /** @class */ (function (_super) {\n __extends(ParagraphWidget, _super);\n /**\n * Initialize the constructor of ParagraphWidget\n */\n function ParagraphWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.isSectionBreak = false;\n /**\n * @private\n */\n _this.isChangeDetected = false;\n /**\n * @private\n * The clientX having previous left value of empty paragraph\n */\n _this.clientX = undefined;\n /**\n * @private\n */\n _this.floatingElements = [];\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n Object.defineProperty(ParagraphWidget.prototype, \"isEndsWithPageBreak\", {\n get: function () {\n if (this.childWidgets.length > 0) {\n return this.lastChild.isEndsWithPageBreak;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ParagraphWidget.prototype, \"isEndsWithColumnBreak\", {\n get: function () {\n if (this.childWidgets.length > 0) {\n return this.lastChild.isEndsWithColumnBreak;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n ParagraphWidget.prototype.equals = function (widget) {\n return widget instanceof ParagraphWidget && widget.paragraphFormat === this.paragraphFormat;\n };\n ParagraphWidget.prototype.isContainsShapeAlone = function () {\n var containsShape = false;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var lineWidget = this.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (!(inline instanceof ShapeBase) || (inline instanceof ShapeBase && inline.textWrappingStyle === 'Inline')) {\n return false;\n }\n else {\n containsShape = true;\n }\n }\n }\n return containsShape ? true : false;\n };\n ParagraphWidget.prototype.isEmpty = function () {\n if (isNullOrUndefined(this.childWidgets) || this.childWidgets.length === 0) {\n return true;\n }\n for (var j = 0; j < this.childWidgets.length; j++) {\n var inlineElement = this.childWidgets[j];\n for (var i = 0; i < inlineElement.children.length; i++) {\n var inline = inlineElement.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || inline instanceof EditRangeEndElementBox || inline instanceof EditRangeStartElementBox\n || inline instanceof ChartElementBox || inline instanceof ShapeElementBox\n || inline instanceof ContentControl\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return false;\n }\n }\n }\n return true;\n };\n ParagraphWidget.prototype.getInline = function (offset, indexInInline) {\n var inline = undefined;\n var count = 0;\n var isStarted = false;\n var splittedWidget = this.getSplitWidgets();\n for (var k = 0; k < splittedWidget.length; k++) {\n var widget = splittedWidget[k];\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n inline = line.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || inline instanceof ShapeElementBox\n || inline instanceof BookmarkElementBox || inline instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inline))\n || inline instanceof ChartElementBox) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inline.length) {\n indexInInline = (offset - count);\n return { 'element': inline, 'index': indexInInline };\n }\n count += inline.length;\n }\n }\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inline) ? offset : inline.length;\n }\n return { 'element': inline, 'index': indexInInline };\n };\n ParagraphWidget.prototype.getLength = function () {\n var length = 0;\n if (isNullOrUndefined(this.childWidgets)) {\n return length;\n }\n for (var j = 0; j < this.childWidgets.length; j++) {\n var line = this.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n length += element.length;\n }\n }\n return length;\n };\n /**\n * Return the total length by considering splitted paragraph widgets.\n * @private\n */\n ParagraphWidget.prototype.getTotalLength = function () {\n var offset = 0;\n var splittedWidget = this.getSplitWidgets();\n for (var i = 0; i < splittedWidget.length; i++) {\n offset += splittedWidget[i].getLength();\n }\n return offset;\n };\n ParagraphWidget.prototype.getTableCellWidget = function (point) {\n return undefined;\n };\n ParagraphWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n minimumWordWidth = HelperMethods.convertPointToPixel(minimumWordWidth);\n maximumWordWidth = HelperMethods.convertPointToPixel(maximumWordWidth);\n if (this.childWidgets.length > 0) {\n var element = this.childWidgets[0].children[0];\n var text = '';\n var elements = new Dictionary();\n var imageWidths = [];\n do {\n if (element instanceof TextElementBox && element.text !== '') {\n elements.add(element, text.length);\n text += (element.text);\n }\n else if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldBegin = element;\n if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n element = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n else if (element instanceof ImageElementBox) {\n imageWidths.push(element.width);\n }\n if (isNullOrUndefined(element) || isNullOrUndefined(element.nextNode)) {\n break;\n }\n element = element.nextNode;\n } while (true);\n var pattern = new RegExp('\\\\b\\\\w+\\\\b', 'g');\n var matches = [];\n var matchInfo = void 0;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = pattern.exec(text))) {\n matches.push(matchInfo);\n }\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i];\n var width = 0;\n text = '';\n var matchedValue = '';\n var wordStartIndex = 0;\n var wordEndIndex = match.index;\n var index = match.index;\n for (var j = 0; j < elements.keys.length; j++) {\n var span = elements.keys[j];\n var startIndex = elements.get(span);\n var spanLength = span.length;\n if (index <= startIndex + spanLength) {\n wordStartIndex = index - startIndex;\n if (match.index + match[0].length <= startIndex + spanLength) {\n wordEndIndex = (match.index + match[0].length) - (startIndex + wordStartIndex);\n }\n else {\n wordEndIndex = spanLength - wordStartIndex;\n index += wordEndIndex;\n }\n text = span.text.substring(wordStartIndex, wordStartIndex + wordEndIndex);\n matchedValue = matchedValue + text;\n }\n if (text !== '') {\n width += this.bodyWidget.page.documentHelper.textHelper.getWidth(text, span.characterFormat, span.scriptType);\n }\n if (matchedValue === match[0]) {\n break;\n }\n }\n if (width !== 0) {\n if (minimumWordWidth === 0 || width > minimumWordWidth) {\n minimumWordWidth = width;\n }\n }\n }\n // Check the image widths present in the paragraph. Consider the maximum image width as minimum word width.\n var imageWidth = 0;\n if (imageWidths.length > 0) {\n imageWidth = Math.max.apply(null, imageWidths);\n }\n if (minimumWordWidth === 0 || imageWidth > minimumWordWidth) {\n minimumWordWidth = imageWidth;\n }\n var maximum = this.measureParagraph();\n if (maximumWordWidth === 0 || maximum > maximumWordWidth) {\n maximumWordWidth = maximum;\n }\n }\n var leftIndent = 0;\n if (!this.isEmpty() && this.floatingElements.length == 0 && !isNullOrUndefined(this.paragraphFormat) && this.paragraphFormat.leftIndent > 0\n && !isNullOrUndefined(this.associatedCell) && !isNullOrUndefined(this.associatedCell.cellFormat) && this.associatedCell.cellFormat.preferredWidthType === 'Point') {\n var paraIndent = this.paragraphFormat.leftIndent + this.paragraphFormat.firstLineIndent;\n if ((paraIndent + minimumWordWidth) > this.associatedCell.cellFormat.preferredWidth) {\n leftIndent = paraIndent;\n }\n }\n return {\n 'maximumWordWidth': HelperMethods.convertPixelToPoint(maximumWordWidth),\n 'minimumWordWidth': HelperMethods.convertPixelToPoint(minimumWordWidth) + leftIndent\n };\n };\n ParagraphWidget.prototype.measureParagraph = function () {\n var width = 0;\n var element = this.childWidgets[0].children[0];\n do {\n if (element instanceof TextElementBox && element.text !== '') {\n width += this.bodyWidget.page.documentHelper.textHelper.getWidth(element.text, element.characterFormat, element.scriptType);\n }\n else if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldBegin = element;\n if (fieldBegin.fieldEnd != null) {\n element = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n else if (element instanceof ImageElementBox) {\n width += element.width;\n }\n if (isNullOrUndefined(element) || isNullOrUndefined(element.nextNode)) {\n break;\n }\n element = element.nextNode;\n } while (true);\n // Considered the left and right indent.\n if (this.leftIndent > 0) {\n width += this.leftIndent;\n }\n if (this.rightIndent > 0) {\n width += this.rightIndent;\n }\n return width;\n };\n ParagraphWidget.prototype.isArabicChar = function (character) {\n //Arabic characters https://en.wikipedia.org/wiki/Arabic_script#Unicode\n return ((character >= String.fromCharCode(1536) && character <= String.fromCharCode(1791)) //Script-Arab, Arabic characters https://en.wikipedia.org/wiki/Arabic_(Unicode_block)\n || (character >= String.fromCharCode(1872) && character <= String.fromCharCode(1919)) //Script-Arab, Arabic Supplement characters https://en.wikipedia.org/wiki/Arabic_Supplement\n || (character >= String.fromCharCode(2208) && character <= String.fromCharCode(2303)) //Script-Arab, Arabic Extended-A characters https://en.wikipedia.org/wiki/Arabic_Extended-A\n || (character >= String.fromCharCode(64336) && character <= String.fromCharCode(65023)) //Script-Arab, Arabic Presentation Forms-A characters https://en.wikipedia.org/wiki/Arabic_Presentation_Forms-A\n || (character >= String.fromCharCode(65136) && character <= String.fromCharCode(65279))); //Script-Arab, Arabic Presentation Forms-B characters https://en.wikipedia.org/wiki/Arabic_Presentation_Forms-B \n };\n ParagraphWidget.prototype.isHebrewChar = function (character) {\n return ((character >= String.fromCharCode(1424) && character <= String.fromCharCode(1535)) //Script-Hebr, Hebrew characters https://en.wikipedia.org/wiki/Hebrew_alphabet#Unicode_and_HTML (https://en.wikipedia.org/wiki/Hebrew_(Unicode_block))\n || (character >= String.fromCharCode(64285) && character <= String.fromCharCode(64335))); //Script-Hebr, Hebrew Alphabetic Presentation Forms characters https://en.wikipedia.org/wiki/Alphabetic_Presentation_Forms \n };\n ParagraphWidget.prototype.isHindiChar = function (character) {\n //Hindi characters are comes under the Devanagari scripts.\n //The Unicode Standard defines three blocks for Devanagari. https://en.wikipedia.org/wiki/Devanagari#Unicode \n return ((character >= String.fromCharCode(2304) && character <= String.fromCharCode(2431)) //Devanagari (U+0900–U+097F), https://en.wikipedia.org/wiki/Devanagari_(Unicode_block)\n || (character >= String.fromCharCode(43232) && character <= String.fromCharCode(43263)) //Devanagari Extended (U+A8E0–U+A8FF), https://en.wikipedia.org/wiki/Devanagari_Extended\n || (character >= String.fromCharCode(7376) && character <= String.fromCharCode(7423))); //Vedic Extensions (U+1CD0–U+1CFF), https://en.wikipedia.org/wiki/Vedic_Extensions\n };\n ParagraphWidget.prototype.isKoreanChar = function (character) {\n return (\n //Korean characters https://en.wikipedia.org/wiki/Korean_language_and_computers#Hangul_in_Unicode\n (character >= String.fromCharCode(44032) && character <= String.fromCharCode(55203)) //Hangul Syllables characters https://en.wikipedia.org/wiki/Hangul_Syllables\n || (character >= String.fromCharCode(4352) && character <= String.fromCharCode(4607)) //Hangul Jamo characters https://en.wikipedia.org/wiki/Hangul_Jamo_(Unicode_block)\n || (character >= String.fromCharCode(12592) && character <= String.fromCharCode(12687)) //Hangul Compatibility Jamo characters https://en.wikipedia.org/wiki/Hangul_Compatibility_Jamo\n || (character >= String.fromCharCode(43360) && character <= String.fromCharCode(43391)) //Hangul Jamo Extended-A characters https://en.wikipedia.org/wiki/Hangul_Jamo_Extended-A\n || (character >= String.fromCharCode(55216) && character <= String.fromCharCode(55295)) //Hangul Jamo Extended-B characters https://en.wikipedia.org/wiki/Hangul_Jamo_Extended-B\n || (character >= String.fromCharCode(44032) && character <= String.fromCharCode(55215)) //Hangul_Syllables characters https://en.wikipedia.org/wiki/Hangul_Syllables\n );\n };\n ParagraphWidget.prototype.isJapanese = function (character) {\n return (\n //Japanese and Ainu languages\n (character >= String.fromCharCode(12448) && character <= String.fromCharCode(12543)) //Katakana characters https://en.wikipedia.org/wiki/Katakana_(Unicode_block)\n || (character >= String.fromCharCode(12352) && character <= String.fromCharCode(12447)) //Hiragana characters https://en.wikipedia.org/wiki/Hiragana_(Unicode_block)\n );\n };\n ParagraphWidget.prototype.isThaiCharacter = function (character) {\n // Thai characters https://en.wikipedia.org/wiki/Thai_script#Unicode_ranges \n return (character >= String.fromCharCode(3584) && character <= String.fromCharCode(3711));\n };\n ParagraphWidget.prototype.isChineseChar = function (character) {\n //To-Do: Should handle a Chinese characters as two separate scripts such as Chinese Simplified and Chinese Traditional.\n return (\n //Chinese characters https://en.wikipedia.org/wiki/Han_unification#Unicode_ranges\n //Chinese characters are comes under the Han script.\n (character >= String.fromCharCode(19968) && character <= String.fromCharCode(40959)) //CJK Unified Ideographs(4E00–9FFF), https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_(Unicode_block)\n || (character >= String.fromCharCode(13312) && character <= String.fromCharCode(19903)) //CJK Unified Ideographs Extension A(3400–4DBF), https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_Extension_A\n //|| (character >= '\\u20000' && character <= '\\u2A6DF') //CJK Unified Ideographs Extension B(20000–2A6DF), https://en.wikipedia.org/wiki/CJK_Unified_Ideographs_Extension_B\n // As we don't hold a 32 bit character into char data type, and also it get splitted into two char value, when it is 32 bit.\n // So, below we have added a maximum and least char range of the above 32 bit character.\n // We can split a 32 bit character into two 16 bit characters by \"Char.ConvertFromUtf32(0x20000).ToCharArray()\" built-in method.\n || (character >= String.fromCharCode(55360) && character <= String.fromCharCode(55401)) // Represents a start and end range of first character code, when we split a character between (character >= '\\u20000' && character <= '\\u2A6DF').\n || (character >= String.fromCharCode(56320) && character <= String.fromCharCode(57055)) // Represents a start and end range of second character code, when we split a character between (character >= '\\u20000' && character <= '\\u2A6DF').\n || (character >= String.fromCharCode(43360) && character <= String.fromCharCode(43391)) //CJK Compatibility Ideographs(F900–FAFF), https://en.wikipedia.org/wiki/CJK_Compatibility_Ideographs\n || (character >= String.fromCharCode(65280) && character <= String.fromCharCode(65519)) //Halfwidth and Fullwidth Forms, https://en.wikipedia.org/wiki/Halfwidth_and_Fullwidth_Forms_(Unicode_block).\n || (character >= String.fromCharCode(12288) && character <= String.fromCharCode(12351)) //CJK Symbols and Punctuation, https://en.wikipedia.org/wiki/CJK_Symbols_and_Punctuation\n );\n };\n ParagraphWidget.prototype.getFontScriptType = function (inputCharacter) {\n // Return FontScriptType as Hindi, if input character is in-between Hindi character ranges.\n if (this.isHindiChar(inputCharacter))\n return FontScriptType.Hindi;\n // Return FontScriptType as Korean, if input character is in-between Korean character ranges.\n else if (this.isKoreanChar(inputCharacter))\n return FontScriptType.Korean;\n // Return FontScriptType as Japanese, if input character is in-between Japanese character ranges.\n else if (this.isJapanese(inputCharacter))\n return FontScriptType.Japanese;\n // Return FontScriptType as Chinese, if input character is in-between Chinese character ranges.\n else if (this.isChineseChar(inputCharacter))\n return FontScriptType.Chinese;\n // Return FontScriptType as Arabic, if input character is in-between Arabic character ranges.\n else if (this.isArabicChar(inputCharacter))\n return FontScriptType.Arabic;\n // Return FontScriptType as Hebrew, if input character is in-between Hebrew character ranges.\n else if (this.isHebrewChar(inputCharacter))\n return FontScriptType.Hebrew;\n // Return FontScriptType as Thai, if input character is in-between Thai character ranges.\n else if (this.isThaiCharacter(inputCharacter))\n return FontScriptType.Thai;\n // Return FontScriptType as English, for remaining character ranges.\n else\n return FontScriptType.English;\n };\n ParagraphWidget.prototype.splitTextByFontScriptType = function (inputText, fontScriptTypes) {\n var splittedText = [];\n //Retrun the empty array, if input text is Null or Empty.\n if (isNullOrUndefined(inputText)\n || (!isNullOrUndefined(inputText) && inputText === '')) {\n return splittedText;\n }\n var text = '';\n var prevCharacterType = FontScriptType.English;\n var currCharacterType = FontScriptType.English;\n // Regex for finding a string is unicode or not.\n var surrogateRegex = /[\\uD800-\\uDFFF]/;\n for (var i = 0; i < inputText.length; i++) {\n // Gets a FontScriptType for the current character.\n // As per the Microsoft application behavior, we need to consider a space (\\u0020) as previous character type.\n // So, that we can avoid a text splitting based on space character.\n if (inputText[i] != String.fromCharCode(32) && !surrogateRegex.test(inputText[i])) {\n // && !(char.IsHighSurrogate(inputText.charAt(i)) || char.IsLowSurrogate(inputText.charAt(i)))) { //Skip the setting of script type for surrogate character.\n currCharacterType = this.getFontScriptType(inputText[i]);\n }\n //Add a current text into splitted text collection, when previous character type is not equival to current type.\n if (text != '' && currCharacterType !== prevCharacterType) {\n //Add splitted text and it's FontScriptType into the collection.\n splittedText.push(text);\n fontScriptTypes.push(prevCharacterType);\n //Reset the text value.\n text = '';\n }\n //Add a current character.\n text += inputText[i];\n //Assign a current character type as previous type.\n prevCharacterType = currCharacterType;\n }\n //Add a final text.\n if (text != '') {\n //Add splitted text and it's FontScriptType into the collection.\n splittedText.push(text);\n fontScriptTypes.push(currCharacterType);\n //Reset the text value.\n text = '';\n }\n return splittedText;\n };\n ParagraphWidget.prototype.splitTextRangeByScriptType = function (lineIndex) {\n var isField = false;\n var iIncrementer = 1;\n // Iterates the items for textrange in the paragraph.\n if (this.childWidgets.length > 0) {\n var lineWidget = this.childWidgets[lineIndex];\n for (var i = lineIndex + 1; i < this.childWidgets.length; i++) {\n var nextLineWidget = this.childWidgets[i];\n for (var m = 0; m < nextLineWidget.children.length; m++) {\n var element = nextLineWidget.children[m];\n lineWidget.children.push(element);\n element.line = lineWidget;\n }\n this.childWidgets.splice(i, 1);\n i--;\n }\n for (var i = 0; i < lineWidget.children.length; i += iIncrementer) {\n var elementBox = lineWidget.children[i];\n iIncrementer = 1;\n // InlineContentControl inlineContentControl = paraItems[i] as InlineContentControl;\n // if (inlineContentControl != null)\n // this.splitTextRangeByScriptType(inlineContentControl.ParagraphItems, splitter);\n ////Gets the span to split.\n var textElement = undefined;\n if (elementBox instanceof TextElementBox) {\n textElement = elementBox;\n }\n if (elementBox instanceof FieldElementBox && elementBox.fieldType == 0) {\n isField = true;\n }\n else if (elementBox instanceof FieldElementBox && elementBox.fieldType === 2) {\n isField = false;\n }\n if (textElement != undefined && !isField) {\n // let hasHintPath: boolean = textElement.characterFormat.IdctHint != FontHintType.Default;\n var fontScriptTypes = [];\n // Split a current text part text based on FontScriptType.\n var splitedTextCollection = this.splitTextByFontScriptType(textElement.text, fontScriptTypes);\n if (splitedTextCollection.length > 1) {\n for (var j = 0; j < splitedTextCollection.length; j++) {\n var text = splitedTextCollection[j];\n if (j > 0) {\n //Split text range.\n //Clone the source text range.\n var clonedtextElement = textElement.clone();\n clonedtextElement.text = text;\n //Sets a script type of WTextRange.\n clonedtextElement.scriptType = fontScriptTypes[j];\n //Insert the splitted text ranges in order.\n lineWidget.children.splice(i + j, 0, clonedtextElement);\n clonedtextElement.line = lineWidget;\n iIncrementer++;\n if (textElement.revisions.length > 0) {\n this.updateTextElementInRevisionRange(textElement, clonedtextElement);\n }\n }\n else {\n //Replace the source text range with splitted text.\n textElement.text = text;\n //Sets a script type of WTextRange.\n textElement.scriptType = fontScriptTypes[j];\n }\n }\n }\n else if (splitedTextCollection.length > 0) {\n //Sets a script type of WTextRange.\n textElement.scriptType = fontScriptTypes[0];\n }\n // Clear the FontScriptType collection.\n fontScriptTypes.length = 0;\n }\n }\n }\n };\n /**\n * @private\n */\n ParagraphWidget.prototype.splitLtrAndRtlText = function (lineIndex) {\n var isPrevLTRText = { value: null };\n var iIncrementer = 1;\n var hasRTLCharacter = { value: null };\n var characterRangeTypes = [];\n var isField = false;\n var documentHelper = this.bodyWidget.page.documentHelper;\n var textHelper = documentHelper.textHelper;\n if (this.childWidgets.length > 0) {\n var lineWidget = this.childWidgets[lineIndex];\n for (var i = 0; i < lineWidget.children.length; i += iIncrementer) {\n var elementBox = lineWidget.children[i];\n iIncrementer = 1;\n ////Gets the span to split.\n var textElement = undefined;\n if (elementBox instanceof TextElementBox) {\n textElement = elementBox;\n }\n if (elementBox instanceof FieldElementBox && elementBox.fieldType == 0) {\n isField = true;\n }\n else if (elementBox instanceof FieldElementBox && elementBox.fieldType === 2) {\n isField = false;\n }\n if (textElement != undefined && !isField) {\n var text = textElement.text;\n var isTextBidi = textElement.characterFormat.bidi;\n var isRTLLang = false;\n var charTypeIndex = characterRangeTypes.length;\n if (isTextBidi) {\n isRTLLang = textHelper.isRightToLeftLanguage(elementBox.characterFormat.localeIdBidi);\n }\n ////Split the text as consicutive LTR and RTL\n var splitedTextCollection = textHelper.splitTextByConsecutiveLtrAndRtl(text, isTextBidi, isRTLLang, characterRangeTypes, isPrevLTRText, hasRTLCharacter);\n if (splitedTextCollection.length > 1) {\n for (var j = 0; j < splitedTextCollection.length; j++) {\n text = splitedTextCollection[j];\n if (j > 0) {\n ////Clone the source span.\n var clonedTextElement = textElement.clone();\n clonedTextElement.text = text;\n clonedTextElement.characterRange = characterRangeTypes[j + charTypeIndex];\n ////Inert the splitted span in order.\n lineWidget.children.splice(i + j, 0, clonedTextElement);\n clonedTextElement.line = lineWidget;\n iIncrementer++;\n if (textElement.revisions.length > 0) {\n this.updateTextElementInRevisionRange(textElement, clonedTextElement);\n }\n }\n else {\n ////Replace the source span with splitted text.\n textElement.text = text;\n textElement.characterRange = characterRangeTypes[charTypeIndex];\n }\n }\n }\n else if (splitedTextCollection.length > 0) {\n textElement.characterRange = characterRangeTypes[charTypeIndex];\n }\n }\n }\n characterRangeTypes.length = 0;\n }\n };\n ParagraphWidget.prototype.updateTextElementInRevisionRange = function (inline, splittedElementBox) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var revision = inline.revisions[i];\n var inlineIndex = revision.range.indexOf(inline);\n revision.range.splice(inlineIndex + 1, 0, splittedElementBox);\n splittedElementBox.revisions.push(revision);\n splittedElementBox.removedIds = [];\n }\n };\n /**\n * Combine the spans by consecutive LTR and RTL texts.\n * @private\n */\n ParagraphWidget.prototype.combineconsecutiveRTL = function (lineIndex) {\n var isField = false;\n var documentHelper = this.bodyWidget.page.documentHelper;\n var textHelper = documentHelper.textHelper;\n for (var j = lineIndex; j < this.childWidgets.length; j++) {\n var lineWidget = this.childWidgets[j];\n for (var i = 0; i <= lineWidget.children.length - 2; i++) {\n var elementBox = lineWidget.children[i];\n if (elementBox instanceof FieldElementBox && elementBox.fieldType === 0) {\n isField = true;\n }\n else if (elementBox instanceof FieldElementBox && elementBox.fieldType === 2) {\n isField = false;\n }\n if (!isField && elementBox instanceof TextElementBox && lineWidget.children[i + 1] instanceof TextElementBox) {\n var currentTxtRange = elementBox;\n var nextTxtRange = lineWidget.children[i + 1];\n // Bug 866413: Here skipped the Hewbrew script type rtl text combining, because facing element left margin issue.\n if (((currentTxtRange.characterFormat.complexScript && currentTxtRange.scriptType == nextTxtRange.scriptType) || (currentTxtRange.characterFormat.bidi && currentTxtRange.scriptType !== FontScriptType.Hebrew\n && currentTxtRange.characterRange == CharacterRangeType.RightToLeft && nextTxtRange.characterRange == CharacterRangeType.RightToLeft)) &&\n currentTxtRange.text.length > 0 && nextTxtRange.text.length > 0 &&\n !textHelper.isWordSplitChar(currentTxtRange.text[currentTxtRange.text.length - 1]) && !textHelper.isWordSplitChar(nextTxtRange.text[0])\n && currentTxtRange.characterFormat.isEqualFormat(nextTxtRange.characterFormat) && this.compareRevisions(currentTxtRange.revisions, nextTxtRange.revisions)) {\n currentTxtRange.text = currentTxtRange.text + nextTxtRange.text;\n lineWidget.children.splice(i + 1, 1);\n i--;\n }\n else if (currentTxtRange.characterRange == CharacterRangeType.RightToLeft && nextTxtRange.characterRange == CharacterRangeType.RightToLeft &&\n currentTxtRange.text.length > 0 && nextTxtRange.text.length > 0 &&\n textHelper.isWordSplitChar(currentTxtRange.text[currentTxtRange.text.length - 1]) && textHelper.isWordSplitChar(nextTxtRange.text[0])\n && currentTxtRange.characterFormat.isEqualFormat(nextTxtRange.characterFormat) && this.compareRevisions(currentTxtRange.revisions, nextTxtRange.revisions)) {\n currentTxtRange.text = currentTxtRange.text + nextTxtRange.text;\n lineWidget.children.splice(i + 1, 1);\n i--;\n }\n }\n }\n }\n };\n ParagraphWidget.prototype.compareRevisions = function (revisionA, revisionB) {\n if (revisionA.length !== revisionB.length) {\n return false;\n }\n for (var i = 0; i < revisionA.length; i++) {\n if (revisionA[i] !== revisionB[i]) {\n return false;\n }\n }\n return true;\n };\n ParagraphWidget.prototype.clone = function () {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(this.paragraphFormat);\n paragraph.characterFormat.copyFormat(this.characterFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var line = this.childWidgets[i];\n var cloneLine = line.clone();\n paragraph.childWidgets.push(cloneLine);\n for (var j = 0; j < cloneLine.children.length; j++) {\n var element = cloneLine.children[j];\n if ((element instanceof ImageElementBox && element.textWrappingStyle !== 'Inline') || element instanceof ShapeElementBox) {\n paragraph.floatingElements.push(element);\n }\n }\n cloneLine.paragraph = paragraph;\n }\n paragraph.x = this.x;\n paragraph.y = this.y;\n paragraph.height = this.height;\n paragraph.width = this.width;\n paragraph['absoluteXPosition'] = isNullOrUndefined(this['absoluteXPosition']) ? undefined : { 'width': this['absoluteXPosition']['width'], 'x': this['absoluteXPosition']['x'] };\n if (this.contentControlProperties) {\n paragraph.contentControlProperties = this.contentControlProperties;\n }\n return paragraph;\n };\n ParagraphWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroy();\n if (this.childWidgets.length === 1 && isNullOrUndefined(this.childWidgets[0].children)) {\n this.childWidgets = undefined;\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget) && !isNullOrUndefined(this.containerWidget.childWidgets)\n && this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n this.containerWidget = undefined;\n }\n if (this.hasOwnProperty('absoluteXPosition')) {\n delete this['absoluteXPosition'];\n }\n this.destroy();\n };\n ParagraphWidget.prototype.destroy = function () {\n // if (this.paragraphFormat) {\n // this.paragraphFormat.destroy();\n // }\n this.paragraphFormat = undefined;\n // if (this.characterFormat) {\n // this.characterFormat.destroy();\n // }\n this.characterFormat = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ParagraphWidget.prototype.componentDestroy = function () {\n if (this.paragraphFormat) {\n this.paragraphFormat.destroy();\n }\n this.paragraphFormat = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n }\n this.characterFormat = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return ParagraphWidget;\n}(BlockWidget));\nexport { ParagraphWidget };\n/**\n * @private\n */\nvar TablePosition = /** @class */ (function () {\n function TablePosition() {\n }\n /**\n * @private\n */\n TablePosition.prototype.clone = function () {\n var positioning = new TablePosition();\n positioning.allowOverlap = this.allowOverlap;\n positioning.distanceTop = this.distanceTop;\n positioning.distanceRight = this.distanceRight;\n positioning.distanceLeft = this.distanceLeft;\n positioning.distanceBottom = this.distanceBottom;\n positioning.verticalAlignment = this.verticalAlignment;\n positioning.verticalOrigin = this.verticalOrigin;\n positioning.verticalPosition = this.verticalPosition;\n positioning.horizontalAlignment = this.horizontalAlignment;\n positioning.horizontalOrigin = this.horizontalOrigin;\n positioning.horizontalPosition = this.horizontalPosition;\n return positioning;\n };\n return TablePosition;\n}());\nexport { TablePosition };\n/**\n * @private\n */\nvar TableWidget = /** @class */ (function (_super) {\n __extends(TableWidget, _super);\n function TableWidget() {\n var _this = _super.call(this) || this;\n _this.flags = 0;\n /**\n * @private\n */\n _this.leftMargin = 0;\n /**\n * @private\n */\n _this.topMargin = 0;\n /**\n * @private\n */\n _this.rightMargin = 0;\n /**\n * @private\n */\n _this.bottomMargin = 0;\n /**\n * @private\n */\n _this.isDefaultFormatUpdated = false;\n /**\n * @private\n */\n _this.isContainInsideTable = false;\n /**\n * @private\n */\n _this.footnoteElement = [];\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.tableFormat = new WTableFormat(_this);\n _this.tableHolder = new WTableHolder();\n _this.spannedRowCollection = new Dictionary();\n return _this;\n }\n Object.defineProperty(TableWidget.prototype, \"isGridUpdated\", {\n // /**\n // * @private\n // */\n // get length(): number {\n // if (!isNullOrUndefined(this.nextSplitWidget)) {\n // return 1;\n // } else {\n // if (isNullOrUndefined(this.previousSplitWidget)) {\n // return 1;\n // }\n // return 0;\n // }\n // }\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x4) >> 2) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFB) | ((value ? 1 : 0) << 2));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"continueHeader\", {\n /**\n * @private\n */\n get: function () {\n return ((this.flags & 0x2) >> 1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFD) | ((value ? 1 : 0) << 1));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"header\", {\n /**\n * @private\n */\n get: function () {\n return (this.flags & 0x1) !== 0;\n },\n /**\n * @private\n */\n set: function (value) {\n this.flags = ((this.flags & 0xFE) | (value ? 1 : 0));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableWidget.prototype, \"isBidiTable\", {\n get: function () {\n return ((this.flags & 0x10) >> 4) !== 0;\n },\n set: function (value) {\n this.flags = ((this.flags & 0xEF) | ((value ? 1 : 0) << 4));\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableWidget.prototype.equals = function (widget) {\n return widget instanceof TableWidget && widget.tableFormat === this.tableFormat;\n };\n /**\n * @private\n */\n TableWidget.prototype.combineRows = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (!isNullOrUndefined(row.firstChild) && row.firstChild.index !== 0 && row.getSplitWidgets().length === 1) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].index--;\n }\n }\n if (row.childWidgets.length === 0) {\n row.destroy();\n i--;\n }\n else {\n row.combineCells(viewer);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.contains = function (tableCell) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (this.equals(tableCell.ownerTable)) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return this.equals(tableCell.ownerTable);\n };\n /**\n * @private\n */\n TableWidget.prototype.getOwnerWidth = function (isBasedOnViewer) {\n var width = this.getContainerWidth();\n // Left and right indents should be neglected.\n width = width - this.leftIndent - this.rightIndent;\n return width >= 0 ? width : 0;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableWidth = function () {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidth = 0;\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n rowWidth += row.childWidgets[j].cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableCellWidth = function () {\n var width = 0;\n for (var k = 0; k < this.childWidgets.length; k++) {\n var rowWidth = 0;\n var rowWidget = this.childWidgets[k];\n for (var m = 0; m < rowWidget.childWidgets.length; m++) {\n var cellWidget = rowWidget.childWidgets[m];\n var cellWidth = cellWidget.width;\n if (cellWidth === 0) {\n cellWidth = cellWidget.cellFormat.cellWidth;\n if (cellWidth > cellWidget.cellFormat.preferredWidth &&\n cellWidget.cellFormat.preferredWidth !== 0 && cellWidget.cellFormat.preferredWidthType !== 'Percent') {\n cellWidth = cellWidget.cellFormat.preferredWidth;\n }\n cellWidth = HelperMethods.convertPointToPixel(cellWidth - (cellWidget.margin.left + cellWidget.margin.right));\n }\n rowWidth += (cellWidth + cellWidget.margin.left + cellWidget.margin.right);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableClientWidth = function (clientWidth) {\n var tableWidth = clientWidth;\n if (this.tableFormat.preferredWidthType === 'Point'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = this.tableFormat.preferredWidth;\n }\n else {\n if (this.tableFormat.preferredWidthType === 'Percent'\n && this.tableFormat.preferredWidth > 0) {\n tableWidth = tableWidth * this.tableFormat.preferredWidth / 100;\n }\n }\n return tableWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellWidth = function (preferredWidth, preferredWidthType, containerWidth, cell) {\n var cellWidth = preferredWidth;\n if (preferredWidthType === 'Percent') {\n cellWidth = (preferredWidth * containerWidth) / 100;\n }\n else if (preferredWidthType === 'Point') {\n cellWidth = preferredWidth;\n }\n // For grid before and grid after with auto width, no need to calculate minimum preferred width.\n else if (!isNullOrUndefined(cell)) {\n cellWidth = this.getMinimumPreferredWidth(cell);\n }\n return cellWidth;\n };\n TableWidget.prototype.getMinimumPreferredWidth = function (cell) {\n var defaultWidth = 0;\n ////For fixed table, cell width (grid column width) should be considered as default width, When the preferred cell width is zero.\n if (cell.cellFormat.preferredWidth === 0 && cell.cellFormat.cellWidth !== 0) {\n defaultWidth = cell.cellFormat.cellWidth;\n }\n else {\n defaultWidth = cell.getMinimumPreferredWidth();\n }\n return defaultWidth;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitCellsToClientArea = function (clientWidth) {\n var tableWidth = this.getTableWidth();\n var factor = clientWidth / tableWidth;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.rowFormat.gridAfterWidth *= factor;\n row.rowFormat.gridBeforeWidth *= factor;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].cellFormat.cellWidth *= factor;\n row.childWidgets[j].cellFormat.preferredWidth *= factor;\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getTableCellWidget = function (point) {\n var tableCellWidget = undefined;\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n tableCellWidget = this.childWidgets[i].getTableCellWidget(point);\n break;\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n /* eslint-disable */\n TableWidget.prototype.calculateGrid = function (isInsertRow) {\n var tempGrid = [];\n var tempSpanDecimal = [];\n var spannedCells = [];\n var containerWidth = this.getOwnerWidth(true);\n var tableWidth = this.getTableClientWidth(containerWidth);\n this.tableCellInfo = new Dictionary();\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowCellInfo = new Dictionary();\n var rowFormat = row.rowFormat;\n var cellWidth = 0;\n var columnSpan = row.rowFormat.gridBefore;\n var currOffset = 0;\n if (tempGrid.indexOf(currOffset) < 0) {\n tempGrid.push(currOffset);\n tempSpanDecimal.push(currOffset);\n }\n //Converts the row grid before width from point to twips point by 15 factor.\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, tableWidth, null);\n currOffset += cellWidth;\n var startOffset = parseFloat(currOffset.toFixed(2));\n if (tempGrid.indexOf(startOffset) < 0) {\n tempGrid.push(startOffset);\n tempSpanDecimal.push(currOffset);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < spannedCells.length; k++) {\n if (spannedCells[k].columnIndex < columnSpan) {\n continue;\n }\n var rowSpan = spannedCells[k].cellFormat.rowSpan;\n var removeSpannedCell = true;\n if (spannedCells[k].columnIndex > columnSpan) {\n {\n removeSpannedCell = false;\n // If the cell is the last cell in the row and the row has grid after value..\n if (j === row.childWidgets.length - 1 && row.rowFormat.gridAfter > 0) {\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n }\n }\n }\n else {\n // If the table gird alone calculted then column index of the rowspanned cell will be directly taken. \n // If the gird calculation is done from the UI level opearations such as resizing then table holder \n // will have the columns at that time we can get the column index from the table holder.\n //Converts the cell width from point to twips point by 15 factor.\n cellWidth = this.getCellWidth(spannedCells[k].cellFormat.preferredWidth, spannedCells[k].cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n columnSpan = spannedCells[k].columnIndex + spannedCells[k].cellFormat.columnSpan;\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - spannedCells[k].ownerRow.rowIndex === rowSpan - 1) {\n spannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (spannedCells.length === 0 || spannedCells[spannedCells.length - 1].columnIndex <= columnSpan) {\n spannedCells.push(cell);\n }\n else {\n for (var m = spannedCells.length; m > 0; m--) {\n if (spannedCells[m - 1].columnIndex > columnSpan) {\n spannedCells.splice(m - 1, 0, cell);\n }\n }\n }\n }\n // Add start offset of each cell based on its index\n if (!rowCellInfo.containsKey(cell.cellIndex)) {\n rowCellInfo.add(cell.cellIndex, parseFloat((currOffset - startOffset).toFixed(2)));\n }\n columnSpan += cell.cellFormat.columnSpan;\n //Converts the cell width from pixel to twips point by 15 factor.\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, null);\n currOffset += cellWidth;\n var offset = parseFloat(currOffset.toFixed(2));\n if (tempGrid.indexOf(offset) < 0) {\n tempGrid.push(offset);\n tempSpanDecimal.push(currOffset);\n }\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfter > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n currOffset += cellWidth;\n if (tempGrid.indexOf(parseFloat(currOffset.toFixed(2))) < 0) {\n tempGrid.push(parseFloat(currOffset.toFixed(2)));\n tempSpanDecimal.push(currOffset);\n }\n columnSpan += rowFormat.gridAfter;\n }\n // Add rowindex and its cells info for each row\n if (!this.tableCellInfo.containsKey(row.rowIndex)) {\n this.tableCellInfo.add(row.rowIndex, rowCellInfo);\n }\n }\n }\n tempGrid.sort(function (a, b) { return a - b; });\n tempSpanDecimal.sort(function (a, b) { return a - b; });\n if (this.tableHolder.columns.length > 0 && (tempGrid.length - 1 !== this.tableHolder.columns.length || isInsertRow)) {\n this.updateColumnSpans(tempGrid, tableWidth, tempSpanDecimal);\n }\n this.tableCellInfo.clear();\n this.tableCellInfo = undefined;\n };\n TableWidget.prototype.updateColumnSpans = function (tempGrid, containerWidth, tempSpan) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n if (row.rowFormat.gridBeforeWidth >= 0) {\n row.rowFormat.gridBefore = row.getGridCount(tempGrid, undefined, -1, containerWidth, tempSpan);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnSpan = row.getGridCount(tempGrid, cell, cell.getIndex(), containerWidth, tempSpan);\n if (columnSpan > 0 && cell.cellFormat.columnSpan !== columnSpan) {\n cell.cellFormat.columnSpan = columnSpan;\n }\n }\n if (row.rowFormat.gridAfterWidth >= 0) {\n row.rowFormat.gridAfter = row.getGridCount(tempGrid, undefined, row.childWidgets.length, containerWidth, tempSpan);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n this.checkTableColumns();\n var isAllColumnHasPointWidth = this.tableHolder.isAllColumnHasPointWidthType();\n var tableWidth = isAllColumnHasPointWidth ? this.tableHolder.getTotalWidth(0) : this.tableHolder.getTotalWidth(1);\n if (tableWidth > minimumWordWidth) {\n minimumWordWidth = tableWidth;\n }\n if (!isAllColumnHasPointWidth) {\n tableWidth = this.tableHolder.getTotalWidth(2);\n }\n if (tableWidth > maximumWordWidth) {\n maximumWordWidth = tableWidth;\n }\n return { 'minimumWordWidth': minimumWordWidth, 'maximumWordWidth': maximumWordWidth };\n };\n /**\n * @private\n */\n TableWidget.prototype.checkTableColumns = function () {\n if (this.isGridUpdated) {\n return;\n }\n var isAutoFit = this.isAutoFit();\n if (isAutoFit || this.tableHolder.columns.length === 0) {\n this.buildTableColumns();\n }\n this.isGridUpdated = false;\n };\n /**\n * @private\n */\n TableWidget.prototype.isAutoFit = function () {\n var bodyWidget = this.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && !isNullOrUndefined(bodyWidget.page)) {\n return bodyWidget.page.documentHelper.layout.getParentTable(this).tableFormat.allowAutoFit;\n }\n return false;\n };\n /**\n * @private\n */\n TableWidget.prototype.buildTableColumns = function () {\n if (this.isGridUpdated) {\n return;\n }\n // Clear existing columns in order to start creating columns freshly.\n this.tableHolder.resetColumns();\n var containerWidth = 0;\n var tableWidth = 0;\n var rowSpannedCells = [];\n var isAutoWidth = this.tableFormat.preferredWidthType === 'Auto';\n var isAutoFit = this.tableFormat.allowAutoFit;\n // For continuous layout, window width should be considered. \n // If preferred width exceeds this limit, it can take upto maximum of 2112 pixels (1584 points will be assigned by Microsoft Word).\n if (((!isNullOrUndefined(this.bodyWidget.page)) && this.bodyWidget.page.viewer instanceof WebLayoutViewer && isAutoFit && !this.isInsideTable && !(this.containerWidget instanceof TextFrame))) {\n containerWidth = HelperMethods.convertPixelToPoint(this.bodyWidget.page.viewer.clientArea.width - this.bodyWidget.page.viewer.padding.right * 3);\n }\n else {\n containerWidth = this.getOwnerWidth(true);\n }\n containerWidth = (this.tableFormat.preferredWidth > containerWidth) ? this.tableFormat.preferredWidth : containerWidth;\n var isZeroWidth = (isAutoWidth && this.tableFormat.preferredWidth === 0 && !isAutoFit);\n tableWidth = this.getTableClientWidth(containerWidth);\n var pageContainerWidth = this.getContainerWidth();\n if (isZeroWidth && !this.isDefaultFormatUpdated && isAutoFit) {\n this.splitWidthToTableCells(tableWidth, isZeroWidth);\n }\n var hasSpannedCells = false;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowFormat = row.rowFormat;\n var columnSpan = 0;\n var cellWidth = 0;\n var sizeInfo = new ColumnSizeInfo();\n var offset = 0;\n if (rowFormat.gridBefore > 0 && (row.rowFormat.beforeWidth !== 0 || row.rowFormat.gridBeforeWidth !== 0) && ((this.bodyWidget.page.documentHelper.alignTablesRowByRow) ? row.ownerTable.tableFormat.tableAlignment === 'Left' || (this.bodyWidget.page.documentHelper.compatibilityMode === 'Word2003' && row.ownerTable.firstChild.rowFormat.gridAfter > 0) : true)) {\n cellWidth = this.getCellWidth(rowFormat.gridBeforeWidth, row.rowFormat.gridAfterWidthType, tableWidth, null);\n sizeInfo.minimumWidth = cellWidth;\n this.tableHolder.addColumns(columnSpan, columnSpan = rowFormat.gridBefore, cellWidth, sizeInfo, offset = cellWidth, 'Point');\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.cellFormat.rowSpan > 1 || cell.cellFormat.columnSpan > 1) {\n hasSpannedCells = true;\n }\n if (rowSpannedCells.length === 0) {\n cell.columnIndex = columnSpan;\n }\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.columnIndex < columnSpan) {\n cell.columnIndex = columnSpan;\n continue;\n }\n var rowSpan = 1;\n var removeSpannedCell = true;\n rowSpan = rowSpannedCell.cellFormat.rowSpan;\n if (rowSpannedCell.columnIndex > columnSpan) {\n cell.columnIndex = columnSpan;\n removeSpannedCell = false;\n }\n else {\n sizeInfo = rowSpannedCell.getCellSizeInfo(isAutoFit);\n cellWidth = this.getCellWidth(rowSpannedCell.cellFormat.preferredWidth, rowSpannedCell.cellFormat.preferredWidthType, tableWidth, rowSpannedCell);\n // If the table gird alone calculated then column index of the rowspanned cell will be directly taken. \n // If the gird calculation is done from the UI level operations such as resizing then table holder will have the columns at that time we can get the column index from the table holder.\n if (this.tableHolder.columns.length > 0) {\n this.tableHolder.addColumns(columnSpan, columnSpan = this.tableHolder.columns.indexOf(rowSpannedCell.ownerColumn) + rowSpannedCell.cellFormat.columnSpan, cellWidth, sizeInfo, offset += cellWidth, cell.cellFormat.preferredWidthType);\n cell.columnIndex = columnSpan;\n }\n else {\n this.tableHolder.addColumns(columnSpan, columnSpan = rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan, cellWidth, sizeInfo, offset += cellWidth, cell.cellFormat.preferredWidthType);\n cell.columnIndex = columnSpan;\n }\n }\n if (!removeSpannedCell && j === row.childWidgets.length - 1) {\n removeSpannedCell = true;\n }\n if (removeSpannedCell && i - rowSpannedCell.ownerRow.rowIndex === rowSpan - 1) {\n rowSpannedCells.splice(k, 1);\n k--;\n }\n }\n // At the start of each row, we will process the row spanned cells to get the start column index.\n // To calculate grid properly, we need the items in the spanned cells collection in the order of their column index\n if (cell.cellFormat.rowSpan > 1) {\n if (rowSpannedCells.length === 0 || rowSpannedCells[rowSpannedCells.length - 1].columnIndex <= columnSpan) {\n rowSpannedCells.push(cell);\n }\n else {\n var insertIndex = 0;\n for (var m = rowSpannedCells.length; m > 0; m--) {\n if (rowSpannedCells[m - 1].columnIndex > columnSpan) {\n insertIndex = m - 1;\n }\n }\n rowSpannedCells.splice(insertIndex, 0, cell);\n }\n }\n sizeInfo = cell.getCellSizeInfo(isAutoFit);\n cellWidth = this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, tableWidth, cell);\n this.tableHolder.addColumns(columnSpan, columnSpan += cell.cellFormat.columnSpan, cellWidth, sizeInfo, offset += cellWidth, cell.cellFormat.preferredWidthType);\n if (j === row.childWidgets.length - 1 && rowFormat.gridAfterWidth > 0) {\n cellWidth = this.getCellWidth(rowFormat.gridAfterWidth, 'Point', tableWidth, null);\n sizeInfo.minimumWordWidth = sizeInfo.maximumWordWidth = sizeInfo.minimumWidth = cellWidth;\n this.tableHolder.addColumns(columnSpan, columnSpan += rowFormat.gridAfter, cellWidth, sizeInfo, offset += cellWidth, 'Point');\n }\n }\n }\n if (isZeroWidth && !this.isDefaultFormatUpdated) {\n this.isDefaultFormatUpdated = true;\n }\n this.tableHolder.validateColumnWidths();\n if (isAutoFit) {\n // Fits the column width automatically based on contents.\n this.tableHolder.autoFitColumn(containerWidth, tableWidth, isAutoWidth, this.isInsideTable, isAutoFit, hasSpannedCells, this.leftIndent + this.rightIndent, pageContainerWidth);\n }\n else {\n // Fits the column width based on preferred width. i.e. Fixed layout.\n this.tableHolder.fitColumns(containerWidth, tableWidth, isAutoWidth, isAutoFit, this.leftIndent + this.rightIndent);\n }\n // if (!isAutoFit && isAutoWidth) {\n // tableWidth = this.tableHolder.tableWidth;\n // }\n //Sets the width to cells\n this.setWidthToCells(tableWidth, isAutoWidth);\n };\n /**\n * @private\n */\n TableWidget.prototype.setWidthToCells = function (tableWidth, isAutoWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rw = this.childWidgets[i];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.beforeWidth = this.tableHolder.getCellWidth(0, rowFormat.gridBefore, tableWidth);\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[j];\n cell.cellFormat.cellWidth = this.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth);\n //By default, if cell preferred widthType is auto , width set based on table width and type is changed to 'Point'\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.afterWidth = this.tableHolder.getCellWidth(0, rowFormat.gridAfter, tableWidth);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.updateProperties = function (updateAllowAutoFit, currentSelectedTable, autoFitBehavior) {\n if (updateAllowAutoFit) {\n this.tableFormat.allowAutoFit = autoFitBehavior !== 'FixedColumnWidth';\n }\n if (this !== currentSelectedTable) {\n currentSelectedTable.updateProperties(false, currentSelectedTable, autoFitBehavior);\n return;\n }\n if (autoFitBehavior === 'FixedColumnWidth') {\n // Clear the table widths and set the preferred width for cells.\n this.tableFormat.preferredWidth = 0;\n this.tableFormat.preferredWidthType = 'Auto';\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidget = this.childWidgets[i];\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.cellFormat.preferredWidthType = 'Point';\n cellWidget.cellFormat.preferredWidth = cellWidget.cellFormat.cellWidth;\n }\n }\n }\n else if (autoFitBehavior === 'FitToWindow') {\n // Set the preferred width for table and cells in percentage.\n var tableWidth = this.tableHolder.getTotalWidth(0);\n this.tableFormat.leftIndent = 0;\n this.tableFormat.preferredWidth = 100;\n this.tableFormat.preferredWidthType = 'Percent';\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var z = 0; z < row.childWidgets.length; z++) {\n var cell = row.childWidgets[z];\n if (cell.cellFormat.preferredWidthType !== 'Percent') {\n cell.cellFormat.preferredWidthType = 'Percent';\n cell.cellFormat.preferredWidth = (cell.cellFormat.cellWidth / tableWidth) * 100;\n }\n }\n }\n }\n else {\n // Clear the preferred width for table and cells.\n this.tableFormat.preferredWidth = 0;\n this.tableFormat.preferredWidthType = 'Auto';\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.rowFormat.beforeWidth = 0;\n row.rowFormat.gridBefore = 0;\n row.rowFormat.gridBeforeWidth = 0;\n row.rowFormat.gridBeforeWidthType = 'Auto';\n row.rowFormat.afterWidth = 0;\n row.rowFormat.gridAfter = 0;\n row.rowFormat.gridAfterWidth = 0;\n row.rowFormat.gridAfterWidthType = 'Auto';\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n cell.cellFormat.preferredWidth = 0;\n cell.cellFormat.preferredWidthType = 'Auto';\n }\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getMaxRowWidth = function (clientWidth) {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += this.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, clientWidth, cell);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateWidth = function (dragValue) {\n var totalPreferredWidth = this.tableHolder.getTotalWidth(0);\n var ownerWidth = this.getOwnerWidth(true);\n var containerWidth = this.getTableClientWidth(ownerWidth);\n if (containerWidth <= totalPreferredWidth) {\n if (this.tableFormat.preferredWidthType === 'Auto') {\n this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (this.tableFormat.preferredWidthType !== 'Auto') {\n if (this.tableFormat.preferredWidthType === 'Point') {\n this.tableFormat.preferredWidth = this.getMaxRowWidth(containerWidth);\n }\n else { //ToDo:Need to analyze more the Percentage calculation for table width.\n var value = (totalPreferredWidth / ownerWidth) * 100;\n this.tableFormat.preferredWidth = value;\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.convertPointToPercent = function (tablePreferredWidth, ownerWidth) {\n var value = 0;\n value = (tablePreferredWidth / ownerWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n TableWidget.prototype.updateChildWidgetLeft = function (left, updateLeftIndent) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var rowWidget = this.childWidgets[i];\n rowWidget.x = left;\n rowWidget.updateChildWidgetLeft(left, updateLeftIndent);\n }\n };\n /**\n * Shift the widgets for right to left aligned table.\n * @private\n */\n TableWidget.prototype.shiftWidgetsForRtlTable = function (clientArea, tableWidget) {\n var clientAreaX = tableWidget.x;\n var clientAreaRight = clientArea.right;\n var cellSpace = 0;\n if (tableWidget.tableFormat && tableWidget.tableFormat.cellSpacing > 0) {\n cellSpace = tableWidget.tableFormat.cellSpacing;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n var rowX = rowWidget.x;\n var left = clientAreaRight - (rowX - clientAreaX);\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n left = left -\n (cellWidget.width + cellWidget.margin.left + cellWidget.margin.right - cellWidget.rightBorderWidth + cellSpace);\n cellWidget.updateWidgetLeft(left + cellWidget.margin.left);\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.clone = function () {\n var table = new TableWidget();\n table.tableHolder = this.tableHolder.clone();\n table.tableFormat.copyFormat(this.tableFormat);\n if (this.wrapTextAround) {\n table.wrapTextAround = this.wrapTextAround;\n table.positioning = this.positioning.clone();\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i].clone();\n table.childWidgets.push(row);\n row.containerWidget = table;\n row.index = i;\n }\n table.x = this.x;\n table.y = this.y;\n table.height = this.height;\n table.width = this.width;\n table.isBidiTable = this.isBidiTable;\n table.containerWidget = this.containerWidget;\n if (this.contentControlProperties) {\n table.contentControlProperties = this.contentControlProperties;\n }\n return table;\n };\n /**\n * @private\n */\n TableWidget.getTableOf = function (node) {\n if (node instanceof WBorders) {\n var row = TableRowWidget.getRowOf(node);\n if (!isNullOrUndefined(row)) {\n return row.ownerTable;\n }\n else if (node.ownerBase instanceof WTableFormat && node.ownerBase.ownerBase instanceof TableWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableWidget.prototype.fitChildToClientArea = function () {\n var clientWidth = this.getContainerWidth();\n if (Math.round(clientWidth) < Math.round(this.getTableWidth())) {\n this.fitCellsToClientArea(clientWidth);\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n if (cell.childWidgets[k] instanceof TableWidget) {\n cell.childWidgets[k].fitChildToClientArea();\n }\n }\n }\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getColumnCellsForSelection = function (startCell, endCell) {\n var cells = [];\n var start = startCell.columnIndex;\n var end = endCell.columnIndex + endCell.cellFormat.columnSpan;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var columnIndex = cell.columnIndex;\n var columnSpan = cell.cellFormat.columnSpan;\n if ((columnIndex + columnSpan > start && columnIndex + columnSpan < end) || (columnIndex > start && columnIndex < end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if ((columnIndex > start && columnIndex < end && columnIndex + columnSpan < end)\n || (columnIndex < start && columnIndex + columnSpan > end)) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n else if (columnIndex === start || columnIndex + columnSpan === end) {\n if (cells.indexOf(cell) < 0) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n /**\n * Splits width equally for all the cells.\n * @param tableClientWidth\n * @private\n */\n TableWidget.prototype.splitWidthToTableCells = function (tableClientWidth, isZeroWidth) {\n for (var row = 0; row < this.childWidgets.length; row++) {\n this.childWidgets[row].splitWidthToRowCells(tableClientWidth, isZeroWidth);\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.insertTableRowsInternal = function (tableRows, startIndex, isInsertRow) {\n for (var i = tableRows.length - 1; i >= 0; i--) {\n var row = tableRows.splice(i, 1)[0];\n row.containerWidget = this;\n this.childWidgets.splice(startIndex, 0, row);\n }\n this.updateRowIndex(startIndex);\n this.isGridUpdated = false;\n if (isInsertRow) {\n this.calculateGrid(true);\n this.buildTableColumns();\n }\n this.isGridUpdated = true;\n };\n /**\n * @private\n */\n TableWidget.prototype.updateRowIndex = function (startIndex) {\n for (var i = startIndex; i < this.childWidgets.length; i++) {\n var row = this.childWidgets[i];\n row.index = i;\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].index = j;\n row.childWidgets[j].rowIndex = row.rowIndex;\n }\n startIndex++;\n }\n };\n /**\n * @private\n */\n TableWidget.prototype.getCellStartOffset = function (cell) {\n var offset = 0;\n if (cell && this.tableCellInfo) {\n if (this.tableCellInfo.containsKey(cell.ownerRow.rowIndex)) {\n var rowCellInfo = this.tableCellInfo.get(cell.ownerRow.rowIndex);\n if (rowCellInfo.containsKey(cell.cellIndex)) {\n offset = rowCellInfo.get(cell.cellIndex);\n }\n }\n }\n return offset;\n };\n /**\n * @private\n */\n TableWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var j = 0; j < this.childWidgets.length; j++) {\n var widget = undefined;\n var childWidget = this.childWidgets[j];\n widget = childWidget;\n if (!isNullOrUndefined(widget)) {\n widget.destroyInternal(viewer);\n }\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n j--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (this.containerWidget instanceof BodyWidget) {\n if (this.containerWidget.floatingElements.indexOf(this) !== -1) {\n this.containerWidget.floatingElements.splice(this.containerWidget.floatingElements.indexOf(this), 1);\n }\n }\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n if (this.containerWidget.childWidgets.indexOf(this) !== -1) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n }\n this.containerWidget.height -= height;\n // if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n // && this.containerWidget instanceof BodyWidget) {\n // // (this.containerWidget as BodyWidget).destroyInternal(viewer);\n // }\n }\n this.containerWidget = undefined;\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableWidget.prototype.destroy = function () {\n // if (this.tableFormat) {\n // this.tableFormat.destroy();\n // }\n this.tableFormat = undefined;\n if (this.spannedRowCollection) {\n this.spannedRowCollection.destroy();\n }\n this.spannedRowCollection = undefined;\n // if (this.tableHolder) {\n // this.tableHolder.destroy();\n // }\n this.tableHolder = undefined;\n this.flags = undefined;\n this.leftMargin = undefined;\n this.topMargin = undefined;\n this.rightMargin = undefined;\n this.bottomMargin = undefined;\n this.headerHeight = undefined;\n this.isDefaultFormatUpdated = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n TableWidget.prototype.componentDestroy = function () {\n if (this.tableFormat) {\n this.tableFormat.destroy();\n }\n this.tableFormat = undefined;\n if (this.spannedRowCollection) {\n this.spannedRowCollection.destroy();\n }\n this.spannedRowCollection = undefined;\n if (this.tableHolder) {\n this.tableHolder.destroy();\n }\n this.tableHolder = undefined;\n this.flags = undefined;\n this.leftMargin = undefined;\n this.topMargin = undefined;\n this.rightMargin = undefined;\n this.bottomMargin = undefined;\n this.headerHeight = undefined;\n this.isDefaultFormatUpdated = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return TableWidget;\n}(BlockWidget));\nexport { TableWidget };\n/**\n * @private\n */\nvar TableRowWidget = /** @class */ (function (_super) {\n __extends(TableRowWidget, _super);\n function TableRowWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.isRenderBookmarkEnd = false;\n _this.topBorderWidth = 0;\n _this.bottomBorderWidth = 0;\n _this.rowFormat = new WRowFormat(_this);\n _this.editRangeID = new Dictionary();\n return _this;\n }\n Object.defineProperty(TableRowWidget.prototype, \"rowIndex\", {\n // /**\n // * @private\n // */\n // get length(): number {\n // if (!isNullOrUndefined(this.nextSplitWidget)) {\n // return 1;\n // } else {\n // if (isNullOrUndefined(this.previousSplitWidget)) {\n // return 1;\n // }\n // return 0;\n // }\n // }\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget) {\n return this.containerWidget.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableWidget) {\n return this.containerWidget;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableRowWidget.prototype, \"nextRow\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.ownerTable.childWidgets.length - 1) {\n return this.ownerTable.childWidgets[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableRowWidget.prototype.equals = function (widget) {\n return widget instanceof TableRowWidget && widget.rowFormat === this.rowFormat;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.combineCells = function (viewer) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n cell.combineWidget(viewer);\n if (!isNullOrUndefined(cell.cellFormat) && cell.cellFormat.rowSpan === 1) {\n var cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n if ((this.height - this.ownerTable.tableFormat.cellSpacing) < cell.height) {\n this.height = this.ownerTable.tableFormat.cellSpacing + cell.height;\n }\n }\n else if (isNullOrUndefined(cell.cellFormat)) {\n i--;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.getRowOf = function (node) {\n if (node instanceof WBorders) {\n var cell = TableCellWidget.getCellOf(node);\n if (!isNullOrUndefined(cell)) {\n return cell.ownerRow;\n }\n else if (node.ownerBase instanceof WRowFormat && node.ownerBase.ownerBase instanceof TableRowWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getCell = function (rowIndex, columnIndex, cellIndex) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n if (cell.rowIndex === rowIndex && (!isNullOrUndefined(cellIndex) ? cell.cellIndex === cellIndex : cell.columnIndex === columnIndex)) {\n return cell;\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getCellUsingColumnIndex = function (rowIndex, columnIndex) {\n var cell;\n for (var i = 0; i < this.childWidgets.length; i++) {\n cell = this.childWidgets[i];\n if (cell.rowIndex === rowIndex && cell.columnIndex === columnIndex) {\n return cell;\n }\n }\n cell = this.getCell(rowIndex, columnIndex);\n if (!isNullOrUndefined(cell)) {\n return cell;\n }\n return undefined;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.splitWidthToRowCells = function (tableClientWidth, isZeroWidth) {\n var cells = this.childWidgets;\n var cellWidth = tableClientWidth / cells.length;\n for (var cell = 0; cell < cells.length; cell++) {\n if (isZeroWidth && cells[cell].cellFormat.preferredWidth === 0) {\n cells[cell].cellFormat.preferredWidth = cellWidth;\n this.ownerTable.isDefaultFormatUpdated = false;\n }\n else if (isZeroWidth) {\n this.ownerTable.isDefaultFormatUpdated = true;\n break;\n }\n else {\n cells[cell].cellFormat.preferredWidth = cellWidth;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getGridCount = function (tableGrid, cell, index, containerWidth, tempSpan) {\n var prevOffset = 0;\n var width = 0;\n var ownerTable = this.ownerTable;\n var rowFormat = this.rowFormat;\n if (index === -1) {\n width = ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n }\n else {\n prevOffset += ownerTable.getCellWidth(rowFormat.gridBeforeWidth, rowFormat.gridBeforeWidthType, containerWidth, null);\n if (index >= 0) {\n prevOffset += ownerTable.getCellStartOffset(cell);\n }\n if (index < this.childWidgets.length) {\n width = ownerTable.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, containerWidth, null);\n }\n else {\n width = ownerTable.getCellWidth(rowFormat.gridAfterWidth, rowFormat.gridAfterWidthType, containerWidth, null);\n }\n }\n var tabIndex = tableGrid.indexOf(prevOffset);\n var tabGrid = tempSpan[tabIndex];\n var gridEndIndex;\n var gridStartIndex = this.getOffsetIndex(tableGrid, prevOffset);\n var gridWidth = parseFloat((width + prevOffset).toFixed(2));\n var gridDecimalWidth = parseFloat((width + tabGrid).toFixed(2));\n if (gridDecimalWidth !== gridWidth && !isNullOrUndefined(tabGrid)) {\n gridEndIndex = this.getOffsetIndex(tableGrid, tabGrid + width);\n }\n else {\n gridEndIndex = this.getOffsetIndex(tableGrid, prevOffset + width);\n }\n return gridEndIndex - gridStartIndex;\n };\n TableRowWidget.prototype.getOffsetIndex = function (tableGrid, offset) {\n offset = parseFloat(offset.toFixed(2));\n var index = 0;\n if (tableGrid.indexOf(offset) >= 0) {\n index = tableGrid.indexOf(offset);\n }\n else {\n for (var i = 0; i < tableGrid.length; i++) {\n if (tableGrid[i] > offset) {\n return i;\n }\n }\n index = tableGrid.length - 1;\n }\n return index;\n };\n TableRowWidget.prototype.getCellOffset = function (index, containerWidth) {\n var prevOffset = 0;\n var ownerTable = this.ownerTable;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cellFormat = this.childWidgets[i].cellFormat;\n if (i === index) {\n break;\n }\n prevOffset += ownerTable.getCellWidth(cellFormat.preferredWidth, cellFormat.preferredWidthType, containerWidth, null);\n }\n return prevOffset;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.updateRowBySpannedCells = function () {\n var rowSpannedCells = this.getPreviousRowSpannedCells();\n var currentRowIndex = this.rowIndex;\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCell = rowSpannedCells[i];\n var rowSpanEnd = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n // If current row is row span end or includes spanned cells. then, decrease the rowspan\n if (rowSpanEnd >= currentRowIndex) {\n spannedCell.cellFormat.rowSpan -= 1;\n }\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getPreviousRowSpannedCells = function (include) {\n var rowSpannedCells = [];\n var row = include ? this : this.previousWidget;\n while (!isNullOrUndefined(row)) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.splice(0, 0, cell);\n }\n }\n row = row.previousWidget;\n }\n return rowSpannedCells;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.isCellsHaveSameWidthUnit = function () {\n if (this.childWidgets.length > 0) {\n var firstCellWidthUnit = this.childWidgets[0].cellFormat.preferredWidthType;\n for (var i = 1; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n if (firstCellWidthUnit != cell.cellFormat.preferredWidthType) {\n return false;\n }\n }\n }\n return true;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.updateUniformWidthUnitForCells = function () {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n cell.cellFormat.preferredWidthType = \"Point\";\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var x = Math.round(this.childWidgets[i].x);\n if (x - this.childWidgets[i].margin.left - 1 <= point.x\n && (x + this.childWidgets[i].width) >= point.x) {\n return this.childWidgets[i];\n }\n else if (i === this.childWidgets.length - 1\n && (this.childWidgets[i].x + this.childWidgets[i].width) + 1 <= point.x) {\n return this.childWidgets[i];\n }\n }\n var cellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].x <= point.x) {\n cellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n cellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return cellWidget;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getFirstRowWidth = function () {\n var width = 0;\n for (var i = 0; i < this.childWidgets.length; i++) {\n width += this.childWidgets[i].getCellWidth(this.ownerTable);\n }\n return width;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getCellWidget = function (columnIndex, columnSpan) {\n var tableHolder = this.ownerTable.tableHolder;\n var index = tableHolder.getValidColumnIndex(columnIndex);\n if (index > columnIndex) {\n columnSpan -= index - columnIndex;\n columnIndex = index;\n }\n var colIndex = 0;\n if (this.rowFormat.gridBefore > 0) {\n colIndex += this.rowFormat.gridBefore;\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i];\n var colSpan = cell.cellFormat.columnSpan;\n if (colIndex < cell.columnIndex && (colIndex <= columnIndex || colIndex < columnIndex + columnSpan)\n && cell.columnIndex > columnIndex) {\n return null;\n }\n if ((cell.columnIndex <= columnIndex || cell.columnIndex < columnIndex + columnSpan)\n && cell.columnIndex + colSpan > columnIndex) {\n return cell;\n }\n else if (cell.columnIndex > columnIndex) {\n break;\n }\n colIndex += colSpan;\n }\n return null;\n };\n TableRowWidget.prototype.getVerticalMergeStartCell = function (columnIndex, columnSpan) {\n var columns = this.ownerTable.tableHolder.columns;\n if (this.rowFormat.gridBefore > 0 && this.rowFormat.gridBefore > columnIndex + columnSpan) {\n return null;\n }\n var matchedCell = this.getCellWidget(columnIndex, columnSpan);\n if (!isNullOrUndefined(matchedCell)) {\n return matchedCell;\n }\n if (columnIndex + this.rowFormat.gridAfter === columns.length) {\n return null;\n }\n var cell;\n var previousRow = this.previousWidget;\n if (!isNullOrUndefined(previousRow)) {\n //Gets the First intersecting cell from previous row\n cell = previousRow.getVerticalMergeStartCell(columnIndex, columnSpan);\n }\n if (!isNullOrUndefined(cell) && cell.cellFormat.rowSpan > 1 && this.index === cell.rowIndex + cell.cellFormat.rowSpan - 1) {\n return cell;\n }\n return null;\n };\n /**\n * @private\n */\n TableRowWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n return { 'minimumWordWidth': minimumWordWidth, 'maximumWordWidth': maximumWordWidth };\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroyInternal = function (viewer) {\n var height = this.height;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.destroyInternal(viewer);\n if (isNullOrUndefined(this.childWidgets)) {\n break;\n }\n i--;\n }\n this.childWidgets = undefined;\n }\n if (!isNullOrUndefined(this.containerWidget)) {\n if (!isNullOrUndefined(this.containerWidget.childWidgets)) {\n this.containerWidget.childWidgets.splice(this.containerWidget.childWidgets.indexOf(this), 1);\n if ((isNullOrUndefined(this.containerWidget.childWidgets) || this.containerWidget.childWidgets.length === 0)\n && this.containerWidget instanceof TableWidget) {\n this.containerWidget.destroyInternal(viewer);\n }\n else if (this.containerWidget.containerWidget instanceof BodyWidget) {\n this.containerWidget.containerWidget.height -= height;\n }\n this.containerWidget.height -= height;\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableRowWidget.prototype.clone = function () {\n var row = new TableRowWidget();\n row.rowFormat.copyFormat(this.rowFormat);\n row.topBorderWidth = this.topBorderWidth;\n row.bottomBorderWidth = this.bottomBorderWidth;\n row.isRenderBookmarkEnd = this.isRenderBookmarkEnd;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cell = this.childWidgets[i].clone();\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = i;\n cell.rowIndex = this.rowIndex;\n }\n row.x = this.x;\n row.y = this.y;\n row.height = this.height;\n row.width = this.width;\n if (this.contentControlProperties) {\n row.contentControlProperties = this.contentControlProperties;\n }\n return row;\n };\n /**\n * Updates the child widgets left.\n * @param left\n * @private\n */\n TableRowWidget.prototype.updateChildWidgetLeft = function (left, updateLeftIndent) {\n // TODO: Cell spacing calculation.\n var spacing = 0;\n if (this.ownerTable.tableFormat.cellSpacing > 0) {\n spacing = this.ownerTable.tableFormat.cellSpacing;\n }\n for (var i = 0; i < this.childWidgets.length; i++) {\n var cellWidget = this.childWidgets[i];\n left += spacing + cellWidget.margin.left;\n cellWidget.x = left;\n cellWidget.updateChildWidgetLeft(cellWidget.x, updateLeftIndent);\n left += cellWidget.width + cellWidget.margin.right;\n }\n };\n /**\n * Shift the widgets for RTL table.\n * @param tableWidget\n * @private\n */\n TableRowWidget.prototype.shiftWidgetForRtlTable = function () {\n var tableWidget = this.ownerTable;\n var clientAreaX = tableWidget.x;\n var cellSpace = 0;\n var tableWidth = 0;\n if (tableWidget.tableFormat != null && tableWidget.tableFormat.cellSpacing > 0) {\n cellSpace = tableWidget.tableFormat.cellSpacing;\n }\n tableWidth = HelperMethods.convertPointToPixel(tableWidget.getTableWidth());\n var rowX = this.x;\n var clientAreaRight = clientAreaX + tableWidth;\n var left = clientAreaRight - (rowX - clientAreaX);\n var prevSpannedCellWidth = 0;\n for (var j = 0; j < this.childWidgets.length; j++) {\n var cellWidget = this.childWidgets[j];\n var prevColumnIndex = 0;\n if (!isNullOrUndefined(cellWidget.previousWidget)) {\n prevColumnIndex = cellWidget.previousWidget.columnIndex + cellWidget.previousWidget.cellFormat.columnSpan;\n }\n if (prevColumnIndex < cellWidget.columnIndex) {\n prevSpannedCellWidth = HelperMethods.convertPointToPixel(cellWidget.ownerTable.tableHolder.getPreviousSpannedCellWidth(prevColumnIndex, cellWidget.columnIndex));\n if (prevColumnIndex === 0) {\n prevSpannedCellWidth = prevSpannedCellWidth - cellSpace / 2;\n }\n }\n left = left - (cellWidget.width + cellWidget.margin.left + cellWidget.margin.right + cellSpace);\n cellWidget.updateWidgetLeft(left + cellWidget.margin.left - prevSpannedCellWidth);\n }\n };\n /**\n * @private\n */\n TableRowWidget.prototype.destroy = function () {\n // if (this.rowFormat) {\n // this.rowFormat.destroy();\n // }\n this.rowFormat = undefined;\n this.topBorderWidth = undefined;\n this.bottomBorderWidth = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n TableRowWidget.prototype.componentDestroy = function () {\n if (this.rowFormat) {\n this.rowFormat.destroy();\n }\n this.rowFormat = undefined;\n this.topBorderWidth = undefined;\n this.bottomBorderWidth = undefined;\n this.isRenderBookmarkEnd = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return TableRowWidget;\n}(BlockWidget));\nexport { TableRowWidget };\n/**\n * @private\n */\nvar TableCellWidget = /** @class */ (function (_super) {\n __extends(TableCellWidget, _super);\n function TableCellWidget() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.rowIndex = -1;\n _this.sizeInfoInternal = new ColumnSizeInfo();\n /**\n * @private\n */\n _this.updatedTopBorders = [];\n /**\n * @private\n */\n _this.isRenderBookmarkStart = false;\n /**\n * @private\n */\n _this.isRenderBookmarkEnd = false;\n /**\n * @private\n */\n _this.isRenderEditRangeStart = false;\n /**\n * @private\n */\n _this.isRenderEditRangeEnd = false;\n // /**\n // * @private\n // */\n // get length(): number {\n // if (!isNullOrUndefined(this.nextSplitWidget)) {\n // return 1;\n // } else {\n // if (isNullOrUndefined(this.previousSplitWidget)) {\n // return 1;\n // }\n // return 0;\n // }\n // }\n /**\n * @private\n */\n _this.isSplittedCell = false;\n _this.margin = new Margin(_this.leftMargin, _this.topMargin, _this.rightMargin, _this.bottomMargin);\n _this.leftBorderWidth = 0;\n _this.rightBorderWidth = 0;\n _this.cellFormat = new WCellFormat(_this);\n return _this;\n }\n Object.defineProperty(TableCellWidget.prototype, \"ownerColumn\", {\n /**\n * @private\n */\n get: function () {\n return this.ownerTable.tableHolder.columns[this.columnIndex];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"leftMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.leftMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('leftMargin')) {\n return this.ownerRow.rowFormat.leftMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.leftMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"topMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.topMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('topMargin')) {\n return this.ownerRow.rowFormat.topMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.topMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"rightMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.rightMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('rightMargin')) {\n return this.ownerRow.rowFormat.rightMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.rightMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"bottomMargin\", {\n /**\n * @private\n */\n get: function () {\n if (this.cellFormat && this.cellFormat.containsMargins()) {\n return this.cellFormat.bottomMargin;\n }\n else if (!isNullOrUndefined(this.ownerRow) && this.ownerRow.rowFormat.hasValue('bottomMargin')) {\n return this.ownerRow.rowFormat.bottomMargin;\n }\n else if (!isNullOrUndefined(this.ownerTable) && !isNullOrUndefined(this.ownerTable.tableFormat)) {\n return this.ownerTable.tableFormat.bottomMargin;\n }\n else {\n return 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"cellIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.ownerRow) {\n return this.ownerRow.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerTable\", {\n /**\n * @private\n */\n get: function () {\n if (this.containerWidget instanceof TableRowWidget) {\n return this.containerWidget.ownerTable;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"ownerRow\", {\n /**\n * @private\n */\n get: function () {\n return this.containerWidget;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TableCellWidget.prototype, \"sizeInfo\", {\n /**\n * @private\n */\n get: function () {\n return this.sizeInfoInternal;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n TableCellWidget.prototype.equals = function (widget) {\n return widget instanceof TableCellWidget && widget.cellFormat === this.cellFormat;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getContainerTable = function () {\n var table = this.ownerTable;\n while (table instanceof TableWidget && table.associatedCell instanceof TableCellWidget) {\n table = table.associatedCell.getContainerTable();\n }\n return table;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousSplitWidget = function () {\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.previousRenderedWidget;\n if (isNullOrUndefined(row) || row.index < this.rowIndex) {\n break;\n }\n var previousCell = row.getCell(this.rowIndex, this.columnIndex);\n if (previousCell && this.equals(previousCell)) {\n return previousCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getNextSplitWidget = function () {\n var rowSpan = this.cellFormat.rowSpan;\n if (this.containerWidget instanceof TableRowWidget) {\n var row = this.containerWidget;\n do {\n row = row.nextRenderedWidget;\n if (isNullOrUndefined(row) || row.index > this.rowIndex + rowSpan) {\n break;\n }\n var nextCell = row.getCell(this.rowIndex, this.columnIndex);\n if (nextCell && this.equals(nextCell)) {\n return nextCell;\n }\n } while (row);\n }\n return undefined;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTableCellWidget = function (point) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n if (this.childWidgets[i].y <= point.y\n && (this.childWidgets[i].y + this.childWidgets[i].height) >= point.y) {\n return this.childWidgets[i].getTableCellWidget(point);\n }\n }\n var tableCellWidget = undefined;\n if (this.childWidgets.length > 0) {\n if (this.childWidgets[0].y <= point.y) {\n tableCellWidget = this.childWidgets[this.childWidgets.length - 1].getTableCellWidget(point);\n }\n else {\n tableCellWidget = this.childWidgets[0].getTableCellWidget(point);\n }\n }\n return tableCellWidget;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.updateWidth = function (preferredWidth) {\n if (this.cellFormat.preferredWidthType === 'Point') {\n this.cellFormat.preferredWidth = preferredWidth;\n }\n else if (this.cellFormat.preferredWidthType === 'Percent') {\n this.cellFormat.preferredWidth = this.convertPointToPercent(preferredWidth);\n }\n this.cellFormat.cellWidth = preferredWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellWidth = function (block) {\n var ownerTable = this.ownerTable;\n var containerWidth = ownerTable ? ownerTable.getTableClientWidth(ownerTable.getOwnerWidth(true)) : 0;\n var cellWidth = containerWidth;\n var leftMargin = !isNullOrUndefined(this.leftMargin) ? this.leftMargin : 0;\n var rightMargin = !isNullOrUndefined(this.rightMargin) ? this.rightMargin : 0;\n if (ownerTable && ownerTable.tableFormat.preferredWidthType === 'Auto' && ownerTable.tableFormat.allowAutoFit) {\n if (this.cellFormat.preferredWidth === 0) {\n cellWidth = containerWidth;\n }\n else {\n if (this.cellFormat.preferredWidthType === 'Percent') {\n cellWidth = (this.cellFormat.preferredWidth * containerWidth) / 100 - leftMargin - rightMargin;\n }\n else {\n // If cell has prefferd width, we need to consider prefferd width.\n cellWidth = this.cellFormat.preferredWidth - leftMargin - rightMargin;\n }\n }\n }\n else if (this.cellFormat.preferredWidthType === 'Percent') {\n cellWidth = (this.cellFormat.preferredWidth * containerWidth) / 100 - leftMargin - rightMargin;\n }\n else if (this.cellFormat.preferredWidthType === 'Point') {\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Percent') {\n cellWidth = this.cellFormat.cellWidth - leftMargin - rightMargin;\n }\n else {\n cellWidth = this.cellFormat.preferredWidth - leftMargin - rightMargin;\n }\n }\n // For grid before and grid after with auto width, no need to calculate minimum preferred width.\n return cellWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.convertPointToPercent = function (cellPreferredWidth) {\n var value = 0;\n var clientWidth = this.ownerTable.getOwnerWidth(true);\n var tableWidth = this.ownerTable.getTableClientWidth(clientWidth);\n value = (cellPreferredWidth / tableWidth) * 100;\n value = Math.round(value);\n return value < 100 ? value : 100; // The value should be lesser than or equal to 100%;\n };\n /**\n * @private\n */\n TableCellWidget.getCellLeftBorder = function (tableCell) {\n var leftBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.left)) {\n leftBorder = cellBorder.left;\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n leftBorder = tableCell.getLeftBorderToRenderByHierarchy(leftBorder, rowBorders, tableBorders);\n }\n else {\n var prevCell = this.getPreviousCell(tableCell);\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n leftBorder = tableCell.getPreviousCellLeftBorder(leftBorder, prevCell);\n }\n if (isNullOrUndefined(leftBorder)) {\n leftBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return leftBorder;\n };\n TableCellWidget.getPreviousCell = function (tableCell) {\n var prevCell = undefined;\n if (!isNullOrUndefined(tableCell.previousWidget)) {\n //Validates whether the previous cell in same row is adjacent left cell and sets to prevCell.\n //If the previous cell is not in the same row and it is vertically merged, we have handled in serverside\n //to copy border based on priority of current cell left border and previous cell right border.\n var cell = tableCell.previousWidget;\n if (cell.columnIndex + cell.cellFormat.columnSpan === tableCell.columnIndex) {\n prevCell = cell;\n }\n }\n return prevCell;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderWidth = function () {\n var borderWidth = 0;\n // Added null condition check for asynchronous loading.\n if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n // update the margins values respect to layouting of borders.\n // For normal table cells only left border is rendered. for last cell left and right border is rendered.\n // this border widths are not included in margins.\n borderWidth = TableCellWidget.getCellLeftBorder(this).getLineWidth();\n // need to render rightBorder specifically for all the cells when the cellSpacing is greater than zero or for last cell of each row.\n }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderWidth = function () {\n var borderWidth = 0;\n var ownerTable = this.ownerTable;\n //Added null condition check for asynchronous loading.\n if (this.cellFormat !== null && this.cellFormat.borders !== null) {\n borderWidth = TableCellWidget.getCellRightBorder(this).getLineWidth();\n }\n return borderWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellSpacing = function () {\n var actualCellSpacing = this.ownerTable && this.ownerTable.tableFormat ? this.ownerTable.tableFormat.cellSpacing : 0;\n var cellSpacingToLayout = actualCellSpacing;\n // Considers the left, right margins and border widths(only available for Layouted table) for Minimum width.\n if (this.ownerRow.childWidgets.length === 1) {\n cellSpacingToLayout = actualCellSpacing * 2;\n }\n else if (this.cellIndex === 0 || this.cellIndex === this.ownerRow.childWidgets.length - 1) {\n cellSpacingToLayout = actualCellSpacing + (actualCellSpacing / 2);\n }\n else {\n cellSpacingToLayout = actualCellSpacing;\n }\n return cellSpacingToLayout;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getCellSizeInfo = function (isAutoFit) {\n var isSetWidth = true;\n var layout = undefined;\n if (!isNullOrUndefined(this.bodyWidget) && !isNullOrUndefined(this.bodyWidget.page)) {\n if (!isNullOrUndefined(this.bodyWidget.page.documentHelper)) {\n layout = this.bodyWidget.page.documentHelper.layout;\n }\n }\n if (!isNullOrUndefined(layout) && !isNullOrUndefined(layout.currentCell)) {\n isSetWidth = false;\n if (this === layout.currentCell) {\n isSetWidth = true;\n }\n }\n // Gets the minimum preferred width for the table cell.\n if (isSetWidth && !this.sizeInfo.hasMinimumWidth) {\n this.sizeInfo.minimumWidth = this.getMinimumPreferredWidth();\n }\n // Gets the minimum and maximum word widths.\n if (isAutoFit) {\n if (isSetWidth && !this.sizeInfo.hasMinimumWordWidth) {\n var size = this.getMinimumAndMaximumWordWidth(0, 0);\n this.sizeInfo.minimumWordWidth = size.minimumWordWidth + this.sizeInfo.minimumWidth;\n this.sizeInfo.maximumWordWidth = size.maximumWordWidth + this.sizeInfo.minimumWidth;\n // if minimum and maximum width values are equal, set value as zero.\n // later, preferred width value is considered for all width values.\n // if (this.sizeInfo.minimumWidth === this.sizeInfo.minimumWordWidth\n // && this.sizeInfo.minimumWordWidth === this.sizeInfo.maximumWordWidth) {\n // this.sizeInfo.minimumWordWidth = 0;\n // this.sizeInfo.maximumWordWidth = 0;\n // this.sizeInfo.minimumWidth = 0;\n // }\n }\n }\n var sizeInfo = new ColumnSizeInfo();\n sizeInfo.minimumWidth = this.sizeInfo.minimumWidth;\n sizeInfo.minimumWordWidth = this.sizeInfo.minimumWordWidth;\n sizeInfo.maximumWordWidth = this.sizeInfo.maximumWordWidth;\n return sizeInfo;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getMinimumPreferredWidth = function () {\n var defaultWidth = this.leftMargin + this.rightMargin + this.getLeftBorderWidth() + this.getRightBorderWidth() + this.getCellSpacing();\n return defaultWidth;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellLeftBorder = function (leftBorder, previousCell) {\n if ((isNullOrUndefined(previousCell) || (!isNullOrUndefined(leftBorder) && (leftBorder.lineStyle === 'None' && !leftBorder.hasNoneStyle)))) {\n if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n leftBorder = this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(previousCell)) {\n return leftBorder;\n }\n else {\n var prevCellRightBorder = undefined;\n if (!isNullOrUndefined(previousCell.cellFormat.borders) && !isNullOrUndefined(previousCell.cellFormat.borders.right) && previousCell.cellFormat.borders.right.lineStyle !== 'None') {\n prevCellRightBorder = previousCell.cellFormat.borders.right;\n }\n if (!isNullOrUndefined(prevCellRightBorder) && prevCellRightBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(prevCellRightBorder, leftBorder);\n }\n else if (!isNullOrUndefined(leftBorder) && !(leftBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getLeftBorderToRenderByHierarchy(leftBorder, TableRowWidget.getRowOf(leftBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(leftBorder.ownerBase).tableFormat.borders);\n }\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBorderBasedOnPriority = function (border, adjacentBorder) {\n // If the cell and its adjacent cell defined different borders then based on this algorithm the border choose to render.\n // Reference link :https://msdn.microsoft.com/en-us/library/office/documentformat.openxml.wordprocessing.tablecellborders.aspx\n if (isNullOrUndefined(border)) {\n return adjacentBorder;\n }\n else if (isNullOrUndefined(adjacentBorder)) {\n return border;\n }\n var borderWeight = border.getBorderWeight();\n var adjacentBorderWeight = adjacentBorder.getBorderWeight();\n //the border with higher wight shall be displayed.\n if (borderWeight === adjacentBorderWeight) {\n //if the border is equal weight the based on the priority the border will be choosen to render.\n var borderPriority = border.getPrecedence();\n var adjacentBorderPriority = adjacentBorder.getPrecedence();\n if (borderPriority === adjacentBorderPriority) {\n //The color with the smaller brightness value shall be displayed.\n var borderColInRGB = HelperMethods.convertHexToRgb(border.color);\n var R1 = borderColInRGB.r;\n var G1 = borderColInRGB.g;\n var B1 = borderColInRGB.b;\n var adjacentBorderColInRGB = HelperMethods.convertHexToRgb(adjacentBorder.color);\n var R2 = adjacentBorderColInRGB.r;\n var G2 = adjacentBorderColInRGB.g;\n var B2 = adjacentBorderColInRGB.b;\n var borderBrightness = (R1 + B1 + (2 * G1));\n var adjacentBorderBrightness = (R2 + B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n borderBrightness = (B1 + (2 * G1));\n adjacentBorderBrightness = (B2 + (2 * G2));\n if (borderBrightness === adjacentBorderBrightness) {\n if (G1 === G2) {\n return border;\n }\n else if (G1 > G2) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderBrightness > adjacentBorderBrightness) {\n return adjacentBorder;\n }\n else {\n return border;\n }\n }\n else if (borderPriority > adjacentBorderPriority) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n }\n else if (borderWeight > adjacentBorderWeight) {\n return border;\n }\n else {\n return adjacentBorder;\n }\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getLeftBorderToRenderByHierarchy = function (leftBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(leftBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isFirstCell = false;\n if (ownerCell.columnIndex === 0 || (ownerCell.cellIndex === 0 && ownerCell.ownerRow.rowFormat.gridBefore > 0)) {\n isFirstCell = true;\n }\n var isRowBorderDefined = false;\n if (!isNullOrUndefined(rowBorders.left) && rowBorders.left.lineStyle !== 'None'\n && rowBorders.left.isBorderDefined && !isNullOrUndefined(leftBorder)\n && leftBorder.lineStyle === 'None' && leftBorder.isBorderDefined && !leftBorder.hasValue('color')) {\n isRowBorderDefined = true;\n }\n if ((!isNullOrUndefined(leftBorder) && leftBorder.lineStyle === 'None' && (!leftBorder.isBorderDefined || isRowBorderDefined)) || isNullOrUndefined(leftBorder)) {\n if (isFirstCell) {\n leftBorder = rowBorders.left;\n if ((!isNullOrUndefined(leftBorder) && leftBorder.lineStyle === 'None') || isNullOrUndefined(leftBorder)) {\n leftBorder = tableBorders.left;\n }\n }\n else {\n leftBorder = rowBorders.vertical;\n if ((!isNullOrUndefined(leftBorder) && leftBorder.lineStyle === 'None') || isNullOrUndefined(leftBorder)) {\n leftBorder = tableBorders.vertical;\n }\n }\n }\n }\n return leftBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellRightBorder = function (tableCell) {\n var rightBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.right)) {\n rightBorder = cellBorder.right;\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n rightBorder = tableCell.getRightBorderToRenderByHierarchy(rightBorder, rowBorders, tableBorders);\n }\n else {\n var nextCell = this.getNextCell(tableCell);\n // if the border is shared then choose the border based on Conflict Resolution algorithm.\n rightBorder = tableCell.getAdjacentCellRightBorder(rightBorder, nextCell);\n }\n if (isNullOrUndefined(rightBorder)) {\n rightBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return rightBorder;\n };\n TableCellWidget.getNextCell = function (tableCell) {\n var nextCell = undefined;\n var columnSpan = tableCell.cellFormat.columnSpan;\n if (!isNullOrUndefined(tableCell.nextWidget)) {\n //Validates whether the next cell in same row is adjacent right cell and sets to nextCell.\n //If the next cell is not in the same row and it is vertically merged, we have handled in serverside\n //to copy border based on priority of current cell right border and next cell left border.\n var cell = tableCell.nextWidget;\n if (tableCell.columnIndex + columnSpan === cell.columnIndex) {\n nextCell = cell;\n }\n }\n return nextCell;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellRightBorder = function (rightBorder, nextCell) {\n if (isNullOrUndefined(nextCell) || (!isNullOrUndefined(rightBorder) && (rightBorder.lineStyle === 'None' && !rightBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n rightBorder = this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(nextCell)) {\n return rightBorder;\n }\n else {\n var nextCellLeftBorder = undefined;\n if (!isNullOrUndefined(nextCell.cellFormat.borders) && !isNullOrUndefined(nextCell.cellFormat.borders.left) && nextCell.cellFormat.borders.left.lineStyle !== 'None') {\n nextCellLeftBorder = nextCell.cellFormat.borders.left;\n }\n if (!isNullOrUndefined(nextCellLeftBorder) && nextCellLeftBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(rightBorder, nextCellLeftBorder);\n }\n else if (!isNullOrUndefined(rightBorder) && !(rightBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getRightBorderToRenderByHierarchy(rightBorder, TableRowWidget.getRowOf(rightBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(rightBorder.ownerBase).tableFormat.borders);\n }\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getRightBorderToRenderByHierarchy = function (rightBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(rightBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isLastCell = false;\n //Have to check lastcell logic\n if ((ownerCell.columnIndex + ownerCell.cellFormat.columnSpan) === ownerCell.ownerTable.tableHolder.columns.length\n || (ownerCell.cellIndex === ownerCell.ownerRow.childWidgets.length - 1)) {\n isLastCell = true;\n }\n var isRowBorderDefined = false;\n if (!isNullOrUndefined(rowBorders.right) && rowBorders.right.lineStyle !== 'None'\n && rowBorders.right.isBorderDefined && !isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None'\n && rightBorder.isBorderDefined && !rightBorder.hasValue('color')) {\n isRowBorderDefined = true;\n }\n if ((!isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None' && (!rightBorder.isBorderDefined || isRowBorderDefined)) || isNullOrUndefined(rightBorder)) {\n if (isLastCell) {\n rightBorder = rowBorders.right;\n if ((!isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None') || isNullOrUndefined(rightBorder)) {\n rightBorder = tableBorders.right;\n }\n }\n else {\n rightBorder = rowBorders.vertical;\n if ((!isNullOrUndefined(rightBorder) && rightBorder.lineStyle === 'None') || isNullOrUndefined(rightBorder)) {\n rightBorder = tableBorders.vertical;\n }\n }\n }\n }\n return rightBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellTopBorder = function (tableCell) {\n var topBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.top)) {\n topBorder = cellBorder.top;\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n topBorder = tableCell.getTopBorderToRenderByHierarchy(topBorder, rowBorders, tableBorders);\n }\n else {\n var prevTopCell = tableCell.getTopAdjacentCell();\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n topBorder = tableCell.getPreviousCellTopBorder(topBorder, prevTopCell);\n }\n if (isNullOrUndefined(topBorder)) {\n topBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return topBorder;\n };\n TableCellWidget.prototype.getTopAdjacentCell = function () {\n var previousRow = this.ownerRow.previousWidget;\n var cell;\n if (!isNullOrUndefined(previousRow)) {\n cell = previousRow.getVerticalMergeStartCell(this.columnIndex, this.cellFormat.columnSpan);\n }\n return cell;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getPreviousCellTopBorder = function (topBorder, previousTopCell) {\n if (isNullOrUndefined(previousTopCell) || (!isNullOrUndefined(topBorder) && (topBorder.lineStyle === 'None' && !topBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n topBorder = this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(previousTopCell)) {\n return topBorder;\n }\n else {\n var prevTopCellBottomBorder = undefined;\n if (!isNullOrUndefined(previousTopCell.cellFormat.borders) && !isNullOrUndefined(previousTopCell.cellFormat.borders.bottom)) {\n prevTopCellBottomBorder = this.getBottomBorderToRenderByHierarchy(previousTopCell.cellFormat.borders.bottom, previousTopCell.ownerRow.rowFormat.borders, previousTopCell.ownerTable.tableFormat.borders);\n }\n if (!isNullOrUndefined(prevTopCellBottomBorder) && prevTopCellBottomBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(topBorder, prevTopCellBottomBorder);\n }\n else if (!isNullOrUndefined(topBorder) && !(topBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getTopBorderToRenderByHierarchy(topBorder, TableRowWidget.getRowOf(topBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(topBorder.ownerBase).tableFormat.borders);\n }\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getTopBorderToRenderByHierarchy = function (topBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(topBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isFirstRow = isNullOrUndefined(ownerCell.ownerRow.previousWidget);\n var isRowBorderDefined = false;\n if (!isNullOrUndefined(rowBorders.top) && rowBorders.top.lineStyle !== 'None'\n && rowBorders.top.isBorderDefined && !isNullOrUndefined(topBorder)\n && topBorder.lineStyle === 'None' && topBorder.isBorderDefined && !topBorder.hasValue('color')) {\n isRowBorderDefined = true;\n }\n if ((!isNullOrUndefined(topBorder) && topBorder.lineStyle === 'None' && (!topBorder.isBorderDefined || isRowBorderDefined)) || isNullOrUndefined(topBorder)) {\n if (isFirstRow) {\n topBorder = rowBorders.top;\n if ((!isNullOrUndefined(topBorder) && topBorder.lineStyle === 'None') || isNullOrUndefined(topBorder)) {\n topBorder = tableBorders.top;\n }\n }\n else {\n topBorder = rowBorders.horizontal;\n if ((!isNullOrUndefined(topBorder) && topBorder.lineStyle === 'None') || isNullOrUndefined(topBorder)) {\n topBorder = tableBorders.horizontal;\n }\n }\n }\n }\n return topBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellBottomBorder = function (tableCell) {\n var bottomBorder = undefined;\n var cellBorder = tableCell.cellFormat.borders;\n var rowBorders = !isNullOrUndefined(tableCell.ownerRow) ? tableCell.ownerRow.rowFormat.borders : undefined;\n var tableBorders = !isNullOrUndefined(tableCell.ownerTable) ? tableCell.ownerTable.tableFormat.borders : undefined;\n if (!isNullOrUndefined(cellBorder.bottom)) {\n bottomBorder = cellBorder.bottom;\n }\n if (isNullOrUndefined(bottomBorder)) {\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders); // select the left border based on heirarchy.\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0) {\n bottomBorder = tableCell.getBottomBorderToRenderByHierarchy(bottomBorder, rowBorders, tableBorders);\n }\n else {\n var nextBottomCell = undefined;\n var nextRow = undefined;\n var rowSpan = tableCell.cellFormat.rowSpan;\n if (rowSpan === 1) {\n nextRow = tableCell.ownerRow.nextWidget;\n }\n else if (rowSpan > 1) {\n var row = tableCell.containerWidget;\n do {\n row = row.nextWidget;\n if (isNullOrUndefined(row)) {\n break;\n }\n else if (row.index === tableCell.rowIndex + rowSpan) {\n nextRow = row;\n break;\n }\n } while (row);\n }\n if (!isNullOrUndefined(nextRow)) {\n nextBottomCell = nextRow.getCellWidget(tableCell.columnIndex, tableCell.cellFormat.columnSpan);\n }\n //If the border is shared then choose the border based on Conflict Resolution algorithm.\n bottomBorder = tableCell.getAdjacentCellBottomBorder(bottomBorder, nextBottomCell);\n }\n if (isNullOrUndefined(bottomBorder)) {\n bottomBorder = new WBorder(tableCell.cellFormat.borders);\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getAdjacentCellBottomBorder = function (bottomBorder, nextBottomCell) {\n if (isNullOrUndefined(nextBottomCell) || (!isNullOrUndefined(bottomBorder) && (bottomBorder.lineStyle === 'None' && !bottomBorder.hasNoneStyle))) {\n if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n bottomBorder = this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n if (isNullOrUndefined(nextBottomCell)) {\n return bottomBorder;\n }\n else {\n var prevBottomCellTopBorder = undefined;\n if (!isNullOrUndefined(nextBottomCell.cellFormat.borders) && !isNullOrUndefined(nextBottomCell.cellFormat.borders.top) && nextBottomCell.cellFormat.borders.top.lineStyle !== 'None') {\n prevBottomCellTopBorder = nextBottomCell.cellFormat.borders.top;\n }\n if (!isNullOrUndefined(prevBottomCellTopBorder) && prevBottomCellTopBorder.lineStyle !== 'None') {\n return this.getBorderBasedOnPriority(bottomBorder, prevBottomCellTopBorder);\n }\n else if (!isNullOrUndefined(bottomBorder) && !(bottomBorder.ownerBase.ownerBase instanceof WTableFormat)) {\n return this.getBottomBorderToRenderByHierarchy(bottomBorder, TableRowWidget.getRowOf(bottomBorder.ownerBase).rowFormat.borders, TableWidget.getTableOf(bottomBorder.ownerBase).tableFormat.borders);\n }\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getBottomBorderToRenderByHierarchy = function (bottomBorder, rowBorders, tableBorders) {\n var ownerCell = TableCellWidget.getCellOf(bottomBorder.ownerBase);\n if (!isNullOrUndefined(ownerCell)) {\n var isLastRow = isNullOrUndefined(ownerCell.ownerRow.nextWidget);\n var isRowBorderDefined = false;\n if (!isNullOrUndefined(rowBorders.bottom) && rowBorders.bottom.lineStyle !== 'None'\n && rowBorders.bottom.isBorderDefined && !isNullOrUndefined(bottomBorder)\n && bottomBorder.lineStyle === 'None' && bottomBorder.isBorderDefined && !bottomBorder.hasValue('color')) {\n isRowBorderDefined = true;\n }\n if ((!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'None' && (!bottomBorder.isBorderDefined || isRowBorderDefined)) || isNullOrUndefined(bottomBorder)) {\n if (isLastRow) {\n bottomBorder = rowBorders.bottom;\n if ((!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'None') || isNullOrUndefined(bottomBorder)) {\n bottomBorder = tableBorders.bottom;\n }\n }\n else {\n bottomBorder = rowBorders.horizontal;\n if ((!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'None') || isNullOrUndefined(bottomBorder)) {\n bottomBorder = tableBorders.horizontal;\n }\n }\n }\n }\n return bottomBorder;\n };\n /**\n * @private\n */\n TableCellWidget.getCellOf = function (node) {\n if (node instanceof WBorders) {\n if (node.ownerBase instanceof WCellFormat && node.ownerBase.ownerBase instanceof TableCellWidget) {\n return node.ownerBase.ownerBase;\n }\n else {\n return undefined;\n }\n }\n return undefined;\n };\n /**\n * Updates the Widget left.\n * @private\n */\n TableCellWidget.prototype.updateWidgetLeft = function (x) {\n this.x = x;\n this.updateChildWidgetLeft(x);\n };\n /**\n * @private\n */\n TableCellWidget.prototype.updateChildWidgetLeft = function (left, updateLeftIndent) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n widget.x = left;\n if (updateLeftIndent && widget instanceof ParagraphWidget) {\n widget.x = left + HelperMethods.convertPointToPixel(widget.leftIndent);\n }\n if (widget instanceof TableWidget) {\n var tableWidget = widget;\n tableWidget.updateChildWidgetLeft(left, updateLeftIndent);\n if (tableWidget.isBidiTable) {\n var clientArea = new Rect(tableWidget.x, tableWidget.y, tableWidget.width, tableWidget.height);\n tableWidget.shiftWidgetsForRtlTable(clientArea, tableWidget);\n }\n }\n }\n };\n /**\n * @private\n */\n TableCellWidget.prototype.getMinimumAndMaximumWordWidth = function (minimumWordWidth, maximumWordWidth) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i];\n var widthInfo = block.getMinimumAndMaximumWordWidth(minimumWordWidth, maximumWordWidth);\n minimumWordWidth = widthInfo.minimumWordWidth;\n maximumWordWidth = widthInfo.maximumWordWidth;\n }\n return { 'minimumWordWidth': minimumWordWidth, 'maximumWordWidth': maximumWordWidth };\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroyInternal = function (viewer) {\n // let viewer: LayoutViewer = undefined;\n // let page: Page = this.getPage();\n // if (!isNullOrUndefined(page ))\n // viewer = page.viewer;\n if (!isNullOrUndefined(this.childWidgets)) {\n for (var i = 0; i < this.childWidgets.length; i++) {\n var widget = this.childWidgets[i];\n if (widget instanceof ParagraphWidget) {\n widget.destroyInternal(viewer);\n }\n else {\n widget.destroyInternal(viewer);\n }\n i--;\n }\n this.childWidgets = undefined;\n if (!isNullOrUndefined(viewer.documentHelper.selection)) {\n if (viewer.documentHelper.selection.selectedWidgets.containsKey(this)) {\n viewer.documentHelper.selection.selectedWidgets.remove(this);\n }\n }\n }\n this.destroy();\n };\n /**\n * @private\n */\n TableCellWidget.prototype.clone = function () {\n var cell = new TableCellWidget();\n cell.cellFormat.copyFormat(this.cellFormat);\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n cell.childWidgets.push(block);\n block.containerWidget = cell;\n block.index = i;\n }\n cell.leftBorderWidth = this.leftBorderWidth;\n cell.rightBorderWidth = this.rightBorderWidth;\n cell.isRenderBookmarkEnd = this.isRenderBookmarkEnd;\n cell.isRenderBookmarkStart = this.isRenderBookmarkStart;\n if (this.margin) {\n cell.margin = this.margin.clone();\n }\n cell.columnIndex = this.columnIndex;\n cell.x = this.x;\n cell.y = this.y;\n cell.height = this.height;\n cell.width = this.width;\n if (this.contentControlProperties) {\n cell.contentControlProperties = this.contentControlProperties;\n }\n return cell;\n };\n /**\n * @private\n */\n TableCellWidget.prototype.destroy = function () {\n // if (this.cellFormat) {\n // this.cellFormat.destroy();\n // }\n this.cellFormat = undefined;\n this.rowIndex = undefined;\n this.columnIndex = undefined;\n this.isSplittedCell = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n TableCellWidget.prototype.componentDestroy = function () {\n if (this.cellFormat) {\n this.cellFormat.destroy();\n }\n this.cellFormat = undefined;\n this.contentControlProperties = undefined;\n this.rowIndex = undefined;\n this.columnIndex = undefined;\n this.isRenderBookmarkStart = undefined;\n this.isRenderBookmarkEnd = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return TableCellWidget;\n}(BlockWidget));\nexport { TableCellWidget };\n/**\n * @private\n */\nvar LineWidget = /** @class */ (function () {\n /**\n * Initialize the constructor of LineWidget\n */\n function LineWidget(paragraphWidget) {\n /**\n * @private\n */\n this.children = [];\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.marginTop = 0;\n /**\n * @private\n */\n this.maxBaseLine = 0;\n /**\n * @private\n */\n this.skipClipImage = false;\n this.paragraph = paragraphWidget;\n }\n Object.defineProperty(LineWidget.prototype, \"renderedElements\", {\n /**\n * Rendered elements contains reordered element for RTL layout\n */\n get: function () {\n if (!isNullOrUndefined(this.layoutedElements)) {\n return this.layoutedElements;\n }\n return this.children;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n if (this.paragraph && this.paragraph.childWidgets) {\n return this.paragraph.childWidgets.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"nextLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n if (lineIndex <= paragraph.childWidgets.length - 2) {\n return paragraph.childWidgets[lineIndex + 1];\n }\n else if (paragraph.nextSplitWidget) {\n var line = paragraph.nextSplitWidget.firstChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"previousLine\", {\n /**\n * @private\n */\n get: function () {\n var paragraph = this.paragraph;\n var lineIndex = this.indexInOwner;\n var splitParagraph = paragraph.previousSplitWidget;\n if (lineIndex > 0) {\n return paragraph.childWidgets[lineIndex - 1];\n }\n else if (splitParagraph instanceof ParagraphWidget) {\n var line = splitParagraph.lastChild;\n if (line instanceof LineWidget && line.paragraph.equals(this.paragraph)) {\n return line;\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"isEndsWithPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.children.length > 0) {\n var lastElement = this.children[this.children.length - 1];\n if (lastElement instanceof TextElementBox) {\n return lastElement.isPageBreak;\n }\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"isEndsWithColumnBreak\", {\n get: function () {\n if (this.children.length > 0) {\n var lastElement = this.children[this.children.length - 1];\n if (lastElement instanceof TextElementBox) {\n return lastElement.isColumnBreak;\n }\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineWidget.prototype, \"isEndsWithLineBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this.children.length > 0) {\n var lastElement = this.children[this.children.length - 1];\n if (lastElement instanceof TextElementBox) {\n return lastElement.text === '\\v';\n }\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n LineWidget.prototype.isFirstLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && (this.paragraph.previousSplitWidget === undefined || (this.paragraph.previousSplitWidget instanceof ParagraphWidget && (this.paragraph.previousSplitWidget.isEndsWithColumnBreak || this.paragraph.previousSplitWidget.isEndsWithPageBreak)))) {\n return index === 0;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.isLastLine = function () {\n var index = this.indexInOwner;\n if (index > -1 && this.paragraph.nextSplitWidget === undefined) {\n return index === this.paragraph.childWidgets.length - 1;\n }\n return false;\n };\n /**\n * @private\n */\n LineWidget.prototype.getOffset = function (inline, index) {\n if (isNullOrUndefined(inline)) {\n return index;\n }\n var textIndex = index;\n var line = inline.line;\n for (var i = 0; i < line.children.length; i++) {\n var inlineElement = line.children[i];\n if (inline === inlineElement) {\n break;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n textIndex += inlineElement.length;\n }\n return textIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.getEndOffset = function () {\n var startOffset = 0;\n var count = 0;\n for (var i = 0; i < this.children.length; i++) {\n var inlineElement = this.children[i];\n if (inlineElement.length === 0) {\n continue;\n }\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (inlineElement instanceof TextElementBox || inlineElement instanceof CommentCharacterElementBox\n || inlineElement instanceof EditRangeStartElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof EditRangeEndElementBox || inlineElement instanceof BookmarkElementBox\n || inlineElement instanceof ContentControl || (inlineElement instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n startOffset = count + inlineElement.length;\n }\n count += inlineElement.length;\n }\n return startOffset;\n };\n /**\n * @private\n */\n LineWidget.prototype.getInline = function (offset, indexInInline, bidi, isInsert, isSpellCheck) {\n bidi = isNullOrUndefined(bidi) ? this.paragraph.bidi : bidi;\n var inlineElement = undefined;\n var count = 0;\n var isStarted = false;\n if (this.children.length === 0) {\n if (this.previousLine) {\n var elementBox = this.previousLine.children[this.previousLine.children.length - 1];\n if (elementBox instanceof TextElementBox && elementBox.text === '\\v') {\n inlineElement = this.previousLine.children[this.previousLine.children.length - 1];\n indexInInline = 1;\n return { 'element': inlineElement, 'index': indexInInline };\n }\n }\n }\n for (var i = 0; i < this.children.length; i++) {\n inlineElement = this.children[i];\n if (inlineElement instanceof ListTextElementBox) {\n continue;\n }\n if (!isStarted && (inlineElement instanceof TextElementBox || inlineElement instanceof ImageElementBox\n || inlineElement instanceof ShapeElementBox || inlineElement instanceof ContentControl\n || inlineElement instanceof BookmarkElementBox || inlineElement instanceof EditRangeEndElementBox\n || inlineElement instanceof EditRangeStartElementBox || inlineElement instanceof CommentCharacterElementBox\n || inlineElement instanceof FieldElementBox\n && HelperMethods.isLinkedFieldCharacter(inlineElement))) {\n isStarted = true;\n }\n if (isStarted && offset <= count + inlineElement.length) {\n if (inlineElement instanceof TextElementBox && (inlineElement.text === ' ' && inlineElement.revisions.length === 0 && isInsert && !isSpellCheck)) {\n var currentElement = this.getNextTextElement(this, i + 1);\n inlineElement = !isNullOrUndefined(currentElement) ? currentElement : inlineElement;\n indexInInline = isNullOrUndefined(currentElement) ? (offset - count) : 0;\n return { 'element': inlineElement, 'index': indexInInline };\n }\n else if (offset === count + inlineElement.length && this.children[i + 1] instanceof FootnoteElementBox) {\n return { 'element': this.children[i + 1], 'index': indexInInline };\n }\n else {\n indexInInline = (offset - count);\n }\n return { 'element': inlineElement, 'index': indexInInline };\n }\n count += inlineElement.length;\n }\n if (offset > count) {\n indexInInline = isNullOrUndefined(inlineElement) ? offset : inlineElement.length;\n }\n return { 'element': inlineElement, 'index': indexInInline };\n };\n /**\n * Method to retrieve next element\n * @param line\n * @param index\n */\n LineWidget.prototype.getNextTextElement = function (line, index) {\n if (index < line.children.length - 1 && line.children[index]) {\n return line.children[index];\n }\n return null;\n };\n /**\n * @private\n */\n LineWidget.prototype.getHierarchicalIndex = function (hierarchicalIndex) {\n var node = this;\n hierarchicalIndex = node.paragraph.childWidgets.indexOf(node) + ';' + hierarchicalIndex;\n if (node.paragraph instanceof BlockWidget) {\n return node.paragraph.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n LineWidget.prototype.clone = function () {\n var line = new LineWidget(undefined);\n for (var j = 0; j < this.children.length; j++) {\n var element = this.children[j];\n var clone = element.clone();\n line.children.push(clone);\n clone.line = line;\n }\n line.width = this.width;\n line.height = this.height;\n if (!isNullOrUndefined(this.margin)) {\n line.margin = this.margin.clone();\n }\n return line;\n };\n /**\n * @private\n */\n LineWidget.prototype.destroy = function () {\n if (!isNullOrUndefined(this.children)) {\n for (var i = 0; i < this.children.length; i++) {\n this.children[i].destroy();\n }\n this.children = [];\n }\n this.children = undefined;\n if (this.paragraph) {\n this.paragraph.removeChild(this.indexInOwner);\n }\n this.paragraph = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n LineWidget.prototype.componentDestroy = function () {\n if (!isNullOrUndefined(this.children)) {\n for (var i = 0; i < this.children.length; i++) {\n var elementBox = this.children[i];\n elementBox.componentDestroy();\n }\n this.children = [];\n }\n this.children = undefined;\n this.paragraph = undefined;\n this.layoutedElements = [];\n this.layoutedElements = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n return LineWidget;\n}());\nexport { LineWidget };\n/**\n * @private\n */\nvar ElementBox = /** @class */ (function () {\n /**\n * Initialize the constructor of ElementBox\n */\n function ElementBox() {\n /**\n * @private\n */\n this.x = 0;\n /**\n * @private\n */\n this.y = 0;\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n /**\n * @private\n */\n this.isWidthUpdated = false;\n /**\n * @private\n */\n this.margin = new Margin(0, 0, 0, 0);\n /**\n * @private\n */\n this.padding = new Margin(0, 0, 0, 0);\n /**\n * @private\n */\n this.characterFormat = undefined;\n /**\n * @private\n */\n this.isRightToLeft = false;\n /**\n * @private\n */\n this.canTrigger = false;\n /**\n * @private\n */\n this.ischangeDetected = false;\n /**\n * @private\n */\n this.isVisible = false;\n /**\n * @private\n */\n this.isSpellChecked = false;\n /**\n * @private\n */\n this.revisions = [];\n /**\n * @private\n */\n this.canTrack = false;\n /**\n * @private\n */\n this.removedIds = [];\n /**\n * @private\n */\n this.isMarkedForRevision = false;\n /**\n * @private\n */\n this.skipformFieldLength = false;\n /**\n * @private\n */\n this.characterRange = undefined;\n this.characterFormat = new WCharacterFormat(this);\n this.margin = new Margin(0, 0, 0, 0);\n }\n Object.defineProperty(ElementBox.prototype, \"isPageBreak\", {\n /**\n * @private\n */\n get: function () {\n if (this instanceof TextElementBox) {\n return this.text === '\\f';\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"isColumnBreak\", {\n get: function () {\n if (this instanceof TextElementBox) {\n return this.text === String.fromCharCode(14);\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"isValidNodeForTracking\", {\n /**\n * @private\n * Method to indicate whether current element is trackable.\n */\n get: function () {\n if (this instanceof BookmarkElementBox || this instanceof CommentCharacterElementBox || this instanceof EditRangeStartElementBox || this instanceof EditRangeEndElementBox || this instanceof ContentControl) {\n return false;\n }\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"isCheckBoxElement\", {\n /**\n * @private\n */\n get: function () {\n var element = this;\n if (element instanceof TextElementBox && !isNullOrUndefined(element.text)) {\n return element.text === String.fromCharCode(9745) || element.text === String.fromCharCode(9744);\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.linkFieldCharacter = function (documentHelper) {\n if (!(this instanceof FieldElementBox)) {\n return;\n }\n if (this.fieldType === 0) {\n var fieldBegin = this;\n if (isNullOrUndefined(fieldBegin.fieldEnd)) {\n this.linkFieldTraversingForward(this.line, fieldBegin, fieldBegin);\n if (documentHelper.fields.indexOf(fieldBegin) === -1) {\n documentHelper.fields.push(fieldBegin);\n }\n if (!isNullOrUndefined(fieldBegin.formFieldData) &&\n documentHelper.formFields.indexOf(fieldBegin) === -1 && !documentHelper.layout.isInsertFormField) {\n documentHelper.formFields.push(fieldBegin);\n }\n }\n }\n else if (this.fieldType === 2) {\n var fieldSeparator = this;\n //Links the field begin for the current separator.\n if (isNullOrUndefined(fieldSeparator.fieldBegin)) {\n this.linkFieldTraversingBackwardSeparator(this.line, fieldSeparator, fieldSeparator);\n }\n if (!isNullOrUndefined(fieldSeparator.fieldBegin)) {\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n //Links to field end traversing from field separator.\n if (isNullOrUndefined(fieldSeparator.fieldEnd)) {\n var isFieldEnd = this.linkFieldTraversingForward(this.line, fieldSeparator.fieldBegin, fieldSeparator);\n if (isFieldEnd) {\n fieldSeparator.fieldEnd = fieldSeparator.fieldBegin.fieldEnd;\n }\n }\n if (fieldSeparator.fieldEnd) {\n fieldSeparator.fieldEnd.fieldSeparator = fieldSeparator;\n }\n }\n }\n else {\n var fieldEnd = this;\n //Links the field begin and separator for the current end.\n if (isNullOrUndefined(fieldEnd.fieldBegin)) {\n this.linkFieldTraversingBackward(this.line, fieldEnd, fieldEnd);\n }\n }\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackward = function (line, fieldEnd, previousNode) {\n var k = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n k = line.children.indexOf(previousNode) - 1;\n }\n for (var j = k; j >= 0; j--) {\n var childNode = line.children[j];\n if (childNode instanceof FieldElementBox) {\n if (childNode.fieldType === 0) {\n if (isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldEnd)) {\n childNode.fieldEnd = fieldEnd;\n }\n if (fieldEnd.fieldSeparator && isNullOrUndefined(fieldEnd.fieldSeparator.fieldBegin)) {\n fieldEnd.fieldSeparator.fieldBegin = childNode;\n if (isNullOrUndefined(childNode.fieldSeparator)) {\n childNode.fieldSeparator = fieldEnd.fieldSeparator;\n }\n }\n return !isNullOrUndefined(fieldEnd.fieldBegin);\n }\n }\n else if (childNode.fieldType === 2 && isNullOrUndefined(childNode.fieldEnd)) {\n fieldEnd.fieldSeparator = childNode;\n childNode.fieldEnd = fieldEnd;\n if (!isNullOrUndefined(childNode.fieldBegin)) {\n fieldEnd.fieldBegin = childNode.fieldBegin;\n }\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackward(line.previousLine, fieldEnd, this);\n }\n else if (line.paragraph.previousRenderedWidget instanceof ParagraphWidget\n && line.paragraph.previousRenderedWidget.childWidgets.length > 0) {\n var prevParagraph = line.paragraph.previousRenderedWidget;\n this.linkFieldTraversingBackward(prevParagraph.childWidgets[prevParagraph.childWidgets.length - 1], fieldEnd, this);\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingForward = function (line, fieldBegin, previousNode) {\n var i = 0;\n if (line.children.indexOf(previousNode) > -1) {\n i = line.children.indexOf(previousNode) + 1;\n }\n for (var j = i; j < line.children.length; j++) {\n var node = line.children[j];\n if (node instanceof FieldElementBox) {\n if (node.fieldType === 1) {\n if (isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldEnd = node;\n }\n if (fieldBegin.fieldEnd && isNullOrUndefined(fieldBegin.fieldEnd.fieldBegin)) {\n fieldBegin.fieldEnd.fieldBegin = fieldBegin;\n }\n return true;\n }\n else if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n if (node.fieldType === 2 && isNullOrUndefined(node.fieldBegin)) {\n fieldBegin.fieldSeparator = node;\n if (fieldBegin.fieldSeparator && isNullOrUndefined(fieldBegin.fieldSeparator.fieldBegin)) {\n fieldBegin.fieldSeparator.fieldBegin = fieldBegin;\n }\n if (!isNullOrUndefined(node.fieldEnd)) {\n fieldBegin.fieldEnd = node.fieldEnd;\n fieldBegin.fieldSeparator.fieldEnd = fieldBegin.fieldEnd;\n return true;\n }\n }\n else {\n return false;\n }\n }\n }\n }\n if (line.nextLine) {\n this.linkFieldTraversingForward(line.nextLine, fieldBegin, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof ParagraphWidget\n && line.paragraph.nextRenderedWidget.childWidgets.length > 0) {\n this.linkFieldTraversingForward(line.paragraph.nextRenderedWidget.childWidgets[0], fieldBegin, this);\n }\n else if (line.paragraph.nextRenderedWidget instanceof TableWidget) {\n var tableWidget = line.paragraph.nextRenderedWidget;\n tableWidget = tableWidget.getSplitWidgets().pop();\n if (!isNullOrUndefined(tableWidget.nextRenderedWidget) && tableWidget.nextRenderedWidget instanceof ParagraphWidget && tableWidget.nextRenderedWidget.childWidgets.length > 0) {\n this.linkFieldTraversingForward(tableWidget.nextRenderedWidget.childWidgets[0], fieldBegin, this);\n }\n }\n return true;\n };\n /**\n * @private\n */\n ElementBox.prototype.linkFieldTraversingBackwardSeparator = function (line, fieldSeparator, previousNode) {\n var index = line.children.length - 1;\n if (line.children.indexOf(previousNode) > -1) {\n index = line.children.indexOf(previousNode) - 1;\n }\n for (var i = index; i >= 0; i--) {\n var childElement = line.children[i];\n if (childElement instanceof FieldElementBox) {\n if (childElement instanceof FieldElementBox && childElement.fieldType === 0) {\n if (isNullOrUndefined(childElement.fieldSeparator)) {\n fieldSeparator.fieldBegin = childElement;\n }\n return !isNullOrUndefined(fieldSeparator.fieldBegin);\n }\n }\n }\n if (line.previousLine) {\n this.linkFieldTraversingBackwardSeparator(line.previousLine, fieldSeparator, this);\n }\n else if (line.paragraph.previousRenderedWidget instanceof ParagraphWidget\n && line.paragraph.previousRenderedWidget.childWidgets.length > 0) {\n line = line.paragraph.previousRenderedWidget.childWidgets[line.paragraph.previousRenderedWidget.childWidgets.length - 1];\n this.linkFieldTraversingBackwardSeparator(line, fieldSeparator, this);\n }\n else {\n return true;\n }\n return true;\n };\n Object.defineProperty(ElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return this.getLength();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"indexInOwner\", {\n /**\n * @private\n */\n get: function () {\n return this.line instanceof LineWidget && this.line.children ? this.line.children.indexOf(this) : -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > 0 && index < this.line.children.length) {\n return this.line.children[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextElement\", {\n /**\n * @private\n */\n get: function () {\n var index = this.indexInOwner;\n if (index > -1 && index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index < this.line.children.length - 1) {\n return this.line.children[index + 1];\n }\n else if (lineIndex < this.line.paragraph.childWidgets.length - 1) {\n return this.line.paragraph.childWidgets[lineIndex + 1].children[0];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"nextValidNodeForTracking\", {\n /**\n * @private\n */\n get: function () {\n var elementBox = this;\n while (!isNullOrUndefined(elementBox) && (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox || elementBox instanceof ContentControl)) {\n elementBox = elementBox.nextNode;\n }\n return elementBox;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousValidNodeForTracking\", {\n /**\n * @private\n */\n get: function () {\n var elementBox = this;\n while (!isNullOrUndefined(elementBox) && (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox || elementBox instanceof ContentControl)) {\n elementBox = elementBox.previousNode;\n }\n return elementBox;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"previousNode\", {\n /**\n * @private\n */\n get: function () {\n var index = this.line.children.indexOf(this);\n var lineIndex = this.line.paragraph.childWidgets.indexOf(this.line);\n if (index > 0) {\n return this.line.children[index - 1];\n }\n else if (lineIndex > 0) {\n var lineWidget = this.line.paragraph.childWidgets[lineIndex - 1];\n return lineWidget.children[lineWidget.children.length - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ElementBox.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n if (this.line) {\n return this.line.paragraph;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ElementBox.prototype.destroy = function () {\n if (!isNullOrUndefined(this.line) && this.line.children && this.line.children.indexOf(this) > -1) {\n var index = this.line.children.indexOf(this);\n this.line.children.splice(index, 1);\n }\n this.line = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n }\n this.characterFormat = undefined;\n if (this.margin) {\n this.margin.destroy();\n }\n this.margin = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ElementBox.prototype.componentDestroy = function () {\n if (this.characterFormat) {\n this.characterFormat.destroy();\n }\n this.characterFormat = undefined;\n if (this.margin) {\n this.margin.destroy();\n }\n this.margin = undefined;\n if (this.padding) {\n this.padding.destroy();\n }\n this.padding = undefined;\n this.contentControlProperties = undefined;\n this.line = undefined;\n this.x = undefined;\n this.y = undefined;\n this.width = undefined;\n this.height = undefined;\n };\n /**\n * @private\n */\n ElementBox.objectCharacter = String.fromCharCode(65532);\n return ElementBox;\n}());\nexport { ElementBox };\n/**\n * @private\n */\nvar FieldElementBox = /** @class */ (function (_super) {\n __extends(FieldElementBox, _super);\n function FieldElementBox(type) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.fieldType = 0;\n /**\n * @private\n */\n _this.fieldCodeType = '';\n /**\n * @private\n */\n _this.hasFieldEnd = false;\n /**\n * @private\n */\n _this.fieldBeginInternal = undefined;\n _this.fieldSeparatorInternal = undefined;\n _this.fieldEndInternal = undefined;\n _this.fieldType = type;\n return _this;\n }\n Object.defineProperty(FieldElementBox.prototype, \"fieldBegin\", {\n get: function () {\n return this.fieldBeginInternal;\n },\n set: function (field) {\n this.fieldBeginInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldSeparator\", {\n get: function () {\n return this.fieldSeparatorInternal;\n },\n set: function (field) {\n this.fieldSeparatorInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"fieldEnd\", {\n get: function () {\n return this.fieldEndInternal;\n },\n set: function (field) {\n this.fieldEndInternal = field;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FieldElementBox.prototype, \"resultText\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.formFieldData) && this.fieldType === 0 &&\n !isNullOrUndefined(this.fieldSeparator) && !isNullOrUndefined(this.fieldEnd)) {\n var textElement = this.fieldSeparator.nextElement;\n var text = '';\n do {\n if (textElement instanceof TextElementBox) {\n text += textElement.text;\n }\n textElement = textElement.nextNode;\n if (textElement === this.fieldEnd) {\n break;\n }\n } while (textElement);\n return text;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.clone = function () {\n var field = new FieldElementBox(this.fieldType);\n if (this.fieldType === 0 && !isNullOrUndefined(this.formFieldData)) {\n field.formFieldData = this.formFieldData.clone();\n }\n field.characterFormat.copyFormat(this.characterFormat);\n if (this.margin) {\n field.margin = this.margin.clone();\n }\n field.width = this.width;\n field.height = this.height;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n field.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n field.removedIds = Revision.cloneRevisions(this.revisions);\n if (this.fieldEnd) {\n field.hasFieldEnd = this.hasFieldEnd;\n }\n }\n else {\n field.removedIds = this.removedIds.slice();\n }\n }\n field.fieldCodeType = this.fieldCodeType;\n return field;\n };\n /**\n * @private\n */\n FieldElementBox.prototype.destroy = function () {\n this.fieldType = undefined;\n this.hasFieldEnd = undefined;\n this.fieldBeginInternal = undefined;\n this.fieldEndInternal = undefined;\n this.fieldSeparatorInternal = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n FieldElementBox.prototype.componentDestroy = function () {\n if (this.formFieldData) {\n this.formFieldData.destroy();\n }\n this.formFieldData = undefined;\n this.fieldCodeType = undefined;\n this.fieldBeginInternal = undefined;\n this.fieldEndInternal = undefined;\n this.fieldSeparatorInternal = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return FieldElementBox;\n}(ElementBox));\nexport { FieldElementBox };\n/**\n * @private\n */\nvar FormField = /** @class */ (function () {\n function FormField() {\n /*\n * @private\n */\n this.name = '';\n /**\n * @private\n */\n this.enabled = true;\n /**\n * @private\n */\n this.helpText = '';\n /**\n * @private\n */\n this.statusText = '';\n }\n /**\n * @private\n */\n FormField.prototype.destroy = function () {\n this.name = undefined;\n this.helpText = undefined;\n this.statusText = undefined;\n };\n return FormField;\n}());\nexport { FormField };\n/**\n * @private\n */\nvar TextFormField = /** @class */ (function (_super) {\n __extends(TextFormField, _super);\n function TextFormField() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.type = 'Text';\n /**\n * @private\n */\n _this.maxLength = 0;\n /**\n * @private\n */\n _this.defaultValue = '';\n /**\n * @private\n */\n _this.format = '';\n return _this;\n }\n /**\n * @private\n */\n TextFormField.prototype.clone = function () {\n var textForm = new TextFormField();\n textForm.type = this.type;\n textForm.name = this.name;\n textForm.enabled = this.enabled;\n textForm.helpText = this.helpText;\n textForm.statusText = this.statusText;\n textForm.maxLength = this.maxLength;\n textForm.defaultValue = this.defaultValue;\n textForm.format = this.format;\n return textForm;\n };\n /**\n * @private\n */\n TextFormField.prototype.getFormFieldInfo = function () {\n var textFormField = {\n defaultValue: this.defaultValue,\n enabled: this.enabled,\n format: this.format,\n helpText: this.helpText,\n maxLength: this.maxLength,\n type: this.type,\n name: this.name\n };\n return textFormField;\n };\n /**\n * @private\n */\n TextFormField.prototype.copyFieldInfo = function (info) {\n if (!isNullOrUndefined(info.defaultValue)) {\n this.defaultValue = info.defaultValue;\n }\n if (!isNullOrUndefined(info.enabled)) {\n this.enabled = info.enabled;\n }\n if (!isNullOrUndefined(info.format)) {\n this.format = info.format;\n }\n if (!isNullOrUndefined(info.helpText)) {\n this.helpText = info.helpText;\n }\n if (!isNullOrUndefined(info.maxLength)) {\n this.maxLength = info.maxLength;\n }\n if (!isNullOrUndefined(info.type)) {\n this.type = info.type;\n }\n };\n /**\n * @private\n */\n TextFormField.prototype.destroy = function () {\n this.format = undefined;\n this.defaultValue = undefined;\n _super.prototype.destroy.call(this);\n };\n return TextFormField;\n}(FormField));\nexport { TextFormField };\n/**\n * @private\n */\nvar CheckBoxFormField = /** @class */ (function (_super) {\n __extends(CheckBoxFormField, _super);\n function CheckBoxFormField() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.sizeType = 'Auto';\n /**\n * @private\n */\n _this.size = 11;\n /**\n * @private\n */\n _this.defaultValue = false;\n /**\n * @private\n */\n _this.checked = false;\n return _this;\n }\n /**\n * @private\n */\n CheckBoxFormField.prototype.clone = function () {\n var checkBoxForm = new CheckBoxFormField();\n checkBoxForm.name = this.name;\n checkBoxForm.enabled = this.enabled;\n checkBoxForm.helpText = this.helpText;\n checkBoxForm.statusText = this.statusText;\n checkBoxForm.sizeType = this.sizeType;\n checkBoxForm.size = this.size;\n checkBoxForm.defaultValue = this.defaultValue;\n checkBoxForm.checked = this.checked;\n return checkBoxForm;\n };\n /**\n * @private\n */\n CheckBoxFormField.prototype.getFormFieldInfo = function () {\n var checkBoxFormField = {\n defaultValue: this.defaultValue,\n enabled: this.enabled,\n helpText: this.helpText,\n size: this.size,\n sizeType: this.sizeType,\n name: this.name\n };\n return checkBoxFormField;\n };\n /**\n * @private\n */\n CheckBoxFormField.prototype.copyFieldInfo = function (info) {\n if (!isNullOrUndefined(info.defaultValue)) {\n this.defaultValue = info.defaultValue;\n this.checked = info.defaultValue;\n }\n if (!isNullOrUndefined(info.enabled)) {\n this.enabled = info.enabled;\n }\n if (!isNullOrUndefined(info.size)) {\n this.size = info.size;\n }\n if (!isNullOrUndefined(info.helpText)) {\n this.helpText = info.helpText;\n }\n if (!isNullOrUndefined(info.sizeType)) {\n this.sizeType = info.sizeType;\n }\n };\n /**\n * @private\n */\n CheckBoxFormField.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n };\n return CheckBoxFormField;\n}(FormField));\nexport { CheckBoxFormField };\n/**\n * @private\n */\nvar DropDownFormField = /** @class */ (function (_super) {\n __extends(DropDownFormField, _super);\n function DropDownFormField() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.dropdownItems = [];\n /**\n * @private\n */\n _this.selectedIndex = 0;\n return _this;\n }\n /**\n * @private\n */\n DropDownFormField.prototype.clone = function () {\n var dropDown = new DropDownFormField();\n dropDown.name = this.name;\n dropDown.enabled = this.enabled;\n dropDown.helpText = this.helpText;\n dropDown.statusText = this.statusText;\n dropDown.dropdownItems = this.dropdownItems.slice();\n dropDown.selectedIndex = this.selectedIndex;\n return dropDown;\n };\n /**\n * @private\n */\n DropDownFormField.prototype.getFormFieldInfo = function () {\n var dropDownFormField = {\n dropdownItems: this.dropdownItems.slice(),\n enabled: this.enabled,\n helpText: this.helpText,\n name: this.name\n };\n return dropDownFormField;\n };\n /**\n * @private\n */\n DropDownFormField.prototype.copyFieldInfo = function (info) {\n if (!isNullOrUndefined(info.dropdownItems)) {\n this.dropdownItems = info.dropdownItems;\n }\n if (!isNullOrUndefined(info.enabled)) {\n this.enabled = info.enabled;\n }\n if (!isNullOrUndefined(info.helpText)) {\n this.helpText = info.helpText;\n }\n };\n /**\n * @private\n */\n DropDownFormField.prototype.destroy = function () {\n this.dropdownItems = [];\n this.dropdownItems = undefined;\n _super.prototype.destroy.call(this);\n };\n return DropDownFormField;\n}(FormField));\nexport { DropDownFormField };\n/**\n * @private\n */\nvar TextElementBox = /** @class */ (function (_super) {\n __extends(TextElementBox, _super);\n function TextElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.text = '';\n /**\n * @private\n */\n _this.trimEndWidth = 0;\n /**\n * @private\n */\n _this.ignoreOnceItems = [];\n /**\n * @private\n */\n _this.istextCombined = false;\n /**\n * @private\n */\n _this.scriptType = FontScriptType.English;\n /**\n * @private\n */\n _this.renderedFontFamily = undefined;\n _this.errorCollection = [];\n return _this;\n }\n /**\n * @private\n */\n TextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n TextElementBox.prototype.clone = function () {\n var textEle = new TextElementBox();\n textEle.characterFormat.copyFormat(this.characterFormat);\n textEle.text = this.text;\n if (this.margin) {\n textEle.margin = this.margin.clone();\n }\n textEle.baselineOffset = this.baselineOffset;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n textEle.revisions.push(revision.clone());\n }\n }\n }\n else {\n // Copy the revisions when cloning the header row.\n if (this.paragraph && this.paragraph.isInsideTable && this.paragraph.containerWidget instanceof TableCellWidget && this.paragraph.containerWidget.ownerRow.rowFormat.isHeader) {\n textEle.revisions = this.revisions;\n }\n else {\n if (this.revisions.length > 0) {\n textEle.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n textEle.removedIds = this.removedIds.slice();\n }\n }\n }\n textEle.width = this.width;\n textEle.height = this.height;\n if (this.contentControlProperties) {\n textEle.contentControlProperties = this.contentControlProperties;\n }\n return textEle;\n };\n /**\n * @private\n */\n TextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * @private\n */\n TextElementBox.prototype.componentDestroy = function () {\n this.text = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return TextElementBox;\n}(ElementBox));\nexport { TextElementBox };\n/**\n * @private\n */\nvar Footnote = /** @class */ (function () {\n function Footnote() {\n this.separator = [];\n this.continuationNotice = [];\n this.continuationSeparator = [];\n }\n /**\n * @private\n */\n Footnote.prototype.clear = function () {\n if (this.separator) {\n for (var i = 0; i < this.separator.length; i++) {\n var bodyWidget = this.separator[i];\n bodyWidget.destroy();\n }\n this.separator = [];\n }\n if (this.continuationSeparator) {\n for (var i = 0; i < this.continuationSeparator.length; i++) {\n var bodyWidget = this.continuationSeparator[i];\n bodyWidget.destroy();\n }\n this.continuationSeparator = [];\n }\n if (this.continuationNotice) {\n for (var i = 0; i < this.continuationNotice.length; i++) {\n var bodyWidget = this.continuationNotice[i];\n bodyWidget.destroy();\n }\n this.continuationNotice = [];\n }\n };\n Footnote.prototype.destroy = function () {\n this.separator = [];\n this.continuationSeparator = [];\n this.continuationNotice = [];\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n Footnote.prototype.componentDestroy = function () {\n if (this.separator) {\n for (var i = 0; i < this.separator.length; i++) {\n var bodyWidget = this.separator[i];\n bodyWidget.componentDestroy();\n }\n this.separator = [];\n }\n this.separator = undefined;\n if (this.continuationSeparator) {\n for (var i = 0; i < this.continuationSeparator.length; i++) {\n var bodyWidget = this.continuationSeparator[i];\n bodyWidget.componentDestroy();\n }\n this.continuationSeparator = [];\n }\n this.continuationSeparator = undefined;\n if (this.continuationNotice) {\n for (var i = 0; i < this.continuationNotice.length; i++) {\n var bodyWidget = this.continuationNotice[i];\n bodyWidget.componentDestroy();\n }\n this.continuationNotice = [];\n }\n this.continuationNotice = undefined;\n };\n return Footnote;\n}());\nexport { Footnote };\n/**\n * @private\n */\nvar FootnoteElementBox = /** @class */ (function (_super) {\n __extends(FootnoteElementBox, _super);\n function FootnoteElementBox() {\n var _this = _super.call(this) || this;\n _this.isLayout = false;\n _this.bodyWidget = new BodyWidget();\n _this.bodyWidget.footNoteReference = _this;\n return _this;\n }\n FootnoteElementBox.prototype.clone = function () {\n var span = new FootnoteElementBox();\n span.text = this.text;\n span.characterFormat.copyFormat(this.characterFormat);\n span.height = this.height;\n span.footnoteType = this.footnoteType;\n span.width = this.width;\n span.symbolCode = this.symbolCode;\n // span.bodyWidget.childWidgets = this.bodyWidget.childWidgets;\n for (var i = 0; i < this.bodyWidget.childWidgets.length; i++) {\n var element = this.bodyWidget.childWidgets[i];\n if (element instanceof ParagraphWidget) {\n element = this.bodyWidget.childWidgets[i].clone();\n }\n else if (element instanceof TableWidget) {\n element = this.bodyWidget.childWidgets[i].clone();\n }\n span.bodyWidget.childWidgets.push(element);\n }\n span.bodyWidget.page = this.bodyWidget.page;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n span.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n span.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n span.removedIds = this.removedIds.slice();\n }\n }\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n return span;\n };\n FootnoteElementBox.prototype.getLength = function () {\n return 1;\n };\n FootnoteElementBox.prototype.destroy = function () {\n this.symbolCode = '';\n this.symbolFontName = '';\n this.customMarker = '';\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n FootnoteElementBox.prototype.componentDestroy = function () {\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n this.symbolCode = '';\n this.symbolFontName = '';\n this.customMarker = '';\n if (this.bodyWidget) {\n this.bodyWidget.componentDestroy();\n }\n this.bodyWidget = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return FootnoteElementBox;\n}(TextElementBox));\nexport { FootnoteElementBox };\n/**\n * @private\n */\nvar ErrorTextElementBox = /** @class */ (function (_super) {\n __extends(ErrorTextElementBox, _super);\n function ErrorTextElementBox() {\n var _this = _super.call(this) || this;\n _this.startIn = undefined;\n _this.endIn = undefined;\n return _this;\n }\n Object.defineProperty(ErrorTextElementBox.prototype, \"start\", {\n get: function () {\n return this.startIn;\n },\n set: function (value) {\n this.startIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ErrorTextElementBox.prototype, \"end\", {\n get: function () {\n return this.endIn;\n },\n set: function (value) {\n this.endIn = value;\n },\n enumerable: true,\n configurable: true\n });\n ErrorTextElementBox.prototype.destroy = function () {\n this.start = undefined;\n this.end = undefined;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ErrorTextElementBox.prototype.componentDestroy = function () {\n if (this.startIn) {\n this.startIn.destroy();\n }\n this.startIn = undefined;\n if (this.endIn) {\n this.endIn.destroy();\n }\n this.endIn = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return ErrorTextElementBox;\n}(TextElementBox));\nexport { ErrorTextElementBox };\n/**\n * @private\n */\nvar FieldTextElementBox = /** @class */ (function (_super) {\n __extends(FieldTextElementBox, _super);\n function FieldTextElementBox() {\n var _this = _super.call(this) || this;\n _this.fieldText = '';\n return _this;\n }\n Object.defineProperty(FieldTextElementBox.prototype, \"text\", {\n get: function () {\n return this.fieldText;\n },\n set: function (value) {\n this.fieldText = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n FieldTextElementBox.prototype.clone = function () {\n var fieldSpan = new FieldTextElementBox();\n fieldSpan.characterFormat.copyFormat(this.characterFormat);\n fieldSpan.fieldBegin = this.fieldBegin;\n fieldSpan.text = this.text;\n if (this.margin) {\n fieldSpan.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revisionChanges = this.revisions[i];\n fieldSpan.revisions.push(revisionChanges.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n fieldSpan.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n fieldSpan.removedIds = this.removedIds.slice();\n }\n }\n fieldSpan.width = this.width;\n fieldSpan.height = this.height;\n return fieldSpan;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n FieldTextElementBox.prototype.componentDestroy = function () {\n this.fieldText = undefined;\n this.fieldBegin = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return FieldTextElementBox;\n}(TextElementBox));\nexport { FieldTextElementBox };\n/**\n * @private\n */\nvar TabElementBox = /** @class */ (function (_super) {\n __extends(TabElementBox, _super);\n function TabElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.tabText = '';\n /**\n * @private\n */\n _this.tabLeader = 'None';\n return _this;\n }\n /**\n * @private\n */\n TabElementBox.prototype.destroy = function () {\n this.tabText = undefined;\n this.tabLeader = undefined;\n };\n /**\n * @private\n */\n TabElementBox.prototype.componentDestroy = function () {\n this.tabText = undefined;\n this.tabLeader = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n /**\n * @private\n */\n TabElementBox.prototype.clone = function () {\n var tabSpan = new TabElementBox();\n tabSpan.characterFormat.copyFormat(this.characterFormat);\n tabSpan.tabText = this.tabText;\n tabSpan.tabLeader = this.tabLeader;\n tabSpan.text = this.text;\n if (this.margin) {\n tabSpan.margin = this.margin.clone();\n }\n tabSpan.width = this.width;\n tabSpan.height = this.height;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n tabSpan.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n tabSpan.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n tabSpan.removedIds = this.removedIds.slice();\n }\n }\n return tabSpan;\n };\n return TabElementBox;\n}(TextElementBox));\nexport { TabElementBox };\n/**\n * @private\n */\nvar BookmarkElementBox = /** @class */ (function (_super) {\n __extends(BookmarkElementBox, _super);\n function BookmarkElementBox(type) {\n var _this = _super.call(this) || this;\n _this.bookmarkTypeIn = 0;\n _this.refereneceIn = undefined;\n _this.nameIn = '';\n _this.bookmarkTypeIn = type;\n return _this;\n }\n Object.defineProperty(BookmarkElementBox.prototype, \"bookmarkType\", {\n /**\n * @private\n */\n get: function () {\n return this.bookmarkTypeIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"properties\", {\n /**\n * @private\n */\n get: function () {\n return this.propertiesIn;\n },\n /**\n * @private\n */\n set: function (properties) {\n this.propertiesIn = properties;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"name\", {\n /**\n * @private\n */\n get: function () {\n return this.nameIn;\n },\n /**\n * @private\n */\n set: function (name) {\n this.nameIn = name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BookmarkElementBox.prototype, \"reference\", {\n /**\n * @private\n */\n get: function () {\n return this.refereneceIn;\n },\n /**\n * @private\n */\n set: function (reference) {\n this.refereneceIn = reference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n BookmarkElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n BookmarkElementBox.prototype.destroy = function () {\n this.name = undefined;\n this.reference = undefined;\n this.bookmarkTypeIn = undefined;\n };\n /**\n * @private\n */\n BookmarkElementBox.prototype.componentDestroy = function () {\n this.name = undefined;\n this.reference = undefined;\n this.bookmarkTypeIn = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n /**\n * Clones the bookmark element box.\n * @param element - book mark element\n */\n /**\n * @private\n */\n BookmarkElementBox.prototype.clone = function () {\n var span = new BookmarkElementBox(this.bookmarkType);\n span.name = this.name;\n span.reference = this.reference;\n span.properties = this.properties;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n if (this.revisions.length > 0) {\n span.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n span.removedIds = this.removedIds.slice();\n }\n span.width = this.width;\n span.height = this.height;\n if (this.contentControlProperties) {\n span.contentControlProperties = this.contentControlProperties;\n }\n return span;\n };\n return BookmarkElementBox;\n}(ElementBox));\nexport { BookmarkElementBox };\n/**\n * @private\n */\nvar ContentControl = /** @class */ (function (_super) {\n __extends(ContentControl, _super);\n function ContentControl(widgetType) {\n var _this = _super.call(this) || this;\n _this.contentControlWidgetType = widgetType;\n _this.contentControlProperties = new ContentControlProperties(widgetType);\n return _this;\n }\n /**\n * @private\n */\n ContentControl.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ContentControl.prototype.clone = function () {\n var span = new ContentControl(this.contentControlWidgetType);\n span.characterFormat.copyFormat(this.characterFormat);\n span.contentControlProperties = this.contentControlProperties;\n span.contentControlWidgetType = this.contentControlWidgetType;\n if (this.margin) {\n span.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revisionChange = this.revisions[i];\n span.revisions.push(revisionChange.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n span.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n span.removedIds = this.removedIds.slice();\n }\n }\n span.type = this.type;\n span.width = this.width;\n span.height = this.height;\n span.reference = this.reference;\n return span;\n };\n /**\n * @private\n */\n ContentControl.prototype.destroy = function () {\n this.contentControlProperties = undefined;\n this.contentControlWidgetType = undefined;\n _super.prototype.destroy.call(this);\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ContentControl.prototype.componentDestroy = function () {\n if (this.contentControlProperties) {\n this.contentControlProperties.destroy();\n this.contentControlProperties = undefined;\n }\n this.contentControlWidgetType = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return ContentControl;\n}(ElementBox));\nexport { ContentControl };\n/**\n * @private\n */\n/**\n * @private\n */\nvar ContentControlProperties = /** @class */ (function () {\n function ContentControlProperties(widgetType) {\n /**\n * @private\n */\n this.contentControlListItems = [];\n this.contentControlWidgetType = widgetType;\n this.characterFormat = new WCharacterFormat();\n }\n /**\n * @private\n */\n ContentControlProperties.prototype.destroy = function () {\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (this.xmlMapping) {\n this.xmlMapping.destroy();\n this.xmlMapping = undefined;\n }\n this.lockContentControl = undefined;\n this.lockContents = undefined;\n this.tag = undefined;\n this.color = undefined;\n this.title = undefined;\n this.appearance = undefined;\n this.type = undefined;\n this.hasPlaceHolderText = undefined;\n this.multiline = undefined;\n this.isTemporary = undefined;\n this.isChecked = undefined;\n this.dateCalendarType = undefined;\n this.dateStorageFormat = undefined;\n this.dateDisplayLocale = undefined;\n this.dateDisplayFormat = undefined;\n };\n /**\n * @private\n */\n ContentControlProperties.prototype.clone = function () {\n var span = new ContentControlProperties(this.contentControlWidgetType);\n span.lockContentControl = this.lockContentControl;\n span.lockContents = this.lockContents;\n span.tag = this.tag;\n span.color = this.color;\n span.title = this.title;\n span.appearance = this.appearance;\n span.type = this.type;\n span.hasPlaceHolderText = this.hasPlaceHolderText;\n span.multiline = this.multiline;\n span.isTemporary = this.isTemporary;\n span.isChecked = this.isChecked;\n span.dateCalendarType = this.dateCalendarType;\n span.dateStorageFormat = this.dateStorageFormat;\n span.dateDisplayLocale = this.dateDisplayLocale;\n span.dateDisplayFormat = this.dateDisplayFormat;\n if (this.contentControlListItems.length > 0) {\n for (var i = 0; i < this.contentControlListItems.length; i++) {\n span.contentControlListItems.push(this.contentControlListItems[i].clone());\n }\n }\n if (this.checkedState) {\n span.checkedState = this.checkedState.clone();\n }\n if (this.uncheckedState) {\n span.uncheckedState = this.uncheckedState.clone();\n }\n if (this.xmlMapping) {\n span.xmlMapping = this.xmlMapping.clone();\n }\n return span;\n };\n return ContentControlProperties;\n}());\nexport { ContentControlProperties };\n/**\n * @private\n */\nvar ContentControlListItems = /** @class */ (function () {\n function ContentControlListItems() {\n }\n /**\n * @private\n */\n ContentControlListItems.prototype.destroy = function () {\n this.displayText = undefined;\n this.value = undefined;\n };\n /**\n * @private\n */\n ContentControlListItems.prototype.clone = function () {\n var span = new ContentControlListItems();\n span.displayText = this.displayText;\n span.value = this.value;\n return span;\n };\n return ContentControlListItems;\n}());\nexport { ContentControlListItems };\n/**\n * @private\n */\nvar CheckBoxState = /** @class */ (function () {\n function CheckBoxState() {\n }\n /**\n * @private\n */\n CheckBoxState.prototype.destroy = function () {\n this.font = undefined;\n this.value = undefined;\n };\n /**\n * @private\n */\n CheckBoxState.prototype.clone = function () {\n var span = new CheckBoxState();\n span.font = this.font;\n span.value = this.value;\n return span;\n };\n return CheckBoxState;\n}());\nexport { CheckBoxState };\n/**\n * @private\n */\nvar XmlMapping = /** @class */ (function () {\n function XmlMapping() {\n }\n /**\n * @private\n */\n XmlMapping.prototype.destroy = function () {\n this.isMapped = undefined;\n this.isWordMl = undefined;\n this.prefixMapping = undefined;\n this.xPath = undefined;\n this.storeItemId = undefined;\n this.customXmlPart = undefined;\n };\n /**\n * @private\n */\n XmlMapping.prototype.clone = function () {\n var span = new XmlMapping();\n span.isMapped = this.isMapped;\n span.isWordMl = this.isWordMl;\n span.prefixMapping = this.prefixMapping;\n span.xPath = this.xPath;\n span.storeItemId = this.storeItemId;\n if (this.customXmlPart) {\n span.customXmlPart = this.customXmlPart.clone();\n }\n return span;\n };\n return XmlMapping;\n}());\nexport { XmlMapping };\n/**\n * @private\n */\nvar CustomXmlPart = /** @class */ (function () {\n function CustomXmlPart() {\n }\n /**\n * @private\n */\n CustomXmlPart.prototype.destroy = function () {\n this.id = undefined;\n this.xml = undefined;\n };\n /**\n * @private\n */\n CustomXmlPart.prototype.clone = function () {\n var span = new CustomXmlPart();\n span.id = this.id;\n span.xml = this.xml;\n return span;\n };\n return CustomXmlPart;\n}());\nexport { CustomXmlPart };\n/**\n * @private\n */\nvar ShapeCommon = /** @class */ (function (_super) {\n __extends(ShapeCommon, _super);\n function ShapeCommon() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.name = '';\n /**\n * @private\n */\n _this.alternateText = '';\n /**\n * @private\n */\n _this.title = '';\n return _this;\n }\n /**\n *\n * @private\n */\n ShapeCommon.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ShapeCommon.prototype.clone = function () {\n var shape = new ShapeElementBox();\n return shape;\n };\n return ShapeCommon;\n}(ElementBox));\nexport { ShapeCommon };\n/**\n * @private\n */\nvar ShapeBase = /** @class */ (function (_super) {\n __extends(ShapeBase, _super);\n function ShapeBase() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.verticalPosition = 0;\n /**\n * @private\n */\n _this.horizontalPosition = 0;\n /**\n * @private\n */\n _this.textWrappingStyle = 'Inline';\n /**\n * @private\n */\n _this.distanceBottom = 0;\n /**\n * @private\n */\n _this.distanceLeft = 0;\n /**\n * @private\n */\n _this.distanceRight = 0;\n /**\n * @private\n */\n _this.distanceTop = 0;\n return _this;\n }\n return ShapeBase;\n}(ShapeCommon));\nexport { ShapeBase };\n/**\n * @private\n */\nvar ShapeElementBox = /** @class */ (function (_super) {\n __extends(ShapeElementBox, _super);\n function ShapeElementBox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @private\n */\n ShapeElementBox.prototype.clone = function () {\n var shape = new ShapeElementBox();\n shape.characterFormat.copyFormat(this.characterFormat);\n shape.x = this.x;\n shape.y = this.y;\n shape.width = this.width;\n shape.height = this.height;\n shape.shapeId = this.shapeId;\n shape.name = this.name;\n shape.alternateText = this.alternateText;\n shape.title = this.title;\n shape.widthScale = this.widthScale;\n shape.heightScale = this.heightScale;\n shape.visible = this.visible;\n shape.verticalPosition = this.verticalPosition;\n shape.verticalAlignment = this.verticalAlignment;\n shape.verticalOrigin = this.verticalOrigin;\n shape.verticalRelativePercent = this.verticalRelativePercent;\n shape.horizontalPosition = this.horizontalPosition;\n shape.horizontalAlignment = this.horizontalAlignment;\n shape.horizontalOrigin = this.horizontalOrigin;\n shape.horizontalRelativePercent = this.horizontalRelativePercent;\n shape.heightRelativePercent = this.heightRelativePercent;\n shape.widthRelativePercent = this.widthRelativePercent;\n shape.zOrderPosition = this.zOrderPosition;\n shape.allowOverlap = this.allowOverlap;\n shape.textWrappingStyle = this.textWrappingStyle;\n shape.textWrappingType = this.textWrappingType;\n shape.distanceBottom = this.distanceBottom;\n shape.distanceLeft = this.distanceLeft;\n shape.distanceRight = this.distanceRight;\n shape.distanceTop = this.distanceTop;\n shape.layoutInCell = this.layoutInCell;\n shape.lockAnchor = this.lockAnchor;\n shape.autoShapeType = this.autoShapeType;\n if (this.lineFormat) {\n shape.lineFormat = this.lineFormat.clone();\n }\n if (this.fillFormat) {\n shape.fillFormat = this.fillFormat.clone();\n }\n if (this.textFrame) {\n shape.textFrame = this.textFrame.clone();\n shape.textFrame.containerShape = shape;\n }\n if (this.margin) {\n shape.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n shape.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n shape.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n shape.removedIds = this.removedIds.slice();\n }\n }\n return shape;\n };\n return ShapeElementBox;\n}(ShapeBase));\nexport { ShapeElementBox };\n/**\n * @private\n */\nvar TextFrame = /** @class */ (function (_super) {\n __extends(TextFrame, _super);\n function TextFrame() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * @private\n */\n _this.marginLeft = 0;\n /**\n * @private\n */\n _this.marginRight = 0;\n /**\n * @private\n */\n _this.marginTop = 0;\n /**\n * @private\n */\n _this.marginBottom = 0;\n return _this;\n }\n TextFrame.prototype.equals = function () {\n return false;\n };\n TextFrame.prototype.destroyInternal = function () {\n //return;\n };\n TextFrame.prototype.getHierarchicalIndex = function (index) {\n var line = this.containerShape.line;\n var offset = line.getOffset(this.containerShape, 0).toString();\n return line.getHierarchicalIndex(offset);\n };\n TextFrame.prototype.getTableCellWidget = function () {\n return undefined;\n };\n /**\n * @private\n */\n TextFrame.prototype.clone = function () {\n var textFrame = new TextFrame();\n textFrame.textVerticalAlignment = this.textVerticalAlignment;\n textFrame.marginBottom = this.marginBottom;\n textFrame.marginLeft = this.marginLeft;\n textFrame.marginRight = this.marginRight;\n textFrame.marginTop = this.marginTop;\n for (var i = 0; i < this.childWidgets.length; i++) {\n var block = this.childWidgets[i].clone();\n textFrame.childWidgets.push(block);\n block.index = i;\n block.containerWidget = textFrame;\n }\n return textFrame;\n };\n return TextFrame;\n}(Widget));\nexport { TextFrame };\n/**\n * @private\n */\nvar LineFormat = /** @class */ (function () {\n function LineFormat() {\n }\n /**\n * @private\n */\n LineFormat.prototype.clone = function () {\n var lineFormat = new LineFormat();\n lineFormat.lineFormatType = this.lineFormatType;\n lineFormat.color = this.color;\n lineFormat.weight = this.weight;\n lineFormat.dashStyle = this.dashStyle;\n lineFormat.line = this.line;\n return lineFormat;\n };\n return LineFormat;\n}());\nexport { LineFormat };\n/**\n * @private\n */\nvar FillFormat = /** @class */ (function () {\n function FillFormat() {\n }\n /**\n * @private\n */\n FillFormat.prototype.clone = function () {\n var fillFormat = new FillFormat();\n fillFormat.color = this.color;\n fillFormat.fill = this.fill;\n return fillFormat;\n };\n return FillFormat;\n}());\nexport { FillFormat };\n/**\n * @private\n */\nvar ImageElementBox = /** @class */ (function (_super) {\n __extends(ImageElementBox, _super);\n function ImageElementBox(isInlineImage) {\n var _this = _super.call(this) || this;\n _this.imageStr = '';\n _this.imgElement = undefined;\n _this.isInlineImageIn = true;\n _this.crop = false;\n /**\n * @private\n */\n _this.left = 0;\n /**\n * @private\n */\n _this.top = 0;\n /**\n * @private\n */\n _this.right = 0;\n /**\n * @private\n */\n _this.bottom = 0;\n /**\n * @private\n */\n _this.isMetaFile = false;\n /**\n * @private\n */\n _this.isCompressed = false;\n _this.isInlineImageIn = isInlineImage;\n return _this;\n }\n Object.defineProperty(ImageElementBox.prototype, \"isCrop\", {\n /**\n * @private\n */\n get: function () {\n return this.crop;\n },\n set: function (value) {\n this.crop = value;\n if (value) {\n var right = 0;\n var bottom = 0;\n if (this.left !== 0) {\n this.cropX = (this.left * this.cropWidthScale) / 100;\n }\n else {\n this.cropX = 0;\n }\n if (this.top !== 0) {\n this.cropY = (this.top * this.cropHeightScale) / 100;\n }\n else {\n this.cropY = 0;\n }\n if (this.right !== 0) {\n right = (this.right * this.cropWidthScale) / 100;\n }\n if (this.bottom !== 0) {\n bottom = (this.bottom * this.cropHeightScale) / 100;\n }\n this.cropWidth = (this.cropWidthScale - (this.cropX + right));\n this.cropHeight = (this.cropHeightScale - (this.cropY + bottom));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"isInlineImage\", {\n /**\n * @private\n */\n get: function () {\n return this.isInlineImageIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"element\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.imgElement)) {\n this.imgElement = document.createElement('img');\n }\n return this.imgElement;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"length\", {\n /**\n * @private\n */\n get: function () {\n return 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageElementBox.prototype, \"imageString\", {\n /**\n * @private\n */\n get: function () {\n return this.imageStr;\n },\n /**\n * @private\n */\n set: function (value) {\n this.imageStr = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ImageElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.clone = function () {\n var image = new ImageElementBox(this.isInlineImage);\n image.characterFormat.copyFormat(this.characterFormat);\n image.imageString = this.imageString;\n image.element.src = this.element.src;\n image.isMetaFile = this.isMetaFile;\n image.isCompressed = this.isCompressed;\n image.metaFileImageString = this.metaFileImageString;\n image.width = this.width;\n image.height = this.height;\n image.top = this.top;\n image.left = this.left;\n image.bottom = this.bottom;\n image.right = this.right;\n image.cropHeightScale = this.cropHeightScale;\n image.cropWidthScale = this.cropWidthScale;\n image.cropX = this.cropX;\n image.cropY = this.cropY;\n image.isCrop = this.isCrop;\n image.x = this.x;\n image.y = this.y;\n if (this.margin) {\n image.margin = this.margin.clone();\n }\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n image.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n image.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n image.removedIds = this.removedIds.slice();\n }\n }\n image.name = this.name;\n image.alternateText = this.alternateText;\n image.title = this.title;\n image.visible = this.visible;\n image.widthScale = this.widthScale;\n image.heightScale = this.heightScale;\n image.verticalPosition = this.verticalPosition;\n image.verticalOrigin = this.verticalOrigin;\n image.verticalAlignment = this.verticalAlignment;\n image.horizontalPosition = this.horizontalPosition;\n image.horizontalOrigin = this.horizontalOrigin;\n image.horizontalAlignment = this.horizontalAlignment;\n image.allowOverlap = this.allowOverlap;\n image.textWrappingStyle = this.textWrappingStyle;\n image.textWrappingType = this.textWrappingType;\n image.layoutInCell = this.layoutInCell;\n image.zOrderPosition = this.zOrderPosition;\n return image;\n };\n /**\n * @private\n */\n ImageElementBox.prototype.destroy = function () {\n this.imgElement = undefined;\n this.imageString = undefined;\n this.isInlineImageIn = undefined;\n _super.prototype.destroy.call(this);\n };\n return ImageElementBox;\n}(ShapeBase));\nexport { ImageElementBox };\n/**\n * @private\n */\nvar ListTextElementBox = /** @class */ (function (_super) {\n __extends(ListTextElementBox, _super);\n function ListTextElementBox(listLevel, isListFollowCharacter) {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.baselineOffset = 0;\n /**\n * @private\n */\n _this.trimEndWidth = 0;\n /**\n * @private\n */\n _this.isFollowCharacter = false;\n _this.listLevel = listLevel;\n _this.isFollowCharacter = isListFollowCharacter;\n return _this;\n }\n /**\n * @private\n */\n ListTextElementBox.prototype.getLength = function () {\n return this.text ? this.text.length : 0;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.clone = function () {\n var list = new ListTextElementBox(this.listLevel, this.isFollowCharacter);\n list.text = this.text;\n list.baselineOffset = this.baselineOffset;\n if (this.margin) {\n list.margin = this.margin.clone();\n }\n list.width = this.width;\n list.height = this.height;\n return list;\n };\n /**\n * @private\n */\n ListTextElementBox.prototype.destroy = function () {\n this.text = undefined;\n _super.prototype.destroy.call(this);\n };\n return ListTextElementBox;\n}(ElementBox));\nexport { ListTextElementBox };\n/**\n * @private\n */\nvar EditRangeEndElementBox = /** @class */ (function (_super) {\n __extends(EditRangeEndElementBox, _super);\n function EditRangeEndElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.editRangeStart = undefined;\n _this.editRangeId = -1;\n return _this;\n }\n /**\n * @private\n */\n EditRangeEndElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n EditRangeEndElementBox.prototype.destroy = function () {\n this.editRangeStart = undefined;\n };\n /**\n * @private\n */\n EditRangeEndElementBox.prototype.clone = function () {\n var end = new EditRangeEndElementBox();\n end.editRangeStart = this.editRangeStart;\n end.editRangeId = this.editRangeId;\n return end;\n };\n return EditRangeEndElementBox;\n}(ElementBox));\nexport { EditRangeEndElementBox };\n/**\n * @private\n */\nvar EditRangeStartElementBox = /** @class */ (function (_super) {\n __extends(EditRangeStartElementBox, _super);\n function EditRangeStartElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.columnFirst = -1;\n /**\n * @private\n */\n _this.columnLast = -1;\n /**\n * @private\n */\n _this.user = '';\n /**\n * @private\n */\n _this.group = '';\n _this.editRangeId = -1;\n return _this;\n }\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.renderLockMark = function (currentUser, locale) {\n if (isNullOrUndefined(this.editRangeMark)) {\n var user = currentUser === this.user ? 'you' : this.user;\n this.editRangeMark = document.createElement('div');\n this.editRangeMark.style.display = 'none';\n this.editRangeMark.classList.add('e-de-lock-mark');\n var span = document.createElement('span');\n span.className = 'e-icons e-de-ctnr-lock';\n this.editRangeMark.appendChild(span);\n this.editRangeMark.title = locale.getConstant('This region is locked by') + ' ' + user;\n }\n if (this.line && isNullOrUndefined(this.editRangeMark.parentElement)) {\n var documentHelper = this.line.paragraph.bodyWidget.page.documentHelper;\n documentHelper.pageContainer.appendChild(this.editRangeMark);\n }\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.removeEditRangeMark = function () {\n if (this.editRangeMark) {\n this.editRangeMark.parentElement.removeChild(this.editRangeMark);\n this.editRangeMark = undefined;\n }\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.destroy = function () {\n this.user = undefined;\n this.columnFirst = undefined;\n this.columnLast = undefined;\n };\n /**\n * @private\n */\n EditRangeStartElementBox.prototype.clone = function () {\n var start = new EditRangeStartElementBox();\n start.columnFirst = this.columnFirst;\n start.columnLast = this.columnLast;\n start.user = this.user;\n start.group = this.group;\n start.editRangeEnd = this.editRangeEnd;\n start.editRangeId = this.editRangeId;\n return start;\n };\n return EditRangeStartElementBox;\n}(ElementBox));\nexport { EditRangeStartElementBox };\n/**\n * @private\n */\nvar ChartElementBox = /** @class */ (function (_super) {\n __extends(ChartElementBox, _super);\n /**\n * @private\n */\n function ChartElementBox() {\n var _this = _super.call(this) || this;\n /**\n * @private\n */\n _this.chartTitle = '';\n /**\n * @private\n */\n _this.chartType = '';\n /**\n * @private\n */\n _this.chartElement = undefined;\n /**\n * @private\n */\n _this.chartCategory = [];\n /**\n * @private\n */\n _this.chartSeries = [];\n _this.chartArea = new ChartArea();\n _this.chartPlotArea = new ChartArea();\n _this.chartTitleArea = new ChartTitleArea();\n _this.chartLegend = new ChartLegend();\n _this.chartPrimaryCategoryAxis = new ChartCategoryAxis();\n _this.chartPrimaryValueAxis = new ChartCategoryAxis();\n _this.chartDataTable = new ChartDataTable();\n return _this;\n }\n /**\n * @private\n */\n ChartElementBox.prototype.getLength = function () {\n return 1;\n };\n Object.defineProperty(ChartElementBox.prototype, \"title\", {\n /**\n * @private\n */\n get: function () {\n return this.chartTitle;\n },\n /**\n * @private\n */\n set: function (value) {\n this.chartTitle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"type\", {\n /**\n * @private\n */\n get: function () {\n return this.chartType;\n },\n /**\n * @private\n */\n set: function (value) {\n this.chartType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"chartGapWidth\", {\n /**\n * @private\n */\n get: function () {\n return this.gapWidth;\n },\n /**\n * @private\n */\n set: function (value) {\n this.gapWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"chartOverlap\", {\n /**\n * @private\n */\n get: function () {\n return this.overlap;\n },\n /**\n * @private\n */\n set: function (value) {\n this.overlap = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"targetElement\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.div)) {\n this.div = createElement('div');\n }\n return this.div;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartElementBox.prototype, \"officeChart\", {\n /**\n * @private\n */\n get: function () {\n return this.officeChartInternal;\n },\n /**\n * @private\n */\n set: function (value) {\n if (value) {\n this.officeChartInternal = value;\n this.officeChartInternal.chart.loaded = this.onChartLoaded.bind(this);\n }\n },\n enumerable: true,\n configurable: true\n });\n ChartElementBox.prototype.onChartLoaded = function () {\n var _this = this;\n this.officeChart.convertChartToImage(this.officeChart.chart, this.width, this.height).then(function (dataURL) {\n _this.imageString = dataURL;\n _this.element.src = dataURL;\n });\n };\n /**\n * @private\n */\n ChartElementBox.prototype.clone = function () {\n var chart = new ChartElementBox();\n chart.chartTitle = this.chartTitle;\n chart.chartType = this.chartType;\n chart.height = this.height;\n chart.width = this.width;\n chart.gapWidth = this.gapWidth;\n chart.overlap = this.overlap;\n for (var i = 0; i < this.chartCategory.length; i++) {\n var chartCategory = this.chartCategory[i].clone();\n chart.chartCategory.push(chartCategory);\n }\n for (var i = 0; i < this.chartSeries.length; i++) {\n var series = this.chartSeries[i].clone();\n chart.chartSeries.push(series);\n }\n chart.chartArea = this.chartArea.clone();\n chart.chartPlotArea = this.chartPlotArea.clone();\n chart.chartLegend = this.chartLegend.clone();\n chart.chartTitleArea = this.chartTitleArea.clone();\n chart.chartPrimaryCategoryAxis = this.chartPrimaryCategoryAxis.clone();\n chart.chartPrimaryValueAxis = this.chartPrimaryValueAxis.clone();\n chart.chartDataTable = this.chartDataTable.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartElementBox.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.officeChartInternal) {\n this.officeChartInternal.chart.loaded = undefined;\n this.officeChartInternal.destroy();\n this.officeChartInternal = undefined;\n }\n if (this.div) {\n this.div = undefined;\n }\n this.chartTitle = undefined;\n this.chartType = undefined;\n this.chartArea = undefined;\n this.chartPlotArea = undefined;\n this.chartCategory = [];\n this.chartSeries = [];\n this.chartTitleArea = undefined;\n this.chartLegend = undefined;\n this.chartPrimaryCategoryAxis = undefined;\n this.chartPrimaryValueAxis = undefined;\n this.chartDataTable = undefined;\n this.chartElement = undefined;\n };\n return ChartElementBox;\n}(ImageElementBox));\nexport { ChartElementBox };\n/**\n * @private\n */\nvar ChartArea = /** @class */ (function () {\n function ChartArea() {\n }\n Object.defineProperty(ChartArea.prototype, \"chartForeColor\", {\n /**\n * @private\n */\n get: function () {\n return this.foreColor;\n },\n /**\n * @private\n */\n set: function (value) {\n this.foreColor = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartArea.prototype.clone = function () {\n var chart = new ChartArea();\n chart.foreColor = this.foreColor;\n return chart;\n };\n /**\n * @private\n */\n ChartArea.prototype.destroy = function () {\n this.foreColor = undefined;\n };\n return ChartArea;\n}());\nexport { ChartArea };\n/**\n * @private\n */\nvar ChartCategory = /** @class */ (function () {\n function ChartCategory() {\n /**\n * @private\n */\n this.categoryXName = '';\n /**\n * @private\n */\n this.chartData = [];\n }\n Object.defineProperty(ChartCategory.prototype, \"xName\", {\n /**\n * @private\n */\n get: function () {\n return this.categoryXName;\n },\n /**\n * @private\n */\n set: function (value) {\n this.categoryXName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartCategory.prototype.clone = function () {\n var chart = new ChartCategory();\n chart.categoryXName = this.categoryXName;\n for (var i = 0; i < this.chartData.length; i++) {\n var chartData = this.chartData[i].clone();\n chart.chartData.push(chartData);\n }\n return chart;\n };\n /**\n * @private\n */\n ChartCategory.prototype.destroy = function () {\n this.categoryXName = undefined;\n this.chartData = [];\n };\n return ChartCategory;\n}());\nexport { ChartCategory };\n/**\n * @private\n */\nvar ChartData = /** @class */ (function () {\n function ChartData() {\n }\n Object.defineProperty(ChartData.prototype, \"yAxisValue\", {\n /**\n * @private\n */\n get: function () {\n return this.yValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.yValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartData.prototype, \"xAxisValue\", {\n /**\n * @private\n */\n get: function () {\n return this.xValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.xValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartData.prototype, \"bubbleSize\", {\n /**\n * @private\n */\n get: function () {\n return this.size;\n },\n /**\n * @private\n */\n set: function (value) {\n this.size = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartData.prototype.clone = function () {\n var chart = new ChartData();\n chart.yValue = this.yValue;\n chart.xValue = this.xValue;\n chart.size = this.size;\n return chart;\n };\n /**\n * @private\n */\n ChartData.prototype.destroy = function () {\n this.xValue = undefined;\n this.yValue = undefined;\n this.size = undefined;\n };\n return ChartData;\n}());\nexport { ChartData };\n/**\n * @private\n */\nvar ChartLegend = /** @class */ (function () {\n /**\n * @private\n */\n function ChartLegend() {\n this.chartTitleArea = new ChartTitleArea();\n }\n Object.defineProperty(ChartLegend.prototype, \"chartLegendPostion\", {\n /**\n * @private\n */\n get: function () {\n return this.legendPostion;\n },\n /**\n * @private\n */\n set: function (value) {\n this.legendPostion = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartLegend.prototype.clone = function () {\n var chart = new ChartLegend();\n chart.legendPostion = this.legendPostion;\n chart.chartTitleArea = this.chartTitleArea.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartLegend.prototype.destroy = function () {\n this.legendPostion = undefined;\n this.chartTitleArea = undefined;\n };\n return ChartLegend;\n}());\nexport { ChartLegend };\n/**\n * @private\n */\nvar ChartSeries = /** @class */ (function () {\n function ChartSeries() {\n /**\n * @private\n */\n this.chartDataFormat = [];\n /**\n * @private\n */\n this.trendLines = [];\n this.errorBar = new ChartErrorBar();\n this.dataLabels = new ChartDataLabels();\n this.seriesFormat = new ChartSeriesFormat();\n }\n Object.defineProperty(ChartSeries.prototype, \"seriesName\", {\n /**\n * @private\n */\n get: function () {\n return this.name;\n },\n /**\n * @private\n */\n set: function (value) {\n this.name = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeries.prototype, \"firstSliceAngle\", {\n /**\n * @private\n */\n get: function () {\n return this.sliceAngle;\n },\n /**\n * @private\n */\n set: function (value) {\n this.sliceAngle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeries.prototype, \"doughnutHoleSize\", {\n /**\n * @private\n */\n get: function () {\n return this.holeSize;\n },\n /**\n * @private\n */\n set: function (value) {\n this.holeSize = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartSeries.prototype.clone = function () {\n var chart = new ChartSeries();\n chart.name = this.name;\n chart.sliceAngle = this.sliceAngle;\n chart.holeSize = this.holeSize;\n chart.errorBar = this.errorBar.clone();\n chart.dataLabels = this.dataLabels.clone();\n chart.seriesFormat = this.seriesFormat.clone();\n for (var i = 0; i < this.chartDataFormat.length; i++) {\n var format = (this.chartDataFormat[i].clone());\n chart.chartDataFormat.push(format);\n }\n for (var i = 0; i < this.trendLines.length; i++) {\n var trendLine = (this.trendLines[i].clone());\n chart.trendLines.push(trendLine);\n }\n return chart;\n };\n /**\n * @private\n */\n ChartSeries.prototype.destroy = function () {\n this.name = undefined;\n this.errorBar = undefined;\n this.trendLines = undefined;\n this.chartDataFormat = [];\n };\n return ChartSeries;\n}());\nexport { ChartSeries };\n/**\n * @private\n */\nvar ChartErrorBar = /** @class */ (function () {\n function ChartErrorBar() {\n }\n Object.defineProperty(ChartErrorBar.prototype, \"errorType\", {\n /**\n * @private\n */\n get: function () {\n return this.type;\n },\n /**\n * @private\n */\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartErrorBar.prototype, \"errorDirection\", {\n /**\n * @private\n */\n get: function () {\n return this.direction;\n },\n /**\n * @private\n */\n set: function (value) {\n this.direction = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartErrorBar.prototype, \"errorEndStyle\", {\n /**\n * @private\n */\n get: function () {\n return this.endStyle;\n },\n /**\n * @private\n */\n set: function (value) {\n this.endStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartErrorBar.prototype, \"numberValue\", {\n get: function () {\n return this.errorValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.errorValue = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartErrorBar.prototype.clone = function () {\n var chart = new ChartErrorBar();\n chart.type = this.type;\n chart.errorDirection = this.errorDirection;\n chart.endStyle = this.endStyle;\n chart.errorValue = this.errorValue;\n return chart;\n };\n /**\n * @private\n */\n ChartErrorBar.prototype.destroy = function () {\n this.type = undefined;\n this.errorDirection = undefined;\n this.endStyle = undefined;\n };\n return ChartErrorBar;\n}());\nexport { ChartErrorBar };\n/**\n * @private\n */\nvar ChartSeriesFormat = /** @class */ (function () {\n function ChartSeriesFormat() {\n }\n Object.defineProperty(ChartSeriesFormat.prototype, \"markerStyle\", {\n /**\n * @private\n */\n get: function () {\n return this.style;\n },\n /**\n * @private\n */\n set: function (value) {\n this.style = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeriesFormat.prototype, \"markerColor\", {\n /**\n * @private\n */\n get: function () {\n return this.color;\n },\n /**\n * @private\n */\n set: function (value) {\n this.color = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartSeriesFormat.prototype, \"numberValue\", {\n /**\n * @private\n */\n get: function () {\n return this.size;\n },\n /**\n * @private\n */\n set: function (value) {\n this.size = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartSeriesFormat.prototype.clone = function () {\n var chart = new ChartSeriesFormat();\n chart.style = this.style;\n chart.color = this.color;\n chart.size = this.size;\n return chart;\n };\n /**\n * @private\n */\n ChartSeriesFormat.prototype.destroy = function () {\n this.style = undefined;\n this.color = undefined;\n this.size = undefined;\n };\n return ChartSeriesFormat;\n}());\nexport { ChartSeriesFormat };\n/**\n * @private\n */\nvar ChartDataLabels = /** @class */ (function () {\n function ChartDataLabels() {\n }\n Object.defineProperty(ChartDataLabels.prototype, \"labelPosition\", {\n /**\n * @private\n */\n get: function () {\n return this.position;\n },\n /**\n * @private\n */\n set: function (value) {\n this.position = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"fontName\", {\n /**\n * @private\n */\n get: function () {\n return this.name;\n },\n /**\n * @private\n */\n set: function (value) {\n this.name = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"fontColor\", {\n /**\n * @private\n */\n get: function () {\n return this.color;\n },\n /**\n * @private\n */\n set: function (value) {\n this.color = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"fontSize\", {\n /**\n * @private\n */\n get: function () {\n return this.size;\n },\n /**\n * @private\n */\n set: function (value) {\n this.size = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isLegendKey\", {\n /**\n * @private\n */\n get: function () {\n return this.isLegend;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isLegend = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isBubbleSize\", {\n /**\n * @private\n */\n get: function () {\n return this.isBubble;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isBubble = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isCategoryName\", {\n /**\n * @private\n */\n get: function () {\n return this.isCategory;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isCategory = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isSeriesName\", {\n /**\n * @private\n */\n get: function () {\n return this.isSeries;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isSeries = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isValue\", {\n /**\n * @private\n */\n get: function () {\n return this.isValueEnabled;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isValueEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isPercentage\", {\n /**\n * @private\n */\n get: function () {\n return this.isPercentageEnabled;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isPercentageEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataLabels.prototype, \"isLeaderLines\", {\n /**\n * @private\n */\n get: function () {\n return this.showLeaderLines;\n },\n /**\n * @private\n */\n set: function (value) {\n this.showLeaderLines = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartDataLabels.prototype.clone = function () {\n var chart = new ChartDataLabels();\n chart.position = this.position;\n chart.name = this.name;\n chart.color = this.color;\n chart.size = this.size;\n chart.isBubble = this.isBubble;\n chart.isLegend = this.isLegend;\n chart.isCategory = this.isCategory;\n chart.isSeries = this.isSeries;\n chart.isValueEnabled = this.isValueEnabled;\n chart.isPercentageEnabled = this.isPercentageEnabled;\n chart.showLeaderLines = this.showLeaderLines;\n return chart;\n };\n /**\n * @private\n */\n ChartDataLabels.prototype.destroy = function () {\n this.position = undefined;\n };\n return ChartDataLabels;\n}());\nexport { ChartDataLabels };\n/**\n * @private\n */\nvar ChartTrendLines = /** @class */ (function () {\n function ChartTrendLines() {\n }\n Object.defineProperty(ChartTrendLines.prototype, \"trendLineType\", {\n /**\n * @private\n */\n get: function () {\n return this.type;\n },\n /**\n * @private\n */\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"trendLineName\", {\n /**\n * @private\n */\n get: function () {\n return this.name;\n },\n /**\n * @private\n */\n set: function (value) {\n this.name = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"interceptValue\", {\n /**\n * @private\n */\n get: function () {\n return this.intercept;\n },\n /**\n * @private\n */\n set: function (value) {\n this.intercept = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"forwardValue\", {\n /**\n * @private\n */\n get: function () {\n return this.forward;\n },\n /**\n * @private\n */\n set: function (value) {\n this.forward = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"backwardValue\", {\n /**\n * @private\n */\n get: function () {\n return this.backward;\n },\n /**\n * @private\n */\n set: function (value) {\n this.backward = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"isDisplayRSquared\", {\n /**\n * @private\n */\n get: function () {\n return this.displayRSquared;\n },\n /**\n * @private\n */\n set: function (value) {\n this.displayRSquared = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTrendLines.prototype, \"isDisplayEquation\", {\n /**\n * @private\n */\n get: function () {\n return this.displayEquation;\n },\n /**\n * @private\n */\n set: function (value) {\n this.displayEquation = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartTrendLines.prototype.clone = function () {\n var chart = new ChartTrendLines();\n chart.type = this.type;\n chart.name = this.name;\n chart.forward = this.forward;\n chart.backward = this.backward;\n chart.intercept = this.intercept;\n chart.displayEquation = this.displayEquation;\n chart.displayRSquared = this.displayRSquared;\n return chart;\n };\n /**\n * @private\n */\n ChartTrendLines.prototype.destroy = function () {\n this.type = undefined;\n this.name = undefined;\n this.forward = undefined;\n this.backward = undefined;\n };\n return ChartTrendLines;\n}());\nexport { ChartTrendLines };\n/**\n * @private\n */\nvar ChartTitleArea = /** @class */ (function () {\n /**\n * @private\n */\n function ChartTitleArea() {\n this.dataFormat = new ChartDataFormat();\n this.layout = new ChartLayout();\n }\n Object.defineProperty(ChartTitleArea.prototype, \"chartfontName\", {\n /**\n * @private\n */\n get: function () {\n return this.fontName;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartTitleArea.prototype, \"chartFontSize\", {\n /**\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontSize = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartTitleArea.prototype.clone = function () {\n var chart = new ChartTitleArea();\n chart.fontName = this.fontName;\n chart.fontSize = this.fontSize;\n chart.dataFormat = this.dataFormat.clone();\n chart.layout = this.layout.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartTitleArea.prototype.destroy = function () {\n this.fontName = undefined;\n this.fontSize = undefined;\n this.dataFormat = undefined;\n this.layout = undefined;\n };\n return ChartTitleArea;\n}());\nexport { ChartTitleArea };\n/**\n * @private\n */\nvar ChartDataFormat = /** @class */ (function () {\n /**\n * @private\n */\n function ChartDataFormat() {\n this.fill = new ChartFill();\n this.line = new ChartFill();\n }\n /**\n * @private\n */\n ChartDataFormat.prototype.clone = function () {\n var chart = new ChartDataFormat();\n chart.fill = this.fill.clone();\n chart.line = this.line.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartDataFormat.prototype.destroy = function () {\n this.fill = undefined;\n this.line = undefined;\n };\n return ChartDataFormat;\n}());\nexport { ChartDataFormat };\n/**\n * @private\n */\nvar ChartFill = /** @class */ (function () {\n function ChartFill() {\n }\n Object.defineProperty(ChartFill.prototype, \"color\", {\n /**\n * @private\n */\n get: function () {\n return this.fillColor;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fillColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartFill.prototype, \"rgb\", {\n /**\n * @private\n */\n get: function () {\n return this.fillRGB;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fillRGB = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartFill.prototype.clone = function () {\n var chart = new ChartFill();\n chart.fillColor = this.fillColor;\n chart.fillRGB = this.fillRGB;\n return chart;\n };\n /**\n * @private\n */\n ChartFill.prototype.destroy = function () {\n this.fillColor = undefined;\n this.fillRGB = undefined;\n };\n return ChartFill;\n}());\nexport { ChartFill };\n/**\n * @private\n */\nvar ChartLayout = /** @class */ (function () {\n function ChartLayout() {\n }\n Object.defineProperty(ChartLayout.prototype, \"chartLayoutLeft\", {\n /**\n * @private\n */\n get: function () {\n return this.layoutX;\n },\n /**\n * @private\n */\n set: function (value) {\n this.layoutX = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartLayout.prototype, \"chartLayoutTop\", {\n /**\n * @private\n */\n get: function () {\n return this.layoutY;\n },\n /**\n * @private\n */\n set: function (value) {\n this.layoutY = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartLayout.prototype.clone = function () {\n var chart = new ChartLayout();\n chart.layoutX = this.layoutX;\n chart.layoutY = this.layoutY;\n return chart;\n };\n /**\n * @private\n */\n ChartLayout.prototype.destroy = function () {\n this.layoutX = undefined;\n this.layoutY = undefined;\n };\n return ChartLayout;\n}());\nexport { ChartLayout };\n/**\n * @private\n */\nvar ChartCategoryAxis = /** @class */ (function () {\n function ChartCategoryAxis() {\n this.chartTitleArea = new ChartTitleArea();\n }\n Object.defineProperty(ChartCategoryAxis.prototype, \"majorTick\", {\n /**\n * @private\n */\n get: function () {\n return this.majorTickMark;\n },\n /**\n * @private\n */\n set: function (value) {\n this.majorTickMark = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"minorTick\", {\n /**\n * @private\n */\n get: function () {\n return this.minorTickMark;\n },\n /**\n * @private\n */\n set: function (value) {\n this.minorTickMark = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"tickPosition\", {\n /**\n * @private\n */\n get: function () {\n return this.tickLabelPostion;\n },\n /**\n * @private\n */\n set: function (value) {\n this.tickLabelPostion = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"minorGridLines\", {\n /**\n * @private\n */\n get: function () {\n return this.hasMinorGridLines;\n },\n /**\n * @private\n */\n set: function (value) {\n this.hasMinorGridLines = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"majorGridLines\", {\n /**\n * @private\n */\n get: function () {\n return this.hasMajorGridLines;\n },\n /**\n * @private\n */\n set: function (value) {\n this.hasMajorGridLines = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"interval\", {\n /**\n * @private\n */\n get: function () {\n return this.majorUnit;\n },\n /**\n * @private\n */\n set: function (value) {\n this.majorUnit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"isAutoInternal\", {\n /**\n * @private\n */\n get: function () {\n return this.isAutoMajor;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isAutoMajor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"max\", {\n /**\n * @private\n */\n get: function () {\n return this.maximumValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.maximumValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"min\", {\n /**\n * @private\n */\n get: function () {\n return this.minimumValue;\n },\n /**\n * @private\n */\n set: function (value) {\n this.minimumValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"categoryAxisTitle\", {\n /**\n * @private\n */\n get: function () {\n return this.title;\n },\n /**\n * @private\n */\n set: function (value) {\n this.title = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"categoryAxisType\", {\n /**\n * @private\n */\n get: function () {\n return this.categoryType;\n },\n /**\n * @private\n */\n set: function (value) {\n this.categoryType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"categoryNumberFormat\", {\n /**\n * @private\n */\n get: function () {\n return this.numberFormat;\n },\n /**\n * @private\n */\n set: function (value) {\n this.numberFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"axisFontSize\", {\n /**\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartCategoryAxis.prototype, \"axisFontName\", {\n /**\n * @private\n */\n get: function () {\n return this.fontName;\n },\n /**\n * @private\n */\n set: function (value) {\n this.fontName = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartCategoryAxis.prototype.clone = function () {\n var chart = new ChartCategoryAxis();\n chart.title = this.title;\n chart.categoryType = this.categoryType;\n chart.numberFormat = this.numberFormat;\n chart.fontSize = this.fontSize;\n chart.fontName = this.fontName;\n chart.hasMajorGridLines = this.hasMajorGridLines;\n chart.hasMinorGridLines = this.hasMinorGridLines;\n chart.minimumValue = this.minimumValue;\n chart.maximumValue = this.maximumValue;\n chart.majorUnit = this.majorUnit;\n chart.isAutoMajor = this.isAutoMajor;\n chart.majorTickMark = this.majorTickMark;\n chart.minorTickMark = this.minorTickMark;\n chart.tickLabelPostion = this.tickLabelPostion;\n chart.chartTitleArea = this.chartTitleArea.clone();\n return chart;\n };\n /**\n * @private\n */\n ChartCategoryAxis.prototype.destroy = function () {\n this.title = undefined;\n this.categoryType = undefined;\n this.numberFormat = undefined;\n this.chartTitleArea = undefined;\n this.minimumValue = undefined;\n this.maximumValue = undefined;\n this.fontSize = undefined;\n this.fontName = undefined;\n this.majorUnit = undefined;\n this.majorTickMark = undefined;\n this.minorTickMark = undefined;\n this.tickLabelPostion = undefined;\n };\n return ChartCategoryAxis;\n}());\nexport { ChartCategoryAxis };\n/**\n * @private\n */\nvar ChartDataTable = /** @class */ (function () {\n function ChartDataTable() {\n }\n Object.defineProperty(ChartDataTable.prototype, \"showSeriesKeys\", {\n /**\n * @private\n */\n get: function () {\n return this.isSeriesKeys;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isSeriesKeys = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataTable.prototype, \"hasHorzBorder\", {\n /**\n * @private\n */\n get: function () {\n return this.isHorzBorder;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isHorzBorder = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataTable.prototype, \"hasVertBorder\", {\n /**\n * @private\n */\n get: function () {\n return this.isVertBorder;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isVertBorder = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ChartDataTable.prototype, \"hasBorders\", {\n /**\n * @private\n */\n get: function () {\n return this.isBorders;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isBorders = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n ChartDataTable.prototype.clone = function () {\n var chart = new ChartDataTable();\n chart.isSeriesKeys = this.isSeriesKeys;\n chart.isHorzBorder = this.isHorzBorder;\n chart.isVertBorder = this.isVertBorder;\n chart.isBorders = this.isBorders;\n return chart;\n };\n /**\n * @private\n */\n ChartDataTable.prototype.destroy = function () {\n this.isSeriesKeys = undefined;\n this.isHorzBorder = undefined;\n this.isVertBorder = undefined;\n this.isBorders = undefined;\n };\n return ChartDataTable;\n}());\nexport { ChartDataTable };\n/**\n * @private\n */\nvar CommentCharacterElementBox = /** @class */ (function (_super) {\n __extends(CommentCharacterElementBox, _super);\n function CommentCharacterElementBox(type) {\n var _this = _super.call(this) || this;\n _this.commentType = 0;\n _this.commentId = '';\n _this.commentType = type;\n return _this;\n }\n Object.defineProperty(CommentCharacterElementBox.prototype, \"comment\", {\n get: function () {\n return this.commentInternal;\n },\n set: function (value) {\n this.commentInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n CommentCharacterElementBox.prototype.getLength = function () {\n return 1;\n };\n CommentCharacterElementBox.prototype.clone = function () {\n var comment = new CommentCharacterElementBox(this.commentType);\n comment.commentId = this.commentId;\n comment.commentType = this.commentType;\n if (!isNullOrUndefined(this.commentInternal)) {\n comment.commentInternal = this.commentInternal.clone();\n }\n return comment;\n };\n CommentCharacterElementBox.prototype.renderCommentMark = function (topPosition, leftPosition) {\n var documentHelper = this.line.paragraph.bodyWidget.page.documentHelper;\n var commentMarkDictionary = documentHelper.render.commentMarkDictionary;\n if (this.commentType === 0 && isNullOrUndefined(this.commentMark)) {\n this.commentMark = document.createElement('div');\n this.commentMark.style.display = 'none';\n this.commentMark.classList.add('e-de-cmt-mark');\n var span = document.createElement('span');\n span.classList.add('e-icons');\n span.classList.add('e-de-cmt-mark-icon');\n this.commentMark.appendChild(span);\n }\n if (this.line && isNullOrUndefined(this.commentMark.parentElement)) {\n documentHelper.pageContainer.appendChild(this.commentMark);\n this.commentMark.addEventListener('click', this.selectComment.bind(this));\n }\n var positionOverlap = false;\n var overlapKey;\n for (var index = 0; index < commentMarkDictionary.length; index++) {\n if (this.elementsOverlap(commentMarkDictionary.keys[index], topPosition, leftPosition)) {\n positionOverlap = true;\n overlapKey = commentMarkDictionary.keys[index];\n break;\n }\n }\n if (positionOverlap) {\n var ifNotPresent = true;\n for (var index = 0; index < commentMarkDictionary.get(overlapKey).length; index++) {\n if (commentMarkDictionary.get(overlapKey)[index] === this) {\n ifNotPresent = false;\n break;\n }\n }\n if (ifNotPresent) {\n commentMarkDictionary.get(overlapKey).push(this);\n }\n }\n else {\n commentMarkDictionary.add(this.commentMark, [this]);\n }\n for (var index = 0; index < commentMarkDictionary.length; index++) {\n var element = commentMarkDictionary.keys[index];\n if (commentMarkDictionary.get(element).length == 1) {\n if (commentMarkDictionary.get(element)[0].commentMark) {\n if (commentMarkDictionary.get(element)[0].commentMark.firstElementChild.classList.contains('e-de-multi-cmt-mark')) {\n classList(commentMarkDictionary.get(element)[0].commentMark.firstElementChild, ['e-de-cmt-mark-icon'], ['e-de-multi-cmt-mark']);\n }\n else if (commentMarkDictionary.get(element)[0].commentInternal.isResolved && commentMarkDictionary.get(element)[0].commentMark.firstElementChild.classList.contains('e-de-cmt-mark-icon')) {\n classList(commentMarkDictionary.get(element)[0].commentMark.\n firstElementChild, ['e-de-cmt-resolve-icon'], ['e-de-cmt-mark-icon']);\n }\n else if (!commentMarkDictionary.get(element)[0].commentInternal.isResolved && commentMarkDictionary.get(element)[0].commentMark.firstElementChild.classList.contains('e-de-cmt-resolve-icon')) {\n classList(commentMarkDictionary.get(element)[0].commentMark.firstElementChild, ['e-de-cmt-mark-icon'], ['e-de-cmt-resolve-icon']);\n }\n }\n }\n if (commentMarkDictionary.get(element).length > 1) {\n for (var z = 0; z < commentMarkDictionary.get(element).length; z++) {\n var resolve = true;\n for (var z_1 = 0; z_1 < commentMarkDictionary.get(element).length; z_1++) {\n if (commentMarkDictionary.get(element)[z_1].commentInternal && !commentMarkDictionary.get(element)[z_1].commentInternal.isResolved) {\n resolve = false;\n break;\n }\n }\n if (commentMarkDictionary.get(element)[z].commentMark) {\n if (commentMarkDictionary.get(element)[z].commentMark.firstElementChild.classList.contains('e-de-cmt-mark-icon')) {\n classList(commentMarkDictionary.get(element)[z].commentMark.firstElementChild, ['e-de-multi-cmt-mark'], ['e-de-cmt-mark-icon']);\n }\n else if (!resolve && commentMarkDictionary.get(element)[z].commentMark.firstElementChild.classList.contains('e-de-multi-cmt-resolve')) {\n classList(commentMarkDictionary.get(element)[z].commentMark.firstElementChild, ['e-de-multi-cmt-mark'], ['e-de-multi-cmt-resolve']);\n }\n else if (resolve) {\n classList(commentMarkDictionary.get(element)[z].commentMark.firstElementChild, ['e-de-multi-cmt-resolve'], ['e-de-multi-cmt-mark']);\n }\n }\n }\n }\n }\n };\n CommentCharacterElementBox.prototype.elementsOverlap = function (elementOne, top, left) {\n var width = elementOne.offsetWidth;\n var height = elementOne.offsetHeight;\n var elementOneTop = parseFloat(elementOne.style.top);\n var elementOneLeft = parseFloat(elementOne.style.left);\n var elementOneBottom = elementOneTop + height;\n var elementOneRight = elementOneLeft + width;\n var elementTwoTop = parseFloat(top);\n var elementTwoLeft = parseFloat(left);\n var elementTwoBottom = elementTwoTop + height;\n var elementTwoRight = elementTwoLeft + width;\n return !(elementOneTop > elementTwoBottom ||\n elementOneRight < elementTwoLeft ||\n elementOneBottom < elementTwoTop ||\n elementOneLeft > elementTwoRight);\n };\n CommentCharacterElementBox.prototype.selectComment = function () {\n var documentHelper = this.line.paragraph.bodyWidget.page.documentHelper;\n var commentMarkDictionary = documentHelper.render.commentMarkDictionary;\n var topPosition = this.commentMark.style.top;\n var leftPosition = this.commentMark.style.left;\n var currentIndex = 0;\n var navigationArray = [];\n for (var index = 0; index < commentMarkDictionary.keys.length; index++) {\n if (this.elementsOverlap(commentMarkDictionary.keys[index], topPosition, leftPosition)) {\n navigationArray = commentMarkDictionary.get(commentMarkDictionary.keys[index]);\n break;\n }\n }\n if (!documentHelper.owner.documentHelper.currentSelectedComment) {\n currentIndex = 0;\n }\n else {\n for (var index = 0; index < navigationArray.length; index++) {\n if (navigationArray[index].comment === documentHelper.owner.documentHelper.currentSelectedComment) {\n currentIndex = index;\n break;\n }\n }\n if (currentIndex < (navigationArray.length - 1)) {\n currentIndex += 1;\n }\n else {\n currentIndex = 0;\n }\n }\n if (documentHelper.owner) {\n if (!documentHelper.owner.commentReviewPane.commentPane.isEditMode) {\n documentHelper.selectComment(navigationArray[currentIndex].comment);\n }\n else {\n documentHelper.owner.showComments = true;\n }\n }\n };\n CommentCharacterElementBox.prototype.removeCommentMark = function () {\n if (this.commentMark && this.commentMark.parentElement) {\n this.commentMark.removeEventListener('click', this.selectComment.bind(this));\n this.commentMark.parentElement.removeChild(this.commentMark);\n }\n };\n CommentCharacterElementBox.prototype.destroy = function () {\n if (this.commentMark) {\n this.removeCommentMark();\n }\n this.commentMark = undefined;\n this.commentInternal = undefined;\n this.commentId = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return CommentCharacterElementBox;\n}(ElementBox));\nexport { CommentCharacterElementBox };\n/**\n * @private\n */\nvar CommentElementBox = /** @class */ (function (_super) {\n __extends(CommentElementBox, _super);\n function CommentElementBox(date) {\n var _this = _super.call(this, 0) || this;\n _this.authorIn = '';\n _this.initialIn = '';\n _this.done = false;\n _this.textIn = '';\n _this.isReply = false;\n _this.ownerComment = undefined;\n _this.mentionsIn = [];\n _this.createdDate = date;\n _this.replyComments = [];\n return _this;\n }\n Object.defineProperty(CommentElementBox.prototype, \"commentStart\", {\n get: function () {\n return this.commentStartIn;\n },\n set: function (value) {\n this.commentStartIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"commentEnd\", {\n get: function () {\n return this.commentEndIn;\n },\n set: function (value) {\n this.commentEndIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"author\", {\n get: function () {\n return this.authorIn;\n },\n set: function (value) {\n this.authorIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"initial\", {\n get: function () {\n return this.initialIn;\n },\n set: function (value) {\n this.initialIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"isResolved\", {\n get: function () {\n return this.done;\n },\n set: function (value) {\n this.done = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"date\", {\n get: function () {\n return this.createdDate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"text\", {\n get: function () {\n return this.textIn;\n },\n set: function (value) {\n this.textIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(CommentElementBox.prototype, \"mentions\", {\n get: function () {\n return this.mentionsIn;\n },\n set: function (value) {\n this.mentionsIn = value;\n },\n enumerable: true,\n configurable: true\n });\n CommentElementBox.prototype.getLength = function () {\n return 1;\n };\n CommentElementBox.prototype.clone = function () {\n var comment = new CommentElementBox(this.date);\n comment.author = this.author;\n comment.initial = this.initial;\n comment.commentId = this.commentId;\n comment.replyComments = this.replyComments;\n comment.isResolved = this.isResolved;\n comment.text = this.text;\n return comment;\n };\n CommentElementBox.prototype.destroy = function () {\n if (this.replyComments && this.replyComments.length > 0) {\n for (var i = 0; i < this.replyComments.length; i++) {\n var replyComment = this.replyComments[i];\n replyComment.destroy();\n }\n this.replyComments = [];\n }\n this.replyComments = undefined;\n if (this.commentStartIn) {\n this.commentStartIn.destroy();\n this.commentStartIn = undefined;\n }\n if (this.commentEndIn) {\n this.commentEndIn.destroy();\n this.commentEndIn = undefined;\n }\n this.commentId = undefined;\n this.createdDate = undefined;\n this.initialIn = undefined;\n this.textIn = undefined;\n this.authorIn = undefined;\n this.ownerComment = undefined;\n _super.prototype.destroy.call(this);\n };\n return CommentElementBox;\n}(CommentCharacterElementBox));\nexport { CommentElementBox };\n/**\n * @private\n */\nvar Page = /** @class */ (function () {\n /**\n * Initialize the constructor of Page\n */\n function Page(documentHelper) {\n /**\n * Specifies the Bonding Rectangle\n * @private\n */\n this.boundingRectangle = new Rect(96, 96, 816, 1056);\n /**\n * @private\n */\n this.repeatHeaderRowTableWidget = false;\n /**\n * Specifies the bodyWidgets\n * @default []\n * @private\n */\n this.bodyWidgets = [];\n /**\n * @private\n */\n this.headerWidgetIn = undefined;\n /**\n * @private\n */\n this.footerWidgetIn = undefined;\n /**\n * @private\n */\n this.footnoteWidget = undefined;\n /**\n * @private\n */\n this.endnoteWidget = undefined;\n /**\n * @private\n */\n this.currentPageNum = 1;\n /**\n * @private\n */\n this.allowNextPageRendering = true;\n this.documentHelper = documentHelper;\n // let text: string = 'DocumentEditor';\n }\n Object.defineProperty(Page.prototype, \"headerWidget\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.headerWidgetIn)) {\n if (this.headerWidgetIn.parentHeaderFooter) {\n return this.headerWidgetIn.parentHeaderFooter;\n }\n }\n return this.headerWidgetIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.headerWidgetIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"footerWidget\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.footerWidgetIn)) {\n if (this.footerWidgetIn.parentHeaderFooter) {\n return this.footerWidgetIn.parentHeaderFooter;\n }\n }\n return this.footerWidgetIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.footerWidgetIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"index\", {\n /**\n * @private\n */\n get: function () {\n if (this.documentHelper) {\n return this.documentHelper.pages.indexOf(this);\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"previousPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index > 0) {\n return this.documentHelper.pages[index - 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"nextPage\", {\n /**\n * @private\n */\n get: function () {\n var index = this.index;\n if (index < this.documentHelper.pages.length - 1) {\n return this.documentHelper.pages[index + 1];\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"sectionIndex\", {\n /**\n * @private\n */\n get: function () {\n if (this.bodyWidgets.length > 0) {\n return this.bodyWidgets[0].index;\n }\n return -1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Page.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Page.prototype.destroy = function () {\n if (this.headerWidget && this.headerWidget.page === this) {\n this.headerWidget.page = undefined;\n }\n if (this.footerWidget && this.footerWidget.page === this) {\n this.footerWidget.page = undefined;\n }\n if (this.headerWidgetIn && !isNullOrUndefined(this.headerWidgetIn.parentHeaderFooter)) {\n if (this.viewer && this.documentHelper.owner.editorModule) {\n this.documentHelper.owner.editorModule.removeFieldInWidget(this.headerWidgetIn);\n // Remove content control\n this.documentHelper.owner.editorModule.removeFieldInWidget(this.headerWidgetIn, false, true);\n }\n this.headerWidgetIn.destroy();\n this.headerWidget = undefined;\n }\n if (this.footerWidgetIn && !isNullOrUndefined(this.footerWidgetIn.parentHeaderFooter)) {\n if (this.viewer && this.documentHelper.owner.editorModule) {\n this.documentHelper.owner.editorModule.removeFieldInWidget(this.footerWidgetIn);\n // Remove content control\n this.documentHelper.owner.editorModule.removeFieldInWidget(this.footerWidgetIn, false, true);\n }\n this.footerWidgetIn.destroy();\n this.footerWidgetIn = undefined;\n }\n this.bodyWidgets = [];\n this.bodyWidgets = undefined;\n if (!isNullOrUndefined(this.documentHelper)) {\n if (!isNullOrUndefined(this.documentHelper.pages)) {\n this.documentHelper.removePage(this);\n }\n }\n this.documentHelper = undefined;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n Page.prototype.componentDestroy = function () {\n if (this.headerWidgetIn) {\n this.headerWidgetIn.componentDestroy();\n this.headerWidgetIn = undefined;\n }\n if (this.footerWidgetIn) {\n this.footerWidgetIn.componentDestroy();\n this.footerWidgetIn = undefined;\n }\n if (this.bodyWidgets) {\n for (var i = 0; i < this.bodyWidgets.length; i++) {\n var bodyWidget = this.bodyWidgets[i];\n bodyWidget.componentDestroy();\n }\n this.bodyWidgets = [];\n this.bodyWidgets = undefined;\n }\n this.documentHelper = undefined;\n };\n return Page;\n}());\nexport { Page };\n/**\n * @private\n */\nvar WTableHolder = /** @class */ (function () {\n function WTableHolder() {\n this.tableColumns = [];\n /**\n * @private\n */\n this.tableWidth = 0;\n }\n Object.defineProperty(WTableHolder.prototype, \"columns\", {\n get: function () {\n return this.tableColumns;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n WTableHolder.prototype.resetColumns = function () {\n for (var i = 0; i < this.tableColumns.length; i++) {\n this.tableColumns[i].destroy();\n }\n this.tableColumns = [];\n };\n /**\n * @private\n */\n WTableHolder.prototype.getPreviousSpannedCellWidth = function (previousColumnIndex, curColumnIndex) {\n var width = 0;\n for (var i = previousColumnIndex; i < curColumnIndex; i++) {\n width += this.tableColumns[i].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.addColumns = function (currentColumnIndex, columnSpan, width, sizeInfo, offset, preferredWidthType) {\n for (var i = this.columns.length; i < columnSpan; i++) {\n this.columns.push(new WColumn());\n }\n var availableWidth = 0;\n for (var j = currentColumnIndex; j < columnSpan; j++) {\n availableWidth += this.columns[j].preferredWidth;\n }\n // If width to add is greater than preferred width, then preferred width will be increased.\n // In case of Grid span > 1, only last grid column width will be updated.\n var gridSpan = columnSpan - currentColumnIndex;\n if (!(gridSpan > 1) && availableWidth < width) {\n this.columns[columnSpan - 1].preferredWidth += (width - availableWidth);\n }\n if (sizeInfo.minimumWordWidth > this.columns[columnSpan - 1].minimumWordWidth) {\n this.columns[columnSpan - 1].minimumWordWidth = sizeInfo.minimumWordWidth;\n }\n if (sizeInfo.maximumWordWidth > this.columns[columnSpan - 1].maximumWordWidth) {\n this.columns[columnSpan - 1].maximumWordWidth = sizeInfo.maximumWordWidth;\n }\n if (sizeInfo.minimumWidth > this.columns[columnSpan - 1].minimumWidth) {\n this.columns[columnSpan - 1].minimumWidth = sizeInfo.minimumWidth;\n }\n if (offset > this.columns[columnSpan - 1].endOffset) {\n this.columns[columnSpan - 1].endOffset = offset;\n }\n this.columns[columnSpan - 1].widthType = preferredWidthType;\n };\n /**\n * @private\n */\n WTableHolder.prototype.getTotalWidth = function (type) {\n var width = 0;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n width += type === 0 ? column.preferredWidth :\n type === 1 ? column.minimumWordWidth :\n type === 2 ? column.maximumWordWidth : column.minimumWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.isFitColumns = function (containerWidth, preferredTableWidth, isAutoWidth) {\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth(0);\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = preferredTableWidth > totalColumnWidth ? totalColumnWidth : preferredTableWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n factor = isNaN(factor) || factor === Infinity ? 1 : factor;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n //column.PreferredWidth = factor * column.PreferredWidth;\n if (factor * column.preferredWidth < column.minWidth) {\n return false;\n }\n }\n return true;\n }\n else {\n return true;\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.isAllColumnHasPointWidthType = function () {\n var isPointWidthType = true;\n for (var i = 0; i < this.columns.length; i++) {\n if (this.columns[i].widthType != 'Point') {\n isPointWidthType = false;\n }\n }\n return isPointWidthType;\n };\n /**\n * @private\n */\n WTableHolder.prototype.autoFitColumn = function (containerWidth, preferredTableWidth, isAuto, isNestedTable, isAutoFit, hasSpannedCells, indent, pageContainerWidth) {\n // Cell's preferred width should be considered until the table width fits to the container width.\n var maxTotal = 0;\n var minTotal = 0;\n // For preferred width set as 0 pixels (not auto), then minimum word width only need to be considered.\n // But currently there is no way to find any one of cell in particular column has 0 px preferred width set.\n // If all columns are set as 0 pixels, then this will work.\n var remainingWidthTotal = 0;\n var isAllColumnPointWidth = true;\n var minWidthExceedCellWidth = 0;\n var columnIndexCollection = [];\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n // If preferred width of column is less than column minimum width and also column is empty, considered column preferred width\n if (column.minimumWordWidth === 0 && column.maximumWordWidth === 0 && column.minWidth === 0) {\n column.minimumWordWidth = column.preferredWidth;\n column.maximumWordWidth = column.preferredWidth;\n column.minWidth = column.preferredWidth;\n }\n if (column.widthType !== 'Point') {\n isAllColumnPointWidth = false;\n }\n var difference = 0;\n maxTotal += column.preferredWidth > column.maximumWordWidth ? column.preferredWidth : column.maximumWordWidth;\n minTotal += column.preferredWidth > column.minimumWordWidth ? column.preferredWidth : column.minimumWordWidth;\n var preferred = column.preferredWidth === 0 ? column.minimumWordWidth : column.preferredWidth > column.minimumWordWidth ? column.preferredWidth : column.minimumWordWidth;\n difference = column.maximumWordWidth - preferred;\n remainingWidthTotal += difference > 0 ? difference : 0;\n if (column.preferredWidth < column.minimumWordWidth) {\n minWidthExceedCellWidth += column.minimumWordWidth - column.preferredWidth;\n }\n else {\n columnIndexCollection.push(i);\n }\n }\n // Try to fit maximum word width to match preferredTableWidth.\n if (maxTotal <= preferredTableWidth) {\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column.widthType === 'Point') {\n if (column.preferredWidth < column.minimumWordWidth) {\n column.preferredWidth = column.minimumWordWidth;\n }\n continue;\n }\n if (column.preferredWidth < column.maximumWordWidth) {\n // if (isNestedTable) {\n // column.preferredWidth = column.minimumWidth + column.minimumWordWidth;\n // } else {\n column.preferredWidth = column.maximumWordWidth;\n //}\n }\n }\n // If the width is defined for table(cells undefined) then fit the columns to preferred table width using FitColumns.\n if (!isAuto) {\n this.fitColumns(containerWidth, preferredTableWidth, isAuto, isAutoFit);\n }\n }\n else {\n var totalPreferredWidth = this.getTotalWidth(0);\n if (isAllColumnPointWidth && !hasSpannedCells) {\n if (minTotal > containerWidth) {\n if (containerWidth > totalPreferredWidth) {\n minWidthExceedCellWidth -= (containerWidth - (totalPreferredWidth));\n }\n if (columnIndexCollection.length > 0 && minWidthExceedCellWidth > 0) {\n var averageWidth = minWidthExceedCellWidth / this.columns.length;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (columnIndexCollection.indexOf(i) === -1) {\n // Bug 891720: If minimum word width is greater than total preferred width, then set preferred width to resolve the layout issue.\n if (totalPreferredWidth > column.minimumWordWidth) {\n column.preferredWidth = column.minimumWordWidth;\n }\n }\n else {\n column.preferredWidth = (column.preferredWidth - averageWidth);\n // Bug 890447: If the preferred width is less than minimum word width, then set minimum word width as preferred width.\n if (column.preferredWidth < column.minimumWordWidth) {\n column.preferredWidth = column.minimumWordWidth;\n }\n }\n }\n totalPreferredWidth = this.getTotalWidth(0);\n }\n }\n }\n // If the table preferred table width is set, then check its greater than total minimum word width. \n // If yes then set table preferred table width as container width. Else, check whether the total minimum word width is less than container width.\n // If yes, then set total minimum word width as container width. Else, set the container width to container width.\n if (!isAuto) {\n //let totalMinimumWordWidth: number = this.getTotalWidth(1);\n //if (preferredTableWidth > totalMinimumWordWidth && totalMinimumWordWidth < containerWidth) {\n var considerMinAsTableWidth = false;\n if ((preferredTableWidth < minTotal && minTotal + (isNullOrUndefined(indent) ? 0 : indent) < containerWidth)) {\n considerMinAsTableWidth = true;\n }\n this.fitColumns(containerWidth, considerMinAsTableWidth ? minTotal : preferredTableWidth, isAuto, isAutoFit);\n return;\n //}\n //containerWidth = preferredTableWidth < totalMinimumWordWidth ? totalMinimumWordWidth < containerWidth ? totalMinimumWordWidth : containerWidth : preferredTableWidth;\n }\n // Try to fit minimum word width to match preferredTableWidth or containerWidth.\n if (minTotal <= preferredTableWidth || minTotal <= containerWidth) {\n var availableWidth = containerWidth > preferredTableWidth ? containerWidth : preferredTableWidth;\n availableWidth = availableWidth - minTotal;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column.widthType === 'Point') {\n continue;\n }\n if (column.preferredWidth === 0) {\n column.preferredWidth = column.minimumWordWidth;\n }\n else {\n if (column.preferredWidth < column.minimumWordWidth) {\n column.preferredWidth = column.minimumWordWidth;\n }\n }\n var difference = column.maximumWordWidth - column.preferredWidth;\n difference = difference > 0 ? difference : 0;\n var factor = availableWidth * (difference / remainingWidthTotal);\n column.preferredWidth += isNaN(factor) ? 0 : factor;\n }\n }\n else {\n // Try to fit minimum width for each column and allot remaining space to columns based on their minimum word width.\n var totalMinimumWordWidth = this.getTotalWidth(1);\n var totalMinWidth = this.getTotalWidth(3);\n if (totalMinWidth > 2112) {\n var cellWidth = 2112 / this.columns.length;\n for (var i = 0; i < this.columns.length; i++) {\n this.columns[i].preferredWidth = cellWidth;\n }\n }\n else {\n var availableWidth = 0;\n if (((totalMinWidth < containerWidth) && ((containerWidth - totalMinWidth) >= 1) && !isAllColumnPointWidth)\n || (isAllColumnPointWidth && !hasSpannedCells && totalMinimumWordWidth > containerWidth)) {\n availableWidth = containerWidth - totalMinWidth;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n // The factor depends of current column's minimum word width and total minimum word width.\n var factor = availableWidth * column.minimumWordWidth / totalMinimumWordWidth;\n factor = isNaN(factor) ? 0 : factor;\n column.preferredWidth = (column.minimumWidth == 0 ? 1 : column.minimumWidth) + factor;\n }\n // table width exceeds container width\n }\n else if (totalPreferredWidth > containerWidth) {\n var factor = containerWidth / totalPreferredWidth;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n column.preferredWidth = column.preferredWidth * factor;\n }\n }\n }\n }\n }\n this.tableWidth = this.getTotalWidth(0);\n };\n /**\n * @private\n */\n WTableHolder.prototype.getValidColumnIndex = function (index) {\n var endOffset = 0;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (i < index) {\n endOffset = column.endOffset;\n }\n else if (endOffset === column.endOffset) {\n //Increment the columnIndex if next column has zero width.\n index++;\n }\n else {\n break;\n }\n }\n return index;\n };\n /**\n * @private\n */\n WTableHolder.prototype.fitColumns = function (containerWidth, preferredTableWidth, isAutoWidth, isAutoFit, indent) {\n if (isNullOrUndefined(indent)) {\n indent = 0;\n }\n // Gets total preferred width.\n var totalColumnWidth = this.getTotalWidth(0);\n // Neglected left indent value, because in preferred table width left indent value is neglected\n if (isAutoWidth) {\n totalColumnWidth -= indent;\n }\n // If auto table width, based on total column widths, minimum value will be updated.\n if (isAutoWidth) {\n this.tableWidth = totalColumnWidth;\n }\n else {\n this.tableWidth = preferredTableWidth;\n }\n // If total columns width doesn't match table width, then all grid column widths will be updated by even factor.\n // If totalColumnWidth < TableWidth, all grid columns are enlarged. Otherwise shrinked.\n if (totalColumnWidth !== this.tableWidth) {\n var factor = this.tableWidth / totalColumnWidth;\n factor = isNaN(factor) || factor === Infinity ? 1 : factor;\n for (var i = 0; i < this.columns.length; i++) {\n var column = this.columns[i];\n if (column.widthType === 'Percent' && !isAutoWidth && !isAutoFit && totalColumnWidth > this.tableWidth) {\n if (i !== 0 && column.endOffset > this.tableWidth) {\n var totalCellWidth = this.getCellWidth(0, i + 1, preferredTableWidth);\n if (totalCellWidth > this.tableWidth) {\n column.preferredWidth -= (totalCellWidth - this.tableWidth);\n if (column.preferredWidth === 0 || column.preferredWidth < column.minimumWidth) {\n column.preferredWidth = column.minimumWidth > 0 ? column.minimumWidth : 1;\n this.columns[0].preferredWidth -= column.preferredWidth;\n }\n }\n }\n }\n else {\n column.preferredWidth = factor * column.preferredWidth;\n }\n }\n }\n };\n /**\n * @private\n */\n WTableHolder.prototype.getCellWidth = function (columnIndex, columnSpan, preferredTableWidth) {\n var width = 0;\n for (var i = 0; i < columnSpan; i++) {\n width += this.tableColumns[i + columnIndex].preferredWidth;\n }\n return width;\n };\n /**\n * @private\n */\n WTableHolder.prototype.validateColumnWidths = function () {\n for (var i = 0; i < this.columns.length; i++) {\n if (i === 0) {\n if (this.columns[i].preferredWidth !== this.columns[i].endOffset) {\n this.columns[i].preferredWidth = this.columns[i].endOffset;\n }\n }\n else {\n // If Previous column offset + current column preferred width is less than current column offset, \n // Then current column preferred width is set to current column offset - previous column offset.\n if (this.columns[i - 1].endOffset + this.columns[i].preferredWidth < this.columns[i].endOffset) {\n if (this.columns[i - 1].endOffset === 0) {\n this.columns[i].preferredWidth = this.columns[i].endOffset - this.getPreviousValidOffset(i - 2);\n }\n else {\n this.columns[i].preferredWidth = this.columns[i].endOffset - this.columns[i - 1].endOffset;\n }\n }\n }\n }\n };\n WTableHolder.prototype.getPreviousValidOffset = function (columnIndex) {\n for (var j = columnIndex; j >= 0; j--) {\n if (this.columns[j].endOffset !== 0) {\n return this.columns[j].endOffset;\n }\n }\n return 0;\n };\n /**\n * @private\n */\n WTableHolder.prototype.clone = function () {\n var tableHolder = new WTableHolder();\n tableHolder.tableWidth = this.tableWidth;\n for (var i = 0; i < this.columns.length; i++) {\n tableHolder.columns.push(this.columns[i].clone());\n }\n return tableHolder;\n };\n /**\n * @private\n */\n WTableHolder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.tableColumns)) {\n for (var i = 0; i < this.tableColumns.length; i++) {\n var column = this.tableColumns[i];\n column.destroy();\n }\n }\n this.tableColumns = [];\n this.tableColumns = undefined;\n this.tableWidth = undefined;\n };\n return WTableHolder;\n}());\nexport { WTableHolder };\n/**\n * @private\n */\nvar WColumn = /** @class */ (function () {\n function WColumn() {\n /**\n * @private\n */\n this.preferredWidth = 0;\n /**\n * @private\n */\n this.minWidth = 0;\n /**\n * @private\n */\n this.maxWidth = 0;\n /**\n * @private\n */\n this.endOffset = 0;\n /**\n * @private\n */\n this.minimumWordWidth = 0;\n /**\n * @private\n */\n this.maximumWordWidth = 0;\n /**\n * @private\n */\n this.minimumWidth = 0;\n }\n /**\n * @private\n */\n WColumn.prototype.clone = function () {\n var column = new WColumn();\n column.preferredWidth = this.preferredWidth;\n column.minWidth = this.minWidth;\n column.maxWidth = this.maxWidth;\n return column;\n };\n /**\n * @private\n */\n WColumn.prototype.destroy = function () {\n this.preferredWidth = undefined;\n this.minWidth = undefined;\n this.maxWidth = undefined;\n };\n return WColumn;\n}());\nexport { WColumn };\n/**\n * @private\n */\nvar ColumnSizeInfo = /** @class */ (function () {\n function ColumnSizeInfo() {\n /**\n * @private\n */\n this.minimumWordWidth = 0;\n /**\n * @private\n */\n this.maximumWordWidth = 0;\n /**\n * @private\n */\n this.minimumWidth = 0;\n /**\n * @private\n */\n this.hasMinimumWidth = false;\n /**\n * @private\n */\n this.hasMinimumWordWidth = false;\n /**\n * @private\n */\n this.hasMaximumWordWidth = false;\n }\n return ColumnSizeInfo;\n}());\nexport { ColumnSizeInfo };\n/**\n * @private\n */\nvar CommentEditInfo = /** @class */ (function () {\n function CommentEditInfo() {\n }\n return CommentEditInfo;\n}());\nexport { CommentEditInfo };\n/**\n * @private\n */\nvar BreakElementBox = /** @class */ (function (_super) {\n __extends(BreakElementBox, _super);\n function BreakElementBox() {\n return _super.call(this) || this;\n }\n /**\n * @private\n */\n BreakElementBox.prototype.clone = function () {\n var breakElement = _super.prototype.clone.call(this);\n breakElement.breakClearType = this.breakClearType;\n return breakElement;\n };\n /*\n * @Private\n */\n BreakElementBox.prototype.destroy = function () {\n this.breakClearType = undefined;\n _super.prototype.destroy.call(this);\n };\n /*\n * @Private\n */\n BreakElementBox.prototype.componentDestroy = function () {\n this.breakClearType = undefined;\n _super.prototype.componentDestroy.call(this);\n };\n return BreakElementBox;\n}(TextElementBox));\nexport { BreakElementBox };\n/**\n * @private\n */\nvar TabStopListInfo = /** @class */ (function () {\n function TabStopListInfo() {\n }\n return TabStopListInfo;\n}());\nexport { TabStopListInfo };\n/**\n * @private\n */\nvar FootnoteEndnoteMarkerElementBox = /** @class */ (function (_super) {\n __extends(FootnoteEndnoteMarkerElementBox, _super);\n function FootnoteEndnoteMarkerElementBox() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @private\n */\n FootnoteEndnoteMarkerElementBox.prototype.getLength = function () {\n return 1;\n };\n /**\n * @private\n */\n FootnoteEndnoteMarkerElementBox.prototype.clone = function () {\n // return super.clone();\n var footEndEle = new FootnoteEndnoteMarkerElementBox();\n footEndEle.characterFormat.copyFormat(this.characterFormat);\n footEndEle.text = this.text;\n if (this.margin) {\n footEndEle.margin = this.margin.clone();\n }\n footEndEle.baselineOffset = this.baselineOffset;\n if (!isNullOrUndefined(this.paragraph) && this.paragraph.isInHeaderFooter) {\n if (this.revisions.length > 0) {\n for (var i = 0; i < this.revisions.length; i++) {\n var revision = this.revisions[i];\n footEndEle.revisions.push(revision.clone());\n }\n }\n }\n else {\n if (this.revisions.length > 0) {\n footEndEle.removedIds = Revision.cloneRevisions(this.revisions);\n }\n else {\n footEndEle.removedIds = this.removedIds.slice();\n }\n }\n footEndEle.width = this.width;\n footEndEle.height = this.height;\n if (this.contentControlProperties) {\n footEndEle.contentControlProperties = this.contentControlProperties;\n }\n return footEndEle;\n };\n return FootnoteEndnoteMarkerElementBox;\n}(TextElementBox));\nexport { FootnoteEndnoteMarkerElementBox };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WBorders } from './borders';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WListFormat } from './list-format';\nimport { ParagraphWidget, TableCellWidget, BlockContainer, TextFrame } from '../viewer/page';\nimport { WParagraphStyle } from './style';\n/* eslint-disable */\n/**\n * @private\n */\nvar WTabStop = /** @class */ (function () {\n function WTabStop() {\n }\n Object.defineProperty(WTabStop.prototype, \"position\", {\n get: function () {\n return this.positionIn;\n },\n set: function (value) {\n this.positionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"deletePosition\", {\n get: function () {\n return this.deletePositionIn;\n },\n set: function (value) {\n this.deletePositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabJustification\", {\n get: function () {\n return this.justification;\n },\n set: function (value) {\n this.justification = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WTabStop.prototype, \"tabLeader\", {\n get: function () {\n return this.leader;\n },\n set: function (value) {\n this.leader = value;\n },\n enumerable: true,\n configurable: true\n });\n WTabStop.prototype.clone = function () {\n var tabStop = new WTabStop();\n tabStop.deletePosition = this.deletePosition;\n tabStop.position = this.position;\n tabStop.tabJustification = this.tabJustification;\n tabStop.tabLeader = this.tabLeader;\n return tabStop;\n };\n WTabStop.prototype.equals = function (tab) {\n if (this.position === tab.position &&\n this.deletePosition === tab.deletePosition &&\n this.tabJustification === tab.tabJustification &&\n this.tabLeader === tab.tabLeader) {\n return true;\n }\n else {\n return false;\n }\n };\n WTabStop.prototype.destroy = function () {\n this.position = undefined;\n this.deletePosition = undefined;\n this.tabJustification = undefined;\n this.leader = undefined;\n };\n return WTabStop;\n}());\nexport { WTabStop };\n/**\n * @private\n */\nvar WParagraphFormat = /** @class */ (function () {\n function WParagraphFormat(node) {\n this.uniqueParagraphFormat = undefined;\n this.ownerBase = undefined;\n this.baseStyle = undefined;\n this.tabs = undefined;\n this.ownerBase = node;\n this.listFormat = new WListFormat(this);\n this.borders = new WBorders(this);\n this.tabs = [];\n }\n WParagraphFormat.prototype.getUpdatedTabs = function () {\n var inTabs = [];\n var tabStops = new Dictionary();\n var tabsInListFormat = this.getTabStopsFromListFormat();\n for (var _i = 0, tabsInListFormat_1 = tabsInListFormat; _i < tabsInListFormat_1.length; _i++) {\n var tabStop = tabsInListFormat_1[_i];\n if (!tabStops.containsKey(tabStop.position)) {\n tabStops.add(tabStop.position, tabStop);\n }\n }\n if (!isNullOrUndefined(this.baseStyle) && this.baseStyle instanceof WParagraphStyle) {\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n for (var _a = 0, _b = baseStyle.paragraphFormat.tabs; _a < _b.length; _a++) {\n var tab = _b[_a];\n if (!tabStops.containsKey(tab.position)) {\n tabStops.add(tab.position, tab);\n }\n }\n baseStyle = baseStyle.basedOn;\n }\n for (var _c = 0, _d = tabStops.keys; _c < _d.length; _c++) {\n var key = _d[_c];\n if (!this.hasTabStop(parseFloat(key.toFixed(4)))) {\n inTabs.push(tabStops.get(key));\n }\n }\n }\n inTabs = inTabs.concat(this.tabs.filter(function (a) { return (a.position !== 0 && a.deletePosition === 0); }));\n inTabs = inTabs.sort(function (a, b) { return a.position - b.position; });\n return inTabs;\n };\n WParagraphFormat.prototype.getTabStopsFromListFormat = function () {\n if (this.listFormat.listId > -1 && this.listFormat.listLevelNumber > -1) {\n var level = this.listFormat.listLevel;\n if (level && level.paragraphFormat) {\n return level.paragraphFormat.tabs;\n }\n }\n return [];\n };\n WParagraphFormat.prototype.hasTabStop = function (position) {\n for (var i = 0; i < this.tabs.length; i++) {\n if (parseFloat(this.tabs[i].position.toFixed(4)) === position ||\n parseFloat(this.tabs[i].deletePosition.toFixed(4)) === position) {\n return true;\n }\n }\n return false;\n };\n Object.defineProperty(WParagraphFormat.prototype, \"leftIndent\", {\n get: function () {\n return this.getPropertyValue('leftIndent');\n },\n set: function (value) {\n this.setPropertyValue('leftIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"rightIndent\", {\n get: function () {\n return this.getPropertyValue('rightIndent');\n },\n set: function (value) {\n this.setPropertyValue('rightIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"firstLineIndent\", {\n get: function () {\n return this.getPropertyValue('firstLineIndent');\n },\n set: function (value) {\n this.setPropertyValue('firstLineIndent', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"beforeSpacing\", {\n get: function () {\n return this.getPropertyValue('beforeSpacing');\n },\n set: function (value) {\n this.setPropertyValue('beforeSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"afterSpacing\", {\n get: function () {\n return this.getPropertyValue('afterSpacing');\n },\n set: function (value) {\n this.setPropertyValue('afterSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"spaceBeforeAuto\", {\n get: function () {\n return this.getPropertyValue('spaceBeforeAuto');\n },\n set: function (value) {\n this.setPropertyValue('spaceBeforeAuto', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"spaceAfterAuto\", {\n get: function () {\n return this.getPropertyValue('spaceAfterAuto');\n },\n set: function (value) {\n this.setPropertyValue('spaceAfterAuto', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacing\", {\n get: function () {\n return this.getPropertyValue('lineSpacing');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"lineSpacingType\", {\n get: function () {\n return this.getPropertyValue('lineSpacingType');\n },\n set: function (value) {\n this.setPropertyValue('lineSpacingType', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"textAlignment\", {\n get: function () {\n var value = this.getPropertyValue('textAlignment');\n if (this.bidi) {\n if (value === 'Left') {\n value = 'Right';\n }\n else if (value === 'Right') {\n value = 'Left';\n }\n }\n return value;\n },\n set: function (value) {\n this.setPropertyValue('textAlignment', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"keepWithNext\", {\n get: function () {\n return this.getPropertyValue('keepWithNext');\n },\n set: function (value) {\n this.setPropertyValue('keepWithNext', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"keepLinesTogether\", {\n get: function () {\n return this.getPropertyValue('keepLinesTogether');\n },\n set: function (value) {\n this.setPropertyValue('keepLinesTogether', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"widowControl\", {\n get: function () {\n return this.getPropertyValue('widowControl');\n },\n set: function (value) {\n this.setPropertyValue('widowControl', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"outlineLevel\", {\n get: function () {\n return this.getPropertyValue('outlineLevel');\n },\n set: function (value) {\n this.setPropertyValue('outlineLevel', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WParagraphFormat.prototype, \"contextualSpacing\", {\n get: function () {\n return this.getPropertyValue('contextualSpacing');\n },\n set: function (value) {\n this.setPropertyValue('contextualSpacing', value);\n },\n enumerable: true,\n configurable: true\n });\n WParagraphFormat.prototype.getListFormatParagraphFormat = function (property) {\n var paragraphFormat = this.getListPargaraphFormat(property);\n if (!isNullOrUndefined(paragraphFormat)) {\n return paragraphFormat.uniqueParagraphFormat.propertiesHash.get(WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property));\n }\n return undefined;\n };\n /**\n * @private\n */\n WParagraphFormat.prototype.getListPargaraphFormat = function (property) {\n if (this.listFormat.listId > -1 && this.listFormat.listLevelNumber > -1) {\n var level = this.listFormat.listLevel;\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(level) && !isNullOrUndefined(level.paragraphFormat.uniqueParagraphFormat) &&\n level.paragraphFormat.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return level.paragraphFormat;\n }\n else {\n return undefined;\n }\n }\n else if (this.listFormat.hasValue('listId') && this.listFormat.listId === -1\n && (property === 'leftIndent' || property === 'firstLineIndent')) {\n var paraFormat = new WParagraphFormat();\n if (!this.hasValue('leftIndent')) {\n paraFormat.leftIndent = 0;\n }\n if (!this.hasValue('firstLineIndent')) {\n paraFormat.firstLineIndent = 0;\n }\n return paraFormat;\n }\n return undefined;\n };\n WParagraphFormat.prototype.getPropertyValue = function (property) {\n if (!this.hasValue(property)) {\n var formatInList = this.getListFormatParagraphFormat(property);\n if (this.baseStyle instanceof WParagraphStyle) {\n var currentFormat = this;\n var baseStyle = this.baseStyle;\n while (!isNullOrUndefined(baseStyle)) {\n var listParaFormat = void 0;\n if (!this.listFormat.hasValue('listId')) {\n listParaFormat = baseStyle.paragraphFormat.getListPargaraphFormat(property);\n }\n if (baseStyle.paragraphFormat.hasValue(property)) {\n currentFormat = baseStyle.paragraphFormat;\n break;\n }\n else if (!isNullOrUndefined(listParaFormat) && listParaFormat.hasValue(property)) {\n currentFormat = listParaFormat;\n break;\n }\n else {\n baseStyle = baseStyle.basedOn;\n }\n }\n if (!isNullOrUndefined(baseStyle)) {\n if (!isNullOrUndefined(formatInList) && this.listFormat.hasValue('listId')\n && currentFormat.listFormat.listId === -1 && currentFormat.listFormat.listLevelNumber <= 1\n || !isNullOrUndefined(formatInList) && this.listFormat.listId !== currentFormat.listFormat.listId\n && currentFormat.listFormat.listLevelNumber <= 1) {\n return formatInList;\n }\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n return currentFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n if (!isNullOrUndefined(formatInList)) {\n return formatInList;\n }\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueParagraphFormat.propertiesHash.get(propertyType);\n }\n }\n return this.getDefaultValue(property);\n };\n WParagraphFormat.prototype.getDefaultValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n var docParagraphFormat = this.getDocumentParagraphFormat();\n var isInsideBodyWidget = true;\n if (this.ownerBase && this.ownerBase instanceof ParagraphWidget) {\n isInsideBodyWidget = this.ownerBase.containerWidget instanceof BlockContainer || this.ownerBase.containerWidget instanceof TextFrame ||\n this.ownerBase.containerWidget instanceof TableCellWidget;\n }\n var isPaste = !isNullOrUndefined(this.ownerBase) && !isNullOrUndefined(this.ownerBase.bodyWidget)\n && this.ownerBase.bodyWidget.page && !isNullOrUndefined(this.ownerBase.bodyWidget.page.documentHelper) && this.ownerBase.bodyWidget.page.documentHelper.owner.editorModule\n && this.ownerBase.bodyWidget.page.documentHelper.owner.editorModule.isPaste;\n if (isInsideBodyWidget && !isPaste\n && !isNullOrUndefined(docParagraphFormat) && !isNullOrUndefined(docParagraphFormat.uniqueParagraphFormat)) {\n var propValue = docParagraphFormat.uniqueParagraphFormat.propertiesHash.get(propertyType);\n if (!isNullOrUndefined(propValue)) {\n return propValue;\n }\n }\n return WParagraphFormat.getPropertyDefaultValue(property);\n };\n /**\n * @private\n */\n WParagraphFormat.prototype.getDocumentParagraphFormat = function () {\n var docParagraphFormat;\n if (!isNullOrUndefined(this.ownerBase)) {\n var documentHelper = this.getDocumentHelperObject();\n if (!isNullOrUndefined(documentHelper)) {\n docParagraphFormat = documentHelper.paragraphFormat;\n }\n }\n return docParagraphFormat;\n };\n /**\n * @private\n */\n WParagraphFormat.prototype.getDocumentHelperObject = function () {\n var documentHelper;\n if (this.ownerBase instanceof ParagraphWidget) {\n var bodyWidget = this.ownerBase.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && !isNullOrUndefined(bodyWidget.page) && !isNullOrUndefined(bodyWidget.page.documentHelper)) {\n documentHelper = bodyWidget.page.documentHelper;\n }\n }\n return documentHelper;\n };\n WParagraphFormat.prototype.setPropertyValue = function (property, value, clearProperty) {\n if (isNullOrUndefined(value) || value === '' && !clearProperty) {\n value = WParagraphFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueParagraphFormat)\n || (isNullOrUndefined(this.uniqueParagraphFormat.propertiesHash)\n && isNullOrUndefined(this.uniqueParagraphFormat.uniqueFormatType)\n && isNullOrUndefined(this.uniqueParagraphFormat.referenceCount))) {\n this.initializeUniqueParagraphFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n if (this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueParagraphFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.updateUniqueFormat(this.uniqueParagraphFormat, property, value);\n }\n };\n WParagraphFormat.prototype.initializeUniqueParagraphFormat = function (property, propValue) {\n var uniqueParaFormatTemp = new Dictionary();\n this.addUniqueParaFormat('leftIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('rightIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('firstLineIndent', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('textAlignment', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('beforeSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('afterSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('spaceBeforeAuto', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('spaceAfterAuto', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('lineSpacingType', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('outlineLevel', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('bidi', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('contextualSpacing', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('keepWithNext', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('keepLinesTogether', property, propValue, uniqueParaFormatTemp);\n this.addUniqueParaFormat('widowControl', property, propValue, uniqueParaFormatTemp);\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(uniqueParaFormatTemp, WParagraphFormat.uniqueFormatType);\n };\n WParagraphFormat.prototype.addUniqueParaFormat = function (property, modifiedProperty, propValue, uniqueParaFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WParagraphFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueParaFormatTemp.add(propertyType, propValue);\n }\n };\n WParagraphFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'leftIndent':\n value = 0;\n break;\n case 'rightIndent':\n value = 0;\n break;\n case 'firstLineIndent':\n value = 0;\n break;\n case 'textAlignment':\n value = 'Left';\n break;\n case 'beforeSpacing':\n value = 0;\n break;\n case 'afterSpacing':\n value = 0;\n break;\n case 'spaceBeforeAuto':\n value = false;\n break;\n case 'spaceAfterAuto':\n value = false;\n break;\n case 'lineSpacing':\n value = 1;\n break;\n case 'lineSpacingType':\n value = 'Multiple';\n break;\n case 'styleName':\n value = 'Normal';\n break;\n case 'outlineLevel':\n value = 'BodyText';\n break;\n case 'bidi':\n value = false;\n break;\n case 'contextualSpacing':\n value = false;\n break;\n case 'keepWithNext':\n value = false;\n break;\n case 'keepLinesTogether':\n value = false;\n break;\n case 'widowControl':\n value = true;\n break;\n }\n return value;\n };\n WParagraphFormat.prototype.clearIndent = function () {\n this.clearPropertyValue('leftIndent');\n this.clearPropertyValue('firstLineIndent');\n };\n WParagraphFormat.prototype.clearPropertyValue = function (property) {\n this.setPropertyValue(property, undefined, true);\n if (!isNullOrUndefined(this.uniqueParagraphFormat)) {\n var key = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n if (this.uniqueParagraphFormat.propertiesHash.containsKey(key)) {\n this.uniqueParagraphFormat.propertiesHash.remove(key);\n }\n }\n };\n WParagraphFormat.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.clearFormat();\n }\n if (!isNullOrUndefined(this.borders)) {\n this.borders.clearFormat();\n }\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = undefined;\n if (!isNullOrUndefined(this.getDocumentHelperObject())) {\n this.baseStyle = this.getDocumentHelperObject().styles.findByName('Normal');\n }\n };\n WParagraphFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueParagraphFormat)) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = undefined;\n if (!isNullOrUndefined(this.listFormat)) {\n this.listFormat.destroy();\n }\n this.listFormat = undefined;\n if (this.tabs && this.tabs.length > 0) {\n for (var i = 0; i < this.tabs.length; i++) {\n this.tabs[i].destroy();\n }\n this.tabs = [];\n this.tabs = undefined;\n }\n if (!isNullOrUndefined(this.borders)) {\n this.borders.destroy();\n }\n this.borders = undefined;\n this.baseStyle = undefined;\n this.ownerBase = undefined;\n };\n WParagraphFormat.prototype.copyFormat = function (format) {\n if (!isNullOrUndefined(format)) {\n if (!isNullOrUndefined(format.uniqueParagraphFormat)) {\n this.updateUniqueParagraphFormat(format);\n }\n if (!isNullOrUndefined(format.borders)) {\n if (isNullOrUndefined(this.borders)) {\n this.borders = new WBorders(this);\n }\n this.borders.copyFormat(format.borders);\n }\n if (!isNullOrUndefined(format.listFormat)) {\n if (isNullOrUndefined(this.listFormat)) {\n this.listFormat = new WListFormat(this);\n }\n this.listFormat.copyFormat(format.listFormat);\n }\n if (!isNullOrUndefined(format.baseStyle)) {\n this.baseStyle = format.baseStyle;\n }\n if (!isNullOrUndefined(format.tabs)) {\n for (var i = 0; i < format.tabs.length; i++) {\n this.tabs[i] = format.tabs[i];\n }\n }\n }\n };\n WParagraphFormat.prototype.updateUniqueParagraphFormat = function (format) {\n var hash = undefined;\n if (this.uniqueParagraphFormat) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n if (this.uniqueParagraphFormat.referenceCount === 0) {\n WParagraphFormat.uniqueParagraphFormats.remove(this.uniqueParagraphFormat);\n this.uniqueParagraphFormat = undefined;\n }\n }\n this.uniqueParagraphFormat = new WUniqueFormat(WParagraphFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueParagraphFormat.mergeProperties(format.uniqueParagraphFormat);\n }\n this.uniqueParagraphFormat = WParagraphFormat.uniqueParagraphFormats.addUniqueFormat(hash, WParagraphFormat.uniqueFormatType);\n };\n WParagraphFormat.prototype.cloneFormat = function () {\n var format = new WParagraphFormat(undefined);\n format.uniqueParagraphFormat = this.uniqueParagraphFormat;\n format.baseStyle = this.baseStyle;\n if (isNullOrUndefined(this.listFormat)) {\n format.listFormat = undefined;\n }\n else {\n format.listFormat = this.listFormat.cloneListFormat();\n format.listFormat.ownerBase = format;\n }\n format.borders = isNullOrUndefined(this.borders) ? undefined : this.borders.cloneFormat();\n return format;\n };\n /**\n *\n * @private\n */\n WParagraphFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueParagraphFormat) && !isNullOrUndefined(this.uniqueParagraphFormat.propertiesHash)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueParagraphFormat.uniqueFormatType, property);\n return this.uniqueParagraphFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WParagraphFormat.clear = function () {\n this.uniqueParagraphFormats.clear();\n };\n WParagraphFormat.prototype.applyStyle = function (baseStyle) {\n this.baseStyle = baseStyle;\n this.listFormat.applyStyle(this.baseStyle);\n };\n WParagraphFormat.prototype.getValue = function (property) {\n return this.hasValue(property) ? this.getPropertyValue(property) : undefined;\n };\n WParagraphFormat.prototype.mergeFormat = function (format, isStyle) {\n isStyle = isNullOrUndefined(isStyle) ? false : isStyle;\n if (isNullOrUndefined(this.getValue('leftIndent')) && !isNullOrUndefined(format.getValue('leftIndent'))) {\n this.leftIndent = format.getValue('leftIndent');\n }\n if (isNullOrUndefined(this.getValue('rightIndent')) && !isNullOrUndefined(format.getValue('rightIndent'))) {\n this.rightIndent = format.getValue('rightIndent');\n }\n if (isNullOrUndefined(this.getValue('firstLineIndent')) && !isNullOrUndefined(format.getValue('firstLineIndent'))) {\n this.firstLineIndent = format.getValue('firstLineIndent');\n }\n if (isNullOrUndefined(this.getValue('beforeSpacing')) && !isNullOrUndefined(format.getValue('beforeSpacing'))) {\n this.beforeSpacing = format.getValue('beforeSpacing');\n }\n if (isNullOrUndefined(this.getValue('afterSpacing')) && !isNullOrUndefined(format.getValue('afterSpacing'))) {\n this.afterSpacing = format.getValue('afterSpacing');\n }\n if (isNullOrUndefined(this.getValue('spaceBeforeAuto')) && !isNullOrUndefined(format.getValue('spaceBeforeAuto'))) {\n this.spaceBeforeAuto = format.getValue('spaceBeforeAuto');\n }\n if (isNullOrUndefined(this.getValue('spaceAfterAuto')) && !isNullOrUndefined(format.getValue('spaceAfterAuto'))) {\n this.spaceAfterAuto = format.getValue('spaceAfterAuto');\n }\n if (isNullOrUndefined(this.getValue('lineSpacing')) && !isNullOrUndefined(format.getValue('lineSpacing'))) {\n this.lineSpacing = format.getValue('lineSpacing');\n }\n if (isNullOrUndefined(this.getValue('lineSpacingType')) && !isNullOrUndefined(format.getValue('lineSpacingType'))) {\n this.lineSpacingType = format.getValue('lineSpacingType');\n }\n if (isNullOrUndefined(this.getValue('textAlignment')) && !isNullOrUndefined(format.getValue('textAlignment'))) {\n this.textAlignment = format.getValue('textAlignment');\n }\n if (isNullOrUndefined(this.getValue('outlineLevel')) && !isNullOrUndefined(format.getValue('outlineLevel'))) {\n this.outlineLevel = format.getValue('outlineLevel');\n }\n if (!isStyle && isNullOrUndefined(this.getValue('bidi')) && !isNullOrUndefined(format.getValue('bidi'))) {\n this.bidi = format.getValue('bidi');\n }\n if (isNullOrUndefined(this.getValue('contextualSpacing')) && !isNullOrUndefined(format.getValue('contextualSpacing'))) {\n this.contextualSpacing = format.getValue('contextualSpacing');\n }\n if (isNullOrUndefined(this.getValue('keepWithNext')) && !isNullOrUndefined(format.getValue('keepWithNext'))) {\n this.keepWithNext = format.getValue('keepWithNext');\n }\n if (isNullOrUndefined(this.getValue('keepLinesTogether')) && !isNullOrUndefined(format.getValue('keepLinesTogether'))) {\n this.keepLinesTogether = format.getValue('keepLinesTogether');\n }\n if (isNullOrUndefined(this.getValue('widowControl')) && !isNullOrUndefined(format.getValue('widowControl'))) {\n this.widowControl = format.getValue('widowControl');\n }\n if (isNullOrUndefined(this.listFormat)) {\n this.listFormat.mergeFormat(format.listFormat);\n }\n };\n WParagraphFormat.uniqueParagraphFormats = new WUniqueFormats();\n WParagraphFormat.uniqueFormatType = 3;\n return WParagraphFormat;\n}());\nexport { WParagraphFormat };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { WParagraphFormat } from './paragraph-format';\nimport { WCharacterFormat } from './character-format';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WStyle = /** @class */ (function () {\n function WStyle() {\n }\n return WStyle;\n}());\nexport { WStyle };\n/**\n * @private\n */\nvar WParagraphStyle = /** @class */ (function (_super) {\n __extends(WParagraphStyle, _super);\n function WParagraphStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.paragraphFormat = new WParagraphFormat(_this);\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n /**\n * @private\n * @returns {void}\n */\n WParagraphStyle.prototype.clear = function () {\n if (this.characterFormat) {\n this.characterFormat.clearFormat();\n }\n if (this.paragraphFormat) {\n this.paragraphFormat.clearFormat();\n }\n };\n /**\n * Disposes the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n WParagraphStyle.prototype.destroy = function () {\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (this.paragraphFormat) {\n this.paragraphFormat.destroy();\n this.paragraphFormat = undefined;\n }\n this.ownerBase = undefined;\n this.name = undefined;\n this.next = undefined;\n this.basedOn = undefined;\n this.link = undefined;\n };\n WParagraphStyle.prototype.copyStyle = function (paraStyle) {\n this.name = paraStyle.name;\n this.ownerBase = paraStyle.ownerBase;\n this.type = paraStyle.type;\n this.next = paraStyle.next;\n this.basedOn = paraStyle.basedOn;\n this.link = paraStyle.link;\n this.characterFormat.copyFormat(paraStyle.characterFormat);\n this.paragraphFormat.copyFormat(paraStyle.paragraphFormat);\n };\n return WParagraphStyle;\n}(WStyle));\nexport { WParagraphStyle };\n/**\n * @private\n */\nvar WCharacterStyle = /** @class */ (function (_super) {\n __extends(WCharacterStyle, _super);\n function WCharacterStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n _this.characterFormat = new WCharacterFormat(_this);\n return _this;\n }\n /**\n * @private\n * @returns {void}\n */\n WCharacterStyle.prototype.clear = function () {\n if (this.characterFormat) {\n this.characterFormat.clearFormat();\n }\n };\n /**\n * Disposes the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n WCharacterStyle.prototype.destroy = function () {\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n this.ownerBase = undefined;\n this.name = undefined;\n this.next = undefined;\n this.basedOn = undefined;\n this.link = undefined;\n };\n WCharacterStyle.prototype.copyStyle = function (charStyle) {\n this.name = charStyle.name;\n this.ownerBase = charStyle.ownerBase;\n this.type = charStyle.type;\n this.next = charStyle.next;\n this.basedOn = charStyle.basedOn;\n this.characterFormat.copyFormat(charStyle.characterFormat);\n };\n return WCharacterStyle;\n}(WStyle));\nexport { WCharacterStyle };\n/**\n * @private\n */\nvar WTableStyle = /** @class */ (function (_super) {\n __extends(WTableStyle, _super);\n function WTableStyle(node) {\n var _this = _super.call(this) || this;\n _this.ownerBase = node;\n return _this;\n }\n /**\n * Disposes the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n WTableStyle.prototype.destroy = function () {\n this.ownerBase = undefined;\n this.name = undefined;\n this.next = undefined;\n this.basedOn = undefined;\n this.link = undefined;\n };\n return WTableStyle;\n}(WStyle));\nexport { WTableStyle };\n/**\n * @private\n */\nvar WStyles = /** @class */ (function () {\n function WStyles() {\n this.collection = [];\n /* eslint-enable @typescript-eslint/no-explicit-any */\n }\n Object.defineProperty(WStyles.prototype, \"length\", {\n get: function () {\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n WStyles.prototype.remove = function (item) {\n this.collection = this.collection.filter(function (a) { return (a.name !== item.name); });\n };\n WStyles.prototype.push = function (item) {\n if (item != null && item !== undefined) {\n this.collection.push(item);\n }\n return 1;\n };\n WStyles.prototype.getItem = function (index) {\n if (this.collection.length > index) {\n return this.collection[parseInt(index.toString(), 10)];\n }\n return null;\n };\n WStyles.prototype.indexOf = function (item) {\n return this.collection.indexOf(item);\n };\n WStyles.prototype.contains = function (item) {\n var index = this.collection.indexOf(item);\n return index > -1 && index < this.collection.length;\n };\n WStyles.prototype.clear = function () {\n if (this.collection && this.collection.length > 0) {\n for (var i = 0; i < this.collection.length; i++) {\n var style = this.collection[parseInt(i.toString(), 10)];\n if (style instanceof WCharacterStyle) {\n style.clear();\n }\n else if (style instanceof WParagraphStyle) {\n style.clear();\n }\n }\n }\n this.collection = [];\n };\n WStyles.prototype.findByName = function (name, type) {\n var returnStyle;\n for (var _i = 0, _a = this.collection; _i < _a.length; _i++) {\n var value = _a[_i];\n if (value.name === name) {\n returnStyle = value;\n if (!isNullOrUndefined(type)) {\n if (value.type !== type) {\n returnStyle = undefined;\n }\n }\n }\n }\n return returnStyle;\n };\n WStyles.prototype.getStyleNames = function (type) {\n return this.collection.filter(function (a) { return (a.type === type); }).map(function (a) {\n return a.name;\n });\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n WStyles.prototype.getStyles = function (type) {\n var styles = this.collection.filter(function (a) { return (a.type === type); }).map(function (a) {\n return a;\n });\n var styleObjects = [];\n for (var _i = 0, styles_1 = styles; _i < styles_1.length; _i++) {\n var style = styles_1[_i];\n var returnStyle = {};\n var returnStyleObject = {};\n if (type === 'Paragraph') {\n returnStyleObject.paragraphFormat = {};\n HelperMethods.writeParagraphFormat(returnStyleObject.paragraphFormat, true, style.paragraphFormat);\n }\n if (type !== 'Table') {\n returnStyleObject.characterFormat = {};\n HelperMethods.writeCharacterFormat(returnStyleObject.characterFormat, true, style.characterFormat);\n }\n returnStyle.name = style.name;\n returnStyle.style = JSON.stringify(returnStyleObject);\n if (!isNullOrUndefined(type)) {\n returnStyle.type = type;\n if (returnStyle.type === 'Paragraph' && !isNullOrUndefined(style.link)) {\n returnStyle.type = 'Linked';\n }\n }\n styleObjects.push(returnStyle);\n }\n return styleObjects;\n };\n /**\n * Disposes the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n WStyles.prototype.destroy = function () {\n if (this.collection && this.collection.length > 0) {\n for (var i = 0; i < this.collection.length; i++) {\n var style = this.collection[parseInt(i.toString(), 10)];\n if (style instanceof WCharacterStyle) {\n style.destroy();\n }\n else if (style instanceof WParagraphStyle) {\n style.destroy();\n }\n else if (style instanceof WTableStyle) {\n style.destroy();\n }\n }\n }\n this.collection = [];\n this.collection = undefined;\n };\n return WStyles;\n}());\nexport { WStyles };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\n/* eslint-disable */\n/**\n * @private\n */\nvar WSectionFormat = /** @class */ (function () {\n function WSectionFormat(node) {\n this.uniqueSectionFormat = undefined;\n this.columns = [];\n this.ownerBase = node;\n this.columns = [];\n this.removedHeaderFooters = [];\n }\n Object.defineProperty(WSectionFormat.prototype, \"headerDistance\", {\n get: function () {\n return this.getPropertyValue('headerDistance');\n },\n set: function (value) {\n this.setPropertyValue('headerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"footerDistance\", {\n get: function () {\n return this.getPropertyValue('footerDistance');\n },\n set: function (value) {\n this.setPropertyValue('footerDistance', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentFirstPage\", {\n get: function () {\n return this.getPropertyValue('differentFirstPage');\n },\n set: function (value) {\n this.setPropertyValue('differentFirstPage', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"differentOddAndEvenPages\", {\n get: function () {\n return this.getPropertyValue('differentOddAndEvenPages');\n },\n set: function (value) {\n this.setPropertyValue('differentOddAndEvenPages', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageHeight\", {\n get: function () {\n return this.getPropertyValue('pageHeight');\n },\n set: function (value) {\n this.setPropertyValue('pageHeight', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"rightMargin\", {\n get: function () {\n return this.getPropertyValue('rightMargin');\n },\n set: function (value) {\n this.setPropertyValue('rightMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageWidth\", {\n get: function () {\n return this.getPropertyValue('pageWidth');\n },\n set: function (value) {\n this.setPropertyValue('pageWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"leftMargin\", {\n get: function () {\n return this.getPropertyValue('leftMargin');\n },\n set: function (value) {\n this.setPropertyValue('leftMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"bottomMargin\", {\n get: function () {\n return this.getPropertyValue('bottomMargin');\n },\n set: function (value) {\n this.setPropertyValue('bottomMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"topMargin\", {\n get: function () {\n return this.getPropertyValue('topMargin');\n },\n set: function (value) {\n this.setPropertyValue('topMargin', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"bidi\", {\n get: function () {\n return this.getPropertyValue('bidi');\n },\n set: function (value) {\n this.setPropertyValue('bidi', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"restartPageNumbering\", {\n get: function () {\n return this.getPropertyValue('restartPageNumbering');\n },\n set: function (value) {\n this.setPropertyValue('restartPageNumbering', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageStartingNumber\", {\n get: function () {\n return this.getPropertyValue('pageStartingNumber');\n },\n set: function (value) {\n this.setPropertyValue('pageStartingNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"endnoteNumberFormat\", {\n get: function () {\n return this.getPropertyValue('endnoteNumberFormat');\n },\n set: function (value) {\n this.setPropertyValue('endnoteNumberFormat', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"restartIndexForEndnotes\", {\n get: function () {\n return this.getPropertyValue('restartIndexForEndnotes');\n },\n set: function (value) {\n this.setPropertyValue('restartIndexForEndnotes', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"restartIndexForFootnotes\", {\n get: function () {\n return this.getPropertyValue('restartIndexForFootnotes');\n },\n set: function (value) {\n this.setPropertyValue('restartIndexForFootnotes', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"footNoteNumberFormat\", {\n get: function () {\n return this.getPropertyValue('footNoteNumberFormat');\n },\n set: function (value) {\n this.setPropertyValue('footNoteNumberFormat', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"initialFootNoteNumber\", {\n get: function () {\n return this.getPropertyValue('initialFootNoteNumber');\n },\n set: function (value) {\n this.setPropertyValue('initialFootNoteNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"initialEndNoteNumber\", {\n get: function () {\n return this.getPropertyValue('initialEndNoteNumber');\n },\n set: function (value) {\n this.setPropertyValue('initialEndNoteNumber', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"pageNumberStyle\", {\n get: function () {\n return this.getPropertyValue('pageNumberStyle');\n },\n set: function (value) {\n this.setPropertyValue('pageNumberStyle', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"numberOfColumns\", {\n get: function () {\n return this.getPropertyValue('numberOfColumns');\n },\n set: function (value) {\n this.setPropertyValue('numberOfColumns', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"equalWidth\", {\n get: function () {\n return this.getPropertyValue('equalWidth');\n },\n set: function (value) {\n this.setPropertyValue('equalWidth', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"lineBetweenColumns\", {\n get: function () {\n return this.getPropertyValue('lineBetweenColumns');\n },\n set: function (value) {\n this.setPropertyValue('lineBetweenColumns', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"breakCode\", {\n get: function () {\n return this.getPropertyValue('breakCode');\n },\n set: function (value) {\n this.setPropertyValue('breakCode', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"firstPageHeader\", {\n get: function () {\n return this.getPropertyValue('firstPageHeader');\n },\n set: function (value) {\n this.setPropertyValue('firstPageHeader', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"firstPageFooter\", {\n get: function () {\n return this.getPropertyValue('firstPageFooter');\n },\n set: function (value) {\n this.setPropertyValue('firstPageFooter', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"oddPageHeader\", {\n get: function () {\n return this.getPropertyValue('oddPageHeader');\n },\n set: function (value) {\n this.setPropertyValue('oddPageHeader', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"oddPageFooter\", {\n get: function () {\n return this.getPropertyValue('oddPageFooter');\n },\n set: function (value) {\n this.setPropertyValue('oddPageFooter', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"evenPageHeader\", {\n get: function () {\n return this.getPropertyValue('evenPageHeader');\n },\n set: function (value) {\n this.setPropertyValue('evenPageHeader', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WSectionFormat.prototype, \"evenPageFooter\", {\n get: function () {\n return this.getPropertyValue('evenPageFooter');\n },\n set: function (value) {\n this.setPropertyValue('evenPageFooter', value);\n },\n enumerable: true,\n configurable: true\n });\n WSectionFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = undefined;\n this.ownerBase = undefined;\n this.columns = undefined;\n this.removedHeaderFooters = undefined;\n };\n /**\n * @private\n */\n WSectionFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueSectionFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n return this.uniqueSectionFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n WSectionFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'headerDistance':\n value = 36;\n break;\n case 'footerDistance':\n value = 36;\n break;\n case 'differentFirstPage':\n value = false;\n break;\n case 'differentOddAndEvenPages':\n value = false;\n break;\n case 'pageWidth':\n value = 612;\n break;\n case 'pageHeight':\n value = 792;\n break;\n case 'leftMargin':\n value = 72;\n break;\n case 'topMargin':\n value = 72;\n break;\n case 'rightMargin':\n value = 72;\n break;\n case 'bottomMargin':\n value = 72;\n break;\n case 'bidi':\n value = false;\n break;\n case 'restartPageNumbering':\n value = false;\n break;\n case 'pageStartingNumber':\n value = 1;\n break;\n case 'footnotePosition':\n value = 'PrintAtBottomOfPage';\n break;\n case 'endnoteNumberFormat':\n value = 'LowerCaseRoman';\n break;\n case 'endnotePosition':\n value = 'DisplayEndOfDocument';\n break;\n case 'restartIndexForEndnotes':\n value = 'DoNotRestart';\n break;\n case 'restartIndexForFootnotes':\n value = 'DoNotRestart';\n break;\n case 'footNoteNumberFormat':\n value = 'Arabic';\n break;\n case 'initialFootNoteNumber':\n value = 1;\n break;\n case 'initialEndNoteNumber':\n value = 1;\n break;\n case 'pageNumberStyle':\n value = 'Arabic';\n break;\n case 'numberOfColumns':\n value = 1;\n break;\n case 'equalWidth':\n value = true;\n break;\n case 'lineBetweenColumns':\n value = false;\n break;\n case 'breakCode':\n value = 'NewPage';\n break;\n case 'firstPageHeader':\n value = undefined;\n break;\n case 'firstPageFooter':\n value = undefined;\n break;\n case 'oddPageHeader':\n value = undefined;\n break;\n case 'oddPageFooter':\n value = undefined;\n break;\n case 'evenPageHeader':\n value = undefined;\n break;\n case 'evenPageFooter':\n value = undefined;\n break;\n }\n return value;\n };\n WSectionFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueSectionFormat) && this.uniqueSectionFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueSectionFormat.propertiesHash.get(propertyType);\n }\n }\n return WSectionFormat.getPropertyDefaultValue(property);\n };\n WSectionFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WSectionFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueSectionFormat)) {\n this.initializeUniqueSectionFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueSectionFormat.uniqueFormatType, property);\n if (this.uniqueSectionFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueSectionFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.updateUniqueFormat(this.uniqueSectionFormat, property, value);\n }\n };\n WSectionFormat.prototype.initializeUniqueSectionFormat = function (property, propValue) {\n var uniqueSectionFormatTemp = new Dictionary();\n this.addUniqueSectionFormat('headerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footerDistance', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentFirstPage', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('differentOddAndEvenPages', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageWidth', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageHeight', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('leftMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('topMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('rightMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('bottomMargin', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('bidi', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('restartPageNumbering', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageStartingNumber', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('endnoteNumberFormat', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('endnotePosition', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footNoteNumberFormat', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('footnotePosition', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('restartIndexForEndnotes', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('restartIndexForFootnotes', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('initialFootNoteNumber', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('initialEndNoteNumber', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('pageNumberStyle', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('numberOfColumns', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('equalWidth', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('lineBetweenColumns', property, propValue, uniqueSectionFormatTemp);\n this.addUniqueSectionFormat('breakCode', property, propValue, uniqueSectionFormatTemp);\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(uniqueSectionFormatTemp, WSectionFormat.uniqueFormatType);\n };\n WSectionFormat.prototype.addUniqueSectionFormat = function (property, modifiedProperty, propValue, uniqueSectionFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WSectionFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueSectionFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueSectionFormatTemp.add(propertyType, WSectionFormat.getPropertyDefaultValue(property));\n }\n };\n WSectionFormat.prototype.copyFormat = function (format, history) {\n if (history && (history.isUndoing || history.isRedoing)) {\n this.uniqueSectionFormat = format.uniqueSectionFormat;\n this.columns = format.columns;\n this.removedHeaderFooters = format.removedHeaderFooters;\n }\n else {\n if (!isNullOrUndefined(format)) {\n this.removedHeaderFooters = format.removedHeaderFooters;\n if (!isNullOrUndefined(format.uniqueSectionFormat) && format.uniqueSectionFormat.propertiesHash) {\n this.updateUniqueSectionFormat(format);\n this.columns = format.columns;\n }\n }\n }\n };\n WSectionFormat.prototype.updateUniqueSectionFormat = function (format) {\n var hash = undefined;\n if (this.uniqueSectionFormat) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n if (this.uniqueSectionFormat.referenceCount === 0) {\n WSectionFormat.uniqueSectionFormats.remove(this.uniqueSectionFormat);\n this.uniqueSectionFormat = undefined;\n }\n }\n this.uniqueSectionFormat = new WUniqueFormat(WSectionFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueSectionFormat.mergeProperties(format.uniqueSectionFormat);\n }\n this.uniqueSectionFormat = WSectionFormat.uniqueSectionFormats.addUniqueFormat(hash, WSectionFormat.uniqueFormatType);\n };\n WSectionFormat.prototype.cloneFormat = function () {\n var format = new WSectionFormat();\n format.uniqueSectionFormat = this.uniqueSectionFormat;\n format.columns = this.columns;\n return format;\n };\n WSectionFormat.clear = function () {\n this.uniqueSectionFormats.clear();\n };\n WSectionFormat.uniqueSectionFormats = new WUniqueFormats();\n WSectionFormat.uniqueFormatType = 10;\n return WSectionFormat;\n}());\nexport { WSectionFormat };\n/**\n * @private\n */\nvar WColumnFormat = /** @class */ (function () {\n function WColumnFormat(node) {\n this.uniqueColumnFormat = undefined;\n this.ownerBase = node;\n }\n WColumnFormat.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueColumnFormat)) {\n WColumnFormat.uniqueColumnFormats.remove(this.uniqueColumnFormat);\n }\n this.uniqueColumnFormat = undefined;\n this.ownerBase = undefined;\n };\n WColumnFormat.prototype.hasValue = function (property) {\n if (!isNullOrUndefined(this.uniqueColumnFormat)) {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueColumnFormat.uniqueFormatType, property);\n return this.uniqueColumnFormat.propertiesHash.containsKey(propertyType);\n }\n return false;\n };\n Object.defineProperty(WColumnFormat.prototype, \"index\", {\n get: function () {\n return this.indexIn;\n },\n set: function (value) {\n this.indexIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WColumnFormat.prototype, \"width\", {\n get: function () {\n return this.getPropertyValue('width');\n },\n set: function (value) {\n this.setPropertyValue('width', value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WColumnFormat.prototype, \"space\", {\n get: function () {\n return this.getPropertyValue('space');\n },\n set: function (value) {\n this.setPropertyValue('space', value);\n },\n enumerable: true,\n configurable: true\n });\n WColumnFormat.prototype.getPropertyValue = function (property) {\n var hasValue = this.hasValue(property);\n if (hasValue) {\n var propertyType = WUniqueFormat.getPropertyType(WColumnFormat.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueColumnFormat) && this.uniqueColumnFormat.propertiesHash.containsKey(propertyType)) {\n return this.uniqueColumnFormat.propertiesHash.get(propertyType);\n }\n }\n return WColumnFormat.getPropertyDefaultValue(property);\n };\n WColumnFormat.getPropertyDefaultValue = function (property) {\n var value = undefined;\n switch (property) {\n case 'width':\n value = 36;\n break;\n case 'space':\n value = 0;\n break;\n }\n return value;\n };\n WColumnFormat.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WColumnFormat.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueColumnFormat)) {\n this.initializeUniqueColumnFormat(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueColumnFormat.uniqueFormatType, property);\n if (this.uniqueColumnFormat.propertiesHash.containsKey(propertyType) &&\n this.uniqueColumnFormat.propertiesHash.get(propertyType) === value) {\n //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueColumnFormat = WColumnFormat.uniqueColumnFormats.updateUniqueFormat(this.uniqueColumnFormat, property, value);\n }\n };\n WColumnFormat.prototype.initializeUniqueColumnFormat = function (property, propValue) {\n var uniqueColumnFormatTemp = new Dictionary();\n this.addUniqueColumnFormat('width', property, propValue, uniqueColumnFormatTemp);\n this.addUniqueColumnFormat('space', property, propValue, uniqueColumnFormatTemp);\n this.uniqueColumnFormat = WColumnFormat.uniqueColumnFormats.addUniqueFormat(uniqueColumnFormatTemp, WColumnFormat.uniqueFormatType);\n };\n WColumnFormat.prototype.addUniqueColumnFormat = function (property, modifiedProperty, propValue, uniqueColumnFormatTemp) {\n var propertyType = WUniqueFormat.getPropertyType(WColumnFormat.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueColumnFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueColumnFormatTemp.add(propertyType, WColumnFormat.getPropertyDefaultValue(property));\n }\n };\n WColumnFormat.prototype.updateUniqueColumnFormat = function (format) {\n var hash = undefined;\n if (this.uniqueColumnFormat) {\n hash = this.uniqueColumnFormat.mergeProperties(format.uniqueColumnFormat);\n if (this.uniqueColumnFormat.referenceCount === 0) {\n WColumnFormat.uniqueColumnFormats.remove(this.uniqueColumnFormat);\n this.uniqueColumnFormat = undefined;\n }\n }\n this.uniqueColumnFormat = new WUniqueFormat(WColumnFormat.uniqueFormatType);\n if (isNullOrUndefined(hash)) {\n hash = this.uniqueColumnFormat.mergeProperties(format.uniqueColumnFormat);\n }\n this.uniqueColumnFormat = WColumnFormat.uniqueColumnFormats.addUniqueFormat(hash, WColumnFormat.uniqueFormatType);\n };\n WColumnFormat.prototype.cloneFormat = function () {\n var colFormat = new WColumnFormat(undefined);\n colFormat.width = this.width;\n colFormat.space = this.space;\n return colFormat;\n };\n WColumnFormat.prototype.copyFormat = function (colFormat) {\n if (!isNullOrUndefined(colFormat) && !isNullOrUndefined(colFormat.uniqueColumnFormat)) {\n this.width = colFormat.width;\n this.space = colFormat.space;\n }\n };\n WColumnFormat.clear = function () {\n this.uniqueColumnFormats.clear();\n };\n WColumnFormat.uniqueColumnFormats = new WUniqueFormats();\n WColumnFormat.uniqueFormatType = 11;\n return WColumnFormat;\n}());\nexport { WColumnFormat };\n","import { Dictionary } from '../../base/dictionary';\nimport { WUniqueFormat } from '../../base/unique-format';\nimport { WUniqueFormats } from '../../base/unique-formats';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { WAbstractList } from './abstract-list';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar WListLevel = /** @class */ (function () {\n function WListLevel(node) {\n this.uniqueListLevel = undefined;\n this.paragraphFormat = undefined;\n this.characterFormat = undefined;\n if (node instanceof WAbstractList) {\n this.ownerBase = node;\n }\n else {\n this.ownerBase = node;\n }\n this.characterFormat = new WCharacterFormat(undefined);\n this.paragraphFormat = new WParagraphFormat(undefined);\n }\n Object.defineProperty(WListLevel.prototype, \"listLevelPattern\", {\n get: function () {\n return this.getPropertyValue('listLevelPattern');\n },\n set: function (listLevelPattern) {\n this.setPropertyValue('listLevelPattern', listLevelPattern);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"followCharacter\", {\n get: function () {\n return this.getPropertyValue('followCharacter');\n },\n set: function (followCharacter) {\n this.setPropertyValue('followCharacter', followCharacter);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"startAt\", {\n get: function () {\n return this.getPropertyValue('startAt');\n },\n set: function (startAt) {\n this.setPropertyValue('startAt', startAt);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"numberFormat\", {\n get: function () {\n return this.getPropertyValue('numberFormat');\n },\n set: function (numberFormat) {\n this.setPropertyValue('numberFormat', numberFormat);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"paraStyleName\", {\n get: function () {\n return this.getPropertyValue('paraStyleName');\n },\n set: function (paraStyleName) {\n this.setPropertyValue('paraStyleName', paraStyleName);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"restartLevel\", {\n get: function () {\n return this.getPropertyValue('restartLevel');\n },\n set: function (restartLevel) {\n this.setPropertyValue('restartLevel', restartLevel);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WListLevel.prototype, \"isLegalStyleNumbering\", {\n /**\n * Gets the boolean that specifies that the format for the numbering at this level should be in the decimal format.\n */\n get: function () {\n return this.getPropertyValue('isLegalStyleNumbering');\n },\n /**\n * Sets the boolean that specifies that the format for the numbering at this level should be in the decimal format.\n * @param {boolean} isLegalStyleNumbering - Specifies the value.\n */\n set: function (isLegalStyleNumbering) {\n this.setPropertyValue('isLegalStyleNumbering', isLegalStyleNumbering);\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-disable */\n WListLevel.prototype.getPropertyValue = function (property) {\n var propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (!isNullOrUndefined(this.uniqueListLevel) && this.uniqueListLevel.propertiesHash.containsKey(propertyType)) {\n return this.uniqueListLevel.propertiesHash.get(propertyType);\n }\n return WListLevel.getPropertyDefaultValue(property);\n };\n WListLevel.prototype.setPropertyValue = function (property, value) {\n if (isNullOrUndefined(value) || value === '') {\n value = WListLevel.getPropertyDefaultValue(property);\n }\n if (isNullOrUndefined(this.uniqueListLevel)) {\n this.initializeUniqueWListLevel(property, value);\n }\n else {\n var propertyType = WUniqueFormat.getPropertyType(this.uniqueListLevel.uniqueFormatType, property);\n if (this.uniqueListLevel.propertiesHash.containsKey(propertyType) &&\n this.uniqueListLevel.propertiesHash.get(propertyType) === value) { //Do nothing, since no change in property value and return\n return;\n }\n this.uniqueListLevel = WListLevel.uniqueListLevels.updateUniqueFormat(this.uniqueListLevel, property, value);\n }\n };\n WListLevel.prototype.initializeUniqueWListLevel = function (property, propValue) {\n var uniqueListLevelTemp = new Dictionary();\n this.addUniqueWListLevel('listLevelPattern', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('startAt', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('followCharacter', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('numberFormat', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('paraStyleName', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('restartLevel', property, propValue, uniqueListLevelTemp);\n this.addUniqueWListLevel('isLegalStyleNumbering', property, propValue, uniqueListLevelTemp);\n this.uniqueListLevel = WListLevel.uniqueListLevels.addUniqueFormat(uniqueListLevelTemp, WListLevel.uniqueFormatType);\n };\n WListLevel.prototype.addUniqueWListLevel = function (property, modifiedProperty, propValue, uniqueCharFormatTemp) {\n var propertyType;\n propertyType = WUniqueFormat.getPropertyType(WListLevel.uniqueFormatType, property);\n if (property === modifiedProperty) {\n uniqueCharFormatTemp.add(propertyType, propValue);\n }\n else {\n uniqueCharFormatTemp.add(propertyType, WListLevel.getPropertyDefaultValue(property));\n }\n };\n WListLevel.getPropertyDefaultValue = function (property) {\n /* eslint-disable */\n var value = undefined;\n switch (property) {\n case 'listLevelPattern':\n value = 'Arabic';\n break;\n case 'startAt':\n value = 0;\n break;\n case 'followCharacter':\n value = 'Tab';\n break;\n case 'paraStyleName':\n case 'numberFormat':\n value = '';\n break;\n case 'restartLevel':\n value = 0;\n break;\n case 'isLegalStyleNumbering':\n value = false;\n break;\n }\n return value;\n /* eslint-enable */\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n * @returns {void}\n */\n WListLevel.prototype.destroy = function () {\n if (!isNullOrUndefined(this.uniqueListLevel)) {\n WListLevel.uniqueListLevels.remove(this.uniqueListLevel);\n }\n this.uniqueListLevel = undefined;\n if (!isNullOrUndefined(this.characterFormat)) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (!isNullOrUndefined(this.paragraphFormat)) {\n this.paragraphFormat.destroy();\n this.paragraphFormat = undefined;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n WListLevel.prototype.clearFormat = function () {\n if (!isNullOrUndefined(this.uniqueListLevel)) {\n WListLevel.uniqueListLevels.remove(this.uniqueListLevel);\n }\n this.uniqueListLevel = undefined;\n if (this.characterFormat) {\n this.characterFormat.clearFormat();\n }\n this.characterFormat = undefined;\n if (this.paragraphFormat) {\n this.paragraphFormat.clearFormat();\n }\n this.paragraphFormat = undefined;\n };\n WListLevel.clear = function () {\n this.uniqueListLevels.clear();\n };\n WListLevel.prototype.clone = function (node) {\n var listLevel = new WListLevel(node);\n listLevel.paragraphFormat = this.paragraphFormat.cloneFormat();\n listLevel.characterFormat = this.characterFormat.cloneFormat();\n if (this.uniqueListLevel) {\n listLevel.uniqueListLevel = this.uniqueListLevel;\n listLevel.uniqueListLevel.referenceCount++;\n }\n return listLevel;\n };\n WListLevel.dotBullet = String.fromCharCode(61623);\n WListLevel.squareBullet = String.fromCharCode(61607); //Symbol font \\u25aa.\n WListLevel.arrowBullet = String.fromCharCode(10148);\n WListLevel.circleBullet = String.fromCharCode(61551) + String.fromCharCode(32);\n WListLevel.uniqueListLevels = new WUniqueFormats();\n WListLevel.uniqueFormatType = 9;\n return WListLevel;\n}());\nexport { WListLevel };\n","import { isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\nimport { WCharacterFormat } from '../index';\nimport { defaultFont } from '../../index';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CharacterRangeType, FontScriptType, FontHintType } from '../../index';\n/**\n * @private\n */\nvar TextHelper = /** @class */ (function () {\n function TextHelper(documentHelper) {\n this.paragraphMarkInfo = {};\n this.documentHelper = documentHelper;\n if (!isNullOrUndefined(documentHelper)) {\n this.context = documentHelper.containerContext;\n }\n }\n Object.defineProperty(TextHelper.prototype, \"paragraphMark\", {\n get: function () {\n return '¶';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextHelper.prototype, \"lineBreakMark\", {\n get: function () {\n return '↲';\n },\n enumerable: true,\n configurable: true\n });\n TextHelper.prototype.getEnSpaceCharacter = function () {\n return String.fromCharCode(8194);\n };\n TextHelper.prototype.repeatChar = function (char, count) {\n var text = '';\n for (var i = 0; i < count; i++) {\n text += char;\n }\n return text;\n };\n TextHelper.prototype.getParagraphMarkWidth = function (characterFormat) {\n return this.getParagraphMarkSize(characterFormat).Width;\n };\n TextHelper.prototype.getParagraphMarkSize = function (characterFormat) {\n var format = this.getFormatText(characterFormat);\n if (this.paragraphMarkInfo[\"\" + format]) {\n return this.paragraphMarkInfo[\"\" + format];\n }\n // Gets the text element's width;\n var width = this.getWidth(this.paragraphMark, characterFormat);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat);\n var textSizeInfo = {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n return this.paragraphMarkInfo[\"\" + format] = textSizeInfo;\n };\n TextHelper.prototype.getTextSize = function (elementBox, characterFormat) {\n // Gets the text element's width;\n var textTrimEndWidth = 0;\n var isRTL = characterFormat.bidi || this.isRTLText(elementBox.text);\n var text = this.setText(elementBox.text, isRTL, characterFormat.bdo);\n if (text === '\\r') {\n text = String.fromCharCode(182);\n }\n textTrimEndWidth = this.getWidth(text, characterFormat, elementBox.scriptType);\n elementBox.width = textTrimEndWidth;\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat, elementBox.scriptType);\n if (!(this.documentHelper.compatibilityMode === 'Word2003' && elementBox.isColumnBreak)) {\n elementBox.height = textHelper.Height;\n }\n elementBox.baselineOffset = textHelper.BaselineOffset;\n if (elementBox.text[elementBox.text.length - 1] === ' ') {\n textTrimEndWidth = this.getWidth(HelperMethods.trimEnd(elementBox.text), characterFormat, elementBox.scriptType);\n }\n elementBox.trimEndWidth = textTrimEndWidth;\n return textTrimEndWidth;\n };\n TextHelper.prototype.getHeight = function (characterFormat, scriptType) {\n var fontToRender = this.getFontNameToRender(scriptType, characterFormat);\n // Get character format property as below predefined structure to make it easy to check and retrieve\n // Predefined static structure `[FontName];[FontSize];bold;italic` to maintain as key in the collection\n var key = this.getFormatText(characterFormat, fontToRender);\n if (!isNullOrUndefined(this.documentHelper.heightInfoCollection[\"\" + key])) {\n return this.documentHelper.heightInfoCollection[\"\" + key];\n }\n var sizeInfo = this.documentHelper.owner.textMeasureHelper.getHeightInternal(characterFormat, fontToRender);\n this.documentHelper.heightInfoCollection[\"\" + key] = sizeInfo;\n return sizeInfo;\n };\n TextHelper.prototype.getFormatText = function (characterFormat, fontToRender) {\n var formatText = '';\n if (!isNullOrUndefined(fontToRender)) {\n formatText = fontToRender.toLocaleLowerCase();\n }\n else {\n formatText = characterFormat.fontFamily.toLocaleLowerCase();\n }\n formatText += ';' + characterFormat.fontSize;\n if (characterFormat.bold) {\n formatText += ';' + 'bold';\n }\n if (characterFormat.italic) {\n formatText += ';' + 'italic';\n }\n return formatText;\n };\n TextHelper.prototype.measureTextExcludingSpaceAtEnd = function (text, characterFormat, scriptType) {\n return this.getWidth(HelperMethods.trimEnd(text), characterFormat, scriptType);\n };\n TextHelper.prototype.getWidth = function (text, characterFormat, scriptType) {\n if (text.match('\\v')) {\n text.replace('\\v', this.lineBreakMark);\n }\n var bold = '';\n var italic = '';\n var fontFamily = '';\n var fontSize = characterFormat.fontSize;\n bold = characterFormat.bold ? 'bold' : '';\n italic = characterFormat.italic ? 'italic' : '';\n fontFamily = this.getFontNameToRender(scriptType, characterFormat);\n fontSize = fontSize === 0 ? 0.5 : fontSize / (characterFormat.baselineAlignment === 'Normal' ? 1 : 1.5);\n this.context.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + '\"' + fontFamily + '\"';\n this.context.letterSpacing = characterFormat.characterSpacing + 'pt';\n var scaleFactor = (characterFormat.scaling / 100);\n if (characterFormat.allCaps) {\n text = text.toUpperCase();\n }\n //ES-853789:For combine character we need to add the base character to get the width of the text.\n if (text === '\\u0336') {\n text += 'A';\n }\n return Math.abs(this.context.measureText(text).width * scaleFactor);\n };\n TextHelper.prototype.setText = function (textToRender, isBidi, bdo, isRender) {\n if (isNullOrUndefined(isRender)) {\n isRender = false;\n }\n if (textToRender.length === 0) {\n return '';\n }\n var isRtlText = isBidi;\n if ((!isRtlText && (bdo === 'RTL')) || (isRtlText && (bdo === 'LTR'))) {\n textToRender = HelperMethods.reverseString(textToRender);\n }\n else if (isRender && isRtlText && HelperMethods.endsWith(textToRender)) {\n var spaceCount = textToRender.length - HelperMethods.trimEnd(textToRender).length;\n textToRender = HelperMethods.addSpace(spaceCount) + HelperMethods.trimEnd(textToRender);\n }\n return textToRender;\n };\n TextHelper.prototype.measureText = function (text, characterFormat, scriptType) {\n // Gets the text element's width;\n var width = this.getWidth(text, characterFormat, scriptType);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(characterFormat, scriptType);\n return {\n 'Width': width, 'Height': textHelper.Height, 'BaselineOffset': textHelper.BaselineOffset\n };\n };\n TextHelper.prototype.updateTextSize = function (elementBox, paragraph) {\n var format = new WCharacterFormat(undefined);\n var listCharacterFormat = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = paragraph.characterFormat;\n format.fontSize = listCharacterFormat.hasValue('fontSize') ? listCharacterFormat.fontSize : breakCharacterFormat.fontSize;\n format.fontFamily = listCharacterFormat.hasValue('fontFamily') ? listCharacterFormat.fontFamily : breakCharacterFormat.fontFamily;\n var bold = '';\n var italic = '';\n var baselineAlignment = listCharacterFormat.baselineAlignment === 'Normal' ?\n breakCharacterFormat.baselineAlignment : listCharacterFormat.baselineAlignment;\n bold = listCharacterFormat.hasValue('bold') ? listCharacterFormat.bold ? 'bold' : '' : breakCharacterFormat.bold ? 'bold' : '';\n italic = listCharacterFormat.hasValue('italic') ? listCharacterFormat.italic ? 'italic' : ''\n : breakCharacterFormat.italic ? 'italic' : '';\n format.baselineAlignment = baselineAlignment;\n if (bold) {\n format.bold = true;\n }\n if (italic) {\n format.italic = true;\n }\n var isRTL = format.bidi || this.isRTLText(elementBox.text);\n var text = this.setText(elementBox.text, isRTL, format.bdo);\n elementBox.width = this.getWidth(text, format);\n // Calculate the text element's height and baseline offset.\n var textHelper = this.getHeight(format);\n elementBox.height = textHelper.Height;\n elementBox.baselineOffset = textHelper.BaselineOffset;\n format.destroy();\n };\n TextHelper.prototype.containsSpecialCharAlone = function (text) {\n /* eslint-disable */\n var specialChars = '*|.\\:[]{}-`\\;()@&$#%!~?,' + ' ' + \"'\";\n for (var i = 0; i < text.length; i++) {\n if (specialChars.indexOf(text.charAt(i)) === -1) {\n return false;\n }\n }\n return true;\n };\n TextHelper.prototype.containsNumberAlone = function (text) {\n /* eslint-disable */\n var number = '0123456789';\n if (text === '') {\n return false;\n }\n for (var i = 0; i < text.length; i++) {\n if (number.indexOf(text.charAt(i)) === -1) {\n return false;\n }\n }\n return true;\n };\n TextHelper.prototype.containsCombinationText = function (element) {\n /* eslint-disable */\n if (element.text.match(/^[0-9]+$/) && element.paragraph.bidi) {\n return true;\n }\n else {\n return false;\n }\n };\n TextHelper.prototype.inverseCharacter = function (ch) {\n switch (ch) {\n //Specify the '('\n case '(':\n //Specify the ')'\n return ')';\n //Specify the ')'\n case ')':\n //Specify the '('\n return '(';\n //Specify the '<'\n case '<':\n //Specify the '>'\n return '>';\n //Specify the '>'\n case '>':\n //Specify the '<'\n return '<';\n //Specify the '{'\n case '{':\n //Specify the '}'\n return '}';\n //Specify the '}'\n case '}':\n //Specify the '{'\n return '{';\n //Specify the '['\n case '[':\n //Specify the ']'\n return ']';\n //Specify the ']'\n case ']':\n //Specify the '['\n return '[';\n default:\n return ch;\n }\n };\n TextHelper.prototype.containsSpecialChar = function (text) {\n var specialChars = '*|.\\:[]{}-`\\;()@&$#%!~?' + ' ';\n for (var i = 0; i < text.length; i++) {\n if (specialChars.indexOf(text.charAt(i)) !== -1) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @param {string} text - Specifies the text\n * @returns {boolean} - Returns true if given text it right to left.\n */\n TextHelper.prototype.isRTLText = function (text) {\n var isRTL = false;\n if (!isNullOrUndefined(text)) {\n for (var i = 0; i < text.length; i++) {\n var temp = text[i];\n if ((temp >= String.fromCharCode(1424) && temp <= String.fromCharCode(1535)) ////Script-Hebr, Hebrew characters https://en.wikipedia.org/wiki/Hebrew_alphabet#Unicode_and_HTML (https://en.wikipedia.org/wiki/Hebrew_(Unicode_block))\n || (temp >= String.fromCharCode(64285) && temp <= String.fromCharCode(64335)) //Script-Hebr, Hebrew Alphabetic Presentation Forms characters https://en.wikipedia.org/wiki/Alphabetic_Presentation_Forms \n || (temp >= String.fromCharCode(1536) && temp <= String.fromCharCode(1791)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(1872) && temp <= String.fromCharCode(1919)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(2208) && temp <= String.fromCharCode(2303)) //Arabic characters\n || (temp >= String.fromCharCode(64336) && temp <= String.fromCharCode(65023)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(65136) && temp <= String.fromCharCode(65279)) //Arabic - Urdu characters\n || (temp >= String.fromCharCode(43392) && temp <= String.fromCharCode(43487)) //Javanese characters\n || (temp >= String.fromCharCode(1792) && temp <= String.fromCharCode(1871)) //Syriac characters\n || (temp >= String.fromCharCode(1920) && temp <= String.fromCharCode(1983)) //Thaana characters\n || (temp >= String.fromCharCode(2112) && temp <= String.fromCharCode(2143)) //Mandiac characters\n || (temp >= String.fromCharCode(1984) && temp <= String.fromCharCode(2047)) //N'Ko characters\n || (temp >= String.fromCharCode(2048) && temp <= String.fromCharCode(2111)) //Samaritan characters\n //Tifinag characters \n || (temp >= String.fromCharCode(11568) && temp <= String.fromCharCode(11647))) {\n isRTL = true;\n break;\n }\n }\n }\n return isRTL;\n };\n /**\n * @private\n * @param {string} text - Specifies the text\n * @param {FontScriptType} scriptType - Specifies the script type\n * @returns {boolean} - Returns true if given text is unicode text.\n */\n TextHelper.prototype.isUnicodeText = function (text, scriptType) {\n var isUnicode = false;\n if (!isNullOrUndefined(text)) {\n for (var i = 0; i < text.length; i++) {\n var temp = text[i];\n if (((temp >= '\\u3000' && temp <= '\\u30ff') // Japanese characters\n || (temp >= '\\uff00' && temp <= '\\uffef') // Full-width roman characters and half-width katakana\n || (temp >= '\\u4e00' && temp <= '\\u9faf') //CJK unifed ideographs - Common and uncommon kanji\n || (temp >= '\\u3400' && temp <= '\\u4dbf') //CJK unified ideographs Extension A - Rare kanji\n || (temp >= '\\uac00' && temp <= '\\uffef') //Korean Hangul characters\n || (temp >= '\\u0d80' && temp <= '\\u0dff')) && scriptType !== 0) //Sinhala characters\n {\n isUnicode = true;\n break;\n }\n }\n }\n return isUnicode;\n };\n /**\n * @private\n * @param {string} text - Specifies the text\n * @returns {RtlInfo} - Returns the text info.\n */\n TextHelper.prototype.getRtlLanguage = function (text) {\n if (isNullOrUndefined(text) || text === '') {\n return { isRtl: false, id: 0 };\n }\n if (text >= String.fromCharCode(1424) && text <= String.fromCharCode(1535)) {\n return { isRtl: true, id: 1 };\n //Arabic - Urdu characters\n }\n else if ((text >= String.fromCharCode(1536) && text <= String.fromCharCode(1791))\n || (text >= String.fromCharCode(1872) && text <= String.fromCharCode(1919))\n || (text >= String.fromCharCode(2208) && text <= String.fromCharCode(2303))\n || (text >= String.fromCharCode(64336) && text <= String.fromCharCode(65023))\n || (text >= String.fromCharCode(65136) && text <= String.fromCharCode(65279))) {\n return { isRtl: true, id: 2 };\n }\n else if (text >= String.fromCharCode(43392) && text <= String.fromCharCode(43487)) {\n return { isRtl: true, id: 3 };\n }\n else if (text >= String.fromCharCode(1792) && text <= String.fromCharCode(1871)) {\n return { isRtl: true, id: 4 };\n }\n else if (text >= String.fromCharCode(1920) && text <= String.fromCharCode(1983)) {\n return { isRtl: true, id: 5 };\n }\n else if (text >= String.fromCharCode(2112) && text <= String.fromCharCode(2143)) {\n return { isRtl: true, id: 6 };\n }\n else if (text >= String.fromCharCode(1984) && text <= String.fromCharCode(2047)) {\n return { isRtl: true, id: 7 };\n }\n else if (text >= String.fromCharCode(2048) && text <= String.fromCharCode(2111)) {\n return { isRtl: true, id: 8 };\n }\n else if (text >= String.fromCharCode(11568) && text <= String.fromCharCode(11647)) {\n return { isRtl: true, id: 9 };\n }\n return { isRtl: false, id: 0 };\n };\n /**\n * @private\n */\n TextHelper.prototype.splitTextByConsecutiveLtrAndRtl = function (text, isTextBidi, isRTLLang, characterRangeTypes, isPrevLTRText, hasRTLCharacter) {\n var charTypeIndex = characterRangeTypes.length;\n var splittedText = [];\n if (isNullOrUndefined(text) || text === '') {\n return splittedText;\n }\n var lastLtrIndex = -1;\n var ltrText = '';\n var rtlText = '';\n var wordSplitChars = '';\n var numberText = '';\n for (var i = 0; i < text.length; i++) {\n var currentCharacterType = 0;\n var separateEachWordSplitChars = false;\n if ((!isNullOrUndefined(isPrevLTRText.value) ? !isPrevLTRText.value : isTextBidi) && this.isNumber(text[i])) {\n numberText += text[i];\n currentCharacterType = 4;\n }\n else if (this.isWordSplitChar(text[i])) {\n currentCharacterType = 2;\n if (separateEachWordSplitChars = (isTextBidi || (text.charCodeAt(i) == 32 && wordSplitChars == ''))) {\n wordSplitChars += text[i];\n }\n else {\n wordSplitChars += text[i];\n }\n }\n else if (this.isRTLText(text[i]) && !this.isNumber(text[i])) {\n isPrevLTRText.value = false;\n hasRTLCharacter.value = true;\n rtlText += text[i];\n currentCharacterType = 1;\n }\n else {\n isPrevLTRText.value = true;\n ltrText += text[i];\n }\n if (numberText != '' && currentCharacterType != 4) {\n splittedText.push(numberText);\n characterRangeTypes.push(CharacterRangeType.Number);\n numberText = '';\n }\n if (rtlText != '' && currentCharacterType != 1) {\n splittedText.push(rtlText);\n characterRangeTypes.push(CharacterRangeType.RightToLeft);\n rtlText = '';\n }\n if (ltrText != '' && currentCharacterType != 0) {\n splittedText.push(ltrText);\n lastLtrIndex = splittedText.length - 1;\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n ltrText = '';\n }\n if (wordSplitChars != '' && (currentCharacterType != 2 || separateEachWordSplitChars)) {\n splittedText.push(wordSplitChars);\n characterRangeTypes.push(CharacterRangeType.WordSplit);\n wordSplitChars = '';\n }\n }\n if (numberText != '') {\n splittedText.push(numberText);\n characterRangeTypes.push(CharacterRangeType.Number);\n }\n else if (rtlText != '') {\n splittedText.push(rtlText);\n characterRangeTypes.push(CharacterRangeType.RightToLeft);\n }\n else if (ltrText != '') {\n splittedText.push(ltrText);\n lastLtrIndex = splittedText.length - 1;\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n else if (wordSplitChars != '') {\n splittedText.push(wordSplitChars);\n characterRangeTypes.push(CharacterRangeType.WordSplit);\n }\n if (hasRTLCharacter.value || (!isNullOrUndefined(isPrevLTRText.value) && !isPrevLTRText.value)) {\n for (var i = 1; i < splittedText.length; i++) {\n //Combines the consecutive LTR, RTL, and Number (Number get combined only if it's splitted by non reversing characters (.,:)) \n //along with single in-between word split character.\n var charType = characterRangeTypes[i + charTypeIndex];\n if (charType == CharacterRangeType.WordSplit && splittedText[i].length == 1\n && i + charTypeIndex + 1 < characterRangeTypes.length\n && characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.WordSplit\n && (characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.Number\n //Else handled to combine consecutive number when text bidi is false and middle word split character is not white space.\n || TextHelper.isNumberNonReversingCharacter(splittedText[i], isTextBidi))\n && characterRangeTypes[i + charTypeIndex - 1] == characterRangeTypes[i + charTypeIndex + 1]) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i] + splittedText[i + 1];\n splittedText.splice(i, 1);\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n }\n }\n else if (lastLtrIndex != -1) {\n if (isTextBidi) {\n for (var i = 1; i < lastLtrIndex; i++) {\n //Combines the first and last LTR along with all in-between splited text's.\n var charType = characterRangeTypes[i + charTypeIndex];\n if (charType == CharacterRangeType.WordSplit && i < lastLtrIndex\n && characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.LeftToRight) {\n ltrText = '';\n for (var j = i + 1; j <= lastLtrIndex; j++) {\n ltrText += splittedText[j];\n splittedText.splice(j, 1);\n characterRangeTypes.splice(j + charTypeIndex, 1);\n j--;\n lastLtrIndex--;\n }\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i] + ltrText;\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n lastLtrIndex--;\n }\n }\n }\n else {\n //Return the input text if text bidi is false.\n splittedText.length = 0;\n splittedText.push(text);\n }\n }\n else if (!isTextBidi) {\n //Return the input text if text bidi is false.\n splittedText.length = 0;\n splittedText.push(text);\n }\n if (isTextBidi) {\n for (var i = 1; i < splittedText.length; i++) {\n //Combines the consecutive LTR, RTL, and Number (Number get combined only if it's splitted by non reversing characters (.,:)\n //or if it's lang attribute is represent a RTL language)\n //along with single in-between number non reversing word split character.\n var charType = characterRangeTypes[i + charTypeIndex];\n if (charType == CharacterRangeType.WordSplit && splittedText[i].length == 1\n && i + charTypeIndex + 1 < characterRangeTypes.length\n && characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.WordSplit\n && (characterRangeTypes[i + charTypeIndex - 1] != CharacterRangeType.Number\n || TextHelper.isNumberNonReversingCharacter(splittedText[i], isTextBidi) || !isRTLLang)\n && characterRangeTypes[i + charTypeIndex - 1] == characterRangeTypes[i + charTypeIndex + 1]) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i] + splittedText[i + 1];\n splittedText.splice(i, 1);\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n //Combines the Number along with single non-word split characters (% $ #).\n else if (charType == CharacterRangeType.WordSplit\n && characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.Number\n && this.isNonWordSplitCharacter(splittedText[i]) && !isRTLLang) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i];\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n //Combines the consecutive LTR and Number\n else if (charType == CharacterRangeType.LeftToRight\n && (characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.Number\n || characterRangeTypes[i + charTypeIndex - 1] == CharacterRangeType.LeftToRight)) {\n splittedText[i - 1] = splittedText[i - 1] + splittedText[i];\n characterRangeTypes[i + charTypeIndex - 1] = CharacterRangeType.LeftToRight;\n splittedText.splice(i, 1);\n characterRangeTypes.splice(i + charTypeIndex, 1);\n i--;\n }\n }\n }\n return splittedText;\n };\n /**\n * @private\n */\n TextHelper.prototype.isRightToLeftLanguage = function (lang) {\n return (lang == 14337 || lang == 15361 || lang == 5121 || lang == 3073 || lang == 2049 ||\n lang == 11265 || lang == 13313 || lang == 12289 || lang == 4097 || lang == 8193 ||\n lang == 16385 || lang == 1025 || lang == 10241 || lang == 7169 || lang == 9217 || lang == 10655);\n };\n TextHelper.prototype.isNumber = function (ch) {\n if (!isNaN(parseInt(ch, 10))) {\n //This logic works for universal digits 0 to 9.\n return true;\n }\n else if (ch >= String.fromCharCode(1632) && ch <= String.fromCharCode(1641)) {\n //This logic works for ARABIC-INDIC DIGIT\n return true;\n }\n else if (ch >= String.fromCharCode(1776) && ch <= String.fromCharCode(1785)) {\n //This logic works for EXTENDED ARABIC-INDIC DIGIT\n return true;\n }\n else {\n //TODO: Extend this for language specific \n return false;\n }\n };\n /**\n * @private\n */\n TextHelper.prototype.isWordSplitChar = function (character) {\n for (var i = 0; i < TextHelper.wordSplitCharacters.length; i++) {\n if (TextHelper.wordSplitCharacters[i] === character) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n TextHelper.isNumberNonReversingCharacter = function (character, isTextBidi) {\n for (var i = 0; i < TextHelper.numberNonReversingCharacters.length; i++) {\n var ch = TextHelper.numberNonReversingCharacters[i];\n if (character[0] == ch && (ch.charCodeAt(0) == 47 ? !isTextBidi : true)) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n TextHelper.prototype.isNonWordSplitCharacter = function (character) {\n var isNonWordSplitChar = false;\n for (var i = 0; i < character.length; i++) {\n var charCode = character.charCodeAt(i);\n //Consider a (% $ #) as non-word split characters\n if (charCode == 35 || charCode == 36 || charCode == 37) {\n isNonWordSplitChar = true;\n }\n else {\n isNonWordSplitChar = false;\n break;\n }\n }\n return isNonWordSplitChar;\n };\n TextHelper.prototype.getFontNameToRender = function (scriptType, charFormat) {\n if (!isNullOrUndefined(scriptType)) {\n if (charFormat.bidi || charFormat.complexScript) {\n return this.getFontNameBidiToRender(scriptType, charFormat);\n }\n else {\n if (this.isEastAsiaScript(scriptType) && !isNullOrUndefined(charFormat.fontFamilyFarEast))\n return this.getFontNameEAToRender(scriptType, charFormat);\n else\n return this.getFontNameAsciiToRender(scriptType, charFormat);\n }\n }\n else {\n return charFormat.fontFamily;\n }\n };\n /// \n /// Check whether specified script is EastAsia script or not.\n /// \n /// Represent a FontScriptType to check.\n /// \n TextHelper.prototype.isEastAsiaScript = function (scriptType) {\n return scriptType == FontScriptType.Japanese || scriptType == FontScriptType.Korean\n || scriptType == FontScriptType.Chinese;\n };\n /// \n /// Get the font name East Asia to render\n /// \n /// Represent a CharacterRangeType.\n /// Returns a eastAsia font name to draw the text.\n TextHelper.prototype.getFontNameEAToRender = function (scriptType, charFormat) {\n var fontName = charFormat.fontFamilyFarEast;\n if (isNullOrUndefined(fontName) || HelperMethods.isThemeFont(fontName))\n return this.getFontNameFromTheme(charFormat, fontName, scriptType, FontHintType.EastAsia);\n else\n return fontName;\n };\n TextHelper.prototype.getFontNameAsciiToRender = function (scriptType, charFormat) {\n var fontName = charFormat.fontFamilyAscii;\n if (HelperMethods.isThemeFont(fontName))\n return this.getFontNameFromTheme(charFormat, fontName, scriptType, FontHintType.Default);\n else\n return charFormat.fontFamily;\n };\n TextHelper.prototype.getFontNameBidiToRender = function (scriptType, charFormat) {\n //If CharacterFormat.Bidi is true, then font is determined in the order: FontNameBidi, Script-Arab, font scheme(latin, ea, cs), default font (Times New Roman)\n //CharacterRangeType of a text and FontHintType (IdctHint) has no impact in this behavior.\n //Note: Behavior is traced using Word version 1808 (build 10730.20304)\n //Determines the font nmae to used for RTL characters based on its script from direct or font scheme (Document theme file)\n var fontName = charFormat.fontFamilyBidi;\n if (!isNullOrUndefined(fontName) || HelperMethods.isThemeFont(fontName))\n return this.getFontNameFromTheme(charFormat, fontName, scriptType, FontHintType.CS);\n else\n return fontName;\n };\n TextHelper.prototype.getFontNameFromTheme = function (charFormat, fontName, scriptType, hintType) {\n var fontScheme;\n if (this.documentHelper.hasThemes && !isNullOrUndefined(this.documentHelper.themes) && !isUndefined(this.documentHelper.themes.fontScheme))\n fontScheme = this.documentHelper.themes.fontScheme;\n if (fontName == \"majorAscii\" || fontName == \"majorBidi\" || fontName == \"majorEastAsia\" || fontName == \"majorHAnsi\") {\n var majorFontScheme = void 0;\n if (fontScheme != null && fontScheme.majorFontScheme != null) {\n majorFontScheme = fontScheme.majorFontScheme;\n }\n fontName = this.updateFontNameFromTheme(charFormat, majorFontScheme, scriptType, fontName, hintType);\n }\n else if (fontName == \"minorAscii\" || fontName == \"minorBidi\" || fontName == \"minorEastAsia\" || fontName == \"minorHAnsi\") {\n var minorFontScheme = void 0;\n if (fontScheme != null && fontScheme.majorFontScheme != null) {\n minorFontScheme = fontScheme.minorFontScheme;\n }\n fontName = this.updateFontNameFromTheme(charFormat, minorFontScheme, scriptType, fontName, hintType);\n }\n if (isNullOrUndefined(fontName) || HelperMethods.isThemeFont(fontName))\n //Gets the default font (Times New Roman)\n fontName = defaultFont;\n return fontName;\n };\n /// \n /// Update a font name from theme, based on FontHintType.\n /// \n /// \n /// \n /// \n /// \n TextHelper.prototype.updateFontNameFromTheme = function (charFormat, majorMinorFontScheme, scriptType, fontName, hintType) {\n //Script-Arab, font scheme(latin, ea, cs), default font (Times New Roman)\n var fontNameFromTheme = \"\";\n //Gets font from font scheme(latin, ea, cs) of document theme.\n if (majorMinorFontScheme != null && majorMinorFontScheme.fontSchemeList != null\n && majorMinorFontScheme.fontSchemeList.length > 0) {\n majorMinorFontScheme.fontSchemeList.forEach(function (fontSchemeStruct) {\n if (fontSchemeStruct.name == \"cs\" && (fontName == \"majorBidi\" || fontName == \"minorBidi\"))\n fontNameFromTheme = fontSchemeStruct.typeface;\n else if (fontSchemeStruct.name == \"ea\" && (fontName == \"majorEastAsia\" || fontName == \"minorEastAsia\"))\n fontNameFromTheme = fontSchemeStruct.typeface;\n else if (fontSchemeStruct.name == \"latin\" && (fontName == \"majorAscii\" || fontName == \"majorHAnsi\"\n || fontName == \"minorAscii\" || fontName == \"minorHAnsi\"))\n fontNameFromTheme = fontSchemeStruct.typeface;\n });\n }\n if (majorMinorFontScheme != null && majorMinorFontScheme.fontTypeface != null) {\n if (hintType == FontHintType.CS) {\n // //If it's an complex script and \"themeFontLang\" element has a \"bidi\" attribute, then we need to locate the font name\n // //from the \"theme.xml\" for the language specified by the bidi attribute\n // if (charFormat.complexScript && Document != null && Document.Settings.ThemeFontLanguages != null &&\n // Document.Settings.ThemeFontLanguages.HasValue(WCharacterFormat.LidBiKey))\n // {\n // fontName = this.getFontNameWithFontScript(majorMinorFontScheme, Document.Settings.ThemeFontLanguages.LocaleIdBidi, hintType);\n // if (fontName != null)\n // fontNameFromTheme = fontName;\n // }\n // //To-Do: Have to implement the font name retrieval behavior, when a bidi attribute is not available in theme.\n // else \n if (majorMinorFontScheme.fontTypeface.containsKey('Arab')) {\n //map(object => object.id).indexOf('c');\n //Gets the Arab-script (language) based font from font scheme (theme)\n fontNameFromTheme = majorMinorFontScheme.fontTypeface.get('Arab');\n }\n }\n else if (hintType == FontHintType.EastAsia) {\n // if (Document != null && Document.Settings.ThemeFontLanguages != null &&\n // Document.Settings.ThemeFontLanguages.HasValue(WCharacterFormat.LocaleIdFarEastKey))\n // {\n // fontName = this.getFontNameWithFontScript(majorMinorFontScheme, Document.Settings.ThemeFontLanguages.LocaleIdFarEast, hintType);\n // if (fontName != null)\n // fontNameFromTheme = fontName;\n // }\n }\n else if (isNullOrUndefined(fontNameFromTheme) && this.documentHelper.themeFontLanguage != null && (fontName === \"minorBidi\" || fontName === \"majorBidi\")) {\n return fontName = this.getFontNameWithFontScript(majorMinorFontScheme, this.documentHelper.themeFontLanguage.localeIdBidi, hintType);\n }\n }\n if (isNullOrUndefined(fontNameFromTheme))\n //Gets the default font (Times New Roman)\n fontNameFromTheme = defaultFont;\n fontName = fontNameFromTheme;\n return fontName;\n };\n // /// \n // /// Gets the font name from a theme part for the specified font script.\n // /// \n TextHelper.prototype.getFontNameWithFontScript = function (majorMinorFontScheme, localeID, hintType) {\n var fontName = null;\n //To-Do: Should extend this behavior deponds on the localeID.\n var lang = localeID.toString();\n var fontTypeFaces = majorMinorFontScheme.fontTypeface;\n //Gujarati\n //If lang script is \"gu-IN\" or \"gu\", we should retrive the \"Gujr\" font from a theme part.\n if ((lang == 'gu_IN' || localeID == 1095) && fontTypeFaces.containsKey(\"Gujr\"))\n fontName = fontTypeFaces.get(\"Arab\");\n //Hindi\n //If lang script is \"hi-IN\" or \"hi\", we should retrive the \"Deva\" font from a theme part.\n //Marathi\n //If lang script is \"mr-IN\" or \"mr\", we should retrive the \"Deva\" font from a theme part.\n else if ((lang == 'hi_IN' || lang == 'mr_IN' || localeID == 1081 || localeID == 1102)\n && fontTypeFaces.containsKey(\"Deva\"))\n fontName = fontTypeFaces.get(\"Arab\");\n //Korean\n //If lang script is \"ko-KR\" or \"ko\", we should retrive the \"Hang\" font from a theme part.\n else if ((lang == 'ko_KR' || localeID == 1042) && fontTypeFaces.containsKey(\"Hang\"))\n fontName = fontTypeFaces.get(\"Arab\");\n //Chinese - Simplified\n //If lang script is \"zh-CN\", \"zh-SG\" or \"zh\", we should retrive the \"Hans\" font from a theme part.\n else if ((lang == 'zh_CN' || lang == 'zh_SG' || localeID == 2052) && fontTypeFaces.containsKey(\"Hans\"))\n fontName = fontTypeFaces.get(\"Arab\");\n //Chinese - Traditional\n //If lang script is \"zh-TW\", \"zh-HK\", or \"zh-MO\", we should retrive the \"Hant\" font from a theme part.\n else if ((lang == 'zh_TW' || lang == 'zh_HK' || lang == 'zh_MO')\n && fontTypeFaces.containsKey(\"Hant\"))\n fontName = fontTypeFaces.get(\"Arab\");\n //Japanese\n //If lang script is \"ja-JP\" or \"ja\", we should retrive the \"Jpan\" font from a theme part.\n else if ((lang == 'ja_JP' || localeID == 1041) && fontTypeFaces.containsKey(\"Jpan\"))\n fontName = fontTypeFaces.get(\"Arab\");\n //Tamil\n //If lang script is \"ta-IN\" or \"ta\", we should retrive the \"Taml\" font from a theme part.\n else if ((lang == 'ta_IN' || localeID == 1097) && fontTypeFaces.containsKey(\"Taml\"))\n fontName = fontTypeFaces.get(\"Arab\");\n //Telugu\n //If lang script is \"te-IN\" or \"te\", we should retrive the \"Telu\" font from a theme part.\n else if ((lang == 'te_IN' || localeID == 1098) && fontTypeFaces.containsKey(\"Telu\"))\n fontName = fontTypeFaces.get(\"Arab\");\n //Hebrew\n //If lang script is \"he-IL\" or \"he\", we should retrive the \"Hebr\" font from a theme part.\n else if ((lang == 'he_IL' || lang == 'yi_Hebr' || localeID == 1037) && fontTypeFaces.containsKey(\"Hebr\"))\n fontName = fontTypeFaces.get(\"Arab\");\n //Thai\n //If lang script is \"th_TH\" or \"th\", we should retrive the \"Thai\" font from a theme part.\n else if ((lang == 'th_TH' || localeID == 1054) && fontTypeFaces.containsKey(\"Thai\"))\n fontName = fontTypeFaces.get(\"Thai\");\n //Arabic\n else if (hintType == FontHintType.CS && fontTypeFaces.containsKey(\"Arab\"))\n fontName = fontTypeFaces.get(\"Arab\");\n return fontName;\n };\n TextHelper.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.context = undefined;\n this.paragraphMarkInfo = {};\n this.paragraphMarkInfo = undefined;\n };\n TextHelper.wordSplitCharacters = [String.fromCharCode(32), String.fromCharCode(33), String.fromCharCode(34),\n String.fromCharCode(35), String.fromCharCode(36), String.fromCharCode(37), String.fromCharCode(38), String.fromCharCode(39),\n String.fromCharCode(40), String.fromCharCode(41), String.fromCharCode(42), String.fromCharCode(43), String.fromCharCode(44),\n String.fromCharCode(45), String.fromCharCode(46), String.fromCharCode(47), String.fromCharCode(58), String.fromCharCode(59),\n String.fromCharCode(60), String.fromCharCode(61), String.fromCharCode(62), String.fromCharCode(63), String.fromCharCode(64),\n String.fromCharCode(91), String.fromCharCode(92), String.fromCharCode(93), String.fromCharCode(94), String.fromCharCode(95),\n String.fromCharCode(96), String.fromCharCode(123), String.fromCharCode(124), String.fromCharCode(125), String.fromCharCode(126),\n String.fromCharCode(1548), String.fromCharCode(1563), String.fromCharCode(8211), String.fromCharCode(8212),\n String.fromCharCode(8216), String.fromCharCode(8217), String.fromCharCode(8221), String.fromCharCode(12288),\n String.fromCharCode(8207)];\n TextHelper.numberNonReversingCharacters = [String.fromCharCode(44), String.fromCharCode(46), String.fromCharCode(47),\n String.fromCharCode(58), String.fromCharCode(1548)];\n return TextHelper;\n}());\nexport { TextHelper };\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { CharacterRangeType, FontScriptType } from '../../base/types';\nimport { HelperMethods, Point, WrapPosition } from '../editor/editor-helper';\nimport { WBorder, WBorders, WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WListLevel } from '../list/list-level';\nimport { BlockContainer, BlockWidget, BodyWidget, BookmarkElementBox, EditRangeEndElementBox, EditRangeStartElementBox, ElementBox, FieldElementBox, FieldTextElementBox, HeaderFooterWidget, ImageElementBox, LineWidget, ListTextElementBox, Margin, ParagraphWidget, Rect, TabElementBox, TableCellWidget, TableRowWidget, TableWidget, TextElementBox, Widget, CheckBoxFormField, DropDownFormField, ShapeElementBox, TextFrame, ContentControl, FootnoteElementBox, FootNoteWidget, ShapeBase, CommentCharacterElementBox } from './page';\nimport { PageLayoutViewer, WebLayoutViewer } from './viewer';\nimport { TextHelper } from './text-helper';\n// Check box character is rendered smaller when compared to MS Word\n// So, mutiplied the font side by below factor to render check box character large.\nvar CHECK_BOX_FACTOR = 1.35;\n/**\n * @private\n */\nvar Layout = /** @class */ (function () {\n function Layout(documentHelper) {\n /**\n * @private\n */\n this.islayoutFootnote = false;\n /**\n * @private\n */\n this.isMultiColumnDoc = false;\n /**\n * @private\n */\n this.allowLayout = true;\n /**\n * @private\n */\n this.isReplaceAll = false;\n /**\n * @private\n */\n this.isTextFormat = false;\n /**\n * @private\n */\n this.isSectionBreakCont = false;\n /**\n * @private\n */\n this.isReplacingAll = false;\n /**\n * @private\n */\n this.footHeight = 0;\n /**\n * @private\n */\n this.existFootnoteHeight = 0;\n /**\n * @private\n */\n this.isfootMove = false;\n /**\n * @private\n */\n this.footnoteHeight = 0;\n /**\n * @private\n */\n this.isTableFootNote = false;\n /**\n * @private\n */\n this.isRelayout = false;\n /**\n * @private\n */\n this.isRelayoutneed = false;\n /**\n * @private\n */\n this.isOverlapFloatTable = false;\n this.isInitialLoad = true;\n /**\n * @private\n */\n this.isInsertFormField = false;\n this.fieldBegin = undefined;\n this.maxTextHeight = 0;\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.isFieldCode = false;\n this.isRtlFieldCode = false;\n this.isRTLLayout = false;\n this.isSkipFirstLineIndent = false;\n this.currentCell = undefined;\n this.isFootnoteContentChanged = false;\n this.isEndnoteContentChanged = false;\n this.keepWithNext = false;\n this.is2013Justification = false;\n this.nextElementToLayout = undefined;\n this.endNoteHeight = 0;\n this.isMultiColumnSplit = false;\n this.isMultiColumnLayout = false;\n this.skipUpdateContainerWidget = false;\n this.isIFfield = false;\n /**\n * @private\n */\n this.isRelayoutEndnote = false;\n this.isLayoutWhole = false;\n /**\n * @private\n */\n this.isBidiReLayout = false;\n /**\n * @private\n */\n this.defaultTabWidthPixel = 48;\n /**\n * @private\n */\n this.isRelayoutFootnote = false;\n this.isRelayoutOverlap = false;\n this.skipRelayoutOverlap = false;\n this.isWrapText = false;\n this.isYPositionUpdated = false;\n this.isXPositionUpdated = false;\n this.hasFloatingElement = false;\n this.isFootNoteLayoutStart = false;\n this.wrapPosition = [];\n this.shiftedFloatingItemsFromTable = [];\n this.isDocumentContainsRtl = false;\n this.layoutedFootnoteElement = [];\n this.documentHelper = documentHelper;\n }\n Layout.prototype.isSameStyle = function (currentParagraph, isAfterSpacing) {\n var nextOrPrevSibling = undefined;\n if (isAfterSpacing) {\n if (currentParagraph.nextWidget instanceof ParagraphWidget) {\n nextOrPrevSibling = currentParagraph.nextWidget;\n }\n }\n else {\n if (currentParagraph.previousWidget instanceof ParagraphWidget) {\n nextOrPrevSibling = currentParagraph.previousWidget;\n }\n }\n if (isNullOrUndefined(nextOrPrevSibling)) {\n //Need to skip contextual spacing behavior when document is not Word 2013 and paragraph preserved inside the table cell with AllowSpaceOfSameStyleInTable compatiblity options.\n if (currentParagraph.paragraphFormat.contextualSpacing && (currentParagraph.isInsideTable ? (!this.documentHelper.allowSpaceOfSameStyleInTable || this.documentHelper.compatibilityMode === 'Word2013') : false)) {\n if (currentParagraph.index === 0) {\n nextOrPrevSibling = this.updateFirstParagraphSpacingBasedOnContextualSpacing(currentParagraph, isAfterSpacing);\n }\n else if (currentParagraph.index === currentParagraph.associatedCell.childWidgets.length - 1) {\n nextOrPrevSibling = this.updateLastParagraphSpacingBasedOnContextualSpacing(currentParagraph);\n if (nextOrPrevSibling === currentParagraph) {\n return true;\n }\n }\n }\n if (isNullOrUndefined(nextOrPrevSibling)) {\n return false;\n }\n }\n if (nextOrPrevSibling instanceof ParagraphWidget && currentParagraph.paragraphFormat.baseStyle === nextOrPrevSibling.paragraphFormat.baseStyle && (currentParagraph.isInsideTable ? !this.documentHelper.allowSpaceOfSameStyleInTable : true)) {\n if (currentParagraph.paragraphFormat.listFormat.listId >= 0 && nextOrPrevSibling.paragraphFormat.listFormat.listId >= 0) {\n if (!currentParagraph.paragraphFormat.contextualSpacing) {\n if (isAfterSpacing && currentParagraph.paragraphFormat.spaceAfterAuto) {\n return true;\n }\n else if (!isAfterSpacing && currentParagraph.paragraphFormat.spaceBeforeAuto) {\n return true;\n }\n }\n }\n return currentParagraph.paragraphFormat.contextualSpacing;\n }\n return false;\n };\n Layout.prototype.updateFirstParagraphSpacingBasedOnContextualSpacing = function (paragraph, isAfterSpacing) {\n var ownerCell = paragraph.associatedCell;\n var ownerRow = ownerCell.ownerRow;\n var ownerTable = ownerRow.ownerTable;\n var nextOrPrevSibling;\n if (isAfterSpacing) {\n nextOrPrevSibling = isNullOrUndefined(paragraph.nextRenderedWidget) ? (!isNullOrUndefined(ownerCell.nextRenderedWidget) ? ownerCell.nextRenderedWidget.firstChild : undefined) : paragraph.nextRenderedWidget;\n }\n else {\n nextOrPrevSibling = isNullOrUndefined(paragraph.previousRenderedWidget) ? (!isNullOrUndefined(ownerCell.previousRenderedWidget) ? ownerCell.previousRenderedWidget.firstChild : undefined) : paragraph.previousRenderedWidget;\n }\n if (ownerCell.index === 0 && paragraph.index === 0) {\n if (ownerRow.index === 0) {\n if (ownerTable.isInsideTable && ownerTable.index == 0) {\n nextOrPrevSibling = this.checkOwnerTablePrevItem(ownerTable, paragraph);\n }\n else {\n //If paragraph is preserved in first row first cell means, need to check owner table previous sibling.\n var ownerTablePrevSibling = ownerTable.previousRenderedWidget;\n return ownerTablePrevSibling;\n }\n }\n else {\n if (isNullOrUndefined(nextOrPrevSibling) && paragraph.paragraphFormat.baseStyle.name === \"Normal\" && paragraph.paragraphFormat.listFormat.listId < 0) {\n return paragraph;\n }\n return nextOrPrevSibling;\n }\n }\n else if (paragraph.index === 0 && !isAfterSpacing) {\n //If para is first item in any cell excluding first cell, need to check previous cell last item.\n var prevCell = ownerRow.childWidgets[ownerCell.index - 1];\n var prevCelllastItem = prevCell.childWidgets[prevCell.childWidgets.length - 1];\n //if previous cell last item is table means skip before spacing value no need to check any paragraph styles.\n if (prevCelllastItem instanceof TableWidget && paragraph.paragraphFormat.baseStyle.name === \"Normal\" && paragraph.paragraphFormat.listFormat.listId < 0) {\n return paragraph;\n }\n }\n return nextOrPrevSibling;\n };\n Layout.prototype.updateLastParagraphSpacingBasedOnContextualSpacing = function (paragraph) {\n var ownerCell = paragraph.associatedCell;\n var ownerRow = ownerCell.ownerRow;\n var nextCellFirstItem;\n if (ownerCell.index === ownerRow.childWidgets.length - 1 && paragraph.index === ownerCell.childWidgets.length - 1) {\n if (paragraph.paragraphFormat.baseStyle.name === \"Normal\" && paragraph.paragraphFormat.listFormat.listId < 0) {\n //If para preserved in last item in cell and cell is last cell in current row means its after spacing value not considered.\n return paragraph;\n }\n }\n else if (paragraph.index === ownerCell.childWidgets.length - 1) {\n //If current para is last item in current cell then need to check next cell first item.\n var nextCell = ownerRow.childWidgets[ownerCell.index + 1];\n nextCellFirstItem = nextCell.firstChild;\n //If next cell first item is table then need to check inner table first para.\n //This is applicable for multiple nested table so when first item is table it try to get its first paragraph.\n while (nextCellFirstItem instanceof TableWidget) {\n nextCellFirstItem = nextCellFirstItem.childWidgets[0].childWidgets[0].childWidgets[0];\n }\n }\n return nextCellFirstItem;\n };\n Layout.prototype.checkOwnerTablePrevItem = function (ownerTable, paragraph) {\n var row = ownerTable.associatedCell.ownerRow;\n var prevSibling;\n if (row.index > 0) {\n if (paragraph.paragraphFormat.baseStyle.name === \"Normal\" && paragraph.paragraphFormat.listFormat.listId < 0) {\n return paragraph;\n }\n }\n else {\n if (row.ownerTable.isInsideTable && row.ownerTable.index === 0) {\n this.checkOwnerTablePrevItem(row.ownerTable, paragraph);\n }\n else {\n var prevSibling_1 = row.ownerTable.previousRenderedWidget;\n return prevSibling_1;\n }\n }\n return prevSibling;\n };\n Object.defineProperty(Layout.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Layout.prototype.layout = function () {\n // Todo: Need to handle complete document layout(relayout).\n //const page: Page = this.documentHelper.pages[0];\n //const body: BodyWidget = page.bodyWidgets[0];\n };\n /**\n * Releases un-managed and - optionally - managed resources.\n *\n * @returns {void}\n */\n Layout.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.value = undefined;\n this.allowLayout = undefined;\n this.isInitialLoad = undefined;\n this.fieldBegin = undefined;\n this.maxTextHeight = undefined;\n this.maxBaseline = undefined;\n this.maxTextBaseline = undefined;\n this.isSkipFirstLineIndent = undefined;\n this.isFieldCode = undefined;\n this.footnoteHeight = undefined;\n this.isMultiColumnDoc = undefined;\n this.isIFfield = undefined;\n };\n Layout.prototype.layoutItems = function (sections, isReLayout, isContinuousSection) {\n var _this = this;\n var page;\n var height = 0;\n var width = 0;\n for (var i = 0; i < sections.length; i++) {\n var section = sections[i];\n if (section.sectionFormat.numberOfColumns > 1) {\n this.isMultiColumnDoc = true;\n }\n var nextSection = sections[i + 1];\n this.viewer.columnLayoutArea.setColumns(section.sectionFormat);\n var lastpage = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n var bodyWidget = void 0;\n if (!isNullOrUndefined(lastpage) && !isNullOrUndefined(lastpage.bodyWidgets[lastpage.bodyWidgets.length - 1]) && lastpage.bodyWidgets[lastpage.bodyWidgets.length - 1].childWidgets.length === 0 && !isNullOrUndefined(lastpage.bodyWidgets[lastpage.bodyWidgets.length - 1].previousSplitWidget)) {\n bodyWidget = lastpage.bodyWidgets[lastpage.bodyWidgets.length - 1].previousSplitWidget;\n }\n /* eslint-disable-next-line max-len */\n if (i > 0 && !isNullOrUndefined(bodyWidget) && !isNullOrUndefined(bodyWidget.lastChild) && !(bodyWidget.lastChild instanceof TableWidget) && ((this.documentHelper.compatibilityMode === 'Word2013' && bodyWidget.lastChild.isEndsWithPageBreak || bodyWidget.lastChild.isEndsWithColumnBreak)) && lastpage.bodyWidgets[0].childWidgets.length === 0) {\n var removedPages = this.documentHelper.pages.splice(this.documentHelper.pages.length - 1, 1);\n removedPages[0].destroy();\n lastpage = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n }\n var breakCode = section.sectionFormat.breakCode;\n var prevSection = undefined;\n if (i !== 0 && this.documentHelper.compatibilityMode === 'Word2010' && breakCode === 'NewColumn') {\n var splitWidgets = sections[i - 1].getSplitWidgets();\n prevSection = splitWidgets[splitWidgets.length - 1];\n if (prevSection.sectionFormat.columns.length > 1 && section.sectionFormat.columns.length > 1 && prevSection.sectionFormat.columns.length === section.sectionFormat.columns.length && prevSection.sectionFormat.columns.length - 1 !== prevSection.columnIndex && !(prevSection.lastChild instanceof ParagraphWidget && prevSection.lastChild.isEndsWithPageBreak)) {\n var nextColumn = this.viewer.columnLayoutArea.getNextColumnByBodyWidget(prevSection);\n if (!isNullOrUndefined(nextColumn)) {\n section.columnIndex = nextColumn.index;\n section.isWord2010NextColumn = true;\n section.y = prevSection.y;\n this.viewer.clientActiveArea.height -= section.y - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = section.y;\n }\n }\n }\n if (!section.isWord2010NextColumn && breakCode !== 'NoBreak') {\n breakCode = 'NewPage';\n }\n if ((i === 0 && !isContinuousSection) || (i !== 0 && !section.isWord2010NextColumn && (isNullOrUndefined(breakCode) || breakCode === 'NewPage' || height !== section.sectionFormat.pageHeight || width !== section.sectionFormat.pageWidth || (!isNullOrUndefined(lastpage.bodyWidgets[lastpage.bodyWidgets.length - 1].lastChild) && lastpage.bodyWidgets[lastpage.bodyWidgets.length - 1].lastChild.isEndsWithPageBreak)))) {\n page = this.viewer.createNewPage(section);\n }\n else {\n var clientY = this.documentHelper.viewer.clientActiveArea.y;\n var clientHeight = this.documentHelper.viewer.clientActiveArea.height;\n if (isContinuousSection) {\n var section_1 = this.getBodyWidget(lastpage.bodyWidgets[lastpage.bodyWidgets.length - 1], true);\n var height_1 = this.getNextWidgetHeight(section_1);\n this.viewer.updateClientArea(section_1, section_1.page);\n clientHeight = this.viewer.clientActiveArea.height - (height_1 - this.viewer.clientActiveArea.y);\n clientY = height_1;\n isContinuousSection = false;\n }\n //if (i - 1 > 0) {\n page = lastpage;\n //}\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n this.documentHelper.viewer.updateClientArea(section, page);\n this.documentHelper.viewer.clientActiveArea.y = clientY;\n this.documentHelper.viewer.clientActiveArea.height = clientHeight;\n }\n height = section.sectionFormat.pageHeight;\n width = section.sectionFormat.pageWidth;\n this.addBodyWidget(this.viewer.clientActiveArea, section);\n if (this.documentHelper.pages.length > 1) {\n var pageIndex = 0;\n for (var i_1 = 0; i_1 < this.documentHelper.pages.length; i_1++) {\n var prevPage = this.documentHelper.pages[i_1];\n var prevSectionIndex = prevPage.sectionIndex;\n var index = section.index;\n if (prevSectionIndex > index || prevPage === page) {\n break;\n }\n pageIndex++;\n }\n if (pageIndex < this.documentHelper.pages.length - 1) {\n this.documentHelper.insertPage(pageIndex, page);\n }\n }\n this.layoutSection(section, 0, nextSection);\n if (section.isWord2010NextColumn && !isNullOrUndefined(prevSection)) {\n var sectionHeight = this.getNextWidgetHeight(prevSection);\n if (this.viewer.clientActiveArea.y < sectionHeight) {\n this.viewer.updateClientArea(prevSection, prevSection.page);\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.height - (sectionHeight - this.viewer.clientActiveArea.y);\n this.viewer.clientActiveArea.y = sectionHeight;\n }\n }\n }\n if (!isReLayout) {\n this.layoutComments(this.documentHelper.comments);\n }\n this.updateFieldElements();\n if (this.documentHelper.owner.layoutType === 'Pages') {\n this.layoutEndNoteElement();\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (_this.documentHelper) {\n _this.documentHelper.isScrollHandler = true;\n // if (this.documentHelper.owner.isSpellCheck && this.documentHelper.owner.spellChecker.enableOptimizedSpellCheck) {\n // this.documentHelper.triggerElementsOnLoading = true;\n // }\n _this.documentHelper.clearContent();\n _this.viewer.updateScrollBars();\n _this.documentHelper.isScrollHandler = false;\n _this.isInitialLoad = false;\n }\n }, 50);\n };\n /**\n * @private\n */\n Layout.prototype.layoutComments = function (comments) {\n if (!isNullOrUndefined(comments)) {\n this.viewer.owner.commentReviewPane.layoutComments();\n }\n };\n Layout.prototype.layoutSection = function (section, index, nextSection) {\n var block = section.firstChild;\n var nextBlock;\n var prevBlock;\n do {\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Auto'\n && !block.tableFormat.allowAutoFit) {\n block.calculateGrid();\n }\n if (!isNullOrUndefined(block)) {\n this.viewer.updateClientAreaForBlock(block, true, undefined, true, true);\n var bodyIndex = block.containerWidget.indexInOwner;\n nextBlock = this.layoutBlock(block, index);\n index = 0;\n this.viewer.updateClientAreaForBlock(block, false);\n prevBlock = block;\n block = nextBlock;\n }\n } while (block);\n block = section.firstChild;\n if (this.viewer instanceof PageLayoutViewer && section.sectionFormat.numberOfColumns > 1 && !isNullOrUndefined(nextSection) && nextSection.sectionFormat.breakCode === 'NoBreak' && (section.sectionFormat.breakCode === 'NoBreak' || (section.sectionIndex === section.page.bodyWidgets[0].sectionIndex))) {\n if (this.getColumnBreak(section)) {\n var splittedSection = section.getSplitWidgets();\n var bodyWidget = splittedSection[splittedSection.length - 1];\n if (!isNullOrUndefined(section.page.nextPage)) {\n this.splitBodyWidgetBasedOnColumn(bodyWidget);\n }\n else {\n var firstBody = this.getBodyWidget(bodyWidget, true);\n this.viewer.updateClientArea(firstBody, firstBody.page);\n var height = this.getNextWidgetHeight(firstBody);\n this.viewer.clientActiveArea.height -= height - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = height;\n }\n }\n else {\n if (!isNullOrUndefined(section.page.nextPage)) {\n section = this.documentHelper.pages[this.documentHelper.pages.length - 1].bodyWidgets[0];\n }\n this.splitBodyWidgetBasedOnColumn(section);\n }\n }\n var page;\n if (block && block.bodyWidget && block.bodyWidget.page) {\n page = block.bodyWidget.page;\n }\n while (page) {\n if (page.footnoteWidget) {\n this.layoutfootNote(page.footnoteWidget);\n page = page.nextPage;\n }\n else {\n page = page.nextPage;\n }\n }\n page = undefined;\n block = undefined;\n };\n /**\n * @private\n *\n */\n Layout.prototype.reLayoutMultiColumn = function (section, isFirstBlock, blockIndex) {\n this.isInitialLoad = true;\n section = section.getSplitWidgets()[0];\n this.combineMultiColumnForRelayout(section);\n if (section.sectionFormat.numberOfColumns > 1) {\n this.isMultiColumnDoc = true;\n }\n this.isMultiColumnSplit = false;\n var previousSection = section.previousRenderedWidget;\n var nextSection = section.nextRenderedWidget;\n var isUpdatedClientArea = false;\n // Section's Y position is not updated properly when the two sections combined and layouted.\n if (!isFirstBlock && !isNullOrUndefined(section.firstChild) && section.firstChild instanceof ParagraphWidget && section.y !== section.firstChild.y) {\n section.y = section.firstChild.y;\n }\n if (isFirstBlock && nextSection && section.page !== nextSection.page && section.firstChild instanceof ParagraphWidget) {\n var paragraph = section.firstChild;\n var lineHeight = 0;\n if (paragraph.isEmpty()) {\n lineHeight = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat).Height;\n }\n else {\n var firstLine = paragraph.childWidgets[0];\n lineHeight = this.getMaxElementHeight(firstLine);\n }\n var previousBlock = paragraph.previousRenderedWidget;\n if (section.y === this.viewer.clientActiveArea.y && lineHeight > this.viewer.clientActiveArea.height) {\n previousBlock = isNullOrUndefined(previousBlock) ? paragraph : previousBlock;\n this.moveBlocksToNextPage(previousBlock);\n this.viewer.columnLayoutArea.setColumns(section.sectionFormat);\n this.viewer.updateClientArea(section, section.page);\n isUpdatedClientArea = true;\n }\n }\n else if (!isNullOrUndefined(previousSection) && previousSection.page !== section.page && section.firstChild instanceof ParagraphWidget && previousSection.lastChild instanceof ParagraphWidget) {\n var previousParagraph = previousSection.lastChild;\n var paragraph = section.firstChild;\n if (section instanceof BodyWidget && previousSection.lastChild && previousParagraph instanceof ParagraphWidget && previousSection.sectionFormat.breakCode === 'NoBreak' && section.page.index !== previousSection.page.index && section.index !== previousSection.index) {\n var bodyWidget = previousSection;\n if (bodyWidget.sectionFormat.columns.length > 1) {\n bodyWidget = this.getBodyWidget(bodyWidget, true);\n }\n var bottom = HelperMethods.round((this.getNextWidgetHeight(bodyWidget) + paragraph.height), 2);\n // Bug 858530: Shift the widgets to previous container widget if the client height is not enough to place this widget.\n if (!previousSection.lastChild.isEndsWithPageBreak && !previousSection.lastChild.isEndsWithColumnBreak\n && bottom <= HelperMethods.round(this.viewer.clientActiveArea.bottom, 2)) {\n var page = previousSection.page;\n var nextPage = section.page;\n for (var j = 0; j < nextPage.bodyWidgets.length; j++) {\n var nextBodyWidget = nextPage.bodyWidgets[j];\n nextPage.bodyWidgets.splice(nextPage.bodyWidgets.indexOf(nextBodyWidget), 1);\n page.bodyWidgets.splice(page.bodyWidgets.length, 0, nextBodyWidget);\n nextBodyWidget.page = page;\n j--;\n }\n section.y = this.viewer.clientActiveArea.y;\n this.documentHelper.removeEmptyPages();\n }\n }\n }\n if (!isUpdatedClientArea) {\n this.viewer.columnLayoutArea.setColumns(section.sectionFormat);\n this.viewer.updateClientArea(section, section.page);\n this.viewer.clientActiveArea.height -= section.y - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = section.y;\n }\n this.addBodyWidget(this.viewer.clientActiveArea, section);\n this.clearBlockWidget(section.childWidgets, true, true, true);\n this.isMultiColumnLayout = true;\n this.reLayoutMultiColumnBlock(section, nextSection, blockIndex);\n this.isMultiColumnLayout = false;\n this.isInitialLoad = false;\n var splitSections = section.getSplitWidgets();\n var lastSection = splitSections[splitSections.length - 1];\n var firstBody = this.getBodyWidget(lastSection, true);\n this.viewer.updateClientArea(firstBody, firstBody.page);\n var height = this.getNextWidgetHeight(firstBody);\n this.viewer.clientActiveArea.height -= height - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = height;\n if (!isNullOrUndefined(lastSection) && !isNullOrUndefined(lastSection.nextRenderedWidget)) {\n nextSection = lastSection.nextRenderedWidget;\n var clientY = this.documentHelper.viewer.clientActiveArea.y;\n var clientHeight = this.documentHelper.viewer.clientActiveArea.height;\n this.documentHelper.viewer.updateClientArea(nextSection, nextSection.page);\n this.documentHelper.viewer.clientActiveArea.y = clientY;\n this.documentHelper.viewer.clientActiveArea.height = clientHeight;\n this.documentHelper.blockToShift = nextSection.firstChild;\n }\n if (isNullOrUndefined(lastSection.nextRenderedWidget) ||\n (!isNullOrUndefined(lastSection.nextRenderedWidget) && lastSection.sectionFormat.breakCode !== 'NoBreak' && lastSection.nextRenderedWidget.sectionFormat.pageHeight !== lastSection.sectionFormat.pageHeight && lastSection.nextRenderedWidget.sectionFormat.pageWidth !== lastSection.sectionFormat.pageWidth)) {\n this.documentHelper.blockToShift = undefined;\n }\n };\n Layout.prototype.combineMultiColumnForRelayout = function (section) {\n var splitSections = section.getSplitWidgets();\n var firstSection = splitSections[0];\n section = splitSections[splitSections.length - 1];\n while (section !== firstSection) {\n var prevSection = section.previousRenderedWidget;\n var isPreviousSplit = false;\n for (var i = 0; i < section.childWidgets.length; i++) {\n if (section.childWidgets[i] instanceof BlockWidget && !isNullOrUndefined(section.childWidgets[i].previousSplitWidget)\n && !isNullOrUndefined(section.childWidgets[i].previousSplitWidget.previousSplitWidget)\n && section.childWidgets[i].previousSplitWidget.bodyWidget.page !== section.childWidgets[i].previousSplitWidget.previousSplitWidget.bodyWidget.page) {\n isPreviousSplit = true;\n }\n if ((section.childWidgets[i] instanceof BlockWidget && !isNullOrUndefined(section.childWidgets[i].previousSplitWidget) && section.childWidgets[i].previousSplitWidget.bodyWidget.page === section.childWidgets[i].bodyWidget.page && !isPreviousSplit)) {\n section.childWidgets[i].combineWidget(this.viewer);\n if (prevSection.lastChild instanceof TableWidget) {\n this.updateCellHeightInCombinedTable(prevSection.lastChild);\n }\n i--;\n continue;\n }\n prevSection.childWidgets.push(section.childWidgets[i]);\n section.childWidgets[i].containerWidget = prevSection;\n section.childWidgets[i].containerWidget.page = prevSection.page;\n section.childWidgets.splice(0, 1);\n i--;\n }\n section = section.previousRenderedWidget;\n }\n this.documentHelper.removeEmptyPages();\n };\n Layout.prototype.reLayoutMultiColumnBlock = function (section, nextSection, blockIndex) {\n var block = section.firstChild;\n var nextBlock;\n do {\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Auto'\n && !block.tableFormat.allowAutoFit) {\n block.calculateGrid();\n }\n if (!isNullOrUndefined(block)) {\n this.viewer.updateClientAreaForBlock(block, true, undefined, true);\n nextBlock = this.layoutBlock(block, 0, block.index < blockIndex ? true : false);\n this.viewer.updateClientAreaForBlock(block, false);\n block = nextBlock;\n }\n } while (block && section.getSplitWidgets().indexOf(block.bodyWidget) !== -1);\n block = section.firstChild;\n if (this.viewer instanceof PageLayoutViewer && section.sectionFormat.numberOfColumns > 1 && !isNullOrUndefined(nextSection) && nextSection.sectionFormat.breakCode === 'NoBreak' && (section.sectionFormat.breakCode === 'NoBreak' || (section.sectionIndex === section.page.bodyWidgets[0].sectionIndex))) {\n var splittedSection = section.getSplitWidgets();\n var bodyWidget = splittedSection[splittedSection.length - 1];\n if (this.getColumnBreak(section)) {\n if (section.page !== bodyWidget.page) {\n this.splitBodyWidgetBasedOnColumn(bodyWidget);\n }\n else {\n var firstBody = this.getBodyWidget(bodyWidget, true);\n this.viewer.updateClientArea(firstBody, firstBody.page);\n var height = this.getNextWidgetHeight(firstBody);\n this.viewer.clientActiveArea.height -= height - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = height;\n }\n }\n else if (!isNullOrUndefined(section.page.nextPage)) {\n this.splitBodyWidgetBasedOnColumn(bodyWidget);\n }\n }\n };\n Layout.prototype.splitBodyWidgetBasedOnColumn = function (section) {\n section = this.getBodyWidget(section, true);\n var firstSection = section;\n this.isMultiColumnSplit = true;\n if (!this.isInitialLoad && section.sectionFormat.equalWidth) {\n var previousStartIndex = this.documentHelper.selection.startOffset;\n var previousEndIndex = this.documentHelper.selection.endOffset;\n this.combineMultiColumn(section);\n this.layoutMultiColumnBody(section, false);\n if (previousStartIndex !== this.documentHelper.selection.startOffset) {\n this.documentHelper.selection.select(previousStartIndex, previousEndIndex);\n }\n }\n this.combineMultiColumn(section);\n var lineCountInfo = this.getCountOrLine(section, undefined, undefined, true);\n var totalHeight = lineCountInfo.lineCount;\n var lineToBeSplit = Math.round(totalHeight / section.sectionFormat.numberOfColumns);\n while (section) {\n var lineCountInfo_1 = this.getCountOrLine(section, lineToBeSplit, true, false);\n var line = lineCountInfo_1.lineWidget;\n var lineIndexInCell = lineCountInfo_1.lineCount;\n if (!isNullOrUndefined(line)) {\n if (line.paragraph.containerWidget instanceof BodyWidget) {\n this.moveToNextLine(line, true, line.indexInOwner);\n }\n else if (line.paragraph.containerWidget instanceof TableCellWidget) {\n var table = [line.paragraph.containerWidget.ownerTable];\n var rows = [line.paragraph.containerWidget.ownerRow];\n var index = line.paragraph.containerWidget.index;\n if (table[table.length - 1].isInsideTable) {\n table[table.length - 1] = this.getParentTable(table[table.length - 1]);\n rows[rows.length - 1] = this.getParentRow(rows[rows.length - 1]);\n }\n this.updateWidgetsToTable(table, rows, rows[rows.length - 1], false, lineIndexInCell, index, true);\n var tableWidget = table[table.length - 1];\n var rowWidget = rows[rows.length - 1];\n var nextRow = rowWidget.nextRenderedWidget;\n while (nextRow) {\n this.clearRowWidget(nextRow, true, true, false);\n nextRow = this.layoutRow(table, nextRow);\n nextRow = nextRow.nextRenderedWidget;\n }\n if (!isNullOrUndefined(tableWidget.nextRenderedWidget) && section.sectionFormat.equalWidth) {\n this.documentHelper.blockToShift = tableWidget.nextRenderedWidget;\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n var firstBody = this.getBodyWidget(line.paragraph.bodyWidget, true);\n var lastBody = this.getBodyWidget(firstBody, false);\n if (!firstBody.sectionFormat.equalWidth && lastBody.sectionFormat.numberOfColumns - 1 === lastBody.columnIndex) {\n var nonEqualBody = firstBody;\n var initialCount = (this.getCountOrLine(firstBody)).lineCount;\n this.layoutMultiColumnBody(nonEqualBody, true);\n var finalCount = (this.getCountOrLine(firstBody)).lineCount;\n if (initialCount !== finalCount) {\n this.splitBodyWidgetBasedOnColumn(firstBody);\n }\n }\n this.viewer.updateClientArea(firstBody, firstBody.page);\n var height = this.getNextWidgetHeight(firstBody);\n this.viewer.clientActiveArea.height -= height - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = height;\n this.viewer.clientArea.y = this.viewer.clientActiveArea.y;\n this.viewer.clientArea.height = this.viewer.clientActiveArea.height;\n }\n section = section.nextRenderedWidget;\n if (!isNullOrUndefined(section) && section.columnIndex === section.sectionFormat.numberOfColumns - 1) {\n break;\n }\n }\n this.isMultiColumnSplit = false;\n if (!this.isInitialLoad) {\n section = this.getBodyWidget(firstSection, false);\n if (!isNullOrUndefined(section.nextRenderedWidget)) {\n this.documentHelper.blockToShift = section.nextRenderedWidget.firstChild;\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.getColumnBreak = function (section) {\n var firstBody = this.getBodyWidget(section, true);\n if (firstBody.sectionFormat.numberOfColumns <= 1) {\n return false;\n }\n while (firstBody) {\n if (firstBody.lastChild instanceof ParagraphWidget && firstBody.lastChild.isEndsWithColumnBreak) {\n return true;\n }\n if (isNullOrUndefined(firstBody.nextRenderedWidget) || firstBody.index !== firstBody.nextRenderedWidget.index) {\n break;\n }\n firstBody = firstBody.nextRenderedWidget;\n }\n return false;\n };\n Layout.prototype.layoutMultiColumnBody = function (nonEqualBody, updatePosition) {\n var skipPosition = false;\n while (nonEqualBody) {\n if (!skipPosition) {\n this.viewer.updateClientArea(nonEqualBody, nonEqualBody.page);\n this.viewer.clientActiveArea.height -= nonEqualBody.y - this.viewer.clientActiveArea.y;\n if (nonEqualBody instanceof FootNoteWidget) {\n this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n else {\n this.viewer.clientActiveArea.y = nonEqualBody.y;\n }\n }\n skipPosition = updatePosition ? false : true;\n for (var i = 0; i < nonEqualBody.childWidgets.length; i++) {\n var block = nonEqualBody.childWidgets[i];\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true, true);\n }\n this.viewer.updateClientAreaForBlock(block, true);\n var isUpdatedList = false;\n if (block instanceof ParagraphWidget && !isNullOrUndefined(block.paragraphFormat)\n && block.paragraphFormat.listFormat.listId !== -1) {\n isUpdatedList = block.paragraphFormat.listFormat.listLevelNumber === 0 ? true : false;\n }\n this.layoutBlock(block, 0, isUpdatedList);\n this.viewer.updateClientAreaForBlock(block, false);\n }\n if (nonEqualBody.columnIndex === nonEqualBody.sectionFormat.numberOfColumns - 1 || (!isNullOrUndefined(nonEqualBody.nextRenderedWidget) && nonEqualBody.sectionIndex !== nonEqualBody.nextRenderedWidget.sectionIndex)) {\n break;\n }\n nonEqualBody = nonEqualBody.nextRenderedWidget;\n }\n };\n Layout.prototype.getNextWidgetHeight = function (body) {\n var height = 0;\n var updatedHeight = 0;\n while (body && body.childWidgets.length > 0) {\n height = body.lastChild.height;\n if (body.lastChild instanceof TableWidget) {\n height = this.getHeight(body.lastChild);\n }\n height += body.lastChild.y;\n if (height > updatedHeight) {\n updatedHeight = height;\n }\n if (!isNullOrUndefined(body) && body.columnIndex === body.sectionFormat.numberOfColumns - 1 || body.sectionFormat.numberOfColumns === 0 || (!isNullOrUndefined(body.nextRenderedWidget) && body.sectionIndex !== body.nextRenderedWidget.sectionIndex)) {\n break;\n }\n body = body.nextRenderedWidget;\n }\n return updatedHeight;\n };\n Layout.prototype.getHeight = function (block) {\n var height = 0;\n for (var i = 0; i < block.childWidgets.length; i++) {\n height += block.childWidgets[i].height;\n }\n return height;\n };\n Layout.prototype.getBookmarkMargin = function (lineWidget) {\n var height = 0;\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (!isNullOrUndefined(element.margin) && element instanceof BookmarkElementBox) {\n height = element.margin.top + element.margin.bottom;\n break;\n }\n }\n return height;\n };\n Layout.prototype.getCountOrLine = function (section, lineToBeSplit, isSplit, getHeight) {\n var totalNoOflines = 0;\n var line;\n var count = 0;\n var skip = false;\n var maxHeight = 0;\n var lineIndexInCell = 0;\n var splitCountLine;\n var lineMargin = 0;\n while (section) {\n for (var i = 0; i < section.childWidgets.length; i++) {\n var block = section.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n for (var j = 0; j < block.childWidgets.length; j++) {\n var lineWidget = block.childWidgets[j];\n lineMargin = 0;\n if (!isNullOrUndefined(lineWidget.margin)) {\n lineMargin = lineWidget.margin.top + lineWidget.margin.bottom + this.getBookmarkMargin(lineWidget);\n }\n if (!isSplit) {\n totalNoOflines++;\n maxHeight += lineWidget.height - lineMargin;\n }\n else {\n maxHeight += lineWidget.height - lineMargin;\n if (Math.round(lineToBeSplit) < Math.round(maxHeight)) {\n line = block.childWidgets[j];\n skip = true;\n count = 0;\n break;\n }\n else {\n count++;\n }\n }\n }\n }\n else if (block instanceof TableWidget) {\n splitCountLine = this.getCountOrLineTable(block, lineToBeSplit, isSplit, maxHeight, false, getHeight);\n if (getHeight) {\n maxHeight += splitCountLine.lineCount;\n }\n else if (!isSplit) {\n totalNoOflines += splitCountLine.lineCount;\n }\n else if (isNullOrUndefined(splitCountLine.lineWidget)) {\n // count = splitCountLine.lineCount;\n maxHeight = splitCountLine.lineCount;\n }\n else {\n line = splitCountLine.lineWidget;\n lineIndexInCell = splitCountLine.lineCount;\n skip = true;\n }\n }\n if (skip && isSplit) {\n break;\n }\n }\n if (skip && isSplit) {\n break;\n }\n if (!isNullOrUndefined(section.nextRenderedWidget) && section.index !== section.nextRenderedWidget.index) {\n break;\n }\n section = section.nextRenderedWidget;\n }\n if (getHeight) {\n return { lineWidget: undefined, lineCount: maxHeight };\n }\n else if (!isSplit) {\n return { lineWidget: undefined, lineCount: totalNoOflines };\n }\n else {\n return { lineWidget: line, lineCount: lineIndexInCell };\n }\n };\n Layout.prototype.getCountOrLineTable = function (block, lineToBeSplit, isSplit, maxSplitHeight, isNested, getHeight) {\n var lineIndexInCell = 0;\n var skip = false;\n var line;\n var totalNoOflines = 0;\n var totalHeight = 0;\n var minCount = 0;\n var maxCount = 0;\n var minHeight = 0;\n var maxHeight = 0;\n var splitCountLine;\n for (var i = 0; i < block.childWidgets.length; i++) {\n var row = block.childWidgets[i];\n var minCountCell = void 0;\n var maxCountCell = void 0;\n minCount = 0;\n maxCount = 0;\n minHeight = 0;\n maxHeight = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var blocks = cell.childWidgets[k];\n if (blocks instanceof ParagraphWidget && blocks.childWidgets.length > 0) {\n for (var l = 0; l < blocks.childWidgets.length; l++) {\n minCount++;\n minCountCell = cell;\n minHeight += blocks.childWidgets[l].height;\n }\n }\n else {\n splitCountLine = this.getCountOrLineTable(blocks, lineToBeSplit, isSplit, maxSplitHeight, true, getHeight);\n minCount += splitCountLine.lineCount;\n minHeight += splitCountLine.lineCount;\n }\n }\n if (maxCount < minCount) {\n maxCount = minCount;\n // maxCountCell = minCountCell;\n }\n if (maxHeight < minHeight) {\n maxHeight = minHeight;\n maxCountCell = minCountCell;\n }\n minCount = 0;\n minHeight = 0;\n }\n if (!isSplit || isNested) {\n totalNoOflines = totalNoOflines + maxCount;\n totalHeight += maxHeight;\n }\n else {\n var countInCell = 0;\n for (var i_2 = 0; i_2 < maxCountCell.childWidgets.length; i_2++) {\n var blocks = maxCountCell.childWidgets[i_2];\n if (blocks instanceof ParagraphWidget) {\n for (var j = 0; j < blocks.childWidgets.length; j++) {\n maxSplitHeight += blocks.childWidgets[j].height;\n if (Math.round(lineToBeSplit) < Math.round(maxSplitHeight)) {\n line = blocks.childWidgets[j];\n skip = true;\n maxSplitHeight = 0;\n lineIndexInCell = countInCell;\n break;\n }\n else {\n countInCell++;\n }\n if (skip && isSplit) {\n break;\n }\n }\n }\n else {\n splitCountLine = this.getCountOrLineTable(blocks, lineToBeSplit, isSplit, maxSplitHeight, false, getHeight);\n if (isNullOrUndefined(splitCountLine.lineWidget)) {\n countInCell += splitCountLine.lineCount;\n // count = splitCountLine.lineCount;\n maxSplitHeight += blocks.height;\n }\n else {\n skip = true;\n maxSplitHeight = 0;\n line = splitCountLine.lineWidget;\n countInCell += splitCountLine.lineCount;\n lineIndexInCell = countInCell;\n break;\n }\n }\n if (skip && isSplit) {\n break;\n }\n }\n }\n maxCount = 0;\n if (skip && isSplit) {\n break;\n }\n }\n if (getHeight) {\n return { lineWidget: undefined, lineCount: totalHeight };\n }\n else if (!isSplit) {\n return { lineWidget: undefined, lineCount: totalNoOflines };\n }\n else if (isSplit && isNullOrUndefined(line) && isNested) {\n return { lineWidget: undefined, lineCount: totalNoOflines };\n }\n else if (isSplit && isNullOrUndefined(line) && !isNested) {\n return { lineWidget: undefined, lineCount: maxSplitHeight };\n }\n else {\n return { lineWidget: line, lineCount: lineIndexInCell };\n }\n };\n /**\n * @private\n */\n Layout.prototype.combineMultiColumn = function (section) {\n section = this.getBodyWidget(section, false);\n while (section && section.columnIndex !== 0) {\n var prevSection = section.previousRenderedWidget;\n if (prevSection.lastChild instanceof ParagraphWidget && prevSection.lastChild.isEndsWithColumnBreak) {\n break;\n }\n var isPreviousSplit = false;\n for (var i = 0; i < section.childWidgets.length; i++) {\n if (section.childWidgets[i] instanceof BlockWidget && !isNullOrUndefined(section.childWidgets[i].previousSplitWidget)\n && !isNullOrUndefined(section.childWidgets[i].previousSplitWidget.previousSplitWidget)\n && section.childWidgets[i].previousSplitWidget.bodyWidget.page !== section.childWidgets[i].previousSplitWidget.previousSplitWidget.bodyWidget.page) {\n isPreviousSplit = true;\n }\n if ((section.childWidgets[i] instanceof BlockWidget && !isNullOrUndefined(section.childWidgets[i].previousSplitWidget) && section.childWidgets[i].previousSplitWidget.bodyWidget.page === section.childWidgets[i].bodyWidget.page && !isPreviousSplit)) {\n section.childWidgets[i].combineWidget(this.viewer);\n if (prevSection.lastChild instanceof TableWidget) {\n this.updateCellHeightInCombinedTable(prevSection.lastChild);\n }\n i--;\n continue;\n }\n prevSection.childWidgets.push(section.childWidgets[i]);\n section.childWidgets[i].containerWidget = prevSection;\n section.childWidgets[i].containerWidget.page = prevSection.page;\n section.childWidgets.splice(0, 1);\n i--;\n }\n section = section.previousRenderedWidget;\n }\n this.documentHelper.removeEmptyPages();\n };\n Layout.prototype.updateCellHeightInCombinedTable = function (tableWidget) {\n var maxCellHeight = 0;\n var minCellHeight = 0;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n minCellHeight += cell.childWidgets[k].height;\n }\n if (minCellHeight > maxCellHeight) {\n maxCellHeight = minCellHeight;\n }\n minCellHeight = 0;\n for (var a = 0; a < row.childWidgets.length; a++) {\n row.childWidgets[a].height = maxCellHeight;\n }\n }\n maxCellHeight = 0;\n }\n };\n Layout.prototype.layoutHeaderFooter = function (section, viewer, page) {\n //Header layout\n var headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, true);\n if (headerFooterWidget) {\n var parentHeader = headerFooterWidget;\n if (isNullOrUndefined(headerFooterWidget.page)) {\n headerFooterWidget.page = page;\n headerFooterWidget.height = 0;\n this.clearBlockWidget(headerFooterWidget.childWidgets, true, true, true);\n viewer.updateHFClientArea(section.sectionFormat, true);\n this.layoutHeaderFooterItems(viewer, headerFooterWidget);\n }\n headerFooterWidget = parentHeader.clone();\n headerFooterWidget.parentHeaderFooter = parentHeader;\n this.clearBlockWidget(headerFooterWidget.childWidgets, true, true, true);\n var header = headerFooterWidget;\n header.page = page;\n header.height = 0;\n this.updateRevisionsToHeaderFooter(header, page);\n viewer.updateHFClientArea(section.sectionFormat, true);\n page.headerWidget = this.layoutHeaderFooterItems(viewer, header);\n //this.updateHeaderFooterToParent(header);\n //When the vertical position is related to margin, then it should be adjusted based on the layouted header height. Not default header height.\n if (section.sectionFormat.topMargin < page.boundingRectangle.bottom && page.headerWidget.floatingElements.length > 0 && page.headerWidget.floatingElements[0].textWrappingStyle !== \"Behind\") {\n page.headerWidget = this.shiftItemsForVerticalAlignment(header);\n }\n }\n //Footer Layout\n headerFooterWidget = viewer.getCurrentPageHeaderFooter(section, false);\n if (headerFooterWidget) {\n var parentHeader = headerFooterWidget;\n if (isNullOrUndefined(headerFooterWidget.page)) {\n headerFooterWidget.page = page;\n headerFooterWidget.height = 0;\n this.clearBlockWidget(headerFooterWidget.childWidgets, true, true, true);\n viewer.updateHFClientArea(section.sectionFormat, false);\n this.layoutHeaderFooterItems(viewer, headerFooterWidget);\n }\n headerFooterWidget = parentHeader.clone();\n headerFooterWidget.parentHeaderFooter = parentHeader;\n this.clearBlockWidget(headerFooterWidget.childWidgets, true, true, true);\n var footer = headerFooterWidget;\n footer.page = page;\n footer.height = 0;\n viewer.updateHFClientArea(section.sectionFormat, false);\n this.updateRevisionsToHeaderFooter(footer, page);\n page.footerWidget = this.layoutHeaderFooterItems(viewer, footer);\n }\n };\n Layout.prototype.shiftItemsForVerticalAlignment = function (headerWidget) {\n var floatingElements = headerWidget.floatingElements;\n for (var i = 0; i < floatingElements.length; i++) {\n var floatingItem = floatingElements[i];\n var verticalOrigin = floatingItem.verticalOrigin;\n var paragraph = floatingItem.paragraph;\n // When a owner paragraph is inside the table, we have to skip the vertical alignment of the floating entity.\n if (verticalOrigin === 'Margin' && !paragraph.isInsideTable) {\n var yPosition = floatingItem.verticalPosition;\n if (yPosition != 0) {\n yPosition += this.viewer.clientActiveArea.y;\n var diff = yPosition - floatingItem.y;\n floatingItem.y = yPosition;\n if (floatingItem instanceof ShapeElementBox) {\n for (var j = 0; j < floatingItem.textFrame.childWidgets.length; j++) {\n var block = floatingItem.textFrame.childWidgets[j];\n if (block instanceof ParagraphWidget) {\n block.y = block.y + diff;\n }\n }\n }\n }\n }\n }\n return headerWidget;\n };\n Layout.prototype.updateHeaderFooterToParent = function (node) {\n var sectionIndex = node.page.sectionIndex;\n var typeIndex = this.viewer.getHeaderFooter(node.headerFooterType);\n var clone = node.clone();\n this.documentHelper.headersFooters[sectionIndex][typeIndex] = clone;\n for (var j = 0; j < clone.childWidgets.length; j++) {\n var child = clone.childWidgets[j];\n if (child instanceof TableWidget) {\n this.clearTableWidget(child, false, true);\n }\n }\n return clone;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Layout.prototype.updateRevisionsToHeaderFooter = function (clone, page) {\n var childWidge = clone.childWidgets;\n if (clone instanceof HeaderFooterWidget && childWidge.length > 0) {\n for (var i = 0; i < childWidge.length; i++) {\n if (childWidge[i].childWidgets.length > 0) {\n var lineWidge = childWidge[i].childWidgets;\n for (var j = 0; j < lineWidge.length; j++) {\n var childrens = lineWidge[j].children;\n if (childrens) {\n for (var k = 0; k < childrens.length; k++) {\n if (childrens[k].removedIds.length > 0) {\n var removeId = childrens[k].removedIds;\n for (var l = 0; l < removeId.length; l++) {\n var revision = this.documentHelper.revisionsInternal.get(removeId[l]);\n childrens[k].revisions[l] = revision;\n this.updateRevisionRange(revision, page);\n }\n }\n }\n }\n }\n }\n }\n }\n };\n Layout.prototype.updateRevisionRange = function (revision, page) {\n for (var i = 0; i < revision.range.length; i++) {\n var inline = revision.range[i];\n if (!inline.line.paragraph.bodyWidget.page) {\n inline.line.paragraph.bodyWidget.page = page;\n }\n }\n };\n Layout.prototype.linkFieldInHeaderFooter = function (widget) {\n var firstChild = widget.firstChild;\n do {\n if (firstChild instanceof ParagraphWidget) {\n this.linkFieldInParagraph(firstChild);\n }\n else {\n this.linkFieldInTable(firstChild);\n }\n /* eslint-disable no-cond-assign */\n } while (firstChild = firstChild.nextWidget);\n };\n /**\n * @private\n */\n Layout.prototype.linkFieldInParagraph = function (widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var line = widget.childWidgets[j];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FieldElementBox && (element.fieldType !== 0 || (element.fieldType === 0 &&\n this.documentHelper.fields.indexOf(element) === -1))) {\n element.linkFieldCharacter(this.documentHelper);\n }\n if (element instanceof FieldTextElementBox &&\n !isNullOrUndefined(element.previousElement) &&\n element.previousElement instanceof FieldElementBox &&\n element.fieldBegin !== element.previousElement.fieldBegin) {\n element.fieldBegin = element.previousElement.fieldBegin;\n }\n if (element instanceof ShapeElementBox) {\n var firstBlock = element.textFrame.firstChild;\n if (firstBlock) {\n do {\n if (firstBlock instanceof ParagraphWidget) {\n this.linkFieldInParagraph(firstBlock);\n }\n else {\n this.linkFieldInTable(firstBlock);\n }\n /* eslint-disable no-cond-assign */\n } while (firstBlock = firstBlock.nextWidget);\n }\n }\n else if (element instanceof CommentCharacterElementBox) {\n var comment = this.getCommentById(this.documentHelper.comments, element.commentId);\n if (!isNullOrUndefined(comment)) {\n if (element.commentType === 0) {\n comment.commentStart = element;\n }\n else {\n comment.commentEnd = element;\n }\n element.comment = comment;\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.getCommentById = function (commentsCollection, commentId) {\n for (var i = 0; i < commentsCollection.length; i++) {\n var comment = commentsCollection[i];\n if (comment.commentId === commentId) {\n return comment;\n }\n }\n return undefined;\n };\n Layout.prototype.linkFieldInTable = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var row = widget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (block instanceof ParagraphWidget) {\n this.linkFieldInParagraph(block);\n }\n else {\n this.linkFieldInTable(block);\n }\n }\n }\n }\n };\n Layout.prototype.layoutHeaderFooterItems = function (viewer, widget) {\n this.viewer.updateClientAreaLocation(widget, viewer.clientActiveArea);\n if (widget.childWidgets.length === 0) {\n var pargaraph = new ParagraphWidget();\n var line = new LineWidget(pargaraph);\n pargaraph.childWidgets.push(line);\n widget.childWidgets.push(pargaraph);\n pargaraph.containerWidget = widget;\n }\n this.linkFieldInHeaderFooter(widget);\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[i];\n if (block instanceof TableWidget && block.tableFormat.preferredWidthType === 'Auto'\n && !block.tableFormat.allowAutoFit && !block.isGridUpdated) {\n block.calculateGrid();\n }\n viewer.updateClientAreaForBlock(block, true);\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n var type = widget.headerFooterType;\n if (type === 'OddFooter' || type === 'EvenFooter' || type === 'FirstPageFooter') {\n this.shiftChildLocation(viewer.clientArea.y - viewer.clientActiveArea.y, widget);\n }\n return widget;\n };\n Layout.prototype.shiftChildLocation = function (shiftTop, bodyWidget) {\n var widgetTop = bodyWidget.y + shiftTop;\n var footerMaxHeight = bodyWidget.page.boundingRectangle.height - (bodyWidget.page.boundingRectangle.height / 100) * 40;\n widgetTop = Math.max(widgetTop, footerMaxHeight);\n shiftTop = widgetTop - bodyWidget.y;\n var childTop = bodyWidget.y = widgetTop;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var childWidget = bodyWidget.childWidgets[i];\n if (childWidget instanceof ParagraphWidget) {\n childWidget.x = childWidget.x;\n childWidget.y = i === 0 ? childWidget.y + shiftTop : childTop;\n childTop += childWidget.height;\n for (var j = 0; j < childWidget.childWidgets.length; j++) {\n var widget = childWidget.childWidgets[j];\n for (var k = 0; k < widget.children.length; k++) {\n var element = widget.children[k];\n if (element instanceof ShapeBase && element.textWrappingStyle !== \"Inline\") {\n if (element.verticalOrigin === \"Paragraph\" || element.verticalOrigin === \"Line\") {\n element.y = childWidget.y + element.verticalPosition;\n }\n else {\n var position = this.getFloatingItemPoints(element);\n element.y = position.y;\n }\n if (element instanceof ShapeElementBox) {\n var topMargin = element.textFrame.marginTop;\n this.updateChildLocationForCellOrShape(element.y + topMargin, element);\n }\n }\n }\n }\n }\n else {\n this.shiftChildLocationForTableWidget(childWidget, shiftTop);\n childTop += childWidget.height;\n }\n }\n };\n Layout.prototype.shiftChildLocationForTableWidget = function (tableWidget, shiftTop) {\n tableWidget.y = tableWidget.y + shiftTop;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var childWidget = tableWidget.childWidgets[i];\n if (childWidget instanceof TableRowWidget) {\n this.shiftChildLocationForTableRowWidget(childWidget, shiftTop);\n }\n }\n };\n Layout.prototype.shiftChildLocationForTableRowWidget = function (rowWidget, shiftTop) {\n rowWidget.y = rowWidget.y + shiftTop;\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n this.shiftChildLocationForTableCellWidget(rowWidget.childWidgets[i], shiftTop);\n }\n };\n Layout.prototype.shiftChildLocationForTableCellWidget = function (cellWidget, shiftTop) {\n cellWidget.y = cellWidget.y + shiftTop;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n cellWidget.childWidgets[i].x = cellWidget.childWidgets[i].x;\n cellWidget.childWidgets[i].y = cellWidget.childWidgets[i].y + shiftTop;\n }\n else {\n this.shiftChildLocationForTableWidget(cellWidget.childWidgets[i], shiftTop);\n }\n }\n };\n Layout.prototype.layoutBlock = function (block, index, isUpdatedList) {\n var nextBlock;\n if (block instanceof ParagraphWidget) {\n if (this.isInitialLoad || (!this.isRelayout && block.paragraphFormat.bidi && this.isDocumentContainsRtl)) {\n block.splitTextRangeByScriptType(0);\n block.splitLtrAndRtlText(0);\n block.combineconsecutiveRTL(0);\n }\n nextBlock = this.layoutParagraph(block, index, isUpdatedList);\n var nextBlockToLayout = this.checkAndRelayoutPreviousOverlappingBlock(block);\n if (nextBlockToLayout) {\n nextBlock = nextBlockToLayout;\n }\n // this.updateLinearIndex(block);\n // if (block != nextBlock) {\n // this.updateLinearIndex(nextBlock);\n // }\n }\n else {\n nextBlock = this.layoutTable(block, index);\n this.checkAndRelayoutPreviousOverlappingBlock(block);\n this.updateTableYPositionBasedonTextWrap(nextBlock);\n }\n return nextBlock.nextRenderedWidget;\n };\n // /**\n // * @private\n // */\n // private updateLinearIndex(block: BlockWidget, skipParaMark?: boolean): void {\n // if (!isNullOrUndefined(block) && block instanceof ParagraphWidget) {\n // let splittedWidgets = block.getSplitWidgets();\n // (splittedWidgets[0] as ParagraphWidget).length = block.getTotalLength();\n // }\n // }\n Layout.prototype.updateTableYPositionBasedonTextWrap = function (table) {\n var _this = this;\n if (!isNullOrUndefined(table.bodyWidget) && !(table.containerWidget instanceof TextFrame)) {\n var tableY_1 = table.y;\n var tableRect_1 = new Rect(table.x, table.y, table.width, table.height);\n table.bodyWidget.floatingElements.forEach(function (shape) {\n if (shape instanceof ShapeElementBox && !shape.paragraph.isInsideTable) {\n var shapeRect = new Rect(shape.x, shape.y, shape.width, shape.height);\n var considerShape = (shape.textWrappingStyle === 'TopAndBottom' || shape.textWrappingStyle === 'Square');\n if (considerShape && tableRect_1.isIntersecting(shapeRect)) {\n table.y = shape.y + shape.height + shape.distanceBottom;\n _this.updateChildLocationForTable(table.y, table);\n var height = table.y - tableY_1;\n _this.viewer.cutFromTop(_this.viewer.clientActiveArea.y + height);\n }\n }\n });\n }\n };\n Layout.prototype.checkAndRelayoutPreviousOverlappingBlock = function (block) {\n if (!(block.containerWidget instanceof TextFrame) && !this.isRelayoutOverlap) {\n var preivousBlock = block.previousWidget;\n if (block instanceof ParagraphWidget) {\n if (block.floatingElements.length > 0) {\n var height = 0;\n for (var i = 0; i < block.floatingElements.length; i++) {\n var element = block.floatingElements[i];\n if (element.textWrappingStyle === 'InFrontOfText' || element.textWrappingStyle === 'Behind' || element.textWrappingStyle === 'Inline') {\n continue;\n }\n var shapeRect = new Rect(element.x, element.y, element.width, element.height);\n while (preivousBlock) {\n // if height exceeds the client area height. then the paragraph belongs to previous page.\n // So, we need to skip relayouting overlapping widgets.\n // Adding this condition for row splitting to multiple page scenario.\n if (block.isInsideTable && height > this.viewer.clientArea.height) {\n this.startOverlapWidget = undefined;\n this.endOverlapWidget = undefined;\n break;\n }\n if (preivousBlock instanceof ParagraphWidget) {\n var paraRect = new Rect(preivousBlock.x, preivousBlock.y, preivousBlock.width, preivousBlock.height);\n if (shapeRect.isIntersecting(paraRect) &&\n this.startOverlapWidget !== preivousBlock) {\n this.startOverlapWidget = preivousBlock;\n this.endOverlapWidget = block;\n }\n }\n height += preivousBlock.height;\n preivousBlock = preivousBlock.previousWidget;\n }\n preivousBlock = block.previousWidget;\n }\n }\n else {\n var widget = block.getSplitWidgets();\n if (widget) {\n return widget[widget.length - 1];\n }\n }\n }\n else {\n var table = block;\n if (!table.wrapTextAround) {\n return table;\n }\n var tableRect = new Rect(table.x, table.y, table.getTableCellWidth(), table.height);\n while (preivousBlock) {\n if (preivousBlock instanceof ParagraphWidget) {\n var blockRect = new Rect(preivousBlock.x, preivousBlock.y, preivousBlock.width, preivousBlock.height);\n if (tableRect.isIntersecting(blockRect) &&\n this.startOverlapWidget !== preivousBlock) {\n this.startOverlapWidget = preivousBlock;\n this.endOverlapWidget = block;\n }\n }\n preivousBlock = preivousBlock.previousWidget;\n }\n preivousBlock = block.previousWidget;\n }\n if (this.startOverlapWidget) {\n this.isRelayoutOverlap = true;\n this.skipRelayoutOverlap = true;\n this.layoutStartEndBlocks(this.startOverlapWidget, block);\n this.isRelayoutOverlap = false;\n this.skipRelayoutOverlap = false;\n }\n this.startOverlapWidget = undefined;\n this.endOverlapWidget = undefined;\n }\n return block;\n };\n Layout.prototype.addParagraphWidget = function (area, paragraphWidget) {\n // const ownerParaWidget: ParagraphWidget = undefined;\n if (paragraphWidget.isEmpty() && !isNullOrUndefined(paragraphWidget.paragraphFormat) &&\n (paragraphWidget.paragraphFormat.textAlignment === 'Center' || paragraphWidget.paragraphFormat.textAlignment === 'Right'\n || (paragraphWidget.paragraphFormat.textAlignment === 'Justify' && paragraphWidget.paragraphFormat.bidi))\n && paragraphWidget.paragraphFormat.listFormat.listId === -1) {\n this.updateXPositionForEmptyParagraph(area, paragraphWidget);\n paragraphWidget.y = area.y;\n }\n else {\n if (this.viewer.clientActiveArea.width <= 0 && this.viewer instanceof WebLayoutViewer) {\n paragraphWidget.x = this.previousPara;\n }\n else {\n paragraphWidget.x = area.x;\n this.previousPara = paragraphWidget.x;\n }\n paragraphWidget.width = area.width;\n paragraphWidget.y = area.y;\n paragraphWidget.clientX = undefined;\n if (paragraphWidget.hasOwnProperty('absoluteXPosition')) {\n delete paragraphWidget['absoluteXPosition'];\n }\n }\n return paragraphWidget;\n };\n // update the x position for bidi empty paragraph.\n Layout.prototype.updateXPositionForEmptyParagraph = function (area, paragraph) {\n if (paragraph.isEmpty() && !isNullOrUndefined(paragraph.paragraphFormat)) {\n // const top: number = 0;\n // const bottom: number = 0;\n var width = this.documentHelper.textHelper.getParagraphMarkWidth(paragraph.characterFormat);\n paragraph.clientX = area.x;\n var left = area.x;\n paragraph['absoluteXPosition'] = { 'width': area.width, 'x': area.x };\n if (paragraph.paragraphFormat.textAlignment === 'Center') {\n left += (area.width - width) / 2;\n }\n else {\n left += area.width - width;\n }\n paragraph.width = width;\n paragraph.x = left;\n }\n };\n Layout.prototype.addLineWidget = function (paragraphWidget) {\n var line = undefined;\n line = new LineWidget(paragraphWidget);\n line.width = paragraphWidget.width;\n paragraphWidget.childWidgets.push(line);\n line.paragraph = paragraphWidget;\n return line;\n };\n Layout.prototype.isFirstElementWithPageBreak = function (paragraphWidget) {\n var isPageBreak = false;\n if (this.viewer instanceof PageLayoutViewer) {\n var lineWidget = paragraphWidget.childWidgets[0];\n if (lineWidget) {\n var element = lineWidget.children[0];\n while (element) {\n if (element instanceof BookmarkElementBox && element.name.indexOf('_') >= 0) {\n element = element.nextElement;\n continue;\n }\n if (element instanceof TextElementBox && (element.text === '\\f' || element.text === String.fromCharCode(14))) {\n isPageBreak = true;\n }\n break;\n }\n }\n }\n return isPageBreak;\n };\n /**\n * Layouts specified paragraph.\n *\n * @private\n * @param footnote\n */\n Layout.prototype.layoutfootNote = function (footnote) {\n if (this.documentHelper.owner.layoutType === 'Pages') {\n var clientActiveArea = this.viewer.clientActiveArea.clone();\n var clientArea = this.viewer.clientArea.clone();\n if (footnote.footNoteType === 'Footnote' && footnote.sectionFormat.columns.length > 1 && !this.isInitialLoad) {\n this.updateColumnIndex(footnote.bodyWidgets[0], false);\n this.layoutMultiColumnBody(footnote.bodyWidgets[0], true);\n }\n if (footnote.footNoteType === 'Endnote' && footnote.bodyWidgets[0].sectionFormat.numberOfColumns > 1) {\n if (!this.isInitialLoad) {\n this.updateColumnIndex(footnote.bodyWidgets[0], false);\n }\n this.layoutMultiColumnBody(footnote.bodyWidgets[0], true);\n this.viewer.clientActiveArea = clientActiveArea;\n }\n var clientWidth = 0;\n if (footnote.sectionFormat.columns.length > 1 && footnote.footNoteType === 'Footnote') {\n this.viewer.updateClientArea(footnote, footnote.page);\n clientWidth = this.viewer.clientActiveArea.width;\n }\n if (footnote.footNoteType === 'Footnote') {\n this.viewer.updateFootnoteClientArea(footnote.sectionFormat, footnote);\n if (footnote.sectionFormat.columns.length > 1) {\n this.viewer.clientActiveArea.width = clientWidth;\n this.viewer.clientArea.width = clientWidth;\n }\n }\n footnote.height = 0;\n var block = void 0;\n var height = 0;\n this.isRelayoutFootnote = false;\n var index = 0;\n // this.isfoot = true;\n /* eslint-disable-next-line max-len */\n if (this.viewer instanceof PageLayoutViewer && footnote.bodyWidgets.length > 0 && ((footnote.footNoteType === 'Footnote' && footnote.sectionFormat.columns.length > 1) || (footnote.footNoteType === 'Endnote' && footnote.bodyWidgets[0].sectionFormat.columns.length > 1))) {\n if (this.isLayoutWhole) {\n this.updateColumnIndex(footnote.bodyWidgets[0], false);\n }\n this.splitFootNoteWidgetBasedOnColumn(footnote.bodyWidgets[0]);\n }\n var footBody = footnote.bodyWidgets[0];\n var clientX = 0;\n for (var i = 0; i < footnote.bodyWidgets.length; i++) {\n if (footnote.bodyWidgets[i].columnIndex !== footBody.columnIndex && ((footnote.footNoteType === 'Footnote' && footnote.sectionFormat.columns.length > 1) || (footnote.footNoteType === 'Endnote' && footnote.bodyWidgets[i].sectionFormat.columns.length > 1))) {\n this.viewer.updateClientArea(footnote.bodyWidgets[i], footnote.bodyWidgets[i].page);\n clientWidth = this.viewer.clientActiveArea.width;\n clientX = this.viewer.clientActiveArea.x;\n if (footnote.footNoteType === 'Footnote') {\n this.viewer.updateFootnoteClientArea(footnote.sectionFormat, footnote);\n }\n this.viewer.clientActiveArea.x = clientX;\n this.viewer.clientArea.x = clientX;\n this.viewer.clientActiveArea.width = clientWidth;\n this.viewer.clientArea.width = clientWidth;\n this.viewer.cutFromTop(footnote.y + height);\n }\n if (i === 0) {\n var newPara = new ParagraphWidget();\n newPara.characterFormat = new WCharacterFormat();\n newPara.paragraphFormat = new WParagraphFormat();\n newPara.index = 0;\n var lineWidget = new LineWidget(newPara);\n newPara.childWidgets.push(lineWidget);\n height = this.documentHelper.textHelper.getParagraphMarkSize(newPara.characterFormat).Height;\n footnote.height += height;\n footnote.y = this.viewer.clientActiveArea.y;\n if (footnote.footNoteType === 'Endnote') {\n this.viewer.updateClientArea(footnote.bodyWidgets[i], footnote.bodyWidgets[i].page, true);\n }\n this.viewer.cutFromTop(footnote.y + height);\n footnote.margin = new Margin(0, height, 0, 0);\n }\n for (var j = 0; j < footnote.bodyWidgets[i].childWidgets.length; j++) {\n block = footnote.bodyWidgets[i].childWidgets[j];\n block.index = index;\n index++;\n block.containerWidget = footnote.bodyWidgets[i];\n block.containerWidget.page = footnote.page;\n block.containerWidget.containerWidget = footnote;\n // paragraph.index = i > 1 ? i - 1 : 0;\n if (footnote.footNoteType === 'Endnote') {\n var paragraph = this.documentHelper.getFirstParagraphBlock(block);\n var height_2 = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat).Height;\n if (this.viewer.clientActiveArea.height < height_2) {\n var endnote = this.moveEndnoteToNextPage(footnote, footnote.bodyWidgets[i]);\n this.layoutfootNote(endnote);\n return endnote;\n }\n }\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true, true);\n this.isRelayoutFootnote = true;\n if (footnote.footNoteType === 'Footnote') {\n this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n }\n this.layoutBlock(block, 0);\n if (footnote.bodyWidgets[i].columnIndex === footBody.columnIndex) {\n footnote.height += block.height;\n }\n this.viewer.updateClientAreaForBlock(block, false);\n }\n footBody = footnote.bodyWidgets[i];\n }\n if (footnote.sectionFormat.columns.length > 1) {\n var footHeight = this.getFootNoteBodyHeight(footnote.bodyWidgets[0]);\n footnote.height = footHeight + height;\n }\n if (footnote.footNoteType === 'Footnote') {\n this.shiftChildWidgetInFootnote(footnote);\n }\n if (footnote.footNoteType === 'Footnote' && footnote.sectionFormat.columns.length > 1 && footnote.page.bodyWidgets[footnote.page.bodyWidgets.length - 1].sectionFormat.columns.length > 1) {\n var section = this.getBodyWidget(footnote.page.bodyWidgets[footnote.page.bodyWidgets.length - 1], true);\n var height_3 = this.getNextWidgetHeight(section);\n if (height_3 > footnote.y) {\n this.footnoteHeight = footnote.height;\n var isLayoutWhole = this.isLayoutWhole;\n this.isLayoutWhole = false;\n this.layoutMultiColumnBody(section, true);\n this.isLayoutWhole = isLayoutWhole;\n }\n }\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientArea = clientArea;\n if (!this.islayoutFootnote) {\n if (this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height > footnote.y) {\n this.viewer.clientActiveArea.height -= footnote.height;\n var sub = (this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height - footnote.y);\n this.viewer.clientActiveArea.height -= sub;\n }\n }\n }\n this.footnoteHeight = 0;\n return footnote;\n };\n Layout.prototype.moveEndnoteToNextPage = function (endnote, bodyWidget) {\n var page = endnote.page;\n var pageIndex = page.index + 1;\n var newBodyWidget = this.createSplitBody(bodyWidget);\n var nextPage = this.viewer.createNewPage(newBodyWidget, pageIndex);\n this.viewer.updateClientArea(newBodyWidget, newBodyWidget.page);\n var currentIndex = endnote.bodyWidgets.indexOf(bodyWidget);\n var newEndnote = new FootNoteWidget();\n newEndnote.footNoteType = 'Endnote';\n newEndnote.page = nextPage;\n for (var i = currentIndex; i < endnote.bodyWidgets.length; i++) {\n var currentBodyWidget = endnote.bodyWidgets[i];\n endnote.bodyWidgets.splice(i, 1);\n newEndnote.bodyWidgets.push(currentBodyWidget);\n currentBodyWidget.containerWidget = newEndnote;\n currentBodyWidget.page = nextPage;\n i--;\n }\n nextPage.endnoteWidget = newEndnote;\n return newEndnote;\n };\n Layout.prototype.getFootNoteBodyHeight = function (section) {\n var height = 0;\n while (section) {\n if (section.columnIndex !== 0) {\n break;\n }\n for (var i = 0; i < section.childWidgets.length; i++) {\n height += section.childWidgets[i].height;\n }\n section = section.nextRenderedWidget;\n }\n return height;\n };\n Layout.prototype.splitFootNoteWidgetBasedOnColumn = function (section) {\n var lineCountInfo = this.getCountOrLine(section, undefined, undefined, true);\n var totalHeight = lineCountInfo.lineCount;\n var lineToBeSplit = Math.round(totalHeight / section.sectionFormat.numberOfColumns);\n while (section) {\n var lineCountInfo_2 = this.getCountOrLine(section, lineToBeSplit, true, false);\n var clientActiveArea = this.viewer.clientActiveArea.clone();\n var clientArea = this.viewer.clientArea.clone();\n if (lineCountInfo_2.lineWidget.paragraph.indexInOwner === 0 && lineCountInfo_2.lineWidget.indexInOwner === 0) {\n this.updateColumnIndex(lineCountInfo_2.lineWidget.paragraph.bodyWidget, true);\n }\n else {\n this.splitParagraph(lineCountInfo_2.lineWidget.paragraph, lineCountInfo_2.lineWidget.indexInOwner, undefined);\n var nextBody = this.moveBlocksToNextPage(lineCountInfo_2.lineWidget.paragraph.previousRenderedWidget);\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientArea = clientArea;\n if (!isNullOrUndefined(nextBody.nextRenderedWidget)) {\n this.updateColumnIndex(nextBody.nextRenderedWidget, true);\n }\n }\n if (lineCountInfo_2.lineWidget.paragraph.bodyWidget.columnIndex === lineCountInfo_2.lineWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns - 1) {\n break;\n }\n section = section.nextRenderedWidget;\n }\n };\n Layout.prototype.updateColumnIndex = function (section, increase) {\n while (section) {\n if (increase) {\n section.columnIndex++;\n }\n else {\n section.columnIndex = 0;\n }\n section = section.nextRenderedWidget;\n }\n };\n Layout.prototype.shiftChildWidgetInFootnote = function (footnote) {\n var page = footnote.page;\n var yPosition = footnote.y - footnote.height;\n if (page.bodyWidgets[0].childWidgets.length === 1 && page.bodyWidgets[0].firstChild) {\n var startY = page.bodyWidgets[0].firstChild.y;\n var bodyWidgetHeight = this.getBodyWidgetHeight(page.bodyWidgets[0]);\n if (yPosition < startY + bodyWidgetHeight) {\n yPosition = startY + bodyWidgetHeight;\n }\n }\n footnote.y = yPosition;\n yPosition += footnote.margin.top;\n var multiColumnY = yPosition;\n var columnBody = footnote.bodyWidgets[0];\n for (var i = 0; i < footnote.bodyWidgets.length; i++) {\n if (footnote.bodyWidgets[i].columnIndex !== columnBody.columnIndex) {\n yPosition = multiColumnY;\n }\n columnBody = footnote.bodyWidgets[i];\n for (var j = 0; j < footnote.bodyWidgets[i].childWidgets.length; j++) {\n var childWidget = footnote.bodyWidgets[i].childWidgets[j];\n if (childWidget instanceof ParagraphWidget) {\n childWidget.y = yPosition;\n yPosition += childWidget.height;\n }\n else {\n this.shiftChildLocationForTableWidget(childWidget, yPosition - childWidget.y);\n yPosition += childWidget.height;\n }\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.getBodyWidgetHeight = function (bodyWidget) {\n var height = 0;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n height += bodyWidget.childWidgets[i].height;\n }\n return height;\n };\n // check whether the paragraph has the field separator or field end of the field begin.\n Layout.prototype.checkParaHasField = function (paragraph) {\n var hasField = false;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var element = lineWidget.children[j];\n if (element instanceof FieldElementBox && (element.fieldType === 2 || element.fieldType === 1)) {\n if (this.documentHelper.fieldStacks.length > 0 && element.fieldBegin === this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1]) {\n hasField = true;\n break;\n }\n }\n }\n }\n return hasField;\n };\n // check whether the table has the field separator or field end of the field begin.\n Layout.prototype.checkTableHasField = function (table) {\n var hasField = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (block instanceof ParagraphWidget) {\n hasField = this.checkParaHasField(block);\n }\n else {\n hasField = this.checkTableHasField(block);\n }\n if (hasField) {\n break;\n }\n }\n }\n }\n return hasField;\n };\n Layout.prototype.layoutParagraph = function (paragraph, lineIndex, isUpdatedList) {\n if (this.isFieldCode && !this.checkParaHasField(paragraph)) {\n paragraph.isFieldCodeBlock = true;\n return paragraph;\n }\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n var isListLayout = true;\n var isFirstElmIsparagraph = this.isFirstElementWithPageBreak(paragraph);\n if (!isFirstElmIsparagraph) {\n this.layoutListItems(paragraph, isUpdatedList);\n isListLayout = false;\n }\n if (paragraph.isEmpty()) {\n this.layoutEmptyLineWidget(paragraph, true);\n }\n else {\n var line = lineIndex < paragraph.childWidgets.length ?\n paragraph.childWidgets[lineIndex] : undefined;\n if (!this.isRelayoutOverlap && !(paragraph.containerWidget instanceof TextFrame)) {\n this.layoutFloatElements(paragraph);\n }\n while (line instanceof LineWidget) {\n if (paragraph !== line.paragraph && line.indexInOwner === 0 && isListLayout) {\n if (line.previousLine.isEndsWithColumnBreak) {\n this.viewer.updateClientAreaForBlock(paragraph, true);\n this.layoutListItems(line.paragraph);\n this.viewer.updateClientAreaForBlock(paragraph, false);\n }\n else {\n this.layoutListItems(line.paragraph);\n }\n }\n if (line.isFirstLine() && isNullOrUndefined(this.fieldBegin)) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n }\n line.marginTop = 0;\n //let bodyIndex: number = line.paragraph.bodyWidget.indexInOwner;\n // if (!this.isInitialLoad && !this.isBidiReLayout && this.isContainsRtl(line)) {\n // this.reArrangeElementsForRtl(line, paragraph.paragraphFormat.bidi);\n // }\n line = this.layoutLine(line, 0);\n // if (!line.paragraph.isInsideTable && bodyIndex !== line.paragraph.containerWidget.indexInOwner) {\n // line = undefined;\n // }\n // else {\n paragraph = line.paragraph;\n line = line.nextLine;\n // }\n }\n }\n this.updateWidgetToPage(this.viewer, paragraph);\n paragraph.isLayouted = true;\n // this.updateLinearIndex(paragraph);\n paragraph.isFieldCodeBlock = false;\n return paragraph;\n };\n Layout.prototype.clearLineMeasures = function () {\n this.maxBaseline = 0;\n this.maxTextBaseline = 0;\n this.maxTextHeight = 0;\n };\n Layout.prototype.layoutFloatElements = function (paragraph) {\n var _this = this;\n paragraph.floatingElements.forEach(function (shape) {\n if (shape instanceof ShapeBase && shape.textWrappingStyle !== 'Inline') {\n if (!_this.isRelayoutOverlap) {\n _this.layoutShape(shape);\n }\n }\n });\n };\n Layout.prototype.layoutShape = function (element) {\n if (element instanceof ShapeElementBox && element.isHorizontalRule) {\n return;\n }\n if (element.textWrappingStyle !== 'Inline') {\n var position = this.getFloatingItemPoints(element);\n element.x = position.x;\n element.y = position.y;\n if (!element.paragraph.isInsideTable && element.paragraph.indexInOwner !== 0 && element.verticalPosition >= 0 && Math.round(element.paragraph.y) >= Math.round(element.y) && this.viewer.clientArea.bottom <= element.y + element.height && (element.verticalOrigin == \"Line\" || element.verticalOrigin == \"Paragraph\") && element.textWrappingStyle !== \"InFrontOfText\" && element.textWrappingStyle !== \"Behind\") {\n this.moveToNextPage(this.viewer, element.line);\n this.updateShapeBaseLocation(element.line.paragraph);\n }\n var bodyWidget = element.paragraph.bodyWidget;\n if (bodyWidget.floatingElements.indexOf(element) === -1) {\n bodyWidget.floatingElements.push(element);\n /* eslint:disable */\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n }\n if (element.paragraph.floatingElements.indexOf(element) === -1) {\n element.paragraph.floatingElements.push(element);\n }\n }\n else {\n if (element.width === 0 && element.widthScale !== 0) {\n var containerWidth = HelperMethods.convertPointToPixel(element.line.paragraph.getContainerWidth());\n element.width = (containerWidth / 100) * element.widthScale;\n }\n }\n var clientArea = this.viewer.clientArea;\n var clientActiveArea = this.viewer.clientActiveArea;\n if (element instanceof ShapeElementBox) {\n var blocks = element.textFrame.childWidgets;\n this.viewer.updateClientAreaForTextBoxShape(element, true);\n for (var i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n }\n this.layoutBlock(block, 0);\n this.viewer.updateClientAreaForBlock(block, false);\n }\n }\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientArea = clientArea;\n };\n Layout.prototype.moveElementFromNextLine = function (line) {\n var nextLine = line.nextLine;\n if (nextLine && !line.paragraph.bodyWidget.sectionFormat.equalWidth && line.paragraph.bodyWidget.columnIndex !== nextLine.paragraph.bodyWidget.columnIndex) {\n nextLine = undefined;\n }\n while (nextLine instanceof LineWidget) {\n if (nextLine.children.length > 0) {\n var element = nextLine.children.splice(0, 1)[0];\n line.children.push(element);\n element.line = line;\n break;\n }\n else {\n if (nextLine.paragraph.childWidgets.length === 1) {\n nextLine.paragraph.destroy();\n }\n else {\n nextLine.paragraph.childWidgets.splice(nextLine.paragraph.childWidgets.indexOf(nextLine), 1);\n }\n nextLine = line.nextLine;\n }\n }\n };\n Layout.prototype.layoutLine = function (line, count) {\n var paragraph = line.paragraph;\n if (line.children.length === 0) {\n this.moveElementFromNextLine(line);\n }\n var element = line.children[count];\n var isNotEmptyField = true;\n if (element instanceof FieldElementBox && line.children[line.children.length - 1] instanceof FieldElementBox) {\n isNotEmptyField = false;\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i].fieldType == 2 && line.children[i].nextElement != undefined && !(line.children[i].nextElement instanceof FieldElementBox)) {\n isNotEmptyField = true;\n break;\n }\n }\n }\n this.clearLineMeasures();\n line.marginTop = 0;\n var bodyIndex = paragraph.bodyWidget.indexInOwner;\n var lineIndex = line.indexInOwner;\n while (element instanceof ElementBox) {\n element.padding.left = 0;\n if (!isNotEmptyField) {\n this.layoutElement(element, paragraph, true);\n isNotEmptyField = true;\n }\n else {\n this.layoutElement(element, paragraph);\n }\n line = element.line;\n if (element instanceof TextElementBox) {\n var textElement = element;\n if (!isNullOrUndefined(textElement.errorCollection) && textElement.errorCollection.length > 0) {\n textElement.ischangeDetected = true;\n }\n }\n if (!this.isRTLLayout) {\n var lineIndex_1 = paragraph.childWidgets.indexOf(element.line);\n if (lineIndex_1 > 0 && this.hasFloatingElement) {\n this.hasFloatingElement = false;\n if (paragraph.bodyWidget.floatingElements.length > 0 && element instanceof TextElementBox && !(paragraph.containerWidget instanceof TableCellWidget)) {\n element = paragraph.childWidgets[lineIndex_1].children[0];\n }\n }\n else {\n this.hasFloatingElement = false;\n if (this.is2013Justification && !isNullOrUndefined(this.nextElementToLayout) && !(!isNullOrUndefined(element.paragraph.containerWidget.containerShape) && element.paragraph.containerWidget.containerShape === this.nextElementToLayout)) {\n element = this.nextElementToLayout;\n }\n else {\n // if (!line.paragraph.isInsideTable && bodyIndex !== line.paragraph.containerWidget.indexInOwner && !isNullOrUndefined(element.nextElement)) {\n // if (element.nextElement.line.children.indexOf(element.nextElement) !== element.nextElement.line.children.length - 1) {\n // element = undefined;\n // }\n // }\n // if (!isNullOrUndefined(element)) {\n element = element.nextElement;\n // }\n if (element instanceof TextElementBox && element.text.indexOf(\" \") == 0 && element.text.length > 2) {\n if (isNullOrUndefined(element.nextElement) && element.text.trim().length > 0) {\n element.text = element.text.substring(1, element.text.length);\n element.isWidthUpdated = false;\n var elementIndex = element.line.children.indexOf(element);\n element.line.children.splice(elementIndex, 1);\n var textElement = new TextElementBox();\n textElement.text = \" \";\n textElement.line = element.line;\n textElement.characterFormat.copyFormat(element.characterFormat);\n // Copy revisions\n if (element.revisions.length > 0) {\n for (var m = 0; m < element.revisions.length; m++) {\n var revision = element.revisions[m];\n textElement.revisions.push(revision);\n var rangeIndex = revision.range.indexOf(element);\n if (rangeIndex < 0) {\n revision.range.push(textElement);\n }\n else {\n revision.range.splice(rangeIndex, 0, textElement);\n }\n }\n }\n element.line.children.splice(elementIndex, 0, textElement);\n element.line.children.splice(elementIndex + 1, 0, element);\n element = textElement;\n }\n }\n }\n this.nextElementToLayout = undefined;\n }\n }\n else {\n element = undefined;\n this.isRTLLayout = false;\n }\n }\n return line;\n };\n /* eslint-disable */\n Layout.prototype.layoutElement = function (element, paragraph, isEmptyField) {\n if ((element.isPageBreak && paragraph.isInHeaderFooter) || (element instanceof ShapeElementBox && element.isHorizontalRule)) {\n return;\n }\n var line = element.line;\n var text = '';\n var index = element.indexInOwner;\n if (this.viewer.owner.editorModule && this.viewer.owner.editorHistoryModule && this.viewer.owner.editorHistoryModule.isRedoing && !isNullOrUndefined(element.paragraph.containerWidget.footNoteReference) && this.viewer.owner.enableTrackChanges && element.removedIds.length > 0) {\n this.viewer.owner.editorModule.constructRevisionFromID(element, true);\n }\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n if (this.documentHelper.fields.indexOf(element) === -1) {\n this.documentHelper.fields.push(element);\n }\n if (!isNullOrUndefined(element.formFieldData) &&\n this.documentHelper.formFields.indexOf(element) === -1 && !this.isInsertFormField) {\n this.documentHelper.formFields.push(element);\n }\n }\n this.layoutFieldCharacters(element);\n if (element.line.isLastLine() && isNullOrUndefined(element.nextNode) && !this.isFieldCode) {\n this.moveToNextLine(line);\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n if (element.line.isLastLine() && isNullOrUndefined(element.nextNode) && !this.isFieldCode) {\n if (element.fieldType !== 2 && isNullOrUndefined(element.fieldSeparator)) {\n this.layoutEmptyLineWidget(paragraph, false, element.line);\n }\n this.moveToNextLine(line);\n }\n }\n else if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && !isNullOrUndefined(line.nextLine) &&\n this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n else if (isEmptyField) {\n var textHelper = this.documentHelper.textHelper.getHeight(paragraph.characterFormat);\n element.height = textHelper.Height;\n }\n return;\n }\n if (element instanceof ListTextElementBox || this.isFieldCode || element instanceof BookmarkElementBox ||\n element instanceof EditRangeEndElementBox || element instanceof EditRangeStartElementBox\n || element instanceof ContentControl ||\n (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n if (element instanceof BookmarkElementBox) {\n if (element.bookmarkType === 0 && !this.documentHelper.bookmarks.containsKey(element.name)) {\n this.documentHelper.bookmarks.add(element.name, element);\n if (!isNullOrUndefined(element.properties)) {\n var columnFirst = parseInt(element.properties[\"columnFirst\"]);\n if (element.paragraph.isInsideTable) {\n var row = element.paragraph.associatedCell.ownerRow;\n var cell = row.getCellUsingColumnIndex(row.rowIndex, columnFirst);\n if (!isNullOrUndefined(cell)) {\n cell.isRenderBookmarkStart = true;\n }\n }\n }\n }\n else if (element.bookmarkType === 1 && this.documentHelper.bookmarks.containsKey(element.name)) {\n var bookmrkElement = this.documentHelper.bookmarks.get(element.name);\n if (isNullOrUndefined(bookmrkElement.reference)\n || isNullOrUndefined(bookmrkElement.reference.paragraph)\n || isNullOrUndefined(bookmrkElement.reference.paragraph.bodyWidget)) {\n bookmrkElement.reference = element;\n element.reference = bookmrkElement;\n }\n if (isNullOrUndefined(bookmrkElement.properties)) {\n if (!isNullOrUndefined(this.documentHelper.selection)) {\n var cell = bookmrkElement.reference.paragraph.associatedCell;\n if (!isNullOrUndefined(cell)) {\n cell.isRenderBookmarkEnd = false;\n if (this.documentHelper.selection.isRenderBookmarkAtEnd(bookmrkElement.reference)) {\n cell.isRenderBookmarkEnd = true;\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(element.paragraph.associatedCell)) {\n var lastPara = this.documentHelper.selection.getLastParagraph(element.paragraph.associatedCell);\n var lastLine = lastPara.lastChild;\n if (!isNullOrUndefined(lastLine)) {\n var lastElement = lastLine.children[lastLine.children.length - 1];\n if (lastElement == element) {\n var columnLast = parseInt(element.reference.properties['columnLast']);\n var endRow = element.paragraph.associatedCell.ownerRow;\n var endCell = undefined;\n var cellIndex = columnLast;\n while (isNullOrUndefined(endCell) && cellIndex > -1) {\n endCell = endRow.getCellUsingColumnIndex(endRow.rowIndex, cellIndex);\n if (isNullOrUndefined(endCell)) {\n cellIndex--;\n }\n }\n if (!isNullOrUndefined(endCell)) {\n endRow.isRenderBookmarkEnd = true;\n }\n }\n }\n }\n }\n }\n else if (element.bookmarkType === 0 && this.documentHelper.bookmarks.containsKey(element.name)) {\n if (isNullOrUndefined(element.reference)) {\n this.documentHelper.bookmarks.remove(element.name);\n }\n if (!isNullOrUndefined(element.properties)) {\n var columnFirst = parseInt(element.properties[\"columnFirst\"]);\n if (element.paragraph.isInsideTable) {\n var row = element.paragraph.associatedCell.ownerRow;\n var cell = row.getCellUsingColumnIndex(row.rowIndex, columnFirst);\n if (!isNullOrUndefined(cell)) {\n cell.isRenderBookmarkStart = true;\n }\n }\n }\n }\n }\n if (element instanceof EditRangeStartElementBox || element instanceof EditRangeEndElementBox) {\n if (element instanceof EditRangeStartElementBox && (this.documentHelper.owner.currentUser === element.user || (element.group === \"Everyone\" && element.user === \"\"))) {\n if (element.columnFirst != -1 && element.columnLast != -1) {\n var row = element.paragraph.associatedCell.ownerRow;\n var cell = row.getCellUsingColumnIndex(row.rowIndex, element.columnFirst);\n if (!isNullOrUndefined(cell)) {\n cell.isRenderEditRangeStart = true;\n row.editRangeID.add(element.editRangeId, element);\n }\n }\n }\n else if (element instanceof EditRangeEndElementBox && (this.documentHelper.owner.currentUser === element.editRangeStart.user || (element.editRangeStart.group === \"Everyone\" && element.editRangeStart.user === \"\"))) {\n if (element.editRangeStart.columnFirst != -1 && element.editRangeStart.columnLast != -1) {\n var row = element.paragraph.associatedCell.ownerRow;\n if (row.editRangeID.containsKey(element.editRangeStart.editRangeId)) {\n var cell = row.getCellUsingColumnIndex(row.rowIndex, element.editRangeStart.columnFirst);\n if (!isNullOrUndefined(cell)) {\n if (cell.isRenderEditRangeStart) {\n cell.isRenderEditRangeEnd = true;\n }\n }\n }\n else {\n var table = element.paragraph.associatedCell.ownerTable;\n for (var i = row.rowIndex - 1; i >= 0; i--) {\n var previousRow = table.childWidgets[i];\n if (previousRow.editRangeID.containsKey(element.editRangeStart.editRangeId)) {\n var previousCell = previousRow.getCellUsingColumnIndex(previousRow.rowIndex, element.editRangeStart.columnFirst);\n if (!isNullOrUndefined(previousCell)) {\n if (previousCell.isRenderEditRangeStart) {\n previousCell.isRenderEditRangeEnd = true;\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline' && paragraph.floatingElements.indexOf(element) == -1) {\n if (element instanceof ShapeElementBox) {\n if (paragraph.floatingElements.indexOf(element) === -1) {\n paragraph.floatingElements.push(element);\n }\n if (paragraph.bodyWidget.floatingElements.indexOf(element) === -1) {\n paragraph.bodyWidget.floatingElements.push(element);\n }\n }\n }\n if (element instanceof ContentControl && this.documentHelper.contentControlCollection.indexOf(element) === -1) {\n if (element.type === 0) {\n this.documentHelper.contentControlCollection.push(element);\n }\n else if (element.type === 1) {\n var endPage = element.paragraph.bodyWidget.page;\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n var cCStart = this.documentHelper.contentControlCollection[i];\n var isInHeaderFooter = cCStart.line.paragraph.isInHeaderFooter;\n // Link content control present in same header.\n if (isInHeaderFooter && element.contentControlProperties === cCStart.contentControlProperties\n && endPage === cCStart.line.paragraph.bodyWidget.page) {\n element.reference = cCStart;\n cCStart.reference = element;\n }\n else if (!isInHeaderFooter && element.contentControlProperties === cCStart.contentControlProperties) {\n element.reference = cCStart;\n cCStart.reference = element;\n }\n }\n }\n }\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement)) {\n if (this.hasValidElement(line.paragraph) && !paragraph.isContainsShapeAlone()) {\n this.moveToNextLine(line);\n }\n else if (!this.isInitialLoad && !this.hasValidElement(line.paragraph) && line.paragraph.paragraphFormat.bidi && line.paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.moveToNextLine(line);\n }\n else {\n this.layoutEmptyLineWidget(line.paragraph, false, line, false);\n }\n }\n return;\n }\n if (element instanceof TextElementBox && element.characterFormat.highlightColor != \"NoColor\" && element.text.trim() != \"\" && element.text != element.text.trim()) {\n var firstLine = paragraph.firstChild;\n var lastLine = paragraph.lastChild;\n if (!isNullOrUndefined(firstLine) && firstLine instanceof LineWidget && firstLine.children.length > 0 && element === firstLine.children[0]) {\n HelperMethods.splitSpaceInTextElementBox(element, true);\n }\n if (!isNullOrUndefined(lastLine) && lastLine instanceof LineWidget && lastLine.children.length > 0 && element === lastLine.children[lastLine.children.length - 1]) {\n HelperMethods.splitSpaceInTextElementBox(element, false);\n }\n }\n var width = element.width;\n if (element instanceof FieldTextElementBox && !this.isTocField(element.fieldBegin)) {\n text = this.documentHelper.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n }\n else {\n text = element.text;\n }\n }\n else if (element instanceof FootnoteElementBox) {\n text = this.startAt(element, text);\n if (text !== '') {\n element.text = text;\n }\n }\n else if (element instanceof TextElementBox) {\n // skip when cliked enter in first footnote element\n if (!isNullOrUndefined(element.paragraph.containerWidget.footNoteReference)\n && element.line.isFirstLine()\n && element.paragraph.index === 0\n && element.indexInOwner === 0\n && !this.documentHelper.owner.editorModule.handleEnterKey) {\n element.text = element.paragraph.containerWidget.footNoteReference.text;\n }\n this.checkAndSplitTabOrLineBreakCharacter(element.text, element);\n //TODO: Need to update revision\n // if (element.text.length > 1 && element.line.paragraph.bidi) {\n // let splittedText: string[] = this.splitTextByConsecutiveLtrAndRtl(element);\n // this.updateSplittedText(element, splittedText);\n // }\n text = element.text;\n }\n // Here field code width and height update need to skipped based on the hidden property.\n if (element instanceof TextElementBox) {\n if (!element.isWidthUpdated || element.width === 0 || this.isInitialLoad\n || (this.viewer.owner.editorModule && this.viewer.owner.editorModule.isMeasureParaWidth)) {\n width = this.documentHelper.textHelper.getTextSize(element, element.characterFormat);\n element.isWidthUpdated = true;\n }\n else {\n width = element.trimEndWidth;\n }\n if (element.text === '\\t') {\n width = this.getTabWidth(paragraph, this.viewer, index, line, element);\n element.width = width;\n }\n // As per MS word behavior, optional hyper Or column break is shown only when show paragraph mark properly is enabled\n // We need to show this special character based on property `showHiddenMark`\n else if (element.text === String.fromCharCode(31) || element.text === String.fromCharCode(14)) {\n element.width = width = 0;\n }\n }\n if (!isNullOrUndefined(paragraph.containerWidget) && paragraph.bodyWidget.floatingElements.length > 0 &&\n !(element instanceof ShapeElementBox && element.textWrappingStyle == 'Inline') && !(paragraph.containerWidget instanceof TextFrame && !(element instanceof CommentCharacterElementBox)) &&\n !(paragraph.containerWidget instanceof TableCellWidget && paragraph.containerWidget.ownerTable.containerWidget instanceof TextFrame)) {\n this.adjustPosition(element, element.line.paragraph.bodyWidget);\n }\n var beforeSpacing = line.isFirstLine() && element.indexInOwner === 0 ? this.getBeforeSpacing(paragraph) : 0;\n if (this.viewer instanceof PageLayoutViewer &&\n ((element instanceof ShapeElementBox && element.textWrappingStyle === 'Inline') || !(element instanceof ShapeElementBox))\n && this.viewer.clientActiveArea.height < beforeSpacing + element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n if ((element instanceof TextElementBox && (element.text !== '\\f' && element.text !== String.fromCharCode(14) || (element.text === '\\f' && paragraph.isPageBreak() && this.documentHelper.compatibilityMode === 'Word2013'))) || !(element instanceof TextElementBox)) {\n //let bodyIndex: number = line.paragraph.containerWidget.indexInOwner;\n this.moveToNextPage(this.viewer, line);\n // if (bodyIndex !== line.paragraph.containerWidget.indexInOwner) {\n // return;\n // }\n }\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n if (element.previousElement &&\n ((element.previousElement instanceof ShapeElementBox && element.previousElement.textWrappingStyle === 'Inline') ||\n !(element.previousElement instanceof ShapeElementBox))) {\n this.cutClientWidth(element.previousElement);\n }\n }\n if (element instanceof ShapeElementBox && element.textWrappingStyle === 'Inline') {\n if (paragraph.floatingElements.indexOf(element) === -1) {\n paragraph.floatingElements.push(element);\n }\n if (element.width > this.viewer.clientActiveArea.width) {\n this.splitElementForClientArea(paragraph, element);\n this.checkLineWidgetWithClientArea(line, element);\n }\n var is2013Justification = this.is2013Justification;\n this.layoutShape(element);\n this.is2013Justification = is2013Justification;\n }\n // tslint:disable-next-line:max-line-length\n if (element instanceof FootnoteElementBox && (!element.isLayout || this.isLayoutWhole) && this.documentHelper.owner.layoutType === 'Pages') {\n this.layoutFootEndNoteElement(element);\n }\n if (element instanceof FootnoteElementBox) {\n if (this.isfootMove) {\n this.moveToNextPage(this.viewer, element.line);\n if (element.previousElement &&\n ((element.previousElement instanceof ShapeElementBox && element.previousElement.textWrappingStyle === 'Inline') ||\n !(element.previousElement instanceof ShapeElementBox))) {\n this.cutClientWidth(element.previousElement);\n }\n this.isfootMove = false;\n }\n if (paragraph.paragraphFormat.keepWithNext && paragraph.paragraphFormat.keepLinesTogether && !(!element.isLayout || this.isLayoutWhole)) {\n if (!isNullOrUndefined(paragraph.bodyWidget.page.footnoteWidget) && paragraph.bodyWidget.page.footnoteWidget.y !== 0 && paragraph.bodyWidget.page.footnoteWidget.y < this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height) {\n var findDiff = this.viewer.clientActiveArea.y + this.viewer.clientActiveArea.height - paragraph.bodyWidget.page.footnoteWidget.y;\n this.viewer.clientActiveArea.height -= findDiff;\n }\n }\n }\n if (parseFloat(width.toFixed(4)) <= parseFloat(this.viewer.clientActiveArea.width.toFixed(4)) || !this.viewer.textWrap) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n if (isNullOrUndefined(element.nextElement) && !element.line.isLastLine()) {\n var nextLine = element.line.nextLine;\n var nextElement = nextLine.children[0];\n if (nextElement instanceof TextElementBox && nextElement.text.indexOf(\" \") == 0) {\n this.moveElementFromNextLine(line);\n }\n }\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0 && !element.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n else if (!element.line.isLastLine() && isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width === 0) {\n this.moveToNextLine(line);\n if (line.paragraph.lastChild === line && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n }\n }\n else if (element instanceof TextElementBox) {\n if (element.text === '\\t') {\n var currentLine = element.line;\n var isElementMoved = false;\n // Added the condition to check While the tab element width is greater then clientActiveArea width and while it was first element of line should not move to next line\n if (element.indexInOwner !== 0 && element instanceof TabElementBox) {\n isElementMoved = true;\n this.addSplittedLineWidget(currentLine, currentLine.children.indexOf(element) - 1);\n }\n else {\n if (this.isWrapText && this.viewer.clientActiveArea.x + this.viewer.clientActiveArea.width === this.viewer.clientActiveArea.right) {\n this.isWrapText = false;\n }\n this.addSplittedLineWidget(currentLine, currentLine.children.indexOf(element));\n }\n this.moveToNextLine(currentLine);\n if (currentLine.paragraph.bodyWidget.floatingElements.length > 0 && isElementMoved) {\n this.nextElementToLayout = element;\n this.hasFloatingElement = true;\n return;\n }\n else {\n // Recalculates tab width based on new client active area X position\n element.width = this.getTabWidth(paragraph, this.viewer, index, element.line, element);\n if (isElementMoved) {\n this.addElementToLine(paragraph, element);\n if (isNullOrUndefined(element.nextElement) && this.viewer.clientActiveArea.width > 0\n && !element.line.isLastLine()) {\n this.moveElementFromNextLine(element.line);\n }\n }\n }\n }\n else {\n //Splits the text and arrange line by line, till end of text.\n do {\n line = element.line;\n //Added the condition to skip line split while layouting dropDownFormField \n if (!(element.previousElement instanceof FieldElementBox && element.previousElement.fieldType == 2\n && !isNullOrUndefined(element.previousElement.fieldBeginInternal)\n && element.previousElement.fieldBeginInternal.formFieldData instanceof DropDownFormField)) {\n this.splitTextForClientArea(line, element, element.text, element.trimEndWidth, element.characterFormat);\n }\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox && !this.isInitialLoad) {\n this.updateFieldText(element);\n }\n if (element.line !== line && !isNullOrUndefined(this.nextElementToLayout) && this.is2013Justification) {\n return;\n }\n } while (element.line !== line && this.cutClientWidth(element));\n }\n }\n else {\n do {\n line = element.line;\n this.splitElementForClientArea(paragraph, element);\n this.checkLineWidgetWithClientArea(line, element);\n if (element instanceof FieldTextElementBox) {\n this.updateFieldText(element);\n }\n } while (element.line !== line && this.cutClientWidth(element, true));\n }\n var contentControl;\n if (!isNullOrUndefined(element.nextNode) && element.nextNode instanceof ContentControl) {\n contentControl = element.nextNode;\n }\n if ((text === '\\v' || text === '\\f' || text === '\\r' || text === String.fromCharCode(14)) && !contentControl) {\n var elementIndex = line.children.indexOf(element);\n if (elementIndex > -1) {\n this.addSplittedLineWidget(line, elementIndex);\n }\n }\n if (element.line.isLastLine() && isNullOrUndefined(element.nextElement) || text === '\\v' || text === '\\f' || text === '\\r' || text === String.fromCharCode(14)) {\n if (this.isXPositionUpdated) {\n this.isXPositionUpdated = false;\n return;\n }\n this.moveToNextLine(element.line);\n if (text === '\\v' && isNullOrUndefined(element.nextNode)) {\n this.layoutEmptyLineWidget(paragraph, true, line, true);\n }\n else if ((text === '\\f' || text === String.fromCharCode(14)) && this.viewer instanceof PageLayoutViewer && !(element.line.paragraph.containerWidget instanceof TableCellWidget)) {\n var isRTLLayout = this.isRTLLayout;\n this.isRTLLayout = false;\n if (isNullOrUndefined(element.nextNode) || element.nextNode instanceof ContentControl) {\n if (text === String.fromCharCode(14)) {\n this.moveToNextPage(this.viewer, element.line.nextLine, false);\n this.layoutEmptyLineWidget(element.line.nextLine.paragraph, false, element.line.nextLine, true);\n }\n else {\n this.moveToNextPage(this.viewer, element.line, true);\n }\n }\n else if (!isNullOrUndefined(element.line.nextLine)) {\n this.moveToNextPage(this.viewer, element.line.nextLine, false);\n }\n this.isRTLLayout = isRTLLayout;\n }\n }\n this.isXPositionUpdated = false;\n };\n /**\n * @private\n */\n Layout.prototype.adjustPosition = function (element, bodyWidget) {\n var clientArea = this.viewer.clientActiveArea;\n var previousLeft = this.viewer.clientActiveArea.x;\n var previousTop = this.viewer.clientActiveArea.y;\n var previousWidth = this.viewer.clientActiveArea.width;\n var adjustedRect = this.adjustClientAreaBasedOnTextWrap(element, new Rect(clientArea.x, clientArea.y, clientArea.width, clientArea.height));\n this.viewer.clientActiveArea.width = adjustedRect.width;\n //Updated element padding for wrapping.\n // if (this.isWrapText) {\n var wrapDiff = this.viewer.clientActiveArea.x - previousLeft;\n // if (element.indexInOwner === 0 && element.line.isFirstLine()) {\n // wrapDiff -= HelperMethods.convertPointToPixel(element.line.paragraph.paragraphFormat.firstLineIndent);\n // }\n if (element.line.isFirstLine() && this.getFirstElement(element.line) === element && wrapDiff > 0 && !this.isSkipFirstLineIndent) {\n var firstLineIndent = element.line.paragraph.paragraphFormat.firstLineIndent;\n wrapDiff += HelperMethods.convertPointToPixel(firstLineIndent > 0 ? firstLineIndent : 0);\n }\n this.isSkipFirstLineIndent = false;\n element.padding.left = wrapDiff > 0 ? wrapDiff : 0;\n if (previousWidth !== this.viewer.clientActiveArea.width) {\n var wrapPos = new WrapPosition(this.viewer.clientActiveArea.x, this.viewer.clientActiveArea.width);\n this.updateWrapPosition(wrapPos);\n }\n //this.isWrapText = false;\n // }\n if (this.viewer.clientActiveArea.width === 0) {\n this.isWrapText = false;\n }\n if (this.isYPositionUpdated) {\n if (element.line.isFirstLine()) {\n if (!isNullOrUndefined(element.line.paragraph.associatedCell)) {\n var previousRenderedWidget = element.line.paragraph.previousRenderedWidget;\n if (!isNullOrUndefined(previousRenderedWidget)) {\n element.line.paragraph.associatedCell.height += (this.viewer.clientActiveArea.y - previousRenderedWidget.y + previousRenderedWidget.height);\n }\n else {\n element.line.paragraph.associatedCell.height += (this.viewer.clientActiveArea.y - previousTop);\n }\n }\n element.line.paragraph.y = this.viewer.clientActiveArea.y;\n }\n else if (element.line.children[0] === element) {\n element.line.marginTop += (this.viewer.clientActiveArea.y - previousTop);\n }\n if (element.line.paragraph.containerWidget instanceof HeaderFooterWidget) {\n element.line.paragraph.containerWidget.height += (this.viewer.clientActiveArea.y - previousTop);\n }\n if (!(element instanceof ListTextElementBox)) {\n this.isYPositionUpdated = false;\n }\n }\n };\n Layout.prototype.getFirstElement = function (line) {\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (!(element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n return element;\n }\n }\n return undefined;\n };\n Layout.prototype.updateWrapPosition = function (wrapPos) {\n for (var i = 0; i < this.wrapPosition.length; i++) {\n var previousWrapPos = this.wrapPosition[i];\n if (Math.abs(previousWrapPos.right - wrapPos.right) > 1) {\n continue;\n }\n else {\n return;\n }\n }\n this.wrapPosition.push(wrapPos);\n };\n Layout.prototype.isFirstitemInPage = function (element, yposition) {\n if (!element.line.paragraph.isInHeaderFooter && Math.round(yposition) === this.viewer.clientArea.y) {\n return true;\n }\n return false;\n };\n Layout.prototype.isTextFitBelow = function (rect, top, element) {\n //TODO: After shape implementation.\n return false;\n };\n Layout.prototype.isNeedToWrapForTopAndBottom = function (currWidgetOwnerPara, elementBox, wrapOwnerIndex, wrapItemIndex, textWrappingStyle, textWrappingBounds, allowOverlap, wrapCollectionIndex, floatingEntity, isTextRangeInTextBox, rect, width, height) {\n if (currWidgetOwnerPara.isInsideTable && textWrappingStyle === \"TopAndBottom\" && !(floatingEntity instanceof TableWidget)) {\n var floatingItemOwnerPara = floatingEntity.paragraph;\n if (!isNullOrUndefined(floatingItemOwnerPara) && !isNullOrUndefined(floatingItemOwnerPara.associatedCell)) {\n var isLayoutInCell = floatingItemOwnerPara.isInsideTable;\n var floatingItemOwnerCell = floatingItemOwnerPara.associatedCell;\n var currParaOwnerCell = currWidgetOwnerPara.associatedCell;\n if ((!isNullOrUndefined(floatingItemOwnerCell) && !isNullOrUndefined(currParaOwnerCell) && floatingItemOwnerCell !== currParaOwnerCell)\n || (!isLayoutInCell && this.documentHelper.compatibilityMode !== \"Word2013\"))\n return false;\n }\n }\n return (wrapOwnerIndex !== wrapCollectionIndex\n && wrapItemIndex !== wrapCollectionIndex\n && textWrappingStyle === \"TopAndBottom\"\n && ((rect.y >= textWrappingBounds.y\n && rect.y < (textWrappingBounds.bottom))\n || ((rect.y + height > textWrappingBounds.y\n || this.isTextFitBelow(textWrappingBounds, rect.y + height, floatingEntity))\n && (rect.y + height < (textWrappingBounds.bottom)))\n || (rect.y < textWrappingBounds.y && rect.y + height > textWrappingBounds.bottom && textWrappingBounds.height > 0))\n && !(allowOverlap && (isTextRangeInTextBox || ((elementBox instanceof ImageElementBox)\n && elementBox.textWrappingStyle !== 'Inline' && elementBox.allowOverlap))));\n };\n Layout.prototype.isNeedToWrapForSquareTightAndThrough = function (bodyWidget, elementBox, wrapOwnerIndex, wrapItemIndex, textWrappingStyle, textWrappingBounds, allowOverlap, wrapCollectionIndex, floatingEntity, isTextRangeInTextBox, rect, width, height) {\n return (bodyWidget.floatingElements.length > 0\n && wrapOwnerIndex !== wrapCollectionIndex\n && wrapItemIndex !== wrapCollectionIndex\n && textWrappingStyle !== 'Inline'\n && textWrappingStyle !== 'Behind'\n && textWrappingStyle !== 'TopAndBottom'\n && textWrappingStyle !== 'InFrontOfText'\n && (Math.round((rect.y + height)) > Math.round(textWrappingBounds.y) ||\n this.isTextFitBelow(textWrappingBounds, rect.y + height, floatingEntity))\n && Math.round(rect.y) < Math.round((textWrappingBounds.y + textWrappingBounds.height))\n && !(allowOverlap && (isTextRangeInTextBox || ((elementBox instanceof ImageElementBox)\n && elementBox.textWrappingStyle !== 'Inline' && elementBox.allowOverlap))));\n };\n Layout.prototype.isNeedToWrapForSquareTightAndThroughForTable = function (container, table, wrapIndex, wrapItemIndex, wrappingStyle, textWrappingBounds, allowOverlap, wrapCollectionIndex, floatingElemnt, isInTextBox, rect, width, height) {\n return (container.floatingElements.length > 0 && wrapIndex !== wrapCollectionIndex\n && wrapItemIndex !== wrapCollectionIndex && wrappingStyle !== 'Inline'\n && wrappingStyle !== 'Behind' && wrappingStyle !== 'TopAndBottom'\n && wrappingStyle !== 'InFrontOfText'\n && ((Math.round(rect.y + height) >= Math.round(textWrappingBounds.y)\n && Math.round(rect.y) < Math.round(textWrappingBounds.bottom))\n //Checks whether the bottom of the table intersects with floating item.\n || Math.round(rect.y + height) <= Math.round(textWrappingBounds.bottom)\n && Math.round(rect.y + height) >= Math.round(textWrappingBounds.y))\n && !(allowOverlap && (isInTextBox)));\n };\n Layout.prototype.isNeedToWrapLeafWidget = function (pargaraph, elementBox) {\n var IsNeedToWrap = true;\n return (pargaraph.bodyWidget.floatingElements.length > 0\n && (IsNeedToWrap || pargaraph.associatedCell)\n && !(elementBox instanceof ShapeBase && (elementBox.textWrappingStyle === 'InFrontOfText' || elementBox.textWrappingStyle === 'Behind')));\n };\n Layout.prototype.getMinWidth = function (currTextRange, width, height, rect) {\n var text = currTextRange.text;\n var split = text.split(' ');\n // Gets the minimum width from the text when it contains only empty space.\n if (text !== '' && text.trim() === ''\n && currTextRange && currTextRange.line.paragraph\n && currTextRange.previousNode && currTextRange.nextNode\n && currTextRange.line.paragraph.isEmpty) {\n split = [''];\n }\n // Initialized the text with additional empty string.\n // It avoids the minimum width calculation from next sibling (GetNextTextRangeWidth).\n var minwidth = this.documentHelper.textHelper.measureText(split[0], currTextRange.characterFormat, currTextRange.scriptType).Width;\n //Need to layout the unicode characters (chinese) character by character.\n // if (DrawingContext.IsUnicodeText(text)) {\n // minwidth = DrawingContext.MeasureTextRange(currTextRange, text[0].ToString()).Width;\n // }\n var nextSibling = this.getNextSibling(currTextRange);\n if (split.length === 1 && nextSibling) {\n var nextSiblingText = nextSibling.text;\n minwidth += this.getNextTextRangeWidth(nextSibling, nextSiblingText, width, height, rect);\n } // Add the minimum character width of that paragraph, if this text range is para mark\n return minwidth;\n };\n Layout.prototype.getNextTextRangeWidth = function (nextSiblingTextRange, nextSiblingText, width, height, rect) {\n var nextsibling = nextSiblingTextRange;\n // if (nextSiblingTextRange instanceof WFootnote)\n // nextsibling = ((nextSiblingTextRange as IWidget).LayoutInfo as LayoutFootnoteInfoImpl).TextRange;\n var sizeNext = new Rect(0, 0, 0, 0);\n var isNextSiblingSizeNeedToBeMeasure = this.isNextSibligSizeNeedToBeMeasure(sizeNext, nextSiblingTextRange, rect, width, height);\n while (isNextSiblingSizeNeedToBeMeasure\n && this.isLeafWidgetNextSiblingIsTextRange(nextsibling)\n && width + sizeNext.width < rect.width) {\n nextsibling = this.getNextSibling(nextsibling);\n if (!this.isNextSibligSizeNeedToBeMeasure(sizeNext, nextsibling, rect, width, height)) {\n break;\n }\n nextSiblingText += nextsibling.text;\n }\n return sizeNext.width;\n };\n Layout.prototype.isLeafWidgetNextSiblingIsTextRange = function (textRange) {\n var nextSiblingTextRange = this.getNextSibling(textRange);\n if (nextSiblingTextRange && nextSiblingTextRange instanceof TextElementBox) {\n return true;\n }\n return false;\n };\n Layout.prototype.isNextSibligSizeNeedToBeMeasure = function (sizeNext, nextSiblingwidget, rect, width, height) {\n var text = null;\n var nextSiblingTextRange = nextSiblingwidget;\n if (nextSiblingTextRange) {\n text = nextSiblingTextRange.text;\n if (text.indexOf(' ') !== -1 || (text.indexOf('-') !== -1 || (text.indexOf('_') !== -1)\n && ((width + sizeNext.width + (this.documentHelper.textHelper.measureText(text.split('-')[0], nextSiblingTextRange.characterFormat, nextSiblingTextRange.scriptType)).Width) < rect.width))\n || ((nextSiblingTextRange).text === '\\t')) {\n var elementWidth = nextSiblingTextRange.width;\n if (text !== text.split(' ')[0]) {\n elementWidth = this.documentHelper.textHelper.measureText(text.split(' ')[0], nextSiblingTextRange.characterFormat, nextSiblingTextRange.scriptType).Width;\n }\n if ((width + sizeNext.width + elementWidth) > rect.width && text.indexOf('-')) {\n if (text !== text.split('-')[0] + '-') {\n elementWidth = this.documentHelper.textHelper.measureText(text.split('-')[0] + '-', nextSiblingTextRange.characterFormat, nextSiblingTextRange.scriptType).Width;\n }\n }\n sizeNext.width += elementWidth;\n return false;\n }\n else {\n if (nextSiblingTextRange.text.length > 0) {\n var textInfo = this.documentHelper.textHelper.measureText(nextSiblingTextRange.text, nextSiblingTextRange.characterFormat, nextSiblingTextRange.scriptType);\n sizeNext.height += textInfo.Height;\n sizeNext.width += textInfo.Width;\n }\n }\n }\n return true;\n };\n Layout.prototype.isNeedDoIntermediateWrapping = function (remainingClientWidth, textWrappingStyle, rect, width, paragraph, textWrappingBounds, leafWidget, minwidth, minimumWidthRequired) {\n return (((remainingClientWidth > minimumWidthRequired)\n && (((Math.round(rect.width) <= Math.round(minwidth)\n || (rect.width < width && leafWidget.paragraph.isInsideTable))\n && textWrappingStyle !== 'Left' // Skip to update width when the wrap type as left\n && textWrappingStyle !== 'Largest')\n || textWrappingStyle === 'Right' //To layout right side when the wrap type as right\n || (rect.width < remainingClientWidth && textWrappingStyle === 'Largest'))) // Check whether the right side width is greater than the left side when the wrap type as largest\n || ((Math.round(textWrappingBounds.x - paragraph.x + paragraph.leftIndent) < minimumWidthRequired // Check whether the left side of text wrap object is have minimum width to layout or not\n || (leafWidget instanceof TextElementBox && this.isFloatingItemOnLeft(rect, minwidth, textWrappingBounds)))\n && (textWrappingStyle !== 'Left' || remainingClientWidth < minimumWidthRequired)));\n };\n Layout.prototype.isFloatingItemOnLeft = function (rect, minWidth, bounds) {\n return false;\n };\n Layout.prototype.getNextSibling = function (currentElementBox) {\n var nextSibling = currentElementBox.nextNode;\n var isFieldCode = false;\n while (nextSibling) {\n if ((nextSibling instanceof FieldElementBox) || (nextSibling instanceof BookmarkElementBox) || isFieldCode || nextSibling instanceof ListTextElementBox) {\n if (nextSibling instanceof FieldElementBox) {\n if (nextSibling.fieldType === 0) {\n isFieldCode = true;\n }\n else if (nextSibling.fieldType === 2) {\n isFieldCode = false;\n }\n }\n }\n else if (nextSibling instanceof TextElementBox) {\n break;\n }\n nextSibling = nextSibling.nextNode;\n }\n return nextSibling;\n };\n Layout.prototype.adjustClientAreaBasedOnTextWrap = function (elementBox, rect) {\n var ownerPara = elementBox.line.paragraph;\n var bodyWidget = ownerPara.bodyWidget;\n var yValue = 0;\n var layouter = this.viewer;\n var yposition = rect.y;\n var isFirstItem = this.isFirstitemInPage(elementBox, yposition);\n if (isFirstItem) {\n yValue = yposition;\n }\n isFirstItem = isNullOrUndefined(ownerPara.previousWidget);\n //Update Layout area based on text wrap\n if (this.isNeedToWrapLeafWidget(ownerPara, elementBox)) {\n var clientLayoutArea = layouter.clientArea;\n //Need to handle sorting floating items.\n // Sort based on Y position\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n // Sort based on X position\n bodyWidget.floatingElements.sort(function (a, b) { return a.x - b.x; });\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatingItem = bodyWidget.floatingElements[i];\n var allowOverlap = false;\n if (floatingItem instanceof ShapeBase) {\n allowOverlap = floatingItem.allowOverlap;\n }\n else {\n allowOverlap = floatingItem.positioning.allowOverlap;\n }\n if (ownerPara.isInsideTable) {\n if (floatingItem instanceof TableWidget && !floatingItem.isInsideTable) {\n continue;\n }\n }\n if (this.isRelayout && !this.isRelayoutOverlap &&\n this.viewer.documentHelper.selection.isExistAfter(floatingItem instanceof TableWidget ? floatingItem : floatingItem.line.paragraph, elementBox.line.paragraph)\n || this.isRelayout && this.isRelayoutOverlap && this.viewer.documentHelper.selection.isExistAfter(floatingItem instanceof TableWidget ? floatingItem : floatingItem.line.paragraph, this.endOverlapWidget)) {\n continue;\n }\n // if (ownerPara.isInsideTable && allowOverlap\n // && (ownerPara.associatedCell.ownerTable.positioning.allowOverlap))\n // {\n // WParagraph ownerParagraph = (m_lcOperator as Layouter).FloatingItems[i].OwnerParagraph;\n // if (!(ownerParagraph !== null\n // && ownerParagraph.IsInCell\n // && ownerPara.GetOwnerEntity() === ownerParagraph.GetOwnerEntity()))\n // {\n // continue;\n // }\n // }\n var xPosition = floatingItem.x;\n var distanceLeft = 0;\n var distanceTop = 0;\n var distanceRight = 0;\n var distanceBottom = 0;\n var width = 0;\n if (floatingItem instanceof ShapeBase) {\n distanceLeft = floatingItem.distanceLeft;\n distanceTop = floatingItem.distanceTop;\n distanceRight = floatingItem.distanceRight;\n distanceBottom = floatingItem.distanceBottom;\n width = floatingItem.width;\n }\n else {\n width = floatingItem.getTableCellWidth();\n distanceLeft = floatingItem.positioning.distanceLeft;\n distanceTop = floatingItem.positioning.distanceTop;\n distanceRight = floatingItem.positioning.distanceRight;\n distanceBottom = floatingItem.positioning.distanceBottom;\n }\n var textWrappingBounds = new Rect(floatingItem.x - distanceLeft, floatingItem.y - distanceTop, width + distanceLeft + distanceRight, floatingItem.height + distanceTop + distanceBottom);\n var textWrappingStyle = floatingItem instanceof TableWidget ? 'Square' : floatingItem.textWrappingStyle;\n var textWrappingType = floatingItem instanceof TableWidget ? 'Both' : floatingItem.textWrappingType;\n // //Need to skip the wrapping for line break when it is first item of corresponding paragraph and that paragraph contains First line indent as per Word 2010 and its lower version behavior.\n // if (IsLineBreakIntersectOnFloatingItem(leafWidget, textWrappingStyle, textWrappingBounds, rect, size, ownerPara))\n // continue;\n var minimumWidthRequired = 24;\n var bottom = layouter.clientArea.y + floatingItem.height;\n // if (this.isNeedToWrapParaMarkToRightSide(elementBox, ownerPara, textWrappingBounds, bottom, layouter, this.viewer.clientArea, textWrappingType, minimumWidthRequired)) {\n // if (lineBreakPosition !== 0) {\n // this.viewer.clientArea.y = lineBreakPosition;\n // //m_layoutArea.UpdateBoundsBasedOnTextWrap(lineBreakPosition);\n // }\n // this.viewer.clientArea.x += textWrappingBounds.width;\n // //(LeafWidget as IWidget).LayoutInfo.IsLineBreak = false;\n // elementBox.height = 0;\n // elementBox.width = textWrappingBounds.width;\n // return;\n // }\n if (!(clientLayoutArea.x > (textWrappingBounds.right + minimumWidthRequired) || clientLayoutArea.right < textWrappingBounds.x - minimumWidthRequired)) {\n if (this.isNeedToWrapForSquareTightAndThrough(bodyWidget, elementBox, -1, -1, textWrappingStyle, textWrappingBounds, allowOverlap, 1, floatingItem, false, rect, elementBox.width, elementBox.height)) {\n var rightIndent = 0;\n var leftIndent = 0;\n var listLeftIndent = 0;\n var firstLineIndent = HelperMethods.convertPointToPixel(elementBox.paragraph.paragraphFormat.firstLineIndent);\n var paragraphLeftIndent = HelperMethods.convertPointToPixel(ownerPara.paragraphFormat.leftIndent);\n var paragarphRightIndent = HelperMethods.convertPointToPixel(ownerPara.paragraphFormat.rightIndent);\n firstLineIndent = ((elementBox.indexInOwner === 0 && elementBox.line.isFirstLine()) && firstLineIndent > 0) ? firstLineIndent : 0;\n var currTextRange = elementBox instanceof TextElementBox || elementBox instanceof ListTextElementBox ? elementBox : null;\n var containerWidget = floatingItem instanceof TableWidget ? floatingItem.containerWidget : floatingItem.line.paragraph.containerWidget;\n var isnewline = false;\n if (elementBox.line.paragraph) {\n //Right indent is considered only if the rect.X greater than the floating item's X position and\n //Text wrapping style should not be left\n if (rect.x >= textWrappingBounds.x && textWrappingType !== 'Left') {\n rightIndent = paragarphRightIndent;\n }\n //Left indent is considered only if the rect.X less than the floating item's X position and\n //Text wrapping style should not be right\n if (rect.x < textWrappingBounds.x && textWrappingType !== 'Right') {\n leftIndent = paragraphLeftIndent;\n }\n var listFormat = ownerPara.paragraphFormat.listFormat;\n var listLevel = this.getListLevel(listFormat.list, listFormat.listLevelNumber);\n if (rect.x === (clientLayoutArea.x + paragraphLeftIndent)\n && listFormat && listFormat.baseStyle\n && listLevel && listLevel.paragraphFormat.leftIndent !== 0) {\n listLeftIndent = paragraphLeftIndent;\n isnewline = true; // to denote the current line is new line of the paragraph\n }\n }\n // if (this.isXPositionUpdated && textWrappingType === 'Both' && this.layoutState === 'Splitted') {\n // rect.width = bodyWidget.width - this.viewer.clientActiveArea.x;\n // rect.x = textWrappingBounds.right;\n // this.viewer.updateClientAreaForTextWrap(rect);\n // return rect;\n // }\n /* Since the Microsoft Word has different behavior to calculate minimum width required to fit a word to a side of Table,\n the minimum width required changes based upon table border value and table alignment.\n And this value even differ for different word version, such that 2013, will have different minimum required value, where all other version shares the same logic to calculate minimum width required */\n var border = 0;\n var isBorderValueZero = false;\n var table = void 0;\n var borderThickness = 0;\n var tableHorizontalPosition = void 0;\n if (floatingItem instanceof TableWidget) {\n table = floatingItem;\n tableHorizontalPosition = floatingItem.positioning.horizontalAlignment;\n border = this.getMaximumRightCellBorderWidth(floatingItem);\n isBorderValueZero = this.getDefaultBorderSpacingValue(border, isBorderValueZero, tableHorizontalPosition);\n borderThickness = floatingItem.tableFormat.borders.left.lineWidth / 2;\n }\n // Skip to update when the wrap type as left\n if (rect.x + borderThickness >= textWrappingBounds.x && rect.x < textWrappingBounds.right && textWrappingType !== 'Left') // Skip to update when the wrap type as left\n {\n rect.width = rect.width - (textWrappingBounds.right - rect.x) - rightIndent;\n this.isWrapText = true;\n var isEntityFitInCurrentLine = true;\n if (!isNullOrUndefined(table)) {\n minimumWidthRequired = this.getMinimumWidthRequiredForTable(isBorderValueZero, tableHorizontalPosition, border);\n }\n //checks minimum width\n if (!isEntityFitInCurrentLine || Math.round(rect.width) < minimumWidthRequired || (rect.width < elementBox.width && elementBox.text === '\\t')\n || (textWrappingBounds.x < ownerPara.x + paragraphLeftIndent)) // check whether the TextWrap X position is less than the paragraph X position\n {\n //TODO\n rect.width = this.viewer.clientArea.right - textWrappingBounds.right - (isnewline ? listLeftIndent : 0);\n //checks minimum width of the single word\n var minwidth = 0;\n if (!isNullOrUndefined(currTextRange)) {\n minwidth = this.getMinWidth(elementBox, elementBox.width, elementBox.height, rect);\n }\n else {\n minwidth = elementBox.width;\n }\n if (Math.round(rect.width) < minimumWidthRequired || rect.width < minwidth) {\n if (isEntityFitInCurrentLine && (textWrappingBounds.x - (ownerPara.x + ownerPara.leftIndent)) > minimumWidthRequired\n && (this.viewer.clientArea.right - textWrappingBounds.right) > minimumWidthRequired) {\n rect.width = 0;\n }\n else {\n var topMarginValue = 0;\n //topMarginValue = GetTopMarginValueForFloatingTable(ownerPara,\n //layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var isPositionsUpdated = false;\n //Check whether left side of current floating item has enoush place to fit current widget.\n //If it has, need to fit left side of the floating item, instead of moving to bottom.\n // if (layouter.clientArea.x + elementBox.width < floatingItem.x) {\n // //Current item should preserve below to the floating item,which preserved left side of the floating item.\n // //If left side has multiple items or none of items this may fail, need to handle this cases.\n // let tempBounds: Rect = GetIntersectingItemBounds(floatingItem, yposition);\n // if (tempBounds.bottom !== 0 && tempBounds.bottom <= textWrappingBounds.bottom) {\n // rect.x = clientLayoutArea.x;\n // rect.width = clientLayoutArea.width;\n // rect.y = tempBounds.bottom + topMarginValue;\n // rect.height = clientLayoutArea.bottom - tempBounds.bottom;\n // this.isYPositionUpdated = true;\n // isPositionsUpdated = true;\n // }\n // }\n if (!isPositionsUpdated) {\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (textWrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = textWrappingBounds.bottom + topMarginValue;\n }\n }\n this.viewer.updateClientAreaForTextWrap(rect);\n this.isWrapText = false;\n }\n else {\n var xposition = rect.x;\n //TabsLayoutInfo tabsInfo = null;\n rect.x = textWrappingBounds.right + (isnewline ? listLeftIndent : 0) + firstLineIndent;\n rect.width -= firstLineIndent;\n this.isSkipFirstLineIndent = true;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && elementBox.width > 0) {\n // let topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var topMarginValue = 0;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (textWrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = textWrappingBounds.bottom + topMarginValue;\n rect.x = xposition;\n }\n else {\n // this.isXPositionUpdated = true;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n // if (!(leafWidget is Break))\n // AdjustClientAreaBasedOnExceededTab(leafWidget, size, ref rect, ownerPara);\n // if (leafWidget != null)\n // tabsInfo = (leafWidget as ILeafWidget).LayoutInfo as TabsLayoutInfo;\n //if (tabsInfo == null) {\n //this.isWrapText = true;\n //this.viewer.updateClientAreaForTextWrap(rect);//\n // if (layouter.FloatingItems[i].FloatingEntity is WTable)\n // layouter.FloatingTableBottom = textWrappingBounds.Bottom;\n //}\n }\n }\n else {\n //Check whether the RightPositionOfTabStopInterSectingFloattingItems have the value or not.\n //if contains value means continue the layouting even x position exceeds the page right position.\n var xposition = rect.x;\n rect.x = textWrappingBounds.right + (isnewline ? listLeftIndent : 0) + firstLineIndent;\n rect.width = this.viewer.clientArea.right - textWrappingBounds.right - (isnewline ? listLeftIndent : 0) - firstLineIndent;\n this.isSkipFirstLineIndent = true;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && elementBox.width > 0) {\n // float topMarginValue = GetTopMarginValueForFloatingTable(ownerPara,\n // layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var topMarginValue = 0;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (textWrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = textWrappingBounds.bottom + topMarginValue;\n rect.x = xposition;\n }\n //else\n // this.isXPositionUpdated = true;\n // if (!(leafWidget is Break))\n // AdjustClientAreaBasedOnExceededTab(leafWidget, size, ref rect, ownerPara);\n // //Microsoft Word 2013 doesn't split text character by character, when current line has floating item.\n // if (ownerPara != null && ownerPara.Document.Settings.CompatibilityMode == CompatibilityMode.Word2013)\n // layouter.m_canSplitbyCharacter = false;\n this.isWrapText = true;\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n else if (textWrappingBounds.x >= rect.x && rect.right > textWrappingBounds.x) {\n rect.width = textWrappingBounds.x - rect.x - rightIndent;\n //Remaining right side width\n var remainingClientWidth = this.viewer.clientArea.right - textWrappingBounds.right;\n remainingClientWidth = remainingClientWidth > 0 ? remainingClientWidth : 0;\n this.isWrapText = true;\n var isUpdateClientArea = false;\n //checks minimum width\n var minwidth = 0;\n if (!isNullOrUndefined(currTextRange)) {\n minwidth = this.getMinWidth(currTextRange, elementBox.width, elementBox.height, rect);\n }\n else {\n minwidth = elementBox.width;\n }\n if (!isNullOrUndefined(table)) {\n minimumWidthRequired = this.getMinimumWidthRequiredForTable(isBorderValueZero, tableHorizontalPosition, border);\n }\n if (this.isNeedDoIntermediateWrapping(remainingClientWidth, textWrappingType, rect, elementBox.width, elementBox.paragraph, textWrappingBounds, elementBox, minwidth, minimumWidthRequired)) {\n var leftMinimumWidthRequired = 24;\n rect.width = remainingClientWidth;\n this.isWrapText = true;\n if (rect.x + minwidth > textWrappingBounds.x || textWrappingType === 'Right' || clientLayoutArea.x > textWrappingBounds.x - leftMinimumWidthRequired) //Update X position when the wrap type as largest or right or the minimum width + rect.X > wrap x position\n {\n rect.x = textWrappingBounds.right;\n // let listFormat: WListFormat = null;\n // let listLevel: WListLevel = null;\n // if (elementBox.line.isFirstLine\n // && (listFormat = ownerPara.GetListFormatValue()) != null\n // && listFormat.CurrentListStyle != null\n // && (listLevel = ownerPara.GetListLevel(listFormat)) != null\n // && listLevel.ParagraphFormat.LeftIndent != 0)\n // {\n // float x = 0;\n // float width = rect.Width;\n // //Updates the paragraph firstline horizontal positions, such as first line indent and listtab value\n // UpdateParaFirstLineHorizontalPositions(paragraphLayoutInfo, ownerPara, ref x, ref width);\n // rect.X += (x + (float)paragraphLayoutInfo.Margins.Left);\n // rect.Width -= (x + (float)paragraphLayoutInfo.Margins.Left);\n // }\n // this.isXPositionUpdated = true;\n // if (textWrappingStyle == TextWrappingStyle.Through\n // && layouter.FloatingItems[i].IsDoesNotDenotesRectangle) {\n // UpdateXposition(textWrappingBounds, i, ref rect, size, minwidth);\n // }\n if (rect.width > minwidth || textWrappingType === 'Right') {\n this.viewer.updateClientAreaForTextWrap(rect);\n }\n else if (rect.width < minwidth && elementBox.line.children[0] !== elementBox && textWrappingType === 'Both' && floatingItem instanceof ShapeBase) {\n this.viewer.updateClientAreaForTextWrap(rect);\n isUpdateClientArea = true;\n }\n }\n if ((rect.width < minimumWidthRequired && !(minwidth < remainingClientWidth && ('Tight' === textWrappingStyle)))\n || (rect.width < minwidth && Math.round(rect.right) === Math.round(this.viewer.clientArea.right)\n && textWrappingType === 'Both')) {\n var rect1 = textWrappingBounds;\n if (Math.round(rect.x) === Math.round(bodyWidget.sectionFormat.leftMargin + ownerPara.paragraphFormat.leftIndent)) {\n //Updates top margin of the paragraph when paragraph mark not wrap based on the floating table.\n var topMarginValue = 0;\n //topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, floatingItem, rect.y);\n rect.y = rect1.bottom + topMarginValue;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height = rect.height - (rect1.height + topMarginValue);\n this.viewer.updateClientAreaForTextWrap(rect);\n this.isWrapText = false;\n }\n // Reset the rectangle position when the rectangle right position is equialent to layout area right position\n else if (!isUpdateClientArea && Math.round(rect.right) >= Math.round(this.viewer.clientArea.right) && textWrappingType === 'Both') {\n //Updates top margin of the paragraph when paragraph mark not wrap based on the floating table.\n var topMarginValue = 0;\n // topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, floatingItem, rect.y);\n rect.y = rect1.bottom + topMarginValue;\n rect.width = this.viewer.clientArea.width;\n rect.height = rect.height - (rect1.height + topMarginValue);\n rect.x = this.viewer.clientArea.x + leftIndent;\n this.viewer.updateClientAreaForTextWrap(rect);\n // this.isXPositionUpdated = true;\n this.isYPositionUpdated = true;\n this.isWrapText = false;\n }\n else {\n rect.width = 0;\n this.viewer.updateClientAreaForTextWrap(rect);\n }\n }\n }\n else {\n //While text intersecting with SQUARE type floating item and there is no space\n //available to fit this text in current line then move the text to bottom\n //of the floating item and this behavior is applicable only for Word 2013.\n //Lower versions split the text character by character.\n if ((elementBox.line.isFirstLine() && elementBox.indexInOwner === 0 || remainingClientWidth === 0 && elementBox.line.children[0] === elementBox) && textWrappingStyle === 'Square'\n && Math.round(rect.width) <= Math.round(minwidth)\n && ownerPara.containerWidget === containerWidget) {\n rect.x = clientLayoutArea.x;\n rect.y = textWrappingBounds.bottom;\n rect.width = clientLayoutArea.width;\n rect.height -= (textWrappingBounds.bottom - rect.y);\n this.isYPositionUpdated = true;\n }\n else if (Math.round(rect.width) <= Math.round(minwidth) && Math.round(rect.x - leftIndent) !== Math.round(this.viewer.clientArea.x)) {\n rect.width = 0;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n if (textWrappingType !== 'Both') {\n this.isWrapText = false;\n }\n }\n else if (this.isNeedToWrapForTopAndBottom(ownerPara, elementBox, -1, -1, textWrappingStyle, textWrappingBounds, allowOverlap, 1, floatingItem, false, rect, elementBox.width, elementBox.height)) {\n // if ((textWrappingStyle === TextWrappingStyle.Tight || textWrappingStyle === TextWrappingStyle.Through)\n // && !(this.getBaseEntity(layouter.floatingItems[i].floatingEntity) instanceof HeaderFooter)\n // && !layouter.floatingItems[i].isDoesNotDenotesRectangle) {\n // //Gets the exact tight and throught floatting item's bottom position.\n // let floattingItemBottomPosition = this.getFloattingItemBottom(layouter.floatingItems[i].floatingEntity, textWrappingBounds.bottom);\n // textWrappingBounds = this.getBottomPositionForTightAndThrough(floattingItemBottomPosition, textWrappingBounds, ownerPara, rect.y, size.height);\n // }\n //Updates top margin of the paragraph when paragraph mark not wrap based on the floating table.\n var topMarginValue = 0;\n // topMarginValue = this.getTopMarginValueForFloatingTable(ownerPara,\n // layouter.floatingItems[i].floatingEntity, rect.y);\n //previous floating item y position.\n var prevY = rect.y;\n rect.y = textWrappingBounds.bottom + topMarginValue;\n this.isYPositionUpdated = true;\n //Updating the rectangle height by reducing the previous floating item's y from the current floating item's bottom.\n rect.height = rect.height - (textWrappingBounds.bottom - prevY + topMarginValue);\n //Update the before spacing value once sets the floating item bottom position as paragraph y position\n if (rect.y !== yposition && elementBox instanceof TextElementBox && !(floatingItem instanceof TableWidget)\n && elementBox.line.isFirstLine()) {\n rect.y += elementBox.margin.top;\n yposition = rect.y;\n }\n this.viewer.updateClientAreaForTextWrap(rect);\n }\n }\n }\n }\n return rect;\n };\n Layout.prototype.adjustClientAreaBasedOnTextWrapForTable = function (table, rect) {\n //let ownerPara: ParagraphWidget = elementBox.line.paragraph;\n if (isNullOrUndefined(table.containerWidget) || isNullOrUndefined(table.bodyWidget)) {\n return rect;\n }\n var bodyWidget = table.bodyWidget;\n var yValue = 0;\n var layouter = this.viewer;\n var yposition = rect.y;\n var isFirstItem = isNullOrUndefined(table.previousWidget);\n if (isFirstItem) {\n yValue = yposition;\n }\n if (bodyWidget.floatingElements.length > 0) {\n var clientLayoutArea = layouter.clientActiveArea;\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n bodyWidget.floatingElements.sort(function (a, b) { return a.x - b.x; });\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatingElement = bodyWidget.floatingElements[i];\n var allowOverlap = false;\n if (floatingElement instanceof ShapeBase) {\n allowOverlap = floatingElement.allowOverlap;\n }\n else {\n allowOverlap = floatingElement.positioning.allowOverlap;\n }\n if (table.isInsideTable) {\n if (floatingElement instanceof TableWidget && !floatingElement.isInsideTable) {\n continue;\n }\n }\n if (floatingElement instanceof TableWidget && floatingElement.wrapTextAround && floatingElement.positioning.allowOverlap) {\n if (table.wrapTextAround && table.positioning.allowOverlap) {\n continue;\n }\n }\n var tableWidth = table.getTableCellWidth();\n var isShape = floatingElement instanceof ShapeBase;\n var distanceLeft = isShape ? floatingElement.distanceLeft : floatingElement.positioning.distanceLeft;\n var distanceTop = isShape ? floatingElement.distanceTop : floatingElement.positioning.distanceTop;\n var distanceRight = isShape ? floatingElement.distanceRight : floatingElement.positioning.distanceRight;\n var distanceBottom = isShape ? floatingElement.distanceBottom : floatingElement.positioning.distanceBottom;\n var width = isShape ? floatingElement.width : floatingElement.getTableCellWidth();\n var wrappingBounds = new Rect(floatingElement.x - distanceLeft, floatingElement.y - distanceTop, width + distanceLeft + distanceRight, floatingElement.height + distanceTop + distanceBottom);\n var textWrappingStyle = floatingElement instanceof TableWidget ? 'Square' : floatingElement.textWrappingStyle;\n var textWrappingType = floatingElement instanceof TableWidget ? 'Both' : floatingElement.textWrappingType;\n var minimumWidthRequired = 24;\n var tableHeight = table.childWidgets.length > 0 ? table.childWidgets[0].rowFormat.height : 0;\n var lastNestedTable = this.getNestedTable(table);\n var characterFormat = lastNestedTable.firstChild.firstChild.firstChild.characterFormat;\n var size = this.documentHelper.textHelper.measureText(\" \", characterFormat);\n if (tableHeight < size.Height) {\n tableHeight = size.Height;\n }\n if (!(clientLayoutArea.x > (wrappingBounds.right + minimumWidthRequired) || clientLayoutArea.right < wrappingBounds.x - minimumWidthRequired)) {\n if (this.isNeedToWrapForSquareTightAndThroughForTable(bodyWidget, table, -1, -1, textWrappingStyle, wrappingBounds, allowOverlap, 1, floatingElement, false, rect, tableWidth, tableHeight)) {\n // Skip to update when the wrap type as left\n if (rect.x >= wrappingBounds.x && rect.x < wrappingBounds.right && textWrappingType !== 'Left') // Skip to update when the wrap type as left\n {\n rect.width = rect.width - (wrappingBounds.right - rect.x);\n this.isWrapText = true;\n var isEntityFitInCurrentLine = true;\n if (!isEntityFitInCurrentLine || Math.round(rect.width) < minimumWidthRequired || (rect.width < tableWidth)\n || (wrappingBounds.x < table.x)) // check whether the TextWrap X position is less than the paragraph X position\n {\n rect.width = this.viewer.clientArea.right - wrappingBounds.right;\n var minwidth = tableWidth;\n if (Math.round(rect.width) < minimumWidthRequired || rect.width < minwidth) {\n if (isEntityFitInCurrentLine && (wrappingBounds.x - (table.x)) > minimumWidthRequired\n && (this.viewer.clientArea.right - wrappingBounds.right) > minimumWidthRequired) {\n rect.width = 0;\n }\n else {\n var topMarginValue = 0;\n var isPositionsUpdated = false;\n if (!isPositionsUpdated) {\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (wrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = wrappingBounds.bottom + topMarginValue;\n }\n }\n this.viewer.updateClientAreaForTextWrap(rect);\n this.isWrapText = false;\n }\n else {\n var xposition = rect.x;\n //TabsLayoutInfo tabsInfo = null;\n rect.x = wrappingBounds.right;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && tableWidth > 0) {\n // let topMarginValue = GetTopMarginValueForFloatingTable(ownerPara, layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var marginTop = 0;\n this.isYPositionUpdated = true;\n rect.height -= (wrappingBounds.bottom + marginTop - rect.y);\n rect.width = this.viewer.clientArea.width;\n rect.y = wrappingBounds.bottom + marginTop;\n rect.x = xposition;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n else {\n var xposition = rect.x;\n rect.x = wrappingBounds.right + table.firstChild.firstChild.leftMargin;\n rect.width = this.viewer.clientArea.right - wrappingBounds.right;\n //When there is no space to fit the content in right, then update the y position.\n if (textWrappingStyle === 'Square' && rect.width < 0 && tableWidth > 0) {\n // float topMarginValue = GetTopMarginValueForFloatingTable(ownerPara,\n // layouter.FloatingItems[i].FloatingEntity, rect.Y);\n var topMarginValue = 0;\n this.isYPositionUpdated = true;\n rect.width = this.viewer.clientArea.width;\n rect.height -= (wrappingBounds.bottom + topMarginValue - rect.y);\n rect.y = wrappingBounds.bottom + topMarginValue;\n rect.x = xposition;\n }\n this.viewer.updateClientAreaForTextWrap(rect); //\n }\n }\n }\n }\n }\n }\n return rect;\n };\n Layout.prototype.getNestedTable = function (tableWidget) {\n var table = tableWidget;\n while (table.firstChild.firstChild.firstChild instanceof TableWidget) {\n table = table.firstChild.firstChild.firstChild;\n }\n return table;\n };\n Layout.prototype.startAt = function (element, text) {\n if (element.footnoteType === 'Footnote') {\n this.startat = element.paragraph.bodyWidget.sectionFormat.initialFootNoteNumber;\n text = this.getFootEndNote(element.paragraph.bodyWidget.sectionFormat.footNoteNumberFormat, this.documentHelper.footnoteCollection.indexOf(element) + this.startat);\n }\n else {\n this.startat = element.paragraph.bodyWidget.sectionFormat.initialEndNoteNumber;\n text = this.getFootEndNote(element.paragraph.bodyWidget.sectionFormat.endnoteNumberFormat, this.documentHelper.endnoteCollection.indexOf(element) + this.startat);\n }\n return text;\n };\n Layout.prototype.layoutFootEndNoteElement = function (element) {\n this.isFootnoteContentChanged = true;\n var footnote;\n var positionchanged = false;\n var footIndex = this.documentHelper.footnoteCollection.indexOf(element);\n var insertIndex = 1;\n this.islayoutFootnote = true;\n var isFitted;\n var clientArea = new Rect(this.viewer.clientArea.x, this.viewer.clientArea.y, this.viewer.clientArea.width, this.viewer.clientArea.height);\n var clientActiveArea = new Rect(this.viewer.clientActiveArea.x, this.viewer.clientActiveArea.y, this.viewer.clientActiveArea.width, this.viewer.clientActiveArea.height);\n var bodyWidget = element.paragraph.bodyWidget;\n var isCreated = false;\n var height = 0;\n if (bodyWidget.page.footnoteWidget) {\n for (var j = 0; j < bodyWidget.page.footnoteWidget.bodyWidgets.length; j++) {\n insertIndex = bodyWidget.page.footnoteWidget.bodyWidgets.length;\n var currentIndex = this.documentHelper.footnoteCollection.indexOf((bodyWidget.page.footnoteWidget.bodyWidgets[j]).footNoteReference);\n if (currentIndex > footIndex) {\n if (currentIndex - footIndex === 1) {\n insertIndex = j;\n positionchanged = true;\n break;\n }\n }\n }\n }\n element.isLayout = true;\n if (element.footnoteType === 'Footnote') {\n if (bodyWidget.page.footnoteWidget && bodyWidget.page.footnoteWidget instanceof FootNoteWidget) {\n footnote = bodyWidget.page.footnoteWidget;\n }\n else {\n isCreated = true;\n footnote = new FootNoteWidget();\n footnote.footNoteType = 'Footnote';\n footnote.page = bodyWidget.page;\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = new WCharacterFormat();\n newParagraph.paragraphFormat = new WParagraphFormat();\n newParagraph.index = 0;\n var lineWidget = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(lineWidget);\n height = this.documentHelper.textHelper.getParagraphMarkSize(newParagraph.characterFormat).Height;\n footnote.margin = new Margin(0, height, 0, 0);\n }\n this.isFootNoteLayoutStart = true;\n if (isCreated) {\n bodyWidget.page.footnoteWidget = footnote;\n }\n var body = element.bodyWidget;\n this.viewer.updateClientArea(footnote, footnote.page);\n this.viewer.clientArea.y = clientArea.y;\n this.viewer.clientActiveArea.y = clientActiveArea.y;\n for (var i = 0; i < element.bodyWidget.childWidgets.length; i++) {\n var block = element.bodyWidget.childWidgets[i];\n block.containerWidget = body;\n body.page = bodyWidget.page;\n body.sectionFormat = footnote.sectionFormat;\n block.containerWidget.containerWidget = footnote;\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n }\n this.layoutBlock(block, 0);\n height += block.height;\n block.y = 0;\n this.viewer.updateClientAreaForBlock(block, false);\n body.height += block.height;\n }\n if (footnote.sectionFormat.columns.length > 1 && !(footnote.bodyWidgets.length === 0 && body.childWidgets.length <= 1 && body.childWidgets[0].childWidgets.length <= 1)) {\n height = (height / footnote.sectionFormat.numberOfColumns);\n }\n this.isFootNoteLayoutStart = false;\n isFitted = false;\n if (height >= clientActiveArea.height) {\n this.isfootMove = true;\n }\n if (positionchanged) {\n footnote.bodyWidgets.splice(insertIndex, 0, body);\n }\n else {\n footnote.bodyWidgets.push(body);\n }\n if (element.line.paragraph.isInsideTable) {\n var table = this.getParentTable(element.line.paragraph.associatedCell.ownerTable);\n if (isNullOrUndefined(table.footnoteElement)) {\n table.footnoteElement = [];\n }\n if (table.footnoteElement.indexOf(element) == -1) {\n table.footnoteElement.push(element);\n this.layoutedFootnoteElement.push(element);\n }\n }\n footnote.height += height;\n isFitted = true;\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientActiveArea.height -= height;\n this.footnoteHeight += height;\n this.viewer.clientArea = clientArea;\n }\n return isFitted;\n };\n Layout.prototype.layoutEndNoteElement = function () {\n var totalPage = this.documentHelper.pages.length;\n if (this.documentHelper.endnoteCollection.length > 0) {\n var foot = void 0;\n var endNote = void 0;\n var isCreated = void 0;\n var lastPage = this.documentHelper.pages[totalPage - 1];\n var bodyWidget = lastPage.bodyWidgets[0];\n var lastSection = lastPage.bodyWidgets[lastPage.bodyWidgets.length - 1];\n if (this.viewer instanceof PageLayoutViewer && lastSection.sectionFormat.numberOfColumns > 1) {\n var firstSection = this.getBodyWidget(lastSection, true);\n this.splitBodyWidgetBasedOnColumn(firstSection);\n }\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n foot = this.documentHelper.endnoteCollection[i];\n if (bodyWidget.page.endnoteWidget instanceof FootNoteWidget && bodyWidget.page.endnoteWidget.footNoteType === 'Endnote') {\n endNote = bodyWidget.page.endnoteWidget;\n }\n else {\n isCreated = true;\n endNote = new FootNoteWidget();\n endNote.footNoteType = 'Endnote';\n endNote.page = bodyWidget.page;\n }\n var body = foot.bodyWidget;\n body.page = endNote.page;\n for (var j = 0; j < foot.bodyWidget.childWidgets.length; j++) {\n var block = foot.bodyWidget.childWidgets[j];\n block.containerWidget = body;\n block.containerWidget.containerWidget = endNote;\n }\n if (endNote.bodyWidgets.indexOf(body) === -1) {\n endNote.bodyWidgets.push(body);\n body.sectionFormat = endNote.page.bodyWidgets[endNote.page.bodyWidgets.length - 1].sectionFormat;\n }\n if (isCreated) {\n bodyWidget.page.endnoteWidget = endNote;\n }\n }\n this.layoutfootNote(endNote);\n }\n };\n Layout.prototype.hasValidElement = function (paragraph) {\n var line = paragraph.firstChild;\n if (line && !isNullOrUndefined(this.documentHelper.selection)) {\n var elementBox = line.children[0];\n while (elementBox) {\n if (elementBox instanceof FieldElementBox) {\n elementBox = this.documentHelper.selection.getNextValidElementForField(elementBox);\n if (!isNullOrUndefined(elementBox) && !elementBox.line.paragraph.equals(paragraph)) {\n return false;\n }\n }\n if (elementBox instanceof TextElementBox || elementBox instanceof ImageElementBox) {\n return true;\n }\n if (!isNullOrUndefined(elementBox)) {\n elementBox = elementBox.nextNode;\n }\n }\n }\n return false;\n };\n Layout.prototype.updateFieldText = function (element) {\n var text = this.documentHelper.getFieldResult(element.fieldBegin, element.paragraph.bodyWidget.page);\n if (text !== '') {\n element.text = text;\n this.documentHelper.textHelper.getTextSize(element, element.characterFormat);\n }\n };\n Layout.prototype.checkLineWidgetWithClientArea = function (line, element) {\n if (line !== element.line || element.line === line && isNullOrUndefined(element.nextElement)\n && !element.line.isLastLine()) {\n this.moveToNextLine(line);\n if (this.documentHelper.compatibilityMode !== 'Word2013' && this.isOverlapFloatTable) {\n var table = void 0;\n if (element.line.paragraph.previousRenderedWidget instanceof TableWidget && element.line.paragraph.previousRenderedWidget.wrapTextAround) {\n table = element.line.paragraph.previousRenderedWidget;\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n this.viewer.clientActiveArea.x += line.paragraph.leftIndent;\n this.isOverlapFloatTable = false;\n }\n if (line !== element.line) {\n this.isRTLLayout = false;\n }\n }\n if (element.line !== line && this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height &&\n this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n this.moveToNextPage(this.viewer, element.line);\n }\n else if (element.line === line && isNullOrUndefined(element.nextElement)\n && line.paragraph.lastChild === line && !line.isLastLine() && this.viewer.clientActiveArea.height >= 0) {\n this.moveFromNextPage(line);\n }\n };\n Layout.prototype.checkAndSplitTabOrLineBreakCharacter = function (text, element) {\n var char = ['\\t', '\\v', '\\f'];\n var index = HelperMethods.indexOfAny(text, char);\n if (index > -1) {\n var character = text[index];\n if ((character === '\\t' && text !== '\\t') || (character === '\\v' && text !== '\\v')\n || (character === '\\f' && text !== '\\f')) {\n this.splitByLineBreakOrTab(this.viewer, element, index, character);\n }\n }\n };\n Layout.prototype.moveFromNextPage = function (line) {\n var nextLine = line.nextLine;\n if (nextLine && line.paragraph.childWidgets.indexOf(nextLine) === -1) {\n var splittedParagraph = nextLine.paragraph;\n nextLine.paragraph.childWidgets.splice(nextLine.indexInOwner, 1);\n line.paragraph.childWidgets.push(nextLine);\n nextLine.paragraph = line.paragraph;\n // this.updateLinearIndex(nextLine.paragraph);\n if (splittedParagraph.childWidgets.length === 0) {\n splittedParagraph.destroy();\n }\n else {\n // this.updateLinearIndex(splittedParagraph);\n }\n }\n };\n Layout.prototype.cutClientWidth = function (currentElement, isNeedToLayoutShape) {\n if (this.is2013Justification) {\n return false;\n }\n this.clearLineMeasures();\n var line = currentElement.line;\n line.marginTop = 0;\n var width = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (isNeedToLayoutShape && element instanceof ShapeElementBox && element.textWrappingStyle === 'Inline') {\n this.layoutShape(element);\n }\n width += element.width;\n if (currentElement === element) {\n break;\n }\n }\n var splitCurrentWidget = this.viewer.clientActiveArea.width - width < 0;\n var paragarph = currentElement.line.paragraph;\n var bodyWidget = paragarph.bodyWidget;\n if (bodyWidget && bodyWidget.floatingElements.length > 0) {\n this.hasFloatingElement = true;\n this.isXPositionUpdated = true;\n return false;\n }\n if (!splitCurrentWidget) {\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + width);\n if (currentElement.line.paragraph.paragraphFormat.textAlignment === 'Justify' &&\n currentElement instanceof TextElementBox) {\n this.splitTextElementWordByWord(currentElement);\n }\n if (isNullOrUndefined(currentElement.nextElement) && this.viewer.clientActiveArea.width > 0\n && !currentElement.line.isLastLine()) {\n this.moveElementFromNextLine(line);\n }\n }\n else if (currentElement.previousElement) {\n this.cutClientWidth(currentElement.previousElement);\n }\n return splitCurrentWidget;\n };\n Layout.prototype.layoutFieldCharacters = function (element) {\n if (element.fieldType === 0) {\n if (!isNullOrUndefined(element.formFieldData) && this.isInitialLoad) {\n this.checkAndUpdateFieldData(element);\n }\n if (!this.isFieldCode && (!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n if (this.documentHelper.fieldStacks.indexOf(element) === -1) {\n this.documentHelper.fieldStacks.push(element);\n }\n if (this.isRelayout) {\n var fieldCode = HelperMethods.trimEnd(this.documentHelper.selection.getFieldCode(element));\n this.isIFfield = HelperMethods.startsWith(fieldCode, 'IF');\n }\n this.isFieldCode = true;\n element.hasFieldEnd = true;\n }\n }\n else if (this.documentHelper.fieldStacks.length > 0) {\n if (element.fieldType === 2) {\n var field = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n if (field.fieldSeparator === element && (!isNullOrUndefined(field.fieldEnd) || field.hasFieldEnd)) {\n this.isFieldCode = false;\n }\n }\n else {\n var field = this.documentHelper.fieldStacks[this.documentHelper.fieldStacks.length - 1];\n if (element === field.fieldEnd) {\n this.documentHelper.fieldStacks.pop();\n this.isFieldCode = false;\n this.isIFfield = false;\n }\n }\n }\n };\n Layout.prototype.checkAndUpdateFieldData = function (fieldBegin) {\n if (fieldBegin.hasFieldEnd && !isNullOrUndefined(fieldBegin.fieldEnd)) {\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var seperator = new FieldElementBox(2);\n seperator.fieldBegin = fieldBegin;\n seperator.fieldEnd = fieldBegin.fieldEnd;\n seperator.line = fieldBegin.line;\n fieldBegin.line.children.splice(fieldBegin.fieldEnd.indexInOwner, 0, seperator);\n fieldBegin.fieldSeparator = seperator;\n fieldBegin.fieldEnd.fieldSeparator = seperator;\n }\n var previousNode = fieldBegin.fieldEnd.previousNode;\n if (previousNode instanceof FieldElementBox && previousNode.fieldType === 2) {\n var formFieldData = fieldBegin.formFieldData;\n if (formFieldData instanceof CheckBoxFormField) {\n var checkBoxTextElement = new TextElementBox();\n checkBoxTextElement.skipformFieldLength = true;\n checkBoxTextElement.line = fieldBegin.line;\n var index = fieldBegin.line.children.indexOf(fieldBegin.fieldEnd);\n fieldBegin.line.children.splice(index, 0, checkBoxTextElement);\n checkBoxTextElement.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (formFieldData.checked) {\n checkBoxTextElement.text = String.fromCharCode(9745);\n }\n else {\n checkBoxTextElement.text = String.fromCharCode(9744);\n }\n this.setCheckBoxFontSize(formFieldData, checkBoxTextElement.characterFormat);\n }\n else if (formFieldData instanceof DropDownFormField) {\n var dropDownTextElement = new TextElementBox();\n dropDownTextElement.characterFormat.copyFormat(fieldBegin.characterFormat);\n dropDownTextElement.skipformFieldLength = true;\n dropDownTextElement.line = fieldBegin.line;\n if (formFieldData.dropdownItems.length > 0) {\n dropDownTextElement.text = formFieldData.dropdownItems[formFieldData.selectedIndex];\n }\n else {\n dropDownTextElement.text = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n var index = fieldBegin.line.children.indexOf(fieldBegin.fieldEnd);\n fieldBegin.line.children.splice(index, 0, dropDownTextElement);\n }\n }\n }\n };\n /**\n * Set the checkbox font size\n * @returns {void}\n */\n Layout.prototype.setCheckBoxFontSize = function (formFieldData, format) {\n if (formFieldData.sizeType !== 'Auto') {\n format.fontSize = formFieldData.size * CHECK_BOX_FACTOR;\n }\n else {\n format.fontSize = format.fontSize * CHECK_BOX_FACTOR;\n }\n };\n Layout.prototype.layoutEmptyLineWidget = function (paragraph, isEmptyLine, line, isShiftEnter) {\n this.clearLineMeasures();\n var paraFormat = paragraph.paragraphFormat;\n var subWidth = 0;\n var whiteSpaceCount = 0;\n isShiftEnter = isNullOrUndefined(isShiftEnter) ? false : isShiftEnter;\n var borders = paraFormat.borders;\n var canRenderParagraphBorders = this.documentHelper.canRenderBorder(paragraph);\n //Calculate line height and descent based on formatting defined in paragraph.\n var paragraphMarkSize = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var maxHeight = paragraphMarkSize.Height;\n var beforeSpacing = 0;\n var lineWidget;\n if (paragraph.childWidgets.length > 0 && !isShiftEnter) {\n this.isUpdateMarginForCurrentLine(line);\n lineWidget = paragraph.childWidgets[0];\n if (lineWidget.children.length > 0) {\n if ((paraFormat.bidi || this.isContainsRtl(lineWidget))) {\n this.shiftElementsForRTLLayouting(lineWidget, paraFormat.bidi);\n }\n var isParagraphStart = lineWidget.isFirstLine();\n var isParagraphEnd = lineWidget.isLastLine();\n var firstLineIndent = 0;\n if (isParagraphStart) {\n beforeSpacing = this.getBeforeSpacing(paragraph);\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n var textAlignment = paraFormat.textAlignment;\n if (textAlignment !== 'Left' && this.viewer.textWrap\n && (!(textAlignment === 'Justify' && isParagraphEnd)\n || (textAlignment === 'Justify' && paraFormat.bidi))) {\n var getWidthAndSpace = this.getSubWidth(lineWidget, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent, isParagraphEnd);\n subWidth = getWidthAndSpace[0].subWidth;\n whiteSpaceCount = getWidthAndSpace[0].spaceCount;\n }\n }\n }\n else {\n lineWidget = isEmptyLine ? this.addLineWidget(paragraph) : line;\n }\n if (lineWidget.isFirstLine()) {\n beforeSpacing = this.getBeforeSpacing(paragraph);\n }\n if (!isNullOrUndefined(paragraph.containerWidget) && paragraph.bodyWidget.floatingElements.length > 0 &&\n !(paragraph.containerWidget instanceof TextFrame) && !(paragraph.containerWidget instanceof TableCellWidget && paragraph.containerWidget.ownerTable.containerWidget instanceof TextFrame)) {\n var elementBox = new TextElementBox();\n elementBox.line = lineWidget;\n lineWidget.children.push(elementBox);\n elementBox.text = '¶';\n elementBox.characterFormat = paragraph.characterFormat;\n elementBox.width = this.documentHelper.textHelper.getTextSize(elementBox, elementBox.characterFormat);\n this.adjustPosition(elementBox, paragraph.bodyWidget);\n paragraph.x += elementBox.padding.left;\n if (isEmptyLine) {\n this.checkInbetweenShapeOverlap(lineWidget);\n }\n lineWidget.children.splice(elementBox.indexInOwner, 1);\n }\n //isNullOrUndefined(this.viewer.currentHeaderFooter) &&\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < beforeSpacing + maxHeight\n && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y\n && !(lineWidget.isFirstLine() && isNullOrUndefined(lineWidget.paragraph.previousWidget)) && !paragraph.isSectionBreak) {\n this.moveToNextPage(this.viewer, lineWidget);\n }\n //Gets line spacing.\n var lineSpacing = this.getLineSpacing(paragraph, maxHeight);\n //let maxDescent: number = maxHeight - paragraphMarkSize.BaselineOffset;\n //Calculate the bottom position of current line - max height + line spacing.\n if (!isNaN(this.maxTextHeight)\n && maxHeight < this.maxTextHeight) {\n maxHeight = this.maxTextHeight;\n //maxDescent = maxHeight - this.maxTextBaseline;\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var height = maxHeight;\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n else if (lineSpacing > topMargin + height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += HelperMethods.convertPointToPixel(this.getAfterSpacing(paragraph));\n if (borders.top.lineStyle != 'None') {\n if (lineWidget.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n topMargin += HelperMethods.convertPointToPixel(borders.top.lineWidth + borders.top.space);\n }\n }\n if (borders.bottom.lineStyle != 'None') {\n if (lineWidget.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n bottomMargin += HelperMethods.convertPointToPixel(borders.bottom.lineWidth + borders.bottom.space);\n }\n }\n var renderedElements = lineWidget.renderedElements;\n for (var i = 0; i < renderedElements.length; i++) {\n var element = renderedElements[i];\n if (i === 0 && element instanceof ListTextElementBox || (paragraph.paragraphFormat.bidi && renderedElements[renderedElements.length - 1] instanceof ListTextElementBox)) {\n var textAlignment = paragraph.paragraphFormat.textAlignment;\n if (textAlignment === 'Right') { //Aligns the text as right justified.\n leftMargin = subWidth;\n }\n else if (textAlignment === 'Center') { //Aligns the text as center justified.\n leftMargin = subWidth / 2;\n }\n element.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n element.line = lineWidget;\n lineWidget.height = topMargin + height + bottomMargin;\n break;\n }\n }\n lineWidget.margin = new Margin(0, topMargin, 0, bottomMargin);\n lineWidget.height = topMargin + height + bottomMargin;\n this.adjustPositionBasedOnTopAndBottom(lineWidget);\n if (isNullOrUndefined(paragraph.nextRenderedWidget) && paragraph.isInsideTable\n && paragraph.previousRenderedWidget instanceof TableWidget && paragraph.childWidgets.length == 1) {\n //Special behavior for empty cell mark after nested table, preserved with zero height by default.\n //Empty line is displayed in cell for the last empty paragraph (Cell mark - last paragraph in cell) after a nested table.\n lineWidget.height = 0;\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + lineWidget.height);\n this.wrapPosition = [];\n //Clears the previous line elements from collection.\n };\n Layout.prototype.isUpdateMarginForCurrentLine = function (line) {\n var isUpdate = true;\n if (!isNullOrUndefined(line) && !line.isFirstLine()) {\n for (var i = 0; i < line.children.length; i++) {\n if (!(line.children[i] instanceof EditRangeStartElementBox || line.children[i] instanceof EditRangeEndElementBox)) {\n isUpdate = false;\n break;\n }\n }\n if (isUpdate) {\n line.margin = new Margin(0, 0, 0, 0);\n }\n }\n };\n Layout.prototype.adjustPositionBasedOnTopAndBottom = function (lineWidget) {\n if (!isNullOrUndefined(lineWidget.paragraph.bodyWidget) && !isNullOrUndefined(lineWidget.paragraph.bodyWidget.page.headerWidget)\n && lineWidget.paragraph.bodyWidget.page.headerWidget.floatingElements.length > 0\n && lineWidget.paragraph === lineWidget.paragraph.bodyWidget.childWidgets[0]\n && lineWidget.indexInOwner === 0) {\n //To check whether first para in the page overlaps with shape in Header.\n this.checkInbetweenShapeOverlap(lineWidget, lineWidget.paragraph.bodyWidget.page.headerWidget.floatingElements);\n }\n };\n Layout.prototype.layoutListItems = function (paragraph, isUpdatedList) {\n if (!this.isFieldCode) {\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)\n && !isNullOrUndefined(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId)) &&\n paragraph.paragraphFormat.listFormat.listLevelNumber >= 0\n && paragraph.paragraphFormat.listFormat.listLevelNumber < 9 && !isUpdatedList) {\n this.clearListElementBox(paragraph);\n this.layoutList(paragraph, this.documentHelper);\n }\n else if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId === -1) {\n this.clearListElementBox(paragraph);\n }\n }\n };\n Layout.prototype.layoutList = function (paragraph, documentHelper) {\n var list = documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n var listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n var currentListLevel = this.getListLevel(list, listLevelNumber);\n if (isNullOrUndefined(currentListLevel) || isNullOrUndefined(currentListLevel.numberFormat)) {\n return;\n }\n var lineWidget = paragraph.childWidgets[0];\n if (isNullOrUndefined(lineWidget)) {\n lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n }\n var element = new ListTextElementBox(currentListLevel, false);\n element.line = lineWidget;\n if (currentListLevel.listLevelPattern === 'Bullet') {\n element.text = currentListLevel.numberFormat;\n this.updateListValues(list, listLevelNumber);\n }\n else {\n element.text = this.getListNumber(paragraph.paragraphFormat.listFormat);\n }\n if (currentListLevel.numberFormat === '') {\n return;\n }\n this.viewer.updateClientWidth(-HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n if (this.documentHelper.isIosDevice) {\n var text = element.text;\n text = text === String.fromCharCode(61623) ? String.fromCharCode(9679) : text === String.fromCharCode(61551) + String.fromCharCode(32) ? String.fromCharCode(9675) : text;\n if (text !== element.text) {\n element.text = text;\n }\n }\n documentHelper.textHelper.updateTextSize(element, paragraph);\n var moveToNextPage;\n if (this.viewer instanceof PageLayoutViewer\n && this.viewer.clientActiveArea.height < element.height && this.viewer.clientActiveArea.y !== this.viewer.clientArea.y) {\n moveToNextPage = true;\n }\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n var previousElement = element;\n //Adds the text element to the line\n lineWidget.children.splice(0, 0, element);\n if (currentListLevel.followCharacter !== 'None') {\n element = new ListTextElementBox(currentListLevel, true);\n if (currentListLevel.followCharacter === 'Tab') {\n element.text = '\\t';\n var index = lineWidget.children.indexOf(element);\n var tabWidth = this.getTabWidth(paragraph, this.viewer, index, lineWidget, element);\n documentHelper.textHelper.updateTextSize(element, paragraph);\n element.width = tabWidth;\n }\n else {\n element.text = ' ';\n documentHelper.textHelper.updateTextSize(element, paragraph);\n }\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n //Adds the tabSpace to the line\n lineWidget.children.splice(1, 0, element);\n element.line = lineWidget;\n }\n if (!isNullOrUndefined(paragraph.containerWidget) && paragraph.bodyWidget.floatingElements.length > 0 &&\n !(previousElement instanceof ShapeElementBox) && !(paragraph.containerWidget instanceof TextFrame)) {\n this.adjustPosition(previousElement, previousElement.line.paragraph.bodyWidget);\n if (this.isYPositionUpdated) {\n if (this.viewer.clientActiveArea.width > (previousElement.width + element.width)) {\n this.viewer.clientActiveArea.width -= (previousElement.width + element.width);\n }\n this.isYPositionUpdated = false;\n }\n }\n if (moveToNextPage) {\n this.moveToNextPage(this.viewer, lineWidget, undefined, true);\n this.cutClientWidth(element);\n this.hasFloatingElement = false;\n this.isXPositionUpdated = false;\n return;\n }\n if (currentListLevel.followCharacter !== 'None') {\n this.viewer.updateClientWidth(HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent));\n }\n };\n Layout.prototype.addBodyWidget = function (area, widget) {\n var bodyWidget;\n if (widget) {\n bodyWidget = widget;\n }\n else {\n bodyWidget = new BodyWidget();\n }\n bodyWidget.width = area.width;\n bodyWidget.x = area.x;\n bodyWidget.y = area.y;\n // this.addSectionInDictionary(this.viewer, section, bodyWidget);\n return bodyWidget;\n };\n /**\n * @private\n */\n Layout.prototype.addListLevels = function (abstractList) {\n for (var i = abstractList.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractList);\n var val = i % 3;\n if (abstractList.levels[0].listLevelPattern === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = val === 0 ? String.fromCharCode(61623) : val === 1 ? String.fromCharCode(61551) + String.fromCharCode(32) : String.fromCharCode(61607);\n listLevel.characterFormat.fontFamily = listLevel.numberFormat === String.fromCharCode(61607) ? 'Wingdings' : 'Symbol';\n }\n else {\n listLevel.listLevelPattern = this.getListLevelPattern(val);\n listLevel.numberFormat = '%' + (i + 1).toString() + '.';\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n listLevel.paragraphFormat = new WParagraphFormat(undefined);\n listLevel.paragraphFormat.leftIndent = 48 * (i + 1);\n listLevel.paragraphFormat.firstLineIndent = -24;\n abstractList.levels.push(listLevel);\n }\n };\n Layout.prototype.addSplittedLineWidget = function (lineWidget, elementIndex, splittedElementBox) {\n var index = elementIndex;\n if (this.isWrapText) {\n if (!isNullOrUndefined(splittedElementBox)) {\n lineWidget.children.splice(index + 1, 0, splittedElementBox);\n splittedElementBox.line = lineWidget;\n }\n return;\n }\n var columneBreak = false;\n var paragraph = lineWidget.paragraph;\n var movedElementBox = [];\n var lineIndex = paragraph.childWidgets.indexOf(lineWidget);\n if (!isNullOrUndefined(splittedElementBox)) {\n movedElementBox.push(splittedElementBox);\n }\n var newLineWidget = undefined;\n var previousElement = lineWidget.children[index];\n if (previousElement instanceof CommentCharacterElementBox && previousElement.commentType === 0 && index != 0) {\n index = index - 1;\n }\n else if (previousElement.isColumnBreak && isNullOrUndefined(previousElement.nextNode)) {\n columneBreak = true;\n }\n //Move Next element box to temp collection\n for (var i = index + 1; i < lineWidget.children.length; i++) {\n movedElementBox.push(lineWidget.children[i]);\n }\n if (movedElementBox.length > 0 || columneBreak) {\n if (lineIndex === paragraph.childWidgets.length - 1) {\n newLineWidget = new LineWidget(paragraph);\n }\n else {\n newLineWidget = paragraph.childWidgets[lineIndex + 1];\n }\n for (var j = 0; j < movedElementBox.length; j++) {\n movedElementBox[j].line = newLineWidget;\n }\n if (movedElementBox.length > 0) {\n lineWidget.children.splice(index + 1, lineWidget.children.length - 1);\n if (!isNullOrUndefined(lineWidget.layoutedElements) && lineWidget.layoutedElements.length > 0) {\n lineWidget.layoutedElements.splice(index + 1, lineWidget.layoutedElements.length - 1);\n }\n newLineWidget.children = movedElementBox.concat(newLineWidget.children);\n }\n if (paragraph.childWidgets.indexOf(newLineWidget) === -1) {\n paragraph.childWidgets.splice(lineIndex + 1, 0, newLineWidget);\n }\n }\n };\n Layout.prototype.addElementToLine = function (paragraph, element) {\n if (!(element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n if (this.isWrapText) {\n this.isWrapText = false;\n this.viewer.clientActiveArea.width = this.viewer.clientArea.right - this.viewer.clientActiveArea.x;\n }\n this.viewer.cutFromLeft(this.viewer.clientActiveArea.x + element.width);\n }\n if (paragraph.paragraphFormat.textAlignment === 'Justify' && element instanceof TextElementBox) {\n this.splitTextElementWordByWord(element);\n }\n if (element instanceof ImageElementBox) {\n element.line.skipClipImage = !element.isInlineImage;\n }\n };\n Layout.prototype.splitElementForClientArea = function (paragraph, element) {\n //const line: LineWidget = element.line;\n if (element.line.children.length > 0) {\n var previousElement = element.previousElement;\n var index = element.indexInOwner;\n // if line widget contain only single image element box need to skip this from splitting\n // else move element to next line\n if (element.line.children.length > 1) {\n if (previousElement && this.viewer.clientActiveArea.x !== this.viewer.clientArea.x) {\n index -= 1;\n }\n }\n this.addSplittedLineWidget(element.line, index);\n }\n };\n Layout.prototype.splitByWord = function (lineWidget, paragraph, elementBox, text, width, characterFormat) {\n var index = this.getSplitIndexByWord(this.viewer.clientActiveArea.width, text, width, characterFormat, elementBox.scriptType);\n if (index > 0 && index < elementBox.length) {\n var indexOf = lineWidget.children.indexOf(elementBox);\n //const lineIndex: number = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElementBox = new TextElementBox();\n text = text.substring(index);\n splittedElementBox.text = text;\n if (text[0] === ' ') {\n var prevLength = text.length;\n text = HelperMethods.trimStart(text); //To trim white space at starting of the text.\n index += prevLength - text.length;\n }\n splittedElementBox.characterFormat.copyFormat(elementBox.characterFormat);\n splittedElementBox.width = this.documentHelper.textHelper.getWidth(splittedElementBox.text, characterFormat, splittedElementBox.scriptType);\n if (splittedElementBox.text[splittedElementBox.text.length - 1] === ' ') {\n splittedElementBox.trimEndWidth = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(splittedElementBox.text), characterFormat, splittedElementBox.scriptType);\n }\n else {\n splittedElementBox.trimEndWidth = splittedElementBox.width;\n }\n splittedElementBox.characterRange = elementBox.characterRange;\n //splittedElementBox.revisions = splittedElementBox.revisions;\n elementBox.text = elementBox.text.substr(0, index);\n if (elementBox.text !== ' ' && HelperMethods.endsWith(elementBox.text) && characterFormat.bidi\n && elementBox.characterRange === CharacterRangeType.RightToLeft && !this.isWrapText) {\n var textElement = this.spitTextElementByWhitespace(elementBox, characterFormat);\n indexOf = lineWidget.children.indexOf(textElement);\n }\n elementBox.width = this.documentHelper.textHelper.getWidth(elementBox.text, elementBox.characterFormat, elementBox.scriptType);\n if (elementBox.text[elementBox.text.length - 1] === ' ') {\n elementBox.trimEndWidth = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(elementBox.text), elementBox.characterFormat, elementBox.scriptType);\n }\n else {\n elementBox.trimEndWidth = elementBox.width;\n }\n if (elementBox.revisions.length > 0) {\n this.updateRevisionForSplittedElement(elementBox, splittedElementBox, true);\n splittedElementBox.isMarkedForRevision = elementBox.isMarkedForRevision;\n }\n splittedElementBox.height = elementBox.height;\n splittedElementBox.baselineOffset = elementBox.baselineOffset;\n this.splitErrorCollection(elementBox, splittedElementBox);\n this.addSplittedLineWidget(lineWidget, indexOf, splittedElementBox);\n this.addElementToLine(paragraph, elementBox);\n if (elementBox.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n };\n Layout.prototype.spitTextElementByWhitespace = function (textElement, format) {\n var lineWidget = textElement.line;\n var indexOf = lineWidget.children.indexOf(textElement);\n var text = textElement.text;\n var elementBox = new TextElementBox();\n var index = text.length - 1;\n textElement.text = text.substring(0, index);\n elementBox.text = text.substring(index);\n elementBox.characterFormat.copyFormat(textElement.characterFormat);\n elementBox.line = lineWidget;\n elementBox.characterRange = CharacterRangeType.WordSplit;\n elementBox.scriptType = FontScriptType.English;\n elementBox.height = textElement.height;\n elementBox.baselineOffset = textElement.baselineOffset;\n elementBox.width = this.documentHelper.textHelper.getWidth(elementBox.text, format, elementBox.scriptType);\n lineWidget.children.splice(indexOf + 1, 0, elementBox);\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, elementBox, index > 0, true);\n elementBox.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n return elementBox;\n };\n Layout.prototype.splitErrorCollection = function (elementBox, splittedBox) {\n if (elementBox.errorCollection.length > 0) {\n var errorCollection = [];\n var ignoreItems = elementBox.ignoreOnceItems;\n for (var i = 0; i < elementBox.errorCollection.length; i++) {\n errorCollection.push(elementBox.errorCollection[i]);\n }\n for (var j = 0; j < elementBox.errorCollection.length; j++) {\n var index = elementBox.text.indexOf(elementBox.errorCollection[j].text);\n var textElement = elementBox.errorCollection[j];\n if (index < 0) {\n errorCollection.splice(0, 1);\n splittedBox.errorCollection.push(textElement);\n }\n else if (splittedBox.text.indexOf(textElement.text) > 0) {\n splittedBox.errorCollection.push(textElement);\n }\n }\n splittedBox.ignoreOnceItems = ignoreItems;\n elementBox.ignoreOnceItems = [];\n elementBox.errorCollection = errorCollection;\n }\n };\n Layout.prototype.splitByCharacter = function (lineWidget, textElement, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n var atleastSpacing = paragraph.paragraphFormat.lineSpacingType === 'AtLeast' ? paragraph.paragraphFormat.afterSpacing : 0;\n var index = this.getTextSplitIndexByCharacter(this.viewer.clientArea.width, this.viewer.clientActiveArea.width, text, width, characterFormat, textElement.scriptType);\n // if the index is zero, no need to split text by character. so, we can avoid the empty text element creation.\n if (index === 0 && textElement.previousNode instanceof ImageElementBox && textElement.previousNode.textWrappingType === \"Right\") {\n return;\n }\n else if (index === 0 && !isNullOrUndefined(textElement) && textElement.length > 0 && (Math.max(textElement.height, atleastSpacing) <= this.viewer.clientArea.height)\n && this.viewer.clientActiveArea.width === 0 && lineWidget.children.indexOf(textElement) === 0) {\n //Eventhough, there is zero remaining client area width and fit atleast one character of word in a line only if there is no item fitted in same line.\n index = 1;\n }\n var splitWidth = 0;\n if (index < textElement.length) {\n splitWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, index), characterFormat, textElement.scriptType);\n text = text.substring(index);\n }\n if (splitWidth > this.viewer.clientActiveArea.width && textElement.indexInOwner > 0) {\n this.addSplittedLineWidget(lineWidget, textElement.indexInOwner - 1);\n return;\n }\n var indexOf = lineWidget.children.indexOf(textElement);\n if (index < textElement.length) {\n //const lineIndex: number = paragraph.childWidgets.indexOf(lineWidget);\n var splittedElement = new TextElementBox();\n splittedElement.text = text;\n splittedElement.errorCollection = textElement.errorCollection;\n textElement.text = textElement.text.substr(0, index);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.width = this.documentHelper.textHelper.getWidth(splittedElement.text, characterFormat, splittedElement.scriptType);\n if (splittedElement.text[splittedElement.text.length - 1] === ' ') {\n splittedElement.trimEndWidth = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(splittedElement.text), characterFormat, splittedElement.scriptType);\n }\n else {\n splittedElement.trimEndWidth = splittedElement.width;\n }\n splittedElement.characterRange = textElement.characterRange;\n textElement.width = this.documentHelper.textHelper.getWidth(textElement.text, characterFormat, textElement.scriptType);\n if (textElement.text[textElement.text.length - 1] === ' ') {\n textElement.trimEndWidth = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(textElement.text), characterFormat, textElement.scriptType);\n }\n else {\n textElement.trimEndWidth = textElement.width;\n }\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n lineWidget.children.splice(textElement.indexInOwner + 1, 0, splittedElement);\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, splittedElement, index > 0);\n splittedElement.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n this.addElementToLine(paragraph, textElement);\n this.addSplittedLineWidget(lineWidget, indexOf);\n if (textElement.width === 0) {\n lineWidget.children.splice(indexOf, 1);\n }\n }\n else {\n //Adds the last text element on inline to line elements collection\n this.addSplittedLineWidget(lineWidget, indexOf);\n this.addElementToLine(paragraph, textElement);\n }\n };\n Layout.prototype.updateRevisionForSplittedElement = function (item, splittedElement, isSplitted, isJustify) {\n if (item.revisions.length > 0) {\n for (var i = 0; i < item.revisions.length; i++) {\n var currentRevision = item.revisions[i];\n if (isSplitted) {\n splittedElement.revisions.push(currentRevision);\n var rangeIndex = currentRevision.range.indexOf(item);\n if (rangeIndex < 0) {\n currentRevision.range.push(splittedElement);\n }\n else {\n if (isJustify) {\n currentRevision.range.splice(rangeIndex, 0, splittedElement);\n }\n else {\n currentRevision.range.splice(rangeIndex + 1, 0, splittedElement);\n }\n }\n }\n else {\n var rangeIndex = currentRevision.range.indexOf(item);\n currentRevision.range.splice(rangeIndex, 1);\n currentRevision.range.splice(rangeIndex, 0, splittedElement);\n splittedElement.revisions.push(currentRevision);\n }\n }\n }\n };\n Layout.prototype.splitTextElementWordByWord = function (textElement) {\n var lineWidget = textElement.line;\n var indexOf = lineWidget.children.indexOf(textElement);\n var startIndex = indexOf;\n var paddingLeft = textElement.padding.left;\n textElement.padding.left = 0;\n var text = textElement.text;\n var format;\n var characterUptoWs = text.trim().indexOf(' ');\n if (characterUptoWs >= 0) {\n lineWidget.children.splice(indexOf, 1);\n format = textElement.characterFormat;\n //const fontSize: number = format.fontSize;\n var index = textElement.length - HelperMethods.trimStart(text).length; //Trim start\n while (index < textElement.length) {\n index = this.getTextIndexAfterSpace(text, index);\n if (index === 0 || index === textElement.length) {\n break;\n }\n if (index < textElement.length) {\n var splittedElement = new TextElementBox();\n var splittedText = text.substring(0, index);\n text = text.substring(index);\n if (text.substring(0, 1) === ' ') {\n // start of the text is trimmed and its length is reduced from text length.\n index += text.length - HelperMethods.trimStart(text).length;\n }\n splittedElement.text = splittedText;\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.line = lineWidget;\n splittedElement.height = textElement.height;\n splittedElement.baselineOffset = textElement.baselineOffset;\n splittedElement.characterRange = textElement.characterRange;\n lineWidget.children.splice(indexOf, 0, splittedElement);\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, splittedElement, index > 0, true);\n splittedElement.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n if (splittedElement.text !== ' ' && HelperMethods.endsWith(splittedElement.text) && format.bidi && splittedElement.characterRange === CharacterRangeType.RightToLeft) {\n var elementBox = this.spitTextElementByWhitespace(splittedElement, format);\n indexOf = lineWidget.children.indexOf(elementBox);\n }\n splittedElement.width = this.documentHelper.textHelper.getWidth(splittedElement.text, format, splittedElement.scriptType);\n if (splittedElement.text[splittedElement.text.length - 1] === ' ') {\n splittedElement.trimEndWidth = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(splittedElement.text), format, splittedElement.scriptType);\n }\n else {\n splittedElement.trimEndWidth = splittedElement.width;\n }\n textElement.text = text;\n textElement.width = this.documentHelper.textHelper.getWidth(textElement.text, textElement.characterFormat, textElement.scriptType);\n if (textElement.text[textElement.text.length - 1] === ' ') {\n textElement.trimEndWidth = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(textElement.text), textElement.characterFormat, textElement.scriptType);\n }\n else {\n textElement.trimEndWidth = textElement.width;\n }\n if (textElement.width === 0 && lineWidget.children.indexOf(textElement) !== -1) {\n lineWidget.children.splice(lineWidget.children.indexOf(textElement), 1);\n }\n index = 0;\n indexOf++;\n }\n }\n textElement.text = text;\n lineWidget.children.splice(indexOf, 0, textElement);\n }\n lineWidget.children[startIndex].padding.left = paddingLeft;\n };\n Layout.prototype.isSplitByHyphen = function (element, text) {\n if (!isNullOrUndefined(element.previousElement)) {\n if (element.previousElement instanceof TextElementBox || element.previousElement instanceof ListTextElementBox) {\n var test = element.previousElement.text;\n return (text.substring(0, 1) === '-') && (test.substring(test.length - 1, test.length) !== ' ');\n }\n }\n return (text.substring(0, 1) === '-');\n };\n Layout.prototype.splitTextForClientArea = function (lineWidget, element, text, width, characterFormat) {\n var paragraph = lineWidget.paragraph;\n var isSplitByWord = true;\n var index = -1;\n if (!(text.substring(0, 1) === ' ') && !this.isSplitByHyphen(element, text)) {\n var textWidth = width;\n var characterUptoWS = 0;\n characterUptoWS = HelperMethods.trimEnd(text).indexOf(' ') + 1;\n if (characterUptoWS == 0) {\n characterUptoWS = HelperMethods.trimEnd(text).indexOf('-') + 1;\n }\n index = characterUptoWS;\n //Checks whether text not starts with white space. If starts with white space, no need to check previous text blocks.\n if (index > 0) {\n textWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, index), characterFormat, element.scriptType);\n }\n if (this.viewer.clientActiveArea.width < textWidth && !this.documentHelper.textHelper.isUnicodeText(text, element.scriptType)\n && !this.isWordFittedByJustification(element, textWidth)) {\n //Check and split the previous text elements to next line.\n isSplitByWord = this.checkPreviousElement(lineWidget, lineWidget.children.indexOf(element));\n if (isSplitByWord) {\n //lineWidget = paragraph.childWidgets[paragraph.childWidgets.indexOf(lineWidget) + 1] as LineWidget;\n //isSplitByWord = textWidth <= this.viewer.clientActiveArea.width;\n return;\n }\n }\n }\n else {\n index = 1;\n }\n if (width <= this.viewer.clientActiveArea.width) {\n //Fits the text in current line.\n this.addElementToLine(paragraph, element);\n }\n else if (isSplitByWord && (index > 0 || text.indexOf(' ') !== -1 || text.indexOf('-') !== -1)) {\n this.splitByWord(lineWidget, paragraph, element, text, width, characterFormat);\n }\n else {\n this.splitByCharacter(lineWidget, element, text, width, characterFormat);\n }\n };\n Layout.prototype.splitByLineBreakOrTab = function (viewer, span, index, spiltBy) {\n // Splits tab character to separate SpanAdv\n var inlineIndex = span.line.children.indexOf(span);\n var value = span.text;\n var remainder = value.substring(index);\n var newSpan = spiltBy === '\\t' ? new TabElementBox() : new TextElementBox();\n newSpan.line = span.line;\n this.updateRevisionForSplittedElement(span, newSpan, true);\n newSpan.characterFormat.copyFormat(span.characterFormat);\n newSpan.characterRange = span.characterRange;\n span.line.children.splice(inlineIndex + 1, 0, newSpan);\n span.isWidthUpdated = false;\n if (index > 0 && remainder.length === 1) {\n newSpan.text = value.substring(index);\n span.text = value.substring(0, index);\n }\n else if (index > 0) {\n newSpan.text = spiltBy;\n var newText = new TextElementBox();\n newText.line = span.line;\n newText.text = value.substring(index + 1);\n this.updateRevisionForSplittedElement(span, newText, true);\n newText.characterFormat.copyFormat(span.characterFormat);\n newText.characterRange = span.characterRange;\n span.line.children.splice(inlineIndex + 2, 0, newText);\n span.text = value.substring(0, index);\n }\n else if (remainder !== '') {\n newSpan.text = value.substring(index + 1);\n span.text = spiltBy;\n }\n };\n /* eslint-disable */\n Layout.prototype.moveToNextLine = function (line, isMultiColumnSplit, index) {\n var paragraph = line.paragraph;\n var paraFormat = paragraph.paragraphFormat;\n var isParagraphStart = line.isFirstLine();\n var isParagraphEnd = line.isLastLine();\n var height = 0;\n var maxDescent = 0;\n var afterSpacing = 0;\n var beforeSpacing = 0;\n var lineSpacing = 0;\n var firstLineIndent = 0;\n var borders = paraFormat.borders;\n this.updateLineWidget(line);\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n var pageIndex = 0;\n var skip2013Justification = false;\n var canRenderParagraphBorders = this.documentHelper.canRenderBorder(paragraph);\n if (paragraph.bodyWidget && !(paragraph.bodyWidget instanceof HeaderFooterWidget)) {\n pageIndex = this.documentHelper.pages.indexOf(paragraph.bodyWidget.page);\n }\n //Updates before spacing at the top of Paragraph first line.\n if (isParagraphStart) {\n beforeSpacing = this.getBeforeSpacing(paragraph, pageIndex);\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n //Updates after spacing at the bottom of Paragraph last line.\n if (isParagraphEnd) {\n afterSpacing = HelperMethods.convertPointToPixel(this.getAfterSpacing(paragraph));\n }\n if ((paraFormat.bidi || this.isContainsRtl(line))) {\n this.shiftElementsForRTLLayouting(line, paraFormat.bidi);\n // this.reArrangeElementsForRtl(line, paraFormat.bidi);\n this.isRTLLayout = true;\n }\n if (isNaN(this.maxTextHeight)) {\n //Calculate line height and descent based on formatting defined in paragraph.\n var measurement = this.documentHelper.textHelper.measureText('a', paragraph.characterFormat);\n height = measurement.Height;\n maxDescent = height - measurement.BaselineOffset;\n }\n else {\n height = this.maxTextHeight;\n maxDescent = height - this.maxTextBaseline;\n }\n // Gets line spacing.\n lineSpacing = this.getLineSpacing(paragraph, height);\n if ((line.skipClipImage || paragraph.paragraphFormat.lineSpacing >= 14 || lineSpacing < 0) && paraFormat.lineSpacingType === 'Exactly'\n && lineSpacing < maxDescent + this.maxBaseline) {\n lineSpacing = maxDescent + this.maxBaseline;\n }\n var subWidth = 0;\n var whiteSpaceCount = 0;\n var getWidthAndSpace;\n var textAlignment = paraFormat.textAlignment;\n var totalSpaceCount = 0;\n var trimmedSpaceWidth = 0;\n // calculates the sub width, for text alignments - Center, Right, Justify.\n // if the element is paragraph end and para bidi is true and text alignment is justify\n // we need to calculate subwidth and add it to the left margin of the element.\n if (textAlignment !== 'Left' && this.viewer.textWrap && (!(textAlignment === 'Justify' && isParagraphEnd)\n || (textAlignment === 'Justify' && paraFormat.bidi) || (this.is2013Justification && isParagraphEnd))) {\n getWidthAndSpace = this.getSubWidth(line, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent, isParagraphEnd);\n subWidth = getWidthAndSpace[0].subWidth;\n whiteSpaceCount = getWidthAndSpace[0].spaceCount;\n totalSpaceCount = getWidthAndSpace[0].totalSpaceCount;\n trimmedSpaceWidth = getWidthAndSpace[0].trimmedSpaceWidth;\n skip2013Justification = line.isEndsWithPageBreak || line.isEndsWithColumnBreak || line.isEndsWithLineBreak || line.paragraph.bidi || this.isRTLLayout;\n }\n if (!skip2013Justification && (getWidthAndSpace && getWidthAndSpace.length === 1) && this.viewer.clientActiveArea.width > 0 &&\n !isParagraphEnd && !this.is2013Justification && textAlignment === 'Justify' && this.documentHelper.compatibilityMode === 'Word2013') {\n var availableWidth = this.viewer.clientActiveArea.width;\n var totalSpaceWidth = this.getTotalSpaceWidth(line);\n var averageWidthOfSpace = totalSpaceWidth / totalSpaceCount;\n var avgAvailableLineWidthForSpace = (availableWidth) / totalSpaceCount;\n var diffFactor = (avgAvailableLineWidthForSpace / averageWidthOfSpace) * 100;\n var widthForAdjustment = 0;\n if (diffFactor <= 33) {\n widthForAdjustment = totalSpaceWidth / 8;\n }\n else {\n widthForAdjustment = totalSpaceWidth / 4;\n }\n this.viewer.clientActiveArea.x -= widthForAdjustment;\n this.viewer.clientActiveArea.width += widthForAdjustment;\n this.is2013Justification = true;\n if (isMultiColumnSplit) {\n this.splitParagraphForMultiColumn(line, index);\n }\n else {\n this.moveElementFromNextLine(line);\n this.nextElementToLayout = line.children[line.children.length - 1];\n }\n return;\n }\n else {\n if (this.is2013Justification && isParagraphEnd) {\n if (subWidth > 0) {\n subWidth = 0;\n whiteSpaceCount = 0;\n }\n }\n this.is2013Justification = false;\n this.nextElementToLayout = undefined;\n }\n var addSubWidth = false;\n var wrapIndex = 0;\n var lineSpacingType = paraFormat.lineSpacingType;\n var isStarted = false;\n var children = line.renderedElements;\n var maxElementHeight = 0;\n var maxElementBottomMargin = 0;\n var maxElementTopMargin = 0;\n var elementLeft = this.viewer.clientArea.x;\n for (var i = 0; i < children.length; i++) {\n var topMargin = 0;\n var bottomMargin = 0;\n var leftMargin = 0;\n var elementBox = children[i];\n if (!isNullOrUndefined(getWidthAndSpace) && isStarted && elementBox.padding.left > 0 &&\n (getWidthAndSpace.length > wrapIndex + 1)) {\n var previousWidth = subWidth;\n if (textAlignment === \"Justify\") {\n previousWidth = subWidth * getWidthAndSpace[wrapIndex].spaceCount;\n }\n else if (textAlignment === \"Center\") {\n previousWidth = subWidth / 2;\n }\n elementBox.padding.left = elementBox.padding.left - previousWidth;\n var subWidthInfo = getWidthAndSpace[++wrapIndex];\n subWidth = subWidthInfo.subWidth;\n whiteSpaceCount = subWidthInfo.spaceCount;\n }\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') {\n continue;\n }\n isStarted = true;\n var alignElements = this.alignLineElements(elementBox, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, i === children.length - 1);\n if (textAlignment === \"Justify\" && elementBox instanceof ShapeBase && elementBox.textWrappingStyle === 'Inline' && subWidth !== 0) {\n elementBox.x = elementLeft;\n if (elementBox instanceof ShapeElementBox) {\n for (var i_3 = 0; i_3 < elementBox.textFrame.childWidgets.length; i_3++) {\n var widget = elementBox.textFrame.childWidgets[i_3];\n var indent = widget.bidi ? widget.rightIndent : widget.leftIndent;\n widget.x = elementLeft + HelperMethods.convertPointToPixel(indent + elementBox.textFrame.marginLeft);\n }\n }\n }\n elementLeft += elementBox.width;\n line.maxBaseLine = this.maxBaseline;\n topMargin = alignElements.topMargin;\n bottomMargin = alignElements.bottomMargin;\n addSubWidth = alignElements.addSubWidth;\n whiteSpaceCount = alignElements.whiteSpaceCount;\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > height) {\n bottomMargin += lineSpacing - height;\n }\n else {\n topMargin += lineSpacing - height;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n else if (lineSpacing > topMargin + elementBox.height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + elementBox.height + bottomMargin);\n }\n if (pageIndex > 0 && paragraph === paragraph.bodyWidget.childWidgets[0] && this.documentHelper.pages[pageIndex].sectionIndex === this.documentHelper.pages[pageIndex - 1].sectionIndex) {\n topMargin += 0;\n }\n else {\n topMargin += beforeSpacing;\n }\n if (borders.top.lineStyle != 'None') {\n if (line.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n topMargin += HelperMethods.convertPointToPixel(borders.top.lineWidth + borders.top.space);\n }\n }\n if (borders.bottom.lineStyle != 'None') {\n if (line.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n bottomMargin += HelperMethods.convertPointToPixel(borders.bottom.lineWidth + borders.bottom.space);\n }\n }\n bottomMargin += afterSpacing;\n var previousElement = i > 0 ? children[i - 1] : undefined;\n if (i === 0 || (!(elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') &&\n previousElement instanceof ShapeBase && previousElement.textWrappingStyle !== 'Inline' && previousElement.indexInOwner < elementBox.indexInOwner)\n || elementBox.padding.left > 0) {\n line.height = topMargin + elementBox.height + bottomMargin;\n if (textAlignment === 'Right' || (textAlignment === 'Justify' && paraFormat.bidi && (isParagraphEnd || trimmedSpaceWidth < 0))) {\n //Aligns the text as right justified and consider subwidth for bidirectional paragrph with justify.\n if (trimmedSpaceWidth < 0) {\n leftMargin = trimmedSpaceWidth;\n }\n else {\n leftMargin = subWidth;\n }\n }\n else if (textAlignment === 'Center') {\n //Aligns the text as center justified.\n if (subWidth < 0) {\n leftMargin = subWidth;\n }\n else {\n leftMargin = subWidth / 2;\n }\n }\n }\n elementBox.margin = new Margin(leftMargin, topMargin, 0, bottomMargin);\n elementBox.line = line;\n if (maxElementHeight < elementBox.height) {\n maxElementHeight = elementBox.height;\n maxElementBottomMargin = elementBox.margin.bottom;\n maxElementTopMargin = elementBox.margin.top;\n }\n if (elementBox instanceof ShapeElementBox && elementBox.textWrappingStyle === \"Inline\") {\n if (i !== 0 || elementBox.margin.left > 0) {\n var elementLeftMargin = children[0].margin.left;\n elementBox.x += elementLeftMargin;\n for (var i_4 = 0; i_4 < elementBox.textFrame.childWidgets.length; i_4++) {\n var widget = elementBox.textFrame.childWidgets[i_4];\n if (widget instanceof TableWidget) {\n widget.updateChildWidgetLeft(widget.x + elementLeftMargin, true);\n }\n else {\n widget.x += elementLeftMargin;\n }\n }\n }\n this.updateShapeYPosition(elementBox);\n }\n }\n line.margin = new Margin(0, maxElementTopMargin, 0, maxElementBottomMargin);\n this.adjustPositionBasedOnTopAndBottom(line);\n this.checkInbetweenShapeOverlap(line);\n if (!isMultiColumnSplit && line.isLastLine() && line.indexInOwner === 0 && line.paragraph.paragraphFormat.widowControl) {\n var previousSplitWidget = line.paragraph.previousSplitWidget;\n if (!isNullOrUndefined(previousSplitWidget) && !previousSplitWidget.isEndsWithPageBreak && !previousSplitWidget.isEndsWithColumnBreak && previousSplitWidget.indexInOwner !== 0) {\n var startLineIndex = previousSplitWidget.childWidgets.length - 1;\n if (previousSplitWidget.childWidgets.length === 2) {\n startLineIndex = 0;\n }\n this.splitParagraph(previousSplitWidget, startLineIndex, line.paragraph);\n this.updateClientAreaForNextBlock(line, line.paragraph);\n }\n }\n else if (isMultiColumnSplit) {\n this.splitParagraphForMultiColumn(line, index);\n }\n if (!isMultiColumnSplit) {\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + line.height);\n }\n this.wrapPosition = [];\n };\n Layout.prototype.updateShapeYPosition = function (elementBox) {\n if (elementBox.margin.top > 0) {\n elementBox.y += elementBox.margin.top;\n for (var j = 0; j < elementBox.textFrame.childWidgets.length; j++) {\n elementBox.textFrame.childWidgets[j].y += elementBox.margin.top;\n }\n }\n };\n Layout.prototype.getBodyWidget = function (section, isFirstBody) {\n if (isFirstBody) {\n while (section && section.columnIndex !== 0) {\n section = section.previousRenderedWidget;\n }\n }\n else {\n while (section) {\n if (isNullOrUndefined(section.nextRenderedWidget) || section.columnIndex === section.sectionFormat.numberOfColumns - 1 || section.index !== section.nextRenderedWidget.index) {\n break;\n }\n section = section.nextRenderedWidget;\n }\n }\n return section;\n };\n Layout.prototype.splitParagraphForMultiColumn = function (line, index) {\n this.splitParagraph(line.paragraph, index, undefined);\n if ((isNullOrUndefined(line.paragraph.previousRenderedWidget) && index == 0) ||\n (!isNullOrUndefined(line.paragraph.previousRenderedWidget) && line.paragraph.previousRenderedWidget.bodyWidget.sectionIndex !== line.paragraph.bodyWidget.sectionIndex)) {\n this.moveBlocksToNextPage(line.paragraph);\n }\n else {\n this.moveBlocksToNextPage(line.paragraph.previousRenderedWidget);\n }\n this.viewer.updateClientArea(line.paragraph.bodyWidget, line.paragraph.bodyWidget.page);\n this.viewer.clientActiveArea.y = line.paragraph.bodyWidget.y;\n if (line.paragraph.bodyWidget.sectionFormat.equalWidth) {\n var parawidget = line.paragraph;\n this.documentHelper.blockToShift = parawidget;\n this.shiftLayoutedItems(false, true);\n }\n };\n //Checks Inbetween Overlap & Updates Line marginTop\n Layout.prototype.checkInbetweenShapeOverlap = function (line, floatingElements) {\n var _this = this;\n if (!(line.paragraph.containerWidget instanceof TextFrame) && line.paragraph.bodyWidget) {\n var overlapShape_1;\n var lineY_1 = this.getLineY(line);\n var isInsideTable_1 = line.paragraph.isInsideTable;\n var emptyParaPosition_1 = line.paragraph.y;\n var isFloatingElementPresent_1 = true;\n if (isNullOrUndefined(floatingElements)) {\n isFloatingElementPresent_1 = false;\n floatingElements = line.paragraph.bodyWidget.floatingElements;\n }\n /* eslint:disable */\n floatingElements.sort(function (a, b) { return a.y - b.y; });\n floatingElements.forEach(function (shape) {\n if (isInsideTable_1 && shape.line && !shape.line.paragraph.isInsideTable || isNullOrUndefined(shape.line)) {\n return;\n }\n var lineRect;\n if (shape.textWrappingStyle === 'TopAndBottom' && shape instanceof ImageElementBox && !line.paragraph.isEmpty()) {\n lineRect = new Rect(line.paragraph.x, _this.viewer.clientActiveArea.y, line.paragraph.width, line.children[0].height);\n }\n else {\n lineRect = new Rect(line.paragraph.x, _this.viewer.clientActiveArea.y, line.paragraph.width, line.height);\n }\n var shapeRect = new Rect(shape.x, shape.y - shape.distanceTop, shape.width, shape.height);\n if (shape.line && _this.isRelayout && !_this.isRelayoutOverlap && _this.viewer.documentHelper.selection.isExistAfter(shape.line.paragraph, line.paragraph)\n || _this.isRelayout && _this.isRelayoutOverlap && _this.viewer.documentHelper.selection.isExistAfter(shape.line.paragraph, _this.endOverlapWidget)) {\n return;\n }\n var considerShape = (shape.textWrappingStyle === 'TopAndBottom');\n var updatedFloatPosition = ((shape.y + shape.height + shape.distanceBottom) - lineY_1);\n if (overlapShape_1 && considerShape &&\n overlapShape_1.y + overlapShape_1.height + overlapShape_1.distanceBottom + line.height > shape.y - shape.distanceTop &&\n overlapShape_1.y - overlapShape_1.distanceTop < shape.y - shape.distanceTop &&\n shape.y + shape.height + shape.distanceBottom > overlapShape_1.y + overlapShape_1.height + overlapShape_1.distanceBottom) {\n overlapShape_1 = shape;\n if (line.paragraph.isEmpty() && isFloatingElementPresent_1) {\n line.paragraph.y = emptyParaPosition_1;\n line.paragraph.y += updatedFloatPosition;\n }\n else {\n line.marginTop = updatedFloatPosition;\n }\n }\n else if (considerShape && !overlapShape_1 && lineRect.isIntersecting(shapeRect)) {\n overlapShape_1 = shape;\n if (line.paragraph.isEmpty() && isFloatingElementPresent_1) {\n line.paragraph.y += updatedFloatPosition;\n }\n else {\n line.marginTop = updatedFloatPosition;\n }\n }\n });\n if (overlapShape_1) {\n this.viewer.cutFromTop(overlapShape_1.y + overlapShape_1.height + overlapShape_1.distanceBottom);\n }\n else if (this.isRelayoutOverlap) {\n line.marginTop = 0;\n }\n }\n };\n Layout.prototype.getLineY = function (line) {\n var para = line.paragraph;\n var lineY = para.y;\n if (!para.isEmpty()) {\n var lineWidget = para.firstChild;\n while (lineWidget !== line) {\n lineY = lineY + lineWidget.height + lineWidget.marginTop;\n lineWidget = lineWidget.nextLine;\n }\n }\n return lineY;\n };\n Layout.prototype.updateLineWidget = function (line) {\n var spaceHeight = 0;\n var spaceBaseline = 0;\n var isContainsImage = false;\n var isFieldCode = false;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FieldElementBox && element.fieldType === 2) {\n isFieldCode = false;\n }\n if (isFieldCode) {\n continue;\n }\n if (element instanceof FieldElementBox && element.fieldType === 0) {\n isFieldCode = true;\n }\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (element instanceof TextElementBox && element.text.replace(/\\s+/g, '').length === 0 && element.text !== String.fromCharCode(160)) {\n if (spaceHeight < element.height) {\n spaceHeight = element.height;\n spaceBaseline = element.baselineOffset;\n }\n continue;\n }\n if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var elementHeight = element.height;\n var baselineOffset = element.baselineOffset;\n var isCellContentControl = false;\n //We have increased the checkbox form field font size using a constant factor `CHECK_BOX_FACTOR`\n //To match the MS Word check box rendering size.\n //Due to it line height also get increased. So, handled adjusting height while updating line height.\n if (element instanceof TextElementBox && element.isCheckBoxElement && !isNullOrUndefined(element.previousNode) && element.previousNode instanceof ContentControl && (element.previousNode.contentControlWidgetType === 'Cell' || element.previousNode.contentControlWidgetType === 'Inline')) {\n isCellContentControl = true;\n }\n if (element instanceof TextElementBox && element.isCheckBoxElement && !isCellContentControl) {\n elementHeight = elementHeight / CHECK_BOX_FACTOR;\n baselineOffset = baselineOffset / CHECK_BOX_FACTOR;\n }\n if (this.maxTextHeight < elementHeight) {\n this.maxTextHeight = elementHeight;\n this.maxTextBaseline = baselineOffset;\n }\n if (this.maxBaseline < this.maxTextBaseline) {\n this.maxBaseline = this.maxTextBaseline;\n }\n }\n else if (this.maxBaseline < element.height) {\n this.maxBaseline = element.height;\n if (element instanceof ImageElementBox) {\n isContainsImage = true;\n }\n }\n }\n if (this.maxTextHeight === 0 && spaceHeight !== 0) {\n if (isContainsImage) {\n this.maxTextHeight = 0;\n this.maxTextBaseline = 0;\n }\n else {\n if (line.isLastLine() && this.documentHelper.selection) {\n var paragraphMarkSize = this.documentHelper.selection.getParagraphMarkSize(line.paragraph, 0, 0);\n this.maxTextHeight = paragraphMarkSize.height;\n this.maxTextBaseline = spaceBaseline;\n }\n else {\n this.maxTextHeight = spaceHeight;\n this.maxTextBaseline = spaceBaseline;\n }\n if (this.maxBaseline < this.maxTextBaseline) {\n this.maxBaseline = this.maxTextBaseline;\n }\n }\n }\n };\n Layout.prototype.moveToNextPage = function (viewer, line, isPageBreak, isList) {\n if (this.isFootNoteLayoutStart) {\n return;\n }\n var paragraphWidget = line.paragraph;\n var startBlock;\n var startIndex = 0;\n var keepLinesTogether = false;\n var keepWithNext = false;\n if (paragraphWidget && !(!isNullOrUndefined(paragraphWidget.containerWidget) && !isNullOrUndefined(paragraphWidget.containerWidget.containerWidget) && paragraphWidget.containerWidget.containerWidget instanceof FootNoteWidget)) {\n var index = 0;\n if (paragraphWidget instanceof FootNoteWidget) {\n return;\n }\n if (!isNullOrUndefined(line)) {\n index = paragraphWidget.childWidgets.indexOf(line);\n if (index !== 0) {\n if (paragraphWidget.paragraphFormat.keepLinesTogether && !isNullOrUndefined(paragraphWidget.previousWidget) && !line.previousLine.isEndsWithColumnBreak) {\n index = 0;\n keepLinesTogether = true;\n }\n else if (index == 1 && !line.previousLine.isEndsWithPageBreak && !line.previousLine.isEndsWithColumnBreak && paragraphWidget.paragraphFormat.widowControl &&\n !isNullOrUndefined(paragraphWidget.previousWidget)) {\n index = 0;\n keepLinesTogether = true;\n }\n }\n if (index > 0 || isPageBreak) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n if (index === 0 && !paragraphWidget.isEndsWithPageBreak && !paragraphWidget.isEndsWithColumnBreak) {\n var blockInfo = this.alignBlockElement(paragraphWidget);\n if (!isNullOrUndefined(blockInfo.node)) {\n startBlock = blockInfo.node instanceof TableRowWidget ? this.splitRow(blockInfo.node) : blockInfo.node;\n startIndex = startBlock instanceof TableWidget ? 0 : parseInt(blockInfo.position.index, 10);\n paragraphWidget = startBlock;\n index = startIndex;\n keepLinesTogether = false;\n keepWithNext = true;\n if (paragraphWidget instanceof ParagraphWidget) {\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule && !paragraphWidget.paragraphFormat.keepWithNext && !isList) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraphWidget);\n }\n }\n else {\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule && !isList) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraphWidget);\n }\n }\n }\n }\n }\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(paragraphWidget.bodyWidget) && !isNullOrUndefined(paragraphWidget.bodyWidget.containerWidget) && !(paragraphWidget.bodyWidget.containerWidget instanceof FootNoteWidget) && paragraphWidget.bodyWidget.page.footnoteWidget !== undefined) {\n // this.viewer.updateClientAreaForBlock(paragraphWidget.bodyWidget.page.footnoteWidget.block, true);\n this.layoutfootNote(paragraphWidget.bodyWidget.page.footnoteWidget);\n // this.viewer.updateClientAreaForBlock(paragraphWidget.bodyWidget.page.footnoteWidget.block, false);\n }\n if (this.isMultiColumnSplit) {\n var nextColumn = this.viewer.columnLayoutArea.getNextColumnByBodyWidget(paragraphWidget.bodyWidget);\n if (isNullOrUndefined(nextColumn)) {\n return;\n }\n }\n var prevPage = paragraphWidget.bodyWidget.page;\n if (isPageBreak && index === 0 && !isNullOrUndefined(paragraphWidget.bodyWidget.lastChild) && paragraphWidget === paragraphWidget.bodyWidget.lastChild && this.endOverlapWidget) {\n this.isRelayoutOverlap = false;\n }\n var nextBody = this.moveBlocksToNextPage(paragraphWidget, index === 0, index);\n if (prevPage !== nextBody.page) {\n this.viewer.updateClientArea(nextBody, nextBody.page);\n }\n this.viewer.updateClientAreaForBlock(paragraphWidget, true);\n if (index > 0) {\n if (line.isLastLine() && isPageBreak) {\n return;\n }\n var nextParagraph = void 0;\n if (nextBody.firstChild instanceof ParagraphWidget && nextBody.firstChild.equals(paragraphWidget)) {\n nextParagraph = nextBody.firstChild;\n }\n else {\n nextParagraph = new ParagraphWidget();\n }\n nextParagraph = this.moveChildsToParagraph(paragraphWidget, index, nextParagraph);\n // this.updateLinearIndex(paragraphWidget);\n // this.updateLinearIndex(nextParagraph);\n nextParagraph.containerWidget = nextBody;\n for (var m = 0; m < nextParagraph.floatingElements.length; m++) {\n var element = nextParagraph.floatingElements[m];\n if (element.line.paragraph.bodyWidget !== paragraphWidget.bodyWidget && element.textWrappingStyle !== 'Inline') {\n paragraphWidget.bodyWidget.floatingElements.splice(paragraphWidget.bodyWidget.floatingElements.indexOf(element), 1);\n }\n }\n var footWidget = this.getFootNoteWidgetsOf(nextParagraph);\n this.moveFootNotesToPage(footWidget, paragraphWidget.bodyWidget, nextBody);\n paragraphWidget = nextParagraph;\n this.viewer.clientActiveArea.height -= this.getFootNoteHeight(footWidget);\n }\n else if (!isPageBreak) {\n paragraphWidget.containerWidget.removeChild(paragraphWidget.indexInOwner);\n if (paragraphWidget instanceof ParagraphWidget && paragraphWidget.floatingElements.length > 0) {\n this.addRemoveFloatElementsFromBody(paragraphWidget, paragraphWidget.containerWidget, false);\n }\n }\n if (!isPageBreak) {\n if (nextBody.childWidgets.indexOf(paragraphWidget) === -1) {\n nextBody.childWidgets.splice(0, 0, paragraphWidget);\n if (paragraphWidget instanceof ParagraphWidget && paragraphWidget.floatingElements.length > 0) {\n this.addRemoveFloatElementsFromBody(paragraphWidget, nextBody, true);\n }\n }\n paragraphWidget.containerWidget = nextBody;\n this.viewer.updateClientAreaLocation(paragraphWidget, this.viewer.clientActiveArea);\n if (keepLinesTogether || keepWithNext) {\n if (paragraphWidget.bodyWidget.page.footnoteWidget) {\n this.layoutfootNote(paragraphWidget.bodyWidget.page.footnoteWidget);\n }\n if (line.paragraph !== paragraphWidget || (paragraphWidget.paragraphFormat.widowControl && this.isImagePresent(paragraphWidget))) {\n if (paragraphWidget instanceof TableWidget) {\n this.clearTableWidget(paragraphWidget, true, true, false);\n }\n this.layoutBlock(paragraphWidget, 0, true);\n viewer.updateClientAreaForBlock(paragraphWidget, false);\n }\n var lastBlock = line.paragraph;\n if (keepWithNext) {\n var nextBlock = paragraphWidget.nextWidget;\n if (!isNullOrUndefined(nextBlock)) {\n do {\n viewer.updateClientAreaForBlock(nextBlock, true);\n if (nextBlock !== lastBlock) {\n if (nextBlock instanceof TableWidget) {\n this.clearTableWidget(nextBlock, true, true, false);\n }\n this.layoutBlock(nextBlock, 0, true);\n viewer.updateClientAreaForBlock(nextBlock, false);\n }\n else {\n this.viewer.updateClientAreaLocation(nextBlock, this.viewer.clientActiveArea);\n break;\n }\n nextBlock = nextBlock.nextWidget;\n } while (nextBlock);\n }\n }\n this.updateClientAreaForNextBlock(line, lastBlock);\n }\n if (line.isFirstLine() && line.indexInOwner === 0 && !(line.children[0] instanceof ListTextElementBox)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(line.paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n }\n }\n if (!isPageBreak) {\n this.updateShapeBaseLocation(paragraphWidget);\n }\n if (this.isRelayoutOverlap && this.endOverlapWidget && (!this.skipRelayoutOverlap || (this.endOverlapWidget instanceof TableWidget && this.endOverlapWidget.wrapTextAround))) {\n var block_1 = this.endOverlapWidget.previousRenderedWidget;\n var para = line.paragraph;\n this.startOverlapWidget = para;\n line = this.endOverlapWidget.childWidgets[0];\n para = line.paragraph;\n while (para) {\n para.floatingElements.forEach(function (shape) {\n if (block_1.bodyWidget.floatingElements.indexOf(shape) !== -1 && shape.textWrappingStyle !== 'Inline') {\n block_1.bodyWidget.floatingElements.splice(block_1.bodyWidget.floatingElements.indexOf(shape), 1);\n line.paragraph.bodyWidget.floatingElements.push(shape);\n }\n });\n para = para !== this.endOverlapWidget ? para.nextWidget : undefined;\n }\n this.layoutStartEndBlocks(this.startOverlapWidget, this.endOverlapWidget);\n this.startOverlapWidget = undefined;\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.bottom - this.endOverlapWidget.y;\n this.viewer.clientActiveArea.y = this.endOverlapWidget.y;\n }\n };\n Layout.prototype.isImagePresent = function (paragraph) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n if (line.children[j] instanceof ImageElementBox) {\n return true;\n }\n }\n }\n return false;\n };\n Layout.prototype.updateShapeBaseLocation = function (paragraphWidget) {\n if (paragraphWidget instanceof ParagraphWidget &&\n paragraphWidget.floatingElements.length > 0) {\n for (var m = 0; m < paragraphWidget.floatingElements.length; m++) {\n var shape = paragraphWidget.floatingElements[m];\n var position = this.getFloatingItemPoints(shape);\n shape.y = position.y;\n shape.x = position.x;\n if (shape instanceof ShapeElementBox)\n this.updateChildLocationForCellOrShape(shape.y, shape);\n }\n }\n };\n Layout.prototype.moveChildsToParagraph = function (srcParagraph, childStartIndex, nextParagraph) {\n nextParagraph = this.addParagraphWidget(this.viewer.clientActiveArea, nextParagraph);\n var insertIndex = 0;\n for (var i = childStartIndex; i < srcParagraph.childWidgets.length; i++) {\n var lineWidget = srcParagraph.childWidgets[i];\n lineWidget.paragraph = nextParagraph;\n nextParagraph.childWidgets.splice(insertIndex, 0, lineWidget);\n lineWidget.paragraph = nextParagraph;\n insertIndex++;\n }\n nextParagraph.paragraphFormat = srcParagraph.paragraphFormat;\n nextParagraph.characterFormat = srcParagraph.characterFormat;\n nextParagraph.index = srcParagraph.index;\n srcParagraph.childWidgets.splice(childStartIndex);\n for (var i = 0; i < srcParagraph.floatingElements.length; i++) {\n var element = srcParagraph.floatingElements[i];\n if (element.line.paragraph !== srcParagraph) {\n nextParagraph.floatingElements.push(element);\n srcParagraph.floatingElements.splice(srcParagraph.floatingElements.indexOf(element), 1);\n i--;\n }\n }\n return nextParagraph;\n };\n /**\n * @param {ParagraphWidget} paragarph - the paragraph\n * @param {BodyWidget} body - the bodyWidget\n * @param {boolean} add - to specify add or remove floating elements from body widget.\n */\n Layout.prototype.addRemoveFloatElementsFromBody = function (paragarph, body, add) {\n if (paragarph.floatingElements.length > 0) {\n for (var x = 0; x < paragarph.floatingElements.length; x++) {\n if (add) {\n if (body.floatingElements.indexOf(paragarph.floatingElements[x]) === -1 && paragarph.floatingElements[x].textWrappingStyle !== 'Inline') {\n body.floatingElements.push(paragarph.floatingElements[x]);\n }\n }\n else {\n if (body.floatingElements.indexOf(paragarph.floatingElements[x]) !== -1) {\n body.floatingElements.splice(body.floatingElements.indexOf(paragarph.floatingElements[x]), 1);\n }\n }\n }\n }\n };\n /**\n * Align block based on keep with next and keep lines together property.\n */\n Layout.prototype.alignBlockElement = function (block) {\n if (block instanceof ParagraphWidget && (block.isEndsWithPageBreak || block.isEndsWithColumnBreak)) {\n return { node: undefined, position: { index: '' } };\n }\n var startBlock;\n var startIndex = 0;\n // Check previous block has keep with next property.\n var previousBlock = this.getPreviousBlock(block);\n while (previousBlock) {\n if (previousBlock instanceof ParagraphWidget) {\n if (!previousBlock.paragraphFormat.keepWithNext || previousBlock.isEndsWithPageBreak || previousBlock.isEndsWithColumnBreak) {\n break;\n }\n startBlock = previousBlock;\n if (previousBlock.paragraphFormat.keepLinesTogether) {\n if (isNullOrUndefined(this.getPreviousBlock(previousBlock))) {\n startBlock = undefined;\n }\n else {\n startIndex = 0;\n }\n }\n else {\n if (isNullOrUndefined(this.getPreviousBlock(previousBlock))\n && previousBlock.childWidgets.length === 1) {\n startBlock = undefined;\n }\n else {\n if (!previousBlock.paragraphFormat.widowControl) {\n startIndex = previousBlock.lastChild.indexInOwner;\n if (startIndex !== 0) {\n break;\n }\n }\n else {\n startIndex = previousBlock.lastChild.indexInOwner - 1;\n if (startIndex === 1 || startIndex < 0) {\n // Move entire block to next page based on widow control.\n startIndex = 0;\n }\n if (startIndex !== 0) {\n break;\n }\n }\n }\n }\n }\n else if (previousBlock instanceof TableRowWidget) {\n var childWidget = previousBlock.childWidgets[0];\n if (childWidget.childWidgets.length > 0) {\n var firstBlock = this.documentHelper.getFirstParagraphInCell(childWidget);\n if (!firstBlock.paragraphFormat.keepWithNext) {\n break;\n }\n if (firstBlock.paragraphFormat.keepWithNext) {\n if (isNullOrUndefined(this.getPreviousBlock(previousBlock))) {\n startBlock = undefined;\n }\n else {\n startBlock = previousBlock;\n startIndex = startBlock.indexInOwner;\n }\n }\n }\n else {\n break;\n }\n // TODO: Table row splitting case\n }\n previousBlock = this.getPreviousBlock(previousBlock);\n }\n if (!isNullOrUndefined(startBlock) && startBlock instanceof ParagraphWidget && startBlock.indexInOwner === 0 && startBlock.paragraphFormat.keepWithNext && startBlock.paragraphFormat.widowControl) {\n startBlock = block;\n }\n return { node: startBlock, position: { index: startIndex.toString() } };\n };\n Layout.prototype.getPreviousBlock = function (block) {\n var previousBlock;\n if (block instanceof ParagraphWidget) {\n previousBlock = block.previousWidget;\n if (!this.isInitialLoad && isNullOrUndefined(previousBlock) && block.containerWidget instanceof BodyWidget && !isNullOrUndefined(block.containerWidget.previousRenderedWidget) && block.containerWidget.sectionIndex === block.containerWidget.previousRenderedWidget.sectionIndex) {\n if (!isNullOrUndefined(block.previousRenderedWidget) && block.previousRenderedWidget instanceof ParagraphWidget) {\n previousBlock = block.previousRenderedWidget;\n }\n }\n }\n else if (block instanceof TableRowWidget) {\n previousBlock = block.previousWidget;\n if (isNullOrUndefined(previousBlock)) {\n previousBlock = block.ownerTable.previousWidget;\n }\n }\n if (previousBlock instanceof TableWidget) {\n previousBlock = previousBlock.lastChild;\n }\n return previousBlock;\n };\n Layout.prototype.splitRow = function (startRow) {\n var table = startRow.ownerTable;\n if (startRow.indexInOwner === 0) {\n return table;\n }\n var newTable = this.createTableWidget(table);\n for (var i = startRow.indexInOwner; i < table.childWidgets.length;) {\n var rowWidget = table.childWidgets.splice(i, 1)[0];\n newTable.childWidgets.push(rowWidget);\n rowWidget.containerWidget = newTable;\n table.height -= rowWidget.height;\n newTable.height += rowWidget.height;\n }\n table.containerWidget.childWidgets.splice(table.indexInOwner + 1, 0, newTable);\n newTable.containerWidget = table.containerWidget;\n return newTable;\n };\n Layout.prototype.splitParagraph = function (paragarph, index, nextParagraph) {\n if (index === 0 && isNullOrUndefined(nextParagraph)) {\n return paragarph;\n }\n var isMoveCurrentBlock = false;\n if (isNullOrUndefined(nextParagraph)) {\n nextParagraph = new ParagraphWidget();\n nextParagraph.containerWidget = paragarph.containerWidget;\n paragarph.containerWidget.childWidgets.splice(paragarph.indexInOwner + 1, 0, nextParagraph);\n nextParagraph.paragraphFormat = paragarph.paragraphFormat;\n nextParagraph.characterFormat = paragarph.characterFormat;\n nextParagraph.index = paragarph.index;\n }\n else if (index === 0) {\n isMoveCurrentBlock = true;\n var temp = paragarph;\n paragarph = nextParagraph;\n nextParagraph = temp;\n }\n var insertIndex = 0;\n for (var i = index; i < paragarph.childWidgets.length; i++) {\n var lineWidget = paragarph.childWidgets[i];\n lineWidget.paragraph = nextParagraph;\n if (isMoveCurrentBlock) {\n nextParagraph.childWidgets.push(lineWidget);\n }\n else {\n nextParagraph.childWidgets.splice(insertIndex, 0, lineWidget);\n }\n nextParagraph.height += lineWidget.height;\n paragarph.height -= lineWidget.height;\n lineWidget.paragraph = nextParagraph;\n insertIndex++;\n }\n nextParagraph.width = paragarph.width;\n if (isMoveCurrentBlock) {\n nextParagraph.containerWidget.childWidgets.splice(nextParagraph.indexInOwner, 1);\n nextParagraph.y = paragarph.y;\n nextParagraph.x = paragarph.x;\n nextParagraph.containerWidget = paragarph.containerWidget;\n paragarph.containerWidget.childWidgets.unshift(nextParagraph);\n }\n else {\n paragarph.childWidgets.splice(index);\n }\n if (paragarph.childWidgets.length === 0 || isMoveCurrentBlock) {\n paragarph.containerWidget.childWidgets.splice(paragarph.indexInOwner, 1);\n }\n // this.updateLinearIndex(paragarph);\n // this.updateLinearIndex(nextParagraph);\n return nextParagraph;\n };\n Layout.prototype.updateClientPositionForBlock = function (block, currentBlock) {\n var startBlock = (block instanceof TableRowWidget) ? block.ownerTable : block;\n var isClientAreaUpdated = false;\n do {\n this.viewer.updateClientAreaForBlock(startBlock, true);\n if (startBlock instanceof ParagraphWidget) {\n if (currentBlock instanceof ParagraphWidget && currentBlock.equals(startBlock)) {\n isClientAreaUpdated = true;\n break;\n }\n this.addParagraphWidget(this.viewer.clientActiveArea, startBlock);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + startBlock.height);\n this.viewer.updateClientAreaForBlock(startBlock, false);\n }\n else if (startBlock instanceof TableWidget) {\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !startBlock.isInsideTable) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(startBlock.firstChild.firstChild.leftMargin);\n }\n this.addTableWidget(this.viewer.clientActiveArea, [startBlock]);\n var nextRow = startBlock.firstChild;\n if (currentBlock instanceof TableRowWidget && startBlock.equals(currentBlock.ownerTable) && !isNullOrUndefined(nextRow)) {\n do {\n if (nextRow.equals(currentBlock)) {\n isClientAreaUpdated = true;\n break;\n }\n this.addTableRowWidget(this.viewer.clientActiveArea, [nextRow]);\n this.updateChildLocationForRow(this.viewer.clientActiveArea.y, nextRow);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + nextRow.height);\n startBlock.height += nextRow.height;\n nextRow = nextRow.nextWidget;\n } while (nextRow);\n }\n else {\n this.updateChildLocationForTable(startBlock.y, startBlock);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + startBlock.height);\n this.viewer.updateClientAreaForBlock(startBlock, false);\n }\n }\n startBlock = startBlock.nextWidget;\n } while (startBlock && !isClientAreaUpdated);\n };\n Layout.prototype.updateClientAreaForNextBlock = function (line, paragraphWidget) {\n for (var m = 0; m < paragraphWidget.childWidgets.length; m++) {\n var child = paragraphWidget.childWidgets[m];\n if (line === child) {\n break;\n }\n this.updateShapeBaseLocation(paragraphWidget);\n this.checkInbetweenShapeOverlap(child);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + child.height);\n }\n };\n Layout.prototype.layoutStartEndBlocks = function (startBlock, endBlock) {\n var block = startBlock;\n this.isOverlapFloatTable = true;\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.bottom - startBlock.y;\n this.viewer.clientActiveArea.y = startBlock.y;\n var startParagaraph;\n if (startBlock instanceof TableWidget) {\n startParagaraph = this.documentHelper.getFirstParagraphInFirstCell(startBlock);\n }\n else {\n startParagaraph = startBlock;\n }\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(startParagaraph);\n }\n while (block) {\n this.viewer.updateClientAreaForBlock(block, true);\n if (block instanceof ParagraphWidget) {\n this.layoutParagraph(block, 0);\n }\n else {\n this.clearTableWidget(block, true, true, true);\n this.layoutTable(block, 0);\n }\n this.viewer.updateClientAreaForBlock(block, false);\n var isTableHasParaVerticalOrigin = (!isNullOrUndefined(block.nextWidget) && block.nextWidget instanceof TableWidget && block.nextWidget === endBlock && (block.nextWidget.positioning.verticalOrigin === 'Paragraph'));\n block = block !== endBlock && !isTableHasParaVerticalOrigin ? block.nextWidget : undefined;\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.alignLineElements = function (element, topMargin, bottomMargin, maxDescent, addSubWidth, subWidth, textAlignment, whiteSpaceCount, isLastElement) {\n if (element.width > 0 && (element instanceof TextElementBox || element instanceof ListTextElementBox)) {\n var textElement = element instanceof TextElementBox ? element : undefined;\n //Updates the text to base line offset.\n var baselineOffset = element instanceof TextElementBox ? textElement.baselineOffset : element.baselineOffset;\n topMargin += this.maxBaseline - baselineOffset;\n bottomMargin += maxDescent - (element.height - baselineOffset);\n //Updates the text to base line offset.\n if (!isNullOrUndefined(textElement) && textAlignment === 'Justify' && whiteSpaceCount > 0) {\n //Aligns the text as Justified.\n textElement.isWidthUpdated = false;\n var width = textElement.width;\n var text = textElement.text;\n if (!addSubWidth) {\n text = HelperMethods.trimStart(text); // trim start\n addSubWidth = (text.length > 0);\n }\n if (addSubWidth) {\n var spaceCount = text.length - HelperMethods.removeSpace(text).length;\n if (isLastElement) {\n spaceCount -= text.length - HelperMethods.trimEnd(text).length;\n }\n if (whiteSpaceCount < spaceCount) {\n width = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text, textElement.characterFormat, textElement.scriptType);\n spaceCount = whiteSpaceCount;\n }\n if (spaceCount > 0) {\n textElement.width = width + subWidth * spaceCount;\n whiteSpaceCount -= spaceCount;\n }\n }\n }\n }\n else {\n addSubWidth = true;\n //Updates the Image/UIElement to base line offset.\n topMargin += this.maxBaseline - element.height;\n bottomMargin += maxDescent;\n }\n return { 'topMargin': topMargin, 'bottomMargin': bottomMargin, 'addSubWidth': addSubWidth, 'whiteSpaceCount': whiteSpaceCount };\n };\n Layout.prototype.updateWidgetToPage = function (viewer, paragraphWidget) {\n if (paragraphWidget.isInsideTable) {\n var cellWidget = paragraphWidget.associatedCell;\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n // if (viewer instanceof PageLayoutViewer) {\n if (isNullOrUndefined(paragraphWidget.associatedCell) || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow)\n || isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.rowFormat)) {\n return;\n }\n if (paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'Exactly') {\n cellWidget.height = HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height);\n }\n else {\n if ([cellWidget].length <= 1 && paragraphWidget.associatedCell.ownerRow.rowFormat.heightType === 'AtLeast') {\n cellWidget.height = Math.max(HelperMethods.convertPointToPixel(paragraphWidget.associatedCell.ownerRow.rowFormat.height), this.getCellContentHeight(cellWidget, false, paragraphWidget.indexInOwner));\n }\n else {\n cellWidget.height = cellWidget.height + paragraphWidget.height;\n }\n }\n // } else {\n // cellWidget.height = cellWidget.height + paragraphWidget.height;\n // }\n // cellWidget.childWidgets.push(paragraphWidget);\n paragraphWidget.containerWidget = cellWidget;\n }\n else {\n if (!paragraphWidget.isEndsWithPageBreak && !paragraphWidget.isEndsWithColumnBreak || viewer instanceof WebLayoutViewer) {\n paragraphWidget.height = viewer.clientActiveArea.y - paragraphWidget.y;\n }\n //Adds the paragraph widget to the Header Footer/ Body widget.\n // this.updateWidgetsToBody(paragraphWidget, viewer, paragraphWidget);\n //For canvas no need to render paragraph widget here. In case of div, need to render paragraph here.\n // this.render.renderParagraphWidget((paragraphWidget.containerWidget as BodyWidget).page, paragraphWidget);\n }\n if (this.isRelayoutFootnote && paragraphWidget.bodyWidget instanceof FootNoteWidget) {\n if (!paragraphWidget.isInsideTable) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n //this.isRelayoutFootnote = false;\n this.shiftFootnoteChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget) {\n if (!paragraphWidget.isInsideTable) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n if (this.viewer.owner.enableHeaderAndFooter && paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n }\n if (viewer instanceof WebLayoutViewer && paragraphWidget.containerWidget instanceof BodyWidget) {\n paragraphWidget.containerWidget.height += paragraphWidget.height;\n }\n };\n Layout.prototype.shiftFooterChildLocation = function (widget, viewer) {\n var pageHeight = widget.page.bodyWidgets[0].sectionFormat.pageHeight;\n if (widget.headerFooterType.indexOf('Footer') !== -1) {\n var footerDistance = widget.page.bodyWidgets[0].sectionFormat.footerDistance;\n var height = HelperMethods.convertPointToPixel(pageHeight - footerDistance);\n var top_1;\n if (widget.y + widget.height > height) {\n top_1 = height - (widget.y + widget.height);\n }\n else if (widget.y + widget.height < height) {\n top_1 = (widget.y + widget.height) - height;\n }\n if (!isNullOrUndefined(top_1)) {\n top_1 = height - (widget.y + widget.height);\n this.shiftChildLocation(top_1, widget);\n viewer.clientActiveArea.y += top_1;\n }\n }\n };\n Layout.prototype.shiftFootnoteChildLocation = function (widget, viewer) {\n var pageHeight = widget.page.bodyWidgets[0].sectionFormat.pageHeight;\n var footerDistance = widget.page.bodyWidgets[0].sectionFormat.footerDistance;\n var bottomMargin = widget.page.bodyWidgets[0].sectionFormat.bottomMargin;\n var height = HelperMethods.convertPointToPixel(pageHeight - bottomMargin);\n var top;\n if (widget.y + widget.height > height) {\n top = height - (widget.y + widget.height);\n }\n else if (widget.y + widget.height < height) {\n top = (widget.y + widget.height) - height;\n }\n if (!isNullOrUndefined(top)) {\n top = height - (widget.y + widget.height);\n this.shiftChildLocation(top, widget);\n viewer.clientActiveArea.y += top;\n }\n };\n Layout.prototype.checkPreviousElement = function (line, index) {\n var paragraph = line.paragraph;\n var isSplitByWord = false;\n var lastTextElement = 0;\n for (var i = index - 1; i >= 0; i--) {\n var textElement = line.children[i];\n if (textElement instanceof TextElementBox && textElement.width > 0) {\n var text = textElement.text;\n lastTextElement = i;\n if (text.length > 0 && (text[text.length - 1] === ' ' || text[text.length - 1] === '-')) {\n if (i === index - 1) {\n this.addSplittedLineWidget(line, index - 1);\n return true;\n }\n isSplitByWord = true;\n break;\n }\n else if (text === '\\t' || this.documentHelper.textHelper.isUnicodeText(text, textElement.scriptType)) {\n return false;\n }\n else if (text.indexOf(' ') >= 0) {\n isSplitByWord = true;\n var index_1 = text.lastIndexOf(' ') + 1;\n //Splits the text element by space.\n var splittedElement = new TextElementBox();\n splittedElement.text = text.substr(index_1);\n splittedElement.characterFormat.copyFormat(textElement.characterFormat);\n splittedElement.characterRange = textElement.characterRange;\n if (textElement.revisions.length > 0) {\n this.updateRevisionForSplittedElement(textElement, splittedElement, index_1 > 0);\n splittedElement.isMarkedForRevision = textElement.isMarkedForRevision;\n }\n textElement.text = text.substr(0, index_1);\n this.documentHelper.textHelper.getTextSize(splittedElement, textElement.characterFormat);\n textElement.width -= splittedElement.width;\n if (textElement.text[textElement.text.length - 1] === ' ') {\n textElement.trimEndWidth = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(textElement.text), textElement.characterFormat, textElement.scriptType);\n }\n else {\n textElement.trimEndWidth = textElement.width;\n }\n textElement.height = splittedElement.height;\n if (textElement.width === 0) {\n line.children.splice(i, 1);\n if (!isNullOrUndefined(line.layoutedElements) && line.layoutedElements.length > 0) {\n line.layoutedElements.splice(i, 1);\n }\n }\n //Adds the text element to the line\n line.children.splice(i + 1, 0, splittedElement);\n if (!isNullOrUndefined(line.layoutedElements)) {\n line.layoutedElements.splice(i + 1, 0, splittedElement);\n }\n break;\n }\n }\n else if (!(textElement instanceof ListTextElementBox || textElement instanceof FieldElementBox\n // to skip field code\n || textElement instanceof TextElementBox && textElement.width === 0 || textElement instanceof CommentCharacterElementBox || textElement instanceof ContentControl)) {\n //Handled for inline images/UIelements.\n lastTextElement = i;\n isSplitByWord = true;\n break;\n }\n }\n if (isSplitByWord) {\n lastTextElement++;\n if (lastTextElement < line.children.length) {\n var splitWidth = 0;\n for (var i = lastTextElement; i < line.children.length; i++) {\n splitWidth += line.children[i].width;\n this.addSplittedLineWidget(line, i - 1);\n i--;\n }\n var is2013Justification = paragraph.paragraphFormat.textAlignment === 'Justify' &&\n this.documentHelper.compatibilityMode === 'Word2013';\n if (!is2013Justification) {\n this.viewer.updateClientWidth(splitWidth);\n }\n }\n }\n return isSplitByWord;\n };\n Layout.prototype.clearListElementBox = function (paragraph) {\n if (paragraph.childWidgets.length === 0) {\n return;\n }\n var line = paragraph.childWidgets[0];\n if (isNullOrUndefined(line.children)) {\n return;\n }\n for (var i = line.children.length - 1; i > 0; i--) {\n if (line.children[i] instanceof ListTextElementBox) {\n line.children.splice(i, 1);\n }\n else {\n break;\n }\n }\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof ListTextElementBox) {\n line.children.splice(i, 1);\n i--;\n }\n else {\n break;\n }\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearInvalidList = function (list) {\n if (list) {\n if (list.abstractListId === -1 && this.documentHelper.abstractLists.indexOf(list.abstractList) !== -1) {\n this.documentHelper.abstractLists.splice(this.documentHelper.abstractLists.indexOf(list.abstractList), 1);\n }\n if (list.listId === -1 && this.documentHelper.lists.indexOf(list) !== -1) {\n this.documentHelper.lists.splice(this.documentHelper.lists.indexOf(list), 1);\n }\n }\n };\n Layout.prototype.getListNumber = function (listFormat, isAutoList) {\n var list = this.documentHelper.getListById(listFormat.listId);\n var levelNumber = listFormat.listLevelNumber;\n var listLevel = this.getListLevel(list, listFormat.listLevelNumber);\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[levelNumber] : undefined;\n // If LevelOverride exists and have either override list level or StartAtOverride, then only list numbering will be restarted.\n if (!isNullOrUndefined(levelOverride) && this.documentHelper.renderedLevelOverrides.indexOf(levelOverride) === -1 && isNullOrUndefined(levelOverride.overrideListLevel)) {\n //Add List Override style\n this.documentHelper.renderedLevelOverrides.push(levelOverride);\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n if (this.documentHelper.renderedLists.containsKey(abstractList)) {\n var levels = this.documentHelper.renderedLists.get(abstractList);\n if (levels.containsKey(levelNumber)) {\n levels.remove(levelNumber);\n this.ClearSubListLevelValues(list, abstractList, levelNumber);\n }\n }\n }\n if (isNullOrUndefined(isAutoList)) {\n this.updateListValues(list, levelNumber);\n }\n return this.getListText(list, levelNumber, listLevel);\n };\n Layout.prototype.ClearSubListLevelValues = function (list, abstractList, levelNumber) {\n var levels = this.documentHelper.renderedLists.get(abstractList);\n var levelNumberTemp = levelNumber + 1;\n while (levelNumberTemp < abstractList.levels.length) {\n var listLevel = this.getListLevel(list, levelNumberTemp);\n if (levels.containsKey(levelNumberTemp) && listLevel.restartLevel > levelNumber) {\n levels.remove(levelNumberTemp);\n }\n levelNumberTemp++;\n }\n };\n Layout.prototype.getListStartValue = function (listLevelNumber, list) {\n var levelOverride = !isNullOrUndefined(list.levelOverrides) ? list.levelOverrides[listLevelNumber] : undefined;\n if (!isNullOrUndefined(levelOverride) && isNullOrUndefined(levelOverride.overrideListLevel)) {\n return levelOverride.startAt;\n }\n var listLevel = this.getListLevel(list, listLevelNumber);\n if (isNullOrUndefined(listLevel)) {\n return 0;\n }\n else {\n return listLevel.startAt;\n }\n };\n Layout.prototype.updateListValues = function (list, listLevelNumber) {\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n var currentListLevel = this.getListLevel(list, listLevelNumber);\n if (!this.documentHelper.renderedLists.containsKey(abstractList)) {\n var startVal = new Dictionary();\n this.documentHelper.renderedLists.add(abstractList, startVal);\n var listLevel = this.getListLevel(list, listLevelNumber);\n for (var i = 0; i <= listLevelNumber; i++) {\n startVal.add(i, this.getListStartValue(i, list));\n }\n }\n else {\n var levels = this.documentHelper.renderedLists.get(abstractList);\n if (levels.containsKey(listLevelNumber)) {\n var startAt = levels.get(listLevelNumber);\n levels.set(listLevelNumber, startAt + 1);\n var levelNumber = listLevelNumber + 1;\n while (levelNumber < this.documentHelper.getAbstractListById(list.abstractListId).levels.length) {\n var listLevel = this.getListLevel(list, levelNumber);\n // if (!isNullOrUndefined(listLevel)) {\n if (levels.containsKey(levelNumber) && (listLevel.restartLevel > listLevelNumber || currentListLevel.listLevelPattern === \"Bullet\")) {\n levels.remove(levelNumber);\n // if (document.renderedListLevels.indexOf(listLevel) > -1) {\n // document.renderedListLevels.pop();\n // }\n }\n // }\n levelNumber++;\n }\n }\n else {\n var levelNumber = listLevelNumber;\n while (!levels.containsKey(levelNumber - 1) && levelNumber > 0) {\n var listLevel = this.getListLevel(list, levelNumber - 1);\n // if (!isNullOrUndefined(listLevel)) {\n levels.add(levelNumber - 1, this.getListStartValue(levelNumber - 1, list));\n // if (document.renderedListLevels.indexOf(listLevel) !== -1) {\n // document.renderedListLevels.push(listLevel);\n // }\n // }\n levelNumber--;\n }\n var startAt = this.getListStartValue(listLevelNumber, list);\n levels.add(listLevelNumber, startAt);\n }\n }\n };\n Layout.prototype.getListText = function (listAdv, listLevelNumber, currentListLevel) {\n var listText = currentListLevel.numberFormat;\n if (this.documentHelper.renderedLists.containsKey(this.documentHelper.getAbstractListById(listAdv.abstractListId))) {\n var levels = this.documentHelper.renderedLists.get(this.documentHelper.getAbstractListById(listAdv.abstractListId));\n var keys = levels.keys;\n for (var i = 0; i < keys.length; i++) {\n var levelNumber = keys[i];\n var levelKey = '%' + (levelNumber + 1).toString();\n // if isLegalStyleNumber boolean is true, consider the currentlistlevel for getting the replace text else use the levels from starting.\n var listLevel = this.getListLevel(listAdv, levelNumber);\n var pattern = i < listLevelNumber ? listLevel.listLevelPattern !== 'LeadingZero' ? 'Arabic' : listLevel.listLevelPattern : undefined;\n if (listText.match(levelKey)) {\n if (levelNumber > listLevelNumber) {\n return '';\n }\n else if (levels.containsKey(levelNumber) && !isNullOrUndefined(listLevel)) {\n listText = listText.replace(levelKey, this.getListTextListLevel(listLevel, levels.get(levelNumber), currentListLevel.isLegalStyleNumbering ? pattern : undefined));\n }\n else {\n listText = listText.replace(levelKey, '0');\n }\n }\n }\n }\n return listText;\n };\n Layout.prototype.getAsLetter = function (number) {\n // if (number <= 0) {\n // return '';\n // }\n var quotient = number / 26;\n var remainder = number % 26;\n if (remainder === 0) {\n //If number denotes the factor of 26, then reduce quotient by 1 and set remainder as 26.\n remainder = 26;\n quotient--;\n }\n //Index of A char in the ASCII table. \n var letter = String.fromCharCode(65 - 1 + remainder);\n var listValue = '';\n while (quotient >= 0) {\n listValue = listValue + letter.toString();\n quotient--;\n }\n return listValue;\n };\n Layout.prototype.getListTextListLevel = function (listLevel, listValue, customPattern) {\n switch (!isNullOrUndefined(customPattern) ? customPattern : listLevel.listLevelPattern) {\n case 'UpRoman':\n return this.getAsRoman(listValue).toUpperCase();\n case 'LowRoman':\n return this.getAsRoman(listValue).toLowerCase();\n case 'UpLetter':\n return this.getAsLetter(listValue).toUpperCase();\n case 'LowLetter':\n return this.getAsLetter(listValue).toLowerCase();\n case 'Arabic':\n return (listValue).toString();\n case 'LeadingZero':\n return this.getAsLeadingZero(listValue);\n case 'Number':\n return (listValue).toString();\n case 'OrdinalText':\n if (listLevel.characterFormat.localeIdAscii === 3082 || this.documentHelper.characterFormat.localeIdAscii === 3082) {\n return this.getOrdinalTextInSpanish(true, listValue.toString()).toUpperCase();\n }\n else {\n return this.getOrdinalText(true, listValue.toString()).toUpperCase();\n }\n case 'Ordinal':\n return this.getAsOrdinal(listValue, listLevel.characterFormat).toString();\n case 'FarEast':\n return (listValue).toString();\n case 'Special':\n return (listValue).toString();\n default:\n return '';\n }\n };\n Layout.prototype.getFootEndNote = function (numberFormat, value) {\n switch (numberFormat) {\n case 'UpperCaseRoman':\n return this.getAsRoman(value).toUpperCase();\n case 'LowerCaseRoman':\n return this.getAsRoman(value).toLowerCase();\n case 'UpperCaseLetter':\n return this.getAsLetter(value).toUpperCase();\n case 'LowerCaseLetter':\n return this.getAsLetter(value).toLowerCase();\n default:\n return (value).toString();\n }\n };\n Layout.prototype.generateNumber = function (number, magnitude, letter) {\n var numberstring = '';\n while (number >= magnitude) {\n number -= magnitude;\n numberstring += letter;\n this.value = number;\n }\n return numberstring.toString();\n };\n Layout.prototype.getAsLeadingZero = function (listValue) {\n if (listValue < 10) {\n return '0' + listValue.toString();\n }\n else {\n return listValue.toString();\n }\n };\n Layout.prototype.getAsRoman = function (number) {\n var retval = '';\n this.value = number;\n retval += this.generateNumber(this.value, 1000, 'M');\n retval += this.generateNumber(this.value, 900, 'CM');\n retval += this.generateNumber(this.value, 500, 'D');\n retval += this.generateNumber(this.value, 400, 'CD');\n retval += this.generateNumber(this.value, 100, 'C');\n retval += this.generateNumber(this.value, 90, 'XC');\n retval += this.generateNumber(this.value, 50, 'L');\n retval += this.generateNumber(this.value, 40, 'XL');\n retval += this.generateNumber(this.value, 10, 'X');\n retval += this.generateNumber(this.value, 9, 'IX');\n retval += this.generateNumber(this.value, 5, 'V');\n retval += this.generateNumber(this.value, 4, 'IV');\n retval += this.generateNumber(this.value, 1, 'I');\n return retval.toString();\n };\n Layout.prototype.getOrdinalText = function (ordinalString, text) {\n //Check whether the text contain alphabet or not\n if (ordinalString) {\n text = text.trim();\n for (var i = 0; i < text.length; i++) {\n if (/[a-zA-Z]/.test(text.charAt(i))) {\n ordinalString = false;\n break;\n }\n }\n //Get ordinal string\n if (ordinalString) {\n text = this.numberToWords(parseInt(text), false);\n }\n }\n return text;\n };\n Layout.prototype.numberToWords = function (number, isCardText) {\n if (number === 0)\n return \"zero\";\n var words = '';\n if (Math.floor(number / 1000000) > 0) {\n words += this.numberToWords(Math.floor(number / 1000000), isCardText) + \" million \";\n if (!isCardText && number % 10 === 0)\n words += \"th \";\n number %= 1000000;\n }\n if (Math.floor(number / 1000) > 0) {\n words += this.numberToWords(Math.floor(number / 1000), isCardText) + \" thousand \";\n if (!isCardText && number % 10 === 0)\n words += \"th \";\n number %= 1000;\n }\n if (Math.floor(number / 100) > 0) {\n words += this.numberToWords(Math.floor(number / 100), isCardText) + \" hundred \";\n if (!isCardText && number % 10 === 0)\n words += \"th \";\n number %= 100;\n }\n if (number > 0) {\n if (words !== '' && isCardText)\n words += \"and \";\n var unitsValue = null;\n if (isCardText) {\n unitsValue = [\n \"\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\", \"eleven\",\n \"twelve\", \"thirteen\", \"fourteen\", \"fifteen\", \"sixteen\", \"seventeen\", \"eighteen\", \"nineteen\"\n ];\n }\n else {\n unitsValue = [\n \"\", \"first\", \"second\", \"third\", \"fourth\", \"fifth\", \"sixth\", \"seventh\", \"eighth\", \"ninth\",\n \"tenth\", \"eleventh\", \"twelfth\", \"thirteenth\", \"fourteenth\", \"fifteenth\", \"sixteenth\",\n \"seventeenth\", \"eighteenth\", \"nineteenth\"\n ];\n }\n var tensValue = [\n \"\", \"ten\", \"twenty\", \"thirty\", \"forty\", \"fifty\", \"sixty\", \"seventy\", \"eighty\",\n \"ninety\"\n ];\n var tensValue_ith = [\n \"\", \"tenth\", \"twentieth\", \"thirtieth\", \"fortieth\", \"fiftieth\", \"sixtieth\", \"seventieth\",\n \"eightieth\", \"ninetieth\"\n ];\n if (number < 20)\n words += unitsValue[number];\n else {\n if (isCardText || number % 10 > 0)\n words += tensValue[Math.floor(number / 10)];\n if (number % 10 === 0 && !isCardText)\n words += tensValue_ith[Math.floor(number / 10)];\n else if (number % 10 > 0)\n words += \"-\" + unitsValue[number % 10];\n }\n }\n return words;\n };\n Layout.prototype.getOrdinalTextInSpanish = function (ordinalString, text) {\n //Check whether the text contain alphabet or not\n if (ordinalString) {\n text = text.trim();\n for (var i = 0; i < text.length; i++) {\n if (/[a-zA-Z]/.test(text.charAt(i))) {\n ordinalString = false;\n break;\n }\n }\n //Get ordinal string\n if (ordinalString) {\n text = this.numberToSpanishWords(parseInt(text), false);\n }\n }\n return text;\n };\n Layout.prototype.numberToSpanishWords = function (number, isCardText) {\n if (number === 0 && isCardText)\n return \"cero\";\n var words = '';\n if (Math.floor(number / 1000) > 0 && number <= 10000) {\n var thousandCardinalValue = [\n \"\", \"mil\", \"dos mil\", \"tres mil\", \"cuatro mil\", \"cinco mil\", \"seis mil\", \"siete mil\", \"ocho mil\",\n \"nueve mil\", \"diez mil\"\n ];\n var thousandOrdinalValue = [\n \"\", \"milésimo\", \"dosmilésimo\", \"tresmilésimo\", \"cuatromilésimo\", \"cincomilésimo\", \"seismilésimo\", \"sietemilésimo\",\n \"ochomilésimo\", \"nuevemilésimo\", \"diezmilésimo\"\n ];\n if (isCardText)\n words += thousandCardinalValue[Math.floor(number / 1000)];\n else\n words += thousandOrdinalValue[Math.floor(number / 1000)];\n number %= 1000;\n }\n if (Math.floor(number / 100) > 0) {\n if (words !== '')\n words += \" \";\n var cardinalHundredsValue = [\n \"\", \"ciento\", \"doscientos\", \"trescientos\", \"cuatrocientos\", \"quinientos\", \"seiscientos\", \"setecientos\",\n \"ochocientos\", \"novecientos\"\n ];\n var ordinalHundredsValue = [\n \"\", \"centésimo\", \"ducentésimo\", \"tricentésimo\", \"cuadringentésimo\", \"quingentésimo\", \"sexcentésimo\",\n \"septingentésimo\", \"octingentésimo\", \"noningentésimo\"\n ];\n if (isCardText)\n words += cardinalHundredsValue[Math.floor(number / 100)];\n else\n words += ordinalHundredsValue[Math.floor(number / 100)];\n number %= 100;\n }\n if (number > 0 && number < 100) {\n if (words !== '')\n words += \" \";\n var unitsValue = null;\n if (isCardText) {\n unitsValue = [\n \"\", \"uno\", \"dos\", \"tres\", \"cuatro\", \"cinco\", \"seis\", \"siete\", \"ocho\", \"nueve\", \"diez\", \"once\",\n \"doce\", \"trece\", \"catorce\", \"quince\", \"dieciséis\", \"diecisiete\", \"dieciocho\", \"diecinueve\"\n ];\n }\n else {\n unitsValue = [\n \"\", \"primero\", \"segundo\", \"tercero\", \"cuarto\", \"quinto\", \"sexto\", \"séptimo\", \"octavo\",\n \"noveno\", \"décimo\", \"undécimo\", \"duodécimo\", \"decimotercero\", \"decimocuarto\", \"decimoquinto\",\n \"decimosexto\", \"decimoséptimo\", \"decimoctavo\", \"decimonoveno\"\n ];\n }\n var tensValue = [\n \"\", \"diez\", \"veinte\", \"treinta\", \"cuarenta\", \"cincuenta\", \"sesenta\", \"setenta\", \"ochenta\",\n \"noventa\"\n ];\n var tensValue_Ordinal = [\n \"\", \"décimo\", \"vigésimo\", \"trigésimo\", \"cuadragésimo\", \"quincuagésimo\", \"sexagésimo\", \"septuagésimo\",\n \"octogésimo\", \"nonagésimo\"\n ];\n var cardNumberFrom21to29Value = [\n \"\", \"veintiuno\", \"veintidós\", \"veintitrés\", \"veinticuatro\", \"veinticinco\", \"veintiséis\", \"veintisiete\",\n \"veintiocho\", \"veintinueve\"\n ];\n if (number < 20)\n words += unitsValue[number];\n else if (number > 20 && number < 30 && isCardText) {\n words += cardNumberFrom21to29Value[number % 10];\n }\n else {\n if (isCardText && number % 10 > 0)\n words += tensValue[Math.floor(number / 10)];\n else if (isCardText && number % 10 === 0)\n words += tensValue[Math.floor(number / 10)];\n if (number % 10 > 0 && !isCardText)\n words += tensValue_Ordinal[Math.floor(number / 10)];\n if (number % 10 === 0 && !isCardText)\n words += tensValue_Ordinal[Math.floor(number / 10)];\n else if (number % 10 > 0)\n if (isCardText)\n words += \" y \" + unitsValue[number % 10];\n else\n words += \" \" + unitsValue[number % 10];\n }\n }\n return words;\n };\n Layout.prototype.getAsOrdinal = function (number, characterFormat) {\n switch (characterFormat.localeIdAscii) {\n case 1069:\n case 8218:\n case 5146:\n case 4122:\n case 1050:\n case 1029:\n case 1061:\n case 1035:\n case 3079:\n case 1031:\n case 5127:\n case 4103:\n case 2055:\n case 1038:\n case 1060:\n case 1055:\n case 1044:\n case 2068:\n case 1045:\n case 6170:\n case 2074:\n //Returns ordinal in Czech\n return number.toString() + \".\";\n case 2060:\n case 11276:\n case 3084:\n case 9228:\n case 12300:\n case 1036:\n case 15372:\n case 5132:\n case 13324:\n case 6156:\n case 14348:\n case 8204:\n case 10252:\n case 4108:\n //Returns Ordinal in French\n if (number == 1)\n return number.toString() + \"er\";\n else\n return number.toString() + \"e\";\n case 2067:\n case 1043:\n //Returns Ordinal in Dutch\n return number.toString() + \"e\";\n case 1032:\n //Returns Ordinal in Greek \n return number.toString() + \"o\";\n case 1040:\n case 2064:\n //Returns Ordinal in Italian\n return number.toString() + String.fromCharCode(176);\n case 5130:\n case 7178:\n case 12298:\n case 17418:\n case 4106:\n case 1046:\n case 2070:\n case 11274:\n case 16394:\n case 13322:\n case 9226:\n case 18442:\n case 2058:\n case 19466:\n case 6154:\n case 15370:\n case 10250:\n case 20490:\n case 3082:\n case 1034:\n case 21514:\n case 14346:\n case 8202:\n //Returns Ordinal in Spanish\n return number.toString() + String.fromCharCode(186);\n case 1049:\n case 2073:\n //Returns Ordinal in Russian\n return number.toString() + \"-\" + String.fromCharCode(1081);\n case 2077:\n case 1053:\n //Returns Ordinal in Swedish\n return this.getOrdinalInSwedish(number);\n case 1027:\n //Returns Ordinal in Catalan\n return this.getOrdinalInCatalan(number);\n case 1030:\n //Returns Ordinal in Danish\n return this.getOrdinalInDanish(number);\n default:\n //Returns Ordinal in English (Default)\n return this.getOrdinalInEnglish(number);\n }\n };\n Layout.prototype.getOrdinalInEnglish = function (number) {\n switch (number % 100) {\n case 11:\n case 12:\n case 13:\n return number.toString() + \"th\";\n }\n switch (number % 10) {\n case 1:\n return number.toString() + \"st\";\n case 2:\n return number.toString() + \"nd\";\n case 3:\n return number.toString() + \"rd\";\n default:\n return number.toString() + \"th\";\n }\n };\n Layout.prototype.getOrdinalInSwedish = function (number) {\n if (number == 11 || number == 12) {\n return number.toString() + \":e\";\n }\n else if ((number % 10) == 1 || (number % 10) == 2) {\n return number.toString() + \":a\";\n }\n else\n return number.toString() + \":e\";\n };\n Layout.prototype.getOrdinalInCatalan = function (number) {\n switch (number) {\n case 1:\n return number.toString() + \".\";\n case 2:\n return number.toString() + \"n\";\n case 3:\n return number.toString() + \"r\";\n case 4:\n return number.toString() + \"t\";\n case 14:\n return number.toString() + String.fromCharCode(232) + \"h\";\n default:\n return number.toString() + String.fromCharCode(232);\n }\n };\n Layout.prototype.getOrdinalInDanish = function (number) {\n if (number == 0)\n return number.toString() + \"te\";\n switch (number % 100) {\n case 0:\n return number.toString() + \"ende\";\n case 1:\n return number.toString() + \"ste\";\n case 2:\n return number.toString() + \"nden\";\n case 3:\n return number.toString() + \"dje\";\n case 4:\n return number.toString() + \"rde\";\n case 5:\n case 6:\n case 11:\n case 12:\n case 30:\n return number.toString() + \"te\";\n default:\n return number.toString() + \"nde\";\n }\n };\n Layout.prototype.getListLevel = function (list, listLevelNumber) {\n if (!isNullOrUndefined(list)) {\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n if (!isNullOrUndefined(list) && abstractList.levels.length <= listLevelNumber\n && listLevelNumber >= 0 && listLevelNumber < 9) {\n this.addListLevels(abstractList);\n }\n var levelOverrideAdv = undefined;\n var level = false;\n level = (!isNullOrUndefined(list.levelOverrides))\n && !isNullOrUndefined((levelOverrideAdv = this.getOverrideListLevel(list.levelOverrides, listLevelNumber)))\n && (!isNullOrUndefined(levelOverrideAdv.overrideListLevel));\n if (level) {\n if (isNullOrUndefined(levelOverrideAdv.startAt)) {\n levelOverrideAdv.overrideListLevel.startAt = abstractList.levels[listLevelNumber].startAt;\n }\n return levelOverrideAdv.overrideListLevel;\n }\n else if (!isNullOrUndefined(abstractList) && listLevelNumber >= 0 && listLevelNumber < abstractList.levels.length) {\n return abstractList.levels[listLevelNumber];\n }\n }\n return undefined;\n };\n Layout.prototype.getOverrideListLevel = function (levelOverrides, listLevelNumber) {\n for (var i = 0; i < levelOverrides.length; i++) {\n if (levelOverrides[i].levelNumber == listLevelNumber)\n return levelOverrides[i];\n }\n return undefined;\n };\n Layout.prototype.getTabWidth = function (paragraph, viewer, index, lineWidget, element) {\n var fPosition = 0;\n var isCustomTab = false;\n var tabs = paragraph.paragraphFormat.getUpdatedTabs();\n var isList = false;\n var sectionFormat = paragraph.bodyWidget.sectionFormat;\n var leftMargin = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n var tabBeforeLeftIndent = false;\n if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat.listLevel) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat.listLevel.paragraphFormat)) {\n var listFormat = paragraph.paragraphFormat.listFormat.listLevel.paragraphFormat;\n if (paragraph.paragraphFormat.leftIndent !== listFormat.leftIndent) {\n isList = true;\n }\n }\n var clientWidth = 0;\n var clientActiveX = viewer.clientActiveArea.x;\n var firstLineIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n var leftIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent);\n if (!isNullOrUndefined(element) && lineWidget.isFirstLine()) {\n clientWidth = this.viewer.clientArea.x + firstLineIndent;\n if (isList) {\n clientActiveX = clientActiveX + firstLineIndent;\n }\n }\n else {\n clientWidth = this.viewer.clientArea.x;\n }\n if (clientActiveX < clientWidth && (this.documentHelper.compatibilityMode !== 'Word2003' || tabs.length === 0)) {\n return viewer.clientArea.x - viewer.clientActiveArea.x;\n }\n var position = viewer.clientActiveArea.x -\n (viewer.clientArea.x - HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent));\n for (var i = 0; i < tabs.length; i++) {\n var tabStop = tabs[i];\n var tabStopPosition = HelperMethods.convertPointToPixel(tabStop.position);\n if (tabStopPosition < leftIndent) {\n if (parseFloat(position.toFixed(2)) < parseFloat(tabStopPosition.toFixed(2))) {\n tabBeforeLeftIndent = true;\n }\n else {\n tabBeforeLeftIndent = false;\n }\n }\n }\n if (lineWidget.isFirstLine() && leftIndent > 0 && firstLineIndent < 0\n && (element instanceof ListTextElementBox || !tabBeforeLeftIndent)) {\n if ((viewer.clientArea.x - viewer.clientActiveArea.x) > 0) {\n return viewer.clientArea.x - viewer.clientActiveArea.x;\n }\n else if (tabs.length === 0 && paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listLevel) {\n tabs = paragraph.paragraphFormat.listFormat.listLevel.paragraphFormat.tabs;\n }\n }\n // Calculates tabwidth based on pageleftmargin and defaulttabwidth property\n var defaultTabWidth = HelperMethods.convertPointToPixel(this.documentHelper.defaultTabWidth);\n if (tabs.length === 0 && (position > 0 && defaultTabWidth > Math.round(position) && isList ||\n defaultTabWidth === this.defaultTabWidthPixel && defaultTabWidth > Math.round(position))) {\n return defaultTabWidth - position;\n }\n else {\n var breaked = false;\n if (tabs.length > 0) {\n for (var i = tabs.length - 1; i > -1; i--) {\n var tabStop = tabs[i];\n var tabPosition = HelperMethods.convertPointToPixel(tabStop.position);\n if (!(parseFloat(tabPosition.toFixed(2)) > parseFloat(position.toFixed(2)))) {\n if (i > 0 && (HelperMethods.convertPointToPixel(tabs[i - 1].position) > parseFloat(position.toFixed(2)))) {\n continue;\n }\n if (i != tabs.length - 1) {\n var tabInfo = this.getJustificationTabWidth(tabs[i + 1], element, lineWidget, paragraph, defaultTabWidth, position, fPosition);\n defaultTabWidth = tabInfo.defaultTabWidth;\n fPosition = tabInfo.fPosition;\n position = tabInfo.position;\n isCustomTab = true;\n }\n breaked = true;\n break;\n }\n }\n if (!breaked) {\n var tabJustification = this.getJustificationTabWidth(tabs[0], element, lineWidget, paragraph, defaultTabWidth, position, fPosition);\n defaultTabWidth = tabJustification.defaultTabWidth;\n fPosition = tabJustification.fPosition;\n position = tabJustification.position;\n isCustomTab = true;\n }\n }\n if (!isCustomTab) {\n var diff = parseFloat(((position * 100) % (defaultTabWidth * 100) / 100).toFixed(2));\n var cnt = (position - diff) / defaultTabWidth;\n fPosition = (cnt + 1) * defaultTabWidth;\n }\n if (parseFloat(fPosition.toFixed(1)) === parseFloat(position.toFixed(1))) {\n return defaultTabWidth;\n }\n return (fPosition - position) > 0 ? fPosition - position : defaultTabWidth;\n }\n };\n Layout.prototype.getJustificationTabWidth = function (tab, element, lineWidget, paragraph, defaultTabWidth, position, fPosition) {\n var elementWidth = element ? this.documentHelper.textHelper.getTextSize(element, element.characterFormat) : 0;\n if (tab.tabJustification === 'Left' || tab.tabJustification === 'List') {\n fPosition = HelperMethods.convertPointToPixel(tab.position);\n if (element instanceof TabElementBox) {\n element.tabLeader = tab.tabLeader;\n element.tabText = '';\n }\n }\n else {\n var tabWidth = HelperMethods.convertPointToPixel(tab.position) - position;\n var width = this.getRightTabWidth(element.indexInOwner + 1, lineWidget, paragraph);\n if (width < tabWidth && tab.tabJustification != 'Decimal') {\n if (tab.tabJustification === 'Right') {\n defaultTabWidth = tabWidth - width;\n var rightIndent = HelperMethods.convertPointToPixel(paragraph.rightIndent);\n var areaWidth = this.viewer.clientActiveArea.width + rightIndent - defaultTabWidth;\n this.viewer.clientActiveArea.width += rightIndent;\n if (areaWidth < 0) {\n defaultTabWidth += areaWidth - width;\n }\n else if (width > areaWidth) {\n defaultTabWidth -= width - areaWidth;\n }\n }\n else {\n defaultTabWidth = tabWidth - width / 2;\n }\n }\n else if (tab.tabJustification === 'Center' && (width / 2) < tabWidth) {\n defaultTabWidth = tabWidth - width / 2;\n }\n else if (tab.tabJustification === 'Decimal') {\n if (!isNullOrUndefined(element.nextElement) && element.nextElement instanceof TextElementBox) {\n var nextElement = element.nextElement;\n if (nextElement.text.indexOf(\".\") != -1) {\n var index = nextElement.text.indexOf(\".\");\n var text = nextElement.text.substring(0, index);\n var textWidth = this.documentHelper.textHelper.getWidth(text, nextElement.characterFormat, nextElement.scriptType);\n defaultTabWidth = tabWidth - textWidth;\n }\n else if (width < tabWidth) {\n defaultTabWidth = tabWidth - width;\n }\n else {\n defaultTabWidth = tabWidth;\n }\n }\n else {\n defaultTabWidth = tabWidth;\n }\n }\n else {\n defaultTabWidth = tab.tabJustification === 'Right' ? 0 : elementWidth;\n }\n fPosition = position;\n if (element instanceof TabElementBox) {\n element.tabLeader = tab.tabLeader;\n element.tabText = '';\n }\n }\n return {\n defaultTabWidth: defaultTabWidth,\n fPosition: fPosition,\n position: position\n };\n };\n Layout.prototype.getRightTabWidth = function (index, lineWidget, paragraph) {\n var width = 0;\n var isFieldCode = false;\n var elementBox = lineWidget.children[index];\n while (elementBox) {\n if ((elementBox instanceof FieldElementBox) || (elementBox instanceof BookmarkElementBox) || isFieldCode) {\n if (elementBox instanceof FieldElementBox) {\n if (elementBox.fieldType === 0) {\n isFieldCode = true;\n }\n else if (elementBox.fieldType === 2) {\n isFieldCode = false;\n }\n }\n elementBox.width = 0;\n }\n else {\n if (elementBox instanceof FieldTextElementBox && !this.isTocField(elementBox.fieldBegin)) {\n var text = this.documentHelper.getFieldResult(elementBox.fieldBegin, elementBox.paragraph.bodyWidget.page);\n if (text !== '') {\n elementBox.text = text;\n }\n }\n if (elementBox instanceof TextElementBox) {\n this.documentHelper.textHelper.getTextSize(elementBox, elementBox.characterFormat);\n }\n }\n if (elementBox instanceof TextElementBox && elementBox.text === '\\t') {\n return width;\n }\n else {\n width = width + elementBox.width;\n }\n elementBox = elementBox.nextNode;\n }\n return width;\n };\n Layout.prototype.getSplitIndexByWord = function (clientActiveWidth, text, width, characterFormat, scriptType) {\n var index = 0;\n var length = text.length;\n while (index < length) {\n var nextIndex = this.getTextIndexAfterSpace(text, index);\n if (nextIndex === 0 || nextIndex === length) {\n nextIndex = length - 1;\n }\n var splitWidth = width;\n if ((nextIndex < length - 1 || (nextIndex === length - 1 && text[nextIndex - 1] === ' ')) && index !== nextIndex) {\n splitWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.slice(0, nextIndex), characterFormat, scriptType);\n }\n if (splitWidth <= clientActiveWidth) {\n index = nextIndex;\n }\n else {\n if (index === 0 && text[0] === ' ') {\n index = this.getTextIndexAfterSpace(text, 0);\n }\n break;\n }\n }\n return index;\n };\n Layout.prototype.getTextSplitIndexByCharacter = function (totalClientWidth, clientActiveAreaWidth, text, width, characterFormat, scriptType) {\n var length = text.length;\n for (var i = 0; i < length; i++) {\n var splitWidth = width;\n if (i + 1 < length) {\n splitWidth = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(text.substring(0, i + 1), characterFormat, scriptType);\n }\n if (splitWidth > clientActiveAreaWidth) {\n if (i === 0 && splitWidth > totalClientWidth) {\n //Handle for cell/section having client width less than a character's width.\n return (length > 1 && text[1] === ' ') ? this.getTextIndexAfterSpace(text, 1) : 1;\n }\n else if (text[i] === ' ') {\n // If the character is space, then split the text from next character.\n return this.getTextIndexAfterSpace(text, i);\n }\n return i;\n }\n }\n return 0;\n };\n Layout.prototype.getSubWidth = function (lineWidget, justify, spaceCount, firstLineIndent, isParagraphEnd) {\n var width = 0;\n var trimSpace = true;\n var lineText = '';\n var trimmedSpaceWidth = 0;\n var isBidi = lineWidget.paragraph.paragraphFormat.bidi;\n if (this.wrapPosition.length > 0) {\n var subWidths = this.getSubWidthBasedOnTextWrap(lineWidget, justify, spaceCount, firstLineIndent, isParagraphEnd);\n if (subWidths.length > 0) {\n return subWidths;\n }\n }\n var renderElementBox = lineWidget.renderedElements;\n for (var i = renderElementBox.length - 1; i >= 0; i--) {\n var element = renderElementBox[i];\n if (element.width > 0 && element instanceof TextElementBox) {\n var elementText = element.text;\n lineText = elementText + lineText;\n if (justify && isBidi) {\n if (elementText === ' ' && i - 1 >= 0 && renderElementBox[i - 1].text === ' ') {\n trimSpace = true;\n }\n else {\n trimSpace = false;\n }\n }\n if (trimSpace && (elementText.trim() !== '' || elementText === '\\t')) {\n if (HelperMethods.endsWith(elementText)) {\n var widthExcludeSpace = this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(elementText, element.characterFormat, element.scriptType);\n width += widthExcludeSpace;\n // Trimmed space width can be found by subtracting the actual width and width exclude end space.\n trimmedSpaceWidth += element.width - widthExcludeSpace;\n }\n else {\n width += element.width;\n }\n trimSpace = false;\n }\n else if (!trimSpace) {\n width += element.width;\n }\n else {\n ////Add the width of the textelement which contains space alone and present at end of the line.\n trimmedSpaceWidth += element.width;\n }\n }\n else {\n lineText = 'a' + lineText;\n trimSpace = false;\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n width += element.width;\n }\n if (!justify) {\n width = Math.round(width);\n }\n else {\n width = width;\n }\n }\n var totalSpaceCount = lineText.length - HelperMethods.removeSpace(lineText).length;\n lineText = lineText.trim();\n spaceCount = lineText.length - HelperMethods.removeSpace(lineText).length;\n var subWidth = (this.viewer.clientArea.width - firstLineIndent - width);\n var totalSubWidth = (this.viewer.clientArea.width - firstLineIndent - (width + trimmedSpaceWidth));\n if (isBidi && justify) {\n if (totalSubWidth < 0) {\n trimmedSpaceWidth = -trimmedSpaceWidth;\n }\n else {\n subWidth = totalSubWidth;\n }\n }\n if ((subWidth <= 0 && !this.is2013Justification) || (spaceCount === 0 && justify && !isBidi)) {\n spaceCount = 0;\n subWidth = 0;\n }\n else if (justify) {\n // For justify alignment, element width will be updated based space count value.\n // So when the element is paragraph end, need to set space count to zero.\n if (!isParagraphEnd && spaceCount > 0 || (isParagraphEnd && this.is2013Justification && spaceCount > 0)) {\n subWidth = subWidth / spaceCount;\n }\n else {\n spaceCount = 0;\n }\n }\n ////Generally, trailing space of line should get trimmed, if alignment type is Right or Left.\n ////But, if right-to-left rendering is enabled and it is last line of paragraph than the trailing space should be preserved.\n ////So, subtracted the trimmedSpaceWidth from subWidth.\n else if (trimmedSpaceWidth > 0 && isBidi && isParagraphEnd) {\n subWidth -= trimmedSpaceWidth;\n }\n // So set sub width to zero to layout the element in left alignment\n // Need to remove is once after implementing subwidth update separatly\n return [{ 'trimmedSpaceWidth': trimmedSpaceWidth, 'subWidth': subWidth, 'spaceCount': spaceCount, 'totalSpaceCount': totalSpaceCount }];\n };\n Layout.prototype.getSubWidthBasedOnTextWrap = function (lineWidget, justify, spaceCount, firstLineIndent, isParagraphEnd) {\n var subWidths = [];\n var width = 0;\n var lineContent = '';\n var wrapIndex = this.wrapPosition.length - 1;\n var trimSpace = true;\n for (var z = lineWidget.children.length - 1; z >= 0; z--) {\n var elementBox = lineWidget.children[z];\n if (elementBox.width > 0 && elementBox instanceof TextElementBox) {\n var elementText = elementBox.text;\n lineContent = elementText + lineContent;\n if (trimSpace && (elementText.trim() !== '' || elementText === '\\t')) {\n if (HelperMethods.endsWith(elementText)) {\n width += this.documentHelper.textHelper.measureTextExcludingSpaceAtEnd(elementText, elementBox.characterFormat, elementBox.scriptType);\n }\n else {\n width += elementBox.width;\n }\n trimSpace = false;\n }\n else if (!trimSpace) {\n width += elementBox.width;\n }\n }\n else {\n lineContent = 'a' + lineContent;\n trimSpace = false;\n if (!(elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline')) {\n width += elementBox.width;\n }\n }\n if ((elementBox.padding.left > 0 || z === 0) && (wrapIndex >= 0)) {\n var wrapPosition = this.wrapPosition[wrapIndex--];\n while (wrapPosition.width <= 0 && (wrapIndex >= 0)) {\n wrapPosition = this.wrapPosition[wrapIndex--];\n }\n var info = this.getSubWidthInfo(lineWidget, wrapPosition.width, width, lineContent, spaceCount, justify, isParagraphEnd);\n if (!isNullOrUndefined(info)) {\n width = 0;\n lineContent = '';\n subWidths.unshift(info);\n }\n }\n }\n return subWidths;\n };\n /* eslint-disable */\n Layout.prototype.isWordFittedByJustification = function (element, nextWordWidth) {\n var line = element.line;\n var paragraph = line.paragraph;\n var paraFormat = paragraph.paragraphFormat;\n var textAlignment = paraFormat.textAlignment;\n var isParagraphEnd = line.isLastLine();\n var firstLineIndent = 0;\n if (line.isFirstLine()) {\n firstLineIndent = HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n var availableLineWidth = this.viewer.clientActiveArea.width;\n if (nextWordWidth != 0 && availableLineWidth >= nextWordWidth / 2) {\n var whiteSpaceCount = 0;\n var widthInfo = void 0;\n var totalSpaceCount = 0;\n if (textAlignment !== 'Left' && this.viewer.textWrap && (!(textAlignment === 'Justify' && isParagraphEnd)\n || (textAlignment === 'Justify' && paraFormat.bidi) || (this.is2013Justification && isParagraphEnd))) {\n widthInfo = this.getSubWidth(line, textAlignment === 'Justify', whiteSpaceCount, firstLineIndent, isParagraphEnd);\n whiteSpaceCount = widthInfo[0].spaceCount;\n totalSpaceCount = widthInfo[0].totalSpaceCount;\n }\n if (!isNullOrUndefined(widthInfo) && widthInfo.length == 1 && availableLineWidth > 0\n && textAlignment === 'Justify' && this.documentHelper.compatibilityMode === 'Word2013' && !this.is2013Justification\n && paraFormat.rightIndent === 0 && paraFormat.leftIndent === 0) {\n var effectiveWidth = 0;\n var totalSpaceWidth = this.getTotalSpaceWidth(line, totalSpaceCount);\n var normalWidth = totalSpaceWidth / totalSpaceCount;\n var justifyWidth = (availableLineWidth + totalSpaceWidth) / totalSpaceCount;\n var diffFactor = ((justifyWidth - normalWidth) / normalWidth) * 100;\n if (diffFactor <= 33) {\n effectiveWidth = totalSpaceWidth / 8;\n }\n else {\n effectiveWidth = totalSpaceWidth / 4;\n }\n if (availableLineWidth + effectiveWidth >= nextWordWidth) {\n this.viewer.clientActiveArea.x -= effectiveWidth;\n this.viewer.clientActiveArea.width += effectiveWidth;\n this.is2013Justification = true;\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Returns the total space width in line widget.\n * @param {LineWidget} lineWidget - the line widget\n * @param {number} count - the space count to be considered.\n * @returns {number} the total space width.\n */\n Layout.prototype.getTotalSpaceWidth = function (lineWidget, count) {\n var totalSpaceWidth = 0;\n var totalSpaceCount = 0;\n if (lineWidget) {\n for (var i = 0; i < lineWidget.children.length; i++) {\n var currentWidget = lineWidget.children[i];\n if (currentWidget instanceof TextElementBox) {\n var spaceCount = currentWidget.text.length - HelperMethods.removeSpace(currentWidget.text).length;\n if (spaceCount > 0) {\n var spaceWidth = this.documentHelper.textHelper.getWidth(' ', currentWidget.characterFormat, currentWidget.scriptType);\n totalSpaceWidth += spaceCount * spaceWidth;\n totalSpaceCount += spaceCount;\n }\n }\n if (!isNullOrUndefined(count) && totalSpaceCount >= count) {\n break;\n }\n }\n }\n return totalSpaceWidth;\n };\n Layout.prototype.getSubWidthInfo = function (lineWidget, lastWrapPositionWidth, width, lineContent, spaceCount, justify, isParagraphEnd) {\n if (lastWrapPositionWidth > 0) {\n var wrappedSubWidth = lastWrapPositionWidth - width;\n lineContent = lineContent.trim();\n spaceCount = lineContent.length - HelperMethods.removeSpace(lineContent).length;\n // TODO: Consider first line indent.\n var totalSubWidth = wrappedSubWidth;\n if (totalSubWidth <= 0 || (spaceCount === 0 && justify && !lineWidget.paragraph.paragraphFormat.bidi)) {\n spaceCount = 0;\n totalSubWidth = 0;\n }\n else if (justify) {\n // For justify alignment, element width will be updated based space count value.\n // So when the element is paragraph end, need to set space count to zero.\n if (!isParagraphEnd && spaceCount > 0) {\n totalSubWidth = totalSubWidth / spaceCount;\n }\n else {\n spaceCount = 0;\n }\n }\n return { 'trimmedSpaceWidth': 0, 'subWidth': totalSubWidth, 'spaceCount': spaceCount, 'totalSpaceCount': spaceCount };\n }\n return undefined;\n };\n Layout.prototype.getBeforeSpacing = function (paragraph, pageIndex) {\n var beforeSpacing = 0;\n if (!this.documentHelper.dontUseHtmlParagraphAutoSpacing) {\n var previousBlock = paragraph.previousWidget;\n if (previousBlock instanceof ParagraphWidget) {\n var afterSpacing = this.getAfterSpacing(previousBlock);\n var before = paragraph.paragraphFormat.beforeSpacing;\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n before = 14;\n }\n if (afterSpacing < before) {\n beforeSpacing = before - afterSpacing;\n }\n }\n else if (previousBlock instanceof TableWidget) {\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n beforeSpacing = 14;\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n }\n else {\n if (pageIndex > 0 && paragraph === paragraph.bodyWidget.childWidgets[0]) {\n if (this.documentHelper.pages[pageIndex].sectionIndex !== this.documentHelper.pages[pageIndex - 1].sectionIndex) {\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n beforeSpacing = 14;\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n }\n }\n else {\n if (paragraph.paragraphFormat.spaceBeforeAuto) {\n beforeSpacing = 0;\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n }\n }\n }\n else {\n beforeSpacing = paragraph.paragraphFormat.beforeSpacing;\n }\n if (this.isSameStyle(paragraph, false)) {\n return 0;\n }\n else {\n return HelperMethods.convertPointToPixel(beforeSpacing);\n }\n };\n Layout.prototype.getAfterSpacing = function (paragraph) {\n var afterSpacing = paragraph.paragraphFormat.afterSpacing;\n if (!this.documentHelper.dontUseHtmlParagraphAutoSpacing && paragraph.paragraphFormat.spaceAfterAuto) {\n if (isNullOrUndefined(paragraph.nextWidget) && paragraph.isInsideTable) {\n afterSpacing = 0;\n }\n else {\n afterSpacing = 14;\n }\n }\n if (this.isSameStyle(paragraph, true)) {\n return 0;\n }\n else {\n return afterSpacing;\n }\n };\n Layout.prototype.getLineSpacing = function (paragraph, maxHeight, alterLineSpacing) {\n if (isNullOrUndefined(paragraph.paragraphFormat)) {\n return 0;\n }\n var lineSpacing = 0;\n switch (paragraph.paragraphFormat.lineSpacingType) {\n case 'AtLeast':\n case 'Exactly':\n lineSpacing = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.lineSpacing);\n break;\n default:\n lineSpacing = paragraph.paragraphFormat.lineSpacing;\n if (alterLineSpacing) {\n lineSpacing = lineSpacing - 1;\n }\n lineSpacing = lineSpacing * maxHeight;\n break;\n }\n return lineSpacing;\n };\n Layout.prototype.isParagraphFirstLine = function (paragraph, line) {\n var widget = paragraph;\n if (isNullOrUndefined(widget.childWidgets) || widget.childWidgets.indexOf(line) === 0) {\n //If the line elements conatins the elements from previous paragraph then need to retun false.\n //Example scenario, Field start and field end in different paragraphs.\n if (line.children.length > 0 && !isNullOrUndefined(paragraph.previousWidget)\n && paragraph.previousWidget instanceof ParagraphWidget) {\n return line.paragraph.index !== paragraph.previousWidget.index;\n }\n return true; //If the line elements count is zero then also need to return true.\n }\n return false;\n };\n Layout.prototype.isParagraphLastLine = function (element) {\n var paragraph = element.line.paragraph;\n var lastLineWidget = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n var lastInline = lastLineWidget.children[lastLineWidget.children.length - 1];\n if (element === lastInline) {\n return (lastInline instanceof FieldElementBox) || ((!(lastInline instanceof TextElementBox && lastInline.text === '\\v')));\n }\n return false;\n };\n Layout.prototype.getTextIndexAfterSpace = function (text, startIndex) {\n var length = text.length;\n var index = 0;\n var hyphenIndex = 0;\n index = text.indexOf(' ', startIndex) + 1;\n hyphenIndex = text.indexOf('-', startIndex) + 1;\n if (hyphenIndex == 1) {\n hyphenIndex = text.indexOf('-', (hyphenIndex + 1)) + 1;\n }\n if (hyphenIndex > 0 && index > 0) {\n index = Math.min(index, hyphenIndex);\n }\n else if (hyphenIndex > 0 && index == 0) {\n index = hyphenIndex;\n }\n var nextIndex = index;\n if (nextIndex === 0 || nextIndex === length) {\n return nextIndex;\n }\n while (text[nextIndex] === ' ') {\n nextIndex++;\n if (nextIndex === length) {\n break;\n }\n }\n return nextIndex;\n };\n //#region Table\n Layout.prototype.moveNextWidgetsToTable = function (tableWidget, currentRow, moveFromNext) {\n var rowIndex = currentRow.indexInOwner;\n var currentTable = tableWidget[tableWidget.length - 1];\n if (moveFromNext) {\n rowIndex += 1;\n }\n var nextWidgets = currentRow.containerWidget.childWidgets.splice(rowIndex);\n for (var i = 0; i < nextWidgets.length; i++) {\n currentTable.childWidgets.push(nextWidgets[i]);\n nextWidgets[i].containerWidget = currentTable;\n }\n };\n Layout.prototype.addTableCellWidget = function (cell, area, maxCellMarginTop, maxCellMarginBottom) {\n //let tableCellWidget: TableCellWidget = new TableCellWidget(cell);\n var prevColumnIndex = 0;\n var cellspace = 0;\n var left = 0;\n var top = maxCellMarginTop;\n var right = 0;\n var bottom = maxCellMarginBottom;\n if (!isNullOrUndefined(cell.cellFormat)) {\n if (cell.cellFormat.containsMargins()) {\n left = isNullOrUndefined(cell.cellFormat.leftMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.leftMargin);\n right = isNullOrUndefined(cell.cellFormat.rightMargin) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin) : HelperMethods.convertPointToPixel(cell.cellFormat.rightMargin);\n }\n else {\n if (cell.columnIndex === 0 && cell.ownerRow.rowFormat.hasValue('leftMargin')) {\n left = HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.leftMargin);\n }\n else {\n left = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.leftMargin);\n }\n if (cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1 &&\n cell.ownerRow.rowFormat.hasValue('rightMargin')) {\n right = HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.rightMargin);\n }\n else {\n right = HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.rightMargin);\n }\n }\n }\n cell.margin = new Margin(left, top, right, bottom);\n var autofit = cell.ownerTable.tableFormat.allowAutoFit;\n var cellWidth = cell.cellFormat.cellWidth;\n if (cell.cellFormat.preferredWidthType === 'Percent' && cell.cellFormat.preferredWidth !== 0 && cellWidth <= 0) {\n var width = HelperMethods.convertPointToPixel(cell.ownerTable.getTableClientWidth(cell.ownerTable.getContainerWidth()));\n cellWidth = cell.ownerTable.getCellWidth(cell.cellFormat.preferredWidth, cell.cellFormat.preferredWidthType, width, cell);\n }\n // if (cellWidth > cell.cellFormat.preferredWidth && cell.cellFormat.preferredWidth !== 0 && cell.cellFormat.preferredWidthType !== 'Percent' && cell.ownerTable.tableFormat.preferredWidthType !== 'Percent' && isNullOrUndefined(cell.ownerTable.positioning) && (!cell.ownerTable.isContainInsideTable) && (!(cell.ownerTable.containerWidget instanceof TableCellWidget))) {\n // cellWidth = cell.cellFormat.preferredWidth;\n // }\n cell.width = HelperMethods.convertPointToPixel(cellWidth);\n if (!isNullOrUndefined(cell.previousWidget)) {\n prevColumnIndex = cell.previousWidget.columnIndex + cell.previousWidget.cellFormat.columnSpan;\n }\n cellspace = !isNullOrUndefined(cell.ownerTable) && !isNullOrUndefined(cell.ownerTable.tableFormat) ? HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) : 0;\n var prevSpannedCellWidth = 0;\n if (prevColumnIndex < cell.columnIndex) {\n prevSpannedCellWidth = HelperMethods.convertPointToPixel(cell.ownerTable.tableHolder.getPreviousSpannedCellWidth(prevColumnIndex, cell.columnIndex));\n if (prevColumnIndex === 0) {\n prevSpannedCellWidth = prevSpannedCellWidth - cellspace / 2;\n }\n }\n cell.x = area.x + prevSpannedCellWidth + cell.margin.left;\n cell.y = area.y + cell.margin.top + cellspace;\n cell.width = cell.width - cell.margin.left - cell.margin.right;\n if (cellspace > 0) {\n cell.x += cellspace;\n if (cell.ownerTable.tableHolder.columns.length === 1) {\n cell.width -= cellspace * 2;\n }\n else if (cell.columnIndex === 0 || cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1) {\n cell.width -= ((cellspace * 2) - cellspace / 2);\n }\n else {\n cell.width -= cellspace;\n }\n }\n var leftBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellLeftBorder(cell).getLineWidth());\n var rightBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellRightBorder(cell).getLineWidth());\n // update the margins values respect to layouting of borders.\n // for normal table cells only left border is rendred. for last cell left and right border is rendred.\n // this border widths are not included in margins.\n var linestyle = false;\n cell.leftBorderWidth = !cell.ownerTable.isBidiTable ? leftBorderWidth : rightBorderWidth;\n var isLeftStyleNone = (cell.cellFormat.borders.left.lineStyle === 'None');\n var isRightStyleNone = (cell.cellFormat.borders.right.lineStyle === 'None');\n cell.x += (!isLeftStyleNone) ? 0 : (cell.leftBorderWidth > 0) ? 0 : cell.leftBorderWidth;\n cell.width -= (!isLeftStyleNone) ? 0 : (cell.leftBorderWidth > 0) ? 0 : cell.leftBorderWidth;\n var lastCell = !cell.ownerTable.isBidiTable ? cell.cellIndex === cell.ownerRow.childWidgets.length - 1\n : cell.cellIndex === 0;\n if (cellspace > 0 || cell.columnIndex === cell.ownerTable.tableHolder.columns.length - 1 ||\n cell.index === cell.containerWidget.childWidgets.length - 1) {\n cell.rightBorderWidth = !cell.ownerTable.isBidiTable ? rightBorderWidth : leftBorderWidth;\n if (!cell.ownerTable.tableFormat.allowAutoFit) {\n cell.width -= cell.rightBorderWidth;\n }\n if (!this.isInsertTable()) {\n linestyle = this.checkPreviousMargins(cell.ownerTable);\n }\n }\n //Add the border widths to respective margin side.\n //cell.margin.left += (isLeftStyleNone) ? 0 : (cell.leftBorderWidth);\n cell.margin.right += (isRightStyleNone && !linestyle) ? 0 : (cell.rightBorderWidth);\n //cell.ownerWidget = owner;\n return cell;\n };\n Layout.prototype.checkPreviousMargins = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[row.childWidgets.length - 1];\n if (cell.cellFormat.borders.right.lineStyle !== 'None') {\n return true;\n }\n }\n }\n return false;\n };\n Layout.prototype.addWidgetToTable = function (viewer, tableCollection, rowCollection, row, footnotes, endRowWidget, isInitialLayout, startRowIndex, isRepeatRowHeader) {\n //Adds table row widget to owner table widget.\n var tableWidget = tableCollection[0];\n var index = tableWidget.childWidgets.length;\n var prevWidget = undefined;\n var rowWidgetIndex = rowCollection.indexOf(row);\n var footnoteWidgets = [];\n if (rowWidgetIndex > 0) {\n prevWidget = rowCollection[rowWidgetIndex - 1];\n // Need to update on this further\n }\n else if (row.previousRenderedWidget instanceof TableRowWidget &&\n row.previousRenderedWidget.ownerTable.equals(row.ownerTable)) {\n // Need to update on this further\n prevWidget = row.previousRenderedWidget;\n }\n if (!isNullOrUndefined(prevWidget)) {\n tableWidget = prevWidget.containerWidget;\n // index = tableWidget.childWidgets.length;\n index = tableWidget.childWidgets.indexOf(prevWidget) + 1;\n if (Math.round(row.y) !== Math.round(prevWidget.y + prevWidget.height)) {\n var prevIndex = tableCollection.indexOf(tableWidget);\n if (prevIndex + 1 >= tableCollection.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableCollection, true);\n }\n tableWidget = tableCollection[prevIndex + 1];\n index = tableWidget.childWidgets.length;\n }\n if (rowWidgetIndex > 0) {\n index = 0;\n }\n }\n this.updateRowHeightBySpannedCell(tableWidget, row, index);\n this.updateRowHeightByCellSpacing(tableCollection, row, viewer);\n //Remove widget from previous container after splitteing\n if (row.containerWidget && row.containerWidget !== tableWidget &&\n row.containerWidget.childWidgets.indexOf(row) !== -1) {\n row.containerWidget.childWidgets.splice(row.containerWidget.childWidgets.indexOf(row), 1);\n }\n if (tableWidget.childWidgets.indexOf(row) === -1) {\n tableWidget.childWidgets.splice(index, 0, row);\n if (isRepeatRowHeader) {\n tableWidget.bodyWidget.page.repeatHeaderRowTableWidget = true;\n }\n }\n row.containerWidget = tableWidget;\n if (!row.ownerTable.isInsideTable) {\n if (footnotes.length > 0) {\n if (!isNullOrUndefined(footnotes)) {\n footnoteWidgets = this.getFootnoteBody(footnotes);\n }\n }\n else {\n if (!isNullOrUndefined(row)) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n for (var j = 0; j < cell.childWidgets.length; j++) {\n var footnoteCollection = this.getFootNoteWidgetsOf(cell.childWidgets[j], true);\n for (var k = 0; k < footnoteCollection.length; k++) {\n footnoteWidgets.splice(footnoteWidgets.length, 0, footnoteCollection[k]);\n }\n }\n }\n }\n }\n if (footnoteWidgets.length > 0 && isNullOrUndefined(footnoteWidgets[0].containerWidget)) {\n this.layoutFootnoteInSplittedRow(row, footnoteWidgets);\n }\n else if (!isNullOrUndefined(footnoteWidgets) && footnoteWidgets.length > 0 && row.bodyWidget.previousRenderedWidget !== undefined && startRowIndex !== row.bodyWidget.page.index && footnoteWidgets[0].containerWidget.page.index !== row.bodyWidget.page.index) {\n this.moveFootNotesToPage(footnoteWidgets, footnoteWidgets[0].containerWidget.page.bodyWidgets[0], row.bodyWidget);\n }\n else if (footnoteWidgets.length > 0 && !this.isInitialLoad && !isNullOrUndefined(row.bodyWidget.page.footnoteWidget)) {\n this.layoutfootNote(row.bodyWidget.page.footnoteWidget);\n }\n footnotes.length = 0;\n }\n tableWidget.height = tableWidget.height + row.height;\n if (this.viewer instanceof PageLayoutViewer) {\n if (!isNullOrUndefined(tableWidget.containerWidget)\n && tableWidget.containerWidget.childWidgets.indexOf(tableWidget) >= 0 &&\n !(tableWidget.containerWidget instanceof HeaderFooterWidget)) {\n tableWidget.containerWidget.height += row.height;\n }\n }\n this.updateHeightForRowWidget(viewer, false, tableCollection, rowCollection, row, false, endRowWidget, isInitialLayout);\n viewer.cutFromTop(row.y + row.height);\n this.viewer.clientActiveArea.height -= this.getFootNoteHeight(footnoteWidgets);\n this.existFootnoteHeight = 0;\n };\n Layout.prototype.layoutFootnoteInSplittedRow = function (row, footnoteWidgets) {\n if (footnoteWidgets && footnoteWidgets.length > 0) {\n if (isNullOrUndefined(row.ownerTable.bodyWidget.page.footnoteWidget)) {\n this.addEmptyFootNoteToBody(row.ownerTable.bodyWidget);\n }\n var footnoteWidget = row.ownerTable.bodyWidget.page.footnoteWidget;\n if (footnoteWidget) {\n for (var j = 0; j < footnoteWidgets.length; j++) {\n footnoteWidget.bodyWidgets.push(footnoteWidgets[j]);\n footnoteWidgets[j].containerWidget = footnoteWidget;\n }\n this.layoutfootNote(footnoteWidget);\n }\n }\n };\n Layout.prototype.getFootNoteHeight = function (footnoteWidgets) {\n var height = 0;\n if (Array.isArray(footnoteWidgets)) {\n for (var i = 0; i < footnoteWidgets.length; i++) {\n height += this.getFootnoteHeightInternal(footnoteWidgets[i]);\n }\n }\n else {\n height = this.getFootnoteHeightInternal(footnoteWidgets);\n }\n return height;\n };\n Layout.prototype.getFootnoteHeightInternal = function (footnoteWidgets) {\n var height = 0;\n for (var i = 0; i < footnoteWidgets.childWidgets.length; i++) {\n height += footnoteWidgets.childWidgets[i].height;\n if (footnoteWidgets.indexInOwner === 0 && i === 0) {\n height += footnoteWidgets.containerWidget.margin.top;\n }\n }\n return height;\n };\n Layout.prototype.updateRowHeightBySpannedCell = function (tableWidget, row, insertIndex) {\n var rowSpan = 1;\n if (tableWidget.childWidgets.length === 0 || insertIndex === 0) {\n this.updateRowHeight(row, row);\n return;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n this.updateSpannedRowCollection(rowSpan, row, cellWidget);\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n for (var i = 0; i < row.ownerTable.spannedRowCollection.length; i++) {\n if (row.ownerTable.spannedRowCollection.keys[i] === row.index) {\n // Back track to previous table row widgets and update it height if vertical merge ends with this row.\n for (var j = 0; j < insertIndex; j++) {\n var prevRowWidget = tableWidget.childWidgets[j];\n this.updateRowHeight(prevRowWidget, row);\n }\n row.ownerTable.spannedRowCollection.remove(row.ownerTable.spannedRowCollection.keys[i]);\n break;\n }\n }\n }\n };\n Layout.prototype.updateRowHeight = function (prevRowWidget, row) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < prevRowWidget.childWidgets.length; i++) {\n var cellWidget = prevRowWidget.childWidgets[i];\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan : cellWidget.cellFormat.rowSpan;\n //To update Row height- if row has row span value greater than 1, need to add it in spannedRowCollection \n this.updateSpannedRowCollection(rowSpan, row, cellWidget);\n if (rowIndex - cellWidget.rowIndex === rowSpan - 1) {\n var mergedCellHeight = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - row.y;\n if ((row.rowFormat.heightType !== 'Exactly' || (row.rowFormat.heightType === 'Exactly' && row.rowFormat.height > mergedCellHeight)) && row.height < mergedCellHeight) {\n row.height = mergedCellHeight;\n }\n }\n }\n };\n //if row has row span value greater than 1, need to add it in spannedRowCollection\n Layout.prototype.updateSpannedRowCollection = function (rowSpan, row, cellWidget) {\n if (rowSpan > 1 && !isNullOrUndefined(row.ownerTable)) {\n //Checks the rowspan is already exist in the list\n if (!row.ownerTable.spannedRowCollection.containsKey(row.index + rowSpan - 1)) {\n row.ownerTable.spannedRowCollection.add(row.index + rowSpan - 1, row.index);\n }\n }\n };\n Layout.prototype.updateRowHeightByCellSpacing = function (tableCollection, row, viewer) {\n if (row.ownerTable.tableFormat.cellSpacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page. \n // In such case we have update the row height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n if (tableCollection.length > 1 && row.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n row.height = row.height - HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) / 2;\n }\n }\n };\n Layout.prototype.isRowSpanEnd = function (row, viewer) {\n var rowIndex = row.index;\n var rowSpan = 1;\n for (var i = 0; i < this.documentHelper.splittedCellWidgets.length; i++) {\n var splittedCell = this.documentHelper.splittedCellWidgets[i];\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1) {\n return true;\n }\n }\n return false;\n };\n Layout.prototype.isVerticalMergedCellContinue = function (row) {\n var colIndex = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (colIndex < cell.columnIndex) {\n return true;\n }\n colIndex += cell.cellFormat.columnSpan;\n }\n return colIndex < row.ownerTable.tableHolder.columns.length;\n };\n Layout.prototype.splitWidgets = function (tableRowWidget, viewer, tableCollection, rowCollection, splittedWidget, isLastRow, footNoteCollection, lineIndexInCell, cellIndex, isMultiColumnSplit, isRowSpan) {\n if (!(isMultiColumnSplit && lineIndexInCell === 0) && (this.isFirstLineFitForRow(viewer.clientArea.bottom, tableRowWidget) && tableRowWidget.childWidgets.length > 0)) {\n splittedWidget = this.getSplittedWidgetForRow(viewer.clientArea.bottom, tableCollection, rowCollection, tableRowWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, undefined, isRowSpan);\n if (this.documentHelper.splittedCellWidgets.length > 0 || splittedWidget !== tableRowWidget) {\n if (isLastRow) {\n for (var i = 0; i < splittedWidget.childWidgets.length; i++) {\n var cell = splittedWidget.childWidgets[i];\n if (cell.rowIndex !== splittedWidget.index) {\n splittedWidget.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.index - 1);\n }\n }\n else {\n //Adds the splitted widget of a vertical merged cell, to next row widget in the next page.\n this.insertSplittedCellWidgets(viewer, tableCollection, splittedWidget, tableRowWidget.index - 1);\n }\n return splittedWidget;\n };\n Layout.prototype.getSplittedWidgetForRow = function (bottom, tableCollection, rowCollection, tableRowWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, count, isRowSpan) {\n var splittedWidget = undefined;\n var rowIndex = tableRowWidget.index;\n this.isRelayoutneed = false;\n var issplit = false;\n var cellHeight = tableRowWidget.height;\n var previousHeight = cellHeight;\n var maximumCellWidgetHeight = 0;\n for (var i = 0; i < tableRowWidget.childWidgets.length; i++) {\n var cellWidget = tableRowWidget.childWidgets[i];\n var splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, count);\n if (isMultiColumnSplit && !isNullOrUndefined(splittedCell) && splittedCell.childWidgets.length !== 0 && cellHeight > cellWidget.height) {\n cellHeight = cellWidget.height;\n }\n footNoteCollection = [];\n if (isNullOrUndefined(splittedCell) && cellWidget === tableRowWidget.childWidgets[tableRowWidget.childWidgets.length - 1] && this.isVerticalMergedCellContinue(tableRowWidget) && this.isRowSpanEnd(tableRowWidget, this.viewer) && this.documentHelper.splittedCellWidgets.length > 0 && isRowSpan) {\n splittedWidget = this.getSplittedWidgetForSpannedRow(bottom, tableRowWidget, tableCollection, rowCollection, footNoteCollection);\n splittedCell = undefined;\n }\n if (!isNullOrUndefined(splittedCell)) {\n if (splittedCell === cellWidget) {\n // if the previous cell Widget is already splitted, in that case need to combine the splitted row widgets to single row widget.\n if (rowCollection.length > 1) {\n this.combineSplittedRowWidgets(rowCollection, previousHeight);\n }\n //Returns if the whole content of the row does not fit in current page.\n return tableRowWidget;\n }\n if (cellWidget.height > maximumCellWidgetHeight) {\n maximumCellWidgetHeight = cellWidget.height;\n }\n if (tableRowWidget.childWidgets.indexOf(splittedCell) !== -1) {\n tableRowWidget.childWidgets.splice(tableRowWidget.childWidgets.indexOf(splittedCell), 1);\n }\n tableRowWidget.height -= splittedCell.height;\n if (i === 0 || tableRowWidget.height < maximumCellWidgetHeight + cellWidget.margin.top + cellWidget.margin.bottom) {\n tableRowWidget.height = maximumCellWidgetHeight + cellWidget.margin.top + cellWidget.margin.bottom;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new TableRowWidget();\n splittedWidget.containerWidget = tableRowWidget.containerWidget;\n splittedWidget.index = tableRowWidget.index;\n splittedWidget.rowFormat = tableRowWidget.rowFormat;\n splittedWidget.isRenderBookmarkEnd = tableRowWidget.isRenderBookmarkEnd;\n this.updateWidgetLocation(tableRowWidget, splittedWidget);\n // splittedWidget.height = 0;\n rowCollection.push(splittedWidget);\n }\n var rowSpan = 1;\n rowSpan = (isNullOrUndefined(splittedCell) || isNullOrUndefined(splittedCell.cellFormat)) ? rowSpan : splittedCell.cellFormat.rowSpan;\n if (rowIndex - splittedCell.rowIndex === rowSpan - 1\n && splittedWidget.height < splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom) {\n splittedWidget.height = splittedCell.height + splittedCell.margin.top + splittedCell.margin.bottom;\n }\n else {\n if (tableRowWidget.rowFormat.heightType === 'Exactly' || (tableRowWidget.rowFormat.heightType === 'AtLeast' &&\n splittedWidget.height < tableRowWidget.rowFormat.height)) {\n //Sets the height for row widget if height type is exact or at least.\n splittedWidget.height = tableRowWidget.rowFormat.height;\n }\n }\n splittedWidget.childWidgets.push(splittedCell);\n splittedCell.containerWidget = splittedWidget;\n this.isRelayoutneed = true;\n var count_1 = i;\n while (count_1 > 0 && !issplit) {\n var cellWidget_1 = tableRowWidget.childWidgets[count_1 - 1];\n splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget_1, footNoteCollection);\n splittedWidget.childWidgets.splice(0, 0, splittedCell);\n splittedCell.containerWidget = splittedWidget;\n count_1--;\n }\n issplit = true;\n }\n }\n if (isMultiColumnSplit && cellHeight !== previousHeight) {\n for (var i = 0; i < tableRowWidget.childWidgets.length; i++) {\n tableRowWidget.childWidgets[i].height = cellHeight;\n }\n tableRowWidget.height = cellHeight;\n }\n return splittedWidget;\n };\n Layout.prototype.combineSplittedRowWidgets = function (rowCollection, previousRowHeight) {\n var existingRow = rowCollection[0];\n for (var i = 1; i < rowCollection.length; i++) {\n var row = rowCollection[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var existingCell = existingRow.childWidgets[j];\n var cell = row.childWidgets[j];\n if (cell.childWidgets.length > 0) {\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n if (block instanceof ParagraphWidget) {\n var existingPara = existingCell.childWidgets[k];\n if (existingPara.index === block.index) {\n var paragraph = block;\n if (paragraph.childWidgets.length > 0) {\n for (var l = 0; l < paragraph.childWidgets.length; l++) {\n var line = paragraph.childWidgets[l];\n existingPara.childWidgets.push(line);\n line.paragraph = existingPara;\n existingPara.height += line.height;\n }\n }\n }\n else {\n existingCell.childWidgets.push(block);\n block.containerWidget = existingCell;\n }\n existingCell.height += block.height;\n }\n else if (block instanceof TableWidget) {\n existingCell.childWidgets.push(block);\n block.containerWidget = existingCell;\n existingCell.height += block.height;\n }\n }\n }\n }\n rowCollection.splice(i, 1);\n }\n existingRow.height = previousRowHeight;\n };\n Layout.prototype.getSplittedWidgetForSpannedRow = function (bottom, tableRowWidget, tableCollection, rowCollection, footNoteCollection) {\n var splittedWidget = undefined;\n var splittedCell = undefined;\n var issplit = false;\n var isNeedToInsertNextCell = false;\n for (var i = 0; i < this.documentHelper.splittedCellWidgets.length; i++) {\n splittedCell = this.documentHelper.splittedCellWidgets[i];\n var nextSplittedCell = this.documentHelper.splittedCellWidgets[i + 1];\n var nextSplittedCellColumnIndex = !isNullOrUndefined(nextSplittedCell) ? nextSplittedCell.columnIndex : 0;\n if (tableRowWidget.childWidgets[tableRowWidget.childWidgets.length - 1].columnIndex < splittedCell.columnIndex) {\n break;\n }\n // splitted cell widget column index\n var previousColumnIndex = this.documentHelper.splittedCellWidgets[i].columnIndex;\n var splitCell = this.documentHelper.splittedCellWidgets[i];\n // previousColumnIndex value is updated based on the previous row spanned cell widgets.\n while (splitCell && splitCell.cellFormat.rowSpan === this.documentHelper.splittedCellWidgets[i].cellFormat.rowSpan && previousColumnIndex > 0 && !issplit) {\n previousColumnIndex = splitCell.columnIndex;\n var row = splitCell.containerWidget;\n splitCell = row.getCell(row.rowIndex, previousColumnIndex - 1);\n }\n // splitted cell widget column index\n var nextColumnIndex = this.documentHelper.splittedCellWidgets[i].columnIndex;\n splitCell = this.documentHelper.splittedCellWidgets[i];\n // nextColumnIndex value is updated based on the next row spanned cell widgets.\n while (splitCell && splitCell.cellFormat.rowSpan === this.documentHelper.splittedCellWidgets[i].cellFormat.rowSpan && nextColumnIndex < splitCell.containerWidget.childWidgets.length - 1 && (!issplit || isNeedToInsertNextCell)) {\n nextColumnIndex = splitCell.columnIndex;\n var row = splitCell.containerWidget;\n splitCell = row.getCell(row.rowIndex, nextColumnIndex + 1);\n }\n if (isNullOrUndefined(splittedWidget)) {\n splittedWidget = new TableRowWidget();\n splittedWidget.containerWidget = tableRowWidget.containerWidget;\n splittedWidget.index = tableRowWidget.index;\n splittedWidget.rowFormat = tableRowWidget.rowFormat;\n splittedWidget.isRenderBookmarkEnd = tableRowWidget.isRenderBookmarkEnd;\n this.updateWidgetLocation(tableRowWidget, splittedWidget);\n rowCollection.push(splittedWidget);\n }\n splittedWidget.childWidgets.push(splittedCell);\n splittedCell.containerWidget = splittedWidget;\n this.isRelayoutneed = true;\n // insert cell widgets to left of the splitted cell widget.\n while (previousColumnIndex > 0 && !issplit) {\n var cellWidget = tableRowWidget.getCell(tableRowWidget.rowIndex, previousColumnIndex - 1);\n if (isNullOrUndefined(cellWidget)) {\n previousColumnIndex--;\n continue;\n }\n splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget, footNoteCollection);\n splittedWidget.childWidgets.splice(0, 0, splittedCell);\n splittedCell.containerWidget = splittedWidget;\n previousColumnIndex--;\n }\n // insert cell widgets to right of the splitted cell widget.\n while (nextColumnIndex < tableRowWidget.childWidgets[tableRowWidget.childWidgets.length - 1].columnIndex && (!issplit || isNeedToInsertNextCell)) {\n var cellWidget = tableRowWidget.getCell(tableRowWidget.rowIndex, nextColumnIndex + 1);\n if (isNullOrUndefined(cellWidget)) {\n nextColumnIndex++;\n continue;\n }\n // check whether the cellWidget column index is greater than the next splitted cell widget column index.\n // if so, then break the loop and insert the splitted cell widget and remaining cell widgets.\n if (nextSplittedCell && cellWidget.columnIndex > nextSplittedCellColumnIndex) {\n isNeedToInsertNextCell = true;\n break;\n }\n splittedCell = this.getSplittedWidget(bottom, true, tableCollection, rowCollection, cellWidget, footNoteCollection);\n splittedWidget.childWidgets.push(splittedCell);\n splittedCell.containerWidget = splittedWidget;\n nextColumnIndex++;\n }\n issplit = true;\n }\n return splittedWidget;\n };\n Layout.prototype.getFootNoteHeightInLine = function (line) {\n var height = 0;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FootnoteElementBox) {\n height += this.getFootNoteHeight(element.bodyWidget);\n }\n }\n return height;\n };\n Layout.prototype.getFootnoteFromLine = function (line, footNoteCollection) {\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof FootnoteElementBox) {\n footNoteCollection.push(line.children[i]);\n }\n }\n };\n Layout.prototype.updateWidgetsToTable = function (tableWidgets, rowWidgets, row, rearrangeRow, lineIndexInCell, cellIndex, isMultiColumnSplit) {\n var startRowIndex = row.bodyWidget.page.index;\n var rowHeight = this.getRowHeight(row, [row]);\n var viewer = this.viewer;\n //initializing row properties with default values.\n var isHeader = row.rowFormat.isHeader;\n var headerRow = undefined;\n var isAllowBreakAcrossPages = row.rowFormat.allowBreakAcrossPages;\n var heightType = row.rowFormat.heightType;\n var cellSpacing = 0;\n var count = 0;\n var tableRowWidget = row;\n var moveRowToNextTable = false;\n var footnoteElements = this.layoutedFootnoteElement;\n var isRepeatRowHeader = false;\n if (tableRowWidget.bodyWidget.page.footnoteWidget !== undefined) {\n this.footHeight = tableRowWidget.bodyWidget.page.footnoteWidget.height;\n if (this.footnoteHeight === 0) {\n this.footnoteHeight = this.footHeight;\n }\n }\n else {\n this.footHeight = 0;\n }\n if (row.ownerTable.continueHeader && !isHeader) {\n row.ownerTable.continueHeader = false;\n }\n var isInitialLayout = row.ownerTable.isInsideTable;\n var isLastRow = false;\n cellSpacing = (!isNullOrUndefined(row.ownerTable) && !isNullOrUndefined(row.ownerTable.tableFormat)) ? HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.cellSpacing) : 0;\n while (count < rowWidgets.length) {\n count = rowWidgets.length;\n if (this.isRowSpanEnd(row, viewer) && row.rowFormat.heightType === 'Exactly' && this.documentHelper.splittedCellWidgets.length === 1) {\n this.documentHelper.splittedCellWidgets = [];\n }\n if (!isMultiColumnSplit && (row.ownerTable.isInsideTable || (this.documentHelper.splittedCellWidgets.length === 0 && tableRowWidget.y + tableRowWidget.height + cellSpacing + this.footnoteHeight <= viewer.clientArea.bottom))) {\n if (this.isVerticalMergedCellContinue(row) && (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight)) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.index - 1);\n }\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements, undefined, isInitialLayout, startRowIndex, isRepeatRowHeader);\n if (this.documentHelper.splittedCellWidgets.length > 0 && isNullOrUndefined(rowWidgets[rowWidgets.length - 1].nextRow)) {\n count--;\n isLastRow = true;\n }\n isInitialLayout = false;\n }\n else {\n footnoteElements = [];\n isInitialLayout = false;\n //Split widget for next page\n if (this.documentHelper.splittedCellWidgets.length > 0 && tableRowWidget.y + tableRowWidget.height + this.footHeight <= viewer.clientArea.bottom) {\n var isRowSpanEnd = this.isRowSpanEnd(row, viewer);\n if (!isRowSpanEnd) {\n if (this.isVerticalMergedCellContinue(row) && (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + tableRowWidget.ownerTable.headerHeight)) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.index - 1);\n }\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements);\n continue;\n }\n }\n var splittedWidget = tableRowWidget;\n var tableWidget = tableWidgets[tableWidgets.length - 1];\n if (isMultiColumnSplit || rowHeight + tableRowWidget.y + this.footHeight > viewer.clientArea.bottom) {\n if (!isAllowBreakAcrossPages || (isHeader && row.ownerTable.continueHeader) || (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientArea.bottom)) {\n var isSplitRow = !isAllowBreakAcrossPages && isNullOrUndefined(tableRowWidget.previousWidget) && tableWidgets.length > 1;\n if ((heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) < viewer.clientActiveArea.height && (isAllowBreakAcrossPages || isSplitRow)) || (heightType !== 'Exactly' && tableRowWidget.y === viewer.clientArea.y) || (heightType === 'Auto' && isAllowBreakAcrossPages)) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow, footnoteElements, lineIndexInCell, cellIndex, isMultiColumnSplit);\n if (isNullOrUndefined(splittedWidget) && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements);\n }\n else if (isNullOrUndefined(splittedWidget) && heightType === 'AtLeast' && tableRowWidget.containerWidget.lastChild !== tableRowWidget) {\n splittedWidget = tableRowWidget;\n }\n }\n // if (heightType === 'AtLeast' && row.ownerTable.spannedRowCollection.keys.length > 0) {\n // splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n // }\n // if (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientActiveArea.height && isAllowBreakAcrossPages && tableRowWidget.ownerTable.tableHolder.columns.length > this.getTotalColumnSpan(tableRowWidget)) {\n // tableRowWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow);\n // splittedWidget = tableRowWidget;\n // }\n if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements);\n count++;\n }\n if (isHeader && row.ownerTable.continueHeader) {\n row.ownerTable.header = false;\n row.ownerTable.headerHeight = 0;\n var pages = undefined;\n if (viewer instanceof PageLayoutViewer) {\n pages = this.documentHelper.pages;\n }\n if (!isNullOrUndefined(pages)) {\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget && !isNullOrUndefined(pages[i].bodyWidgets[0].firstChild) && !(pages[i].bodyWidgets[0].firstChild instanceof TableWidget && pages[i].bodyWidgets[0].firstChild.header)) {\n pages[i].repeatHeaderRowTableWidget = false;\n row.ownerTable.continueHeader = false;\n }\n }\n }\n }\n }\n else {\n if ((heightType === 'Auto' || heightType === 'AtLeast') && isAllowBreakAcrossPages) {\n if (!(HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientArea.bottom) || tableRowWidget.y === viewer.clientArea.y) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow, footnoteElements, lineIndexInCell, cellIndex, isMultiColumnSplit);\n if (isNullOrUndefined(splittedWidget) && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements);\n }\n }\n else if (heightType === 'AtLeast' && HelperMethods.convertPointToPixel(row.rowFormat.height) > viewer.clientArea.bottom && tableRowWidget.ownerTable.wrapTextAround && tableRowWidget.y - HelperMethods.convertPointToPixel(tableRowWidget.ownerTable.positioning.verticalPosition) === viewer.clientArea.y && tableRowWidget.bodyWidget.firstChild === tableRowWidget.ownerTable) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow, footnoteElements, lineIndexInCell, cellIndex, isMultiColumnSplit);\n if (isNullOrUndefined(splittedWidget)) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements);\n count++;\n continue;\n }\n }\n }\n else if (heightType === 'Exactly' && tableRowWidget.y === viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements);\n count++;\n }\n }\n }\n else {\n var isInsertSplittedWidgets = false;\n var headerHeight = 0;\n if (!isNullOrUndefined(tableRowWidget.ownerTable.headerHeight)) {\n headerHeight = tableRowWidget.ownerTable.headerHeight;\n }\n // Splitting handled for the merged cell with allowRowBreakAcross pages. \n if (this.isVerticalMergedCellContinue(row) && (isAllowBreakAcrossPages ||\n (isInsertSplittedWidgets = (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + headerHeight)))) {\n if (isInsertSplittedWidgets) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, splittedWidget, tableRowWidget.indexInOwner - 1);\n }\n else {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow, footnoteElements, undefined, undefined, undefined, true);\n if (isNullOrUndefined(splittedWidget)) {\n isInsertSplittedWidgets = (tableRowWidget.y === viewer.clientArea.y\n || tableRowWidget.y === this.viewer.clientArea.y + headerHeight);\n if (isInsertSplittedWidgets) {\n this.insertSplittedCellWidgets(viewer, tableWidgets, tableRowWidget, tableRowWidget.indexInOwner - 1);\n count--;\n continue;\n }\n if (this.isRowSpanEnd(row, viewer)) {\n splittedWidget = tableRowWidget;\n }\n }\n }\n }\n else if (isLastRow && !isAllowBreakAcrossPages) {\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow, footnoteElements);\n }\n else if (this.isRowSpanEnd(row, viewer) && !isAllowBreakAcrossPages) {\n if (heightType === 'AtLeast' && row.ownerTable.spannedRowCollection.keys.length > 0)\n splittedWidget = this.splitWidgets(tableRowWidget, viewer, tableWidgets, rowWidgets, splittedWidget, isLastRow, footnoteElements, lineIndexInCell, cellIndex, isMultiColumnSplit, true);\n if (isNullOrUndefined(splittedWidget)) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements);\n }\n }\n }\n //Create New table for splitted widget\n if (!isNullOrUndefined(splittedWidget) && (isNullOrUndefined(this.documentHelper.owner.editorModule) || this.documentHelper.owner.editorModule && !this.documentHelper.owner.editorModule.isTableInsert) && !(splittedWidget.bodyWidget.containerWidget instanceof FootNoteWidget)) {\n if (splittedWidget !== tableRowWidget) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements, tableRowWidget.nextRow, undefined, undefined, isRepeatRowHeader);\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, rearrangeRow, tableRowWidget.nextRow);\n var index_2 = tableWidgets.indexOf(tableRowWidget.containerWidget);\n if (index_2 + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n tableRowWidget = splittedWidget;\n }\n else {\n if (row.index > 0) {\n //Updates the fitted table rows to current page.\n this.updateWidgetsToPage(tableWidgets, rowWidgets, row.ownerTable, rearrangeRow, row);\n // Need to update on this further\n if (row.previousRenderedWidget instanceof TableRowWidget) {\n // Need to update on this further\n var prevWidget = row.previousRenderedWidget;\n if (HelperMethods.round(tableRowWidget.y, 2) === HelperMethods.round(prevWidget.y + prevWidget.height, 2)) {\n var prevIndex = tableWidgets.indexOf(prevWidget.containerWidget);\n if (prevIndex + 1 >= tableWidgets.length) {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else {\n //Creates new table widget for splitted rows.\n this.addTableWidget(viewer.clientActiveArea, tableWidgets, true);\n }\n }\n else if (heightType === 'Exactly' && rowHeight + tableRowWidget.y + this.footHeight < viewer.clientArea.bottom && tableRowWidget.y >= viewer.clientArea.y) {\n this.addWidgetToTable(viewer, tableWidgets, rowWidgets, tableRowWidget, footnoteElements);\n count++;\n continue;\n }\n moveRowToNextTable = true;\n count--;\n }\n tableWidget = tableWidgets[tableWidgets.length - 1];\n var rowToMove = row;\n var keepNext = false;\n var index = row.ownerTable.containerWidget.index;\n var isTableFirstRow = false;\n var bodyWidget = void 0;\n var block = void 0;\n if (moveRowToNextTable && tableWidgets.length === 1) {\n block = tableWidgets[tableWidgets.length - 1];\n }\n else {\n block = tableWidgets[tableWidgets.length - 2];\n }\n var removeTable = true;\n //Move Next RowWidge to next page\n if (moveRowToNextTable && rowWidgets.length === 1) {\n var prev = this.alignBlockElement(row);\n if (!isNullOrUndefined(prev.node)) {\n var previousRow = prev.node;\n if (previousRow instanceof TableRowWidget\n && previousRow.indexInOwner === 0) {\n if (tableWidgets.length > 1 && tableWidgets[tableWidgets.length - 1].childWidgets.length === 0) {\n tableWidgets.pop();\n tableWidget = tableWidgets[tableWidgets.length - 1];\n tableWidget.height = 0;\n }\n }\n else if (prev.node instanceof ParagraphWidget) {\n var previousWidget = this.splitParagraph(prev.node, parseInt(prev.position.index, 10));\n block = previousWidget;\n if (tableWidgets.length > 1 && tableWidgets[tableWidgets.length - 1].childWidgets.length === 0) {\n tableWidgets.pop();\n tableWidget = tableWidgets[tableWidgets.length - 1];\n }\n removeTable = false;\n }\n if (previousRow instanceof TableRowWidget) {\n isTableFirstRow = previousRow.indexInOwner === 0;\n rowToMove = previousRow;\n if (!rowToMove.ownerTable.equals(row.ownerTable)) {\n block = rowToMove.ownerTable;\n removeTable = false;\n }\n }\n keepNext = true;\n }\n }\n bodyWidget = this.moveBlocksToNextPage(block instanceof ParagraphWidget ? block.previousWidget :\n (keepNext && isTableFirstRow) ? !isNullOrUndefined(block.previousWidget) ? block.previousWidget : block : block, keepNext);\n var curretTable = tableWidgets[tableWidgets.length - 1];\n //Move Next RowWidge to next page\n if (moveRowToNextTable && removeTable) {\n if (rowToMove.index === 0 && curretTable.containerWidget && curretTable.containerWidget.childWidgets.indexOf(curretTable) !== -1) {\n curretTable.containerWidget.childWidgets.splice(curretTable.containerWidget.childWidgets.indexOf(curretTable), 1);\n }\n }\n if (removeTable) {\n if (bodyWidget.childWidgets.indexOf(curretTable) !== -1) {\n bodyWidget.childWidgets.splice(bodyWidget.childWidgets.indexOf(curretTable), 1);\n }\n bodyWidget.childWidgets.unshift(curretTable);\n this.shiftFloatingItemsFromTable(curretTable, bodyWidget);\n }\n curretTable.containerWidget = bodyWidget;\n if (moveRowToNextTable && rowToMove.index > 0 || rowWidgets.length > 1) {\n var currentRow = !moveRowToNextTable ? rowWidgets[rowWidgets.length - 2] : rowWidgets[rowWidgets.length - 1];\n if (keepNext) {\n currentRow = rowToMove;\n }\n this.moveNextWidgetsToTable(tableWidgets, currentRow, !moveRowToNextTable);\n rowToMove = row;\n }\n if (keepNext) {\n this.updateClientPositionForBlock(removeTable ? curretTable : block, row);\n }\n moveRowToNextTable = false;\n var insertHeaderRow = false;\n var bottom = this.documentHelper.viewer.clientArea.bottom - tableRowWidget.bottomBorderWidth - cellSpacing;\n if (rowToMove.ownerTable.header) {\n //Checks if the splitted row widget can fit in along with header row.\n //Based on the result header row is repeated and infinite looping of not fitted state is avoided.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = this.viewer.clientArea.y + tableWidget.headerHeight;\n this.updateChildLocationForRow(splittedWidget.y, splittedWidget);\n insertHeaderRow = this.isFirstLineFitForRow(bottom, splittedWidget);\n }\n if (insertHeaderRow && rowToMove.ownerTable.header && !keepNext) {\n if (viewer instanceof PageLayoutViewer) {\n bodyWidget.page.repeatHeaderRowTableWidget = true;\n isRepeatRowHeader = true;\n }\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(rowToMove.ownerTable, true, tableWidgets);\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y + rowToMove.ownerTable.headerHeight;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y + rowToMove.ownerTable.headerHeight - cellspace, splittedWidget, tableWidget.containerWidget);\n }\n else {\n //Updates table widgets location.\n viewer.updateClientAreaForBlock(rowToMove.ownerTable, true, tableWidgets);\n //Update splitted row widget location. if header is repeated update the y position of splitted widget to header height.\n if (splittedWidget.bodyWidget.sectionFormat.columns.length > 1) {\n var clientArea = new Rect(this.viewer.clientArea.x, this.viewer.clientArea.y, this.viewer.clientArea.width, this.viewer.clientArea.height);\n var clientActiveArea = new Rect(this.viewer.clientActiveArea.x, this.viewer.clientActiveArea.y, this.viewer.clientActiveArea.width, this.viewer.clientActiveArea.height);\n splittedWidget.x = this.viewer.clientActiveArea.x;\n splittedWidget.y = this.viewer.clientActiveArea.y;\n var topMargin = this.getMaxTopCellMargin(splittedWidget);\n var bottomMargin = this.getMaxBottomCellMargin(splittedWidget);\n for (var i = 0; i < splittedWidget.childWidgets.length; i++) {\n var cell = splittedWidget.childWidgets[i];\n cell.height = 0;\n this.addTableCellWidget(cell, this.viewer.clientActiveArea, topMargin + splittedWidget.topBorderWidth, bottomMargin + splittedWidget.bottomBorderWidth);\n this.viewer.updateClientAreaForCell(cell, true);\n for (var j = 0; j < cell.childWidgets.length; j++) {\n var block_2 = cell.childWidgets[j];\n viewer.updateClientAreaForBlock(block_2, true);\n block_2.containerWidget = cell;\n this.layoutBlock(block_2, 0);\n viewer.updateClientAreaForBlock(block_2, false);\n }\n this.viewer.updateClientAreaForCell(cell, false);\n }\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientArea = clientArea;\n }\n splittedWidget.x = splittedWidget.x;\n splittedWidget.y = tableWidget.y;\n // let cellspace: number = viewer instanceof PageLayoutViewer ? cellspacing / 2 : cellspacing;\n var cellspace = cellSpacing / 2;\n this.updateChildLocationForRow(tableWidget.y - cellspace, splittedWidget, tableWidget.containerWidget, true);\n }\n if (removeTable && this.shiftedFloatingItemsFromTable.length > 0) {\n for (var i = 0; i < this.shiftedFloatingItemsFromTable.length; i++) {\n var floatingItem = this.shiftedFloatingItemsFromTable[i];\n var position = this.getFloatingItemPoints(floatingItem);\n floatingItem.y = position.y;\n floatingItem.x = position.x;\n if (floatingItem instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(floatingItem.y, floatingItem);\n }\n }\n this.shiftedFloatingItemsFromTable = [];\n }\n }\n isLastRow = false;\n }\n if (isHeader) {\n if (row.ownerTable.continueHeader) {\n row.ownerTable.header = true;\n row.ownerTable.headerHeight = rowHeight + row.ownerTable.headerHeight;\n }\n headerRow = this.getHeader(row.ownerTable);\n if (!isNullOrUndefined(headerRow) && row.index === headerRow.index) {\n var headerHeight = this.getHeaderHeight(row.ownerTable, row, rowWidgets);\n if (headerHeight > row.ownerTable.headerHeight || headerHeight > row.ownerTable.headerHeight) {\n row.ownerTable.headerHeight = headerHeight;\n }\n if (row.ownerTable.headerHeight > viewer.clientArea.height) {\n row.ownerTable.header = false;\n row.ownerTable.continueHeader = false;\n row.ownerTable.headerHeight = 0;\n var pages = this.documentHelper.pages;\n for (var i = 0; i < pages.length; i++) {\n if (pages[i].repeatHeaderRowTableWidget) {\n pages[i].repeatHeaderRowTableWidget = false;\n }\n }\n }\n }\n }\n isMultiColumnSplit = false;\n if (tableWidgets.length > 2 && row.ownerTable.header && tableRowWidget.height < viewer.clientActiveArea.bottom &&\n !viewer.documentHelper.currentRenderingPage.repeatHeaderRowTableWidget) {\n viewer.documentHelper.currentRenderingPage.repeatHeaderRowTableWidget = true;\n }\n }\n };\n Layout.prototype.getHeader = function (table) {\n var header = undefined;\n var flag = true;\n table = table.getSplitWidgets()[0];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.isHeader) {\n header = row;\n }\n else {\n flag = false;\n }\n if (!flag) {\n break;\n }\n }\n return header;\n };\n Layout.prototype.getHeaderHeight = function (ownerTable, row, rowCollection) {\n var height = 0;\n if (row.ownerTable.childWidgets.length > 0 && ownerTable.childWidgets[0].rowFormat.isHeader) {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row_1 = ownerTable.childWidgets[i];\n if (row_1.rowFormat.isHeader) {\n height = height + row_1.height;\n }\n else {\n break;\n }\n }\n }\n return height;\n };\n Layout.prototype.getHeaderHeightForSpannedRow = function (table) {\n var height = 0;\n var rowSpan = 1;\n var headerRow = this.getHeader(table);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.isHeader) {\n height = height + row.height;\n if (row == headerRow) {\n for (var j = 0; j < headerRow.childWidgets.length; j++) {\n var cell = headerRow.childWidgets[j];\n rowSpan = Math.max(rowSpan, cell.cellFormat.rowSpan);\n }\n if (rowSpan > 1 && i + rowSpan < table.childWidgets.length) {\n for (var k = 1; k < rowSpan; k++) {\n var nextRow = table.childWidgets[i + k];\n if (!isNullOrUndefined(nextRow)) {\n height = height + nextRow.height;\n }\n }\n }\n }\n }\n }\n return height;\n };\n Layout.prototype.updateWidgetToRow = function (cell) {\n //const viewer: LayoutViewer = this.viewer;\n //Adds table cell widget to owner row widget.\n var rowWidget = cell.ownerRow;\n // let cellLeft: number = rowWidget.x;\n // if (rowWidget.childWidgets.length > 0) {\n // const lastWidget: TableCellWidget = rowWidget.childWidgets[rowWidget.childWidgets.length - 1] as TableCellWidget;\n // cellLeft = lastWidget.x + lastWidget.width + lastWidget.margin.right;\n // }\n // rowWidget.childWidgets.push(cell);\n cell.containerWidget = rowWidget;\n //If the row height is set as Atleast then height is set to atleast height for the first cell of the row.\n if (!isNullOrUndefined(cell.ownerRow) && cell.ownerRow.rowFormat.heightType !== 'Exactly' && HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height) > 0 && cell.cellIndex === 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(cell.ownerRow.rowFormat.height);\n }\n //Add condition not cell merged vertically.\n if (cell.cellFormat.rowSpan === 1) {\n var cellHeight = void 0;\n if (rowWidget.rowFormat.heightType === 'Exactly') {\n cellHeight = cell.height + cell.margin.bottom;\n }\n else {\n cellHeight = cell.height + cell.margin.top + cell.margin.bottom;\n }\n if (rowWidget.height - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing) < cellHeight) {\n rowWidget.height = cellHeight + HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.updateHeightForRowWidget = function (viewer, isUpdateVerticalPosition, tableCollection, rowCollection, rowWidget, isLayouted, endRowWidget, isInitialLayout) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellspacing = 0;\n var cellWidget = undefined;\n var childWidget = rowWidget.childWidgets[i];\n // if (childWidget instanceof TableCellWidget) {\n cellWidget = childWidget;\n // }\n var rowSpan = 1;\n rowSpan = cellWidget.cellFormat.rowSpan;\n cellspacing = HelperMethods.convertPointToPixel(cellWidget.ownerTable.tableFormat.cellSpacing);\n if (rowSpan > 1) {\n var currentRowWidgetIndex = rowWidget.containerWidget.childWidgets.indexOf(rowWidget);\n var rowSpanWidgetEndIndex = currentRowWidgetIndex + rowSpan - 1 - (rowWidget.index - cellWidget.rowIndex);\n if (!isInitialLayout && (viewer.clientArea.bottom < cellWidget.y + cellWidget.height + cellWidget.margin.bottom\n || rowSpanWidgetEndIndex >= currentRowWidgetIndex + 1) && (rowCollection.length === 1\n || rowCollection.length >= 1 && rowWidget === rowCollection[rowCollection.length - 1])) {\n this.splitSpannedCellWidget(cellWidget, tableCollection, rowCollection, viewer);\n }\n var spanEndRowWidget = rowWidget;\n if (rowSpanWidgetEndIndex > 0) {\n if (rowSpanWidgetEndIndex < rowWidget.containerWidget.childWidgets.length) {\n var childWidget_1 = rowWidget.containerWidget.childWidgets[rowSpanWidgetEndIndex];\n if (childWidget_1 instanceof TableRowWidget) {\n spanEndRowWidget = childWidget_1;\n if (spanEndRowWidget === endRowWidget) {\n spanEndRowWidget = rowWidget;\n }\n }\n }\n else {\n /* eslint-disable-next-line max-len */\n spanEndRowWidget = rowWidget.containerWidget.childWidgets[rowWidget.containerWidget.childWidgets.length - 1];\n }\n }\n if (cellWidget.y + cellWidget.height + cellWidget.margin.bottom < spanEndRowWidget.y + spanEndRowWidget.height) {\n cellWidget.height = spanEndRowWidget.y + spanEndRowWidget.height - cellWidget.y - cellWidget.margin.bottom;\n /* eslint-disable-next-line max-len */\n }\n else if (isLayouted && spanEndRowWidget && (spanEndRowWidget.y !== 0 && spanEndRowWidget.height !== 0) && cellWidget.y + cellWidget.height + cellWidget.margin.bottom > spanEndRowWidget.y + spanEndRowWidget.height) {\n if (spanEndRowWidget.rowFormat.heightType !== 'Exactly' || (spanEndRowWidget.rowFormat.heightType === 'Exactly' && spanEndRowWidget.rowFormat.height > cellWidget.y + cellWidget.height + cellWidget.margin.bottom - spanEndRowWidget.y)) {\n spanEndRowWidget.height = cellWidget.y + cellWidget.height + cellWidget.margin.bottom - spanEndRowWidget.y;\n }\n else {\n cellWidget.height = (spanEndRowWidget.y - cellWidget.y) + spanEndRowWidget.height;\n }\n //Update the next rowlayout widget location. Reason for the updation is previous row height is updated when cell height is greater. So already layouted next row location has to be updated again.\n // if (rowWidget === spanEndRowWidget && rowWidget.nextWidget instanceof TableRowWidget) {\n // let nextRow: TableRowWidget = rowWidget.nextWidget as TableRowWidget;\n // // Need to update on this further\n // // if (viewer.renderedElements.containsKey(nextRow)) {\n // // let nextWidget: TableRowWidget[] = viewer.renderedElements.get(nextRow) as TableRowWidget[];\n // // if (nextWidget.length > 0) {\n // // nextWidget[0].x = nextWidget[0].x;\n // // nextWidget[0].y = rowWidget.y + rowWidget.height;\n // // }\n // // }\n // }\n }\n }\n else {\n if (cellspacing > 0) {\n // In the Case of tableWidget is greater than one and rowWidget is start at the Top Position of the page.\n // In such case we have update the cell height with half of cell spacing.\n // Remaining cases we have to update the entire hight\n if (tableCollection.length > 1 && rowWidget.y === viewer.clientArea.y && viewer instanceof PageLayoutViewer) {\n cellspacing = cellspacing / 2;\n }\n }\n cellWidget.height = rowWidget.height - cellWidget.margin.top - cellWidget.margin.bottom - cellspacing;\n }\n this.updateHeightForCellWidget(viewer, tableCollection, rowCollection, cellWidget);\n var widget = rowWidget.containerWidget;\n while (widget.containerWidget instanceof Widget) {\n widget = widget.containerWidget;\n }\n var page = undefined;\n if (widget instanceof BodyWidget) {\n page = widget.page;\n }\n /* eslint-disable-next-line max-len */\n if ((viewer instanceof PageLayoutViewer && viewer.visiblePages.indexOf(page) !== -1) || isUpdateVerticalPosition) {\n this.updateCellVerticalPosition(cellWidget, false, cellWidget.ownerTable.isInsideTable);\n }\n //Renders the current table row contents, after relayout based on editing.\n // if (viewer instanceof PageLayoutViewer && (viewer as PageLayoutViewer).visiblePages.indexOf(page) !== -1) {\n // //Added proper undefined condition check for Asynchronous operation.\n // if (!isNullOrUndefined(rowWidget.tableRow) && !isNullOrUndefined(rowWidget.tableRow.rowFormat)) {\n // this.viewer.updateScrollBars();\n // //this.render.renderTableCellWidget(page, cellWidget);\n // }\n // }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.updateHeightForCellWidget = function (viewer, tableWidget, rowCollection, cellWidget) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.updateHeightForTableWidget(tableWidget, rowCollection, cellWidget.childWidgets[i]);\n }\n }\n };\n Layout.prototype.getRowHeight = function (row, rowCollection) {\n var height = 0;\n if (row.rowFormat.heightType === 'Exactly') {\n height = row.rowFormat.height;\n }\n else {\n for (var i = 0; i < rowCollection.length; i++) {\n if (rowCollection[i] instanceof TableRowWidget) {\n height = rowCollection[i].height + height;\n }\n }\n height = Math.max(height, row.rowFormat.height);\n }\n return height;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.splitSpannedCellWidget = function (cellWidget, tableCollection, rowCollection, viewer) {\n /* eslint-disable-next-line max-len */\n var splittedCell = this.getSplittedWidget(viewer.clientArea.bottom, false, tableCollection, rowCollection, cellWidget, undefined, undefined, undefined, undefined, true);\n if (!isNullOrUndefined(splittedCell)) {\n //Adds the splitted contents of a vertical merged cell, in order preserve in next page.\n this.documentHelper.splittedCellWidgets.push(splittedCell);\n splittedCell.isSplittedCell = true;\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.insertSplittedCellWidgets = function (viewer, tableCollection, rowWidget, previousRowIndex) {\n if (!isNullOrUndefined(rowWidget)) {\n var left = rowWidget.x;\n var tableWidth = 0;\n var cellspace = 0;\n var linestyle = false;\n tableWidth = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableHolder.tableWidth);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n var isRightStyleNone = (cellWidget.cellFormat.borders.right.lineStyle === 'None');\n cellspace = !isNullOrUndefined(cellWidget.ownerTable) && !isNullOrUndefined(cellWidget.ownerTable.tableFormat) ? HelperMethods.convertPointToPixel(cellWidget.ownerTable.tableFormat.cellSpacing) : 0;\n if (Math.round(left) < Math.round(cellWidget.x - cellWidget.margin.left - cellspace)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i)) {\n i--;\n continue;\n }\n // Bug 871725: Empty cell widget must be inserted if the table split into next page.\n if (tableCollection.length == 1) {\n break;\n }\n var length_1 = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i, previousRowIndex);\n if (length_1 < rowWidget.childWidgets.length) {\n i--;\n continue;\n }\n }\n left += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n if (cellspace > 0 || cellWidget.columnIndex === cellWidget.ownerTable.tableHolder.columns.length - 1 ||\n cellWidget.index === cellWidget.containerWidget.childWidgets.length - 1) {\n if (!cellWidget.ownerTable.tableFormat.allowAutoFit) {\n var leftBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellLeftBorder(cellWidget).getLineWidth());\n var rightBorderWidth = HelperMethods.convertPointToPixel(TableCellWidget.getCellRightBorder(cellWidget).getLineWidth());\n cellWidget.rightBorderWidth = !cellWidget.ownerTable.isBidiTable ? rightBorderWidth : leftBorderWidth;\n left += cellWidget.rightBorderWidth;\n }\n if (!this.isInsertTable()) {\n linestyle = this.checkPreviousMargins(cellWidget.ownerTable);\n }\n }\n left -= (isRightStyleNone && !linestyle) ? 0 : (cellWidget.rightBorderWidth);\n if (i === rowWidget.childWidgets.length - 1 && Math.round(left) < Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, i + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, i + 1, previousRowIndex);\n continue;\n }\n }\n // Special case: when the child widgets of row is equal to 0 then the splitted widgets in the viewer is added in the table row widgets.\n /* eslint-disable-next-line max-len */\n if ((isNullOrUndefined(rowWidget.childWidgets) || rowWidget.childWidgets.length === 0) && this.documentHelper.splittedCellWidgets.length > 0) {\n for (var j = 0; j < this.documentHelper.splittedCellWidgets.length; j++) {\n var widget = this.documentHelper.splittedCellWidgets[j];\n if (Math.round(left) <= Math.round(widget.x - widget.margin.left)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j)) {\n j--;\n continue;\n }\n var count = rowWidget.childWidgets.length;\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j, previousRowIndex);\n if (count < rowWidget.childWidgets.length) {\n j--;\n continue;\n }\n }\n left += widget.margin.left + widget.width + widget.margin.right;\n if (j === rowWidget.childWidgets.length - 1 && Math.round(left) <\n Math.round(rowWidget.x + tableWidth)) {\n if (this.insertRowSpannedWidget(rowWidget, viewer, left, j + 1)) {\n continue;\n }\n this.insertEmptySplittedCellWidget(rowWidget, tableCollection, left, j + 1, previousRowIndex);\n continue;\n }\n }\n }\n if (this.documentHelper.splittedCellWidgets.length > 0) {\n this.documentHelper.splittedCellWidgets = [];\n }\n }\n };\n Layout.prototype.insertRowSpannedWidget = function (rowWidget, viewer, left, index) {\n var cellSpacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n cellSpacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < this.documentHelper.splittedCellWidgets.length; i++) {\n var splittedCell = this.documentHelper.splittedCellWidgets[i];\n if (Math.round(left) === Math.round(splittedCell.x - splittedCell.margin.left)) {\n rowWidget.childWidgets.splice(index, 0, splittedCell);\n splittedCell.containerWidget = rowWidget;\n if (splittedCell.height > rowWidget.height) {\n rowWidget.height = splittedCell.height;\n }\n //If the splitted cell location differs from expected location update the location of row child widgets.\n if (splittedCell.y !== rowWidget.y + splittedCell.margin.top + cellSpacing) {\n this.updateChildLocationForRow(rowWidget.y, rowWidget);\n }\n this.documentHelper.splittedCellWidgets.splice(i, 1);\n return true;\n }\n }\n return false;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.insertEmptySplittedCellWidget = function (currentRow, tableCollection, left, index, previousRowIndex) {\n var tableWidget = tableCollection[tableCollection.length - 1];\n var previousRow;\n for (var j = tableCollection.length - 1; j >= 0; j--) {\n var table = tableCollection[j];\n for (var z = table.childWidgets.length - 1; z >= 0; z--) {\n var row = table.childWidgets[z];\n if (row.index === previousRowIndex) {\n previousRow = row;\n break;\n }\n }\n }\n if (previousRow) {\n tableWidget = previousRow.ownerTable;\n previousRowIndex = previousRow.indexInOwner;\n }\n for (var i = previousRowIndex; i >= 0; i--) {\n var rowWidget = tableWidget.childWidgets[i];\n var previousLeft = rowWidget.x;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var rowSpan = 1;\n var cellWidget = rowWidget.childWidgets[j];\n if (Math.round(left) === Math.round(previousLeft)) {\n rowSpan = (isNullOrUndefined(cellWidget) || isNullOrUndefined(cellWidget.cellFormat)) ? rowSpan :\n cellWidget.cellFormat.rowSpan;\n if (rowSpan > 1 && (rowWidget.firstChild.columnIndex === 0)) {\n if (this.isVerticalMergedCellContinue(currentRow) && currentRow.rowFormat.heightType !== \"Exactly\" && !isNullOrUndefined(currentRow.previousRenderedWidget) && currentRow.previousRenderedWidget instanceof TableRowWidget && currentRow.previousRenderedWidget.y + currentRow.previousRenderedWidget.height < cellWidget.y + cellWidget.height) {\n var splittedCell = this.getSplittedWidget(currentRow.previousRenderedWidget.y + currentRow.previousRenderedWidget.height, true, tableCollection, undefined, cellWidget, undefined, undefined, undefined, undefined, true);\n currentRow.childWidgets.splice(index, 0, splittedCell);\n splittedCell.containerWidget = currentRow;\n this.updateChildLocationForRow(currentRow.y, currentRow);\n return;\n }\n else {\n //if (!isNullOrUndefined(currentRow.childWidgets[index])) {\n var emptyCellWidget = this.createCellWidget(cellWidget);\n //if (emptyCellWidget.x < (currentRow.childWidgets[index] as TableCellWidget).x) {\n currentRow.childWidgets.splice(index, 0, emptyCellWidget);\n emptyCellWidget.containerWidget = currentRow;\n this.updateChildLocationForRow(currentRow.y, currentRow);\n return;\n }\n //}\n //}\n }\n }\n previousLeft += cellWidget.margin.left + cellWidget.width + cellWidget.margin.right;\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.getSplittedWidget = function (bottom, splitMinimalWidget, tableCollection, rowCollection, cellWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, nestedCount, splitSpannedCellWidget) {\n var splittedWidget = undefined;\n var footnoteHeight = 0;\n if (isMultiColumnSplit || cellWidget.y + cellWidget.height > bottom - this.footHeight - cellWidget.margin.bottom) {\n for (var i = 0; i < cellWidget.ownerRow.childWidgets.length; i++) {\n var tableCellWidget = cellWidget.ownerRow.childWidgets[i];\n if (tableCellWidget.y + tableCellWidget.height < bottom - this.footHeight - tableCellWidget.margin.bottom) {\n for (var j = 0; j < tableCellWidget.childWidgets.length; j++) {\n if (tableCellWidget.childWidgets[j] instanceof ParagraphWidget) {\n var paragraphWidget = tableCellWidget.childWidgets[j];\n for (var k = 0; k < paragraphWidget.childWidgets.length; k++) {\n var lineWidget = paragraphWidget.childWidgets[k];\n var height = this.getFootNoteHeightInLine(lineWidget);\n this.existFootnoteHeight += height;\n footnoteHeight += height;\n }\n }\n }\n }\n }\n var count = 0;\n if (cellWidget.ownerTable.isInsideTable) {\n count = nestedCount;\n }\n var isCellSplit = false;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var paragraphWidget = cellWidget.childWidgets[i];\n var splittedPara = this.getSplittedWidgetForPara(bottom - cellWidget.margin.bottom, paragraphWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, count, isCellSplit);\n if (isMultiColumnSplit) {\n count = count + paragraphWidget.childWidgets.length;\n }\n if (!isNullOrUndefined(splittedPara)) {\n isCellSplit = true;\n if (i === 0 && splittedPara === paragraphWidget && !splitSpannedCellWidget) {\n //Returns if the whole content of the cell does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedPara) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedPara), 1);\n i--;\n }\n cellWidget.height -= splittedPara.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedPara.height;\n splittedWidget.childWidgets.push(splittedPara);\n splittedPara.containerWidget = splittedWidget;\n }\n }\n else {\n var tableWidget = cellWidget.childWidgets[i];\n var tableCol = [tableWidget];\n //Check for nested table.\n if (isMultiColumnSplit || bottom - cellWidget.margin.bottom < tableWidget.y + tableWidget.height) {\n var tableHeight = tableWidget.height;\n /* eslint-disable-next-line max-len */\n var splittedTable = this.getSplittedWidgetForTable(bottom - cellWidget.margin.bottom, tableCol, tableWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, count);\n if (isNullOrUndefined(splittedTable) &&\n !(tableWidget.childWidgets[0].rowFormat.allowBreakAcrossPages)) {\n splittedTable = tableWidget;\n }\n if (!isNullOrUndefined(splittedTable)) {\n if (i === 0 && splittedTable === tableWidget) {\n //Returns if the whole table does not fit in current page.\n return cellWidget;\n }\n if (cellWidget.childWidgets.indexOf(splittedTable) !== -1) {\n cellWidget.childWidgets.splice(cellWidget.childWidgets.indexOf(splittedTable), 1);\n i--;\n cellWidget.height -= splittedTable.height;\n }\n else {\n cellWidget.height -= tableHeight - tableWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n splittedWidget.height += splittedTable.height;\n splittedWidget.childWidgets.push(splittedTable);\n splittedTable.containerWidget = splittedWidget;\n }\n }\n }\n }\n }\n this.existFootnoteHeight -= footnoteHeight;\n if (isNullOrUndefined(splittedWidget) && splitMinimalWidget && this.isRelayoutneed) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createCellWidget(cellWidget);\n }\n return splittedWidget;\n };\n Layout.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case 0:\n return 'Arabic';\n case 1:\n return 'LowLetter';\n case 2:\n return 'LowRoman';\n case 3:\n return 'UpLetter';\n case 4:\n return 'UpRoman';\n case 5:\n return 'Ordinal';\n case 6:\n return 'Number';\n case 7:\n return 'OrdinalText';\n case 8:\n return 'LeadingZero';\n case 9:\n return 'Bullet';\n case 10:\n return 'FarEast';\n case 11:\n return 'Special';\n default:\n return 'None';\n }\n };\n Layout.prototype.createCellWidget = function (cell) {\n var cellWidget = new TableCellWidget();\n cellWidget.cellFormat = cell.cellFormat;\n cellWidget.index = cell.index;\n cellWidget.rowIndex = cell.rowIndex;\n cellWidget.columnIndex = cell.columnIndex;\n cellWidget.containerWidget = cell.containerWidget;\n this.updateWidgetLocation(cell, cellWidget);\n cellWidget.margin = cell.margin;\n cellWidget.leftBorderWidth = cell.leftBorderWidth;\n cellWidget.rightBorderWidth = cell.rightBorderWidth;\n return cellWidget;\n };\n Layout.prototype.createTableWidget = function (table) {\n var newTable = new TableWidget();\n if (table.header) {\n newTable.header = table.header;\n var height = this.getHeaderHeightForSpannedRow(table);\n newTable.headerHeight = height > table.headerHeight ? height : table.headerHeight;\n }\n newTable.index = table.index;\n newTable.tableFormat = table.tableFormat;\n newTable.tableHolder = table.tableHolder;\n newTable.footnoteElement = table.footnoteElement;\n newTable.isGridUpdated = table.isGridUpdated;\n newTable.wrapTextAround = table.wrapTextAround;\n newTable.positioning = table.positioning;\n newTable.isContainInsideTable = table.isContainInsideTable;\n newTable.isBidiTable = table.isBidiTable;\n return newTable;\n };\n Layout.prototype.getSplittedWidgetForPara = function (bottom, paragraphWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, count, isCellSplit) {\n var lineBottom = paragraphWidget.y;\n var splittedWidget = undefined;\n var moveEntireBlock = false;\n var isSplitParagraph = false;\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var lineWidget = paragraphWidget.childWidgets[i];\n var height = this.getFootNoteHeightInLine(lineWidget);\n height += this.existFootnoteHeight;\n if (!isNullOrUndefined(footNoteCollection)) {\n for (var j = 0; j < footNoteCollection.length; j++) {\n height += this.getFootNoteHeight(footNoteCollection[j].bodyWidget);\n }\n }\n var lineHeight = 0;\n if (lineWidget.children[0] instanceof ShapeBase) {\n lineHeight = lineWidget.children[0].height;\n }\n else {\n lineHeight = lineWidget.height;\n }\n if (!isNullOrUndefined(paragraphWidget.associatedCell) && paragraphWidget.associatedCell.index === 0 && paragraphWidget.index === 0\n && isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.previousSplitWidget) && isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.previousWidget)\n && paragraphWidget.paragraphFormat.keepWithNext) {\n moveEntireBlock = true;\n lineWidget = paragraphWidget.childWidgets[0];\n return paragraphWidget;\n }\n if ((isMultiColumnSplit && count >= lineIndexInCell) || bottom < lineBottom + height + lineHeight || isCellSplit) {\n if (paragraphWidget.paragraphFormat.keepLinesTogether && (paragraphWidget.index !== 0 ||\n (paragraphWidget.index === 0 && !isNullOrUndefined(paragraphWidget.associatedCell.ownerRow.previousWidget)))) {\n moveEntireBlock = true;\n i = 0;\n lineWidget = paragraphWidget.childWidgets[0];\n }\n else if (paragraphWidget.paragraphFormat.widowControl) {\n if (!isNullOrUndefined(paragraphWidget.associatedCell) && i === 1 && bottom < lineBottom + paragraphWidget.height && !isSplitParagraph) {\n var rowWidget = paragraphWidget.associatedCell.ownerRow;\n var table = rowWidget.containerWidget;\n var isFirstitemInPage = isNullOrUndefined(table.previousWidget) ? true : false;\n var isSplittedTable = table.getSplitWidgets().length > 1 ? true : false;\n if (!isFirstitemInPage && !isSplittedTable) {\n return paragraphWidget;\n }\n else {\n if (lineWidget.isLastLine() && isNullOrUndefined(splittedWidget)) {\n return undefined;\n }\n isSplitParagraph = true;\n }\n }\n if (i === 1 && !isSplitParagraph) {\n moveEntireBlock = true;\n i = 0;\n lineWidget = paragraphWidget.childWidgets[0];\n }\n }\n if (i === 0) {\n if (lineWidget.paragraph.containerWidget instanceof TableCellWidget && !moveEntireBlock && !isMultiColumnSplit) {\n //checks first line of the page is exceed the page height\n if (lineWidget.paragraph.containerWidget.y === paragraphWidget.y) {\n lineBottom += lineWidget.height;\n continue;\n }\n }\n splittedWidget = paragraphWidget;\n break;\n }\n if (paragraphWidget.childWidgets.indexOf(lineWidget) !== -1) {\n paragraphWidget.childWidgets.splice(paragraphWidget.childWidgets.indexOf(lineWidget), 1);\n i--;\n }\n paragraphWidget.height -= lineWidget.height;\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = new ParagraphWidget();\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.index = paragraphWidget.index;\n this.updateWidgetLocation(paragraphWidget, splittedWidget);\n splittedWidget.height = lineWidget.height;\n }\n else {\n splittedWidget.height += lineWidget.height;\n }\n splittedWidget.childWidgets.push(lineWidget);\n lineWidget.paragraph = splittedWidget;\n }\n this.getFootnoteFromLine(lineWidget, footNoteCollection);\n lineBottom += lineWidget.height;\n count++;\n }\n // this.updateLinearIndex(splittedWidget);\n return splittedWidget;\n };\n Layout.prototype.getSplittedWidgetForTable = function (bottom, tableCollection, tableWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, count) {\n var rowBottom = tableWidget.y;\n var splittedWidget = undefined;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = undefined;\n var childWidget = tableWidget.childWidgets[i];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n var rowHeight = rowWidget.height;\n if (isMultiColumnSplit || bottom < rowBottom + rowHeight || !isNullOrUndefined(splittedWidget)) {\n //ToDo: Check whether row included in vertical merge or AllowRowSplitbyPage is true, if so split row.\n //Checks if atleast first line fits in the client area.\n var splittedRow = undefined;\n var allowRowBreakAcrossPages = true;\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(rowWidget.rowFormat)) {\n allowRowBreakAcrossPages = rowWidget.rowFormat.allowBreakAcrossPages;\n }\n if (allowRowBreakAcrossPages) {\n /* eslint-disable-next-line max-len */\n splittedRow = (isNullOrUndefined(splittedWidget) && this.isFirstLineFitForRow(bottom, rowWidget)) ? this.getSplittedWidgetForRow(bottom, tableCollection, [rowWidget], rowWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, count) : rowWidget;\n }\n else {\n if ((isNullOrUndefined(tableWidget.containerWidget.containerWidget.previousWidget)\n && this.isFirstLineFitForRow(bottom, rowWidget))\n || (tableWidget.isInsideTable\n && !(tableWidget.containerWidget.containerWidget.rowFormat.allowBreakAcrossPages))) {\n splittedRow = this.getSplittedWidgetForRow(bottom, tableCollection, [rowWidget], rowWidget, footNoteCollection, lineIndexInCell, isMultiColumnSplit, count);\n }\n else if (!isNullOrUndefined(tableWidget.containerWidget.containerWidget.previousWidget)) {\n splittedRow = rowWidget;\n }\n }\n if (!isNullOrUndefined(splittedRow)) {\n if (i === 0 && splittedRow === rowWidget) {\n //Returns if the whole table does not fit in current page.\n return tableWidget;\n }\n if (tableWidget.childWidgets.indexOf(splittedRow) !== -1) {\n tableWidget.childWidgets.splice(tableWidget.childWidgets.indexOf(splittedRow), 1);\n i--;\n tableWidget.height -= splittedRow.height;\n }\n else {\n tableWidget.height -= rowHeight - rowWidget.height;\n }\n if (isNullOrUndefined(splittedWidget)) {\n //Creates new widget, to hold the splitted contents.\n splittedWidget = this.createTableWidget(tableWidget);\n this.updateWidgetLocation(tableWidget, splittedWidget);\n splittedWidget.height = splittedRow.height;\n }\n else {\n splittedWidget.height += splittedRow.height;\n }\n splittedWidget.childWidgets.push(splittedRow);\n splittedRow.containerWidget = splittedWidget;\n }\n }\n rowBottom += rowWidget.height;\n }\n return splittedWidget;\n };\n Layout.prototype.isFirstLineFitForPara = function (bottom, paraWidget) {\n var lineWidget = paraWidget.childWidgets[0];\n var lineHeight = lineWidget.height;\n var height = this.getFootNoteHeightInLine(lineWidget);\n height += this.existFootnoteHeight;\n lineHeight += height;\n var cellwidget = lineWidget.paragraph.containerWidget;\n if (paraWidget.paragraphFormat.keepLinesTogether && Math.floor(cellwidget.containerWidget.y) !== this.viewer.clientArea.y) {\n lineHeight = paraWidget.height;\n }\n // let document: WordDocument = undefined;\n // if (!isNullOrUndefined(lineWidget.paragraph.currentNode) && !isNullOrUndefined(cellwidget.containerWidget)) {\n // document = WordDocument.getDocumentOf(lineWidget.paragraph.currentNode);\n // }\n //checks first line of the page is exceed the page height\n if (this.documentHelper.isFirstLineFitInShiftWidgets) {\n /* eslint-disable-next-line max-len */\n if (this.viewer.clientActiveArea.y === this.viewer.clientArea.y && paraWidget.y + lineHeight >= bottom) {\n return true;\n }\n }\n else if (!cellwidget.ownerTable.isInsideTable && cellwidget.containerWidget.y === this.viewer.clientArea.y\n && paraWidget.y + lineHeight >= bottom) {\n return true;\n }\n return (paraWidget.y + lineHeight <= bottom);\n };\n Layout.prototype.isFirstLineFitForTable = function (bottom, tableWidget) {\n var rowWidget = undefined;\n var isFit = false;\n var childWidget = tableWidget.childWidgets[0];\n // if (childWidget instanceof TableRowWidget) {\n rowWidget = childWidget;\n // }\n if (!isNullOrUndefined(rowWidget)) {\n isFit = this.isFirstLineFitForRow(bottom, rowWidget);\n }\n return isFit;\n };\n Layout.prototype.isFirstLineFitForRow = function (bottom, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n if (!this.isFirstLineFitForCell(bottom, cellWidget)) {\n return false;\n }\n }\n return true;\n };\n Layout.prototype.isFirstLineFitForCell = function (bottom, cellWidget) {\n if (cellWidget.childWidgets.length === 0) {\n return true;\n }\n if (cellWidget.childWidgets[0] instanceof ParagraphWidget) {\n var paraWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForPara(bottom - cellWidget.margin.bottom, paraWidget);\n }\n else {\n var tableWidget = cellWidget.childWidgets[0];\n return this.isFirstLineFitForTable(bottom - cellWidget.margin.bottom, tableWidget);\n }\n };\n Layout.prototype.updateWidgetLocation = function (widget, table) {\n table.x = widget.x;\n table.y = widget.y;\n table.width = widget.width;\n };\n Layout.prototype.updateChildLocationForTable = function (top, tableWidget, bodyWidget, updatePosition) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n //rowWidget.x = rowWidget.x;\n rowWidget.y = top;\n this.updateChildLocationForRow(top, rowWidget, bodyWidget, updatePosition);\n top += rowWidget.height;\n }\n };\n Layout.prototype.updateChildLocationForRow = function (top, rowWidget, bodyWidget, updatePosition) {\n var spacing = 0;\n if (rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n spacing = HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n }\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var cellWidget = rowWidget.childWidgets[i];\n //cellWidget.x = cellWidget.x;\n cellWidget.index = cellWidget.cellIndex;\n cellWidget.y = top + cellWidget.margin.top + spacing;\n this.updateChildLocationForCellOrShape(cellWidget.y, cellWidget, bodyWidget, updatePosition);\n }\n };\n Layout.prototype.updateChildLocationForCellOrShape = function (top, widget, bodyWidget, updatePosition, updateShapeYPosition) {\n var container = widget;\n if (widget instanceof ShapeElementBox) {\n container = widget.textFrame;\n }\n for (var i = 0; i < container.childWidgets.length; i++) {\n var skipHeight = false;\n if (container.childWidgets[i] instanceof TableWidget && container.childWidgets[i].wrapTextAround\n && !isNullOrUndefined(container.childWidgets[i + 1]) && container.childWidgets[i + 1].y > container.childWidgets[i].y\n && container.childWidgets[i + 1].y < (container.childWidgets[i].y + container.childWidgets[i].height)) {\n skipHeight = true;\n }\n if (!isNullOrUndefined(container.childWidgets[i].floatingElements) && container.childWidgets[i].floatingElements.length > 0 && updatePosition) {\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.bottom - top;\n this.viewer.clientActiveArea.y = top;\n }\n container.childWidgets[i].x = container.childWidgets[i].x;\n container.childWidgets[i].y = top;\n if (widget instanceof ShapeElementBox && widget.textWrappingStyle == \"Inline\" && updateShapeYPosition) {\n this.updateShapeYPosition(widget);\n }\n if (!isNullOrUndefined(bodyWidget) && widget instanceof TableCellWidget && container.childWidgets[i] instanceof ParagraphWidget) {\n var paragraph = container.childWidgets[i];\n var prevBodyWidgetFloatingElements = widget.ownerTable.bodyWidget.floatingElements;\n var isRowMovedToNextTable = false;\n if (widget.ownerTable.bodyWidget === bodyWidget && !isNullOrUndefined(widget.ownerTable.previousSplitWidget)) {\n prevBodyWidgetFloatingElements = widget.ownerTable.previousSplitWidget.bodyWidget.floatingElements;\n isRowMovedToNextTable = true;\n }\n if (paragraph.floatingElements.length > 0) {\n for (var j = 0; j < paragraph.floatingElements.length; j++) {\n var element = paragraph.floatingElements[j];\n var prevClientActiveAreaX = this.viewer.clientActiveArea.x;\n this.viewer.clientActiveArea.x = element.x;\n this.layoutShape(element);\n this.viewer.clientActiveArea.x = prevClientActiveAreaX;\n if (!isNullOrUndefined(paragraph.firstChild)) {\n var firstLine = paragraph.childWidgets[0];\n for (var k = 0; k < firstLine.children.length; k++) {\n var elementBox = firstLine.children[k];\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle == 'Inline') {\n this.adjustPosition(elementBox, widget.ownerTable.bodyWidget);\n top = paragraph.y;\n }\n }\n }\n if (prevBodyWidgetFloatingElements.indexOf(element) > -1 && element.textWrappingStyle !== 'Inline') {\n if (!isRowMovedToNextTable) {\n bodyWidget.floatingElements.push(element);\n var previousBodyWidget = bodyWidget.previousSplitWidget;\n if (!isNullOrUndefined(previousBodyWidget) && previousBodyWidget.floatingElements.indexOf(element) !== -1) {\n previousBodyWidget.floatingElements.splice(previousBodyWidget.floatingElements.indexOf(element), 1);\n }\n }\n if (prevBodyWidgetFloatingElements.indexOf(element) !== -1) {\n prevBodyWidgetFloatingElements.splice(prevBodyWidgetFloatingElements.indexOf(element), 1);\n }\n }\n }\n }\n }\n if (container.childWidgets[i] instanceof TableWidget) {\n this.updateChildLocationForTable(top, container.childWidgets[i], bodyWidget, updatePosition);\n }\n if (!skipHeight) {\n top += container.childWidgets[i].height;\n }\n }\n };\n Layout.prototype.updateCellVerticalPosition = function (cellWidget, isUpdateToTop, isInsideTable) {\n var containerWidget = cellWidget.ownerTable.containerWidget;\n if (containerWidget instanceof BlockContainer || containerWidget instanceof TextFrame || isInsideTable) {\n var displacement = this.getDisplacement(cellWidget, isUpdateToTop);\n //Update Y position alone for the child widget of cell\n this.updateCellContentVerticalPosition(cellWidget, displacement, isUpdateToTop);\n }\n };\n Layout.prototype.updateCellContentVerticalPosition = function (cellWidget, displacement, isUpdateToTop) {\n if (displacement === 0) {\n return;\n }\n var location = cellWidget.y + displacement;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var para = cellWidget.childWidgets[i];\n para.y = location;\n this.updateShapeInsideCell(para, displacement);\n }\n else {\n this.updateTableWidgetLocation(cellWidget.childWidgets[i], location, isUpdateToTop);\n }\n location = location + cellWidget.childWidgets[i].height;\n }\n };\n Layout.prototype.updateShapeInsideCell = function (paragraph, displacement) {\n for (var i = 0; i < paragraph.floatingElements.length; i++) {\n var floatElement = paragraph.floatingElements[i];\n floatElement.y += displacement;\n if (floatElement instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(floatElement.y, floatElement);\n }\n }\n };\n Layout.prototype.updateTableWidgetLocation = function (tableWidget, location, isUpdateToTop) {\n tableWidget.y = location = location + tableWidget.topBorderWidth;\n var cellSpacing = 0;\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n rowWidget.y = location;\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.y = location + cellWidget.margin.top + cellSpacing;\n this.updateCellVerticalPosition(cellWidget, isUpdateToTop, true);\n }\n location = location + rowWidget.height;\n }\n return location;\n };\n Layout.prototype.getDisplacement = function (cellWidget, isUpdateToTop) {\n //Gets the height of row\n var rowHeight = 0;\n var rowWidget = cellWidget.containerWidget;\n var padding = cellWidget.margin.top + cellWidget.margin.bottom;\n if (!isNullOrUndefined(cellWidget.cellFormat) && cellWidget.cellFormat.rowSpan > 1) {\n rowHeight = cellWidget.height;\n }\n else {\n rowHeight = ((!isNullOrUndefined(rowWidget) ? rowWidget.height : 0) - padding);\n }\n //Gets the height of content within the cell\n var cellContentHeight = this.getCellContentHeight(cellWidget, true);\n //Displacement field holds the value which has reduced from rowHeight and cellContentHeight\n var displacement = 0;\n if (rowHeight > cellContentHeight && rowHeight <= this.viewer.clientArea.height) {\n displacement = rowHeight - cellContentHeight;\n if (cellWidget.cellFormat.verticalAlignment === 'Center') {\n displacement = displacement / 2;\n }\n else if ((cellWidget.cellFormat.verticalAlignment === 'Top' || isUpdateToTop)) {\n displacement = 0;\n }\n }\n return displacement;\n };\n Layout.prototype.getCellContentHeight = function (cellWidget, isDisplacement, paraIndex) {\n if (isNullOrUndefined(cellWidget.childWidgets)) {\n return 0;\n }\n var contentHeight = 0;\n var cellY = cellWidget.y;\n var withShapeContentHeight = 0;\n var withShapeBottom = 0;\n var considerShapeHeight = false;\n var considerAsTop = false;\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var para = cellWidget.childWidgets[i];\n contentHeight += cellWidget.childWidgets[i].height;\n if (!isDisplacement && para.floatingElements.length > 0 && paraIndex === para.indexInOwner) {\n var totalShapeHeight = this.getFloatingItemsHeight(para, cellWidget);\n contentHeight += totalShapeHeight;\n }\n for (var k = 0; k < para.floatingElements.length; k++) {\n considerShapeHeight = true;\n var floatElement = para.floatingElements[k];\n var textWrappingStyle = floatElement.textWrappingStyle;\n var shapeBottom = floatElement.y + floatElement.height;\n var paraBottom = para.y + para.height;\n if ((cellY + cellWidget.containerWidget.height) > shapeBottom && shapeBottom > withShapeBottom) {\n withShapeContentHeight = Math.abs(cellY - shapeBottom);\n withShapeBottom = shapeBottom;\n considerAsTop = false;\n }\n else if (shapeBottom > paraBottom && para.x + para.width > floatElement.x && shapeBottom > withShapeBottom\n && textWrappingStyle !== 'InFrontOfText' && textWrappingStyle !== 'Behind'\n && (this.documentHelper.compatibilityMode === 'Word2013' || para.floatingElements[k].layoutInCell)) {\n var height = (withShapeBottom === 0) ? shapeBottom - paraBottom : shapeBottom - withShapeBottom;\n contentHeight += height;\n withShapeBottom = shapeBottom;\n }\n else {\n considerAsTop = true;\n }\n }\n }\n else {\n if (this.considerPositionTableHeight(cellWidget, cellWidget.childWidgets[i])) {\n contentHeight += cellWidget.childWidgets[i].height;\n }\n }\n }\n if ((cellY + contentHeight) > withShapeBottom) {\n considerShapeHeight = false;\n }\n return (isDisplacement && considerShapeHeight) ? withShapeContentHeight :\n (isDisplacement && considerAsTop ? cellWidget.ownerRow.height : contentHeight);\n };\n Layout.prototype.getFloatingItemsHeight = function (paragraph, cellWidget) {\n var withShapeBottom = 0;\n var totalShapeHeight = 0;\n for (var i = 0; i < paragraph.floatingElements.length; i++) {\n var floatElement = paragraph.floatingElements[i];\n var textWrappingStyle = floatElement.textWrappingStyle;\n var shapeBottom = floatElement.y + floatElement.height;\n var paraBottom = paragraph.y + paragraph.height;\n if (shapeBottom < this.viewer.clientArea.bottom && floatElement.y !== paragraph.y && paraBottom > shapeBottom && paragraph.x + paragraph.width > floatElement.x && shapeBottom > withShapeBottom\n && textWrappingStyle !== 'InFrontOfText' && textWrappingStyle !== 'Behind' && textWrappingStyle !== 'Inline'\n && (this.documentHelper.compatibilityMode === 'Word2013' || paragraph.floatingElements[i].layoutInCell)) {\n var height = (withShapeBottom === 0) ? shapeBottom - cellWidget.y : shapeBottom - withShapeBottom;\n totalShapeHeight += height;\n withShapeBottom = shapeBottom;\n }\n }\n return totalShapeHeight;\n };\n Layout.prototype.considerPositionTableHeight = function (cellWidget, nestedWrapTable) {\n if (nestedWrapTable.isLayouted && nestedWrapTable.wrapTextAround) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var blockWidget = cellWidget.childWidgets[i];\n if (nestedWrapTable !== blockWidget && (blockWidget.y === nestedWrapTable.y\n || (blockWidget.y + blockWidget.height) < nestedWrapTable.y)) {\n return false;\n }\n }\n }\n return true;\n };\n Layout.prototype.getTableLeftBorder = function (borders) {\n if (!isNullOrUndefined(borders.left)) {\n return borders.left;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getTableRightBorder = function (borders) {\n if (!isNullOrUndefined(borders.right)) {\n return borders.right;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getTableTopBorder = function (borders) {\n if (!isNullOrUndefined(borders.top)) {\n return borders.top;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getTableBottomBorder = function (borders) {\n if (!isNullOrUndefined(borders.bottom)) {\n return borders.bottom;\n }\n else {\n var border = new WBorder(borders);\n border.lineStyle = 'Single';\n border.lineWidth = 0.66;\n return border;\n }\n };\n Layout.prototype.getCellDiagonalUpBorder = function (tableCell) {\n var diagonalUpBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalUpBorder = cellBorder.diagonalUp;\n return diagonalUpBorder;\n };\n Layout.prototype.getCellDiagonalDownBorder = function (tableCell) {\n var diagonalDownBorder = undefined;\n var cellBorder = undefined;\n cellBorder = tableCell.cellFormat.borders;\n diagonalDownBorder = cellBorder.diagonalDown;\n return diagonalDownBorder;\n };\n Layout.prototype.getTableWidth = function (table) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var rowWidth = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n rowWidth += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n //#region shifting\n Layout.prototype.layoutNextItemsBlock = function (blockAdv, viewer, isFootnoteReLayout, isNextBlockToShift) {\n var sectionIndex = blockAdv.bodyWidget.sectionIndex;\n var block = blockAdv;\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n if (isNullOrUndefined(nextBlock) || this.documentHelper.blockToShift === block) {\n this.documentHelper.blockToShift = undefined;\n }\n var updateNextBlockList = true;\n while (nextBlock instanceof BlockWidget && (nextBlock.bodyWidget.sectionIndex === sectionIndex || (nextBlock.bodyWidget.sectionFormat.breakCode === 'NoBreak' && block.bodyWidget.sectionFormat.pageWidth === nextBlock.bodyWidget.sectionFormat.pageWidth && block.bodyWidget.sectionFormat.pageHeight === nextBlock.bodyWidget.sectionFormat.pageHeight))) {\n if (!isNullOrUndefined(isFootnoteReLayout) && isFootnoteReLayout && !nextBlock.isLayouted && this.isInitialLoad) {\n break;\n }\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n // if (viewer.fieldEndParagraph === block) {\n // //Sets field end paragraph to undefined, inorder to hold reLayouting with this paragraph.\n // viewer.fieldEndParagraph = undefined;\n // }\n block = nextBlock;\n if (this.documentHelper.blockToShift === block) {\n this.documentHelper.blockToShift = undefined;\n }\n updateNextBlockList = false;\n var nextWidget = undefined;\n nextWidget = block.getSplitWidgets()[0];\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.fieldStacks.length === 0 && !isNullOrUndefined(nextWidget) && currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(currentWidget.y + currentWidget.height, 2))) {\n if (!isNullOrUndefined(this.documentHelper.blockToShift) || this.documentHelper.owner.editorModule.isFootnoteElementRemoved) {\n this.documentHelper.blockToShift = block;\n }\n else if (nextWidget.bodyWidget) {\n var floatingElementLength = nextWidget.bodyWidget.floatingElements.length;\n if (floatingElementLength > 0 || (floatingElementLength === 0 && isNullOrUndefined(this.documentHelper.blockToShift)\n && currentWidget instanceof TableWidget && isNextBlockToShift)) {\n this.documentHelper.blockToShift = block;\n }\n }\n break;\n }\n updateNextBlockList = true;\n if ((viewer.owner.isShiftingEnabled && this.documentHelper.fieldStacks.length === 0) || this.isIFfield) {\n this.documentHelper.blockToShift = block;\n break;\n }\n else if (isNullOrUndefined(this.viewer.owner.editorModule) || !this.viewer.owner.editorModule.isInsertingTOC) {\n block = block.combineWidget(this.viewer);\n //let paragraph: ParagraphWidget;\n if (currentWidget.containerWidget !== block.containerWidget) {\n if (!(currentWidget instanceof ParagraphWidget) ||\n (currentWidget instanceof ParagraphWidget) && !currentWidget.isEndsWithPageBreak && !currentWidget.isEndsWithColumnBreak && currentWidget.containerWidget.page !== block.containerWidget.page && !(block.bodyWidget instanceof BodyWidget && block.bodyWidget.sectionFormat.breakCode === 'NoBreak')) {\n /* eslint-disable-next-line max-len */\n this.updateContainerWidget(block, currentWidget.containerWidget, currentWidget.indexInOwner + 1, false);\n }\n }\n if (block instanceof TableWidget) {\n this.clearTableWidget(block, true, true);\n block.isGridUpdated = false;\n //paragraph = this.documentHelper.selection.getFirstParagraphInFirstCell(block as TableWidget);\n }\n else {\n //paragraph = block as ParagraphWidget;\n }\n //if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n // this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n //}\n viewer.updateClientAreaForBlock(block, true);\n if (this.viewer instanceof WebLayoutViewer || block.bodyWidget instanceof HeaderFooterWidget) {\n block.containerWidget.height -= block.height;\n }\n this.documentHelper.layout.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n splittedWidget = nextBlock.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (!viewer.owner.isShiftingEnabled || (this.documentHelper.blockToShift !== block)) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n };\n /**\n * Update the client area for the line widget.\n *\n * @param {LineWidget} startLineWidget LineWidget instance.\n * @private\n */\n Layout.prototype.updateClientAreaForLine = function (startLineWidget) {\n startLineWidget.marginTop = 0;\n //Clears the line widget starting from current line.\n var top = this.documentHelper.selection.getTop(startLineWidget);\n var left = this.viewer.clientArea.x;\n this.viewer.cutFromTop(top);\n this.viewer.cutFromLeft(left);\n };\n Layout.prototype.getParentTable = function (block) {\n var widget = block;\n while (widget.containerWidget) {\n if (widget.containerWidget instanceof BlockContainer || widget.containerWidget instanceof TextFrame) {\n return widget;\n }\n widget = widget.containerWidget;\n }\n return undefined;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.reLayoutParagraph = function (paragraphWidget, lineIndex, elementBoxIndex, isBidi, isSkip) {\n if (this.isReplaceAll) {\n return;\n }\n this.isRelayout = true;\n if (paragraphWidget.containerWidget instanceof TextFrame\n && paragraphWidget.containerWidget.containerShape.textWrappingStyle === 'Inline') {\n lineIndex = paragraphWidget.containerWidget.containerShape.line.indexInOwner;\n paragraphWidget = paragraphWidget.containerWidget.containerShape.paragraph;\n }\n isBidi = isNullOrUndefined(isBidi) ? false : isBidi;\n this.isRelayout = true;\n if (this.documentHelper.blockToShift === paragraphWidget) {\n this.layoutBodyWidgetCollection(paragraphWidget.index, paragraphWidget.containerWidget, paragraphWidget, false);\n this.isBidiReLayout = true;\n }\n else {\n if (this.isBidiReLayout) {\n this.isBidiReLayout = false;\n }\n }\n // let isElementMoved: boolean = elementBoxIndex > 0;\n if (paragraphWidget.isInsideTable) {\n this.isBidiReLayout = true;\n if (!this.isReplacingAll) {\n this.reLayoutTable(paragraphWidget);\n }\n /* eslint-disable-next-line max-len */\n if (this.isFootnoteContentChanged && (!isNullOrUndefined(paragraphWidget.bodyWidget)) && !isNullOrUndefined(paragraphWidget.bodyWidget.page.footnoteWidget)) {\n var foot = paragraphWidget.bodyWidget.page.footnoteWidget;\n this.layoutfootNote(foot);\n }\n this.isBidiReLayout = false;\n }\n else {\n // this.isRelayout = true;\n this.reLayoutLine(paragraphWidget, lineIndex, isBidi, isSkip);\n }\n if (paragraphWidget.bodyWidget instanceof HeaderFooterWidget &&\n paragraphWidget.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(paragraphWidget.bodyWidget, this.viewer);\n }\n // this.updateLinearIndex(paragraphWidget);\n };\n Layout.prototype.getParentRow = function (block) {\n var cell = block;\n while (cell.ownerTable !== null && cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell.ownerRow;\n };\n Layout.prototype.reLayoutRow = function (block) {\n if (block instanceof ParagraphWidget) {\n block = block.associatedCell;\n }\n var currentRow = this.getParentRow(block).getSplitWidgets()[0];\n if (!isNullOrUndefined(currentRow) && !currentRow.ownerTable.tableFormat.allowAutoFit) {\n var currentTable = currentRow.ownerTable.getSplitWidgets()[0].combineWidget(this.viewer);\n var startRow = currentRow;\n while (this.isVerticalMergedCellContinue(startRow)) {\n var previousRow = startRow.previousWidget;\n if (isNullOrUndefined(previousRow)) {\n break;\n }\n startRow = previousRow;\n }\n var bodyWidget = currentTable.containerWidget;\n if (this.viewer instanceof WebLayoutViewer) {\n bodyWidget.height -= currentTable.height;\n }\n if ((this.viewer.owner.enableHeaderAndFooter || block.isInHeaderFooter) && !(bodyWidget instanceof TextFrame)) {\n block.bodyWidget.isEmpty = false;\n bodyWidget.height -= currentTable.height;\n /* eslint-disable-next-line max-len */\n this.viewer.updateHeaderFooterClientAreaWithTop(currentTable.bodyWidget.sectionFormat, this.documentHelper.isBlockInHeader(currentTable), bodyWidget.page);\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n }\n else {\n this.viewer.updateClientArea(bodyWidget, bodyWidget.page);\n }\n /* eslint-disable-next-line max-len */\n var area = new Rect(this.viewer.clientArea.x, this.viewer.clientArea.y, this.viewer.clientArea.width, this.viewer.clientArea.height);\n var clientArea = new Rect(area.x, area.y, area.width, area.height);\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n var block_3 = this.documentHelper.getFirstParagraphInFirstCell(currentTable);\n this.viewer.owner.editorModule.updateWholeListItems(block_3);\n }\n this.viewer.updateClientAreaForBlock(currentTable, true);\n this.viewer.cutFromTop(startRow.y);\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n //Clear Hieght for all the content\n currentTable.height = 0;\n do {\n this.clearRowWidget(currentRow, true, true, true);\n this.layoutRow([currentTable], currentRow, true);\n if (startRow === currentRow) {\n break;\n }\n startRow = startRow.nextRow;\n } while (startRow && startRow !== currentRow);\n this.updateChildLocationForTable(currentTable.y, currentTable);\n this.viewer.clientArea = clientArea;\n this.viewer.clientActiveArea = new Rect(clientArea.x, clientArea.y, clientArea.width, clientArea.height);\n this.viewer.updateClientAreaForBlock(currentTable, true);\n currentTable.x -= currentTable.leftBorderWidth;\n currentTable.y -= currentTable.topBorderWidth;\n this.viewer.cutFromTop(currentTable.y);\n this.shiftTableWidget(currentTable, this.viewer, true);\n this.layoutNextItemsBlock(currentTable, this.viewer);\n }\n else {\n this.currentCell = block;\n this.reLayoutTable(block);\n this.currentCell = undefined;\n }\n };\n Layout.prototype.reLayoutTable = function (block, isFootnoteReLayout) {\n //Get Top level owner of block\n var table = this.getParentTable(block);\n if (table.header) {\n var tableCollection = table.getSplitWidgets();\n for (var i = 1; i < tableCollection.length; i++) {\n tableCollection[i].bodyWidget.page.repeatHeaderRowTableWidget = false;\n }\n }\n var pageIndexBeforeLayouting = 0;\n if (table.containerWidget instanceof BodyWidget) {\n var blocks = table.getSplitWidgets();\n var splittedWidget = blocks[blocks.length - 1];\n pageIndexBeforeLayouting = splittedWidget.containerWidget.page.index;\n }\n //Combine splitted table in to single table\n var currentTable = table.combineWidget(this.viewer);\n var bodyWidget = currentTable.containerWidget;\n if (this.viewer instanceof WebLayoutViewer) {\n bodyWidget.height -= currentTable.height;\n }\n if ((this.viewer.owner.enableHeaderAndFooter || block.isInHeaderFooter) && !(bodyWidget instanceof TextFrame)) {\n block.bodyWidget.isEmpty = false;\n bodyWidget.height -= currentTable.height;\n /* eslint-disable-next-line max-len */\n this.viewer.updateHeaderFooterClientAreaWithTop(table.bodyWidget.sectionFormat, this.documentHelper.isBlockInHeader(table), bodyWidget.page);\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n }\n else {\n this.viewer.updateClientArea(bodyWidget, bodyWidget.page);\n }\n //Clear Hieght for all the content\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule) {\n var block_4 = this.documentHelper.getFirstParagraphInFirstCell(currentTable);\n this.viewer.owner.editorModule.updateWholeListItems(block_4);\n }\n this.viewer.updateClientAreaForBlock(currentTable, true);\n //Remove border width\n currentTable.x -= currentTable.leftBorderWidth;\n currentTable.y -= currentTable.topBorderWidth;\n //Update Client area for current position\n var yPos = this.getYPosition(currentTable);\n this.viewer.cutFromTop(yPos);\n this.clearTableWidget(currentTable, true, true, true, true);\n this.isBidiReLayout = true;\n this.layoutBlock(currentTable, 0);\n this.viewer.updateClientAreaForBlock(currentTable, false);\n var pageIndexAfterLayouting = 0;\n if (currentTable.containerWidget instanceof BodyWidget) {\n var blocks = currentTable.getSplitWidgets();\n var splittedWidget = blocks[blocks.length - 1];\n pageIndexAfterLayouting = splittedWidget.containerWidget.page.index;\n }\n this.layoutNextItemsBlock(currentTable, this.viewer, isFootnoteReLayout, pageIndexBeforeLayouting !== pageIndexAfterLayouting);\n };\n Layout.prototype.getYPosition = function (table) {\n if (table.wrapTextAround) {\n var prevWidget = table.previousWidget;\n while (prevWidget) {\n if (prevWidget instanceof ParagraphWidget) {\n return prevWidget.y + prevWidget.height;\n }\n else if (prevWidget instanceof TableWidget) {\n if (prevWidget.wrapTextAround) {\n prevWidget = prevWidget.previousWidget;\n }\n else {\n return prevWidget.y + prevWidget.height;\n }\n }\n }\n return this.viewer.clientActiveArea.y;\n }\n return table.y;\n };\n Layout.prototype.clearFootnoteReference = function (table, updateClientHeight) {\n if (table.footnoteElement && table.footnoteElement.length > 0) {\n var startPage = table.bodyWidget.page;\n for (var i = table.footnoteElement.length - 1; i >= 0; i--) {\n var footnote = table.footnoteElement[i];\n footnote.isLayout = false;\n var footNoteWidget = footnote.bodyWidget.containerWidget;\n if (footNoteWidget && footNoteWidget.bodyWidgets.indexOf(footnote.bodyWidget) !== -1) {\n var footnoteHeight = this.getFootNoteHeight(footnote.bodyWidget);\n footNoteWidget.height -= footnoteHeight;\n footNoteWidget.bodyWidgets.splice(footnote.bodyWidget.indexInOwner, 1);\n if (updateClientHeight && footNoteWidget.page === startPage) {\n this.viewer.clientActiveArea.height += footnoteHeight;\n this.viewer.clientArea.height += footnoteHeight;\n }\n }\n if (footNoteWidget.bodyWidgets.length === 0 && footNoteWidget.page) {\n footNoteWidget.page.footnoteWidget = undefined;\n }\n footnote.bodyWidget.containerWidget = undefined;\n }\n table.footnoteElement = [];\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearTableWidget = function (table, clearPosition, clearHeight, clearGrid, updateClientHeight) {\n table.height = 0;\n if (clearGrid) {\n table.isGridUpdated = false;\n }\n if (clearPosition) {\n table.y = 0;\n table.x = 0;\n if (table.footnoteElement && table.footnoteElement.length > 0) {\n this.clearFootnoteReference(table, updateClientHeight);\n }\n }\n table.leftBorderWidth = 0;\n table.rightBorderWidth = 0;\n table.topBorderWidth = 0;\n table.bottomBorderWidth = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n this.clearRowWidget(row, clearPosition, clearHeight, clearGrid);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearRowWidget = function (row, clearPosition, clearHeight, clearGrid) {\n row.height = 0;\n if (clearPosition) {\n row.y = 0;\n row.x = 0;\n }\n row.topBorderWidth = 0;\n row.bottomBorderWidth = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n this.clearCellWidget(cell, clearPosition, clearHeight, clearGrid);\n }\n };\n /**\n * @private\n */\n Layout.prototype.clearCellWidget = function (cell, clearPosition, clearHeight, clearGrid) {\n cell.height = 0;\n if (clearPosition) {\n cell.y = 0;\n cell.x = 0;\n }\n cell.leftBorderWidth = 0;\n cell.rightBorderWidth = 0;\n this.clearBlockWidget(cell.childWidgets, clearPosition, clearHeight, clearGrid);\n };\n /**\n * @private\n */\n Layout.prototype.clearBlockWidget = function (blocks, clearPosition, clearHeight, clearGrid) {\n for (var i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n if (block instanceof ParagraphWidget) {\n if (clearPosition) {\n block.y = 0;\n block.x = 0;\n }\n if (clearHeight) {\n block.height = 0;\n }\n }\n else {\n this.clearTableWidget(block, clearPosition, clearHeight, clearGrid);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.layoutBodyWidgetCollection = function (blockIndex, bodyWidget, block, shiftNextWidget, isSkipShifting) {\n if (!isNullOrUndefined(block) && block.isFieldCodeBlock) {\n return;\n }\n if (!isNullOrUndefined(this.documentHelper.owner)\n && this.documentHelper.owner.isLayoutEnabled) {\n if (bodyWidget instanceof BlockContainer || bodyWidget instanceof TextFrame) {\n var curretBlock = this.checkAndGetBlock(bodyWidget, blockIndex);\n if (bodyWidget instanceof BodyWidget && isNullOrUndefined(curretBlock) && !isNullOrUndefined(bodyWidget.nextRenderedWidget) && bodyWidget.nextRenderedWidget.sectionFormat.breakCode === 'NoBreak') {\n curretBlock = bodyWidget.nextRenderedWidget.firstChild;\n bodyWidget = bodyWidget.nextRenderedWidget;\n }\n if (isNullOrUndefined(curretBlock)) {\n return;\n }\n if (this.viewer instanceof WebLayoutViewer) {\n curretBlock.containerWidget.height -= curretBlock.height;\n }\n if (bodyWidget instanceof HeaderFooterWidget) {\n bodyWidget.isEmpty = false;\n this.viewer.updateHeaderFooterClientAreaWithTop(bodyWidget.sectionFormat, bodyWidget.headerFooterType.indexOf('Header') !== -1, bodyWidget.page);\n curretBlock.containerWidget.height -= curretBlock.height;\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true, !shiftNextWidget);\n }\n else if (!isNullOrUndefined(bodyWidget.containerWidget) && bodyWidget.containerWidget instanceof FootNoteWidget) {\n this.viewer.updateClientArea(bodyWidget, bodyWidget.page, true);\n if (bodyWidget.containerWidget.footNoteType === 'Footnote') {\n this.isRelayoutFootnote = true;\n this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n //curretBlock.containerWidget.height -= curretBlock.height;\n this.viewer.clientActiveArea.y = curretBlock.containerWidget.containerWidget.y;\n }\n else {\n this.viewer.cutFromTop(bodyWidget.containerWidget.y);\n this.layoutfootNote(bodyWidget.containerWidget);\n return;\n }\n // curretBlock.containerWidget.height -= curretBlock.height;\n }\n else {\n if (!isNullOrUndefined(bodyWidget.page.footnoteWidget)) {\n if (bodyWidget.page.footnoteWidget.footNoteType === 'Footnote') {\n this.viewer.updateClientArea(bodyWidget, bodyWidget.page, true);\n }\n else {\n this.viewer.updateClientArea(bodyWidget, bodyWidget.page, true);\n }\n }\n else {\n this.viewer.updateClientArea(bodyWidget, bodyWidget.page, true);\n }\n // if (bodyWidget.page.footnoteWidget) {\n // this.viewer.clientActiveArea.height -= bodyWidget.page.footnoteWidget.height;\n // this.viewer.clientArea.height -= bodyWidget.page.footnoteWidget.height;\n // }\n }\n if (blockIndex > 0 || (curretBlock.bodyWidget.sectionFormat.breakCode === 'NoBreak' && curretBlock.bodyWidget.index !== 0 && curretBlock === bodyWidget.firstChild)) {\n curretBlock = curretBlock.combineWidget(this.viewer);\n var prevWidget = curretBlock.getSplitWidgets()[0].previousRenderedWidget;\n if (!isNullOrUndefined(prevWidget) && prevWidget.wrapTextAround && !isNullOrUndefined(prevWidget.getSplitWidgets()[0].previousRenderedWidget) && prevWidget.y < prevWidget.getSplitWidgets()[0].previousRenderedWidget.y) {\n prevWidget = prevWidget.getSplitWidgets()[0].previousRenderedWidget;\n }\n while (prevWidget instanceof BlockWidget && prevWidget.isFieldCodeBlock) {\n prevWidget = prevWidget.getSplitWidgets()[0].previousRenderedWidget;\n }\n if (!(isNullOrUndefined(prevWidget) || prevWidget instanceof ParagraphWidget) ||\n (prevWidget instanceof ParagraphWidget) && !prevWidget.isEndsWithPageBreak && !prevWidget.isEndsWithColumnBreak) {\n if (isNullOrUndefined(isSkipShifting) && curretBlock.containerWidget !== prevWidget.containerWidget) {\n /* eslint-disable-next-line max-len */\n var prevBodyWidget = curretBlock.containerWidget;\n var newBodyWidget = prevWidget.containerWidget;\n var footWidgets = this.getFootNoteWidgetsOf(curretBlock);\n this.moveFootNotesToPage(footWidgets, prevBodyWidget, newBodyWidget);\n if (curretBlock.bodyWidget.sectionFormat.breakCode !== 'NoBreak' || (curretBlock.bodyWidget.index === prevWidget.bodyWidget.index)) {\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n this.updateContainerWidget(curretBlock, newBodyWidget, prevWidget.indexInOwner + 1, false);\n }\n else if (curretBlock.bodyWidget.sectionIndex !== prevWidget.bodyWidget.sectionIndex && prevWidget.bodyWidget.sectionFormat.numberOfColumns > 1 && curretBlock.bodyWidget.page === prevWidget.bodyWidget.page) {\n var firstBody = this.getBodyWidget(prevWidget.bodyWidget, true);\n var height = this.getNextWidgetHeight(firstBody);\n this.viewer.clientActiveArea.height -= height - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = height;\n this.viewer.clientArea.y = this.viewer.clientActiveArea.y;\n this.viewer.clientArea.height = this.viewer.clientActiveArea.height;\n }\n else {\n this.viewer.updateClientArea(curretBlock.bodyWidget, curretBlock.bodyWidget.page, true);\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n }\n }\n else {\n if (prevWidget instanceof ParagraphWidget && prevWidget.height <= 0 && this.isMultiColumnDoc) {\n var prevPara = prevWidget;\n this.viewer.updateClientAreaForBlock(prevPara, true);\n this.layoutParagraph(prevPara, 0);\n this.viewer.updateClientArea(prevPara.bodyWidget, prevPara.bodyWidget.page, true);\n }\n this.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n }\n }\n else if (prevWidget instanceof ParagraphWidget && (prevWidget.isEndsWithPageBreak || prevWidget.isEndsWithColumnBreak) &&\n prevWidget.containerWidget === curretBlock.containerWidget) {\n this.moveBlocksToNextPage(prevWidget, false);\n }\n }\n var currentParagraph = void 0;\n curretBlock = curretBlock.combineWidget(this.viewer);\n if (curretBlock instanceof TableWidget) {\n this.clearTableWidget(curretBlock, true, true);\n curretBlock.isGridUpdated = false;\n currentParagraph = this.documentHelper.getFirstParagraphInFirstCell(curretBlock);\n }\n else {\n currentParagraph = curretBlock;\n }\n if ((this.viewer.owner.isDocumentLoaded) && this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateWholeListItems(currentParagraph);\n }\n this.viewer.updateClientAreaForBlock(curretBlock, true, undefined, false, true);\n this.isRelayout = true;\n this.documentHelper.layout.layoutBlock(curretBlock, 0);\n this.isRelayout = false;\n this.viewer.updateClientAreaForBlock(curretBlock, false);\n if (!isNullOrUndefined(bodyWidget.containerWidget) && bodyWidget.containerWidget instanceof FootNoteWidget) {\n if (bodyWidget.containerWidget.footNoteType === 'Footnote') {\n this.layoutfootNote(bodyWidget.containerWidget);\n }\n }\n var footnote = bodyWidget;\n if (bodyWidget.containerWidget == undefined && !(bodyWidget instanceof TextFrame) && footnote.page != undefined && footnote.page.footnoteWidget != undefined) {\n if (footnote.page.footnoteWidget.footNoteType === 'Footnote') {\n this.layoutfootNote(footnote.page.footnoteWidget);\n }\n }\n if (shiftNextWidget) {\n this.shiftNextWidgets(curretBlock);\n }\n else {\n this.layoutNextItemsBlock(curretBlock, this.viewer);\n }\n }\n else if (bodyWidget instanceof TableCellWidget) {\n this.reLayoutTable(bodyWidget.ownerTable);\n }\n }\n this.isRelayoutFootnote = false;\n };\n /**\n * @private\n */\n Layout.prototype.checkAndGetBlock = function (containerWidget, blockIndex) {\n if (containerWidget instanceof TextFrame) {\n return containerWidget.childWidgets[blockIndex];\n }\n else {\n var sectionIndex = containerWidget.indexInOwner;\n if (containerWidget.page.bodyWidgets.length <= 1) {\n while (containerWidget && containerWidget.indexInOwner === sectionIndex) {\n if (containerWidget.childWidgets.length > 0 && containerWidget.firstChild.index <= blockIndex &&\n containerWidget.lastChild.index >= blockIndex) {\n for (var i = 0; i < containerWidget.childWidgets.length; i++) {\n var block = containerWidget.childWidgets[i];\n if (block.index === blockIndex) {\n return block;\n }\n }\n }\n if (containerWidget instanceof BodyWidget) {\n containerWidget = containerWidget.nextRenderedWidget;\n }\n else {\n break;\n }\n }\n }\n else {\n while (containerWidget) {\n if (containerWidget.childWidgets.length > 0) {\n for (var i = 0; i < containerWidget.childWidgets.length; i++) {\n var block = containerWidget.childWidgets[i];\n if (block.index === blockIndex) {\n return block;\n }\n }\n }\n if (containerWidget instanceof BodyWidget) {\n containerWidget = containerWidget.nextRenderedWidget;\n }\n else {\n break;\n }\n }\n }\n }\n return undefined;\n };\n //#endregion\n //#region Table\n Layout.prototype.layoutTable = function (table, startIndex) {\n if (this.isFieldCode && !this.checkTableHasField(table) && !this.isRelayout) {\n table.isFieldCodeBlock = true;\n return table;\n }\n if (!isNullOrUndefined(table.previousWidget) && this.viewer.clientActiveArea.height < 0 && !table.wrapTextAround) {\n this.moveBlocksToNextPage(table.previousWidget, false);\n }\n table.isBidiTable = table.bidi;\n if (!table.isGridUpdated) {\n table.buildTableColumns();\n table.isGridUpdated = true;\n }\n if (this.documentHelper.compatibilityMode !== 'Word2013'\n && !table.isInsideTable\n && !isNullOrUndefined(table.firstChild.firstChild.leftMargin)) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n var tableView = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tableView);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var clientActiveAreaForTableWrap;\n var clientAreaForTableWrap;\n var wrapDiff = 0;\n if (table.wrapTextAround) {\n clientActiveAreaForTableWrap = this.viewer.clientActiveArea.clone();\n clientAreaForTableWrap = this.viewer.clientArea.clone();\n this.updateClientAreaForWrapTable(tableView, table, true, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n else if (!(table.containerWidget instanceof TextFrame)) {\n this.adjustClientAreaBasedOnTextWrapForTable(table, this.viewer.clientActiveArea);\n if (this.isWrapText) {\n wrapDiff = this.viewer.clientActiveArea.x - this.viewer.clientArea.x;\n this.isWrapText = false;\n table.x = this.viewer.clientActiveArea.x;\n }\n }\n if (table.childWidgets.length > 0) {\n var isHeader = table.childWidgets[0].rowFormat.isHeader;\n table.header = isHeader;\n table.continueHeader = isHeader;\n table.headerHeight = 0;\n }\n var row = table.childWidgets[startIndex];\n var index = tableView.length;\n while (row) {\n row = this.layoutRow(tableView, row);\n row = row.nextRow;\n }\n if (this.documentHelper.viewer instanceof PageLayoutViewer && table.wrapTextAround && (table.positioning.verticalAlignment === 'Bottom' || table.positioning.verticalAlignment === 'Center' || table.positioning.verticalAlignment === 'Outside')) {\n this.updateTableFloatPoints(table);\n this.updateChildLocationForTable(table.y, table);\n }\n this.updateWidgetsToPage(tableView, [], table, true);\n if (wrapDiff > 0) {\n this.viewer.clientArea.x = this.viewer.clientArea.x - wrapDiff;\n }\n if (table.wrapTextAround) {\n this.updateClientAreaForWrapTable(tableView, table, false, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n tableView[tableView.length - 1].isLayouted = true;\n tableView[tableView.length - 1].isFieldCodeBlock = false;\n if (this.documentHelper.compatibilityMode !== 'Word2013'\n && !table.isInsideTable\n && !table.wrapTextAround\n && !isNullOrUndefined(table.firstChild.firstChild.leftMargin)) {\n this.viewer.clientArea.x = this.viewer.clientArea.x + HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n return tableView[tableView.length - 1];\n };\n Layout.prototype.updateClientAreaForWrapTable = function (tables, table, beforeLayout, clientActiveAreaForTableWrap, clientAreaForTableWrap) {\n if (beforeLayout) {\n if (table.wrapTextAround) {\n this.updateTableFloatPoints(table);\n var clienactare = this.viewer.clientActiveArea.clone();\n var rect = this.adjustClientAreaBasedOnTextWrapForTable(table, this.viewer.clientActiveArea);\n if (clienactare.x !== rect.x) {\n table.x = this.viewer.clientActiveArea.x;\n }\n if (clienactare.y !== rect.y) {\n table.y = this.viewer.clientActiveArea.y;\n }\n }\n }\n else {\n if (table.wrapTextAround && table.bodyWidget) {\n if (tables.length == 1) {\n if (!isNullOrUndefined(table.previousWidget) || table.isInHeaderFooter || table.isInsideTable) {\n var clientActiveArea = clientActiveAreaForTableWrap.clone();\n var clientArea = clientAreaForTableWrap.clone();\n if (table.bodyWidget.lastChild !== tables[tables.length - 1]) {\n this.viewer.clientActiveArea = clientActiveArea;\n this.viewer.clientArea = clientArea;\n }\n if (!table.isLayouted && clientActiveArea.height < table.height && table.width >= clientActiveArea.width) {\n this.moveBlocksToNextPage(table.previousWidget, false);\n }\n }\n else {\n this.documentHelper.tableLefts.pop();\n this.viewer.updateClientArea(table.bodyWidget, table.bodyWidget.page);\n }\n if (table.bodyWidget.floatingElements.indexOf(table) === -1) {\n table.bodyWidget.floatingElements.push(table);\n }\n }\n else {\n if (!isNullOrUndefined(table.previousWidget) && !table.isLayouted && clientActiveAreaForTableWrap.height < table.height && table.width >= clientActiveAreaForTableWrap.width) {\n var splittedTable_1 = table;\n do {\n this.moveBlocksToNextPage(splittedTable_1.previousWidget, false);\n splittedTable_1 = splittedTable_1.nextSplitWidget;\n } while (splittedTable_1);\n }\n this.documentHelper.tableLefts.pop();\n this.viewer.updateClientArea(table.bodyWidget, table.bodyWidget.page);\n for (var z = 0; z < tables.length; z++) {\n var bodyWidget = tables[z].bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && bodyWidget.floatingElements.indexOf(tables[z]) === -1) {\n bodyWidget.floatingElements.push(tables[z]);\n }\n }\n var splittedTable = tables[tables.length - 1];\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + splittedTable.height + splittedTable.tableFormat.borders.bottom.lineWidth);\n }\n }\n }\n };\n Layout.prototype.addTableWidget = function (area, table, create) {\n var tableWidget = table[table.length - 1];\n if (create) {\n tableWidget = this.createTableWidget(tableWidget);\n table.push(tableWidget);\n }\n tableWidget.width = area.width;\n tableWidget.x = area.x;\n tableWidget.y = area.y;\n //Update the table height of tableWidget when cell spacing has been defined.\n if (tableWidget.tableFormat.cellSpacing > 0) {\n tableWidget.height = tableWidget.height + HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n if (!tableWidget.isBidiTable) {\n /* eslint-disable-next-line max-len */\n tableWidget.leftBorderWidth = HelperMethods.convertPointToPixel(this.getTableLeftBorder(tableWidget.tableFormat.borders).getLineWidth());\n /* eslint-disable-next-line max-len */\n tableWidget.rightBorderWidth = HelperMethods.convertPointToPixel(this.getTableRightBorder(tableWidget.tableFormat.borders).getLineWidth());\n }\n else { // Right to left direction table.\n /* eslint-disable-next-line max-len */\n tableWidget.leftBorderWidth = HelperMethods.convertPointToPixel(this.getTableRightBorder(tableWidget.tableFormat.borders).getLineWidth());\n /* eslint-disable-next-line max-len */\n tableWidget.rightBorderWidth = HelperMethods.convertPointToPixel(this.getTableLeftBorder(tableWidget.tableFormat.borders).getLineWidth());\n }\n /* eslint-disable-next-line max-len */\n tableWidget.topBorderWidth = HelperMethods.convertPointToPixel(this.getTableTopBorder(tableWidget.tableFormat.borders).getLineWidth());\n /* eslint-disable-next-line max-len */\n tableWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(this.getTableBottomBorder(tableWidget.tableFormat.borders).getLineWidth());\n tableWidget.x += tableWidget.leftBorderWidth;\n tableWidget.y += tableWidget.topBorderWidth;\n tableWidget.width -= tableWidget.leftBorderWidth;\n tableWidget.width -= tableWidget.rightBorderWidth;\n tableWidget.height += tableWidget.bottomBorderWidth;\n }\n return tableWidget;\n };\n Layout.prototype.updateWidgetsToPage = function (tables, rows, table, rearrangeRow, endRowWidget) {\n var viewer = this.viewer;\n var tableWidget = tables[tables.length - 1];\n if (!table.isInsideTable) {\n for (var i = 0; i < tables.length; i++) {\n this.updateHeightForTableWidget(tables, rows, tables[i], endRowWidget);\n }\n if (tableWidget.childWidgets.length > 0 && tableWidget.y !== tableWidget.childWidgets[0].y) {\n tableWidget.y = tableWidget.childWidgets[0].y;\n }\n // Need to update on this further\n //Adds the table widget to owner cell widget.\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).childWidgets.push(tableWidget);\n // tableWidget.containerWidget = viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as BodyWidget;\n // (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height = (viewer.renderedElements.get(table.associatedCell)[viewer.renderedElements.get(table.associatedCell).length - 1] as TableCellWidget).height + tableWidget.height;\n }\n // Shift the widgets for Right to left directed table.\n if (table.isBidiTable && rearrangeRow) {\n for (var i = 0; i < tables.length; i++) {\n var layoutedTable = tables[i];\n for (var j = 0; j < layoutedTable.childWidgets.length; j++) {\n var layoutedRow = layoutedTable.childWidgets[j];\n layoutedRow.shiftWidgetForRtlTable();\n }\n }\n }\n if (table.tableFormat.cellSpacing > 0) {\n /* eslint-disable-next-line max-len */\n if (tableWidget.y + tableWidget.height + HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) > viewer.clientArea.bottom && viewer instanceof WebLayoutViewer) {\n //update the table height when split to next page. Which is equivalent Ms Word Behaviour.\n //In Ms Word if the Table Split to next page the bottom spacing of the table will be half of the current spacing.\n //And the Remaining space will be used in next page top of the table.\n tableWidget.height = tableWidget.height - HelperMethods.convertPointToPixel(table.tableFormat.cellSpacing) / 2;\n }\n //Update the current Y position of current clientactivearea.\n viewer.cutFromTop(tableWidget.y + tableWidget.height);\n }\n if (this.viewer instanceof WebLayoutViewer) {\n table.containerWidget.height += table.height;\n }\n if (table.bodyWidget instanceof HeaderFooterWidget && !table.wrapTextAround) {\n table.containerWidget.height += table.height;\n if (this.viewer.owner.enableHeaderAndFooter && table.bodyWidget.headerFooterType.indexOf('Footer') !== -1) {\n this.shiftFooterChildLocation(table.bodyWidget, this.viewer);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.updateHeightForTableWidget = function (tables, rows, tableWidget, endRowWidget) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var rowWidget = tableWidget.childWidgets[i];\n if (rowWidget === endRowWidget) {\n break;\n }\n this.updateHeightForRowWidget(this.viewer, true, tables, rows, rowWidget, false, endRowWidget);\n }\n };\n //#endregion\n //#region Row\n Layout.prototype.layoutRow = function (tableWidget, row, isRowLayout) {\n var isNestedTable = row.ownerTable.isInsideTable;\n if (!isNestedTable) {\n this.updateExistingFootnoteHeight(row);\n }\n var viewer = this.viewer;\n var rowWidgets = [row];\n this.addTableRowWidget(viewer.clientActiveArea, rowWidgets);\n viewer.updateClientAreaForRow(row, true);\n var topMargin = this.getMaxTopCellMargin(row);\n var bottomMargin = this.getMaxBottomCellMargin(row);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n this.layoutCell(cell, topMargin + row.topBorderWidth, bottomMargin + row.bottomBorderWidth);\n }\n viewer.updateClientAreaForRow(row, false);\n var rows = [row];\n if (!isRowLayout) {\n this.updateWidgetsToTable(tableWidget, rows, row, false);\n }\n if (!isNestedTable) {\n this.layoutedFootnoteElement = [];\n }\n return rows[rows.length - 1];\n };\n Layout.prototype.updateExistingFootnoteHeight = function (row) {\n this.layoutedFootnoteElement = [];\n if (!isNullOrUndefined(row.bodyWidget.page.footnoteWidget) && row.bodyWidget.page.footnoteWidget.bodyWidgets.length !== 0) {\n this.existFootnoteHeight = row.bodyWidget.page.footnoteWidget.height;\n }\n else {\n this.existFootnoteHeight = 0;\n }\n };\n Layout.prototype.isIntersecting = function (startPosition, endPosition, adjacentStartPosition, adjacentEndPosition) {\n return ((HelperMethods.round(adjacentStartPosition, 2) <= HelperMethods.round(startPosition, 2) || HelperMethods.round(adjacentStartPosition, 2) < HelperMethods.round(endPosition, 2))\n && HelperMethods.round(adjacentEndPosition, 2) > HelperMethods.round(startPosition, 2));\n };\n Layout.prototype.getAdjacentRowCell = function (cell, cellStartPos, cellEndPos, rowIndex) {\n var adjCells = [];\n var columnLength = cell.ownerTable.tableHolder.columns.length;\n var adjRow = cell.ownerTable.childWidgets[rowIndex];\n if (isNullOrUndefined(adjRow)) {\n return adjCells;\n }\n var prevCellEndPos = 0;\n var prevCellEndIndex = 0;\n var colSpan = cell.cellFormat.columnSpan;\n var columnIndex = cell.columnIndex;\n if (adjRow.rowFormat.gridBefore > 0) {\n if (adjRow.rowFormat.gridBefore > columnIndex + colSpan) {\n //When previous rows Grid before occupies more than cell width, returns empty collection.\n return adjCells;\n }\n prevCellEndPos = adjRow.rowFormat.beforeWidth;\n prevCellEndIndex = adjRow.rowFormat.gridBefore;\n }\n for (var i = 0; i < adjRow.childWidgets.length; i++) {\n var adjCell = adjRow.childWidgets[i];\n var adjCellStartPos = adjCell.x - adjCell.margin.left;\n var adjCellEndPos = adjCell.x + adjCell.width + adjCell.margin.right;\n var adjCellEndIndex = adjCell.columnIndex + adjCell.cellFormat.columnSpan;\n if (i == adjRow.childWidgets.length - 1 ||\n (HelperMethods.round(adjCellStartPos, 2) > HelperMethods.round(prevCellEndPos, 2)\n && HelperMethods.round(adjCellStartPos, 2) > HelperMethods.round(cellStartPos, 2))) {\n if (i == adjRow.childWidgets.length - 1 && adjRow.rowFormat.gridAfter > 0\n && adjCellEndIndex + adjRow.rowFormat.gridAfter === columnLength) {\n //Only grid after present after this adjacent cell, no need to continue next.\n return adjCells;\n }\n //When there is difference in adjacent cell start position and previous cell end position, there is an vertical merge continued cell.\n //Iterates with the previous end cell column index till adjacent cell's column index to retrieve the vertical merge start cell in that region.\n if (this.isIntersecting(cellStartPos, cellEndPos, prevCellEndPos, adjCellStartPos)) {\n while (colSpan > 0) {\n var prevRowAdjCell = adjRow.getVerticalMergeStartCell(columnIndex, colSpan);\n var prevRowAdjCellEndPos = 0;\n if (!isNullOrUndefined(prevRowAdjCell)) {\n var adjCellColumnSpan = prevRowAdjCell.cellFormat.columnSpan;\n adjCells.push(prevRowAdjCell);\n prevRowAdjCellEndPos = prevRowAdjCell.x + prevRowAdjCell.width + prevRowAdjCell.margin.right;\n cellStartPos = prevRowAdjCellEndPos;\n prevCellEndIndex = prevRowAdjCell.columnIndex + adjCellColumnSpan;\n colSpan -= prevCellEndIndex - columnIndex;\n columnIndex = prevCellEndIndex;\n if (HelperMethods.round(prevRowAdjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n break;\n }\n }\n else {\n break;\n }\n }\n }\n }\n if (this.isIntersecting(cellStartPos, cellEndPos, adjCellStartPos, adjCellEndPos)) {\n adjCells.push(adjCell);\n cellStartPos = adjCellEndPos;\n colSpan -= adjCellEndIndex - columnIndex;\n columnIndex = adjCellEndIndex;\n }\n if (HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n //Once Adjacent cell end position reaches the current cell end position, no need to iterate next.\n break;\n }\n prevCellEndPos = adjCellEndPos;\n prevCellEndIndex = adjCellEndIndex;\n }\n return adjCells;\n };\n Layout.prototype.addTableRowWidget = function (area, row) {\n var rowWidget = row[row.length - 1];\n if ((rowWidget.rowFormat.beforeWidth !== 0 || rowWidget.rowFormat.gridBeforeWidth !== 0) && ((this.documentHelper.alignTablesRowByRow) ? rowWidget.ownerTable.tableFormat.tableAlignment === 'Left' : true)) {\n rowWidget.x += (rowWidget.rowFormat.beforeWidth !== 0) ? rowWidget.rowFormat.beforeWidth : rowWidget.rowFormat.gridBeforeWidth;\n }\n else {\n rowWidget.x = area.x;\n }\n rowWidget.y = area.y;\n rowWidget.width = area.width;\n var borderWidth = 0;\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat)\n && rowWidget.ownerTable.tableFormat.cellSpacing > 0) {\n rowWidget.height = rowWidget.height + HelperMethods.convertPointToPixel(rowWidget.ownerTable.tableFormat.cellSpacing);\n //Update the table height with the border width to layout the border when the cell spacing is defined..\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n if (!isNullOrUndefined(rowWidget.childWidgets[j].cellFormat)\n && !isNullOrUndefined(rowWidget.childWidgets[j].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var width = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[j]).getLineWidth();\n if (width > borderWidth) {\n borderWidth = width;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n if (rowWidget.index > 0 && !isNullOrUndefined(rowWidget.previousWidget)) {\n var prevRow = rowWidget.previousWidget;\n borderWidth = 0;\n for (var i = 0; i < prevRow.childWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(prevRow.childWidgets[i].cellFormat) && !isNullOrUndefined(prevRow.childWidgets[i].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var value = TableCellWidget.getCellBottomBorder(prevRow.childWidgets[i]).getLineWidth();\n if (value > borderWidth) {\n borderWidth = value;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n }\n if (!isNullOrUndefined(rowWidget.childWidgets)) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var topBorderWidth = TableCellWidget.getCellTopBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (topBorderWidth > borderWidth) {\n borderWidth = topBorderWidth;\n }\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.topBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n //Update the table height of tableWidget when cell spacing has been defined.\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(rowWidget.ownerTable) && !isNullOrUndefined(rowWidget.ownerTable.tableFormat) && rowWidget.ownerTable.tableFormat.cellSpacing <= 0 && rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n // Update the bottom width for last row .\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(rowWidget.childWidgets[i].cellFormat) && !isNullOrUndefined(rowWidget.childWidgets[i].cellFormat.borders)) {\n /* eslint-disable-next-line max-len */\n var bottomBorderWidth = TableCellWidget.getCellBottomBorder(rowWidget.childWidgets[i]).getLineWidth();\n if (bottomBorderWidth > borderWidth) {\n borderWidth = bottomBorderWidth;\n }\n }\n }\n //Maximum border width is calculated and hold it in a variable to add with the padding of the cells.\n rowWidget.bottomBorderWidth = HelperMethods.convertPointToPixel(borderWidth);\n }\n //tableRowWidget.ownerWidget = owner;\n return rowWidget;\n };\n Layout.prototype.getMaxTopCellMargin = function (row) {\n if (isNullOrUndefined(row.childWidgets)) {\n return 0;\n }\n var value = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var topMargin = 0;\n if (cell.cellFormat.hasValue('topMargin')) {\n topMargin = HelperMethods.convertPointToPixel(cell.cellFormat.topMargin);\n }\n else if (row.rowFormat.hasValue('topMargin')) {\n topMargin = HelperMethods.convertPointToPixel(row.rowFormat.topMargin);\n }\n else {\n topMargin = HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.topMargin);\n }\n if (topMargin > value) {\n value = topMargin;\n }\n }\n return value;\n };\n Layout.prototype.getMaxBottomCellMargin = function (row) {\n if (isNullOrUndefined(row.childWidgets)) {\n return 0;\n }\n var value = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var bottomMargin = 0;\n if (cell.cellFormat.hasValue('bottomMargin')) {\n bottomMargin = HelperMethods.convertPointToPixel(cell.cellFormat.bottomMargin);\n }\n else if (row.rowFormat.hasValue('bottomMargin')) {\n bottomMargin = HelperMethods.convertPointToPixel(row.rowFormat.bottomMargin);\n }\n else {\n bottomMargin = HelperMethods.convertPointToPixel(row.ownerTable.tableFormat.bottomMargin);\n }\n if (bottomMargin > value) {\n value = bottomMargin;\n }\n }\n return value;\n };\n //#endregion Row\n //#region cell\n Layout.prototype.layoutCell = function (cell, maxCellMarginTop, maxCellMarginBottom) {\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n this.updateTopBorders(cell);\n viewer.updateClientAreaForCell(cell, true);\n if (cell.childWidgets.length === 0) {\n var paragraphWidget = new ParagraphWidget();\n paragraphWidget.characterFormat = new WCharacterFormat();\n paragraphWidget.paragraphFormat = new WParagraphFormat();\n paragraphWidget.index = 0;\n var lineWidget = new LineWidget(paragraphWidget);\n paragraphWidget.childWidgets.push(lineWidget);\n cell.childWidgets.push(paragraphWidget);\n paragraphWidget.paragraphFormat.borders = new WBorders();\n }\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n block.containerWidget = cell;\n this.layoutBlock(block, 0);\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n };\n Layout.prototype.isInsertTable = function () {\n if (this.documentHelper.owner.editorHistoryModule && this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo && this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'InsertTable')\n return true;\n else\n return false;\n };\n Layout.prototype.updateTopBorders = function (cell) {\n cell.updatedTopBorders = [];\n if (cell.ownerTable.tableFormat.cellSpacing === 0) {\n var cellTopBorder = cell.cellFormat.borders.top;\n if (!cellTopBorder.isBorderDefined || (cellTopBorder.isBorderDefined\n && cellTopBorder.lineStyle === 'None' && cellTopBorder.lineWidth === 0 &&\n cellTopBorder.hasValue('color'))) {\n cellTopBorder = cell.ownerRow.rowFormat.borders.horizontal;\n }\n if (!cellTopBorder.isBorderDefined) {\n cellTopBorder = cell.ownerRow.ownerTable.tableFormat.borders.horizontal;\n }\n var cellStartPos = cell.x - cell.margin.left;\n var cellEndPos = cell.x + cell.width + cell.margin.right;\n var adjCells = this.getAdjacentRowCell(cell, cellStartPos, cellEndPos, cell.ownerRow.indexInOwner - 1);\n for (var j = 0; j < adjCells.length; j++) {\n var adjCell = adjCells[j];\n var prevCellBottomBorder = adjCell.cellFormat.borders.bottom;\n if (!prevCellBottomBorder.isBorderDefined || (prevCellBottomBorder.isBorderDefined\n && prevCellBottomBorder.lineStyle === 'None' && prevCellBottomBorder.lineWidth === 0 &&\n prevCellBottomBorder.hasValue('color'))) {\n prevCellBottomBorder = adjCell.ownerRow.rowFormat.borders.horizontal;\n }\n if (!prevCellBottomBorder.isBorderDefined) {\n prevCellBottomBorder = adjCell.ownerRow.ownerTable.tableFormat.borders.horizontal;\n }\n var border = void 0;\n if (cellTopBorder.lineStyle === 'None' || cellTopBorder.lineStyle === 'Cleared') {\n border = prevCellBottomBorder;\n }\n else if (prevCellBottomBorder.lineStyle === 'Cleared' || prevCellBottomBorder.lineStyle === 'None') {\n border = cellTopBorder;\n }\n else {\n border = cell.getBorderBasedOnPriority(cellTopBorder, prevCellBottomBorder);\n }\n var adjCellStartPos = adjCell.x - adjCell.margin.left;\n var adjCellEndPos = adjCell.x + adjCell.width + adjCell.margin.right;\n if (j === 0 && cellStartPos < adjCellStartPos) {\n cell.updatedTopBorders.push({ border: cellTopBorder, width: (adjCellStartPos - cellStartPos) });\n }\n if (border) {\n var width = 0;\n /* eslint-disable-next-line max-len */\n if (HelperMethods.round(adjCellEndPos, 2) === HelperMethods.round(cellEndPos, 2) && HelperMethods.round(adjCellStartPos, 2) === HelperMethods.round(cellStartPos, 2)) {\n width = cellEndPos - cellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) >= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n width = cellEndPos - adjCellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) >= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) <= HelperMethods.round(cellEndPos, 2)) {\n width = adjCellEndPos - adjCellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) <= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) <= HelperMethods.round(cellEndPos, 2)) {\n width = adjCellEndPos - cellStartPos;\n /* eslint-disable-next-line max-len */\n }\n else if (HelperMethods.round(adjCellStartPos, 2) <= HelperMethods.round(cellStartPos, 2) && HelperMethods.round(adjCellEndPos, 2) >= HelperMethods.round(cellEndPos, 2)) {\n width = cellEndPos - cellStartPos;\n }\n else {\n width = cellEndPos - cellStartPos;\n }\n if (width < 0) {\n width = 0;\n }\n cell.updatedTopBorders.push({ border: border, width: width });\n }\n if (j === (adjCells.length - 1) && cellEndPos > adjCellEndPos) {\n cell.updatedTopBorders.push({ border: cellTopBorder, width: (cellEndPos - adjCellEndPos) });\n }\n }\n }\n };\n //endregion cell\n //#region Shifting\n Layout.prototype.shiftLayoutedItems = function (reLayout, isMultiColumnShift) {\n if (isNullOrUndefined(this.documentHelper.blockToShift) || isNullOrUndefined(this.documentHelper.blockToShift.containerWidget)) {\n this.documentHelper.blockToShift = undefined;\n this.documentHelper.removeEmptyPages();\n this.checkAndShiftEndnote();\n return;\n }\n var block = this.documentHelper.blockToShift;\n var isColumnBreak = this.getColumnBreak(block.bodyWidget);\n if (!isColumnBreak && this.viewer instanceof PageLayoutViewer && !this.isMultiColumnSplit && block === block.bodyWidget.firstChild && !isNullOrUndefined(block.bodyWidget.previousRenderedWidget) && block.bodyWidget.sectionIndex !== block.bodyWidget.previousRenderedWidget.sectionIndex && block.bodyWidget.previousRenderedWidget.sectionFormat.columns.length > 1) {\n var previousBodyWidget = block.bodyWidget.previousRenderedWidget;\n var lastbody = this.getBodyWidget(previousBodyWidget, false);\n if (!isNullOrUndefined(lastbody.nextRenderedWidget) && lastbody.page === lastbody.nextRenderedWidget.page) {\n this.splitBodyWidgetBasedOnColumn(previousBodyWidget);\n }\n }\n var isFirstBlock = false;\n var lastPage = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n var lastSection = lastPage.bodyWidgets[lastPage.bodyWidgets.length - 1];\n if ((!isColumnBreak || (reLayout && this.isSectionEndsWithColumnBreak(block.bodyWidget))) && this.viewer instanceof PageLayoutViewer && !this.isMultiColumnSplit && block.bodyWidget.sectionFormat.columns.length > 1) {\n // let lastbody: BodyWidget = this.getBodyWidget(block.bodyWidget, false);\n // if (((!isNullOrUndefined(lastbody.nextRenderedWidget) && lastbody.page === (lastbody.nextRenderedWidget as BodyWidget).page) && !(block.bodyWidget.firstChild === block && isNullOrUndefined(block.bodyWidget.previousWidget) && this.viewer.clientActiveArea.height > (block.firstChild as Widget).height))|| (this.documentHelper.endnoteCollection.length > 0 && lastSection === lastbody)) {\n if (block.bodyWidget.columnIndex === 0 && block === block.bodyWidget.firstChild && !isNullOrUndefined(block.previousRenderedWidget) && block.bodyWidget.page === block.previousRenderedWidget.bodyWidget.page) {\n block.bodyWidget.y = this.viewer.clientActiveArea.y;\n }\n isFirstBlock = block === block.bodyWidget.firstChild;\n this.reLayoutMultiColumn(block.bodyWidget, isFirstBlock, block.index);\n if (isNullOrUndefined(this.documentHelper.blockToShift)) {\n return;\n }\n block = this.documentHelper.blockToShift;\n // }\n }\n var sectionIndex = block.bodyWidget.index;\n this.reLayoutOrShiftWidgets(block, this.viewer);\n var updateNextBlockList = true;\n // If flow layout, then all sections are in single page. Hence need to update till last block of last section.\n // Todo: For page layout and section break continuous, need to handle the same.\n var splittedWidget = block.getSplitWidgets();\n var nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n while (nextBlock instanceof BlockWidget && (nextBlock.bodyWidget.index === sectionIndex || (nextBlock.bodyWidget.sectionFormat.breakCode === 'NoBreak' && block.bodyWidget.sectionFormat.pageWidth === nextBlock.bodyWidget.sectionFormat.pageWidth && block.bodyWidget.sectionFormat.pageHeight === nextBlock.bodyWidget.sectionFormat.pageHeight))) {\n if (isMultiColumnShift && nextBlock.bodyWidget.sectionFormat.columns.length === 0) {\n return;\n }\n isColumnBreak = this.getColumnBreak(nextBlock.bodyWidget);\n if ((!isColumnBreak || (reLayout && this.isSectionEndsWithColumnBreak(nextBlock.bodyWidget))) && this.viewer instanceof PageLayoutViewer && !this.isMultiColumnSplit && nextBlock.bodyWidget.sectionFormat.columns.length > 1) {\n // let lastbody: BodyWidget = this.getBodyWidget(nextBlock.bodyWidget, false);\n // if (((!isNullOrUndefined(lastbody.nextRenderedWidget) && lastbody.page === (lastbody.nextRenderedWidget as BodyWidget).page) && !(nextBlock.bodyWidget.firstChild === nextBlock && isNullOrUndefined(nextBlock.bodyWidget.previousWidget) && this.viewer.clientActiveArea.height > (nextBlock.firstChild as Widget).height))|| (this.documentHelper.endnoteCollection.length > 0 && lastSection === lastbody)) {\n if (nextBlock.bodyWidget.columnIndex === 0 && nextBlock === nextBlock.bodyWidget.firstChild && !isNullOrUndefined(nextBlock.previousRenderedWidget) && nextBlock.bodyWidget.page === nextBlock.previousRenderedWidget.bodyWidget.page) {\n nextBlock.bodyWidget.y = this.viewer.clientActiveArea.y;\n }\n isFirstBlock = nextBlock === nextBlock.bodyWidget.firstChild;\n this.reLayoutMultiColumn(nextBlock.bodyWidget, isFirstBlock, nextBlock.index);\n if (isNullOrUndefined(this.documentHelper.blockToShift)) {\n return;\n }\n nextBlock = this.documentHelper.blockToShift;\n // }\n }\n var currentWidget = undefined;\n var blocks = block.getSplitWidgets();\n currentWidget = blocks[blocks.length - 1];\n block = nextBlock;\n updateNextBlockList = false;\n var nextWidget = undefined;\n blocks = block.getSplitWidgets();\n if (block instanceof ParagraphWidget) {\n nextWidget = blocks[0];\n }\n else {\n if (block instanceof TableWidget) {\n nextWidget = blocks[0];\n }\n }\n if (!this.documentHelper.owner.editorModule.isFootnoteElementRemoved && currentWidget.containerWidget === nextWidget.containerWidget\n && (HelperMethods.round(nextWidget.y, 2) === HelperMethods.round(this.viewer.clientActiveArea.y, 2)) &&\n isNullOrUndefined(nextWidget.nextWidget)) {\n break;\n }\n if (!isNullOrUndefined(currentWidget.floatingElements)) {\n //this.shiftLayoutFloatingItems(currentWidget as ParagraphWidget);\n }\n updateNextBlockList = true;\n // Here, we have added this condition to skip the non-layouted blocks during relayouting.\n if (!block.isFieldCodeBlock) {\n this.reLayoutOrShiftWidgets(block, this.viewer);\n }\n if (this.keepWithNext) {\n block = this.documentHelper.blockToShift;\n this.keepWithNext = false;\n }\n if (!this.isMultiColumnSplit && isColumnBreak && block.bodyWidget.sectionFormat.numberOfColumns > 1 && block.bodyWidget.nextWidget && block.nextRenderedWidget && block.bodyWidget.index !== block.nextRenderedWidget.bodyWidget.index) {\n var clientY = this.viewer.clientActiveArea.y;\n var clientHeight = this.viewer.clientActiveArea.height;\n this.viewer.updateClientArea(block.bodyWidget.nextWidget, block.bodyWidget.nextWidget.page);\n this.viewer.clientActiveArea.height = clientHeight;\n this.viewer.clientActiveArea.y = clientY;\n }\n if (this.isMultiColumnSplit && block.bodyWidget.sectionFormat.numberOfColumns > 1 && block === block.bodyWidget.lastChild && !isNullOrUndefined(block.bodyWidget.nextRenderedWidget) && block.bodyWidget.sectionIndex !== block.bodyWidget.nextRenderedWidget.sectionIndex && block.bodyWidget.page === block.bodyWidget.nextRenderedWidget.page) {\n return;\n }\n splittedWidget = block.getSplitWidgets();\n nextBlock = splittedWidget[splittedWidget.length - 1].nextRenderedWidget;\n }\n if (this.viewer.owner.editorModule) {\n this.viewer.owner.editorModule.updateListItemsTillEnd(block, updateNextBlockList);\n }\n this.documentHelper.blockToShift = undefined;\n var viewer = this.viewer;\n if (viewer.owner.editorModule.isFootnoteElementRemoved) {\n var lastPage_1 = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n var lastChild = lastPage_1.bodyWidgets[lastPage_1.bodyWidgets.length - 1];\n var endNote = lastPage_1.endnoteWidget;\n if (!isNullOrUndefined(endNote)) {\n var clientArea = this.viewer.clientArea.clone();\n var clientActiveArea = this.viewer.clientActiveArea.clone();\n var lastPageLastPara = lastChild.childWidgets[lastChild.childWidgets.length - 1];\n var y = lastPageLastPara.y + lastPageLastPara.height;\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.bottom - y;\n this.viewer.clientActiveArea.x = this.viewer.clientArea.x;\n this.viewer.clientActiveArea.width = this.viewer.clientArea.width;\n this.viewer.clientActiveArea.y = y;\n this.layoutfootNote(endNote);\n this.viewer.clientArea = clientArea;\n this.viewer.clientActiveArea = clientActiveArea;\n }\n }\n // if (viewer instanceof PageLayoutViewer) {\n this.documentHelper.removeEmptyPages();\n this.updateFieldElements(reLayout);\n var firstPage = this.documentHelper.pages[0];\n if (firstPage.bodyWidgets[0].sectionIndex > 0) {\n var page = firstPage;\n do {\n this.documentHelper.layout.layoutHeaderFooter(page.bodyWidgets[0], this.viewer, page);\n page = page.nextPage;\n } while (page);\n while (firstPage.bodyWidgets[0].sectionIndex > 0) {\n this.documentHelper.owner.editorModule.updateSectionIndex(undefined, firstPage.bodyWidgets[0], false);\n }\n }\n if (((!this.documentHelper.owner.enableLockAndEdit && !this.documentHelper.owner.enableHeaderAndFooter) || !reLayout) && !this.isMultiColumnSplit) {\n viewer.updateScrollBars();\n }\n if (!(block.bodyWidget instanceof FootNoteWidget) && !this.isRelayoutFootnote) {\n if (block.bodyWidget.page.endnoteWidget) {\n this.layoutfootNote(block.bodyWidget.page.endnoteWidget);\n }\n else if (this.isRelayoutEndnote) {\n var lastPage_2 = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n if (!isNullOrUndefined(lastPage_2) && !isNullOrUndefined(lastPage_2.endnoteWidget)) {\n var clientActiveArea = this.viewer.clientActiveArea.clone();\n var bodyWidget = this.getBodyWidget(lastPage_2.bodyWidgets[lastPage_2.bodyWidgets.length - 1], true);\n this.viewer.updateClientArea(bodyWidget, bodyWidget.page);\n var height = this.getNextWidgetHeight(bodyWidget);\n this.viewer.clientActiveArea.height -= height - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = height;\n this.layoutfootNote(lastPage_2.endnoteWidget);\n this.viewer.clientActiveArea = clientActiveArea;\n }\n this.isRelayoutEndnote = false;\n }\n }\n // }\n };\n Layout.prototype.isSectionEndsWithColumnBreak = function (section) {\n if (!isNullOrUndefined(section) && section.childWidgets.length > 0 && section.lastChild instanceof ParagraphWidget) {\n var paragraph = section.lastChild;\n return paragraph.isEndsWithColumnBreak;\n }\n return false;\n };\n Layout.prototype.checkAndShiftEndnote = function () {\n if (this.documentHelper.owner.selectionModule) {\n var endBlock = this.documentHelper.owner.selectionModule.end.paragraph;\n if (endBlock.isInsideTable) {\n endBlock = this.getParentTable(endBlock);\n }\n if (!endBlock.isInHeaderFooter && !(endBlock.bodyWidget.containerWidget instanceof FootNoteWidget) && isNullOrUndefined(endBlock.nextRenderedWidget)) {\n if (!(endBlock.bodyWidget instanceof FootNoteWidget) && !this.isRelayoutFootnote\n && endBlock.bodyWidget.page.endnoteWidget) {\n this.layoutfootNote(endBlock.bodyWidget.page.endnoteWidget);\n }\n }\n }\n };\n Layout.prototype.updateFieldElements = function (reLayout) {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n var fieldBegin = this.documentHelper.fields[i];\n if (this.viewer instanceof PageLayoutViewer || (this.viewer instanceof WebLayoutViewer && !(fieldBegin.line.paragraph.containerWidget instanceof TextFrame || fieldBegin.line.paragraph.bodyWidget instanceof HeaderFooterWidget))) {\n if (!isNullOrUndefined(this.documentHelper.selection)) {\n var fieldCode = this.documentHelper.selection.getFieldCode(fieldBegin);\n var regex = /^(?!.*\\bhyperlink\\b).*\\bpage\\b.*$/;\n if (!isNullOrUndefined(fieldCode) && (fieldCode.toLowerCase().match('numpages') || fieldCode.toLowerCase().match('sectionpages') || (regex.test(fieldCode.toLowerCase()) && reLayout)) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var textElement = fieldBegin.fieldSeparator.nextNode;\n if (!isNullOrUndefined(textElement)) {\n var prevPageNum = textElement.text;\n var paragraph = fieldBegin.line.paragraph;\n if (!isNullOrUndefined(paragraph.containerWidget) && !(paragraph.containerWidget instanceof HeaderFooterWidget) && paragraph.containerWidget.indexInOwner === -1) {\n continue;\n }\n if (!isNullOrUndefined(paragraph.bodyWidget) && !isNullOrUndefined(paragraph.bodyWidget.page) && paragraph.bodyWidget.page.index !== -1) {\n if (regex.test(fieldCode.toLowerCase())) {\n var index = paragraph.bodyWidget.page.index + 1;\n textElement.text = index.toString();\n }\n else {\n textElement.text = this.documentHelper.pages.length.toString();\n }\n if (prevPageNum !== textElement.text) {\n textElement.isWidthUpdated = false;\n var lineIndex = paragraph.childWidgets.indexOf(fieldBegin.line);\n var elementIndex = fieldBegin.line.children.indexOf(textElement);\n if (paragraph.isInsideTable) {\n this.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n else {\n this.reLayoutLine(paragraph, lineIndex, false, false, true);\n }\n }\n }\n }\n }\n }\n }\n }\n };\n Layout.prototype.reLayoutOrShiftWidgets = function (blockAdv, viewer) {\n var block = blockAdv;\n var isRealyoutList = false;\n // if (block instanceof ParagraphWidget) {\n // reLayoutItems = viewer.renderedElements.get(block as ParagraphWidget).length === 0;\n // } else {\n // reLayoutItems = viewer.renderedElements.get(block as TableWidget).length === 0;\n // }\n if (this.isNeedToRelayout(blockAdv.bodyWidget)) {\n if (!this.isMultiColumnSplit) {\n this.updateContainerForTable(block, viewer);\n }\n //Handle layouting the block.\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n this.clearTableWidget(block, true, true, true);\n }\n viewer.updateClientAreaForBlock(block, true);\n if (block.wrapTextAround) {\n block.isLayouted = false;\n }\n this.isRelayout = true;\n this.layoutBlock(block, 0);\n this.isRelayout = false;\n viewer.updateClientAreaForBlock(block, false);\n isRealyoutList = true;\n }\n else {\n //Handled to check client area and shift layouted widget.\n this.shiftWidgetsBlock(block, viewer);\n }\n var index = this.documentHelper.pages.indexOf(block.bodyWidget.page);\n if (index > 0 && block === block.bodyWidget.childWidgets[0] && block instanceof ParagraphWidget) {\n var val = block.bodyWidget.childWidgets[0].childWidgets[0].children;\n for (var i = 0; i < val.length; i++) {\n var element = val[i];\n if (element.margin.top > 0 && element.margin.top === this.getBeforeSpacing(element.paragraph)) {\n element.margin.top -= this.getBeforeSpacing(element.paragraph);\n }\n }\n }\n //Updates the list value of the rendered paragraph.\n if (this.viewer.owner.editorModule && !isRealyoutList) {\n this.viewer.owner.editorModule.updateRenderedListItems(block);\n }\n if (!this.isRelayoutFootnote && block.bodyWidget.page.footnoteWidget) {\n this.layoutfootNote(block.bodyWidget.page.footnoteWidget);\n }\n // }\n };\n Layout.prototype.isNeedToRelayout = function (bodyWidget) {\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatElement = bodyWidget.floatingElements[i];\n if (floatElement instanceof TableWidget || (floatElement instanceof ShapeBase &&\n (floatElement.textWrappingStyle === 'Square' || floatElement.textWrappingStyle === 'TopAndBottom'))) {\n return true;\n }\n }\n return false;\n };\n Layout.prototype.shiftWidgetsBlock = function (block, viewer) {\n if (block instanceof ParagraphWidget) {\n this.shiftWidgetsForPara(block, viewer);\n }\n else if (block instanceof TableWidget) {\n this.shiftWidgetsForTable(block, viewer);\n }\n };\n Layout.prototype.shiftWidgetsForPara = function (paragraph, viewer) {\n if (paragraph.height > (viewer.clientArea.height + viewer.clientArea.y) && !this.documentHelper.owner.enableHeaderAndFooter) {\n return;\n }\n var bodywid = paragraph.bodyWidget;\n var prevBodyObj = this.getBodyWidgetOfPreviousBlock(paragraph, 0);\n var prevBodyWidget = prevBodyObj.bodyWidget;\n var index = prevBodyObj.index;\n var prevWidget = undefined;\n var skipFootNoteHeight = false;\n var isSkip = true;\n for (var i = 0; i < paragraph.getSplitWidgets().length; i++) {\n var widget = paragraph.getSplitWidgets()[i];\n var firstBody = this.getBodyWidget(widget.bodyWidget, true);\n if (this.isMultiColumnSplit && widget !== paragraph) {\n continue;\n }\n if (isSkip && !isNullOrUndefined(prevWidget)) {\n var isPageBreak = prevWidget.lastChild ? prevWidget.lastChild.isEndsWithPageBreak : false;\n var isColumnBreak = prevWidget.lastChild ? prevWidget.lastChild.isEndsWithColumnBreak : false;\n this.shiftToPreviousWidget(widget, viewer, prevWidget, isPageBreak, isColumnBreak);\n this.updateFloatingElementPosition(prevWidget);\n if ((isNullOrUndefined(widget.childWidgets) || widget.childWidgets.length === 0) && !isPageBreak && !isColumnBreak) {\n i--;\n continue;\n }\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n if (isPageBreak && prevWidget !== widget.previousSplitWidget) {\n viewer.updateClientAreaByWidget(widget);\n }\n }\n prevWidget = undefined;\n }\n var footWidget = [];\n if (!skipFootNoteHeight) {\n footWidget = this.getFootNoteWidgetsOf(widget);\n }\n skipFootNoteHeight = false;\n //let isContainsFootnote: boolean = false;\n if (this.isFitInClientArea(widget, viewer, footWidget) || this.isMultiColumnSplit) {\n if (this.keepWithNext) {\n this.updateClientPositionForBlock(widget.containerWidget.firstChild, widget);\n this.keepWithNext = false;\n }\n //Check whether this widget is moved to previous container widget.\n prevWidget = widget;\n viewer.updateClientAreaForBlock(widget, true, undefined, false, true);\n if (widget.isEmpty() && !isNullOrUndefined(widget.paragraphFormat) &&\n (widget.paragraphFormat.textAlignment === 'Center' || widget.paragraphFormat.textAlignment === 'Right'\n || (widget.paragraphFormat.textAlignment === 'Justify' && widget.paragraphFormat.bidi))\n && widget.paragraphFormat.listFormat.listId === -1) {\n this.updateXPositionForEmptyParagraph(viewer.clientActiveArea, widget);\n }\n else {\n widget.x = viewer.clientActiveArea.x;\n }\n viewer.updateClientAreaForBlock(widget, false);\n widget.y = viewer.clientActiveArea.y;\n this.updateFloatingElementPosition(widget);\n viewer.cutFromTop(viewer.clientActiveArea.y + widget.height);\n //Moves the paragraph widget to previous body widget.\n if (!isNullOrUndefined(prevBodyWidget) && prevBodyWidget !== widget.containerWidget && !this.isMultiColumnSplit) {\n index++;\n if (!prevBodyWidget.lastChild.isEndsWithPageBreak && !prevBodyWidget.lastChild.isEndsWithColumnBreak) {\n this.updateContainerWidget(widget, prevBodyWidget, index, true, footWidget);\n }\n if (footWidget.length > 0) {\n if (prevBodyWidget.page.footnoteWidget) {\n for (var k = 0; k < footWidget.length; k++) {\n if (prevBodyWidget.page.footnoteWidget.bodyWidgets.indexOf(footWidget[k]) === -1 && widget.bodyWidget.page.index != footWidget[k].page.index) {\n prevBodyWidget.page.footnoteWidget.bodyWidgets.push(footWidget[k]);\n prevBodyWidget.page.footnoteWidget.height += footWidget[k].height;\n }\n }\n }\n }\n }\n else if (widget.containerWidget instanceof BodyWidget && widget.containerWidget.firstChild === widget && widget.previousRenderedWidget && widget.previousRenderedWidget instanceof ParagraphWidget && widget.previousRenderedWidget.containerWidget.sectionFormat.breakCode == 'NoBreak' && widget.containerWidget.page.index !== widget.previousRenderedWidget.containerWidget.page.index && widget.containerWidget.index !== widget.previousRenderedWidget.containerWidget.index) {\n var bodyWidget = widget.previousRenderedWidget.bodyWidget;\n var breakCode = bodyWidget.sectionFormat.breakCode;\n if (bodyWidget.sectionFormat.columns.length > 1) {\n bodyWidget = this.getBodyWidget(bodyWidget, true);\n }\n if (!isNullOrUndefined(bodyWidget.previousRenderedWidget) && bodyWidget.sectionFormat.breakCode === 'NoBreak'\n && bodyWidget.previousRenderedWidget.sectionFormat.breakCode == 'NewPage'\n && bodyWidget.page.index === bodyWidget.previousRenderedWidget.page.index) {\n breakCode = bodyWidget.previousRenderedWidget.sectionFormat.breakCode;\n }\n var bottom = HelperMethods.round((this.getNextWidgetHeight(bodyWidget) + widget.height), 2);\n // Bug 858530: Shift the widgets to previous container widget if the client height is not enough to place this widget.\n if (!widget.previousRenderedWidget.containerWidget.lastChild.isEndsWithPageBreak && !widget.previousRenderedWidget.containerWidget.lastChild.isEndsWithColumnBreak\n && bottom <= HelperMethods.round(this.viewer.clientActiveArea.bottom, 2) && breakCode === 'NoBreak') {\n var page = widget.previousRenderedWidget.bodyWidget.page;\n var nextPage = widget.containerWidget.page;\n for (var j = 0; j < nextPage.bodyWidgets.length; j++) {\n var nextBodyWidget = nextPage.bodyWidgets[j];\n nextPage.bodyWidgets.splice(nextPage.bodyWidgets.indexOf(nextBodyWidget), 1);\n page.bodyWidgets.splice(page.bodyWidgets.length, 0, nextBodyWidget);\n nextBodyWidget.page = page;\n j--;\n }\n widget.containerWidget.y = this.viewer.clientActiveArea.y;\n this.documentHelper.removeEmptyPages();\n }\n }\n if (!this.isInitialLoad && isSkip && widget.bodyWidget.sectionFormat.columns.length > 1 && widget === widget.bodyWidget.firstChild && (!isNullOrUndefined(firstBody.previousWidget)\n && firstBody.page === firstBody.previousWidget.page)) {\n this.viewer.updateClientArea(widget.bodyWidget, widget.bodyWidget.page);\n firstBody = this.getBodyWidget(firstBody.previousWidget, true);\n var height = this.getNextWidgetHeight(firstBody);\n widget.bodyWidget.y = height;\n this.viewer.clientActiveArea.height -= height - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = height;\n isSkip = false;\n i--;\n }\n if (((widget.isEndsWithPageBreak && !this.isPageBreakInsideField(widget)) || widget.isEndsWithColumnBreak) && this.viewer instanceof PageLayoutViewer) {\n var nextBodyWidget = this.createOrGetNextBodyWidget(prevBodyWidget, this.viewer);\n nextBodyWidget = this.moveBlocksToNextPage(widget, true);\n viewer.updateClientArea(nextBodyWidget, nextBodyWidget.page);\n }\n }\n else {\n var previousBlock = widget.previousRenderedWidget;\n var isPageBreak = false;\n var isColumnBreak = false;\n if (previousBlock instanceof ParagraphWidget && previousBlock.isEndsWithPageBreak &&\n this.viewer instanceof PageLayoutViewer) {\n isPageBreak = true;\n }\n if (previousBlock instanceof ParagraphWidget && previousBlock.isEndsWithColumnBreak &&\n this.viewer instanceof PageLayoutViewer) {\n isColumnBreak = true;\n }\n var isSplittedToNewPage = this.splitWidget(widget, viewer, prevBodyWidget, index + 1, isPageBreak, footWidget, isColumnBreak);\n this.updateFloatingElementPosition(widget);\n prevWidget = undefined;\n if (prevBodyWidget !== widget.containerWidget) {\n prevBodyWidget = widget.containerWidget;\n i--;\n //Paragraph moved to next page and client area get updated with footnote widget height.\n //So, skip considering footnote height.\n if (footWidget.length > 0) {\n skipFootNoteHeight = true;\n }\n }\n index = prevBodyWidget.childWidgets.indexOf(widget);\n if (isSplittedToNewPage) {\n prevBodyWidget = paragraph.getSplitWidgets()[i + 1].containerWidget;\n }\n }\n }\n this.skipUpdateContainerWidget = false;\n };\n Layout.prototype.updateFloatingElementPosition = function (widget) {\n if (widget.floatingElements.length > 0) {\n for (var k = 0; k < widget.floatingElements.length; k++) {\n var shape = widget.floatingElements[k];\n var topMargin = 0;\n if (shape instanceof ShapeElementBox && shape.textWrappingStyle === 'Inline') {\n var lineIndex = shape.line.indexInOwner;\n var lineHeight = 0;\n topMargin = HelperMethods.convertPointToPixel(shape.textFrame.marginTop);\n for (var k_1 = 0; k_1 < lineIndex; k_1++) {\n if (!isNullOrUndefined(widget.childWidgets[k_1])) {\n lineHeight += widget.childWidgets[k_1].height;\n }\n }\n shape.y = widget.y + lineHeight;\n }\n else {\n var position = this.getFloatingItemPoints(shape);\n shape.y = position.y;\n shape.x = position.x;\n }\n if (shape instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(shape.y + topMargin, shape, undefined, false, true);\n }\n }\n }\n };\n Layout.prototype.isPageBreakInsideField = function (widget) {\n var isPageBreakInsideField = false;\n var isFieldElement = false;\n var height = 0;\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var line = widget.childWidgets[i];\n height += line.height;\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n isFieldElement = true;\n }\n else if (element.fieldType === 2 || element.fieldType === 1) {\n isFieldElement = false;\n }\n }\n if (!isFieldElement && element.text === '\\f') {\n isPageBreakInsideField = false;\n }\n else {\n isPageBreakInsideField = true;\n }\n }\n }\n if (isPageBreakInsideField && widget.height === 0) {\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + height);\n }\n return isPageBreakInsideField;\n };\n /**\n * @private\n * Get the footnote of the block widget.\n *\n * @param {BlockWidget} widget BlockWidget instance.\n * @returns\n */\n Layout.prototype.getFootNotesOfBlock = function (widget, footnoteElements) {\n if (isNullOrUndefined(footnoteElements)) {\n footnoteElements = [];\n }\n if (widget.childWidgets.length > 0) {\n for (var j = 0; j < this.documentHelper.footnoteCollection.length; j++) {\n if (this.documentHelper.footnoteCollection[j].line.paragraph === widget) {\n //isContainsFootnote = true;\n footnoteElements.push(this.documentHelper.footnoteCollection[j]);\n }\n }\n }\n return footnoteElements;\n };\n Layout.prototype.getFootNotesWidgetsInLine = function (line) {\n var footnoteElements = [];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof FootnoteElementBox) {\n footnoteElements.push(element);\n }\n }\n return this.getFootNoteWidgetsBy(line.paragraph, footnoteElements);\n };\n Layout.prototype.getFootNoteWidgetsBy = function (widget, footnoteElements) {\n var footWidgets = [];\n if (widget.bodyWidget.page.footnoteWidget) {\n for (var i = 0; i < widget.bodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.bodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.bodyWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n if (footWidgets.length === 0 && (!isNullOrUndefined(widget.previousRenderedWidget) && widget.previousRenderedWidget.bodyWidget.page.footnoteWidget)) {\n for (var i = 0; i < widget.previousRenderedWidget.bodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.previousRenderedWidget.bodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.previousRenderedWidget.bodyWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n else if (!isNullOrUndefined(widget.bodyWidget.previousRenderedWidget) && widget.bodyWidget.previousRenderedWidget.page.footnoteWidget) {\n for (var i = 0; i < widget.bodyWidget.previousRenderedWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.bodyWidget.previousRenderedWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.bodyWidget.previousRenderedWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n else if (!isNullOrUndefined(widget.bodyWidget.nextRenderedWidget) && widget.bodyWidget.nextRenderedWidget.page.footnoteWidget) {\n for (var i = 0; i < widget.bodyWidget.nextRenderedWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < footnoteElements.length; j++) {\n if ((widget.bodyWidget.nextRenderedWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnoteElements[j]) {\n footWidgets.push(widget.bodyWidget.nextRenderedWidget.page.footnoteWidget.bodyWidgets[i]);\n }\n }\n }\n }\n return footWidgets;\n };\n /**\n * @param widget\n * @private\n */\n Layout.prototype.getFootNoteWidgetsOf = function (widget, isShifting) {\n var footnoteWidgets = [];\n var footnoteElements = [];\n if (widget instanceof TableWidget) {\n for (var k_2 = 0; k_2 < widget.childWidgets.length; k_2++) {\n var row = widget.childWidgets[k_2];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n for (var x = 0; x < cell.childWidgets.length; x++) {\n var block = cell.childWidgets[x];\n footnoteElements = this.getFootNotesOfBlock(block, footnoteElements);\n var blockfootnoteWidgets = this.getFootNoteWidgetsBy(block, footnoteElements);\n for (var f = 0; f < blockfootnoteWidgets.length; f++) {\n if (footnoteWidgets.indexOf(blockfootnoteWidgets[f]) === -1) {\n footnoteWidgets.push(blockfootnoteWidgets[f]);\n }\n }\n }\n }\n }\n }\n else {\n footnoteElements = this.getFootNotesOfBlock(widget);\n if (footnoteElements.length > 0) {\n footnoteWidgets = this.getFootNoteWidgetsBy(widget, footnoteElements);\n }\n if (isShifting && footnoteWidgets.length === 0) {\n for (var k = 0; k < footnoteElements.length; k++) {\n footnoteWidgets.push(footnoteElements[k].bodyWidget);\n }\n }\n }\n return footnoteWidgets;\n };\n Layout.prototype.getFootNodeWidgetsToShiftToPage = function (paragraph) {\n var splittedWidgets = paragraph.getSplitWidgets();\n var footNoteWidgets = [];\n var toBodyWidget = paragraph.containerWidget;\n var fromBodyWidget;\n for (var i = 0; i < splittedWidgets.length; i++) {\n var footWidgets = this.getFootNoteWidgetsOf(splittedWidgets[i]);\n for (var j = 0; j < footWidgets.length; j++) {\n fromBodyWidget = footWidgets[j].containerWidget;\n if (toBodyWidget !== fromBodyWidget) {\n footNoteWidgets.push(footWidgets[j]);\n }\n }\n }\n return { 'footNoteWidgets': footNoteWidgets, 'fromBodyWidget': fromBodyWidget, 'toBodyWidget': toBodyWidget };\n };\n Layout.prototype.shiftTableWidget = function (table, viewer, isClearHeight) {\n if (isClearHeight === void 0) { isClearHeight = false; }\n var tables = [table];\n this.addTableWidget(this.viewer.clientActiveArea, tables);\n this.viewer.updateClientAreaTopOrLeft(table, true);\n var clientActiveAreaForTableWrap;\n var clientAreaForTableWrap;\n if (table.wrapTextAround) {\n clientActiveAreaForTableWrap = this.viewer.clientActiveArea.clone();\n clientAreaForTableWrap = this.viewer.clientArea.clone();\n this.updateClientAreaForWrapTable(tables, table, true, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n var row = table.childWidgets[0];\n while (row) {\n row = this.shiftRowWidget(tables, row, isClearHeight);\n row = row.nextRow;\n }\n this.updateWidgetsToPage(tables, [], table, true);\n if (table.wrapTextAround && table.bodyWidget) {\n this.updateClientAreaForWrapTable(tables, table, false, clientActiveAreaForTableWrap, clientAreaForTableWrap);\n }\n return tables[tables.length - 1];\n };\n Layout.prototype.shiftRowWidget = function (tables, row, isClearHeight) {\n if (isClearHeight === void 0) { isClearHeight = false; }\n var viewer = this.viewer;\n if (isClearHeight) {\n row.height = 0;\n }\n var isNestedTable = row.ownerTable.isInsideTable;\n if (!isNestedTable) {\n this.updateExistingFootnoteHeight(row);\n }\n var rows = [row];\n this.addTableRowWidget(viewer.clientActiveArea, rows);\n viewer.updateClientAreaForRow(row, true);\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (isClearHeight) {\n cell.height = 0;\n }\n /* eslint-disable-next-line max-len */\n this.shiftCellWidget(cell, this.getMaxTopCellMargin(row) + row.topBorderWidth, this.getMaxBottomCellMargin(row) + row.bottomBorderWidth, isClearHeight);\n }\n viewer.updateClientAreaForRow(row, false);\n if (!isNestedTable) {\n var footheight = this.footnoteHeight;\n this.updateFootnoteToBody(row, this.layoutedFootnoteElement);\n this.footnoteHeight = footheight;\n }\n this.updateWidgetsToTable(tables, rows, row, false);\n if (!isNestedTable) {\n this.layoutedFootnoteElement = [];\n }\n return rows[rows.length - 1];\n };\n Layout.prototype.updateFootnoteToBody = function (row, footnoteElements) {\n this.layoutFootnoteInSplittedRow(row, this.getFootnoteBody(footnoteElements));\n if (isNullOrUndefined(row.ownerTable.footnoteElement)) {\n row.ownerTable.footnoteElement = [];\n }\n for (var i = 0; i < footnoteElements.length; i++) {\n row.ownerTable.footnoteElement.push(footnoteElements[i]);\n }\n };\n Layout.prototype.getFootnoteBody = function (footnoteElements) {\n var footnoteWidgets = [];\n for (var i = 0; i < footnoteElements.length; i++) {\n footnoteWidgets.push(footnoteElements[i].bodyWidget);\n }\n return footnoteWidgets;\n };\n Layout.prototype.shiftCellWidget = function (cell, maxCellMarginTop, maxCellMarginBottom, isClearHeight) {\n if (isNullOrUndefined(isClearHeight)) {\n isClearHeight = false;\n }\n var viewer = this.viewer;\n this.addTableCellWidget(cell, viewer.clientActiveArea, maxCellMarginTop, maxCellMarginBottom);\n var clientHeight = this.viewer.clientActiveArea.height;\n viewer.updateClientAreaForCell(cell, true);\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n viewer.updateClientAreaForBlock(block, true);\n if (block instanceof ParagraphWidget) {\n this.shiftParagraphWidget(block);\n }\n else {\n this.shiftTableWidget(block, viewer, isClearHeight);\n }\n viewer.updateClientAreaForBlock(block, false);\n }\n this.updateWidgetToRow(cell);\n viewer.updateClientAreaForCell(cell, false);\n if (!cell.ownerTable.isInsideTable) {\n this.viewer.clientActiveArea.height = clientHeight;\n }\n };\n Layout.prototype.shiftParagraphWidget = function (paragraph) {\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraph);\n if (paragraph.floatingElements.length > 0) {\n for (var k = 0; k < paragraph.floatingElements.length; k++) {\n var shape = paragraph.floatingElements[k];\n var topMargin = 0;\n if (shape instanceof ShapeElementBox && shape.textWrappingStyle === 'Inline') {\n var lineIndex = shape.line.indexInOwner;\n var lineHeight = 0;\n topMargin = HelperMethods.convertPointToPixel(shape.textFrame.marginTop);\n for (var k_3 = 0; k_3 < lineIndex; k_3++) {\n lineHeight += paragraph.childWidgets[k_3].height;\n }\n shape.y = paragraph.y + lineHeight;\n }\n else {\n var position = this.getFloatingItemPoints(shape);\n shape.y = position.y;\n shape.x = position.x;\n }\n if (shape instanceof ShapeElementBox) {\n this.updateChildLocationForCellOrShape(shape.y + topMargin, shape);\n }\n }\n }\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + paragraph.height);\n var footnoteCollection = this.getFootNoteWidgetsOf(paragraph, true);\n for (var i = 0; i < footnoteCollection.length; i++) {\n this.layoutedFootnoteElement.push(footnoteCollection[i].footNoteReference);\n }\n this.footnoteHeight += this.getFootNoteHeight(footnoteCollection);\n this.updateWidgetToPage(this.viewer, paragraph);\n };\n Layout.prototype.updateContainerForTable = function (block, viewer) {\n var prevObj = this.getBodyWidgetOfPreviousBlock(block, 0);\n var prevBodyWidget = prevObj.bodyWidget;\n var index = prevObj.index;\n var isPageBreak = !isNullOrUndefined(prevBodyWidget.lastChild) && !isNullOrUndefined(prevBodyWidget.lastChild.lastChild) ?\n prevBodyWidget.lastChild.lastChild.isEndsWithPageBreak : false;\n var isColumnBreak = !isNullOrUndefined(prevBodyWidget.lastChild) && !isNullOrUndefined(prevBodyWidget.lastChild.lastChild) ?\n prevBodyWidget.lastChild.lastChild.isEndsWithColumnBreak : false;\n if (prevBodyWidget !== block.containerWidget) {\n if (!isPageBreak && !isColumnBreak) {\n this.updateContainerWidget(block, prevBodyWidget, index + 1, true);\n }\n else {\n viewer.updateClientArea(block.bodyWidget, block.bodyWidget.page);\n }\n }\n if (block.isInHeaderFooter || this.viewer instanceof WebLayoutViewer) {\n block.containerWidget.height -= block.height;\n }\n };\n Layout.prototype.shiftWidgetsForTable = function (table, viewer) {\n this.updateContainerForTable(table, viewer);\n this.viewer.updateClientAreaForBlock(table, true, undefined, false, true);\n var tempClientAreaX = this.viewer.clientArea.x;\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n this.updateVerticalPositionToTop(table, true);\n //const isPageLayout: boolean = viewer instanceof PageLayoutViewer;\n var combinedTable = table.combineWidget(this.viewer);\n this.documentHelper.layout.updateChildLocationForTable(combinedTable.y, combinedTable);\n this.clearTableWidget(combinedTable, true, false, false, true);\n this.shiftTableWidget(combinedTable, this.viewer);\n this.updateVerticalPositionToTop(table, false);\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientArea.x = tempClientAreaX;\n }\n this.viewer.updateClientAreaForBlock(table, false);\n };\n Layout.prototype.updateVerticalPositionToTop = function (table, isUpdateTop) {\n //Iterate the tableWidgets counts\n for (var i = 0; i < table.getSplitWidgets().length; i++) {\n var tablewidget = table.getSplitWidgets()[i];\n //Iterate the tableWidget child items\n for (var j = 0; j < tablewidget.childWidgets.length; j++) {\n var rowWidget = tablewidget.childWidgets[j];\n //Iterate the RowWidgets child items\n for (var k = 0; k < rowWidget.childWidgets.length; k++) {\n var cellWidget = rowWidget.childWidgets[k];\n //Iterate the RowWidgets child items\n this.documentHelper.layout.updateCellVerticalPosition(cellWidget, isUpdateTop, false);\n }\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.splitWidget = function (paragraphWidget, viewer, previousBodyWidget, index, isPageBreak, footWidget, isColumnBreak) {\n var firstLine = paragraphWidget.childWidgets[0];\n var keepLinesTogether = (paragraphWidget.paragraphFormat.keepLinesTogether && (this.viewer.clientActiveArea.y !== this.viewer.clientArea.y));\n var maxElementHeight = keepLinesTogether ? paragraphWidget.height : this.getMaxElementHeight(firstLine);\n var paragraphView = paragraphWidget.getSplitWidgets();\n var nextBodyWidget = paragraphWidget.containerWidget;\n // Get maximun height based on widow/orphan control.\n maxElementHeight = this.getMaximumLineHeightToSplit(paragraphWidget, maxElementHeight, viewer);\n // TODO: Footnote move on move entire paragraph.\n var footNoteInFirstLine = this.getFootNotesWidgetsInLine(firstLine);\n if (isNullOrUndefined(paragraphWidget.previousWidget) && footNoteInFirstLine.length > 0) {\n for (var i = 0; i < footNoteInFirstLine.length; i++) {\n for (var j = 0; j < footNoteInFirstLine[i].childWidgets.length; j++) {\n maxElementHeight += footNoteInFirstLine[i].childWidgets[j].height;\n }\n }\n //maxElementHeight += (paragraphWidget.bodyWidget.page.footnoteWidget.childWidgets[0] as ParagraphWidget).height;\n }\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak && !isColumnBreak) {\n var splittedWidget = undefined;\n var widgetIndex = paragraphView.indexOf(paragraphWidget);\n if (widgetIndex < (paragraphView.length - 1)) {\n splittedWidget = paragraphView[widgetIndex + 1];\n nextBodyWidget = splittedWidget.containerWidget;\n }\n else {\n splittedWidget = new ParagraphWidget();\n splittedWidget.index = paragraphWidget.index;\n splittedWidget.characterFormat = paragraphWidget.characterFormat;\n splittedWidget.paragraphFormat = paragraphWidget.paragraphFormat;\n splittedWidget.width = paragraphWidget.width;\n splittedWidget.x = paragraphWidget.x;\n splittedWidget.y = paragraphWidget.y;\n paragraphView.push(splittedWidget);\n }\n if (previousBodyWidget !== paragraphWidget.containerWidget && !this.skipUpdateContainerWidget) {\n this.updateContainerWidget(paragraphWidget, previousBodyWidget, index, true);\n }\n for (var i = paragraphWidget.childWidgets.length - 1; i > 0; i--) {\n var line = paragraphWidget.childWidgets[i];\n if (this.isFitInClientArea(paragraphWidget, viewer, undefined)) {\n if (splittedWidget.childWidgets.length === 1) {\n this.updateParagraphWidgetInternal(line, splittedWidget, 0);\n this.skipUpdateContainerWidget = true;\n }\n break;\n }\n else {\n var line_1 = paragraphWidget.childWidgets[i];\n //Moves the line widget to next widget.\n this.updateParagraphWidgetInternal(line_1, splittedWidget, 0);\n }\n }\n if (isNullOrUndefined(splittedWidget.containerWidget) && splittedWidget.childWidgets.length > 0) {\n var y = viewer.clientActiveArea.y;\n // eslint-disable-next-line max-len\n var clientArea = new Rect(viewer.clientArea.x, viewer.clientArea.y, viewer.clientArea.width, viewer.clientArea.height);\n // eslint-disable-next-line max-len\n var activeArea = new Rect(viewer.clientActiveArea.x, viewer.clientActiveArea.y, viewer.clientActiveArea.width, viewer.clientActiveArea.height);\n var prevPage = paragraphWidget.bodyWidget.page;\n //Checks whether next node exists, else adds new page.\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget, false, -1);\n splittedWidget.containerWidget = nextBodyWidget;\n nextBodyWidget.childWidgets.splice(0, 0, splittedWidget);\n if (prevPage !== nextBodyWidget.page) {\n nextBodyWidget.height += splittedWidget.height;\n if (nextBodyWidget != previousBodyWidget) {\n this.moveFootNotesToPage(footWidget, previousBodyWidget, nextBodyWidget);\n }\n if (nextBodyWidget.childWidgets.length === 1 && nextBodyWidget.firstChild instanceof ParagraphWidget &&\n nextBodyWidget.firstChild.equals(paragraphWidget)) {\n //paragraphWidget.x = paragraphWidget.x;\n paragraphWidget.y = y;\n return true;\n }\n else {\n //Resetting Client area\n viewer.clientArea = clientArea;\n viewer.clientActiveArea = activeArea;\n }\n }\n else {\n if (paragraphWidget.x !== paragraphWidget.containerWidget.x) {\n paragraphWidget.x = paragraphWidget.containerWidget.x;\n }\n paragraphWidget.y = y;\n viewer.updateClientArea(nextBodyWidget, nextBodyWidget.page);\n splittedWidget = this.addParagraphWidget(this.viewer.clientActiveArea, splittedWidget);\n return true;\n }\n }\n }\n else {\n var startBlock = void 0;\n var keepWithNext = false;\n var startIndex = 0;\n viewer.columnLayoutArea.setColumns(previousBodyWidget.sectionFormat);\n nextBodyWidget = this.createOrGetNextBodyWidget(previousBodyWidget, this.viewer);\n var blockInfo = this.alignBlockElement(paragraphWidget);\n if (!this.isInitialLoad && !isNullOrUndefined(blockInfo.node) && !paragraphWidget.isEndsWithPageBreak && !paragraphWidget.isEndsWithColumnBreak && isNullOrUndefined(paragraphWidget.previousSplitWidget)) {\n startBlock = blockInfo.node instanceof TableRowWidget ? this.splitRow(blockInfo.node) : blockInfo.node;\n if (startBlock.containerWidget instanceof BodyWidget && startBlock.containerWidget.firstChild !== startBlock) {\n startIndex = startBlock instanceof TableWidget ? 0 : parseInt(blockInfo.position.index, 10);\n paragraphWidget = startBlock;\n keepWithNext = true;\n if (!isNullOrUndefined(paragraphWidget.nextRenderedWidget) && paragraphWidget.nextRenderedWidget instanceof ParagraphWidget) {\n this.keepWithNext = true;\n this.documentHelper.blockToShift = paragraphWidget.nextRenderedWidget;\n }\n }\n }\n if (paragraphWidget.containerWidget !== nextBodyWidget || keepWithNext) {\n var prevPage = paragraphWidget.bodyWidget.page;\n nextBodyWidget = this.moveBlocksToNextPage(paragraphWidget, true);\n if (previousBodyWidget !== nextBodyWidget) {\n viewer.updateClientArea(nextBodyWidget, nextBodyWidget.page);\n if (startIndex > 0 && this.keepWithNext) {\n this.viewer.updateClientAreaForBlock(paragraphWidget, true);\n var nextParagraph = void 0;\n if (paragraphWidget instanceof TableWidget) {\n this.addTableWidget(this.viewer.clientActiveArea, [paragraphWidget]);\n }\n else if (nextBodyWidget.firstChild instanceof ParagraphWidget && nextBodyWidget.firstChild.equals(paragraphWidget)) {\n nextParagraph = nextBodyWidget.firstChild;\n }\n else {\n nextParagraph = new ParagraphWidget();\n }\n nextParagraph = this.moveChildsToParagraph(paragraphWidget, startIndex, nextParagraph);\n nextParagraph.containerWidget = nextBodyWidget;\n for (var m = 0; m < nextParagraph.floatingElements.length; m++) {\n var element = nextParagraph.floatingElements[m];\n if (element.line.paragraph.bodyWidget !== paragraphWidget.bodyWidget && element.textWrappingStyle !== 'Inline') {\n paragraphWidget.bodyWidget.floatingElements.splice(paragraphWidget.bodyWidget.floatingElements.indexOf(element), 1);\n }\n }\n paragraphWidget = nextParagraph;\n if (nextBodyWidget.childWidgets.indexOf(paragraphWidget) === -1) {\n nextBodyWidget.childWidgets.splice(0, 0, paragraphWidget);\n }\n this.viewer.updateClientAreaLocation(paragraphWidget, this.viewer.clientActiveArea);\n this.layoutBlock(paragraphWidget, 0, true);\n this.viewer.updateClientAreaForBlock(paragraphWidget, false);\n }\n else {\n this.updateContainerWidget(paragraphWidget, nextBodyWidget, 0, true);\n this.addParagraphWidget(this.viewer.clientActiveArea, paragraphWidget);\n }\n this.moveFootNotesToPage(footWidget, previousBodyWidget, nextBodyWidget);\n }\n if (previousBodyWidget.page === nextBodyWidget.page) {\n if (previousBodyWidget === nextBodyWidget) {\n viewer.updateClientArea(nextBodyWidget, nextBodyWidget.page);\n return false;\n }\n return true;\n }\n }\n }\n if (previousBodyWidget === paragraphWidget.containerWidget) {\n // if (paragraphWidget.x !== paragraphWidget.containerWidget.x) {\n // paragraphWidget.x = paragraphWidget.containerWidget.x;\n // }\n paragraphWidget.y = viewer.clientActiveArea.y;\n viewer.cutFromTop(viewer.clientActiveArea.y + paragraphWidget.height);\n }\n else {\n //Updates client area based on next body widget.\n viewer.updateClientArea(nextBodyWidget, nextBodyWidget.page);\n }\n return false;\n };\n Layout.prototype.getMaximumLineHeightToSplit = function (paragraphWidget, maxElementHeight, viewer) {\n if (viewer.clientActiveArea.height >= maxElementHeight && !paragraphWidget.paragraphFormat.keepLinesTogether &&\n paragraphWidget.paragraphFormat.widowControl && !isNullOrUndefined(paragraphWidget.previousWidget) &&\n isNullOrUndefined(paragraphWidget.previousSplitWidget)) {\n var paragraphHeight = paragraphWidget.height;\n for (var m = paragraphWidget.childWidgets.length - 1; m >= 0; m--) {\n var lastLine = paragraphWidget.childWidgets[m];\n var lineHeight = this.getMaxElementHeight(lastLine);\n if (lastLine.height > lineHeight) {\n paragraphHeight -= lastLine.height - lineHeight;\n }\n if (viewer.clientActiveArea.height >= paragraphHeight) {\n // Move entire paragraph to next page, If first line alone not fitted in the client area.\n if (m === 0) {\n maxElementHeight = paragraphWidget.height;\n }\n break;\n }\n paragraphHeight -= (lastLine).height;\n }\n }\n return maxElementHeight;\n };\n /**\n * @private\n * @param footnoteWidgets\n * @param fromBodyWidget\n * @param toBodyWidget\n */\n Layout.prototype.moveFootNotesToPage = function (footnoteWidgets, fromBodyWidget, toBodyWidget) {\n if (footnoteWidgets.length > 0 && fromBodyWidget.page.footnoteWidget && fromBodyWidget.page !== toBodyWidget.page) {\n var footNoteIndex = -1;\n var footNoteWidget = void 0;\n var insertIndex = 0;\n var check = false;\n for (var k = 0; k < footnoteWidgets.length; k++) {\n /* eslint-disable-next-line max-len */\n footNoteWidget = footnoteWidgets[k];\n footNoteIndex = fromBodyWidget.page.footnoteWidget.bodyWidgets.indexOf(footNoteWidget);\n if (footNoteIndex >= 0) {\n if (toBodyWidget.page.footnoteWidget === undefined) {\n this.addEmptyFootNoteToBody(toBodyWidget);\n }\n for (var i = 0; i < toBodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n var body = (toBodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference;\n if (body === (footNoteWidget).footNoteReference) {\n check = true;\n }\n }\n fromBodyWidget.page.footnoteWidget.bodyWidgets.splice(footNoteIndex, 1);\n if (toBodyWidget.page.footnoteWidget.bodyWidgets.indexOf(footNoteWidget) < 0 && !check) {\n var childLength = toBodyWidget.page.footnoteWidget.bodyWidgets.length;\n var fromPage = this.documentHelper.pages.indexOf(fromBodyWidget.page);\n var toPage = this.documentHelper.pages.indexOf(toBodyWidget.page);\n footNoteWidget.containerWidget = toBodyWidget.page.footnoteWidget;\n footNoteWidget.page = toBodyWidget.page;\n if (fromPage > toPage) {\n toBodyWidget.page.footnoteWidget.bodyWidgets.push(footNoteWidget);\n insertIndex++;\n }\n else {\n toBodyWidget.page.footnoteWidget.bodyWidgets.splice(insertIndex++, 0, footNoteWidget);\n }\n toBodyWidget.page.footnoteWidget.height += footNoteWidget.height;\n }\n fromBodyWidget.page.footnoteWidget.height -= footNoteWidget.height;\n }\n }\n if (fromBodyWidget.page.footnoteWidget && fromBodyWidget.page.footnoteWidget.bodyWidgets.length === 0) {\n fromBodyWidget.page.footnoteWidget = undefined;\n }\n if (fromBodyWidget.page.footnoteWidget !== undefined) {\n this.layoutfootNote(fromBodyWidget.page.footnoteWidget);\n }\n if (toBodyWidget.page.footnoteWidget !== undefined) {\n this.layoutfootNote(toBodyWidget.page.footnoteWidget);\n }\n }\n };\n Layout.prototype.addEmptyFootNoteToBody = function (bodyWidget) {\n var footnoteWidget = new FootNoteWidget();\n footnoteWidget.footNoteType = 'Footnote';\n footnoteWidget.page = bodyWidget.page;\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = new WCharacterFormat();\n newParagraph.paragraphFormat = new WParagraphFormat();\n newParagraph.index = 0;\n var lineWidget = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(lineWidget);\n // footnoteWidget.childWidgets.push(newParagraph);\n footnoteWidget.height = this.documentHelper.textHelper.getParagraphMarkSize(newParagraph.characterFormat).Height;\n footnoteWidget.margin = new Margin(0, footnoteWidget.height, 0, 0);\n bodyWidget.page.footnoteWidget = footnoteWidget;\n };\n Layout.prototype.getMaxElementHeight = function (lineWidget) {\n var height = 0;\n /* eslint-disable-next-line max-len */\n if (lineWidget.children.length === 0 || ((lineWidget.children.length === 1 && lineWidget.children[0] instanceof ListTextElementBox) || (lineWidget.children.length === 2 && lineWidget.children[0] instanceof ListTextElementBox && lineWidget.children[1] instanceof ListTextElementBox))) {\n var topMargin = 0;\n var bottomMargin = 0;\n height = this.documentHelper.selection.getParagraphMarkSize(lineWidget.paragraph, topMargin, bottomMargin).height;\n height += topMargin;\n if (lineWidget.children.length > 0) {\n var element = lineWidget.children[0];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n else {\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (height < element.margin.top + element.height) {\n height = element.margin.top + element.height;\n }\n }\n }\n return height;\n };\n Layout.prototype.createOrGetNextBodyWidget = function (bodyWidget, viewer) {\n viewer.columnLayoutArea.setColumns(bodyWidget.sectionFormat);\n var nextColumn = viewer.columnLayoutArea.getNextColumnByBodyWidget(bodyWidget);\n if (!isNullOrUndefined(nextColumn)) {\n var nextColumnBody = this.createOrGetNextColumnBody(bodyWidget);\n return nextColumnBody;\n }\n var nextBodyWidget = undefined;\n var pageIndex = 0;\n pageIndex = this.documentHelper.pages.indexOf(bodyWidget.page);\n var page = undefined;\n var index = undefined;\n index = bodyWidget.index;\n if (pageIndex === this.documentHelper.pages.length - 1\n || this.documentHelper.pages[pageIndex + 1].sectionIndex !== index) {\n var currentWidget = new BodyWidget();\n currentWidget.sectionFormat = bodyWidget.sectionFormat;\n currentWidget.index = bodyWidget.index;\n page = viewer.createNewPage(currentWidget);\n if (this.documentHelper.pages[pageIndex + 1].sectionIndex !== index) {\n this.documentHelper.insertPage(pageIndex + 1, page);\n }\n nextBodyWidget = page.bodyWidgets[0];\n }\n else {\n page = this.documentHelper.pages[pageIndex + 1];\n nextBodyWidget = page.bodyWidgets[0];\n }\n return nextBodyWidget;\n };\n Layout.prototype.isFitInClientArea = function (paragraphWidget, viewer, blocks) {\n var lastLine = paragraphWidget.childWidgets[paragraphWidget.childWidgets.length - 1];\n var height = paragraphWidget.height;\n var maxElementHeight = this.getMaxElementHeight(lastLine);\n if (lastLine.height > maxElementHeight) {\n height -= lastLine.height - maxElementHeight;\n }\n var footHeight = 0;\n if (!isNullOrUndefined(blocks)) {\n if (blocks.length > 0) {\n if (blocks[0].containerWidget instanceof FootNoteWidget) {\n footHeight = blocks[0].containerWidget.margin.top;\n }\n for (var k = 0; k < blocks.length; k++) {\n for (var l = 0; l < blocks[k].childWidgets.length; l++) {\n footHeight += blocks[k].childWidgets[l].height;\n }\n }\n }\n }\n return viewer.clientActiveArea.height >= height + footHeight;\n };\n Layout.prototype.isLineInFootNote = function (line, footNotes) {\n for (var i = 0; i < footNotes.length; i++) {\n if (footNotes[i].line === line) {\n return true;\n }\n }\n return false;\n };\n /* eslint-disable-next-line max-len */\n Layout.prototype.shiftToPreviousWidget = function (paragraphWidget, viewer, previousWidget, isPageBreak, isColumnBreak) {\n var fromBodyWidget = paragraphWidget.containerWidget;\n var toBodyWidget = previousWidget.containerWidget;\n var footNotes = [];\n var footNoteWidgets = [];\n if (toBodyWidget !== fromBodyWidget) {\n footNotes = this.getFootNotesOfBlock(paragraphWidget);\n }\n for (var i = 0; i < paragraphWidget.childWidgets.length; i++) {\n var line = paragraphWidget.childWidgets[i];\n var maxElementHeight = this.getMaxElementHeight(line);\n if (this.isLineInFootNote(line, footNotes)) {\n var footWidget = this.getFootNoteWidgetsBy(line.paragraph, footNotes);\n var height = 0;\n for (var m = 0; m < footWidget.length; m++) {\n var footContent = footWidget[m];\n for (var n = 0; n < footContent.childWidgets.length; n++) {\n height += footContent.childWidgets[n].height;\n }\n }\n if (footWidget.length > 0 && footWidget[0].containerWidget) {\n height += footWidget[0].containerWidget.margin.top;\n }\n maxElementHeight += height;\n }\n if (viewer.clientActiveArea.height >= maxElementHeight && !isPageBreak && !isColumnBreak) {\n if (footNotes.length > 0 && this.isLineInFootNote(line, footNotes)) {\n footNoteWidgets = footNoteWidgets.concat(this.getFootNoteWidgetsBy(line.paragraph, footNotes));\n }\n //Moves the line widget to previous widget.\n this.updateParagraphWidgetInternal(line, previousWidget, previousWidget.childWidgets.length);\n i--;\n viewer.cutFromTop(viewer.clientActiveArea.y + line.height);\n if (isNullOrUndefined(paragraphWidget.childWidgets)) {\n break;\n }\n }\n else {\n var bodyWidget = previousWidget.containerWidget;\n viewer.updateClientArea(bodyWidget, bodyWidget.page);\n var newBodyWidget = this.createOrGetNextBodyWidget(bodyWidget, viewer);\n if (paragraphWidget.containerWidget !== newBodyWidget) {\n newBodyWidget = this.moveBlocksToNextPage(paragraphWidget, true);\n }\n if (bodyWidget !== newBodyWidget) {\n footNotes = this.getFootNotesOfBlock(paragraphWidget);\n if (footNotes.length > 0) {\n footNoteWidgets = footNoteWidgets.concat(this.getFootNoteWidgetsBy(paragraphWidget, footNotes));\n toBodyWidget = newBodyWidget;\n }\n this.updateContainerWidget(paragraphWidget, newBodyWidget, 0, true);\n }\n //Updates client area based on next page.\n viewer.updateClientArea(newBodyWidget, newBodyWidget.page);\n break;\n }\n }\n if (!isNullOrUndefined(footNoteWidgets) && footNoteWidgets.length > 0 && fromBodyWidget.page.footnoteWidget\n && fromBodyWidget != toBodyWidget) {\n this.moveFootNotesToPage(footNoteWidgets, fromBodyWidget, toBodyWidget);\n }\n };\n Layout.prototype.updateParagraphWidgetInternal = function (lineWidget, newParagraphWidget, index) {\n if (!isNullOrUndefined(lineWidget.paragraph)) {\n lineWidget.paragraph.childWidgets.splice(lineWidget.paragraph.childWidgets.indexOf(lineWidget), 1);\n lineWidget.paragraph.height -= lineWidget.height;\n if (!isNullOrUndefined(lineWidget.paragraph.containerWidget)) {\n lineWidget.paragraph.containerWidget.height -= lineWidget.height;\n }\n if (isNullOrUndefined(lineWidget.paragraph.childWidgets) || lineWidget.paragraph.childWidgets.length === 0) {\n lineWidget.paragraph.destroyInternal(this.viewer);\n }\n }\n if (!isNullOrUndefined(lineWidget.paragraph) && lineWidget.paragraph.floatingElements.length > 0) {\n this.shiftFloatingElements(lineWidget, newParagraphWidget);\n }\n newParagraphWidget.childWidgets.splice(index, 0, lineWidget);\n lineWidget.paragraph = newParagraphWidget;\n newParagraphWidget.height += lineWidget.height;\n if (!isNullOrUndefined(newParagraphWidget.containerWidget)) {\n newParagraphWidget.containerWidget.height += lineWidget.height;\n }\n };\n Layout.prototype.shiftFloatingElements = function (lineWidget, newParagraphWidget) {\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof ShapeElementBox && lineWidget.children[i].textWrappingStyle === 'Inline') {\n var index = lineWidget.paragraph.floatingElements.indexOf(lineWidget.children[i]);\n if (index >= 0) {\n lineWidget.paragraph.floatingElements.splice(index, 1);\n newParagraphWidget.floatingElements.splice(index, 0, lineWidget.children[i]);\n }\n }\n }\n };\n Layout.prototype.shiftNextWidgets = function (blockAdv) {\n var block = blockAdv;\n while (block.nextWidget instanceof BlockWidget) {\n block = block.nextWidget;\n if (this.viewer instanceof PageLayoutViewer && !this.isMultiColumnSplit && block.bodyWidget.sectionFormat.columns.length > 1) {\n var lastbody = this.getBodyWidget(block.bodyWidget, false);\n if ((!isNullOrUndefined(lastbody.nextRenderedWidget) && lastbody.page === lastbody.nextRenderedWidget.page)) {\n this.splitBodyWidgetBasedOnColumn(block.bodyWidget);\n break;\n }\n }\n this.reLayoutOrShiftWidgets(block, this.viewer);\n }\n };\n Layout.prototype.updateContainerWidget = function (widget, bodyWidget, index, destroyAndScroll, footWidget) {\n if (widget.containerWidget && widget.containerWidget.containerWidget instanceof FootNoteWidget) {\n return;\n }\n var previousWidget = widget.containerWidget;\n if (!isNullOrUndefined(widget.containerWidget)) {\n widget.containerWidget.childWidgets.splice(widget.containerWidget.childWidgets.indexOf(widget), 1);\n widget.containerWidget.height -= bodyWidget.height;\n if ((isNullOrUndefined(widget.containerWidget.childWidgets) || widget.containerWidget.childWidgets.length === 0)\n && widget.containerWidget instanceof BodyWidget && widget.containerWidget !== bodyWidget && destroyAndScroll) {\n var page = widget.containerWidget.page;\n if (this.documentHelper.pages[this.documentHelper.pages.length - 1] === page &&\n this.viewer.visiblePages.indexOf(page) !== -1) {\n this.documentHelper.scrollToBottom();\n }\n if (isNullOrUndefined(page.nextPage) || page.nextPage.bodyWidgets[0].index !== widget.containerWidget.index) {\n var section = widget.containerWidget;\n if (!isNullOrUndefined(section.nextRenderedWidget) && section.nextRenderedWidget.sectionFormat.columns.length > 1) {\n section.nextRenderedWidget.columnIndex = section.columnIndex;\n }\n widget.containerWidget.destroyInternal(this.viewer);\n }\n }\n }\n bodyWidget.childWidgets.splice(index, 0, widget);\n if (widget instanceof ParagraphWidget && !isNullOrUndefined(widget.floatingElements)) {\n for (var i = 0; i < widget.floatingElements.length; i++) {\n var shape = widget.floatingElements[i];\n if (shape.textWrappingStyle !== 'Inline') {\n bodyWidget.floatingElements.push(shape);\n widget.bodyWidget.floatingElements.splice(widget.bodyWidget.floatingElements.indexOf(shape), 1);\n /* eslint:disable */\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n }\n }\n }\n if (widget instanceof TableWidget && widget.wrapTextAround\n && widget.bodyWidget.floatingElements.indexOf(widget) !== -1) {\n widget.bodyWidget.floatingElements.splice(widget.bodyWidget.floatingElements.indexOf(widget), 1);\n }\n bodyWidget.height += bodyWidget.height;\n widget.containerWidget = bodyWidget;\n if (previousWidget && previousWidget.page && previousWidget.page.footnoteWidget && footWidget && footWidget.length > 0) {\n this.moveFootNotesToPage(footWidget, previousWidget, bodyWidget);\n }\n };\n Layout.prototype.getBodyWidgetOfPreviousBlock = function (block, index) {\n index = 0;\n var prevBodyWidget = undefined;\n var previousBlock = block.previousRenderedWidget;\n prevBodyWidget = (previousBlock && previousBlock.containerWidget.equals(block.containerWidget)) ?\n previousBlock.containerWidget :\n (block instanceof TableWidget && !isNullOrUndefined(block.containerWidget.previousRenderedWidget) && block.containerWidget.index === block.containerWidget.previousRenderedWidget.index) ?\n block.containerWidget.previousRenderedWidget :\n block.containerWidget;\n index = previousBlock && previousBlock.containerWidget.equals(block.containerWidget) ?\n prevBodyWidget.childWidgets.indexOf(previousBlock) : block.containerWidget.childWidgets.indexOf(block);\n return { bodyWidget: prevBodyWidget, index: index };\n };\n Layout.prototype.moveBlocksToNextPage = function (block, moveFootnoteFromLastBlock, childStartIndex, sectionBreakContinuous) {\n var body = block.bodyWidget;\n this.viewer.columnLayoutArea.setColumns(body.sectionFormat);\n var nextColumn = this.viewer.columnLayoutArea.getNextColumnByBodyWidget(block.bodyWidget);\n var nextPage = undefined;\n var nextBody = undefined;\n if (!isNullOrUndefined(nextColumn) && !(block instanceof ParagraphWidget && block.isEndsWithPageBreak)) {\n nextBody = this.moveToNextColumnByBodyWidget(block, childStartIndex);\n nextBody.columnIndex = nextColumn.index;\n nextBody.y = block.bodyWidget.y;\n this.viewer.updateClientArea(nextBody, nextBody.page);\n this.viewer.clientActiveArea.height -= nextBody.y - this.viewer.clientActiveArea.y;\n this.viewer.clientActiveArea.y = nextBody.y;\n if (block.bodyWidget.sectionFormat.columns.length > 1) {\n var columnIndex = block.bodyWidget.columnIndex;\n var columnWidth = block.bodyWidget.x + block.bodyWidget.sectionFormat.columns[columnIndex].width + block.bodyWidget.sectionFormat.columns[columnIndex].space;\n for (var j = 0; j < block.bodyWidget.floatingElements.length; j++) {\n if (block.bodyWidget.floatingElements[j] instanceof ShapeElementBox && columnWidth < block.bodyWidget.floatingElements[j].x + block.bodyWidget.floatingElements[j].width) {\n nextBody.floatingElements.push(block.bodyWidget.floatingElements[j]);\n }\n }\n }\n }\n if (isNullOrUndefined(nextBody)) {\n var insertPage = false;\n var page = body.page;\n var pageIndex = page.index + 1;\n if (this.documentHelper.pages.length > pageIndex && !this.isMultiColumnLayout) {\n nextPage = this.documentHelper.pages[pageIndex];\n if (!isNullOrUndefined(nextPage) && nextPage.bodyWidgets.length !== 0 && body.sectionFormat.pageHeight === nextPage.bodyWidgets[0].sectionFormat.pageHeight && body.sectionFormat.pageWidth === nextPage.bodyWidgets[0].sectionFormat.pageWidth && body.sectionFormat.breakCode === 'NoBreak') {\n if (nextPage.bodyWidgets[0].index === body.index) {\n nextBody = nextPage.bodyWidgets[0];\n this.viewer.updateClientArea(nextBody, nextBody.page);\n }\n else {\n nextBody = this.createSplitBody(body);\n nextPage.bodyWidgets.splice(0, 0, nextBody);\n nextBody.page = nextPage;\n this.viewer.updateClientArea(nextBody, nextBody.page);\n nextBody.y = this.viewer.clientActiveArea.y;\n }\n }\n else if (nextPage.bodyWidgets.length === 0 || !body.equals(nextPage.bodyWidgets[0]) || (body.sectionIndex !== nextPage.bodyWidgets[0].sectionIndex && (body.sectionFormat.breakCode === 'NewPage' || (!body.isWord2010NextColumn && body.sectionFormat.breakCode !== 'NoBreak')))) {\n nextPage = undefined;\n insertPage = true;\n }\n else {\n nextBody = nextPage.bodyWidgets[0];\n this.viewer.updateClientArea(nextBody, nextBody.page);\n }\n }\n if (this.isMultiColumnLayout) {\n insertPage = true;\n }\n if (isNullOrUndefined(nextPage)) {\n nextBody = this.createSplitBody(body);\n if ((((this.documentHelper.owner.editorHistoryModule &&\n this.documentHelper.owner.editorHistoryModule.isRedoing && this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo &&\n this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'SectionBreakContinuous')) && block.bodyWidget.sectionFormat.breakCode === 'NoBreak')\n || sectionBreakContinuous) {\n // this.viewer.clientActiveArea.y = block.y + block.height;\n }\n else {\n nextPage = this.viewer.createNewPage(nextBody, pageIndex);\n this.viewer.updateClientArea(nextBody, nextBody.page);\n nextBody.y = this.viewer.clientActiveArea.y;\n }\n if (insertPage && !isNullOrUndefined(nextPage)) {\n this.documentHelper.insertPage(pageIndex, nextPage);\n }\n this.clearLineMeasures();\n }\n if (nextPage) {\n do {\n var lastBody = body.page.bodyWidgets[body.page.bodyWidgets.length - 1];\n if (this.isSectionBreakCont || body === lastBody || body.containerWidget instanceof FootNoteWidget) {\n break;\n }\n body.page.bodyWidgets.splice(body.page.bodyWidgets.indexOf(lastBody), 1);\n nextPage.bodyWidgets.splice(1, 0, lastBody);\n lastBody.page = nextPage;\n } while (true);\n }\n }\n // eslint-disable no-constant-condition\n if (this.isTextFormat) {\n var index = body.childWidgets.indexOf(block);\n var child = body.childWidgets.slice(index);\n body.childWidgets.splice(index);\n for (var _i = 0, child_1 = child; _i < child_1.length; _i++) {\n var obj = child_1[_i];\n nextBody.childWidgets.push(obj);\n obj.containerWidget = nextBody;\n }\n }\n else {\n do {\n var lastBlock = void 0;\n if (body.lastChild instanceof FootNoteWidget) {\n lastBlock = body.lastChild.previousWidget;\n }\n else {\n lastBlock = body.lastChild;\n }\n if (moveFootnoteFromLastBlock) {\n var footWidget = this.getFootNoteWidgetsOf(lastBlock);\n this.moveFootNotesToPage(footWidget, body, nextBody);\n }\n if (block === lastBlock) {\n break;\n }\n body.childWidgets.splice(body.childWidgets.indexOf(lastBlock), 1);\n nextBody.childWidgets.splice(0, 0, lastBlock);\n if (lastBlock instanceof TableWidget && (body.floatingElements.indexOf(lastBlock) !== -1)) {\n body.floatingElements.splice(body.floatingElements.indexOf(lastBlock), 1);\n //nextBody.floatingElements.push(lastBlock);\n }\n if (lastBlock instanceof ParagraphWidget && lastBlock.floatingElements.length > 0) {\n for (var m = 0; m < lastBlock.floatingElements.length; m++) {\n if (body.floatingElements.indexOf(lastBlock.floatingElements[m]) !== -1 && lastBlock.floatingElements[m].textWrappingStyle !== 'Inline') {\n body.floatingElements.splice(body.floatingElements.indexOf(lastBlock.floatingElements[m]), 1);\n nextBody.floatingElements.push(lastBlock.floatingElements[m]);\n }\n }\n }\n lastBlock.containerWidget = nextBody;\n nextBody.height += lastBlock.height;\n // eslint-disable-next-line no-constant-condition\n } while (true);\n }\n return nextBody;\n };\n Layout.prototype.createSplitBody = function (body) {\n var newBody = this.addBodyWidget(this.viewer.clientActiveArea);\n newBody.sectionFormat = body.sectionFormat;\n newBody.index = body.index;\n return newBody;\n };\n Layout.prototype.createOrGetNextColumnBody = function (fromBody) {\n var nextColumnBody;\n if (fromBody.nextRenderedWidget && fromBody.columnIndex + 1 === fromBody.nextRenderedWidget.columnIndex) {\n nextColumnBody = fromBody.nextRenderedWidget;\n }\n if (isNullOrUndefined(nextColumnBody)) {\n nextColumnBody = new BodyWidget();\n nextColumnBody.sectionFormat = fromBody.sectionFormat;\n nextColumnBody.index = fromBody.index;\n nextColumnBody.page = fromBody.page;\n nextColumnBody.y = fromBody.y;\n if (fromBody.containerWidget instanceof FootNoteWidget) {\n fromBody.containerWidget.bodyWidgets.splice(fromBody.containerWidget.bodyWidgets.indexOf(fromBody) + 1, 0, nextColumnBody);\n nextColumnBody.containerWidget = fromBody.containerWidget;\n }\n else {\n fromBody.page.bodyWidgets.splice(fromBody.page.bodyWidgets.indexOf(fromBody) + 1, 0, nextColumnBody);\n }\n }\n return nextColumnBody;\n };\n Layout.prototype.moveToNextColumnByBodyWidget = function (block, childStartIndex) {\n var fromBody = block.containerWidget;\n var nextColumnBody = this.createOrGetNextColumnBody(fromBody);\n return nextColumnBody;\n };\n //endregion\n //#region Relayout Parargaph\n /* eslint-disable */\n Layout.prototype.reLayoutLine = function (paragraph, lineIndex, isBidi, isSkip, isSkipList) {\n if (!this.documentHelper.owner.editorModule.isFootnoteElementRemoved) {\n this.isFootnoteContentChanged = false;\n }\n if (this.viewer.owner.isDocumentLoaded && this.viewer.owner.editorModule && !isSkipList) {\n this.viewer.owner.editorModule.updateWholeListItems(paragraph);\n }\n var lineWidget;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n lineWidget = paragraph.getSplitWidgets()[0].firstChild;\n }\n else {\n lineWidget = paragraph.childWidgets[lineIndex];\n }\n var lineToLayout;\n if (paragraph.containerWidget instanceof BodyWidget && paragraph.containerWidget.sectionFormat.numberOfColumns > 1 && paragraph.containerWidget.sectionFormat.equalWidth) {\n lineToLayout = lineWidget.previousLine;\n }\n if (isNullOrUndefined(lineToLayout)) {\n lineToLayout = lineWidget;\n }\n if (this.allowLayout) {\n lineToLayout.paragraph.splitTextRangeByScriptType(lineToLayout.indexInOwner);\n lineToLayout.paragraph.splitLtrAndRtlText(lineToLayout.indexInOwner);\n lineToLayout.paragraph.combineconsecutiveRTL(lineToLayout.indexInOwner);\n }\n var bodyWidget = paragraph.containerWidget;\n bodyWidget.height -= paragraph.height;\n if ((this.viewer.owner.enableHeaderAndFooter || paragraph.isInHeaderFooter) && !(bodyWidget instanceof TextFrame)) {\n paragraph.bodyWidget.isEmpty = false;\n this.viewer.updateHeaderFooterClientAreaWithTop(paragraph.bodyWidget.sectionFormat, this.documentHelper.isBlockInHeader(paragraph), bodyWidget.page);\n }\n else if (bodyWidget instanceof TextFrame) {\n this.viewer.updateClientAreaForTextBoxShape(bodyWidget.containerShape, true);\n // } else if (bodyWidget instanceof FootNoteWidget) {\n // this.isRelayoutFootnote = true;\n // this.viewer.updateClientArea(bodyWidget.sectionFormat, bodyWidget.page);\n // this.viewer.clientArea.height = Number.POSITIVE_INFINITY;\n // this.viewer.clientActiveArea.height = Number.POSITIVE_INFINITY;\n // // curretBlock.containerWidget.height -= curretBlock.height;\n // this.viewer.clientActiveArea.y = paragraph.containerWidget.y;\n }\n else {\n this.viewer.updateClientArea(bodyWidget, bodyWidget.page, true);\n }\n this.viewer.updateClientAreaForBlock(paragraph, true);\n if (!isNullOrUndefined(paragraph.containerWidget) && !isNullOrUndefined(paragraph.containerWidget.containerWidget) && paragraph.containerWidget.containerWidget instanceof FootNoteWidget) {\n var y = paragraph.bodyWidget.containerWidget.y;\n this.viewer.cutFromTop(y);\n this.documentHelper.owner.editorModule.isFootNoteInsert = true;\n this.layoutfootNote(paragraph.containerWidget.containerWidget);\n this.documentHelper.owner.editorModule.isFootNoteInsert = false;\n return;\n }\n else if (lineToLayout.paragraph.isEmpty()) {\n this.viewer.cutFromTop(paragraph.y);\n this.layoutParagraph(paragraph, 0);\n }\n else {\n this.updateClientAreaForLine(lineToLayout);\n this.layoutListItems(lineToLayout.paragraph);\n if (lineToLayout.isFirstLine() && !isNullOrUndefined(paragraph.paragraphFormat)) {\n var firstLineIndent = -HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n this.viewer.updateClientWidth(firstLineIndent);\n }\n do {\n lineToLayout = this.layoutLine(lineToLayout, 0);\n paragraph = lineToLayout.paragraph;\n lineToLayout = lineToLayout.nextLine;\n } while (lineToLayout);\n this.updateWidgetToPage(this.viewer, paragraph);\n }\n this.viewer.updateClientAreaForBlock(paragraph, false);\n this.layoutNextItemsBlock(paragraph, this.viewer);\n var prevWidget = paragraph.getSplitWidgets()[0].previousRenderedWidget;\n if (!isNullOrUndefined(prevWidget) && !paragraph.isEndsWithPageBreak && !paragraph.isEndsWithColumnBreak && (!(prevWidget instanceof ParagraphWidget) ||\n (prevWidget instanceof ParagraphWidget) && !prevWidget.isEndsWithPageBreak && !prevWidget.isEndsWithColumnBreak)) {\n this.viewer.cutFromTop(paragraph.y + paragraph.height);\n if (paragraph.containerWidget !== prevWidget.containerWidget && !isNullOrUndefined(prevWidget.containerWidget)) {\n /* eslint-disable-next-line max-len */\n var prevBodyWidget = paragraph.containerWidget;\n var newBodyWidget_1 = prevWidget.containerWidget;\n var footWidgets = this.getFootNoteWidgetsOf(paragraph);\n //this.updateContainerWidget(paragraph as Widget, newBodyWidget, prevWidget.indexInOwner + 1, false);\n if (!isNullOrUndefined(newBodyWidget_1.page.footnoteWidget)) {\n this.moveFootNotesToPage(footWidgets, newBodyWidget_1, prevBodyWidget);\n }\n }\n }\n var page = this.documentHelper.pages.length;\n var lastPage = this.documentHelper.pages[page - 1];\n var foot;\n var newBodyWidget = lastPage.bodyWidgets[lastPage.bodyWidgets.length - 1];\n if ((this.documentHelper.owner.editorModule.isFootnoteElementRemoved || this.isFootnoteContentChanged)\n && !isNullOrUndefined(paragraph.bodyWidget.page.footnoteWidget)) {\n foot = paragraph.bodyWidget.page.footnoteWidget;\n this.layoutfootNote(foot);\n }\n if (!isNullOrUndefined(this.viewer.owner.editorHistoryModule) && this.viewer.owner.editorHistoryModule.isRedoing && !isNullOrUndefined(newBodyWidget.page.endnoteWidget)) {\n this.isEndnoteContentChanged = true;\n }\n if ((this.documentHelper.owner.editorModule.isEndnoteElementRemoved || this.isEndnoteContentChanged)\n && !isNullOrUndefined(newBodyWidget.page.endnoteWidget)) {\n foot = newBodyWidget.page.endnoteWidget;\n var clientArea = this.viewer.clientArea.clone();\n var clientActiveArea = this.viewer.clientActiveArea.clone();\n var lastPageLastPara = newBodyWidget.childWidgets[newBodyWidget.childWidgets.length - 1];\n var y = lastPageLastPara.y + lastPageLastPara.height;\n this.viewer.clientActiveArea.height = this.viewer.clientActiveArea.bottom - y;\n this.viewer.clientActiveArea.x = this.viewer.clientArea.x;\n this.viewer.clientActiveArea.width = this.viewer.clientArea.width;\n this.viewer.clientActiveArea.y = y;\n this.layoutfootNote(foot);\n this.viewer.clientArea = clientArea;\n this.viewer.clientActiveArea = clientActiveArea;\n //this.viewer.updateClientAreaForBlock(foot.block, false);\n }\n if (!isNullOrUndefined(this.viewer.owner.editorHistoryModule) && this.viewer.owner.editorHistoryModule.isRedoing) {\n this.isEndnoteContentChanged = false;\n }\n };\n //#endregion\n //RTL Feature layout start\n Layout.prototype.isContainsRtl = function (lineWidget) {\n if (this.viewer.documentHelper.isSelectionChangedOnMouseMoved && !this.isDocumentContainsRtl) {\n return false;\n }\n var isContainsRTL = false;\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof TextElementBox) {\n isContainsRTL = lineWidget.children[i].characterFormat.bidi || lineWidget.children[i].characterFormat.bdo === 'RTL'\n || this.documentHelper.textHelper.isRTLText(lineWidget.children[i].text);\n if (isContainsRTL) {\n if (!this.isDocumentContainsRtl) {\n this.isDocumentContainsRtl = isContainsRTL;\n }\n break;\n }\n }\n }\n return isContainsRTL;\n };\n // Re arranges the elements for Right to left layotuing.\n /* eslint-disable */\n // public reArrangeElementsForRtl(line: LineWidget, isParaBidi: boolean): void {\n // if (line.children.length === 0) {\n // return;\n // }\n // let lastAddedElementIsRtl: boolean = false;\n // let lastAddedRtlElementIndex: number = -1;\n // let tempElements: ElementBox[] = [];\n // for (let i: number = 0; i < line.children.length; i++) {\n // let element: ElementBox = line.children[i];\n // let elementCharacterFormat: WCharacterFormat = undefined;\n // if (element.characterFormat) {\n // elementCharacterFormat = element.characterFormat;\n // }\n // let isRtl: boolean = false;\n // let text: string = '';\n // let containsSpecchrs: boolean = false;\n // if (element instanceof BookmarkElementBox) {\n // if (isParaBidi) {\n // if (lastAddedElementIsRtl || element.bookmarkType === 0 && element.nextElement\n // && element.nextElement.nextElement instanceof TextElementBox\n // && this.documentHelper.textHelper.isRTLText(element.nextElement.nextElement.text)\n // || element.bookmarkType === 1 && element.nextElement instanceof TextElementBox\n // && this.documentHelper.textHelper.isRTLText(element.nextElement.text)) {\n // tempElements.splice(0, 0, element);\n // } else {\n // tempElements.splice(lastAddedElementIsRtl ? lastAddedRtlElementIndex : lastAddedRtlElementIndex + 1, 0, element);\n // }\n // lastAddedRtlElementIndex = tempElements.indexOf(element);\n // } else {\n // tempElements.push(element);\n // }\n // continue;\n // }\n // if (element instanceof TextElementBox) {\n // text = (element as TextElementBox).text;\n // containsSpecchrs = this.documentHelper.textHelper.containsSpecialCharAlone(text.trim());\n // if (containsSpecchrs) {\n // if (elementCharacterFormat.bidi && isParaBidi) {\n // text = HelperMethods.reverseString(text);\n // for (let k: number = 0; k < text.length; k++) {\n // let ch: string = this.documentHelper.textHelper.inverseCharacter(text.charAt(k));\n // text = text.replace(text.charAt(k), ch);\n // }\n // element.text = text;\n // }\n // }\n // let textElement: ElementBox = element.nextElement;\n // if (element instanceof TextElementBox && this.documentHelper.textHelper.containsNumberAlone(element.text.trim())) {\n // while (textElement instanceof TextElementBox && textElement.text.trim() !== '' && (this.documentHelper.textHelper.containsNumberAlone(textElement.text.trim()) || this.documentHelper.textHelper.containsSpecialCharAlone(textElement.text.trim()))) {\n // element.text = element.text + textElement.text;\n // element.line.children.splice(element.line.children.indexOf(textElement), 1);\n // textElement = element.nextElement;\n // }\n // element.width = this.documentHelper.textHelper.getTextSize(element as TextElementBox, element.characterFormat);\n // }\n // }\n // let isRTLText: boolean = false;\n // // let isNumber: boolean = false;\n // // The list element box shold be added in the last position in line widget for the RTL paragraph \n // // and first in the line widget for LTR paragrph.\n // if (element instanceof ListTextElementBox) {\n // isRtl = isParaBidi;\n // } else { // For Text element box we need to check the character format and unicode of text to detect the RTL text. \n // isRTLText = this.documentHelper.textHelper.isRTLText(text);\n // isRtl = isRTLText || elementCharacterFormat.bidi\n // || elementCharacterFormat.bdo === 'RTL';\n // }\n // if (element instanceof FieldElementBox || this.isRtlFieldCode) {\n // if ((element as FieldElementBox).fieldType === 0) {\n // this.isRtlFieldCode = true;\n // } else if ((element as FieldElementBox).fieldType === 1) {\n // this.isRtlFieldCode = false;\n // }\n // isRtl = false;\n // }\n // // If the text element box contains only whitespaces, then need to check the previous and next elements.\n // if (!isRtl && !isNullOrUndefined(text) && text !== '' && ((text !== '' && text.trim() === '') || containsSpecchrs)) {\n // let elements: ElementBox[] = line.children;\n // //Checks whether the langugae is RTL.\n // if (elementCharacterFormat.bidi) {\n // // If the last added element is rtl then current text element box also considered as RTL for WhiteSpaces.\n // if (lastAddedElementIsRtl) {\n // isRtl = true;\n // // Else, Check for next element.\n // } else if (i + 1 < line.children.length && line.children[i + 1] instanceof TextElementBox) {\n // text = (elements[i + 1] as TextElementBox).text;\n // isRtl = this.documentHelper.textHelper.isRTLText(text) || elements[i + 1].characterFormat.bidi\n // || elements[i + 1].characterFormat.bdo === 'RTL';\n // }// If the last added element is rtl then current text element box also considered as RTL for WhiteSpaces.\n // } else if (lastAddedElementIsRtl) {\n // isRtl = true;\n // }\n // }\n // // Preserve the isRTL value, to reuse it for navigation and selection.\n // element.isRightToLeft = isRtl;\n // //Adds the text element to the line\n // if (isRtl && elementCharacterFormat.bdo !== 'LTR') {\n // if (lastAddedElementIsRtl) {\n // tempElements.splice(lastAddedRtlElementIndex, 0, element);\n // } else {\n // if (!isParaBidi) {\n // tempElements.push(element);\n // } else {\n // tempElements.splice(0, 0, element);\n // }\n // lastAddedElementIsRtl = true;\n // lastAddedRtlElementIndex = tempElements.indexOf(element);\n // }\n // } else {\n // if (lastAddedElementIsRtl && element instanceof ImageElementBox) {\n // if (elementCharacterFormat.bidi) {\n // tempElements.splice(lastAddedRtlElementIndex + 1, 0, element);\n // } else {\n // tempElements.splice(lastAddedRtlElementIndex, 0, element);\n // }\n // } else {\n // if (!isParaBidi) {\n // tempElements.push(element);\n // } else {\n // if (lastAddedElementIsRtl) {\n // tempElements.splice(0, 0, element);\n // } else {\n // tempElements.splice(lastAddedRtlElementIndex + 1, 0, element);\n // }\n // lastAddedRtlElementIndex = tempElements.indexOf(element);\n // }\n // lastAddedElementIsRtl = false;\n // }\n // }\n // }\n // // Clear the elemnts and reassign the arranged elements.\n // line.children = [];\n // line.children = tempElements;\n // }\n Layout.prototype.shiftElementsForRTLLayouting = function (line, paraBidi) {\n ////Check whether span has bidi value\n var textRangeBidi = this.hasTextRangeBidi(line);\n if (this.isContainsRTLText(line) || paraBidi || textRangeBidi) {\n ////Splits the child elements of a line by consecutive RTL, LTR text and word breaking characters.\n var characterRangeTypes = [];\n var lineElementsBidiValues = [];\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n if (element instanceof TextElementBox && element.height > 0 && !(element.isPageBreak) && element.text !== '\\v') {\n var textRange = element;\n lineElementsBidiValues.push(textRange.characterFormat.bidi);\n if (textRange.text == \"\\t\") {\n characterRangeTypes.push(CharacterRangeType.Tab);\n }\n else {\n characterRangeTypes.push(textRange.characterRange);\n }\n element.isRightToLeft = characterRangeTypes[characterRangeTypes.length - 1] == CharacterRangeType.RightToLeft;\n }\n else if (element instanceof CommentCharacterElementBox\n || element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox\n || element instanceof EditRangeEndElementBox || element instanceof ContentControl\n || element instanceof FieldElementBox) {\n var isStartMark = this.isStartMarker(element);\n var isEndMark = this.isEndMarker(element);\n if (isStartMark && i < line.children.length - 1) {\n var nextltWidget = this.getNextValidWidget(i + 1, line);\n if (!isNullOrUndefined(nextltWidget) && (nextltWidget instanceof TextElementBox)\n && nextltWidget.height > 0) {\n var textRange = nextltWidget;\n lineElementsBidiValues.push(textRange.characterFormat.bidi);\n //Since tab-stop in the line changes the reordering, here we consider an tab-stop widget as Tab.\n if (nextltWidget.text === '\\t') {\n characterRangeTypes.push(CharacterRangeType.Tab);\n }\n else {\n characterRangeTypes.push(textRange.characterRange);\n }\n }\n else {\n lineElementsBidiValues.push(false);\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n }\n else if (!isEndMark && i > 0) {\n lineElementsBidiValues.push(lineElementsBidiValues[lineElementsBidiValues.length - 1]);\n characterRangeTypes.push(characterRangeTypes[characterRangeTypes.length - 1]);\n }\n else {\n lineElementsBidiValues.push(false);\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n }\n else if (element instanceof ListTextElementBox && paraBidi) {\n lineElementsBidiValues.push(paraBidi);\n characterRangeTypes.push(CharacterRangeType.RightToLeft);\n }\n else {\n lineElementsBidiValues.push(false);\n characterRangeTypes.push(CharacterRangeType.LeftToRight);\n }\n }\n ////Sets CharacterRangeType of word split characters as (WordSplit | RTL), if word split characters are present between splitted RTL text in the same layouted line.\n ////This code handles for both single and multiple Text Ranges of a line (Special case for ordering elements)\n var rtlStartIndex = -1;\n var isPrevLTRText = undefined;\n for (var i = 0; i < characterRangeTypes.length; i++) {\n if (i + 1 < lineElementsBidiValues.length\n && lineElementsBidiValues[i] != lineElementsBidiValues[i + 1]) {\n if (rtlStartIndex != -1) {\n this.updateCharacterRange(line, i, rtlStartIndex, lineElementsBidiValues, characterRangeTypes);\n rtlStartIndex = -1;\n }\n isPrevLTRText = null;\n continue;\n }\n /// When only one NumberNonReversingCharacter(.:,) is exists in between a two numbers and \n /// both these number and NumberNonReversingCharacter having a Bidi property,\n /// MS Word consider this NumberNonReversingCharacter(.:,) as Number and re-order it accordingly.\n if (i > 0 && i != characterRangeTypes.length - 1\n && characterRangeTypes[i] == CharacterRangeType.WordSplit && lineElementsBidiValues[i]\n && characterRangeTypes[i - 1] == CharacterRangeType.Number && lineElementsBidiValues[i - 1]\n && characterRangeTypes[i + 1] == CharacterRangeType.Number && lineElementsBidiValues[i + 1]\n && this.isNumberNonReversingCharacter(line.children[i])) {\n characterRangeTypes[i] = CharacterRangeType.Number;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.RightToLeft || characterRangeTypes[i] == CharacterRangeType.LeftToRight\n || characterRangeTypes[i] == CharacterRangeType.Number && rtlStartIndex != -1\n || (isNullOrUndefined(isPrevLTRText) || !isPrevLTRText) && lineElementsBidiValues[i]) {\n if (rtlStartIndex == -1 && characterRangeTypes[i] != CharacterRangeType.LeftToRight) {\n rtlStartIndex = i;\n }\n else if (rtlStartIndex == -1) {\n if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n isPrevLTRText = true;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.RightToLeft) {\n isPrevLTRText = false;\n }\n continue;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n this.updateCharacterRange(line, i, rtlStartIndex, lineElementsBidiValues, characterRangeTypes);\n rtlStartIndex = characterRangeTypes[i] == CharacterRangeType.RightToLeft\n || characterRangeTypes[i] == CharacterRangeType.Number && rtlStartIndex != -1 ? i : -1;\n }\n }\n if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n isPrevLTRText = true;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.RightToLeft) {\n isPrevLTRText = false;\n }\n }\n if (rtlStartIndex != -1 && rtlStartIndex < characterRangeTypes.length - 1) {\n this.updateCharacterRange(line, characterRangeTypes.length - 1, rtlStartIndex, lineElementsBidiValues, characterRangeTypes);\n rtlStartIndex = -1;\n }\n if (characterRangeTypes.length != line.children.length) {\n ////This exception is thrown to avoid, unhandled exception in RTL/LTR reordering logic.\n throw new Error(\"Splitted Widget count mismatch while reordering layouted child widgets of a line\");\n }\n var reorderedWidgets = this.reorderElements(line, characterRangeTypes, lineElementsBidiValues, paraBidi);\n lineElementsBidiValues.length = 0;\n characterRangeTypes.length = 0;\n if (line.children.length > 0) {\n line.layoutedElements = reorderedWidgets;\n //elements.Clear();\n //line.children = reorderedWidgets;\n ////ReCalculate the height and baseline offset once again.\n //UpdateMaxElement();\n }\n }\n return paraBidi;\n };\n Layout.prototype.isNumberNonReversingCharacter = function (element) {\n if (element instanceof TextElementBox) {\n var textRange = element;\n if (textRange.characterFormat.hasValueWithParent('localeIdBidi')) {\n //Only these 10 word split characters (‘/’,‘:’,‘.’,‘,’,‘،’,‘#’,‘$’,‘%’,‘+’,‘-’) are behaving as number non reversing character based on language identifier.\n var ch = textRange.text.charCodeAt(0);\n //(‘/’) character is behaves as number non reversing character for some specific language identifiers.\n if ((ch == 47 && !this.isNumberReverseLangForSlash(textRange.characterFormat.localeIdBidi))\n //(‘#’,‘$’,‘%’,‘+’,‘-’) characters are behaving as number non reversing character for some specific language identifiers.\n || ((ch == 35 || ch == 36 || ch == 37 || ch == 43 || ch == 45) && !this.isNumberReverseLangForOthers(textRange.characterFormat.localeIdBidi))\n //(‘,’,‘.’,‘:’,‘،’) characters are behaving as number non reversing character for any language identifier.\n || (ch == 44 || ch == 46 || ch == 58 || ch == 1548)) {\n return true;\n }\n }\n else {\n return TextHelper.isNumberNonReversingCharacter(textRange.text, textRange.characterFormat.bidi);\n }\n }\n return false;\n };\n Layout.prototype.isNumberReverseLangForSlash = function (lang) {\n return (this.isNumberReverseLangForOthers(lang) || lang == 6145 || lang == 1164 || lang == 1125 ||\n lang == 1120 || lang == 1123 || lang == 1065 || lang == 2137 ||\n lang == 1114 || lang == 1119 || lang == 1152 || lang == 1056);\n };\n Layout.prototype.isNumberReverseLangForOthers = function (lang) {\n return (lang == 14337 || lang == 15361 || lang == 5121 || lang == 3073 || lang == 2049 ||\n lang == 11265 || lang == 13313 || lang == 12289 || lang == 4097 || lang == 8193 ||\n lang == 16385 || lang == 1025 || lang == 10241 || lang == 7169 || lang == 9217);\n };\n Layout.prototype.isStartMarker = function (element) {\n if (element instanceof CommentCharacterElementBox) {\n return element.commentType === 0;\n }\n else if (element instanceof BookmarkElementBox) {\n return element.bookmarkType === 0;\n }\n else if (element instanceof EditRangeStartElementBox) {\n return true;\n }\n else if (element instanceof ContentControl) {\n return element.type === 0;\n }\n else if (element instanceof FieldElementBox) {\n return element.fieldType === 0;\n }\n return false;\n };\n Layout.prototype.isEndMarker = function (element) {\n if (element instanceof CommentCharacterElementBox) {\n return element.commentType === 1;\n }\n else if (element instanceof BookmarkElementBox) {\n return element.bookmarkType === 1;\n }\n else if (element instanceof EditRangeStartElementBox) {\n return true;\n }\n else if (element instanceof ContentControl) {\n return element.type === 1;\n }\n else if (element instanceof FieldElementBox) {\n return element.fieldType === 1;\n }\n return false;\n };\n Layout.prototype.getNextValidWidget = function (startIndex, layoutedWidgets) {\n for (var i = startIndex; i < layoutedWidgets.children.length; i++) {\n var element = layoutedWidgets.children[i];\n if (element instanceof CommentCharacterElementBox\n || element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox\n || element instanceof EditRangeEndElementBox || element instanceof ContentControl\n || element instanceof FieldElementBox) {\n continue;\n }\n else {\n return element[i];\n }\n }\n return null;\n };\n Layout.prototype.hasTextRangeBidi = function (line) {\n for (var i = 0; i < line.children.length; i++) {\n var elementBox = line.children[i];\n if (elementBox instanceof TextElementBox) {\n var textRange = elementBox;\n if (textRange.characterFormat.bidi) {\n return true;\n }\n }\n }\n return false;\n };\n Layout.prototype.isContainsRTLText = function (line) {\n var documentHelper = line.paragraph.bodyWidget.page.documentHelper;\n var textHelper = documentHelper.textHelper;\n var isContainsRTL = false;\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof TextElementBox) {\n isContainsRTL = line.children[i].characterFormat.bidi || line.children[i].characterFormat.bidi == true\n || textHelper.isRTLText(line.children[i].text);\n if (isContainsRTL)\n break;\n }\n }\n return isContainsRTL;\n };\n Layout.prototype.updateCharacterRange = function (line, i, rtlStartIndex, lineElementsBidiValues, characterRangeTypes) {\n var endIndex = i;\n if (!lineElementsBidiValues[i]) {\n if (characterRangeTypes[i] === CharacterRangeType.LeftToRight) {\n endIndex--;\n }\n for (var j = endIndex; j >= rtlStartIndex; j--) {\n if (characterRangeTypes[j] != CharacterRangeType.WordSplit) {\n endIndex = j;\n break;\n }\n }\n }\n for (var j = rtlStartIndex; j <= endIndex; j++) {\n if (characterRangeTypes[j] == CharacterRangeType.WordSplit) {\n characterRangeTypes[j] = CharacterRangeType.RightToLeft | CharacterRangeType.WordSplit;\n var previousIndex = j - 1;\n var nextIndex = j + 1;\n //// Handled a special behavior, When a EastAsia font is \"Times New Roman\" for text range.\n //// Group of word split character is exist in between a RTL characters, MS Word reverse a corresponding word split characters.\n //// So, that we have reverse the word split characters.\n if (previousIndex >= 0 && nextIndex < characterRangeTypes.length\n && characterRangeTypes[previousIndex] == CharacterRangeType.RightToLeft\n && (characterRangeTypes[nextIndex] == CharacterRangeType.RightToLeft || characterRangeTypes[nextIndex] == CharacterRangeType.Number)\n && line.children[j] instanceof TextElementBox) {\n var textRange = line.children[j];\n if (textRange.characterFormat.fontFamilyBidi == \"Times New Roman\") {\n var charArray = textRange.text.split(\"\");\n var reverseArray = charArray.reverse();\n var joinArray = reverseArray.join(\"\");\n textRange.text = joinArray;\n }\n }\n }\n }\n };\n Layout.prototype.reorderElements = function (line, characterRangeTypes, listElementsBidiValues, paraBidi) {\n var insertIndex = 0, lastItemIndexWithoutRTLFlag = -1, consecutiveRTLCount = 0, consecutiveNumberCount = 0;\n var reorderedElements = [];\n var prevCharType = CharacterRangeType.LeftToRight;\n var prevBidi = false;\n for (var i = 0; i < line.children.length; i++) {\n var element = line.children[i];\n var textElement = element;\n textElement.characterRange = characterRangeTypes[i];\n var isRTLText = (textElement.characterRange & CharacterRangeType.RightToLeft) == CharacterRangeType.RightToLeft || textElement.characterRange == CharacterRangeType.Number;\n var isBidi = listElementsBidiValues[i];\n ////If tab-stop is exist with in the line then we have to consider the below behaviours\n if (characterRangeTypes[i] == CharacterRangeType.Tab) {\n if (paraBidi) {\n ////When para bidi is true, reordering is performed until tab stop position and break the reordering and then again reordering is performed for the remaining contents which exist after the tab-stop. \n ////Assume if we have an tab stop in center of the line, then the reordering is performed until the tab stop position and stop and place a tab stop and starts reordering for the remaining contents. \n insertIndex = 0;\n lastItemIndexWithoutRTLFlag = -1;\n consecutiveRTLCount = 0;\n prevCharType = CharacterRangeType.LeftToRight;\n prevBidi = false;\n reorderedElements.splice(insertIndex, 0, element);\n continue;\n }\n else if (isBidi) {\n ////If text range bidi is true for the tab stop widget, MS Word does not consider this tab-stop bidi as LTR Bidi and does not shift it as per our reordering. \n ////Instead its consider this widget as non-bidi LTR and do the reordering.\n isBidi = false;\n }\n }\n if (i > 0 && prevBidi != isBidi) {\n if (paraBidi) {\n ////If Bidi of paragraph is true, then start inserting widgets from first (index 0).\n insertIndex = 0;\n lastItemIndexWithoutRTLFlag = -1;\n consecutiveRTLCount = 0;\n }\n else {\n ////If Bidi of paragraph is false, then start inserting widgets from last (reorderedWidgets.Count).\n lastItemIndexWithoutRTLFlag = reorderedElements.length - 1;\n }\n ////If Bidi for previous and next widget differs, we have to reset consecutive number to 0.\n consecutiveNumberCount = 0;\n }\n if (!isBidi && !isRTLText) {\n if (paraBidi) {\n if (consecutiveRTLCount > 0 && prevBidi == isBidi) {\n insertIndex += consecutiveRTLCount;\n }\n reorderedElements.splice(insertIndex, 0, element);\n insertIndex++;\n }\n else {\n reorderedElements.push(element);\n insertIndex = i + 1;\n }\n consecutiveRTLCount = 0;\n lastItemIndexWithoutRTLFlag = paraBidi ? insertIndex - 1 : reorderedElements.length - 1;\n }\n else if (isRTLText || (isBidi && textElement.characterRange == CharacterRangeType.WordSplit\n && (prevCharType == CharacterRangeType.RightToLeft || this.isInsertWordSplitToLeft(characterRangeTypes, listElementsBidiValues, i)))) {\n consecutiveRTLCount++;\n insertIndex = lastItemIndexWithoutRTLFlag + 1;\n if (textElement.characterRange == CharacterRangeType.Number) {\n if (prevCharType == CharacterRangeType.Number) {\n ////Moves the insertIndex to the right after the previous consecutive number.\n insertIndex += consecutiveNumberCount;\n }\n ////Increments consecutive number counter, to decide how much position the next number text range (widget) has to be moved and inserted towards right of insertIndex.\n consecutiveNumberCount++;\n }\n reorderedElements.splice(insertIndex, 0, element);\n }\n else {\n reorderedElements.splice(insertIndex, 0, element);\n insertIndex++;\n consecutiveRTLCount = 0;\n }\n if (textElement.characterRange != CharacterRangeType.Number) {\n ////Resets the consecutive number counter when character range is not a number.\n consecutiveNumberCount = 0;\n }\n if (textElement.characterRange != CharacterRangeType.WordSplit) {\n ////Note: Handled to set only CharacterRangeType.RightToLeft and CharacterRangeType.LeftToRight\n ////For CharacterRangeType.WordSplit | CharacterRangeType.RightToLeft case, the IsInsertWordSplitToLeft method will return true.\n prevCharType = textElement.characterRange;\n }\n prevBidi = isBidi;\n }\n return reorderedElements;\n };\n Layout.prototype.isInsertWordSplitToLeft = function (characterRangeTypes, lineElementsBidiValues, elementIndex) {\n for (var i = elementIndex + 1; i < characterRangeTypes.length; i++) {\n if ((characterRangeTypes[i] & CharacterRangeType.RightToLeft) == CharacterRangeType.RightToLeft) {\n return true;\n }\n else if (characterRangeTypes[i] == CharacterRangeType.LeftToRight) {\n if (lineElementsBidiValues[i]) {\n return false;\n }\n else {\n ////If bidi is true for previous LTR and bidi is false for next LTR, then insert Word split to before previous inserted widget.\n return true;\n }\n }\n }\n return true;\n };\n Layout.prototype.shiftLayoutFloatingItems = function (paragraph) {\n for (var i = 0; i < paragraph.floatingElements.length; i++) {\n var element = paragraph.floatingElements[i];\n var position = this.getFloatingItemPoints(element);\n var height = position.y - element.y;\n element.x = position.x;\n element.y = position.y;\n if (element instanceof ShapeElementBox) {\n for (var j = 0; j < element.textFrame.childWidgets.length; j++) {\n var block = element.textFrame.childWidgets[j];\n if (block instanceof ParagraphWidget) {\n block.y = block.y + height;\n }\n else if (block instanceof TableWidget) {\n this.shiftChildLocationForTableWidget(block, height);\n }\n }\n }\n }\n };\n //RTL feature layout end\n Layout.prototype.getFloatingItemPoints = function (floatElement) {\n var paragraph = floatElement.line.paragraph;\n var sectionFormat = paragraph.bodyWidget.sectionFormat;\n var indentX = 0;\n var indentY = 0;\n if (paragraph) {\n var leftMargin = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n var rightMargin = HelperMethods.convertPointToPixel(sectionFormat.rightMargin);\n var topMargin = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n var bottomMargin = sectionFormat.bottomMargin > 0 ? HelperMethods.convertPointToPixel(sectionFormat.bottomMargin) : 48;\n var headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n var footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n var pageWidth = HelperMethods.convertPointToPixel(sectionFormat.pageWidth);\n var pageHeight = HelperMethods.convertPointToPixel(sectionFormat.pageHeight);\n var pageClientWidth = pageWidth - (leftMargin + rightMargin);\n var pageClientHeight = pageHeight - topMargin - bottomMargin;\n //Need to consider RTL layout.\n if (paragraph.isInHeaderFooter && sectionFormat.topMargin <= 0) {\n topMargin = Math.abs(topMargin) > 0 ? Math.abs(topMargin)\n : HelperMethods.convertPointToPixel(sectionFormat.headerDistance) + (paragraph.height);\n }\n else {\n topMargin = topMargin > 0 ? topMargin : 48;\n }\n //Update the top margin as text body y position when text body y position exceeds the top margin. \n if (!paragraph.isInHeaderFooter && topMargin < this.viewer.clientArea.y) {\n topMargin = this.viewer.clientArea.y;\n }\n var mIsYPositionUpdated = false;\n var textWrapStyle = 'InFrontOfText';\n //if (textWrapStyle !== 'Inline') {\n var isLayoutInCell = false;\n var vertOrigin = floatElement.verticalOrigin;\n var horzOrigin = floatElement.horizontalOrigin;\n var horzAlignment = floatElement.horizontalAlignment;\n var vertAlignment = floatElement.verticalAlignment;\n var verticalPercent = floatElement.verticalRelativePercent;\n var horizontalPercent = floatElement.horizontalRelativePercent;\n var shapeHeight = floatElement.height;\n //Need to update size width for Horizontal Line when width exceeds client width.\n // if(shape !== null && shape.IsHorizontalRule && size.Width > m_layoutArea.ClientActiveArea.Width)\n // size.Width = m_layoutArea.ClientActiveArea.Width;\n var shapeWidth = floatElement.width;\n var vertPosition = floatElement.verticalPosition;\n var horzPosition = floatElement.horizontalPosition;\n var layoutInCell = floatElement.layoutInCell;\n var heightPercent = floatElement.heightRelativePercent;\n var widthPercent = floatElement.widthRelativePercent;\n var autoShape = void 0;\n if (floatElement instanceof ShapeElementBox) {\n autoShape = floatElement.autoShapeType;\n }\n //Word 2013 Layout picture in table cell even layoutInCell property was False.\n if (paragraph.isInsideTable && layoutInCell) {\n isLayoutInCell = true;\n indentY = this.getVerticalPosition(floatElement, vertPosition, vertOrigin, textWrapStyle);\n indentX = this.getHorizontalPosition(floatElement.width, floatElement, horzAlignment, horzOrigin, horzPosition, textWrapStyle, paragraph.associatedCell.cellFormat.cellWidth);\n }\n else {\n if (this.documentHelper.viewer instanceof WebLayoutViewer) {\n switch (vertOrigin) {\n case 'Line':\n indentY = this.documentHelper.selection.getTop(floatElement.line);\n break;\n default:\n indentY = this.viewer.clientActiveArea.y;\n break;\n }\n switch (horzOrigin) {\n case 'Character':\n indentX = this.viewer.clientActiveArea.x;\n break;\n default:\n switch (horzAlignment) {\n case 'Center':\n indentX = (this.viewer.clientArea.width / 2) - (floatElement.width / 2);\n break;\n default:\n indentX = this.viewer.clientArea.x;\n break;\n }\n break;\n }\n }\n else {\n if (mIsYPositionUpdated) { /* Upadte the Y Coordinate of floating image when floating image postion is changed based on the wrapping style. */\n indentY = this.viewer.clientArea.y;\n }\n else {\n switch (vertOrigin) {\n case 'Page':\n case 'TopMargin':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Top':\n indentY = vertPosition;\n break;\n case 'Center':\n if (vertOrigin === 'TopMargin') {\n indentY = (topMargin - shapeHeight) / 2;\n }\n else {\n if (heightPercent > 0 && widthPercent > 0) {\n indentY = (pageHeight - (pageHeight) * (heightPercent / 100)) / 2;\n floatElement.height = (pageHeight) * (heightPercent / 100);\n }\n else {\n indentY = (pageHeight - shapeHeight) / 2;\n }\n }\n break;\n case 'Outside':\n case 'Bottom':\n if (vertOrigin === 'Page' && vertAlignment === 'Bottom') {\n indentY = pageHeight - shapeHeight;\n }\n else {\n if (vertOrigin === 'TopMargin') {\n indentY = (topMargin - shapeHeight);\n }\n else if ((paragraph.bodyWidget.page.index + 1) % 2 !== 0) {\n indentY = pageHeight - shapeHeight - footerDistance / 2;\n }\n else {\n indentY = headerDistance / 2;\n }\n }\n break;\n case 'Inside':\n if (vertOrigin === 'Page') {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - shapeHeight - footerDistance / 2;\n }\n else {\n indentY = headerDistance / 2;\n }\n }\n else {\n //Need to ensure this behaviour.\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = ((topMargin - shapeHeight) / 2 - headerDistance);\n }\n }\n break;\n case 'None':\n if (Math.abs(verticalPercent) <= 1000) {\n indentY = pageHeight * (verticalPercent / 100);\n }\n else {\n indentY = vertPosition;\n }\n break;\n }\n break;\n case 'Line':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Inside':\n case 'Top':\n //Need to update line widget height instead of client active area.\n indentY = this.viewer.clientActiveArea.y;\n break;\n case 'Center':\n indentY = this.viewer.clientActiveArea.y - shapeHeight / 2;\n break;\n case 'Outside':\n case 'Bottom':\n indentY = this.viewer.clientActiveArea.y - shapeHeight;\n break;\n case 'None':\n indentY = Math.round(paragraph.y) + vertPosition;\n break;\n }\n break;\n case 'BottomMargin':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Inside':\n case 'Top':\n indentY = (pageHeight - bottomMargin);\n break;\n case 'Center':\n indentY = pageHeight - bottomMargin + ((bottomMargin - shapeHeight) / 2);\n break;\n case 'Outside':\n case 'Bottom':\n if (paragraph.bodyWidget.page.index + 1 % 2 !== 0 && vertAlignment === 'Outside') {\n indentY = pageHeight - bottomMargin;\n }\n else {\n indentY = pageHeight - shapeHeight;\n }\n break;\n case 'None':\n indentY = pageHeight - bottomMargin + vertPosition;\n break;\n }\n break;\n case 'InsideMargin':\n case 'OutsideMargin':\n indentY = vertPosition;\n switch (vertAlignment) {\n case 'Inside':\n if (vertOrigin === 'InsideMargin') {\n if (vertOrigin === 'InsideMargin' && paragraph.bodyWidget.page.index + 1 % 2 === 0) {\n indentY = pageHeight - shapeHeight;\n }\n else {\n indentY = 0;\n }\n }\n else {\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? pageHeight - bottomMargin : topMargin - shapeHeight;\n }\n break;\n case 'Top':\n if (vertOrigin === 'InsideMargin') {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - bottomMargin;\n }\n else {\n indentY = 0;\n }\n }\n else {\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? pageHeight - bottomMargin : 0;\n }\n break;\n case 'Center':\n if (vertOrigin === 'OutsideMargin') {\n //Need to ensure this.\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? pageHeight - bottomMargin + (bottomMargin - shapeHeight) / 2 : (topMargin - shapeHeight) / 2;\n }\n else {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - bottomMargin + (bottomMargin - shapeHeight) / 2;\n }\n else {\n indentY = (topMargin - shapeHeight) / 2;\n }\n }\n break;\n case 'Outside':\n if (vertOrigin === 'InsideMargin') {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = (pageHeight - bottomMargin);\n }\n else {\n indentY = (topMargin - shapeHeight);\n }\n }\n else {\n indentY = (paragraph.bodyWidget.page.index + 1) % 2 !== 0 ? topMargin - shapeHeight : pageHeight - bottomMargin;\n }\n break;\n case 'Bottom':\n if (vertOrigin === 'OutsideMargin') {\n indentY = (paragraph.bodyWidget.page.index + 1) !== 0 ? pageHeight - shapeHeight : topMargin - shapeHeight;\n }\n else {\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = pageHeight - shapeHeight;\n }\n else {\n indentY = topMargin - shapeHeight;\n }\n }\n break;\n case 'None':\n break;\n }\n break;\n case 'Paragraph':\n var space = 0;\n //let prevsibling: BlockWidget = paragraph.previousWidget as BlockWidget;\n // if (floatElement) {\n // //Need to handle DocIO Implementation.\n // if (Math.round(paragraph.y) !== Math.round(topMargin) && (prevsibling instanceof ParagraphWidget)\n // && ((paragraph.paragraphFormat.beforeSpacing > prevsibling.paragraphFormat.afterSpacing)\n // || (prevsibling.paragraphFormat.afterSpacing < 14)\n // && !paragraph.paragraphFormat.contextualSpacing)) {\n // space = prevsibling.paragraphFormat.afterSpacing;\n // }\n // }\n // eslint-disable-next-line max-len\n //Floating item Y position is calculated from paragraph original Y position not from wrapped paragraph Y(ParagraphLayoutInfo.YPosition) position.\n indentY = Math.round(paragraph.y) + space + vertPosition;\n break;\n case 'Margin':\n //If header distance is more than top margin, then calculate the position of item based on header distance.\n //As per Microsoft Word behavior, it is need to consider paragraph height along with the distance.\n if (paragraph.isInHeaderFooter && headerDistance > topMargin) {\n //Need to udpate.\n indentY = (headerDistance + (paragraph.height)) + vertPosition;\n }\n else {\n indentY = topMargin + vertPosition;\n }\n switch (vertAlignment) {\n case 'Top':\n indentY = topMargin;\n break;\n case 'Center':\n indentY = topMargin + (pageClientHeight - shapeHeight) / 2;\n break;\n case 'Outside':\n case 'Bottom':\n if ((paragraph.bodyWidget.page.index + 1) % 2 !== 0) {\n indentY = topMargin + pageClientHeight - shapeHeight;\n }\n else {\n indentY = topMargin;\n }\n break;\n case 'Inside':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentY = topMargin + pageClientHeight - shapeHeight;\n }\n else {\n indentY = topMargin;\n }\n break;\n case 'None':\n break;\n }\n break;\n default:\n //Need to analyze further.\n indentY = this.viewer.clientArea.y - vertPosition;\n break;\n }\n }\n // if (horzOrigin !== 'Column' && horzAlignment !== 'None') {\n // indentX = this.viewer.clientArea.x;\n // //Update the floating item x position to zero when floating item’s width\n // //exceeds the page width when floating item and it wrapping style is not equal to \n // // infront of text and behind text and also vertical origin is not equal to paragraph.\n // } else \n if (paragraph && textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind' &&\n vertOrigin === 'Paragraph' && shapeWidth >= pageWidth) {\n indentX = 0;\n }\n else {\n switch (horzOrigin) {\n case 'Page':\n indentX = horzPosition;\n switch (horzAlignment) {\n case 'Center':\n if (isLayoutInCell) {\n indentX = (paragraph.associatedCell.cellFormat.cellWidth - shapeWidth) / 2;\n }\n else {\n if (heightPercent > 0 && widthPercent > 0) {\n indentX = (pageWidth - (pageWidth) * (widthPercent / 100)) / 2;\n floatElement.width = (pageWidth) * (widthPercent / 100);\n }\n else {\n indentX = (pageWidth - shapeWidth) / 2;\n }\n }\n break;\n case 'Left':\n indentX = 0;\n break;\n case 'Outside':\n case 'Right':\n if (isLayoutInCell) {\n indentX = paragraph.associatedCell.cellFormat.cellWidth - shapeWidth;\n }\n else {\n indentX = pageWidth - shapeWidth;\n }\n break;\n case 'None':\n if (isLayoutInCell) {\n indentX = paragraph.associatedCell.x + horzPosition;\n }\n else if (floatElement instanceof ShapeElementBox) {\n indentX = horzPosition;\n // Shape pItemShape = paraItem as Shape;\n // float horRelPercent = pItemShape !== null ? pItemShape.TextFrame.HorizontalRelativePercent\n // : (paraItem as WTextBox).TextBoxFormat.HorizontalRelativePercent;\n // if (Math.Abs(horRelPercent) <= 1000)\n // indentX = pageWidth * (horRelPercent / 100);\n // else\n // indentX = pItemShape !== null ? pItemShape.HorizontalPosition\n // : (paraItem as WTextBox).TextBoxFormat.HorizontalPosition;\n }\n else {\n indentX = horzPosition;\n }\n break;\n }\n if (indentX < 0 && isLayoutInCell) {\n indentX = paragraph.associatedCell.x;\n }\n break;\n case 'Column':\n var isXPositionUpated = false;\n //Update the Xposition while wrapping element exsit in the paragraph\n if (this.viewer.clientActiveArea.x < paragraph.x) {\n // let cellPadings = 0;\n // if (paragraph.isInsideTable) {\n // CellLayoutInfo cellLayoutInfo = (ownerPara.GetOwnerEntity() as IWidget).LayoutInfo as CellLayoutInfo;\n // cellPadings = cellLayoutInfo.Paddings.Left + cellLayoutInfo.Paddings.Right;\n // }\n // float minimumWidthRequired = DEF_MIN_WIDTH_SQUARE;\n // if (textWrapStyle === TextWrappingStyle.Tight || textWrapStyle === TextWrappingStyle.Through)\n // minimumWidthRequired = ownerPara.Document.Settings.CompatibilityMode === CompatibilityMode.Word2013 ?\n // DEF_MIN_WIDTH_2013_TIGHTANDTHROW : DEF_MIN_WIDTH_TIGHTANDTHROW;\n // minimumWidthRequired -= cellPadings;\n // //Re Update the x position to the page left when paragraph starting position not equal to the \n // //column starting and current inline item is x position equal to the column left position.\n // if ((ownerPara.IsXpositionUpated && ownerPara.Document.Settings.CompatibilityMode === CompatibilityMode.Word2013)\n // || paragraphLayoutInfo.XPosition > (pageWidth - minimumWidthRequired - rightMargin)\n // || paragraphLayoutInfo.IsXPositionReUpdate)\n // indentX = layouter.ClientLayoutArea.Left + horzPosition;\n // else\n indentX = paragraph.x + horzPosition;\n }\n else {\n //Re Update the x position to the page left when word version not equal to 2013 \n //and wrapping style not equal to infront of text and behind text. \n if ((textWrapStyle === 'InFrontOfText' || textWrapStyle === 'Behind')) {\n if (!(floatElement.paragraph.isInsideTable) && ((autoShape === 'StraightConnector' || autoShape === 'Rectangle') || floatElement instanceof ImageElementBox)) {\n isXPositionUpated = true;\n indentX = horzPosition + paragraph.bodyWidget.x;\n }\n else {\n indentX = paragraph.x + horzPosition;\n }\n }\n else {\n indentX = this.viewer.clientActiveArea.x + horzPosition;\n }\n }\n //Update the Wrapping element right position as page right when \n //wrapping element right position exceeds the page right except position \n //InFrontOfText and behindText wrapping style.\n if (textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind'\n && Math.round(indentX + shapeWidth) > Math.round(pageWidth) && shapeWidth < pageWidth) {\n indentX = (pageWidth - shapeWidth);\n }\n if (paragraph.paragraphFormat.leftIndent && !isXPositionUpated) {\n var leftIndent = HelperMethods.convertPointToPixel(paragraph.leftIndent);\n indentX -= leftIndent;\n }\n switch (horzAlignment) {\n case 'Center':\n indentX = this.viewer.clientActiveArea.x + (this.viewer.clientActiveArea.width - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = this.viewer.clientActiveArea.x;\n break;\n case 'Right':\n indentX = this.viewer.clientActiveArea.x + this.viewer.clientActiveArea.width - shapeWidth; //- TextBoxFormat.InternalMargin.Right;\n break;\n case 'None':\n break;\n }\n break;\n case 'Margin':\n if (paragraph.bodyWidget) {\n indentX = leftMargin + horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = leftMargin + (pageClientWidth - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = leftMargin;\n break;\n case 'Outside':\n if ((paragraph.bodyWidget.page.index + 1) % 2 !== 0) {\n indentX = leftMargin + pageClientWidth - shapeWidth;\n }\n break;\n case 'Right':\n indentX = leftMargin + pageClientWidth - shapeWidth;\n break;\n case 'Inside':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentX = leftMargin + pageClientWidth - shapeWidth;\n }\n break;\n case 'None':\n break;\n }\n }\n else {\n indentX = this.viewer.clientArea.x + horzPosition;\n }\n break;\n case 'Character':\n if (horzAlignment === 'Right' || horzAlignment === 'Center') {\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n else {\n //Need to update this while layouting.**\n indentX = this.viewer.clientArea.x + horzPosition;\n }\n break;\n case 'LeftMargin':\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n break;\n case 'RightMargin':\n indentX = this.getRightMarginHorizPosition(pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n break;\n case 'InsideMargin':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentX = this.getRightMarginHorizPosition(pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n else {\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n break;\n case 'OutsideMargin':\n if ((paragraph.bodyWidget.page.index + 1) % 2 === 0) {\n indentX = this.getLeftMarginHorizPosition(leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n else {\n indentX = this.getRightMarginHorizPosition(pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle);\n }\n break;\n default:\n indentX = this.viewer.clientArea.x + horzPosition;\n break;\n }\n }\n //Update the floating item right position to the page right when floating item \n //right position exceeds the page width and it wrapping style is not equal to \n // InFrontOfText and behind text and also vertical origin is not equal to paragraph.\n if (paragraph && textWrapStyle !== 'InFrontOfText'\n && textWrapStyle !== 'Behind' && vertOrigin === 'Paragraph' && pageWidth < indentX + shapeWidth) {\n indentX = pageWidth - shapeWidth;\n }\n }\n }\n if (paragraph && (vertOrigin === 'Paragraph' || vertOrigin === 'Line') && floatElement.textWrappingStyle !== \"InFrontOfText\" && floatElement.textWrappingStyle !== \"Behind\") {\n if (this.documentHelper.compatibilityMode === 'Word2013') {\n if (!paragraph.isInHeaderFooter) {\n if (indentY + floatElement.height > this.viewer.clientArea.bottom) {\n indentY = this.viewer.clientArea.bottom - floatElement.height;\n }\n if (indentY < sectionFormat.topMargin) {\n indentY = sectionFormat.topMargin;\n }\n }\n }\n }\n }\n //}\n return new Point(indentX, indentY);\n };\n Layout.prototype.getLeftMarginHorizPosition = function (leftMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle) {\n var indentX = horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = (leftMargin - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = 0;\n break;\n case 'Right':\n indentX = leftMargin - shapeWidth;\n break;\n case 'None':\n break;\n }\n if (indentX < 0 && textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind') {\n indentX = 0;\n }\n return indentX;\n };\n Layout.prototype.getRightMarginHorizPosition = function (pageWidth, rightMargin, horzAlignment, horzPosition, shapeWidth, textWrapStyle) {\n var xPosition = pageWidth - rightMargin;\n var indentX = xPosition + horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = xPosition + (rightMargin - shapeWidth) / 2;\n break;\n case 'Left':\n indentX = xPosition;\n break;\n case 'Right':\n indentX = pageWidth - shapeWidth;\n break;\n case 'None':\n break;\n }\n if ((indentX < 0 || indentX + shapeWidth > pageWidth) && textWrapStyle !== 'InFrontOfText' && textWrapStyle !== 'Behind') {\n indentX = pageWidth - shapeWidth;\n }\n return indentX;\n };\n Layout.prototype.getVerticalPosition = function (paraItem, vertPosition, vertOrigin, textWrapStyle) {\n var paragraph = paraItem.line.paragraph;\n //ParagraphLayoutInfo paragraphLayoutInfo = (paragraph as IWidget).LayoutInfo as ParagraphLayoutInfo;\n var shape = paraItem;\n //WPicture pic = paraItem as WPicture;\n var indentY = 0;\n var topMargin = paragraph.associatedCell.y;\n switch (vertOrigin) {\n case 'Page':\n case 'Margin':\n case 'TopMargin':\n case 'InsideMargin':\n case 'BottomMargin':\n case 'OutsideMargin':\n indentY = topMargin + vertPosition;\n break;\n case 'Line':\n case 'Paragraph':\n var space = 0;\n // if (shape) {\n // space = paragraph.paragraphFormat.afterSpacing;\n // }\n indentY = paragraph.y + vertPosition + space;\n if (shape.textWrappingStyle == \"Square\") {\n indentY = indentY <= paragraph.associatedCell.y ? paragraph.associatedCell.y : indentY;\n }\n break;\n default:\n indentY = this.viewer.clientActiveArea.y + vertPosition;\n break;\n }\n return indentY;\n };\n Layout.prototype.getHorizontalPosition = function (width, paraItem, horzAlignment, horzOrigin, horzPosition, textWrapStyle, cellWid) {\n var indentX = 0;\n var paragraph = paraItem.line.paragraph;\n // CellLayoutInfo cellLayoutInfo = (paragraph.OwnerTextBody as IWidget).LayoutInfo as CellLayoutInfo;\n // ILayoutSpacingsInfo spacings = cellLayoutInfo as ILayoutSpacingsInfo;\n var cell = paragraph.associatedCell;\n var cellWidth = cellWid - cell.leftMargin - cell.rightMargin;\n var cellInnerWidth = cell.cellFormat.cellWidth;\n var marginLeft = cell.x;\n var pageLeft = marginLeft - cell.leftMargin;\n switch (horzOrigin) {\n case 'Page':\n {\n indentX = horzPosition;\n switch (horzAlignment) {\n case 'Center':\n indentX = pageLeft + (cellWidth - width) / 2;\n break;\n case 'Left':\n indentX = pageLeft;\n break;\n case 'Right':\n indentX = pageLeft + (cellWidth - width);\n break;\n case 'None':\n indentX = pageLeft + horzPosition;\n break;\n }\n }\n break;\n case 'Column':\n case 'Margin':\n {\n switch (horzAlignment) {\n case 'Center':\n indentX = marginLeft + (cellInnerWidth - width) / 2;\n break;\n case 'Left':\n indentX = marginLeft;\n break;\n case 'Right':\n indentX = marginLeft + (cellInnerWidth - width);\n break;\n case 'None':\n indentX = marginLeft + horzPosition;\n break;\n }\n }\n break;\n default:\n {\n indentX = marginLeft + horzPosition;\n }\n break;\n }\n return indentX;\n };\n Layout.prototype.updateTableFloatPoints = function (table) {\n if (table.wrapTextAround) {\n var tableTotalWidth = table.getTableCellWidth();\n var position = table.positioning;\n var sectionFormat = table.bodyWidget.sectionFormat;\n if (this.documentHelper.viewer instanceof WebLayoutViewer) {\n if (position.horizontalOrigin === 'Margin' || position.horizontalOrigin === 'Page' || position.horizontalOrigin === 'Column') {\n if (position.horizontalAlignment === 'Right' || position.horizontalAlignment === 'Outside') {\n this.viewer.clientActiveArea.x = this.viewer.clientArea.width - tableTotalWidth;\n }\n else {\n this.viewer.clientActiveArea.x = this.viewer.clientArea.x;\n }\n }\n }\n else {\n if (!(table.containerWidget instanceof TextFrame) && !table.isInsideTable) {\n // Vertical position\n if (position.verticalOrigin === 'Page') {\n if (position.verticalAlignment === 'Top') {\n this.viewer.clientActiveArea.y = 0;\n }\n else if (position.verticalAlignment === 'Inside') {\n this.viewer.clientActiveArea.y = 0;\n }\n else if (isNullOrUndefined(position.verticalAlignment) || position.verticalAlignment === 'None') {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n else if (position.verticalOrigin === 'Margin') {\n if (position.verticalAlignment === 'Top') {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n }\n else if (position.verticalAlignment === 'Inside') {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n }\n else if (Math.round(position.verticalPosition) != 0 && !isNullOrUndefined(sectionFormat.topMargin)) {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(sectionFormat.topMargin + position.verticalPosition);\n }\n else {\n this.viewer.clientActiveArea.y = HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n else if (position.verticalOrigin === 'Paragraph') {\n if (isNullOrUndefined(position.verticalAlignment) || position.verticalAlignment === 'None') {\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n if (position.horizontalOrigin === 'Page') {\n if (position.horizontalAlignment === 'Left') {\n this.viewer.clientActiveArea.x = 0;\n }\n else if (position.horizontalAlignment === 'Inside') {\n // TODO\n this.viewer.clientActiveArea.x = 0;\n }\n else if (position.horizontalAlignment === 'Right') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth) - tableTotalWidth;\n }\n else if (position.horizontalAlignment === 'Outside') {\n // TODO\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth) - tableTotalWidth;\n }\n else if (position.horizontalAlignment === 'Center') {\n this.viewer.clientActiveArea.x = (HelperMethods.convertPointToPixel(sectionFormat.pageWidth) - tableTotalWidth) / 2;\n }\n }\n else if (position.horizontalOrigin === 'Margin' || position.horizontalOrigin === 'Column') {\n if (position.horizontalAlignment === 'Left') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n if (this.documentHelper.compatibilityMode !== 'Word2013' && !table.isInsideTable) {\n this.viewer.clientActiveArea.x = this.viewer.clientActiveArea.x -\n HelperMethods.convertPointToPixel(table.firstChild.firstChild.leftMargin);\n }\n }\n else if (position.horizontalAlignment === 'Inside') {\n // TODO\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n }\n else if (position.horizontalAlignment === 'Right') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth)\n - (HelperMethods.convertPointToPixel(sectionFormat.rightMargin) + tableTotalWidth);\n }\n else if (position.horizontalAlignment === 'Outside') {\n // TODO\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.pageWidth)\n - (HelperMethods.convertPointToPixel(sectionFormat.rightMargin) + tableTotalWidth);\n }\n else if (position.horizontalAlignment === 'Center') {\n this.viewer.clientActiveArea.x = HelperMethods.convertPointToPixel(sectionFormat.leftMargin)\n + (HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.rightMargin - sectionFormat.leftMargin) - tableTotalWidth) / 2;\n }\n }\n if (Math.round(position.horizontalPosition) > 0 || (position.horizontalOrigin === 'Margin' && position.horizontalAlignment === 'Left')) {\n this.viewer.clientActiveArea.x += HelperMethods.convertPointToPixel(position.horizontalPosition);\n }\n }\n else if (table.isInsideTable) {\n var ownerCell = table.containerWidget;\n var cellFormat = ownerCell.cellFormat;\n if (position.verticalOrigin === 'Page') {\n this.viewer.clientActiveArea.y = ownerCell.y;\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n else if (position.verticalOrigin === 'Margin') {\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n //Check whether the absolute table vertical position is top relative to the margin\n if (this.viewer.clientActiveArea.y < ownerCell.y || position.verticalAlignment === 'Top') {\n this.viewer.clientActiveArea.y = ownerCell.y;\n }\n }\n else {\n if (this.viewer.clientActiveArea.y + HelperMethods.convertPointToPixel(position.verticalPosition) < ownerCell.y) {\n this.viewer.clientActiveArea.y = ownerCell.y;\n }\n else {\n this.viewer.clientActiveArea.y += HelperMethods.convertPointToPixel(position.verticalPosition);\n }\n }\n if (position.horizontalOrigin === 'Page') {\n if (position.horizontalAlignment === 'Left' || position.horizontalAlignment === 'Inside') {\n this.viewer.clientActiveArea.x = ownerCell.x;\n }\n else if (position.horizontalAlignment === 'Right' || position.horizontalAlignment === 'Outside') {\n this.viewer.clientActiveArea.x = ((ownerCell.x + cellFormat.preferredWidth) - tableTotalWidth);\n }\n }\n else if (position.horizontalOrigin === 'Margin' || position.horizontalOrigin === 'Column') {\n if (position.horizontalAlignment === 'Left' || position.horizontalAlignment === 'Inside') {\n this.viewer.clientActiveArea.x = (ownerCell.x + ownerCell.leftMargin);\n }\n else if (position.horizontalAlignment === 'Right' || position.horizontalAlignment === 'Outside') {\n this.viewer.clientActiveArea.x = ((ownerCell.x + cellFormat.preferredWidth)\n - (tableTotalWidth + ownerCell.rightMargin));\n }\n }\n if (Math.round(position.horizontalPosition) > 0) {\n this.viewer.clientActiveArea.x = ownerCell.x;\n if (position.horizontalOrigin === 'Margin') {\n this.viewer.clientActiveArea.x += ownerCell.leftMargin;\n }\n this.viewer.clientActiveArea.x += HelperMethods.convertPointToPixel(position.horizontalPosition);\n }\n if (position.horizontalAlignment === 'Center') {\n this.viewer.clientActiveArea.x = (cellFormat.preferredWidth / 2) - (tableTotalWidth / 2);\n }\n }\n }\n }\n table.x = this.viewer.clientActiveArea.x;\n table.y = this.viewer.clientActiveArea.y;\n };\n Layout.prototype.isTocField = function (element) {\n if (element instanceof FieldElementBox) {\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') !== -1) {\n return true;\n }\n }\n return false;\n };\n Layout.prototype.getTotalColumnSpan = function (row) {\n var tableRow = row;\n var totalColumnSpan = 0;\n for (var i = 0; i < tableRow.childWidgets.length; i++) {\n totalColumnSpan += tableRow.childWidgets[i].cellFormat.columnSpan;\n }\n return totalColumnSpan;\n };\n Layout.prototype.getMaximumRightCellBorderWidth = function (table) {\n var highestBorderSize = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var cell = row.childWidgets[row.childWidgets.length - 1];\n var cellBorder = cell.cellFormat.borders.right.lineWidth;\n if (highestBorderSize < cellBorder) {\n highestBorderSize = cellBorder;\n }\n }\n return highestBorderSize;\n };\n Layout.prototype.getDefaultBorderSpacingValue = function (border, isBorderValueZero, tableHorizontalPosition) {\n if (border == 0) {\n if (this.documentHelper.compatibilityMode != 'Word2013' && tableHorizontalPosition == 'Center') {\n border = 1.5;\n }\n else {\n border = 0.75;\n }\n return true;\n }\n return isBorderValueZero;\n };\n Layout.prototype.getMinimumWidthRequiredForTable = function (isBorderValueZero, tableHorizontalPosition, border) {\n var minimumWidthRequired = 0;\n //To fit the item right side of the Table Microsoft Word 2013 application and other version has different value based on border of the table and alignment of the table.\n if (this.documentHelper.compatibilityMode == 'Word2013') {\n if (tableHorizontalPosition == 'Center') {\n if (isBorderValueZero) {\n minimumWidthRequired = 18.5 + Math.round(0.75 / 2);\n }\n else {\n minimumWidthRequired = 18.5 + Math.round(border / 2);\n }\n }\n else {\n if (isBorderValueZero) {\n minimumWidthRequired = 18.5 + 0.75;\n }\n else {\n minimumWidthRequired = 18.5 + border;\n }\n }\n }\n else {\n if (tableHorizontalPosition == 'Center') {\n if (isBorderValueZero) {\n minimumWidthRequired = 19.25;\n }\n else {\n minimumWidthRequired = 18.5 + (border / 2);\n }\n }\n else {\n if (border == 0.25) {\n minimumWidthRequired = 18.5;\n }\n else {\n minimumWidthRequired = 19.3;\n }\n }\n }\n return HelperMethods.convertPointToPixel(minimumWidthRequired);\n };\n Layout.prototype.shiftFloatingItemsFromTable = function (table, bodyWidget) {\n if (table.containerWidget instanceof BodyWidget) {\n for (var i = 0; i < table.containerWidget.floatingElements.length; i++) {\n var shape = table.containerWidget.floatingElements[i];\n if (!(shape instanceof TableWidget) && shape.paragraph.containerWidget instanceof TableCellWidget\n && shape.paragraph.containerWidget.ownerTable.containerWidget.ownerTable == table) {\n bodyWidget.floatingElements.push(table.containerWidget.floatingElements[i]);\n table.containerWidget.floatingElements.splice(table.containerWidget.floatingElements.indexOf(table.containerWidget.floatingElements[i]), 1);\n this.shiftedFloatingItemsFromTable.push(shape);\n i--;\n }\n }\n }\n };\n return Layout;\n}());\nexport { Layout };\n","var GLOBAL_ALPHA = 'GA';\nvar GLOBAL_COMPOSITE_OPERATION = 'GCP';\nvar FILL_STYLE = 'FS';\nvar STROKE_STYLE = 'SS';\nvar DIRECTION = 'Dir';\nvar FONT = 'Fn';\nvar TEXT_ALIGN = 'TA';\nvar TEXT_BASE_LINE = 'TBL';\nvar LINE_WIDTH = 'LW';\nvar LINE_CAP = 'LC';\nvar MAX_WIDTH = 'MW';\nvar BEGIN_PATH = 'BP';\nvar CLOSE_PATH = 'CP';\nvar CLIP = 'Cl';\nvar FILL = 'Fl';\nvar STROKE = 'Stk';\nvar LINE_TO = 'LT';\nvar MOVE_TO = 'MT';\nvar SEGMENTS = 'Sgm';\nvar RECT = 'Rt';\nvar CLEAR_RECT = 'CR';\nvar FILL_RECT = 'FR';\nvar STROKE_RECT = 'SR';\nvar RESTORE = 'RES';\nvar SAVE = 'S';\nvar FILL_TEXT = 'FT';\nvar STROKE_TEXT = 'ST';\nvar SCALE = 'SC';\n/**\n * @private\n */\nvar DocumentCanvasElement = /** @class */ (function () {\n function DocumentCanvasElement() {\n this.style = {};\n this.context = new DocumentCanvasRenderingContext2D();\n }\n /**\n * @param {string} contextId - Specifies the type of context to create, 2d or webgl.\n * @param {CanvasRenderingContext2DSettings} options - Specifies the type of context to create, 2d or webgl.\n * @private\n * @returns {CanvasRenderingContext2D} - Returns the canvas rendering context 2D.\n */\n DocumentCanvasElement.prototype.getContext = function (contextId, options) {\n return this.context;\n };\n /**\n * @param {string} type - Specifies the type of image to return.\n * @param {any} quality - A Number between 0 and 1 indicating the image quality to use for image formats that use lossy compression.\n * @private\n * @returns {string} - Returns the data URL containing a representation of the image in the format specified by the type parameter.\n */\n DocumentCanvasElement.prototype.toDataURL = function (type, quality) {\n return this.context.renderedPath;\n };\n return DocumentCanvasElement;\n}());\nexport { DocumentCanvasElement };\n/**\n * @private\n */\nvar DocumentCanvasRenderingContext2D = /** @class */ (function () {\n function DocumentCanvasRenderingContext2D() {\n this.renderedPath = '';\n }\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"globalAlpha\", {\n set: function (value) {\n this.renderedPath += (GLOBAL_ALPHA + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"globalCompositeOperation\", {\n set: function (value) {\n this.renderedPath += (GLOBAL_COMPOSITE_OPERATION + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"fillStyle\", {\n set: function (value) {\n this.renderedPath += (FILL_STYLE + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"strokeStyle\", {\n set: function (value) {\n this.renderedPath += (STROKE_STYLE + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"direction\", {\n set: function (value) {\n this.renderedPath += (DIRECTION + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"font\", {\n set: function (value) {\n this.renderedPath += (FONT + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"textAlign\", {\n set: function (value) {\n this.renderedPath += (TEXT_ALIGN + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"textBaseline\", {\n set: function (value) {\n this.renderedPath += (TEXT_BASE_LINE + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"lineWidth\", {\n set: function (value) {\n this.renderedPath += (LINE_WIDTH + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentCanvasRenderingContext2D.prototype, \"lineCap\", {\n set: function (value) {\n this.renderedPath += (LINE_CAP + ':' + value + ';');\n },\n enumerable: true,\n configurable: true\n });\n DocumentCanvasRenderingContext2D.prototype.drawImage = function (image, sx, sy, sw, sh, dx, dy, dw, dh) {\n this.renderedPath += (LINE_CAP + ':' + image.src + ';');\n this.renderedPath += ('sx:' + sx + ';');\n this.renderedPath += ('sy:' + sy + ';');\n this.renderedPath += ('sw:' + sw + ';');\n this.renderedPath += ('sh:' + sh + ';');\n if (dx) {\n this.renderedPath += ('dx:' + dx + ';');\n }\n if (dy) {\n this.renderedPath += ('dy:' + dy + ';');\n }\n if (dw) {\n this.renderedPath += ('dw:' + dw + ';');\n }\n if (dh) {\n this.renderedPath += ('dh:' + dh + ';');\n }\n };\n DocumentCanvasRenderingContext2D.prototype.beginPath = function () {\n this.renderedPath += (BEGIN_PATH + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.clip = function (fillRule) {\n this.renderedPath += (CLIP + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.fill = function (fillRule) {\n this.renderedPath += (FILL + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.stroke = function () {\n this.renderedPath += (STROKE + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.closePath = function () {\n this.renderedPath += (CLOSE_PATH + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.lineTo = function (x, y) {\n this.renderedPath += (LINE_TO + ':' + 'x:' + x + ';' + 'y:' + y + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.moveTo = function (x, y) {\n this.renderedPath += (MOVE_TO + ':' + 'x:' + x + ';' + 'y:' + y + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.rect = function (x, y, w, h) {\n this.renderedPath += (RECT + ':' + 'x:' + x + ';' + 'y:' + y + ';' + 'w:' + w + ';' + 'h:' + h + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.setLineDash = function (segments) {\n this.renderedPath += (SEGMENTS + ':' + segments.toString() + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.clearRect = function (x, y, w, h) {\n this.renderedPath += (CLEAR_RECT + ':' + 'x:' + x + ';' + 'y:' + y + ';' + 'w:' + w + ';' + 'h:' + h + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.fillRect = function (x, y, w, h) {\n this.renderedPath += (FILL_RECT + ':' + 'x:' + x + ';' + 'y:' + y + ';' + 'w:' + w + ';' + 'h:' + h + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.strokeRect = function (x, y, w, h) {\n this.renderedPath += (STROKE_RECT + ':' + 'x:' + x + ';' + 'y:' + y + ';' + 'w:' + w + ';' + 'h:' + h + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.restore = function () {\n this.renderedPath += (RESTORE + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.save = function () {\n this.renderedPath += (SAVE + ';');\n };\n DocumentCanvasRenderingContext2D.prototype.fillText = function (text, x, y, maxWidth) {\n this.renderedPath += (FILL_TEXT + ':' + text + ';' + 'x:' + x + ';' + 'y:' + y + ';');\n if (maxWidth) {\n this.renderedPath += (MAX_WIDTH + ':' + maxWidth + ';');\n }\n };\n DocumentCanvasRenderingContext2D.prototype.measureText = function (text) {\n return { width: 30 };\n };\n DocumentCanvasRenderingContext2D.prototype.strokeText = function (text, x, y, maxWidth) {\n this.renderedPath += (STROKE_TEXT + ':' + text + ';' + 'x:' + x + ';' + 'y:' + y + ';');\n if (maxWidth) {\n this.renderedPath += (MAX_WIDTH + ':' + maxWidth + ';');\n }\n };\n DocumentCanvasRenderingContext2D.prototype.scale = function (x, y) {\n this.renderedPath += (SCALE + ':' + 'x:' + x + ';' + 'y:' + y + ';');\n };\n return DocumentCanvasRenderingContext2D;\n}());\nexport { DocumentCanvasRenderingContext2D };\n","import { isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { Rect, ImageElementBox, LineWidget, ParagraphWidget, BodyWidget, TextElementBox, HeaderFooterWidget, ListTextElementBox, TableRowWidget, TableWidget, TableCellWidget, FieldElementBox, TabElementBox, BlockWidget, CommentCharacterElementBox, ShapeElementBox, EditRangeStartElementBox, ShapeBase, TextFrame, BookmarkElementBox, EditRangeEndElementBox } from './page';\nimport { Layout } from './layout';\nimport { PageLayoutViewer, WebLayoutViewer } from './viewer';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { CharacterRangeType } from '../../index';\nimport { FontScriptType } from '../../index';\nimport { DocumentCanvasElement } from './document-canvas';\nimport { Dictionary } from '../../base/dictionary';\n/**\n * @private\n */\nvar Renderer = /** @class */ (function () {\n function Renderer(documentHelper) {\n /**\n * @private\n */\n this.commentMarkDictionary = new Dictionary();\n this.isPrinting = false;\n this.isExporting = false;\n this.pageLeft = 0;\n this.pageTop = 0;\n this.pageIndex = -1;\n this.isFieldCode = false;\n this.isRenderHeader = false;\n this.leftPosition = 0;\n this.topPosition = 0;\n this.height = 0;\n this.fieldStacks = [];\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(Renderer.prototype, \"pageCanvas\", {\n get: function () {\n if (this.isPrinting) {\n if (isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn = document.createElement('canvas');\n this.pageCanvasIn.getContext('2d').save();\n }\n return this.pageCanvasIn;\n }\n if (this.isExporting) {\n if (isNullOrUndefined(this.exportPageCanvas)) {\n this.exportPageCanvas = new DocumentCanvasElement();\n }\n return this.exportPageCanvas;\n }\n else {\n return isNullOrUndefined(this.viewer) ? undefined : this.documentHelper.containerCanvas;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"spellChecker\", {\n get: function () {\n return this.documentHelper.owner.spellCheckerModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionCanvas\", {\n get: function () {\n return isNullOrUndefined(this.viewer) ? undefined : this.documentHelper.selectionCanvas;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"pageContext\", {\n get: function () {\n return this.pageCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"selectionContext\", {\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Renderer.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Renderer.prototype.renderWidgets = function (page, left, top, width, height) {\n if (isNullOrUndefined(this.pageCanvas) || isNullOrUndefined(page)) {\n return;\n }\n this.pageContext.fillStyle = HelperMethods.getColor(this.documentHelper.backgroundColor);\n this.pageContext.beginPath();\n if (this.viewer instanceof WebLayoutViewer) {\n height = height > this.documentHelper.visibleBounds.height ? height : this.documentHelper.visibleBounds.height;\n var marginTop = top;\n if (page.index === 0) {\n marginTop = top - this.viewer.padding.top;\n }\n /* eslint-disable-next-line max-len */\n this.pageContext.fillRect(left - this.viewer.padding.left, marginTop, width + this.viewer.padding.left, height + this.viewer.padding.top);\n }\n else {\n this.pageContext.fillRect(left, top, width, height);\n }\n this.pageContext.closePath();\n if (this.viewer instanceof PageLayoutViewer) {\n this.pageContext.strokeStyle = this.documentHelper.owner.pageOutline;\n this.pageContext.strokeRect(left, top, width, height);\n }\n this.pageLeft = left;\n this.pageTop = top;\n this.pageIndex = page.index;\n if (this.isPrinting) {\n this.setPageSize(page);\n }\n else {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(left, top, width, height);\n this.pageContext.clip();\n }\n this.height = height;\n if (page.headerWidget) {\n this.renderHFWidgets(page, page.headerWidgetIn, width, true);\n }\n if (page.footerWidget) {\n this.renderHFWidgets(page, page.footerWidgetIn, width, false);\n }\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n this.render(page, page.bodyWidgets[parseInt(i.toString(), 10)]);\n if (page.footnoteWidget && this.documentHelper.owner.layoutType === 'Pages') {\n this.renderfootNoteWidget(page, page.footnoteWidget, width);\n }\n }\n if (page.endnoteWidget && this.documentHelper.owner.layoutType === 'Pages') {\n this.renderfootNoteWidget(page, page.endnoteWidget, width);\n }\n if (this.documentHelper.owner.enableHeaderAndFooter && !this.isPrinting) {\n this.renderHeaderSeparator(page, this.pageLeft, this.pageTop, page.headerWidgetIn);\n }\n this.pageLeft = 0;\n this.pageTop = 0;\n this.pageContext.restore();\n };\n Renderer.prototype.setPageSize = function (page) {\n this.pageContext.clearRect(0, 0, this.pageCanvas.width, this.pageCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n this.pageContext.restore();\n this.selectionContext.restore();\n var width = page.boundingRectangle.width;\n var height = page.boundingRectangle.height;\n var dpr = Math.max(window.devicePixelRatio, this.documentHelper.owner.documentEditorSettings.printDevicePixelRatio);\n if (this.pageCanvas.width !== width * dpr || this.pageCanvas.height !== height * dpr) {\n this.pageCanvas.height = height * dpr;\n this.pageCanvas.width = width * dpr;\n this.pageCanvas.style.height = height + 'px';\n this.pageCanvas.style.width = width + 'px';\n this.pageContext.globalAlpha = 1;\n this.pageContext.scale(dpr, dpr);\n }\n this.pageContext.fillStyle = '#FFFFFF';\n this.pageContext.fillRect(0, 0, this.pageCanvas.width, this.pageCanvas.height);\n this.pageContext.fillStyle = '#000000';\n };\n Renderer.prototype.renderHFWidgets = function (page, widget, width, isHeader) {\n if (this.isFieldCode) {\n this.isFieldCode = false;\n }\n if (!this.isPrinting) {\n this.pageContext.globalAlpha = this.documentHelper.owner.enableHeaderAndFooter ? 1 : 0.65;\n }\n var cliped = false;\n var height = 0;\n var pageHt = 0;\n var headerFooterHeight = page.boundingRectangle.height / 100 * 40;\n if (isHeader) {\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var widgetHeight = Math.max((widget.y + widget.height), topMargin);\n if (widgetHeight > headerFooterHeight) {\n cliped = true;\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.pageLeft, this.pageTop, width, this.getScaledValue(headerFooterHeight));\n this.pageContext.clip();\n }\n }\n else {\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = void 0;\n if (isNullOrUndefined(page.footerWidgetIn.sectionFormat)) {\n footerHeight = page.boundingRectangle.height -\n /* eslint-disable-next-line max-len */\n Math.max(page.footerWidgetIn.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidgetIn.sectionFormat.bottomMargin));\n }\n else {\n footerHeight = page.boundingRectangle.height -\n /* eslint-disable-next-line max-len */\n Math.max(page.footerWidgetIn.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidgetIn.sectionFormat.bottomMargin));\n }\n height = Math.max(page.boundingRectangle.height - headerFooterHeight, footerHeight);\n pageHt = page.boundingRectangle.height - footerDistance;\n }\n this.renderFloatingItems(page, widget.floatingElements, 'Behind');\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var block = widget.childWidgets[parseInt(i.toString(), 10)];\n if (!isHeader) {\n height += block.height;\n }\n // if (isHeader || !isHeader && this.getScaledValue(Math.round(height)) <= this.getScaledValue(Math.round(pageHt))) {\n this.renderWidget(page, block);\n // }\n }\n this.renderFloatingItems(page, widget.floatingElements, 'InFrontOfText');\n if (cliped) {\n this.pageContext.restore();\n }\n if (!this.isPrinting) {\n this.pageContext.globalAlpha = this.documentHelper.owner.enableHeaderAndFooter ? 0.50 : 1;\n }\n };\n Renderer.prototype.renderHeaderSeparator = function (page, left, top, widget) {\n //Header Widget\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var y = this.getScaledValue(Math.max((widget.y + widget.height), Math.abs(topMargin)));\n var pageWidth = this.getScaledValue(page.boundingRectangle.width);\n var ctx = this.pageContext;\n ctx.save();\n ctx.globalAlpha = 0.85;\n var headerFooterHeight = (this.getScaledValue(page.boundingRectangle.height) / 100) * 40;\n //Maximum header height limit\n y = Math.min(y, headerFooterHeight);\n //Dash line Separator\n this.renderDashLine(ctx, left, top + y, pageWidth, '#000000', false);\n var type = this.getHeaderFooterType(page, true);\n var index = this.viewer.getHeaderFooter(widget.headerFooterType);\n var sectionIndex = page.sectionIndex;\n var l10n = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n l10n.setLocale(this.documentHelper.owner.locale);\n if (this.documentHelper.headersFooters.length > 1) {\n var sectionMarkIndex = sectionIndex + 1;\n type = type + ' -' + l10n.getConstant('Section') + ' ' + sectionMarkIndex + '-';\n }\n ctx.font = '9pt Arial';\n var width = ctx.measureText(type).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + y, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type, left + 10, y + top + 15);\n var headerFooterWidget;\n if (this.documentHelper.headersFooters[parseInt(sectionIndex.toString(), 10)]) {\n headerFooterWidget = this.documentHelper.headersFooters[parseInt(sectionIndex.toString(), 10)][parseInt(index.toString(), 10)];\n }\n if (sectionIndex !== 0 && !headerFooterWidget) {\n var content = l10n.getConstant('Same as Previous');\n var width_1 = ctx.measureText(content).width;\n var right = this.viewer.containerWidth - width_1 - 75 + left;\n this.renderHeaderFooterMark(ctx, right, top + y, width_1 + 10, 20);\n this.renderHeaderFooterMarkText(ctx, content, right + 5, y + top + 15);\n }\n if (page.footerWidget) {\n //Footer Widget\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = this.getScaledValue(page.boundingRectangle.height) -\n /* eslint-disable-next-line max-len */\n this.getScaledValue(Math.max(page.footerWidgetIn.height + footerDistance, Math.abs(HelperMethods.convertPointToPixel(page.footerWidgetIn.sectionFormat.bottomMargin))));\n //Maximum footer height limit\n footerHeight = Math.max((this.getScaledValue(page.boundingRectangle.height) - headerFooterHeight), footerHeight);\n this.renderDashLine(ctx, left, top + footerHeight, pageWidth, '#000000', false);\n var type_1 = this.getHeaderFooterType(page, false);\n var sectionIndex_1 = page.sectionIndex;\n if (this.documentHelper.headersFooters.length > 1) {\n var sectionMarkIndex = sectionIndex_1 + 1;\n type_1 = type_1 + ' -' + l10n.getConstant('Section') + ' ' + sectionMarkIndex + '-';\n }\n width = ctx.measureText(type_1).width;\n this.renderHeaderFooterMark(ctx, left + 5, top + footerHeight - 20, width + 10, 20);\n this.renderHeaderFooterMarkText(ctx, type_1, left + 10, top + footerHeight - 5);\n var index_1 = this.viewer.getHeaderFooter(page.footerWidget.headerFooterType);\n var headerFooterWidget_1;\n if (this.documentHelper.headersFooters[parseInt(sectionIndex_1.toString(), 10)]) {\n headerFooterWidget_1 = this.documentHelper.headersFooters[parseInt(sectionIndex_1.toString(), 10)][parseInt(index_1.toString(), 10)];\n }\n if (sectionIndex_1 !== 0 && !headerFooterWidget_1) {\n var content = l10n.getConstant('Same as Previous');\n var width_2 = ctx.measureText(content).width;\n var right = this.viewer.containerWidth - width_2 - 75 + left;\n this.renderHeaderFooterMark(ctx, right, top + footerHeight - 20, width_2 + 10, 20);\n this.renderHeaderFooterMarkText(ctx, content, right + 5, top + footerHeight - 5);\n }\n ctx.restore();\n }\n };\n Renderer.prototype.getFooterHeight = function (page) {\n var footerWidgetHeight = ((page.boundingRectangle.height) / 100) * 40;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var actualHeight = page.boundingRectangle.height -\n Math.max(page.footerWidgetIn.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidgetIn.sectionFormat.bottomMargin));\n return Math.max((page.boundingRectangle.height) - footerWidgetHeight, actualHeight);\n };\n Renderer.prototype.getHeaderFooterType = function (page, isHeader) {\n var type;\n var l10n = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n l10n.setLocale(this.documentHelper.owner.locale);\n type = isHeader ? l10n.getConstant('Header') : l10n.getConstant('Footer');\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n (isNullOrUndefined(page.previousPage) || page.sectionIndex !== page.previousPage.sectionIndex)) {\n type = isHeader ? l10n.getConstant('First Page Header') : l10n.getConstant('First Page Footer');\n }\n else if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if ((this.documentHelper.pages.indexOf(page) + 1) % 2 === 0) {\n type = isHeader ? l10n.getConstant('Even Page Header') : l10n.getConstant('Even Page Footer');\n }\n else {\n type = isHeader ? l10n.getConstant('Odd Page Header') : l10n.getConstant('Odd Page Footer');\n }\n }\n return type;\n };\n /* eslint-disable-next-line max-len */\n Renderer.prototype.renderDashLine = function (context, x, y, width, fillStyle, isSmallDash) {\n context.beginPath();\n context.strokeStyle = fillStyle;\n context.lineWidth = 1;\n if (isSmallDash) {\n context.setLineDash([3, 2]);\n }\n else {\n context.setLineDash([6, 4]);\n }\n context.moveTo(x, y);\n context.lineTo(x + width, y);\n context.stroke();\n context.setLineDash([]);\n context.closePath();\n };\n Renderer.prototype.renderSolidLine = function (context, x, y, width, fillStyle) {\n context.beginPath();\n context.strokeStyle = fillStyle;\n context.lineWidth = 0.5;\n context.moveTo(x, y);\n context.lineTo(x + width, y);\n context.stroke();\n context.closePath();\n };\n Renderer.prototype.renderHeaderFooterMark = function (ctx, x, y, w, h) {\n ctx.beginPath();\n ctx.fillStyle = 'lightgray';\n ctx.fillRect(x, y, w, h);\n ctx.strokeStyle = 'black';\n ctx.strokeRect(x, y, w, h);\n ctx.closePath();\n };\n Renderer.prototype.renderHeaderFooterMarkText = function (ctx, content, x, y) {\n ctx.beginPath();\n ctx.fillStyle = '#000000';\n ctx.textBaseline = 'alphabetic';\n ctx.fillText(content, x, y);\n ctx.closePath();\n };\n Renderer.prototype.render = function (page, bodyWidget) {\n if (this.isFieldCode) {\n this.isFieldCode = false;\n }\n /* eslint-disable */\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n if (!isNullOrUndefined(page.bodyWidgets[i].floatingElements)) {\n this.renderFloatingItems(page, page.bodyWidgets[i].floatingElements, 'Behind');\n }\n }\n /* eslint-enable */\n var isClipped = false;\n var nextColumnBody;\n if (!isNullOrUndefined(bodyWidget.nextRenderedWidget)\n && bodyWidget.columnIndex + 1 === bodyWidget.nextRenderedWidget.columnIndex) {\n nextColumnBody = bodyWidget.nextRenderedWidget;\n }\n if (!(this.viewer instanceof WebLayoutViewer) && bodyWidget.sectionFormat.columns.length > 1\n && !isNullOrUndefined(nextColumnBody)) {\n var colIndex = page.bodyWidgets.indexOf(bodyWidget);\n var xPos = void 0;\n var width = void 0;\n if (bodyWidget.columnIndex === 0) {\n /* eslint-disable */\n xPos = page.bodyWidgets[colIndex].x - HelperMethods.convertPointToPixel(page.bodyWidgets[colIndex].sectionFormat.leftMargin);\n width = HelperMethods.convertPointToPixel(page.bodyWidgets[colIndex].sectionFormat.leftMargin) + bodyWidget.sectionFormat.columns[bodyWidget.columnIndex].width + (bodyWidget.sectionFormat.columns[bodyWidget.columnIndex].space / 2);\n /* eslint-enable */\n }\n else if (colIndex === bodyWidget.sectionFormat.columns.length - 1) {\n /* eslint-disable */\n xPos = page.bodyWidgets[colIndex].x - (bodyWidget.sectionFormat.columns[bodyWidget.columnIndex - 1].space / 2);\n width = HelperMethods.convertPointToPixel(page.bodyWidgets[colIndex].sectionFormat.rightMargin) + bodyWidget.sectionFormat.columns[bodyWidget.columnIndex].width + (bodyWidget.sectionFormat.columns[bodyWidget.columnIndex - 1].space / 2);\n /* eslint-enable */\n }\n else {\n /* eslint-disable */\n xPos = page.bodyWidgets[colIndex].x - (bodyWidget.sectionFormat.columns[bodyWidget.columnIndex].space / 2);\n width = bodyWidget.sectionFormat.columns[bodyWidget.columnIndex].width + bodyWidget.sectionFormat.columns[bodyWidget.columnIndex].space;\n /* eslint-enable */\n }\n /* eslint-disable */\n this.clipRect(xPos, page.bodyWidgets[colIndex].y, this.getScaledValue(width), this.getScaledValue(page.boundingRectangle.height));\n /* eslint-enable */\n isClipped = true;\n }\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var widget = bodyWidget.childWidgets[parseInt(i.toString(), 10)];\n if (i === 0 && bodyWidget.childWidgets[0] instanceof TableWidget &&\n (bodyWidget.childWidgets[0].childWidgets.length > 0) &&\n page.repeatHeaderRowTableWidget) {\n /* eslint-disable-next-line max-len */\n this.renderHeader(page, widget, this.documentHelper.layout.getHeader(bodyWidget.childWidgets[0]));\n }\n this.renderWidget(page, widget);\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n /* eslint-disable */\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n if (!isNullOrUndefined(page.bodyWidgets[i].floatingElements)) {\n this.renderFloatingItems(page, page.bodyWidgets[i].floatingElements, 'InFrontOfText');\n }\n }\n /* eslint-enable */\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n if (page.bodyWidgets[parseInt(i.toString(), 10)].sectionFormat.lineBetweenColumns === true) {\n if (page.bodyWidgets[parseInt(i.toString(), 10)].columnIndex !== 0 && page.bodyWidgets.length > 1) {\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var linestartY = this.getScaledValue(Math.max((page.headerWidgetIn.y + page.headerWidgetIn.height), topMargin));\n var headerFooterHeight = (this.getScaledValue(page.boundingRectangle.height) / 100) * 40;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = this.getScaledValue(page.boundingRectangle.height) -\n /* eslint-disable-next-line max-len */\n this.getScaledValue(Math.max(page.footerWidgetIn.height + footerDistance, HelperMethods.convertPointToPixel(page.footerWidgetIn.sectionFormat.bottomMargin)));\n footerHeight = Math.max((this.getScaledValue(page.boundingRectangle.height) - headerFooterHeight), footerHeight);\n var inBetweenSpace = (page.bodyWidgets[parseInt(i.toString(), 10)].x\n - (page.bodyWidgets[parseInt(i.toString(), 10)].previousRenderedWidget.x\n + page.bodyWidgets[parseInt(i.toString(), 10)].previousRenderedWidget.width)) / 2;\n var startX = inBetweenSpace + (page.bodyWidgets[parseInt(i.toString(), 10)].previousRenderedWidget.x\n + page.bodyWidgets[parseInt(i.toString(), 10)].previousRenderedWidget.width);\n var startY = linestartY / this.documentHelper.zoomFactor;\n var endX = startX;\n var endY = void 0;\n if (page.footnoteWidget) {\n endY = ((footerHeight - (page.footerWidgetIn.height / 2))\n - page.footnoteWidget.height * this.documentHelper.zoomFactor) / this.documentHelper.zoomFactor;\n }\n else {\n endY = (footerHeight - (page.footerWidgetIn.height / 2)) / this.documentHelper.zoomFactor;\n }\n var firstBody = this.documentHelper.layout.getBodyWidget(page.bodyWidgets[parseInt(i.toString(), 10)], true);\n var height = this.documentHelper.layout.getNextWidgetHeight(firstBody);\n startY = page.bodyWidgets[parseInt(i.toString(), 10)].y;\n endY = height;\n var color = '#000000';\n this.renderSingleBorder(color, startX, startY, endX, endY, 0.5, 'Single');\n }\n }\n }\n };\n Renderer.prototype.renderFloatingItems = function (page, floatingElements, wrappingType) {\n if (!isNullOrUndefined(floatingElements) && floatingElements.length > 0) {\n var overLappedShapeWidgets = new Dictionary();\n /* eslint-disable */\n floatingElements.sort(function (a, b) {\n if (a instanceof TableWidget || b instanceof TableWidget) {\n return 0;\n }\n else {\n return a.zOrderPosition - b.zOrderPosition;\n }\n });\n for (var i = 0; i < floatingElements.length; i++) {\n if (floatingElements[i] instanceof TableWidget) {\n continue;\n }\n var shape = floatingElements[i];\n if ((wrappingType === \"Behind\" && shape.textWrappingStyle !== \"Behind\") ||\n (wrappingType !== \"Behind\" && shape.textWrappingStyle === \"Behind\")) {\n continue;\n }\n if (!this.isOverLappedShapeWidget(shape) || overLappedShapeWidgets.containsKey(shape.zOrderPosition)) {\n if (shape instanceof ImageElementBox) {\n this.renderImageElementBox(shape, shape.x, shape.y, 0);\n }\n else if (shape instanceof ShapeElementBox) {\n var shapeLeft = this.getScaledValue(shape.x, 1);\n var shapeTop = this.getScaledValue(shape.y, 2);\n this.renderShapeElementBox(shape, shapeLeft, shapeTop, page);\n }\n }\n else if (!overLappedShapeWidgets.containsKey(shape.zOrderPosition)) {\n overLappedShapeWidgets.add(shape.zOrderPosition, shape);\n }\n }\n if (overLappedShapeWidgets.length > 0) {\n var sortedOverLappedShapeWidgets = overLappedShapeWidgets.keys.sort();\n for (var j = 0; j < sortedOverLappedShapeWidgets.length; j++) {\n var shape = overLappedShapeWidgets.get(sortedOverLappedShapeWidgets[j]);\n if (shape instanceof ImageElementBox) {\n this.renderImageElementBox(shape, shape.x, shape.y, 0);\n }\n else if (shape instanceof ShapeElementBox) {\n var shapeLeft = this.getScaledValue(shape.x, 1);\n var shapeTop = this.getScaledValue(shape.y, 2);\n this.renderShapeElementBox(shape, shapeLeft, shapeTop, page);\n }\n }\n }\n }\n };\n Renderer.prototype.isOverLappedShapeWidget = function (floatingElement) {\n return ((floatingElement instanceof ImageElementBox\n && floatingElement.textWrappingStyle !== 'Inline'\n && floatingElement.textWrappingStyle !== 'Behind'\n && !(this.documentHelper.compatibilityMode !== 'Word2013'\n && (floatingElement.isBelowText\n && floatingElement.textWrappingStyle !== 'InFrontOfText')))\n || (floatingElement instanceof ShapeElementBox\n && floatingElement.textWrappingStyle !== 'Inline'\n && floatingElement.textWrappingStyle !== 'Behind'\n && !(this.documentHelper.compatibilityMode !== 'Word2013'\n && (floatingElement.isBelowText\n && floatingElement.textWrappingStyle !== 'InFrontOfText'))));\n };\n Renderer.prototype.renderShapeElementBox = function (shape, shapeLeft, shapeTop, page) {\n if (shape.isHorizontalRule) {\n return;\n }\n var isZeroShapeHeight = (shape.height === 0) ? true : false;\n var shapeType = shape.autoShapeType;\n var blocks = shape.textFrame.childWidgets;\n this.pageContext.beginPath();\n if (shape.fillFormat && shape.fillFormat.color && shape.fillFormat.fill && shapeType !== 'StraightConnector') {\n this.pageContext.fillStyle = shape.fillFormat.color;\n this.pageContext.fillRect(shapeLeft, shapeTop, this.getScaledValue(shape.width), this.getScaledValue(shape.height));\n }\n if (!isNullOrUndefined(shapeType)) {\n if (shape.lineFormat.line && shape.lineFormat.lineFormatType !== 'None') {\n this.pageContext.lineWidth = shape.lineFormat.weight;\n this.pageContext.strokeStyle = HelperMethods.getColor(shape.lineFormat.color);\n if (shapeType !== 'StraightConnector') {\n this.pageContext.strokeRect(shapeLeft, shapeTop, this.getScaledValue(shape.width), this.getScaledValue(shape.height));\n }\n else {\n this.pageContext.moveTo(shapeLeft, shapeTop);\n this.pageContext.lineTo(shapeLeft + this.getScaledValue(shape.width), shapeTop + this.getScaledValue(shape.height));\n this.pageContext.stroke();\n }\n }\n }\n this.pageContext.closePath();\n var isClipped = false;\n if (shape.width != 0 && shape.height != 0) {\n isClipped = true;\n this.clipRect(shape.x, shape.y, this.getScaledValue(shape.width), this.getScaledValue(shape.height));\n }\n for (var i = 0; i < blocks.length; i++) {\n this.renderWidget(page, blocks[i]);\n if (isZeroShapeHeight && shapeType !== 'StraightConnector') {\n shape.height = HelperMethods.round((shape.height + blocks[i].height), 5);\n }\n }\n if (isZeroShapeHeight) {\n isZeroShapeHeight = false;\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n };\n Renderer.prototype.renderWidget = function (page, widget) {\n if (this.documentHelper.owner.enableLockAndEdit) {\n this.renderLockRegionBorder(page, widget);\n }\n if (widget instanceof ParagraphWidget) {\n this.renderParagraphWidget(page, widget);\n }\n else {\n this.renderTableWidget(page, widget);\n }\n };\n Renderer.prototype.renderLockRegionBorder = function (page, widget) {\n if (!widget.isInsideTable && widget instanceof BlockWidget && widget.locked) {\n var settinsModel = this.documentHelper.owner.documentEditorSettings.collaborativeEditingSettings;\n var sectionFormat = page.bodyWidgets[0].sectionFormat;\n var leftPosition = HelperMethods.convertPointToPixel(sectionFormat.leftMargin) - 5;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n pageWidth = HelperMethods.convertPointToPixel(pageWidth) + 10;\n if (this.viewer instanceof WebLayoutViewer) {\n leftPosition = widget.x - 5;\n pageWidth = (this.documentHelper.visibleBounds.width - (this.viewer.padding.right * 5)) / this.documentHelper.zoomFactor;\n }\n var previousWidget = widget.previousRenderedWidget;\n var nextWidget = widget.nextRenderedWidget;\n var color = widget.lockedBy === this.documentHelper.owner.currentUser ? settinsModel.editableRegionColor : settinsModel.lockedRegionColor;\n var topPosition = widget.y;\n var height = widget.y + widget.height;\n //Left border\n this.renderSingleBorder(color, leftPosition, topPosition, leftPosition, height, 1, \"Single\");\n //Top border\n if (isNullOrUndefined(previousWidget) || !previousWidget.locked || widget.lockedBy !== previousWidget.lockedBy) {\n this.renderSingleBorder(color, leftPosition, topPosition, leftPosition + pageWidth, topPosition, 1, \"Single\");\n }\n //Right border\n this.renderSingleBorder(color, leftPosition + pageWidth, topPosition, leftPosition + pageWidth, height, 1, \"Single\");\n if (isNullOrUndefined(nextWidget) || !nextWidget.locked || widget.lockedBy !== nextWidget.lockedBy) {\n // Bottom border\n this.renderSingleBorder(color, leftPosition, height, leftPosition + pageWidth, height, 1, \"Single\");\n }\n }\n };\n Renderer.prototype.renderHeader = function (page, widget, header) {\n if (isNullOrUndefined(header)) {\n return;\n }\n //Updated client area for current page\n page.viewer.updateClientArea(page.bodyWidgets[0], page);\n var top = page.viewer.clientArea.y;\n var parentTable = header.ownerTable.getSplitWidgets()[0];\n if (parentTable.childWidgets.length === 0) {\n return;\n }\n if (widget.childWidgets.indexOf(header) !== -1) {\n return;\n }\n var table = parentTable.clone();\n table.childWidgets = [];\n page.viewer.updateClientAreaLocation(table, new Rect(page.viewer.clientArea.x, top, table.width, table.height));\n this.updateTableHeaderRows(header, table, page, top);\n this.isRenderHeader = true;\n for (var j = 0; j < table.childWidgets.length; j++) {\n var headerWidget = table.childWidgets[j];\n var cell = undefined;\n //Renders table cell outline rectangle - Border and background color.\n for (var j_1 = 0; j_1 < headerWidget.childWidgets.length; j_1++) {\n cell = headerWidget.childWidgets[j_1];\n this.renderTableCellWidget(page, cell);\n }\n top += headerWidget.height;\n }\n this.isRenderHeader = false;\n if (widget.y !== top) {\n //this.Location.Y = top;\n page.documentHelper.layout.updateChildLocationForTable(top, widget);\n }\n };\n Renderer.prototype.updateTableHeaderRows = function (headerRow, clonedTable, page, top) {\n var table = headerRow.ownerTable;\n var rowSpan = 1;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.isHeader) {\n var clonedRow = row.clone();\n clonedTable.childWidgets.push(clonedRow);\n clonedRow.containerWidget = clonedTable;\n page.viewer.updateClientAreaLocation(clonedRow, new Rect(page.viewer.clientArea.x, top, clonedRow.width, clonedRow.height));\n page.documentHelper.layout.updateChildLocationForRow(top, clonedRow);\n top += clonedRow.height;\n if (row == headerRow) {\n for (var j = 0; j < headerRow.childWidgets.length; j++) {\n var cell = headerRow.childWidgets[j];\n rowSpan = Math.max(rowSpan, cell.cellFormat.rowSpan);\n }\n if (rowSpan > 1 && i + rowSpan < table.childWidgets.length) {\n for (var k = 1; k < rowSpan; k++) {\n var nextRow = table.childWidgets[i + k];\n if (!isNullOrUndefined(nextRow)) {\n var clonedRow_1 = nextRow.clone();\n clonedTable.childWidgets.push(clonedRow_1);\n clonedRow_1.containerWidget = clonedTable;\n page.viewer.updateClientAreaLocation(clonedRow_1, new Rect(page.viewer.clientArea.x, top, clonedRow_1.width, clonedRow_1.height));\n page.documentHelper.layout.updateChildLocationForRow(top, clonedRow_1);\n top += clonedRow_1.height;\n }\n }\n }\n }\n }\n }\n };\n Renderer.prototype.renderParagraphWidget = function (page, paraWidget) {\n if (this.isFieldCode && paraWidget.isFieldCodeBlock) {\n return;\n }\n var top = paraWidget.y;\n var left = paraWidget.x;\n var isClipped = false;\n var firstLine = paraWidget.firstChild;\n var paddingLeft = 0;\n if (!isNullOrUndefined(firstLine)) {\n for (var i = 0; i < firstLine.children.length; i++) {\n var element = firstLine.children[i];\n if (element instanceof TextElementBox) {\n paddingLeft = element.padding.left;\n break;\n }\n }\n }\n if (paddingLeft > 0) {\n this.clipRect(paraWidget.x + paddingLeft, this.getScaledValue(page.boundingRectangle.y), this.getScaledValue(page.boundingRectangle.width), this.getScaledValue(page.boundingRectangle.height));\n isClipped = true;\n }\n if (!(paraWidget.containerWidget instanceof HeaderFooterWidget && paraWidget.containerWidget.isEmpty && !isNullOrUndefined(this.documentHelper.owner.selectionModule) && !isNullOrUndefined(this.documentHelper.selection.start.paragraph) && !this.documentHelper.selection.start.paragraph.isInHeaderFooter)) {\n this.renderParagraphBorder(page, paraWidget);\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n for (var i = 0; i < paraWidget.childWidgets.length; i++) {\n var widget = paraWidget.childWidgets[i];\n top += widget.marginTop;\n this.renderLine(widget, page, left, top);\n top += widget.height;\n }\n };\n Renderer.prototype.renderParagraphBorder = function (page, paragraphWidet) {\n var leftBorder = paragraphWidet.paragraphFormat.borders.left;\n var topBorder = paragraphWidet.paragraphFormat.borders.top;\n var rightBorder = paragraphWidet.paragraphFormat.borders.right;\n var bottomBorder = paragraphWidet.paragraphFormat.borders.bottom;\n var startX = 0;\n var startY = 0;\n var endX = 0;\n var endY = 0;\n var lineWidth = 0;\n var firstLine = paragraphWidet.firstChild;\n var lastLine = paragraphWidet.lastChild;\n var canRenderParagraphBorders = this.documentHelper.canRenderBorder(paragraphWidet);\n if (!isNullOrUndefined(leftBorder) && leftBorder.lineStyle !== 'None') {\n startX = this.documentHelper.getParagraphLeftPosition(paragraphWidet) - HelperMethods.convertPointToPixel(leftBorder.space);\n endX = startX;\n endY = startY + paragraphWidet.height;\n if (topBorder.lineStyle !== 'None' && firstLine.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n startY = paragraphWidet.y + this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space));\n endY = startY + paragraphWidet.height - (this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space)));\n }\n else {\n startY = paragraphWidet.y;\n endY = startY + paragraphWidet.height;\n }\n if (bottomBorder.lineStyle !== 'None' && lastLine.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n endY = (endY + HelperMethods.convertPointToPixel(bottomBorder.lineWidth + bottomBorder.space)) - this.getBottomMargin(paragraphWidet);\n }\n lineWidth = HelperMethods.convertPointToPixel(leftBorder.lineWidth);\n this.renderSingleBorder(leftBorder.color, startX, startY, endX, endY, lineWidth, leftBorder.lineStyle);\n }\n if (!isNullOrUndefined(topBorder) && topBorder.lineStyle !== 'None' && firstLine.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n startX = this.documentHelper.getParagraphLeftPosition(paragraphWidet);\n endX = startX + this.getContainerWidth(paragraphWidet, page);\n startY = paragraphWidet.y + this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space));\n endY = startY;\n if (leftBorder.lineStyle !== 'None') {\n startX -= HelperMethods.convertPointToPixel(leftBorder.space);\n }\n if (rightBorder.lineStyle !== 'None') {\n endX += HelperMethods.convertPointToPixel(rightBorder.space);\n }\n lineWidth = HelperMethods.convertPointToPixel(topBorder.lineWidth);\n this.renderSingleBorder(topBorder.color, startX, startY, endX, endY, lineWidth, topBorder.lineStyle);\n }\n if (!isNullOrUndefined(rightBorder) && rightBorder.lineStyle !== 'None') {\n startX = this.documentHelper.getParagraphLeftPosition(paragraphWidet) + this.getContainerWidth(paragraphWidet, page) + HelperMethods.convertPointToPixel(rightBorder.space);\n startY = endY;\n endX = startX;\n endY = startY + paragraphWidet.height;\n if (topBorder.lineStyle !== 'None' && firstLine.isFirstLine() && !canRenderParagraphBorders.skipTopBorder) {\n startY = paragraphWidet.y + this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space));\n endY = startY + paragraphWidet.height - (this.getTopMargin(paragraphWidet) - (HelperMethods.convertPointToPixel(topBorder.lineWidth + topBorder.space)));\n }\n else {\n startY = paragraphWidet.y;\n endY = startY + paragraphWidet.height;\n }\n if (bottomBorder.lineStyle !== 'None' && lastLine.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n endY = (endY + HelperMethods.convertPointToPixel(bottomBorder.lineWidth + bottomBorder.space)) - this.getBottomMargin(paragraphWidet);\n }\n lineWidth = HelperMethods.convertPointToPixel(rightBorder.lineWidth);\n this.renderSingleBorder(rightBorder.color, startX, startY, endX, endY, lineWidth, rightBorder.lineStyle);\n }\n if (!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle !== 'None' && lastLine.isLastLine() && !canRenderParagraphBorders.skipBottomBorder) {\n startX = this.documentHelper.getParagraphLeftPosition(paragraphWidet);\n endX = startX + this.getContainerWidth(paragraphWidet, page);\n startY = (paragraphWidet.y + paragraphWidet.height + HelperMethods.convertPointToPixel(bottomBorder.lineWidth + bottomBorder.space)) - (this.getBottomMargin(paragraphWidet));\n endY = startY;\n if (leftBorder.lineStyle !== 'None') {\n startX -= HelperMethods.convertPointToPixel(leftBorder.space);\n }\n if (rightBorder.lineStyle !== 'None') {\n endX += HelperMethods.convertPointToPixel(rightBorder.space);\n }\n lineWidth = HelperMethods.convertPointToPixel(bottomBorder.lineWidth);\n this.renderSingleBorder(bottomBorder.color, startX, startY, endX, endY, lineWidth, bottomBorder.lineStyle);\n }\n };\n /**\n * Renders the border around a TextElementBox.\n * @param elementBox - The TextElementBox for which the border is rendered.\n * @param left - The left position of the TextElementBox.\n * @param top - The top position of the TextElementBox.\n * @param color - The color of the border.\n * @param borderStyle - The style of the border (e.g., 'Single', 'Double').\n * @param borderWidth - The width of the border.\n * @param baselineAlignment - The baseline alignment of the TextElementBox.\n * @param revisionInfo - Revision information (optional).\n */\n Renderer.prototype.renderImgBorder = function (elementBox, left, top, color, borderStyle, borderWidth, baselineAlignment, revisionInfo) {\n // Get the width dynamically based on the current text content\n var width = (elementBox.width) / this.documentHelper.zoomFactor;\n var lineWidth = HelperMethods.convertPointToPixel(borderWidth);\n var next = this.documentHelper.selection.getNextTextElement(elementBox);\n var previous = this.documentHelper.selection.getPreviousTextElement(elementBox);\n // Calculate top margin based on baseline alignment\n var topMargin = (baselineAlignment === 'Subscript') ? elementBox.margin.top + (elementBox.height - elementBox.height / 1.5) : elementBox.margin.top;\n // Apply top margin\n top += topMargin > 0 ? topMargin : 0;\n // Calculate rendered height based on baseline alignment\n var renderedHeight = (elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5)) + 15;\n var startX = 0;\n var startY = 0;\n var endX = 0;\n var endY = 0;\n startX = left;\n startY = top;\n endX = left + width;\n endY = top;\n this.renderSingleBorder(color, startX, startY, endX, endY, lineWidth, borderStyle);\n // Render bottom border\n startY = top + renderedHeight;\n endY = startY;\n this.renderSingleBorder(color, startX, startY, endX, endY, lineWidth, borderStyle);\n //Render left border\n startY = top;\n endX = left;\n if (previous instanceof TextElementBox) {\n if (previous.line !== elementBox.line || previous.contentControlProperties == undefined) {\n borderStyle = 'Solid';\n }\n else {\n borderStyle = 'None';\n }\n }\n this.renderSingleBorder(color, startX, startY, endX, endY, lineWidth, borderStyle);\n // Render right border\n startX = left + width;\n endX = startX;\n if (next instanceof TextElementBox) {\n if (next.line !== elementBox.line || next.contentControlProperties == undefined) {\n borderStyle = 'Solid';\n }\n else {\n borderStyle = 'None';\n }\n }\n else {\n borderStyle = 'Solid';\n }\n this.renderSingleBorder(color, startX, startY, endX, endY, lineWidth, borderStyle);\n };\n Renderer.prototype.getContainerWidth = function (paraWidget, page) {\n var hangingIndent = 0;\n if (paraWidget.paragraphFormat.firstLineIndent < 0) {\n hangingIndent = Math.abs(paraWidget.paragraphFormat.firstLineIndent);\n }\n if (paraWidget.isInsideTable) {\n var cell = paraWidget.associatedCell;\n return (cell.width + cell.margin.left + cell.margin.right) - cell.leftBorderWidth;\n }\n else {\n if (this.viewer instanceof WebLayoutViewer) {\n var indent = HelperMethods.convertPointToPixel(paraWidget.leftIndent + paraWidget.rightIndent);\n return (this.documentHelper.visibleBounds.width - (indent) - (this.viewer.padding.right * 4) - (this.viewer.padding.left * 2)) / this.documentHelper.zoomFactor;\n }\n else {\n var section = paraWidget.bodyWidget;\n if (section instanceof BodyWidget && section.sectionFormat.columns.length > 1) {\n var colIndex = section.columnIndex;\n return section.sectionFormat.columns[colIndex].width + HelperMethods.convertPointToPixel(hangingIndent - (paraWidget.rightIndent + paraWidget.leftIndent));\n }\n else {\n var width = section.sectionFormat.pageWidth - section.sectionFormat.leftMargin - section.sectionFormat.rightMargin;\n return HelperMethods.convertPointToPixel(width + hangingIndent - (paraWidget.rightIndent + paraWidget.leftIndent));\n }\n }\n }\n };\n Renderer.prototype.getTopMargin = function (paragraph) {\n if (paragraph.isEmpty()) {\n return paragraph.childWidgets[0].margin.top;\n }\n else {\n var widget = paragraph.childWidgets[0];\n var topMargin = 0;\n if (!isNullOrUndefined(widget.margin)) {\n topMargin = widget.margin.top;\n }\n return topMargin;\n }\n };\n Renderer.prototype.getBottomMargin = function (paragarph) {\n if (paragarph.isEmpty()) {\n return paragarph.childWidgets[paragarph.childWidgets.length - 1].margin.bottom;\n }\n else {\n var widget = paragarph.childWidgets[paragarph.childWidgets.length - 1];\n var bottomMargin = 0;\n if (!isNullOrUndefined(widget.margin)) {\n bottomMargin = widget.margin.bottom;\n }\n return bottomMargin;\n }\n };\n Renderer.prototype.renderfootNoteWidget = function (page, footnote, width) {\n var isEmptyPage = footnote.page.bodyWidgets.length === 1 && ((footnote.page.bodyWidgets[0].childWidgets.length === 1\n && footnote.page.bodyWidgets[0].childWidgets[0].isEmpty != undefined && footnote.page.bodyWidgets[0].childWidgets[0].isEmpty()) || footnote.page.bodyWidgets[0].childWidgets.length === 0);\n var footerY = this.getFooterHeight(page);\n var height = footnote.y + footnote.height;\n if (height > footerY) {\n height = (footerY - footnote.y);\n }\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.pageLeft, this.getScaledValue(footnote.y, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.clip();\n for (var i = 0; i < footnote.bodyWidgets.length; i++) {\n var bodyWidget = footnote.bodyWidgets[i];\n var footNoteReference = bodyWidget.footNoteReference;\n for (var j = 0; j < bodyWidget.childWidgets.length; j++) {\n var widget = bodyWidget.childWidgets[j];\n if (i === 0 && j === 0) {\n var ctx = this.pageContext;\n var xPos = page.bodyWidgets[0].x;\n if (page.bodyWidgets.length > 1 && !isNullOrUndefined(bodyWidget.nextWidget) && !(bodyWidget.nextWidget.sectionFormat.breakCode === 'NoBreak')) {\n var footWidth = page.bodyWidgets[0].width;\n this.renderSolidLine(ctx, this.getScaledValue(xPos, 1), this.getScaledValue(footnote.y + (footnote.margin.top / 2) + 1, 2), footWidth * this.documentHelper.zoomFactor, '#000000');\n }\n else {\n this.renderSolidLine(ctx, this.getScaledValue(xPos, 1), this.getScaledValue(footnote.y + (footnote.margin.top / 2) + 1, 2), 210 * this.documentHelper.zoomFactor, '#000000');\n }\n }\n if (j === 0 && !isNullOrUndefined(footNoteReference) && !this.documentHelper.owner.editorModule.isFootNoteInsert) {\n //if (j < 1 || (j > 0 && widget.footNoteReference !== (bodyWidget.childWidgets[j - 1] as BlockWidget).footNoteReference)) {\n var paragraph = this.documentHelper.getFirstParagraphBlock(widget);\n if (paragraph.firstChild.children[0] instanceof TextElementBox) {\n var footNoteElement = paragraph.firstChild.children[0];\n if (footNoteElement.text === '\\u0002') {\n footNoteElement.text = footNoteElement.text.replace(footNoteElement.text, footNoteReference.text);\n }\n footNoteElement.width = footNoteReference.width;\n }\n //}\n }\n this.renderWidget(page, widget);\n }\n }\n this.pageContext.restore();\n };\n Renderer.prototype.renderTableWidget = function (page, tableWidget) {\n if (this.isFieldCode) {\n return;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var widget = tableWidget.childWidgets[i];\n this.renderTableRowWidget(page, widget);\n if (tableWidget.tableFormat.cellSpacing > 0) {\n this.renderTableOutline(tableWidget);\n }\n if (widget.isRenderBookmarkEnd && this.documentHelper.owner.documentEditorSettings.showBookmarks) {\n var cellWidget = widget.lastChild;\n var border = cellWidget.ownerTable.isBidiTable ? TableCellWidget.getCellLeftBorder(cellWidget) : TableCellWidget.getCellRightBorder(cellWidget);\n var lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n var lastPara = this.documentHelper.selection.getLastParagraph(widget.lastChild);\n var height = lastPara.lastChild.height - lastPara.lastChild.margin.bottom;\n this.renderBookmark(this.getScaledValue((cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2) + this.documentHelper.textHelper.getParagraphMarkWidth(lastPara.characterFormat), 1), this.getScaledValue(cellWidget.y - cellWidget.margin.top, 2), this.getScaledValue(height), 1);\n }\n }\n };\n Renderer.prototype.renderTableRowWidget = function (page, rowWidget) {\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n this.renderTableCellWidget(page, widget);\n if (widget.isRenderBookmarkEnd && this.documentHelper.owner.documentEditorSettings.showBookmarks) {\n var lastPara = this.documentHelper.selection.getLastParagraph(widget);\n var lastLine = lastPara.lastChild;\n var position = this.documentHelper.selection.getEndPosition(lastPara);\n this.renderBookmark(this.getScaledValue(position.x, 1), this.getScaledValue(position.y, 2), this.getScaledValue(lastLine.height - lastLine.margin.bottom), 1);\n }\n }\n };\n Renderer.prototype.renderTableCellWidget = function (page, cellWidget) {\n if (!this.isPrinting && !this.isExporting) {\n var cellTopMargin = 0;\n var cellBottomMargin = 0;\n cellTopMargin = cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth;\n cellBottomMargin = cellWidget.margin.bottom - cellWidget.containerWidget.bottomBorderWidth;\n if (this.getScaledValue(cellWidget.y, 2) + cellWidget.height + cellBottomMargin * this.documentHelper.zoomFactor < 0 ||\n (this.getScaledValue(cellWidget.y, 2) - cellTopMargin > this.documentHelper.visibleBounds.height)) {\n return;\n }\n }\n var widgetHeight = 0;\n this.renderSelectionHighlightOnTable(page, cellWidget);\n this.renderTableCellOutline(page.documentHelper, cellWidget);\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var widget = cellWidget.childWidgets[i];\n // MS word render the content in right margin also.\n // So, we need to add right margin value while cliping the content\n var width = (cellWidget.width + cellWidget.margin.left + cellWidget.margin.right) - cellWidget.leftBorderWidth;\n if (!this.isPrinting) {\n this.clipRect(cellWidget.x - cellWidget.margin.left, cellWidget.y, this.getScaledValue(width), this.getScaledValue(this.height));\n }\n this.renderWidget(page, widget);\n this.pageContext.restore();\n }\n if (cellWidget.isRenderEditRangeStart) {\n var firstPara = this.documentHelper.selection.getFirstParagraph(cellWidget);\n var firstLine = firstPara.firstChild;\n var xLeft = firstLine.paragraph.x;\n var ytop = firstLine.paragraph.y;\n if (this.documentHelper.owner.documentEditorSettings.highlightEditableRanges) {\n var highlighters = this.documentHelper.selection.editRegionHighlighters;\n var widgetInfo = !isNullOrUndefined(highlighters) ? highlighters.get(firstLine) : [];\n var color = !isNullOrUndefined(widgetInfo) && !isNullOrUndefined(widgetInfo[0]) ? widgetInfo[0].color : \"ffff00\";\n this.renderBookmark(this.getScaledValue(xLeft, 1), this.getScaledValue(ytop, 2), this.getScaledValue(firstLine.height - firstLine.margin.bottom), 0, color);\n }\n }\n if (cellWidget.isRenderEditRangeEnd) {\n var lastPara = this.documentHelper.selection.getLastParagraph(cellWidget);\n var lastLine = lastPara.lastChild;\n var position = this.documentHelper.selection.getEndPosition(lastPara);\n var xLeft = this.documentHelper.textHelper.getWidth(String.fromCharCode(164), lastLine.paragraph.characterFormat) + position.x;\n if (this.documentHelper.owner.documentEditorSettings.highlightEditableRanges) {\n var highlighters = this.documentHelper.selection.editRegionHighlighters;\n var widgetInfo = !isNullOrUndefined(highlighters) ? highlighters.get(lastLine) : [];\n var color = !isNullOrUndefined(widgetInfo) && !isNullOrUndefined(widgetInfo[0]) ? widgetInfo[0].color : \"ffff00\";\n this.renderBookmark(this.getScaledValue(xLeft, 1), this.getScaledValue(position.y, 2), this.getScaledValue(lastLine.height - lastLine.margin.bottom), 0, color);\n }\n }\n };\n Renderer.prototype.checkHeaderFooterLineWidget = function (widget, keys) {\n var headerFooter;\n if (widget instanceof LineWidget) {\n headerFooter = widget.paragraph.bodyWidget;\n }\n else if (widget instanceof TableCellWidget) {\n headerFooter = widget.bodyWidget;\n }\n if (!isNullOrUndefined(headerFooter.parentHeaderFooter)) {\n headerFooter = headerFooter.parentHeaderFooter;\n for (var j = 0; j < keys.length; j++) {\n var selectedWidget = keys[j];\n if (selectedWidget instanceof LineWidget && widget instanceof LineWidget) {\n var parentIndex = selectedWidget.getHierarchicalIndex('');\n var currentLineIndex = widget.getHierarchicalIndex('');\n if (selectedWidget.paragraph.isInHeaderFooter && headerFooter === selectedWidget.paragraph.bodyWidget\n && parentIndex.substring(parentIndex.indexOf(';')) === currentLineIndex.substring(currentLineIndex.indexOf(';'))) {\n return selectedWidget;\n }\n }\n else if (selectedWidget instanceof TableCellWidget && widget instanceof TableCellWidget) {\n var parentIndex = selectedWidget.getHierarchicalIndex('');\n var currentLineIndex = widget.getHierarchicalIndex('');\n if (selectedWidget.ownerTable.isInHeaderFooter && headerFooter === selectedWidget.ownerTable.bodyWidget\n && parentIndex.substring(parentIndex.indexOf(';')) === currentLineIndex.substring(currentLineIndex.indexOf(';'))) {\n return selectedWidget;\n }\n }\n }\n }\n return undefined;\n };\n Renderer.prototype.renderEditregionContentHighlight = function (page, lineWidget, top) {\n if (!isNullOrUndefined(this.documentHelper.owner.editorModule) && page.documentHelper.selection && !isNullOrUndefined(page.documentHelper.selection.contentControleditRegionHighlighters)) {\n var contenControl = this.documentHelper.owner.editorModule.getContentControl();\n if (!isNullOrUndefined(contenControl)) {\n var widgetInfo = this.documentHelper.selection.contentControleditRegionHighlighters.get(contenControl);\n var totalHeight = top;\n if (!isNullOrUndefined(widgetInfo) && lineWidget == contenControl.line) {\n for (var i = 0; i < widgetInfo.length; i++) {\n var color = contenControl.contentControlProperties.color;\n if (color === '#00000000') {\n //Change color to grey if color is transparent\n color = '#939393';\n }\n var widget = widgetInfo.get(widgetInfo.keys[i]);\n var previousHeight = totalHeight;\n totalHeight += widgetInfo.keys[i].height;\n for (var j = 0; j < widget.length; j++) {\n var startX = widget[j].left - 2;\n var endX = widget[j].left + widget[j].width + 2;\n if (widgetInfo.length - 1 > i) {\n endX = this.documentHelper.getParagraphLeftPosition(lineWidget.paragraph) + this.getContainerWidth(lineWidget.paragraph, page) + HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.borders.right.space);\n }\n var startY = previousHeight;\n var endY = totalHeight;\n if (i == 0) {\n //left\n this.renderSingleBorder(color, startX, startY, startX, endY, 1, 'single');\n //top\n this.renderSingleBorder(color, startX, startY, endX, startY, 1, 'single');\n //right\n this.renderSingleBorder(color, endX, startY, endX, endY, 1, 'single');\n }\n if (i > 0 && i < widgetInfo.length - 1) {\n //left\n this.renderSingleBorder(color, startX, startY, startX, endY, 1, 'single');\n //right\n this.renderSingleBorder(color, endX, startY, endX, endY, 1, 'single');\n //top\n var widgets = widgetInfo.get(widgetInfo.keys[i - 1]);\n this.renderSingleBorder(color, startX, startY, widgets[j].left - 2, startY, 1, 'single');\n }\n if (i == widgetInfo.length - 1) {\n // left\n this.renderSingleBorder(color, startX, startY, startX, endY, 1, 'single');\n //bottom\n this.renderSingleBorder(color, startX, endY, endX, endY, 1, 'single');\n //top\n if (widgetInfo.length > 1) {\n var widgets = widgetInfo.get(widgetInfo.keys[i - 1]);\n var endUpdated = this.documentHelper.getParagraphLeftPosition(lineWidget.paragraph) + this.getContainerWidth(lineWidget.paragraph, page) + HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.borders.right.space);\n this.renderSingleBorder(color, endX, startY, endUpdated, startY, 1, 'single');\n if (startX < widgets[j].left) {\n this.renderSingleBorder(color, widgets[j].left - 2, startY, startX, startY, 1, 'single');\n }\n }\n //right\n this.renderSingleBorder(color, endX, startY, endX, endY, 1, 'single');\n if (!isNullOrUndefined(contenControl) && (contenControl.contentControlProperties.type === 'ComboBox' || contenControl.contentControlProperties.type === 'DropDownList' || contenControl.contentControlProperties.type === 'Date')) {\n var element = document.getElementById(\"contenticon\");\n if (element) {\n element.style.display = 'block';\n startX = this.getScaledValue(endX, 1);\n startY = this.getScaledValue(startY, 2);\n element.style.left = startX + \"px\"; // Position to the right of the right border\n element.style.top = startY + \"px\"; // Align with the top of the border\n element.style.border = '0.5px solid #7F7F7F';\n element.style.backgroundColor = '#D3D3D3';\n element.style.height = lineWidget.height + 'px';\n element.addEventListener('click', this.documentHelper.owner.editorModule.contentControlDropDownChange.bind(this));\n }\n else {\n var contentMark = document.createElement('div');\n contentMark.id = \"contenticon\";\n contentMark.style.display = 'block';\n contentMark.style.position = 'sticky';\n startX = this.getScaledValue(endX, 1);\n startY = this.getScaledValue(startY, 2);\n contentMark.style.left = startX + \"px\"; // Position to the right of the right border\n contentMark.style.top = startY + \"px\"; // Align with the top of the border\n contentMark.style.border = '0.5px solid #7F7F7F';\n contentMark.style.backgroundColor = '#D3D3D3';\n contentMark.style.height = lineWidget.height + 'px';\n contentMark.classList.add('e-de-cmt-mark');\n var span = document.createElement('span');\n span.classList.add('e-icons');\n span.classList.add('e-chevron-down-fill');\n contentMark.appendChild(span);\n this.documentHelper.pageContainer.appendChild(contentMark);\n contentMark.addEventListener('click', this.documentHelper.owner.editorModule.contentControlDropDownChange.bind(this));\n }\n }\n }\n }\n }\n }\n }\n }\n };\n Renderer.prototype.renderEditRegionHighlight = function (page, lineWidget, top) {\n if (page.documentHelper.selection && !isNullOrUndefined(page.documentHelper.selection.editRegionHighlighters)) {\n var renderHighlight = this.documentHelper.selection.editRegionHighlighters.containsKey(lineWidget);\n if (!renderHighlight && lineWidget.paragraph.isInHeaderFooter) {\n var keys = this.documentHelper.selection.editRegionHighlighters.keys;\n lineWidget = this.checkHeaderFooterLineWidget(lineWidget, keys);\n if (!isNullOrUndefined(lineWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n var widgetInfo = this.documentHelper.selection.editRegionHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = widgetInfo[i].color !== '' ? widgetInfo[i].color : '#add8e6';\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(lineWidget.height));\n }\n }\n }\n };\n Renderer.prototype.renderSearchHighlight = function (page, lineWidget, top) {\n if (this.documentHelper.owner.searchModule && !isNullOrUndefined(page.documentHelper.owner.searchModule.searchHighlighters)) {\n var renderHighlight = page.documentHelper.owner.searchModule.searchHighlighters.containsKey(lineWidget);\n if (!renderHighlight && lineWidget.paragraph.isInHeaderFooter) {\n var keys = page.documentHelper.owner.searchModule.searchHighlighters.keys;\n lineWidget = this.checkHeaderFooterLineWidget(lineWidget, keys);\n if (!isNullOrUndefined(lineWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n var widgetInfo = page.documentHelper.owner.searchModule.searchHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = this.viewer.owner.documentEditorSettings.searchHighlightColor;\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(lineWidget.height));\n }\n }\n }\n };\n Renderer.prototype.renderSelectionHighlight = function (page, lineWidget, top) {\n if (!this.isPrinting && page.documentHelper.owner.selectionModule && !this.documentHelper.isScrollToSpellCheck && page.documentHelper.owner.selectionModule.selectedWidgets.length > 0) {\n var renderHighlight = page.documentHelper.owner.selectionModule.selectedWidgets.containsKey(lineWidget);\n if (!renderHighlight && lineWidget.paragraph.isInHeaderFooter) {\n var keys = page.documentHelper.owner.selectionModule.selectedWidgets.keys;\n lineWidget = this.checkHeaderFooterLineWidget(lineWidget, keys);\n if (!isNullOrUndefined(lineWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n page.documentHelper.owner.selectionModule.addSelectionHighlight(this.selectionContext, lineWidget, top, page);\n }\n }\n };\n Renderer.prototype.renderSelectionHighlightOnTable = function (page, cellWidget) {\n if (!this.isPrinting && page.documentHelper.owner.selectionModule && page.documentHelper.owner.selectionModule.selectedWidgets.length > 0) {\n var renderHighlight = page.documentHelper.owner.selectionModule.selectedWidgets.containsKey(cellWidget);\n if (!renderHighlight && cellWidget.ownerTable.isInHeaderFooter) {\n var keys = page.documentHelper.owner.selectionModule.selectedWidgets.keys;\n cellWidget = this.checkHeaderFooterLineWidget(cellWidget, keys);\n if (!isNullOrUndefined(cellWidget)) {\n renderHighlight = true;\n }\n }\n if (renderHighlight) {\n page.documentHelper.owner.selectionModule.addSelectionHighlightTable(this.selectionContext, cellWidget, page);\n }\n }\n };\n Renderer.prototype.renderLine = function (lineWidget, page, left, top) {\n this.renderSelectionHighlight(page, lineWidget, top);\n var paraFormat = lineWidget.paragraph.paragraphFormat;\n var x = left;\n if (lineWidget.isFirstLine() && !paraFormat.bidi) {\n left += HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n if (this.documentHelper && this.documentHelper.selection && !isNullOrUndefined(this.documentHelper.selection.formFieldHighlighters)\n && this.documentHelper.selection.formFieldHighlighters.containsKey(lineWidget)) {\n if (this.documentHelper.owner.documentEditorSettings\n && this.documentHelper.owner.documentEditorSettings.formFieldSettings.applyShading) {\n var widgetInfo = page.documentHelper.selection.formFieldHighlighters.get(lineWidget);\n for (var i = 0; i < widgetInfo.length; i++) {\n this.pageContext.fillStyle = this.documentHelper.owner.documentEditorSettings.formFieldSettings.shadingColor;\n var height_1 = lineWidget.height;\n var isAltered = false;\n var isLastLine = lineWidget.isLastLine();\n if (isLastLine) {\n height_1 = height_1 - HelperMethods.convertPointToPixel(this.documentHelper.layout.getAfterSpacing(lineWidget.paragraph));\n if (lineWidget.paragraph.paragraphFormat.lineSpacing > 1) {\n var formField = this.getFormfieldInLine(lineWidget);\n if (!isNullOrUndefined(formField)) {\n var sizeInfo = this.documentHelper.textHelper.getHeight(formField.characterFormat);\n var maxHeight = sizeInfo.Height;\n if (lineWidget.paragraph.paragraphFormat.lineSpacingType === 'Multiple') {\n height_1 = height_1 - HelperMethods.convertPointToPixel(this.documentHelper.layout.getLineSpacing(lineWidget.paragraph, maxHeight, true));\n }\n else {\n top = top + HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.beforeSpacing);\n height_1 = sizeInfo.Height;\n isAltered = true;\n }\n }\n }\n }\n this.pageContext.fillRect(this.getScaledValue(widgetInfo[i].left, 1), this.getScaledValue(top, 2), this.getScaledValue(widgetInfo[i].width), this.getScaledValue(height_1));\n if (isAltered) {\n isAltered = false;\n top = top - HelperMethods.convertPointToPixel(lineWidget.paragraph.paragraphFormat.beforeSpacing);\n }\n }\n }\n }\n // Render search highlight\n this.renderSearchHighlight(page, lineWidget, top);\n // EditRegion highlight \n this.renderEditRegionHighlight(page, lineWidget, top);\n // Content region border\n this.renderEditregionContentHighlight(page, lineWidget, top);\n var commentIDList = [];\n var children = lineWidget.renderedElements;\n var underlineY = this.getUnderlineYPosition(lineWidget);\n var bookmarks = [];\n if (!isNullOrUndefined(lineWidget.paragraph.associatedCell) && lineWidget.paragraph.associatedCell.isRenderBookmarkStart) {\n var firstLineInFirstPara = lineWidget.paragraph.associatedCell.firstChild.firstChild;\n if (firstLineInFirstPara == lineWidget) {\n bookmarks.push({ x: left, y: top, height: lineWidget.height - lineWidget.margin.bottom, type: 0 });\n }\n }\n for (var i = 0; i < children.length; i++) {\n var elementBox = children[i];\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox) {\n var pageGap = 0;\n if (this.viewer instanceof PageLayoutViewer) {\n pageGap = this.viewer.pageGap;\n }\n var style = 'display:block;position:absolute;';\n var topPosition = this.getScaledValue((top) + (page.boundingRectangle.y -\n (pageGap * (page.index + 1)))) + (pageGap * (page.index + 1)) + 'px;';\n if (elementBox instanceof EditRangeStartElementBox && (this.documentHelper.owner.currentUser === elementBox.user || (elementBox.group === \"Everyone\" && elementBox.user === \"\"))) {\n if (this.documentHelper.owner.documentEditorSettings.highlightEditableRanges && elementBox.columnFirst == -1) {\n var height = elementBox.line.height - elementBox.line.margin.bottom;\n var xLeft = left;\n var yTop = top;\n var highlighters = this.documentHelper.selection.editRegionHighlighters;\n var widgetInfo = !isNullOrUndefined(highlighters) ? highlighters.get(lineWidget) : [];\n var color = !isNullOrUndefined(widgetInfo) && !isNullOrUndefined(widgetInfo[0]) ? widgetInfo[0].color : \"ffff00\";\n this.renderBookmark(this.getScaledValue(xLeft, 1), this.getScaledValue(yTop, 2), this.getScaledValue(lineWidget.height - lineWidget.margin.bottom), 0, color);\n }\n if (this.documentHelper.owner.enableLockAndEdit) {\n var l10n = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n l10n.setLocale(this.documentHelper.owner.locale);\n elementBox.renderLockMark(this.documentHelper.owner.currentUser, l10n);\n var settings = this.documentHelper.owner.documentEditorSettings.collaborativeEditingSettings;\n var color = elementBox.user === this.documentHelper.owner.currentUser ? settings.editableRegionColor : settings.lockedRegionColor;\n style += \"color:\" + color + \";\";\n var leftMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.leftMargin);\n var leftPosition = page.boundingRectangle.x + this.getScaledValue(leftMargin - 20) + 'px;';\n if (this.viewer instanceof WebLayoutViewer) {\n leftPosition = lineWidget.paragraph.x - 5 + 'px;';\n }\n style = style + 'left:' + leftPosition + 'top:' + topPosition;\n elementBox.editRangeMark.setAttribute('style', style);\n }\n else {\n if (elementBox.editRangeMark) {\n elementBox.editRangeMark.setAttribute('style', 'display:none');\n }\n }\n }\n else if (elementBox instanceof CommentCharacterElementBox &&\n elementBox.commentType === 0 && this.documentHelper.owner.selectionModule) {\n if (this.documentHelper.owner.enableComment) {\n var rightMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.rightMargin);\n var pageWidth = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.pageWidth);\n var leftPosition = page.boundingRectangle.x + this.getScaledValue((pageWidth - rightMargin) + (rightMargin / 4)) + 'px;';\n if (this.viewer instanceof WebLayoutViewer) {\n leftPosition = (page.boundingRectangle.width - (this.viewer.padding.right * 2) - (this.viewer.padding.left * 2)) + 'px;';\n }\n style = style + 'left:' + leftPosition + 'top:' + topPosition;\n if (commentIDList.indexOf(elementBox.commentId) === -1 && !isNullOrUndefined(elementBox.comment) && !elementBox.comment.isReply) {\n commentIDList.push(elementBox.commentId);\n elementBox.renderCommentMark(topPosition, leftPosition);\n elementBox.commentMark.setAttribute('style', style);\n }\n }\n else {\n if (elementBox.commentMark) {\n elementBox.commentMark.setAttribute('style', 'display:none');\n }\n }\n }\n }\n if (elementBox instanceof EditRangeEndElementBox && (this.documentHelper.owner.currentUser === elementBox.editRangeStart.user || (elementBox.editRangeStart.group === \"Everyone\" && elementBox.editRangeStart.user === \"\"))) {\n if (elementBox.editRangeStart.columnFirst == -1 && this.documentHelper.owner.documentEditorSettings.highlightEditableRanges) {\n var height = elementBox.line.height - elementBox.line.margin.bottom;\n var xLeft = left;\n var yTop = top;\n var highlighters = this.documentHelper.selection.editRegionHighlighters;\n var widgetInfo = !isNullOrUndefined(highlighters) ? highlighters.get(lineWidget) : [];\n var color = !isNullOrUndefined(widgetInfo) && !isNullOrUndefined(widgetInfo[0]) ? widgetInfo[0].color : \"ffff00\";\n this.renderBookmark(this.getScaledValue(xLeft, 1), this.getScaledValue(yTop, 2), this.getScaledValue(lineWidget.height - lineWidget.margin.bottom), 1, color);\n }\n }\n if (elementBox instanceof BookmarkElementBox && this.documentHelper.owner.documentEditorSettings.showBookmarks && this.documentHelper.getBookmarks().indexOf(elementBox.name) !== -1) {\n var height = elementBox.line.height - elementBox.line.margin.bottom;\n var xLeft = left;\n var yTop = top;\n if (elementBox.bookmarkType == 1) {\n if (this.isBookmarkEndAtStart(elementBox) && isNullOrUndefined(elementBox.properties)) {\n var previousParaElement = elementBox.paragraph;\n var prevRenderableElement = void 0;\n var isRenderablePresent = false;\n while (!isRenderablePresent && !isNullOrUndefined(previousParaElement)) {\n var lineIndex = previousParaElement.childWidgets.indexOf(elementBox.line) >= 0 ? previousParaElement.childWidgets.indexOf(elementBox.line) : previousParaElement.childWidgets.length - 1;\n for (var i_1 = lineIndex; i_1 >= 0; i_1--) {\n var line = previousParaElement.childWidgets[i_1];\n var elementIndex = line.children.indexOf(elementBox) >= 0 ? line.children.indexOf(elementBox) : line.children.length - 1;\n for (var j = elementIndex; j >= 0; j--) {\n if (this.isRenderable(line.children[j])) {\n prevRenderableElement = line.children[j];\n isRenderablePresent = true;\n break;\n }\n }\n if (isRenderablePresent) {\n break;\n }\n }\n if (!isRenderablePresent) {\n previousParaElement = this.documentHelper.selection.getPreviousParagraphBlock(previousParaElement);\n }\n }\n if (!isNullOrUndefined(prevRenderableElement)) {\n xLeft += this.documentHelper.selection.getWidth(prevRenderableElement.line, false) + this.documentHelper.textHelper.getParagraphMarkWidth(elementBox.line.paragraph.characterFormat);\n yTop = this.documentHelper.selection.getTop(prevRenderableElement.line);\n }\n }\n if (!isNullOrUndefined(elementBox.properties)) {\n if (elementBox.properties['isAfterParagraphMark']) {\n xLeft += this.documentHelper.textHelper.getParagraphMarkWidth(elementBox.line.paragraph.characterFormat);\n }\n if (elementBox.properties['isAfterCellMark']) {\n xLeft += this.documentHelper.textHelper.getWidth(String.fromCharCode(164), lineWidget.paragraph.characterFormat);\n }\n }\n }\n if (elementBox.bookmarkType == 1) {\n if (!isNullOrUndefined(elementBox.reference)) {\n if (isNullOrUndefined(elementBox.reference.properties)) {\n if (!this.documentHelper.selection.isRenderBookmarkAtEnd(elementBox)) {\n bookmarks.push({ x: xLeft, y: yTop, height: height, type: elementBox.bookmarkType });\n }\n }\n else {\n var bookmarkEndCell = elementBox.paragraph.associatedCell;\n if (isNullOrUndefined(bookmarkEndCell)) {\n bookmarks.push({ x: xLeft, y: yTop, height: height, type: elementBox.bookmarkType });\n }\n }\n }\n }\n else {\n if (isNullOrUndefined(elementBox.properties)) {\n bookmarks.push({ x: xLeft, y: yTop, height: height, type: elementBox.bookmarkType });\n }\n }\n }\n if (elementBox instanceof FieldElementBox || this.isFieldCode ||\n (elementBox.width === 0 && elementBox.height === 0)) {\n if (this.isFieldCode) {\n elementBox.width = 0;\n }\n left += elementBox.width + elementBox.margin.left;\n this.toSkipFieldCode(elementBox);\n continue;\n }\n if (!this.isPrinting) {\n if (this.getScaledValue(top + elementBox.margin.top, 2) + elementBox.height * this.documentHelper.zoomFactor < 0 ||\n this.getScaledValue(top + elementBox.margin.top, 2) > this.documentHelper.visibleBounds.height) {\n left += elementBox.width + elementBox.margin.left;\n if (elementBox instanceof TextElementBox) {\n if (this.documentHelper.owner.isSpellCheck) {\n elementBox.canTrigger = true;\n }\n elementBox.isVisible = false;\n if (!elementBox.isSpellChecked || elementBox.line.paragraph.isChangeDetected) {\n elementBox.ischangeDetected = true;\n }\n }\n if (!this.isExporting) {\n continue;\n }\n }\n }\n if (elementBox instanceof ListTextElementBox) {\n this.renderListTextElementBox(elementBox, left, top, underlineY);\n }\n else if (elementBox instanceof ImageElementBox) {\n left += elementBox.padding.left;\n this.renderImageElementBox(elementBox, left, top, underlineY);\n }\n else if (elementBox instanceof ShapeElementBox) {\n var shapeLeftMargin = elementBox.margin.left;\n var shapeTopMargin = elementBox.margin.top;\n var shapeLeft = this.getScaledValue(left + shapeLeftMargin, 1);\n var shapeTop = this.getScaledValue(top + shapeTopMargin, 2);\n this.renderShapeElementBox(elementBox, shapeLeft, shapeTop, page);\n }\n else {\n elementBox.isVisible = true;\n left += elementBox.padding.left;\n this.renderTextElementBox(elementBox, left, top, underlineY);\n }\n left += elementBox.width + elementBox.margin.left;\n if (lineWidget.paragraph.bidi) {\n x += (elementBox.margin.left);\n }\n else {\n x = left;\n }\n }\n if (this.documentHelper.owner.documentEditorSettings.showBookmarks && bookmarks.length > 0) {\n for (var i = 0; i < bookmarks.length; i++) {\n var bookmark = bookmarks[i];\n this.renderBookmark(this.getScaledValue(bookmark.x, 1), this.getScaledValue(bookmark.y, 2), this.getScaledValue(bookmark.height), bookmark.type);\n }\n }\n if (this.documentHelper.owner.documentEditorSettings.showHiddenMarks && !this.isPrinting) {\n var text = '';\n var currentCharFormat = lineWidget.paragraph.characterFormat;\n var y = 0;\n var characterFont = this.retriveCharacterformat(currentCharFormat);\n var l10n = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n l10n.setLocale(this.documentHelper.owner.locale);\n this.pageContext.fillStyle = HelperMethods.getColor(currentCharFormat.fontColor);\n var pageIndex = 0;\n if (lineWidget.paragraph.bodyWidget && !(lineWidget.paragraph.bodyWidget instanceof HeaderFooterWidget)) {\n pageIndex = this.documentHelper.pages.indexOf(lineWidget.paragraph.bodyWidget.page);\n }\n if ((children.length == 0 && !lineWidget.isEndsWithLineBreak && !isNullOrUndefined(lineWidget.paragraph)) || (lineWidget.paragraph.childWidgets.length === 1)) {\n y = lineWidget.paragraph.y + (this.documentHelper.textHelper.getHeight(currentCharFormat)).BaselineOffset + this.documentHelper.layout.getBeforeSpacing(lineWidget.paragraph, pageIndex);\n //Paragraph with empty linewidgets with mutiple line breaks\n if (!lineWidget.isEndsWithLineBreak && lineWidget.indexInOwner > 0 && children.length == 0) {\n y = top + lineWidget.previousLine.maxBaseLine;\n }\n }\n else {\n y = top + lineWidget.maxBaseLine;\n }\n if (currentCharFormat.revisions.length > 0) {\n //CharacterFormat Track changes is not supported., Hence only the Para mark changes are parsed and preserved in the charcterForamt. \n var color = this.documentHelper.authors.get(currentCharFormat.revisions[0].author);\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n }\n if (lineWidget.isEndsWithColumnBreak) {\n characterFont = this.retriveCharacterformat(currentCharFormat, 0.7);\n text = \".....\" + l10n.getConstant('Column Break') + \".....\";\n }\n else if (lineWidget.isEndsWithPageBreak) {\n characterFont = this.retriveCharacterformat(currentCharFormat, 0.7);\n if (lineWidget.paragraph.bidi) {\n text = String.fromCharCode(182) + '.....' + l10n.getConstant('Page Break') + '.....';\n }\n else {\n text = '.....' + l10n.getConstant('Page Break') + '.....' + String.fromCharCode(182);\n }\n var textinfo = this.documentHelper.textHelper.getWidth(text, currentCharFormat, FontScriptType.English);\n if (this.viewer instanceof PageLayoutViewer) {\n if (lineWidget.paragraph.bidi) {\n if (x < (textinfo + this.viewer.clientActiveArea.x)) {\n text = '.....';\n }\n }\n else {\n if (x > this.viewer.clientActiveArea.width) {\n text = '.....';\n }\n }\n }\n else {\n if (lineWidget.paragraph.bidi) {\n if ((x - textinfo) < this.viewer.clientActiveArea.x) {\n text = '.....';\n }\n }\n else {\n if ((x + textinfo) > (this.viewer.clientActiveArea.width + this.viewer.clientActiveArea.x)) {\n text = '.....';\n }\n }\n }\n }\n else if (lineWidget.isEndsWithLineBreak) {\n text = lineWidget.paragraph.bidi ? String.fromCharCode(8627) : String.fromCharCode(8629);\n }\n else if (lineWidget.paragraph.isInsideTable && isNullOrUndefined(lineWidget.nextLine) && isNullOrUndefined(lineWidget.paragraph.nextWidget)) {\n if (lineWidget.height != 0) { //The nested table parent cell mark is render the out bound ,So skip cell mark is linewidget height equal to zero \n text = String.fromCharCode(164);\n }\n }\n else if (isNullOrUndefined(lineWidget.nextLine)) {\n text = String.fromCharCode(182);\n }\n if (lineWidget.paragraph.containerWidget instanceof BodyWidget && !isNullOrUndefined(lineWidget.paragraph.nextRenderedWidget)) {\n if (lineWidget.paragraph.containerWidget.sectionIndex !== lineWidget.paragraph.nextRenderedWidget.containerWidget.sectionIndex && lineWidget.isLastLine()) {\n if (lineWidget.paragraph.nextRenderedWidget.containerWidget.sectionFormat.breakCode === 'NoBreak' && lineWidget.paragraph.containerWidget.index !== lineWidget.paragraph.nextRenderedWidget.containerWidget.index) {\n text = ':::::' + l10n.getConstant('Section Break Continuous') + ':::::';\n }\n else {\n text = ':::::' + l10n.getConstant('Section Break Next Page') + ':::::';\n }\n characterFont = this.retriveCharacterformat(currentCharFormat, 0.7);\n if (lineWidget.isEndsWithPageBreak) {\n if (lineWidget.paragraph.bidi) {\n text = text + String.fromCharCode(182) + '.....' + l10n.getConstant('Page Break') + '.....';\n }\n else {\n text = '.....' + l10n.getConstant('Page Break') + '.....' + String.fromCharCode(182) + text;\n }\n }\n var textinfo = this.documentHelper.textHelper.getWidth(text, currentCharFormat, FontScriptType.English);\n if (this.viewer instanceof PageLayoutViewer) {\n if (lineWidget.paragraph.bidi) {\n if (x < (textinfo + this.viewer.clientActiveArea.x)) {\n text = ':::::';\n if (lineWidget.isEndsWithPageBreak) {\n text = ':::::.....';\n }\n }\n }\n else {\n if ((x + textinfo - this.viewer.clientActiveArea.x) > (this.viewer.clientActiveArea.width)) {\n text = ':::::';\n if (lineWidget.isEndsWithPageBreak) {\n text = '.....:::::';\n }\n }\n }\n }\n else {\n if (lineWidget.paragraph.bidi) {\n if ((x - textinfo) < this.viewer.clientActiveArea.x) {\n text = ':::::';\n if (lineWidget.isEndsWithPageBreak) {\n text = ':::::.....';\n }\n }\n }\n else {\n if ((x + textinfo - this.documentHelper.pages[0].boundingRectangle.x) > (this.viewer.clientActiveArea.width)) {\n text = ':::::';\n if (lineWidget.isEndsWithPageBreak) {\n text = '.....:::::';\n }\n }\n }\n }\n }\n }\n if (text.length > 0) {\n if (lineWidget.paragraph.bidi && !lineWidget.paragraph.isEmpty()) {\n x -= this.documentHelper.textHelper.getWidth(text, currentCharFormat, FontScriptType.English);\n }\n this.pageContext.font = characterFont;\n var scaleFactor = currentCharFormat.scaling < 100 ? 1 : currentCharFormat.scaling / 100;\n this.pageContext.letterSpacing = currentCharFormat.characterSpacing * this.documentHelper.zoomFactor + 'pt';\n this.pageContext.save();\n this.pageContext.scale(scaleFactor, 1);\n this.pageContext.fillText(text, this.getScaledValue(x, 1) / (scaleFactor), this.getScaledValue(y, 2));\n this.pageContext.restore();\n }\n }\n };\n Renderer.prototype.isBookmarkEndAtStart = function (bookmark) {\n var para = bookmark.paragraph;\n var index = 0;\n var firstLine = para.childWidgets[index];\n var isBookmarkAtStart = true;\n while (firstLine.children.indexOf(bookmark) == -1) {\n firstLine = para.childWidgets[++index];\n if (index == para.childWidgets.length) {\n break;\n }\n }\n if (bookmark.line != firstLine) {\n return false;\n }\n var bookmarkIndex = firstLine.children.indexOf(bookmark) >= 0 ? firstLine.children.indexOf(bookmark) : -1;\n for (var i = bookmarkIndex; i >= 0; i--) {\n var element = firstLine.children[i];\n if (this.isRenderable(element)) {\n isBookmarkAtStart = false;\n }\n }\n if (isBookmarkAtStart) {\n return true;\n }\n else {\n return false;\n }\n };\n Renderer.prototype.isRenderable = function (element) {\n if (!(element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox || element instanceof EditRangeEndElementBox)) {\n return true;\n }\n return false;\n };\n Renderer.prototype.combineHexColors = function (color1, color2) {\n var hex1 = color1.replace(\"#\", \"\");\n var hex2 = color2.replace(\"#\", \"\");\n var r1 = parseInt(hex1.substring(0, 2), 16);\n var g1 = parseInt(hex1.substring(2, 4), 16);\n var b1 = parseInt(hex1.substring(4, 6), 16);\n var r2 = parseInt(hex2.substring(0, 2), 16);\n var g2 = parseInt(hex2.substring(2, 4), 16);\n var b2 = parseInt(hex2.substring(4, 6), 16);\n var r = Math.round((r1 * 0.35) + (r2 * 0.65));\n var g = Math.round((g1 * 0.35) + (g2 * 0.65));\n var b = Math.round((b1 * 0.35) + (b2 * 0.65));\n var mixedColor = \"#\" + r.toString(16) + g.toString(16) + b.toString(16);\n return mixedColor;\n };\n Renderer.prototype.renderBookmark = function (x, y, height, type, restrictColor) {\n if (this.isPrinting) {\n return;\n }\n this.pageContext.beginPath();\n this.pageContext.lineWidth = 1.5;\n var extensionLength = 3;\n if (type == 0) {\n this.pageContext.moveTo(x + extensionLength, y);\n this.pageContext.lineTo(x, y);\n this.pageContext.lineTo(x, y + height);\n this.pageContext.lineTo(x + extensionLength, y + height);\n }\n if (type == 1) {\n this.pageContext.moveTo(x - extensionLength, y);\n this.pageContext.lineTo(x, y);\n this.pageContext.lineTo(x, y + height);\n this.pageContext.lineTo(x - extensionLength, y + height);\n }\n this.pageContext.strokeStyle = \"#7F7F7F\";\n this.pageContext.stroke();\n this.pageContext.closePath();\n if (!isNullOrUndefined(restrictColor)) {\n var combinedColor = this.combineHexColors(restrictColor, \"#7F7F7F\");\n this.pageContext.fillStyle = combinedColor;\n this.pageContext.fillRect(x, y, 1.5, height);\n }\n };\n Renderer.prototype.retriveCharacterformat = function (character, fontSizeFactor) {\n if (isNullOrUndefined(fontSizeFactor)) {\n fontSizeFactor = 1;\n }\n var font = '';\n this.pageContext.textBaseline = 'alphabetic';\n var bold = '';\n var italic = '';\n var fontSize = 11;\n var fontFamily = '';\n bold = character.bold ? 'bold' : '';\n italic = character.italic ? 'italic' : '';\n fontSize = character.fontSize === 0 ? 0.5 : character.fontSize / (character.baselineAlignment === 'Normal' ? 1 : 1.5);\n fontSize = fontSize * this.documentHelper.zoomFactor * fontSizeFactor;\n fontFamily = character.fontFamily;\n font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + '\"' + fontFamily + '\"';\n return font;\n };\n Renderer.prototype.toSkipFieldCode = function (element) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n if (!this.isFieldCode && (!isNullOrUndefined(element.fieldEnd) || element.hasFieldEnd)) {\n this.fieldStacks.push(element);\n this.isFieldCode = true;\n }\n }\n else if (element.fieldType === 2 || element.fieldType === 1) {\n if (this.fieldStacks.length > 0 && element.fieldBegin === this.fieldStacks[this.fieldStacks.length - 1]) {\n this.fieldStacks.pop();\n this.isFieldCode = false;\n }\n }\n }\n };\n Renderer.prototype.getUnderlineYPosition = function (lineWidget) {\n var height = 0;\n var lineHeight = 0;\n for (var i = 0; i < lineWidget.children.length; i++) {\n if (lineWidget.children[i] instanceof FieldElementBox ||\n (lineWidget.children[i].width === 0 && lineWidget.children[i].height === 0)) {\n continue;\n }\n if (lineWidget.children[i] instanceof ShapeElementBox) {\n continue;\n }\n else {\n if (height < lineWidget.children[i].height + lineWidget.children[i].margin.top) {\n height = lineWidget.children[i].margin.top + lineWidget.children[i].height;\n lineHeight = (lineWidget.children[i] instanceof ImageElementBox) ? 0.9 : lineWidget.children[i].height / 20;\n }\n }\n }\n return height - 2 * lineHeight;\n };\n Renderer.prototype.renderListTextElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var format = elementBox.listLevel.characterFormat;\n var breakCharacterFormat = elementBox.line.paragraph.characterFormat;\n var color = format.hasValue('fontColor') ? format.fontColor : breakCharacterFormat.fontColor;\n this.pageContext.textBaseline = 'alphabetic';\n var bold = '';\n var italic = '';\n var fontFamily = format.hasValue('fontFamily') ? format.fontFamily : breakCharacterFormat.fontFamily;\n if (this.documentHelper.isIosDevice && (elementBox.text === String.fromCharCode(9679) || elementBox.text === String.fromCharCode(9675))) {\n fontFamily = '';\n }\n var fontSize = format.hasValue('fontSize') ? format.fontSize : breakCharacterFormat.fontSize;\n var baselineAlignment = format.hasValue('baselineAlignment') ? format.baselineAlignment : breakCharacterFormat.baselineAlignment;\n bold = format.hasValue('bold') ? format.bold ? 'bold' : '' : breakCharacterFormat.bold ? 'bold' : '';\n italic = format.hasValue('italic') ? format.italic ? 'italic' : '' : breakCharacterFormat.italic ? 'italic' : '';\n fontSize = fontSize === 0 ? 0.5 : fontSize / (baselineAlignment === 'Normal' ? 1 : 1.5);\n fontSize = this.isPrinting ? fontSize : fontSize * this.documentHelper.zoomFactor;\n var strikethrough = format.hasValue('strikethrough') ? format.strikethrough : breakCharacterFormat.strikethrough;\n var highlightColor = format.hasValue('highlightColor') ? format.highlightColor : breakCharacterFormat.highlightColor;\n if (highlightColor !== 'NoColor') {\n if (highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(highlightColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(highlightColor);\n }\n this.pageContext.fillRect(Math.floor(this.getScaledValue(left + leftMargin, 1)), Math.floor(this.getScaledValue(top + topMargin, 2) - 1), Math.ceil(this.getScaledValue(elementBox.width) + 1), Math.ceil(this.getScaledValue(elementBox.height) + 1));\n }\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + '\"' + fontFamily + '\"';\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n var baselineOffset = elementBox.baselineOffset;\n topMargin = (format.baselineAlignment === 'Normal') ? topMargin + baselineOffset : (topMargin + (baselineOffset / 1.5));\n var text = elementBox.text;\n var isParaBidi = elementBox.paragraph.paragraphFormat.bidi;\n if (isParaBidi) {\n this.pageContext.direction = 'rtl';\n left += elementBox.width;\n }\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (color === \"empty\" || color === '#00000000') {\n var bgColor = this.getBackgroundColorHeirachy(elementBox);\n this.pageContext.fillStyle = this.getDefaultFontColor(bgColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n }\n var scaleFactor = format.scaling < 100 ? 1 : format.scaling / 100;\n if (this.documentHelper.owner.documentEditorSettings.showHiddenMarks && !this.isPrinting) {\n if (elementBox instanceof ListTextElementBox && elementBox.text === \"\\t\") {\n this.tabMark(elementBox, format, left, top, leftMargin, topMargin);\n }\n this.pageContext.letterSpacing = format.characterSpacing * this.documentHelper.zoomFactor + 'pt';\n this.pageContext.save();\n this.pageContext.scale(scaleFactor, 1);\n this.pageContext.fillText(this.replaceSpace(text), this.getScaledValue(left + leftMargin, 1) / scaleFactor, this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width));\n this.pageContext.restore();\n }\n else {\n this.pageContext.letterSpacing = format.characterSpacing * this.documentHelper.zoomFactor + 'pt';\n this.pageContext.save();\n this.pageContext.scale(scaleFactor, 1);\n this.pageContext.fillText(text, this.getScaledValue(left + leftMargin, 1) / scaleFactor, this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width));\n this.pageContext.restore();\n }\n if (isParaBidi) {\n this.pageContext.direction = 'ltr';\n left -= elementBox.width;\n }\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline)) {\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, baselineAlignment);\n }\n if (strikethrough !== 'None') {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, baselineAlignment);\n }\n };\n Renderer.prototype.getDefaultFontColor = function (backColor) {\n if (HelperMethods.isVeryDark(backColor)) {\n return \"#FFFFFF\";\n }\n else {\n return \"#000000\";\n }\n };\n Renderer.prototype.renderTextElementBox = function (elementBox, left, top, underlineY) {\n var isHeightType = false;\n var containerWidget = elementBox.line.paragraph.containerWidget;\n if (containerWidget instanceof TableCellWidget) {\n isHeightType = (containerWidget.ownerRow.rowFormat.heightType === 'Exactly');\n }\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n if (isHeightType && containerWidget instanceof TableCellWidget) {\n var width = (containerWidget.width + containerWidget.margin.left + containerWidget.margin.right) - containerWidget.leftBorderWidth;\n this.clipRect(containerWidget.x - containerWidget.margin.left, containerWidget.y, this.getScaledValue(width), this.getScaledValue(containerWidget.height));\n }\n var format = elementBox.characterFormat;\n var doHighLight = true;\n if (format.highlightColor != \"NoColor\" && elementBox.text.trim() == \"\") {\n var firstLine = elementBox.line.paragraph.firstChild;\n var lastLine = elementBox.line.paragraph.lastChild;\n if (!isNullOrUndefined(firstLine) && firstLine instanceof LineWidget\n && firstLine.children.length > 0 && elementBox === firstLine.children[0]) {\n doHighLight = false;\n }\n if (!isNullOrUndefined(lastLine) && lastLine instanceof LineWidget\n && lastLine.children.length > 0 && elementBox === lastLine.children[lastLine.children.length - 1]) {\n doHighLight = false;\n }\n }\n if (format.highlightColor !== 'NoColor' && doHighLight) {\n if (format.highlightColor.substring(0, 1) !== '#') {\n this.pageContext.fillStyle = HelperMethods.getHighlightColorCode(format.highlightColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(format.highlightColor);\n }\n this.pageContext.fillRect(Math.floor(this.getScaledValue(left + leftMargin, 1)), Math.floor(this.getScaledValue(top + topMargin, 2) - 1), Math.ceil(this.getScaledValue(elementBox.width) + 1), Math.ceil(this.getScaledValue(elementBox.height) + 1));\n }\n var revisionInfo = this.checkRevisionType(elementBox);\n var color = revisionInfo.length > 0 ? this.getRevisionColor(revisionInfo) : format.fontColor;\n this.pageContext.textBaseline = 'alphabetic';\n var bold = '';\n var italic = '';\n var fontSize = 11;\n bold = format.bold ? 'bold' : '';\n italic = format.italic ? 'italic' : '';\n fontSize = format.fontSize === 0 ? 0.5 : format.fontSize / (format.baselineAlignment === 'Normal' ? 1 : 1.5);\n fontSize = this.isPrinting ? fontSize : fontSize * this.documentHelper.zoomFactor;\n var renderFontFamily = this.documentHelper.textHelper.getFontNameToRender(elementBox.scriptType, format);\n this.pageContext.font = bold + ' ' + italic + ' ' + fontSize + 'pt' + ' ' + '\"' + renderFontFamily + '\"';\n if (format.baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - elementBox.height / 1.5;\n }\n var baselineOffset = elementBox.baselineOffset;\n topMargin = (format.baselineAlignment === 'Normal') ? topMargin + baselineOffset : (topMargin + (baselineOffset / 1.5));\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (color === \"empty\" || color === '#00000000') {\n var bgColor = this.getBackgroundColorHeirachy(elementBox);\n this.pageContext.fillStyle = this.getDefaultFontColor(bgColor);\n }\n else {\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n }\n var scaledWidth = this.getScaledValue(elementBox.width);\n var text = elementBox.text;\n if (elementBox instanceof TabElementBox) {\n var tabElement = elementBox;\n if (tabElement.tabText === '' && !isNullOrUndefined(tabElement.tabLeader) && tabElement.tabLeader !== 'None') {\n text = this.getTabLeader(elementBox);\n tabElement.tabText = text;\n }\n else if (tabElement.tabText !== '') {\n text = tabElement.tabText;\n }\n }\n //this.pageContext.direction = 'ltr';\n var isRTL = format.bidi || this.documentHelper.textHelper.isRTLText(elementBox.text);\n text = this.documentHelper.textHelper.setText(text, isRTL, format.bdo, true);\n if (format.allCaps) {\n text = text.toUpperCase();\n }\n var characterRange = elementBox.characterRange;\n if (((characterRange == CharacterRangeType.WordSplit) ||\n (((characterRange & CharacterRangeType.WordSplit) == CharacterRangeType.WordSplit) &&\n ((characterRange & CharacterRangeType.RightToLeft) == CharacterRangeType.RightToLeft))) && format.bidi) {\n text = this.inverseCharacter(text);\n }\n var scaleFactor = format.scaling < 100 ? 1 : format.scaling / 100;\n if (characterRange === CharacterRangeType.RightToLeft && !HelperMethods.startsWith(text, ' ')) {\n this.pageContext.direction = 'rtl';\n left += elementBox.width;\n }\n if (this.documentHelper.owner.documentEditorSettings.showHiddenMarks && !this.isPrinting) {\n if ((elementBox instanceof TabElementBox || elementBox instanceof TextElementBox) && elementBox.text === \"\\t\") {\n this.tabMark(elementBox, format, left, top, leftMargin, topMargin);\n }\n if (text === '\\r') {\n text = String.fromCharCode(182);\n }\n this.pageContext.letterSpacing = format.characterSpacing * this.documentHelper.zoomFactor + 'pt';\n this.pageContext.save();\n this.pageContext.scale(scaleFactor, 1);\n this.pageContext.fillText(this.replaceSpace(text), this.getScaledValue(left + leftMargin, 1) / (scaleFactor), this.getScaledValue(top + topMargin, 2), scaledWidth);\n this.pageContext.restore();\n }\n else {\n this.pageContext.letterSpacing = format.characterSpacing * this.documentHelper.zoomFactor + 'pt';\n this.pageContext.save();\n this.pageContext.scale(scaleFactor, 1);\n this.pageContext.fillText(text, this.getScaledValue(left + leftMargin, 1) / (scaleFactor), this.getScaledValue(top + topMargin, 2), scaledWidth);\n this.pageContext.restore();\n }\n if (characterRange === CharacterRangeType.RightToLeft && !HelperMethods.startsWith(text, ' ')) {\n this.pageContext.direction = 'ltr';\n left -= elementBox.width;\n }\n if (this.documentHelper.owner.isSpellCheck) {\n if (((this.documentHelper.owner.isSpellCheck && !this.spellChecker.removeUnderline) && (this.documentHelper.triggerSpellCheck || elementBox.canTrigger) && elementBox.text !== ' ' && !this.documentHelper.isScrollHandler && (isNullOrUndefined(elementBox.previousNode) || !(elementBox.previousNode instanceof FieldElementBox)))) {\n elementBox.canTrigger = true;\n this.leftPosition = this.pageLeft;\n this.topPosition = this.pageTop;\n var errorDetails = this.spellChecker.checktextElementHasErrors(elementBox.text, elementBox, left);\n if (errorDetails.errorFound && !this.isPrinting) {\n color = '#FF0000';\n var backgroundColor = (containerWidget instanceof TableCellWidget) ? containerWidget.cellFormat.shading.backgroundColor : this.documentHelper.backgroundColor;\n var errors = this.spellChecker.errorWordCollection;\n for (var i = 0; i < errorDetails.elements.length; i++) {\n var currentElement = errorDetails.elements[i];\n var exactText = this.spellChecker.manageSpecialCharacters(currentElement.text, undefined, true);\n if (elementBox.ignoreOnceItems.indexOf(exactText) === -1) {\n if (isRTL) {\n this.renderWavyLine(currentElement, (isNullOrUndefined(currentElement.end)) ? left : currentElement.end.location.x, top, underlineY, color, 'Single', format.baselineAlignment, backgroundColor);\n }\n else {\n this.renderWavyLine(currentElement, (isNullOrUndefined(currentElement.start)) ? left : currentElement.start.location.x, top, underlineY, color, 'Single', format.baselineAlignment, backgroundColor);\n }\n if (errors.containsKey(exactText)) {\n var errorElements = errors.get(exactText);\n if (errorElements.indexOf(currentElement) === -1) {\n errorElements.push(currentElement);\n }\n }\n }\n }\n }\n else if (elementBox.ischangeDetected || this.documentHelper.triggerElementsOnLoading) {\n elementBox.ischangeDetected = false;\n this.handleChangeDetectedElements(elementBox, underlineY, left, top, format.baselineAlignment);\n }\n }\n }\n var currentInfo = this.getRevisionType(revisionInfo, true);\n if (format.underline !== 'None' && !isNullOrUndefined(format.underline) || (!isNullOrUndefined(currentInfo) && (currentInfo.type === 'Insertion' || currentInfo.type === 'MoveTo'))) {\n this.renderUnderline(elementBox, left, top, underlineY, color, format.underline, format.baselineAlignment, currentInfo);\n }\n currentInfo = this.getRevisionType(revisionInfo, false);\n if (format.strikethrough !== 'None' && !isNullOrUndefined(format.strikethrough) || (!isNullOrUndefined(currentInfo) && (currentInfo.type === 'Deletion' || currentInfo.type === 'MoveFrom'))) {\n this.renderStrikeThrough(elementBox, left, top, format.strikethrough, color, format.baselineAlignment, currentInfo);\n }\n if (isHeightType) {\n this.pageContext.restore();\n }\n };\n Renderer.prototype.tabMark = function (elementBox, format, left, top, leftMargin, topMargin) {\n var tabMarkString = elementBox.paragraph.bidi ? String.fromCharCode(8592) : String.fromCharCode(8594);\n var tabMarkWidth = this.documentHelper.textHelper.getWidth(tabMarkString, format, elementBox.scriptType);\n var availableSpaceWidth = elementBox.width / 2;\n var tabWidth = tabMarkWidth / 2;\n this.pageContext.font = this.retriveCharacterformat(elementBox.characterFormat);\n this.pageContext.letterSpacing = format.characterSpacing * this.documentHelper.zoomFactor + 'pt';\n this.pageContext.save();\n var scaleFactor = format.scaling < 100 ? 1 : format.scaling / 100;\n this.pageContext.scale(scaleFactor, 1);\n if (availableSpaceWidth > tabMarkWidth) {\n this.pageContext.fillText(tabMarkString, this.getScaledValue(((left + leftMargin + availableSpaceWidth) - (tabWidth)), 1) / scaleFactor, this.getScaledValue(top + topMargin, 2));\n }\n else {\n this.pageContext.fillText(tabMarkString, this.getScaledValue(left + leftMargin, 1) / scaleFactor, this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width));\n }\n this.pageContext.restore();\n };\n Renderer.prototype.replaceSpace = function (text) {\n text = text.replace(new RegExp(String.fromCharCode(32), 'g'), String.fromCharCode(183));\n text = text.replace(new RegExp(String.fromCharCode(160), 'g'), String.fromCharCode(176));\n return text;\n };\n Renderer.prototype.inverseCharacter = function (ch) {\n switch (ch) {\n //Specify the '('\n case String.fromCharCode(40):\n //Specify the ')'\n return String.fromCharCode(41);\n //Specify the ')'\n case String.fromCharCode(41):\n //Specify the '('\n return String.fromCharCode(40);\n //Specify the '<'\n case String.fromCharCode(60):\n //Specify the '>'\n return String.fromCharCode(62);\n //Specify the '>'\n case String.fromCharCode(62):\n //Specify the '<'\n return String.fromCharCode(60);\n //Specify the '{'\n case String.fromCharCode(123):\n //Specify the '}'\n return String.fromCharCode(125);\n //Specify the '}'\n case String.fromCharCode(125):\n //Specify the '{'\n return String.fromCharCode(123);\n //Specify the '['\n case String.fromCharCode(91):\n //Specify the ']'\n return String.fromCharCode(93);\n //Specify the ']'\n case String.fromCharCode(93):\n //Specify the '['\n return String.fromCharCode(91);\n default:\n return ch;\n }\n };\n Renderer.prototype.getBackgroundColorHeirachy = function (element) {\n var bgColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (element.paragraph.isInsideTable) {\n var cell = element.paragraph.containerWidget;\n bgColor = cell.cellFormat.shading.backgroundColor;\n if (bgColor !== \"empty\" && bgColor !== '#00000000') {\n return bgColor;\n }\n else {\n bgColor = cell.ownerTable.tableFormat.shading.backgroundColor;\n if (bgColor !== \"empty\" && bgColor !== '#00000000') {\n return bgColor;\n }\n }\n }\n else if (element.paragraph.containerWidget instanceof TextFrame\n && !isNullOrUndefined(element.paragraph.containerWidget.containerShape) && !isNullOrUndefined(element.paragraph.containerWidget.containerShape.fillFormat) && element.paragraph.containerWidget.containerShape.fillFormat.color === '#000000FF') {\n return element.paragraph.containerWidget.containerShape.fillFormat.color;\n }\n return this.documentHelper.backgroundColor;\n };\n Renderer.prototype.handleChangeDetectedElements = function (elementBox, underlineY, left, top, baselineAlignment) {\n var _this = this;\n var checkText = elementBox.text.trim();\n var beforeIndex = this.pageIndex;\n if (elementBox.text === '\\v') {\n return;\n }\n if (!this.spellChecker.checkElementCanBeCombined(elementBox, underlineY, beforeIndex, true)) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var splittedText = checkText.split(/[\\s]+/);\n var markindex = elementBox.line.getOffset(elementBox, 0);\n var spaceValue = 1;\n if (splittedText.length > 1) {\n for (var i = 0; i < splittedText.length; i++) {\n var currentText = splittedText[i];\n var retrievedText = this.spellChecker.manageSpecialCharacters(currentText, undefined, true);\n if (this.spellChecker.ignoreAllItems.indexOf(retrievedText) === -1 && elementBox.ignoreOnceItems.indexOf(retrievedText) === -1) {\n this.handleUnorderedElements(retrievedText, elementBox, underlineY, i, markindex, i === splittedText.length - 1, beforeIndex);\n markindex += currentText.length + spaceValue;\n }\n }\n }\n else {\n var retrievedText = this.spellChecker.manageSpecialCharacters(checkText, undefined, true);\n if (checkText.length > 0) {\n if (this.spellChecker.ignoreAllItems.indexOf(retrievedText) === -1 && elementBox.ignoreOnceItems.indexOf(retrievedText) === -1) {\n var indexInLine_1 = elementBox.indexInOwner;\n var indexinParagraph_1 = elementBox.line.paragraph.indexInOwner;\n var spellInfo = this.spellChecker.checkSpellingInPageInfo(retrievedText);\n if (spellInfo.isElementPresent && this.spellChecker.enableOptimizedSpellCheck) {\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + spellInfo.hasSpellError + '}');\n this.spellChecker.handleWordByWordSpellCheck(jsonObject, elementBox, left, top, underlineY, baselineAlignment, true);\n }\n else {\n if (this.spellChecker.isInUniqueWords(retrievedText)) {\n var hasSpellingError = this.spellChecker.isErrorWord(retrievedText) ? true : false;\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + hasSpellingError + '}');\n this.spellChecker.handleWordByWordSpellCheck(jsonObject, elementBox, left, top, underlineY, baselineAlignment, true);\n }\n else if (!this.documentHelper.owner.editorModule.triggerPageSpellCheck || this.documentHelper.triggerElementsOnLoading) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.spellChecker.callSpellChecker(this.spellChecker.languageID, checkText, true, this.spellChecker.allowSpellCheckAndSuggestion).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n var canUpdate = (beforeIndex === _this.pageIndex || elementBox.isVisible) && (indexInLine_1 === elementBox.indexInOwner) && (indexinParagraph_1 === elementBox.line.paragraph.indexInOwner);\n _this.spellChecker.handleWordByWordSpellCheck(jsonObject, elementBox, left, top, underlineY, baselineAlignment, canUpdate);\n });\n }\n }\n }\n }\n }\n }\n };\n Renderer.prototype.handleUnorderedElements = function (currentText, elementBox, underlineY, iteration, markIndex, isLastItem, beforeIndex) {\n var _this = this;\n var indexInLine = elementBox.indexInOwner;\n var indexinParagraph = elementBox.line.paragraph.indexInOwner;\n if (currentText.length > 0) {\n var spellInfo = this.spellChecker.checkSpellingInPageInfo(currentText);\n if (spellInfo.isElementPresent && this.spellChecker.enableOptimizedSpellCheck) {\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + spellInfo.hasSpellError + '}');\n this.spellChecker.handleSplitWordSpellCheck(jsonObject, currentText, elementBox, true, underlineY, iteration, markIndex, isLastItem);\n }\n else {\n var canUpdate_1 = (elementBox.isVisible) && (indexInLine === elementBox.indexInOwner) && (indexinParagraph === elementBox.line.paragraph.indexInOwner);\n if (this.spellChecker.isInUniqueWords(currentText)) {\n var hasSpellingError = this.spellChecker.isErrorWord(currentText) ? true : false;\n var jsonObject = JSON.parse('{\\\"HasSpellingError\\\":' + hasSpellingError + '}');\n this.spellChecker.handleSplitWordSpellCheck(jsonObject, currentText, elementBox, canUpdate_1, underlineY, iteration, markIndex, isLastItem);\n }\n else if (!this.documentHelper.owner.editorModule.triggerPageSpellCheck || this.documentHelper.triggerElementsOnLoading) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.spellChecker.callSpellChecker(this.spellChecker.languageID, currentText, true, this.spellChecker.allowSpellCheckAndSuggestion).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n _this.spellChecker.handleSplitWordSpellCheck(jsonObject, currentText, elementBox, canUpdate_1, underlineY, iteration, markIndex, isLastItem);\n });\n }\n }\n }\n };\n Renderer.prototype.renderWavyLine = function (elementBox, left, top, underlineY, color, underline, baselineAlignment, backgroundColor) {\n if (this.isPrinting) {\n return;\n }\n if (elementBox.text.length > 1) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n var underlineHeight = renderedHeight / 20;\n var frequencyRange = 0.5;\n var amplitudeRange = 1.0;\n var stepToCover = .7;\n var y = 0;\n if (baselineAlignment === 'Subscript' || elementBox instanceof ListTextElementBox) {\n y = (renderedHeight - 2 * underlineHeight) + top;\n topMargin += elementBox.height - renderedHeight;\n y += topMargin > 0 ? topMargin : 0;\n }\n else {\n y = underlineY + top;\n }\n var specialCharacter = this.spellChecker.getSpecialCharactersInfo(elementBox);\n var whiteSpaceData = this.spellChecker.getWhiteSpaceCharacterInfo(elementBox);\n var x = left + specialCharacter.beginningWidth + ((whiteSpaceData.isBeginning) ? whiteSpaceData.width : 0) + elementBox.margin.left;\n var x1 = x * this.documentHelper.zoomFactor + this.leftPosition;\n var y1 = y * this.documentHelper.zoomFactor + this.topPosition;\n var x2 = x1 + this.getScaledValue(elementBox.width - (specialCharacter.beginningWidth + specialCharacter.endWidth) - whiteSpaceData.width);\n var startingPoint = new Point(x1, y1);\n var endingPoint = new Point(x2, y1);\n this.drawWavy(startingPoint, endingPoint, (x2 - x1) * frequencyRange, amplitudeRange, stepToCover, color, elementBox.height, backgroundColor);\n }\n };\n Renderer.prototype.drawWavy = function (from, to, frequency, amplitude, step, color, height, backColor, negative) {\n this.pageContext.save();\n this.pageContext.fillStyle = (!isNullOrUndefined(backColor) ? backColor : this.documentHelper.backgroundColor);\n this.pageContext.fillRect(from.x, from.y - amplitude, (to.x - from.x), amplitude * 3);\n this.pageContext.restore();\n this.pageContext.lineWidth = 1;\n this.pageContext.lineCap = 'round';\n this.pageContext.strokeStyle = color;\n this.pageContext.beginPath();\n //this.pageContext.save();\n var cx = 0;\n var cy = 0;\n var fx = from.x;\n var fy = from.y;\n var tx = to.x;\n var ty = to.y;\n var i = 0;\n var waveOffsetLength = 0;\n var ang = Math.atan2(ty - fy, tx - fx);\n var distance = Math.sqrt((fx - tx) * (fx - tx) + (fy - ty) * (fy - ty));\n var a = amplitude * 1;\n var f = Math.PI * frequency;\n for (i; i <= distance; i += step) {\n waveOffsetLength = Math.sin((i / distance) * f) * a;\n cx = from.x + Math.cos(ang) * i + Math.cos(ang - Math.PI / 2) * waveOffsetLength;\n cy = from.y + Math.sin(ang) * i + Math.sin(ang - Math.PI / 2) * waveOffsetLength;\n i > 0 ? this.pageContext.lineTo(cx, cy) : this.pageContext.moveTo(cx, cy);\n }\n this.pageContext.stroke();\n this.pageContext.restore();\n };\n /**\n * @private\n */\n Renderer.prototype.getTabLeader = function (elementBox) {\n var textWidth = 0;\n var tabString = this.getTabLeaderString(elementBox.tabLeader);\n var tabText = tabString;\n textWidth = this.documentHelper.textHelper.getWidth(tabText, elementBox.characterFormat, elementBox.scriptType);\n var count = Math.floor(elementBox.width / textWidth);\n if (textWidth == 0) {\n count = 0;\n }\n for (var i = 0; i <= count; i++) {\n tabText += tabString;\n }\n return tabText.slice(0, -1);\n };\n Renderer.prototype.getTabLeaderString = function (tabLeader) {\n var tabString = '';\n switch (tabLeader) {\n case 'Dot':\n tabString = '.';\n break;\n case 'Hyphen':\n tabString = '-';\n break;\n case 'Underscore':\n case 'Single':\n tabString = '_';\n break;\n }\n return tabString;\n };\n Renderer.prototype.clipRect = function (xPos, yPos, width, height) {\n this.pageContext.beginPath();\n this.pageContext.save();\n this.pageContext.rect(this.getScaledValue(xPos, 1), this.getScaledValue(yPos, 2), width, height);\n this.pageContext.clip();\n };\n Renderer.prototype.getTrimmedWidth = function (elementBox) {\n var width = elementBox.width;\n if (elementBox instanceof TextElementBox && !(elementBox instanceof TabElementBox) && isNullOrUndefined(elementBox.nextNode)) {\n width = this.documentHelper.textHelper.getWidth(HelperMethods.trimEnd(elementBox.text), elementBox.characterFormat, elementBox.scriptType);\n }\n return width;\n };\n Renderer.prototype.renderUnderline = function (elementBox, left, top, underlineY, color, underline, baselineAlignment, revisionInfo) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n var underlineHeight = renderedHeight / 20;\n var y = 0;\n var lineHeight = renderedHeight / 20;\n if (baselineAlignment === 'Subscript' || elementBox instanceof ListTextElementBox) {\n y = (renderedHeight - 2 * underlineHeight) + top;\n topMargin += elementBox.height - renderedHeight;\n y += topMargin > 0 ? topMargin : 0;\n }\n else {\n y = underlineY + top;\n }\n var lineCount = 0;\n if (!isNullOrUndefined(revisionInfo)) {\n underline = (revisionInfo.type === 'MoveTo') ? 'Double' : 'Single';\n }\n if (underline === 'Double') {\n y -= lineHeight;\n }\n if (elementBox instanceof ImageElementBox) {\n underlineHeight = 0.9;\n }\n while (lineCount < (underline === 'Double' ? 2 : 1)) {\n lineCount++;\n var width = this.getTrimmedWidth(elementBox);\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y, 2), this.getScaledValue(width), this.getScaledValue(underlineHeight));\n y += 2 * lineHeight;\n }\n };\n Renderer.prototype.renderStrikeThrough = function (elementBox, left, top, strikethrough, color, baselineAlignment, revisionInfo) {\n var renderedHeight = elementBox.height / (baselineAlignment === 'Normal' ? 1 : 1.5);\n var topMargin = elementBox.margin.top;\n if (baselineAlignment === 'Subscript') {\n topMargin += elementBox.height - renderedHeight;\n }\n top += topMargin > 0 ? topMargin : 0;\n var lineHeight = renderedHeight / 20;\n var y = (renderedHeight / 2) + (0.5 * lineHeight);\n var lineCount = 0;\n if (!isNullOrUndefined(revisionInfo)) {\n strikethrough = (revisionInfo.type === 'Deletion') ? 'SingleStrike' : 'DoubleStrike';\n }\n if (elementBox instanceof ImageElementBox) {\n lineHeight = 0.9;\n }\n if (strikethrough === 'DoubleStrike') {\n y -= lineHeight;\n }\n while (lineCount < (strikethrough === 'DoubleStrike' ? 2 : 1)) {\n lineCount++;\n var width = this.getTrimmedWidth(elementBox);\n this.pageContext.fillRect(this.getScaledValue(left + elementBox.margin.left, 1), this.getScaledValue(y + top, 2), this.getScaledValue(width), this.getScaledValue(lineHeight));\n y += 2 * lineHeight;\n }\n };\n Renderer.prototype.renderImageElementBox = function (elementBox, left, top, underlineY) {\n var topMargin = elementBox.margin.top;\n var leftMargin = elementBox.margin.left;\n var revisionInfo = this.checkRevisionType(elementBox);\n var color = revisionInfo.length > 0 ? this.getRevisionColor(revisionInfo) : 'black';\n this.pageContext.textBaseline = 'top';\n var widgetWidth = 0;\n var isClipped = false;\n var containerWid = elementBox.line.paragraph.containerWidget;\n var isHeightType = false;\n if (containerWid instanceof TableCellWidget) {\n isHeightType = (containerWid.ownerRow.rowFormat.heightType === 'Exactly');\n }\n if (elementBox.textWrappingStyle === 'Inline') {\n if (topMargin < 0 || elementBox.line.paragraph.width < elementBox.width) {\n // if (containerWid instanceof BodyWidget) {\n // widgetWidth = containerWid.width + containerWid.x;\n // } else \n if (containerWid instanceof TableCellWidget) {\n var leftIndent = 0;\n if (containerWid.childWidgets[0] instanceof ParagraphWidget) {\n var paraAdv = containerWid.childWidgets[0];\n leftIndent = paraAdv.paragraphFormat.leftIndent;\n }\n widgetWidth = containerWid.width + containerWid.margin.left - containerWid.leftBorderWidth - leftIndent;\n isClipped = true;\n this.clipRect(left + leftMargin, top + topMargin, this.getScaledValue(widgetWidth), this.getScaledValue(containerWid.height));\n }\n }\n else if (isHeightType) {\n var width = containerWid.width + containerWid.margin.left - containerWid.leftBorderWidth;\n isClipped = true;\n this.clipRect(containerWid.x, containerWid.y, this.getScaledValue(width), this.getScaledValue(containerWid.height));\n }\n }\n if (elementBox.isMetaFile && !isNullOrUndefined(elementBox.metaFileImageString)) {\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n else {\n var fallbackImage_1 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAgVBMVEX///8AAADgAADY2Njl5eVcXFxjY2NZWVl/f3+wsLCmpqb4+PiioqKpqam7u7vV1dX2uLj2wsLhFRXzpKT3vb30sbHhCwv74+P40dH+9vbkIyO2trbBwcHLy8tsbGycnJz529v4zMzrbGzlLS3qZmblNzfrdXXoRkbvi4vvgYHlHh7CZsBOAAADpUlEQVR4nO3da1faQBSF4ekAUQlUEFs14AXxVv7/D6yaQiZx5mSEYXF2ut+PNKzyyK5diYDmR9czx34AB49C/CjE759w3jvvWr15Tdgz3atXE54f++EcIArxoxA/CvGjED8K8aMQPwrxoxA/CvGLEeZ9jPJdhfk4GyCUjb3ECGE/Q6m/q3DwfudjP0ERZYN9hKdn2hvd3+0jHJz5/kBVuTk96bbQUEjhYR9ckiikUH8UUqg/CinUH4UU6o9CCvVHIYX6o5BC/VFIof4opFB/FFKoPwop1B+FFOqPQgrjyxfjVC38Lxk9tnAxGqZqdKtSOE4GHA5/fuNJpDCtcNHbv4VqYYqPLjgfUViPQgrjozA2CptRSGF8/59w+Wrt+rr1btNna1cPzg0wwuXavncxabnX7PfHYYXzlYARvlobQZyUR9mXm+1NMEK7SSLONgcVV9vb8IQXv4J3KSeKKlxXxNCzONkeYp8AV3p9UT1+P3FWHVAsq5thhGZSEb1DrSZq7dS5HUdoLiuBZ6jORG3tCwAkNJfCUJ2Jrqe1P0ESCkMNTdSACYNDDU7UoAkDQw1P1MAJvUMVJmrwhJ6hShM1gMIvQxUnahCFjaHKEzWQQneoxR95ogZTWBuqPFEDKnSHKk/UoArdoYoTNbDC5lBDEzW4QjMpYiZqgIXG/S76JhwHK5zVVipcnkIVuv/RW/HyFKhwYhuFr6NiCmdNoDBUSGFjovJQEYXuRN9ahwoorJ8uSZenPsMTNk+X2q6jwgm/ntHL11HhhL4zenmoYEL/Gb04VCxh6KKTNFQoYfiikzBUJKF00Sk8VCChfF00OFQcYdt10dBQYYRT5xn0n9G7Q0X8GfCzNNEyZ6iPgD/HlydaVg11DfhajJaJlm2HugIUrlomWrYZKuJKHz6vHhbSM/hROdRnxNe1meuXYvW0DB6+aflYrB7dlzDiCM3N1dVN6GDhMCDhjlHYjEIK46MwNgqbUUhhfJ/vA07wO8N1vw94ONo/3e/lTpVOYfc/UyG//ZmqW52fi/FuTNW3/lZ+eguF+qOQQv1RSKH+KKRQfxRSqD8KKdQfhRTqj0IK9UchhfqjkEL9UUih/iikUH8UUqg/CmXh6Hsv3jlK+wnvD/vgkrSHMMuyu1P9ZdmuwnycDQYn+svG3n9KEUKT9zHyf6+IEWJHIX4U4kchfhTiRyF+FOJHIX4U4kchfnVhijeZa6sunCf4ZdPamteEHY5C/CjEr/vCv0ec0g+AtS1QAAAAAElFTkSuQmCC';\n try {\n var imgX_1 = this.getScaledValue(left + leftMargin, 1);\n var imgY_1 = this.getScaledValue(top + topMargin, 2);\n var width_3 = this.getScaledValue(elementBox.width);\n var height_2 = this.getScaledValue(elementBox.height);\n var render_1 = this;\n elementBox.element.onload = function () {\n var lastLoaded = elementBox.element.getAttribute(\"lastLoaded\");\n if (!isNullOrUndefined(render_1.documentHelper) && lastLoaded !== elementBox.element.src) {\n if (!elementBox.isCrop) {\n render_1.pageContext.drawImage(elementBox.element, imgX_1, imgY_1, width_3, height_2);\n }\n else {\n render_1.pageContext.drawImage(elementBox.element, elementBox.cropX, elementBox.cropY, elementBox.cropWidth, elementBox.cropHeight, imgX_1, imgY_1, width_3, height_2);\n }\n }\n };\n elementBox.element.onerror = function () {\n elementBox.element.src = fallbackImage_1;\n };\n if (!elementBox.isCrop) {\n this.pageContext.drawImage(elementBox.element, imgX_1, //dx\n imgY_1, //dy\n width_3, //dw\n height_2); //dh\n }\n else {\n this.pageContext.drawImage(elementBox.element, elementBox.cropX, //sx\n elementBox.cropY, //sy\n elementBox.cropWidth, //sw\n elementBox.cropHeight, //sh\n imgX_1, //dx\n imgY_1, //dy\n width_3, //dw\n height_2); //dh\n }\n }\n catch (e) {\n elementBox.imageString = fallbackImage_1;\n this.documentHelper.addBase64StringInCollection(elementBox);\n elementBox.element.src = this.documentHelper.getImageString(elementBox);\n this.pageContext.drawImage(elementBox.element, this.getScaledValue(left + leftMargin, 1), this.getScaledValue(top + topMargin, 2), this.getScaledValue(elementBox.width), this.getScaledValue(elementBox.height));\n }\n }\n this.pageContext.fillStyle = HelperMethods.getColor(color);\n var currentRevision = this.getRevisionType(revisionInfo, false);\n if (!isNullOrUndefined(currentRevision) && (currentRevision.type === 'Deletion' || currentRevision.type === 'MoveFrom')) {\n this.renderStrikeThrough(elementBox, left, top, 'SingleStrike', color, 'Normal', currentRevision);\n }\n currentRevision = this.getRevisionType(revisionInfo, true);\n if (!isNullOrUndefined(currentRevision) && (currentRevision.type === 'Insertion' || currentRevision.type === 'MoveTo')) {\n var y = this.getUnderlineYPosition(elementBox.line);\n this.renderUnderline(elementBox, left, top, y, color, 'Single', 'Normal');\n }\n this.documentHelper.owner.picturePositionY = this.getScaledValue(top + topMargin, 2);\n if (!isNullOrUndefined(this.documentHelper.selection) && this.documentHelper.selection.checkContentControlLocked() && this.documentHelper.selection.start.currentWidget === elementBox.line) {\n var contentControlImage = this.documentHelper.owner.getImageContentControl();\n if (!isNullOrUndefined(contentControlImage) && contentControlImage.contentControlProperties.type == \"Picture\") {\n var format = elementBox.characterFormat;\n var color_1 = contentControlImage.contentControlProperties.color;\n if (color_1 === '#00000000') {\n //Change color to grey if color is transparent\n color_1 = '#939393';\n }\n this.renderImgBorder(elementBox, left, top, 'black', 'Solid', 0.5, format.baselineAlignment);\n }\n }\n if (isClipped) {\n this.pageContext.restore();\n }\n };\n Renderer.prototype.renderTableOutline = function (tableWidget) {\n var layout = new Layout(this.documentHelper);\n var table = tableWidget;\n tableWidget.width = this.documentHelper.layout.getTableWidth(table);\n var border = !table.isBidiTable ? layout.getTableLeftBorder(table.tableFormat.borders)\n : layout.getTableRightBorder(table.tableFormat.borders);\n var lineWidth = 0;\n //ToDo: Need to draw the borders based on the line style.\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y, tableWidget.x - tableWidget.margin.left - lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth, border.lineStyle);\n // }\n border = layout.getTableTopBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y - lineWidth / 2, lineWidth, border.lineStyle);\n // }\n border = !table.isBidiTable ? layout.getTableRightBorder(table.tableFormat.borders)\n : layout.getTableLeftBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y, tableWidget.x + tableWidget.width + tableWidget.margin.right + lineWidth / 2, tableWidget.y + tableWidget.height, lineWidth, border.lineStyle);\n // }\n border = layout.getTableBottomBorder(table.tableFormat.borders);\n lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, tableWidget.x - tableWidget.margin.left - lineWidth, tableWidget.y + tableWidget.height - lineWidth / 2, tableWidget.x + tableWidget.width + lineWidth + tableWidget.margin.right, tableWidget.y + tableWidget.height - lineWidth / 2, lineWidth, border.lineStyle);\n // }\n };\n /* eslint-disable */\n Renderer.prototype.renderTableCellOutline = function (documentHelper, cellWidget) {\n var layout = documentHelper.layout;\n var borders = undefined;\n var tableCell = cellWidget;\n var cellTopMargin = 0;\n var cellBottomMargin = 0;\n var cellLeftMargin = 0;\n var cellRightMargin = 0;\n var height = 0;\n var isBidiTable = cellWidget.ownerTable.isBidiTable;\n borders = tableCell.cellFormat.borders;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n cellBottomMargin = cellWidget.margin.bottom - cellWidget.containerWidget.bottomBorderWidth;\n cellTopMargin = cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth;\n }\n cellLeftMargin = cellWidget.margin.left - cellWidget.leftBorderWidth;\n cellRightMargin = cellWidget.margin.right - cellWidget.rightBorderWidth;\n if (!isNullOrUndefined(tableCell.ownerRow) && tableCell.ownerRow.rowFormat.heightType === 'Exactly') {\n height = HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n if (!isNullOrUndefined(tableCell.ownerRow) && [tableCell.ownerRow].length <= 1) {\n height = Math.max(HelperMethods.convertPointToPixel(tableCell.ownerRow.rowFormat.height), cellWidget.height) + cellTopMargin + cellBottomMargin;\n }\n else {\n height = cellWidget.height + cellTopMargin + cellBottomMargin;\n }\n }\n var border = !isBidiTable ? TableCellWidget.getCellLeftBorder(tableCell) : TableCellWidget.getCellRightBorder(tableCell);\n var lineWidth = 0;\n // if (!isNullOrUndefined(border )) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth()); //Renders the cell left border.\n this.renderCellBackground(height, cellWidget, cellLeftMargin, cellRightMargin, lineWidth);\n var leftBorderWidth = lineWidth;\n if (tableCell.index === 0 || tableCell.cellFormat.rowSpan === 1 || (tableCell.cellFormat.rowSpan > 1 && tableCell.columnIndex === 0)) {\n this.renderSingleBorder(border.color, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y - cellWidget.margin.top, cellWidget.x - cellLeftMargin - lineWidth, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth, border.lineStyle);\n }\n else {\n for (var i = 0; i < tableCell.ownerTable.childWidgets.length; i++) {\n var row = tableCell.ownerTable.childWidgets[i];\n var cell = void 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var currentCell = row.childWidgets[j];\n if ((currentCell.columnIndex + currentCell.cellFormat.columnSpan - 1) === tableCell.columnIndex - 1) {\n cell = currentCell;\n break;\n }\n else if (row.childWidgets[j].columnIndex >= tableCell.columnIndex && row.childWidgets[j].previousWidget) {\n cell = row.childWidgets[j].previousWidget;\n break;\n }\n }\n if (cell && cell.columnIndex + cell.cellFormat.columnSpan - 1 === tableCell.columnIndex - 1) {\n var border_1 = !isBidiTable ? TableCellWidget.getCellRightBorder(cell) : TableCellWidget.getCellLeftBorder(cell);\n var lineWidthInt = HelperMethods.convertPointToPixel(border_1.getLineWidth());\n cellLeftMargin = tableCell.margin.left - lineWidthInt;\n if (cell.y + cell.height < tableCell.y) {\n continue;\n }\n else if (cell.y < tableCell.y && cell.y + cell.height > tableCell.y) {\n this.renderSingleBorder(border_1.color, tableCell.x - cellLeftMargin - lineWidthInt, tableCell.y - cellTopMargin, tableCell.x - cellLeftMargin - lineWidthInt, cell.y + cell.height + cell.margin.bottom, lineWidthInt, border_1.lineStyle);\n }\n else if ((cell.y === tableCell.y) || (cell.y > tableCell.y && cell.y + cell.height < tableCell.y + tableCell.height)) {\n this.renderSingleBorder(border_1.color, tableCell.x - cellLeftMargin - lineWidthInt, cell.y - cell.margin.top, tableCell.x - cellLeftMargin - lineWidthInt, cell.y + cell.height + cell.margin.bottom, lineWidthInt, border_1.lineStyle);\n }\n else if (cell.y < tableCell.y + tableCell.height && cell.y + cell.height >= tableCell.y + tableCell.height) {\n this.renderSingleBorder(border_1.color, tableCell.x - cellLeftMargin - lineWidthInt, cell.y - cell.margin.top, tableCell.x - cellLeftMargin - lineWidthInt, cell.y + cell.height + cellBottomMargin, lineWidthInt, border_1.lineStyle);\n }\n else if (cell.y > tableCell.y + tableCell.height) {\n break;\n }\n }\n }\n }\n // }\n if (tableCell.updatedTopBorders && tableCell.updatedTopBorders.length > 1) {\n var cellX = cellWidget.x - cellWidget.margin.left - leftBorderWidth / 2;\n var cellY = cellWidget.y - cellWidget.margin.top;\n for (var a = 0; a < tableCell.updatedTopBorders.length; a++) {\n var borderInfo = tableCell.updatedTopBorders[a];\n border = borderInfo.border;\n if (border.lineStyle !== 'None' && border.lineWidth < TableCellWidget.getCellTopBorder(tableCell).lineWidth) {\n border.lineWidth = TableCellWidget.getCellTopBorder(tableCell).lineWidth;\n }\n if (!isNullOrUndefined(border)) {\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, cellX, cellY + lineWidth / 2, cellX + borderInfo.width, cellY + lineWidth / 2, lineWidth, border.lineStyle);\n cellX = cellX + borderInfo.width;\n }\n }\n }\n else {\n border = TableCellWidget.getCellTopBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell top border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n var width = 0;\n this.renderSingleBorder(border.color, cellWidget.x - cellWidget.margin.left - leftBorderWidth / 2, cellWidget.y - cellWidget.margin.top + lineWidth / 2, cellWidget.x + cellWidget.width + cellWidget.margin.right + width, cellWidget.y - cellWidget.margin.top + lineWidth / 2, lineWidth, border.lineStyle);\n // }\n }\n var isLastCell = false;\n if (!isBidiTable) {\n isLastCell = tableCell.cellIndex === tableCell.ownerRow.childWidgets.length - 1;\n }\n else {\n isLastCell = tableCell.columnIndex === 0;\n }\n var prevRowSpannedCells = tableCell.containerWidget.getPreviousRowSpannedCells();\n var isAffectedByRowSpan = false;\n for (var k = 0; k < prevRowSpannedCells.length; k++) {\n var spannedCell = prevRowSpannedCells[k];\n if (tableCell.rowIndex < spannedCell.rowIndex + spannedCell.cellFormat.rowSpan && tableCell.columnIndex < spannedCell.columnIndex) {\n isAffectedByRowSpan = true;\n break;\n }\n }\n if ((tableCell.ownerTable.tableFormat.cellSpacing > 0 || isLastCell) && (isBidiTable || tableCell.columnIndex + tableCell.cellFormat.columnSpan === tableCell.ownerTable.tableHolder.columns.length || !isAffectedByRowSpan)) {\n border = isBidiTable ? TableCellWidget.getCellLeftBorder(tableCell) : TableCellWidget.getCellRightBorder(tableCell);\n // if (!isNullOrUndefined(border )) { //Renders the cell right border. \n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y - cellWidget.margin.top, cellWidget.x + cellWidget.width + cellWidget.margin.right - lineWidth / 2, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth, border.lineStyle);\n // }\n }\n var nextRow = tableCell.ownerRow.nextWidget;\n //Specifies the next row is within the current table widget.\n //True means current row is not rendered at page end; Otherwise False.\n var nextRowIsInCurrentTableWidget = false;\n var previousCellIndex = undefined;\n if (!isNullOrUndefined(nextRow)) {\n if (nextRow.lastChild) {\n var lastCellWidget = nextRow.lastChild;\n previousCellIndex = lastCellWidget.columnIndex + lastCellWidget.cellFormat.columnSpan;\n }\n var nextRowWidget = undefined;\n // if (viewer.renderedElements.containsKey(nextRow) && viewer.renderedElements.get(nextRow).length > 0) {\n nextRowWidget = nextRow;\n // }\n if (nextRowWidget instanceof TableRowWidget) {\n if (cellWidget.containerWidget instanceof TableRowWidget && cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n nextRowIsInCurrentTableWidget = cellWidget.containerWidget.containerWidget.childWidgets.indexOf(nextRowWidget) !== -1;\n }\n }\n }\n if (tableCell.ownerTable.tableFormat.cellSpacing > 0 || tableCell.ownerRow.rowIndex === tableCell.ownerTable.childWidgets.length - 1\n || (tableCell.cellFormat.rowSpan > 1\n && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan >= tableCell.ownerTable.childWidgets.length) ||\n !nextRowIsInCurrentTableWidget || this.isRenderHeader || previousCellIndex && nextRow.childWidgets.length < tableCell.ownerRow.childWidgets.length\n && previousCellIndex < tableCell.columnIndex + tableCell.cellFormat.columnSpan ||\n ((!isNullOrUndefined(tableCell.cellFormat.borders.bottom) && tableCell.cellFormat.borders.bottom.lineStyle !== 'Cleared' && tableCell.cellFormat.rowSpan === 1 && !isBidiTable) &&\n ((!isNullOrUndefined(nextRow) && cellWidget.x < (nextRow.firstChild.x - nextRow.firstChild.margin.left) &&\n nextRow.rowFormat.gridBefore > 0 && (nextRow.rowFormat.beforeWidth !== 0 || nextRow.rowFormat.gridBeforeWidth !== 0)) ||\n (!isNullOrUndefined(nextRow) && cellWidget.x + cellWidget.width > (nextRow.lastChild.x + nextRow.lastChild.width + nextRow.lastChild.margin.right) &&\n nextRow.rowFormat.gridAfter > 0 && (nextRow.rowFormat.afterWidth !== 0 || nextRow.rowFormat.gridAfterWidth !== 0))))) {\n var bottomBorder = tableCell.cellFormat.borders.bottom;\n if (!isNullOrUndefined(bottomBorder) && bottomBorder.lineStyle === 'Cleared') {\n border = TableCellWidget.getCellBottomBorder(tableCell);\n }\n else {\n border = (tableCell.cellFormat.rowSpan > 1 && tableCell.ownerRow.rowIndex + tableCell.cellFormat.rowSpan === tableCell.ownerTable.childWidgets.length) ?\n //true part for vertically merged cells specifically.\n tableCell.getBorderBasedOnPriority(tableCell.getBorderBasedOnPriority(tableCell.cellFormat.borders.bottom, tableCell.ownerRow.rowFormat.borders.bottom), tableCell.ownerTable.tableFormat.borders.bottom)\n //false part for remaining cases that has been handled inside method. \n : TableCellWidget.getCellBottomBorder(tableCell);\n }\n var startX = cellWidget.x - cellWidget.margin.left - leftBorderWidth / 2;\n var endX = cellWidget.x + cellWidget.width + cellWidget.margin.right;\n if (!(previousCellIndex && nextRow.childWidgets.length < tableCell.ownerRow.childWidgets.length && previousCellIndex < tableCell.columnIndex + tableCell.cellFormat.columnSpan) &&\n !isNullOrUndefined(nextRow) && !isBidiTable && nextRow.rowFormat.gridAfter > 0 && (nextRow.rowFormat.afterWidth !== 0 || nextRow.rowFormat.gridAfterWidth !== 0) && !isNullOrUndefined(nextRow.lastChild) && !isNullOrUndefined(TableCellWidget.getCellTopBorder(nextRow.lastChild)) && TableCellWidget.getCellTopBorder(nextRow.lastChild).lineStyle !== \"None\" && cellWidget.x < nextRow.lastChild.x + nextRow.lastChild.width + nextRow.lastChild.margin.right) {\n startX = nextRow.lastChild.x + nextRow.lastChild.width + nextRow.lastChild.margin.right;\n }\n if (!(previousCellIndex && nextRow.childWidgets.length < tableCell.ownerRow.childWidgets.length && previousCellIndex < tableCell.columnIndex + tableCell.cellFormat.columnSpan) &&\n !isNullOrUndefined(nextRow) && !isBidiTable && nextRow.rowFormat.gridBefore > 0 && (nextRow.rowFormat.beforeWidth !== 0 || nextRow.rowFormat.gridBeforeWidth !== 0) && !isNullOrUndefined(nextRow.firstChild) && !isNullOrUndefined(TableCellWidget.getCellTopBorder(nextRow.firstChild)) && TableCellWidget.getCellTopBorder(nextRow.firstChild).lineStyle !== \"None\" && cellWidget.x + cellWidget.width > nextRow.firstChild.x - nextRow.firstChild.margin.left) {\n endX = nextRow.firstChild.x - nextRow.firstChild.margin.left;\n }\n // if (!isNullOrUndefined(border )) {\n //Renders the cell bottom border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n this.renderSingleBorder(border.color, startX, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, endX, cellWidget.y + cellWidget.height + cellBottomMargin + lineWidth / 2, lineWidth, border.lineStyle);\n // }\n }\n border = layout.getCellDiagonalUpBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal up border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n this.renderSingleBorder(border.color, cellWidget.x - cellLeftMargin, cellWidget.y + cellWidget.height + cellBottomMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y - cellTopMargin, lineWidth, border.lineStyle);\n // }\n }\n border = layout.getCellDiagonalDownBorder(tableCell);\n // if (!isNullOrUndefined(border )) {\n //Renders the cell diagonal down border.\n lineWidth = HelperMethods.convertPointToPixel(border.getLineWidth());\n if (lineWidth > 0) {\n this.renderSingleBorder(border.color, cellWidget.x - cellLeftMargin, cellWidget.y - cellTopMargin, cellWidget.x + cellWidget.width + cellRightMargin, cellWidget.y + cellWidget.height + cellBottomMargin, lineWidth, border.lineStyle);\n }\n // }\n };\n Renderer.prototype.renderCellBackground = function (height, cellWidget, leftMargin, rightMargin, lineWidth) {\n var cellFormat = cellWidget.cellFormat;\n var bgColor = cellFormat.shading.backgroundColor === '#ffffff' ?\n cellWidget.ownerTable.tableFormat.shading.backgroundColor : cellFormat.shading.backgroundColor;\n var left = cellWidget.x - leftMargin - lineWidth;\n var topMargin = (cellWidget.margin.top - cellWidget.containerWidget.topBorderWidth);\n var top = cellWidget.y - topMargin;\n var width = cellWidget.width + leftMargin + rightMargin + lineWidth / 2;\n if (cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n var revision = cellWidget.ownerRow.rowFormat.revisions[cellWidget.ownerRow.rowFormat.revisions.length - 1];\n bgColor = (revision.revisionType === 'Insertion') ? '#e1f2fa' : '#fce6f4';\n }\n this.pageContext.beginPath();\n if (bgColor !== 'empty') {\n this.pageContext.fillStyle = HelperMethods.getColor(bgColor);\n this.pageContext.fillRect(this.getScaledValue(left, 1), this.getScaledValue(top, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.closePath();\n }\n //Render foreground color\n if (cellFormat.shading.hasValue('foregroundColor') && cellFormat.shading.textureStyle !== 'TextureNone') {\n this.pageContext.beginPath();\n this.pageContext.fillStyle = this.drawTextureStyle(cellFormat.shading.textureStyle, HelperMethods.getColor(cellFormat.shading.foregroundColor), HelperMethods.getColor(cellFormat.shading.backgroundColor), cellFormat.shading.foregroundColor === 'empty', cellFormat.shading.backgroundColor === 'empty');\n this.pageContext.fillRect(this.getScaledValue(left, 1), this.getScaledValue(top, 2), this.getScaledValue(width), this.getScaledValue(height));\n this.pageContext.closePath();\n }\n };\n Renderer.prototype.drawTextureStyle = function (textureStyle, foreColor, backColor, isForeColorEmpty, isBackColorEmpty) {\n if (isBackColorEmpty) {\n backColor = '#ffffff';\n }\n if (isForeColorEmpty) {\n foreColor = '#000000';\n }\n if (textureStyle.indexOf('Percent') > -1) {\n var text = textureStyle.replace(\"Texture\", \"\").replace(\"Percent\", \"\").replace(\"Pt\", \".\");\n var percent = parseInt(text);\n return this.getForeColor(foreColor, backColor, percent, isForeColorEmpty, isBackColorEmpty);\n }\n if (textureStyle === 'TextureSolid') {\n return foreColor;\n }\n return '#FFFFFF';\n };\n Renderer.prototype.getForeColor = function (foreColor, backColor, percent, isForeColorEmpty, isBackColorEmpty) {\n var r = 0;\n var g = 0;\n var b = 0;\n var foreColorRgb = HelperMethods.convertHexToRgb(foreColor);\n var backColorRgb = HelperMethods.convertHexToRgb(backColor);\n r = this.getColorValue(foreColorRgb.r, backColorRgb.r, percent, isForeColorEmpty, isBackColorEmpty);\n g = this.getColorValue(foreColorRgb.g, backColorRgb.g, percent, isForeColorEmpty, isBackColorEmpty);\n b = this.getColorValue(foreColorRgb.b, backColorRgb.b, percent, isForeColorEmpty, isBackColorEmpty);\n return ('#' + HelperMethods.convertRgbToHex(r) + HelperMethods.convertRgbToHex(g) + HelperMethods.convertRgbToHex(b));\n };\n Renderer.prototype.getColorValue = function (foreColorValue, backColorValue, percent, isForeColorEmpty, isBackColorEmpty) {\n var colorValue = 0;\n if (percent == 100) {\n colorValue = foreColorValue;\n }\n else {\n if (isForeColorEmpty) {\n if (isBackColorEmpty) {\n colorValue = Math.round(255 * (1 - percent / 100));\n }\n else {\n colorValue = Math.round(backColorValue * (1 - percent / 100));\n }\n }\n else {\n if (isBackColorEmpty) {\n colorValue = Math.round(foreColorValue * (percent / 100));\n }\n else {\n colorValue = backColorValue + Math.round(foreColorValue * (percent / 100)) - Math.round(backColorValue * (percent / 100));\n }\n }\n }\n return colorValue;\n };\n Renderer.prototype.renderSingleBorder = function (color, startX, startY, endX, endY, lineWidth, lineStyle) {\n this.pageContext.beginPath();\n this.pageContext.moveTo(this.getScaledValue(startX, 1), this.getScaledValue(startY, 2));\n this.pageContext.lineTo(this.getScaledValue(endX, 1), this.getScaledValue(endY, 2));\n this.pageContext.lineWidth = this.getScaledValue(lineWidth);\n // set line color\n this.pageContext.strokeStyle = HelperMethods.getColor(color);\n if (lineStyle !== \"None\" && lineStyle !== \"Cleared\") {\n this.pageContext.stroke();\n }\n this.pageContext.closePath();\n };\n Renderer.prototype.getScaledValue = function (value, type) {\n if (this.isPrinting) {\n return value;\n }\n if (isNullOrUndefined(type)) {\n type = 0;\n }\n var x = value * this.documentHelper.zoomFactor;\n return x + (type === 1 ? this.pageLeft : (type === 2 ? this.pageTop : 0));\n };\n Renderer.prototype.checkRevisionType = function (elementBox) {\n var revisions = [];\n var count = elementBox.revisions.length;\n for (var i = 0; i < count; i++) {\n var currentRevision = elementBox.revisions[i];\n var color = this.documentHelper.authors.get(currentRevision.author);\n revisions.push({ 'type': currentRevision.revisionType, 'color': color });\n }\n return revisions;\n };\n Renderer.prototype.getRevisionColor = function (revisionInfo) {\n if (revisionInfo.length === 1) {\n return revisionInfo[0].color;\n }\n for (var i = 0; i < revisionInfo.length; i++) {\n if (revisionInfo[i].type === 'Deletion' || revisionInfo[i].type === 'MoveFrom') {\n return revisionInfo[i].color;\n }\n }\n if (revisionInfo.length > 0) {\n return revisionInfo[0].color;\n }\n return undefined;\n };\n Renderer.prototype.getRevisionType = function (revisionInfo, checkInsert) {\n if (revisionInfo.length === 0) {\n return undefined;\n }\n for (var i = 0; i < revisionInfo.length; i++) {\n var type = undefined;\n if (checkInsert && (revisionInfo[i].type === 'Insertion' || revisionInfo[i].type === 'MoveTo')) {\n type = revisionInfo[i];\n this.pageContext.fillStyle = HelperMethods.getColor(type.color);\n revisionInfo.splice(i, 1);\n return type;\n }\n if (!checkInsert && (revisionInfo[i].type === 'Deletion' || revisionInfo[i].type === 'MoveFrom')) {\n type = revisionInfo[i];\n this.pageContext.fillStyle = HelperMethods.getColor(type.color);\n revisionInfo.splice(i, 1);\n return type;\n }\n }\n return undefined;\n };\n Renderer.prototype.getFormfieldInLine = function (line) {\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof FieldElementBox && !isNullOrUndefined(line.children[i].formFieldData)) {\n return line.children[i];\n }\n }\n return undefined;\n };\n /**\n * Destroys the internal objects which is maintained.\n *\n * @returns {void}\n */\n Renderer.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.pageCanvasIn)) {\n this.pageCanvasIn.innerHTML = '';\n }\n this.pageCanvasIn = undefined;\n };\n return Renderer;\n}());\nexport { Renderer };\n","import { detach, getUniqueID, rippleEffect, setValue, attributes } from '@syncfusion/ej2-base';\nimport { getValue, addClass, deleteObject } from '@syncfusion/ej2-base';\n/**\n * Initialize wrapper element for angular.\n *\n * @private\n *\n * @param {CreateElementArgs} createElement - Specifies created element args\n * @param {string} tag - Specifies tag name\n * @param {string} type - Specifies type name\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} WRAPPER - Specifies wrapper element\n * @param {string} role - Specifies role\n * @returns {HTMLInputElement} - Input Element\n */\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n var input = element;\n if (element.tagName === tag) {\n var ejInstance = getValue('ej2_instances', element);\n input = createElement('input', { attrs: { 'type': type } });\n var props = ['change', 'cssClass', 'label', 'labelPosition', 'id'];\n for (var index = 0, len = element.attributes.length; index < len; index++) {\n if (props.indexOf(element.attributes[index].nodeName) === -1) {\n input.setAttribute(element.attributes[index].nodeName, element.attributes[index].nodeValue);\n }\n }\n attributes(element, { 'class': WRAPPER });\n element.appendChild(input);\n element.classList.add(role);\n element.classList.remove(role);\n setValue('ej2_instances', ejInstance, input);\n deleteObject(element, 'ej2_instances');\n }\n return input;\n}\n/**\n * Get the text node.\n *\n * @param {HTMLElement} element - Specifies html element\n * @private\n * @returns {Node} - Text node.\n */\nexport function getTextNode(element) {\n var node;\n var childnode = element.childNodes;\n for (var i = 0; i < childnode.length; i++) {\n node = childnode[i];\n if (node.nodeType === 3) {\n return node;\n }\n }\n return null;\n}\n/**\n * Destroy the button components.\n *\n * @private\n * @param {Switch | CheckBox} ejInst - Specifies eJ2 Instance\n * @param {Element} wrapper - Specifies wrapper element\n * @param {string} tagName - Specifies tag name\n * @returns {void}\n */\nexport function destroy(ejInst, wrapper, tagName) {\n if (tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(ejInst.element, wrapper);\n detach(wrapper);\n ejInst.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n ejInst.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n ejInst.element = wrapper;\n }\n}\n/**\n * Initialize control pre rendering.\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies proxy\n * @param {string} control - Specifies control\n * @param {string} wrapper - Specifies wrapper element\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} moduleName - Specifies module name\n * @returns {void}\n */\nexport function preRender(proxy, control, wrapper, element, moduleName) {\n element = wrapperInitialize(proxy.createElement, control, 'checkbox', element, wrapper, moduleName);\n proxy.element = element;\n if (proxy.element.getAttribute('type') !== 'checkbox') {\n proxy.element.setAttribute('type', 'checkbox');\n }\n if (!proxy.element.id) {\n proxy.element.id = getUniqueID('e-' + moduleName);\n }\n}\n/**\n * Creates CheckBox component UI with theming and ripple support.\n *\n * @private\n * @param {CreateElementArgs} createElement - Specifies Created Element args\n * @param {boolean} enableRipple - Specifies ripple effect\n * @param {CheckBoxUtilModel} options - Specifies Checkbox util Model\n * @returns {Element} - Checkbox Element\n */\nexport function createCheckBox(createElement, enableRipple, options) {\n if (enableRipple === void 0) { enableRipple = false; }\n if (options === void 0) { options = {}; }\n var wrapper = createElement('div', { className: 'e-checkbox-wrapper e-css' });\n if (options.cssClass) {\n addClass([wrapper], options.cssClass.split(' '));\n }\n if (options.enableRtl) {\n wrapper.classList.add('e-rtl');\n }\n if (enableRipple) {\n var rippleSpan = createElement('span', { className: 'e-ripple-container' });\n rippleEffect(rippleSpan, { isCenterRipple: true, duration: 400 });\n wrapper.appendChild(rippleSpan);\n }\n var frameSpan = createElement('span', { className: 'e-frame e-icons' });\n if (options.checked) {\n frameSpan.classList.add('e-check');\n }\n wrapper.appendChild(frameSpan);\n if (options.label) {\n var labelSpan = createElement('span', { className: 'e-label' });\n if (options.disableHtmlEncode) {\n labelSpan.textContent = options.label;\n }\n else {\n labelSpan.innerHTML = options.label;\n }\n wrapper.appendChild(labelSpan);\n }\n return wrapper;\n}\n/**\n * Handles ripple mouse.\n *\n * @private\n * @param {MouseEvent} e - Specifies mouse event\n * @param {Element} rippleSpan - Specifies Ripple span element\n * @returns {void}\n */\nexport function rippleMouseHandler(e, rippleSpan) {\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(e.type, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n}\n/**\n * Append hidden input to given element\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies Proxy\n * @param {Element} wrap - Specifies Wrapper ELement\n * @returns {void}\n */\nexport function setHiddenInput(proxy, wrap) {\n if (proxy.element.getAttribute('ejs-for')) {\n wrap.appendChild(proxy.createElement('input', {\n attrs: { 'name': proxy.name || proxy.element.name, 'value': 'false', 'type': 'hidden' }\n }));\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Component, isBlazor, isRippleEnabled } from '@syncfusion/ej2-base';\nimport { addClass, Event, detach, removeClass } from '@syncfusion/ej2-base';\nimport { rippleEffect, EventHandler, Observer, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\n/**\n * Defines the icon position of button.\n */\nexport var IconPosition;\n(function (IconPosition) {\n /**\n * Positions the Icon at the left of the text content in the Button.\n */\n IconPosition[\"Left\"] = \"Left\";\n /**\n * Positions the Icon at the right of the text content in the Button.\n */\n IconPosition[\"Right\"] = \"Right\";\n /**\n * Positions the Icon at the top of the text content in the Button.\n */\n IconPosition[\"Top\"] = \"Top\";\n /**\n * Positions the Icon at the bottom of the text content in the Button.\n */\n IconPosition[\"Bottom\"] = \"Bottom\";\n})(IconPosition || (IconPosition = {}));\nexport var buttonObserver = new Observer();\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {ButtonModel} options - Specifies the button model\n * @param {string|HTMLButtonElement} element - Specifies the target element\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n this.removeRippleEffect = rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n this.renderComplete();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (!isBlazor() || (isBlazor() && this.getModuleName() !== 'progress-btn')) {\n if (this.content) {\n var tempContent = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.content) : this.content;\n this.element.innerHTML = tempContent;\n }\n this.setIconCss();\n }\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = this.createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n if (this.iconPosition === 'Top' || this.iconPosition === 'Bottom') {\n this.element.classList.add('e-' + this.iconPosition.toLowerCase() + '-icon-btn');\n }\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Button.prototype.destroy = function () {\n var classList = [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success', 'e-info', 'e-danger',\n 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round',\n 'e-top-icon-btn', 'e-bottom-icon-btn'];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n _super.prototype.destroy.call(this);\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n if (this.disabled) {\n this.element.removeAttribute('disabled');\n }\n if (this.content) {\n this.element.innerHTML = this.element.innerHTML.replace(this.content, '');\n }\n var span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n if (isRippleEnabled) {\n this.removeRippleEffect();\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist Data\n * @private\n */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Dynamically injects the required modules to the component.\n *\n * @private\n * @returns {void}\n */\n Button.Inject = function () {\n // Inject code snippets\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ButtonModel} newProp - Specifies new properties\n * @param {ButtonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Button.prototype.onPropertyChanged = function (newProp, oldProp) {\n var span = this.element.querySelector('span.e-btn-icon');\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isPrimary':\n if (newProp.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n else {\n this.element.classList.remove(cssClassName.PRIMARY);\n }\n break;\n case 'disabled':\n this.controlStatus(newProp.disabled);\n break;\n case 'iconCss': {\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n if (newProp.iconCss) {\n span.className = 'e-btn-icon ' + newProp.iconCss;\n if (this.element.textContent.trim()) {\n if (this.iconPosition === 'Left') {\n span.classList.add('e-icon-left');\n }\n else {\n span.classList.add('e-icon-right');\n }\n }\n }\n else {\n detach(span);\n }\n }\n else {\n this.setIconCss();\n }\n break;\n }\n case 'iconPosition':\n removeClass([this.element], ['e-top-icon-btn', 'e-bottom-icon-btn']);\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content': {\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n if (!isBlazor() || (isBlazor() && !this.isServerRendered && this.getModuleName() !== 'progress-btn')) {\n if (this.enableHtmlSanitizer) {\n newProp.content = SanitizeHtmlHelper.sanitize(newProp.content);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n }\n break;\n }\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n /**\n * Click the button element\n * its native method\n *\n * @public\n * @returns {void}\n */\n Button.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to Button\n * its native method\n *\n * @public\n * @returns {void}\n */\n Button.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n __decorate([\n Property()\n ], Button.prototype, \"locale\", void 0);\n __decorate([\n Property(true)\n ], Button.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Button.prototype, \"created\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n","/**\n * Position library\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar elementRect;\nvar popupRect;\nvar element;\nvar parentDocument;\nvar fixedParent = false;\n/**\n *\n * @param {HTMLElement} anchor - specifies the element\n * @param {HTMLElement} element - specifies the element\n * @returns {OffsetPosition} - returns the value\n */\nexport function calculateRelativeBasedPosition(anchor, element) {\n var fixedElement = false;\n var anchorPos = { left: 0, top: 0 };\n var tempAnchor = anchor;\n if (!anchor || !element) {\n return anchorPos;\n }\n if (isNullOrUndefined(element.offsetParent) && element.style.position === 'fixed') {\n fixedElement = true;\n }\n while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {\n anchorPos.left += anchor.offsetLeft;\n anchorPos.top += anchor.offsetTop;\n anchor = anchor.offsetParent;\n }\n anchor = tempAnchor;\n while ((element.offsetParent || fixedElement) && anchor && element.offsetParent !== anchor) {\n anchorPos.left -= anchor.scrollLeft;\n anchorPos.top -= anchor.scrollTop;\n anchor = anchor.parentElement;\n }\n return anchorPos;\n}\n/**\n *\n * @param {Element} currentElement - specifies the element\n * @param {string} positionX - specifies the position\n * @param {string} positionY - specifies the position\n * @param {boolean} parentElement - specifies the boolean\n * @param {ClientRect} targetValues - specifies the client\n * @returns {OffsetPosition} - returns the position\n */\nexport function calculatePosition(currentElement, positionX, positionY, parentElement, targetValues) {\n popupRect = undefined;\n popupRect = targetValues;\n fixedParent = parentElement ? true : false;\n if (!currentElement) {\n return { left: 0, top: 0 };\n }\n if (!positionX) {\n positionX = 'left';\n }\n if (!positionY) {\n positionY = 'top';\n }\n parentDocument = currentElement.ownerDocument;\n element = currentElement;\n var pos = { left: 0, top: 0 };\n return updatePosition(positionX.toLowerCase(), positionY.toLowerCase(), pos);\n}\n/**\n *\n * @param {number} value - specifies the number\n * @param {OffsetPosition} pos - specifies the position\n * @returns {void}\n */\nfunction setPosx(value, pos) {\n pos.left = value;\n}\n/**\n *\n * @param {number} value - specifies the number\n * @param {OffsetPosition} pos - specifies the position\n * @returns {void}\n */\nfunction setPosy(value, pos) {\n pos.top = value;\n}\n/**\n *\n * @param {string} posX - specifies the position\n * @param {string} posY - specifies the position\n * @param {OffsetPosition} pos - specifies the position\n * @returns {OffsetPosition} - returns the postion\n */\nfunction updatePosition(posX, posY, pos) {\n elementRect = element.getBoundingClientRect();\n switch (posY + posX) {\n case 'topcenter':\n setPosx(getElementHCenter(), pos);\n setPosy(getElementTop(), pos);\n break;\n case 'topright':\n setPosx(getElementRight(), pos);\n setPosy(getElementTop(), pos);\n break;\n case 'centercenter':\n setPosx(getElementHCenter(), pos);\n setPosy(getElementVCenter(), pos);\n break;\n case 'centerright':\n setPosx(getElementRight(), pos);\n setPosy(getElementVCenter(), pos);\n break;\n case 'centerleft':\n setPosx(getElementLeft(), pos);\n setPosy(getElementVCenter(), pos);\n break;\n case 'bottomcenter':\n setPosx(getElementHCenter(), pos);\n setPosy(getElementBottom(), pos);\n break;\n case 'bottomright':\n setPosx(getElementRight(), pos);\n setPosy(getElementBottom(), pos);\n break;\n case 'bottomleft':\n setPosx(getElementLeft(), pos);\n setPosy(getElementBottom(), pos);\n break;\n default:\n case 'topleft':\n setPosx(getElementLeft(), pos);\n setPosy(getElementTop(), pos);\n break;\n }\n element = null;\n return pos;\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getBodyScrollTop() {\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getBodyScrollLeft() {\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementBottom() {\n return fixedParent ? elementRect.bottom : elementRect.bottom + getBodyScrollTop();\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementVCenter() {\n return getElementTop() + (elementRect.height / 2);\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementTop() {\n return fixedParent ? elementRect.top : elementRect.top + getBodyScrollTop();\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementLeft() {\n return elementRect.left + getBodyScrollLeft();\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementRight() {\n var popupWidth = (element && (element.classList.contains('e-date-wrapper') || element.classList.contains('e-datetime-wrapper') || (element.classList.contains('e-ddl') && element.classList.contains('e-rtl')) || element.classList.contains('e-date-range-wrapper'))) ? (popupRect ? popupRect.width : 0) :\n (popupRect && (elementRect.width >= popupRect.width) ? popupRect.width : 0);\n return elementRect.right + getBodyScrollLeft() - popupWidth;\n}\n/**\n * @returns {number} - specifies the number value\n */\nfunction getElementHCenter() {\n return getElementLeft() + (elementRect.width / 2);\n}\n","/**\n * Collision module.\n */\nimport { calculatePosition } from './position';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar parentDocument;\nvar targetContainer;\n/**\n *\n * @param {HTMLElement} element - specifies the element\n * @param {HTMLElement} viewPortElement - specifies the element\n * @param {CollisionCoordinates} axis - specifies the collision coordinates\n * @param {OffsetPosition} position - specifies the position\n * @returns {void}\n */\nexport function fit(element, viewPortElement, axis, position) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: false, Y: false }; }\n if (!axis.Y && !axis.X) {\n return { left: 0, top: 0 };\n }\n var elemData = element.getBoundingClientRect();\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n if (!position) {\n position = calculatePosition(element, 'left', 'top');\n }\n if (axis.X) {\n var containerWidth = targetContainer ? getTargetContainerWidth() : getViewPortWidth();\n var containerLeft = ContainerLeft();\n var containerRight = ContainerRight();\n var overLeft = containerLeft - position.left;\n var overRight = position.left + elemData.width - containerRight;\n if (elemData.width > containerWidth) {\n if (overLeft > 0 && overRight <= 0) {\n position.left = containerRight - elemData.width;\n }\n else if (overRight > 0 && overLeft <= 0) {\n position.left = containerLeft;\n }\n else {\n position.left = overLeft > overRight ? (containerRight - elemData.width) : containerLeft;\n }\n }\n else if (overLeft > 0) {\n position.left += overLeft;\n }\n else if (overRight > 0) {\n position.left -= overRight;\n }\n }\n if (axis.Y) {\n var containerHeight = targetContainer ? getTargetContainerHeight() : getViewPortHeight();\n var containerTop = ContainerTop();\n var containerBottom = ContainerBottom();\n var overTop = containerTop - position.top;\n var overBottom = position.top + elemData.height - containerBottom;\n if (elemData.height > containerHeight) {\n if (overTop > 0 && overBottom <= 0) {\n position.top = containerBottom - elemData.height;\n }\n else if (overBottom > 0 && overTop <= 0) {\n position.top = containerTop;\n }\n else {\n position.top = overTop > overBottom ? (containerBottom - elemData.height) : containerTop;\n }\n }\n else if (overTop > 0) {\n position.top += overTop;\n }\n else if (overBottom > 0) {\n position.top -= overBottom;\n }\n }\n return position;\n}\n/**\n *\n * @param {HTMLElement} element - specifies the html element\n * @param {HTMLElement} viewPortElement - specifies the html element\n * @param {number} x - specifies the number\n * @param {number} y - specifies the number\n * @returns {string[]} - returns the string value\n */\nexport function isCollide(element, viewPortElement, x, y) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n var elemOffset = calculatePosition(element, 'left', 'top');\n if (x) {\n elemOffset.left = x;\n }\n if (y) {\n elemOffset.top = y;\n }\n var data = [];\n targetContainer = viewPortElement;\n parentDocument = element.ownerDocument;\n var elementRect = element.getBoundingClientRect();\n var top = elemOffset.top;\n var left = elemOffset.left;\n var right = elemOffset.left + elementRect.width;\n var bottom = elemOffset.top + elementRect.height;\n var yAxis = topCollideCheck(top, bottom);\n var xAxis = leftCollideCheck(left, right);\n if (yAxis.topSide) {\n data.push('top');\n }\n if (xAxis.rightSide) {\n data.push('right');\n }\n if (xAxis.leftSide) {\n data.push('left');\n }\n if (yAxis.bottomSide) {\n data.push('bottom');\n }\n return data;\n}\n/**\n *\n * @param {HTMLElement} element - specifies the element\n * @param {HTMLElement} target - specifies the element\n * @param {number} offsetX - specifies the number\n * @param {number} offsetY - specifies the number\n * @param {string} positionX - specifies the string value\n * @param {string} positionY - specifies the string value\n * @param {HTMLElement} viewPortElement - specifies the element\n * @param {CollisionCoordinates} axis - specifies the collision axis\n * @param {boolean} fixedParent - specifies the boolean\n * @returns {void}\n */\nexport function flip(element, target, offsetX, offsetY, positionX, positionY, viewPortElement, \n/* eslint-disable */\naxis, fixedParent) {\n if (viewPortElement === void 0) { viewPortElement = null; }\n if (axis === void 0) { axis = { X: true, Y: true }; }\n if (!target || !element || !positionX || !positionY || (!axis.X && !axis.Y)) {\n return;\n }\n var tEdge = { TL: null,\n TR: null,\n BL: null,\n BR: null\n }, eEdge = {\n TL: null,\n TR: null,\n BL: null,\n BR: null\n /* eslint-enable */\n };\n var elementRect;\n if (window.getComputedStyle(element).display === 'none') {\n var oldVisibility = element.style.visibility;\n element.style.visibility = 'hidden';\n element.style.display = 'block';\n elementRect = element.getBoundingClientRect();\n element.style.removeProperty('display');\n element.style.visibility = oldVisibility;\n }\n else {\n elementRect = element.getBoundingClientRect();\n }\n var pos = {\n posX: positionX, posY: positionY, offsetX: offsetX, offsetY: offsetY, position: { left: 0, top: 0 }\n };\n targetContainer = viewPortElement;\n parentDocument = target.ownerDocument;\n updateElementData(target, tEdge, pos, fixedParent, elementRect);\n setPosition(eEdge, pos, elementRect);\n if (axis.X) {\n leftFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n if (axis.Y && tEdge.TL.top > -1) {\n topFlip(target, eEdge, tEdge, pos, elementRect, true);\n }\n setPopup(element, pos, elementRect);\n}\n/**\n *\n * @param {HTMLElement} element - specifies the element\n * @param {PositionLocation} pos - specifies the location\n * @param {ClientRect} elementRect - specifies the client rect\n * @returns {void}\n */\nfunction setPopup(element, pos, elementRect) {\n var left = 0;\n var top = 0;\n if (element.offsetParent != null\n && (getComputedStyle(element.offsetParent).position === 'absolute' ||\n getComputedStyle(element.offsetParent).position === 'relative')) {\n var data = calculatePosition(element.offsetParent, 'left', 'top', false, elementRect);\n left = data.left;\n top = data.top;\n }\n var scaleX = 1;\n var scaleY = 1;\n if (element.offsetParent) {\n var transformStyle = getComputedStyle(element.offsetParent).transform;\n if (transformStyle !== 'none') {\n var matrix = new DOMMatrix(transformStyle);\n scaleX = matrix.a;\n scaleY = matrix.d;\n }\n }\n element.style.top = ((pos.position.top / scaleY) + pos.offsetY - (top)) + 'px';\n element.style.left = ((pos.position.left / scaleX) + pos.offsetX - (left)) + 'px';\n}\n/**\n *\n * @param {HTMLElement} target - specifies the element\n * @param {EdgeOffset} edge - specifies the offset\n * @param {PositionLocation} pos - specifies theloaction\n * @param {boolean} fixedParent - specifies the boolean\n * @param {ClientRect} elementRect - specifies the client rect\n * @returns {void}\n */\nfunction updateElementData(target, edge, pos, fixedParent, elementRect) {\n pos.position = calculatePosition(target, pos.posX, pos.posY, fixedParent, elementRect);\n edge.TL = calculatePosition(target, 'left', 'top', fixedParent, elementRect);\n edge.TR = calculatePosition(target, 'right', 'top', fixedParent, elementRect);\n edge.BR = calculatePosition(target, 'left', 'bottom', fixedParent, elementRect);\n edge.BL = calculatePosition(target, 'right', 'bottom', fixedParent, elementRect);\n}\n/**\n *\n * @param {EdgeOffset} eStatus - specifies the status\n * @param {PositionLocation} pos - specifies the location\n * @param {ClientRect} elementRect - specifies the client\n * @returns {void}\n */\nfunction setPosition(eStatus, pos, elementRect) {\n eStatus.TL = { top: pos.position.top + pos.offsetY, left: pos.position.left + pos.offsetX };\n eStatus.TR = { top: eStatus.TL.top, left: eStatus.TL.left + elementRect.width };\n eStatus.BL = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left };\n eStatus.BR = { top: eStatus.TL.top + elementRect.height,\n left: eStatus.TL.left + elementRect.width };\n}\n/**\n *\n * @param {number} left - specifies the number\n * @param {number} right - specifies the number\n * @returns {LeftCorners} - returns the value\n */\nfunction leftCollideCheck(left, right) {\n //eslint-disable-next-line\n var leftSide = false, rightSide = false;\n if (((left - getBodyScrollLeft()) < ContainerLeft())) {\n leftSide = true;\n }\n if (right > ContainerRight()) {\n rightSide = true;\n }\n return { leftSide: leftSide, rightSide: rightSide };\n}\n/**\n *\n * @param {HTMLElement} target - specifies the element\n * @param {EdgeOffset} edge - specifes the element\n * @param {EdgeOffset} tEdge - specifies the edge offset\n * @param {PositionLocation} pos - specifes the location\n * @param {ClientRect} elementRect - specifies the client\n * @param {boolean} deepCheck - specifies the boolean value\n * @returns {void}\n */\nfunction leftFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = leftCollideCheck(edge.TL.left, edge.TR.left);\n if ((tEdge.TL.left - getBodyScrollLeft()) <= ContainerLeft()) {\n collideSide.leftSide = false;\n }\n if (tEdge.TR.left > ContainerRight()) {\n collideSide.rightSide = false;\n }\n if ((collideSide.leftSide && !collideSide.rightSide) || (!collideSide.leftSide && collideSide.rightSide)) {\n if (pos.posX === 'right') {\n pos.posX = 'left';\n }\n else {\n pos.posX = 'right';\n }\n pos.offsetX = pos.offsetX + elementRect.width;\n pos.offsetX = -1 * pos.offsetX;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n leftFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\n/**\n *\n * @param {HTMLElement} target - specifies the element\n * @param {EdgeOffset} edge - specifies the offset\n * @param {EdgeOffset} tEdge - specifies the offset\n * @param {PositionLocation} pos - specifies the location\n * @param {ClientRect} elementRect - specifies the client rect\n * @param {boolean} deepCheck - specifies the boolean\n * @returns {void}\n */\nfunction topFlip(target, edge, tEdge, pos, elementRect, deepCheck) {\n var collideSide = topCollideCheck(edge.TL.top, edge.BL.top);\n if ((tEdge.TL.top - getBodyScrollTop()) <= ContainerTop()) {\n collideSide.topSide = false;\n }\n if (tEdge.BL.top >= ContainerBottom() && target.getBoundingClientRect().bottom < window.innerHeight) {\n collideSide.bottomSide = false;\n }\n if ((collideSide.topSide && !collideSide.bottomSide) || (!collideSide.topSide && collideSide.bottomSide)) {\n if (pos.posY === 'top') {\n pos.posY = 'bottom';\n }\n else {\n pos.posY = 'top';\n }\n pos.offsetY = pos.offsetY + elementRect.height;\n pos.offsetY = -1 * pos.offsetY;\n pos.position = calculatePosition(target, pos.posX, pos.posY, false, elementRect);\n setPosition(edge, pos, elementRect);\n if (deepCheck) {\n topFlip(target, edge, tEdge, pos, elementRect, false);\n }\n }\n}\n/**\n *\n * @param {number} top - specifies the number\n * @param {number} bottom - specifies the number\n * @returns {TopCorners} - retyrns the value\n */\nfunction topCollideCheck(top, bottom) {\n //eslint-disable-next-line\n var topSide = false, bottomSide = false;\n if ((top - getBodyScrollTop()) < ContainerTop()) {\n topSide = true;\n }\n if (bottom > ContainerBottom()) {\n bottomSide = true;\n }\n return { topSide: topSide, bottomSide: bottomSide };\n}\n/**\n * @returns {void}\n */\nfunction getTargetContainerWidth() {\n return targetContainer.getBoundingClientRect().width;\n}\n/**\n * @returns {void}\n */\nfunction getTargetContainerHeight() {\n return targetContainer.getBoundingClientRect().height;\n}\n/**\n * @returns {void}\n */\nfunction getTargetContainerLeft() {\n return targetContainer.getBoundingClientRect().left;\n}\n/**\n * @returns {void}\n */\nfunction getTargetContainerTop() {\n return targetContainer.getBoundingClientRect().top;\n}\n//eslint-disable-next-line\nfunction ContainerTop() {\n if (targetContainer) {\n return getTargetContainerTop();\n }\n return 0;\n}\n//eslint-disable-next-line\nfunction ContainerLeft() {\n if (targetContainer) {\n return getTargetContainerLeft();\n }\n return 0;\n}\n//eslint-disable-next-line\nfunction ContainerRight() {\n if (targetContainer) {\n return (getBodyScrollLeft() + getTargetContainerLeft() + getTargetContainerWidth());\n }\n return (getBodyScrollLeft() + getViewPortWidth());\n}\n//eslint-disable-next-line\nfunction ContainerBottom() {\n if (targetContainer) {\n return (getBodyScrollTop() + getTargetContainerTop() + getTargetContainerHeight());\n }\n return (getBodyScrollTop() + getViewPortHeight());\n}\n/**\n * @returns {number} - returns the scroll top value\n */\nfunction getBodyScrollTop() {\n // if(targetContainer)\n // return targetContainer.scrollTop;\n return parentDocument.documentElement.scrollTop || parentDocument.body.scrollTop;\n}\n/**\n * @returns {number} - returns the scroll left value\n */\nfunction getBodyScrollLeft() {\n // if(targetContainer)\n // return targetContainer.scrollLeft;\n return parentDocument.documentElement.scrollLeft || parentDocument.body.scrollLeft;\n}\n/**\n * @returns {number} - returns the viewport height\n */\nfunction getViewPortHeight() {\n return window.innerHeight;\n}\n/**\n * @returns {number} - returns the viewport width\n */\nfunction getViewPortWidth() {\n var windowWidth = window.innerWidth;\n var documentReact = document.documentElement.getBoundingClientRect();\n var offsetWidth = (isNullOrUndefined(document.documentElement)) ? 0 : documentReact.width;\n return windowWidth - (windowWidth - offsetWidth);\n}\n/**\n * @returns {void}\n */\nexport function destroy() {\n targetContainer = null;\n parentDocument = null;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { setStyleAttribute, addClass, removeClass, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { calculatePosition, calculateRelativeBasedPosition } from '../common/position';\nimport { Animation, Property, Event, Component } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { flip, fit, isCollide, destroy as collisionDestroy } from '../common/collision';\n/**\n * Specifies the offset position values.\n */\nvar PositionData = /** @class */ (function (_super) {\n __extends(PositionData, _super);\n function PositionData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('left')\n ], PositionData.prototype, \"X\", void 0);\n __decorate([\n Property('top')\n ], PositionData.prototype, \"Y\", void 0);\n return PositionData;\n}(ChildProperty));\nexport { PositionData };\n// don't use space in classNames\nvar CLASSNAMES = {\n ROOT: 'e-popup',\n RTL: 'e-rtl',\n OPEN: 'e-popup-open',\n CLOSE: 'e-popup-close'\n};\n/**\n * Represents the Popup Component\n * ```html\n *
\n *
Popup Content
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Popup = /** @class */ (function (_super) {\n __extends(Popup, _super);\n function Popup(element, options) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Called internally if any of the property value changed.\n *\n * @param {PopupModel} newProp - specifies the new property\n * @param {PopupModel} oldProp - specifies the old property\n * @private\n * @returns {void}\n */\n Popup.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'zIndex':\n setStyleAttribute(this.element, { 'zIndex': newProp.zIndex });\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'position':\n case 'relateTo':\n this.refreshPosition();\n break;\n case 'offsetX': {\n var x = newProp.offsetX - oldProp.offsetX;\n this.element.style.left = (parseInt(this.element.style.left, 10) + (x)).toString() + 'px';\n break;\n }\n case 'offsetY': {\n var y = newProp.offsetY - oldProp.offsetY;\n this.element.style.top = (parseInt(this.element.style.top, 10) + (y)).toString() + 'px';\n break;\n }\n case 'content':\n this.setContent();\n break;\n case 'actionOnScroll':\n if (newProp.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n else {\n this.unwireScrollEvents();\n }\n break;\n }\n }\n };\n /**\n * gets the Component module name.\n *\n * @returns {void}\n * @private\n */\n Popup.prototype.getModuleName = function () {\n return 'popup';\n };\n /**\n * To resolve if any collision occurs.\n *\n * @returns {void}\n */\n Popup.prototype.resolveCollision = function () {\n this.checkCollision();\n };\n /**\n * gets the persisted state properties of the Component.\n *\n * @returns {void}\n */\n Popup.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To destroy the control.\n *\n * @returns {void}\n */\n Popup.prototype.destroy = function () {\n if (this.element.classList.contains('e-popup-open')) {\n this.unwireEvents();\n }\n this.element.classList.remove(CLASSNAMES.ROOT, CLASSNAMES.RTL, CLASSNAMES.OPEN, CLASSNAMES.CLOSE);\n this.content = null;\n this.relateTo = null;\n collisionDestroy();\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Popup.prototype.render = function () {\n this.element.classList.add(CLASSNAMES.ROOT);\n var styles = {};\n if (this.zIndex !== 1000) {\n styles.zIndex = this.zIndex;\n }\n if (this.width !== 'auto') {\n styles.width = formatUnit(this.width);\n }\n if (this.height !== 'auto') {\n styles.height = formatUnit(this.height);\n }\n setStyleAttribute(this.element, styles);\n this.fixedParent = false;\n this.setEnableRtl();\n this.setContent();\n };\n Popup.prototype.wireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.add(window, 'orientationchange', this.orientationOnChange, this);\n }\n if (this.actionOnScroll !== 'none') {\n this.wireScrollEvents();\n }\n };\n Popup.prototype.wireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollRefresh, this);\n }\n }\n };\n Popup.prototype.unwireEvents = function () {\n if (Browser.isDevice) {\n EventHandler.remove(window, 'orientationchange', this.orientationOnChange);\n }\n if (this.actionOnScroll !== 'none') {\n this.unwireScrollEvents();\n }\n };\n Popup.prototype.unwireScrollEvents = function () {\n if (this.getRelateToElement()) {\n for (var _i = 0, _a = this.getScrollableParent(this.getRelateToElement()); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollRefresh);\n }\n }\n };\n Popup.prototype.getRelateToElement = function () {\n var relateToElement = this.relateTo === '' || isNullOrUndefined(this.relateTo) ?\n document.body : this.relateTo;\n this.setProperties({ relateTo: relateToElement }, true);\n return ((typeof this.relateTo) === 'string') ?\n document.querySelector(this.relateTo) : this.relateTo;\n };\n Popup.prototype.scrollRefresh = function (e) {\n if (this.actionOnScroll === 'reposition') {\n if (!isNullOrUndefined(this.element) && !(this.element.offsetParent === e.target ||\n (this.element.offsetParent && this.element.offsetParent.tagName === 'BODY' &&\n e.target.parentElement == null))) {\n this.refreshPosition();\n }\n }\n else if (this.actionOnScroll === 'hide') {\n this.hide();\n }\n if (this.actionOnScroll !== 'none') {\n if (this.getRelateToElement()) {\n var targetVisible = this.isElementOnViewport(this.getRelateToElement(), e.target);\n if (!targetVisible && !this.targetInvisibleStatus) {\n this.trigger('targetExitViewport');\n this.targetInvisibleStatus = true;\n }\n else if (targetVisible) {\n this.targetInvisibleStatus = false;\n }\n }\n }\n };\n /**\n * This method is to get the element visibility on viewport when scroll\n * the page. This method will returns true even though 1 px of element\n * part is in visible.\n *\n * @param {HTMLElement} relateToElement - specifies the element\n * @param {HTMLElement} scrollElement - specifies the scroll element\n * @returns {boolean} - retruns the boolean\n */\n // eslint-disable-next-line\n Popup.prototype.isElementOnViewport = function (relateToElement, scrollElement) {\n var scrollParents = this.getScrollableParent(relateToElement);\n for (var parent_3 = 0; parent_3 < scrollParents.length; parent_3++) {\n if (this.isElementVisible(relateToElement, scrollParents[parent_3])) {\n continue;\n }\n else {\n return false;\n }\n }\n return true;\n };\n Popup.prototype.isElementVisible = function (relateToElement, scrollElement) {\n var rect = this.checkGetBoundingClientRect(relateToElement);\n if (!rect.height || !rect.width) {\n return false;\n }\n if (!isNullOrUndefined(this.checkGetBoundingClientRect(scrollElement))) {\n var parent_4 = scrollElement.getBoundingClientRect();\n return !(rect.bottom < parent_4.top) &&\n (!(rect.bottom > parent_4.bottom) &&\n (!(rect.right > parent_4.right) &&\n !(rect.left < parent_4.left)));\n }\n else {\n var win = window;\n var windowView = {\n top: win.scrollY,\n left: win.scrollX,\n right: win.scrollX + win.outerWidth,\n bottom: win.scrollY + win.outerHeight\n };\n var off = calculatePosition(relateToElement);\n var ele = {\n top: off.top,\n left: off.left,\n right: off.left + rect.width,\n bottom: off.top + rect.height\n };\n var elementView = {\n top: windowView.bottom - ele.top,\n left: windowView.right - ele.left,\n bottom: ele.bottom - windowView.top,\n right: ele.right - windowView.left\n };\n return elementView.top > 0\n && elementView.left > 0\n && elementView.right > 0\n && elementView.bottom > 0;\n }\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Popup.prototype.preRender = function () {\n //There is no event handler\n };\n Popup.prototype.setEnableRtl = function () {\n this.reposition();\n if (this.enableRtl) {\n this.element.classList.add(CLASSNAMES.RTL);\n }\n else {\n this.element.classList.remove(CLASSNAMES.RTL);\n }\n };\n Popup.prototype.setContent = function () {\n if (!isNullOrUndefined(this.content)) {\n this.element.innerHTML = '';\n if (typeof (this.content) === 'string') {\n this.element.textContent = this.content;\n }\n else {\n var relateToElem = this.getRelateToElement();\n // eslint-disable-next-line\n var props = this.content.props;\n if (!relateToElem.classList.contains('e-dropdown-btn') || isNullOrUndefined(props)) {\n this.element.appendChild(this.content);\n }\n }\n }\n };\n Popup.prototype.orientationOnChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.refreshPosition();\n }, 200);\n };\n /**\n * Based on the `relative` element and `offset` values, `Popup` element position will refreshed.\n *\n * @param {HTMLElement} target - The target element.\n * @param {boolean} collision - Specifies whether to check for collision.\n * @returns {void}\n */\n Popup.prototype.refreshPosition = function (target, collision) {\n if (!isNullOrUndefined(target)) {\n this.checkFixedParent(target);\n }\n this.reposition();\n if (!collision) {\n this.checkCollision();\n }\n };\n Popup.prototype.reposition = function () {\n var pos;\n var position;\n var relateToElement = this.getRelateToElement();\n if (typeof this.position.X === 'number' && typeof this.position.Y === 'number') {\n pos = { left: this.position.X, top: this.position.Y };\n }\n else if ((typeof this.position.X === 'string' && typeof this.position.Y === 'number') ||\n (typeof this.position.X === 'number' && typeof this.position.Y === 'string')) {\n var parentDisplay = void 0;\n var display = this.element.style.display;\n this.element.style.display = 'block';\n if (this.element.classList.contains('e-dlg-modal')) {\n parentDisplay = this.element.parentElement.style.display;\n this.element.parentElement.style.display = 'block';\n }\n position = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY);\n if (typeof this.position.X === 'string') {\n pos = { left: position.left, top: this.position.Y };\n }\n else {\n pos = { left: this.position.X, top: position.top };\n }\n this.element.style.display = display;\n if (this.element.classList.contains('e-dlg-modal')) {\n this.element.parentElement.style.display = parentDisplay;\n }\n }\n else if (relateToElement) {\n var height = this.element.clientHeight;\n var display = this.element.style.display;\n this.element.style.display = 'block';\n pos = this.getAnchorPosition(relateToElement, this.element, this.position, this.offsetX, this.offsetY, height);\n this.element.style.display = display;\n }\n else {\n pos = { left: 0, top: 0 };\n }\n if (!isNullOrUndefined(pos)) {\n this.element.style.left = pos.left + 'px';\n this.element.style.top = pos.top + 'px';\n }\n };\n Popup.prototype.checkGetBoundingClientRect = function (ele) {\n var eleRect;\n try {\n eleRect = ele.getBoundingClientRect();\n return eleRect;\n }\n catch (error) {\n return null;\n }\n };\n Popup.prototype.getAnchorPosition = function (anchorEle, ele, position, offsetX, offsetY, height) {\n if (height === void 0) { height = 0; }\n var eleRect = this.checkGetBoundingClientRect(ele);\n var anchorRect = this.checkGetBoundingClientRect(anchorEle);\n if (isNullOrUndefined(eleRect) || isNullOrUndefined(anchorRect)) {\n return null;\n }\n var anchor = anchorEle;\n var anchorPos = { left: 0, top: 0 };\n if (ele.offsetParent && ele.offsetParent.tagName === 'BODY' && anchorEle.tagName === 'BODY') {\n anchorPos = calculatePosition(anchorEle);\n }\n else {\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName !== 'BODY')) {\n ele = ele.parentElement;\n }\n anchorPos = calculateRelativeBasedPosition(anchor, ele);\n }\n switch (position.X) {\n default:\n case 'left':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth / 2 - eleRect.width / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.left += (anchorRect.width / 2 - eleRect.width / 2);\n }\n else {\n anchorPos.left += (anchorRect.width / 2);\n }\n break;\n case 'right':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.left += (window.innerWidth - eleRect.width);\n }\n else if (this.targetType === 'container') {\n var scaleX = 1;\n if (ele.offsetParent) {\n var transformStyle = getComputedStyle(ele.offsetParent).transform;\n if (transformStyle !== 'none') {\n var matrix = new DOMMatrix(transformStyle);\n scaleX = matrix.a;\n }\n }\n anchorPos.left += ((anchorRect.width - eleRect.width) / scaleX);\n }\n else {\n anchorPos.left += (anchorRect.width);\n }\n break;\n }\n switch (position.Y) {\n default:\n case 'top':\n break;\n case 'center':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight / 2 - eleRect.height / 2);\n }\n else if (this.targetType === 'container') {\n anchorPos.top += (anchorRect.height / 2 - eleRect.height / 2);\n }\n else {\n anchorPos.top += (anchorRect.height / 2);\n }\n break;\n case 'bottom':\n if ((ele.classList.contains('e-dlg-modal') && anchor.tagName === 'BODY' && this.targetType === 'container')) {\n anchorPos.top += (window.innerHeight - eleRect.height);\n }\n else if (this.targetType === 'container' && !ele.classList.contains('e-dialog')) {\n anchorPos.top += (anchorRect.height - eleRect.height);\n }\n else if (this.targetType === 'container' && ele.classList.contains('e-dialog')) {\n anchorPos.top += (anchorRect.height - height);\n }\n else {\n anchorPos.top += (anchorRect.height);\n }\n break;\n }\n anchorPos.left += offsetX;\n anchorPos.top += offsetY;\n return anchorPos;\n };\n Popup.prototype.callFlip = function (param) {\n var relateToElement = this.getRelateToElement();\n flip(this.element, relateToElement, this.offsetX, this.offsetY, this.position.X, this.position.Y, this.viewPortElement, param, this.fixedParent);\n };\n Popup.prototype.callFit = function (param) {\n if (isCollide(this.element, this.viewPortElement).length !== 0) {\n if (isNullOrUndefined(this.viewPortElement)) {\n var data = fit(this.element, this.viewPortElement, param);\n if (param.X) {\n this.element.style.left = data.left + 'px';\n }\n if (param.Y) {\n this.element.style.top = data.top + 'px';\n }\n }\n else {\n var elementRect = this.checkGetBoundingClientRect(this.element);\n var viewPortRect = this.checkGetBoundingClientRect(this.viewPortElement);\n if (isNullOrUndefined(elementRect) || isNullOrUndefined(viewPortRect)) {\n return null;\n }\n if (param && param.Y === true) {\n if (viewPortRect.top > elementRect.top) {\n this.element.style.top = '0px';\n }\n else if (viewPortRect.bottom < elementRect.bottom) {\n this.element.style.top = parseInt(this.element.style.top, 10) - (elementRect.bottom - viewPortRect.bottom) + 'px';\n }\n }\n if (param && param.X === true) {\n if (viewPortRect.right < elementRect.right) {\n this.element.style.left = parseInt(this.element.style.left, 10) - (elementRect.right - viewPortRect.right) + 'px';\n }\n else if (viewPortRect.left > elementRect.left) {\n this.element.style.left = parseInt(this.element.style.left, 10) + (viewPortRect.left - elementRect.left) + 'px';\n }\n }\n }\n }\n };\n Popup.prototype.checkCollision = function () {\n var horz = this.collision.X;\n var vert = this.collision.Y;\n if (horz === 'none' && vert === 'none') {\n return;\n }\n if (horz === 'flip' && vert === 'flip') {\n this.callFlip({ X: true, Y: true });\n }\n else if (horz === 'fit' && vert === 'fit') {\n this.callFit({ X: true, Y: true });\n }\n else {\n if (horz === 'flip') {\n this.callFlip({ X: true, Y: false });\n }\n else if (vert === 'flip') {\n this.callFlip({ Y: true, X: false });\n }\n if (horz === 'fit') {\n this.callFit({ X: true, Y: false });\n }\n else if (vert === 'fit') {\n this.callFit({ X: false, Y: true });\n }\n }\n };\n /**\n * Shows the popup element from screen.\n *\n * @returns {void}\n * @param {AnimationModel} animationOptions - specifies the model\n * @param { HTMLElement } relativeElement - To calculate the zIndex value dynamically.\n */\n Popup.prototype.show = function (animationOptions, relativeElement) {\n var _this = this;\n var relateToElement = this.getRelateToElement();\n if (relateToElement.classList.contains('e-filemanager')) {\n this.fmDialogContainer = this.element.getElementsByClassName('e-file-select-wrap')[0];\n }\n this.wireEvents();\n if (!isNullOrUndefined(this.fmDialogContainer) && Browser.isIos) {\n this.fmDialogContainer.style.display = 'block';\n }\n if (this.zIndex === 1000 || !isNullOrUndefined(relativeElement)) {\n var zIndexElement = (isNullOrUndefined(relativeElement)) ? this.element : relativeElement;\n this.zIndex = getZindexPartial(zIndexElement);\n setStyleAttribute(this.element, { 'zIndex': this.zIndex });\n }\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.showAnimation;\n if (this.collision.X !== 'none' || this.collision.Y !== 'none') {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.checkCollision();\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n }\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.begin = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.CLOSE);\n addClass([_this.element], CLASSNAMES.OPEN);\n }\n };\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n _this.trigger('open');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.CLOSE);\n addClass([this.element], CLASSNAMES.OPEN);\n this.trigger('open');\n }\n };\n /**\n * Hides the popup element from screen.\n *\n * @param {AnimationModel} animationOptions - To give the animation options.\n * @returns {void}\n */\n Popup.prototype.hide = function (animationOptions) {\n var _this = this;\n animationOptions = (!isNullOrUndefined(animationOptions) && typeof animationOptions === 'object') ?\n animationOptions : this.hideAnimation;\n if (!isNullOrUndefined(animationOptions)) {\n animationOptions.end = function () {\n if (!_this.isDestroyed) {\n removeClass([_this.element], CLASSNAMES.OPEN);\n addClass([_this.element], CLASSNAMES.CLOSE);\n _this.trigger('close');\n }\n };\n new Animation(animationOptions).animate(this.element);\n }\n else {\n removeClass([this.element], CLASSNAMES.OPEN);\n addClass([this.element], CLASSNAMES.CLOSE);\n this.trigger('close');\n }\n this.unwireEvents();\n };\n /**\n * Gets scrollable parent elements for the given element.\n *\n * @returns {void}\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n */\n Popup.prototype.getScrollableParent = function (element) {\n this.checkFixedParent(element);\n return getScrollableParent(element, this.fixedParent);\n };\n Popup.prototype.checkFixedParent = function (element) {\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if ((parentStyle.position === 'fixed' || parentStyle.position === 'sticky') && !isNullOrUndefined(this.element) && this.element.offsetParent &&\n this.element.offsetParent.tagName === 'BODY' && getComputedStyle(this.element.offsetParent).overflow !== 'hidden') {\n this.element.style.top = window.scrollY > parseInt(this.element.style.top, 10) ?\n formatUnit(window.scrollY - parseInt(this.element.style.top, 10))\n : formatUnit(parseInt(this.element.style.top, 10) - window.scrollY);\n this.element.style.position = 'fixed';\n this.fixedParent = true;\n }\n parent = parent.parentElement;\n if (!isNullOrUndefined(this.element) && isNullOrUndefined(this.element.offsetParent) && parentStyle.position === 'fixed'\n && this.element.style.position === 'fixed') {\n this.fixedParent = true;\n }\n }\n };\n __decorate([\n Property('auto')\n ], Popup.prototype, \"height\", void 0);\n __decorate([\n Property('auto')\n ], Popup.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"content\", void 0);\n __decorate([\n Property('container')\n ], Popup.prototype, \"targetType\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"viewPortElement\", void 0);\n __decorate([\n Property({ X: 'none', Y: 'none' })\n ], Popup.prototype, \"collision\", void 0);\n __decorate([\n Property('')\n ], Popup.prototype, \"relateTo\", void 0);\n __decorate([\n Complex({}, PositionData)\n ], Popup.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Popup.prototype, \"offsetY\", void 0);\n __decorate([\n Property(1000)\n ], Popup.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], Popup.prototype, \"enableRtl\", void 0);\n __decorate([\n Property('reposition')\n ], Popup.prototype, \"actionOnScroll\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"showAnimation\", void 0);\n __decorate([\n Property(null)\n ], Popup.prototype, \"hideAnimation\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Popup.prototype, \"targetExitViewport\", void 0);\n Popup = __decorate([\n NotifyPropertyChanges\n ], Popup);\n return Popup;\n}(Component));\nexport { Popup };\n/**\n * Gets scrollable parent elements for the given element.\n *\n * @param { HTMLElement } element - Specify the element to get the scrollable parents of it.\n * @param {boolean} fixedParent - specifies the parent element\n * @private\n * @returns {void}\n */\nexport function getScrollableParent(element, fixedParent) {\n var eleStyle = getComputedStyle(element);\n var scrollParents = [];\n var overflowRegex = /(auto|scroll)/;\n var parent = element.parentElement;\n while (parent && parent.tagName !== 'HTML') {\n var parentStyle = getComputedStyle(parent);\n if (!(eleStyle.position === 'absolute' && parentStyle.position === 'static')\n && overflowRegex.test(parentStyle.overflow + parentStyle.overflowY + parentStyle.overflowX)) {\n scrollParents.push(parent);\n }\n parent = parent.parentElement;\n }\n if (!fixedParent) {\n scrollParents.push(document);\n }\n return scrollParents;\n}\n/**\n * Gets the maximum z-index of the given element.\n *\n * @returns {void}\n * @param { HTMLElement } element - Specify the element to get the maximum z-index of it.\n * @private\n */\nexport function getZindexPartial(element) {\n // upto body traversal\n var parent = element.parentElement;\n var parentZindex = [];\n while (parent) {\n if (parent.tagName !== 'BODY') {\n var index = document.defaultView.getComputedStyle(parent, null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(parent, null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n parentZindex.push(index);\n }\n parent = parent.parentElement;\n }\n else {\n break;\n }\n }\n var childrenZindex = [];\n for (var i = 0; i < document.body.children.length; i++) {\n if (!element.isEqualNode(document.body.children[i])) {\n var index = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(document.body.children[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n childrenZindex.push(index);\n }\n }\n }\n childrenZindex.push('999');\n var siblingsZindex = [];\n if (!isNullOrUndefined(element.parentElement) && element.parentElement.tagName !== 'BODY') {\n var childNodes = [].slice.call(element.parentElement.children);\n for (var i = 0; i < childNodes.length; i++) {\n if (!element.isEqualNode(childNodes[i])) {\n var index = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(childNodes[i], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n siblingsZindex.push(index);\n }\n }\n }\n }\n var finalValue = parentZindex.concat(childrenZindex, siblingsZindex);\n // eslint-disable-next-line\n var currentZindexValue = Math.max.apply(Math, finalValue) + 1;\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n/**\n * Gets the maximum z-index of the page.\n *\n * @returns {void}\n * @param { HTMLElement } tagName - Specify the tagName to get the maximum z-index of it.\n * @private\n */\nexport function getMaxZindex(tagName) {\n if (tagName === void 0) { tagName = ['*']; }\n var maxZindex = [];\n for (var i = 0; i < tagName.length; i++) {\n var elements = document.getElementsByTagName(tagName[i]);\n for (var i_1 = 0; i_1 < elements.length; i_1++) {\n var index = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('z-index');\n var position = document.defaultView.getComputedStyle(elements[i_1], null).getPropertyValue('position');\n if (index !== 'auto' && position !== 'static') {\n maxZindex.push(index);\n }\n }\n }\n // eslint-disable-next-line\n var currentZindexValue = Math.max.apply(Math, maxZindex) + 1;\n return currentZindexValue > 2147483647 ? 2147483647 : currentZindexValue;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, extend, deleteObject, Property, addClass, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {Object} props - Specifies the properties\n * @param {string[]} model - Specifies the model\n * @returns {Object} Component Model\n */\nexport function getModel(props, model) {\n var obj = extend({}, props);\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((model).indexOf(prop) < 0) {\n deleteObject(obj, prop);\n }\n }\n return obj;\n}\n/** @hidden\n * @param {HTMLElement} ul - Specifies the UL element\n * @param {number} keyCode - Specifies the keycode\n * @returns {void}\n */\nexport function upDownKeyHandler(ul, keyCode) {\n var defaultIdx = keyCode === 40 ? 0 : ul.childElementCount - 1;\n var liIdx = defaultIdx;\n var li;\n var selectedLi = ul.querySelector('.e-selected');\n if (selectedLi) {\n selectedLi.classList.remove('e-selected');\n }\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains('e-focused')) {\n li = ul.children[i];\n liIdx = i;\n li.classList.remove('e-focused');\n if (keyCode === 40) {\n liIdx++;\n }\n else {\n liIdx--;\n }\n if (liIdx === (keyCode === 40 ? ul.childElementCount : -1)) {\n liIdx = defaultIdx;\n }\n }\n }\n li = ul.children[liIdx];\n liIdx = isValidLI(ul, li, liIdx, keyCode);\n if (liIdx !== -1) {\n addClass([ul.children[liIdx]], 'e-focused');\n ul.children[liIdx].focus();\n }\n}\n/**\n * Get Valid LI element\n *\n * @param {HTMLElement} ul - Specifies the UL element\n * @param {Element} li - Specifies the LI element\n * @param {number} index - Specifies the index\n * @param {number} keyCode - Specifies the keycode\n * @param {number} count - Specifies the count\n * @returns {number} - Index\n */\nfunction isValidLI(ul, li, index, keyCode, count) {\n if (count === void 0) { count = 0; }\n if (li.classList.contains('e-separator') || li.classList.contains('e-disabled')) {\n if (index === (keyCode === 40 ? ul.childElementCount - 1 : 0)) {\n index = keyCode === 40 ? 0 : ul.childElementCount - 1;\n }\n else {\n if (keyCode === 40) {\n index++;\n }\n else {\n index--;\n }\n }\n }\n li = ul.children[index];\n if (li.classList.contains('e-separator') || li.classList.contains('e-disabled')) {\n count++;\n if (count === ul.childElementCount) {\n return index = -1;\n }\n index = isValidLI(ul, li, index, keyCode, count);\n }\n return index;\n}\n/** @hidden\n * @param {HTMLElement} popup - Specifies the popup element.\n * @returns {void}\n */\nexport function setBlankIconStyle(popup, blankIcon) {\n var blankIconList = [].slice.call(popup.getElementsByClassName('e-blank-icon'));\n if (blankIcon) {\n var menuItem = [].slice.call(popup.getElementsByClassName('e-item'));\n menuItem.forEach(function (li) {\n if (li.style.paddingLeft || li.style.paddingRight) {\n li.removeAttribute('style');\n }\n });\n }\n if (!blankIconList.length) {\n return;\n }\n var iconLi = popup.querySelector('.e-item:not(.e-blank-icon):not(.e-separator)');\n if (isNullOrUndefined(iconLi)) {\n return;\n }\n if (iconLi.classList.contains('e-url')) {\n iconLi = iconLi.querySelector('.e-menu-url');\n }\n var icon = iconLi.querySelector('.e-menu-icon');\n var cssProp;\n var enableRtl = popup.classList.contains('e-rtl');\n if (enableRtl) {\n cssProp = { padding: 'paddingRight', margin: 'marginLeft' };\n }\n else {\n cssProp = { padding: 'paddingLeft', margin: 'marginRight' };\n }\n /* eslint-disable */\n var size = parseInt(getComputedStyle(icon).fontSize, 10) + parseInt((enableRtl ? getComputedStyle(icon)[cssProp.margin] : getComputedStyle(icon)[cssProp.margin]), 10)\n + parseInt(getComputedStyle(iconLi).paddingLeft, 10) + \"px\";\n blankIconList.forEach(function (li) {\n if (li.classList.contains('e-url')) {\n li.querySelector('.e-menu-url').style[cssProp.padding] = size;\n }\n else {\n li.style[cssProp.padding] = size;\n }\n });\n /* eslint-enable */\n}\n/**\n * Defines the items of Split Button/DropDownButton.\n */\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"separator\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"url\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"disabled\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Event, NotifyPropertyChanges, detach, Property, EventHandler, isRippleEnabled, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, getUniqueID, rippleEffect, getComponent } from '@syncfusion/ej2-base';\nimport { attributes, Component, closest, select, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { classList, removeClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { upDownKeyHandler } from './../common/common';\nimport { getModel, Item, setBlankIconStyle } from './../common/common';\nvar classNames = {\n DISABLED: 'e-disabled',\n FOCUS: 'e-focused',\n ICON: 'e-menu-icon',\n ITEM: 'e-item',\n POPUP: 'e-dropdown-popup',\n RTL: 'e-rtl',\n SEPARATOR: 'e-separator',\n VERTICAL: 'e-vertical'\n};\n/**\n * DropDownButton component is used to toggle contextual overlays for displaying list of action items.\n * It can contain both text and images.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DropDownButton = /** @class */ (function (_super) {\n __extends(DropDownButton, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DropDownButtonModel} options - Specifies dropdown button model\n * @param {string|HTMLButtonElement} element - Specifies element\n * @hidden\n */\n function DropDownButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isPopupCreated = true;\n return _this;\n }\n DropDownButton.prototype.preRender = function () {\n /** */\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n DropDownButton.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * To open/close DropDownButton popup based on current state of the DropDownButton.\n *\n * @returns {void}\n */\n DropDownButton.prototype.toggle = function () {\n if (this.canOpen()) {\n this.openPopUp();\n }\n else if (this.createPopupOnClick && !this.isPopupCreated) {\n this.createPopup();\n this.openPopUp();\n }\n else {\n this.closePopup();\n }\n };\n /**\n * Initialize the Component rendering\n *\n * @returns {void}\n * @private\n */\n DropDownButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n this.renderComplete();\n };\n /**\n * Adds a new item to the menu. By default, new item appends to the list as the last item,\n * but you can insert based on the text parameter.\n *\n * @param { ItemModel[] } items - Specifies an array of JSON data.\n * @param { string } text - Specifies the text to insert the newly added item in the menu.\n * @returns {void}.\n */\n DropDownButton.prototype.addItems = function (items, text) {\n var newItem;\n var idx = this.items.length;\n for (var j = 0, len = this.items.length; j < len; j++) {\n if (text === this.items[j].text) {\n idx = j;\n break;\n }\n }\n for (var i = items.length - 1; i >= 0; i--) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newItem = new Item(this, 'items', items[i], true);\n this.items.splice(idx, 0, newItem);\n }\n if (!this.canOpen()) {\n this.createItems();\n }\n };\n /**\n * Removes the items from the menu.\n *\n * @param { string[] } items - Specifies an array of string to remove the items.\n * @param { string } isUniqueId - Set `true` if specified items is a collection of unique id.\n * @returns {void}.\n */\n DropDownButton.prototype.removeItems = function (items, isUniqueId) {\n var refresh = false;\n for (var i = 0, len = items.length; i < len; i++) {\n for (var j = 0, len_1 = this.items.length; j < len_1; j++) {\n if (items[i] === (isUniqueId ? this.items[j].id : this.items[j].text)) {\n this.items.splice(j, 1);\n refresh = true;\n break;\n }\n }\n }\n if (refresh && this.getULElement()) {\n this.createItems();\n }\n };\n DropDownButton.prototype.createPopup = function () {\n var _a;\n var div = this.createElement('div', {\n className: classNames.POPUP,\n id: this.element.id + '-popup'\n });\n document.body.appendChild(div);\n this.dropDown = new Popup(div, {\n relateTo: this.element,\n collision: { X: 'fit', Y: 'flip' },\n position: { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n content: this.target ? this.getTargetElement() : '',\n enableRtl: this.enableRtl\n });\n this.dropDown.element.setAttribute('role', 'dialog');\n this.dropDown.element.setAttribute('aria-label', 'dropdown menu');\n if (!isNullOrUndefined(this.popupContent)) {\n this.popupContent.style.display = '';\n }\n if (this.dropDown.element.style.position === 'fixed') {\n this.dropDown.refreshPosition(this.element);\n }\n this.dropDown.hide();\n attributes(this.element, (_a = {},\n _a['aria-haspopup'] = this.items.length || this.target ? 'true' : 'false',\n _a['aria-expanded'] = 'false',\n _a['type'] = 'button',\n _a));\n if (this.cssClass) {\n addClass([div], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n this.isPopupCreated = true;\n };\n DropDownButton.prototype.getTargetElement = function () {\n if (this.createPopupOnClick && !this.isColorPicker() && !isNullOrUndefined(this.popupContent)) {\n return this.popupContent;\n }\n return typeof (this.target) === 'string' ? select(this.target) : this.target;\n };\n DropDownButton.prototype.createItems = function (appendItems) {\n var items = this.items;\n var showIcon = this.hasIcon(this.items, 'iconCss');\n var span;\n var item;\n var li;\n var eventArgs;\n var ul = this.getULElement();\n if (ul) {\n ul.innerHTML = '';\n }\n else {\n ul = this.createElement('ul', {\n attrs: { 'role': 'menu', 'tabindex': '0' }\n });\n }\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n var tempItem = item.text;\n li = this.createElement('li', {\n innerHTML: item.url ? '' : tempItem,\n className: item.separator ? classNames.ITEM + ' ' + classNames.SEPARATOR : classNames.ITEM,\n attrs: item.separator ? { 'role': 'separator', 'tabindex': '-1', 'aria-label': 'separator', 'aria-hidden': 'true' } : { 'role': 'menuitem', 'tabindex': '-1', 'aria-label': tempItem },\n id: item.id ? item.id : getUniqueID('e-' + this.getModuleName() + '-item')\n });\n if (this.enableHtmlSanitizer) {\n li.textContent = item.url ? '' : tempItem;\n }\n else {\n li.innerHTML = item.url ? '' : tempItem;\n }\n if (item.url) {\n li.appendChild(this.createAnchor(item));\n li.classList.add('e-url');\n }\n if (item.iconCss) {\n span = this.createElement('span', { className: classNames.ICON + ' ' + item.iconCss });\n if (item.url) {\n li.childNodes[0].appendChild(span);\n }\n else {\n li.insertBefore(span, li.childNodes[0]);\n }\n }\n else {\n if (showIcon && !item.separator) {\n li.classList.add('e-blank-icon');\n }\n }\n var beforeDisabled = item.disabled;\n if (item.disabled) {\n li.classList.add('e-disabled');\n }\n eventArgs = { item: item, element: li };\n this.trigger('beforeItemRender', eventArgs);\n var afterDisabled = eventArgs.item.disabled;\n if (beforeDisabled !== afterDisabled) {\n if (eventArgs.item.disabled) {\n li.classList.add('e-disabled');\n }\n else {\n li.classList.remove('e-disabled');\n }\n }\n ul.appendChild(li);\n }\n if (appendItems) {\n this.getPopUpElement().appendChild(ul);\n }\n if (showIcon) {\n setBlankIconStyle(this.getPopUpElement());\n }\n };\n DropDownButton.prototype.hasIcon = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][\"\" + field]) {\n return true;\n }\n }\n return false;\n };\n DropDownButton.prototype.createAnchor = function (item) {\n var tempItem = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(item.text) : item.text;\n return this.createElement('a', { className: 'e-menu-text e-menu-url', innerHTML: tempItem, attrs: { 'href': item.url } });\n };\n DropDownButton.prototype.initialize = function () {\n this.button = new Button({\n iconCss: this.iconCss, iconPosition: this.iconPosition, cssClass: this.cssClass, content: this.content,\n disabled: this.disabled, enableRtl: this.enableRtl, enablePersistence: this.enablePersistence\n });\n this.button.createElement = this.createElement;\n this.button.appendTo(this.element);\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.appendArrowSpan();\n this.setActiveElem([this.element]);\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-label', this.element.textContent ? this.element.textContent : 'dropdownbutton');\n if ((this.target && !this.isColorPicker() && !this.createPopupOnClick) || !this.createPopupOnClick) {\n this.createPopup();\n }\n else {\n this.isPopupCreated = false;\n if (this.target && !this.isColorPicker() && this.createPopupOnClick) {\n this.popupContent = this.getTargetElement();\n this.popupContent.style.display = 'none';\n }\n }\n };\n DropDownButton.prototype.isColorPicker = function () {\n if (!this.element) {\n return false;\n }\n var prevElem = this.element.previousSibling;\n if (prevElem && prevElem.classList && prevElem.classList.contains('e-split-colorpicker')) {\n return true;\n }\n return false;\n };\n DropDownButton.prototype.appendArrowSpan = function () {\n this.cssClass = isNullOrUndefined(this.cssClass) ? '' : this.cssClass;\n this.element.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons ' + 'e-icon-' + (this.cssClass.indexOf(classNames.VERTICAL) > -1\n ? 'bottom' : 'right') + ' e-caret'\n }));\n };\n DropDownButton.prototype.setActiveElem = function (elem) {\n this.activeElem = elem;\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n DropDownButton.prototype.getModuleName = function () {\n return 'dropdown-btn';\n };\n DropDownButton.prototype.canOpen = function () {\n var val = false;\n if (this.isPopupCreated) {\n val = this.getPopUpElement().classList.contains('e-popup-close');\n }\n return val;\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n DropDownButton.prototype.destroy = function () {\n var _this = this;\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'dropdown-btn') {\n var classList_1;\n if (this.element.querySelector('span.e-caret')) {\n detach(this.element.querySelector('span.e-caret'));\n }\n if (this.cssClass) {\n classList_1 = this.cssClass.split(' ');\n }\n this.button.destroy();\n if (classList_1) {\n removeClass([this.element], classList_1);\n }\n removeClass(this.activeElem, ['e-active']);\n var attrList = this.element.getAttribute('class') ? ['aria-haspopup', 'aria-expanded', 'aria-owns', 'type']\n : ['aria-haspopup', 'aria-expanded', 'aria-owns', 'type', 'class'];\n attrList.forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.popupUnWireEvents();\n this.destroyPopup();\n this.isPopupCreated = false;\n if (!this.disabled) {\n this.unWireEvents();\n }\n }\n };\n DropDownButton.prototype.destroyPopup = function () {\n if (this.isPopupCreated) {\n this.dropDown.destroy();\n if (this.getPopUpElement()) {\n var popupEle = document.getElementById(this.getPopUpElement().id);\n if (popupEle) {\n removeClass([popupEle], ['e-popup-open', 'e-popup-close']);\n detach(popupEle);\n }\n }\n EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n if (this.isPopupCreated && this.dropDown) {\n this.dropDown.element = null;\n this.dropDown = undefined;\n }\n }\n this.isPopupCreated = false;\n };\n DropDownButton.prototype.getPopUpElement = function () {\n var val = null;\n if (!this.dropDown && this.activeElem[0].classList.contains('e-split-btn')) {\n var dropDownBtn = getComponent(this.activeElem[1], 'dropdown-btn');\n if (dropDownBtn) {\n this.dropDown = dropDownBtn.dropDown;\n }\n }\n if (this.dropDown) {\n val = this.dropDown.element;\n }\n return val;\n };\n DropDownButton.prototype.getULElement = function () {\n var val = null;\n if (this.getPopUpElement()) {\n val = this.getPopUpElement().children[0];\n }\n return val;\n };\n DropDownButton.prototype.wireEvents = function () {\n this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n if (!this.createPopupOnClick) {\n EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n }\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.add(window, 'resize', this.windowResize, this);\n };\n DropDownButton.prototype.windowResize = function () {\n if (!this.canOpen() && this.dropDown) {\n this.dropDown.refreshPosition(this.element);\n }\n };\n DropDownButton.prototype.popupWireEvents = function () {\n if (!this.delegateMousedownHandler) {\n this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n }\n var popupElement = this.getPopUpElement();\n if (this.createPopupOnClick) {\n EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n }\n if (popupElement) {\n EventHandler.add(popupElement, 'click', this.clickHandler, this);\n EventHandler.add(popupElement, 'keydown', this.keyBoardHandler, this);\n if (this.closeActionEvents) {\n EventHandler.add(popupElement, this.closeActionEvents, this.focusoutHandler, this);\n }\n }\n this.rippleFn = rippleEffect(popupElement, { selector: '.' + classNames.ITEM });\n };\n DropDownButton.prototype.popupUnWireEvents = function () {\n var popupElement = this.getPopUpElement();\n if (this.createPopupOnClick) {\n EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n }\n if (popupElement && popupElement.parentElement) {\n EventHandler.remove(popupElement, 'click', this.clickHandler);\n EventHandler.remove(popupElement, 'keydown', this.keyBoardHandler);\n if (this.closeActionEvents) {\n EventHandler.remove(popupElement, this.closeActionEvents, this.focusoutHandler);\n }\n }\n if (isRippleEnabled && this.rippleFn) {\n this.rippleFn();\n }\n };\n /**\n * Handles the keyboard interactions.\n *\n * @param {KeyboardEventArgs} e - Specifies keyboard event args.\n * @returns {void}\n * @hidden\n */\n DropDownButton.prototype.keyBoardHandler = function (e) {\n if (e.target === this.element && (e.keyCode === 9 || (!e.altKey && e.keyCode === 40) || e.keyCode === 38)) {\n return;\n }\n switch (e.keyCode) {\n case 38:\n case 40:\n if (e.altKey && (e.keyCode === 38 || e.keyCode === 40)) {\n this.keyEventHandler(e);\n }\n else {\n this.upDownKeyHandler(e);\n }\n break;\n case 9:\n case 13:\n case 27:\n case 32:\n this.keyEventHandler(e);\n break;\n }\n };\n DropDownButton.prototype.upDownKeyHandler = function (e) {\n if (this.target && (e.keyCode === 38 || e.keyCode === 40)) {\n return;\n }\n e.preventDefault();\n upDownKeyHandler(this.getULElement(), e.keyCode);\n };\n DropDownButton.prototype.keyEventHandler = function (e) {\n if (this.target && (e.keyCode === 13 || e.keyCode === 9)) {\n return;\n }\n if (e.keyCode === 13 && this.activeElem[0].classList.contains('e-split-btn')) {\n this.triggerSelect(e);\n this.activeElem[0].focus();\n return;\n }\n if (e.target && e.target.className.indexOf('e-edit-template') > -1 && e.keyCode === 32) {\n return;\n }\n if (e.keyCode !== 9) {\n e.preventDefault();\n }\n if (e.keyCode === 27 || e.keyCode === 38 || e.keyCode === 9) {\n if (!this.canOpen()) {\n this.closePopup(e, this.element);\n }\n }\n else {\n this.clickHandler(e);\n }\n };\n DropDownButton.prototype.getLI = function (elem) {\n return elem.tagName === 'LI' ? elem : closest(elem, 'li');\n };\n DropDownButton.prototype.mousedownHandler = function (e) {\n var trgt = e.target;\n if (this.dropDown && !this.canOpen() && !(closest(trgt, '[id=\"' + this.getPopUpElement().id + '\"]')\n || closest(trgt, '[id=\"' + this.element.id + '\"]'))) {\n this.closePopup(e);\n }\n };\n DropDownButton.prototype.focusoutHandler = function (e) {\n if (this.isPopupCreated && !this.canOpen()) {\n var liTarget = e.relatedTarget;\n if (liTarget && liTarget.className.indexOf('e-item') > -1) {\n var li = this.getLI(liTarget);\n if (li) {\n var liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n var item = this.items[liIdx];\n if (item) {\n var selectEventArgs = { element: li, item: item, event: e };\n this.trigger('select', selectEventArgs);\n }\n }\n }\n this.closePopup(e);\n }\n };\n DropDownButton.prototype.clickHandler = function (e) {\n var trgt = e.target;\n if (closest(trgt, '[id=\"' + this.element.id + '\"]')) {\n if (!this.createPopupOnClick || (this.target && this.target !== '' && !this.isColorPicker() && !this.createPopupOnClick)) {\n if (this.getPopUpElement().classList.contains('e-popup-close')) {\n this.openPopUp(e);\n }\n else {\n this.closePopup(e);\n }\n }\n else if (this.isPopupCreated) {\n this.closePopup(e, this.activeElem[0]);\n }\n else {\n this.createPopup();\n this.openPopUp(e);\n }\n }\n else {\n if (closest(trgt, '[id=\"' + this.getPopUpElement().id + '\"]')) {\n var li = this.getLI(e.target);\n if (li) {\n this.triggerSelect(e);\n this.closePopup(e, this.activeElem[0]);\n }\n }\n }\n };\n DropDownButton.prototype.triggerSelect = function (e) {\n var eventArgs;\n var liIdx;\n var item;\n var li = this.getLI(e.target);\n if (li) {\n liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n item = this.items[liIdx];\n if (item) {\n eventArgs = { element: li, item: item, event: e };\n this.trigger('select', eventArgs);\n }\n }\n };\n DropDownButton.prototype.openPopUp = function (e) {\n var _this = this;\n if (e === void 0) { e = null; }\n var isReact = false;\n var popupElem = this.getPopUpElement();\n if (!this.target) {\n this.createItems(true);\n }\n else {\n if (this.activeElem.length > 1) {\n var splitButton = getComponent(this.activeElem[0], 'split-btn');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (splitButton.isReact && popupElem.childNodes.length < 1) {\n isReact = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n splitButton.appendReactElement(this.getTargetElement(), this.getPopUpElement());\n this.renderReactTemplates();\n }\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact && popupElem.childNodes.length < 1) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isReact = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.appendReactElement(this.getTargetElement(), this.getPopUpElement());\n this.renderReactTemplates();\n }\n }\n }\n var ul = this.getULElement();\n this.popupWireEvents();\n var beforeOpenArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeOpen', beforeOpenArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n var ul_1 = _this.getULElement();\n _this.dropDown.show(null, _this.element);\n addClass([_this.element], 'e-active');\n _this.element.setAttribute('aria-expanded', 'true');\n _this.element.setAttribute('aria-owns', _this.getPopUpElement().id);\n if (ul_1) {\n ul_1.focus();\n }\n if (_this.enableRtl && ul_1.parentElement.style.left !== '0px') {\n var wrapperWidth = void 0;\n if (_this.element.parentElement && _this.element.parentElement.classList.contains('e-split-btn-wrapper')) {\n wrapperWidth = _this.element.parentElement.offsetWidth;\n }\n else {\n wrapperWidth = _this.element.offsetWidth;\n }\n var popupRect = ul_1.parentElement.offsetWidth - wrapperWidth;\n var popupLeft = parseFloat(ul_1.parentElement.style.left) - popupRect;\n if (popupLeft < 0) {\n popupLeft = 0;\n }\n ul_1.parentElement.style.left = popupLeft + 'px';\n }\n var openArgs = { element: ul_1, items: _this.items };\n _this.trigger('open', openArgs);\n }\n });\n };\n DropDownButton.prototype.closePopup = function (e, focusEle) {\n var _this = this;\n if (e === void 0) { e = null; }\n var ul = this.getULElement();\n var beforeCloseArgs = { element: ul, items: this.items, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n var popupElement = _this.getPopUpElement();\n if (popupElement) {\n EventHandler.remove(popupElement, 'keydown', _this.keyBoardHandler);\n }\n _this.popupUnWireEvents();\n var ul_2 = _this.getULElement();\n var selectedLi = void 0;\n if (ul_2) {\n selectedLi = ul_2.querySelector('.e-selected');\n }\n if (selectedLi) {\n selectedLi.classList.remove('e-selected');\n }\n _this.dropDown.hide();\n removeClass(_this.activeElem, 'e-active');\n _this.element.setAttribute('aria-expanded', 'false');\n _this.element.removeAttribute('aria-owns');\n if (focusEle) {\n focusEle.focus();\n }\n var closeArgs = { element: ul_2, items: _this.items };\n _this.trigger('close', closeArgs);\n if (!_this.target && ul_2) {\n detach(ul_2);\n }\n if (!_this.target || _this.isColorPicker() || (_this.target && !_this.isColorPicker())) {\n if (_this.createPopupOnClick) {\n _this.destroyPopup();\n }\n }\n }\n else {\n if (ul) {\n ul.focus();\n }\n }\n });\n };\n DropDownButton.prototype.unWireEvents = function () {\n if (!this.createPopupOnClick) {\n EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n }\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n if (this.isPopupCreated) {\n EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n EventHandler.remove(window, 'resize', this.windowResize);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DropDownButtonModel} newProp - Specifies new properties\n * @param {DropDownButtonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n DropDownButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var btnModel = ['content', 'cssClass', 'iconCss', 'iconPosition', 'disabled', 'enableRtl'];\n this.button.setProperties(getModel(newProp, btnModel));\n var popupElement;\n if (this.isPopupCreated) {\n popupElement = this.getPopUpElement();\n this.dropDown.setProperties(getModel(newProp, ['enableRtl']));\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!this.element.querySelector('span.e-caret')) {\n this.appendArrowSpan();\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.unWireEvents();\n if (this.isPopupCreated && !this.canOpen()) {\n this.closePopup();\n }\n }\n else {\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (newProp.cssClass.indexOf(classNames.VERTICAL) > -1 || oldProp.cssClass.indexOf(classNames.VERTICAL) > -1) {\n if (!this.element.querySelector('span.e-caret')) {\n this.appendArrowSpan();\n }\n var arrowSpan = this.element.querySelector('span.e-caret');\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n newProp.cssClass.indexOf(classNames.VERTICAL) > -1 ? classList(arrowSpan, ['e-icon-bottom'], ['e-icon-right'])\n : classList(arrowSpan, ['e-icon-right'], ['e-icon-bottom']);\n }\n if (this.isPopupCreated) {\n if (oldProp.cssClass) {\n removeClass([popupElement], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([popupElement], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n }\n break;\n case 'target':\n this.dropDown.content = this.getTargetElement();\n this.dropDown.dataBind();\n break;\n case 'items':\n if (this.isPopupCreated && this.getULElement()) {\n this.createItems();\n }\n break;\n case 'createPopupOnClick':\n if (newProp.createPopupOnClick) {\n this.destroyPopup();\n }\n else {\n this.createPopup();\n }\n break;\n }\n }\n };\n /**\n * Sets the focus to DropDownButton\n * its native method\n *\n * @public\n * @returns {void}\n */\n DropDownButton.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], DropDownButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Property(true)\n ], DropDownButton.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Collection([], Item)\n ], DropDownButton.prototype, \"items\", void 0);\n __decorate([\n Property(false)\n ], DropDownButton.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], DropDownButton.prototype, \"closeActionEvents\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownButton.prototype, \"created\", void 0);\n DropDownButton = __decorate([\n NotifyPropertyChanges\n ], DropDownButton);\n return DropDownButton;\n}(Component));\nexport { DropDownButton };\n","import { detach, getUniqueID, rippleEffect, setValue, attributes } from '@syncfusion/ej2-base';\nimport { getValue, addClass, deleteObject } from '@syncfusion/ej2-base';\n/**\n * Initialize wrapper element for angular.\n *\n * @private\n *\n * @param {CreateElementArgs} createElement - Specifies created element args\n * @param {string} tag - Specifies tag name\n * @param {string} type - Specifies type name\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} WRAPPER - Specifies wrapper element\n * @param {string} role - Specifies role\n * @returns {HTMLInputElement} - Input Element\n */\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n var input = element;\n if (element.tagName === tag) {\n var ejInstance = getValue('ej2_instances', element);\n input = createElement('input', { attrs: { 'type': type } });\n var props = ['change', 'cssClass', 'label', 'labelPosition', 'id'];\n for (var index = 0, len = element.attributes.length; index < len; index++) {\n if (props.indexOf(element.attributes[index].nodeName) === -1) {\n input.setAttribute(element.attributes[index].nodeName, element.attributes[index].nodeValue);\n }\n }\n attributes(element, { 'class': WRAPPER });\n element.appendChild(input);\n element.classList.add(role);\n element.classList.remove(role);\n setValue('ej2_instances', ejInstance, input);\n deleteObject(element, 'ej2_instances');\n }\n return input;\n}\n/**\n * Get the text node.\n *\n * @param {HTMLElement} element - Specifies html element\n * @private\n * @returns {Node} - Text node.\n */\nexport function getTextNode(element) {\n var node;\n var childnode = element.childNodes;\n for (var i = 0; i < childnode.length; i++) {\n node = childnode[i];\n if (node.nodeType === 3) {\n return node;\n }\n }\n return null;\n}\n/**\n * Destroy the button components.\n *\n * @private\n * @param {Switch | CheckBox} ejInst - Specifies eJ2 Instance\n * @param {Element} wrapper - Specifies wrapper element\n * @param {string} tagName - Specifies tag name\n * @returns {void}\n */\nexport function destroy(ejInst, wrapper, tagName) {\n if (tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(ejInst.element, wrapper);\n detach(wrapper);\n ejInst.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n ejInst.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n ejInst.element = wrapper;\n }\n}\n/**\n * Initialize control pre rendering.\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies proxy\n * @param {string} control - Specifies control\n * @param {string} wrapper - Specifies wrapper element\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} moduleName - Specifies module name\n * @returns {void}\n */\nexport function preRender(proxy, control, wrapper, element, moduleName) {\n element = wrapperInitialize(proxy.createElement, control, 'checkbox', element, wrapper, moduleName);\n proxy.element = element;\n if (proxy.element.getAttribute('type') !== 'checkbox') {\n proxy.element.setAttribute('type', 'checkbox');\n }\n if (!proxy.element.id) {\n proxy.element.id = getUniqueID('e-' + moduleName);\n }\n}\n/**\n * Creates CheckBox component UI with theming and ripple support.\n *\n * @private\n * @param {CreateElementArgs} createElement - Specifies Created Element args\n * @param {boolean} enableRipple - Specifies ripple effect\n * @param {CheckBoxUtilModel} options - Specifies Checkbox util Model\n * @returns {Element} - Checkbox Element\n */\nexport function createCheckBox(createElement, enableRipple, options) {\n if (enableRipple === void 0) { enableRipple = false; }\n if (options === void 0) { options = {}; }\n var wrapper = createElement('div', { className: 'e-checkbox-wrapper e-css' });\n if (options.cssClass) {\n addClass([wrapper], options.cssClass.split(' '));\n }\n if (options.enableRtl) {\n wrapper.classList.add('e-rtl');\n }\n if (enableRipple) {\n var rippleSpan = createElement('span', { className: 'e-ripple-container' });\n rippleEffect(rippleSpan, { isCenterRipple: true, duration: 400 });\n wrapper.appendChild(rippleSpan);\n }\n var frameSpan = createElement('span', { className: 'e-frame e-icons' });\n if (options.checked) {\n frameSpan.classList.add('e-check');\n }\n wrapper.appendChild(frameSpan);\n if (options.label) {\n var labelSpan = createElement('span', { className: 'e-label' });\n if (options.disableHtmlEncode) {\n labelSpan.textContent = options.label;\n }\n else {\n labelSpan.innerHTML = options.label;\n }\n wrapper.appendChild(labelSpan);\n }\n return wrapper;\n}\n/**\n * Handles ripple mouse.\n *\n * @private\n * @param {MouseEvent} e - Specifies mouse event\n * @param {Element} rippleSpan - Specifies Ripple span element\n * @returns {void}\n */\nexport function rippleMouseHandler(e, rippleSpan) {\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(e.type, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n}\n/**\n * Append hidden input to given element\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies Proxy\n * @param {Element} wrap - Specifies Wrapper ELement\n * @returns {void}\n */\nexport function setHiddenInput(proxy, wrap) {\n if (proxy.element.getAttribute('ejs-for')) {\n wrap.appendChild(proxy.createElement('input', {\n attrs: { 'name': proxy.name || proxy.element.name, 'value': 'false', 'type': 'hidden' }\n }));\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Component, isBlazor, isRippleEnabled } from '@syncfusion/ej2-base';\nimport { addClass, Event, detach, removeClass } from '@syncfusion/ej2-base';\nimport { rippleEffect, EventHandler, Observer, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\n/**\n * Defines the icon position of button.\n */\nexport var IconPosition;\n(function (IconPosition) {\n /**\n * Positions the Icon at the left of the text content in the Button.\n */\n IconPosition[\"Left\"] = \"Left\";\n /**\n * Positions the Icon at the right of the text content in the Button.\n */\n IconPosition[\"Right\"] = \"Right\";\n /**\n * Positions the Icon at the top of the text content in the Button.\n */\n IconPosition[\"Top\"] = \"Top\";\n /**\n * Positions the Icon at the bottom of the text content in the Button.\n */\n IconPosition[\"Bottom\"] = \"Bottom\";\n})(IconPosition || (IconPosition = {}));\nexport var buttonObserver = new Observer();\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {ButtonModel} options - Specifies the button model\n * @param {string|HTMLButtonElement} element - Specifies the target element\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n this.removeRippleEffect = rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n this.renderComplete();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (!isBlazor() || (isBlazor() && this.getModuleName() !== 'progress-btn')) {\n if (this.content) {\n var tempContent = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.content) : this.content;\n this.element.innerHTML = tempContent;\n }\n this.setIconCss();\n }\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = this.createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n if (this.iconPosition === 'Top' || this.iconPosition === 'Bottom') {\n this.element.classList.add('e-' + this.iconPosition.toLowerCase() + '-icon-btn');\n }\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Button.prototype.destroy = function () {\n var classList = [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success', 'e-info', 'e-danger',\n 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round',\n 'e-top-icon-btn', 'e-bottom-icon-btn'];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n _super.prototype.destroy.call(this);\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n if (this.disabled) {\n this.element.removeAttribute('disabled');\n }\n if (this.content) {\n this.element.innerHTML = this.element.innerHTML.replace(this.content, '');\n }\n var span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n if (isRippleEnabled) {\n this.removeRippleEffect();\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist Data\n * @private\n */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Dynamically injects the required modules to the component.\n *\n * @private\n * @returns {void}\n */\n Button.Inject = function () {\n // Inject code snippets\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ButtonModel} newProp - Specifies new properties\n * @param {ButtonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Button.prototype.onPropertyChanged = function (newProp, oldProp) {\n var span = this.element.querySelector('span.e-btn-icon');\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isPrimary':\n if (newProp.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n else {\n this.element.classList.remove(cssClassName.PRIMARY);\n }\n break;\n case 'disabled':\n this.controlStatus(newProp.disabled);\n break;\n case 'iconCss': {\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n if (newProp.iconCss) {\n span.className = 'e-btn-icon ' + newProp.iconCss;\n if (this.element.textContent.trim()) {\n if (this.iconPosition === 'Left') {\n span.classList.add('e-icon-left');\n }\n else {\n span.classList.add('e-icon-right');\n }\n }\n }\n else {\n detach(span);\n }\n }\n else {\n this.setIconCss();\n }\n break;\n }\n case 'iconPosition':\n removeClass([this.element], ['e-top-icon-btn', 'e-bottom-icon-btn']);\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content': {\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n if (!isBlazor() || (isBlazor() && !this.isServerRendered && this.getModuleName() !== 'progress-btn')) {\n if (this.enableHtmlSanitizer) {\n newProp.content = SanitizeHtmlHelper.sanitize(newProp.content);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n }\n break;\n }\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n /**\n * Click the button element\n * its native method\n *\n * @public\n * @returns {void}\n */\n Button.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to Button\n * its native method\n *\n * @public\n * @returns {void}\n */\n Button.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n __decorate([\n Property()\n ], Button.prototype, \"locale\", void 0);\n __decorate([\n Property(true)\n ], Button.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Button.prototype, \"created\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_RIGHTOVERLAY = 'e-scroll-right-overlay';\nvar CLS_LEFTOVERLAY = 'e-scroll-left-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n __extends(HScroll, _super);\n /**\n * Initializes a new instance of the HScroll class.\n *\n * @param {HScrollModel} options - Specifies HScroll model properties as options.\n * @param {string | HTMLElement} element - Specifies the element for which horizontal scrolling applies.\n */\n function HScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n HScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var element = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (element.id === '') {\n element.id = getUniqueID('hscroll');\n this.uniqueId = true;\n }\n element.style.display = 'block';\n if (this.enableRtl) {\n element.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the horizontal scroll rendering\n *\n * @private\n * @returns {void}\n */\n HScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlay(this.element);\n }\n this.setScrollState();\n };\n HScroll.prototype.setScrollState = function () {\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetWidth;\n this.customStep = false;\n }\n else {\n this.customStep = true;\n }\n };\n HScroll.prototype.initialize = function () {\n var scrollEle = this.createElement('div', { className: CLS_HSCROLLCON });\n var scrollDiv = this.createElement('div', { className: CLS_HSCROLLBAR });\n scrollDiv.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollEle.appendChild(ele_1);\n }\n scrollDiv.appendChild(scrollEle);\n ele.appendChild(scrollDiv);\n scrollDiv.style.overflowX = 'hidden';\n this.scrollEle = scrollDiv;\n this.scrollItems = scrollEle;\n };\n HScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - It returns the current module name.\n * @private\n */\n HScroll.prototype.getModuleName = function () {\n return 'hScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}\n */\n HScroll.prototype.destroy = function () {\n var ele = this.element;\n ele.style.display = '';\n ele.classList.remove(CLS_ROOT);\n ele.classList.remove(CLS_DEVICE);\n ele.classList.remove(CLS_RTL);\n var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n var overlay = selectAll('.' + CLS_OVERLAY, ele);\n [].slice.call(overlay).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n ele.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (nav.length > 0) {\n detach(nav[0]);\n if (!isNullOrUndefined(nav[1])) {\n detach(nav[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the HScroll component.\n * When set to `true` , the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n HScroll.prototype.disable = function (value) {\n var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n if (value) {\n this.element.classList.add(CLS_DISABLE);\n }\n else {\n this.element.classList.remove(CLS_DISABLE);\n }\n [].slice.call(navEles).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n HScroll.prototype.createOverlay = function (element) {\n var id = element.id.concat('_nav');\n var rightOverlayEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY });\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightEle = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n rightEle.appendChild(navItem);\n var leftEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY });\n if (this.ieCheck) {\n rightEle.classList.add('e-ie-align');\n }\n element.appendChild(rightOverlayEle);\n element.appendChild(rightEle);\n element.insertBefore(leftEle, element.firstChild);\n this.eventBinding([rightEle]);\n };\n HScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n var rightAttributes = { 'role': 'button', 'id': id.concat('_right'), 'aria-label': 'Scroll right' };\n var nav = this.createElement('div', { className: clsRight, attrs: rightAttributes });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n var leftAttributes = { 'role': 'button', 'id': id.concat('_left'), 'aria-label': 'Scroll left' };\n var navEle = this.createElement('div', { className: clsLeft + ' ' + CLS_DISABLE, attrs: leftAttributes });\n navEle.setAttribute('aria-disabled', 'true');\n var navLeftItem = this.createElement('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navEle.appendChild(navLeftItem);\n nav.appendChild(navItem);\n element.appendChild(nav);\n element.insertBefore(navEle, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navEle.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navEle]);\n };\n HScroll.prototype.onKeyPress = function (e) {\n var _this = this;\n if (e.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, e.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n HScroll.prototype.onKeyUp = function (e) {\n if (e.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n e.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n HScroll.prototype.eventBinding = function (ele) {\n var _this = this;\n [].slice.call(ele).forEach(function (el) {\n new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n el.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n });\n };\n HScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n HScroll.prototype.tabHoldHandler = function (e) {\n var _this = this;\n var trgt = e.originalEvent.target;\n trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDis = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDis, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n HScroll.prototype.contains = function (ele, className) {\n return ele.classList.contains(className);\n };\n HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var rootEle = this.element;\n var classList = trgt.classList;\n if (classList.contains(CLS_HSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n scrollDis = -scrollDis;\n }\n if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n if (classList.contains(CLS_NAVRIGHTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n else {\n if (classList.contains(CLS_NAVLEFTARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n }\n };\n HScroll.prototype.clickEventHandler = function (e) {\n this.eleScrolling(this.scrollStep, e.target, false);\n };\n HScroll.prototype.swipeHandler = function (e) {\n var swipeEle = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceX / (e.velocity * 10);\n }\n else {\n distance = e.distanceX / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Left') {\n swipeEle.scrollLeft += distance * step;\n }\n else if (e.swipeDirection === 'Right') {\n swipeEle.scrollLeft -= distance * step;\n }\n start -= 0.5;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollLeft += scrollVal;\n }\n else {\n this.scrollEle.scrollLeft -= scrollVal;\n }\n if (this.enableRtl && this.scrollEle.scrollLeft > 0) {\n this.scrollEle.scrollLeft = 0;\n }\n };\n HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollVal, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollVal -= el.offsetWidth;\n });\n }\n var animate = function () {\n var scrollValue;\n var scrollStep;\n if (_this.contains(_this.element, CLS_RTL) && _this.browserCheck) {\n scrollValue = -scrollVal;\n scrollStep = -step;\n }\n else {\n scrollValue = scrollVal;\n scrollStep = step;\n }\n if (scrollValue < step) {\n window.cancelAnimationFrame(scrollStep);\n }\n else {\n _this.scrollUpdating(scrollStep, action);\n scrollVal -= scrollStep;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n HScroll.prototype.touchHandler = function (e) {\n var ele = this.scrollEle;\n var distance = e.distanceX;\n if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n distance = -distance;\n }\n if (e.scrollDirection === 'Left') {\n ele.scrollLeft = ele.scrollLeft + distance;\n }\n else if (e.scrollDirection === 'Right') {\n ele.scrollLeft = ele.scrollLeft - distance;\n }\n };\n HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisable) ? removeDisable : addDisable;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisable)) {\n classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n }\n }\n else if (addDisable && removeDisable) {\n addDisable.classList.add(CLS_DISABLE);\n addDisable.setAttribute('aria-disabled', 'true');\n addDisable.removeAttribute('tabindex');\n removeDisable.classList.remove(CLS_DISABLE);\n removeDisable.setAttribute('aria-disabled', 'false');\n removeDisable.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n HScroll.prototype.scrollHandler = function (e) {\n var target = e.target;\n var width = target.offsetWidth;\n var rootEle = this.element;\n var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n var leftOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n var rightOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n var scrollLeft = target.scrollLeft;\n if (scrollLeft <= 0) {\n scrollLeft = -scrollLeft;\n }\n if (this.isDevice) {\n if (this.enableRtl && !(this.browserCheck || this.ieCheck)) {\n leftOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n rightOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n }\n if (scrollLeft < OVERLAY_MAXWID) {\n leftOverlay.style.width = scrollLeft + 'px';\n }\n else {\n leftOverlay.style.width = '40px';\n }\n if ((target.scrollWidth - Math.ceil(width + scrollLeft)) < OVERLAY_MAXWID) {\n rightOverlay.style.width = (target.scrollWidth - Math.ceil(width + scrollLeft)) + 'px';\n }\n else {\n rightOverlay.style.width = '40px';\n }\n }\n if (scrollLeft === 0) {\n this.arrowDisabling(navLeftEle, navRightEle);\n }\n else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n this.arrowDisabling(navRightEle, navLeftEle);\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n *\n * @param {HScrollModel} newProp - It contains the new value of data.\n * @param {HScrollModel} oldProp - It contains the old value of data.\n * @returns {void}\n * @private\n */\n HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n this.setScrollState();\n break;\n case 'enableRtl':\n newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], HScroll.prototype, \"scrollStep\", void 0);\n HScroll = __decorate([\n NotifyPropertyChanges\n ], HScroll);\n return HScroll;\n}(Component));\nexport { HScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID, removeClass } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-vscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_VSCROLLBAR = 'e-vscroll-bar';\nvar CLS_VSCROLLCON = 'e-vscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVUPARROW = 'e-nav-up-arrow';\nvar CLS_NAVDOWNARROW = 'e-nav-down-arrow';\nvar CLS_VSCROLLNAV = 'e-scroll-nav';\nvar CLS_VSCROLLNAVUP = 'e-scroll-up-nav';\nvar CLS_VSCROLLNAVDOWN = 'e-scroll-down-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_UPOVERLAY = 'e-scroll-up-overlay';\nvar CLS_DOWNOVERLAY = 'e-scroll-down-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * VScroll module is introduces vertical scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs vertical scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n *
\n * \n * ```\n */\nvar VScroll = /** @class */ (function (_super) {\n __extends(VScroll, _super);\n /**\n * Initializes a new instance of the VScroll class.\n *\n * @param {VScrollModel} options - Specifies VScroll model properties as options.\n * @param {string | HTMLElement} element - Specifies the element for which vertical scrolling applies.\n */\n function VScroll(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n VScroll.prototype.preRender = function () {\n this.browser = Browser.info.name;\n this.browserCheck = this.browser === 'mozilla';\n this.isDevice = Browser.isDevice;\n this.customStep = true;\n var ele = this.element;\n this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n this.initialize();\n if (ele.id === '') {\n ele.id = getUniqueID('vscroll');\n this.uniqueId = true;\n }\n ele.style.display = 'block';\n if (this.enableRtl) {\n ele.classList.add(CLS_RTL);\n }\n };\n /**\n * To Initialize the vertical scroll rendering\n *\n * @private\n * @returns {void}\n */\n VScroll.prototype.render = function () {\n this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n EventHandler.add(this.scrollEle, 'scroll', this.scrollEventHandler, this);\n if (!this.isDevice) {\n this.createNavIcon(this.element);\n }\n else {\n this.element.classList.add(CLS_DEVICE);\n this.createOverlayElement(this.element);\n }\n this.setScrollState();\n EventHandler.add(this.element, 'wheel', this.wheelEventHandler, this);\n };\n VScroll.prototype.setScrollState = function () {\n if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n this.scrollStep = this.scrollEle.offsetHeight;\n this.customStep = false;\n }\n else {\n this.customStep = true;\n }\n };\n VScroll.prototype.initialize = function () {\n var scrollCnt = buildTag('div', { className: CLS_VSCROLLCON });\n var scrollBar = buildTag('div', { className: CLS_VSCROLLBAR });\n scrollBar.setAttribute('tabindex', '-1');\n var ele = this.element;\n var innerEle = [].slice.call(ele.children);\n for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n var ele_1 = innerEle_1[_i];\n scrollCnt.appendChild(ele_1);\n }\n scrollBar.appendChild(scrollCnt);\n ele.appendChild(scrollBar);\n scrollBar.style.overflow = 'hidden';\n this.scrollEle = scrollBar;\n this.scrollItems = scrollCnt;\n };\n VScroll.prototype.getPersistData = function () {\n var keyEntity = ['scrollStep'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - It returns the current module name.\n * @private\n */\n VScroll.prototype.getModuleName = function () {\n return 'vScroll';\n };\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}\n */\n VScroll.prototype.destroy = function () {\n var el = this.element;\n el.style.display = '';\n removeClass([this.element], [CLS_ROOT, CLS_DEVICE, CLS_RTL]);\n var navs = selectAll('.e-' + el.id + '_nav.' + CLS_VSCROLLNAV, el);\n var overlays = selectAll('.' + CLS_OVERLAY, el);\n [].slice.call(overlays).forEach(function (ele) {\n detach(ele);\n });\n for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n var elem = _a[_i];\n el.appendChild(elem);\n }\n if (this.uniqueId) {\n this.element.removeAttribute('id');\n }\n detach(this.scrollEle);\n if (navs.length > 0) {\n detach(navs[0]);\n if (!isNullOrUndefined(navs[1])) {\n detach(navs[1]);\n }\n }\n EventHandler.remove(this.scrollEle, 'scroll', this.scrollEventHandler);\n this.touchModule.destroy();\n this.touchModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Specifies the value to disable/enable the VScroll component.\n * When set to `true` , the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, VScroll will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n VScroll.prototype.disable = function (value) {\n var navEle = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n if (value) {\n this.element.classList.add(CLS_DISABLE);\n }\n else {\n this.element.classList.remove(CLS_DISABLE);\n }\n [].slice.call(navEle).forEach(function (el) {\n el.setAttribute('tabindex', !value ? '0' : '-1');\n });\n };\n VScroll.prototype.createOverlayElement = function (element) {\n var id = element.id.concat('_nav');\n var downOverlayEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_DOWNOVERLAY });\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var downEle = buildTag('div', { id: id.concat('down'), className: clsDown });\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n downEle.appendChild(navItem);\n var upEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_UPOVERLAY });\n if (this.ieCheck) {\n downEle.classList.add('e-ie-align');\n }\n element.appendChild(downOverlayEle);\n element.appendChild(downEle);\n element.insertBefore(upEle, element.firstChild);\n this.eventBinding([downEle]);\n };\n VScroll.prototype.createNavIcon = function (element) {\n var id = element.id.concat('_nav');\n var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n var nav = buildTag('div', { id: id.concat('_down'), className: clsDown });\n nav.setAttribute('aria-disabled', 'false');\n var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n var clsUp = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVUP);\n var navElement = buildTag('div', { id: id.concat('_up'), className: clsUp + ' ' + CLS_DISABLE });\n navElement.setAttribute('aria-disabled', 'true');\n var navUpItem = buildTag('div', { className: CLS_NAVUPARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n navElement.appendChild(navUpItem);\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n element.appendChild(nav);\n element.insertBefore(navElement, element.firstChild);\n if (this.ieCheck) {\n nav.classList.add('e-ie-align');\n navElement.classList.add('e-ie-align');\n }\n this.eventBinding([nav, navElement]);\n };\n VScroll.prototype.onKeyPress = function (ev) {\n var _this = this;\n if (ev.key === 'Enter') {\n var timeoutFun_1 = function () {\n _this.keyTimeout = true;\n _this.eleScrolling(10, ev.target, true);\n };\n this.keyTimer = window.setTimeout(function () {\n timeoutFun_1();\n }, 100);\n }\n };\n VScroll.prototype.onKeyUp = function (ev) {\n if (ev.key !== 'Enter') {\n return;\n }\n if (this.keyTimeout) {\n this.keyTimeout = false;\n }\n else {\n ev.target.click();\n }\n clearTimeout(this.keyTimer);\n };\n VScroll.prototype.eventBinding = function (element) {\n var _this = this;\n [].slice.call(element).forEach(function (ele) {\n new Touch(ele, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n ele.addEventListener('keydown', _this.onKeyPress.bind(_this));\n ele.addEventListener('keyup', _this.onKeyUp.bind(_this));\n ele.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n ele.addEventListener('touchend', _this.repeatScroll.bind(_this));\n ele.addEventListener('contextmenu', function (e) {\n e.preventDefault();\n });\n EventHandler.add(ele, 'click', _this.clickEventHandler, _this);\n });\n };\n VScroll.prototype.repeatScroll = function () {\n clearInterval(this.timeout);\n };\n VScroll.prototype.tabHoldHandler = function (ev) {\n var _this = this;\n var trgt = ev.originalEvent.target;\n trgt = this.contains(trgt, CLS_VSCROLLNAV) ? trgt.firstElementChild : trgt;\n var scrollDistance = 10;\n var timeoutFun = function () {\n _this.eleScrolling(scrollDistance, trgt, true);\n };\n this.timeout = window.setInterval(function () {\n timeoutFun();\n }, 50);\n };\n VScroll.prototype.contains = function (element, className) {\n return element.classList.contains(className);\n };\n VScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n var classList = trgt.classList;\n if (classList.contains(CLS_VSCROLLNAV)) {\n classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n }\n if (classList.contains(CLS_NAVDOWNARROW)) {\n this.frameScrollRequest(scrollDis, 'add', isContinuous);\n }\n else if (classList.contains(CLS_NAVUPARROW)) {\n this.frameScrollRequest(scrollDis, '', isContinuous);\n }\n };\n VScroll.prototype.clickEventHandler = function (event) {\n this.eleScrolling(this.scrollStep, event.target, false);\n };\n VScroll.prototype.wheelEventHandler = function (e) {\n e.preventDefault();\n this.frameScrollRequest(this.scrollStep, (e.deltaY > 0 ? 'add' : ''), false);\n };\n VScroll.prototype.swipeHandler = function (e) {\n var swipeElement = this.scrollEle;\n var distance;\n if (e.velocity <= 1) {\n distance = e.distanceY / (e.velocity * 10);\n }\n else {\n distance = e.distanceY / e.velocity;\n }\n var start = 0.5;\n var animate = function () {\n var step = Math.sin(start);\n if (step <= 0) {\n window.cancelAnimationFrame(step);\n }\n else {\n if (e.swipeDirection === 'Up') {\n swipeElement.scrollTop += distance * step;\n }\n else if (e.swipeDirection === 'Down') {\n swipeElement.scrollTop -= distance * step;\n }\n start -= 0.02;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.scrollUpdating = function (scrollVal, action) {\n if (action === 'add') {\n this.scrollEle.scrollTop += scrollVal;\n }\n else {\n this.scrollEle.scrollTop -= scrollVal;\n }\n };\n VScroll.prototype.frameScrollRequest = function (scrollValue, action, isContinuous) {\n var _this = this;\n var step = 10;\n if (isContinuous) {\n this.scrollUpdating(scrollValue, action);\n return;\n }\n if (!this.customStep) {\n [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n scrollValue -= el.offsetHeight;\n });\n }\n var animate = function () {\n if (scrollValue < step) {\n window.cancelAnimationFrame(step);\n }\n else {\n _this.scrollUpdating(step, action);\n scrollValue -= step;\n window.requestAnimationFrame(animate);\n }\n };\n animate();\n };\n VScroll.prototype.touchHandler = function (e) {\n var el = this.scrollEle;\n var distance = e.distanceY;\n if (e.scrollDirection === 'Up') {\n el.scrollTop = el.scrollTop + distance;\n }\n else if (e.scrollDirection === 'Down') {\n el.scrollTop = el.scrollTop - distance;\n }\n };\n VScroll.prototype.arrowDisabling = function (addDisableCls, removeDisableCls) {\n if (this.isDevice) {\n var arrowEle = isNullOrUndefined(addDisableCls) ? removeDisableCls : addDisableCls;\n var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n if (isNullOrUndefined(addDisableCls)) {\n classList(arrowIcon, [CLS_NAVDOWNARROW], [CLS_NAVUPARROW]);\n }\n else {\n classList(arrowIcon, [CLS_NAVUPARROW], [CLS_NAVDOWNARROW]);\n }\n }\n else {\n addDisableCls.classList.add(CLS_DISABLE);\n addDisableCls.setAttribute('aria-disabled', 'true');\n addDisableCls.removeAttribute('tabindex');\n removeDisableCls.classList.remove(CLS_DISABLE);\n removeDisableCls.setAttribute('aria-disabled', 'false');\n removeDisableCls.setAttribute('tabindex', '0');\n }\n this.repeatScroll();\n };\n VScroll.prototype.scrollEventHandler = function (e) {\n var target = e.target;\n var height = target.offsetHeight;\n var navUpEle = this.element.querySelector('.' + CLS_VSCROLLNAVUP);\n var navDownEle = this.element.querySelector('.' + CLS_VSCROLLNAVDOWN);\n var upOverlay = this.element.querySelector('.' + CLS_UPOVERLAY);\n var downOverlay = this.element.querySelector('.' + CLS_DOWNOVERLAY);\n var scrollTop = target.scrollTop;\n if (scrollTop <= 0) {\n scrollTop = -scrollTop;\n }\n if (this.isDevice) {\n if (scrollTop < OVERLAY_MAXWID) {\n upOverlay.style.height = scrollTop + 'px';\n }\n else {\n upOverlay.style.height = '40px';\n }\n if ((target.scrollHeight - Math.ceil(height + scrollTop)) < OVERLAY_MAXWID) {\n downOverlay.style.height = (target.scrollHeight - Math.ceil(height + scrollTop)) + 'px';\n }\n else {\n downOverlay.style.height = '40px';\n }\n }\n if (scrollTop === 0) {\n this.arrowDisabling(navUpEle, navDownEle);\n }\n else if (Math.ceil(height + scrollTop + .1) >= target.scrollHeight) {\n this.arrowDisabling(navDownEle, navUpEle);\n }\n else {\n var disEle = this.element.querySelector('.' + CLS_VSCROLLNAV + '.' + CLS_DISABLE);\n if (disEle) {\n disEle.classList.remove(CLS_DISABLE);\n disEle.setAttribute('aria-disabled', 'false');\n disEle.setAttribute('tabindex', '0');\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n *\n * @param {VScrollModel} newProp - It contains the new value of data.\n * @param {VScrollModel} oldProp - It contains the old value of data.\n * @returns {void}\n * @private\n */\n VScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'scrollStep':\n this.setScrollState();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(CLS_RTL);\n }\n else {\n this.element.classList.remove(CLS_RTL);\n }\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], VScroll.prototype, \"scrollStep\", void 0);\n VScroll = __decorate([\n NotifyPropertyChanges\n ], VScroll);\n return VScroll;\n}(Component));\nexport { VScroll };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, EventHandler, Property, Event } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { selectAll, setStyleAttribute as setStyle, select } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, getUniqueID, formatUnit, Collection, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nvar CLS_VERTICAL = 'e-vertical';\nvar CLS_ITEMS = 'e-toolbar-items';\nvar CLS_ITEM = 'e-toolbar-item';\nvar CLS_RTL = 'e-rtl';\nvar CLS_SEPARATOR = 'e-separator';\nvar CLS_POPUPICON = 'e-popup-up-icon';\nvar CLS_POPUPDOWN = 'e-popup-down-icon';\nvar CLS_POPUPOPEN = 'e-popup-open';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_POPUPTEXT = 'e-toolbar-text';\nvar CLS_TBARTEXT = 'e-popup-text';\nvar CLS_TBAROVERFLOW = 'e-overflow-show';\nvar CLS_POPOVERFLOW = 'e-overflow-hide';\nvar CLS_TBARBTN = 'e-tbar-btn';\nvar CLS_TBARNAV = 'e-hor-nav';\nvar CLS_TBARSCRLNAV = 'e-scroll-nav';\nvar CLS_TBARRIGHT = 'e-toolbar-right';\nvar CLS_TBARLEFT = 'e-toolbar-left';\nvar CLS_TBARCENTER = 'e-toolbar-center';\nvar CLS_TBARPOS = 'e-tbar-pos';\nvar CLS_HSCROLLCNT = 'e-hscroll-content';\nvar CLS_VSCROLLCNT = 'e-vscroll-content';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_POPUPNAV = 'e-hor-nav';\nvar CLS_POPUPCLASS = 'e-toolbar-pop';\nvar CLS_POPUP = 'e-toolbar-popup';\nvar CLS_TBARBTNTEXT = 'e-tbar-btn-text';\nvar CLS_TBARNAVACT = 'e-nav-active';\nvar CLS_TBARIGNORE = 'e-ignore';\nvar CLS_POPPRI = 'e-popup-alone';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_MULTIROW = 'e-toolbar-multirow';\nvar CLS_MULTIROWPOS = 'e-multirow-pos';\nvar CLS_MULTIROW_SEPARATOR = 'e-multirow-separator';\nvar CLS_EXTENDABLE_SEPARATOR = 'e-extended-separator';\nvar CLS_EXTEANDABLE_TOOLBAR = 'e-extended-toolbar';\nvar CLS_EXTENDABLECLASS = 'e-toolbar-extended';\nvar CLS_EXTENDPOPUP = 'e-expended-nav';\nvar CLS_EXTENDEDPOPOPEN = 'e-tbar-extended';\n/**\n * An item object that is used to configure Toolbar commands.\n */\nvar Item = /** @class */ (function (_super) {\n __extends(Item, _super);\n function Item() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Item.prototype, \"id\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"text\", void 0);\n __decorate([\n Property('auto')\n ], Item.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"showAlwaysInPopup\", void 0);\n __decorate([\n Property(false)\n ], Item.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"prefixIcon\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"suffixIcon\", void 0);\n __decorate([\n Property(true)\n ], Item.prototype, \"visible\", void 0);\n __decorate([\n Property('None')\n ], Item.prototype, \"overflow\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"template\", void 0);\n __decorate([\n Property('Button')\n ], Item.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], Item.prototype, \"showTextOn\", void 0);\n __decorate([\n Property(null)\n ], Item.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Item.prototype, \"tooltipText\", void 0);\n __decorate([\n Property('Left')\n ], Item.prototype, \"align\", void 0);\n __decorate([\n Event()\n ], Item.prototype, \"click\", void 0);\n __decorate([\n Property(-1)\n ], Item.prototype, \"tabIndex\", void 0);\n return Item;\n}(ChildProperty));\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n *
\n * \n * ```\n */\nvar Toolbar = /** @class */ (function (_super) {\n __extends(Toolbar, _super);\n /**\n * Initializes a new instance of the Toolbar class.\n *\n * @param {ToolbarModel} options - Specifies Toolbar model properties as options.\n * @param { string | HTMLElement} element - Specifies the element that is rendered as a Toolbar.\n */\n function Toolbar(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.resizeContext = _this.resize.bind(_this);\n _this.orientationChangeContext = _this.orientationChange.bind(_this);\n /**\n * Contains the keyboard configuration of the Toolbar.\n */\n _this.keyConfigs = {\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n popupOpen: 'enter',\n popupClose: 'escape',\n tab: 'tab',\n home: 'home',\n end: 'end'\n };\n return _this;\n }\n /**\n * Removes the control from the DOM and also removes all its related events.\n *\n * @returns {void}.\n */\n Toolbar.prototype.destroy = function () {\n var _this = this;\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n var btnItems = this.element.querySelectorAll('.e-control.e-btn');\n [].slice.call(btnItems).forEach(function (el) {\n if (!isNOU(el) && !isNOU(el.ej2_instances) && !isNOU(el.ej2_instances[0]) && !(el.ej2_instances[0].isDestroyed)) {\n el.ej2_instances[0].destroy();\n }\n });\n this.unwireEvents();\n this.tempId.forEach(function (ele) {\n if (!isNOU(_this.element.querySelector(ele))) {\n document.body.appendChild(_this.element.querySelector(ele)).style.display = 'none';\n }\n });\n this.destroyItems();\n while (this.element.lastElementChild) {\n this.element.removeChild(this.element.lastElementChild);\n }\n if (this.trgtEle) {\n this.element.appendChild(this.ctrlTem);\n this.trgtEle = null;\n this.ctrlTem = null;\n }\n if (this.popObj) {\n this.popObj.destroy();\n detach(this.popObj.element);\n }\n if (this.activeEle) {\n this.activeEle = null;\n }\n this.popObj = null;\n this.tbarAlign = null;\n this.tbarItemsCol = [];\n this.remove(this.element, 'e-toolpop');\n if (this.cssClass) {\n removeClass([this.element], this.cssClass.split(' '));\n }\n this.element.removeAttribute('style');\n ['aria-disabled', 'aria-orientation', 'role'].forEach(function (attrb) {\n return _this.element.removeAttribute(attrb);\n });\n _super.prototype.destroy.call(this);\n };\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n Toolbar.prototype.preRender = function () {\n var eventArgs = { enableCollision: this.enableCollision, scrollStep: this.scrollStep };\n this.trigger('beforeCreate', eventArgs);\n this.enableCollision = eventArgs.enableCollision;\n this.scrollStep = eventArgs.scrollStep;\n this.scrollModule = null;\n this.popObj = null;\n this.tempId = [];\n this.tbarItemsCol = this.items;\n this.isVertical = this.element.classList.contains(CLS_VERTICAL) ? true : false;\n this.isExtendedOpen = false;\n this.popupPriCount = 0;\n if (this.enableRtl) {\n this.add(this.element, CLS_RTL);\n }\n };\n Toolbar.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n window.addEventListener('resize', this.resizeContext);\n window.addEventListener('orientationchange', this.orientationChangeContext);\n if (this.allowKeyboard) {\n this.wireKeyboardEvent();\n }\n };\n Toolbar.prototype.wireKeyboardEvent = function () {\n this.keyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs\n });\n EventHandler.add(this.element, 'keydown', this.docKeyDown, this);\n this.updateTabIndex('0');\n };\n Toolbar.prototype.updateTabIndex = function (tabIndex) {\n var ele = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n if (!isNOU(ele) && !isNOU(ele.firstElementChild)) {\n var dataTabIndex = ele.firstElementChild.getAttribute('data-tabindex');\n if (dataTabIndex && dataTabIndex === '-1' && ele.firstElementChild.tagName !== 'INPUT') {\n ele.firstElementChild.setAttribute('tabindex', tabIndex);\n }\n }\n };\n Toolbar.prototype.unwireKeyboardEvent = function () {\n if (this.keyModule) {\n EventHandler.remove(this.element, 'keydown', this.docKeyDown);\n this.keyModule.destroy();\n this.keyModule = null;\n }\n };\n Toolbar.prototype.docKeyDown = function (e) {\n if (e.target.tagName === 'INPUT') {\n return;\n }\n var popCheck = !isNOU(this.popObj) && isVisible(this.popObj.element) && this.overflowMode !== 'Extended';\n if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && popCheck) {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n var keyCheck = (e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36);\n if (keyCheck) {\n e.preventDefault();\n }\n };\n Toolbar.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.clickHandler);\n this.destroyScroll();\n this.unwireKeyboardEvent();\n window.removeEventListener('resize', this.resizeContext);\n window.removeEventListener('orientationchange', this.orientationChangeContext);\n document.removeEventListener('scroll', this.clickEvent);\n document.removeEventListener('click', this.scrollEvent);\n this.scrollEvent = null;\n this.clickEvent = null;\n };\n Toolbar.prototype.clearProperty = function () {\n this.tbarEle = [];\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n };\n Toolbar.prototype.docEvent = function (e) {\n var popEle = closest(e.target, '.e-popup');\n if (this.popObj && isVisible(this.popObj.element) && !popEle && this.overflowMode === 'Popup') {\n this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n };\n Toolbar.prototype.destroyScroll = function () {\n if (this.scrollModule) {\n if (this.tbarAlign) {\n this.add(this.scrollModule.element, CLS_TBARPOS);\n }\n this.scrollModule.destroy();\n this.scrollModule = null;\n }\n };\n Toolbar.prototype.destroyItems = function () {\n if (this.element) {\n [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) { detach(el); });\n }\n if (this.tbarAlign) {\n var tbarItems = this.element.querySelector('.' + CLS_ITEMS);\n [].slice.call(tbarItems.children).forEach(function (el) {\n detach(el);\n });\n this.tbarAlign = false;\n this.remove(tbarItems, CLS_TBARPOS);\n }\n this.clearProperty();\n };\n Toolbar.prototype.destroyMode = function () {\n if (this.scrollModule) {\n this.remove(this.scrollModule.element, CLS_RTL);\n this.destroyScroll();\n }\n this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n this.remove(this.element, CLS_EXTEANDABLE_TOOLBAR);\n var tempEle = this.element.querySelector('.e-toolbar-multirow');\n if (tempEle) {\n this.remove(tempEle, CLS_MULTIROW);\n }\n if (this.popObj) {\n this.popupRefresh(this.popObj.element, true);\n }\n };\n Toolbar.prototype.add = function (ele, val) {\n ele.classList.add(val);\n };\n Toolbar.prototype.remove = function (ele, val) {\n ele.classList.remove(val);\n };\n Toolbar.prototype.elementFocus = function (ele) {\n var fChild = ele.firstElementChild;\n if (fChild) {\n fChild.focus();\n this.activeEleSwitch(ele);\n }\n else {\n ele.focus();\n }\n };\n Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n var clst;\n if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n }\n else if (this.element === trgt || tbrNavChk) {\n clst = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n }\n else {\n clst = closest(trgt, '.' + CLS_ITEM);\n }\n return clst;\n };\n Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n var popObj = this.popObj;\n var rootEle = this.element;\n var popAnimate = { name: 'FadeOut', duration: 100 };\n var value = e.action === 'moveUp' ? 'previous' : 'next';\n var ele;\n var nodes;\n switch (e.action) {\n case 'moveRight':\n if (this.isVertical) {\n return;\n }\n if (rootEle === trgt) {\n this.elementFocus(clst);\n }\n else if (!navChk) {\n this.eleFocus(clst, 'next');\n }\n break;\n case 'moveLeft':\n if (this.isVertical) {\n return;\n }\n if (!navChk) {\n this.eleFocus(clst, 'previous');\n }\n break;\n case 'home':\n case 'end':\n if (clst) {\n var popupCheck = closest(clst, '.e-popup');\n var extendedPopup = this.element.querySelector('.' + CLS_EXTENDABLECLASS);\n if (this.overflowMode === 'Extended' && extendedPopup && extendedPopup.classList.contains('e-popup-open')) {\n popupCheck = e.action === 'end' ? extendedPopup : null;\n }\n if (popupCheck) {\n if (isVisible(this.popObj.element)) {\n nodes = [].slice.call(popupCheck.children);\n if (e.action === 'home') {\n ele = this.focusFirstVisibleEle(nodes);\n }\n else {\n ele = this.focusLastVisibleEle(nodes);\n }\n }\n }\n else {\n nodes = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ')');\n if (e.action === 'home') {\n ele = this.focusFirstVisibleEle(nodes);\n }\n else {\n ele = this.focusLastVisibleEle(nodes);\n }\n }\n if (ele) {\n this.elementFocus(ele);\n }\n }\n break;\n case 'moveUp':\n case 'moveDown':\n if (!this.isVertical) {\n if (popObj && closest(trgt, '.e-popup')) {\n var popEle = popObj.element;\n var popFrstEle = popEle.firstElementChild;\n if ((value === 'previous' && popFrstEle === clst)) {\n popEle.lastElementChild.firstChild.focus();\n }\n else if (value === 'next' && popEle.lastElementChild === clst) {\n popFrstEle.firstChild.focus();\n }\n else {\n this.eleFocus(clst, value);\n }\n }\n else if (e.action === 'moveDown' && popObj && isVisible(popObj.element)) {\n this.elementFocus(clst);\n }\n }\n else {\n if (e.action === 'moveUp') {\n this.eleFocus(clst, 'previous');\n }\n else {\n this.eleFocus(clst, 'next');\n }\n }\n break;\n case 'tab':\n if (!scrollChk && !navChk) {\n var ele_1 = clst.firstElementChild;\n if (rootEle === trgt) {\n if (this.activeEle) {\n this.activeEle.focus();\n }\n else {\n this.activeEleRemove(ele_1);\n ele_1.focus();\n }\n }\n }\n break;\n case 'popupClose':\n if (popObj && this.overflowMode !== 'Extended') {\n popObj.hide(popAnimate);\n }\n break;\n case 'popupOpen':\n if (!navChk) {\n return;\n }\n if (popObj && !isVisible(popObj.element)) {\n popObj.element.style.top = rootEle.offsetHeight + 'px';\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n else {\n popObj.hide(popAnimate);\n }\n break;\n }\n };\n Toolbar.prototype.keyActionHandler = function (e) {\n var trgt = e.target;\n if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA' || this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n e.preventDefault();\n var tbrNavChk = trgt.classList.contains(CLS_TBARNAV);\n var tbarScrollChk = trgt.classList.contains(CLS_TBARSCRLNAV);\n var clst = this.clstElement(tbrNavChk, trgt);\n if (clst || tbarScrollChk) {\n this.keyHandling(clst, e, trgt, tbrNavChk, tbarScrollChk);\n }\n };\n /**\n * Specifies the value to disable/enable the Toolbar component.\n * When set to `true`, the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, Toolbar will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n Toolbar.prototype.disable = function (value) {\n var rootEle = this.element;\n if (value) {\n rootEle.classList.add(CLS_DISABLE);\n }\n else {\n rootEle.classList.remove(CLS_DISABLE);\n }\n if (this.activeEle) {\n this.activeEle.setAttribute('tabindex', this.activeEle.getAttribute('data-tabindex'));\n }\n if (this.scrollModule) {\n this.scrollModule.disable(value);\n }\n if (this.popObj) {\n if (isVisible(this.popObj.element) && this.overflowMode !== 'Extended') {\n this.popObj.hide();\n }\n rootEle.querySelector('#' + rootEle.id + '_nav').setAttribute('tabindex', !value ? '0' : '-1');\n }\n };\n Toolbar.prototype.eleContains = function (el) {\n return el.classList.contains(CLS_SEPARATOR) || el.classList.contains(CLS_DISABLE) || el.getAttribute('disabled') || el.classList.contains(CLS_HIDDEN) || !isVisible(el) || !el.classList.contains(CLS_ITEM);\n };\n Toolbar.prototype.focusFirstVisibleEle = function (nodes) {\n var element;\n var index = 0;\n while (index < nodes.length) {\n var ele = nodes[parseInt(index.toString(), 10)];\n if (!ele.classList.contains(CLS_HIDDEN) && !ele.classList.contains(CLS_DISABLE)) {\n return ele;\n }\n index++;\n }\n return element;\n };\n Toolbar.prototype.focusLastVisibleEle = function (nodes) {\n var element;\n var index = nodes.length - 1;\n while (index >= 0) {\n var ele = nodes[parseInt(index.toString(), 10)];\n if (!ele.classList.contains(CLS_HIDDEN) && !ele.classList.contains(CLS_DISABLE)) {\n return ele;\n }\n index--;\n }\n return element;\n };\n Toolbar.prototype.eleFocus = function (closest, pos) {\n var sib = Object(closest)[pos + 'ElementSibling'];\n if (sib) {\n var skipEle = this.eleContains(sib);\n if (skipEle) {\n this.eleFocus(sib, pos);\n return;\n }\n this.elementFocus(sib);\n }\n else if (this.tbarAlign) {\n var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n if (!isNOU(elem) && elem.children.length === 0) {\n elem = Object(elem)[pos + 'ElementSibling'];\n }\n if (!isNOU(elem) && elem.children.length > 0) {\n if (pos === 'next') {\n var el = elem.querySelector('.' + CLS_ITEM);\n if (this.eleContains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n el.firstElementChild.focus();\n this.activeEleSwitch(el);\n }\n }\n else {\n var el = elem.lastElementChild;\n if (this.eleContains(el)) {\n this.eleFocus(el, pos);\n }\n else {\n this.elementFocus(el);\n }\n }\n }\n }\n else if (!isNOU(closest)) {\n var tbrItems = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ')' + ':not(.' + CLS_DISABLE + ')' + ':not(.' + CLS_HIDDEN + ')');\n if (pos === 'next' && tbrItems) {\n this.elementFocus(tbrItems[0]);\n }\n else if (pos === 'previous' && tbrItems) {\n this.elementFocus(tbrItems[tbrItems.length - 1]);\n }\n }\n };\n Toolbar.prototype.clickHandler = function (e) {\n var _this = this;\n var trgt = e.target;\n var ele = this.element;\n var isPopupElement = !isNOU(closest(trgt, '.' + CLS_POPUPCLASS));\n var clsList = trgt.classList;\n var popupNav = closest(trgt, ('.' + CLS_TBARNAV));\n if (!popupNav) {\n popupNav = trgt;\n }\n if (!ele.children[0].classList.contains('e-hscroll') && !ele.children[0].classList.contains('e-vscroll')\n && (clsList.contains(CLS_TBARNAV))) {\n clsList = trgt.querySelector('.e-icons').classList;\n }\n if (clsList.contains(CLS_POPUPICON) || clsList.contains(CLS_POPUPDOWN)) {\n this.popupClickHandler(ele, popupNav, CLS_RTL);\n }\n var itemObj;\n var clst = closest(e.target, '.' + CLS_ITEM);\n if ((isNOU(clst) || clst.classList.contains(CLS_DISABLE)) && !popupNav.classList.contains(CLS_TBARNAV)) {\n return;\n }\n if (clst) {\n var tempItem = this.items[this.tbarEle.indexOf(clst)];\n itemObj = tempItem;\n }\n var eventArgs = { originalEvent: e, item: itemObj };\n var isClickBinded = itemObj && !isNOU(itemObj.click) && typeof itemObj.click == 'object' ?\n !isNOU(itemObj.click.observers) && itemObj.click.observers.length > 0 :\n !isNOU(itemObj) && !isNOU(itemObj.click);\n if (isClickBinded) {\n this.trigger('items[' + this.tbarEle.indexOf(clst) + '].click', eventArgs);\n }\n if (!eventArgs.cancel) {\n this.trigger('clicked', eventArgs, function (clickedArgs) {\n if (!isNOU(_this.popObj) && isPopupElement && !clickedArgs.cancel && _this.overflowMode === 'Popup' &&\n clickedArgs.item && clickedArgs.item.type !== 'Input') {\n _this.popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n });\n }\n };\n Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n var popObj = this.popObj;\n if (isVisible(popObj.element)) {\n popupNav.classList.remove(CLS_TBARNAVACT);\n popObj.hide({ name: 'FadeOut', duration: 100 });\n }\n else {\n if (ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = true;\n popObj.position = { X: 'left', Y: 'top' };\n }\n if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n popObj.enableRtl = false;\n popObj.position = { X: 'right', Y: 'top' };\n }\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '0px';\n popObj.width = this.getToolbarPopupWidth(this.element);\n }\n popObj.dataBind();\n popObj.refreshPosition();\n popObj.element.style.top = this.getElementOffsetY() + 'px';\n popupNav.classList.add(CLS_TBARNAVACT);\n popObj.show({ name: 'FadeIn', duration: 100 });\n }\n };\n Toolbar.prototype.getToolbarPopupWidth = function (ele) {\n var eleStyles = window.getComputedStyle(ele);\n return parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Toolbar.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.renderControl();\n this.wireEvents();\n this.clickEvent = this.docEvent.bind(this);\n this.scrollEvent = this.docEvent.bind(this);\n this.renderComplete();\n if (this.isReact && this.portals && this.portals.length > 0) {\n this.renderReactTemplates(function () {\n _this.refreshOverflow();\n });\n }\n };\n Toolbar.prototype.initialize = function () {\n var width = formatUnit(this.width);\n var height = formatUnit(this.height);\n if (Browser.info.name !== 'msie' || this.height !== 'auto' || this.overflowMode === 'MultiRow') {\n setStyle(this.element, { 'height': height });\n }\n setStyle(this.element, { 'width': width });\n var ariaAttr = {\n 'role': 'toolbar', 'aria-disabled': 'false',\n 'aria-orientation': !this.isVertical ? 'horizontal' : 'vertical'\n };\n attributes(this.element, ariaAttr);\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Toolbar.prototype.renderControl = function () {\n var ele = this.element;\n this.trgtEle = (ele.children.length > 0) ? ele.querySelector('div') : null;\n this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n this.renderItems();\n this.renderLayout();\n };\n Toolbar.prototype.renderLayout = function () {\n this.renderOverflowMode();\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.popObj.element.childElementCount > 1 && this.checkPopupRefresh(this.element, this.popObj.element)) {\n this.popupRefresh(this.popObj.element, false);\n }\n this.separator();\n };\n Toolbar.prototype.itemsAlign = function (items, itemEleDom) {\n var innerItem;\n var innerPos;\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n for (var i = 0; i < items.length; i++) {\n innerItem = this.renderSubComponent(items[parseInt(i.toString(), 10)], i);\n if (this.tbarEle.indexOf(innerItem) === -1) {\n this.tbarEle.push(innerItem);\n }\n if (!this.tbarAlign) {\n this.tbarItemAlign(items[parseInt(i.toString(), 10)], itemEleDom, i);\n }\n innerPos = itemEleDom.querySelector('.e-toolbar-' + items[parseInt(i.toString(), 10)].align.toLowerCase());\n if (innerPos) {\n if (!(items[parseInt(i.toString(), 10)].showAlwaysInPopup && items[parseInt(i.toString(), 10)].overflow !== 'Show')) {\n this.tbarAlgEle[(items[parseInt(i.toString(), 10)].align + 's').toLowerCase()].push(innerItem);\n }\n innerPos.appendChild(innerItem);\n }\n else {\n itemEleDom.appendChild(innerItem);\n }\n }\n if (this.isReact) {\n var portals = 'portals';\n this.notify('render-react-toolbar-template', this[\"\" + portals]);\n this.renderReactTemplates();\n }\n };\n /**\n * @hidden\n * @returns {void}\n */\n Toolbar.prototype.changeOrientation = function () {\n var ele = this.element;\n if (this.isVertical) {\n ele.classList.remove(CLS_VERTICAL);\n this.isVertical = false;\n if (this.height === 'auto' || this.height === '100%') {\n ele.style.height = this.height;\n }\n ele.setAttribute('aria-orientation', 'horizontal');\n }\n else {\n ele.classList.add(CLS_VERTICAL);\n this.isVertical = true;\n ele.setAttribute('aria-orientation', 'vertical');\n setStyle(this.element, { 'height': formatUnit(this.height), 'width': formatUnit(this.width) });\n }\n this.destroyMode();\n this.refreshOverflow();\n };\n Toolbar.prototype.initScroll = function (element, innerItems) {\n if (!this.scrollModule && this.checkOverflow(element, innerItems[0])) {\n if (this.tbarAlign) {\n this.element.querySelector('.' + CLS_ITEMS + ' .' + CLS_TBARCENTER).removeAttribute('style');\n }\n if (this.isVertical) {\n this.scrollModule = new VScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n }\n else {\n this.scrollModule = new HScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n }\n if (this.cssClass) {\n addClass([innerItems[0]], this.cssClass.split(' '));\n }\n var scrollEle = this.scrollModule.element.querySelector('.' + CLS_HSCROLLBAR + ', .' + 'e-vscroll-bar');\n if (scrollEle) {\n scrollEle.removeAttribute('tabindex');\n }\n this.remove(this.scrollModule.element, CLS_TBARPOS);\n setStyle(this.element, { overflow: 'hidden' });\n }\n };\n Toolbar.prototype.itemWidthCal = function (items) {\n var _this = this;\n var width = 0;\n var style;\n [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n if (isVisible(el)) {\n style = window.getComputedStyle(el);\n width += _this.isVertical ? el.offsetHeight : el.offsetWidth;\n width += parseFloat(_this.isVertical ? style.marginTop : style.marginRight);\n width += parseFloat(_this.isVertical ? style.marginBottom : style.marginLeft);\n }\n });\n return width;\n };\n Toolbar.prototype.getScrollCntEle = function (innerItem) {\n var trgClass = (this.isVertical) ? '.e-vscroll-content' : '.e-hscroll-content';\n return innerItem.querySelector(trgClass);\n };\n Toolbar.prototype.checkOverflow = function (element, innerItem) {\n if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n return false;\n }\n var eleWidth = this.isVertical ? element.offsetHeight : element.offsetWidth;\n var itemWidth = this.isVertical ? innerItem.offsetHeight : innerItem.offsetWidth;\n if (this.tbarAlign || this.scrollModule || (eleWidth === itemWidth)) {\n itemWidth = this.itemWidthCal(this.scrollModule ? this.getScrollCntEle(innerItem) : innerItem);\n }\n var popNav = element.querySelector('.' + CLS_TBARNAV);\n var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n var navEleWidth = 0;\n if (popNav) {\n navEleWidth = this.isVertical ? popNav.offsetHeight : popNav.offsetWidth;\n }\n else if (scrollNav) {\n navEleWidth = this.isVertical ? (scrollNav.offsetHeight * (2)) : (scrollNav.offsetWidth * 2);\n }\n if (itemWidth > eleWidth - navEleWidth) {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * Refresh the whole Toolbar component without re-rendering.\n * - It is used to manually refresh the Toolbar overflow modes such as scrollable, popup, multi row, and extended.\n * - It will refresh the Toolbar component after loading items dynamically.\n *\n * @returns {void}.\n */\n Toolbar.prototype.refreshOverflow = function () {\n this.resize();\n };\n Toolbar.prototype.toolbarAlign = function (innerItems) {\n if (this.tbarAlign) {\n this.add(innerItems, CLS_TBARPOS);\n this.itemPositioning();\n }\n };\n Toolbar.prototype.renderOverflowMode = function () {\n var ele = this.element;\n var innerItems = ele.querySelector('.' + CLS_ITEMS);\n var priorityCheck = this.popupPriCount > 0;\n if (ele && ele.children.length > 0) {\n this.offsetWid = ele.offsetWidth;\n this.remove(this.element, 'e-toolpop');\n if (Browser.info.name === 'msie' && this.height === 'auto') {\n ele.style.height = '';\n }\n switch (this.overflowMode) {\n case 'Scrollable':\n if (isNOU(this.scrollModule)) {\n this.initScroll(ele, [].slice.call(ele.getElementsByClassName(CLS_ITEMS)));\n }\n break;\n case 'Popup':\n this.add(this.element, 'e-toolpop');\n if (this.tbarAlign) {\n this.removePositioning();\n }\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n this.setOverflowAttributes(ele);\n }\n this.toolbarAlign(innerItems);\n break;\n case 'MultiRow':\n this.add(innerItems, CLS_MULTIROW);\n if (this.checkOverflow(ele, innerItems) && this.tbarAlign) {\n this.removePositioning();\n this.add(innerItems, CLS_MULTIROWPOS);\n }\n if (ele.style.overflow === 'hidden') {\n ele.style.overflow = '';\n }\n if (Browser.info.name === 'msie' || ele.style.height !== 'auto') {\n ele.style.height = 'auto';\n }\n break;\n case 'Extended':\n this.add(this.element, CLS_EXTEANDABLE_TOOLBAR);\n if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.setOverflowAttributes(ele);\n }\n this.toolbarAlign(innerItems);\n }\n }\n };\n Toolbar.prototype.setOverflowAttributes = function (ele) {\n this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n var ariaAttr = {\n 'tabindex': '0', 'role': 'button', 'aria-haspopup': 'true',\n 'aria-label': 'overflow'\n };\n attributes(this.element.querySelector('.' + CLS_TBARNAV), ariaAttr);\n };\n Toolbar.prototype.separator = function () {\n var element = this.element;\n var eleItem = [].slice.call(element.querySelectorAll('.' + CLS_SEPARATOR));\n var multiVar = element.querySelector('.' + CLS_MULTIROW_SEPARATOR);\n var extendVar = element.querySelector('.' + CLS_EXTENDABLE_SEPARATOR);\n var eleInlineItem = this.overflowMode === 'MultiRow' ? multiVar : extendVar;\n if (eleInlineItem !== null) {\n if (this.overflowMode === 'MultiRow') {\n eleInlineItem.classList.remove(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleInlineItem.classList.remove(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n for (var i = 0; i <= eleItem.length - 1; i++) {\n if (eleItem[parseInt(i.toString(), 10)].offsetLeft < 30 && eleItem[parseInt(i.toString(), 10)].offsetLeft !== 0) {\n if (this.overflowMode === 'MultiRow') {\n eleItem[parseInt(i.toString(), 10)].classList.add(CLS_MULTIROW_SEPARATOR);\n }\n else if (this.overflowMode === 'Extended') {\n eleItem[parseInt(i.toString(), 10)].classList.add(CLS_EXTENDABLE_SEPARATOR);\n }\n }\n }\n };\n Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var vertical = this.isVertical;\n if (!innerNav) {\n this.createPopupIcon(ele);\n }\n innerNav = ele.querySelector('.' + CLS_TBARNAV);\n var innerNavDom = (vertical ? innerNav.offsetHeight : innerNav.offsetWidth);\n var eleWidth = ((vertical ? ele.offsetHeight : ele.offsetWidth) - (innerNavDom));\n this.element.classList.remove('e-rtl');\n setStyle(this.element, { direction: 'initial' });\n this.checkPriority(ele, innerEle, eleWidth, true);\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n this.element.style.removeProperty('direction');\n this.createPopup();\n };\n Toolbar.prototype.pushingPoppedEle = function (tbarObj, popupPri, ele, eleHeight, sepHeight) {\n var element = tbarObj.element;\n var poppedEle = [].slice.call(selectAll('.' + CLS_POPUP, element.querySelector('.' + CLS_ITEMS)));\n var nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n var nodeIndex = 0;\n var nodePri = 0;\n poppedEle.forEach(function (el, index) {\n nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n if (tbarObj.tbResize && nodes.length > index) {\n ele.insertBefore(el, nodes[parseInt(index.toString(), 10)]);\n ++nodePri;\n }\n else {\n ele.insertBefore(el, ele.children[nodes.length]);\n ++nodePri;\n }\n }\n else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (tbarObj.tbResize && el.classList.contains(CLS_POPOVERFLOW) && ele.children.length > 0 && nodes.length === 0) {\n ele.insertBefore(el, ele.firstChild);\n ++nodePri;\n }\n else if (el.classList.contains(CLS_POPOVERFLOW)) {\n popupPri.push(el);\n }\n else if (tbarObj.tbResize) {\n ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n ++nodeIndex;\n }\n else {\n ele.appendChild(el);\n }\n if (el.classList.contains(CLS_SEPARATOR)) {\n setStyle(el, { display: '', height: sepHeight + 'px' });\n }\n else {\n setStyle(el, { display: '', height: eleHeight + 'px' });\n }\n });\n popupPri.forEach(function (el) {\n ele.appendChild(el);\n });\n var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n for (var i = tbarEle.length - 1; i >= 0; i--) {\n var tbarElement = tbarEle[parseInt(i.toString(), 10)];\n if (tbarElement.classList.contains(CLS_SEPARATOR) && this.overflowMode !== 'Extended') {\n setStyle(tbarElement, { display: 'none' });\n }\n else {\n break;\n }\n }\n };\n Toolbar.prototype.createPopup = function () {\n var element = this.element;\n var sepHeight;\n var sepItem;\n if (this.overflowMode === 'Extended') {\n sepItem = element.querySelector('.' + CLS_SEPARATOR);\n sepHeight =\n (element.style.height === 'auto' || element.style.height === '') ? null : (sepItem && sepItem.offsetHeight);\n }\n var eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_POPUP + ')');\n var eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : (eleItem && eleItem.offsetHeight);\n var ele;\n var popupPri = [];\n if (select('#' + element.id + '_popup.' + CLS_POPUPCLASS, element)) {\n ele = select('#' + element.id + '_popup.' + CLS_POPUPCLASS, element);\n }\n else {\n var extendEle = this.createElement('div', {\n id: element.id + '_popup', className: CLS_POPUPCLASS + ' ' + CLS_EXTENDABLECLASS\n });\n var popupEle = this.createElement('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n ele = this.overflowMode === 'Extended' ? extendEle : popupEle;\n }\n this.pushingPoppedEle(this, popupPri, ele, eleHeight, sepHeight);\n this.popupInit(element, ele);\n };\n Toolbar.prototype.getElementOffsetY = function () {\n return (this.overflowMode === 'Extended' && window.getComputedStyle(this.element).getPropertyValue('box-sizing') === 'border-box' ?\n this.element.clientHeight : this.element.offsetHeight);\n };\n Toolbar.prototype.popupInit = function (element, ele) {\n if (!this.popObj) {\n element.appendChild(ele);\n if (this.cssClass) {\n addClass([ele], this.cssClass.split(' '));\n }\n setStyle(this.element, { overflow: '' });\n var popup = new Popup(null, {\n relateTo: this.element,\n offsetY: (this.isVertical) ? 0 : this.getElementOffsetY(),\n enableRtl: this.enableRtl,\n open: this.popupOpen.bind(this),\n close: this.popupClose.bind(this),\n collision: { Y: this.enableCollision ? 'flip' : 'none' },\n position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n });\n if (this.overflowMode === 'Extended') {\n popup.width = this.getToolbarPopupWidth(this.element);\n popup.offsetX = 0;\n }\n popup.appendTo(ele);\n document.addEventListener('scroll', this.clickEvent);\n document.addEventListener('click', this.scrollEvent);\n if (this.overflowMode !== 'Extended') {\n popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n }\n if (this.isVertical) {\n popup.element.style.visibility = 'hidden';\n }\n if (this.isExtendedOpen) {\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popupNav.firstElementChild, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n this.element.querySelector('.' + CLS_EXTENDABLECLASS).classList.add(CLS_POPUPOPEN);\n }\n else {\n popup.hide();\n }\n this.popObj = popup;\n }\n else if (this.overflowMode !== 'Extended') {\n var popupEle = this.popObj.element;\n setStyle(popupEle, { maxHeight: '', display: 'block' });\n setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n }\n };\n Toolbar.prototype.tbarPopupHandler = function (isOpen) {\n if (this.overflowMode === 'Extended') {\n if (isOpen) {\n this.add(this.element, CLS_EXTENDEDPOPOPEN);\n }\n else {\n this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Toolbar.prototype.popupOpen = function (e) {\n var popObj = this.popObj;\n if (!this.isVertical) {\n popObj.offsetY = this.getElementOffsetY();\n popObj.dataBind();\n }\n var popupEle = this.popObj.element;\n var toolEle = this.popObj.element.parentElement;\n var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n popupNav.setAttribute('aria-expanded', 'true');\n if (this.overflowMode === 'Extended') {\n popObj.element.style.minHeight = '';\n }\n else {\n setStyle(popObj.element, { height: 'auto', maxHeight: '' });\n popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n }\n var popupElePos = popupEle.offsetTop + popupEle.offsetHeight + calculatePosition(toolEle).top;\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.add(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n this.tbarPopupHandler(true);\n var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n if (!this.isVertical && ((window.innerHeight + scrollVal) < popupElePos) && (this.element.offsetTop < popupEle.offsetHeight)) {\n var overflowHeight = (popupEle.offsetHeight - ((popupElePos - window.innerHeight - scrollVal) + 5));\n popObj.height = overflowHeight + 'px';\n for (var i = 0; i <= popupEle.childElementCount; i++) {\n var ele = popupEle.children[parseInt(i.toString(), 10)];\n if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n overflowHeight = ele.offsetTop;\n break;\n }\n }\n if (this.overflowMode !== 'Extended') {\n setStyle(popObj.element, { maxHeight: overflowHeight + 'px' });\n }\n }\n else if (this.isVertical && this.overflowMode !== 'Extended') {\n var tbEleData = this.element.getBoundingClientRect();\n setStyle(popObj.element, { maxHeight: (tbEleData.top + this.element.offsetHeight) + 'px', bottom: 0, visibility: '' });\n }\n if (popObj) {\n var popupOffset = popupEle.getBoundingClientRect();\n if (popupOffset.right > document.documentElement.clientWidth && popupOffset.width > toolEle.getBoundingClientRect().width) {\n popObj.collision = { Y: 'none' };\n popObj.dataBind();\n }\n popObj.refreshPosition();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Toolbar.prototype.popupClose = function (e) {\n var element = this.element;\n var popupNav = element.querySelector('.' + CLS_TBARNAV);\n popupNav.setAttribute('aria-expanded', 'false');\n var popIcon = popupNav.firstElementChild;\n popupNav.classList.remove(CLS_TBARNAVACT);\n classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n this.tbarPopupHandler(false);\n };\n Toolbar.prototype.checkPriority = function (ele, inEle, eleWidth, pre) {\n var popPriority = this.popupPriCount > 0;\n var len = inEle.length;\n var eleWid = eleWidth;\n var eleOffset;\n var checkoffset;\n var sepCheck = 0;\n var itemCount = 0;\n var itemPopCount = 0;\n var checkClass = function (ele, val) {\n var rVal = false;\n val.forEach(function (cls) {\n if (ele.classList.contains(cls)) {\n rVal = true;\n }\n });\n return rVal;\n };\n for (var i = len - 1; i >= 0; i--) {\n var mrgn = void 0;\n var compuStyle = window.getComputedStyle(inEle[parseInt(i.toString(), 10)]);\n if (this.isVertical) {\n mrgn = parseFloat((compuStyle).marginTop);\n mrgn += parseFloat((compuStyle).marginBottom);\n }\n else {\n mrgn = parseFloat((compuStyle).marginRight);\n mrgn += parseFloat((compuStyle).marginLeft);\n }\n var fstEleCheck = inEle[parseInt(i.toString(), 10)] === this.tbarEle[0];\n if (fstEleCheck) {\n this.tbarEleMrgn = mrgn;\n }\n eleOffset = this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight : inEle[parseInt(i.toString(), 10)].offsetWidth;\n var eleWid_1 = fstEleCheck ? (eleOffset + mrgn) : eleOffset;\n if (checkClass(inEle[parseInt(i.toString(), 10)], [CLS_POPPRI]) && popPriority) {\n inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n if (this.isVertical) {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minHeight: eleWid_1 + 'px' });\n }\n else {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minWidth: eleWid_1 + 'px' });\n }\n itemPopCount++;\n }\n if (this.isVertical) {\n checkoffset =\n (inEle[parseInt(i.toString(), 10)].offsetTop + inEle[parseInt(i.toString(), 10)].offsetHeight + mrgn) > eleWidth;\n }\n else {\n checkoffset =\n (inEle[parseInt(i.toString(), 10)].offsetLeft + inEle[parseInt(i.toString(), 10)].offsetWidth + mrgn) > eleWidth;\n }\n if (checkoffset) {\n if (inEle[parseInt(i.toString(), 10)].classList.contains(CLS_SEPARATOR)) {\n if (this.overflowMode === 'Extended') {\n var sepEle = inEle[parseInt(i.toString(), 10)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n itemPopCount++;\n }\n itemCount++;\n }\n else if (this.overflowMode === 'Popup') {\n if (sepCheck > 0 && itemCount === itemPopCount) {\n var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n setStyle(sepEle, { display: 'none' });\n }\n }\n sepCheck++;\n itemCount = 0;\n itemPopCount = 0;\n }\n }\n else {\n itemCount++;\n }\n if (inEle[parseInt(i.toString(), 10)].classList.contains(CLS_TBAROVERFLOW) && pre) {\n eleWidth -= ((this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight :\n inEle[parseInt(i.toString(), 10)].offsetWidth) + (mrgn));\n }\n else if (!checkClass(inEle[parseInt(i.toString(), 10)], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n if (this.isVertical) {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minHeight: eleWid_1 + 'px' });\n }\n else {\n setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minWidth: eleWid_1 + 'px' });\n }\n itemPopCount++;\n }\n else {\n eleWidth -= ((this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight :\n inEle[parseInt(i.toString(), 10)].offsetWidth) + (mrgn));\n }\n }\n }\n if (pre) {\n var popedEle = selectAll('.' + CLS_ITEM + ':not(.' + CLS_POPUP + ')', this.element);\n this.checkPriority(ele, popedEle, eleWid, false);\n }\n };\n Toolbar.prototype.createPopupIcon = function (element) {\n var id = element.id.concat('_nav');\n var className = 'e-' + element.id.concat('_nav ' + CLS_POPUPNAV);\n className = this.overflowMode === 'Extended' ? className + ' ' + CLS_EXTENDPOPUP : className;\n var nav = this.createElement('div', { id: id, className: className });\n if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n nav.classList.add('e-ie-align');\n }\n var navItem = this.createElement('div', { className: CLS_POPUPDOWN + ' e-icons' });\n nav.appendChild(navItem);\n nav.setAttribute('tabindex', '0');\n nav.setAttribute('role', 'button');\n element.appendChild(nav);\n };\n // eslint-disable-next-line max-len\n Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig, eleStyles) {\n var ignoreCount = ig;\n var popEle = this.popObj.element;\n var query = '.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_TBAROVERFLOW + ')';\n var priEleCnt = selectAll('.' + CLS_POPUP + ':not(.' + CLS_TBAROVERFLOW + ')', popEle).length;\n var checkClass = function (ele, val) {\n return ele.classList.contains(val);\n };\n if (selectAll(query, inEle).length === 0) {\n var eleSep = inEle.children[indx - (indx - sepPri) - 1];\n var ignoreCheck = (!isNOU(eleSep) && checkClass(eleSep, CLS_TBARIGNORE));\n if ((!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep)) || ignoreCheck) {\n eleSep.style.display = 'unset';\n var eleSepWidth = eleSep.offsetWidth + (parseFloat(window.getComputedStyle(eleSep).marginRight) * 2);\n var prevSep = eleSep.previousElementSibling;\n if ((elWid + eleSepWidth) < wid || des) {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n if (!isNOU(prevSep)) {\n prevSep.style.display = '';\n }\n }\n else {\n setStyle(el, eleStyles);\n if (prevSep.classList.contains(CLS_SEPARATOR)) {\n prevSep.style.display = 'none';\n }\n }\n eleSep.style.display = '';\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n }\n }\n else {\n inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - priEleCnt]);\n }\n };\n Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n var _this = this;\n var ele = this.element;\n var isVer = this.isVertical;\n var innerEle = ele.querySelector('.' + CLS_ITEMS);\n var popNav = ele.querySelector('.' + CLS_TBARNAV);\n if (isNOU(popNav)) {\n return;\n }\n innerEle.removeAttribute('style');\n popupEle.style.display = 'block';\n var dimension;\n if (isVer) {\n dimension = ele.offsetHeight - (popNav.offsetHeight + innerEle.offsetHeight);\n }\n else {\n dimension = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n }\n var popupEleWidth = 0;\n [].slice.call(popupEle.children).forEach(function (el) {\n popupEleWidth += _this.popupEleWidth(el);\n setStyle(el, { 'position': '' });\n });\n if ((dimension + (isVer ? popNav.offsetHeight : popNav.offsetWidth)) > (popupEleWidth) && this.popupPriCount === 0) {\n destroy = true;\n }\n this.popupEleRefresh(dimension, popupEle, destroy);\n popupEle.style.display = '';\n if (popupEle.children.length === 0 && popNav && this.popObj) {\n detach(popNav);\n popNav = null;\n this.popObj.destroy();\n detach(this.popObj.element);\n this.popObj = null;\n }\n };\n Toolbar.prototype.ignoreEleFetch = function (index, innerEle) {\n var ignoreEle = [].slice.call(innerEle.querySelectorAll('.' + CLS_TBARIGNORE));\n var ignoreInx = [];\n var count = 0;\n if (ignoreEle.length > 0) {\n ignoreEle.forEach(function (ele) {\n ignoreInx.push([].slice.call(innerEle.children).indexOf(ele));\n });\n }\n else {\n return 0;\n }\n ignoreInx.forEach(function (val) {\n if (val <= index) {\n count++;\n }\n });\n return count;\n };\n Toolbar.prototype.checkPopupRefresh = function (root, popEle) {\n popEle.style.display = 'block';\n var elWid = this.popupEleWidth(popEle.firstElementChild);\n popEle.firstElementChild.style.removeProperty('Position');\n var tbarWidth = root.offsetWidth - root.querySelector('.' + CLS_TBARNAV).offsetWidth;\n var tbarItemsWid = root.querySelector('.' + CLS_ITEMS).offsetWidth;\n popEle.style.removeProperty('display');\n if (tbarWidth > (elWid + tbarItemsWid)) {\n return true;\n }\n return false;\n };\n Toolbar.prototype.popupEleWidth = function (el) {\n el.style.position = 'absolute';\n var elWidth = this.isVertical ? el.offsetHeight : el.offsetWidth;\n var btnText = el.querySelector('.' + CLS_TBARBTNTEXT);\n if (el.classList.contains('e-tbtn-align') || el.classList.contains(CLS_TBARTEXT)) {\n var btn = el.children[0];\n if (!isNOU(btnText) && el.classList.contains(CLS_TBARTEXT)) {\n btnText.style.display = 'none';\n }\n else if (!isNOU(btnText) && el.classList.contains(CLS_POPUPTEXT)) {\n btnText.style.display = 'block';\n }\n btn.style.minWidth = '0%';\n elWidth = parseFloat(!this.isVertical ? el.style.minWidth : el.style.minHeight);\n btn.style.minWidth = '';\n btn.style.minHeight = '';\n if (!isNOU(btnText)) {\n btnText.style.display = '';\n }\n }\n return elWidth;\n };\n Toolbar.prototype.popupEleRefresh = function (width, popupEle, destroy) {\n var popPriority = this.popupPriCount > 0;\n var eleSplice = this.tbarEle;\n var priEleCnt;\n var index;\n var innerEle = this.element.querySelector('.' + CLS_ITEMS);\n var ignoreCount = 0;\n var _loop_1 = function (el) {\n if (el.classList.contains(CLS_POPPRI) && popPriority && !destroy) {\n return \"continue\";\n }\n var elWidth = this_1.popupEleWidth(el);\n if (el === this_1.tbarEle[0]) {\n elWidth += this_1.tbarEleMrgn;\n }\n el.style.position = '';\n if (elWidth < width || destroy) {\n var inlineStyles = {\n minWidth: el.style.minWidth, height: el.style.height,\n minHeight: el.style.minHeight\n };\n setStyle(el, { minWidth: '', height: '', minHeight: '' });\n if (!el.classList.contains(CLS_POPOVERFLOW)) {\n el.classList.remove(CLS_POPUP);\n }\n index = this_1.tbarEle.indexOf(el);\n if (this_1.tbarAlign) {\n var pos = this_1.items[parseInt(index.toString(), 10)].align;\n index = this_1.tbarAlgEle[(pos + 's').toLowerCase()].indexOf(el);\n eleSplice = this_1.tbarAlgEle[(pos + 's').toLowerCase()];\n innerEle = this_1.element.querySelector('.' + CLS_ITEMS + ' .' + 'e-toolbar-' + pos.toLowerCase());\n }\n var sepBeforePri_1 = 0;\n if (this_1.overflowMode !== 'Extended') {\n eleSplice.slice(0, index).forEach(function (el) {\n if (el.classList.contains(CLS_TBAROVERFLOW) || el.classList.contains(CLS_SEPARATOR)) {\n if (el.classList.contains(CLS_SEPARATOR)) {\n el.style.display = '';\n width -= el.offsetWidth;\n }\n sepBeforePri_1++;\n }\n });\n }\n ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n if (el.classList.contains(CLS_TBAROVERFLOW)) {\n this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount, inlineStyles);\n width -= el.offsetWidth;\n }\n else if (index === 0) {\n innerEle.insertBefore(el, innerEle.firstChild);\n width -= el.offsetWidth;\n }\n else {\n priEleCnt = selectAll('.' + CLS_TBAROVERFLOW, this_1.popObj.element).length;\n innerEle.insertBefore(el, innerEle.children[(index + ignoreCount) - priEleCnt]);\n width -= el.offsetWidth;\n }\n el.style.height = '';\n }\n else {\n return \"break\";\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n var el = _a[_i];\n var state_1 = _loop_1(el);\n if (state_1 === \"break\")\n break;\n }\n var checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n if (checkOverflow && !destroy) {\n this.renderOverflowMode();\n }\n };\n Toolbar.prototype.removePositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n this.remove(item, CLS_TBARPOS);\n var innerItem = [].slice.call(item.childNodes);\n innerItem[1].removeAttribute('style');\n innerItem[2].removeAttribute('style');\n };\n Toolbar.prototype.refreshPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n this.add(item, CLS_TBARPOS);\n this.itemPositioning();\n };\n Toolbar.prototype.itemPositioning = function () {\n var item = this.element.querySelector('.' + CLS_ITEMS);\n var margin;\n if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n return;\n }\n var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n var innerItem;\n if (this.scrollModule) {\n var trgClass = (this.isVertical) ? CLS_VSCROLLCNT : CLS_HSCROLLCNT;\n innerItem = [].slice.call(item.querySelector('.' + trgClass).children);\n }\n else {\n innerItem = [].slice.call(item.childNodes);\n }\n if (this.isVertical) {\n margin = innerItem[0].offsetHeight + innerItem[2].offsetHeight;\n }\n else {\n margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n }\n var tbarWid = this.isVertical ? this.element.offsetHeight : this.element.offsetWidth;\n if (popupNav) {\n tbarWid -= (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth);\n var popWid = (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth) + 'px';\n innerItem[2].removeAttribute('style');\n if (this.isVertical) {\n if (this.enableRtl) {\n innerItem[2].style.top = popWid;\n }\n else {\n innerItem[2].style.bottom = popWid;\n }\n }\n else {\n if (this.enableRtl) {\n innerItem[2].style.left = popWid;\n }\n else {\n innerItem[2].style.right = popWid;\n }\n }\n }\n if (tbarWid <= margin) {\n return;\n }\n var value = (((tbarWid - margin)) - (!this.isVertical ? innerItem[1].offsetWidth : innerItem[1].offsetHeight)) / 2;\n innerItem[1].removeAttribute('style');\n var mrgn = ((!this.isVertical ? innerItem[0].offsetWidth : innerItem[0].offsetHeight) + value) + 'px';\n if (this.isVertical) {\n if (this.enableRtl) {\n innerItem[1].style.marginBottom = mrgn;\n }\n else {\n innerItem[1].style.marginTop = mrgn;\n }\n }\n else {\n if (this.enableRtl) {\n innerItem[1].style.marginRight = mrgn;\n }\n else {\n innerItem[1].style.marginLeft = mrgn;\n }\n }\n };\n Toolbar.prototype.tbarItemAlign = function (item, itemEle, pos) {\n var _this = this;\n if (item.showAlwaysInPopup && item.overflow !== 'Show') {\n return;\n }\n var alignDiv = [];\n alignDiv.push(this.createElement('div', { className: CLS_TBARLEFT }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARCENTER }));\n alignDiv.push(this.createElement('div', { className: CLS_TBARRIGHT }));\n if (pos === 0 && item.align !== 'Left') {\n alignDiv.forEach(function (ele) {\n itemEle.appendChild(ele);\n });\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n else if (item.align !== 'Left') {\n var alignEle = itemEle.childNodes;\n var leftAlign_1 = alignDiv[0];\n [].slice.call(alignEle).forEach(function (el) {\n _this.tbarAlgEle.lefts.push(el);\n leftAlign_1.appendChild(el);\n });\n itemEle.appendChild(leftAlign_1);\n itemEle.appendChild(alignDiv[1]);\n itemEle.appendChild(alignDiv[2]);\n this.tbarAlign = true;\n this.add(itemEle, CLS_TBARPOS);\n }\n };\n Toolbar.prototype.ctrlTemplate = function () {\n var _this = this;\n this.ctrlTem = this.trgtEle.cloneNode(true);\n this.add(this.trgtEle, CLS_ITEMS);\n this.tbarEle = [];\n var innerEle = [].slice.call(this.trgtEle.children);\n innerEle.forEach(function (ele) {\n if (ele.tagName === 'DIV') {\n _this.tbarEle.push(ele);\n if (!isNOU(ele.firstElementChild)) {\n ele.firstElementChild.setAttribute('aria-disabled', 'false');\n }\n _this.add(ele, CLS_ITEM);\n }\n });\n };\n Toolbar.prototype.renderItems = function () {\n var ele = this.element;\n var items = this.items;\n if (this.trgtEle != null) {\n this.ctrlTemplate();\n }\n else if (ele && items.length > 0) {\n var itemEleDom = void 0;\n if (ele && ele.children.length > 0) {\n itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n }\n if (!itemEleDom) {\n itemEleDom = this.createElement('div', { className: CLS_ITEMS });\n }\n this.itemsAlign(items, itemEleDom);\n ele.appendChild(itemEleDom);\n }\n };\n Toolbar.prototype.setAttr = function (attr, element) {\n var key = Object.keys(attr);\n var keyVal;\n for (var i = 0; i < key.length; i++) {\n keyVal = key[parseInt(i.toString(), 10)];\n if (keyVal === 'class') {\n this.add(element, attr[\"\" + keyVal]);\n }\n else {\n element.setAttribute(keyVal, attr[\"\" + keyVal]);\n }\n }\n };\n /**\n * Enables or disables the specified Toolbar item.\n *\n * @param {number|HTMLElement|NodeList} items - DOM element or an array of items to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the command should be enabled or disabled.\n * By default, `isEnable` is set to true.\n * @returns {void}.\n */\n Toolbar.prototype.enableItems = function (items, isEnable) {\n var elements = items;\n var len = elements.length;\n var ele;\n if (isNOU(isEnable)) {\n isEnable = true;\n }\n var enable = function (isEnable, ele) {\n if (isEnable) {\n ele.classList.remove(CLS_DISABLE);\n if (!isNOU(ele.firstElementChild)) {\n ele.firstElementChild.setAttribute('aria-disabled', 'false');\n }\n }\n else {\n ele.classList.add(CLS_DISABLE);\n if (!isNOU(ele.firstElementChild)) {\n ele.firstElementChild.setAttribute('aria-disabled', 'true');\n }\n }\n };\n if (!isNOU(len) && len >= 1) {\n for (var a = 0, element = [].slice.call(elements); a < len; a++) {\n var itemElement = element[parseInt(a.toString(), 10)];\n if (typeof (itemElement) === 'number') {\n ele = this.getElementByIndex(itemElement);\n if (isNOU(ele)) {\n return;\n }\n else {\n elements[parseInt(a.toString(), 10)] = ele;\n }\n }\n else {\n ele = itemElement;\n }\n enable(isEnable, ele);\n }\n if (isEnable) {\n removeClass(elements, CLS_DISABLE);\n }\n else {\n addClass(elements, CLS_DISABLE);\n }\n }\n else {\n if (typeof (elements) === 'number') {\n ele = this.getElementByIndex(elements);\n if (isNOU(ele)) {\n return;\n }\n }\n else {\n ele = items;\n }\n enable(isEnable, ele);\n }\n };\n Toolbar.prototype.getElementByIndex = function (index) {\n if (this.tbarEle[parseInt(index.toString(), 10)]) {\n return this.tbarEle[parseInt(index.toString(), 10)];\n }\n return null;\n };\n /**\n * Adds new items to the Toolbar that accepts an array as Toolbar items.\n *\n * @param {ItemModel[]} items - DOM element or an array of items to be added to the Toolbar.\n * @param {number} index - Number value that determines where the command is to be added. By default, index is 0.\n * @returns {void}.\n */\n Toolbar.prototype.addItems = function (items, index) {\n var innerItems;\n this.extendedOpen();\n var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n if (isNOU(itemsDiv)) {\n this.itemsRerender(items);\n return;\n }\n var innerEle;\n var itemAgn = 'Left';\n if (isNOU(index)) {\n index = 0;\n }\n items.forEach(function (e) {\n if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n itemAgn = e.align;\n }\n });\n for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n var item = items_1[_i];\n if (isNOU(item.type)) {\n item.type = 'Button';\n }\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n item.align = itemAgn;\n innerEle = this.renderSubComponent(item, index);\n if (this.tbarEle.length >= index && innerItems.length >= 0) {\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n var ele = void 0;\n if (!this.tbarAlign && itemAgn !== 'Left') {\n this.tbarItemAlign(item, itemsDiv, 1);\n this.tbarAlign = true;\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[parseInt(algIndex.toString(), 10)];\n ele.appendChild(innerEle);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n this.refreshPositioning();\n }\n else if (this.tbarAlign) {\n ele = closest(innerItems[0], '.' + CLS_ITEMS).children[parseInt(algIndex.toString(), 10)];\n ele.insertBefore(innerEle, ele.children[parseInt(index.toString(), 10)]);\n this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n this.refreshPositioning();\n }\n else if (innerItems.length === 0) {\n innerItems = selectAll('.' + CLS_ITEMS, this.element);\n innerItems[0].appendChild(innerEle);\n }\n else {\n innerItems[0].parentNode.insertBefore(innerEle, innerItems[parseInt(index.toString(), 10)]);\n }\n this.items.splice(index, 0, item);\n if (item.template) {\n this.tbarEle.splice(this.tbarEle.length - 1, 1);\n }\n this.tbarEle.splice(index, 0, innerEle);\n index++;\n this.offsetWid = itemsDiv.offsetWidth;\n }\n }\n itemsDiv.style.width = '';\n this.renderOverflowMode();\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * Removes the items from the Toolbar. Acceptable arguments are index of item/HTMLElement/node list.\n *\n * @param {number|HTMLElement|NodeList|HTMLElement[]} args\n * Index or DOM element or an Array of item which is to be removed from the Toolbar.\n * @returns {void}.\n */\n Toolbar.prototype.removeItems = function (args) {\n var elements = args;\n var index;\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (typeof (elements) === 'number') {\n index = parseInt(args.toString(), 10);\n this.removeItemByIndex(index, innerItems);\n }\n else {\n if (elements && elements.length > 1) {\n for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n var ele = _a[_i];\n index = this.tbarEle.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n innerItems = selectAll('.' + CLS_ITEM, this.element);\n }\n }\n else {\n var ele = (elements && elements.length && elements.length === 1) ? elements[0] : args;\n index = innerItems.indexOf(ele);\n this.removeItemByIndex(index, innerItems);\n }\n }\n this.resize();\n };\n Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n if (this.tbarEle[parseInt(index.toString(), 10)] && innerItems[parseInt(index.toString(), 10)]) {\n var eleIdx = this.tbarEle.indexOf(innerItems[parseInt(index.toString(), 10)]);\n if (this.tbarAlign) {\n var indexAgn = this.tbarAlgEle[(this.items[parseInt(eleIdx.toString(), 10)].align + 's').toLowerCase()].indexOf(this.tbarEle[parseInt(eleIdx.toString(), 10)]);\n this.tbarAlgEle[(this.items[parseInt(eleIdx.toString(), 10)].align + 's').toLowerCase()].splice(parseInt(indexAgn.toString(), 10), 1);\n }\n if (this.isReact) {\n this.clearToolbarTemplate(innerItems[parseInt(index.toString(), 10)]);\n }\n var btnItem = innerItems[parseInt(index.toString(), 10)].querySelector('.e-control.e-btn');\n if (!isNOU(btnItem) && !isNOU(btnItem.ej2_instances[0]) && !(btnItem.ej2_instances[0].isDestroyed)) {\n btnItem.ej2_instances[0].destroy();\n }\n detach(innerItems[parseInt(index.toString(), 10)]);\n this.items.splice(eleIdx, 1);\n this.tbarEle.splice(eleIdx, 1);\n }\n };\n Toolbar.prototype.templateRender = function (templateProp, innerEle, item, index) {\n var itemType = item.type;\n var eleObj = templateProp;\n var isComponent;\n if (typeof (templateProp) === 'object') {\n isComponent = typeof (eleObj.appendTo) === 'function';\n }\n if (typeof (templateProp) === 'string' || !isComponent) {\n var templateFn = void 0;\n var val = templateProp;\n var regEx = new RegExp(/<(?=.*? .*?\\/ ?>|br|hr|input|!--|wbr)[a-z]+.*?>|<([a-z]+).*?<\\/\\1>/i);\n val = (typeof (templateProp) === 'string') ? templateProp.trim() : templateProp;\n try {\n if (typeof (templateProp) === 'object' && !isNOU(templateProp.tagName)) {\n innerEle.appendChild(templateProp);\n }\n else if (typeof (templateProp) === 'string' && regEx.test(val)) {\n innerEle.innerHTML = val;\n }\n else if (document.querySelectorAll(val).length) {\n var ele = document.querySelector(val);\n var tempStr = ele.outerHTML.trim();\n innerEle.appendChild(ele);\n ele.style.display = '';\n if (!isNOU(tempStr)) {\n this.tempId.push(val);\n }\n }\n else {\n templateFn = templateCompiler(val);\n }\n }\n catch (e) {\n templateFn = templateCompiler(val);\n }\n var tempArray = void 0;\n if (!isNOU(templateFn)) {\n var toolbarTemplateID = this.element.id + index + '_template';\n tempArray = templateFn({}, this, 'template', toolbarTemplateID, this.isStringTemplate, undefined, undefined, this.root);\n }\n if (!isNOU(tempArray) && tempArray.length > 0) {\n [].slice.call(tempArray).forEach(function (ele) {\n if (!isNOU(ele.tagName)) {\n ele.style.display = '';\n }\n innerEle.appendChild(ele);\n });\n }\n }\n else if (itemType === 'Input') {\n var ele = this.createElement('input');\n if (item.id) {\n ele.id = item.id;\n }\n else {\n ele.id = getUniqueID('tbr-ipt');\n }\n innerEle.appendChild(ele);\n eleObj.appendTo(ele);\n }\n this.add(innerEle, CLS_TEMPLATE);\n var firstChild = innerEle.firstElementChild;\n if (!isNOU(firstChild)) {\n firstChild.setAttribute('tabindex', isNOU(firstChild.getAttribute('tabIndex')) ? '-1' : this.getDataTabindex(firstChild));\n firstChild.setAttribute('data-tabindex', isNOU(firstChild.getAttribute('tabIndex')) ? '-1' : this.getDataTabindex(firstChild));\n }\n this.tbarEle.push(innerEle);\n };\n Toolbar.prototype.buttonRendering = function (item, innerEle) {\n var dom = this.createElement('button', { className: CLS_TBARBTN });\n dom.setAttribute('type', 'button');\n var textStr = item.text;\n var iconCss;\n var iconPos;\n if (item.id) {\n dom.id = item.id;\n }\n else {\n dom.id = getUniqueID('e-tbr-btn');\n }\n var btnTxt = this.createElement('span', { className: 'e-tbar-btn-text' });\n if (textStr) {\n btnTxt.innerHTML = this.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(textStr) : textStr;\n dom.appendChild(btnTxt);\n dom.classList.add('e-tbtn-txt');\n }\n else {\n this.add(innerEle, 'e-tbtn-align');\n }\n if (item.prefixIcon || item.suffixIcon) {\n if ((item.prefixIcon && item.suffixIcon) || item.prefixIcon) {\n iconCss = item.prefixIcon + ' e-icons';\n iconPos = 'Left';\n }\n else {\n iconCss = item.suffixIcon + ' e-icons';\n iconPos = 'Right';\n }\n }\n var btnObj = new Button({ iconCss: iconCss, iconPosition: iconPos });\n btnObj.createElement = this.createElement;\n btnObj.appendTo(dom);\n if (item.width) {\n setStyle(dom, { 'width': formatUnit(item.width) });\n }\n return dom;\n };\n Toolbar.prototype.renderSubComponent = function (item, index) {\n var dom;\n var innerEle = this.createElement('div', { className: CLS_ITEM });\n var tempDom = this.createElement('div', {\n innerHTML: this.enableHtmlSanitizer && !isNOU(item.tooltipText) ?\n SanitizeHtmlHelper.sanitize(item.tooltipText) : item.tooltipText\n });\n if (!this.tbarEle) {\n this.tbarEle = [];\n }\n if (item.htmlAttributes) {\n this.setAttr(item.htmlAttributes, innerEle);\n }\n if (item.tooltipText) {\n innerEle.setAttribute('title', tempDom.textContent);\n }\n if (item.cssClass) {\n innerEle.className = innerEle.className + ' ' + item.cssClass;\n }\n if (item.template) {\n this.templateRender(item.template, innerEle, item, index);\n }\n else {\n switch (item.type) {\n case 'Button':\n dom = this.buttonRendering(item, innerEle);\n dom.setAttribute('tabindex', isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString());\n dom.setAttribute('data-tabindex', isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString());\n dom.setAttribute('aria-label', (item.text || item.tooltipText));\n dom.setAttribute('aria-disabled', 'false');\n innerEle.appendChild(dom);\n innerEle.addEventListener('click', this.itemClick.bind(this));\n break;\n case 'Separator':\n this.add(innerEle, CLS_SEPARATOR);\n break;\n }\n }\n if (item.showTextOn) {\n var sTxt = item.showTextOn;\n if (sTxt === 'Toolbar') {\n this.add(innerEle, CLS_POPUPTEXT);\n this.add(innerEle, 'e-tbtn-align');\n }\n else if (sTxt === 'Overflow') {\n this.add(innerEle, CLS_TBARTEXT);\n }\n }\n if (item.overflow) {\n var overflow = item.overflow;\n if (overflow === 'Show') {\n this.add(innerEle, CLS_TBAROVERFLOW);\n }\n else if (overflow === 'Hide') {\n if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPOVERFLOW);\n }\n }\n }\n if (item.overflow !== 'Show' && item.showAlwaysInPopup && !innerEle.classList.contains(CLS_SEPARATOR)) {\n this.add(innerEle, CLS_POPPRI);\n this.popupPriCount++;\n }\n if (item.disabled) {\n this.add(innerEle, CLS_DISABLE);\n }\n if (item.visible === false) {\n this.add(innerEle, CLS_HIDDEN);\n }\n return innerEle;\n };\n Toolbar.prototype.getDataTabindex = function (ele) {\n return isNOU(ele.getAttribute('data-tabindex')) ? '-1' : ele.getAttribute('data-tabindex');\n };\n Toolbar.prototype.itemClick = function (e) {\n this.activeEleSwitch(e.currentTarget);\n };\n Toolbar.prototype.activeEleSwitch = function (ele) {\n this.activeEleRemove(ele.firstElementChild);\n this.activeEle.focus();\n };\n Toolbar.prototype.activeEleRemove = function (curEle) {\n var previousEle = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n if (!isNOU(this.activeEle)) {\n this.activeEle.setAttribute('tabindex', this.getDataTabindex(this.activeEle));\n if (previousEle) {\n previousEle.removeAttribute('tabindex');\n }\n previousEle = this.activeEle;\n }\n this.activeEle = curEle;\n if (this.getDataTabindex(this.activeEle) === '-1') {\n if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n if (!isNOU(this.element.querySelector('.e-hor-nav')) && this.element.querySelector('.e-hor-nav').classList.contains('e-nav-active')) {\n this.updateTabIndex('0');\n var tabindexValue = this.getDataTabindex(previousEle) === '-1' ? '0' : this.getDataTabindex(previousEle);\n previousEle.setAttribute('tabindex', tabindexValue);\n }\n else {\n this.updateTabIndex('-1');\n }\n curEle.removeAttribute('tabindex');\n }\n else {\n var tabIndex = parseInt(this.getDataTabindex(this.activeEle), 10) + 1;\n this.activeEle.setAttribute('tabindex', tabIndex.toString());\n }\n }\n };\n Toolbar.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - Returns the module name as string.\n * @private\n */\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n Toolbar.prototype.itemsRerender = function (newProp) {\n this.items = this.tbarItemsCol;\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n this.destroyMode();\n this.destroyItems();\n this.items = newProp;\n this.tbarItemsCol = this.items;\n this.renderItems();\n this.renderOverflowMode();\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n Toolbar.prototype.resize = function () {\n var ele = this.element;\n this.tbResize = true;\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n if (this.popObj && this.overflowMode === 'Popup') {\n this.popObj.hide();\n }\n var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n if (!checkOverflow) {\n this.destroyScroll();\n var multirowele = ele.querySelector('.' + CLS_ITEMS);\n if (!isNOU(multirowele)) {\n this.remove(multirowele, CLS_MULTIROWPOS);\n if (this.tbarAlign) {\n this.add(multirowele, CLS_TBARPOS);\n }\n }\n }\n if (checkOverflow && this.scrollModule && (this.offsetWid === ele.offsetWidth)) {\n return;\n }\n if (this.offsetWid > ele.offsetWidth || checkOverflow) {\n this.renderOverflowMode();\n }\n if (this.popObj) {\n if (this.overflowMode === 'Extended') {\n this.popObj.width = this.getToolbarPopupWidth(this.element);\n }\n if (this.tbarAlign) {\n this.removePositioning();\n }\n this.popupRefresh(this.popObj.element, false);\n if (this.tbarAlign) {\n this.refreshPositioning();\n }\n }\n if (this.element.querySelector('.' + CLS_HSCROLLBAR)) {\n this.scrollStep = this.element.querySelector('.' + CLS_HSCROLLBAR).offsetWidth;\n }\n this.offsetWid = ele.offsetWidth;\n this.tbResize = false;\n this.separator();\n };\n Toolbar.prototype.orientationChange = function () {\n var _this = this;\n setTimeout(function () {\n _this.resize();\n }, 500);\n };\n Toolbar.prototype.extendedOpen = function () {\n var sib = this.element.querySelector('.' + CLS_EXTENDABLECLASS);\n if (this.overflowMode === 'Extended' && sib) {\n this.isExtendedOpen = sib.classList.contains(CLS_POPUPOPEN);\n }\n };\n Toolbar.prototype.updateHideEleTabIndex = function (ele, isHidden, isElement, eleIndex, innerItems) {\n if (isElement) {\n eleIndex = innerItems.indexOf(ele);\n }\n var nextEle = innerItems[++eleIndex];\n while (nextEle) {\n var skipEle = this.eleContains(nextEle);\n if (!skipEle) {\n var dataTabIndex = nextEle.firstElementChild.getAttribute('data-tabindex');\n if (isHidden && dataTabIndex === '-1') {\n nextEle.firstElementChild.setAttribute('tabindex', '0');\n }\n else if (dataTabIndex !== nextEle.firstElementChild.getAttribute('tabindex')) {\n nextEle.firstElementChild.setAttribute('tabindex', dataTabIndex);\n }\n break;\n }\n nextEle = innerItems[++eleIndex];\n }\n };\n Toolbar.prototype.clearToolbarTemplate = function (templateEle) {\n if (this.registeredTemplate && this.registeredTemplate[\"\" + 'template']) {\n var registeredTemplates = this.registeredTemplate;\n for (var index = 0; index < registeredTemplates[\"\" + 'template'].length; index++) {\n var registeredItem = registeredTemplates[\"\" + 'template'][parseInt(index.toString(), 10)].rootNodes[0];\n var closestItem = closest(registeredItem, '.' + CLS_ITEM);\n if (!isNOU(closestItem) && closestItem === templateEle) {\n this.clearTemplate(['template'], [registeredTemplates[\"\" + 'template'][parseInt(index.toString(), 10)]]);\n break;\n }\n }\n }\n else if (this.portals && this.portals.length > 0) {\n var portals = this.portals;\n for (var index = 0; index < portals.length; index++) {\n var portalItem = portals[parseInt(index.toString(), 10)];\n var closestItem = closest(portalItem.containerInfo, '.' + CLS_ITEM);\n if (!isNOU(closestItem) && closestItem === templateEle) {\n this.clearTemplate(['template'], index);\n break;\n }\n }\n }\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n *\n * @param {ToolbarModel} newProp - It contains new value of the data.\n * @param {ToolbarModel} oldProp - It contains old value of the data.\n * @returns {void}\n * @private\n */\n Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n var tEle = this.element;\n this.extendedOpen();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'items':\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProb = Object.keys(newProp.items);\n for (var i = 0; i < changedProb.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[parseInt(i.toString(), 10)], 10);\n var property = Object.keys(newProp.items[parseInt(index.toString(), 10)])[0];\n var newProperty = Object(newProp.items[parseInt(index.toString(), 10)])[\"\" + property];\n if (this.tbarAlign || property === 'align') {\n this.refresh();\n this.trigger('created');\n break;\n }\n var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n var booleanCheck = property === 'overflow' && this.popupPriCount !== 0;\n if ((popupPriCheck) || (this.items[parseInt(index.toString(), 10)].showAlwaysInPopup) && booleanCheck) {\n --this.popupPriCount;\n }\n if (isNOU(this.scrollModule)) {\n this.destroyMode();\n }\n var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n if (this.isReact && this.items[parseInt(index.toString(), 10)].template) {\n this.clearToolbarTemplate(itemCol[parseInt(index.toString(), 10)]);\n }\n detach(itemCol[parseInt(index.toString(), 10)]);\n this.tbarEle.splice(index, 1);\n this.addItems([this.items[parseInt(index.toString(), 10)]], index);\n this.items.splice(index, 1);\n if (this.items[parseInt(index.toString(), 10)].template) {\n this.tbarEle.splice(this.items.length, 1);\n }\n }\n }\n else {\n this.itemsRerender(newProp.items);\n }\n break;\n case 'width':\n setStyle(tEle, { 'width': formatUnit(newProp.width) });\n this.refreshOverflow();\n break;\n case 'height':\n setStyle(this.element, { 'height': formatUnit(newProp.height) });\n break;\n case 'overflowMode':\n this.destroyMode();\n this.renderOverflowMode();\n if (this.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n this.refreshOverflow();\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.add(tEle, CLS_RTL);\n }\n else {\n this.remove(tEle, CLS_RTL);\n }\n if (!isNOU(this.scrollModule)) {\n if (newProp.enableRtl) {\n this.add(this.scrollModule.element, CLS_RTL);\n }\n else {\n this.remove(this.scrollModule.element, CLS_RTL);\n }\n }\n if (!isNOU(this.popObj)) {\n if (newProp.enableRtl) {\n this.add(this.popObj.element, CLS_RTL);\n }\n else {\n this.remove(this.popObj.element, CLS_RTL);\n }\n }\n if (this.tbarAlign) {\n this.itemPositioning();\n }\n break;\n case 'scrollStep':\n if (this.scrollModule) {\n this.scrollModule.scrollStep = this.scrollStep;\n }\n break;\n case 'enableCollision':\n if (this.popObj) {\n this.popObj.collision = { Y: this.enableCollision ? 'flip' : 'none' };\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.split(' '));\n }\n break;\n case 'allowKeyboard':\n this.unwireKeyboardEvent();\n if (newProp.allowKeyboard) {\n this.wireKeyboardEvent();\n }\n break;\n }\n }\n };\n /**\n * Shows or hides the Toolbar item that is in the specified index.\n *\n * @param {number | HTMLElement} index - Index value of target item or DOM element of items to be hidden or shown.\n * @param {boolean} value - Based on this Boolean value, item will be hide (true) or show (false). By default, value is false.\n * @returns {void}.\n */\n Toolbar.prototype.hideItem = function (index, value) {\n var isElement = (typeof (index) === 'object') ? true : false;\n var eleIndex = index;\n var ele;\n if (!isElement && isNOU(eleIndex)) {\n return;\n }\n var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n if (isElement) {\n ele = index;\n }\n else if (this.tbarEle[parseInt(eleIndex.toString(), 10)]) {\n var innerItems_1 = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n ele = innerItems_1[parseInt(eleIndex.toString(), 10)];\n }\n if (ele) {\n if (value) {\n ele.classList.add(CLS_HIDDEN);\n if (!ele.classList.contains(CLS_SEPARATOR)) {\n if (isNOU(ele.firstElementChild.getAttribute('tabindex')) ||\n ele.firstElementChild.getAttribute('tabindex') !== '-1') {\n this.updateHideEleTabIndex(ele, value, isElement, eleIndex, innerItems);\n }\n }\n }\n else {\n ele.classList.remove(CLS_HIDDEN);\n if (!ele.classList.contains(CLS_SEPARATOR)) {\n this.updateHideEleTabIndex(ele, value, isElement, eleIndex, innerItems);\n }\n }\n this.refreshOverflow();\n }\n };\n __decorate([\n Collection([], Item)\n ], Toolbar.prototype, \"items\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Toolbar.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Toolbar.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Scrollable')\n ], Toolbar.prototype, \"overflowMode\", void 0);\n __decorate([\n Property()\n ], Toolbar.prototype, \"scrollStep\", void 0);\n __decorate([\n Property(true)\n ], Toolbar.prototype, \"enableCollision\", void 0);\n __decorate([\n Property(true)\n ], Toolbar.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(true)\n ], Toolbar.prototype, \"allowKeyboard\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"clicked\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], Toolbar.prototype, \"beforeCreate\", void 0);\n Toolbar = __decorate([\n NotifyPropertyChanges\n ], Toolbar);\n return Toolbar;\n}(Component));\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, closest, Collection, Complex, attributes, detach, isNullOrUndefined, animationMode } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, select, isVisible } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Browser, formatUnit, L10n } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, isNullOrUndefined as isNOU, selectAll, addClass, removeClass, remove } from '@syncfusion/ej2-base';\nimport { EventHandler, rippleEffect, Touch, compile, Animation } from '@syncfusion/ej2-base';\nimport { getRandomId, SanitizeHtmlHelper, Draggable } from '@syncfusion/ej2-base';\nimport { Toolbar } from '../toolbar/toolbar';\nvar CLS_TAB = 'e-tab';\nvar CLS_HEADER = 'e-tab-header';\nvar CLS_BLA_TEM = 'blazor-template';\nvar CLS_CONTENT = 'e-content';\nvar CLS_NEST = 'e-nested';\nvar CLS_ITEMS = 'e-items';\nvar CLS_ITEM = 'e-item';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_RTL = 'e-rtl';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_DISABLE = 'e-disable';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_FOCUS = 'e-focused';\nvar CLS_ICONS = 'e-icons';\nvar CLS_ICON = 'e-icon';\nvar CLS_ICON_TAB = 'e-icon-tab';\nvar CLS_ICON_CLOSE = 'e-close-icon';\nvar CLS_CLOSE_SHOW = 'e-close-show';\nvar CLS_TEXT = 'e-tab-text';\nvar CLS_INDICATOR = 'e-indicator';\nvar CLS_WRAP = 'e-tab-wrap';\nvar CLS_TEXT_WRAP = 'e-text-wrap';\nvar CLS_TAB_ICON = 'e-tab-icon';\nvar CLS_TB_ITEMS = 'e-toolbar-items';\nvar CLS_TB_ITEM = 'e-toolbar-item';\nvar CLS_TB_POP = 'e-toolbar-pop';\nvar CLS_TB_POPUP = 'e-toolbar-popup';\nvar CLS_HOR_NAV = 'e-hor-nav';\nvar CLS_POPUP_OPEN = 'e-popup-open';\nvar CLS_POPUP_CLOSE = 'e-popup-close';\nvar CLS_PROGRESS = 'e-progress';\nvar CLS_IGNORE = 'e-ignore';\nvar CLS_OVERLAY = 'e-overlay';\nvar CLS_HSCRCNT = 'e-hscroll-content';\nvar CLS_VSCRCNT = 'e-vscroll-content';\nvar CLS_VTAB = 'e-vertical-tab';\nvar CLS_VERTICAL = 'e-vertical';\nvar CLS_VLEFT = 'e-vertical-left';\nvar CLS_VRIGHT = 'e-vertical-right';\nvar CLS_HBOTTOM = 'e-horizontal-bottom';\nvar CLS_FILL = 'e-fill-mode';\nvar TABITEMPREFIX = 'tabitem_';\nvar CLS_REORDER_ACTIVE_ITEM = 'e-reorder-active-item';\n/**\n * Objects used for configuring the Tab selecting item action properties.\n */\nvar TabActionSettings = /** @class */ (function (_super) {\n __extends(TabActionSettings, _super);\n function TabActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideLeftIn')\n ], TabActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(600)\n ], TabActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], TabActionSettings.prototype, \"easing\", void 0);\n return TabActionSettings;\n}(ChildProperty));\nexport { TabActionSettings };\n/**\n * Objects used for configuring the Tab animation properties.\n */\nvar TabAnimationSettings = /** @class */ (function (_super) {\n __extends(TabAnimationSettings, _super);\n function TabAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideLeftIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"previous\", void 0);\n __decorate([\n Complex({ effect: 'SlideRightIn', duration: 600, easing: 'ease' }, TabActionSettings)\n ], TabAnimationSettings.prototype, \"next\", void 0);\n return TabAnimationSettings;\n}(ChildProperty));\nexport { TabAnimationSettings };\n/**\n * Objects used for configuring the Tab item header properties.\n */\nvar Header = /** @class */ (function (_super) {\n __extends(Header, _super);\n function Header() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Header.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], Header.prototype, \"iconCss\", void 0);\n __decorate([\n Property('left')\n ], Header.prototype, \"iconPosition\", void 0);\n return Header;\n}(ChildProperty));\nexport { Header };\n/**\n * An array of object that is used to configure the Tab.\n */\nvar TabItem = /** @class */ (function (_super) {\n __extends(TabItem, _super);\n function TabItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Header)\n ], TabItem.prototype, \"header\", void 0);\n __decorate([\n Property(null)\n ], TabItem.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], TabItem.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TabItem.prototype, \"disabled\", void 0);\n __decorate([\n Property(true)\n ], TabItem.prototype, \"visible\", void 0);\n __decorate([\n Property()\n ], TabItem.prototype, \"id\", void 0);\n __decorate([\n Property(-1)\n ], TabItem.prototype, \"tabIndex\", void 0);\n return TabItem;\n}(ChildProperty));\nexport { TabItem };\n/**\n * Tab is a content panel to show multiple contents in a single space, one at a time.\n * Each Tab item has an associated content, that will be displayed based on the active Tab header item.\n * ```html\n *
\n * \n * ```\n */\nvar Tab = /** @class */ (function (_super) {\n __extends(Tab, _super);\n /**\n * Initializes a new instance of the Tab class.\n *\n * @param {TabModel} options - Specifies Tab model properties as options.\n * @param {string | HTMLElement} element - Specifies the element that is rendered as a Tab.\n */\n function Tab(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.show = {};\n _this.hide = {};\n _this.maxHeight = 0;\n _this.title = 'Close';\n _this.isInteracted = false;\n _this.lastIndex = 0;\n _this.isAdd = false;\n _this.isIconAlone = false;\n _this.draggableItems = [];\n _this.resizeContext = _this.refreshActiveTabBorder.bind(_this);\n /**\n * Contains the keyboard configuration of the Tab.\n */\n _this.keyConfigs = {\n tab: 'tab',\n home: 'home',\n end: 'end',\n enter: 'enter',\n space: 'space',\n delete: 'delete',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow'\n };\n return _this;\n }\n /**\n * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n *\n * @returns {void}\n */\n Tab.prototype.destroy = function () {\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n if (!isNOU(this.tbObj)) {\n this.tbObj.destroy();\n this.tbObj = null;\n }\n this.unWireEvents();\n this.element.removeAttribute('aria-disabled');\n this.expTemplateContent();\n if (!this.isTemplate) {\n while (this.element.firstElementChild) {\n remove(this.element.firstElementChild);\n }\n }\n else {\n var cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n this.element.classList.remove(CLS_TEMPLATE);\n if (!isNOU(cntEle)) {\n cntEle.innerHTML = this.cnt;\n }\n }\n if (this.btnCls) {\n this.btnCls = null;\n }\n this.hdrEle = null;\n this.cntEle = null;\n this.tbItems = null;\n this.tbItem = null;\n this.tbPop = null;\n this.prevItem = null;\n this.popEle = null;\n this.bdrLine = null;\n this.content = null;\n this.dragItem = null;\n this.cloneElement = null;\n this.draggingItems = [];\n if (this.draggableItems && this.draggableItems.length > 0) {\n for (var i = 0; i < this.draggableItems.length; i++) {\n this.draggableItems[i].destroy();\n this.draggableItems[i] = null;\n }\n this.draggableItems = [];\n }\n _super.prototype.destroy.call(this);\n this.trigger('destroyed');\n };\n /**\n * Refresh the tab component\n *\n * @returns {void}\n */\n Tab.prototype.refresh = function () {\n if (this.isReact) {\n this.clearTemplate();\n }\n _super.prototype.refresh.call(this);\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * Initialize component\n *\n * @private\n * @returns {void}\n */\n Tab.prototype.preRender = function () {\n var nested = closest(this.element, '.' + CLS_CONTENT);\n this.prevIndex = 0;\n this.isNested = false;\n this.isPopup = false;\n this.initRender = true;\n this.isSwiped = false;\n this.itemIndexArray = [];\n this.templateEle = [];\n if (this.allowDragAndDrop) {\n this.dragArea = !isNOU(this.dragArea) ? this.dragArea : '#' + this.element.id + ' ' + ('.' + CLS_HEADER);\n }\n if (!isNOU(nested)) {\n nested.parentElement.classList.add(CLS_NEST);\n this.isNested = true;\n }\n var name = Browser.info.name;\n var css = (name === 'msie') ? 'e-ie' : (name === 'edge') ? 'e-edge' : (name === 'safari') ? 'e-safari' : '';\n setStyle(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n this.setCssClass(this.element, this.cssClass, true);\n attributes(this.element, { 'aria-disabled': 'false' });\n this.setCssClass(this.element, css, true);\n this.updatePopAnimationConfig();\n };\n /**\n * Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n Tab.prototype.render = function () {\n var _this = this;\n this.btnCls = this.createElement('span', { className: CLS_ICONS + ' ' + CLS_ICON_CLOSE, attrs: { title: this.title } });\n this.tabId = this.element.id.length > 0 ? ('-' + this.element.id) : getRandomId();\n this.renderContainer();\n this.wireEvents();\n this.initRender = false;\n if (this.isReact && this.portals && this.portals.length > 0) {\n this.renderReactTemplates(function () {\n if (!isNOU(_this.tbObj)) {\n _this.tbObj.refreshOverflow();\n }\n _this.refreshActiveBorder();\n });\n }\n };\n Tab.prototype.renderContainer = function () {\n var ele = this.element;\n this.items.forEach(function (item, index) {\n if (isNOU(item.id) && !isNOU(item.setProperties)) {\n item.setProperties({ id: TABITEMPREFIX + index.toString() }, true);\n }\n });\n if (this.items.length > 0 && ele.children.length === 0) {\n ele.appendChild(this.createElement('div', { className: CLS_CONTENT }));\n this.setOrientation(this.headerPlacement, this.createElement('div', { className: CLS_HEADER }));\n this.isTemplate = false;\n }\n else if (this.element.children.length > 0) {\n this.isTemplate = true;\n ele.classList.add(CLS_TEMPLATE);\n var header = ele.querySelector('.' + CLS_HEADER);\n if (header && this.headerPlacement === 'Bottom') {\n this.setOrientation(this.headerPlacement, header);\n }\n }\n if (!isNOU(select('.' + CLS_HEADER, this.element)) && !isNOU(select('.' + CLS_CONTENT, this.element))) {\n this.renderHeader();\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n if (!isNOU(this.tbItems)) {\n rippleEffect(this.tbItems, { selector: '.e-tab-wrap' });\n }\n this.renderContent();\n if (selectAll('.' + CLS_TB_ITEM, this.element).length > 0) {\n this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n this.bdrLine = this.createElement('div', { className: CLS_INDICATOR + ' ' + CLS_HIDDEN + ' ' + CLS_IGNORE });\n var scrCnt = select('.' + this.scrCntClass, this.tbItems);\n if (!isNOU(scrCnt)) {\n scrCnt.insertBefore(this.bdrLine, scrCnt.firstChild);\n }\n else {\n this.tbItems.insertBefore(this.bdrLine, this.tbItems.firstChild);\n }\n this.setContentHeight(true);\n this.select(this.selectedItem);\n }\n this.setRTL(this.enableRtl);\n }\n };\n Tab.prototype.renderHeader = function () {\n var _this = this;\n var hdrPlace = this.headerPlacement;\n var tabItems = [];\n this.hdrEle = this.getTabHeader();\n this.addVerticalClass();\n if (!this.isTemplate) {\n tabItems = this.parseObject(this.items, 0);\n }\n else {\n if (this.element.children.length > 1 && this.element.children[1].classList.contains(CLS_HEADER)) {\n this.setProperties({ headerPlacement: 'Bottom' }, true);\n }\n var count = this.hdrEle.children.length;\n var hdrItems = [];\n for (var i = 0; i < count; i++) {\n hdrItems.push(this.hdrEle.children.item(i));\n }\n if (count > 0) {\n var tabItems_1 = this.createElement('div', { className: CLS_ITEMS });\n this.hdrEle.appendChild(tabItems_1);\n hdrItems.forEach(function (item, index) {\n _this.lastIndex = index;\n var attr = {\n className: CLS_ITEM, id: CLS_ITEM + _this.tabId + '_' + index\n };\n var txt = _this.createElement('span', {\n className: CLS_TEXT, attrs: { 'role': 'presentation' }\n }).outerHTML;\n var cont = _this.createElement('div', {\n className: CLS_TEXT_WRAP, innerHTML: txt + _this.btnCls.outerHTML\n }).outerHTML;\n var wrap = _this.createElement('div', {\n className: CLS_WRAP, innerHTML: cont,\n attrs: { role: 'tab', tabIndex: '-1', 'aria-selected': 'false', 'aria-controls': CLS_CONTENT + _this.tabId + '_' + index, 'aria-disabled': 'false' }\n });\n wrap.querySelector('.' + CLS_TEXT).appendChild(item);\n tabItems_1.appendChild(_this.createElement('div', attr));\n selectAll('.' + CLS_ITEM, tabItems_1)[index].appendChild(wrap);\n });\n }\n }\n this.tbObj = new Toolbar({\n width: (hdrPlace === 'Left' || hdrPlace === 'Right') ? 'auto' : '100%',\n height: (hdrPlace === 'Left' || hdrPlace === 'Right') ? '100%' : 'auto',\n overflowMode: this.overflowMode,\n items: (tabItems.length !== 0) ? tabItems : [],\n clicked: this.clickHandler.bind(this),\n scrollStep: this.scrollStep,\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n cssClass: this.cssClass\n });\n this.tbObj.isStringTemplate = true;\n this.tbObj.createElement = this.createElement;\n this.tbObj.appendTo(this.hdrEle);\n attributes(this.hdrEle, { role: 'tablist' });\n if (!isNOU(this.element.getAttribute('aria-label'))) {\n this.hdrEle.setAttribute('aria-label', this.element.getAttribute('aria-label'));\n this.element.removeAttribute('aria-label');\n }\n else if (!isNOU(this.element.getAttribute('aria-labelledby'))) {\n this.hdrEle.setAttribute('aria-labelledby', this.element.getAttribute('aria-labelledby'));\n this.element.removeAttribute('aria-labelledby');\n }\n this.setCloseButton(this.showCloseButton);\n var toolbarHeader = this.tbObj.element.querySelector('.' + CLS_TB_ITEMS);\n if (!isNOU(toolbarHeader)) {\n if (isNOU(toolbarHeader.id) || toolbarHeader.id === '') {\n toolbarHeader.id = this.element.id + '_' + 'tab_header_items';\n }\n }\n };\n Tab.prototype.renderContent = function () {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n var hdrItem = selectAll('.' + CLS_TB_ITEM, this.element);\n if (this.isTemplate) {\n this.cnt = (this.cntEle.children.length > 0) ? this.cntEle.innerHTML : '';\n var contents = this.cntEle.children;\n for (var i = 0; i < hdrItem.length; i++) {\n if (contents.length - 1 >= i) {\n addClass([contents.item(i)], CLS_ITEM);\n attributes(contents.item(i), { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + this.tabId + '_' + i });\n contents.item(i).id = CLS_CONTENT + this.tabId + '_' + i;\n }\n }\n }\n };\n Tab.prototype.reRenderItems = function () {\n this.renderContainer();\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n };\n Tab.prototype.parseObject = function (items, index) {\n var _this = this;\n var tbItems = Array.prototype.slice.call(selectAll('.e-tab-header .' + CLS_TB_ITEM, this.element));\n var maxId = this.lastIndex;\n if (!this.isReplace && tbItems.length > 0) {\n var idList_1 = [];\n tbItems.forEach(function (item) {\n idList_1.push(_this.getIndexFromEle(item.id));\n });\n maxId = Math.max.apply(Math, idList_1);\n }\n var tItems = [];\n var txtWrapEle;\n var spliceArray = [];\n var i = 0;\n items.forEach(function (item, i) {\n var pos = (isNOU(item.header) || isNOU(item.header.iconPosition)) ? '' : item.header.iconPosition;\n var css = (isNOU(item.header) || isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n if ((isNOU(item.headerTemplate)) && (isNOU(item.header) || isNOU(item.header.text) ||\n ((item.header.text.length === 0)) && (css === ''))) {\n spliceArray.push(i);\n return;\n }\n var txt = item.headerTemplate || item.header.text;\n if (typeof txt === 'string' && _this.enableHtmlSanitizer) {\n txt = SanitizeHtmlHelper.sanitize(txt);\n }\n var itemIndex;\n if (_this.isReplace && !isNOU(_this.tbId) && _this.tbId !== '') {\n itemIndex = parseInt(_this.tbId.substring(_this.tbId.lastIndexOf('_') + 1), 10);\n _this.tbId = '';\n }\n else {\n itemIndex = index + i;\n }\n _this.lastIndex = ((tbItems.length === 0) ? i : ((_this.isReplace) ? (itemIndex) : (maxId + 1 + i)));\n var disabled = (item.disabled) ? ' ' + CLS_DISABLE + ' ' + CLS_OVERLAY : '';\n var hidden = (item.visible === false) ? ' ' + CLS_HIDDEN : '';\n txtWrapEle = _this.createElement('div', { className: CLS_TEXT, attrs: { 'role': 'presentation' } });\n var tHtml = ((txt instanceof Object) ? txt.outerHTML : txt);\n var txtEmpty = (!isNOU(tHtml) && tHtml !== '');\n if (!isNOU(txt.tagName)) {\n txtWrapEle.appendChild(txt);\n }\n else {\n _this.headerTextCompile(txtWrapEle, txt, i);\n }\n var tEle;\n var icon = _this.createElement('span', {\n className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n });\n var tCont = _this.createElement('div', { className: CLS_TEXT_WRAP });\n tCont.appendChild(txtWrapEle);\n if ((txt !== '' && txt !== undefined) && css !== '') {\n if ((pos === 'left' || pos === 'top')) {\n tCont.insertBefore(icon, tCont.firstElementChild);\n }\n else {\n tCont.appendChild(icon);\n }\n tEle = txtWrapEle;\n _this.isIconAlone = false;\n }\n else {\n tEle = ((css === '') ? txtWrapEle : icon);\n if (tEle === icon) {\n detach(txtWrapEle);\n tCont.appendChild(icon);\n _this.isIconAlone = true;\n }\n }\n var tabIndex = isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString();\n var wrapAttrs = (item.disabled) ? { role: 'tab', 'aria-disabled': 'true' } : { tabIndex: tabIndex, 'data-tabindex': tabIndex, role: 'tab', 'aria-selected': 'false', 'aria-disabled': 'false' };\n tCont.appendChild(_this.btnCls.cloneNode(true));\n var wrap = _this.createElement('div', { className: CLS_WRAP, attrs: wrapAttrs });\n wrap.appendChild(tCont);\n if (_this.itemIndexArray instanceof Array) {\n _this.itemIndexArray.splice((index + i), 0, CLS_ITEM + _this.tabId + '_' + _this.lastIndex);\n }\n var attrObj = {\n id: CLS_ITEM + _this.tabId + '_' + _this.lastIndex, 'data-id': item.id\n };\n var tItem = { htmlAttributes: attrObj, template: wrap };\n tItem.cssClass = ((item.cssClass !== undefined) ? item.cssClass : ' ') + ' ' + disabled + ' ' + hidden + ' '\n + ((css !== '') ? 'e-i' + pos : '') + ' ' + ((!txtEmpty) ? CLS_ICON : '');\n if (pos === 'top' || pos === 'bottom') {\n _this.element.classList.add('e-vertical-icon');\n }\n tItems.push(tItem);\n i++;\n });\n if (!this.isAdd) {\n spliceArray.forEach(function (spliceItemIndex) {\n _this.items.splice(spliceItemIndex, 1);\n });\n }\n if (this.isIconAlone) {\n this.element.classList.add(CLS_ICON_TAB);\n }\n else {\n this.element.classList.remove(CLS_ICON_TAB);\n }\n return tItems;\n };\n Tab.prototype.removeActiveClass = function () {\n var tabHeader = this.getTabHeader();\n if (tabHeader) {\n var tabItems = selectAll('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, tabHeader);\n [].slice.call(tabItems).forEach(function (node) { return node.classList.remove(CLS_ACTIVE); });\n [].slice.call(tabItems).forEach(function (node) { return node.firstElementChild.setAttribute('aria-selected', 'false'); });\n }\n };\n Tab.prototype.checkPopupOverflow = function (ele) {\n this.tbPop = select('.' + CLS_TB_POP, this.element);\n var popIcon = select('.e-hor-nav', this.element);\n var tbrItems = select('.' + CLS_TB_ITEMS, this.element);\n var lastChild = tbrItems.lastChild;\n var isOverflow = false;\n if (!this.isVertical() && ((this.enableRtl && ((popIcon.offsetLeft + popIcon.offsetWidth) > tbrItems.offsetLeft))\n || (!this.enableRtl && popIcon.offsetLeft < tbrItems.offsetWidth))) {\n isOverflow = true;\n }\n else if (this.isVertical() && (popIcon.offsetTop < lastChild.offsetTop + lastChild.offsetHeight)) {\n isOverflow = true;\n }\n if (isOverflow) {\n ele.classList.add(CLS_TB_POPUP);\n this.tbPop.insertBefore(ele, selectAll('.' + CLS_TB_POPUP, this.tbPop)[0]);\n }\n return true;\n };\n Tab.prototype.popupHandler = function (target) {\n var ripEle = target.querySelector('.e-ripple-element');\n if (!isNOU(ripEle)) {\n ripEle.outerHTML = '';\n target.querySelector('.' + CLS_WRAP).classList.remove('e-ripple');\n }\n this.tbItem = selectAll('.' + CLS_TB_ITEMS + ' .' + CLS_TB_ITEM, this.hdrEle);\n var lastChild = this.tbItem[this.tbItem.length - 1];\n if (this.tbItem.length !== 0) {\n target.classList.remove(CLS_TB_POPUP);\n target.removeAttribute('style');\n this.tbItems.appendChild(target);\n this.actEleId = target.id;\n if (this.checkPopupOverflow(lastChild)) {\n var prevEle = this.tbItems.lastChild.previousElementSibling;\n this.checkPopupOverflow(prevEle);\n }\n this.isPopup = true;\n }\n return selectAll('.' + CLS_TB_ITEM, this.tbItems).length - 1;\n };\n Tab.prototype.setCloseButton = function (val) {\n var trg = select('.' + CLS_HEADER, this.element);\n if (val === true) {\n trg.classList.add(CLS_CLOSE_SHOW);\n }\n else {\n trg.classList.remove(CLS_CLOSE_SHOW);\n }\n this.tbObj.refreshOverflow();\n this.refreshActiveTabBorder();\n };\n Tab.prototype.prevCtnAnimation = function (prev, current) {\n var animation;\n var checkRTL = this.enableRtl || this.element.classList.contains(CLS_RTL);\n if (this.isPopup || prev <= current) {\n if (this.animation.previous.effect === 'SlideLeftIn') {\n animation = {\n name: 'SlideLeftOut',\n duration: this.animation.previous.duration, timingFunction: this.animation.previous.easing\n };\n }\n else {\n animation = null;\n }\n }\n else {\n if (this.animation.next.effect === 'SlideRightIn') {\n animation = {\n name: 'SlideRightOut',\n duration: this.animation.next.duration, timingFunction: this.animation.next.easing\n };\n }\n else {\n animation = null;\n }\n }\n return animation;\n };\n Tab.prototype.triggerPrevAnimation = function (oldCnt, prevIndex) {\n var _this = this;\n var animateObj = this.prevCtnAnimation(prevIndex, this.selectedItem);\n if (!isNOU(animateObj)) {\n animateObj.begin = function () {\n setStyle(oldCnt, { 'position': 'absolute' });\n oldCnt.classList.add(CLS_PROGRESS);\n oldCnt.classList.add('e-view');\n };\n animateObj.end = function () {\n oldCnt.style.display = 'none';\n oldCnt.classList.remove(CLS_ACTIVE);\n oldCnt.classList.remove(CLS_PROGRESS);\n oldCnt.classList.remove('e-view');\n setStyle(oldCnt, { 'display': '', 'position': '' });\n if (oldCnt.childNodes.length === 0 && !_this.isTemplate) {\n detach(oldCnt);\n }\n };\n new Animation(animateObj).animate(oldCnt);\n }\n else {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n };\n Tab.prototype.triggerAnimation = function (id, value) {\n var _this = this;\n var prevIndex = this.prevIndex;\n var oldCnt;\n var itemCollection = [].slice.call(this.element.querySelector('.' + CLS_CONTENT).children);\n itemCollection.forEach(function (item) {\n if (item.id === _this.prevActiveEle) {\n oldCnt = item;\n }\n });\n var prevEle = this.tbItem[prevIndex];\n var newCnt = this.getTrgContent(this.cntEle, this.extIndex(id));\n if (isNOU(oldCnt) && !isNOU(prevEle)) {\n var idNo = this.extIndex(prevEle.id);\n oldCnt = this.getTrgContent(this.cntEle, idNo);\n }\n if (!isNOU(newCnt)) {\n this.prevActiveEle = newCnt.id;\n }\n var isPrevent = isNOU(this.animation) || isNOU(this.animation.next.effect) || isNOU(this.animation.previous.effect)\n || this.animation.previous.effect === 'None' || this.animation.next.effect === 'None';\n if (this.initRender || value === false || isPrevent) {\n if (oldCnt && oldCnt !== newCnt) {\n oldCnt.classList.remove(CLS_ACTIVE);\n }\n return;\n }\n var cnt = select('.' + CLS_CONTENT, this.element);\n var animateObj;\n if (this.prevIndex > this.selectedItem && !this.isPopup) {\n var openEff = this.animation.previous.effect;\n animateObj = {\n name: ((openEff === 'None') ? '' : ((openEff !== 'SlideLeftIn') ? openEff : 'SlideLeftIn')),\n duration: (this.animation.previous.duration === 0 && animationMode === 'Enable') ? 600 : this.animation.previous.duration,\n timingFunction: this.animation.previous.easing\n };\n }\n else if (this.isPopup || this.prevIndex < this.selectedItem || this.prevIndex === this.selectedItem) {\n var clsEff = this.animation.next.effect;\n animateObj = {\n name: ((clsEff === 'None') ? '' : ((clsEff !== 'SlideRightIn') ? clsEff : 'SlideRightIn')),\n duration: (this.animation.next.duration === 0 && animationMode === 'Enable') ? 600 : this.animation.next.duration,\n timingFunction: this.animation.next.easing\n };\n }\n animateObj.progress = function () {\n cnt.classList.add(CLS_PROGRESS);\n _this.setActiveBorder();\n };\n animateObj.end = function () {\n cnt.classList.remove(CLS_PROGRESS);\n newCnt.classList.add(CLS_ACTIVE);\n };\n if (!this.initRender && !isNOU(oldCnt)) {\n this.triggerPrevAnimation(oldCnt, prevIndex);\n }\n this.isPopup = false;\n if (animateObj.name === '') {\n newCnt.classList.add(CLS_ACTIVE);\n }\n else {\n new Animation(animateObj).animate(newCnt);\n }\n };\n Tab.prototype.keyPressed = function (trg) {\n var trgParent = closest(trg, '.' + CLS_HEADER + ' .' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (!isNOU(this.popEle) && trg.classList.contains('e-hor-nav')) {\n (this.popEle.classList.contains(CLS_POPUP_OPEN)) ? this.popObj.hide(this.hide) : this.popObj.show(this.show);\n }\n else if (trg.classList.contains('e-scroll-nav')) {\n trg.click();\n }\n else {\n if (!isNOU(trgParent) && trgParent.classList.contains(CLS_ACTIVE) === false) {\n this.selectTab(trgIndex, null, true);\n if (!isNOU(this.popEle)) {\n this.popObj.hide(this.hide);\n }\n }\n }\n };\n Tab.prototype.getTabHeader = function () {\n if (isNOU(this.element)) {\n return undefined;\n }\n var headers = [].slice.call(this.element.children).filter(function (e) { return e.classList.contains(CLS_HEADER); });\n if (headers.length > 0) {\n return headers[0];\n }\n else {\n var wrap = [].slice.call(this.element.children).filter(function (e) { return !e.classList.contains(CLS_BLA_TEM); })[0];\n if (!wrap) {\n return undefined;\n }\n return [].slice.call(wrap.children).filter(function (e) { return e.classList.contains(CLS_HEADER); })[0];\n }\n };\n Tab.prototype.getEleIndex = function (item) {\n return Array.prototype.indexOf.call(selectAll('.' + CLS_TB_ITEM, this.getTabHeader()), item);\n };\n Tab.prototype.extIndex = function (id) {\n return id.replace(CLS_ITEM + this.tabId + '_', '');\n };\n Tab.prototype.expTemplateContent = function () {\n var _this = this;\n this.templateEle.forEach(function (eleStr) {\n if (!isNOU(_this.element.querySelector(eleStr))) {\n document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n }\n });\n };\n Tab.prototype.templateCompile = function (ele, cnt, index) {\n var tempEle = this.createElement('div');\n this.compileElement(tempEle, cnt, 'content', index);\n if (tempEle.childNodes.length !== 0) {\n ele.appendChild(tempEle);\n }\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n Tab.prototype.compileElement = function (ele, val, prop, index) {\n var templateFn;\n if (typeof val === 'string') {\n val = val.trim();\n if (this.isVue) {\n templateFn = compile(this.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(val) : val);\n }\n else {\n ele.innerHTML = this.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(val) : val;\n }\n }\n else {\n templateFn = compile(val);\n }\n var templateFUN;\n if (!isNOU(templateFn)) {\n templateFUN = templateFn({}, this, prop);\n }\n if (!isNOU(templateFn) && templateFUN.length > 0) {\n [].slice.call(templateFUN).forEach(function (el) {\n ele.appendChild(el);\n });\n }\n };\n Tab.prototype.headerTextCompile = function (element, text, index) {\n this.compileElement(element, text, 'headerTemplate', index);\n };\n Tab.prototype.getContent = function (ele, cnt, callType, index) {\n var eleStr;\n cnt = isNOU(cnt) ? '' : cnt;\n if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n if (typeof cnt === 'string' && this.enableHtmlSanitizer) {\n cnt = SanitizeHtmlHelper.sanitize(cnt);\n }\n if (cnt[0] === '.' || cnt[0] === '#') {\n if (document.querySelectorAll(cnt).length) {\n var eleVal = document.querySelector(cnt);\n eleStr = eleVal.outerHTML.trim();\n if (callType === 'clone') {\n ele.appendChild(eleVal.cloneNode(true));\n }\n else {\n ele.appendChild(eleVal);\n eleVal.style.display = '';\n }\n }\n else {\n this.templateCompile(ele, cnt, index);\n }\n }\n else {\n this.templateCompile(ele, cnt, index);\n }\n }\n else {\n ele.appendChild(cnt);\n }\n if (!isNOU(eleStr)) {\n if (this.templateEle.indexOf(cnt.toString()) === -1) {\n this.templateEle.push(cnt.toString());\n }\n }\n };\n Tab.prototype.getTrgContent = function (cntEle, no) {\n var ele;\n if (this.element.classList.contains(CLS_NEST)) {\n ele = select('.' + CLS_NEST + '> .' + CLS_CONTENT + ' > #' + CLS_CONTENT + this.tabId + '_' + no, this.element);\n }\n else {\n ele = this.findEle(cntEle.children, CLS_CONTENT + this.tabId + '_' + no);\n }\n return ele;\n };\n Tab.prototype.findEle = function (items, key) {\n var ele;\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === key) {\n ele = items[i];\n break;\n }\n }\n return ele;\n };\n Tab.prototype.isVertical = function () {\n var isVertical = (this.headerPlacement === 'Left' || this.headerPlacement === 'Right') ? true : false;\n this.scrCntClass = (isVertical) ? CLS_VSCRCNT : CLS_HSCRCNT;\n return isVertical;\n };\n Tab.prototype.addVerticalClass = function () {\n if (this.isVertical()) {\n var tbPos = (this.headerPlacement === 'Left') ? CLS_VLEFT : CLS_VRIGHT;\n addClass([this.hdrEle], [CLS_VERTICAL, tbPos]);\n if (!this.element.classList.contains(CLS_NEST)) {\n addClass([this.element], [CLS_VTAB, tbPos]);\n }\n else {\n addClass([this.hdrEle], [CLS_VTAB, tbPos]);\n }\n }\n if (this.headerPlacement === 'Bottom') {\n addClass([this.hdrEle], [CLS_HBOTTOM]);\n }\n };\n Tab.prototype.updatePopAnimationConfig = function () {\n this.show = { name: (this.isVertical() ? 'FadeIn' : 'SlideDown'), duration: 100 };\n this.hide = { name: (this.isVertical() ? 'FadeOut' : 'SlideUp'), duration: 100 };\n };\n Tab.prototype.changeOrientation = function (place) {\n this.setOrientation(place, this.hdrEle);\n var activeTab = this.hdrEle.querySelector('.' + CLS_ACTIVE);\n var isVertical = this.hdrEle.classList.contains(CLS_VERTICAL) ? true : false;\n removeClass([this.element], [CLS_VTAB]);\n removeClass([this.hdrEle], [CLS_VERTICAL, CLS_VLEFT, CLS_VRIGHT]);\n if (isVertical !== this.isVertical()) {\n this.changeToolbarOrientation();\n if (!isNOU(activeTab) && activeTab.classList.contains(CLS_TB_POPUP)) {\n this.popupHandler(activeTab);\n }\n }\n this.addVerticalClass();\n this.setActiveBorder();\n this.focusItem();\n };\n Tab.prototype.focusItem = function () {\n var curActItem = select(' #' + CLS_ITEM + this.tabId + '_' + this.selectedItem, this.hdrEle);\n if (!isNOU(curActItem)) {\n curActItem.firstElementChild.focus();\n }\n };\n Tab.prototype.changeToolbarOrientation = function () {\n this.tbObj.setProperties({ height: (this.isVertical() ? '100%' : 'auto'), width: (this.isVertical() ? 'auto' : '100%') }, true);\n this.tbObj.changeOrientation();\n this.updatePopAnimationConfig();\n };\n Tab.prototype.setOrientation = function (place, ele) {\n var headerPos = Array.prototype.indexOf.call(this.element.children, ele);\n var contentPos = Array.prototype.indexOf.call(this.element.children, this.element.querySelector('.' + CLS_CONTENT));\n if (place === 'Bottom' && (contentPos > headerPos)) {\n this.element.appendChild(ele);\n }\n else {\n removeClass([ele], [CLS_HBOTTOM]);\n this.element.insertBefore(ele, select('.' + CLS_CONTENT, this.element));\n }\n };\n Tab.prototype.setCssClass = function (ele, cls, val) {\n if (cls === '' || isNOU(cls)) {\n return;\n }\n var list = cls.split(' ');\n for (var i = 0; i < list.length; i++) {\n if (val) {\n ele.classList.add(list[i]);\n }\n else {\n ele.classList.remove(list[i]);\n }\n }\n };\n Tab.prototype.setContentHeight = function (val) {\n if (this.element.classList.contains(CLS_FILL)) {\n removeClass([this.element], [CLS_FILL]);\n }\n if (isNOU(this.cntEle)) {\n return;\n }\n var hdrEle = this.getTabHeader();\n if (this.heightAdjustMode === 'None') {\n if (this.height === 'auto') {\n return;\n }\n else {\n if (!this.isVertical()) {\n setStyle(this.cntEle, { 'height': (this.element.clientHeight - hdrEle.offsetHeight) + 'px' });\n }\n }\n }\n else if (this.heightAdjustMode === 'Fill') {\n addClass([this.element], [CLS_FILL]);\n setStyle(this.element, { 'height': '100%' });\n this.cntEle.style.height = 'calc(100% - ' + this.hdrEle.offsetHeight + 'px)';\n }\n else if (this.heightAdjustMode === 'Auto') {\n if (this.isTemplate === true) {\n var cnt = selectAll('.' + CLS_CONTENT + ' > .' + CLS_ITEM, this.element);\n for (var i = 0; i < cnt.length; i++) {\n cnt[i].setAttribute('style', 'display:block; visibility: visible');\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(cnt[i]));\n cnt[i].style.removeProperty('display');\n cnt[i].style.removeProperty('visibility');\n }\n }\n else {\n this.cntEle = select('.' + CLS_CONTENT, this.element);\n if (val === true) {\n this.cntEle.appendChild(this.createElement('div', {\n id: (CLS_CONTENT + this.tabId + '_' + 0), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + this.tabId + '_' + 0 }\n }));\n }\n var ele = this.cntEle.children.item(0);\n for (var i = 0; i < this.items.length; i++) {\n this.getContent(ele, this.items[i].content, 'clone', i);\n this.maxHeight = Math.max(this.maxHeight, this.getHeight(ele));\n while (ele.firstChild) {\n ele.removeChild(ele.firstChild);\n }\n }\n if (this.isReact || this.isAngular || this.isVue) {\n this.clearTemplate(['content']);\n }\n this.templateEle = [];\n this.getContent(ele, this.items[0].content, 'render', 0);\n if (this.prevIndex !== this.selectedItem) {\n ele.classList.remove(CLS_ACTIVE);\n }\n }\n setStyle(this.cntEle, { 'height': this.maxHeight + 'px' });\n }\n else {\n setStyle(this.cntEle, { 'height': 'auto' });\n }\n };\n Tab.prototype.getHeight = function (ele) {\n var cs = window.getComputedStyle(ele);\n return ele.offsetHeight + parseFloat(cs.getPropertyValue('padding-top')) + parseFloat(cs.getPropertyValue('padding-bottom')) +\n parseFloat(cs.getPropertyValue('margin-top')) + parseFloat(cs.getPropertyValue('margin-bottom'));\n };\n Tab.prototype.setActiveBorder = function () {\n var trgHdrEle = this.getTabHeader();\n var trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, trgHdrEle);\n if (isNOU(trg)) {\n return;\n }\n if (!this.reorderActiveTab) {\n if (trg.classList.contains(CLS_TB_POPUP) && !this.bdrLine.classList.contains(CLS_HIDDEN)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n if (trgHdrEle && !trgHdrEle.classList.contains(CLS_REORDER_ACTIVE_ITEM)) {\n trgHdrEle.classList.add(CLS_REORDER_ACTIVE_ITEM);\n }\n }\n else if (trgHdrEle) {\n trgHdrEle.classList.remove(CLS_REORDER_ACTIVE_ITEM);\n }\n var root = closest(trg, '.' + CLS_TAB);\n if (this.element !== root) {\n return;\n }\n this.tbItems = select('.' + CLS_TB_ITEMS, trgHdrEle);\n var bar = select('.' + CLS_INDICATOR, trgHdrEle);\n var scrollCnt = select('.' + CLS_TB_ITEMS + ' .' + this.scrCntClass, trgHdrEle);\n if (this.isVertical()) {\n setStyle(bar, { 'left': '', 'right': '' });\n var tbHeight = (isNOU(scrollCnt)) ? this.tbItems.offsetHeight : scrollCnt.offsetHeight;\n if (tbHeight !== 0) {\n setStyle(bar, { 'top': trg.offsetTop + 'px', 'height': trg.offsetHeight + 'px' });\n }\n else {\n setStyle(bar, { 'top': 0, 'height': 0 });\n }\n }\n else {\n if (this.overflowMode === 'MultiRow') {\n var top_1 = this.headerPlacement === 'Bottom' ? trg.offsetTop : trg.offsetHeight + trg.offsetTop;\n setStyle(bar, { 'top': top_1 + 'px', 'height': '' });\n }\n else {\n setStyle(bar, { 'top': '', 'height': '' });\n }\n var tbWidth = (isNOU(scrollCnt)) ? this.tbItems.offsetWidth : scrollCnt.offsetWidth;\n if (tbWidth !== 0) {\n setStyle(bar, { 'left': trg.offsetLeft + 'px', 'right': tbWidth - (trg.offsetLeft + trg.offsetWidth) + 'px' });\n }\n else {\n setStyle(bar, { 'left': 'auto', 'right': 'auto' });\n }\n }\n if (!isNOU(this.bdrLine) && !trg.classList.contains(CLS_TB_POPUP)) {\n this.bdrLine.classList.remove(CLS_HIDDEN);\n }\n };\n Tab.prototype.setActive = function (value, skipDataBind, isInteracted) {\n if (skipDataBind === void 0) { skipDataBind = false; }\n if (isInteracted === void 0) { isInteracted = false; }\n this.tbItem = selectAll('.' + CLS_TB_ITEM, this.getTabHeader());\n var trg = this.tbItem[value];\n if (value < 0 || isNaN(value) || this.tbItem.length === 0 || !isNOU(trg) && trg.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (value >= 0 && !skipDataBind) {\n this.allowServerDataBinding = false;\n this.setProperties({ selectedItem: value }, true);\n this.allowServerDataBinding = true;\n if (!this.initRender) {\n this.serverDataBind();\n }\n }\n if (trg.classList.contains(CLS_ACTIVE)) {\n this.setActiveBorder();\n return;\n }\n if (!this.isTemplate) {\n attributes(trg.firstElementChild, { 'aria-controls': CLS_CONTENT + this.tabId + '_' + value });\n }\n var id = trg.id;\n this.removeActiveClass();\n trg.classList.add(CLS_ACTIVE);\n trg.firstElementChild.setAttribute('aria-selected', 'true');\n var no = Number(this.extIndex(id));\n if (isNOU(this.prevActiveEle)) {\n this.prevActiveEle = CLS_CONTENT + this.tabId + '_' + no;\n }\n if (this.isTemplate) {\n if (select('.' + CLS_CONTENT, this.element).children.length > 0) {\n var trg_1 = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + this.tabId + '_' + no);\n if (!isNOU(trg_1)) {\n trg_1.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n }\n else {\n this.cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n var item = this.getTrgContent(this.cntEle, this.extIndex(id));\n if (isNOU(item)) {\n this.cntEle.appendChild(this.createElement('div', {\n id: CLS_CONTENT + this.tabId + '_' + this.extIndex(id), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + this.tabId + '_' + this.extIndex(id) }\n }));\n var eleTrg = this.getTrgContent(this.cntEle, this.extIndex(id));\n var itemIndex = Array.prototype.indexOf.call(this.itemIndexArray, id);\n this.getContent(eleTrg, this.items[itemIndex].content, 'render', itemIndex);\n }\n else {\n item.classList.add(CLS_ACTIVE);\n }\n this.triggerAnimation(id, this.enableAnimation);\n }\n this.setActiveBorder();\n this.refreshItemVisibility(trg);\n if (!this.initRender && !skipDataBind) {\n var eventArg = {\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: trg,\n selectedIndex: value,\n selectedContent: select('#' + CLS_CONTENT + this.tabId + '_' + this.selectingID, this.content),\n isSwiped: this.isSwiped,\n isInteracted: isInteracted,\n preventFocus: false\n };\n this.trigger('selected', eventArg, function (selectEventArgs) {\n if (!selectEventArgs.preventFocus) {\n trg.firstElementChild.focus();\n }\n });\n }\n };\n Tab.prototype.setItems = function (items) {\n this.isReplace = true;\n this.tbItems = select('.' + CLS_TB_ITEMS, this.getTabHeader());\n this.tbObj.items = this.parseObject(items, 0);\n this.tbObj.dataBind();\n this.isReplace = false;\n };\n Tab.prototype.setRTL = function (value) {\n this.tbObj.enableRtl = value;\n this.tbObj.dataBind();\n this.setCssClass(this.element, CLS_RTL, value);\n this.refreshActiveBorder();\n };\n Tab.prototype.refreshActiveBorder = function () {\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.setActiveBorder();\n };\n Tab.prototype.showPopup = function (config) {\n var tbPop = select('.e-popup.e-toolbar-pop', this.hdrEle);\n if (tbPop && tbPop.classList.contains('e-popup-close')) {\n var tbPopObj = (tbPop && tbPop.ej2_instances[0]);\n tbPopObj.position.X = (this.headerPlacement === 'Left' || this.element.classList.contains(CLS_RTL)) ? 'left' : 'right';\n tbPopObj.dataBind();\n tbPopObj.show(config);\n }\n };\n Tab.prototype.bindDraggable = function () {\n var _this = this;\n if (this.allowDragAndDrop) {\n var tabHeader = this.element.querySelector('.' + CLS_HEADER);\n if (tabHeader) {\n var items = Array.prototype.slice.call(tabHeader.querySelectorAll('.' + CLS_TB_ITEM));\n items.forEach(function (element) {\n _this.initializeDrag(element);\n });\n }\n }\n };\n Tab.prototype.wireEvents = function () {\n this.bindDraggable();\n window.addEventListener('resize', this.resizeContext);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'keydown', this.spaceKeyDown, this);\n if (!isNOU(this.cntEle)) {\n this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n }\n this.keyModule = new KeyboardEvents(this.element, { keyAction: this.keyHandler.bind(this), keyConfigs: this.keyConfigs });\n this.tabKeyModule = new KeyboardEvents(this.element, {\n keyAction: this.keyHandler.bind(this),\n keyConfigs: { openPopup: 'shift+f10', tab: 'tab', shiftTab: 'shift+tab' },\n eventName: 'keydown'\n });\n };\n Tab.prototype.unWireEvents = function () {\n if (!isNOU(this.keyModule)) {\n this.keyModule.destroy();\n }\n if (!isNOU(this.tabKeyModule)) {\n this.tabKeyModule.destroy();\n }\n if (!isNOU(this.cntEle) && !isNOU(this.touchModule)) {\n this.touchModule.destroy();\n this.touchModule = null;\n }\n window.removeEventListener('resize', this.resizeContext);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'keydown', this.spaceKeyDown);\n this.element.classList.remove(CLS_RTL);\n this.element.classList.remove(CLS_FOCUS);\n };\n Tab.prototype.clickHandler = function (args) {\n this.element.classList.remove(CLS_FOCUS);\n var trg = args.originalEvent.target;\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n var trgIndex = this.getEleIndex(trgParent);\n if (trg.classList.contains(CLS_ICON_CLOSE)) {\n this.removeTab(trgIndex);\n }\n else if (this.isVertical() && closest(trg, '.' + CLS_HOR_NAV)) {\n this.showPopup(this.show);\n }\n else {\n this.isPopup = false;\n if (!isNOU(trgParent) && (trgIndex !== this.selectedItem)) {\n this.selectTab(trgIndex, args.originalEvent, true);\n }\n }\n };\n Tab.prototype.swipeHandler = function (e) {\n if (e.velocity < 3 && isNOU(e.originalEvent.changedTouches)) {\n return;\n }\n if (this.isNested) {\n this.element.setAttribute('data-swipe', 'true');\n }\n var nestedTab = this.element.querySelector('[data-swipe=\"true\"]');\n if (nestedTab) {\n nestedTab.removeAttribute('data-swipe');\n return;\n }\n this.isSwiped = true;\n if (e.swipeDirection === 'Right' && this.selectedItem !== 0) {\n for (var k = this.selectedItem - 1; k >= 0; k--) {\n if (!this.tbItem[k].classList.contains(CLS_HIDDEN)) {\n this.selectTab(k, null, true);\n break;\n }\n }\n }\n else if (e.swipeDirection === 'Left' && (this.selectedItem !== selectAll('.' + CLS_TB_ITEM, this.element).length - 1)) {\n for (var i = this.selectedItem + 1; i < this.tbItem.length; i++) {\n if (!this.tbItem[i].classList.contains(CLS_HIDDEN)) {\n this.selectTab(i, null, true);\n break;\n }\n }\n }\n this.isSwiped = false;\n };\n Tab.prototype.spaceKeyDown = function (e) {\n if ((e.keyCode === 32 && e.which === 32) || (e.keyCode === 35 && e.which === 35)) {\n var clstHead = closest(e.target, '.' + CLS_HEADER);\n if (!isNOU(clstHead)) {\n e.preventDefault();\n }\n }\n };\n Tab.prototype.keyHandler = function (e) {\n if (this.element.classList.contains(CLS_DISABLE)) {\n return;\n }\n this.element.classList.add(CLS_FOCUS);\n var trg = e.target;\n var tabHeader = this.getTabHeader();\n var actEle = select('.' + CLS_ACTIVE, tabHeader);\n this.popEle = select('.' + CLS_TB_POP, tabHeader);\n if (!isNOU(this.popEle)) {\n this.popObj = this.popEle.ej2_instances[0];\n }\n var item = closest(document.activeElement, '.' + CLS_TB_ITEM);\n var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n switch (e.action) {\n case 'space':\n case 'enter':\n if (trg.parentElement.classList.contains(CLS_DISABLE)) {\n return;\n }\n if (e.action === 'enter' && trg.classList.contains('e-hor-nav')) {\n this.showPopup(this.show);\n break;\n }\n this.keyPressed(trg);\n break;\n case 'tab':\n case 'shiftTab':\n if (trg.classList.contains(CLS_WRAP)\n && closest(trg, '.' + CLS_TB_ITEM).classList.contains(CLS_ACTIVE) === false) {\n trg.setAttribute('tabindex', trg.getAttribute('data-tabindex'));\n }\n if (this.popObj && isVisible(this.popObj.element)) {\n this.popObj.hide(this.hide);\n }\n if (!isNOU(actEle) && actEle.children.item(0).getAttribute('tabindex') === '-1') {\n actEle.children.item(0).setAttribute('tabindex', '0');\n }\n break;\n case 'moveLeft':\n case 'moveRight':\n if (!isNOU(item)) {\n this.refreshItemVisibility(item);\n }\n break;\n case 'openPopup':\n e.preventDefault();\n if (!isNOU(this.popEle) && this.popEle.classList.contains(CLS_POPUP_CLOSE)) {\n this.popObj.show(this.show);\n }\n break;\n case 'delete':\n if (this.showCloseButton === true && !isNOU(trgParent)) {\n var nxtSib = trgParent.nextSibling;\n if (!isNOU(nxtSib) && nxtSib.classList.contains(CLS_TB_ITEM)) {\n nxtSib.firstElementChild.focus();\n }\n this.removeTab(this.getEleIndex(trgParent));\n }\n this.setActiveBorder();\n break;\n }\n };\n Tab.prototype.refreshItemVisibility = function (target) {\n var scrCnt = select('.' + this.scrCntClass, this.tbItems);\n if (!this.isVertical() && !isNOU(scrCnt)) {\n var scrBar = select('.e-hscroll-bar', this.tbItems);\n var scrStart = scrBar.scrollLeft;\n var scrEnd = scrStart + scrBar.offsetWidth;\n var eleStart = target.offsetLeft;\n var eleWidth = target.offsetWidth;\n var eleEnd = target.offsetLeft + target.offsetWidth;\n if ((scrStart < eleStart) && (scrEnd < eleEnd)) {\n var eleViewRange = scrEnd - eleStart;\n scrBar.scrollLeft = scrStart + (eleWidth - eleViewRange);\n }\n else {\n if ((scrStart > eleStart) && (scrEnd > eleEnd)) {\n var eleViewRange = eleEnd - scrStart;\n scrBar.scrollLeft = scrStart - (eleWidth - eleViewRange);\n }\n }\n }\n else {\n return;\n }\n };\n Tab.prototype.getIndexFromEle = function (id) {\n return parseInt(id.substring(id.lastIndexOf('_') + 1), 10);\n };\n Tab.prototype.hoverHandler = function (e) {\n var trg = e.target;\n if (!isNOU(trg.classList) && trg.classList.contains(CLS_ICON_CLOSE)) {\n trg.setAttribute('title', new L10n('tab', { closeButtonTitle: this.title }, this.locale).getConstant('closeButtonTitle'));\n }\n };\n Tab.prototype.evalOnPropertyChangeItems = function (newProp, oldProp) {\n var _this = this;\n if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n var changedProp = Object.keys(newProp.items);\n for (var i = 0; i < changedProp.length; i++) {\n var index = parseInt(Object.keys(newProp.items)[i], 10);\n var properties = Object.keys(newProp.items[index]);\n for (var j = 0; j < properties.length; j++) {\n var oldVal = Object(oldProp.items[index])[properties[j]];\n var newVal = Object(newProp.items[index])[properties[j]];\n var hdr = this.element.querySelectorAll('.' + CLS_TB_ITEM)[index];\n var itemIndex = void 0;\n if (hdr && !isNOU(hdr.id) && hdr.id !== '') {\n itemIndex = this.getIndexFromEle(hdr.id);\n }\n else {\n itemIndex = index;\n }\n var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + this.tabId + '_' + itemIndex, this.element);\n var cntItem = select('.' + CLS_CONTENT + ' #' + CLS_CONTENT + this.tabId + '_' + itemIndex, this.element);\n if (properties[j] === 'header' || properties[j] === 'headerTemplate') {\n var icon = (isNOU(this.items[index].header) ||\n isNOU(this.items[index].header.iconCss)) ? '' : this.items[index].header.iconCss;\n var textVal = this.items[index].headerTemplate || this.items[index].header.text;\n if (properties[j] === 'headerTemplate') {\n this.clearTabTemplate(hdrItem, properties[j], CLS_TB_ITEM);\n }\n if ((textVal === '') && (icon === '')) {\n this.removeTab(index);\n }\n else {\n this.tbId = hdr.id;\n var arr = [];\n arr.push(this.items[index]);\n this.items.splice(index, 1);\n this.itemIndexArray.splice(index, 1);\n this.tbObj.items.splice(index, 1);\n var isHiddenEle = hdrItem.classList.contains(CLS_HIDDEN);\n detach(hdrItem);\n this.isReplace = true;\n this.addTab(arr, index);\n if (isHiddenEle) {\n this.hideTab(index);\n }\n this.isReplace = false;\n }\n }\n if (properties[j] === 'content' && !isNOU(cntItem)) {\n var strVal = typeof newVal === 'string' || isNOU(newVal.innerHTML);\n if (strVal && (newVal[0] === '.' || newVal[0] === '#') && newVal.length) {\n var eleVal = document.querySelector(newVal);\n cntItem.appendChild(eleVal);\n eleVal.style.display = '';\n }\n else if (newVal === '' && oldVal[0] === '#') {\n document.body.appendChild(this.element.querySelector(oldVal)).style.display = 'none';\n cntItem.innerHTML = newVal;\n }\n else if (this.isAngular || this.isReact) {\n this.clearTabTemplate(cntItem, properties[j], CLS_ITEM);\n cntItem.innerHTML = '';\n this.templateCompile(cntItem, newVal, index);\n }\n else if (typeof newVal !== 'function') {\n cntItem.innerHTML = newVal;\n }\n }\n if (properties[j] === 'cssClass') {\n if (!isNOU(hdrItem)) {\n hdrItem.classList.remove(oldVal);\n hdrItem.classList.add(newVal);\n }\n if (!isNOU(cntItem)) {\n cntItem.classList.remove(oldVal);\n cntItem.classList.add(newVal);\n }\n }\n if (properties[j] === 'disabled') {\n this.enableTab(index, ((newVal === true) ? false : true));\n }\n if (properties[j] === 'visible') {\n this.hideTab(index, ((newVal === true) ? false : true));\n }\n }\n }\n if (this.isReact && this.portals && this.portals.length > 0) {\n this.renderReactTemplates(function () {\n _this.refreshActiveTabBorder();\n });\n }\n }\n else {\n this.lastIndex = 0;\n if (isNOU(this.tbObj)) {\n this.reRenderItems();\n }\n else {\n if (this.isReact || this.isAngular) {\n this.clearTemplate();\n }\n this.setItems(newProp.items);\n if (this.templateEle.length > 0) {\n this.expTemplateContent();\n }\n this.templateEle = [];\n var selectElement = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n while (selectElement.firstElementChild) {\n detach(selectElement.firstElementChild);\n }\n this.select(this.selectedItem);\n this.draggableItems = [];\n this.bindDraggable();\n }\n }\n };\n Tab.prototype.clearTabTemplate = function (templateEle, templateName, className) {\n if (!this.clearTemplates) {\n return;\n }\n if (this.registeredTemplate && this.registeredTemplate[templateName]) {\n var registeredTemplates = this.registeredTemplate;\n for (var index = 0; index < registeredTemplates[templateName].length; index++) {\n var registeredItem = registeredTemplates[templateName][index].rootNodes[0];\n var closestItem = closest(registeredItem, '.' + className);\n if (!isNullOrUndefined(closestItem) && closestItem === templateEle) {\n this.clearTemplate([templateName], [registeredTemplates[templateName][index]]);\n break;\n }\n }\n }\n else if (this.portals && this.portals.length > 0) {\n var portals = this.portals;\n for (var index = 0; index < portals.length; index++) {\n var portalItem = portals[index];\n var closestItem = closest(portalItem.containerInfo, '.' + className);\n if (!isNullOrUndefined(closestItem) && closestItem === templateEle) {\n this.clearTemplate([templateName], index);\n break;\n }\n }\n }\n };\n Tab.prototype.initializeDrag = function (target) {\n var _this = this;\n var dragObj = new Draggable(target, {\n dragArea: this.dragArea,\n dragTarget: '.' + CLS_TB_ITEM,\n clone: true,\n helper: this.helper.bind(this),\n dragStart: this.itemDragStart.bind(this),\n drag: function (e) {\n var dragIndex = _this.getEleIndex(_this.dragItem);\n var dropIndex;\n var dropItem;\n var dragArgs = {\n draggedItem: _this.dragItem,\n event: e.event,\n target: e.target,\n droppedItem: e.target.closest('.' + CLS_TB_ITEM),\n clonedElement: _this.cloneElement,\n index: dragIndex\n };\n if (!isNOU(e.target.closest('.' + CLS_TAB)) && !e.target.closest('.' + CLS_TAB).isEqualNode(_this.element) &&\n _this.dragArea !== '.' + CLS_HEADER) {\n _this.trigger('dragging', dragArgs);\n }\n else {\n if (!(e.target.closest(_this.dragArea)) && _this.overflowMode !== 'Popup') {\n document.body.style.cursor = 'not-allowed';\n addClass([_this.cloneElement], CLS_HIDDEN);\n if (_this.dragItem.classList.contains(CLS_HIDDEN)) {\n removeClass([_this.dragItem], CLS_HIDDEN);\n }\n _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'visible';\n }\n else {\n document.body.style.cursor = '';\n _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'hidden';\n if (_this.cloneElement.classList.contains(CLS_HIDDEN)) {\n removeClass([_this.cloneElement], CLS_HIDDEN);\n }\n }\n if (_this.overflowMode === 'Scrollable' && !isNOU(_this.element.querySelector('.e-hscroll'))) {\n var scrollRightNavEle = _this.element.querySelector('.e-scroll-right-nav');\n var scrollLeftNavEle = _this.element.querySelector('.e-scroll-left-nav');\n var hscrollBar = _this.element.querySelector('.e-hscroll-bar');\n if (!isNOU(scrollRightNavEle) && Math.abs((scrollRightNavEle.offsetWidth / 2) +\n scrollRightNavEle.offsetLeft) > _this.cloneElement.offsetLeft + _this.cloneElement.offsetWidth) {\n hscrollBar.scrollLeft -= 10;\n }\n if (!isNOU(scrollLeftNavEle) && Math.abs((scrollLeftNavEle.offsetLeft + scrollLeftNavEle.offsetWidth) -\n _this.cloneElement.offsetLeft) > (scrollLeftNavEle.offsetWidth / 2)) {\n hscrollBar.scrollLeft += 10;\n }\n }\n _this.cloneElement.style.pointerEvents = 'none';\n dropItem = closest(e.target, '.' + CLS_TB_ITEM + '.e-draggable');\n var scrollContentWidth = 0;\n if (_this.overflowMode === 'Scrollable' && !isNOU(_this.element.querySelector('.e-hscroll'))) {\n scrollContentWidth = _this.element.querySelector('.e-hscroll-content').offsetWidth;\n }\n if (dropItem != null && !dropItem.isSameNode(_this.dragItem) &&\n dropItem.closest('.' + CLS_TAB).isSameNode(_this.dragItem.closest('.' + CLS_TAB))) {\n dropIndex = _this.getEleIndex(dropItem);\n if (dropIndex < dragIndex &&\n (Math.abs((dropItem.offsetLeft + dropItem.offsetWidth) -\n _this.cloneElement.offsetLeft) > (dropItem.offsetWidth / 2))) {\n _this.dragAction(dropItem, dragIndex, dropIndex);\n }\n if (dropIndex > dragIndex &&\n (Math.abs(dropItem.offsetWidth / 2) + dropItem.offsetLeft -\n scrollContentWidth) < _this.cloneElement.offsetLeft + _this.cloneElement.offsetWidth) {\n _this.dragAction(dropItem, dragIndex, dropIndex);\n }\n }\n _this.droppedIndex = _this.getEleIndex(_this.dragItem);\n _this.trigger('dragging', dragArgs);\n }\n },\n dragStop: this.itemDragStop.bind(this)\n });\n this.draggableItems.push(dragObj);\n };\n Tab.prototype.helper = function (e) {\n this.cloneElement = this.createElement('div');\n if (e.element) {\n this.cloneElement = (e.element.cloneNode(true));\n addClass([this.cloneElement], 'e-tab-clone-element');\n if (this.element.querySelector('.' + CLS_HEADER).classList.contains(CLS_CLOSE_SHOW)) {\n addClass([this.cloneElement], CLS_CLOSE_SHOW);\n }\n removeClass([this.cloneElement.querySelector('.' + CLS_WRAP)], 'e-ripple');\n if (!isNOU(this.cloneElement.querySelector('.e-ripple-element'))) {\n remove(this.cloneElement.querySelector('.e-ripple-element'));\n }\n document.body.appendChild(this.cloneElement);\n }\n return this.cloneElement;\n };\n Tab.prototype.itemDragStart = function (e) {\n var _this = this;\n this.draggingItems = this.items.map(function (x) { return x; });\n this.dragItem = e.element;\n var dragArgs = {\n draggedItem: e.element,\n event: e.event,\n target: e.target,\n droppedItem: null,\n index: this.getEleIndex(this.dragItem),\n clonedElement: this.cloneElement,\n cancel: false\n };\n this.trigger('onDragStart', dragArgs, function (tabItemDragArgs) {\n if (tabItemDragArgs.cancel) {\n var dragObj = e.element.ej2_instances[0];\n if (!isNullOrUndefined(dragObj)) {\n dragObj.intDestroy(e.event);\n }\n detach(_this.cloneElement);\n }\n else {\n _this.removeActiveClass();\n addClass([_this.tbItems.querySelector('.' + CLS_INDICATOR)], CLS_HIDDEN);\n _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'hidden';\n }\n });\n };\n Tab.prototype.dragAction = function (dropItem, dragsIndex, dropIndex) {\n if (this.items.length > 0) {\n var item = this.draggingItems[dragsIndex];\n this.draggingItems.splice(dragsIndex, 1);\n this.draggingItems.splice(dropIndex, 0, item);\n }\n if (this.overflowMode === 'MultiRow') {\n dropItem.parentNode.insertBefore(this.dragItem, dropItem.nextElementSibling);\n }\n if (dragsIndex > dropIndex) {\n if (!(this.dragItem.parentElement).isSameNode(dropItem.parentElement)) {\n if (this.overflowMode === 'Extended') {\n if (dropItem.isSameNode(dropItem.parentElement.lastChild)) {\n var popupContainer = this.dragItem.parentNode;\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n popupContainer.insertBefore(dropItem.parentElement.lastChild, popupContainer.childNodes[0]);\n }\n else {\n this.dragItem.parentNode.insertBefore((dropItem.parentElement.lastChild), this.dragItem.parentElement.childNodes[0]);\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n }\n }\n else {\n var lastEle = (dropItem.parentElement).lastChild;\n if (dropItem.isSameNode(lastEle)) {\n var popupContainer = this.dragItem.parentNode;\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n popupContainer.insertBefore(lastEle, popupContainer.childNodes[0]);\n }\n else {\n this.dragItem.parentNode.insertBefore((dropItem.parentElement).lastChild, this.dragItem.parentElement.childNodes[0]);\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n }\n }\n }\n else {\n this.dragItem.parentNode.insertBefore(this.dragItem, dropItem);\n }\n }\n if (dragsIndex < dropIndex) {\n if (!(this.dragItem.parentElement).isSameNode(dropItem.parentElement)) {\n if (this.overflowMode === 'Extended') {\n this.dragItem.parentElement.appendChild(dropItem.parentElement.firstElementChild);\n dropItem.parentNode.insertBefore(this.dragItem, dropItem.nextSibling);\n }\n else {\n this.dragItem.parentNode.insertBefore((dropItem.parentElement).lastChild, this.dragItem.parentElement.childNodes[0]);\n dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n }\n }\n else {\n this.dragItem.parentNode.insertBefore(this.dragItem, dropItem.nextElementSibling);\n }\n }\n };\n Tab.prototype.itemDragStop = function (e) {\n var _this = this;\n detach(this.cloneElement);\n this.cloneElement = null;\n this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'visible';\n document.body.style.cursor = '';\n var dragStopArgs = {\n draggedItem: this.dragItem,\n event: e.event,\n target: e.target,\n droppedItem: this.tbItem[this.droppedIndex],\n clonedElement: null,\n index: this.droppedIndex,\n cancel: false\n };\n this.trigger('dragged', dragStopArgs, function (tabItemDropArgs) {\n if (tabItemDropArgs.cancel) {\n _this.refresh();\n }\n else {\n if (_this.items.length > 0 && _this.draggingItems.length > 0) {\n _this.items = _this.draggingItems;\n _this.selectedItem = _this.droppedIndex;\n _this.refresh();\n }\n else {\n _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = '';\n removeClass([_this.tbItems.querySelector('.' + CLS_INDICATOR)], CLS_HIDDEN);\n _this.selectTab(_this.droppedIndex, null, true);\n }\n }\n });\n this.dragItem = null;\n };\n /**\n * Enables or disables the specified Tab item. On passing value as `false`, the item will be disabled.\n *\n * @param {number} index - Index value of target Tab item.\n * @param {boolean} value - Boolean value that determines whether the command should be enabled or disabled.\n * By default, isEnable is true.\n * @returns {void}.\n */\n Tab.prototype.enableTab = function (index, value) {\n var tbItems = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(tbItems)) {\n return;\n }\n if (value === true) {\n tbItems.classList.remove(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstElementChild.setAttribute('tabindex', tbItems.firstElementChild.getAttribute('data-tabindex'));\n }\n else {\n tbItems.classList.add(CLS_DISABLE, CLS_OVERLAY);\n tbItems.firstElementChild.removeAttribute('tabindex');\n if (tbItems.classList.contains(CLS_ACTIVE)) {\n this.select(index + 1);\n }\n }\n if (!isNOU(this.items[index])) {\n this.items[index].disabled = !value;\n this.dataBind();\n }\n tbItems.firstElementChild.setAttribute('aria-disabled', (value === true) ? 'false' : 'true');\n };\n /**\n * Adds new items to the Tab that accepts an array as Tab items.\n *\n * @param {TabItemModel[]} items - An array of item that is added to the Tab.\n * @param {number} index - Number value that determines where the items to be added. By default, index is 0.\n * @returns {void}.\n */\n Tab.prototype.addTab = function (items, index) {\n var _this = this;\n var addArgs = { addedItems: items, cancel: false };\n if (!this.isReplace) {\n this.trigger('adding', addArgs, function (tabAddingArgs) {\n if (!tabAddingArgs.cancel) {\n _this.addingTabContent(items, index);\n }\n });\n }\n else {\n this.addingTabContent(items, index);\n }\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n Tab.prototype.addingTabContent = function (items, index) {\n var _this = this;\n var lastEleIndex = 0;\n this.hdrEle = select('.' + CLS_HEADER, this.element);\n if (isNOU(this.hdrEle)) {\n this.items = items;\n this.reRenderItems();\n this.bindDraggable();\n }\n else {\n var itemsCount = selectAll('.e-tab-header .' + CLS_TB_ITEM, this.element).length;\n if (itemsCount !== 0) {\n lastEleIndex = this.lastIndex + 1;\n }\n if (isNOU(index)) {\n index = itemsCount - 1;\n }\n if (itemsCount < index || index < 0 || isNaN(index)) {\n return;\n }\n if (itemsCount === 0 && !isNOU(this.hdrEle)) {\n this.hdrEle.style.display = '';\n }\n if (!isNOU(this.bdrLine)) {\n this.bdrLine.classList.add(CLS_HIDDEN);\n }\n this.tbItems = select('.' + CLS_TB_ITEMS, this.getTabHeader());\n this.isAdd = true;\n var tabItems_2 = this.parseObject(items, index);\n this.isAdd = false;\n var i_1 = 0;\n var textValue_1;\n items.forEach(function (item, place) {\n textValue_1 = item.headerTemplate || item.header.text;\n if (!(isNOU(item.headerTemplate || item.header) || isNOU(textValue_1) ||\n (textValue_1.length === 0) && !isNOU(item.header) && isNOU(item.header.iconCss))) {\n if (tabItems_2[place]) {\n if (isNOU(item.id)) {\n item.id = CLS_ITEM + _this.tabId + '_' + TABITEMPREFIX + (lastEleIndex + place).toString();\n }\n tabItems_2[place].htmlAttributes['data-id'] = item.id;\n }\n _this.items.splice((index + i_1), 0, item);\n i_1++;\n }\n if (_this.isTemplate && !isNOU(item.header) && !isNOU(item.header.text)) {\n var no = lastEleIndex + place;\n var ele = _this.createElement('div', {\n id: CLS_CONTENT + _this.tabId + '_' + no, className: CLS_ITEM,\n attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + no }\n });\n _this.cntEle.insertBefore(ele, _this.cntEle.children[(index + place)]);\n var eleTrg = _this.getTrgContent(_this.cntEle, no.toString());\n _this.getContent(eleTrg, item.content, 'render', index);\n }\n });\n this.tbObj.addItems(tabItems_2, index);\n if (!this.isReplace) {\n this.trigger('added', { addedItems: items });\n }\n if (this.selectedItem === index) {\n this.select(index);\n }\n else {\n this.setActiveBorder();\n this.tbItem = selectAll('.' + CLS_TB_ITEM, this.getTabHeader());\n }\n this.bindDraggable();\n }\n };\n /**\n * Removes the items in the Tab from the specified index.\n *\n * @param {number} index - Index of target item that is going to be removed.\n * @returns {void}.\n */\n Tab.prototype.removeTab = function (index) {\n var _this = this;\n var trg = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(trg)) {\n return;\n }\n var removeArgs = { removedItem: trg, removedIndex: index, cancel: false };\n this.trigger('removing', removeArgs, function (tabRemovingArgs) {\n if (!tabRemovingArgs.cancel) {\n var header = select('#' + CLS_ITEM + _this.tabId + '_' + _this.extIndex(trg.id), select('.' + CLS_TB_ITEMS, _this.element));\n if (!isNOU(header)) {\n _this.clearTabTemplate(header, 'headerTemplate', CLS_TB_ITEM);\n }\n _this.tbObj.removeItems(index);\n if (_this.allowDragAndDrop && (index !== Array.prototype.indexOf.call(_this.itemIndexArray, trg.id))) {\n index = Array.prototype.indexOf.call(_this.itemIndexArray, trg.id);\n }\n var targetEleIndex = _this.itemIndexArray.indexOf(trg.id);\n _this.items.splice(targetEleIndex, 1);\n _this.itemIndexArray.splice(targetEleIndex, 1);\n _this.refreshActiveBorder();\n var cntTrg = select('#' + CLS_CONTENT + _this.tabId + '_' + _this.extIndex(trg.id), select('.' + CLS_CONTENT, _this.element));\n if (!isNOU(cntTrg)) {\n _this.clearTabTemplate(cntTrg, 'content', CLS_ITEM);\n detach(cntTrg);\n }\n _this.trigger('removed', tabRemovingArgs);\n if (_this.draggableItems && _this.draggableItems.length > 0) {\n _this.draggableItems[index].destroy();\n _this.draggableItems[index] = null;\n _this.draggableItems.splice(index, 1);\n }\n if (trg.classList.contains(CLS_ACTIVE)) {\n index = (index > selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', _this.element).length - 1) ? index - 1 : index;\n _this.enableAnimation = false;\n _this.selectedItem = index;\n _this.select(index);\n }\n else if (index !== _this.selectedItem) {\n if (index < _this.selectedItem) {\n index = _this.itemIndexArray.indexOf(_this.tbItem[_this.selectedItem].id);\n _this.setProperties({ selectedItem: index > -1 ? index : _this.selectedItem }, true);\n _this.prevIndex = _this.selectedItem;\n }\n _this.tbItem = selectAll('.' + CLS_TB_ITEM, _this.getTabHeader());\n }\n if (selectAll('.' + CLS_TB_ITEM, _this.element).length === 0) {\n _this.hdrEle.style.display = 'none';\n }\n _this.enableAnimation = true;\n }\n });\n };\n /**\n * Shows or hides the Tab that is in the specified index.\n *\n * @param {number} index - Index value of target item.\n * @param {boolean} value - Based on this Boolean value, item will be hide (false) or show (true). By default, value is true.\n * @returns {void}.\n */\n Tab.prototype.hideTab = function (index, value) {\n var items;\n var item = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n if (isNOU(item)) {\n return;\n }\n if (isNOU(value)) {\n value = true;\n }\n this.bdrLine.classList.add(CLS_HIDDEN);\n if (value === true) {\n item.classList.add(CLS_HIDDEN);\n items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n if (items.length !== 0 && item.classList.contains(CLS_ACTIVE)) {\n if (index !== 0) {\n for (var i = index - 1; i >= 0; i--) {\n if (!this.tbItem[i].classList.contains(CLS_HIDDEN)) {\n this.select(i);\n break;\n }\n else if (i === 0) {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains(CLS_HIDDEN)) {\n this.select(k);\n break;\n }\n }\n }\n }\n }\n else {\n for (var k = index + 1; k < this.tbItem.length; k++) {\n if (!this.tbItem[k].classList.contains(CLS_HIDDEN)) {\n this.select(k);\n break;\n }\n }\n }\n }\n else if (items.length === 0) {\n this.element.classList.add(CLS_HIDDEN);\n }\n }\n else {\n this.element.classList.remove(CLS_HIDDEN);\n items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n item.classList.remove(CLS_HIDDEN);\n if (items.length === 0) {\n this.select(index);\n }\n }\n this.setActiveBorder();\n if (!isNullOrUndefined(item.firstElementChild)) {\n item.firstElementChild.setAttribute('aria-hidden', '' + value);\n }\n if (this.overflowMode === 'Popup' && this.tbObj) {\n this.tbObj.refreshOverflow();\n }\n };\n Tab.prototype.selectTab = function (args, event, isInteracted) {\n if (event === void 0) { event = null; }\n if (isInteracted === void 0) { isInteracted = false; }\n this.isInteracted = isInteracted;\n this.select(args, event);\n };\n /**\n * Specifies the index or HTMLElement to select an item from the Tab.\n *\n * @param {number | HTMLElement} args - Index or DOM element is used for selecting an item from the Tab.\n * @param {Event} event - An event which takes place in DOM.\n * @returns {void}\n */\n Tab.prototype.select = function (args, event) {\n var _this = this;\n var tabHeader = this.getTabHeader();\n this.tbItems = select('.' + CLS_TB_ITEMS, tabHeader);\n this.tbItem = selectAll('.' + CLS_TB_ITEM, tabHeader);\n this.content = select('.' + CLS_CONTENT, this.element);\n this.prevItem = this.tbItem[this.prevIndex];\n if (isNOU(this.selectedItem) || (this.selectedItem < 0) || (this.tbItem.length <= this.selectedItem) || isNaN(this.selectedItem)) {\n this.selectedItem = 0;\n }\n else {\n this.selectedID = this.extIndex(this.tbItem[this.selectedItem].id);\n }\n var trg = this.tbItem[args];\n if (isNOU(trg)) {\n this.selectedID = '0';\n }\n else {\n this.selectingID = this.extIndex(trg.id);\n }\n if (!isNOU(this.prevItem) && !this.prevItem.classList.contains(CLS_DISABLE)) {\n this.prevItem.children.item(0).setAttribute('tabindex', this.prevItem.firstElementChild.getAttribute('tabindex'));\n }\n var eventArg = {\n event: event,\n previousItem: this.prevItem,\n previousIndex: this.prevIndex,\n selectedItem: this.tbItem[this.selectedItem],\n selectedIndex: this.selectedItem,\n selectedContent: !isNOU(this.content) ?\n select('#' + CLS_CONTENT + this.tabId + '_' + this.selectedID, this.content) : null,\n selectingItem: trg,\n selectingIndex: args,\n selectingContent: !isNOU(this.content) ?\n select('#' + CLS_CONTENT + this.tabId + '_' + this.selectingID, this.content) : null,\n isSwiped: this.isSwiped,\n isInteracted: this.isInteracted,\n cancel: false\n };\n if (!this.initRender) {\n this.trigger('selecting', eventArg, function (selectArgs) {\n if (!selectArgs.cancel) {\n _this.selectingContent(args, _this.isInteracted);\n }\n });\n }\n else {\n this.selectingContent(args, this.isInteracted);\n }\n this.isInteracted = false;\n };\n Tab.prototype.selectingContent = function (args, isInteracted) {\n if (typeof args === 'number') {\n if (!isNOU(this.tbItem[args]) && (this.tbItem[args].classList.contains(CLS_DISABLE) ||\n this.tbItem[args].classList.contains(CLS_HIDDEN))) {\n for (var i = args + 1; i < this.items.length; i++) {\n if (this.items[i].disabled === false && this.items[i].visible === true) {\n args = i;\n break;\n }\n else {\n args = 0;\n }\n }\n }\n if (this.tbItem.length > args && args >= 0 && !isNaN(args)) {\n this.prevIndex = this.selectedItem;\n this.prevItem = this.tbItem[this.prevIndex];\n if (this.tbItem[args].classList.contains(CLS_TB_POPUP) && this.reorderActiveTab) {\n this.setActive(this.popupHandler(this.tbItem[args]), null, isInteracted);\n if ((!isNOU(this.items) && this.items.length > 0) && this.allowDragAndDrop) {\n this.tbItem = selectAll('.' + CLS_TB_ITEMS + ' .' + CLS_TB_ITEM, this.hdrEle);\n var item = this.items[args];\n this.items.splice(args, 1);\n this.items.splice(this.tbItem.length - 1, 0, item);\n var itemId = this.itemIndexArray[args];\n this.itemIndexArray.splice(args, 1);\n this.itemIndexArray.splice(this.tbItem.length - 1, 0, itemId);\n }\n }\n else {\n this.setActive(args, null, isInteracted);\n }\n }\n else {\n this.setActive(0, null, isInteracted);\n }\n }\n else if (args instanceof (HTMLElement)) {\n this.setActive(this.getEleIndex(args), null, isInteracted);\n }\n };\n /**\n * Gets the item index from the Tab.\n *\n * @param {string} tabItemId - Item ID is used for getting index from the Tab.\n * @returns {number} - It returns item index.\n */\n Tab.prototype.getItemIndex = function (tabItemId) {\n var tabIndex;\n for (var i = 0; i < this.tbItem.length; i++) {\n var value = this.tbItem[i].getAttribute('data-id');\n if (tabItemId === value) {\n tabIndex = i;\n break;\n }\n }\n return tabIndex;\n };\n /**\n * Specifies the value to disable/enable the Tab component.\n * When set to `true`, the component will be disabled.\n *\n * @param {boolean} value - Based on this Boolean value, Tab will be enabled (false) or disabled (true).\n * @returns {void}.\n */\n Tab.prototype.disable = function (value) {\n this.setCssClass(this.element, CLS_DISABLE, value);\n this.element.setAttribute('aria-disabled', '' + value);\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - It returns the persisted state.\n */\n Tab.prototype.getPersistData = function () {\n return this.addOnPersist(['selectedItem', 'actEleId']);\n };\n /**\n * Returns the current module name.\n *\n * @returns {string} - It returns the current module name.\n * @private\n */\n Tab.prototype.getModuleName = function () {\n return 'tab';\n };\n /**\n * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n *\n * @param {TabModel} newProp - It contains the new value of data.\n * @param {TabModel} oldProp - It contains the old value of data.\n * @returns {void}\n * @private\n */\n Tab.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var sortedKeys = Object.keys(newProp).sort(function (a, b) {\n if (a === 'items')\n return -1;\n if (b === 'items')\n return 1;\n return 0;\n });\n for (var _i = 0, sortedKeys_1 = sortedKeys; _i < sortedKeys_1.length; _i++) {\n var prop = sortedKeys_1[_i];\n switch (prop) {\n case 'width':\n setStyle(this.element, { width: formatUnit(newProp.width) });\n break;\n case 'height':\n setStyle(this.element, { height: formatUnit(newProp.height) });\n this.setContentHeight(false);\n break;\n case 'cssClass':\n var headerEle = this.element.querySelector('.' + CLS_HEADER);\n if (oldProp.cssClass !== '' && !isNullOrUndefined(oldProp.cssClass)) {\n this.setCssClass(this.element, oldProp.cssClass, false);\n this.setCssClass(this.element, newProp.cssClass, true);\n if (!isNullOrUndefined(headerEle)) {\n this.setCssClass(headerEle, oldProp.cssClass, false);\n this.setCssClass(headerEle, newProp.cssClass, true);\n }\n }\n else {\n this.setCssClass(this.element, newProp.cssClass, true);\n if (!isNullOrUndefined(headerEle)) {\n this.setCssClass(headerEle, newProp.cssClass, true);\n }\n }\n break;\n case 'items':\n this.evalOnPropertyChangeItems(newProp, oldProp);\n break;\n case 'showCloseButton':\n this.setCloseButton(newProp.showCloseButton);\n break;\n case 'reorderActiveTab':\n this.refreshActiveTabBorder();\n break;\n case 'selectedItem':\n this.selectedItem = oldProp.selectedItem;\n this.select(newProp.selectedItem);\n break;\n case 'headerPlacement':\n this.changeOrientation(newProp.headerPlacement);\n break;\n case 'enableRtl':\n this.setRTL(newProp.enableRtl);\n break;\n case 'overflowMode':\n this.tbObj.overflowMode = newProp.overflowMode;\n this.tbObj.dataBind();\n this.refreshActiveTabBorder();\n break;\n case 'heightAdjustMode':\n this.setContentHeight(false);\n this.select(this.selectedItem);\n break;\n case 'scrollStep':\n if (this.tbObj) {\n this.tbObj.scrollStep = this.scrollStep;\n }\n break;\n case 'allowDragAndDrop':\n this.bindDraggable();\n break;\n case 'dragArea':\n if (this.allowDragAndDrop) {\n this.draggableItems.forEach(function (item) {\n item.dragArea = _this.dragArea;\n });\n this.refresh();\n }\n break;\n }\n }\n };\n /**\n * To refresh the active tab contents.\n *\n * @returns {void}\n */\n Tab.prototype.refreshActiveTab = function () {\n if (this.isReact && this.isTemplate) {\n this.clearTemplate();\n }\n if (!this.isTemplate) {\n if (this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE)) {\n detach(this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE).children[0]);\n detach(this.element.querySelector('.' + CLS_CONTENT).querySelector('.' + CLS_ACTIVE).children[0]);\n var item = this.items[this.selectedItem];\n var pos = (isNOU(item.header) || isNOU(item.header.iconPosition)) ? '' : item.header.iconPosition;\n var css = (isNOU(item.header) || isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n var text = item.headerTemplate || item.header.text;\n var txtWrap = this.createElement('div', { className: CLS_TEXT, attrs: { 'role': 'presentation' } });\n if (!isNOU(text.tagName)) {\n txtWrap.appendChild(text);\n }\n else {\n this.headerTextCompile(txtWrap, text, this.selectedItem);\n }\n var tEle = void 0;\n var icon = this.createElement('span', {\n className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n });\n var tConts = this.createElement('div', { className: CLS_TEXT_WRAP });\n tConts.appendChild(txtWrap);\n if ((text !== '' && text !== undefined) && css !== '') {\n if ((pos === 'left' || pos === 'top')) {\n tConts.insertBefore(icon, tConts.firstElementChild);\n }\n else {\n tConts.appendChild(icon);\n }\n tEle = txtWrap;\n this.isIconAlone = false;\n }\n else {\n tEle = ((css === '') ? txtWrap : icon);\n if (tEle === icon) {\n detach(txtWrap);\n tConts.appendChild(icon);\n this.isIconAlone = true;\n }\n }\n var tabIndex = isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString();\n var wrapAtt = (item.disabled) ? {} : { tabIndex: tabIndex, 'data-tabindex': tabIndex, role: 'tab', 'aria-selected': 'true', 'aria-disabled': 'false' };\n tConts.appendChild(this.btnCls.cloneNode(true));\n var wraper = this.createElement('div', { className: CLS_WRAP, attrs: wrapAtt });\n wraper.appendChild(tConts);\n if (pos === 'top' || pos === 'bottom') {\n this.element.classList.add('e-vertical-icon');\n }\n this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE).appendChild(wraper);\n var crElem = this.createElement('div');\n var cnt = item.content;\n var eleStr = void 0;\n if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n if (typeof cnt === 'string' && this.enableHtmlSanitizer) {\n cnt = SanitizeHtmlHelper.sanitize(cnt);\n }\n if (cnt[0] === '.' || cnt[0] === '#') {\n if (document.querySelectorAll(cnt).length) {\n var eleVal = document.querySelector(cnt);\n eleStr = eleVal.outerHTML.trim();\n crElem.appendChild(eleVal);\n eleVal.style.display = '';\n }\n else {\n this.compileElement(crElem, cnt, 'content', this.selectedItem);\n }\n }\n else {\n this.compileElement(crElem, cnt, 'content', this.selectedItem);\n }\n }\n else {\n crElem.appendChild(cnt);\n }\n if (!isNOU(eleStr)) {\n if (this.templateEle.indexOf(cnt.toString()) === -1) {\n this.templateEle.push(cnt.toString());\n }\n }\n this.element.querySelector('.' + CLS_ITEM + '.' + CLS_ACTIVE).appendChild(crElem);\n }\n }\n else {\n var tabItems = this.element.querySelector('.' + CLS_TB_ITEMS);\n var element = this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE);\n var index = this.getIndexFromEle(element.id);\n var header = element.innerText;\n var detachContent = this.element.querySelector('.' + CLS_CONTENT).querySelector('.' + CLS_ACTIVE).children[0];\n var mainContents = detachContent.innerHTML;\n detach(element);\n detach(detachContent);\n var attr = {\n className: CLS_TB_ITEM + ' ' + CLS_TEMPLATE + ' ' + CLS_ACTIVE, id: CLS_ITEM + this.tabId + '_' + index\n };\n var txtString = this.createElement('span', {\n className: CLS_TEXT, innerHTML: header, attrs: { 'role': 'presentation' }\n }).outerHTML;\n var conte = this.createElement('div', {\n className: CLS_TEXT_WRAP, innerHTML: txtString + this.btnCls.outerHTML\n }).outerHTML;\n var tabIndex = element.firstElementChild.getAttribute('data-tabindex');\n var wrap = this.createElement('div', {\n className: CLS_WRAP, innerHTML: conte,\n attrs: { tabIndex: tabIndex, 'data-tabindex': tabIndex, role: 'tab', 'aria-controls': CLS_CONTENT + this.tabId + '_' + index, 'aria-selected': 'true', 'aria-disabled': 'false' }\n });\n tabItems.insertBefore(this.createElement('div', attr), tabItems.children[index + 1]);\n this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE).appendChild(wrap);\n var crElem = this.createElement('div', { innerHTML: mainContents });\n this.element.querySelector('.' + CLS_CONTENT).querySelector('.' + CLS_ACTIVE).appendChild(crElem);\n }\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * To refresh the active tab indicator.\n *\n * @returns {void}\n */\n Tab.prototype.refreshActiveTabBorder = function () {\n var activeEle = select('.' + CLS_TB_ITEM + '.' + CLS_TB_POPUP + '.' + CLS_ACTIVE, this.element);\n if (!isNOU(activeEle) && this.reorderActiveTab) {\n this.select(this.getEleIndex(activeEle));\n }\n this.refreshActiveBorder();\n };\n __decorate([\n Collection([], TabItem)\n ], Tab.prototype, \"items\", void 0);\n __decorate([\n Property('100%')\n ], Tab.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tab.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Tab.prototype, \"cssClass\", void 0);\n __decorate([\n Property(0)\n ], Tab.prototype, \"selectedItem\", void 0);\n __decorate([\n Property('Top')\n ], Tab.prototype, \"headerPlacement\", void 0);\n __decorate([\n Property('Content')\n ], Tab.prototype, \"heightAdjustMode\", void 0);\n __decorate([\n Property('Scrollable')\n ], Tab.prototype, \"overflowMode\", void 0);\n __decorate([\n Property('Dynamic')\n ], Tab.prototype, \"loadOn\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], Tab.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"showCloseButton\", void 0);\n __decorate([\n Property(true)\n ], Tab.prototype, \"reorderActiveTab\", void 0);\n __decorate([\n Property()\n ], Tab.prototype, \"scrollStep\", void 0);\n __decorate([\n Property()\n ], Tab.prototype, \"dragArea\", void 0);\n __decorate([\n Property(false)\n ], Tab.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(true)\n ], Tab.prototype, \"clearTemplates\", void 0);\n __decorate([\n Complex({}, TabAnimationSettings)\n ], Tab.prototype, \"animation\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"adding\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"added\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selecting\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"removed\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"onDragStart\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"dragging\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"dragged\", void 0);\n __decorate([\n Event()\n ], Tab.prototype, \"destroyed\", void 0);\n Tab = __decorate([\n NotifyPropertyChanges\n ], Tab);\n return Tab;\n}(Component));\nexport { Tab };\n","import { detach, getUniqueID, rippleEffect, setValue, attributes } from '@syncfusion/ej2-base';\nimport { getValue, addClass, deleteObject } from '@syncfusion/ej2-base';\n/**\n * Initialize wrapper element for angular.\n *\n * @private\n *\n * @param {CreateElementArgs} createElement - Specifies created element args\n * @param {string} tag - Specifies tag name\n * @param {string} type - Specifies type name\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} WRAPPER - Specifies wrapper element\n * @param {string} role - Specifies role\n * @returns {HTMLInputElement} - Input Element\n */\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n var input = element;\n if (element.tagName === tag) {\n var ejInstance = getValue('ej2_instances', element);\n input = createElement('input', { attrs: { 'type': type } });\n var props = ['change', 'cssClass', 'label', 'labelPosition', 'id'];\n for (var index = 0, len = element.attributes.length; index < len; index++) {\n if (props.indexOf(element.attributes[index].nodeName) === -1) {\n input.setAttribute(element.attributes[index].nodeName, element.attributes[index].nodeValue);\n }\n }\n attributes(element, { 'class': WRAPPER });\n element.appendChild(input);\n element.classList.add(role);\n element.classList.remove(role);\n setValue('ej2_instances', ejInstance, input);\n deleteObject(element, 'ej2_instances');\n }\n return input;\n}\n/**\n * Get the text node.\n *\n * @param {HTMLElement} element - Specifies html element\n * @private\n * @returns {Node} - Text node.\n */\nexport function getTextNode(element) {\n var node;\n var childnode = element.childNodes;\n for (var i = 0; i < childnode.length; i++) {\n node = childnode[i];\n if (node.nodeType === 3) {\n return node;\n }\n }\n return null;\n}\n/**\n * Destroy the button components.\n *\n * @private\n * @param {Switch | CheckBox} ejInst - Specifies eJ2 Instance\n * @param {Element} wrapper - Specifies wrapper element\n * @param {string} tagName - Specifies tag name\n * @returns {void}\n */\nexport function destroy(ejInst, wrapper, tagName) {\n if (tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(ejInst.element, wrapper);\n detach(wrapper);\n ejInst.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n ejInst.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n ejInst.element = wrapper;\n }\n}\n/**\n * Initialize control pre rendering.\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies proxy\n * @param {string} control - Specifies control\n * @param {string} wrapper - Specifies wrapper element\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} moduleName - Specifies module name\n * @returns {void}\n */\nexport function preRender(proxy, control, wrapper, element, moduleName) {\n element = wrapperInitialize(proxy.createElement, control, 'checkbox', element, wrapper, moduleName);\n proxy.element = element;\n if (proxy.element.getAttribute('type') !== 'checkbox') {\n proxy.element.setAttribute('type', 'checkbox');\n }\n if (!proxy.element.id) {\n proxy.element.id = getUniqueID('e-' + moduleName);\n }\n}\n/**\n * Creates CheckBox component UI with theming and ripple support.\n *\n * @private\n * @param {CreateElementArgs} createElement - Specifies Created Element args\n * @param {boolean} enableRipple - Specifies ripple effect\n * @param {CheckBoxUtilModel} options - Specifies Checkbox util Model\n * @returns {Element} - Checkbox Element\n */\nexport function createCheckBox(createElement, enableRipple, options) {\n if (enableRipple === void 0) { enableRipple = false; }\n if (options === void 0) { options = {}; }\n var wrapper = createElement('div', { className: 'e-checkbox-wrapper e-css' });\n if (options.cssClass) {\n addClass([wrapper], options.cssClass.split(' '));\n }\n if (options.enableRtl) {\n wrapper.classList.add('e-rtl');\n }\n if (enableRipple) {\n var rippleSpan = createElement('span', { className: 'e-ripple-container' });\n rippleEffect(rippleSpan, { isCenterRipple: true, duration: 400 });\n wrapper.appendChild(rippleSpan);\n }\n var frameSpan = createElement('span', { className: 'e-frame e-icons' });\n if (options.checked) {\n frameSpan.classList.add('e-check');\n }\n wrapper.appendChild(frameSpan);\n if (options.label) {\n var labelSpan = createElement('span', { className: 'e-label' });\n if (options.disableHtmlEncode) {\n labelSpan.textContent = options.label;\n }\n else {\n labelSpan.innerHTML = options.label;\n }\n wrapper.appendChild(labelSpan);\n }\n return wrapper;\n}\n/**\n * Handles ripple mouse.\n *\n * @private\n * @param {MouseEvent} e - Specifies mouse event\n * @param {Element} rippleSpan - Specifies Ripple span element\n * @returns {void}\n */\nexport function rippleMouseHandler(e, rippleSpan) {\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(e.type, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n}\n/**\n * Append hidden input to given element\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies Proxy\n * @param {Element} wrap - Specifies Wrapper ELement\n * @returns {void}\n */\nexport function setHiddenInput(proxy, wrap) {\n if (proxy.element.getAttribute('ejs-for')) {\n wrap.appendChild(proxy.createElement('input', {\n attrs: { 'name': proxy.name || proxy.element.name, 'value': 'false', 'type': 'hidden' }\n }));\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, NotifyPropertyChanges, Component, isBlazor, isRippleEnabled } from '@syncfusion/ej2-base';\nimport { addClass, Event, detach, removeClass } from '@syncfusion/ej2-base';\nimport { rippleEffect, EventHandler, Observer, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { getTextNode } from '../common/common';\n/**\n * Defines the icon position of button.\n */\nexport var IconPosition;\n(function (IconPosition) {\n /**\n * Positions the Icon at the left of the text content in the Button.\n */\n IconPosition[\"Left\"] = \"Left\";\n /**\n * Positions the Icon at the right of the text content in the Button.\n */\n IconPosition[\"Right\"] = \"Right\";\n /**\n * Positions the Icon at the top of the text content in the Button.\n */\n IconPosition[\"Top\"] = \"Top\";\n /**\n * Positions the Icon at the bottom of the text content in the Button.\n */\n IconPosition[\"Bottom\"] = \"Bottom\";\n})(IconPosition || (IconPosition = {}));\nexport var buttonObserver = new Observer();\nvar cssClassName = {\n RTL: 'e-rtl',\n BUTTON: 'e-btn',\n PRIMARY: 'e-primary',\n ICONBTN: 'e-icon-btn'\n};\n/**\n * The Button is a graphical user interface element that triggers an event on its click action. It can contain a text, an image, or both.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Button = /** @class */ (function (_super) {\n __extends(Button, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {ButtonModel} options - Specifies the button model\n * @param {string|HTMLButtonElement} element - Specifies the target element\n */\n function Button(options, element) {\n return _super.call(this, options, element) || this;\n }\n Button.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Button.prototype.render = function () {\n this.initialize();\n this.removeRippleEffect = rippleEffect(this.element, { selector: '.' + cssClassName.BUTTON });\n this.renderComplete();\n };\n Button.prototype.initialize = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n if (!isBlazor() || (isBlazor() && this.getModuleName() !== 'progress-btn')) {\n if (this.content) {\n var tempContent = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.content) : this.content;\n this.element.innerHTML = tempContent;\n }\n this.setIconCss();\n }\n if (this.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n if (this.disabled) {\n this.controlStatus(this.disabled);\n }\n else {\n this.wireEvents();\n }\n };\n Button.prototype.controlStatus = function (disabled) {\n this.element.disabled = disabled;\n };\n Button.prototype.setIconCss = function () {\n if (this.iconCss) {\n var span = this.createElement('span', { className: 'e-btn-icon ' + this.iconCss });\n if (!this.element.textContent.trim()) {\n this.element.classList.add(cssClassName.ICONBTN);\n }\n else {\n span.classList.add('e-icon-' + this.iconPosition.toLowerCase());\n if (this.iconPosition === 'Top' || this.iconPosition === 'Bottom') {\n this.element.classList.add('e-' + this.iconPosition.toLowerCase() + '-icon-btn');\n }\n }\n var node = this.element.childNodes[0];\n if (node && (this.iconPosition === 'Left' || this.iconPosition === 'Top')) {\n this.element.insertBefore(span, node);\n }\n else {\n this.element.appendChild(span);\n }\n }\n };\n Button.prototype.wireEvents = function () {\n if (this.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n };\n Button.prototype.unWireEvents = function () {\n if (this.isToggle) {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n }\n };\n Button.prototype.btnClickHandler = function () {\n if (this.element.classList.contains('e-active')) {\n this.element.classList.remove('e-active');\n }\n else {\n this.element.classList.add('e-active');\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Button.prototype.destroy = function () {\n var classList = [cssClassName.PRIMARY, cssClassName.RTL, cssClassName.ICONBTN, 'e-success', 'e-info', 'e-danger',\n 'e-warning', 'e-flat', 'e-outline', 'e-small', 'e-bigger', 'e-active', 'e-round',\n 'e-top-icon-btn', 'e-bottom-icon-btn'];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n _super.prototype.destroy.call(this);\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n if (this.disabled) {\n this.element.removeAttribute('disabled');\n }\n if (this.content) {\n this.element.innerHTML = this.element.innerHTML.replace(this.content, '');\n }\n var span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.unWireEvents();\n if (isRippleEnabled) {\n this.removeRippleEffect();\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module name\n * @private\n */\n Button.prototype.getModuleName = function () {\n return 'btn';\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist Data\n * @private\n */\n Button.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Dynamically injects the required modules to the component.\n *\n * @private\n * @returns {void}\n */\n Button.Inject = function () {\n // Inject code snippets\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ButtonModel} newProp - Specifies new properties\n * @param {ButtonModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Button.prototype.onPropertyChanged = function (newProp, oldProp) {\n var span = this.element.querySelector('span.e-btn-icon');\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'isPrimary':\n if (newProp.isPrimary) {\n this.element.classList.add(cssClassName.PRIMARY);\n }\n else {\n this.element.classList.remove(cssClassName.PRIMARY);\n }\n break;\n case 'disabled':\n this.controlStatus(newProp.disabled);\n break;\n case 'iconCss': {\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n if (newProp.iconCss) {\n span.className = 'e-btn-icon ' + newProp.iconCss;\n if (this.element.textContent.trim()) {\n if (this.iconPosition === 'Left') {\n span.classList.add('e-icon-left');\n }\n else {\n span.classList.add('e-icon-right');\n }\n }\n }\n else {\n detach(span);\n }\n }\n else {\n this.setIconCss();\n }\n break;\n }\n case 'iconPosition':\n removeClass([this.element], ['e-top-icon-btn', 'e-bottom-icon-btn']);\n span = this.element.querySelector('span.e-btn-icon');\n if (span) {\n detach(span);\n }\n this.setIconCss();\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.element], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n this.element.classList.add(cssClassName.RTL);\n }\n else {\n this.element.classList.remove(cssClassName.RTL);\n }\n break;\n case 'content': {\n var node = getTextNode(this.element);\n if (!node) {\n this.element.classList.remove(cssClassName.ICONBTN);\n }\n if (!isBlazor() || (isBlazor() && !this.isServerRendered && this.getModuleName() !== 'progress-btn')) {\n if (this.enableHtmlSanitizer) {\n newProp.content = SanitizeHtmlHelper.sanitize(newProp.content);\n }\n this.element.innerHTML = newProp.content;\n this.setIconCss();\n }\n break;\n }\n case 'isToggle':\n if (newProp.isToggle) {\n EventHandler.add(this.element, 'click', this.btnClickHandler, this);\n }\n else {\n EventHandler.remove(this.element, 'click', this.btnClickHandler);\n removeClass([this.element], ['e-active']);\n }\n break;\n }\n }\n };\n /**\n * Click the button element\n * its native method\n *\n * @public\n * @returns {void}\n */\n Button.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to Button\n * its native method\n *\n * @public\n * @returns {void}\n */\n Button.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Property('Left')\n ], Button.prototype, \"iconPosition\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"iconCss\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isPrimary\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"cssClass\", void 0);\n __decorate([\n Property('')\n ], Button.prototype, \"content\", void 0);\n __decorate([\n Property(false)\n ], Button.prototype, \"isToggle\", void 0);\n __decorate([\n Property()\n ], Button.prototype, \"locale\", void 0);\n __decorate([\n Property(true)\n ], Button.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Button.prototype, \"created\", void 0);\n Button = __decorate([\n NotifyPropertyChanges\n ], Button);\n return Button;\n}(Component));\nexport { Button };\n","/**\n * Resize library\n */\nimport { isNullOrUndefined as isNOU, createElement, EventHandler, detach, Browser } from '@syncfusion/ej2-base';\nvar elementClass = ['north-west', 'north', 'north-east', 'west', 'east', 'south-west', 'south', 'south-east'];\nvar RESIZE_HANDLER = 'e-resize-handle';\nvar FOCUSED_HANDLER = 'e-focused-handle';\nvar DIALOG_RESIZABLE = 'e-dlg-resizable';\nvar RESTRICT_LEFT = ['e-restrict-left'];\nvar RESIZE_WITHIN_VIEWPORT = 'e-resize-viewport';\nvar dialogBorderResize = ['north', 'west', 'east', 'south'];\nvar targetElement;\nvar selectedHandler;\nvar originalWidth = 0;\nvar originalHeight = 0;\nvar originalX = 0;\nvar originalY = 0;\nvar originalMouseX = 0;\nvar originalMouseY = 0;\nvar minHeight;\nvar maxHeight;\nvar minWidth;\nvar maxWidth;\nvar containerElement;\nvar resizeStart = null;\nvar resize = null;\nvar resizeEnd = null;\nvar resizeWestWidth;\nvar setLeft = true;\nvar previousWidth = 0;\nvar setWidth = true;\n// eslint-disable-next-line\nvar proxy;\n/**\n *\n * @param {ResizeArgs} args - specifies the resize args\n * @returns {void}\n */\nexport function createResize(args) {\n resizeStart = args.resizeBegin;\n resize = args.resizing;\n resizeEnd = args.resizeComplete;\n targetElement = getDOMElement(args.element);\n containerElement = getDOMElement(args.boundary);\n var directions = args.direction.split(' ');\n for (var i = 0; i < directions.length; i++) {\n if (dialogBorderResize.indexOf(directions[i]) >= 0 && directions[i]) {\n setBorderResizeElm(directions[i]);\n }\n else if (directions[i].trim() !== '') {\n var resizeHandler = createElement('div', { className: 'e-icons ' + RESIZE_HANDLER + ' ' + 'e-' + directions[i] });\n targetElement.appendChild(resizeHandler);\n }\n }\n minHeight = args.minHeight;\n minWidth = args.minWidth;\n maxWidth = args.maxWidth;\n maxHeight = args.maxHeight;\n if (args.proxy && args.proxy.element && args.proxy.element.classList.contains('e-dialog')) {\n wireEvents(args.proxy);\n }\n else {\n wireEvents();\n }\n}\n/**\n *\n * @param {string} direction - specifies the string\n * @returns {void}\n */\nfunction setBorderResizeElm(direction) {\n calculateValues();\n var borderBottom = createElement('span', {\n attrs: {\n 'unselectable': 'on', 'contenteditable': 'false'\n }\n });\n borderBottom.setAttribute('class', 'e-dialog-border-resize e-' + direction);\n if (direction === 'south') {\n borderBottom.style.height = '2px';\n borderBottom.style.width = '100%';\n borderBottom.style.bottom = '0px';\n borderBottom.style.left = '0px';\n }\n if (direction === 'north') {\n borderBottom.style.height = '2px';\n borderBottom.style.width = '100%';\n borderBottom.style.top = '0px';\n borderBottom.style.left = '0px';\n }\n if (direction === 'east') {\n borderBottom.style.height = '100%';\n borderBottom.style.width = '2px';\n borderBottom.style.right = '0px';\n borderBottom.style.top = '0px';\n }\n if (direction === 'west') {\n borderBottom.style.height = '100%';\n borderBottom.style.width = '2px';\n borderBottom.style.left = '0px';\n borderBottom.style.top = '0px';\n }\n targetElement.appendChild(borderBottom);\n}\n/**\n *\n * @param {string} element - specifies the element\n * @returns {HTMLElement} - returns the element\n */\nfunction getDOMElement(element) {\n var domElement;\n if (!isNOU(element)) {\n if (typeof (element) === 'string') {\n domElement = document.querySelector(element);\n }\n else {\n domElement = element;\n }\n }\n return domElement;\n}\nfunction wireEvents(args) {\n var context = args || this;\n var resizers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n for (var i = 0; i < resizers.length; i++) {\n selectedHandler = resizers[i];\n EventHandler.add(selectedHandler, 'mousedown', onMouseDown, context);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(selectedHandler, eventName, onTouchStart, context);\n }\n var borderResizers = targetElement.querySelectorAll('.e-dialog-border-resize');\n if (!isNOU(borderResizers)) {\n for (var i = 0; i < borderResizers.length; i++) {\n selectedHandler = borderResizers[i];\n EventHandler.add(selectedHandler, 'mousedown', onMouseDown, context);\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.add(selectedHandler, eventName, onTouchStart, context);\n }\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {string} e - specifies the string\n * @returns {string} - returns the string\n */\nfunction getEventType(e) {\n return (e.indexOf('mouse') > -1) ? 'mouse' : 'touch';\n}\n/* istanbul ignore next */\n/**\n *\n * @param {MouseEvent} e - specifies the mouse event\n * @returns {void}\n */\nfunction onMouseDown(e) {\n e.preventDefault();\n targetElement = e.target.parentElement;\n calculateValues();\n originalMouseX = e.pageX;\n originalMouseY = e.pageY;\n e.target.classList.add(FOCUSED_HANDLER);\n if (!isNOU(resizeStart)) {\n var proxy_1 = null || this;\n if (resizeStart(e, proxy_1) === true) {\n return;\n }\n }\n if (this.targetEle && targetElement && targetElement.querySelector('.' + DIALOG_RESIZABLE)) {\n containerElement = this.target === ('body' || 'document.body' || document.body) ? null : this.targetEle;\n maxWidth = this.targetEle.clientWidth;\n maxHeight = this.targetEle.clientHeight;\n }\n var target = (isNOU(containerElement)) ? document : containerElement;\n EventHandler.add(target, 'mousemove', onMouseMove, this);\n EventHandler.add(document, 'mouseup', onMouseUp, this);\n for (var i = 0; i < RESTRICT_LEFT.length; i++) {\n if (targetElement.classList.contains(RESTRICT_LEFT[i])) {\n setLeft = false;\n }\n else {\n setLeft = true;\n }\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {MouseEvent} e - specifies the event\n * @returns {void}\n */\nfunction onMouseUp(e) {\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n var target = (isNOU(containerElement)) ? document : containerElement;\n var eventName = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';\n EventHandler.remove(target, 'mousemove', onMouseMove);\n EventHandler.remove(target, touchMoveEvent, onMouseMove);\n EventHandler.remove(target, eventName, onMouseMove);\n if (!isNOU(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n document.body.querySelector('.' + FOCUSED_HANDLER).classList.remove(FOCUSED_HANDLER);\n }\n if (!isNOU(resizeEnd)) {\n var proxy_2 = null || this;\n resizeEnd(e, proxy_2);\n }\n EventHandler.remove(document, 'mouseup', onMouseUp);\n EventHandler.remove(document, touchEndEvent, onMouseUp);\n}\n/* istanbul ignore next */\n/**\n * @returns {void}\n */\nfunction calculateValues() {\n originalWidth = parseFloat(getComputedStyle(targetElement, null).getPropertyValue('width').replace('px', ''));\n originalHeight = parseFloat(getComputedStyle(targetElement, null).getPropertyValue('height').replace('px', ''));\n originalX = targetElement.getBoundingClientRect().left;\n originalY = targetElement.getBoundingClientRect().top;\n}\n/* istanbul ignore next */\n/**\n *\n * @param {MouseEvent} e - specifies the event\n * @returns {void}\n */\nfunction onTouchStart(e) {\n targetElement = e.target.parentElement;\n calculateValues();\n var dialogResizeElement = targetElement.classList.contains('e-dialog');\n if ((e.target.classList.contains(RESIZE_HANDLER) || e.target.classList.contains('e-dialog-border-resize')) && dialogResizeElement) {\n e.target.classList.add(FOCUSED_HANDLER);\n }\n var coordinates = e.touches ? e.changedTouches[0] : e;\n originalMouseX = coordinates.pageX;\n originalMouseY = coordinates.pageY;\n if (!isNOU(resizeStart)) {\n var proxy_3 = null || this;\n if (resizeStart(e, proxy_3) === true) {\n return;\n }\n }\n var touchMoveEvent = (Browser.info.name === 'msie') ? 'pointermove' : 'touchmove';\n var touchEndEvent = (Browser.info.name === 'msie') ? 'pointerup' : 'touchend';\n var target = (isNOU(containerElement)) ? document : containerElement;\n EventHandler.add(target, touchMoveEvent, onMouseMove, this);\n EventHandler.add(document, touchEndEvent, onMouseUp, this);\n}\n/* istanbul ignore next */\n/**\n *\n * @param {MouseEvent} e - specifies the event\n * @returns {void}\n */\nfunction onMouseMove(e) {\n if (e.target.classList.contains(RESIZE_HANDLER) && e.target.classList.contains(FOCUSED_HANDLER)) {\n selectedHandler = e.target;\n }\n else if (!isNOU(document.body.querySelector('.' + FOCUSED_HANDLER))) {\n selectedHandler = document.body.querySelector('.' + FOCUSED_HANDLER);\n }\n if (!isNOU(selectedHandler)) {\n var resizeTowards = '';\n for (var i = 0; i < elementClass.length; i++) {\n if (selectedHandler.classList.contains('e-' + elementClass[i])) {\n resizeTowards = elementClass[i];\n }\n }\n if (!isNOU(resize)) {\n var proxy_4 = null || this;\n resize(e, proxy_4);\n }\n switch (resizeTowards) {\n case 'south':\n resizeSouth(e);\n break;\n case 'north':\n resizeNorth(e);\n break;\n case 'west':\n resizeWest(e);\n break;\n case 'east':\n resizeEast(e);\n break;\n case 'south-east':\n resizeSouth(e);\n resizeEast(e);\n break;\n case 'south-west':\n resizeSouth(e);\n resizeWest(e);\n break;\n case 'north-east':\n resizeNorth(e);\n resizeEast(e);\n break;\n case 'north-west':\n resizeNorth(e);\n resizeWest(e);\n break;\n default: break;\n }\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {HTMLElement} element - specifies the eleemnt\n * @returns {ClientRect} - returns the client\n */\nfunction getClientRectValues(element) {\n return element.getBoundingClientRect();\n}\n/**\n * @param {MouseEvent | TouchEvent} e - specifies the event\n * @returns {void}\n */\nfunction resizeSouth(e) {\n var documentHeight = document.documentElement.clientHeight;\n var calculateValue = false;\n var coordinates = e.touches ? e.changedTouches[0] : e;\n var currentpageY = coordinates.pageY;\n var targetRectValues = getClientRectValues(targetElement);\n var containerRectValues;\n if (!isNOU(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n if (!isNOU(containerElement)) {\n calculateValue = true;\n }\n else if (isNOU(containerElement) && ((documentHeight - currentpageY) >= 0 || (targetRectValues.top < 0))) {\n calculateValue = true;\n }\n var calculatedHeight = originalHeight + (currentpageY - originalMouseY);\n calculatedHeight = (calculatedHeight > minHeight) ? calculatedHeight : minHeight;\n var containerTop = 0;\n if (!isNOU(containerElement)) {\n containerTop = containerRectValues.top;\n }\n var borderValue = isNOU(containerElement) ? 0 : containerElement.offsetHeight - containerElement.clientHeight;\n var topWithoutborder = (targetRectValues.top - containerTop) - (borderValue / 2);\n topWithoutborder = (topWithoutborder < 0) ? 0 : topWithoutborder;\n if (targetRectValues.top > 0 && (topWithoutborder + calculatedHeight) > maxHeight) {\n calculateValue = false;\n if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n return;\n }\n targetElement.style.height = (maxHeight - parseInt(topWithoutborder.toString(), 10)) + 'px';\n return;\n }\n var targetTop = 0;\n if (calculateValue) {\n if (targetRectValues.top < 0 && (documentHeight + (targetRectValues.height + targetRectValues.top) > 0)) {\n targetTop = targetRectValues.top;\n if ((calculatedHeight + targetTop) <= 30) {\n calculatedHeight = (targetRectValues.height - (targetRectValues.height + targetRectValues.top)) + 30;\n }\n }\n if (((calculatedHeight + targetRectValues.top) >= maxHeight)) {\n targetElement.style.height = targetRectValues.height +\n (documentHeight - (targetRectValues.height + targetRectValues.top)) + 'px';\n }\n var calculatedTop = (isNOU(containerElement)) ? targetTop : topWithoutborder;\n if (calculatedHeight >= minHeight && ((calculatedHeight + calculatedTop) <= maxHeight)) {\n targetElement.style.height = calculatedHeight + 'px';\n }\n }\n}\n/**\n * Resizes the element towards the north direction.\n *\n * @param {MouseEvent | TouchEvent} e - The event object.\n * @returns {void}\n */\nfunction resizeNorth(e) {\n var calculateValue = false;\n var boundaryRectValues;\n var pageY = (getEventType(e.type) === 'mouse') ? e.pageY : e.touches[0].pageY;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNOU(containerElement)) {\n boundaryRectValues = getClientRectValues(containerElement);\n }\n if (!isNOU(containerElement) && (targetRectValues.top - boundaryRectValues.top) > 0) {\n calculateValue = true;\n }\n else if (isNOU(containerElement) && pageY > 0) {\n calculateValue = true;\n }\n var currentHeight = originalHeight - (pageY - originalMouseY);\n if (calculateValue) {\n if (currentHeight >= minHeight && currentHeight <= maxHeight) {\n var containerTop = 0;\n if (!isNOU(containerElement)) {\n containerTop = boundaryRectValues.top;\n }\n var top_1 = (originalY - containerTop) + (pageY - originalMouseY);\n top_1 = top_1 > 0 ? top_1 : 1;\n targetElement.style.height = currentHeight + 'px';\n targetElement.style.top = top_1 + 'px';\n }\n }\n}\n/**\n * Resizes the element towards the west direction.\n *\n * @param {MouseEvent | TouchEvent} e - The event object.\n * @returns {void}\n */\nfunction resizeWest(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var rectValues;\n if (!isNOU(containerElement)) {\n rectValues = getClientRectValues(containerElement);\n }\n var pageX = (getEventType(e.type) === 'mouse') ? e.pageX : e.touches[0].pageX;\n var targetRectValues = getClientRectValues(targetElement);\n var borderValue = isNOU(containerElement) ? 0 : containerElement.offsetWidth - containerElement.clientWidth;\n /* eslint-disable */\n var left = isNOU(containerElement) ? 0 : rectValues.left;\n var containerWidth = isNOU(containerElement) ? 0 : rectValues.width;\n /* eslint-enable */\n if (isNOU(resizeWestWidth)) {\n if (!isNOU(containerElement)) {\n resizeWestWidth = (((targetRectValues.left - left) - borderValue / 2)) + targetRectValues.width;\n resizeWestWidth = resizeWestWidth + (containerWidth - borderValue - resizeWestWidth);\n }\n else {\n resizeWestWidth = documentWidth;\n }\n }\n if (!isNOU(containerElement) &&\n (Math.floor((targetRectValues.left - rectValues.left) + targetRectValues.width +\n (rectValues.right - targetRectValues.right)) - borderValue) <= maxWidth) {\n calculateValue = true;\n }\n else if (isNOU(containerElement) && pageX >= 0) {\n calculateValue = true;\n }\n var calculatedWidth = originalWidth - (pageX - originalMouseX);\n if (setLeft) {\n calculatedWidth = (calculatedWidth > resizeWestWidth) ? resizeWestWidth : calculatedWidth;\n }\n if (calculateValue) {\n if (calculatedWidth >= minWidth && calculatedWidth <= maxWidth) {\n var containerLeft = 0;\n if (!isNOU(containerElement)) {\n containerLeft = rectValues.left;\n }\n var left_1 = (originalX - containerLeft) + (pageX - originalMouseX);\n left_1 = (left_1 > 0) ? left_1 : 1;\n if (calculatedWidth !== previousWidth && setWidth) {\n targetElement.style.width = calculatedWidth + 'px';\n }\n if (setLeft) {\n targetElement.style.left = left_1 + 'px';\n if (left_1 === 1) {\n setWidth = false;\n }\n else {\n setWidth = true;\n }\n }\n }\n }\n previousWidth = calculatedWidth;\n}\n/**\n * Resizes the element towards the east direction.\n *\n * @param {MouseEvent | TouchEvent} e - The event object.\n * @returns {void}\n */\nfunction resizeEast(e) {\n var documentWidth = document.documentElement.clientWidth;\n var calculateValue = false;\n var containerRectValues;\n if (!isNOU(containerElement)) {\n containerRectValues = getClientRectValues(containerElement);\n }\n var coordinates = e.touches ? e.changedTouches[0] : e;\n var pageX = coordinates.pageX;\n var targetRectValues = getClientRectValues(targetElement);\n if (!isNOU(containerElement) && (((targetRectValues.left - containerRectValues.left) + targetRectValues.width) <= maxWidth\n || (targetRectValues.right - containerRectValues.left) >= targetRectValues.width)) {\n calculateValue = true;\n }\n else if (isNOU(containerElement) && (documentWidth - pageX) > 0) {\n calculateValue = true;\n }\n var calculatedWidth = originalWidth + (pageX - originalMouseX);\n var containerLeft = 0;\n if (!isNOU(containerElement)) {\n containerLeft = containerRectValues.left;\n }\n if (((targetRectValues.left - containerLeft) + calculatedWidth) > maxWidth) {\n calculateValue = false;\n if (targetElement.classList.contains(RESIZE_WITHIN_VIEWPORT)) {\n return;\n }\n targetElement.style.width = maxWidth - (targetRectValues.left - containerLeft) + 'px';\n }\n if (calculateValue) {\n if (calculatedWidth >= minWidth && calculatedWidth <= maxWidth) {\n targetElement.style.width = calculatedWidth + 'px';\n }\n }\n}\n/* istanbul ignore next */\n/**\n *\n * @param {number} minimumHeight - specifies the number\n * @returns {void}\n */\nexport function setMinHeight(minimumHeight) {\n minHeight = minimumHeight;\n}\n/**\n *\n * @param {number} value - specifies the number value\n * @returns {void}\n */\nexport function setMaxWidth(value) {\n maxWidth = value;\n}\n/**\n *\n * @param {number} value - specifies the number value\n * @returns {void}\n */\nexport function setMaxHeight(value) {\n maxHeight = value;\n}\n/**\n * @returns {void}\n */\nexport function removeResize() {\n var handlers = targetElement.querySelectorAll('.' + RESIZE_HANDLER);\n for (var i = 0; i < handlers.length; i++) {\n detach(handlers[i]);\n }\n var borderResizers = targetElement.querySelectorAll('.e-dialog-border-resize');\n if (!isNOU(borderResizers)) {\n for (var i = 0; i < borderResizers.length; i++) {\n detach(borderResizers[i]);\n }\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, Collection, L10n, Complex, compile, createElement, animationMode } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, detach, attributes, prepend, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, isBlazor } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, append, EventHandler, Draggable, extend } from '@syncfusion/ej2-base';\nimport { SanitizeHtmlHelper, Browser } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup, PositionData, getZindexPartial } from '../popup/popup';\nimport { createResize, removeResize, setMinHeight, setMaxWidth, setMaxHeight } from '../common/resize';\nvar ButtonProps = /** @class */ (function (_super) {\n __extends(ButtonProps, _super);\n function ButtonProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], ButtonProps.prototype, \"isFlat\", void 0);\n __decorate([\n Property()\n ], ButtonProps.prototype, \"buttonModel\", void 0);\n __decorate([\n Property('Button')\n ], ButtonProps.prototype, \"type\", void 0);\n __decorate([\n Event()\n ], ButtonProps.prototype, \"click\", void 0);\n return ButtonProps;\n}(ChildProperty));\nexport { ButtonProps };\n/**\n * Configures the animation properties for both open and close the dialog.\n */\nvar AnimationSettings = /** @class */ (function (_super) {\n __extends(AnimationSettings, _super);\n function AnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Fade')\n ], AnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], AnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], AnimationSettings.prototype, \"delay\", void 0);\n return AnimationSettings;\n}(ChildProperty));\nexport { AnimationSettings };\nvar ROOT = 'e-dialog';\nvar RTL = 'e-rtl';\nvar DLG_HEADER_CONTENT = 'e-dlg-header-content';\nvar DLG_HEADER = 'e-dlg-header';\nvar DLG_FOOTER_CONTENT = 'e-footer-content';\nvar MODAL_DLG = 'e-dlg-modal';\nvar DLG_CONTENT = 'e-dlg-content';\nvar DLG_CLOSE_ICON = 'e-icon-dlg-close';\nvar DLG_OVERLAY = 'e-dlg-overlay';\nvar DLG_TARGET = 'e-dlg-target';\nvar DLG_CONTAINER = 'e-dlg-container';\nvar SCROLL_DISABLED = 'e-scroll-disabled';\nvar DLG_PRIMARY_BUTTON = 'e-primary';\nvar ICON = 'e-icons';\nvar POPUP_ROOT = 'e-popup';\nvar DEVICE = 'e-device';\nvar FULLSCREEN = 'e-dlg-fullscreen';\nvar DLG_CLOSE_ICON_BTN = 'e-dlg-closeicon-btn';\nvar DLG_HIDE = 'e-popup-close';\nvar DLG_SHOW = 'e-popup-open';\nvar DLG_UTIL_DEFAULT_TITLE = 'Information';\nvar DLG_UTIL_ROOT = 'e-scroll-disabled';\nvar DLG_UTIL_ALERT = 'e-alert-dialog';\nvar DLG_UTIL_CONFIRM = 'e-confirm-dialog';\nvar DLG_RESIZABLE = 'e-dlg-resizable';\nvar DLG_RESTRICT_LEFT_VALUE = 'e-restrict-left';\nvar DLG_RESTRICT_WIDTH_VALUE = 'e-resize-viewport';\nvar DLG_REF_ELEMENT = 'e-dlg-ref-element';\nvar DLG_USER_ACTION_CLOSED = 'user action';\nvar DLG_CLOSE_ICON_CLOSED = 'close icon';\nvar DLG_ESCAPE_CLOSED = 'escape';\nvar DLG_OVERLAYCLICK_CLOSED = 'overlayClick';\nvar DLG_DRAG = 'e-draggable';\n/**\n * Represents the dialog component that displays the information and get input from the user.\n * Two types of dialog components are `Modal and Modeless (non-modal)` depending on its interaction with parent application.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Dialog = /** @class */ (function (_super) {\n __extends(Dialog, _super);\n /*\n * * Constructor for creating the widget\n *\n * @param\n * @param\n * @hidden\n */\n function Dialog(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.needsID = true;\n return _this;\n }\n /**\n *Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.render = function () {\n this.initialize();\n this.initRender();\n this.wireEvents();\n if (this.width === '100%') {\n this.element.style.width = '';\n }\n if (this.minHeight !== '') {\n this.element.style.minHeight = formatUnit(this.minHeight);\n }\n if (this.enableResize) {\n this.setResize();\n if (this.animationSettings.effect === 'None') {\n this.getMinHeight();\n }\n }\n this.renderComplete();\n };\n Dialog.prototype.initializeValue = function () {\n this.dlgClosedBy = DLG_USER_ACTION_CLOSED;\n };\n /**\n *Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.preRender = function () {\n var _this = this;\n this.initializeValue();\n this.headerContent = null;\n this.allowMaxHeight = true;\n this.preventVisibility = true;\n this.clonedEle = this.element.cloneNode(true);\n this.closeIconClickEventHandler = function (event) {\n _this.dlgClosedBy = DLG_CLOSE_ICON_CLOSED;\n _this.hide(event);\n };\n this.dlgOverlayClickEventHandler = function (event) {\n _this.dlgClosedBy = DLG_OVERLAYCLICK_CLOSED;\n event.preventFocus = false;\n _this.trigger('overlayClick', event, function (overlayClickEventArgs) {\n if (!overlayClickEventArgs.preventFocus) {\n _this.focusContent();\n }\n _this.dlgClosedBy = DLG_USER_ACTION_CLOSED;\n });\n };\n var localeText = { close: 'Close' };\n this.l10n = new L10n('dialog', localeText, this.locale);\n this.checkPositionData();\n if (isNullOrUndefined(this.target)) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.target = document.body;\n this.isProtectedOnChange = prevOnChange;\n }\n };\n Dialog.prototype.updatePersistData = function () {\n if (this.enablePersistence) {\n this.setProperties({ width: parseFloat(this.element.style.width), height: parseFloat(this.element.style.height),\n position: { X: parseFloat(this.dragObj.element.style.left), Y: parseFloat(this.dragObj.element.style.top) } }, true);\n }\n };\n Dialog.prototype.isNumberValue = function (value) {\n var isNumber = /^[-+]?\\d*\\.?\\d+$/.test(value);\n return isNumber;\n };\n Dialog.prototype.checkPositionData = function () {\n if (!isNullOrUndefined(this.position)) {\n if (!isNullOrUndefined(this.position.X) && (typeof (this.position.X) !== 'number')) {\n var isNumber = this.isNumberValue(this.position.X);\n if (isNumber) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.position.X = parseFloat(this.position.X);\n this.isProtectedOnChange = prevOnChange;\n }\n }\n if (!isNullOrUndefined(this.position.Y) && (typeof (this.position.Y) !== 'number')) {\n var isNumber = this.isNumberValue(this.position.Y);\n if (isNumber) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.position.Y = parseFloat(this.position.Y);\n this.isProtectedOnChange = prevOnChange;\n }\n }\n }\n };\n Dialog.prototype.getEle = function (list, selector) {\n var element = undefined;\n for (var i = 0; i < list.length; i++) {\n if (list[i].classList.contains(selector)) {\n element = list[i];\n break;\n }\n }\n return element;\n };\n /* istanbul ignore next */\n Dialog.prototype.getMinHeight = function () {\n var computedHeaderHeight = '0px';\n var computedFooterHeight = '0px';\n if (!isNullOrUndefined(this.element.querySelector('.' + DLG_HEADER_CONTENT))) {\n computedHeaderHeight = getComputedStyle(this.headerContent).height;\n }\n var footerEle = this.getEle(this.element.children, DLG_FOOTER_CONTENT);\n if (!isNullOrUndefined(footerEle)) {\n computedFooterHeight = getComputedStyle(footerEle).height;\n }\n var headerHeight = parseInt(computedHeaderHeight.slice(0, computedHeaderHeight.indexOf('p')), 10);\n var footerHeight = parseInt(computedFooterHeight.slice(0, computedFooterHeight.indexOf('p')), 10);\n setMinHeight(headerHeight + 30 + (isNaN(footerHeight) ? 0 : footerHeight));\n return (headerHeight + 30 + footerHeight);\n };\n Dialog.prototype.onResizeStart = function (args, dialogObj) {\n dialogObj.trigger('resizeStart', args);\n return args.cancel;\n };\n Dialog.prototype.onResizing = function (args, dialogObj) {\n dialogObj.trigger('resizing', args);\n };\n Dialog.prototype.onResizeComplete = function (args, dialogObj) {\n dialogObj.trigger('resizeStop', args);\n this.updatePersistData();\n };\n Dialog.prototype.setResize = function () {\n if (this.enableResize) {\n if (this.isBlazorServerRender() && !isNullOrUndefined(this.element.querySelector('.e-icons.e-resize-handle'))) {\n return;\n }\n this.element.classList.add(DLG_RESIZABLE);\n var computedHeight = getComputedStyle(this.element).minHeight;\n var computedWidth = getComputedStyle(this.element).minWidth;\n var direction = '';\n for (var i = 0; i < this.resizeHandles.length; i++) {\n if (this.resizeHandles[i] === 'All') {\n direction = 'south north east west north-east north-west south-east south-west';\n break;\n }\n else {\n var directionValue = '';\n switch (this.resizeHandles[i].toString()) {\n case 'SouthEast':\n directionValue = 'south-east';\n break;\n case 'SouthWest':\n directionValue = 'south-west';\n break;\n case 'NorthEast':\n directionValue = 'north-east';\n break;\n case 'NorthWest':\n directionValue = 'north-west';\n break;\n default:\n directionValue = this.resizeHandles[i].toString();\n break;\n }\n direction += directionValue.toLocaleLowerCase() + ' ';\n }\n }\n if (this.enableRtl && direction.trim() === 'south-east') {\n direction = 'south-west';\n }\n else if (this.enableRtl && direction.trim() === 'south-west') {\n direction = 'south-east';\n }\n if (this.isModal && this.enableRtl) {\n this.element.classList.add(DLG_RESTRICT_LEFT_VALUE);\n }\n else if (this.isModal && this.target === document.body) {\n this.element.classList.add(DLG_RESTRICT_WIDTH_VALUE);\n }\n createResize({\n element: this.element,\n direction: direction,\n minHeight: parseInt(computedHeight.slice(0, computedWidth.indexOf('p')), 10),\n maxHeight: this.targetEle.clientHeight,\n minWidth: parseInt(computedWidth.slice(0, computedWidth.indexOf('p')), 10),\n maxWidth: this.targetEle.clientWidth,\n boundary: this.target === document.body ? null : this.targetEle,\n resizeBegin: this.onResizeStart.bind(this),\n resizeComplete: this.onResizeComplete.bind(this),\n resizing: this.onResizing.bind(this),\n proxy: this\n });\n this.wireWindowResizeEvent();\n }\n else {\n removeResize();\n this.unWireWindowResizeEvent();\n if (this.isModal) {\n this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n }\n else {\n this.element.classList.remove(DLG_RESTRICT_WIDTH_VALUE);\n }\n this.element.classList.remove(DLG_RESIZABLE);\n }\n };\n Dialog.prototype.getFocusElement = function (target) {\n var value = 'input,select,textarea,button:enabled,a,[contenteditable=\"true\"],[tabindex]';\n var items = target.querySelectorAll(value);\n return { element: items[items.length - 1] };\n };\n /* istanbul ignore next */\n Dialog.prototype.keyDown = function (event) {\n var _this = this;\n if (event.keyCode === 9) {\n if (this.isModal) {\n var buttonObj = void 0;\n if (!isNullOrUndefined(this.btnObj)) {\n buttonObj = this.btnObj[this.btnObj.length - 1];\n }\n if ((isNullOrUndefined(this.btnObj)) && (!isNullOrUndefined(this.ftrTemplateContent))) {\n buttonObj = this.getFocusElement(this.ftrTemplateContent);\n }\n if (isNullOrUndefined(this.btnObj) && isNullOrUndefined(this.ftrTemplateContent) && !isNullOrUndefined(this.contentEle)) {\n buttonObj = this.getFocusElement(this.contentEle);\n }\n if (!isNullOrUndefined(buttonObj) && document.activeElement === buttonObj.element && !event.shiftKey) {\n event.preventDefault();\n this.focusableElements(this.element).focus();\n }\n if (document.activeElement === this.focusableElements(this.element) && event.shiftKey) {\n event.preventDefault();\n if (!isNullOrUndefined(buttonObj)) {\n buttonObj.element.focus();\n }\n }\n }\n }\n var element = document.activeElement;\n var isTagName = (['input', 'textarea'].indexOf(element.tagName.toLowerCase()) > -1);\n var isContentEdit = false;\n if (!isTagName) {\n isContentEdit = element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') === 'true';\n }\n if (event.keyCode === 27 && this.closeOnEscape) {\n this.dlgClosedBy = DLG_ESCAPE_CLOSED;\n var query = document.querySelector('.e-popup-open:not(.e-dialog)');\n // 'document.querySelector' is used to find the elements rendered based on body\n if (!(!isNullOrUndefined(query) && !query.classList.contains('e-toolbar-pop'))) {\n this.hide(event);\n }\n }\n if ((event.keyCode === 13 && !event.ctrlKey && element.tagName.toLowerCase() !== 'textarea' &&\n isTagName && !isNullOrUndefined(this.primaryButtonEle)) ||\n (event.keyCode === 13 && event.ctrlKey && (element.tagName.toLowerCase() === 'textarea' ||\n isContentEdit)) && !isNullOrUndefined(this.primaryButtonEle)) {\n var buttonIndex_1;\n var firstPrimary = this.buttons.some(function (data, index) {\n buttonIndex_1 = index;\n var buttonModel = data.buttonModel;\n return !isNullOrUndefined(buttonModel) && buttonModel.isPrimary === true;\n });\n if (firstPrimary && typeof (this.buttons[buttonIndex_1].click) === 'function') {\n setTimeout(function () {\n _this.buttons[buttonIndex_1].click.call(_this, event);\n });\n }\n }\n };\n /**\n * Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.initialize = function () {\n if (!isNullOrUndefined(this.target)) {\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n }\n if (!this.isBlazorServerRender()) {\n addClass([this.element], ROOT);\n }\n if (Browser.isDevice) {\n addClass([this.element], DEVICE);\n }\n if (!this.isBlazorServerRender()) {\n this.setCSSClass();\n }\n this.setMaxHeight();\n };\n /**\n * Initialize the rendering\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.initRender = function () {\n var _this = this;\n this.initialRender = true;\n if (!this.isBlazorServerRender()) {\n attributes(this.element, { role: 'dialog' });\n }\n if (this.zIndex === 1000) {\n this.setzIndex(this.element, false);\n this.calculatezIndex = true;\n }\n else {\n this.calculatezIndex = false;\n }\n if (this.isBlazorServerRender() && isNullOrUndefined(this.headerContent)) {\n this.headerContent = this.element.getElementsByClassName('e-dlg-header-content')[0];\n }\n if (this.isBlazorServerRender() && isNullOrUndefined(this.contentEle)) {\n this.contentEle = this.element.querySelector('#' + this.element.id + '_dialog-content');\n }\n if (!this.isBlazorServerRender()) {\n this.setTargetContent();\n if (this.header !== '' && !isNullOrUndefined(this.header)) {\n this.setHeader();\n }\n this.renderCloseIcon();\n this.setContent();\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setFooterTemplate();\n }\n else if (!isNullOrUndefined(this.buttons[0].buttonModel)) {\n this.setButton();\n }\n }\n if (this.isBlazorServerRender()) {\n if (!isNullOrUndefined(this.buttons[0].buttonModel) && this.footerTemplate === '') {\n this.setButton();\n }\n }\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n if (!this.isBlazorServerRender()) {\n attributes(this.element, { 'aria-modal': (this.isModal ? 'true' : 'false') });\n if (this.isModal) {\n this.setIsModal();\n }\n }\n if (this.isBlazorServerRender() && isNullOrUndefined(this.dlgContainer)) {\n this.dlgContainer = this.element.parentElement;\n for (var i = 0, childNodes = this.dlgContainer.children; i < childNodes.length; i++) {\n if (childNodes[i].classList.contains('e-dlg-overlay')) {\n this.dlgOverlay = childNodes[i];\n }\n }\n }\n if (this.element.classList.contains(DLG_UTIL_ALERT) !== true && this.element.classList.contains(DLG_UTIL_CONFIRM) !== true\n && !isNullOrUndefined(this.element.parentElement)) {\n var parentEle = this.isModal ? this.dlgContainer.parentElement : this.element.parentElement;\n this.refElement = this.createElement('div', { className: DLG_REF_ELEMENT });\n parentEle.insertBefore(this.refElement, (this.isModal ? this.dlgContainer : this.element));\n }\n if (!isNullOrUndefined(this.targetEle)) {\n if (this.isModal) {\n this.targetEle.appendChild(this.dlgContainer);\n }\n else {\n this.targetEle.appendChild(this.element);\n }\n }\n this.popupObj = new Popup(this.element, {\n height: this.height,\n width: this.width,\n zIndex: this.zIndex,\n relateTo: this.target,\n actionOnScroll: 'none',\n enableRtl: this.enableRtl,\n // eslint-disable-next-line\n open: function (event) {\n var eventArgs = {\n container: _this.isModal ? _this.dlgContainer : _this.element,\n element: _this.element,\n target: _this.target,\n preventFocus: false\n };\n if (_this.enableResize) {\n _this.resetResizeIcon();\n }\n _this.trigger('open', eventArgs, function (openEventArgs) {\n if (!openEventArgs.preventFocus) {\n _this.focusContent();\n }\n });\n },\n // eslint-disable-next-line\n close: function (event) {\n if (_this.isModal) {\n addClass([_this.dlgOverlay], 'e-fade');\n }\n _this.unBindEvent(_this.element);\n if (_this.isModal) {\n _this.dlgContainer.style.display = 'none';\n }\n _this.trigger('close', _this.closeArgs);\n var activeEle = document.activeElement;\n if (!isNullOrUndefined(activeEle) && !isNullOrUndefined((activeEle).blur)) {\n activeEle.blur();\n }\n if (!isNullOrUndefined(_this.storeActiveElement) && !isNullOrUndefined(_this.storeActiveElement.focus)) {\n _this.storeActiveElement.focus();\n }\n }\n });\n this.positionChange();\n this.setEnableRTL();\n if (!this.isBlazorServerRender()) {\n addClass([this.element], DLG_HIDE);\n if (this.isModal) {\n this.setOverlayZindex();\n }\n }\n if (this.visible) {\n this.show();\n if (this.isModal) {\n var targetType = this.getTargetContainer(this.target);\n if (targetType instanceof Element) {\n var computedStyle = window.getComputedStyle(targetType);\n if (computedStyle.getPropertyValue('direction') === 'rtl') {\n this.setPopupPosition();\n }\n }\n }\n }\n else {\n if (this.isModal) {\n this.dlgOverlay.style.display = 'none';\n }\n }\n this.initialRender = false;\n };\n Dialog.prototype.getTargetContainer = function (targetValue) {\n var targetElement = null;\n if (typeof targetValue === 'string') {\n if (targetValue.startsWith('#')) {\n targetElement = document.getElementById(targetValue.substring(1));\n }\n else if (targetValue.startsWith('.')) {\n var elements = document.getElementsByClassName(targetValue.substring(1));\n targetElement = elements.length > 0 ? elements[0] : null;\n }\n else {\n if (!(targetValue instanceof HTMLElement) && targetValue !== document.body) {\n targetElement = document.querySelector(targetValue);\n }\n }\n }\n else if (targetValue instanceof HTMLElement) {\n targetElement = targetValue;\n }\n return targetElement;\n };\n Dialog.prototype.resetResizeIcon = function () {\n var dialogConHeight = this.getMinHeight();\n if (this.targetEle.offsetHeight < dialogConHeight) {\n var className = this.enableRtl ? 'e-south-west' : 'e-south-east';\n var resizeIcon = this.element.querySelector('.' + className);\n if (!isNullOrUndefined(resizeIcon)) {\n resizeIcon.style.bottom = '-' + dialogConHeight.toString() + 'px';\n }\n }\n };\n Dialog.prototype.setOverlayZindex = function (zIndexValue) {\n var zIndex;\n if (isNullOrUndefined(zIndexValue)) {\n zIndex = parseInt(this.element.style.zIndex, 10) ? parseInt(this.element.style.zIndex, 10) : this.zIndex;\n }\n else {\n zIndex = zIndexValue;\n }\n this.dlgOverlay.style.zIndex = (zIndex - 1).toString();\n this.dlgContainer.style.zIndex = zIndex.toString();\n };\n Dialog.prototype.positionChange = function () {\n if (this.isModal) {\n if (!isNaN(parseFloat(this.position.X)) && !isNaN(parseFloat(this.position.Y))) {\n this.setPopupPosition();\n }\n else if ((!isNaN(parseFloat(this.position.X)) && isNaN(parseFloat(this.position.Y)))\n || (isNaN(parseFloat(this.position.X)) && !isNaN(parseFloat(this.position.Y)))) {\n this.setPopupPosition();\n }\n else {\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n this.dlgContainer.classList.add('e-dlg-' + this.position.X + '-' + this.position.Y);\n }\n }\n else {\n this.setPopupPosition();\n }\n };\n Dialog.prototype.setPopupPosition = function () {\n this.popupObj.setProperties({\n position: {\n X: this.position.X, Y: this.position.Y\n }\n });\n };\n Dialog.prototype.setAllowDragging = function () {\n var _this = this;\n var handleContent = '.' + DLG_HEADER_CONTENT;\n if (!this.element.classList.contains(DLG_DRAG)) {\n this.dragObj = new Draggable(this.element, {\n clone: false,\n isDragScroll: true,\n abort: '.e-dlg-closeicon-btn',\n handle: handleContent,\n dragStart: function (event) {\n _this.trigger('dragStart', event, function (dragEventArgs) {\n if (isBlazor()) {\n dragEventArgs.bindEvents(event.dragElement);\n }\n });\n },\n dragStop: function (event) {\n if (_this.isModal) {\n _this.IsDragStop = true;\n if (!isNullOrUndefined(_this.position)) {\n _this.dlgContainer.classList.remove('e-dlg-' + _this.position.X + '-' + _this.position.Y);\n }\n // Reset the dialog position after drag completion.\n var targetType = _this.getTargetContainer(_this.target);\n if (targetType instanceof Element) {\n var computedStyle = window.getComputedStyle(targetType);\n if (computedStyle.getPropertyValue('direction') === 'rtl') {\n _this.element.style.position = 'absolute';\n }\n else {\n _this.element.style.position = 'relative';\n }\n }\n else {\n _this.element.style.position = 'relative';\n }\n }\n _this.trigger('dragStop', event);\n _this.element.classList.remove(DLG_RESTRICT_LEFT_VALUE);\n _this.updatePersistData();\n },\n drag: function (event) {\n _this.trigger('drag', event);\n }\n });\n if (!isNullOrUndefined(this.targetEle)) {\n this.dragObj.dragArea = this.targetEle;\n }\n }\n };\n Dialog.prototype.setButton = function () {\n if (!this.isBlazorServerRender()) {\n this.buttonContent = [];\n this.btnObj = [];\n for (var i = 0; i < this.buttons.length; i++) {\n if (isNullOrUndefined(this.buttons[i].buttonModel)) {\n continue;\n }\n var buttonType = !isNullOrUndefined(this.buttons[i].type) ?\n this.buttons[i].type.toLowerCase() : 'button';\n var btn = this.createElement('button', { className: this.cssClass, attrs: { type: buttonType } });\n this.buttonContent.push(btn.outerHTML);\n }\n this.setFooterTemplate();\n }\n var footerBtn;\n for (var i = 0, childNodes = this.element.children; i < childNodes.length; i++) {\n if (childNodes[i].classList.contains(DLG_FOOTER_CONTENT)) {\n footerBtn = childNodes[i].querySelectorAll('button');\n }\n }\n for (var i = 0; i < this.buttons.length; i++) {\n if (isNullOrUndefined(this.buttons[i].buttonModel)) {\n continue;\n }\n if (!this.isBlazorServerRender()) {\n this.btnObj[i] = new Button(this.buttons[i].buttonModel);\n }\n if (this.isBlazorServerRender()) {\n this.ftrTemplateContent = this.element.querySelector('.' + DLG_FOOTER_CONTENT);\n }\n if (!isNullOrUndefined(this.ftrTemplateContent) && footerBtn.length > 0) {\n if (typeof (this.buttons[i].click) === 'function') {\n EventHandler.add(footerBtn[i], 'click', this.buttons[i].click, this);\n }\n if (typeof (this.buttons[i].click) === 'object') {\n EventHandler.add(footerBtn[i], 'click', this.buttonClickHandler.bind(this, i), this);\n }\n }\n if (!this.isBlazorServerRender() && !isNullOrUndefined(this.ftrTemplateContent)) {\n this.btnObj[i].appendTo(this.ftrTemplateContent.children[i]);\n if (this.buttons[i].isFlat) {\n this.btnObj[i].element.classList.add('e-flat');\n }\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n }\n };\n Dialog.prototype.buttonClickHandler = function (index) {\n this.trigger('buttons[' + index + '].click', {});\n };\n Dialog.prototype.setContent = function () {\n this.contentEle = this.createElement('div', { className: DLG_CONTENT, id: this.element.id + '_dialog-content' });\n if (this.headerEle) {\n attributes(this.element, { 'aria-describedby': this.element.id + '_title' + ' ' + this.element.id + '_dialog-content' });\n }\n else {\n attributes(this.element, { 'aria-describedby': this.element.id + '_dialog-content' });\n }\n if (this.innerContentElement) {\n this.contentEle.appendChild(this.innerContentElement);\n }\n else if (!isNullOrUndefined(this.content) && this.content !== '' || !this.initialRender) {\n if (typeof (this.content) === 'string' && !isBlazor()) {\n this.setTemplate(this.content, this.contentEle, 'content');\n }\n else if (this.content instanceof HTMLElement) {\n this.contentEle.appendChild(this.content);\n }\n else {\n this.setTemplate(this.content, this.contentEle, 'content');\n }\n }\n if (!isNullOrUndefined(this.headerContent)) {\n this.element.insertBefore(this.contentEle, this.element.children[1]);\n }\n else {\n this.element.insertBefore(this.contentEle, this.element.children[0]);\n }\n if (this.height === 'auto') {\n if (!this.isBlazorServerRender() && Browser.isIE && this.element.style.width === '' && !isNullOrUndefined(this.width)) {\n this.element.style.width = formatUnit(this.width);\n }\n this.setMaxHeight();\n }\n };\n Dialog.prototype.setTemplate = function (template, toElement, prop) {\n var templateFn;\n var templateProps;\n if (toElement.classList.contains(DLG_HEADER)) {\n templateProps = this.element.id + 'header';\n }\n else if (toElement.classList.contains(DLG_FOOTER_CONTENT)) {\n templateProps = this.element.id + 'footerTemplate';\n }\n else {\n templateProps = this.element.id + 'content';\n }\n var templateValue;\n if (!isNullOrUndefined(template.outerHTML)) {\n toElement.appendChild(template);\n }\n else if ((typeof template === 'string') || (typeof template !== 'string') || (isBlazor() && !this.isStringTemplate)) {\n if ((typeof template === 'string')) {\n template = this.sanitizeHelper(template);\n }\n if (this.isVue || typeof template !== 'string') {\n templateFn = compile(template);\n templateValue = template;\n }\n else {\n toElement.innerHTML = template;\n }\n }\n var fromElements = [];\n if (!isNullOrUndefined(templateFn)) {\n var isString = (isBlazor() &&\n !this.isStringTemplate && (templateValue).indexOf('
Blazor') === 0) ?\n this.isStringTemplate : true;\n for (var _i = 0, _a = templateFn({}, this, prop, templateProps, isString); _i < _a.length; _i++) {\n var item = _a[_i];\n fromElements.push(item);\n }\n append([].slice.call(fromElements), toElement);\n }\n };\n /*\n * @returns {void}\n * @hidden\n * @value\n */\n Dialog.prototype.sanitizeHelper = function (value) {\n if (this.enableHtmlSanitizer) {\n var dialogItem = SanitizeHtmlHelper.beforeSanitize();\n var beforeEvent = {\n cancel: false,\n helper: null\n };\n extend(dialogItem, dialogItem, beforeEvent);\n this.trigger('beforeSanitizeHtml', dialogItem);\n if (dialogItem.cancel && !isNullOrUndefined(dialogItem.helper)) {\n value = dialogItem.helper(value);\n }\n else if (!dialogItem.cancel) {\n value = SanitizeHtmlHelper.serializeValue(dialogItem, value);\n }\n }\n return value;\n };\n Dialog.prototype.setMaxHeight = function () {\n if (!this.allowMaxHeight) {\n return;\n }\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) && (this.targetEle.offsetHeight < window.innerHeight) ?\n (this.targetEle.offsetHeight - 20) + 'px' : (window.innerHeight - 20) + 'px';\n this.element.style.display = display;\n if (Browser.isIE && this.height === 'auto' && !isNullOrUndefined(this.contentEle)\n && this.element.offsetHeight < this.contentEle.offsetHeight) {\n this.element.style.height = 'inherit';\n }\n };\n Dialog.prototype.setEnableRTL = function () {\n if (!this.isBlazorServerRender()) {\n if (this.enableRtl) {\n addClass([this.element], RTL);\n }\n else {\n removeClass([this.element], RTL);\n }\n }\n if (!isNullOrUndefined(this.element.querySelector('.e-resize-handle'))) {\n removeResize();\n this.setResize();\n }\n };\n Dialog.prototype.setTargetContent = function () {\n var _this = this;\n if (isNullOrUndefined(this.content) || this.content === '') {\n var isContent = this.element.innerHTML.replace(/\\s|<(\\/?|\\/?)(!--!--)>/g, '') !== '';\n if (this.element.children.length > 0 || isContent) {\n this.innerContentElement = document.createDocumentFragment();\n [].slice.call(this.element.childNodes).forEach(function (el) {\n if (el.nodeType !== 8) {\n _this.innerContentElement.appendChild(el);\n }\n });\n }\n }\n };\n Dialog.prototype.setHeader = function () {\n if (this.headerEle) {\n this.headerEle.innerHTML = '';\n }\n else {\n this.headerEle = this.createElement('div', { id: this.element.id + '_title', className: DLG_HEADER });\n }\n this.createHeaderContent();\n this.headerContent.appendChild(this.headerEle);\n this.setTemplate(this.header, this.headerEle, 'header');\n attributes(this.element, { 'aria-describedby': this.element.id + '_title' });\n attributes(this.element, { 'aria-label': 'dialog' });\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n };\n Dialog.prototype.setFooterTemplate = function () {\n if (this.ftrTemplateContent) {\n this.ftrTemplateContent.innerHTML = '';\n }\n else {\n this.ftrTemplateContent = this.createElement('div', {\n className: DLG_FOOTER_CONTENT\n });\n }\n if (this.footerTemplate !== '' && !isNullOrUndefined(this.footerTemplate)) {\n this.setTemplate(this.footerTemplate, this.ftrTemplateContent, 'footerTemplate');\n }\n else {\n this.ftrTemplateContent.innerHTML = this.buttonContent.join('');\n }\n this.element.appendChild(this.ftrTemplateContent);\n };\n Dialog.prototype.createHeaderContent = function () {\n if (isNullOrUndefined(this.headerContent)) {\n this.headerContent = this.createElement('div', { id: this.element.id + '_dialog-header', className: DLG_HEADER_CONTENT });\n }\n };\n Dialog.prototype.renderCloseIcon = function () {\n if (this.showCloseIcon) {\n this.closeIcon = this.createElement('button', { className: DLG_CLOSE_ICON_BTN, attrs: { type: 'button' } });\n this.closeIconBtnObj = new Button({ cssClass: 'e-flat', iconCss: DLG_CLOSE_ICON + ' ' + ICON });\n this.closeIconTitle();\n if (!isNullOrUndefined(this.headerContent)) {\n prepend([this.closeIcon], this.headerContent);\n }\n else {\n this.createHeaderContent();\n prepend([this.closeIcon], this.headerContent);\n this.element.insertBefore(this.headerContent, this.element.children[0]);\n }\n this.closeIconBtnObj.appendTo(this.closeIcon);\n }\n };\n Dialog.prototype.closeIconTitle = function () {\n this.l10n.setLocale(this.locale);\n var closeIconTitle = this.l10n.getConstant('close');\n this.closeIcon.setAttribute('title', closeIconTitle);\n this.closeIcon.setAttribute('aria-label', closeIconTitle);\n };\n Dialog.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n if (this.isModal && !isNullOrUndefined(this.dlgContainer)) {\n removeClass([this.dlgContainer], oldCSSClass.split(' '));\n }\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n if (this.isModal && !isNullOrUndefined(this.dlgContainer)) {\n addClass([this.dlgContainer], this.cssClass.split(' '));\n }\n }\n };\n Dialog.prototype.setIsModal = function () {\n this.dlgContainer = this.createElement('div', { className: DLG_CONTAINER });\n this.setCSSClass();\n this.element.classList.remove(DLG_SHOW);\n this.element.parentNode.insertBefore(this.dlgContainer, this.element);\n this.dlgContainer.appendChild(this.element);\n addClass([this.element], MODAL_DLG);\n this.dlgOverlay = this.createElement('div', { className: DLG_OVERLAY });\n this.dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.dlgContainer.appendChild(this.dlgOverlay);\n };\n Dialog.prototype.getValidFocusNode = function (items) {\n var node;\n for (var u = 0; u < items.length; u++) {\n node = items[u];\n if ((node.clientHeight > 0 || (node.tagName.toLowerCase() === 'a' && node.hasAttribute('href'))) && node.tabIndex > -1 &&\n !node.disabled && !this.disableElement(node, '[disabled],[aria-disabled=\"true\"],[type=\"hidden\"]')) {\n return node;\n }\n else {\n node = null;\n }\n }\n return node;\n };\n Dialog.prototype.focusableElements = function (content) {\n if (!isNullOrUndefined(content)) {\n var value = 'input,select,textarea,button,a,[contenteditable=\"true\"],[tabindex]';\n var items = content.querySelectorAll(value);\n return this.getValidFocusNode(items);\n }\n return null;\n };\n Dialog.prototype.getAutoFocusNode = function (container) {\n var node = container.querySelector('.' + DLG_CLOSE_ICON_BTN);\n var value = '[autofocus]';\n var items = container.querySelectorAll(value);\n var validNode = this.getValidFocusNode(items);\n if (isBlazor()) {\n this.primaryButtonEle = this.element.getElementsByClassName('e-primary')[0];\n }\n if (!isNullOrUndefined(validNode)) {\n node = validNode;\n }\n else {\n validNode = this.focusableElements(this.contentEle);\n if (!isNullOrUndefined(validNode)) {\n return node = validNode;\n }\n else if (!isNullOrUndefined(this.primaryButtonEle)) {\n return this.element.querySelector('.' + DLG_PRIMARY_BUTTON);\n }\n }\n return node;\n };\n Dialog.prototype.disableElement = function (element, t) {\n var elementMatch = element ? element.matches || element.webkitMatchesSelector || element.msGetRegionContent : null;\n if (elementMatch) {\n for (; element; element = element.parentNode) {\n if (element instanceof Element && elementMatch.call(element, t)) {\n /* istanbul ignore next */\n return element;\n }\n }\n }\n return null;\n };\n Dialog.prototype.focusContent = function () {\n var element = this.getAutoFocusNode(this.element);\n var node = !isNullOrUndefined(element) ? element : this.element;\n var userAgent = Browser.userAgent;\n if (userAgent.indexOf('MSIE ') > 0 || userAgent.indexOf('Trident/') > 0) {\n this.element.focus();\n }\n node.focus();\n this.unBindEvent(this.element);\n this.bindEvent(this.element);\n };\n Dialog.prototype.bindEvent = function (element) {\n EventHandler.add(element, 'keydown', this.keyDown, this);\n };\n Dialog.prototype.unBindEvent = function (element) {\n EventHandler.remove(element, 'keydown', this.keyDown);\n };\n Dialog.prototype.updateSanitizeContent = function () {\n if (!this.isBlazorServerRender()) {\n this.contentEle.innerHTML = this.sanitizeHelper(this.content);\n }\n };\n Dialog.prototype.isBlazorServerRender = function () {\n return isBlazor() && this.isServerRendered;\n };\n /**\n * Module required function\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.getModuleName = function () {\n return 'dialog';\n };\n /**\n * Called internally if any of the property value changed\n *\n * @param {DialogModel} newProp - specifies the new property\n * @param {DialogModel} oldProp - specifies the old property\n * @private\n * @returns {void}\n */\n Dialog.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'content':\n if (!isNullOrUndefined(this.content) && this.content !== '') {\n if (this.isBlazorServerRender()) {\n this.contentEle = this.element.querySelector('.e-dlg-content');\n }\n if (!isNullOrUndefined(this.contentEle) && this.contentEle.getAttribute('role') !== 'dialog') {\n if (!this.isBlazorServerRender()) {\n this.contentEle.innerHTML = '';\n }\n if (typeof (this.content) === 'function') {\n this.clearTemplate(['content']);\n detach(this.contentEle);\n this.contentEle = null;\n this.setContent();\n }\n else {\n if (typeof (this.content) === 'string') {\n if (this.isBlazorServerRender() && (this.contentEle.innerText === '')) {\n this.contentEle.insertAdjacentHTML('beforeend', this.sanitizeHelper(this.content));\n }\n else {\n this.updateSanitizeContent();\n }\n }\n else {\n this.contentEle.appendChild(this.content);\n }\n }\n this.setMaxHeight();\n }\n else {\n if (!this.isBlazorServerRender() ||\n isNullOrUndefined(this.element.querySelector('.e-dlg-content'))) {\n this.setContent();\n }\n }\n }\n else if (!isNullOrUndefined(this.contentEle)) {\n detach(this.contentEle);\n this.contentEle = null;\n }\n break;\n case 'header':\n if (this.header === '' || isNullOrUndefined(this.header)) {\n if (this.headerEle) {\n detach(this.headerEle);\n this.headerEle = null;\n }\n }\n else {\n if (!this.isBlazorServerRender() ||\n isNullOrUndefined(this.element.querySelector('.e-dlg-header-content'))) {\n this.setHeader();\n }\n }\n break;\n case 'footerTemplate':\n if (this.footerTemplate === '' || isNullOrUndefined(this.footerTemplate)) {\n if (!this.ftrTemplateContent) {\n return;\n }\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n this.buttons = [{}];\n }\n else {\n if (!this.isBlazorServerRender() ||\n isNullOrUndefined(this.element.querySelector('.e-footer-content'))) {\n this.setFooterTemplate();\n }\n this.buttons = [{}];\n }\n break;\n case 'showCloseIcon':\n if (this.element.getElementsByClassName(DLG_CLOSE_ICON).length > 0) {\n if (!this.showCloseIcon && (this.header === '' || isNullOrUndefined(this.header))) {\n detach(this.headerContent);\n this.headerContent = null;\n }\n else if (!this.showCloseIcon) {\n detach(this.closeIcon);\n }\n else {\n if (this.isBlazorServerRender()) {\n this.wireEvents();\n }\n }\n }\n else {\n if (!this.isBlazorServerRender()) {\n this.renderCloseIcon();\n }\n this.wireEvents();\n }\n break;\n case 'locale':\n if (this.showCloseIcon) {\n this.closeIconTitle();\n }\n break;\n case 'visible':\n if (this.visible) {\n this.show();\n }\n else {\n this.hide();\n }\n break;\n case 'isModal':\n this.updateIsModal();\n break;\n case 'height':\n setStyleAttribute(this.element, { 'height': formatUnit(newProp.height) });\n this.updatePersistData();\n break;\n case 'width':\n setStyleAttribute(this.element, { 'width': formatUnit(newProp.width) });\n this.updatePersistData();\n break;\n case 'zIndex':\n this.popupObj.zIndex = this.zIndex;\n if (this.isModal) {\n this.setOverlayZindex(this.zIndex);\n }\n if (this.element.style.zIndex !== this.zIndex.toString()) {\n this.calculatezIndex = false;\n }\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'buttons': {\n this.unWireButtonEvents();\n this.destroyButtons();\n if (!isNullOrUndefined(this.ftrTemplateContent) && !this.isBlazorServerRender()) {\n detach(this.ftrTemplateContent);\n this.ftrTemplateContent = null;\n }\n this.footerTemplate = '';\n this.setButton();\n break;\n }\n case 'allowDragging':\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n else {\n this.dragObj.destroy();\n }\n break;\n case 'target':\n this.setTarget(newProp.target);\n break;\n case 'position':\n this.checkPositionData();\n if (this.isModal) {\n var positionX = this.position.X;\n var positionY = this.position.Y;\n if (!isNullOrUndefined(oldProp.position)) {\n if (!isNullOrUndefined(oldProp.position.X)) {\n positionX = oldProp.position.X;\n }\n if (!isNullOrUndefined(oldProp.position.Y)) {\n positionY = oldProp.position.Y;\n }\n }\n if (this.dlgContainer.classList.contains('e-dlg-' + positionX + '-' + positionY)) {\n this.dlgContainer.classList.remove('e-dlg-' + positionX + '-' + positionY);\n }\n }\n this.positionChange();\n this.updatePersistData();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'enableResize':\n this.setResize();\n break;\n case 'minHeight':\n if (this.minHeight !== '') {\n this.element.style.minHeight = formatUnit(this.minHeight);\n }\n break;\n }\n }\n };\n Dialog.prototype.setTarget = function (target) {\n this.popupObj.relateTo = target;\n this.target = target;\n this.targetEle = ((typeof this.target) === 'string') ?\n document.querySelector(this.target) : this.target;\n if (this.dragObj) {\n this.dragObj.dragArea = this.targetEle;\n }\n this.setMaxHeight();\n if (this.isModal) {\n this.updateIsModal();\n }\n if (this.enableResize) {\n this.setResize();\n }\n };\n Dialog.prototype.updateIsModal = function () {\n this.element.setAttribute('aria-modal', this.isModal ? 'true' : 'false');\n if (this.isModal) {\n if (isNullOrUndefined(this.dlgOverlay)) {\n this.setIsModal();\n this.element.style.top = '0px';\n this.element.style.left = '0px';\n if (!isNullOrUndefined(this.targetEle)) {\n this.targetEle.appendChild(this.dlgContainer);\n }\n }\n }\n else {\n removeClass([this.element], MODAL_DLG);\n removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n detach(this.dlgOverlay);\n while (this.dlgContainer.firstChild) {\n this.dlgContainer.parentElement.insertBefore(this.dlgContainer.firstChild, this.dlgContainer);\n }\n this.dlgContainer.parentElement.removeChild(this.dlgContainer);\n }\n if (this.visible) {\n this.show();\n }\n this.positionChange();\n if (this.isModal && this.dlgOverlay) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n Dialog.prototype.setzIndex = function (zIndexElement, setPopupZindex) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n var currentzIndex = getZindexPartial(zIndexElement);\n this.zIndex = currentzIndex > this.zIndex ? currentzIndex : this.zIndex;\n this.isProtectedOnChange = prevOnChange;\n if (setPopupZindex) {\n this.popupObj.zIndex = this.zIndex;\n }\n };\n Dialog.prototype.windowResizeHandler = function () {\n setMaxWidth(this.targetEle.clientWidth);\n setMaxHeight(this.targetEle.clientHeight);\n this.setMaxHeight();\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {void}\n * @private\n */\n Dialog.prototype.getPersistData = function () {\n return this.addOnPersist(['width', 'height', 'position']);\n };\n Dialog.prototype.removeAllChildren = function (element) {\n while (element.children[0]) {\n this.removeAllChildren(element.children[0]);\n element.removeChild(element.children[0]);\n }\n };\n /**\n * To destroy the widget\n *\n * @returns {void}\n */\n Dialog.prototype.destroy = function () {\n if (this.isDestroyed) {\n return;\n }\n var classArray = [RTL, MODAL_DLG, DLG_RESIZABLE, DLG_RESTRICT_LEFT_VALUE, FULLSCREEN, DEVICE];\n var attrs = ['role', 'aria-modal', 'aria-labelledby', 'aria-describedby', 'aria-grabbed', 'tabindex', 'style'];\n removeClass([this.targetEle], [DLG_TARGET, SCROLL_DISABLED]);\n if (!isNullOrUndefined(this.element) && this.element.classList.contains(FULLSCREEN)) {\n removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n }\n if (this.isModal) {\n removeClass([(!isNullOrUndefined(this.targetEle) ? this.targetEle : document.body)], SCROLL_DISABLED);\n }\n this.unWireEvents();\n this.unWireButtonEvents();\n this.destroyButtons();\n if (!isNullOrUndefined(this.closeIconBtnObj)) {\n this.closeIconBtnObj.destroy();\n }\n if (!isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n if (!isNullOrUndefined(this.popupObj.element) && this.popupObj.element.classList.contains(POPUP_ROOT)) {\n this.popupObj.destroy();\n }\n removeClass([this.element], classArray);\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n removeClass([this.element], this.cssClass.split(' '));\n }\n if (!isNullOrUndefined(this.refElement) && !isNullOrUndefined(this.refElement.parentElement)) {\n this.refElement.parentElement.insertBefore((this.isModal ? this.dlgContainer : this.element), this.refElement);\n detach(this.refElement);\n this.refElement = undefined;\n }\n if (this.isModal && !this.isBlazorServerRender()) {\n detach(this.dlgOverlay);\n this.dlgContainer.parentNode.insertBefore(this.element, this.dlgContainer);\n detach(this.dlgContainer);\n }\n if (!this.isBlazorServerRender()) {\n this.element.innerHTML = this.clonedEle.innerHTML;\n }\n if (this.isBlazorServerRender()) {\n if (!isNullOrUndefined(this.element.children)) {\n for (var i = 0; i <= this.element.children.length; i++) {\n i = i - i;\n detach(this.element.children[i]);\n }\n }\n }\n for (var i = 0; i < attrs.length; i++) {\n this.element.removeAttribute(attrs[i]);\n }\n this.ftrTemplateContent = null;\n this.headerContent = null;\n if (!this.isReact && !this.isVue && !isNullOrUndefined(this.contentEle)) {\n this.removeAllChildren(this.contentEle);\n }\n this.contentEle = null;\n if (!this.isBlazorServerRender()) {\n _super.prototype.destroy.call(this);\n }\n else {\n this.isDestroyed = true;\n }\n // eslint-disable-next-line\n if (this.isReact) {\n this.clearTemplate();\n }\n };\n Dialog.prototype.wireWindowResizeEvent = function () {\n this.boundWindowResizeHandler = this.windowResizeHandler.bind(this);\n window.addEventListener('resize', this.boundWindowResizeHandler);\n };\n Dialog.prototype.unWireWindowResizeEvent = function () {\n window.removeEventListener('resize', this.boundWindowResizeHandler);\n this.boundWindowResizeHandler = null;\n };\n /**\n * Binding event to the element while widget creation\n *\n * @returns {void}\n * @hidden\n */\n Dialog.prototype.wireEvents = function () {\n if (this.isBlazorServerRender() && this.showCloseIcon) {\n this.closeIcon = this.element.getElementsByClassName('e-dlg-closeicon-btn')[0];\n }\n if (this.showCloseIcon) {\n EventHandler.add(this.closeIcon, 'click', this.closeIconClickEventHandler, this);\n }\n if (this.isModal && this.dlgOverlay) {\n EventHandler.add(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler, this);\n }\n };\n /**\n * Unbinding event to the element while widget destroy\n *\n * @returns {void}\n * @hidden\n */\n Dialog.prototype.unWireEvents = function () {\n if (this.showCloseIcon) {\n EventHandler.remove(this.closeIcon, 'click', this.closeIconClickEventHandler);\n }\n if (this.isModal) {\n EventHandler.remove(this.dlgOverlay, 'click', this.dlgOverlayClickEventHandler);\n }\n };\n Dialog.prototype.unWireButtonEvents = function () {\n if (this.buttons.length > 0 && this.footerTemplate === '' && this.ftrTemplateContent) {\n for (var i = 0; i < this.buttons.length; i++) {\n if (this.buttons[i].click && typeof (this.buttons[i].click) === 'function'\n && this.ftrTemplateContent.children[i]) {\n EventHandler.remove(this.ftrTemplateContent.children[i], 'click', this.buttons[i].click);\n }\n }\n }\n };\n Dialog.prototype.destroyButtons = function () {\n if (!isNullOrUndefined(this.btnObj)) {\n for (var i = 0; i < this.btnObj.length; i++) {\n if (this.btnObj[i] && !this.btnObj[i].isDestroyed) {\n this.btnObj[i].destroy();\n }\n }\n }\n };\n /**\n * Refreshes the dialog's position when the user changes its header and footer height/width dynamically.\n *\n * @returns {void}\n */\n Dialog.prototype.refreshPosition = function () {\n this.popupObj.refreshPosition();\n if (this.element.classList.contains(MODAL_DLG)) {\n this.positionChange();\n }\n };\n /**\n * Returns the current width and height of the Dialog\n *\n * @returns {DialogDimension}- returns the dialog element Dimension.\n * @public\n */\n Dialog.prototype.getDimension = function () {\n var dialogWidth = this.element.offsetWidth;\n var dialogHeight = this.element.offsetHeight;\n return { width: dialogWidth, height: dialogHeight };\n };\n /**\n * Opens the dialog if it is in hidden state.\n * To open the dialog with full screen width, set the parameter to true.\n *\n * @param { boolean } isFullScreen - Enable the fullScreen Dialog.\n * @returns {void}\n */\n Dialog.prototype.show = function (isFullScreen) {\n var _this = this;\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n if (!this.element.classList.contains(DLG_SHOW) || (!isNullOrUndefined(isFullScreen))) {\n if (!isNullOrUndefined(isFullScreen)) {\n this.fullScreen(isFullScreen);\n }\n var eventArgs_1 = isBlazor() ? {\n cancel: false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n maxHeight: this.element.style.maxHeight\n } : {\n cancel: false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n target: this.target,\n maxHeight: this.element.style.maxHeight\n };\n this.trigger('beforeOpen', eventArgs_1, function (beforeOpenArgs) {\n if (!beforeOpenArgs.cancel) {\n if (_this.element.style.maxHeight !== eventArgs_1.maxHeight) {\n _this.allowMaxHeight = false;\n _this.element.style.maxHeight = eventArgs_1.maxHeight;\n }\n if (_this.enableResize && _this.boundWindowResizeHandler == null && !_this.initialRender) {\n _this.wireWindowResizeEvent();\n }\n _this.storeActiveElement = document.activeElement;\n _this.element.tabIndex = -1;\n if (_this.isModal && (!isNullOrUndefined(_this.dlgOverlay))) {\n _this.dlgOverlay.style.display = 'block';\n _this.dlgContainer.style.display = 'flex';\n removeClass([_this.dlgOverlay], 'e-fade');\n if (!isNullOrUndefined(_this.targetEle)) {\n if (_this.targetEle === document.body) {\n _this.dlgContainer.style.position = 'fixed';\n }\n else {\n _this.dlgContainer.style.position = 'absolute';\n }\n _this.dlgOverlay.style.position = 'absolute';\n var targetType = _this.getTargetContainer(_this.target);\n if (targetType instanceof Element) {\n var computedStyle = window.getComputedStyle(targetType);\n if (computedStyle.getPropertyValue('direction') === 'rtl') {\n _this.element.style.position = 'absolute';\n }\n else {\n _this.element.style.position = 'relative';\n }\n }\n else {\n _this.element.style.position = 'relative';\n }\n addClass([_this.targetEle], [DLG_TARGET, SCROLL_DISABLED]);\n }\n else {\n addClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n }\n }\n var openAnimation = {\n name: (_this.animationSettings.effect === 'None' && animationMode === 'Enable') ? 'Zoom' + 'In' : _this.animationSettings.effect + 'In',\n duration: _this.animationSettings.duration,\n delay: _this.animationSettings.delay\n };\n var zIndexElement = (_this.isModal) ? _this.element.parentElement : _this.element;\n if (_this.calculatezIndex) {\n _this.setzIndex(zIndexElement, true);\n setStyleAttribute(_this.element, { 'zIndex': _this.zIndex });\n if (_this.isModal) {\n _this.setOverlayZindex(_this.zIndex);\n }\n }\n // eslint-disable-next-line\n (_this.animationSettings.effect === 'None' && animationMode === 'Enable') ? _this.popupObj.show(openAnimation) : ((_this.animationSettings.effect === 'None') ? _this.popupObj.show() : _this.popupObj.show(openAnimation));\n if (_this.isModal) {\n var targetType = _this.getTargetContainer(_this.target);\n if (targetType instanceof Element) {\n var computedStyle = window.getComputedStyle(targetType);\n if (computedStyle.getPropertyValue('direction') === 'rtl' && !_this.IsDragStop) {\n _this.setPopupPosition();\n }\n }\n }\n _this.dialogOpen = true;\n var prevOnChange = _this.isProtectedOnChange;\n _this.isProtectedOnChange = true;\n _this.visible = true;\n _this.preventVisibility = true;\n _this.isProtectedOnChange = prevOnChange;\n }\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.renderReactTemplates();\n }\n };\n /**\n * Closes the dialog if it is in visible state.\n *\n * @param { Event } event - specifies the event\n * @returns {void}\n */\n Dialog.prototype.hide = function (event) {\n var _this = this;\n if (!this.element.classList.contains(ROOT)) {\n return;\n }\n if (this.preventVisibility) {\n var eventArgs = isBlazor() ? {\n cancel: false,\n isInteracted: event ? true : false,\n element: this.element,\n container: this.isModal ? this.dlgContainer : this.element,\n event: event\n } : {\n cancel: false,\n isInteracted: event ? true : false,\n element: this.element,\n target: this.target,\n container: this.isModal ? this.dlgContainer : this.element,\n event: event,\n closedBy: this.dlgClosedBy\n };\n this.closeArgs = eventArgs;\n this.trigger('beforeClose', eventArgs, function (beforeCloseArgs) {\n if (!beforeCloseArgs.cancel) {\n if (_this.isModal) {\n if (!isNullOrUndefined(_this.targetEle)) {\n removeClass([_this.targetEle], [DLG_TARGET, SCROLL_DISABLED]);\n }\n }\n if (_this.enableResize) {\n _this.unWireWindowResizeEvent();\n }\n if (document.body.classList.contains(DLG_TARGET) &&\n document.body.classList.contains(SCROLL_DISABLED)) {\n removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n }\n var closeAnimation = {\n name: (_this.animationSettings.effect === 'None' && animationMode === 'Enable') ? 'Zoom' + 'Out' : _this.animationSettings.effect + 'Out',\n duration: _this.animationSettings.duration,\n delay: _this.animationSettings.delay\n };\n if (_this.animationSettings.effect === 'None' && animationMode === 'Enable') {\n _this.popupObj.hide(closeAnimation);\n }\n else if (_this.animationSettings.effect === 'None') {\n _this.popupObj.hide();\n }\n else {\n _this.popupObj.hide(closeAnimation);\n }\n _this.dialogOpen = false;\n var prevOnChange = _this.isProtectedOnChange;\n _this.isProtectedOnChange = true;\n _this.visible = false;\n _this.preventVisibility = false;\n _this.isProtectedOnChange = prevOnChange;\n }\n _this.dlgClosedBy = DLG_USER_ACTION_CLOSED;\n });\n }\n };\n /**\n * Specifies to view the Full screen Dialog.\n *\n * @param {boolean} args - specifies the arguments\n * @returns {boolean} - returns the boolean value\n * @private\n */\n Dialog.prototype.fullScreen = function (args) {\n /* eslint-disable */\n var top = this.element.offsetTop;\n var left = this.element.offsetLeft;\n /* eslint-enable */\n if (args) {\n if (!this.isModal) {\n this.element.style.top = document.scrollingElement.scrollTop + 'px';\n }\n addClass([this.element], FULLSCREEN);\n var display = this.element.style.display;\n this.element.style.display = 'none';\n this.element.style.maxHeight = (!isNullOrUndefined(this.target)) ?\n (this.targetEle.offsetHeight) + 'px' : (window.innerHeight) + 'px';\n this.element.style.display = display;\n addClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n if (this.allowDragging && !isNullOrUndefined(this.dragObj)) {\n this.dragObj.destroy();\n }\n }\n else {\n removeClass([this.element], FULLSCREEN);\n removeClass([document.body], [DLG_TARGET, SCROLL_DISABLED]);\n if (this.allowDragging && (!isNullOrUndefined(this.headerContent))) {\n this.setAllowDragging();\n }\n }\n return args;\n };\n /**\n * Returns the dialog button instances.\n * Based on that, you can dynamically change the button states.\n *\n * @param { number } index - Index of the button.\n * @returns {Button} - returns the button element\n */\n Dialog.prototype.getButtons = function (index) {\n if (!isNullOrUndefined(index)) {\n return this.btnObj[index];\n }\n return this.btnObj;\n };\n __decorate([\n Property('')\n ], Dialog.prototype, \"content\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"showCloseIcon\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"isModal\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"header\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"enableResize\", void 0);\n __decorate([\n Property(['South-East'])\n ], Dialog.prototype, \"resizeHandles\", void 0);\n __decorate([\n Property('auto')\n ], Dialog.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"minHeight\", void 0);\n __decorate([\n Property('100%')\n ], Dialog.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"cssClass\", void 0);\n __decorate([\n Property(1000)\n ], Dialog.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], Dialog.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], Dialog.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], Dialog.prototype, \"allowDragging\", void 0);\n __decorate([\n Collection([{}], ButtonProps)\n ], Dialog.prototype, \"buttons\", void 0);\n __decorate([\n Property(true)\n ], Dialog.prototype, \"closeOnEscape\", void 0);\n __decorate([\n Complex({}, AnimationSettings)\n ], Dialog.prototype, \"animationSettings\", void 0);\n __decorate([\n Complex({ X: 'center', Y: 'center' }, PositionData)\n ], Dialog.prototype, \"position\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeSanitizeHtml\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"dragStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"overlayClick\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizeStart\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizing\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"resizeStop\", void 0);\n __decorate([\n Event()\n ], Dialog.prototype, \"destroyed\", void 0);\n Dialog = __decorate([\n NotifyPropertyChanges\n ], Dialog);\n return Dialog;\n}(Component));\nexport { Dialog };\n/**\n * Base for creating Alert and Confirmation Dialog through util method.\n */\n// eslint-disable-next-line\nexport var DialogUtility;\n(function (DialogUtility) {\n /**\n * An alert dialog box is used to display warning like messages to the users.\n * ```\n * Eg : DialogUtility.alert('Alert message');\n *\n * ```\n */\n /* istanbul ignore next */\n /**\n *\n * @param {AlertDialogArgs} args - specifies the string\n * @returns {Dialog} - returns the dialog element.\n */\n function alert(args) {\n var dialogElement = createElement('div', { 'className': DLG_UTIL_ALERT });\n document.body.appendChild(dialogElement);\n var alertDialogObj;\n var okButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n alertDialogObj = createDialog({ content: args,\n position: { X: 'center', Y: 'top' },\n isModal: true, header: DLG_UTIL_DEFAULT_TITLE,\n buttons: okButtonModel }, dialogElement);\n }\n else {\n alertDialogObj = createDialog(alertOptions(args), dialogElement);\n }\n alertDialogObj.close = function () {\n if (args && args.close) {\n args.close.apply(alertDialogObj);\n }\n alertDialogObj.destroy();\n if (alertDialogObj.element.classList.contains('e-dlg-modal')) {\n alertDialogObj.element.parentElement.remove();\n alertDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n alertDialogObj.element.remove();\n }\n };\n return alertDialogObj;\n }\n DialogUtility.alert = alert;\n /**\n * A confirm dialog displays a specified message along with ‘OK’ and ‘Cancel’ button.\n * ```\n * Eg : DialogUtility.confirm('Confirm dialog message');\n *\n * ```\n */\n /* istanbul ignore next */\n /**\n *\n * @param {ConfirmDialogArgs} args - specifies the args\n * @returns {Dialog} - returns te element\n */\n function confirm(args) {\n var dialogElement = createElement('div', { 'className': DLG_UTIL_CONFIRM });\n document.body.appendChild(dialogElement);\n var confirmDialogObj;\n var okCancelButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }, {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n }];\n if (typeof (args) === 'string') {\n confirmDialogObj = createDialog({ position: { X: 'center', Y: 'top' }, content: args, isModal: true,\n header: DLG_UTIL_DEFAULT_TITLE, buttons: okCancelButtonModel\n }, dialogElement);\n }\n else {\n confirmDialogObj = createDialog(confirmOptions(args), dialogElement);\n }\n confirmDialogObj.close = function () {\n if (args && args.close) {\n args.close.apply(confirmDialogObj);\n }\n confirmDialogObj.destroy();\n if (confirmDialogObj.element.classList.contains('e-dlg-modal')) {\n confirmDialogObj.element.parentElement.remove();\n confirmDialogObj.target.classList.remove(DLG_UTIL_ROOT);\n }\n else {\n confirmDialogObj.element.remove();\n }\n };\n return confirmDialogObj;\n }\n DialogUtility.confirm = confirm;\n // eslint-disable-next-line\n function createDialog(options, element) {\n var dialogObject = new Dialog(options);\n dialogObject.appendTo(element);\n return dialogObject;\n }\n // eslint-disable-next-line\n function alertOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setAlertButtonModel(options, option);\n return options;\n }\n // eslint-disable-next-line\n function confirmOptions(option) {\n var options = {};\n options.buttons = [];\n options = formOptions(options, option);\n options = setConfirmButtonModel(options, option);\n return options;\n }\n // eslint-disable-next-line\n function formOptions(options, option) {\n options.header = !isNullOrUndefined(option.title) ? option.title : null;\n options.content = !isNullOrUndefined(option.content) ? option.content : '';\n options.isModal = !isNullOrUndefined(option.isModal) ? option.isModal : true;\n options.showCloseIcon = !isNullOrUndefined(option.showCloseIcon) ? option.showCloseIcon : false;\n options.allowDragging = !isNullOrUndefined(option.isDraggable) ? option.isDraggable : false;\n options.closeOnEscape = !isNullOrUndefined(option.closeOnEscape) ? option.closeOnEscape : false;\n options.position = !isNullOrUndefined(option.position) ? option.position : { X: 'center', Y: 'top' };\n options.animationSettings = !isNullOrUndefined(option.animationSettings) ? option.animationSettings :\n { effect: 'Fade', duration: 400, delay: 0 };\n options.cssClass = !isNullOrUndefined(option.cssClass) ? option.cssClass : '';\n options.zIndex = !isNullOrUndefined(option.zIndex) ? option.zIndex : 1000;\n options.open = !isNullOrUndefined(option.open) ? option.open : null;\n options.width = !isNullOrUndefined(option.width) ? option.width : 'auto';\n options.height = !isNullOrUndefined(option.height) ? option.height : 'auto';\n return options;\n }\n // eslint-disable-next-line\n function setAlertButtonModel(options, option) {\n var alertButtonModel = [{\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n }];\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, alertButtonModel[0]);\n }\n else {\n options.buttons = alertButtonModel;\n }\n return options;\n }\n // eslint-disable-next-line\n function setConfirmButtonModel(options, option) {\n var okButtonModel = {\n buttonModel: { isPrimary: true, content: 'OK' },\n click: function () {\n this.hide();\n }\n };\n var cancelButtonModel = {\n buttonModel: { content: 'Cancel' },\n click: function () {\n this.hide();\n }\n };\n if (!isNullOrUndefined(option.okButton)) {\n options.buttons[0] = formButtonModel(options.buttons[0], option.okButton, okButtonModel);\n }\n else {\n options.buttons[0] = okButtonModel;\n }\n if (!isNullOrUndefined(option.cancelButton)) {\n options.buttons[1] = formButtonModel(options.buttons[1], option.cancelButton, cancelButtonModel);\n }\n else {\n options.buttons[1] = cancelButtonModel;\n }\n return options;\n }\n // eslint-disable-next-line\n function formButtonModel(buttonModel, option, buttonPropModel) {\n var buttonProps = buttonPropModel;\n if (!isNullOrUndefined(option.text)) {\n buttonProps.buttonModel.content = option.text;\n }\n if (!isNullOrUndefined(option.icon)) {\n buttonProps.buttonModel.iconCss = option.icon;\n }\n if (!isNullOrUndefined(option.cssClass)) {\n buttonProps.buttonModel.cssClass = option.cssClass;\n }\n if (!isNullOrUndefined(option.click)) {\n buttonProps.click = option.click;\n }\n if (!isNullOrUndefined(option.isFlat)) {\n buttonProps.isFlat = option.isFlat;\n }\n return buttonProps;\n }\n})(DialogUtility || (DialogUtility = {}));\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable security/detect-object-injection */\nimport { DataUtil } from './util';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Query class is used to build query which is used by the DataManager to communicate with datasource.\n */\nvar Query = /** @class */ (function () {\n /**\n * Constructor for Query class.\n *\n * @param {string|string[]} from?\n * @param from\n * @hidden\n */\n function Query(from) {\n /** @hidden */\n this.subQuery = null;\n /** @hidden */\n this.isChild = false;\n /** @hidden */\n this.distincts = [];\n this.queries = [];\n this.key = '';\n this.fKey = '';\n if (typeof from === 'string') {\n this.fromTable = from;\n }\n else if (from && from instanceof Array) {\n this.lookups = from;\n }\n this.expands = [];\n this.sortedColumns = [];\n this.groupedColumns = [];\n this.subQuery = null;\n this.isChild = false;\n this.params = [];\n this.lazyLoad = [];\n return this;\n }\n /**\n * Sets the primary key.\n *\n * @param {string} field - Defines the column field.\n */\n Query.prototype.setKey = function (field) {\n this.key = field;\n return this;\n };\n /**\n * Sets default DataManager to execute query.\n *\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.using = function (dataManager) {\n this.dataManager = dataManager;\n return this;\n };\n /**\n * Executes query with the given DataManager.\n *\n * @param {DataManager} dataManager - Defines the DataManager.\n * @param {Function} done - Defines the success callback.\n * @param {Function} fail - Defines the failure callback.\n * @param {Function} always - Defines the callback which will be invoked on either success or failure.\n *\n *
\n     * let dataManager: DataManager = new DataManager([{ ID: '10' }, { ID: '2' }, { ID: '1' }, { ID: '20' }]);\n     * let query: Query = new Query();\n     * query.sortBy('ID', (x: string, y: string): number => { return parseInt(x, 10) - parseInt(y, 10) });\n     * let promise: Promise< Object > = query.execute(dataManager);\n     * promise.then((e: { result: Object }) => { });\n     * 
\n */\n Query.prototype.execute = function (dataManager, done, fail, always) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeQuery(this, done, fail, always);\n }\n return DataUtil.throwError('Query - execute() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Executes query with the local datasource.\n *\n * @param {DataManager} dataManager - Defines the DataManager.\n */\n Query.prototype.executeLocal = function (dataManager) {\n dataManager = dataManager || this.dataManager;\n if (dataManager) {\n return dataManager.executeLocal(this);\n }\n return DataUtil.throwError('Query - executeLocal() : dataManager needs to be is set using \"using\" function or should be passed as argument');\n };\n /**\n * Creates deep copy of the Query object.\n */\n Query.prototype.clone = function () {\n var cloned = new Query();\n cloned.queries = this.queries.slice(0);\n cloned.key = this.key;\n cloned.isChild = this.isChild;\n cloned.dataManager = this.dataManager;\n cloned.fromTable = this.fromTable;\n cloned.params = this.params.slice(0);\n cloned.expands = this.expands.slice(0);\n cloned.sortedColumns = this.sortedColumns.slice(0);\n cloned.groupedColumns = this.groupedColumns.slice(0);\n cloned.subQuerySelector = this.subQuerySelector;\n cloned.subQuery = this.subQuery;\n cloned.fKey = this.fKey;\n cloned.isCountRequired = this.isCountRequired;\n cloned.distincts = this.distincts.slice(0);\n cloned.lazyLoad = this.lazyLoad.slice(0);\n return cloned;\n };\n /**\n * Specifies the name of table to retrieve data in query execution.\n *\n * @param {string} tableName - Defines the table name.\n */\n Query.prototype.from = function (tableName) {\n this.fromTable = tableName;\n return this;\n };\n /**\n * Adds additional parameter which will be sent along with the request which will be generated while DataManager execute.\n *\n * @param {string} key - Defines the key of additional parameter.\n * @param {Function|string} value - Defines the value for the key.\n */\n Query.prototype.addParams = function (key, value) {\n if (typeof value === 'function') {\n this.params.push({ key: key, fn: value });\n }\n else {\n this.params.push({ key: key, value: value });\n }\n return this;\n };\n /**\n * @param fields\n * @hidden\n */\n Query.prototype.distinct = function (fields) {\n if (typeof fields === 'string') {\n this.distincts = [].slice.call([fields], 0);\n }\n else {\n this.distincts = fields.slice(0);\n }\n return this;\n };\n /**\n * Expands the related table.\n *\n * @param {string|Object[]} tables\n */\n Query.prototype.expand = function (tables) {\n if (typeof tables === 'string') {\n this.expands = [].slice.call([tables], 0);\n }\n else {\n this.expands = tables.slice(0);\n }\n return this;\n };\n /**\n * Filter data with given filter criteria.\n *\n * @param {string|Predicate} fieldName - Defines the column field or Predicate.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string|number|boolean} value - Defines the values to match with data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreAccent\n * @param matchCase\n */\n Query.prototype.where = function (fieldName, operator, value, ignoreCase, ignoreAccent, matchCase) {\n operator = operator ? (operator).toLowerCase() : null;\n var predicate = null;\n if (typeof fieldName === 'string') {\n predicate = new Predicate(fieldName, operator, value, ignoreCase, ignoreAccent, matchCase);\n }\n else if (fieldName instanceof Predicate) {\n predicate = fieldName;\n }\n this.queries.push({\n fn: 'onWhere',\n e: predicate\n });\n return this;\n };\n /**\n * Search data with given search criteria.\n *\n * @param {string|number|boolean} searchKey - Defines the search key.\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n * @param {string} operator - Defines the operator how to search data.\n * @param {boolean} ignoreCase - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreAccent\n */\n Query.prototype.search = function (searchKey, fieldNames, operator, ignoreCase, ignoreAccent) {\n if (typeof fieldNames === 'string') {\n fieldNames = [fieldNames];\n }\n if (!operator || operator === 'none') {\n operator = 'contains';\n }\n var comparer = DataUtil.fnOperators[operator];\n this.queries.push({\n fn: 'onSearch',\n e: {\n fieldNames: fieldNames,\n operator: operator,\n searchKey: searchKey,\n ignoreCase: ignoreCase,\n ignoreAccent: ignoreAccent,\n comparer: comparer\n }\n });\n return this;\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n *\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n * @param isFromGroup\n */\n Query.prototype.sortBy = function (fieldName, comparer, isFromGroup) {\n return this.sortByForeignKey(fieldName, comparer, isFromGroup);\n };\n /**\n * Sort the data with given sort criteria.\n * By default, sort direction is ascending.\n *\n * @param {string|string[]} fieldName - Defines the single or collection of column fields.\n * @param {string|Function} comparer - Defines the sort direction or custom sort comparer function.\n * @param isFromGroup\n * @param {string} direction - Defines the sort direction .\n */\n Query.prototype.sortByForeignKey = function (fieldName, comparer, isFromGroup, direction) {\n var order = !isNullOrUndefined(direction) ? direction : 'ascending';\n var sorts;\n var temp;\n if (typeof fieldName === 'string' && DataUtil.endsWith(fieldName.toLowerCase(), ' desc')) {\n fieldName = fieldName.replace(/ desc$/i, '');\n comparer = 'descending';\n }\n if (!comparer || typeof comparer === 'string') {\n order = comparer ? comparer.toLowerCase() : 'ascending';\n comparer = DataUtil.fnSort(comparer);\n }\n if (isFromGroup) {\n sorts = Query.filterQueries(this.queries, 'onSortBy');\n for (var i = 0; i < sorts.length; i++) {\n temp = sorts[i].e.fieldName;\n if (typeof temp === 'string') {\n if (temp === fieldName) {\n return this;\n }\n }\n else if (temp instanceof Array) {\n for (var j = 0; j < temp.length; j++) {\n if (temp[j] === fieldName || fieldName.toLowerCase() === temp[j] + ' desc') {\n return this;\n }\n }\n }\n }\n }\n this.queries.push({\n fn: 'onSortBy',\n e: {\n fieldName: fieldName,\n comparer: comparer,\n direction: order\n }\n });\n return this;\n };\n /**\n * Sorts data in descending order.\n *\n * @param {string} fieldName - Defines the column field.\n */\n Query.prototype.sortByDesc = function (fieldName) {\n return this.sortBy(fieldName, 'descending');\n };\n /**\n * Groups data with the given field name.\n *\n * @param {string} fieldName - Defines the column field.\n * @param fn\n * @param format\n */\n Query.prototype.group = function (fieldName, fn, format) {\n this.sortBy(fieldName, null, true);\n this.queries.push({\n fn: 'onGroup',\n e: {\n fieldName: fieldName,\n comparer: fn ? fn : null,\n format: format ? format : null\n }\n });\n return this;\n };\n /**\n * Gets data based on the given page index and size.\n *\n * @param {number} pageIndex - Defines the current page index.\n * @param {number} pageSize - Defines the no of records per page.\n */\n Query.prototype.page = function (pageIndex, pageSize) {\n this.queries.push({\n fn: 'onPage',\n e: {\n pageIndex: pageIndex,\n pageSize: pageSize\n }\n });\n return this;\n };\n /**\n * Gets data based on the given start and end index.\n *\n * @param {number} start - Defines the start index of the datasource.\n * @param {number} end - Defines the end index of the datasource.\n */\n Query.prototype.range = function (start, end) {\n this.queries.push({\n fn: 'onRange',\n e: {\n start: start,\n end: end\n }\n });\n return this;\n };\n /**\n * Gets data from the top of the data source based on given number of records count.\n *\n * @param {number} nos - Defines the no of records to retrieve from datasource.\n */\n Query.prototype.take = function (nos) {\n this.queries.push({\n fn: 'onTake',\n e: {\n nos: nos\n }\n });\n return this;\n };\n /**\n * Skips data with given number of records count from the top of the data source.\n *\n * @param {number} nos - Defines the no of records skip in the datasource.\n */\n Query.prototype.skip = function (nos) {\n this.queries.push({\n fn: 'onSkip',\n e: { nos: nos }\n });\n return this;\n };\n /**\n * Selects specified columns from the data source.\n *\n * @param {string|string[]} fieldNames - Defines the collection of column fields.\n */\n Query.prototype.select = function (fieldNames) {\n if (typeof fieldNames === 'string') {\n fieldNames = [].slice.call([fieldNames], 0);\n }\n this.queries.push({\n fn: 'onSelect',\n e: { fieldNames: fieldNames }\n });\n return this;\n };\n /**\n * Gets the records in hierarchical relationship from two tables. It requires the foreign key to relate two tables.\n *\n * @param {Query} query - Defines the query to relate two tables.\n * @param {Function} selectorFn - Defines the custom function to select records.\n */\n Query.prototype.hierarchy = function (query, selectorFn) {\n this.subQuerySelector = selectorFn;\n this.subQuery = query;\n return this;\n };\n /**\n * Sets the foreign key which is used to get data from the related table.\n *\n * @param {string} key - Defines the foreign key.\n */\n Query.prototype.foreignKey = function (key) {\n this.fKey = key;\n return this;\n };\n /**\n * It is used to get total number of records in the DataManager execution result.\n */\n Query.prototype.requiresCount = function () {\n this.isCountRequired = true;\n return this;\n };\n //type - sum, avg, min, max\n /**\n * Aggregate the data with given type and field name.\n *\n * @param {string} type - Defines the aggregate type.\n * @param {string} field - Defines the column field to aggregate.\n */\n Query.prototype.aggregate = function (type, field) {\n this.queries.push({\n fn: 'onAggregates',\n e: { field: field, type: type }\n });\n return this;\n };\n /**\n * Pass array of filterColumn query for performing filter operation.\n *\n * @param {QueryOptions[]} queries\n * @param {string} name\n * @hidden\n */\n Query.filterQueries = function (queries, name) {\n return queries.filter(function (q) {\n return q.fn === name;\n });\n };\n /**\n * To get the list of queries which is already filtered in current data source.\n *\n * @param {Object[]} queries\n * @param {string[]} singles\n * @hidden\n */\n Query.filterQueryLists = function (queries, singles) {\n var filtered = queries.filter(function (q) {\n return singles.indexOf(q.fn) !== -1;\n });\n var res = {};\n for (var i = 0; i < filtered.length; i++) {\n if (!res[filtered[i].fn]) {\n res[filtered[i].fn] = filtered[i].e;\n }\n }\n return res;\n };\n return Query;\n}());\nexport { Query };\n/**\n * Predicate class is used to generate complex filter criteria.\n * This will be used by DataManager to perform multiple filtering operation.\n */\nvar Predicate = /** @class */ (function () {\n /**\n * Constructor for Predicate class.\n *\n * @param {string|Predicate} field\n * @param {string} operator\n * @param {string|number|boolean|Predicate|Predicate[]} value\n * @param {boolean=false} ignoreCase\n * @param ignoreAccent\n * @param {boolean} matchCase\n * @hidden\n */\n function Predicate(field, operator, value, ignoreCase, ignoreAccent, matchCase) {\n if (ignoreCase === void 0) { ignoreCase = false; }\n /** @hidden */\n this.ignoreAccent = false;\n /** @hidden */\n this.isComplex = false;\n if (typeof field === 'string') {\n this.field = field;\n this.operator = operator.toLowerCase();\n this.value = value;\n this.matchCase = matchCase;\n this.ignoreCase = ignoreCase;\n this.ignoreAccent = ignoreAccent;\n this.isComplex = false;\n this.comparer = DataUtil.fnOperators.processOperator(this.operator);\n }\n else if (field instanceof Predicate && value instanceof Predicate || value instanceof Array) {\n this.isComplex = true;\n this.condition = operator.toLowerCase();\n this.predicates = [field];\n this.matchCase = field.matchCase;\n this.ignoreCase = field.ignoreCase;\n this.ignoreAccent = field.ignoreAccent;\n if (value instanceof Array) {\n [].push.apply(this.predicates, value);\n }\n else {\n this.predicates.push(value);\n }\n }\n return this;\n }\n /**\n * Adds n-number of new predicates on existing predicate with “and” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.and = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and');\n };\n /**\n * Adds new predicate on existing predicate with “and” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.and = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'and', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “or” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.or = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or');\n };\n /**\n * Adds new predicate on existing predicate with “or” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.or = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'or', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “and not” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.ornot = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'or not');\n };\n /**\n * Adds new predicate on existing predicate with “and not” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.ornot = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'ornot', ignoreCase, ignoreAccent);\n };\n /**\n * Adds n-number of new predicates on existing predicate with “and not” condition.\n *\n * @param {Object[]} args - Defines the collection of predicates.\n */\n Predicate.andnot = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return Predicate.combinePredicates([].slice.call(args, 0), 'and not');\n };\n /**\n * Adds new predicate on existing predicate with “and not” condition.\n *\n * @param {string} field - Defines the column field.\n * @param {string} operator - Defines the operator how to filter data.\n * @param {string} value - Defines the values to match with data.\n * @param {boolean} ignoreCase? - If ignore case set to false, then filter data with exact match or else\n * filter data with case insensitive.\n * @param ignoreCase\n * @param ignoreAccent\n */\n Predicate.prototype.andnot = function (field, operator, value, ignoreCase, ignoreAccent) {\n return Predicate.combine(this, field, operator, value, 'andnot', ignoreCase, ignoreAccent);\n };\n /**\n * Converts plain JavaScript object to Predicate object.\n *\n * @param {Predicate[]|Predicate} json - Defines single or collection of Predicate.\n */\n Predicate.fromJson = function (json) {\n if (json instanceof Array) {\n var res = [];\n for (var i = 0, len = json.length; i < len; i++) {\n res.push(this.fromJSONData(json[i]));\n }\n return res;\n }\n var pred = json;\n return this.fromJSONData(pred);\n };\n /**\n * Validate the record based on the predicates.\n *\n * @param {Object} record - Defines the datasource record.\n */\n Predicate.prototype.validate = function (record) {\n var predicate = this.predicates ? this.predicates : [];\n var ret;\n var isAnd;\n if (!this.isComplex && this.comparer) {\n if (this.condition && this.condition.indexOf('not') !== -1) {\n this.condition = this.condition.split('not')[0] === '' ? undefined : this.condition.split('not')[0];\n return !this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n else {\n return this.comparer.call(this, DataUtil.getObject(this.field, record), this.value, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (this.condition && this.condition.indexOf('not') !== -1) {\n isAnd = this.condition.indexOf('and') !== -1;\n }\n else {\n isAnd = this.condition === 'and';\n }\n for (var i = 0; i < predicate.length; i++) {\n if (i > 0 && this.condition && this.condition.indexOf('not') !== -1) {\n predicate[i].condition = predicate[i].condition ? predicate[i].condition + 'not' : 'not';\n }\n ret = predicate[i].validate(record);\n if (isAnd) {\n if (!ret) {\n return false;\n }\n }\n else {\n if (ret) {\n return true;\n }\n }\n }\n return isAnd;\n };\n /**\n * Converts predicates to plain JavaScript.\n * This method is uses Json stringify when serializing Predicate object.\n */\n Predicate.prototype.toJson = function () {\n var predicates;\n var p;\n if (this.isComplex) {\n predicates = [];\n p = this.predicates;\n for (var i = 0; i < p.length; i++) {\n predicates.push(p[i].toJson());\n }\n }\n return {\n isComplex: this.isComplex,\n field: this.field,\n operator: this.operator,\n value: this.value,\n ignoreCase: this.ignoreCase,\n ignoreAccent: this.ignoreAccent,\n condition: this.condition,\n predicates: predicates,\n matchCase: this.matchCase\n };\n };\n Predicate.combinePredicates = function (predicates, operator) {\n if (predicates.length === 1) {\n if (!(predicates[0] instanceof Array)) {\n return predicates[0];\n }\n predicates = predicates[0];\n }\n return new Predicate(predicates[0], operator, predicates.slice(1));\n };\n Predicate.combine = function (pred, field, operator, value, condition, ignoreCase, ignoreAccent) {\n if (field instanceof Predicate) {\n return Predicate[condition](pred, field);\n }\n if (typeof field === 'string') {\n return Predicate[condition](pred, new Predicate(field, operator, value, ignoreCase, ignoreAccent));\n }\n return DataUtil.throwError('Predicate - ' + condition + ' : invalid arguments');\n };\n Predicate.fromJSONData = function (json) {\n var preds = json.predicates || [];\n var len = preds.length;\n var predicates = [];\n var result;\n for (var i = 0; i < len; i++) {\n predicates.push(this.fromJSONData(preds[i]));\n }\n if (!json.isComplex) {\n result = new Predicate(json.field, json.operator, json.value, json.ignoreCase, json.ignoreAccent);\n }\n else {\n result = new Predicate(predicates[0], json.condition, predicates.slice(1));\n }\n return result;\n };\n return Predicate;\n}());\nexport { Predicate };\n","/* eslint-disable no-inner-declarations */\nimport { extend, merge, isNullOrUndefined, getValue, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { attributes, prepend, isVisible, append, addClass } from '@syncfusion/ej2-base';\nimport { compile } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nexport var cssClass = {\n li: 'e-list-item',\n ul: 'e-list-parent e-ul',\n group: 'e-list-group-item',\n icon: 'e-list-icon',\n text: 'e-list-text',\n check: 'e-list-check',\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: 'e-list-url',\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: 'e-list-img',\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n};\n/**\n * Base List Generator\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var ListBase;\n(function (ListBase) {\n /**\n *\n * Default mapped fields.\n */\n ListBase.defaultMappedFields = {\n id: 'id',\n text: 'text',\n url: 'url',\n value: 'value',\n isChecked: 'isChecked',\n enabled: 'enabled',\n expanded: 'expanded',\n selected: 'selected',\n iconCss: 'iconCss',\n child: 'child',\n isVisible: 'isVisible',\n hasChildren: 'hasChildren',\n tooltip: 'tooltip',\n htmlAttributes: 'htmlAttributes',\n urlAttributes: 'urlAttributes',\n imageAttributes: 'imageAttributes',\n imageUrl: 'imageUrl',\n groupBy: null,\n sortBy: null\n };\n var defaultAriaAttributes = {\n level: 1,\n listRole: 'presentation',\n itemRole: 'presentation',\n groupItemRole: 'group',\n itemText: 'list-item',\n wrapperRole: 'presentation'\n };\n var defaultListBaseOptions = {\n showCheckBox: false,\n showIcon: false,\n enableHtmlSanitizer: false,\n expandCollapse: false,\n fields: ListBase.defaultMappedFields,\n ariaAttributes: defaultAriaAttributes,\n listClass: '',\n itemClass: '',\n processSubChild: false,\n sortOrder: 'None',\n template: null,\n groupTemplate: null,\n headerTemplate: null,\n expandIconClass: 'e-icon-collapsible',\n moduleName: 'list',\n expandIconPosition: 'Right',\n itemNavigable: false\n };\n /**\n * Function helps to created and return the UL Li element based on your data.\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} [options] - Specifies the list options that need to provide.\n *\n * @param {boolean} [isSingleLevel] - Specifies the list options that need to provide.\n *\n * @param {any} [componentInstance] - Specifies the list options that need to provide.\n *\n * @returns {createElement} createListFromJson - Specifies the list options that need to provide.\n */\n function createList(createElement, dataSource, options, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var type = typeofData(dataSource).typeof;\n if (type === 'string' || type === 'number') {\n return createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n }\n else {\n return createListFromJson(createElement, dataSource, options, ariaAttributes.level, isSingleLevel, componentInstance);\n }\n }\n ListBase.createList = createList;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {boolean} [isSingleLevel] - Specifies the list options that need to provide.\n *\n * @param {ListBaseOptions} [options] - Specifies the list options that need to provide.\n *\n * @param {any} [componentInstance] - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - returns the list options that need to provide.\n */\n function createListFromArray(createElement, dataSource, isSingleLevel, options, componentInstance) {\n var subChild = createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance);\n return generateUL(createElement, subChild, null, options);\n }\n ListBase.createListFromArray = createListFromArray;\n /**\n * Function helps to created an element list based on string array input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {boolean} [isSingleLevel] - Specifies the list options that need to provide.\n *\n * @param {ListBaseOptions} [options] - Specifies the list options that need to provide.\n *\n * @param {any} [componentInstance] - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} subChild - returns the list options that need to provide.\n */\n function createListItemFromArray(createElement, dataSource, isSingleLevel, options, componentInstance) {\n var subChild = [];\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n var li = void 0;\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n options: curOpt\n };\n curOpt.itemCreating(curData);\n }\n if (isSingleLevel) {\n li = generateSingleLevelLI(createElement, dataSource[i], undefined, null, null, [], null, id, i, options);\n }\n else {\n li = generateLI(createElement, dataSource[i], undefined, null, null, options, componentInstance);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: dataSource[i],\n item: li,\n options: curOpt\n };\n curOpt.itemCreated(curData);\n }\n subChild.push(li);\n }\n return subChild;\n }\n ListBase.createListItemFromArray = createListItemFromArray;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} [options] - Specifies the list options that need to provide.\n *\n * @param {number} [level] - Specifies the list options that need to provide.\n *\n * @param {boolean} [isSingleLevel] - Specifies the list options that need to provide.\n *\n * @param {any} [componentInstance] - Specifies the list options that need to provide.\n *\n * @returns {HTMLElement[]} child - returns the list options that need to provide.\n */\n function createListItemFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var fields = (componentInstance &&\n (componentInstance.getModuleName() === 'listview' || componentInstance.getModuleName() === 'multiselect'))\n ? curOpt.fields : extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var id;\n var checkboxElement = [];\n if (level) {\n ariaAttributes.level = level;\n }\n var child = [];\n var li;\n var anchorElement;\n if (dataSource && dataSource.length && !isNullOrUndefined(typeofData(dataSource).item) &&\n !Object.prototype.hasOwnProperty.call(typeofData(dataSource).item, fields.id)) {\n id = generateId(); // generate id for drop-down-list option.\n }\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], fields);\n if (isNullOrUndefined(dataSource[i])) {\n continue;\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreating(curData);\n }\n var curItem = dataSource[i];\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], fields);\n }\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.id) && !isNullOrUndefined(fieldData[fields.id])) {\n id = fieldData[fields.id];\n }\n var innerEle = [];\n if (curOpt.showCheckBox) {\n if (curOpt.itemNavigable && (fieldData[fields.url] || fieldData[fields.urlAttributes])) {\n checkboxElement.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n else {\n innerEle.push(createElement('input', { className: cssClass.check, attrs: { type: 'checkbox' } }));\n }\n }\n if (isSingleLevel === true) {\n if (curOpt.showIcon && Object.prototype.hasOwnProperty.call(fieldData, fields.iconCss)\n && !isNullOrUndefined(fieldData[fields.iconCss])) {\n innerEle.push(createElement('span', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] }));\n }\n li = generateSingleLevelLI(createElement, curItem, fieldData, fields, curOpt.itemClass, innerEle, (Object.prototype.hasOwnProperty.call(curItem, 'isHeader') &&\n curItem.isHeader) ? true : false, id, i, options);\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n }\n else {\n li = generateLI(createElement, curItem, fieldData, fields, curOpt.itemClass, options, componentInstance);\n li.classList.add(cssClass.level + '-' + ariaAttributes.level);\n li.setAttribute('aria-level', ariaAttributes.level.toString());\n if (ariaAttributes.groupItemRole === 'presentation' || ariaAttributes.itemRole === 'presentation') {\n li.removeAttribute('aria-level');\n }\n anchorElement = li.querySelector('.' + cssClass.anchorWrap);\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.tooltip)) {\n var tooltipText = fieldData[fields.tooltip];\n if (options && options.enableHtmlSanitizer) {\n tooltipText = SanitizeHtmlHelper.sanitize(tooltipText);\n }\n else {\n var tooltipTextElement = createElement('span', { innerHTML: tooltipText });\n tooltipText = tooltipTextElement.innerText;\n tooltipTextElement = null;\n }\n li.setAttribute('title', tooltipText);\n }\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n var htmlAttributes = fieldData[fields.htmlAttributes];\n // Check if 'class' attribute is present and not an empty string\n if ('class' in htmlAttributes && typeof htmlAttributes['class'] === 'string' && htmlAttributes['class'].trim() === '') {\n delete htmlAttributes['class'];\n }\n setAttribute(li, htmlAttributes);\n }\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.enabled) && fieldData[fields.enabled] === false) {\n li.classList.add(cssClass.disabled);\n }\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.isVisible) && fieldData[fields.isVisible] === false) {\n li.style.display = 'none';\n }\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.imageUrl) && !isNullOrUndefined(fieldData[fields.imageUrl])\n && !curOpt.template) {\n var attr = { src: fieldData[fields.imageUrl], alt: !isNullOrUndefined(fieldData.name) ? ('Displaying ' + fieldData.name + ' Image') : 'Displaying Image' };\n merge(attr, fieldData[fields.imageAttributes]);\n var imageElemnt = createElement('img', { className: cssClass.image, attrs: attr });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', imageElemnt);\n }\n else {\n prepend([imageElemnt], li.firstElementChild);\n }\n }\n if (curOpt.showIcon && Object.prototype.hasOwnProperty.call(fieldData, fields.iconCss) &&\n !isNullOrUndefined(fieldData[fields.iconCss]) && !curOpt.template) {\n var iconElement = createElement('div', { className: cssClass.icon + ' ' + fieldData[fields.iconCss] });\n if (anchorElement) {\n anchorElement.insertAdjacentElement('afterbegin', iconElement);\n }\n else {\n prepend([iconElement], li.firstElementChild);\n }\n }\n if (innerEle.length) {\n prepend(innerEle, li.firstElementChild);\n }\n if (curOpt.itemNavigable && checkboxElement.length) {\n prepend(checkboxElement, li.firstElementChild);\n }\n processSubChild(createElement, fieldData, fields, dataSource, curOpt, li, ariaAttributes.level);\n }\n if (anchorElement) {\n addClass([li], [cssClass.navigable]);\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: dataSource[i],\n text: fieldData[fields.text],\n item: li,\n options: curOpt,\n fields: fields\n };\n curOpt.itemCreated(curData);\n }\n checkboxElement = [];\n child.push(li);\n }\n return child;\n }\n ListBase.createListItemFromJson = createListItemFromJson;\n /**\n * Function helps to created an element list based on array of JSON input .\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n *\n * @param {{Object}[]} dataSource - Specifies an array of JSON data.\n *\n * @param {ListBaseOptions} [options] - Specifies the list options that need to provide.\n *\n * @param {number} [level] - Specifies the list options that need to provide.\n *\n * @param {boolean} [isSingleLevel] - Specifies the list options that need to provide.\n *\n * @param {any} [componentInstance] - Specifies the list options that need to provide.\n *\n * @returns {createElement} generateUL - Specifies the list options that need to provide.\n */\n function createListFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var li = createListItemFromJson(createElement, dataSource, options, level, isSingleLevel, componentInstance);\n return generateUL(createElement, li, curOpt.listClass, options);\n }\n ListBase.createListFromJson = createListFromJson;\n /**\n * Return the next or previous visible element.\n *\n * @param {Element[]|NodeList} elementArray - An element array to find next or previous element.\n * @param {Element} element - An element to find next or previous after this element.\n * @param {boolean} [isPrevious] - Specify when the need get previous element from array.\n * @returns {Element|undefined} The next or previous visible element, or undefined if the element array is empty.\n */\n function getSiblingLI(elementArray, element, isPrevious) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n if (!elementArray || !elementArray.length) {\n return void 0;\n }\n var siblingLI;\n var liIndex;\n var liCollections = Array.prototype.slice.call(elementArray);\n if (element) {\n liIndex = indexOf(element, liCollections);\n }\n else {\n liIndex = (isPrevious === true ? liCollections.length : -1);\n }\n siblingLI = liCollections[liIndex + (isPrevious === true ? -1 : 1)];\n while (siblingLI && (!isVisible(siblingLI) || siblingLI.classList.contains(cssClass.disabled))) {\n liIndex = liIndex + (isPrevious === true ? -1 : 1);\n siblingLI = liCollections[liIndex];\n }\n return siblingLI;\n }\n ListBase.getSiblingLI = getSiblingLI;\n /**\n * Return the index of the li element\n *\n * @param {Element} item - An element to find next or previous after this element.\n * @param {Element[]} elementArray - An element array to find index of given li.\n * @returns {number} - The index of the item in the element array, or undefined if either parameter is false.\n */\n function indexOf(item, elementArray) {\n if (!elementArray || !item) {\n return void 0;\n }\n else {\n var liCollections = elementArray;\n liCollections = Array.prototype.slice.call(elementArray);\n return liCollections.indexOf(item);\n }\n }\n ListBase.indexOf = indexOf;\n /**\n * Returns the grouped data from given dataSource.\n *\n * @param {{Object}[]} dataSource - The JSON data which is necessary to process.\n * @param {FieldsMapping} fields - Fields that are mapped from the data source.\n * @param {SortOrder} [sortOrder='None'] - Specifies final result sort order. Defaults to 'None'.\n * @returns {Object[]} - The grouped data.\n */\n function groupDataSource(dataSource, fields, sortOrder) {\n if (sortOrder === void 0) { sortOrder = 'None'; }\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var cusQuery = new Query().group(curFields.groupBy);\n // need to remove once sorting issues fixed in DataManager\n cusQuery = addSorting(sortOrder, 'key', cusQuery);\n var ds = getDataSource(dataSource, cusQuery);\n dataSource = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[j].items;\n var grpItem = {};\n var hdr = 'isHeader';\n grpItem[curFields.text] = ds[j].key;\n grpItem[\"\" + hdr] = true;\n var newtext = curFields.text;\n if (newtext === 'id') {\n newtext = 'text';\n grpItem[\"\" + newtext] = ds[j].key;\n }\n grpItem._id = 'group-list-item-' + (ds[j].key ?\n ds[j].key.toString().trim() : 'undefined');\n grpItem.items = itemObj;\n dataSource.push(grpItem);\n for (var k = 0; k < itemObj.length; k++) {\n dataSource.push(itemObj[k]);\n }\n }\n return dataSource;\n }\n ListBase.groupDataSource = groupDataSource;\n /**\n * Returns a sorted query object.\n *\n * @param {SortOrder} sortOrder - Specifies that sort order.\n * @param {string} sortBy - Specifies sortBy fields.\n * @param {Query} query - Pass if any existing query.\n * @returns {Query} - The updated query object with sorting applied.\n */\n function addSorting(sortOrder, sortBy, query) {\n if (query === void 0) { query = new Query(); }\n if (sortOrder === 'Ascending') {\n query.sortBy(sortBy, 'ascending', true);\n }\n else if (sortOrder === 'Descending') {\n query.sortBy(sortBy, 'descending', true);\n }\n else {\n for (var i = 0; i < query.queries.length; i++) {\n if (query.queries[i].fn === 'onSortBy') {\n query.queries.splice(i, 1);\n }\n }\n }\n return query;\n }\n ListBase.addSorting = addSorting;\n /**\n * Return an array of JSON Data that processed based on queries.\n *\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n *\n * @param {Query} query - Specifies query that need to process.\n *\n * @returns {Object[]} - An array of objects representing the retrieved data.\n */\n function getDataSource(dataSource, query) {\n return new DataManager(dataSource)\n .executeLocal(query);\n }\n ListBase.getDataSource = getDataSource;\n /**\n * Created JSON data based the UL and LI element\n *\n * @param {HTMLElement|Element} element - UL element that need to convert as a JSON\n * @param {ListBaseOptions} [options] - Specifies ListBase option for fields.\n * @returns {Object[]} - An array of objects representing the JSON data.\n */\n function createJsonFromElement(element, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var fields = extend({}, ListBase.defaultMappedFields, curOpt.fields);\n var curEle = element.cloneNode(true);\n var jsonAr = [];\n curEle.classList.add('json-parent');\n var childs = curEle.querySelectorAll('.json-parent>li');\n curEle.classList.remove('json-parent');\n for (var i = 0; i < childs.length; i++) {\n var li = childs[i];\n var anchor = li.querySelector('a');\n var ul = li.querySelector('ul');\n var json = {};\n var childNodes = anchor ? anchor.childNodes : li.childNodes;\n var keys = Object.keys(childNodes);\n for (var i_1 = 0; i_1 < childNodes.length; i_1++) {\n if (!(childNodes[Number(keys[i_1])]).hasChildNodes()) {\n json[fields.text] = childNodes[Number(keys[i_1])].textContent;\n }\n }\n var attributes_1 = getAllAttributes(li);\n if (attributes_1.id) {\n json[fields.id] = attributes_1.id;\n delete attributes_1.id;\n }\n else {\n json[fields.id] = generateId();\n }\n if (Object.keys(attributes_1).length) {\n json[fields.htmlAttributes] = attributes_1;\n }\n if (anchor) {\n attributes_1 = getAllAttributes(anchor);\n if (Object.keys(attributes_1).length) {\n json[fields.urlAttributes] = attributes_1;\n }\n }\n if (ul) {\n json[fields.child] = createJsonFromElement(ul, options);\n }\n jsonAr.push(json);\n }\n return jsonAr;\n }\n ListBase.createJsonFromElement = createJsonFromElement;\n /**\n * Determines the type of data in an array of objects, strings, or numbers.\n *\n * @param {Object[] | string[] | number[]} data - The array containing objects, strings, or numbers.\n * @returns {{typeof: (string | null), item: (Object | string | number)}} - An object containing the type of data and the corresponding item.\n */\n function typeofData(data) {\n var match = { typeof: null, item: null };\n for (var i = 0; i < data.length; i++) {\n if (!isNullOrUndefined(data[i])) {\n return match = { typeof: typeof data[i], item: data[i] };\n }\n }\n return match;\n }\n /**\n * Sets attributes on an HTML element.\n *\n * @param {HTMLElement} element - The HTML element to set attributes on.\n * @param {Object.} elementAttributes - An object containing attribute names and their corresponding values.\n * @returns {void}\n */\n function setAttribute(element, elementAttributes) {\n var attr = {};\n merge(attr, elementAttributes);\n if (attr.class) {\n addClass([element], attr.class.split(' '));\n delete attr.class;\n }\n attributes(element, attr);\n }\n /**\n * Retrieves all attributes of an HTML element.\n *\n * @param {HTMLElement} element - The HTML element to retrieve attributes from.\n * @returns {Object.} - An object containing attribute names as keys and their corresponding values as values.\n */\n function getAllAttributes(element) {\n var attributes = {};\n var attr = element.attributes;\n for (var index = 0; index < attr.length; index++) {\n attributes[attr[index].nodeName] = attr[index].nodeValue;\n }\n return attributes;\n }\n /**\n * Created UL element from content template.\n *\n * @param {createElementParams} createElement - Specifies an array of JSON data.\n * @param {string} template - that need to convert and generate li element.\n * @param {{Object}[]} dataSource - Specifies local JSON data source.\n * @param {FieldsMapping} [fields] - Specifies fields for mapping the dataSource.\n * @param {ListBaseOptions} [options] - Specifies ListBase option for fields.\n * @param {any} [componentInstance] - Specifies component instance.\n * @returns {HTMLElement} - The generated LI element.\n */\n function renderContentTemplate(createElement, template, dataSource, fields, options, componentInstance) {\n cssClass = getModuleClass(defaultListBaseOptions.moduleName);\n var ulElement = createElement('ul', { className: cssClass.ul, attrs: { role: 'presentation' } });\n var curOpt = extend({}, defaultListBaseOptions, options);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var compiledString = compileTemplate(template);\n var liCollection = [];\n var value;\n var id = generateId(); // generate id for drop-down-list option.\n for (var i = 0; i < dataSource.length; i++) {\n var fieldData = getFieldValues(dataSource[i], curFields);\n var curItem = dataSource[i];\n var isHeader = curItem.isHeader;\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreating(curData);\n }\n if (curOpt.itemCreating && typeof curOpt.itemCreating === 'function') {\n fieldData = getFieldValues(dataSource[i], curFields);\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n value = curItem;\n }\n else {\n value = fieldData[curFields.value];\n }\n }\n var li = createElement('li', {\n id: id + '-' + i,\n className: isHeader ? cssClass.group : cssClass.li, attrs: { role: 'presentation' }\n });\n if (isHeader) {\n if (typeof dataSource[i] === 'string' || typeof dataSource[i] === 'number') {\n li.innerText = curItem;\n }\n else {\n li.innerText = fieldData[curFields.text];\n }\n }\n else {\n var currentID = isHeader ? curOpt.groupTemplateID : curOpt.templateID;\n if (isHeader) {\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n var compiledElement = compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'headerTemplate', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n var compiledElement = compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(curItem, componentInstance, 'template', currentID, !!curOpt.isStringTemplate), li);\n }\n }\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n }\n if (curOpt.itemCreated && typeof curOpt.itemCreated === 'function') {\n var curData = {\n dataSource: dataSource,\n curData: curItem,\n text: value,\n item: li,\n options: curOpt,\n fields: curFields\n };\n curOpt.itemCreated(curData);\n }\n liCollection.push(li);\n }\n append(liCollection, ulElement);\n return ulElement;\n }\n ListBase.renderContentTemplate = renderContentTemplate;\n /**\n * Created header items from group template.\n *\n * @param {string | Function} groupTemplate - that need to convert and generate li element.\n *\n * @param {{Object}[]} groupDataSource - Specifies local JSON data source.\n *\n * @param {FieldsMapping} fields - Specifies fields for mapping the dataSource.\n *\n * @param {Element[]} headerItems - Specifies ListBase header items.\n *\n * @param {ListBaseOptions} [options] - Optional ListBase options.\n *\n * @param {*} [componentInstance] - Optional component instance.\n *\n * @returns {Element[]} - An array of header elements with the rendered group template content.\n */\n function renderGroupTemplate(groupTemplate, \n // tslint:disable-next-line\n groupDataSource, fields, headerItems, options, componentInstance) {\n var compiledString = compileTemplate(groupTemplate);\n var curFields = extend({}, ListBase.defaultMappedFields, fields);\n var curOpt = extend({}, defaultListBaseOptions, options);\n var category = curFields.groupBy;\n for (var _i = 0, headerItems_1 = headerItems; _i < headerItems_1.length; _i++) {\n var header = headerItems_1[_i];\n var headerData = {};\n headerData[\"\" + category] = header.textContent;\n header.innerHTML = '';\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n var compiledElement = compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, header);\n if (compiledElement) {\n append(compiledElement, header);\n }\n }\n else {\n append(compiledString(headerData, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), header);\n }\n }\n return headerItems;\n }\n ListBase.renderGroupTemplate = renderGroupTemplate;\n /**\n * Generates a random hexadecimal ID string.\n *\n * @returns {string} - The generated ID string.\n */\n function generateId() {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n }\n ListBase.generateId = generateId;\n /**\n * Processes the sub-child elements and creates corresponding elements based on the provided field data and options.\n *\n * @param {Function} createElement - Function for creating elements.\n * @param {Object} fieldData - Field data containing sub-child information.\n * @param {FieldsMapping} fields - Field mappings.\n * @param {Object[]} ds - The data source array containing sub-child elements.\n * @param {ListBaseOptions} options - ListBase options.\n * @param {HTMLElement} element - The parent HTML element to append sub-child elements to.\n * @param {number} level - The level of the sub-child elements.\n * @returns {void}\n */\n function processSubChild(createElement, fieldData, fields, ds, options, element, level) {\n // Get SubList\n var subDS = fieldData[fields.child] || [];\n var hasChildren = fieldData[fields.hasChildren];\n //Create Sub child\n if (subDS.length) {\n hasChildren = true;\n element.classList.add(cssClass.hasChild);\n if (options.processSubChild) {\n var subLi = createListFromJson(createElement, subDS, options, ++level);\n element.appendChild(subLi);\n }\n }\n // Create expand and collapse node\n if (!!options.expandCollapse && hasChildren && !options.template) {\n element.firstElementChild.classList.add(cssClass.iconWrapper);\n var expandElement = options.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', { className: 'e-icons ' + options.expandIconClass })], element.querySelector('.' + cssClass.textContent));\n }\n }\n /**\n * Generates a single-level LI (list item) element based on the provided item and field data.\n *\n * @param {Function} createElement - Function for creating elements.\n * @param {string | Object | number} item - The item data.\n * @param {Object} fieldData - Field data mapped from the item.\n * @param {FieldsMapping} [fields] - Field mappings.\n * @param {string} [className] - Optional class name to add to the created LI element.\n * @param {HTMLElement[]} [innerElements] - Optional array of inner elements to append to the LI element.\n * @param {boolean} [grpLI] - Indicates if the LI element is a group item.\n * @param {string} [id] - The ID of the LI element.\n * @param {number} [index] - The index of the LI element.\n * @param {ListBaseOptions} [options] - Optional ListBase options.\n * @returns {HTMLElement} - The generated LI element.\n */\n function generateSingleLevelLI(createElement, item, fieldData, fields, className, innerElements, grpLI, id, index, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var value = item;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number' && typeof item !== 'boolean') {\n dataSource = item;\n text = (typeof fieldData[fields.text] === 'boolean' || typeof fieldData[fields.text] === 'number') ?\n fieldData[fields.text] : (fieldData[fields.text] || '');\n value = fieldData[fields.value];\n }\n var elementID;\n if (!isNullOrUndefined(dataSource) && !isNullOrUndefined(fieldData[fields.id])\n && fieldData[fields.id] !== '') {\n elementID = id;\n }\n else {\n elementID = id + '-' + index;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n id: elementID, attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (dataSource && Object.prototype.hasOwnProperty.call(fieldData, fields.enabled) && fieldData[fields.enabled].toString() === 'false') {\n li.classList.add(cssClass.disabled);\n }\n if (grpLI) {\n li.innerText = text;\n }\n else {\n li.setAttribute('data-value', isNullOrUndefined(value) ? 'null' : value);\n li.setAttribute('role', 'option');\n if (dataSource && Object.prototype.hasOwnProperty.call(fieldData, fields.htmlAttributes) && fieldData[fields.htmlAttributes]) {\n setAttribute(li, fieldData[fields.htmlAttributes]);\n }\n if (innerElements.length && !curOpt.itemNavigable) {\n append(innerElements, li);\n }\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n li.appendChild(anchorTag(createElement, dataSource, fields, text, innerElements, curOpt.itemNavigable));\n }\n else {\n if (innerElements.length && curOpt.itemNavigable) {\n append(innerElements, li);\n }\n li.appendChild(document.createTextNode(text));\n }\n }\n return li;\n }\n /**\n * Returns a set of CSS class names based on the provided module name.\n *\n * @param {string} moduleName - The name of the module.\n * @returns {ClassList} - The CSS class names associated with the module.\n */\n function getModuleClass(moduleName) {\n var moduleClass;\n // eslint-disable-next-line\n return moduleClass = {\n li: \"e-\" + moduleName + \"-item\",\n ul: \"e-\" + moduleName + \"-parent e-ul\",\n group: \"e-\" + moduleName + \"-group-item\",\n icon: \"e-\" + moduleName + \"-icon\",\n text: \"e-\" + moduleName + \"-text\",\n check: \"e-\" + moduleName + \"-check\",\n checked: 'e-checked',\n selected: 'e-selected',\n expanded: 'e-expanded',\n textContent: 'e-text-content',\n hasChild: 'e-has-child',\n level: 'e-level',\n url: \"e-\" + moduleName + \"-url\",\n collapsible: 'e-icon-collapsible',\n disabled: 'e-disabled',\n image: \"e-\" + moduleName + \"-img\",\n iconWrapper: 'e-icon-wrapper',\n anchorWrap: 'e-anchor-wrap',\n navigable: 'e-navigable'\n };\n }\n /**\n * Creates an anchor tag () element based on the provided data source, fields, and text.\n *\n * @param {Function} createElement - Function for creating elements.\n * @param {object} dataSource - The data source containing URL-related fields.\n * @param {FieldsMapping} fields - Field mappings for the data source.\n * @param {string} text - The text content of the anchor tag.\n * @param {HTMLElement[]} innerElements - Optional array of inner elements to append to the anchor tag.\n * @param {boolean} isFullNavigation - Indicates whether the anchor tag should be for full navigation.\n * @returns {HTMLElement} The created anchor tag element.\n */\n function anchorTag(createElement, dataSource, fields, text, innerElements, isFullNavigation) {\n var fieldData = getFieldValues(dataSource, fields);\n var attr = { href: fieldData[fields.url] };\n if (Object.prototype.hasOwnProperty.call(fieldData, fields.urlAttributes) && fieldData[fields.urlAttributes]) {\n merge(attr, fieldData[fields.urlAttributes]);\n attr.href = fieldData[fields.url] ? fieldData[fields.url] :\n fieldData[fields.urlAttributes].href;\n }\n var anchorTag;\n if (!isFullNavigation) {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url, innerHTML: text });\n }\n else {\n anchorTag = createElement('a', { className: cssClass.text + ' ' + cssClass.url });\n var anchorWrapper = createElement('div', { className: cssClass.anchorWrap });\n if (innerElements && innerElements.length) {\n append(innerElements, anchorWrapper);\n }\n anchorWrapper.appendChild(document.createTextNode(text));\n append([anchorWrapper], anchorTag);\n }\n setAttribute(anchorTag, attr);\n return anchorTag;\n }\n /**\n * Generates an LI element based on the provided item and field data.\n *\n * @param {Function} createElement - Function for creating elements.\n * @param {string | Object | number} item - The item data.\n * @param {Object} fieldData - Field data mapped from the item.\n * @param {FieldsMapping} fields - Field mappings.\n * @param {string} [className] - Optional class name to add to the created LI element.\n * @param {ListBaseOptions} [options] - Optional ListBase options.\n * @param {*} [componentInstance] - Optional component instance.\n * @returns {HTMLElement} - The generated LI element.\n */\n function generateLI(createElement, item, fieldData, fields, className, options, componentInstance) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n var text = item;\n var uID;\n var grpLI;\n var dataSource;\n if (typeof item !== 'string' && typeof item !== 'number') {\n dataSource = item;\n text = fieldData[fields.text] || '';\n uID = (isNullOrUndefined(fieldData['_id'])) ? fieldData[fields.id] : fieldData['_id'];\n grpLI = (Object.prototype.hasOwnProperty.call(item, 'isHeader') && item.isHeader)\n ? true : false;\n }\n if (options && options.enableHtmlSanitizer) {\n // eslint-disable-next-line no-self-assign\n text = text;\n }\n var li = createElement('li', {\n className: (grpLI === true ? cssClass.group : cssClass.li) + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.groupItemRole !== '' && ariaAttributes.itemRole !== '' ?\n { role: (grpLI === true ? ariaAttributes.groupItemRole : ariaAttributes.itemRole) } : {})\n });\n if (!isNullOrUndefined(uID) === true) {\n li.setAttribute('data-uid', uID);\n }\n else {\n li.setAttribute('data-uid', generateId());\n }\n if (grpLI && options && options.groupTemplate) {\n var compiledString = compileTemplate(options.groupTemplate);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n var compiledElement = compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'groupTemplate', curOpt.groupTemplateID, !!curOpt.isStringTemplate), li);\n }\n }\n else if (!grpLI && options && options.template) {\n var compiledString = compileTemplate(options.template);\n if (componentInstance && componentInstance.getModuleName() !== 'listview') {\n var compiledElement = compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate, null, li);\n if (compiledElement) {\n append(compiledElement, li);\n }\n }\n else {\n append(compiledString(item, componentInstance, 'template', curOpt.templateID, !!curOpt.isStringTemplate), li);\n }\n }\n else {\n var innerDiv = createElement('div', {\n className: cssClass.textContent,\n attrs: (ariaAttributes.wrapperRole !== '' ? { role: ariaAttributes.wrapperRole } : {})\n });\n if (dataSource && (fieldData[fields.url] || (fieldData[fields.urlAttributes] &&\n fieldData[fields.urlAttributes].href))) {\n innerDiv.appendChild(anchorTag(createElement, dataSource, fields, text, null, curOpt.itemNavigable));\n }\n else {\n var element = createElement('span', {\n className: cssClass.text,\n attrs: (ariaAttributes.itemText !== '' ? { role: ariaAttributes.itemText } : {})\n });\n if (options && options.enableHtmlSanitizer) {\n element.innerText = SanitizeHtmlHelper.sanitize(text);\n }\n else {\n element.innerHTML = text;\n }\n innerDiv.appendChild(element);\n }\n li.appendChild(innerDiv);\n }\n return li;\n }\n /**\n * Returns UL element based on the given LI element.\n *\n * @param {Function} createElement - Function for creating elements.\n *\n * @param {HTMLElement[]} liElement - Specifies array of LI element.\n *\n * @param {string} [className] - Specifies class name that need to be added in UL element.\n *\n * @param {ListBaseOptions} [options] - Specifies ListBase options.\n *\n * @returns {HTMLElement} - The created UL element.\n */\n function generateUL(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n var ariaAttributes = extend({}, defaultAriaAttributes, curOpt.ariaAttributes);\n cssClass = getModuleClass(curOpt.moduleName);\n var ulElement = createElement('ul', {\n className: cssClass.ul + ' ' + (isNullOrUndefined(className) ? '' : className),\n attrs: (ariaAttributes.listRole !== '' ? { role: ariaAttributes.listRole } : {})\n });\n append(liElement, ulElement);\n return ulElement;\n }\n ListBase.generateUL = generateUL;\n /**\n * Returns LI element with additional DIV tag based on the given LI element.\n *\n * @param {Function} createElement - Function for creating elements.\n *\n * @param {liElement} liElement - Specifies LI element.\n *\n * @param {string} [className] - Specifies class name that need to be added in created DIV element.\n *\n * @param {ListBaseOptions} [options] - Specifies ListBase options.\n *\n * @returns {HTMLElement} - The modified LI element.\n */\n function generateIcon(createElement, liElement, className, options) {\n var curOpt = extend({}, defaultListBaseOptions, options);\n cssClass = getModuleClass(curOpt.moduleName);\n var expandElement = curOpt.expandIconPosition === 'Left' ? prepend : append;\n expandElement([createElement('div', {\n className: 'e-icons ' + curOpt.expandIconClass + ' ' +\n (isNullOrUndefined(className) ? '' : className)\n })], liElement.querySelector('.' + cssClass.textContent));\n return liElement;\n }\n ListBase.generateIcon = generateIcon;\n})(ListBase || (ListBase = {}));\n/**\n * Used to get dataSource item from complex data using fields.\n *\n * @param {Object} dataItem - Specifies an JSON or String data.\n *\n * @param {FieldsMapping} fields - Fields that are mapped from the dataSource.\n * @returns {Object|string|number} - The retrieved field values.\n */\nexport function getFieldValues(dataItem, fields) {\n var fieldData = {};\n if (isNullOrUndefined(dataItem) || typeof (dataItem) === 'string' || typeof (dataItem) === 'number'\n || !isNullOrUndefined(dataItem.isHeader)) {\n return dataItem;\n }\n else {\n for (var _i = 0, _a = Object.keys(fields); _i < _a.length; _i++) {\n var field = _a[_i];\n var dataField = fields[\"\" + field];\n var value = !isNullOrUndefined(dataField) &&\n typeof (dataField) === 'string' ? getValue(dataField, dataItem) : undefined;\n if (!isNullOrUndefined(value)) {\n fieldData[\"\" + dataField] = value;\n }\n }\n }\n return fieldData;\n}\n/**\n * Compiles a template string or function into a compiled function.\n *\n * @param {string | Function} template - The template string or function to compile.\n * @returns {Function | undefined} - The compiled function, or undefined if the input is false.\n */\nfunction compileTemplate(template) {\n if (template) {\n try {\n if (typeof template !== 'function' && document.querySelector(template)) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n return undefined;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { merge, extend, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Query, Predicate } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Adaptors are specific data source type aware interfaces that are used by DataManager to communicate with DataSource.\n * This is the base adaptor class that other adaptors can extend.\n *\n * @hidden\n */\nvar Adaptor = /** @class */ (function () {\n /**\n * Constructor for Adaptor class\n *\n * @param {DataOptions} ds?\n * @param ds\n * @hidden\n * @returns aggregates\n */\n function Adaptor(ds) {\n // common options for all the adaptors\n this.options = {\n from: 'table',\n requestType: 'json',\n sortBy: 'sorted',\n select: 'select',\n skip: 'skip',\n group: 'group',\n take: 'take',\n search: 'search',\n count: 'requiresCounts',\n where: 'where',\n aggregates: 'aggregates',\n expand: 'expand'\n };\n /**\n * Specifies the type of adaptor.\n *\n * @default Adaptor\n */\n this.type = Adaptor;\n this.dataSource = ds;\n this.pvt = {};\n }\n /**\n * Returns the data from the query processing.\n *\n * @param {Object} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {Request} xhr?\n * @param ds\n * @param query\n * @param xhr\n * @returns Object\n */\n Adaptor.prototype.processResponse = function (data, ds, query, xhr) {\n return data;\n };\n return Adaptor;\n}());\nexport { Adaptor };\n/**\n * JsonAdaptor is used to process JSON data. It contains methods to process the given JSON data based on the queries.\n *\n * @hidden\n */\nvar JsonAdaptor = /** @class */ (function (_super) {\n __extends(JsonAdaptor, _super);\n function JsonAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the JSON data based on the provided queries.\n *\n * @param {DataManager} dataManager\n * @param {Query} query\n * @returns Object\n */\n JsonAdaptor.prototype.processQuery = function (dataManager, query) {\n var result = dataManager.dataSource.json.slice(0);\n var count = result.length;\n var countFlg = true;\n var ret;\n var key;\n var lazyLoad = {};\n var keyCount = 0;\n var group = [];\n var sort = [];\n var page;\n for (var i = 0; i < query.lazyLoad.length; i++) {\n keyCount++;\n lazyLoad[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n }\n var agg = {};\n var isGroupByFormat = false;\n if (query.lazyLoad.length) {\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\n if (key.fn === 'onGroup' && !isNullOrUndefined(key.e.format)) {\n isGroupByFormat = true;\n break;\n }\n }\n }\n for (var i = 0; i < query.queries.length; i++) {\n key = query.queries[i];\n if ((key.fn === 'onPage' || key.fn === 'onGroup' || (key.fn === 'onSortBy' && !isGroupByFormat)) && query.lazyLoad.length) {\n if (key.fn === 'onGroup') {\n group.push(key.e);\n }\n if (key.fn === 'onPage') {\n page = key.e;\n }\n if (key.fn === 'onSortBy') {\n sort.unshift(key.e);\n }\n continue;\n }\n ret = this[key.fn].call(this, result, key.e, query);\n if (key.fn === 'onAggregates') {\n agg[key.e.field + ' - ' + key.e.type] = ret;\n }\n else {\n result = ret !== undefined ? ret : result;\n }\n if (key.fn === 'onPage' || key.fn === 'onSkip' || key.fn === 'onTake' || key.fn === 'onRange') {\n countFlg = false;\n }\n if (countFlg) {\n count = result.length;\n }\n }\n if (keyCount) {\n var args = {\n query: query, lazyLoad: lazyLoad, result: result, group: group, page: page, sort: sort\n };\n var lazyLoadData = this.lazyLoadGroup(args);\n result = lazyLoadData.result;\n count = lazyLoadData.count;\n }\n if (query.isCountRequired) {\n result = {\n result: result,\n count: count,\n aggregates: agg\n };\n }\n return result;\n };\n /**\n * Perform lazy load grouping in JSON array based on the given query and lazy load details.\n *\n * @param {LazyLoadGroupArgs} args\n */\n JsonAdaptor.prototype.lazyLoadGroup = function (args) {\n var count = 0;\n var agg = this.getAggregate(args.query);\n var result = args.result;\n if (!isNullOrUndefined(args.lazyLoad.onDemandGroupInfo)) {\n var req = args.lazyLoad.onDemandGroupInfo;\n for (var i = req.where.length - 1; i >= 0; i--) {\n result = this.onWhere(result, req.where[i]);\n }\n if (args.group.length !== req.level) {\n var field = args.group[req.level].fieldName;\n result = DataUtil.group(result, field, agg, null, null, args.group[req.level].comparer, true);\n if (args.sort.length) {\n result = this.onSortBy(result, args.sort[parseInt(req.level.toString(), 10)], args.query, true);\n }\n }\n else {\n for (var i = args.sort.length - 1; i >= req.level; i--) {\n result = this.onSortBy(result, args.sort[parseInt(i.toString(), 10)], args.query, false);\n }\n }\n count = result.length;\n var data = result;\n result = result.slice(req.skip);\n result = result.slice(0, req.take);\n if (args.group.length !== req.level) {\n this.formGroupResult(result, data);\n }\n }\n else {\n var field_1 = args.group[0].fieldName;\n result = DataUtil.group(result, field_1, agg, null, null, args.group[0].comparer, true);\n count = result.length;\n var data = result;\n if (args.sort.length) {\n var sort = args.sort.length > 1 ?\n args.sort.filter(function (x) { return x.fieldName === field_1; })[0] : args.sort[0];\n result = this.onSortBy(result, sort, args.query, true);\n }\n if (args.page) {\n result = this.onPage(result, args.page, args.query);\n }\n this.formGroupResult(result, data);\n }\n return { result: result, count: count };\n };\n JsonAdaptor.prototype.formGroupResult = function (result, data) {\n if (result.length && data.length) {\n var uid = 'GroupGuid';\n var childLevel = 'childLevels';\n var level = 'level';\n var records = 'records';\n result[uid] = data[uid];\n result[childLevel] = data[childLevel];\n result[level] = data[level];\n result[records] = data[records];\n }\n return result;\n };\n /**\n * Separate the aggregate query from the given queries\n *\n * @param {Query} query\n */\n JsonAdaptor.prototype.getAggregate = function (query) {\n var aggQuery = Query.filterQueries(query.queries, 'onAggregates');\n var agg = [];\n if (aggQuery.length) {\n var tmp = void 0;\n for (var i = 0; i < aggQuery.length; i++) {\n tmp = aggQuery[i].e;\n agg.push({ type: tmp.type, field: DataUtil.getValue(tmp.field, query) });\n }\n }\n return agg;\n };\n /**\n * Performs batch update in the JSON array which add, remove and update records.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n JsonAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var i;\n var deletedRecordsLen = changes.deletedRecords.length;\n for (i = 0; i < changes.addedRecords.length; i++) {\n this.insert(dm, changes.addedRecords[i]);\n }\n for (i = 0; i < changes.changedRecords.length; i++) {\n this.update(dm, e.key, changes.changedRecords[i]);\n }\n for (i = 0; i < deletedRecordsLen; i++) {\n this.remove(dm, e.key, changes.deletedRecords[i]);\n }\n return changes;\n };\n /**\n * Performs filter operation with the given data and where query.\n *\n * @param {Object[]} ds\n * @param {{validate:Function}} e\n * @param e.validate\n */\n JsonAdaptor.prototype.onWhere = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.filter(function (obj) {\n if (e) {\n return e.validate(obj);\n }\n });\n };\n /**\n * Returns aggregate function based on the aggregate type.\n *\n * @param {Object[]} ds\n * @param e\n * @param {string} } type\n * @param e.field\n * @param e.type\n */\n JsonAdaptor.prototype.onAggregates = function (ds, e) {\n var fn = DataUtil.aggregates[e.type];\n if (!ds || !fn || ds.length === 0) {\n return null;\n }\n return fn(ds, e.field);\n };\n /**\n * Performs search operation based on the given query.\n *\n * @param {Object[]} ds\n * @param {QueryOptions} e\n */\n JsonAdaptor.prototype.onSearch = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n if (e.fieldNames.length === 0) {\n DataUtil.getFieldList(ds[0], e.fieldNames);\n }\n return ds.filter(function (obj) {\n for (var j = 0; j < e.fieldNames.length; j++) {\n if (e.comparer.call(obj, DataUtil.getObject(e.fieldNames[j], obj), e.searchKey, e.ignoreCase, e.ignoreAccent)) {\n return true;\n }\n }\n return false;\n });\n };\n /**\n * Sort the data with given direction and field.\n *\n * @param {Object[]} ds\n * @param e\n * @param {Object} b\n * @param e.comparer\n * @param e.fieldName\n * @param query\n * @param isLazyLoadGroupSort\n */\n JsonAdaptor.prototype.onSortBy = function (ds, e, query, isLazyLoadGroupSort) {\n if (!ds || !ds.length) {\n return ds;\n }\n var fnCompare;\n var field = DataUtil.getValue(e.fieldName, query);\n if (!field) {\n return ds.sort(e.comparer);\n }\n if (field instanceof Array) {\n field = field.slice(0);\n for (var i = field.length - 1; i >= 0; i--) {\n if (!field[i]) {\n continue;\n }\n fnCompare = e.comparer;\n if (DataUtil.endsWith(field[i], ' desc')) {\n fnCompare = DataUtil.fnSort('descending');\n field[i] = field[i].replace(' desc', '');\n }\n ds = DataUtil.sort(ds, field[i], fnCompare);\n }\n return ds;\n }\n return DataUtil.sort(ds, isLazyLoadGroupSort ? 'key' : field, e.comparer);\n };\n /**\n * Group the data based on the given query.\n *\n * @param {Object[]} ds\n * @param {QueryOptions} e\n * @param {Query} query\n */\n JsonAdaptor.prototype.onGroup = function (ds, e, query) {\n if (!ds || !ds.length) {\n return ds;\n }\n var agg = this.getAggregate(query);\n return DataUtil.group(ds, DataUtil.getValue(e.fieldName, query), agg, null, null, e.comparer);\n };\n /**\n * Retrieves records based on the given page index and size.\n *\n * @param {Object[]} ds\n * @param e\n * @param {number} } pageIndex\n * @param e.pageSize\n * @param {Query} query\n * @param e.pageIndex\n */\n JsonAdaptor.prototype.onPage = function (ds, e, query) {\n var size = DataUtil.getValue(e.pageSize, query);\n var start = (DataUtil.getValue(e.pageIndex, query) - 1) * size;\n var end = start + size;\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(start, end);\n };\n /**\n * Retrieves records based on the given start and end index from query.\n *\n * @param {Object[]} ds\n * @param e\n * @param {number} } end\n * @param e.start\n * @param e.end\n */\n JsonAdaptor.prototype.onRange = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.start), DataUtil.getValue(e.end));\n };\n /**\n * Picks the given count of records from the top of the datasource.\n *\n * @param {Object[]} ds\n * @param {{nos:number}} e\n * @param e.nos\n */\n JsonAdaptor.prototype.onTake = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(0, DataUtil.getValue(e.nos));\n };\n /**\n * Skips the given count of records from the data source.\n *\n * @param {Object[]} ds\n * @param {{nos:number}} e\n * @param e.nos\n */\n JsonAdaptor.prototype.onSkip = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return ds.slice(DataUtil.getValue(e.nos));\n };\n /**\n * Selects specified columns from the data source.\n *\n * @param {Object[]} ds\n * @param {{fieldNames:string}} e\n * @param e.fieldNames\n */\n JsonAdaptor.prototype.onSelect = function (ds, e) {\n if (!ds || !ds.length) {\n return ds;\n }\n return DataUtil.select(ds, DataUtil.getValue(e.fieldNames));\n };\n /**\n * Inserts new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param tableName\n * @param query\n * @param {number} position\n */\n JsonAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n if (isNullOrUndefined(position)) {\n return dm.dataSource.json.push(data);\n }\n else {\n return dm.dataSource.json.splice(position, 0, data);\n }\n };\n /**\n * Remove the data from the dataSource based on the key field value.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n * @returns null\n */\n JsonAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n if (typeof value === 'object' && !(value instanceof Date)) {\n value = DataUtil.getObject(keyField, value);\n }\n for (i = 0; i < ds.length; i++) {\n if (DataUtil.getObject(keyField, ds[i]) === value) {\n break;\n }\n }\n return i !== ds.length ? ds.splice(i, 1) : null;\n };\n /**\n * Updates existing record and saves the changes to the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n * @returns null\n */\n JsonAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n var ds = dm.dataSource.json;\n var i;\n var key;\n if (!isNullOrUndefined(keyField)) {\n key = getValue(keyField, value);\n }\n for (i = 0; i < ds.length; i++) {\n if (!isNullOrUndefined(keyField) && (getValue(keyField, ds[i])) === key) {\n break;\n }\n }\n return i < ds.length ? merge(ds[i], value) : null;\n };\n return JsonAdaptor;\n}(Adaptor));\nexport { JsonAdaptor };\n/**\n * URL Adaptor of DataManager can be used when you are required to use remote service to retrieve data.\n * It interacts with server-side for all DataManager Queries and CRUD operations.\n *\n * @hidden\n */\nvar UrlAdaptor = /** @class */ (function (_super) {\n __extends(UrlAdaptor, _super);\n function UrlAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Process the query to generate request body.\n *\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @param hierarchyFilters\n * @returns p\n */\n // tslint:disable-next-line:max-func-body-length\n UrlAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var params = query.params;\n var url = dm.dataSource.url;\n var temp;\n var skip;\n var take = null;\n var options = this.options;\n var request = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n // calc Paging & Range\n if ('onPage' in singles) {\n temp = singles.onPage;\n skip = DataUtil.getValue(temp.pageIndex, query);\n take = DataUtil.getValue(temp.pageSize, query);\n skip = (skip - 1) * take;\n }\n else if ('onRange' in singles) {\n temp = singles.onRange;\n skip = temp.start;\n take = temp.end - temp.start;\n }\n // Sorting\n for (var i = 0; i < queries.sorts.length; i++) {\n temp = DataUtil.getValue(queries.sorts[i].e.fieldName, query);\n request.sorts.push(DataUtil.callAdaptorFunction(this, 'onEachSort', { name: temp, direction: queries.sorts[i].e.direction }, query));\n }\n // hierarchy\n if (hierarchyFilters) {\n temp = this.getFiltersFrom(hierarchyFilters, query);\n if (temp) {\n request.filters.push(DataUtil.callAdaptorFunction(this, 'onEachWhere', temp.toJson(), query));\n }\n }\n // Filters\n for (var i = 0; i < queries.filters.length; i++) {\n var res = DataUtil.callAdaptorFunction(this, 'onEachWhere', queries.filters[i].e.toJson(), query);\n if ((this.getModuleName &&\n this.getModuleName() === 'ODataV4Adaptor') &&\n !isNullOrUndefined(queries.filters[i].e.key) && queries.filters.length > 1) {\n res = '(' + res + ')';\n }\n request.filters.push(res);\n var keys_3 = typeof request.filters[i] === 'object' ? Object.keys(request.filters[i]) : [];\n for (var _i = 0, keys_1 = keys_3; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (DataUtil.isNull((request)[prop])) {\n delete request[prop];\n }\n }\n }\n // Searches\n for (var i = 0; i < queries.searches.length; i++) {\n temp = queries.searches[i].e;\n request.searches.push(DataUtil.callAdaptorFunction(this, 'onEachSearch', {\n fields: temp.fieldNames,\n operator: temp.operator,\n key: temp.searchKey,\n ignoreCase: temp.ignoreCase\n }, query));\n }\n // Grouping\n for (var i = 0; i < queries.groups.length; i++) {\n request.groups.push(DataUtil.getValue(queries.groups[i].e.fieldName, query));\n }\n // aggregates\n for (var i = 0; i < queries.aggregates.length; i++) {\n temp = queries.aggregates[i].e;\n request.aggregates.push({ type: temp.type, field: DataUtil.getValue(temp.field, query) });\n }\n var req = {};\n this.getRequestQuery(options, query, singles, request, req);\n // Params\n DataUtil.callAdaptorFunction(this, 'addParams', { dm: dm, query: query, params: params, reqParams: req });\n if (query.lazyLoad.length) {\n for (var i = 0; i < query.lazyLoad.length; i++) {\n req[query.lazyLoad[i].key] = query.lazyLoad[i].value;\n }\n }\n // cleanup\n var keys = Object.keys(req);\n for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) {\n var prop = keys_2[_a];\n if (DataUtil.isNull(req[prop]) || req[prop] === '' || req[prop].length === 0) {\n delete req[prop];\n }\n }\n if (!(options.skip in req && options.take in req) && take !== null) {\n req[options.skip] = DataUtil.callAdaptorFunction(this, 'onSkip', skip, query);\n req[options.take] = DataUtil.callAdaptorFunction(this, 'onTake', take, query);\n }\n var p = this.pvt;\n this.pvt = {};\n if (this.options.requestType === 'json') {\n return {\n data: JSON.stringify(req, DataUtil.parse.jsonDateReplacer),\n url: url,\n pvtData: p,\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n }\n temp = this.convertToQueryString(req, query, dm);\n temp = (dm.dataSource.url.indexOf('?') !== -1 ? '&' : '/') + temp;\n return {\n type: 'GET', url: temp.length ? url.replace(/\\/*$/, temp) : url, pvtData: p\n };\n };\n UrlAdaptor.prototype.getRequestQuery = function (options, query, singles, request, request1) {\n var param = 'param';\n var req = request1;\n req[options.from] = query.fromTable;\n if (options.apply && query.distincts.length) {\n req[options.apply] = 'onDistinct' in this ? DataUtil.callAdaptorFunction(this, 'onDistinct', query.distincts) : '';\n }\n if (!query.distincts.length && options.expand) {\n req[options.expand] = 'onExpand' in this && 'onSelect' in singles ?\n DataUtil.callAdaptorFunction(this, 'onExpand', { selects: DataUtil.getValue(singles.onSelect.fieldNames, query), expands: query.expands }, query) : query.expands;\n }\n req[options.select] = 'onSelect' in singles && !query.distincts.length ?\n DataUtil.callAdaptorFunction(this, 'onSelect', DataUtil.getValue(singles.onSelect.fieldNames, query), query) : '';\n req[options.count] = query.isCountRequired ? DataUtil.callAdaptorFunction(this, 'onCount', query.isCountRequired, query) : '';\n req[options.search] = request.searches.length ? DataUtil.callAdaptorFunction(this, 'onSearch', request.searches, query) : '';\n req[options.skip] = 'onSkip' in singles ?\n DataUtil.callAdaptorFunction(this, 'onSkip', DataUtil.getValue(singles.onSkip.nos, query), query) : '';\n req[options.take] = 'onTake' in singles ?\n DataUtil.callAdaptorFunction(this, 'onTake', DataUtil.getValue(singles.onTake.nos, query), query) : '';\n req[options.where] = request.filters.length || request.searches.length ?\n DataUtil.callAdaptorFunction(this, 'onWhere', request.filters, query) : '';\n req[options.sortBy] = request.sorts.length ? DataUtil.callAdaptorFunction(this, 'onSortBy', request.sorts, query) : '';\n req[options.group] = request.groups.length ? DataUtil.callAdaptorFunction(this, 'onGroup', request.groups, query) : '';\n req[options.aggregates] = request.aggregates.length ?\n DataUtil.callAdaptorFunction(this, 'onAggregates', request.aggregates, query) : '';\n req[param] = [];\n };\n /**\n * Convert the object from processQuery to string which can be added query string.\n *\n * @param {Object} req\n * @param request\n * @param {Query} query\n * @param {DataManager} dm\n */\n UrlAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n return '';\n // this needs to be overridden\n };\n /**\n * Return the data from the data manager processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {Request} xhr?\n * @param {Object} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n */\n UrlAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (xhr && xhr.headers.get('Content-Type') &&\n xhr.headers.get('Content-Type').indexOf('application/json') !== -1) {\n var handleTimeZone = DataUtil.timeZoneHandling;\n if (ds && !ds.timeZoneHandling) {\n DataUtil.timeZoneHandling = false;\n }\n data = DataUtil.parse.parseJson(data);\n DataUtil.timeZoneHandling = handleTimeZone;\n }\n var requests = request;\n var pvt = requests.pvtData || {};\n var groupDs = data ? data.groupDs : [];\n if (xhr && xhr.headers.get('Content-Type') &&\n xhr.headers.get('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n var d = JSON.parse(requests.data);\n if (d && d.action === 'batch' && data && data.addedRecords) {\n changes.addedRecords = data.addedRecords;\n return changes;\n }\n if (data && data.d) {\n data = data.d;\n }\n var args = {};\n if (data && 'count' in data) {\n args.count = data.count;\n }\n args.result = data && data.result ? data.result : data;\n var isExpand = false;\n if (Array.isArray(data.result) && data.result.length) {\n var key = 'key';\n var val = 'value';\n var level = 'level';\n if (!isNullOrUndefined(data.result[0][key])) {\n args.result = this.formRemoteGroupedData(args.result, 1, pvt.groups.length - 1);\n }\n if (query && query.lazyLoad.length && pvt.groups.length) {\n for (var i = 0; i < query.lazyLoad.length; i++) {\n if (query.lazyLoad[i][key] === 'onDemandGroupInfo') {\n var value = query.lazyLoad[i][val][level];\n if (pvt.groups.length === value) {\n isExpand = true;\n }\n }\n }\n }\n }\n if (!isExpand) {\n this.getAggregateResult(pvt, data, args, groupDs, query);\n }\n return DataUtil.isNull(args.count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n UrlAdaptor.prototype.formRemoteGroupedData = function (data, level, childLevel) {\n for (var i = 0; i < data.length; i++) {\n if (data[i].items.length && Object.keys(data[i].items[0]).indexOf('key') > -1) {\n this.formRemoteGroupedData(data[i].items, level + 1, childLevel - 1);\n }\n }\n var uid = 'GroupGuid';\n var childLvl = 'childLevels';\n var lvl = 'level';\n var records = 'records';\n data[uid] = consts[uid];\n data[lvl] = level;\n data[childLvl] = childLevel;\n data[records] = data[0].items.length ? this.getGroupedRecords(data, !isNullOrUndefined(data[0].items[records])) : [];\n return data;\n };\n UrlAdaptor.prototype.getGroupedRecords = function (data, hasRecords) {\n var childGroupedRecords = [];\n var records = 'records';\n for (var i = 0; i < data.length; i++) {\n if (!hasRecords) {\n for (var j = 0; j < data[i].items.length; j++) {\n childGroupedRecords.push(data[i].items[j]);\n }\n }\n else {\n childGroupedRecords = childGroupedRecords.concat(data[i].items[records]);\n }\n }\n return childGroupedRecords;\n };\n /**\n * Add the group query to the adaptor`s option.\n *\n * @param {Object[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return e;\n };\n /**\n * Add the aggregate query to the adaptor`s option.\n *\n * @param {Aggregates[]} e\n * @returns void\n */\n UrlAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n * @param query\n * @param original\n */\n UrlAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var url;\n var key;\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.removeUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e[url],\n key: e[key]\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {Request} request\n * @returns void\n */\n UrlAdaptor.prototype.beforeSend = function (dm, request) {\n // need to extend this method\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName\n * @param query\n */\n UrlAdaptor.prototype.insert = function (dm, data, tableName, query) {\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number|string} value\n * @param {string} tableName\n * @param query\n */\n UrlAdaptor.prototype.remove = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: value,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n * @param query\n */\n UrlAdaptor.prototype.update = function (dm, keyField, value, tableName, query) {\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: value,\n action: 'update',\n keyColumn: keyField,\n key: DataUtil.getObject(keyField, value),\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n /**\n * To generate the predicate based on the filtered query.\n *\n * @param {Object[]|string[]|number[]} data\n * @param {Query} query\n * @hidden\n */\n UrlAdaptor.prototype.getFiltersFrom = function (data, query) {\n var key = query.fKey;\n var value;\n var prop = key;\n var pKey = query.key;\n var predicats = [];\n if (typeof data[0] !== 'object') {\n prop = null;\n }\n for (var i = 0; i < data.length; i++) {\n if (typeof data[0] === 'object') {\n value = DataUtil.getObject(pKey || prop, data[i]);\n }\n else {\n value = data[i];\n }\n predicats.push(new Predicate(key, 'equal', value));\n }\n return Predicate.or(predicats);\n };\n UrlAdaptor.prototype.getAggregateResult = function (pvt, data, args, groupDs, query) {\n var pData = data;\n if (data && data.result) {\n pData = data.result;\n }\n if (pvt && pvt.aggregates && pvt.aggregates.length) {\n var agg = pvt.aggregates;\n var fn = void 0;\n var aggregateData = pData;\n var res = {};\n if (data.aggregate) {\n aggregateData = data.aggregate;\n }\n for (var i = 0; i < agg.length; i++) {\n fn = DataUtil.aggregates[agg[i].type];\n if (fn) {\n res[agg[i].field + ' - ' + agg[i].type] = fn(aggregateData, agg[i].field);\n }\n }\n args.aggregates = res;\n }\n var key = 'key';\n var isServerGrouping = Array.isArray(data.result) && data.result.length && !isNullOrUndefined(data.result[0][key]);\n if (pvt && pvt.groups && pvt.groups.length && !isServerGrouping) {\n var groups = pvt.groups;\n for (var i = 0; i < groups.length; i++) {\n var level = null;\n if (!isNullOrUndefined(groupDs)) {\n groupDs = DataUtil.group(groupDs, groups[i]);\n }\n var groupQuery = Query.filterQueries(query.queries, 'onGroup')[i].e;\n pData = DataUtil.group(pData, groups[i], pvt.aggregates, level, groupDs, groupQuery.comparer);\n }\n args.result = pData;\n }\n return args;\n };\n UrlAdaptor.prototype.getQueryRequest = function (query) {\n var req = { sorts: [], groups: [], filters: [], searches: [], aggregates: [] };\n req.sorts = Query.filterQueries(query.queries, 'onSortBy');\n req.groups = Query.filterQueries(query.queries, 'onGroup');\n req.filters = Query.filterQueries(query.queries, 'onWhere');\n req.searches = Query.filterQueries(query.queries, 'onSearch');\n req.aggregates = Query.filterQueries(query.queries, 'onAggregates');\n return req;\n };\n UrlAdaptor.prototype.addParams = function (options) {\n var req = options.reqParams;\n if (options.params.length) {\n req.params = {};\n }\n for (var _i = 0, _a = options.params; _i < _a.length; _i++) {\n var tmp = _a[_i];\n if (req[tmp.key]) {\n throw new Error('Query() - addParams: Custom Param is conflicting other request arguments');\n }\n req[tmp.key] = tmp.value;\n if (tmp.fn) {\n req[tmp.key] = tmp.fn.call(options.query, tmp.key, options.query, options.dm);\n }\n req.params[tmp.key] = req[tmp.key];\n }\n };\n return UrlAdaptor;\n}(Adaptor));\nexport { UrlAdaptor };\n/**\n * OData Adaptor that is extended from URL Adaptor, is used for consuming data through OData Service.\n *\n * @hidden\n */\nvar ODataAdaptor = /** @class */ (function (_super) {\n __extends(ODataAdaptor, _super);\n function ODataAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json;odata=light;q=1,application/json;odata=verbose;q=0.5',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$inlinecount',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PUT'\n });\n extend(_this.options, props || {});\n return _this;\n }\n ODataAdaptor.prototype.getModuleName = function () {\n return 'ODataAdaptor';\n };\n /**\n * Generate request string based on the filter criteria from query.\n *\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n * @param predicate\n * @param query\n * @param requiresCast\n */\n ODataAdaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var operator;\n var guid;\n var val = predicate.value;\n var type = typeof val;\n var field = predicate.field ? ODataAdaptor.getField(predicate.field) : null;\n if (val instanceof Date) {\n val = 'datetime\\'' + DataUtil.parse.replacer(val) + '\\'';\n }\n if (type === 'string') {\n val = val.replace(/'/g, '\\'\\'');\n if (predicate.ignoreCase) {\n val = val.toLowerCase();\n }\n if (predicate.operator !== 'like') {\n val = encodeURIComponent(val);\n }\n if (predicate.operator !== 'wildcard' && predicate.operator !== 'like') {\n val = '\\'' + val + '\\'';\n }\n if (requiresCast) {\n field = 'cast(' + field + ', \\'Edm.String\\')';\n }\n if (DataUtil.parse.isGuid(val)) {\n guid = 'guid';\n }\n if (predicate.ignoreCase) {\n if (!guid) {\n field = 'tolower(' + field + ')';\n }\n val = val.toLowerCase();\n }\n }\n if (predicate.operator === 'isempty' || predicate.operator === 'isnull' || predicate.operator === 'isnotempty' ||\n predicate.operator === 'isnotnull') {\n operator = predicate.operator.indexOf('isnot') !== -1 ? DataUtil.odBiOperator['notequal'] : DataUtil.odBiOperator['equal'];\n val = predicate.operator === 'isnull' || predicate.operator === 'isnotnull' ? null : '\\'\\'';\n }\n else {\n operator = DataUtil.odBiOperator[predicate.operator];\n }\n if (operator) {\n returnValue += field;\n returnValue += operator;\n if (guid) {\n returnValue += guid;\n }\n return returnValue + val;\n }\n if (!isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor') {\n operator = DataUtil.odv4UniOperator[predicate.operator];\n }\n else {\n operator = DataUtil.odUniOperator[predicate.operator];\n }\n if (operator === 'like') {\n val = val;\n if (val.indexOf('%') !== -1) {\n if (val.charAt(0) === '%' && val.lastIndexOf('%') < 2) {\n val = val.substring(1, val.length);\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['startswith'] : DataUtil.odUniOperator['startswith'];\n }\n else if (val.charAt(val.length - 1) === '%' && val.indexOf('%') > val.length - 3) {\n val = val.substring(0, val.length - 1);\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['endswith'] : DataUtil.odUniOperator['endswith'];\n }\n else if (val.lastIndexOf('%') !== val.indexOf('%') && val.lastIndexOf('%') > val.indexOf('%') + 1) {\n val = val.substring(val.indexOf('%') + 1, val.lastIndexOf('%'));\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n }\n else {\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n }\n }\n val = encodeURIComponent(val);\n val = '\\'' + val + '\\'';\n }\n else if (operator === 'wildcard') {\n val = val;\n if (val.indexOf('*') !== -1) {\n var splittedStringValue = val.split('*');\n var splittedValue = void 0;\n var count = 0;\n if (val.indexOf('*') !== 0 && splittedStringValue[0].indexOf('%3f') === -1 &&\n splittedStringValue[0].indexOf('?') === -1) {\n splittedValue = splittedStringValue[0];\n splittedValue = '\\'' + splittedValue + '\\'';\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['startswith'] : DataUtil.odUniOperator['startswith'];\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += splittedValue + ')';\n count++;\n }\n if (val.lastIndexOf('*') !== val.length - 1 && splittedStringValue[splittedStringValue.length - 1].indexOf('%3f') === -1 &&\n splittedStringValue[splittedStringValue.length - 1].indexOf('?') === -1) {\n splittedValue = splittedStringValue[splittedStringValue.length - 1];\n splittedValue = '\\'' + splittedValue + '\\'';\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['endswith'] : DataUtil.odUniOperator['endswith'];\n if (count > 0) {\n returnValue += ' and ';\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += splittedValue + ')';\n count++;\n }\n if (splittedStringValue.length > 2) {\n for (var i = 1; i < splittedStringValue.length - 1; i++) {\n if (splittedStringValue[i].indexOf('%3f') === -1 && splittedStringValue[i].indexOf('?') === -1) {\n splittedValue = splittedStringValue[i];\n splittedValue = '\\'' + splittedValue + '\\'';\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n if (count > 0) {\n returnValue += ' and ';\n }\n if (operator === 'substringof' || operator === 'not substringof') {\n var temp = splittedValue;\n splittedValue = field;\n field = temp;\n }\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += splittedValue + ')';\n count++;\n }\n }\n }\n if (count === 0) {\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n if (val.indexOf('?') !== -1 || val.indexOf('%3f') !== -1) {\n val = val.indexOf('?') !== -1 ? val.split('?').join('') : val.split('%3f').join('');\n }\n val = '\\'' + val + '\\'';\n }\n else {\n operator = 'wildcard';\n }\n }\n else {\n operator = !isNullOrUndefined(this.getModuleName) && this.getModuleName() === 'ODataV4Adaptor' ?\n DataUtil.odv4UniOperator['contains'] : DataUtil.odUniOperator['contains'];\n if (val.indexOf('?') !== -1 || val.indexOf('%3f') !== -1) {\n val = val.indexOf('?') !== -1 ? val.split('?').join('') : val.split('%3f').join('');\n }\n val = '\\'' + val + '\\'';\n }\n }\n if (operator === 'substringof' || operator === 'not substringof') {\n var temp = val;\n val = field;\n field = temp;\n }\n if (operator !== 'wildcard') {\n returnValue += operator + '(';\n returnValue += field + ',';\n if (guid) {\n returnValue += guid;\n }\n returnValue += val + ')';\n }\n return returnValue;\n };\n ODataAdaptor.prototype.addParams = function (options) {\n _super.prototype.addParams.call(this, options);\n delete options.reqParams.params;\n };\n /**\n * Generate request string based on the multiple filter criteria from query.\n *\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n * @param predicate\n * @param query\n * @param requiresCast\n */\n ODataAdaptor.prototype.onComplexPredicate = function (predicate, query, requiresCast) {\n var res = [];\n for (var i = 0; i < predicate.predicates.length; i++) {\n res.push('(' + this.onEachWhere(predicate.predicates[i], query, requiresCast) + ')');\n }\n return res.join(' ' + predicate.condition + ' ');\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n *\n * @param {Predicate} filter\n * @param {boolean} requiresCast?\n * @param query\n * @param requiresCast\n */\n ODataAdaptor.prototype.onEachWhere = function (filter, query, requiresCast) {\n return filter.isComplex ? this.onComplexPredicate(filter, query, requiresCast) : this.onPredicate(filter, query, requiresCast);\n };\n /**\n * Generate query string based on the multiple filter criteria from query.\n *\n * @param {string[]} filters\n */\n ODataAdaptor.prototype.onWhere = function (filters) {\n if (this.pvt.search) {\n filters.push(this.onEachWhere(this.pvt.search, null, true));\n }\n return filters.join(' and ');\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n *\n * @param e\n * @param {string} operator\n * @param {string} key\n * @param {boolean} } ignoreCase\n * @param e.fields\n * @param e.operator\n * @param e.key\n * @param e.ignoreCase\n */\n ODataAdaptor.prototype.onEachSearch = function (e) {\n if (e.fields && e.fields.length === 0) {\n DataUtil.throwError('Query() - Search : oData search requires list of field names to search');\n }\n var filter = this.pvt.search || [];\n for (var i = 0; i < e.fields.length; i++) {\n filter.push(new Predicate(e.fields[i], e.operator, e.key, e.ignoreCase));\n }\n this.pvt.search = filter;\n };\n /**\n * Generate query string based on the search criteria from query.\n *\n * @param {Object} e\n */\n ODataAdaptor.prototype.onSearch = function (e) {\n this.pvt.search = Predicate.or(this.pvt.search);\n return '';\n };\n /**\n * Generate query string based on multiple sort criteria from query.\n *\n * @param {QueryOptions} e\n */\n ODataAdaptor.prototype.onEachSort = function (e) {\n var res = [];\n if (e.name instanceof Array) {\n for (var i = 0; i < e.name.length; i++) {\n res.push(ODataAdaptor.getField(e.name[i]) + (e.direction === 'descending' ? ' desc' : ''));\n }\n }\n else {\n res.push(ODataAdaptor.getField(e.name) + (e.direction === 'descending' ? ' desc' : ''));\n }\n return res.join(',');\n };\n /**\n * Returns sort query string.\n *\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSortBy = function (e) {\n return e.reverse().join(',');\n };\n /**\n * Adds the group query to the adaptor option.\n *\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onGroup = function (e) {\n this.pvt.groups = e;\n return [];\n };\n /**\n * Returns the select query string.\n *\n * @param {string[]} e\n */\n ODataAdaptor.prototype.onSelect = function (e) {\n for (var i = 0; i < e.length; i++) {\n e[i] = ODataAdaptor.getField(e[i]);\n }\n return e.join(',');\n };\n /**\n * Add the aggregate query to the adaptor option.\n *\n * @param {Object[]} e\n * @returns string\n */\n ODataAdaptor.prototype.onAggregates = function (e) {\n this.pvt.aggregates = e;\n return '';\n };\n /**\n * Returns the query string which requests total count from the data source.\n *\n * @param {boolean} e\n * @returns string\n */\n ODataAdaptor.prototype.onCount = function (e) {\n return e === true ? 'allpages' : '';\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {Request} request\n * @param {Fetch} settings?\n * @param settings\n */\n ODataAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (DataUtil.endsWith(settings.url, this.options.batch) && settings.type.toLowerCase() === 'post') {\n request.headers.set('Accept', this.options.multipartAccept);\n request.headers.set('DataServiceVersion', '2.0');\n //request.overrideMimeType('text/plain; charset=x-user-defined');\n }\n else {\n request.headers.set('Accept', this.options.accept);\n }\n request.headers.set('DataServiceVersion', '2.0');\n request.headers.set('MaxDataServiceVersion', '2.0');\n };\n /**\n * Returns the data from the query processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {Request} xhr?\n * @param {Fetch} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n * @returns aggregateResult\n */\n ODataAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var metaCheck = 'odata.metadata';\n if ((request && request.type === 'GET') && !this.rootUrl && data[metaCheck]) {\n var dataUrls = data[metaCheck].split('/$metadata#');\n this.rootUrl = dataUrls[0];\n this.resourceTableName = dataUrls[1];\n }\n var pvtData = 'pvtData';\n if (!isNullOrUndefined(data.d)) {\n var dataCopy = ((query && query.isCountRequired) ? data.d.results : data.d);\n var metaData = '__metadata';\n if (!isNullOrUndefined(dataCopy)) {\n for (var i = 0; i < dataCopy.length; i++) {\n if (!isNullOrUndefined(dataCopy[i][metaData])) {\n delete dataCopy[i][metaData];\n }\n }\n }\n }\n var pvt = request && request[pvtData];\n var emptyAndBatch = this.processBatchResponse(data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var versionCheck = xhr && request.fetchRequest.headers.get('DataServiceVersion');\n var count = null;\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n var oDataCount = '__count';\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n if (data.d) {\n data = data.d;\n }\n if (data[oDataCount] || data['odata.count']) {\n count = data[oDataCount] || data['odata.count'];\n }\n }\n if (version === 3 && data.value) {\n data = data.value;\n }\n if (data.d) {\n data = data.d;\n }\n if (version < 3 && data.results) {\n data = data.results;\n }\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n /**\n * Converts the request object to query string.\n *\n * @param {Object} req\n * @param request\n * @param {Query} query\n * @param {DataManager} dm\n * @returns tableName\n */\n ODataAdaptor.prototype.convertToQueryString = function (request, query, dm) {\n var res = [];\n var table = 'table';\n var tableName = request[table] || '';\n var format = '$format';\n delete request[table];\n if (dm.dataSource.requiresFormat) {\n request[format] = 'json';\n }\n var keys = Object.keys(request);\n for (var _i = 0, keys_4 = keys; _i < keys_4.length; _i++) {\n var prop = keys_4[_i];\n res.push(prop + '=' + request[prop]);\n }\n res = res.join('&');\n if (dm.dataSource.url && dm.dataSource.url.indexOf('?') !== -1 && !tableName) {\n return res;\n }\n return res.length ? tableName + '?' + res : tableName || '';\n };\n ODataAdaptor.prototype.localTimeReplacer = function (key, convertObj) {\n for (var _i = 0, _a = !isNullOrUndefined(convertObj) ? Object.keys(convertObj) : []; _i < _a.length; _i++) {\n var prop = _a[_i];\n if ((convertObj[prop] instanceof Date)) {\n convertObj[prop] = DataUtil.dateParse.toLocalTime(convertObj[prop]);\n }\n }\n return convertObj;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n * @param tableName\n */\n ODataAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n url: (dm.dataSource.insertUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : ''),\n data: JSON.stringify(data, this.options.localTime ? this.localTimeReplacer : null)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n * @param tableName\n */\n ODataAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n var url;\n if (typeof value === 'string' && !DataUtil.parse.isGuid(value)) {\n url = \"('\" + value + \"')\";\n }\n else {\n url = \"(\" + value + \")\";\n }\n return {\n type: 'DELETE',\n url: (dm.dataSource.removeUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url\n };\n };\n /**\n * Updates existing record and saves the changes to the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n * @param query\n * @param original\n * @returns this\n */\n ODataAdaptor.prototype.update = function (dm, keyField, value, tableName, query, original) {\n if (this.options.updateType === 'PATCH' && !isNullOrUndefined(original)) {\n value = this.compareAndRemove(value, original, keyField);\n }\n var url;\n if (typeof value[keyField] === 'string' && !DataUtil.parse.isGuid(value[keyField])) {\n url = \"('\" + value[keyField] + \"')\";\n }\n else {\n url = \"(\" + value[keyField] + \")\";\n }\n return {\n type: this.options.updateType,\n url: (dm.dataSource.updateUrl || dm.dataSource.url).replace(/\\/*$/, tableName ? '/' + tableName : '') + url,\n data: JSON.stringify(value, this.options.localTime ? this.localTimeReplacer : null),\n accept: this.options.accept\n };\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @param query\n * @param original\n * @returns {Object}\n */\n ODataAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = (dm.dataSource.batchUrl || this.rootUrl) ?\n (dm.dataSource.batchUrl || this.rootUrl) + '/' + this.options.batch :\n (dm.dataSource.batchUrl || dm.dataSource.url).replace(/\\/*$/, '/' + this.options.batch);\n e.url = this.resourceTableName ? this.resourceTableName : e.url;\n var args = {\n url: e.url,\n key: e.key,\n cid: 1,\n cSet: DataUtil.getGuid(this.options.changeSet)\n };\n var req = '--' + initialGuid + '\\n';\n req += 'Content-Type: multipart/mixed; boundary=' + args.cSet.replace('--', '') + '\\n';\n this.pvt.changeSet = 0;\n req += this.generateInsertRequest(changes.addedRecords, args, dm);\n req += this.generateUpdateRequest(changes.changedRecords, args, dm, original ? original.changedRecords : []);\n req += this.generateDeleteRequest(changes.deletedRecords, args, dm);\n req += args.cSet + '--\\n';\n req += '--' + initialGuid + '--';\n return {\n type: 'POST',\n url: url,\n dataType: 'json',\n contentType: 'multipart/mixed; charset=UTF-8;boundary=' + initialGuid,\n data: req\n };\n };\n /**\n * Generate the string content from the removed records.\n * The result will be send during batch update.\n *\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @param dm\n * @returns this\n */\n ODataAdaptor.prototype.generateDeleteRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'DELETE ',\n 'url': function (data, i, key) {\n var url = DataUtil.getObject(key, data[i]);\n if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n return '(' + url + ')';\n }\n else if (url instanceof Date) {\n var dateTime = data[i][key];\n return '(' + dateTime.toJSON() + ')';\n }\n else {\n return \"('\" + url + \"')\";\n }\n },\n 'data': function (data, i) { return ''; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req + '\\n';\n };\n /**\n * Generate the string content from the inserted records.\n * The result will be send during batch update.\n *\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @param dm\n */\n ODataAdaptor.prototype.generateInsertRequest = function (arr, e, dm) {\n if (!arr) {\n return '';\n }\n var req = '';\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n /**\n * Generate the string content from the updated records.\n * The result will be send during batch update.\n *\n * @param {Object[]} arr\n * @param {RemoteArgs} e\n * @param dm\n * @param org\n */\n ODataAdaptor.prototype.generateUpdateRequest = function (arr, e, dm, org) {\n var _this = this;\n if (!arr) {\n return '';\n }\n var req = '';\n arr.forEach(function (change) { return change = _this.compareAndRemove(change, org.filter(function (o) { return DataUtil.getObject(e.key, o) === DataUtil.getObject(e.key, change); })[0], e.key); });\n var stat = {\n 'method': this.options.updateType + ' ',\n 'url': function (data, i, key) {\n if (typeof data[i][key] === 'number' || DataUtil.parse.isGuid(data[i][key])) {\n return '(' + data[i][key] + ')';\n }\n else if (data[i][key] instanceof Date) {\n var date = data[i][key];\n return '(' + date.toJSON() + ')';\n }\n else {\n return \"('\" + data[i][key] + \"')\";\n }\n },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req = this.generateBodyContent(arr, e, stat, dm);\n return req;\n };\n ODataAdaptor.getField = function (prop) {\n return prop.replace(/\\./g, '/');\n };\n ODataAdaptor.prototype.generateBodyContent = function (arr, e, stat, dm) {\n var req = '';\n for (var i = 0; i < arr.length; i++) {\n req += '\\n' + e.cSet + '\\n';\n req += this.options.changeSetContent + '\\n\\n';\n req += stat.method;\n if (stat.method === 'POST ') {\n req += (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'PUT ' || stat.method === 'PATCH ') {\n req += (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n else if (stat.method === 'DELETE ') {\n req += (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url) + stat.url(arr, i, e.key) + ' HTTP/1.1\\n';\n }\n req += 'Accept: ' + this.options.accept + '\\n';\n req += 'Content-Id: ' + this.pvt.changeSet++ + '\\n';\n req += this.options.batchChangeSetContentType + '\\n';\n if (!isNullOrUndefined(arr[i]['@odata.etag'])) {\n req += 'If-Match: ' + arr[i]['@odata.etag'] + '\\n\\n';\n delete arr[i]['@odata.etag'];\n }\n else {\n req += '\\n';\n }\n req += stat.data(arr, i);\n }\n return req;\n };\n ODataAdaptor.prototype.processBatchResponse = function (data, query, xhr, request, changes) {\n if (xhr && xhr.headers.get('Content-Type') && xhr.headers.get('Content-Type').indexOf('xml') !== -1) {\n return (query.isCountRequired ? { result: [], count: 0 } : []);\n }\n if (request && this.options.batch && DataUtil.endsWith(request.url, this.options.batch) && request.type.toLowerCase() === 'post') {\n var guid = xhr.headers.get('Content-Type');\n var cIdx = void 0;\n var jsonObj = void 0;\n var d = data + '';\n guid = guid.substring(guid.indexOf('=batchresponse') + 1);\n d = d.split(guid);\n if (d.length < 2) {\n return {};\n }\n d = d[1];\n var exVal = /(?:\\bContent-Type.+boundary=)(changesetresponse.+)/i.exec(d);\n if (exVal) {\n d.replace(exVal[0], '');\n }\n var changeGuid = exVal ? exVal[1] : '';\n d = d.split(changeGuid);\n for (var i = d.length; i > -1; i--) {\n if (!/\\bContent-ID:/i.test(d[i]) || !/\\bHTTP.+201/.test(d[i])) {\n continue;\n }\n cIdx = parseInt(/\\bContent-ID: (\\d+)/i.exec(d[i])[1], 10);\n if (changes.addedRecords[cIdx]) {\n jsonObj = DataUtil.parse.parseJson(/^\\{.+\\}/m.exec(d[i])[0]);\n extend({}, changes.addedRecords[cIdx], this.processResponse(jsonObj));\n }\n }\n return changes;\n }\n return null;\n };\n ODataAdaptor.prototype.compareAndRemove = function (data, original, key) {\n var _this = this;\n if (isNullOrUndefined(original)) {\n return data;\n }\n Object.keys(data).forEach(function (prop) {\n if (prop !== key && prop !== '@odata.etag') {\n if (DataUtil.isPlainObject(data[prop])) {\n _this.compareAndRemove(data[prop], original[prop]);\n var final = Object.keys(data[prop]).filter(function (data) { return data !== '@odata.etag'; });\n if (final.length === 0) {\n delete data[prop];\n }\n }\n else if (data[prop] === original[prop]) {\n delete data[prop];\n }\n else if (data[prop] && original[prop] && data[prop].valueOf() === original[prop].valueOf()) {\n delete data[prop];\n }\n }\n });\n return data;\n };\n return ODataAdaptor;\n}(UrlAdaptor));\nexport { ODataAdaptor };\n/**\n * The OData v4 is an improved version of OData protocols.\n * The DataManager uses the ODataV4Adaptor to consume OData v4 services.\n *\n * @hidden\n */\nvar ODataV4Adaptor = /** @class */ (function (_super) {\n __extends(ODataV4Adaptor, _super);\n function ODataV4Adaptor(props) {\n var _this = _super.call(this, props) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n requestType: 'get',\n accept: 'application/json, text/javascript, */*; q=0.01',\n multipartAccept: 'multipart/mixed',\n sortBy: '$orderby',\n select: '$select',\n skip: '$skip',\n take: '$top',\n count: '$count',\n search: '$search',\n where: '$filter',\n expand: '$expand',\n batch: '$batch',\n changeSet: '--changeset_',\n batchPre: 'batch_',\n contentId: 'Content-Id: ',\n batchContent: 'Content-Type: multipart/mixed; boundary=',\n changeSetContent: 'Content-Type: application/http\\nContent-Transfer-Encoding: binary ',\n batchChangeSetContentType: 'Content-Type: application/json; charset=utf-8 ',\n updateType: 'PATCH',\n localTime: false,\n apply: '$apply'\n });\n extend(_this.options, props || {});\n return _this;\n }\n /**\n * @hidden\n */\n ODataV4Adaptor.prototype.getModuleName = function () {\n return 'ODataV4Adaptor';\n };\n /**\n * Returns the query string which requests total count from the data source.\n *\n * @param {boolean} e\n * @returns string\n */\n ODataV4Adaptor.prototype.onCount = function (e) {\n return e === true ? 'true' : '';\n };\n /**\n * Generate request string based on the filter criteria from query.\n *\n * @param {Predicate} pred\n * @param {boolean} requiresCast?\n * @param predicate\n * @param query\n * @param requiresCast\n */\n ODataV4Adaptor.prototype.onPredicate = function (predicate, query, requiresCast) {\n var returnValue = '';\n var val = predicate.value;\n var isDate = val instanceof Date;\n if (query instanceof Query) {\n var queries = this.getQueryRequest(query);\n for (var i = 0; i < queries.filters.length; i++) {\n if (queries.filters[i].e.key === predicate.value) {\n requiresCast = true;\n }\n }\n }\n returnValue = _super.prototype.onPredicate.call(this, predicate, query, requiresCast);\n if (isDate) {\n returnValue = returnValue.replace(/datetime'(.*)'$/, '$1');\n }\n if (DataUtil.parse.isGuid(val)) {\n returnValue = returnValue.replace('guid', '').replace(/'/g, '');\n }\n return returnValue;\n };\n /**\n * Generate query string based on the multiple search criteria from query.\n *\n * @param e\n * @param {string} operator\n * @param {string} key\n * @param {boolean} } ignoreCase\n * @param e.fields\n * @param e.operator\n * @param e.key\n * @param e.ignoreCase\n */\n ODataV4Adaptor.prototype.onEachSearch = function (e) {\n var search = this.pvt.searches || [];\n search.push(e.key);\n this.pvt.searches = search;\n };\n /**\n * Generate query string based on the search criteria from query.\n *\n * @param {Object} e\n */\n ODataV4Adaptor.prototype.onSearch = function (e) {\n return this.pvt.searches.join(' OR ');\n };\n /**\n * Returns the expand query string.\n *\n * @param {string} e\n * @param e.selects\n * @param e.expands\n */\n ODataV4Adaptor.prototype.onExpand = function (e) {\n var _this = this;\n var selected = {};\n var expanded = {};\n var expands = e.expands.slice();\n var exArr = [];\n var selects = e.selects.filter(function (item) { return item.indexOf('.') > -1; });\n selects.forEach(function (select) {\n var splits = select.split('.');\n if (!(splits[0] in selected)) {\n selected[splits[0]] = [];\n }\n if (splits.length === 2) {\n if (selected[splits[0]].length && Object.keys(selected).indexOf(splits[0]) !== -1) {\n if (selected[splits[0]][0].indexOf('$expand') !== -1 && selected[splits[0]][0].indexOf(';$select=') === -1) {\n selected[splits[0]][0] = selected[splits[0]][0] + ';' + '$select=' + splits[1];\n }\n else {\n selected[splits[0]][0] = selected[splits[0]][0] + ',' + splits[1];\n }\n }\n else {\n selected[splits[0]].push('$select=' + splits[1]);\n }\n }\n else {\n var sel = '$select=' + splits[splits.length - 1];\n var exp = '';\n var close_1 = '';\n for (var i = 1; i < splits.length - 1; i++) {\n exp = exp + '$expand=' + splits[i] + '(';\n close_1 = close_1 + ')';\n }\n var combineVal = exp + sel + close_1;\n if (selected[splits[0]].length && Object.keys(selected).indexOf(splits[0]) !== -1 &&\n _this.expandQueryIndex(selected[splits[0]], true)) {\n var idx = _this.expandQueryIndex(selected[splits[0]]);\n selected[splits[0]][idx] = selected[splits[0]][idx] + combineVal.replace('$expand=', ',');\n }\n else {\n selected[splits[0]].push(combineVal);\n }\n }\n });\n //Auto expand from select query\n Object.keys(selected).forEach(function (expand) {\n if ((expands.indexOf(expand) === -1)) {\n expands.push(expand);\n }\n });\n expands.forEach(function (expand) {\n expanded[expand] = expand in selected ? expand + \"(\" + selected[expand].join(';') + \")\" : expand;\n });\n Object.keys(expanded).forEach(function (ex) { return exArr.push(expanded[ex]); });\n return exArr.join(',');\n };\n ODataV4Adaptor.prototype.expandQueryIndex = function (query, isExpand) {\n for (var i = 0; i < query.length; i++) {\n if (query[i].indexOf('$expand') !== -1) {\n return isExpand ? true : i;\n }\n }\n return isExpand ? false : 0;\n };\n /**\n * Returns the groupby query string.\n *\n * @param {string} e\n * @param distinctFields\n */\n ODataV4Adaptor.prototype.onDistinct = function (distinctFields) {\n var fields = distinctFields.map(function (field) { return ODataAdaptor.getField(field); }).join(',');\n return \"groupby((\" + fields + \"))\";\n };\n /**\n * Returns the select query string.\n *\n * @param {string[]} e\n */\n ODataV4Adaptor.prototype.onSelect = function (e) {\n return _super.prototype.onSelect.call(this, e.filter(function (item) { return item.indexOf('.') === -1; }));\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {Request} request\n * @param {Fetch} settings\n * @returns void\n */\n ODataV4Adaptor.prototype.beforeSend = function (dm, request, settings) {\n if (settings.type === 'POST' || settings.type === 'PUT' || settings.type === 'PATCH') {\n request.headers.set('Prefer', 'return=representation');\n }\n request.headers.set('Accept', this.options.accept);\n };\n /**\n * Returns the data from the query processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {Request} xhr?\n * @param {Fetch} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n * @returns aggregateResult\n */\n ODataV4Adaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var metaName = '@odata.context';\n var metaV4Name = '@context';\n if ((request && request.type === 'GET') && !this.rootUrl && (data[metaName] || data[metaV4Name])) {\n var dataUrl = data[metaName] ? data[metaName].split('/$metadata#') : data[metaV4Name].split('/$metadata#');\n this.rootUrl = dataUrl[0];\n this.resourceTableName = dataUrl[1];\n }\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var emptyAndBatch = _super.prototype.processBatchResponse.call(this, data, query, xhr, request, changes);\n if (emptyAndBatch) {\n return emptyAndBatch;\n }\n var count = null;\n var dataCount = '@odata.count';\n var dataV4Count = '@count';\n if (query && query.isCountRequired) {\n if (dataCount in data) {\n count = data[dataCount];\n }\n else if (dataV4Count in data) {\n count = data[dataV4Count];\n }\n }\n data = !isNullOrUndefined(data.value) ? data.value : data;\n var args = {};\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: count, aggregates: args.aggregates };\n };\n return ODataV4Adaptor;\n}(ODataAdaptor));\nexport { ODataV4Adaptor };\n/**\n * The Web API is a programmatic interface to define the request and response messages system that is mostly exposed in JSON or XML.\n * The DataManager uses the WebApiAdaptor to consume Web API.\n * Since this adaptor is targeted to interact with Web API created using OData endpoint, it is extended from ODataAdaptor\n *\n * @hidden\n */\nvar WebApiAdaptor = /** @class */ (function (_super) {\n __extends(WebApiAdaptor, _super);\n function WebApiAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n WebApiAdaptor.prototype.getModuleName = function () {\n return 'WebApiAdaptor';\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n * @param tableName\n */\n WebApiAdaptor.prototype.insert = function (dm, data, tableName) {\n return {\n type: 'POST',\n url: dm.dataSource.url,\n data: JSON.stringify(data)\n };\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {number} value\n * @param {string} tableName?\n * @param tableName\n */\n WebApiAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n return {\n type: 'DELETE',\n url: dm.dataSource.url + '/' + value,\n data: JSON.stringify(value)\n };\n };\n /**\n * Prepare and return request body which is used to update record.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n */\n WebApiAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n return {\n type: 'PUT',\n url: dm.dataSource.url,\n data: JSON.stringify(value)\n };\n };\n WebApiAdaptor.prototype.batchRequest = function (dm, changes, e) {\n var _this = this;\n var initialGuid = e.guid = DataUtil.getGuid(this.options.batchPre);\n var url = dm.dataSource.url.replace(/\\/*$/, '/' + this.options.batch);\n e.url = this.resourceTableName ? this.resourceTableName : e.url;\n var req = [];\n var _loop_1 = function (i, x) {\n changes.addedRecords.forEach(function (j, d) {\n var stat = {\n 'method': 'POST ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('POST ' + '/api/' + (dm.dataSource.insertUrl || dm.dataSource.crudUrl || e.url)\n + stat.url(changes.addedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //insertion\n for (var i = 0, x = changes.addedRecords.length; i < x; i++) {\n _loop_1(i, x);\n }\n var _loop_2 = function (i, x) {\n changes.changedRecords.forEach(function (j, d) {\n var stat = {\n 'method': _this.options.updateType + ' ',\n 'url': function (data, i, key) { return ''; },\n 'data': function (data, i) { return JSON.stringify(data[i]) + '\\n\\n'; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('PUT ' + '/api/' + (dm.dataSource.updateUrl || dm.dataSource.crudUrl || e.url)\n + stat.url(changes.changedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //updation\n for (var i = 0, x = changes.changedRecords.length; i < x; i++) {\n _loop_2(i, x);\n }\n var _loop_3 = function (i, x) {\n changes.deletedRecords.forEach(function (j, d) {\n var state = {\n 'mtd': 'DELETE ',\n 'url': function (data, i, key) {\n var url = DataUtil.getObject(key, data[i]);\n if (typeof url === 'number' || DataUtil.parse.isGuid(url)) {\n return '/' + url;\n }\n else if (url instanceof Date) {\n var datTime = data[i][key];\n return '/' + datTime.toJSON();\n }\n else {\n return \"/'\" + url + \"'\";\n }\n },\n 'data': function (data, i) { return ''; }\n };\n req.push('--' + initialGuid);\n req.push('Content-Type: application/http; msgtype=request', '');\n req.push('DELETE ' + '/api/' + (dm.dataSource.removeUrl || dm.dataSource.crudUrl || e.url)\n + state.url(changes.deletedRecords, i, e.key) + ' HTTP/1.1');\n req.push('Content-Type: ' + 'application/json; charset=utf-8');\n req.push('Host: ' + location.host);\n req.push('', j ? JSON.stringify(j) : '');\n });\n };\n //deletion\n for (var i = 0, x = changes.deletedRecords.length; i < x; i++) {\n _loop_3(i, x);\n }\n req.push('--' + initialGuid + '--', '');\n return {\n type: 'POST',\n url: url,\n contentType: 'multipart/mixed; boundary=' + initialGuid,\n data: req.join('\\r\\n')\n };\n };\n /**\n * Method will trigger before send the request to server side.\n * Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {Request} request\n * @param {Fetch} settings\n * @returns void\n */\n WebApiAdaptor.prototype.beforeSend = function (dm, request, settings) {\n request.headers.set('Accept', 'application/json, text/javascript, */*; q=0.01');\n };\n /**\n * Returns the data from the query processing.\n *\n * @param {DataResult} data\n * @param {DataOptions} ds?\n * @param {Query} query?\n * @param {Request} xhr?\n * @param {Fetch} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n * @returns aggregateResult\n */\n WebApiAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n var pvtData = 'pvtData';\n var pvt = request && request[pvtData];\n var count = null;\n var args = {};\n if (request && request.type.toLowerCase() !== 'post') {\n var versionCheck = xhr && request.fetchRequest.headers.get('DataServiceVersion');\n var version = (versionCheck && parseInt(versionCheck, 10)) || 2;\n if (query && query.isCountRequired) {\n if (!DataUtil.isNull(data.Count)) {\n count = data.Count;\n }\n }\n if (version < 3 && data.Items) {\n data = data.Items;\n }\n args.count = count;\n args.result = data;\n this.getAggregateResult(pvt, data, args, null, query);\n }\n args.result = args.result || data;\n return DataUtil.isNull(count) ? args.result : { result: args.result, count: args.count, aggregates: args.aggregates };\n };\n return WebApiAdaptor;\n}(ODataAdaptor));\nexport { WebApiAdaptor };\n/**\n * WebMethodAdaptor can be used by DataManager to interact with web method.\n *\n * @hidden\n */\nvar WebMethodAdaptor = /** @class */ (function (_super) {\n __extends(WebMethodAdaptor, _super);\n function WebMethodAdaptor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Prepare the request body based on the query.\n * The query information can be accessed at the WebMethod using variable named `value`.\n *\n * @param {DataManager} dm\n * @param {Query} query\n * @param {Object[]} hierarchyFilters?\n * @param hierarchyFilters\n * @returns application\n */\n WebMethodAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var obj = new UrlAdaptor().processQuery(dm, query, hierarchyFilters);\n var getData = 'data';\n var data = DataUtil.parse.parseJson(obj[getData]);\n var result = {};\n var value = 'value';\n if (data.param) {\n for (var i = 0; i < data.param.length; i++) {\n var param = data.param[i];\n var key = Object.keys(param)[0];\n result[key] = param[key];\n }\n }\n result[value] = data;\n var pvtData = 'pvtData';\n var url = 'url';\n return {\n data: JSON.stringify(result, DataUtil.parse.jsonDateReplacer),\n url: obj[url],\n pvtData: obj[pvtData],\n type: 'POST',\n contentType: 'application/json; charset=utf-8'\n };\n };\n return WebMethodAdaptor;\n}(UrlAdaptor));\nexport { WebMethodAdaptor };\n/**\n * RemoteSaveAdaptor, extended from JsonAdaptor and it is used for binding local data and performs all DataManager queries in client-side.\n * It interacts with server-side only for CRUD operations.\n *\n * @hidden\n */\nvar RemoteSaveAdaptor = /** @class */ (function (_super) {\n __extends(RemoteSaveAdaptor, _super);\n /**\n * @hidden\n */\n function RemoteSaveAdaptor() {\n var _this = _super.call(this) || this;\n setValue('beforeSend', UrlAdaptor.prototype.beforeSend, _this);\n return _this;\n }\n RemoteSaveAdaptor.prototype.insert = function (dm, data, tableName, query, position) {\n this.pvt.position = position;\n this.updateType = 'add';\n return {\n url: dm.dataSource.insertUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: data,\n table: tableName,\n action: 'insert'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.remove = function (dm, keyField, val, tableName, query) {\n _super.prototype.remove.call(this, dm, keyField, val);\n return {\n type: 'POST',\n url: dm.dataSource.removeUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n key: val,\n keyColumn: keyField,\n table: tableName,\n action: 'remove'\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.update = function (dm, keyField, val, tableName, query) {\n this.updateType = 'update';\n this.updateKey = keyField;\n return {\n type: 'POST',\n url: dm.dataSource.updateUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n data: JSON.stringify(extend({}, {\n value: val,\n action: 'update',\n keyColumn: keyField,\n key: val[keyField],\n table: tableName\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes, e) {\n var i;\n var newData = request ? JSON.parse(request.data) : data;\n data = newData.action === 'batch' ? DataUtil.parse.parseJson(data) : data;\n if (this.updateType === 'add') {\n _super.prototype.insert.call(this, ds, data, null, null, this.pvt.position);\n }\n if (this.updateType === 'update') {\n _super.prototype.update.call(this, ds, this.updateKey, data);\n }\n this.updateType = undefined;\n if (data.added) {\n for (i = 0; i < data.added.length; i++) {\n _super.prototype.insert.call(this, ds, data.added[i]);\n }\n }\n if (data.changed) {\n for (i = 0; i < data.changed.length; i++) {\n _super.prototype.update.call(this, ds, e.key, data.changed[i]);\n }\n }\n if (data.deleted) {\n for (i = 0; i < data.deleted.length; i++) {\n _super.prototype.remove.call(this, ds, e.key, data.deleted[i]);\n }\n }\n return data;\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * Also perform the changes in the locally cached data to sync with the remote data.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n * @param query\n * @param original\n */\n RemoteSaveAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n return {\n type: 'POST',\n url: dm.dataSource.batchUrl || dm.dataSource.crudUrl || dm.dataSource.url,\n contentType: 'application/json; charset=utf-8',\n dataType: 'json',\n data: JSON.stringify(extend({}, {\n changed: changes.changedRecords,\n added: changes.addedRecords,\n deleted: changes.deletedRecords,\n action: 'batch',\n table: e.url,\n key: e.key\n }, DataUtil.getAddParams(this, dm, query)))\n };\n };\n RemoteSaveAdaptor.prototype.addParams = function (options) {\n var urlParams = new UrlAdaptor();\n urlParams.addParams(options);\n };\n return RemoteSaveAdaptor;\n}(JsonAdaptor));\nexport { RemoteSaveAdaptor };\n/**\n * Fetch Adaptor that is extended from URL Adaptor, is used for handle data operations with user defined functions.\n *\n * @hidden\n */\nvar CustomDataAdaptor = /** @class */ (function (_super) {\n __extends(CustomDataAdaptor, _super);\n function CustomDataAdaptor(props) {\n var _this = _super.call(this) || this;\n // options replaced the default adaptor options\n _this.options = extend({}, _this.options, {\n getData: new Function(),\n addRecord: new Function(),\n updateRecord: new Function(),\n deleteRecord: new Function(),\n batchUpdate: new Function()\n });\n extend(_this.options, props || {});\n return _this;\n }\n CustomDataAdaptor.prototype.getModuleName = function () {\n return 'CustomDataAdaptor';\n };\n return CustomDataAdaptor;\n}(UrlAdaptor));\nexport { CustomDataAdaptor };\n/**\n * The GraphqlAdaptor that is extended from URL Adaptor, is used for retrieving data from the Graphql server.\n * It interacts with the Graphql server with all the DataManager Queries and performs CRUD operations.\n *\n * @hidden\n */\nvar GraphQLAdaptor = /** @class */ (function (_super) {\n __extends(GraphQLAdaptor, _super);\n function GraphQLAdaptor(options) {\n var _this = _super.call(this) || this;\n _this.opt = options;\n _this.schema = _this.opt.response;\n _this.query = _this.opt.query;\n /* eslint-disable @typescript-eslint/no-empty-function */\n // tslint:disable-next-line:no-empty\n _this.getVariables = _this.opt.getVariables ? _this.opt.getVariables : function () { };\n /* eslint-enable @typescript-eslint/no-empty-function */\n _this.getQuery = function () { return _this.query; };\n return _this;\n }\n GraphQLAdaptor.prototype.getModuleName = function () {\n return 'GraphQLAdaptor';\n };\n /**\n * Process the JSON data based on the provided queries.\n *\n * @param {DataManager} dm\n * @param {Query} query?\n * @param datamanager\n * @param query\n */\n GraphQLAdaptor.prototype.processQuery = function (datamanager, query) {\n var urlQuery = _super.prototype.processQuery.apply(this, arguments);\n var dm = JSON.parse(urlQuery.data);\n // constructing GraphQL parameters\n var keys = ['skip', 'take', 'sorted', 'table', 'select', 'where',\n 'search', 'requiresCounts', 'aggregates', 'params'];\n var temp = {};\n var str = 'searchwhereparams';\n keys.filter(function (e) {\n temp[e] = str.indexOf(e) > -1 ? JSON.stringify(dm[e]) : dm[e];\n });\n var vars = this.getVariables() || {};\n // tslint:disable-next-line:no-string-literal\n vars['datamanager'] = temp;\n var data = JSON.stringify({\n query: this.getQuery(),\n variables: vars\n });\n urlQuery.data = data;\n return urlQuery;\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n *\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {Request} xhr?\n * @param {Object} request?\n * @param resData\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @returns DataResult\n */\n GraphQLAdaptor.prototype.processResponse = function (resData, ds, query, xhr, request) {\n var res = resData;\n var count;\n var aggregates;\n var result = getValue(this.schema.result, res.data);\n if (this.schema.count) {\n count = getValue(this.schema.count, res.data);\n }\n if (this.schema.aggregates) {\n aggregates = getValue(this.schema.aggregates, res.data);\n aggregates = !isNullOrUndefined(aggregates) ? DataUtil.parse.parseJson(aggregates) : aggregates;\n }\n var pvt = request.pvtData || {};\n var args = { result: result, aggregates: aggregates };\n var data = args;\n if (pvt && pvt.groups && pvt.groups.length) {\n this.getAggregateResult(pvt, data, args, null, query);\n }\n return !isNullOrUndefined(count) ? { result: args.result, count: count, aggregates: aggregates } : args.result;\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n */\n GraphQLAdaptor.prototype.insert = function () {\n var inserted = _super.prototype.insert.apply(this, arguments);\n return this.generateCrudData(inserted, 'insert');\n };\n /**\n * Prepare and returns request body which is used to update a new record in the table.\n */\n GraphQLAdaptor.prototype.update = function () {\n var inserted = _super.prototype.update.apply(this, arguments);\n return this.generateCrudData(inserted, 'update');\n };\n /**\n * Prepare and returns request body which is used to remove a new record in the table.\n */\n GraphQLAdaptor.prototype.remove = function () {\n var inserted = _super.prototype.remove.apply(this, arguments);\n return this.generateCrudData(inserted, 'remove');\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {Object} e\n * @param e.key\n * @param {Query} query\n * @param {Object} original\n */\n GraphQLAdaptor.prototype.batchRequest = function (dm, changes, e, query, original) {\n var batch = _super.prototype.batchRequest.apply(this, arguments);\n // tslint:disable-next-line:typedef\n var bData = JSON.parse(batch.data);\n bData.key = e.key;\n batch.data = JSON.stringify(bData);\n return this.generateCrudData(batch, 'batch');\n };\n GraphQLAdaptor.prototype.generateCrudData = function (crudData, action) {\n var parsed = JSON.parse(crudData.data);\n crudData.data = JSON.stringify({\n query: this.opt.getMutation(action),\n variables: parsed\n });\n return crudData;\n };\n return GraphQLAdaptor;\n}(UrlAdaptor));\nexport { GraphQLAdaptor };\n/**\n * Cache Adaptor is used to cache the data of the visited pages. It prevents new requests for the previously visited pages.\n * You can configure cache page size and duration of caching by using cachingPageSize and timeTillExpiration properties of the DataManager\n *\n * @hidden\n */\nvar CacheAdaptor = /** @class */ (function (_super) {\n __extends(CacheAdaptor, _super);\n /**\n * Constructor for CacheAdaptor class.\n *\n * @param {CacheAdaptor} adaptor?\n * @param {number} timeStamp?\n * @param {number} pageSize?\n * @param adaptor\n * @param timeStamp\n * @param pageSize\n * @hidden\n */\n function CacheAdaptor(adaptor, timeStamp, pageSize) {\n var _this = _super.call(this) || this;\n _this.isCrudAction = false;\n _this.isInsertAction = false;\n if (!isNullOrUndefined(adaptor)) {\n _this.cacheAdaptor = adaptor;\n }\n _this.pageSize = pageSize;\n _this.guidId = DataUtil.getGuid('cacheAdaptor');\n var obj = { keys: [], results: [] };\n window.localStorage.setItem(_this.guidId, JSON.stringify(obj));\n var guid = _this.guidId;\n if (!isNullOrUndefined(timeStamp)) {\n setInterval(function () {\n var data = DataUtil.parse.parseJson(window.localStorage.getItem(guid));\n var forDel = [];\n for (var i = 0; i < data.results.length; i++) {\n var currentTime = +new Date();\n var requestTime = +new Date(data.results[i].timeStamp);\n data.results[i].timeStamp = currentTime - requestTime;\n if (currentTime - requestTime > timeStamp) {\n forDel.push(i);\n }\n }\n for (var i = 0; i < forDel.length; i++) {\n data.results.splice(forDel[i], 1);\n data.keys.splice(forDel[i], 1);\n }\n window.localStorage.removeItem(guid);\n window.localStorage.setItem(guid, JSON.stringify(data));\n }, timeStamp);\n }\n return _this;\n }\n /**\n * It will generate the key based on the URL when we send a request to server.\n *\n * @param {string} url\n * @param {Query} query?\n * @param query\n * @hidden\n */\n CacheAdaptor.prototype.generateKey = function (url, query) {\n var queries = this.getQueryRequest(query);\n var singles = Query.filterQueryLists(query.queries, ['onSelect', 'onPage', 'onSkip', 'onTake', 'onRange']);\n var key = url;\n var page = 'onPage';\n if (page in singles) {\n key += singles[page].pageIndex;\n }\n queries.sorts.forEach(function (obj) {\n key += obj.e.direction + obj.e.fieldName;\n });\n queries.groups.forEach(function (obj) {\n key += obj.e.fieldName;\n });\n queries.searches.forEach(function (obj) {\n key += obj.e.searchKey;\n });\n for (var filter = 0; filter < queries.filters.length; filter++) {\n var currentFilter = queries.filters[filter];\n if (currentFilter.e.isComplex) {\n var newQuery = query.clone();\n newQuery.queries = [];\n for (var i = 0; i < currentFilter.e.predicates.length; i++) {\n newQuery.queries.push({ fn: 'onWhere', e: currentFilter.e.predicates[i], filter: query.queries.filter });\n }\n key += currentFilter.e.condition + this.generateKey(url, newQuery);\n }\n else {\n key += currentFilter.e.field + currentFilter.e.operator + currentFilter.e.value;\n }\n }\n return key;\n };\n /**\n * Process the query to generate request body.\n * If the data is already cached, it will return the cached data.\n *\n * @param {DataManager} dm\n * @param {Query} query?\n * @param {Object[]} hierarchyFilters?\n * @param query\n * @param hierarchyFilters\n */\n CacheAdaptor.prototype.processQuery = function (dm, query, hierarchyFilters) {\n var key = this.generateKey(dm.dataSource.url, query);\n var cachedItems = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var data = cachedItems ? cachedItems.results[cachedItems.keys.indexOf(key)] : null;\n if (data != null && !this.isCrudAction && !this.isInsertAction) {\n return data;\n }\n this.isCrudAction = null;\n this.isInsertAction = null;\n /* eslint-disable prefer-spread */\n return this.cacheAdaptor.processQuery.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n /* eslint-enable prefer-spread */\n };\n /**\n * Returns the data from the query processing.\n * It will also cache the data for later usage.\n *\n * @param {DataResult} data\n * @param {DataManager} ds?\n * @param {Query} query?\n * @param {Request} xhr?\n * @param {Fetch} request?\n * @param {CrudOptions} changes?\n * @param ds\n * @param query\n * @param xhr\n * @param request\n * @param changes\n */\n CacheAdaptor.prototype.processResponse = function (data, ds, query, xhr, request, changes) {\n if (this.isInsertAction || (request && this.cacheAdaptor.options.batch &&\n DataUtil.endsWith(request.url, this.cacheAdaptor.options.batch) && request.type.toLowerCase() === 'post')) {\n return this.cacheAdaptor.processResponse(data, ds, query, xhr, request, changes);\n }\n /* eslint-disable prefer-spread */\n data = this.cacheAdaptor.processResponse.apply(this.cacheAdaptor, [].slice.call(arguments, 0));\n /* eslint-enable prefer-spread */\n var key = query ? this.generateKey(ds.dataSource.url, query) : ds.dataSource.url;\n var obj = {};\n obj = DataUtil.parse.parseJson(window.localStorage.getItem(this.guidId));\n var index = obj.keys.indexOf(key);\n if (index !== -1) {\n obj.results.splice(index, 1);\n obj.keys.splice(index, 1);\n }\n obj.results[obj.keys.push(key) - 1] = { keys: key, result: data.result, timeStamp: new Date(), count: data.count };\n while (obj.results.length > this.pageSize) {\n obj.results.splice(0, 1);\n obj.keys.splice(0, 1);\n }\n window.localStorage.setItem(this.guidId, JSON.stringify(obj));\n return data;\n };\n /**\n * Method will trigger before send the request to server side. Used to set the custom header or modify the request options.\n *\n * @param {DataManager} dm\n * @param {Request} request\n * @param {Fetch} settings?\n * @param settings\n */\n CacheAdaptor.prototype.beforeSend = function (dm, request, settings) {\n if (!isNullOrUndefined(this.cacheAdaptor.options.batch) && DataUtil.endsWith(settings.url, this.cacheAdaptor.options.batch)\n && settings.type.toLowerCase() === 'post') {\n request.headers.set('Accept', this.cacheAdaptor.options.multipartAccept);\n }\n if (!dm.dataSource.crossDomain) {\n request.headers.set('Accept', this.cacheAdaptor.options.accept);\n }\n };\n /**\n * Updates existing record and saves the changes to the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName\n */\n CacheAdaptor.prototype.update = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.update(dm, keyField, value, tableName);\n };\n /**\n * Prepare and returns request body which is used to insert a new record in the table.\n *\n * @param {DataManager} dm\n * @param {Object} data\n * @param {string} tableName?\n * @param tableName\n */\n CacheAdaptor.prototype.insert = function (dm, data, tableName) {\n this.isInsertAction = true;\n return this.cacheAdaptor.insert(dm, data, tableName);\n };\n /**\n * Prepare and return request body which is used to remove record from the table.\n *\n * @param {DataManager} dm\n * @param {string} keyField\n * @param {Object} value\n * @param {string} tableName?\n * @param tableName\n */\n CacheAdaptor.prototype.remove = function (dm, keyField, value, tableName) {\n this.isCrudAction = true;\n return this.cacheAdaptor.remove(dm, keyField, value, tableName);\n };\n /**\n * Prepare the request body based on the newly added, removed and updated records.\n * The result is used by the batch request.\n *\n * @param {DataManager} dm\n * @param {CrudOptions} changes\n * @param {RemoteArgs} e\n */\n CacheAdaptor.prototype.batchRequest = function (dm, changes, e) {\n return this.cacheAdaptor.batchRequest(dm, changes, e);\n };\n return CacheAdaptor;\n}(UrlAdaptor));\nexport { CacheAdaptor };\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable security/detect-object-injection */\nimport { Fetch } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from './util';\nimport { Predicate, Query } from './query';\nimport { ODataAdaptor, JsonAdaptor, CacheAdaptor, RemoteSaveAdaptor, CustomDataAdaptor } from './adaptors';\n/**\n * DataManager is used to manage and manipulate relational data.\n */\nvar DataManager = /** @class */ (function () {\n /**\n * Constructor for DataManager class\n *\n * @param {DataOptions|JSON[]} dataSource?\n * @param {Query} query?\n * @param {AdaptorOptions|string} adaptor?\n * @param dataSource\n * @param query\n * @param adaptor\n * @hidden\n */\n function DataManager(dataSource, query, adaptor) {\n var _this = this;\n /** @hidden */\n this.dateParse = true;\n /** @hidden */\n this.timeZoneHandling = true;\n this.persistQuery = {};\n this.isInitialLoad = false;\n this.requests = [];\n this.isInitialLoad = true;\n if (!dataSource && !this.dataSource) {\n dataSource = [];\n }\n adaptor = adaptor || dataSource.adaptor;\n if (dataSource && dataSource.timeZoneHandling === false) {\n this.timeZoneHandling = dataSource.timeZoneHandling;\n }\n var data;\n if (dataSource instanceof Array) {\n data = {\n json: dataSource,\n offline: true\n };\n }\n else if (typeof dataSource === 'object') {\n if (!dataSource.json) {\n dataSource.json = [];\n }\n if (!dataSource.enablePersistence) {\n dataSource.enablePersistence = false;\n }\n if (!dataSource.id) {\n dataSource.id = '';\n }\n if (!dataSource.ignoreOnPersist) {\n dataSource.ignoreOnPersist = [];\n }\n data = {\n url: dataSource.url,\n insertUrl: dataSource.insertUrl,\n removeUrl: dataSource.removeUrl,\n updateUrl: dataSource.updateUrl,\n crudUrl: dataSource.crudUrl,\n batchUrl: dataSource.batchUrl,\n json: dataSource.json,\n headers: dataSource.headers,\n accept: dataSource.accept,\n data: dataSource.data,\n timeTillExpiration: dataSource.timeTillExpiration,\n cachingPageSize: dataSource.cachingPageSize,\n enableCaching: dataSource.enableCaching,\n requestType: dataSource.requestType,\n key: dataSource.key,\n crossDomain: dataSource.crossDomain,\n jsonp: dataSource.jsonp,\n dataType: dataSource.dataType,\n offline: dataSource.offline !== undefined ? dataSource.offline\n : dataSource.adaptor instanceof RemoteSaveAdaptor || dataSource.adaptor instanceof CustomDataAdaptor ?\n false : dataSource.url ? false : true,\n requiresFormat: dataSource.requiresFormat,\n enablePersistence: dataSource.enablePersistence,\n id: dataSource.id,\n ignoreOnPersist: dataSource.ignoreOnPersist\n };\n }\n else {\n DataUtil.throwError('DataManager: Invalid arguments');\n }\n if (data.requiresFormat === undefined && !DataUtil.isCors()) {\n data.requiresFormat = isNullOrUndefined(data.crossDomain) ? true : data.crossDomain;\n }\n if (data.dataType === undefined) {\n data.dataType = 'json';\n }\n this.dataSource = data;\n this.defaultQuery = query;\n if (this.dataSource.enablePersistence && this.dataSource.id) {\n window.addEventListener('unload', this.setPersistData.bind(this));\n }\n if (data.url && data.offline && !data.json.length) {\n this.isDataAvailable = false;\n this.adaptor = adaptor || new ODataAdaptor();\n this.dataSource.offline = false;\n this.ready = this.executeQuery(query || new Query());\n this.ready.then(function (e) {\n _this.dataSource.offline = true;\n _this.isDataAvailable = true;\n data.json = e.result;\n _this.adaptor = new JsonAdaptor();\n });\n }\n else {\n this.adaptor = data.offline ? new JsonAdaptor() : new ODataAdaptor();\n }\n if (!data.jsonp && this.adaptor instanceof ODataAdaptor) {\n data.jsonp = 'callback';\n }\n this.adaptor = adaptor || this.adaptor;\n if (data.enableCaching) {\n this.adaptor = new CacheAdaptor(this.adaptor, data.timeTillExpiration, data.cachingPageSize);\n }\n return this;\n }\n /**\n * Get the queries maintained in the persisted state.\n * @param {string} id - The identifier of the persisted query to retrieve.\n * @returns {object} The persisted data object.\n */\n DataManager.prototype.getPersistedData = function (id) {\n var persistedData = localStorage.getItem(id || this.dataSource.id);\n return JSON.parse(persistedData);\n };\n /**\n * Set the queries to be maintained in the persisted state.\n * @param {Event} e - The event parameter that triggers the setPersistData method.\n * @param {string} id - The identifier of the persisted query to set.\n * @param {object} persistData - The data to be persisted.\n * @returns {void} .\n */\n DataManager.prototype.setPersistData = function (e, id, persistData) {\n localStorage.setItem(id || this.dataSource.id, JSON.stringify(persistData || this.persistQuery));\n };\n DataManager.prototype.setPersistQuery = function (query) {\n var _this = this;\n var persistedQuery = this.getPersistedData();\n if (this.isInitialLoad && persistedQuery && Object.keys(persistedQuery).length) {\n this.persistQuery = persistedQuery;\n this.persistQuery.queries = this.persistQuery.queries.filter(function (query) {\n if (_this.dataSource.ignoreOnPersist && _this.dataSource.ignoreOnPersist.length) {\n if (query.fn && _this.dataSource.ignoreOnPersist.some(function (keyword) { return query.fn === keyword; })) {\n return false; // Exclude the matching query\n }\n }\n if (query.fn === 'onWhere') {\n var e = query.e;\n if (e && e.isComplex && e.predicates instanceof Array) {\n var allPredicates = e.predicates.map(function (predicateObj) {\n if (predicateObj.predicates && predicateObj.predicates instanceof Array) {\n // Process nested predicate array\n var nestedPredicates = predicateObj.predicates.map(function (nestedPredicate) {\n var field = nestedPredicate.field, operator = nestedPredicate.operator, value = nestedPredicate.value, ignoreCase = nestedPredicate.ignoreCase, ignoreAccent = nestedPredicate.ignoreAccent, matchCase = nestedPredicate.matchCase;\n return new Predicate(field, operator, value, ignoreCase, ignoreAccent, matchCase);\n });\n return predicateObj.condition === 'and' ? Predicate.and(nestedPredicates) : Predicate.or(nestedPredicates);\n }\n else {\n // Process individual predicate\n var field = predicateObj.field, operator = predicateObj.operator, value = predicateObj.value, ignoreCase = predicateObj.ignoreCase, ignoreAccent = predicateObj.ignoreAccent, matchCase = predicateObj.matchCase;\n return new Predicate(field, operator, value, ignoreCase, ignoreAccent, matchCase);\n }\n });\n query.e = new Predicate(allPredicates[0], e.condition, allPredicates.slice(1));\n }\n }\n return true; // Keep all other queries\n });\n var newQuery = extend(new Query(), this.persistQuery);\n this.isInitialLoad = false;\n return (newQuery);\n }\n else {\n this.persistQuery = query;\n this.isInitialLoad = false;\n return query;\n }\n };\n /**\n * Overrides DataManager's default query with given query.\n *\n * @param {Query} query - Defines the new default query.\n */\n DataManager.prototype.setDefaultQuery = function (query) {\n this.defaultQuery = query;\n return this;\n };\n /**\n * Executes the given query with local data source.\n *\n * @param {Query} query - Defines the query to retrieve data.\n */\n DataManager.prototype.executeLocal = function (query) {\n if (!this.defaultQuery && !(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeLocal() : A query is required to execute');\n }\n if (!this.dataSource.json) {\n DataUtil.throwError('DataManager - executeLocal() : Json data is required to execute');\n }\n if (this.dataSource.enablePersistence && this.dataSource.id) {\n query = this.setPersistQuery(query);\n }\n query = query || this.defaultQuery;\n var result = this.adaptor.processQuery(this, query);\n if (query.subQuery) {\n var from = query.subQuery.fromTable;\n var lookup = query.subQuery.lookups;\n var res = query.isCountRequired ? result.result :\n result;\n if (lookup && lookup instanceof Array) {\n DataUtil.buildHierarchy(query.subQuery.fKey, from, res, lookup, query.subQuery.key);\n }\n for (var j = 0; j < res.length; j++) {\n if (res[j][from] instanceof Array) {\n res[j] = extend({}, {}, res[j]);\n res[j][from] = this.adaptor.processResponse(query.subQuery.using(new DataManager(res[j][from].slice(0))).executeLocal(), this, query);\n }\n }\n }\n return this.adaptor.processResponse(result, this, query);\n };\n /**\n * Executes the given query with either local or remote data source.\n * It will be executed as asynchronously and returns Promise object which will be resolved or rejected after action completed.\n *\n * @param {Query|Function} query - Defines the query to retrieve data.\n * @param {Function} done - Defines the callback function and triggers when the Promise is resolved.\n * @param {Function} fail - Defines the callback function and triggers when the Promise is rejected.\n * @param {Function} always - Defines the callback function and triggers when the Promise is resolved or rejected.\n */\n DataManager.prototype.executeQuery = function (query, done, fail, always) {\n var _this = this;\n var makeRequest = 'makeRequest';\n if (this.dataSource.enablePersistence && this.dataSource.id) {\n query = this.setPersistQuery(query);\n }\n if (typeof query === 'function') {\n always = fail;\n fail = done;\n done = query;\n query = null;\n }\n if (!query) {\n query = this.defaultQuery;\n }\n if (!(query instanceof Query)) {\n DataUtil.throwError('DataManager - executeQuery() : A query is required to execute');\n }\n var deffered = new Deferred();\n var args = { query: query };\n if (!this.dataSource.offline && (this.dataSource.url !== undefined && this.dataSource.url !== '')\n || (!isNullOrUndefined(this.adaptor[makeRequest])) || this.isCustomDataAdaptor(this.adaptor)) {\n var result = this.adaptor.processQuery(this, query);\n if (!isNullOrUndefined(this.adaptor[makeRequest])) {\n this.adaptor[makeRequest](result, deffered, args, query);\n }\n else if (!isNullOrUndefined(result.url) || this.isCustomDataAdaptor(this.adaptor)) {\n this.requests = [];\n this.makeRequest(result, deffered, args, query);\n }\n else {\n args = DataManager.getDeferedArgs(query, result, args);\n deffered.resolve(args);\n }\n }\n else {\n DataManager.nextTick(function () {\n var res = _this.executeLocal(query);\n args = DataManager.getDeferedArgs(query, res, args);\n deffered.resolve(args);\n });\n }\n if (done || fail) {\n deffered.promise.then(done, fail);\n }\n if (always) {\n deffered.promise.then(always, always);\n }\n return deffered.promise;\n };\n DataManager.getDeferedArgs = function (query, result, args) {\n if (query.isCountRequired) {\n args.result = result.result;\n args.count = result.count;\n args.aggregates = result.aggregates;\n }\n else {\n args.result = result;\n }\n return args;\n };\n DataManager.nextTick = function (fn) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n // tslint:disable-next-line:no-any\n (window.setImmediate || window.setTimeout)(fn, 0);\n /* eslint-enable @typescript-eslint/no-explicit-any */\n };\n DataManager.prototype.extendRequest = function (url, fnSuccess, fnFail) {\n return extend({}, {\n type: 'GET',\n dataType: this.dataSource.dataType,\n crossDomain: this.dataSource.crossDomain,\n jsonp: this.dataSource.jsonp,\n cache: true,\n processData: false,\n onSuccess: fnSuccess,\n onFailure: fnFail\n }, url);\n };\n // tslint:disable-next-line:max-func-body-length\n DataManager.prototype.makeRequest = function (url, deffered, args, query) {\n var _this = this;\n var isSelector = !!query.subQuerySelector;\n var fnFail = function (e) {\n args.error = e;\n deffered.reject(args);\n };\n var process = function (data, count, xhr, request, actual, aggregates, virtualSelectRecords) {\n args.xhr = xhr;\n args.count = count ? parseInt(count.toString(), 10) : 0;\n args.result = data;\n args.request = request;\n args.aggregates = aggregates;\n args.actual = actual;\n args.virtualSelectRecords = virtualSelectRecords;\n deffered.resolve(args);\n };\n var fnQueryChild = function (data, selector) {\n var subDeffer = new Deferred();\n var childArgs = { parent: args };\n query.subQuery.isChild = true;\n var subUrl = _this.adaptor.processQuery(_this, query.subQuery, data ? _this.adaptor.processResponse(data) : selector);\n var childReq = _this.makeRequest(subUrl, subDeffer, childArgs, query.subQuery);\n if (!isSelector) {\n subDeffer.then(function (subData) {\n if (data) {\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, data, subData, query.subQuery.key);\n process(data, subData.count, subData.xhr);\n }\n }, fnFail);\n }\n return childReq;\n };\n var fnSuccess = function (data, request) {\n if (_this.isGraphQLAdaptor(_this.adaptor)) {\n // tslint:disable-next-line:no-string-literal\n if (!isNullOrUndefined(data['errors'])) {\n // tslint:disable-next-line:no-string-literal\n return fnFail(data['errors'], request);\n }\n }\n if (_this.isCustomDataAdaptor(_this.adaptor)) {\n request = extend({}, _this.fetchReqOption, request);\n }\n if (request.contentType.indexOf('xml') === -1 && _this.dateParse) {\n data = DataUtil.parse.parseJson(data);\n }\n var result = _this.adaptor.processResponse(data, _this, query, request.fetchRequest, request);\n var count = 0;\n var aggregates = null;\n var virtualSelectRecords = 'virtualSelectRecords';\n var virtualRecords = data[virtualSelectRecords];\n if (query.isCountRequired) {\n count = result.count;\n aggregates = result.aggregates;\n result = result.result;\n }\n if (!query.subQuery) {\n process(result, count, request.fetchRequest, request.type, data, aggregates, virtualRecords);\n return;\n }\n if (!isSelector) {\n fnQueryChild(result, request);\n }\n };\n var req = this.extendRequest(url, fnSuccess, fnFail);\n if (!this.isCustomDataAdaptor(this.adaptor)) {\n var fetch_1 = new Fetch(req);\n fetch_1.beforeSend = function () {\n _this.beforeSend(fetch_1.fetchRequest, fetch_1);\n };\n req = fetch_1.send();\n req.catch(function (e) { return true; }); // to handle failure remote requests.\n this.requests.push(fetch_1);\n }\n else {\n this.fetchReqOption = req;\n var request = req;\n this.adaptor.options.getData({\n data: request.data,\n onSuccess: request.onSuccess, onFailure: request.onFailure\n });\n }\n if (isSelector) {\n var promise = void 0;\n var res = query.subQuerySelector.call(this, { query: query.subQuery, parent: query });\n if (res && res.length) {\n promise = Promise.all([req, fnQueryChild(null, res)]);\n promise.then(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var result = args[0];\n var pResult = _this.adaptor.processResponse(result[0], _this, query, _this.requests[0].fetchRequest, _this.requests[0]);\n var count = 0;\n if (query.isCountRequired) {\n count = pResult.count;\n pResult = pResult.result;\n }\n var cResult = _this.adaptor.processResponse(result[1], _this, query.subQuery, _this.requests[1].fetchRequest, _this.requests[1]);\n count = 0;\n if (query.subQuery.isCountRequired) {\n count = cResult.count;\n cResult = cResult.result;\n }\n DataUtil.buildHierarchy(query.subQuery.fKey, query.subQuery.fromTable, pResult, cResult, query.subQuery.key);\n isSelector = false;\n process(pResult, count, _this.requests[0].fetchRequest);\n });\n }\n else {\n isSelector = false;\n }\n }\n return req;\n };\n DataManager.prototype.beforeSend = function (request, settings) {\n this.adaptor.beforeSend(this, request, settings);\n var headers = this.dataSource.headers;\n var props;\n for (var i = 0; headers && i < headers.length; i++) {\n props = [];\n var keys = Object.keys(headers[i]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n props.push(prop);\n request.headers.set(prop, headers[i][prop]);\n }\n }\n };\n /**\n * Save bulk changes to the given table name.\n * User can add a new record, edit an existing record, and delete a record at the same time.\n * If the datasource from remote, then updated in a single post.\n *\n * @param {Object} changes - Defines the CrudOptions.\n * @param {string} key - Defines the column field.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n * @param original\n */\n DataManager.prototype.saveChanges = function (changes, key, tableName, query, original) {\n var _this = this;\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var args = {\n url: tableName,\n key: key || this.dataSource.key\n };\n var req = this.adaptor.batchRequest(this, changes, args, query || new Query(), original);\n var dofetchRequest = 'dofetchRequest';\n if (this.dataSource.offline) {\n return req;\n }\n if (!isNullOrUndefined(this.adaptor[dofetchRequest])) {\n return this.adaptor[dofetchRequest](req);\n }\n else if (!this.isCustomDataAdaptor(this.adaptor)) {\n var deff_1 = new Deferred();\n var fetch_2 = new Fetch(req);\n fetch_2.beforeSend = function () {\n _this.beforeSend(fetch_2.fetchRequest, fetch_2);\n };\n fetch_2.onSuccess = function (data, request) {\n if (_this.isGraphQLAdaptor(_this.adaptor)) {\n // tslint:disable-next-line:no-string-literal\n if (!isNullOrUndefined(data['errors'])) {\n // tslint:disable-next-line:no-string-literal\n fetch_2.onFailure(JSON.stringify(data['errors']));\n }\n }\n deff_1.resolve(_this.adaptor.processResponse(data, _this, null, request.fetchRequest, request, changes, args));\n };\n fetch_2.onFailure = function (e) {\n deff_1.reject([{ error: e }]);\n };\n fetch_2.send().catch(function (e) { return true; }); // to handle the failure requests.\n return deff_1.promise;\n }\n else {\n return this.dofetchRequest(req, this.adaptor.options.batchUpdate);\n }\n };\n /**\n * Inserts new record in the given table.\n *\n * @param {Object} data - Defines the data to insert.\n * @param {string|Query} tableName - Defines the table name.\n * @param {Query} query - Sets default query for the DataManager.\n * @param position\n */\n DataManager.prototype.insert = function (data, tableName, query, position) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var req = this.adaptor.insert(this, data, tableName, query, position);\n var dofetchRequest = 'dofetchRequest';\n if (this.dataSource.offline) {\n return req;\n }\n if (!isNullOrUndefined(this.adaptor[dofetchRequest])) {\n return this.adaptor[dofetchRequest](req);\n }\n else {\n return this.dofetchRequest(req, this.adaptor.options.addRecord);\n }\n };\n /**\n * Removes data from the table with the given key.\n *\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n */\n DataManager.prototype.remove = function (keyField, value, tableName, query) {\n if (typeof value === 'object') {\n value = DataUtil.getObject(keyField, value);\n }\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.remove(this, keyField, value, tableName, query);\n var dofetchRequest = 'dofetchRequest';\n if (this.dataSource.offline) {\n return res;\n }\n if (!isNullOrUndefined(this.adaptor[dofetchRequest])) {\n return this.adaptor[dofetchRequest](res);\n }\n else {\n var remove = this.adaptor.options.deleteRecord;\n return this.dofetchRequest(res, remove);\n }\n };\n /**\n * Updates existing record in the given table.\n *\n * @param {string} keyField - Defines the column field.\n * @param {Object} value - Defines the value to find the data in the specified column.\n * @param {string|Query} tableName - Defines the table name\n * @param {Query} query - Sets default query for the DataManager.\n * @param original\n */\n DataManager.prototype.update = function (keyField, value, tableName, query, original) {\n if (tableName instanceof Query) {\n query = tableName;\n tableName = null;\n }\n var res = this.adaptor.update(this, keyField, value, tableName, query, original);\n var dofetchRequest = 'dofetchRequest';\n if (this.dataSource.offline) {\n return res;\n }\n if (!isNullOrUndefined(this.adaptor[dofetchRequest])) {\n return this.adaptor[dofetchRequest](res);\n }\n else {\n var update = this.adaptor.options.updateRecord;\n return this.dofetchRequest(res, update);\n }\n };\n DataManager.prototype.isCustomDataAdaptor = function (dataSource) {\n return this.adaptor.getModuleName &&\n this.adaptor.getModuleName() === 'CustomDataAdaptor';\n };\n DataManager.prototype.isGraphQLAdaptor = function (dataSource) {\n return this.adaptor.getModuleName &&\n this.adaptor.getModuleName() === 'GraphQLAdaptor';\n };\n DataManager.prototype.successFunc = function (record, request) {\n if (this.isGraphQLAdaptor(this.adaptor)) {\n var data = typeof record === 'object' ? record : JSON.parse(record);\n // tslint:disable-next-line:no-string-literal\n if (!isNullOrUndefined(data['errors'])) {\n // tslint:disable-next-line:no-string-literal\n this.failureFunc(JSON.stringify(data['errors']));\n }\n }\n if (this.isCustomDataAdaptor(this.adaptor)) {\n request = extend({}, this.fetchReqOption, request);\n }\n try {\n DataUtil.parse.parseJson(record);\n }\n catch (e) {\n record = [];\n }\n record = this.adaptor.processResponse(DataUtil.parse.parseJson(record), this, null, request.fetchRequest, request);\n this.fetchDeffered.resolve(record);\n };\n DataManager.prototype.failureFunc = function (e) {\n this.fetchDeffered.reject([{ error: e }]);\n };\n DataManager.prototype.dofetchRequest = function (res, fetchFunc) {\n var _this = this;\n res = extend({}, {\n type: 'POST',\n contentType: 'application/json; charset=utf-8',\n processData: false\n }, res);\n this.fetchDeffered = new Deferred();\n if (!this.isCustomDataAdaptor(this.adaptor)) {\n var fetch_3 = new Fetch(res);\n fetch_3.beforeSend = function () {\n _this.beforeSend(fetch_3.fetchRequest, fetch_3);\n };\n fetch_3.onSuccess = this.successFunc.bind(this);\n fetch_3.onFailure = this.failureFunc.bind(this);\n fetch_3.send().catch(function (e) { return true; }); // to handle the failure requests.\n }\n else {\n this.fetchReqOption = res;\n fetchFunc.call(this, {\n data: res.data, onSuccess: this.successFunc.bind(this),\n onFailure: this.failureFunc.bind(this)\n });\n }\n return this.fetchDeffered.promise;\n };\n DataManager.prototype.clearPersistence = function () {\n window.removeEventListener('unload', this.setPersistData.bind(this));\n this.dataSource.enablePersistence = false;\n this.persistQuery = {};\n window.localStorage.setItem(this.dataSource.id, '[]');\n };\n return DataManager;\n}());\nexport { DataManager };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable security/detect-object-injection */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataManager } from './manager';\nimport { Query, Predicate } from './query';\nvar consts = { GroupGuid: '{271bbba0-1ee7}' };\n/**\n * Data manager common utility methods.\n *\n * @hidden\n */\nvar DataUtil = /** @class */ (function () {\n function DataUtil() {\n }\n /**\n * Returns the value by invoking the provided parameter function.\n * If the paramater is not of type function then it will be returned as it is.\n *\n * @param {Function|string|string[]|number} value\n * @param {Object} inst?\n * @param inst\n * @hidden\n */\n DataUtil.getValue = function (value, inst) {\n if (typeof value === 'function') {\n return value.call(inst || {});\n }\n return value;\n };\n /**\n * Returns true if the input string ends with given string.\n *\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.endsWith = function (input, substr) {\n return input.slice && input.slice(-substr.length) === substr;\n };\n /**\n * Returns true if the input string not ends with given string.\n *\n * @param {string} input\n * @param {string} substr\n */\n DataUtil.notEndsWith = function (input, substr) {\n return input.slice && input.slice(-substr.length) !== substr;\n };\n /**\n * Returns true if the input string starts with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param start\n */\n DataUtil.startsWith = function (input, start) {\n return input.slice(0, start.length) === start;\n };\n /**\n * Returns true if the input string not starts with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param start\n */\n DataUtil.notStartsWith = function (input, start) {\n return input.slice(0, start.length) !== start;\n };\n /**\n * Returns true if the input string pattern(wildcard) matches with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param pattern\n */\n DataUtil.wildCard = function (input, pattern) {\n var asteriskSplit;\n var optionalSplit;\n // special character allowed search\n if (pattern.indexOf('[') !== -1) {\n pattern = pattern.split('[').join('[[]');\n }\n if (pattern.indexOf('(') !== -1) {\n pattern = pattern.split('(').join('[(]');\n }\n if (pattern.indexOf(')') !== -1) {\n pattern = pattern.split(')').join('[)]');\n }\n if (pattern.indexOf('\\\\') !== -1) {\n pattern = pattern.split('\\\\').join('[\\\\\\\\]');\n }\n if (pattern.indexOf('*') !== -1) {\n if (pattern.charAt(0) !== '*') {\n pattern = '^' + pattern;\n }\n if (pattern.charAt(pattern.length - 1) !== '*') {\n pattern = pattern + '$';\n }\n asteriskSplit = pattern.split('*');\n for (var i = 0; i < asteriskSplit.length; i++) {\n if (asteriskSplit[i].indexOf('.') === -1) {\n asteriskSplit[i] = asteriskSplit[i] + '.*';\n }\n else {\n asteriskSplit[i] = asteriskSplit[i] + '*';\n }\n }\n pattern = asteriskSplit.join('');\n }\n if (pattern.indexOf('%3f') !== -1 || pattern.indexOf('?') !== -1) {\n optionalSplit = pattern.indexOf('%3f') !== -1 ? pattern.split('%3f') : pattern.split('?');\n pattern = optionalSplit.join('.');\n }\n // eslint-disable-next-line security/detect-non-literal-regexp\n var regexPattern = new RegExp(pattern, 'g');\n return regexPattern.test(input);\n };\n /**\n * Returns true if the input string pattern(like) matches with given string.\n *\n * @param {string} str\n * @param {string} startstr\n * @param input\n * @param pattern\n */\n DataUtil.like = function (input, pattern) {\n if (pattern.indexOf('%') !== -1) {\n if (pattern.charAt(0) === '%' && pattern.lastIndexOf('%') < 2) {\n pattern = pattern.substring(1, pattern.length);\n return DataUtil.startsWith(DataUtil.toLowerCase(input), DataUtil.toLowerCase(pattern));\n }\n else if (pattern.charAt(pattern.length - 1) === '%' && pattern.indexOf('%') > pattern.length - 3) {\n pattern = pattern.substring(0, pattern.length - 1);\n return DataUtil.endsWith(DataUtil.toLowerCase(input), DataUtil.toLowerCase(pattern));\n }\n else if (pattern.lastIndexOf('%') !== pattern.indexOf('%') && pattern.lastIndexOf('%') > pattern.indexOf('%') + 1) {\n pattern = pattern.substring(pattern.indexOf('%') + 1, pattern.lastIndexOf('%'));\n return input.indexOf(pattern) !== -1;\n }\n else {\n return input.indexOf(pattern) !== -1;\n }\n }\n else {\n return false;\n }\n };\n /**\n * To return the sorting function based on the string.\n *\n * @param {string} order\n * @hidden\n */\n DataUtil.fnSort = function (order) {\n order = order ? DataUtil.toLowerCase(order) : 'ascending';\n if (order === 'ascending') {\n return this.fnAscending;\n }\n return this.fnDescending;\n };\n /**\n * Comparer function which is used to sort the data in ascending order.\n *\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnAscending = function (x, y) {\n if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n return -1;\n }\n if (y === null || y === undefined) {\n return -1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y);\n }\n if (x === null || x === undefined) {\n return 1;\n }\n return x - y;\n };\n /**\n * Comparer function which is used to sort the data in descending order.\n *\n * @param {string|number} x\n * @param {string|number} y\n * @returns number\n */\n DataUtil.fnDescending = function (x, y) {\n if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n return -1;\n }\n if (y === null || y === undefined) {\n return 1;\n }\n if (typeof x === 'string') {\n return x.localeCompare(y) * -1;\n }\n if (x === null || x === undefined) {\n return -1;\n }\n return y - x;\n };\n DataUtil.extractFields = function (obj, fields) {\n var newObj = {};\n for (var i = 0; i < fields.length; i++) {\n newObj = this.setValue(fields[i], this.getObject(fields[i], obj), newObj);\n }\n return newObj;\n };\n /**\n * Select objects by given fields from jsonArray.\n *\n * @param {Object[]} jsonArray\n * @param {string[]} fields\n */\n DataUtil.select = function (jsonArray, fields) {\n var newData = [];\n for (var i = 0; i < jsonArray.length; i++) {\n newData.push(this.extractFields(jsonArray[i], fields));\n }\n return newData;\n };\n /**\n * Group the input data based on the field name.\n * It also performs aggregation of the grouped records based on the aggregates paramater.\n *\n * @param {Object[]} jsonArray\n * @param {string} field?\n * @param {Object[]} agg?\n * @param {number} level?\n * @param {Object[]} groupDs?\n * @param field\n * @param aggregates\n * @param level\n * @param groupDs\n * @param format\n * @param isLazyLoad\n */\n DataUtil.group = function (jsonArray, field, aggregates, level, groupDs, format, isLazyLoad) {\n level = level || 1;\n var jsonData = jsonArray;\n var guid = 'GroupGuid';\n if (jsonData.GroupGuid === consts[guid]) {\n var _loop_1 = function (j) {\n if (!isNullOrUndefined(groupDs)) {\n var indx = -1;\n var temp = groupDs.filter(function (e) { return e.key === jsonData[j].key; });\n indx = groupDs.indexOf(temp[0]);\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, groupDs[indx].items, format, isLazyLoad);\n jsonData[j].count = groupDs[indx].count;\n }\n else {\n jsonData[j].items = this_1.group(jsonData[j].items, field, aggregates, jsonData.level + 1, null, format, isLazyLoad);\n jsonData[j].count = jsonData[j].items.length;\n }\n };\n var this_1 = this;\n for (var j = 0; j < jsonData.length; j++) {\n _loop_1(j);\n }\n jsonData.childLevels += 1;\n return jsonData;\n }\n var grouped = {};\n var groupedArray = [];\n groupedArray.GroupGuid = consts[guid];\n groupedArray.level = level;\n groupedArray.childLevels = 0;\n groupedArray.records = jsonData;\n var _loop_2 = function (i) {\n var val = this_2.getVal(jsonData, i, field);\n if (!isNullOrUndefined(format)) {\n val = format(val, field);\n }\n if (!grouped[val]) {\n grouped[val] = {\n key: val,\n count: 0,\n items: [],\n aggregates: {},\n field: field\n };\n groupedArray.push(grouped[val]);\n if (!isNullOrUndefined(groupDs)) {\n var tempObj = groupDs.filter(function (e) { return e.key === grouped[val].key; });\n grouped[val].count = tempObj[0].count;\n }\n }\n grouped[val].count = !isNullOrUndefined(groupDs) ? grouped[val].count : grouped[val].count += 1;\n if (!isLazyLoad || (isLazyLoad && aggregates.length)) {\n grouped[val].items.push(jsonData[i]);\n }\n };\n var this_2 = this;\n for (var i = 0; i < jsonData.length; i++) {\n _loop_2(i);\n }\n if (aggregates && aggregates.length) {\n var _loop_3 = function (i) {\n var res = {};\n var fn = void 0;\n var aggs = aggregates;\n for (var j = 0; j < aggregates.length; j++) {\n fn = DataUtil.aggregates[aggregates[j].type];\n if (!isNullOrUndefined(groupDs)) {\n var temp = groupDs.filter(function (e) { return e.key === groupedArray[i].key; });\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(temp[0].items, aggs[j].field);\n }\n }\n else {\n if (fn) {\n res[aggs[j].field + ' - ' + aggs[j].type] = fn(groupedArray[i].items, aggs[j].field);\n }\n }\n }\n groupedArray[i].aggregates = res;\n };\n for (var i = 0; i < groupedArray.length; i++) {\n _loop_3(i);\n }\n }\n if (isLazyLoad && groupedArray.length && aggregates.length) {\n for (var i = 0; i < groupedArray.length; i++) {\n groupedArray[i].items = [];\n }\n }\n return jsonData.length && groupedArray || jsonData;\n };\n /**\n * It is used to categorize the multiple items based on a specific field in jsonArray.\n * The hierarchical queries are commonly required when you use foreign key binding.\n *\n * @param {string} fKey\n * @param {string} from\n * @param {Object[]} source\n * @param {Group} lookup?\n * @param {string} pKey?\n * @param lookup\n * @param pKey\n * @hidden\n */\n DataUtil.buildHierarchy = function (fKey, from, source, lookup, pKey) {\n var i;\n var grp = {};\n var temp;\n if (lookup.result) {\n lookup = lookup.result;\n }\n if (lookup.GroupGuid) {\n this.throwError('DataManager: Do not have support Grouping in hierarchy');\n }\n for (i = 0; i < lookup.length; i++) {\n var fKeyData = this.getObject(fKey, lookup[i]);\n temp = grp[fKeyData] || (grp[fKeyData] = []);\n temp.push(lookup[i]);\n }\n for (i = 0; i < source.length; i++) {\n var fKeyData = this.getObject(pKey || fKey, source[i]);\n source[i][from] = grp[fKeyData];\n }\n };\n /**\n * The method used to get the field names which started with specified characters.\n *\n * @param {Object} obj\n * @param {string[]} fields?\n * @param {string} prefix?\n * @param fields\n * @param prefix\n * @hidden\n */\n DataUtil.getFieldList = function (obj, fields, prefix) {\n if (prefix === undefined) {\n prefix = '';\n }\n if (fields === undefined || fields === null) {\n return this.getFieldList(obj, [], prefix);\n }\n var copyObj = obj;\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var prop = keys_1[_i];\n if (typeof copyObj[prop] === 'object' && !(copyObj[prop] instanceof Array)) {\n this.getFieldList(copyObj[prop], fields, prefix + prop + '.');\n }\n else {\n fields.push(prefix + prop);\n }\n }\n return fields;\n };\n /**\n * Gets the value of the property in the given object.\n * The complex object can be accessed by providing the field names concatenated with dot(.).\n *\n * @param {string} nameSpace - The name of the property to be accessed.\n * @param {Object} from - Defines the source object.\n */\n DataUtil.getObject = function (nameSpace, from) {\n if (!nameSpace) {\n return from;\n }\n if (!from) {\n return undefined;\n }\n if (nameSpace.indexOf('.') === -1) {\n var lowerCaseNameSpace = nameSpace.charAt(0).toLowerCase() + nameSpace.slice(1);\n var upperCaseNameSpace = nameSpace.charAt(0).toUpperCase() + nameSpace.slice(1);\n if (!isNullOrUndefined(from[nameSpace])) {\n return from[nameSpace];\n }\n else {\n if (!isNullOrUndefined(from[lowerCaseNameSpace])) {\n return from[lowerCaseNameSpace];\n }\n else if (!isNullOrUndefined(from[upperCaseNameSpace])) {\n return from[upperCaseNameSpace];\n }\n else {\n return null;\n }\n }\n }\n var value = from;\n var splits = nameSpace.split('.');\n for (var i = 0; i < splits.length; i++) {\n if (value == null) {\n break;\n }\n value = value[splits[i]];\n if (value === undefined) {\n var casing = splits[i].charAt(0).toUpperCase() + splits[i].slice(1);\n value = from[casing] || from[casing.charAt(0).toLowerCase() + casing.slice(1)] || null;\n }\n from = value;\n }\n return value;\n };\n /**\n * To set value for the nameSpace in desired object.\n *\n * @param {string} nameSpace - String value to the get the inner object.\n * @param {Object} value - Value that you need to set.\n * @param {Object} obj - Object to get the inner object value.\n * @return { [key: string]: Object; } | Object\n * @hidden\n */\n DataUtil.setValue = function (nameSpace, value, obj) {\n var keys = nameSpace.toString().split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? undefined : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n };\n /**\n * Sort the given data based on the field and comparer.\n *\n * @param {Object[]} ds - Defines the input data.\n * @param {string} field - Defines the field to be sorted.\n * @param {Function} comparer - Defines the comparer function used to sort the records.\n */\n DataUtil.sort = function (ds, field, comparer) {\n if (ds.length <= 1) {\n return ds;\n }\n var middle = parseInt((ds.length / 2).toString(), 10);\n var left = ds.slice(0, middle);\n var right = ds.slice(middle);\n left = this.sort(left, field, comparer);\n right = this.sort(right, field, comparer);\n return this.merge(left, right, field, comparer);\n };\n DataUtil.ignoreDiacritics = function (value) {\n if (typeof value !== 'string') {\n return value;\n }\n var result = value.split('');\n var newValue = result.map(function (temp) { return temp in DataUtil.diacritics ? DataUtil.diacritics[temp] : temp; });\n return newValue.join('');\n };\n DataUtil.merge = function (left, right, fieldName, comparer) {\n var result = [];\n var current;\n while (left.length > 0 || right.length > 0) {\n if (left.length > 0 && right.length > 0) {\n if (comparer) {\n current = comparer(this.getVal(left, 0, fieldName), this.getVal(right, 0, fieldName), left[0], right[0]) <= 0 ? left : right;\n }\n else {\n current = left[0][fieldName] < left[0][fieldName] ? left : right;\n }\n }\n else {\n current = left.length > 0 ? left : right;\n }\n result.push(current.shift());\n }\n return result;\n };\n DataUtil.getVal = function (array, index, field) {\n return field ? this.getObject(field, array[index]) : array[index];\n };\n DataUtil.toLowerCase = function (val) {\n return val ? typeof val === 'string' ? val.toLowerCase() : val.toString() : (val === 0 || val === false) ? val.toString() : '';\n };\n /**\n * To perform the filter operation with specified adaptor and returns the result.\n *\n * @param {Object} adaptor\n * @param {string} fnName\n * @param {Object} param1?\n * @param {Object} param2?\n * @param param1\n * @param param2\n * @hidden\n */\n DataUtil.callAdaptorFunction = function (adaptor, fnName, param1, param2) {\n if (fnName in adaptor) {\n var res = adaptor[fnName](param1, param2);\n if (!isNullOrUndefined(res)) {\n param1 = res;\n }\n }\n return param1;\n };\n DataUtil.getAddParams = function (adp, dm, query) {\n var req = {};\n DataUtil.callAdaptorFunction(adp, 'addParams', {\n dm: dm,\n query: query,\n params: query.params,\n reqParams: req\n });\n return req;\n };\n /**\n * Checks wheather the given input is a plain object or not.\n *\n * @param {Object|Object[]} obj\n */\n DataUtil.isPlainObject = function (obj) {\n return (!!obj) && (obj.constructor === Object);\n };\n /**\n * Returns true when the browser cross origin request.\n */\n DataUtil.isCors = function () {\n var xhr = null;\n var request = 'XMLHttpRequest';\n try {\n xhr = new window[request]();\n }\n catch (e) {\n // No exception handling\n }\n return !!xhr && ('withCredentials' in xhr);\n };\n /**\n * Generate random GUID value which will be prefixed with the given value.\n *\n * @param {string} prefix\n */\n DataUtil.getGuid = function (prefix) {\n var hexs = '0123456789abcdef';\n var rand;\n return (prefix || '') + '00000000-0000-4000-0000-000000000000'.replace(/0/g, function (val, i) {\n if ('crypto' in window && 'getRandomValues' in crypto) {\n var arr = new Uint8Array(1);\n window.crypto.getRandomValues(arr);\n rand = arr[0] % 16 | 0;\n }\n else {\n rand = Math.random() * 16 | 0;\n }\n return hexs[i === 19 ? rand & 0x3 | 0x8 : rand];\n });\n };\n /**\n * Checks wheather the given value is null or not.\n *\n * @param {string|Object} val\n * @returns boolean\n */\n DataUtil.isNull = function (val) {\n return val === undefined || val === null;\n };\n /**\n * To get the required items from collection of objects.\n *\n * @param {Object[]} array\n * @param {string} field\n * @param {Function} comparer\n * @returns Object\n * @hidden\n */\n DataUtil.getItemFromComparer = function (array, field, comparer) {\n var keyVal;\n var current;\n var key;\n var i = 0;\n var castRequired = typeof DataUtil.getVal(array, 0, field) === 'string';\n if (array.length) {\n while (isNullOrUndefined(keyVal) && i < array.length) {\n keyVal = DataUtil.getVal(array, i, field);\n key = array[i++];\n }\n }\n for (; i < array.length; i++) {\n current = DataUtil.getVal(array, i, field);\n if (isNullOrUndefined(current)) {\n continue;\n }\n if (castRequired) {\n keyVal = +keyVal;\n current = +current;\n }\n if (comparer(keyVal, current) > 0) {\n keyVal = current;\n key = array[i];\n }\n }\n return key;\n };\n /**\n * To get distinct values of Array or Array of Objects.\n *\n * @param {Object[]} json\n * @param {string} field\n * @param fieldName\n * @param {boolean} requiresCompleteRecord\n * @returns Object[]\n * * distinct array of objects is return when requiresCompleteRecord set as true.\n * @hidden\n */\n DataUtil.distinct = function (json, fieldName, requiresCompleteRecord) {\n requiresCompleteRecord = isNullOrUndefined(requiresCompleteRecord) ? false : requiresCompleteRecord;\n var result = [];\n var val;\n var tmp = {};\n json.forEach(function (data, index) {\n val = typeof (json[index]) === 'object' ? DataUtil.getVal(json, index, fieldName) : json[index];\n if (!(val in tmp)) {\n result.push(!requiresCompleteRecord ? val : json[index]);\n tmp[val] = 1;\n }\n });\n return result;\n };\n /**\n * Process the given records based on the datamanager string.\n *\n * @param {string} datamanager\n * @param dm\n * @param {Object[]} records\n */\n DataUtil.processData = function (dm, records) {\n var query = this.prepareQuery(dm);\n var sampledata = new DataManager(records);\n if (dm.requiresCounts) {\n query.requiresCount();\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n // tslint:disable-next-line:no-any\n var result = sampledata.executeLocal(query);\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var returnValue = {\n result: dm.requiresCounts ? result.result : result,\n count: result.count,\n aggregates: JSON.stringify(result.aggregates)\n };\n return dm.requiresCounts ? returnValue : result;\n };\n DataUtil.prepareQuery = function (dm) {\n var _this = this;\n var query = new Query();\n if (dm.select) {\n query.select(dm.select);\n }\n if (dm.where) {\n var where = DataUtil.parse.parseJson(dm.where);\n where.filter(function (pred) {\n if (isNullOrUndefined(pred.condition)) {\n query.where(pred.field, pred.operator, pred.value, pred.ignoreCase, pred.ignoreAccent);\n }\n else {\n var predicateList = [];\n if (pred.field) {\n predicateList.push(new Predicate(pred.field, pred.operator, pred.value, pred.ignoreCase, pred.ignoreAccent));\n }\n else {\n predicateList = predicateList.concat(_this.getPredicate(pred.predicates));\n }\n if (pred.condition === 'or') {\n query.where(Predicate.or(predicateList));\n }\n else if (pred.condition === 'and') {\n query.where(Predicate.and(predicateList));\n }\n }\n });\n }\n if (dm.search) {\n var search = DataUtil.parse.parseJson(dm.search);\n // tslint:disable-next-line:no-string-literal\n search.filter(function (e) { return query.search(e.key, e.fields, e['operator'], \n // tslint:disable-next-line:no-string-literal\n e['ignoreCase'], e['ignoreAccent']); });\n }\n if (dm.aggregates) {\n dm.aggregates.filter(function (e) { return query.aggregate(e.type, e.field); });\n }\n if (dm.sorted) {\n dm.sorted.filter(function (e) { return query.sortBy(e.name, e.direction); });\n }\n if (dm.skip) {\n query.skip(dm.skip);\n }\n if (dm.take) {\n query.take(dm.take);\n }\n if (dm.group) {\n dm.group.filter(function (grp) { return query.group(grp); });\n }\n return query;\n };\n DataUtil.getPredicate = function (pred) {\n var mainPred = [];\n for (var i = 0; i < pred.length; i++) {\n var e = pred[i];\n if (e.field) {\n mainPred.push(new Predicate(e.field, e.operator, e.value, e.ignoreCase, e.ignoreAccent));\n }\n else {\n var childPred = [];\n // tslint:disable-next-line:typedef\n var cpre = this.getPredicate(e.predicates);\n for (var _i = 0, _a = Object.keys(cpre); _i < _a.length; _i++) {\n var prop = _a[_i];\n childPred.push(cpre[prop]);\n }\n mainPred.push(e.condition === 'or' ? Predicate.or(childPred) : Predicate.and(childPred));\n }\n }\n return mainPred;\n };\n /**\n * Specifies the value which will be used to adjust the date value to server timezone.\n *\n * @default null\n */\n DataUtil.serverTimezoneOffset = null;\n /**\n * Species whether are not to be parsed with serverTimezoneOffset value.\n *\n * @hidden\n */\n DataUtil.timeZoneHandling = true;\n /**\n * Throw error with the given string as message.\n *\n * @param {string} er\n * @param error\n */\n DataUtil.throwError = function (error) {\n try {\n throw new Error(error);\n }\n catch (e) {\n // eslint-disable-next-line no-throw-literal\n throw e.message + '\\n' + e.stack;\n }\n };\n DataUtil.aggregates = {\n /**\n * Calculate sum of the given field in the data.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n sum: function (ds, field) {\n var result = 0;\n var val;\n var castRequired = typeof DataUtil.getVal(ds, 0, field) !== 'number';\n for (var i = 0; i < ds.length; i++) {\n val = DataUtil.getVal(ds, i, field);\n if (!isNaN(val) && val !== null) {\n if (castRequired) {\n val = +val;\n }\n result += val;\n }\n }\n return result;\n },\n /**\n * Calculate average value of the given field in the data.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n average: function (ds, field) {\n return DataUtil.aggregates.sum(ds, field) / ds.length;\n },\n /**\n * Returns the min value of the data based on the field.\n *\n * @param {Object[]} ds\n * @param {string|Function} field\n */\n min: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnAscending));\n },\n /**\n * Returns the max value of the data based on the field.\n *\n * @param {Object[]} ds\n * @param {string} field\n * @returns number\n */\n max: function (ds, field) {\n var comparer;\n if (typeof field === 'function') {\n comparer = field;\n field = null;\n }\n return DataUtil.getObject(field, DataUtil.getItemFromComparer(ds, field, comparer || DataUtil.fnDescending));\n },\n /**\n * Returns the total number of true value present in the data based on the given boolean field name.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n truecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', true, true)).length;\n },\n /**\n * Returns the total number of false value present in the data based on the given boolean field name.\n *\n * @param {Object[]} ds\n * @param {string} field\n */\n falsecount: function (ds, field) {\n return new DataManager(ds).executeLocal(new Query().where(field, 'equal', false, true)).length;\n },\n /**\n * Returns the length of the given data.\n *\n * @param {Object[]} ds\n * @param {string} field?\n * @param field\n * @returns number\n */\n count: function (ds, field) {\n return ds.length;\n }\n };\n /**\n * Specifies the Object with filter operators.\n */\n DataUtil.operatorSymbols = {\n '<': 'lessthan',\n '>': 'greaterthan',\n '<=': 'lessthanorequal',\n '>=': 'greaterthanorequal',\n '==': 'equal',\n '!=': 'notequal',\n '*=': 'contains',\n '$=': 'endswith',\n '^=': 'startswith'\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * * It will be used for date/number type filter query.\n */\n DataUtil.odBiOperator = {\n '<': ' lt ',\n '>': ' gt ',\n '<=': ' le ',\n '>=': ' ge ',\n '==': ' eq ',\n '!=': ' ne ',\n 'lessthan': ' lt ',\n 'lessthanorequal': ' le ',\n 'greaterthan': ' gt ',\n 'greaterthanorequal': ' ge ',\n 'equal': ' eq ',\n 'notequal': ' ne '\n };\n /**\n * Specifies the Object with filter operators which will be used for OData filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odUniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'substringof',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'substringof',\n 'doesnotendwith': 'not endswith',\n 'doesnotstartwith': 'not startswith',\n 'doesnotcontain': 'not substringof',\n 'wildcard': 'wildcard',\n 'like': 'like'\n };\n /**\n * Specifies the Object with filter operators which will be used for ODataV4 filter query generation.\n * It will be used for string type filter query.\n */\n DataUtil.odv4UniOperator = {\n '$=': 'endswith',\n '^=': 'startswith',\n '*=': 'contains',\n 'endswith': 'endswith',\n 'startswith': 'startswith',\n 'contains': 'contains',\n 'doesnotendwith': 'not endswith',\n 'doesnotstartwith': 'not startswith',\n 'doesnotcontain': 'not contains',\n 'wildcard': 'wildcard',\n 'like': 'like'\n };\n DataUtil.diacritics = {\n '\\u24B6': 'A',\n '\\uFF21': 'A',\n '\\u00C0': 'A',\n '\\u00C1': 'A',\n '\\u00C2': 'A',\n '\\u1EA6': 'A',\n '\\u1EA4': 'A',\n '\\u1EAA': 'A',\n '\\u1EA8': 'A',\n '\\u00C3': 'A',\n '\\u0100': 'A',\n '\\u0102': 'A',\n '\\u1EB0': 'A',\n '\\u1EAE': 'A',\n '\\u1EB4': 'A',\n '\\u1EB2': 'A',\n '\\u0226': 'A',\n '\\u01E0': 'A',\n '\\u00C4': 'A',\n '\\u01DE': 'A',\n '\\u1EA2': 'A',\n '\\u00C5': 'A',\n '\\u01FA': 'A',\n '\\u01CD': 'A',\n '\\u0200': 'A',\n '\\u0202': 'A',\n '\\u1EA0': 'A',\n '\\u1EAC': 'A',\n '\\u1EB6': 'A',\n '\\u1E00': 'A',\n '\\u0104': 'A',\n '\\u023A': 'A',\n '\\u2C6F': 'A',\n '\\uA732': 'AA',\n '\\u00C6': 'AE',\n '\\u01FC': 'AE',\n '\\u01E2': 'AE',\n '\\uA734': 'AO',\n '\\uA736': 'AU',\n '\\uA738': 'AV',\n '\\uA73A': 'AV',\n '\\uA73C': 'AY',\n '\\u24B7': 'B',\n '\\uFF22': 'B',\n '\\u1E02': 'B',\n '\\u1E04': 'B',\n '\\u1E06': 'B',\n '\\u0243': 'B',\n '\\u0182': 'B',\n '\\u0181': 'B',\n '\\u24B8': 'C',\n '\\uFF23': 'C',\n '\\u0106': 'C',\n '\\u0108': 'C',\n '\\u010A': 'C',\n '\\u010C': 'C',\n '\\u00C7': 'C',\n '\\u1E08': 'C',\n '\\u0187': 'C',\n '\\u023B': 'C',\n '\\uA73E': 'C',\n '\\u24B9': 'D',\n '\\uFF24': 'D',\n '\\u1E0A': 'D',\n '\\u010E': 'D',\n '\\u1E0C': 'D',\n '\\u1E10': 'D',\n '\\u1E12': 'D',\n '\\u1E0E': 'D',\n '\\u0110': 'D',\n '\\u018B': 'D',\n '\\u018A': 'D',\n '\\u0189': 'D',\n '\\uA779': 'D',\n '\\u01F1': 'DZ',\n '\\u01C4': 'DZ',\n '\\u01F2': 'Dz',\n '\\u01C5': 'Dz',\n '\\u24BA': 'E',\n '\\uFF25': 'E',\n '\\u00C8': 'E',\n '\\u00C9': 'E',\n '\\u00CA': 'E',\n '\\u1EC0': 'E',\n '\\u1EBE': 'E',\n '\\u1EC4': 'E',\n '\\u1EC2': 'E',\n '\\u1EBC': 'E',\n '\\u0112': 'E',\n '\\u1E14': 'E',\n '\\u1E16': 'E',\n '\\u0114': 'E',\n '\\u0116': 'E',\n '\\u00CB': 'E',\n '\\u1EBA': 'E',\n '\\u011A': 'E',\n '\\u0204': 'E',\n '\\u0206': 'E',\n '\\u1EB8': 'E',\n '\\u1EC6': 'E',\n '\\u0228': 'E',\n '\\u1E1C': 'E',\n '\\u0118': 'E',\n '\\u1E18': 'E',\n '\\u1E1A': 'E',\n '\\u0190': 'E',\n '\\u018E': 'E',\n '\\u24BB': 'F',\n '\\uFF26': 'F',\n '\\u1E1E': 'F',\n '\\u0191': 'F',\n '\\uA77B': 'F',\n '\\u24BC': 'G',\n '\\uFF27': 'G',\n '\\u01F4': 'G',\n '\\u011C': 'G',\n '\\u1E20': 'G',\n '\\u011E': 'G',\n '\\u0120': 'G',\n '\\u01E6': 'G',\n '\\u0122': 'G',\n '\\u01E4': 'G',\n '\\u0193': 'G',\n '\\uA7A0': 'G',\n '\\uA77D': 'G',\n '\\uA77E': 'G',\n '\\u24BD': 'H',\n '\\uFF28': 'H',\n '\\u0124': 'H',\n '\\u1E22': 'H',\n '\\u1E26': 'H',\n '\\u021E': 'H',\n '\\u1E24': 'H',\n '\\u1E28': 'H',\n '\\u1E2A': 'H',\n '\\u0126': 'H',\n '\\u2C67': 'H',\n '\\u2C75': 'H',\n '\\uA78D': 'H',\n '\\u24BE': 'I',\n '\\uFF29': 'I',\n '\\u00CC': 'I',\n '\\u00CD': 'I',\n '\\u00CE': 'I',\n '\\u0128': 'I',\n '\\u012A': 'I',\n '\\u012C': 'I',\n '\\u0130': 'I',\n '\\u00CF': 'I',\n '\\u1E2E': 'I',\n '\\u1EC8': 'I',\n '\\u01CF': 'I',\n '\\u0208': 'I',\n '\\u020A': 'I',\n '\\u1ECA': 'I',\n '\\u012E': 'I',\n '\\u1E2C': 'I',\n '\\u0197': 'I',\n '\\u24BF': 'J',\n '\\uFF2A': 'J',\n '\\u0134': 'J',\n '\\u0248': 'J',\n '\\u24C0': 'K',\n '\\uFF2B': 'K',\n '\\u1E30': 'K',\n '\\u01E8': 'K',\n '\\u1E32': 'K',\n '\\u0136': 'K',\n '\\u1E34': 'K',\n '\\u0198': 'K',\n '\\u2C69': 'K',\n '\\uA740': 'K',\n '\\uA742': 'K',\n '\\uA744': 'K',\n '\\uA7A2': 'K',\n '\\u24C1': 'L',\n '\\uFF2C': 'L',\n '\\u013F': 'L',\n '\\u0139': 'L',\n '\\u013D': 'L',\n '\\u1E36': 'L',\n '\\u1E38': 'L',\n '\\u013B': 'L',\n '\\u1E3C': 'L',\n '\\u1E3A': 'L',\n '\\u0141': 'L',\n '\\u023D': 'L',\n '\\u2C62': 'L',\n '\\u2C60': 'L',\n '\\uA748': 'L',\n '\\uA746': 'L',\n '\\uA780': 'L',\n '\\u01C7': 'LJ',\n '\\u01C8': 'Lj',\n '\\u24C2': 'M',\n '\\uFF2D': 'M',\n '\\u1E3E': 'M',\n '\\u1E40': 'M',\n '\\u1E42': 'M',\n '\\u2C6E': 'M',\n '\\u019C': 'M',\n '\\u24C3': 'N',\n '\\uFF2E': 'N',\n '\\u01F8': 'N',\n '\\u0143': 'N',\n '\\u00D1': 'N',\n '\\u1E44': 'N',\n '\\u0147': 'N',\n '\\u1E46': 'N',\n '\\u0145': 'N',\n '\\u1E4A': 'N',\n '\\u1E48': 'N',\n '\\u0220': 'N',\n '\\u019D': 'N',\n '\\uA790': 'N',\n '\\uA7A4': 'N',\n '\\u01CA': 'NJ',\n '\\u01CB': 'Nj',\n '\\u24C4': 'O',\n '\\uFF2F': 'O',\n '\\u00D2': 'O',\n '\\u00D3': 'O',\n '\\u00D4': 'O',\n '\\u1ED2': 'O',\n '\\u1ED0': 'O',\n '\\u1ED6': 'O',\n '\\u1ED4': 'O',\n '\\u00D5': 'O',\n '\\u1E4C': 'O',\n '\\u022C': 'O',\n '\\u1E4E': 'O',\n '\\u014C': 'O',\n '\\u1E50': 'O',\n '\\u1E52': 'O',\n '\\u014E': 'O',\n '\\u022E': 'O',\n '\\u0230': 'O',\n '\\u00D6': 'O',\n '\\u022A': 'O',\n '\\u1ECE': 'O',\n '\\u0150': 'O',\n '\\u01D1': 'O',\n '\\u020C': 'O',\n '\\u020E': 'O',\n '\\u01A0': 'O',\n '\\u1EDC': 'O',\n '\\u1EDA': 'O',\n '\\u1EE0': 'O',\n '\\u1EDE': 'O',\n '\\u1EE2': 'O',\n '\\u1ECC': 'O',\n '\\u1ED8': 'O',\n '\\u01EA': 'O',\n '\\u01EC': 'O',\n '\\u00D8': 'O',\n '\\u01FE': 'O',\n '\\u0186': 'O',\n '\\u019F': 'O',\n '\\uA74A': 'O',\n '\\uA74C': 'O',\n '\\u01A2': 'OI',\n '\\uA74E': 'OO',\n '\\u0222': 'OU',\n '\\u24C5': 'P',\n '\\uFF30': 'P',\n '\\u1E54': 'P',\n '\\u1E56': 'P',\n '\\u01A4': 'P',\n '\\u2C63': 'P',\n '\\uA750': 'P',\n '\\uA752': 'P',\n '\\uA754': 'P',\n '\\u24C6': 'Q',\n '\\uFF31': 'Q',\n '\\uA756': 'Q',\n '\\uA758': 'Q',\n '\\u024A': 'Q',\n '\\u24C7': 'R',\n '\\uFF32': 'R',\n '\\u0154': 'R',\n '\\u1E58': 'R',\n '\\u0158': 'R',\n '\\u0210': 'R',\n '\\u0212': 'R',\n '\\u1E5A': 'R',\n '\\u1E5C': 'R',\n '\\u0156': 'R',\n '\\u1E5E': 'R',\n '\\u024C': 'R',\n '\\u2C64': 'R',\n '\\uA75A': 'R',\n '\\uA7A6': 'R',\n '\\uA782': 'R',\n '\\u24C8': 'S',\n '\\uFF33': 'S',\n '\\u1E9E': 'S',\n '\\u015A': 'S',\n '\\u1E64': 'S',\n '\\u015C': 'S',\n '\\u1E60': 'S',\n '\\u0160': 'S',\n '\\u1E66': 'S',\n '\\u1E62': 'S',\n '\\u1E68': 'S',\n '\\u0218': 'S',\n '\\u015E': 'S',\n '\\u2C7E': 'S',\n '\\uA7A8': 'S',\n '\\uA784': 'S',\n '\\u24C9': 'T',\n '\\uFF34': 'T',\n '\\u1E6A': 'T',\n '\\u0164': 'T',\n '\\u1E6C': 'T',\n '\\u021A': 'T',\n '\\u0162': 'T',\n '\\u1E70': 'T',\n '\\u1E6E': 'T',\n '\\u0166': 'T',\n '\\u01AC': 'T',\n '\\u01AE': 'T',\n '\\u023E': 'T',\n '\\uA786': 'T',\n '\\uA728': 'TZ',\n '\\u24CA': 'U',\n '\\uFF35': 'U',\n '\\u00D9': 'U',\n '\\u00DA': 'U',\n '\\u00DB': 'U',\n '\\u0168': 'U',\n '\\u1E78': 'U',\n '\\u016A': 'U',\n '\\u1E7A': 'U',\n '\\u016C': 'U',\n '\\u00DC': 'U',\n '\\u01DB': 'U',\n '\\u01D7': 'U',\n '\\u01D5': 'U',\n '\\u01D9': 'U',\n '\\u1EE6': 'U',\n '\\u016E': 'U',\n '\\u0170': 'U',\n '\\u01D3': 'U',\n '\\u0214': 'U',\n '\\u0216': 'U',\n '\\u01AF': 'U',\n '\\u1EEA': 'U',\n '\\u1EE8': 'U',\n '\\u1EEE': 'U',\n '\\u1EEC': 'U',\n '\\u1EF0': 'U',\n '\\u1EE4': 'U',\n '\\u1E72': 'U',\n '\\u0172': 'U',\n '\\u1E76': 'U',\n '\\u1E74': 'U',\n '\\u0244': 'U',\n '\\u24CB': 'V',\n '\\uFF36': 'V',\n '\\u1E7C': 'V',\n '\\u1E7E': 'V',\n '\\u01B2': 'V',\n '\\uA75E': 'V',\n '\\u0245': 'V',\n '\\uA760': 'VY',\n '\\u24CC': 'W',\n '\\uFF37': 'W',\n '\\u1E80': 'W',\n '\\u1E82': 'W',\n '\\u0174': 'W',\n '\\u1E86': 'W',\n '\\u1E84': 'W',\n '\\u1E88': 'W',\n '\\u2C72': 'W',\n '\\u24CD': 'X',\n '\\uFF38': 'X',\n '\\u1E8A': 'X',\n '\\u1E8C': 'X',\n '\\u24CE': 'Y',\n '\\uFF39': 'Y',\n '\\u1EF2': 'Y',\n '\\u00DD': 'Y',\n '\\u0176': 'Y',\n '\\u1EF8': 'Y',\n '\\u0232': 'Y',\n '\\u1E8E': 'Y',\n '\\u0178': 'Y',\n '\\u1EF6': 'Y',\n '\\u1EF4': 'Y',\n '\\u01B3': 'Y',\n '\\u024E': 'Y',\n '\\u1EFE': 'Y',\n '\\u24CF': 'Z',\n '\\uFF3A': 'Z',\n '\\u0179': 'Z',\n '\\u1E90': 'Z',\n '\\u017B': 'Z',\n '\\u017D': 'Z',\n '\\u1E92': 'Z',\n '\\u1E94': 'Z',\n '\\u01B5': 'Z',\n '\\u0224': 'Z',\n '\\u2C7F': 'Z',\n '\\u2C6B': 'Z',\n '\\uA762': 'Z',\n '\\u24D0': 'a',\n '\\uFF41': 'a',\n '\\u1E9A': 'a',\n '\\u00E0': 'a',\n '\\u00E1': 'a',\n '\\u00E2': 'a',\n '\\u1EA7': 'a',\n '\\u1EA5': 'a',\n '\\u1EAB': 'a',\n '\\u1EA9': 'a',\n '\\u00E3': 'a',\n '\\u0101': 'a',\n '\\u0103': 'a',\n '\\u1EB1': 'a',\n '\\u1EAF': 'a',\n '\\u1EB5': 'a',\n '\\u1EB3': 'a',\n '\\u0227': 'a',\n '\\u01E1': 'a',\n '\\u00E4': 'a',\n '\\u01DF': 'a',\n '\\u1EA3': 'a',\n '\\u00E5': 'a',\n '\\u01FB': 'a',\n '\\u01CE': 'a',\n '\\u0201': 'a',\n '\\u0203': 'a',\n '\\u1EA1': 'a',\n '\\u1EAD': 'a',\n '\\u1EB7': 'a',\n '\\u1E01': 'a',\n '\\u0105': 'a',\n '\\u2C65': 'a',\n '\\u0250': 'a',\n '\\uA733': 'aa',\n '\\u00E6': 'ae',\n '\\u01FD': 'ae',\n '\\u01E3': 'ae',\n '\\uA735': 'ao',\n '\\uA737': 'au',\n '\\uA739': 'av',\n '\\uA73B': 'av',\n '\\uA73D': 'ay',\n '\\u24D1': 'b',\n '\\uFF42': 'b',\n '\\u1E03': 'b',\n '\\u1E05': 'b',\n '\\u1E07': 'b',\n '\\u0180': 'b',\n '\\u0183': 'b',\n '\\u0253': 'b',\n '\\u24D2': 'c',\n '\\uFF43': 'c',\n '\\u0107': 'c',\n '\\u0109': 'c',\n '\\u010B': 'c',\n '\\u010D': 'c',\n '\\u00E7': 'c',\n '\\u1E09': 'c',\n '\\u0188': 'c',\n '\\u023C': 'c',\n '\\uA73F': 'c',\n '\\u2184': 'c',\n '\\u24D3': 'd',\n '\\uFF44': 'd',\n '\\u1E0B': 'd',\n '\\u010F': 'd',\n '\\u1E0D': 'd',\n '\\u1E11': 'd',\n '\\u1E13': 'd',\n '\\u1E0F': 'd',\n '\\u0111': 'd',\n '\\u018C': 'd',\n '\\u0256': 'd',\n '\\u0257': 'd',\n '\\uA77A': 'd',\n '\\u01F3': 'dz',\n '\\u01C6': 'dz',\n '\\u24D4': 'e',\n '\\uFF45': 'e',\n '\\u00E8': 'e',\n '\\u00E9': 'e',\n '\\u00EA': 'e',\n '\\u1EC1': 'e',\n '\\u1EBF': 'e',\n '\\u1EC5': 'e',\n '\\u1EC3': 'e',\n '\\u1EBD': 'e',\n '\\u0113': 'e',\n '\\u1E15': 'e',\n '\\u1E17': 'e',\n '\\u0115': 'e',\n '\\u0117': 'e',\n '\\u00EB': 'e',\n '\\u1EBB': 'e',\n '\\u011B': 'e',\n '\\u0205': 'e',\n '\\u0207': 'e',\n '\\u1EB9': 'e',\n '\\u1EC7': 'e',\n '\\u0229': 'e',\n '\\u1E1D': 'e',\n '\\u0119': 'e',\n '\\u1E19': 'e',\n '\\u1E1B': 'e',\n '\\u0247': 'e',\n '\\u025B': 'e',\n '\\u01DD': 'e',\n '\\u24D5': 'f',\n '\\uFF46': 'f',\n '\\u1E1F': 'f',\n '\\u0192': 'f',\n '\\uA77C': 'f',\n '\\u24D6': 'g',\n '\\uFF47': 'g',\n '\\u01F5': 'g',\n '\\u011D': 'g',\n '\\u1E21': 'g',\n '\\u011F': 'g',\n '\\u0121': 'g',\n '\\u01E7': 'g',\n '\\u0123': 'g',\n '\\u01E5': 'g',\n '\\u0260': 'g',\n '\\uA7A1': 'g',\n '\\u1D79': 'g',\n '\\uA77F': 'g',\n '\\u24D7': 'h',\n '\\uFF48': 'h',\n '\\u0125': 'h',\n '\\u1E23': 'h',\n '\\u1E27': 'h',\n '\\u021F': 'h',\n '\\u1E25': 'h',\n '\\u1E29': 'h',\n '\\u1E2B': 'h',\n '\\u1E96': 'h',\n '\\u0127': 'h',\n '\\u2C68': 'h',\n '\\u2C76': 'h',\n '\\u0265': 'h',\n '\\u0195': 'hv',\n '\\u24D8': 'i',\n '\\uFF49': 'i',\n '\\u00EC': 'i',\n '\\u00ED': 'i',\n '\\u00EE': 'i',\n '\\u0129': 'i',\n '\\u012B': 'i',\n '\\u012D': 'i',\n '\\u00EF': 'i',\n '\\u1E2F': 'i',\n '\\u1EC9': 'i',\n '\\u01D0': 'i',\n '\\u0209': 'i',\n '\\u020B': 'i',\n '\\u1ECB': 'i',\n '\\u012F': 'i',\n '\\u1E2D': 'i',\n '\\u0268': 'i',\n '\\u0131': 'i',\n '\\u24D9': 'j',\n '\\uFF4A': 'j',\n '\\u0135': 'j',\n '\\u01F0': 'j',\n '\\u0249': 'j',\n '\\u24DA': 'k',\n '\\uFF4B': 'k',\n '\\u1E31': 'k',\n '\\u01E9': 'k',\n '\\u1E33': 'k',\n '\\u0137': 'k',\n '\\u1E35': 'k',\n '\\u0199': 'k',\n '\\u2C6A': 'k',\n '\\uA741': 'k',\n '\\uA743': 'k',\n '\\uA745': 'k',\n '\\uA7A3': 'k',\n '\\u24DB': 'l',\n '\\uFF4C': 'l',\n '\\u0140': 'l',\n '\\u013A': 'l',\n '\\u013E': 'l',\n '\\u1E37': 'l',\n '\\u1E39': 'l',\n '\\u013C': 'l',\n '\\u1E3D': 'l',\n '\\u1E3B': 'l',\n '\\u017F': 'l',\n '\\u0142': 'l',\n '\\u019A': 'l',\n '\\u026B': 'l',\n '\\u2C61': 'l',\n '\\uA749': 'l',\n '\\uA781': 'l',\n '\\uA747': 'l',\n '\\u01C9': 'lj',\n '\\u24DC': 'm',\n '\\uFF4D': 'm',\n '\\u1E3F': 'm',\n '\\u1E41': 'm',\n '\\u1E43': 'm',\n '\\u0271': 'm',\n '\\u026F': 'm',\n '\\u24DD': 'n',\n '\\uFF4E': 'n',\n '\\u01F9': 'n',\n '\\u0144': 'n',\n '\\u00F1': 'n',\n '\\u1E45': 'n',\n '\\u0148': 'n',\n '\\u1E47': 'n',\n '\\u0146': 'n',\n '\\u1E4B': 'n',\n '\\u1E49': 'n',\n '\\u019E': 'n',\n '\\u0272': 'n',\n '\\u0149': 'n',\n '\\uA791': 'n',\n '\\uA7A5': 'n',\n '\\u01CC': 'nj',\n '\\u24DE': 'o',\n '\\uFF4F': 'o',\n '\\u00F2': 'o',\n '\\u00F3': 'o',\n '\\u00F4': 'o',\n '\\u1ED3': 'o',\n '\\u1ED1': 'o',\n '\\u1ED7': 'o',\n '\\u1ED5': 'o',\n '\\u00F5': 'o',\n '\\u1E4D': 'o',\n '\\u022D': 'o',\n '\\u1E4F': 'o',\n '\\u014D': 'o',\n '\\u1E51': 'o',\n '\\u1E53': 'o',\n '\\u014F': 'o',\n '\\u022F': 'o',\n '\\u0231': 'o',\n '\\u00F6': 'o',\n '\\u022B': 'o',\n '\\u1ECF': 'o',\n '\\u0151': 'o',\n '\\u01D2': 'o',\n '\\u020D': 'o',\n '\\u020F': 'o',\n '\\u01A1': 'o',\n '\\u1EDD': 'o',\n '\\u1EDB': 'o',\n '\\u1EE1': 'o',\n '\\u1EDF': 'o',\n '\\u1EE3': 'o',\n '\\u1ECD': 'o',\n '\\u1ED9': 'o',\n '\\u01EB': 'o',\n '\\u01ED': 'o',\n '\\u00F8': 'o',\n '\\u01FF': 'o',\n '\\u0254': 'o',\n '\\uA74B': 'o',\n '\\uA74D': 'o',\n '\\u0275': 'o',\n '\\u01A3': 'oi',\n '\\u0223': 'ou',\n '\\uA74F': 'oo',\n '\\u24DF': 'p',\n '\\uFF50': 'p',\n '\\u1E55': 'p',\n '\\u1E57': 'p',\n '\\u01A5': 'p',\n '\\u1D7D': 'p',\n '\\uA751': 'p',\n '\\uA753': 'p',\n '\\uA755': 'p',\n '\\u24E0': 'q',\n '\\uFF51': 'q',\n '\\u024B': 'q',\n '\\uA757': 'q',\n '\\uA759': 'q',\n '\\u24E1': 'r',\n '\\uFF52': 'r',\n '\\u0155': 'r',\n '\\u1E59': 'r',\n '\\u0159': 'r',\n '\\u0211': 'r',\n '\\u0213': 'r',\n '\\u1E5B': 'r',\n '\\u1E5D': 'r',\n '\\u0157': 'r',\n '\\u1E5F': 'r',\n '\\u024D': 'r',\n '\\u027D': 'r',\n '\\uA75B': 'r',\n '\\uA7A7': 'r',\n '\\uA783': 'r',\n '\\u24E2': 's',\n '\\uFF53': 's',\n '\\u00DF': 's',\n '\\u015B': 's',\n '\\u1E65': 's',\n '\\u015D': 's',\n '\\u1E61': 's',\n '\\u0161': 's',\n '\\u1E67': 's',\n '\\u1E63': 's',\n '\\u1E69': 's',\n '\\u0219': 's',\n '\\u015F': 's',\n '\\u023F': 's',\n '\\uA7A9': 's',\n '\\uA785': 's',\n '\\u1E9B': 's',\n '\\u24E3': 't',\n '\\uFF54': 't',\n '\\u1E6B': 't',\n '\\u1E97': 't',\n '\\u0165': 't',\n '\\u1E6D': 't',\n '\\u021B': 't',\n '\\u0163': 't',\n '\\u1E71': 't',\n '\\u1E6F': 't',\n '\\u0167': 't',\n '\\u01AD': 't',\n '\\u0288': 't',\n '\\u2C66': 't',\n '\\uA787': 't',\n '\\uA729': 'tz',\n '\\u24E4': 'u',\n '\\uFF55': 'u',\n '\\u00F9': 'u',\n '\\u00FA': 'u',\n '\\u00FB': 'u',\n '\\u0169': 'u',\n '\\u1E79': 'u',\n '\\u016B': 'u',\n '\\u1E7B': 'u',\n '\\u016D': 'u',\n '\\u00FC': 'u',\n '\\u01DC': 'u',\n '\\u01D8': 'u',\n '\\u01D6': 'u',\n '\\u01DA': 'u',\n '\\u1EE7': 'u',\n '\\u016F': 'u',\n '\\u0171': 'u',\n '\\u01D4': 'u',\n '\\u0215': 'u',\n '\\u0217': 'u',\n '\\u01B0': 'u',\n '\\u1EEB': 'u',\n '\\u1EE9': 'u',\n '\\u1EEF': 'u',\n '\\u1EED': 'u',\n '\\u1EF1': 'u',\n '\\u1EE5': 'u',\n '\\u1E73': 'u',\n '\\u0173': 'u',\n '\\u1E77': 'u',\n '\\u1E75': 'u',\n '\\u0289': 'u',\n '\\u24E5': 'v',\n '\\uFF56': 'v',\n '\\u1E7D': 'v',\n '\\u1E7F': 'v',\n '\\u028B': 'v',\n '\\uA75F': 'v',\n '\\u028C': 'v',\n '\\uA761': 'vy',\n '\\u24E6': 'w',\n '\\uFF57': 'w',\n '\\u1E81': 'w',\n '\\u1E83': 'w',\n '\\u0175': 'w',\n '\\u1E87': 'w',\n '\\u1E85': 'w',\n '\\u1E98': 'w',\n '\\u1E89': 'w',\n '\\u2C73': 'w',\n '\\u24E7': 'x',\n '\\uFF58': 'x',\n '\\u1E8B': 'x',\n '\\u1E8D': 'x',\n '\\u24E8': 'y',\n '\\uFF59': 'y',\n '\\u1EF3': 'y',\n '\\u00FD': 'y',\n '\\u0177': 'y',\n '\\u1EF9': 'y',\n '\\u0233': 'y',\n '\\u1E8F': 'y',\n '\\u00FF': 'y',\n '\\u1EF7': 'y',\n '\\u1E99': 'y',\n '\\u1EF5': 'y',\n '\\u01B4': 'y',\n '\\u024F': 'y',\n '\\u1EFF': 'y',\n '\\u24E9': 'z',\n '\\uFF5A': 'z',\n '\\u017A': 'z',\n '\\u1E91': 'z',\n '\\u017C': 'z',\n '\\u017E': 'z',\n '\\u1E93': 'z',\n '\\u1E95': 'z',\n '\\u01B6': 'z',\n '\\u0225': 'z',\n '\\u0240': 'z',\n '\\u2C6C': 'z',\n '\\uA763': 'z',\n '\\u0386': '\\u0391',\n '\\u0388': '\\u0395',\n '\\u0389': '\\u0397',\n '\\u038A': '\\u0399',\n '\\u03AA': '\\u0399',\n '\\u038C': '\\u039F',\n '\\u038E': '\\u03A5',\n '\\u03AB': '\\u03A5',\n '\\u038F': '\\u03A9',\n '\\u03AC': '\\u03B1',\n '\\u03AD': '\\u03B5',\n '\\u03AE': '\\u03B7',\n '\\u03AF': '\\u03B9',\n '\\u03CA': '\\u03B9',\n '\\u0390': '\\u03B9',\n '\\u03CC': '\\u03BF',\n '\\u03CD': '\\u03C5',\n '\\u03CB': '\\u03C5',\n '\\u03B0': '\\u03C5',\n '\\u03C9': '\\u03C9',\n '\\u03C2': '\\u03C3'\n };\n DataUtil.fnOperators = {\n /**\n * Returns true when the actual input is equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param {boolean} ignoreAccent?\n * @param ignoreCase\n * @param ignoreAccent\n */\n equal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) === DataUtil.toLowerCase(expected);\n }\n return actual === expected;\n },\n /**\n * Returns true when the actual input is not equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n notequal: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n return !DataUtil.fnOperators.equal(actual, expected, ignoreCase);\n },\n /**\n * Returns true when the actual input is less than to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n lessthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) < DataUtil.toLowerCase(expected);\n }\n if (isNullOrUndefined(actual)) {\n actual = undefined;\n }\n return actual < expected;\n },\n /**\n * Returns true when the actual input is greater than to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n greaterthan: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) > DataUtil.toLowerCase(expected);\n }\n return actual > expected;\n },\n /**\n * Returns true when the actual input is less than or equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n lessthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) <= DataUtil.toLowerCase(expected);\n }\n if (isNullOrUndefined(actual)) {\n actual = undefined;\n }\n return actual <= expected;\n },\n /**\n * Returns true when the actual input is greater than or equal to the given input.\n *\n * @param {string|number|boolean} actual\n * @param {string|number|boolean} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n */\n greaterthanorequal: function (actual, expected, ignoreCase) {\n if (ignoreCase) {\n return DataUtil.toLowerCase(actual) >= DataUtil.toLowerCase(expected);\n }\n return actual >= expected;\n },\n /**\n * Returns true when the actual input contains the given string.\n *\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n contains: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) !== -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) !== -1;\n },\n /**\n * Returns true when the actual input not contains the given string.\n *\n * @param {string|number} actual\n * @param {string|number} expected\n * @param {boolean} ignoreCase?\n */\n doesnotcontain: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n DataUtil.toLowerCase(actual).indexOf(DataUtil.toLowerCase(expected)) === -1;\n }\n return !isNullOrUndefined(actual) && !isNullOrUndefined(expected) &&\n actual.toString().indexOf(expected) === -1;\n },\n /**\n * Returns true when the given input value is not null.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isnotnull: function (actual) {\n return actual !== null && actual !== undefined;\n },\n /**\n * Returns true when the given input value is null.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isnull: function (actual) {\n return actual === null || actual === undefined;\n },\n /**\n * Returns true when the actual input starts with the given string\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n startswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.startsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.startsWith(actual, expected);\n },\n /**\n * Returns true when the actual input not starts with the given string\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n doesnotstartwith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.notStartsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.notStartsWith(actual, expected);\n },\n /**\n * Returns true when the actual input like with the given string.\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n like: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.like(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.like(actual, expected);\n },\n /**\n * Returns true when the given input value is empty.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isempty: function (actual) {\n return actual === undefined || actual === '';\n },\n /**\n * Returns true when the given input value is not empty.\n *\n * @param {string|number} actual\n * @returns boolean\n */\n isnotempty: function (actual) {\n return actual !== undefined && actual !== '';\n },\n /**\n * Returns true when the actual input pattern(wildcard) matches with the given string.\n *\n * @param {string|Date} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n wildcard: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return (actual || typeof actual === 'boolean') && expected && typeof actual !== 'object' &&\n DataUtil.wildCard(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return (actual || typeof actual === 'boolean') && expected && DataUtil.wildCard(actual, expected);\n },\n /**\n * Returns true when the actual input ends with the given string.\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n * @param ignoreCase\n * @param ignoreAccent\n */\n endswith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.endsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.endsWith(actual, expected);\n },\n /**\n * Returns true when the actual input not ends with the given string.\n *\n * @param {string} actual\n * @param {string} expected\n * @param {boolean} ignoreCase?\n */\n doesnotendwith: function (actual, expected, ignoreCase, ignoreAccent) {\n if (ignoreAccent) {\n actual = DataUtil.ignoreDiacritics(actual);\n expected = DataUtil.ignoreDiacritics(expected);\n }\n if (ignoreCase) {\n return actual && expected && DataUtil.notEndsWith(DataUtil.toLowerCase(actual), DataUtil.toLowerCase(expected));\n }\n return actual && expected && DataUtil.notEndsWith(actual, expected);\n },\n /**\n * It will return the filter operator based on the filter symbol.\n *\n * @param {string} operator\n * @hidden\n */\n processSymbols: function (operator) {\n var fnName = DataUtil.operatorSymbols[operator];\n if (fnName) {\n var fn = DataUtil.fnOperators[fnName];\n return fn;\n }\n return DataUtil.throwError('Query - Process Operator : Invalid operator');\n },\n /**\n * It will return the valid filter operator based on the specified operators.\n *\n * @param {string} operator\n * @hidden\n */\n processOperator: function (operator) {\n var fn = DataUtil.fnOperators[operator];\n if (fn) {\n return fn;\n }\n return DataUtil.fnOperators.processSymbols(operator);\n }\n };\n /**\n * To perform the parse operation on JSON data, like convert to string from JSON or convert to JSON from string.\n */\n DataUtil.parse = {\n /**\n * Parse the given string to the plain JavaScript object.\n *\n * @param {string|Object|Object[]} jsonText\n */\n parseJson: function (jsonText) {\n if (typeof jsonText === 'string' && (/^[\\s]*\\[|^[\\s]*\\{(.)+:/g.test(jsonText) || jsonText.indexOf('\"') === -1)) {\n jsonText = JSON.parse(jsonText, DataUtil.parse.jsonReviver);\n }\n else if (jsonText instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(jsonText);\n }\n else if (typeof jsonText === 'object' && jsonText !== null) {\n DataUtil.parse.iterateAndReviveJson(jsonText);\n }\n return jsonText;\n },\n /**\n * It will perform on array of values.\n *\n * @param {string[]|Object[]} array\n * @hidden\n */\n iterateAndReviveArray: function (array) {\n for (var i = 0; i < array.length; i++) {\n if (typeof array[i] === 'object' && array[i] !== null) {\n DataUtil.parse.iterateAndReviveJson(array[i]);\n // eslint-disable-next-line no-useless-escape\n }\n else if (typeof array[i] === 'string' && (!/^[\\s]*\\[|^[\\s]*\\{(.)+:|\\\"/g.test(array[i]) ||\n array[i].toString().indexOf('\"') === -1)) {\n array[i] = DataUtil.parse.jsonReviver('', array[i]);\n }\n else {\n array[i] = DataUtil.parse.parseJson(array[i]);\n }\n }\n },\n /**\n * It will perform on JSON values\n *\n * @param {JSON} json\n * @hidden\n */\n iterateAndReviveJson: function (json) {\n var value;\n var keys = Object.keys(json);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var prop = keys_2[_i];\n if (DataUtil.startsWith(prop, '__')) {\n continue;\n }\n value = json[prop];\n if (typeof value === 'object') {\n if (value instanceof Array) {\n DataUtil.parse.iterateAndReviveArray(value);\n }\n else if (value) {\n DataUtil.parse.iterateAndReviveJson(value);\n }\n }\n else {\n json[prop] = DataUtil.parse.jsonReviver(json[prop], value);\n }\n }\n },\n /**\n * It will perform on JSON values\n *\n * @param {string} field\n * @param {string|Date} value\n * @hidden\n */\n jsonReviver: function (field, value) {\n if (typeof value === 'string') {\n // eslint-disable-next-line security/detect-unsafe-regex\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n var offSet = DataUtil.timeZoneHandling ? DataUtil.serverTimezoneOffset : null;\n if (ms) {\n return DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), offSet, true);\n // eslint-disable-next-line no-useless-escape, security/detect-unsafe-regex\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var isUTC = value.indexOf('Z') > -1 || value.indexOf('z') > -1;\n var arr = value.split(/[^0-9.]/);\n if (isUTC) {\n if (arr[5].indexOf('.') > -1) {\n var secondsMs = arr[5].split('.');\n arr[5] = secondsMs[0];\n arr[6] = new Date(value).getUTCMilliseconds().toString();\n }\n else {\n arr[6] = '00';\n }\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5] ? arr[5] : '00', 10), parseInt(arr[6], 10)), DataUtil.serverTimezoneOffset, false);\n }\n else {\n var utcFormat = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5] ? arr[5] : '00', 10));\n var hrs = parseInt(arr[6], 10);\n var mins = parseInt(arr[7], 10);\n if (isNaN(hrs) && isNaN(mins)) {\n return utcFormat;\n }\n if (value.indexOf('+') > -1) {\n utcFormat.setHours(utcFormat.getHours() - hrs, utcFormat.getMinutes() - mins);\n }\n else {\n utcFormat.setHours(utcFormat.getHours() + hrs, utcFormat.getMinutes() + mins);\n }\n value = DataUtil.dateParse\n .toTimeZone(utcFormat, DataUtil.serverTimezoneOffset, false);\n }\n if (DataUtil.serverTimezoneOffset == null) {\n value = DataUtil.dateParse.addSelfOffset(value);\n }\n }\n }\n return value;\n },\n /**\n * Check wheather the given value is JSON or not.\n *\n * @param {Object[]} jsonData\n */\n isJson: function (jsonData) {\n if (typeof jsonData[0] === 'string') {\n return jsonData;\n }\n return DataUtil.parse.parseJson(jsonData);\n },\n /**\n * Checks wheather the given value is GUID or not.\n *\n * @param {string} value\n */\n isGuid: function (value) {\n // eslint-disable-next-line security/detect-unsafe-regex\n var regex = /[A-Fa-f0-9]{8}(?:-[A-Fa-f0-9]{4}){3}-[A-Fa-f0-9]{12}/i;\n var match = regex.exec(value);\n return match != null;\n },\n /**\n * The method used to replace the value based on the type.\n *\n * @param {Object} value\n * @param {boolean} stringify\n * @hidden\n */\n replacer: function (value, stringify) {\n if (DataUtil.isPlainObject(value)) {\n return DataUtil.parse.jsonReplacer(value, stringify);\n }\n if (value instanceof Array) {\n return DataUtil.parse.arrayReplacer(value);\n }\n if (value instanceof Date) {\n return DataUtil.parse.jsonReplacer({ val: value }, stringify).val;\n }\n return value;\n },\n /**\n * It will replace the JSON value.\n *\n * @param {string} key\n * @param {Object} val\n * @param stringify\n * @hidden\n */\n jsonReplacer: function (val, stringify) {\n var value;\n var keys = Object.keys(val);\n for (var _i = 0, keys_3 = keys; _i < keys_3.length; _i++) {\n var prop = keys_3[_i];\n value = val[prop];\n if (!(value instanceof Date)) {\n continue;\n }\n var d = value;\n if (DataUtil.serverTimezoneOffset == null) {\n val[prop] = DataUtil.dateParse.toTimeZone(d, null).toJSON();\n }\n else {\n d = new Date(+d + DataUtil.serverTimezoneOffset * 3600000);\n val[prop] = DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(d), null).toJSON();\n }\n }\n return val;\n },\n /**\n * It will replace the Array of value.\n *\n * @param {string} key\n * @param {Object[]} val\n * @hidden\n */\n arrayReplacer: function (val) {\n for (var i = 0; i < val.length; i++) {\n if (DataUtil.isPlainObject(val[i])) {\n val[i] = DataUtil.parse.jsonReplacer(val[i]);\n }\n else if (val[i] instanceof Date) {\n val[i] = DataUtil.parse.jsonReplacer({ date: val[i] }).date;\n }\n }\n return val;\n },\n /**\n * It will replace the Date object with respective to UTC format value.\n *\n * @param {string} key\n * @param {any} value\n * @hidden\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n /* tslint:disable-next-line:no-any */\n jsonDateReplacer: function (key, value) {\n /* eslint-enable @typescript-eslint/no-explicit-any */\n if (key === 'value' && value) {\n if (typeof value === 'string') {\n // eslint-disable-next-line security/detect-unsafe-regex\n var ms = /^\\/Date\\(([+-]?[0-9]+)([+-][0-9]{4})?\\)\\/$/.exec(value);\n if (ms) {\n value = DataUtil.dateParse.toTimeZone(new Date(parseInt(ms[1], 10)), null, true);\n // eslint-disable-next-line no-useless-escape, security/detect-unsafe-regex\n }\n else if (/^(\\d{4}\\-\\d\\d\\-\\d\\d([tT][\\d:\\.]*){1})([zZ]|([+\\-])(\\d\\d):?(\\d\\d))?$/.test(value)) {\n var arr = value.split(/[^0-9]/);\n value = DataUtil.dateParse\n .toTimeZone(new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10), parseInt(arr[3], 10), parseInt(arr[4], 10), parseInt(arr[5], 10)), null, true);\n }\n }\n if (value instanceof Date) {\n value = DataUtil.dateParse.addSelfOffset(value);\n if (DataUtil.serverTimezoneOffset === null) {\n return DataUtil.dateParse.toTimeZone(DataUtil.dateParse.addSelfOffset(value), null).toJSON();\n }\n else {\n value = DataUtil.dateParse.toTimeZone(value, ((value.getTimezoneOffset() / 60)\n - DataUtil.serverTimezoneOffset), false);\n return value.toJSON();\n }\n }\n }\n return value;\n }\n };\n /**\n * @hidden\n */\n DataUtil.dateParse = {\n addSelfOffset: function (input) {\n return new Date(+input - (input.getTimezoneOffset() * 60000));\n },\n toUTC: function (input) {\n return new Date(+input + (input.getTimezoneOffset() * 60000));\n },\n toTimeZone: function (input, offset, utc) {\n if (offset === null) {\n return input;\n }\n var unix = utc ? DataUtil.dateParse.toUTC(input) : input;\n return new Date(+unix - (offset * 3600000));\n },\n toLocalTime: function (input) {\n var datefn = input;\n var timeZone = -datefn.getTimezoneOffset();\n var differenceString = timeZone >= 0 ? '+' : '-';\n var localtimefn = function (num) {\n var norm = Math.floor(Math.abs(num));\n return (norm < 10 ? '0' : '') + norm;\n };\n var val = datefn.getFullYear() + '-' + localtimefn(datefn.getMonth() + 1) + '-' + localtimefn(datefn.getDate()) +\n 'T' + localtimefn(datefn.getHours()) +\n ':' + localtimefn(datefn.getMinutes()) +\n ':' + localtimefn(datefn.getSeconds()) +\n differenceString + localtimefn(timeZone / 60) +\n ':' + localtimefn(timeZone % 60);\n return val;\n }\n };\n return DataUtil;\n}());\nexport { DataUtil };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, getUniqueID, formatUnit, NotifyPropertyChanges, Property, attributes, removeClass, addClass, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar cssClassName = {\n TEXTSHAPE: 'e-skeleton-text',\n CIRCLESHAPE: 'e-skeleton-circle',\n SQUARESHAPE: 'e-skeleton-square',\n RECTANGLESHAPE: 'e-skeleton-rectangle',\n WAVEEFFECT: 'e-shimmer-wave',\n PULSEEFFECT: 'e-shimmer-pulse',\n FADEEFFECT: 'e-shimmer-fade',\n VISIBLENONE: 'e-visible-none'\n};\n/**\n * Defines the shape of Skeleton.\n */\nexport var SkeletonType;\n(function (SkeletonType) {\n /**\n * Defines the skeleton shape as text.\n */\n SkeletonType[\"Text\"] = \"Text\";\n /**\n * Defines the skeleton shape as circle.\n */\n SkeletonType[\"Circle\"] = \"Circle\";\n /**\n * Defines the skeleton shape as square.\n */\n SkeletonType[\"Square\"] = \"Square\";\n /**\n * Defines the skeleton shape as rectangle.\n */\n SkeletonType[\"Rectangle\"] = \"Rectangle\";\n})(SkeletonType || (SkeletonType = {}));\n/**\n * Defines the animation effect of Skeleton.\n */\nexport var ShimmerEffect;\n(function (ShimmerEffect) {\n /**\n * Defines the animation as shimmer wave effect.\n */\n ShimmerEffect[\"Wave\"] = \"Wave\";\n /**\n * Defines the animation as fade effect.\n */\n ShimmerEffect[\"Fade\"] = \"Fade\";\n /**\n * Defines the animation as pulse effect.\n */\n ShimmerEffect[\"Pulse\"] = \"Pulse\";\n /**\n * Defines the animation as no effect.\n */\n ShimmerEffect[\"None\"] = \"None\";\n})(ShimmerEffect || (ShimmerEffect = {}));\n/**\n * The Shimmer is a placeholder that animates a shimmer effect to let users know that the page’s content is loading at the moment.\n * In other terms, it simulates the layout of page content while loading the actual content.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Skeleton = /** @class */ (function (_super) {\n __extends(Skeleton, _super);\n /**\n * Constructor for creating Skeleton component.\n *\n * @param {SkeletonModel} options - Defines the model of Skeleton class.\n * @param {HTMLElement} element - Defines the target HTML element.\n */\n function Skeleton(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Get component module name.\n *\n * @returns {string} - Module name\n * @private\n */\n Skeleton.prototype.getModuleName = function () {\n return 'skeleton';\n };\n Skeleton.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n Skeleton.prototype.preRender = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.updateCssClass();\n attributes(this.element, { role: 'alert', 'aria-busy': 'true', 'aria-live': 'polite', 'aria-label': this.label });\n };\n /**\n * Method for initialize the component rendering.\n *\n * @returns {void}\n * @private\n */\n Skeleton.prototype.render = function () {\n this.initialize();\n };\n Skeleton.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n case 'height':\n this.updateDimension();\n break;\n case 'shape':\n this.updateShape();\n break;\n case 'shimmerEffect':\n this.updateEffect();\n break;\n case 'visible':\n this.updateVisibility();\n break;\n case 'label':\n this.element.setAttribute('aria-label', this.label);\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.element], oldProp.cssClass.split(' '));\n }\n this.updateCssClass();\n break;\n }\n }\n };\n /**\n * Method to destroys the Skeleton component.\n *\n * @returns {void}\n */\n Skeleton.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n var attrs = ['role', 'aria-live', 'aria-busy', 'aria-label'];\n var cssClass = [];\n if (this.cssClass) {\n cssClass = cssClass.concat(this.cssClass.split(' '));\n }\n for (var i = 0; i < attrs.length; i++) {\n this.element.removeAttribute(attrs[parseInt(i.toString(), 10)]);\n }\n cssClass = cssClass.concat(this.element.classList.value.match(/(e-skeleton-[^\\s]+)/g) || []);\n cssClass = cssClass.concat(this.element.classList.value.match(/(e-shimmer-[^\\s]+)/g) || []);\n removeClass([this.element], cssClass);\n };\n Skeleton.prototype.initialize = function () {\n this.updateShape();\n this.updateEffect();\n this.updateVisibility();\n };\n Skeleton.prototype.updateShape = function () {\n if (!(isNullOrUndefined(this.shape))) {\n var shapeCss = cssClassName[this.shape.toUpperCase() + 'SHAPE'];\n var removeCss = (this.element.classList.value.match(/(e-skeleton-[^\\s]+)/g) || []);\n this.updateDimension();\n if (removeCss) {\n removeClass([this.element], removeCss);\n }\n addClass([this.element], [shapeCss]);\n }\n };\n Skeleton.prototype.updateDimension = function () {\n var width = (!this.width && (['Text', 'Rectangle'].indexOf(this.shape) > -1)) ? '100%' : formatUnit(this.width);\n var height = ['Circle', 'Square'].indexOf(this.shape) > -1 ? width : formatUnit(this.height);\n this.element.style.width = width;\n this.element.style.height = height;\n };\n Skeleton.prototype.updateEffect = function () {\n var removeCss = (this.element.classList.value.match(/(e-shimmer-[^\\s]+)/g) || []);\n if (removeCss) {\n removeClass([this.element], removeCss);\n }\n if (!(isNullOrUndefined(this.shimmerEffect))) {\n addClass([this.element], [cssClassName[this.shimmerEffect.toUpperCase() + 'EFFECT']]);\n }\n };\n Skeleton.prototype.updateVisibility = function () {\n this.element.classList[this.visible ? 'remove' : 'add'](cssClassName.VISIBLENONE);\n };\n Skeleton.prototype.updateCssClass = function () {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n __decorate([\n Property('')\n ], Skeleton.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Skeleton.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], Skeleton.prototype, \"visible\", void 0);\n __decorate([\n Property('Text')\n ], Skeleton.prototype, \"shape\", void 0);\n __decorate([\n Property('Wave')\n ], Skeleton.prototype, \"shimmerEffect\", void 0);\n __decorate([\n Property('Loading...')\n ], Skeleton.prototype, \"label\", void 0);\n __decorate([\n Property('')\n ], Skeleton.prototype, \"cssClass\", void 0);\n Skeleton = __decorate([\n NotifyPropertyChanges\n ], Skeleton);\n return Skeleton;\n}(Component));\nexport { Skeleton };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, addClass, append, Property, Event, L10n, compile } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, extend, removeClass, prepend, isNullOrUndefined, detach, getValue } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, rippleEffect, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { DataManager, Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { select, selectAll } from '@syncfusion/ej2-base';\nimport { Skeleton } from '@syncfusion/ej2-notifications';\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"value\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property()\n ], FieldSettings.prototype, \"disabled\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\nexport var dropDownBaseClasses = {\n root: 'e-dropdownbase',\n rtl: 'e-rtl',\n content: 'e-content',\n selected: 'e-active',\n hover: 'e-hover',\n noData: 'e-nodata',\n fixedHead: 'e-fixed-head',\n focus: 'e-item-focus',\n li: 'e-list-item',\n group: 'e-list-group-item',\n disabled: 'e-disabled',\n grouping: 'e-dd-group',\n virtualList: 'e-list-item e-virtual-list',\n};\nvar ITEMTEMPLATE_PROPERTY = 'ItemTemplate';\nvar DISPLAYTEMPLATE_PROPERTY = 'DisplayTemplate';\nvar SPINNERTEMPLATE_PROPERTY = 'SpinnerTemplate';\nvar VALUETEMPLATE_PROPERTY = 'ValueTemplate';\nvar GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar FOOTERTEMPLATE_PROPERTY = 'FooterTemplate';\nvar NORECORDSTEMPLATE_PROPERTY = 'NoRecordsTemplate';\nvar ACTIONFAILURETEMPLATE_PROPERTY = 'ActionFailureTemplate';\nvar HIDE_GROUPLIST = 'e-hide-group-header';\n/**\n * DropDownBase component will generate the list items based on given data and act as base class to drop-down related components\n */\nvar DropDownBase = /** @class */ (function (_super) {\n __extends(DropDownBase, _super);\n /**\n * * Constructor for DropDownBase class\n *\n * @param {DropDownBaseModel} options - Specifies the DropDownBase model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function DropDownBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.preventChange = false;\n _this.isPreventChange = false;\n _this.isDynamicDataChange = false;\n _this.addedNewItem = false;\n _this.isAddNewItemTemplate = false;\n _this.isRequesting = false;\n _this.isVirtualizationEnabled = false;\n _this.isCustomDataUpdated = false;\n _this.isAllowFiltering = false;\n _this.virtualizedItemsCount = 0;\n _this.isCheckBoxSelection = false;\n _this.totalItemCount = 0;\n _this.dataCount = 0;\n _this.remoteDataCount = -1;\n _this.isRemoteDataUpdated = false;\n _this.isIncrementalRequest = false;\n _this.itemCount = 30;\n _this.virtualListHeight = 0;\n _this.isVirtualScrolling = false;\n _this.isPreventScrollAction = false;\n _this.scrollPreStartIndex = 0;\n _this.isScrollActionTriggered = false;\n _this.previousStartIndex = 0;\n _this.isMouseScrollAction = false;\n _this.isKeyBoardAction = false;\n _this.isScrollChanged = false;\n _this.isUpwardScrolling = false;\n _this.startIndex = 0;\n _this.currentPageNumber = 0;\n _this.pageCount = 0;\n _this.isPreventKeyAction = false;\n _this.generatedDataObject = {};\n _this.skeletonCount = 32;\n _this.isVirtualTrackHeight = false;\n _this.virtualSelectAll = false;\n _this.incrementalQueryString = '';\n _this.incrementalEndIndex = 0;\n _this.incrementalStartIndex = 0;\n _this.incrementalPreQueryString = '';\n _this.isObjectCustomValue = false;\n _this.appendUncheckList = false;\n _this.getInitialData = false;\n _this.preventPopupOpen = true;\n _this.virtualSelectAllState = false;\n _this.CurrentEvent = null;\n _this.virtualListInfo = {\n currentPageNumber: null,\n direction: null,\n sentinelInfo: {},\n offsets: {},\n startIndex: 0,\n endIndex: 0,\n };\n _this.viewPortInfo = {\n currentPageNumber: null,\n direction: null,\n sentinelInfo: {},\n offsets: {},\n startIndex: 0,\n endIndex: 0,\n };\n _this.selectedValueInfo = {\n currentPageNumber: null,\n direction: null,\n sentinelInfo: {},\n offsets: {},\n startIndex: 0,\n endIndex: 0,\n };\n return _this;\n }\n DropDownBase.prototype.getPropObject = function (prop, newProp, oldProp) {\n var newProperty = new Object();\n var oldProperty = new Object();\n var propName = function (prop) {\n return prop;\n };\n newProperty[propName(prop)] = newProp[propName(prop)];\n oldProperty[propName(prop)] = oldProp[propName(prop)];\n var data = new Object();\n data.newProperty = newProperty;\n data.oldProperty = oldProperty;\n return data;\n };\n DropDownBase.prototype.getValueByText = function (text, ignoreCase, ignoreAccent) {\n var value = null;\n if (!isNullOrUndefined(this.listData)) {\n if (ignoreCase) {\n value = this.checkValueCase(text, true, ignoreAccent);\n }\n else {\n value = this.checkValueCase(text, false, ignoreAccent);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkValueCase = function (text, ignoreCase, ignoreAccent, isTextByValue) {\n var _this = this;\n var value = null;\n if (isTextByValue) {\n value = text;\n }\n var dataSource = this.listData;\n var fields = this.fields;\n var type = this.typeOfData(dataSource).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n var item = dataSource_1[_i];\n if (!isNullOrUndefined(item)) {\n if (ignoreAccent) {\n value = this.checkingAccent(String(item), text, ignoreCase);\n }\n else {\n if (ignoreCase) {\n if (this.checkIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase, isTextByValue);\n }\n }\n }\n }\n }\n }\n else {\n if (ignoreCase) {\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && _this.checkIgnoreCase(getValue(fields.text, item).toString(), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n else {\n if (isTextByValue) {\n var compareValue_1 = null;\n compareValue_1 = value;\n dataSource.filter(function (item) {\n var itemValue = getValue(fields.value, item);\n if (!isNullOrUndefined(itemValue) && !isNullOrUndefined(value) && itemValue.toString() === compareValue_1.toString()) {\n value = getValue(fields.text, item);\n }\n });\n }\n else {\n dataSource.filter(function (item) {\n if (_this.checkNonIgnoreCase(getValue(fields.text, item), text)) {\n value = getValue(fields.value, item);\n }\n });\n }\n }\n }\n return value;\n };\n DropDownBase.prototype.checkingAccent = function (item, text, ignoreCase) {\n var dataItem = DataUtil.ignoreDiacritics(String(item));\n var textItem = DataUtil.ignoreDiacritics(text.toString());\n var value = null;\n if (ignoreCase) {\n if (this.checkIgnoreCase(dataItem, textItem)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n else {\n if (this.checkNonIgnoreCase(String(item), text)) {\n value = this.getItemValue(String(item), text, ignoreCase);\n }\n }\n return value;\n };\n DropDownBase.prototype.checkIgnoreCase = function (item, text) {\n return String(item).toLowerCase() === text.toString().toLowerCase() ? true : false;\n };\n DropDownBase.prototype.checkNonIgnoreCase = function (item, text) {\n return String(item) === text.toString() ? true : false;\n };\n DropDownBase.prototype.getItemValue = function (dataItem, typedText, ignoreCase, isTextByValue) {\n var value = null;\n var dataSource = this.listData;\n var type = this.typeOfData(dataSource).typeof;\n if (isTextByValue) {\n value = dataItem.toString();\n }\n else {\n if (ignoreCase) {\n value = type === 'string' ? String(dataItem) : this.getFormattedValue(String(dataItem));\n }\n else {\n value = type === 'string' ? typedText : this.getFormattedValue(typedText);\n }\n }\n return value;\n };\n DropDownBase.prototype.templateCompiler = function (baseTemplate) {\n var checkTemplate = false;\n if (typeof baseTemplate !== 'function' && baseTemplate) {\n try {\n checkTemplate = (selectAll(baseTemplate, document).length) ? true : false;\n }\n catch (exception) {\n checkTemplate = false;\n }\n }\n return checkTemplate;\n };\n DropDownBase.prototype.l10nUpdate = function (actionFailure) {\n var ele = this.getModuleName() === 'listbox' ? this.ulElement : this.list;\n if ((!isNullOrUndefined(this.noRecordsTemplate) && this.noRecordsTemplate !== 'No records found') || this.actionFailureTemplate !== 'Request failed') {\n var template = actionFailure ? this.actionFailureTemplate : this.noRecordsTemplate;\n var compiledString = void 0;\n var templateId = actionFailure ? this.actionFailureTemplateId : this.noRecordsTemplateId;\n ele.innerHTML = '';\n var tempaltecheck = this.templateCompiler(template);\n if (typeof template !== 'function' && tempaltecheck) {\n compiledString = compile(select(template, document).innerHTML.trim());\n }\n else {\n compiledString = compile(template);\n }\n var templateName = actionFailure ? 'actionFailureTemplate' : 'noRecordsTemplate';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var noDataElement = void 0;\n if ((this.isReact) && typeof template === 'function') {\n noDataElement = compiledString({}, this, templateName, templateId, this.isStringTemplate, null);\n }\n else {\n noDataElement = compiledString({}, this, templateName, templateId, this.isStringTemplate, null, ele);\n }\n if (noDataElement && noDataElement.length > 0) {\n for (var i = 0; i < noDataElement.length; i++) {\n if (this.getModuleName() === 'listbox' && templateName === 'noRecordsTemplate') {\n if (noDataElement[i].nodeName === '#text') {\n var liElem = this.createElement('li');\n liElem.textContent = noDataElement[i].textContent;\n liElem.classList.add('e-list-nrt');\n liElem.setAttribute('role', 'option');\n ele.appendChild(liElem);\n }\n else {\n noDataElement[i].classList.add('e-list-nr-template');\n ele.appendChild(noDataElement[i]);\n }\n }\n else {\n if (noDataElement[i] instanceof HTMLElement || noDataElement[i] instanceof Text) {\n ele.appendChild(noDataElement[i]);\n }\n }\n }\n }\n this.renderReactTemplates();\n }\n else {\n var l10nLocale = { noRecordsTemplate: 'No records found', actionFailureTemplate: 'Request failed' };\n var componentLocale = new L10n(this.getLocaleName(), {}, this.locale);\n if (componentLocale.getConstant('actionFailureTemplate') !== '' || componentLocale.getConstant('noRecordsTemplate') !== '') {\n this.l10n = componentLocale;\n }\n else {\n this.l10n = new L10n(this.getModuleName() === 'listbox' ? 'listbox' :\n this.getModuleName() === 'mention' ? 'mention' : 'dropdowns', l10nLocale, this.locale);\n }\n var content = actionFailure ?\n this.l10n.getConstant('actionFailureTemplate') : this.l10n.getConstant('noRecordsTemplate');\n if (this.getModuleName() === 'listbox') {\n var liElem = this.createElement('li');\n liElem.textContent = content;\n ele.appendChild(liElem);\n liElem.classList.add('e-list-nrt');\n liElem.setAttribute('role', 'option');\n }\n else {\n if (!isNullOrUndefined(ele)) {\n ele.innerHTML = content;\n }\n }\n }\n };\n DropDownBase.prototype.checkAndResetCache = function () {\n if (this.isVirtualizationEnabled) {\n this.generatedDataObject = {};\n this.virtualItemStartIndex = this.virtualItemEndIndex = 0;\n this.viewPortInfo = {\n currentPageNumber: null,\n direction: null,\n sentinelInfo: {},\n offsets: {},\n startIndex: 0,\n endIndex: this.itemCount,\n };\n this.selectedValueInfo = null;\n }\n };\n DropDownBase.prototype.updateIncrementalInfo = function (startIndex, endIndex) {\n this.viewPortInfo.startIndex = startIndex;\n this.viewPortInfo.endIndex = endIndex;\n this.updateVirtualItemIndex();\n this.isIncrementalRequest = true;\n this.resetList(this.dataSource, this.fields, this.query);\n this.isIncrementalRequest = false;\n };\n DropDownBase.prototype.updateIncrementalView = function (startIndex, endIndex) {\n this.viewPortInfo.startIndex = startIndex;\n this.viewPortInfo.endIndex = endIndex;\n this.updateVirtualItemIndex();\n this.resetList(this.dataSource, this.fields, this.query);\n this.UpdateSkeleton();\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n };\n DropDownBase.prototype.updateVirtualItemIndex = function () {\n this.virtualItemStartIndex = this.viewPortInfo.startIndex;\n this.virtualItemEndIndex = this.viewPortInfo.endIndex;\n this.virtualListInfo = this.viewPortInfo;\n };\n DropDownBase.prototype.getFilteringSkeletonCount = function () {\n var currentSkeletonCount = this.skeletonCount;\n this.getSkeletonCount(true);\n this.skeletonCount = this.dataCount > this.itemCount * 2 ? this.skeletonCount : 0;\n var skeletonUpdated = true;\n if ((this.getModuleName() === 'autocomplete' || this.getModuleName() === 'multiselect') && (this.totalItemCount < (this.itemCount * 2))) {\n this.skeletonCount = 0;\n skeletonUpdated = false;\n }\n if (!this.list.classList.contains(dropDownBaseClasses.noData)) {\n var isSkeletonCountChange = currentSkeletonCount !== this.skeletonCount;\n if (currentSkeletonCount !== this.skeletonCount && skeletonUpdated) {\n this.UpdateSkeleton(true, Math.abs(currentSkeletonCount - this.skeletonCount));\n }\n else {\n this.UpdateSkeleton();\n }\n this.liCollections = this.list.querySelectorAll('.e-list-item');\n if ((this.list.getElementsByClassName('e-virtual-ddl').length > 0)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl')[0].style = this.GetVirtualTrackHeight();\n }\n else if (!this.list.querySelector('.e-virtual-ddl') && this.skeletonCount > 0 && this.list.querySelector('.e-dropdownbase')) {\n var virualElement = this.createElement('div', {\n id: this.element.id + '_popup', className: 'e-virtual-ddl', styles: this.GetVirtualTrackHeight()\n });\n this.list.querySelector('.e-dropdownbase').appendChild(virualElement);\n }\n if (this.list.getElementsByClassName('e-virtual-ddl-content').length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n }\n }\n };\n DropDownBase.prototype.getSkeletonCount = function (retainSkeleton) {\n this.virtualListHeight = this.listContainerHeight != null ? parseInt(this.listContainerHeight, 10) : this.virtualListHeight;\n var actualCount = this.virtualListHeight > 0 ? Math.floor(this.virtualListHeight / this.listItemHeight) : 0;\n this.skeletonCount = actualCount * 4 < this.itemCount ? this.itemCount : actualCount * 4;\n this.itemCount = retainSkeleton ? this.itemCount : this.skeletonCount;\n this.virtualItemCount = this.itemCount;\n this.skeletonCount = Math.floor(this.skeletonCount / 2);\n };\n DropDownBase.prototype.GetVirtualTrackHeight = function () {\n var height = this.totalItemCount === this.viewPortInfo.endIndex ? this.totalItemCount * this.listItemHeight - this.itemCount * this.listItemHeight : this.totalItemCount * this.listItemHeight;\n height = this.isVirtualTrackHeight ? 0 : height;\n var heightDimension = \"height: \" + (height - this.itemCount * this.listItemHeight) + \"px;\";\n if ((this.getModuleName() === 'autocomplete' || this.getModuleName() === 'multiselect') && this.skeletonCount === 0) {\n return \"height: 0px;\";\n }\n return heightDimension;\n };\n DropDownBase.prototype.getTransformValues = function () {\n var translateY = this.viewPortInfo.startIndex * this.listItemHeight;\n translateY = translateY - (this.skeletonCount * this.listItemHeight);\n translateY = ((this.viewPortInfo.startIndex === 0 && this.listData && this.listData.length === 0) || this.skeletonCount === 0) ? 0 : translateY;\n var styleText = \"transform: translate(0px, \" + translateY + \"px);\";\n return styleText;\n };\n DropDownBase.prototype.UpdateSkeleton = function (isSkeletonCountChange, skeletonCount) {\n var isContainSkeleton = this.list.querySelector('.e-virtual-ddl-content');\n var isContainVirtualList = this.list.querySelector('.e-virtual-list');\n if (isContainSkeleton && (!isContainVirtualList || isSkeletonCountChange) && this.isVirtualizationEnabled) {\n var totalSkeletonCount = isSkeletonCountChange ? skeletonCount : this.skeletonCount;\n for (var i = 0; i < totalSkeletonCount; i++) {\n var liElement = this.createElement('li', { className: dropDownBaseClasses.virtualList, styles: 'overflow: inherit' });\n if (this.isVirtualizationEnabled && this.itemTemplate) {\n liElement.style.height = this.listItemHeight + 'px';\n }\n var skeleton = new Skeleton({\n shape: \"Text\",\n height: \"10px\",\n width: \"95%\",\n cssClass: \"e-skeleton-text\",\n });\n skeleton.appendTo(this.createElement('div'));\n liElement.appendChild(skeleton.element);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n isContainSkeleton.firstChild && isContainSkeleton.firstChild.insertBefore(liElement, isContainSkeleton.firstChild.children[0]);\n }\n }\n };\n DropDownBase.prototype.getLocaleName = function () {\n return 'drop-down-base';\n };\n DropDownBase.prototype.getTextByValue = function (value) {\n var text = this.checkValueCase(value, false, false, true);\n return text;\n };\n DropDownBase.prototype.getFormattedValue = function (value) {\n if (this.listData && this.listData.length) {\n var item = void 0;\n if (this.properties.allowCustomValue && this.properties.value && this.properties.value instanceof Array && this.properties.value.length > 0) {\n item = this.typeOfData(this.properties.value);\n }\n else {\n item = this.typeOfData(this.listData);\n }\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'number'\n || item.typeof === 'number') {\n return parseFloat(value);\n }\n if (typeof getValue((this.fields.value ? this.fields.value : 'value'), item.item) === 'boolean'\n || item.typeof === 'boolean') {\n return ((value === 'true') || ('' + value === 'true'));\n }\n }\n return value;\n };\n /**\n * Sets RTL to dropdownbase wrapper\n *\n * @returns {void}\n */\n DropDownBase.prototype.setEnableRtl = function () {\n if (!isNullOrUndefined(this.enableRtlElements)) {\n if (this.list) {\n this.enableRtlElements.push(this.list);\n }\n if (this.enableRtl) {\n addClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n }\n else {\n removeClass(this.enableRtlElements, dropDownBaseClasses.rtl);\n }\n }\n };\n /**\n * Initialize the Component.\n *\n * @returns {void}\n */\n DropDownBase.prototype.initialize = function (e) {\n this.bindEvent = true;\n this.preventPopupOpen = true;\n this.actionFailureTemplateId = \"\" + this.element.id + ACTIONFAILURETEMPLATE_PROPERTY;\n if (this.element.tagName === 'UL') {\n var jsonElement = ListBase.createJsonFromElement(this.element);\n this.setProperties({ fields: { text: 'text', value: 'text' } }, true);\n this.resetList(jsonElement, this.fields);\n }\n else if (this.element.tagName === 'SELECT') {\n var dataSource = this.dataSource instanceof Array ? (this.dataSource.length > 0 ? true : false)\n : !isNullOrUndefined(this.dataSource) ? true : false;\n if (!dataSource) {\n this.renderItemsBySelect();\n }\n else if (this.isDynamicDataChange) {\n this.setListData(this.dataSource, this.fields, this.query);\n }\n }\n else {\n this.setListData(this.dataSource, this.fields, this.query, e);\n }\n };\n /**\n * Get the properties to be maintained in persisted state.\n *\n * @returns {string} Returns the persisted data of the component.\n */\n DropDownBase.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Sets the enabled state to DropDownBase.\n *\n * @param {string} value - Specifies the attribute values to add on the input element.\n * @returns {void}\n */\n DropDownBase.prototype.updateDataAttribute = function (value) {\n var invalidAttr = ['class', 'style', 'id', 'type', 'aria-expanded', 'aria-autocomplete', 'aria-readonly'];\n var attr = {};\n for (var a = 0; a < this.element.attributes.length; a++) {\n if (invalidAttr.indexOf(this.element.attributes[a].name) === -1 &&\n !(this.getModuleName() === 'dropdownlist' && this.element.attributes[a].name === 'readonly')) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n extend(attr, value, attr);\n this.setProperties({ htmlAttributes: attr }, true);\n };\n DropDownBase.prototype.renderItemsBySelect = function () {\n var element = this.element;\n var fields = { value: 'value', text: 'text' };\n var jsonElement = [];\n var group = element.querySelectorAll('select>optgroup');\n var option = element.querySelectorAll('select>option');\n this.getJSONfromOption(jsonElement, option, fields);\n if (group.length) {\n for (var i = 0; i < group.length; i++) {\n var item = group[i];\n var optionGroup = {};\n optionGroup[fields.text] = item.label;\n optionGroup.isHeader = true;\n var child = item.querySelectorAll('option');\n jsonElement.push(optionGroup);\n this.getJSONfromOption(jsonElement, child, fields);\n }\n element.querySelectorAll('select>option');\n }\n this.updateFields(fields.text, fields.value, this.fields.groupBy, this.fields.htmlAttributes, this.fields.iconCss, this.fields.disabled);\n this.resetList(jsonElement, fields);\n };\n DropDownBase.prototype.updateFields = function (text, value, groupBy, htmlAttributes, iconCss, disabled) {\n var field = {\n 'fields': {\n text: text,\n value: value,\n groupBy: !isNullOrUndefined(groupBy) ? groupBy : this.fields && this.fields.groupBy,\n htmlAttributes: !isNullOrUndefined(htmlAttributes) ? htmlAttributes : this.fields && this.fields.htmlAttributes,\n iconCss: !isNullOrUndefined(iconCss) ? iconCss : this.fields && this.fields.iconCss,\n disabled: !isNullOrUndefined(disabled) ? disabled : this.fields && this.fields.disabled\n }\n };\n this.setProperties(field, true);\n };\n DropDownBase.prototype.getJSONfromOption = function (items, options, fields) {\n for (var _i = 0, options_1 = options; _i < options_1.length; _i++) {\n var option = options_1[_i];\n var json = {};\n json[fields.text] = option.innerText;\n json[fields.value] = !isNullOrUndefined(option.getAttribute(fields.value)) ?\n option.getAttribute(fields.value) : option.innerText;\n items.push(json);\n }\n };\n /**\n * Execute before render the list items\n *\n * @private\n * @returns {void}\n */\n DropDownBase.prototype.preRender = function () {\n // there is no event handler\n this.scrollTimer = -1;\n this.enableRtlElements = [];\n this.isRequested = false;\n this.isDataFetched = false;\n this.itemTemplateId = \"\" + this.element.id + ITEMTEMPLATE_PROPERTY;\n this.displayTemplateId = \"\" + this.element.id + DISPLAYTEMPLATE_PROPERTY;\n this.spinnerTemplateId = \"\" + this.element.id + SPINNERTEMPLATE_PROPERTY;\n this.valueTemplateId = \"\" + this.element.id + VALUETEMPLATE_PROPERTY;\n this.groupTemplateId = \"\" + this.element.id + GROUPTEMPLATE_PROPERTY;\n this.headerTemplateId = \"\" + this.element.id + HEADERTEMPLATE_PROPERTY;\n this.footerTemplateId = \"\" + this.element.id + FOOTERTEMPLATE_PROPERTY;\n this.noRecordsTemplateId = \"\" + this.element.id + NORECORDSTEMPLATE_PROPERTY;\n };\n /**\n * Creates the list items of DropDownBase component.\n *\n * @param {Object[] | string[] | number[] | DataManager | boolean[]} dataSource - Specifies the data to generate the list.\n * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.\n * @param {Query} query - Accepts the external Query that execute along with data processing.\n * @returns {void}\n */\n DropDownBase.prototype.setListData = function (dataSource, fields, query, event) {\n var _this = this;\n fields = fields ? fields : this.fields;\n var ulElement;\n this.isActive = true;\n var eventArgs = { cancel: false, data: dataSource, query: query };\n this.isPreventChange = this.isAngular && this.preventChange ? true : this.isPreventChange;\n if (!this.isRequesting) {\n this.trigger('actionBegin', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.isRequesting = true;\n _this.showSpinner();\n if (dataSource instanceof DataManager) {\n _this.isRequested = true;\n var isWhereExist_1 = false;\n if (_this.isDataFetched) {\n _this.emptyDataRequest(fields);\n return;\n }\n eventArgs.data.executeQuery(_this.getQuery(eventArgs.query)).then(function (e) {\n _this.isPreventChange = _this.isAngular && _this.preventChange ? true : _this.isPreventChange;\n var isReOrder = true;\n if (!_this.virtualSelectAll) {\n var newQuery = _this.getQuery(eventArgs.query);\n for (var queryElements = 0; queryElements < newQuery.queries.length; queryElements++) {\n if (newQuery.queries[queryElements].fn === 'onWhere') {\n isWhereExist_1 = true;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (_this.isVirtualizationEnabled && (e.count != 0 && e.count < (_this.itemCount * 2))) {\n if (newQuery) {\n for (var queryElements = 0; queryElements < newQuery.queries.length; queryElements++) {\n if (newQuery.queries[queryElements].fn === 'onTake') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newQuery.queries[queryElements].e.nos = e.count;\n }\n if (_this.getModuleName() === 'multiselect' && (newQuery.queries[queryElements].e.condition == 'or' || newQuery.queries[queryElements].e.operator == 'equal')) {\n isReOrder = false;\n }\n }\n }\n }\n else {\n _this.isVirtualTrackHeight = false;\n if (newQuery) {\n for (var queryElements = 0; queryElements < newQuery.queries.length; queryElements++) {\n if (_this.getModuleName() === 'multiselect' && ((newQuery.queries[queryElements].e && newQuery.queries[queryElements].e.condition == 'or') || (newQuery.queries[queryElements].e && newQuery.queries[queryElements].e.operator == 'equal'))) {\n isReOrder = false;\n }\n }\n }\n }\n }\n if (isReOrder) {\n // eslint-disable @typescript-eslint/no-explicit-any\n _this.dataCount = _this.totalItemCount = e.count;\n }\n _this.trigger('actionComplete', e, function (e) {\n if (!e.cancel) {\n _this.isRequesting = false;\n var listItems = e.result;\n if (_this.isIncrementalRequest) {\n ulElement = _this.renderItems(listItems, fields);\n return;\n }\n if ((!_this.isVirtualizationEnabled && listItems.length === 0) || (_this.isVirtualizationEnabled && listItems.length === 0 && !isWhereExist_1)) {\n _this.isDataFetched = true;\n }\n if (!isWhereExist_1) {\n _this.remoteDataCount = e.count;\n }\n _this.dataCount = !_this.virtualSelectAll ? e.count : _this.dataCount;\n _this.totalItemCount = !_this.virtualSelectAll ? e.count : _this.totalItemCount;\n ulElement = _this.renderItems(listItems, fields);\n _this.appendUncheckList = false;\n _this.onActionComplete(ulElement, listItems, e);\n if (_this.groupTemplate) {\n _this.renderGroupTemplate(ulElement);\n }\n _this.isRequested = false;\n _this.bindChildItems(listItems, ulElement, fields, e);\n if (_this.getInitialData) {\n _this.setListData(dataSource, fields, query, event);\n _this.getInitialData = false;\n _this.preventPopupOpen = false;\n return;\n }\n if (_this.isVirtualizationEnabled && _this.setCurrentView) {\n _this.notify(\"setCurrentViewDataAsync\", {\n module: \"VirtualScroll\",\n });\n }\n if (_this.keyboardEvent != null) {\n _this.handleVirtualKeyboardActions(_this.keyboardEvent, _this.pageCount);\n }\n if (_this.isVirtualizationEnabled) {\n _this.getFilteringSkeletonCount();\n }\n if (_this.virtualSelectAll && _this.virtualSelectAllData) {\n _this.virtualSelectionAll(_this.virtualSelectAllState, _this.liCollections, _this.CurrentEvent);\n _this.virtualSelectAllState = false;\n _this.CurrentEvent = null;\n _this.virtualSelectAll = false;\n }\n }\n });\n }).catch(function (e) {\n _this.isRequested = false;\n _this.isRequesting = false;\n _this.onActionFailure(e);\n _this.hideSpinner();\n });\n }\n else {\n _this.isRequesting = false;\n var isReOrder = true;\n var listItems = void 0;\n if (_this.isVirtualizationEnabled && !_this.virtualGroupDataSource && _this.fields.groupBy) {\n var data = new DataManager(_this.dataSource).executeLocal(new Query().group(_this.fields.groupBy));\n _this.virtualGroupDataSource = data.records;\n }\n var dataManager = _this.isVirtualizationEnabled && _this.virtualGroupDataSource && !_this.isCustomDataUpdated ? new DataManager(_this.virtualGroupDataSource) : new DataManager(eventArgs.data);\n listItems = (_this.getQuery(eventArgs.query)).executeLocal(dataManager);\n if (!_this.virtualSelectAll) {\n var newQuery = _this.getQuery(eventArgs.query);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (_this.isVirtualizationEnabled && (listItems.count != 0 && listItems.count < (_this.itemCount * 2))) {\n if (newQuery) {\n for (var queryElements = 0; queryElements < newQuery.queries.length; queryElements++) {\n if (newQuery.queries[queryElements].fn === 'onTake') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n newQuery.queries[queryElements].e.nos = listItems.count;\n listItems = (newQuery).executeLocal(dataManager);\n }\n if (_this.getModuleName() === 'multiselect' && (newQuery.queries[queryElements].e.condition == 'or' || newQuery.queries[queryElements].e.operator == 'equal')) {\n isReOrder = false;\n }\n }\n if (isReOrder) {\n listItems = (newQuery).executeLocal(dataManager);\n _this.isVirtualTrackHeight = (!(_this.dataSource instanceof DataManager) && !_this.isCustomDataUpdated) ? true : false;\n }\n }\n }\n else {\n _this.isVirtualTrackHeight = false;\n if (newQuery) {\n for (var queryElements = 0; queryElements < newQuery.queries.length; queryElements++) {\n if (_this.getModuleName() === 'multiselect' && ((newQuery.queries[queryElements].e && newQuery.queries[queryElements].e.condition == 'or') || (newQuery.queries[queryElements].e && newQuery.queries[queryElements].e.operator == 'equal'))) {\n isReOrder = false;\n }\n }\n }\n }\n }\n if (isReOrder && (!(_this.dataSource instanceof DataManager) && !_this.isCustomDataUpdated) && !_this.virtualSelectAll) {\n // eslint-disable @typescript-eslint/no-explicit-any\n _this.dataCount = _this.totalItemCount = _this.virtualSelectAll ? listItems.length : listItems.count;\n }\n listItems = _this.isVirtualizationEnabled ? listItems.result : listItems;\n // eslint-enable @typescript-eslint/no-explicit-any\n var localDataArgs = { cancel: false, result: listItems };\n _this.isPreventChange = _this.isAngular && _this.preventChange ? true : _this.isPreventChange;\n _this.trigger('actionComplete', localDataArgs, function (localDataArgs) {\n if (_this.isIncrementalRequest) {\n ulElement = _this.renderItems(localDataArgs.result, fields);\n return;\n }\n if (!localDataArgs.cancel) {\n ulElement = _this.renderItems(localDataArgs.result, fields);\n _this.onActionComplete(ulElement, localDataArgs.result, event);\n if (_this.groupTemplate) {\n _this.renderGroupTemplate(ulElement);\n }\n _this.bindChildItems(localDataArgs.result, ulElement, fields);\n if (_this.getInitialData) {\n _this.getInitialData = false;\n _this.preventPopupOpen = false;\n return;\n }\n setTimeout(function () {\n if (_this.getModuleName() === 'multiselect' && _this.itemTemplate != null && (ulElement.childElementCount > 0 && (ulElement.children[0].childElementCount > 0 || (_this.fields.groupBy && ulElement.children[1] && ulElement.children[1].childElementCount > 0)))) {\n _this.updateDataList();\n }\n });\n }\n });\n }\n }\n });\n }\n };\n DropDownBase.prototype.handleVirtualKeyboardActions = function (e, pageCount) {\n // Used this method in component side.\n };\n DropDownBase.prototype.updatePopupState = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.virtualSelectionAll = function (state, li, event) {\n // Used this method in component side.\n };\n DropDownBase.prototype.updateRemoteData = function () {\n this.setListData(this.dataSource, this.fields, this.query);\n };\n DropDownBase.prototype.bindChildItems = function (listItems, ulElement, fields, e) {\n var _this = this;\n if (listItems.length >= 100 && this.getModuleName() === 'autocomplete') {\n setTimeout(function () {\n var childNode = _this.remainingItems(_this.sortedData, fields);\n append(childNode, ulElement);\n _this.liCollections = _this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n _this.updateListValues();\n _this.raiseDataBound(listItems, e);\n }, 0);\n }\n else {\n this.raiseDataBound(listItems, e);\n }\n };\n DropDownBase.prototype.isObjectInArray = function (objectToFind, array) {\n return array.some(function (item) {\n return Object.keys(objectToFind).every(function (key) {\n return item.hasOwnProperty(key) && item[key] === objectToFind[key];\n });\n });\n };\n DropDownBase.prototype.updateListValues = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.findListElement = function (list, findNode, attribute, value) {\n var liElement = null;\n if (list) {\n var listArr = [].slice.call(list.querySelectorAll(findNode));\n for (var index = 0; index < listArr.length; index++) {\n if (listArr[index].getAttribute(attribute) === (value + '')) {\n liElement = listArr[index];\n break;\n }\n }\n }\n return liElement;\n };\n DropDownBase.prototype.raiseDataBound = function (listItems, e) {\n this.hideSpinner();\n var dataBoundEventArgs = {\n items: listItems,\n e: e\n };\n this.trigger('dataBound', dataBoundEventArgs);\n };\n DropDownBase.prototype.remainingItems = function (dataSource, fields) {\n var spliceData = new DataManager(dataSource).executeLocal(new Query().skip(100));\n if (this.itemTemplate) {\n var listElements = this.templateListItem(spliceData, fields);\n return [].slice.call(listElements.childNodes);\n }\n var type = this.typeOfData(spliceData).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n return ListBase.createListItemFromArray(this.createElement, spliceData, true, this.listOption(spliceData, fields), this);\n }\n return ListBase.createListItemFromJson(this.createElement, spliceData, this.listOption(spliceData, fields), 1, true, this);\n };\n DropDownBase.prototype.emptyDataRequest = function (fields) {\n var listItems = [];\n this.onActionComplete(this.renderItems(listItems, fields), listItems);\n this.isRequested = false;\n this.isRequesting = false;\n this.hideSpinner();\n };\n DropDownBase.prototype.showSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.hideSpinner = function () {\n // Used this method in component side.\n };\n DropDownBase.prototype.onActionFailure = function (e) {\n this.liCollections = [];\n this.trigger('actionFailure', e);\n this.l10nUpdate(true);\n if (!isNullOrUndefined(this.list)) {\n addClass([this.list], dropDownBaseClasses.noData);\n }\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n DropDownBase.prototype.onActionComplete = function (ulElement, list, e) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n this.listData = list;\n if (this.isVirtualizationEnabled && !this.isCustomDataUpdated && !this.virtualSelectAll) {\n this.notify(\"setGeneratedData\", {\n module: \"VirtualScroll\",\n });\n }\n if (this.getModuleName() !== 'listbox') {\n ulElement.setAttribute('tabindex', '0');\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate(['itemTemplate', 'groupTemplate', 'actionFailureTemplate', 'noRecordsTemplate']);\n }\n if (!this.isVirtualizationEnabled) {\n this.fixedHeaderElement = isNullOrUndefined(this.fixedHeaderElement) ? this.fixedHeaderElement : null;\n }\n if (this.getModuleName() === 'multiselect' && this.properties.allowCustomValue && this.fields.groupBy) {\n for (var i = 0; i < ulElement.childElementCount; i++) {\n if (ulElement.children[i].classList.contains('e-list-group-item')) {\n if (isNullOrUndefined(ulElement.children[i].innerHTML) || ulElement.children[i].innerHTML == \"\") {\n addClass([ulElement.children[i]], HIDE_GROUPLIST);\n }\n }\n if (ulElement.children[0].classList.contains('e-hide-group-header')) {\n setStyleAttribute(ulElement.children[1], { zIndex: 11 });\n }\n }\n }\n if (!isNullOrUndefined(this.list)) {\n if (!this.isVirtualizationEnabled) {\n this.list.innerHTML = '';\n this.list.appendChild(ulElement);\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n this.postRender(this.list, list, this.bindEvent);\n }\n }\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n DropDownBase.prototype.postRender = function (listElement, list, bindEvent) {\n if (this.fields.disabled) {\n var liCollections = listElement.querySelectorAll('.' + dropDownBaseClasses.li);\n for (var index = 0; index < liCollections.length; index++) {\n if (JSON.parse(JSON.stringify(this.listData[index]))[this.fields.disabled]) {\n this.disableListItem(liCollections[index]);\n }\n }\n }\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var focusItem = this.fields.disabled ? listElement.querySelector('.' + dropDownBaseClasses.li + ':not(.e-disabled') : listElement.querySelector('.' + dropDownBaseClasses.li);\n var selectedItem = listElement.querySelector('.' + dropDownBaseClasses.selected);\n if (focusItem && !selectedItem) {\n focusItem.classList.add(dropDownBaseClasses.focus);\n }\n if (list.length <= 0) {\n this.l10nUpdate();\n addClass([listElement], dropDownBaseClasses.noData);\n }\n else {\n listElement.classList.remove(dropDownBaseClasses.noData);\n }\n };\n /**\n * Get the query to do the data operation before list item generation.\n *\n * @param {Query} query - Accepts the external Query that execute along with data processing.\n * @returns {Query} Returns the query to do the data query operation.\n */\n DropDownBase.prototype.getQuery = function (query) {\n return query ? query : this.query ? this.query : new Query();\n };\n DropDownBase.prototype.updateVirtualizationProperties = function (itemCount, filtering, isCheckbox) {\n this.isVirtualizationEnabled = true;\n this.virtualizedItemsCount = itemCount;\n this.isAllowFiltering = filtering;\n this.isCheckBoxSelection = isCheckbox;\n };\n /**\n * To render the template content for group header element.\n *\n * @param {HTMLElement} listEle - Specifies the group list elements.\n * @returns {void}\n */\n DropDownBase.prototype.renderGroupTemplate = function (listEle) {\n if (this.fields.groupBy !== null && this.dataSource || this.element.querySelector('.' + dropDownBaseClasses.group)) {\n var dataSource = this.dataSource;\n var option = { groupTemplateID: this.groupTemplateId, isStringTemplate: this.isStringTemplate };\n var headerItems = listEle.querySelectorAll('.' + dropDownBaseClasses.group);\n var groupcheck = this.templateCompiler(this.groupTemplate);\n if (typeof this.groupTemplate !== 'function' && groupcheck) {\n var groupValue = select(this.groupTemplate, document).innerHTML.trim();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var tempHeaders = ListBase.renderGroupTemplate(groupValue, dataSource, this.fields.properties, headerItems, option, this);\n //EJ2-55168- Group checkbox is not working with group template\n if (this.isGroupChecking) {\n for (var i = 0; i < tempHeaders.length; i++) {\n this.notify('addItem', { module: 'CheckBoxSelection', item: tempHeaders[i] });\n }\n }\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var tempHeaders = ListBase.renderGroupTemplate(this.groupTemplate, dataSource, this.fields.properties, headerItems, option, this);\n //EJ2-55168- Group checkbox is not working with group template\n if (this.isGroupChecking) {\n for (var i = 0; i < tempHeaders.length; i++) {\n this.notify('addItem', { module: 'CheckBoxSelection', item: tempHeaders[i] });\n }\n }\n }\n this.renderReactTemplates();\n }\n };\n /**\n * To create the ul li list items\n *\n * @param {object []} dataSource - Specifies the data to generate the list.\n * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.\n * @returns {HTMLElement} Return the ul li list items.\n */\n DropDownBase.prototype.createListItems = function (dataSource, fields) {\n if (dataSource) {\n if (fields.groupBy || this.element.querySelector('optgroup')) {\n if (fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n addClass([this.list], dropDownBaseClasses.grouping);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n var options = this.listOption(dataSource, fields);\n var spliceData = (dataSource.length > 100) ?\n new DataManager(dataSource).executeLocal(new Query().take(100))\n : dataSource;\n this.sortedData = dataSource;\n return ListBase.createList(this.createElement, (this.getModuleName() === 'autocomplete') ? spliceData : dataSource, options, true, this);\n }\n return null;\n };\n DropDownBase.prototype.listOption = function (dataSource, fields) {\n var iconCss = isNullOrUndefined(fields.iconCss) ? false : true;\n var fieldValues = !isNullOrUndefined(fields.properties) ?\n fields.properties : fields;\n var options = (fields.text !== null || fields.value !== null) ? {\n fields: fieldValues,\n showIcon: iconCss, ariaAttributes: { groupItemRole: 'presentation' }\n } : { fields: { value: 'text' } };\n return extend({}, options, fields, true);\n };\n DropDownBase.prototype.setFloatingHeader = function (e) {\n if (!isNullOrUndefined(this.list) && !this.list.classList.contains(dropDownBaseClasses.noData)) {\n if (isNullOrUndefined(this.fixedHeaderElement)) {\n this.fixedHeaderElement = this.createElement('div', { className: dropDownBaseClasses.fixedHead });\n if (!isNullOrUndefined(this.list) && !this.list.querySelector('li').classList.contains(dropDownBaseClasses.group)) {\n this.fixedHeaderElement.style.display = 'none';\n }\n if (!isNullOrUndefined(this.fixedHeaderElement) && !isNullOrUndefined(this.list)) {\n prepend([this.fixedHeaderElement], this.list);\n }\n this.setFixedHeader();\n }\n if (!isNullOrUndefined(this.fixedHeaderElement) && this.fixedHeaderElement.style.zIndex === '0') {\n this.setFixedHeader();\n }\n this.scrollStop(e);\n }\n };\n DropDownBase.prototype.scrollStop = function (e, isDownkey) {\n var target = !isNullOrUndefined(e) ? e.target : this.list;\n var liHeight = parseInt(getComputedStyle(this.getValidLi(), null).getPropertyValue('height'), 10);\n var topIndex = Math.round(target.scrollTop / liHeight);\n var liCollections = this.list.querySelectorAll('li' + ':not(.e-hide-listitem)');\n var virtualListCount = this.list.querySelectorAll('.e-virtual-list').length;\n var count = 0;\n var isCount = false;\n for (var i = topIndex; i > -1; i--) {\n var index = this.isVirtualizationEnabled ? i + virtualListCount : i;\n if (this.isVirtualizationEnabled) {\n if (isCount) {\n count++;\n }\n if (this.fixedHeaderElement && this.updateGroupHeader(index, liCollections, target)) {\n break;\n }\n if (isDownkey) {\n if ((!isNullOrUndefined(liCollections[index]) && liCollections[index].classList.contains(dropDownBaseClasses.selected) && this.getModuleName() !== 'autocomplete') || (!isNullOrUndefined(liCollections[index]) && liCollections[index].classList.contains(dropDownBaseClasses.focus) && this.getModuleName() === 'autocomplete')) {\n count++;\n isCount = true;\n }\n }\n }\n else {\n if (this.updateGroupHeader(index, liCollections, target)) {\n break;\n }\n }\n }\n };\n DropDownBase.prototype.getPageCount = function (returnExactCount) {\n var liHeight = this.list.classList.contains(dropDownBaseClasses.noData) ? null :\n getComputedStyle(this.getItems()[0], null).getPropertyValue('height');\n var pageCount = Math.round(this.list.getBoundingClientRect().height / parseInt(liHeight, 10));\n return returnExactCount ? pageCount : Math.round(pageCount);\n };\n DropDownBase.prototype.updateGroupHeader = function (index, liCollections, target) {\n if (!isNullOrUndefined(liCollections[index]) && liCollections[index].classList.contains(dropDownBaseClasses.group)) {\n this.updateGroupFixedHeader(liCollections[index], target);\n return true;\n }\n else {\n this.fixedHeaderElement.style.display = 'none';\n this.fixedHeaderElement.style.top = 'none';\n return false;\n }\n };\n DropDownBase.prototype.updateGroupFixedHeader = function (element, target) {\n if (this.fixedHeaderElement) {\n if (!isNullOrUndefined(element.innerHTML)) {\n this.fixedHeaderElement.innerHTML = element.innerHTML;\n }\n this.fixedHeaderElement.style.position = 'fixed';\n this.fixedHeaderElement.style.top = (this.list.parentElement.offsetTop + this.list.offsetTop) - window.scrollY + 'px';\n this.fixedHeaderElement.style.display = 'block';\n }\n };\n DropDownBase.prototype.getValidLi = function () {\n if (this.isVirtualizationEnabled) {\n return this.liCollections[0].classList.contains('e-virtual-list') ? this.liCollections[this.skeletonCount] : this.liCollections[0];\n }\n return this.liCollections[0];\n };\n /**\n * To render the list items\n *\n * @param {object[]} listData - Specifies the list of array of data.\n * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.\n * @returns {HTMLElement} Return the list items.\n */\n DropDownBase.prototype.renderItems = function (listData, fields, isCheckBoxUpdate) {\n var ulElement;\n if (this.itemTemplate && listData) {\n var dataSource = listData;\n if (dataSource && fields.groupBy) {\n if (this.sortOrder !== 'None') {\n dataSource = this.getSortedDataSource(dataSource);\n }\n dataSource = ListBase.groupDataSource(dataSource, fields.properties, this.sortOrder);\n }\n else {\n dataSource = this.getSortedDataSource(dataSource);\n }\n this.sortedData = dataSource;\n var spliceData = (dataSource.length > 100) ?\n new DataManager(dataSource).executeLocal(new Query().take(100))\n : dataSource;\n ulElement = this.templateListItem((this.getModuleName() === 'autocomplete') ? spliceData : dataSource, fields);\n if (this.isVirtualizationEnabled) {\n var oldUlElement = this.list.querySelector('.e-list-parent');\n var virtualUlElement = this.list.querySelector('.e-virtual-ddl-content');\n if ((listData.length >= this.virtualizedItemsCount && oldUlElement && virtualUlElement) || (oldUlElement && virtualUlElement && this.isAllowFiltering) || (oldUlElement && virtualUlElement && this.getModuleName() === 'autocomplete')) {\n virtualUlElement.replaceChild(ulElement, oldUlElement);\n var reOrderList = this.list.querySelectorAll('.e-reorder');\n if (this.list.querySelector('.e-virtual-ddl-content') && reOrderList && reOrderList.length > 0 && !isCheckBoxUpdate) {\n this.list.querySelector('.e-virtual-ddl-content').removeChild(reOrderList[0]);\n }\n this.updateListElements(listData);\n }\n else if ((!virtualUlElement)) {\n this.list.innerHTML = '';\n this.createVirtualContent();\n this.list.querySelector('.e-virtual-ddl-content').appendChild(ulElement);\n this.updateListElements(listData);\n }\n }\n }\n else {\n if (this.getModuleName() === 'multiselect' && this.virtualSelectAll) {\n this.virtualSelectAllData = listData;\n listData = listData.slice(this.virtualItemStartIndex, this.virtualItemEndIndex);\n }\n ulElement = this.createListItems(listData, fields);\n if (this.isIncrementalRequest) {\n this.incrementalLiCollections = ulElement.querySelectorAll('.' + dropDownBaseClasses.li);\n this.incrementalUlElement = ulElement;\n this.incrementalListData = listData;\n return ulElement;\n }\n if (this.isVirtualizationEnabled) {\n var oldUlElement = this.list.querySelector('.e-list-parent' + ':not(.e-reorder)');\n var virtualUlElement = this.list.querySelector('.e-virtual-ddl-content');\n var isRemovedUlelement = false;\n if (!oldUlElement && this.list.querySelector('.e-list-parent' + '.e-reorder')) {\n oldUlElement = this.list.querySelector('.e-list-parent' + '.e-reorder');\n }\n if ((listData.length >= this.virtualizedItemsCount && oldUlElement && virtualUlElement) || (oldUlElement && virtualUlElement && this.isAllowFiltering) || (oldUlElement && virtualUlElement && (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'multiselect')) || isRemovedUlelement) {\n if (!this.appendUncheckList) {\n virtualUlElement.replaceChild(ulElement, oldUlElement);\n }\n else {\n virtualUlElement.appendChild(ulElement);\n }\n this.updateListElements(listData);\n }\n else if ((!virtualUlElement) || (!virtualUlElement.firstChild)) {\n this.list.innerHTML = '';\n this.createVirtualContent();\n this.list.querySelector('.e-virtual-ddl-content').appendChild(ulElement);\n this.updateListElements(listData);\n }\n }\n }\n return ulElement;\n };\n DropDownBase.prototype.createVirtualContent = function () {\n if (!this.list.querySelector('.e-virtual-ddl-content')) {\n this.list.appendChild(this.createElement('div', {\n className: 'e-virtual-ddl-content',\n }));\n }\n };\n DropDownBase.prototype.updateListElements = function (listData) {\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n this.listData = listData;\n this.postRender(this.list, listData, this.bindEvent);\n };\n DropDownBase.prototype.templateListItem = function (dataSource, fields) {\n var option = this.listOption(dataSource, fields);\n option.templateID = this.itemTemplateId;\n option.isStringTemplate = this.isStringTemplate;\n var itemcheck = this.templateCompiler(this.itemTemplate);\n var ulElement;\n if (typeof this.itemTemplate !== 'function' && itemcheck) {\n var itemValue = select(this.itemTemplate, document).innerHTML.trim();\n ulElement = ListBase.renderContentTemplate(this.createElement, itemValue, dataSource, fields.properties, option, this);\n if (this.isVirtualizationEnabled && this.isReact) {\n this.renderReactTemplates();\n }\n return ulElement;\n }\n else {\n ulElement = ListBase.renderContentTemplate(this.createElement, this.itemTemplate, dataSource, fields.properties, option, this);\n if (this.isVirtualizationEnabled && this.isReact) {\n this.renderReactTemplates();\n }\n return ulElement;\n }\n };\n DropDownBase.prototype.typeOfData = function (items) {\n var item = { typeof: null, item: null };\n for (var i = 0; (!isNullOrUndefined(items) && i < items.length); i++) {\n if (!isNullOrUndefined(items[i])) {\n var listDataType = typeof (items[i]) === 'string' ||\n typeof (items[i]) === 'number' || typeof (items[i]) === 'boolean';\n var isNullData = listDataType ? isNullOrUndefined(items[i]) :\n isNullOrUndefined(getValue((this.fields.value ? this.fields.value : 'value'), items[i]));\n if (!isNullData) {\n return item = { typeof: typeof items[i], item: items[i] };\n }\n }\n }\n return item;\n };\n DropDownBase.prototype.setFixedHeader = function () {\n if (!isNullOrUndefined(this.list)) {\n this.list.parentElement.style.display = 'block';\n }\n var borderWidth = 0;\n if (this.list && this.list.parentElement) {\n borderWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-width'), 10);\n /*Shorthand property not working in Firefox for getComputedStyle method.\n Refer bug report https://bugzilla.mozilla.org/show_bug.cgi?id=137688\n Refer alternate solution https://stackoverflow.com/a/41696234/9133493*/\n if (isNaN(borderWidth)) {\n var borderTopWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-top-width'), 10);\n var borderBottomWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-bottom-width'), 10);\n var borderLeftWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-left-width'), 10);\n var borderRightWidth = parseInt(document.defaultView.getComputedStyle(this.list.parentElement, null).getPropertyValue('border-right-width'), 10);\n borderWidth = (borderTopWidth + borderBottomWidth + borderLeftWidth + borderRightWidth);\n }\n }\n if (!isNullOrUndefined(this.liCollections)) {\n var liWidth = this.getValidLi().offsetWidth - borderWidth;\n this.fixedHeaderElement.style.width = liWidth.toString() + 'px';\n }\n setStyleAttribute(this.fixedHeaderElement, { zIndex: 10 });\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group + ':not(.e-hide-listitem)');\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n };\n DropDownBase.prototype.getSortedDataSource = function (dataSource) {\n if (dataSource && this.sortOrder !== 'None') {\n var textField = this.fields.text ? this.fields.text : 'text';\n if (this.typeOfData(dataSource).typeof === 'string' || this.typeOfData(dataSource).typeof === 'number'\n || this.typeOfData(dataSource).typeof === 'boolean') {\n textField = '';\n }\n dataSource = ListBase.getDataSource(dataSource, ListBase.addSorting(this.sortOrder, textField));\n }\n return dataSource;\n };\n /**\n * Return the index of item which matched with given value in data source\n *\n * @param {string | number | boolean} value - Specifies given value.\n * @returns {number} Returns the index of the item.\n */\n DropDownBase.prototype.getIndexByValue = function (value) {\n var index;\n var listItems = [];\n if (this.fields.disabled && this.getModuleName() === 'multiselect' && this.liCollections) {\n listItems = this.liCollections;\n }\n else {\n listItems = this.getItems();\n }\n for (var i = 0; i < listItems.length; i++) {\n if (!isNullOrUndefined(value) && listItems[i].getAttribute('data-value') === value.toString()) {\n index = i;\n break;\n }\n }\n return index;\n };\n /**\n * Return the index of item which matched with given value in data source\n *\n * @param {string | number | boolean} value - Specifies given value.\n * @returns {number} Returns the index of the item.\n */\n DropDownBase.prototype.getIndexByValueFilter = function (value, ulElement) {\n var index;\n if (!ulElement) {\n return null;\n }\n var listItems = ulElement.querySelectorAll('li' + ':not(.e-list-group-item)');\n if (listItems) {\n for (var i = 0; i < listItems.length; i++) {\n if (!isNullOrUndefined(value) && listItems[i].getAttribute('data-value') === value.toString()) {\n index = i;\n break;\n }\n }\n }\n return index;\n };\n /**\n * To dispatch the event manually\n *\n * @param {HTMLElement} element - Specifies the element to dispatch the event.\n * @param {string} type - Specifies the name of the event.\n * @returns {void}\n */\n DropDownBase.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n if (element) {\n element.dispatchEvent(evt);\n }\n };\n /**\n * To set the current fields\n *\n * @returns {void}\n */\n DropDownBase.prototype.setFields = function () {\n if (this.fields.value && !this.fields.text) {\n this.updateFields(this.fields.value, this.fields.value);\n }\n else if (!this.fields.value && this.fields.text) {\n this.updateFields(this.fields.text, this.fields.text);\n }\n else if (!this.fields.value && !this.fields.text) {\n this.updateFields('text', 'text');\n }\n };\n /**\n * reset the items list.\n *\n * @param {Object[] | string[] | number[] | DataManager | boolean[]} dataSource - Specifies the data to generate the list.\n * @param {FieldSettingsModel} fields - Maps the columns of the data table and binds the data to the component.\n * @param {Query} query - Accepts the external Query that execute along with data processing.\n * @returns {void}\n */\n DropDownBase.prototype.resetList = function (dataSource, fields, query, e) {\n if (this.list) {\n if ((this.element.tagName === 'SELECT' && this.element.options.length > 0)\n || (this.element.tagName === 'UL' && this.element.childNodes.length > 0)) {\n var data = dataSource instanceof Array ? (dataSource.length > 0)\n : !isNullOrUndefined(dataSource);\n if (!data && this.selectData && this.selectData.length > 0) {\n dataSource = this.selectData;\n }\n }\n dataSource = this.getModuleName() === 'combobox' && this.selectData && dataSource instanceof Array && dataSource.length < this.selectData.length && this.addedNewItem ? this.selectData : dataSource;\n this.addedNewItem = false;\n this.setListData(dataSource, fields, query, e);\n }\n };\n DropDownBase.prototype.updateSelectElementData = function (isFiltering) {\n if ((isFiltering || this.isVirtualizationEnabled) && isNullOrUndefined(this.selectData) && this.listData && this.listData.length > 0) {\n this.selectData = this.listData;\n }\n };\n DropDownBase.prototype.updateSelection = function () {\n // This is for after added the item, need to update the selected index values.\n };\n DropDownBase.prototype.renderList = function () {\n // This is for render the list items.\n this.render();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownBase.prototype.updateDataSource = function (props, oldProps) {\n this.resetList(this.dataSource);\n this.totalItemCount = this.dataSource instanceof DataManager ? this.dataSource.dataSource.json.length : 0;\n };\n DropDownBase.prototype.setUpdateInitial = function (props, newProp, oldProp) {\n this.isDataFetched = false;\n var updateData = {};\n for (var j = 0; props.length > j; j++) {\n if (newProp[props[j]] && props[j] === 'fields') {\n this.setFields();\n updateData[props[j]] = newProp[props[j]];\n }\n else if (newProp[props[j]]) {\n updateData[props[j]] = newProp[props[j]];\n }\n }\n if (Object.keys(updateData).length > 0) {\n if (Object.keys(updateData).indexOf('dataSource') === -1) {\n updateData.dataSource = this.dataSource;\n }\n this.updateDataSource(updateData, oldProp);\n }\n };\n /**\n * When property value changes happened, then onPropertyChanged method will execute the respective changes in this component.\n *\n * @param {DropDownBaseModel} newProp - Returns the dynamic property value of the component.\n * @param {DropDownBaseModel} oldProp - Returns the previous property value of the component.\n * @private\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'dropdownbase') {\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n this.setUpdateInitial(['sortOrder', 'itemTemplate'], newProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'query':\n case 'sortOrder':\n case 'dataSource':\n case 'itemTemplate':\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'groupTemplate':\n this.renderGroupTemplate(this.list);\n if (this.ulElement && this.fixedHeaderElement) {\n var firstLi = this.ulElement.querySelector('.' + dropDownBaseClasses.group);\n this.fixedHeaderElement.innerHTML = firstLi.innerHTML;\n }\n break;\n case 'locale':\n if (this.list && (!isNullOrUndefined(this.liCollections) && this.liCollections.length === 0)) {\n this.l10nUpdate();\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n }\n }\n };\n /**\n * Build and render the component\n *\n * @param {boolean} isEmptyData - Specifies the component to initialize with list data or not.\n * @private\n * @returns {void}\n */\n DropDownBase.prototype.render = function (e, isEmptyData) {\n if (this.getModuleName() === 'listbox') {\n this.list = this.createElement('div', { className: dropDownBaseClasses.content, attrs: { 'tabindex': '0' } });\n }\n else {\n this.list = this.createElement('div', { className: dropDownBaseClasses.content });\n }\n this.list.classList.add(dropDownBaseClasses.root);\n this.setFields();\n var rippleModel = { duration: 300, selector: '.' + dropDownBaseClasses.li };\n this.rippleFun = rippleEffect(this.list, rippleModel);\n var group = this.element.querySelector('select>optgroup');\n if ((this.fields.groupBy || !isNullOrUndefined(group)) && !this.isGroupChecking) {\n EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n EventHandler.add(document, 'scroll', this.updateGroupFixedHeader, this);\n }\n if (this.getModuleName() === 'dropdownbase') {\n if (this.element.getAttribute('tabindex')) {\n this.list.setAttribute('tabindex', this.element.getAttribute('tabindex'));\n }\n removeClass([this.element], dropDownBaseClasses.root);\n this.element.style.display = 'none';\n var wrapperElement = this.createElement('div');\n this.element.parentElement.insertBefore(wrapperElement, this.element);\n wrapperElement.appendChild(this.element);\n wrapperElement.appendChild(this.list);\n }\n this.setEnableRtl();\n if (!isEmptyData) {\n this.initialize(e);\n }\n };\n DropDownBase.prototype.removeScrollEvent = function () {\n if (this.list) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n }\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n DropDownBase.prototype.getModuleName = function () {\n return 'dropdownbase';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets all the list items bound on this component.\n *\n * @returns {Element[]}\n */\n DropDownBase.prototype.getItems = function () {\n return this.ulElement.querySelectorAll('.' + dropDownBaseClasses.li);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Adds a new item to the popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n *\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @returns {void}\n\n */\n DropDownBase.prototype.addItem = function (items, itemIndex) {\n if (!this.list || (this.list.textContent === this.noRecordsTemplate && this.getModuleName() !== 'listbox')) {\n this.renderList();\n }\n if (this.sortOrder !== 'None' && isNullOrUndefined(itemIndex)) {\n var newList = [].slice.call(this.listData);\n newList.push(items);\n newList = this.getSortedDataSource(newList);\n if (this.fields.groupBy) {\n newList = ListBase.groupDataSource(newList, this.fields.properties, this.sortOrder);\n itemIndex = newList.indexOf(items);\n }\n else {\n itemIndex = newList.indexOf(items);\n }\n }\n var itemsCount = this.getItems().length;\n var isListboxEmpty = itemsCount === 0;\n var selectedItemValue = this.list.querySelector('.' + dropDownBaseClasses.selected);\n items = (items instanceof Array ? items : [items]);\n var index;\n index = (isNullOrUndefined(itemIndex) || itemIndex < 0 || itemIndex > itemsCount - 1) ? itemsCount : itemIndex;\n var fields = this.fields;\n if (items && fields.groupBy) {\n items = ListBase.groupDataSource(items, fields.properties);\n }\n var liCollections = [];\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var isHeader = item.isHeader;\n var li = this.createElement('li', { className: isHeader ? dropDownBaseClasses.group : dropDownBaseClasses.li, id: 'option-add-' + i });\n var itemText = item instanceof Object ? getValue(fields.text, item) : item;\n if (isHeader) {\n li.innerText = itemText;\n }\n if (this.itemTemplate && !isHeader) {\n var itemCheck = this.templateCompiler(this.itemTemplate);\n var compiledString = typeof this.itemTemplate !== 'function' &&\n itemCheck ? compile(select(this.itemTemplate, document).innerHTML.trim()) : compile(this.itemTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var addItemTemplate = compiledString(item, this, 'itemTemplate', this.itemTemplateId, this.isStringTemplate, null, li);\n if (addItemTemplate) {\n append(addItemTemplate, li);\n }\n }\n else if (!isHeader) {\n li.appendChild(document.createTextNode(itemText));\n }\n li.setAttribute('data-value', item instanceof Object ? getValue(fields.value, item) : item);\n li.setAttribute('role', 'option');\n this.notify('addItem', { module: 'CheckBoxSelection', item: li });\n liCollections.push(li);\n if (this.getModuleName() === 'listbox') {\n if (item.disabled) {\n li.classList.add('e-disabled');\n }\n this.listData.splice(isListboxEmpty ? this.listData.length : index, 0, item);\n if (this.listData.length !== this.sortedData.length) {\n this.sortedData = this.listData;\n }\n }\n else {\n this.listData.push(item);\n }\n if (this.sortOrder === 'None' && isNullOrUndefined(itemIndex) && index === 0) {\n index = null;\n }\n if (this.getModuleName() === 'listbox') {\n this.updateActionCompleteData(li, item, isListboxEmpty ? null : index);\n isListboxEmpty = true;\n }\n else {\n this.updateActionCompleteData(li, item, index);\n }\n //Listbox event\n this.trigger('beforeItemRender', { element: li, item: item });\n }\n if (itemsCount === 0 && isNullOrUndefined(this.list.querySelector('ul'))) {\n if (!isNullOrUndefined(this.list)) {\n this.list.innerHTML = '';\n this.list.classList.remove(dropDownBaseClasses.noData);\n this.isAddNewItemTemplate = true;\n if (!isNullOrUndefined(this.ulElement)) {\n this.list.appendChild(this.ulElement);\n }\n }\n this.liCollections = liCollections;\n if (!isNullOrUndefined(liCollections) && !isNullOrUndefined(this.ulElement)) {\n append(liCollections, this.ulElement);\n }\n this.updateAddItemList(this.list, itemsCount);\n }\n else {\n if (this.getModuleName() === 'listbox' && itemsCount === 0) {\n this.ulElement.innerHTML = '';\n }\n var attr = [];\n for (var i = 0; i < items.length; i++) {\n var listGroupItem = this.ulElement.querySelectorAll('.e-list-group-item');\n for (var j = 0; j < listGroupItem.length; j++) {\n attr[j] = listGroupItem[j].innerText;\n }\n if (attr.indexOf(liCollections[i].innerText) > -1 && fields.groupBy) {\n for (var j = 0; j < listGroupItem.length; j++) {\n if (attr[j] === liCollections[i].innerText) {\n if (this.sortOrder === 'None') {\n this.ulElement.insertBefore(liCollections[i + 1], listGroupItem[j + 1]);\n }\n else {\n this.ulElement.insertBefore(liCollections[i + 1], this.ulElement.childNodes[itemIndex]);\n }\n i = i + 1;\n break;\n }\n }\n }\n else {\n if (this.liCollections[index] && this.liCollections[index].parentNode) {\n this.liCollections[index].parentNode.insertBefore(liCollections[i], this.liCollections[index]);\n }\n else {\n this.ulElement.appendChild(liCollections[i]);\n }\n }\n var tempLi = [].slice.call(this.liCollections);\n tempLi.splice(index, 0, liCollections[i]);\n this.liCollections = tempLi;\n index += 1;\n if (this.getModuleName() === 'multiselect') {\n this.updateDataList();\n }\n }\n }\n if (this.getModuleName() === 'listbox' && this.isReact) {\n this.renderReactTemplates();\n }\n if (selectedItemValue || itemIndex === 0) {\n this.updateSelection();\n }\n this.addedNewItem = true;\n };\n /**\n * Checks if the given HTML element is disabled.\n *\n * @param {HTMLElement} li - The HTML element to check.\n * @returns {boolean} - Returns true if the element is disabled, otherwise false.\n */\n DropDownBase.prototype.isDisabledElement = function (li) {\n if (li && li.classList.contains('e-disabled')) {\n return true;\n }\n return false;\n };\n /**\n * Checks whether the list item at the specified index is disabled.\n *\n * @param {number} index - The index of the list item to check.\n * @returns {boolean} True if the list item is disabled, false otherwise.\n */\n DropDownBase.prototype.isDisabledItemByIndex = function (index) {\n if (this.fields.disabled && this.liCollections) {\n return this.isDisabledElement(this.liCollections[index]);\n }\n return false;\n };\n /**\n * Disables the given list item.\n *\n * @param { HTMLLIElement } li - The list item to disable.\n * @returns {void}\n */\n DropDownBase.prototype.disableListItem = function (li) {\n li.classList.add('e-disabled');\n li.setAttribute('aria-disabled', 'true');\n li.setAttribute('aria-selected', 'false');\n };\n DropDownBase.prototype.validationAttribute = function (target, hidden) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n hidden.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (!target.getAttribute(attributes[i])) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n hidden.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n DropDownBase.prototype.setZIndex = function () {\n // this is for component wise\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownBase.prototype.updateActionCompleteData = function (li, item, index) {\n // this is for ComboBox custom value\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownBase.prototype.updateAddItemList = function (list, itemCount) {\n // this is for multiselect add item\n };\n DropDownBase.prototype.updateDataList = function () {\n // this is for multiselect update list items\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the data Object that matches the given value.\n *\n * @param { string | number } value - Specifies the value of the list item.\n * @returns {Object}\n */\n DropDownBase.prototype.getDataByValue = function (value) {\n if (!isNullOrUndefined(this.listData)) {\n var type = this.typeOfData(this.listData).typeof;\n if (type === 'string' || type === 'number' || type === 'boolean') {\n for (var _i = 0, _a = this.listData; _i < _a.length; _i++) {\n var item = _a[_i];\n if (!isNullOrUndefined(item) && item === value) {\n return item;\n }\n }\n }\n else {\n for (var _b = 0, _c = this.listData; _b < _c.length; _b++) {\n var item = _c[_b];\n if (!isNullOrUndefined(item) && getValue((this.fields.value ? this.fields.value : 'value'), item) === value) {\n return item;\n }\n }\n }\n }\n return null;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n DropDownBase.prototype.destroy = function () {\n if (document) {\n EventHandler.remove(document, 'scroll', this.updateGroupFixedHeader);\n if (document.body.contains(this.list)) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n if (!isNullOrUndefined(this.rippleFun)) {\n this.rippleFun();\n }\n detach(this.list);\n }\n }\n this.liCollections = null;\n this.ulElement = null;\n this.list = null;\n this.enableRtlElements = null;\n this.rippleFun = null;\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null, disabled: null }, FieldSettings)\n ], DropDownBase.prototype, \"fields\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"groupTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], DropDownBase.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property('Request failed')\n ], DropDownBase.prototype, \"actionFailureTemplate\", void 0);\n __decorate([\n Property('None')\n ], DropDownBase.prototype, \"sortOrder\", void 0);\n __decorate([\n Property([])\n ], DropDownBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], DropDownBase.prototype, \"query\", void 0);\n __decorate([\n Property('StartsWith')\n ], DropDownBase.prototype, \"filterType\", void 0);\n __decorate([\n Property(true)\n ], DropDownBase.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(1000)\n ], DropDownBase.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DropDownBase.prototype, \"ignoreAccent\", void 0);\n __decorate([\n Property()\n ], DropDownBase.prototype, \"locale\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DropDownBase.prototype, \"destroyed\", void 0);\n DropDownBase = __decorate([\n NotifyPropertyChanges\n ], DropDownBase);\n return DropDownBase;\n}(Component));\nexport { DropDownBase };\n","import { isNullOrUndefined, classList, createElement, Browser } from '@syncfusion/ej2-base';\nvar globalTimeOut = {};\nvar DEFT_MAT_WIDTH = 30;\nvar DEFT_MAT3_WIDTH = 30;\nvar DEFT_FAB_WIDTH = 30;\nvar DEFT_FLUENT_WIDTH = 30;\nvar DEFT_FLUENT2_WIDTH = 30;\nvar DEFT_BOOT_WIDTH = 30;\nvar DEFT_BOOT4_WIDTH = 36;\nvar DEFT_BOOT5_WIDTH = 36;\nvar CLS_SHOWSPIN = 'e-spin-show';\nvar CLS_HIDESPIN = 'e-spin-hide';\nvar CLS_MATERIALSPIN = 'e-spin-material';\nvar CLS_MATERIAL3SPIN = 'e-spin-material3';\nvar CLS_FABRICSPIN = 'e-spin-fabric';\nvar CLS_FLUENTSPIN = 'e-spin-fluent';\nvar CLS_FLUENT2SPIN = 'e-spin-fluent2';\nvar CLS_TAILWINDSPIN = 'e-spin-tailwind';\nvar CLS_BOOTSPIN = 'e-spin-bootstrap';\nvar CLS_BOOT4SPIN = 'e-spin-bootstrap4';\nvar CLS_BOOT5SPIN = 'e-spin-bootstrap5';\nvar CLS_HIGHCONTRASTSPIN = 'e-spin-high-contrast';\nvar CLS_SPINWRAP = 'e-spinner-pane';\nvar CLS_SPININWRAP = 'e-spinner-inner';\nvar CLS_SPINCIRCLE = 'e-path-circle';\nvar CLS_SPINARC = 'e-path-arc';\nvar CLS_SPINLABEL = 'e-spin-label';\nvar CLS_SPINTEMPLATE = 'e-spin-template';\nvar spinTemplate = null;\nvar spinCSSClass = null;\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : blazorSpinner({ action: \"Create\", options: {target: targetElement}, type: \"\" });\n * ```\n *\n * @param {string} action - specifies the string\n * @param {CreateArgs} options - specifies the args\n * @param {string} target - specifies the target\n * @param {string} type - specifes the type\n * @returns {void}\n * @private\n */\nexport function Spinner(action, options, target, type) {\n switch (action) {\n case 'Create':\n /* eslint-disable */\n var element = document.querySelector(options.target);\n var args = {\n type: type, target: element, cssClass: options.cssClass,\n label: options.label, width: options.width\n };\n /* eslint-enable */\n createSpinner(args);\n break;\n case 'Show':\n showSpinner(document.querySelector(target));\n break;\n case 'Hide':\n hideSpinner(document.querySelector(target));\n break;\n case 'Set': {\n var setArgs = { cssClass: options.cssClass, type: type };\n setSpinner(setArgs);\n break;\n }\n }\n}\n/**\n * Create a spinner for the specified target element.\n * ```\n * E.g : createSpinner({ target: targetElement, width: '34px', label: 'Loading..' });\n * ```\n *\n * @param {SpinnerArgs} args - specifies the args\n * @param {CreateElementArgs} internalCreateElement - specifis the element args\n * @returns {void}\n * @private\n */\nexport function createSpinner(args, internalCreateElement) {\n var _a;\n if (!args.target) {\n return;\n }\n var radius;\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n // eslint-disable-next-line\n var container = create_spinner_container(args.target, makeElement);\n if (!isNullOrUndefined(args.cssClass)) {\n var classNames = args.cssClass.split(' ').filter(function (className) { return className.trim() !== ''; });\n (_a = container.wrap.classList).add.apply(_a, classNames);\n }\n if (!isNullOrUndefined(args.template) || !isNullOrUndefined(spinTemplate)) {\n var template = !isNullOrUndefined(args.template) ? args.template : spinTemplate;\n container.wrap.classList.add(CLS_SPINTEMPLATE);\n replaceContent(container.wrap, template, spinCSSClass);\n }\n else {\n var theme = !isNullOrUndefined(args.type) ? args.type : getTheme(container.wrap);\n var width = !isNullOrUndefined(args.width) ? args.width : undefined;\n radius = calculateRadius(width, theme);\n setTheme(theme, container.wrap, radius, makeElement);\n if (!isNullOrUndefined(args.label)) {\n createLabel(container.inner_wrap, args.label, makeElement);\n }\n }\n container.wrap.classList.add(CLS_HIDESPIN);\n container = null;\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {string} label - specifies the string\n * @param {createElementParams} makeElement - specifies the element\n * @returns {HTMLElement} - returns the element\n */\nfunction createLabel(container, label, makeElement) {\n var labelEle = makeElement('div', {});\n labelEle.classList.add(CLS_SPINLABEL);\n labelEle.innerHTML = label;\n container.appendChild(labelEle);\n return labelEle;\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createMaterialSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Material', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_MATERIALSPIN);\n mat_calculate_attributes(radius, container, 'Material', CLS_MATERIALSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createMaterial3Spinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Material3', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_MATERIAL3SPIN);\n mat_calculate_attributes(radius, container, 'Material3', CLS_MATERIAL3SPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createBootstrap4Spinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Bootstrap4', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_BOOT4SPIN);\n mat_calculate_attributes(radius, container, 'Bootstrap4', CLS_BOOT4SPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createBootstrap5Spinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Bootstrap5', radius: radius };\n create_material_element(container, uniqueID, makeElement, CLS_BOOT5SPIN);\n mat_calculate_attributes(radius, container, 'Bootstrap5', CLS_BOOT5SPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {string} uniqueID - specifies the id.\n * @param {number} radius - specifies the radius\n * @returns {void}\n */\nfunction startMatAnimate(container, uniqueID, radius) {\n var globalObject = {};\n var timeOutVar = 0;\n globalTimeOut[\"\" + uniqueID].timeOut = 0;\n globalObject[\"\" + uniqueID] = globalVariables(uniqueID, radius, 0, 0);\n var spinnerInfo = { uniqueID: uniqueID, container: container, globalInfo: globalObject, timeOutVar: timeOutVar };\n animateMaterial(spinnerInfo);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createFabricSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Fabric', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FABRICSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FABRICSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createFluentSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Fluent', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FLUENTSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FLUENTSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createFluent2Spinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Fluent2', radius: radius };\n create_fabric_element(container, uniqueID, CLS_FLUENT2SPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_FLUENT2SPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createTailwindSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Tailwind', radius: radius };\n create_fabric_element(container, uniqueID, CLS_TAILWINDSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_TAILWINDSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createHighContrastSpinner(container, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'HighContrast', radius: radius };\n create_fabric_element(container, uniqueID, CLS_HIGHCONTRASTSPIN, makeElement);\n fb_calculate_attributes(radius, container, CLS_HIGHCONTRASTSPIN);\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @returns {string} - returns the string\n */\nfunction getTheme(container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n}\n/**\n *\n * @param {string} theme - specifies the theme\n * @param {HTMLElement} container - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction setTheme(theme, container, radius, makeElement) {\n var innerContainer = container.querySelector('.' + CLS_SPININWRAP);\n var svg = innerContainer.querySelector('svg');\n if (!isNullOrUndefined(svg)) {\n innerContainer.removeChild(svg);\n }\n switch (theme) {\n case 'Material':\n createMaterialSpinner(innerContainer, radius, makeElement);\n break;\n case 'Material3':\n createMaterial3Spinner(innerContainer, radius, makeElement);\n break;\n case 'Fabric':\n createFabricSpinner(innerContainer, radius, makeElement);\n break;\n case 'Fluent':\n createFluentSpinner(innerContainer, radius, makeElement);\n break;\n case 'Fluent2':\n createFluent2Spinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap':\n createBootstrapSpinner(innerContainer, radius, makeElement);\n break;\n case 'HighContrast':\n createHighContrastSpinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap4':\n createBootstrap4Spinner(innerContainer, radius, makeElement);\n break;\n case 'Bootstrap5':\n createBootstrap5Spinner(innerContainer, radius, makeElement);\n break;\n case 'Tailwind':\n case 'Tailwind-dark':\n createTailwindSpinner(innerContainer, radius, makeElement);\n break;\n }\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @param {number} radius - specifies the radius\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\nfunction createBootstrapSpinner(innerContainer, radius, makeElement) {\n var uniqueID = random_generator();\n globalTimeOut[\"\" + uniqueID] = { timeOut: 0, type: 'Bootstrap', radius: radius };\n create_bootstrap_element(innerContainer, uniqueID, makeElement);\n boot_calculate_attributes(innerContainer, radius);\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @param {string} uniqueID - specifies the id\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction create_bootstrap_element(innerContainer, uniqueID, makeElement) {\n var svgBoot = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var viewBoxValue = 64;\n var trans = 32;\n var defaultRadius = 2;\n svgBoot.setAttribute('id', uniqueID);\n svgBoot.setAttribute('class', CLS_BOOTSPIN);\n svgBoot.setAttribute('viewBox', '0 0 ' + viewBoxValue + ' ' + viewBoxValue);\n innerContainer.insertBefore(svgBoot, innerContainer.firstChild);\n for (var item = 0; item <= 7; item++) {\n var bootCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bootCircle.setAttribute('class', CLS_SPINCIRCLE + '_' + item);\n bootCircle.setAttribute('r', defaultRadius + '');\n bootCircle.setAttribute('transform', 'translate(' + trans + ',' + trans + ')');\n svgBoot.appendChild(bootCircle);\n }\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @param {number} radius - specifies the radius\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction boot_calculate_attributes(innerContainer, radius) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var x = 0;\n var y = 0;\n var rad = 24;\n svg.style.width = svg.style.height = radius + 'px';\n var startArc = 90;\n for (var item = 0; item <= 7; item++) {\n var start = defineArcPoints(x, y, rad, startArc);\n var circleEle = svg.querySelector('.' + CLS_SPINCIRCLE + '_' + item);\n circleEle.setAttribute('cx', start.x + '');\n circleEle.setAttribute('cy', start.y + '');\n startArc = startArc >= 360 ? 0 : startArc;\n startArc = startArc + 45;\n }\n}\n/**\n *\n * @param {number} begin - specifies the number\n * @param {number} stop - specifirs the number\n * @returns {number[]} - returns the array of number\n */\nfunction generateSeries(begin, stop) {\n var series = [];\n var start = begin;\n var end = stop;\n var increment = false;\n var count = 1;\n formSeries(start);\n /**\n *\n * @param {number} i - specifies the number\n * @returns {void}\n */\n function formSeries(i) {\n series.push(i);\n if (i !== end || count === 1) {\n if (i <= start && i > 1 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n else if (i === 1) {\n i = 7;\n i = parseFloat((i + 0.2).toFixed(2));\n increment = true;\n }\n else if (i < 8 && increment) {\n i = parseFloat((i + 0.2).toFixed(2));\n if (i === 8) {\n increment = false;\n }\n }\n else if (i <= 8 && !increment) {\n i = parseFloat((i - 0.2).toFixed(2));\n }\n ++count;\n formSeries(i);\n }\n }\n return series;\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @returns {void}\n */\nfunction animateBootstrap(innerContainer) {\n var svg = innerContainer.querySelector('svg.e-spin-bootstrap');\n var id = svg.getAttribute('id');\n for (var i = 1; i <= 8; i++) {\n var circleEle = (innerContainer.getElementsByClassName('e-path-circle_' +\n (i === 8 ? 0 : i))[0]);\n rotation(circleEle, i, i, generateSeries(i, i), id);\n }\n /**\n *\n * @param {SVGCircleElement} circle - specifies the circl element\n * @param {number} start - specifies the number\n * @param {number} end - specifies the end number\n * @param {number} series - specifies the series\n * @param {string} id - specifies the id\n * @returns {void}\n */\n function rotation(circle, start, end, series, id) {\n var count = 0;\n boot_animate(start);\n // eslint-disable-next-line\n function boot_animate(radius) {\n if (globalTimeOut[\"\" + id].isAnimate) {\n ++count;\n circle.setAttribute('r', radius + '');\n if (count >= series.length) {\n count = 0;\n }\n // eslint-disable-next-line\n globalTimeOut[id].timeOut = setTimeout(boot_animate.bind(null, series[count]), 18);\n }\n }\n }\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {string} template - specifies the template\n * @param {string} cssClass - specifies the css class.\n * @returns {void}\n */\nfunction replaceContent(container, template, cssClass) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var inner = container.querySelector('.e-spinner-inner');\n inner.innerHTML = template;\n}\n/**\n *\n * @param {string} width - specifies the width\n * @param {string} theme - specifies the string\n * @returns {number} - returns the number\n */\nfunction calculateRadius(width, theme) {\n var defaultSize;\n switch (theme) {\n case 'Material':\n defaultSize = DEFT_MAT_WIDTH;\n break;\n case 'Material3':\n defaultSize = DEFT_MAT3_WIDTH;\n break;\n case 'Fabric':\n defaultSize = DEFT_FAB_WIDTH;\n break;\n case 'Tailwind':\n case 'Tailwind-dark':\n defaultSize = DEFT_FAB_WIDTH;\n break;\n case 'Fluent':\n defaultSize = DEFT_FLUENT_WIDTH;\n break;\n case 'Fluent2':\n defaultSize = DEFT_FLUENT2_WIDTH;\n break;\n case 'Bootstrap4':\n defaultSize = DEFT_BOOT4_WIDTH;\n break;\n case 'Bootstrap5':\n defaultSize = DEFT_BOOT5_WIDTH;\n break;\n default:\n defaultSize = DEFT_BOOT_WIDTH;\n }\n width = width ? parseFloat(width + '') : defaultSize;\n return theme === 'Bootstrap' ? width : width / 2;\n}\n/**\n *\n * @param {string} id - specifies the id\n * @param {number} radius - specifies the radius\n * @param {number} count - specifies the number count\n * @param {number} previousId - specifies the previous id\n * @returns {GlobalVariables} - returns the variables\n */\nfunction globalVariables(id, radius, count, previousId) {\n return {\n radius: radius,\n count: count,\n previousId: previousId\n };\n}\n/**\n * @returns {string} - returns the string\n */\n// eslint-disable-next-line\nfunction random_generator() {\n var random = '';\n var combine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 5; i++) {\n random += combine.charAt(Math.floor(Math.random() * combine.length));\n }\n return random;\n}\n/**\n *\n * @param {HTMLElement} innerCon - specifies the element\n * @param {string} uniqueID - specifies the unique id\n * @param {string} themeClass - specifies the string\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction create_fabric_element(innerCon, uniqueID, themeClass, makeElement) {\n var svgFabric = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svgFabric.setAttribute('id', uniqueID);\n svgFabric.setAttribute('class', themeClass);\n var fabricCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n var fabricCircleArc = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n fabricCircleArc.setAttribute('class', CLS_SPINARC);\n innerCon.insertBefore(svgFabric, innerCon.firstChild);\n svgFabric.appendChild(fabricCirclePath);\n svgFabric.appendChild(fabricCircleArc);\n}\n/**\n *\n * @param {HTMLElement} innerContainer - specifies the element\n * @param {string} uniqueID - specifies the unique id\n * @param {createElementParams} makeElement - specifies the element\n * @param {string} cls - specifies the string\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction create_material_element(innerContainer, uniqueID, makeElement, cls) {\n var svgMaterial = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n var matCirclePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n svgMaterial.setAttribute('class', cls);\n svgMaterial.setAttribute('id', uniqueID);\n matCirclePath.setAttribute('class', CLS_SPINCIRCLE);\n innerContainer.insertBefore(svgMaterial, innerContainer.firstChild);\n svgMaterial.appendChild(matCirclePath);\n}\n/**\n *\n * @param {HTMLElement} target - specifies the element\n * @param {createElementParams} makeElement - specifies the element\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction create_spinner_container(target, makeElement) {\n var spinnerContainer = makeElement('div', {});\n var spinnerInnerContainer = makeElement('div', {});\n spinnerContainer.classList.add(CLS_SPINWRAP);\n spinnerInnerContainer.classList.add(CLS_SPININWRAP);\n spinnerInnerContainer.setAttribute('aria-disabled', 'true');\n target.appendChild(spinnerContainer);\n spinnerContainer.appendChild(spinnerInnerContainer);\n // eslint-disable-next-line\n return { wrap: spinnerContainer, inner_wrap: spinnerInnerContainer };\n}\n/**\n *\n * @param {SpinnerInfo} spinnerInfo - specifies the spinner\n * @returns {void}\n */\nfunction animateMaterial(spinnerInfo) {\n var start = 1;\n var end = 149;\n var duration = 1333;\n var max = 75;\n createCircle(start, end, easeAnimation, duration, spinnerInfo.globalInfo[spinnerInfo.uniqueID].count, max, spinnerInfo);\n spinnerInfo.globalInfo[spinnerInfo.uniqueID].count = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].count % 4;\n}\n/**\n *\n * @param {number} start - specifies the number\n * @param {number} end - specifies the end number\n * @param {Function} easing - specifies the function\n * @param {number} duration - specifies the duration\n * @param {number} count - specifies the count\n * @param {number} max - specifies the max number\n * @param {SpinnerInfo} spinnerInfo - specifies the spinner info\n * @returns {void}\n */\nfunction createCircle(start, end, easing, duration, count, max, spinnerInfo) {\n var id = ++spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId;\n var startTime = new Date().getTime();\n var change = end - start;\n var diameter = getSize((spinnerInfo.globalInfo[spinnerInfo.uniqueID].radius * 2) + '');\n var strokeSize = getStrokeSize(diameter);\n var rotate = -90 * (spinnerInfo.globalInfo[spinnerInfo.uniqueID].count || 0);\n mat_animation(spinnerInfo);\n // eslint-disable-next-line\n function mat_animation(spinnerInfo) {\n var currentTime = Math.max(0, Math.min(new Date().getTime() - startTime, duration));\n updatePath(easing(currentTime, start, change, duration), spinnerInfo.container);\n if (id === spinnerInfo.globalInfo[spinnerInfo.uniqueID].previousId && currentTime < duration) {\n // eslint-disable-next-line\n globalTimeOut[spinnerInfo.uniqueID].timeOut = setTimeout(mat_animation.bind(null, spinnerInfo), 1);\n }\n else {\n animateMaterial(spinnerInfo);\n }\n }\n /**\n *\n * @param {number} value - specifies the number value\n * @param {HTMLElement} container - specifies the container\n * @returns {void}\n */\n function updatePath(value, container) {\n if (!isNullOrUndefined(container.querySelector('svg.e-spin-material')) || !isNullOrUndefined(container.querySelector('svg.e-spin-material3'))) {\n var svg = void 0;\n if (!isNullOrUndefined(container.querySelector('svg.e-spin-material')) &&\n !isNullOrUndefined(container.querySelector('svg.e-spin-material').querySelector('path.e-path-circle'))) {\n svg = container.querySelector('svg.e-spin-material');\n }\n else if (!isNullOrUndefined(container.querySelector('svg.e-spin-material3')) &&\n !isNullOrUndefined(container.querySelector('svg.e-spin-material3').querySelector('path.e-path-circle'))) {\n svg = container.querySelector('svg.e-spin-material3');\n }\n if (!isNullOrUndefined(svg)) {\n var path = svg.querySelector('path.e-path-circle');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, value, max) + '');\n path.setAttribute('transform', 'rotate(' + (rotate) + ' ' + diameter / 2 + ' ' + diameter / 2 + ')');\n }\n }\n }\n}\n/**\n *\n * @param {number} radius - specifies the number\n * @param {HTMLElement} container - specifies the element\n * @param {string} type - specifies the string type\n * @param {string} cls - specifies the string\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction mat_calculate_attributes(radius, container, type, cls) {\n var diameter = radius * 2;\n var svg = container.querySelector('svg.' + cls);\n var path = svg.querySelector('path.e-path-circle');\n var strokeSize = getStrokeSize(diameter);\n var transformOrigin = (diameter / 2) + 'px';\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.width = svg.style.height = diameter + 'px';\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n path.setAttribute('d', drawArc(diameter, strokeSize));\n if (type === 'Material' || type === 'Material3' || type === 'Fluent2') {\n path.setAttribute('stroke-width', strokeSize + '');\n path.setAttribute('stroke-dasharray', ((diameter - strokeSize) * Math.PI * 0.75) + '');\n path.setAttribute('stroke-dashoffset', getDashOffset(diameter, strokeSize, 1, 75) + '');\n }\n}\n/**\n *\n * @param {string} value - specifies the value\n * @returns {number} - returns the number\n */\nfunction getSize(value) {\n var parsed = parseFloat(value);\n return parsed;\n}\n/**\n *\n * @param {number} diameter - specifies the diameter\n * @param {number} strokeSize - specifies the size\n * @returns {string} - returns the string\n */\nfunction drawArc(diameter, strokeSize) {\n var radius = diameter / 2;\n var offset = strokeSize / 2;\n return 'M' + radius + ',' + offset\n + 'A' + (radius - offset) + ',' + (radius - offset) + ' 0 1 1 ' + offset + ',' + radius;\n}\n/**\n *\n * @param {number} diameter - specifies the number\n * @returns {number} - returns the number\n */\nfunction getStrokeSize(diameter) {\n return 10 / 100 * diameter;\n}\n/**\n *\n * @param {number} diameter - specifies the number\n * @param {number} strokeSize - specifies the stroke size\n * @param {number} value - specifies the value\n * @param {number} max - specifies the max number\n * @returns {number} - returns the number\n */\nfunction getDashOffset(diameter, strokeSize, value, max) {\n return (diameter - strokeSize) * Math.PI * ((3 * (max) / 100) - (value / 100));\n}\n/**\n *\n * @param {number} current - specifies the number\n * @param {number} start - specifies the stroke size\n * @param {number} change - specifies the value\n * @param {number} duration - specifies the max number\n * @returns {number} - returns the number\n */\nfunction easeAnimation(current, start, change, duration) {\n var timestamp = (current /= duration) * current;\n var timecount = timestamp * current;\n return start + change * (6 * timecount * timestamp + -15 * timestamp * timestamp + 10 * timecount);\n}\n/**\n *\n * @param {number} radius - specifies the number\n * @param {HTMLElement} innerConainer - specifies the element\n * @param {string} trgClass - specifies the class\n * @returns {void}\n */\n// eslint-disable-next-line\nfunction fb_calculate_attributes(radius, innerConainer, trgClass) {\n var centerX = radius;\n var centerY = radius;\n var diameter = radius * 2;\n var startArc = 315;\n var endArc = 45;\n var svg = innerConainer.querySelector('.' + trgClass);\n var circle = svg.querySelector('.e-path-circle');\n var path = svg.querySelector('.e-path-arc');\n var transformOrigin = (diameter / 2) + 'px';\n circle.setAttribute('d', defineCircle(centerX, centerY, radius));\n path.setAttribute('d', defineArc(centerX, centerY, radius, startArc, endArc));\n svg.setAttribute('viewBox', '0 0 ' + diameter + ' ' + diameter);\n svg.style.transformOrigin = transformOrigin + ' ' + transformOrigin + ' ' + transformOrigin;\n svg.style.width = svg.style.height = diameter + 'px';\n}\n/**\n *\n * @param {number} centerX - specifies the number\n * @param {number} centerY - specifies the stroke size\n * @param {number} radius - specifies the value\n * @param {number} angle - specifies the max number\n * @returns {number} - returns the number\n */\nfunction defineArcPoints(centerX, centerY, radius, angle) {\n var radians = (angle - 90) * Math.PI / 180.0;\n return {\n x: centerX + (radius * Math.cos(radians)),\n y: centerY + (radius * Math.sin(radians))\n };\n}\n/**\n *\n * @param {number} x - specifies the number\n * @param {number} y - specifies the stroke size\n * @param {number} radius - specifies the radius\n * @param {number} startArc - specifies the value\n * @param {number} endArc - specifies the max number\n * @returns {number} - returns the number\n */\nfunction defineArc(x, y, radius, startArc, endArc) {\n var start = defineArcPoints(x, y, radius, endArc);\n var end = defineArcPoints(x, y, radius, startArc);\n var d = [\n 'M', start.x, start.y,\n 'A', radius, radius, 0, 0, 0, end.x, end.y\n ].join(' ');\n return d;\n}\n/**\n *\n * @param {number} x - specifies the number\n * @param {number} y - specifies the stroke size\n * @param {number} radius - specifies the value\n * @returns {string} - returns the string\n */\nfunction defineCircle(x, y, radius) {\n var d = [\n 'M', x, y,\n 'm', -radius, 0,\n 'a', radius, radius, 0, 1, 0, radius * 2, 0,\n 'a', radius, radius, 0, 1, 0, -radius * 2, 0\n ].join(' ');\n return d;\n}\n/**\n * Function to show the Spinner.\n *\n * @param {HTMLElement} container - Specify the target of the Spinner.\n * @returns {void}\n * @private\n */\nexport function showSpinner(container) {\n showHideSpinner(container, false);\n container = null;\n}\n/**\n *\n * @param {HTMLElement} container - specifies the element\n * @param {boolean} isHide - specifies the boolean\n * @returns {void}\n */\nfunction showHideSpinner(container, isHide) {\n var spinnerWrap;\n if (container) {\n if (container.classList.contains(CLS_SPINWRAP)) {\n spinnerWrap = container;\n }\n else {\n var spinWrapCollection = container.querySelectorAll('.' + CLS_SPINWRAP);\n if (Browser.isIE) {\n for (var i = 0; i < spinWrapCollection.length; i++) {\n if (spinWrapCollection[i].parentElement && spinWrapCollection[i].parentElement === container) {\n spinnerWrap = spinWrapCollection[i];\n break;\n }\n }\n }\n else {\n spinnerWrap = Array.from(spinWrapCollection).find(function (wrap) { return wrap.parentElement === container; }) || null;\n }\n }\n }\n if (container && spinnerWrap) {\n var inner = spinnerWrap.querySelector('.' + CLS_SPININWRAP);\n var spinCheck = isHide ? !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) &&\n !spinnerWrap.classList.contains(CLS_HIDESPIN) :\n !spinnerWrap.classList.contains(CLS_SPINTEMPLATE) && !spinnerWrap.classList.contains(CLS_SHOWSPIN);\n if (spinCheck) {\n var svgEle = spinnerWrap.querySelector('svg');\n if (isNullOrUndefined(svgEle)) {\n return;\n }\n var id = svgEle.getAttribute('id');\n globalTimeOut[\"\" + id].isAnimate = !isHide;\n switch (globalTimeOut[\"\" + id].type) {\n case 'Material':\n case 'Material3':\n if (isHide) {\n clearTimeout(globalTimeOut[id].timeOut);\n }\n else {\n startMatAnimate(inner, id, globalTimeOut[id].radius);\n }\n break;\n case 'Bootstrap':\n if (isHide) {\n clearTimeout(globalTimeOut[id].timeOut);\n }\n else {\n animateBootstrap(inner);\n }\n break;\n }\n }\n if (isHide) {\n classList(spinnerWrap, [CLS_HIDESPIN], [CLS_SHOWSPIN]);\n }\n else {\n classList(spinnerWrap, [CLS_SHOWSPIN], [CLS_HIDESPIN]);\n }\n container = null;\n }\n}\n/**\n * Function to hide the Spinner.\n *\n * @param {HTMLElement} container - Specify the target of the Spinner.\n * @returns {void}\n * @private\n */\nexport function hideSpinner(container) {\n showHideSpinner(container, true);\n container = null;\n}\n/**\n * Function to change the Spinners in a page globally from application end.\n * ```\n * E.g : setSpinner({ cssClass: 'custom-css'; type: 'Material' });\n * ```\n *\n * @param {SetSpinnerArgs} args - specifies the args\n * @param {createElementParams} internalCreateElement - specifies the element params\n * @returns {void}\n * @private\n */\nexport function setSpinner(args, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.template !== undefined) {\n spinTemplate = args.template;\n if (args.template !== undefined) {\n spinCSSClass = args.cssClass;\n }\n }\n var container = document.querySelectorAll('.' + CLS_SPINWRAP);\n for (var index = 0; index < container.length; index++) {\n ensureTemplate(args.template, container[index], args.type, args.cssClass, makeElement);\n }\n}\n/**\n *\n * @param {string} template - specifies the string\n * @param {HTMLElement} container - specifies the container\n * @param {string} theme - specifies the theme\n * @param {string} cssClass - specifies the string class\n * @param {createElementParams} makeEle - specifies the params\n * @returns {void}\n */\nfunction ensureTemplate(template, container, theme, cssClass, makeEle) {\n if (isNullOrUndefined(template) && !container.classList.contains(CLS_SPINTEMPLATE)) {\n replaceTheme(container, theme, cssClass, makeEle);\n if (container.classList.contains(CLS_SHOWSPIN)) {\n container.classList.remove(CLS_SHOWSPIN);\n showSpinner(container);\n }\n else {\n container.classList.remove(CLS_HIDESPIN);\n hideSpinner(container);\n }\n }\n else {\n spinTemplate = template;\n if (!isNullOrUndefined(cssClass)) {\n spinCSSClass = cssClass;\n }\n if (!isNullOrUndefined(spinTemplate)) {\n replaceContent(container, spinTemplate, spinCSSClass);\n }\n }\n}\n/**\n *\n * @param {HTMLElement} container - specifies the container\n * @param {string} theme - specifies the theme\n * @param {string} cssClass - specifies the string class\n * @param {createElementParams} makeEle - specifies the params\n * @returns {void}\n */\nfunction replaceTheme(container, theme, cssClass, makeEle) {\n if (!isNullOrUndefined(cssClass)) {\n container.classList.add(cssClass);\n }\n var svgElement = container.querySelector('svg');\n if (!isNullOrUndefined(svgElement)) {\n var radius = theme === 'Bootstrap' ? parseFloat(svgElement.style.height) : parseFloat(svgElement.style.height) / 2;\n var classNames = svgElement.getAttribute('class');\n var svgClassList = classNames.split(/\\s/);\n if (svgClassList.indexOf('e-spin-material') >= 0) {\n var id = svgElement.getAttribute('id');\n clearTimeout(globalTimeOut[\"\" + id].timeOut);\n }\n setTheme(theme, container, radius, makeEle);\n }\n}\n","/**\n * Function helps to find which highlightSearch is to call based on your data.\n *\n * @param {HTMLElement} element - Specifies an li element.\n * @param {string} query - Specifies the string to be highlighted.\n * @param {boolean} ignoreCase - Specifies the ignoreCase option.\n * @param {HightLightType} type - Specifies the type of highlight.\n * @returns {void}\n */\nexport function highlightSearch(element, query, ignoreCase, type) {\n var isHtmlElement = /<[^>]*>/g.test(element.innerText);\n if (isHtmlElement) {\n element.innerText = element.innerText.replace(/[\\u00A0-\\u9999<>&]/g, function (match) { return \"&#\" + match.charCodeAt(0) + \";\"; });\n }\n if (query === '') {\n return;\n }\n else {\n var ignoreRegex = ignoreCase ? 'gim' : 'gm';\n // eslint-disable-next-line\n query = /^[a-zA-Z0-9- ]*$/.test(query) ? query : query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n var replaceQuery = type === 'StartsWith' ? '^(' + query + ')' : type === 'EndsWith' ?\n '(' + query + ')$' : '(' + query + ')';\n // eslint-disable-next-line security/detect-non-literal-regexp\n findTextNode(element, new RegExp(replaceQuery, ignoreRegex));\n }\n}\n/* eslint-enable jsdoc/require-param, valid-jsdoc */\n/**\n *\n * @param {HTMLElement} element - Specifies the element.\n * @param {RegExp} pattern - Specifies the regex to match the searched text.\n * @returns {void}\n */\nfunction findTextNode(element, pattern) {\n for (var index = 0; element.childNodes && (index < element.childNodes.length); index++) {\n if (element.childNodes[index].nodeType === 3 && element.childNodes[index].textContent.trim() !== '') {\n var value = element.childNodes[index].nodeValue.trim().replace(pattern, '$1');\n element.childNodes[index].nodeValue = '';\n element.innerHTML = element.innerHTML.trim() + value;\n break;\n }\n else {\n findTextNode(element.childNodes[index], pattern);\n }\n }\n}\n/**\n * Function helps to remove highlighted element based on your data.\n *\n * @param {HTMLElement} content - Specifies an content element.\n * @returns {void}\n */\nexport function revertHighlightSearch(content) {\n var contentElement = content.querySelectorAll('.e-highlight');\n for (var i = contentElement.length - 1; i >= 0; i--) {\n var parent_1 = contentElement[i].parentNode;\n var text = document.createTextNode(contentElement[i].textContent);\n parent_1.replaceChild(text, contentElement[i]);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { compile, Property, EventHandler, Animation, formatUnit, append, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, detach, Event, Complex, addClass, removeClass, closest, isUndefined, getValue, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { Popup, isCollide, createSpinner, showSpinner, hideSpinner, getZindexPartial } from '@syncfusion/ej2-popups';\nimport { highlightSearch, revertHighlightSearch } from '../common/highlight-search';\n/**\n * The Mention component is used to list someone or something based on user input in textarea, input,\n * or any other editable element from which the user can select.\n */\nvar Mention = /** @class */ (function (_super) {\n __extends(Mention, _super);\n /**\n * * Constructor for creating the widget\n *\n * @param {MentionModel} options - Specifies the MentionComponent model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function Mention(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * When property value changes happened, then onPropertyChanged method will execute the respective changes in this component.\n *\n * @param {MentionModel} newProp - Returns the dynamic property value of the component.\n * @param {MentionModel} oldProp - Returns the previous property value of the component.\n * @private\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Mention.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'minLength':\n this.minLength = newProp.minLength;\n break;\n case 'suffixText':\n this.suffixText = newProp.suffixText;\n break;\n case 'allowSpaces':\n this.allowSpaces = newProp.allowSpaces;\n break;\n case 'mentionChar':\n this.mentionChar = newProp.mentionChar;\n break;\n case 'showMentionChar':\n this.showMentionChar = newProp.showMentionChar;\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n }\n }\n };\n Mention.prototype.updateCssClass = function (newClass, oldClass) {\n if (!isNullOrUndefined(oldClass)) {\n oldClass = (oldClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newClass)) {\n newClass = (newClass.replace(/\\s+/g, ' ')).trim();\n }\n this.setCssClass(newClass, [this.inputElement], oldClass);\n if (this.popupObj) {\n this.setCssClass(newClass, [this.popupObj.element], oldClass);\n }\n };\n Mention.prototype.setCssClass = function (cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n };\n Mention.prototype.initializeData = function () {\n this.isSelected = false;\n this.isFiltered = false;\n this.beforePopupOpen = false;\n this.initRemoteRender = false;\n this.isListResetted = false;\n this.isPopupOpen = false;\n this.isCollided = false;\n this.lineBreak = false;\n this.isRTE = false;\n this.keyEventName = 'mousedown';\n };\n /**\n * Execute before render the list items\n *\n * @private\n * @returns {void}\n */\n Mention.prototype.preRender = function () {\n this.initializeData();\n _super.prototype.preRender.call(this);\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Mention.prototype.render = function () {\n var isSelector = typeof this.target === 'string';\n this.inputElement = !isNullOrUndefined(this.target) ?\n this.checkAndUpdateInternalComponent(isSelector\n ? document.querySelector(this.target)\n : this.target) : this.element;\n if (this.isContentEditable(this.inputElement)) {\n this.inputElement.setAttribute('contenteditable', 'true');\n addClass([this.inputElement], ['e-mention']);\n if (isNullOrUndefined(this.target)) {\n addClass([this.inputElement], ['e-editable-element']);\n }\n }\n this.inputElement.setAttribute('role', 'textbox');\n this.inputElement.setAttribute('aria-label', 'mention');\n this.queryString = this.elementValue();\n this.wireEvent();\n };\n Mention.prototype.wireEvent = function () {\n EventHandler.add(this.inputElement, 'keyup', this.onKeyUp, this);\n this.bindCommonEvent();\n };\n Mention.prototype.unWireEvent = function () {\n EventHandler.remove(this.inputElement, 'keyup', this.onKeyUp);\n this.unBindCommonEvent();\n };\n Mention.prototype.bindCommonEvent = function () {\n if (!Browser.isDevice) {\n this.inputElement.addEventListener('keydown', this.keyDownHandler.bind(this), !this.isRTE);\n }\n };\n /**\n * Hides the spinner loader.\n *\n * @private\n * @returns {void}\n */\n Mention.prototype.hideSpinner = function () {\n this.hideWaitingSpinner();\n };\n Mention.prototype.hideWaitingSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n }\n if (!isNullOrUndefined(this.spinnerTemplate) && !isNullOrUndefined(this.spinnerTemplateElement)) {\n detach(this.spinnerTemplateElement);\n }\n };\n Mention.prototype.checkAndUpdateInternalComponent = function (targetElement) {\n if (!this.isVue && targetElement.classList.contains('e-richtexteditor')) {\n return targetElement.querySelector('.e-content');\n }\n if (this.isVue && targetElement.nodeName === 'TEXTAREA' && targetElement.classList.contains('e-rte-hidden')) {\n var parentElement = targetElement.parentElement;\n if (parentElement && parentElement.classList.contains('e-richtexteditor')) {\n return parentElement.querySelector('.e-content');\n }\n }\n if (targetElement && targetElement.parentElement && targetElement.parentElement.classList.contains('e-rte-content')) {\n this.isRTE = true;\n this.keyEventName = 'click';\n }\n return targetElement;\n };\n /**\n * Shows the spinner loader.\n *\n * @returns {void}\n */\n Mention.prototype.showWaitingSpinner = function () {\n if (!isNullOrUndefined(this.popupObj)) {\n if (isNullOrUndefined(this.spinnerTemplate) && isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = this.popupObj.element;\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n if (!isNullOrUndefined(this.spinnerTemplate)) {\n this.setSpinnerTemplate();\n }\n }\n };\n Mention.prototype.keyDownHandler = function (e) {\n var isKeyAction = true;\n switch (e.keyCode) {\n case 38:\n e.action = e.altKey ? 'hide' : 'up';\n break;\n case 40:\n e.action = e.altKey ? 'open' : 'down';\n break;\n case 33:\n e.action = 'pageUp';\n break;\n case 34:\n e.action = 'pageDown';\n break;\n case 36:\n e.action = 'home';\n break;\n case 35:\n e.action = 'end';\n break;\n case 9:\n e.action = e.shiftKey ? 'close' : 'tab';\n break;\n case 27:\n e.action = 'escape';\n break;\n case 32:\n e.action = 'space';\n break;\n case 13:\n e.action = 'enter';\n break;\n default:\n isKeyAction = false;\n break;\n }\n if (isKeyAction) {\n this.keyActionHandler(e);\n }\n };\n Mention.prototype.keyActionHandler = function (e) {\n var isNavigation = (e.action === 'down' || e.action === 'up' || e.action === 'pageUp' || e.action === 'pageDown'\n || e.action === 'home' || e.action === 'end');\n var isTabAction = e.action === 'tab' || e.action === 'close';\n if (this.list === undefined && !this.isRequested && !isTabAction && e.action !== 'escape' && e.action !== 'space' && this.mentionChar.charCodeAt(0) === this.getLastLetter(this.getTextRange()).charCodeAt(0)) {\n this.renderList();\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n isNavigation && this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if (e.action === 'escape') {\n e.preventDefault();\n }\n this.isSelected = e.action === 'escape' ? false : this.isSelected;\n switch (e.action) {\n case 'down':\n case 'up':\n this.isUpDownKey = true;\n this.updateUpDownAction(e);\n break;\n case 'tab':\n if (this.isPopupOpen) {\n e.preventDefault();\n var li = this.list.querySelector('.' + dropDownBaseClasses.selected);\n if (li) {\n this.setSelection(li, e);\n }\n if (this.isPopupOpen) {\n this.hidePopup(e);\n }\n }\n break;\n case 'enter':\n if (this.isPopupOpen) {\n e.preventDefault();\n if (this.popupObj && this.popupObj.element.contains(this.selectedLI)) {\n this.updateSelectedItem(this.selectedLI, e, false, true);\n }\n }\n break;\n case 'escape':\n if (this.isPopupOpen) {\n this.hidePopup(e);\n }\n break;\n }\n };\n Mention.prototype.updateUpDownAction = function (e) {\n if (this.fields.disabled && this.list && this.list.querySelectorAll('.e-list-item:not(.e-disabled)').length === 0) {\n return;\n }\n var focusEle = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (this.isSelectFocusItem(focusEle)) {\n this.setSelection(focusEle, e);\n }\n else if (!isNullOrUndefined(this.liCollections)) {\n var li = this.list.querySelector('.' + dropDownBaseClasses.selected);\n if (!isNullOrUndefined(li)) {\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n }\n var index = e.action === 'down' ? this.activeIndex + 1 : this.activeIndex - 1;\n var startIndex = 0;\n startIndex = e.action === 'down' && isNullOrUndefined(this.activeIndex) ? 0 : this.liCollections.length - 1;\n index = index < 0 ? this.liCollections.length - 1 : index === this.liCollections.length ? 0 : index;\n var nextItem = isNullOrUndefined(this.activeIndex) ?\n this.liCollections[startIndex] : this.liCollections[index];\n if (!isNullOrUndefined(nextItem)) {\n this.setSelection(nextItem, e);\n }\n }\n var itemIndex;\n for (var index = 0; index < this.liCollections.length; index++) {\n if (this.liCollections[index].classList.contains(dropDownBaseClasses.focus)\n || this.liCollections[index].classList.contains(dropDownBaseClasses.selected)) {\n itemIndex = index;\n break;\n }\n }\n if (itemIndex != null && this.isDisabledElement(this.liCollections[itemIndex])) {\n this.updateUpDownAction(e);\n }\n if (this.isPopupOpen) {\n e.preventDefault();\n }\n };\n Mention.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n Mention.prototype.unBindCommonEvent = function () {\n if (!Browser.isDevice) {\n this.inputElement.removeEventListener('keydown', this.keyDownHandler.bind(this), !this.isRTE);\n }\n };\n Mention.prototype.onKeyUp = function (e) {\n var rangetextContent;\n if (this.isUpDownKey && this.isPopupOpen && e.keyCode === 229) {\n this.isUpDownKey = false;\n return;\n }\n this.isTyped = e.code !== 'Enter' && e.code !== 'Space' && e.code !== 'ArrowDown' && e.code !== 'ArrowUp' ? true : false;\n var isRteImage = document.activeElement.parentElement && document.activeElement.parentElement.querySelector('.e-rte-image') ? true : false;\n if (document.activeElement != this.inputElement && !isRteImage) {\n this.inputElement.focus();\n }\n if (this.isContentEditable(this.inputElement)) {\n this.range = this.getCurrentRange();\n rangetextContent = this.range.startContainer.textContent.split('');\n }\n var currentRange = this.getTextRange();\n var lastWordRange = this.getLastLetter(currentRange);\n var lastTwoLetters = this.mentionChar.toString() + this.mentionChar.toString();\n // eslint-disable-next-line security/detect-non-literal-regexp\n var Regex = new RegExp(this.mentionChar.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'g');\n var charRegex = new RegExp('[a-zA-Z]', 'g');\n if (e.key === 'Shift' || e.keyCode === 37 || e.keyCode === 39) {\n return;\n }\n if (this.beforePopupOpen && this.isPopupOpen && lastWordRange == lastTwoLetters) {\n this.hidePopup();\n return;\n }\n if ((!currentRange || !lastWordRange) || e.code === 'Enter' || e.keyCode === 27 ||\n (lastWordRange.match(Regex) && lastWordRange.match(Regex).length > 1) ||\n (this.isContentEditable(this.inputElement) && this.range.startContainer &&\n this.range.startContainer.previousElementSibling && this.range.startContainer.previousElementSibling.tagName !== 'BR' && this.range.startContainer.textContent.split('').length > 0 &&\n (rangetextContent.length === 1 || rangetextContent[rangetextContent.length - 2].indexOf('') === -1 ||\n this.range.startContainer.nodeType === 1))) {\n if (this.isPopupOpen && this.allowSpaces && currentRange && currentRange.trim() !== '' && charRegex.test(currentRange) && currentRange.indexOf(this.mentionChar) !== -1\n && !this.isMatchedText() && (currentRange.length > 1 && currentRange.replace(/\\u00A0/g, ' ').charAt(currentRange.length - 2) !== ' ') &&\n (this.list && this.list.querySelectorAll('ul').length > 0) && e.code !== 'Enter') {\n this.queryString = currentRange.substring(currentRange.lastIndexOf(this.mentionChar) + 1).replace('\\u00a0', ' ');\n this.searchLists(e);\n }\n else if (this.isPopupOpen && (!this.allowSpaces || !lastWordRange) && (e.code !== 'ArrowDown' && e.code !== 'ArrowUp')) {\n this.hidePopup();\n this.lineBreak = true;\n }\n return;\n }\n if (lastWordRange.includes(this.mentionChar)) {\n this.queryString = lastWordRange.replace(this.mentionChar, '');\n }\n if (this.mentionChar.charCodeAt(0) === lastWordRange.charCodeAt(0) &&\n this.queryString !== '' && e.keyCode !== 38 && e.keyCode !== 40 && !this.lineBreak) {\n this.searchLists(e);\n if (!this.isPopupOpen && this.queryString.length >= this.minLength) {\n if (!this.isContentEditable(this.inputElement)) {\n this.showPopup();\n }\n else if (this.isContentEditable(this.inputElement) && this.range && this.range.startContainer !== this.inputElement && e.keyCode !== 9) {\n this.showPopup();\n }\n }\n }\n else if (lastWordRange.indexOf(this.mentionChar) === 0 && !this.isPopupOpen && e.keyCode !== 8 && (!this.popupObj ||\n (isNullOrUndefined(this.target) && !document.body.contains(this.popupObj.element) ||\n !isNullOrUndefined(this.target) && document.body.contains(this.popupObj.element)))) {\n if (this.initRemoteRender && this.list && this.list.classList.contains('e-nodata')) {\n this.searchLists(e);\n }\n this.resetList(this.dataSource, this.fields);\n if (isNullOrUndefined(this.list)) {\n this.initValue();\n }\n if (!this.isPopupOpen && e.keyCode !== 38 && e.keyCode !== 40 && this.queryString.length >= this.minLength) {\n this.didPopupOpenByTypingInitialChar = true;\n this.showPopup();\n if (this.initRemoteRender && this.list.querySelectorAll('li').length === 0) {\n this.showWaitingSpinner();\n }\n this.lineBreak = false;\n }\n }\n else if (this.allowSpaces && this.queryString !== '' && currentRange && currentRange.trim() !== '' && currentRange.replace('\\u00a0', ' ').lastIndexOf(' ') < currentRange.length - 1 &&\n e.keyCode !== 38 && e.keyCode !== 40 && e.keyCode !== 8 && (this.mentionChar.charCodeAt(0) === lastWordRange.charCodeAt(0) || (this.liCollections && this.liCollections.length > 0))) {\n this.queryString = currentRange.substring(currentRange.lastIndexOf(this.mentionChar) + 1).replace('\\u00a0', ' ');\n this.searchLists(e);\n }\n else if (this.queryString === '' && this.isPopupOpen && e.keyCode !== 38 && e.keyCode !== 40 && this.mentionChar.charCodeAt(0) === lastWordRange.charCodeAt(0)) {\n this.searchLists(e);\n if (!this.isListResetted) {\n this.resetList(this.dataSource, this.fields);\n }\n }\n this.isListResetted = false;\n };\n Mention.prototype.isMatchedText = function () {\n var isMatched = false;\n for (var i = 0; i < (this.liCollections && this.liCollections.length); i++) {\n if (this.getTextRange() &&\n this.getTextRange().substring(this.getTextRange().lastIndexOf(this.mentionChar) + 1).replace('\\u00a0', ' ').trim() === this.liCollections[i].getAttribute('data-value').toLowerCase()) {\n isMatched = true;\n }\n }\n return isMatched;\n };\n Mention.prototype.getCurrentRange = function () {\n this.range = this.inputElement.ownerDocument.getSelection().getRangeAt(0);\n return this.range;\n };\n Mention.prototype.searchLists = function (e) {\n var _this = this;\n this.isDataFetched = false;\n if (isNullOrUndefined(this.list)) {\n _super.prototype.render.call(this);\n this.unWireListEvents();\n this.wireListEvents();\n }\n if (e.type !== 'mousedown' && (e.keyCode === 40 || e.keyCode === 38)) {\n this.queryString = this.queryString === '' ? null : this.queryString;\n this.beforePopupOpen = true;\n this.resetList(this.dataSource, this.fields);\n return;\n }\n this.isSelected = false;\n this.activeIndex = null;\n var eventArgs = {\n preventDefaultAction: false,\n text: this.queryString,\n updateData: function (dataSource, query, fields) {\n if (eventArgs.cancel) {\n return;\n }\n _this.isFiltered = true;\n _this.filterAction(dataSource, query, fields);\n },\n cancel: false\n };\n this.trigger('filtering', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel && !_this.isFiltered && !eventArgs.preventDefaultAction) {\n _this.filterAction(_this.dataSource, null, _this.fields);\n }\n });\n };\n Mention.prototype.filterAction = function (dataSource, query, fields) {\n this.beforePopupOpen = true;\n if (this.queryString.length >= this.minLength) {\n this.resetList(dataSource, fields, query);\n this.isListResetted = true;\n }\n else {\n if (this.isPopupOpen) {\n this.hidePopup();\n }\n this.beforePopupOpen = false;\n }\n this.setDataIndex();\n this.renderReactTemplates();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Mention.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isActive) {\n if (!isNullOrUndefined(ulElement)) {\n attributes(ulElement, { 'id': this.inputElement.id + '_options', 'role': 'listbox', 'aria-hidden': 'false' });\n }\n var focusItem = this.fields.disabled ? ulElement.querySelector('.' + dropDownBaseClasses.li + ':not(.e-disabled)') : ulElement.querySelector('.' + dropDownBaseClasses.li);\n if (focusItem) {\n focusItem.classList.add(dropDownBaseClasses.selected);\n this.selectedLI = focusItem;\n var value = this.getFormattedValue(focusItem.getAttribute('data-value'));\n this.selectEventCallback(focusItem, this.getDataByValue(value), value, true);\n }\n if (this.beforePopupOpen && this.isPopupOpen) {\n if (!isNullOrUndefined(this.popupObj.element)) {\n this.popupObj.element.remove();\n }\n this.renderPopup();\n }\n }\n };\n Mention.prototype.setDataIndex = function () {\n for (var i = 0; this.liCollections && i < this.liCollections.length; i++) {\n this.liCollections[i].setAttribute('data-index', i.toString());\n }\n };\n Mention.prototype.listOption = function (dataSource, fieldsSettings) {\n var _this = this;\n var fields = _super.prototype.listOption.call(this, dataSource, fieldsSettings);\n if (isNullOrUndefined(fields.itemCreated)) {\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n if (_this.inputElement.tagName === _this.getNgDirective() && _this.itemTemplate) {\n setTimeout(function () {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }, 0);\n }\n else {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n }\n };\n }\n else {\n var itemCreated_1 = fields.itemCreated;\n fields.itemCreated = function (e) {\n if (_this.highlight) {\n highlightSearch(e.item, _this.queryString, _this.ignoreCase, _this.filterType);\n }\n itemCreated_1.apply(_this, [e]);\n };\n }\n return fields;\n };\n Mention.prototype.elementValue = function () {\n if (!this.isContentEditable(this.inputElement)) {\n return this.inputElement.value.replace(this.mentionChar, '');\n }\n else {\n return this.inputElement.textContent.replace(this.mentionChar, '');\n }\n };\n Mention.prototype.getQuery = function (query) {\n var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n var filterType = (this.queryString === '' && !isNullOrUndefined(this.elementValue())) ? 'equal' : this.filterType;\n var queryString = (this.queryString === '' && !isNullOrUndefined(this.elementValue())) ?\n this.elementValue() : this.queryString;\n if (this.isFiltered) {\n return filterQuery;\n }\n if (this.queryString !== null && this.queryString !== '') {\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n else {\n var mapping = !isNullOrUndefined(this.fields.text) ? this.fields.text : '';\n filterQuery.where(mapping, filterType, queryString, this.ignoreCase, this.ignoreAccent);\n }\n }\n if (!isNullOrUndefined(this.suggestionCount)) {\n // Since defualt value of suggestioncount is 25, checked the condition\n if (this.suggestionCount !== 25) {\n for (var queryElements = 0; queryElements < filterQuery.queries.length; queryElements++) {\n if (filterQuery.queries[queryElements].fn === 'onTake') {\n filterQuery.queries.splice(queryElements, 1);\n }\n }\n }\n filterQuery.take(this.suggestionCount);\n }\n return filterQuery;\n };\n Mention.prototype.renderHightSearch = function () {\n if (this.highlight) {\n for (var i = 0; i < this.liCollections.length; i++) {\n var isHighlight = this.ulElement.querySelector('.e-active');\n if (!isHighlight) {\n revertHighlightSearch(this.liCollections[i]);\n highlightSearch(this.liCollections[i], this.queryString, this.ignoreCase, this.filterType);\n }\n }\n }\n };\n Mention.prototype.getTextRange = function () {\n var text;\n if (!this.isContentEditable(this.inputElement)) {\n var component = this.inputElement;\n if (!isNullOrUndefined(component)) {\n var startPos = component.selectionStart;\n if (component.value && startPos >= 0) {\n text = component.value.substring(0, startPos);\n }\n }\n }\n else {\n if (this.range) {\n var selectedElem = this.range.startContainer;\n if (!isNullOrUndefined(selectedElem)) {\n var workingNodeContent = selectedElem.textContent;\n var selectStartOffset = this.range.startOffset;\n if (workingNodeContent && selectStartOffset >= 0) {\n text = workingNodeContent.substring(0, selectStartOffset);\n }\n }\n }\n }\n return text;\n };\n Mention.prototype.getLastLetter = function (text) {\n if (isNullOrUndefined(text)) {\n return '';\n }\n var textValue = text.replace(/\\u00A0/g, ' ');\n var words = textValue.split(/\\s+/);\n var wordCnt = words.length - 1;\n return words[wordCnt].trim();\n };\n Mention.prototype.isContentEditable = function (element) {\n return element && element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA';\n };\n /**\n * Opens the popup that displays the list of items.\n *\n * @returns {void}\n */\n Mention.prototype.showPopup = function () {\n this.beforePopupOpen = true;\n if (document.activeElement != this.inputElement) {\n this.inputElement.focus();\n }\n this.queryString = this.didPopupOpenByTypingInitialChar ? this.queryString : '';\n this.didPopupOpenByTypingInitialChar = false;\n if (this.isContentEditable(this.inputElement)) {\n this.range = this.getCurrentRange();\n }\n if (!this.isTyped) {\n this.resetList(this.dataSource, this.fields);\n }\n if (isNullOrUndefined(this.list)) {\n this.initValue();\n }\n this.renderPopup();\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElementID });\n if (this.selectedElementID == null) {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Hides the popup if it is in an open state.\n *\n * @returns {void}\n */\n Mention.prototype.hidePopup = function (e) {\n this.removeSelection();\n this.closePopup(0, e);\n };\n Mention.prototype.closePopup = function (delay, e) {\n var _this = this;\n if (!(this.popupObj && document.body.contains(this.popupObj.element) && this.beforePopupOpen)) {\n return;\n }\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-activedescendant');\n this.beforePopupOpen = false;\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var popupInstance = this.popupObj;\n var eventArgs = { popup: popupInstance, cancel: false, animation: animModel, event: e || null };\n this.trigger('closed', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel && _this.popupObj) {\n if (_this.isPopupOpen) {\n _this.popupObj.hide(new Animation(eventArgs.animation));\n }\n else {\n _this.destroyPopup();\n }\n }\n });\n };\n Mention.prototype.renderPopup = function () {\n var _this = this;\n var args = { cancel: false };\n this.trigger('beforeOpen', args, function (args) {\n if (!args.cancel) {\n var popupEle_1;\n if (isNullOrUndefined(_this.target)) {\n popupEle_1 = _this.createElement('div', {\n id: _this.inputElement.id + '_popup', className: 'e-mention e-popup ' + (_this.cssClass != null ? _this.cssClass : '')\n });\n }\n else {\n popupEle_1 = _this.element;\n if (_this.cssClass != null) {\n addClass([popupEle_1], _this.cssClass.split(' '));\n }\n }\n if (!isNullOrUndefined(_this.target)) {\n popupEle_1.id = _this.inputElement.id + '_popup';\n }\n _this.listHeight = formatUnit(_this.popupHeight);\n if (!isNullOrUndefined(_this.list.querySelector('li')) && !_this.initRemoteRender) {\n var li = _this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (!isNullOrUndefined(li)) {\n _this.selectedLI = li;\n var value = _this.getFormattedValue(li.getAttribute('data-value'));\n _this.selectEventCallback(li, _this.getDataByValue(value), value, true);\n }\n }\n append([_this.list], popupEle_1);\n if (_this.inputElement.parentElement) {\n var rteRootElement = _this.inputElement.parentElement.closest('.e-richtexteditor');\n if (rteRootElement && popupEle_1.firstElementChild && popupEle_1.firstElementChild.childElementCount > 0) {\n popupEle_1.firstElementChild.setAttribute('aria-owns', rteRootElement.id);\n addClass([popupEle_1], 'e-rte-elements');\n }\n }\n if ((!_this.popupObj || !document.body.contains(_this.popupObj.element)) ||\n !document.contains(popupEle_1) && isNullOrUndefined(_this.target)) {\n document.body.appendChild(popupEle_1);\n }\n var coordinates_1;\n popupEle_1.style.visibility = 'hidden';\n _this.setHeight(popupEle_1);\n var offsetValue = 0;\n var left = 0;\n _this.initializePopup(popupEle_1, offsetValue, left);\n _this.checkCollision(popupEle_1);\n popupEle_1.style.visibility = 'visible';\n var popupLeft_1 = popupEle_1.parentElement.offsetWidth - popupEle_1.offsetWidth;\n var popupHeight_1 = popupEle_1.offsetHeight;\n addClass([popupEle_1], ['e-mention', 'e-popup', 'e-popup-close']);\n if (!isNullOrUndefined(_this.list)) {\n _this.unWireListEvents();\n _this.wireListEvents();\n }\n _this.selectedElementID = _this.selectedLI ? _this.selectedLI.id : null;\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options', 'aria-activedescendant': _this.selectedElementID });\n if (_this.selectedElementID == null) {\n _this.inputElement.removeAttribute('aria-activedescendant');\n }\n var animModel = { name: 'FadeIn', duration: 100 };\n _this.beforePopupOpen = true;\n var popupInstance = _this.popupObj;\n var eventArgs = { popup: popupInstance, cancel: false, animation: animModel };\n _this.trigger('opened', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.renderReactTemplates();\n if (_this.popupObj) {\n _this.popupObj.show(new Animation(eventArgs.animation), (_this.zIndex === 1000) ? _this.inputElement : null);\n }\n if (isNullOrUndefined(_this.getTriggerCharPosition())) {\n return;\n }\n coordinates_1 = _this.getCoordinates(_this.inputElement, _this.getTriggerCharPosition());\n if (!_this.isCollided) {\n popupEle_1.style.cssText = 'top: '.concat(coordinates_1.top.toString(), 'px;\\n left: ').concat(coordinates_1.left.toString(), 'px;\\nposition: absolute;\\n display: block;');\n }\n else {\n if (_this.collision.length > 0 && _this.collision.indexOf('right') > -1 && _this.collision.indexOf('bottom') === -1) {\n popupEle_1.style.cssText = 'top: '.concat(coordinates_1.top.toString(), 'px;\\n left: ').concat(popupLeft_1.toString(), 'px;\\nposition: absolute;\\n display: block;');\n }\n else if (_this.collision && _this.collision.length > 0 && _this.collision.indexOf('bottom') > -1 && _this.collision.indexOf('right') === -1) {\n popupEle_1.style.left = formatUnit(coordinates_1.left);\n popupEle_1.style.top = formatUnit(coordinates_1.top - parseInt(popupHeight_1.toString()));\n }\n else if (_this.collision && _this.collision.length > 0 && _this.collision.indexOf('bottom') > -1 && _this.collision.indexOf('right') > -1) {\n popupEle_1.style.left = formatUnit(popupLeft_1);\n popupEle_1.style.top = formatUnit(coordinates_1.top - parseInt(popupHeight_1.toString()));\n }\n else {\n popupEle_1.style.left = formatUnit(coordinates_1.left);\n popupEle_1.style.top = formatUnit(coordinates_1.top - parseInt(_this.popupHeight.toString()));\n }\n _this.isCollided = false;\n _this.collision = [];\n }\n popupEle_1.style.width = _this.popupWidth !== '100%' && !isNullOrUndefined(_this.popupWidth) ? formatUnit(_this.popupWidth) : 'auto';\n _this.setHeight(popupEle_1);\n popupEle_1.style.zIndex = _this.zIndex === 1000 ? getZindexPartial(popupEle_1).toString() : _this.zIndex.toString();\n }\n else {\n _this.beforePopupOpen = false;\n _this.destroyPopup();\n }\n });\n }\n else {\n _this.beforePopupOpen = false;\n }\n });\n };\n Mention.prototype.setHeight = function (popupEle) {\n if (this.popupHeight !== 'auto' && this.list) {\n this.list.style.maxHeight = (parseInt(this.listHeight, 10) - 2).toString() + 'px'; // due to box-sizing property\n popupEle.style.maxHeight = formatUnit(this.popupHeight);\n }\n else {\n popupEle.style.height = 'auto';\n }\n };\n Mention.prototype.checkCollision = function (popupEle) {\n if (!Browser.isDevice || (Browser.isDevice && !(this.getModuleName() === 'mention'))) {\n var coordinates = this.getCoordinates(this.inputElement, this.getTriggerCharPosition());\n this.collision = isCollide(popupEle, null, coordinates.left, coordinates.top);\n if (this.collision.length > 0) {\n popupEle.style.marginTop = -parseInt(getComputedStyle(popupEle).marginTop, 10) + 'px';\n this.isCollided = true;\n }\n this.popupObj.resolveCollision();\n }\n };\n Mention.prototype.getTriggerCharPosition = function () {\n var mostRecentTriggerCharPos;\n var currentRange = this.getTextRange();\n if (currentRange !== undefined && currentRange !== null) {\n mostRecentTriggerCharPos = 0;\n var idx = currentRange.lastIndexOf(this.mentionChar);\n if (idx >= mostRecentTriggerCharPos) {\n mostRecentTriggerCharPos = idx;\n }\n }\n return mostRecentTriggerCharPos ? mostRecentTriggerCharPos : 0;\n };\n Mention.prototype.initializePopup = function (element, offsetValue, left) {\n var _this = this;\n this.popupObj = new Popup(element, {\n width: this.setWidth(), targetType: 'relative',\n relateTo: this.inputElement, collision: { X: 'flip', Y: 'flip' }, offsetY: offsetValue,\n enableRtl: this.enableRtl, offsetX: left, position: { X: 'left', Y: 'bottom' }, actionOnScroll: 'hide',\n zIndex: this.zIndex,\n close: function () {\n _this.destroyPopup();\n },\n open: function () {\n EventHandler.add(document, 'mousedown', _this.onDocumentClick, _this);\n _this.isPopupOpen = true;\n _this.setDataIndex();\n }\n });\n };\n Mention.prototype.setWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.inputElement.offsetWidth * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n Mention.prototype.destroyPopup = function () {\n this.isPopupOpen = false;\n this.popupObj.destroy();\n if (isNullOrUndefined(this.target)) {\n detach(this.popupObj.element);\n }\n else {\n this.popupObj.element.innerHTML = '';\n this.popupObj.element.removeAttribute('style');\n this.popupObj.element.removeAttribute('aria-disabled');\n }\n if (this.list.classList.contains('e-nodata')) {\n this.list = null;\n }\n };\n Mention.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, '#' + this.popupObj.element.id))) {\n this.hidePopup(e);\n }\n };\n Mention.prototype.getCoordinates = function (element, position) {\n var properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX', 'overflowY', 'borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch', 'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily', 'textAlign', 'textTransform', 'textIndent', 'textDecoration', 'letterSpacing', 'wordSpacing'];\n var div;\n var span;\n var range;\n var globalRange;\n var coordinates;\n var computed;\n var rect;\n if (!this.isContentEditable(this.inputElement)) {\n div = this.createElement('div', { className: 'e-form-mirror-div' });\n document.body.appendChild(div);\n computed = getComputedStyle(element);\n div.style.position = 'absolute';\n div.style.visibility = 'hidden';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n properties.forEach(function (prop) {\n // eslint-disable-next-line security/detect-object-injection\n div.style[prop] = computed[prop];\n });\n div.textContent = element.value.substring(0, position);\n if (this.inputElement.nodeName === 'INPUT') {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n }\n span = this.createElement('span');\n span.textContent = element.value.substring(position) || '.';\n div.appendChild(span);\n rect = element.getBoundingClientRect();\n }\n else {\n var selectedNodePosition = this.getTriggerCharPosition();\n globalRange = this.range;\n range = document.createRange();\n if (this.getTextRange() && this.getTextRange().lastIndexOf(this.mentionChar) !== -1) {\n range.setStart(globalRange.startContainer, selectedNodePosition);\n range.setEnd(globalRange.startContainer, selectedNodePosition);\n }\n else {\n range.setStart(globalRange.startContainer, globalRange.startOffset);\n range.setEnd(globalRange.startContainer, globalRange.endOffset);\n }\n this.isTyped = false;\n range.collapse(false);\n rect = range.getBoundingClientRect().top === 0 ? range.startContainer.getClientRects()[0] : range.getBoundingClientRect();\n }\n var rectTop = rect.top;\n var rectLeft = rect.left;\n var iframes = document.querySelectorAll('iframe');\n if (iframes.length > 0) {\n for (var i = 0; i < iframes.length; i++) {\n // eslint-disable-next-line security/detect-object-injection\n var iframe = iframes[i];\n if (iframe.contentDocument && iframe.contentDocument.contains(element)) {\n var iframeRect = iframe.getBoundingClientRect();\n rectTop += iframeRect.top;\n rectLeft += iframeRect.left;\n }\n }\n }\n var doc = document.documentElement;\n var windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n var windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n var width = 0;\n if (!isNullOrUndefined(range) && range.getBoundingClientRect().top === 0) {\n for (var i = 0; i < this.range.startContainer.childNodes.length; i++) {\n if (this.range.startContainer.childNodes[i].nodeType !== Node.TEXT_NODE && this.range.startContainer.childNodes[i].textContent.trim() !== '') {\n width += this.range.startContainer.childNodes[i].getClientRects()[0].width;\n }\n else if (this.range.startContainer.childNodes[i].textContent !== '') {\n var span_1 = document.createElement(\"span\");\n span_1.innerHTML = this.range.startContainer.childNodes[i].nodeValue;\n document.body.appendChild(span_1);\n var textNodeWidth = span_1.offsetWidth;\n document.body.removeChild(span_1);\n width += textNodeWidth;\n }\n }\n }\n if (!this.isContentEditable(this.inputElement)) {\n coordinates = {\n top: rectTop + windowTop + span.offsetTop + parseInt(computed.borderTopWidth, 10) +\n parseInt(computed.fontSize, 10) + 3 - element.scrollTop - (this.isCollided ? 10 : 0),\n left: rectLeft + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth, 10)\n };\n document.body.removeChild(div);\n }\n else {\n if (this.collision && this.collision.length > 0 && this.collision.indexOf('right') > -1 && this.collision.indexOf('bottom') === -1) {\n coordinates = {\n top: rectTop + windowTop + parseInt(getComputedStyle(this.inputElement).fontSize, 10),\n left: rectLeft + windowLeft + width\n };\n }\n else {\n coordinates = {\n top: rectTop + windowTop + parseInt(getComputedStyle(this.inputElement).fontSize, 10) - (this.isCollided ? 10 : 0),\n left: rectLeft + windowLeft + width\n };\n }\n }\n return coordinates;\n };\n Mention.prototype.initValue = function () {\n this.isDataFetched = false;\n this.renderList();\n if (this.dataSource instanceof DataManager) {\n this.initRemoteRender = true;\n }\n else {\n this.updateValues();\n }\n };\n Mention.prototype.updateValues = function () {\n var li = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (!isNullOrUndefined(li)) {\n this.setSelection(li, null);\n }\n };\n Mention.prototype.renderList = function () {\n _super.prototype.render.call(this);\n this.unWireListEvents();\n this.wireListEvents();\n };\n /**\n * Event binding for list\n *\n * @returns {void}\n */\n Mention.prototype.wireListEvents = function () {\n EventHandler.add(this.list, this.keyEventName, this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n };\n /**\n * Event un binding for list items.\n *\n * @returns {void}\n */\n Mention.prototype.unWireListEvents = function () {\n EventHandler.remove(this.list, this.keyEventName, this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n };\n Mention.prototype.onMouseClick = function (e) {\n var target = e.target;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (!this.isValidLI(li) || this.isDisabledElement(li)) {\n return;\n }\n this.isSelected = true;\n this.setSelection(li, e);\n var delay = 100;\n this.closePopup(delay, e);\n this.inputElement.focus();\n if (!this.isRTE) {\n e.preventDefault();\n }\n };\n Mention.prototype.updateSelectedItem = function (li, e, preventSelect, isSelection) {\n var _this = this;\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n var value = this.getFormattedValue(li.getAttribute('data-value'));\n var selectedData = this.getDataByValue(value);\n if (!preventSelect && !isNullOrUndefined(e) && !(e.action === \"down\" || e.action === \"up\")) {\n var items = this.detachChanges(selectedData);\n this.isSelected = true;\n var eventArgs = {\n e: e,\n item: li,\n itemData: items,\n isInteracted: e ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n li.classList.remove(dropDownBaseClasses.selected);\n _this.isSelected = false;\n _this.isSelectCancel = true;\n }\n else {\n _this.selectEventCallback(li, selectedData, value);\n if (isSelection) {\n _this.setSelectOptions(li, e);\n }\n }\n });\n }\n else {\n this.selectEventCallback(li, selectedData, value);\n if (isSelection) {\n this.setSelectOptions(li, e);\n }\n }\n };\n Mention.prototype.setSelection = function (li, e) {\n if (this.isValidLI(li) && (!li.classList.contains(dropDownBaseClasses.selected) || (this.isPopupOpen && this.isSelected\n && li.classList.contains(dropDownBaseClasses.selected)))) {\n this.updateSelectedItem(li, e, false, true);\n }\n else {\n this.setSelectOptions(li, e);\n }\n };\n Mention.prototype.setSelectOptions = function (li, e) {\n if (this.list) {\n this.removeHover();\n }\n this.previousSelectedLI = (!isNullOrUndefined(this.selectedLI)) ? this.selectedLI : null;\n this.selectedLI = li;\n if (this.isPopupOpen && !isNullOrUndefined(this.selectedLI)) {\n this.setScrollPosition(e);\n }\n if (e && (e.keyCode === 38 || e.keyCode === 40)) {\n return;\n }\n if (isNullOrUndefined(e) || this.setValue(e)) {\n return;\n }\n };\n Mention.prototype.setScrollPosition = function (e) {\n if (!isNullOrUndefined(e)) {\n switch (e.action) {\n case 'pageDown':\n case 'down':\n case 'end':\n this.scrollBottom();\n break;\n default:\n this.scrollTop();\n break;\n }\n }\n else {\n this.scrollBottom(true);\n }\n };\n Mention.prototype.scrollBottom = function (isInitial) {\n if (!isNullOrUndefined(this.selectedLI)) {\n var currentOffset = this.list.offsetHeight;\n var nextBottom = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n nextOffset = isInitial ? nextOffset + parseInt(getComputedStyle(this.list).paddingTop, 10) * 2 : nextOffset;\n var boxRange = this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop;\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextBottom > currentOffset || !(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = nextOffset;\n }\n }\n };\n Mention.prototype.scrollTop = function () {\n if (!isNullOrUndefined(this.selectedLI)) {\n var nextOffset = this.selectedLI.offsetTop - this.list.scrollTop;\n nextOffset = this.fields.groupBy && nextOffset;\n var boxRange = (this.selectedLI.offsetTop + this.selectedLI.offsetHeight - this.list.scrollTop);\n if (this.activeIndex === 0) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0) {\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = this.selectedLI.offsetTop;\n }\n }\n };\n Mention.prototype.selectEventCallback = function (li, selectedData, value, selectLi) {\n this.previousItemData = (!isNullOrUndefined(this.itemData)) ? this.itemData : null;\n this.item = li;\n this.itemData = selectedData;\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (focusedItem) {\n removeClass([focusedItem], dropDownBaseClasses.focus);\n }\n if (selectLi) {\n addClass([li], dropDownBaseClasses.selected);\n }\n li.setAttribute('aria-selected', 'true');\n this.activeIndex = this.getIndexByValue(value);\n };\n Mention.prototype.detachChanges = function (value) {\n var items;\n if (typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number') {\n items = Object.defineProperties({}, {\n value: {\n value: value,\n enumerable: true\n },\n text: {\n value: value,\n enumerable: true\n }\n });\n }\n else {\n items = value;\n }\n return items;\n };\n Mention.prototype.setValue = function (e) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.isReact) {\n if (!isNullOrUndefined(this.displayTemplate)) {\n this.setDisplayTemplate();\n }\n this.updateMentionValue(e);\n return true;\n }\n else {\n if (!isNullOrUndefined(this.displayTemplate)) {\n this.setDisplayTemplate(e);\n }\n else {\n this.updateMentionValue(e);\n }\n return true;\n }\n };\n Mention.prototype.updateMentionValue = function (e) {\n var dataItem = this.getItemData();\n var textSuffix;\n var value;\n var endPos;\n var range;\n var globalRange;\n var selection = this.inputElement.ownerDocument.getSelection();\n var startPos = this.getTriggerCharPosition();\n textSuffix = typeof this.suffixText === 'string' ? this.suffixText : '';\n if (this.isSelectCancel) {\n this.isSelectCancel = false;\n return;\n }\n if (dataItem.text !== null) {\n value = this.mentionVal(dataItem.text);\n }\n if (!this.isContentEditable(this.inputElement)) {\n var myField = this.inputElement;\n var currentTriggerSnippet = this.getTextRange().substring(startPos + this.mentionChar.length, this.getTextRange().length);\n value += textSuffix;\n endPos = startPos + this.mentionChar.length;\n endPos += currentTriggerSnippet.length;\n myField.value = myField.value.substring(0, startPos) + value + myField.value.substring(endPos, myField.value.length);\n myField.selectionStart = startPos + value.length;\n myField.selectionEnd = startPos + value.length;\n if (this.isPopupOpen) {\n this.hidePopup();\n }\n this.onChangeEvent(e);\n }\n else {\n endPos = this.getTriggerCharPosition() + this.mentionChar.length;\n if (this.range && (this.range.startContainer.textContent.trim() !== this.mentionChar)) {\n endPos = this.range.endOffset;\n }\n globalRange = this.range;\n range = document.createRange();\n if (((this.getTextRange() && this.getTextRange().lastIndexOf(this.mentionChar) !== -1) || this.getTextRange() && this.getTextRange().trim() === this.mentionChar)) {\n range.setStart(globalRange.startContainer, startPos);\n range.setEnd(globalRange.startContainer, endPos);\n }\n else {\n if (globalRange.commonAncestorContainer.textContent.trim() !== '' && !isNullOrUndefined(globalRange.commonAncestorContainer.textContent.trim()) && this.getTextRange() && this.getTextRange().lastIndexOf(this.mentionChar) !== -1) {\n range.setStart(globalRange.startContainer, globalRange.startOffset - 1);\n range.setEnd(globalRange.startContainer, globalRange.endOffset - 1);\n }\n else {\n range.setStart(globalRange.startContainer, globalRange.startOffset);\n range.setEnd(globalRange.startContainer, globalRange.endOffset);\n }\n }\n this.isTyped = false;\n range.deleteContents();\n range.startContainer.parentElement.normalize();\n var element = this.createElement('div');\n element.innerHTML = value;\n var frag = document.createDocumentFragment();\n var node = void 0;\n var lastNode = void 0;\n // eslint-disable-next-line no-cond-assign\n while (node = element.firstChild) {\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n if (this.isPopupOpen) {\n this.hidePopup();\n }\n //New event to update the RichTextEditor value, when a mention item is selected using mouse click action.\n if (!isNullOrUndefined(e.pointerType) && e.pointerType === 'mouse') {\n var event_1 = new CustomEvent('content-changed', { detail: { click: true } });\n this.inputElement.dispatchEvent(event_1);\n }\n ;\n this.onChangeEvent(e);\n }\n };\n Mention.prototype.mentionVal = function (value) {\n var showChar = this.showMentionChar ? this.mentionChar : '';\n if (!isNullOrUndefined(this.displayTemplate) && !isNullOrUndefined(this.displayTempElement)) {\n value = this.displayTempElement.innerHTML;\n }\n if (this.isContentEditable(this.inputElement)) {\n if (Browser.isAndroid) {\n return '' + showChar + value + ''.concat(typeof this.suffixText === 'string' ? this.suffixText : ' ');\n }\n else {\n return '' + showChar + value + ''.concat(typeof this.suffixText === 'string' ? this.suffixText : ' ');\n }\n }\n else {\n return showChar + value;\n }\n };\n Mention.prototype.setDisplayTemplate = function (e) {\n var _this = this;\n var compiledString;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate(['displayTemplate']);\n if (this.displayTempElement) {\n detach(this.displayTempElement);\n this.displayTempElement = null;\n }\n }\n if (!this.displayTempElement) {\n this.displayTempElement = this.createElement('div');\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.isReact) {\n this.displayTempElement.innerHTML = '';\n }\n compiledString = compile(this.displayTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var displayCompTemp = compiledString(this.itemData, this, 'displayTemplate', this.displayTemplateId, this.isStringTemplate, null, this.displayTempElement);\n if (displayCompTemp && displayCompTemp.length > 0) {\n append(displayCompTemp, this.displayTempElement);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.isReact) {\n this.renderTemplates();\n }\n else {\n this.renderTemplates(function () {\n _this.updateMentionValue(e);\n });\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Mention.prototype.renderTemplates = function (callBack) {\n this.renderReactTemplates(callBack);\n };\n Mention.prototype.setSpinnerTemplate = function () {\n var _this = this;\n var compiledString;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate(['spinnerTemplate']);\n if (this.spinnerTemplateElement) {\n detach(this.spinnerTemplateElement);\n this.spinnerTemplateElement = null;\n }\n }\n if (!this.spinnerTemplateElement) {\n this.spinnerTemplateElement = this.createElement('div');\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.isReact) {\n this.spinnerTemplateElement.innerHTML = '';\n }\n compiledString = compile(this.spinnerTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var spinnerCompTemp = compiledString(null, this, 'spinnerTemplate', this.spinnerTemplateId, this.isStringTemplate, null, this.spinnerTemplateElement);\n if (spinnerCompTemp && spinnerCompTemp.length > 0) {\n for (var i = 0; i < spinnerCompTemp.length; i++) {\n this.spinnerTemplateElement.appendChild(spinnerCompTemp[i]);\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.isReact) {\n this.renderTemplates();\n this.popupObj.element.appendChild(this.spinnerTemplateElement);\n }\n else {\n this.renderTemplates(function () {\n _this.popupObj.element.appendChild(_this.spinnerTemplateElement);\n });\n }\n };\n Mention.prototype.onChangeEvent = function (eve) {\n this.isSelected = false;\n var items = this.detachMentionChanges(this.itemData);\n var preItems;\n if (typeof this.previousItemData === 'string' ||\n typeof this.previousItemData === 'boolean' ||\n typeof this.previousItemData === 'number') {\n preItems = Object.defineProperties({}, {\n value: {\n value: this.previousItemData,\n enumerable: true\n },\n text: {\n value: this.previousItemData,\n enumerable: true\n }\n });\n }\n else {\n preItems = this.previousItemData;\n }\n var eventArgs = {\n e: eve,\n item: this.item,\n itemData: items,\n previousItem: this.previousSelectedLI,\n previousItemData: preItems,\n isInteracted: eve ? true : false,\n value: this.item.innerHTML,\n element: this.inputElement\n };\n this.trigger('change', eventArgs);\n };\n Mention.prototype.detachMentionChanges = function (value) {\n var items;\n if (typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number') {\n items = Object.defineProperties({}, {\n value: {\n value: value,\n enumerable: true\n },\n text: {\n value: value,\n enumerable: true\n }\n });\n }\n else {\n items = value;\n }\n return items;\n };\n Mention.prototype.getItemData = function () {\n var fields = this.fields;\n var dataItem = null;\n dataItem = this.itemData;\n var dataValue;\n var dataText;\n if (!isNullOrUndefined(dataItem)) {\n dataValue = getValue(fields.value, dataItem);\n dataText = getValue(fields.text, dataItem);\n }\n var value = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataValue : dataItem);\n var text = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataText : dataItem);\n return { value: value, text: text };\n };\n Mention.prototype.removeSelection = function () {\n if (this.list) {\n var selectedItems = this.list.querySelectorAll('.' + dropDownBaseClasses.selected);\n if (selectedItems.length) {\n removeClass(selectedItems, dropDownBaseClasses.selected);\n selectedItems[0].removeAttribute('aria-selected');\n }\n }\n };\n Mention.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.setHover(currentLi);\n };\n Mention.prototype.setHover = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.hover)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n Mention.prototype.removeHover = function () {\n if (this.list) {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n }\n };\n Mention.prototype.isValidLI = function (li) {\n return (li && li.hasAttribute('role') && li.getAttribute('role') === 'option');\n };\n Mention.prototype.onMouseLeave = function () {\n this.removeHover();\n };\n /**\n * Search the entered text and show it in the suggestion list if available.\n *\n * @returns {void}\n */\n Mention.prototype.search = function (text, positionX, positionY) {\n if (this.isContentEditable(this.inputElement)) {\n this.range = this.getCurrentRange();\n }\n var currentRange = this.getTextRange();\n var lastWordRange = this.getLastLetter(currentRange);\n if ((this.ignoreCase && (text === lastWordRange || text === lastWordRange.toLowerCase()))\n || !this.ignoreCase && text === lastWordRange) {\n this.resetList(this.dataSource, this.fields);\n }\n else {\n if (this.isPopupOpen) {\n this.hidePopup();\n }\n return;\n }\n if (isNullOrUndefined(this.list)) {\n this.renderList();\n this.renderPopup();\n }\n else {\n this.showPopup();\n }\n this.popupObj.element.style.left = formatUnit(positionX);\n this.popupObj.element.style.top = formatUnit(positionY);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n Mention.prototype.destroy = function () {\n this.hidePopup();\n this.unWireEvent();\n if (this.list) {\n this.unWireListEvents();\n }\n if (this.inputElement && !this.inputElement.classList.contains('e-' + this.getModuleName())) {\n return;\n }\n this.previousSelectedLI = null;\n this.item = null;\n this.selectedLI = null;\n this.popupObj = null;\n _super.prototype.destroy.call(this);\n };\n Mention.prototype.getLocaleName = function () {\n return 'mention';\n };\n Mention.prototype.getNgDirective = function () {\n return 'EJS-MENTION';\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n Mention.prototype.getModuleName = function () {\n return 'mention';\n };\n __decorate([\n Property(null)\n ], Mention.prototype, \"cssClass\", void 0);\n __decorate([\n Property('@')\n ], Mention.prototype, \"mentionChar\", void 0);\n __decorate([\n Property(false)\n ], Mention.prototype, \"showMentionChar\", void 0);\n __decorate([\n Property(false)\n ], Mention.prototype, \"allowSpaces\", void 0);\n __decorate([\n Property(null)\n ], Mention.prototype, \"suffixText\", void 0);\n __decorate([\n Property(25)\n ], Mention.prototype, \"suggestionCount\", void 0);\n __decorate([\n Property(0)\n ], Mention.prototype, \"minLength\", void 0);\n __decorate([\n Property('None')\n ], Mention.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(true)\n ], Mention.prototype, \"ignoreCase\", void 0);\n __decorate([\n Property(false)\n ], Mention.prototype, \"highlight\", void 0);\n __decorate([\n Property()\n ], Mention.prototype, \"locale\", void 0);\n __decorate([\n Property('auto')\n ], Mention.prototype, \"popupWidth\", void 0);\n __decorate([\n Property('300px')\n ], Mention.prototype, \"popupHeight\", void 0);\n __decorate([\n Property(null)\n ], Mention.prototype, \"displayTemplate\", void 0);\n __decorate([\n Property(null)\n ], Mention.prototype, \"itemTemplate\", void 0);\n __decorate([\n Property('No records found')\n ], Mention.prototype, \"noRecordsTemplate\", void 0);\n __decorate([\n Property(null)\n ], Mention.prototype, \"spinnerTemplate\", void 0);\n __decorate([\n Property()\n ], Mention.prototype, \"target\", void 0);\n __decorate([\n Property([])\n ], Mention.prototype, \"dataSource\", void 0);\n __decorate([\n Property(null)\n ], Mention.prototype, \"query\", void 0);\n __decorate([\n Property('Contains')\n ], Mention.prototype, \"filterType\", void 0);\n __decorate([\n Complex({ text: null, value: null, iconCss: null, groupBy: null }, FieldSettings)\n ], Mention.prototype, \"fields\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"opened\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"closed\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Mention.prototype, \"destroyed\", void 0);\n Mention = __decorate([\n NotifyPropertyChanges\n ], Mention);\n return Mention;\n}(DropDownBase));\nexport { Mention };\n","/* eslint-disable */\nimport { createElement, L10n, classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CommentCharacterElementBox } from '../../implementation/viewer/page';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Toolbar, Tab } from '@syncfusion/ej2-navigations';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { Dictionary, beforeCommentActionEvent, commentEndEvent, commentBeginEvent, commentDeleteEvent } from '../../base/index';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { Mention } from '@syncfusion/ej2-dropdowns';\n/**\n * @private\n */\nvar CommentReviewPane = /** @class */ (function () {\n function CommentReviewPane(owner) {\n var _this = this;\n this.isNewComment = false;\n this.isUserClosed = false;\n /**\n * @private\n */\n this.selectedTab = 0;\n /**\n * @param {SelectEventArgs} arg - Specify the selection event args.\n * @returns {void}\n */\n this.onTabSelection = function (arg) {\n arg.preventFocus = true;\n _this.selectedTab = arg.selectedIndex;\n if (_this.selectedTab === 1) {\n _this.owner.trackChangesPane.updateHeight();\n }\n else {\n _this.commentPane.updateHeight();\n }\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n };\n this.owner = owner;\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.initReviewPane(localObj);\n this.parentPaneElement.style.display = 'none';\n }\n Object.defineProperty(CommentReviewPane.prototype, \"previousSelectedComment\", {\n get: function () {\n return this.previousSelectedCommentInt;\n },\n set: function (value) {\n if (!isNullOrUndefined(value) && value !== this.previousSelectedCommentInt) {\n if (this.commentPane.comments.containsKey(value)) {\n var commentStart = this.commentPane.getCommentStart(value);\n var commentMark = commentStart.commentMark;\n if (commentMark) {\n classList(commentMark, [], ['e-de-cmt-mark-selected']);\n this.commentPane.removeSelectionMark('e-de-cmt-selection');\n this.commentPane.removeSelectionMark('e-de-cmt-mark-selected');\n }\n var commentView = this.commentPane.comments.get(value);\n commentView.hideDrawer();\n for (var i = 0; i < value.replyComments.length; i++) {\n commentView = this.commentPane.comments.get(value.replyComments[i]);\n if (commentView) {\n commentView.hideDrawer();\n commentView.hideMenuItems();\n }\n }\n }\n }\n this.previousSelectedCommentInt = value;\n },\n enumerable: true,\n configurable: true\n });\n CommentReviewPane.prototype.selectReviewTab = function (tab) {\n if (tab === 'Changes') {\n this.reviewTab.select(1);\n }\n else {\n this.reviewTab.select(0);\n }\n };\n CommentReviewPane.prototype.showHidePane = function (show, tab) {\n if (this.parentPaneElement) {\n this.updateTabHeaderWidth();\n if (show) {\n this.parentPaneElement.style.display = 'block';\n if (tab === 'Changes' && this.owner.showRevisions) {\n this.isCommentTabVisible = false;\n this.owner.notify('reviewPane', { comment: this.isCommentTabVisible, changes: true });\n this.reviewTab.select(1);\n }\n else {\n this.owner.trackChangesPane.isChangesTabVisible = false;\n this.owner.notify('reviewPane', { comment: true, changes: this.owner.trackChangesPane.isChangesTabVisible, isUserClosed: false });\n this.reviewTab.select(0);\n }\n this.owner.trackChangesPane.updateTrackChanges(this.owner.showRevisions);\n this.commentPane.updateCommentStatus();\n }\n else {\n this.parentPaneElement.style.display = 'none';\n }\n if (!this.owner.showRevisions) {\n this.owner.trackChangesPane.isChangesTabVisible = false;\n this.owner.notify('reviewPane', { comment: this.isCommentTabVisible, changes: this.owner.trackChangesPane.isChangesTabVisible });\n this.reviewTab.hideTab(1, true);\n }\n if (!this.owner.showComments) {\n this.isCommentTabVisible = false;\n this.owner.notify('reviewPane', { comment: this.isCommentTabVisible, changes: this.owner.trackChangesPane.isChangesTabVisible });\n this.reviewTab.hideTab(0, true);\n }\n }\n if (show) {\n this.enableDisableItems();\n this.commentPane.updateHeight();\n }\n if (this.owner) {\n this.owner.resize();\n if (this.owner.enableAutoFocus) {\n this.owner.documentHelper.updateFocus();\n }\n }\n };\n CommentReviewPane.prototype.reviewPaneHelper = function (args) {\n var _this = this;\n if (!isNullOrUndefined(args.isUserClosed)) {\n if (args.isUserClosed !== this.isUserClosed) {\n this.isUserClosed = args.isUserClosed;\n if (this.owner) {\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n }\n }\n else {\n return;\n }\n }\n else {\n if (this.isUserClosed) {\n return;\n }\n }\n if (!isNullOrUndefined(args.comment) || !isNullOrUndefined(args.changes)) {\n if ((args.comment || args.changes)) {\n if (this.parentPaneElement.style.display === 'none') {\n this.parentPaneElement.style.display = 'block';\n }\n if (this.owner) {\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n }\n }\n else {\n this.parentPaneElement.style.display = 'none';\n if (this.owner) {\n setTimeout(function () {\n if (_this.owner) {\n _this.owner.resize();\n }\n }, 10);\n }\n }\n }\n };\n CommentReviewPane.prototype.updateTabHeaderWidth = function () {\n var reviewTabsEle = this.reviewTab.getRootElement().getElementsByClassName('e-tab-wrap');\n reviewTabsEle[0].style.padding = '0 8px';\n reviewTabsEle[1].style.padding = '0 8px';\n };\n CommentReviewPane.prototype.initReviewPane = function (localValue) {\n var reviewContainer = this.owner.documentHelper.optionsPaneContainer;\n reviewContainer.style.display = 'flex';\n this.initPaneHeader(localValue);\n reviewContainer.appendChild(this.addReviewTab(localValue));\n this.initCommentPane();\n this.owner.on('reviewPane', this.reviewPaneHelper, this);\n };\n CommentReviewPane.prototype.addReviewTab = function (localValue) {\n var commentHeader = createElement('div', { innerHTML: localValue.getConstant('Comments') });\n var changesHeader = createElement('div', { innerHTML: localValue.getConstant('Changes') });\n this.parentPaneElement = createElement('div', { styles: 'height:100%;overflow:auto;display:none', className: 'e-de-review-pane' });\n this.element = createElement('div', { className: 'e-de-property-tab', id: this.owner.element.id + 'Review_Tab' });\n var items = [{ header: { text: commentHeader }, content: this.reviewPane }, { header: { text: changesHeader } }];\n this.reviewTab = new Tab({ items: items, selected: this.onTabSelection, animation: { previous: { effect: 'None' }, next: { effect: 'None' } } });\n this.reviewTab.appendTo(this.element);\n if (this.owner.enableRtl) {\n this.reviewTab.enableRtl = true;\n }\n this.reviewTab.enablePersistence = true;\n this.parentPaneElement.appendChild(this.element);\n return this.parentPaneElement;\n };\n CommentReviewPane.prototype.initPaneHeader = function (localValue) {\n this.headerContainer = createElement('div');\n this.reviewPane = createElement('div', { className: 'e-de-cmt-pane' });\n if (this.owner.enableRtl) {\n classList(this.reviewPane, ['e-rtl'], []);\n }\n this.headerContainer.appendChild(this.initToolbar(localValue));\n this.reviewPane.appendChild(this.headerContainer);\n this.reviewPane.style.display = 'block';\n return this.reviewPane;\n };\n CommentReviewPane.prototype.closePane = function () {\n if (this.commentPane && this.commentPane.isEditMode) {\n if (!isNullOrUndefined(this.commentPane.currentEditingComment)\n && this.commentPane.isInsertingReply && this.commentPane.currentEditingComment.replyViewTextBox.innerText === '') {\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.commentPane.currentEditingComment.cancelReply();\n this.owner.showComments = false;\n }\n else if (this.isNewComment || !isNullOrUndefined(this.commentPane.currentEditingComment)\n && this.commentPane.isInsertingReply && this.commentPane.currentEditingComment.replyViewTextBox.innerText !== '' ||\n !isNullOrUndefined(this.commentPane.currentEditingComment) && !this.commentPane.isInsertingReply &&\n this.commentPane.currentEditingComment.textArea.innerText !== this.commentPane.currentEditingComment.comment.text) {\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.confirmDialog = DialogUtility.confirm({\n title: localObj.getConstant('Un-posted comments'),\n content: localObj.getConstant('Discard Comment'),\n okButton: {\n text: localObj.getConstant('Discard'), click: this.discardButtonClick.bind(this)\n },\n cancelButton: {\n text: localObj.getConstant('Cancel'), click: this.closeDialogUtils.bind(this)\n },\n showCloseIcon: true,\n closeOnEscape: true,\n animationSettings: { effect: 'Zoom' },\n position: { X: 'center', Y: 'center' }\n });\n }\n else {\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.commentPane.currentEditingComment.cancelEditing();\n this.owner.showComments = false;\n }\n }\n else {\n this.owner.showComments = false;\n //this.owner.showRevisions = false;\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.owner.documentHelper.currentSelectedRevision = undefined;\n this.owner.notify('reviewPane', { changes: false, comment: false, isUserClosed: true });\n }\n };\n CommentReviewPane.prototype.discardButtonClick = function () {\n if (this.commentPane.currentEditingComment) {\n var isNewComment = this.isNewComment;\n if (this.commentPane.currentEditingComment && this.commentPane.isInsertingReply) {\n this.commentPane.currentEditingComment.cancelReply();\n }\n else {\n this.commentPane.currentEditingComment.cancelEditing();\n }\n this.owner.documentHelper.currentSelectedComment = undefined;\n this.closeDialogUtils();\n this.owner.showComments = false;\n }\n };\n CommentReviewPane.prototype.closeDialogUtils = function () {\n this.confirmDialog.close();\n this.confirmDialog = undefined;\n };\n CommentReviewPane.prototype.initToolbar = function (localValue) {\n this.toolbarElement = createElement('div');\n this.toolbar = new Toolbar({\n items: [\n {\n prefixIcon: 'e-de-new-cmt e-de-cmt-tbr', tooltipText: localValue.getConstant('New Comment'),\n text: localValue.getConstant('New Comment'), click: this.insertComment.bind(this)\n },\n {\n prefixIcon: 'e-de-nav-left-arrow e-de-cmt-tbr', align: 'Right',\n tooltipText: localValue.getConstant('Previous Comment'), click: this.navigatePreviousComment.bind(this)\n },\n {\n prefixIcon: 'e-de-nav-right-arrow e-de-cmt-tbr', align: 'Right',\n tooltipText: localValue.getConstant('Next Comment'), click: this.navigateNextComment.bind(this)\n }\n ],\n enableRtl: this.owner.enableRtl\n });\n this.toolbar.appendTo(this.toolbarElement);\n return this.toolbarElement;\n };\n CommentReviewPane.prototype.insertComment = function () {\n if (this.owner && this.owner.editorModule) {\n this.owner.editorModule.isUserInsert = true;\n this.owner.editorModule.insertComment('');\n this.owner.editorModule.isUserInsert = false;\n }\n };\n CommentReviewPane.prototype.addComment = function (comment, isNewComment, selectComment) {\n this.isNewComment = isNewComment;\n this.selectReviewTab('Comments');\n this.owner.documentHelper.currentSelectedComment = comment;\n this.commentPane.insertComment(comment);\n if (!isNewComment) {\n var commentView = this.commentPane.comments.get(comment);\n commentView.cancelEditing();\n this.enableDisableToolbarItem();\n }\n if (selectComment) {\n this.selectComment(comment);\n }\n };\n CommentReviewPane.prototype.deleteComment = function (comment) {\n if (this.commentPane) {\n this.commentPane.deleteComment(comment);\n }\n };\n CommentReviewPane.prototype.selectComment = function (comment) {\n if (this.commentPane.isEditMode) {\n return;\n }\n if (comment.isReply) {\n comment = comment.ownerComment;\n }\n if (this.owner && this.owner.viewer && this.owner.documentHelper.currentSelectedComment !== comment) {\n this.owner.documentHelper.currentSelectedComment = comment;\n }\n this.commentPane.selectComment(comment);\n };\n CommentReviewPane.prototype.resolveComment = function (comment) {\n this.commentPane.resolveComment(comment);\n };\n CommentReviewPane.prototype.reopenComment = function (comment) {\n this.commentPane.reopenComment(comment);\n };\n CommentReviewPane.prototype.addReply = function (comment, newComment, selectComment) {\n this.isNewComment = newComment;\n this.commentPane.insertReply(comment);\n if (!newComment) {\n var commentView = this.commentPane.comments.get(comment);\n commentView.cancelEditing();\n this.enableDisableToolbarItem();\n }\n if (selectComment) {\n this.selectComment(comment.ownerComment);\n }\n };\n CommentReviewPane.prototype.navigatePreviousComment = function () {\n if (this.owner && this.owner.editorModule) {\n this.owner.selectionModule.navigatePreviousComment();\n }\n };\n CommentReviewPane.prototype.navigateNextComment = function () {\n if (this.owner && this.owner.editorModule) {\n this.owner.selectionModule.navigateNextComment();\n }\n };\n CommentReviewPane.prototype.enableDisableItems = function () {\n this.enableDisableToolbarItem();\n var keys = this.commentPane.comments.keys;\n for (var i = 0; i < keys.length; i++) {\n var commentView = this.commentPane.comments.get(keys[i]);\n if (this.owner.isReadOnly) {\n if (!isNullOrUndefined(commentView.replyViewTextBox)) {\n commentView.replyViewTextBox.style.display = 'none';\n }\n commentView.menuBar.style.display = 'none';\n if (commentView.resolveView) {\n commentView.resolveView.style.display = 'none';\n }\n }\n else {\n if (!isNullOrUndefined(commentView.replyViewTextBox)) {\n commentView.replyViewTextBox.style.display = 'block';\n }\n commentView.menuBar.style.display = 'block';\n if (commentView.resolveView) {\n commentView.resolveView.style.display = '';\n }\n }\n }\n };\n CommentReviewPane.prototype.enableDisableToolbarItem = function () {\n if (this.toolbar) {\n var enable = true;\n if (this.commentPane.isEditMode) {\n enable = !this.commentPane.isEditMode;\n }\n if (this.owner.isReadOnly) {\n enable = !this.owner.isReadOnly;\n }\n var elements = this.toolbar.element.querySelectorAll('.' + 'e-de-cmt-tbr');\n this.toolbar.enableItems(elements[0].parentElement.parentElement, enable);\n if (enable && this.owner && this.owner.viewer) {\n enable = !(this.owner.documentHelper.comments.length === 0);\n }\n this.toolbar.enableItems(elements[1].parentElement.parentElement, enable);\n this.toolbar.enableItems(elements[2].parentElement.parentElement, enable);\n }\n };\n CommentReviewPane.prototype.initCommentPane = function () {\n this.commentPane = new CommentPane(this.owner, this);\n this.commentPane.initCommentPane();\n };\n CommentReviewPane.prototype.layoutComments = function () {\n for (var i = 0; i < this.owner.documentHelper.comments.length; i++) {\n var comment = this.owner.documentHelper.comments[i];\n if (this.isUnreferredComment(comment)) {\n this.owner.documentHelper.comments.splice(i, 1);\n i--;\n continue;\n }\n for (var j = 0; j < comment.replyComments.length; j++) {\n if (this.isUnreferredComment(comment.replyComments[j])) {\n comment.replyComments.splice(j, 1);\n j--;\n }\n }\n this.commentPane.addComment(comment);\n }\n };\n CommentReviewPane.prototype.isUnreferredComment = function (comment) {\n if (isNullOrUndefined(comment.commentStart)\n || isNullOrUndefined(comment.commentEnd)) {\n return true;\n }\n return false;\n };\n CommentReviewPane.prototype.clear = function () {\n this.previousSelectedCommentInt = undefined;\n this.isNewComment = false;\n this.isUserClosed = false;\n this.isNewComment = false;\n this.commentPane.clear();\n };\n CommentReviewPane.prototype.discardComment = function (comment) {\n if (comment) {\n if (this.owner.editorHistoryModule) {\n if (this.owner.editorHistoryModule.undoStack.length > 0\n && this.owner.editorHistoryModule.undoStack[this.owner.editorHistoryModule.undoStack.length - 1].action === 'InsertComment') {\n this.owner.editorHistoryModule.undo();\n this.owner.editorHistoryModule.redoStack.pop();\n }\n this.owner.editorModule.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.owner.editorModule.deleteCommentInternal(comment);\n this.owner.editorModule.isSkipOperationsBuild = false;\n }\n else if (this.owner.editorModule) {\n this.owner.editorModule.deleteCommentInternal(comment);\n }\n }\n };\n CommentReviewPane.prototype.destroy = function () {\n if (this.commentPane) {\n this.commentPane.destroy();\n }\n this.commentPane = undefined;\n if (this.toolbar) {\n this.toolbar.destroy();\n }\n this.toolbar = undefined;\n if (this.toolbarElement && this.toolbarElement.parentElement) {\n this.toolbarElement.parentElement.removeChild(this.toolbarElement);\n }\n this.toolbarElement = undefined;\n if (this.headerContainer && this.headerContainer.parentElement) {\n this.headerContainer.parentElement.removeChild(this.headerContainer);\n }\n this.headerContainer = undefined;\n this.previousSelectedCommentInt = undefined;\n if (this.reviewPane && this.reviewPane.parentElement) {\n this.reviewPane.parentElement.removeChild(this.reviewPane);\n }\n if (!this.owner.isDestroyed) {\n this.owner.off('reviewPane', this.reviewPaneHelper);\n }\n if (!isNullOrUndefined(this.reviewTab)) {\n this.reviewTab.destroy();\n }\n this.reviewTab = undefined;\n if (!isNullOrUndefined(this.confirmDialog)) {\n this.confirmDialog.destroy();\n }\n this.confirmDialog = undefined;\n if (!isNullOrUndefined(this.previousSelectedCommentInt)) {\n this.previousSelectedCommentInt.destroy();\n }\n this.previousSelectedCommentInt = undefined;\n if (this.reviewPane) {\n this.reviewPane.innerHTML = '';\n if (this.reviewPane.parentElement) {\n this.reviewPane.parentElement.removeChild(this.reviewPane);\n }\n }\n this.reviewPane = undefined;\n if (this.parentPaneElement) {\n this.parentPaneElement.innerHTML = '';\n if (this.parentPaneElement.parentElement) {\n this.parentPaneElement.parentElement.removeChild(this.parentPaneElement);\n }\n }\n this.parentPaneElement = undefined;\n this.owner = undefined;\n };\n return CommentReviewPane;\n}());\nexport { CommentReviewPane };\n/**\n * @private\n */\nvar CommentPane = /** @class */ (function () {\n function CommentPane(owner, pane) {\n this.isEditModeInternal = false;\n this.isInsertingReply = false;\n this.owner = owner;\n this.parentPane = pane;\n this.parent = pane.reviewPane;\n this.comments = new Dictionary();\n }\n Object.defineProperty(CommentPane.prototype, \"isEditMode\", {\n get: function () {\n return this.isEditModeInternal;\n },\n set: function (value) {\n this.isEditModeInternal = value;\n var keys = this.comments.keys;\n for (var i = 0; i < keys.length; i++) {\n var commentView = this.comments.get(keys[i]);\n if (value) {\n commentView.menuBar.style.display = 'none';\n }\n else if (!commentView.comment.isReply) {\n commentView.menuBar.style.display = 'block';\n }\n }\n if (this.parentPane) {\n this.parentPane.enableDisableToolbarItem();\n }\n if (this.owner) {\n if (this.isEditModeInternal) {\n this.owner.trigger(commentBeginEvent);\n }\n else {\n this.owner.trigger(commentEndEvent);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n CommentPane.prototype.initCommentPane = function () {\n this.commentPane = createElement('div', { className: 'e-de-cmt-container e-de-scrollbar-hide' });\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.noCommentIndicator = createElement('div', {\n className: 'e-de-cmt-no-cmt',\n innerHTML: localObj.getConstant('No comments in this document')\n });\n this.commentPane.appendChild(this.noCommentIndicator);\n this.parent.appendChild(this.commentPane);\n };\n CommentPane.prototype.addComment = function (comment) {\n var commentView = new CommentView(this.owner, this, comment);\n var commentParent = commentView.layoutComment(false);\n this.comments.add(comment, commentView);\n this.commentPane.appendChild(commentParent);\n for (var i = 0; i < comment.replyComments.length; i++) {\n var replyView = new CommentView(this.owner, this, comment.replyComments[i]);\n this.comments.add(comment.replyComments[i], replyView);\n commentParent.insertBefore(replyView.layoutComment(true), commentView.replyViewContainer);\n }\n this.updateCommentStatus();\n commentView.hideDrawer();\n };\n CommentPane.prototype.updateHeight = function () {\n var tabHeaderHeight = this.parentPane.reviewTab.getRootElement().getElementsByClassName('e-tab-header')[0].getBoundingClientRect().height;\n this.commentPane.style.height = this.parentPane.parentPaneElement.clientHeight - this.parentPane.headerContainer.clientHeight - tabHeaderHeight + 'px';\n };\n CommentPane.prototype.insertReply = function (replyComment) {\n var parentComment = replyComment.ownerComment;\n var parentView = this.comments.get(parentComment);\n var replyView = new CommentView(this.owner, this, replyComment);\n this.comments.add(replyComment, replyView);\n var replyElement = replyView.layoutComment(true);\n var replyIndex = parentComment.replyComments.indexOf(replyComment);\n if (replyIndex === parentComment.replyComments.length - 1) {\n parentView.parentElement.insertBefore(replyElement, parentView.replyViewContainer);\n }\n else {\n var nextReply = parentComment.replyComments[replyIndex + 1];\n parentView.parentElement.insertBefore(replyElement, this.comments.get(nextReply).parentElement);\n }\n replyView.editComment();\n };\n CommentPane.prototype.insertComment = function (comment) {\n var commentView = new CommentView(this.owner, this, comment);\n var commentParent = commentView.layoutComment(false);\n this.comments.add(comment, commentView);\n if (this.owner.documentHelper.comments.indexOf(comment) === this.owner.documentHelper.comments.length - 1) {\n this.commentPane.appendChild(commentParent);\n }\n else {\n var index = this.owner.documentHelper.comments.indexOf(comment);\n var element = this.comments.get(this.owner.documentHelper.comments[index + 1]).parentElement;\n this.commentPane.insertBefore(commentParent, element);\n commentParent.focus();\n }\n this.updateCommentStatus();\n commentView.editComment();\n };\n CommentPane.prototype.removeSelectionMark = function (className) {\n if (this.parent) {\n var elements = this.parent.getElementsByClassName(className);\n for (var i = 0; i < elements.length; i++) {\n classList(elements[i], [], [className]);\n }\n }\n };\n CommentPane.prototype.selectComment = function (comment) {\n this.removeSelectionMark('e-de-cmt-selection');\n if (comment.isReply) {\n comment = comment.ownerComment;\n }\n if (comment) {\n this.owner.notify('reviewPane', { comment: true, changes: this.owner.trackChangesPane.isChangesTabVisible });\n var commentView = this.comments.get(comment);\n var selectedElement = commentView.parentElement;\n if (selectedElement) {\n classList(selectedElement, ['e-de-cmt-selection'], []);\n selectedElement.focus();\n }\n var commentStart = this.getCommentStart(comment);\n if (!commentStart.commentMark) {\n commentStart.renderCommentMark();\n }\n classList(commentStart.commentMark, ['e-de-cmt-mark-selected'], []);\n commentView.showDrawer();\n }\n };\n CommentPane.prototype.getCommentStart = function (comment) {\n var localValue = new L10n('documenteditor', this.owner.defaultLocale);\n localValue.setLocale(this.owner.locale);\n var commentStart = undefined;\n if (comment && comment.commentStart) {\n commentStart = comment.commentStart;\n }\n if (commentStart.commentMark !== undefined) {\n commentStart.commentMark.title = localValue.getConstant('Click to see this comment');\n }\n return this.getFirstCommentInLine(commentStart);\n };\n CommentPane.prototype.getFirstCommentInLine = function (commentStart) {\n for (var i = 0; i < commentStart.line.children.length; i++) {\n var startComment = commentStart.line.children[i];\n if (startComment instanceof CommentCharacterElementBox && startComment.commentType === 0) {\n return startComment;\n }\n }\n return commentStart;\n };\n CommentPane.prototype.deleteComment = function (comment) {\n var commentView = this.comments.get(comment);\n if (!isNullOrUndefined(commentView)) {\n if (!isNullOrUndefined(this.currentEditingComment)\n && commentView.comment.commentId == this.currentEditingComment.comment.commentId) {\n this.isEditMode = false;\n this.currentEditingComment = undefined;\n }\n if (commentView.parentElement && commentView.parentElement.parentElement) {\n commentView.parentElement.parentElement.removeChild(commentView.parentElement);\n }\n //this.commentPane.removeChild();\n for (var i = 0; i < comment.replyComments.length; i++) {\n var replyCmt = comment.replyComments[i];\n if (this.comments.containsKey(replyCmt)) {\n this.comments.remove(replyCmt);\n }\n }\n this.comments.remove(comment);\n commentView.destroy();\n }\n this.updateCommentStatus();\n };\n CommentPane.prototype.resolveComment = function (comment) {\n var commentView = this.comments.get(comment);\n if (commentView) {\n commentView.resolveComment();\n }\n };\n CommentPane.prototype.reopenComment = function (comment) {\n var commentView = this.comments.get(comment);\n if (commentView) {\n commentView.reopenComment();\n }\n };\n CommentPane.prototype.updateCommentStatus = function () {\n if (this.owner.documentHelper.comments.length === 0) {\n if (!this.noCommentIndicator.parentElement) {\n this.commentPane.appendChild(this.noCommentIndicator);\n }\n this.noCommentIndicator.style.display = 'block';\n this.parentPane.isCommentTabVisible = false;\n this.owner.notify('reviewPane', { comment: false, changes: this.owner.trackChangesPane.isChangesTabVisible });\n this.parentPane.reviewTab.hideTab(0);\n }\n else if (this.owner.showComments) {\n this.parentPane.isCommentTabVisible = true;\n this.noCommentIndicator.style.display = 'none';\n this.owner.notify('reviewPane', { comment: true, changes: this.owner.trackChangesPane.isChangesTabVisible });\n this.parentPane.reviewTab.hideTab(0, false);\n }\n if (this.parentPane) {\n this.parentPane.enableDisableToolbarItem();\n }\n };\n CommentPane.prototype.clear = function () {\n this.isEditMode = false;\n this.currentEditingComment = undefined;\n this.isInsertingReply = false;\n this.removeChildElements();\n this.commentPane.innerHTML = '';\n this.updateCommentStatus();\n };\n CommentPane.prototype.removeChildElements = function () {\n var comments = this.comments.keys;\n for (var i = 0; i < comments.length; i++) {\n this.comments.get(comments[i]).destroy();\n }\n this.comments.clear();\n };\n CommentPane.prototype.destroy = function () {\n this.removeChildElements();\n if (this.noCommentIndicator && this.noCommentIndicator) {\n this.noCommentIndicator.parentElement.removeChild(this.noCommentIndicator);\n }\n this.noCommentIndicator = undefined;\n if (this.commentPane) {\n this.commentPane.innerHTML = '';\n if (this.commentPane.parentElement) {\n this.commentPane.parentElement.removeChild(this.commentPane);\n }\n }\n this.commentPane = undefined;\n if (this.parent) {\n this.parent.innerHTML = '';\n if (this.parent.parentElement) {\n this.parent.parentElement.removeChild(this.parent);\n }\n }\n this.parent = undefined;\n this.parentPane = undefined;\n this.currentEditingComment = undefined;\n this.owner = undefined;\n };\n return CommentPane;\n}());\nexport { CommentPane };\n/**\n * @private\n */\nvar CommentView = /** @class */ (function () {\n function CommentView(owner, commentPane, comment) {\n this.isReply = false;\n this.isDrawerExpand = false;\n this.itemData = [];\n this.owner = owner;\n this.comment = comment;\n this.commentPane = commentPane;\n }\n CommentView.prototype.layoutComment = function (isReply) {\n this.isReply = isReply;\n var classList = 'e-de-cmt-sub-container';\n if (isReply) {\n classList += ' e-de-cmt-reply';\n }\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.parentElement = createElement('div', { className: classList });\n this.initCommentHeader(localObj);\n this.initCommentView(localObj);\n this.initDateView();\n if (!this.comment.isReply) {\n this.parentElement.tabIndex = 0;\n this.initReplyView(localObj);\n this.initResolveOption(localObj);\n this.initDrawer();\n if (this.comment.isResolved) {\n this.resolveComment();\n }\n }\n else {\n this.menuBar.style.display = 'none';\n }\n this.commentView.addEventListener('mouseenter', this.showMenuItems.bind(this));\n this.commentView.addEventListener('mouseleave', this.hideMenuItemOnMouseLeave.bind(this));\n return this.parentElement;\n };\n CommentView.prototype.initCommentHeader = function (localObj) {\n var commentDiv = createElement('div', { className: 'e-de-cmt-view' });\n this.resolveDiv = createElement('div', { className: 'e-de-cmt-view' });\n var wrapperDiv = createElement('div', { className: 'e-de-cmt-view' });\n var roundIcon = createElement('div', { className: 'e-de-resolve-mark' });\n var span = createElement('span', { className: 'e-de e-icons e-check' });\n var resolveText = createElement('span', { className: '' });\n resolveText.innerHTML = \"Resolved\";\n span.style.display = 'inline-block';\n roundIcon.style.display = 'flex';\n roundIcon.style.justifyContent = 'center';\n roundIcon.style.alignItems = 'center';\n roundIcon.style.width = \"20px\";\n roundIcon.style.height = \"20px\";\n roundIcon.style.borderRadius = \"100%\";\n roundIcon.style.marginRight = \"6px\";\n roundIcon.appendChild(span);\n wrapperDiv.appendChild(roundIcon);\n wrapperDiv.appendChild(resolveText);\n this.resolveDiv.appendChild(wrapperDiv);\n wrapperDiv.style.display = \"flex\";\n wrapperDiv.style.justifyContent = \"center\";\n wrapperDiv.style.alignItems = \"center\";\n this.resolveDiv.style.display = \"none\";\n var commentUserInfo = createElement('div', { className: 'e-de-cmt-author' });\n commentUserInfo.style.marginTop = \"8px\";\n var userName = createElement('div', { className: 'e-de-cmt-author-name' });\n userName.textContent = this.comment.author;\n if (!isNullOrUndefined(this.comment.author)) {\n commentUserInfo.style.display = 'flex';\n this.owner.documentHelper.getAvatar(commentUserInfo, userName, this.comment, undefined);\n }\n // commentUserInfo.appendChild(this.resolveDiv);\n //if (this.comment.author === this.owner.currentUser) {\n this.menuBar = createElement('button', { className: 'e-de-cp-option', attrs: { type: 'button' } });\n var userOption = [{ text: localObj.getConstant('Edit') },\n { text: localObj.getConstant('Delete') },\n { text: localObj.getConstant('Reply') },\n { text: localObj.getConstant('Resolve') }];\n var menuItem = new DropDownButton({\n items: this.isReply ? userOption.splice(0, 2) : userOption,\n select: this.userOptionSelectEvent.bind(this),\n iconCss: 'e-de-menu-icon',\n cssClass: 'e-caret-hide',\n enableRtl: this.owner.enableRtl\n });\n this.menuBar.title = localObj.getConstant('More Options') + '...';\n menuItem.appendTo(this.menuBar);\n commentUserInfo.appendChild(this.menuBar);\n this.dropDownButton = menuItem;\n commentDiv.appendChild(commentUserInfo);\n this.commentView = commentDiv;\n this.parentElement.appendChild(commentDiv);\n commentDiv.addEventListener('click', this.selectComment.bind(this));\n };\n CommentView.prototype.selectComment = function () {\n if (this.commentPane) {\n if (!this.commentPane.isEditMode) {\n this.owner.selectionModule.selectComment(this.comment);\n }\n else if (this.commentPane.isEditMode && this.commentPane.isInsertingReply\n && this.commentPane.currentEditingComment && this.commentPane.currentEditingComment.replyViewTextBox.innerText === '') {\n var comment = this.comment;\n if (comment && comment.isReply) {\n comment = this.comment.ownerComment;\n }\n if (comment && this.owner.documentHelper.currentSelectedComment === comment) {\n return;\n }\n this.commentPane.currentEditingComment.cancelReply();\n this.owner.selectionModule.selectComment(this.comment);\n }\n }\n };\n CommentView.prototype.initCommentView = function (localObj) {\n this.commentText = createElement('div', { className: 'e-de-cmt-readonly e-mention' });\n this.commentText.innerHTML = this.comment.text;\n this.commentView.appendChild(this.commentText);\n this.initEditView(localObj);\n };\n CommentView.prototype.initEditView = function (localObj) {\n var _this = this;\n this.textAreaContainer = createElement('div', { styles: 'display:none' });\n this.textArea = createElement('div', { className: 'e-de-cmt-textarea e-input' });\n this.textArea.addEventListener('paste', function (event) {\n _this.updatePastedText(event, _this.textArea);\n });\n this.textArea.style.borderWidth = '0 0 2px 0';\n this.textArea.setAttribute('placeholder', localObj.getConstant('Type your comment here'));\n this.editMention = new Mention({\n dataSource: this.owner.documentEditorSettings.mentionSettings.dataSource,\n fields: this.owner.documentEditorSettings.mentionSettings.fields,\n select: this.onSelect.bind(this),\n });\n this.textArea.innerHTML = this.comment.text;\n this.textArea.addEventListener('keydown', this.updateTextAreaHeight.bind(this));\n this.textArea.addEventListener('keyup', this.enableDisablePostButton.bind(this));\n var editRegionFooter = createElement('div', { className: 'e-de-cmt-action-button' });\n var postButton = createElement('button', { className: 'e-de-cmt-post-btn e-btn e-flat', attrs: { type: 'button' } });\n this.postButton = new Button({ cssClass: 'e-btn e-flat e-primary e-de-overlay', iconCss: 'e-de-cmt-post', disabled: true }, postButton);\n postButton.addEventListener('click', this.postComment.bind(this));\n postButton.title = localObj.getConstant('Post');\n postButton.setAttribute('aria-label', localObj.getConstant('Post'));\n var cancelButton = createElement('button', {\n className: 'e-de-cmt-cancel-btn e-btn e-flat',\n attrs: { type: 'button' }\n });\n this.cancelButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-cancel' }, cancelButton);\n cancelButton.title = localObj.getConstant('Cancel');\n cancelButton.setAttribute('aria-label', localObj.getConstant('Cancel'));\n cancelButton.addEventListener('click', this.cancelEditing.bind(this));\n editRegionFooter.appendChild(postButton);\n editRegionFooter.appendChild(cancelButton);\n editRegionFooter.style.marginTop = \"8px\";\n this.textAreaContainer.appendChild(this.textArea);\n this.textAreaContainer.appendChild(editRegionFooter);\n this.commentView.appendChild(this.textAreaContainer);\n this.editMention.appendTo(this.textArea);\n };\n CommentView.prototype.updatePastedText = function (event, element) {\n // Prevent the default paste action\n event.preventDefault();\n // Get the pasted content from the clipboard\n var clipboardData = (event.clipboardData);\n var plainText = clipboardData.getData('text/plain');\n if (plainText) {\n var htmlString = this.convertToHtml(plainText);\n element.innerHTML = element.innerHTML + htmlString;\n }\n this.enableDisableReplyPostButton();\n };\n CommentView.prototype.convertToHtml = function (input) {\n // Split the input string by \\r\\n or \\r\n var lines = input.split(/(?:\\r?\\n|\\r)/);\n // Map each line to a
element, adding
if the line is empty\n var htmlLines = lines.map(function (line) { return line ? \"
\" + line + \"
\" : \"

\"; });\n // Join the array back into a single string\n var output = htmlLines.join('');\n return output;\n };\n CommentView.prototype.onSelect = function (e) {\n this.itemData.push(e.itemData);\n };\n CommentView.prototype.initDateView = function () {\n this.commentDate = createElement('div', { className: 'e-de-cmt-date' });\n this.commentDate.innerText = HelperMethods.getModifiedDate(this.comment.date);\n this.commentView.appendChild(this.commentDate);\n };\n CommentView.prototype.initDrawer = function () {\n this.drawerElement = createElement('div', { styles: 'display:none;', className: 'e-de-cmt-drawer-cnt' });\n var leftPane = createElement('div', { className: 'e-de-cmt-drawer' });\n var spanElement = createElement('span');\n leftPane.appendChild(spanElement);\n this.drawerElement.appendChild(leftPane);\n this.drawerSpanElement = spanElement;\n this.drawerAction = leftPane;\n this.drawerAction.addEventListener('click', this.showOrHideDrawer.bind(this));\n this.parentElement.appendChild(this.drawerElement);\n };\n CommentView.prototype.initReplyView = function (localObj) {\n var _this = this;\n this.replyViewContainer = createElement('div', { className: 'e-de-cmt-rply-view' });\n if (this.commentPane.parentPane.isNewComment) {\n this.replyViewContainer.style.display = 'none';\n }\n this.replyViewTextBox = createElement('div', { className: 'e-de-cmt-textarea e-input' });\n this.replyViewTextBox.addEventListener('paste', function (event) {\n _this.updatePastedText(event, _this.replyViewTextBox);\n });\n this.replyViewTextBox.style.borderWidth = '0 0 1px 0';\n this.replyViewTextBox.setAttribute(\"placeholder\", localObj.getConstant('Reply'));\n this.replyViewTextBox.addEventListener('click', this.enableReplyView.bind(this));\n this.replyViewTextBox.addEventListener('keydown', this.updateReplyTextAreaHeight.bind(this));\n this.replyViewTextBox.addEventListener('keyup', this.enableDisableReplyPostButton.bind(this));\n var editRegionFooter = createElement('div', { styles: 'display:none', className: 'e-de-cmt-action-button' });\n var postButton = createElement('button', { className: 'e-de-cmt-post-btn e-de-overlay e-btn e-flat', attrs: { type: 'button' } });\n this.replyPostButton = new Button({ cssClass: 'e-btn e-flat e-primary', iconCss: 'e-de-cmt-post', disabled: true }, postButton);\n this.replyMention = new Mention({\n dataSource: this.owner.documentEditorSettings.mentionSettings.dataSource,\n fields: this.owner.documentEditorSettings.mentionSettings.fields,\n select: this.onSelect.bind(this),\n });\n postButton.addEventListener('click', this.postReply.bind(this));\n postButton.title = localObj.getConstant('Post');\n var cancelButton = createElement('button', {\n className: 'e-de-cmt-cancel-btn e-btn e-flat',\n attrs: { type: 'button' }\n });\n cancelButton.setAttribute('aria-label', localObj.getConstant('Cancel'));\n this.replyCancelButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-cancel' }, cancelButton);\n cancelButton.addEventListener('click', this.cancelReply.bind(this));\n cancelButton.title = localObj.getConstant('Cancel');\n editRegionFooter.appendChild(postButton);\n editRegionFooter.appendChild(cancelButton);\n editRegionFooter.style.marginTop = \"8px\";\n this.replyFooter = editRegionFooter;\n this.replyViewContainer.appendChild(this.replyViewTextBox);\n this.replyViewContainer.appendChild(editRegionFooter);\n this.parentElement.appendChild(this.replyViewContainer);\n this.replyMention.appendTo(this.replyViewTextBox);\n };\n CommentView.prototype.initResolveOption = function (localObj) {\n var editRegionFooter = createElement('div', { className: 'e-de-cmt-resolve-btn' });\n var wrapperFooterDiv = createElement('div', { className: 'e-de-cmt-resolve-btn' });\n var reopenDeleteWrapper = createElement('div', { className: 'e-de-cmt-resolve-btn' });\n var postButton = createElement('button', { className: 'e-de-cmt-post-btn e-btn e-flat', attrs: { type: 'button' } });\n this.reopenButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-reopen' }, postButton);\n postButton.title = localObj.getConstant('Reopen');\n postButton.setAttribute('aria-label', localObj.getConstant('Reopen'));\n postButton.addEventListener('click', this.reopenButtonClick.bind(this));\n var cancelButton = createElement('button', {\n className: 'e-de-cmt-cancel-btn e-btn e-flat',\n attrs: { type: 'button' }\n });\n cancelButton.title = localObj.getConstant('Delete');\n cancelButton.setAttribute('aria-label', localObj.getConstant('Delete'));\n this.deleteButton = new Button({ cssClass: 'e-btn e-flat', iconCss: 'e-de-cmt-delete' }, cancelButton);\n cancelButton.addEventListener('click', this.deleteComment.bind(this));\n editRegionFooter.appendChild(postButton);\n editRegionFooter.appendChild(cancelButton);\n wrapperFooterDiv.appendChild(this.resolveDiv);\n reopenDeleteWrapper.appendChild(postButton);\n reopenDeleteWrapper.appendChild(cancelButton);\n editRegionFooter.appendChild(wrapperFooterDiv);\n wrapperFooterDiv.appendChild(reopenDeleteWrapper);\n wrapperFooterDiv.style.display = \"flex\";\n wrapperFooterDiv.style.justifyContent = \"space-between\";\n wrapperFooterDiv.style.alignItems = \"center\";\n reopenDeleteWrapper.style.display = \"flex\";\n reopenDeleteWrapper.style.justifyContent = \"center\";\n reopenDeleteWrapper.style.alignItems = \"center\";\n reopenDeleteWrapper.style.marginTop = \"0px\";\n this.resolveView = editRegionFooter;\n this.parentElement.appendChild(editRegionFooter);\n };\n CommentView.prototype.reopenButtonClick = function () {\n this.owner.editorModule.reopenComment(this.comment);\n };\n CommentView.prototype.deleteComment = function () {\n var eventArgs = { author: this.comment.author, cancel: false };\n this.owner.trigger(commentDeleteEvent, eventArgs);\n var eventActionArgs = { author: this.comment.author, cancel: eventArgs.cancel, type: 'Delete', mentions: this.comment.mentions };\n this.owner.trigger(beforeCommentActionEvent, eventActionArgs);\n if (eventActionArgs.cancel) {\n return;\n }\n this.owner.editorModule.deleteCommentInternal(this.comment);\n if (eventArgs.cancel) {\n return;\n }\n };\n CommentView.prototype.updateReplyTextAreaHeight = function (event) {\n var _this = this;\n if (event) {\n this.preventKeyboardShortcuts(event);\n }\n setTimeout(function () {\n if (!isNullOrUndefined(_this.replyViewTextBox)) {\n _this.replyViewTextBox.style.height = 'auto';\n var scrollHeight = _this.replyViewTextBox.scrollHeight;\n _this.replyViewTextBox.style.height = scrollHeight + 'px';\n }\n });\n };\n CommentView.prototype.preventKeyboardShortcuts = function (event) {\n var key = event.which || event.keyCode;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection \n var shift = event.shiftKey ? event.shiftKey : ((key === 16) ? true : false); // Shift Key detection \n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n // Define the keyboard shortcuts to prevent\n var prevent = false;\n // Bold: Ctrl + B or Cmd + B (Mac)\n if (ctrl && key === 66)\n prevent = true;\n // Italic: Ctrl + I or Cmd + I (Mac)\n else if (ctrl && key === 73)\n prevent = true;\n // Underline: Ctrl + U or Cmd + U (Mac)\n else if (ctrl && key === 85)\n prevent = true;\n // Strikethrough: Alt + Shift + 5 (may vary by browser)\n else if (alt && shift && key === 53)\n prevent = true;\n // Superscript: Ctrl + . or Cmd + . (Mac)\n else if (ctrl && key === 190)\n prevent = true;\n // Subscript: Ctrl + , or Cmd + , (Mac)\n else if (ctrl && key === 188)\n prevent = true;\n // Insert Unordered List: Ctrl + Shift + L or Cmd + Shift + L (Mac)\n else if (ctrl && shift && key === 76)\n prevent = true;\n // Insert Ordered List: Ctrl + Shift + 7 or Cmd + Shift + 7 (Mac)\n else if (ctrl && shift && key === 55)\n prevent = true;\n // Remove Formatting: Ctrl + \\ or Cmd + \\ (Mac)\n else if (ctrl && key === 220)\n prevent = true;\n // Align Left: Ctrl + Shift + L or Cmd + Shift + L (Mac)\n else if (ctrl && shift && key === 76)\n prevent = true;\n // Align Center: Ctrl + Shift + E or Cmd + Shift + E (Mac)\n else if (ctrl && shift && key === 69)\n prevent = true;\n // Align Right: Ctrl + Shift + R or Cmd + Shift + R (Mac)\n else if (ctrl && shift && key === 82)\n prevent = true;\n // Align Justify: Ctrl + Shift + J or Cmd + Shift + J (Mac)\n else if (ctrl && shift && key === 74)\n prevent = true;\n // Outdent: Shift + Tab (may vary by browser)\n else if (shift && key === 9)\n prevent = true;\n // Heading Levels: Ctrl + Alt + 1 to Ctrl + Alt + 6 (may vary by browser) or Cmd + Alt + 1 to Cmd + Alt + 6 (Mac)\n else if (ctrl && alt && (key >= 49 && key <= 54))\n prevent = true;\n // Quote: Ctrl + Shift + Q or Cmd + Shift + Q (Mac) (may vary by browser)\n else if (ctrl && shift && key === 81)\n prevent = true;\n if (prevent) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n CommentView.prototype.enableDisableReplyPostButton = function () {\n this.replyPostButton.disabled = this.replyViewTextBox.innerText === '';\n if (this.replyPostButton.disabled) {\n classList(this.replyPostButton.element, ['e-de-overlay'], []);\n }\n else if (this.replyPostButton.element.classList.contains('e-de-overlay')) {\n classList(this.replyPostButton.element, [], ['e-de-overlay']);\n }\n };\n CommentView.prototype.enableReplyView = function () {\n var _this = this;\n var eventArgs = { author: this.comment.author, cancel: false, type: 'Reply', mentions: this.comment.mentions };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Reply') {\n return;\n }\n if (this.commentPane.isEditMode) {\n return;\n }\n this.commentPane.currentEditingComment = this;\n this.commentPane.isInsertingReply = true;\n if (this.owner.documentHelper.currentSelectedComment !== this.comment) {\n this.owner.selectionModule.selectComment(this.comment);\n }\n this.commentPane.isEditMode = true;\n //this.replyViewTextBox.readOnly = false;\n this.replyFooter.style.display = 'block';\n setTimeout(function () {\n _this.replyViewTextBox.focus();\n });\n };\n CommentView.prototype.postReply = function () {\n var replyText = (this.replyViewTextBox.innerHTML);\n this.cancelReply();\n this.updateReplyTextAreaHeight();\n this.owner.editorModule.replyComment(this.comment, replyText, this.itemData);\n if (!this.owner.editorModule.isSkipOperationsBuild && !this.owner.editorModule.isRemoteAction) {\n this.owner.fireContentChange();\n }\n this.owner.editorModule.isSkipOperationsBuild = false;\n };\n CommentView.prototype.cancelReply = function () {\n this.commentPane.currentEditingComment = undefined;\n this.commentPane.isInsertingReply = true;\n this.commentPane.isEditMode = false;\n this.replyPostButton.disabled = true;\n this.replyViewTextBox.innerText = '';\n // this.replyViewTextBox.readOnly = true;\n this.replyFooter.style.display = 'none';\n };\n CommentView.prototype.updateTextAreaHeight = function (event) {\n var _this = this;\n if (event) {\n this.preventKeyboardShortcuts(event);\n }\n setTimeout(function () {\n if (!isNullOrUndefined(_this.textArea)) {\n _this.textArea.style.height = 'auto';\n var scrollHeight = _this.textArea.scrollHeight;\n _this.textArea.style.height = scrollHeight + 'px';\n }\n });\n };\n CommentView.prototype.showMenuItems = function () {\n if (this.comment.isReply && !this.owner.isReadOnly) {\n if (!this.commentPane.isEditMode && (!isNullOrUndefined(this.comment) && !this.comment.isResolved)) {\n this.menuBar.style.display = 'block';\n }\n }\n var commentStart = this.commentPane.getCommentStart(this.comment);\n if (!isNullOrUndefined(commentStart) && !isNullOrUndefined(commentStart.commentMark)) {\n commentStart.commentMark.classList.add('e-de-cmt-mark-hover');\n }\n };\n CommentView.prototype.hideMenuItemOnMouseLeave = function () {\n if (this.comment.isReply) {\n if (this.owner.documentHelper.currentSelectedComment !== this.comment.ownerComment) {\n this.hideMenuItems();\n }\n }\n if (this.commentPane) {\n var commentStart = this.commentPane.getCommentStart(this.comment);\n if (!isNullOrUndefined(commentStart) && !isNullOrUndefined(commentStart.commentMark)) {\n commentStart.commentMark.classList.remove('e-de-cmt-mark-hover');\n }\n }\n };\n CommentView.prototype.hideMenuItems = function () {\n this.menuBar.style.display = 'none';\n };\n CommentView.prototype.enableDisablePostButton = function () {\n this.postButton.disabled = this.textArea.innerText === '';\n if (this.postButton.disabled) {\n classList(this.postButton.element, ['e-de-overlay'], []);\n }\n else if (this.postButton.element.classList.contains('e-de-overlay')) {\n classList(this.postButton.element, [], ['e-de-overlay']);\n }\n };\n CommentView.prototype.editComment = function () {\n var _this = this;\n var eventArgs = { author: this.comment.author, cancel: false, type: 'Edit', mentions: this.comment.mentions };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Edit') {\n return;\n }\n this.commentPane.currentEditingComment = this;\n this.commentPane.isInsertingReply = false;\n this.commentPane.isEditMode = true;\n this.commentText.style.display = 'none';\n this.textAreaContainer.style.display = 'block';\n this.commentDate.style.display = 'none';\n this.menuBar.style.display = 'none';\n this.updateTextAreaHeight();\n setTimeout(function () {\n if (_this.textArea) {\n _this.textArea.focus();\n }\n });\n };\n CommentView.prototype.resolveComment = function () {\n classList(this.parentElement, ['e-de-cmt-resolved'], []);\n this.resolveDiv.style.display = \"inline\";\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.dropDownButton.items = [{ text: localObj.getConstant('Reopen') }, { text: localObj.getConstant('Delete') }];\n };\n CommentView.prototype.reopenComment = function () {\n classList(this.parentElement, [], ['e-de-cmt-resolved']);\n this.resolveDiv.style.display = \"none\";\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n this.dropDownButton.items = [{ text: localObj.getConstant('Edit') },\n { text: localObj.getConstant('Delete') },\n { text: localObj.getConstant('Reply') },\n { text: localObj.getConstant('Resolve') }];\n this.showDrawer();\n };\n CommentView.prototype.postComment = function () {\n if (this.itemData) {\n this.comment.mentions = this.itemData;\n this.itemData = [];\n }\n var eventArgs = { author: this.comment.author, cancel: false, type: 'Post', text: this.textArea.innerText, mentions: this.comment.mentions };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Post') {\n return;\n }\n var updatedText = this.textArea.innerHTML;\n if (this.owner.editorModule && this.comment.text != '' && (this.comment.text != updatedText)) {\n this.owner.editorModule.initHistory('EditComment');\n var modifiedObject = {\n commentId: this.comment.commentId,\n text: this.comment.text\n };\n this.owner.editorHistoryModule.currentBaseHistoryInfo.modifiedProperties.push(modifiedObject);\n this.owner.editorHistoryModule.currentBaseHistoryInfo.removedNodes.push(this.comment);\n this.owner.editorHistoryModule.updateHistory();\n }\n this.commentText.innerHTML = updatedText;\n this.comment.text = updatedText;\n this.showCommentView();\n if (this.commentPane && this.commentPane.parentPane) {\n this.commentPane.parentPane.isNewComment = false;\n }\n if (!isNullOrUndefined(this.replyViewContainer)) {\n this.replyViewContainer.style.display = '';\n }\n if (!this.owner.editorModule.isSkipOperationsBuild && !this.owner.editorModule.isRemoteAction) {\n this.owner.fireContentChange();\n }\n };\n CommentView.prototype.showCommentView = function () {\n this.commentPane.isEditMode = false;\n this.textAreaContainer.style.display = 'none';\n this.commentText.style.display = 'block';\n this.commentDate.style.display = 'block';\n this.menuBar.style.display = 'block';\n };\n CommentView.prototype.cancelEditing = function () {\n this.showCommentView();\n this.textArea.innerHTML = this.comment.text.trim();\n if (this.commentPane.parentPane.isNewComment) {\n if (this.commentPane && this.commentPane.parentPane) {\n this.commentPane.parentPane.isNewComment = false;\n }\n var documentEditor = this.owner;\n documentEditor.editorModule.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.commentPane.parentPane.discardComment(this.comment);\n documentEditor.editorModule.isSkipOperationsBuild = false;\n }\n };\n CommentView.prototype.showOrHideDrawer = function () {\n if (this.isDrawerExpand) {\n this.hideDrawer();\n }\n else {\n this.showDrawer();\n }\n };\n CommentView.prototype.hideDrawer = function () {\n if (this.parentElement) {\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n var elements = this.parentElement.getElementsByClassName('e-de-cmt-sub-container');\n if (elements.length > 1) {\n for (var i = 1; i < elements.length; i++) {\n elements[i].style.display = 'none';\n }\n this.drawerElement.style.display = 'block';\n classList(this.drawerSpanElement, [], ['e-de-nav-up']);\n this.drawerSpanElement.innerText = '+' + (elements.length - 1) + ' ' + localObj.getConstant('more') + '...';\n }\n this.isDrawerExpand = false;\n }\n };\n CommentView.prototype.showDrawer = function () {\n if (this.parentElement) {\n var elements = this.parentElement.getElementsByClassName('e-de-cmt-sub-container');\n if (elements.length > 1) {\n for (var i = 0; i < elements.length; i++) {\n elements[i].style.display = 'block';\n }\n this.drawerElement.style.display = 'block';\n this.drawerSpanElement.innerText = '';\n classList(this.drawerSpanElement, ['e-de-nav-up'], []);\n }\n this.isDrawerExpand = true;\n }\n };\n CommentView.prototype.userOptionSelectEvent = function (event) {\n var selectedItem = event.item.text;\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n switch (selectedItem) {\n case localObj.getConstant('Edit'):\n this.editComment();\n break;\n case localObj.getConstant('Reply'):\n this.enableReplyView();\n break;\n case localObj.getConstant('Delete'):\n this.deleteComment();\n break;\n case localObj.getConstant('Resolve'):\n this.owner.editorModule.resolveComment(this.comment);\n break;\n case localObj.getConstant('Reopen'):\n this.owner.editorModule.reopenComment(this.comment);\n }\n };\n CommentView.prototype.unwireEvent = function () {\n if (this.drawerAction) {\n this.drawerAction.removeEventListener('click', this.showOrHideDrawer.bind(this));\n }\n if (this.textArea) {\n this.textArea.removeEventListener('keydown', this.updateTextAreaHeight.bind(this));\n this.textArea.removeEventListener('keyup', this.enableDisablePostButton.bind(this));\n }\n if (this.postButton) {\n this.postButton.removeEventListener('click', this.postComment.bind(this));\n }\n if (this.cancelButton) {\n this.cancelButton.removeEventListener('click', this.cancelEditing.bind(this));\n }\n if (this.commentView) {\n this.commentView.removeEventListener('click', this.selectComment.bind(this));\n this.commentView.removeEventListener('mouseenter', this.showMenuItems.bind(this));\n this.commentView.removeEventListener('mouseleave', this.hideMenuItemOnMouseLeave.bind(this));\n }\n };\n CommentView.prototype.destroy = function () {\n this.unwireEvent();\n if (this.comment) {\n this.comment = undefined;\n }\n if (this.dropDownButton) {\n this.dropDownButton.destroy();\n }\n this.dropDownButton = undefined;\n if (this.postButton) {\n this.postButton.destroy();\n }\n this.postButton = undefined;\n if (this.cancelButton) {\n this.cancelButton.destroy();\n }\n this.cancelButton = undefined;\n if (this.replyPostButton) {\n this.replyPostButton.destroy();\n this.replyPostButton = undefined;\n }\n if (this.replyCancelButton) {\n this.replyCancelButton.destroy();\n this.replyCancelButton = undefined;\n }\n if (this.reopenButton) {\n this.reopenButton.destroy();\n this.reopenButton = undefined;\n }\n if (this.deleteButton) {\n this.deleteButton.destroy();\n this.deleteButton = undefined;\n }\n if (this.parentElement) {\n this.parentElement.innerHTML = '';\n if (this.parentElement.parentElement) {\n this.parentElement.parentElement.removeChild(this.parentElement);\n }\n }\n this.parentElement = undefined;\n if (this.commentView) {\n this.commentView.innerHTML = '';\n if (this.commentView.parentElement) {\n this.commentView.parentElement.removeChild(this.commentView);\n }\n }\n this.commentView = undefined;\n this.replyViewContainer = undefined;\n this.replyViewTextBox = undefined;\n this.replyFooter = undefined;\n this.resolveView = undefined;\n this.menuBar = undefined;\n this.drawerAction = undefined;\n this.commentText = undefined;\n this.commentDate = undefined;\n this.textAreaContainer = undefined;\n this.textArea = undefined;\n this.drawerElement = undefined;\n this.drawerSpanElement = undefined;\n this.commentPane = undefined;\n this.owner = undefined;\n };\n return CommentView;\n}());\nexport { CommentView };\n","import { isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar Zoom = /** @class */ (function () {\n function Zoom(documentHelper) {\n var _this = this;\n /**\n * @private\n * @param {WheelEvent} event Specifies the mouse wheen event\n * @returns {void}\n */\n this.onMouseWheelInternal = function (event) {\n if (event.ctrlKey === true) {\n event.preventDefault();\n var pageX = event.pageX - _this.documentHelper.viewerContainer.offsetLeft;\n if (pageX < _this.documentHelper.pageContainer.offsetWidth) {\n var isFirefFox = void 0;\n if (navigator !== undefined) {\n isFirefFox = navigator.userAgent.match('Firefox');\n }\n /* eslint-disable */\n var wheel = isFirefFox ? event.detail < 0 : (Browser.isIE ? event.wheelDelta > 0 : event.deltaY < 0);\n /* eslint-enable */\n var zoomFactor = _this.documentHelper.zoomFactor;\n if (wheel) {\n if (zoomFactor <= 4.90) {\n zoomFactor += .10;\n }\n else {\n zoomFactor = 5.00;\n }\n }\n else {\n if (zoomFactor >= .20) {\n zoomFactor -= .10;\n }\n else {\n zoomFactor = 0.10;\n }\n }\n _this.documentHelper.zoomFactor = zoomFactor;\n }\n }\n };\n this.documentHelper = documentHelper;\n }\n Zoom.prototype.setZoomFactor = function () {\n this.onZoomFactorChanged();\n if (!isNullOrUndefined(this.documentHelper.selection)) {\n this.documentHelper.selection.updateCaretPosition();\n }\n this.documentHelper.updateTouchMarkPosition();\n if (!isNullOrUndefined(this.documentHelper.owner.imageResizerModule)) {\n this.documentHelper.owner.imageResizerModule.updateImageResizerPosition();\n }\n this.documentHelper.owner.fireZoomFactorChange();\n };\n Object.defineProperty(Zoom.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n //Zoom Implementation Starts\n Zoom.prototype.onZoomFactorChanged = function () {\n if (this.documentHelper.zoomFactor > 5) {\n this.documentHelper.zoomFactor = 5;\n }\n else if (this.documentHelper.zoomFactor < 0.1) {\n this.documentHelper.zoomFactor = 0.1;\n }\n this.zoom();\n };\n Zoom.prototype.zoom = function () {\n var viewer = this.viewer;\n this.documentHelper.clearContent();\n viewer.handleZoom();\n this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n Zoom.prototype.destroy = function () {\n this.documentHelper = undefined;\n };\n return Zoom;\n}());\nexport { Zoom };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property, setValue } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, isNullOrUndefined, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { addClass, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect, closest } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler, setHiddenInput } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\nvar containerAttr = ['title', 'class', 'style', 'disabled', 'readonly', 'name', 'value', 'id', 'tabindex'];\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * \n * \n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n __extends(CheckBox, _super);\n /**\n * Constructor for creating the widget\n *\n * @private\n * @param {CheckBoxModel} options - Specifies checkbox model\n * @param {string | HTMLInputElement} element - Specifies target element\n */\n function CheckBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFocused = false;\n _this.isMouseClick = false;\n _this.clickTriggered = false;\n _this.validCheck = true;\n return _this;\n }\n CheckBox.prototype.changeState = function (state, isInitialize) {\n var wrapper = this.getWrapper();\n var rippleSpan = null;\n var frameSpan = null;\n if (wrapper) {\n frameSpan = wrapper.getElementsByClassName(FRAME)[0];\n if (isRippleEnabled) {\n rippleSpan = wrapper.getElementsByClassName(RIPPLE)[0];\n }\n }\n if (state === 'check') {\n if (frameSpan) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n }\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n rippleSpan.classList.add(RIPPLECHECK);\n }\n this.element.checked = true;\n if ((this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) && this.validCheck && !isInitialize) {\n this.element.checked = false;\n this.validCheck = false;\n }\n else if (this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) {\n this.validCheck = true;\n }\n }\n else if (state === 'uncheck') {\n if (frameSpan) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n }\n if (rippleSpan) {\n removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n }\n this.element.checked = false;\n if ((this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) && this.validCheck && !isInitialize) {\n this.element.checked = true;\n this.validCheck = false;\n }\n else if (this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) {\n this.validCheck = true;\n }\n }\n else {\n if (frameSpan) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n }\n if (rippleSpan) {\n rippleSpan.classList.remove(RIPPLECHECK);\n rippleSpan.classList.add(RIPPLEINDETERMINATE);\n }\n this.element.indeterminate = true;\n this.indeterminate = true;\n }\n };\n CheckBox.prototype.clickHandler = function (event) {\n if (event.target.tagName === 'INPUT' && this.clickTriggered) {\n if (this.isVue) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n this.clickTriggered = false;\n return;\n }\n if (event.target.tagName === 'SPAN' || event.target.tagName === 'LABEL' ||\n closest(event.target, '.e-label')) {\n this.clickTriggered = true;\n }\n if (this.isMouseClick) {\n this.focusOutHandler();\n this.isMouseClick = false;\n }\n if (this.indeterminate) {\n this.changeState(this.checked ? 'check' : 'uncheck');\n this.indeterminate = false;\n this.element.indeterminate = false;\n }\n else if (this.checked) {\n this.changeState('uncheck');\n this.checked = false;\n }\n else {\n this.changeState('check');\n this.checked = true;\n }\n var changeEventArgs = { checked: this.updateVueArrayModel(false), event: event };\n this.trigger('change', changeEventArgs);\n event.stopPropagation();\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n CheckBox.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n if (this.wrapper) {\n wrapper = this.wrapper;\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n if (this.getWrapper() && wrapper.parentNode) {\n wrapper.parentNode.insertBefore(this.element, wrapper);\n }\n detach(wrapper);\n this.element.checked = false;\n if (this.indeterminate) {\n this.element.indeterminate = false;\n }\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n this.element = wrapper;\n if (this.refreshing) {\n ['e-control', 'e-checkbox', 'e-lib'].forEach(function (key) {\n _this.element.classList.add(key);\n });\n setValue('ej2_instances', [this], this.element);\n }\n }\n }\n };\n CheckBox.prototype.focusHandler = function () {\n this.isFocused = true;\n };\n CheckBox.prototype.focusOutHandler = function () {\n var wrapper = this.getWrapper();\n if (wrapper) {\n wrapper.classList.remove('e-focus');\n }\n this.isFocused = false;\n };\n /**\n * Gets the module name.\n *\n * @private\n * @returns {string} - Module Name\n */\n CheckBox.prototype.getModuleName = function () {\n return 'checkbox';\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n *\n * @private\n * @returns {string} - Persist Data\n */\n CheckBox.prototype.getPersistData = function () {\n return this.addOnPersist(['checked', 'indeterminate']);\n };\n CheckBox.prototype.getWrapper = function () {\n if (this.element && this.element.parentElement) {\n return this.element.parentElement.parentElement;\n }\n else {\n return null;\n }\n };\n CheckBox.prototype.getLabel = function () {\n if (this.element) {\n return this.element.parentElement;\n }\n else {\n return null;\n }\n };\n CheckBox.prototype.initialize = function () {\n if (isNullOrUndefined(this.initialCheckedValue)) {\n this.initialCheckedValue = this.checked;\n }\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n if (this.value) {\n this.element.setAttribute('value', this.value);\n if (this.isVue && typeof this.value === 'boolean' && this.value === true) {\n this.setProperties({ 'checked': true }, true);\n }\n }\n if (this.checked) {\n this.changeState('check', true);\n }\n if (this.indeterminate) {\n this.changeState();\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n CheckBox.prototype.initWrapper = function () {\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', {\n className: WRAPPER\n });\n if (this.element.parentNode) {\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n var frameSpan = this.createElement('span', { className: 'e-icons ' + FRAME });\n wrapper.classList.add('e-wrapper');\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n wrapper.appendChild(label);\n label.appendChild(this.element);\n setHiddenInput(this, label);\n label.appendChild(frameSpan);\n if (isRippleEnabled) {\n var rippleSpan = this.createElement('span', { className: RIPPLE });\n if (this.labelPosition === 'Before') {\n label.appendChild(rippleSpan);\n }\n else {\n label.insertBefore(rippleSpan, frameSpan);\n }\n rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n CheckBox.prototype.keyUpHandler = function () {\n if (this.isFocused) {\n this.getWrapper().classList.add('e-focus');\n }\n };\n CheckBox.prototype.labelMouseDownHandler = function (e) {\n this.isMouseClick = true;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n CheckBox.prototype.labelMouseLeaveHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = rippleElem.length - 1; i > 0; i--) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n CheckBox.prototype.labelMouseUpHandler = function (e) {\n this.isMouseClick = true;\n var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = 0; i < rippleElem.length - 1; i++) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n /**\n * Called internally if any of the property value changes.\n *\n * @private\n * @param {CheckBoxModel} newProp - Specifies new Properties\n * @param {CheckBoxModel} oldProp - Specifies old Properties\n *\n * @returns {void}\n */\n CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n this.indeterminate = false;\n this.element.indeterminate = false;\n this.changeState(newProp.checked ? 'check' : 'uncheck');\n break;\n case 'indeterminate':\n if (newProp.indeterminate) {\n this.changeState();\n }\n else {\n this.element.indeterminate = false;\n this.changeState(this.checked ? 'check' : 'uncheck');\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.wrapper = this.getWrapper();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n wrapper.classList.remove(DISABLED);\n wrapper.setAttribute('aria-disabled', 'false');\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition': {\n var label = wrapper.getElementsByClassName(LABEL)[0];\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n detach(label);\n if (newProp.labelPosition === 'After') {\n labelWrap.appendChild(label);\n }\n else {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n break;\n }\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n if (this.isVue && typeof newProp.value === 'object') {\n break;\n }\n this.element.setAttribute('value', newProp.value);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToWrapper();\n break;\n }\n }\n };\n /**\n * Initialize Angular, React and Unique ID support.\n *\n * @private\n * @returns {void}\n */\n CheckBox.prototype.preRender = function () {\n var element = this.element;\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-CHECKBOX', 'checkbox', element, WRAPPER, 'checkbox');\n this.element = element;\n if (this.element.getAttribute('type') !== 'checkbox') {\n this.element.setAttribute('type', 'checkbox');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the control rendering.\n *\n * @private\n * @returns {void}\n */\n CheckBox.prototype.render = function () {\n this.initWrapper();\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n this.updateHtmlAttributeToWrapper();\n this.updateVueArrayModel(true);\n this.renderComplete();\n this.wrapper = this.getWrapper();\n };\n CheckBox.prototype.setDisabled = function () {\n var wrapper = this.getWrapper();\n this.element.disabled = true;\n wrapper.classList.add(DISABLED);\n wrapper.setAttribute('aria-disabled', 'true');\n };\n CheckBox.prototype.setText = function (text) {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n return;\n }\n var label = wrapper.getElementsByClassName(LABEL)[0];\n if (label) {\n label.innerHTML = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(text) : text;\n }\n else {\n text = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(text) : text;\n label = this.createElement('span', { className: LABEL, innerHTML: text });\n var labelWrap = wrapper.getElementsByTagName('label')[0];\n if (this.labelPosition === 'Before') {\n labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n }\n else {\n labelWrap.appendChild(label);\n }\n }\n };\n CheckBox.prototype.changeHandler = function (e) {\n e.stopPropagation();\n };\n CheckBox.prototype.formResetHandler = function () {\n this.checked = this.initialCheckedValue;\n this.element.checked = this.initialCheckedValue;\n };\n CheckBox.prototype.unWireEvents = function () {\n var wrapper = this.wrapper;\n if (wrapper) {\n EventHandler.remove(wrapper, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n }\n var label = wrapper.getElementsByTagName('label')[0];\n if (label) {\n EventHandler.remove(label, 'mousedown', this.labelMouseDownHandler);\n EventHandler.remove(label, 'mouseup', this.labelMouseUpHandler);\n EventHandler.remove(label, 'mouseleave', this.labelMouseLeaveHandler);\n }\n var formElem = closest(this.element, 'form');\n if (formElem) {\n EventHandler.remove(formElem, 'reset', this.formResetHandler);\n }\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.remove(this.element, 'change', this.changeHandler);\n }\n };\n CheckBox.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n EventHandler.add(wrapper, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var label = wrapper.getElementsByTagName('label')[0];\n EventHandler.add(label, 'mousedown', this.labelMouseDownHandler, this);\n EventHandler.add(label, 'mouseup', this.labelMouseUpHandler, this);\n EventHandler.add(label, 'mouseleave', this.labelMouseLeaveHandler, this);\n var formElem = closest(this.element, 'form');\n if (formElem) {\n EventHandler.add(formElem, 'reset', this.formResetHandler, this);\n }\n if (this.tagName === 'EJS-CHECKBOX') {\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n }\n };\n CheckBox.prototype.updateVueArrayModel = function (init) {\n if (this.isVue && typeof this.value === 'object') {\n var value = this.element.value;\n if (value && this.value) {\n if (init) {\n for (var i = 0; i < this.value.length; i++) {\n if (value === this.value[i]) {\n this.changeState('check');\n this.setProperties({ 'checked': true }, true);\n }\n }\n }\n else {\n var index = this.value.indexOf(value);\n if (this.checked) {\n if (index < 0) {\n this.value.push(value);\n }\n }\n else {\n if (index > -1) {\n this.value.splice(index, 1);\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.value;\n }\n }\n }\n return this.validCheck ? this.element.checked : !this.element.checked;\n };\n CheckBox.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n var wrapper = this.getWrapper();\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n addClass([wrapper], this.htmlAttributes[\"\" + key].split(' '));\n }\n else if (key === 'title') {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else if (key === 'style') {\n var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n frameSpan.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else if (key === 'disabled') {\n if (this.htmlAttributes[\"\" + key] === 'true') {\n this.setDisabled();\n }\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else {\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n else {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n /**\n * Click the CheckBox element\n * its native method\n *\n * @public\n * @returns {void}\n */\n CheckBox.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to CheckBox\n * its native method\n *\n * @public\n * @returns {void}\n */\n CheckBox.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Event()\n ], CheckBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], CheckBox.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], CheckBox.prototype, \"indeterminate\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], CheckBox.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], CheckBox.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], CheckBox.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property({})\n ], CheckBox.prototype, \"htmlAttributes\", void 0);\n CheckBox = __decorate([\n NotifyPropertyChanges\n ], CheckBox);\n return CheckBox;\n}(Component));\nexport { CheckBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, formatUnit, isNullOrUndefined, append, detach, extend } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, prepend, closest, remove } from '@syncfusion/ej2-base';\nimport { Component, EventHandler, Property, Complex, Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { compile, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Animation, rippleEffect, Touch, animationMode } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { ListBase, getFieldValues } from '../common/list-base';\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// Effect Configuration Effect[] = [fromViewBackward,fromViewForward,toViewBackward,toviewForward];\nvar effectsConfig = {\n 'None': [],\n 'SlideLeft': ['SlideRightOut', 'SlideLeftOut', 'SlideLeftIn', 'SlideRightIn'],\n 'SlideDown': ['SlideTopOut', 'SlideBottomOut', 'SlideBottomIn', 'SlideTopIn'],\n 'Zoom': ['FadeOut', 'FadeZoomOut', 'FadeZoomIn', 'FadeIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\nvar effectsRTLConfig = {\n 'None': [],\n 'SlideLeft': ['SlideLeftOut', 'SlideRightOut', 'SlideRightIn', 'SlideLeftIn'],\n 'SlideDown': ['SlideBottomOut', 'SlideTopOut', 'SlideTopIn', 'SlideBottomIn'],\n 'Zoom': ['FadeZoomOut', 'FadeOut', 'FadeIn', 'FadeZoomIn'],\n 'Fade': ['FadeOut', 'FadeOut', 'FadeIn', 'FadeIn']\n};\n// don't use space in classnames.\nexport var classNames = {\n root: 'e-listview',\n hover: 'e-hover',\n selected: 'e-active',\n focused: 'e-focused',\n parentItem: 'e-list-parent',\n listItem: 'e-list-item',\n listIcon: 'e-list-icon',\n textContent: 'e-text-content',\n listItemText: 'e-list-text',\n groupListItem: 'e-list-group-item',\n hasChild: 'e-has-child',\n view: 'e-view',\n header: 'e-list-header',\n headerText: 'e-headertext',\n headerTemplateText: 'e-headertemplate-text',\n text: 'e-text',\n disable: 'e-disabled',\n container: 'e-list-container',\n icon: 'e-icons',\n backIcon: 'e-icon-back',\n backButton: 'e-back-button',\n checkboxWrapper: 'e-checkbox-wrapper',\n checkbox: 'e-checkbox',\n checked: 'e-check',\n checklist: 'e-checklist',\n checkboxIcon: 'e-frame',\n checkboxRight: 'e-checkbox-right',\n checkboxLeft: 'e-checkbox-left',\n listviewCheckbox: 'e-listview-checkbox',\n itemCheckList: 'e-checklist',\n virtualElementContainer: 'e-list-virtualcontainer'\n};\nvar LISTVIEW_TEMPLATE_PROPERTY = 'Template';\nvar LISTVIEW_GROUPTEMPLATE_PROPERTY = 'GroupTemplate';\nvar LISTVIEW_HEADERTEMPLATE_PROPERTY = 'HeaderTemplate';\nvar swipeVelocity = 0.5;\n/**\n * Represents the field settings of the ListView.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"id\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('isVisible')\n ], FieldSettings.prototype, \"isVisible\", void 0);\n __decorate([\n Property('enabled')\n ], FieldSettings.prototype, \"enabled\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('child')\n ], FieldSettings.prototype, \"child\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('groupBy')\n ], FieldSettings.prototype, \"groupBy\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"sortBy\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('tableName')\n ], FieldSettings.prototype, \"tableName\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Represents the EJ2 ListView control.\n * ```html\n *
\n *
    \n *
  • Favorite
  • \n *
  • Documents
  • \n *
  • Downloads
  • \n *
\n *
\n * ```\n * ```typescript\n * var listviewObject = new ListView({});\n * listviewObject.appendTo(\"#listview\");\n * ```\n */\nvar ListView = /** @class */ (function (_super) {\n __extends(ListView, _super);\n /**\n * Constructor for creating the widget\n *\n * @param options\n *\n * @param element\n */\n function ListView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousSelectedItems = [];\n _this.hiddenItems = [];\n _this.enabledItems = [];\n _this.disabledItems = [];\n return _this;\n }\n /**\n * @param newProp\n *\n * @param oldProp\n *\n * @private\n */\n ListView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'htmlAttributes':\n this.setHTMLAttribute();\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'enable':\n this.setEnable();\n break;\n case 'width':\n case 'height':\n this.setSize();\n break;\n case 'enableRtl':\n this.setEnableRTL();\n break;\n case 'fields':\n this.listBaseOption.fields = this.fields.properties;\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'headerTitle':\n if (!this.curDSLevel.length) {\n this.header(this.headerTitle, false, 'header');\n }\n break;\n case 'query':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'showHeader':\n this.header(this.headerTitle, false, 'header');\n break;\n case 'enableVirtualization':\n if (!isNullOrUndefined(this.contentContainer)) {\n detach(this.contentContainer);\n }\n this.refresh();\n break;\n case 'showCheckBox':\n case 'checkBoxPosition':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.setCheckbox();\n }\n break;\n case 'dataSource':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.reRender();\n }\n break;\n case 'sortOrder':\n case 'template':\n if (!this.enableVirtualization) {\n this.refresh();\n }\n break;\n case 'showIcon':\n if (this.enableVirtualization) {\n this.virtualizationModule.reRenderUiVirtualization();\n }\n else {\n this.listBaseOption.showIcon = this.showIcon;\n this.curViewDS = this.getSubDS();\n this.resetCurrentList();\n }\n break;\n default:\n break;\n }\n }\n };\n // Model Changes\n ListView.prototype.setHTMLAttribute = function () {\n if (!isNullOrUndefined(this.htmlAttributes) && Object.keys(this.htmlAttributes).length) {\n attributes(this.element, this.htmlAttributes);\n }\n };\n ListView.prototype.setCSSClass = function (oldCSSClass) {\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' ').filter(function (css) { return css; }));\n }\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' ').filter(function (css) { return css; }));\n }\n };\n ListView.prototype.setSize = function () {\n this.element.style.height = formatUnit(this.height);\n this.element.style.width = formatUnit(this.width);\n this.isWindow = this.element.clientHeight ? false : true;\n };\n ListView.prototype.setEnable = function () {\n this.enableElement(this.element, this.enable);\n };\n ListView.prototype.setEnableRTL = function () {\n if (this.enableRtl) {\n this.element.classList.add('e-rtl');\n }\n else {\n this.element.classList.remove('e-rtl');\n }\n };\n ListView.prototype.enableElement = function (element, isEnabled) {\n if (isEnabled) {\n element.classList.remove(classNames.disable);\n }\n else {\n element.classList.add(classNames.disable);\n }\n };\n // Support Component Functions\n ListView.prototype.header = function (text, showBack, prop) {\n if (this.headerEle === undefined && this.showHeader) {\n this.headerEle = this.createElement('div', { className: classNames.header });\n var innerHeaderEle = this.createElement('span', { className: classNames.headerText });\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n innerHeaderEle.innerText = this.headerTitle;\n }\n else {\n innerHeaderEle.innerHTML = this.headerTitle;\n }\n var textEle = this.createElement('div', { className: classNames.text, innerHTML: innerHeaderEle.outerHTML });\n var hedBackButton = this.createElement('div', {\n className: classNames.icon + ' ' + classNames.backIcon + ' ' + classNames.backButton,\n attrs: { style: 'display:none;' }\n });\n this.headerEle.appendChild(hedBackButton);\n this.headerEle.appendChild(textEle);\n if (this.headerTemplate) {\n var compiledString = compile(this.headerTemplate);\n var headerTemplateEle = this.createElement('div', { className: classNames.headerTemplateText });\n var compiledElement = compiledString({}, this, prop, this.LISTVIEW_HEADERTEMPLATE_ID, null, null, this.headerEle);\n if (compiledElement) {\n append(compiledElement, headerTemplateEle);\n }\n append([headerTemplateEle], this.headerEle);\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n if (this.headerTemplate && this.headerTitle) {\n textEle.classList.add('header');\n }\n this.element.classList.add('e-has-header');\n prepend([this.headerEle], this.element);\n }\n else if (this.headerEle) {\n if (this.showHeader) {\n this.headerEle.style.display = '';\n var textEle = this.headerEle.querySelector('.' + classNames.headerText);\n var hedBackButton = this.headerEle.querySelector('.' + classNames.backIcon);\n if (this.enableHtmlSanitizer) {\n text = SanitizeHtmlHelper.sanitize(text);\n }\n textEle.innerHTML = text;\n if (this.headerTemplate && showBack) {\n textEle.parentElement.classList.remove('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('nested-header');\n }\n if (this.headerTemplate && !showBack) {\n textEle.parentElement.classList.add('header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.remove('nested-header');\n this.headerEle.querySelector('.' + classNames.headerTemplateText).classList.add('header');\n }\n if (showBack === true) {\n hedBackButton.style.display = '';\n }\n else {\n hedBackButton.style.display = 'none';\n }\n }\n else {\n this.headerEle.style.display = 'none';\n }\n }\n };\n // Animation Related Functions\n ListView.prototype.switchView = function (fromView, toView, reverse) {\n var _this = this;\n if (fromView && toView) {\n var fPos_1 = fromView.style.position;\n var overflow_1 = (this.element.style.overflow !== 'hidden') ? this.element.style.overflow : '';\n fromView.style.position = 'absolute';\n fromView.classList.add('e-view');\n var anim = void 0;\n var duration = this.animation.duration;\n if (this.animation.effect) {\n anim = (this.enableRtl ? effectsRTLConfig[this.animation.effect] : effectsConfig[this.animation.effect]);\n }\n else {\n var slideLeft = 'SlideLeft';\n anim = effectsConfig[\"\" + slideLeft];\n reverse = this.enableRtl;\n duration = 0;\n }\n this.element.style.overflow = 'hidden';\n this.aniObj.animate(fromView, {\n name: (reverse === true ? anim[0] : anim[1]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n end: function () {\n fromView.style.display = 'none';\n _this.element.style.overflow = overflow_1;\n fromView.style.position = fPos_1;\n fromView.classList.remove('e-view');\n }\n });\n toView.style.display = '';\n this.aniObj.animate(toView, {\n name: (reverse === true ? anim[2] : anim[3]),\n duration: (duration === 0 && animationMode === 'Enable') ? 400 : duration,\n timingFunction: this.animation.easing,\n end: function () {\n _this.trigger('actionComplete');\n }\n });\n this.curUL = toView;\n }\n };\n ListView.prototype.preRender = function () {\n if (this.template) {\n try {\n if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n this.setProperties({ template: document.querySelector(this.template).innerHTML.trim() }, true);\n }\n }\n catch (e) {\n compile(this.template);\n }\n }\n this.listBaseOption = {\n template: this.template,\n headerTemplate: this.headerTemplate,\n groupTemplate: this.groupTemplate, expandCollapse: true, listClass: '',\n ariaAttributes: {\n itemRole: 'listitem', listRole: 'list', itemText: '',\n groupItemRole: 'presentation', wrapperRole: 'presentation'\n },\n fields: (this.fields.properties),\n sortOrder: this.sortOrder,\n showIcon: this.showIcon,\n itemCreated: this.renderCheckbox.bind(this),\n templateID: \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY,\n groupTemplateID: \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY,\n enableHtmlSanitizer: this.enableHtmlSanitizer\n };\n this.initialization();\n };\n ListView.prototype.initialization = function () {\n this.curDSLevel = [];\n this.animateOptions = {};\n this.curViewDS = [];\n this.currentLiElements = [];\n this.isNestedList = false;\n this.selectedData = [];\n this.selectedId = this.enablePersistence ? this.selectedId : [];\n this.LISTVIEW_TEMPLATE_ID = \"\" + this.element.id + LISTVIEW_TEMPLATE_PROPERTY;\n this.LISTVIEW_GROUPTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_GROUPTEMPLATE_PROPERTY;\n this.LISTVIEW_HEADERTEMPLATE_ID = \"\" + this.element.id + LISTVIEW_HEADERTEMPLATE_PROPERTY;\n this.aniObj = new Animation(this.animateOptions);\n this.removeElement(this.curUL);\n this.removeElement(this.ulElement);\n this.removeElement(this.headerEle);\n this.removeElement(this.contentContainer);\n this.curUL = this.ulElement = this.liCollection = this.headerEle = this.contentContainer = undefined;\n };\n ListView.prototype.renderCheckbox = function (args) {\n var _this = this;\n if (args.item.classList.contains(classNames.hasChild)) {\n this.isNestedList = true;\n }\n if (this.showCheckBox && args.item.classList.contains(classNames.listItem)) {\n var fieldData_1;\n var checkboxElement = createCheckBox(this.createElement, false, {\n checked: false, enableRtl: this.enableRtl,\n cssClass: classNames.listviewCheckbox\n });\n checkboxElement.setAttribute('role', 'checkbox');\n var frameElement_1 = checkboxElement.querySelector('.' + classNames.checkboxIcon);\n args.item.classList.add(classNames.itemCheckList);\n args.item.firstElementChild.classList.add(classNames.checkbox);\n if (typeof this.dataSource[0] !== 'string' && typeof this.dataSource[0] !== 'number') {\n fieldData_1 = getFieldValues(args.curData, this.listBaseOption.fields);\n if (this.enablePersistence && !isNullOrUndefined(this.selectedId)) {\n var index = this.selectedId.findIndex(function (e) { return e === fieldData_1[_this.listBaseOption.fields.id].toString(); });\n if (index !== -1) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (fieldData_1[this.listBaseOption.fields.isChecked]) {\n this.checkInternally(args, checkboxElement);\n }\n }\n else if (((typeof this.dataSource[0] === 'string' ||\n typeof this.dataSource[0] === 'number') && this.selectedData.indexOf(args.text) !== -1)) {\n this.checkInternally(args, checkboxElement);\n }\n checkboxElement.setAttribute('aria-checked', frameElement_1.classList.contains(classNames.checked) ? 'true' : 'false');\n checkboxElement.setAttribute('aria-label', args.text);\n if (this.checkBoxPosition === 'Left') {\n checkboxElement.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.classList.add(classNames.checkboxLeft);\n args.item.firstElementChild.insertBefore(checkboxElement, args.item.firstElementChild.childNodes[0]);\n }\n else {\n checkboxElement.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.classList.add(classNames.checkboxRight);\n args.item.firstElementChild.appendChild(checkboxElement);\n }\n this.currentLiElements.push(args.item);\n if (this.checkBoxPosition === 'Left') {\n this.virtualCheckBox = args.item.firstElementChild.children[0];\n }\n else {\n this.virtualCheckBox = args.item.firstElementChild.lastElementChild;\n }\n }\n };\n ListView.prototype.checkInternally = function (args, checkboxElement) {\n args.item.classList.add(classNames.selected);\n checkboxElement.querySelector('.' + classNames.checkboxIcon).classList.add(classNames.checked);\n checkboxElement.setAttribute('aria-checked', 'true');\n };\n /**\n * Checks the specific list item by passing the unchecked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.checkItem = function (item) {\n this.toggleCheckBase(item, true);\n };\n ListView.prototype.toggleCheckBase = function (item, checked) {\n if (this.showCheckBox) {\n var liElement = item;\n if (item instanceof Object && item.constructor !== HTMLLIElement) {\n liElement = this.getLiFromObjOrElement(item);\n }\n if (!isNullOrUndefined(liElement)) {\n var checkboxIcon = liElement.querySelector('.' + classNames.checkboxIcon);\n if (checked === true) {\n liElement.classList.add(classNames.selected);\n }\n else {\n liElement.classList.remove(classNames.selected);\n }\n if (checked === true) {\n checkboxIcon.classList.add(classNames.checked);\n }\n else {\n checkboxIcon.classList.remove(classNames.checked);\n }\n checkboxIcon.parentElement.setAttribute('aria-checked', checked ? 'true' : 'false');\n }\n this.setSelectedItemData(liElement);\n this.updateSelectedId();\n }\n };\n /**\n * Uncheck the specific list item by passing the checked fields as an argument to this method.\n *\n * @param {Fields | HTMLElement | Element} item - It accepts Fields or HTML list element as an argument.\n */\n ListView.prototype.uncheckItem = function (item) {\n this.toggleCheckBase(item, false);\n };\n /**\n * Checks all the unchecked items in the ListView.\n */\n ListView.prototype.checkAllItems = function () {\n this.toggleAllCheckBase(true);\n };\n /**\n * Uncheck all the checked items in ListView.\n */\n ListView.prototype.uncheckAllItems = function () {\n this.toggleAllCheckBase(false);\n };\n ListView.prototype.toggleAllCheckBase = function (checked) {\n if (this.showCheckBox) {\n for (var i = 0; i < this.liCollection.length; i++) {\n var checkIcon = this.liCollection[i].querySelector('.' + classNames.checkboxIcon);\n if (checkIcon) {\n if (checked) {\n if (!checkIcon.classList.contains(classNames.checked)) {\n this.checkItem(this.liCollection[i]);\n }\n }\n else {\n if (checkIcon.classList.contains(classNames.checked)) {\n this.uncheckItem(this.liCollection[i]);\n }\n }\n }\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.checkedItem(checked);\n }\n this.updateSelectedId();\n }\n };\n ListView.prototype.setCheckbox = function () {\n if (this.showCheckBox) {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n var args = {\n item: undefined, curData: undefined, dataSource: undefined, fields: undefined,\n options: undefined, text: ''\n };\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n args.item = element;\n args.curData = this.getItemData(element);\n if (element.querySelector('.' + classNames.checkboxWrapper)) {\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n this.renderCheckbox(args);\n if (args.item.classList.contains(classNames.selected)) {\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n }\n }\n else {\n var liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.itemCheckList));\n for (var i = 0; i < liCollection.length; i++) {\n var element = liCollection[i];\n element.classList.remove(classNames.selected);\n element.firstElementChild.classList.remove(classNames.checkbox);\n this.removeElement(element.querySelector('.' + classNames.checkboxWrapper));\n }\n if (this.selectedItems) {\n this.selectedItems.item.classList.add(classNames.selected);\n }\n }\n };\n /**\n * Refresh the height of the list item only on enabling the virtualization property.\n */\n ListView.prototype.refreshItemHeight = function () {\n if (this.virtualizationModule) {\n this.virtualizationModule.refreshItemHeight();\n }\n };\n ListView.prototype.clickHandler = function (e) {\n if (Array.isArray(this.dataSource) && this.dataSource.length === 0) {\n return;\n }\n var target = e.target;\n this.targetElement = target;\n var classList = target.classList;\n var closestElement;\n if (classList.contains(classNames.backIcon) || classList.contains(classNames.headerText)) {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n else {\n var li = closest(target.parentNode, '.' + classNames.listItem);\n if (li === null) {\n li = target;\n }\n this.removeFocus();\n if (this.enable && this.showCheckBox && this.isValidLI(li)) {\n if (e.target.classList.contains(classNames.checkboxIcon)) {\n li.classList.add(classNames.focused);\n if (isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n this.checkInternally(args, args.item.querySelector('.' + classNames.checkboxWrapper));\n }\n else {\n this.uncheckItem(li);\n li.classList.add(classNames.focused);\n }\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n if (e) {\n var eventArgs = this.selectEventData(li, e);\n var checkIcon = li.querySelector('.' + classNames.checkboxIcon);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n this.trigger('select', eventArgs);\n }\n }\n else if (li.classList.contains(classNames.hasChild)) {\n this.removeHover();\n this.removeSelect();\n this.removeSelect(li);\n this.setSelectLI(li, e);\n li.classList.remove(classNames.selected);\n }\n else {\n this.setCheckboxLI(li, e);\n if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n }\n else {\n this.setSelectLI(li, e);\n if ((target.nodeName === 'INPUT') || (target.nodeName === 'TEXTAREA')) {\n target.classList.add('e-focused');\n this.targetElement = target;\n }\n }\n closestElement = closest(e.target, 'li');\n if (!isNullOrUndefined(closestElement)) {\n if (closestElement.classList.contains('e-has-child') &&\n !e.target.parentElement.classList.contains('e-listview-checkbox')) {\n closestElement.classList.add(classNames.disable);\n }\n }\n }\n this.updateSelectedId();\n };\n ListView.prototype.removeElement = function (element) {\n return element && element.parentNode && element.parentNode.removeChild(element);\n };\n ListView.prototype.hoverHandler = function (e) {\n var curLi = closest(e.target.parentNode, '.' + classNames.listItem);\n this.setHoverLI(curLi);\n };\n ListView.prototype.leaveHandler = function () {\n this.removeHover();\n };\n ListView.prototype.homeKeyHandler = function (e, end) {\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var li = this.curUL.querySelectorAll('.' + classNames.listItem);\n var focusedElement = this.curUL.querySelector('.' + classNames.focused) ||\n this.curUL.querySelector('.' + classNames.selected);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n focusedElement.classList.remove(classNames.selected);\n }\n }\n var index = !end ? 0 : li.length - 1;\n if (li[index].classList.contains(classNames.hasChild) || this.showCheckBox) {\n li[index].classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(li[index], e);\n }\n if (li[index]) {\n this.element.setAttribute('aria-activedescendant', li[index].id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n }\n };\n ListView.prototype.onArrowKeyDown = function (e, prev) {\n var siblingLI;\n var li;\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n if (hasChild || this.showCheckBox) {\n li = this.curUL.querySelector('.' + classNames.focused) || this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n if (!isNullOrUndefined(siblingLI)) {\n if (li) {\n li.classList.remove(classNames.focused);\n if (!this.showCheckBox) {\n li.classList.remove(classNames.selected);\n }\n }\n if (siblingLI.classList.contains(classNames.hasChild) || this.showCheckBox) {\n siblingLI.classList.add(classNames.focused);\n }\n else {\n this.setSelectLI(siblingLI, e);\n }\n }\n }\n else {\n li = this.curUL.querySelector('.' + classNames.selected);\n siblingLI = ListBase.getSiblingLI(this.curUL.querySelectorAll('.' + classNames.listItem), li, prev);\n this.setSelectLI(siblingLI, e);\n }\n if (siblingLI) {\n this.element.setAttribute('aria-activedescendant', siblingLI.id.toString());\n }\n else {\n this.element.removeAttribute('aria-activedescendant');\n }\n return siblingLI;\n };\n ListView.prototype.arrowKeyHandler = function (e, prev) {\n var _this = this;\n e.preventDefault();\n if (Object.keys(this.dataSource).length && this.curUL) {\n var siblingLI = this.onArrowKeyDown(e, prev);\n var elementTop = this.element.getBoundingClientRect().top;\n var elementHeight = this.element.getBoundingClientRect().height;\n var firstItemBounds = this.curUL.querySelector('.' + classNames.listItem).getBoundingClientRect();\n var heightDiff = void 0;\n var groupItemBounds = void 0;\n if (this.fields.groupBy) {\n groupItemBounds = this.curUL.querySelector('.' + classNames.groupListItem).getBoundingClientRect();\n }\n if (siblingLI) {\n var siblingTop = siblingLI.getBoundingClientRect().top;\n var siblingHeight = siblingLI.getBoundingClientRect().height;\n if (!prev) {\n var height = this.isWindow ? window.innerHeight : elementHeight;\n heightDiff = this.isWindow ? (siblingTop + siblingHeight) :\n ((siblingTop - elementTop) + siblingHeight);\n if (heightDiff > height) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + (heightDiff - height));\n }\n else {\n this.element.scrollTop = this.element.scrollTop + (heightDiff - height);\n }\n }\n }\n else {\n heightDiff = this.isWindow ? siblingTop : (siblingTop - elementTop);\n if (heightDiff < 0) {\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop + heightDiff;\n }\n }\n }\n }\n else if (this.enableVirtualization && prev && this.virtualizationModule.uiFirstIndex) {\n this.onUIScrolled = function () {\n _this.onArrowKeyDown(e, prev);\n _this.onUIScrolled = undefined;\n };\n heightDiff = this.virtualizationModule.listItemHeight;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n else if (prev) {\n if (this.showHeader && this.headerEle) {\n var topHeight = groupItemBounds ? groupItemBounds.top : firstItemBounds.top;\n var headerBounds = this.headerEle.getBoundingClientRect();\n heightDiff = headerBounds.top < 0 ? (headerBounds.height - topHeight) : 0;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset - heightDiff);\n }\n else {\n this.element.scrollTop = 0;\n }\n }\n else if (this.fields.groupBy) {\n heightDiff = this.isWindow ? (groupItemBounds.top < 0 ? groupItemBounds.top : 0) :\n (elementTop - firstItemBounds.top) + groupItemBounds.height;\n if (this.isWindow === true) {\n window.scroll(0, pageYOffset + heightDiff);\n }\n else {\n this.element.scrollTop = this.element.scrollTop - heightDiff;\n }\n }\n }\n }\n };\n ListView.prototype.enterKeyHandler = function (e) {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var hasChild = !isNullOrUndefined(this.curUL.querySelector('.' + classNames.hasChild)) ? true : false;\n var li = this.curUL.querySelector('.' + classNames.focused);\n if (hasChild && li) {\n li.classList.remove(classNames.focused);\n if (this.showCheckBox) {\n this.removeSelect();\n this.removeSelect(li);\n this.removeHover();\n }\n this.setSelectLI(li, e);\n }\n }\n };\n ListView.prototype.spaceKeyHandler = function (e) {\n if (this.enable && this.showCheckBox && Object.keys(this.dataSource).length && this.curUL) {\n e.preventDefault();\n var li = this.curUL.querySelector('.' + classNames.focused);\n var checkboxElement = void 0;\n var checkIcon = void 0;\n if (!isNullOrUndefined(li) && isNullOrUndefined(li.querySelector('.' + classNames.checked))) {\n var args = {\n curData: undefined, dataSource: undefined, fields: undefined, options: undefined,\n text: undefined, item: li\n };\n checkboxElement = args.item.querySelector('.' + classNames.checkboxWrapper);\n this.checkInternally(args, checkboxElement);\n checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n }\n else {\n this.uncheckItem(li);\n }\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon ? checkIcon.classList.contains(classNames.checked) : false });\n this.trigger('select', eventArgs);\n this.updateSelectedId();\n }\n };\n ListView.prototype.keyActionHandler = function (e) {\n switch (e.keyCode) {\n case 36:\n this.homeKeyHandler(e);\n break;\n case 35:\n this.homeKeyHandler(e, true);\n break;\n case 40:\n this.arrowKeyHandler(e);\n break;\n case 38:\n this.arrowKeyHandler(e, true);\n break;\n case 13:\n this.enterKeyHandler(e);\n break;\n case 8:\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n break;\n case 32:\n if (isNullOrUndefined(this.targetElement) || !(this.targetElement.classList.contains('e-focused'))) {\n this.spaceKeyHandler(e);\n }\n break;\n }\n };\n ListView.prototype.swipeActionHandler = function (e) {\n if (e.swipeDirection === 'Right' && e.velocity > swipeVelocity && e.originalEvent.type === 'touchend') {\n if (this.showCheckBox && this.curDSLevel[this.curDSLevel.length - 1]) {\n this.uncheckAllItems();\n }\n this.back();\n }\n };\n ListView.prototype.focusout = function () {\n if (Object.keys(this.dataSource).length && this.curUL) {\n var focusedElement = this.curUL.querySelector('.' + classNames.focused);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.focused);\n if (!this.showCheckBox && !isNullOrUndefined(this.selectedLI)) {\n this.selectedLI.classList.add(classNames.selected);\n }\n }\n }\n };\n ListView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'keydown', this.keyActionHandler, this);\n EventHandler.add(this.element, 'click', this.clickHandler, this);\n EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n EventHandler.add(this.element, 'mouseout', this.leaveHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusout, this);\n this.touchModule = new Touch(this.element, { swipe: this.swipeActionHandler.bind(this) });\n if (!isNullOrUndefined(this.scroll)) {\n EventHandler.add(this.element, 'scroll', this.onListScroll, this);\n }\n };\n ListView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'keydown', this.keyActionHandler);\n EventHandler.remove(this.element, 'click', this.clickHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n EventHandler.remove(this.element, 'mouseout', this.leaveHandler);\n EventHandler.remove(this.element, 'focusout', this.focusout);\n if (!isNullOrUndefined(this.scroll)) {\n EventHandler.remove(this.element, 'scroll', this.onListScroll);\n }\n if (this.touchModule)\n this.touchModule.destroy();\n this.touchModule = null;\n };\n ListView.prototype.removeFocus = function () {\n var focusedLI = this.element.querySelectorAll('.' + classNames.focused);\n for (var _i = 0, focusedLI_1 = focusedLI; _i < focusedLI_1.length; _i++) {\n var ele = focusedLI_1[_i];\n ele.classList.remove(classNames.focused);\n }\n };\n ListView.prototype.removeHover = function () {\n var hoverLI = this.element.querySelector('.' + classNames.hover);\n if (hoverLI) {\n hoverLI.classList.remove(classNames.hover);\n }\n };\n ListView.prototype.removeSelect = function (li) {\n if (isNullOrUndefined(li)) {\n var selectedLI = this.element.querySelectorAll('.' + classNames.selected);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.showCheckBox && ele.querySelector('.' + classNames.checked)) {\n continue;\n }\n else {\n ele.classList.remove(classNames.selected);\n }\n }\n }\n else {\n li.classList.remove(classNames.selected);\n }\n };\n ListView.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(classNames.listItem)\n && !li.classList.contains(classNames.groupListItem)\n && !li.classList.contains(classNames.disable));\n };\n ListView.prototype.setCheckboxLI = function (li, e) {\n if (this.isValidLI(li) && this.enable && this.showCheckBox) {\n if (this.curUL.querySelector('.' + classNames.focused)) {\n this.curUL.querySelector('.' + classNames.focused).classList.remove(classNames.focused);\n }\n var textAreaFocus = li.querySelector('textarea') || li.querySelector('input');\n li.classList.add(classNames.focused);\n if (!isNullOrUndefined(e)) {\n if (e.target === textAreaFocus) {\n textAreaFocus.classList.add('e-focused');\n }\n }\n var checkboxElement = li.querySelector('.' + classNames.checkboxWrapper);\n var checkIcon = checkboxElement.querySelector('.' + classNames.checkboxIcon + '.' + classNames.icon);\n this.removeHover();\n if (!checkIcon.classList.contains(classNames.checked)) {\n checkIcon.classList.add(classNames.checked);\n li.classList.add(classNames.selected);\n }\n else {\n checkIcon.classList.remove(classNames.checked);\n li.classList.remove(classNames.selected);\n }\n checkboxElement.setAttribute('aria-checked', checkIcon.classList.contains(classNames.checked) ?\n 'true' : 'false');\n var eventArgs = this.selectEventData(li, e);\n merge(eventArgs, { isChecked: checkIcon.classList.contains(classNames.checked) });\n if (this.enableVirtualization) {\n this.virtualizationModule.setCheckboxLI(li, e);\n }\n this.trigger('select', eventArgs);\n this.setSelectedItemData(li);\n this.renderSubList(li);\n }\n };\n ListView.prototype.selectEventData = function (li, e) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n var selectedItem;\n if (!isNullOrUndefined(data)\n && typeof this.dataSource[0] === 'string' || typeof this.dataSource[0] === 'number') {\n selectedItem = { item: li, text: li && li.innerText.trim(), data: this.dataSource };\n }\n else {\n selectedItem =\n {\n item: li, text: fieldData && fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n var eventArgs = {};\n merge(eventArgs, selectedItem);\n if (e) {\n merge(eventArgs, {\n isInteracted: true,\n event: e,\n cancel: false,\n index: this.curUL && Array.prototype.indexOf.call(this.curUL.children, li)\n });\n }\n return eventArgs;\n };\n ListView.prototype.setSelectedItemData = function (li) {\n var data = this.getItemData(li);\n var fieldData = getFieldValues(data, this.listBaseOption.fields);\n if (!isNullOrUndefined(data) && ((typeof this.dataSource[0] === 'string') ||\n (typeof this.dataSource[0] === 'number'))) {\n this.selectedItems = {\n item: li,\n text: li && li.innerText.trim(),\n data: this.dataSource\n };\n }\n else {\n this.selectedItems = {\n item: li,\n text: fieldData && fieldData[this.listBaseOption.fields.text],\n data: data\n };\n }\n };\n ListView.prototype.setSelectLI = function (li, e) {\n var _this = this;\n if (this.isValidLI(li) && !li.classList.contains(classNames.selected) && this.enable) {\n if (!this.showCheckBox) {\n this.removeSelect();\n }\n li.classList.add(classNames.selected);\n this.removeHover();\n this.setSelectedItemData(li);\n if (this.enableVirtualization) {\n this.virtualizationModule.setSelectLI(li, e);\n }\n var eventArgs = this.selectEventData(li, e);\n this.trigger('select', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.selectedLI = li;\n _this.renderSubList(li);\n }\n });\n }\n };\n ListView.prototype.setHoverLI = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(classNames.hover) && this.enable) {\n var lastLi = this.element.querySelectorAll('.' + classNames.hover);\n if (lastLi && lastLi.length) {\n removeClass(lastLi, classNames.hover);\n }\n if (!li.classList.contains(classNames.selected) || this.showCheckBox) {\n li.classList.add(classNames.hover);\n }\n }\n };\n //Data Source Related Functions\n ListView.prototype.getSubDS = function () {\n var levelKeys = this.curDSLevel;\n if (levelKeys.length) {\n var ds = this.localData;\n for (var _i = 0, levelKeys_1 = levelKeys; _i < levelKeys_1.length; _i++) {\n var key = levelKeys_1[_i];\n var field = {};\n field[this.fields.id] = key;\n this.curDSJSON = this.findItemFromDS(ds, field);\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n ds = this.curDSJSON ? fieldData[this.fields.child] : ds;\n }\n return ds;\n }\n return this.localData;\n };\n ListView.prototype.getItemData = function (li) {\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n var fields = this.getElementUID(li);\n var curDS;\n if (isNullOrUndefined(this.element.querySelector('.' + classNames.hasChild)) && this.fields.groupBy) {\n curDS = this.curViewDS;\n }\n else {\n curDS = dataSource;\n }\n return this.findItemFromDS(curDS, fields);\n };\n ListView.prototype.findItemFromDS = function (dataSource, fields, parent) {\n var _this = this;\n var resultJSON;\n if (dataSource && dataSource.length && fields) {\n dataSource.some(function (data) {\n var fieldData = getFieldValues(data, _this.listBaseOption.fields);\n //(!(fid) || id === fid) && (!(ftext) || text === ftext) && (!!fid || !!ftext)\n if ((fields[_this.fields.id] || fields[_this.fields.text]) &&\n (!fields[_this.fields.id] || (!isNullOrUndefined(fieldData[_this.fields.id]) &&\n fieldData[_this.fields.id].toString()) === fields[_this.fields.id].toString()) &&\n (!fields[_this.fields.text] || fieldData[_this.fields.text] === fields[_this.fields.text])) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (typeof data !== 'object' && dataSource.indexOf(data) !== -1) {\n resultJSON = (parent ? dataSource : data);\n }\n else if (!isNullOrUndefined(fields[_this.fields.id]) && isNullOrUndefined(fieldData[_this.fields.id])) {\n var li = _this.element.querySelector('[data-uid=\"'\n + fields[_this.fields.id] + '\"]');\n if (li && li.innerText.trim() === fieldData[_this.fields.text]) {\n resultJSON = data;\n }\n }\n else if (Object.prototype.hasOwnProperty.call(fieldData, _this.fields.child) &&\n fieldData[_this.fields.child].length) {\n resultJSON = _this.findItemFromDS(fieldData[_this.fields.child], fields, parent);\n }\n return !!resultJSON;\n });\n }\n else {\n resultJSON = dataSource;\n }\n return resultJSON;\n };\n ListView.prototype.getQuery = function () {\n var columns = [];\n var query = (this.query ? this.query : new Query());\n if (!this.query) {\n for (var _i = 0, _a = Object.keys(this.fields.properties); _i < _a.length; _i++) {\n var column = _a[_i];\n if (column !== 'tableName' && !!(this.fields[\"\" + column]) &&\n this.fields[\"\" + column] !==\n ListBase.defaultMappedFields[\"\" + column]\n && columns.indexOf(this.fields[\"\" + column]) === -1) {\n columns.push(this.fields[\"\" + column]);\n }\n }\n query.select(columns);\n if (Object.prototype.hasOwnProperty.call(this.fields.properties, 'tableName')) {\n query.from(this.fields.tableName);\n }\n }\n return query;\n };\n ListView.prototype.setViewDataSource = function (dataSource) {\n if (dataSource === void 0) { dataSource = this.localData; }\n var fieldValue = (isNullOrUndefined(this.fields.sortBy)) ? this.fields.text : this.fields.sortBy;\n var query = ListBase.addSorting(this.sortOrder, fieldValue);\n if (dataSource && this.fields.groupBy) {\n if (this.sortOrder !== 'None') {\n this.curViewDS = ListBase.groupDataSource(ListBase.getDataSource(dataSource, query), this.listBaseOption.fields, this.sortOrder);\n }\n else {\n this.curViewDS = ListBase.groupDataSource(dataSource, this.listBaseOption.fields, this.sortOrder);\n }\n }\n else if (dataSource && this.sortOrder !== 'None') {\n this.curViewDS = ListBase.getDataSource(dataSource, query);\n }\n else {\n this.curViewDS = dataSource;\n }\n };\n ListView.prototype.isInAnimation = function () {\n return this.curUL.classList.contains('.e-animate');\n };\n ListView.prototype.renderRemoteLists = function (e, listViewComponent) {\n if (this.isDestroyed) {\n return;\n }\n this.localData = e.result;\n listViewComponent.removeElement(listViewComponent.contentContainer);\n this.renderList();\n this.trigger('actionComplete', e);\n };\n ListView.prototype.triggerActionFailure = function (e) {\n if (this.isDestroyed) {\n return;\n }\n this.trigger('actionFailure', e);\n };\n ListView.prototype.setLocalData = function () {\n var _this = this;\n this.trigger('actionBegin');\n if (this.dataSource instanceof DataManager) {\n if (this.dataSource.ready) {\n this.dataSource.ready.then(function (e) {\n _this.isOffline = _this.dataSource.dataSource.offline;\n if (_this.dataSource instanceof DataManager && _this.isOffline) {\n _this.renderRemoteLists(e, _this);\n }\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n else {\n this.dataSource.executeQuery(this.getQuery()).then(function (e) {\n _this.renderRemoteLists(e, _this);\n }).catch(function (e) {\n _this.triggerActionFailure(e);\n });\n }\n }\n else if (!this.dataSource || !this.dataSource.length) {\n var ul = this.element.querySelector('ul');\n if (ul) {\n remove(ul);\n this.setProperties({ dataSource: ListBase.createJsonFromElement(ul) }, true);\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n }\n else {\n this.localData = this.dataSource;\n this.renderList();\n this.trigger('actionComplete', { data: this.localData });\n }\n };\n ListView.prototype.reRender = function () {\n this.removeElement(this.headerEle);\n this.removeElement(this.ulElement);\n this.removeElement(this.contentContainer);\n if (this.isReact) {\n this.clearTemplate();\n }\n if (Object.keys(window).indexOf('ejsInterop') === -1) {\n this.element.innerHTML = '';\n }\n this.headerEle = this.ulElement = this.liCollection = undefined;\n this.header();\n this.setLocalData();\n };\n ListView.prototype.resetCurrentList = function () {\n this.setViewDataSource(this.curViewDS);\n this.contentContainer.innerHTML = '';\n this.createList();\n this.renderIntoDom(this.curUL);\n };\n ListView.prototype.setAttributes = function (liElements) {\n for (var i = 0; i < liElements.length; i++) {\n var element = liElements[parseInt(i.toString(), 10)];\n if (element.classList.contains('e-list-item')) {\n element.setAttribute('id', this.element.id + '_' + element.getAttribute('data-uid'));\n element.setAttribute('tabindex', '-1');\n }\n }\n };\n ListView.prototype.createList = function () {\n this.currentLiElements = [];\n this.isNestedList = false;\n this.ulElement = this.curUL = ListBase.createList(this.createElement, this.curViewDS, this.listBaseOption, null, this);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(this.liCollection);\n };\n ListView.prototype.renderSubList = function (li) {\n this.liElement = li;\n var uID = li.getAttribute('data-uid');\n if (li.classList.contains(classNames.hasChild) && uID) {\n var ul = closest(li.parentNode, '.' + classNames.parentItem);\n var ele = this.element.querySelector('[pid=\\'' + uID + '\\']');\n this.curDSLevel.push(uID);\n this.setViewDataSource(this.getSubDS());\n if (!ele) {\n var data = this.curViewDS;\n ele = ListBase.createListFromJson(this.createElement, data, this.listBaseOption, this.curDSLevel.length, null, this);\n if (this.isReact) {\n this.renderReactTemplates();\n }\n var lists = ele.querySelectorAll('.' + classNames.listItem);\n this.setAttributes(lists);\n ele.setAttribute('pID', uID);\n ele.style.display = 'none';\n this.renderIntoDom(ele);\n }\n this.switchView(ul, ele);\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.selectedItems) {\n var fieldData = getFieldValues(this.selectedItems.data, this.listBaseOption.fields);\n this.header((fieldData[this.listBaseOption.fields.text]), true, 'header');\n }\n this.selectedLI = undefined;\n }\n };\n ListView.prototype.renderIntoDom = function (ele) {\n this.contentContainer.appendChild(ele);\n };\n ListView.prototype.renderList = function (data) {\n this.setViewDataSource(data);\n if (this.enableVirtualization) {\n if (Object.keys(this.dataSource).length) {\n if ((this.template || this.groupTemplate) && !this.virtualizationModule.isNgTemplate()) {\n this.listBaseOption.itemCreated = this.virtualizationModule.createUIItem.bind(this.virtualizationModule);\n }\n }\n this.virtualizationModule.uiVirtualization();\n }\n else {\n this.createList();\n this.contentContainer = this.createElement('div', { className: classNames.container });\n this.element.appendChild(this.contentContainer);\n this.renderIntoDom(this.ulElement);\n if (this.isReact) {\n this.renderReactTemplates();\n }\n }\n };\n ListView.prototype.getElementUID = function (obj) {\n var fields = {};\n if (obj instanceof Element) {\n fields[this.fields.id] = obj.getAttribute('data-uid');\n }\n else {\n fields = obj;\n }\n return fields;\n };\n /**\n * Initializes the ListView component rendering.\n */\n ListView.prototype.render = function () {\n this.element.classList.add(classNames.root);\n attributes(this.element, { tabindex: '0' });\n this.setCSSClass();\n this.setEnableRTL();\n this.setEnable();\n this.setSize();\n this.wireEvents();\n this.header();\n this.setLocalData();\n this.setHTMLAttribute();\n this.rippleFn = rippleEffect(this.element, {\n selector: '.' + classNames.listItem\n });\n this.renderComplete();\n this.previousScrollTop = this.element.scrollTop;\n };\n /**\n * It is used to destroy the ListView component.\n */\n ListView.prototype.destroy = function () {\n if (this.isReact) {\n this.clearTemplate();\n }\n this.unWireEvents();\n var classAr = [classNames.root, classNames.disable, 'e-rtl',\n 'e-has-header', 'e-lib'].concat(this.cssClass ? this.cssClass.split(' ').filter(function (css) { return css; }) : []);\n removeClass([this.element], classAr);\n this.element.removeAttribute('role');\n this.element.removeAttribute('tabindex');\n this.curUL = this.ulElement = this.liCollection = this.headerEle = undefined;\n this.element.innerHTML = '';\n this.contentContainer = null;\n this.selectedItems = null;\n this.selectedLI = null;\n this.liElement = null;\n this.targetElement = null;\n this.currentLiElements = null;\n this.virtualCheckBox = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Switches back from the navigated sub list item.\n */\n ListView.prototype.back = function () {\n var pID = this.curDSLevel[this.curDSLevel.length - 1];\n if (pID === undefined || this.isInAnimation()) {\n return;\n }\n this.curDSLevel.pop();\n this.setViewDataSource(this.getSubDS());\n var toUL = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n var fromUL = this.curUL;\n if (!toUL) {\n this.createList();\n this.renderIntoDom(this.ulElement);\n toUL = this.curUL;\n }\n else {\n toUL = toUL.parentElement;\n }\n var fieldData = getFieldValues(this.curDSJSON, this.listBaseOption.fields);\n var text = fieldData[this.fields.text];\n this.switchView(fromUL, toUL, true);\n this.removeFocus();\n var li = this.element.querySelector('[data-uid=\\'' + pID + '\\']');\n li.classList.remove(classNames.disable);\n li.classList.add(classNames.focused);\n if (!(this.showCheckBox && li.querySelector('.' + classNames.checkboxIcon).classList.contains(classNames.checked))) {\n li.classList.remove(classNames.selected);\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n if (this.enableHtmlSanitizer) {\n this.setProperties({ headerTitle: SanitizeHtmlHelper.sanitize(this.headerTitle) }, true);\n }\n this.header((this.curDSLevel.length ? text : this.headerTitle), (this.curDSLevel.length ? true : false), 'header');\n };\n /**\n * Selects the list item from the ListView by passing the elements or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.selectItem = function (item) {\n if (this.enableVirtualization) {\n this.virtualizationModule.selectItem(item);\n }\n else if (this.showCheckBox) {\n this.setCheckboxLI(this.getLiFromObjOrElement(item));\n }\n else {\n if (isNullOrUndefined(item) === true) {\n this.removeSelect();\n }\n else {\n this.setSelectLI(this.getLiFromObjOrElement(item));\n }\n }\n };\n /**\n * This method allows for deselecting a list item within the ListView. The item to be deselected can be specified by passing the element or field object.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass an element Object or Fields as an Object with ID and Text fields.\n */\n ListView.prototype.unselectItem = function (item) {\n if (isNullOrUndefined(item)) {\n this.removeSelect();\n }\n else {\n var li = this.getLiFromObjOrElement(item);\n if (!isNullOrUndefined(li)) {\n this.removeSelect(li);\n }\n }\n };\n ListView.prototype.getLiFromObjOrElement = function (obj) {\n var li;\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (!isNullOrUndefined(obj)) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n if (obj instanceof Element) {\n var uid = obj.getAttribute('data-uid').toString();\n for (var i = 0; i < this.liCollection.length; i++) {\n if (this.liCollection[parseInt(i.toString(), 10)].getAttribute('data-uid').toString() === uid) {\n li = this.liCollection[parseInt(i.toString(), 10)];\n break;\n }\n }\n }\n else {\n Array.prototype.some.call(this.curUL.querySelectorAll('.' + classNames.listItem), function (item) {\n if (item.innerText.trim() === obj.toString()) {\n li = item;\n return true;\n }\n else {\n return false;\n }\n });\n }\n }\n else {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n li = this.element.querySelector('[data-uid=\"'\n + fieldData[this.fields.id] + '\"]');\n if (!this.enableVirtualization && isNullOrUndefined(li)) {\n var curLi = this.element.querySelectorAll('.' + classNames.listItem);\n for (var i = 0; i < curLi.length; i++) {\n if (curLi[parseInt(i.toString(), 10)].innerText.trim() ===\n fieldData[this.fields.text]) {\n li = curLi[parseInt(i.toString(), 10)];\n }\n }\n }\n }\n }\n }\n return li;\n };\n /**\n * Selects multiple list items from the ListView.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of\n * elements or array of fields Object with ID and Text fields.\n */\n ListView.prototype.selectMultipleItems = function (item) {\n if (!isNullOrUndefined(item)) {\n for (var i = 0; i < item.length; i++) {\n if (!isNullOrUndefined(item[parseInt(i.toString(), 10)])) {\n this.selectItem(item[parseInt(i.toString(), 10)]);\n }\n }\n }\n };\n ListView.prototype.getParentId = function () {\n var parentId = [];\n if (this.isNestedList) {\n for (var i = this.curDSLevel.length - 1; i >= 0; i--) {\n parentId.push(this.curDSLevel[parseInt(i.toString(), 10)]);\n }\n }\n return parentId;\n };\n ListView.prototype.updateSelectedId = function () {\n this.selectedId = [];\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n for (var i = 0; i < liCollection.length; i++) {\n var tempData = this.getItemData(liCollection[parseInt(i.toString(), 10)]);\n if (!isNullOrUndefined(tempData) && tempData[this.listBaseOption.fields.id]) {\n this.selectedId.push(tempData[this.listBaseOption.fields.id]);\n }\n }\n };\n /**\n * Gets the details of the currently selected item from the list items.\n *\n */\n ListView.prototype.getSelectedItems = function () {\n var finalValue;\n var isCompleted = false;\n this.selectedId = [];\n var dataSource = this.dataSource instanceof DataManager ?\n this.localData : this.dataSource;\n if (this.enableVirtualization && !isCompleted) {\n finalValue = this.virtualizationModule.getSelectedItems();\n isCompleted = true;\n }\n else if (this.showCheckBox && !isCompleted) {\n var liCollection = this.curUL.getElementsByClassName(classNames.selected);\n var liTextCollection = [];\n var liDataCollection = [];\n this.selectedId = [];\n var dataParent = [];\n for (var i = 0; i < liCollection.length; i++) {\n if (typeof dataSource[0] === 'string' || typeof dataSource[0] === 'number') {\n liTextCollection.push(liCollection[parseInt(i.toString(), 10)].innerText.trim());\n }\n else {\n var tempData = this.getItemData(liCollection[parseInt(i.toString(), 10)]);\n var fieldData = getFieldValues(tempData, this.listBaseOption.fields);\n if (this.isNestedList) {\n dataParent.push({ data: tempData, parentId: this.getParentId() });\n }\n else {\n liDataCollection.push(tempData);\n }\n if (fieldData) {\n liTextCollection.push(fieldData[this.listBaseOption.fields.text]);\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n }\n else {\n liTextCollection.push(undefined);\n this.selectedId.push(undefined);\n }\n }\n }\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = { item: liCollection, data: dataSource, text: liTextCollection };\n isCompleted = true;\n }\n if (this.isNestedList && !isCompleted) {\n finalValue = { item: liCollection, data: dataParent, text: liTextCollection };\n isCompleted = true;\n }\n else if (!isCompleted) {\n finalValue = { item: liCollection, data: liDataCollection, text: liTextCollection };\n isCompleted = true;\n }\n }\n else if (!isCompleted) {\n var liElement = this.element.getElementsByClassName(classNames.selected)[0];\n var fieldData = getFieldValues(this.getItemData(liElement), this.listBaseOption.fields);\n if ((typeof dataSource[0] === 'string'\n || typeof dataSource[0] === 'number')\n && !isCompleted) {\n finalValue = (!isNullOrUndefined(liElement)) ? {\n item: liElement, data: dataSource,\n text: liElement.innerText.trim()\n } : undefined;\n isCompleted = true;\n }\n else if (!isCompleted) {\n if (isNullOrUndefined(fieldData) || isNullOrUndefined(liElement)) {\n finalValue = undefined;\n isCompleted = true;\n }\n else {\n this.selectedId.push(fieldData[this.listBaseOption.fields.id]);\n finalValue = {\n text: fieldData[this.listBaseOption.fields.text], item: liElement,\n data: this.getItemData(liElement)\n };\n isCompleted = true;\n }\n }\n }\n return finalValue;\n };\n /**\n * Finds out an item details from the current list.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.findItem = function (item) {\n return this.getItemData(item);\n };\n /**\n * Enables the disabled list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.enableItem = function (item) {\n this.setItemState(item, true);\n if (this.enableVirtualization) {\n this.virtualizationModule.enableItem(item);\n }\n };\n /**\n * Disables the list items by passing the Id and text fields.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.disableItem = function (item) {\n this.setItemState(item, false);\n if (this.enableVirtualization) {\n this.virtualizationModule.disableItem(item);\n }\n };\n //A function that used to set state of the list item like enable, disable.\n ListView.prototype.setItemState = function (item, isEnable) {\n var resultJSON = this.getItemData(item);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (isEnable) {\n if (li) {\n li.classList.remove(classNames.disable);\n }\n delete resultJSON[this.fields.enabled];\n }\n else if (!isEnable) {\n if (li) {\n li.classList.add(classNames.disable);\n }\n resultJSON[this.fields.enabled] = false;\n }\n }\n };\n /**\n * Shows the hide list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.showItem = function (item) {\n this.showHideItem(item, false, '');\n if (this.enableVirtualization) {\n this.virtualizationModule.showItem(item);\n }\n };\n /**\n * Hides an list item from the ListView.\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.hideItem = function (item) {\n this.showHideItem(item, true, 'none');\n if (this.enableVirtualization) {\n this.virtualizationModule.hideItem(item);\n }\n };\n ListView.prototype.showHideItem = function (obj, isHide, display) {\n var resultJSON = this.getItemData(obj);\n var fieldData = getFieldValues(resultJSON, this.listBaseOption.fields);\n if (resultJSON) {\n var li = this.element.querySelector('[data-uid=\"' + fieldData[this.fields.id] + '\"]');\n if (li) {\n li.style.display = display;\n }\n if (isHide) {\n resultJSON[this.fields.isVisible] = false;\n }\n else {\n delete resultJSON[this.fields.isVisible];\n }\n }\n };\n /**\n * Adds the new list item(s) to the current ListView.\n * To add a new list item(s) in the ListView, we need to pass the `data` as an array of items that need\n * to be added and `fields` as the target item to which we need to add the given item(s) as its children.\n * For example fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {{Object}[]} data - JSON Array Data that need to add.\n *\n * @param {Fields} fields - Target item to add the given data as its children (can be null).\n *\n * @param {number} index - Indicates the index where the data to be added.\n */\n ListView.prototype.addItem = function (data, fields, index) {\n if (fields === void 0) { fields = undefined; }\n var dataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n this.addItemInternally(data, fields, dataSource, index);\n };\n ListView.prototype.addItemInternally = function (data, fields, dataSource, index) {\n if (data instanceof Array) {\n if (this.enableVirtualization) {\n this.virtualizationModule.addItem(data, fields, dataSource, index);\n }\n else {\n var ds = this.findItemFromDS(dataSource, fields);\n var child = void 0;\n if (ds) {\n var fieldData = getFieldValues(ds, this.listBaseOption.fields);\n child = fieldData[this.fields.child];\n if (!child) {\n child = [];\n }\n child = child.concat(data);\n }\n // check for whether target is nested level or top level in list\n if (ds instanceof Array) {\n for (var i = 0; i < data.length; i++) {\n dataSource = this.addItemAtIndex(index, dataSource, data[parseInt(i.toString(), 10)]);\n this.setViewDataSource(dataSource);\n // since it is top level target, get the content container's first child\n // as it is always the top level UL\n var targetUL = this.contentContainer\n ? this.contentContainer.children[0]\n : null;\n // check for whether the list was previously empty or not, if it is\n // proceed to call initial render\n if (this.contentContainer && targetUL) {\n this.addItemIntoDom(data[parseInt(i.toString(), 10)], targetUL, this.curViewDS);\n }\n else {\n this.reRender();\n }\n }\n this.liCollection = this.curUL.querySelectorAll('.' + classNames.listItem);\n }\n else {\n // proceed as target item is in nested level, only if it is a valid target ds\n if (ds) {\n ds[this.fields.child] = child;\n this.addItemInNestedList(ds, data);\n }\n }\n }\n }\n };\n ListView.prototype.addItemAtIndex = function (index, newDataSource, itemData) {\n var isIndexValid = !(isNullOrUndefined(index)) && index >= 0 &&\n index < newDataSource.length && isNullOrUndefined(this.listBaseOption.fields.groupBy);\n if (isIndexValid) {\n newDataSource.splice(index, 0, itemData);\n }\n else {\n newDataSource.push(itemData);\n }\n return newDataSource;\n };\n ListView.prototype.addItemInNestedList = function (targetItemData, itemQueue) {\n var targetItemId = targetItemData[this.fields.id];\n var targetChildDS = targetItemData[this.fields.child];\n var isAlreadyRenderedUL = this.element.querySelector('[pid=\\'' + targetItemId + '\\']');\n var targetLi = this.element.querySelector('[data-uid=\\'' + targetItemId + '\\']');\n var targetUL = isAlreadyRenderedUL\n ? isAlreadyRenderedUL\n : targetLi\n ? closest(targetLi, 'ul')\n : null;\n var targetDS = isAlreadyRenderedUL ? targetChildDS : [targetItemData];\n var isTargetEmptyChild = targetLi ? !targetLi.classList.contains(classNames.hasChild) : false;\n // if li element is already rendered, that element needs to be refreshed so that\n // it becomes child viewable due to new child items are added now\n if (isTargetEmptyChild) {\n var targetRefreshedElement = ListBase.createListItemFromJson(this.createElement, targetDS, this.listBaseOption, null, null, this);\n this.setAttributes(targetRefreshedElement);\n targetUL.insertBefore(targetRefreshedElement[0], targetLi);\n detach(targetLi);\n }\n // if it is already rendered element, we need to create and append new elements\n if (isAlreadyRenderedUL && itemQueue) {\n for (var i = 0; i < itemQueue.length; i++) {\n targetDS.push(itemQueue[parseInt(i.toString(), 10)]);\n this.addItemIntoDom(itemQueue[parseInt(i.toString(), 10)], targetUL, targetDS);\n }\n }\n };\n ListView.prototype.addItemIntoDom = function (currentItem, targetUL, curViewDS) {\n var index = curViewDS.indexOf(currentItem);\n this.addListItem(currentItem, index, targetUL, curViewDS);\n var curItemDS = curViewDS[index - 1];\n if (curItemDS && curItemDS.isHeader && curItemDS.items.length === 1) {\n this.addListItem(curItemDS, (index - 1), targetUL, curViewDS);\n }\n };\n ListView.prototype.addListItem = function (dataSource, index, ulElement, curViewDS) {\n var target = this.getLiFromObjOrElement(curViewDS[index + 1]) ||\n this.getLiFromObjOrElement(curViewDS[index + 2]) || null;\n var li = ListBase.createListItemFromJson(this.createElement, [dataSource], this.listBaseOption, null, null, this);\n this.setAttributes(li);\n if (this.template && this.isReact) {\n this.renderReactTemplates();\n }\n if (this.fields.groupBy && curViewDS[index + 1] && curViewDS[index + 1].isHeader) {\n var targetEle = this.getLiFromObjOrElement(curViewDS[index - 1]);\n if (targetEle) {\n target = targetEle.nextElementSibling;\n }\n }\n ulElement.insertBefore(li[0], target);\n };\n /**\n * Removes the list item from the data source based on a passed\n * element like fields: { text: 'Name', tooltip: 'Name', id:'id'}\n *\n * @param {Fields | HTMLElement | Element} item - We can pass element Object or Fields as Object with ID and Text fields.\n */\n ListView.prototype.removeItem = function (item) {\n var listDataSource = this.dataSource instanceof DataManager\n ? this.localData : this.dataSource;\n if (this.enableVirtualization) {\n this.virtualizationModule.removeItem(item);\n }\n else {\n this.removeItemFromList(item, listDataSource);\n }\n };\n ListView.prototype.removeItemFromList = function (obj, listDataSource) {\n var _this = this;\n var curViewDS = this.curViewDS;\n var fields = obj instanceof Element ? this.getElementUID(obj) : obj;\n var dataSource = this.findItemFromDS(listDataSource, fields, true);\n if (dataSource) {\n var data_1 = this.findItemFromDS(dataSource, fields);\n var index = curViewDS.indexOf(data_1);\n var li = this.getLiFromObjOrElement(obj);\n var groupLi = void 0;\n this.validateNestedView(li);\n if (this.fields.groupBy && this.curViewDS[index - 1] &&\n curViewDS[index - 1].isHeader &&\n curViewDS[index - 1].items.length === 1) {\n if (li && li.previousElementSibling.classList.contains(classNames.groupListItem) &&\n (isNullOrUndefined(li.nextElementSibling) || (li.nextElementSibling &&\n li.nextElementSibling.classList.contains(classNames.groupListItem)))) {\n groupLi = li.previousElementSibling;\n }\n }\n if (li) {\n detach(li);\n }\n if (groupLi) {\n detach(groupLi);\n }\n var foundData = (dataSource.length - 1) <= 0\n ? this.findParent(this.localData, this.fields.id, function (value) { return value === data_1[_this.fields.id]; }, null) : null;\n var dsIndex = dataSource.indexOf(data_1);\n dataSource.splice(dsIndex, 1);\n this.setViewDataSource(listDataSource);\n if (foundData\n && foundData.parent\n && Array.isArray(foundData.parent[this.fields.child])\n && foundData.parent[this.fields.child].length <= 0) {\n var parentLi = this.getLiFromObjOrElement(foundData.parent);\n if (parentLi) {\n var li_1 = ListBase.createListItemFromJson(this.createElement, [foundData.parent], this.listBaseOption, null, null, this);\n this.setAttributes(li_1);\n parentLi.parentElement.insertBefore(li_1[0], parentLi);\n parentLi.parentElement.removeChild(parentLi);\n }\n }\n if (dataSource.length <= 0) {\n this.back();\n }\n this.liCollection = Array.prototype.slice.call(this.element.querySelectorAll('.' + classNames.listItem));\n }\n };\n // validate before removing an element whether the current view is inside target element's child view\n ListView.prototype.validateNestedView = function (li) {\n var liID = li ? li.getAttribute('data-uid').toString().toLowerCase() : null;\n if (liID && this.curDSLevel && this.curDSLevel.length > 0) {\n while (this.curDSLevel.some(function (id) { return id.toString().toLowerCase() === liID; })) {\n this.back();\n }\n }\n };\n /**\n * Removes multiple items from the ListView by passing the array of elements or array of field objects.\n *\n * @param {Fields[] | HTMLElement[] | Element[]} item - We can pass array of elements or array of field Object with ID and Text fields.\n */\n ListView.prototype.removeMultipleItems = function (item) {\n if (item.length) {\n for (var i = 0; i < item.length; i++) {\n this.removeItem(item[parseInt(i.toString(), 10)]);\n }\n }\n };\n ListView.prototype.findParent = function (dataSource, id, callback, parent) {\n if (Object.prototype.hasOwnProperty.call(dataSource, id) && callback(dataSource[id]) === true) {\n return extend({}, dataSource);\n }\n for (var i = 0; i < Object.keys(dataSource).length; i++) {\n if (dataSource[Object.keys(dataSource)[parseInt(i.toString(), 10)]]\n && typeof dataSource[Object.keys(dataSource)[parseInt(i.toString(), 10)]] === 'object') {\n var result = this.findParent(dataSource[Object.keys(dataSource)[parseInt(i.toString(), 10)]], id, callback, dataSource);\n if (result != null) {\n if (!result.parent) {\n result.parent = parent;\n }\n return result;\n }\n }\n }\n return null;\n };\n // Module Required function\n ListView.prototype.getModuleName = function () {\n return 'listview';\n };\n ListView.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'virtualization', name: 'Virtualization' });\n }\n return modules;\n };\n ListView.prototype.onListScroll = function (e) {\n var args = { originalEvent: e, scrollDirection: 'Bottom', distanceY: this.element.scrollHeight - this.element.scrollTop };\n var currentScrollTop = this.element.scrollTop;\n if (currentScrollTop > this.previousScrollTop) {\n args.scrollDirection = 'Bottom';\n args.distanceY = this.element.scrollHeight - this.element.clientHeight - this.element.scrollTop;\n this.trigger('scroll', args);\n }\n else if (this.previousScrollTop > currentScrollTop) {\n args.scrollDirection = 'Top';\n args.distanceY = this.element.scrollTop;\n this.trigger('scroll', args);\n }\n this.previousScrollTop = currentScrollTop;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n */\n ListView.prototype.getPersistData = function () {\n return this.addOnPersist(['cssClass', 'enableRtl', 'htmlAttributes',\n 'enable', 'fields', 'animation', 'headerTitle',\n 'sortOrder', 'showIcon', 'height', 'width', 'showCheckBox', 'checkBoxPosition', 'selectedId']);\n };\n __decorate([\n Property('')\n ], ListView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property({})\n ], ListView.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enable\", void 0);\n __decorate([\n Property([])\n ], ListView.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], ListView.prototype, \"query\", void 0);\n __decorate([\n Complex(ListBase.defaultMappedFields, FieldSettings)\n ], ListView.prototype, \"fields\", void 0);\n __decorate([\n Property({ effect: 'SlideLeft', duration: 400, easing: 'ease' })\n ], ListView.prototype, \"animation\", void 0);\n __decorate([\n Property('None')\n ], ListView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showIcon\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property('Left')\n ], ListView.prototype, \"checkBoxPosition\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"headerTitle\", void 0);\n __decorate([\n Property(false)\n ], ListView.prototype, \"showHeader\", void 0);\n __decorate([\n Property(true)\n ], ListView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], ListView.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"template\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ListView.prototype, \"groupTemplate\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionBegin\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], ListView.prototype, \"scroll\", void 0);\n ListView = __decorate([\n NotifyPropertyChanges\n ], ListView);\n return ListView;\n}(Component));\nexport { ListView };\n","/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\nimport { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n TEXTAREA: 'e-multi-line-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n FLOATTEXTCONTENT: 'e-float-text-content',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Defines the constant attributes for the input element container.\n */\nexport var containerAttributes = ['title', 'style', 'class'];\n/**\n * Defines the constant focus class for the input element.\n */\nexport var TEXTBOX_FOCUS = 'e-input-focus';\n/**\n * Base for Input creation through util methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\n var isBindClearAction = true;\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n *\n */\n function createInput(args, internalCreateElement) {\n args.element.__eventHandlers = {};\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n floatType = args.floatLabelType;\n isBindClearAction = args.bindClearAction;\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n bindInitialEvent(args);\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n args.properties.showClearButton) {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n inputObject.clearButton.setAttribute('role', 'button');\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons)) {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n }\n validateInputType(inputObject.container, args.element);\n inputObject = setPropertyValue(args, inputObject);\n createSpanElement(inputObject.container, makeElement);\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindFocusEventHandler(args) {\n var parent = getParentNode(args.element);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline') || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n if (args.floatLabelType !== 'Never') {\n setTimeout(function () {\n Input.calculateWidth(args.element, parent);\n }, 80);\n }\n }\n function bindBlurEventHandler(args) {\n var parent = getParentNode(args.element);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline') || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n if (args.floatLabelType !== 'Never') {\n setTimeout(function () {\n Input.calculateWidth(args.element, parent);\n }, 80);\n }\n }\n function bindInputEventHandler(args) {\n checkInputValue(args.floatLabelType, args.element);\n }\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n var focusHandler = function () { return bindFocusEventHandler(args); };\n var blurHandler = function () { return bindBlurEventHandler(args); };\n var inputHandler = function () { return bindInputEventHandler(args); };\n args.element.addEventListener('focus', focusHandler);\n args.element.addEventListener('blur', blurHandler);\n args.element.addEventListener('input', inputHandler);\n args.element.__eventHandlers['inputFocusHandler'] = { focusHandler: focusHandler };\n args.element.__eventHandlers['inputBlurHandler'] = { blurHandler: blurHandler };\n args.element.__eventHandlers['inputHandler'] = { inputHandler: inputHandler };\n }\n Input.bindInitialEvent = bindInitialEvent;\n function unbindInitialEvent(args) {\n if (!isNullOrUndefined(args.element)) {\n if (!isNullOrUndefined(args.element.__eventHandlers)) {\n if (!isNullOrUndefined(args.element.__eventHandlers['inputFocusHandler'])\n && !isNullOrUndefined(args.element.__eventHandlers['inputBlurHandler'])\n && !isNullOrUndefined(args.element.__eventHandlers['inputHandler'])) {\n var focusHandler_1 = args.element.__eventHandlers['inputFocusHandler'].focusHandler;\n var blurHandler_1 = args.element.__eventHandlers['inputBlurHandler'].blurHandler;\n var inputHandler_1 = args.element.__eventHandlers['inputHandler'].inputHandler;\n args.element.removeEventListener('focus', focusHandler_1);\n args.element.removeEventListener('blur', blurHandler_1);\n args.element.removeEventListener('input', inputHandler_1);\n // Clean up stored bound functions\n delete args.element.__eventHandlers['inputFocusHandler'];\n delete args.element.__eventHandlers['inputBlurHandler'];\n delete args.element.__eventHandlers['inputHandler'];\n }\n }\n }\n }\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n var inputParent = inputElement.parentElement;\n var grandParent = inputParent && inputParent.parentElement;\n if (inputValue !== '' && !isNullOrUndefined(inputValue)) {\n if (inputParent && inputParent.classList.contains('e-input-group')) {\n inputParent.classList.add('e-valid-input');\n }\n else if (grandParent && grandParent.classList.contains('e-input-group')) {\n grandParent.classList.add('e-valid-input');\n }\n }\n else if (floatLabelType !== 'Always') {\n if (inputParent && inputParent.classList.contains('e-input-group')) {\n inputParent.classList.remove('e-valid-input');\n }\n else if (grandParent && grandParent.classList.contains('e-input-group')) {\n grandParent.classList.remove('e-valid-input');\n }\n }\n }\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n Input.wireFloatingEvents = wireFloatingEvents;\n function unwireFloatingEvents(element) {\n if (!isNullOrUndefined(element)) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n }\n function inputEventHandler(args) {\n validateLabel(args.element, args.floatLabelType);\n }\n function blurEventHandler(args) {\n validateLabel(args.element, args.floatLabelType);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n inputObject.container.classList.add(CLASSNAMES.INPUTGROUP);\n if (args.element.parentNode) {\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n var floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n var floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n }\n if (!floatLabelElement.innerText) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n if (inputObject.container.classList.contains('e-float-icon-left')) {\n var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n inputWrap.appendChild(args.element);\n inputWrap.appendChild(floatLinelement);\n inputWrap.appendChild(floatLabelElement);\n }\n else {\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n }\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n var inputFloatHandler = function () { return inputEventHandler(args); };\n var blurFloatHandler = function () { return blurEventHandler(args); };\n // Add event listeners using the defined functions\n args.element.addEventListener('input', inputFloatHandler);\n args.element.addEventListener('blur', blurFloatHandler);\n // Store the event handler functions to remove them later\n args.element.__eventHandlers['floatInputHandler'] = { inputFloatHandler: inputFloatHandler };\n args.element.__eventHandlers['floatBlurHandler'] = { blurFloatHandler: blurFloatHandler };\n }\n else {\n unWireFloatLabelEvents(args);\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function unWireFloatLabelEvents(args) {\n if (!isNullOrUndefined(args.element) &&\n !isNullOrUndefined(args.element.__eventHandlers)\n && !isNullOrUndefined(args.element.__eventHandlers['floatInputHandler'])\n && !isNullOrUndefined(args.element.__eventHandlers['floatBlurHandler'])) {\n var inputFloatHandler = args.element.__eventHandlers['floatInputHandler'].inputFloatHandler;\n var blurFloatHandler = args.element.__eventHandlers['floatBlurHandler'].blurFloatHandler;\n // Remove the event listeners using the defined functions\n args.element.removeEventListener('input', inputFloatHandler);\n args.element.removeEventListener('blur', blurFloatHandler);\n // Clean up stored event handler functions\n delete args.element.__eventHandlers['floatInputHandler'];\n delete args.element.__eventHandlers['floatBlurHandler'];\n }\n }\n function checkFloatLabelType(type, container) {\n if (type === 'Always' && container.classList.contains('e-outline')) {\n container.classList.add('e-valid-input');\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n checkFloatLabelType(args.floatLabelType, inputObject.container);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button, readonly) {\n if (!isNullOrUndefined(button)) {\n if (value && !readonly) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n function updateLabelState(value, label, element) {\n if (element === void 0) { element = null; }\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n var isNotFocused = element != null ? element !== document.activeElement : true;\n if (isNotFocused) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n function clickHandler(event, element, button) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function inputHandler(element, button) {\n updateIconState(element.value, button);\n }\n function focusHandler(element, button) {\n updateIconState(element.value, button, element.readOnly);\n }\n function blurHandler(element, button) {\n setTimeout(function () {\n if (!isNullOrUndefined(button)) {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n button = !isNullOrUndefined(element) && element.classList.contains('e-combobox') ? null : button;\n }\n }, 200);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (isBindClearAction === undefined || isBindClearAction) {\n var clickHandlerEvent = function (e) { return clickHandler(e, element, button); };\n button.addEventListener('click', clickHandlerEvent);\n element.__eventHandlers['clearClickHandler'] = { clickHandlerEvent: clickHandlerEvent };\n }\n var inputHandlerEvent = function () { return inputHandler(element, button); };\n var focusHandlerEvent = function () { return focusHandler(element, button); };\n var blurHandlerEvent = function () { return blurHandler(element, button); };\n element.addEventListener('input', inputHandlerEvent);\n element.addEventListener('focus', focusHandlerEvent);\n element.addEventListener('blur', blurHandlerEvent);\n // Store the bound functions to remove them later\n element.__eventHandlers['clearInputHandler'] = { inputHandlerEvent: inputHandlerEvent };\n element.__eventHandlers['clearFocusHandler'] = { focusHandlerEvent: focusHandlerEvent };\n element.__eventHandlers['clearBlurHandler'] = { blurHandlerEvent: blurHandlerEvent };\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\n function unWireClearBtnEvents(element, button) {\n if (!isNullOrUndefined(element) &&\n !isNullOrUndefined(element.__eventHandlers)) {\n if (!isNullOrUndefined(element.__eventHandlers['clearClickHandler'])) {\n var clickHandlerEvent = element.__eventHandlers['clearClickHandler'].clickHandlerEvent;\n if (isBindClearAction === undefined || isBindClearAction) {\n if (!isNullOrUndefined(button)) {\n button.removeEventListener('click', clickHandlerEvent);\n }\n }\n delete element.__eventHandlers['clearClickHandler'];\n }\n if (!isNullOrUndefined(element.__eventHandlers['clearInputHandler'])\n && !isNullOrUndefined(element.__eventHandlers['clearFocusHandler'])\n && !isNullOrUndefined(element.__eventHandlers['clearBlurHandler'])) {\n var inputHandlerEvent = element.__eventHandlers['clearInputHandler'].inputHandlerEvent;\n var focusHandlerEvent = element.__eventHandlers['clearFocusHandler'].focusHandlerEvent;\n var blurHandlerEvent = element.__eventHandlers['clearBlurHandler'].blurHandlerEvent;\n element.removeEventListener('input', inputHandlerEvent);\n element.removeEventListener('focus', focusHandlerEvent);\n element.removeEventListener('blur', blurHandlerEvent);\n // Clean up stored Event functions\n delete element.__eventHandlers['clearInputHandler'];\n delete element.__eventHandlers['clearFocusHandler'];\n delete element.__eventHandlers['clearBlurHandler'];\n }\n }\n }\n function destroy(args, button) {\n if (button === void 0) { button = null; }\n unbindInitialEvent(args);\n if (args.floatLabelType === 'Auto') {\n unWireFloatLabelEvents(args);\n }\n if (args.properties.showClearButton) {\n unWireClearBtnEvents(args.element, button);\n }\n if (!isNullOrUndefined(args.buttons)) {\n _internalRipple(false, null, args.buttons);\n }\n unwireFloatingEvents(args.element);\n if (!isNullOrUndefined(args.element)) {\n delete args.element.__eventHandlers;\n if (args.element.classList.contains(CLASSNAMES.INPUT)) {\n args.element.classList.remove(CLASSNAMES.INPUT);\n }\n }\n privateInputObj = null;\n }\n Input.destroy = destroy;\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label, element);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '';\n var hiddenInput = (spanEle.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n *\n * @param {string} value - Specify the value of the input element.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the specified value is updated.\n * @param {string} floatLabelType - Specify the float label type of the input element.\n * @param {boolean} clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if (floatLabelType !== 'Never') {\n calculateWidth(element, element.parentElement);\n }\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n if (!isNullOrUndefined(parentElement)) {\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (!isNullOrUndefined(button)) {\n if (element.value && !isNullOrUndefined(parentElement) && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n }\n checkInputValue(floatLabelType, element);\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n *\n * @param {string} cssClass - Css class names which are needed to add.\n * @param {Element[] | NodeList} elements - The elements which are needed to add / remove classes.\n * @param {string} oldClass\n * - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the width to the placeholder when it overflows on the button such as spinbutton, clearbutton, icon etc\n * ```\n * E.g : Input.calculateWidth(element, container);\n * ```\n *\n * @param {any} element - Input element which is need to add.\n * @param {HTMLElement} container - The parent element which is need to get the label span to calculate width\n */\n function calculateWidth(element, container, moduleName) {\n if (moduleName !== 'multiselect' && !_isElementVisible(element)) {\n return;\n }\n var elementWidth = moduleName === 'multiselect' ? element : element.clientWidth - parseInt(getComputedStyle(element, null).getPropertyValue('padding-left'), 10);\n if (!isNullOrUndefined(container) && !isNullOrUndefined(container.getElementsByClassName('e-float-text-content')[0])) {\n if (container.getElementsByClassName('e-float-text-content')[0].classList.contains('e-float-text-overflow')) {\n container.getElementsByClassName('e-float-text-content')[0].classList.remove('e-float-text-overflow');\n }\n if (elementWidth < container.getElementsByClassName('e-float-text-content')[0].clientWidth || elementWidth === container.getElementsByClassName('e-float-text-content')[0].clientWidth) {\n container.getElementsByClassName('e-float-text-content')[0].classList.add('e-float-text-overflow');\n }\n }\n }\n Input.calculateWidth = calculateWidth;\n /**\n * Set the width to the wrapper of input element.\n * ```\n * E.g : Input.setWidth('200px', container);\n * ```\n *\n * @param {number | string} width - Width value which is need to add.\n * @param {HTMLElement} container - The element on which the width is need to add.\n */\n function setWidth(width, container) {\n if (typeof width === 'number') {\n container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n calculateWidth(container.firstChild, container);\n }\n Input.setWidth = setWidth;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n *\n * @param {string} placeholder - Placeholder value which is need to add.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n placeholder = encodePlaceHolder(placeholder);\n var parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var floatTextContent = parentElement.getElementsByClassName('e-float-text-content')[0];\n if (floatTextContent && floatTextContent.children[0]) {\n floatTextContent.children[0].textContent = placeholder;\n }\n else {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n }\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n var floatTextContent = parentElement.getElementsByClassName('e-float-text-content')[0];\n if (floatTextContent) {\n floatTextContent.children[0].textContent = '';\n }\n else {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n *\n * @param {boolean} isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n *\n * @param {boolean} isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param {Element[] | NodeList} elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n *\n * @param {boolean} isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': '', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n remove(inputObject.clearButton);\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which are need to removed from the element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which is added to element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[\"\" + key];\n }\n else {\n element.setAttribute(key, attrs[\"\" + key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton && inputEle.tagName === 'INPUT') {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n floatType = type;\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type,\n customTag: customTag, properties: { placeholder: placeholder } };\n if (type !== 'Never') {\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n createSpanElement(inputObj.container, makeElement);\n calculateWidth(args.element, inputObj.container);\n var isPrependIcon = container.classList.contains('e-float-icon-left');\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n var inputWrap = container.querySelector('.e-input-in-wrap');\n iconEle = inputWrap.querySelector('.e-input-group-icon');\n }\n else {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n wrapper.insertBefore(input, iconEle);\n wrapper.insertBefore(floatLine, iconEle);\n wrapper.insertBefore(floatText, iconEle);\n }\n }\n else {\n unWireFloatLabelEvents(args);\n }\n checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\n /**\n * Create the span inside the label and add the label text into the span textcontent\n * ```\n * E.g : Input.createSpanElement(inputObject, makeElement);\n * ```\n *\n * @param {Element} inputObject\n * - Element which is need to get the label\n * @param {createElementParams} makeElement\n * - Element which is need to create the span\n */\n function createSpanElement(inputObject, makeElement) {\n if (inputObject.classList.contains('e-outline') && inputObject.getElementsByClassName('e-float-text')[0]) {\n var labelSpanElement = makeElement('span', { className: CLASSNAMES.FLOATTEXTCONTENT });\n labelSpanElement.innerHTML = inputObject.getElementsByClassName('e-float-text')[0].innerHTML;\n inputObject.getElementsByClassName('e-float-text')[0].innerHTML = '';\n inputObject.getElementsByClassName('e-float-text')[0].appendChild(labelSpanElement);\n }\n }\n Input.createSpanElement = createSpanElement;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n *\n * @param {boolean} isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param {InputObject[]} inputObj\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[parseInt(i.toString(), 10)].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[parseInt(index.toString(), 10)].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[parseInt(index.toString(), 10)].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[parseInt(index.toString(), 10)].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[parseInt(index.toString(), 10)].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _isElementVisible(element) {\n if (!element) {\n return false;\n }\n // Check if the element or any of its parents are hidden using display: none\n var currentElement = element;\n while (currentElement && currentElement !== document.body) {\n var style = window.getComputedStyle(currentElement);\n if (style.display === 'none') {\n return false;\n }\n currentElement = currentElement.parentElement;\n }\n // If none of the elements have display: none, the element is considered visible\n return true;\n }\n function _onMouseDownRipple() {\n var ele = null || this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n var ele = null || this;\n setTimeout(function () {\n ele.classList.remove('e-input-btn-ripple');\n }, 500);\n }\n function createIconEle(iconClass, makeElement) {\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n return button;\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param {string | string[]} icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} input - The inputElement on which created span element is going to prepend.\n */\n function addIcon(position, icons, container, input, internalCreate) {\n var result = typeof (icons) === 'string' ? icons.split(',')\n : icons;\n if (position.toLowerCase() === 'append') {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var icon = result_1[_i];\n appendSpan(icon, container, internalCreate);\n }\n }\n else {\n for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n var icon = result_2[_a];\n prependSpan(icon, container, input, internalCreate);\n }\n }\n if (container.getElementsByClassName('e-input-group-icon')[0] && container.getElementsByClassName('e-float-text-overflow')[0]) {\n container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n }\n Input.addIcon = addIcon;\n /**\n * Creates a new span element with the given icons added and prepend it in input element.\n * ```\n * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} inputElement - The inputElement on which created span element is going to prepend.\n */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n container.classList.add('e-float-icon-left');\n var innerWrapper = container.querySelector('.e-input-in-wrap');\n if (isNullOrUndefined(innerWrapper)) {\n innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n innerWrapper.appendChild(inputElement);\n for (var i = 0; i < result.length; i++) {\n var element = result[parseInt(i.toString(), 10)];\n var parentElement = innerWrapper.parentElement;\n if (!(element.classList.contains('e-float-line')) || (!(parentElement && parentElement.classList.contains('e-filled')) && parentElement)) {\n innerWrapper.appendChild(element);\n }\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n _internalRipple(true, container, button);\n return button;\n }\n Input.prependSpan = prependSpan;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n container;\n wrap.appendChild(button);\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n function validateInputType(containerElement, input) {\n if (input.type === 'hidden') {\n containerElement.classList.add('e-hidden');\n }\n else if (containerElement.classList.contains('e-hidden')) {\n containerElement.classList.remove('e-hidden');\n }\n }\n Input.validateInputType = validateInputType;\n function updateHTMLAttributesToElement(htmlAttributes, element) {\n if (!isNullOrUndefined(htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttributes.indexOf(key) < 0) {\n element.setAttribute(key, htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n Input.updateHTMLAttributesToElement = updateHTMLAttributesToElement;\n function updateCssClass(newClass, oldClass, container) {\n setCssClass(getInputValidClassList(newClass), [container], getInputValidClassList(oldClass));\n }\n Input.updateCssClass = updateCssClass;\n function getInputValidClassList(inputClassName) {\n var result = inputClassName;\n if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n }\n Input.getInputValidClassList = getInputValidClassList;\n function updateHTMLAttributesToWrapper(htmlAttributes, container) {\n if (!isNullOrUndefined(htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttributes.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = this.getInputValidClassList(htmlAttributes[\"\" + key]);\n if (updatedClassValues !== '') {\n addClass([container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = container.getAttribute(key);\n setStyle = !isNullOrUndefined(setStyle) ? (setStyle + htmlAttributes[\"\" + key]) :\n htmlAttributes[\"\" + key];\n container.setAttribute(key, setStyle);\n }\n else {\n container.setAttribute(key, htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n }\n Input.updateHTMLAttributesToWrapper = updateHTMLAttributesToWrapper;\n function isBlank(inputString) {\n return (!inputString || /^\\s*$/.test(inputString));\n }\n Input.isBlank = isBlank;\n})(Input || (Input = {}));\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","import { detach, getUniqueID, rippleEffect, setValue, attributes } from '@syncfusion/ej2-base';\nimport { getValue, addClass, deleteObject } from '@syncfusion/ej2-base';\n/**\n * Initialize wrapper element for angular.\n *\n * @private\n *\n * @param {CreateElementArgs} createElement - Specifies created element args\n * @param {string} tag - Specifies tag name\n * @param {string} type - Specifies type name\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} WRAPPER - Specifies wrapper element\n * @param {string} role - Specifies role\n * @returns {HTMLInputElement} - Input Element\n */\nexport function wrapperInitialize(createElement, tag, type, element, WRAPPER, role) {\n var input = element;\n if (element.tagName === tag) {\n var ejInstance = getValue('ej2_instances', element);\n input = createElement('input', { attrs: { 'type': type } });\n var props = ['change', 'cssClass', 'label', 'labelPosition', 'id'];\n for (var index = 0, len = element.attributes.length; index < len; index++) {\n if (props.indexOf(element.attributes[index].nodeName) === -1) {\n input.setAttribute(element.attributes[index].nodeName, element.attributes[index].nodeValue);\n }\n }\n attributes(element, { 'class': WRAPPER });\n element.appendChild(input);\n element.classList.add(role);\n element.classList.remove(role);\n setValue('ej2_instances', ejInstance, input);\n deleteObject(element, 'ej2_instances');\n }\n return input;\n}\n/**\n * Get the text node.\n *\n * @param {HTMLElement} element - Specifies html element\n * @private\n * @returns {Node} - Text node.\n */\nexport function getTextNode(element) {\n var node;\n var childnode = element.childNodes;\n for (var i = 0; i < childnode.length; i++) {\n node = childnode[i];\n if (node.nodeType === 3) {\n return node;\n }\n }\n return null;\n}\n/**\n * Destroy the button components.\n *\n * @private\n * @param {Switch | CheckBox} ejInst - Specifies eJ2 Instance\n * @param {Element} wrapper - Specifies wrapper element\n * @param {string} tagName - Specifies tag name\n * @returns {void}\n */\nexport function destroy(ejInst, wrapper, tagName) {\n if (tagName === 'INPUT') {\n wrapper.parentNode.insertBefore(ejInst.element, wrapper);\n detach(wrapper);\n ejInst.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n ejInst.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n wrapper.removeAttribute(key);\n });\n wrapper.innerHTML = '';\n ejInst.element = wrapper;\n }\n}\n/**\n * Initialize control pre rendering.\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies proxy\n * @param {string} control - Specifies control\n * @param {string} wrapper - Specifies wrapper element\n * @param {HTMLInputElement} element - Specifies input element\n * @param {string} moduleName - Specifies module name\n * @returns {void}\n */\nexport function preRender(proxy, control, wrapper, element, moduleName) {\n element = wrapperInitialize(proxy.createElement, control, 'checkbox', element, wrapper, moduleName);\n proxy.element = element;\n if (proxy.element.getAttribute('type') !== 'checkbox') {\n proxy.element.setAttribute('type', 'checkbox');\n }\n if (!proxy.element.id) {\n proxy.element.id = getUniqueID('e-' + moduleName);\n }\n}\n/**\n * Creates CheckBox component UI with theming and ripple support.\n *\n * @private\n * @param {CreateElementArgs} createElement - Specifies Created Element args\n * @param {boolean} enableRipple - Specifies ripple effect\n * @param {CheckBoxUtilModel} options - Specifies Checkbox util Model\n * @returns {Element} - Checkbox Element\n */\nexport function createCheckBox(createElement, enableRipple, options) {\n if (enableRipple === void 0) { enableRipple = false; }\n if (options === void 0) { options = {}; }\n var wrapper = createElement('div', { className: 'e-checkbox-wrapper e-css' });\n if (options.cssClass) {\n addClass([wrapper], options.cssClass.split(' '));\n }\n if (options.enableRtl) {\n wrapper.classList.add('e-rtl');\n }\n if (enableRipple) {\n var rippleSpan = createElement('span', { className: 'e-ripple-container' });\n rippleEffect(rippleSpan, { isCenterRipple: true, duration: 400 });\n wrapper.appendChild(rippleSpan);\n }\n var frameSpan = createElement('span', { className: 'e-frame e-icons' });\n if (options.checked) {\n frameSpan.classList.add('e-check');\n }\n wrapper.appendChild(frameSpan);\n if (options.label) {\n var labelSpan = createElement('span', { className: 'e-label' });\n if (options.disableHtmlEncode) {\n labelSpan.textContent = options.label;\n }\n else {\n labelSpan.innerHTML = options.label;\n }\n wrapper.appendChild(labelSpan);\n }\n return wrapper;\n}\n/**\n * Handles ripple mouse.\n *\n * @private\n * @param {MouseEvent} e - Specifies mouse event\n * @param {Element} rippleSpan - Specifies Ripple span element\n * @returns {void}\n */\nexport function rippleMouseHandler(e, rippleSpan) {\n if (rippleSpan) {\n var event_1 = document.createEvent('MouseEvents');\n event_1.initEvent(e.type, false, true);\n rippleSpan.dispatchEvent(event_1);\n }\n}\n/**\n * Append hidden input to given element\n *\n * @private\n * @param {Switch | CheckBox} proxy - Specifies Proxy\n * @param {Element} wrap - Specifies Wrapper ELement\n * @returns {void}\n */\nexport function setHiddenInput(proxy, wrap) {\n if (proxy.element.getAttribute('ejs-for')) {\n wrap.appendChild(proxy.createElement('input', {\n attrs: { 'name': proxy.name || proxy.element.name, 'value': 'false', 'type': 'hidden' }\n }));\n }\n}\n","import { L10n, createElement } from '@syncfusion/ej2-base';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\n/**\n * @private\n */\nvar AddUserDialog = /** @class */ (function () {\n function AddUserDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.show = function () {\n var localObj = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n localObj.setLocale(_this.documentHelper.owner.locale);\n if (!_this.target) {\n _this.initUserDialog(localObj, _this.documentHelper.owner.enableRtl);\n }\n _this.documentHelper.dialog.header = localObj.getConstant('Add Users');\n _this.documentHelper.dialog.height = 'auto';\n _this.documentHelper.dialog.width = 'auto';\n _this.documentHelper.dialog.content = _this.target;\n _this.documentHelper.dialog.beforeOpen = _this.loadUserDetails;\n _this.documentHelper.dialog.close = _this.documentHelper.updateFocus;\n _this.documentHelper.dialog.buttons = [\n {\n click: _this.okButtonClick,\n buttonModel: {\n content: localObj.getConstant('Ok'), cssClass: 'e-flat', isPrimary: true\n }\n },\n {\n click: _this.hideDialog,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat' }\n }, {\n click: _this.deleteButtonClick,\n buttonModel: { content: localObj.getConstant('Delete'), cssClass: 'e-flat e-user-delete' }\n }\n ];\n _this.documentHelper.dialog.dataBind();\n _this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadUserDetails = function () {\n _this.userList.dataSource = _this.documentHelper.userCollection.slice();\n _this.userList.dataBind();\n _this.documentHelper.restrictEditingPane.addedUser.dataSource = _this.documentHelper.userCollection.slice();\n _this.documentHelper.restrictEditingPane.addedUser.dataBind();\n };\n /**\n * @private\n * @returns {void}\n */\n this.okButtonClick = function () {\n _this.documentHelper.restrictEditingPane.isAddUser = true;\n _this.documentHelper.restrictEditingPane.showStopProtectionPane(false);\n _this.documentHelper.restrictEditingPane.addUserCollection();\n _this.documentHelper.restrictEditingPane.isAddUser = false;\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.hideDialog = function () {\n _this.textBoxInput.value = '';\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnDisplayBox = function () {\n _this.addButton.disabled = _this.textBoxInput.value === '';\n };\n /**\n * @returns {void}\n */\n this.addButtonClick = function () {\n if (_this.validateUserName(_this.textBoxInput.value)) {\n _this.bindListData(_this.textBoxInput.value);\n _this.textBoxInput.value = '';\n }\n else {\n DialogUtility.alert('Invalid user name');\n }\n };\n /**\n * @returns {void}\n */\n this.deleteButtonClick = function () {\n var index = _this.documentHelper.userCollection.indexOf(_this.userList.getSelectedItems().text);\n if (index > -1) {\n _this.documentHelper.userCollection.splice(index, 1);\n _this.userList.dataSource = _this.documentHelper.userCollection.slice();\n _this.userList.dataBind();\n }\n };\n this.documentHelper = documentHelper;\n }\n AddUserDialog.prototype.initUserDialog = function (localValue, isRtl) {\n //const id: string = this.documentHelper.owner.containerId + '_addUser';\n this.target = createElement('div', { className: 'e-de-user-dlg' });\n var headerValue = localValue.getConstant('Enter User');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-bookmark-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-de-user-dlg-common' });\n this.target.appendChild(commonDiv);\n var adduserDiv = createElement('div', { className: 'e-de-user-dlg-list' });\n commonDiv.appendChild(adduserDiv);\n if (isRtl) {\n adduserDiv.classList.add('e-de-rtl');\n }\n // const textBoxDiv: HTMLElement = createElement('div', { className: 'e-de-dlg-container' });\n // adduserDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input e-de-user-dlg-textbox-input', attrs: { autofocus: 'true' } });\n this.textBoxInput.setAttribute('type', 'text');\n adduserDiv.appendChild(this.textBoxInput);\n this.textBoxInput.addEventListener('keyup', this.onKeyUpOnDisplayBox);\n var addButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Add'),\n attrs: { type: 'button' }\n });\n adduserDiv.appendChild(addButtonElement);\n addButtonElement.addEventListener('click', this.addButtonClick);\n this.addButton = new Button({ cssClass: 'e-de-user-add-btn' });\n this.addButton.disabled = true;\n this.addButton.appendTo(addButtonElement);\n this.addButton.addEventListener('click', this.addButtonClick);\n var userCollectionDiv = createElement('div');\n commonDiv.appendChild(userCollectionDiv);\n var userDiv = createElement('div', { innerHTML: localValue.getConstant('Users'), className: 'e-de-user-dlg-user' });\n userCollectionDiv.appendChild(userDiv);\n var listviewDiv = createElement('div');\n userCollectionDiv.appendChild(listviewDiv);\n this.userList = new ListView({\n cssClass: 'e-de-user-listview'\n });\n this.userList.appendTo(listviewDiv);\n };\n /**\n * @param {string} data - Specifies the data.\n * @private\n * @returns {void}\n */\n AddUserDialog.prototype.bindListData = function (data) {\n if (this.documentHelper.userCollection.indexOf(data) === -1) {\n this.documentHelper.userCollection.push(data);\n }\n if (this.userList) {\n this.userList.dataSource = this.documentHelper.userCollection.slice();\n this.userList.dataBind();\n }\n };\n AddUserDialog.prototype.validateUserName = function (value) {\n if (value.indexOf('@') === -1) {\n return false;\n }\n else {\n var parts = value.split('@');\n var domain = parts[1];\n if (domain.indexOf('.') === -1) {\n return false;\n }\n else {\n var domainParts = domain.split('.');\n var ext = domainParts[1];\n if (domainParts.length > 2) {\n return false;\n }\n if (ext.length > 4 || ext.length < 2) {\n return false;\n }\n }\n }\n return true;\n };\n /**\n * @private\n * @returns {void}\n */\n AddUserDialog.prototype.destroy = function () {\n if (this.textBoxInput) {\n this.textBoxInput = undefined;\n }\n if (this.addButton) {\n this.addButton.destroy();\n this.addButton = undefined;\n }\n if (this.userList) {\n this.userList.destroy();\n this.userList = undefined;\n }\n this.documentHelper = undefined;\n };\n return AddUserDialog;\n}());\nexport { AddUserDialog };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, setValue, getValue, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Input, containerAttributes, TEXTBOX_FOCUS } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\n /**\n *\n * @param {TextBoxModel} options - Specifies the TextBox model.\n * @param {string | HTMLInputElement | HTMLTextAreaElement} element - Specifies the element to render as component.\n * @private\n */\n function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n _this.isHiddenInput = false;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.textboxOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {TextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {TextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textboxWrapper);\n Input.addFloating(this.respectiveElement, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n this.bindClearEvent();\n break;\n case 'width':\n Input.setWidth(newProp.width, this.textboxWrapper.container);\n break;\n case 'value':\n {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!Input.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if ((this.isAngular || this.isVue) && this.preventChange === true) {\n this.previousValue = this.isAngular ? this.value : this.previousValue;\n this.preventChange = false;\n }\n else if (isNullOrUndefined(this.isAngular) || !this.isAngular\n || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {\n this.raiseChangeEvent();\n }\n }\n break;\n case 'htmlAttributes':\n {\n this.updateHTMLAttributesToElement();\n this.updateHTMLAttributesToWrapper();\n this.checkAttributes(true);\n if (this.multiline && !isNullOrUndefined(this.textarea)) {\n Input.validateInputType(this.textboxWrapper.container, this.textarea);\n }\n else {\n Input.validateInputType(this.textboxWrapper.container, this.element);\n }\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.respectiveElement);\n break;\n case 'type':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n this.respectiveElement.setAttribute('type', this.type);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n this.raiseChangeEvent();\n }\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n Input.calculateWidth(this.respectiveElement, this.textboxWrapper.container);\n break;\n case 'autocomplete':\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else {\n this.removeAttributes(['autocomplete']);\n }\n break;\n case 'cssClass':\n Input.updateCssClass(newProp.cssClass, oldProp.cssClass, this.textboxWrapper.container);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TextBox.prototype.getModuleName = function () {\n return 'textbox';\n };\n TextBox.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.formElement = closest(this.element, 'form');\n if (!isNullOrUndefined(this.formElement)) {\n this.isForm = true;\n }\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTBOX') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.multiline ?\n this.createElement('textarea') :\n this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id' && attributeName !== 'class') {\n inputElement.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n if (attributeName === 'name') {\n this.element.removeAttribute('name');\n }\n }\n else if (attributeName === 'class') {\n inputElement.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n }\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttributesToElement();\n this.checkAttributes(false);\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) && this.element.value !== '') {\n this.setProperties({ value: this.element.value }, true);\n }\n if (this.element.tagName !== 'TEXTAREA') {\n this.element.setAttribute('type', this.type);\n }\n if (this.type === 'text' || (this.element.tagName === 'INPUT' && this.multiline && this.isReact)) {\n this.element.setAttribute('role', 'textbox');\n }\n this.globalize = new Internationalization(this.locale);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('textbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('textbox'));\n }\n if (!this.element.hasAttribute('name')) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (this.element.tagName === 'INPUT' && this.multiline) {\n this.isHiddenInput = true;\n this.textarea = this.createElement('textarea');\n this.element.parentNode.insertBefore(this.textarea, this.element);\n this.element.setAttribute('type', 'hidden');\n this.textarea.setAttribute('name', this.element.getAttribute('name'));\n this.element.removeAttribute('name');\n this.textarea.setAttribute('role', this.element.getAttribute('role'));\n this.element.removeAttribute('role');\n this.textarea.setAttribute('id', getUniqueID('textarea'));\n var apiAttributes = ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var index = 0; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (this.element.hasAttribute(attributeName) && containerAttributes.indexOf(attributeName) < 0 &&\n !(attributeName === 'id' || attributeName === 'type' || attributeName === 'e-mappinguid')) {\n // e-mappinguid attribute is handled for Grid component.\n this.textarea.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n if (apiAttributes.indexOf(attributeName) < 0) {\n this.element.removeAttribute(attributeName);\n index--;\n }\n }\n }\n }\n };\n TextBox.prototype.checkAttributes = function (isDynamic) {\n var attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var _i = 0, attrs_1 = attrs; _i < attrs_1.length; _i++) {\n var key = attrs_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'disabled':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'autocomplete':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['autocomplete'] === undefined)) || isDynamic) {\n var autoCompleteTxt = this.element.autocomplete === 'off' ? 'off' : 'on';\n this.setProperties({ autocomplete: autoCompleteTxt }, !isDynamic);\n }\n break;\n case 'value':\n if (((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) || isDynamic) && this.element.value !== '') {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'type':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['type'] === undefined)) || isDynamic) {\n this.setProperties({ type: this.element.type }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n TextBox.prototype.render = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = Input.getInputValidClassList(this.cssClass);\n }\n this.respectiveElement = (this.isHiddenInput) ? this.textarea : this.element;\n this.textboxWrapper = Input.createInput({\n element: this.respectiveElement,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValue,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.updateHTMLAttributesToWrapper();\n if (this.isHiddenInput) {\n this.respectiveElement.parentNode.insertBefore(this.element, this.respectiveElement);\n }\n this.wireEvents();\n if (!isNullOrUndefined(this.value)) {\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n }\n if (!isNullOrUndefined(this.value)) {\n this.initialValue = this.value;\n this.setInitialValue();\n }\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else if (!isNullOrUndefined(this.textboxOptions) && (this.textboxOptions['autocomplete'] !== undefined)) {\n this.removeAttributes(['autocomplete']);\n }\n this.previousValue = this.value;\n this.inputPreviousValue = this.value;\n this.respectiveElement.defaultValue = this.respectiveElement.value;\n Input.setWidth(this.width, this.textboxWrapper.container);\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n if (!this.element.hasAttribute('aria-labelledby') && !this.element.hasAttribute('placeholder') && !this.element.hasAttribute('aria-label')) {\n this.element.setAttribute('aria-label', 'textbox');\n }\n this.renderComplete();\n };\n TextBox.prototype.updateHTMLAttributesToWrapper = function () {\n Input.updateHTMLAttributesToWrapper(this.htmlAttributes, this.textboxWrapper.container);\n };\n TextBox.prototype.updateHTMLAttributesToElement = function () {\n Input.updateHTMLAttributesToElement(this.htmlAttributes, this.respectiveElement ? this.respectiveElement :\n (this.multiline && !isNullOrUndefined(this.textarea) ? this.textarea : this.element));\n };\n TextBox.prototype.setInitialValue = function () {\n if (!this.isAngular) {\n this.respectiveElement.setAttribute('value', this.initialValue);\n }\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.respectiveElement, 'focus', this.focusHandler, this);\n EventHandler.add(this.respectiveElement, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.respectiveElement, 'keydown', this.keydownHandler, this);\n EventHandler.add(this.respectiveElement, 'input', this.inputHandler, this);\n EventHandler.add(this.respectiveElement, 'change', this.changeHandler, this);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n this.bindClearEvent();\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-autofill') &&\n this.textboxWrapper.container.classList.contains('e-outline')) {\n EventHandler.add((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler, this);\n }\n };\n TextBox.prototype.animationHandler = function () {\n this.textboxWrapper.container.classList.add('e-valid-input');\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n label.classList.add('e-label-top');\n if (label.classList.contains('e-label-bottom')) {\n label.classList.remove('e-label-bottom');\n }\n }\n };\n TextBox.prototype.resetValue = function (value) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.value = value;\n if (value == null && this.textboxWrapper.container.classList.contains('e-valid-input')) {\n this.textboxWrapper.container.classList.remove('e-valid-input');\n }\n this.isProtectedOnChange = prevOnChange;\n };\n TextBox.prototype.resetForm = function () {\n if (this.isAngular) {\n this.resetValue('');\n }\n else {\n this.resetValue(this.initialValue);\n }\n if (!isNullOrUndefined(this.textboxWrapper)) {\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label) && this.floatLabelType !== 'Always') {\n if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {\n label.classList.add('e-label-bottom');\n label.classList.remove('e-label-top');\n }\n else if (this.initialValue !== '') {\n label.classList.add('e-label-top');\n label.classList.remove('e-label-bottom');\n }\n }\n }\n };\n TextBox.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextBox.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null && this.respectiveElement.value === '') &&\n (this.previousValue !== this.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextBox.prototype.keydownHandler = function (args) {\n if ((args.keyCode === 13 || args.keyCode === 9) && !((this.previousValue === null || this.previousValue === '') && (this.value === null || this.value === '') && this.respectiveElement.value === '')) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n }\n };\n TextBox.prototype.inputHandler = function (args) {\n var textboxObj = null || this;\n var eventArgs = {\n event: args,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if (this.isAngular) {\n textboxObj.localChange({ value: this.respectiveElement.value });\n this.preventChange = true;\n }\n if (this.isVue) {\n this.preventChange = true;\n }\n this.trigger('input', eventArgs);\n args.stopPropagation();\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n if (this.previousValue !== this.value) {\n this.raiseChangeEvent(args, true);\n }\n args.stopPropagation();\n };\n TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textboxWrapper.container,\n isInteraction: interaction ? interaction : false,\n isInteracted: interaction ? interaction : false\n };\n this.preventChange = false;\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n //EJ2CORE-738:For this task we update the textarea value to the input when input tag with multiline is present\n if (this.element.tagName === 'INPUT' && this.multiline && Browser.info.name === 'mozilla') {\n this.element.value = this.respectiveElement.value;\n }\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n if (this.enabled) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n else {\n EventHandler.remove(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);\n }\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR)) || this.textboxWrapper.container.classList.contains('e-static-clear')) {\n Input.setValue('', this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.setProperties({ value: this.respectiveElement.value }, true);\n var eventArgs = {\n event: event,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n this.inputPreviousValue = this.respectiveElement.value;\n this.raiseChangeEvent(event, true);\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.respectiveElement, 'focus', this.focusHandler);\n EventHandler.remove(this.respectiveElement, 'blur', this.focusOutHandler);\n EventHandler.remove(this.respectiveElement, 'keydown', this.keydownHandler);\n EventHandler.remove(this.respectiveElement, 'input', this.inputHandler);\n EventHandler.remove(this.respectiveElement, 'change', this.changeHandler);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-outline') &&\n this.textboxWrapper.container.classList.contains('e-autofill')) {\n EventHandler.remove((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextBox element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n if (this.element.tagName === 'INPUT' && this.multiline) {\n detach(this.textboxWrapper.container.getElementsByTagName('textarea')[0]);\n this.respectiveElement = this.element;\n this.element.removeAttribute('type');\n }\n this.respectiveElement.value = this.respectiveElement.defaultValue;\n this.respectiveElement.classList.remove('e-input');\n this.removeAttributes(['aria-disabled', 'aria-readonly', 'aria-labelledby']);\n if (!isNullOrUndefined(this.textboxWrapper)) {\n this.textboxWrapper.container.insertAdjacentElement('afterend', this.respectiveElement);\n detach(this.textboxWrapper.container);\n }\n this.textboxWrapper = null;\n Input.destroy({\n element: this.respectiveElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n };\n /**\n * Adding the icons to the TextBox component.\n *\n * @param { string } position - Specify the icon placement on the TextBox. Possible values are append and prepend.\n * @param { string | string[] } icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for TextBox.\n * @returns {void}\n */\n TextBox.prototype.addIcon = function (position, icons) {\n Input.addIcon(position, icons, this.textboxWrapper.container, this.respectiveElement, this.createElement);\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} Returns the persisted data.\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n *\n * @param {string} attributes - Specifies the attributes to be add to TextBox element.\n * @returns {void}\n */\n TextBox.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'class') {\n this.respectiveElement.classList.add(attributes[\"\" + key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[\"\" + key] }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else if (key === 'rows' && this.respectiveElement.tagName === 'TEXTAREA') {\n this.respectiveElement.setAttribute(key, attributes[\"\" + key]);\n }\n else {\n this.respectiveElement.setAttribute(key, attributes[\"\" + key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n *\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @returns {void}\n */\n TextBox.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else {\n this.respectiveElement.removeAttribute(key);\n }\n }\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n TextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.respectiveElement && this.enabled) {\n this.respectiveElement.focus();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n addClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n TextBox.prototype.focusOut = function () {\n if (document.activeElement === this.respectiveElement && this.enabled) {\n this.respectiveElement.blur();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n removeClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n __decorate([\n Property('text')\n ], TextBox.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('on')\n ], TextBox.prototype, \"autocomplete\", void 0);\n __decorate([\n Property({})\n ], TextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"multiline\", void 0);\n __decorate([\n Property(true)\n ], TextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"input\", void 0);\n TextBox = __decorate([\n NotifyPropertyChanges\n ], TextBox);\n return TextBox;\n}(Component));\nexport { TextBox };\n","import { L10n, createElement } from '@syncfusion/ej2-base';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar EnforceProtectionDialog = /** @class */ (function () {\n function EnforceProtectionDialog(documentHelper, owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.show = function () {\n _this.localeValue = new L10n('documenteditor', _this.viewer.owner.defaultLocale);\n _this.localeValue.setLocale(_this.viewer.owner.locale);\n if (!_this.target) {\n _this.initDialog(_this.localeValue);\n }\n _this.documentHelper.dialog.header = _this.localeValue.getConstant('Start Enforcing Protection');\n _this.documentHelper.dialog.height = 'auto';\n _this.documentHelper.dialog.content = _this.target;\n _this.documentHelper.dialog.width = 'auto';\n _this.documentHelper.dialog.buttons = [{\n click: _this.okButtonClick,\n buttonModel: { content: _this.localeValue.getConstant('Ok'), cssClass: 'e-flat', isPrimary: true }\n },\n {\n click: _this.hideDialog,\n buttonModel: { content: _this.localeValue.getConstant('Cancel'), cssClass: 'e-flat' }\n }];\n _this.passwordTextBox.value = '';\n _this.confirmPasswordTextBox.value = '';\n _this.documentHelper.dialog.show();\n };\n /**\n * @returns {void}\n */\n this.hideDialog = function () {\n _this.passwordTextBox.value = '';\n _this.confirmPasswordTextBox.value = '';\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.okButtonClick = function () {\n if (_this.passwordTextBox.value !== _this.confirmPasswordTextBox.value) {\n DialogUtility.alert(_this.localeValue.getConstant('Password Mismatch'));\n }\n else {\n _this.password = SanitizeHtmlHelper.sanitize(_this.passwordTextBox.value);\n _this.viewer.owner.editorModule.addProtection(_this.password, _this.owner.protectionType);\n }\n };\n this.documentHelper = documentHelper;\n this.owner = owner;\n }\n Object.defineProperty(EnforceProtectionDialog.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n EnforceProtectionDialog.prototype.initDialog = function (localValue) {\n //const instance: EnforceProtectionDialog = this;\n //const id: string = this.viewer.owner.containerId + '_enforce_protection';\n this.target = createElement('div', { className: 'e-de-enforce' });\n var passwordContainer = createElement('div', { className: 'e-de-container-row' });\n //const newPassWord: HTMLElement = createElement('div', { className: 'e-de-enforce-dlg-title', innerHTML: localValue.getConstant('Enter new password') });\n this.passwordTextBox = createElement('input', { attrs: { type: 'password', autofocus: 'true' }, className: 'e-input' });\n // this.passwordTextBox.addEventListener('keyup', instance.onKeyUpOnDisplayBox);\n //container.appendChild(newPassWord);\n passwordContainer.appendChild(this.passwordTextBox);\n var confirmPasswordcontainer = createElement('div');\n //const confirmPassword: HTMLElement = createElement('div', { className: 'e-de-enforce-dlg-title', innerHTML: localValue.getConstant('Reenter new password to confirm') }) as HTMLDivElement;\n this.confirmPasswordTextBox = createElement('input', { attrs: { type: 'password' }, className: 'e-input' });\n //container.appendChild(confirmPassword);\n confirmPasswordcontainer.appendChild(this.confirmPasswordTextBox);\n this.target.appendChild(passwordContainer);\n this.target.appendChild(confirmPasswordcontainer);\n new TextBox({ placeholder: localValue.getConstant('Enter new password'), floatLabelType: 'Always', cssClass: 'e-de-enforce-dlg-input' }, this.passwordTextBox);\n new TextBox({ placeholder: localValue.getConstant('Reenter new password to confirm'), floatLabelType: 'Always' }, this.confirmPasswordTextBox);\n };\n /**\n * @private\n * @returns {void}\n */\n EnforceProtectionDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return EnforceProtectionDialog;\n}());\nexport { EnforceProtectionDialog };\n/**\n * @private\n */\nvar UnProtectDocumentDialog = /** @class */ (function () {\n function UnProtectDocumentDialog(documentHelper, owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.show = function () {\n _this.localObj = new L10n('documenteditor', _this.viewer.owner.defaultLocale);\n _this.localObj.setLocale(_this.viewer.owner.locale);\n if (!_this.target) {\n _this.initDialog(_this.localObj);\n }\n _this.documentHelper.dialog.header = 'Unprotect Document';\n _this.documentHelper.dialog.height = 'auto';\n _this.documentHelper.dialog.width = 'auto';\n _this.documentHelper.dialog.content = _this.target;\n _this.documentHelper.dialog.buttons = [{\n click: _this.okButtonClick,\n buttonModel: { content: _this.localObj.getConstant('Ok'), cssClass: 'e-flat', isPrimary: true }\n },\n {\n click: _this.hideDialog,\n buttonModel: { content: _this.localObj.getConstant('Cancel'), cssClass: 'e-flat' }\n }];\n _this.documentHelper.dialog.dataBind();\n _this.passwordTextBox.value = '';\n _this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n this.okButtonClick = function () {\n var password = _this.passwordTextBox.value;\n var empty = '';\n if (password.length === empty.length && password === empty) {\n DialogUtility.alert(_this.localObj.getConstant('The password is incorrect'));\n return;\n }\n _this.viewer.owner.editorModule.stopProtection(password);\n };\n /**\n * @private\n * @returns {void}\n */\n this.hideDialog = function () {\n _this.passwordTextBox.value = '';\n _this.documentHelper.dialog.hide();\n };\n this.documentHelper = documentHelper;\n this.owner = owner;\n }\n Object.defineProperty(UnProtectDocumentDialog.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n UnProtectDocumentDialog.prototype.initDialog = function (localValue) {\n //const instance: UnProtectDocumentDialog = this;\n var id = this.viewer.owner.containerId + '_enforce_protection';\n this.target = createElement('div', { id: id, className: 'e-de-enforce' });\n var container = createElement('div');\n var newPassWord = createElement('div', {\n className: 'e-de-unprotect-dlg-title',\n innerHTML: localValue.getConstant('Password')\n });\n this.passwordTextBox = createElement('input', {\n attrs: { type: 'password' },\n id: this.viewer.owner.containerId + '_display_text', className: 'e-input e-de-enforce-dlg-input'\n });\n // this.passwordTextBox.addEventListener('keyup', instance.onKeyUpOnDisplayBox);\n container.appendChild(newPassWord);\n container.appendChild(this.passwordTextBox);\n this.target.appendChild(container);\n };\n /**\n * @private\n * @returns {void}\n */\n UnProtectDocumentDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return UnProtectDocumentDialog;\n}());\nexport { UnProtectDocumentDialog };\n","/**\n * IncrementalSearch module file\n */\nvar queryString = '';\nvar prevString = '';\nvar tempQueryString = '';\nvar matches = [];\nvar activeClass = 'e-active';\nvar prevElementId = '';\n/**\n * Search and focus the list item based on key code matches with list text content\n *\n * @param { number } keyCode - Specifies the key code which pressed on keyboard events.\n * @param { HTMLElement[]} items - Specifies an array of HTMLElement, from which matches find has done.\n * @param { number } selectedIndex - Specifies the selected item in list item, so that search will happen\n * after selected item otherwise it will do from initial.\n * @param { boolean } ignoreCase - Specifies the case consideration when search has done.\n * @param {string} elementId - Specifies the list element ID.\n * @returns {Element} Returns list item based on key code matches with list text content.\n */\nexport function incrementalSearch(keyCode, items, selectedIndex, ignoreCase, elementId, queryStringUpdated, currentValue, isVirtual, refresh) {\n if (!queryStringUpdated || queryString === '') {\n if (tempQueryString != '') {\n queryString = tempQueryString + String.fromCharCode(keyCode);\n tempQueryString = '';\n }\n else {\n queryString += String.fromCharCode(keyCode);\n }\n }\n else if (queryString == prevString) {\n tempQueryString = String.fromCharCode(keyCode);\n }\n if (isVirtual) {\n setTimeout(function () {\n tempQueryString = '';\n }, 700);\n setTimeout(function () {\n queryString = '';\n }, 3000);\n }\n else {\n setTimeout(function () {\n queryString = '';\n }, 1000);\n }\n var index;\n queryString = ignoreCase ? queryString.toLowerCase() : queryString;\n if (prevElementId === elementId && prevString === queryString && !refresh) {\n for (var i = 0; i < matches.length; i++) {\n if (matches[i].classList.contains(activeClass)) {\n index = i;\n break;\n }\n if (currentValue && matches[i].textContent.toLowerCase() === currentValue.toLowerCase()) {\n index = i;\n break;\n }\n }\n index = index + 1;\n if (isVirtual) {\n return matches[index] && matches.length - 1 != index ? matches[index] : matches[matches.length];\n }\n return matches[index] ? matches[index] : matches[0];\n }\n else {\n var listItems = items;\n var strLength = queryString.length;\n var text = void 0;\n var item = void 0;\n selectedIndex = selectedIndex ? selectedIndex + 1 : 0;\n var i = selectedIndex;\n matches = [];\n do {\n if (i === listItems.length) {\n i = -1;\n }\n if (i === -1) {\n index = 0;\n }\n else {\n index = i;\n }\n item = listItems[index];\n text = ignoreCase ? item.innerText.toLowerCase() : item.innerText;\n if (text.substr(0, strLength) === queryString) {\n matches.push(listItems[index]);\n }\n i++;\n } while (i !== selectedIndex);\n prevString = queryString;\n prevElementId = elementId;\n if (isVirtual) {\n var indexUpdated = false;\n for (var i_1 = 0; i_1 < matches.length; i_1++) {\n if (currentValue && matches[i_1].textContent.toLowerCase() === currentValue.toLowerCase()) {\n index = i_1;\n indexUpdated = true;\n break;\n }\n }\n if (currentValue && indexUpdated) {\n index = index + 1;\n }\n return matches[index] ? matches[index] : matches[0];\n }\n return matches[0];\n }\n}\n/**\n * Search the list item based on given input value matches with search type.\n *\n * @param {string} inputVal - Specifies the given input value.\n * @param {HTMLElement[]} items - Specifies the list items.\n * @param {SearchType} searchType - Specifies the filter type.\n * @param {boolean} ignoreCase - Specifies the case sensitive option for search operation.\n * @returns {Element | number} Returns the search matched items.\n */\nexport function Search(inputVal, items, searchType, ignoreCase, dataSource, fields, type) {\n var listItems = items;\n ignoreCase = ignoreCase !== undefined && ignoreCase !== null ? ignoreCase : true;\n var itemData = { item: null, index: null };\n if (inputVal && inputVal.length) {\n var strLength = inputVal.length;\n var queryStr = ignoreCase ? inputVal.toLocaleLowerCase() : inputVal;\n queryStr = escapeCharRegExp(queryStr);\n var _loop_1 = function (i, itemsData) {\n var item = itemsData[i];\n var text = void 0;\n var filterValue;\n if (items && dataSource) {\n var checkField_1 = item;\n var fieldValue_1 = fields.text.split('.');\n dataSource.filter(function (data) {\n Array.prototype.slice.call(fieldValue_1).forEach(function (value) {\n /* eslint-disable security/detect-object-injection */\n if (type === 'object' && (!data.isHeader && checkField_1.textContent.toString().indexOf(data[value]) !== -1) && checkField_1.getAttribute('data-value') === data[fields.value].toString() || type === 'string' && checkField_1.textContent.toString().indexOf(data) !== -1) {\n filterValue = type === 'object' ? data[value] : data;\n }\n });\n });\n }\n text = dataSource && filterValue ? (ignoreCase ? filterValue.toString().toLocaleLowerCase() : filterValue).replace(/^\\s+|\\s+$/g, '') : (ignoreCase ? item.textContent.toLocaleLowerCase() : item.textContent).replace(/^\\s+|\\s+$/g, '');\n /* eslint-disable security/detect-non-literal-regexp */\n if ((searchType === 'Equal' && text === queryStr) || (searchType === 'StartsWith' && text.substr(0, strLength) === queryStr) || (searchType === 'EndsWith' && text.substr(text.length - queryStr.length) === queryStr) || (searchType === 'Contains' && new RegExp(queryStr, \"g\").test(text))) {\n itemData.item = item;\n itemData.index = i;\n return { value: { item: item, index: i } };\n }\n };\n for (var i = 0, itemsData = listItems; i < itemsData.length; i++) {\n var state_1 = _loop_1(i, itemsData);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n return itemData;\n /* eslint-enable security/detect-non-literal-regexp */\n }\n return itemData;\n}\n/* eslint-enable security/detect-object-injection */\nexport function escapeCharRegExp(value) {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\nexport function resetIncrementalSearchValues(elementId) {\n if (prevElementId === elementId) {\n prevElementId = '';\n prevString = '';\n queryString = '';\n matches = [];\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { EventHandler, Property, Event, compile, KeyboardEvents, append, select } from '@syncfusion/ej2-base';\nimport { attributes, isNullOrUndefined, getUniqueID, formatUnit, isUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Animation, Browser, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, prepend, detach, classList } from '@syncfusion/ej2-base';\nimport { Popup, isCollide, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { incrementalSearch, resetIncrementalSearchValues } from '../common/incremental-search';\nimport { DropDownBase, dropDownBaseClasses } from '../drop-down-base/drop-down-base';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\n[];\n// don't use space in classnames\nexport var dropDownListClasses = {\n root: 'e-dropdownlist',\n hover: dropDownBaseClasses.hover,\n selected: dropDownBaseClasses.selected,\n rtl: dropDownBaseClasses.rtl,\n li: dropDownBaseClasses.li,\n disable: dropDownBaseClasses.disabled,\n base: dropDownBaseClasses.root,\n focus: dropDownBaseClasses.focus,\n content: dropDownBaseClasses.content,\n input: 'e-input-group',\n inputFocus: 'e-input-focus',\n icon: 'e-input-group-icon e-ddl-icon',\n iconAnimation: 'e-icon-anim',\n value: 'e-input-value',\n device: 'e-ddl-device',\n backIcon: 'e-input-group-icon e-back-icon e-icons',\n filterBarClearIcon: 'e-input-group-icon e-clear-icon e-icons',\n filterInput: 'e-input-filter',\n filterParent: 'e-filter-parent',\n mobileFilter: 'e-ddl-device-filter',\n footer: 'e-ddl-footer',\n header: 'e-ddl-header',\n clearIcon: 'e-clear-icon',\n clearIconHide: 'e-clear-icon-hide',\n popupFullScreen: 'e-popup-full-page',\n disableIcon: 'e-ddl-disable-icon',\n hiddenElement: 'e-ddl-hidden',\n virtualList: 'e-list-item e-virtual-list',\n};\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The DropDownList component contains a list of predefined values from which you can\n * choose a single value.\n * ```html\n * \n * ```\n * ```typescript\n * let dropDownListObj:DropDownList = new DropDownList();\n * dropDownListObj.appendTo(\"#list\");\n * ```\n */\nvar DropDownList = /** @class */ (function (_super) {\n __extends(DropDownList, _super);\n /**\n * * Constructor for creating the DropDownList component.\n *\n * @param {DropDownListModel} options - Specifies the DropDownList model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function DropDownList(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isListSearched = false;\n _this.preventChange = false;\n _this.isTouched = false;\n _this.IsScrollerAtEnd = function () {\n return this.list && this.list.scrollTop + this.list.clientHeight >= this.list.scrollHeight;\n };\n return _this;\n }\n /**\n * Initialize the event handler.\n *\n * @private\n * @returns {void}\n */\n DropDownList.prototype.preRender = function () {\n this.valueTempElement = null;\n this.element.style.opacity = '0';\n this.initializeData();\n _super.prototype.preRender.call(this);\n this.activeIndex = this.index;\n this.queryString = '';\n };\n DropDownList.prototype.initializeData = function () {\n this.isPopupOpen = false;\n this.isDocumentClick = false;\n this.isInteracted = false;\n this.isFilterFocus = false;\n this.beforePopupOpen = false;\n this.initial = true;\n this.initialRemoteRender = false;\n this.isNotSearchList = false;\n this.isTyped = false;\n this.isSelected = false;\n this.preventFocus = false;\n this.preventAutoFill = false;\n this.isValidKey = false;\n this.typedString = '';\n this.isEscapeKey = false;\n this.isPreventBlur = false;\n this.isTabKey = false;\n this.actionCompleteData = { isUpdated: false };\n this.actionData = { isUpdated: false };\n this.prevSelectPoints = {};\n this.isSelectCustom = false;\n this.isDropDownClick = false;\n this.preventAltUp = false;\n this.isCustomFilter = false;\n this.isSecondClick = false;\n this.previousValue = null;\n this.keyConfigure = {\n tab: 'tab',\n enter: '13',\n escape: '27',\n end: '35',\n home: '36',\n down: '40',\n up: '38',\n pageUp: '33',\n pageDown: '34',\n open: 'alt+40',\n close: 'shift+tab',\n hide: 'alt+38',\n space: '32'\n };\n this.viewPortInfo = {\n currentPageNumber: null,\n direction: null,\n sentinelInfo: {},\n offsets: {},\n startIndex: 0,\n endIndex: this.itemCount,\n };\n };\n DropDownList.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.setProperties({ 'zIndex': this.zIndex });\n }\n };\n DropDownList.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableVirtualization) {\n modules.push({ args: [this], member: 'VirtualScroll' });\n }\n return modules;\n };\n DropDownList.prototype.renderList = function (e, isEmptyData) {\n _super.prototype.render.call(this, e, isEmptyData);\n if (!(this.dataSource instanceof DataManager)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.totalItemCount = this.dataSource && this.dataSource.length ? this.dataSource.length : 0;\n }\n if (this.enableVirtualization && this.isFiltering() && this.getModuleName() === 'combobox') {\n this.UpdateSkeleton();\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n }\n this.unWireListEvents();\n this.wireListEvents();\n };\n DropDownList.prototype.floatLabelChange = function () {\n if (this.getModuleName() === 'dropdownlist' && this.floatLabelType === 'Auto') {\n var floatElement = this.inputWrapper.container.querySelector('.e-float-text');\n if (this.inputElement.value !== '' || this.isInteracted) {\n classList(floatElement, ['e-label-top'], ['e-label-bottom']);\n }\n else {\n classList(floatElement, ['e-label-bottom'], ['e-label-top']);\n }\n }\n };\n DropDownList.prototype.resetHandler = function (e) {\n e.preventDefault();\n this.clearAll(e);\n if (this.enableVirtualization) {\n this.list.scrollTop = 0;\n this.virtualListInfo = null;\n this.previousStartIndex = 0;\n this.previousEndIndex = 0;\n }\n };\n DropDownList.prototype.resetFocusElement = function () {\n this.removeHover();\n this.removeSelection();\n this.removeFocus();\n this.list.scrollTop = 0;\n if (this.getModuleName() !== 'autocomplete' && !isNullOrUndefined(this.ulElement)) {\n var li = this.fields.disabled ? this.ulElement.querySelector('.' + dropDownListClasses.li + ':not(.e-disabled)') : this.ulElement.querySelector('.' + dropDownListClasses.li);\n if (this.enableVirtualization) {\n li = this.liCollections[this.skeletonCount];\n }\n if (li) {\n li.classList.add(dropDownListClasses.focus);\n }\n }\n };\n DropDownList.prototype.clearAll = function (e, properties) {\n this.previousItemData = (!isNullOrUndefined(this.itemData)) ? this.itemData : null;\n if (isNullOrUndefined(properties) || (!isNullOrUndefined(properties) &&\n (isNullOrUndefined(properties.dataSource) ||\n (!(properties.dataSource instanceof DataManager) && properties.dataSource.length === 0)))) {\n this.isActive = true;\n this.resetSelection(properties);\n }\n var dataItem = this.getItemData();\n if ((!this.allowObjectBinding && (this.previousValue === dataItem.value)) || (this.allowObjectBinding && this.previousValue && this.isObjectInArray(this.previousValue, [this.allowCustom ? this.value ? this.value : dataItem : dataItem.value ? this.getDataByValue(dataItem.value) : dataItem]))) {\n return;\n }\n this.onChangeEvent(e);\n this.checkAndResetCache();\n if (this.enableVirtualization) {\n this.updateInitialData();\n }\n };\n DropDownList.prototype.resetSelection = function (properties) {\n if (this.list) {\n if ((!isNullOrUndefined(properties) &&\n (isNullOrUndefined(properties.dataSource) ||\n (!(properties.dataSource instanceof DataManager) && properties.dataSource.length === 0)))) {\n this.selectedLI = null;\n this.actionCompleteData.isUpdated = false;\n this.actionCompleteData.ulElement = null;\n this.actionCompleteData.list = null;\n this.resetList(properties.dataSource);\n }\n else {\n if (this.allowFiltering && this.getModuleName() !== 'autocomplete'\n && !isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list) &&\n this.actionCompleteData.list.length > 0) {\n this.onActionComplete(this.actionCompleteData.ulElement.cloneNode(true), this.actionCompleteData.list);\n }\n this.resetFocusElement();\n }\n }\n if (!isNullOrUndefined(this.hiddenElement)) {\n this.hiddenElement.innerHTML = '';\n }\n if (!isNullOrUndefined(this.inputElement)) {\n this.inputElement.value = '';\n }\n this.value = null;\n this.itemData = null;\n this.text = null;\n this.index = null;\n this.activeIndex = null;\n this.item = null;\n this.queryString = '';\n if (this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n this.valueTempElement = null;\n }\n this.setSelection(null, null);\n this.isSelectCustom = false;\n this.updateIconState();\n this.cloneElements();\n };\n DropDownList.prototype.setHTMLAttributes = function () {\n if (Object.keys(this.htmlAttributes).length) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var htmlAttr = _a[_i];\n if (htmlAttr === 'class') {\n var updatedClassValue = (this.htmlAttributes[\"\" + htmlAttr].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValue !== '') {\n addClass([this.inputWrapper.container], updatedClassValue.split(' '));\n }\n }\n else if (htmlAttr === 'disabled' && this.htmlAttributes[\"\" + htmlAttr] === 'disabled') {\n this.enabled = false;\n this.setEnable();\n }\n else if (htmlAttr === 'readonly' && !isNullOrUndefined(this.htmlAttributes[\"\" + htmlAttr])) {\n this.readonly = true;\n this.dataBind();\n }\n else if (htmlAttr === 'style') {\n this.inputWrapper.container.setAttribute('style', this.htmlAttributes[\"\" + htmlAttr]);\n }\n else if (htmlAttr === 'aria-label') {\n if ((this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') && !this.readonly) {\n this.inputElement.setAttribute('aria-label', this.htmlAttributes[\"\" + htmlAttr]);\n }\n else if (this.getModuleName() === 'dropdownlist') {\n this.inputWrapper.container.setAttribute('aria-label', this.htmlAttributes[\"\" + htmlAttr]);\n }\n }\n else {\n var defaultAttr = ['title', 'id', 'placeholder',\n 'role', 'autocomplete', 'autocapitalize', 'spellcheck', 'minlength', 'maxlength'];\n var validateAttr = ['name', 'required'];\n if (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') {\n defaultAttr.push('tabindex');\n }\n if (validateAttr.indexOf(htmlAttr) > -1 || htmlAttr.indexOf('data') === 0) {\n this.hiddenElement.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n else if (defaultAttr.indexOf(htmlAttr) > -1) {\n if (htmlAttr === 'placeholder') {\n Input.setPlaceholder(this.htmlAttributes[\"\" + htmlAttr], this.inputElement);\n }\n else {\n this.inputElement.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n }\n else {\n this.inputWrapper.container.setAttribute(htmlAttr, this.htmlAttributes[\"\" + htmlAttr]);\n }\n }\n }\n }\n if (this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') {\n this.inputWrapper.container.removeAttribute('tabindex');\n }\n };\n DropDownList.prototype.getAriaAttributes = function () {\n return {\n 'aria-disabled': 'false',\n 'role': 'combobox',\n 'aria-expanded': 'false',\n 'aria-live': 'polite',\n 'aria-labelledby': this.hiddenElement.id\n };\n };\n DropDownList.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputElement.parentElement]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n DropDownList.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hidePopup();\n addClass([this.inputWrapper.container], dropDownListClasses.disable);\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.targetElement().tabIndex = -1;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} Returns the persisted data of the component.\n */\n DropDownList.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n DropDownList.prototype.getLocaleName = function () {\n return 'drop-down-list';\n };\n DropDownList.prototype.preventTabIndex = function (element) {\n if (this.getModuleName() === 'dropdownlist') {\n element.tabIndex = -1;\n }\n };\n DropDownList.prototype.targetElement = function () {\n return !isNullOrUndefined(this.inputWrapper) ? this.inputWrapper.container : null;\n };\n DropDownList.prototype.getNgDirective = function () {\n return 'EJS-DROPDOWNLIST';\n };\n DropDownList.prototype.getElementByText = function (text) {\n return this.getElementByValue(this.getValueByText(text));\n };\n DropDownList.prototype.getElementByValue = function (value) {\n var item;\n var listItems = this.getItems();\n for (var _i = 0, listItems_1 = listItems; _i < listItems_1.length; _i++) {\n var liItem = listItems_1[_i];\n if (this.getFormattedValue(liItem.getAttribute('data-value')) === value) {\n item = liItem;\n break;\n }\n }\n return item;\n };\n DropDownList.prototype.initValue = function () {\n this.viewPortInfo.startIndex = this.virtualItemStartIndex = 0;\n this.viewPortInfo.endIndex = this.virtualItemEndIndex = this.itemCount;\n this.renderList();\n if (this.dataSource instanceof DataManager) {\n this.initialRemoteRender = true;\n }\n else {\n this.updateValues();\n }\n };\n /**\n * Checks if the given value is disabled.\n *\n * @param { string | number | boolean | object } value - The value to check for disablement. Can be a string, number, boolean, or object.\n * @returns { boolean } A boolean indicating whether the value is disabled.\n */\n DropDownList.prototype.isDisableItemValue = function (value) {\n if (typeof (value) === 'object') {\n var objectValue = JSON.parse(JSON.stringify(value))[this.fields.value];\n return this.isDisabledItemByIndex(this.getIndexByValue(objectValue));\n }\n return this.isDisabledItemByIndex(this.getIndexByValue(value));\n };\n DropDownList.prototype.updateValues = function () {\n if (this.fields.disabled) {\n if (this.value != null) {\n this.value = !this.isDisableItemValue(this.value) ? this.value : null;\n }\n if (this.text != null) {\n this.text = !this.isDisabledItemByIndex(this.getIndexByValue(this.getValueByText(this.text))) ? this.text : null;\n }\n if (this.index != null) {\n this.index = !this.isDisabledItemByIndex(this.index) ? this.index : null;\n this.activeIndex = this.index;\n }\n }\n this.selectedValueInfo = this.viewPortInfo;\n if (!isNullOrUndefined(this.value)) {\n var value = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue(((this.fields.value) ? this.fields.value : ''), this.value) : this.value;\n this.setSelection(this.getElementByValue(value), null);\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var element = this.getElementByText(this.text);\n if (isNullOrUndefined(element)) {\n this.setProperties({ text: null });\n return;\n }\n else {\n this.setSelection(element, null);\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DropDownList.prototype.onBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n var target = e.relatedTarget;\n var currentTarget = e.target;\n var isPreventBlur = this.isPreventBlur;\n this.isPreventBlur = false;\n //IE 11 - issue\n if (isPreventBlur && !this.isDocumentClick && this.isPopupOpen && (!isNullOrUndefined(currentTarget) ||\n !this.isFilterLayout() && isNullOrUndefined(target))) {\n if (this.getModuleName() === 'dropdownlist' && this.allowFiltering && this.isPopupOpen) {\n this.filterInput.focus();\n }\n else {\n this.targetElement().focus();\n }\n return;\n }\n if (this.isDocumentClick || (!isNullOrUndefined(this.popupObj)\n && document.body.contains(this.popupObj.element) &&\n this.popupObj.element.classList.contains(dropDownListClasses.mobileFilter))) {\n if (!this.beforePopupOpen) {\n this.isDocumentClick = false;\n }\n return;\n }\n if (((this.getModuleName() === 'dropdownlist' && !this.isFilterFocus && target !== this.inputElement)\n && (document.activeElement !== target || (document.activeElement === target &&\n currentTarget.classList.contains(dropDownListClasses.inputFocus)))) ||\n (isNullOrUndefined(target) && this.getModuleName() === 'dropdownlist' && this.allowFiltering &&\n currentTarget !== this.inputWrapper.container) || this.getModuleName() !== 'dropdownlist' &&\n !this.inputWrapper.container.contains(target) || this.isTabKey) {\n this.isDocumentClick = this.isPopupOpen ? true : false;\n this.focusOutAction(e);\n this.isTabKey = false;\n }\n if (this.isRequested && !this.isPopupOpen && !this.isPreventBlur) {\n this.isActive = false;\n this.beforePopupOpen = false;\n }\n };\n DropDownList.prototype.focusOutAction = function (e) {\n this.isInteracted = false;\n this.focusOut(e);\n this.onFocusOut(e);\n };\n DropDownList.prototype.onFocusOut = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n this.floatLabelChange();\n this.dispatchEvent(this.hiddenElement, 'change');\n if (this.getModuleName() === 'dropdownlist' && this.element.tagName !== 'INPUT') {\n this.dispatchEvent(this.inputElement, 'blur');\n }\n if (this.inputWrapper.clearButton) {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n this.trigger('blur');\n };\n DropDownList.prototype.onFocus = function (e) {\n if (!this.isInteracted) {\n this.isInteracted = true;\n var args = { isInteracted: e ? true : false, event: e };\n this.trigger('focus', args);\n }\n this.updateIconState();\n };\n DropDownList.prototype.resetValueHandler = function (e) {\n var formElement = closest(this.inputElement, 'form');\n if (formElement && e.target === formElement) {\n var val = (this.element.tagName === this.getNgDirective()) ? null : this.inputElement.getAttribute('value');\n this.text = val;\n }\n };\n DropDownList.prototype.wireEvent = function () {\n EventHandler.add(this.inputWrapper.container, 'mousedown', this.dropDownClick, this);\n EventHandler.add(this.inputWrapper.container, 'focus', this.focusIn, this);\n EventHandler.add(this.inputWrapper.container, 'keypress', this.onSearch, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n this.bindCommonEvent();\n };\n DropDownList.prototype.bindCommonEvent = function () {\n EventHandler.add(this.targetElement(), 'blur', this.onBlurHandler, this);\n var formElement = closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.add(formElement, 'reset', this.resetValueHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n keyAction: this.keyActionHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.targetElement(), {\n keyAction: this.mobileKeyActionHandler.bind(this), keyConfigs: this.keyConfigure, eventName: 'keydown'\n });\n }\n this.bindClearEvent();\n };\n DropDownList.prototype.windowResize = function () {\n if (this.isPopupOpen) {\n this.popupObj.refreshPosition(this.inputWrapper.container);\n }\n };\n DropDownList.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DropDownList.prototype.unBindCommonEvent = function () {\n if (!isNullOrUndefined(this.inputWrapper) && this.targetElement()) {\n EventHandler.remove(this.targetElement(), 'blur', this.onBlurHandler);\n }\n var formElement = this.inputElement && closest(this.inputElement, 'form');\n if (formElement) {\n EventHandler.remove(formElement, 'reset', this.resetValueHandler);\n }\n if (!Browser.isDevice) {\n this.keyboardModule.destroy();\n }\n if (this.showClearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown', this.resetHandler);\n }\n };\n DropDownList.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement.value !== '' && !this.readonly) {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n /**\n * Event binding for list\n *\n * @returns {void}\n */\n DropDownList.prototype.wireListEvents = function () {\n if (!isNullOrUndefined(this.list)) {\n EventHandler.add(this.list, 'click', this.onMouseClick, this);\n EventHandler.add(this.list, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.list, 'mouseout', this.onMouseLeave, this);\n }\n };\n DropDownList.prototype.onSearch = function (e) {\n if (e.charCode !== 32 && e.charCode !== 13) {\n if (this.list === undefined) {\n this.renderList();\n }\n this.searchKeyEvent = e;\n this.onServerIncrementalSearch(e);\n }\n };\n DropDownList.prototype.onServerIncrementalSearch = function (e) {\n if (!this.isRequested && !isNullOrUndefined(this.list) &&\n !isNullOrUndefined(this.list.querySelector('li')) && this.enabled && !this.readonly) {\n this.incrementalSearch(e);\n }\n };\n DropDownList.prototype.onMouseClick = function (e) {\n var target = e.target;\n this.keyboardEvent = null;\n var li = closest(target, '.' + dropDownBaseClasses.li);\n if (!this.isValidLI(li) || this.isDisabledElement(li)) {\n return;\n }\n this.setSelection(li, e);\n if (Browser.isDevice && this.isFilterLayout()) {\n history.back();\n }\n else {\n var delay = 100;\n this.closePopup(delay, e);\n }\n };\n DropDownList.prototype.onMouseOver = function (e) {\n var currentLi = closest(e.target, '.' + dropDownBaseClasses.li);\n this.setHover(currentLi);\n };\n DropDownList.prototype.setHover = function (li) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.hover)) {\n this.removeHover();\n addClass([li], dropDownBaseClasses.hover);\n }\n };\n DropDownList.prototype.onMouseLeave = function () {\n this.removeHover();\n };\n DropDownList.prototype.removeHover = function () {\n if (this.list) {\n var hoveredItem = this.list.querySelectorAll('.' + dropDownBaseClasses.hover);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, dropDownBaseClasses.hover);\n }\n }\n };\n DropDownList.prototype.isValidLI = function (li) {\n return (li && li.hasAttribute('role') && li.getAttribute('role') === 'option');\n };\n DropDownList.prototype.updateIncrementalItemIndex = function (startIndex, endIndex) {\n this.incrementalStartIndex = startIndex;\n this.incrementalEndIndex = endIndex;\n };\n DropDownList.prototype.incrementalSearch = function (e) {\n if (this.liCollections.length > 0) {\n if (this.enableVirtualization) {\n var updatingincrementalindex = false;\n var queryStringUpdated = false;\n var activeElement = this.ulElement.getElementsByClassName('e-active')[0];\n var currentValue = activeElement ? activeElement.textContent : null;\n if (this.incrementalQueryString == '') {\n this.incrementalQueryString = String.fromCharCode(e.charCode);\n this.incrementalPreQueryString = this.incrementalQueryString;\n }\n else if (String.fromCharCode(e.charCode).toLocaleLowerCase() == this.incrementalPreQueryString.toLocaleLowerCase()) {\n queryStringUpdated = true;\n }\n else {\n this.incrementalQueryString = String.fromCharCode(e.charCode);\n }\n if ((this.viewPortInfo.endIndex >= this.incrementalEndIndex && this.incrementalEndIndex <= this.totalItemCount) || this.incrementalEndIndex == 0) {\n updatingincrementalindex = true;\n this.incrementalStartIndex = this.incrementalEndIndex;\n if (this.incrementalEndIndex == 0) {\n this.incrementalEndIndex = 100 > this.totalItemCount ? this.totalItemCount : 100;\n }\n else {\n this.incrementalEndIndex = this.incrementalEndIndex + 100 > this.totalItemCount ? this.totalItemCount : this.incrementalEndIndex + 100;\n }\n this.updateIncrementalInfo(this.incrementalStartIndex, this.incrementalEndIndex);\n updatingincrementalindex = true;\n }\n if (this.viewPortInfo.startIndex !== 0 || updatingincrementalindex) {\n this.updateIncrementalView(0, this.itemCount);\n }\n var li = incrementalSearch(e.charCode, this.incrementalLiCollections, this.activeIndex, true, this.element.id, queryStringUpdated, currentValue, true);\n while (isNullOrUndefined(li) && this.incrementalEndIndex < this.totalItemCount) {\n this.updateIncrementalItemIndex(this.incrementalEndIndex, this.incrementalEndIndex + 100 > this.totalItemCount ? this.totalItemCount : this.incrementalEndIndex + 100);\n this.updateIncrementalInfo(this.incrementalStartIndex, this.incrementalEndIndex);\n updatingincrementalindex = true;\n if (this.viewPortInfo.startIndex !== 0 || updatingincrementalindex) {\n this.updateIncrementalView(0, this.itemCount);\n }\n li = incrementalSearch(e.charCode, this.incrementalLiCollections, 0, true, this.element.id, queryStringUpdated, currentValue, true, true);\n if (!isNullOrUndefined(li)) {\n break;\n }\n if (isNullOrUndefined(li) && this.incrementalEndIndex >= this.totalItemCount) {\n this.updateIncrementalItemIndex(0, 100 > this.totalItemCount ? this.totalItemCount : 100);\n break;\n }\n }\n if (isNullOrUndefined(li) && this.incrementalEndIndex >= this.totalItemCount) {\n this.updateIncrementalItemIndex(0, 100 > this.totalItemCount ? this.totalItemCount : 100);\n this.updateIncrementalInfo(this.incrementalStartIndex, this.incrementalEndIndex);\n updatingincrementalindex = true;\n if (this.viewPortInfo.startIndex !== 0 || updatingincrementalindex) {\n this.updateIncrementalView(0, this.itemCount);\n }\n li = incrementalSearch(e.charCode, this.incrementalLiCollections, 0, true, this.element.id, queryStringUpdated, currentValue, true, true);\n }\n var index = li && this.getIndexByValue(li.getAttribute('data-value'));\n if (!index) {\n for (var i = 0; i < this.incrementalLiCollections.length; i++) {\n if (!isNullOrUndefined(li) && !isNullOrUndefined(li.getAttribute('data-value')) && this.incrementalLiCollections[i].getAttribute('data-value') === li.getAttribute('data-value').toString()) {\n index = i;\n index = this.incrementalStartIndex + index;\n break;\n }\n }\n }\n else {\n index = index - this.skeletonCount;\n }\n if (index) {\n if ((!(this.viewPortInfo.startIndex >= index)) || (!(index >= this.viewPortInfo.endIndex))) {\n var startIndex = index - ((this.itemCount / 2) - 2) > 0 ? index - ((this.itemCount / 2) - 2) : 0;\n var endIndex = this.viewPortInfo.startIndex + this.itemCount > this.totalItemCount ? this.totalItemCount : this.viewPortInfo.startIndex + this.itemCount;\n this.updateIncrementalView(startIndex, endIndex);\n }\n }\n if (!isNullOrUndefined(li)) {\n var index_1 = this.getIndexByValue(li.getAttribute('data-value')) - this.skeletonCount;\n if (index_1 > this.itemCount / 2) {\n var startIndex = this.viewPortInfo.startIndex + ((this.itemCount / 2) - 2) < this.totalItemCount ? this.viewPortInfo.startIndex + ((this.itemCount / 2) - 2) : this.totalItemCount;\n var endIndex = this.viewPortInfo.startIndex + this.itemCount > this.totalItemCount ? this.totalItemCount : this.viewPortInfo.startIndex + this.itemCount;\n this.updateIncrementalView(startIndex, endIndex);\n }\n li = this.getElementByValue(li.getAttribute('data-value'));\n this.setSelection(li, e);\n this.setScrollPosition();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n if (this.enableVirtualization && !this.fields.groupBy) {\n var selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex ? this.selectedLI.offsetTop + (this.virtualListInfo.startIndex * this.selectedLI.offsetHeight) : this.selectedLI.offsetTop;\n this.list.scrollTop = selectedLiOffsetTop - (this.list.querySelectorAll('.e-virtual-list').length * this.selectedLI.offsetHeight);\n }\n this.incrementalPreQueryString = this.incrementalQueryString;\n }\n else {\n this.updateIncrementalView(0, this.itemCount);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n this.list.scrollTop = 0;\n }\n }\n else {\n var li = void 0;\n if (this.fields.disabled) {\n var enableLiCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li + ':not(.e-disabled)');\n li = incrementalSearch(e.charCode, enableLiCollections, this.activeIndex, true, this.element.id);\n }\n else {\n li = incrementalSearch(e.charCode, this.liCollections, this.activeIndex, true, this.element.id);\n }\n if (!isNullOrUndefined(li)) {\n this.setSelection(li, e);\n this.setScrollPosition();\n }\n }\n }\n };\n /**\n * Hides the spinner loader.\n *\n * @returns {void}\n */\n DropDownList.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n this.spinnerElement.innerHTML = '';\n this.spinnerElement = null;\n }\n };\n /**\n * Shows the spinner loader.\n *\n * @returns {void}\n */\n DropDownList.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = Browser.isDevice && !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[1] ||\n !isNullOrUndefined(this.filterInputObj) && this.filterInputObj.buttons[0] || this.inputWrapper.buttons[0];\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n };\n DropDownList.prototype.keyActionHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.keyboardEvent = e;\n if (this.isPreventKeyAction && this.enableVirtualization) {\n e.preventDefault();\n }\n var preventAction = e.action === 'pageUp' || e.action === 'pageDown';\n var preventHomeEnd = this.getModuleName() !== 'dropdownlist' && (e.action === 'home' || e.action === 'end');\n this.isEscapeKey = e.action === 'escape';\n this.isTabKey = !this.isPopupOpen && e.action === 'tab';\n var isNavigation = (e.action === 'down' || e.action === 'up' || e.action === 'pageUp' || e.action === 'pageDown'\n || e.action === 'home' || e.action === 'end');\n if ((this.isEditTextBox() || preventAction || preventHomeEnd) && !this.isPopupOpen) {\n return;\n }\n if (!this.readonly) {\n var isTabAction = e.action === 'tab' || e.action === 'close';\n if (isNullOrUndefined(this.list) && !this.isRequested && !isTabAction && e.action !== 'escape') {\n this.searchKeyEvent = e;\n if (!this.enableVirtualization || (this.enableVirtualization && this.getModuleName() !== 'autocomplete' && e.type !== 'mousedown' && (e.keyCode === 40 || e.keyCode === 38))) {\n this.renderList(e);\n this.UpdateSkeleton();\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n }\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n isNavigation && this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if ((isTabAction && this.getModuleName() !== 'autocomplete') && this.isPopupOpen\n || e.action === 'escape') {\n e.preventDefault();\n }\n this.isSelected = e.action === 'escape' ? false : this.isSelected;\n this.isTyped = (isNavigation || e.action === 'escape') ? false : this.isTyped;\n switch (e.action) {\n case 'down':\n case 'up':\n this.updateUpDownAction(e);\n break;\n case 'pageUp':\n this.pageUpSelection(this.activeIndex - this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'pageDown':\n this.pageDownSelection(this.activeIndex + this.getPageCount(), e);\n e.preventDefault();\n break;\n case 'home':\n this.isMouseScrollAction = true;\n this.updateHomeEndAction(e);\n break;\n case 'end':\n this.isMouseScrollAction = true;\n this.updateHomeEndAction(e);\n break;\n case 'space':\n if (this.getModuleName() === 'dropdownlist') {\n if (!this.beforePopupOpen) {\n this.showPopup();\n e.preventDefault();\n }\n }\n break;\n case 'open':\n this.showPopup(e);\n break;\n case 'hide':\n this.preventAltUp = this.isPopupOpen;\n this.hidePopup(e);\n this.focusDropDown(e);\n break;\n case 'enter':\n this.selectCurrentItem(e);\n break;\n case 'tab':\n this.selectCurrentValueOnTab(e);\n break;\n case 'escape':\n case 'close':\n if (this.isPopupOpen) {\n this.hidePopup(e);\n this.focusDropDown(e);\n }\n break;\n }\n }\n };\n DropDownList.prototype.updateUpDownAction = function (e, isVirtualKeyAction) {\n if (this.fields.disabled && this.list && this.list.querySelectorAll('.e-list-item:not(.e-disabled)').length === 0) {\n return;\n }\n if (this.allowFiltering && !this.enableVirtualization && this.getModuleName() !== 'autocomplete') {\n var value_1 = this.getItemData().value;\n if (isNullOrUndefined(value_1)) {\n value_1 = 'null';\n }\n var filterIndex = this.getIndexByValue(value_1);\n if (!isNullOrUndefined(filterIndex)) {\n this.activeIndex = filterIndex;\n }\n }\n var focusEle = this.list.querySelector('.' + dropDownListClasses.focus);\n if (this.isSelectFocusItem(focusEle) && !isVirtualKeyAction) {\n this.setSelection(focusEle, e);\n if (this.enableVirtualization) {\n var selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex ? this.selectedLI.offsetTop + (this.virtualListInfo.startIndex * this.selectedLI.offsetHeight) : this.selectedLI.offsetTop;\n if (this.fields.groupBy) {\n selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex == 0 ? this.selectedLI.offsetHeight - selectedLiOffsetTop : selectedLiOffsetTop - this.selectedLI.offsetHeight;\n }\n this.list.scrollTop = selectedLiOffsetTop - (this.list.querySelectorAll('.e-virtual-list').length * this.selectedLI.offsetHeight);\n }\n }\n else if (!isNullOrUndefined(this.liCollections)) {\n var virtualIndex = this.activeIndex;\n var index = e.action === 'down' ? this.activeIndex + 1 : this.activeIndex - 1;\n index = isVirtualKeyAction ? virtualIndex : index;\n var startIndex = 0;\n if (this.getModuleName() === 'autocomplete') {\n startIndex = e.action === 'down' && isNullOrUndefined(this.activeIndex) ? 0 : this.liCollections.length - 1;\n index = index < 0 ? this.liCollections.length - 1 : index === this.liCollections.length ? 0 : index;\n }\n var nextItem = void 0;\n if (this.getModuleName() !== 'autocomplete' || this.getModuleName() === 'autocomplete' && this.isPopupOpen) {\n if (!this.enableVirtualization) {\n nextItem = isNullOrUndefined(this.activeIndex) ? this.liCollections[startIndex]\n : this.liCollections[index];\n }\n else {\n if (!isVirtualKeyAction) {\n nextItem = isNullOrUndefined(this.activeIndex) ? this.liCollections[this.skeletonCount]\n : this.liCollections[index];\n nextItem = !isNullOrUndefined(nextItem) && !nextItem.classList.contains('e-virtual-list') ? nextItem : null;\n }\n else {\n if (this.getModuleName() === 'autocomplete') {\n var value = this.getFormattedValue(this.selectedLI.getAttribute('data-value'));\n nextItem = this.getElementByValue(value);\n }\n else {\n nextItem = this.getElementByValue(this.getItemData().value);\n }\n }\n }\n }\n if (!isNullOrUndefined(nextItem)) {\n var focusAtFirstElement = this.liCollections[this.skeletonCount] && this.liCollections[this.skeletonCount].classList.contains('e-item-focus');\n this.setSelection(nextItem, e);\n if (focusAtFirstElement && this.enableVirtualization && this.getModuleName() === 'autocomplete' && !isVirtualKeyAction) {\n var selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex ? this.selectedLI.offsetTop + (this.virtualListInfo.startIndex * this.selectedLI.offsetHeight) : this.selectedLI.offsetTop;\n selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex == 0 && this.fields.groupBy ? this.selectedLI.offsetHeight - selectedLiOffsetTop : selectedLiOffsetTop - this.selectedLI.offsetHeight;\n this.list.scrollTop = selectedLiOffsetTop - (this.list.querySelectorAll('.e-virtual-list').length * this.selectedLI.offsetHeight);\n }\n }\n else if (this.enableVirtualization && !this.isPopupOpen && this.getModuleName() !== 'autocomplete' && ((this.viewPortInfo.endIndex !== this.totalItemCount && e.action === 'down') || (this.viewPortInfo.startIndex !== 0 && e.action === 'up'))) {\n if (e.action === 'down') {\n this.viewPortInfo.startIndex = (this.viewPortInfo.startIndex + this.itemCount) < (this.totalItemCount - this.itemCount) ? this.viewPortInfo.startIndex + this.itemCount : this.totalItemCount - this.itemCount;\n this.viewPortInfo.endIndex = this.viewPortInfo.startIndex + this.itemCount;\n this.updateVirtualItemIndex();\n this.isCustomFilter = this.getModuleName() === 'combobox' ? true : this.isCustomFilter;\n this.resetList(this.dataSource, this.fields, this.query);\n this.isCustomFilter = this.getModuleName() === 'combobox' ? false : this.isCustomFilter;\n var value_2 = this.liCollections[0].getAttribute('data-value') !== \"null\" ? this.getFormattedValue(this.liCollections[0].getAttribute('data-value')) : null;\n var selectedData = this.getDataByValue(value_2);\n if (selectedData) {\n this.itemData = selectedData;\n }\n }\n else if (e.action === 'up') {\n this.viewPortInfo.startIndex = (this.viewPortInfo.startIndex - this.itemCount) > 0 ? this.viewPortInfo.startIndex - this.itemCount : 0;\n this.viewPortInfo.endIndex = this.viewPortInfo.startIndex + this.itemCount;\n this.updateVirtualItemIndex();\n this.isCustomFilter = this.getModuleName() === 'combobox' ? true : this.isCustomFilter;\n this.resetList(this.dataSource, this.fields, this.query);\n this.isCustomFilter = this.getModuleName() === 'combobox' ? false : this.isCustomFilter;\n var value_3 = this.liCollections[this.liCollections.length - 1].getAttribute('data-value') !== \"null\" ? this.getFormattedValue(this.liCollections[this.liCollections.length - 1].getAttribute('data-value')) : null;\n var selectedData = this.getDataByValue(value_3);\n if (selectedData) {\n this.itemData = selectedData;\n }\n }\n this.UpdateSkeleton();\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n this.handleVirtualKeyboardActions(e, this.pageCount);\n }\n }\n if (this.allowFiltering && !this.enableVirtualization && this.getModuleName() !== 'autocomplete') {\n var value_4 = this.getItemData().value;\n var filterIndex = this.getIndexByValueFilter(value_4, this.actionCompleteData.ulElement);\n if (!isNullOrUndefined(filterIndex)) {\n this.activeIndex = filterIndex;\n }\n }\n if (this.allowFiltering && this.getModuleName() === 'dropdownlist' && this.filterInput) {\n if (!isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(this.filterInput, { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n else if (!isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-active')[0])) {\n attributes(this.filterInput, { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-active')[0].id });\n }\n }\n var itemIndex;\n for (var index = 0; index < this.liCollections.length; index++) {\n if (this.liCollections[index].classList.contains(dropDownListClasses.focus)\n || this.liCollections[index].classList.contains(dropDownListClasses.selected)) {\n itemIndex = index;\n break;\n }\n }\n if (itemIndex != null && this.isDisabledElement(this.liCollections[itemIndex])) {\n if (this.getModuleName() !== 'autocomplete') {\n if (this.liCollections.length - 1 === itemIndex && e.action === 'down') {\n e.action = 'up';\n }\n if (itemIndex === 0 && e.action === 'up') {\n e.action = 'down';\n }\n }\n this.updateUpDownAction(e);\n }\n e.preventDefault();\n };\n DropDownList.prototype.updateHomeEndAction = function (e, isVirtualKeyAction) {\n if (this.getModuleName() === 'dropdownlist') {\n var findLi = 0;\n if (e.action === 'home') {\n findLi = 0;\n if (this.enableVirtualization && this.isPopupOpen) {\n findLi = this.skeletonCount;\n }\n else if (this.enableVirtualization && !this.isPopupOpen && this.viewPortInfo.startIndex !== 0) {\n this.viewPortInfo.startIndex = 0;\n this.viewPortInfo.endIndex = this.itemCount;\n this.updateVirtualItemIndex();\n this.resetList(this.dataSource, this.fields, this.query);\n }\n }\n else {\n if (this.enableVirtualization && !this.isPopupOpen && this.viewPortInfo.endIndex !== this.totalItemCount) {\n this.viewPortInfo.startIndex = this.totalItemCount - this.itemCount;\n this.viewPortInfo.endIndex = this.totalItemCount;\n this.updateVirtualItemIndex();\n this.resetList(this.dataSource, this.fields, this.query);\n }\n findLi = this.getItems().length - 1;\n }\n e.preventDefault();\n if (this.activeIndex === findLi) {\n if (isVirtualKeyAction) {\n this.setSelection(this.liCollections[findLi], e);\n }\n return;\n }\n this.setSelection(this.liCollections[findLi], e);\n }\n };\n DropDownList.prototype.selectCurrentValueOnTab = function (e) {\n if (this.getModuleName() === 'autocomplete') {\n this.selectCurrentItem(e);\n }\n else {\n if (this.isPopupOpen) {\n this.hidePopup(e);\n this.focusDropDown(e);\n }\n }\n };\n DropDownList.prototype.mobileKeyActionHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if ((this.isEditTextBox()) && !this.isPopupOpen) {\n return;\n }\n if (!this.readonly) {\n if (this.list === undefined && !this.isRequested) {\n this.searchKeyEvent = e;\n this.renderList();\n }\n if (isNullOrUndefined(this.list) || (!isNullOrUndefined(this.liCollections) &&\n this.liCollections.length === 0) || this.isRequested) {\n return;\n }\n if (e.action === 'enter') {\n this.selectCurrentItem(e);\n }\n }\n };\n DropDownList.prototype.handleVirtualKeyboardActions = function (e, pageCount) {\n switch (e.action) {\n case 'down':\n case 'up':\n if (this.itemData != null || this.getModuleName() === 'autocomplete') {\n this.updateUpDownAction(e, true);\n }\n break;\n case 'pageUp':\n this.activeIndex = this.getModuleName() === 'autocomplete' ? this.getIndexByValue(this.selectedLI.getAttribute('data-value')) + this.getPageCount() - 1 : this.getIndexByValue(this.previousValue);\n this.pageUpSelection(this.activeIndex - this.getPageCount(), e, true);\n e.preventDefault();\n break;\n case 'pageDown':\n this.activeIndex = this.getModuleName() === 'autocomplete' ? this.getIndexByValue(this.selectedLI.getAttribute('data-value')) - this.getPageCount() : this.getIndexByValue(this.previousValue);\n this.pageDownSelection(!isNullOrUndefined(this.activeIndex) ? (this.activeIndex + this.getPageCount()) : (2 * this.getPageCount()), e, true);\n e.preventDefault();\n break;\n case 'home':\n this.isMouseScrollAction = true;\n this.updateHomeEndAction(e, true);\n break;\n case 'end':\n this.isMouseScrollAction = true;\n this.updateHomeEndAction(e, true);\n break;\n }\n this.keyboardEvent = null;\n };\n DropDownList.prototype.selectCurrentItem = function (e) {\n if (this.isPopupOpen) {\n var li = this.list.querySelector('.' + dropDownListClasses.focus);\n if (this.isDisabledElement(li)) {\n return;\n }\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n this.hidePopup(e);\n this.focusDropDown(e);\n }\n else {\n this.showPopup();\n }\n };\n DropDownList.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n DropDownList.prototype.pageUpSelection = function (steps, event, isVirtualKeyAction) {\n var previousItem = steps >= 0 ? this.liCollections[steps + 1] : this.liCollections[0];\n if ((this.enableVirtualization && this.activeIndex == null)) {\n previousItem = (this.liCollections.length >= steps && steps >= 0) ? this.liCollections[steps + this.skeletonCount + 1] : this.liCollections[0];\n }\n if (!isNullOrUndefined(previousItem) && previousItem.classList.contains('e-virtual-list')) {\n previousItem = this.liCollections[this.skeletonCount];\n }\n this.PageUpDownSelection(previousItem, event);\n if (this.allowFiltering && this.getModuleName() === 'dropdownlist') {\n if (!isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(this.filterInput, { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n else if (!isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-active')[0])) {\n attributes(this.filterInput, { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-active')[0].id });\n }\n }\n };\n DropDownList.prototype.PageUpDownSelection = function (previousItem, event) {\n if (this.enableVirtualization) {\n if (!isNullOrUndefined(previousItem) && ((this.getModuleName() !== 'autocomplete' && !previousItem.classList.contains('e-active')) || (this.getModuleName() === 'autocomplete' && !previousItem.classList.contains('e-item-focus')))) {\n this.setSelection(previousItem, event);\n }\n }\n else {\n this.setSelection(previousItem, event);\n }\n };\n DropDownList.prototype.pageDownSelection = function (steps, event, isVirtualKeyAction) {\n var list = this.getItems();\n var previousItem = steps <= list.length ? this.liCollections[steps - 1] : this.liCollections[list.length - 1];\n if (this.enableVirtualization && this.skeletonCount > 0) {\n steps = this.getModuleName() === 'dropdownlist' && this.allowFiltering ? steps + 1 : steps;\n previousItem = steps < list.length ? this.liCollections[steps] : this.liCollections[list.length - 1];\n }\n if ((this.enableVirtualization && this.activeIndex == null)) {\n previousItem = steps <= list.length ? this.liCollections[steps + this.skeletonCount - 1] : this.liCollections[list.length - 1];\n }\n this.PageUpDownSelection(previousItem, event);\n if (this.allowFiltering && this.getModuleName() === 'dropdownlist') {\n if (!isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(this.filterInput, { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n else if (!isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-active')[0])) {\n attributes(this.filterInput, { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-active')[0].id });\n }\n }\n };\n DropDownList.prototype.unWireEvent = function () {\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.container, 'mousedown', this.dropDownClick);\n EventHandler.remove(this.inputWrapper.container, 'keypress', this.onSearch);\n EventHandler.remove(this.inputWrapper.container, 'focus', this.focusIn);\n EventHandler.remove(window, 'resize', this.windowResize);\n }\n this.unBindCommonEvent();\n };\n /**\n * Event un binding for list items.\n *\n * @returns {void}\n */\n DropDownList.prototype.unWireListEvents = function () {\n if (this.list) {\n EventHandler.remove(this.list, 'click', this.onMouseClick);\n EventHandler.remove(this.list, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.list, 'mouseout', this.onMouseLeave);\n }\n };\n DropDownList.prototype.checkSelector = function (id) {\n return '[id=\"' + id.replace(/(:|\\.|\\[|\\]|,|=|@|\\\\|\\/|#)/g, '\\\\$1') + '\"]';\n };\n DropDownList.prototype.onDocumentClick = function (e) {\n var target = e.target;\n if (!(!isNullOrUndefined(this.popupObj) && closest(target, this.checkSelector(this.popupObj.element.id))) &&\n !isNullOrUndefined(this.inputWrapper) && !this.inputWrapper.container.contains(e.target)) {\n if (this.inputWrapper.container.classList.contains(dropDownListClasses.inputFocus) || this.isPopupOpen) {\n this.isDocumentClick = true;\n var isActive = this.isRequested;\n if (this.getModuleName() === 'combobox' && this.isTyped) {\n this.isInteracted = false;\n }\n this.hidePopup(e);\n this.isInteracted = false;\n if (!isActive) {\n this.onFocusOut(e);\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n }\n }\n else if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput)\n && !(this.getModuleName() === 'combobox' &&\n !this.allowFiltering && Browser.isDevice && target === this.inputWrapper.buttons[0])) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.targetElement() ||\n document.activeElement === this.filterInput);\n e.preventDefault();\n }\n };\n DropDownList.prototype.activeStateChange = function () {\n if (this.isDocumentClick) {\n this.hidePopup();\n this.onFocusOut();\n this.inputWrapper.container.classList.remove(dropDownListClasses.inputFocus);\n }\n };\n DropDownList.prototype.focusDropDown = function (e) {\n if (!this.initial && this.isFilterLayout()) {\n this.focusIn(e);\n }\n };\n DropDownList.prototype.dropDownClick = function (e) {\n if (e.which === 3 || e.button === 2) {\n return;\n }\n this.keyboardEvent = null;\n if (this.targetElement().classList.contains(dropDownListClasses.disable) || this.inputWrapper.clearButton === e.target) {\n return;\n }\n var target = e.target;\n if (target !== this.inputElement && !(this.allowFiltering && target === this.filterInput) && this.getModuleName() !== 'combobox') {\n e.preventDefault();\n }\n if (!this.readonly) {\n if (this.isPopupOpen) {\n this.hidePopup(e);\n if (this.isFilterLayout()) {\n this.focusDropDown(e);\n }\n }\n else {\n this.focusIn(e);\n this.floatLabelChange();\n this.queryString = this.inputElement.value.trim() === '' ? null : this.inputElement.value;\n this.isDropDownClick = true;\n this.showPopup(e);\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n // eslint-disable-next-line max-len\n var duration = (this.element.tagName === this.getNgDirective() && this.itemTemplate) ? 500 : 100;\n if (!this.isSecondClick) {\n setTimeout(function () {\n proxy_1.cloneElements();\n proxy_1.isSecondClick = true;\n }, duration);\n }\n }\n else {\n this.focusIn(e);\n }\n };\n DropDownList.prototype.cloneElements = function () {\n if (this.list) {\n var ulElement = this.list.querySelector('ul');\n if (ulElement) {\n ulElement = ulElement.cloneNode ? ulElement.cloneNode(true) : ulElement;\n this.actionCompleteData.ulElement = ulElement;\n }\n }\n };\n DropDownList.prototype.updateSelectedItem = function (li, e, preventSelect, isSelection) {\n var _this = this;\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n var value = li.getAttribute('data-value') !== null ? this.getFormattedValue(li.getAttribute('data-value')) : null;\n var selectedData = this.getDataByValue(value);\n if (!this.initial && !preventSelect && !isNullOrUndefined(e)) {\n var items = this.detachChanges(selectedData);\n this.isSelected = true;\n var eventArgs = {\n e: e,\n item: li,\n itemData: items,\n isInteracted: e ? true : false,\n cancel: false\n };\n this.trigger('select', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n li.classList.remove(dropDownBaseClasses.selected);\n }\n else {\n _this.selectEventCallback(li, e, preventSelect, selectedData, value);\n if (isSelection) {\n _this.setSelectOptions(li, e);\n }\n }\n });\n }\n else {\n this.selectEventCallback(li, e, preventSelect, selectedData, value);\n if (isSelection) {\n this.setSelectOptions(li, e);\n }\n }\n };\n DropDownList.prototype.selectEventCallback = function (li, e, preventSelect, selectedData, value) {\n this.previousItemData = (!isNullOrUndefined(this.itemData)) ? this.itemData : null;\n if (this.itemData != selectedData) {\n this.previousValue = (!isNullOrUndefined(this.itemData)) ? typeof this.itemData == \"object\" && !this.allowObjectBinding ? this.checkFieldValue(this.itemData, this.fields.value.split('.')) : this.itemData : null;\n }\n this.item = li;\n this.itemData = selectedData;\n var focusedItem = this.list.querySelector('.' + dropDownBaseClasses.focus);\n if (focusedItem) {\n removeClass([focusedItem], dropDownBaseClasses.focus);\n }\n li.setAttribute('aria-selected', 'true');\n if (isNullOrUndefined(value)) {\n value = 'null';\n }\n if (this.allowFiltering && !this.enableVirtualization && this.getModuleName() !== 'autocomplete') {\n var filterIndex = this.getIndexByValueFilter(value, this.actionCompleteData.ulElement);\n if (!isNullOrUndefined(filterIndex)) {\n this.activeIndex = filterIndex;\n }\n else {\n this.activeIndex = this.getIndexByValue(value);\n }\n }\n else {\n if (this.enableVirtualization && this.activeIndex == null && this.dataSource instanceof DataManager) {\n this.UpdateSkeleton();\n this.liCollections = this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n this.ulElement = this.list.querySelector('ul');\n }\n this.activeIndex = this.getIndexByValue(value);\n }\n };\n DropDownList.prototype.activeItem = function (li) {\n if (this.isValidLI(li) && !li.classList.contains(dropDownBaseClasses.selected)) {\n this.removeSelection();\n li.classList.add(dropDownBaseClasses.selected);\n this.removeHover();\n li.setAttribute('aria-selected', 'true');\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownList.prototype.setValue = function (e) {\n var dataItem = this.getItemData();\n this.isTouched = !isNullOrUndefined(e);\n if (dataItem.value === null) {\n Input.setValue(null, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dataItem.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n else if (!isNullOrUndefined(this.valueTempElement) && this.inputElement.previousSibling === this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n }\n if (!isNullOrUndefined(dataItem.value) && !this.enableVirtualization && this.allowFiltering) {\n this.activeIndex = this.getIndexByValueFilter(dataItem.value, this.actionCompleteData.ulElement);\n }\n var clearIcon = dropDownListClasses.clearIcon;\n var isFilterElement = this.isFiltering() && this.filterInput && (this.getModuleName() === 'combobox');\n var clearElement = isFilterElement && this.filterInput.parentElement.querySelector('.' + clearIcon);\n if (this.isFiltering() && clearElement) {\n clearElement.style.removeProperty('visibility');\n }\n if ((!this.allowObjectBinding && (this.previousValue === dataItem.value)) || (this.allowObjectBinding && (this.previousValue != null && this.isObjectInArray(this.previousValue, [this.allowCustom && this.isObjectCustomValue ? this.value ? this.value : dataItem : dataItem.value ? this.getDataByValue(dataItem.value) : dataItem])))) {\n this.isSelected = false;\n return true;\n }\n else {\n this.isSelected = !this.initial ? true : false;\n this.isSelectCustom = false;\n if (this.getModuleName() === 'dropdownlist') {\n this.updateIconState();\n }\n return false;\n }\n };\n DropDownList.prototype.setSelection = function (li, e) {\n if (this.isValidLI(li) && (!li.classList.contains(dropDownBaseClasses.selected) || (this.isPopupOpen && this.isSelected\n && li.classList.contains(dropDownBaseClasses.selected)))) {\n this.updateSelectedItem(li, e, false, true);\n }\n else {\n this.setSelectOptions(li, e);\n if (this.enableVirtualization && this.value) {\n var fields = (this.fields.value) ? this.fields.value : '';\n var currentValue = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n if (this.dataSource instanceof DataManager) {\n var getItem = new DataManager(this.virtualGroupDataSource).executeLocal(new Query().where(new Predicate(fields, 'equal', currentValue)));\n if (getItem && getItem.length > 0) {\n this.itemData = getItem[0];\n var dataItem = this.getItemData();\n var value = this.allowObjectBinding ? this.getDataByValue(dataItem.value) : dataItem.value;\n if ((this.value === dataItem.value && this.text !== dataItem.text) || (this.value !== dataItem.value && this.text === dataItem.text)) {\n this.setProperties({ 'text': dataItem.text, 'value': value });\n }\n }\n }\n else {\n var getItem = new DataManager(this.dataSource).executeLocal(new Query().where(new Predicate(fields, 'equal', currentValue)));\n if (getItem && getItem.length > 0) {\n this.itemData = getItem[0];\n var dataItem = this.getItemData();\n var value = this.allowObjectBinding ? this.getDataByValue(dataItem.value) : dataItem.value;\n if ((this.value === dataItem.value && this.text !== dataItem.text) || (this.value !== dataItem.value && this.text === dataItem.text)) {\n this.setProperties({ 'text': dataItem.text, 'value': value });\n }\n }\n }\n }\n }\n };\n DropDownList.prototype.setSelectOptions = function (li, e) {\n if (this.list) {\n this.removeHover();\n }\n this.previousSelectedLI = (!isNullOrUndefined(this.selectedLI)) ? this.selectedLI : null;\n this.selectedLI = li;\n if (this.setValue(e)) {\n return;\n }\n if ((!this.isPopupOpen && !isNullOrUndefined(li)) || (this.isPopupOpen && !isNullOrUndefined(e) &&\n (e.type !== 'keydown' || e.type === 'keydown' && e.action === 'enter'))) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n if (this.isPopupOpen && !isNullOrUndefined(this.selectedLI) && this.itemData !== null && (!e || e.type !== 'click')) {\n this.setScrollPosition(e);\n }\n if (Browser.info.name !== 'mozilla') {\n if (this.targetElement()) {\n attributes(this.targetElement(), { 'aria-describedby': this.inputElement.id !== '' ? this.inputElement.id : this.element.id });\n this.targetElement().removeAttribute('aria-live');\n }\n }\n if (this.isPopupOpen && !isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n else if (this.isPopupOpen && !isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-active')[0])) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-active')[0].id });\n }\n };\n DropDownList.prototype.dropdownCompiler = function (dropdownTemplate) {\n var checkTemplate = false;\n if (typeof dropdownTemplate !== 'function' && dropdownTemplate) {\n try {\n checkTemplate = (document.querySelectorAll(dropdownTemplate).length) ? true : false;\n }\n catch (exception) {\n checkTemplate = false;\n }\n }\n return checkTemplate;\n };\n DropDownList.prototype.setValueTemplate = function () {\n var compiledString;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate(['valueTemplate']);\n if (this.valueTempElement) {\n detach(this.valueTempElement);\n this.inputElement.style.display = 'block';\n this.valueTempElement = null;\n }\n }\n if (!this.valueTempElement) {\n this.valueTempElement = this.createElement('span', { className: dropDownListClasses.value });\n this.inputElement.parentElement.insertBefore(this.valueTempElement, this.inputElement);\n this.inputElement.style.display = 'none';\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.isReact) {\n this.valueTempElement.innerHTML = '';\n }\n var valuecheck = this.dropdownCompiler(this.valueTemplate);\n if (typeof this.valueTemplate !== 'function' && valuecheck) {\n compiledString = compile(document.querySelector(this.valueTemplate).innerHTML.trim());\n }\n else {\n compiledString = compile(this.valueTemplate);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var valueCompTemp = compiledString(this.itemData, this, 'valueTemplate', this.valueTemplateId, this.isStringTemplate, null, this.valueTempElement);\n if (valueCompTemp && valueCompTemp.length > 0) {\n append(valueCompTemp, this.valueTempElement);\n }\n this.renderReactTemplates();\n };\n DropDownList.prototype.removeSelection = function () {\n if (this.list) {\n var selectedItems = this.list.querySelectorAll('.' + dropDownBaseClasses.selected);\n if (selectedItems.length) {\n removeClass(selectedItems, dropDownBaseClasses.selected);\n selectedItems[0].removeAttribute('aria-selected');\n }\n }\n };\n DropDownList.prototype.getItemData = function () {\n var fields = this.fields;\n var dataItem = null;\n dataItem = this.itemData;\n var dataValue;\n var dataText;\n if (!isNullOrUndefined(dataItem)) {\n dataValue = getValue(fields.value, dataItem);\n dataText = getValue(fields.text, dataItem);\n }\n var value = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataValue : dataItem);\n var text = (!isNullOrUndefined(dataItem) &&\n !isUndefined(dataValue) ? dataText : dataItem);\n return { value: value, text: text };\n };\n /**\n * To trigger the change event for list.\n *\n * @param {MouseEvent | KeyboardEvent | TouchEvent} eve - Specifies the event arguments.\n * @returns {void}\n */\n DropDownList.prototype.onChangeEvent = function (eve, isCustomValue) {\n var _this = this;\n var dataItem = this.getItemData();\n var index = this.isSelectCustom ? null : this.activeIndex;\n if (this.enableVirtualization) {\n var datas = this.dataSource instanceof DataManager ? this.virtualGroupDataSource : this.dataSource;\n if (dataItem.value && datas && datas.length > 0) {\n var foundIndex = datas.findIndex(function (data) {\n return !isNullOrUndefined(dataItem.value) && getValue(_this.fields.value, data) === dataItem.value;\n });\n if (foundIndex !== -1) {\n index = foundIndex;\n }\n }\n }\n var value = this.allowObjectBinding ? isCustomValue ? this.value : this.getDataByValue(dataItem.value) : dataItem.value;\n this.setProperties({ 'index': index, 'text': dataItem.text, 'value': value }, true);\n this.detachChangeEvent(eve);\n };\n DropDownList.prototype.detachChanges = function (value) {\n var items;\n if (typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number') {\n items = Object.defineProperties({}, {\n value: {\n value: value,\n enumerable: true\n },\n text: {\n value: value,\n enumerable: true\n }\n });\n }\n else {\n items = value;\n }\n return items;\n };\n DropDownList.prototype.detachChangeEvent = function (eve) {\n this.isSelected = false;\n this.previousValue = this.value;\n this.activeIndex = this.enableVirtualization ? this.getIndexByValue(this.value) : this.index;\n this.typedString = !isNullOrUndefined(this.text) ? this.text : '';\n if (!this.initial) {\n var items = this.detachChanges(this.itemData);\n var preItems = void 0;\n if (typeof this.previousItemData === 'string' ||\n typeof this.previousItemData === 'boolean' ||\n typeof this.previousItemData === 'number') {\n preItems = Object.defineProperties({}, {\n value: {\n value: this.previousItemData,\n enumerable: true\n },\n text: {\n value: this.previousItemData,\n enumerable: true\n }\n });\n }\n else {\n preItems = this.previousItemData;\n }\n this.setHiddenValue();\n var eventArgs = {\n e: eve,\n item: this.item,\n itemData: items,\n previousItem: this.previousSelectedLI,\n previousItemData: preItems,\n isInteracted: eve ? true : false,\n value: this.value,\n element: this.element,\n event: eve\n };\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n }\n if ((isNullOrUndefined(this.value) || this.value === '') && this.floatLabelType !== 'Always') {\n removeClass([this.inputWrapper.container], 'e-valid-input');\n }\n };\n DropDownList.prototype.setHiddenValue = function () {\n if (!isNullOrUndefined(this.value)) {\n var value = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n if (this.hiddenElement.querySelector('option')) {\n var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.textContent = this.text;\n selectedElement.setAttribute('value', value.toString());\n }\n else {\n if (!isNullOrUndefined(this.hiddenElement)) {\n this.hiddenElement.innerHTML = '';\n var selectedElement = this.hiddenElement.querySelector('option');\n selectedElement.setAttribute('value', value.toString());\n }\n }\n }\n else {\n this.hiddenElement.innerHTML = '';\n }\n };\n /**\n * Filter bar implementation\n *\n * @param {KeyboardEventArgs} e - Specifies the event arguments.\n * @returns {void}\n */\n DropDownList.prototype.onFilterUp = function (e) {\n if (!(e.ctrlKey && e.keyCode === 86) && (this.isValidKey || e.keyCode === 40 || e.keyCode === 38)) {\n this.isValidKey = false;\n this.firstItem = this.dataSource && this.dataSource.length > 0 ? this.dataSource[0] : null;\n switch (e.keyCode) {\n case 38: //up arrow\n case 40: //down arrow\n if (this.getModuleName() === 'autocomplete' && !this.isPopupOpen && !this.preventAltUp && !this.isRequested) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else {\n this.preventAutoFill = false;\n }\n this.preventAltUp = false;\n if (this.getModuleName() === 'autocomplete' && !isNullOrUndefined(this.ulElement) && !isNullOrUndefined(this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(this.targetElement(), { 'aria-activedescendant': this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n e.preventDefault();\n break;\n case 46: //delete\n case 8: //backspace\n this.typedString = this.filterInput.value;\n if (!this.isPopupOpen && this.typedString !== '' || this.isPopupOpen && this.queryString.length > 0) {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else if (this.typedString === '' && this.queryString === '' && this.getModuleName() !== 'autocomplete') {\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n else if (this.typedString === '') {\n if (this.list) {\n this.resetFocusElement();\n }\n this.activeIndex = null;\n if (this.getModuleName() !== 'dropdownlist') {\n this.preventAutoFill = true;\n this.searchLists(e);\n if (this.getModuleName() === 'autocomplete') {\n this.hidePopup();\n }\n }\n }\n e.preventDefault();\n break;\n default:\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n this.getInitialData = true;\n this.renderList();\n }\n this.typedString = this.filterInput.value;\n this.preventAutoFill = false;\n this.searchLists(e);\n if ((this.enableVirtualization && this.getModuleName() !== 'autocomplete') || (this.getModuleName() === 'autocomplete' && !(this.dataSource instanceof DataManager)) || (this.getModuleName() === 'autocomplete' && (this.dataSource instanceof DataManager) && this.totalItemCount != 0)) {\n this.getFilteringSkeletonCount();\n }\n break;\n }\n }\n else {\n this.isValidKey = false;\n }\n };\n DropDownList.prototype.onFilterDown = function (e) {\n switch (e.keyCode) {\n case 13: //enter\n break;\n case 40: //down arrow\n case 38: //up arrow\n this.queryString = this.filterInput.value;\n e.preventDefault();\n break;\n case 9: //tab\n if (this.isPopupOpen && this.getModuleName() !== 'autocomplete') {\n e.preventDefault();\n }\n break;\n default:\n this.prevSelectPoints = this.getSelectionPoints();\n this.queryString = this.filterInput.value;\n break;\n }\n };\n DropDownList.prototype.removeFillSelection = function () {\n if (this.isInteracted) {\n var selection = this.getSelectionPoints();\n this.inputElement.setSelectionRange(selection.end, selection.end);\n }\n };\n DropDownList.prototype.getQuery = function (query) {\n var filterQuery;\n if (!this.isCustomFilter && this.allowFiltering && this.filterInput) {\n filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n var filterType = this.typedString === '' ? 'contains' : this.filterType;\n var dataType = this.typeOfData(this.dataSource).typeof;\n if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n filterQuery.where('', filterType, this.typedString, this.ignoreCase, this.ignoreAccent);\n }\n else if (((this.getModuleName() !== 'combobox')) || (this.isFiltering() && this.getModuleName() === 'combobox' && this.typedString !== '')) {\n var fields = (this.fields.text) ? this.fields.text : '';\n filterQuery.where(fields, filterType, this.typedString, this.ignoreCase, this.ignoreAccent);\n }\n }\n else {\n filterQuery = (this.enableVirtualization && !isNullOrUndefined(this.customFilterQuery)) ? this.customFilterQuery.clone() : query ? query.clone() : this.query ? this.query.clone() : new Query();\n }\n if (this.enableVirtualization && this.viewPortInfo.endIndex != 0) {\n var takeValue = this.getTakeValue();\n var alreadySkipAdded = false;\n if (filterQuery) {\n for (var queryElements = 0; queryElements < filterQuery.queries.length; queryElements++) {\n if (filterQuery.queries[queryElements].fn === 'onSkip') {\n alreadySkipAdded = true;\n break;\n }\n }\n }\n var queryTakeValue = 0;\n var querySkipValue = 0;\n if (filterQuery && filterQuery.queries.length > 0) {\n for (var queryElements_1 = 0; queryElements_1 < filterQuery.queries.length; queryElements_1++) {\n if (filterQuery.queries[queryElements_1].fn === 'onSkip') {\n querySkipValue = filterQuery.queries[queryElements_1].e.nos;\n }\n if (filterQuery.queries[queryElements_1].fn === 'onTake') {\n queryTakeValue = takeValue <= filterQuery.queries[queryElements_1].e.nos ? filterQuery.queries[queryElements_1].e.nos : takeValue;\n }\n }\n }\n if (queryTakeValue <= 0 && this.query && this.query.queries.length > 0) {\n for (var queryElements_2 = 0; queryElements_2 < this.query.queries.length; queryElements_2++) {\n if (this.query.queries[queryElements_2].fn === 'onTake') {\n queryTakeValue = takeValue <= this.query.queries[queryElements_2].e.nos ? this.query.queries[queryElements_2].e.nos : takeValue;\n }\n }\n }\n var skipExists = false;\n if (filterQuery && filterQuery.queries.length > 0) {\n for (var queryElements_3 = 0; queryElements_3 < filterQuery.queries.length; queryElements_3++) {\n if (filterQuery.queries[queryElements_3].fn === 'onSkip') {\n querySkipValue = filterQuery.queries[queryElements_3].e.nos;\n filterQuery.queries.splice(queryElements_3, 1);\n --queryElements_3;\n continue;\n }\n if (filterQuery.queries[queryElements_3].fn === 'onTake') {\n queryTakeValue = filterQuery.queries[queryElements_3].e.nos <= queryTakeValue ? queryTakeValue : filterQuery.queries[queryElements_3].e.nos;\n filterQuery.queries.splice(queryElements_3, 1);\n --queryElements_3;\n }\n }\n }\n if (!skipExists && (this.allowFiltering || !this.isPopupOpen || !alreadySkipAdded)) {\n if (querySkipValue > 0) {\n filterQuery.skip(querySkipValue);\n }\n else {\n filterQuery.skip(this.virtualItemStartIndex);\n }\n }\n if (this.isIncrementalRequest) {\n filterQuery.take(this.incrementalEndIndex);\n }\n else {\n if (queryTakeValue > 0) {\n filterQuery.take(queryTakeValue);\n }\n else {\n filterQuery.take(takeValue);\n }\n }\n filterQuery.requiresCount();\n }\n return filterQuery;\n };\n DropDownList.prototype.getSelectionPoints = function () {\n var input = this.inputElement;\n return { start: Math.abs(input.selectionStart), end: Math.abs(input.selectionEnd) };\n };\n DropDownList.prototype.searchLists = function (e) {\n var _this = this;\n this.isTyped = true;\n this.activeIndex = null;\n this.isListSearched = true;\n if (this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon)) {\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n clearElement.style.visibility = this.filterInput.value === '' ? 'hidden' : 'visible';\n }\n this.isDataFetched = false;\n if (this.isFiltering()) {\n this.checkAndResetCache();\n this.isRequesting = false;\n var eventArgs_1 = {\n preventDefaultAction: false,\n text: this.filterInput.value,\n updateData: function (dataSource, query, fields) {\n if (eventArgs_1.cancel) {\n return;\n }\n _this.isCustomFilter = true;\n _this.customFilterQuery = query ? query.clone() : query;\n _this.filteringAction(dataSource, query, fields);\n },\n baseEventArgs: e,\n cancel: false\n };\n this.trigger('filtering', eventArgs_1, function (eventArgs) {\n if (!eventArgs.cancel && !_this.isCustomFilter && !eventArgs.preventDefaultAction) {\n _this.filteringAction(_this.dataSource, null, _this.fields);\n }\n });\n }\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n\n */\n DropDownList.prototype.filter = function (dataSource, query, fields) {\n this.isCustomFilter = true;\n this.filteringAction(dataSource, query, fields);\n };\n DropDownList.prototype.filteringAction = function (dataSource, query, fields) {\n if (!isNullOrUndefined(this.filterInput)) {\n this.beforePopupOpen = ((!this.isPopupOpen && this.getModuleName() === 'combobox' && this.filterInput.value === '') || this.getInitialData) ?\n false : true;\n var isNoData = this.list.classList.contains(dropDownBaseClasses.noData);\n if (this.filterInput.value.trim() === '' && !this.itemTemplate) {\n this.actionCompleteData.isUpdated = false;\n this.isTyped = false;\n if (!isNullOrUndefined(this.actionCompleteData.ulElement) && !isNullOrUndefined(this.actionCompleteData.list)) {\n if (this.enableVirtualization) {\n if (this.isFiltering()) {\n this.isPreventScrollAction = true;\n this.list.scrollTop = 0;\n this.previousStartIndex = 0;\n this.virtualListInfo = null;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.totalItemCount = this.dataSource && this.dataSource.length ? this.dataSource.length : 0;\n this.resetList(dataSource, fields, query);\n if (isNoData && !this.list.classList.contains(dropDownBaseClasses.noData)) {\n if (!this.list.querySelector('.e-virtual-ddl-content')) {\n this.list.appendChild(this.createElement('div', {\n className: 'e-virtual-ddl-content',\n styles: this.getTransformValues()\n })).appendChild(this.list.querySelector('.e-list-parent'));\n }\n if (!this.list.querySelector('.e-virtual-ddl')) {\n var virualElement = this.createElement('div', {\n id: this.element.id + '_popup', className: 'e-virtual-ddl', styles: this.GetVirtualTrackHeight()\n });\n document.getElementsByClassName('e-popup')[0].querySelector('.e-dropdownbase').appendChild(virualElement);\n }\n }\n }\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list);\n }\n this.isTyped = true;\n if (!isNullOrUndefined(this.itemData) && this.getModuleName() === 'dropdownlist') {\n this.focusIndexItem();\n this.setScrollPosition();\n }\n this.isNotSearchList = true;\n }\n else {\n this.isNotSearchList = false;\n query = (this.filterInput.value.trim() === '') ? null : query;\n if (this.enableVirtualization && this.isFiltering() && this.isTyped) {\n this.isPreventScrollAction = true;\n this.list.scrollTop = 0;\n this.previousStartIndex = 0;\n this.virtualListInfo = null;\n }\n this.resetList(dataSource, fields, query);\n if (this.getModuleName() === 'dropdownlist' && this.list.classList.contains(dropDownBaseClasses.noData)) {\n this.popupContentElement.setAttribute('role', 'status');\n this.popupContentElement.setAttribute('id', 'no-record');\n attributes(this.filterInputObj.container, { 'aria-activedescendant': 'no-record' });\n }\n if (this.enableVirtualization && isNoData && !this.list.classList.contains(dropDownBaseClasses.noData)) {\n if (!this.list.querySelector('.e-virtual-ddl-content')) {\n this.list.appendChild(this.createElement('div', {\n className: 'e-virtual-ddl-content',\n styles: this.getTransformValues()\n })).appendChild(this.list.querySelector('.e-list-parent'));\n }\n if (!this.list.querySelector('.e-virtual-ddl')) {\n var virualElement = this.createElement('div', {\n id: this.element.id + '_popup', className: 'e-virtual-ddl', styles: this.GetVirtualTrackHeight()\n });\n document.getElementsByClassName('e-popup')[0].querySelector('.e-dropdownbase').appendChild(virualElement);\n }\n }\n }\n if (this.enableVirtualization) {\n this.getFilteringSkeletonCount();\n }\n this.renderReactTemplates();\n }\n };\n DropDownList.prototype.setSearchBox = function (popupElement) {\n if (this.isFiltering()) {\n var parentElement = popupElement.querySelector('.' + dropDownListClasses.filterParent) ?\n popupElement.querySelector('.' + dropDownListClasses.filterParent) : this.createElement('span', {\n className: dropDownListClasses.filterParent\n });\n this.filterInput = this.createElement('input', {\n attrs: { type: 'text' },\n className: dropDownListClasses.filterInput\n });\n this.element.parentNode.insertBefore(this.filterInput, this.element);\n var backIcon = false;\n if (Browser.isDevice) {\n backIcon = true;\n }\n this.filterInputObj = Input.createInput({\n element: this.filterInput,\n buttons: backIcon ?\n [dropDownListClasses.backIcon, dropDownListClasses.filterBarClearIcon] : [dropDownListClasses.filterBarClearIcon],\n properties: { placeholder: this.filterBarPlaceholder }\n }, this.createElement);\n if (!isNullOrUndefined(this.cssClass)) {\n if (this.cssClass.split(' ').indexOf('e-outline') !== -1) {\n addClass([this.filterInputObj.container], 'e-outline');\n }\n else if (this.cssClass.split(' ').indexOf('e-filled') !== -1) {\n addClass([this.filterInputObj.container], 'e-filled');\n }\n }\n append([this.filterInputObj.container], parentElement);\n prepend([parentElement], popupElement);\n attributes(this.filterInput, {\n 'aria-disabled': 'false',\n 'role': 'combobox',\n 'autocomplete': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n });\n this.clearIconElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n if (!Browser.isDevice && this.clearIconElement) {\n EventHandler.add(this.clearIconElement, 'click', this.clearText, this);\n this.clearIconElement.style.visibility = 'hidden';\n }\n if (!Browser.isDevice) {\n this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n }\n else {\n this.searchKeyModule = new KeyboardEvents(this.filterInput, {\n keyAction: this.mobileKeyActionHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n }\n EventHandler.add(this.filterInput, 'input', this.onInput, this);\n EventHandler.add(this.filterInput, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.filterInput, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.filterInput, 'blur', this.onBlurHandler, this);\n EventHandler.add(this.filterInput, 'paste', this.pasteHandler, this);\n return this.filterInputObj;\n }\n else {\n return inputObject;\n }\n };\n DropDownList.prototype.onInput = function (e) {\n this.isValidKey = true;\n if (this.getModuleName() === 'combobox') {\n this.updateIconState();\n }\n // For filtering works in mobile firefox.\n if (Browser.isDevice && Browser.info.name === 'mozilla') {\n this.typedString = this.filterInput.value;\n this.preventAutoFill = true;\n this.searchLists(e);\n }\n };\n DropDownList.prototype.pasteHandler = function (e) {\n var _this = this;\n setTimeout(function () {\n _this.typedString = _this.filterInput.value;\n _this.searchLists(e);\n });\n };\n DropDownList.prototype.onActionFailure = function (e) {\n _super.prototype.onActionFailure.call(this, e);\n if (this.beforePopupOpen) {\n this.renderPopup();\n }\n };\n DropDownList.prototype.getTakeValue = function () {\n return this.allowFiltering && this.getModuleName() === 'dropdownlist' && Browser.isDevice ? Math.round(window.outerHeight / this.listItemHeight) : this.itemCount;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DropDownList.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n var _this = this;\n if (this.dataSource instanceof DataManager && !isNullOrUndefined(e) && !this.virtualGroupDataSource) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.totalItemCount = e.count;\n }\n if (this.isNotSearchList && !this.enableVirtualization) {\n this.isNotSearchList = false;\n return;\n }\n if (this.getInitialData) {\n this.updateActionCompleteDataValues(ulElement, list);\n }\n if (!this.preventPopupOpen && this.getModuleName() === 'combobox') {\n this.beforePopupOpen = true;\n this.preventPopupOpen = true;\n }\n var tempItemCount = this.itemCount;\n if (this.isActive || !isNullOrUndefined(ulElement)) {\n var selectedItem = this.selectedLI ? this.selectedLI.cloneNode(true) : null;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n this.skeletonCount = this.totalItemCount != 0 && this.totalItemCount < (this.itemCount * 2) ? 0 : this.skeletonCount;\n this.updateSelectElementData(this.allowFiltering);\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent) && this.searchKeyEvent.type === 'keydown') {\n this.isRequested = false;\n this.keyActionHandler(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n if (this.isRequested && !isNullOrUndefined(this.searchKeyEvent)) {\n this.incrementalSearch(this.searchKeyEvent);\n this.searchKeyEvent = null;\n }\n if (!this.enableVirtualization) {\n this.list.scrollTop = 0;\n }\n if (!isNullOrUndefined(ulElement)) {\n attributes(ulElement, { 'id': this.element.id + '_options', 'role': 'listbox', 'aria-hidden': 'false', 'aria-label': 'listbox' });\n }\n if (this.initialRemoteRender) {\n this.initial = true;\n this.activeIndex = this.index;\n this.initialRemoteRender = false;\n if (this.value && this.dataSource instanceof DataManager) {\n var checkField_1 = isNullOrUndefined(this.fields.value) ? this.fields.text : this.fields.value;\n var value_5 = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue(checkField_1, this.value) : this.value;\n var fieldValue_1 = this.fields.value.split('.');\n var checkVal = list.some(function (x) {\n return isNullOrUndefined(x[checkField_1]) && fieldValue_1.length > 1 ?\n _this.checkFieldValue(x, fieldValue_1) === value_5 : x[checkField_1] === value_5;\n });\n if (this.enableVirtualization && this.virtualGroupDataSource) {\n checkVal = this.virtualGroupDataSource.some(function (x) {\n return isNullOrUndefined(x[checkField_1]) && fieldValue_1.length > 1 ?\n _this.checkFieldValue(x, fieldValue_1) === value_5 : x[checkField_1] === value_5;\n });\n }\n if (!checkVal) {\n this.dataSource.executeQuery(this.getQuery(this.query).where(new Predicate(checkField_1, 'equal', value_5)))\n .then(function (e) {\n if (e.result.length > 0) {\n _this.addItem(e.result, list.length);\n _this.updateValues();\n }\n else {\n _this.updateValues();\n }\n });\n }\n else {\n this.updateValues();\n }\n }\n else {\n this.updateValues();\n }\n this.initial = false;\n }\n else if (this.getModuleName() === 'autocomplete' && this.value) {\n this.setInputValue();\n }\n if (this.getModuleName() !== 'autocomplete' && this.isFiltering() && !this.isTyped) {\n if (!this.actionCompleteData.isUpdated || ((!this.isCustomFilter\n && !this.isFilterFocus) || (isNullOrUndefined(this.itemData) && this.allowFiltering)\n && ((this.dataSource instanceof DataManager)\n || (!isNullOrUndefined(this.dataSource) && !isNullOrUndefined(this.dataSource.length) &&\n this.dataSource.length !== 0)))) {\n if (this.itemTemplate && this.element.tagName === 'EJS-COMBOBOX' && this.allowFiltering) {\n setTimeout(function () {\n _this.updateActionCompleteDataValues(ulElement, list);\n }, 0);\n }\n else {\n this.updateActionCompleteDataValues(ulElement, list);\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((this.allowCustom || (this.allowFiltering && !this.isValueInList(list, this.value) && this.dataSource instanceof DataManager)) && !this.enableVirtualization) {\n this.addNewItem(list, selectedItem);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n else if ((this.allowCustom || (this.allowFiltering && this.isValueInList(list, this.value))) && !this.enableVirtualization) {\n this.addNewItem(list, selectedItem);\n }\n if (!isNullOrUndefined(this.itemData) || (isNullOrUndefined(this.itemData) && this.enableVirtualization)) {\n this.getSkeletonCount();\n this.skeletonCount = this.totalItemCount != 0 && this.totalItemCount < (this.itemCount * 2) ? 0 : this.skeletonCount;\n this.UpdateSkeleton();\n this.focusIndexItem();\n }\n if (this.enableVirtualization) {\n this.updateActionCompleteDataValues(ulElement, list);\n }\n }\n else if (this.enableVirtualization && this.getModuleName() !== 'autocomplete' && !this.isFiltering()) {\n var value = this.getItemData().value;\n this.activeIndex = this.getIndexByValue(value);\n var element = this.findListElement(this.list, 'li', 'data-value', value);\n this.selectedLI = element;\n }\n else if (this.enableVirtualization && this.getModuleName() === 'autocomplete') {\n this.activeIndex = this.skeletonCount;\n }\n if (this.beforePopupOpen) {\n this.renderPopup(e);\n if (this.enableVirtualization) {\n if (!this.list.querySelector('.e-virtual-list')) {\n this.UpdateSkeleton();\n this.liCollections = this.list.querySelectorAll('.e-list-item');\n }\n }\n if (this.enableVirtualization && tempItemCount != this.itemCount) {\n this.resetList(this.dataSource, this.fields);\n }\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DropDownList.prototype.isValueInList = function (list, valueToFind) {\n if (Array.isArray(list)) {\n for (var i = 0; i < list.length; i++) {\n if (list[i] === valueToFind) {\n return true;\n }\n }\n }\n else if (typeof list === 'object' && list !== null) {\n for (var key in list) {\n if (Object.prototype.hasOwnProperty.call(list, key) && list[key] === valueToFind) {\n return true;\n }\n }\n }\n return false;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DropDownList.prototype.checkFieldValue = function (list, fieldValue) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var checkField = list;\n fieldValue.forEach(function (value) {\n checkField = checkField[value];\n });\n return checkField;\n };\n DropDownList.prototype.updateActionCompleteDataValues = function (ulElement, list) {\n this.actionCompleteData = { ulElement: ulElement.cloneNode(true), list: list, isUpdated: true };\n if (this.actionData.list !== this.actionCompleteData.list && this.actionCompleteData.ulElement && this.actionCompleteData.list) {\n this.actionData = this.actionCompleteData;\n }\n };\n DropDownList.prototype.addNewItem = function (listData, newElement) {\n var _this = this;\n if (!isNullOrUndefined(this.itemData) && !isNullOrUndefined(newElement)) {\n var value_6 = this.getItemData().value;\n var isExist = listData.some(function (data) {\n return (((typeof data === 'string' || typeof data === 'number') && data === value_6) ||\n (getValue(_this.fields.value, data) === value_6));\n });\n if (!isExist) {\n this.addItem(this.itemData);\n }\n }\n };\n DropDownList.prototype.updateActionCompleteData = function (li, item, index) {\n var _this = this;\n if (this.getModuleName() !== 'autocomplete' && this.actionCompleteData.ulElement) {\n if (this.itemTemplate && this.element.tagName === 'EJS-COMBOBOX' && this.allowFiltering) {\n setTimeout(function () {\n _this.actionCompleteDataUpdate(li, item, index);\n }, 0);\n }\n else {\n this.actionCompleteDataUpdate(li, item, index);\n }\n }\n };\n DropDownList.prototype.actionCompleteDataUpdate = function (li, item, index) {\n if (index !== null) {\n this.actionCompleteData.ulElement.\n insertBefore(li.cloneNode(true), this.actionCompleteData.ulElement.childNodes[index]);\n }\n else {\n this.actionCompleteData.ulElement.appendChild(li.cloneNode(true));\n }\n if (this.isFiltering() && this.actionCompleteData.list && this.actionCompleteData.list.indexOf(item) < 0) {\n this.actionCompleteData.list.push(item);\n }\n };\n DropDownList.prototype.focusIndexItem = function () {\n var value = this.getItemData().value;\n this.activeIndex = ((this.enableVirtualization && !isNullOrUndefined(value)) || !this.enableVirtualization) ? this.getIndexByValue(value) : this.activeIndex;\n var element = this.findListElement(this.list, 'li', 'data-value', value);\n this.selectedLI = element;\n this.activeItem(element);\n if (!(this.enableVirtualization && isNullOrUndefined(element))) {\n this.removeFocus();\n }\n };\n DropDownList.prototype.updateSelection = function () {\n var selectedItem = this.list.querySelector('.' + dropDownBaseClasses.selected);\n if (selectedItem) {\n this.setProperties({ 'index': this.getIndexByValue(selectedItem.getAttribute('data-value')) });\n this.activeIndex = this.index;\n }\n else {\n this.removeFocus();\n this.list.querySelector('.' + dropDownBaseClasses.li).classList.add(dropDownListClasses.focus);\n }\n };\n DropDownList.prototype.updateSelectionList = function () {\n var selectedItem = this.list && this.list.querySelector('.' + 'e-active');\n if (!selectedItem && !isNullOrUndefined(this.value)) {\n var value = this.allowObjectBinding ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n var findEle = this.findListElement(this.list, 'li', 'data-value', value);\n if (findEle) {\n findEle.classList.add('e-active');\n }\n }\n };\n DropDownList.prototype.removeFocus = function () {\n var highlightedItem = this.list.querySelectorAll('.' + dropDownListClasses.focus);\n if (highlightedItem && highlightedItem.length) {\n removeClass(highlightedItem, dropDownListClasses.focus);\n }\n };\n DropDownList.prototype.renderPopup = function (e) {\n var _this = this;\n if (this.popupObj && document.body.contains(this.popupObj.element)) {\n this.refreshPopup();\n return;\n }\n var args = { cancel: false };\n this.trigger('beforeOpen', args, function (args) {\n if (!args.cancel) {\n var popupEle = _this.createElement('div', {\n id: _this.element.id + '_popup', className: 'e-ddl e-popup ' + (_this.cssClass !== null ? _this.cssClass : '')\n });\n popupEle.setAttribute('aria-label', _this.element.id);\n popupEle.setAttribute('role', 'dialog');\n var searchBox = _this.setSearchBox(popupEle);\n _this.listContainerHeight = _this.allowFiltering && _this.getModuleName() === 'dropdownlist' && Browser.isDevice ? formatUnit(Math.round(window.outerHeight).toString() + 'px') : formatUnit(_this.popupHeight);\n if (_this.headerTemplate) {\n _this.setHeaderTemplate(popupEle);\n }\n append([_this.list], popupEle);\n if (_this.footerTemplate) {\n _this.setFooterTemplate(popupEle);\n }\n document.body.appendChild(popupEle);\n popupEle.style.top = '0px';\n if (_this.enableVirtualization && _this.itemTemplate) {\n var listitems = popupEle.querySelectorAll('li.e-list-item:not(.e-virtual-list)');\n _this.listItemHeight = listitems.length > 0 ? Math.ceil(listitems[0].getBoundingClientRect().height) : 0;\n }\n if (_this.enableVirtualization && !_this.list.classList.contains(dropDownBaseClasses.noData)) {\n _this.getSkeletonCount();\n _this.skeletonCount = _this.totalItemCount < (_this.itemCount * 2) ? 0 : _this.skeletonCount;\n if (!_this.list.querySelector('.e-virtual-ddl-content')) {\n _this.list.appendChild(_this.createElement('div', {\n className: 'e-virtual-ddl-content',\n styles: _this.getTransformValues()\n })).appendChild(_this.list.querySelector('.e-list-parent'));\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = _this.getTransformValues();\n }\n _this.UpdateSkeleton();\n _this.liCollections = _this.list.querySelectorAll('.' + dropDownBaseClasses.li);\n _this.virtualItemCount = _this.itemCount;\n if (!_this.list.querySelector('.e-virtual-ddl')) {\n var virualElement = _this.createElement('div', {\n id: _this.element.id + '_popup', className: 'e-virtual-ddl', styles: _this.GetVirtualTrackHeight()\n });\n popupEle.querySelector('.e-dropdownbase').appendChild(virualElement);\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.list.getElementsByClassName('e-virtual-ddl')[0].style = _this.GetVirtualTrackHeight();\n }\n }\n popupEle.style.visibility = 'hidden';\n if (_this.popupHeight !== 'auto') {\n _this.searchBoxHeight = 0;\n if (!isNullOrUndefined(searchBox.container) && _this.getModuleName() !== 'combobox' && _this.getModuleName() !== 'autocomplete') {\n _this.searchBoxHeight = (searchBox.container.parentElement).getBoundingClientRect().height;\n _this.listContainerHeight = (parseInt(_this.listContainerHeight, 10) - (_this.searchBoxHeight)).toString() + 'px';\n }\n if (_this.headerTemplate) {\n _this.header = _this.header ? _this.header : popupEle.querySelector('.e-ddl-header');\n var height = Math.round(_this.header.getBoundingClientRect().height);\n _this.listContainerHeight = (parseInt(_this.listContainerHeight, 10) - (height + _this.searchBoxHeight)).toString() + 'px';\n }\n if (_this.footerTemplate) {\n _this.footer = _this.footer ? _this.footer : popupEle.querySelector('.e-ddl-footer');\n var height = Math.round(_this.footer.getBoundingClientRect().height);\n _this.listContainerHeight = (parseInt(_this.listContainerHeight, 10) - (height + _this.searchBoxHeight)).toString() + 'px';\n }\n _this.list.style.maxHeight = (parseInt(_this.listContainerHeight, 10) - 2).toString() + 'px'; // due to box-sizing property\n popupEle.style.maxHeight = formatUnit(_this.popupHeight);\n }\n else {\n popupEle.style.height = 'auto';\n }\n var offsetValue = 0;\n var left = void 0;\n _this.isPreventScrollAction = true;\n if (!isNullOrUndefined(_this.selectedLI) && (!isNullOrUndefined(_this.activeIndex) && _this.activeIndex >= 0)) {\n _this.setScrollPosition();\n }\n else if (_this.enableVirtualization) {\n _this.setScrollPosition();\n }\n else {\n _this.list.scrollTop = 0;\n }\n if (Browser.isDevice && (!_this.allowFiltering && (_this.getModuleName() === 'dropdownlist' ||\n (_this.isDropDownClick && _this.getModuleName() === 'combobox')))) {\n offsetValue = _this.getOffsetValue(popupEle);\n var firstItem = _this.isEmptyList() ? _this.list : _this.liCollections[0];\n if (!isNullOrUndefined(_this.inputElement)) {\n left = -(parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(_this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(_this.inputElement.parentElement).borderLeftWidth, 10));\n }\n }\n _this.createPopup(popupEle, offsetValue, left);\n _this.popupContentElement = _this.popupObj.element.querySelector('.e-content');\n _this.getFocusElement();\n _this.checkCollision(popupEle);\n if (Browser.isDevice) {\n if ((parseInt(_this.popupWidth.toString(), 10) > window.outerWidth) && !(_this.getModuleName() === 'dropdownlist' && _this.allowFiltering)) {\n _this.popupObj.element.classList.add('e-wide-popup');\n }\n _this.popupObj.element.classList.add(dropDownListClasses.device);\n if (_this.getModuleName() === 'dropdownlist' || (_this.getModuleName() === 'combobox'\n && !_this.allowFiltering && _this.isDropDownClick)) {\n _this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n if (_this.isFilterLayout()) {\n _this.popupObj.element.classList.add(dropDownListClasses.mobileFilter);\n _this.popupObj.position = { X: 0, Y: 0 };\n _this.popupObj.dataBind();\n attributes(_this.popupObj.element, { style: 'left:0px;right:0px;top:0px;bottom:0px;' });\n addClass([document.body, _this.popupObj.element], dropDownListClasses.popupFullScreen);\n _this.setSearchBoxPosition();\n _this.backIconElement = searchBox.container.querySelector('.e-back-icon');\n _this.clearIconElement = searchBox.container.querySelector('.' + dropDownListClasses.clearIcon);\n EventHandler.add(_this.backIconElement, 'click', _this.clickOnBackIcon, _this);\n EventHandler.add(_this.clearIconElement, 'click', _this.clearText, _this);\n }\n }\n popupEle.style.visibility = 'visible';\n addClass([popupEle], 'e-popup-close');\n var scrollParentElements = _this.popupObj.getScrollableParent(_this.inputWrapper.container);\n for (var _i = 0, scrollParentElements_1 = scrollParentElements; _i < scrollParentElements_1.length; _i++) {\n var element = scrollParentElements_1[_i];\n EventHandler.add(element, 'scroll', _this.scrollHandler, _this);\n }\n if (!isNullOrUndefined(_this.list)) {\n _this.unWireListEvents();\n _this.wireListEvents();\n }\n _this.selectedElementID = _this.selectedLI ? _this.selectedLI.id : null;\n if (_this.enableVirtualization) {\n _this.notify(\"bindScrollEvent\", {\n module: \"VirtualScroll\",\n component: _this.getModuleName(),\n enable: _this.enableVirtualization,\n });\n setTimeout(function () {\n if (_this.value || _this.list.querySelector('.e-active')) {\n _this.updateSelectionList();\n if (_this.selectedValueInfo && _this.viewPortInfo && _this.viewPortInfo.offsets.top) {\n _this.list.scrollTop = _this.viewPortInfo.offsets.top;\n }\n else {\n _this.scrollBottom(true, true);\n }\n }\n }, 5);\n }\n attributes(_this.targetElement(), { 'aria-expanded': 'true', 'aria-owns': _this.element.id + '_popup', 'aria-controls': _this.element.id });\n if (_this.getModuleName() !== 'dropdownlist' && _this.list.classList.contains('e-nodata')) {\n attributes(_this.targetElement(), { 'aria-activedescendant': 'no-record' });\n _this.popupContentElement.setAttribute('role', 'status');\n _this.popupContentElement.setAttribute('id', 'no-record');\n }\n _this.inputElement.setAttribute('aria-expanded', 'true');\n _this.inputElement.setAttribute('aria-controls', _this.element.id + '_popup');\n var inputParent = _this.isFiltering() ? _this.filterInput.parentElement : _this.inputWrapper.container;\n addClass([inputParent], [dropDownListClasses.inputFocus]);\n var animModel = { name: 'FadeIn', duration: 100 };\n _this.beforePopupOpen = true;\n var popupInstance = _this.popupObj;\n var eventArgs = { popup: popupInstance, event: e, cancel: false, animation: animModel };\n _this.trigger('open', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n if (!isNullOrUndefined(_this.inputWrapper)) {\n addClass([_this.inputWrapper.container], [dropDownListClasses.iconAnimation]);\n }\n _this.renderReactTemplates();\n if (!isNullOrUndefined(_this.popupObj)) {\n _this.popupObj.show(new Animation(eventArgs.animation), (_this.zIndex === 1000) ? _this.element : null);\n }\n }\n else {\n _this.beforePopupOpen = false;\n _this.destroyPopup();\n }\n });\n }\n else {\n _this.beforePopupOpen = false;\n }\n });\n };\n DropDownList.prototype.checkCollision = function (popupEle) {\n if (!Browser.isDevice || (Browser.isDevice && !(this.getModuleName() === 'dropdownlist' || this.isDropDownClick))) {\n var collision = isCollide(popupEle);\n if (collision.length > 0) {\n popupEle.style.marginTop = -parseInt(getComputedStyle(popupEle).marginTop, 10) + 'px';\n }\n this.popupObj.resolveCollision();\n }\n };\n DropDownList.prototype.getOffsetValue = function (popupEle) {\n var popupStyles = getComputedStyle(popupEle);\n var borderTop = parseInt(popupStyles.borderTopWidth, 10);\n var borderBottom = parseInt(popupStyles.borderBottomWidth, 10);\n return this.setPopupPosition(borderTop + borderBottom);\n };\n DropDownList.prototype.createPopup = function (element, offsetValue, left) {\n var _this = this;\n this.popupObj = new Popup(element, {\n width: this.setWidth(), targetType: 'relative',\n relateTo: this.inputWrapper.container,\n collision: this.enableRtl ? { X: 'fit', Y: 'flip' } : { X: 'flip', Y: 'flip' }, offsetY: offsetValue,\n enableRtl: this.enableRtl, offsetX: left,\n position: this.enableRtl ? { X: 'right', Y: 'bottom' } : { X: 'left', Y: 'bottom' },\n zIndex: this.zIndex,\n close: function () {\n if (!_this.isDocumentClick) {\n _this.focusDropDown();\n }\n // eslint-disable-next-line\n if (_this.isReact) {\n _this.clearTemplate(['headerTemplate', 'footerTemplate']);\n }\n _this.isNotSearchList = false;\n _this.isDocumentClick = false;\n _this.destroyPopup();\n if (_this.isFiltering() && _this.actionCompleteData.list && _this.actionCompleteData.list[0]) {\n _this.isActive = true;\n if (_this.enableVirtualization) {\n _this.onActionComplete(_this.ulElement, _this.listData, null, true);\n }\n else {\n _this.onActionComplete(_this.actionCompleteData.ulElement, _this.actionCompleteData.list, null, true);\n }\n }\n },\n open: function () {\n EventHandler.add(document, 'mousedown', _this.onDocumentClick, _this);\n _this.isPopupOpen = true;\n var actionList = _this.actionCompleteData && _this.actionCompleteData.ulElement &&\n _this.actionCompleteData.ulElement.querySelector('li');\n var ulElement = _this.list.querySelector('ul li');\n if (!isNullOrUndefined(_this.ulElement) && !isNullOrUndefined(_this.ulElement.getElementsByClassName('e-item-focus')[0])) {\n attributes(_this.targetElement(), { 'aria-activedescendant': _this.ulElement.getElementsByClassName('e-item-focus')[0].id });\n }\n else if (!isNullOrUndefined(_this.ulElement) && !isNullOrUndefined(_this.ulElement.getElementsByClassName('e-active')[0])) {\n attributes(_this.targetElement(), { 'aria-activedescendant': _this.ulElement.getElementsByClassName('e-active')[0].id });\n }\n if (_this.isFiltering() && _this.itemTemplate && (_this.element.tagName === _this.getNgDirective()) &&\n (actionList && ulElement && actionList.textContent !== ulElement.textContent) &&\n _this.element.tagName !== 'EJS-COMBOBOX') {\n _this.cloneElements();\n }\n if (_this.isFilterLayout()) {\n removeClass([_this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n _this.isFilterFocus = true;\n _this.filterInput.focus();\n if (_this.inputWrapper.clearButton) {\n addClass([_this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n _this.activeStateChange();\n },\n targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hidePopup();\n }\n }\n });\n };\n DropDownList.prototype.isEmptyList = function () {\n return !isNullOrUndefined(this.liCollections) && this.liCollections.length === 0;\n };\n DropDownList.prototype.getFocusElement = function () {\n // combo-box used this method\n };\n DropDownList.prototype.isFilterLayout = function () {\n return this.getModuleName() === 'dropdownlist' && this.allowFiltering;\n };\n DropDownList.prototype.scrollHandler = function () {\n if (Browser.isDevice && ((this.getModuleName() === 'dropdownlist' &&\n !this.isFilterLayout()) || (this.getModuleName() === 'combobox' && !this.allowFiltering && this.isDropDownClick))) {\n if (this.element && !(this.isElementInViewport(this.element))) {\n this.hidePopup();\n }\n }\n };\n DropDownList.prototype.isElementInViewport = function (element) {\n var elementRect = element.getBoundingClientRect();\n return (elementRect.top >= 0 && elementRect.left >= 0 && elementRect.bottom <= window.innerHeight && elementRect.right <= window.innerWidth);\n };\n ;\n DropDownList.prototype.setSearchBoxPosition = function () {\n var searchBoxHeight = this.filterInput.parentElement.getBoundingClientRect().height;\n this.popupObj.element.style.maxHeight = '100%';\n this.popupObj.element.style.width = '100%';\n this.list.style.maxHeight = (window.innerHeight - searchBoxHeight) + 'px';\n this.list.style.height = (window.innerHeight - searchBoxHeight) + 'px';\n var clearElement = this.filterInput.parentElement.querySelector('.' + dropDownListClasses.clearIcon);\n detach(this.filterInput);\n clearElement.parentElement.insertBefore(this.filterInput, clearElement);\n };\n DropDownList.prototype.setPopupPosition = function (border) {\n var offsetValue;\n var popupOffset = border;\n var selectedLI = this.list.querySelector('.' + dropDownListClasses.focus) || this.selectedLI;\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n var lastItem = this.isEmptyList() ? this.list : this.liCollections[this.getItems().length - 1];\n var liHeight = firstItem.getBoundingClientRect().height;\n this.listItemHeight = liHeight;\n var listHeight = this.list.offsetHeight / 2;\n var height = isNullOrUndefined(selectedLI) ? firstItem.offsetTop : selectedLI.offsetTop;\n var lastItemOffsetValue = lastItem.offsetTop;\n if (lastItemOffsetValue - listHeight < height && !isNullOrUndefined(this.liCollections) &&\n this.liCollections.length > 0 && !isNullOrUndefined(selectedLI)) {\n var count = this.list.offsetHeight / liHeight;\n var paddingBottom = parseInt(getComputedStyle(this.list).paddingBottom, 10);\n offsetValue = (count - (this.liCollections.length - this.activeIndex)) * liHeight - popupOffset + paddingBottom;\n this.list.scrollTop = selectedLI.offsetTop;\n }\n else if (height > listHeight && !this.enableVirtualization) {\n offsetValue = listHeight - liHeight / 2;\n this.list.scrollTop = height - listHeight + liHeight / 2;\n }\n else {\n offsetValue = height;\n }\n var inputHeight = this.inputWrapper.container.offsetHeight;\n offsetValue = offsetValue + liHeight + popupOffset - ((liHeight - inputHeight) / 2);\n return -offsetValue;\n };\n DropDownList.prototype.setWidth = function () {\n var width = formatUnit(this.popupWidth);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.inputWrapper.container.offsetWidth * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n if (Browser.isDevice && (width.indexOf('px') > -1) && (!this.allowFiltering && (this.getModuleName() === 'dropdownlist' ||\n (this.isDropDownClick && this.getModuleName() === 'combobox')))) {\n var firstItem = this.isEmptyList() ? this.list : this.liCollections[0];\n width = (parseInt(width, 10) + (parseInt(getComputedStyle(firstItem).textIndent, 10) -\n parseInt(getComputedStyle(this.inputElement).paddingLeft, 10) +\n parseInt(getComputedStyle(this.inputElement.parentElement).borderLeftWidth, 10)) * 2) + 'px';\n }\n return width;\n };\n DropDownList.prototype.scrollBottom = function (isInitial, isInitialSelection, keyAction) {\n var _this = this;\n if (isInitialSelection === void 0) { isInitialSelection = false; }\n if (keyAction === void 0) { keyAction = null; }\n if (isNullOrUndefined(this.selectedLI) && this.enableVirtualization) {\n this.selectedLI = this.list.querySelector('.' + dropDownBaseClasses.li);\n if (!isNullOrUndefined(this.selectedLI) && this.selectedLI.classList.contains('e-virtual-list')) {\n this.selectedLI = this.liCollections[this.skeletonCount];\n }\n }\n if (!isNullOrUndefined(this.selectedLI)) {\n this.isUpwardScrolling = false;\n var virtualListCount = this.list.querySelectorAll('.e-virtual-list').length;\n var lastElementValue = this.list.querySelector('li:last-of-type') ? this.list.querySelector('li:last-of-type').getAttribute('data-value') : null;\n var selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex ? this.selectedLI.offsetTop + (this.virtualListInfo.startIndex * this.selectedLI.offsetHeight) : this.selectedLI.offsetTop;\n var currentOffset = this.list.offsetHeight;\n var nextBottom = selectedLiOffsetTop - (virtualListCount * this.selectedLI.offsetHeight) + this.selectedLI.offsetHeight - this.list.scrollTop;\n var nextOffset = this.list.scrollTop + nextBottom - currentOffset;\n var isScrollerCHanged = false;\n var isScrollTopChanged = false;\n nextOffset = isInitial ? nextOffset + parseInt(getComputedStyle(this.list).paddingTop, 10) * 2 : nextOffset + parseInt(getComputedStyle(this.list).paddingTop, 10);\n var boxRange = selectedLiOffsetTop - (virtualListCount * this.selectedLI.offsetHeight) + this.selectedLI.offsetHeight - this.list.scrollTop;\n boxRange = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n boxRange - this.fixedHeaderElement.offsetHeight : boxRange;\n if (this.activeIndex === 0 && !this.enableVirtualization) {\n this.list.scrollTop = 0;\n isScrollerCHanged = this.isKeyBoardAction;\n }\n else if (nextBottom > currentOffset || !(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n var currentElementValue = this.selectedLI ? this.selectedLI.getAttribute('data-value') : null;\n var liCount = keyAction == \"pageDown\" ? this.getPageCount() - 2 : 1;\n if (!this.enableVirtualization || this.isKeyBoardAction || isInitialSelection) {\n if (this.isKeyBoardAction && this.enableVirtualization && lastElementValue && currentElementValue === lastElementValue && keyAction != \"end\" && !this.isVirtualScrolling) {\n this.isPreventKeyAction = true;\n if (this.enableVirtualization && this.itemTemplate) {\n this.list.scrollTop += nextOffset;\n }\n else {\n if (this.enableVirtualization) {\n liCount = keyAction == \"pageDown\" ? this.getPageCount() + 1 : liCount;\n }\n this.list.scrollTop += this.selectedLI.offsetHeight * liCount;\n }\n this.isPreventKeyAction = this.IsScrollerAtEnd() ? false : this.isPreventKeyAction;\n this.isKeyBoardAction = false;\n this.isPreventScrollAction = false;\n }\n else if (this.enableVirtualization && keyAction == \"end\") {\n this.isPreventKeyAction = false;\n this.isKeyBoardAction = false;\n this.isPreventScrollAction = false;\n this.list.scrollTop = this.list.scrollHeight;\n }\n else {\n if (keyAction == \"pageDown\" && this.enableVirtualization && !this.isVirtualScrolling) {\n this.isPreventKeyAction = false;\n this.isKeyBoardAction = false;\n this.isPreventScrollAction = false;\n }\n this.list.scrollTop = nextOffset;\n }\n }\n else {\n this.list.scrollTop = this.virtualListInfo && this.virtualListInfo.startIndex ? this.virtualListInfo.startIndex * this.listItemHeight : 0;\n }\n isScrollerCHanged = this.isKeyBoardAction;\n isScrollTopChanged = true;\n }\n this.isKeyBoardAction = isScrollerCHanged;\n if (this.enableVirtualization && this.fields.groupBy && this.fixedHeaderElement && (keyAction == \"down\")) {\n setTimeout(function () {\n _this.scrollStop(null, true);\n }, 100);\n }\n }\n };\n DropDownList.prototype.scrollTop = function (keyAction) {\n if (keyAction === void 0) { keyAction = null; }\n if (!isNullOrUndefined(this.selectedLI)) {\n var virtualListCount = this.list.querySelectorAll('.e-virtual-list').length;\n var selectedLiOffsetTop = (this.virtualListInfo && this.virtualListInfo.startIndex) ? this.selectedLI.offsetTop + (this.virtualListInfo.startIndex * this.selectedLI.offsetHeight) : this.selectedLI.offsetTop;\n var nextOffset = selectedLiOffsetTop - (virtualListCount * this.selectedLI.offsetHeight) - this.list.scrollTop;\n var firstElementValue = this.list.querySelector('li.e-list-item:not(.e-virtual-list)') ? this.list.querySelector('li.e-list-item:not(.e-virtual-list)').getAttribute('data-value') : null;\n nextOffset = this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n nextOffset - this.fixedHeaderElement.offsetHeight : nextOffset;\n var boxRange = (selectedLiOffsetTop - (virtualListCount * this.selectedLI.offsetHeight) + this.selectedLI.offsetHeight - this.list.scrollTop);\n var isPageUpKeyAction = this.enableVirtualization && this.getModuleName() === 'autocomplete' && nextOffset <= 0;\n if (this.activeIndex === 0 && !this.enableVirtualization) {\n this.list.scrollTop = 0;\n }\n else if (nextOffset < 0 || isPageUpKeyAction) {\n var currentElementValue = this.selectedLI ? this.selectedLI.getAttribute('data-value') : null;\n var liCount = keyAction == \"pageUp\" ? this.getPageCount() - 2 : 1;\n if (this.enableVirtualization) {\n liCount = keyAction == \"pageUp\" ? this.getPageCount() : liCount;\n }\n if (this.enableVirtualization && this.isKeyBoardAction && firstElementValue && currentElementValue === firstElementValue && keyAction != \"home\" && !this.isVirtualScrolling) {\n this.isUpwardScrolling = true;\n this.isPreventKeyAction = true;\n this.list.scrollTop -= this.selectedLI.offsetHeight * liCount;\n this.isPreventKeyAction = this.list.scrollTop != 0 ? this.isPreventKeyAction : false;\n this.isKeyBoardAction = false;\n this.isPreventScrollAction = false;\n }\n else if (this.enableVirtualization && keyAction == \"home\") {\n this.isPreventScrollAction = false;\n this.isPreventKeyAction = true;\n this.isKeyBoardAction = false;\n this.list.scrollTo(0, 0);\n }\n else {\n if (keyAction == \"pageUp\" && this.enableVirtualization && !this.isVirtualScrolling) {\n this.isPreventKeyAction = false;\n this.isKeyBoardAction = false;\n this.isPreventScrollAction = false;\n }\n this.list.scrollTop = this.list.scrollTop + nextOffset;\n }\n }\n else if (!(boxRange > 0 && this.list.offsetHeight > boxRange)) {\n this.list.scrollTop = this.selectedLI.offsetTop - (this.fields.groupBy && !isNullOrUndefined(this.fixedHeaderElement) ?\n this.fixedHeaderElement.offsetHeight : 0);\n }\n }\n };\n DropDownList.prototype.isEditTextBox = function () {\n return false;\n };\n DropDownList.prototype.isFiltering = function () {\n return this.allowFiltering;\n };\n DropDownList.prototype.isPopupButton = function () {\n return true;\n };\n DropDownList.prototype.setScrollPosition = function (e) {\n this.isPreventScrollAction = true;\n if (!isNullOrUndefined(e)) {\n switch (e.action) {\n case 'pageDown':\n case 'down':\n case 'end':\n this.isKeyBoardAction = true;\n this.scrollBottom(false, false, e.action);\n break;\n default:\n this.isKeyBoardAction = e.action == 'up' || e.action == 'pageUp' || e.action == 'open';\n this.scrollTop(e.action);\n break;\n }\n }\n else {\n this.scrollBottom(true);\n }\n this.isKeyBoardAction = false;\n };\n DropDownList.prototype.clearText = function () {\n this.filterInput.value = this.typedString = '';\n this.searchLists(null);\n if (this.enableVirtualization) {\n this.list.scrollTop = 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.totalItemCount = this.dataCount = this.dataSource && this.dataSource.length ? this.dataSource.length : 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.list.getElementsByClassName('e-virtual-ddl')[0]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl')[0].style = this.GetVirtualTrackHeight();\n }\n this.getSkeletonCount();\n this.UpdateSkeleton();\n this.liCollections = this.list.querySelectorAll('.e-list-item');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.list.getElementsByClassName('e-virtual-ddl-content')[0]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n }\n }\n };\n DropDownList.prototype.setEleWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n DropDownList.prototype.closePopup = function (delay, e) {\n var _this = this;\n var isFilterValue = !isNullOrUndefined(this.filterInput) && !isNullOrUndefined(this.filterInput.value) && this.filterInput.value !== '';\n var typedString = this.getModuleName() === 'combobox' ? this.typedString : null;\n this.isTyped = false;\n this.isVirtualTrackHeight = false;\n if (!(this.popupObj && document.body.contains(this.popupObj.element) && this.beforePopupOpen)) {\n return;\n }\n this.keyboardEvent = null;\n EventHandler.remove(document, 'mousedown', this.onDocumentClick);\n this.isActive = false;\n if (this.getModuleName() === 'dropdownlist') {\n Input.destroy({\n element: this.filterInput,\n floatLabelType: this.floatLabelType,\n properties: { placeholder: this.filterBarPlaceholder },\n buttons: this.clearIconElement,\n }, this.clearIconElement);\n }\n this.filterInputObj = null;\n this.isDropDownClick = false;\n this.preventAutoFill = false;\n var scrollableParentElements = this.popupObj.getScrollableParent(this.inputWrapper.container);\n for (var _i = 0, scrollableParentElements_1 = scrollableParentElements; _i < scrollableParentElements_1.length; _i++) {\n var element = scrollableParentElements_1[_i];\n EventHandler.remove(element, 'scroll', this.scrollHandler);\n }\n if (Browser.isDevice && this.isFilterLayout()) {\n removeClass([document.body, this.popupObj.element], dropDownListClasses.popupFullScreen);\n }\n if (this.isFilterLayout()) {\n if (!Browser.isDevice) {\n this.searchKeyModule.destroy();\n if (this.clearIconElement) {\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n }\n if (this.backIconElement) {\n EventHandler.remove(this.backIconElement, 'click', this.clickOnBackIcon);\n EventHandler.remove(this.clearIconElement, 'click', this.clearText);\n }\n if (!isNullOrUndefined(this.filterInput)) {\n EventHandler.remove(this.filterInput, 'input', this.onInput);\n EventHandler.remove(this.filterInput, 'keyup', this.onFilterUp);\n EventHandler.remove(this.filterInput, 'keydown', this.onFilterDown);\n EventHandler.remove(this.filterInput, 'blur', this.onBlurHandler);\n EventHandler.remove(this.filterInput, 'paste', this.pasteHandler);\n }\n if (this.allowFiltering && this.getModuleName() === 'dropdownlist') {\n this.filterInput.removeAttribute('aria-activedescendant');\n this.filterInput.removeAttribute('aria-disabled');\n this.filterInput.removeAttribute('role');\n this.filterInput.removeAttribute('autocomplete');\n this.filterInput.removeAttribute('autocapitalize');\n this.filterInput.removeAttribute('spellcheck');\n }\n this.filterInput = null;\n }\n attributes(this.targetElement(), { 'aria-expanded': 'false' });\n this.inputElement.setAttribute('aria-expanded', 'false');\n this.targetElement().removeAttribute('aria-owns');\n this.targetElement().removeAttribute('aria-activedescendant');\n this.inputWrapper.container.classList.remove(dropDownListClasses.iconAnimation);\n if (this.isFiltering()) {\n this.actionCompleteData.isUpdated = false;\n }\n if (this.enableVirtualization) {\n if ((this.value == null || this.isTyped)) {\n this.viewPortInfo.endIndex = this.viewPortInfo && this.viewPortInfo.endIndex > 0 ? this.viewPortInfo.endIndex : this.itemCount;\n if (this.getModuleName() === 'autocomplete' || (this.getModuleName() === 'dropdownlist' && !isNullOrUndefined(this.typedString) && this.typedString != \"\") || (this.getModuleName() === 'combobox' && this.allowFiltering && !isNullOrUndefined(this.typedString) && this.typedString != \"\")) {\n this.checkAndResetCache();\n }\n }\n else if (this.getModuleName() === 'autocomplete') {\n this.checkAndResetCache();\n }\n if ((this.getModuleName() === 'dropdownlist' || this.getModuleName() === 'combobox') && !(this.skeletonCount == 0)) {\n this.getSkeletonCount(true);\n }\n }\n this.beforePopupOpen = false;\n var animModel = {\n name: 'FadeOut',\n duration: 100,\n delay: delay ? delay : 0\n };\n var popupInstance = this.popupObj;\n var eventArgs = { popup: popupInstance, cancel: false, animation: animModel, event: e || null };\n this.trigger('close', eventArgs, function (eventArgs) {\n if (!isNullOrUndefined(_this.popupObj) &&\n !isNullOrUndefined(_this.popupObj.element.querySelector('.e-fixed-head'))) {\n var fixedHeader = _this.popupObj.element.querySelector('.e-fixed-head');\n fixedHeader.parentNode.removeChild(fixedHeader);\n _this.fixedHeaderElement = null;\n }\n if (!eventArgs.cancel) {\n if (_this.getModuleName() === 'autocomplete') {\n _this.rippleFun();\n }\n if (_this.isPopupOpen) {\n _this.popupObj.hide(new Animation(eventArgs.animation));\n }\n else {\n _this.destroyPopup();\n }\n }\n });\n if (Browser.isDevice && !eventArgs.cancel && this.popupObj.element.classList.contains('e-wide-popup')) {\n this.popupObj.element.classList.remove('e-wide-popup');\n }\n var dataSourceCount;\n if (this.dataSource instanceof DataManager) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n dataSourceCount = this.virtualGroupDataSource && this.virtualGroupDataSource.length ? this.virtualGroupDataSource.length : 0;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n dataSourceCount = this.dataSource && this.dataSource.length ? this.dataSource.length : 0;\n }\n if (this.enableVirtualization && this.isFiltering() && isFilterValue && this.totalItemCount !== dataSourceCount) {\n this.updateInitialData();\n this.checkAndResetCache();\n }\n };\n DropDownList.prototype.updateInitialData = function () {\n var currentData = this.selectData;\n var ulElement = this.renderItems(currentData, this.fields);\n this.list.scrollTop = 0;\n this.virtualListInfo = {\n currentPageNumber: null,\n direction: null,\n sentinelInfo: {},\n offsets: {},\n startIndex: 0,\n endIndex: this.itemCount,\n };\n if (this.getModuleName() === 'combobox') {\n this.typedString = \"\";\n }\n this.previousStartIndex = 0;\n this.previousEndIndex = 0;\n if (this.dataSource instanceof DataManager) {\n if (this.remoteDataCount >= 0) {\n this.totalItemCount = this.dataCount = this.remoteDataCount;\n }\n else {\n this.resetList(this.dataSource);\n }\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.totalItemCount = this.dataCount = this.dataSource && this.dataSource.length ? this.dataSource.length : 0;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.list.getElementsByClassName('e-virtual-ddl')[0]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl')[0].style = this.GetVirtualTrackHeight();\n }\n if (this.getModuleName() !== 'autocomplete' && this.totalItemCount != 0 && this.totalItemCount > (this.itemCount * 2)) {\n this.getSkeletonCount();\n }\n this.UpdateSkeleton();\n this.listData = currentData;\n this.updateActionCompleteDataValues(ulElement, currentData);\n this.liCollections = this.list.querySelectorAll('.e-list-item');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.list.getElementsByClassName('e-virtual-ddl-content')[0]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n }\n };\n DropDownList.prototype.destroyPopup = function () {\n this.isPopupOpen = false;\n this.isFilterFocus = false;\n this.inputElement.removeAttribute('aria-controls');\n if (this.popupObj) {\n this.popupObj.destroy();\n detach(this.popupObj.element);\n }\n };\n DropDownList.prototype.clickOnBackIcon = function () {\n this.hidePopup();\n this.focusIn();\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n DropDownList.prototype.render = function () {\n this.preselectedIndex = !isNullOrUndefined(this.index) ? this.index : null;\n if (this.element.tagName === 'INPUT') {\n this.inputElement = this.element;\n if (isNullOrUndefined(this.inputElement.getAttribute('role'))) {\n this.inputElement.setAttribute('role', 'combobox');\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('type'))) {\n this.inputElement.setAttribute('type', 'text');\n }\n this.inputElement.setAttribute('aria-expanded', 'false');\n }\n else {\n this.inputElement = this.createElement('input', { attrs: { role: 'combobox', type: 'text' } });\n if (this.element.tagName !== this.getNgDirective()) {\n this.element.style.display = 'none';\n }\n this.element.parentElement.insertBefore(this.inputElement, this.element);\n this.preventTabIndex(this.inputElement);\n }\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n buttons: this.isPopupButton() ? [dropDownListClasses.icon] : null,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.getModuleName() === 'dropdownlist' ? true : this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n if (this.element.tagName === this.getNgDirective()) {\n this.element.appendChild(this.inputWrapper.container);\n }\n else {\n this.inputElement.parentElement.insertBefore(this.element, this.inputElement);\n }\n this.hiddenElement = this.createElement('select', {\n attrs: { 'aria-hidden': 'true', 'aria-label': this.getModuleName(), 'tabindex': '-1', 'class': dropDownListClasses.hiddenElement }\n });\n prepend([this.hiddenElement], this.inputWrapper.container);\n this.validationAttribute(this.element, this.hiddenElement);\n this.setReadOnly();\n this.setFields();\n this.inputWrapper.container.style.width = formatUnit(this.width);\n this.inputWrapper.container.classList.add('e-ddl');\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && this.inputWrapper.container.getElementsByClassName('e-float-text-content')[0] && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-content')[0].classList.add('e-icon');\n }\n this.wireEvent();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n var id = this.element.getAttribute('id') ? this.element.getAttribute('id') : getUniqueID('ej2_dropdownlist');\n this.element.id = id;\n this.hiddenElement.id = id + '_hidden';\n this.targetElement().setAttribute('tabindex', this.tabIndex);\n if ((this.getModuleName() === 'autocomplete' || this.getModuleName() === 'combobox') && !this.readonly) {\n this.inputElement.setAttribute('aria-label', this.getModuleName());\n }\n else if (this.getModuleName() === 'dropdownlist') {\n attributes(this.targetElement(), { 'aria-label': this.getModuleName() });\n this.inputElement.setAttribute('aria-label', this.getModuleName());\n this.inputElement.setAttribute('aria-expanded', 'false');\n }\n attributes(this.targetElement(), this.getAriaAttributes());\n this.updateDataAttribute(this.htmlAttributes);\n this.setHTMLAttributes();\n if (this.targetElement() === this.inputElement) {\n this.inputElement.removeAttribute('aria-labelledby');\n }\n if (this.value !== null || this.activeIndex !== null || this.text !== null) {\n if (this.enableVirtualization) {\n this.listItemHeight = this.getListHeight();\n this.getSkeletonCount();\n this.updateVirtualizationProperties(this.itemCount, this.allowFiltering);\n if (this.index !== null) {\n this.activeIndex = this.index + this.skeletonCount;\n }\n }\n this.initValue();\n this.selectedValueInfo = this.viewPortInfo;\n if (this.enableVirtualization) {\n this.activeIndex = this.activeIndex + this.skeletonCount;\n }\n }\n else if (this.element.tagName === 'SELECT' && this.element.options[0]) {\n var selectElement = this.element;\n this.value = this.allowObjectBinding ? this.getDataByValue(selectElement.options[selectElement.selectedIndex].value) : selectElement.options[selectElement.selectedIndex].value;\n this.text = isNullOrUndefined(this.value) ? null : selectElement.options[selectElement.selectedIndex].textContent;\n this.initValue();\n }\n this.setEnabled();\n this.preventTabIndex(this.element);\n if (!this.enabled) {\n this.targetElement().tabIndex = -1;\n }\n this.initial = false;\n this.element.style.opacity = '';\n this.inputElement.onselect = function (e) {\n e.stopImmediatePropagation();\n };\n this.inputElement.onchange = function (e) {\n e.stopImmediatePropagation();\n };\n if (this.element.hasAttribute('autofocus')) {\n this.focusIn();\n }\n if (!isNullOrUndefined(this.text)) {\n this.inputElement.setAttribute('value', this.text);\n }\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n var floatLabelElement = this.inputWrapper.container.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(this.element.id) && this.element.id !== '' && !isNullOrUndefined(floatLabelElement)) {\n floatLabelElement.id = 'label_' + this.element.id.replace(/ /g, '_');\n attributes(this.inputElement, { 'aria-labelledby': floatLabelElement.id });\n }\n this.renderComplete();\n this.listItemHeight = this.getListHeight();\n this.getSkeletonCount();\n if (this.enableVirtualization) {\n this.updateVirtualizationProperties(this.itemCount, this.allowFiltering);\n }\n this.viewPortInfo.startIndex = this.virtualItemStartIndex = 0;\n this.viewPortInfo.endIndex = this.virtualItemEndIndex = this.viewPortInfo.startIndex > 0 ? this.viewPortInfo.endIndex : this.itemCount;\n };\n DropDownList.prototype.getListHeight = function () {\n var listParent = this.createElement('div', {\n className: 'e-dropdownbase'\n });\n var item = this.createElement('li', {\n className: 'e-list-item'\n });\n var listParentHeight = formatUnit(this.popupHeight);\n listParent.style.height = (parseInt(listParentHeight, 10)).toString() + 'px';\n listParent.appendChild(item);\n document.body.appendChild(listParent);\n this.virtualListHeight = listParent.getBoundingClientRect().height;\n var listItemHeight = Math.ceil(item.getBoundingClientRect().height);\n listParent.remove();\n return listItemHeight;\n };\n DropDownList.prototype.setFooterTemplate = function (popupEle) {\n var compiledString;\n if (this.footer) {\n if (this.isReact && typeof this.footerTemplate === 'function') {\n this.clearTemplate(['footerTemplate']);\n }\n else {\n this.footer.innerHTML = '';\n }\n }\n else {\n this.footer = this.createElement('div');\n addClass([this.footer], dropDownListClasses.footer);\n }\n var footercheck = this.dropdownCompiler(this.footerTemplate);\n if (typeof this.footerTemplate !== 'function' && footercheck) {\n compiledString = compile(select(this.footerTemplate, document).innerHTML.trim());\n }\n else {\n compiledString = compile(this.footerTemplate);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var footerCompTemp = compiledString({}, this, 'footerTemplate', this.footerTemplateId, this.isStringTemplate, null, this.footer);\n if (footerCompTemp && footerCompTemp.length > 0) {\n append(footerCompTemp, this.footer);\n }\n append([this.footer], popupEle);\n };\n DropDownList.prototype.setHeaderTemplate = function (popupEle) {\n var compiledString;\n if (this.header) {\n this.header.innerHTML = '';\n }\n else {\n this.header = this.createElement('div');\n addClass([this.header], dropDownListClasses.header);\n }\n var headercheck = this.dropdownCompiler(this.headerTemplate);\n if (typeof this.headerTemplate !== 'function' && headercheck) {\n compiledString = compile(select(this.headerTemplate, document).innerHTML.trim());\n }\n else {\n compiledString = compile(this.headerTemplate);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var headerCompTemp = compiledString({}, this, 'headerTemplate', this.headerTemplateId, this.isStringTemplate, null, this.header);\n if (headerCompTemp && headerCompTemp.length) {\n append(headerCompTemp, this.header);\n }\n var contentEle = popupEle.querySelector('div.e-content');\n popupEle.insertBefore(this.header, contentEle);\n };\n /**\n * Sets the enabled state to DropDownBase.\n *\n * @returns {void}\n */\n DropDownList.prototype.setEnabled = function () {\n this.element.setAttribute('aria-disabled', (this.enabled) ? 'false' : 'true');\n };\n DropDownList.prototype.setOldText = function (text) {\n this.text = text;\n };\n DropDownList.prototype.setOldValue = function (value) {\n this.value = value;\n };\n DropDownList.prototype.refreshPopup = function () {\n if (!isNullOrUndefined(this.popupObj) && document.body.contains(this.popupObj.element) &&\n ((this.allowFiltering && !(Browser.isDevice && this.isFilterLayout())) || this.getModuleName() === 'autocomplete')) {\n removeClass([this.popupObj.element], 'e-popup-close');\n this.popupObj.refreshPosition(this.inputWrapper.container);\n this.popupObj.resolveCollision();\n }\n };\n DropDownList.prototype.checkData = function (newProp) {\n if (newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource)) && this.itemTemplate && this.allowFiltering &&\n !(this.isListSearched && (newProp.dataSource instanceof DataManager))) {\n if (this.list) {\n this.list.innerHTML = '';\n }\n this.actionCompleteData = { ulElement: null, list: null, isUpdated: false };\n }\n this.isListSearched = false;\n var isChangeValue = Object.keys(newProp).indexOf('value') !== -1 && isNullOrUndefined(newProp.value);\n var isChangeText = Object.keys(newProp).indexOf('text') !== -1 && isNullOrUndefined(newProp.text);\n if (this.getModuleName() !== 'autocomplete' && this.allowFiltering && (isChangeValue || isChangeText)) {\n this.itemData = null;\n }\n if (this.allowFiltering && newProp.dataSource && !isNullOrUndefined(Object.keys(newProp.dataSource))) {\n this.actionCompleteData = { ulElement: null, list: null, isUpdated: false };\n this.actionData = this.actionCompleteData;\n }\n else if (this.allowFiltering && newProp.query && !isNullOrUndefined(Object.keys(newProp.query))) {\n this.actionCompleteData = this.getModuleName() === 'combobox' ?\n { ulElement: null, list: null, isUpdated: false } : this.actionCompleteData;\n this.actionData = this.actionCompleteData;\n }\n };\n DropDownList.prototype.updateDataSource = function (props, oldProps) {\n if (this.inputElement.value !== '' || (!isNullOrUndefined(props) && (isNullOrUndefined(props.dataSource)\n || (!(props.dataSource instanceof DataManager) && props.dataSource.length === 0)))) {\n this.clearAll(null, props);\n }\n if ((this.fields.groupBy && props.fields) && !this.isGroupChecking && this.list) {\n EventHandler.remove(this.list, 'scroll', this.setFloatingHeader);\n EventHandler.add(this.list, 'scroll', this.setFloatingHeader, this);\n }\n if (!(!isNullOrUndefined(props) && (isNullOrUndefined(props.dataSource)\n || (!(props.dataSource instanceof DataManager) && props.dataSource.length === 0))) || ((props.dataSource instanceof DataManager) || (!isNullOrUndefined(props) && Array.isArray(props.dataSource) && !isNullOrUndefined(oldProps) && Array.isArray(oldProps.dataSource) && props.dataSource.length !== oldProps.dataSource.length))) {\n this.typedString = '';\n this.resetList(this.dataSource);\n }\n if (!this.isCustomFilter && !this.isFilterFocus && document.activeElement !== this.filterInput) {\n this.checkCustomValue();\n }\n };\n DropDownList.prototype.checkCustomValue = function () {\n var currentValue = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n this.itemData = this.getDataByValue(currentValue);\n var dataItem = this.getItemData();\n var value = this.allowObjectBinding ? this.itemData : dataItem.value;\n var index = isNullOrUndefined(value) ? null : this.index;\n if (isNullOrUndefined(index) && (currentValue == value)) {\n this.setProperties({ 'text': dataItem.text, 'value': value });\n }\n else {\n this.setProperties({ 'text': dataItem.text, 'index': index, 'value': value });\n }\n };\n DropDownList.prototype.updateInputFields = function () {\n if (this.getModuleName() === 'dropdownlist') {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n };\n /**\n * Dynamically change the value of properties.\n *\n * @private\n * @param {DropDownListModel} newProp - Returns the dynamic property value of the component.\n * @param {DropDownListModel} oldProp - Returns the previous previous value of the component.\n * @returns {void}\n */\n DropDownList.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!isNullOrUndefined(newProp.dataSource) && !this.isTouched && (isNullOrUndefined(newProp.value) && isNullOrUndefined(newProp.index)) && !isNullOrUndefined(this.preselectedIndex) && !isNullOrUndefined(this.index)) {\n newProp.index = this.index;\n }\n if (!isNullOrUndefined(newProp.value) || !isNullOrUndefined(newProp.index)) {\n this.isTouched = true;\n }\n if (this.getModuleName() === 'dropdownlist') {\n this.checkData(newProp);\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'query':\n case 'dataSource':\n this_1.getSkeletonCount();\n this_1.checkAndResetCache();\n break;\n case 'htmlAttributes':\n this_1.setHTMLAttributes();\n break;\n case 'width':\n this_1.setEleWidth(newProp.width);\n Input.calculateWidth(this_1.inputElement, this_1.inputWrapper.container);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this_1.inputElement);\n break;\n case 'filterBarPlaceholder':\n if (this_1.filterInput) {\n Input.setPlaceholder(newProp.filterBarPlaceholder, this_1.filterInput);\n }\n break;\n case 'readonly':\n if (this_1.getModuleName() !== 'dropdownlist') {\n Input.setReadonly(newProp.readonly, this_1.inputElement);\n }\n this_1.setReadOnly();\n break;\n case 'cssClass':\n this_1.setCssClass(newProp.cssClass, oldProp.cssClass);\n Input.calculateWidth(this_1.inputElement, this_1.inputWrapper.container);\n break;\n case 'enableRtl':\n this_1.setEnableRtl();\n break;\n case 'enabled':\n this_1.setEnable();\n break;\n case 'text':\n if (this_1.fields.disabled) {\n newProp.text = newProp.text && !this_1.isDisabledItemByIndex(this_1.getIndexByValue(this_1.getValueByText(newProp.text)))\n ? newProp.text : null;\n }\n if (newProp.text === null) {\n this_1.clearAll();\n break;\n }\n if (this_1.enableVirtualization) {\n this_1.updateValues();\n this_1.updateInputFields();\n this_1.notify(\"setCurrentViewDataAsync\", {\n module: \"VirtualScroll\",\n });\n break;\n }\n if (!this_1.list) {\n if (this_1.dataSource instanceof DataManager) {\n this_1.initialRemoteRender = true;\n }\n this_1.renderList();\n }\n if (!this_1.initialRemoteRender) {\n var li = this_1.getElementByText(newProp.text);\n if (!this_1.checkValidLi(li)) {\n if (this_1.liCollections && this_1.liCollections.length === 100 &&\n this_1.getModuleName() === 'autocomplete' && this_1.listData.length > 100) {\n this_1.setSelectionData(newProp.text, oldProp.text, 'text');\n }\n else if (newProp.text && this_1.dataSource instanceof DataManager) {\n var listLength_1 = this_1.getItems().length;\n var checkField = isNullOrUndefined(this_1.fields.text) ? this_1.fields.value : this_1.fields.text;\n this_1.typedString = '';\n this_1.dataSource.executeQuery(this_1.getQuery(this_1.query).where(new Predicate(checkField, 'equal', newProp.text)))\n .then(function (e) {\n if (e.result.length > 0) {\n _this.addItem(e.result, listLength_1);\n _this.updateValues();\n }\n else {\n _this.setOldText(oldProp.text);\n }\n });\n }\n else if (this_1.getModuleName() === 'autocomplete') {\n this_1.setInputValue(newProp, oldProp);\n }\n else {\n this_1.setOldText(oldProp.text);\n }\n }\n this_1.updateInputFields();\n }\n break;\n case 'value':\n if (this_1.fields.disabled) {\n newProp.value = newProp.value != null && !this_1.isDisableItemValue(newProp.value) ? newProp.value : null;\n }\n if (newProp.value === null) {\n this_1.clearAll();\n break;\n }\n if (this_1.allowObjectBinding && !isNullOrUndefined(newProp.value) && !isNullOrUndefined(oldProp.value) && this_1.isObjectInArray(newProp.value, [oldProp.value])) {\n return { value: void 0 };\n }\n if (this_1.enableVirtualization) {\n this_1.updateValues();\n this_1.updateInputFields();\n this_1.notify(\"setCurrentViewDataAsync\", {\n module: \"VirtualScroll\",\n });\n this_1.preventChange = this_1.isAngular && this_1.preventChange ? !this_1.preventChange : this_1.preventChange;\n break;\n }\n this_1.notify('beforeValueChange', { newProp: newProp }); // gird component value type change\n if (!this_1.list) {\n if (this_1.dataSource instanceof DataManager) {\n this_1.initialRemoteRender = true;\n }\n this_1.renderList();\n }\n if (!this_1.initialRemoteRender) {\n var value = this_1.allowObjectBinding && !isNullOrUndefined(newProp.value) ? getValue((this_1.fields.value) ? this_1.fields.value : '', newProp.value) : newProp.value;\n var item = this_1.getElementByValue(value);\n if (!this_1.checkValidLi(item)) {\n if (this_1.liCollections && this_1.liCollections.length === 100 &&\n this_1.getModuleName() === 'autocomplete' && this_1.listData.length > 100) {\n this_1.setSelectionData(newProp.value, oldProp.value, 'value');\n }\n else if (newProp.value && this_1.dataSource instanceof DataManager) {\n var listLength_2 = this_1.getItems().length;\n var checkField = isNullOrUndefined(this_1.fields.value) ? this_1.fields.text : this_1.fields.value;\n this_1.typedString = '';\n var value_7 = this_1.allowObjectBinding && !isNullOrUndefined(newProp.value) ? getValue(checkField, newProp.value) : newProp.value;\n this_1.dataSource.executeQuery(this_1.getQuery(this_1.query).where(new Predicate(checkField, 'equal', value_7)))\n .then(function (e) {\n if (e.result.length > 0) {\n _this.addItem(e.result, listLength_2);\n _this.updateValues();\n }\n else {\n _this.setOldValue(oldProp.value);\n }\n });\n }\n else if (this_1.getModuleName() === 'autocomplete') {\n this_1.setInputValue(newProp, oldProp);\n }\n else {\n this_1.setOldValue(oldProp.value);\n }\n }\n this_1.updateInputFields();\n this_1.preventChange = this_1.isAngular && this_1.preventChange ? !this_1.preventChange : this_1.preventChange;\n }\n break;\n case 'index':\n if (this_1.fields.disabled) {\n newProp.index = newProp.index != null && !this_1.isDisabledItemByIndex(newProp.index) ? newProp.index : null;\n }\n if (newProp.index === null) {\n this_1.clearAll();\n break;\n }\n if (!this_1.list) {\n if (this_1.dataSource instanceof DataManager) {\n this_1.initialRemoteRender = true;\n }\n this_1.renderList();\n }\n if (!this_1.initialRemoteRender && this_1.liCollections) {\n var element = this_1.liCollections[newProp.index];\n if (!this_1.checkValidLi(element)) {\n if (this_1.liCollections && this_1.liCollections.length === 100 &&\n this_1.getModuleName() === 'autocomplete' && this_1.listData.length > 100) {\n this_1.setSelectionData(newProp.index, oldProp.index, 'index');\n }\n else {\n this_1.index = oldProp.index;\n }\n }\n this_1.updateInputFields();\n }\n break;\n case 'footerTemplate':\n if (this_1.popupObj) {\n this_1.setFooterTemplate(this_1.popupObj.element);\n }\n break;\n case 'headerTemplate':\n if (this_1.popupObj) {\n this_1.setHeaderTemplate(this_1.popupObj.element);\n }\n break;\n case 'valueTemplate':\n if (!isNullOrUndefined(this_1.itemData) && this_1.valueTemplate !== null) {\n this_1.setValueTemplate();\n }\n break;\n case 'allowFiltering':\n if (this_1.allowFiltering) {\n this_1.actionCompleteData = {\n ulElement: this_1.ulElement,\n list: this_1.listData, isUpdated: true\n };\n this_1.actionData = this_1.actionCompleteData;\n this_1.updateSelectElementData(this_1.allowFiltering);\n }\n break;\n case 'floatLabelType':\n Input.removeFloating(this_1.inputWrapper);\n Input.addFloating(this_1.inputElement, newProp.floatLabelType, this_1.placeholder, this_1.createElement);\n if (!isNullOrUndefined(this_1.inputWrapper.buttons[0]) && this_1.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0] && this_1.floatLabelType !== 'Never') {\n this_1.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'showClearButton':\n if (!this_1.inputWrapper.clearButton) {\n Input.setClearButton(newProp.showClearButton, this_1.inputElement, this_1.inputWrapper, null, this_1.createElement);\n this_1.bindClearEvent();\n }\n break;\n default:\n {\n // eslint-disable-next-line max-len\n var ddlProps = this_1.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this_1, ddlProps.newProperty, ddlProps.oldProperty);\n }\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var state_1 = _loop_1(prop);\n if (typeof state_1 === \"object\")\n return state_1.value;\n }\n };\n DropDownList.prototype.checkValidLi = function (element) {\n if (this.isValidLI(element)) {\n this.setSelection(element, null);\n return true;\n }\n return false;\n };\n DropDownList.prototype.setSelectionData = function (newProp, oldProp, prop) {\n var _this = this;\n var li;\n this.updateListValues = function () {\n if (prop === 'text') {\n li = _this.getElementByText(newProp);\n if (!_this.checkValidLi(li)) {\n _this.setOldText(oldProp);\n }\n }\n else if (prop === 'value') {\n var fields = (_this.fields.value) ? _this.fields.value : '';\n var value = _this.allowObjectBinding && !isNullOrUndefined(newProp) ? getValue(fields, newProp) : newProp;\n li = _this.getElementByValue(newProp);\n if (!_this.checkValidLi(li)) {\n _this.setOldValue(oldProp);\n }\n }\n else if (prop === 'index') {\n li = _this.liCollections[newProp];\n if (!_this.checkValidLi(li)) {\n _this.index = oldProp;\n }\n }\n };\n };\n DropDownList.prototype.updatePopupState = function () {\n if (this.beforePopupOpen) {\n this.beforePopupOpen = false;\n this.showPopup();\n }\n };\n DropDownList.prototype.setReadOnly = function () {\n if (this.readonly) {\n addClass([this.inputWrapper.container], ['e-readonly']);\n }\n else {\n removeClass([this.inputWrapper.container], ['e-readonly']);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n DropDownList.prototype.setInputValue = function (newProp, oldProp) {\n };\n DropDownList.prototype.setCssClass = function (newClass, oldClass) {\n if (!isNullOrUndefined(oldClass)) {\n oldClass = (oldClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newClass)) {\n newClass = (newClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newClass, [this.inputWrapper.container], oldClass);\n if (this.popupObj) {\n Input.setCssClass(newClass, [this.popupObj.element], oldClass);\n }\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n DropDownList.prototype.getModuleName = function () {\n return 'dropdownlist';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup that displays the list of items.\n *\n * @returns {void}\n */\n DropDownList.prototype.showPopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n if (!this.enabled) {\n return;\n }\n this.firstItem = this.dataSource && this.dataSource.length > 0 ? this.dataSource[0] : null;\n if (this.isReact && this.getModuleName() === 'combobox' && this.itemTemplate && this.isCustomFilter && this.isAddNewItemTemplate) {\n this.renderList();\n this.isAddNewItemTemplate = false;\n }\n if (this.isFiltering() && this.dataSource instanceof DataManager && (this.actionData.list !== this.actionCompleteData.list) &&\n this.actionData.list && this.actionData.ulElement) {\n this.actionCompleteData = this.actionData;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n }\n if (this.beforePopupOpen) {\n this.refreshPopup();\n return;\n }\n this.beforePopupOpen = true;\n if (this.isFiltering() && !this.isActive && this.actionCompleteData.list && this.actionCompleteData.list[0]) {\n this.isActive = true;\n this.onActionComplete(this.actionCompleteData.ulElement, this.actionCompleteData.list, null, true);\n }\n else if (isNullOrUndefined(this.list) || !isUndefined(this.list) && (this.list.classList.contains(dropDownBaseClasses.noData) ||\n this.list.querySelectorAll('.' + dropDownBaseClasses.li).length <= 0)) {\n if (this.isReact && this.isFiltering() && this.itemTemplate != null) {\n this.isSecondClick = false;\n }\n this.renderList(e);\n }\n if (this.enableVirtualization && this.listData && this.listData.length) {\n if (!isNullOrUndefined(this.value) && (this.getModuleName() === 'dropdownlist' || this.getModuleName() === 'combobox')) {\n this.removeHover();\n }\n if (!this.beforePopupOpen) {\n this.notify(\"setCurrentViewDataAsync\", {\n module: \"VirtualScroll\",\n });\n }\n }\n if (this.beforePopupOpen) {\n this.invokeRenderPopup(e);\n }\n if (this.enableVirtualization && !this.allowFiltering && this.selectedValueInfo != null && this.selectedValueInfo.startIndex > 0 && this.value != null) {\n this.notify(\"dataProcessAsync\", {\n module: \"VirtualScroll\",\n isOpen: true,\n });\n }\n };\n DropDownList.prototype.invokeRenderPopup = function (e) {\n if (Browser.isDevice && this.isFilterLayout()) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_2 = this;\n window.onpopstate = function () {\n proxy_2.hidePopup();\n };\n history.pushState({}, '');\n }\n if (!isNullOrUndefined(this.list) && (!isNullOrUndefined(this.list.children[0]) ||\n this.list.classList.contains(dropDownBaseClasses.noData))) {\n this.renderPopup(e);\n }\n };\n DropDownList.prototype.renderHightSearch = function () {\n // update high light search\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Hides the popup if it is in an open state.\n *\n * @returns {void}\n */\n DropDownList.prototype.hidePopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n if (this.isEscapeKey && this.getModuleName() === 'dropdownlist') {\n if (!isNullOrUndefined(this.inputElement)) {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.isEscapeKey = false;\n if (!isNullOrUndefined(this.index)) {\n var value = this.allowObjectBinding ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n var element = this.findListElement(this.ulElement, 'li', 'data-value', value);\n this.selectedLI = this.liCollections[this.index] || element;\n if (this.selectedLI) {\n this.updateSelectedItem(this.selectedLI, null, true);\n if (this.valueTemplate && this.itemData !== null) {\n this.setValueTemplate();\n }\n }\n }\n else {\n this.resetSelection();\n }\n }\n this.isVirtualTrackHeight = false;\n this.customFilterQuery = null;\n this.closePopup(0, e);\n var dataItem = this.getItemData();\n var isSelectVal = !isNullOrUndefined(this.selectedLI);\n if (isSelectVal && this.enableVirtualization && this.selectedLI.classList) {\n isSelectVal = this.selectedLI.classList.contains('e-active');\n }\n if (this.inputElement && this.inputElement.value.trim() === '' && !this.isInteracted && (this.isSelectCustom ||\n isSelectVal && this.inputElement.value !== dataItem.text)) {\n this.isSelectCustom = false;\n this.clearAll(e);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Sets the focus on the component for interaction.\n *\n * @returns {void}\n */\n DropDownList.prototype.focusIn = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.targetElement().classList.contains(dropDownListClasses.disable)) {\n return;\n }\n var isFocused = false;\n if (this.preventFocus && Browser.isDevice) {\n this.inputWrapper.container.tabIndex = 1;\n this.inputWrapper.container.focus();\n this.preventFocus = false;\n isFocused = true;\n }\n if (!isFocused) {\n this.targetElement().focus();\n }\n addClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n this.onFocus(e);\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n };\n /**\n * Moves the focus from the component if the component is already focused.\n *\n * @returns {void}\n */\n DropDownList.prototype.focusOut = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n if (!this.enabled) {\n return;\n }\n if (!this.enableVirtualization && (this.getModuleName() === 'combobox' || this.getModuleName() === 'autocomplete')) {\n this.isTyped = true;\n }\n this.hidePopup(e);\n if (this.targetElement()) {\n this.targetElement().blur();\n }\n removeClass([this.inputWrapper.container], [dropDownListClasses.inputFocus]);\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n };\n /**\n * Method to disable specific item in the popup.\n *\n * @param {string | number | object | HTMLLIElement} item - Specifies the item to be disabled.\n * @returns {void}\n\n */\n DropDownList.prototype.disableItem = function (item) {\n if (this.fields.disabled) {\n if (!this.list) {\n this.renderList();\n }\n var itemIndex = -1;\n if (this.liCollections && this.liCollections.length > 0 && this.listData && this.fields.disabled) {\n if (typeof (item) === 'string') {\n itemIndex = this.getIndexByValue(item);\n }\n else if (typeof item === 'object') {\n if (item instanceof HTMLLIElement) {\n for (var index = 0; index < this.liCollections.length; index++) {\n if (this.liCollections[index] === item) {\n itemIndex = this.getIndexByValue(item.getAttribute('data-value'));\n break;\n }\n }\n }\n else {\n var value = JSON.parse(JSON.stringify(item))[this.fields.value];\n for (var index = 0; index < this.listData.length; index++) {\n if (JSON.parse(JSON.stringify(this.listData[index]))[this.fields.value] === value) {\n itemIndex = this.getIndexByValue(value);\n break;\n }\n }\n }\n }\n else {\n itemIndex = item;\n }\n var isValidIndex = itemIndex < this.liCollections.length && itemIndex > -1;\n if (isValidIndex && !(JSON.parse(JSON.stringify(this.listData[itemIndex]))[this.fields.disabled])) {\n var li = this.liCollections[itemIndex];\n if (li) {\n this.disableListItem(li);\n var parsedData = JSON.parse(JSON.stringify(this.listData[itemIndex]));\n parsedData[this.fields.disabled] = true;\n this.listData[itemIndex] = parsedData;\n this.dataSource = this.listData;\n if (li.classList.contains(dropDownListClasses.focus)) {\n this.removeFocus();\n }\n if (li.classList.contains(dropDownListClasses.selected)) {\n this.clear();\n }\n }\n }\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n DropDownList.prototype.destroy = function () {\n this.isActive = false;\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n resetIncrementalSearchValues(this.element.id);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n this.clearTemplate();\n }\n this.hidePopup();\n if (this.popupObj) {\n this.popupObj.hide();\n }\n this.unWireEvent();\n if (this.list) {\n this.unWireListEvents();\n }\n if (this.element && !this.element.classList.contains('e-' + this.getModuleName())) {\n return;\n }\n if (this.inputElement) {\n var attrArray = ['readonly', 'aria-disabled', 'placeholder', 'aria-labelledby',\n 'aria-expanded', 'autocomplete', 'aria-readonly', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete', 'aria-live', 'aria-describedby', 'aria-label'];\n for (var i = 0; i < attrArray.length; i++) {\n this.inputElement.removeAttribute(attrArray[i]);\n }\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n this.inputElement.classList.remove('e-input');\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.element.style.display = 'block';\n if (this.inputWrapper.container && this.inputWrapper.container.parentElement) {\n if (this.inputWrapper.container.parentElement.tagName === this.getNgDirective()) {\n detach(this.inputWrapper.container);\n }\n else {\n this.inputWrapper.container.parentElement.insertBefore(this.element, this.inputWrapper.container);\n detach(this.inputWrapper.container);\n }\n }\n delete this.hiddenElement;\n this.filterInput = null;\n this.keyboardModule = null;\n this.ulElement = null;\n this.list = null;\n this.clearIconElement = null;\n this.popupObj = null;\n this.popupContentElement = null;\n this.rippleFun = null;\n this.selectedLI = null;\n this.liCollections = null;\n this.item = null;\n this.footer = null;\n this.header = null;\n this.previousSelectedLI = null;\n this.valueTempElement = null;\n this.actionData.ulElement = null;\n if (this.inputElement && !isNullOrUndefined(this.inputElement.onchange)) {\n this.inputElement.onchange = null;\n }\n if (this.inputElement && !isNullOrUndefined(this.inputElement.onselect)) {\n this.inputElement.onselect = null;\n }\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties,\n buttons: this.inputWrapper.container.querySelectorAll('.e-input-group-icon')[0],\n }, this.clearButton);\n this.clearButton = null;\n this.inputElement = null;\n this.inputWrapper = null;\n _super.prototype.destroy.call(this);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets all the list items bound on this component.\n *\n * @returns {Element[]}\n */\n DropDownList.prototype.getItems = function () {\n if (!this.list) {\n if (this.dataSource instanceof DataManager) {\n this.initialRemoteRender = true;\n }\n this.renderList();\n }\n return this.ulElement ? _super.prototype.getItems.call(this) : [];\n };\n /**\n * Gets the data Object that matches the given value.\n *\n * @param { string | number } value - Specifies the value of the list item.\n * @returns {Object}\n */\n DropDownList.prototype.getDataByValue = function (value) {\n return _super.prototype.getDataByValue.call(this, value);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Allows you to clear the selected values from the component.\n *\n * @returns {void}\n */\n DropDownList.prototype.clear = function () {\n this.value = null;\n };\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"cssClass\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"width\", void 0);\n __decorate([\n Property(true)\n ], DropDownList.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('300px')\n ], DropDownList.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], DropDownList.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"placeholder\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property({})\n ], DropDownList.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"readonly\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"enableVirtualization\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"allowObjectBinding\", void 0);\n __decorate([\n Property(null)\n ], DropDownList.prototype, \"index\", void 0);\n __decorate([\n Property('Never')\n ], DropDownList.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(false)\n ], DropDownList.prototype, \"showClearButton\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"filtering\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DropDownList.prototype, \"focus\", void 0);\n DropDownList = __decorate([\n NotifyPropertyChanges\n ], DropDownList);\n return DropDownList;\n}(DropDownBase));\nexport { DropDownList };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, detach, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, extend, getUniqueID, ChildProperty } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar FOCUS = 'e-input-focus';\nvar LISTCLASS = 'e-list-item';\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nvar OVERFLOW = 'e-time-overflow';\nvar OFFSETVAL = 4;\nvar EDITABLE = 'e-non-edit';\nvar wrapperAttributes = ['title', 'class', 'style'];\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var TimePickerBase;\n(function (TimePickerBase) {\n // eslint-disable-next-line max-len, jsdoc/require-jsdoc\n function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n var formatOptions;\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: timeFormat, type: 'time' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: timeFormat, type: 'time', calendar: 'islamic' };\n }\n var start;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n var end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(createdEl, listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\nvar TimeMaskPlaceholder = /** @class */ (function (_super) {\n __extends(TimeMaskPlaceholder, _super);\n function TimeMaskPlaceholder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('day')\n ], TimeMaskPlaceholder.prototype, \"day\", void 0);\n __decorate([\n Property('month')\n ], TimeMaskPlaceholder.prototype, \"month\", void 0);\n __decorate([\n Property('year')\n ], TimeMaskPlaceholder.prototype, \"year\", void 0);\n __decorate([\n Property('day of the week')\n ], TimeMaskPlaceholder.prototype, \"dayOfTheWeek\", void 0);\n __decorate([\n Property('hour')\n ], TimeMaskPlaceholder.prototype, \"hour\", void 0);\n __decorate([\n Property('minute')\n ], TimeMaskPlaceholder.prototype, \"minute\", void 0);\n __decorate([\n Property('second')\n ], TimeMaskPlaceholder.prototype, \"second\", void 0);\n return TimeMaskPlaceholder;\n}(ChildProperty));\nexport { TimeMaskPlaceholder };\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * \n * \n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {TimePickerModel} options - Specifies the TimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n _this.invalidValueString = null;\n _this.preventChange = false;\n _this.maskedDateValue = '';\n _this.moduleName = _this.getModuleName();\n _this.timeOptions = options;\n return _this;\n }\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.angularTag = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n this.openPopupEventArgs = {\n appendTo: document.body\n };\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.updateHtmlAttributeToWrapper();\n this.setTimeAllowEdit();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setTimeZone();\n this.setValue(this.getFormattedValue(this.value));\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.anchor = this.inputElement;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputEleValue = this.getDateObject(this.inputElement.value);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n TimePicker.prototype.setTimeZone = function () {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = this.serverTimezoneOffset;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n TimePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n TimePicker.prototype.setTimeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.clearIconState();\n };\n TimePicker.prototype.clearIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n else {\n addClass([this.inputWrapper.container], [EDITABLE]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n if (!isNullOrUndefined(this.value)) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n this.checkTimeFormat();\n this.checkInvalidValue(this.value);\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date(this.checkInValue(this.value))) }, true);\n this.setProperties({ min: this.checkDateValue(new Date(this.checkInValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkInValue(this.max))) }, true);\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(this.scrollTo))) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.checkAttributes(false); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.checkTimeFormat = function () {\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (!isNullOrUndefined(this.format.skeleton) && this.format.skeleton !== '') {\n var skeletonString = this.format.skeleton;\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: skeletonString });\n }\n else {\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: 'short' });\n }\n }\n else {\n this.formatString = null;\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + 'e-popup-expand';\n }\n var updatedCssClassesValue = this.cssClass;\n var isBindClearAction = this.enableMask ? false : true;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassesValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n bindClearAction: isBindClearAction,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassesValue,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n }, this.createElement);\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n TimePicker.prototype.getCldrDateTimeFormat = function () {\n var culture = new Internationalization(this.locale);\n var cldrTime;\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.cldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.checkInvalidValue = function (value) {\n var isInvalid = false;\n if (typeof value !== 'object' && !isNullOrUndefined(value)) {\n var valueString = value;\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n var valueExpression = null;\n var valueExp = null;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n else if (typeof value === 'string') {\n if (!(/^[a-zA-Z0-9- ]*$/).test(value)) {\n valueExpression = this.setCurrentDate(this.getDateObject(value));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n }));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n }));\n }\n }\n }\n }\n valueExp = this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n });\n valueExpression = (!isNullOrUndefined(valueExp) && valueExp instanceof Date && !isNaN(+valueExp)) ? valueExp : null;\n if (isNullOrUndefined(valueExpression) && valueString.replace(/\\s/g, '').length) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || ((/^[a-zA-Z0-9- ]*$/).test(value)) || isNaN(+new Date('' + valueString))) {\n isInvalid = true;\n }\n else {\n valueExpression = new Date('' + valueString);\n }\n }\n if (isInvalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n this.initValue = null;\n }\n else {\n this.setProperties({ value: valueExpression }, true);\n this.initValue = this.value;\n }\n }\n };\n TimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n TimePicker.prototype.cldrFormat = function (type) {\n var cldrDateTimeString;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTimeString = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTimeString = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTimeString;\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n detach(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n this.rippleFn = null;\n this.openPopupEventArgs = null;\n this.selectedElement = null;\n this.listTag = null;\n this.liCollections = null;\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n var propertyList = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n propertyList[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < propertyList.length; i++) {\n if (!isNullOrUndefined(this.cloneElement.getAttribute(propertyList[i]))) {\n this.inputElement.setAttribute(propertyList[i], this.cloneElement.getAttribute(propertyList[i]));\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = this.cloneElement.getAttribute(propertyList[i]);\n }\n }\n else {\n this.inputElement.removeAttribute(propertyList[i]);\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = this.createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n this.addSelection();\n this.renderPopup();\n detach(this.popupWrapper);\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n enableRtl: this.enableRtl,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n offsetY: OFFSETVAL,\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObj.element.style.maxHeight = '100%';\n this.popupObj.element.style.width = '100%';\n }\n else {\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement('span', { className: 'e-model-title' });\n modelTitleSpan.textContent = 'Select time';\n var modelCloseIcon = this.createElement('span', { className: 'e-popup-close' });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.timePopupCloseHandler, this);\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n this.popupWrapper.insertBefore(modelHeader, this.popupWrapper.firstElementChild);\n }\n };\n TimePicker.prototype.timePopupCloseHandler = function (e) {\n this.hide();\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassesValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassesValue !== '') {\n addClass([this.inputWrapper.container], updatedClassesValue.split(' '));\n }\n }\n else if (key === 'style') {\n var timeStyle = this.inputWrapper.container.getAttribute(key);\n timeStyle = !isNullOrUndefined(timeStyle) ? (timeStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputWrapper.container.setAttribute(key, timeStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n TimePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n TimePicker.prototype.updateCssClass = function (cssClassNew, cssClassOld) {\n if (!isNullOrUndefined(cssClassOld)) {\n cssClassOld = (cssClassOld.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(cssClassNew)) {\n cssClassNew = (cssClassNew.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(cssClassNew, [this.inputWrapper.container], cssClassOld);\n if (this.popupWrapper) {\n Input.setCssClass(cssClassNew, [this.popupWrapper], cssClassOld);\n }\n };\n TimePicker.prototype.removeErrorClass = function () {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if ((this.validateState(value) && !this.invalidValueString) ||\n (this.enableMask && this.inputElement.value === this.maskedDateValue)) {\n this.removeErrorClass();\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.setCursorToEnd = function () {\n this.inputElement.setSelectionRange((this.inputElement).value.length, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n var gregorianFormat = '.dates.calendars.gregorian.dayPeriods.format.abbreviated';\n var mainVal = 'main.';\n meridian = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.formatString)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n TimePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n this.interopAdaptor.invokeMethodAsync('OnTimeIconClick');\n };\n TimePicker.prototype.popupHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.inputElement.focus();\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.readonly) {\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n if (this.enableMask) {\n event.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n return;\n }\n else {\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n // eslint-disable-next-line no-self-assign\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (!((event.action === 'right' || event.action === 'left' || event.action === 'tab') || ((event.action === 'home' || event.action === 'end' || event.action === 'up' || event.action === 'down') && !this.isPopupOpen() && !this.enableMask))) {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n if (!this.isPopupOpen()) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupObj = this.popupWrapper = null;\n }\n if (this.enableMask && !this.readonly && !this.isPopupOpen()) {\n event.preventDefault();\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: event\n });\n }\n if (this.isPopupOpen()) {\n this.keyHandler(event);\n }\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n this.isNavigate = false;\n if (this.isPopupOpen()) {\n event.stopPropagation();\n }\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n this.updateInputValue(this.objToString(this.value));\n if (this.enableMask) {\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n case 'right':\n case 'left':\n case 'tab':\n case 'shiftTab':\n if (!this.isPopupOpen() && this.enableMask && !this.readonly) {\n if ((this.inputElement.selectionStart === 0 && this.inputElement.selectionEnd === this.inputElement.value.length) ||\n (this.inputElement.selectionEnd !== this.inputElement.value.length && event.action === 'tab') ||\n (this.inputElement.selectionStart !== 0 && event.action === 'shiftTab') || (event.action === 'left' || event.action === 'right')) {\n event.preventDefault();\n }\n this.notify('keyDownHandler', { module: 'MaskedDateTime',\n e: event\n });\n }\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n var _this = this;\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n removeClass([document.body], OVERFLOW);\n this.trigger('close', args, function (args) {\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n _this.popupObj.hide(new Animation(animModel));\n removeClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-controls');\n _this.inputElement.removeAttribute('aria-activedescendant');\n EventHandler.remove(document, 'mousedown touchstart', _this.documentClickHandler);\n }\n if (Browser.isDevice && _this.modal) {\n _this.modal.style.display = 'none';\n _this.modal.outerHTML = '';\n _this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(_this.mobileTimePopupWrap)) {\n _this.mobileTimePopupWrap.remove();\n _this.mobileTimePopupWrap = null;\n }\n }\n if (Browser.isDevice && _this.allowEdit && !_this.readonly) {\n _this.inputElement.removeAttribute('readonly');\n }\n });\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n TimePicker.prototype.disposeServerPopup = function () {\n if (this.popupWrapper) {\n this.popupWrapper.style.visibility = 'hidden';\n this.popupWrapper.style.top = '-9999px';\n this.popupWrapper.style.left = '-9999px';\n this.popupWrapper.style.width = '0px';\n this.popupWrapper.style.height = '0px';\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li)) {\n this.checkValue(li.getAttribute('data-value'));\n if (this.enableMask) {\n this.createMask();\n }\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n this.updateInputValue(this.getValue(this.initValue));\n if (this.enableMask) {\n this.createMask();\n }\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n EventHandler.add(this.inputElement, 'input', this.inputEventHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyConfigure = extend(this.keyConfigure, this.keyConfigs);\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n if (this.showClearButton && this.inputElement) {\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var timeValue = this.inputElement.getAttribute('value');\n var val = this.checkDateValue(this.inputEleValue);\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n val = null;\n timeValue = '';\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: val }, true);\n this.prevDate = this.value;\n this.valueWithMinutes = this.value;\n this.initValue = this.value;\n if (this.inputElement) {\n this.updateInputValue(timeValue);\n if (this.enableMask) {\n if (!timeValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.checkErrorState(timeValue);\n this.prevValue = this.inputElement.value;\n }\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n TimePicker.prototype.inputEventHandler = function () {\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.unBindEvents = function () {\n if (this.inputWrapper) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'input', this.inputEventHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n if (this.showClearButton && !isNullOrUndefined(this.inputWrapper) && !isNullOrUndefined(this.inputWrapper.clearButton)) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n };\n TimePicker.prototype.raiseClearedEvent = function (e) {\n var clearedArgs = {\n event: e\n };\n this.trigger('cleared', clearedArgs);\n };\n TimePicker.prototype.clearHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n if (!isNullOrUndefined(this.value)) {\n this.clear(e);\n }\n else {\n this.resetState();\n this.raiseClearedEvent(e);\n }\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.raiseClearedEvent(event);\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n if (!inputVal) {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(val) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(val) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.getValue(date);\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.getDateObject(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n this.updateInputValue(value_1);\n if (this.enableMask) {\n if (!value_1) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n else {\n this.updateInputValue(time);\n if (this.enableMask) {\n if (time === '') {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(time) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(time) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n return time;\n };\n TimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n var collections = this.timeCollections;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(collections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n this.selectNextItem(event);\n }\n };\n TimePicker.prototype.selectNextItem = function (event) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || !isNullOrUndefined(this.inputWrapper)\n && this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n if (this.enableMask) {\n this.selectInputText();\n }\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n this.invalidValueString = null;\n this.checkErrorState(this.value);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(this.prevDate);\n }\n this.prevDate = this.valueWithMinutes = date;\n if ((typeof date !== 'number') || (this.value && +new Date(+this.value).setMilliseconds(0)) !== +date) {\n this.setProperties({ value: date }, true);\n if (this.enableMask && this.value) {\n this.createMask();\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.checkErrorState(this.invalidValueString);\n this.updateInputValue(this.invalidValueString);\n }\n this.clearIconState();\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if ((this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes))) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var formatStr = null;\n var today = this.globalize.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.timeParse(today, val);\n }\n }\n else {\n value = this.timeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.timeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '-1' } });\n var start;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n var end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs, function (eventArgs) {\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n });\n }\n };\n this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + this.popupObj.element.id + '\"]')) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)\n && (!target.classList.contains('e-dlg-overlay'))) {\n if (this.isPopupOpen()) {\n this.hide();\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement)\n && (target === this.popupWrapper);\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n this.inputElement.tabIndex = -1;\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date(this.checkInValue(date.min)));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date(this.checkInValue(date.max)));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n removeClass([this.inputWrapper.container], [FOCUS]);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n if (this.inputElement.value === '') {\n this.invalidValueString = null;\n }\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n };\n /**\n * Focuses out the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n if (!this.enabled) {\n return;\n }\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice && !this.enableMask) {\n this.selectInputText();\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n this.trigger('focus', focusArguments);\n this.clearIconState();\n if (this.openOnFocus) {\n this.show();\n }\n };\n /**\n * Focused the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n }\n };\n /**\n * Hides the TimePicker popup.\n *\n * @returns {void}\n\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n this.clearIconState();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup to show the list items.\n *\n * @returns {void}\n\n */\n TimePicker.prototype.show = function (event) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n this.popupCreation();\n if (Browser.isDevice && this.listWrapper) {\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n document.body.appendChild(this.modal);\n }\n if (Browser.isDevice) {\n this.mobileTimePopupWrap = this.createElement('div', { className: 'e-timepicker-mob-popup-wrap' });\n document.body.appendChild(this.mobileTimePopupWrap);\n }\n this.openPopupEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open',\n appendTo: Browser.isDevice ? this.mobileTimePopupWrap : document.body\n };\n var eventArgs = this.openPopupEventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.openPopupEventArgs = eventArgs;\n if (!_this.openPopupEventArgs.cancel && !_this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n _this.openPopupEventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupAlignment(_this.openPopupEventArgs);\n _this.setScrollPosition();\n if (!Browser.isDevice) {\n _this.inputElement.focus();\n }\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n _this.popupObj.refreshPosition(_this.anchor);\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n _this.setActiveDescendant();\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n addClass([_this.inputWrapper.container], FOCUS);\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n _this.setOverlayIndex(_this.mobileTimePopupWrap, _this.popupObj.element, _this.modal, Browser.isDevice);\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.listTag = undefined;\n _this.liCollections = _this.timeCollections = _this.disableItemCollection = [];\n _this.popupObj = null;\n }\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobileTimePopupWrap.appendChild(dlgOverlay);\n }\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n TimePicker.prototype.setOverlayIndex = function (popupWrapper, timePopupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(timePopupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(timePopupElement.style.zIndex, 10) ? parseInt(timePopupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n TimePicker.prototype.formatValues = function (type) {\n var value;\n if (typeof type === 'number') {\n value = formatUnit(type);\n }\n else if (typeof type === 'string') {\n value = (type.match(/px|%|em/)) ? type : isNaN(parseInt(type, 10)) ? type : formatUnit(type);\n }\n return value;\n };\n TimePicker.prototype.popupAlignment = function (args) {\n args.popup.position.X = this.formatValues(args.popup.position.X);\n args.popup.position.Y = this.formatValues(args.popup.position.Y);\n if (!isNaN(parseFloat(args.popup.position.X)) || !isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.targetType = 'container';\n }\n if (!isNaN(parseFloat(args.popup.position.X))) {\n this.popupObj.offsetX = parseFloat(args.popup.position.X);\n }\n if (!isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.offsetY = parseFloat(args.popup.position.Y);\n }\n if (!Browser.isDevice) {\n switch (args.popup.position.X) {\n case 'left':\n break;\n case 'right':\n args.popup.offsetX = this.containerStyle.width;\n break;\n case 'center':\n args.popup.offsetX = -(this.containerStyle.width / 2);\n break;\n }\n switch (args.popup.position.Y) {\n case 'top':\n break;\n case 'bottom':\n break;\n case 'center':\n args.popup.offsetY = -(this.containerStyle.height / 2);\n break;\n }\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.inputWrapper.container;\n this.anchor = this.inputElement;\n this.popupObj.targetType = 'relative';\n }\n }\n else {\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.offsetY = 0;\n this.popupObj.targetType = 'container';\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {TimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n this.setTimeAllowEdit();\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'allowEdit':\n this.setTimeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.timeOptions && this.timeOptions.placeholder == null) {\n this.updatePlaceHolder();\n }\n this.setValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkTimeFormat();\n this.setValue(this.value);\n if (this.enableMask) {\n this.createMask();\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'value':\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n if (!this.invalidValueString) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n if ((newProp.value && +new Date(+newProp.value).setMilliseconds(0)) !== +this.value) {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n }\n else {\n this.updateInputValue(this.invalidValueString);\n this.checkErrorState(this.invalidValueString);\n }\n if (this.enableMask && isNullOrUndefined(newProp.value)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.checkValueChange(null, false);\n if (this.isPopupOpen()) {\n this.setScrollPosition();\n }\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo)))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n }\n }\n };\n TimePicker.prototype.checkInValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property({})\n ], TimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], TimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { AddUserDialog } from './add-user-dialog';\nimport { EnforceProtectionDialog, UnProtectDocumentDialog } from './enforce-protection-dialog';\nimport { Base64 } from '../editor/editor-helper';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * @private\n * @param {any} args - Specifies the args\n * @returns {void}\n */\nvar RestrictEditing = /** @class */ (function () {\n function RestrictEditing(documentHelper) {\n var _this = this;\n this.addRemove = true;\n this.protectionType = 'ReadOnly';\n this.previousProtectionType = 'Read only';\n this.isShowRestrictPane = false;\n this.isAddUser = false;\n this.usersCollection = ['Everyone'];\n /**\n * @returns {void}\n */\n this.closePane = function () {\n _this.isShowRestrictPane = false;\n _this.restrictPane.style.display = 'none';\n _this.documentHelper.owner.showHideRulers();\n _this.documentHelper.owner.triggerResize();\n };\n this.onYesButtonClick = function () {\n _this.viewer.owner.editorModule.removeAllEditRestrictions();\n _this.documentHelper.dialog.hide();\n };\n this.onCancelButtonClick = function (args) {\n _this.protectionTypeDrop.value = _this.previousProtectionType;\n _this.documentHelper.dialog.hide();\n };\n this.onNoButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @returns {void}\n */\n this.showAllRegion = function () {\n _this.documentHelper.selection.showAllEditingRegion();\n };\n this.documentHelper = documentHelper;\n this.addUserDialog = new AddUserDialog(documentHelper);\n this.enforceProtectionDialog = new EnforceProtectionDialog(documentHelper, this);\n this.unProtectDialog = new UnProtectDocumentDialog(documentHelper, this);\n this.base64 = new Base64();\n }\n Object.defineProperty(RestrictEditing.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n RestrictEditing.prototype.showHideRestrictPane = function (isShow) {\n if (!this.restrictPane) {\n this.localObj = new L10n('documenteditor', this.viewer.owner.defaultLocale);\n this.localObj.setLocale(this.viewer.owner.locale);\n this.initPane(this.localObj, this.documentHelper.owner.enableRtl);\n }\n if (isShow) {\n this.restrictPane.style.display = 'block';\n this.isShowRestrictPane = true;\n this.documentHelper.selection.isHighlightEditRegion = true;\n this.wireEvents();\n this.documentHelper.updateViewerSize();\n this.loadPaneValue();\n this.addUserCollection();\n }\n else {\n this.closePane();\n this.documentHelper.updateFocus();\n }\n this.documentHelper.owner.triggerResize();\n };\n RestrictEditing.prototype.initPane = function (localValue, isRtl) {\n this.restrictPane = createElement('div', { className: 'e-de-restrict-pane' });\n if (isRtl) {\n this.restrictPane.classList.add('e-rtl');\n }\n var headerWholeDiv = createElement('div', { className: 'e-de-rp-whole-header' });\n var headerDiv1 = createElement('div', {\n innerHTML: localValue.getConstant('Restrict Editing'), className: 'e-de-rp-header'\n });\n this.closeButton = createElement('button', {\n className: 'e-de-rp-close-icon e-de-close-icon e-btn e-flat e-icon-btn',\n attrs: { type: 'button' }\n });\n this.closeButton.setAttribute('aria-label', this.localObj.getConstant('Close'));\n headerWholeDiv.appendChild(this.closeButton);\n headerWholeDiv.appendChild(headerDiv1);\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-de-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.restrictPane.appendChild(headerWholeDiv);\n this.initRestrictEditingPane(localValue);\n this.documentHelper.optionsPaneContainer.setAttribute('style', 'display:inline-flex;');\n this.documentHelper.optionsPaneContainer.insertBefore(this.restrictPane, this.documentHelper.viewerContainer);\n };\n /* eslint-disable */\n RestrictEditing.prototype.initRestrictEditingPane = function (localObj) {\n this.restrictPaneWholeDiv = createElement('div');\n var formatWholeDiv = createElement('div', { className: 'e-de-rp-sub-div' });\n var formatDiv = createElement('div', {\n innerHTML: localObj.getConstant('Formatting restrictions'),\n className: 'e-de-rp-format'\n });\n formatWholeDiv.appendChild(formatDiv);\n var allowFormatting = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n formatWholeDiv.appendChild(allowFormatting);\n this.allowFormat = this.createCheckBox(localObj.getConstant('Allow formatting'), allowFormatting);\n this.restrictPaneWholeDiv.appendChild(formatWholeDiv);\n // Editing restrictions\n var editRestrictWholeDiv = createElement('div', { className: 'e-de-rp-sub-div' });\n // let editRestrict: HTMLElement = createElement('div', {\n // innerHTML: localObj.getConstant('Editing restrictions'),\n // className: 'e-de-rp-format'\n // });\n // editRestrictWholeDiv.appendChild(editRestrict);\n var readOnly = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n var protectionTypeInput = createElement('input', {\n className: 'e-prop-font-style'\n });\n editRestrictWholeDiv.appendChild(protectionTypeInput);\n var protectionTypeValue = [\n { Value: 'Read only', Name: localObj.getConstant('Read only') },\n { Value: 'Filling in forms', Name: localObj.getConstant('Filling in forms') },\n { Value: 'Comments', Name: localObj.getConstant('Comments') },\n { Value: 'Tracked changes', Name: localObj.getConstant('Tracked changes') }\n ];\n this.protectionTypeDrop = new DropDownList({\n dataSource: protectionTypeValue,\n cssClass: 'e-de-prop-dropdown',\n floatLabelType: 'Always',\n placeholder: localObj.getConstant('Editing restrictions'),\n fields: { text: 'Name', value: 'Value' },\n enableRtl: this.documentHelper.owner.enableRtl\n });\n this.protectionTypeDrop.value = 'Read only';\n this.protectionTypeDrop.appendTo(protectionTypeInput);\n // let allowPrint: HTMLInputElement = createElement('input', {\n // attrs: { type: 'checkbox' },\n // id: this.viewer.owner.containerId + '_allowPrint'\n // }) as HTMLInputElement;\n // editRestrictWholeDiv.appendChild(allowPrint);\n // this.allowPrint = this.createCheckBox('Allow Printing', allowPrint);\n // let allowCopy: HTMLInputElement = createElement('input', {\n // attrs: { type: 'checkbox' },\n // id: this.viewer.owner.containerId + '_allowCopy'\n // }) as HTMLInputElement;\n // editRestrictWholeDiv.appendChild(allowCopy);\n // this.allowCopy = this.createCheckBox('Allow Copy', allowCopy);\n this.restrictPaneWholeDiv.appendChild(editRestrictWholeDiv);\n // User Permissions\n this.userWholeDiv = createElement('div', { className: 'e-de-rp-sub-div' });\n var userDiv = createElement('div', {\n innerHTML: localObj.getConstant('Exceptions Optional'),\n className: 'e-de-rp-format'\n });\n this.userWholeDiv.appendChild(userDiv);\n var subContentDiv = createElement('div', {\n innerHTML: localObj.getConstant('Select Part Of Document And User'),\n className: 'e-de-rp-sub-content-div'\n });\n this.userWholeDiv.appendChild(subContentDiv);\n var emptyuserDiv = createElement('div', { className: 'e-de-rp-user' });\n this.userWholeDiv.appendChild(emptyuserDiv);\n this.addedUser = new ListView({\n cssClass: 'e-de-user-listView',\n dataSource: [{ text: 'Everyone' }],\n showCheckBox: true,\n select: this.selectHandler.bind(this),\n enableRtl: this.documentHelper.owner.enableRtl\n });\n this.addedUser.appendTo(emptyuserDiv);\n this.addUser = createElement('button', {\n className: 'e-btn e-primary e-flat e-de-rp-mu-btn',\n innerHTML: localObj.getConstant('More users') + '...',\n //styles: 'margin-top: 3px',\n attrs: { type: 'button' }\n });\n this.addUser.setAttribute('aria-label', localObj.getConstant('More users'));\n this.userWholeDiv.appendChild(this.addUser);\n this.restrictPaneWholeDiv.appendChild(this.userWholeDiv);\n var lastDiv = createElement('div', { className: 'e-de-rp-enforce' });\n this.restrictPaneWholeDiv.appendChild(lastDiv);\n this.enforceProtection = createElement('button', {\n innerHTML: localObj.getConstant('Enforcing Protection'),\n className: 'e-btn e-de-rp-btn-enforce',\n attrs: { type: 'button' }\n });\n this.enforceProtection.setAttribute('aria-label', localObj.getConstant('Enforcing Protection'));\n lastDiv.appendChild(this.enforceProtection);\n this.restrictPane.appendChild(this.restrictPaneWholeDiv);\n this.stopProtectionDiv = createElement('div', { styles: 'display:none' });\n var headerDiv = createElement('div', { innerHTML: localObj.getConstant('Your permissions'), className: 'e-de-rp-stop-div1' });\n this.stopProtectionDiv.appendChild(headerDiv);\n var contentWholeDiv = createElement('div', { className: 'e-de-rp-stop-div2' });\n this.stopProtectionDiv.appendChild(contentWholeDiv);\n var content1 = localObj.getConstant('Protected Document');\n this.contentDiv1 = createElement('div', { innerHTML: content1 });\n contentWholeDiv.appendChild(this.contentDiv1);\n var content2 = localObj.getConstant('ReadOnlyProtection');\n this.contentDiv2 = createElement('div', { innerHTML: content2 });\n contentWholeDiv.appendChild(this.contentDiv2);\n this.stopReadOnlyOptions = createElement('div');\n this.stopProtectionDiv.appendChild(this.stopReadOnlyOptions);\n var navigateNext = createElement('div', { className: 'e-de-rp-enforce-nav' });\n var navigateNextButton = createElement('button', {\n innerHTML: localObj.getConstant('Find Next Region I Can Edit'), className: 'e-btn e-de-rp-nav-btn',\n attrs: { type: 'button' }\n });\n navigateNext.appendChild(navigateNextButton);\n navigateNextButton.addEventListener('click', this.navigateNextRegion.bind(this));\n this.stopReadOnlyOptions.appendChild(navigateNext);\n var showAllRegion = createElement('div', { className: 'e-de-rp-enforce-nav' });\n var showAllRegionButton = createElement('button', {\n innerHTML: localObj.getConstant('Show All Regions I Can Edit'), className: 'e-btn e-de-rp-nav-btn',\n attrs: { type: 'button' }\n });\n showAllRegion.appendChild(showAllRegionButton);\n showAllRegionButton.addEventListener('click', this.showAllRegion);\n this.stopReadOnlyOptions.appendChild(showAllRegion);\n var highlightRegion = createElement('div', { className: 'e-de-rp-nav-lbl e-de-rp-more-less' });\n var highlightRegionInput = createElement('input', { attrs: { type: 'checkbox' }, className: 'e-btn e-de-rp-nav-btn' });\n highlightRegion.appendChild(highlightRegionInput);\n this.stopReadOnlyOptions.appendChild(highlightRegion);\n this.highlightCheckBox = new CheckBox({ label: localObj.getConstant('Highlight the regions I can edit'), change: this.changeHighlightOptions.bind(this), enableRtl: this.documentHelper.owner.enableRtl }, highlightRegionInput);\n var lastButtonDiv = createElement('div', { className: 'e-de-rp-enforce' });\n this.stopProtection = createElement('button', {\n innerHTML: localObj.getConstant('Stop Protection'),\n className: 'e-btn e-de-rp-btn-stop-enforce',\n attrs: { type: 'button' }\n });\n lastButtonDiv.appendChild(this.stopProtection);\n this.stopProtectionDiv.appendChild(lastButtonDiv);\n this.restrictPane.appendChild(this.stopProtectionDiv);\n };\n RestrictEditing.prototype.showStopProtectionPane = function (show) {\n if (show) {\n this.stopProtectionDiv.style.display = 'block';\n this.restrictPaneWholeDiv.style.display = 'none';\n }\n else {\n this.stopProtectionDiv.style.display = 'none';\n this.restrictPaneWholeDiv.style.display = 'block';\n }\n switch (this.documentHelper.protectionType) {\n case 'ReadOnly':\n this.stopReadOnlyOptions.style.display = 'block';\n break;\n case 'CommentsOnly':\n this.stopReadOnlyOptions.style.display = 'block';\n break;\n default:\n this.stopReadOnlyOptions.style.display = 'none';\n break;\n }\n this.documentHelper.owner.showHideRulers();\n this.documentHelper.owner.triggerResize();\n };\n RestrictEditing.prototype.wireEvents = function () {\n this.addUser.addEventListener('click', this.addUserDialog.show);\n this.enforceProtection.addEventListener('click', this.protectDocument.bind(this));\n this.stopProtection.addEventListener('click', this.stopProtectionTriggered.bind(this));\n this.closeButton.addEventListener('click', this.closePane);\n this.allowFormat.addEventListener('change', this.enableFormatting.bind(this));\n this.protectionTypeDrop.addEventListener('change', this.protectionTypeDropChanges.bind(this));\n this.highlightCheckBox.addEventListener('change', this.highlightClicked.bind(this));\n };\n RestrictEditing.prototype.changeHighlightOptions = function () {\n var _this = this;\n this.documentHelper.owner.documentEditorSettings.highlightEditableRanges = this.highlightCheckBox.checked;\n setTimeout(function () {\n _this.documentHelper.owner.focusIn();\n }, 10);\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n RestrictEditing.prototype.enableFormatting = function (args) {\n this.documentHelper.restrictFormatting = !args.checked;\n };\n RestrictEditing.prototype.stopProtectionTriggered = function (args) {\n if ((isNullOrUndefined(this.documentHelper.saltValue) || this.documentHelper.saltValue === '')\n && (isNullOrUndefined(this.documentHelper.hashValue) || this.documentHelper.hashValue === '')) {\n this.documentHelper.owner.editorModule.unProtectDocument();\n return;\n }\n this.unProtectDialog.show();\n };\n RestrictEditing.prototype.protectionTypeDropChanges = function (args) {\n switch (args.value) {\n case 'Read only':\n this.protectionType = 'ReadOnly';\n this.userWholeDiv.style.display = 'block';\n //this.enforceProtection.style.marginLeft = '0px';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('ReadOnlyProtection');\n //this.contentDiv2.style.display = 'block'; \n this.previousProtectionType = args.previousItemData.Value;\n break;\n case 'Filling in forms':\n this.protectionType = 'FormFieldsOnly';\n this.userWholeDiv.style.display = 'none';\n //this.enforceProtection.style.marginLeft = '8px';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('FormFieldsOnly');\n //this.contentDiv2.style.display = 'block';\n this.previousProtectionType = args.previousItemData.Value;\n this.showRemovedIgnoreDialog();\n break;\n case 'Comments':\n this.protectionType = 'CommentsOnly';\n this.userWholeDiv.style.display = 'block';\n //this.enforceProtection.style.marginLeft = '0px';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('CommentsOnly');\n //this.contentDiv2.style.display = 'none';\n this.previousProtectionType = args.previousItemData.Value;\n break;\n case 'Tracked changes':\n this.protectionType = 'RevisionsOnly';\n this.userWholeDiv.style.display = 'none';\n this.contentDiv1.innerHTML = this.localObj.getConstant('Protected Document');\n this.contentDiv2.innerHTML = this.localObj.getConstant('TrackChangesOnly');\n this.previousProtectionType = args.previousItemData.Value;\n this.showRemovedIgnoreDialog();\n break;\n default:\n this.protectionType = 'NoProtection';\n this.addedUser.uncheckAllItems();\n this.viewer.owner.editorModule.removeAllEditRestrictions();\n break;\n }\n };\n RestrictEditing.prototype.showRemovedIgnoreDialog = function () {\n if (this.documentHelper.selection && this.documentHelper.editRanges.length > 0) {\n this.documentHelper.dialog.height = ' Auto';\n this.documentHelper.dialog.width = ' 600px';\n this.documentHelper.dialog.header = this.localObj.getConstant('Information');\n this.documentHelper.dialog.content = this.localObj.getConstant('RemovedIgnoreExceptions') + '
' + '
' + this.localObj.getConstant('RemovedIgnore');\n this.documentHelper.dialog.buttons = [{\n click: this.onYesButtonClick,\n buttonModel: { content: this.localObj.getConstant('Yes') }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel') }\n },\n {\n click: this.onNoButtonClick,\n buttonModel: { content: this.localObj.getConstant('No') }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n }\n };\n RestrictEditing.prototype.selectHandler = function (args) {\n if (args.isChecked) {\n this.viewer.owner.editorModule.insertEditRangeElement(args.text);\n args.event.target.classList.add('e-check');\n }\n else {\n this.viewer.owner.editorModule.removeUserRestrictions(args.text);\n }\n };\n RestrictEditing.prototype.highlightClicked = function (args) {\n this.documentHelper.selection.isHighlightEditRegion = args.checked;\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n RestrictEditing.prototype.protectDocument = function () {\n this.enforceProtectionDialog.show();\n };\n RestrictEditing.prototype.createCheckBox = function (label, element) {\n var checkBox = new CheckBox({ label: label, enableRtl: this.documentHelper.owner.enableRtl });\n checkBox.appendTo(element);\n return checkBox;\n };\n RestrictEditing.prototype.loadPaneValue = function () {\n // if (!this.isAddUser) {\n // this.protectionType = this.documentHelper.protectionType;\n // }\n this.allowFormat.checked = !this.documentHelper.restrictFormatting;\n switch (this.documentHelper.protectionType) {\n case 'ReadOnly':\n this.protectionTypeDrop.value = 'Read only';\n break;\n case 'FormFieldsOnly':\n this.protectionTypeDrop.value = 'Filling in forms';\n break;\n case 'CommentsOnly':\n this.protectionTypeDrop.value = 'Comments';\n break;\n case 'RevisionsOnly':\n this.protectionTypeDrop.value = 'Tracked changes';\n break;\n }\n this.highlightCheckBox.checked = this.documentHelper.owner.documentEditorSettings.highlightEditableRanges;\n this.addedUser.enablePersistence = true;\n this.addedUser.dataSource = this.usersCollection.slice();\n this.addedUser.dataBind();\n this.showStopProtectionPane(this.documentHelper.isDocumentProtected);\n };\n RestrictEditing.prototype.navigateNextRegion = function () {\n this.documentHelper.selection.navigateToNextEditingRegion();\n };\n RestrictEditing.prototype.addUserCollection = function () {\n if (this.documentHelper.selection && this.documentHelper.selection.editRangeCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.selection.editRangeCollection.length; i++) {\n var editStart = this.documentHelper.selection.editRangeCollection[i];\n if (editStart.user !== '' && this.usersCollection.indexOf(editStart.user) === -1) {\n this.usersCollection.push(editStart.user);\n }\n if (editStart.group !== '' && this.usersCollection.indexOf(editStart.group) === -1) {\n this.usersCollection.push(editStart.group);\n }\n }\n }\n this.addedUser.dataSource = this.documentHelper.userCollection.slice();\n this.addedUser.dataBind();\n };\n RestrictEditing.prototype.updateUserInformation = function () {\n this.addedUser.uncheckAllItems();\n if (this.documentHelper.selection.checkSelectionIsAtEditRegion) {\n var editRange = this.documentHelper.selection.getEditRangeStartElement();\n if (editRange) {\n var index = this.addedUser.dataSource.indexOf(editRange.user);\n if (index > -1) {\n var listElement = this.addedUser.element.querySelectorAll('li')[index];\n listElement.querySelector('.e-icons').classList.add('e-check');\n }\n index = this.addedUser.dataSource.indexOf(editRange.group);\n if (index > -1) {\n var listElement = this.addedUser.element.querySelectorAll('li')[index];\n listElement.querySelector('.e-icons').classList.add('e-check');\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n RestrictEditing.prototype.destroy = function () {\n if (this.addUserDialog) {\n this.addUserDialog.destroy();\n }\n this.addUserDialog = undefined;\n if (this.enforceProtectionDialog) {\n this.enforceProtectionDialog.destroy();\n }\n this.enforceProtectionDialog = undefined;\n if (this.unProtectDialog) {\n this.unProtectDialog.destroy();\n }\n this.unProtectDialog = undefined;\n if (this.base64) {\n this.base64.destroy();\n }\n this.base64 = undefined;\n if (this.addedUser) {\n this.addedUser.destroy();\n this.addedUser = undefined;\n }\n if (this.allowFormat) {\n this.allowFormat.destroy();\n this.allowFormat = undefined;\n }\n if (this.protectionTypeDrop) {\n this.protectionTypeDrop.destroy();\n this.protectionTypeDrop = undefined;\n }\n if (this.highlightCheckBox) {\n this.highlightCheckBox.destroy();\n this.highlightCheckBox = undefined;\n }\n if (this.addUser) {\n this.addUser.innerHTML = '';\n this.addUser.remove();\n this.addUser = undefined;\n }\n if (this.restrictPane) {\n this.restrictPane.innerHTML = '';\n this.restrictPane.remove();\n this.restrictPane = undefined;\n }\n if (this.enforceProtection) {\n this.enforceProtection.innerHTML = '';\n this.enforceProtection.remove();\n this.enforceProtection = undefined;\n }\n if (this.stopProtection) {\n this.stopProtection.innerHTML = '';\n this.stopProtection.remove();\n this.stopProtection = undefined;\n }\n if (this.stopProtectionDiv) {\n this.stopProtectionDiv.innerHTML = '';\n this.stopProtectionDiv.remove();\n this.stopProtectionDiv = undefined;\n }\n if (this.stopReadOnlyOptions) {\n this.stopReadOnlyOptions.innerHTML = '';\n this.stopReadOnlyOptions.remove();\n this.stopReadOnlyOptions = undefined;\n }\n if (this.contentDiv1) {\n this.contentDiv1.innerHTML = '';\n this.contentDiv1.remove();\n this.contentDiv1 = undefined;\n }\n if (this.contentDiv2) {\n this.contentDiv2.innerHTML = '';\n this.contentDiv2.remove();\n this.contentDiv2 = undefined;\n }\n if (this.closeButton) {\n this.closeButton.innerHTML = '';\n this.closeButton.remove();\n this.closeButton = undefined;\n }\n if (this.userWholeDiv) {\n this.userWholeDiv.innerHTML = '';\n this.userWholeDiv.remove();\n this.userWholeDiv = undefined;\n }\n if (this.restrictPaneWholeDiv) {\n this.restrictPaneWholeDiv.innerHTML = '';\n this.restrictPaneWholeDiv.remove();\n this.restrictPaneWholeDiv = undefined;\n }\n this.usersCollection = [];\n this.usersCollection = undefined;\n this.previousProtectionType = undefined;\n this.currentHashValue = undefined;\n this.currentSaltValue = undefined;\n this.documentHelper = undefined;\n };\n return RestrictEditing;\n}());\nexport { RestrictEditing };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\nvar NUMERIC_FOCUS = 'e-input-focus';\nvar HIDDENELEMENT = 'e-numeric-hidden';\nvar wrapperAttributes = ['title', 'style', 'class'];\nvar selectionTimeOut = 0;\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n /**\n *\n * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function NumericTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.preventChange = false;\n _this.isDynamicChange = false;\n _this.numericOptions = options;\n return _this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n // eslint-disable-next-line no-useless-escape\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formEle = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id' && attributeName !== 'class') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n else if (attributeName === 'class') {\n input.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n }\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off' });\n var localeText = {\n incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: this.placeholder\n };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('numerictextbox'));\n }\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.prevValue = this.value;\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.formEle) {\n this.inputEleValue = this.value;\n }\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n this.setElementWidth(this.width);\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ?\n null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n this.hiddenInput.setAttribute('value', this.hiddenInput.value);\n }\n this.elementPrevValue = this.element.value;\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n if (!this.element.hasAttribute('aria-labelledby') && !this.element.hasAttribute('placeholder')) {\n this.element.setAttribute('aria-label', 'numerictextbox');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n }\n };\n NumericTextBox.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name', 'placeholder'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (minValue !== null && !isNaN(minValue)) {\n this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (maxValue !== null && !isNaN(maxValue)) {\n this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n }\n }\n break;\n case 'step':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (stepValue !== null && !isNaN(stepValue)) {\n this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n }\n }\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n {\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n }\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n this.updateHTMLAttrToWrapper();\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n 'validateHidden': 'true', 'aria-label': 'hidden', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n if (this.isAngular && this.angularTagName === 'EJS-NUMERICTEXTBOX' && this.cloneElement.id.length > 0) {\n attributes(this.hiddenInput, { 'name': this.cloneElement.id });\n }\n else {\n attributes(this.hiddenInput, { 'name': this.inputName });\n }\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n this.updateDataAttribute(false);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n var attr = {};\n if (!isDynamic) {\n for (var a = 0; a < this.element.attributes.length; a++) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n else {\n attr = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key.indexOf('data') === 0) {\n this.hiddenInput.setAttribute(key, attr[\"\" + key]);\n }\n }\n };\n NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n };\n NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n };\n NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n var result = numericClassName;\n if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[\"\" + pro]);\n if (updatedClassValue !== '') {\n addClass([this.container], updatedClassValue.split(' '));\n }\n }\n else if (pro === 'style') {\n var numericStyle = this.container.getAttribute(pro);\n numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[\"\" + pro]) :\n this.htmlAttributes[\"\" + pro];\n this.container.setAttribute(pro, numericStyle);\n }\n else {\n this.container.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n }\n };\n NumericTextBox.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n if (this.min !== -(Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemin': this.min.toString() });\n }\n if (this.max !== (Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemax': this.max.toString() });\n }\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide')) || this.inputWrapper.container.classList.contains('e-static-clear')) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n this.hiddenInput.value = '';\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.resetFormHandler = function () {\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.updateValue(null);\n }\n else {\n this.updateValue(this.inputEleValue);\n }\n };\n NumericTextBox.prototype.setSpinButton = function () {\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n if (this.formEle) {\n EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n }\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n if (this.formEle) {\n EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n }\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n this.inputValue = (isNullOrUndefined(this.inputValue) || isNaN(this.inputValue)) ? null : this.inputValue;\n if (this.prevValue !== this.value || this.prevValue !== this.inputValue) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n if (this.changeEventArgs.event === undefined) {\n this.changeEventArgs.isInteracted = false;\n this.changeEventArgs.isInteraction = false;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.elementPrevValue = this.element.value;\n this.preventChange = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (!isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n if (_this.element.value[_this.element.selectionStart - 1] === decimalSeparator &&\n _this.decimals === 0 &&\n _this.validateDecimalOnType) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function () {\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.inputHandler = function (event) {\n var numerictextboxObj = null || this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n /* istanbul ignore next */\n if (this.isAngular\n && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parsedValue = isNaN(parsedValue) ? null : parsedValue;\n numerictextboxObj.localChange({ value: parsedValue });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n //EJ2-54963-if type \".\" or \".0\" or \"-.0\" it converts to \"0\" automatically when binding v-model\n var nonZeroRegex = new RegExp('[^0-9]+$');\n if (nonZeroRegex.test(this.element.value) ||\n ((this.elementPrevValue.indexOf('.') !== -1 || this.elementPrevValue.indexOf('-') !== -1) &&\n this.element.value[this.element.value.length - 1] === '0')) {\n current = this.value;\n }\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.inputValue = value;\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n /* istanbul ignore next */\n if (!this.isDynamicChange) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = this.getNumberOfDecimals(value);\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = this.value.toString();\n if (this.value !== null && this.serverDecimalSeparator) {\n this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n }\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n var numberOfDecimals;\n // eslint-disable-next-line no-useless-escape\n var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n var valueString = value.toString();\n if (EXPREGEXP.test(valueString)) {\n var result = EXPREGEXP.exec(valueString);\n if (!isNullOrUndefined(result)) {\n valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n }\n }\n var decimalPart = valueString.split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return numberOfDecimals;\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!this.enabled || this.readonly) {\n return true;\n }\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n var isAlterNumPadDecimalChar = event.code === 'NumpadDecimal' && currentChar !== decimalSeparator;\n //EJ2-59813-replace the culture decimal separator value with numberpad decimal separator value when culture decimal separator and numberpad decimal separator are different\n if (isAlterNumPadDecimalChar) {\n currentChar = decimalSeparator;\n }\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n //EJ2-59813-update the numberpad decimal separator and update the cursor position\n if (isAlterNumPadDecimalChar) {\n var start = this.element.selectionStart + 1;\n this.element.value = text;\n this.element.setSelectionRange(start, start);\n event.preventDefault();\n event.stopPropagation();\n }\n return true;\n }\n };\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusHandler = function (event) {\n var _this = this;\n clearTimeout(selectionTimeOut);\n this.focusEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('focus', this.focusEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(0, formatValue_1.length);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n selectionTimeOut = setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n NumericTextBox.prototype.focusOutHandler = function (event) {\n var _this = this;\n this.blurEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('blur', this.blurEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () {\n _this.isCalled = true;\n _this.action(action, event);\n }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target;\n if (event.type === 'touchmove') {\n var touchEvent = event.touches;\n target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n }\n else {\n target = document.elementFromPoint(event.clientX, event.clientY);\n }\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n this.prevValue = this.value;\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n if (this.spinUp) {\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n }\n if (this.spinDown) {\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n }\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n *\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n *\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'aria-disabled', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'tabindex',\n 'aria-valuemin', 'aria-valuemax', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.container.insertAdjacentElement('afterend', this.element);\n detach(this.container);\n this.spinUp = null;\n this.spinDown = null;\n this.container = null;\n this.hiddenInput = null;\n this.changeEventArgs = null;\n this.blurEventArgs = null;\n this.focusEventArgs = null;\n this.inputWrapper = null;\n Input.destroy({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n };\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n * @returns {string} - Returns the formatted value of the NumericTextBox.\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns the persisted data.\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setElementWidth(newProp.width);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.updateDataAttribute(true);\n this.checkAttributes(true);\n Input.validateInputType(this.container, this.element);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n this.updateSpinButton(newProp);\n break;\n case 'showClearButton':\n this.updateClearButton(newProp);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n this.updateValue(newProp.value);\n if (this.isDynamicChange) {\n this.preventChange = false;\n this.isDynamicChange = false;\n }\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n this.setSpinButton();\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n {\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n }\n break;\n case 'currencyCode':\n {\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n }\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n NumericTextBox.prototype.updateClearButton = function (newProp) {\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n };\n NumericTextBox.prototype.updateSpinButton = function (newProp) {\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"blur\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-unused-expressions */\nimport { Component, EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined, throwError } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar OTHERDECADE = 'e-other-year';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar CONTENTTABLE = 'e-calendar-content-table';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar FOCUSEDCELL = 'e-focused-cell';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar DAYHEADERLONG = 'e-calendar-day-header-lg';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarBaseModel} options - Specifies the CalendarBase model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.isPopupClicked = false;\n _this.isDateSelected = true;\n _this.isTodayClicked = false;\n _this.preventChange = false;\n _this.previousDates = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.render = function () {\n this.rangeValidation(this.min, this.max);\n this.calendarEleCopy = this.element.cloneNode(true);\n if (this.calendarMode === 'Islamic') {\n if (+(this.min.setSeconds(0)) === +new Date(1900, 0, 1, 0, 0, 0)) {\n this.min = new Date(1944, 2, 18);\n }\n if (+this.max === +new Date(2099, 11, 31)) {\n this.max = new Date(2069, 10, 16);\n }\n }\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'data-role': 'calendar'\n });\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.rangeValidation = function (min, max) {\n if (isNullOrUndefined(min)) {\n this.setProperties({ min: new Date(1900, 0, 1) }, true);\n }\n if (isNullOrUndefined(max)) {\n this.setProperties({ max: new Date(2099, 11, 31) }, true);\n }\n };\n CalendarBase.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n return this.defaultKeyConfigs;\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date(this.checkValue(value));\n }\n };\n CalendarBase.prototype.setOverlayIndex = function (popupWrapper, popupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(popupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(popupElement.style.zIndex, 10) ? parseInt(popupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date(this.checkValue(value));\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n var tabIndexAttr = { 'tabindex': '0' };\n this.headerElement = this.createElement('div', { className: HEADER });\n var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n attributes(this.previousIcon, tabIndexAttr);\n this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n if (this.getModuleName() === 'daterangepicker') {\n attributes(this.previousIcon, { tabIndex: '-1' });\n attributes(this.nextIcon, { tabIndex: '-1' });\n }\n attributes(this.nextIcon, ariaNextAttrs);\n attributes(this.nextIcon, tabIndexAttr);\n this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n attributes(this.headerTitleElement, tabIndexAttr);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n this.adjustLongHeaderSize();\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = this.createElement('div', { className: CONTENT });\n this.table = this.createElement('table', { attrs: { 'class': CONTENTTABLE, 'tabIndex': '0', 'role': 'grid', 'aria-activedescendant': '', 'aria-labelledby': this.element.id } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n if (this.getModuleName() !== 'daterangepicker') {\n EventHandler.add(this.table, 'focus', this.addContentFocus, this);\n EventHandler.add(this.table, 'blur', this.removeContentFocus, this);\n }\n };\n CalendarBase.prototype.addContentFocus = function (args) {\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n if (!isNullOrUndefined(selectedDate)) {\n selectedDate.classList.add(FOCUSEDCELL);\n }\n else if (!isNullOrUndefined(focusedDate)) {\n focusedDate.classList.add(FOCUSEDCELL);\n }\n };\n CalendarBase.prototype.removeContentFocus = function (args) {\n var focusedDate = !isNullOrUndefined(this.tableBodyElement) ? this.tableBodyElement.querySelector('tr td.e-focused-date') : null;\n var selectedDate = !isNullOrUndefined(this.tableBodyElement) ? this.tableBodyElement.querySelector('tr td.e-selected') : null;\n if (!isNullOrUndefined(selectedDate)) {\n selectedDate.classList.remove(FOCUSEDCELL);\n }\n else if (!isNullOrUndefined(focusedDate)) {\n focusedDate.classList.remove(FOCUSEDCELL);\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n var dayFormat = 'days.stand-alone.' + this.dayHeaderFormat.toLowerCase();\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue(dayFormat, getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n if (!isNullOrUndefined(cldrObj)) {\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n }\n return culShortNames;\n };\n CalendarBase.prototype.toCapitalize = function (text) {\n return !isNullOrUndefined(text) && text.length ? text[0].toUpperCase() + text.slice(1) : text;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n var shortNames = this.getCultureValues().length > 0 &&\n this.getCultureValues() ? this.shiftArray(((this.getCultureValues().length > 0 &&\n this.getCultureValues())), this.firstDayOfWeek) : null;\n if (!isNullOrUndefined(shortNames)) {\n for (var days = 0; days <= daysCount; days++) {\n html += '' + this.toCapitalize(shortNames[days]) + '';\n }\n }\n html = '' + html + '';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n this.todayElement.setAttribute('aria-label', this.l10.getConstant('today'));\n this.todayElement.setAttribute('tabindex', '0');\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = this.createElement('button', { attrs: { role: 'button' } });\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = this.createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function (id, ref, keyConfig, moduleName) {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n };\n CalendarBase.prototype.dateWireEvents = function (id, ref, keyConfig, moduleName) {\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, keyConfig);\n this.serverModuleName = moduleName;\n };\n CalendarBase.prototype.todayButtonClick = function (e, value, isCustomDate) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date(this.checkValue(value)), isCustomDate);\n }\n else {\n this.navigateTo('Month', new Date(this.checkValue(value)), isCustomDate);\n }\n }\n };\n CalendarBase.prototype.resetCalendar = function () {\n this.calendarElement && detach(this.calendarElement);\n this.tableBodyElement && detach(this.tableBodyElement);\n this.table && detach(this.table);\n this.tableHeadElement && detach(this.tableHeadElement);\n this.nextIcon && detach(this.nextIcon);\n this.previousIcon && detach(this.previousIcon);\n this.footer && detach(this.footer);\n this.todayElement = null;\n this.renderDayCellArgs = null;\n this.calendarElement = this.tableBodyElement = this.footer = this.tableHeadElement =\n this.nextIcon = this.previousIcon = this.table = null;\n };\n CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n if (this.calendarElement === null && e.action === 'escape') {\n return;\n }\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate;\n if (multiSelection) {\n if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n selectedDate = focusedDate;\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n var view = this.getViewNumber(this.currentView());\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n if (this.getModuleName() !== 'daterangepicker' && !isNullOrUndefined(e.target) &&\n e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n this.keyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n }\n break;\n case 'moveRight':\n if (this.getModuleName() !== 'daterangepicker' && !isNullOrUndefined(e.target) &&\n e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n this.keyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n }\n break;\n case 'moveUp':\n if (this.getModuleName() !== 'daterangepicker' && !isNullOrUndefined(e.target) &&\n e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n if (view === 0) {\n this.keyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n }\n break;\n case 'moveDown':\n if (this.getModuleName() !== 'daterangepicker' && !isNullOrUndefined(e.target) &&\n e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n if (view === 0) {\n this.keyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.keyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n }\n break;\n case 'select':\n if (e.target === this.headerTitleElement) {\n this.navigateTitle(e);\n }\n else if (e.target === this.previousIcon && !e.target.className.includes(DISABLED)) {\n this.navigatePrevious(e);\n }\n else if (e.target === this.nextIcon && !e.target.className.includes(DISABLED)) {\n this.navigateNext(e);\n }\n else if (e.target === this.todayElement && !e.target.className.includes(DISABLED)) {\n this.todayButtonClick(e, value);\n if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n this.element.focus();\n }\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n // eslint-disable-next-line radix\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n this.element.focus();\n }\n }\n else {\n if (!e.target.className.includes(DISABLED)) {\n this.contentClick(null, --view, (element), value);\n }\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) && !levelRestrict || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n case 'tab':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.todayElement) {\n e.preventDefault();\n if (this.isAngular) {\n this.inputElement.focus();\n }\n else {\n this.element.focus();\n }\n this.hide();\n }\n break;\n case 'shiftTab':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.headerTitleElement) {\n e.preventDefault();\n this.element.focus();\n this.hide();\n }\n break;\n case 'escape':\n if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && (e.target === this.headerTitleElement || e.target === this.previousIcon || e.target === this.nextIcon || e.target === this.todayElement)) {\n this.hide();\n }\n break;\n }\n };\n CalendarBase.prototype.keyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date(this.checkValue(this.currentDate));\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.calendarMode === 'Gregorian') {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n else {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n *\n * @param {Date} value - Specifies value of date.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value, isCustomDate) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(this.currentDate, value, null, null, isCustomDate, e);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n this.createContentHeader();\n if (this.calendarMode === 'Gregorian') {\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(tdEles, numCells, MONTH, e, value);\n }\n };\n CalendarBase.prototype.renderDays = function (currentDate, value, multiSelection, values, isTodayDate, e) {\n var tdEles = [];\n var cellsCount = 42;\n var todayDate = isTodayDate ? new Date(+currentDate) : this.getDate(new Date(), this.timezone);\n var localDate = new Date(this.checkValue(currentDate));\n var minMaxDate;\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.createElement('td', { className: CELL });\n var weekAnchor = this.createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n // 6 days are added to get Last day of the week and 3 days are added to get middle day of the week.\n var numberOfDays = this.weekRule === 'FirstDay' ? 6 : (this.weekRule === 'FirstFourDayWeek' ? 3 : 0);\n var finalDate = new Date(localDate.getFullYear(), localDate.getMonth(), (localDate.getDate() + numberOfDays));\n weekAnchor.textContent = '' + this.getWeek(finalDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { format: 'd', type: 'date', skeleton: 'yMd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n dayLink.setAttribute('aria-disabled', 'true');\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n var selectDate = new Date(this.checkValue(value));\n var argsDate = new Date(this.checkValue(argument.date));\n if (multiSelection) {\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n if (localDateString === tempDateString) {\n values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (selectDate && +selectDate === +argsDate) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n dayLink.setAttribute('aria-disabled', 'true');\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n var currentTarget = void 0;\n if (!isNullOrUndefined(e) && e.type === 'click') {\n currentTarget = e.currentTarget;\n }\n if (multiSelection && !isNullOrUndefined(values) && !disabledCls) {\n for (var tempValue = 0; tempValue < values.length; tempValue++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(localDate, formatOptions);\n var tempDateString = this.globalize.formatDate(values[tempValue], formatOptions);\n if ((localDateString === tempDateString && this.getDateVal(localDate, values[tempValue]))\n || (this.getDateVal(localDate, value))) {\n addClass([tdEle], SELECTED);\n }\n if (!isNullOrUndefined(currentTarget) && currentTarget.innerText === tdEle.innerText &&\n this.previousDates && tdEle.classList.contains(SELECTED) && currentTarget.classList.contains(SELECTED)) {\n removeClass([tdEle], SELECTED);\n this.previousDates = false;\n var copyValues = this.copyValues(values);\n for (var i = 0; i < copyValues.length; i++) {\n var type_1 = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions_1 = { format: null, type: 'date', skeleton: 'short', calendar: type_1 };\n var localDateString_1 = this.globalize.formatDate(date, formatOptions_1);\n var tempDateString_1 = this.globalize.formatDate(copyValues[i], formatOptions_1);\n if (localDateString_1 === tempDateString_1) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n values.splice(index, 1);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (values.length <= 0) {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n if (!isNullOrUndefined(date) && date.getFullYear() === todayDate.getFullYear() && date.getMonth() === todayDate.getMonth()\n && date.getDate() === todayDate.getDate()) {\n addClass([tdEle], TODAY);\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n else {\n // eslint-disable-next-line radix\n if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n // eslint-disable-next-line radix\n if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n }\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date(this.checkValue(this.currentDate));\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date(this.checkValue(this.min)).getFullYear();\n var minMonth = new Date(this.checkValue(this.min)).getMonth();\n var maxYr = new Date(this.checkValue(this.max)).getFullYear();\n var maxMonth = new Date(this.checkValue(this.max)).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n var title = this.globalize.formatDate(localDate, { type: 'date', format: 'MMM y' });\n dayLink.textContent = this.toCapitalize(this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'MMM'\n }));\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n dayLink.setAttribute('title', '' + title);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date(this.checkValue(this.currentDate));\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date(localDate.setFullYear((localYr - localYr % 10)));\n var endYr = new Date(localDate.setFullYear((localYr - localYr % 10 + (10 - 1))));\n var startFullYr = startYr.getFullYear();\n var endFullYr = endYr.getFullYear();\n var startHdrYr = this.globalize.formatDate(startYr, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n var endHdrYr = this.globalize.formatDate(endYr, { format: null, type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n if ((year < startFullYr) || (year > endFullYr)) {\n addClass([tdEle], OTHERDECADE);\n dayLink.setAttribute('aria-disabled', 'true');\n if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n }\n else if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n dayLink.setAttribute('title', '' + dayLink.textContent);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: type };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value;\n if (!isNullOrUndefined(date)) {\n value = date.valueOf();\n }\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false' }\n };\n return this.createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.currentView() !== 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date, view) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n if (view !== 2) {\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n }\n else {\n return this.findLastDay(this.firstDay(lastDate));\n }\n };\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.currentView() === 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = this.createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.createElement('tr');\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].\n classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n if (this.calendarMode === 'Gregorian') {\n this.iconHandler();\n }\n else {\n this.islamicModule.islamicIconHandler();\n }\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.currentDate = d;\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.islamicPreviousHeader = this.headerElement.textContent;\n var islamicDate = this.islamicModule.getIslamicDate(d);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, islamicDate.month, 1);\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n CalendarBase.prototype.switchView = function (view, e, multiSelection, isCustomDate) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e, null, isCustomDate);\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n *\n * @returns {void}\n\n */\n CalendarBase.prototype.requiredModules = function () {\n var modules = [];\n if (this.calendarMode === 'Islamic') {\n modules.push({ args: [this], member: 'islamic', name: 'Islamic' });\n }\n return modules;\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarBaseModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarBaseModel} oldProp - Returns the previous property value of the component.\n * @param {boolean} multiSelection - - Specifies whether multiple date selection is enabled or not.\n * @param {Date[]} values - Specifies the dates.\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'dayHeaderFormat':\n this.getCultureValues();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n }\n this.adjustLongHeaderSize();\n break;\n case 'min':\n case 'max':\n this.rangeValidation(this.min, this.max);\n if (prop === 'min') {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n }\n else {\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n }\n this.setProperties({ start: this.currentView() }, true);\n if (this.tableBodyElement) {\n detach(this.tableBodyElement);\n }\n this.minMaxUpdate();\n if (multiSelection) {\n this.validateValues(multiSelection, values);\n }\n if (this.getModuleName() !== 'datepicker') {\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentBody();\n }\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n else {\n if ((this.footer) && (this.todayElement) && this.todayElement.classList.contains('e-disabled')) {\n removeClass([this.todayElement], DISABLED);\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n }\n break;\n case 'start':\n case 'depth':\n case 'weekNumber':\n case 'firstDayOfWeek':\n case 'weekRule':\n this.checkView();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n if (this.getModuleName() === 'calendar') {\n var l10nLocale = { today: 'Today' };\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n }\n this.l10.setLocale(this.locale);\n if (this.showTodayButton) {\n this.updateFooter();\n }\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n if (!isNullOrUndefined(this.todayElement) && !isNullOrUndefined(this.footer)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n /**\n * values property updated with considered disabled dates of the calendar.\n *\n * @param {boolean} multiSelection - Specifies whether multiple date selection is enabled.\n * @param {Date[]} values - Specifies the dates to validate.\n * @returns {void}\n */\n CalendarBase.prototype.validateValues = function (multiSelection, values) {\n if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n var copyValues = this.copyValues(values);\n for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n var tempValue = copyValues[skipIndex];\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var tempValueString = void 0;\n if (this.calendarMode === 'Gregorian') {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n }\n else {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'dateTime', skeleton: 'full', calendar: 'islamic' });\n }\n var minFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var minStringValue = this.globalize.formatDate(this.min, minFormatOption);\n var minString = minStringValue;\n var maxFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var maxStringValue = this.globalize.formatDate(this.max, maxFormatOption);\n var maxString = maxStringValue;\n if (+new Date(tempValueString) < +new Date(minString) ||\n +new Date(tempValueString) > +new Date(maxString)) {\n copyValues.splice(skipIndex, 1);\n skipIndex = -1;\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n if (!isNullOrUndefined(this.tableBodyElement)) {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n }\n };\n CalendarBase.prototype.copyValues = function (values) {\n var copyValues = [];\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n copyValues.push(new Date(+values[index]));\n }\n }\n return copyValues;\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n var dayFormatOptions;\n var monthFormatOptions;\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n if (this.calendarMode === 'Gregorian') {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM', calendar: type });\n monthFormatOptions = globalize.formatDate(date, {\n format: null, type: 'dateTime', skeleton: 'y', calendar: type\n });\n }\n else {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'MMMM y', calendar: type });\n monthFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'y', calendar: type });\n }\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = this.toCapitalize(dayFormatOptions);\n break;\n case 'months':\n this.headerTitleElement.textContent = monthFormatOptions;\n }\n };\n CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var title;\n var view = this.currentView();\n if (view === 'Month') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full', calendar: type });\n }\n else if (view === 'Year') {\n if (type !== 'islamic') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'yMMMM', calendar: type });\n }\n else {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'GyMMM', calendar: type });\n }\n }\n else {\n title = this.globalize.formatDate(this.currentDate, {\n format: null, type: 'date', skeleton: 'y', calendar: type\n });\n }\n if (selectedEle || focusedEle) {\n if (!isNullOrUndefined(selectedEle)) {\n selectedEle.setAttribute('aria-selected', 'true');\n }\n (focusedEle || selectedEle).setAttribute('aria-label', title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n CalendarBase.prototype.iconHandler = function () {\n new Date(this.checkValue(this.currentDate)).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar' && this.element) {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement && this.element) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar' && this.element) {\n if (!isNullOrUndefined(this.headerTitleElement)) {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n }\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n if (!isNullOrUndefined(this.calendarEleCopy.getAttribute('tabindex'))) {\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.element.removeAttribute('tabindex');\n }\n }\n if (this.element) {\n this.element.innerHTML = '';\n }\n this.todayElement = null;\n this.tableBodyElement = null;\n this.todayButtonEvent = null;\n this.renderDayCellArgs = null;\n this.headerElement = null;\n this.nextIcon = null;\n this.table = null;\n this.tableHeadElement = null;\n this.previousIcon = null;\n this.headerTitleElement = null;\n this.footer = null;\n this.contentElement = null;\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n !Browser.isDevice && e.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.previous();\n }\n else {\n this.islamicModule.islamicPrevious();\n }\n this.triggerNavigate(e);\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n !Browser.isDevice && eve.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.next();\n }\n else {\n this.islamicModule.islamicNext();\n }\n this.triggerNavigate(eve);\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n */\n CalendarBase.prototype.navigateTo = function (view, date, isCustomDate) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n if (+date >= +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view), null, null, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n */\n CalendarBase.prototype.currentView = function () {\n if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.' + this.dayHeaderFormat.toLowerCase();\n var islamicFormat = '.dates.calendars.islamic.days.format.' + this.dayHeaderFormat.toLowerCase();\n var mainVal = 'main.';\n if (this.calendarMode === 'Gregorian') {\n return getValue(mainVal + '' + this.locale + gregorianFormat, ld);\n }\n else {\n return getValue('main.' + '' + this.locale + islamicFormat, ld);\n }\n };\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date(this.checkValue(d)).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n return Math.ceil((((currentDate - date) + dayMilliSeconds) / dayMilliSeconds) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, (islamicDate.month) + i, 1);\n }\n };\n CalendarBase.prototype.addYears = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year + i, (islamicDate.month), 1);\n }\n };\n CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: type };\n // eslint-disable-next-line radix\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n CalendarBase.prototype.adjustLongHeaderSize = function () {\n removeClass([this.element], DAYHEADERLONG);\n if (this.dayHeaderFormat === 'Wide') {\n addClass([this.getModuleName() === 'calendar' ? this.element : this.calendarElement], DAYHEADERLONG);\n }\n };\n CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n var element = node || e.currentTarget;\n this.isDateSelected = false;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n if (multiSelection && !this.checkPresentDate(date, values)) {\n var copyValues = this.copyValues(values);\n if (!isNullOrUndefined(values) && copyValues.length > 0) {\n copyValues.push(new Date(this.checkValue(date)));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: values[values.length - 1] }, true);\n }\n else {\n this.setProperties({ values: [new Date(this.checkValue(date))] }, true);\n }\n }\n else {\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n }\n this.currentDate = new Date(this.checkValue(date));\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDCELL))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDCELL)], FOCUSEDCELL);\n }\n if (multiSelection) {\n var copyValues = this.copyValues(values);\n var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n for (var index = 0; index < collection.length; index++) {\n var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n if (collection[index] === tempElement) {\n removeClass([collection[index]], FOCUSEDDATE);\n }\n if (collection[index] === selectedElement &&\n !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n removeClass([collection[index]], SELECTED);\n }\n }\n if (element.classList.contains(SELECTED)) {\n removeClass([element], SELECTED);\n for (var i = 0; i < copyValues.length; i++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(date, formatOptions);\n var tempDateString = this.globalize.formatDate(copyValues[i], formatOptions);\n if (localDateString === tempDateString) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n addClass([element], FOCUSEDDATE);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n addClass([element], SELECTED);\n }\n }\n else {\n addClass([element], SELECTED);\n }\n this.isDateSelected = true;\n };\n CalendarBase.prototype.checkPresentDate = function (dates, values) {\n var previousValue = false;\n if (!isNullOrUndefined(values)) {\n for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var localDateString = this.globalize.formatDate(dates, {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n var tempDateString = this.globalize.formatDate(values[checkPrevious], {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n if (localDateString === tempDateString) {\n previousValue = true;\n }\n }\n }\n return previousValue;\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.isMonthYearRange = function (date) {\n if (this.calendarMode === 'Gregorian') {\n return date.getMonth() >= this.min.getMonth()\n && date.getFullYear() >= this.min.getFullYear()\n && date.getMonth() <= this.max.getMonth()\n && date.getFullYear() <= this.max.getFullYear();\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n return islamicDate.month >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).month\n && islamicDate.year >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).year\n && islamicDate.month <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).month\n && islamicDate.year <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).year;\n }\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = void 0;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(value);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n // eslint-disable-next-line radix\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var tmpDate = new Date(this.checkValue(d));\n date = 28;\n var month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n this.currentDate = new Date(this.checkValue(value));\n }\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n CalendarBase.prototype.checkValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n CalendarBase.prototype.checkView = function () {\n if (this.start !== 'Decade' && this.start !== 'Year') {\n this.setProperties({ start: 'Month' }, true);\n }\n if (this.depth !== 'Decade' && this.depth !== 'Year') {\n this.setProperties({ depth: 'Month' }, true);\n }\n if (this.getViewNumber(this.depth) > this.getViewNumber(this.start)) {\n this.setProperties({ depth: 'Month' }, true);\n }\n };\n CalendarBase.prototype.getDate = function (date, timezone) {\n if (timezone) {\n date = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n }\n return date;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], CalendarBase.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('FirstDay')\n ], CalendarBase.prototype, \"weekRule\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], CalendarBase.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarModel} options - Specifies the Calendar model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.render = function () {\n if (this.calendarMode === 'Islamic' && this.islamicModule === undefined) {\n throwError('Requires the injectable Islamic modules to render Calendar in Islamic mode');\n }\n if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var tempValues = [];\n var copyValues = [];\n for (var limit = 0; limit < this.values.length; limit++) {\n if (tempValues.indexOf(+this.values[limit]) === -1) {\n tempValues.push(+this.values[limit]);\n copyValues.push(this.values[limit]);\n }\n }\n this.setProperties({ values: copyValues }, true);\n for (var index = 0; index < this.values.length; index++) {\n if (!this.checkDateValue(this.values[index])) {\n if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date(this.checkValue(this.values[index])))) {\n var copyDate = new Date(this.checkValue(this.values[index]));\n this.values.splice(index, 1);\n this.values.splice(index, 0, copyDate);\n }\n else {\n this.values.splice(index, 1);\n }\n }\n }\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n this.previousValues = this.values.length;\n }\n this.validateDate();\n this.minMaxUpdate();\n if (this.getModuleName() === 'calendar') {\n this.setEnable(this.enabled);\n this.setClass(this.cssClass);\n }\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n this.setTimeZone(this.serverTimezoneOffset);\n }\n this.renderComplete();\n };\n Calendar.prototype.setEnable = function (enable) {\n if (!enable) {\n addClass([this.element], DISABLED);\n }\n else {\n removeClass([this.element], DISABLED);\n }\n };\n Calendar.prototype.setClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCssClass) && oldCssClass !== '') {\n removeClass([this.element], oldCssClass.split(' '));\n }\n if (!isNullOrUndefined(newCssClass)) {\n addClass([this.element], newCssClass.split(' '));\n }\n };\n Calendar.prototype.isDayLightSaving = function () {\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n Calendar.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var serverTimezoneDiff = offsetValue;\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date(this.value.getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.setProperties({ value: null }, true);\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(this.checkValue(this.value))) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date(this.checkValue(this.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.generateTodayVal = function (value) {\n var tempValue = new Date();\n if (!isNullOrUndefined(this.timezone)) {\n tempValue = _super.prototype.getDate.call(this, tempValue, this.timezone);\n }\n if (value && isNullOrUndefined(this.timezone)) {\n tempValue.setHours(value.getHours());\n tempValue.setMinutes(value.getMinutes());\n tempValue.setSeconds(value.getSeconds());\n tempValue.setMilliseconds(value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n return tempValue;\n };\n Calendar.prototype.todayButtonClick = function (e) {\n if (this.showTodayButton) {\n var tempValue = this.generateTodayVal(this.value);\n this.setProperties({ value: tempValue }, true);\n this.isTodayClicked = true;\n this.todayButtonEvent = e;\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n copyValues.push(tempValue);\n this.setProperties({ values: copyValues });\n }\n }\n _super.prototype.todayButtonClick.call(this, e, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n this.checkView();\n _super.prototype.preRender.call(this, this.value);\n };\n /**\n * @returns {void}\n\n */\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n this.previousDateTime = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e, value, isCustomDate) {\n _super.prototype.renderMonths.call(this, e, this.value, isCustomDate);\n };\n Calendar.prototype.renderDays = function (currentDate, value, isMultiSelect, values, isCustomDate, e) {\n var tempDays = _super.prototype.renderDays.call(this, currentDate, this.value, this.isMultiSelection, this.values, isCustomDate, e);\n if (this.isMultiSelection) {\n _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n }\n return tempDays;\n };\n Calendar.prototype.renderYears = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderYears.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderYears(e, this.value);\n }\n };\n Calendar.prototype.renderDecades = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderDecades.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderDecade(e, this.value);\n }\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(elements, count, classNm, e, this.value);\n }\n this.changedArgs = { value: this.value, values: this.values };\n e && e.type === 'click' && e.currentTarget.classList.contains(OTHERMONTH) ? this.changeHandler(e) : this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n this.isPopupClicked = true;\n if (eve.classList.contains(OTHERMONTH)) {\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (copyValues.toString().indexOf(this.getIdValue(e, null).toString()) === -1) {\n copyValues.push(this.getIdValue(e, null));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n else {\n this.previousDates = true;\n }\n }\n else {\n this.setProperties({ value: this.getIdValue(e, null) }, true);\n }\n }\n var storeView = this.currentView();\n _super.prototype.clickHandler.call(this, e, this.value);\n if (this.isMultiSelection && this.currentDate !== this.value &&\n !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n };\n Calendar.prototype.switchView = function (view, e, isMultiSelection, isCustomDate) {\n _super.prototype.switchView.call(this, view, e, this.isMultiSelection, isCustomDate);\n };\n /**\n * To get component name\n *\n * @returns {string} Return the component name.\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value', 'values'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n this.rangeValidation(this.min, this.max);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (this.isDateSelected) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date(this.checkValue(newProp.value)) }, true);\n }\n else {\n newProp.value = new Date(this.checkValue(newProp.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.update();\n }\n break;\n case 'values':\n if (this.isDateSelected) {\n if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n this.setProperties({ values: null }, true);\n }\n else {\n var copyValues = this.copyValues(this.values);\n for (var index = 0; index < copyValues.length; index++) {\n var tempDate = copyValues[index];\n if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n copyValues.push(tempDate);\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.values.length > 0) {\n this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n }\n }\n this.validateValues(this.isMultiSelection, this.values);\n this.update();\n }\n break;\n case 'isMultiSelection':\n if (this.isDateSelected) {\n this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n this.update();\n }\n break;\n case 'enabled':\n this.setEnable(this.enabled);\n break;\n case 'cssClass':\n if (this.getModuleName() === 'calendar') {\n this.setClass(newProp.cssClass, oldProp.cssClass);\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n this.changedArgs = null;\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n\n */\n Calendar.prototype.navigateTo = function (view, date, isCustomDate) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * This method is used to add the single or multiple dates to the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n * @returns {void}\n\n */\n Calendar.prototype.addDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number') {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && (dates).length > 0) {\n var tempDates = dates;\n for (var i = 0; i < tempDates.length; i++) {\n if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push(tempDates[i]);\n }\n else {\n copyValues = [new Date(+tempDates[i])];\n }\n }\n }\n }\n else {\n if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push((dates));\n }\n else {\n copyValues = [new Date(+dates)];\n }\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.validateValues(this.isMultiSelection, copyValues);\n this.update();\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * This method is used to remove the single or multiple dates from the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n * @returns {void}\n\n */\n Calendar.prototype.removeDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && ((dates).length > 0)) {\n var tempDates = dates;\n for (var index = 0; index < tempDates.length; index++) {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +tempDates[index]) {\n copyValues.splice(i, 1);\n }\n }\n }\n }\n else {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +dates) {\n copyValues.splice(i, 1);\n }\n }\n }\n this.setProperties({ values: copyValues }, false);\n this.update();\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * To set custom today date in calendar\n *\n * @param {Date} date - Specifies date value to be set.\n * @private\n * @returns {void}\n */\n Calendar.prototype.setTodayDate = function (date) {\n var todayDate = new Date(+date);\n this.setProperties({ value: todayDate }, true);\n _super.prototype.todayButtonClick.call(this, null, todayDate, true);\n };\n Calendar.prototype.update = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Calendar.prototype.changeEvent = function (e) {\n if ((this.value && this.value.valueOf()) !== (this.previousDate && +this.previousDate.valueOf())\n || this.isMultiSelection) {\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = new Date(+this.value);\n }\n };\n Calendar.prototype.triggerChange = function (e) {\n if (!isNullOrUndefined(this.todayButtonEvent) && this.isTodayClicked) {\n e = this.todayButtonEvent;\n this.isTodayClicked = false;\n }\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n if (!this.isMultiSelection && +this.value !== Number.NaN && (!isNullOrUndefined(this.value) &&\n !isNullOrUndefined(this.previousDate) || this.previousDate === null\n && !isNaN(+this.value))) {\n this.changeEvent(e);\n }\n else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n this.changeEvent(e);\n this.previousValues = this.values.length;\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Calendar.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, extend, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes, Touch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar CLEARICON = 'e-clear-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar OFFSETVALUE = 4;\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar NONEDIT = 'e-non-edit';\nvar containerAttr = ['title', 'class', 'style'];\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {DatePickerModel} options - Specifies the DatePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isDateIconClicked = false;\n _this.isAltKeyPressed = false;\n _this.isInteracted = true;\n _this.invalidValueString = null;\n _this.checkPreviousValue = null;\n _this.maskedDateValue = '';\n _this.preventChange = false;\n _this.isIconClicked = false;\n _this.isDynamicValueChanged = false;\n _this.moduleName = _this.getModuleName();\n _this.isFocused = false;\n _this.isBlur = false;\n _this.isKeyAction = false;\n _this.datepickerOptions = options;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n this.setTimeZone(this.serverTimezoneOffset);\n };\n DatePicker.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = offsetValue;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n this.updateInput();\n }\n };\n DatePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n DatePicker.prototype.setAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.updateIconState();\n };\n DatePicker.prototype.updateIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n else {\n addClass([this.inputWrapper.container], [NONEDIT]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n };\n DatePicker.prototype.initialize = function () {\n this.checkInvalidValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.createInput();\n this.updateHtmlAttributeToWrapper();\n this.setAllowEdit();\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInput(true);\n this.updateInputValue(this.maskedDateValue);\n }\n else if (!this.enableMask) {\n this.updateInput(true);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNullOrUndefined(this.value) ? new Date(+this.value) : null;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputValueCopy = this.value;\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-expanded': 'false',\n 'role': 'combobox', 'autocomplete': 'off', 'autocorrect': 'off',\n 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-invalid': 'false', 'aria-label': this.getModuleName()\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: this.placeholder };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (this.fullScreenMode && Browser.isDevice) {\n this.cssClass += ' ' + 'e-popup-expand';\n }\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n var isBindClearAction = this.enableMask ? false : true;\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n bindClearAction: isBindClearAction,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n }, this.createElement);\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n Input.addAttributes({ 'aria-label': 'select', 'role': 'button' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n if (this.value && !this.isCalendar()) {\n this.disabledDates(isDynamic, isBlur);\n }\n if (isNaN(+new Date(this.checkValue(this.value)))) {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateString = this.globalize.formatDate(this.value, formatOptions);\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n this.updateInputValue(dateString);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n this.updateInputValue(dateString);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n else {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.updateInputValue(this.invalidValueString);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n this.updateIconState();\n };\n DatePicker.prototype.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.checkStringValue = function (val) {\n var returnDate = null;\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatOptions));\n if (isNullOrUndefined(returnDate) && (this.getModuleName() === 'datetimepicker')) {\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatDateTime));\n }\n return returnDate;\n };\n DatePicker.prototype.checkInvalidValue = function (value) {\n if (!(value instanceof Date) && !isNullOrUndefined(value)) {\n var valueDate = null;\n var valueString = value;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n var invalid = false;\n if (typeof valueString !== 'string') {\n valueString = null;\n invalid = true;\n }\n else {\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n valueDate = this.checkStringValue(valueString);\n if (!valueDate) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n invalid = true;\n }\n else {\n valueDate = new Date(valueString);\n }\n }\n }\n if (invalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n }\n else {\n this.setProperties({ value: valueDate }, true);\n }\n }\n };\n DatePicker.prototype.bindInputEvent = function () {\n if (!isNullOrUndefined(this.formatString) || this.enableMask) {\n if (this.enableMask || this.formatString.indexOf('y') === -1) {\n EventHandler.add(this.inputElement, 'input', this.inputHandler, this);\n }\n else {\n EventHandler.remove(this.inputElement, 'input', this.inputHandler);\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'keyup', this.keyupHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n this.bindInputEvent();\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n }\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DatePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Home':\n case 'End':\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n if (e.code !== 'Delete') {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n DatePicker.prototype.unBindEvents = function () {\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler);\n }\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'keyup', this.keyupHandler);\n if (this.enableMask) {\n EventHandler.remove(this.inputElement, 'keydown', this.keydownHandler);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var value = this.inputElement.getAttribute('value');\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n value = '';\n this.inputValueCopy = null;\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: this.inputValueCopy }, true);\n this.restoreValue();\n if (this.inputElement) {\n this.updateInputValue(value);\n this.errorClass();\n }\n }\n };\n DatePicker.prototype.restoreValue = function () {\n this.currentDate = this.value ? this.value : new Date();\n this.previousDate = this.value;\n this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.globalize.formatDate(this.inputValueCopy, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n });\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.mouseUpHandler = function (e) {\n if (this.enableMask) {\n e.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n var clearedArgs = {\n event: event\n };\n this.trigger('cleared', clearedArgs);\n this.invalidValueString = '';\n this.updateInput();\n this.popupUpdate();\n this.changeEvent(event);\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n DatePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.interopAdaptor.invokeMethodAsync('OnDateIconClick');\n };\n DatePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n this.inputElement.blur();\n }\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n this.isIconClicked = false;\n };\n DatePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (!isNullOrUndefined(this.htmlAttributes[\"\" + key])) {\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.inputWrapper.container.getAttribute(key);\n if (!isNullOrUndefined(setStyle)) {\n if (setStyle.charAt(setStyle.length - 1) === ';') {\n setStyle = setStyle + this.htmlAttributes[\"\" + key];\n }\n else {\n setStyle = setStyle + ';' + this.htmlAttributes[\"\" + key];\n }\n }\n else {\n setStyle = this.htmlAttributes[\"\" + key];\n }\n this.inputWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n }\n };\n DatePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n DatePicker.prototype.updateCssClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newCssClass, [this.inputWrapper.container], oldCssClass);\n if (this.popupWrapper) {\n Input.setCssClass(newCssClass, [this.popupWrapper], oldCssClass);\n }\n };\n DatePicker.prototype.calendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n this.isFocused = true;\n if (!this.enabled) {\n return;\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n this.updateIconState();\n if (this.openOnFocus && !this.isIconClicked) {\n this.show();\n }\n };\n DatePicker.prototype.inputHandler = function () {\n this.isPopupClicked = false;\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.strictModeUpdate();\n if (this.inputElement.value === '' && isNullOrUndefined(this.value)) {\n this.invalidValueString = null;\n this.updateInputValue('');\n }\n this.isBlur = true;\n this.updateInput(false, true);\n this.isBlur = false;\n this.popupUpdate();\n this.changeTrigger(e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.calendarKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n this.isPopupClicked = false;\n };\n DatePicker.prototype.documentHandler = function (e) {\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(e.target)))) && e.type !== 'touchstart') {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper')) && !isNullOrUndefined(this.inputWrapper)\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))\n && (!target.classList.contains('e-dlg-overlay'))) {\n this.hide(e);\n this.focusOut();\n }\n else if (closest(target, '.e-datepicker.e-popup-wrapper')) {\n // Fix for close the popup when select the previously selected value.\n if (target.classList.contains('e-day')\n && !isNullOrUndefined(e.target.parentElement)\n && e.target.parentElement.classList.contains('e-selected')\n && closest(target, '.e-content')\n && closest(target, '.e-content').classList.contains('e-' + this.depth.toLowerCase())) {\n this.hide(e);\n }\n else if (closest(target, '.e-footer-container')\n && target.classList.contains('e-today')\n && target.classList.contains('e-btn')\n && (+new Date(+this.value) === +_super.prototype.generateTodayVal.call(this, this.value))) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n var clickedView = this.currentView();\n switch (e.action) {\n case 'altUpArrow':\n this.isAltKeyPressed = false;\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.isAltKeyPressed = true;\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.isCalendar()) {\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'tab':\n case 'shiftTab':\n {\n var start = this.inputElement.selectionStart;\n var end = this.inputElement.selectionEnd;\n if (this.enableMask && !this.popupObj && !this.readonly) {\n var length_1 = this.inputElement.value.length;\n if ((start === 0 && end === length_1) || (end !== length_1 && e.action === 'tab') || (start !== 0 && e.action === 'shiftTab')) {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n start = this.inputElement.selectionStart;\n end = this.inputElement.selectionEnd;\n }\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (this.enableMask) {\n this.inputElement.selectionStart = start;\n this.inputElement.selectionEnd = end;\n }\n if (e.action === 'tab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n e.preventDefault();\n this.headerTitleElement.focus();\n }\n if (e.action === 'shiftTab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n break;\n }\n default:\n this.defaultAction(e);\n // Fix for close the popup when select the previously selected value.\n if (e.action === 'select' && clickedView === this.depth) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.defaultAction = function (e) {\n this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n if (this.isCalendar()) {\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n }\n };\n DatePicker.prototype.popupUpdate = function () {\n if ((isNullOrUndefined(this.value)) && (!isNullOrUndefined(this.previousDate)) ||\n (((this.getModuleName() !== 'datetimepicker') && (+this.value !== +this.previousDate)) || ((this.getModuleName() === 'datetimepicker') && (+this.value !== +this.previousDateTime)))) {\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [SELECTED]);\n }\n }\n if (!isNullOrUndefined(this.value)) {\n if ((+this.value >= +this.min) && (+this.value <= +this.max)) {\n var targetdate = new Date(this.checkValue(this.value));\n _super.prototype.navigateTo.call(this, 'Month', targetdate);\n }\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n var pattern = /^y/;\n var charPattern = /[^a-zA-Z]/;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else if (!pattern.test(this.formatString) || charPattern.test(this.formatString)) {\n format = isNullOrUndefined(this.formatString) ? this.formatString : this.formatString.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n else {\n format = this.formatString;\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateOptions = formatOptions;\n }\n var date;\n if (typeof this.inputElement.value === 'string') {\n this.inputElement.value = this.inputElement.value.trim();\n }\n if ((this.getModuleName() === 'datetimepicker')) {\n if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n var modifiedValue = this.inputElement.value.replace(/(am|pm|Am|aM|pM|Pm)/g, function (match) { return match.toLocaleUpperCase(); });\n date = this.globalize.parseDate(modifiedValue, dateOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.parseDate(this.inputElement.value, formatOptions);\n }\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n date = (!isNullOrUndefined(date) && isNaN(+date)) ? null : date;\n if (!isNullOrUndefined(this.formatString) && this.inputElement.value !== '' && this.strictMode) {\n if ((this.isPopupClicked || (!this.isPopupClicked && this.inputElement.value === this.previousElementValue))\n && this.formatString.indexOf('y') === -1) {\n date.setFullYear(this.value.getFullYear());\n }\n }\n }\n // EJ2-35061 - To prevent change event from triggering twice when using strictmode and format property\n if ((this.getModuleName() === 'datepicker') && (this.value && !isNaN(+this.value)) && date) {\n date.setHours(this.value.getHours(), this.value.getMinutes(), this.value.getSeconds(), this.value.getMilliseconds());\n }\n if (this.strictMode && date) {\n this.updateInputValue(this.globalize.formatDate(date, dateOptions));\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === (this.enableMask ? this.maskedDateValue : '')) {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER, id: this.inputElement.id + '_options' });\n this.popupWrapper.setAttribute('aria-label', this.element.id);\n this.popupWrapper.setAttribute('role', 'dialog');\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : (this.enableRtl ? { X: 'right', Y: 'bottom' } : { X: 'left', Y: 'bottom' }),\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : (this.enableRtl ? { X: 'fit', Y: 'flip' } : { X: 'flip', Y: 'flip' }),\n open: function () {\n if (Browser.isDevice && _this.fullScreenMode) {\n _this.iconRight = parseInt(window.getComputedStyle(_this.calendarElement.querySelector('.e-header.e-month .e-prev')).marginRight, 10) > 16 ? true : false;\n _this.touchModule = new Touch(_this.calendarElement.querySelector('.e-content.e-month'), {\n swipe: _this.CalendarSwipeHandler.bind(_this)\n });\n EventHandler.add(_this.calendarElement.querySelector('.e-content.e-month'), 'touchstart', _this.TouchStartHandler, _this);\n }\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement) {\n _this.defaultKeyConfigs = extend(_this.defaultKeyConfigs, _this.keyConfigs);\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n }\n }\n }, close: function () {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n _this.resetCalendar();\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.preventArgs = null;\n _this.calendarKeyboardModules = null;\n _this.setAriaAttributes();\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n this.popupObj.element.className += ' ' + this.cssClass;\n this.setAriaAttributes();\n };\n DatePicker.prototype.CalendarSwipeHandler = function (e) {\n var direction = 0;\n if (this.iconRight) {\n switch (e.swipeDirection) {\n case 'Left':\n direction = 1;\n break;\n case 'Right':\n direction = -1;\n break;\n default:\n break;\n }\n }\n else {\n switch (e.swipeDirection) {\n case 'Up':\n direction = 1;\n break;\n case 'Down':\n direction = -1;\n break;\n default:\n break;\n }\n }\n if (this.touchStart) {\n if (direction === 1) {\n this.navigateNext(e);\n }\n else if (direction === -1) {\n this.navigatePrevious(e);\n }\n this.touchStart = false;\n }\n };\n DatePicker.prototype.TouchStartHandler = function (e) {\n this.touchStart = true;\n };\n DatePicker.prototype.setAriaDisabled = function () {\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n };\n DatePicker.prototype.modelHeader = function () {\n var dateOptions;\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n var h2 = this.createElement('div');\n var daySpan = this.createElement('span', { className: 'e-model-day' });\n var monthSpan = this.createElement('span', { className: 'e-model-month' });\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'y', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'y', skeleton: 'dateTime', calendar: 'islamic' };\n }\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'E', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'E', skeleton: 'dateTime', calendar: 'islamic' };\n }\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions) + ', ';\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime', calendar: 'islamic' };\n }\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.fullScreenMode) {\n var modelCloseIcon = this.createElement('span', { className: 'e-popup-close' });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelCloseHandler, this);\n var modelTodayButton = this.calendarElement.querySelector('button.e-today');\n h2.classList.add('e-day-wrapper');\n modelTodayButton.classList.add('e-outline');\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTodayButton);\n }\n if (!this.fullScreenMode) {\n modelHeader.appendChild(yearHeading);\n }\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.modelCloseHandler = function (e) {\n this.hide();\n };\n DatePicker.prototype.changeTrigger = function (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n if (this.isDynamicValueChanged && this.isCalendar()) {\n this.popupUpdate();\n }\n this.changedArgs.value = this.value;\n this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNaN(+new Date(this.checkValue(this.value))) ? new Date(this.checkValue(this.value)) : null;\n this.isInteracted = true;\n }\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.keyupHandler = function (e) {\n this.isKeyAction = (this.inputElement.value !== this.previousElementValue) ? true : false;\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (!this.isIconClicked && !(this.isBlur || this.isKeyAction)) {\n this.selectCalendar(event);\n }\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = this.isInteracted;\n if (!this.isDynamicValueChanged) {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = this.value && new Date(+this.value);\n if (!this.isDynamicValueChanged) {\n this.hide(event);\n }\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n else if (event) {\n this.hide(event);\n }\n this.isKeyAction = false;\n };\n DatePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.calendarMode === 'Islamic') {\n modules.push({ args: [this], member: 'islamic', name: 'Islamic' });\n }\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else {\n tempFormat = this.formatString;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!isNullOrUndefined(date)) {\n this.updateInputValue(date);\n if (this.enableMask) {\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n }\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Shows the Calendar.\n *\n * @returns {void}\n\n */\n DatePicker.prototype.show = function (type, e) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +new Date(this.checkValue(this.min))\n && +this.value <= +new Date(this.checkValue(this.max)))) {\n outOfRange = new Date(this.checkValue(this.value));\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n if (Browser.isDevice) {\n this.mobilePopupWrapper = this.createElement('div', { className: 'e-datepick-mob-popup-wrap' });\n document.body.appendChild(this.mobilePopupWrapper);\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n appendTo: Browser.isDevice ? this.mobilePopupWrapper : document.body\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (prevent_1 && !_this.preventArgs.cancel) {\n addClass(_this.inputWrapper.buttons, ACTIVE);\n _this.preventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupObj.refreshPosition(_this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _super.prototype.setOverlayIndex.call(_this, _this.mobilePopupWrapper, _this.popupObj.element, _this.modal, Browser.isDevice);\n _this.setAriaAttributes();\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.popupObj = null;\n }\n if (!isNullOrUndefined(_this.inputElement) && _this.inputElement.value === '') {\n if (!isNullOrUndefined(_this.tableBodyElement) && _this.tableBodyElement.querySelectorAll('td.e-selected').length > 0) {\n addClass([_this.tableBodyElement.querySelector('td.e-selected')], FOCUSEDDATE);\n removeClass(_this.tableBodyElement.querySelectorAll('td.e-selected'), SELECTED);\n }\n }\n EventHandler.add(document, 'mousedown touchstart', _this.documentHandler, _this);\n });\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.mobilePopupWrapper.appendChild(dlgOverlay);\n }\n }\n };\n /**\n * Hide the Calendar.\n *\n * @returns {void}\n\n */\n DatePicker.prototype.hide = function (event) {\n var _this = this;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n var eventArgs = this.preventArgs;\n if (this.isCalendar()) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.closeEventCallback(prevent_2, eventArgs);\n });\n }\n else {\n this.closeEventCallback(prevent_2, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n DatePicker.prototype.closeEventCallback = function (prevent, eventArgs) {\n this.preventArgs = eventArgs;\n if (this.isCalendar() && (prevent && !this.preventArgs.cancel)) {\n this.popupObj.hide();\n this.isAltKeyPressed = false;\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(this.mobilePopupWrapper) &&\n (prevent && (isNullOrUndefined(this.preventArgs) || !this.preventArgs.cancel))) {\n this.mobilePopupWrapper.remove();\n this.mobilePopupWrapper = null;\n }\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n /* eslint-disable jsdoc/require-param */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n /* eslint-enable jsdoc/require-param */\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.blur();\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the DatePicker.\n *\n * @returns {string}\n\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Navigates to specified month or year or decade view of the DatePicker.\n *\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns {void}\n\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DatePicker.prototype.destroy = function () {\n this.unBindEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n _super.prototype.destroy.call(this);\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n if (!isNullOrUndefined(this.keyboardModules)) {\n this.keyboardModules.destroy();\n }\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-label': this.getModuleName()\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (!isNullOrUndefined(this.inputElementCopy.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n if (!isNullOrUndefined(this.inputWrapper)) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n }\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n if (!isNullOrUndefined(this.inputWrapper)) {\n detach(this.inputWrapper.container);\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n this.inputWrapper = null;\n this.keyboardModules = null;\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n var prop = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n prop[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < prop.length; i++) {\n if (isNullOrUndefined(this.inputElementCopy.getAttribute(prop[i]))) {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop[i]);\n }\n else {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = this.inputElementCopy.getAttribute(prop[i]);\n }\n this.inputElement.setAttribute(prop[i], this.inputElementCopy.getAttribute(prop[i]));\n }\n }\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputElementCopy = this.element.cloneNode(true);\n removeClass([this.inputElementCopy], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.formElement = closest(this.inputElement, 'form');\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.checkHtmlAttributes(false);\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n _super.prototype.preRender.call(this);\n };\n DatePicker.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n shiftTab: 'shift+tab',\n tab: 'tab'\n };\n return this.defaultKeyConfigs;\n };\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkFormat = function () {\n var culture = new Internationalization(this.locale);\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n var skeletonString = this.format.skeleton;\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'dateTime' });\n }\n else {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'date' });\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = this.dateTimeFormat;\n }\n else {\n this.formatString = null;\n }\n }\n }\n else {\n this.formatString = null;\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function (dynamic) {\n this.globalize = new Internationalization(this.locale);\n this.checkFormat();\n this.checkView();\n var attributes = dynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['enabled'] === undefined)) || dynamic)) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !dynamic);\n }\n break;\n case 'readonly':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['readonly'] === undefined)) || dynamic)) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !dynamic);\n }\n break;\n case 'placeholder':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['placeholder'] === undefined)) || dynamic)) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !dynamic);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['value'] === undefined)) || dynamic)) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), !dynamic);\n }\n break;\n case 'min':\n if ((+this.min === +new Date(1900, 0, 1)) || dynamic) {\n var min = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(min, options), {}), !dynamic);\n }\n break;\n case 'max':\n if ((+this.max === +new Date(2099, 11, 31)) || dynamic) {\n var max = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(max, options), {}), !dynamic);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function (isDynamic, isBlur) {\n if (isDynamic === void 0) { isDynamic = false; }\n if (isBlur === void 0) { isBlur = false; }\n var formatOptions;\n var globalize;\n var valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date(this.checkValue(this.value));\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n if (!isDynamic || (isDynamic && !isNullOrUndefined(this.renderDayCell))) {\n _super.prototype.render.call(this);\n }\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement) && !isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n inputVal = globalize;\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n inputVal = this.globalize.formatDate(valueCopy, formatOptions);\n }\n if (!this.popupObj) {\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime', isBlur: isBlur\n });\n }\n }\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, { 'aria-owns': this.inputElement.id + '_options' });\n attributes(this.inputElement, { 'aria-controls': this.inputElement.id });\n if (this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': '' + this.setActiveDescendant() });\n }\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-controls');\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DatePicker.prototype.errorClass = function () {\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !isNullOrUndefined(this.min) &&\n !isNullOrUndefined(this.max) && !(new Date(this.value).setMilliseconds(0) >= new Date(this.min).setMilliseconds(0)\n && new Date(this.value).setMilliseconds(0) <= new Date(this.max).setMilliseconds(0)))\n || (!this.strictMode && this.inputElement.value !== '' && this.inputElement.value !== this.maskedDateValue && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else if (!isNullOrUndefined(this.inputWrapper)) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DatePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DatePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var openPopup = ['blur', 'change', 'cleared', 'close', 'created', 'destroyed', 'focus', 'navigated', 'open', 'renderDayCell'];\n if (openPopup.indexOf(prop) > 0 && this.isReact) {\n this.isDynamicValueChanged = true;\n }\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.isInteracted = false;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n this.updateInputValue('');\n }\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput(true);\n if (+this.previousDate !== +this.value) {\n this.changeTrigger(null);\n }\n this.isInteracted = true;\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'format':\n this.checkFormat();\n this.bindInputEvent();\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'allowEdit':\n this.setAllowEdit();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.setAriaDisabled();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.datepickerOptions && this.datepickerOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n }\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'start':\n case 'depth':\n this.checkView();\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n this.index = this.showClearButton ? 2 : 1;\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n this.bindInputEvent();\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n default:\n if (this.calendarElement && this.isCalendar()) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property({})\n ], DatePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DatePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = 'e-list-item';\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DateTimePickerModel} options - Specifies the DateTimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.scrollInvoked = false;\n _this.moduleName = _this.getModuleName();\n _this.formatRegex = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yyy|yy|y|'[^']*'|'[^']*'/g;\n _this.dateFormatString = '';\n _this.dateTimeOptions = options;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n if (!this.enabled) {\n return;\n }\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.popupObject.destroy();\n detach(this.dateTimeWrapper);\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n this.liCollections = null;\n this.rippleFn = null;\n this.selectedElement = null;\n this.listTag = null;\n this.timeIcon = null;\n this.popupObject = null;\n this.preventArgs = null;\n this.keyboardModule = null;\n Input.destroy({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n if (typeof (this.min) === 'string') {\n this.min = this.checkDateValue(new Date(this.min));\n }\n if (typeof (this.max) === 'string') {\n this.max = this.checkDateValue(new Date(this.max));\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n _super.prototype.updateHtmlAttributeToElement.call(this);\n this.checkAttributes(false);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n _super.prototype.updateHtmlAttributeToWrapper.call(this);\n this.bindInputEvents();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.setValue(true);\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(this.scrollTo))) }, true);\n this.previousDateTime = this.value && new Date(+this.value);\n if (this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n if (!this.enabled) {\n this.inputElement.tabIndex = -1;\n }\n }\n if (this.floatLabelType !== 'Never') {\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n this.renderComplete();\n };\n DateTimePicker.prototype.setValue = function (isDynamic) {\n if (isDynamic === void 0) { isDynamic = false; }\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this, isDynamic);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n var dateOptions;\n if (!isNullOrUndefined(value)) {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n if (this.calendarMode === 'Gregorian') {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n }\n else {\n return getValue('main.' + '' + this.locale + '.dates.calendars.islamic.timeFormats.short', ld);\n }\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n this.inputElement.focus();\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n this.isIconClicked = false;\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var dateObject;\n if (this.calendarMode === 'Gregorian') {\n this.cldrDateTimeFormat().replace(this.formatRegex, this.TimePopupFormat());\n if (this.dateFormatString === '') {\n this.dateFormatString = this.cldrDateTimeFormat();\n }\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.dateFormatString, type: 'datetime'\n });\n }\n else {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime', calendar: 'islamic'\n });\n }\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n dateObject : new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_options' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup(e);\n if (!Browser.isDevice || (Browser.isDevice && !this.fullScreenMode)) {\n this.popupObject.refreshPosition(this.inputElement);\n }\n if (Browser.isDevice && this.fullScreenMode) {\n this.dateTimeWrapper.style.left = '0px';\n }\n if (Browser.isDevice) {\n var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n this.timeModal.appendChild(dlgOverlay);\n }\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n var _this = this;\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (!_this.preventArgs.cancel && !_this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObject.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObject.show(new Animation(openAnimation), null);\n }\n addClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n }\n });\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObject) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObject.element && this.popupObject.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + (this.popupObject && this.popupObject.element.id + '\"]'))) && target !== this.inputElement\n && target !== this.timeIcon && !isNullOrUndefined(this.inputWrapper) && target !== this.inputWrapper.container && !target.classList.contains('e-dlg-overlay')) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = ((document.activeElement === this.inputElement) && (Browser.isIE || Browser.info.name === 'edge')\n && target === this.popupObject.element);\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.timekeyConfigure = extend(_this.timekeyConfigure, _this.keyConfigs);\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.timeKeyActionHandle.bind(_this),\n keyConfigs: _this.timekeyConfigure,\n eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (Browser.isDevice && this.fullScreenMode) {\n this.popupObject.element.style.display = 'flex';\n this.popupObject.element.style.maxHeight = '100%';\n this.popupObject.element.style.width = '100%';\n }\n else {\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n }\n if (Browser.isDevice && this.fullScreenMode) {\n var modelWrapper = createElement('div', { className: 'e-datetime-mob-popup-wrap' });\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var modelTitleSpan = this.createElement('span', { className: 'e-model-title' });\n modelTitleSpan.textContent = 'Select time';\n var modelCloseIcon = this.createElement('span', { className: 'e-popup-close' });\n EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.dateTimeCloseHandler, this);\n var timeContent = this.dateTimeWrapper.querySelector('.e-content');\n modelHeader.appendChild(modelCloseIcon);\n modelHeader.appendChild(modelTitleSpan);\n modelWrapper.appendChild(modelHeader);\n modelWrapper.appendChild(timeContent);\n this.dateTimeWrapper.insertBefore(modelWrapper, this.dateTimeWrapper.firstElementChild);\n }\n };\n DateTimePicker.prototype.dateTimeCloseHandler = function (e) {\n this.hide();\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n // eslint-disable-next-line no-self-assign\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n if (Browser.isDevice && this.fullScreenMode) {\n return popupHeight;\n }\n else {\n return popupHeight > height ? height : popupHeight;\n }\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n _super.prototype.changeEvent.call(this, e);\n if ((this.value && this.value.valueOf()) !== (this.previousDateTime && +this.previousDateTime.valueOf())) {\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e || null,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.previousDate = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n this.findScrollTop(popupElement);\n }\n else if (this.dateTimeWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n DateTimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextElement = element.nextElementSibling;\n var height = nextElement ? nextElement.offsetTop : element.offsetTop;\n var lineHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n if (Browser.isDevice && this.fullScreenMode) {\n var listContent = this.dateTimeWrapper.querySelector('.e-content');\n listContent.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setScrollTo = function () {\n var element;\n var items = this.dateTimeWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length >= 0) {\n this.scrollInvoked = true;\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n if (this.enableMask) {\n this.createMask();\n }\n }\n this.updateIconState();\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.TimePopupFormat = function () {\n var format = '';\n var formatCount = 0;\n var proxy = null || this;\n /**\n * Formats the value specifier.\n *\n * @param {string} formattext - The format text.\n * @returns {string} The formatted value specifier.\n */\n function formatValueSpecifier(formattext) {\n switch (formattext) {\n case 'd':\n case 'dd':\n case 'ddd':\n case 'dddd':\n case 'M':\n case 'MM':\n case 'MMM':\n case 'MMMM':\n case 'y':\n case 'yy':\n case 'yyy':\n case 'yyyy':\n if (format === '') {\n format = format + formattext;\n }\n else {\n format = format + '/' + formattext;\n }\n formatCount = formatCount + 1;\n break;\n }\n if (formatCount > 2) {\n proxy.dateFormatString = format;\n }\n return format;\n }\n return formatValueSpecifier;\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n var _this = this;\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.dateTimeCloseEventCallback(e, eventArgs);\n });\n }\n else {\n this.dateTimeCloseEventCallback(e, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n DateTimePicker.prototype.dateTimeCloseEventCallback = function (e, eventArgs) {\n this.preventArgs = eventArgs;\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-controls');\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n this.checkFormat();\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.preRender.call(this);\n removeClass([this.inputElementCopy], [ROOT]);\n };\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === 'true' ||\n this.inputElement.getAttribute(prop) === '' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.calendarMode === 'Islamic') {\n modules.push({ args: [this], member: 'islamic', name: 'Islamic' });\n }\n if (this.enableMask) {\n modules.push(this.maskedDateModule());\n }\n return modules;\n };\n DateTimePicker.prototype.maskedDateModule = function () {\n var modules = { args: [this], member: 'MaskedDateTime' };\n return modules;\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n if (!this.scrollInvoked) {\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n else {\n this.scrollInvoked = false;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds(), dateValue.getMilliseconds());\n }\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.activeIndex) || !isNullOrUndefined(this.checkDateValue(value))) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var dateString;\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.timeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n event.stopPropagation();\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DateTimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DateTimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n\n */\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var openPopup = ['blur', 'change', 'cleared', 'close', 'created', 'destroyed', 'focus', 'navigated', 'open', 'renderDayCell'];\n if (openPopup.indexOf(prop) > 0 && this.isReact) {\n this.isDynamicValueChanged = true;\n }\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n newProp.value = this.validateValue(newProp.value);\n if (this.enableMask) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n if (this.popupObj) {\n this.popupUpdate();\n }\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask && this.value) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n if (!isNullOrUndefined(oldProp.cssClass)) {\n oldProp.cssClass = (oldProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newProp.cssClass)) {\n newProp.cssClass = (newProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container], oldProp.cssClass);\n if (this.dateTimeWrapper) {\n Input.setCssClass(newProp.cssClass, [this.dateTimeWrapper], oldProp.cssClass);\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n if (this.dateTimeOptions && this.dateTimeOptions.placeholder == null) {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n }\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkFormat();\n this.dateTimeFormat = this.formatString;\n this.setValue();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkValue(newProp.scrollTo)))) {\n if (this.dateTimeWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.maskedDateValue = '';\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n DateTimePicker.prototype.restoreValue = function () {\n this.previousDateTime = this.previousDate;\n this.currentDate = this.value ? this.value : new Date();\n this.valueWithMinutes = this.value;\n this.previousDate = this.value;\n this.previousElementValue = this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.getFormattedValue(this.inputValueCopy);\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property({})\n ], DateTimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"values\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"fullScreenMode\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateTimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateTimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateTimePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], DateTimePicker.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DateTimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","import { createElement, isNullOrUndefined, classList } from '@syncfusion/ej2-base';\nimport { TextBox, NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { TextFormField, DropDownFormField, CheckBoxFormField } from '../viewer/page';\nimport { DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { afterFormFieldFillEvent } from '../../base/index';\n/**\n * @private\n */\nvar FormFieldPopUp = /** @class */ (function () {\n /**\n * @param {DocumentEditor} owner - Specifies the document editor.\n * @private\n */\n function FormFieldPopUp(owner) {\n var _this = this;\n /**\n * @returns {void}\n */\n this.applyTextFormFieldValue = function () {\n _this.owner.editorModule.updateFormField(_this.formField, _this.textBoxInstance.value);\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.resultText, isCanceled: false });\n _this.hidePopup();\n };\n /**\n * @returns {void}\n */\n this.applyNumberFormFieldValue = function () {\n _this.owner.editorModule.updateFormField(_this.formField, _this.numberInput.value.toString());\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.resultText, isCanceled: false });\n _this.hidePopup();\n };\n /**\n * @returns {void}\n */\n this.applyDateFormFieldValue = function () {\n if (!isNullOrUndefined(_this.datePickerInstance.value)) {\n _this.owner.editorModule.updateFormField(_this.formField, _this.dateInput.value);\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.resultText, isCanceled: false });\n _this.hidePopup();\n }\n };\n /**\n * @returns {void}\n */\n this.applyDropDownFormFieldValue = function () {\n _this.owner.editorModule.updateFormField(_this.formField, _this.ddlInstance.index);\n _this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': _this.formField.formFieldData.name, value: _this.formField.formFieldData.selectedIndex, isCanceled: false });\n _this.hidePopup();\n };\n /**\n * @param {ChangedEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.enableDisableDatePickerOkButton = function (args) {\n if (args.isInteracted) {\n _this.dataPickerOkButton.disabled = false;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeButton = function () {\n var field = _this.formField;\n _this.hidePopup();\n var eventArgs = { 'fieldName': field.formFieldData.name };\n if (field.formFieldData instanceof TextFormField) {\n eventArgs.value = field.resultText;\n }\n else if (field.formFieldData instanceof CheckBoxFormField) {\n eventArgs.value = field.formFieldData.checked;\n }\n else {\n eventArgs.value = field.formFieldData.selectedIndex;\n }\n eventArgs.isCanceled = true;\n _this.owner.trigger(afterFormFieldFillEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n this.hidePopup = function () {\n _this.owner.documentHelper.isFormFilling = false;\n _this.formField = undefined;\n if (_this.target) {\n _this.target.style.display = 'none';\n }\n if (_this.popupObject) {\n _this.popupObject.hide();\n _this.popupObject.destroy();\n _this.popupObject = undefined;\n }\n };\n this.owner = owner;\n }\n FormFieldPopUp.prototype.initPopup = function () {\n var popupElement = createElement('div', { className: 'e-de-form-popup' });\n this.textBoxContainer = this.initTextBoxInput();\n popupElement.appendChild(this.textBoxContainer);\n popupElement.appendChild(this.initNumericTextBox());\n popupElement.appendChild(this.initDatePicker());\n popupElement.appendChild(this.initDropDownList());\n this.target = popupElement;\n this.owner.documentHelper.viewerContainer.appendChild(popupElement);\n };\n FormFieldPopUp.prototype.initTextBoxInput = function () {\n var textBoxDiv = createElement('div', { className: 'e-de-txt-field' });\n var textBoxInput = createElement('input', { className: 'e-de-txt-form' });\n var textBox = new TextBox();\n this.textBoxInput = textBoxInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyTextFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n textBoxDiv.appendChild(textBoxInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n textBoxDiv.appendChild(textBoxButtonDiv);\n textBox.appendTo(textBoxInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.textBoxInstance = textBox;\n return textBoxDiv;\n };\n FormFieldPopUp.prototype.initNumericTextBox = function () {\n var numericDiv = createElement('div', { className: 'e-de-num-field' });\n var numberInput = createElement('input', { className: 'e-de-txt-form' });\n var numericTextBox = new NumericTextBox();\n this.numberInput = numberInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyNumberFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n numericDiv.appendChild(numberInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n numericDiv.appendChild(textBoxButtonDiv);\n numericTextBox.appendTo(numberInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.numericTextBoxInstance = numericTextBox;\n return numericDiv;\n };\n FormFieldPopUp.prototype.initDatePicker = function () {\n var dateDiv = createElement('div', { className: 'e-de-date-field' });\n var dateInput = createElement('input', { className: 'e-de-txt-form' });\n /* eslint-disable-next-line max-len */\n var datePicker = new DateTimePicker({ strictMode: true, change: this.enableDisableDatePickerOkButton });\n this.dateInput = dateInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyDateFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n dateDiv.appendChild(dateInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n dateDiv.appendChild(textBoxButtonDiv);\n datePicker.appendTo(dateInput);\n this.dataPickerOkButton = new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.datePickerInstance = datePicker;\n return dateDiv;\n };\n FormFieldPopUp.prototype.initDropDownList = function () {\n var dropDownDiv = createElement('div', { className: 'e-de-ddl-field' });\n var dropDownInput = createElement('input', { className: 'e-de-txt-form' });\n var ddl = new DropDownList();\n this.dropDownInput = dropDownInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyDropDownFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n dropDownDiv.appendChild(dropDownInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n dropDownDiv.appendChild(textBoxButtonDiv);\n ddl.appendTo(dropDownInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.ddlInstance = ddl;\n return dropDownDiv;\n };\n /**\n * @private\n * @param {FieldElementBox} formField - Specifies the field element.\n * @returns {void}\n */\n FormFieldPopUp.prototype.showPopUp = function (formField) {\n var _this = this;\n if (formField) {\n this.formField = formField;\n this.owner.selectionModule.selectField();\n if (isNullOrUndefined(this.target)) {\n this.initPopup();\n }\n classList(this.target, [], ['e-de-txt-form', 'e-de-num-form', 'e-de-date-form', 'e-de-ddl-form']);\n var formFieldData = formField.formFieldData;\n if (formFieldData) {\n if (formFieldData instanceof TextFormField) {\n var resultText = formField.resultText;\n var rex = RegExp(this.owner.documentHelper.textHelper.getEnSpaceCharacter(), 'gi');\n if (resultText.replace(rex, '') === '') {\n resultText = '';\n }\n var maxLength = formFieldData.maxLength;\n var formFieldType = formFieldData.type;\n var inputElement_1;\n resultText = resultText ? resultText : '';\n if (formFieldType === 'Text' || formFieldType === 'Calculation') {\n classList(this.target, ['e-de-txt-form'], []);\n inputElement_1 = this.textBoxInput;\n this.textBoxInstance.value = resultText;\n }\n else if (formFieldData.type === 'Number') {\n classList(this.target, ['e-de-num-form'], []);\n inputElement_1 = this.numberInput;\n this.numericTextBoxInstance.format = formFieldData.format;\n this.numericTextBoxInstance.value = parseFloat(resultText.replace(/,/gi, ''));\n }\n else if (formFieldType === 'Date') {\n classList(this.target, ['e-de-date-form'], []);\n inputElement_1 = this.dateInput;\n var format = formFieldData.format;\n if (format.indexOf('am/pm') !== -1) {\n format = format.replace(/am\\/pm/gi, 'a');\n }\n this.datePickerInstance.format = format;\n this.datePickerInstance.value = new Date(resultText);\n this.dataPickerOkButton.disabled = true;\n }\n if (inputElement_1) {\n if (maxLength > 0) {\n inputElement_1.maxLength = maxLength;\n }\n else {\n inputElement_1.removeAttribute('maxlength');\n }\n setTimeout(function () {\n inputElement_1.focus();\n });\n }\n }\n else if (formFieldData instanceof DropDownFormField) {\n classList(this.target, ['e-de-ddl-form'], []);\n this.ddlInstance.refresh();\n this.ddlInstance.dataSource = formFieldData.dropdownItems;\n this.ddlInstance.index = formFieldData.selectedIndex;\n setTimeout(function () {\n _this.ddlInstance.showPopup();\n }, 50);\n }\n var left = this.owner.selectionModule.getLeftInternal(formField.line, formField, 0);\n var lineHeight = formField.line.height * this.owner.documentHelper.zoomFactor;\n var position = this.owner.selectionModule.getTooltipPosition(formField.line, left, this.target, true);\n if (!this.popupObject) {\n this.popupObject = new Popup(this.target, {\n height: 'auto',\n width: 'auto',\n relateTo: this.owner.documentHelper.viewerContainer.parentElement,\n position: { X: position.x, Y: position.y + lineHeight }\n });\n }\n this.target.style.display = 'block';\n this.popupObject.show();\n }\n this.owner.documentHelper.isFormFilling = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormFieldPopUp.prototype.destroy = function () {\n if (this.formField) {\n this.formField.destroy();\n }\n this.formField = undefined;\n this.owner = undefined;\n };\n return FormFieldPopUp;\n}());\nexport { FormFieldPopUp };\n","import { createElement, isNullOrUndefined, classList } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * @private\n */\nvar ContentControlPopUp = /** @class */ (function () {\n /**\n * @param {DocumentEditor} owner - Specifies the document editor.\n * @private\n */\n function ContentControlPopUp(owner) {\n var _this = this;\n // /**\n // * @returns {void}\n // */\n // private applyTextFormFieldValue = (): void => {\n // this.owner.editorModule.updateFormField(this.formField, this.textBoxInstance.value);\n // this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': this.formField.formFieldData.name, value: this.formField.resultText, isCanceled: false });\n // this.hidePopup();\n // };\n // /**\n // * @returns {void}\n // */\n // private applyNumberFormFieldValue = (): void => {\n // this.owner.editorModule.updateFormField(this.formField, this.numberInput.value.toString());\n // this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': this.formField.formFieldData.name, value: this.formField.resultText, isCanceled: false });\n // this.hidePopup();\n // };\n // /**\n // * @returns {void}\n // */\n // private applyDateFormFieldValue = (): void => {\n // if (!isNullOrUndefined(this.datePickerInstance.value)) {\n // this.owner.editorModule.updateFormField(this.formField, this.dateInput.value);\n // this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': this.formField.formFieldData.name, value: this.formField.resultText, isCanceled: false });\n // this.hidePopup();\n // }\n // };\n /**\n * @returns {void}\n */\n this.applyDropDownFormFieldValue = function () {\n // this.owner.editorModule.updateFormField(this.formField, this.ddlInstance.index);\n // this.owner.trigger(afterFormFieldFillEvent, { 'fieldName': this.formField.formFieldData.name, value: (this.formField.formFieldData as DropDownFormField).selectedIndex, isCanceled: false });\n _this.owner.editorModule.dropDownChange(_this.contenControl, _this.ddlInstance.text);\n _this.hidePopup();\n };\n /**\n * @param {ChangedEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.enableDisableDatePickerOkButton = function (args) {\n if (args.isInteracted) {\n _this.dataPickerOkButton.disabled = false;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeButton = function () {\n // const field: FieldElementBox = this.formField;\n _this.hidePopup();\n };\n /**\n * @private\n * @returns {void}\n */\n this.hidePopup = function () {\n _this.contenControl = undefined;\n if (_this.target) {\n _this.target.style.display = 'none';\n }\n if (_this.popupObject) {\n _this.popupObject.hide();\n _this.popupObject.destroy();\n _this.popupObject = undefined;\n }\n };\n this.owner = owner;\n }\n ContentControlPopUp.prototype.initPopup = function () {\n var popupElement = createElement('div', { className: 'e-de-form-popup' });\n // this.textBoxContainer = this.initTextBoxInput();\n // popupElement.appendChild(this.textBoxContainer);\n // popupElement.appendChild(this.initNumericTextBox());\n // popupElement.appendChild(this.initDatePicker());\n popupElement.appendChild(this.initDropDownList());\n this.target = popupElement;\n this.owner.documentHelper.viewerContainer.appendChild(popupElement);\n };\n // private initTextBoxInput(): HTMLElement {\n // const textBoxDiv: HTMLElement = createElement('div', { className: 'e-de-txt-field' });\n // const textBoxInput: HTMLInputElement = createElement('input', { className: 'e-de-txt-form' }) as HTMLInputElement;\n // const textBox: TextBox = new TextBox();\n // this.textBoxInput = textBoxInput;\n // const textBoxButtonDiv: HTMLElement = createElement('div', { className: 'e-de-cmt-action-button' });\n // const textBoxOkButton: HTMLButtonElement = createElement('button') as HTMLButtonElement;\n // const textBoxCancelButton: HTMLButtonElement = createElement('button') as HTMLButtonElement;\n // textBoxOkButton.addEventListener('click', this.applyTextFormFieldValue);\n // textBoxCancelButton.addEventListener('click', this.closeButton);\n // textBoxDiv.appendChild(textBoxInput);\n // textBoxButtonDiv.appendChild(textBoxOkButton);\n // textBoxButtonDiv.appendChild(textBoxCancelButton);\n // textBoxDiv.appendChild(textBoxButtonDiv);\n // textBox.appendTo(textBoxInput);\n // new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n // new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n // this.textBoxInstance = textBox;\n // return textBoxDiv;\n // }\n // private initNumericTextBox(): HTMLElement {\n // const numericDiv: HTMLElement = createElement('div', { className: 'e-de-num-field' });\n // const numberInput: HTMLInputElement = createElement('input', { className: 'e-de-txt-form' }) as HTMLInputElement;\n // const numericTextBox: NumericTextBox = new NumericTextBox();\n // this.numberInput = numberInput;\n // const textBoxButtonDiv: HTMLElement = createElement('div', { className: 'e-de-cmt-action-button' });\n // const textBoxOkButton: HTMLButtonElement = createElement('button') as HTMLButtonElement;\n // const textBoxCancelButton: HTMLButtonElement = createElement('button') as HTMLButtonElement;\n // textBoxOkButton.addEventListener('click', this.applyNumberFormFieldValue);\n // textBoxCancelButton.addEventListener('click', this.closeButton);\n // numericDiv.appendChild(numberInput);\n // textBoxButtonDiv.appendChild(textBoxOkButton);\n // textBoxButtonDiv.appendChild(textBoxCancelButton);\n // numericDiv.appendChild(textBoxButtonDiv);\n // numericTextBox.appendTo(numberInput);\n // new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n // new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n // this.numericTextBoxInstance = numericTextBox;\n // return numericDiv;\n // }\n // private initDatePicker(): HTMLElement {\n // const dateDiv: HTMLElement = createElement('div', { className: 'e-de-date-field' });\n // const dateInput: HTMLInputElement = createElement('input', { className: 'e-de-txt-form' }) as HTMLInputElement;\n // /* eslint-disable-next-line max-len */\n // const datePicker: DateTimePicker = new DateTimePicker({ strictMode: true, change: this.enableDisableDatePickerOkButton });\n // this.dateInput = dateInput;\n // const textBoxButtonDiv: HTMLElement = createElement('div', { className: 'e-de-cmt-action-button' });\n // const textBoxOkButton: HTMLButtonElement = createElement('button') as HTMLButtonElement;\n // const textBoxCancelButton: HTMLButtonElement = createElement('button') as HTMLButtonElement;\n // textBoxOkButton.addEventListener('click', this.applyDateFormFieldValue);\n // textBoxCancelButton.addEventListener('click', this.closeButton);\n // dateDiv.appendChild(dateInput);\n // textBoxButtonDiv.appendChild(textBoxOkButton);\n // textBoxButtonDiv.appendChild(textBoxCancelButton);\n // dateDiv.appendChild(textBoxButtonDiv);\n // datePicker.appendTo(dateInput);\n // this.dataPickerOkButton = new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n // new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n // this.datePickerInstance = datePicker;\n // return dateDiv;\n // }\n ContentControlPopUp.prototype.initDropDownList = function () {\n var dropDownDiv = createElement('div', { className: 'e-de-ddl-field' });\n var dropDownInput = createElement('input', { className: 'e-de-txt-form' });\n var ddl = new DropDownList({ fields: { text: 'value' } });\n this.dropDownInput = dropDownInput;\n var textBoxButtonDiv = createElement('div', { className: 'e-de-cmt-action-button' });\n var textBoxOkButton = createElement('button');\n var textBoxCancelButton = createElement('button');\n textBoxOkButton.addEventListener('click', this.applyDropDownFormFieldValue);\n textBoxCancelButton.addEventListener('click', this.closeButton);\n dropDownDiv.appendChild(dropDownInput);\n textBoxButtonDiv.appendChild(textBoxOkButton);\n textBoxButtonDiv.appendChild(textBoxCancelButton);\n dropDownDiv.appendChild(textBoxButtonDiv);\n ddl.appendTo(dropDownInput);\n new Button({ cssClass: 'e-de-save e-primary', iconCss: 'e-de-save-icon' }, textBoxOkButton);\n new Button({ cssClass: 'e-de-cancel', iconCss: 'e-de-cancel-icon' }, textBoxCancelButton);\n this.ddlInstance = ddl;\n return dropDownDiv;\n };\n /**\n * @private\n * @param {FieldElementBox} formField - Specifies the field element.\n * @returns {void}\n */\n ContentControlPopUp.prototype.showPopUp = function (formField) {\n var _this = this;\n if (formField) {\n this.contenControl = formField;\n if (isNullOrUndefined(this.target)) {\n this.initPopup();\n }\n classList(this.target, [], ['e-de-txt-form', 'e-de-num-form', 'e-de-date-form', 'e-de-ddl-form']);\n classList(this.target, ['e-de-ddl-form'], []);\n this.ddlInstance.refresh();\n /* eslint-disable */\n var convertedItems = formField.contentControlProperties.contentControlListItems.map(function (item) {\n var convertedItem = {};\n for (var prop in item) {\n convertedItem[\"\" + prop] = item[\"\" + prop];\n }\n return convertedItem;\n });\n this.ddlInstance.dataSource = convertedItems;\n setTimeout(function () {\n _this.ddlInstance.showPopup();\n }, 50);\n var left = this.owner.selectionModule.getLeftInternal(formField.line, formField, 0);\n var lineHeight = formField.line.height * this.owner.documentHelper.zoomFactor;\n var position = this.owner.selectionModule.getTooltipPosition(formField.line, left, this.target, true);\n if (!this.popupObject) {\n this.popupObject = new Popup(this.target, {\n height: 'auto',\n width: 'auto',\n relateTo: this.owner.documentHelper.viewerContainer.parentElement,\n position: { X: position.x, Y: position.y + lineHeight }\n });\n }\n this.target.style.display = 'block';\n this.popupObject.show();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ContentControlPopUp.prototype.destroy = function () {\n if (this.contenControl) {\n this.contenControl.destroy();\n }\n this.contenControl = undefined;\n this.owner = undefined;\n };\n return ContentControlPopUp;\n}());\nexport { ContentControlPopUp };\n","import { createElement, L10n, isNullOrUndefined, select, Browser } from '@syncfusion/ej2-base';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { TextElementBox, ElementBox, ImageElementBox, FieldElementBox, TextFormField, DropDownFormField, ParagraphWidget, HeaderFooterWidget, ChartElementBox } from '../viewer/page';\nimport { WRowFormat, WCharacterFormat } from '../index';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { Dictionary } from '../../base/index';\n/**\n * Track changes pane\n */\nvar TrackChangesPane = /** @class */ (function () {\n function TrackChangesPane(owner, commentReviewPane) {\n this.users = [];\n this.enableButtons = true;\n this.viewTypeitems = [];\n this.sortedRevisions = [];\n this.noChangesVisibleInternal = true;\n this.isTrackingPageBreak = false;\n /***\n * @private\n */\n this.tableRevisions = new Dictionary();\n this.owner = owner;\n this.commentReviewPane = commentReviewPane;\n this.locale = new L10n('documenteditor', this.owner.defaultLocale);\n this.locale.setLocale(this.owner.locale);\n this.selectedUser = this.locale.getConstant('All');\n this.selectedType = this.locale.getConstant('All');\n this.initTrackChangePane();\n this.commentReviewPane.reviewTab.items[1].content = this.trackChangeDiv;\n if (!Browser.isIE) {\n this.commentReviewPane.reviewTab.refresh();\n }\n if (this.owner.enableRtl) {\n this.closeButton = createElement('button', {\n className: 'e-de-close-icon e-btn e-flat e-icon-btn', id: 'close',\n attrs: { type: 'button', style: 'position:absolute;top:6px;left:1px' }\n });\n }\n else {\n this.closeButton = createElement('button', {\n className: 'e-de-close-icon e-btn e-flat e-icon-btn', id: 'close',\n attrs: { type: 'button', style: 'position:absolute;top:6px;right:1px' }\n });\n }\n this.closeButton.title = this.locale.getConstant('Close');\n this.closeButton.setAttribute('aria-label', this.locale.getConstant('Close'));\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-de-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.commentReviewPane.reviewTab.element.appendChild(this.closeButton);\n this.closeButton.addEventListener('click', this.commentReviewPane.closePane.bind(this.commentReviewPane));\n }\n Object.defineProperty(TrackChangesPane.prototype, \"setNoChangesVisibility\", {\n get: function () {\n return this.noChangesVisibleInternal;\n },\n set: function (visible) {\n this.isChangesTabVisible = !visible;\n this.noChangeDivElement.style.display = visible ? 'block' : 'none';\n this.noChangesVisibleInternal = visible;\n this.enableDisableToolbarItem(!visible);\n this.commentReviewPane.reviewTab.hideTab(1, visible);\n this.owner.notify('reviewPane', { changes: !visible, comment: this.commentReviewPane.isCommentTabVisible });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TrackChangesPane.prototype, \"currentSelectedRevision\", {\n get: function () {\n return this.currentSelectedRevisionInternal;\n },\n set: function (value) {\n var selectedElement = select('.e-de-trckchanges-inner-select', this.changesInfoDiv);\n if (isNullOrUndefined(value)) {\n if (!isNullOrUndefined(selectedElement)) {\n selectedElement.classList.remove('e-de-trckchanges-inner-select');\n }\n }\n else if (value !== this.currentSelectedRevisionInternal || isNullOrUndefined(selectedElement)) {\n if (selectedElement) {\n selectedElement.classList.remove('e-de-trckchanges-inner-select');\n }\n if (this.changes.length > 0 && this.changes.containsKey(value)) {\n var currentChangeView = this.changes.get(value);\n currentChangeView.singleInnerDiv.classList.add('e-de-trckchanges-inner-select');\n }\n }\n this.currentSelectedRevisionInternal = value;\n selectedElement = select('.e-de-trckchanges-inner-select', this.changesInfoDiv);\n if (!isNullOrUndefined(selectedElement)) {\n selectedElement.parentElement.scrollIntoView({ block: 'nearest' });\n }\n },\n enumerable: true,\n configurable: true\n });\n TrackChangesPane.prototype.initTrackChangePane = function () {\n this.changes = new Dictionary();\n this.renderedChanges = new Dictionary();\n this.trackChangeDiv = createElement('div', { className: 'e-de-tc-pane' });\n this.trackChangeDiv.appendChild(this.initPaneHeader());\n this.changesInfoDiv = createElement('div', { id: 'e-de-tc-pane-revision', styles: 'overflow:auto' });\n this.trackChangeDiv.appendChild(this.changesInfoDiv);\n this.noChangeDivElement = createElement('div', { styles: 'display:none;', className: 'e-de-tc-no-chng' });\n this.noChangeDivElement.textContent = this.locale.getConstant('No changes');\n this.changesInfoDiv.appendChild(this.noChangeDivElement);\n this.updateTrackChanges();\n };\n TrackChangesPane.prototype.initPaneHeader = function () {\n var _this = this;\n this.toolbarElement = createElement('div', { className: 'e-de-track-toolbar' });\n this.toolbar = new Toolbar({\n enableRtl: this.owner.enableRtl,\n items: [\n {\n text: this.locale.getConstant('User') + ':', cssClass: 'e-de-track-toolbar-overlay', disabled: true\n },\n {\n template: createElement('div', { id: 'e-de-user-list', attrs: { 'role': 'button' } })\n },\n {\n type: 'Separator'\n },\n {\n text: this.locale.getConstant('View') + ':', cssClass: 'e-de-track-toolbar-overlay', disabled: true\n },\n {\n template: createElement('div', { id: 'e-de-revision-list', attrs: { 'role': 'button' } })\n },\n {\n prefixIcon: 'e-de-nav-left-arrow e-de-tc-tbr', align: 'Right', cssClass: 'e-de-nvgte-left',\n tooltipText: this.locale.getConstant('Previous Changes'), click: this.navigatePreviousChanges.bind(this)\n },\n {\n prefixIcon: 'e-de-nav-right-arrow e-de-tc-tbr', align: 'Right', cssClass: 'e-de-nvgte-right',\n tooltipText: this.locale.getConstant('Next Changes'), click: this.navigateNextChanges.bind(this)\n },\n {\n template: createElement('div', { id: 'e-de-menu-option', attrs: { 'role': 'button' } }), align: 'Right', cssClass: 'e-de-tc-tbr',\n tooltipText: this.locale.getConstant('More Options') + '...'\n }\n ]\n });\n this.toolbar.appendTo(this.toolbarElement);\n var navigateLeftButton = select('.e-de-nvgte-left', this.toolbarElement);\n navigateLeftButton.firstChild.classList.add('e-tc-nvgte');\n var navigateRightButton = select('.e-de-nvgte-right', this.toolbarElement);\n navigateRightButton.firstChild.classList.add('e-tc-nvgte');\n //User list drop down button\n var userButtonEle = select('#e-de-user-list', this.toolbarElement);\n this.userDropDownitems = [{ text: this.locale.getConstant('All') }];\n this.userDropDown = {\n items: this.userDropDownitems,\n cssClass: 'e-de-track-pane-drop-btn e-tc-btn-bg-clr',\n select: this.onUserSelect.bind(this),\n beforeOpen: this.onUserOpen.bind(this),\n beforeItemRender: function (args) {\n _this.beforeDropDownItemRender(args, _this.selectedUser);\n }\n };\n this.userDropDownButton = new DropDownButton(this.userDropDown);\n this.userDropDownButton.appendTo(userButtonEle);\n this.userDropDownButton.content = this.getSpanView(this.userDropDown.items[0].text, 0);\n //Revision view type drop down button\n var viewTypeEle = select('#e-de-revision-list', this.toolbarElement);\n this.viewTypeitems = [{ text: this.locale.getConstant('All') }, { text: this.locale.getConstant('Inserted') }, { text: this.locale.getConstant('Deleted') }];\n this.viewTypeDropDownButton = new DropDownButton({\n items: this.viewTypeitems,\n cssClass: 'e-de-track-pane-drop-btn e-tc-btn-bg-clr',\n select: this.onTypeSelect.bind(this),\n beforeItemRender: function (args) {\n _this.beforeDropDownItemRender(args, _this.selectedType);\n }\n });\n this.viewTypeDropDownButton.content = this.getSpanView(this.viewTypeitems[0].text, 1);\n this.viewTypeDropDownButton.appendTo(viewTypeEle);\n //More menu option drop down button\n this.menuoptionEle = select('#e-de-menu-option', this.toolbarElement);\n var menuOptions = [{ text: this.locale.getConstant('Accept all') }, { text: this.locale.getConstant('Reject all') }];\n var menuDropDown = {\n items: menuOptions,\n select: this.onMenuSelect.bind(this),\n iconCss: 'e-de-menu-icon',\n cssClass: 'e-caret-hide e-tc-btn-bg-clr'\n };\n this.menuDropDownButton = new DropDownButton(menuDropDown);\n this.menuDropDownButton.appendTo(this.menuoptionEle);\n return this.toolbarElement;\n };\n TrackChangesPane.prototype.beforeDropDownItemRender = function (args, content) {\n args.element.innerHTML = '' + args.item.text;\n var span = args.element.children[0];\n if (args.item.text === content) {\n span.style.marginRight = '10px';\n span.style.alignSelf = 'center';\n span.setAttribute('class', 'e-de-selected-item e-icons');\n }\n else {\n args.element.children[0].style.marginRight = '25px';\n args.element.children[0].classList.remove('e-de-selected-item');\n }\n };\n TrackChangesPane.prototype.onUserOpen = function (arg) {\n var ele = arg.element;\n ele.style.maxHeight = '200px';\n ele.style.overflowY = 'auto';\n };\n TrackChangesPane.prototype.enableDisableToolbarItem = function (enable) {\n var elements = this.toolbar.element.querySelectorAll('.e-de-tc-tbr');\n if (this.owner && this.owner.viewer) {\n this.toolbar.enableItems(elements[0].parentElement.parentElement, enable);\n this.toolbar.enableItems(elements[1].parentElement.parentElement, enable);\n this.toolbar.enableItems(elements[2], enable);\n }\n };\n TrackChangesPane.prototype.getSpanView = function (value, type) {\n return (type === 0 ? '' : '') + value + '';\n };\n TrackChangesPane.prototype.onMenuSelect = function (arg) {\n var _this = this;\n var selectedText = arg.item.text;\n if (selectedText.match(this.locale.getConstant('Accept all'))) {\n setTimeout(function () {\n _this.owner.revisionsInternal.handleRevisionCollection(true, _this.sortedRevisions);\n }, 0);\n }\n else if (selectedText.match(this.locale.getConstant('Reject all'))) {\n setTimeout(function () {\n _this.owner.revisionsInternal.handleRevisionCollection(false, _this.sortedRevisions);\n /* eslint-disable */\n }, 0);\n }\n this.updateUsers();\n };\n TrackChangesPane.prototype.onSelection = function (revision) {\n this.currentSelectedRevision = revision;\n };\n TrackChangesPane.prototype.onUserSelect = function (arg) {\n var selectedText = arg.item.text;\n this.selectedUser = selectedText;\n this.userDropDownButton.content = this.getSpanView(selectedText, 0);\n this.sortCollectionToDisplay();\n };\n TrackChangesPane.prototype.onTypeSelect = function (arg) {\n var selectedText = arg.item.text;\n this.selectedType = selectedText;\n this.viewTypeDropDownButton.content = this.getSpanView(selectedText, 1);\n this.sortCollectionToDisplay();\n };\n TrackChangesPane.prototype.updateMenuOptions = function () {\n var revisionType;\n if (this.selectedType !== this.locale.getConstant('All')) {\n revisionType = this.selectedType === this.locale.getConstant('Inserted') ? this.locale.getConstant('Insertion')\n : this.locale.getConstant('Deletion');\n }\n if (this.selectedUser === this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + this.locale.getConstant('Changes');\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + this.locale.getConstant('Changes');\n }\n else if (this.selectedUser === this.locale.getConstant('All') && this.selectedType !== this.locale.getConstant('All')) {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + revisionType;\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + revisionType;\n }\n else if (this.selectedUser !== this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + this.locale.getConstant('Changes') +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + this.locale.getConstant('Changes') +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n }\n else {\n this.menuDropDownButton.items[0].text = this.locale.getConstant('Accept all') + ' ' + revisionType +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n this.menuDropDownButton.items[1].text = this.locale.getConstant('Reject all') + ' ' + revisionType +\n ' ' + this.locale.getConstant('By').toLowerCase() + ' ' + this.selectedUser;\n }\n if (this.owner.documentHelper.isDocumentProtected || this.owner.isReadOnly) {\n this.menuDropDownButton.disabled = true;\n }\n else {\n this.menuDropDownButton.disabled = false;\n }\n };\n TrackChangesPane.prototype.sortCollectionToDisplay = function () {\n var isRevisionVisible = false;\n this.sortedRevisions = [];\n this.updateMenuOptions();\n for (var i = 0; i < this.changes.length; i++) {\n var changes = this.changes.get(this.revisions[i]);\n var singleChangesDiv = changes.outerSingleDiv;\n if (this.selectedUser === this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n singleChangesDiv.style.display = 'block';\n }\n else if (this.selectedUser === this.locale.getConstant('All') && this.selectedType !== this.locale.getConstant('All')) {\n if (this.locale.getConstant(changes.revisionType) === this.selectedType) {\n singleChangesDiv.style.display = 'block';\n }\n else {\n singleChangesDiv.style.display = 'none';\n }\n }\n else if (this.selectedUser !== this.locale.getConstant('All') && this.selectedType === this.locale.getConstant('All')) {\n if (changes.user === this.selectedUser) {\n singleChangesDiv.style.display = 'block';\n }\n else {\n singleChangesDiv.style.display = 'none';\n }\n }\n else {\n if (changes.user === this.selectedUser && this.locale.getConstant(changes.revisionType) === this.selectedType) {\n singleChangesDiv.style.display = 'block';\n }\n else {\n singleChangesDiv.style.display = 'none';\n }\n }\n if (singleChangesDiv.style.display === 'block') {\n this.sortedRevisions.push(this.revisions[i]);\n }\n isRevisionVisible = true;\n }\n this.setNoChangesVisibility = !isRevisionVisible;\n };\n TrackChangesPane.prototype.enableDisableButton = function (enableButton) {\n this.enableButtons = enableButton;\n this.updateTrackChanges();\n };\n TrackChangesPane.prototype.isUpdateTrackChanges = function (revisionCount) {\n var isUpdate = false;\n var isNoChangeDiv = false;\n if (!isNullOrUndefined(this.changesInfoDiv)) {\n if (this.changesInfoDiv.childNodes.length === 1 && this.changesInfoDiv.childNodes[0].className == 'e-de-tc-no-chng') {\n isNoChangeDiv = true;\n }\n else {\n if (revisionCount !== this.changesInfoDiv.childNodes.length) {\n isUpdate = true;\n }\n }\n }\n if (isNoChangeDiv || revisionCount > 0) {\n isUpdate = true;\n }\n return isUpdate;\n };\n TrackChangesPane.prototype.updateCurrentTrackChanges = function (revision) {\n var currentChangeView;\n if (!isNullOrUndefined(revision)) {\n currentChangeView = this.owner.trackChangesPane.changes.get(revision);\n }\n if (!isNullOrUndefined(currentChangeView) && revision.range.length > 0) {\n var changesDiv = currentChangeView.singleInnerDiv.querySelector(\"#textDiv\");\n while (changesDiv.firstChild) {\n changesDiv.removeChild(changesDiv.firstChild);\n }\n currentChangeView.layoutElementText(revision.range, changesDiv);\n }\n if (!isNullOrUndefined(revision) && revision.range.length === 0) {\n this.owner.revisions.remove(revision);\n }\n };\n TrackChangesPane.prototype.updateTrackChanges = function (show) {\n if (show || isNullOrUndefined(show)) {\n if (!this.owner.isUpdateTrackChanges) {\n this.tableRevisions.clear();\n this.renderedChanges.clear();\n this.removeAllChanges();\n }\n else {\n for (var i = 0; i < this.tableRevisions.keys.length; i++) {\n var revision = this.tableRevisions.keys[i];\n var index = this.revisions.indexOf(revision);\n var removeChild = (this.tableRevisions.get(revision))[(this.tableRevisions.get(revision)).length - 1] === revision;\n if (!isNullOrUndefined(this.changes)) {\n var changesSingleView = this.changes.get(revision);\n if (removeChild && !isNullOrUndefined(this.changesInfoDiv)) {\n var changesSingleView_1 = this.changes.get(revision);\n this.changesInfoDiv.removeChild(changesSingleView_1.outerSingleDiv);\n }\n }\n if (this.renderedChanges.containsKey(revision)) {\n this.renderedChanges.remove(revision);\n }\n if (this.changes.containsKey(revision)) {\n this.changes.remove(revision);\n }\n this.revisions.splice(index, 1);\n }\n this.tableRevisions.clear();\n }\n if (!this.enableButtons && !this.menuoptionEle.classList.contains('e-de-overlay')) {\n this.menuoptionEle.classList.add('e-de-overlay');\n }\n else if (this.menuoptionEle.classList.contains('e-de-overlay') && !this.owner.documentHelper.isDocumentProtected && !this.owner.isReadOnly) {\n this.menuoptionEle.classList.remove('e-de-overlay');\n }\n this.isChangesTabVisible = true;\n this.owner.notify('reviewPane', { comment: this.commentReviewPane.isCommentTabVisible, changes: this.isChangesTabVisible });\n if (!this.owner.isUpdateTrackChanges) {\n for (var i = 0; i < this.owner.revisions.changes.length; i++) {\n var revision = this.owner.revisions.changes[i];\n var ranges = this.owner.revisions.changes[i].range[0];\n if ((ranges instanceof TextElementBox || ranges instanceof FieldElementBox) &&\n ranges.paragraph.containerWidget instanceof HeaderFooterWidget && isNullOrUndefined(ranges.paragraph.containerWidget.sectionFormat)) {\n continue;\n }\n if (ranges instanceof TextElementBox &&\n ranges.paragraph.containerWidget instanceof HeaderFooterWidget) {\n var headerFooterType = ranges.paragraph.containerWidget.headerFooterType;\n var sectionFormat = this.owner.selectionModule.sectionFormat;\n if ((headerFooterType === 'EvenFooter' || headerFooterType === 'EvenHeader' || headerFooterType === 'OddFooter' || headerFooterType === 'OddHeader') && !sectionFormat.differentOddAndEvenPages) {\n continue;\n }\n else if ((headerFooterType === 'FirstPageHeader' || headerFooterType === 'FirstPageFooter') && !sectionFormat.differentFirstPage) {\n continue;\n }\n }\n if (this.changes.containsKey(revision)) {\n continue;\n }\n if (ranges instanceof WRowFormat) {\n var groupedRevision = this.groupTableRevisions(this.owner.revisions.changes, i);\n if (groupedRevision.length > 1) {\n var changeView = void 0;\n for (var j = 0; j < groupedRevision.length; j++) {\n var nextRevision = groupedRevision[j];\n if (j === 0) {\n this.addChanges(nextRevision);\n changeView = this.changes.get(revision);\n }\n else {\n var nextRowFormat = nextRevision.range[0];\n changeView.appendRowToTable(nextRowFormat, j);\n this.revisions.push(nextRevision);\n this.changes.add(nextRevision, changeView);\n }\n this.tableRevisions.add(nextRevision, groupedRevision);\n }\n }\n else {\n this.addChanges(revision);\n }\n }\n else {\n this.addChanges(revision);\n }\n }\n for (var i = 0; i < this.renderedChanges.keys.length; i++) {\n var changeView = this.renderedChanges.get(this.renderedChanges.keys[i]);\n changeView.updateRevisionIndexAndCount(i + 1, this.renderedChanges.keys.length);\n }\n }\n else {\n // Use this property to insert revision order wise in pane(revision order collapsed when using i value because total 10 revision, 2nd revision is table and table contain 5 row and each row preserved as a separate revision, so after table iteration i value is 6, so next revision inserted 6th position instead of 3).\n var insertIndex = 0;\n for (var i = 0; i < this.owner.revisions.changes.length; i++) {\n var revision = this.owner.revisions.changes[i];\n var ranges = this.owner.revisions.changes[i].range[0];\n if (this.changes.containsKey(revision)) {\n var currentChangeView = this.renderedChanges.get(revision);\n if (isNullOrUndefined(currentChangeView)) {\n continue;\n }\n if (!this.enableButtons) {\n if (!(currentChangeView.acceptButtonElement.classList.contains('e-de-overlay'))) {\n currentChangeView.acceptButtonElement.classList.add('e-de-overlay');\n currentChangeView.rejectButtonElement.classList.add('e-de-overlay');\n }\n }\n else if (currentChangeView.acceptButtonElement.classList.contains('e-de-overlay') && !this.owner.documentHelper.isTrackedOnlyMode) {\n currentChangeView.acceptButtonElement.classList.remove('e-de-overlay');\n currentChangeView.rejectButtonElement.classList.remove('e-de-overlay');\n }\n insertIndex++;\n continue;\n }\n if (ranges instanceof WRowFormat) {\n var groupedRevision = this.groupTableRevisions(this.owner.revisions.changes, i);\n if (groupedRevision.length > 1) {\n if (insertIndex === 0) {\n insertIndex = i;\n }\n var changeView = void 0;\n for (var j = 0; j < groupedRevision.length; j++) {\n var nextRevision = groupedRevision[j];\n if (j === 0) {\n var currentChangeView = new ChangesSingleView(this.owner, this);\n this.changesInfoDiv.insertBefore(currentChangeView.createSingleChangesDiv(nextRevision), this.changesInfoDiv.children[insertIndex + 1]);\n this.revisions.splice(i, 0, nextRevision);\n this.changes.add(nextRevision, currentChangeView);\n this.renderedChanges.add(nextRevision, currentChangeView);\n changeView = this.changes.get(revision);\n }\n else {\n var nextRowFormat = nextRevision.range[0];\n changeView.appendRowToTable(nextRowFormat, j);\n this.revisions.splice(i + j, 0, nextRevision);\n this.changes.add(nextRevision, changeView);\n }\n this.tableRevisions.add(nextRevision, groupedRevision);\n }\n insertIndex++;\n }\n else {\n var currentChangeView = new ChangesSingleView(this.owner, this);\n this.changesInfoDiv.insertBefore(currentChangeView.createSingleChangesDiv(revision), this.changesInfoDiv.children[i + 1]);\n this.revisions.splice(i, 0, revision);\n this.changes.add(revision, currentChangeView);\n this.renderedChanges.add(revision, currentChangeView);\n this.tableRevisions.add(revision, groupedRevision);\n }\n }\n }\n var totalCount = document.getElementsByClassName('e-de-track-chngs-count').length;\n for (var i = 0; i < totalCount; i++) {\n var div = document.getElementsByClassName('e-de-track-chngs-count')[i];\n div.innerHTML = this.locale.getConstant('Changes') + ' ' + (i + 1).toString() +\n ' ' + this.locale.getConstant('of') + ' ' + totalCount.toString();\n }\n }\n this.sortCollectionToDisplay();\n this.updateUsers();\n if (show) {\n this.currentSelectedRevision = this.currentSelectedRevisionInternal;\n this.updateHeight();\n this.owner.resize();\n }\n }\n else {\n this.currentSelectedRevision = undefined;\n }\n };\n /**\n * @private\n */\n TrackChangesPane.prototype.groupTableRevisions = function (revisions, startIndex) {\n var startRevision = revisions[startIndex];\n var groupedRevision = [startRevision];\n var currentRevisionType = startRevision.revisionType;\n var startRow = startRevision.range[0].ownerBase;\n var startTable = startRow.ownerTable;\n var rowIndex = startRow.index;\n var startParentTable = this.owner.documentHelper.layout.getParentTable(startTable);\n for (var i = startIndex + 1; i < revisions.length; i++) {\n var nextRevision = revisions[i];\n var nextRevisionType = nextRevision.revisionType;\n var change = nextRevision.range[0];\n if (change instanceof WRowFormat) {\n var nextRow = change.ownerBase;\n var nextTable = nextRow.ownerTable;\n var nextRowIndex = nextRow.index;\n if (!startTable.equals(nextTable) &&\n (!isNullOrUndefined(startParentTable) && startParentTable.equals(this.owner.documentHelper.layout.getParentTable(nextTable)))) {\n continue;\n }\n if (currentRevisionType === nextRevisionType && startRevision.author === nextRevision.author\n && startTable.equals(nextTable) && (rowIndex + 1 === nextRowIndex)) {\n groupedRevision.push(nextRevision);\n rowIndex = nextRowIndex;\n }\n else {\n break;\n }\n }\n else {\n var block = void 0;\n if (change instanceof WCharacterFormat) {\n block = change.ownerBase;\n }\n else if (change instanceof ElementBox) {\n block = change.line.paragraph;\n }\n if (block instanceof ParagraphWidget && block.isInsideTable) {\n var nextTable = block.associatedCell.ownerTable;\n var parentTable = this.owner.documentHelper.layout.getParentTable(nextTable);\n if (startTable.equals(nextTable) || (!startTable.equals(nextTable) &&\n (!isNullOrUndefined(startParentTable) && startParentTable.equals(parentTable)))) {\n continue;\n }\n }\n break;\n }\n }\n return groupedRevision;\n };\n TrackChangesPane.prototype.updateUsers = function () {\n if (this.users.length > 0) {\n this.userDropDownButton.removeItems(this.users);\n this.users = [];\n }\n for (var i = 0; i < this.revisions.length; i++) {\n if (this.users.indexOf(this.revisions[i].author) === -1) {\n this.users.push(this.revisions[i].author);\n this.userDropDownButton.items.push({ text: this.revisions[i].author });\n }\n }\n };\n TrackChangesPane.prototype.updateHeight = function () {\n var tabHeaderHeight = this.commentReviewPane.reviewTab.getRootElement().getElementsByClassName('e-tab-header')[0].getBoundingClientRect().height;\n this.changesInfoDiv.style.height = this.commentReviewPane.parentPaneElement.clientHeight - this.toolbarElement.clientHeight\n - tabHeaderHeight - 2 + 'px';\n };\n TrackChangesPane.prototype.removeAllChanges = function () {\n while (this.changesInfoDiv.childNodes.length > 1) {\n this.changesInfoDiv.removeChild(this.changesInfoDiv.lastChild);\n }\n this.revisions = [];\n if (this.changes && this.changes.length > 0) {\n for (var i = 0; i < this.changes.length; i++) {\n var revision = this.changes.keys[i];\n var changesSingleView = this.changes.get(revision);\n changesSingleView.clear();\n }\n this.changes.clear();\n }\n };\n /**\n * @private\n */\n TrackChangesPane.prototype.clear = function () {\n this.removeAllChanges();\n this.selectedUser = this.locale.getConstant('All');\n this.userDropDownButton.content = this.getSpanView(this.selectedUser, 0);\n this.selectedType = this.locale.getConstant('All');\n this.viewTypeDropDownButton.content = this.getSpanView(this.selectedType, 1);\n this.currentSelectedRevision = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n TrackChangesPane.prototype.destroy = function () {\n if (this.changes && this.changes.length > 0) {\n for (var i = 0; i < this.changes.length; i++) {\n var revision = this.changes.keys[i];\n var changesSingleView = this.changes.get(revision);\n changesSingleView.destroy();\n }\n this.changes.clear();\n }\n this.changes = undefined;\n if (this.toolbar) {\n this.toolbar.destroy();\n this.toolbar = undefined;\n }\n if (this.closeButton && this.closeButton.parentElement) {\n this.closeButton.parentElement.removeChild(this.closeButton);\n }\n this.closeButton = undefined;\n if (this.userDropDownButton) {\n this.userDropDownButton.destroy();\n this.userDropDownButton = undefined;\n }\n if (this.menuDropDownButton) {\n this.menuDropDownButton.destroy();\n this.menuDropDownButton = undefined;\n }\n if (this.viewTypeDropDownButton) {\n this.viewTypeDropDownButton.destroy();\n this.viewTypeDropDownButton = undefined;\n }\n if (this.userDropDown) {\n this.userDropDown = undefined;\n }\n if (this.users.length > 0) {\n this.users = [];\n this.users = undefined;\n }\n if (this.trackChangeDiv) {\n this.trackChangeDiv.innerHTML = '';\n if (this.trackChangeDiv.parentElement) {\n this.trackChangeDiv.parentElement.removeChild(this.trackChangeDiv);\n }\n }\n this.trackChangeDiv = undefined;\n if (this.changesInfoDiv) {\n this.changesInfoDiv.innerHTML = '';\n if (this.changesInfoDiv.parentElement) {\n this.changesInfoDiv.parentElement.removeChild(this.changesInfoDiv);\n }\n }\n this.changesInfoDiv = undefined;\n if (this.commentReviewPane) {\n this.commentReviewPane = undefined;\n }\n if (this.tableRevisions) {\n this.tableRevisions.destroy();\n this.tableRevisions = undefined;\n }\n if (this.renderedChanges) {\n this.renderedChanges.destroy();\n this.renderedChanges = undefined;\n }\n this.currentSelectedRevisionInternal = undefined;\n this.selectedUser = undefined;\n this.selectedType = undefined;\n this.sortedRevisions = [];\n this.sortedRevisions = undefined;\n this.viewTypeitems = [];\n this.viewTypeitems = undefined;\n this.userDropDownitems = [];\n this.userDropDownitems = undefined;\n this.revisions = [];\n this.revisions = undefined;\n this.owner = undefined;\n };\n TrackChangesPane.prototype.addChanges = function (revision) {\n var currentChangeView = new ChangesSingleView(this.owner, this);\n this.changesInfoDiv.appendChild(currentChangeView.createSingleChangesDiv(revision));\n if (!this.enableButtons) {\n if (!(currentChangeView.acceptButtonElement.classList.contains('e-de-overlay'))) {\n currentChangeView.acceptButtonElement.classList.add('e-de-overlay');\n currentChangeView.rejectButtonElement.classList.add('e-de-overlay');\n }\n }\n else if (currentChangeView.acceptButtonElement.classList.contains('e-de-overlay') && !this.owner.documentHelper.isTrackedOnlyMode) {\n currentChangeView.acceptButtonElement.classList.remove('e-de-overlay');\n currentChangeView.rejectButtonElement.classList.remove('e-de-overlay');\n }\n this.revisions.push(revision);\n this.changes.add(revision, currentChangeView);\n this.renderedChanges.add(revision, currentChangeView);\n };\n /**\n * @private\n * @returns {void}\n */\n TrackChangesPane.prototype.navigatePreviousChanges = function () {\n this.revisionNavigateInternal(false);\n };\n /**\n * @private\n * @returns {void}\n */\n TrackChangesPane.prototype.navigateNextChanges = function () {\n this.revisionNavigateInternal(true);\n };\n TrackChangesPane.prototype.revisionNavigateInternal = function (next) {\n var changes = this.renderedChanges.keys;\n if (!this.currentSelectedRevisionInternal) {\n if (changes.length === 0) {\n return;\n }\n this.currentSelectedRevision = changes[0];\n }\n if (this.currentSelectedRevision) {\n var revisions = changes;\n var revision = this.currentSelectedRevision;\n var index = revisions.indexOf(revision);\n if (next) {\n revision = (index === (revisions.length - 1)) ? revisions[0] : revisions[index + 1];\n }\n else {\n revision = index === 0 ? revisions[revisions.length - 1] : revisions[index - 1];\n }\n this.owner.documentHelper.currentSelectedRevision = revision;\n var ranges = revision.range[0];\n if (ranges instanceof WRowFormat) {\n var groupingAccept = this.groupTableRevisions(this.owner.revisions.changes, this.owner.revisions.changes.indexOf(revision));\n this.owner.selectionModule.selectTableRevision(groupingAccept);\n }\n else {\n this.owner.selectionModule.selectRevision(revision);\n }\n }\n this.currentSelectedRevision = this.owner.documentHelper.currentSelectedRevision;\n };\n return TrackChangesPane;\n}());\nexport { TrackChangesPane };\nvar ChangesSingleView = /** @class */ (function () {\n function ChangesSingleView(owner, trackChangesPane) {\n this.owner = owner;\n this.locale = new L10n('documenteditor', this.owner.defaultLocale);\n this.locale.setLocale(this.owner.locale);\n this.trackChangesPane = trackChangesPane;\n }\n ChangesSingleView.prototype.updateRevisionIndexAndCount = function (currentIndex, totalCount) {\n this.changesCount.innerHTML = this.locale.getConstant('Changes') + ' ' + currentIndex.toString() +\n ' ' + this.locale.getConstant('of') + ' ' + totalCount.toString();\n };\n ChangesSingleView.prototype.createSingleChangesDiv = function (revision) {\n this.revision = revision;\n this.user = revision.author;\n this.outerSingleDiv = createElement('div', { className: 'e-de-tc-outer' });\n this.singleInnerDiv = createElement('div', { className: 'e-de-trckchanges-inner' });\n this.singleInnerDiv.addEventListener('click', this.selectRevision.bind(this));\n this.outerSingleDiv.appendChild(this.singleInnerDiv);\n var userNameTotalDiv = createElement('div', { className: 'e-de-track-usernme-div' });\n var userNameLabel = createElement('div', { innerHTML: revision.author, className: 'e-de-track-user-nme' });\n if (!isNullOrUndefined(revision.author)) {\n userNameTotalDiv.style.display = 'flex';\n this.owner.documentHelper.getAvatar(userNameTotalDiv, userNameLabel, undefined, revision);\n }\n var revisionTypeLabel = createElement('div');\n if (revision.revisionType === 'Insertion') {\n this.revisionType = 'Inserted';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Inserted').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-insert');\n }\n else if (revision.revisionType === 'Deletion') {\n this.revisionType = 'Deleted';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Deleted').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-delete');\n }\n else if (revision.revisionType === 'MoveFrom') {\n this.revisionType = 'MoveFrom';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Move From').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-delete');\n revisionTypeLabel.style.whiteSpace = 'nowrap';\n }\n else if (revision.revisionType === 'MoveTo') {\n this.revisionType = 'MoveTo';\n revisionTypeLabel.innerHTML = this.locale.getConstant('Move To').toUpperCase();\n revisionTypeLabel.classList.add('e-de-track-insert');\n revisionTypeLabel.style.whiteSpace = 'nowrap';\n }\n userNameTotalDiv.appendChild(revisionTypeLabel);\n this.singleInnerDiv.appendChild(userNameTotalDiv);\n var dateView = createElement('div', {\n className: 'e-de-track-date',\n innerHTML: HelperMethods.getModifiedDate(revision.date)\n });\n this.singleInnerDiv.appendChild(dateView);\n var changesTextDiv = createElement('div', { id: 'textDiv',\n className: 'e-de-track-chngs-text'\n });\n this.layoutElementText(revision.range, changesTextDiv);\n this.singleInnerDiv.appendChild(changesTextDiv);\n var buttonTotalDiv = createElement('div', {\n styles: 'display:inline-block;width:100%'\n });\n this.singleInnerDiv.appendChild(buttonTotalDiv);\n var buttonDiv = createElement('div', {\n styles: 'float:left;'\n });\n this.acceptButtonElement = createElement('button', { className: 'e-de-track-accept-button' });\n this.acceptButton = new Button({ cssClass: 'e-outline e-success', content: this.locale.getConstant('Accept') });\n this.acceptButtonElement.setAttribute('aria-label', this.locale.getConstant('Accept'));\n buttonDiv.appendChild(this.acceptButtonElement);\n buttonTotalDiv.appendChild(buttonDiv);\n this.acceptButton.appendTo(this.acceptButtonElement);\n if (this.owner.documentHelper.isTrackedOnlyMode) {\n this.acceptButtonElement.classList.add('e-de-overlay');\n }\n this.acceptButtonElement.addEventListener('click', this.acceptButtonClick.bind(this));\n buttonDiv = createElement('div', {\n styles: 'float:left;'\n });\n this.rejectButtonElement = createElement('button', { className: 'e-de-track-reject-button' });\n this.rejectButton = new Button({ cssClass: 'e-outline e-danger', content: this.locale.getConstant('Reject') });\n this.rejectButtonElement.setAttribute('aria-label', this.locale.getConstant('Reject'));\n buttonDiv.appendChild(this.rejectButtonElement);\n buttonTotalDiv.appendChild(buttonDiv);\n this.rejectButton.appendTo(this.rejectButtonElement);\n if (this.owner.documentHelper.isTrackedOnlyMode) {\n this.rejectButtonElement.classList.add('e-de-overlay');\n }\n this.rejectButtonElement.addEventListener('click', this.rejectButtonClick.bind(this));\n this.changesCount = createElement('div', { className: 'e-de-track-chngs-count', styles: 'float:right;' });\n var currentCount = this.owner.revisions.changes.indexOf(revision) + 1;\n var totalCount = this.owner.revisions.changes.length;\n this.changesCount.innerHTML = this.locale.getConstant('Changes') + ' ' + currentCount.toString() +\n ' ' + this.locale.getConstant('of') + ' ' + totalCount.toString();\n buttonTotalDiv.appendChild(this.changesCount);\n return this.outerSingleDiv;\n };\n /**\n * @private\n */\n ChangesSingleView.prototype.appendRowToTable = function (rowFormat, insertIndex) {\n this.tableElement.insertRow();\n for (var k = 0; k < rowFormat.ownerBase.childWidgets.length; k++) {\n this.tableElement.rows[insertIndex].insertCell();\n this.tableElement.rows[insertIndex].cells[k].classList.add('e-de-tc-tble-cell');\n }\n };\n ChangesSingleView.prototype.selectRevision = function () {\n var ranges = this.revision.range[0];\n if (ranges instanceof WRowFormat) {\n var groupingAccept = this.trackChangesPane.groupTableRevisions(this.owner.revisions.changes, this.owner.revisions.changes.indexOf(this.revision));\n this.owner.selectionModule.selectTableRevision(groupingAccept);\n }\n else {\n this.owner.selectionModule.selectRevision(this.revision);\n this.trackChangesPane.onSelection(this.revision);\n }\n };\n ChangesSingleView.prototype.layoutElementText = function (range, changesText) {\n changesText.style.width = '100%';\n var text = '';\n var toSkip = false;\n var isHyperlinkField = false;\n for (var i = 0; i < range.length; i++) {\n var element = range[i];\n if (element instanceof FieldElementBox && element.fieldType === 1) {\n toSkip = false;\n continue;\n }\n // added the condition to skip to get the field result from the field start if the link applied for multiple paragraphs.\n if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldCode = this.owner.selectionModule.getFieldCode(element);\n if (fieldCode.match('HYPERLINK ') && range[range.indexOf(element.fieldEnd) - 1] instanceof TextElementBox) {\n isHyperlinkField = true;\n }\n }\n if (isHyperlinkField && element instanceof FieldElementBox && (element.fieldType === 2 || element.fieldType === 1)) {\n toSkip = false;\n isHyperlinkField = false;\n continue;\n }\n if (toSkip || element instanceof ChartElementBox) {\n continue;\n }\n if (element instanceof FieldElementBox && element.fieldType === 0) {\n toSkip = true;\n }\n if (element instanceof TextElementBox) {\n text += element.text;\n }\n else if (element instanceof FieldElementBox && element.fieldType === 0) {\n var fieldCode = this.owner.selectionModule.getFieldCode(element);\n if (fieldCode.match('TOC ') || fieldCode.match('Toc')) {\n text += '';\n changesText.appendChild(this.addSpan(text));\n return;\n }\n else if ((fieldCode.match('HYPERLINK ') && !isHyperlinkField) || fieldCode.match('MERGEFIELD') || fieldCode.match('FORMTEXT') || fieldCode.match('PAGE ')) {\n text += this.owner.editorModule.retrieveFieldResultantText(element.fieldEnd);\n }\n else if (element.formFieldData) {\n var emptyChar = this.owner.documentHelper.textHelper.repeatChar(this.owner.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n if (text !== '') {\n changesText.appendChild(this.addSpan(text));\n text = '';\n }\n if (element.formFieldData instanceof TextFormField) {\n changesText.appendChild(this.addSpan(element.formFieldData.defaultValue === '' ? emptyChar : element.formFieldData.defaultValue, 'e-de-tc-field'));\n }\n else if (element.formFieldData instanceof DropDownFormField) {\n changesText.appendChild(this.addSpan(element.formFieldData.dropdownItems.length > 0 ? element.formFieldData.dropdownItems[0] : emptyChar, 'e-de-tc-field'));\n }\n else {\n changesText.appendChild(this.addSpan(element.formFieldData.checked ? String.fromCharCode(9745) : String.fromCharCode(9744), 'e-de-tc-field'));\n }\n }\n }\n else if (element instanceof ImageElementBox) {\n if (text !== '') {\n changesText.appendChild(this.addSpan(text));\n text = '';\n }\n var imageEle = createElement('img');\n imageEle.setAttribute('src', this.owner.documentHelper.getImageString(element));\n imageEle.classList.add('e-de-tc-shrink-img');\n changesText.appendChild(imageEle);\n }\n else if (element instanceof WRowFormat) {\n this.tableElement = createElement('table');\n this.tableElement.classList.add('e-de-track-chng-table');\n this.tableElement.insertRow();\n for (var i_1 = 0; i_1 < element.ownerBase.childWidgets.length; i_1++) {\n this.tableElement.rows[0].insertCell();\n this.tableElement.rows[0].cells[i_1].classList.add('e-de-tc-tble-cell');\n }\n changesText.appendChild(this.tableElement);\n return;\n }\n else if (element instanceof WCharacterFormat) {\n if (text !== '') {\n changesText.appendChild(this.addSpan(text));\n text = '';\n }\n var paraMark = '¶';\n if (element.ownerBase instanceof ParagraphWidget && element.ownerBase.isEndsWithPageBreak) {\n paraMark = '............Page Break............' + paraMark;\n }\n changesText.appendChild(this.addSpan(paraMark, 'e-de-tc-pmark'));\n changesText.appendChild(createElement('br'));\n }\n }\n changesText.appendChild(this.addSpan(text));\n };\n ChangesSingleView.prototype.addSpan = function (text, cssClass) {\n var span = createElement('span');\n span.textContent = text;\n if (cssClass) {\n span.classList.add(cssClass);\n }\n return span;\n };\n ChangesSingleView.prototype.acceptButtonClick = function () {\n this.revision.accept();\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n };\n ChangesSingleView.prototype.rejectButtonClick = function () {\n this.revision.reject();\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n };\n ChangesSingleView.prototype.removeFromParentCollec = function () {\n if (this.trackChangesPane.changes.containsKey(this.revision)) {\n this.trackChangesPane.changes.remove(this.revision);\n }\n if (this.trackChangesPane.revisions.indexOf(this.revision) !== -1) {\n this.trackChangesPane.revisions.splice(this.trackChangesPane.revisions.indexOf(this.revision), 1);\n }\n if (this.trackChangesPane.changes.length === 0) {\n this.trackChangesPane.setNoChangesVisibility = true;\n }\n this.trackChangesPane.updateUsers();\n };\n /**\n *\n * @private\n */\n ChangesSingleView.prototype.clear = function () {\n this.removeFromParentCollec();\n if (this.acceptButton) {\n this.acceptButton.destroy();\n this.acceptButton = undefined;\n }\n if (this.rejectButton) {\n this.rejectButton.destroy();\n this.rejectButton = undefined;\n }\n if (this.acceptButtonElement) {\n this.acceptButtonElement.innerHTML = '';\n if (this.acceptButtonElement.parentElement) {\n this.acceptButtonElement.parentElement.removeChild(this.acceptButtonElement);\n }\n this.acceptButtonElement = undefined;\n }\n if (this.rejectButtonElement) {\n this.rejectButtonElement.innerHTML = '';\n if (this.rejectButtonElement.parentElement) {\n this.rejectButtonElement.parentElement.removeChild(this.rejectButtonElement);\n }\n this.rejectButtonElement = undefined;\n }\n if (this.tableElement) {\n this.tableElement.innerHTML = '';\n if (this.tableElement.parentElement) {\n this.tableElement.parentElement.removeChild(this.tableElement);\n }\n this.tableElement = undefined;\n }\n if (this.singleInnerDiv) {\n this.singleInnerDiv.innerHTML = '';\n if (this.singleInnerDiv.parentElement) {\n this.singleInnerDiv.parentElement.removeChild(this.singleInnerDiv);\n }\n this.singleInnerDiv = undefined;\n }\n if (this.outerSingleDiv) {\n this.outerSingleDiv.innerHTML = '';\n if (this.outerSingleDiv.parentElement) {\n this.outerSingleDiv.parentElement.removeChild(this.outerSingleDiv);\n }\n this.outerSingleDiv = undefined;\n }\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ChangesSingleView.prototype.destroy = function () {\n if (this.acceptButton) {\n this.acceptButton.destroy();\n this.acceptButton = undefined;\n }\n if (this.rejectButton) {\n this.rejectButton.destroy();\n this.rejectButton = undefined;\n }\n if (this.acceptButtonElement) {\n this.acceptButtonElement.innerHTML = '';\n if (this.acceptButtonElement.parentElement) {\n this.acceptButtonElement.parentElement.removeChild(this.acceptButtonElement);\n }\n this.acceptButtonElement = undefined;\n }\n if (this.rejectButtonElement) {\n this.rejectButtonElement.innerHTML = '';\n if (this.rejectButtonElement.parentElement) {\n this.rejectButtonElement.parentElement.removeChild(this.rejectButtonElement);\n }\n this.rejectButtonElement = undefined;\n }\n if (this.tableElement) {\n this.tableElement.innerHTML = '';\n if (this.tableElement.parentElement) {\n this.tableElement.parentElement.removeChild(this.tableElement);\n }\n this.tableElement = undefined;\n }\n if (this.singleInnerDiv) {\n this.singleInnerDiv.innerHTML = '';\n if (this.singleInnerDiv.parentElement) {\n this.singleInnerDiv.parentElement.removeChild(this.singleInnerDiv);\n }\n this.singleInnerDiv = undefined;\n }\n if (this.outerSingleDiv) {\n this.outerSingleDiv.innerHTML = '';\n if (this.outerSingleDiv.parentElement) {\n this.outerSingleDiv.parentElement.removeChild(this.outerSingleDiv);\n }\n this.outerSingleDiv = undefined;\n }\n this.revision = undefined;\n this.user = undefined;\n this.revisionType = undefined;\n this.trackChangesPane = undefined;\n this.owner = undefined;\n };\n return ChangesSingleView;\n}());\nexport { ChangesSingleView };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../index';\n/**\n * @private\n */\nvar MajorMinorFontScheme = /** @class */ (function () {\n function MajorMinorFontScheme() {\n this.fntTypeface = new Dictionary();\n this.fntSchemeList = [];\n this.fntTypeface = new Dictionary();\n this.fntSchemeList = [];\n }\n Object.defineProperty(MajorMinorFontScheme.prototype, \"fontTypeface\", {\n get: function () {\n return this.fntTypeface;\n },\n set: function (value) {\n this.fntTypeface = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MajorMinorFontScheme.prototype, \"fontSchemeList\", {\n get: function () {\n return this.fntSchemeList;\n },\n set: function (value) {\n this.fntSchemeList = value;\n },\n enumerable: true,\n configurable: true\n });\n MajorMinorFontScheme.prototype.copyFormat = function (majorMinor) {\n if (!isNullOrUndefined(majorMinor)) {\n this.fntTypeface = majorMinor.fntTypeface;\n this.fntSchemeList = majorMinor.fntSchemeList;\n }\n };\n MajorMinorFontScheme.prototype.destroy = function () {\n this.fntTypeface = undefined;\n this.fntSchemeList = undefined;\n };\n return MajorMinorFontScheme;\n}());\nexport { MajorMinorFontScheme };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { MajorMinorFontScheme } from './major-minor-font-scheme';\n/**\n * @private\n */\nvar FontScheme = /** @class */ (function () {\n function FontScheme(node) {\n this.majFontScheme = new MajorMinorFontScheme();\n this.minFontScheme = new MajorMinorFontScheme();\n }\n Object.defineProperty(FontScheme.prototype, \"fontSchemeName\", {\n get: function () {\n return this.schemeName;\n },\n set: function (value) {\n this.schemeName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FontScheme.prototype, \"majorFontScheme\", {\n get: function () {\n return this.majFontScheme;\n },\n set: function (value) {\n this.majFontScheme = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FontScheme.prototype, \"minorFontScheme\", {\n get: function () {\n return this.minFontScheme;\n },\n set: function (value) {\n this.minFontScheme = value;\n },\n enumerable: true,\n configurable: true\n });\n FontScheme.prototype.copyFormat = function (fontScheme) {\n if (!isNullOrUndefined(fontScheme)) {\n this.schemeName = fontScheme.schemeName;\n this.majFontScheme.copyFormat(fontScheme.majFontScheme);\n this.minFontScheme.copyFormat(fontScheme.minFontScheme);\n }\n };\n FontScheme.prototype.destroy = function () {\n this.schemeName = undefined;\n this.majFontScheme = undefined;\n this.minFontScheme = undefined;\n };\n return FontScheme;\n}());\nexport { FontScheme };\n/**\n * @private\n */\nvar FontSchemeStruct = /** @class */ (function () {\n function FontSchemeStruct() {\n }\n Object.defineProperty(FontSchemeStruct.prototype, \"name\", {\n get: function () {\n return this.fontName;\n },\n set: function (value) {\n this.fontName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FontSchemeStruct.prototype, \"typeface\", {\n get: function () {\n return this.fontTypeface;\n },\n set: function (value) {\n this.fontTypeface = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(FontSchemeStruct.prototype, \"panose\", {\n get: function () {\n return this.pnose;\n },\n set: function (value) {\n this.pnose = value;\n },\n enumerable: true,\n configurable: true\n });\n FontSchemeStruct.prototype.copyFormat = function (fontSchemeStructure) {\n if (!isNullOrUndefined(fontSchemeStructure)) {\n this.fontName = fontSchemeStructure.fontName;\n this.fontTypeface = fontSchemeStructure.fontTypeface;\n this.pnose = fontSchemeStructure.panose;\n }\n };\n FontSchemeStruct.prototype.destroy = function () {\n this.fontName = undefined;\n this.fontTypeface = undefined;\n this.pnose = undefined;\n };\n return FontSchemeStruct;\n}());\nexport { FontSchemeStruct };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { FontScheme } from './font-scheme';\n/**\n * @private\n */\nvar Themes = /** @class */ (function () {\n function Themes(node) {\n this.fntScheme = new FontScheme();\n }\n Object.defineProperty(Themes.prototype, \"fontScheme\", {\n get: function () {\n return this.fntScheme;\n },\n set: function (value) {\n this.fntScheme = value;\n },\n enumerable: true,\n configurable: true\n });\n Themes.prototype.copyFormat = function (themes) {\n if (!isNullOrUndefined(themes)) {\n this.fntScheme.copyFormat(themes.fntScheme);\n }\n };\n Themes.prototype.destroy = function () {\n this.fntScheme = undefined;\n };\n return Themes;\n}());\nexport { Themes };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n/* eslint-disable */\nimport { Dictionary } from '../../base/dictionary';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WSectionFormat, WCharacterFormat, WParagraphFormat, WStyles, WColumnFormat } from '../format/index';\nimport { Layout } from './layout';\nimport { Renderer } from './render';\nimport { createElement, Browser, L10n } from '@syncfusion/ej2-base';\nimport { Page, Rect, Widget, ListTextElementBox, ParagraphWidget, HeaderFooterWidget, Padding, DropDownFormField, TextFormField, CheckBoxFormField, ShapeElementBox, TextFrame, ContentControl, Footnote, FootnoteElementBox, FootNoteWidget, TextElementBox, ShapeBase, ImageElementBox } from './page';\nimport { BodyWidget, LineWidget, TableWidget, TableRowWidget } from './page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { TextHelper } from './text-helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CommentReviewPane } from '../index';\nimport { Zoom } from './zooming';\nimport { Dialog, createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { beforePaneSwitchEvent, keyDownEvent, beforeFormFieldFillEvent, afterFormFieldFillEvent } from '../../base/index';\nimport { RestrictEditing } from '../restrict-editing/restrict-editing-pane';\nimport { FormFieldPopUp } from '../dialogs/form-field-popup';\nimport { ContentControlPopUp } from '../dialogs/content-control-popup';\nimport { TrackChangesPane } from '../track-changes/track-changes-pane';\nimport { Themes } from '../themes/themes';\nimport { beforeAutoResize, internalAutoResize } from '../../base/constants';\nimport { incrementalOps } from '../../base/index';\n/**\n * @private\n */\nvar DocumentHelper = /** @class */ (function () {\n //#endregion\n function DocumentHelper(owner) {\n var _this = this;\n /**\n * @private\n */\n this.isCompleted = true;\n /**\n * @private\n */\n this.isSelectionCompleted = true;\n /**\n * @private\n */\n this.scrollbarWidth = 0;\n /**\n * @private\n */\n this.isWebPrinting = false;\n /**\n * @private\n */\n this.isHeaderFooter = false;\n /**\n * @private\n */\n this.currentPage = undefined;\n this.selectionStartPageIn = undefined;\n this.selectionEndPageIn = undefined;\n /**\n * @private\n */\n this.fieldStacks = [];\n /**\n * @private\n */\n this.showRevision = false;\n /**\n * @private\n */\n this.splittedCellWidgets = [];\n /**\n * @private\n */\n this.tableLefts = [];\n /**\n * @private\n */\n this.tapCount = 0;\n this.timer = -1;\n this.isTimerStarted = false;\n /**\n * @private\n */\n this.isFirstLineFitInShiftWidgets = false;\n /**\n * @private\n */\n this.preZoomFactor = 0;\n /**\n * @private\n */\n this.preDifference = -1;\n /**\n * @private\n */\n this.isDragging = false;\n /**\n * @private\n */\n this.fieldEndParagraph = undefined;\n /**\n * @private\n */\n this.fieldToLayout = undefined;\n /**\n * @private\n */\n this.backgroundColor = '#FFFFFF';\n // Event\n /**\n * @private\n */\n this.isMouseDown = false;\n this.isMouseEntered = false;\n this.scrollMoveTimer = 0;\n /**\n * @private\n */\n this.isSelectionChangedOnMouseMoved = false;\n /**\n * @private\n */\n this.isControlPressed = false;\n /**\n * @private\n */\n this.isTouchInput = false;\n /**\n * @private\n */\n this.isTouchMoved = false;\n /**\n * @private\n */\n this.useTouchSelectionMark = false;\n /**\n * @private\n */\n this.touchDownOnSelectionMark = 0;\n /**\n * @private\n */\n this.isComposingIME = false;\n /**\n * @private\n */\n this.lastComposedText = '';\n /**\n * @private\n */\n this.isCompositionStart = false;\n /**\n * @private\n */\n this.isCompositionUpdated = false;\n /**\n * @private\n */\n this.isCompositionCanceled = false;\n /**\n * @private\n */\n this.isCompositionEnd = false;\n /**\n * @private\n */\n this.prefix = '';\n /**\n * @private\n */\n this.suffix = '';\n /**\n * @private\n */\n this.fields = [];\n /**\n * @private\n */\n this.heightInfoCollection = {};\n /**\n * @private\n */\n this.defaultTabWidth = 36;\n /**\n * @private\n */\n this.dontUseHtmlParagraphAutoSpacing = false;\n /**\n * @private\n */\n this.allowSpaceOfSameStyleInTable = false;\n /**\n * @private\n */\n this.alignTablesRowByRow = false;\n /**\n * @private\n */\n this.compatibilityMode = 'Word2013';\n /**\n * @private\n */\n this.lists = [];\n /**\n * @private\n */\n this.comments = [];\n /**\n * @private\n */\n this.authors = new Dictionary();\n /**\n * @private\n */\n this.revisionsInternal = new Dictionary();\n /**\n * @private\n */\n this.commentUserOptionId = 1;\n /**\n * @private\n */\n this.abstractLists = [];\n /**\n * @private\n */\n this.styles = new WStyles();\n /**\n * @private\n */\n this.stylesMap = new Dictionary();\n /**\n * @private\n */\n this.preDefinedStyles = undefined;\n /**\n * @private\n */\n this.isRowOrCellResizing = false;\n /**\n * @private\n */\n this.endBookmarksUpdated = [];\n /**\n * @private\n */\n this.formFields = [];\n this.isMouseDownInFooterRegion = false;\n this.pageFitTypeIn = 'None';\n /**\n * @private\n */\n this.fieldCollection = [];\n /**\n * @private\n */\n this.isPageField = false;\n /**\n * @private\n */\n this.mouseDownOffset = new Point(0, 0);\n this.zoomFactorInternal = 1;\n /**\n * If movecaretposition is 1, Home key is pressed\n * If moveCaretPosition is 2, End key is pressed\n *\n * @private\n */\n this.moveCaretPosition = 0;\n /**\n * @private\n */\n this.isTextInput = false;\n /**\n * @private\n */\n this.isScrollHandler = false;\n /**\n * @private\n */\n this.triggerElementsOnLoading = false;\n /**\n * @private\n */\n this.triggerSpellCheck = false;\n //Document Protection Properties Starts\n /**\n * preserve the format\n *\n * @private\n */\n this.restrictFormatting = false;\n /**\n * preserve the document protection type either readonly or no protection\n *\n * @private\n */\n this.protectionType = 'NoProtection';\n /**\n * Preserve the password protection is enforced or not\n *\n * @private\n */\n this.isDocumentProtected = false;\n /**\n * preserve the hash value of password\n *\n * @private\n */\n this.hashValue = '';\n /**\n * @private\n */\n this.saltValue = '';\n /**\n * @private\n */\n this.userCollection = [];\n /**\n * @private\n */\n this.cachedPages = [];\n /**\n * @private\n */\n this.skipScrollToPosition = false;\n /**\n * @private\n */\n this.isIosDevice = false;\n /**\n * @private\n */\n this.isMobileDevice = false;\n /**\n * @private\n */\n this.isFormFilling = false;\n /**\n * @private\n */\n this.fontSubstitutionTable = undefined;\n /**\n * @private\n */\n this.themes = new Themes();\n /**\n * @private\n */\n this.hasThemes = false;\n /**\n * @private\n */\n this.footnotes = new Footnote();\n /**\n * @private\n */\n this.endnotes = new Footnote();\n /**\n * @private\n */\n this.isFootnoteWidget = false;\n /**\n * @private\n */\n this.isDragStarted = false;\n /**\n * @private\n */\n this.isMouseDownInSelection = false;\n /**\n * @private\n */\n this.isBookmarkInserted = true;\n this.isAutoResizeCanStart = false;\n this.isRestartNumbering = false;\n /**\n * @private\n * @param {TextEvent} event - Specifies text event.\n * @returns {void}\n */\n this.onTextInput = function (event) {\n if (!_this.isComposingIME) {\n event.preventDefault();\n var text = event.data;\n _this.owner.editorModule.handleTextInput(text);\n }\n };\n //#region Composition Event\n /**\n * Fires when composition starts.\n *\n * @private\n * @returns {void}\n */\n this.compositionStart = function () {\n if (!Browser.isDevice && !_this.owner.isReadOnlyMode) {\n _this.isComposingIME = true;\n _this.positionEditableTarget();\n if (_this.owner.editorHistoryModule) {\n _this.owner.editorModule.initComplexHistory('IMEInput');\n }\n }\n _this.isCompositionStart = true;\n };\n /**\n * Fires on every input during composition.\n *\n * @private\n * @returns {void}\n */\n this.compositionUpdated = function () {\n if (_this.isComposingIME && !_this.owner.isReadOnlyMode) {\n setTimeout(function () {\n _this.owner.editorModule.insertIMEText(_this.getEditableDivTextContent(), true);\n }, 0);\n }\n _this.isCompositionUpdated = true;\n };\n /**\n * Fires when user selects a character/word and finalizes the input.\n *\n * @private\n * @param {CompositionEvent} event - Specifies text compisition event.\n * @returns {void}\n */\n this.compositionEnd = function (event) {\n if (_this.isComposingIME && !_this.owner.isReadOnlyMode) {\n var text = _this.getEditableDivTextContent();\n if (text !== '') {\n _this.owner.editorModule.insertIMEText(text, false);\n }\n _this.isComposingIME = false;\n _this.lastComposedText = '';\n _this.iframe.setAttribute('style', 'pointer-events:none;position:absolute;left:' + _this.owner.viewer.containerLeft + 'px;top:' + _this.owner.viewer.containerTop + 'px;outline:none;background-color:transparent;width:0px;height:0px;overflow:hidden');\n _this.editableDiv.innerHTML = '';\n if (_this.owner.editorHistoryModule) {\n if (text !== '') {\n _this.owner.editorModule.isSkipOperationsBuild = _this.owner.enableCollaborativeEditing;\n }\n _this.owner.editorHistoryModule.updateComplexHistory();\n if (text === '') {\n //When the composition in live. The Undo operation will terminate the composition and empty text will be return from text box.\n //At that time the the history should be updated. Undo the operation and clear the redo stack. This undo operation will not be saved for redo operation.\n _this.owner.editorModule.isSkipOperationsBuild = _this.owner.enableCollaborativeEditing;\n _this.owner.editorHistoryModule.undo();\n _this.owner.editorHistoryModule.redoStack.pop();\n }\n _this.owner.editorModule.isSkipOperationsBuild = false;\n }\n }\n event.preventDefault();\n _this.isCompositionUpdated = false;\n _this.isCompositionEnd = true;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.onImageResizer = function (args) {\n if (!isNullOrUndefined(_this.owner) && !isNullOrUndefined(_this.owner.imageResizerModule) &&\n _this.owner.imageResizerModule.isImageResizerVisible && _this.owner.imageResizerModule.isImageResizing) {\n if (args instanceof MouseEvent) {\n _this.onMouseUpInternal(args);\n }\n else if (args instanceof TouchEvent) {\n _this.onTouchUpInternal(args);\n }\n }\n if (_this.scrollMoveTimer) {\n _this.isMouseEntered = true;\n clearInterval(_this.scrollMoveTimer);\n }\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event\n * @returns {void}\n */\n this.onKeyPressInternal = function (event) {\n var key = event.which || event.keyCode;\n _this.triggerElementsOnLoading = false;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection\n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n if (Browser.isIE && alt && ctrl) {\n ctrl = false;\n }\n // tslint:disable-next-line:max-line-length\n if (ctrl && event.key === 'v' || ctrl && event.key === 'a' || (ctrl || (_this.isControlPressed && Browser.isIE)) && event.key === 'p') {\n if (Browser.isIE) {\n _this.isControlPressed = false;\n }\n return;\n }\n if (!_this.owner.isReadOnlyMode && _this.owner.editorModule.canEditContentControl || (_this.owner.documentHelper.protectionType === 'FormFieldsOnly' && _this.owner.editorModule.canEditContentControl && !isNullOrUndefined(_this.owner.documentHelper.selection) && _this.owner.documentHelper.selection.checkContentControlLocked()) || (!isNullOrUndefined(_this.selection) && _this.selection.isInlineFormFillMode())) {\n var key_1 = event.keyCode || event.charCode;\n var char = '';\n if (key_1) {\n char = String.fromCharCode(key_1);\n }\n else if (event.key) {\n char = event.key;\n }\n if (char !== ' ' && char !== '\\r' && char !== '\\b' && char !== String.fromCharCode(27) && !ctrl) {\n _this.owner.editorModule.handleTextInput(char);\n }\n else if (char === ' ') {\n _this.triggerSpellCheck = true;\n _this.owner.editorModule.handleTextInput(' ');\n _this.triggerSpellCheck = false;\n }\n event.preventDefault();\n }\n _this.owner.focusIn();\n };\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event\n * @returns {void}\n */\n this.onTextInputInternal = function (event) {\n if (!_this.owner.isReadOnlyMode) {\n _this.owner.editorModule.onTextInputInternal();\n }\n else {\n _this.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n *\n * @private\n * @param {ClipboardEvent} event - Specifies clipboard event.\n * @returns {void}\n */\n this.onPaste = function (event) {\n if ((!_this.owner.isReadOnlyMode && _this.owner.editorModule.canEditContentControl) || _this.selection.isInlineFormFillMode()) {\n _this.owner.editorModule.pasteInternal(event);\n }\n _this.editableDiv.innerText = '';\n event.preventDefault();\n };\n /**\n * Fires when editable div loses focus.\n *\n * @private\n * @returns {void}\n */\n this.onFocusOut = function () {\n if (!isNullOrUndefined(_this.selection)) {\n if (_this.owner.contextMenuModule && _this.owner.contextMenuModule.contextMenuInstance &&\n _this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n _this.selection.hideCaret();\n }\n };\n /**\n * Updates focus to editor area.\n *\n * @private\n * @returns {void}\n */\n this.updateFocus = function () {\n if (_this.owner.enableCollaborativeEditing && _this.owner.editorModule.isRemoteAction) {\n return;\n }\n if (!isNullOrUndefined(_this.currentSelectedComment) && !_this.owner.commentReviewPane.commentPane.isEditMode) {\n if (_this.owner.commentReviewPane && _this.owner.commentReviewPane.commentPane.isEditMode) {\n _this.owner.commentReviewPane.commentPane.selectComment(_this.currentSelectedComment);\n }\n _this.selection.hideCaret();\n return;\n }\n if (_this.selection && !(_this.isMobileDevice && _this.owner.isReadOnly)) {\n if (navigator !== undefined && !Browser.isDevice && !Browser.isIE && !navigator.userAgent.match('Edge')\n && !isNullOrUndefined(_this.iframe)) {\n _this.iframe.focus();\n }\n if (!isNullOrUndefined(_this.editableDiv)) {\n _this.editableDiv.focus();\n }\n _this.selection.showCaret();\n }\n };\n /**\n * Fires on scrolling.\n *\n * @returns {void}\n */\n this.scrollHandler = function () {\n if (_this.scrollTimer) {\n clearTimeout(_this.scrollTimer);\n }\n _this.clearContent();\n _this.isScrollHandler = true;\n if (!Browser.isDevice && !_this.isComposingIME) {\n _this.iframe.style.top = _this.owner.viewer.containerTop + 'px';\n _this.iframe.style.left = _this.owner.viewer.containerLeft + 'px';\n }\n if (_this.owner.hRuler) {\n var hRuler = document.getElementById(_this.owner.element.id + ('_hRulerBottom'));\n hRuler.style.top = _this.viewerContainer.scrollTop + 'px';\n var markIndicator = document.getElementById(_this.owner.element.id + ('_markIndicator'));\n if (markIndicator) {\n markIndicator.style.top = _this.viewerContainer.scrollTop + 'px';\n }\n }\n if (_this.owner.vRuler) {\n var vRuler = document.getElementById(_this.owner.element.id + ('_vRulerBottom'));\n vRuler.style.left = _this.viewerContainer.scrollLeft + 'px';\n var markIndicator = document.getElementById(_this.owner.element.id + ('_markIndicator'));\n if (markIndicator) {\n markIndicator.style.left = _this.viewerContainer.scrollLeft + 'px';\n }\n }\n if (_this.owner.rulerHelper && !isNullOrUndefined(_this.owner.rulerHelper.vRulerBottom)) {\n _this.owner.rulerHelper.vRulerBottom.style.height = _this.pageContainer.offsetHeight + 'px';\n }\n _this.owner.viewer.updateScrollBars();\n var vtHeight = _this.owner.viewer.containerTop + _this.visibleBounds.height - (_this.owner.viewer.padding.top + _this.owner.viewer.padding.bottom);\n if (vtHeight > _this.pageContainer.offsetHeight) {\n _this.viewerContainer.scrollTop = _this.owner.viewer.containerTop - (vtHeight - _this.pageContainer.offsetHeight);\n }\n if (_this.owner.viewer instanceof PageLayoutViewer && !isNullOrUndefined(_this.owner)) {\n _this.owner.fireViewChange();\n }\n _this.isScrollHandler = false;\n _this.scrollTimer = setTimeout(function () {\n if (!_this.isScrollHandler && !isNullOrUndefined(_this.owner) && _this.owner.isSpellCheck) {\n _this.isScrollToSpellCheck = true;\n _this.owner.viewer.updateScrollBars();\n }\n }, 200);\n };\n /**\n * Fires when the window gets resized.\n *\n * @private\n * @returns {void}\n */\n this.onWindowResize = function () {\n if (!isNullOrUndefined(_this.owner) && _this.owner.isContainerResize) {\n _this.owner.isContainerResize = false;\n return;\n }\n if (_this.resizeTimer) {\n clearTimeout(_this.resizeTimer);\n }\n _this.resizeTimer = setTimeout(function () {\n if (!isNullOrUndefined(_this.owner) && !isNullOrUndefined(_this.owner.element)) {\n _this.updateViewerSize();\n if (_this.owner.rulerHelper && _this.owner.documentEditorSettings && _this.owner.documentEditorSettings.showRuler) {\n _this.owner.rulerHelper.updateRuler(_this.owner, true);\n }\n if (_this.owner.enableCollaborativeEditing && _this.owner.collaborativeEditingHandlerModule) {\n _this.owner.collaborativeEditingHandlerModule.updateCaretPosition();\n }\n _this.clearContent();\n _this.owner.viewer.updateScrollBars();\n if (!isNullOrUndefined(_this.selection)) {\n _this.selection.updateCaretPosition();\n }\n _this.updateTouchMarkPosition();\n if (_this.owner.contextMenuModule && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (_this.resizeTimer) {\n clearTimeout(_this.resizeTimer);\n }\n }\n }, 200);\n };\n /**\n * @private\n * @param {MouseEvent} event - Specified mouse event.\n * @returns {void}\n */\n this.onContextMenu = function (event) {\n if (_this.owner.contextMenuModule) {\n if (_this.isMouseDown) {\n _this.isMouseDown = false;\n }\n _this.owner.contextMenuModule.onContextMenuInternal(event);\n _this.updateFocus();\n }\n };\n /**\n * Called on mouse down.\n *\n * @private\n * @param {MouseEvent} event - Specifies mouse event.\n * @returns {void}\n */\n this.onMouseDownInternal = function (event) {\n var target = event.target;\n _this.owner.focusIn();\n if ((!isNullOrUndefined(target) && target !== _this.viewerContainer) || _this.owner.isTableMarkerDragging || _this.isTouchInput ||\n event.offsetX > (_this.visibleBounds.width - (_this.visibleBounds.width - _this.viewerContainer.clientWidth))\n || event.offsetY > (_this.visibleBounds.height - (_this.visibleBounds.height - _this.viewerContainer.clientHeight))) {\n return;\n }\n _this.isFootnoteWidget = false;\n if (!isNullOrUndefined(_this.selection)) {\n _this.updateCursor(event);\n if (_this.formFillPopup) {\n _this.formFillPopup.hidePopup();\n }\n if (_this.contentDropDown) {\n _this.contentDropDown.hidePopup();\n }\n if (_this.isLeftButtonPressed(event) && !_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n if (_this.selection.isInShape) {\n var textFram = _this.owner.selectionModule.getCurrentTextFrame();\n var shape = textFram.containerShape;\n _this.selection.selectShape(shape);\n }\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n event.preventDefault();\n if (!_this.isTouchInput) {\n _this.selection.hideCaret();\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true, true);\n _this.mouseDownOffset.x = touchPoint.x;\n _this.mouseDownOffset.y = touchPoint.y;\n _this.isMouseDownInFooterRegion = _this.selection.isCursorInsidePageRect(cursorPoint, _this.currentPage) && _this.selection.isCursorInFooterRegion(cursorPoint, _this.currentPage);\n _this.isSelectionChangedOnMouseMoved = false;\n if (!_this.owner.isReadOnlyMode && (_this.owner.editorModule.tableResize.isInCellResizerArea(touchPoint) ||\n _this.owner.editorModule.tableResize.isInRowResizerArea(touchPoint))) {\n _this.selection.hideCaret();\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n if (_this.isLeftButtonPressed(event)) {\n _this.owner.editorModule.tableResize.startingPoint.x = touchPoint.x;\n _this.owner.editorModule.tableResize.startingPoint.y = touchPoint.y;\n _this.owner.editorModule.tableResize.handleResize(touchPoint);\n }\n return;\n }\n if (event.ctrlKey) {\n _this.isControlPressed = true;\n }\n if (_this.owner.selectionModule.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n var widget = _this.getLineWidget(touchPoint);\n if (event.which === 3 && !_this.owner.selectionModule.isEmpty\n && _this.selection.checkCursorIsInSelection(widget, touchPoint)) {\n event.preventDefault();\n return;\n }\n if (_this.owner && _this.owner.documentEditorSettings && _this.owner.documentEditorSettings.allowDragAndDrop &&\n !_this.owner.selectionModule.isEmpty\n && _this.selection.checkCursorIsInSelection(widget, touchPoint)) {\n _this.isMouseDownInSelection = true;\n }\n _this.isTouchInput = false;\n _this.isMouseDown = true;\n _this.updateFocus();\n /* eslint-disable @typescript-eslint/indent */\n _this.timer = setTimeout(function () {\n _this.tapCount++;\n if (_this.tapCount > 1) {\n _this.tapCount = 1;\n }\n if (!_this.isScrollHandler && !isNullOrUndefined(_this.owner) && _this.owner.isSpellCheck) {\n _this.isScrollToSpellCheck = true;\n _this.owner.viewer.updateScrollBars();\n }\n }, 100);\n }\n };\n /**\n * Called on mouse move.\n *\n * @private\n * @param {MouseEvent} event - Specified mouse event.\n * @returns {void}\n */\n this.onMouseMoveInternal = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.viewerContainer || _this.owner.isTableMarkerDragging) {\n return;\n }\n event.preventDefault();\n if (!isNullOrUndefined(_this.selection)) {\n //For image Resizing\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode\n && _this.owner.imageResizerModule.isImageResizing) {\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnMouse(event);\n }\n return;\n }\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, !_this.owner.enableHeaderAndFooter);\n var widget = _this.getLineWidget(touchPoint);\n if (_this.isMouseDown) {\n if (!isNullOrUndefined(_this.currentPage)) {\n var xPosition = touchPoint.x;\n var yPosition = touchPoint.y;\n if (!_this.owner.isReadOnlyMode && _this.isRowOrCellResizing) {\n var table = _this.owner.editorModule.tableResize.currentResizingTable;\n var startPosition = _this.selection.setPositionForBlock(table, true);\n var endPosition = _this.selection.setPositionForBlock(table, false);\n if (!(_this.owner.documentHelper.isDocumentProtected) || _this.selection.checkSelectionIsAtEditRegion(startPosition, endPosition)) {\n _this.owner.editorModule.tableResize.handleResizing(touchPoint);\n }\n }\n else {\n if ((!_this.isDragStarted\n && _this.isMouseDownInSelection\n && _this.isLeftButtonPressed(event)\n && !_this.owner.selectionModule.isEmpty\n && _this.selection.checkCursorIsInSelection(widget, touchPoint)) || (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && !_this.isDragStarted && _this.isLeftButtonPressed(event) && !_this.owner.selectionModule.isEmpty && !isNullOrUndefined(widget) && _this.owner.imageResizerModule.selectedImageWidget.containsKey(widget) && !_this.owner.imageResizerModule.isImageResizing)) {\n _this.isDragStarted = true;\n _this.isMouseDownInSelection = false;\n if (_this.selection.isForward) {\n _this.dragStartParaInfo = _this.selection.getParagraphInfo(_this.selection.start);\n _this.dragEndParaInfo = _this.selection.getParagraphInfo(_this.selection.end);\n }\n else {\n _this.dragStartParaInfo = _this.selection.getParagraphInfo(_this.selection.end);\n _this.dragEndParaInfo = _this.selection.getParagraphInfo(_this.selection.start);\n }\n _this.selection.caret.classList.remove(\"e-de-cursor-animation\");\n }\n if (!(_this.isTouchInput || _this.isSelectionChangedOnMouseMoved || _this.touchDownOnSelectionMark > 0 || _this.isDragStarted)) {\n _this.updateTextPositionForSelection(touchPoint, 1);\n }\n if (_this.isLeftButtonPressed(event) && !_this.isDragStarted) {\n event.preventDefault();\n var touchY = yPosition;\n var textPosition = _this.owner.selectionModule.end;\n var touchPoint_1 = new Point(xPosition, touchY);\n if (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizerVisible\n || _this.owner.imageResizerModule.isShapeResize) {\n _this.isCompleted = false;\n _this.owner.selectionModule.moveTextPosition(touchPoint_1, textPosition);\n }\n _this.isSelectionChangedOnMouseMoved = true;\n }\n if (_this.isDragStarted && _this.isLeftButtonPressed(event)) {\n _this.autoScrollOnSelection(cursorPoint);\n _this.selection.updateTextPosition(widget, touchPoint);\n }\n }\n }\n _this.selection.checkForCursorVisibility();\n }\n if (!_this.isRowOrCellResizing && !_this.isSelectionChangedOnMouseMoved) {\n _this.updateCursor(event);\n }\n if (_this.isRowOrCellResizing) {\n _this.selection.hideCaret();\n }\n }\n };\n /**\n * @private\n * @param {MouseEvent} event - Specifies mouse event\n * @returns {void}\n */\n this.onMouseLeaveInternal = function (event) {\n event.preventDefault();\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n if (_this.isMouseDown) {\n var viewerTop = _this.viewerContainer.scrollTop;\n clearInterval(_this.scrollMoveTimer);\n if (event.offsetY + viewerTop > viewerTop) {\n _this.scrollMoveTimer = setInterval(function () {\n _this.scrollForwardOnSelection(cursorPoint);\n }, 100);\n }\n else {\n _this.scrollMoveTimer = setInterval(function () {\n _this.scrollBackwardOnSelection(cursorPoint);\n }, 100);\n }\n if (_this.isMouseEntered) {\n _this.isMouseEntered = false;\n }\n }\n if (_this.isDragStarted) {\n _this.selection.hideCaret();\n if (_this.scrollMoveTimer) {\n clearInterval(_this.scrollMoveTimer);\n _this.scrollMoveTimer = 0;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onMouseEnterInternal = function (event) {\n if (!_this.isMouseEntered) {\n _this.owner.viewer.updateScrollBars();\n }\n _this.isMouseEntered = true;\n if (_this.scrollMoveTimer) {\n clearInterval(_this.scrollMoveTimer);\n }\n if (!_this.isLeftButtonPressed(event) && _this.isDragStarted) {\n if (!_this.selection.caret.classList.contains(\"e-de-cursor-animation\")) {\n _this.selection.caret.classList.add(\"e-de-cursor-animation\");\n }\n _this.isDragStarted = false;\n }\n if (!_this.isLeftButtonPressed(event) && _this.isMouseDown) {\n _this.onMouseUpInternal(event);\n }\n };\n /**\n * Fired on double tap.\n *\n * @private\n * @param {MouseEvent} event - Specifies mouse event.\n * @returns {void}\n */\n this.onDoubleTap = function (event) {\n _this.owner.focusIn();\n if (!isNullOrUndefined(event.target) && event.target !== _this.viewerContainer) {\n return;\n }\n if (!isNullOrUndefined(_this.selection)) {\n _this.isTouchInput = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true);\n if (_this.selection.checkAndEnableHeaderFooter(cursorPoint, _this.owner.viewer.findFocusedPage(cursorPoint, true))) {\n return;\n }\n var widget = _this.getLineWidget(touchPoint);\n if (isNullOrUndefined(widget)) {\n return;\n }\n var formField = _this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint, true);\n if (isNullOrUndefined(formField)) {\n formField = _this.selection.getCurrentFormField();\n }\n if (!_this.isDocumentProtected && _this.owner.enableFormField && !_this.owner.isReadOnlyMode) {\n var formatType = _this.selection.getFormFieldType(formField);\n if (formatType) {\n if (formatType.toString() !== '') {\n _this.selection.selectField(formField);\n }\n switch (formatType) {\n case 'Text':\n _this.owner.textFormFieldDialogModule.show();\n break;\n case 'CheckBox':\n _this.owner.checkBoxFormFieldDialogModule.show();\n break;\n case 'DropDown':\n _this.owner.dropDownFormFieldDialogModule.show();\n break;\n }\n }\n }\n else if (_this.isDocumentProtected && formField && formField.formFieldData instanceof TextFormField\n && formField.formFieldData.type === 'Text') {\n _this.selection.selectField();\n }\n var startPosition = _this.selection.start.clone();\n var endPosition = _this.selection.end.clone();\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, 0);\n var inline = inlineObj.element;\n if (_this.owner.layoutType === 'Pages') {\n if (inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n var footnotes = _this.currentPage.footnoteWidget;\n var i = void 0;\n for (i = 0; i <= footnotes.bodyWidgets.length; i++) {\n var footnoteText = (footnotes.bodyWidgets[i]).footNoteReference;\n if (inline.text === footnoteText.text) {\n break;\n }\n }\n startPosition.setPositionParagraph(footnotes.bodyWidgets[i].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionParagraph(footnotes.bodyWidgets[i].childWidgets[0].childWidgets[0], 0);\n _this.selection.selectRange(startPosition, endPosition);\n }\n else {\n var endnotes = _this.pages[_this.pages.length - 1].endnoteWidget;\n var i = void 0;\n if (!isNullOrUndefined(endnotes)) {\n for (i = 0; i <= endnotes.childWidgets.length; i++) {\n var endnoteText = (endnotes.bodyWidgets[i]).footNoteReference;\n if (inline.text === endnoteText.text) {\n break;\n }\n }\n }\n startPosition.setPositionParagraph(endnotes.bodyWidgets[i].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionParagraph(endnotes.bodyWidgets[i].childWidgets[0].childWidgets[0], 0);\n _this.selection.selectRange(startPosition, endPosition);\n }\n }\n else {\n if (inline instanceof TextElementBox && (_this.selection.isinEndnote || _this.selection.isinFootnote)) {\n _this.selection.footnoteReferenceElement(startPosition, endPosition, inline);\n }\n }\n }\n if (_this.selection.isEmpty && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selectionModule.start)) {\n _this.owner.selectionModule.selectCurrentWord();\n _this.selection.checkForCursorVisibility();\n _this.tapCount = 2;\n }\n }\n };\n /**\n * Called on mouse up.\n *\n * @private\n * @param {MouseEvent} event - Specifies mouse event.\n * @return {void}\n */\n /* eslint-disable */\n this.onMouseUpInternal = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.viewerContainer || _this.owner.isTableMarkerDragging) {\n return;\n }\n event.preventDefault();\n _this.isListTextSelected = false;\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true);\n if (!isNullOrUndefined(_this.selection)) {\n var tapCount = 1;\n if (!Browser.isIE) {\n if (event.detail > 2) {\n tapCount = event.detail;\n }\n }\n else {\n tapCount = _this.tapCount;\n }\n if (_this.isRowOrCellResizing) {\n _this.owner.editorModule.tableResize.updateResizingHistory(touchPoint);\n }\n if (!isNullOrUndefined(_this.owner.editor) && _this.selection.checkContentControlLocked()) {\n _this.owner.editorModule.insertContentControlPlaceholder();\n }\n if (_this.isMouseDown && !_this.isSelectionChangedOnMouseMoved\n && !isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selectionModule.start)\n && (!_this.owner.enableImageResizerMode || !_this.owner.imageResizerModule.isImageResizing)) {\n if (_this.touchDownOnSelectionMark === 0 && !_this.isRowOrCellResizing) {\n var isShiftKeyPressed = event.shiftKey;\n if (isShiftKeyPressed) {\n var textPosition = _this.owner.selectionModule.end;\n _this.owner.selectionModule.moveTextPosition(touchPoint, textPosition);\n }\n else {\n _this.updateTextPositionForSelection(touchPoint, tapCount);\n // to check whether the image is selected\n if (_this.owner.selectionModule.isImageSelected) {\n var contentControlImage = _this.owner.getImageContentControl();\n // to check whether selected image has content control and type as picture , then the dialog opens\n if (contentControlImage instanceof ContentControl) {\n if (contentControlImage.contentControlProperties.type == 'Picture') {\n var picturePositionY = _this.owner.picturePositionY;\n _this.owner.renderPictureContentControlElement(_this.owner, true, false, picturePositionY);\n }\n }\n }\n else {\n _this.owner.renderPictureContentControlElement(_this.owner, false, false);\n }\n }\n if (Browser.isIE && tapCount === 2) {\n _this.selection.checkAndEnableHeaderFooter(cursorPoint, touchPoint);\n }\n }\n _this.selection.checkForCursorVisibility();\n if (!isNullOrUndefined(_this.currentSelectedComment) && _this.owner.commentReviewPane\n && !_this.owner.commentReviewPane.commentPane.isEditMode) {\n _this.currentSelectedComment = undefined;\n }\n }\n var isCtrlkeyPressed = _this.isIosDevice ? event.metaKey : event.ctrlKey;\n if (!isNullOrUndefined(_this.owner.editorModule) && !isNullOrUndefined(_this.owner.selectionModule)) {\n var contentControl = _this.owner.editorModule.getContentControl();\n var iscontentControl = _this.owner.selectionModule.checkContentControlLocked();\n if ((!isNullOrUndefined(contentControl) && !contentControl.contentControlProperties.lockContents && !_this.isDocumentProtected && iscontentControl && event.button === 0) || (!isNullOrUndefined(contentControl) && !contentControl.contentControlProperties.lockContents && _this.protectionType == 'FormFieldsOnly' && event.button === 0)) {\n if (contentControl.contentControlProperties.type === 'CheckBox') {\n _this.owner.editor.toggleContentControlCheckBox(contentControl);\n if (contentControl.contentControlProperties.isTemporary) {\n _this.owner.editor.removeContentControl();\n }\n }\n }\n }\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.owner.selectionModule.start)\n && (_this.owner.selectionModule.isEmpty || _this.owner.selectionModule.isImageSelected) &&\n (((isCtrlkeyPressed && _this.owner.useCtrlClickToFollowHyperlink ||\n !_this.owner.useCtrlClickToFollowHyperlink) && _this.isLeftButtonPressed(event) === true))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, false);\n }\n if (_this.isMouseDown && _this.isLeftButtonPressed(event) && _this.isDocumentProtected\n && _this.protectionType === 'FormFieldsOnly' && _this.selection) {\n var widget = _this.getLineWidget(touchPoint);\n var formField = _this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint, true);\n if (isNullOrUndefined(formField)) {\n formField = _this.selection.getCurrentFormField(true);\n }\n if (formField && formField.formFieldData && formField.formFieldData.enabled && !_this.selection.isInlineFormFillMode(formField)) {\n var data = { 'fieldName': formField.formFieldData.name };\n if (formField.formFieldData instanceof TextFormField) {\n data.value = formField.resultText;\n }\n else if (formField.formFieldData instanceof CheckBoxFormField) {\n data.value = formField.formFieldData.checked;\n }\n else {\n data.value = formField.formFieldData.selectedIndex;\n }\n data.isCanceled = false;\n if (_this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Popup' && _this.selection.previousSelectedFormField !== _this.selection.getCurrentFormField()) {\n _this.owner.trigger(beforeFormFieldFillEvent, data);\n }\n else {\n _this.owner.trigger(beforeFormFieldFillEvent, data);\n }\n if (!data.isCanceled) {\n if (_this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Popup' && !(formField.formFieldData instanceof CheckBoxFormField)\n || (formField.formFieldData instanceof TextFormField && !(formField.formFieldData.type === 'Text'))\n || formField.formFieldData instanceof DropDownFormField) {\n _this.formFillPopup.showPopUp(formField);\n }\n else {\n _this.owner.editorModule.toggleCheckBoxFormField(formField);\n data.value = formField.formFieldData.checked;\n data.isCanceled = false;\n _this.owner.trigger(afterFormFieldFillEvent, data);\n }\n }\n }\n if (!formField && _this.isFormFillProtectedMode) {\n _this.selection.navigateToNextFormField();\n }\n }\n else if (_this.isMouseDown) {\n if (_this.formFields.length > 0) {\n var formField = _this.selection.getCurrentFormField(true);\n if (formField && formField.formFieldData instanceof TextFormField) {\n _this.selection.selectField();\n }\n else if (_this.isLeftButtonPressed(event) && formField && formField.formFieldData instanceof DropDownFormField) {\n var offset = formField.line.getOffset(formField, 0);\n var point = _this.selection.getPhysicalPositionInternal(formField.line, offset, false);\n _this.selection.selectInternal(formField.line, formField, 0, point);\n }\n }\n if (_this.isSelectionChangedOnMouseMoved) {\n _this.selection.fireSelectionChanged(true);\n }\n }\n if (!_this.owner.isReadOnlyMode && _this.isSelectionInListText(touchPoint)) {\n _this.selection.selectListText();\n }\n if (!_this.owner.isReadOnlyMode && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.scrollToPosition(_this.owner.selectionModule.start, _this.owner.selectionModule.end);\n _this.owner.imageResizerModule.isImageResizing = false;\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && !isNullOrUndefined(_this.selection.caret)) {\n _this.selection.caret.style.display = 'none';\n }\n if (_this.isDragStarted) {\n _this.isDragging = true;\n _this.moveSelectedContent();\n _this.isDragging = false;\n }\n if (_this.isMouseDown) {\n _this.updateFocus();\n }\n _this.isMouseDownInSelection = false;\n _this.isMouseDown = false;\n _this.isFootnoteWidget = false;\n _this.isSelectionChangedOnMouseMoved = false;\n _this.isTouchInput = false;\n _this.useTouchSelectionMark = true;\n _this.isControlPressed = false;\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n if (_this.owner.enableImageResizerMode) {\n var imageResizer = _this.owner.imageResizerModule;\n imageResizer.isImageResizing = false;\n imageResizer.isImageMoveToNextPage = false;\n imageResizer.leftValue = undefined;\n imageResizer.topValue = undefined;\n }\n _this.isMouseDownInFooterRegion = false;\n }\n if (_this.selection) {\n _this.selection.isCellPrevSelected = false;\n }\n if (_this.owner.documentHelper.contentControlCollection.length > 0) {\n //Need to work on these\n _this.clearContent();\n _this.owner.documentHelper.viewer.updateScrollBars();\n }\n };\n /**\n * Fired on touch start.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onTouchStartInternal = function (event) {\n if (_this.selection) {\n _this.isTouchMoved = false;\n _this.isCompositionStart = false;\n _this.isCompositionEnd = false;\n _this.isCompositionUpdated = false;\n _this.isCompositionCanceled = true;\n _this.isTouchInput = true;\n if (_this.isTimerStarted) {\n if (_this.tapCount === 1) {\n _this.tapCount = 2;\n }\n else {\n _this.tapCount = 3;\n _this.isTimerStarted = false;\n }\n }\n else {\n _this.isTimerStarted = true;\n _this.tapCount = 1;\n }\n if (event.touches.length === 1) {\n _this.zoomX = event.touches[0].clientX;\n _this.zoomY = event.touches[0].clientY;\n if (_this.owner.selectionModule.isEmpty) {\n _this.useTouchSelectionMark = false;\n }\n _this.isMouseDown = true;\n _this.isSelectionChangedOnMouseMoved = false;\n var point = void 0;\n if (_this.isMouseDown) {\n point = _this.getTouchOffsetValue(event);\n }\n point = _this.owner.viewer.findFocusedPage(point, true, true);\n if (_this.owner.enableImageResizerMode) {\n var resizeObj = _this.owner.imageResizerModule.getImagePointOnTouch(point);\n _this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n }\n if (_this.owner.enableImageResizerMode && !isNullOrUndefined(_this.owner.imageResizerModule.selectedResizeElement)) {\n _this.owner.imageResizerModule.isImageResizing = true;\n }\n if (Browser.isDevice) {\n _this.editableDiv.contentEditable = _this.owner.isReadOnlyMode ? 'false' : 'true';\n }\n var x = _this.owner.selectionModule.end.location.x;\n var y = _this.selection.getCaretBottom(_this.owner.selectionModule.end, _this.owner.selectionModule.isEmpty) + 9;\n //TouchDownOnSelectionMark will be 2 when touch end is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 1 : 0;\n if (!_this.owner.selectionModule.isEmpty && _this.touchDownOnSelectionMark === 0) {\n x = _this.owner.selectionModule.start.location.x;\n y = _this.selection.getCaretBottom(_this.owner.selectionModule.start, false) + 9;\n //TouchDownOnSelectionMark will be 1 when touch start is pressed\n _this.touchDownOnSelectionMark = ((point.y <= y && point.y >= y - 20 || point.y >= y && point.y <= y + 20)\n && (point.x <= x && point.x >= x - 20 || point.x >= x && point.x <= x + 20)) ? 2 : 0;\n }\n }\n if (!isNullOrUndefined(_this.owner.contextMenuModule) && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.contextMenuInstance.close();\n }\n if (_this.touchDownOnSelectionMark || event.touches.length > 1) {\n event.preventDefault();\n }\n _this.longTouchTimer = setTimeout(_this.onLongTouch, 500, event);\n _this.timer = setTimeout(function () {\n _this.isTimerStarted = false;\n }, 200);\n _this.owner.focusIn();\n }\n };\n /**\n * Fired on long touch\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onLongTouch = function (event) {\n if (isNullOrUndefined(_this.owner) || isNullOrUndefined(_this.viewerContainer) || _this.isTouchMoved || event.touches.length !== 1) {\n return;\n }\n var point = _this.getTouchOffsetValue(event);\n var pointRelToPage = _this.owner.viewer.findFocusedPage(point, true);\n var selStart = _this.selection.start;\n var selEnd = _this.selection.end;\n var updateSel = false;\n if (!_this.selection.isForward) {\n selStart = _this.selection.end;\n selEnd = _this.selection.start;\n }\n var selStartPt = selStart.location;\n var selEndPt = selEnd.location;\n if (selStart.currentWidget !== selEnd.currentWidget) {\n updateSel = !(pointRelToPage.x >= selStartPt.x && pointRelToPage.x <= selEndPt.x)\n && !(pointRelToPage.y >= selStartPt.y && pointRelToPage.y <= selEndPt.y);\n }\n else {\n updateSel = !(pointRelToPage.x >= selStartPt.x && pointRelToPage.x <= selEndPt.x)\n || !(pointRelToPage.y >= selStartPt.y && pointRelToPage.y <= selEndPt.y);\n }\n if (event.changedTouches.length === 1 && updateSel) {\n _this.updateSelectionOnTouch(point, pointRelToPage);\n _this.isMouseDown = false;\n _this.touchDownOnSelectionMark = 0;\n _this.useTouchSelectionMark = true;\n _this.isSelectionChangedOnMouseMoved = false;\n }\n if (_this.selection.isEmpty) {\n _this.selection.selectCurrentWord();\n }\n if (!isNullOrUndefined(_this.owner.contextMenuModule) && _this.owner.contextMenuModule.contextMenuInstance) {\n _this.owner.contextMenuModule.onContextMenuInternal(event);\n }\n };\n /**\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onTouchMoveInternal = function (event) {\n _this.isTouchMoved = true;\n var touch = event.touches;\n var cursorPoint;\n if (!isNullOrUndefined(_this.selection)) {\n if (_this.owner.editorModule && _this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n event.preventDefault();\n if (!_this.owner.imageResizerModule.isImageMoveToNextPage) {\n _this.owner.imageResizerModule.handleImageResizingOnTouch(event);\n _this.selection.caret.style.display = 'none';\n }\n return;\n }\n if (_this.isMouseDown) {\n cursorPoint = _this.getTouchOffsetValue(event);\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, true);\n if (_this.touchDownOnSelectionMark > 0 /*|| !this.useTouchSelectionMark*/) {\n _this.isCompleted = false;\n event.preventDefault();\n var touchY = touchPoint.y;\n var textPosition = _this.owner.selectionModule.end;\n var touchPointer = void 0;\n if (touchPoint.y <= 26) {\n touchY -= touchPoint.y < 0 ? 0 : touchPoint.y + 0.5;\n }\n else {\n touchY -= 36.5;\n }\n textPosition = _this.touchDownOnSelectionMark === 2 ? _this.selection.start : _this.selection.end;\n touchPoint = new Point(touchPoint.x, touchY);\n _this.owner.selectionModule.moveTextPosition(touchPoint, textPosition);\n _this.isSelectionChangedOnMouseMoved = true;\n }\n _this.selection.checkForCursorVisibility();\n _this.updateTouchMarkPosition();\n }\n }\n if (touch.length > 1) {\n event.preventDefault();\n _this.isMouseDown = false;\n _this.zoomX = (touch[0].clientX + touch[1].clientX) / 2;\n _this.zoomY = (touch[0].clientY + touch[1].clientY) / 2;\n var currentDiff = Math.sqrt(Math.pow((touch[0].clientX - touch[1].clientX), 2) + Math.pow((touch[0].clientY - touch[1].clientY), 2));\n if (_this.preDifference > -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchOutInternal(event);\n }\n else if (currentDiff < _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n else if (_this.zoomFactor < 2) {\n if (_this.preDifference !== -1) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n else if (_this.preDifference === -1) {\n if (_this.zoomFactor > 2) {\n if (currentDiff > _this.preDifference) {\n _this.onPinchInInternal(event);\n }\n }\n }\n _this.preDifference = currentDiff;\n }\n if (_this.longTouchTimer) {\n clearTimeout(_this.longTouchTimer);\n _this.longTouchTimer = undefined;\n }\n };\n /**\n * Fired on touch up.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event.\n * @returns {void}\n */\n this.onTouchUpInternal = function (event) {\n if (!isNullOrUndefined(_this.selection)) {\n var point = _this.getTouchOffsetValue(event);\n var touchPoint = _this.owner.viewer.findFocusedPage(point, true);\n if (event.changedTouches.length === 1) {\n if (!_this.isTouchMoved || (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing)) {\n _this.updateSelectionOnTouch(point, touchPoint);\n if (!isNullOrUndefined(_this.currentPage) && !isNullOrUndefined(_this.selection.start)\n && !_this.isSelectionChangedOnMouseMoved && (_this.selection.isEmpty ||\n _this.selection.isImageField() && (!_this.owner.enableImageResizerMode ||\n _this.owner.enableImageResizerMode && !_this.owner.imageResizerModule.isImageResizing))) {\n _this.selection.navigateHyperLinkOnEvent(touchPoint, true);\n }\n }\n if (_this.isSelectionChangedOnMouseMoved) {\n _this.selection.fireSelectionChanged(true);\n }\n _this.isMouseDown = false;\n _this.touchDownOnSelectionMark = 0;\n _this.useTouchSelectionMark = true;\n _this.isSelectionChangedOnMouseMoved = false;\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizing) {\n _this.owner.imageResizerModule.mouseUpInternal();\n _this.owner.imageResizerModule.isImageResizing = false;\n _this.owner.imageResizerModule.isImageMoveToNextPage = false;\n _this.scrollToPosition(_this.owner.selectionModule.start, _this.owner.selectionModule.end);\n }\n if (_this.owner.enableImageResizerMode && _this.owner.imageResizerModule.isImageResizerVisible && _this.isTouchInput) {\n _this.touchStart.style.display = 'none';\n _this.touchEnd.style.display = 'none';\n }\n // if (!this.owner.isReadOnlyMode && this.isSelectionInListText(touchPoint)) {\n // this.selection.selectListText();\n // }\n event.preventDefault();\n }\n _this.preDifference = -1;\n _this.isTouchInput = false;\n if (_this.longTouchTimer) {\n clearTimeout(_this.longTouchTimer);\n _this.longTouchTimer = undefined;\n }\n if (!_this.isTimerStarted) {\n _this.tapCount = 1;\n }\n if (_this.isListTextSelected) {\n _this.selection.hideCaret();\n }\n _this.owner.focusIn();\n };\n /**\n * Fired on keyup event.\n *\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event.\n * @returns {void}\n */\n this.onKeyUpInternal = function (event) {\n if (Browser.isDevice && event.target === _this.editableDiv) {\n if (window.getSelection().anchorOffset !== _this.prefix.length) {\n _this.selection.setEditableDivCaretPosition(_this.editableDiv.innerText.length);\n }\n }\n if (event.ctrlKey || (event.keyCode === 17 || event.which === 17)) {\n _this.isControlPressed = false;\n }\n };\n /**\n * Fired on keydown.\n *\n * @private\n * @param {KeyboardEvent} event - Specifies keyboard event.\n * @returns {void}\n */\n this.onKeyDownInternal = function (event) {\n if (!isNullOrUndefined(event.target) && event.target !== _this.editableDiv) {\n return;\n }\n _this.owner.focusIn();\n var isHandled = false;\n var keyEventArgs = { 'event': event, 'isHandled': false, source: _this.owner };\n _this.owner.trigger(keyDownEvent, keyEventArgs);\n if (keyEventArgs.isHandled) {\n return;\n }\n var key = event.which || event.keyCode;\n var ctrl = (event.ctrlKey || event.metaKey) ? true : ((key === 17) ? true : false); // ctrl detection \n var shift = event.shiftKey ? event.shiftKey : ((key === 16) ? true : false); // Shift Key detection \n var alt = event.altKey ? event.altKey : ((key === 18) ? true : false); // alt key detection\n if (ctrl && !shift && !alt) {\n switch (key) {\n case 80:\n event.preventDefault();\n _this.owner.print();\n isHandled = true;\n break;\n case 83:\n event.preventDefault();\n _this.owner.save(_this.owner.documentName === '' ? 'sample' : _this.owner.documentName, 'Sfdt');\n isHandled = true;\n break;\n }\n }\n if (event.keyCode !== 8 && event.keyCode !== 46 && !isNullOrUndefined(_this.owner.editor) && _this.selection.checkContentControlLocked()) {\n _this.owner.editorModule.insertContentControlPlaceholder();\n }\n if (!isHandled && !isNullOrUndefined(_this.selection)) {\n _this.selection.onKeyDownInternal(event, ctrl, shift, alt);\n }\n if (!isNullOrUndefined(_this.owner.documentHelper) && _this.owner.documentHelper.contentControlCollection.length > 0) {\n //Need to work on these\n _this.clearContent();\n _this.owner.documentHelper.viewer.updateScrollBars();\n }\n if (isHandled) {\n event.preventDefault();\n }\n _this.timer = setTimeout(function () {\n if (!_this.isScrollHandler && !isNullOrUndefined(_this.owner) && _this.owner.isSpellCheck) {\n _this.isScrollToSpellCheck = true;\n _this.owner.viewer.updateScrollBars();\n }\n }, 100);\n };\n this.owner = owner;\n this.pages = [];\n this.lists = [];\n this.abstractLists = [];\n this.render = new Renderer(this);\n this.characterFormat = new WCharacterFormat(this);\n this.themeFontLanguage = new WCharacterFormat(this);\n this.paragraphFormat = new WParagraphFormat(this);\n this.renderedLists = new Dictionary();\n this.renderedLevelOverrides = [];\n this.headersFooters = [];\n this.styles = new WStyles();\n this.stylesMap = new Dictionary();\n if (this.owner) {\n this.L10n = new L10n('documenteditor', this.owner.defaultLocale);\n this.L10n.setLocale(this.owner.locale);\n }\n this.preDefinedStyles = new Dictionary();\n this.initalizeStyles();\n this.bookmarks = new Dictionary();\n this.editRanges = new Dictionary();\n this.isIosDevice = typeof window !== 'undefined' ? /Mac|iPad|iPod/i.test(navigator.userAgent) : false;\n this.isMobileDevice = typeof window !== 'undefined' ? /Android|Windows Phone|webOS/i.test(navigator.userAgent) : false;\n this.formFillPopup = new FormFieldPopUp(this.owner);\n this.contentDropDown = new ContentControlPopUp(this.owner);\n this.customXmlData = new Dictionary();\n this.fontSubstitutionTable = new Dictionary();\n this.contentControlCollection = [];\n this.footnoteCollection = [];\n this.endnoteCollection = [];\n this.themes = new Themes();\n this.images = new Dictionary();\n }\n Object.defineProperty(DocumentHelper.prototype, \"visibleBounds\", {\n /**\n * Gets visible bounds.\n *\n * @private\n * @returns {Rect} - Returns visible bounds.\n */\n get: function () {\n return this.visibleBoundsIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"viewer\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"containerCanvas\", {\n //Document Protection Properties Ends\n //#region Properties\n /**\n * Gets container canvas.\n *\n * @private\n * @returns {HTMLCanvasElement} - Returns page canvas.\n */\n get: function () {\n if (isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn = document.createElement('canvas');\n this.containerCanvasIn.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.containerCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.containerCanvasIn);\n }\n return this.containerCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {string} text - Specifies the text string.\n */\n DocumentHelper.prototype.openTextFile = function (text) {\n this.layout.isTextFormat = true;\n var arr = [];\n text = text.replace(/\\r\\n/g, '\\n');\n arr = text.split('\\n');\n var widget = [];\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets = widget;\n var paragraph1 = new ParagraphWidget();\n var line1 = new LineWidget(paragraph1);\n for (var i = 0; i < arr.length; i++) {\n if (i === arr.length - 1 && arr[i].length === 0) {\n paragraph1.childWidgets.push(line1);\n paragraph1.containerWidget = bodyWidget;\n bodyWidget.childWidgets.push(paragraph1);\n continue;\n }\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n if (arr[i].length > 0) {\n var singleLineLength = 90;\n if (arr[i].length > singleLineLength) {\n var start = 0;\n var increment = singleLineLength;\n var split = void 0;\n var lineLength = (arr[i].length / singleLineLength) + 1;\n var count = 0;\n while (count < lineLength) {\n if (lineLength - 1 != count) {\n split = arr[i].substring(start, increment);\n }\n else {\n increment = arr[i].length % singleLineLength;\n split = arr[i].substring(start, increment);\n }\n var textElement = new TextElementBox();\n textElement.text = split;\n line.children.push(textElement);\n textElement.line = line;\n count++;\n increment += singleLineLength;\n start += singleLineLength;\n }\n }\n else {\n var textElement = new TextElementBox();\n textElement.text = arr[i];\n line.children.push(textElement);\n textElement.line = line;\n }\n }\n paragraph.childWidgets.push(line);\n paragraph.containerWidget = bodyWidget;\n bodyWidget.childWidgets.push(paragraph);\n }\n this.onDocumentChanged([bodyWidget]);\n this.layout.isTextFormat = false;\n };\n Object.defineProperty(DocumentHelper.prototype, \"selectionCanvas\", {\n /**\n * Gets selection canvas.\n *\n * @private\n * @returns {HTMLCanvasElement} - Returns selection canvas.\n */\n get: function () {\n if (isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn = document.createElement('canvas');\n this.selectionCanvas.getContext('2d').save();\n }\n if (!isNullOrUndefined(this.pageContainer)\n && this.selectionCanvasIn.parentElement !== this.pageContainer) {\n this.pageContainer.appendChild(this.selectionCanvasIn);\n }\n return this.selectionCanvasIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"containerContext\", {\n /**\n * Gets container context.\n *\n * @private\n * @returns {CanvasRenderingContext2D} - Returns page canvas context.\n */\n get: function () {\n return this.containerCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionContext\", {\n /**\n * Gets selection context.\n *\n * @private\n * @returns {CanvasRenderingContext2D} - Returns selection canvas context.\n */\n get: function () {\n return this.selectionCanvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"currentRenderingPage\", {\n /**\n * Gets the current rendering page.\n *\n * @returns {Page} - Returns current rendering page.\n */\n get: function () {\n if (this.pages.length === 0) {\n return undefined;\n }\n return this.pages[this.pages.length - 1];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"zoomFactor\", {\n /**\n * Gets or sets zoom factor.\n *\n * @private\n * @returns {number} - Returns zoom factor value.\n */\n get: function () {\n return this.zoomFactorInternal;\n },\n set: function (value) {\n if (this.zoomFactorInternal !== value) {\n this.preZoomFactor = this.zoomFactor;\n this.zoomFactorInternal = value;\n this.zoomModule.setZoomFactor();\n this.owner.zoomFactor = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selection\", {\n /**\n * Gets the selection.\n *\n * @private\n * @returns {Selection} - Returns selection module.\n */\n get: function () {\n return this.owner.selectionModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionStartPage\", {\n /**\n * Gets or sets selection start page.\n *\n * @private\n * @returns {Page} - Return selection start page.\n */\n get: function () {\n return this.selectionStartPageIn;\n },\n set: function (value) {\n this.selectionStartPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"selectionEndPage\", {\n /**\n * Gets or sets selection end page.\n *\n * @private\n * @returns {Page} - Return selection end page.\n */\n get: function () {\n return this.selectionEndPageIn;\n },\n set: function (value) {\n this.selectionEndPageIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"dialog\", {\n /**\n * Gets the initialized default dialog.\n *\n * @private\n * @returns {Dialog} - Returns dialog instance.\n */\n get: function () {\n if (!this.dialogInternal) {\n this.initDialog(this.owner.enableRtl);\n }\n return this.dialogInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"dialog2\", {\n /**\n * Gets the initialized default dialog.\n *\n * @private\n * @returns {Dialog} - Returns dialog instance.\n */\n get: function () {\n if (!this.dialogInternal2) {\n this.initDialog2(this.owner.enableRtl);\n }\n return this.dialogInternal2;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"dialog3\", {\n /**\n * Gets the initialized default dialog.\n *\n * @private\n * @returns {Dialog} - Returns dialog instance.\n */\n get: function () {\n if (!this.dialogInternal3) {\n this.initDialog3(this.owner.enableRtl);\n }\n return this.dialogInternal3;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"currentSelectedComment\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.currentSelectedCommentInternal;\n },\n set: function (value) {\n if (this.owner && this.owner.commentReviewPane) {\n this.owner.commentReviewPane.previousSelectedComment = this.currentSelectedCommentInternal;\n }\n this.currentSelectedCommentInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"currentSelectedRevision\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.currentSelectedRevisionInternal;\n },\n set: function (value) {\n // if (this.owner && this.owner.commentReviewPane) {\n // this.owner.commentReviewPane.previousSelectedComment = this.currentSelectedCommentInternal;\n // }\n this.currentSelectedRevisionInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isInlineFormFillProtectedMode\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.isFormFillProtectedMode && this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isFormFillProtectedMode\", {\n /**\n * @private\n * @returns {void}\n */\n get: function () {\n return this.isDocumentProtected && this.protectionType === 'FormFieldsOnly';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isCommentOnlyMode\", {\n /**\n * @private\n * @returns {Boolean}\n */\n get: function () {\n return this.isDocumentProtected && this.protectionType === 'CommentsOnly';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentHelper.prototype, \"isTrackedOnlyMode\", {\n get: function () {\n return this.isDocumentProtected && this.protectionType === 'RevisionsOnly';\n },\n enumerable: true,\n configurable: true\n });\n DocumentHelper.prototype.initalizeStyles = function () {\n this.preDefinedStyles.add('Normal', '{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n this.preDefinedStyles.add('Heading 1', '{\"type\":\"Paragraph\",\"name\":\"Heading 1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 1 Char\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":12.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level1\"}}');\n this.preDefinedStyles.add('Heading 2', '{\"type\":\"Paragraph\",\"name\":\"Heading 2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 2 Char\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level2\"}}');\n this.preDefinedStyles.add('Heading 3', '{\"type\":\"Paragraph\",\"name\":\"Heading 3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 3 Char\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level3\"}}');\n this.preDefinedStyles.add('Heading 4', '{\"type\":\"Paragraph\",\"name\":\"Heading 4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 4 Char\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level4\"}}');\n this.preDefinedStyles.add('Heading 5', '{\"type\":\"Paragraph\",\"name\":\"Heading 5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 5 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level5\"}}');\n this.preDefinedStyles.add('Heading 6', '{\"type\":\"Paragraph\",\"name\":\"Heading 6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 6 Char\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level6\"}}');\n this.preDefinedStyles.add('Heading 7', '{\"type\":\"Paragraph\",\"name\":\"Heading 7\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 7 Char\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level7\"}}');\n this.preDefinedStyles.add('Heading 8', '{\"type\":\"Paragraph\",\"name\":\"Heading 8\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 8 Char\",\"characterFormat\":{\"fontSize\":10.5,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#333333\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level8\"}}');\n this.preDefinedStyles.add('Heading 9', '{\"type\":\"Paragraph\",\"name\":\"Heading 9\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"link\":\"Heading 9 Char\",\"characterFormat\":{\"fontSize\":10.5,\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#333333\"},\"paragraphFormat\":{\"leftIndent\":0.0,\"rightIndent\":0.0,\"firstLineIndent\":0.0,\"beforeSpacing\":2.0,\"afterSpacing\":0.0,\"lineSpacing\":1.0791666507720947,\"lineSpacingType\":\"Multiple\",\"textAlignment\":\"Left\",\"outlineLevel\":\"Level9\"}}');\n this.preDefinedStyles.add('Default Paragraph Font', '{\"type\":\"Character\",\"name\":\"Default Paragraph Font\"}');\n this.preDefinedStyles.add('Heading 1 Char', '{\"type\":\"Character\",\"name\":\"Heading 1 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":16.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 2 Char', '{\"type\":\"Character\",\"name\":\"Heading 2 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":13.0,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 3 Char', '{\"type\":\"Character\",\"name\":\"Heading 3 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":12.0,\"fontFamily\":\"Calibri Light\",\"fontColor\": \"#1F3763\"}}');\n this.preDefinedStyles.add('Heading 4 Char', '{\"type\":\"Character\",\"name\":\"Heading 4 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 5 Char', '{\"type\":\"Character\",\"name\":\"Heading 5 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#2F5496\"}}');\n this.preDefinedStyles.add('Heading 6 Char', '{\"type\":\"Character\",\"name\":\"Heading 6 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"}}');\n this.preDefinedStyles.add('Heading 7 Char', '{\"type\":\"Character\",\"name\":\"Heading 7 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#1F3763\"}}');\n this.preDefinedStyles.add('Heading 8 Char', '{\"type\":\"Character\",\"name\":\"Heading 8 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":10.5,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#333333\"}}');\n this.preDefinedStyles.add('Heading 9 Char', '{\"type\":\"Character\",\"name\":\"Heading 9 Char\",\"basedOn\":\"Default Paragraph Font\",\"characterFormat\":{\"fontSize\":10.5,\"italic\":true,\"fontFamily\":\"Calibri Light\",\"fontColor\":\"#333333\"}}');\n this.preDefinedStyles.add('Hyperlink', '{\"type\":\"Character\",\"name\":\"Hyperlink\",\"basedOn\":\"Default Paragraph Font\",\"next\":\"Normal\",\"characterFormat\":{\"fontColor\":\"#0563C1\",\"underline\": \"Single\"}}');\n this.preDefinedStyles.add('TOC 1', '{\"type\":\"Paragraph\",\"name\":\"TOC 1\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('TOC 2', '{\"type\":\"Paragraph\",\"name\":\"TOC 2\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :11.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('TOC 3', '{\"type\":\"Paragraph\",\"name\":\"TOC 3\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :22.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('TOC 4', '{\"type\":\"Paragraph\",\"name\":\"TOC 4\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :33.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('TOC 5', '{\"type\":\"Paragraph\",\"name\":\"TOC 5\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :44.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('TOC 6', '{\"type\":\"Paragraph\",\"name\":\"TOC 6\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :55.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('TOC 7', '{\"type\":\"Paragraph\",\"name\":\"TOC 7\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :66.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('TOC 8', '{\"type\":\"Paragraph\",\"name\":\"TOC 8\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :77.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('TOC 9', '{\"type\":\"Paragraph\",\"name\":\"TOC 9\",\"basedOn\":\"Normal\",\"next\":\"Normal\",\"paragraphFormat\":{\"leftIndent\" :88.0,\"afterSpacing\":5.0}}');\n this.preDefinedStyles.add('Header', '{\"type\":\"Paragraph\",\"name\":\"Header\",\"basedOn\":\"Normal\",\"next\":\"Header\",\"paragraphFormat\":{\"afterSpacing\":0,\"lineSpacing\":1,\"lineSpacingType\":\"Multiple\"}}');\n this.preDefinedStyles.add('Footer', '{\"type\":\"Paragraph\",\"name\":\"Footer\",\"basedOn\":\"Normal\",\"next\":\"Footer\",\"paragraphFormat\":{\"afterSpacing\":0,\"lineSpacing\":1,\"lineSpacingType\":\"Multiple\"}}');\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.clearDocumentItems = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.clear();\n }\n if (this.owner.searchModule) {\n this.owner.searchModule.clearSearchHighlight();\n }\n if (this.owner.selectionModule) {\n this.owner.selectionModule.clear();\n }\n this.editRanges.clear();\n this.headersFooters = [];\n this.fields = [];\n this.formFields = [];\n this.currentSelectedComment = undefined;\n this.currentSelectedRevision = undefined;\n for (var i = 0; i < this.comments.length; i++) {\n var commentStart = this.comments[i].commentStart;\n if (commentStart) {\n commentStart.destroy();\n }\n }\n this.comments = [];\n this.bookmarks.clear();\n this.endBookmarksUpdated = [];\n this.styles.clear();\n this.stylesMap.clear();\n if (this.pages && this.pages.length > 0) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n page.componentDestroy();\n }\n this.pages = [];\n }\n this.authors.clear();\n this.revisionsInternal.clear();\n this.owner.revisions.clear();\n this.characterFormat.clearFormat();\n this.themeFontLanguage.clearFormat();\n this.paragraphFormat.clearFormat();\n if (this.owner.trackChangesPane) {\n this.owner.trackChangesPane.clear();\n }\n this.setDefaultCharacterValue(this.characterFormat);\n this.setDefaultParagraphValue(this.paragraphFormat);\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.clear();\n }\n this.isHeaderFooter = false;\n this.defaultTabWidth = 36;\n this.isDocumentProtected = false;\n this.protectionType = 'NoProtection';\n this.restrictFormatting = false;\n this.hashValue = '';\n this.saltValue = '';\n this.userCollection = [];\n if (this.formFillPopup) {\n this.formFillPopup.hidePopup();\n }\n if (this.contentDropDown) {\n this.contentDropDown.hidePopup();\n }\n this.customXmlData.clear();\n this.fontSubstitutionTable.clear();\n this.images.clear();\n this.contentControlCollection = [];\n this.backgroundColor = '#FFFFFF';\n this.endnotes.clear();\n this.footnotes.clear();\n this.footnoteCollection = [];\n this.endnoteCollection = [];\n if (this.lists && this.lists.length > 0) {\n for (var i = 0; i < this.lists.length; i++) {\n var list = this.lists[i];\n list.clear();\n }\n }\n this.lists = [];\n this.abstractLists = [];\n this.themes = new Themes();\n this.hasThemes = false;\n this.isRestartNumbering = false;\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.setDefaultDocumentFormat = function () {\n this.owner.parser.parseCharacterFormat(0, this.owner.characterFormat, this.characterFormat);\n this.owner.parser.parseParagraphFormat(0, this.owner.paragraphFormat, this.paragraphFormat);\n };\n DocumentHelper.prototype.setDefaultCharacterValue = function (characterFormat) {\n characterFormat.bold = false;\n characterFormat.italic = false;\n characterFormat.fontFamily = 'Calibri';\n characterFormat.fontSize = 11;\n characterFormat.underline = 'None';\n characterFormat.strikethrough = 'None';\n characterFormat.fontSizeBidi = 11;\n characterFormat.fontFamilyBidi = 'Calibri';\n characterFormat.baselineAlignment = 'Normal';\n characterFormat.highlightColor = 'NoColor';\n characterFormat.allCaps = false;\n };\n DocumentHelper.prototype.setDefaultParagraphValue = function (paragraphFormat) {\n paragraphFormat.leftIndent = 0;\n paragraphFormat.rightIndent = 0;\n paragraphFormat.firstLineIndent = 0;\n paragraphFormat.textAlignment = 'Left';\n paragraphFormat.beforeSpacing = 0;\n paragraphFormat.afterSpacing = 0;\n paragraphFormat.lineSpacing = 1;\n paragraphFormat.lineSpacingType = 'Multiple';\n paragraphFormat.bidi = false;\n paragraphFormat.keepWithNext = false;\n paragraphFormat.keepLinesTogether = false;\n paragraphFormat.widowControl = true;\n paragraphFormat.outlineLevel = 'BodyText';\n };\n /**\n * @private\n * @param {number} id - Specfies abstract list id.\n * @returns {WAbstractList} - Returns abstract list.\n */\n DocumentHelper.prototype.getAbstractListById = function (id, isNsid) {\n if (isNullOrUndefined(this.abstractLists)) {\n return undefined;\n }\n for (var i = 0; i < this.abstractLists.length; i++) {\n var abstractList = this.abstractLists[i];\n if (!isNullOrUndefined(abstractList)) {\n if (isNsid && abstractList.nsid === id) {\n return abstractList;\n }\n else if (abstractList.abstractListId === id) {\n return abstractList;\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n * @param {number} id - Specfies list id.\n * @returns {WAbstractList} - Returns list.\n */\n DocumentHelper.prototype.getListById = function (id, isNsid) {\n if (isNullOrUndefined(this.lists)) {\n return undefined;\n }\n for (var i = 0; i < this.lists.length; i++) {\n var list = this.lists[i];\n if (!isNullOrUndefined(list)) {\n if (isNsid && list.nsid === id) {\n return list;\n }\n else if (list.listId === id) {\n return list;\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n * @param {WListLevel} listLevel - Specfies list level.\n * @returns {number} - Returns list level number.\n */\n DocumentHelper.getListLevelNumber = function (listLevel) {\n if (listLevel.ownerBase instanceof WLevelOverride) {\n return listLevel.ownerBase.levelNumber;\n }\n else if (listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(listLevel.ownerBase.levels)) {\n return listLevel.ownerBase.levels.indexOf(listLevel);\n }\n else {\n return -1;\n }\n };\n /**\n * @private\n * @param {ImageElementBox} image - Specfies image.\n * @returns {number} - Returns base64string.\n */\n DocumentHelper.prototype.getImageString = function (image) {\n var base64ImageString = this.images.get(parseInt(image.imageString));\n var imageStr;\n if (image.isMetaFile && HelperMethods.formatClippedString(base64ImageString[0]).extension !== \".svg\") {\n imageStr = base64ImageString[1];\n }\n else if (HelperMethods.formatClippedString(base64ImageString[0]).extension === \".tif\") {\n imageStr = base64ImageString[1];\n }\n else {\n imageStr = base64ImageString[0];\n }\n return imageStr;\n };\n /**\n * @private\n * @param {ImageElementBox} image - Specfies image.\n * @returns {number} - Returns key for specific image.\n */\n DocumentHelper.prototype.addBase64StringInCollection = function (image) {\n return __awaiter(this, void 0, void 0, function () {\n var key, addToCollection, base64ImageString, i, index, imageStringCol;\n return __generator(this, function (_a) {\n key = this.images.length > 0 ? Math.max.apply(Math, this.images.keys) + 1 : 0;\n addToCollection = true;\n base64ImageString = [];\n for (i = 0; i < this.images.length; i++) {\n index = this.images.keys[parseInt(i.toString(), 10)];\n imageStringCol = this.images.get(index);\n if (image.isMetaFile && image.metaFileImageString === imageStringCol[0]) {\n key = index;\n addToCollection = false;\n break;\n }\n else if (image.imageString === imageStringCol[0]) {\n key = index;\n addToCollection = false;\n break;\n }\n }\n if (addToCollection) {\n if (image.isMetaFile) {\n base64ImageString.push(image.metaFileImageString);\n base64ImageString.push(image.imageString === \"\" ? image.metaFileImageString : image.imageString);\n }\n else {\n base64ImageString.push(image.imageString);\n }\n this.images.add(key, base64ImageString);\n }\n if (image.isMetaFile) {\n image.metaFileImageString = key.toString();\n }\n image.imageString = key.toString();\n return [2 /*return*/];\n });\n });\n };\n /**\n * Gets the bookmarks.\n *\n * @private\n * @param {boolean} includeHidden - Include hidden bookmark.\n * @returns {string[]} - Returns bookmars present in current document.\n */\n DocumentHelper.prototype.getBookmarks = function (includeHidden) {\n var bookmarks = [];\n for (var i = 0; i < this.bookmarks.keys.length; i++) {\n var bookmark = this.bookmarks.keys[i];\n if (includeHidden || bookmark.indexOf('_') !== 0) {\n bookmarks.push(bookmark);\n }\n }\n return bookmarks;\n };\n DocumentHelper.prototype.selectComment = function (comment) {\n var _this = this;\n if (this.owner.selectionModule && this.owner.commentReviewPane) {\n this.owner.showComments = true;\n setTimeout(function () {\n if (_this.owner && _this.owner.selectionModule) {\n _this.owner.selectionModule.selectComment(comment);\n }\n });\n }\n };\n DocumentHelper.prototype.showComments = function (show) {\n if (this.owner && show && this.owner.enableComment) {\n var eventArgs = { type: 'Comment' };\n this.owner.trigger(beforePaneSwitchEvent, eventArgs);\n }\n this.owner.commentReviewPane.reviewTab.hideTab(0, false);\n this.owner.commentReviewPane.reviewTab.hideTab(1, false);\n this.owner.commentReviewPane.showHidePane(show && this.owner.enableComment, 'Comments');\n };\n DocumentHelper.prototype.showRevisions = function (show) {\n var isCommentTabVisible = false;\n this.showRevision = show;\n if (this.owner && show) {\n var eventArgs = { type: 'comment' };\n this.owner.trigger(beforePaneSwitchEvent, eventArgs);\n }\n if (!show && this.owner.showComments) {\n this.owner.commentReviewPane.reviewTab.hideTab(0, false);\n this.owner.commentReviewPane.showHidePane(true, 'Comments');\n }\n else {\n this.owner.commentReviewPane.showHidePane(show, 'Changes');\n if (!this.owner.enableComment) {\n isCommentTabVisible = true;\n }\n // this.owner.commentReviewPane.reviewTab.hideTab(0, isCommentTabVisible);\n this.showRevision = false;\n }\n if (show) {\n this.owner.trackChangesPane.enableDisableButton(!this.owner.isReadOnly && !this.isDocumentProtected);\n }\n };\n /**\n * Initializes components.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.initializeComponents = function () {\n var element = this.owner.element;\n if (isNullOrUndefined(element)) {\n return;\n }\n //let viewer: LayoutViewer = this;\n this.optionsPaneContainer = createElement('div', {\n className: 'e-documenteditor-optionspane'\n });\n this.optionsPaneContainer.contentEditable = 'false';\n element.appendChild(this.optionsPaneContainer);\n var isRtl = this.owner.enableRtl;\n var viewerContainerStyle;\n if (isRtl) {\n viewerContainerStyle = 'direction:ltr;';\n }\n this.viewerContainer = createElement('div', { id: this.owner.containerId + '_viewerContainer' });\n this.viewerContainer.style.cssText = 'position:relative;backgroundColor:#FBFBFB;overflow:auto;' + viewerContainerStyle;\n this.optionsPaneContainer.appendChild(this.viewerContainer);\n this.viewerContainer.tabIndex = -1;\n this.viewerContainer.style.outline = 'none';\n this.pageContainer = createElement('div', { id: this.owner.containerId + '_pageContainer', className: 'e-de-background' });\n this.viewerContainer.appendChild(this.pageContainer);\n this.pageContainer.style.top = '0px';\n this.pageContainer.style.left = '0px';\n this.pageContainer.style.position = 'relative';\n this.pageContainer.style.pointerEvents = 'none';\n if (Browser.isDevice) {\n this.createEditableDiv(element);\n }\n else {\n this.createEditableIFrame();\n }\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.initializeImageResizer();\n }\n this.updateViewerSizeInternal(element);\n this.layout = new Layout(this);\n this.textHelper = new TextHelper(this);\n this.zoomModule = new Zoom(this);\n this.initTouchEllipse();\n this.wireEvent();\n this.restrictEditingPane = new RestrictEditing(this);\n this.owner.commentReviewPane = new CommentReviewPane(this.owner);\n this.owner.trackChangesPane = new TrackChangesPane(this.owner, this.owner.commentReviewPane);\n createSpinner({ target: this.owner.element, cssClass: 'e-spin-overlay' });\n };\n DocumentHelper.prototype.measureScrollbarWidth = function (element) {\n var parentDiv = document.createElement('div');\n parentDiv.setAttribute('style', 'visibility:hidden;overflow:scroll');\n element.appendChild(parentDiv);\n var childDiv = document.createElement('div');\n parentDiv.appendChild(childDiv);\n this.scrollbarWidth = (parentDiv.getBoundingClientRect().width - childDiv.getBoundingClientRect().width);\n parentDiv.parentNode.removeChild(parentDiv);\n };\n DocumentHelper.prototype.createEditableDiv = function (element) {\n this.editableDiv = document.createElement('div');\n this.editableDiv.contentEditable = this.owner.isReadOnlyMode ? 'false' : 'true';\n this.editableDiv.style.position = 'fixed';\n this.editableDiv.style.left = '-150em';\n this.editableDiv.style.width = '100%';\n this.editableDiv.style.height = '100%';\n this.editableDiv.id = element.id + '_editableDiv';\n document.body.appendChild(this.editableDiv);\n };\n DocumentHelper.prototype.createEditableIFrame = function () {\n this.iframe = createElement('iframe', {\n attrs: {\n 'scrolling': 'no',\n 'title': 'Document Editor',\n 'style': 'pointer-events:none;position:absolute;left:0px;top:0px;outline:none;background-color:transparent;width:0px;height:0px;overflow:hidden',\n 'tabindex': \"0\"\n },\n className: 'e-de-text-target'\n });\n this.viewerContainer.appendChild(this.iframe);\n this.initIframeContent();\n };\n DocumentHelper.prototype.initIframeContent = function () {\n var style = 'background-color:transparent;width:100%;height:100%;padding: 0px; margin: 0px;';\n var innerHtml = ''\n + ''\n + ''\n + '
'\n + ''\n + '';\n if (!isNullOrUndefined(this.iframe.contentDocument)) {\n this.iframe.contentDocument.open();\n this.iframe.contentDocument.write(innerHtml);\n this.iframe.contentDocument.close();\n this.editableDiv = this.iframe.contentDocument.body.children[0];\n }\n };\n /**\n * Wires events and methods.\n *\n * @returns {void}\n */\n DocumentHelper.prototype.wireEvent = function () {\n if (!isNullOrUndefined(this.owner.selectionModule)) {\n this.selection.initCaret();\n }\n this.wireInputEvents();\n if (!isNullOrUndefined(this.iframe)) {\n this.iframe.addEventListener('load', this.onIframeLoad.bind(this));\n }\n this.viewerContainer.addEventListener('scroll', this.scrollHandler);\n this.viewerContainer.addEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.addEventListener('keydown', this.onKeyDownInternal);\n this.viewerContainer.addEventListener('mousemove', this.onMouseMoveInternal);\n this.viewerContainer.addEventListener('mouseleave', this.onMouseLeaveInternal);\n this.viewerContainer.addEventListener('mouseenter', this.onMouseEnterInternal);\n this.viewerContainer.addEventListener('contextmenu', this.onContextMenu);\n this.viewerContainer.addEventListener('dblclick', this.onDoubleTap);\n this.viewerContainer.addEventListener('mouseup', this.onMouseUpInternal);\n window.addEventListener('resize', this.onWindowResize);\n window.addEventListener('keyup', this.onKeyUpInternal);\n window.addEventListener('mouseup', this.onImageResizer);\n window.addEventListener('touchend', this.onImageResizer);\n this.viewerContainer.addEventListener('touchstart', this.onTouchStartInternal);\n this.viewerContainer.addEventListener('touchmove', this.onTouchMoveInternal);\n this.viewerContainer.addEventListener('touchend', this.onTouchUpInternal);\n if (navigator !== undefined && navigator.userAgent.match('Firefox')) {\n this.viewerContainer.addEventListener('DOMMouseScroll', this.zoomModule.onMouseWheelInternal);\n }\n this.viewerContainer.addEventListener('mousewheel', this.zoomModule.onMouseWheelInternal);\n this.editableDiv.addEventListener('focus', this.updateFocus);\n };\n DocumentHelper.prototype.wireInputEvents = function () {\n if (isNullOrUndefined(this.editableDiv)) {\n return;\n }\n this.editableDiv.addEventListener('paste', this.onPaste);\n if (!Browser.isDevice) {\n this.editableDiv.addEventListener('keypress', this.onKeyPressInternal);\n if (Browser.info.name === 'chrome') {\n this.editableDiv.addEventListener('textInput', this.onTextInput);\n }\n }\n else {\n this.editableDiv.addEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.addEventListener('blur', this.onFocusOut);\n this.editableDiv.addEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.addEventListener('compositionstart', this.compositionStart);\n this.editableDiv.addEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.addEventListener('compositionend', this.compositionEnd);\n };\n DocumentHelper.prototype.onIframeLoad = function () {\n if (!isNullOrUndefined(this.iframe) && this.iframe.contentDocument.body.children.length === 0) {\n this.initIframeContent();\n this.wireInputEvents();\n }\n };\n DocumentHelper.prototype.getEditableDivTextContent = function () {\n return this.editableDiv.textContent;\n };\n DocumentHelper.prototype.updateAuthorIdentity = function () {\n var revisions = this.owner.revisions.changes;\n for (var i = 0; i < revisions.length; i++) {\n this.getAuthorColor(revisions[i].author);\n }\n };\n DocumentHelper.prototype.getAvatar = function (userInfo, userName, comment, revision) {\n var author;\n var userinitial;\n if (!isNullOrUndefined(comment)) {\n author = comment.author;\n userinitial = comment.initial;\n }\n else {\n author = revision.author;\n }\n if (!isNullOrUndefined(author)) {\n var avatarDiv = createElement('div', { className: 'e-de-cmt-avatar' });\n var avatar = createElement('div', { className: 'e-de-ff-cmt-avatar' });\n avatar.style.backgroundColor = this.owner.documentHelper.getAuthorColor(author);\n if (userinitial === '' || isNullOrUndefined(userinitial)) {\n var authorName = author.split(' ');\n var initial = authorName[0].charAt(0);\n if (authorName.length > 1 && authorName[authorName.length - 1] !== '') {\n initial += authorName[authorName.length - 1][0];\n }\n avatar.innerText = initial.toUpperCase();\n }\n else {\n if (userinitial.length > 2) {\n avatar.innerText = userinitial.substring(0, 2);\n }\n else {\n avatar.innerText = userinitial;\n }\n }\n avatarDiv.appendChild(avatar);\n avatarDiv.appendChild(userName);\n userInfo.appendChild(avatarDiv);\n }\n };\n /**\n * @private\n * @param {string} author - Specifies author name.\n * @returns {string} - Return autor color.\n */\n DocumentHelper.prototype.getAuthorColor = function (author) {\n if (this.authors.containsKey(author)) {\n return this.authors.get(author);\n }\n var color;\n if (this.authors.length === 0) {\n color = '#b5082e'; //dark red\n }\n else {\n color = this.generateRandomColor();\n }\n this.authors.add(author, color);\n return color;\n };\n DocumentHelper.prototype.generateRandomColor = function () {\n var userColors = ['#b5082e',\n '#2e97d3',\n '#bb00ff',\n '#f37e43',\n '#03a60b',\n '#881824',\n '#e09a2b',\n '#50565e']; //dark grey\n return userColors[(this.authors.length % 8)];\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.positionEditableTarget = function () {\n var point = this.selection.getRect(this.selection.start);\n var page = this.selection.getSelectionPage(this.selection.start);\n // const caretInfo: CaretHeightInfo = this.selection.updateCaretSize(this.owner.selection.start);\n var sectionFormat = page.bodyWidgets[0].sectionFormat;\n var left = page.boundingRectangle.x + (HelperMethods.convertPointToPixel(sectionFormat.leftMargin) * this.zoomFactor);\n var top = point.y;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n var iframeStyle = 'left:' + left + 'px;';\n iframeStyle += 'top:' + top + 'px;';\n iframeStyle += 'width:' + (HelperMethods.convertPointToPixel(pageWidth) * this.zoomFactor) + 'px;';\n iframeStyle += 'height:250px;outline-style:none;position:absolute';\n this.iframe.setAttribute('style', iframeStyle);\n var style = 'background-color:transparent;width:100%;height:250px;padding: 0px; margin: 0px;';\n style += 'text-indent:' + (point.x - left) + 'px;';\n style += 'color:transparent;pointer-events:none;outline-style:none;';\n style += 'font-size:' + (HelperMethods.convertPointToPixel(this.selection.characterFormat.fontSize) * this.zoomFactor) + 'px;';\n style += 'font-family' + this.selection.characterFormat.fontFamily + ';';\n style += 'overflow:hidden;text-decoration:none;white-space:normal;';\n this.editableDiv.setAttribute('style', style);\n };\n DocumentHelper.prototype.initDialog = function (isRtl) {\n if (!this.dialogInternal) {\n this.dialogTarget1 = createElement('div', { className: 'e-de-dlg-target' });\n this.dialogTarget1.contentEditable = 'false';\n document.body.appendChild(this.dialogTarget1);\n if (isRtl) {\n this.dialogTarget1.classList.add('e-de-rtl');\n }\n this.dialogInternal = new Dialog({\n target: this.owner.documentEditorSettings.popupTarget, showCloseIcon: true,\n allowDragging: true, enableRtl: isRtl, visible: false,\n width: '1px', isModal: true, position: { X: 'center', Y: 'center' }, zIndex: this.owner.zIndex + 20,\n animationSettings: { effect: 'None' }\n });\n this.dialogInternal.isStringTemplate = true;\n this.dialogInternal.open = this.selection.hideCaret;\n this.dialogInternal.beforeClose = this.updateFocus;\n this.dialogInternal.appendTo(this.dialogTarget1);\n }\n };\n DocumentHelper.prototype.initDialog3 = function (isRtl) {\n if (!this.dialogInternal3) {\n this.dialogTarget3 = createElement('div', { className: 'e-de-dlg-target' });\n this.dialogTarget3.contentEditable = 'false';\n document.body.appendChild(this.dialogTarget3);\n if (isRtl) {\n this.dialogTarget3.classList.add('e-de-rtl');\n }\n this.dialogInternal3 = new Dialog({\n target: this.owner.documentEditorSettings.popupTarget, showCloseIcon: true,\n allowDragging: true, enableRtl: isRtl, visible: false,\n width: '1px', isModal: true, position: { X: 'center', Y: 'center' }, zIndex: this.owner.zIndex,\n animationSettings: { effect: 'None' }\n });\n this.dialogInternal3.isStringTemplate = true;\n this.dialogInternal3.open = this.selection.hideCaret;\n this.dialogInternal3.beforeClose = this.updateFocus;\n this.dialogInternal3.appendTo(this.dialogTarget3);\n }\n };\n DocumentHelper.prototype.hideDialog = function () {\n this.dialog.hide();\n this.updateFocus();\n };\n DocumentHelper.prototype.initDialog2 = function (isRtl) {\n if (!this.dialogInternal2) {\n this.dialogTarget2 = createElement('div', { className: 'e-de-dlg-target' });\n this.dialogTarget2.contentEditable = 'false';\n document.body.appendChild(this.dialogTarget2);\n if (isRtl) {\n this.dialogTarget2.classList.add('e-de-rtl');\n }\n this.dialogInternal2 = new Dialog({\n target: this.owner.documentEditorSettings.popupTarget, showCloseIcon: true,\n allowDragging: true, enableRtl: isRtl, visible: false,\n width: '1px', isModal: true, position: { X: 'center', Y: 'Top' }, zIndex: this.owner.zIndex + 10\n });\n this.dialogInternal2.isStringTemplate = true;\n this.dialogInternal2.appendTo(this.dialogTarget2);\n }\n };\n DocumentHelper.prototype.getBase64 = function (base64String, width, height) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n var imageString = '';\n var drawImage = new Image();\n drawImage.onload = function () {\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n var draw = document.createElement('canvas');\n draw.width = width * displayPixelRatio;\n draw.height = height * displayPixelRatio;\n var context = draw.getContext('2d');\n context.scale(displayPixelRatio, displayPixelRatio);\n context.drawImage(drawImage, 0, 0, width, height);\n imageString = draw.toDataURL('image/png', 1);\n resolve(imageString);\n };\n if (base64String && (HelperMethods.startsWith(base64String, 'http://') || HelperMethods.startsWith(base64String, 'https://'))) {\n fetch(base64String)\n .then(function (response) { return response.blob(); })\n .then(function (blob) {\n return new Promise(function (resolve, reject) {\n var reader = new FileReader();\n reader.onloadend = function () { return resolve(reader.result); };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n })\n .then(function (dataUrl) {\n // The dataUrl will be a base64-encoded string\n drawImage.src = dataUrl;\n // console.log(base64String);\n });\n }\n })];\n });\n });\n };\n /**\n * Clears the context.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.clearContent = function () {\n this.containerContext.clearRect(0, 0, this.containerCanvas.width, this.containerCanvas.height);\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n // Hide comment mark\n if (this.pageContainer) {\n var commentMarkElement = this.pageContainer.getElementsByClassName('e-de-cmt-mark');\n for (var i = 0; i < commentMarkElement.length; i++) {\n commentMarkElement[i].style.display = 'none';\n }\n }\n if (this.pageContainer) {\n var editRangeStart = this.pageContainer.getElementsByClassName('e-de-lock-mark');\n for (var i = 0; i < editRangeStart.length; i++) {\n editRangeStart[i].style.display = 'none';\n }\n }\n };\n /**\n * Fired when the document gets changed.\n *\n * @private\n * @param {BodyWidget[]} sections - Specified document content.\n * @returns {void}\n */\n DocumentHelper.prototype.onDocumentChanged = function (sections, iOps) {\n var _this = this;\n this.clearContent();\n if (this.owner.editorModule) {\n this.owner.editorModule.tocStyles = {};\n this.owner.editorModule.tocBookmarkId = 0;\n }\n this.heightInfoCollection = {};\n this.owner.isDocumentLoaded = false;\n this.viewer.columnLayoutArea.clear();\n this.layout.isDocumentContainsRtl = false;\n this.layout.isMultiColumnDoc = false;\n this.updateAuthorIdentity();\n for (var i = 0; i < this.pages.length; i++) {\n for (var j = 0; j < this.pages[i].bodyWidgets.length; j++) {\n this.pages[i].bodyWidgets[j].destroy();\n }\n }\n this.pages = [];\n if (!isNullOrUndefined(this.renderedLists)) {\n this.renderedLists.clear();\n }\n if (!isNullOrUndefined(this.renderedLevelOverrides)) {\n this.renderedLevelOverrides = [];\n }\n if (!isNullOrUndefined(this.owner.editorHistoryModule)) {\n this.owner.editorHistoryModule.destroy();\n }\n this.owner.isDocumentLoaded = true;\n this.owner.isUpdateTrackChanges = false;\n this.layout.isInitialLoad = true;\n this.layout.footHeight = 0;\n this.layout.footnoteHeight = 0;\n this.layout.layoutItems(sections, false);\n if (this.owner.selectionModule) {\n this.selection.previousSelectedFormField = undefined;\n if (this.formFields.length > 0) {\n this.owner.selectionModule.highlightFormFields();\n }\n this.owner.selectionModule.editRangeCollection = [];\n this.owner.selectionModule.selectRange(this.owner.documentStart, this.owner.documentStart);\n if (this.isDocumentProtected && this.protectionType == 'FormFieldsOnly') {\n this.owner.selectionModule.navigateToNextFormField();\n }\n if (this.isDocumentProtected) {\n this.restrictEditingPane.showHideRestrictPane(true);\n }\n }\n if (!isNullOrUndefined(iOps) && this.owner.editorModule) {\n this.owner.editorModule.intializeDefaultStyles();\n }\n if (this.owner.enableCollaborativeEditing && this.owner.collaborativeEditingHandlerModule && this.owner.enableEditor) {\n this.owner.editorModule.isRemoteAction = true;\n this.owner.editorModule.isIncrementalSave = true;\n if (iOps && !isNullOrUndefined(iOps[incrementalOps[0]])\n && !isNullOrUndefined(iOps[incrementalOps[0]].length > 0)) {\n for (var k = 0; k < iOps[incrementalOps[0]].length; k++) {\n this.owner.collaborativeEditingHandlerModule.applyRemoteAction('action', iOps[incrementalOps[0]][k]);\n }\n }\n this.owner.editorModule.isRemoteAction = false;\n this.owner.editorModule.isIncrementalSave = false;\n this.owner.selectionModule.selectRange(this.owner.documentStart, this.owner.documentStart);\n }\n if (this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n }\n if (this.restrictEditingPane.restrictPane && !this.isDocumentProtected) {\n this.restrictEditingPane.showHideRestrictPane(false);\n }\n if (!isNullOrUndefined(this.owner.selectionModule) && this.owner.selectionModule.isViewPasteOptions) {\n this.owner.selectionModule.isViewPasteOptions = false;\n this.owner.selectionModule.showHidePasteOptions(undefined, undefined);\n }\n this.owner.fireDocumentChange();\n this.owner.showHideRulers();\n setTimeout(function () {\n if (!isNullOrUndefined(_this.owner) && _this.owner.showRevisions) {\n _this.showRevisions(true);\n }\n if (!isNullOrUndefined(_this.owner)) {\n _this.owner.isUpdateTrackChanges = true;\n }\n });\n var picture_cc = document.getElementById('container_editorPICTURE_CONTENT_CONTROL');\n if (!isNullOrUndefined(picture_cc)) {\n this.owner.renderPictureContentControlElement(this.owner, false, false);\n }\n };\n /**\n * Initialize touch ellipse.\n *\n * @returns {void}\n */\n DocumentHelper.prototype.initTouchEllipse = function () {\n var style = 'height: 30px;width: 30px;position: absolute;background-color: transparent;margin: 0px;padding: 0px;z-index:5';\n var ellipse = ' height: 12px;width: 12px;border-radius: 50%;background-color: white;position: absolute;margin: 0px 6px 0px 6px;border-width: 2px;border-style: solid;border-color: #000000;box-sizing: unset;';\n this.touchStart = createElement('div', { className: 'e-touch-ellipse', styles: style });\n var start = createElement('div', { styles: ellipse });\n this.touchEnd = createElement('div', { className: 'e-touch-ellipse', styles: style });\n this.touchStart.style.display = 'none';\n var end = createElement('div', { styles: ellipse });\n this.touchStart.appendChild(start);\n this.touchEnd.appendChild(end);\n this.touchEnd.style.display = 'none';\n this.viewerContainer.appendChild(this.touchStart);\n this.viewerContainer.appendChild(this.touchEnd);\n };\n /**\n * Updates touch mark position.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.updateTouchMarkPosition = function () {\n if (this.touchStart.style.display !== 'none' && !isNullOrUndefined(this.selection)) {\n if (!this.selection.isEmpty) {\n var y = this.selection.getCaretBottom(this.selection.start, false);\n var page = this.selection.getPage(this.selection.start.paragraph);\n var pageTop = (page.boundingRectangle.y - (this.owner.viewer.pageGap * (this.pages.indexOf(page) + 1)) * this.zoomFactor + this.owner.viewer.pageGap * (this.pages.indexOf(page) + 1));\n this.touchStart.style.left = page.boundingRectangle.x + (Math.round(this.selection.start.location.x) * this.zoomFactor - 14) + 'px';\n this.touchStart.style.top = pageTop + ((y) * this.zoomFactor) + 'px';\n if (!this.selection.isEmpty) {\n y = this.selection.getCaretBottom(this.selection.end, false);\n page = this.selection.getPage(this.selection.end.paragraph);\n }\n this.touchEnd.style.left = page.boundingRectangle.x + (Math.round(this.selection.end.location.x) * this.zoomFactor - 14) + 'px';\n this.touchEnd.style.top = pageTop + (y * this.zoomFactor) + 'px';\n }\n else {\n this.selection.updateCaretPosition();\n }\n }\n };\n DocumentHelper.prototype.autoScrollOnSelection = function (cursorPoint) {\n var _this = this;\n //Auto scroll when mouse moved hold on the edge of the viewer container.\n if (this.scrollMoveTimer && (cursorPoint.y <= 0 || cursorPoint.y > 50 || cursorPoint.y < (this.viewerContainer.offsetHeight - 50))) {\n clearInterval(this.scrollMoveTimer);\n this.scrollMoveTimer = 0;\n }\n else if (cursorPoint.y < 60) {\n clearInterval(this.scrollMoveTimer);\n //Scroll up\n this.scrollMoveTimer = setInterval(function () {\n _this.viewerContainer.scrollTop -= 20;\n setTimeout(function () {\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, !_this.owner.enableHeaderAndFooter);\n var widget = _this.getLineWidget(touchPoint);\n _this.selection.updateTextPosition(widget, touchPoint);\n }, 200);\n }, 200);\n }\n else if (cursorPoint.y > (this.viewerContainer.offsetHeight - 70)) {\n clearInterval(this.scrollMoveTimer);\n //Scroll down\n this.scrollMoveTimer = setInterval(function () {\n _this.viewerContainer.scrollTop += 20;\n setTimeout(function () {\n var touchPoint = _this.owner.viewer.findFocusedPage(cursorPoint, !_this.owner.enableHeaderAndFooter);\n var widget = _this.getLineWidget(touchPoint);\n _this.selection.updateTextPosition(widget, touchPoint);\n }, 200);\n }, 200);\n }\n };\n DocumentHelper.prototype.scrollForwardOnSelection = function (cursorPoint) {\n if (this.viewerContainer) {\n this.viewerContainer.scrollTop = this.viewerContainer.scrollTop + 200;\n var touchPoint = this.owner.viewer.findFocusedPage(cursorPoint, !this.owner.enableHeaderAndFooter);\n var textPosition = this.owner.selectionModule.end;\n if (!this.owner.enableImageResizerMode || !this.owner.imageResizerModule.isImageResizerVisible\n || this.owner.imageResizerModule.isShapeResize) {\n this.skipScrollToPosition = true;\n this.owner.selectionModule.moveTextPosition(touchPoint, textPosition, true);\n }\n }\n };\n DocumentHelper.prototype.scrollBackwardOnSelection = function (cursorPoint) {\n this.viewerContainer.scrollTop = this.viewerContainer.scrollTop - 200;\n var touchPoint = this.owner.viewer.findFocusedPage(cursorPoint, !this.owner.enableHeaderAndFooter);\n var textPosition = this.owner.selectionModule.end;\n if (!this.owner.enableImageResizerMode || !this.owner.imageResizerModule.isImageResizerVisible\n || this.owner.imageResizerModule.isShapeResize) {\n this.skipScrollToPosition = true;\n this.owner.selectionModule.moveTextPosition(touchPoint, textPosition, true);\n }\n };\n DocumentHelper.prototype.moveSelectedContent = function () {\n this.isDragStarted = false;\n var info = this.owner.editor.getSelectionInfo(true);\n if (this.owner.selection.start.paragraph.isInsideTable) {\n info = this.owner.selection.updateSelectionInfo(info);\n }\n var start = this.selection.getTextPosBasedOnLogicalIndex(info.start);\n var end = this.selection.getTextPosBasedOnLogicalIndex(info.end);\n var dropSelectionStartParaInfo = this.selection.getParagraphInfo(start);\n var dropSelectionEndParaInfo = this.selection.getParagraphInfo(end);\n var dropSelectionStartParaIndex = this.selection.getHierarchicalIndex(dropSelectionStartParaInfo.paragraph, dropSelectionStartParaInfo.offset.toString());\n var dropSelectionEndParaIndex = this.selection.getHierarchicalIndex(dropSelectionEndParaInfo.paragraph, dropSelectionEndParaInfo.offset.toString());\n var dropSelectionStartPos = this.selection.getTextPosBasedOnLogicalIndex(dropSelectionStartParaIndex);\n var dropSelectionEndPos = this.selection.getTextPosBasedOnLogicalIndex(dropSelectionEndParaIndex);\n var dragOnSelectionStartParaIndex = this.selection.getHierarchicalIndex(this.dragStartParaInfo.paragraph, this.dragStartParaInfo.offset.toString());\n var dragOnSelectionEndParaIndex = this.selection.getHierarchicalIndex(this.dragEndParaInfo.paragraph, this.dragEndParaInfo.offset.toString());\n var dragOnSelectionStartPos = this.selection.getTextPosBasedOnLogicalIndex(dragOnSelectionStartParaIndex);\n var dragOnSelectionEndPos = this.selection.getTextPosBasedOnLogicalIndex(dragOnSelectionEndParaIndex);\n if (dropSelectionStartPos.isExistBefore(dragOnSelectionStartPos)\n || dropSelectionEndPos.isExistAfter(dragOnSelectionEndPos)) {\n this.owner.editorModule.initComplexHistory('DragAndDropContent');\n this.selection.start = dragOnSelectionStartPos;\n this.selection.end = dragOnSelectionEndPos;\n var isEnableLocalPasteTrue = this.owner.enableLocalPaste;\n if (!isEnableLocalPasteTrue) {\n this.owner.enableLocalPaste = true;\n }\n var dropExtraOffset = this.dragEndParaInfo.paragraph.getLength();\n var hasNewLineChar = false;\n if (dropExtraOffset < this.dragEndParaInfo.offset\n || !this.dragStartParaInfo.paragraph.equals(this.dragEndParaInfo.paragraph)) {\n hasNewLineChar = true;\n }\n this.owner.editorModule.cut();\n if (this.dragEndParaInfo.paragraph.equals(dropSelectionStartParaInfo.paragraph)\n && this.dragEndParaInfo.offset < dropSelectionStartParaInfo.offset\n && !this.owner.enableTrackChanges) {\n dropExtraOffset -= this.dragEndParaInfo.paragraph.getLength();\n dropSelectionStartParaInfo.offset -= dropExtraOffset;\n dropSelectionEndParaInfo.offset -= dropExtraOffset;\n dropSelectionStartParaIndex = this.selection.getHierarchicalIndex(dropSelectionStartParaInfo.paragraph, dropSelectionStartParaInfo.offset.toString());\n dropSelectionEndParaIndex = this.selection.getHierarchicalIndex(dropSelectionEndParaInfo.paragraph, dropSelectionEndParaInfo.offset.toString());\n }\n if (!hasNewLineChar || !this.dragEndParaInfo.paragraph.equals(dropSelectionEndParaInfo.paragraph)) {\n dropSelectionStartParaIndex = this.selection.getHierarchicalIndex(dropSelectionStartParaInfo.paragraph, dropSelectionStartParaInfo.offset.toString());\n dropSelectionEndParaIndex = this.selection.getHierarchicalIndex(dropSelectionEndParaInfo.paragraph, dropSelectionEndParaInfo.offset.toString());\n }\n dropSelectionStartPos = this.selection.getTextPosBasedOnLogicalIndex(dropSelectionStartParaIndex);\n dropSelectionEndPos = this.selection.getTextPosBasedOnLogicalIndex(dropSelectionEndParaIndex);\n this.selection.start = dropSelectionStartPos;\n this.selection.end = dropSelectionEndPos;\n this.owner.editorModule.copiedTextContent = '';\n this.owner.editorModule.paste();\n if (!isEnableLocalPasteTrue) {\n this.owner.enableLocalPaste = false;\n }\n this.owner.editorHistoryModule.updateComplexHistory();\n }\n else {\n this.owner.selectionModule.selectPosition(dragOnSelectionStartPos, dragOnSelectionEndPos);\n }\n this.dragStartParaInfo = undefined;\n this.dragEndParaInfo = undefined;\n this.selection.caret.classList.add(\"e-de-cursor-animation\");\n };\n DocumentHelper.prototype.isSelectionInListText = function (cursorPoint) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget) && widget.children[0] instanceof ListTextElementBox) {\n var left = this.getLeftValue(widget);\n var width = widget.children[0].width;\n var height = widget.children[0].height;\n if (this.isInsideRect(left, widget.paragraph.y, width, height, cursorPoint)) {\n this.selectionLineWidget = widget;\n return true;\n }\n }\n return false;\n };\n DocumentHelper.prototype.isInShapeBorder = function (floatElement, cursorPoint) {\n if (!isNullOrUndefined(floatElement)) {\n var width = floatElement.width;\n var height = floatElement.height;\n if (this.isInsideRect(floatElement.x - floatElement.margin.left, floatElement.y - floatElement.margin.top, width, height, cursorPoint)) {\n // this.selectionLineWidget = this.getLineWidget(cursorPoint);\n if (floatElement instanceof ImageElementBox) {\n return true;\n }\n else if (floatElement instanceof ShapeElementBox) {\n var lineWidth = floatElement.lineFormat.weight;\n if (!(this.isInsideRect(floatElement.x + lineWidth, floatElement.y + lineWidth + floatElement.textFrame.marginTop, width - (lineWidth * 2), height - ((lineWidth * 2) + floatElement.textFrame.marginTop + floatElement.textFrame.marginBottom), cursorPoint))) {\n return true;\n }\n }\n }\n }\n return false;\n };\n /**\n * Check whether touch point is inside the rectangle or not.\n *\n * @private\n * @param {number} x - Specifies left position.\n * @param {number} y - Specifies top position.\n * @param {number} width - Specifies width.\n * @param {number} height - Specifies height\n * @param {Point} touchPoint - Specifies the point to check.\n * @returns {boolean} - Return true if points intersect.\n */\n DocumentHelper.prototype.isInsideRect = function (x, y, width, height, touchPoint) {\n if ((touchPoint.x > x && touchPoint.x <= x + width) && (touchPoint.y > y && touchPoint.y <= y + height)) {\n return true;\n }\n return false;\n };\n DocumentHelper.prototype.getLeftValue = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.selection.isParagraphFirstLine(widget)) {\n if (paragraphFormat.textAlignment === 'Right') {\n left -= HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n left -= HelperMethods.convertPointToPixel(paragraphFormat.leftIndent);\n }\n else {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n }\n var element = widget.children[0];\n if (element instanceof ListTextElementBox) {\n left += element.margin.left;\n }\n return left;\n };\n /**\n * Checks whether left mouse button is pressed or not.\n *\n * @param {MouseEvent} event - Specifies mouse event.\n * @returns {boolean} - Returns true if left mouse button is clicked.\n */\n DocumentHelper.prototype.isLeftButtonPressed = function (event) {\n this.isTouchInput = false;\n var button = event.which || event.button;\n return button === 1;\n };\n DocumentHelper.prototype.updateSelectionOnTouch = function (point, touchPoint) {\n this.zoomX = undefined;\n this.zoomY = undefined;\n if (this.isMouseDown && !this.isSelectionChangedOnMouseMoved && !isNullOrUndefined(this.currentPage) && !isNullOrUndefined(this.owner.selectionModule.start)) {\n if (!isNullOrUndefined(this.currentSelectedComment) && this.owner.commentReviewPane\n && !this.owner.commentReviewPane.commentPane.isEditMode) {\n this.currentSelectedComment = undefined;\n }\n if (this.touchDownOnSelectionMark === 0) {\n this.updateTextPositionForSelection(new Point(touchPoint.x, touchPoint.y), this.tapCount);\n if (this.tapCount === 2) {\n this.selection.checkAndEnableHeaderFooter(point, touchPoint);\n }\n }\n if (this.owner.selectionModule.isEmpty) {\n this.selection.updateCaretPosition();\n }\n this.selection.checkForCursorVisibility();\n }\n };\n /**\n * Gets touch offset value.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event\n * @returns {Point} - Returns modified touch offset\n */\n DocumentHelper.prototype.getTouchOffsetValue = function (event) {\n var targetElement = this.viewerContainer;\n var offset = targetElement.getBoundingClientRect();\n var touchOffsetValues = event.touches[0];\n if (isNullOrUndefined(touchOffsetValues)) {\n touchOffsetValues = event.changedTouches[0];\n }\n var offsetX = touchOffsetValues.clientX - offset.left;\n var offsetY = touchOffsetValues.clientY - offset.top;\n return new Point(offsetX, offsetY);\n };\n /**\n * Fired on pinch zoom in.\n *\n * @private\n * @param {TouchEvent} event - Specifies touch event\n * @returns {void}\n */\n DocumentHelper.prototype.onPinchInInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor - 0.01;\n if (updatedZoomFactor < 5 && updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor - 0.01;\n }\n if (updatedZoomFactor < 0.1) {\n updatedZoomFactor = 0.1;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n DocumentHelper.prototype.onPinchOutInternal = function (event) {\n this.preZoomFactor = this.zoomFactor;\n var updatedZoomFactor = this.zoomFactor + 0.01;\n if (updatedZoomFactor > 2) {\n updatedZoomFactor = updatedZoomFactor + 0.01;\n }\n if (updatedZoomFactor > 5) {\n updatedZoomFactor = 5;\n }\n this.zoomFactor = updatedZoomFactor;\n };\n DocumentHelper.prototype.getPageWidth = function (page) {\n var width = page.boundingRectangle.width;\n return width;\n };\n /**\n * Removes specified page.\n * @private\n * @param {Page} page - Specifies page to remove\n * @returns {void}\n */\n DocumentHelper.prototype.removePage = function (page) {\n if (this.currentPage === page) {\n this.currentPage = undefined;\n }\n if (page.headerWidgetIn) {\n page.headerWidgetIn.page = undefined;\n }\n if (page.footerWidgetIn) {\n page.footerWidgetIn.page = undefined;\n }\n if (page.headerWidget) {\n page.headerWidget.page = undefined;\n }\n if (page.footerWidget) {\n page.footerWidget.page = undefined;\n }\n var index = this.pages.indexOf(page);\n if (index > -1) {\n this.pages.splice(index, 1);\n }\n //this.removeRenderedPages();\n if (!isNullOrUndefined(this.owner.viewer.visiblePages)) {\n if ((this.owner.viewer.visiblePages).indexOf(page) > -1) {\n var pageIndex = (this.owner.viewer.visiblePages).indexOf(page);\n (this.owner.viewer.visiblePages).splice(pageIndex, 1);\n }\n }\n //(viewer as PageLayoutViewer).visiblePages.remove(page);\n var height = 0;\n for (var i = 0; i < this.pages.length; i++) {\n height = height + this.pages[i].boundingRectangle.height;\n }\n //Updates the vertical height.\n height -= page.boundingRectangle.height + 20;\n //ToDo:Update horizontal width, if removed page has max width.\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n if (index !== -1) {\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n if (!isNullOrUndefined(page.bodyWidgets[0].firstChild) && !(page.bodyWidgets[0].firstChild instanceof TableWidget && page.bodyWidgets[0].firstChild.header)) {\n page.repeatHeaderRowTableWidget = false;\n }\n }\n }\n };\n // private removeRenderedPages(): void {\n // for (let i: number = 0; i < this.pages.length; i++) {\n // this.clearContainer(this.pages[i]);\n // }\n // }\n /**\n * Updates viewer size on window resize.\n *\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.updateViewerSize = function () {\n var _this = this;\n var element = this.owner.getDocumentEditorElement();\n this.updateViewerSizeInternal(element);\n this.owner.viewer.updateScrollBars();\n if (this.owner.viewer instanceof WebLayoutViewer && (!isNullOrUndefined(this.owner)) && (!isNullOrUndefined(element))) {\n if (this.resizerTimer) {\n clearTimeout(this.resizerTimer);\n }\n /* eslint-disable @typescript-eslint/indent */\n this.resizerTimer = setTimeout(function () {\n if (!isNullOrUndefined(_this.owner)) {\n var currentVisibleWidth = void 0;\n if (!isNullOrUndefined(_this.visibleBounds)) {\n currentVisibleWidth = _this.visibleBounds.width;\n }\n else {\n currentVisibleWidth = 0;\n }\n if (isNullOrUndefined(_this.owner.viewer.preVisibleWidth)) {\n _this.owner.viewer.preVisibleWidth = 0;\n }\n if ((!isNullOrUndefined(_this.visibleBounds) && (currentVisibleWidth !== _this.owner.viewer.preVisibleWidth))) {\n _this.owner.editorModule.layoutWholeDocument();\n _this.owner.viewer.preVisibleWidth = currentVisibleWidth;\n }\n if (_this.resizerTimer) {\n clearTimeout(_this.resizerTimer);\n }\n }\n }, 50);\n }\n if (!isNullOrUndefined(this.selection)) {\n this.selection.updateCaretPosition();\n }\n // if(!isNullOrUndefined(this.owner) && (!isNullOrUndefined(this.owner.hRuler && !isNullOrUndefined(this.owner.vRuler))))\n // {\n // updateRuler(this.owner);\n // }\n };\n /**\n * @private\n */\n DocumentHelper.prototype.triggerAutoResizeInterval = function () {\n var _this = this;\n var timer = 0;\n var element = this.owner.element;\n var args = { cancel: false };\n this.owner.notify(beforeAutoResize, args);\n if (!isNullOrUndefined(args.element)) {\n element = args.element;\n }\n element.style.visibility = 'hidden';\n showSpinner(element);\n var counter = 0;\n var internal = this.owner.documentEditorSettings.autoResizeSettings.interval;\n if (this.isAutoResizeCanStart) {\n timer = setInterval(function () {\n counter++;\n var tempRect = _this.owner.element.getBoundingClientRect();\n if (tempRect.width !== 0 && tempRect.height !== 0) {\n _this.isAutoResizeCanStart = false;\n var args_1 = { cancel: false };\n _this.owner.notify(internalAutoResize, args_1);\n clearInterval(timer);\n if (!args_1.cancel) {\n _this.owner.resize();\n }\n hideSpinner(element);\n element.style.visibility = 'visible';\n }\n else if (counter > _this.owner.documentEditorSettings.autoResizeSettings.iterationCount) {\n clearInterval(timer);\n hideSpinner(element);\n element.style.visibility = 'visible';\n }\n }, internal);\n }\n else {\n hideSpinner(element);\n element.style.visibility = 'visible';\n }\n };\n DocumentHelper.prototype.updateViewerSizeInternal = function (element) {\n if (!isNullOrUndefined(element)) {\n var computedStyle = getComputedStyle(element);\n var rectHeight = parseFloat(computedStyle.height.replace('px', ''));\n var rectWidth = parseFloat(computedStyle.width.replace('px', ''));\n if (rectWidth === 0 && rectHeight === 0) {\n this.isAutoResizeCanStart = true;\n }\n else {\n this.isAutoResizeCanStart = false;\n }\n var width = 0;\n var height = 0;\n height = rectHeight > 0 ? rectHeight : 200;\n var restrictPaneRect = this.restrictEditingPane && this.restrictEditingPane.isShowRestrictPane ?\n this.getComputedWidth(this.restrictEditingPane.restrictPane) : undefined;\n var optionsRect = this.owner.optionsPaneModule && this.owner.optionsPaneModule.isOptionsPaneShow ?\n this.getComputedWidth(this.owner.optionsPaneModule.optionsPane) : undefined;\n var commentPane = 0;\n if (this.owner.commentReviewPane && this.owner.commentReviewPane.parentPaneElement) {\n commentPane = this.getComputedWidth(this.owner.commentReviewPane.parentPaneElement);\n }\n if (restrictPaneRect || optionsRect || commentPane) {\n var paneWidth = restrictPaneRect ? restrictPaneRect : 0;\n paneWidth += optionsRect ? optionsRect : 0;\n paneWidth += commentPane ? commentPane : 0;\n width = (rectWidth - paneWidth) > 0 ? (rectWidth - paneWidth) : 200;\n }\n else {\n width = rectWidth > 0 ? rectWidth : 200;\n }\n this.viewerContainer.style.height = height.toString() + 'px';\n this.viewerContainer.style.width = Math.ceil(width) + 'px';\n this.visibleBoundsIn = new Rect(0, 0, width, height);\n this.containerCanvas.width = width;\n this.containerCanvas.height = height;\n this.containerCanvas.style.width = width + 'px';\n this.containerCanvas.style.height = height + 'px';\n this.selectionCanvas.width = width;\n this.selectionCanvas.height = height;\n this.selectionCanvas.style.width = width + 'px';\n this.selectionCanvas.style.height = height + 'px';\n this.measureScrollbarWidth(element);\n }\n };\n DocumentHelper.prototype.getComputedWidth = function (element) {\n var style = getComputedStyle(element);\n if (style.display === 'block') {\n return parseFloat(style.width.replace('px', ''));\n }\n return 0;\n };\n /**\n * Inserts page in specified index.\n *\n * @private\n * @param {number} index - Specifes index to insert page\n * @param {Page} page - Page to insert.\n * @returns {void}\n */\n DocumentHelper.prototype.insertPage = function (index, page) {\n if (this.pages.indexOf(page) > -1) {\n this.pages.splice(this.pages.indexOf(page), 1);\n }\n this.pages.splice(index, 0, page);\n var top = 20;\n if (index > 0) {\n top += this.pages[index - 1].boundingRectangle.bottom;\n }\n for (var i = index; i < this.pages.length; i++) {\n //Update bounding rectangle of next pages in collection.\n page = this.pages[i];\n page.boundingRectangle = new Rect(page.boundingRectangle.x, top, page.boundingRectangle.width, page.boundingRectangle.height);\n top = page.boundingRectangle.bottom + 20;\n }\n };\n DocumentHelper.prototype.updateTextPositionForSelection = function (cursorPoint, tapCount) {\n var widget = this.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n this.selection.updateTextPosition(widget, cursorPoint);\n }\n if (tapCount > 1) {\n this.isMouseDown = false;\n this.useTouchSelectionMark = false;\n if (this.pages.length === 0) {\n return;\n }\n //Double tap/triple tap selection\n if (!isNullOrUndefined(this.currentPage) && !isNullOrUndefined(this.owner.selectionModule.start)) {\n if (tapCount % 2 === 0) {\n this.owner.selectionModule.selectCurrentWord();\n }\n else if (!this.isDragStarted) {\n this.owner.selectionModule.selectParagraph();\n }\n }\n }\n };\n DocumentHelper.prototype.scrollToPosition = function (startPosition, endPosition, skipCursorUpdate, isBookmark) {\n if (this.skipScrollToPosition || this.isWebPrinting || (this.owner.editorModule && this.owner.editorModule.isRemoteAction)) {\n this.skipScrollToPosition = false;\n return;\n }\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizing\n || this.isMouseDownInFooterRegion || this.isRowOrCellResizing) {\n return;\n }\n var lineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, true);\n if (isNullOrUndefined(lineWidget)) {\n return;\n }\n var top = this.selection.getTop(lineWidget);\n if (this.isMouseDown) {\n var prevLineWidget = this.selection.getLineWidgetInternal(endPosition.currentWidget, endPosition.offset, false);\n var prevTop = this.selection.getTop(prevLineWidget);\n if (prevLineWidget !== lineWidget && endPosition.location.y >= prevTop) {\n lineWidget = prevLineWidget;\n }\n }\n var height = lineWidget.height;\n //Gets current page.\n var endPage = this.selection.getPage(lineWidget.paragraph);\n this.currentPage = endPage;\n var x = 0;\n var y = 0;\n var horizontalWidth = 0;\n var isPageLayout = this.owner.viewer instanceof PageLayoutViewer;\n var pageLayout = this.owner.viewer;\n if (isNullOrUndefined(endPage)) {\n return;\n }\n var pageWidth = endPage.boundingRectangle.width;\n x = (this.visibleBounds.width - pageWidth * this.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n y = endPage.boundingRectangle.y * this.zoomFactor + (this.pages.indexOf(endPage) + 1) * this.owner.viewer.pageGap * (1 - this.zoomFactor);\n var scrollTop = this.owner.viewer.containerTop;\n var scrollLeft = this.owner.viewer.containerLeft;\n var pageHeight = this.visibleBounds.height;\n var caretInfo = this.selection.updateCaretSize(this.owner.selectionModule.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (endPosition.location.x) * this.zoomFactor;\n y += (endPosition.location.y + topMargin) * this.zoomFactor;\n if (!isBookmark) {\n //vertical scroll bar update\n if ((scrollTop + 20) > y) {\n this.viewerContainer.scrollTop = (y - 10);\n }\n else if (scrollTop + pageHeight < y + caretHeight) {\n this.viewerContainer.scrollTop = y + caretHeight - pageHeight + 10;\n }\n }\n else {\n // As per MS Word behaviour, update vertical scroll bar using static value while navigate bookmark\n this.viewerContainer.scrollTop = y - 96;\n }\n if (!skipCursorUpdate) {\n this.selection.updateCaretToPage(startPosition, endPage);\n }\n var scrollBarWidth = this.viewerContainer.offsetWidth - this.viewerContainer.clientWidth;\n if (scrollLeft > x) {\n this.viewerContainer.scrollLeft = x - (this.pageContainer.offsetWidth / 100) * 20;\n }\n else if (scrollLeft + this.visibleBounds.width < x + scrollBarWidth) {\n this.viewerContainer.scrollLeft = scrollLeft + (this.pageContainer.offsetWidth / 100) * 15 + scrollBarWidth;\n while (x < this.owner.viewer.containerWidth && this.viewerContainer.scrollLeft + this.visibleBounds.width < x + scrollBarWidth) {\n this.viewerContainer.scrollLeft = this.viewerContainer.scrollLeft + (this.pageContainer.offsetWidth / 100) * 15 + scrollBarWidth;\n if (this.viewerContainer.scrollLeft === 0) {\n break;\n }\n }\n }\n };\n DocumentHelper.prototype.getLineWidget = function (cursorPoint) {\n return this.getLineWidgetInternal(cursorPoint, false);\n };\n DocumentHelper.prototype.getLineWidgetInternal = function (cursorPoint, isMouseDragged) {\n var widget = undefined;\n if (!isNullOrUndefined(this.currentPage)) {\n var childWidgets = void 0;\n if (this.owner.enableHeaderAndFooter) {\n var page = this.currentPage;\n var pageBottom = page.boundingRectangle.height;\n var headerHeight = Math.max((page.headerWidget.y + page.headerWidget.height), HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin)) * this.zoomFactor;\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = (page.boundingRectangle.height -\n Math.max(page.footerWidget.height + footerDistance, footerDistance * 2));\n if (isMouseDragged) {\n if (this.isBlockInHeader(this.selection.start.paragraph)) {\n childWidgets = this.currentPage.headerWidget;\n }\n else {\n childWidgets = this.currentPage.footerWidget;\n }\n }\n else {\n if (cursorPoint.y <= pageBottom && cursorPoint.y >= footerHeight) {\n childWidgets = this.currentPage.footerWidget;\n }\n else if ((cursorPoint.y) >= 0 && (cursorPoint.y) <= headerHeight) {\n childWidgets = this.currentPage.headerWidget;\n }\n }\n if (isNullOrUndefined(childWidgets)) {\n return undefined;\n }\n var shapeElementInfo = this.checkFloatingItems(childWidgets, cursorPoint, isMouseDragged);\n if (shapeElementInfo.isShapeSelected) {\n if (shapeElementInfo.isInShapeBorder) {\n return shapeElementInfo.element.line;\n }\n return this.selection.getLineWidgetBodyWidget(shapeElementInfo.element.textFrame, cursorPoint);\n }\n else {\n return this.selection.getLineWidgetBodyWidget(childWidgets, cursorPoint);\n }\n }\n else {\n var shapeInfo = undefined;\n var behindShapeInfo = undefined;\n for (var i = 0; i < this.currentPage.bodyWidgets.length; i++) {\n var bodyWidget = this.currentPage.bodyWidgets[i];\n shapeInfo = this.checkFloatingItems(bodyWidget, cursorPoint, isMouseDragged, false);\n behindShapeInfo = this.checkFloatingItems(bodyWidget, cursorPoint, isMouseDragged, true);\n if (shapeInfo.isShapeSelected || behindShapeInfo.isShapeSelected) {\n break;\n }\n }\n if (shapeInfo.isShapeSelected && !this.isEmptyShape(shapeInfo)) {\n if (shapeInfo.isInShapeBorder) {\n return shapeInfo.element.line;\n }\n if (shapeInfo.element instanceof ShapeElementBox) {\n widget = this.selection.getLineWidgetBodyWidget(shapeInfo.element.textFrame, cursorPoint);\n }\n }\n else if (isMouseDragged && this.isFootnoteWidget) {\n if (this.selection.start.paragraph.bodyWidget.footNoteReference !== undefined && this.selection.start.paragraph.bodyWidget.containerWidget instanceof FootNoteWidget && this.selection.start.paragraph.bodyWidget.containerWidget.footNoteType === 'Footnote') {\n return this.selection.getLineWidgetBodyWidget(this.currentPage.footnoteWidget, cursorPoint);\n }\n else if (this.selection.start.paragraph.bodyWidget.footNoteReference !== undefined &&\n this.selection.start.paragraph.bodyWidget.containerWidget instanceof FootNoteWidget\n && this.selection.start.paragraph.bodyWidget.containerWidget.footNoteType === 'Endnote') {\n return this.selection.getLineWidgetBodyWidget(this.currentPage.endnoteWidget, cursorPoint);\n }\n }\n else {\n if (!isMouseDragged && this.currentPage.footnoteWidget && this.isInFootnoteWidget(this.currentPage.footnoteWidget, cursorPoint)) {\n widget = this.selection.getLineWidgetBodyWidget(this.currentPage.footnoteWidget, cursorPoint);\n if (widget) {\n this.isFootnoteWidget = true;\n }\n }\n else if (!isMouseDragged && this.currentPage.endnoteWidget &&\n this.isInFootnoteWidget(this.currentPage.endnoteWidget, cursorPoint)) {\n widget = this.selection.getLineWidgetBodyWidget(this.currentPage.endnoteWidget, cursorPoint);\n if (widget) {\n this.isFootnoteWidget = true;\n }\n }\n else {\n for (var i_1 = 0; i_1 < this.currentPage.bodyWidgets.length; i_1++) {\n var bodyWidget_1 = this.currentPage.bodyWidgets[i_1];\n if (i_1 < this.currentPage.bodyWidgets.length - 1) {\n if (cursorPoint.x <= bodyWidget_1.x + bodyWidget_1.width) {\n //let isGetFirstChild: boolean = i === this.currentPage.bodyWidgets.length - 1;\n widget = this.selection.getLineWidgetBodyWidget(bodyWidget_1, cursorPoint, true);\n if (!isNullOrUndefined(widget) && widget.paragraph.y <= cursorPoint.y\n && (widget.paragraph.y + widget.paragraph.height) >= cursorPoint.y) {\n this.isFootnoteWidget = false;\n break;\n }\n }\n }\n if (cursorPoint.x > bodyWidget_1.x + bodyWidget_1.width && this.layout.getNextWidgetHeight(bodyWidget_1) >= cursorPoint.y && bodyWidget_1.y <= cursorPoint.y) {\n if (isNullOrUndefined(bodyWidget_1.nextRenderedWidget) || !(this.layout.getNextWidgetHeight(bodyWidget_1.nextRenderedWidget) >= cursorPoint.y && bodyWidget_1.nextRenderedWidget.y <= cursorPoint.y)) {\n widget = this.selection.getLineWidgetBodyWidget(bodyWidget_1, cursorPoint, true);\n if (!isNullOrUndefined(widget) && widget.paragraph.y <= cursorPoint.y\n && (widget.paragraph.y + widget.paragraph.height) >= cursorPoint.y) {\n this.isFootnoteWidget = false;\n break;\n }\n }\n }\n if (i_1 == this.currentPage.bodyWidgets.length - 1) {\n widget = this.selection.getLineWidgetBodyWidget(bodyWidget_1, cursorPoint, true);\n if (!isNullOrUndefined(widget) && widget.paragraph.y <= cursorPoint.y\n && (widget.paragraph.y + widget.paragraph.height) >= cursorPoint.y) {\n this.isFootnoteWidget = false;\n break;\n }\n }\n if (cursorPoint.x < bodyWidget_1.x && i_1 < this.currentPage.bodyWidgets.length - 1) {\n widget = this.selection.getLineWidgetBodyWidget(bodyWidget_1, cursorPoint, true);\n if (!isNullOrUndefined(widget) && widget.paragraph.y <= cursorPoint.y\n && (widget.paragraph.y + widget.paragraph.height) >= cursorPoint.y) {\n this.isFootnoteWidget = false;\n break;\n }\n else if (!isNullOrUndefined(widget) && i_1 === this.currentPage.bodyWidgets.length - 1) {\n this.isFootnoteWidget = false;\n break;\n }\n }\n }\n }\n var inlineShapeInfo = this.checkInlineShapeItems(widget, cursorPoint, isMouseDragged);\n if (inlineShapeInfo.isShapeSelected) {\n if (inlineShapeInfo.isInShapeBorder) {\n return inlineShapeInfo.element.line;\n }\n if (inlineShapeInfo.element instanceof ShapeElementBox) {\n widget = this.selection.getLineWidgetBodyWidget(inlineShapeInfo.element.textFrame, cursorPoint);\n }\n }\n else if (!this.checkPointIsInLine(widget, cursorPoint) && behindShapeInfo.isShapeSelected) {\n if (behindShapeInfo.isInShapeBorder) {\n return behindShapeInfo.element.line;\n }\n if (behindShapeInfo.element instanceof ShapeElementBox) {\n widget = this.selection.getLineWidgetBodyWidget(behindShapeInfo.element.textFrame, cursorPoint);\n }\n }\n }\n }\n }\n return widget;\n };\n DocumentHelper.prototype.checkInlineShapeItems = function (widget, cursorPoint, isMouseDragged) {\n var isInShape = false;\n var isInShapeBorder = false;\n var floatingElement;\n var selectionInShape = this.selection.isInShape;\n var isMouseDraggedInShape = isMouseDragged && selectionInShape;\n if (!isNullOrUndefined(widget) && widget.children.length > 0) {\n if (isMouseDraggedInShape) {\n var textFrame = this.owner.selectionModule.getCurrentTextFrame();\n if (textFrame) {\n floatingElement = textFrame.containerShape;\n isInShape = true;\n }\n }\n else {\n for (var i = 0; i < widget.children.length; i++) {\n if (!(widget.children[i] instanceof ShapeElementBox && widget.children[i].textWrappingStyle === 'Inline')) {\n continue;\n }\n floatingElement = widget.children[i];\n if (cursorPoint.x < floatingElement.x + floatingElement.margin.left + floatingElement.width &&\n cursorPoint.x > floatingElement.x && cursorPoint.y < floatingElement.y + floatingElement.margin.top +\n floatingElement.height && cursorPoint.y > floatingElement.y) {\n isInShape = true;\n if (this.isInShapeBorder(floatingElement, cursorPoint)) {\n isInShapeBorder = true;\n }\n break;\n }\n }\n if (isMouseDragged && !selectionInShape) {\n isInShape = false;\n }\n }\n }\n return {\n 'element': floatingElement,\n 'caretPosition': cursorPoint,\n 'isInShapeBorder': isInShapeBorder,\n 'isShapeSelected': isInShape\n };\n };\n /**\n * @private\n */\n DocumentHelper.prototype.checkPointIsInLine = function (widget, cursorPoint) {\n if (!isNullOrUndefined(widget) && widget.children.length > 0) {\n var element = void 0;\n var left = widget.paragraph.x;\n var top_1 = this.selection.getTop(widget);\n for (var i = widget.children.indexOf(widget.children[0]); i < widget.children.length; i++) {\n element = widget.children[i];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (cursorPoint.x < left + element.margin.left + element.width + element.padding.left\n && cursorPoint.x > left && cursorPoint.y < top_1 + widget.height && cursorPoint.y > top_1) {\n return true;\n }\n left += element.margin.left + element.width + element.padding.left;\n }\n }\n return false;\n };\n DocumentHelper.prototype.isInFootnoteWidget = function (footnoteWidget, point) {\n for (var i = 0; i < footnoteWidget.bodyWidgets.length; i++) {\n for (var j = 0; j < footnoteWidget.bodyWidgets[i].childWidgets.length; j++) {\n var childWidget = footnoteWidget.bodyWidgets[i].childWidgets[j];\n if (childWidget instanceof Widget && childWidget.y <= point.y\n && (childWidget.y + childWidget.height) >= point.y) {\n return true;\n }\n }\n }\n return false;\n };\n DocumentHelper.prototype.checkFloatingItems = function (blockContainer, cursorPoint, isMouseDragged, isBehind) {\n var isInShape = false;\n var isInShapeBorder = false;\n var floatElement;\n var selectionInShape = this.selection.isInShape;\n var isMouseDraggedInShape = isMouseDragged && selectionInShape;\n if (blockContainer.floatingElements.length > 0) {\n var page = this.currentPage;\n /* eslint-disable */\n blockContainer.floatingElements.sort(function (a, b) {\n if (a instanceof TableWidget || b instanceof TableWidget) {\n return 0;\n }\n else {\n return a.zOrderPosition - b.zOrderPosition;\n }\n });\n if (isMouseDraggedInShape) {\n var textFrame = this.owner.selectionModule.getCurrentTextFrame();\n if (textFrame) {\n floatElement = textFrame.containerShape;\n isInShape = true;\n }\n }\n else {\n for (var i = blockContainer.floatingElements.length - 1; i >= 0; i--) {\n if (blockContainer.floatingElements[i] instanceof TableWidget\n || (!isNullOrUndefined(isBehind) && isBehind ? blockContainer.floatingElements[i].textWrappingStyle !== 'Behind' : blockContainer.floatingElements[i].textWrappingStyle === 'Behind')) {\n continue;\n }\n floatElement = blockContainer.floatingElements[i];\n if (cursorPoint.x < floatElement.x + floatElement.margin.left + floatElement.width &&\n cursorPoint.x > floatElement.x && cursorPoint.y < floatElement.y + floatElement.margin.top +\n floatElement.height && cursorPoint.y > floatElement.y) {\n isInShape = true;\n if (this.isInShapeBorder(floatElement, cursorPoint)) {\n isInShapeBorder = true;\n }\n break;\n }\n }\n if (isMouseDragged && !selectionInShape) {\n isInShape = false;\n }\n }\n }\n return {\n 'element': floatElement,\n 'caretPosition': cursorPoint,\n 'isShapeSelected': isInShape,\n 'isInShapeBorder': isInShapeBorder\n };\n };\n DocumentHelper.prototype.isBlockInHeader = function (block) {\n while (!(block.containerWidget instanceof HeaderFooterWidget)) {\n if (!block.containerWidget) {\n return false;\n }\n block = block.containerWidget;\n if (block instanceof TextFrame) {\n block = block.containerShape.paragraph;\n }\n }\n return block.containerWidget.headerFooterType.indexOf('Header') !== -1;\n };\n DocumentHelper.prototype.clearSelectionHighlight = function () {\n var canClear = true;\n canClear = (!this.isControlPressed || !this.isMouseDown);\n // if (this.owner.selection.selectionRanges.length > 0 && canClear) {\n if (this.owner.selectionModule.clearSelectionHighlightInSelectedWidgets()) {\n this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n }\n // } else if (!isNullOrUndefined(this.owner.selection.currentSelectionRange) && this.isMouseDown) {\n // this.owner.selection.currentSelectionRange.clearSelectionHighlight();\n // }\n //this.renderVisiblePages();\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.removeEmptyPages = function () {\n var scrollToLastPage = false;\n var pageIndex = this.selection.startPage - 1;\n for (var j = 0; j < this.pages.length; j++) {\n var page = this.pages[j];\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n if (page.bodyWidgets.length === 0 || page.bodyWidgets[i].childWidgets.length === 0) {\n if (page.bodyWidgets.length >= 1) {\n var startindex = page.bodyWidgets.indexOf(page.bodyWidgets[i]);\n page.bodyWidgets.splice(startindex, 1);\n i--;\n }\n }\n }\n if (page.bodyWidgets.length <= 0) {\n if (j === this.pages.length - 1 && this.owner.viewer instanceof PageLayoutViewer && this.owner.viewer.visiblePages.indexOf(this.pages[j]) !== -1) {\n scrollToLastPage = true;\n }\n if (!isNullOrUndefined(page.endnoteWidget) && page.endnoteWidget.bodyWidgets.length > 0) {\n var endnote = page.endnoteWidget;\n var previousPage = page.previousPage;\n if (!isNullOrUndefined(previousPage)) {\n if (isNullOrUndefined(previousPage.endnoteWidget)) {\n previousPage.endnoteWidget = new FootNoteWidget();\n previousPage.endnoteWidget.footNoteType = 'Endnote';\n previousPage.endnoteWidget.page = previousPage;\n }\n for (var k = 0; k < endnote.bodyWidgets.length; k++) {\n var bodyWidget = endnote.bodyWidgets[k];\n endnote.bodyWidgets.splice(k, 1);\n previousPage.endnoteWidget.bodyWidgets.push(bodyWidget);\n bodyWidget.containerWidget = previousPage.endnoteWidget;\n bodyWidget.page = previousPage;\n k--;\n }\n this.layout.isRelayoutEndnote = true;\n scrollToLastPage = false;\n }\n }\n this.removePage(this.pages[j]);\n j--;\n }\n }\n if (!isNullOrUndefined(this.pages[pageIndex])) {\n var page = this.pages[pageIndex];\n if (page.headerWidget) {\n page.headerWidget.page = page;\n }\n if (page.footerWidget) {\n page.footerWidget.page = page;\n }\n }\n if (scrollToLastPage) {\n this.scrollToBottom();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentHelper.prototype.scrollToBottom = function () {\n if (this.selection.start.paragraph && this.selection.start.paragraph.bodyWidget) {\n var page = this.selection.start.paragraph.bodyWidget.page;\n var containerHeight = this.visibleBounds.height;\n this.viewerContainer.scrollTop = page.boundingRectangle.bottom - containerHeight;\n }\n };\n DocumentHelper.prototype.getFieldResult = function (fieldBegin, page) {\n if (!isNullOrUndefined(page) && !isNullOrUndefined(this.selection) && !isNullOrUndefined(fieldBegin)) {\n var fieldCode = this.selection.getFieldCode(fieldBegin);\n var fieldCodes = fieldCode.split('\\*');\n var fieldCategory = fieldCodes[0].replace(/[^\\w\\s]/gi, '').trim().toLowerCase();\n var fieldPattern = '';\n if (fieldCodes.length > 1) {\n if (fieldCodes[1] !== ' MERGEFORMAT') {\n fieldPattern = fieldCodes[1].replace(/[^\\w\\s]/gi, '').trim();\n }\n }\n if (fieldPattern == '') {\n fieldPattern = page.bodyWidgets[0].sectionFormat.pageNumberStyle;\n }\n if (fieldCategory.indexOf(' ') !== -1) {\n fieldCategory = fieldCategory.split(' ')[0];\n }\n switch (fieldCategory) {\n case 'page':\n if (page.bodyWidgets[0].sectionFormat.restartPageNumbering && page.sectionIndex !== 0) {\n var currentSectionIndex_1 = page.sectionIndex;\n var previousPage = page.previousPage;\n this.isRestartNumbering = true;\n if (currentSectionIndex_1 !== previousPage.sectionIndex && previousPage.bodyWidgets[previousPage.bodyWidgets.length - 1].sectionIndex !== currentSectionIndex_1) {\n page.currentPageNum = (page.bodyWidgets[0].sectionFormat.pageStartingNumber);\n return this.getFieldText(fieldPattern, page.currentPageNum);\n }\n if (previousPage.currentPageNum === 1 && currentSectionIndex_1 !== previousPage.sectionIndex) {\n previousPage.currentPageNum = (page.bodyWidgets[0].sectionFormat.pageStartingNumber);\n }\n page.currentPageNum = previousPage.currentPageNum + 1;\n return this.getFieldText(fieldPattern, page.currentPageNum);\n }\n else if (page.bodyWidgets[0].sectionFormat.restartPageNumbering && page.sectionIndex === 0) {\n page.currentPageNum = page.bodyWidgets[0].sectionFormat.pageStartingNumber + page.index;\n return this.getFieldText(fieldPattern, page.currentPageNum);\n }\n if (!isNullOrUndefined(page.previousPage) && ((page.previousPage.bodyWidgets[0].sectionFormat.restartPageNumbering && page.previousPage.currentPageNum === 1)\n || (this.isRestartNumbering && page.previousPage.currentPageNum !== 1))) {\n if (page.previousPage.bodyWidgets[0].sectionFormat.restartPageNumbering) {\n this.isRestartNumbering = true;\n }\n page.currentPageNum = page.previousPage.currentPageNum + 1;\n }\n else {\n page.currentPageNum = page.index + 1;\n }\n return this.getFieldText(fieldPattern, page.currentPageNum);\n case 'numpages':\n return this.getFieldText(fieldPattern, page.documentHelper.pages.length);\n case 'sectionpages':\n var currentSectionIndex = page.sectionIndex;\n var currentPageCount = 0;\n for (var i = 0; i < page.documentHelper.pages.length; i++) {\n if (page.documentHelper.pages[i].sectionIndex === currentSectionIndex) {\n currentPageCount++;\n }\n else if (currentPageCount !== 0) {\n break;\n }\n }\n return this.getFieldText(fieldPattern, currentPageCount);\n default:\n break;\n }\n }\n return '';\n };\n DocumentHelper.prototype.getFieldText = function (pattern, value) {\n switch (pattern) {\n case 'ALPHABETIC':\n return this.layout.getAsLetter(value).toUpperCase();\n case 'alphabetic':\n return this.layout.getAsLetter(value).toLowerCase();\n case 'roman':\n return this.layout.getAsRoman(value).toLowerCase();\n case 'ROMAN':\n return this.layout.getAsRoman(value).toUpperCase();\n case 'RomanUpper':\n return this.layout.getAsRoman(value).toUpperCase();\n case 'RomanLower':\n return this.layout.getAsRoman(value).toLowerCase();\n case 'LetterUpper':\n return this.layout.getAsLetter(value).toUpperCase();\n case 'LetterLower':\n return this.layout.getAsLetter(value).toLowerCase();\n default:\n return value.toString();\n }\n };\n DocumentHelper.prototype.isEmptyShape = function (shape) {\n var isEmpty = true;\n if (shape.element instanceof ImageElementBox) {\n return isEmpty;\n }\n var textFrame = shape.element.textFrame;\n if (textFrame.childWidgets.length === 0) {\n return isEmpty;\n }\n else {\n return false;\n }\n };\n /**\n * Destroys the internal objects maintained for control.\n *\n * @returns {void}\n */\n DocumentHelper.prototype.destroy = function () {\n if (!isNullOrUndefined(this.owner)) {\n this.unWireEvent();\n }\n if (this.styles) {\n this.styles.destroy();\n this.styles = undefined;\n }\n if (this.stylesMap) {\n this.stylesMap.destroy();\n this.stylesMap = undefined;\n }\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (this.themeFontLanguage) {\n this.themeFontLanguage.destroy();\n this.themeFontLanguage = undefined;\n }\n if (this.paragraphFormat) {\n this.paragraphFormat.destroy();\n this.paragraphFormat = undefined;\n }\n if (this.pages && this.pages.length > 0) {\n for (var i = 0; i < this.pages.length; i++) {\n var page = this.pages[i];\n page.componentDestroy();\n }\n this.pages = [];\n }\n this.pages = undefined;\n if (this.lists && this.lists.length > 0) {\n for (var i = 0; i < this.lists.length; i++) {\n var list = this.lists[i];\n list.destroy();\n }\n this.lists = [];\n }\n this.lists = undefined;\n if (this.formFillPopup) {\n this.formFillPopup.destroy();\n this.formFillPopup = undefined;\n }\n if (this.contentDropDown) {\n this.contentDropDown.destroy();\n this.contentDropDown = undefined;\n }\n this.L10n = undefined;\n this.currentPage = undefined;\n this.selectionStartPageIn = undefined;\n this.selectionEndPageIn = undefined;\n this.fieldStacks = [];\n this.fieldStacks = undefined;\n this.splittedCellWidgets = [];\n this.splittedCellWidgets = undefined;\n this.fields = [];\n this.fields = undefined;\n this.abstractLists = [];\n this.abstractLists = undefined;\n if (!isNullOrUndefined(this.owner)) {\n this.renderedLists.destroy();\n }\n this.renderedLists = undefined;\n if (!isNullOrUndefined(this.owner)) {\n this.authors.destroy();\n }\n this.authors = undefined;\n if (!isNullOrUndefined(this.owner)) {\n this.revisionsInternal.destroy();\n }\n this.revisionsInternal = undefined;\n if (!isNullOrUndefined(this.owner)) {\n this.preDefinedStyles.destroy();\n }\n this.preDefinedStyles = undefined;\n if (!isNullOrUndefined(this.owner)) {\n this.bookmarks.destroy();\n }\n this.bookmarks = undefined;\n if (!isNullOrUndefined(this.owner)) {\n this.editRanges.destroy();\n }\n this.editRanges = undefined;\n if (!isNullOrUndefined(this.owner)) {\n this.customXmlData.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.images.destroy();\n }\n if (!isNullOrUndefined(this.owner)) {\n this.fontSubstitutionTable.destroy();\n }\n this.fontSubstitutionTable = undefined;\n this.customXmlData = undefined;\n this.images = undefined;\n this.blockToShift = undefined;\n this.cachedPages = [];\n this.cachedPages = undefined;\n if (this.comments && this.comments.length > 0) {\n for (var i = 0; i < this.comments.length; i++) {\n var comment = this.comments[i];\n comment.destroy();\n }\n this.comments = [];\n }\n this.comments = undefined;\n this.compositionEnd = undefined;\n this.compositionStart = undefined;\n this.compositionUpdated = undefined;\n this.contentControlCollection = [];\n this.contentControlCollection = undefined;\n this.renderedLevelOverrides = [];\n this.renderedLevelOverrides = undefined;\n this.headersFooters = [];\n this.headersFooters = undefined;\n this.listParagraphs = [];\n this.listParagraphs = undefined;\n this.formFields = [];\n this.formFields = undefined;\n this.fieldCollection = [];\n this.fieldCollection = undefined;\n this.userCollection = [];\n this.userCollection = undefined;\n if (this.footnotes) {\n this.footnotes.componentDestroy();\n this.footnotes = undefined;\n }\n if (this.endnotes) {\n this.endnotes.componentDestroy();\n this.endnotes = undefined;\n }\n if (this.zoomModule) {\n this.zoomModule.destroy();\n this.zoomModule = undefined;\n }\n this.footnoteCollection = [];\n this.footnoteCollection = undefined;\n this.endnoteCollection = [];\n this.endnoteCollection = undefined;\n if (this.restrictEditingPane) {\n this.restrictEditingPane.destroy();\n this.restrictEditingPane = undefined;\n }\n if (this.layout) {\n this.layout.destroy();\n }\n this.layout = undefined;\n if (!isNullOrUndefined(this.render)) {\n this.render.destroy();\n }\n this.render = undefined;\n if (this.dialogInternal) {\n this.dialogInternal.destroy();\n }\n this.dialogInternal = undefined;\n if (this.dialogInternal2) {\n this.dialogInternal2.destroy();\n this.dialogInternal2 = undefined;\n }\n if (this.dialogInternal3) {\n this.dialogInternal3.destroy();\n this.dialogInternal3 = undefined;\n }\n if (this.dialogTarget1 && this.dialogTarget1.parentElement) {\n this.dialogTarget1.parentElement.removeChild(this.dialogTarget1);\n }\n this.dialogTarget1 = undefined;\n if (this.dialogTarget2 && this.dialogTarget2.parentElement) {\n this.dialogTarget2.parentElement.removeChild(this.dialogTarget2);\n }\n this.dialogTarget2 = undefined;\n if (this.dialogTarget3 && this.dialogTarget3.parentElement) {\n this.dialogTarget3.parentElement.removeChild(this.dialogTarget3);\n }\n this.dialogTarget3 = undefined;\n if (!isNullOrUndefined(this.touchStart)) {\n this.touchStart.innerHTML = '';\n if (!isNullOrUndefined(this.touchStart.parentElement)) {\n this.touchStart.parentElement.removeChild(this.touchStart);\n }\n }\n this.touchStart = undefined;\n if (this.textHelper) {\n this.textHelper.destroy();\n }\n this.textHelper = undefined;\n if (!isNullOrUndefined(this.touchEnd)) {\n this.touchEnd.innerHTML = '';\n if (!isNullOrUndefined(this.touchEnd.parentElement)) {\n this.touchEnd.parentElement.removeChild(this.touchEnd);\n }\n }\n this.touchEnd = undefined;\n if (!isNullOrUndefined(this.containerCanvasIn)) {\n this.containerCanvasIn.innerHTML = '';\n if (!isNullOrUndefined(this.containerCanvasIn.parentElement)) {\n this.containerCanvasIn.parentElement.removeChild(this.containerCanvasIn);\n }\n }\n this.containerCanvasIn = undefined;\n if (!isNullOrUndefined(this.selectionCanvasIn)) {\n this.selectionCanvasIn.innerHTML = '';\n if (!isNullOrUndefined(this.selectionCanvasIn.parentElement)) {\n this.selectionCanvasIn.parentElement.removeChild(this.selectionCanvasIn);\n }\n }\n this.selectionCanvasIn = undefined;\n if (!isNullOrUndefined(this.editableDiv)) {\n this.editableDiv.innerHTML = '';\n if (!isNullOrUndefined(this.editableDiv.parentElement)) {\n this.editableDiv.parentElement.removeChild(this.editableDiv);\n }\n }\n this.editableDiv = undefined;\n if (!isNullOrUndefined(this.pageContainer)) {\n this.pageContainer.innerHTML = '';\n if (!isNullOrUndefined(this.pageContainer.parentElement)) {\n this.pageContainer.parentElement.removeChild(this.pageContainer);\n }\n }\n this.pageContainer = undefined;\n if (!isNullOrUndefined(this.viewerContainer)) {\n this.viewerContainer.innerHTML = '';\n if (!isNullOrUndefined(this.viewerContainer.parentElement)) {\n this.viewerContainer.parentElement.removeChild(this.viewerContainer);\n }\n }\n if (!isNullOrUndefined(this.iframe)) {\n this.iframe.innerHTML = '';\n if (!isNullOrUndefined(this.iframe.parentElement)) {\n this.iframe.parentElement.removeChild(this.iframe);\n }\n this.iframe = undefined;\n }\n if (this.optionsPaneContainer) {\n this.optionsPaneContainer.innerHTML = '';\n if (!isNullOrUndefined(this.optionsPaneContainer.parentElement)) {\n this.optionsPaneContainer.parentElement.removeChild(this.optionsPaneContainer);\n }\n }\n this.optionsPaneContainer = undefined;\n this.visibleBoundsIn = undefined;\n this.mouseDownOffset = undefined;\n this.viewerContainer = undefined;\n this.currentPage = undefined;\n this.selectionStartPageIn = undefined;\n this.selectionEndPageIn = undefined;\n this.currentSelectedCommentInternal = undefined;\n this.currentSelectedRevisionInternal = undefined;\n this.owner = undefined;\n this.heightInfoCollection = undefined;\n this.isRestartNumbering = false;\n };\n /**\n * Un-Wires events and methods\n *\n * @returns {void}\n */\n DocumentHelper.prototype.unWireEvent = function () {\n this.viewerContainer.removeEventListener('scroll', this.scrollHandler);\n this.viewerContainer.removeEventListener('mousedown', this.onMouseDownInternal);\n this.viewerContainer.removeEventListener('mousemove', this.onMouseMoveInternal);\n if (!Browser.isDevice) {\n this.editableDiv.removeEventListener('keypress', this.onKeyPressInternal);\n if (Browser.info.name === 'chrome') {\n this.editableDiv.removeEventListener('textInput', this.onTextInput);\n }\n }\n else {\n this.editableDiv.removeEventListener('input', this.onTextInputInternal);\n }\n this.editableDiv.removeEventListener('paste', this.onPaste);\n this.viewerContainer.removeEventListener('contextmenu', this.onContextMenu);\n this.editableDiv.removeEventListener('blur', this.onFocusOut);\n this.editableDiv.removeEventListener('keydown', this.onKeyDownInternal);\n this.editableDiv.removeEventListener('compositionstart', this.compositionStart);\n this.editableDiv.removeEventListener('compositionupdate', this.compositionUpdated);\n this.editableDiv.removeEventListener('compositionend', this.compositionEnd);\n this.viewerContainer.removeEventListener('mouseup', this.onMouseUpInternal);\n if (!isNullOrUndefined(this.iframe)) {\n this.iframe.removeEventListener('load', this.onIframeLoad);\n }\n this.viewerContainer.removeEventListener('dblclick', this.onDoubleTap);\n window.removeEventListener('resize', this.onWindowResize);\n window.removeEventListener('keyup', this.onKeyUpInternal);\n window.removeEventListener('mouseup', this.onImageResizer);\n window.removeEventListener('touchend', this.onImageResizer);\n if (navigator !== undefined && navigator.userAgent.match('Firefox')) {\n this.viewerContainer.removeEventListener('DOMMouseScroll', this.zoomModule.onMouseWheelInternal);\n }\n this.viewerContainer.removeEventListener('mousewheel', this.zoomModule.onMouseWheelInternal);\n };\n DocumentHelper.prototype.updateCursor = function (event) {\n var hyperlinkField = undefined;\n var footnoteElement = undefined;\n var div = this.viewerContainer;\n var point = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.owner.viewer.findFocusedPage(point, true);\n var widget = this.getLineWidget(touchPoint);\n var widgetInfo;\n var left;\n var top;\n var editor = !this.owner.isReadOnlyMode ? this.owner.editorModule : undefined;\n var isRowResize = editor ? editor.tableResize.isInRowResizerArea(touchPoint) : false;\n var isCellResize = editor ? editor.tableResize.isInCellResizerArea(touchPoint) : false;\n var floatItemInfo = this.selection.checkAllFloatingElements(widget, touchPoint);\n var resizePosition = '';\n if (this.owner.enableImageResizerMode) {\n var resizeObj = this.owner.imageResizerModule.getImagePoint(touchPoint);\n this.owner.imageResizerModule.selectedResizeElement = resizeObj.selectedElement;\n resizePosition = resizeObj.resizePosition;\n }\n var lineLeft = 0;\n var formField = undefined;\n var referenceField = undefined;\n var isInInline = this.checkPointIsInLine(widget, touchPoint);\n if (!isNullOrUndefined(widget)) {\n lineLeft = this.selection.getLineStartLeft(widget);\n hyperlinkField = this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint);\n if (isNullOrUndefined(hyperlinkField)) {\n formField = this.selection.getHyperLinkFieldInCurrentSelection(widget, touchPoint, true);\n }\n if (!isNullOrUndefined(hyperlinkField)) {\n var code = this.selection.getFieldCode(hyperlinkField);\n if (code.toLowerCase().indexOf('ref ') === 0 && !code.match('\\\\h')) {\n hyperlinkField = undefined;\n }\n }\n widgetInfo = this.selection.updateTextPositionIn(widget, undefined, 0, touchPoint, true);\n left = this.selection.getLeft(widget);\n top = this.selection.getTop(widget);\n if (isNullOrUndefined(hyperlinkField) && !isNullOrUndefined(formField) && this.isDocumentProtected &&\n this.protectionType === 'FormFieldsOnly' && !this.isFormFilling) {\n this.selection.setHyperlinkContentToToolTip(formField, widget, touchPoint.x, true);\n }\n else {\n this.selection.setHyperlinkContentToToolTip(hyperlinkField, widget, touchPoint.x, false);\n }\n if (formField) {\n var isInlineFormFillMode = (formField.formFieldData instanceof TextFormField) && formField.formFieldData.type === 'Text';\n if (this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline' && isInlineFormFillMode) {\n //Update text cursor in text form field.\n formField = undefined;\n }\n }\n if (this.owner.enableLockAndEdit) {\n var isLocked = false;\n var block = widget.paragraph;\n if (block.isInsideTable) {\n block = this.layout.getParentTable(block);\n }\n if (block.locked && block.lockedBy !== this.owner.currentUser) {\n isLocked = true;\n }\n var sectionFormat = widget.paragraph.bodyWidget.sectionFormat;\n var pageWidth = sectionFormat.pageWidth - sectionFormat.rightMargin - sectionFormat.leftMargin;\n pageWidth = HelperMethods.convertPointToPixel(pageWidth) * this.zoomFactor;\n if (this.viewer instanceof WebLayoutViewer) {\n pageWidth = (this.visibleBounds.width - (this.viewer.padding.right * 5)) / this.zoomFactor;\n }\n if (isLocked && touchPoint.x >= lineLeft && touchPoint.x < lineLeft + pageWidth) {\n this.selection.setLockInfoTooptip(widget, touchPoint.x, block.lockedBy);\n }\n else {\n this.selection.setLockInfoTooptip(undefined, touchPoint.x, '');\n }\n }\n }\n if (!isNullOrUndefined(widget)) {\n if (isNullOrUndefined(footnoteElement) && this.owner.layoutType == 'Pages') {\n footnoteElement = this.selection.getFootNoteElementInCurrentSelection(widget, touchPoint);\n if (footnoteElement instanceof FootnoteElementBox) {\n this.selection.setFootnoteContentToToolTip(footnoteElement, widget, touchPoint.x);\n }\n }\n }\n var isCtrlkeyPressed = this.isIosDevice ? event.metaKey : event.ctrlKey;\n if ((!isNullOrUndefined(hyperlinkField) && (isCtrlkeyPressed &&\n this.owner.useCtrlClickToFollowHyperlink || !this.owner.useCtrlClickToFollowHyperlink)) || formField) {\n if (!isNullOrUndefined(formField)) {\n if (this.isFormFillProtectedMode) {\n div.style.cursor = 'default';\n }\n }\n else {\n div.style.cursor = 'pointer';\n }\n return;\n }\n else if (touchPoint.x >= lineLeft &&\n event.offsetX < (this.visibleBounds.width - (this.visibleBounds.width - this.viewerContainer.clientWidth)) &&\n event.offsetY < (this.visibleBounds.height - (this.visibleBounds.height - this.viewerContainer.clientHeight))) {\n if (this.selection.isEmpty) {\n div.style.cursor = 'text';\n }\n else {\n div.style.cursor = this.selection.checkCursorIsInSelection(widget, touchPoint) ? 'default' : 'text';\n }\n }\n else {\n div.style.cursor = 'default';\n }\n if (!isNullOrUndefined(resizePosition) && resizePosition !== '') {\n if (!this.owner.imageResizerModule.isShapeResize || this.owner.imageResizerModule.isShapeResize && resizePosition !== 'move') {\n div.style.cursor = resizePosition;\n }\n }\n else if (!isNullOrUndefined(widgetInfo) && widgetInfo.isImageSelected && left < touchPoint.x && top < touchPoint.y &&\n left + widget.width > touchPoint.x && top + widget.height > touchPoint.y) {\n div.style.cursor = 'move';\n }\n if (isRowResize) {\n div.style.cursor = 'row-resize';\n }\n else if (isCellResize) {\n div.style.cursor = 'col-resize';\n }\n if (floatItemInfo.isInShapeBorder && !isInInline) {\n div.style.cursor = 'all-scroll';\n }\n };\n /**\n * @private\n */\n DocumentHelper.prototype.updateDialogTabHeight = function (dialogElement, targetElement) {\n var header = dialogElement.getElementsByClassName('e-dlg-header-content')[0];\n var contentElement = dialogElement.getElementsByClassName('e-dlg-content')[0];\n var footer = dialogElement.getElementsByClassName('e-footer-content')[0];\n var contentStyle = getComputedStyle(contentElement);\n var dialogStyle = getComputedStyle(dialogElement);\n var paddingTop = parseInt(contentStyle.paddingTop, 10);\n var paddingBottom = parseInt(contentStyle.paddingBottom, 10);\n var paddingVertical = (isNaN(paddingTop) ? 0 : paddingTop) + (isNaN(paddingBottom) ? 0 : paddingBottom);\n var borderTop = parseInt(dialogStyle.borderTop, 10);\n var borderBottom = parseInt(dialogStyle.borderBottom, 10);\n var borderVertical = (isNaN(borderTop) ? 0 : borderTop) + (isNaN(borderBottom) ? 0 : borderBottom);\n var contentHeight = dialogElement.offsetHeight - (header.offsetHeight + footer.offsetHeight + paddingVertical + borderVertical);\n targetElement.style.height = contentHeight + 'px';\n var paddingLeft = parseInt(contentStyle.paddingLeft, 10);\n var paddingRight = parseInt(contentStyle.paddingRight, 10);\n var paddingHorizontal = (isNaN(paddingLeft) ? 0 : paddingLeft) + (isNaN(paddingRight) ? 0 : paddingRight);\n var borderLeft = parseInt(dialogStyle.borderLeft, 10);\n var borderRight = parseInt(dialogStyle.borderRight, 10);\n var borderHorizontal = (isNaN(borderLeft) ? 0 : borderLeft) + (isNaN(borderRight) ? 0 : borderRight);\n var contentWidth = dialogElement.offsetWidth - (paddingHorizontal + borderHorizontal);\n return contentWidth;\n };\n /**\n *\n * @private\n */\n DocumentHelper.prototype.canRenderBorder = function (paragraph) {\n var skipTopBorder = false;\n var skipBottomBorder = false;\n var isSamePreviousBorder;\n var isSameNextBorder;\n var isSameTopBorder;\n var isSameBottomBorder;\n var isSameLeftBorder;\n var isSameRightBorder;\n var previousBlock = paragraph.previousRenderedWidget;\n var nextBlock = paragraph.nextRenderedWidget;\n var paragraphX = this.getParagraphLeftPosition(paragraph);\n var previousBlockX = 0;\n var nextBlockX = 0;\n if (!isNullOrUndefined(previousBlock) && previousBlock instanceof ParagraphWidget) {\n previousBlockX = this.getParagraphLeftPosition(previousBlock);\n }\n if (!isNullOrUndefined(nextBlock) && nextBlock instanceof ParagraphWidget) {\n nextBlockX = this.getParagraphLeftPosition(nextBlock);\n }\n if (!isNullOrUndefined(previousBlock) && previousBlock instanceof ParagraphWidget && paragraphX === previousBlockX) {\n isSameTopBorder = this.checkEqualBorder(paragraph.paragraphFormat.borders.top, previousBlock.paragraphFormat.borders.top);\n isSameBottomBorder = this.checkEqualBorder(paragraph.paragraphFormat.borders.bottom, previousBlock.paragraphFormat.borders.bottom);\n isSameLeftBorder = this.checkEqualBorder(paragraph.paragraphFormat.borders.left, previousBlock.paragraphFormat.borders.left);\n isSameRightBorder = this.checkEqualBorder(paragraph.paragraphFormat.borders.right, previousBlock.paragraphFormat.borders.right);\n if (isSameTopBorder && isSameBottomBorder && isSameLeftBorder && isSameRightBorder\n && !isNullOrUndefined(previousBlock.paragraphFormat.borders.horizontal) && previousBlock.paragraphFormat.borders.horizontal.lineStyle === 'None') {\n skipTopBorder = true;\n }\n }\n if (!isNullOrUndefined(nextBlock) && nextBlock instanceof ParagraphWidget && (paragraphX === nextBlockX || (this.owner.documentHelper.layout.isInitialLoad && this.skipBottomBorder(paragraph, nextBlock)))) {\n isSameTopBorder = this.checkEqualBorder(paragraph.paragraphFormat.borders.top, nextBlock.paragraphFormat.borders.top);\n isSameBottomBorder = this.checkEqualBorder(paragraph.paragraphFormat.borders.bottom, nextBlock.paragraphFormat.borders.bottom);\n isSameLeftBorder = this.checkEqualBorder(paragraph.paragraphFormat.borders.left, nextBlock.paragraphFormat.borders.left);\n isSameRightBorder = this.checkEqualBorder(paragraph.paragraphFormat.borders.right, nextBlock.paragraphFormat.borders.right);\n if (isSameBottomBorder && isSameTopBorder && isSameLeftBorder && isSameRightBorder) {\n skipBottomBorder = true;\n }\n }\n return {\n 'skipTopBorder': skipTopBorder,\n 'skipBottomBorder': skipBottomBorder\n };\n };\n DocumentHelper.prototype.checkEqualBorder = function (source, dest) {\n if (!isNullOrUndefined(source) && !isNullOrUndefined(dest)) {\n return source.isEqualFormat(dest);\n }\n else {\n if (isNullOrUndefined(source) && isNullOrUndefined(dest)) {\n return true;\n }\n else {\n return false;\n }\n }\n };\n /**\n * @private\n */\n DocumentHelper.prototype.getParagraphLeftPosition = function (paragraphWidget) {\n var hangingIndent = 0;\n var startX = 0;\n if (paragraphWidget.paragraphFormat.firstLineIndent < 0) {\n hangingIndent = HelperMethods.convertPointToPixel(Math.abs(paragraphWidget.paragraphFormat.firstLineIndent));\n hangingIndent = parseFloat(hangingIndent.toFixed(5));\n }\n if (paragraphWidget.isEmpty() && ((paragraphWidget.paragraphFormat.textAlignment !== 'Left' && paragraphWidget.paragraphFormat.textAlignment !== 'Justify')\n || (paragraphWidget.paragraphFormat.textAlignment === 'Justify' && paragraphWidget.paragraphFormat.bidi))) {\n startX = paragraphWidget.clientX > hangingIndent ? paragraphWidget.clientX - hangingIndent : paragraphWidget.clientX;\n return startX;\n }\n else {\n startX = paragraphWidget.x > hangingIndent ? paragraphWidget.x - hangingIndent : paragraphWidget.x;\n return startX;\n }\n };\n /**\n * @private\n */\n DocumentHelper.prototype.skipBottomBorder = function (paragraph, nextWidget) {\n var currentIndent = 0;\n var previousIndent = 0;\n if (paragraph.paragraphFormat.leftIndent === nextWidget.paragraphFormat.leftIndent) {\n return true;\n }\n else {\n currentIndent = paragraph.paragraphFormat.firstLineIndent < 0 ? Math.abs(paragraph.paragraphFormat.firstLineIndent) : 0;\n previousIndent = nextWidget.paragraphFormat.firstLineIndent < 0 ? Math.abs(nextWidget.paragraphFormat.firstLineIndent) : 0;\n currentIndent = paragraph.paragraphFormat.leftIndent > currentIndent ? paragraph.paragraphFormat.leftIndent - currentIndent : 0;\n previousIndent = nextWidget.paragraphFormat.leftIndent > previousIndent ? nextWidget.paragraphFormat.leftIndent - previousIndent : 0;\n if (currentIndent === previousIndent) {\n return true;\n }\n else {\n return false;\n }\n }\n };\n /**\n * @private\n */\n DocumentHelper.prototype.isPageInVisibleBound = function (page, pageTop) {\n var height = this.visibleBounds.height;\n var vertical = this.viewerContainer.scrollTop;\n var pageH = page.boundingRectangle.height * this.zoomFactor;\n var isTopFit = pageTop >= vertical && pageTop <= vertical + height;\n var isBottomFit = pageTop + pageH >= vertical && pageTop + pageH <= vertical + height;\n var isMiddleFit = pageTop <= vertical && pageTop + pageH >= vertical + height;\n return isTopFit || isBottomFit || isMiddleFit;\n };\n /**\n * Get first paragraph in cell\n *\n * @private\n * @returns {ParagraphWidget}\n */\n DocumentHelper.prototype.getFirstParagraphInCell = function (cell) {\n var firstBlock = cell.childWidgets[0];\n if (firstBlock instanceof ParagraphWidget) {\n return firstBlock;\n }\n else {\n return this.getFirstParagraphInFirstCell(firstBlock);\n }\n };\n /**\n * Get first paragraph in first cell\n *\n * @private\n * @returns {TableWidget}\n */\n DocumentHelper.prototype.getFirstParagraphInFirstCell = function (table) {\n if (!isNullOrUndefined(table.childWidgets) && table.childWidgets.length > 0) {\n var firstRow = table.childWidgets[0];\n var cell = firstRow.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in last cell\n *\n * @private\n * @returns {ParagraphWidget}\n */\n DocumentHelper.prototype.getLastParagraphInLastCell = function (table) {\n if (!isNullOrUndefined(table.childWidgets) && table.childWidgets.length > 0) {\n var lastrow = table.lastChild;\n var lastcell = lastrow.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get first paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n DocumentHelper.prototype.getFirstParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getFirstParagraphInFirstCell(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n DocumentHelper.prototype.getLastParagraphBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else if (block instanceof TableWidget) {\n return this.getLastParagraphInLastCell(block);\n }\n return undefined;\n };\n /**\n * Get last paragraph in first row\n *\n * @private\n * @returns {ParagraphWidget}\n */\n DocumentHelper.prototype.getLastParagraphInFirstRow = function (table) {\n if (table.childWidgets.length > 0) {\n var row = table.firstChild;\n var lastcell = row.lastChild;\n var lastBlock = lastcell.lastChild;\n return this.getLastParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Get first paragraph in last row\n *\n * @private\n */\n DocumentHelper.prototype.getFirstParagraphInLastRow = function (table) {\n if (table.childWidgets.length > 0) {\n var lastRow = table.childWidgets[table.childWidgets.length - 1];\n var lastCell = lastRow.childWidgets[0];\n var lastBlock = lastCell.childWidgets[0];\n return this.getFirstParagraphBlock(lastBlock);\n }\n return undefined;\n };\n /**\n * Add the given WStyle Object ot stylesMap Dictionary\n *\n * @private\n */\n /* eslint-disable */\n DocumentHelper.prototype.addToStylesMap = function (style) {\n var returnStyle = {};\n var returnStyleObject = {};\n var paraIcon = 'e-list-icon e-de-listview-icon e-de-e-paragraph-style-mark e-icons';\n var charIcon = 'e-list-icon e-de-listview-icon e-de-e-character-style-mark e-icons';\n var linkedIcon = 'e-list-icon e-de-listview-icon e-de-e-linked-style-mark e-icons';\n // StyleName for the dropDownItem\n if (!isNullOrUndefined(style)) {\n var styleName = this.owner ? this.L10n.getConstant(style.name) : style.name;\n returnStyle.StyleName = (styleName === '') ? style.name : styleName;\n if (style.type == \"Paragraph\") {\n returnStyleObject.paragraphFormat = {};\n HelperMethods.writeParagraphFormat(returnStyleObject.paragraphFormat, true, style.paragraphFormat);\n }\n returnStyleObject.characterFormat = {};\n HelperMethods.writeCharacterFormat(returnStyleObject.characterFormat, true, style.characterFormat);\n // CSS Style for dropDownItem\n returnStyle.Style = this.parseStyle(JSON.stringify(returnStyleObject));\n // Setting type for segregating and adding iconcss\n if (!isNullOrUndefined(style.type)) {\n returnStyle.type = style.type;\n if (returnStyle.type == \"Paragraph\" && !isNullOrUndefined(style.link)) {\n returnStyle.type = \"Linked\";\n }\n }\n // Adding IconCss to the dropDownItem\n if (returnStyle.type == \"Paragraph\") {\n returnStyle.IconClass = paraIcon;\n }\n else if (returnStyle.type == \"Character\") {\n returnStyle.IconClass = charIcon;\n }\n else {\n returnStyle.IconClass = linkedIcon;\n }\n if (this.stylesMap.get(returnStyle.type)) {\n this.stylesMap.get(returnStyle.type).push(returnStyle);\n }\n else {\n this.stylesMap.add(returnStyle.type, [returnStyle]);\n }\n }\n };\n DocumentHelper.prototype.parseStyle = function (style) {\n var domStyle = '';\n var styleObj = JSON.parse(style);\n var textDecoration = '';\n if (!isNullOrUndefined(styleObj.characterFormat.baselineAlignment) && styleObj.characterFormat.baselineAlignment !== 'Normal') {\n var vAlign = '';\n switch (styleObj.characterFormat.baselineAlignment) {\n case 'Superscript':\n vAlign = 'super';\n break;\n case 'Subscript':\n vAlign = 'sub';\n break;\n }\n if (vAlign.length > 1) {\n domStyle += 'vertical-align:' + vAlign + ';';\n }\n }\n if (!isNullOrUndefined(styleObj.characterFormat.underline) && styleObj.characterFormat.underline !== 'None') {\n textDecoration += 'underline ';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.strikethrough) && styleObj.characterFormat.strikethrough !== 'None') {\n textDecoration += 'line-through ';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.fontSize)) {\n domStyle += 'font-size:' + styleObj.characterFormat.fontSize + 'px;';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.fontFamily)) {\n domStyle += 'font-family:' + styleObj.characterFormat.fontFamily + ';';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.bold) && styleObj.characterFormat.bold) {\n domStyle += 'font-weight:bold;';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.italic) && styleObj.characterFormat.italic) {\n domStyle += 'font-style:italic;';\n }\n // if (!isNullOrUndefined(styleObj.characterFormat.fontColor)) {\n // domStyle += 'color: ' + styleObj.characterFormat.fontColor + ';';\n // }\n if (textDecoration.length > 1) {\n domStyle += 'text-decoration:' + textDecoration + ';';\n }\n return domStyle;\n };\n return DocumentHelper;\n}());\nexport { DocumentHelper };\n/**\n * @private\n */\nvar LayoutViewer = /** @class */ (function () {\n function LayoutViewer(owner) {\n /**\n * @private\n */\n this.visiblePages = [];\n /**\n * @private\n */\n this.padding = new Padding(10, 10, 30, 10);\n /**\n * @private\n */\n this.textWrap = true;\n /**\n * @private\n */\n this.pageFitTypeIn = 'None';\n /**\n * @private\n */\n this.containerTop = 0;\n /**\n * @private\n */\n this.containerWidth = 0;\n /**\n * @private\n */\n this.containerLeft = 0;\n this.owner = owner;\n this.columnLayoutArea = new ColumnLayout(this);\n }\n Object.defineProperty(LayoutViewer.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LayoutViewer.prototype, \"pageFitType\", {\n /**\n * Gets or sets page fit type.\n * @private\n */\n get: function () {\n return this.pageFitTypeIn;\n },\n set: function (value) {\n this.pageFitTypeIn = value;\n this.onPageFitTypeChanged(this.pageFitTypeIn);\n },\n enumerable: true,\n configurable: true\n });\n LayoutViewer.prototype.updateClientArea = function (bodyWidget, page, isReLayout) {\n var sectionFormat;\n if (!isNullOrUndefined(bodyWidget)) {\n sectionFormat = bodyWidget.sectionFormat;\n this.columnLayoutArea.setColumns(sectionFormat);\n }\n var width = 0;\n var height = 0;\n if (this instanceof WebLayoutViewer) {\n var top_2 = 0;\n width = (this.documentHelper.visibleBounds.width - (this.padding.right * 4) - (this.padding.left * 2)) / this.documentHelper.zoomFactor;\n if (width < 0) {\n width = 0;\n }\n height = Number.POSITIVE_INFINITY;\n this.clientArea = new Rect(this.padding.left / this.documentHelper.zoomFactor, top_2, width, height);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n }\n else {\n var top_3 = 0;\n var headerDistance = 48;\n var footerDistance = 48;\n var pageHeight = HelperMethods.convertPointToPixel(sectionFormat.pageHeight);\n var bottomMargin = HelperMethods.convertPointToPixel(sectionFormat.bottomMargin);\n if (!isNullOrUndefined(sectionFormat)) {\n top_3 = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n }\n var isEmptyWidget = false;\n if (!isNullOrUndefined(page.headerWidget)) {\n isEmptyWidget = page.headerWidget.isEmpty;\n if (top_3 >= 0) {\n if (!isEmptyWidget || isEmptyWidget && this.owner.enableHeaderAndFooter) {\n top_3 = Math.min(Math.max(headerDistance + page.headerWidget.height, top_3), pageHeight / 100 * 40);\n }\n }\n else {\n top_3 = Math.abs(top_3);\n }\n }\n var bottom = 0.667 + bottomMargin;\n if (!isNullOrUndefined(page.footerWidget)) {\n isEmptyWidget = page.footerWidget.isEmpty;\n var footnoteHeight = !isNullOrUndefined(page.footnoteWidget) ? page.footnoteWidget.height : 0;\n footnoteHeight = Math.min(footnoteHeight, ((pageHeight - top_3 - bottom) / 100 * 90));\n if (bottom >= 0) {\n if (!isEmptyWidget || isEmptyWidget && this.owner.enableHeaderAndFooter) {\n bottom = 0.667 + Math.min(pageHeight / 100 * 40, Math.max(footerDistance + page.footerWidget.height, bottomMargin));\n }\n }\n else {\n bottom = Math.abs(bottom);\n }\n bottom += footnoteHeight;\n }\n if (!isNullOrUndefined(sectionFormat)) {\n width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n height = pageHeight - top_3 - bottom;\n }\n if (width < 0) {\n width = 0;\n }\n var clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), top_3, width, pageHeight - top_3 - bottom);\n if (page.footnoteWidget && isReLayout && !this.documentHelper.owner.editorModule.isFootNote) {\n if (page.footnoteWidget.y !== 0 && this.clientArea.y + this.clientArea.height > page.footnoteWidget.y) {\n var sub = (this.clientArea.y + this.clientArea.height - page.footnoteWidget.y);\n this.clientArea.height -= sub / 2;\n }\n }\n if (bodyWidget.page.bodyWidgets[0].columnIndex !== 0) {\n this.owner.editorModule.updateColumnIndex(bodyWidget, false);\n }\n this.setClientArea(bodyWidget, clientArea);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n }\n };\n LayoutViewer.prototype.setClientArea = function (bodyWidget, clientArea) {\n this.clientArea = this.columnLayoutArea.getColumnBoundsByBodyWidget(bodyWidget, clientArea);\n bodyWidget.x = this.clientArea.x;\n bodyWidget.width = this.clientArea.width;\n };\n LayoutViewer.prototype.updateClientAreaTopOrLeft = function (tableWidget, beforeLayout) {\n if (beforeLayout) {\n this.clientActiveArea.y = this.clientActiveArea.y + tableWidget.topBorderWidth;\n this.clientActiveArea.x = this.clientActiveArea.x + tableWidget.leftBorderWidth;\n }\n };\n LayoutViewer.prototype.updateClientAreaForTable = function (tableWidget) {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n };\n LayoutViewer.prototype.updateClientAreaForRow = function (row, beforeLayout) {\n var tableWidget = row.ownerTable;\n if (beforeLayout) {\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaForCell = function (cell, beforeLayout) {\n var rowWidget = cell.ownerRow;\n var cellWidget = cell;\n if (beforeLayout) {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x;\n this.clientActiveArea.y = cellWidget.y;\n this.clientActiveArea.width = this.clientArea.width = cellWidget.width > 0 ? cellWidget.width : 0;\n if (this instanceof PageLayoutViewer) {\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n else {\n this.clientActiveArea.x = this.clientArea.x = cellWidget.x + cellWidget.width + cellWidget.margin.right;\n if (rowWidget.x + rowWidget.width - this.clientArea.x < 0) {\n this.clientActiveArea.width = this.clientArea.width = 0;\n }\n else {\n this.clientActiveArea.width = this.clientArea.width = rowWidget.x + rowWidget.width - this.clientArea.x;\n }\n this.clientActiveArea.y = cellWidget.y - cellWidget.margin.top - HelperMethods.convertPointToPixel(cell.ownerTable.tableFormat.cellSpacing);\n if (!cell.ownerTable.isInsideTable) {\n this.clientActiveArea.height = this.clientArea.bottom - rowWidget.y > 0 ? this.clientArea.bottom - rowWidget.y : 0;\n if (!cell.ownerTable.wrapTextAround && this.documentHelper.layout.existFootnoteHeight > 0) {\n var updateHeight = this.clientActiveArea.height - this.documentHelper.layout.existFootnoteHeight;\n this.clientActiveArea.height = updateHeight < 0 ? 0 : updateHeight;\n }\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaForTextBoxShape = function (textBox, beforeLayout, shiftNextWidget) {\n if (textBox.textWrappingStyle === 'Inline' && !shiftNextWidget) {\n textBox.y = this.clientActiveArea.y;\n textBox.x = this.clientActiveArea.x;\n }\n if (beforeLayout) {\n var marginLeft = HelperMethods.convertPointToPixel(textBox.textFrame.marginLeft);\n var marginRight = HelperMethods.convertPointToPixel(textBox.textFrame.marginRight);\n var marginTop = HelperMethods.convertPointToPixel(textBox.textFrame.marginTop);\n var marginBottom = HelperMethods.convertPointToPixel(textBox.textFrame.marginBottom);\n var width = textBox.width;\n var height = Number.POSITIVE_INFINITY;\n this.clientArea = new Rect(textBox.x + marginLeft, textBox.y + marginTop, width - marginLeft - marginRight, height - marginTop - marginBottom);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n }\n };\n LayoutViewer.prototype.updateClientAreaByWidgetFootNote = function (widget) {\n this.clientArea.x = widget.x;\n this.clientArea.y = widget.y;\n this.clientActiveArea.x = widget.x;\n this.clientActiveArea.y = widget.y;\n };\n /**\n * @private\n */\n LayoutViewer.prototype.updateClientAreaForTextWrap = function (area) {\n this.clientActiveArea = new Rect(area.x, area.y, area.width, area.height);\n };\n LayoutViewer.prototype.updateBoundsBasedOnTextWrap = function (bottom) {\n var diff = bottom - this.clientActiveArea.y;\n this.clientActiveArea.y = bottom;\n this.clientActiveArea.height = this.clientActiveArea.height - diff;\n };\n LayoutViewer.prototype.updateBoundsBasedOnTextWrapTable = function (bottom) {\n var diff = bottom - this.clientArea.y;\n this.clientArea.y = bottom;\n this.clientArea.height = this.clientArea.height - diff;\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n LayoutViewer.prototype.updateClientAreaByWidget = function (widget) {\n this.clientArea.x = widget.x;\n this.clientArea.y = widget.y;\n this.clientActiveArea.x = widget.x;\n this.clientActiveArea.y = widget.y;\n };\n LayoutViewer.prototype.updateClientAreaLocation = function (widget, area) {\n widget.x = area.x;\n widget.y = area.y;\n widget.width = area.width;\n };\n LayoutViewer.prototype.updateClientAreaForBlock = function (block, beforeLayout, tableCollection, updateYPosition, updateXPosition) {\n var leftIndent = HelperMethods.convertPointToPixel(block.leftIndent);\n var rightIndent = HelperMethods.convertPointToPixel(block.rightIndent);\n var bidi = block.bidi;\n var width = 0;\n if (beforeLayout) {\n if (block instanceof TableWidget && tableCollection) {\n var tableWidget = tableCollection[0];\n if (block.bodyWidget.sectionFormat.columns.length <= 1) {\n this.clientActiveArea.x = this.clientArea.x = tableWidget.x;\n this.clientActiveArea.width = this.clientArea.width = tableWidget.width;\n }\n //Updates the location of last item.\n tableWidget = tableCollection[tableCollection.length - 1];\n tableWidget.x = this.clientActiveArea.x;\n tableWidget.y = this.clientActiveArea.y;\n }\n else {\n if (block instanceof TableWidget && !isNullOrUndefined(block.tableFormat)) {\n if (!block.isGridUpdated) {\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n var tableAlignment = this.tableAlignmentForBidi(block, bidi);\n if (tableAlignment !== 'Left') {\n var tableWidth = 0;\n // If the grid is calculated, we can direclty get the width from the grid.\n // Otherwise, calculate the width.\n tableWidth = HelperMethods.convertPointToPixel(block.tableHolder.getTotalWidth(0));\n tableWidth = tableWidth === 0 ? block.tableHolder.tableWidth === 0 ?\n block.getTableClientWidth(block.getOwnerWidth(false)) : block.tableHolder.tableWidth : tableWidth;\n // Fore resizing table, the tableholder table width taken for updated width. \n // Since, the columns will be cleared if we performed resizing.\n if (this.owner.editorModule && this.owner.editorModule.tableResize.currentResizingTable === block\n && this.owner.editorModule.tableResize.resizerPosition === 0) {\n tableWidth = HelperMethods.convertPointToPixel(block.tableHolder.tableWidth);\n }\n if (tableAlignment === 'Center') {\n if (!this.documentHelper.isRowOrCellResizing) {\n tableWidth = block.getTableCellWidth();\n }\n leftIndent = (this.clientArea.width - tableWidth) / 2;\n }\n else {\n leftIndent = this.clientArea.width - tableWidth;\n }\n if (bidi) {\n leftIndent = leftIndent - HelperMethods.convertPointToPixel(block.leftIndent);\n rightIndent = leftIndent;\n }\n if (!block.isInsideTable) {\n //leftIndent = (block.tableFormat.horizontalPositionAbs === 'Left') ? block.tableFormat.horizontalPosition : leftIndent;\n }\n this.documentHelper.tableLefts.push(leftIndent);\n }\n }\n width = this.clientArea.width - (leftIndent + HelperMethods.convertPointToPixel(block.rightIndent));\n var x = this.clientArea.x + (bidi ? rightIndent : leftIndent);\n width = width > 0 ? width : 0;\n this.clientActiveArea.x = this.clientArea.x = x;\n this.clientActiveArea.width = this.clientArea.width = width;\n if (updateYPosition) {\n this.updateParagraphYPositionBasedonTextWrap(block, new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height));\n }\n if (updateXPosition) {\n if (block instanceof ParagraphWidget) {\n this.updateParagraphXPositionBasedOnTextWrap(block);\n }\n else {\n this.updateTableXPositionBasedOnTextWrap(block);\n }\n }\n }\n }\n else {\n // Clears table left for table with right or center alignment.\n if (block instanceof TableWidget && !isNullOrUndefined(block.tableFormat)) {\n var tableAlignment = this.tableAlignmentForBidi(block, bidi);\n if (!block.isGridUpdated) {\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n if (tableAlignment !== 'Left' && this.documentHelper.tableLefts.length > 0) {\n leftIndent = this.documentHelper.tableLefts.pop();\n if (bidi) {\n rightIndent = leftIndent;\n }\n }\n }\n width = this.clientArea.width + leftIndent + HelperMethods.convertPointToPixel(block.rightIndent);\n var x = this.clientArea.x - (bidi ? rightIndent : leftIndent);\n width = width > 0 ? width : 0;\n this.clientActiveArea.x = this.clientArea.x = x;\n this.clientActiveArea.width = this.clientArea.width = width;\n }\n this.clientArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n this.clientActiveArea = new Rect(this.clientActiveArea.x, this.clientActiveArea.y, this.clientActiveArea.width, this.clientActiveArea.height);\n };\n LayoutViewer.prototype.updateParagraphYPositionBasedonTextWrap = function (block, rect) {\n var bodyWidget = block.bodyWidget;\n var clientLayoutArea = this.clientActiveArea;\n if (bodyWidget && bodyWidget.floatingElements.length > 0 && block instanceof ParagraphWidget && !(block.containerWidget instanceof TextFrame)\n && !block.isInsideTable && !(block.containerWidget instanceof FootNoteWidget)) {\n var isWord2013 = this.documentHelper.compatibilityMode === 'Word2013';\n var paragraph = block;\n var isEmptyPara = paragraph.isEmpty();\n var paragraphHeight = paragraph.height;\n if (paragraphHeight === 0) {\n paragraphHeight = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat).Height;\n }\n //Update Layout area based on text wrap\n if (((!paragraph.isInHeaderFooter || paragraph.isInsideTable)\n || isWord2013)) {\n var yposition = rect.y;\n // As per Microsoft Word behavior, need to update bottom position of first inline item to floating item bottom,\n // when first inline item of page intersects in-between two adjacent floating items parallel in vertical\n // for Word document lower than Microsoft Word 2013 version.\n // To do: Currently this behavior handled for bottom position update based on Y position,\n // need to handle this behavior for bottom position update based on X position in UpdateParagraphXPositionBasedOnTextWrap method.\n var isFirstItemBottomPositionUpdated = false;\n //Need to handle sorting floating items.\n // Sort based on Y position\n bodyWidget.floatingElements.sort(function (a, b) { return a.y - b.y; });\n // Sort based on X position\n bodyWidget.floatingElements.sort(function (a, b) { return a.x - b.x; });\n var previousItem = paragraph.previousRenderedWidget;\n if (previousItem && (previousItem instanceof TableWidget) && previousItem.wrapTextAround\n && !isEmptyPara && !paragraph.isContainsShapeAlone() && isWord2013 && rect.y < previousItem.y) {\n rect.y = previousItem.y;\n }\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n var floatingItem = bodyWidget.floatingElements[i];\n var isInsideHeaderFooter = false;\n if (floatingItem instanceof ShapeBase) {\n isInsideHeaderFooter = floatingItem.paragraph.isInHeaderFooter;\n }\n else {\n isInsideHeaderFooter = floatingItem.bodyWidget instanceof HeaderFooterWidget ? true : false;\n }\n if (paragraph.isInsideTable) {\n if (floatingItem instanceof TableWidget && !floatingItem.isInsideTable) {\n continue;\n }\n }\n var textWrappingBounds = this.getTextWrappingBound(floatingItem);\n var textWrappingStyle = floatingItem instanceof TableWidget ? 'Square' : floatingItem.textWrappingStyle;\n var textWrappingType = floatingItem instanceof TableWidget ? 'Both' : floatingItem.textWrappingType;\n var minimumWidthRequired = 24;\n if (!(clientLayoutArea.x > (textWrappingBounds.right + minimumWidthRequired) || clientLayoutArea.right < textWrappingBounds.x - minimumWidthRequired)) {\n if ((((rect.y + (floatingItem instanceof TableWidget && !isEmptyPara && paragraph.floatingElements.length === 0 ? paragraphHeight : paragraph.height) > textWrappingBounds.y\n || isFirstItemBottomPositionUpdated) && rect.y < (textWrappingBounds.bottom))) && textWrappingStyle !== 'Inline'\n && textWrappingStyle !== 'TopAndBottom' && textWrappingStyle !== 'InFrontOfText'\n && textWrappingStyle !== 'Behind') {\n var rightIndent = 0;\n var paragarphRightIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.rightIndent);\n var firstLineIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n firstLineIndent = ((!isEmptyPara && paragraph.childWidgets[0].isFirstLine()) && firstLineIndent > 0) ? firstLineIndent : 0;\n if (rect.x >= textWrappingBounds.x && textWrappingType !== 'Left') {\n rightIndent = paragarphRightIndent;\n }\n // Gets the value from right indent when it is negative, otherwise sets the value as zero.\n rightIndent = rightIndent < 0 ? rightIndent : 0;\n if (rect.x < textWrappingBounds.x && rect.x > textWrappingBounds.x && textWrappingType !== 'Left') {\n if (rect.right > textWrappingBounds.x) {\n rect.width = rect.width - (rect.right - textWrappingBounds.right);\n }\n if (rect.width < minimumWidthRequired) {\n //Skip to wrap the immediate paragraph of floating table based on corresponding floating table. \n if (isWord2013 || !((floatingItem instanceof TableWidget) && previousItem === floatingItem)) {\n this.updateBoundsBasedOnTextWrap(textWrappingBounds.bottom);\n rect = this.clientActiveArea;\n }\n if ((!isEmptyPara && paragraph.childWidgets[0].isFirstLine() || isEmptyPara) && isWord2013 ? true : !isInsideHeaderFooter) {\n paragraph.y = this.clientActiveArea.y;\n }\n }\n else {\n rect.x = textWrappingBounds.right;\n }\n }\n else if (rect.x >= textWrappingBounds.x && rect.x < textWrappingBounds.right) {\n rect.width = rect.width - (textWrappingBounds.right - rect.x) - rightIndent;\n //checks minimum width\n if (rect.width < minimumWidthRequired || isFirstItemBottomPositionUpdated) {\n rect.width = this.clientActiveArea.right - textWrappingBounds.right - rightIndent;\n var isPositionsUpdated = false;\n if (rect.width < minimumWidthRequired || isFirstItemBottomPositionUpdated) {\n // If left side of floating item has minimum width to layout the paragraph, then find the minimum bottom among the floating items to the left side of current floating item.\n // Then update the Y position to that bottom.\n if (this.clientActiveArea.x + minimumWidthRequired < textWrappingBounds.x) {\n var tempBounds = this.getIntersectingItemBounds(bodyWidget.floatingElements, floatingItem, yposition);\n if (!isNullOrUndefined(tempBounds) && tempBounds.bottom <= textWrappingBounds.bottom) {\n this.updateBoundsBasedOnTextWrap(tempBounds.bottom);\n rect = this.clientActiveArea;\n isPositionsUpdated = true;\n //When we update the client area to the bottom of floating item, we also need to updtae the X position. \n //To-Do: Some more X position updating cases also need to handle.\n paragraph.x = tempBounds.x;\n }\n }\n // Skip to wrap the immediate paragraph of floating table based on corresponding floating table.\n if ((isWord2013) && !isPositionsUpdated) {\n if (floatingItem instanceof TableWidget && previousItem === floatingItem) {\n this.updateBoundsBasedOnTextWrapTable(textWrappingBounds.bottom);\n }\n else {\n this.updateBoundsBasedOnTextWrap(textWrappingBounds.bottom);\n }\n rect = this.clientActiveArea;\n }\n if ((!isEmptyPara && paragraph.childWidgets[0].isFirstLine() || isEmptyPara) && isWord2013 ? true : !isInsideHeaderFooter) {\n paragraph.y = this.clientActiveArea.y;\n }\n }\n else {\n rect.x = textWrappingBounds.right;\n }\n }\n else {\n rect.x = textWrappingBounds.right;\n }\n }\n else if (textWrappingBounds.x > rect.x && rect.right > textWrappingBounds.x) {\n rect.width = textWrappingBounds.x - rect.x;\n //checks minimum width\n if (rect.width < minimumWidthRequired) {\n rect.width = this.clientActiveArea.right - textWrappingBounds.right - rightIndent;\n if (rect.width < minimumWidthRequired) {\n //Skip to wrap the immediate paragraph of floating table based on corresponding floating table. \n if (isWord2013 || !((floatingItem instanceof TableWidget) && previousItem === floatingItem)) {\n this.updateBoundsBasedOnTextWrap(textWrappingBounds.bottom);\n rect = this.clientActiveArea;\n }\n if ((!isEmptyPara && paragraph.childWidgets[0].isFirstLine() || isEmptyPara) && isWord2013 ? true : !isInsideHeaderFooter) {\n paragraph.y = this.clientActiveArea.y;\n }\n }\n else {\n rect.x = textWrappingBounds.right;\n }\n }\n }\n }\n else if ((bodyWidget.floatingElements.length > 0 && ((rect.y >= (textWrappingBounds.y) && rect.y < (textWrappingBounds.bottom))\n || ((rect.y + paragraphHeight >= textWrappingBounds.y) && (rect.y + paragraphHeight < (textWrappingBounds.bottom))))\n && textWrappingStyle === 'TopAndBottom')) {\n //Skip to wrap the immediate paragraph of floating table based on corresponding floating table. \n if (isWord2013 || !((floatingItem instanceof TableWidget) && previousItem === floatingItem)) {\n this.updateBoundsBasedOnTextWrap(textWrappingBounds.bottom);\n // Sets true to update bottom position of first inline item in page\n // when this item's bottom position already updated based on previous floating item.\n if (!isWord2013 && (!isEmptyPara && paragraph.childWidgets[0].isFirstLine() || isEmptyPara)) {\n isFirstItemBottomPositionUpdated = true;\n }\n }\n if ((!isEmptyPara && paragraph.childWidgets[0].isFirstLine() || isEmptyPara) && isWord2013 ? true : !isInsideHeaderFooter) {\n paragraph.y = this.clientActiveArea.y;\n }\n }\n }\n // //Reset the floating item bounds to original position\n // ResetXPositionForRTLLayouting(i, ref textWrappingBounds, floatingItemXPosition);\n }\n //Update the wrapping difference value.\n // if (isFirstItem && yValue < rect.Y) {\n // (m_lcOperator as Layouter).WrappingDifference = (float)(rect.Y - (m_lcOperator as Layouter).PageTopMargin);\n // }\n }\n }\n };\n LayoutViewer.prototype.updateParagraphXPositionBasedOnTextWrap = function (block) {\n // #region textwrap\n var yValue = 0;\n var isFirstItem = false;\n var isWord2013 = this.documentHelper.compatibilityMode === 'Word2013';\n var bodyWidget = block.containerWidget;\n var clientLayoutArea = this.clientActiveArea;\n // if (!(m_lcOperator as Layouter).IsLayoutingHeaderFooter &&\n // (m_lcOperator as Layouter).WrappingDifference === Number.MIN_VALUE &&\n // Math.round(yPosition, 2) === Math.round((m_lcOperator as Layouter).PageTopMargin, 2)) {\n // yValue = yPosition;\n // isFirstItem = true;\n // }\n if (this instanceof PageLayoutViewer && !isNullOrUndefined(bodyWidget) && block instanceof ParagraphWidget && !isNullOrUndefined(bodyWidget.page) && !isNullOrUndefined(bodyWidget.page.headerWidget)) {\n var floatingItems = bodyWidget.page.headerWidget.floatingElements;\n if (floatingItems.length > 0 &&\n (!block.isInHeaderFooter || block.isInsideTable ||\n isWord2013) &&\n !(block.containerWidget instanceof FootNoteWidget) && !(block.bodyWidget instanceof TextFrame)) {\n // const clientLayoutArea: RectangleF = (m_lcOperator as Layouter).ClientLayoutArea;\n // clientLayoutArea.X = xPosition;\n // clientLayoutArea.Y = yPosition;\n //let cellPadings: number = 0;\n var paragraph = block;\n //if (paragraph.isInsideTable) {\n //const cellLayoutInfo: CellLayoutInfo = ((paragraph.GetOwnerEntity() as WTableCell) as IWidget).LayoutInfo as CellLayoutInfo;\n //cellPadings = cellLayoutInfo.Paddings.Left + cellLayoutInfo.Paddings.Right;\n // }\n // let defMinWidth: number = minimumWidthRequired - cellPadings;\n // const size: SizeF = (paragraph as IWidget).LayoutInfo.Size;\n for (var i = 0; i < floatingItems.length; i++) {\n var floatingItem = floatingItems[i];\n // if (paragraph.IsInCell && floatingItems[i].allowOverlap &&\n // (paragraph.associatedCell.ownerRow.ownerTable.tableFormat.positioning.allowOverlap) {\n if (paragraph.isInsideTable) {\n if (floatingItem instanceof TableWidget && !floatingItem.isInsideTable) {\n continue;\n }\n }\n // }\n var textWrappingBounds = this.getTextWrappingBound(floatingItem);\n var textWrappingStyle = floatingItem instanceof TableWidget ? 'Square' : floatingItem.textWrappingStyle;\n var textWrappingType = floatingItem instanceof TableWidget ? 'Both' : floatingItem.textWrappingType;\n //let ownerBody: BodyWidget = undefined;\n //As per Microsoft Word behavior, when floating item and paragraph in cell means,\n //then, wrap the bounds for the items in same cell only. \n //Skip, if it is in different cell.\n // let ownerBody: BodyWidget = undefined\n // if (!this.isInSameTextBody(paragraph, floatingItem, ownerBody) &&\n // paragraph.isInsideTable && bodyWidget instanceof TableCellWidget) {\n // continue;\n // }\n // if (this.IsInFrame((m_lcOperator as Layouter).FloatingItems[i].FloatingEntity as WParagraph) &&\n // this.IsOwnerCellInFrame(paragraph)) {\n // continue;\n // }\n // if (paragraph.ParagraphFormat.Bidi &&\n // (this.IsInSameTextBody(paragraph, (m_lcOperator as Layouter).FloatingItems[i], ownerBody) &&\n // paragraph.IsInCell && ownerBody instanceof WTableCell)) {\n // this.ModifyXPositionForRTLLayouting(i, textWrappingBounds, (m_layoutArea as any).ClientArea);\n // } else if (paragraph.ParagraphFormat.Bidi) {\n // this.ModifyXPositionForRTLLayouting(i, textWrappingBounds, (m_lcOperator as Layouter).ClientLayoutArea);\n // }\n var minimumWidthRequired = 24;\n // if (textWrappingStyle === TextWrappingStyle.Tight || textWrappingStyle === TextWrappingStyle.Through) {\n // minimumWidthRequired = paragraph.Document.Settings.CompatibilityMode === CompatibilityMode.Word2013 ?\n // DEF_MIN_WIDTH_2013_TIGHTANDTHROW : DEF_MIN_WIDTH_TIGHTANDTHROW;\n // }\n // minimumWidthRequired -= cellPadings;\n // defMinWidth = minimumWidthRequired;\n // if (textWrappingStyle === TextWrappingStyle.Tight || textWrappingStyle === TextWrappingStyle.Through &&\n // (m_lcOperator as Layouter).FloatingItems[i].IsDoesNotDenotesRectangle) {\n // const temp: RectangleF = this.AdjustTightAndThroughBounds(\n // (m_lcOperator as Layouter).FloatingItems[i], clientLayoutArea, size.Height);\n // if (temp.X !== 0) {\n // textWrappingBounds = temp;\n // defMinWidth = size.Width;\n // }\n // }\n if (!paragraph.isInsideTable &&\n (!(clientLayoutArea.x > textWrappingBounds.right + minimumWidthRequired ||\n clientLayoutArea.right < textWrappingBounds.x - minimumWidthRequired))) {\n if (floatingItems.length > 0 &&\n (clientLayoutArea.y + paragraph.height > textWrappingBounds.y && clientLayoutArea.y < textWrappingBounds.bottom) &&\n textWrappingStyle !== \"Inline\" &&\n textWrappingStyle !== \"TopAndBottom\" &&\n textWrappingStyle !== \"InFrontOfText\" &&\n textWrappingStyle !== \"Behind\") {\n var rightIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.rightIndent);\n if (paragraph.paragraphFormat.textAlignment != \"Left\" && (clientLayoutArea.x < textWrappingBounds.x && clientLayoutArea.x + paragraph.width > textWrappingBounds.x)) {\n paragraph.x = clientLayoutArea.x;\n }\n else if (clientLayoutArea.x >= textWrappingBounds.x && clientLayoutArea.x < textWrappingBounds.right && !paragraph.paragraphFormat.bidi) {\n clientLayoutArea.width = clientLayoutArea.width - (textWrappingBounds.right - clientLayoutArea.x) - rightIndent;\n if (clientLayoutArea.width < minimumWidthRequired) {\n clientLayoutArea.width = this.clientActiveArea.right - textWrappingBounds.right - rightIndent;\n if (clientLayoutArea.width < minimumWidthRequired) {\n paragraph.x = clientLayoutArea.x;\n clientLayoutArea.width = clientLayoutArea.width;\n clientLayoutArea.height = textWrappingBounds.bottom - clientLayoutArea.x;\n clientLayoutArea.y = textWrappingBounds.bottom;\n }\n else {\n clientLayoutArea.x = textWrappingBounds.right;\n }\n }\n else if (this.documentHelper.compatibilityMode === \"Word2007\" ||\n clientLayoutArea.y <= textWrappingBounds.bottom) {\n // if (this.IsNeedToUpdateParagraphYPosition(clientLayoutArea.Y, textWrappingStyle,\n // paragraph, clientLayoutArea.Y + size.Height + paragraph.ParagraphFormat.AfterSpacing, textWrappingBounds.Bottom)) {\n // paragraph.x = clientLayoutArea.x;\n // clientLayoutArea.width = clientLayoutArea.width;\n // clientLayoutArea.y = textWrappingBounds.bottom;\n // clientLayoutArea.height = clientLayoutArea.height -\n // (textWrappingBounds.bottom - clientLayoutArea.y);\n // this.updateBoundsBasedOnTextWrap(textWrappingBounds.bottom);\n // } else {\n //const paraInfo: ParagraphLayoutInfo = paragraph.m_layoutInfo as ParagraphLayoutInfo;\n var leftIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.leftIndent);\n var firstLineIndent = HelperMethods.convertPointToPixel(paragraph.paragraphFormat.firstLineIndent);\n if (leftIndent + firstLineIndent + clientLayoutArea.x < textWrappingBounds.right) {\n //paragraph.x = textWrappingBounds.right;\n clientLayoutArea.x = textWrappingBounds.right;\n if (isWord2013) {\n //this.documentHelper.layout.IsXpositionUpated = true;\n }\n }\n // }\n }\n }\n else if ((textWrappingBounds.x - minimumWidthRequired > clientLayoutArea.x && clientLayoutArea.right > textWrappingBounds.x) ||\n (clientLayoutArea.x > textWrappingBounds.x && clientLayoutArea.x > textWrappingBounds.right)) {\n paragraph.x = clientLayoutArea.x;\n }\n // else if (clientLayoutArea.x > textWrappingBounds.x - minimumWidthRequired && clientLayoutArea.x < textWrappingBounds.right) {\n // const width: number = clientLayoutArea.width + (clientLayoutArea.x - textWrappingBounds.right);\n // if (width < minimumWidthRequired) {\n // clientLayoutArea.y = textWrappingBounds.bottom;\n // } else {\n // paragraph.x = textWrappingBounds.right;\n // }\n // } \n // else if (this.IsNeedToUpdateParagraphYPosition(clientLayoutArea.Y, textWrappingStyle,\n // paragraph, clientLayoutArea.Y + size.Height + paragraph.ParagraphFormat.AfterSpacing, textWrappingBounds.Bottom)) {\n // (paragraph.m_layoutInfo as ParagraphLayoutInfo).XPosition = clientLayoutArea.X;\n // clientLayoutArea.Width = (m_lcOperator as Layouter).ClientLayoutArea.Width;\n // clientLayoutArea.Y = textWrappingBounds.Bottom;\n // clientLayoutArea.Height = (m_lcOperator as Layouter).ClientLayoutArea.Height -\n // (textWrappingBounds.Bottom - (m_lcOperator as Layouter).ClientLayoutArea.Y);\n // (m_layoutArea as any).UpdateBoundsBasedOnTextWrap(textWrappingBounds.Bottom);\n // }\n }\n }\n //this.ResetXPositionForRTLLayouting(i, textWrappingBounds, floatingItemXPosition);\n }\n }\n // if (m_widget instanceof WParagraph) {\n // const sortYPosition: FloatingItem[] = (m_lcOperator as Layouter).FloatingItems.slice(0);\n // FloatingItem.SortFloatingItems(sortYPosition, SortPosition.Y);\n // this.UpdateXYPositionBasedOnAdjacentFloatingItems(sortYPosition, clientLayoutArea, size,\n // m_widget as WParagraph, false);\n // }\n // if (isFirstItem && yValue < yPosition) {\n // (m_lcOperator as Layouter).WrappingDifference = yPosition - (m_lcOperator as Layouter).PageTopMargin;\n // }\n }\n };\n LayoutViewer.prototype.updateTableXPositionBasedOnTextWrap = function (block) {\n // Get the first row width\n var firstRowWidth = HelperMethods.convertPointToPixel(block.childWidgets[0].getFirstRowWidth());\n var bodyWidget = block.bodyWidget;\n if (this instanceof PageLayoutViewer && !isNullOrUndefined(bodyWidget) && !isNullOrUndefined(bodyWidget.page) && !isNullOrUndefined(bodyWidget.page.headerWidget)) {\n var floatingItems = bodyWidget.page.headerWidget.floatingElements;\n // textwrap\n // Update Layout area based on text wrap and ignore the yposition update while \n // wrapping bounds already added to the collection\n if (floatingItems.length > 0 && (!block.isInHeaderFooter || !block.isInsideTable || this.documentHelper.compatibilityMode === 'Word2013')\n && !(block.containerWidget instanceof TextFrame)) {\n var rect = this.clientActiveArea;\n //let wrapItemIndex: number = -1;\n // sort the list items based on y position,\n // Call Sort on the list. This will use the \n // default comparer, which is the Compare method \n // implemented on FloatingItem.\n //FloatingItem.sortFloatingItems(this.m_lcOperator.floatingItems, SortPosition.Y);\n for (var i = 0; i < floatingItems.length; i++) {\n var floatingItem = floatingItems[i];\n var textWrappingBounds = this.getTextWrappingBound(floatingItem);\n var textWrappingStyle = floatingItem instanceof TableWidget ? 'Square' : floatingItem.textWrappingStyle;\n var allowOverlap = floatingItem instanceof TableWidget ? floatingItem.positioning.allowOverlap : floatingItem.allowOverlap;\n // if (this.isAdjustTightAndThroughBounds(textWrappingStyle, i)) {\n // let temp: RectangleF = this.adjustTightAndThroughBounds(this.m_lcOperator.floatingItems[i], rect, size.height);\n // textWrappingBounds = temp;\n // }\n // let ownerBody: WTextBody = null;\n // // As per Microsoft Word behavior, when floating item and table in cell means,\n // // then, wrap the bounds for the items in same cell only. \n // // Skip, if it is in different cell.\n // if (!this.isInSameTextBody(this.m_table, this.m_lcOperator.floatingItems[i], ownerBody)\n // && this.m_table.isInCell && ownerBody instanceof WTableCell)\n // continue;\n // // Skip if the current table is in different frame\n // if (this.isInFrame(this.m_lcOperator.floatingItems[i].floatingEntity as WParagraph) && this.m_table.isFrame)\n // continue;\n // // Adjusts the text wrapping bounds based on distance from text values when floating table intersects with another floating item.\n // textWrappingBounds = this.adjustTextWrappingBounds(this.m_lcOperator.floatingItems[i], clientLayoutArea, size,\n // wrapItemIndex, i, rect, textWrappingBounds, textWrappingStyle, allowOverlap);\n var minimumWidthRequired = 24;\n var paragarph = this.documentHelper.getFirstParagraphInFirstCell(block);\n var height = this.documentHelper.textHelper.getParagraphMarkSize(paragarph.characterFormat).Height;\n var rowHeight = block.childWidgets[0] instanceof TableRowWidget ? block.childWidgets[0].height : 0;\n if (rowHeight > height) {\n height = rowHeight;\n }\n var width = HelperMethods.convertPointToPixel(block.getTableClientWidth(block.getContainerWidth()));\n if (!(this.clientArea.x > textWrappingBounds.right + minimumWidthRequired || this.clientArea.right < textWrappingBounds.x - minimumWidthRequired)) {\n if (this.isFloatingItemIntersect(block, rect, textWrappingBounds, textWrappingStyle, allowOverlap, height, width)) {\n if (rect.x >= textWrappingBounds.x && rect.x < textWrappingBounds.right) {\n rect.width = rect.width - (textWrappingBounds.right - rect.x);\n //checks minimum width\n if (rect.width < minimumWidthRequired || (rect.width < firstRowWidth && firstRowWidth > 0)) {\n rect.width = this.clientActiveArea.right - textWrappingBounds.right;\n //Check if the client active area width is lesser than table width to update the y position\n if (rect.width < minimumWidthRequired || ((rect.width < firstRowWidth && firstRowWidth > 0) &&\n this.clientArea.right <= firstRowWidth + textWrappingBounds.right)) {\n //When the table y position is lesser than the text wrapping bottom position then \n //difference of these two should be subtracted from the table client height instead of the floating item height.\n var remainingHeightOfFloatingItem = (textWrappingBounds.bottom > rect.y) ? textWrappingBounds.bottom - rect.y : 0;\n rect.y = textWrappingBounds.bottom;\n rect.width = this.clientArea.width;\n rect.height = rect.height - remainingHeightOfFloatingItem;\n this.updateClientAreaForTextWrap(rect);\n }\n else {\n rect.x = textWrappingBounds.right;\n // if (textWrappingStyle == TextWrappingStyle.Through\n // && this.m_lcOperator.floatingItems[i].isDoesNotDenotesRectangle) {\n // textWrappingBounds = this.adjustTightAndThroughBounds(this.m_lcOperator.floatingItems[i], rect, size.height);\n // if (textWrappingBounds.x != 0)\n // rect.width = textWrappingBounds.x - rect.x;\n // }\n this.updateClientAreaForTextWrap(rect);\n }\n }\n else {\n rect.x = textWrappingBounds.right;\n // if (textWrappingStyle == TextWrappingStyle.Through\n // && this.m_lcOperator.floatingItems[i].isDoesNotDenotesRectangle) {\n // textWrappingBounds = this.adjustTightAndThroughBounds(this.m_lcOperator.floatingItems[i], rect, size.height);\n // if (textWrappingBounds.x != 0)\n // rect.width = textWrappingBounds.x - rect.x;\n // }\n this.updateClientAreaForTextWrap(rect);\n }\n }\n // else if ((rect.right - textWrappingBounds.right) > 0\n // && (rect.right - textWrappingBounds.right) < rect.width\n // && (rect.y >= textWrappingBounds.y\n // || (rect.y + size.height) >= textWrappingBounds.y)) {\n // //If the table is intersect with another floating item from the top ,then we need to consider distance from text with respect to relative margin position.\n // if (rect.x < textWrappingBounds.x && rect.right > textWrappingBounds.x) {\n // if (this.m_table.tableFormat.positioning.horizPositionAbs == HorizontalPosition.Left)\n // rect.x += this.m_table.tableFormat.positioning.distanceFromLeft;\n // else if (this.m_table.tableFormat.positioning.horizPositionAbs == HorizontalPosition.Right)\n // rect.x -= this.m_table.tableFormat.positioning.distanceFromRight;\n // }\n // //When the table y position is lesser than the text wrapping bottom position then \n // //difference of these two should be subtracted from the table client height instead of the floating item height.\n // let remainingHeightOfFloatingItem = (textWrappingBounds.bottom > rect.y) ? textWrappingBounds.bottom - rect.y : 0;\n // rect.y = textWrappingBounds.bottom;\n // rect.height = rect.height - remainingHeightOfFloatingItem;\n // this.createLayoutArea(rect);\n // }\n // else if (textWrappingBounds.x > rect.x && rect.right > textWrappingBounds.x) {\n // rect.width = textWrappingBounds.x - rect.x;\n // //checks minimum width\n // if (rect.width < DEF_MIN_WIDTH || (rect.width < firstRowWidth && firstRowWidth > 0)) {\n // rect.width = this.m_layoutArea.clientActiveArea.right - textWrappingBounds.right;\n // if (rect.width < DEF_MIN_WIDTH || (rect.width < firstRowWidth && firstRowWidth > 0)) {\n // //Check if the client active area width is greater than table width to update the x position\n // if (this.m_layoutArea.clientArea.right < this.m_lcOperator.clientLayoutArea.right\n // && textWrappingBounds.right < this.m_lcOperator.clientLayoutArea.right\n // && this.m_lcOperator.clientLayoutArea.right - textWrappingBounds.right > DEF_MIN_WIDTH\n // && Math.round(this.m_layoutArea.clientActiveArea.width, 2) > Math.round(firstRowWidth, 2)) {\n // rect.width = this.m_lcOperator.clientLayoutArea.right - textWrappingBounds.right;\n // rect.x = textWrappingBounds.right;\n // if (textWrappingStyle == TextWrappingStyle.Through\n // && this.m_lcOperator.floatingItems[i].isDoesNotDenotesRectangle) {\n // textWrappingBounds = this.adjustTightAndThroughBounds(this.m_lcOperator.floatingItems[i], rect, size.height);\n // if (textWrappingBounds.x != 0)\n // rect.width = textWrappingBounds.x - rect.x;\n // }\n // }\n // else {\n // //When the table y position is lesser than the text wrapping bottom position then \n // //difference of these two should be subtracted from the table client height instead of the floating item height.\n // let remainingHeightOfFloatingItem = (textWrappingBounds.bottom > rect.y) ? textWrappingBounds.bottom - rect.y : 0;\n // rect.y = textWrappingBounds.bottom;\n // rect.height = rect.height - remainingHeightOfFloatingItem;\n // }\n // this.createLayoutArea(rect);\n // }\n // }\n // else\n // this.createLayoutArea(rect);\n // }\n // else if (rect.x > textWrappingBounds.x && rect.x > textWrappingBounds.right) {\n // rect.width = this.m_layoutArea.clientArea.width;\n // this.createLayoutArea(rect);\n // }\n // else if (rect.x > textWrappingBounds.x && rect.x < textWrappingBounds.right) {\n // rect.width = rect.width - (textWrappingBounds.right - rect.x);\n // rect.x = textWrappingBounds.right;\n // if (textWrappingStyle == TextWrappingStyle.Through\n // && this.m_lcOperator.floatingItems[i].isDoesNotDenotesRectangle) {\n // textWrappingBounds = this.adjustTightAndThroughBounds(this.m_lcOperator.floatingItems[i], rect, size.height);\n // if (textWrappingBounds.x != 0)\n // rect.width = textWrappingBounds.x - rect.x;\n // }\n // this.createLayoutArea(rect);\n // }\n }\n }\n }\n }\n }\n };\n LayoutViewer.prototype.isFloatingItemIntersect = function (table, rect, textWrappingBounds, textWrappingStyle, allowOverlap, height, width) {\n return ((Math.round(rect.y + height) >= Math.round(textWrappingBounds.y)\n && Math.round(rect.y) < Math.round(textWrappingBounds.bottom))\n //Checks whether the bottom of the table intersects with floating item.\n || Math.round(rect.y + height) <= Math.round(textWrappingBounds.bottom)\n && Math.round(rect.y + height) >= Math.round(textWrappingBounds.y))\n && textWrappingStyle !== \"Inline\"\n && textWrappingStyle !== \"TopAndBottom\"\n && textWrappingStyle !== \"InFrontOfText\"\n && textWrappingStyle !== \"Behind\"\n && !(allowOverlap && (table.tableFormat !== null && table.wrapTextAround && table.positioning.allowOverlap));\n };\n LayoutViewer.prototype.getIntersectingItemBounds = function (floatingElements, intersectedfloatingItem, yPosition) {\n var floatingItem = this.getMinBottomFloatingItem(floatingElements, this.getIntersectingFloatingItems(floatingElements, intersectedfloatingItem, yPosition));\n if (!isNullOrUndefined(floatingItem)) {\n var floatingItemBound = this.getTextWrappingBound(floatingItem);\n return floatingItemBound;\n }\n return undefined;\n };\n LayoutViewer.prototype.getMinBottomFloatingItem = function (floatingElements, fItems) {\n var minBottomItemIndex = -1;\n var minBottom = Number.MAX_VALUE;\n var skippedCount = 0;\n // Sort based on X position\n floatingElements.sort(function (a, b) { return a.x - b.x; });\n for (var i = 0; i < fItems.length; i++) {\n var floatingItem = floatingElements[i];\n var item = this.getTextWrappingBound(floatingItem);\n if (minBottom > item.bottom) {\n // Need to ignore if floating items preserved in same frame.\n if (floatingItem && fItems.indexOf(floatingItem) + 1 < fItems.length) {\n skippedCount++;\n }\n else {\n minBottom = item.bottom;\n minBottomItemIndex = fItems.indexOf(floatingItem);\n }\n }\n }\n //If floating item which has minimum bottom is first item (no items preserved left side of this item).\n //Then return current item Other cases need to handle.\n return minBottomItemIndex - skippedCount == 0 ? fItems[minBottomItemIndex] : null;\n };\n LayoutViewer.prototype.getIntersectingFloatingItems = function (floatingElements, intersectedfloatingItem, yPosition) {\n var fItems = [];\n //Get all the items which preserved left side of the current floating item.\n for (var i = 0; i < floatingElements.length; i++) {\n {\n var floatingItem = floatingElements[i];\n var itemTextWrapBound = this.getTextWrappingBound(floatingItem);\n var intersectItemTextWrapBound = this.getTextWrappingBound(intersectedfloatingItem);\n if (yPosition <= itemTextWrapBound.bottom\n && intersectItemTextWrapBound.bottom >= itemTextWrapBound.bottom\n && itemTextWrapBound.right > this.clientActiveArea.x\n && itemTextWrapBound.x < intersectItemTextWrapBound.x)\n fItems.push(floatingItem);\n }\n }\n return fItems;\n };\n LayoutViewer.prototype.getTextWrappingBound = function (floatingItem) {\n var distanceLeft = 0;\n var distanceTop = 0;\n var distanceRight = 0;\n var distanceBottom = 0;\n var width = 0;\n if (floatingItem instanceof ShapeBase) {\n distanceLeft = floatingItem.distanceLeft;\n distanceTop = floatingItem.distanceTop;\n distanceRight = floatingItem.distanceRight;\n distanceBottom = floatingItem.distanceBottom;\n width = floatingItem.width;\n }\n else {\n width = floatingItem.getTableCellWidth();\n distanceLeft = floatingItem.positioning.distanceLeft;\n distanceTop = floatingItem.positioning.distanceTop;\n distanceRight = floatingItem.positioning.distanceRight;\n distanceBottom = floatingItem.positioning.distanceBottom;\n }\n var textWrappingBounds = new Rect(floatingItem.x - distanceLeft, floatingItem.y - distanceTop, width + distanceLeft + distanceRight, floatingItem.height + distanceTop + distanceBottom);\n return textWrappingBounds;\n };\n LayoutViewer.prototype.tableAlignmentForBidi = function (block, bidi) {\n var tableAlignment = block.tableFormat.tableAlignment;\n if (bidi) {\n if (tableAlignment === 'Left') {\n tableAlignment = 'Right';\n }\n else if (tableAlignment === 'Right') {\n tableAlignment = 'Left';\n }\n }\n return tableAlignment;\n };\n LayoutViewer.prototype.cutFromLeft = function (x) {\n if (x < this.clientActiveArea.x) {\n x = this.clientActiveArea.x;\n }\n if (x > this.clientActiveArea.right && this.textWrap) {\n x = this.clientActiveArea.right;\n }\n this.clientActiveArea.width = this.clientActiveArea.right > x ? this.clientActiveArea.right - x : 0;\n this.clientActiveArea.x = x;\n };\n LayoutViewer.prototype.cutFromTop = function (y) {\n if (y < this.clientActiveArea.y) {\n y = this.clientActiveArea.y;\n }\n if (y > this.clientActiveArea.bottom) {\n y = this.clientActiveArea.bottom;\n }\n this.clientActiveArea.height = this.clientActiveArea.bottom - y;\n this.clientActiveArea.x = this.clientArea.x;\n this.clientActiveArea.width = this.clientArea.width;\n this.clientActiveArea.y = y;\n };\n LayoutViewer.prototype.updateClientWidth = function (width) {\n this.clientActiveArea.x -= width;\n if (this.clientActiveArea.width + width > 0) {\n this.clientActiveArea.width += width;\n }\n else {\n this.clientActiveArea.width = 0;\n }\n };\n LayoutViewer.prototype.findFocusedPage = function (currentPoint, updateCurrentPage, updateHeaderFooterPage) {\n var point = new Point(currentPoint.x, currentPoint.y);\n point.x += this.documentHelper.viewerContainer.scrollLeft;\n point.y += this.documentHelper.viewerContainer.scrollTop;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n var pageTop = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.documentHelper.zoomFactor + this.pageGap * (i + 1);\n var pageHeight = (page.boundingRectangle.height * this.documentHelper.zoomFactor) + this.pageGap;\n var pageLeft = page.boundingRectangle.x;\n var pageRight = void 0;\n if (this instanceof PageLayoutViewer) {\n pageRight = ((page.boundingRectangle.right - pageLeft) * this.documentHelper.zoomFactor) + pageLeft;\n }\n else {\n pageRight = page.boundingRectangle.right + pageLeft;\n }\n if (pageTop <= point.y && pageTop + pageHeight >= point.y) {\n if (updateCurrentPage) {\n this.documentHelper.currentPage = page;\n if (updateHeaderFooterPage) {\n if (!isNullOrUndefined(page.headerWidget)) {\n page.headerWidget.page = page;\n }\n if (!isNullOrUndefined(page.footerWidget)) {\n page.footerWidget.page = page;\n }\n }\n }\n point.y = (point.y - (pageTop)) / this.documentHelper.zoomFactor;\n if (point.x > pageRight) {\n point.x = page.boundingRectangle.right;\n }\n else if (point.x < pageLeft) {\n point.x = 0;\n }\n else {\n point.x = (point.x - pageLeft) / this.documentHelper.zoomFactor;\n }\n return point;\n }\n }\n return point;\n };\n LayoutViewer.prototype.getPageHeightAndWidth = function (height, width, viewerWidth, viewerHeight) {\n height = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n height = height + this.documentHelper.pages[i].boundingRectangle.height;\n }\n width = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n if (width < this.documentHelper.pages[i].boundingRectangle.width) {\n width = this.documentHelper.pages[i].boundingRectangle.width;\n }\n }\n //this.documentHelper.visibleBoundsIn = new Rect(0, 0, width, height);\n viewerWidth = this.documentHelper.visibleBounds.width;\n viewerHeight = this.documentHelper.visibleBounds.height;\n return {\n 'height': height,\n 'width': width,\n 'viewerWidth': viewerWidth,\n 'viewerHeight': viewerHeight\n };\n };\n LayoutViewer.prototype.renderVisiblePages = function () {\n if (isNullOrUndefined(this.visiblePages) || this.visiblePages.length < 1) {\n return;\n }\n this.documentHelper.clearContent();\n for (var i = 0; i < this.visiblePages.length; i++) {\n var page = this.visiblePages[i];\n var width = page.boundingRectangle.width * this.documentHelper.zoomFactor;\n var height = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n var x = page.boundingRectangle.x;\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.documentHelper.zoomFactor + this.pageGap * (i + 1);\n this.owner.viewer.renderPage(page, x, y, width, height);\n }\n };\n /* eslint-disable */\n LayoutViewer.prototype.handleZoom = function () {\n var prevScaleFactor = this.documentHelper.preZoomFactor;\n var page = null;\n var verticalHeight = 0;\n var scrollToPosition = false;\n if (this.documentHelper.selection && isNullOrUndefined(this.documentHelper.zoomX && isNullOrUndefined(this.documentHelper.zoomY))) {\n var x = 0;\n var y = 0;\n var endPage = this.documentHelper.selection.getPage(this.documentHelper.selection.end.currentWidget.paragraph);\n x = (this.documentHelper.visibleBounds.width - endPage.boundingRectangle.width * prevScaleFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n y = endPage.boundingRectangle.y * prevScaleFactor + (this.documentHelper.pages.indexOf(endPage) + 1) * this.pageGap * (1 - prevScaleFactor);\n var caretInfo = this.documentHelper.selection.updateCaretSize(this.owner.selectionModule.end, true);\n var topMargin = caretInfo.topMargin;\n var caretHeight = caretInfo.height;\n x += (this.documentHelper.selection.end.location.x) * prevScaleFactor;\n y += (this.documentHelper.selection.end.location.y + topMargin) * prevScaleFactor;\n if (x >= this.containerLeft && x <= this.documentHelper.visibleBounds.width &&\n y >= this.containerTop && y <= this.containerTop + this.documentHelper.visibleBounds.height) {\n scrollToPosition = true;\n }\n }\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n verticalHeight = verticalHeight + this.documentHelper.pages[i].boundingRectangle.height;\n }\n var horizontalWidth = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n if (horizontalWidth < this.documentHelper.pages[i].boundingRectangle.width) {\n horizontalWidth = this.documentHelper.pages[i].boundingRectangle.width;\n }\n }\n var height = (verticalHeight * this.documentHelper.zoomFactor + (this.documentHelper.pages.length + 1) * this.pageGap * (1 - this.documentHelper.zoomFactor)) - this.documentHelper.visibleBounds.height;\n var horWidth = horizontalWidth * this.documentHelper.zoomFactor - this.documentHelper.visibleBounds.width;\n if (this.documentHelper.visibleBounds.width - horizontalWidth * this.documentHelper.zoomFactor < 60) {\n horWidth += 60;\n }\n //Update Vertical Scroll bar\n if (height > 0) {\n var value = this.containerTop;\n if (this.visiblePages.length > 0) {\n page = this.visiblePages[0];\n var prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n var zoomY = this.documentHelper.zoomY;\n if (isNullOrUndefined) {\n zoomY = this.documentHelper.visibleBounds.height / 2;\n }\n var prevY = value + zoomY;\n while (prevY > prevPageTop + (page.boundingRectangle.height * prevScaleFactor)) {\n var pageIndex = page.index + 1;\n if (pageIndex === this.documentHelper.pages.length) {\n break;\n }\n page = this.documentHelper.pages[pageIndex];\n prevPageTop = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * prevScaleFactor + (page.index + 1) * this.pageGap;\n }\n var currentY = (page.boundingRectangle.y - (page.index + 1) * this.pageGap) * this.documentHelper.zoomFactor + (page.index + 1) * this.pageGap\n + ((prevY - prevPageTop) < 0 ? prevY - prevPageTop : (prevY - prevPageTop) * (this.documentHelper.zoomFactor / prevScaleFactor));\n value = currentY - zoomY;\n zoomY = this.documentHelper.visibleBounds.height / 2;\n }\n this.documentHelper.viewerContainer.scrollTop = value;\n }\n else {\n this.documentHelper.viewerContainer.scrollTop = 0;\n }\n // update Horizontal Scroll Bar\n if (horWidth > 0) {\n var value = this.containerLeft;\n if (this.visiblePages.length > 0) {\n if (page === null) {\n page = this.visiblePages[0];\n }\n var zoomX = this.documentHelper.zoomX;\n if (isNullOrUndefined(zoomX)) {\n zoomX = this.documentHelper.visibleBounds.width / 2;\n }\n var prevValue = (page.boundingRectangle.width * prevScaleFactor) / page.boundingRectangle.width;\n var prevX = value + zoomX;\n var currentX = page.boundingRectangle.x\n + ((prevX - page.boundingRectangle.x) < 0 ? prevX - page.boundingRectangle.x : (prevX - page.boundingRectangle.x) * (this.documentHelper.zoomFactor / prevValue));\n value = currentX - zoomX;\n zoomX = this.documentHelper.visibleBounds.width / 2;\n }\n this.documentHelper.viewerContainer.scrollLeft = value;\n }\n else {\n this.documentHelper.viewerContainer.scrollLeft = 0;\n }\n this.updateScrollBars();\n if (scrollToPosition) {\n this.documentHelper.scrollToPosition(this.documentHelper.selection.start, this.documentHelper.selection.end);\n }\n if (this instanceof WebLayoutViewer) {\n this.owner.editorModule.layoutWholeDocument();\n }\n };\n LayoutViewer.prototype.updateCanvasWidthAndHeight = function (viewerWidth, viewerHeight, containerHeight, containerWidth, width, height) {\n if (this instanceof PageLayoutViewer) {\n if (this.documentHelper.visibleBounds.width !== this.documentHelper.viewerContainer.clientWidth) {\n viewerWidth -= (this.documentHelper.visibleBounds.width - this.documentHelper.viewerContainer.clientWidth);\n }\n else if (containerHeight > viewerHeight) {\n viewerWidth -= this.documentHelper.viewerContainer.offsetWidth - this.documentHelper.viewerContainer.clientWidth;\n }\n }\n else {\n if (containerHeight > viewerHeight) {\n viewerWidth -= this.documentHelper.scrollbarWidth;\n containerWidth -= this.documentHelper.scrollbarWidth;\n }\n }\n if (containerWidth > viewerWidth) {\n viewerHeight -= this.documentHelper.scrollbarWidth;\n }\n width = containerWidth > viewerWidth ? containerWidth : viewerWidth;\n height = containerHeight > viewerHeight ? containerHeight : viewerHeight;\n if (parseInt(this.documentHelper.pageContainer.style.width.replace('px', ''), 10) !== width ||\n parseInt(this.documentHelper.pageContainer.style.height.replace('px', ''), 10) !== width) {\n this.documentHelper.pageContainer.style.width = width.toString() + 'px';\n this.documentHelper.pageContainer.style.height = height.toString() + 'px';\n }\n // if (!isNullOrUndefined(this.selection) && !this.selection.isEmpty) {\n // this.selectionContext.clearRect(0, 0, this.selectionCanvas.width, this.selectionCanvas.height);\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n if (this.documentHelper.containerCanvas.width !== Math.floor(viewerWidth * displayPixelRatio)\n || this.documentHelper.containerCanvas.height !== Math.floor(viewerHeight * displayPixelRatio)) {\n this.documentHelper.containerCanvas.width = viewerWidth * displayPixelRatio;\n this.documentHelper.containerCanvas.height = viewerHeight * displayPixelRatio;\n this.documentHelper.containerCanvas.style.width = viewerWidth + 'px';\n this.documentHelper.containerCanvas.style.height = viewerHeight + 'px';\n this.documentHelper.containerContext.scale(displayPixelRatio, displayPixelRatio);\n this.documentHelper.selectionCanvas.width = viewerWidth * displayPixelRatio;\n this.documentHelper.selectionCanvas.height = viewerHeight * displayPixelRatio;\n this.documentHelper.selectionCanvas.style.width = viewerWidth + 'px';\n this.documentHelper.selectionCanvas.style.height = viewerHeight + 'px';\n this.documentHelper.selectionContext.scale(displayPixelRatio, displayPixelRatio);\n }\n return {\n 'height': height,\n 'width': width,\n 'viewerWidth': viewerWidth,\n 'viewerHeight': viewerHeight,\n 'containerHeight': containerHeight,\n 'containerWidth': containerWidth\n };\n };\n LayoutViewer.prototype.updateScrollBarPosition = function (containerWidth, containerHeight, viewerWidth, viewerHeight, width, height) {\n this.owner.viewer.containerTop = this.documentHelper.viewerContainer.scrollTop;\n this.owner.viewer.containerWidth = containerWidth;\n this.documentHelper.containerCanvas.style.position = 'absolute';\n this.documentHelper.containerCanvas.style.top = this.owner.viewer.containerTop.toString() + 'px';\n this.documentHelper.selectionCanvas.style.position = 'absolute';\n this.documentHelper.selectionCanvas.style.top = this.owner.viewer.containerTop.toString() + 'px';\n this.owner.viewer.containerLeft = this.documentHelper.viewerContainer.scrollLeft;\n this.documentHelper.containerCanvas.style.left = this.owner.viewer.containerLeft + 'px';\n this.documentHelper.selectionCanvas.style.left = this.owner.viewer.containerLeft + 'px';\n };\n LayoutViewer.prototype.destroy = function () {\n this.clientArea = undefined;\n this.clientActiveArea = undefined;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n LayoutViewer.prototype.componentDestroy = function () {\n this.clientArea = undefined;\n this.clientActiveArea = undefined;\n this.owner = undefined;\n };\n return LayoutViewer;\n}());\nexport { LayoutViewer };\n/**\n * @private\n */\nvar PageLayoutViewer = /** @class */ (function (_super) {\n __extends(PageLayoutViewer, _super);\n /**\n * Initialize the constructor of PageLayoutViewer\n */\n function PageLayoutViewer(owner) {\n var _this = _super.call(this, owner) || this;\n _this.pageLeft = 30;\n // if (isNullOrUndefined(owner) || isNullOrUndefined(owner.element)) {\n // return;\n // }\n _this.owner = owner;\n return _this;\n }\n Object.defineProperty(PageLayoutViewer.prototype, \"pageGap\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.pageGap;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageLayoutViewer.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n PageLayoutViewer.prototype.createNewPage = function (section, index) {\n var viewer = this;\n var yPos = this.pageGap;\n if (this.documentHelper.pages.length > 0) {\n yPos = this.documentHelper.pages[this.documentHelper.pages.length - 1].boundingRectangle.bottom + this.pageGap;\n }\n var page = new Page(this.documentHelper);\n this.updatePageBoundingRectangle(section, page, yPos);\n if (isNullOrUndefined(index)) {\n this.documentHelper.pages.push(page);\n }\n else {\n this.documentHelper.pages.splice(index, 0, page);\n }\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n this.updateClientArea(section, page);\n this.documentHelper.layout.layoutHeaderFooter(section, viewer, page);\n this.updateClientArea(section, page);\n this.documentHelper.layout.footnoteHeight = 0;\n return page;\n };\n PageLayoutViewer.prototype.updatePageBoundingRectangle = function (section, page, yPosition) {\n //page.viewer = this;\n var pageWidth = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth) : 816;\n var pageHeight = !isNullOrUndefined(section.sectionFormat) ? HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight) : 1056;\n var xPos = (this.documentHelper.visibleBounds.width - pageWidth * this.documentHelper.zoomFactor) / 2;\n if (xPos < this.pageLeft) {\n xPos = this.pageLeft;\n }\n page.boundingRectangle = new Rect(xPos, yPosition, pageWidth, pageHeight);\n };\n PageLayoutViewer.prototype.onPageFitTypeChanged = function (pageFitType) {\n var width = this.documentHelper.visibleBounds.width;\n var height = this.documentHelper.visibleBounds.height;\n var section = this.visiblePages[0].bodyWidgets[0];\n var pageWidth = HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth);\n var pageHeight = HelperMethods.convertPointToPixel(section.sectionFormat.pageHeight);\n switch (pageFitType) {\n case 'FitOnePage':\n if (height > 0 && pageHeight > 0) {\n var zoomFactor = (this.documentHelper.visibleBounds.height - 2 * this.pageGap - (this.pageGap - 2)) / pageHeight;\n if (zoomFactor === this.documentHelper.zoomFactor) {\n if (!isNullOrUndefined(this.owner.selectionModule) && !isNullOrUndefined(this.owner.selectionModule.start) &&\n !isNullOrUndefined(this.owner.selectionModule.end)) {\n this.documentHelper.scrollToPosition(this.owner.selectionModule.start, this.owner.selectionModule.end);\n }\n }\n else {\n this.documentHelper.zoomFactor = zoomFactor;\n }\n }\n break;\n case 'FitPageWidth':\n if (width > 0 && pageWidth > 0) {\n this.documentHelper.zoomFactor = (this.documentHelper.visibleBounds.width - 80) / pageWidth;\n }\n break;\n default:\n this.documentHelper.zoomFactor = 100 / 100;\n break;\n }\n };\n PageLayoutViewer.prototype.getCurrentPageHeaderFooter = function (section, isHeader) {\n return this.getCurrentHeaderFooter(this.getHeaderFooterType(section, isHeader), section.index);\n };\n PageLayoutViewer.prototype.getHeaderFooterType = function (section, isHeader) {\n var type;\n type = isHeader ? 'OddHeader' : 'OddFooter';\n var page = section.page;\n if (section.sectionFormat.differentFirstPage && (isNullOrUndefined(page.previousPage) || (!isNullOrUndefined(page.previousPage) && page.sectionIndex !== page.previousPage.sectionIndex && page.previousPage.bodyWidgets[page.previousPage.bodyWidgets.length - 1].sectionIndex !== page.bodyWidgets[0].sectionIndex))) {\n type = isHeader ? 'FirstPageHeader' : 'FirstPageFooter';\n }\n else if (section.sectionFormat.differentOddAndEvenPages && (page.index + 1) % 2 === 0) {\n type = isHeader ? 'EvenHeader' : 'EvenFooter';\n }\n return type;\n };\n PageLayoutViewer.prototype.getCurrentHeaderFooter = function (type, sectionIndex) {\n if (this.documentHelper.headersFooters[sectionIndex]) {\n var index = this.getHeaderFooter(type);\n var headerFooter = this.documentHelper.headersFooters[sectionIndex][index];\n if (!headerFooter) {\n var currentSecIndex = sectionIndex > 0 ? sectionIndex - 1 : sectionIndex;\n while (!headerFooter && currentSecIndex !== -1) {\n headerFooter = this.documentHelper.headersFooters[currentSecIndex][index];\n currentSecIndex--;\n }\n if (!headerFooter) {\n headerFooter = this.createHeaderFooterWidget(type);\n headerFooter.isEmpty = true;\n }\n if (sectionIndex == 0) {\n this.documentHelper.headersFooters[sectionIndex][index] = headerFooter;\n }\n }\n return headerFooter;\n }\n else if (sectionIndex > 0) {\n return this.getCurrentHeaderFooter(type, sectionIndex - 1);\n }\n return undefined;\n };\n PageLayoutViewer.prototype.createHeaderFooterWidget = function (type) {\n var headerFooter = new HeaderFooterWidget(type);\n var paragraph = new ParagraphWidget();\n paragraph.childWidgets.push(new LineWidget(paragraph));\n var style;\n if (type.indexOf('Header') !== -1) {\n style = this.documentHelper.styles.findByName('Header');\n }\n else {\n style = this.documentHelper.styles.findByName('Footer');\n }\n paragraph.paragraphFormat.baseStyle = style;\n paragraph.paragraphFormat.listFormat.baseStyle = style;\n headerFooter.childWidgets.push(paragraph);\n paragraph.containerWidget = headerFooter;\n return headerFooter;\n };\n PageLayoutViewer.prototype.getHeaderFooter = function (type) {\n switch (type) {\n case 'OddHeader':\n return 0;\n case 'OddFooter':\n return 1;\n case 'EvenHeader':\n return 2;\n case 'EvenFooter':\n return 3;\n case 'FirstPageHeader':\n return 4;\n case 'FirstPageFooter':\n return 5;\n }\n };\n PageLayoutViewer.prototype.updateHFClientArea = function (sectionFormat, isHeader) {\n var width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n if (width < 0) {\n width = 0;\n }\n if (isHeader) {\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.headerDistance), width, Number.POSITIVE_INFINITY);\n }\n else {\n this.clientArea = new Rect(HelperMethods.convertPointToPixel(sectionFormat.leftMargin), HelperMethods.convertPointToPixel(sectionFormat.pageHeight - sectionFormat.footerDistance), width, Number.POSITIVE_INFINITY);\n }\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, this.clientArea.height);\n };\n PageLayoutViewer.prototype.updateHeaderFooterClientAreaWithTop = function (sectionFormat, isHeader, page) {\n this.updateHFClientArea(sectionFormat, isHeader);\n if (!isHeader) {\n if (page.footerWidget.y < this.clientActiveArea.y) {\n this.clientActiveArea.y = page.footerWidget.y;\n this.clientActiveArea.height = Number.POSITIVE_INFINITY;\n }\n }\n };\n PageLayoutViewer.prototype.updateFootnoteClientArea = function (sectionFormat, footnote, footNoteType, para) {\n var width = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n var left = HelperMethods.convertPointToPixel(sectionFormat.leftMargin);\n var bottomMargin = HelperMethods.convertPointToPixel(sectionFormat.bottomMargin);\n var footerDistance = HelperMethods.convertPointToPixel(sectionFormat.footerDistance);\n var top = HelperMethods.convertPointToPixel(sectionFormat.pageHeight) - Math.max(footerDistance + footnote.page.footerWidget.height, bottomMargin);\n this.clientArea = new Rect(left, top, width, Number.POSITIVE_INFINITY);\n this.clientActiveArea = new Rect(this.clientArea.x, this.clientArea.y, this.clientArea.width, Number.POSITIVE_INFINITY);\n };\n PageLayoutViewer.prototype.scrollToPage = function (pageIndex) {\n var top = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n top = this.documentHelper.pages[i].boundingRectangle.y - (this.pageGap / 2);\n if (i === pageIndex) {\n break;\n }\n }\n this.documentHelper.viewerContainer.scrollTop = top;\n this.updateScrollBars();\n };\n PageLayoutViewer.prototype.updateScrollBars = function () {\n var updatePositionObj;\n updatePositionObj = this.getPageHeightAndWidth(0, 0, 0, 0);\n var containerWidth = (updatePositionObj.width * this.documentHelper.zoomFactor) + (this.pageLeft * 2);\n var containerHeight = (updatePositionObj.height * this.documentHelper.zoomFactor) + (this.documentHelper.pages.length + 1) * this.pageGap;\n var updateObj;\n updateObj = this.updateCanvasWidthAndHeight(updatePositionObj.viewerWidth, updatePositionObj.viewerHeight, containerHeight, containerWidth, updatePositionObj.width, updatePositionObj.height);\n containerHeight = updateObj.containerHeight;\n containerWidth = updateObj.containerWidth;\n this.documentHelper.containerContext.globalAlpha = 1;\n this.documentHelper.selectionContext.globalAlpha = 0.4;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var left = (updateObj.width - this.documentHelper.pages[i].boundingRectangle.width * this.documentHelper.zoomFactor) / 2;\n if (left > this.pageLeft) {\n this.documentHelper.pages[i].boundingRectangle = new Rect(left, this.documentHelper.pages[i].boundingRectangle.y, this.documentHelper.pages[i].boundingRectangle.width, this.documentHelper.pages[i].boundingRectangle.height);\n }\n else {\n this.documentHelper.pages[i].boundingRectangle = new Rect(this.pageLeft, this.documentHelper.pages[i].boundingRectangle.y, this.documentHelper.pages[i].boundingRectangle.width, this.documentHelper.pages[i].boundingRectangle.height);\n }\n }\n this.updateScrollBarPosition(containerWidth, containerHeight, updateObj.viewerWidth, updateObj.viewerHeight, updateObj.width, updateObj.height);\n this.updateVisiblePages();\n this.documentHelper.isScrollToSpellCheck = false;\n };\n PageLayoutViewer.prototype.updateVisiblePages = function () {\n // Clears the container first.\n this.visiblePages = [];\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n var y = (page.boundingRectangle.y - this.pageGap * (i + 1)) * this.documentHelper.zoomFactor + this.pageGap * (i + 1);\n var left = page.boundingRectangle.x;\n //UI Virtualization\n if (this.documentHelper.isPageInVisibleBound(page, y)) {\n this.addVisiblePage(page, left, y);\n }\n }\n };\n PageLayoutViewer.prototype.addVisiblePage = function (page, x, y) {\n var _this = this;\n var width = page.boundingRectangle.width * this.documentHelper.zoomFactor;\n var height = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.currentPage !== undefined && this.owner.imageResizerModule.currentPage === page && this.owner.imageResizerModule.isImageResizerVisible) {\n this.owner.imageResizerModule.setImageResizerPositions(x, y, width, height);\n }\n this.visiblePages.push(page);\n if (this.documentHelper.owner.isSpellCheck && this.documentHelper.owner.spellCheckerModule.enableOptimizedSpellCheck && (this.owner.documentHelper.triggerElementsOnLoading || this.owner.documentHelper.isScrollHandler) && (this.documentHelper.cachedPages.indexOf(page.index) < 0 || this.owner.editorModule.isPasteContentCheck)) {\n this.owner.documentHelper.cachedPages.push(page.index);\n var content = void 0;\n if (this.owner.editorModule.isPasteContentCheck) {\n content = !isNullOrUndefined(this.owner.editorModule.copiedTextContent) ? this.owner.editorModule.copiedTextContent : '';\n }\n else {\n content = this.documentHelper.owner.spellCheckerModule.getPageContent(page);\n }\n if (content.trim().length > 0) {\n page.allowNextPageRendering = false;\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.spellCheckerModule)) {\n this.owner.spellCheckerModule.updateUniqueWords(HelperMethods.getSpellCheckData(content));\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.owner.spellCheckerModule.callSpellChecker(this.owner.spellCheckerModule.languageID, content, true, false, false, true).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n if (!isNullOrUndefined(_this.owner) && !isNullOrUndefined(_this.owner.spellCheckerModule)) {\n _this.owner.spellCheckerModule.updateUniqueWords(jsonObject.SpellCollection);\n }\n page.allowNextPageRendering = true;\n _this.documentHelper.triggerElementsOnLoading = true;\n _this.documentHelper.triggerSpellCheck = true;\n _this.documentHelper.triggerElementsOnLoading = true;\n _this.renderPage(page, x, y, width, height);\n _this.documentHelper.triggerSpellCheck = false;\n _this.documentHelper.triggerElementsOnLoading = false;\n });\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n };\n PageLayoutViewer.prototype.renderPage = function (page, x, y, width, height) {\n this.documentHelper.render.renderWidgets(page, x - this.owner.viewer.containerLeft, y - this.owner.viewer.containerTop, width, height);\n };\n return PageLayoutViewer;\n}(LayoutViewer));\nexport { PageLayoutViewer };\nvar WebLayoutViewer = /** @class */ (function (_super) {\n __extends(WebLayoutViewer, _super);\n function WebLayoutViewer(owner) {\n var _this = _super.call(this, owner) || this;\n /**\n * @private\n */\n _this.visiblePages = [];\n /* if (isNullOrUndefined(owner) || isNullOrUndefined(owner.element)) {\n return;\n }*/\n _this.owner = owner;\n return _this;\n }\n Object.defineProperty(WebLayoutViewer.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WebLayoutViewer.prototype, \"pageGap\", {\n /**\n * @private\n */\n get: function () {\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Creates new page.\n * @private\n */\n WebLayoutViewer.prototype.createNewPage = function (section, index) {\n var page;\n var yPos = 0;\n var x = 10;\n if (this.documentHelper.pages.length > 0) {\n yPos = this.documentHelper.pages[this.documentHelper.pages.length - 1].boundingRectangle.bottom;\n }\n page = new Page(this.documentHelper);\n if (this.documentHelper.pages.length === 0) {\n page.boundingRectangle = new Rect(x, yPos, this.documentHelper.visibleBounds.width, this.documentHelper.visibleBounds.height);\n }\n else {\n page.boundingRectangle = new Rect(x, yPos - 20, this.documentHelper.visibleBounds.width, this.documentHelper.visibleBounds.height);\n }\n this.documentHelper.pages.push(page);\n this.updateClientArea(undefined, page);\n page.bodyWidgets.push(section);\n page.bodyWidgets[page.bodyWidgets.length - 1].page = page;\n return page;\n };\n WebLayoutViewer.prototype.onPageFitTypeChanged = function (pageFitType) {\n this.documentHelper.zoomFactor = 1;\n };\n WebLayoutViewer.prototype.scrollToPage = function (pageIndex) {\n this.updateScrollBars();\n };\n WebLayoutViewer.prototype.getContentHeight = function () {\n var height = 0;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n if (i === 0) {\n height += this.padding.top;\n page.boundingRectangle.y = this.padding.top;\n }\n else {\n page.boundingRectangle.y = this.documentHelper.pages[i - 1].boundingRectangle.bottom;\n }\n page.boundingRectangle.height = page.bodyWidgets[0].height;\n height += page.bodyWidgets[0].height;\n if (i === this.documentHelper.pages.length - 1) {\n height += this.padding.bottom;\n }\n }\n return height;\n };\n /**\n * @private\n */\n WebLayoutViewer.prototype.getContentWidth = function () {\n var width = this.documentHelper.visibleBounds.width;\n var currentWidth = width;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n for (var j = 0; j < page.bodyWidgets[0].childWidgets.length; j++) {\n if (page.bodyWidgets[0].childWidgets[j] instanceof TableWidget) {\n var tableWidget = page.bodyWidgets[0].childWidgets[j];\n var tableWidth = HelperMethods.convertPointToPixel(tableWidget.getTableWidth()) *\n this.documentHelper.zoomFactor + this.padding.left * 4 + this.padding.right * 4\n + page.boundingRectangle.x;\n if (currentWidth < tableWidth) {\n width = tableWidth;\n currentWidth = tableWidth;\n }\n }\n }\n page.boundingRectangle.width = width;\n }\n return width;\n };\n WebLayoutViewer.prototype.updateScrollBars = function () {\n var updatePositionObj;\n updatePositionObj = this.getPageHeightAndWidth(0, 0, 0, 0);\n var containerWidth = this.getContentWidth() * this.documentHelper.zoomFactor;\n var containerHeight = this.getContentHeight() * this.documentHelper.zoomFactor + this.padding.top + this.padding.bottom;\n var updateObj;\n updateObj = this.updateCanvasWidthAndHeight(updatePositionObj.viewerWidth, updatePositionObj.viewerHeight, containerHeight, containerWidth, updatePositionObj.width, updatePositionObj.height);\n this.documentHelper.containerContext.globalAlpha = 1;\n this.documentHelper.selectionContext.globalAlpha = 0.4;\n this.updateScrollBarPosition(containerWidth, containerHeight, updateObj.viewerWidth, updateObj.viewerHeight, updateObj.width, updateObj.height);\n this.updateVisiblePages();\n this.documentHelper.isScrollToSpellCheck = false;\n };\n WebLayoutViewer.prototype.updateVisiblePages = function () {\n this.visiblePages = [];\n var page;\n var y;\n var height = this.documentHelper.visibleBounds.height;\n var vertical = this.documentHelper.viewerContainer.scrollTop;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n page = this.documentHelper.pages[i];\n y = (page.boundingRectangle.y) * this.documentHelper.zoomFactor;\n var pageH = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n var isTopFit = y >= vertical && y <= vertical + height;\n var isBottomFit = y + pageH >= vertical && y + pageH <= vertical + height;\n var isMiddleFit = y <= vertical && y + pageH >= vertical + height;\n //UI Virtualization\n if (isTopFit || isBottomFit || isMiddleFit) {\n this.addVisiblePage(page, this.padding.left, y);\n }\n }\n };\n WebLayoutViewer.prototype.addVisiblePage = function (page, x, y) {\n var _this = this;\n var width = this.getContentWidth();\n var height = this.getContentHeight() * this.documentHelper.zoomFactor + this.padding.top + this.padding.bottom;\n if (this.owner.enableImageResizerMode && this.owner.imageResizerModule.currentPage !== undefined && this.owner.imageResizerModule.currentPage === page && this.owner.imageResizerModule.isImageResizerVisible) {\n this.owner.imageResizerModule.setImageResizerPositions(x, y, width, height);\n }\n this.visiblePages.push(page);\n if (this.documentHelper.owner.isSpellCheck && this.documentHelper.owner.spellCheckerModule.enableOptimizedSpellCheck && (this.owner.documentHelper.triggerElementsOnLoading || this.owner.documentHelper.isScrollHandler) && (this.documentHelper.cachedPages.indexOf(page.index) < 0 || this.owner.editorModule.isPasteContentCheck)) {\n this.owner.documentHelper.cachedPages.push(page.index);\n var contentlen = void 0;\n if (this.owner.editorModule.isPasteContentCheck) {\n contentlen = !isNullOrUndefined(this.owner.editorModule.copiedTextContent) ? this.owner.editorModule.copiedTextContent : '';\n }\n else {\n contentlen = this.documentHelper.owner.spellCheckerModule.getPageContent(page);\n }\n if (contentlen.trim().length > 0) {\n page.allowNextPageRendering = false;\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.spellCheckerModule)) {\n this.owner.spellCheckerModule.updateUniqueWords(HelperMethods.getSpellCheckData(contentlen));\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.owner.spellCheckerModule.callSpellChecker(this.owner.spellCheckerModule.languageID, contentlen, true, false, false, true).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObj = JSON.parse(data);\n if (!isNullOrUndefined(_this.owner) && !isNullOrUndefined(_this.owner.spellCheckerModule)) {\n _this.owner.spellCheckerModule.updateUniqueWords(jsonObj.SpellCollection);\n }\n page.allowNextPageRendering = true;\n _this.owner.documentHelper.triggerSpellCheck = true;\n _this.owner.documentHelper.triggerElementsOnLoading = true;\n _this.renderPage(page, x, y, width, height);\n _this.owner.documentHelper.triggerSpellCheck = false;\n _this.owner.documentHelper.triggerElementsOnLoading = false;\n });\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n }\n else {\n this.renderPage(page, x, y, width, height);\n }\n };\n /**\n * @private\n */\n WebLayoutViewer.prototype.renderPage = function (page, x, y, width, height) {\n this.documentHelper.render.renderWidgets(page, x - this.owner.viewer.containerLeft, y - this.owner.viewer.containerTop, width, height);\n };\n return WebLayoutViewer;\n}(LayoutViewer));\nexport { WebLayoutViewer };\n/**\n * @private\n */\nvar ColumnLayout = /** @class */ (function () {\n /**\n * Initialize the constructor of Column Layout Settings\n */\n function ColumnLayout(viewer) {\n this.viewerIn = viewer;\n this.clear();\n }\n Object.defineProperty(ColumnLayout.prototype, \"currentIndex\", {\n get: function () {\n return this.currentIndexIn;\n },\n set: function (value) {\n if (value >= 0) {\n this.currentIndexIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColumnLayout.prototype, \"columnCount\", {\n get: function () {\n var colCount;\n if (!isNullOrUndefined(this.columnIn)) {\n colCount = this.numberOfColumnsIn;\n }\n colCount = colCount > 0 ? colCount : 1;\n return colCount;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param sectionFormat\n */\n ColumnLayout.prototype.setColumns = function (sectionFormat) {\n this.pageWidth = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n this.numberOfColumnsIn = sectionFormat.numberOfColumns;\n if (!isNullOrUndefined(sectionFormat.columns)) {\n var columns = sectionFormat.columns;\n var columnList = [];\n for (var i = 0; i < sectionFormat.numberOfColumns; i++) {\n var space = this.defaultSpaceIn;\n var width = 0;\n if (!isNullOrUndefined(columns) && columns.length > 0) {\n space = columns[i].space;\n width = columns[i].width;\n }\n var col = this.getColumnObj(width, space, sectionFormat.numberOfColumns, sectionFormat.equalWidth);\n col.index = i;\n columnList.push(col);\n }\n this.columnIn = columnList;\n }\n };\n /**\n * @private\n */\n ColumnLayout.prototype.clear = function () {\n this.currentIndexIn = 0;\n this.defaultSpaceIn = 36;\n this.columnIn = null;\n this.pageWidth = 0;\n };\n ColumnLayout.prototype.reset = function () {\n this.currentIndex = 0;\n };\n /**\n * @private\n * @param bodyWidget\n * @param clientArea\n * @returns\n */\n ColumnLayout.prototype.getColumnBounds = function (bodyWidget, clientArea) {\n var colIndex = this.currentIndexIn;\n return this.getColumnBoundsByIndex(colIndex, clientArea);\n };\n /**\n * @private\n * @param bodyWidget\n * @param clientArea\n * @returns\n */\n ColumnLayout.prototype.getColumnBoundsByBodyWidget = function (bodyWidget, clientArea) {\n var colIndex = bodyWidget.columnIndex;\n return this.getColumnBoundsByIndex(colIndex, clientArea);\n };\n /**\n * @private\n * @param bodyWidget\n * @param clientArea\n * @returns\n */\n ColumnLayout.prototype.getNextColumnByBodyWidget = function (bodyWidget) {\n var colIndex = bodyWidget.columnIndex;\n var nextColumn = this.getColumnByIndex(colIndex + 1);\n return nextColumn;\n };\n ColumnLayout.prototype.getColumnByIndex = function (index) {\n if (index >= 0 && index < this.columnCount && !isNullOrUndefined(this.columnIn) && this.columnIn.length > 0) {\n return this.columnIn[index];\n }\n return undefined;\n };\n ColumnLayout.prototype.getColumnObj = function (colWidth, colSpace, noOfCols, isEqualWidth) {\n var totalSpace = (noOfCols - 1) * colSpace;\n var colObj = new WColumnFormat();\n if ((isEqualWidth || colWidth === 0) && !isNullOrUndefined(this.pageWidth)) {\n colWidth = (this.pageWidth - totalSpace) / noOfCols;\n }\n colObj.width = colWidth;\n colObj.space = colSpace;\n return colObj;\n };\n ColumnLayout.prototype.getColumnBoundsByIndex = function (colIndex, clientArea) {\n var colRect = new Rect(clientArea.x, clientArea.y, clientArea.width, clientArea.height);\n if (colIndex >= 0 && this.columnIn.length > 0) {\n var curColumn = void 0;\n var prevColumn = void 0;\n if (!isNullOrUndefined(this.columnIn[colIndex])) {\n curColumn = this.getColumnByIndex(colIndex);\n colRect.width = curColumn.width;\n for (var i = 0; i < colIndex; i++) {\n prevColumn = this.columnIn[i];\n colRect.x += prevColumn.width;\n colRect.x += prevColumn.space;\n }\n }\n }\n return colRect;\n };\n return ColumnLayout;\n}());\nexport { ColumnLayout };\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WListFormat } from '../../implementation/format/list-format';\n/**\n * The Bullets and Numbering dialog is used to apply list format for a paragraph style.\n */\nvar BulletsAndNumberingDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function BulletsAndNumberingDialog(documentHelper) {\n var _this = this;\n this.isBullet = false;\n /* eslint-disable */\n /**\n * @param args\n * @private\n */\n this.numberListClick = function (args) {\n _this.isBullet = false;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-de-list-numbered-none')) {\n _this.numberFormat = undefined;\n _this.listLevelPattern = undefined;\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-number-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'Arabic';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpRoman';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-up-letter')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'UpLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-letter-brace')) {\n _this.numberFormat = '%1)';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-numbered-low-letter-dot')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowLetter';\n }\n else if (args.currentTarget.classList.contains('e-de-list-numbered-low-roman')) {\n _this.numberFormat = '%1.';\n _this.listLevelPattern = 'LowRoman';\n }\n };\n /**\n * @param args\n * @private\n */\n this.bulletListClick = function (args) {\n _this.isBullet = true;\n _this.setActiveElement(args);\n if (args.currentTarget.classList.contains('e-bullet-none')) {\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n }\n else if (args.currentTarget.classList.contains('e-bullet-dot')) {\n _this.symbol = String.fromCharCode(61623);\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-circle')) {\n _this.symbol = String.fromCharCode(61551) + String.fromCharCode(32);\n _this.fontFamily = 'Symbol';\n }\n else if (args.currentTarget.classList.contains('e-bullet-square')) {\n _this.symbol = String.fromCharCode(61607);\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-flower')) {\n _this.symbol = String.fromCharCode(61558);\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-arrow')) {\n _this.symbol = String.fromCharCode(61656);\n _this.fontFamily = 'Wingdings';\n }\n else if (args.currentTarget.classList.contains('e-bullet-tick')) {\n _this.symbol = String.fromCharCode(61692);\n _this.fontFamily = 'Wingdings';\n }\n };\n /* eslint-enable */\n /**\n * @private\n * @returns {void}\n */\n this.loadNumberingBulletDialog = function () {\n //Load\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeNumberingBulletDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.isBullet = false;\n _this.listLevelPattern = undefined;\n _this.numberFormat = undefined;\n _this.symbol = undefined;\n _this.fontFamily = undefined;\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onOkButtonClick = function () {\n if (_this.documentHelper.owner.documentHelper.lists.length > 0) {\n /* eslint-disable-next-line max-len */\n _this.listFormat.list.listId = _this.documentHelper.owner.documentHelper.lists[_this.documentHelper.owner.documentHelper.lists.length - 1].listId + 1;\n _this.listFormat.listId = _this.listFormat.list.listId;\n }\n else {\n _this.listFormat.list.listId = 0;\n _this.listFormat.listId = 0;\n }\n if (_this.documentHelper.owner.documentHelper.abstractLists.length > 0) {\n /* eslint-disable-next-line max-len */\n _this.abstractList.abstractListId = _this.documentHelper.owner.documentHelper.abstractLists[_this.documentHelper.owner.documentHelper.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n _this.abstractList.abstractListId = 0;\n }\n _this.listFormat.list.abstractListId = _this.abstractList.abstractListId;\n var listLevel = new WListLevel(_this.abstractList);\n listLevel.listLevelPattern = !isNullOrUndefined(_this.listLevelPattern) ? _this.listLevelPattern : 'Bullet';\n listLevel.numberFormat = _this.isBullet ? _this.symbol : _this.numberFormat;\n if (listLevel.listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n listLevel.characterFormat.fontFamily = !isNullOrUndefined(_this.fontFamily) ? _this.fontFamily : 'Verdana';\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n _this.abstractList.levels.push(listLevel);\n _this.listFormat.listLevelNumber = 0;\n _this.listFormat.list.abstractList = _this.abstractList;\n _this.documentHelper.hideDialog();\n };\n this.documentHelper = documentHelper;\n }\n /**\n * @private\n * @returns {string} Returns module name\n */\n BulletsAndNumberingDialog.prototype.getModuleName = function () {\n return 'BulletsAndNumberingDialog';\n };\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.initNumberingBulletDialog = function (locale) {\n var id = this.documentHelper.owner.containerId;\n this.target = createElement('div', { id: id + '_insertNumberBulletDialog', className: 'e-de-number-bullet-dlg' });\n var tabTarget = createElement('div', { id: id + '_tabNumberBulletDialog', className: 'e-de-tab-number-bullet-dlg' });\n this.target.appendChild(tabTarget);\n this.createNumberList(id, locale);\n this.createBulletList(id, locale);\n //Initialize Tab component\n this.tabObj = new Tab({\n items: [\n {\n header: { 'text': createElement('div', { innerHTML: locale.getConstant('Numbering') }) },\n content: this.numberListDiv\n },\n {\n header: { 'text': createElement('div', { innerHTML: locale.getConstant('Bullets') }) },\n content: this.bulletListDiv\n }\n ],\n heightAdjustMode: 'None',\n width: 'auto',\n selecting: this.onTabSelect.bind(this)\n });\n this.tabObj.isStringTemplate = true;\n //Render initialized Tab component\n this.tabObj.appendTo(tabTarget);\n };\n BulletsAndNumberingDialog.prototype.onTabSelect = function (args) {\n args.preventFocus = true;\n if (args.selectingIndex === 1) {\n this.bulletListDiv.style.display = 'block';\n }\n };\n BulletsAndNumberingDialog.prototype.createNumberList = function (id, locale) {\n this.numberListDiv = createElement('div', { className: 'e-de-style-numbered-list', id: id + '_Number' });\n var numberListDiv = this.numberListDiv;\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;',\n id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n numberListDiv.appendChild(ulTag);\n var numberedNone = this.createNumberNoneListTag(ulTag, locale);\n var numberedNumberDot = this.createNumberListTag(ulTag, '1.', '2.', '3.', 'e-de-list-numbered-number-dot');\n var numberedNumberBrace = this.createNumberListTag(ulTag, '1)', '2)', '3)', 'e-de-list-numbered-number-brace');\n var numberedUpRoman = this.createNumberListTag(ulTag, 'I.', 'II.', 'III.', 'e-de-list-numbered-up-roman');\n var numberedUpLettter = this.createNumberListTag(ulTag, 'A.', 'B.', 'C.', 'e-de-list-numbered-up-letter');\n var numberedLowLetterDot = this.createNumberListTag(ulTag, 'a.', 'b.', 'c.', 'e-de-numbered-low-letter-dot');\n var numberedLowLetterBrace = this.createNumberListTag(ulTag, 'a)', 'b)', 'c)', 'e-de-list-numbered-low-letter-brace');\n var numberedLowRoman = this.createNumberListTag(ulTag, 'i.', 'ii.', 'iii.', 'e-de-list-numbered-low-roman');\n numberedNone.addEventListener('click', this.numberListClick);\n numberedNumberDot.addEventListener('click', this.numberListClick);\n numberedNumberBrace.addEventListener('click', this.numberListClick);\n numberedUpRoman.addEventListener('click', this.numberListClick);\n numberedUpLettter.addEventListener('click', this.numberListClick);\n numberedLowLetterBrace.addEventListener('click', this.numberListClick);\n numberedLowLetterDot.addEventListener('click', this.numberListClick);\n numberedLowRoman.addEventListener('click', this.numberListClick);\n this.target.appendChild(numberListDiv);\n };\n BulletsAndNumberingDialog.prototype.createNumberListTag = function (ulTag, text1, text2, text3, className) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
' + text1 + '
' + text2 + '';\n innerHTML += '
' + text3 + '
';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createNumberNoneListTag = function (ulTag, locale) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-menuitem-md e-de-list-items e-de-list-item-size e-de-list-numbered-none'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
' + locale.getConstant('None') + '
';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-list-header-presetmenu',\n id: 'e-de-ui-zlist0', innerHTML: innerHTML\n });\n liTag.style.cssFloat = 'left';\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletListTag = function (ulTag, iconCss, className, locale) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-ui-wfloating-menuitem e-de-ui-wfloating-bullet-menuitem-md e-de-list-items e-de-list-item-size ' + className\n });\n ulTag.appendChild(liTag);\n var isNone = className === 'e-bullet-none';\n var liInnerDiv = createElement('div', {\n className: 'e-de-ui-bullet-list-header-presetmenu e-de-bullet-icon-size',\n styles: isNone ? 'font-size:9px;text-align: center;top: 13px;left:-2px;line-height:normal;position: relative' : ''\n });\n var liNextDiv = createElement('div', { className: !isNone ? iconCss : '', innerHTML: isNone ? locale.getConstant('None') : '' });\n liInnerDiv.appendChild(liNextDiv);\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n BulletsAndNumberingDialog.prototype.createBulletList = function (id, locale) {\n this.bulletListDiv = createElement('div', { className: 'e-de-ui-bullet-list-header-presetmenu', id: id + '_Bullet' });\n var bulletListDiv = this.bulletListDiv;\n bulletListDiv.style.display = 'none';\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;', id: 'listMenu',\n className: 'e-de-ui-wfloating-menu e-de-ui-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n bulletListDiv.appendChild(ulTag);\n var bulletNone = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-none e-de-bullet-icons', 'e-bullet-none', locale);\n var bulletDot = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-dot e-de-bullet-icons', 'e-bullet-dot');\n var bulletCircle = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-circle e-de-bullet-icons', 'e-bullet-circle');\n var bulletSquare = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-square e-de-bullet-icons', 'e-bullet-square');\n var bulletFlower = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-flower e-de-bullet-icons', 'e-bullet-flower');\n var bulletArrow = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-arrow e-de-bullet-icons', 'e-bullet-arrow');\n var bulletTick = this.createBulletListTag(ulTag, 'e-de-icon-bullet-list-tick e-de-bullet-icons', 'e-bullet-tick');\n bulletNone.addEventListener('click', this.bulletListClick);\n bulletDot.addEventListener('click', this.bulletListClick);\n bulletCircle.addEventListener('click', this.bulletListClick);\n bulletSquare.addEventListener('click', this.bulletListClick);\n bulletFlower.addEventListener('click', this.bulletListClick);\n bulletArrow.addEventListener('click', this.bulletListClick);\n bulletTick.addEventListener('click', this.bulletListClick);\n this.target.appendChild(bulletListDiv);\n };\n /**\n * @private\n * @param {WListFormat} listFormat - Specifies the list format.\n * @param {WAbstractList} abstractList - Specifies the abstract list.\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.showNumberBulletDialog = function (listFormat, abstractList) {\n if (!isNullOrUndefined(listFormat)) {\n this.listFormat = listFormat;\n }\n else {\n this.listFormat = new WListFormat();\n }\n if (isNullOrUndefined(this.listFormat.list)) {\n this.listFormat.list = new WList();\n }\n if (!isNullOrUndefined(abstractList)) {\n this.abstractList = abstractList;\n }\n else {\n this.abstractList = new WAbstractList();\n }\n var locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n locale.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initNumberingBulletDialog(locale);\n }\n this.documentHelper.dialog.header = locale.getConstant('Numbering and Bullets');\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadNumberingBulletDialog;\n this.documentHelper.dialog.close = this.closeNumberingBulletDialog;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-numbering-bullet-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-numbering-bullet-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n this.tabObj.refresh();\n };\n BulletsAndNumberingDialog.prototype.setActiveElement = function (args) {\n var html = args.currentTarget.parentElement;\n for (var i = 0; i < html.childElementCount; i++) {\n if (html.childNodes[i].classList.contains('e-de-list-active')) {\n html.childNodes[i].classList.remove('e-de-list-active');\n }\n }\n args.currentTarget.classList.add('e-de-list-active');\n };\n /**\n * @private\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.unWireEventsAndBindings = function () {\n //Unwire events\n };\n /**\n * @private\n * @returns {void}\n */\n BulletsAndNumberingDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (this.listFormat) {\n this.listFormat.destroy();\n this.listFormat = undefined;\n }\n if (this.tabObj) {\n this.tabObj.destroy();\n this.tabObj = undefined;\n }\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n if (this.target && this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[parseInt(m.toString(), 10)]);\n m--;\n }\n this.target = undefined;\n }\n this.bulletListDiv = undefined;\n this.numberListDiv = undefined;\n };\n return BulletsAndNumberingDialog;\n}());\nexport { BulletsAndNumberingDialog };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Print class\n */\nvar Print = /** @class */ (function () {\n function Print() {\n var _this = this;\n this.windowPrint = undefined;\n this.closePrintWindow = function () {\n if (_this.windowPrint && !_this.windowPrint.closed) {\n _this.windowPrint.close();\n }\n };\n }\n Print.prototype.getModuleName = function () {\n return 'Print';\n };\n /**\n * Prints the current viewer\n *\n * @private\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @param {Window} printWindow - Specifies the print window.\n * @returns {void}\n */\n Print.prototype.print = function (documentHelper, printWindow) {\n this.printWindow(documentHelper, navigator !== undefined ? navigator.userAgent : \"\", printWindow);\n };\n /**\n * Opens print window and displays current page to print.\n *\n * @private\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @param {string} browserUserAgent - Specifies the browser user agent.\n * @param {Window} printWindow - Specifies the print window.\n * @returns {void}\n */\n Print.prototype.printWindow = function (documentHelper, browserUserAgent, printWindow) {\n var height = this.getPageHeight(documentHelper.pages);\n var width = this.getPageWidth(documentHelper.pages);\n var printElement = document.createElement('div');\n printElement.style.width = '100%';\n printElement.style.height = '100%';\n printElement.style.overflow = 'scroll';\n // Rendering canvas to print\n this.generatePrintContent(documentHelper, printElement);\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n this.windowPrint = printWindow;\n var pageSize = width.toString() + 'px ' + height.toString() + 'px';\n if (width > height) {\n pageSize = 'landscape';\n }\n if (browserUserAgent.indexOf('Chrome') !== -1) {\n // Chrome\n printWindow.document.write('');\n printWindow.document.write('' + documentHelper.owner.documentName + '
');\n }\n else if (browserUserAgent.indexOf('Firefox') !== -1) {\n // Firefox\n printWindow.document.write('');\n printWindow.document.write('' + documentHelper.owner.documentName + '
');\n }\n else {\n // Internet Explorer and Edge\n printWindow.document.write('' + documentHelper.owner.documentName + '
');\n }\n printWindow.document.write(printElement.innerHTML + '
');\n printElement = undefined;\n printWindow.document.close();\n printWindow.focus();\n window.addEventListener('beforeunload', this.closePrintWindow);\n var interval = Number(setInterval(function () {\n // eslint-disable-next-line\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500));\n };\n /**\n * Generate Document Image.\n *\n * @param documentHelper\n * @param pageNumber\n * @param imageType\n * @private\n */\n Print.prototype.exportAsImage = function (documentHelper, pageNumber, imageType) {\n var image;\n if (!isNullOrUndefined(pageNumber) && pageNumber <= documentHelper.pages.length && pageNumber >= 1) {\n var printPage = documentHelper.pages[(pageNumber - 1)];\n var pgHeight = printPage.boundingRectangle.height;\n var pgWidth = printPage.boundingRectangle.width;\n documentHelper.render.isPrinting = true;\n documentHelper.render.renderWidgets(printPage, 0, 0, 0, 0);\n //get the image data from the canvas\n var imageData = documentHelper.render.pageCanvas.toDataURL(imageType, 1);\n documentHelper.render.isPrinting = false;\n image = new Image();\n image.src = imageData;\n // tslint:disable-next-line:max-line-length\n image.setAttribute('style', 'margin:0px;display:block;width:' + pgWidth.toString() + 'px;height:' + pgHeight.toString() + 'px;');\n }\n return image;\n };\n /**\n * Generates print content.\n *\n * @private\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @param {HTMLDivElement} element - Specifies the element.\n * @returns {void}\n */\n Print.prototype.generatePrintContent = function (documentHelper, element) {\n // Rendering canvas to print\n var htmlString = '';\n for (var i = 0; i < documentHelper.pages.length; i++) {\n var page = documentHelper.pages[i];\n var pageHeight = page.boundingRectangle.height;\n var pageWidth = page.boundingRectangle.width;\n documentHelper.render.isPrinting = true;\n documentHelper.render.renderWidgets(page, 0, 0, pageWidth, 0);\n var canvasURL = documentHelper.render.pageCanvas.toDataURL();\n documentHelper.render.isPrinting = false;\n var breakstring = (i == documentHelper.pages.length - 1) ? '' : '
';\n htmlString += '
' + breakstring;\n }\n element.innerHTML = htmlString;\n };\n /**\n * Gets page width.\n *\n * @private\n * @param {Page} pages - Specifies the pages.\n * @returns {number} - Returns the page width.\n */\n Print.prototype.getPageWidth = function (pages) {\n var width = 0;\n for (var i = 0; i < pages.length; i++) {\n if (width < pages[i].boundingRectangle.width) {\n width = pages[i].boundingRectangle.width;\n }\n }\n return width;\n };\n /**\n * Gets page height.\n *\n * @private\n * @param {Page} pages - Specifies the pages.\n * @returns {number} - Returns the page height.\n */\n Print.prototype.getPageHeight = function (pages) {\n var height = 0;\n for (var i = 0; i < pages.length; i++) {\n if (height < pages[i].boundingRectangle.height) {\n height = pages[i].boundingRectangle.height;\n }\n }\n return height;\n };\n /**\n * @private\n * @returns {void}\n */\n Print.prototype.destroy = function () {\n window.removeEventListener('beforeunload', this.closePrintWindow);\n this.windowPrint = undefined;\n return;\n };\n return Print;\n}());\nexport { Print };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Collection, Browser } from '@syncfusion/ej2-base';\n/**\n * Defines the appearance of the connectors.\n */\nvar Connector = /** @class */ (function (_super) {\n __extends(Connector, _super);\n function Connector() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Line')\n ], Connector.prototype, \"type\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Connector.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Connector.prototype, \"length\", void 0);\n __decorate([\n Property('')\n ], Connector.prototype, \"dashArray\", void 0);\n return Connector;\n}(ChildProperty));\nexport { Connector };\n/**\n * Configures the borders in the chart title.\n */\nvar titleBorder = /** @class */ (function (_super) {\n __extends(titleBorder, _super);\n function titleBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('transparent')\n ], titleBorder.prototype, \"color\", void 0);\n __decorate([\n Property(0)\n ], titleBorder.prototype, \"width\", void 0);\n __decorate([\n Property(0.8)\n ], titleBorder.prototype, \"cornerRadius\", void 0);\n return titleBorder;\n}(ChildProperty));\nexport { titleBorder };\n/**\n * Configures the title settings in chart.\n */\nvar titleSettings = /** @class */ (function (_super) {\n __extends(titleSettings, _super);\n function titleSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Normal')\n ], titleSettings.prototype, \"fontStyle\", void 0);\n __decorate([\n Property('15px')\n ], titleSettings.prototype, \"size\", void 0);\n __decorate([\n Property('500')\n ], titleSettings.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('')\n ], titleSettings.prototype, \"color\", void 0);\n __decorate([\n Property('Center')\n ], titleSettings.prototype, \"textAlignment\", void 0);\n __decorate([\n Property('Segoe UI')\n ], titleSettings.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(1)\n ], titleSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('Wrap')\n ], titleSettings.prototype, \"textOverflow\", void 0);\n __decorate([\n Property('Top')\n ], titleSettings.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], titleSettings.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], titleSettings.prototype, \"y\", void 0);\n __decorate([\n Property('transparent')\n ], titleSettings.prototype, \"background\", void 0);\n __decorate([\n Complex({}, titleBorder)\n ], titleSettings.prototype, \"border\", void 0);\n return titleSettings;\n}(ChildProperty));\nexport { titleSettings };\n/**\n * Configures the location for the legend.\n */\nvar Location = /** @class */ (function (_super) {\n __extends(Location, _super);\n function Location() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Location.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Location.prototype, \"y\", void 0);\n return Location;\n}(ChildProperty));\nexport { Location };\n/**\n * Configures the fonts in charts.\n */\nvar Font = /** @class */ (function (_super) {\n __extends(Font, _super);\n function Font() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontStyle\", void 0);\n __decorate([\n Property('16px')\n ], Font.prototype, \"size\", void 0);\n __decorate([\n Property('Normal')\n ], Font.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('')\n ], Font.prototype, \"color\", void 0);\n __decorate([\n Property('Center')\n ], Font.prototype, \"textAlignment\", void 0);\n __decorate([\n Property('Segoe UI')\n ], Font.prototype, \"fontFamily\", void 0);\n __decorate([\n Property(1)\n ], Font.prototype, \"opacity\", void 0);\n __decorate([\n Property('Wrap')\n ], Font.prototype, \"textOverflow\", void 0);\n return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the chart.\n */\nvar Border = /** @class */ (function (_super) {\n __extends(Border, _super);\n function Border() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], Border.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], Border.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], Border.prototype, \"dashArray\", void 0);\n return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the marker position in the chart.\n */\nvar Offset = /** @class */ (function (_super) {\n __extends(Offset, _super);\n function Offset() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Offset.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], Offset.prototype, \"y\", void 0);\n return Offset;\n}(ChildProperty));\nexport { Offset };\n/**\n * Configures the chart area.\n */\nvar ChartArea = /** @class */ (function (_super) {\n __extends(ChartArea, _super);\n function ChartArea() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({}, Border)\n ], ChartArea.prototype, \"border\", void 0);\n __decorate([\n Property('transparent')\n ], ChartArea.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], ChartArea.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], ChartArea.prototype, \"backgroundImage\", void 0);\n __decorate([\n Property(null)\n ], ChartArea.prototype, \"width\", void 0);\n return ChartArea;\n}(ChildProperty));\nexport { ChartArea };\n/**\n * Configures the chart margins.\n */\nvar Margin = /** @class */ (function (_super) {\n __extends(Margin, _super);\n function Margin() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(Browser.isDevice ? 5 : 10)\n ], Margin.prototype, \"left\", void 0);\n __decorate([\n Property(Browser.isDevice ? 5 : 10)\n ], Margin.prototype, \"right\", void 0);\n __decorate([\n Property(Browser.isDevice ? 5 : 10)\n ], Margin.prototype, \"top\", void 0);\n __decorate([\n Property(Browser.isDevice ? 5 : 10)\n ], Margin.prototype, \"bottom\", void 0);\n return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the chart legend container padding.\n */\nvar ContainerPadding = /** @class */ (function (_super) {\n __extends(ContainerPadding, _super);\n function ContainerPadding() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ContainerPadding.prototype, \"left\", void 0);\n __decorate([\n Property(0)\n ], ContainerPadding.prototype, \"right\", void 0);\n __decorate([\n Property(0)\n ], ContainerPadding.prototype, \"top\", void 0);\n __decorate([\n Property(0)\n ], ContainerPadding.prototype, \"bottom\", void 0);\n return ContainerPadding;\n}(ChildProperty));\nexport { ContainerPadding };\n/**\n * Configures the animation behavior for chart series.\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], Animation.prototype, \"enable\", void 0);\n __decorate([\n Property(1000)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Specifies the indexes of the series and the point.\n *\n * @public\n */\nvar Indexes = /** @class */ (function (_super) {\n __extends(Indexes, _super);\n function Indexes() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], Indexes.prototype, \"series\", void 0);\n __decorate([\n Property(0)\n ], Indexes.prototype, \"point\", void 0);\n return Indexes;\n}(ChildProperty));\nexport { Indexes };\n/**\n * Column series rounded corner options.\n */\nvar CornerRadius = /** @class */ (function (_super) {\n __extends(CornerRadius, _super);\n function CornerRadius() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"topRight\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomLeft\", void 0);\n __decorate([\n Property(0)\n ], CornerRadius.prototype, \"bottomRight\", void 0);\n return CornerRadius;\n}(ChildProperty));\nexport { CornerRadius };\n/**\n * @private\n */\nvar Index = /** @class */ (function () {\n function Index(seriesIndex, pointIndex) {\n this.series = seriesIndex;\n this.point = pointIndex;\n }\n return Index;\n}());\nexport { Index };\n/**\n * Configures the empty Points of series\n */\nvar EmptyPointSettings = /** @class */ (function (_super) {\n __extends(EmptyPointSettings, _super);\n function EmptyPointSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], EmptyPointSettings.prototype, \"fill\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 0 }, Border)\n ], EmptyPointSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Gap')\n ], EmptyPointSettings.prototype, \"mode\", void 0);\n return EmptyPointSettings;\n}(ChildProperty));\nexport { EmptyPointSettings };\n/**\n * Configures the drag settings of series.\n */\nvar DragSettings = /** @class */ (function (_super) {\n __extends(DragSettings, _super);\n function DragSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DragSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], DragSettings.prototype, \"minY\", void 0);\n __decorate([\n Property(null)\n ], DragSettings.prototype, \"maxY\", void 0);\n __decorate([\n Property(null)\n ], DragSettings.prototype, \"fill\", void 0);\n return DragSettings;\n}(ChildProperty));\nexport { DragSettings };\n/**\n * Options to customize the center label of the pie and doughnut chart.\n *\n * @default {}\n */\nvar CenterLabel = /** @class */ (function (_super) {\n __extends(CenterLabel, _super);\n function CenterLabel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], CenterLabel.prototype, \"text\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: '16px', fontStyle: 'Normal', fontWeight: '600', color: null }, Font)\n ], CenterLabel.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], CenterLabel.prototype, \"hoverTextFormat\", void 0);\n return CenterLabel;\n}(ChildProperty));\nexport { CenterLabel };\n/**\n * Configures the tooltips in the chart.\n *\n * @public\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n __extends(TooltipSettings, _super);\n function TooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableMarker\", void 0);\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"shared\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"header\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: '12px', fontStyle: 'Normal', fontWeight: null, color: null }, Font)\n ], TooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], TooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(300)\n ], TooltipSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(1000)\n ], TooltipSettings.prototype, \"fadeOutDuration\", void 0);\n __decorate([\n Property('Move')\n ], TooltipSettings.prototype, \"fadeOutMode\", void 0);\n __decorate([\n Property(false)\n ], TooltipSettings.prototype, \"enableTextWrap\", void 0);\n __decorate([\n Property(true)\n ], TooltipSettings.prototype, \"showNearestPoint\", void 0);\n __decorate([\n Complex({ color: null, width: null }, Border)\n ], TooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ x: null, y: null }, Location)\n ], TooltipSettings.prototype, \"location\", void 0);\n return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\nvar StockTooltipSettings = /** @class */ (function (_super) {\n __extends(StockTooltipSettings, _super);\n function StockTooltipSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], StockTooltipSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(true)\n ], StockTooltipSettings.prototype, \"enableMarker\", void 0);\n __decorate([\n Property(false)\n ], StockTooltipSettings.prototype, \"shared\", void 0);\n __decorate([\n Property(null)\n ], StockTooltipSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], StockTooltipSettings.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], StockTooltipSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: '12px', fontStyle: 'Normal', fontWeight: null, color: null }, Font)\n ], StockTooltipSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], StockTooltipSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], StockTooltipSettings.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], StockTooltipSettings.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(300)\n ], StockTooltipSettings.prototype, \"duration\", void 0);\n __decorate([\n Property(1000)\n ], StockTooltipSettings.prototype, \"fadeOutDuration\", void 0);\n __decorate([\n Property('Move')\n ], StockTooltipSettings.prototype, \"fadeOutMode\", void 0);\n __decorate([\n Property(false)\n ], StockTooltipSettings.prototype, \"enableTextWrap\", void 0);\n __decorate([\n Property(true)\n ], StockTooltipSettings.prototype, \"showNearestPoint\", void 0);\n __decorate([\n Complex({ color: null, width: null }, Border)\n ], StockTooltipSettings.prototype, \"border\", void 0);\n __decorate([\n Property('Fixed')\n ], StockTooltipSettings.prototype, \"position\", void 0);\n return StockTooltipSettings;\n}(ChildProperty));\nexport { StockTooltipSettings };\n/**\n * Configures the button settings in period selector.\n */\nvar Periods = /** @class */ (function (_super) {\n __extends(Periods, _super);\n function Periods() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Years')\n ], Periods.prototype, \"intervalType\", void 0);\n __decorate([\n Property(1)\n ], Periods.prototype, \"interval\", void 0);\n __decorate([\n Property(null)\n ], Periods.prototype, \"text\", void 0);\n __decorate([\n Property(false)\n ], Periods.prototype, \"selected\", void 0);\n return Periods;\n}(ChildProperty));\nexport { Periods };\n/**\n * Configures the period selector settings.\n */\nvar PeriodSelectorSettings = /** @class */ (function (_super) {\n __extends(PeriodSelectorSettings, _super);\n function PeriodSelectorSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(43)\n ], PeriodSelectorSettings.prototype, \"height\", void 0);\n __decorate([\n Property('Bottom')\n ], PeriodSelectorSettings.prototype, \"position\", void 0);\n __decorate([\n Collection([], Periods)\n ], PeriodSelectorSettings.prototype, \"periods\", void 0);\n return PeriodSelectorSettings;\n}(ChildProperty));\nexport { PeriodSelectorSettings };\n","/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * To import utils\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar SvgRenderer = /** @class */ (function () {\n /* End-Properties */\n function SvgRenderer(rootID) {\n //Internal Variables\n this.svgLink = 'http://www.w3.org/2000/svg';\n this.rootId = rootID;\n }\n // method to get the attributes value\n // tslint:disable-next-line:no-any\n SvgRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n }; /* tslint:enable */\n /**\n * To create a Html5 SVG element\n *\n * @param {SVGAttributes} options - Options to create SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createSvg = function (options) {\n if (isNullOrUndefined(options.id)) {\n options.id = this.rootId + '_svg';\n }\n this.svgObj = document.getElementById(options.id);\n if (isNullOrUndefined(document.getElementById(options.id))) {\n this.svgObj = document.createElementNS(this.svgLink, 'svg');\n }\n this.svgObj = this.setElementAttributes(options, this.svgObj);\n this.setSVGSize(options.width, options.height);\n return this.svgObj;\n };\n // method to set the height and width for the SVG element\n SvgRenderer.prototype.setSVGSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width) || this.width <= 0) {\n this.svgObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.svgObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height) || this.height <= 0) {\n this.svgObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.svgObj.setAttribute('height', this.height.toString());\n }\n };\n /**\n * To draw a path\n *\n * @param {PathAttributes} options - Options to draw a path in SVG\n * @returns {Element} It returns a appropriate path\n */\n SvgRenderer.prototype.drawPath = function (options) {\n var path = document.getElementById(options.id);\n if (path === null) {\n path = document.createElementNS(this.svgLink, 'path');\n }\n path = this.setElementAttributes(options, path);\n return path;\n };\n /**\n * To draw a line\n *\n * @param {LineAttributes} options - Options to draw a line in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawLine = function (options) {\n var line = document.getElementById(options.id);\n if (line === null) {\n line = document.createElementNS(this.svgLink, 'line');\n }\n line = this.setElementAttributes(options, line);\n return line;\n };\n /**\n * To draw a rectangle\n *\n * @param {BaseAttibutes} options - Required options to draw a rectangle in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawRectangle = function (options) {\n var rectangle = document.getElementById(options.id);\n if (rectangle === null) {\n rectangle = document.createElementNS(this.svgLink, 'rect');\n }\n rectangle = this.setElementAttributes(options, rectangle);\n return rectangle;\n };\n /**\n * To draw a circle\n *\n * @param {CircleAttributes} options - Required options to draw a circle in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawCircle = function (options) {\n var circle = document.getElementById(options.id);\n if (circle === null) {\n circle = document.createElementNS(this.svgLink, 'circle');\n }\n circle = this.setElementAttributes(options, circle);\n return circle;\n };\n /**\n * To draw a polyline\n *\n * @param {PolylineAttributes} options - Options required to draw a polyline\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawPolyline = function (options) {\n var polyline = document.getElementById(options.id);\n if (polyline === null) {\n polyline = document.createElementNS(this.svgLink, 'polyline');\n }\n polyline = this.setElementAttributes(options, polyline);\n return polyline;\n };\n /**\n * To draw an ellipse\n *\n * @param {EllipseAttributes} options - Options required to draw an ellipse\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawEllipse = function (options) {\n var ellipse = document.getElementById(options.id);\n if (ellipse === null) {\n ellipse = document.createElementNS(this.svgLink, 'ellipse');\n }\n ellipse = this.setElementAttributes(options, ellipse);\n return ellipse;\n };\n /**\n * To draw a polygon\n *\n * @param {PolylineAttributes} options - Options needed to draw a polygon in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawPolygon = function (options) {\n var polygon = document.getElementById(options.id);\n if (polygon === null) {\n polygon = document.createElementNS(this.svgLink, 'polygon');\n }\n polygon = this.setElementAttributes(options, polygon);\n return polygon;\n };\n /**\n * To draw an image\n *\n * @param {ImageAttributes} options - Required options to draw an image in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawImage = function (options) {\n var img = document.createElementNS(this.svgLink, 'image');\n img.setAttributeNS(null, 'height', options.height.toString());\n img.setAttributeNS(null, 'width', options.width.toString());\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', options.href);\n img.setAttributeNS(null, 'x', options.x.toString());\n img.setAttributeNS(null, 'y', options.y.toString());\n img.setAttributeNS(null, 'id', options.id);\n img.setAttributeNS(null, 'visibility', options.visibility);\n if (!isNullOrUndefined(this.getOptionValue(options, 'clip-path'))) {\n img.setAttributeNS(null, 'clip-path', this.getOptionValue(options, 'clip-path'));\n }\n if (!isNullOrUndefined(options.preserveAspectRatio)) {\n img.setAttributeNS(null, 'preserveAspectRatio', options.preserveAspectRatio);\n }\n return img;\n };\n /**\n * To draw a text\n *\n * @param {TextAttributes} options - Options needed to draw a text in SVG\n * @param {string} label - Label of the text\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createText = function (options, label) {\n var text = document.createElementNS(this.svgLink, 'text');\n text = this.setElementAttributes(options, text);\n if (!isNullOrUndefined(label)) {\n text.textContent = label;\n }\n return text;\n };\n /**\n * To create a tSpan\n *\n * @param {TextAttributes} options - Options to create tSpan\n * @param {string} label - The text content which is to be rendered in the tSpan\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createTSpan = function (options, label) {\n var tSpan = document.createElementNS(this.svgLink, 'tspan');\n tSpan = this.setElementAttributes(options, tSpan);\n if (!isNullOrUndefined(label)) {\n tSpan.textContent = label;\n }\n return tSpan;\n };\n /**\n * To create a title\n *\n * @param {string} text - The text content which is to be rendered in the title\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createTitle = function (text) {\n var title = document.createElementNS(this.svgLink, 'title');\n title.textContent = text;\n return title;\n };\n /**\n * To create defs element in SVG\n *\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createDefs = function () {\n var defs = document.createElementNS(this.svgLink, 'defs');\n return defs;\n };\n /**\n * To create clip path in SVG\n *\n * @param {BaseAttibutes} options - Options needed to create clip path\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createClipPath = function (options) {\n var clipPath = document.createElementNS(this.svgLink, 'clipPath');\n clipPath = this.setElementAttributes(options, clipPath);\n return clipPath;\n };\n /**\n * To create foreign object in SVG\n *\n * @param {BaseAttibutes} options - Options needed to create foreign object\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createForeignObject = function (options) {\n var foreignObject = document.createElementNS(this.svgLink, 'foreignObject');\n foreignObject = this.setElementAttributes(options, foreignObject);\n return foreignObject;\n };\n /**\n * To create group element in SVG\n *\n * @param {BaseAttibutes} options - Options needed to create group\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createGroup = function (options) {\n var group = document.createElementNS(this.svgLink, 'g');\n group = this.setElementAttributes(options, group);\n return group;\n };\n /**\n * To create pattern in SVG\n *\n * @param {PatternAttributes} options - Required options to create pattern in SVG\n * @param {string} element - Specifies the name of the pattern\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createPattern = function (options, element) {\n var pattern = document.createElementNS(this.svgLink, element);\n pattern = this.setElementAttributes(options, pattern);\n return pattern;\n };\n /**\n * To create radial gradient in SVG\n *\n * @param {string[]} colors - Specifies the colors required to create radial gradient\n * @param {string} name - Specifies the name of the gradient\n * @param {RadialGradient} options - value for radial gradient\n * @returns {string} It returns color name\n */\n SvgRenderer.prototype.createRadialGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'radialGradient',\n 'cx': options.cx + '%',\n 'cy': options.cy + '%',\n 'r': options.r + '%',\n 'fx': options.fx + '%',\n 'fy': options.fy + '%'\n };\n this.drawGradient('radialGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'radialGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To create linear gradient in SVG\n *\n * @param {GradientColor[]} colors - Array of string specifies the values for color\n * @param {string} name - Specifies the name of the gradient\n * @param {LinearGradient} options - Specifies the options for gradient\n * @returns {string} It returns color name\n */\n SvgRenderer.prototype.createLinearGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'linearGradient',\n 'x1': options.x1 + '%',\n 'y1': options.y1 + '%',\n 'x2': options.x2 + '%',\n 'y2': options.y2 + '%'\n };\n this.drawGradient('linearGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'linearGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To render the gradient element in SVG\n *\n * @param {string} gradientType - Specifies the type of the gradient\n * @param {RadialGradient | LinearGradient} options - Options required to render a gradient\n * @param {string[]} colors - Array of string specifies the values for color\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawGradient = function (gradientType, options, colors) {\n var defs = this.createDefs();\n var gradient = document.createElementNS(this.svgLink, gradientType);\n gradient = this.setElementAttributes(options, gradient);\n for (var i = 0; i < colors.length; i++) {\n var stop_1 = document.createElementNS(this.svgLink, 'stop');\n stop_1.setAttribute('offset', colors[i].colorStop);\n stop_1.setAttribute('stop-color', colors[i].color);\n stop_1.setAttribute('stop-opacity', colors[i].opacity ? (colors[i].opacity) : '1');\n if (!isNullOrUndefined(colors[i].style)) {\n stop_1.style.cssText = colors[i].style;\n }\n gradient.appendChild(stop_1);\n }\n defs.appendChild(gradient);\n return defs;\n };\n /**\n * To render a clip path\n *\n * @param {BaseAttibutes} options - Options required to render a clip path\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n options.id = options.id + '_Rect';\n var rect = this.drawRectangle(options);\n clipPath.appendChild(rect);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To create circular clip path in SVG\n *\n * @param {CircleAttributes} options - Options required to create circular clip path\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawCircularClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n options.id = options.id + '_Circle';\n var circle = this.drawCircle(options);\n clipPath.appendChild(circle);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To set the attributes to the element\n *\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {Element} element - The element to which the attributes need to be set\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === 'style') {\n element.style.cssText = options[keys[i]];\n }\n else {\n element.setAttribute(keys[i], options[keys[i]]);\n }\n }\n return element;\n };\n /**\n * To create a Html5 canvas element\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n SvgRenderer.prototype.createCanvas = function () {\n return null;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\n","/* eslint-disable no-case-declarations */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * To import utils.\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar CanvasRenderer = /** @class */ (function () {\n /* End-Properties */\n function CanvasRenderer(rootID) {\n this.rootId = rootID;\n }\n // method to get the attributes value\n // tslint:disable-next-line:no-any\n CanvasRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n /* tslint:enable */\n /**\n * To create a Html5 canvas element\n *\n * @param {BaseAttibutes} options - Options to create canvas\n * @returns {HTMLCanvasElement} Creating a canvas\n */\n CanvasRenderer.prototype.createCanvas = function (options) {\n var canvasObj = document.createElement('canvas');\n canvasObj.setAttribute('id', this.rootId + '_canvas');\n this.ctx = canvasObj.getContext('2d');\n this.canvasObj = canvasObj;\n this.setCanvasSize(options.width, options.height);\n return this.canvasObj;\n };\n /**\n * To set the width and height for the Html5 canvas element\n *\n * @param {number} width - width of the canvas\n * @param {number} height - height of the canvas\n * @returns {void} Setting canvas size\n */\n CanvasRenderer.prototype.setCanvasSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width)) {\n this.canvasObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.canvasObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height)) {\n this.canvasObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.canvasObj.setAttribute('height', this.height.toString());\n }\n };\n // To set the values to the attributes\n CanvasRenderer.prototype.setAttributes = function (options) {\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n var dashArray = this.getOptionValue(options, 'stroke-dasharray');\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n this.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n this.ctx.strokeStyle = this.getOptionValue(options, 'stroke');\n };\n /**\n * To draw a line\n *\n * @param {LineAttributes} options - required options to draw a line on the canvas\n * @returns {void} To draw a line\n */\n CanvasRenderer.prototype.drawLine = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.moveTo(options.x1, options.y1);\n this.ctx.lineTo(options.x2, options.y2);\n this.ctx.stroke();\n this.ctx.restore();\n };\n /**\n * To draw a rectangle\n *\n * @param {RectAttributes} options - required options to draw a rectangle on the canvas.\n * @param {Int32Array} canvasTranslate TO get a translate value of canvas.\n * @returns {void} To draw rectangle.\n */\n CanvasRenderer.prototype.drawRectangle = function (options, canvasTranslate) {\n var canvasCtx = this.ctx;\n var cornerRadius = options.rx;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = this.getOptionValue(options, 'opacity');\n this.setAttributes(options);\n this.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n this.ctx.fillRect(options.x, options.y, options.width, options.height);\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n return (this.canvasObj);\n };\n // To draw the corner of a rectangle\n CanvasRenderer.prototype.drawCornerRadius = function (options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n this.ctx.beginPath();\n this.ctx.moveTo(x + width - cornerRadius, y);\n this.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n this.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n this.ctx.arcTo(x, y + height, x, y, cornerRadius);\n this.ctx.arcTo(x, y, x + width, y, cornerRadius);\n this.ctx.closePath();\n this.ctx.fill();\n this.ctx.stroke();\n };\n /**\n * To draw a path on the canvas\n *\n * @param {PathAttributes} options - options needed to draw path.\n * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas.\n * @returns {Element} To draw a path.\n */\n CanvasRenderer.prototype.drawPath = function (options, canvasTranslate) {\n var path = options.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n var canvasCtx = this.ctx;\n var flag = true;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = options.opacity ? options.opacity : this.getOptionValue(options, 'fill-opacity');\n this.setAttributes(options);\n for (var i = 0; i < dataSplit.length; i = i + 3) {\n var x1 = parseFloat(dataSplit[i + 1]);\n var y1 = parseFloat(dataSplit[i + 2]);\n switch (dataSplit[i]) {\n case 'M':\n if (!options.innerR && !options.cx) {\n this.ctx.moveTo(x1, y1);\n }\n break;\n case 'L':\n if (!options.innerR) {\n this.ctx.lineTo(x1, y1);\n }\n break;\n case 'Q':\n var q1 = parseFloat(dataSplit[i + 3]);\n var q2 = parseFloat(dataSplit[i + 4]);\n this.ctx.quadraticCurveTo(x1, y1, q1, q2);\n i = i + 2;\n break;\n case 'C':\n var c1 = parseFloat(dataSplit[i + 3]);\n var c2 = parseFloat(dataSplit[i + 4]);\n var c3 = parseFloat(dataSplit[i + 5]);\n var c4 = parseFloat(dataSplit[i + 6]);\n this.ctx.bezierCurveTo(x1, y1, c1, c2, c3, c4);\n i = i + 4;\n break;\n case 'A':\n if (!options.innerR) {\n if (options.cx) {\n this.ctx.arc(options.cx, options.cy, options.radius, 0, 2 * Math.PI, options.counterClockWise);\n }\n else {\n this.ctx.moveTo(options.x, options.y);\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.lineTo(options.x, options.y);\n }\n }\n else if (flag) {\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.arc(options.x, options.y, options.innerR, options.end, options.start, !options.counterClockWise);\n flag = false;\n }\n i = i + 5;\n break;\n case 'z':\n case 'Z':\n this.ctx.closePath();\n //since for loop is incremented by 3, to get next value after 'z' i is decremented for 2.\n i = i - 2;\n break;\n }\n }\n if (options.fill !== 'none' && options.fill !== undefined) {\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n }\n if (borderWidth > 0) {\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n return this.canvasObj;\n };\n /**\n * To draw a text\n *\n * @param {TextAttributes} options - options required to draw text\n * @param {string} label - Specifies the text which has to be drawn on the canvas\n * @param {number} transX - Specifies the text of translate X\n * @param {number} transY - Specifies the text of translate Y\n * @param {number} dy - Specifies the text of translate dy\n * @param {boolean} isTSpan - Specifies the boolean value of span value\n * @returns {void}\n */\n CanvasRenderer.prototype.createText = function (options, label, transX, transY, dy, isTSpan) {\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontSize = this.getOptionValue(options, 'font-size');\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n var anchor = this.getOptionValue(options, 'text-anchor');\n var opacity = options.opacity !== undefined ? options.opacity : 1;\n if (anchor === 'middle') {\n anchor = 'center';\n }\n this.ctx.save();\n this.ctx.fillStyle = options.fill;\n this.ctx.font = font;\n this.ctx.textAlign = anchor;\n this.ctx.globalAlpha = opacity;\n if (options.baseline) {\n this.ctx.textBaseline = options.baseline;\n }\n if (!isTSpan) {\n var txtlngth = 0;\n this.ctx.translate(options.x + (txtlngth / 2) + (transX ? transX : 0), options.y + (transY ? transY : 0));\n this.ctx.rotate(options.labelRotation * Math.PI / 180);\n }\n this.ctx.fillText(label, isTSpan ? options.x : 0, isTSpan ? dy : 0);\n this.ctx.restore();\n return this.canvasObj;\n };\n /**\n * To draw circle on the canvas\n *\n * @param {CircleAttributes} options - required options to draw the circle\n * @param {Int32Array} canvasTranslate Translate value of canvas\n * @returns {void}\n */\n CanvasRenderer.prototype.drawCircle = function (options, canvasTranslate) {\n var canvasCtx = this.ctx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n this.ctx.fillStyle = options.fill;\n this.ctx.globalAlpha = options.opacity;\n this.ctx.fill();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.setAttributes(options);\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n return this.canvasObj;\n };\n /**\n * To draw polyline\n *\n * @param {PolylineAttributes} options - options needed to draw polyline\n * @returns {void}\n */\n CanvasRenderer.prototype.drawPolyline = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n var points = options.points.split(' ');\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i].split(',');\n var x = parseFloat(point[0]);\n var y = parseFloat(point[1]);\n if (i === 0) {\n this.ctx.moveTo(x, y);\n }\n else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n };\n /**\n * To draw an ellipse on the canvas\n *\n * @param {EllipseAttributes} options - options needed to draw ellipse\n * @param {Int32Array} canvasTranslate Translate value of canvas\n * @returns {void}\n */\n CanvasRenderer.prototype.drawEllipse = function (options, canvasTranslate) {\n var canvasCtx = this.ctx;\n var circumference = Math.max(options.rx, options.ry);\n var scaleX = options.rx / circumference;\n var scaleY = options.ry / circumference;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.translate(options.cx, options.cy);\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.save();\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, circumference, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n this.ctx.restore();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n };\n /**\n * To draw an image\n *\n * @param {ImageAttributes} options - options required to draw an image on the canvas\n * @returns {void}\n */\n CanvasRenderer.prototype.drawImage = function (options) {\n this.ctx.save();\n var imageObj = new Image();\n if (!isNullOrUndefined(options.href)) {\n imageObj.src = options.href;\n this.ctx.drawImage(imageObj, options.x, options.y, options.width, options.height);\n }\n this.ctx.restore();\n };\n /**\n * To create a linear gradient\n *\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @returns {string} It returns color\n */\n CanvasRenderer.prototype.createLinearGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createLinearGradient(0, 0, 0, this.canvasObj.height);\n }\n var color = this.setGradientValues(colors, myGradient);\n return color;\n };\n /**\n * To create a radial gradient\n *\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @returns {string} It returns gradient color\n */\n CanvasRenderer.prototype.createRadialGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createRadialGradient(0, 0, 0, 0, 0, this.canvasObj.height);\n }\n var colorName = this.setGradientValues(colors, myGradient);\n return colorName;\n };\n // To set the gradient values\n CanvasRenderer.prototype.setGradientValues = function (colors, myGradient) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n for (var i = 0; i <= colors.length - 1; i++) {\n var color = colors[i].color;\n var newColorStop = (colors[i].colorStop).slice(0, -1);\n var stopColor = parseInt(newColorStop, 10) / 100;\n myGradient.addColorStop(stopColor, color);\n }\n colorName = myGradient.toString();\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To set the attributes to the element\n *\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {HTMLElement} element - The element to which the attributes need to be set\n * @returns {HTMLElement} It returns null value\n */\n CanvasRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n var values = Object.keys(options).map(function (key) { return options[key]; });\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], values[i]);\n }\n return null;\n };\n /**\n * To update the values of the canvas element attributes\n *\n * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n * @returns {void}\n */\n CanvasRenderer.prototype.updateCanvasAttributes = function (options) {\n this.setElementAttributes(options, this.canvasObj);\n var ctx = this.ctx;\n if (!isNullOrUndefined(this.dataUrl)) {\n var img_1 = new Image;\n img_1.onload = function () {\n ctx.drawImage(img_1, 0, 0);\n };\n img_1.src = this.dataUrl;\n }\n };\n /**\n * This method clears the given rectangle region\n *\n * @param {Rect} rect The rect parameter as passed\n */\n CanvasRenderer.prototype.clearRect = function (rect) {\n this.ctx.restore();\n this.ctx.clearRect(rect.x, rect.y, rect.width, rect.height);\n };\n /**\n * For canvas rendering in chart\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.createGroup = function () {\n return null;\n };\n /**\n * To render a clip path\n *\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.drawClipPath = function () {\n return null;\n };\n /**\n * To render a Circular clip path\n *\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.drawCircularClipPath = function () {\n return null;\n };\n /**\n * Clip method to perform clip in canvas mode\n *\n * @param {BaseAttibutes} options The canvas clip of options\n */\n CanvasRenderer.prototype.canvasClip = function (options) {\n this.ctx.save();\n this.ctx.fillStyle = 'transparent';\n this.ctx.rect(options.x, options.y, options.width, options.height);\n this.ctx.fill();\n this.ctx.clip();\n };\n /**\n * Tp restore the canvas\n */\n CanvasRenderer.prototype.canvasRestore = function () {\n this.ctx.restore();\n };\n /**\n * To draw a polygon\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.drawPolygon = function () {\n return null;\n };\n /**\n * To create defs element in SVG\n * Dummy method for using canvas/svg render in the same variable name in chart control\n *\n * @returns {Element} It returns null\n */\n CanvasRenderer.prototype.createDefs = function () {\n return null;\n };\n /**\n * To create clip path in SVG\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.createClipPath = function () {\n return null;\n };\n /**\n * To create a Html5 SVG element\n * Dummy method for using canvas/svg render in the same variable name in chart control\n *\n * @returns {Element} It returns null\n */\n CanvasRenderer.prototype.createSvg = function () {\n return null;\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer } from '../svg-render/index';\nimport { createElement, remove, merge } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n *\n * @private\n * @param {string} text To get a text\n * @param {FontModel} font To get a font of the text\n * @returns {Size} measureText\n */\nexport function measureText(text, font, themeFontStyle) {\n var breakText = text || ''; // For avoid NuLL value\n var htmlObject = document.getElementById('chartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'chartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n if (typeof (text) === 'string' && (text.indexOf('<') > -1 || text.indexOf('>') > -1)) {\n var textArray = text.split(' ');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].indexOf('
') === -1) {\n textArray[i] = textArray[i].replace(/[<>]/g, '&');\n }\n }\n text = textArray.join(' ');\n }\n htmlObject.innerHTML = (breakText.indexOf('
') > -1 || breakText.indexOf('
') > -1) ? breakText : text;\n htmlObject.style.position = 'fixed';\n htmlObject.style.fontSize = font.size || themeFontStyle.size;\n htmlObject.style.fontStyle = font.fontStyle || themeFontStyle.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily || themeFontStyle.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n var fontWidth = htmlObject.clientWidth;\n var fontHeight = htmlObject.clientHeight;\n var fontWeight = htmlObject.style.fontWeight;\n htmlObject.style.fontWeight = font.fontWeight || themeFontStyle.fontWeight;\n return new Size(htmlObject.style.fontWeight === 'bold' && fontWeight === 'normal' ? Math.max(fontWidth, htmlObject.clientWidth) : htmlObject.clientWidth, htmlObject.style.fontWeight === 'bold' && fontWeight === 'normal' ? Math.max(fontHeight, htmlObject.clientHeight) : htmlObject.clientHeight);\n}\n/** @private */\nexport function withInAreaBounds(x, y, areaBounds, width, height) {\n if (width === void 0) { width = 0; }\n if (height === void 0) { height = 0; }\n return (x >= areaBounds.x - width && x <= areaBounds.x + areaBounds.width + width && y >= areaBounds.y - height\n && y <= areaBounds.y + areaBounds.height + height);\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, controlName) {\n if (controlName === void 0) { controlName = ''; }\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n if (controlName === 'RangeNavigator') {\n if ((arrowLocation.x - arrowPadding) > width / 2) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX + arrowPadding) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x) + ' ' + height);\n }\n else {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX - arrowPadding) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + height);\n }\n }\n else {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + height);\n }\n }\n if ((arrowLocation.x - arrowPadding) > startX) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (arrowLocation.y));\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY)\n + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height) +\n ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + ((controlName === 'RangeNavigator' ? 0 : (startY + rY)) + ' L' + ' ' + (width) + ' ' + (controlName === 'RangeNavigator' ? 0 : (arrowLocation.y - arrowPadding))));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + 0) :\n direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + (tipY));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y - rY)) :\n direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + ((controlName === 'RangeNavigator' ? 0 : (startY + rY)) + ' L' + ' ' + (startX) + ' ' + (controlName === 'RangeNavigator' ? 0 : (arrowLocation.y - arrowPadding))));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + 0) :\n direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + (tipY));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y - rY)) :\n direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding));\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY) +\n ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\nvar Side = /** @class */ (function () {\n function Side(bottom, right) {\n this.isRight = right;\n this.isBottom = bottom;\n }\n return Side;\n}());\nexport { Side };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine, labelRotation) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.labelRotation = 0;\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n _this.labelRotation = labelRotation;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, role, label) {\n var renderer = new SvgRenderer('');\n var temp = calculateShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n htmlObject.setAttribute('role', role);\n htmlObject.setAttribute('aria-label', label);\n return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Plus':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path, stroke: options.fill });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path, stroke: options.fill });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path, stroke: options.fill });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path, stroke: options.fill });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nexport function textElement(options, font, color, parent, themeStyle) {\n var renderOptions = {};\n var renderer = new SvgRenderer('');\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size || themeStyle.size,\n 'font-style': font.fontStyle || themeStyle.fontStyle,\n 'font-family': font.fontFamily || themeStyle.fontFamily,\n 'font-weight': font.fontWeight || themeStyle.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n var text = typeof options.text === 'string' ? options.text : options.text[0];\n var htmlObject = renderer.createText(renderOptions, text);\n if (parent) {\n parent.appendChild(htmlObject);\n }\n return htmlObject;\n}\nvar TooltipLocation = /** @class */ (function () {\n function TooltipLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return TooltipLocation;\n}());\nexport { TooltipLocation };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable security/detect-object-injection */\n/* eslint-disable no-useless-escape */\n/* eslint-disable security/detect-non-literal-regexp */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\nimport { NotifyPropertyChanges, Property, Event, Complex, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { extend, compile as templateComplier, Component, resetBlazorTemplate, isBlazor, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { SvgRenderer } from '../svg-render/index';\nimport { ChildProperty, createElement, remove, Browser, Animation, animationMode } from '@syncfusion/ej2-base';\nimport { getTooltipThemeColor } from './interface';\nimport { Size, Rect, Side, measureText, getElement, findDirection, drawSymbol, textElement } from './helper';\nimport { removeElement, TextOption, TooltipLocation, PathOption, withInAreaBounds } from './helper';\n/**\n * Configures the fonts in charts.\n *\n * @private\n */\nvar TextStyle = /** @class */ (function (_super) {\n __extends(TextStyle, _super);\n function TextStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], TextStyle.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], TextStyle.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], TextStyle.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], TextStyle.prototype, \"opacity\", void 0);\n return TextStyle;\n}(ChildProperty));\nexport { TextStyle };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar TooltipBorder = /** @class */ (function (_super) {\n __extends(TooltipBorder, _super);\n function TooltipBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], TooltipBorder.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], TooltipBorder.prototype, \"dashArray\", void 0);\n return TooltipBorder;\n}(ChildProperty));\nexport { TooltipBorder };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar AreaBounds = /** @class */ (function (_super) {\n __extends(AreaBounds, _super);\n function AreaBounds() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"y\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"height\", void 0);\n return AreaBounds;\n}(ChildProperty));\nexport { AreaBounds };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar ToolLocation = /** @class */ (function (_super) {\n __extends(ToolLocation, _super);\n function ToolLocation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"y\", void 0);\n return ToolLocation;\n}(ChildProperty));\nexport { ToolLocation };\n/**\n * Represents the Tooltip control.\n * ```html\n *
\n * \n * ```\n *\n * @private\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the widget\n *\n * @hidden\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler.\n *\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.allowServerDataBinding = false;\n this.initPrivateVariable();\n if (!this.isCanvas) {\n this.removeSVG();\n }\n this.createTooltipElement();\n };\n Tooltip.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.themeStyle = getTooltipThemeColor(this.theme);\n this.formattedText = [];\n this.padding = 5;\n this.highlightPadding = 3;\n this.areaMargin = 10;\n this.isFirst = true;\n this.markerPoint = [];\n };\n Tooltip.prototype.removeSVG = function () {\n var svgObject = document.getElementById(this.element.id + '_svg');\n var templateObject = document.getElementById(this.element.id + 'parent_template');\n if (this.blazorTemplate) {\n resetBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate');\n }\n if (svgObject && svgObject.parentNode) {\n remove(svgObject);\n }\n if (templateObject && templateObject.parentNode) {\n remove(templateObject);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Tooltip.prototype.render = function () {\n this.fadeOuted = false;\n if (!this.template) {\n this.renderText(this.isFirst);\n var argsData = {\n cancel: false, name: 'tooltipRender', tooltip: this\n };\n this.trigger('tooltipRender', argsData);\n var markerSide = this.renderTooltipElement(this.areaBounds, this.location);\n this.drawMarker(markerSide.isBottom, markerSide.isRight, this.markerSize);\n }\n else {\n this.updateTemplateFn();\n this.createTemplate(this.areaBounds, this.location);\n }\n this.trigger('loaded', { tooltip: this });\n var element = document.getElementById('chartmeasuretext');\n if (element) {\n remove(element);\n }\n this.allowServerDataBinding = true;\n };\n Tooltip.prototype.createTooltipElement = function () {\n this.textElements = [];\n if (!this.template || this.shared) {\n // SVG element for tooltip\n if (this.enableRTL) {\n this.element.setAttribute('dir', 'ltr');\n }\n var svgObject = this.renderer.createSvg({ id: this.element.id + '_svg' });\n this.element.appendChild(svgObject);\n // Group to hold text and path.\n var groupElement = document.getElementById(this.element.id + '_group');\n if (!groupElement) {\n groupElement = this.renderer.createGroup({ id: this.element.id + '_group' });\n groupElement.setAttribute('transform', 'translate(0,0)');\n }\n svgObject.appendChild(groupElement);\n var pathElement = this.renderer.drawPath({\n 'id': this.element.id + '_path', 'stroke-width': ((this.theme === 'Fabric' || this.theme === 'Fluent' || this.theme === 'Fluent2') && !this.border.width) ? 1 : this.border.width,\n 'fill': this.fill || this.themeStyle.tooltipFill, 'opacity': ((this.theme === 'TailwindDark' || this.theme === 'Tailwind' || this.theme === 'Bootstrap5' || this.theme === 'Bootstrap5Dark' || this.theme.indexOf('Fluent2') > -1) && this.opacity === 0.75) ?\n 1 : this.opacity,\n 'stroke': this.border.color || (this.theme === 'Fabric' || this.theme === 'Fluent' || this.theme === 'Fluent2' ? '#D2D0CE' : this.border.color)\n });\n groupElement.appendChild(pathElement);\n }\n };\n Tooltip.prototype.drawMarker = function (isBottom, isRight, size) {\n if (this.shapes.length <= 0) {\n return null;\n }\n var shapeOption;\n var count = 0;\n var markerGroup = this.renderer.createGroup({ id: this.element.id + '_trackball_group' });\n var groupElement = getElement(this.element.id + '_group');\n if (!groupElement) {\n return null;\n }\n var x = ((this.enableRTL) ? this.elementSize.width - (size / 2) :\n (this.marginX * 2) + (size / 2)) + (isRight ? this.arrowPadding : 0);\n for (var _i = 0, _a = this.shapes; _i < _a.length; _i++) {\n var shape = _a[_i];\n if (shape !== 'None') {\n shapeOption = new PathOption(this.element.id + '_Trackball_' + count, this.palette[count], 1, '#cccccc', 1, null);\n if (this.markerPoint[count]) {\n var padding = 0;\n if (this.header.indexOf(' -1) {\n padding = this.header.split(//g).length + count;\n }\n var tooltipContent = (this.formattedText && this.formattedText.length >= 2)\n ? this.getTooltipTextContent(this.formattedText[1]) + \", \" + this.getTooltipTextContent(this.formattedText[0])\n : '';\n markerGroup.appendChild(drawSymbol(new TooltipLocation(x, this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : padding)), shape, new Size(size, size), '', shapeOption, \"img\", tooltipContent));\n }\n count++;\n }\n }\n groupElement.appendChild(markerGroup);\n };\n Tooltip.prototype.renderTooltipElement = function (areaBounds, location) {\n var tooltipDiv = getElement(this.element.id);\n var arrowLocation = new TooltipLocation(0, 0);\n var tipLocation = new TooltipLocation(0, 0);\n var svgObject = getElement(this.element.id + '_svg');\n var groupElement = getElement(this.element.id + '_group');\n var pathElement = getElement(this.element.id + '_path');\n var rect;\n var isTop = false;\n var isLeft = false;\n var isBottom = false;\n var x = 0;\n var y = 0;\n if (!isNullOrUndefined(groupElement)) {\n if (this.header !== '') {\n this.elementSize.height += this.marginY;\n }\n if (this.isFixed) {\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n rect = new Rect(location.x, location.y, width, height);\n }\n else if (this.content.length > 1) {\n rect = this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y);\n isTop = true;\n }\n else {\n rect = this.tooltipLocation(areaBounds, location, arrowLocation, tipLocation);\n if (!this.inverted) {\n isTop = (rect.y < (location.y + this.clipBounds.y));\n isBottom = !isTop;\n y = (isTop ? 0 : this.arrowPadding);\n }\n else {\n isLeft = (rect.x < (location.x + this.clipBounds.x));\n x = (isLeft ? 0 : this.arrowPadding);\n if (this.allowHighlight) {\n rect.x += isLeft ? this.highlightPadding : -(2 * this.highlightPadding);\n }\n }\n }\n if (this.header !== '') {\n var wrapPadding = 2;\n var padding = 0;\n var wrapHeader = this.isWrap ? this.wrappedText : this.header;\n if (this.isWrap && typeof (wrapHeader) === 'string' && (wrapHeader.indexOf('<') > -1 || wrapHeader.indexOf('>') > -1)) {\n var textArray = wrapHeader.split('
');\n wrapPadding = textArray.length;\n }\n if (this.header.indexOf(' -1) {\n padding = 5 * (this.header.split(//g).length - 1);\n }\n var key = 'properties';\n var font = extend({}, this.textStyle, null, true)[key];\n var headerSize = measureText(this.isWrap ? this.wrappedText : this.header, font, this.themeStyle.textStyle).height +\n (this.marginY * wrapPadding) + (isBottom ? this.arrowPadding : 0) + (this.isWrap ? 5 : padding); //header padding;\n var xLength = (this.marginX * 3) + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0);\n var direction = 'M ' + xLength + ' ' + headerSize +\n 'L ' + (rect.width + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0) - (this.marginX * 2)) +\n ' ' + headerSize;\n var pathElement_1 = this.renderer.drawPath({\n 'id': this.element.id + '_header_path', 'stroke-width': 1,\n 'fill': null, 'opacity': this.theme === ('Material3' || 'Material3Dark') ? 0.2 : 0.8, 'stroke': this.themeStyle.tooltipHeaderLine, 'd': direction\n });\n groupElement.appendChild(pathElement_1);\n }\n var start = this.border.width / 2;\n var pointRect = new Rect(start + x, start + y, rect.width - start, rect.height - start);\n groupElement.setAttribute('opacity', '1');\n if (this.enableAnimation && !this.isFirst && !this.crosshair) {\n this.animateTooltipDiv(tooltipDiv, rect);\n }\n else {\n this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n // eslint-disable-next-line no-extra-boolean-cast\n svgObject.setAttribute('height', (rect.height + this.border.width + (!((!this.inverted)) ? 0 : this.arrowPadding) + 5).toString());\n svgObject.setAttribute('width', (rect.width + this.border.width + (((!this.inverted)) ? 0 : this.arrowPadding) + 5).toString());\n svgObject.setAttribute('opacity', '1');\n if (!isNullOrUndefined(this.tooltipPlacement)) {\n isTop = this.tooltipPlacement.indexOf('Top') > -1;\n isBottom = this.tooltipPlacement.indexOf('Bottom') > -1;\n isLeft = this.tooltipPlacement.indexOf('Left') > -1;\n }\n pathElement.setAttribute('d', findDirection(this.rx, this.ry, pointRect, arrowLocation, this.arrowPadding, isTop, isBottom, isLeft, tipLocation.x, tipLocation.y, this.controlName));\n if ((this.enableShadow && this.theme !== 'Bootstrap4') || this.theme.indexOf('Fluent2') > -1) {\n // To fix next chart initial tooltip opacity issue in tab control\n var shadowId = this.element.id + '_shadow';\n if (this.theme === 'Tailwind' || this.theme === 'TailwindDark'\n || this.theme === 'Bootstrap5' || this.theme === 'Bootstrap5Dark') {\n pathElement.setAttribute('box-shadow', '0px 1px 2px rgba(0, 0, 0, 0.06), 0px 1px 3px rgba(0, 0, 0, 0.1)');\n }\n else {\n pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#' + shadowId + ')');\n }\n var shadow = '';\n if (this.theme.indexOf('Fluent2') > -1) {\n shadow += '';\n }\n else {\n shadow += '';\n }\n shadow += '';\n var defElement = this.renderer.createDefs();\n defElement.setAttribute('id', this.element.id + 'SVG_tooltip_definition');\n groupElement.appendChild(defElement);\n defElement.innerHTML = shadow;\n }\n var borderColor = ((this.theme === 'Fabric' || this.theme === 'Fluent' || this.theme === 'Fluent2') && !this.border.color) ? '#D2D0CE' : this.border.color;\n pathElement.setAttribute('stroke', borderColor);\n if (!isNullOrUndefined(this.border.dashArray)) {\n pathElement.setAttribute('stroke-dasharray', this.border.dashArray);\n }\n this.changeText(new TooltipLocation(x, y), isBottom, !isLeft && !isTop && !isBottom);\n if (this.revert) {\n this.inverted = !this.inverted;\n this.revert = false;\n }\n }\n return new Side(isBottom, !isLeft && !isTop && !isBottom);\n };\n Tooltip.prototype.changeText = function (point, isBottom, isRight) {\n var element = document.getElementById(this.element.id + '_text');\n if (isBottom) {\n element.setAttribute('transform', 'translate(0,' + this.arrowPadding + ')');\n }\n if (isRight) {\n element.setAttribute('transform', 'translate(' + this.arrowPadding + ' 0)');\n }\n };\n Tooltip.prototype.findFormattedText = function () {\n this.formattedText = [];\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n this.formattedText = this.formattedText.concat(this.content);\n };\n // tslint:disable-next-line:max-func-body-length\n Tooltip.prototype.renderText = function (isRender) {\n var height = 0;\n var width = 0; // Padding for text;\n var subWidth = 0;\n var lines;\n var key = 'properties';\n var font = extend({}, this.textStyle, null, true)[key];\n var groupElement = getElement(this.element.id + '_group');\n var tspanElement;\n var textCollection;\n var tspanStyle = '';\n var line;\n var tspanOption;\n this.findFormattedText();\n this.isWrap = false;\n var isRtlEnabled = document.body.getAttribute('dir') === 'rtl';\n var anchor = isRtlEnabled && !this.enableRTL ? 'end' : 'start';\n this.leftSpace = this.areaBounds.x + this.location.x;\n this.rightSpace = (this.areaBounds.x + this.areaBounds.width) - this.leftSpace;\n var headerContent = this.header.replace(//g, '').replace(/<\\/b>/g, '').trim();\n var isBoldTag = this.header.indexOf('') > -1 && this.header.indexOf('') > -1;\n var headerWidth = measureText(this.formattedText[0], font, this.themeStyle.textStyle).width\n + (2 * this.marginX) + this.arrowPadding;\n var isLeftSpace = (this.location.x - headerWidth) < this.location.x;\n var isRightSpace = (this.areaBounds.x + this.areaBounds.width) < (this.location.x + headerWidth);\n var header;\n var headerSpace = (headerContent !== '') ? this.marginY : 0;\n var isRow = true;\n var isColumn = true;\n this.markerPoint = [];\n var markerSize = (this.shapes.length > 0) ? 10 : 0;\n var markerPadding = (this.shapes.length > 0) ? 5 : 0;\n var spaceWidth = 4;\n var subStringLength;\n var fontSize = '12px';\n var fontWeight = '400';\n var labelColor = this.themeStyle.tooltipLightLabel;\n var dy = (22 / parseFloat(fontSize)) * (parseFloat(font.size));\n var contentWidth = [];\n var textHeight = 0;\n if (!isRender || this.isCanvas) {\n removeElement(this.element.id + '_text');\n removeElement(this.element.id + '_header_path');\n removeElement(this.element.id + '_trackball_group');\n removeElement(this.element.id + 'SVG_tooltip_definition');\n }\n // Condition to resolve the text size issue only in chart.\n if (this.controlName === 'Chart' && parseFloat(fontSize) < parseFloat(font.size)) {\n textHeight = (parseFloat(font.size) - parseFloat(fontSize));\n }\n var options = new TextOption(this.element.id + '_text', this.marginX * 2, (textHeight + this.marginY * 2 + this.padding * 2 + (this.marginY === 2 ? this.controlName === 'RangeNavigator' ? 5 : 3 : 0)), anchor, '');\n var parentElement = textElement(options, font, font.color || this.themeStyle.tooltipBoldLabel, groupElement, this.themeStyle.textStyle);\n var withoutHeader = this.formattedText.length === 1 && this.formattedText[0].indexOf(' : ') > -1;\n var isHeader = this.header !== '';\n var size = isHeader && isBoldTag ? 16 : 13;\n for (var k = 0, pointsLength = this.formattedText.length; k < pointsLength; k++) {\n textCollection = this.formattedText[k].replace(/<(b|strong)>/g, '')\n .replace(/<\\/(b|strong)>/g, '')\n .split(//g);\n if (this.isTextWrap && this.header !== this.formattedText[k] && this.formattedText[k].indexOf(' this.rightSpace ? (this.leftSpace / size) : (this.rightSpace / size));\n textCollection = this.formattedText[k].match(new RegExp('.{1,' + subStringLength + '}', 'g'));\n }\n if (k === 0 && !withoutHeader && this.isTextWrap &&\n (this.leftSpace < headerWidth || isLeftSpace) &&\n (this.rightSpace < headerWidth || isRightSpace)) {\n subStringLength = Math.round(this.leftSpace > this.rightSpace ? (this.leftSpace / size) : (this.rightSpace / size));\n header = headerContent !== '' ? headerContent : this.formattedText[k];\n textCollection = header.match(new RegExp('.{1,' + subStringLength + '}', 'g'));\n this.wrappedText = isBoldTag ? '' + textCollection.join('
') + '
' : textCollection.join('
');\n this.isWrap = textCollection.length > 1;\n }\n if (textCollection[0] === '') {\n continue;\n }\n if ((k !== 0) || (headerContent === '')) {\n this.markerPoint.push((headerContent !== '' ? (this.marginY) : 0) + options.y + height - (textHeight !== 0 ? ((textHeight / this.markerSize) * (parseFloat(font.size) / this.markerSize)) : 0));\n }\n for (var i = 0, len = textCollection.length; i < len; i++) { // string value of unicode for LTR is \\u200E\n lines = textCollection[i].replace(//g, '
').replace(/<\\/b>/g, '
').replace(/:/g, (this.enableRTL) ? '
\\u200E:
' : '
\\u200E:
')\n .split('
');\n if (this.enableRTL && lines.length > 0 && textCollection[i].match(/:/g)) {\n lines[0] = lines[0].trim();\n lines.reverse();\n }\n subWidth = 0;\n isColumn = true;\n height += dy;\n for (var j = 0, len_1 = lines.length; j < len_1; j++) {\n line = lines[j];\n if (this.enableRTL && line !== '' && this.isRTLText(line)) {\n line = line.concat('\\u200E');\n }\n if (!/\\S/.test(line) && line !== '') {\n line = ' '; //to trim multiple white spaces to single white space\n }\n if ((!isColumn && line === ' ') || (line.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '')) {\n subWidth += line !== ' ' ? spaceWidth : 0;\n if (isColumn && !isRow) {\n if (this.header.indexOf(' -1 && k !== 0) {\n headerSpace += this.header.split(//g).length;\n }\n tspanOption = {\n x: (this.marginX * 2) + (markerSize + markerPadding),\n dy: dy + ((isColumn) ? headerSpace : 0), fill: ''\n };\n headerSpace = null;\n }\n else {\n if (isRow && isColumn) {\n tspanOption = {\n x: (headerContent === '') ? ((this.marginX * 2) + (markerSize + markerPadding))\n : (this.marginX * 2) + (this.isWrap ? (markerSize + markerPadding) : 0)\n };\n }\n else {\n tspanOption = {};\n }\n }\n isColumn = false;\n tspanElement = this.renderer.createTSpan(tspanOption, '');\n parentElement.appendChild(tspanElement);\n if (line.indexOf('') > -1 || ((isBoldTag && j === 0 && k === 0) && (isHeader || this.isWrap))) {\n fontWeight = '600';\n labelColor = this.themeStyle.tooltipBoldLabel;\n tspanStyle = 'font-weight:' + fontWeight;\n font.fontWeight = fontWeight;\n (tspanElement).setAttribute('fill', this.textStyle.color || labelColor);\n }\n else {\n tspanStyle = fontWeight === '600' ? 'font-weight:' + fontWeight : '';\n font.fontWeight = fontWeight;\n (tspanElement).setAttribute('fill', this.textStyle.color || labelColor);\n }\n if (line.indexOf('') > -1 || ((isBoldTag && j === len_1 - 1 && k === 0) && (isHeader || this.isWrap))) {\n fontWeight = 'Normal';\n labelColor = this.themeStyle.tooltipLightLabel;\n }\n // eslint-disable-next-line no-useless-escape\n if (tspanStyle !== '') {\n tspanElement.style.fontWeight = tspanStyle.split('font-weight:')[1];\n tspanElement.style.color = tspanElement.getAttribute('fill');\n }\n // 'inherit' will apply css style from parent element.\n tspanElement.style.fontFamily = 'inherit';\n tspanElement.style.fontStyle = 'inherit';\n tspanElement.style.fontSize = (this.header === this.formattedText[k]) ? font.size : this.textStyle.size;\n tspanElement.style.fontWeight = (this.header === this.formattedText[k] && (this.header.indexOf('') || this.header.indexOf('')) === -1) ? (this.textStyle.fontWeight || '600') : line.indexOf('') > -1 || line.indexOf('') > -1 ? 'bold' : (this.textStyle.fontWeight || font.fontWeight);\n var textFont = extend({}, this.textStyle, null, true)[key];\n textFont.fontWeight = tspanElement.style.fontWeight;\n isRow = false;\n (tspanElement).textContent = line = this.getTooltipTextContent(line);\n subWidth += measureText(line, textFont, this.themeStyle.textStyle).width;\n }\n }\n subWidth -= spaceWidth;\n width = Math.max(width, subWidth);\n contentWidth.push(subWidth);\n }\n }\n this.elementSize = new Size(width + (width > 0 ? (2 * this.marginX) : 0), height);\n this.elementSize.width += (markerSize + markerPadding); // marker size + marker Spacing\n var element = (parentElement.childNodes[0]);\n if (headerContent !== '' && element && !this.isWrap) {\n font.fontWeight = '600';\n var width_1 = (this.elementSize.width + (2 * this.padding)) / 2 - measureText(headerContent, font, this.themeStyle.textStyle).width / 2;\n element.setAttribute('x', width_1.toString());\n }\n this.renderContentRTL(parentElement, isHeader, markerSize + markerPadding, contentWidth);\n };\n Tooltip.prototype.renderContentRTL = function (textElement, isHeader, markerSize, contentWidth) {\n if (this.enableRTL) {\n var tspanElement = void 0;\n var contentWidthIndex = isHeader ? 1 : 0;\n for (var i = 0; i < textElement.childNodes.length; i++) {\n tspanElement = (textElement.childNodes[i]);\n if ((!isHeader || i > 0) && !isNullOrUndefined(tspanElement.getAttribute('x'))) {\n tspanElement.setAttribute('x', (this.elementSize.width - (markerSize + contentWidth[contentWidthIndex])).toString());\n contentWidthIndex++;\n }\n }\n }\n };\n Tooltip.prototype.getTooltipTextContent = function (tooltipText) {\n var characterCollection = tooltipText.match(/<[a-zA-Z\\/](.|\\n)*?>/g);\n if (isNullOrUndefined(characterCollection)) {\n return tooltipText;\n }\n var isRtlText = this.isRTLText(tooltipText);\n for (var i = 0; i < characterCollection.length; i++) {\n if (this.isValidHTMLElement(characterCollection[i].replace('<', '').replace('/', '').replace('>', '').trim())) {\n tooltipText = tooltipText.replace(characterCollection[i], isRtlText ? '\\u200E' : '');\n }\n }\n return tooltipText;\n };\n Tooltip.prototype.isValidHTMLElement = function (element) {\n return document.createElement(element).toString() !== '[object HTMLUnknownElement]';\n };\n Tooltip.prototype.isRTLText = function (tooltipContent) {\n return /[\\u0590-\\u07FF\\u200F\\u202B\\u202E\\uFB1D-\\uFDFD\\uFE70-\\uFEFC]/.test(tooltipContent);\n };\n Tooltip.prototype.createTemplate = function (areaBounds, location) {\n var argsData = { cancel: false, name: 'tooltipRender', tooltip: this };\n this.trigger('tooltipRender', argsData);\n var parent = document.getElementById(this.element.id);\n if (this.isCanvas) {\n this.removeSVG();\n }\n var firstElement = parent.firstElementChild;\n if (firstElement) {\n remove(firstElement);\n }\n if (!argsData.cancel) {\n var elem = createElement('div', { id: this.element.id + 'parent_template' });\n var templateElement = void 0;\n if (this.controlName === 'Chart' && this.shared) {\n for (var i = 0; i < this.data.length; i++) {\n var sharedTemplateElement = this.templateFn(this.data[i], this.controlInstance, elem.id, elem.id + '_blazorTemplate', '');\n if (i === 0) {\n templateElement = sharedTemplateElement;\n }\n else {\n if (sharedTemplateElement.length > 1) {\n templateElement[i].outerHTML = sharedTemplateElement[i].outerHTML || sharedTemplateElement[i].textContent;\n }\n else {\n templateElement[templateElement.length - 1].outerHTML += sharedTemplateElement[0].outerHTML;\n }\n }\n }\n }\n else {\n templateElement = this.templateFn(this.data, this.controlInstance, elem.id, elem.id + '_blazorTemplate', '');\n }\n while (templateElement && templateElement.length > 0) {\n if (isBlazor() || templateElement.length === 1) {\n elem.appendChild(templateElement[0]);\n templateElement = null;\n }\n else {\n elem.appendChild(templateElement[0]);\n }\n }\n parent.appendChild(elem);\n var element = this.isCanvas ? elem : this.element;\n var rect = element.getBoundingClientRect();\n this.padding = 0;\n this.elementSize = new Size(rect.width, rect.height);\n var tooltipRect = this.shared ? this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y)\n : this.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n if (this.enableAnimation && !this.isFirst && !this.crosshair) {\n this.animateTooltipDiv(this.element, tooltipRect);\n }\n else {\n this.updateDiv(element, tooltipRect.x, tooltipRect.y);\n }\n if (this.blazorTemplate) {\n //Customer issue - F149037 Call back function to handle the blazor tooltip alignment issues\n var tooltipRendered = function () {\n var rect1 = getElement(thisObject_1.element.id).getBoundingClientRect();\n thisObject_1.elementSize = new Size(rect1.width, rect1.height);\n var tooltipRect1 = thisObject_1.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n thisObject_1.updateDiv(getElement(thisObject_1.element.id), tooltipRect1.x, tooltipRect1.y);\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisObject_1 = this;\n tooltipRendered.bind(thisObject_1, areaBounds, location);\n updateBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate', this.blazorTemplate.name, this.blazorTemplate.parent, undefined, tooltipRendered);\n }\n }\n else {\n remove(getElement(this.element.id + '_tooltip'));\n }\n };\n Tooltip.prototype.sharedTooltipLocation = function (bounds, x, y) {\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var tooltipRect = new Rect(x + 2 * this.padding, y - height - this.padding, width, height);\n if (tooltipRect.y < bounds.y) {\n tooltipRect.y += (tooltipRect.height + 2 * this.padding);\n }\n if (tooltipRect.y + tooltipRect.height > bounds.y + bounds.height) {\n tooltipRect.y = Math.max((bounds.y + bounds.height) - (tooltipRect.height + 2 * this.padding), bounds.y);\n }\n if (tooltipRect.x + tooltipRect.width > bounds.x + bounds.width) {\n tooltipRect.x = (bounds.x + this.location.x) - (tooltipRect.width + 4 * this.padding);\n }\n if (tooltipRect.x < bounds.x) {\n tooltipRect.x = bounds.x;\n }\n return tooltipRect;\n };\n Tooltip.prototype.getCurrentPosition = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n var position = this.tooltipPlacement;\n var clipX = this.clipBounds.x;\n var clipY = this.clipBounds.y;\n var markerHeight = this.offset;\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n if (position === 'Top' || position === 'Bottom') {\n location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if (position === 'Bottom') {\n location.y = symbolLocation.y + clipY + markerHeight;\n }\n if (bounds.x + bounds.width < location.x + width) {\n location.x = (bounds.width > width) ? ((bounds.x + bounds.width) - width + 6) : bounds.x;\n arrowLocation.x = tipLocation.x = (bounds.width > width) ? (bounds.x + symbolLocation.x - location.x) : symbolLocation.x;\n }\n else if (bounds.x > location.x) {\n location.x = bounds.x;\n arrowLocation.x = tipLocation.x = symbolLocation.x;\n }\n }\n else {\n location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if (position === 'Left') {\n location.x = symbolLocation.x + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (bounds.y + bounds.height < location.y + height) {\n location.y = (bounds.height > height) ? ((bounds.y + bounds.height) - height + 6) : bounds.y;\n arrowLocation.y = tipLocation.y = (bounds.height > height) ? (bounds.y + symbolLocation.y - location.y) : symbolLocation.y;\n }\n else if (bounds.y > location.y) {\n location.y = bounds.y;\n arrowLocation.y = tipLocation.y = symbolLocation.y;\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n // tslint:disable-next-line:max-func-body-length\n Tooltip.prototype.tooltipLocation = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n if (!isNullOrUndefined(this.tooltipPlacement)) {\n var tooltipRect = this.getCurrentPosition(bounds, symbolLocation, arrowLocation, tipLocation);\n return tooltipRect;\n }\n var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var markerHeight = this.offset;\n var clipX = this.clipBounds.x;\n var clipY = this.clipBounds.y;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n this.outOfBounds = false;\n if (!this.inverted) {\n location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * (this.allowHighlight ? this.highlightPadding : this.padding)) -\n this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if ((location.y < boundsY || (this.isNegative)) && !(this.controlName === 'Progressbar')) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n }\n if (location.y + height + this.arrowPadding > boundsY + bounds.height) {\n location.y = Math.min(symbolLocation.y, boundsY + bounds.height) + clipY\n - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight;\n }\n if (((location.x + width > boundsX + bounds.width) && location.y < boundsY || (this.isNegative)) && !(this.controlName === 'Progressbar')) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX && !(this.controlName === 'Progressbar')) {\n arrowLocation.x -= (boundsX - location.x);\n tipLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > boundsX + bounds.width && !(this.controlName === 'Progressbar')) {\n arrowLocation.x += ((location.x + width) - (boundsX + bounds.width));\n tipLocation.x += ((location.x + width) - (boundsX + bounds.width));\n location.x -= ((location.x + width) - (boundsX + bounds.width));\n }\n if (location.x < boundsX && !(this.controlName === 'Progressbar')) {\n arrowLocation.x -= (boundsX - location.x);\n tipLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (arrowLocation.x + this.arrowPadding > width - this.rx) {\n arrowLocation.x = width - this.rx - this.arrowPadding;\n tipLocation.x = width - this.rx - this.arrowPadding;\n }\n if (arrowLocation.x - this.arrowPadding < this.rx) {\n arrowLocation.x = tipLocation.x = this.rx + this.arrowPadding;\n }\n if (this.controlName === 'Chart') {\n if (((bounds.x + bounds.width) - (location.x + arrowLocation.x)) < this.areaMargin + this.arrowPadding ||\n (location.x + arrowLocation.x) < this.areaMargin + this.arrowPadding) {\n this.outOfBounds = true;\n }\n if (this.template && (location.y < 0)) {\n location.y = symbolLocation.y + clipY + markerHeight;\n }\n if (!withInAreaBounds(location.x, location.y, bounds) || this.outOfBounds) {\n this.inverted = !this.inverted;\n this.revert = true;\n location = new TooltipLocation(symbolLocation.x + markerHeight + clipX, symbolLocation.y + clipY - this.elementSize.height / 2 - (this.padding));\n tipLocation.x = arrowLocation.x = 0;\n tipLocation.y = arrowLocation.y = height / 2;\n if ((location.x + this.arrowPadding + width > boundsX + bounds.width) || (this.isNegative)) {\n location.x = (symbolLocation.x > boundsX + bounds.width ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (this.arrowPadding + width);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + markerHeight + clipX;\n }\n if (location.y <= boundsY) {\n tipLocation.y -= (boundsY - location.y);\n arrowLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= bounds.height + boundsY) {\n arrowLocation.y += ((location.y + height) - (bounds.height + boundsY));\n tipLocation.y += ((location.y + height) - (bounds.height + boundsY));\n location.y -= ((location.y + height) - (bounds.height + boundsY));\n }\n if ((this.arrowPadding) + arrowLocation.y > height - this.ry) {\n arrowLocation.y = height - this.arrowPadding - this.ry;\n tipLocation.y = height;\n }\n if (arrowLocation.y - this.arrowPadding < this.ry) {\n arrowLocation.y = (this.arrowPadding) + this.ry;\n tipLocation.y = 0;\n }\n }\n }\n }\n else {\n location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width) || (this.isNegative)) {\n location.x = (symbolLocation.x > bounds.width + bounds.x ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + clipX + markerHeight;\n }\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width)) {\n location.x = (symbolLocation.x > bounds.width + bounds.x ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (location.y <= boundsY) {\n arrowLocation.y -= (boundsY - location.y);\n tipLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= boundsY + bounds.height) {\n arrowLocation.y += ((location.y + height) - (boundsY + bounds.height));\n tipLocation.y += ((location.y + height) - (boundsY + bounds.height));\n location.y -= ((location.y + height) - (boundsY + bounds.height));\n }\n if (arrowLocation.y + this.arrowPadding > height - this.ry) {\n arrowLocation.y = height - this.ry - this.arrowPadding;\n tipLocation.y = height;\n }\n if (arrowLocation.y - this.arrowPadding < this.ry) {\n arrowLocation.y = tipLocation.y = this.ry + this.arrowPadding;\n }\n if (this.controlName === 'Chart') {\n if ((location.y + arrowLocation.y) < this.areaMargin + this.arrowPadding ||\n ((bounds.y + bounds.height) - (location.y + arrowLocation.y)) < this.areaMargin + this.arrowPadding) {\n this.outOfBounds = true;\n }\n if (!withInAreaBounds(location.x, location.y, bounds) || this.outOfBounds) {\n this.inverted = !this.inverted;\n location = new TooltipLocation(symbolLocation.x + clipX - this.padding - this.elementSize.width / 2, symbolLocation.y + clipY - this.elementSize.height - (2 * this.padding) - markerHeight - this.arrowPadding);\n this.revert = true;\n tipLocation.x = arrowLocation.x = width / 2;\n tipLocation.y = arrowLocation.y = 0;\n if (location.y < boundsY || (this.isNegative)) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + markerHeight + clipY;\n }\n if (location.y + this.arrowPadding + height > boundsY + bounds.height) {\n location.y = Math.min(symbolLocation.y, boundsY + bounds.height) + clipY\n - this.elementSize.height - (2 * this.padding) - markerHeight - this.arrowPadding;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX) {\n tipLocation.x -= (boundsX - location.x);\n arrowLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > bounds.width + boundsX) {\n arrowLocation.x += ((location.x + width) - (bounds.width + boundsX));\n tipLocation.x += ((location.x + width) - (bounds.width + boundsX));\n location.x -= ((location.x + width) - (bounds.width + boundsX));\n }\n if ((this.arrowPadding) + arrowLocation.x > width - this.rx) {\n tipLocation.x = width - this.rx - (this.arrowPadding);\n arrowLocation.x = width - this.rx - (this.arrowPadding);\n }\n if (arrowLocation.x - (this.arrowPadding) < this.rx) {\n arrowLocation.x = tipLocation.x = this.rx + (this.arrowPadding);\n }\n }\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n Tooltip.prototype.animateTooltipDiv = function (tooltipDiv, rect) {\n var _this = this;\n var x = parseFloat(tooltipDiv.style.left);\n var y = parseFloat(tooltipDiv.style.top);\n var currenDiff;\n new Animation({}).animate(tooltipDiv, {\n duration: (this.duration === 0 && animationMode === 'Enable') ? 300 : this.duration,\n progress: function (args) {\n currenDiff = (args.timeStamp / args.duration);\n tooltipDiv.style.animation = null;\n if ((_this.controlName === 'Chart' && _this.shared) && !_this.enableRTL) {\n tooltipDiv.style.transition = isBlazor() ? 'transform 0.3s' : 'transform 0.1s';\n tooltipDiv.style.transform = 'translate(' + (x + currenDiff * (rect.x - x)) + 'px,' + (y + currenDiff * (rect.y - y)) + 'px)';\n tooltipDiv.style.left = '';\n tooltipDiv.style.top = '';\n }\n else {\n tooltipDiv.style.left = (x + currenDiff * (rect.x - x)) + 'px';\n tooltipDiv.style.top = (y + currenDiff * (rect.y - y)) + 'px';\n tooltipDiv.style.transform = _this.controlName === 'RangeNavigator' ? tooltipDiv.style.transform : '';\n }\n },\n end: function (model) {\n _this.updateDiv(tooltipDiv, rect.x, rect.y);\n _this.trigger('animationComplete', { tooltip: _this });\n }\n });\n };\n Tooltip.prototype.updateDiv = function (tooltipDiv, x, y) {\n if ((this.controlName === 'Chart' && this.shared && !this.crosshair) && !this.enableRTL) {\n tooltipDiv.style.transform = 'translate(' + x + 'px,' + y + 'px)';\n tooltipDiv.style.left = '';\n tooltipDiv.style.top = '';\n }\n else {\n tooltipDiv.style.left = x + 'px';\n tooltipDiv.style.top = y + 'px';\n tooltipDiv.style.transform = this.controlName === 'RangeNavigator' ? tooltipDiv.style.transform : '';\n }\n };\n Tooltip.prototype.updateTemplateFn = function () {\n if (this.template) {\n try {\n if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n this.templateFn = templateComplier(document.querySelector(this.template).innerHTML.trim());\n }\n else {\n this.templateFn = templateComplier(this.template);\n }\n }\n catch (e) {\n this.templateFn = templateComplier(this.template);\n }\n }\n };\n /** @private */\n Tooltip.prototype.fadeOut = function () {\n var _this = this;\n var tooltipElement = (this.isCanvas && !this.template) ? getElement(this.element.id + '_svg') :\n getElement(this.element.id);\n var tooltipDiv = getElement(this.element.id);\n if (tooltipElement) {\n var tooltipGroup_1 = tooltipElement.firstChild;\n if (tooltipGroup_1.nodeType !== Node.ELEMENT_NODE) {\n tooltipGroup_1 = tooltipElement.firstElementChild;\n }\n if (this.isCanvas && !this.template) {\n tooltipGroup_1 = document.getElementById(this.element.id + '_group') ? document.getElementById(this.element.id + '_group') :\n tooltipGroup_1;\n }\n if (!tooltipGroup_1) {\n return null;\n }\n var opacity_1 = parseFloat(tooltipGroup_1.getAttribute('opacity'));\n opacity_1 = !isNullOrUndefined(opacity_1) ? opacity_1 : 1;\n new Animation({}).animate(tooltipGroup_1, {\n duration: 200,\n progress: function (args) {\n // tooltipGroup.removeAttribute('e-animate');\n _this.progressAnimation(tooltipGroup_1, opacity_1, (args.timeStamp / args.duration));\n },\n end: function () {\n _this.fadeOuted = true;\n _this.endAnimation(tooltipGroup_1);\n tooltipDiv.style.transition = '';\n }\n });\n }\n };\n Tooltip.prototype.progressAnimation = function (tooltipGroup, opacity, timeStamp) {\n tooltipGroup.style.animation = '';\n tooltipGroup.setAttribute('opacity', (opacity - timeStamp).toString());\n };\n /*\n * @hidden\n */\n Tooltip.prototype.endAnimation = function (tooltipGroup) {\n tooltipGroup.setAttribute('opacity', '0');\n if (this.template) {\n tooltipGroup.style.display = 'none';\n }\n this.trigger('animationComplete', { tooltip: this });\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n var keyEntity = [];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n *\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * To destroy the accumulationcharts\n *\n * @private\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-tooltip');\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @returns {void}\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.blazorTemplate) {\n resetBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate');\n }\n this.isFirst = false;\n this.render();\n };\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"shared\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"crosshair\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableShadow\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], Tooltip.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ size: '12px', fontWeight: null, color: null, fontStyle: 'Normal', fontFamily: null }, TextStyle)\n ], Tooltip.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(300)\n ], Tooltip.prototype, \"duration\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"inverted\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isNegative\", void 0);\n __decorate([\n Complex({ color: null, width: null }, TooltipBorder)\n ], Tooltip.prototype, \"border\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property(10)\n ], Tooltip.prototype, \"markerSize\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"clipBounds\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"palette\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"shapes\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"location\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offset\", void 0);\n __decorate([\n Property(4)\n ], Tooltip.prototype, \"rx\", void 0);\n __decorate([\n Property(4)\n ], Tooltip.prototype, \"ry\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginX\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginY\", void 0);\n __decorate([\n Property(7)\n ], Tooltip.prototype, \"arrowPadding\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"data\", void 0);\n __decorate([\n Property('Material')\n ], Tooltip.prototype, \"theme\", void 0);\n __decorate([\n Complex({ x: 0, y: 0, width: 0, height: 0 }, AreaBounds)\n ], Tooltip.prototype, \"areaBounds\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"availableSize\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"blazorTemplate\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isCanvas\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isTextWrap\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isFixed\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"tooltipPlacement\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"controlInstance\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"controlName\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"animationComplete\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRTL\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"allowHighlight\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","/** @private */\nexport function getTooltipThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n case 'HighContrast':\n style = {\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n textStyle: { fontFamily: 'Segoe UI', color: '#000000', fontWeight: null }\n };\n break;\n case 'MaterialDark':\n case 'FabricDark':\n case 'BootstrapDark':\n style = {\n tooltipFill: theme === 'MaterialDark' ? '#F4F4F4' : theme === 'FabricDark' ? '#A19F9D' : '#F0F0F0',\n tooltipBoldLabel: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A',\n tooltipLightLabel: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A',\n tooltipHeaderLine: '#9A9A9A',\n textStyle: theme === 'MaterialDark' ? { fontFamily: 'Roboto', color: 'rgba(18, 18, 18, 1)', fontWeight: null } : theme === 'FabricDark' ? { fontFamily: 'Segoe UI', color: '#DADADA', fontWeight: null } : { fontFamily: 'Helvetica', color: '#1A1A1A', fontWeight: null }\n };\n break;\n case 'Bootstrap4':\n style = {\n tooltipFill: '#212529',\n tooltipBoldLabel: '#F9FAFB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: 'rgba(255, 255, 255, 0.2)',\n textStyle: { fontFamily: 'Helvetica', color: '#F9FAFB', fontWeight: null }\n };\n break;\n case 'Tailwind':\n style = {\n tooltipFill: '#111827',\n tooltipBoldLabel: '#F9FAFB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: '#6B7280',\n textStyle: { fontFamily: 'Inter', color: '#F9FAFB', fontWeight: null }\n };\n break;\n case 'TailwindDark':\n style = {\n tooltipFill: '#E9ECEF',\n tooltipBoldLabel: '#1F2937',\n tooltipLightLabel: '#1F2937',\n tooltipHeaderLine: '#9CA3AF',\n textStyle: { fontFamily: 'Inter', color: '#1F2937', fontWeight: null }\n };\n break;\n case 'Bootstrap5':\n style = {\n tooltipFill: '#212529',\n tooltipBoldLabel: '#F9FAFB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: '#9CA3AF',\n textStyle: { fontFamily: 'Helvetica', color: '#F9FAFB', fontWeight: null }\n };\n break;\n case 'Bootstrap5Dark':\n style = {\n tooltipFill: '#E9ECEF',\n tooltipBoldLabel: '#212529',\n tooltipLightLabel: '#212529',\n tooltipHeaderLine: '#ADB5BD',\n textStyle: { fontFamily: 'Helvetica', color: '#212529', fontWeight: null }\n };\n break;\n case 'Fluent':\n style = {\n tooltipFill: '#FFFFFF',\n tooltipBoldLabel: '#323130',\n tooltipLightLabel: '#323130',\n tooltipHeaderLine: '#D2D0CE',\n textStyle: { fontFamily: 'Segoe UI', color: '#323130', fontWeight: null }\n };\n break;\n case 'FluentDark':\n style = {\n tooltipFill: '#323130',\n tooltipBoldLabel: '#F3F2F2',\n tooltipLightLabel: '#F3F2F1',\n tooltipHeaderLine: '#3B3A39',\n textStyle: { fontFamily: 'Segoe UI', color: '#F3F2F1', fontWeight: null }\n };\n break;\n case 'Fluent2':\n style = {\n tooltipFill: '#FFFFFF',\n tooltipBoldLabel: '#242424',\n tooltipLightLabel: '#242424',\n tooltipHeaderLine: '#D2D0CE',\n textStyle: { fontFamily: 'Segoe UI', color: '#242424', fontWeight: null }\n };\n break;\n case 'Fluent2Dark':\n style = {\n tooltipFill: '#292929',\n tooltipBoldLabel: '#FFFFFF',\n tooltipLightLabel: '#FFFFFF',\n tooltipHeaderLine: '#3B3A39',\n textStyle: { fontFamily: 'Segoe UI', color: '#FFFFFF', fontWeight: null }\n };\n break;\n case 'Material3':\n style = {\n tooltipFill: '#313033',\n tooltipBoldLabel: '#F4EFF4',\n tooltipLightLabel: '#F4EFF4',\n tooltipHeaderLine: '#F4EFF4',\n textStyle: { fontFamily: 'Roboto', color: '#F4EFF4', fontWeight: null }\n };\n break;\n case 'Material3Dark':\n style = {\n tooltipFill: '#E6E1E5',\n tooltipBoldLabel: '#313033',\n tooltipLightLabel: '#313033',\n tooltipHeaderLine: '#313033',\n textStyle: { fontFamily: 'Roboto', color: '#313033', fontWeight: null }\n };\n break;\n default:\n style = {\n tooltipFill: theme === 'Material' ? '#000816' : theme === 'Fabric' ? '#FFFFFF' : '#212529',\n tooltipBoldLabel: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB',\n tooltipLightLabel: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB',\n tooltipHeaderLine: theme === 'Fabric' ? '#D2D0CE' : '#ffffff',\n textStyle: theme === 'Material' ? { fontFamily: 'Roboto', color: 'rgba(249, 250, 251, 1)', fontWeight: null } : theme === 'Fabric' ? { fontFamily: 'Segoe UI', color: '#333333', fontWeight: null } : { fontFamily: 'Helvetica', color: '#F9FAFB', fontWeight: null }\n };\n break;\n }\n return style;\n}\n","/**\n * Numeric Range.\n *\n * @private\n */\nvar DoubleRange = /** @class */ (function () {\n function DoubleRange(start, end) {\n /*\n if (!isNaN(start) && !isNaN(end)) {\n this.mIsEmpty = true;\n } else {\n this.mIsEmpty = false;\n }*/\n if (start < end) {\n this.mStart = start;\n this.mEnd = end;\n }\n else {\n this.mStart = end;\n this.mEnd = start;\n }\n }\n Object.defineProperty(DoubleRange.prototype, \"start\", {\n //private mIsEmpty: boolean;\n /**\n * Gets the start value.\n *\n * @returns {number} - The start value.\n * @private\n */\n get: function () {\n return this.mStart;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"end\", {\n /**\n * Gets the end value.\n *\n * @returns {number} - The end value.\n * @private\n */\n get: function () {\n return this.mEnd;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"delta\", {\n /*\n get isEmpty(): boolean {\n return this.mIsEmpty;\n }*/\n /**\n * Gets the delta value.\n *\n * @returns {number} - The delta value.\n * @private\n */\n get: function () {\n return (this.mEnd - this.mStart);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DoubleRange.prototype, \"median\", {\n /**\n * Gets the median value.\n *\n * @returns {number} - The median value.\n * @private\n */\n get: function () {\n return this.mStart + (this.mEnd - this.mStart) / 2;\n },\n enumerable: true,\n configurable: true\n });\n return DoubleRange;\n}());\nexport { DoubleRange };\n","import { getMinPointsDelta, getActualDesiredIntervalsCount, setRange, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, logBase } from '../../common/utils/helper';\nimport { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\n/**\n * Numeric module is used to render numeric axis.\n */\nvar Double = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n *\n * @private\n * @param {Chart} chart - Specifies the chart.\n */\n function Double(chart) {\n this.isColumn = 0;\n this.isStacking = false;\n this.chart = chart;\n }\n /**\n * Numeric Nice Interval for the axis.\n *\n * @private\n * @param {Axis} axis - The axis.\n * @param {number} delta - The delta value.\n * @param {Size} size - The size.\n * @returns {number} - The calculated nice interval.\n */\n Double.prototype.calculateNumericNiceInterval = function (axis, delta, size) {\n var actualDesiredIntervalsCount = getActualDesiredIntervalsCount(size, axis);\n var niceInterval = delta / actualDesiredIntervalsCount;\n if (!isNullOrUndefined(axis.desiredIntervals)) {\n if (this.isAutoIntervalOnBothAxis(axis)) {\n return niceInterval;\n }\n }\n var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n for (var _i = 0, _a = axis.intervalDivs; _i < _a.length; _i++) {\n var interval = _a[_i];\n var currentInterval = minInterval * interval;\n if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n break;\n }\n niceInterval = currentInterval;\n }\n return niceInterval;\n };\n /**\n * Determines whether auto interval is enabled on both axes.\n *\n * @private\n * @param {Axis} axis - The axis.\n * @returns {boolean} - The boolean value indicating if auto interval is enabled on both axes.\n */\n Double.prototype.isAutoIntervalOnBothAxis = function (axis) {\n if (((axis.zoomFactor < 1 || axis.zoomPosition > 0) && axis.enableAutoIntervalOnZooming)) {\n return false;\n }\n else {\n return true;\n }\n };\n Double.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n if ((!axis.startFromZero) && (this.isColumn > 0)) {\n axis.actualRange.interval = axis.interval || this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n axis.actualRange.max = axis.doubleRange.end + axis.actualRange.interval;\n if ((axis.doubleRange.start - axis.actualRange.interval < 0 && axis.doubleRange.start > 0)) {\n axis.actualRange.min = 0;\n }\n else {\n axis.actualRange.min = axis.doubleRange.start - (this.isStacking ? 0 : axis.actualRange.interval);\n }\n }\n else {\n axis.actualRange.interval = axis.interval || this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n }\n };\n /**\n * Range for the axis.\n *\n * @private\n * @param {Axis} axis - The axis.\n * @returns {void}\n */\n Double.prototype.initializeDoubleRange = function (axis) {\n //Axis Min\n if (axis.minimum !== null) {\n this.min = axis.minimum;\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = 0;\n }\n // Axis Max\n if (axis.maximum !== null) {\n this.max = axis.maximum;\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = 5;\n }\n if (this.min === this.max) {\n this.max = axis.valueType.indexOf('Category') > -1 ? this.max : this.min + 1;\n }\n axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n };\n /**\n * The function to calculate the range and labels for the axis.\n *\n * @returns {void}\n * @private\n */\n Double.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Calculate Range for the axis.\n *\n * @private\n */\n Double.prototype.calculateRange = function (axis) {\n /** Generate axis range */\n this.min = null;\n this.max = null;\n if (!setRange(axis)) {\n for (var _i = 0, _a = axis.series; _i < _a.length; _i++) {\n var series = _a[_i];\n if (!series.visible) {\n continue;\n }\n this.paddingInterval = 0;\n if (!isNullOrUndefined(series.points)) {\n axis.maxPointLength = series.points.length;\n }\n axis.maxPointLength = series.points.length;\n if (((series.type.indexOf('Column') > -1 || series.type.indexOf('Histogram') > -1) && axis.orientation === 'Horizontal')\n || (series.type.indexOf('Bar') > -1 && axis.orientation === 'Vertical')) {\n if ((series.xAxis.valueType === 'Double' || series.xAxis.valueType === 'DateTime')\n && series.xAxis.rangePadding === 'Auto') {\n this.paddingInterval = getMinPointsDelta(series.xAxis, axis.series) * 0.5;\n }\n }\n //For xRange\n if (axis.orientation === 'Horizontal') {\n if (this.chart.requireInvertedAxis) {\n this.yAxisRange(axis, series);\n }\n else {\n this.findMinMax(series.xMin - this.paddingInterval, series.xMax + this.paddingInterval);\n }\n }\n // For yRange\n if (axis.orientation === 'Vertical') {\n this.isColumn += (series.type.indexOf('Column') !== -1 || series.type.indexOf('Bar') !== -1 || series.drawType === 'Column') ? 1 : 0;\n this.isStacking = series.type.indexOf('Stacking') !== -1;\n if (this.chart.requireInvertedAxis) {\n this.findMinMax(series.xMin - this.paddingInterval, series.xMax + this.paddingInterval);\n }\n else {\n this.yAxisRange(axis, series);\n }\n }\n }\n }\n };\n Double.prototype.yAxisRange = function (axis, series) {\n if (series.dragSettings.enable && this.chart.dragY) {\n if (this.chart.dragY >= axis.visibleRange.max) {\n series.yMax = this.chart.dragY + axis.visibleRange.interval;\n }\n if (this.chart.dragY <= axis.visibleRange.min) {\n series.yMin = this.chart.dragY - axis.visibleRange.interval;\n }\n }\n this.findMinMax(series.yMin, series.yMax);\n };\n Double.prototype.findMinMax = function (min, max) {\n if (this.min === null || this.min > min) {\n this.min = min;\n }\n if (this.max === null || this.max < max) {\n this.max = max;\n }\n if ((this.max === this.min) && this.max < 0 && this.min < 0) { // max == min\n this.max = 0;\n }\n };\n /**\n * Apply padding for the range.\n *\n * @private\n * @param {Axis} axis - The axis for which padding is applied.\n * @param {Size} size - The size used for padding calculation.\n * @returns {void}\n */\n Double.prototype.applyRangePadding = function (axis, size) {\n var start = axis.actualRange.min;\n var end = axis.actualRange.max;\n if (!setRange(axis)) {\n var interval = axis.actualRange.interval;\n var padding = axis.getRangePadding(this.chart);\n if (padding === 'Additional' || padding === 'Round') {\n this.findAdditional(axis, start, end, interval, size);\n }\n else if (padding === 'Normal') {\n this.findNormal(axis, start, end, interval, size);\n }\n else {\n this.updateActualRange(axis, start, end, interval);\n }\n }\n axis.actualRange.delta = axis.actualRange.max - axis.actualRange.min;\n this.calculateVisibleRange(size, axis);\n };\n Double.prototype.updateActualRange = function (axis, minimum, maximum, interval) {\n axis.actualRange = {\n min: axis.minimum != null ? axis.minimum : minimum,\n max: axis.maximum != null ? axis.maximum : maximum,\n interval: axis.interval != null ? axis.interval : interval,\n delta: axis.actualRange.delta\n };\n };\n Double.prototype.findAdditional = function (axis, start, end, interval, size) {\n var minimum;\n var maximum;\n minimum = Math.floor(start / interval) * interval;\n maximum = Math.ceil(end / interval) * interval;\n if (axis.rangePadding === 'Additional') {\n minimum -= interval;\n maximum += interval;\n }\n if (!isNullOrUndefined(axis.desiredIntervals)) {\n var delta = maximum - minimum;\n interval = this.calculateNumericNiceInterval(axis, delta, size);\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n Double.prototype.findNormal = function (axis, start, end, interval, size) {\n var remaining;\n var minimum;\n var maximum;\n var startValue = start;\n if (start < 0) {\n startValue = 0;\n minimum = start + (start * 0.05);\n remaining = interval + (minimum % interval);\n if ((0.365 * interval) >= remaining) {\n minimum -= interval;\n }\n if (minimum % interval < 0) {\n minimum = (minimum - interval) - (minimum % interval);\n }\n }\n else {\n minimum = start < ((5.0 / 6.0) * end) ? 0 : (start - (end - start) * 0.5);\n if (minimum % interval > 0) {\n minimum -= (minimum % interval);\n }\n }\n maximum = (end > 0) ? (end + (end - startValue) * 0.05) : (end - (end - startValue) * 0.05);\n remaining = interval - (maximum % interval);\n if ((0.365 * interval) >= remaining) {\n maximum += interval;\n }\n if (maximum % interval > 0) {\n maximum = (maximum + interval) - (maximum % interval);\n }\n axis.doubleRange = new DoubleRange(minimum, maximum);\n if (minimum === 0 || (minimum < 0 && maximum < 0)) {\n interval = this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n maximum = Math.ceil(maximum / interval) * interval;\n }\n this.updateActualRange(axis, minimum, maximum, interval);\n };\n /**\n * Calculate visible range for axis.\n *\n * @private\n * @param {Size} size - The size used for calculation.\n * @param {Axis} axis - The axis for which the visible range is calculated.\n * @returns {void}\n */\n Double.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n max: axis.actualRange.max, min: axis.actualRange.min,\n delta: axis.actualRange.delta, interval: axis.actualRange.interval\n };\n if (this.chart.chartAreaType === 'Cartesian') {\n var isLazyLoad = isNullOrUndefined(axis.zoomingScrollBar) ? false : axis.zoomingScrollBar.isLazyLoad;\n if ((axis.zoomFactor < 1 || axis.zoomPosition > 0) && !isLazyLoad) {\n axis.calculateVisibleRangeOnZooming();\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size)\n : axis.visibleRange.interval;\n }\n }\n if (axis.maximum && axis.orientation === 'Vertical' && axis.rangePadding === 'Auto') {\n var duplicateTempInterval = void 0;\n var tempInterval = axis.visibleRange.min;\n for (; (tempInterval <= axis.visibleRange.max) && (duplicateTempInterval !== tempInterval); tempInterval += axis.visibleRange.interval) {\n duplicateTempInterval = tempInterval;\n }\n if (duplicateTempInterval < axis.visibleRange.max) {\n axis.visibleRange.max = duplicateTempInterval + axis.visibleRange.interval;\n }\n }\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate label for the axis.\n *\n * @private\n */\n Double.prototype.calculateVisibleLabels = function (axis, chart) {\n /** Generate axis labels */\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n var labelStyle;\n var controlName = chart.getModuleName();\n var isPolarRadar = controlName === 'chart' && chart.chartAreaType === 'PolarRadar';\n if (!isPolarRadar && (axis.zoomFactor < 1 || axis.zoomPosition > 0 || this.paddingInterval)) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var format = this.getFormat(axis);\n var isCustom = format.match('{value}') !== null;\n var intervalDigits = 0;\n var formatDigits = 0;\n if (axis.labelFormat && axis.labelFormat.indexOf('n') > -1) {\n formatDigits = parseInt(axis.labelFormat.substring(1, axis.labelFormat.length), 10);\n }\n axis.format = chart.intl.getNumberFormat({\n format: isCustom ? '' : format,\n useGrouping: chart.useGroupingSeparator\n });\n axis.startLabel = axis.format(axis.visibleRange.min);\n axis.endLabel = axis.format(axis.visibleRange.max);\n if (axis.visibleRange.interval && (axis.visibleRange.interval + '').indexOf('.') >= 0) {\n intervalDigits = (axis.visibleRange.interval + '').split('.')[1].length;\n }\n var duplicateTempInterval;\n for (; (tempInterval <= axis.visibleRange.max) && (duplicateTempInterval !== tempInterval); tempInterval += axis.visibleRange.interval) {\n duplicateTempInterval = tempInterval;\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n if (withIn(tempInterval, axis.visibleRange)) {\n triggerLabelRender(chart, tempInterval, this.formatValue(axis, isCustom, format, tempInterval), labelStyle, axis);\n }\n }\n if (tempInterval && (tempInterval + '').indexOf('.') >= 0 && (tempInterval + '').split('.')[1].length > 10) {\n tempInterval = (tempInterval + '').split('.')[1].length > (formatDigits || intervalDigits) ?\n +tempInterval.toFixed(formatDigits || intervalDigits) : tempInterval;\n if (tempInterval <= axis.visibleRange.max) {\n triggerLabelRender(chart, tempInterval, this.formatValue(axis, isCustom, format, tempInterval), labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * Format of the axis label.\n *\n * @private\n */\n Double.prototype.getFormat = function (axis) {\n if (axis.labelFormat) {\n if (axis.labelFormat.indexOf('p') === 0 && axis.labelFormat.indexOf('{value}') === -1 && axis.isStack100) {\n return '{value}%';\n }\n return axis.labelFormat;\n }\n return axis.isStack100 ? '{value}%' : '';\n };\n /**\n * Formatted the axis label.\n *\n * @private\n */\n Double.prototype.formatValue = function (axis, isCustom, format, tempInterval) {\n /*The toLocaleString method is used to adjust the decimal points for this ticket, specifically for ticket numbers I481747 and I541484.*/\n var labelValue = !(tempInterval % 1) ? tempInterval : Number(tempInterval.toLocaleString('en-US').split(',').join(''));\n return isCustom ? format.replace('{value}', axis.format(labelValue))\n : format ? axis.format(tempInterval) : axis.format(labelValue);\n };\n return Double;\n}());\nexport { Double };\n","/**\n * Specifies the chart constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var legendClick = 'legendClick';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var legendRender = 'legendRender';\n/** @private */\nexport var textRender = 'textRender';\n/** @private */\nexport var pointRender = 'pointRender';\n/** @private */\nexport var sharedTooltipRender = 'sharedTooltipRender';\n/** @private */\nexport var seriesRender = 'seriesRender';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var axisLabelClick = 'axisLabelClick';\n/** @private */\nexport var axisRangeCalculated = 'axisRangeCalculated';\n/** @private */\nexport var axisMultiLabelRender = 'axisMultiLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var chartMouseMove = 'chartMouseMove';\n/** @private */\nexport var chartMouseClick = 'chartMouseClick';\n/** @private */\nexport var chartDoubleClick = 'chartDoubleClick';\n/** @private */\nexport var pointClick = 'pointClick';\n/** @private */\nexport var pointDoubleClick = 'pointDoubleClick';\n/** @private */\nexport var pointMove = 'pointMove';\n/** @private */\nexport var chartMouseLeave = 'chartMouseLeave';\n/** @private */\nexport var chartMouseDown = 'chartMouseDown';\n/** @private */\nexport var chartMouseUp = 'chartMouseUp';\n/** @private */\nexport var zoomComplete = 'zoomComplete';\n/** @private */\nexport var dragComplete = 'dragComplete';\n/** @private */\nexport var selectionComplete = 'selectionComplete';\n/** @private */\nexport var resized = 'resized';\n/** @private */\nexport var beforeResize = 'beforeResize';\n/** @private */\nexport var beforePrint = 'beforePrint';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var scrollStart = 'scrollStart';\n/** @private */\nexport var scrollEnd = 'scrollEnd';\n/** @private */\nexport var scrollChanged = 'scrollChanged';\n/** @private */\nexport var stockEventRender = 'stockEventRender';\n/** @private */\nexport var multiLevelLabelClick = 'multiLevelLabelClick';\n/** @private */\nexport var dragStart = 'dragStart';\n/** @private */\nexport var drag = 'drag';\n/** @private */\nexport var dragEnd = 'dragEnd';\n/*** @private*/\nexport var regSub = /~\\d+~/g;\n/*** @private*/\nexport var regSup = /\\^\\d+\\^/g;\n/** @private */\nexport var beforeExport = 'beforeExport';\n/** @private */\nexport var afterExport = 'afterExport';\n/** @private */\nexport var bulletChartMouseClick = 'bulletChartMouseClick';\n/** @private */\nexport var onZooming = 'onZooming';\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../../common/model/base';\n/**\n * Configures the annotation for the chart.\n */\nvar ChartAnnotationSettings = /** @class */ (function (_super) {\n __extends(ChartAnnotationSettings, _super);\n function ChartAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], ChartAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('Center')\n ], ChartAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Pixel')\n ], ChartAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], ChartAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], ChartAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"yAxisName\", void 0);\n __decorate([\n Property(null)\n ], ChartAnnotationSettings.prototype, \"description\", void 0);\n return ChartAnnotationSettings;\n}(ChildProperty));\nexport { ChartAnnotationSettings };\n/**\n * Configures the label border properties.\n */\nvar LabelBorder = /** @class */ (function (_super) {\n __extends(LabelBorder, _super);\n function LabelBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], LabelBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], LabelBorder.prototype, \"width\", void 0);\n __decorate([\n Property('Rectangle')\n ], LabelBorder.prototype, \"type\", void 0);\n return LabelBorder;\n}(ChildProperty));\nexport { LabelBorder };\n/**\n * Categories for multi-level labels.\n */\nvar MultiLevelCategories = /** @class */ (function (_super) {\n __extends(MultiLevelCategories, _super);\n function MultiLevelCategories() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"end\", void 0);\n __decorate([\n Property('')\n ], MultiLevelCategories.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"maximumTextWidth\", void 0);\n __decorate([\n Property(null)\n ], MultiLevelCategories.prototype, \"customAttributes\", void 0);\n __decorate([\n Property('')\n ], MultiLevelCategories.prototype, \"type\", void 0);\n return MultiLevelCategories;\n}(ChildProperty));\nexport { MultiLevelCategories };\n/**\n * Specifies the properties for the strip line.\n */\nvar StripLineSettings = /** @class */ (function (_super) {\n __extends(StripLineSettings, _super);\n function StripLineSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], StripLineSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"startFromAxis\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"end\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"size\", void 0);\n __decorate([\n Property('#808080')\n ], StripLineSettings.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Property('Auto')\n ], StripLineSettings.prototype, \"sizeType\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"isRepeat\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"repeatEvery\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"repeatUntil\", void 0);\n __decorate([\n Property(false)\n ], StripLineSettings.prototype, \"isSegmented\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"segmentStart\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"segmentEnd\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"segmentAxisName\", void 0);\n __decorate([\n Complex({ color: 'transparent', width: 1 }, Border)\n ], StripLineSettings.prototype, \"border\", void 0);\n __decorate([\n Property('')\n ], StripLineSettings.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], StripLineSettings.prototype, \"rotation\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property('Middle')\n ], StripLineSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Complex({ size: '12px', color: null, fontStyle: 'Normal', fontWeight: '400', fontFamily: null }, Font)\n ], StripLineSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property('Behind')\n ], StripLineSettings.prototype, \"zIndex\", void 0);\n __decorate([\n Property(1)\n ], StripLineSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property('')\n ], StripLineSettings.prototype, \"imageUrl\", void 0);\n return StripLineSettings;\n}(ChildProperty));\nexport { StripLineSettings };\n/**\n * Specifies the properties for multi-level labels.\n */\nvar MultiLevelLabels = /** @class */ (function (_super) {\n __extends(MultiLevelLabels, _super);\n function MultiLevelLabels() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Center')\n ], MultiLevelLabels.prototype, \"alignment\", void 0);\n __decorate([\n Property('Wrap')\n ], MultiLevelLabels.prototype, \"overflow\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: '12px', fontStyle: 'Normal', fontWeight: '400', color: null }, Font)\n ], MultiLevelLabels.prototype, \"textStyle\", void 0);\n __decorate([\n Complex({ color: null, width: 1, type: 'Rectangle' }, LabelBorder)\n ], MultiLevelLabels.prototype, \"border\", void 0);\n __decorate([\n Collection([], MultiLevelCategories)\n ], MultiLevelLabels.prototype, \"categories\", void 0);\n return MultiLevelLabels;\n}(ChildProperty));\nexport { MultiLevelLabels };\n/**\n * Specifies the range for the scrollbar settings property.\n *\n * @public\n */\nvar ScrollbarSettingsRange = /** @class */ (function (_super) {\n __extends(ScrollbarSettingsRange, _super);\n function ScrollbarSettingsRange() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ScrollbarSettingsRange.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], ScrollbarSettingsRange.prototype, \"maximum\", void 0);\n return ScrollbarSettingsRange;\n}(ChildProperty));\nexport { ScrollbarSettingsRange };\n/**\n * Specifies properties for customizing the scrollbar settings in lazy loading.\n */\nvar ScrollbarSettings = /** @class */ (function (_super) {\n __extends(ScrollbarSettings, _super);\n function ScrollbarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ScrollbarSettings.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], ScrollbarSettings.prototype, \"pointsLength\", void 0);\n __decorate([\n Complex({}, ScrollbarSettingsRange)\n ], ScrollbarSettings.prototype, \"range\", void 0);\n __decorate([\n Property(null)\n ], ScrollbarSettings.prototype, \"trackColor\", void 0);\n __decorate([\n Property(0)\n ], ScrollbarSettings.prototype, \"scrollbarRadius\", void 0);\n __decorate([\n Property(null)\n ], ScrollbarSettings.prototype, \"scrollbarColor\", void 0);\n __decorate([\n Property(0)\n ], ScrollbarSettings.prototype, \"trackRadius\", void 0);\n __decorate([\n Property(null)\n ], ScrollbarSettings.prototype, \"gripColor\", void 0);\n __decorate([\n Property(16)\n ], ScrollbarSettings.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], ScrollbarSettings.prototype, \"enableZoom\", void 0);\n return ScrollbarSettings;\n}(ChildProperty));\nexport { ScrollbarSettings };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty, Collection, extend, Browser } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../../common/model/base';\nimport { rotateTextSize, firstToLowerCase, valueToCoefficient, inside, isBreakLabel, isZoomSet, getTitle, getElement, appendChildElement } from '../../common/utils/helper';\nimport { Size, Rect, measureText } from '@syncfusion/ej2-svg-base';\nimport { DoubleRange } from '../utils/double-range';\nimport { Double } from '../axis/double-axis';\nimport { axisRangeCalculated } from '../../common/model/constants';\nimport { StripLineSettings, MultiLevelLabels, LabelBorder, ScrollbarSettings } from '../model/chart-base';\nimport { textWrap } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Configures the `rows` of the chart.\n */\nvar Row = /** @class */ (function (_super) {\n __extends(Row, _super);\n function Row() {\n /**\n * The height of the row as a string accepts input both as '100px' and '100%'.\n * If specified as '100%, row renders to the full height of its chart.\n *\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n /** @private */\n _this.insideFarSizes = [];\n /** @private */\n _this.insideNearSizes = [];\n return _this;\n }\n /**\n * Measure the row size.\n *\n * @param {Axis} axis - The axis for which to measure the row size.\n * @param {number} scrollBarHeight - The height of the scrollbar.\n * @param {Row | Column} definition - The definition of the row or column.\n * @param {Chart} chart - The chart instance.\n * @returns {void}\n * @private\n */\n Row.prototype.computeSize = function (axis, scrollBarHeight, definition, chart) {\n var width = 0;\n var innerPadding = (axis.labelPosition === 'Inside' && (chart.axes.indexOf(axis) > -1)) ? -5 : 5;\n if (axis.visible && axis.internalVisibility) {\n width += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\n axis.findLabelSize(axis.crossInAxis, innerPadding, definition, chart) + axis.lineStyle.width * 0.5);\n }\n if (axis.isAxisOpposedPosition) {\n this.farSizes.push(width);\n }\n else {\n this.nearSizes.push(width);\n }\n };\n __decorate([\n Property('100%')\n ], Row.prototype, \"height\", void 0);\n __decorate([\n Complex({}, Border)\n ], Row.prototype, \"border\", void 0);\n return Row;\n}(ChildProperty));\nexport { Row };\n/**\n * Configures the `columns` of the chart.\n */\nvar Column = /** @class */ (function (_super) {\n __extends(Column, _super);\n function Column() {\n /**\n * The width of the column as a string accepts input in both '100px' and '100%' formats.\n * If specified as '100%, the column renders to the full width of its chart.\n *\n * @default '100%'\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.axes = [];\n /** @private */\n _this.nearSizes = [];\n /** @private */\n _this.farSizes = [];\n /** @private */\n _this.insideFarSizes = [];\n /** @private */\n _this.insideNearSizes = [];\n /** @private */\n _this.padding = 0;\n return _this;\n }\n /**\n * Measure the column size.\n *\n * @returns {void}\n * @private\n */\n Column.prototype.computeSize = function (axis, scrollBarHeight, definition, chart) {\n var height = 0;\n var innerPadding = 5;\n if (axis.visible && axis.internalVisibility) {\n height += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\n axis.findLabelSize(axis.crossInAxis, innerPadding, definition, chart) + axis.lineStyle.width * 0.5);\n }\n if (axis.isAxisOpposedPosition) {\n this.farSizes.push(height);\n }\n else {\n this.nearSizes.push(height);\n }\n };\n __decorate([\n Property('100%')\n ], Column.prototype, \"width\", void 0);\n __decorate([\n Complex({}, Border)\n ], Column.prototype, \"border\", void 0);\n return Column;\n}(ChildProperty));\nexport { Column };\n/**\n * Configures the major grid lines in the `axis`.\n */\nvar MajorGridLines = /** @class */ (function (_super) {\n __extends(MajorGridLines, _super);\n function MajorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MajorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MajorGridLines.prototype, \"color\", void 0);\n return MajorGridLines;\n}(ChildProperty));\nexport { MajorGridLines };\n/**\n * Configures the minor grid lines in the `axis`.\n */\nvar MinorGridLines = /** @class */ (function (_super) {\n __extends(MinorGridLines, _super);\n function MinorGridLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorGridLines.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], MinorGridLines.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], MinorGridLines.prototype, \"color\", void 0);\n return MinorGridLines;\n}(ChildProperty));\nexport { MinorGridLines };\n/**\n * Configures the axis line of a chart.\n */\nvar AxisLine = /** @class */ (function (_super) {\n __extends(AxisLine, _super);\n function AxisLine() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], AxisLine.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], AxisLine.prototype, \"dashArray\", void 0);\n __decorate([\n Property(null)\n ], AxisLine.prototype, \"color\", void 0);\n return AxisLine;\n}(ChildProperty));\nexport { AxisLine };\n/**\n * Configures the major tick lines.\n */\nvar MajorTickLines = /** @class */ (function (_super) {\n __extends(MajorTickLines, _super);\n function MajorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], MajorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MajorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MajorTickLines.prototype, \"color\", void 0);\n return MajorTickLines;\n}(ChildProperty));\nexport { MajorTickLines };\n/**\n * Configures the minor tick lines.\n */\nvar MinorTickLines = /** @class */ (function (_super) {\n __extends(MinorTickLines, _super);\n function MinorTickLines() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0.7)\n ], MinorTickLines.prototype, \"width\", void 0);\n __decorate([\n Property(5)\n ], MinorTickLines.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], MinorTickLines.prototype, \"color\", void 0);\n return MinorTickLines;\n}(ChildProperty));\nexport { MinorTickLines };\n/**\n * Configures the crosshair ToolTip.\n */\nvar CrosshairTooltip = /** @class */ (function (_super) {\n __extends(CrosshairTooltip, _super);\n function CrosshairTooltip() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairTooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(null)\n ], CrosshairTooltip.prototype, \"fill\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: null, fontStyle: null, fontWeight: null, color: null }, Font)\n ], CrosshairTooltip.prototype, \"textStyle\", void 0);\n return CrosshairTooltip;\n}(ChildProperty));\nexport { CrosshairTooltip };\n/**\n * Configures the axes in the chart.\n *\n * @public\n */\nvar Axis = /** @class */ (function (_super) {\n __extends(Axis, _super);\n function Axis(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n /** @private */\n _this.visibleLabels = [];\n /** @private */\n _this.series = [];\n /** @private */\n _this.rect = new Rect(undefined, undefined, 0, 0);\n /** @private */\n _this.axisBottomLine = null;\n /** @private */\n _this.intervalDivs = [10, 5, 2, 1];\n /** @private */\n _this.isStack100 = false;\n /** @private */\n _this.crossAt = null;\n /** @private */\n _this.updatedRect = null;\n /** @private */\n _this.multiLevelLabelHeight = 0;\n /** @private */\n _this.isChart = true;\n /** @private */\n _this.isIntervalInDecimal = true;\n /** @private */\n _this.titleCollection = [];\n /** @private */\n _this.titleSize = new Size(0, 0);\n /**\n * Task: BLAZ-2044\n * This property used to hide the axis when series hide from legend click\n *\n * @private\n */\n _this.internalVisibility = true;\n /**\n * This property is used to place the vertical axis in opposed position and horizontal axis in inversed\n * when RTL is enabled in chart\n *\n * @private */\n _this.isRTLEnabled = false;\n _this.angle = _this.labelRotation;\n return _this;\n }\n /**\n * The function used to find tick size.\n *\n * @param {Axis} crossAxis - The cross axis for which to find the tick size.\n * @returns {number} - The tick line size.\n * @private\n */\n Axis.prototype.findTickSize = function (crossAxis) {\n if (this.tickPosition === 'Inside') {\n return 0;\n }\n if (crossAxis && (!crossAxis.visibleRange || this.isInside(crossAxis.visibleRange))) {\n return 0;\n }\n return this.majorTickLines.height;\n };\n /**\n * The function used to find axis position.\n *\n * @returns {number}\n * @private\n */\n Axis.prototype.isInside = function (range) {\n return (inside(this.crossAt, range) ||\n (!this.isAxisOpposedPosition && this.crossAt >= range.max) || (this.isAxisOpposedPosition && this.crossAt <= range.min));\n };\n /**\n * The function used to find label Size.\n *\n * @param {Axis} crossAxis - The cross axis for which to find the label size.\n * @param {number} innerPadding - The inner padding.\n * @param {Row | Column} definition - The row or column definition.\n * @param {Chart} chart - The chart instance.\n * @returns {number} - The label size.\n * @private\n */\n Axis.prototype.findLabelSize = function (crossAxis, innerPadding, definition, chart) {\n var titleSize = 0;\n var isHorizontal = this.orientation === 'Horizontal';\n if (this.title) {\n var angle = this.titleRotation;\n if ((isNullOrUndefined(angle))) {\n this.titleSize = measureText(this.title, this.titleStyle, chart.themeStyle.axisTitleFont);\n titleSize = this.titleSize.height + innerPadding;\n }\n else {\n this.titleSize = rotateTextSize(this.titleStyle, this.title, angle, chart, chart.themeStyle.axisTitleFont);\n titleSize = (this.orientation === 'Vertical' ? this.titleSize.width : this.titleSize.height) + innerPadding;\n }\n if (this.rect.width || this.rect.height) {\n var length_1 = isHorizontal ? this.rect.width : this.rect.height;\n this.titleCollection = getTitle(this.title, this.titleStyle, length_1, chart.enableRtl, chart.themeStyle.axisTitleFont);\n titleSize = (titleSize * this.titleCollection.length);\n }\n }\n var diff;\n var value;\n var labelSize = titleSize + innerPadding + this.titlePadding + this.labelPadding +\n ((this.orientation === 'Vertical') ? this.maxLabelSize.width : this.maxLabelSize.height) + this.multiLevelLabelHeight;\n if (crossAxis && this.placeNextToAxisLine) {\n var range = crossAxis.visibleRange;\n var size = (crossAxis.orientation === 'Horizontal') ? crossAxis.rect.width : crossAxis.rect.height;\n if (!range || !size) {\n return 0;\n }\n else if (this.isInside(range)) {\n value = this.findDifference(crossAxis);\n diff = (value) * (size / range.delta);\n diff = (value) * ((size - (diff < labelSize ? (labelSize - diff) : 0)) / range.delta);\n labelSize = (diff < labelSize) ? (labelSize - diff) : 0;\n }\n }\n if (this.isAxisOpposedPosition) {\n definition.insideFarSizes.push(labelSize);\n }\n else {\n definition.insideNearSizes.push(labelSize);\n }\n if (this.labelPosition === 'Inside') {\n return titleSize + innerPadding;\n }\n return labelSize;\n };\n /**\n * The function used to find axis position.\n *\n * @returns {void}\n * @private\n */\n Axis.prototype.updateCrossValue = function () {\n var value = this.crossAt;\n if (value === null || !this.isInside(this.crossInAxis.visibleRange)) {\n this.updatedRect = this.rect;\n return null;\n }\n var range = this.crossInAxis.visibleRange;\n if (!this.isAxisOpposedPosition) {\n if (this.crossAt > range.max) {\n value = range.max;\n }\n }\n else {\n if (this.crossAt < range.min) {\n value = range.min;\n }\n }\n this.updatedRect = extend({}, this.rect, null, true);\n if (this.orientation === 'Horizontal') {\n value = this.crossInAxis.rect.height - (valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.height);\n this.updatedRect.y = this.crossInAxis.rect.y + value;\n }\n else {\n value = valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.width;\n this.updatedRect.x = this.crossInAxis.rect.x + value;\n }\n };\n Axis.prototype.findDifference = function (crossAxis) {\n var value = 0;\n if (this.isAxisOpposedPosition) {\n value = crossAxis.isAxisInverse ? crossAxis.visibleRange.min : crossAxis.visibleRange.max;\n }\n else {\n value = crossAxis.isAxisInverse ? crossAxis.visibleRange.max : crossAxis.visibleRange.min;\n }\n return Math.abs(this.crossAt - value);\n };\n /**\n * Calculate the visible range for the axis.\n *\n * @returns {void}\n * @private\n */\n Axis.prototype.calculateVisibleRangeOnZooming = function () {\n if (isZoomSet(this)) {\n var baseRange = this.actualRange;\n var start = void 0;\n var end = void 0;\n if (!this.isAxisInverse) {\n start = this.actualRange.min + this.zoomPosition * this.actualRange.delta;\n end = start + this.zoomFactor * this.actualRange.delta;\n }\n else {\n start = this.actualRange.max - (this.zoomPosition * this.actualRange.delta);\n end = start - (this.zoomFactor * this.actualRange.delta);\n }\n if (start < baseRange.min) {\n end = end + (baseRange.min - start);\n start = baseRange.min;\n }\n if (end > baseRange.max) {\n start = start - (end - baseRange.max);\n end = baseRange.max;\n }\n this.doubleRange = new DoubleRange(start, end);\n this.visibleRange = { min: this.doubleRange.start, max: this.doubleRange.end,\n delta: this.doubleRange.delta, interval: this.visibleRange.interval };\n }\n };\n /**\n * Triggers the event.\n *\n * @returns {void}\n * @private\n */\n Axis.prototype.triggerRangeRender = function (chart, minimum, maximum, interval) {\n var argsData = {\n cancel: false, name: axisRangeCalculated, axis: this,\n minimum: minimum, maximum: maximum, interval: interval\n };\n chart.trigger(axisRangeCalculated, argsData);\n if (!argsData.cancel) {\n this.visibleRange = { min: argsData.minimum, max: argsData.maximum, interval: argsData.interval,\n delta: argsData.maximum - argsData.minimum };\n }\n };\n /**\n * Calculate padding for the axis.\n *\n * @returns {string}\n * @private\n */\n Axis.prototype.getRangePadding = function (chart) {\n var padding = this.rangePadding;\n if (padding !== 'Auto') {\n return padding;\n }\n switch (this.orientation) {\n case 'Horizontal':\n if (chart.requireInvertedAxis) {\n padding = (this.isStack100 || this.baseModule.chart.stockChart ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n case 'Vertical':\n if (!chart.requireInvertedAxis) {\n padding = (this.isStack100 || this.baseModule.chart.stockChart ? 'Round' : 'Normal');\n }\n else {\n padding = 'None';\n }\n break;\n }\n return padding;\n };\n /**\n * Calculate maximum label width for the axis.\n *\n * @param {Chart} chart - The chart for which to calculate the maximum label width.\n * @returns {void}\n * @private\n */\n Axis.prototype.getMaxLabelWidth = function (chart) {\n var pointX;\n var previousEnd = 0;\n var isIntersect = false;\n var isAxisLabelBreak;\n this.angle = this.labelRotation;\n this.maxLabelSize = new Size(0, 0);\n var action = this.labelIntersectAction;\n var label;\n for (var i = 0, len = this.visibleLabels.length; i < len; i++) {\n label = this.visibleLabels[i];\n isAxisLabelBreak = isBreakLabel(label.originalText);\n if (isAxisLabelBreak) {\n label.size = measureText(label.originalText.replace(/
/g, ' '), this.labelStyle, chart.themeStyle.axisLabelFont);\n label.breakLabelSize = measureText(this.enableTrim ? label.text.join('
') : label.originalText, this.labelStyle, chart.themeStyle.axisLabelFont);\n }\n else {\n label.size = measureText(label.text, this.labelStyle, chart.themeStyle.axisLabelFont);\n }\n var width = isAxisLabelBreak ? label.breakLabelSize.width : label.size.width;\n if (width > this.maxLabelSize.width) {\n this.maxLabelSize.width = width;\n this.rotatedLabel = label.text;\n }\n var height = isAxisLabelBreak ? label.breakLabelSize.height : label.size.height;\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n if (isAxisLabelBreak) {\n label.text = this.enableTrim ? label.text : label.originalText.split('
');\n }\n if (action === 'None' || action === 'Hide' || action === 'Trim') {\n continue;\n }\n if ((action !== 'None' || this.angle % 360 === 0) && this.orientation === 'Horizontal' &&\n this.rect.width > 0 && !isIntersect) {\n var width1 = isAxisLabelBreak ? label.breakLabelSize.width : label.size.width;\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n pointX -= width1 / 2;\n if (this.edgeLabelPlacement === 'Shift') {\n if (i === 0 && pointX < this.rect.x) {\n pointX = this.rect.x;\n }\n if (i === this.visibleLabels.length - 1 && ((pointX + width1) > (this.rect.x + this.rect.width))) {\n pointX = this.rect.x + this.rect.width - width1;\n }\n }\n switch (action) {\n case 'MultipleRows':\n if (i > 0) {\n this.findMultiRows(i, pointX, label, isAxisLabelBreak);\n }\n break;\n case 'Rotate45':\n case 'Rotate90':\n if (i > 0 && (!this.isAxisInverse ? pointX <= previousEnd : pointX + width1 >= previousEnd)) {\n this.angle = (action === 'Rotate45') ? 45 : 90;\n isIntersect = true;\n }\n break;\n default: {\n if (isAxisLabelBreak) {\n var result = void 0;\n var result1 = [];\n var str = void 0;\n for (var index = 0; index < label.text.length; index++) {\n result = textWrap(label.text[index], this.rect.width / this.visibleLabels.length, this.labelStyle, chart.enableRtl, null, null, chart.themeStyle.axisLabelFont);\n if (result.length > 1) {\n for (var j = 0; j < result.length; j++) {\n str = result[j];\n result1.push(str);\n }\n }\n else {\n result1.push(result[0]);\n }\n }\n label.text = result1;\n }\n else {\n label.text = textWrap(label.text, this.rect.width / this.visibleLabels.length, this.labelStyle, chart.enableRtl, null, null, chart.themeStyle.axisLabelFont);\n }\n var height_1 = (label.size.height * label.text.length);\n if (height_1 > this.maxLabelSize.height) {\n this.maxLabelSize.height = height_1;\n }\n break;\n }\n }\n previousEnd = this.isAxisInverse ? pointX : pointX + width1;\n }\n }\n if (this.angle !== 0 && this.orientation === 'Horizontal') {\n //I264474: Fix for datasource bind im mounted console error ocurred\n this.rotatedLabel = isNullOrUndefined(this.rotatedLabel) ? '' : this.rotatedLabel;\n var isHorizontalAngle = this.angle === -360 || this.angle === 0 || this.angle === -180 ||\n this.angle === 180 || this.angle === 360;\n // To avoid overlap axis label with chart title or chart legend when it is outside.\n if (this.labelPosition === 'Outside' && !isHorizontalAngle && isBreakLabel(this.rotatedLabel)) {\n this.maxLabelSize = new Size(this.maxLabelSize.height, this.maxLabelSize.width);\n }\n else {\n this.maxLabelSize = rotateTextSize(this.labelStyle, this.rotatedLabel, this.angle, chart, chart.themeStyle.axisLabelFont);\n }\n }\n else if (this.angle !== 0 && this.orientation === 'Vertical') {\n //I264474: Fix for datasource bind im mounted console error ocurred\n this.rotatedLabel = isNullOrUndefined(this.rotatedLabel) ? '' : this.rotatedLabel;\n var isHorizontalAngle = this.angle === -360 || this.angle === 0 || this.angle === -180 ||\n this.angle === 180 || this.angle === 360;\n // To avoid overlap axis label with chart title or chart legend when it is outside.\n if (this.labelPosition === 'Outside' && !isHorizontalAngle && isBreakLabel(this.rotatedLabel)) {\n this.maxLabelSize = new Size(this.maxLabelSize.height, this.maxLabelSize.width);\n }\n else {\n this.maxLabelSize = rotateTextSize(this.labelStyle, this.rotatedLabel, this.angle, chart, chart.themeStyle.axisLabelFont);\n }\n }\n if (chart.multiLevelLabelModule && this.multiLevelLabels.length > 0) {\n chart.multiLevelLabelModule.getMultilevelLabelsHeight(this);\n }\n };\n /**\n * Finds the multiple rows for axis.\n *\n * @returns {void}\n */\n Axis.prototype.findMultiRows = function (length, currentX, currentLabel, isBreakLabels) {\n var label;\n var pointX;\n var width2;\n var store = [];\n var isMultiRows;\n for (var i = length - 1; i >= 0; i--) {\n label = this.visibleLabels[i];\n width2 = isBreakLabels ? label.breakLabelSize.width : label.size.width;\n pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n isMultiRows = !this.isAxisInverse ? currentX < (pointX + width2 * 0.5) :\n currentX + currentLabel.size.width > (pointX - width2 * 0.5);\n if (isMultiRows) {\n store.push(label.index);\n currentLabel.index = (currentLabel.index > label.index) ? currentLabel.index : label.index + 1;\n }\n else {\n currentLabel.index = store.indexOf(label.index) > -1 ? currentLabel.index : label.index;\n }\n }\n var height = ((isBreakLabels ? currentLabel.breakLabelSize.height : currentLabel.size.height) * currentLabel.index) +\n (5 * (currentLabel.index - 1));\n if (height > this.maxLabelSize.height) {\n this.maxLabelSize.height = height;\n }\n };\n /**\n * Finds the default module for axis.\n *\n * @returns {void}\n * @private\n */\n Axis.prototype.getModule = function (chart) {\n if (this.valueType === 'Double') {\n this.baseModule = new Double(chart);\n }\n else {\n this.baseModule = chart[firstToLowerCase(this.valueType) + 'Module'];\n }\n };\n /**\n * Set the axis `opposedPosition` and `isInversed` properties.\n *\n * @param {boolean} isPolar - Indicates whether the axis is polar or not.\n * @returns {void}\n * @private\n */\n Axis.prototype.setIsInversedAndOpposedPosition = function (isPolar) {\n if (isPolar === void 0) { isPolar = false; }\n this.isAxisOpposedPosition = this.opposedPosition || (!isPolar && this.isRTLEnabled && this.orientation === 'Vertical');\n if (this.opposedPosition && (!isPolar && this.isRTLEnabled && this.orientation === 'Vertical')) {\n this.isAxisOpposedPosition = false;\n }\n this.isAxisInverse = this.isInversed || (this.isRTLEnabled && this.orientation === 'Horizontal');\n if (this.isInversed && (!isPolar && this.isRTLEnabled && this.orientation === 'Horizontal')) {\n this.isAxisInverse = false;\n }\n };\n /**\n * Updates the axis within the chart.\n *\n * @returns {void}\n * @private\n */\n Axis.prototype.updateAxis = function () {\n var chart = this.baseModule.chart;\n var chartAxisLayoutPanel = chart.chartAxisLayoutPanel;\n var index = chart.axisCollections.indexOf(this);\n var axisElement = getElement(chart.element.id + 'AxisInsideCollection');\n var axisLineElement = getElement(chart.element.id + 'AxisOutsideCollection');\n chartAxisLayoutPanel.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + index + 'Inside' });\n var outsideElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + index + 'Outside' });\n var isInside = chartAxisLayoutPanel.findAxisPosition(this);\n chartAxisLayoutPanel.drawAxis(this, index, isInside, outsideElement, axisElement, axisLineElement);\n if (!chart.enableCanvas) {\n appendChildElement(chart.enableCanvas, axisElement, chartAxisLayoutPanel.element, chart.redraw);\n }\n };\n __decorate([\n Complex({ fontFamily: null, size: '12px', fontStyle: 'Normal', fontWeight: '400', color: null }, Font)\n ], Axis.prototype, \"labelStyle\", void 0);\n __decorate([\n Complex({}, CrosshairTooltip)\n ], Axis.prototype, \"crosshairTooltip\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"title\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: null, fontStyle: null, fontWeight: null, color: null }, Font)\n ], Axis.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"labelFormat\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"skeleton\", void 0);\n __decorate([\n Property('DateTime')\n ], Axis.prototype, \"skeletonType\", void 0);\n __decorate([\n Property('Center')\n ], Axis.prototype, \"lineBreakAlignment\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"plotOffset\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"plotOffsetLeft\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"plotOffsetTop\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"plotOffsetRight\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"plotOffsetBottom\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isIndexed\", void 0);\n __decorate([\n Property(10)\n ], Axis.prototype, \"logBase\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"columnIndex\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"rowIndex\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"span\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"desiredIntervals\", void 0);\n __decorate([\n Property(3)\n ], Axis.prototype, \"maximumLabels\", void 0);\n __decorate([\n Property(1)\n ], Axis.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"zoomPosition\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"enableScrollbarOnZooming\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"opposedPosition\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"enableAutoIntervalOnZooming\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"rangePadding\", void 0);\n __decorate([\n Property('Double')\n ], Axis.prototype, \"valueType\", void 0);\n __decorate([\n Property('None')\n ], Axis.prototype, \"edgeLabelPlacement\", void 0);\n __decorate([\n Property('Auto')\n ], Axis.prototype, \"intervalType\", void 0);\n __decorate([\n Property('BetweenTicks')\n ], Axis.prototype, \"labelPlacement\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"tickPosition\", void 0);\n __decorate([\n Property('Outside')\n ], Axis.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], Axis.prototype, \"name\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"visible\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"minorTicksPerInterval\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"labelRotation\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"titleRotation\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesAt\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"placeNextToAxisLine\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"crossesInAxis\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"minimum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"maximum\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"interval\", void 0);\n __decorate([\n Property(34)\n ], Axis.prototype, \"maximumLabelWidth\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"enableTrim\", void 0);\n __decorate([\n Property(5)\n ], Axis.prototype, \"labelPadding\", void 0);\n __decorate([\n Property(5)\n ], Axis.prototype, \"titlePadding\", void 0);\n __decorate([\n Complex({}, MajorTickLines)\n ], Axis.prototype, \"majorTickLines\", void 0);\n __decorate([\n Complex({}, MinorTickLines)\n ], Axis.prototype, \"minorTickLines\", void 0);\n __decorate([\n Complex({}, MajorGridLines)\n ], Axis.prototype, \"majorGridLines\", void 0);\n __decorate([\n Complex({}, MinorGridLines)\n ], Axis.prototype, \"minorGridLines\", void 0);\n __decorate([\n Complex({}, AxisLine)\n ], Axis.prototype, \"lineStyle\", void 0);\n __decorate([\n Property(Browser.isDevice ? 'Rotate45' : 'Trim')\n ], Axis.prototype, \"labelIntersectAction\", void 0);\n __decorate([\n Property(false)\n ], Axis.prototype, \"isInversed\", void 0);\n __decorate([\n Property(100)\n ], Axis.prototype, \"coefficient\", void 0);\n __decorate([\n Property(0)\n ], Axis.prototype, \"startAngle\", void 0);\n __decorate([\n Property(true)\n ], Axis.prototype, \"startFromZero\", void 0);\n __decorate([\n Property(null)\n ], Axis.prototype, \"description\", void 0);\n __decorate([\n Property(2)\n ], Axis.prototype, \"tabIndex\", void 0);\n __decorate([\n Collection([], StripLineSettings)\n ], Axis.prototype, \"stripLines\", void 0);\n __decorate([\n Collection([], MultiLevelLabels)\n ], Axis.prototype, \"multiLevelLabels\", void 0);\n __decorate([\n Complex({ color: null, width: 0, type: 'Rectangle' }, LabelBorder)\n ], Axis.prototype, \"border\", void 0);\n __decorate([\n Complex({}, ScrollbarSettings)\n ], Axis.prototype, \"scrollbarSettings\", void 0);\n return Axis;\n}(ChildProperty));\nexport { Axis };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n function VisibleLabels(text, value, labelStyle, originalText, size, breakLabelSize, index) {\n if (size === void 0) { size = new Size(0, 0); }\n if (breakLabelSize === void 0) { breakLabelSize = new Size(0, 0); }\n if (index === void 0) { index = 1; }\n this.text = text;\n this.originalText = originalText;\n this.value = value;\n this.labelStyle = labelStyle;\n this.size = size;\n this.breakLabelSize = breakLabelSize;\n this.index = index;\n }\n return VisibleLabels;\n}());\nexport { VisibleLabels };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Animation, compile as templateComplier, Browser } from '@syncfusion/ej2-base';\nimport { merge, extend, isNullOrUndefined, resetBlazorTemplate } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { Index } from '../../common/model/base';\nimport { VisibleLabels } from '../../chart/axis/axis';\nimport { axisLabelRender, regSub } from '../model/constants';\nimport { measureText, Rect, TextOption, Size, PathOption, SvgRenderer, CanvasRenderer } from '@syncfusion/ej2-svg-base';\n/**\n * Function to sort the dataSource, by default it sort the data in ascending order.\n *\n * @param {Object} data chart data\n * @param {string} fields date fields\n * @param {boolean} isDescending boolean values of descending\n * @returns {Object[]} It returns chart data which be sorted.\n */\nexport function sort(data, fields, isDescending) {\n var sortData = extend([], data, null);\n for (var i = 0; i < sortData.length; i++) {\n for (var j = 0; j < fields.length; j++) {\n if (sortData[i][fields[j]] instanceof Date) {\n sortData[i][fields[j]] = sortData[i][fields[j]].getTime();\n }\n }\n }\n sortData.sort(function (a, b) {\n var first = 0;\n var second = 0;\n for (var i = 0; i < fields.length; i++) {\n first += a[fields[i]];\n second += b[fields[i]];\n }\n if ((!isDescending && first < second) || (isDescending && first > second)) {\n return -1;\n }\n else if (first === second) {\n return 0;\n }\n return 1;\n });\n return sortData;\n}\n/**\n * Checks if a label contains a line break.\n *\n * @param {string} label - The label to check.\n * @returns {boolean} - True if the label contains a line break, otherwise false.\n */\nexport function isBreakLabel(label) {\n return label.indexOf('
') !== -1;\n}\n/**\n * Retrieves the visible data points from a series.\n *\n * @param {Series | Chart3DSeries} series - The series to retrieve the visible data points.\n * @returns {Points[]} - An array containing the visible data points.\n */\nexport function getVisiblePoints(series) {\n var points = extend([], series.points, null, true);\n var tempPoints = [];\n var tempPoint;\n var pointIndex = 0;\n for (var i = 0; i < points.length; i++) {\n tempPoint = points[i];\n if (isNullOrUndefined(tempPoint.x)) {\n continue;\n }\n else {\n tempPoint.index = pointIndex++;\n tempPoints.push(tempPoint);\n }\n }\n return tempPoints;\n}\n/**\n * Rotates the size of text based on the provided angle.\n *\n * @param {FontModel} font - The font style of the text.\n * @param {string} text - The text to be rotated.\n * @param {number} angle - The angle of rotation.\n * @param {Chart | Chart3D} chart - The chart instance.\n * @param {FontModel} themeFontStyle - The font style based on the theme.\n * @returns {Size} - The rotated size of the text.\n */\nexport function rotateTextSize(font, text, angle, chart, themeFontStyle) {\n var transformValue = chart.element.style.transform;\n if (transformValue) {\n chart.element.style.transform = '';\n }\n var renderer = new SvgRenderer(chart.element.id);\n var labelText;\n var textCollection = [];\n var height;\n var dy;\n var label;\n var tspanElement;\n var options = {\n id: 'rotate_text',\n x: chart.initialClipRect.x,\n y: chart.initialClipRect.y,\n 'font-size': font.size || themeFontStyle.size,\n 'font-style': font.fontStyle || themeFontStyle.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight || themeFontStyle.fontWeight,\n 'transform': 'rotate(' + angle + ', 0, 0)',\n 'text-anchor': 'middle'\n };\n if (isBreakLabel(text)) {\n textCollection = text.split('
');\n labelText = textCollection[0];\n }\n else {\n labelText = text;\n }\n var htmlObject = renderer.createText(options, labelText);\n if (!chart.delayRedraw && !chart.redraw && !chart.stockChart) {\n chart.element.appendChild(chart.svgObject);\n }\n // for line break label\n if (typeof textCollection !== 'string' && textCollection.length > 1) {\n for (var i = 1, len = textCollection.length; i < len; i++) {\n height = (measureText(textCollection[i], font, chart.themeStyle.axisLabelFont).height);\n dy = (options.y) + ((i * height));\n label = textCollection[i];\n tspanElement = renderer.createTSpan({\n 'x': options.x, 'id': options.id,\n 'y': dy\n }, label);\n htmlObject.appendChild(tspanElement);\n }\n }\n var axisSvgObject = chart.svgRenderer.createSvg({ id: 'AxisLabelMax_svg' });\n if (chart.element.parentElement.style.transform.indexOf('scale') > -1) {\n document.body.appendChild(axisSvgObject);\n axisSvgObject.appendChild(htmlObject);\n }\n else {\n chart.svgObject.appendChild(htmlObject);\n }\n var box = htmlObject.getBoundingClientRect();\n if (transformValue) {\n chart.element.style.transform = transformValue;\n }\n if (chart.element.parentElement.style.transform.indexOf('scale') > -1) {\n remove(axisSvgObject);\n }\n else {\n remove(htmlObject);\n }\n if (!chart.delayRedraw && !chart.redraw && !chart.stockChart && !chart.pointsAdded) {\n remove(chart.svgObject);\n }\n if (chart.enableCanvas) {\n var textWidth = measureText(text, font, chart.themeStyle.axisLabelFont).width;\n var textHeight = measureText(text, font, chart.themeStyle.axisLabelFont).height;\n var angleInRadians = (angle * Math.PI) / 180; // Convert the rotation angle to radians\n var rotatedTextWidth = Math.abs(Math.cos(angleInRadians) * textWidth) + Math.abs(Math.sin(angleInRadians) * textHeight);\n var rotatedTextHeight = Math.abs(Math.sin(angleInRadians) * textWidth) + Math.abs(Math.cos(angleInRadians) * textHeight);\n return new Size(rotatedTextWidth, rotatedTextHeight);\n }\n return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/**\n * Removes the specified element.\n *\n * @param {string | Element} id - The id or reference of the element to be removed.\n * @returns {void}\n */\nexport function removeElement(id) {\n if (!id) {\n return null;\n }\n var element = typeof id === 'string' ? getElement(id) : id;\n if (element) {\n remove(element);\n }\n}\n/**\n * Calculates the logarithm of a specified value with respect to a specified base.\n *\n * @param {number} value - The value for which to calculate the logarithm.\n * @param {number} base - The base of the logarithm.\n * @returns {number} - The logarithm of the value with respect to the specified base.\n */\nexport function logBase(value, base) {\n return Math.log(value) / Math.log(base);\n}\n/**\n * Displays a tooltip at the specified coordinates with the given text.\n *\n * @param {string} text - The text content of the tooltip.\n * @param {number} x - The x-coordinate where the tooltip should be displayed.\n * @param {number} y - The y-coordinate where the tooltip should be displayed.\n * @param {number} areaWidth - The width of the area where the tooltip is displayed.\n * @param {string} id - The id of the tooltip element.\n * @param {Element} element - The element to which the tooltip is appended.\n * @param {boolean} isTouch - Indicates whether the tooltip is displayed on a touch device.\n * @param {boolean} isTitleOrLegendEnabled - Indicates whether the tooltip is enabled for title or legend.\n * @returns {void}\n */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch, isTitleOrLegendEnabled, bound) {\n //let id1: string = 'EJ2_legend_tooltip';\n var tooltip = document.getElementById(id);\n var size = measureText(text, {\n fontFamily: 'Segoe UI', size: '12px',\n fontStyle: 'Normal', fontWeight: 'Regular'\n });\n var width = size.width + 5;\n x = (x + width > areaWidth) ? x - (width + 15) : x;\n if (bound && x < bound.x) {\n x = bound.x;\n }\n y = isTitleOrLegendEnabled ? (y - size.height / 2) : y + 15;\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id,\n styles: 'top:' + (y).toString() + 'px;left:' + (x + 15).toString() +\n 'px;background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n 'position:absolute;border:1px solid rgb(112, 112, 112); padding-left : 3px; padding-right : 2px;' +\n 'padding-bottom : 2px; padding-top : 2px; font-size:12px; font-family: \"Segoe UI\"'\n });\n tooltip.innerText = text;\n element.appendChild(tooltip);\n var left = parseInt(tooltip.style.left.replace('px', ''), 10);\n if (left < 0) {\n tooltip.style.left = '0px';\n }\n }\n else {\n tooltip.innerText = text;\n tooltip.style.top = (y).toString() + 'px';\n tooltip.style.left = (x + 15).toString() + 'px';\n }\n if (isTouch) {\n setTimeout(function () { removeElement(id); }, 1500);\n }\n}\n/**\n * Checks if a value is within the specified range.\n *\n * @param {number} value - The value to check.\n * @param {VisibleRangeModel} range - The range to check against.\n * @returns {boolean} - True if the value is inside the range, otherwise false.\n */\nexport function inside(value, range) {\n return (value < range.max) && (value > range.min);\n}\n/**\n * Checks if a value is within the specified range.\n *\n * @param {number} value - The value to check.\n * @param {VisibleRangeModel} range - The range to check against.\n * @returns {boolean} - True if the value is inside the range, otherwise false.\n */\nexport function withIn(value, range) {\n return (value <= range.max) && (value >= range.min);\n}\n/**\n * Adjusts the value based on the axis type.\n *\n * @param {number} value - The value to adjust.\n * @param {Axis} axis - The axis used for adjustment.\n * @returns {number} - The adjusted value.\n */\nexport function logWithIn(value, axis) {\n return axis.valueType === 'Logarithmic' ? logBase(value, axis.logBase) : value;\n}\n/**\n * Checks if a point is within the range of the previous and next points in a series.\n *\n * @param {Points} previousPoint - The previous point in the series.\n * @param {Points} currentPoint - The current point to check.\n * @param {Points} nextPoint - The next point in the series.\n * @param {Series} series - The series to which the points belong.\n * @returns {boolean} - A boolean indicating if the point is within the range.\n */\nexport function withInRange(previousPoint, currentPoint, nextPoint, series) {\n var mX2 = logWithIn(currentPoint.xValue, series.xAxis);\n var mX1 = previousPoint ? logWithIn(previousPoint.xValue, series.xAxis) : mX2;\n var mX3 = nextPoint ? logWithIn(nextPoint.xValue, series.xAxis) : mX2;\n var xStart = Math.floor(series.xAxis.visibleRange.min);\n var xEnd = Math.ceil(series.xAxis.visibleRange.max);\n return ((mX1 >= xStart && mX1 <= xEnd) || (mX2 >= xStart && mX2 <= xEnd) ||\n (mX3 >= xStart && mX3 <= xEnd) || (xStart >= mX1 && xStart <= mX3));\n}\n/**\n * Calculates the sum of an array of numbers.\n *\n * @param {number[]} values - An array of numbers.\n * @returns {number} - The sum of the numbers in the array.\n */\nexport function sum(values) {\n var sum = 0;\n for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n var value = values_1[_i];\n sum += value;\n }\n return sum;\n}\n/**\n * Calculates the sum of elements in a subarray.\n *\n * @param {Object[]} values - The array containing elements.\n * @param {number} first - The index of the first element in the subarray.\n * @param {number} last - The index of the last element in the subarray.\n * @param {number[]} index - The array of indices.\n * @param {Series} series - The series object.\n * @returns {number} - The sum of elements in the subarray.\n */\nexport function subArraySum(values, first, last, index, series) {\n var sum = 0;\n if (index !== null) {\n for (var i = (first + 1); i < last; i++) {\n if (index.indexOf(i) === -1) {\n sum += values[i][series.yName];\n }\n }\n }\n else {\n for (var i = (first + 1); i < last; i++) {\n if (!isNullOrUndefined(values[i][series.yName])) {\n sum += values[i][series.yName];\n }\n }\n }\n return sum;\n}\n/**\n * Subtracts thickness from the given rectangle.\n *\n * @param {Rect} rect - The rectangle from which to subtract thickness.\n * @param {Thickness} thickness - The thickness to subtract.\n * @returns {Rect} - The resulting rectangle after subtracting thickness.\n */\nexport function subtractThickness(rect, thickness) {\n rect.x += thickness.left;\n rect.y += thickness.top;\n rect.width -= thickness.left + thickness.right;\n rect.height -= thickness.top + thickness.bottom;\n return rect;\n}\n/**\n * Subtracts a rectangle representing thickness from the given rectangle.\n *\n * @param {Rect} rect - The rectangle from which to subtract the thickness rectangle.\n * @param {Thickness} thickness - The rectangle representing the thickness to subtract.\n * @returns {Rect} - The resulting rectangle after subtracting the thickness rectangle.\n */\nexport function subtractRect(rect, thickness) {\n rect.x += thickness.x;\n rect.y += thickness.y;\n rect.width -= thickness.x + thickness.width;\n rect.height -= thickness.y + thickness.height;\n return rect;\n}\n/**\n * Converts a degree value to a location on the chart based on the provided radius and center point.\n *\n * @param {number} degree - The degree value to convert.\n * @param {number} radius - The radius from the center point.\n * @param {ChartLocation} center - The center point of the chart.\n * @returns {ChartLocation} - The location on the chart corresponding to the degree value.\n */\nexport function degreeToLocation(degree, radius, center) {\n var radian = (degree * Math.PI) / 180;\n return new ChartLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\n/**\n * Converts a degree value to radians.\n *\n * @param {number} degree - The degree value to convert.\n * @returns {number} - The equivalent value in radians.\n */\nexport function degreeToRadian(degree) {\n return degree * (Math.PI / 180);\n}\n/**\n * Get the coordinates of a rotated rectangle.\n *\n * @param {ChartLocation[]} actualPoints - The coordinates of the original rectangle.\n * @param {number} centerX - The x-coordinate of the center of rotation.\n * @param {number} centerY - The y-coordinate of the center of rotation.\n * @param {number} angle - The angle of rotation in degrees.\n * @returns {ChartLocation[]} - The coordinates of the rotated rectangle.\n */\nexport function getRotatedRectangleCoordinates(actualPoints, centerX, centerY, angle) {\n var coordinatesAfterRotation = [];\n for (var i = 0; i < 4; i++) {\n var point = actualPoints[i];\n // translate point to origin\n var tempX = point.x - centerX;\n var tempY = point.y - centerY;\n // now apply rotation\n var rotatedX = tempX * Math.cos(degreeToRadian(angle)) - tempY * Math.sin(degreeToRadian(angle));\n var rotatedY = tempX * Math.sin(degreeToRadian(angle)) + tempY * Math.cos(degreeToRadian(angle));\n // translate back\n point.x = rotatedX + centerX;\n point.y = rotatedY + centerY;\n coordinatesAfterRotation.push(new ChartLocation(point.x, point.y));\n }\n return coordinatesAfterRotation;\n}\n/**\n * Helper function to determine whether there is an intersection between the two polygons described\n * by the lists of vertices. Uses the Separating Axis Theorem.\n *\n * @param {ChartLocation[]} a an array of connected points [{x:, y:}, {x:, y:},...] that form a closed polygon\n * @param {ChartLocation[]} b an array of connected points [{x:, y:}, {x:, y:},...] that form a closed polygon\n * @returns {boolean} if there is any intersection between the 2 polygons, false otherwise\n */\nexport function isRotatedRectIntersect(a, b) {\n var polygons = [a, b];\n var minA;\n var maxA;\n var projected;\n var i;\n var i1;\n var j;\n var minB;\n var maxB;\n for (i = 0; i < polygons.length; i++) {\n // for each polygon, look at each edge of the polygon, and determine if it separates\n // the two shapes\n var polygon = polygons[i];\n for (i1 = 0; i1 < polygon.length; i1++) {\n // grab 2 vertices to create an edge\n var i2 = (i1 + 1) % polygon.length;\n var p1 = polygon[i1];\n var p2 = polygon[i2];\n // find the line perpendicular to this edge\n var normal = new ChartLocation(p2.y - p1.y, p1.x - p2.x);\n minA = maxA = undefined;\n // for each vertex in the first shape, project it onto the line perpendicular to the edge\n // and keep track of the min and max of these values\n for (j = 0; j < a.length; j++) {\n projected = normal.x * a[j].x + normal.y * a[j].y;\n if (isNullOrUndefined(minA) || projected < minA) {\n minA = projected;\n }\n if (isNullOrUndefined(maxA) || projected > maxA) {\n maxA = projected;\n }\n }\n // for each vertex in the second shape, project it onto the line perpendicular to the edge\n // and keep track of the min and max of these values\n minB = maxB = undefined;\n for (j = 0; j < b.length; j++) {\n projected = normal.x * b[j].x + normal.y * b[j].y;\n if (isNullOrUndefined(minB) || projected < minB) {\n minB = projected;\n }\n if (isNullOrUndefined(maxB) || projected > maxB) {\n maxB = projected;\n }\n }\n // if there is no overlap between the projects, the edge we are looking at separates the two\n // polygons, and we know there is no overlap\n if (maxA < minB || maxB < minA) {\n return false;\n }\n }\n }\n return true;\n}\n/**\n * Generates the legend for accumulation chart.\n *\n * @param {number} locX - The x-coordinate of the legend position.\n * @param {number} locY - The y-coordinate of the legend position.\n * @param {number} r - The radius of the chart.\n * @param {number} height - The height of the legend.\n * @param {number} width - The width of the legend.\n * @returns {string} - The generated legend.\n */\nfunction getAccumulationLegend(locX, locY, r, height, width) {\n var cartesianlarge = degreeToLocation(270, r, new ChartLocation(locX, locY));\n var cartesiansmall = degreeToLocation(270, r, new ChartLocation(locX + (width / 10), locY));\n return 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + ' ' + (locX + r) + ' ' + (locY) + ' ' + 'A' + ' ' + (r) + ' ' + (r) +\n ' ' + 0 + ' ' + 1 + ' ' + 1 + ' ' + cartesianlarge.x + ' ' + cartesianlarge.y + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX +\n (width / 10)) + ' ' + (locY - (height / 10)) + ' ' + 'L' + (locX + (r)) + ' ' + (locY - height / 10) + ' ' + 'A' + ' '\n + (r) + ' ' + (r) + ' ' + 0 + ' ' + 0 + ' ' + 0 + ' ' + cartesiansmall.x + ' ' + cartesiansmall.y + ' ' + 'Z';\n}\n/**\n * Calculates the angle between two points.\n *\n * @param {ChartLocation} center - The center point.\n * @param {ChartLocation} point - The point to calculate the angle from the center.\n * @returns {number} - The angle in degrees.\n */\nexport function getAngle(center, point) {\n var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n angle = angle < 0 ? (6.283 + angle) : angle;\n return angle * (180 / Math.PI);\n}\n/**\n * Returns a sub-array of values starting from the specified index.\n *\n * @param {number[]} values - The array of numbers.\n * @param {number} index - The index from which the sub-array starts.\n * @returns {number[]} - The sub-array of values.\n */\nexport function subArray(values, index) {\n var subArray = [];\n for (var i = 0; i <= index - 1; i++) {\n subArray.push(values[i]);\n }\n return subArray;\n}\n/**\n * Converts a value to its corresponding coefficient based on the axis range.\n *\n * @param {number} value - The value to be converted.\n * @param {Axis} axis - The axis object containing range information.\n * @returns {number} - The coefficient value corresponding to the input value.\n */\nexport function valueToCoefficient(value, axis) {\n var range = axis.visibleRange;\n var result = (value - range.min) / (range.delta);\n var isInverse = axis.isChart ? axis.isAxisInverse : axis.isInversed;\n return isInverse ? (1 - result) : result;\n}\n/**\n * Transforms a point to its visible position based on the axes range and inversion.\n *\n * @param {number} x - The x-coordinate of the point.\n * @param {number} y - The y-coordinate of the point.\n * @param {Axis} xAxis - The x-axis object containing range information.\n * @param {Axis} yAxis - The y-axis object containing range information.\n * @param {boolean} [isInverted=false] - Specifies if the chart is inverted.\n * @param {Series} [series] - The series object for additional information (optional).\n * @returns {ChartLocation} - The transformed visible position of the point.\n */\nexport function TransformToVisible(x, y, xAxis, yAxis, isInverted, series) {\n x = (xAxis.valueType === 'Logarithmic' ? logBase(x > 1 ? x : 1, xAxis.logBase) : x);\n y = (yAxis.valueType === 'Logarithmic' ?\n logBase(y > 1 ? y : 1, yAxis.logBase) : y);\n x += xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks' && series.type !== 'Radar' ? 0.5 : 0;\n var radius = series.chart.radius * valueToCoefficient(y, yAxis);\n var point = CoefficientToVector(valueToPolarCoefficient(x, xAxis), series.chart.primaryXAxis.startAngle);\n return {\n x: (series.clipRect.width / 2 + series.clipRect.x) + radius * point.x,\n y: (series.clipRect.height / 2 + series.clipRect.y) + radius * point.y\n };\n}\n/**\n * Finds the index from the given id.\n *\n * @param {string} id - The id to search for.\n * @param {boolean} [isPoint=false] - Specifies if the id represents a data point (optional).\n * @returns {Index} - The index found from the id.\n */\nexport function indexFinder(id, isPoint) {\n if (isPoint === void 0) { isPoint = false; }\n var ids = ['NaN', 'NaN'];\n if (id.indexOf('_Point_') > -1) {\n ids = id.split('_Series_')[1].split('_Point_');\n }\n else if (id.indexOf('_shape_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_shape_');\n ids[0] = '0';\n }\n else if (id.indexOf('_text_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n ids = id.split('_text_');\n ids[0] = '0';\n }\n return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n}\n/**\n * Converts a coefficient value to a vector representing a point on the circumference of a circle.\n *\n * @param {number} coefficient - The coefficient value to convert.\n * @param {number} startAngle - The starting angle of the circle.\n * @returns {ChartLocation} - The vector representing the point on the circle.\n */\nexport function CoefficientToVector(coefficient, startAngle) {\n startAngle = startAngle < 0 ? startAngle + 360 : startAngle;\n var angle = Math.PI * (1.5 - 2 * coefficient);\n angle = angle + (startAngle * Math.PI) / 180;\n return { x: Math.cos(angle), y: Math.sin(angle) };\n}\n/**\n * Converts a value to a polar coefficient value based on the axis.\n *\n * @param {number} value - The value to convert.\n * @param {Axis} axis - The axis object.\n * @returns {number} - The polar coefficient value.\n */\nexport function valueToPolarCoefficient(value, axis) {\n var range = axis.visibleRange;\n var delta;\n var length;\n if (axis.valueType !== 'Category') {\n delta = (range.max - (axis.valueType === 'DateTime' ? axis.dateTimeInterval : range.interval)) - range.min;\n length = axis.visibleLabels.length - 1;\n delta = delta === 0 ? 1 : delta;\n }\n else {\n // To split an interval equally based on visible labels count\n delta = axis.visibleLabels.length === 1 ? 1 :\n (axis.visibleLabels[axis.visibleLabels.length - 1].value - axis.visibleLabels[0].value);\n length = axis.visibleLabels.length;\n }\n return axis.isAxisInverse ? ((value - range.min) / delta) * (1 - 1 / (length)) :\n 1 - ((value - range.min) / delta) * (1 - 1 / (length));\n}\n/** @private */\nvar Mean = /** @class */ (function () {\n function Mean(verticalStandardMean, verticalSquareRoot, horizontalStandardMean, horizontalSquareRoot, verticalMean, horizontalMean) {\n this.verticalStandardMean = verticalStandardMean;\n this.horizontalStandardMean = horizontalStandardMean;\n this.verticalSquareRoot = verticalSquareRoot;\n this.horizontalSquareRoot = horizontalSquareRoot;\n this.verticalMean = verticalMean;\n this.horizontalMean = horizontalMean;\n }\n return Mean;\n}());\nexport { Mean };\n/** @private */\nvar PolarArc = /** @class */ (function () {\n function PolarArc(startAngle, endAngle, innerRadius, radius, currentXPosition) {\n this.startAngle = startAngle;\n this.endAngle = endAngle;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.currentXPosition = currentXPosition;\n }\n return PolarArc;\n}());\nexport { PolarArc };\n/**\n * Creates a tooltip element with the specified id, text, position, and font size.\n *\n * @param {string} id - The id of the tooltip element.\n * @param {string} text - The text content of the tooltip.\n * @param {number} top - The top position of the tooltip.\n * @param {number} left - The left position of the tooltip.\n * @param {string} fontSize - The font size of the tooltip text.\n * @returns {void}\n */\nexport function createTooltip(id, text, top, left, fontSize) {\n var tooltip = getElement(id);\n var style = 'top:' + top.toString() + 'px;' +\n 'left:' + left.toString() + 'px;' +\n 'color:black !important; ' +\n 'background:#FFFFFF !important; ' +\n 'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px; z-index:1';\n if (!tooltip) {\n tooltip = createElement('div', {\n id: id, innerHTML: ' ' + text + ' ', styles: style\n });\n document.body.appendChild(tooltip);\n }\n else {\n tooltip.setAttribute('innerHTML', ' ' + text + ' ');\n tooltip.setAttribute('styles', style);\n }\n}\n/**\n * Creates zooming labels for the specified axis and adds them to the parent element.\n *\n * @param {Chart} chart - The chart instance.\n * @param {Axis} axis - The axis for which to create zooming labels.\n * @param {Element} parent - The parent element to which the labels will be appended.\n * @param {number} index - The index of the label.\n * @param {boolean} isVertical - Indicates whether the axis is vertical.\n * @param {Rect} rect - The bounding rectangle of the label.\n * @returns {Element} - The created zooming label element.\n */\nexport function createZoomingLabels(chart, axis, parent, index, isVertical, rect) {\n var margin = 5;\n var opposedPosition = axis.isAxisOpposedPosition;\n var anchor = chart.enableRtl ? 'end' : isVertical ? 'start' : 'auto';\n var size;\n var chartRect = chart.availableSize.width;\n var pathElement;\n var x;\n var y;\n var rx = 3;\n var arrowLocation;\n var direction;\n var scrollBarHeight = axis.scrollbarSettings.enable || (axis.zoomingScrollBar && axis.zoomingScrollBar.svgObject)\n ? axis.scrollBarHeight : 0;\n var isRtlEnabled = (chart.enableRtl && !isVertical && !axis.isInversed) ||\n (axis.isInversed && !(chart.enableRtl && !isVertical));\n for (var i = 0; i < 2; i++) {\n size = measureText(i ? (isRtlEnabled ? axis.startLabel : axis.endLabel) : (isRtlEnabled ? axis.endLabel : axis.startLabel), axis.labelStyle, chart.themeStyle.axisLabelFont);\n if (isVertical) {\n arrowLocation = i ? new ChartLocation(rect.x - scrollBarHeight, rect.y + rx) :\n new ChartLocation(axis.rect.x - scrollBarHeight, (rect.y + rect.height - rx));\n x = (rect.x + (opposedPosition ? (rect.width + margin + scrollBarHeight) : -(size.width + margin + margin + scrollBarHeight)));\n y = (rect.y + (i ? 0 : rect.height - size.height - margin));\n x += (x < 0 || ((chartRect) < (x + size.width + margin))) ? (opposedPosition ? -(size.width / 2) : size.width / 2) : 0;\n direction = findCrosshairDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, false, false, !opposedPosition, arrowLocation.x, arrowLocation.y + (i ? -rx : rx));\n }\n else {\n arrowLocation = i ? new ChartLocation((rect.x + rect.width - rx), (rect.y + rect.height + scrollBarHeight)) :\n new ChartLocation(rect.x + rx, (rect.y + rect.height + scrollBarHeight));\n x = (rect.x + (i ? (rect.width - size.width - margin) : 0));\n y = (opposedPosition ? (rect.y - size.height - 10 - scrollBarHeight) : (rect.y + rect.height + margin + scrollBarHeight));\n direction = findCrosshairDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, opposedPosition, !opposedPosition, false, arrowLocation.x + (i ? rx : -rx), arrowLocation.y);\n }\n x = x + (margin / 2);\n y = y + (3 * (size.height / 4)) + (margin / 2);\n pathElement = chart.renderer.drawPath({\n 'id': chart.element.id + '_Zoom_' + index + '_AxisLabel_Shape_' + i,\n 'fill': chart.themeStyle.crosshairFill, 'width': 2, 'color': chart.themeStyle.crosshairFill,\n 'opacity': 1, 'stroke-dasharray': null, 'd': direction\n }, null);\n parent.appendChild(pathElement);\n if (chart.theme === 'Fluent' || chart.theme === 'FluentDark') {\n var shadowId = chart.element.id + '_shadow';\n pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#' + shadowId + ')');\n var shadow = '';\n shadow += '';\n shadow += '';\n var defElement = chart.renderer.createDefs();\n defElement.setAttribute('id', chart.element.id + 'SVG_tooltip_definition');\n parent.appendChild(defElement);\n defElement.innerHTML = shadow;\n pathElement.setAttribute('stroke', '#cccccc');\n pathElement.setAttribute('stroke-width', '0.5');\n }\n textElement(chart.renderer, new TextOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_' + i, x, y, anchor, i ? (isRtlEnabled ? axis.startLabel : axis.endLabel) : (isRtlEnabled ? axis.endLabel : axis.startLabel)), { color: chart.themeStyle.crosshairLabelFont.color, fontFamily: 'Segoe UI', fontWeight: 'Regular', size: '11px' }, chart.themeStyle.crosshairLabelFont.color, parent, null, null, null, null, null, null, null, null, null, null, chart.themeStyle.crosshairLabelFont);\n }\n return parent;\n}\n/**\n * Finds the direction of the crosshair based on the provided parameters.\n *\n * @param {number} rX - The x-coordinate of the crosshair line.\n * @param {number} rY - The y-coordinate of the crosshair line.\n * @param {Rect} rect - The bounding rectangle of the crosshair.\n * @param {ChartLocation} arrowLocation - The location of the arrow in the crosshair.\n * @param {number} arrowPadding - The padding for the arrow.\n * @param {boolean} top - Indicates whether the crosshair is positioned at the top.\n * @param {boolean} bottom - Indicates whether the crosshair is positioned at the bottom.\n * @param {boolean} left - Indicates whether the crosshair is positioned at the left.\n * @param {number} tipX - The x-coordinate of the crosshair tip.\n * @param {number} tipY - The y-coordinate of the crosshair tip.\n * @returns {string} - The direction of the crosshair ('Top', 'Bottom', 'Left', 'Right', 'Center').\n */\nexport function findCrosshairDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY) {\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY);\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + height);\n }\n if ((arrowLocation.x - arrowPadding / 2) > startX) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (arrowLocation.y));\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY)\n + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + (startY + rY) + ' L' + ' ' + (width) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + (tipY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + (startY + rY) + ' L' + ' ' + (startX) + ' ' + (arrowLocation.y - arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + (tipY));\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding / 2));\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n//Within bounds\n/**\n * Checks if the provided coordinates are within the bounds of the rectangle.\n *\n * @param {number} x - The x-coordinate to check.\n * @param {number} y - The y-coordinate to check.\n * @param {Rect} bounds - The bounding rectangle.\n * @param {number} width - The width of the area to include in the bounds check.\n * @param {number} height - The height of the area to include in the bounds check.\n * @returns {boolean} - Returns true if the coordinates are within the bounds; otherwise, false.\n */\nexport function withInBounds(x, y, bounds, width, height) {\n if (width === void 0) { width = 0; }\n if (height === void 0) { height = 0; }\n return (x >= bounds.x - width && x <= bounds.x + bounds.width + width && y >= bounds.y - height\n && y <= bounds.y + bounds.height + height);\n}\n/**\n * Gets the x-coordinate value for a given point value on the axis.\n *\n * @param {number} value - The point value.\n * @param {number} size - The size of the axis.\n * @param {Axis} axis - The axis.\n * @returns {number} - Returns the x-coordinate value.\n */\nexport function getValueXByPoint(value, size, axis) {\n var actualValue = !axis.isAxisInverse ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/**\n * Gets the y-coordinate value for a given point value on the axis.\n *\n * @param {number} value - The point value.\n * @param {number} size - The size of the axis.\n * @param {Axis} axis - The axis.\n * @returns {number} - Returns the y-coordinate value.\n */\nexport function getValueYByPoint(value, size, axis) {\n var actualValue = axis.isAxisInverse ? value / size : (1 - (value / size));\n return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/**\n * Finds the clip rectangle for a series.\n *\n * @param {Series} series - The series for which to find the clip rectangle.\n * @param {boolean} isCanvas - Indicates whether the rendering is on a canvas.\n * @returns {void}\n */\nexport function findClipRect(series, isCanvas) {\n if (isCanvas === void 0) { isCanvas = false; }\n var rect = series.clipRect;\n if (isCanvas && (series.type === 'Polar' || series.type === 'Radar')) {\n if (series.drawType === 'Scatter') {\n rect.x = series.xAxis.rect.x;\n rect.y = series.yAxis.rect.y;\n rect.width = series.xAxis.rect.width;\n rect.height = series.yAxis.rect.height;\n }\n else {\n rect.x = series.xAxis.rect.x / 2;\n rect.y = series.yAxis.rect.y / 2;\n rect.width = series.xAxis.rect.width;\n rect.height = series.yAxis.rect.height;\n }\n }\n else {\n if (series.chart.requireInvertedAxis) {\n rect.x = series.yAxis.rect.x;\n rect.y = series.xAxis.rect.y;\n rect.width = series.yAxis.rect.width;\n rect.height = series.xAxis.rect.height;\n }\n else {\n rect.x = series.xAxis.rect.x;\n rect.y = series.yAxis.rect.y;\n rect.width = series.xAxis.rect.width;\n rect.height = series.yAxis.rect.height;\n }\n }\n}\n/**\n * Converts the first character of a string to lowercase.\n *\n * @param {string} str - The string to convert.\n * @returns {string} The converted string.\n */\nexport function firstToLowerCase(str) {\n return str.substr(0, 1).toLowerCase() + str.substr(1);\n}\n/**\n * Gets the transformation of the chart area based on the provided axes and inverted axis state.\n *\n * @param {Axis} xAxis - The X-axis of the chart.\n * @param {Axis} yAxis - The Y-axis of the chart.\n * @param {boolean} invertedAxis - Indicates whether the chart axis is inverted.\n * @returns {Rect} The transformed chart area.\n */\nexport function getTransform(xAxis, yAxis, invertedAxis) {\n var x;\n var y;\n var width;\n var height;\n if (invertedAxis) {\n x = yAxis.rect.x;\n y = xAxis.rect.y;\n width = yAxis.rect.width;\n height = xAxis.rect.height;\n }\n else {\n x = xAxis.rect.x;\n y = yAxis.rect.y;\n width = xAxis.rect.width;\n height = yAxis.rect.height;\n }\n return new Rect(x, y, width, height);\n}\n/**\n * Calculates the minimum points delta between data points on the provided axis.\n *\n * @param {Axis | Chart3DAxis} axis - The axis for which to calculate the minimum points delta.\n * @param {Series[]} seriesCollection - The collection of series in the chart.\n * @returns {number} The minimum points delta.\n */\nexport function getMinPointsDelta(axis, seriesCollection) {\n var minDelta = Number.MAX_VALUE;\n var xValues;\n var minVal;\n var seriesMin;\n var stackingGroups = [];\n for (var index = 0; index < seriesCollection.length; index++) {\n var series = seriesCollection[index];\n xValues = [];\n if (series.visible &&\n (axis.name === series.xAxisName || (axis.name === 'primaryXAxis' && series.xAxisName === null)\n || (axis.name === series.chart.primaryXAxis.name && !series.xAxisName))) {\n if (series.type.indexOf('Stacking') > -1 && stackingGroups.indexOf(series.stackingGroup) === -1) {\n stackingGroups.push(series.stackingGroup);\n }\n xValues = series.points.map(function (point) {\n return point.xValue;\n });\n xValues.sort(function (first, second) { return first - second; });\n if (xValues.length === 1) {\n seriesMin = (axis.valueType === 'DateTime' && series.xMin === series.xMax) ? (series.xMin - 25920000) : series.xMin;\n minVal = xValues[0] - (!isNullOrUndefined(seriesMin) ?\n seriesMin : axis.visibleRange.min);\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n else {\n for (var index_1 = 0; index_1 < xValues.length; index_1++) {\n var value = xValues[index_1];\n if (index_1 > 0 && value) {\n minVal = series.type.indexOf('Stacking') > -1 && axis.valueType === 'Category' ? stackingGroups.length : value - xValues[index_1 - 1];\n if (minVal !== 0) {\n minDelta = Math.min(minDelta, minVal);\n }\n }\n }\n }\n }\n }\n if (minDelta === Number.MAX_VALUE) {\n minDelta = 1;\n }\n return minDelta;\n}\n/**\n * Retrieves the animation function based on the specified effect.\n *\n * @param {string} effect - The name of the animation effect.\n * @returns {Function} The animation function corresponding to the effect.\n */\nexport function getAnimationFunction(effect) {\n var functionName;\n switch (effect) {\n case 'Linear':\n functionName = linear;\n break;\n }\n return functionName;\n}\n/**\n * Linear animation function.\n *\n * @param {number} currentTime - The current time of the animation.\n * @param {number} startValue - The starting value of the animation.\n * @param {number} endValue - The ending value of the animation.\n * @param {number} duration - The duration of the animation.\n * @returns {number} The interpolated value at the current time.\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Animates the marker element.\n *\n * @param {Element} element - The marker element to animate.\n * @param {number} delay - The delay before starting the animation.\n * @param {number} duration - The duration of the animation.\n * @param {Series | AccumulationSeries} series - The series associated with the marker.\n * @param {number} pointIndex - The index of the point in the series.\n * @param {ChartLocation} point - The location of the point.\n * @param {boolean} isLabel - Specifies whether the marker is a data label.\n * @returns {void}\n */\nexport function markerAnimate(element, delay, duration, series, pointIndex, point, isLabel) {\n var centerX = point.x;\n var centerY = point.y;\n var height = 0;\n element.style.visibility = 'hidden';\n var transform = element.getAttribute('transform');\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n height = ((args.timeStamp - args.delay) / args.duration);\n element.setAttribute('transform', 'translate(' + centerX\n + ' ' + centerY + ') scale(' + height + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n },\n end: function () {\n element.style.visibility = '';\n element.setAttribute('transform', transform ? transform : '');\n if ((series.type === 'Scatter' || series.type === 'Bubble') && !isLabel && (pointIndex === series.points.length - 1)) {\n series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n }\n }\n });\n}\n/**\n * Animates the rectangle element.\n *\n * @param {Element} element - The rectangle element to animate.\n * @param {number} delay - The delay before starting the animation.\n * @param {number} duration - The duration of the animation.\n * @param {Rect} currentRect - The current rectangle dimensions.\n * @param {Rect} previousRect - The previous rectangle dimensions.\n * @returns {void}\n */\nexport function animateRectElement(element, delay, duration, currentRect, previousRect) {\n var setStyle = function (rect) {\n element.setAttribute('x', rect.x + '');\n element.setAttribute('y', rect.y + '');\n element.setAttribute('width', rect.width + '');\n element.setAttribute('height', rect.height + '');\n };\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n delay: delay,\n //name: name,\n progress: function (args) {\n setStyle(new Rect(linear(args.timeStamp, previousRect.x, currentRect.x - previousRect.x, args.duration), linear(args.timeStamp, previousRect.y, currentRect.y - previousRect.y, args.duration), linear(args.timeStamp, previousRect.width, currentRect.width - previousRect.width, args.duration), linear(args.timeStamp, previousRect.height, currentRect.height - previousRect.height, args.duration)));\n },\n end: function () {\n setStyle(currentRect);\n }\n });\n}\n/**\n * Animation after legend click a path.\n *\n * @param {Element} element - element to be animated\n * @param {string} direction - current direction of the path\n * @param {boolean} redraw - chart redraw\n * @param {string} previousDirection - previous direction of the path\n * @param {number} animateDuration - animateDuration of the path\n * @returns {void}\n */\nexport function pathAnimation(element, direction, redraw, previousDirection, animateDuration) {\n if (!redraw || (!previousDirection && !element)) {\n return null;\n }\n var duration = 300;\n if (!isNullOrUndefined(animateDuration)) {\n duration = animateDuration;\n }\n var startDirections = previousDirection || element.getAttribute('d');\n var splitDirections = startDirections.split(/(?=[LMCZAQ])/);\n var endDirections = direction.split(/(?=[LMCZAQ])/);\n var currentDireciton;\n var startPath = [];\n var endPath = [];\n var c;\n var end;\n element.setAttribute('d', startDirections);\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n progress: function (args) {\n currentDireciton = '';\n splitDirections.map(function (directions, index) {\n startPath = directions.split(' ');\n endPath = endDirections[index] ? endDirections[index].split(' ') : startPath;\n if (startPath[0] === 'Z') {\n currentDireciton += 'Z' + ' ';\n }\n else if (startPath[0] === '') {\n currentDireciton = '';\n }\n else {\n currentDireciton += startPath[0] + ' ' +\n linear(args.timeStamp, +startPath[1], (+endPath[1] - +startPath[1]), args.duration) + ' ' +\n linear(args.timeStamp, +startPath[2], (+endPath[2] - +startPath[2]), args.duration) + ' ';\n }\n if (startPath[0] === 'C' || startPath[0] === 'Q') {\n c = 3;\n end = startPath[0] === 'Q' ? 4 : 6;\n while (c < end) {\n currentDireciton += linear(args.timeStamp, +startPath[c], (+endPath[c] - +startPath[c]), args.duration) + ' ' +\n linear(args.timeStamp, +startPath[++c], (+endPath[c] - +startPath[c]), args.duration) + ' ';\n ++c;\n }\n }\n if (startPath[0] === 'A') {\n currentDireciton += 0 + ' ' + 0 + ' ' + 1 + ' ' +\n linear(args.timeStamp, +startPath[6], (+endPath[6] - +startPath[6]), args.duration) + ' ' +\n linear(args.timeStamp, +startPath[7], (+endPath[7] - +startPath[7]), args.duration) + ' ';\n }\n });\n element.setAttribute('d', currentDireciton);\n },\n end: function () {\n element.setAttribute('d', direction);\n }\n });\n}\n/**\n * Point based animation in chart series.\n *\n * @param {Element} element element to be animated.\n * @param {string} direction current direction of the path.\n * @param {boolean} redraw chart redraw.\n * @param {string} previousDirection previous direction of the path.\n * @param {number} animateDuration animateDuration of the path.\n * @param {string} removeDirection removeDirection of the path.\n * @returns {void}\n */\nexport function animateAddPoints(element, direction, redraw, previousDirection, animateDuration, removeDirection) {\n if (!redraw || (!previousDirection && !element)) {\n return null;\n }\n var duration = 300;\n if (!isNullOrUndefined(animateDuration)) {\n duration = animateDuration;\n }\n var startDirections = previousDirection || element.getAttribute('d');\n var endDirections = direction;\n var currentDirection = '';\n element.setAttribute('d', startDirections);\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n progress: function (args) {\n currentDirection = '';\n var startPathCommands = startDirections.match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var endPathCommands = endDirections.match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var maxLength = Math.max(startPathCommands.length, endPathCommands.length);\n for (var i = 0; i < maxLength; i++) {\n var startPathCommand = startPathCommands[i] || '';\n var endPathCommand = endPathCommands[i] || '';\n var startCoords = startPathCommand.trim().split(/\\s+/);\n var endCoords = endPathCommand.trim().split(/\\s+/);\n var interpolatedCoords = [];\n for (var j = 1; j < startCoords.length; j++) {\n var startCoord = parseFloat(startCoords[j]);\n var endCoord = parseFloat(endCoords[j]);\n if (!isNaN(startCoord) && !isNaN(endCoord) && startCoords.length === endCoords.length) {\n var interpolatedValue = linear(args.timeStamp, startCoord, (endCoord - startCoord), duration);\n if (i === maxLength - 1) {\n interpolatedCoords.push(interpolatedValue);\n }\n else {\n interpolatedCoords.push(interpolatedValue);\n }\n }\n }\n if (startCoords.length !== endCoords.length) {\n currentDirection += 'L';\n }\n else {\n currentDirection += startCoords[0];\n }\n currentDirection += ' ' + interpolatedCoords.join(' ');\n currentDirection += ' ';\n }\n element.setAttribute('d', currentDirection);\n },\n end: function () {\n element.setAttribute('d', removeDirection || direction);\n }\n });\n}\n/**\n * To append the clip rect element.\n *\n * @param {boolean} redraw - chart redraw value.\n * @param {BaseAttibutes} options - element options.\n * @param {SvgRenderer} renderer - svg renderer values.\n * @param {string} clipPath - clipPath of the element.\n * @returns {Element} - Returns clip rect element.\n */\nexport function appendClipElement(redraw, options, renderer, clipPath) {\n if (clipPath === void 0) { clipPath = 'drawClipPath'; }\n var clipElement = redrawElement(redraw, options.id, options, renderer);\n if (clipElement) {\n var def = renderer.createDefs();\n def.appendChild(clipElement);\n return def;\n }\n else {\n return renderer[clipPath](options);\n }\n}\n/**\n * Triggers the label render event.\n *\n * @param {Chart | RangeNavigator | Chart3D} chart - The chart or range navigator instance.\n * @param {number} tempInterval - The temporary interval value.\n * @param {string} text - The label text.\n * @param {FontModel} labelStyle - The style of the label.\n * @param {Axis | Chart3DAxis} axis - The axis associated with the label.\n * @returns {void}\n */\nexport function triggerLabelRender(chart, tempInterval, text, labelStyle, axis) {\n var argsData = {\n cancel: false, name: axisLabelRender, axis: axis,\n text: text, value: tempInterval, labelStyle: labelStyle\n };\n chart.trigger(axisLabelRender, argsData);\n if (!argsData.cancel) {\n var isLineBreakLabels = argsData.text.indexOf('
') !== -1;\n var text_1 = (axis.enableTrim) ? (isLineBreakLabels ?\n lineBreakLabelTrim(axis.maximumLabelWidth, argsData.text, axis.labelStyle, chart.themeStyle.axisLabelFont) :\n textTrim(axis.maximumLabelWidth, argsData.text, axis.labelStyle, chart.enableRtl, chart.themeStyle.axisLabelFont))\n : argsData.text;\n axis.visibleLabels.push(new VisibleLabels(text_1, argsData.value, argsData.labelStyle, argsData.text));\n }\n}\n/**\n * The function used to find whether the range is set.\n *\n * @param {Axis | Chart3DAxis} axis - The axis to check.\n * @returns {boolean} - It returns true if the axis range is set otherwise false.\n * @private\n */\nexport function setRange(axis) {\n return (axis.minimum != null && axis.maximum != null);\n}\n/**\n * Checks if zooming is enabled for the axis.\n *\n * @param {Axis} axis - The axis to check for zooming.\n * @returns {boolean} - Returns true if zooming is enabled for the axis, otherwise false.\n */\nexport function isZoomSet(axis) {\n return (axis.zoomFactor < 1 && axis.zoomPosition >= 0);\n}\n/**\n * Calculates the actual desired intervals count based on the available size and axis.\n *\n * @param {Size} availableSize - The available size for rendering.\n * @param {Axis | Chart3DAxis} axis - The axis for which to calculate the intervals count.\n * @returns {number} - The actual desired intervals count.\n */\nexport function getActualDesiredIntervalsCount(availableSize, axis) {\n var size = axis.orientation === 'Horizontal' ? availableSize.width : availableSize.height;\n if (isNullOrUndefined(axis.desiredIntervals)) {\n var desiredIntervalsCount = (axis.orientation === 'Horizontal' ? 0.533 : 1) * axis.maximumLabels;\n desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n return desiredIntervalsCount;\n }\n else {\n return axis.desiredIntervals;\n }\n}\n/**\n * Animates the template element.\n *\n * @param {Element} element - The element to animate.\n * @param {number} delay - The delay before starting the animation.\n * @param {number} duration - The duration of the animation.\n * @param {Effect} name - The name of the animation effect.\n * @param {boolean} [isRemove] - Indicates whether to remove the element after animation completion.\n * @returns {void}\n */\nexport function templateAnimate(element, delay, duration, name, isRemove) {\n new Animation({}).animate(element, {\n duration: duration,\n delay: delay,\n name: name,\n progress: function (args) {\n args.element.style.visibility = 'visible';\n },\n end: function (args) {\n if (isRemove) {\n remove(args.element);\n }\n else {\n args.element.style.visibility = 'visible';\n }\n }\n });\n}\n/**\n * Draws a symbol at the specified location.\n *\n * @param {ChartLocation} location - The location to draw the symbol.\n * @param {string} shape - The shape of the symbol.\n * @param {Size} size - The size of the symbol.\n * @param {string} url - The URL of the image symbol.\n * @param {PathOption} options - The options for drawing the symbol.\n * @param {string} label - The label for the symbol.\n * @param {SvgRenderer | CanvasRenderer} [renderer] - The renderer for drawing the symbol.\n * @param {Rect} [clipRect] - The clipping rectangle.\n * @param {boolean} [isChartControl] - Indicates whether it is a chart control.\n * @param {BulletChart} [control] - The bullet chart control.\n * @returns {Element} - The element representing the drawn symbol.\n */\nexport function drawSymbol(location, shape, size, url, options, label, renderer, clipRect, isChartControl, control) {\n var chartRenderer = renderer ? renderer : new SvgRenderer('');\n var shapeOption = calculateShapes(location, size, shape, options, url, isChartControl, control);\n var drawElement = chartRenderer['draw' + shapeOption.functionName](shapeOption.renderOption, clipRect ? new Int32Array([clipRect.x, clipRect.y]) : null);\n //drawElement.setAttribute('aria-label', label);\n return drawElement;\n}\n/**\n * Calculates the shapes based on the specified parameters.\n *\n * @param {ChartLocation} location - The location for the shapes.\n * @param {Size} size - The size of the shapes.\n * @param {string} shape - The shape of the symbols.\n * @param {PathOption} options - The options for drawing the shapes.\n * @param {string} url - The URL of the image symbols.\n * @param {boolean} [isChart] - Indicates whether it is a chart.\n * @param {BulletChart} [control] - The bullet chart control.\n * @returns {IShapes} - The calculated shapes.\n */\nexport function calculateShapes(location, size, shape, options, url, isChart, control) {\n var dir;\n var functionName = 'Path';\n var isBulletChart = isChart;\n var width = (isBulletChart && shape === 'Circle') ? (size.width - 2) : size.width;\n var height = (isBulletChart && shape === 'Circle') ? (size.height - 2) : size.height;\n var sizeBullet = (isBulletChart) ? control.targetWidth : 0;\n var lx = location.x;\n var ly = location.y;\n var y = location.y + (-height / 2);\n var x = location.x + (-width / 2);\n var eq = 72;\n var xVal;\n var yVal;\n switch (shape) {\n case 'Bubble':\n case 'Circle':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': lx, 'cy': ly });\n break;\n case 'Plus':\n dir = 'M' + ' ' + x + ' ' + ly + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + ly + ' ' +\n 'M' + ' ' + lx + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + lx + ' ' +\n (ly + (-height / 2));\n merge(options, { 'd': dir });\n break;\n case 'Cross':\n dir = 'M' + ' ' + x + ' ' + (ly + (-height / 2)) + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n 'M' + ' ' + x + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (-height / 2));\n merge(options, { 'd': dir });\n break;\n case 'Multiply':\n dir = 'M ' + (lx - sizeBullet) + ' ' + (ly - sizeBullet) + ' L ' +\n (lx + sizeBullet) + ' ' + (ly + sizeBullet) + ' M ' +\n (lx - sizeBullet) + ' ' + (ly + sizeBullet) + ' L ' + (lx + sizeBullet) + ' ' + (ly - sizeBullet);\n merge(options, { 'd': dir, stroke: options.fill });\n break;\n case 'HorizontalLine':\n dir = 'M' + ' ' + x + ' ' + ly + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + ly;\n merge(options, { 'd': dir });\n break;\n case 'VerticalLine':\n dir = 'M' + ' ' + lx + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + lx + ' ' + (ly + (-height / 2));\n merge(options, { 'd': dir });\n break;\n case 'Diamond':\n dir = 'M' + ' ' + x + ' ' + ly + ' ' +\n 'L' + ' ' + lx + ' ' + (ly + (-height / 2)) + ' ' +\n 'L' + ' ' + (lx + (width / 2)) + ' ' + ly + ' ' +\n 'L' + ' ' + lx + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + ly + ' z';\n merge(options, { 'd': dir });\n break;\n case 'ActualRect':\n dir = 'M' + ' ' + x + ' ' + (ly + (-height / 8)) + ' ' +\n 'L' + ' ' + (lx + (sizeBullet)) + ' ' + (ly + (-height / 8)) + ' ' +\n 'L' + ' ' + (lx + (sizeBullet)) + ' ' + (ly + (height / 8)) + ' ' +\n 'L' + ' ' + x + ' ' + (ly + (height / 8)) + ' ' +\n 'L' + ' ' + x + ' ' + (ly + (-height / 8)) + ' z';\n merge(options, { 'd': dir });\n break;\n case 'TargetRect':\n dir = 'M' + ' ' + (x + (sizeBullet)) + ' ' + (ly + (-height / 2)) + ' ' +\n 'L' + ' ' + (lx + (sizeBullet / 2)) + ' ' + (ly + (-height / 2)) + ' ' +\n 'L' + ' ' + (lx + (sizeBullet / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + (x + (sizeBullet)) + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + (x + (sizeBullet)) + ' ' + (ly + (-height / 2)) + ' z';\n merge(options, { 'd': dir });\n break;\n case 'Rectangle':\n case 'Hilo':\n case 'HiloOpenClose':\n case 'Candle':\n case 'Waterfall':\n case 'BoxAndWhisker':\n case 'StepArea':\n case 'RangeStepArea':\n case 'StackingStepArea':\n case 'Square':\n case 'Flag':\n dir = 'M' + ' ' + x + ' ' + (ly + (-height / 2)) + ' ' +\n 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (-height / 2)) + ' ' +\n 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (ly + (-height / 2)) + ' z';\n merge(options, { 'd': dir });\n break;\n case 'Pyramid':\n case 'Triangle':\n dir = 'M' + ' ' + x + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + lx + ' ' + (ly + (-height / 2)) + ' ' +\n 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (ly + (height / 2)) + ' z';\n merge(options, { 'd': dir });\n break;\n case 'Funnel':\n case 'InvertedTriangle':\n dir = 'M' + ' ' + (lx + (width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n 'L' + ' ' + lx + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + (lx - (width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly - (height / 2)) + ' z';\n merge(options, { 'd': dir });\n break;\n case 'Pentagon':\n for (var i = 0; i <= 5; i++) {\n xVal = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yVal = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n dir = 'M' + ' ' + (lx + xVal) + ' ' + (ly + yVal) + ' ';\n }\n else {\n dir = dir.concat('L' + ' ' + (lx + xVal) + ' ' + (ly + yVal) + ' ');\n }\n }\n dir = dir.concat('Z');\n merge(options, { 'd': dir });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n options = calculateLegendShapes(location, new Size(width, height), shape, options).renderOption;\n return { renderOption: options, functionName: functionName };\n}\n/**\n * Gets the location of the rectangle based on the specified start and end locations and the outer rectangle.\n *\n * @param {ChartLocation} startLocation - The start location.\n * @param {ChartLocation} endLocation - The end location.\n * @param {Rect} outerRect - The outer rectangle.\n * @returns {Rect} - The location of the rectangle.\n */\nexport function getRectLocation(startLocation, endLocation, outerRect) {\n var x = (endLocation.x < outerRect.x) ? outerRect.x :\n (endLocation.x > (outerRect.x + outerRect.width)) ? outerRect.x + outerRect.width : endLocation.x;\n var y = (endLocation.y < outerRect.y) ? outerRect.y :\n (endLocation.y > (outerRect.y + outerRect.height)) ? outerRect.y + outerRect.height : endLocation.y;\n return new Rect((x > startLocation.x ? startLocation.x : x), (y > startLocation.y ? startLocation.y : y), Math.abs(x - startLocation.x), Math.abs(y - startLocation.y));\n}\n/**\n * Returns the value constrained within the specified minimum and maximum limits.\n *\n * @param {number} value - The input value.\n * @param {number} min - The minimum limit.\n * @param {number} max - The maximum limit.\n * @returns {number} - The constrained value.\n */\nexport function minMax(value, min, max) {\n return value > max ? max : (value < min ? min : value);\n}\n/**\n * Retrieves the DOM element with the specified ID.\n *\n * @param {string} id - The ID of the element to retrieve.\n * @returns {Element} - The DOM element.\n */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/**\n * Gets the template function from the provided template string or function.\n *\n * @param {string | Function} template - The template string or function.\n * @returns {Function} - The template function.\n */\nexport function getTemplateFunction(template) {\n var templateFn = null;\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n }\n else {\n templateFn = templateComplier(template);\n }\n }\n catch (e) {\n templateFn = templateComplier(template);\n }\n return templateFn;\n}\n/**\n * Renders the accumulation chart data labels using template.\n *\n * @param {HTMLElement} childElement - The child element.\n * @param {AccumulationChart} chart - The accumulation chart instance.\n * @param {boolean} isTemplate - Defines whether the template is applied or not.\n * @param {AccPoints[]} points - The accumulation chart points.\n * @param {IAccTextRenderEventArgs} argsData - The accumulation chart text render event arguments.\n * @param {AccPoints} [point] - The accumulation chart point.\n * @param {Element} [datalabelGroup] - The data label group element.\n * @param {string} [id] - The id of the element.\n * @param {AccumulationDataLabelSettingsModel} [dataLabel] - The accumulation chart data label settings.\n * @param {boolean} [redraw] - Defines whether to redraw the chart or not.\n * @returns {void}\n */\nexport function accReactTemplate(childElement, chart, isTemplate, points, argsData, point, datalabelGroup, id, dataLabel, redraw) {\n var clientRect = childElement.getBoundingClientRect();\n chart.accumulationDataLabelModule.calculateLabelSize(isTemplate, childElement, point, points, argsData, datalabelGroup, id, dataLabel, redraw, clientRect, true);\n}\n/**\n * Renders the chart data labels using template.\n *\n * @param {HTMLElement} childElement - The child element.\n * @param {Chart} chart - The chart instance.\n * @param {Points} point - The chart point.\n * @param {Series} series - The chart series.\n * @param {number} labelIndex - The index of the label.\n * @param {boolean} [redraw] - Defines whether to redraw the chart or not.\n * @returns {void}\n */\nexport function chartReactTemplate(childElement, chart, point, series, labelIndex, redraw) {\n var parentElement = document.getElementById(chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index) + '_DataLabelCollections');\n if (parentElement) {\n if (point.index === 0) {\n chart.dataLabelCollections = []; // clear old datalabel bounds for react callback\n }\n chart.dataLabelModule.calculateTemplateLabelSize(parentElement, childElement, point, series, series.marker.dataLabel, labelIndex, series.clipRect, redraw, true);\n }\n}\n/**\n * Creates a template.\n *\n * @param {HTMLElement} childElement - The child element of the template.\n * @param {number} pointIndex - The index of the point.\n * @param {string | Function} content - The content of the template.\n * @param {Chart | AccumulationChart | RangeNavigator} chart - The chart instance.\n * @param {Points | AccPoints} point - The chart or accumulation point.\n * @param {Series | AccumulationSeries} series - The chart or accumulation series.\n * @param {string} dataLabelId - The id of the data label.\n * @param {number} labelIndex - The index of the label.\n * @param {IAccTextRenderEventArgs} argsData - The event arguments for text rendering.\n * @param {boolean} isTemplate - Indicates whether it is a template.\n * @param {AccPoints[]} points - The accumulation points.\n * @param {Element} datalabelGroup - The group element of the data label.\n * @param {string} id - The id of the element.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The data label settings.\n * @param {boolean} redraw - Indicates whether to redraw.\n * @returns {HTMLElement} - The created template element.\n * @private\n */\nexport function createTemplate(childElement, pointIndex, content, chart, point, series, dataLabelId, labelIndex, argsData, isTemplate, points, datalabelGroup, id, dataLabel, redraw) {\n var templateFn = getTemplateFunction(content);\n var templateElement;\n try {\n var blazor = 'Blazor';\n var tempObject = window[blazor] ? (dataLabelId ? point : { point: point }) :\n { chart: chart, series: series, point: point };\n var templateId = dataLabelId ? dataLabelId + '_template' : 'template';\n var elementData = templateFn ? templateFn(tempObject, chart, templateId, dataLabelId ||\n childElement.id.replace(/[^a-zA-Z0-9]/g, '')) : [];\n if (elementData.length) {\n templateElement = Array.prototype.slice.call(elementData);\n var len = templateElement.length;\n for (var i = 0; i < len; i++) {\n childElement.appendChild(templateElement[i]);\n }\n }\n var reactCallback = void 0;\n if (chart.getModuleName() === 'accumulationchart') {\n reactCallback = accReactTemplate.bind(this, childElement, chart, isTemplate, points, argsData, points[pointIndex], datalabelGroup, id, dataLabel, redraw);\n if (chart.isReact) {\n chart.renderReactTemplates(reactCallback);\n }\n }\n else if (chart.getModuleName() === 'chart') {\n reactCallback = (point && series) ? chartReactTemplate.bind(this, childElement, chart, point, series, labelIndex, redraw) : reactCallback;\n if (chart.isReact) {\n chart.renderReactTemplates(reactCallback);\n }\n }\n }\n catch (e) {\n return childElement;\n }\n return childElement;\n}\n/**\n * Gets the font style.\n *\n * @param {FontModel} font - The font settings.\n * @returns {string} - The font style.\n * @private\n */\nexport function getFontStyle(font, themeFontStyle) {\n var style = '';\n style = 'font-size:' + (font.size || themeFontStyle.size) +\n '; font-style:' + (font.fontStyle || themeFontStyle.fontStyle) + '; font-weight:' + (font.fontWeight || themeFontStyle.fontWeight) +\n '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n '; color:' + font.color + ';';\n return style;\n}\n/**\n * Measures the bounding rectangle of an HTML element.\n *\n * @param {HTMLElement} element - The HTML element to measure.\n * @param {boolean} redraw - Indicates whether to redraw.\n * @param {boolean} isReactCallback - Indicates whether it's a React callback.\n * @returns {ClientRect} - The bounding rectangle of the element.\n * @private\n */\nexport function measureElementRect(element, redraw, isReactCallback) {\n if (redraw === void 0) { redraw = false; }\n if (!isReactCallback) { // If the element is already in DOM, no need to append in the body.\n document.body.appendChild(element);\n }\n var bounds = element.getBoundingClientRect();\n if (redraw) {\n remove(element);\n }\n else if (!isReactCallback) { // for react chart data label template - (callback function)\n removeElement(element.id);\n }\n return bounds;\n}\n/**\n * Finds an element in a NodeList based on its id.\n *\n * @param {NodeList} elements - The NodeList to search.\n * @param {string} id - The id of the element to find.\n * @returns {Element} - The found element.\n * @private\n */\nexport function findlElement(elements, id) {\n var element;\n for (var i = 0, length_1 = elements.length; i < length_1; i++) {\n if (elements[i].id.indexOf(id) > -1) {\n element = elements[i];\n continue;\n }\n }\n return element;\n}\n/**\n * Gets the point on the chart based on the provided coordinates and axes.\n *\n * @param {number} x - The x-coordinate of the point.\n * @param {number} y - The y-coordinate of the point.\n * @param {Axis} xAxis - The x-axis of the chart.\n * @param {Axis} yAxis - The y-axis of the chart.\n * @param {boolean} isInverted - Indicates whether the chart is inverted.\n * @returns {ChartLocation} - The calculated point.\n * @private\n */\nexport function getPoint(x, y, xAxis, yAxis, isInverted) {\n x = ((xAxis.valueType === 'Logarithmic') ?\n logBase(((x > 0) ? x : Math.pow(xAxis.logBase, xAxis.visibleRange.min)), xAxis.logBase) : x);\n y = ((yAxis.valueType === 'Logarithmic') ?\n logBase(((y > 0) ? y : Math.pow(yAxis.logBase, yAxis.visibleRange.min)), yAxis.logBase) : y);\n x = valueToCoefficient(x, xAxis);\n y = valueToCoefficient(y, yAxis);\n var xLength = (isInverted ? xAxis.rect.height : xAxis.rect.width);\n var yLength = (isInverted ? yAxis.rect.width : yAxis.rect.height);\n var locationX = isInverted ? y * (yLength) : x * (xLength);\n var locationY = isInverted ? (1 - x) * (xLength) : (1 - y) * (yLength);\n return new ChartLocation(locationX, locationY);\n}\n/**\n * Appends an element to a parent element.\n *\n * @param {Element} child - The child element to be appended.\n * @param {Element} parent - The parent element to which the child element will be appended.\n * @param {boolean} [redraw=false] - A boolean value indicating whether to redraw. Default is false.\n * @param {boolean} [animate=false] - A boolean value indicating whether to animate the appending operation. Default is false.\n * @param {string} [x='x'] - The x-coordinate for the position of the child element. Default is 'x'.\n * @param {string} [y='y'] - The y-coordinate for the position of the child element. Default is 'y'.\n * @param {number} duration - duration of the animation\n * @returns {void}\n * @private\n */\nexport function appendElement(child, parent, redraw, animate, x, y, duration) {\n if (redraw === void 0) { redraw = false; }\n if (animate === void 0) { animate = false; }\n if (x === void 0) { x = 'x'; }\n if (y === void 0) { y = 'y'; }\n if (child && child.hasChildNodes() && parent) {\n appendChildElement(false, parent, child, redraw, animate, x, y, undefined, undefined, undefined, undefined, undefined, duration);\n }\n else {\n return null;\n }\n}\n/**\n * Method to append child element.\n *\n * @param {boolean} isCanvas - canvas mode value\n * @param {Element | HTMLElement} parent - parent element\n * @param {Element | HTMLElement} childElement - childElement element\n * @param {boolean} redraw - chart redraw value\n * @param {boolean} isAnimate - animation value\n * @param {string} x - x position\n * @param {string} y - y position\n * @param {ChartLocation} start - start location value\n * @param {string} direction - direction of the element\n * @param {boolean} forceAnimate - forceAnimate\n * @param {boolean} isRect - isRect\n * @param {Rect} previousRect - previousRect\n * @param {number} animateDuration - duration of the animation\n * @param {boolean} scatterElement - The scatter element.\n * @param {number} angle - The angle of the element.\n * @param {ChartLocation} currentTransform - The current transform of the element.\n * @returns {void}\n */\nexport function appendChildElement(isCanvas, parent, childElement, redraw, isAnimate, x, y, start, direction, forceAnimate, isRect, previousRect, animateDuration, scatterElement, angle, currentTransform) {\n if (isAnimate === void 0) { isAnimate = false; }\n if (x === void 0) { x = 'x'; }\n if (y === void 0) { y = 'y'; }\n if (forceAnimate === void 0) { forceAnimate = false; }\n if (isRect === void 0) { isRect = false; }\n if (previousRect === void 0) { previousRect = null; }\n if (scatterElement === void 0) { scatterElement = false; }\n if (angle === void 0) { angle = 0; }\n if (isCanvas) {\n return null;\n }\n var existChild = scatterElement ? null : parent.querySelector('#' + childElement.id);\n var element = (existChild || getElement(childElement.id));\n var child = childElement;\n var duration = !isNullOrUndefined(animateDuration) ? animateDuration : 300;\n if (redraw && isAnimate && element) {\n start = start || (element.tagName === 'DIV' ?\n new ChartLocation(+(element.style[x].split('px')[0]), +(element.style[y].split('px')[0])) :\n new ChartLocation(+element.getAttribute(x), +element.getAttribute(y)));\n if (direction && direction !== 'undefined') {\n pathAnimation(childElement, childElement.getAttribute('d'), redraw, direction, duration);\n }\n else if (isRect && previousRect) {\n animateRectElement(child, 0, duration, new Rect(+element.getAttribute('x'), +element.getAttribute('y'), +element.getAttribute('width'), +element.getAttribute('height')), previousRect);\n }\n else {\n var end = child.tagName === 'DIV' ?\n new ChartLocation(+(child.style[x].split('px')[0]), +(child.style[y].split('px')[0])) :\n new ChartLocation(+child.getAttribute(x), +child.getAttribute(y));\n var previousTranform = element.getAttribute('transform');\n animateRedrawElement(child, duration, start, end, x, y, angle, currentTransform, previousTranform ? new ChartLocation(parseFloat(previousTranform.split(',')[1]), parseFloat(previousTranform.split(',')[2])) : new ChartLocation(0, 0));\n }\n }\n else if (redraw && isAnimate && !element && forceAnimate) {\n templateAnimate(child, 0, 600, 'FadeIn');\n }\n if (existChild) {\n parent.replaceChild(child, element);\n }\n else {\n parent.appendChild(child);\n }\n}\n/**\n * Calculates the location of the dragged rectangle.\n *\n * @param {number} x1 - The x-coordinate of the starting point.\n * @param {number} y1 - The y-coordinate of the starting point.\n * @param {number} x2 - The x-coordinate of the ending point.\n * @param {number} y2 - The y-coordinate of the ending point.\n * @param {Rect} outerRect - The outer rectangle containing the dragged rectangle.\n * @returns {Rect} - The location of the dragged rectangle.\n * @private\n */\nexport function getDraggedRectLocation(x1, y1, x2, y2, outerRect) {\n var width = Math.abs(x1 - x2);\n var height = Math.abs(y1 - y2);\n var x = Math.max(checkBounds(Math.min(x1, x2), width, outerRect.x, outerRect.width), outerRect.x);\n var y = Math.max(checkBounds(Math.min(y1, y2), height, outerRect.y, outerRect.height), outerRect.y);\n return new Rect(x, y, Math.min(width, outerRect.width), Math.min(height, outerRect.height));\n}\n/**\n * Checks if a value is within bounds defined by minimum and maximum values.\n *\n * @param {number} start - The start value.\n * @param {number} size - The size of the value.\n * @param {number} min - The minimum value of the bound.\n * @param {number} max - The maximum value of the bound.\n * @returns {number} - The adjusted value within the bounds.\n * @private\n */\nexport function checkBounds(start, size, min, max) {\n if (start < min) {\n start = min;\n }\n else if ((start + size) > (max + min)) {\n start = (max + min) - size;\n }\n return start;\n}\n/**\n * Retrieves label text for a data point.\n *\n * @param {Points} currentPoint - The current data point.\n * @param {Series} series - The series to which the data point belongs.\n * @param {Chart} chart - The chart instance.\n * @returns {string[]} - The label text.\n * @private\n */\nexport function getLabelText(currentPoint, series, chart) {\n var labelFormat = series.marker.dataLabel.format ? series.marker.dataLabel.format : series.yAxis.labelFormat;\n var text = [];\n var customLabelFormat = labelFormat.match('{value}') !== null;\n switch (series.seriesType) {\n case 'XY':\n /**\n * I255790\n * For Polar radar series, the dataLabel appears out of range when axis range is given for yaxis\n * Cause: Since symbol location for the points which did not lies in within range, lies outside of seriesRect.\n * Fix: DataLabel rendered after checking WithIn for the points\n */\n if (series.chart.chartAreaType === 'PolarRadar') {\n if (series.drawType.indexOf('Stacking') !== -1) {\n if ((series.yAxis.valueType === 'Logarithmic' &&\n logWithIn(series.stackedValues.endValues[currentPoint.index], series.yAxis)) ||\n withIn(series.stackedValues.endValues[currentPoint.index], series.yAxis.visibleRange)) {\n text.push(currentPoint.text || currentPoint.yValue.toString());\n }\n }\n else {\n if ((series.yAxis.valueType === 'Logarithmic' && logWithIn(currentPoint.yValue, series.yAxis)) ||\n withIn(currentPoint.yValue, series.yAxis.visibleRange)) {\n text.push(currentPoint.text || currentPoint.yValue.toString());\n }\n }\n }\n else {\n text.push(currentPoint.text || currentPoint.yValue.toString());\n }\n break;\n case 'HighLow':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n break;\n case 'HighLowOpenClose':\n text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n text.push(currentPoint.text || Math.max(currentPoint.open, currentPoint.close).toString());\n text.push(currentPoint.text || Math.min(currentPoint.open, currentPoint.close).toString());\n break;\n case 'BoxPlot':\n text.push(currentPoint.text || currentPoint.median.toString());\n text.push(currentPoint.text || currentPoint.maximum.toString());\n text.push(currentPoint.text || currentPoint.minimum.toString());\n text.push(currentPoint.text || currentPoint.upperQuartile.toString());\n text.push(currentPoint.text || currentPoint.lowerQuartile.toString());\n for (var _i = 0, _a = currentPoint.outliers; _i < _a.length; _i++) {\n var liers = _a[_i];\n text.push(currentPoint.text || liers.toString());\n }\n break;\n }\n if ((labelFormat || chart.useGroupingSeparator) && !currentPoint.text) {\n series.yAxis.format = chart.intl.getNumberFormat({\n format: customLabelFormat ? '' : labelFormat,\n useGrouping: chart.useGroupingSeparator\n });\n for (var i = 0; i < text.length; i++) {\n text[i] = customLabelFormat ? labelFormat.replace('{value}', series.yAxis.format(parseFloat(text[i]))) :\n series.yAxis.format(parseFloat(text[i]));\n }\n }\n return text;\n}\n/**\n * Stops the specified timer.\n *\n * @param {number} timer - The timer to stop.\n * @returns {void}\n */\nexport function stopTimer(timer) {\n window.clearInterval(timer);\n}\n/**\n * Checks if the specified rect collides with any of the rect in the collection within the given clip rect.\n *\n * @param {Rect} rect - The rect to check for collision.\n * @param {Rect[]} collections - The collection of rect to check against.\n * @param {Rect} clipRect - The clip rect.\n * @returns {boolean} - Returns true if collision occurs; otherwise, false.\n */\nexport function isCollide(rect, collections, clipRect) {\n var currentRect = new Rect(rect.x + clipRect.x, rect.y + clipRect.y, rect.width, rect.height);\n var isCollide = collections.some(function (rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n });\n return isCollide;\n}\n/**\n * Checks if the specified rect overlap each other.\n *\n * @param {Rect} currentRect - The first rect.\n * @param {Rect} rect - The second rect.\n * @returns {boolean} - Returns true if the rect overlap; otherwise, false.\n */\nexport function isOverlap(currentRect, rect) {\n return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n}\n/**\n * Checks if the specified rect is completely contained within another rect.\n *\n * @param {Rect} currentRect - The rect to check if it's contained.\n * @param {Rect} rect - The containing rect.\n * @returns {boolean} - Returns true if the specified rect is completely contained within the containing rect; otherwise, false.\n */\nexport function containsRect(currentRect, rect) {\n return (currentRect.x <= rect.x && currentRect.x + currentRect.width >= rect.x + rect.width &&\n currentRect.y <= rect.y && currentRect.height + currentRect.y >= rect.y + rect.height);\n}\n/**\n * Calculates the rect based on the specified location, text size, and margin.\n *\n * @param {ChartLocation} location - The location of the rect.\n * @param {Size} textSize - The size of the text.\n * @param {MarginModel} margin - The margin to be applied around the text.\n * @returns {Rect} - Returns the calculated rect.\n */\nexport function calculateRect(location, textSize, margin) {\n return new Rect((location.x - (textSize.width / 2) - margin.left), (location.y - (textSize.height / 2) - margin.top), textSize.width + margin.left + margin.right, textSize.height + margin.top + margin.bottom);\n}\n/**\n * Converts the color value to hexadecimal code.\n *\n * @param {ColorValue} value - The color value to convert.\n * @returns {string} - Returns the hexadecimal representation of the color.\n */\nexport function convertToHexCode(value) {\n return '#' + componentToHex(value.r) + componentToHex(value.g) + componentToHex(value.b);\n}\n/**\n * Converts a component value to its hexadecimal representation.\n *\n * @param {number} value - The component value to convert.\n * @returns {string} - Returns the hexadecimal representation of the component.\n * @private\n */\nexport function componentToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n/**\n * Converts a hexadecimal color code to its RedGreenBlue representation.\n *\n * @param {string} hex - The hexadecimal color code to convert.\n * @returns {ColorValue} - Returns the RedGreenBlue representation of the hexadecimal color code.\n */\nexport function convertHexToColor(hex) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new ColorValue(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n new ColorValue(255, 255, 255);\n}\n/**\n * Converts a color name to its corresponding hexadecimal color code.\n *\n * @param {string} color - The color name to convert.\n * @returns {string} - Returns the hexadecimal color code.\n */\nexport function colorNameToHex(color) {\n color = color === 'transparent' ? 'white' : color;\n document.body.appendChild(createElement('text', { id: 'chartmeasuretext' }));\n var element = document.getElementById('chartmeasuretext');\n element.style.color = color;\n color = window.getComputedStyle(element).color;\n remove(element);\n var isRGBValue;\n if (color.indexOf('rgb') === 0 || color.indexOf('hsl') === 0) {\n color = color.replace(/\\s/g, '').replace(/[()]/g, '');\n isRGBValue = color.slice(3).split(',');\n }\n return convertToHexCode(new ColorValue(parseInt(isRGBValue[0], 10), parseInt(isRGBValue[1], 10), parseInt(isRGBValue[2], 10)));\n}\n/**\n * Checks if the provided color string is in a valid format.\n *\n * @param {string} color - The color string to check.\n * @returns {boolean} - Returns true if the color string is in a valid format, otherwise returns false.\n */\nexport function checkColorFormat(color) {\n if (color.indexOf('rgba(') === 0 || color.indexOf('rgb(') === 0) {\n var rgbaValues = color.substring(color.indexOf('(') + 1, color.lastIndexOf(')')).split(',');\n if (rgbaValues.length === 3 || rgbaValues.length === 4) {\n return rgbaValues.every(function (val) {\n var num = parseFloat(val);\n return !isNaN(num) && num >= 0 && num <= 255;\n });\n }\n }\n else if (color.indexOf('#') === 0) {\n var hex = color.substring(1);\n return (hex.length === 3 || hex.length === 6) && /^[0-9A-Fa-f]{3,6}$/.test(hex);\n }\n return false;\n}\n/**\n * Gets the color with adjusted saturation.\n *\n * @param {string} color - The input color string.\n * @param {number} factor - The factor by which to adjust the saturation.\n * @returns {string} - The modified color string.\n */\nexport function getSaturationColor(color, factor) {\n color = colorNameToHex(color);\n color = color.replace(/[^0-9a-f]/gi, '');\n if (color.length < 6) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n factor = factor || 0;\n // convert to decimal and change luminosity\n var rgb = '#';\n var colorCode;\n for (var i = 0; i < 3; i++) {\n colorCode = parseInt(color.substr(i * 2, 2), 16);\n colorCode = Math.round(Math.min(Math.max(0, colorCode + (colorCode * factor)), 255));\n rgb += ('00' + colorCode.toString(16)).substr(colorCode.toString(16).length);\n }\n return rgb;\n}\n/**\n * Applies a lightness adjustment to the given color.\n *\n * @param {string} color - The input color string.\n * @param {number} value - The value by which to adjust the lightness.\n * @returns {string} - The modified color string.\n */\nexport function applyZLight(color, value) {\n var RGB = convertHexToColor(color);\n RGB.r = parseInt(Math.floor(RGB.r * value).toString(), 10);\n RGB.g = parseInt(Math.floor(RGB.g * value).toString(), 10);\n RGB.b = parseInt(Math.floor(RGB.b * value).toString(), 10);\n return '#' + componentToHex(RGB.r).toUpperCase() + componentToHex(RGB.g).toUpperCase() + componentToHex(RGB.b).toUpperCase();\n}\n/**\n * Calculates the median value of an array of numbers.\n *\n * @param {number[]} values - The array of numbers.\n * @returns {number} - The median value.\n */\nexport function getMedian(values) {\n var half = Math.floor(values.length / 2);\n return values.length % 2 ? values[half] : ((values[half - 1] + values[half]) / 2.0);\n}\n/**\n * Calculates the legend shapes based on the provided parameters.\n *\n * @param {ChartLocation} location - The location to position the legend shape.\n * @param {Size} size - The size of the legend shape.\n * @param {string} shape - The shape of the legend.\n * @param {PathOption} options - The options for drawing the legend shape.\n * @returns {IShapes} - The calculated legend shape.\n */\nexport function calculateLegendShapes(location, size, shape, options) {\n var padding = 10;\n var dir = '';\n var space = 2;\n var height = size.height;\n var width = size.width;\n var lx = location.x;\n var ly = location.y;\n switch (shape) {\n case 'MultiColoredLine':\n case 'Line':\n case 'StackingLine':\n case 'StackingLine100':\n dir = 'M' + ' ' + (lx + (-width * (3 / 4))) + ' ' + (ly) + ' ' +\n 'L' + ' ' + (lx + (width * (3 / 4))) + ' ' + (ly);\n merge(options, { 'd': dir });\n break;\n case 'StepLine':\n options.fill = 'transparent';\n dir = 'M' + ' ' + (lx + (-width / 2) - (padding / 4)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx +\n (-width / 2) + (width / 10)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx + (-width / 2) + (width / 10))\n + ' ' + (ly) + ' ' + 'L' + ' ' + (lx + (-width / 10)) + ' ' + (ly) + ' ' + 'L' + ' ' + (lx + (-width / 10))\n + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx + (width / 5)) + ' ' + (ly + (height / 2)) + ' ' + 'L' +\n ' ' + (lx + (width / 5)) + ' ' + (ly + (-height / 2)) + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly +\n (-height / 2)) + 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + '' + (lx + (width / 2)\n + (padding / 4)) + ' ' + (ly + (height / 2));\n merge(options, { 'd': dir });\n break;\n case 'UpArrow':\n options.fill = options.stroke;\n options.stroke = 'transparent';\n dir = 'M' + ' ' + (lx + (-width / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + (lx) + ' ' + (ly - (height / 2)) + ' ' +\n 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) +\n 'L' + ' ' + (lx + (width / 2) - space) + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + (lx) + ' ' + (ly - (height / 2) + (2 * space)) +\n 'L' + (lx - (width / 2) + space) + ' ' + (ly + (height / 2)) + ' Z';\n merge(options, { 'd': dir });\n break;\n case 'DownArrow':\n dir = 'M' + ' ' + (lx - (width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n 'L' + ' ' + (lx) + ' ' + (ly + (height / 2)) + ' ' +\n 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly - (height / 2)) +\n 'L' + ' ' + (lx + (width / 2) - space) + ' ' + (ly - (height / 2)) + ' ' +\n 'L' + ' ' + (lx) + ' ' + (ly + (height / 2) - (2 * space)) +\n 'L' + (lx - (width / 2) + space) + ' ' + (ly - (height / 2)) + ' Z';\n merge(options, { 'd': dir });\n break;\n case 'RightArrow':\n dir = 'M' + ' ' + (lx + (-width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly) + ' ' + 'L' + ' ' +\n (lx + (-width / 2)) + ' ' + (ly + (height / 2)) + ' L' + ' ' + (lx + (-width / 2)) + ' ' +\n (ly + (height / 2) - space) + ' ' + 'L' + ' ' + (lx + (width / 2) - (2 * space)) + ' ' + (ly) +\n ' L' + (lx + (-width / 2)) + ' ' + (ly - (height / 2) + space) + ' Z';\n merge(options, { 'd': dir });\n break;\n case 'LeftArrow':\n options.fill = options.stroke;\n options.stroke = 'transparent';\n dir = 'M' + ' ' + (lx + (width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n 'L' + ' ' + (lx + (-width / 2)) + ' ' + (ly) + ' ' + 'L' + ' ' +\n (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' +\n (lx + (width / 2)) + ' ' + (ly + (height / 2) - space) + ' L' + ' ' + (lx + (-width / 2) + (2 * space))\n + ' ' + (ly) + ' L' + (lx + (width / 2)) + ' ' + (ly - (height / 2) + space) + ' Z';\n merge(options, { 'd': dir });\n break;\n case 'Column':\n case 'Pareto':\n case 'StackingColumn':\n case 'StackingColumn100':\n case 'RangeColumn':\n case 'Histogram':\n dir = 'M' + ' ' + (lx - 3 * (width / 5)) + ' ' + (ly - (height / 5)) + ' ' + 'L' + ' ' +\n (lx + 3 * (-width / 10)) + ' ' + (ly - (height / 5)) + ' ' + 'L' + ' ' +\n (lx + 3 * (-width / 10)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx - 3 *\n (width / 5)) + ' ' + (ly + (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' +\n (lx + (-width / 10) - (width / 20)) + ' ' + (ly - (height / 4) - (padding / 2))\n + ' ' + 'L' + ' ' + (lx + (width / 10) + (width / 20)) + ' ' + (ly - (height / 4) -\n (padding / 2)) + ' ' + 'L' + ' ' + (lx + (width / 10) + (width / 20)) + ' ' + (ly\n + (height / 2)) + ' ' + 'L' + ' ' + (lx + (-width / 10) - (width / 20)) + ' ' + (ly +\n (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' + (lx + 3 * (width / 10)) + ' ' + (ly) + ' ' +\n 'L' + ' ' + (lx + 3 * (width / 5)) + ' ' + (ly) + ' ' + 'L' + ' '\n + (lx + 3 * (width / 5)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' '\n + (lx + 3 * (width / 10)) + ' ' + (ly + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': dir });\n break;\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n dir = 'M' + ' ' + (lx + (-width / 2) + (-padding / 4)) + ' ' + (ly - 3 * (height / 5)) + ' '\n + 'L' + ' ' + (lx + 3 * (width / 10)) + ' ' + (ly - 3 * (height / 5)) + ' ' + 'L' + ' ' +\n (lx + 3 * (width / 10)) + ' ' + (ly - 3 * (height / 10)) + ' ' + 'L' + ' ' +\n (lx - (width / 2) + (-padding / 4)) + ' ' + (ly - 3 * (height / 10)) + ' ' + 'Z' + ' '\n + 'M' + ' ' + (lx + (-width / 2) + (-padding / 4)) + ' ' + (ly - (height / 5)\n + (padding / 20)) + ' ' + 'L' + ' ' + (lx + (width / 2) + (padding / 4)) + ' ' + (ly\n - (height / 5) + (padding / 20)) + ' ' + 'L' + ' ' + (lx + (width / 2) + (padding / 4))\n + ' ' + (ly + (height / 10) + (padding / 20)) + ' ' + 'L' + ' ' + (lx - (width / 2)\n + (-padding / 4)) + ' ' + (ly + (height / 10) + (padding / 20)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + (lx - (width / 2) + (-padding / 4)) + ' ' + (ly + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (lx + (-width / 4)) + ' ' + (ly + (height / 5)\n + (padding / 10)) + ' ' + 'L' + ' ' + (lx + (-width / 4)) + ' ' + (ly + (height / 2)\n + (padding / 10)) + ' ' + 'L' + ' ' + (lx - (width / 2) + (-padding / 4))\n + ' ' + (ly + (height / 2) + (padding / 10)) + ' ' + 'Z';\n merge(options, { 'd': dir });\n break;\n case 'Spline':\n options.fill = 'transparent';\n dir = 'M' + ' ' + (lx - (width / 2)) + ' ' + (ly + (height / 5)) + ' ' + 'Q' + ' '\n + lx + ' ' + (ly - height) + ' ' + lx + ' ' + (ly + (height / 5))\n + ' ' + 'M' + ' ' + lx + ' ' + (ly + (height / 5)) + ' ' + 'Q' + ' ' + (lx\n + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' + (lx + (width / 2)) + ' '\n + (ly - (height / 2));\n merge(options, { 'd': dir });\n break;\n case 'Area':\n case 'MultiColoredArea':\n case 'RangeArea':\n case 'StackingArea':\n case 'StackingArea100':\n dir = 'M' + ' ' + (lx - (width / 2) - (padding / 4)) + ' ' + (ly + (height / 2))\n + ' ' + 'L' + ' ' + (lx + (-width / 4) + (-padding / 8)) + ' ' + (ly - (height / 2))\n + ' ' + 'L' + ' ' + (lx) + ' ' + (ly + (height / 4)) + ' ' + 'L' + ' ' + (lx\n + (width / 4) + (padding / 8)) + ' ' + (ly + (-height / 2) + (height / 4)) + ' '\n + 'L' + ' ' + (lx + (height / 2) + (padding / 4)) + ' ' + (ly + (height / 2)) + ' ' + 'Z';\n merge(options, { 'd': dir });\n break;\n case 'SplineArea':\n case 'SplineRangeArea':\n dir = 'M' + ' ' + (lx - (width / 2)) + ' ' + (ly + (height / 5)) + ' ' + 'Q' + ' ' + lx\n + ' ' + (ly - height) + ' ' + lx + ' ' + (ly + (height / 5)) + ' ' + 'Z' + ' ' + 'M'\n + ' ' + lx + ' ' + (ly + (height / 5)) + ' ' + 'Q' + ' ' + (lx + (width / 2)) + ' '\n + (ly + (height / 2)) + ' ' + (lx + (width / 2)) + ' '\n + (ly - (height / 2)) + ' ' + ' Z';\n merge(options, { 'd': dir });\n break;\n case 'Pie':\n case 'Doughnut': {\n options.stroke = 'transparent';\n var r = Math.min(height, width) / 2;\n dir = getAccumulationLegend(lx, ly, r, height, width);\n merge(options, { 'd': dir });\n break;\n }\n }\n return { renderOption: options };\n}\n/**\n * Trims the text to fit within the specified maximum width.\n *\n * @param {number} maxWidth - The maximum width for the text.\n * @param {string} text - The text to be trimmed.\n * @param {FontModel} font - The font settings for the text.\n * @param {boolean} isRtlEnabled - Indicates whether right-to-left text rendering is enabled.\n * @param {FontModel} [themeFontStyle] - The font style to be used for theme-specific settings.\n * @returns {string} - The trimmed text.\n */\nexport function textTrim(maxWidth, text, font, isRtlEnabled, themeFontStyle) {\n var label = text;\n var size = measureText(text, font, themeFontStyle).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i = textLength - 1; i >= 0; --i) {\n label = isRtlEnabled ? '...' + text.substring(0, i) : text.substring(0, i) + '...';\n size = measureText(label, font, themeFontStyle).width;\n if (size <= maxWidth) {\n return label;\n }\n }\n }\n return label;\n}\n/**\n * Trims the text and performs line breaks based on the maximum width and font settings.\n *\n * @param {number} maxWidth - The maximum width allowed for the text.\n * @param {string} text - The text to be trimmed.\n * @param {FontModel} font - The font settings for the text.\n * @param {FontModel} [themeFontStyle] - Optional. The font style based on the theme.\n * @returns {string[]} - An array of trimmed text lines with line breaks.\n */\nexport function lineBreakLabelTrim(maxWidth, text, font, themeFontStyle) {\n var labelCollection = [];\n var breakLabels = text.split('
');\n for (var i = 0; i < breakLabels.length; i++) {\n text = breakLabels[i];\n var size = measureText(text, font, themeFontStyle).width;\n if (size > maxWidth) {\n var textLength = text.length;\n for (var i_1 = textLength - 1; i_1 >= 0; --i_1) {\n text = text.substring(0, i_1) + '...';\n size = measureText(text, font, themeFontStyle).width;\n if (size <= maxWidth) {\n labelCollection.push(text);\n break;\n }\n }\n }\n else {\n labelCollection.push(text);\n }\n }\n return labelCollection;\n}\n/**\n * Converts a string value to a number, considering the container size for percentage values.\n *\n * @param {string} value - The string value to convert to a number.\n * @param {number} containerSize - The size of the container, used for percentage values.\n * @returns {number} - The converted numeric value.\n */\nexport function stringToNumber(value, containerSize) {\n if (value !== null && value !== undefined) {\n return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n }\n return null;\n}\n/**\n * Redraws the SVG or canvas element based on the provided options.\n *\n * @param {boolean} redraw - Specifies whether to redraw the element.\n * @param {string} id - The id of the element to redraw.\n * @param {PathAttributes | RectAttributes | CircleAttributes} [options] - The attributes of the element to redraw.\n * @param {SvgRenderer | CanvasRenderer} [renderer] - The renderer to use for redrawing.\n * @returns {Element} - The redrawn element.\n */\nexport function redrawElement(redraw, id, options, renderer) {\n if (!redraw) {\n return null;\n }\n var element = getElement(id);\n if (element && options) {\n renderer.setElementAttributes(options, element.tagName === 'clipPath' ? element.childNodes[0] : element);\n }\n return element;\n}\n/**\n * Animates the redrawn element from its start to end location over a specified duration.\n *\n * @param {Element | HTMLElement} element - The element to animate.\n * @param {number} duration - The duration of the animation in milliseconds.\n * @param {ChartLocation} start - The start location of the element.\n * @param {ChartLocation} end - The end location of the element.\n * @param {string} [x='x'] - The attribute representing the horizontal position of the element.\n * @param {string} [y='y'] - The attribute representing the vertical position of the element.\n * @param {number} [angle=0] - The angle of rotation for the element.\n * @param {ChartLocation} [newTransform=new ChartLocation(0, 0)] - The new transform location of the element.\n * @param {ChartLocation} [previousTransform=new ChartLocation(0, 0)] - The previous transform location of the element.\n * @returns {void}\n */\nexport function animateRedrawElement(element, duration, start, end, x, y, angle, newTransform, previousTransform) {\n if (x === void 0) { x = 'x'; }\n if (y === void 0) { y = 'y'; }\n if (angle === void 0) { angle = 0; }\n if (newTransform === void 0) { newTransform = new ChartLocation(0, 0); }\n if (previousTransform === void 0) { previousTransform = new ChartLocation(0, 0); }\n var isDiv = element.tagName === 'DIV';\n var setStyle = function (xValue, yValue, rotateX, rotateY) {\n if (isDiv) {\n element.style[x] = xValue + 'px';\n element.style[y] = yValue + 'px';\n }\n else {\n element.setAttribute(x, xValue + '');\n element.setAttribute(y, yValue + '');\n if (angle && newTransform.x && newTransform.y && previousTransform.x && previousTransform.y && rotateX && rotateY) {\n element.setAttribute('transform', 'rotate(' + angle + ',' + rotateX + ',' + rotateY + ')');\n }\n }\n };\n setStyle(start.x, start.y, previousTransform.x, previousTransform.y);\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n progress: function (args) {\n setStyle(linear(args.timeStamp, start.x, end.x - start.x, args.duration), linear(args.timeStamp, start.y, end.y - start.y, args.duration), linear(args.timeStamp, previousTransform.x, newTransform.x - previousTransform.x, args.duration), linear(args.timeStamp, previousTransform.y, newTransform.y - previousTransform.y, args.duration));\n },\n end: function () {\n setStyle(end.x, end.y, newTransform.x, newTransform.y);\n }\n });\n}\n/**\n * Renders a text element using the specified renderer and options.\n *\n * @param {SvgRenderer | CanvasRenderer} renderer - The renderer used for rendering.\n * @param {TextOption} option - The options for the text element.\n * @param {FontModel} font - The font settings for the text.\n * @param {string} color - The color of the text.\n * @param {HTMLElement | Element} parent - The parent element to which the text element is appended.\n * @param {boolean} [isMinus=false] - Indicates whether the text represents a negative value.\n * @param {boolean} [redraw] - Indicates whether to redraw the element.\n * @param {boolean} [isAnimate] - Indicates whether to animate the element.\n * @param {boolean} [forceAnimate=false] - Indicates whether to force animation.\n * @param {number} [animateDuration] - The duration of the animation in milliseconds.\n * @param {Rect} [seriesClipRect] - The clipping rectangle for the series.\n * @param {Size} [labelSize] - The size of the label.\n * @param {boolean} [isRotatedLabelIntersect] - Indicates whether rotated labels intersect.\n * @param {boolean} [isCanvas] - Indicates whether the rendering is done on a canvas.\n * @param {boolean} [isDataLabelWrap] - Indicates whether data labels are wrapped.\n * @param {FontModel} [themeFontStyle] - The font settings based on the theme.\n * @param {ChartLocation} [transform] - The location to transform the text element.\n * @returns {Element} - The rendered text element.\n */\nexport function textElement(renderer, option, font, color, parent, isMinus, redraw, isAnimate, forceAnimate, animateDuration, seriesClipRect, labelSize, isRotatedLabelIntersect, isCanvas, isDataLabelWrap, themeFontStyle, transform) {\n if (isMinus === void 0) { isMinus = false; }\n if (forceAnimate === void 0) { forceAnimate = false; }\n var renderOptions = {};\n var tspanElement;\n //let renderer: SvgRenderer = new SvgRenderer('');\n var height;\n var dy;\n var label;\n var width = 0;\n var dx;\n var maxWidth = 0;\n if (option.text.length > 1 && isDataLabelWrap) {\n for (var i = 0, len = option.text.length; i < len; i++) {\n maxWidth = Math.max(maxWidth, measureText(option.text[i], font, themeFontStyle).width);\n }\n width = measureText(option.text[0], font, themeFontStyle).width;\n }\n dx = (option.text.length > 1 && isDataLabelWrap) ? (option.x + maxWidth / 2 - width / 2) : option.x;\n renderOptions = {\n 'id': option.id,\n 'x': dx,\n 'y': option.y,\n 'fill': color ? color : 'black',\n 'font-size': font.size || themeFontStyle.size,\n 'font-style': font.fontStyle || themeFontStyle.fontStyle,\n 'font-family': font.fontFamily || themeFontStyle.fontFamily,\n 'font-weight': font.fontWeight || themeFontStyle.fontWeight,\n 'text-anchor': option.anchor,\n 'labelRotation': option.labelRotation,\n 'transform': option.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': option.baseLine\n };\n var text = typeof option.text === 'string' ? option.text : isMinus ? option.text[option.text.length - 1] : option.text[0];\n var transX = seriesClipRect ? seriesClipRect.x : 0;\n var transY = seriesClipRect ? seriesClipRect.y : 0;\n var htmlObject = renderer.createText(renderOptions, text, transX, transY);\n if (typeof option.text !== 'string' && option.text.length > 1) {\n for (var i = 1, len = option.text.length; i < len; i++) {\n height = (measureText(option.text[i], font, themeFontStyle).height);\n width = measureText(option.text[i], font, themeFontStyle).width;\n dy = (option.y) + ((isMinus) ? -(i * height) : (i * height));\n dx = isDataLabelWrap ? (option.x + maxWidth / 2 - width / 2) : option.x;\n label = isMinus ? option.text[option.text.length - (i + 1)] : option.text[i];\n if (isCanvas) {\n tspanElement = renderer.createText(renderOptions, label, null, null, dy, true);\n }\n else {\n tspanElement = renderer.createTSpan({\n 'x': dx, 'id': option.id,\n 'y': dy\n }, label);\n htmlObject.appendChild(tspanElement);\n }\n }\n }\n if (!isRotatedLabelIntersect) {\n appendChildElement(renderer instanceof CanvasRenderer, parent, htmlObject, redraw, isAnimate, 'x', 'y', null, null, forceAnimate, false, null, animateDuration, false, option.labelRotation, transform);\n }\n return htmlObject;\n}\n/**\n * Calculates the size of the chart.\n *\n * @param {Chart | AccumulationChart | RangeNavigator | StockChart | Chart3D | CircularChart3D} chart - The chart for which to calculate the size.\n * @returns {void}\n */\nexport function calculateSize(chart) {\n // fix for Chart rendered with default width in IE issue\n var containerWidth = chart.element.clientWidth || chart.element.offsetWidth;\n var containerHeight = chart.element.clientHeight;\n if (chart.stockChart) {\n containerWidth = chart.stockChart.availableSize.width;\n containerHeight = chart.stockChart.availableSize.height;\n }\n var height = 450;\n var marginHeight;\n if (chart.getModuleName() === 'rangeNavigator') {\n var range = chart;\n var tooltipSpace = range.tooltip.enable ? 35 : 0;\n var periodHeight = range.periodSelectorSettings.periods.length ?\n range.periodSelectorSettings.height : 0;\n marginHeight = range.margin.top + range.margin.bottom + tooltipSpace;\n var labelSize = measureText('tempString', range.labelStyle, range.themeStyle.axisLabelFont).height;\n var labelPadding = 15;\n height = (chart.series.length ? (Browser.isDevice ? 80 : 120) : ((range.enableGrouping ? (40 + labelPadding + labelSize) : 40)\n + marginHeight)) + periodHeight;\n if (range.disableRangeSelector) {\n height = periodHeight;\n }\n if (chart.stockChart && chart.stockChart.chart.axisCollections[1].labelPosition === 'Outside') {\n var padding = chart.stockChart.chart.axisCollections[1].labelPadding + chart.stockChart.chart.axisCollections[1].lineStyle.width * 0.5;\n chart.width = (chart.stockChart.availableSize.width - (chart.stockChart.chart.axisCollections[1].maxLabelSize.width + padding)).toString();\n }\n }\n chart.availableSize = new Size(stringToNumber(chart.width, containerWidth) || containerWidth || 600, stringToNumber(chart.height, containerHeight || height) || containerHeight || height);\n if (chart.getModuleName() === 'chart') {\n var scaleX = 1;\n var scaleY = 1;\n if (chart.width === '' || chart.width === null || chart.width === '100%') {\n if (containerWidth && chart.element.parentElement.style.transform.indexOf('scale') > -1) {\n scaleX = 1;\n }\n else {\n scaleX = chart.element.getBoundingClientRect().width > 0 ?\n chart.element.getBoundingClientRect().width / chart.availableSize.width : 1;\n }\n if (containerHeight && chart.element.parentElement.style.transform.indexOf('scale') > -1) {\n scaleY = 1;\n }\n else {\n scaleY = chart.element.getBoundingClientRect().height > 0 ?\n chart.element.getBoundingClientRect().height / chart.availableSize.height : 1;\n }\n var transformValue = chart.element.style.transform;\n if (transformValue) {\n var scaleValue = parseFloat(transformValue.match(/scale\\((.*?)\\)/)[1]);\n scaleX = scaleValue ? scaleX / scaleValue : scaleX;\n scaleY = scaleValue ? scaleY / scaleValue : scaleY;\n }\n chart.availableSize.width = chart.availableSize.width * scaleX;\n chart.availableSize.height = chart.availableSize.height * scaleY;\n }\n chart.scaleX = scaleX;\n chart.scaleY = scaleY;\n }\n}\n/**\n * Creates an SVG element for the specified chart or chart element.\n *\n * @param {Chart | AccumulationChart | RangeNavigator | Chart3D | CircularChart3D} chart - The chart or chart element for which to create the SVG element.\n * @returns {void}\n */\nexport function createSvg(chart) {\n chart.canvasRender = new CanvasRenderer(chart.element.id);\n chart.renderer = chart.enableCanvas ? chart.canvasRender : new SvgRenderer(chart.element.id);\n calculateSize(chart);\n if (chart.stockChart && chart.getModuleName() === 'chart') {\n chart.svgObject = chart.stockChart.chartObject;\n }\n else if (chart.stockChart && chart.getModuleName() === 'rangeNavigator') {\n chart.svgObject = chart.stockChart.selectorObject;\n }\n else {\n if (chart.enableCanvas) {\n chart.svgObject = chart.renderer.createCanvas({\n id: chart.element.id + '_canvas',\n width: chart.availableSize.width,\n height: chart.availableSize.height\n });\n }\n else {\n chart.svgObject = chart.renderer.createSvg({\n id: chart.element.id + '_svg',\n width: chart.availableSize.width,\n height: chart.availableSize.height\n });\n }\n }\n if (chart.enableCanvas) {\n chart.renderer.ctx.direction = chart.enableRtl ? 'rtl' : 'ltr';\n }\n}\n/**\n * Gets the title text with specified style and width, and supports right-to-left rendering.\n *\n * @param {string} title - The title text.\n * @param {FontModel} style - The font style for the title.\n * @param {number} width - The width available for rendering the title.\n * @param {boolean} isRtlEnabled - Specifies whether right-to-left rendering is enabled.\n * @param {FontModel} [themeFontStyle] - The font style used for theme rendering.\n * @returns {string[]} An array of strings containing the title text with line breaks if needed.\n */\nexport function getTitle(title, style, width, isRtlEnabled, themeFontStyle) {\n var titleCollection = [];\n switch (style.textOverflow) {\n case 'Wrap':\n titleCollection = textWrap(title, width, style, isRtlEnabled, title.indexOf(' ') < 0 ? true : null, null, themeFontStyle);\n break;\n case 'Trim':\n titleCollection.push(textTrim(width, title, style, isRtlEnabled, themeFontStyle));\n break;\n default:\n titleCollection.push(title);\n break;\n }\n return titleCollection;\n}\n/**\n * Calculates the x-coordinate position for rendering the title text within the specified rect.\n *\n * @param {Rect} rect - The rect within which the title text is to be rendered.\n * @param {FontModel} titleStyle - The font style used for rendering the title text.\n * @returns {number} The x-coordinate position for rendering the title text.\n */\nexport function titlePositionX(rect, titleStyle) {\n var positionX;\n if (titleStyle.textAlignment === 'Near') {\n positionX = rect.x;\n }\n else if (titleStyle.textAlignment === 'Center') {\n positionX = rect.x + rect.width / 2;\n }\n else {\n positionX = rect.x + rect.width;\n }\n return positionX;\n}\n/**\n * Wraps the input text into multiple lines based on the specified maximum width and font style.\n *\n * @param {string} currentLabel - The text to be wrapped.\n * @param {number} maximumWidth - The maximum width allowed for each line of text.\n * @param {FontModel} font - The font style used for rendering the text.\n * @param {boolean} isRtlEnabled - Specifies whether right-to-left text direction is enabled.\n * @param {boolean} [wrapAnyWhere=false] - Indicates whether the text can be wrapped at any position.\n * @param {boolean} [clip=false] - Specifies whether text exceeding the maximum width should be clipped.\n * @param {FontModel} [themeFontStyle] - The font style used as the base for the text wrapping operation.\n * @returns {string[]} An array of strings representing the wrapped lines of text.\n */\nexport function textWrap(currentLabel, maximumWidth, font, isRtlEnabled, wrapAnyWhere, clip, themeFontStyle) {\n if (wrapAnyWhere) {\n return (textWrapAnyWhere(currentLabel, maximumWidth, font, themeFontStyle));\n }\n else {\n var textCollection = currentLabel.split(' ');\n var label = '';\n var labelCollection = [];\n var text = void 0;\n for (var i = 0, len = textCollection.length; i < len; i++) {\n text = textCollection[i];\n if (measureText(label.concat(label === '' ? '' : ' ' + text), font, themeFontStyle).width < maximumWidth) {\n label = label.concat((label === '' ? '' : ' ') + text);\n }\n else {\n if (label !== '') {\n labelCollection.push(clip ? label : textTrim(maximumWidth, label, font, isRtlEnabled, themeFontStyle));\n label = text;\n }\n else {\n labelCollection.push(clip ? text : textTrim(maximumWidth, text, font, isRtlEnabled, themeFontStyle));\n text = '';\n }\n }\n if (label && i === len - 1) {\n labelCollection.push(clip ? label : textTrim(maximumWidth, label, font, isRtlEnabled, themeFontStyle));\n }\n }\n return labelCollection;\n }\n}\n/**\n * Wraps the input text into multiple lines, allowing wrapping at any position.\n *\n * @param {string} currentLabel - The text to be wrapped.\n * @param {number} maximumWidth - The maximum width allowed for each line of text.\n * @param {FontModel} font - The font style used for rendering the text.\n * @param {FontModel} [themeFontStyle] - The font style used as the base for the text wrapping operation.\n * @returns {string[]} An array of strings representing the wrapped lines of text.\n */\nexport function textWrapAnyWhere(currentLabel, maximumWidth, font, themeFontStyle) {\n var size = measureText(currentLabel, font, themeFontStyle).width;\n var labelCollection = [];\n if (size > maximumWidth) {\n var label = '';\n var startIndex = 0;\n var labelIndex = 1;\n while (labelIndex < currentLabel.length) {\n label = currentLabel.substring(startIndex, labelIndex);\n size = measureText(label, font, themeFontStyle).width;\n if (size < maximumWidth) {\n labelIndex++;\n }\n else if (size === maximumWidth) {\n startIndex = labelIndex;\n labelCollection.push(label);\n labelIndex++;\n label = '';\n }\n else if (size > maximumWidth) {\n label = label.slice(0, -1);\n startIndex = labelIndex - 1;\n labelCollection.push(label);\n label = '';\n }\n }\n if (label.length > 0) {\n labelCollection.push(label);\n }\n }\n else {\n labelCollection.push(currentLabel);\n }\n return labelCollection;\n}\n/**\n * Gets the Unicode text from the input string based on the provided regular expression.\n *\n * @param {string} text - The input string.\n * @param {RegExp} regexp - The regular expression pattern to match Unicode characters.\n * @returns {string} The Unicode text extracted from the input string.\n */\nexport function getUnicodeText(text, regexp) {\n var title = text.replace(regexp, ' ');\n var digit = text.match(regexp);\n var digitSpecific = ' ';\n var convertedText = ' ';\n var k = 0;\n var unicodeSub = {\n '0': '\\u2080', '1': '\\u2081', '2': '\\u2082', '3': '\\u2083', '4': '\\u2084',\n '5': '\\u2085', '6': '\\u2086', '7': '\\u2087', '8': '\\u2088', '9': '\\u2089'\n };\n var unicodeSup = {\n '0': '\\u2070', '1': '\\u00B9', '2': '\\u00B2', '3': '\\u00B3', '4': '\\u2074',\n '5': '\\u2075', '6': '\\u2076', '7': '\\u2077', '8': '\\u2078', '9': '\\u2079'\n };\n for (var i = 0; i <= title.length - 1; i++) {\n if (title[i] === ' ') {\n digitSpecific = (regexp === regSub) ? digit[k].replace(/~/g, '') : digit[k].replace(/\\^/g, '');\n for (var j = 0; j < digitSpecific.length; j++) {\n convertedText += (regexp === regSub) ? unicodeSub[digitSpecific[j]] : unicodeSup[digitSpecific[j]];\n }\n k++;\n }\n else {\n convertedText += title[i];\n }\n }\n return convertedText.trim();\n}\n/**\n * Resets the Blazor templates of the given control (Chart or AccumulationChart).\n *\n * @param {Chart | AccumulationChart} control - The control to reset Blazor templates for.\n * @returns {void}\n */\nexport function blazorTemplatesReset(control) {\n for (var i = 0; i < control.annotations.length; i++) {\n resetBlazorTemplate((control.element.id + '_Annotation_' + i).replace(/[^a-zA-Z0-9]/g, ''), 'ContentTemplate');\n }\n //This reset the tooltip templates\n resetBlazorTemplate(control.element.id + '_tooltipparent_template' + '_blazorTemplate', 'Template');\n //Datalabel templates reset\n resetBlazorTemplate(control.element.id + '_DataLabel');\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar StackValues = /** @class */ (function () {\n function StackValues(startValue, endValue) {\n this.startValues = startValue;\n this.endValues = endValue;\n }\n return StackValues;\n}());\nexport { StackValues };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n __extends(RectOption, _super);\n function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n _this.y = rect.y;\n _this.x = rect.x;\n _this.height = rect.height;\n _this.width = rect.width;\n _this.rx = rx ? rx : 0;\n _this.ry = ry ? ry : 0;\n _this.transform = transform ? transform : '';\n _this.stroke = (border.width !== 0 && _this.stroke !== '') ? border.color === null ? '' : border.color : 'transparent';\n return _this;\n }\n return RectOption;\n}(PathOption));\nexport { RectOption };\n/** @private */\nvar ImageOption = /** @class */ (function () {\n function ImageOption(height, width, href, x, y, id, visibility, preserveAspectRatio) {\n this.height = height;\n this.width = width;\n this.href = href;\n this.x = x;\n this.y = y;\n this.id = id;\n this.visibility = visibility;\n this.preserveAspectRatio = preserveAspectRatio;\n }\n return ImageOption;\n}());\nexport { ImageOption };\n/** @private */\nvar CircleOption = /** @class */ (function (_super) {\n __extends(CircleOption, _super);\n function CircleOption(id, fill, border, opacity, cx, cy, r) {\n var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n _this.cy = cy;\n _this.cx = cx;\n _this.r = r;\n return _this;\n }\n return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/** @private */\nvar PolygonOption = /** @class */ (function () {\n function PolygonOption(id, points, fill) {\n this.id = id;\n this.points = points;\n this.fill = fill;\n }\n return PolygonOption;\n}());\nexport { PolygonOption };\n/** @private */\nvar ChartLocation = /** @class */ (function () {\n function ChartLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return ChartLocation;\n}());\nexport { ChartLocation };\n/** @private */\nvar LabelLocation = /** @class */ (function () {\n function LabelLocation(x, y) {\n this.x = 0;\n this.y = 0;\n this.x = x;\n this.y = y;\n }\n return LabelLocation;\n}());\nexport { LabelLocation };\n/** @private */\nvar Thickness = /** @class */ (function () {\n function Thickness(left, right, top, bottom) {\n this.left = left;\n this.right = right;\n this.top = top;\n this.bottom = bottom;\n }\n return Thickness;\n}());\nexport { Thickness };\n/** @private */\nvar ColorValue = /** @class */ (function () {\n function ColorValue(r, g, b) {\n this.r = r;\n this.g = g;\n this.b = b;\n }\n return ColorValue;\n}());\nexport { ColorValue };\n/** @private */\nvar PointData = /** @class */ (function () {\n function PointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n this.lierIndex = index;\n }\n return PointData;\n}());\nexport { PointData };\n/** @private */\nvar AccPointData = /** @class */ (function () {\n function AccPointData(point, series, index) {\n if (index === void 0) { index = 0; }\n this.point = point;\n this.series = series;\n this.index = index;\n }\n return AccPointData;\n}());\nexport { AccPointData };\n/** @private */\nvar Point3D = /** @class */ (function () {\n /**\n * Initializes a new instance of the Chart3DData class.\n *\n * @param {Chart3DPoint} point - The 3D point object.\n * @param {Chart3DSeries} series - The 3D series object.\n * @private\n */\n function Point3D(point, series) {\n this.point = point;\n this.series = series;\n }\n return Point3D;\n}());\nexport { Point3D };\n/** @private */\nvar ControlPoints = /** @class */ (function () {\n function ControlPoints(controlPoint1, controlPoint2) {\n this.controlPoint1 = controlPoint1;\n this.controlPoint2 = controlPoint2;\n }\n return ControlPoints;\n}());\nexport { ControlPoints };\n/**\n * Gets the color from the range color setting model based on the specified value.\n *\n * @param {RangeColorSettingModel} colorMap - The range color setting model.\n * @param {number} value - The value for which to get the color.\n * @returns {string} - The color corresponding to the specified value.\n */\nexport function getColorByValue(colorMap, value) {\n var color = '';\n var rbgColorValue;\n if (Number(value) === colorMap.start) {\n color = colorMap.colors[0];\n }\n else if (Number(value) === colorMap.end) {\n color = colorMap.colors[colorMap.colors.length - 1];\n }\n else {\n rbgColorValue = getGradientColor(Number(value), colorMap);\n color = convertToHexCode(rbgColorValue);\n }\n return color;\n}\n/**\n * Gets the gradient color from the range color setting model based on the specified value.\n *\n * @param {number} value - The value for which to get the gradient color.\n * @param {RangeColorSettingModel} colorMap - The range color setting model.\n * @returns {ColorValue} - The gradient color corresponding to the specified value.\n */\nexport function getGradientColor(value, colorMap) {\n var previousOffset = colorMap.start;\n var nextOffset = colorMap.end;\n var percent = 0;\n var full = nextOffset - previousOffset;\n var midColor;\n percent = (value - previousOffset) / full;\n var previousColor;\n var nextColor;\n if (colorMap.colors.length <= 2) {\n previousColor = colorMap.colors[0].charAt(0) === '#' ? colorMap.colors[0] : colorNameToHex(colorMap.colors[0]);\n nextColor = colorMap.colors[colorMap.colors.length - 1].charAt(0) === '#' ?\n colorMap.colors[colorMap.colors.length - 1] : colorNameToHex(colorMap.colors[colorMap.colors.length - 1]);\n }\n else {\n previousColor = colorMap.colors[0].charAt(0) === '#' ? colorMap.colors[0] : colorNameToHex(colorMap.colors[0]);\n nextColor = colorMap.colors[colorMap.colors.length - 1].charAt(0) === '#' ?\n colorMap.colors[colorMap.colors.length - 1] : colorNameToHex(colorMap.colors[colorMap.colors.length - 1]);\n var a = full / (colorMap.colors.length - 1);\n var b = void 0;\n var c = void 0;\n var length_2 = colorMap.colors.length - 1;\n var splitColorValueOffset = [];\n var splitColor = {};\n for (var j = 1; j < length_2; j++) {\n c = j * a;\n b = previousOffset + c;\n splitColor = { b: b, color: colorMap.colors[j] };\n splitColorValueOffset.push(splitColor);\n }\n for (var i = 0; i < splitColorValueOffset.length; i++) {\n if (previousOffset <= value && value <= splitColorValueOffset[i]['b'] && i === 0) {\n midColor = splitColorValueOffset[i]['color'].charAt(0) === '#' ?\n splitColorValueOffset[i]['color'] : colorNameToHex(splitColorValueOffset[i]['color']);\n nextColor = midColor;\n percent = value <= splitColorValueOffset[i]['b'] ? 1 - Math.abs((value - splitColorValueOffset[i]['b']) / a)\n : (value - splitColorValueOffset[i]['b']) / a;\n }\n else if (splitColorValueOffset[i]['b'] <= value && value <= nextOffset && i === (splitColorValueOffset.length - 1)) {\n midColor = splitColorValueOffset[i]['color'].charAt(0) === '#' ?\n splitColorValueOffset[i]['color'] : colorNameToHex(splitColorValueOffset[i]['color']);\n previousColor = midColor;\n percent = value < splitColorValueOffset[i]['b'] ?\n 1 - Math.abs((value - splitColorValueOffset[i]['b']) / a) : (value - splitColorValueOffset[i]['b']) / a;\n }\n if (i !== splitColorValueOffset.length - 1 && i < splitColorValueOffset.length) {\n if (splitColorValueOffset[i]['b'] <= value && value <= splitColorValueOffset[i + 1]['b']) {\n midColor = splitColorValueOffset[i]['color'].charAt(0) === '#' ?\n splitColorValueOffset[i]['color'] : colorNameToHex(splitColorValueOffset[i]['color']);\n previousColor = midColor;\n nextColor = splitColorValueOffset[i + 1]['color'].charAt(0) === '#' ?\n splitColorValueOffset[i + 1]['color'] : colorNameToHex(splitColorValueOffset[i + 1]['color']);\n percent = Math.abs((value - splitColorValueOffset[i + 1]['b'])) / a;\n }\n }\n }\n }\n return getPercentageColor(percent, previousColor, nextColor);\n}\n/**\n * Calculates the color based on the percentage change between two values.\n *\n * @param {number} percent - The percentage change.\n * @param {string} previous - The color for the previous value.\n * @param {string} next - The color for the next value.\n * @returns {ColorValue} - The calculated color value.\n */\nexport function getPercentageColor(percent, previous, next) {\n var nextColor = next.split('#')[1];\n var prevColor = previous.split('#')[1];\n var r = getPercentage(percent, parseInt(prevColor.substr(0, 2), 16), parseInt(nextColor.substr(0, 2), 16));\n var g = getPercentage(percent, parseInt(prevColor.substr(2, 2), 16), parseInt(nextColor.substr(2, 2), 16));\n var b = getPercentage(percent, parseInt(prevColor.substr(4, 2), 16), parseInt(nextColor.substr(4, 2), 16));\n return new ColorValue(r, g, b);\n}\n/**\n * Calculates the percentage change between two values.\n *\n * @param {number} percent - The percentage to calculate.\n * @param {number} previous - The previous value.\n * @param {number} next - The next value.\n * @returns {number} - The calculated percentage change.\n */\nexport function getPercentage(percent, previous, next) {\n var full = next - previous;\n return Math.round((previous + (full * percent)));\n}\n/**\n * Gets the text anchor based on the specified alignment and Right-to-Left setting.\n *\n * @param {Alignment} alignment - The alignment of the text.\n * @param {boolean} enableRtl - Specifies whether Right-to-Left is enabled.\n * @returns {string} - The text anchor value.\n */\nexport function getTextAnchor(alignment, enableRtl) {\n switch (alignment) {\n case 'Near':\n return enableRtl ? 'end' : 'start';\n case 'Far':\n return enableRtl ? 'start' : 'end';\n default:\n return 'middle';\n }\n}\n","import { Rect } from '@syncfusion/ej2-svg-base';\n/** @private */\nexport var stockEventFont = {\n size: '13px',\n fontWeight: '400',\n color: null,\n fontStyle: 'Normal',\n fontFamily: 'Segoe UI'\n};\n/**\n * Gets an array of series colors for chart visualization.\n *\n * @param {ChartTheme | AccumulationTheme} theme - The theme for which to retrieve the series colors.\n * @returns {string[]} - An array of series colors.\n * @private\n */\nexport function getSeriesColor(theme) {\n var palette;\n switch (theme) {\n case 'Fabric':\n palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n break;\n case 'Bootstrap4':\n palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n break;\n case 'Bootstrap':\n palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n break;\n case 'HighContrastLight':\n case 'HighContrast':\n palette = ['#79ECE4', '#E98272', '#DFE6B6', '#C6E773', '#BA98FF',\n '#FA83C3', '#00C27A', '#43ACEF', '#D681EF', '#D8BC6E'];\n break;\n case 'MaterialDark':\n palette = ['#9ECB08', '#56AEFF', '#C57AFF', '#61EAA9', '#EBBB3E',\n '#F45C5C', '#8A77FF', '#63C7FF', '#FF84B0', '#F7C928'];\n break;\n case 'FabricDark':\n palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n break;\n case 'BootstrapDark':\n palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n break;\n case 'Tailwind':\n palette = ['#5A61F6', '#65A30D', '#334155', '#14B8A6', '#8B5CF6',\n '#0369A1', '#F97316', '#9333EA', '#F59E0B', '#15803D'];\n break;\n case 'TailwindDark':\n palette = ['#8B5CF6', '#22D3EE', '#F87171', '#4ADE80', '#E879F9',\n '#FCD34D', '#F97316', '#2DD4BF', '#F472B6', '#10B981'];\n break;\n case 'Bootstrap5':\n palette = ['#6355C7', '#FFB400', '#2196F5', '#F7523F', '#963C70',\n '#4BE0BC', '#FD7400', '#C9E422', '#DE3D8A', '#162F88'];\n break;\n case 'Bootstrap5Dark':\n palette = ['#8F80F4', '#FFD46D', '#6CBDFF', '#FF7F71', '#FF6DB3',\n '#63F5D2', '#FCAA65', '#ECFF77', '#EF8EFF', '#5F82FD'];\n break;\n case 'FluentDark':\n palette = ['#1AC9E6', '#DA4CB2', '#EDBB40', '#AF4BCF', '#FF7266',\n '#1BD565', '#EE993D', '#5887FF', '#EC548D', '#7D39C0'];\n break;\n case 'Fluent':\n palette = ['#1AC9E6', '#DA4CB2', '#EDBB40', '#AF4BCF', '#FF7266',\n '#1BD565', '#EE993D', '#5887FF', '#EC548D', '#7D39C0'];\n break;\n case 'Fluent2':\n palette = ['#6200EE', '#09AF74', '#0076E5', '#CB3587', '#E7910F',\n '#0364DE', '#66CD15', '#F3A93C', '#107C10', '#C19C00'];\n break;\n case 'Fluent2Dark':\n palette = ['#9BB449', '#2A72D5', '#43B786', '#3F579A', '#584EC6',\n '#E85F9C', '#6E7A89', '#EA6266', '#0B6A0B', '#C19C00'];\n break;\n case 'Material3':\n palette = ['#6355C7', '#00AEE0', '#FFB400', '#F7523F', '#963C70',\n '#FD7400', '#4BE0BC', '#2196F5', '#DE3D8A', '#162F88'];\n break;\n case 'Material3Dark':\n palette = ['#4EAAFF', '#FA4EAB', '#FFF500', '#17EA58', '#38FFE7',\n '#FF9E45', '#B3F32F', '#B93CE4', '#FC5664', '#9B55FF'];\n break;\n default:\n palette = ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n break;\n }\n return palette;\n}\n/**\n * Gets a theme color.\n *\n * @param {ChartTheme | AccumulationTheme} theme - The theme for which to retrieve the series colors.\n * @param {boolean} canvas - Specifies whether the canvas is used.\n * @param {AccumulationChart | Chart | StockChart} [chart] - The chart instance (optional).\n * @returns {IThemeStyle} - Returns theme style.\n * @private\n */\nexport function getThemeColor(theme, canvas, chart) {\n var style;\n var darkBackground = theme === 'MaterialDark' ? '#383838' : (theme === 'FabricDark' ? '#242424' : '#1b1b1b');\n switch (theme) {\n case 'HighContrastLight':\n case 'HighContrast':\n style = {\n axisLabel: '#ffffff',\n axisTitle: '#ffffff',\n axisLine: '#ffffff',\n majorGridLine: '#BFBFBF',\n minorGridLine: '#969696',\n majorTickLine: '#BFBFBF',\n minorTickLine: '#969696',\n chartTitle: '#ffffff',\n legendLabel: '#ffffff',\n background: canvas ? '#000000' : 'transparent',\n areaBorder: '#ffffff',\n errorBar: '#ffffff',\n crosshairLine: '#ffffff',\n crosshairFill: '#ffffff',\n crosshairLabel: '#000000',\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696',\n markerShadow: '#BFBFBF',\n selectionRectFill: 'rgba(255, 217, 57, 0.3)',\n selectionRectStroke: '#ffffff',\n selectionCircleStroke: '#FFD939',\n tabColor: '#FFD939',\n bearFillColor: '#2ecd71',\n bullFillColor: '#e74c3d',\n toolkitSelectionColor: '#FFD939',\n toolkitFill: '#737373',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(0, 0, 16, 16),\n chartTitleFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#969696', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#969696', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#000000', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#969696', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#000000', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#969696', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'MaterialDark':\n case 'FabricDark':\n case 'BootstrapDark':\n style = {\n axisLabel: '#DADADA', axisTitle: '#ffffff',\n axisLine: ' #6F6C6C',\n majorGridLine: '#414040',\n minorGridLine: '#514F4F',\n majorTickLine: '#414040',\n minorTickLine: ' #4A4848',\n chartTitle: '#ffffff',\n legendLabel: '#DADADA',\n background: canvas ? darkBackground : 'transparent',\n areaBorder: ' #9A9A9A',\n errorBar: '#ffffff',\n crosshairLine: '#F4F4F4',\n crosshairFill: theme === 'MaterialDark' ? '#F4F4F4' : theme === 'FabricDark' ? '#A19F9D' : '#F0F0F0',\n crosshairLabel: '#282727',\n tooltipFill: '#F4F4F4',\n tooltipBoldLabel: '#282727',\n tooltipLightLabel: '#333232',\n tooltipHeaderLine: '#9A9A9A',\n markerShadow: null,\n selectionRectFill: 'rgba(56,169,255, 0.1)',\n selectionRectStroke: '#38A9FF',\n selectionCircleStroke: '#282727',\n tabColor: theme === 'MaterialDark' ? '#00B0FF' : theme === 'FabricDark' ? '#0074CC' : '#0070F0',\n bearFillColor: '#2ecd71',\n bullFillColor: '#e74c3d',\n toolkitSelectionColor: theme === 'MaterialDark' ? '#00B0FF' : theme === 'FabricDark' ? '#0074CC' : '#0070F0',\n toolkitFill: '#737373',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(0, 0, 16, 16),\n chartTitleFont: {\n color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.87)' : theme === 'FabricDark' ? '#DADADA' : '#FFFFFF', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.6)' : theme === 'FabricDark' ? '#A19F9D' : '#CED4DA', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.87)' : theme === 'FabricDark' ? '#DADADA' : '#FFFFFF', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.6)' : theme === 'FabricDark' ? '#A19F9D' : '#676767', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.87)' : theme === 'FabricDark' ? '#DADADA' : '#FFFFFF', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.6)' : theme === 'FabricDark' ? '#A19F9D' : '#676767', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.87)' : theme === 'FabricDark' ? '#DADADA' : '#FFFFFF', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.24)' : theme === 'FabricDark' ? '#6F6C6C' : '#414141', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'Bootstrap4':\n style = {\n axisLabel: '#212529', axisTitle: '#212529', axisLine: '#CED4DA', majorGridLine: '#CED4DA',\n minorGridLine: '#DEE2E6', majorTickLine: '#ADB5BD', minorTickLine: '#CED4DA', chartTitle: '#212529', legendLabel: '#212529',\n background: canvas ? '#FFFFFF' : 'transparent', areaBorder: '#DEE2E6', errorBar: '#000000', crosshairLine: '#6C757D', crosshairFill: '#212529',\n crosshairLabel: '#FFFFFF', tooltipFill: '#020202', tooltipBoldLabel: 'rgba(255,255,255)',\n tooltipLightLabel: 'rgba(255,255,255, 0.9)', tooltipHeaderLine: 'rgba(255,255,255, 0.2)', markerShadow: null,\n selectionRectFill: 'rgba(255,255,255, 0.1)', selectionRectStroke: 'rgba(0, 123, 255)', selectionCircleStroke: '#495057', tabColor: '#007BFF', bearFillColor: '#2ecd71', bullFillColor: '#e74c3d',\n toolkitSelectionColor: '#007BFF',\n toolkitFill: '#495057',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(-5, -5, 26, 26),\n chartTitleFont: {\n color: '#212529', fontFamily: 'Helvetica', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#495057', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#212529', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#666666', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#F9FAFB', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#212529', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#495057', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#212529', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#F9FAFB', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#6C757D', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'Tailwind':\n style = {\n axisLabel: '#6B728', axisTitle: '#374151',\n axisLine: ' #D1D5DB',\n majorGridLine: '#E5E7EB',\n minorGridLine: '#E5E7EB',\n majorTickLine: '#D1D5DB',\n minorTickLine: ' #D1D5DB',\n chartTitle: '#374151',\n legendLabel: '#374151',\n background: canvas ? 'rgba(255,255,255, 0.0)' : 'transparent',\n areaBorder: ' #E5E7EB',\n errorBar: '#374151',\n crosshairLine: '#1F2937',\n crosshairFill: '#111827',\n crosshairLabel: '#F9FAFB',\n tooltipFill: '#111827',\n tooltipBoldLabel: '#D1D5DB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: '#6B7280',\n markerShadow: null,\n selectionRectFill: 'rgba(79,70,229, 0.1)',\n selectionRectStroke: '#4F46E5',\n selectionCircleStroke: '#6B7280',\n tabColor: '#4F46E5',\n bearFillColor: '#2ecd71',\n bullFillColor: '#e74c3d',\n toolkitSelectionColor: '#4F46E5',\n toolkitFill: '#6B7280',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(0, 0, 16, 16),\n chartTitleFont: {\n color: '#374151', fontFamily: 'Inter', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#6B7280', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#374151', fontFamily: 'Inter', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#374151', fontFamily: 'Inter', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#F9FAFB', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#374151', fontFamily: 'Inter', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#6B7280', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#374151', fontFamily: 'Inter', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#F9FAFB', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#D1D5DB', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'TailwindDark':\n style = {\n axisLabel: '#9CA3AF', axisTitle: '#9CA3AF',\n axisLine: ' #4B5563',\n majorGridLine: '#374151',\n minorGridLine: '#374151',\n majorTickLine: '#4B5563',\n minorTickLine: ' #4B5563',\n chartTitle: '#D1D5DB',\n legendLabel: '#D1D5DB',\n background: canvas ? '#1f2937' : 'transparent',\n areaBorder: ' #374151',\n errorBar: '#ffffff',\n crosshairLine: '#9CA3AF',\n crosshairFill: '#F9FAFB',\n crosshairLabel: '#1F2937',\n tooltipFill: '#F9FAFB',\n tooltipBoldLabel: '#6B7280',\n tooltipLightLabel: '#1F2937',\n tooltipHeaderLine: '#9CA3AF',\n markerShadow: null,\n selectionRectFill: 'rgba(34,211,238, 0.1)',\n selectionRectStroke: '#22D3EE',\n selectionCircleStroke: '#282727',\n tabColor: '#22D3EE',\n bearFillColor: '#2ecd71',\n bullFillColor: '#e74c3d',\n toolkitSelectionColor: '#22D3EE',\n toolkitFill: '#D1D5DB',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(0, 0, 16, 16),\n chartTitleFont: {\n color: '#D1D5DB', fontFamily: 'Inter', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#9CA3AF', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#D1D5DB', fontFamily: 'Inter', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#D1D5DB', fontFamily: 'Inter', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#1F2937', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#D1D5DB', fontFamily: 'Inter', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#9CA3AF', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#D1D5DB', fontFamily: 'Inter', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#1F2937', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#6B7280', fontFamily: 'Inter', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'Bootstrap5':\n style = {\n axisLabel: '#495057',\n axisTitle: '#343A40',\n axisLine: '#D1D5DB',\n majorGridLine: '#E5E7EB',\n minorGridLine: '#E5E7EB',\n majorTickLine: '#D1D5DB',\n minorTickLine: ' #D1D5DB',\n chartTitle: '#343A40',\n legendLabel: '#343A40',\n background: canvas ? '#FFFFFF' : 'transparent',\n areaBorder: ' #DEE2E6',\n errorBar: '#1F2937',\n crosshairLine: '#1F2937',\n crosshairFill: '#212529',\n crosshairLabel: '#F9FAFB',\n tooltipFill: '#212529',\n tooltipBoldLabel: '#F9FAFB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: '#9CA3AF',\n markerShadow: null,\n selectionRectFill: 'rgba(79,70,229, 0.1)',\n selectionRectStroke: '#4F46E5',\n selectionCircleStroke: '#6B7280',\n tabColor: '#0D6EFD',\n bearFillColor: '#2ecd71',\n bullFillColor: '#e74c3d',\n toolkitSelectionColor: '#0D6EFD',\n toolkitFill: '#737373',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(0, 0, 16, 16),\n chartTitleFont: {\n color: '#343A40', fontFamily: 'Helvetica', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#495057', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#343A40', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#343A40', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#F9FAFB', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#343A40', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#495057', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#343A40', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#F9FAFB', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#ADB5BD', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'Bootstrap5Dark':\n style = {\n axisLabel: '#CED4DA',\n axisTitle: '#E9ECEF',\n axisLine: '#495057',\n majorGridLine: '#343A40',\n minorGridLine: '#343A40',\n majorTickLine: '#495057',\n minorTickLine: ' #495057',\n chartTitle: '#E9ECEF',\n legendLabel: '#E9ECEF',\n background: canvas ? '#212529' : 'transparent',\n areaBorder: ' #444C54',\n errorBar: '#ADB5BD',\n crosshairLine: '#ADB5BD',\n crosshairFill: '#E9ECEF',\n crosshairLabel: '#212529',\n tooltipFill: '#E9ECEF',\n tooltipBoldLabel: '#212529',\n tooltipLightLabel: '#212529',\n tooltipHeaderLine: '#ADB5BD',\n markerShadow: null,\n selectionRectFill: 'rgba(79,70,229, 0.1)',\n selectionRectStroke: '#4F46E5',\n selectionCircleStroke: '#6B7280',\n tabColor: '#0D6EFD',\n bearFillColor: '#2ecd71',\n bullFillColor: '#e74c3d',\n toolkitSelectionColor: '#0D6EFD',\n toolkitFill: '#737373',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(0, 0, 16, 16),\n chartTitleFont: {\n color: '#E9ECEF', fontFamily: 'Helvetica', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#CED4DA', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#E9ECEF', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#E9ECEF', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#212529', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#E9ECEF', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#E9ECEF', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#E9ECEF', fontFamily: 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#212529', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#6C757D', fontFamily: 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'Fluent':\n style = {\n axisLabel: '#3B3A39',\n axisTitle: '#201F1E',\n axisLine: '#D2D0CE',\n majorGridLine: '#EDEBE9',\n minorGridLine: '#EDEBE9',\n majorTickLine: '#D2D0CE',\n minorTickLine: ' #D2D0CE',\n chartTitle: '#201F1E',\n legendLabel: '#323130',\n background: canvas ? '#FFFFFF' : 'transparent',\n areaBorder: '#EDEBE9',\n errorBar: '#A19F9D',\n crosshairLine: '#A19F9D',\n crosshairFill: '#FFFFFF',\n crosshairLabel: '#323130',\n tooltipFill: '#FFFFFF',\n tooltipBoldLabel: '#323130',\n tooltipLightLabel: '#323130',\n tooltipHeaderLine: '#D2D0CE',\n markerShadow: null,\n selectionRectFill: 'rgba(79,70,229, 0.1)',\n selectionRectStroke: '#4F46E5',\n selectionCircleStroke: '#6B7280',\n tabColor: '#0078D4',\n bearFillColor: '#2ecd71',\n bullFillColor: '#e74c3d',\n toolkitSelectionColor: '#0078D4',\n toolkitFill: '#A19F9D',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(0, 0, 16, 16),\n chartTitleFont: {\n color: '#201F1E', fontFamily: 'Segoe UI', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#3B3A39', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#201F1E', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#49454E', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#323130', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#201F1E', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#3B3A39', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#323129', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#323130', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#A19F9D', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'FluentDark':\n style = {\n axisLabel: '#C8C6C4',\n axisTitle: '#F3F2F1',\n axisLine: '#3B3A39',\n majorGridLine: '#414040',\n minorGridLine: '#414040',\n majorTickLine: '#3B3A39',\n minorTickLine: '#3B3A39',\n chartTitle: '#F3F2F1',\n legendLabel: '#D2D0CE',\n background: canvas ? '#383838' : 'transparent',\n areaBorder: '#414040',\n errorBar: '#D2D0CE',\n crosshairLine: '#D2D0CE',\n crosshairFill: '#323130',\n crosshairLabel: '#F3F2F1',\n tooltipFill: '#252423',\n tooltipBoldLabel: '#F3F2F1',\n tooltipLightLabel: '#F3F2F1',\n tooltipHeaderLine: '#3B3A39',\n markerShadow: null,\n selectionRectFill: 'rgba(79,70,229, 0.1)',\n selectionRectStroke: '#4F46E5',\n selectionCircleStroke: '#6B7280',\n tabColor: '#0078D4',\n bearFillColor: '#2ecd71',\n bullFillColor: '#e74c3d',\n toolkitSelectionColor: '#0078D4',\n toolkitFill: '#484644',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(0, 0, 16, 16),\n chartTitleFont: {\n color: '#C8C6C4', fontFamily: 'Segoe UI', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#C8C6C4', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#F3F2F1', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#D2D0CE', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#F3F2F1', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#F3F2F2', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#D2D0CE', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#F3F2F1', fontFamily: 'Segoe UI', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#F3F2F1', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#484644', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'Fluent2':\n style = {\n axisLabel: '#616161',\n axisTitle: '#242424',\n axisLine: '#D2D0CE',\n majorGridLine: '#EDEBE9',\n minorGridLine: '#EDEBE9',\n majorTickLine: '#D2D0CE',\n minorTickLine: '#D2D0CE',\n chartTitle: '#242424',\n legendLabel: '#242424',\n background: canvas ? '#383838' : 'transparent',\n areaBorder: '#EDEBE9',\n errorBar: '#A19F9D',\n crosshairLine: '#A19F9D',\n crosshairFill: '#FFFFFF',\n crosshairLabel: '#242424',\n tooltipFill: '#FFFFFF',\n tooltipBoldLabel: '#242424',\n tooltipLightLabel: '#242424',\n tooltipHeaderLine: '#D2D0CE',\n markerShadow: null,\n selectionRectFill: 'rgba(180, 214, 250, 0.1)',\n selectionRectStroke: '#0F6CBD',\n selectionCircleStroke: '#0F6CBD',\n tabColor: '#0078D4',\n bearFillColor: '#E7910F',\n bullFillColor: '#0076E5',\n toolkitSelectionColor: '#424242',\n toolkitFill: '#424242',\n toolkitIconRectOverFill: '#E6E6E6',\n toolkitIconRectSelectionFill: '#E6E6E6',\n toolkitIconRect: new Rect(-6, -8, 32, 32),\n chartTitleFont: {\n color: '#242424', fontFamily: 'Segoe UI', size: chart.getModuleName() === 'accumulationchart' ? '16px' : '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#616161', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#242424', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#242424', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#242424', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#242424', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#242424', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#616161', fontFamily: 'Segoe UI', size: chart.getModuleName() === 'chart' ? '12px' : '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n crosshairLabelFont: {\n color: '#242424', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '700'\n },\n stripLineLabelFont: {\n color: '#616161', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'Fluent2Dark':\n style = {\n axisLabel: '#ADADAD',\n axisTitle: '#FFFFFF',\n axisLine: '#3B3A39',\n majorGridLine: '#3B3A39',\n minorGridLine: '#3B3A39',\n majorTickLine: '#292827',\n minorTickLine: '#292827',\n chartTitle: '#FFFFFF',\n legendLabel: '#FFFFFF',\n background: canvas ? '#383838' : 'transparent',\n areaBorder: '#292827',\n errorBar: '#8A8886',\n crosshairLine: '#8A8886',\n crosshairFill: '#292929',\n crosshairLabel: '#FFFFFF',\n tooltipFill: '#292929',\n tooltipBoldLabel: '#FFFFFF',\n tooltipLightLabel: '#FFFFFF',\n tooltipHeaderLine: '#3B3A39',\n markerShadow: null,\n selectionRectFill: 'rgba(14, 71, 117, 0.1)',\n selectionRectStroke: '#115EA3',\n selectionCircleStroke: '#115EA3',\n tabColor: '#0078D4',\n bearFillColor: '#584EC6',\n bullFillColor: '#43B786',\n toolkitSelectionColor: '#D6D6D6',\n toolkitFill: '#D6D6D6',\n toolkitIconRectOverFill: '#333333',\n toolkitIconRectSelectionFill: '#333333',\n toolkitIconRect: new Rect(-6, -8, 32, 32),\n chartTitleFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: chart.getModuleName() === 'accumulationchart' ? '16px' : '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#ADADAD', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#ADADAD', fontFamily: 'Segoe UI', size: chart.getModuleName() === 'chart' ? '12px' : '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n crosshairLabelFont: {\n color: '#FFFFFF', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '700'\n },\n stripLineLabelFont: {\n color: '#ADADAD', fontFamily: 'Segoe UI', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'Material3':\n style = {\n axisLabel: '#1E192B',\n axisTitle: '#1C1B1F',\n axisLine: '#C4C7C5',\n majorGridLine: '#C4C7C5',\n minorGridLine: '#C4C7C5',\n majorTickLine: '#C4C7C5',\n minorTickLine: ' #C4C7C5',\n chartTitle: '#1C1B1F',\n legendLabel: '#49454E',\n background: canvas ? '#FFFFFF' : 'transparent',\n areaBorder: '#E7E0EC',\n errorBar: '#79747E',\n crosshairLine: '#49454E',\n crosshairFill: '#313033',\n crosshairLabel: '#F4EFF4',\n tooltipFill: '#313033',\n tooltipBoldLabel: '#F4EFF4',\n tooltipLightLabel: '#F4EFF4',\n tooltipHeaderLine: '#F4EFF4',\n markerShadow: null,\n selectionRectFill: 'rgb(98, 0, 238, 0.06)',\n selectionRectStroke: '#6200EE',\n selectionCircleStroke: '#79747E',\n tabColor: '#49454E',\n bearFillColor: '#5887FF',\n bullFillColor: '#F7523F',\n toolkitSelectionColor: '#49454E',\n toolkitFill: '#49454E',\n toolkitIconRectOverFill: '#EADDFF',\n toolkitIconRectSelectionFill: '#EADDFF',\n toolkitIconRect: new Rect(-4, -5, 26, 26),\n histogram: '#D21020',\n chartTitleFont: {\n color: '#1C1B1F', fontFamily: 'Roboto', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#1E192B', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#1C1B1F', fontFamily: 'Roboto', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#49454E', fontFamily: 'Roboto', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#F4EFF4', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#1C1B1F', fontFamily: 'Roboto', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#49454E', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#49454E', fontFamily: 'Roboto', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#F4EFF4', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#79747E', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n case 'Material3Dark':\n style = {\n axisLabel: '#E6E1E5',\n axisTitle: '#E6E1E5',\n axisLine: '#49454F',\n majorGridLine: '#444746',\n minorGridLine: '#444746',\n majorTickLine: '#444746',\n minorTickLine: ' #444746',\n chartTitle: '#E6E1E5',\n legendLabel: '#CAC4D0',\n background: canvas ? '#FFFFFF' : 'transparent',\n areaBorder: '#49454F',\n errorBar: '#938F99',\n crosshairLine: '#CAC4D0',\n crosshairFill: '#E6E1E5',\n crosshairLabel: '#313033',\n tooltipFill: '#E6E1E5',\n tooltipBoldLabel: '#313033',\n tooltipLightLabel: '#313033',\n tooltipHeaderLine: '#313033',\n markerShadow: null,\n selectionRectFill: 'rgba(78, 170, 255, 0.06)',\n selectionRectStroke: '#4EAAFF',\n selectionCircleStroke: '#938F99',\n tabColor: '#CAC4D0',\n bearFillColor: '#B3F32F',\n bullFillColor: '#FF9E45',\n toolkitSelectionColor: '#CAC4D0',\n toolkitFill: '#CAC4D0',\n toolkitIconRectOverFill: '#4F378B',\n toolkitIconRectSelectionFill: '#4F378B',\n toolkitIconRect: new Rect(-4, -5, 26, 26),\n histogram: '#FF9E45',\n chartTitleFont: {\n color: '#E6E1E5', fontFamily: 'Roboto', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: '#CAC4D0', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: '#E6E1E5', fontFamily: 'Roboto', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: '#CAC4D0', fontFamily: 'Roboto', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: '#313033', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: '#E6E1E5', fontFamily: 'Roboto', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: '#CAC4D0', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: '#CAC4D0', fontFamily: 'Roboto', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: '#313033', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: '#938F99', fontFamily: 'Roboto', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n default:\n style = {\n axisLabel: '#686868',\n axisTitle: '#424242',\n axisLine: '#b5b5b5',\n majorGridLine: '#dbdbdb',\n minorGridLine: '#eaeaea',\n majorTickLine: '#b5b5b5',\n minorTickLine: '#d6d6d6',\n chartTitle: '#424242',\n legendLabel: '#353535',\n background: canvas ? '#FFFFFF' : 'transparent',\n areaBorder: 'Gray',\n errorBar: '#000000',\n crosshairLine: '#4f4f4f',\n crosshairFill: theme === 'Material' ? '#000816' : theme === 'Fabric' ? '#FFFFFF' : '#212529',\n crosshairLabel: '#e5e5e5',\n tooltipFill: '#000816',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff',\n markerShadow: null,\n selectionRectFill: 'rgba(41, 171, 226, 0.1)',\n selectionRectStroke: '#29abe2',\n selectionCircleStroke: '#29abe2',\n tabColor: theme === 'Material' ? '#ff4081' : theme === 'Fabric' ? '#0078D6' : '#317AB9',\n bearFillColor: '#2ecd71',\n bullFillColor: '#e74c3d',\n toolkitSelectionColor: theme === 'Material' ? '#ff4081' : theme === 'Fabric' ? '#0078D6' : '#317AB9',\n toolkitFill: '#737373',\n toolkitIconRectOverFill: 'transparent',\n toolkitIconRectSelectionFill: 'transparent',\n toolkitIconRect: new Rect(0, 0, 16, 16),\n chartTitleFont: {\n color: theme === 'Material' ? 'rgba(0, 0, 0, 1)' : theme === 'Fabric' ? '#333333' : '#212529', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '16px', fontStyle: 'Normal', fontWeight: '600'\n },\n axisLabelFont: {\n color: theme === 'Material' ? 'rgba(97, 97, 97, 1)' : theme === 'Fabric' ? '#666666' : '#676767', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n legendTitleFont: {\n color: theme === 'Material' ? 'rgba(0, 0, 0, 1)' : theme === 'Fabric' ? '#333333' : '#212529', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n legendLabelFont: {\n color: theme === 'Material' ? 'rgba(97, 97, 97, 1)' : theme === 'Fabric' ? '#666666' : '#666666', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n tooltipLabelFont: {\n color: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal'\n },\n axisTitleFont: {\n color: theme === 'Material' ? 'rgba(0, 0, 0, 1)' : theme === 'Fabric' ? '#333333' : '#212529', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '600'\n },\n datalabelFont: {\n color: theme === 'Material' ? 'rgba(97, 97, 97, 1)' : theme === 'Fabric' ? '#666666' : '#676767', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n chartSubTitleFont: {\n color: theme === 'Material' ? 'rgba(0, 0, 0, 1)' : theme === 'Fabric' ? '#333333' : '#212529', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '14px', fontStyle: 'Normal', fontWeight: '400'\n },\n crosshairLabelFont: {\n color: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n },\n stripLineLabelFont: {\n color: theme === 'Material' ? 'rgba(158, 158, 158, 1)' : theme === 'Fabric' ? '#A6A6A6' : '#676767', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica', size: '12px', fontStyle: 'Normal', fontWeight: '400'\n }\n };\n break;\n }\n return style;\n}\n/**\n * Gets an scroll bar theme color.\n *\n * @param {ChartTheme} theme - The theme for which to retrieve the series colors.\n * @returns {IScrollbarThemeStyle} - Returns scroll bar theme style.\n * @private\n */\nexport function getScrollbarThemeColor(theme) {\n var scrollStyle;\n switch (theme) {\n case 'HighContrastLight':\n scrollStyle = {\n backRect: '#333',\n thumb: '#bfbfbf',\n circle: '#fff',\n circleHover: '#685708',\n arrow: '#333',\n grip: '#333',\n arrowHover: '#fff',\n backRectBorder: '#969696'\n };\n break;\n case 'Bootstrap':\n scrollStyle = {\n backRect: '#f5f5f5',\n thumb: '#e6e6e6',\n circle: '#fff',\n circleHover: '#eee',\n arrow: '#8c8c8c',\n grip: '#8c8c8c'\n };\n break;\n case 'Fabric':\n scrollStyle = {\n backRect: '#f8f8f8',\n thumb: '#eaeaea',\n circle: '#fff',\n circleHover: '#eaeaea',\n arrow: '#a6a6a6',\n grip: '#a6a6a6'\n };\n break;\n case 'MaterialDark':\n scrollStyle = {\n backRect: '#424242',\n thumb: '#616161',\n circle: '#757575',\n circleHover: '#616161',\n arrow: '#BDBDBD',\n grip: '#BDBDBD'\n };\n break;\n case 'FabricDark':\n scrollStyle = {\n backRect: '#282727',\n thumb: '#333232',\n circle: '#4A4848',\n circleHover: '#514F4F',\n arrow: '#ADB5BD',\n grip: '#DADADA'\n };\n break;\n case 'BootstrapDark':\n scrollStyle = {\n backRect: '#2A2A2A',\n thumb: '#313131',\n circle: '#414141',\n circleHover: '#484848',\n arrow: '#DADADA',\n grip: '#FFFFFF'\n };\n break;\n case 'Bootstrap5Dark':\n scrollStyle = {\n backRect: '#282D31',\n thumb: '#3B4248',\n circle: '#495057',\n circleHover: '#6C757D',\n arrow: '#A19F9D',\n grip: '#ADB5BD'\n };\n break;\n case 'HighContrast':\n scrollStyle = {\n backRect: '#757575',\n thumb: '#BFBFBF',\n circle: '#FFFFFF',\n circleHover: '#FFFFFF',\n arrow: '#ADB5BD',\n grip: '#969696'\n };\n break;\n case 'TailwindDark':\n scrollStyle = {\n backRect: '#6B7280',\n thumb: '#374151',\n circle: '#4B5563',\n circleHover: '#4B5563',\n arrow: '#ADB5BD',\n grip: '#D1D5DB'\n };\n break;\n case 'Fluent':\n scrollStyle = {\n backRect: '#F3F2F1',\n thumb: '#E1DFDD',\n circle: '#FFFFFF',\n circleHover: '#E1DFDD',\n arrow: '#605E5C',\n grip: '#605E5C'\n };\n break;\n case 'FluentDark':\n scrollStyle = {\n backRect: '#252423',\n thumb: '#323130',\n circle: '#3B3A39',\n circleHover: '#3B3A39',\n arrow: '#ADB5BD',\n grip: '#A19F9D'\n };\n break;\n case 'Fluent2':\n scrollStyle = {\n backRect: '#F5F5F5',\n thumb: '#F0F0F0',\n circle: '#FAFAFA',\n circleHover: '#FAFAFA',\n arrow: '#424242',\n grip: '#424242'\n };\n break;\n case 'Fluent2Dark':\n scrollStyle = {\n thumb: '#0A0A0A',\n backRect: '#141414',\n circle: '#1F1F1F',\n circleHover: '#1F1F1F',\n arrow: '#D6D6D6',\n grip: '#D6D6D6'\n };\n break;\n case 'Material3':\n scrollStyle = {\n backRect: 'rgba(103, 80, 164, 0.05)',\n thumb: ' rgba(103, 80, 164, 0.14)',\n circle: '#FFFFFF',\n circleHover: '#E1DFDD',\n arrow: '#49454E',\n grip: '#49454E'\n };\n break;\n case 'Material3Dark':\n scrollStyle = {\n backRect: 'rgba(208, 188, 255, 0.05)',\n thumb: 'rgba(208, 188, 255, 0.14)',\n circle: '#FFFFFF',\n circleHover: '#E1DFDD',\n arrow: '#CAC4D0',\n grip: '#CAC4D0'\n };\n break;\n default:\n scrollStyle = {\n backRect: '#f5f5f5',\n thumb: '#e0e0e0',\n circle: '#fff',\n circleHover: '#eee',\n arrow: '#9e9e9e',\n grip: '#9e9e9e'\n };\n break;\n }\n return scrollStyle;\n}\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { subtractThickness, valueToCoefficient, sum, redrawElement, isBreakLabel, ChartLocation, withInBounds, rotateTextSize } from '../../common/utils/helper';\nimport { subArray, inside, appendChildElement, stringToNumber } from '../../common/utils/helper';\nimport { Thickness, logBase, createZoomingLabels, getElement } from '../../common/utils/helper';\nimport { Size, Rect, measureText, TextOption, PathOption } from '@syncfusion/ej2-svg-base';\nimport { textElement, textTrim, getRotatedRectangleCoordinates, isRotatedRectIntersect, isZoomSet } from '../../common/utils/helper';\n/**\n * Specifies the Cartesian Axis Layout.\n */\nvar axisPadding = 10;\nvar CartesianAxisLayoutPanel = /** @class */ (function () {\n /**\n * Constructor for creating the chart.\n *\n * @param {Chart} chartModule - Specifies the Chart model.\n * @private */\n function CartesianAxisLayoutPanel(chartModule) {\n this.chart = chartModule;\n this.padding = 5;\n }\n /**\n * Measure the axis size.\n *\n * @returns {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n var chartAreaWidth = chart.chartArea.width ? stringToNumber(chart.chartArea.width, chart.availableSize.width) : null;\n this.crossAt(chart);\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n this.initialClipRect = rect;\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with initial Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (!this.chart.delayRedraw) {\n this.calculateAxisSize(this.initialClipRect);\n }\n this.leftSize = 0;\n this.rightSize = 0;\n this.topSize = 0;\n this.bottomSize = 0;\n //Measure Axis size with series Rect\n this.measureRowAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n this.measureColumnAxis(chart, this.initialClipRect);\n this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n if (chartAreaWidth) {\n this.calculateFixedChartArea(chart, chartAreaWidth);\n }\n if (!this.chart.delayRedraw) {\n chart.refreshAxis();\n this.calculateAxisSize(this.seriesClipRect);\n }\n };\n CartesianAxisLayoutPanel.prototype.calculateFixedChartArea = function (chart, chartAreaWidth) {\n this.seriesClipRect.width = chartAreaWidth;\n this.seriesClipRect.x = chart.availableSize.width - chart.margin.right - chartAreaWidth -\n (chart.legendSettings.position === 'Right' ? chart.legendModule.legendBounds.width : 0);\n for (var _i = 0, _a = chart.rows; _i < _a.length; _i++) {\n var item = _a[_i];\n this.seriesClipRect.x -= sum(item.farSizes);\n }\n };\n CartesianAxisLayoutPanel.prototype.measureRowAxis = function (chart, rect) {\n var row;\n this.calculateRowSize(rect);\n for (var _i = 0, _a = chart.rows; _i < _a.length; _i++) {\n var item = _a[_i];\n row = item;\n row.nearSizes = [];\n row.farSizes = [];\n row.insideNearSizes = [];\n row.insideFarSizes = [];\n this.arrangeAxis(row);\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight));\n if (this.leftSize < sum(row.nearSizes)) {\n this.leftSize = sum(row.nearSizes);\n }\n if (this.rightSize < sum(row.farSizes)) {\n this.rightSize = sum(row.farSizes);\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.measureColumnAxis = function (chart, rect) {\n var column;\n this.calculateColumnSize(rect);\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var item = _a[_i];\n column = item;\n column.farSizes = [];\n column.nearSizes = [];\n column.insideNearSizes = [];\n column.insideFarSizes = [];\n this.arrangeAxis(column);\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height));\n if (this.bottomSize < sum(column.nearSizes)) {\n this.bottomSize = sum(column.nearSizes);\n }\n if (this.topSize < sum(column.farSizes)) {\n this.topSize = sum(column.farSizes);\n }\n }\n };\n /**\n * Measure the column and row in chart.\n *\n * @returns {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measureDefinition = function (definition, chart, size) {\n var ele;\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n ele = axis.scrollbarSettings.height;\n axis.scrollBarHeight = chart.scrollBarModule && chart.zoomModule && chart.zoomSettings.enableScrollbar &&\n axis.enableScrollbarOnZooming && chart.zoomModule.isZoomed && (axis.zoomFactor < 1 || axis.zoomPosition > 0) ? ele : 0;\n axis.scrollBarHeight = chart.scrollBarModule && (chart.zoomModule && chart.zoomSettings.enableScrollbar &&\n axis.enableScrollbarOnZooming && chart.zoomModule.isZoomed && (axis.zoomFactor < 1 || axis.zoomPosition > 0)\n || axis.scrollbarSettings.enable) ? ele : 0;\n axis.getModule(chart);\n axis.baseModule.calculateRangeAndInterval(size, axis);\n definition.computeSize(axis, axis.scrollBarHeight, definition, chart);\n }\n if (definition.farSizes.length > 0) {\n definition.farSizes[definition.farSizes.length - 1] -= axisPadding;\n }\n if (definition.nearSizes.length > 0) {\n definition.nearSizes[definition.nearSizes.length - 1] -= axisPadding;\n }\n };\n /**\n * Measure the axis.\n *\n * @param {Rect} rect - The rect for measuring the axis.\n * @returns {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.calculateAxisSize = function (rect) {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var axis;\n var nearCount = 0;\n var farCount = 0;\n var size = 0;\n var x;\n var y;\n var axisOffset;\n this.calculateRowSize(rect);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_1 = row.axes.length; j < len_1; j++) {\n axis = row.axes[j];\n axisOffset = axis.plotOffset;\n if (axis.rect.height === 0) {\n axis.rect.height = row.computedHeight;\n size = 0;\n for (var k = i + 1, len_2 = i + axis.span; k < len_2; k++) {\n definition = chart.rows[k];\n size += definition.computedHeight;\n }\n axis.rect.y = (row.computedTop - size) + (axis.plotOffsetTop ? axis.plotOffsetTop : axisOffset);\n axis.rect.height = (axis.rect.height + size) -\n (this.getAxisOffsetValue(axis.plotOffsetTop, axis.plotOffsetBottom, axis.plotOffset));\n axis.rect.width = 0;\n }\n if (axis.isAxisOpposedPosition) {\n if (axis.labelPosition === 'Inside' && axis.orientation === 'Vertical') {\n x = rect.x + rect.width - sum(subArray(row.insideFarSizes, farCount));\n }\n else {\n x = rect.x + rect.width + sum(subArray(row.farSizes, farCount));\n }\n axis.rect.x = axis.rect.x >= x ? axis.rect.x : x;\n farCount++;\n }\n else {\n if (axis.labelPosition === 'Inside' && axis.orientation === 'Vertical') {\n x = rect.x + sum(subArray(row.insideNearSizes, nearCount));\n }\n else {\n x = rect.x - sum(subArray(row.nearSizes, nearCount));\n }\n axis.rect.x = axis.rect.x <= x ? axis.rect.x : x;\n nearCount++;\n }\n }\n }\n this.calculateColumnSize(rect);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n nearCount = 0;\n farCount = 0;\n for (var j = 0, len_3 = column.axes.length; j < len_3; j++) {\n axis = column.axes[j];\n axisOffset = axis.plotOffset;\n if (axis.rect.width === 0) {\n for (var k = i, len_4 = (i + axis.span); k < len_4; k++) {\n definition = chart.columns[k];\n axis.rect.width += definition.computedWidth;\n }\n axis.rect.x = column.computedLeft + (axis.plotOffsetLeft ? axis.plotOffsetLeft : axisOffset);\n axis.rect.width -= (this.getAxisOffsetValue(axis.plotOffsetLeft, axis.plotOffsetRight, axis.plotOffset));\n axis.rect.height = 0;\n }\n if (axis.isAxisOpposedPosition) {\n if (axis.labelPosition === 'Inside' && axis.orientation === 'Horizontal') {\n y = rect.y + sum(subArray(column.insideFarSizes, farCount));\n }\n else {\n y = rect.y - sum(subArray(column.farSizes, farCount));\n }\n axis.rect.y = axis.rect.y <= y ? axis.rect.y : y;\n farCount++;\n }\n else {\n if (axis.labelPosition === 'Inside' && axis.orientation === 'Horizontal') {\n y = rect.y + rect.height - sum(subArray(column.insideNearSizes, nearCount));\n }\n else {\n y = rect.y + rect.height + sum(subArray(column.nearSizes, nearCount));\n }\n axis.rect.y = axis.rect.y >= y ? axis.rect.y : y;\n nearCount++;\n }\n }\n }\n };\n /**\n * Measure the axis.\n *\n * @returns {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.measure = function () {\n var chart = this.chart;\n var row;\n var column;\n var definition;\n var actualIndex;\n var span;\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n //definition.Axes = axis;\n if (axis.orientation === 'Vertical') {\n chart.verticalAxes.push(axis);\n actualIndex = this.getActualRow(axis);\n row = chart.rows[actualIndex];\n this.pushAxis(row, axis);\n span = ((actualIndex + axis.span) > chart.rows.length ? chart.rows.length : (actualIndex + axis.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.rows[j];\n definition.axes[row.axes.length - 1] = axis;\n chart.rows[j] = definition;\n }\n chart.rows[actualIndex] = row;\n }\n else {\n chart.horizontalAxes.push(axis);\n actualIndex = this.getActualColumn(axis);\n column = chart.columns[actualIndex];\n this.pushAxis(column, axis);\n span = ((actualIndex + axis.span) > chart.columns.length ? chart.columns.length : (actualIndex + axis.span));\n for (var j = actualIndex + 1; j < span; j++) {\n definition = chart.columns[j];\n definition.axes[column.axes.length - 1] = axis;\n chart.columns[j] = definition;\n }\n chart.columns[actualIndex] = column;\n }\n axis.isRTLEnabled = chart.enableRtl;\n axis.setIsInversedAndOpposedPosition();\n }\n };\n CartesianAxisLayoutPanel.prototype.getAxisOffsetValue = function (position1, position2, plotOffset) {\n var rangeOffset = position1 ? (position1 + (position2 ? position2 :\n plotOffset)) : (position2 ? position2 + plotOffset : 2 * plotOffset);\n return rangeOffset;\n };\n CartesianAxisLayoutPanel.prototype.crossAt = function (chart) {\n for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n var axis = _a[_i];\n if (axis.crossesAt === null) {\n continue;\n }\n if (!axis.crossesInAxis) {\n if (chart.requireInvertedAxis) {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryXAxis : chart.primaryYAxis;\n }\n else {\n axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryYAxis : chart.primaryXAxis;\n }\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n else {\n for (var i = 2, len = chart.axisCollections.length; i < len; i++) {\n if (axis.crossesInAxis === chart.axisCollections[i].name) {\n axis.crossInAxis = chart.axisCollections[i];\n axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n continue;\n }\n }\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.updateCrossAt = function (axis, crossAt) {\n switch (axis.valueType) {\n case 'DateTime': {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n return Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: crossAt }).val))));\n }\n case 'Category':\n return parseFloat(crossAt) ? parseFloat(crossAt) : axis.labels.indexOf(crossAt);\n case 'Logarithmic':\n return logBase(crossAt, axis.logBase);\n default:\n return crossAt;\n }\n };\n CartesianAxisLayoutPanel.prototype.pushAxis = function (definition, axis) {\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (!definition.axes[i]) {\n definition.axes[i] = axis;\n break;\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.arrangeAxis = function (definition) {\n var axisCollection = [];\n for (var i = 0, len = definition.axes.length; i <= len; i++) {\n if (definition.axes[i]) {\n axisCollection.push(definition.axes[i]);\n }\n }\n definition.axes = axisCollection;\n };\n CartesianAxisLayoutPanel.prototype.getActualColumn = function (axis) {\n var actualLength = this.chart.columns.length;\n var pos = axis.columnIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n CartesianAxisLayoutPanel.prototype.getActualRow = function (axis) {\n var actualLength = this.chart.rows.length;\n var pos = axis.rowIndex;\n var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n return result;\n };\n /**\n * Measure the row size.\n *\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateRowSize = function (rect) {\n /** Calculate row size */\n var chart = this.chart;\n var row;\n var rowTop = rect.y + rect.height;\n var height = 0;\n var remainingHeight = Math.max(0, rect.height);\n for (var i = 0, len = chart.rows.length; i < len; i++) {\n row = chart.rows[i];\n if (row.height.indexOf('%') !== -1) {\n height = Math.min(remainingHeight, (rect.height * parseInt(row.height, 10) / 100));\n }\n else {\n height = Math.min(remainingHeight, parseInt(row.height, 10));\n }\n height = (i !== (len - 1)) ? height : remainingHeight;\n row.computedHeight = height;\n rowTop -= height;\n row.computedTop = rowTop;\n remainingHeight -= height;\n }\n };\n /**\n * Measure the row size.\n *\n * @param {Rect} rect rect\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.calculateColumnSize = function (rect) {\n /** Calculate column size */\n var chart = this.chart;\n var column;\n var columnLeft = rect.x;\n var width = 0;\n var remainingWidth = Math.max(0, rect.width);\n for (var i = 0, len = chart.columns.length; i < len; i++) {\n column = chart.columns[i];\n if (column.width.indexOf('%') !== -1) {\n width = Math.min(remainingWidth, (rect.width * parseInt(column.width, 10) / 100));\n }\n else {\n width = Math.min(remainingWidth, parseInt(column.width, 10));\n }\n width = (i !== (len - 1)) ? width : remainingWidth;\n column.computedWidth = width;\n column.computedLeft = columnLeft;\n columnLeft += width;\n remainingWidth -= width;\n }\n };\n /**\n * To render the axis element.\n *\n * @returns {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.renderAxes = function () {\n var chart = this.chart;\n var axis;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisInsideCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n if (axisLineElement) {\n axisLineElement.setAttribute('aria-hidden', 'true');\n }\n var outsideElement;\n var isInside;\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n var axisVisibility = true;\n axis = chart.axisCollections[i];\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Inside' });\n if (this.element) {\n this.element.setAttribute('aria-hidden', 'true');\n }\n outsideElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Outside' });\n if (outsideElement) {\n outsideElement.setAttribute('aria-hidden', 'true');\n }\n for (var _i = 0, _a = axis.series; _i < _a.length; _i++) {\n var series = _a[_i];\n if (axis.name === series.yAxisName || axis.name === series.xAxisName) {\n axisVisibility = series.visible;\n if (series.category === 'Pareto' && !series.paretoOptions.showAxis && series.type === 'Line') {\n axisVisibility = false;\n }\n if (!axisVisibility) {\n continue;\n }\n else {\n break;\n }\n }\n }\n if (!axisVisibility) {\n continue;\n }\n isInside = this.findAxisPosition(axis);\n this.drawAxis(axis, i, isInside, outsideElement, axisElement, axisLineElement);\n }\n this.drawPaneLines(chart, axisElement);\n appendChildElement(chart.enableCanvas, chart.svgObject, axisElement, chart.redraw);\n return axisLineElement;\n };\n /**\n * To render the axis scrollbar\n *\n * @param {Chart} chart chart\n * @param {Axis} axis axis\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.renderScrollbar = function (chart, axis) {\n var isZoomed = isNullOrUndefined(chart.zoomModule) ? false : chart.zoomModule.isZoomed;\n if (((isZoomed && (axis.zoomFactor < 1 || axis.zoomPosition > 0)) || (axis.scrollbarSettings.enable &&\n (axis.zoomFactor <= 1 || axis.zoomPosition >= 0))) &&\n (!axis.zoomingScrollBar.isScrollUI)) {\n if (!chart.scrollElement) {\n chart.scrollElement = redrawElement(chart.redraw, chart.element.id + '_scrollElement') || createElement('div', { id: chart.element.id + '_scrollElement' });\n }\n appendChildElement(false, chart.scrollElement, axis.zoomingScrollBar.render(true), true);\n }\n else if (axis.zoomFactor === 1 && axis.zoomPosition === 0 && axis.zoomingScrollBar.svgObject && !axis.scrollbarSettings.enable) {\n axis.zoomingScrollBar.destroy();\n }\n else if (axis.zoomingScrollBar.svgObject) {\n axis.zoomingScrollBar.svgObject.style.top = (axis.isAxisOpposedPosition && axis.orientation === 'Horizontal' ? -16 : 0)\n + axis.rect.y + Math.max(0.5, axis.lineStyle.width / 2) + 'px';\n axis.zoomingScrollBar.svgObject.style.left = (axis.isAxisOpposedPosition && axis.orientation !== 'Horizontal' ? 16 : 0)\n + axis.rect.x - (axis.orientation === 'Vertical' ? axis.scrollbarSettings.height : 0) + 'px';\n }\n if (axis.zoomingScrollBar.isScrollUI) {\n axis.zoomingScrollBar.isScrollUI = false;\n }\n };\n /**\n * Draws pane lines for the specified chart.\n *\n * @param {Chart} chart -The chart for which pane lines are to be drawn.\n * @param {Element} [axisElement] -Optional. The axis element to which the pane lines are associated.\n * @returns {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawPaneLines = function (chart, axisElement) {\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'DefinitionLine' });\n for (var j = 0, len = chart.rows.length; j < len; j++) {\n var row = chart.rows[j];\n if (row.border.color) {\n this.drawBottomLine(row, j, true);\n }\n }\n for (var j = 0, len = chart.columns.length; j < len; j++) {\n var column = chart.columns[j];\n if (column.border.color) {\n this.drawBottomLine(column, j, false);\n }\n }\n axisElement = axisElement ? axisElement : getElement(chart.element.id + 'AxisInsideCollection');\n if (!this.chart.enableCanvas) {\n axisElement.appendChild(this.element);\n }\n };\n /**\n * Draws an axis for the specified axis configuration.\n *\n * @param {Axis} axis -The axis configuration to be drawn.\n * @param {number} index -The index of the axis.\n * @param {boolean} isInside -Indicates whether the axis is inside or outside the plot area.\n * @param {Element} outsideElement -The element where the axis should be drawn if it's outside the plot area.\n * @param {Element} axisElement -The element representing the axis.\n * @param {Element} axisLineElement -The element representing the axis line.\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.drawAxis = function (axis, index, isInside, outsideElement, axisElement, axisLineElement) {\n axis.updateCrossValue();\n var axisName = '';\n if (axis.orientation === 'Horizontal') {\n if (axis.visible && axis.internalVisibility && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, index, axis.plotOffset, 0, 0, 0, axis.plotOffsetLeft, axis.plotOffsetRight, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n axisName = 'X';\n }\n else {\n if (axis.visible && axis.internalVisibility && axis.lineStyle.width > 0) {\n this.drawAxisLine(axis, index, 0, axis.plotOffset, axis.plotOffsetBottom, axis.plotOffsetTop, 0, 0, isInside ? outsideElement : this.element, axis.updatedRect);\n }\n axisName = 'Y';\n }\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0 || axis.minorTickLines.width > 0 ||\n axis.minorGridLines.width > 0) {\n this['draw' + axisName + 'AxisGridLine'](axis, index, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n }\n if (axis.visible && axis.internalVisibility) {\n this['draw' + axisName + 'AxisLabels'](axis, index, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this['draw' + axisName + 'AxisBorder'](axis, index, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n this['draw' + axisName + 'AxisTitle'](axis, index, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n }\n if (!this.chart.enableCanvas) {\n axisElement.appendChild(this.element);\n if (outsideElement && outsideElement.childNodes.length > 0) {\n axisLineElement.appendChild(outsideElement);\n }\n }\n if (this.chart.scrollBarModule && ((this.chart.zoomSettings.enableScrollbar && axis.enableScrollbarOnZooming) ||\n axis.scrollbarSettings.enable)) {\n this.renderScrollbar(this.chart, axis);\n }\n };\n /**\n * To find the axis position\n *\n * @param {Axis} axis axis\n * @returns {boolean} axis position\n * @private\n */\n CartesianAxisLayoutPanel.prototype.findAxisPosition = function (axis) {\n return axis.crossAt !== null && axis.isInside(axis.crossInAxis.visibleRange);\n };\n /**\n * To render the bootom line of the columns and rows\n *\n * @param {Row | Column} definition definition\n * @param {number} index index\n * @param {boolean} isRow isRow\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.drawBottomLine = function (definition, index, isRow) {\n var chart = this.chart;\n var optionsLine = {};\n var x1;\n var x2;\n var y1;\n var y2;\n var definitionName;\n if (isRow) {\n definition = definition;\n y1 = y2 = definition.computedTop + definition.computedHeight;\n x1 = this.seriesClipRect.x;\n x2 = x1 + this.seriesClipRect.width;\n definitionName = 'Row';\n }\n else {\n definition = definition;\n x1 = x2 = definition.computedLeft;\n y1 = this.seriesClipRect.y;\n y2 = y1 + this.seriesClipRect.height;\n definitionName = 'Column';\n }\n optionsLine = {\n 'id': chart.element.id + '_AxisBottom_' + definitionName + index,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n 'stroke-width': definition.border.width,\n 'stroke': definition.border.color\n };\n this.htmlObject = chart.renderer.drawLine(optionsLine);\n this.element.appendChild(this.htmlObject);\n };\n /**\n * To render the axis line\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {number} plotX plotX\n * @param {number} plotY plotY\n * @param {number} plotBottom plotBottom\n * @param {number} plotTop plotTop\n * @param {number} plotLeft plotLeft\n * @param {number} plotRight plotRight\n * @param {Element} parent parent\n * @param {Rect} rect rect\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.drawAxisLine = function (axis, index, plotX, plotY, plotBottom, plotTop, plotLeft, plotRight, parent, rect) {\n var chart = this.chart;\n var optionsLine = {};\n var element = getElement(chart.element.id + 'AxisLine_' + index);\n var direction = element ? element.getAttribute('d') : '';\n element = null;\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n 'd': 'M ' + (rect.x - plotX - plotLeft) + ' ' + (rect.y - plotY - plotTop) +\n ' L ' + (rect.x + rect.width + plotX + plotRight) + ' ' + (rect.y + rect.height + plotY + plotBottom),\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n this.htmlObject = chart.renderer.drawPath(optionsLine);\n appendChildElement(chart.enableCanvas, parent, this.htmlObject, chart.redraw, true, 'x', 'y', null, direction, null, null, null, chart.duration);\n };\n /**\n * To render the yAxis grid line\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {Element} parent parent\n * @param {Rect} rect rect\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisGridLine = function (axis, index, parent, rect) {\n var isLogAxis = axis.valueType === 'Logarithmic';\n var isCategoryAxis = axis.valueType.indexOf('Category') > -1;\n var tempInterval;\n var pointY = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorGridDirection;\n var isOpposed = axis.isAxisOpposedPosition;\n var tickSize = isOpposed ? axis.majorTickLines.height : -axis.majorTickLines.height;\n var axisLineSize = (isOpposed) ? axis.lineStyle.width * 0.5 : -axis.lineStyle.width * 0.5;\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ?\n 0.5 : 0;\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? isOpposed ? axis.scrollBarHeight :\n -axis.scrollBarHeight : 0;\n var isTickInside = axis.tickPosition === 'Inside';\n var ticks = isTickInside ? (rect.x - tickSize - axisLineSize) : (rect.x + tickSize + axisLineSize + scrollBarHeight);\n var length = axis.visibleLabels.length;\n var chartThemeStyle = this.chart.themeStyle;\n if (axis.valueType.indexOf('Category') > -1 && axis.labelPlacement === 'BetweenTicks' && length > 0 && !this.chart.stockChart) {\n length += 1;\n }\n var minorGridLines = axis.minorGridLines;\n var minorTickLines = axis.minorTickLines;\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = !axis.visibleLabels[i] ? (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel\n : axis.visibleLabels[i].value - ticksbwtLabel;\n pointY = valueToCoefficient(tempInterval, axis) * rect.height;\n pointY = (pointY * -1) + (rect.y + rect.height);\n if (pointY >= rect.y && (rect.y + rect.height) >= pointY) {\n if ((inside(tempInterval, axis.visibleRange)) || this.isBorder(axis, i, pointY)) {\n majorGrid = 'M ' + this.seriesClipRect.x + ' ' + (pointY) +\n ' L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + pointY;\n this.renderGridLine(axis, index, majorGrid, axis.majorGridLines, '_MajorGridLine_', i, this.element, chartThemeStyle.majorGridLine, axis.majorGridLines.dashArray);\n }\n majorTick = 'M ' + (rect.x + axisLineSize + (isTickInside ? scrollBarHeight : 0)) + ' ' + pointY +\n ' L ' + (ticks) + ' ' + pointY;\n this.renderGridLine(axis, index, majorTick, axis.majorTickLines, '_MajorTickLine_', i, parent, chartThemeStyle.majorTickLine);\n if ((minorGridLines.width > 0 || minorTickLines.width > 0) && axis.minorTicksPerInterval > 0) {\n if (i === 0 && isZoomSet(axis) && !isLogAxis && !isCategoryAxis) {\n this.renderMinorGridOnZooming(axis, tempInterval, rect, i, index, chartThemeStyle, parent);\n }\n minorGridDirection = this.drawAxisMinorLine(axis, tempInterval, rect, i);\n this.renderGridLine(axis, index, minorGridDirection[0], minorGridLines, '_MinorGridLine_', i, this.element, chartThemeStyle.minorGridLine, minorGridLines.dashArray);\n this.renderGridLine(axis, index, minorGridDirection[1], minorTickLines, '_MinorTickLine_', i, parent, chartThemeStyle.minorTickLine);\n if (i === length - 1 && isZoomSet(axis) && isLogAxis && !isCategoryAxis) {\n this.renderMinorGridOnZooming(axis, (tempInterval + axis.visibleRange.interval), rect, i, index, chartThemeStyle, parent);\n }\n }\n }\n }\n };\n /**\n * To check the border of the axis\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {number} value value\n * @returns {boolean} check the border of the axis\n */\n CartesianAxisLayoutPanel.prototype.isBorder = function (axis, index, value) {\n var border = this.chart.chartArea.border;\n var rect = this.seriesClipRect;\n var orientation = axis.orientation;\n var start = (orientation === 'Horizontal') ? rect.x : rect.y;\n var size = (orientation === 'Horizontal') ? rect.width : rect.height;\n var startIndex = (orientation === 'Horizontal') ? 0 : axis.visibleLabels.length - 1;\n var endIndex = (orientation === 'Horizontal') ? axis.visibleLabels.length - 1 : 0;\n if (axis.plotOffset > 0) {\n return true;\n }\n else if ((value === start || value === (start + size)) && (border.width <= 0 || border.color === 'transparent')) {\n return true;\n }\n else if ((value !== start && index === startIndex) || (value !== (start + size) && index === endIndex)) {\n return true;\n }\n return false;\n };\n /**\n * To render the yAxis label\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {Element} parent parent\n * @param {Rect} rect rect\n * @returns {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var label;\n var pointX = 0;\n var pointY = 0;\n var elementSize;\n var labelSpace = axis.labelPadding;\n var options;\n var isAxisBreakLabel;\n var isLabelInside = axis.labelPosition === 'Inside';\n var isOpposed = axis.isAxisOpposedPosition;\n var RotatedWidth;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var padding = tickSpace + labelSpace + axis.lineStyle.width * 0.5;\n var angle = axis.angle % 360;\n var isVerticalAngle = (angle === -90 || angle === 90 || angle === 270 || angle === -270);\n padding += (isVerticalAngle) ? (isLabelInside ? 5 : -5) : 0;\n padding = (isOpposed) ? padding : -padding;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight * (isOpposed ? 1 : -1) : 0;\n var textHeight;\n var textPadding;\n var maxLineWidth;\n var pixel = 10;\n var isInverse = axis.isAxisInverse;\n var previousEnd = isInverse ? rect.y : (rect.y + rect.height);\n var labelPadding;\n var intervalLength;\n var labelHeight;\n var yAxisLabelX;\n var isLabelOnAxisLineLeft = ((!isOpposed && !isLabelInside) || (isOpposed && isLabelInside));\n if (isLabelInside) {\n labelPadding = !isLabelOnAxisLineLeft ? -padding : padding;\n }\n else {\n labelPadding = !isLabelOnAxisLineLeft ? -padding + (chart.enableRtl ? -scrollBarHeight : scrollBarHeight) :\n padding + (chart.enableRtl ? -scrollBarHeight : scrollBarHeight);\n }\n var sizeWidth = [];\n var breakLabelSizeWidth = [];\n axis.visibleLabels.map(function (item) {\n sizeWidth.push(item.size['width']);\n breakLabelSizeWidth.push(item.breakLabelSize['width']);\n });\n var LabelMaxWidth = Math.max.apply(Math, sizeWidth);\n var breakLabelMaxWidth = Math.max.apply(Math, breakLabelSizeWidth);\n RotatedWidth = LabelMaxWidth;\n if (angle >= -45 && angle <= 45 && angle !== 0) {\n RotatedWidth = LabelMaxWidth * Math.cos(angle * Math.PI / 180);\n if (RotatedWidth < 0) {\n RotatedWidth = -RotatedWidth;\n }\n }\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n label = axis.visibleLabels[i];\n isAxisBreakLabel = isBreakLabel(axis.visibleLabels[i].originalText);\n elementSize = isAxisBreakLabel ? axis.visibleLabels[i].breakLabelSize : axis.visibleLabels[i].size;\n pointY = (valueToCoefficient(axis.visibleLabels[i].value, axis) * rect.height) + (chart.stockChart ? 7 : 0);\n pointY = Math.floor((pointY * -1) + (rect.y + rect.height));\n textHeight = ((elementSize.height / 8) * axis.visibleLabels[i].text.length / 2);\n textPadding = (chart.requireInvertedAxis && axis.labelPosition === 'Inside') ? 0 : ((elementSize.height / 4) * 3) + 3;\n intervalLength = rect.height / axis.visibleLabels.length;\n labelHeight = ((axis.labelIntersectAction === 'Trim' || axis.labelIntersectAction === 'Wrap') && angle !== 0 &&\n elementSize.width > intervalLength) ? intervalLength : elementSize.width;\n pointY = (isAxisBreakLabel ? (axis.labelPosition === 'Inside' ? (pointY - (elementSize.height / 2) - textHeight + textPadding)\n : (pointY - textHeight)) : (axis.labelPosition === 'Inside' ? pointY + textPadding : pointY));\n if (axis.labelPosition === 'Inside' && ((i === 0 && !axis.isInversed) || (i === len - 1 && axis.isInversed))) {\n if (chart.stockChart) {\n pointY -= (textPadding);\n }\n else {\n pointY -= (textPadding - ((chart.requireInvertedAxis && axis.labelPosition === 'Inside') ? 0 : (axis.opposedPosition ? -padding : padding)));\n }\n }\n if (axis.majorGridLines.width > axis.majorTickLines.width) {\n maxLineWidth = axis.majorGridLines.width;\n }\n else {\n maxLineWidth = axis.majorTickLines.width;\n }\n if (axis.labelStyle.textAlignment === 'Far') {\n pointY = pointY - maxLineWidth - pixel;\n }\n else if (axis.labelStyle.textAlignment === 'Near') {\n pointY = pointY + maxLineWidth + pixel;\n }\n // label X value adjustment (Start)\n if (isLabelInside) {\n yAxisLabelX = labelPadding + ((angle === 0 ? elementSize.width :\n (isAxisBreakLabel ? breakLabelMaxWidth : LabelMaxWidth)) / 2);\n }\n else {\n yAxisLabelX = labelPadding - ((angle === 0 ? elementSize.width :\n (isAxisBreakLabel ? breakLabelMaxWidth : RotatedWidth)) / 2);\n }\n pointX = isOpposed ? axis.scrollBarHeight !== 0 ? ((rect.x + axis.scrollBarHeight + padding) - yAxisLabelX) : (rect.x - yAxisLabelX) : (rect.x + yAxisLabelX);\n if (isVerticalAngle) {\n pointX += (isOpposed) ? -10 : 10;\n }\n yAxisLabelX = labelPadding;\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, 'middle', label.text, '', 'middle', angle);\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (isInverse && i === len - 1)) && options.y > rect.y) ||\n (((i === len - 1) || (isInverse && i === 0)) && options.y - elementSize.height * 0.5 < rect.y)) {\n options.text = '';\n }\n break;\n case 'Shift':\n if ((i === 0 || (isInverse && i === len - 1)) && options.y > rect.y + rect.height) {\n options.y = pointY = rect.y + rect.height;\n }\n else if (((i === len - 1) || (isInverse && i === 0)) && (options.y < rect.y || options.y - elementSize.height * 0.5 <= 0)) {\n options.y = pointY = rect.y + elementSize.height * 0.5;\n }\n break;\n }\n // ------- Hide Calculation (Start) -------------\n var previousYValue = options.y;\n var currentYValue = options.y - labelHeight;\n if (isAxisBreakLabel) {\n previousYValue = (options.y - (labelHeight / 2));\n currentYValue = options.y + (labelHeight / 2);\n }\n if ((angle === 90 || angle === 270) && axis.labelIntersectAction === 'Hide' && i !== 0 &&\n (!isInverse ? previousYValue >= previousEnd : currentYValue <= previousEnd)) {\n continue;\n }\n previousEnd = isInverse ? previousYValue : currentYValue;\n // ------- Hide Calculation (End) -------------\n options.transform = 'rotate(' + angle + ',' + pointX + ',' + pointY + ')';\n textElement(chart.renderer, options, label.labelStyle, label.labelStyle.color || chart.themeStyle.axisLabelFont.color, labelElement, false, chart.redraw, true, true, chart.duration, null, null, null, chart.enableCanvas, null, chart.themeStyle.axisLabelFont, new ChartLocation(pointX, pointY));\n }\n if (!this.chart.enableCanvas) {\n if (!chart.delayRedraw) {\n appendChildElement(chart.enableCanvas, parent, labelElement, chart.redraw);\n }\n else if (axis.visible && axis.internalVisibility) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n }\n };\n /**\n * To get X value based on lineBreakAlignment for Y axis line break labels only.\n *\n * @param {number} x text x position\n * @param {Axis} axis y axis values\n * @param {number} textWidth axis label width\n * @returns {number} returns suitable axis label x position\n */\n CartesianAxisLayoutPanel.prototype.getAxisLabelXvalue = function (x, axis, textWidth) {\n var anchor = axis.lineBreakAlignment;\n var isLabelInside = axis.labelPosition === 'Inside';\n var isOpposed = axis.isAxisOpposedPosition;\n if ((isOpposed && isLabelInside) || (!isOpposed && !isLabelInside)) {\n return (anchor === 'Right' ? x : (anchor === 'Center' ? (x - textWidth / 2) : (x - textWidth)));\n }\n else {\n return (anchor === 'Left' ? x : (anchor === 'Center' ? (x + textWidth / 2) : (x + textWidth)));\n }\n };\n /**\n * To render the yAxis label border.\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {Element} parent parent\n * @param {Rect} rect rect\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisBorder = function (axis, index, parent, rect) {\n if (axis.border.width > 0) {\n var startY = void 0;\n var pointY = void 0;\n var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n var isOpposed = axis.isAxisOpposedPosition;\n scrollBarHeight = (isOpposed ? 1 : -1) * scrollBarHeight;\n var gap = (rect.height / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endY = void 0;\n var length_1 = axis.maxLabelSize.width + 10 + ((axis.tickPosition === axis.labelPosition) ?\n axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endX = ((isOpposed && axis.labelPosition === 'Inside') || (!isOpposed\n && axis.labelPosition === 'Outside')) ? rect.x - length_1 + scrollBarHeight : rect.x + length_1 + scrollBarHeight;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n pointY = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointY = (axis.isAxisInverse ? (1 - pointY) : pointY) * rect.height;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startY = (pointY * -1) + (rect.y + rect.height);\n endY = (pointY * -1) - (gap) + (rect.y + rect.height);\n }\n else {\n startY = (pointY * -1) + gap / 2 + (rect.y + rect.height);\n endY = (pointY * -1) - gap / 2 + (rect.y + rect.height);\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startY > (rect.y + rect.height)) {\n labelBorder += ('M' + ' ' + endX + ' ' + (rect.y + rect.height) + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(rect.y) > (endY)) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX\n + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + (rect.y) + ' ');\n }\n else {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + endY + ' ' + 'L' + ' ' +\n endX + ' ' + endY + ' ');\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startY > rect.y + rect.height) && !((endY) < Math.floor(rect.y))) {\n labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n ' ' + startY + ' ' + 'M' + ' ' + endX + ' ' + endY + ' ' +\n 'L' + ' ' + (rect.x + scrollBarHeight) + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle') ? ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + rect.y + ' ' + 'L' + ' ' +\n (rect.x + scrollBarHeight) + ' ' + (rect.y + rect.height) + ' ') : '';\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n for (var i = 0; i < this.chart.visibleSeries.length; i++) {\n if (axis.multiLevelLabels.length > 0 && this.chart.multiLevelLabelModule && this.chart.visibleSeries[i].visible) {\n this.chart.multiLevelLabelModule.renderYAxisMultiLevelLabels(axis, index, parent, rect);\n break;\n }\n }\n };\n /**\n * To render the yAxis title\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {Element} parent parent\n * @param {Rect} rect rect\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.drawYAxisTitle = function (axis, index, parent, rect) {\n if (axis.title) {\n var chart = this.chart;\n var isRotated = false;\n var isOpposed = axis.isAxisOpposedPosition;\n var labelRotation = (axis.titleRotation == null ? (isOpposed ? 90 : -90) : axis.titleRotation) % 360;\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + axis.titlePadding) +\n (axis.labelPosition === 'Inside' ? 0 :\n (axis.maxLabelSize.width + axis.multiLevelLabelHeight + this.padding));\n padding = isOpposed ? padding + axis.scrollBarHeight : -padding - axis.scrollBarHeight;\n if ((labelRotation !== -90 && !isOpposed) || (labelRotation !== 90 && isOpposed)) {\n padding += axis.isAxisOpposedPosition ? axis.titleSize.width / 2 + axis.labelPadding :\n -axis.titleSize.width / 2 - axis.labelPadding;\n isRotated = true;\n }\n var x = rect.x + padding;\n var y = void 0;\n var anchor = void 0;\n if (axis.titleStyle.textAlignment === 'Center') {\n anchor = 'middle';\n y = rect.y + rect.height * 0.5;\n }\n else if (axis.titleStyle.textAlignment === 'Near') {\n anchor = axis.opposedPosition ? 'end' : 'start';\n y = rect.height + rect.y;\n }\n else {\n anchor = axis.opposedPosition ? 'start' : 'end';\n y = rect.y;\n }\n var titleSize = (axis.titleSize.height * (axis.titleCollection.length - 1));\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, x, y + (isRotated ? -titleSize : -axis.labelPadding - titleSize), anchor, axis.titleCollection, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')', null, labelRotation);\n var element = textElement(chart.renderer, options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitleFont.color, parent, null, null, null, null, null, null, null, null, chart.enableCanvas, null, chart.themeStyle.axisTitleFont, new ChartLocation(x, y));\n element.setAttribute('aria-hidden', 'true');\n }\n };\n /**\n * xAxis grid line calculation performed here\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {Element} parent parent\n * @param {Rect} rect rect\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisGridLine = function (axis, index, parent, rect) {\n var isLogAxis = axis.valueType === 'Logarithmic';\n var isCategoryAxis = axis.valueType.indexOf('Category') > -1;\n var tempInterval;\n var pointX = 0;\n var majorGrid = '';\n var majorTick = '';\n var minorDirection;\n var isOpposed = axis.isAxisOpposedPosition;\n var tickSize = (isOpposed) ? -axis.majorTickLines.height : axis.majorTickLines.height;\n var axisLineSize = (isOpposed) ? -axis.lineStyle.width * 0.5 : axis.lineStyle.width * 0.5;\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? isOpposed ? -axis.scrollBarHeight :\n axis.scrollBarHeight : 0;\n var ticksbwtLabel = (axis.valueType.indexOf('Category') > -1 && axis.labelPlacement === 'BetweenTicks' && !this.chart.stockChart) ?\n 0.5 : 0;\n var length = axis.visibleLabels.length;\n var isTickInside = axis.tickPosition === 'Inside';\n var ticks = isTickInside ? (rect.y - tickSize - axisLineSize) : (rect.y + tickSize + axisLineSize + scrollBarHeight);\n var chartThemeStyle = this.chart.themeStyle;\n if (axis.valueType.indexOf('Category') > -1 && length > 0 && axis.labelPlacement === 'BetweenTicks' && !this.chart.stockChart) {\n length += 1;\n }\n //Gridlines\n var numericIDs = this.calculateGridLineId(parent, length);\n for (var i = 0; i < length; i++) {\n if (axis.valueType !== 'DateTimeCategory') {\n tempInterval = axis.visibleLabels[i] ? axis.visibleLabels[i].value - ticksbwtLabel\n : (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel;\n }\n else {\n tempInterval = axis.visibleLabels[i] ?\n axis.visibleLabels[i].value - ticksbwtLabel : axis.visibleRange.max;\n }\n pointX = (valueToCoefficient(tempInterval, axis) * rect.width) + rect.x;\n if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n if (inside(tempInterval, axis.visibleRange) || this.isBorder(axis, i, pointX)) {\n if (this.chart.redraw && this.chart.pointsAdded && axis.majorGridLines.width && !this.chart.pointsRemoved && this.chart.chartArea.border.width && !getElement(this.chart.element.id + '_MajorGridLine_' + index + '_' + i)) {\n var pointXValue = (valueToCoefficient(axis.visibleRange.max, axis) * rect.width) + rect.x;\n majorGrid = 'M ' + pointXValue + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height) +\n ' L ' + pointXValue + ' ' + this.seriesClipRect.y;\n this.renderGridLine(axis, index, majorGrid, axis.majorGridLines, '_MajorGridLine_', i, this.element, chartThemeStyle.majorGridLine, axis.majorGridLines.dashArray, (numericIDs['MajorGridLine'] && numericIDs['MajorGridLine'].ids ? numericIDs['MajorGridLine'].ids[i] : null), numericIDs['MajorGridLine'] ? numericIDs['MajorGridLine'].isPointRemoved : false);\n getElement(parent.id).appendChild(this.element.childNodes[this.element.childNodes.length - 1]);\n }\n majorGrid = 'M ' + pointX + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height) +\n ' L ' + pointX + ' ' + this.seriesClipRect.y;\n this.renderGridLine(axis, index, majorGrid, axis.majorGridLines, '_MajorGridLine_', i, this.element, chartThemeStyle.majorGridLine, axis.majorGridLines.dashArray, (numericIDs['MajorGridLine'] && numericIDs['MajorGridLine'].ids ? numericIDs['MajorGridLine'].ids[i] : null), numericIDs['MajorGridLine'] ? numericIDs['MajorGridLine'].isPointRemoved : false);\n }\n majorTick = 'M ' + (pointX) + ' ' + (rect.y + axisLineSize + (isTickInside ? scrollBarHeight : 0))\n + ' L ' + (pointX) + ' ' + ticks;\n this.renderGridLine(axis, index, majorTick, axis.majorTickLines, '_MajorTickLine_', i, parent, chartThemeStyle.majorTickLine, null, (numericIDs['MajorTickLine'] && numericIDs['MajorTickLine'].ids ? numericIDs['MajorTickLine'].ids[i] : null), numericIDs['MajorTickLine'] ? numericIDs['MajorTickLine'].isPointRemoved : false);\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)) {\n if (i === 0 && isZoomSet(axis) && !isLogAxis && !isCategoryAxis) {\n this.renderMinorGridOnZooming(axis, tempInterval, rect, i, index, chartThemeStyle, parent);\n }\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, rect, i);\n this.renderGridLine(axis, index, minorDirection[0], axis.minorGridLines, '_MinorGridLine_', i, this.element, chartThemeStyle.minorGridLine, axis.minorGridLines.dashArray, (numericIDs['MinorGridLine'] && numericIDs['MinorGridLine'].ids ? numericIDs['MinorGridLine'].ids[i] : null), numericIDs['MinorGridLine'] ? numericIDs['MinorGridLine'].isPointRemoved : false);\n this.renderGridLine(axis, index, minorDirection[1], axis.minorTickLines, '_MinorTickLine_', i, parent, chartThemeStyle.minorTickLine, null, (numericIDs['MinorTickLine'] && numericIDs['MinorTickLine'].ids ? numericIDs['MinorTickLine'].ids[i] : null), numericIDs['MinorTickLine'] ? numericIDs['MinorTickLine'].isPointRemoved : false);\n if (i === length - 1 && isZoomSet(axis) && isLogAxis && !isCategoryAxis) {\n this.renderMinorGridOnZooming(axis, (tempInterval + axis.visibleRange.interval), rect, i, index, chartThemeStyle, parent);\n }\n }\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.calculateGridLineId = function (parent, length) {\n var _this = this;\n var numericIDs = {};\n if (this.chart.pointsRemoved) {\n var elementTypes = ['MajorGridLine', 'MajorTickLine', 'MinorGridLine', 'MinorTickLine'];\n elementTypes.forEach(function (type) {\n var parentElement = getElement(parent.id);\n var elements = parentElement.querySelectorAll('[id*=\"_' + type + '_\"]');\n var elementArray = [];\n for (var i = 0; i < elements.length; i++) {\n elementArray.push(elements[i]);\n }\n var len = type === 'MajorGridLine' && _this.chart.chartArea.border.width ? length - 2 : length;\n len = type === 'MinorGridLine' || type === 'MinorTickLine' ? length - 1 : len;\n if (elementArray.length > 0 && elementArray.length > len) {\n var elementsLength = elementArray.length;\n for (var k = 0; k < elementsLength - len; k++) {\n if (elementArray[k]) {\n parentElement.removeChild(elementArray[k]);\n }\n elementArray.shift();\n }\n var numericIds = elementArray.map(function (element) {\n var parts = element.id.split('_');\n return parseInt(parts[parts.length - 1], 10);\n });\n numericIDs[type] = {\n ids: numericIds,\n isPointRemoved: true\n };\n }\n });\n }\n return numericIDs;\n };\n /**\n * To render missing minor grid lines while zooming\n *\n * @param {Axis} axis axis\n * @param {number} tempInterval tempInterval\n * @param {Rect} rect rect\n * @param {number} i i\n * @param {number} index index\n * @param {IThemeStyle} chartThemeStyle chartThemeStyle\n * @param {Element} parent parent\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.renderMinorGridOnZooming = function (axis, tempInterval, rect, i, index, chartThemeStyle, parent) {\n var minorDirection = this.drawAxisMinorLine(axis, tempInterval, rect, i, true);\n this.renderGridLine(axis, index, minorDirection[0], axis.minorGridLines, '_MinorGridLine_', -1, this.element, chartThemeStyle.minorGridLine, axis.minorGridLines.dashArray);\n this.renderGridLine(axis, index, minorDirection[1], axis.minorTickLines, '_MinorTickLine_', -1, parent, chartThemeStyle.minorTickLine);\n };\n /**\n * To calcualte the axis minor line\n *\n * @param {Axis} axis axis\n * @param {number} tempInterval tempInterval\n * @param {Rect} rect rect\n * @param {number} labelIndex labelIndex\n * @param {boolean} isFirstLabel isFirstLabel\n * @returns {string[]} axis minor line path\n */\n CartesianAxisLayoutPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, rect, labelIndex, isFirstLabel) {\n var value = tempInterval;\n var coor = 0;\n var position = 0;\n var range = axis.visibleRange;\n var isTickInside = axis.tickPosition === 'Inside';\n var direction = [];\n var tickSize = axis.isAxisOpposedPosition ? -axis.minorTickLines.height : axis.minorTickLines.height;\n var logStart;\n var logEnd;\n var logInterval = 1;\n var logPosition = 1;\n var ticksX = isTickInside ? (rect.y - tickSize) : (rect.y + tickSize);\n var ticksY = isTickInside ? (rect.x + tickSize) : (rect.x - tickSize);\n var minorGird = '';\n var minorTick = '';\n var isInverse = axis.isAxisInverse;\n if (axis.valueType === 'Logarithmic') {\n logStart = Math.pow(axis.logBase, value - range.interval);\n logEnd = Math.pow(axis.logBase, value);\n logInterval = (logEnd - logStart) / (axis.minorTicksPerInterval + 1);\n logPosition = logStart + logInterval;\n }\n if (axis.orientation === 'Horizontal') {\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, value, labelIndex, isFirstLabel);\n logPosition += logInterval;\n if (inside(value, range)) {\n position = ((value - range.min) / (range.max - range.min));\n position = Math.ceil((isInverse ? (1 - position) : position) * rect.width);\n coor = (Math.floor(position + rect.x));\n minorGird = minorGird.concat('M' + ' ' + coor + ' ' + (this.seriesClipRect.y)\n + 'L ' + coor + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height));\n coor = (Math.floor(position + rect.x));\n minorTick = minorTick.concat('M' + ' ' + coor + ' ' + (rect.y)\n + 'L ' + coor + ' ' + (ticksX + axis.scrollBarHeight));\n }\n }\n }\n else {\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value = this.findLogNumeric(axis, logPosition, value, labelIndex, isFirstLabel);\n if (inside(value, range)) {\n position = ((value - range.min) / (range.max - range.min));\n position = Math.ceil(((isInverse ? (1 - position) : position)) * rect.height) * -1; // For inversed axis\n coor = (Math.floor(position + rect.y + rect.height));\n minorGird = minorGird.concat('M' + ' ' + (this.seriesClipRect.x) + ' ' + coor\n + 'L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + coor + ' ');\n coor = (Math.floor(position + rect.y + rect.height));\n minorTick = minorTick.concat('M' + ' ' + rect.x + ' ' + coor + 'L ' + (ticksY - axis.scrollBarHeight) +\n ' ' + coor + ' ');\n }\n logPosition += logInterval;\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n /**\n * To find the numeric value of the log\n *\n * @param {Axis} axis axis\n * @param {number} logPosition logPosition\n * @param {number} value value\n * @param {number} labelIndex labelIndex\n * @param {boolean} isFirstLabel isFirstLabel\n * @returns {number} value\n */\n CartesianAxisLayoutPanel.prototype.findLogNumeric = function (axis, logPosition, value, labelIndex, isFirstLabel) {\n var range = axis.visibleRange;\n var tempValue;\n if (axis.valueType === 'Logarithmic') {\n value = logBase(logPosition, axis.logBase);\n }\n else if (axis.valueType === 'DateTime') {\n tempValue = axis.dateTimeInterval / (axis.minorTicksPerInterval + 1);\n value = isFirstLabel ? (value - tempValue) : (value + tempValue);\n }\n else if (axis.valueType === 'DateTimeCategory') {\n var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n value += ((axis.visibleLabels[labelIndex + 1] ?\n axis.visibleLabels[labelIndex + 1].value - padding : axis.visibleRange.max) -\n (axis.visibleLabels[labelIndex] ?\n axis.visibleLabels[labelIndex].value - padding : axis.visibleRange.min)) /\n (axis.minorTicksPerInterval + 1);\n }\n else {\n tempValue = range.interval / (axis.minorTicksPerInterval + 1);\n value = isFirstLabel ? (value - tempValue) : (value + tempValue);\n }\n return value;\n };\n /**\n * To render the xAxis Labels\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {Element} parent parent\n * @param {Rect} rect rect\n * @returns {void}\n * @private\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisLabels = function (axis, index, parent, rect) {\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var labelSpace = axis.labelPadding;\n var labelHeight;\n var elementSize;\n var labelPadding;\n var anchor;\n var pixel = 10;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var islabelInside = axis.labelPosition === 'Inside';\n var isOpposed = axis.isAxisOpposedPosition;\n var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n var padding = tickSpace + labelSpace + axis.lineStyle.width * 0.5;\n var angle = axis.angle % 360;\n var isHorizontalAngle = (angle === 0 || angle === -180 || angle === 180);\n var options;\n var labelWidth;\n var isInverse = axis.isAxisInverse;\n var isLeft;\n var previousEnd = isInverse ? (rect.x + rect.width) : rect.x;\n var width = 0;\n var length = axis.visibleLabels.length;\n var intervalLength;\n var label;\n var isAxisBreakLabel;\n var scrollBarHeight = axis.scrollbarSettings.enable || (!islabelInside && isNullOrUndefined(axis.crossesAt)\n && (axis.zoomFactor < 1 || axis.zoomPosition > 0)) ? axis.scrollBarHeight : 0;\n var newPoints = [];\n var isRotatedLabelIntersect = false;\n var textPoints = [];\n var rotatedLabelSize = new Size(0, 0);\n padding += (angle === 90 || angle === 270 || angle === -90 || angle === -270) ? (islabelInside ? 5 : -5) : 0;\n var isLabelUnderAxisLine = ((!isOpposed && !islabelInside) || (isOpposed && islabelInside));\n var axislabelElement = getElement(chart.element.id + 'AxisLabels' + index);\n var pointsRemoved = this.removeAxisLabelElements(axis, axislabelElement);\n var isEndAnchor = isLabelUnderAxisLine ?\n ((360 >= angle && angle >= 180) || (-1 >= angle && angle >= -180)) :\n ((1 <= angle && angle <= 180) || (-181 >= angle && angle >= -360));\n for (var i = 0, len = length; i < len; i++) {\n label = axis.visibleLabels[i];\n isAxisBreakLabel = isBreakLabel(label.originalText) || (axis.labelIntersectAction === 'Wrap' && label.text.length > 1);\n pointX = (valueToCoefficient(label.value, axis) * rect.width) + rect.x;\n elementSize = label.size;\n intervalLength = rect.width / length;\n labelWidth = isAxisBreakLabel ? label.breakLabelSize.width : elementSize.width;\n width = ((axis.labelIntersectAction === 'Trim' || axis.labelIntersectAction === 'Wrap') && angle === 0 &&\n labelWidth > intervalLength) ? intervalLength : labelWidth;\n labelHeight = elementSize.height / 4;\n pointX -= (isAxisBreakLabel || angle !== 0) ? 0 : (width / 2);\n // label X value adjustment for label rotation (Start)\n if (angle !== 0) {\n if (isAxisBreakLabel) {\n pointX -= axis.lineBreakAlignment === 'Left' ? (label.breakLabelSize.width / 2) : axis.lineBreakAlignment === 'Right' ?\n -(label.breakLabelSize.width / 2) : 0;\n }\n else {\n pointX -= (angle === -90 || angle === 270 ? -labelHeight : (angle === 90 || angle === -270) ? labelHeight : 0);\n }\n }\n // label X value adjustment for label rotation (End)\n if (axis.labelStyle.textAlignment === 'Far') {\n pointX = pointX + width - pixel;\n }\n else if (axis.labelStyle.textAlignment === 'Near') {\n pointX = pointX - width + pixel;\n }\n // For line break label alignment like left, right & center in angle 0\n if (isAxisBreakLabel && axis.lineBreakAlignment !== 'Center' && angle === 0) {\n pointX += axis.lineBreakAlignment === 'Left' ? -(width / 2) : (width / 2);\n }\n var paddingForBreakLabel = isAxisBreakLabel ?\n (isHorizontalAngle ? (axis.opposedPosition || islabelInside ? 0 : elementSize.height) :\n (label.breakLabelSize.width / 2)) : 0;\n padding = isAxisBreakLabel ? (tickSpace + labelSpace + axis.lineStyle.width * 0.5) : padding;\n // label Y value adjustment (Start)\n if (islabelInside && angle) {\n if (isAxisBreakLabel) {\n pointY = isOpposed ? (rect.y + padding + (paddingForBreakLabel)) : (rect.y - padding - (paddingForBreakLabel));\n }\n else {\n pointY = isOpposed ? (rect.y + padding + labelHeight) : (rect.y - padding - labelHeight);\n }\n }\n else {\n if (isAxisBreakLabel) {\n labelPadding = !isLabelUnderAxisLine ? -(padding + scrollBarHeight + (paddingForBreakLabel)) :\n padding + scrollBarHeight + (angle ? paddingForBreakLabel : (3 * labelHeight));\n }\n else {\n labelPadding = !isLabelUnderAxisLine ?\n -(padding + scrollBarHeight + (angle ? labelHeight : (label.index > 1 ? (2 * labelHeight) : 0))) :\n padding + scrollBarHeight + ((angle ? 1 : 3) * labelHeight);\n }\n pointY = (rect.y + (labelPadding * label.index));\n }\n // label Y value adjustment (End)\n if (isAxisBreakLabel) {\n anchor = this.getAnchor(axis); // for break label self alignment\n }\n else {\n anchor = (chart.enableRtl) ? ((isEndAnchor) ? '' : 'end') : (chart.isRtlEnabled || isEndAnchor) ? 'end' : '';\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, anchor);\n options.id = pointsRemoved && axislabelElement &&\n axislabelElement.children[i] ? axislabelElement.children[i].id : options.id;\n if (angle !== 0) {\n rotatedLabelSize = rotateTextSize(label.labelStyle, label.originalText, angle, chart, chart.themeStyle.axisLabelFont);\n isLeft = ((angle < 0 && angle > -90) || (angle < -180 && angle > -270) ||\n (angle > 90 && angle < 180) || (angle > 270 && angle < 360));\n }\n if (axis.edgeLabelPlacement) {\n switch (axis.edgeLabelPlacement) {\n case 'None':\n break;\n case 'Hide':\n if (((i === 0 || (isInverse && i === len - 1)) && options.x < rect.x) ||\n ((i === len - 1 || (isInverse && i === 0)) &&\n (options.x + (angle === 0 ? width : rotatedLabelSize.width) > rect.x + rect.width))) {\n continue;\n }\n break;\n case 'Shift':\n if ((i === 0 || (isInverse && i === len - 1)) && (options.x < rect.x || (angle !== 0 && isLeft && options.x - rotatedLabelSize.width <= rect.x) || (axis.lineBreakAlignment === 'Center' && options.x - (label.size.width / label.text.length) / 2 < rect.x && angle === 0))) {\n intervalLength -= (rect.x - options.x);\n if (anchor === '' && !isInverse && angle === 0) {\n if (options.x <= 0) {\n pointX = options.x = 0;\n }\n else {\n pointX = options.x;\n }\n intervalLength = rect.width / length;\n }\n else if (isLeft && angle !== 0) {\n intervalLength = rect.width / length;\n if (rect.x + intervalLength > options.x + rotatedLabelSize.width) {\n options.x = pointX = rect.x + padding;\n }\n else {\n options.x = pointX = rect.x + intervalLength - padding;\n }\n }\n else if (isAxisBreakLabel && axis.lineBreakAlignment === 'Center' && axis.labelPlacement === 'OnTicks' && angle === 0) {\n var maxWidth = 0;\n for (var i_1 = 0; i_1 < label.text.length; i_1++) {\n var breakLabelWidth = measureText(label.text[i_1], axis.labelStyle, chart.themeStyle.axisLabelFont).width;\n if (breakLabelWidth > maxWidth) {\n maxWidth = breakLabelWidth;\n }\n }\n options.x = pointX = rect.x + maxWidth / 2;\n }\n else if (!(anchor === 'start' && options.x > 0)) {\n options.x = pointX = !isHorizontalAngle ? rect.x + padding : rect.x;\n }\n }\n else if ((i === len - 1 || (isInverse && i === 0)) && (((options.x + width) > rect.x + rect.width && anchor !== 'end' && angle === 0) || (angle !== 0 && !isLeft && (options.x + rotatedLabelSize.width) > rect.x + rect.width) || (anchor === 'end' && options.x > rect.x + rect.width))) {\n if (elementSize.width > intervalLength && axis.labelIntersectAction === 'Trim' && angle === 0) {\n intervalLength -= (options.x + width - (rect.x + rect.width));\n }\n else if (angle !== 0) {\n if (rotatedLabelSize.width < intervalLength) {\n intervalLength = rotatedLabelSize.width;\n }\n }\n else {\n intervalLength = width;\n }\n if (angle !== 0) {\n options.x = pointX = rect.x + rect.width - intervalLength + padding;\n }\n else {\n options.x = pointX = !isHorizontalAngle ? rect.x + rect.width - intervalLength / 2 :\n rect.x + rect.width - intervalLength;\n }\n }\n break;\n }\n }\n options.text = this.getLabelText(label, axis, intervalLength);\n options.labelRotation = angle;\n // ------- Hide Calculation (Start) -------------\n // Currect label actual start value (Start)\n var xValue = void 0;\n var xValue2 = void 0;\n if (isAxisBreakLabel && angle === 0) {\n if (axis.lineBreakAlignment === 'Right') {\n xValue = (options.x - width);\n xValue2 = options.x;\n }\n else if (axis.lineBreakAlignment === 'Center') {\n xValue = (options.x - (width / 2));\n xValue2 = options.x + (width / 2);\n }\n else {\n xValue = options.x;\n xValue2 = options.x + width;\n }\n }\n else {\n xValue = options.x;\n xValue2 = options.x + width;\n }\n // Currect label actual start value (End)\n if (angle === 0 && axis.labelIntersectAction === 'Hide' && i !== 0 &&\n (!isInverse ? xValue <= previousEnd : xValue2 >= previousEnd)) {\n continue;\n }\n // Previous label actual end value (Start)\n if (isAxisBreakLabel) {\n if (axis.lineBreakAlignment === 'Right') {\n previousEnd = isInverse ? (options.x - width) : options.x;\n }\n else if (axis.lineBreakAlignment === 'Center') {\n previousEnd = isInverse ? (options.x - (width / 2)) : options.x + (width / 2);\n }\n else {\n previousEnd = isInverse ? options.x : options.x + width;\n }\n }\n else {\n previousEnd = isInverse ? options.x : options.x + width;\n }\n // Previous label actual end value (End)\n // ------- Hide Calculation (End) -------------\n // label Rotataion calculation (Start)\n if (angle !== 0) {\n var height = void 0;\n var rect_1 = void 0;\n if (isAxisBreakLabel) {\n var xAdjustment = 0;\n var yAdjustment = 0;\n height = (label.breakLabelSize.height);\n yAdjustment = (label.breakLabelSize.height) - 4; // 4 for label bound correction\n // xAdjustment (Start)\n if (axis.lineBreakAlignment === 'Center') {\n xAdjustment = -(label.breakLabelSize.width / 2);\n }\n else if (axis.lineBreakAlignment === 'Right') {\n xAdjustment = -label.breakLabelSize.width;\n }\n // xAdjustment (End)\n if (isLabelUnderAxisLine) {\n yAdjustment = (label.breakLabelSize.height) / (options.text.length + 1);\n }\n rect_1 = new Rect(options.x + xAdjustment, options.y - (yAdjustment), label.breakLabelSize.width, height);\n }\n else {\n height = (pointY) - (options.y - ((label.size.height / 2)));\n rect_1 = new Rect(options.x, options.y - ((label.size.height / 2) - 5), label.size.width, height);\n }\n var rectCoordinates = this.getRectanglePoints(rect_1);\n var rectCenterX = isAxisBreakLabel ? rect_1.x + (rect_1.width / 2) : pointX;\n var rectCenterY = isAxisBreakLabel ? rect_1.y + (rect_1.height / 2) : (pointY - (height / 2));\n if (isAxisBreakLabel) {\n options.transform = 'rotate(' + angle + ',' + rectCenterX + ',' + rectCenterY + ')';\n }\n else {\n options.transform = 'rotate(' + angle + ',' + pointX + ',' + pointY + ')';\n }\n newPoints.push(getRotatedRectangleCoordinates(rectCoordinates, rectCenterX, rectCenterY, angle));\n isRotatedLabelIntersect = false;\n if (axis.labelIntersectAction !== 'None') {\n for (var index_1 = i; index_1 > 0; index_1--) {\n if (newPoints[i] && newPoints[index_1 - 1] &&\n isRotatedRectIntersect(newPoints[i], newPoints[index_1 - 1])) {\n isRotatedLabelIntersect = true;\n newPoints[i] = null;\n break;\n }\n }\n }\n var rotateAngle = ((angle > 0 && angle < 90) || (angle > 180 && angle < 270) ||\n (angle < -90 && angle > -180) || (angle < -270 && angle > -360));\n var textRect = new Rect(options.x, options.y - (elementSize.height / 2 + padding / 2), label.size.width, height);\n var textRectCoordinates = this.getRectanglePoints(textRect);\n var rectPoints = [];\n rectPoints.push(new ChartLocation(rotateAngle ? this.chart.availableSize.width : this.padding, axis.rect.y));\n rectPoints.push(new ChartLocation(rotateAngle ? this.chart.availableSize.width :\n this.padding, axis.rect.y + axis.maxLabelSize.height));\n textPoints.push(getRotatedRectangleCoordinates(textRectCoordinates, rectCenterX, rectCenterY, angle));\n var newRect = new Rect(0, axis.rect.y, this.chart.availableSize.width, axis.maxLabelSize.height * 2);\n for (var k = 0; k < textPoints[i].length; k++) {\n if (!axis.opposedPosition && !withInBounds(textPoints[i][k].x, textPoints[i][k].y, newRect) && typeof options.text === 'string') {\n var interSectPoint = this.calculateIntersection(textPoints[i][0], textPoints[i][1], rectPoints[0], rectPoints[1]);\n var rectPoint1 = rotateAngle ? this.chart.availableSize.width - pointX : pointX;\n var rectPoint2 = interSectPoint.y - axis.rect.y;\n var trimValue = Math.sqrt((rectPoint1 * rectPoint1) + (rectPoint2 * rectPoint2));\n options.text = textTrim(trimValue, label.text, label.labelStyle, chart.enableRtl, chart.themeStyle.axisLabelFont);\n }\n }\n }\n if (chart.pointsAdded && !chart.pointsRemoved && !getElement(options.id)) {\n var optionsX = options.x;\n options.x = rect.width + (rect.width / (i ? i : 1));\n var transform = options.transform;\n options.transform = angle ? 'rotate(' + angle + ',' + options.x + ',' + parseFloat(options.transform.split(',')[2]) + ')' : '';\n textElement(chart.renderer, options, label.labelStyle, label.labelStyle.color || chart.themeStyle.axisLabelFont.color, labelElement, (axis.isAxisOpposedPosition !== (axis.labelPosition === 'Inside')), chart.redraw, true, null, null, null, label.size, isRotatedLabelIntersect, chart.enableCanvas, null, chart.themeStyle.axisLabelFont);\n options.x = optionsX;\n options.transform = transform;\n }\n // label Rotataion calculation (End)\n var element = textElement(chart.renderer, options, label.labelStyle, label.labelStyle.color || chart.themeStyle.axisLabelFont.color, labelElement, (axis.isAxisOpposedPosition !== (axis.labelPosition === 'Inside')), chart.redraw, true, null, chart.duration, null, label.size, isRotatedLabelIntersect, chart.enableCanvas, null, chart.themeStyle.axisLabelFont, new ChartLocation(parseFloat(options.transform.split(',')[1]), parseFloat(options.transform.split(',')[2])));\n if (pointsRemoved) {\n element.id = chart.element.id + index + '_AxisLabel_' + i;\n }\n }\n if (!this.chart.enableCanvas) {\n if (!chart.delayRedraw) {\n parent.appendChild(labelElement);\n }\n else if (axis.visible && axis.internalVisibility) {\n this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n }\n }\n };\n CartesianAxisLayoutPanel.prototype.removeAxisLabelElements = function (axis, axislabelElement) {\n if (this.chart.pointsRemoved && axislabelElement && axislabelElement.childNodes.length) {\n var pointsRemoved = false;\n if (axis.valueType.indexOf('Category') > -1) {\n var visibleLabelTexts_1 = [];\n axis.visibleLabels.map(function (label) {\n if (typeof label.text !== 'string') {\n visibleLabelTexts_1.push(label.text.join(''));\n }\n else {\n visibleLabelTexts_1.push(label.text);\n }\n });\n for (var i = axislabelElement.childNodes.length - 1; i >= 0; i--) {\n var childNode = axislabelElement.childNodes[i];\n if (visibleLabelTexts_1.indexOf(childNode.textContent.trim()) === -1) {\n axislabelElement.removeChild(childNode);\n pointsRemoved = true;\n }\n }\n }\n else if (axislabelElement.childNodes.length > axis.visibleLabels.length) {\n for (var j = 0; j < axislabelElement.childNodes.length - axis.visibleLabels.length; j++) {\n axislabelElement.removeChild(axislabelElement.childNodes[j]);\n pointsRemoved = true;\n }\n }\n return pointsRemoved;\n }\n return false;\n };\n CartesianAxisLayoutPanel.prototype.calculateIntersection = function (p1, p2, p3, p4) {\n var c2x = p3.x - p4.x;\n var c3x = p1.x - p2.x;\n var c2y = p3.y - p4.y;\n var c3y = p1.y - p2.y;\n var d = c3x * c2y - c3y * c2x;\n var u1 = p1.x * p2.y - p1.y * p2.x;\n var u4 = p3.x * p4.y - p3.y * p4.x;\n var px = (u1 * c2x - c3x * u4) / d;\n var py = (u1 * c2y - c3y * u4) / d;\n var p = { x: px, y: py };\n return p;\n };\n /**\n * To get text anchor value for line break labels.\n *\n * @param {Axis} axis axis model\n * @returns {string} returns text anchor\n */\n CartesianAxisLayoutPanel.prototype.getAnchor = function (axis) {\n return (axis.lineBreakAlignment === 'Center' ? 'middle' : (this.chart.enableRtl) ? (axis.lineBreakAlignment === 'Left' ? 'end' : 'start') : (axis.lineBreakAlignment === 'Left' ? 'start' : 'end'));\n };\n /**\n * Get rect coordinates\n *\n * @param {Rect} rect rect\n * @returns {ChartLocation[]} rectangle points\n */\n CartesianAxisLayoutPanel.prototype.getRectanglePoints = function (rect) {\n var point1 = new ChartLocation(rect.x, rect.y);\n var point2 = new ChartLocation(rect.x + rect.width, rect.y);\n var point3 = new ChartLocation(rect.x + rect.width, rect.y + rect.height);\n var point4 = new ChartLocation(rect.x, rect.y + rect.height);\n return [point1, point2, point3, point4];\n };\n /**\n * To get axis label text\n *\n * @param {VisibleLabels} label label\n * @param {Axis} axis axis\n * @param {number} intervalLength intervalLength\n * @returns {string | string[]} label or label collection\n */\n CartesianAxisLayoutPanel.prototype.getLabelText = function (label, axis, intervalLength) {\n if (isBreakLabel(label.originalText)) {\n var result = [];\n var str = void 0;\n for (var index = 0; index < label.text.length; index++) {\n str = this.findAxisLabel(axis, label.text[index], intervalLength);\n result.push(str);\n }\n return result;\n }\n else {\n return this.findAxisLabel(axis, label.text, intervalLength);\n }\n };\n /**\n * To render the x-axis label border.\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {Element} parent parent\n * @param {Rect} axisRect axisRect\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisBorder = function (axis, index, parent, axisRect) {\n if (axis.border.width > 0) {\n var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n var isOpposed = axis.isAxisOpposedPosition;\n var startX = void 0;\n var startY = axisRect.y + ((isOpposed ? -1 : 1) * scrollBarHeight);\n var padding = 10;\n var pointX = void 0;\n var gap = (axisRect.width / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n : axis.visibleRange.interval);\n var endX = void 0;\n var length_2 = axis.maxLabelSize.height +\n ((axis.tickPosition === axis.labelPosition) ? axis.majorTickLines.height : 0);\n var labelBorder = '';\n var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n var endY = ((isOpposed && axis.labelPosition === 'Inside') ||\n (!isOpposed && axis.labelPosition === 'Outside')) ?\n (axisRect.y + length_2 + padding + scrollBarHeight) : (axisRect.y - length_2 - padding - scrollBarHeight);\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n pointX = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n pointX = (axis.isAxisInverse ? (1 - pointX) : pointX) * axisRect.width;\n if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n startX = pointX + axisRect.x;\n endX = pointX + (gap) + axisRect.x;\n }\n else {\n startX = pointX - gap * 0.5 + axisRect.x;\n endX = pointX + gap * 0.5 + axisRect.x;\n }\n switch (axis.border.type) {\n case 'Rectangle':\n case 'WithoutTopBorder':\n if (startX < axisRect.x && axis.labelPlacement !== 'OnTicks') {\n labelBorder += ('M' + ' ' + axisRect.x + ' ' + endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n }\n else if (Math.floor(endX) > axisRect.width + axisRect.x && !(axis.visibleLabels.length === 1) &&\n !(i === axis.visibleLabels.length - 1)) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'L' + ' ' + (axisRect.width + axisRect.x) + ' ' + endY + ' ');\n }\n else {\n startX = (i === 0 && axis.labelPlacement === 'OnTicks') ? axisRect.x : startX;\n endX = ((i === axis.visibleLabels.length - 1) && axis.labelPlacement === 'OnTicks') ? endX - gap * 0.5 : endX;\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' +\n endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n if (i === 0) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'M ' + startX + ' ' + endY + ' L ' + (axisRect.x) + ' ' + endY);\n }\n if (i === axis.visibleLabels.length - 1) {\n labelBorder += ('M' + ' ' + endX + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + endY + ' L ' + (axisRect.width + axisRect.x) + ' ' + endY);\n }\n }\n break;\n case 'WithoutTopandBottomBorder':\n if (!(startX < axisRect.x) && !(Math.floor(endX) > axisRect.width + axisRect.x)) {\n labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n 'M ' + endX + ' ' + startY + ' L ' + endX + ' ' + endY);\n }\n break;\n }\n }\n labelBorder += (axis.border.type === 'Rectangle' ? ('M ' + ' ' + axisRect.x + ' ' + startY + 'L' + ' ' +\n (axisRect.x + axisRect.width) + ' ' + startY) : '');\n if (labelBorder !== '') {\n this.createAxisBorderElement(axis, index, labelBorder, parent);\n }\n }\n for (var i = 0; i < this.chart.visibleSeries.length; i++) {\n if (this.chart.multiLevelLabelModule && axis.multiLevelLabels.length > 0 && this.chart.visibleSeries[i].visible) {\n this.chart.multiLevelLabelModule.renderXAxisMultiLevelLabels(axis, index, parent, axisRect);\n break;\n }\n }\n };\n /**\n * To create border element of the axis\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {string} labelBorder labelBorder\n * @param {Element} parent parent\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.createAxisBorderElement = function (axis, index, labelBorder, parent) {\n var element = getElement(this.chart.element.id + '_BorderLine_' + index);\n var direction = element ? element.getAttribute('d') : '';\n var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + '_BorderLine_' + index, 'transparent', axis.border.width, axis.border.color || this.chart.themeStyle.axisLine, 1, '', labelBorder));\n borderElement.style.pointerEvents = 'none';\n appendChildElement(this.chart.enableCanvas, parent, borderElement, this.chart.redraw, false, 'x', 'y', null, direction, true, null, null, this.chart.duration);\n };\n /**\n * To find the axis label of the intersect action\n *\n * @param {Axis} axis axis\n * @param {string} label label\n * @param {number} width width\n * @returns {string} label\n */\n CartesianAxisLayoutPanel.prototype.findAxisLabel = function (axis, label, width) {\n return (axis.labelIntersectAction === 'Trim' ?\n ((axis.angle % 360 === 0 && !axis.enableTrim) ? textTrim(width, label, axis.labelStyle, this.chart.enableRtl, this.chart.themeStyle.axisLabelFont) : label) : label);\n };\n /**\n * X-Axis Title function performed\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {Element} parent parent\n * @param {Rect} rect rect\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.drawXAxisTitle = function (axis, index, parent, rect) {\n if (axis.title) {\n var chart = this.chart;\n var elementSize = measureText(axis.title, axis.titleStyle, this.chart.themeStyle.axisTitleFont);\n var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + axis.titlePadding) +\n (axis.labelPosition === 'Inside' ? 0 :\n axis.maxLabelSize.height + axis.multiLevelLabelHeight + axis.labelPadding);\n var titleSize = (axis.titleSize.height * (axis.titleCollection.length - 1));\n padding = axis.isAxisOpposedPosition ? -(padding + elementSize.height / 4 + scrollBarHeight + titleSize) : (padding + (3 *\n elementSize.height / 4) + scrollBarHeight);\n var labelRotation = axis.titleRotation ? axis.titleRotation : 0;\n var x = void 0;\n var y = rect.y + padding;\n var anchor = void 0;\n if (axis.titleStyle.textAlignment === 'Center') {\n anchor = 'middle';\n x = rect.x + rect.width * 0.5;\n }\n else if (axis.titleStyle.textAlignment === 'Near') {\n anchor = 'start';\n x = rect.x;\n }\n else {\n anchor = 'end';\n x = rect.x + rect.width;\n }\n if (labelRotation !== 0) {\n y += axis.opposedPosition ? -(axis.titleSize.height / 2 + elementSize.height / 4) :\n axis.titleSize.height / 2 - elementSize.height / 4;\n }\n var options = new TextOption(chart.element.id + '_AxisTitle_' + index, x, y, anchor, axis.titleCollection, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')', null, labelRotation);\n var element = textElement(chart.renderer, options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitleFont.color, parent, null, chart.redraw, chart.redraw, null, null, null, null, null, chart.enableCanvas, null, chart.themeStyle.axisTitleFont, new ChartLocation(x, y));\n element.setAttribute('aria-hidden', 'true');\n }\n };\n /**\n * To render the axis grid and tick lines(Both Major and Minor)\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {string} gridDirection gridDirection\n * @param {MajorTickLinesModel | MinorTickLinesModel | MajorGridLinesModel | MinorGridLinesModel} gridModel gridModel\n * @param {string} gridId gridId\n * @param {number} gridIndex gridIndex\n * @param {Element} parent parent\n * @param {string} themeColor themeColor\n * @param {string} dashArray dashArray\n * @param {number} removeIndex removeIndex\n * @param {boolean} isRemoved isRemoved\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.renderGridLine = function (axis, index, gridDirection, gridModel, gridId, gridIndex, parent, themeColor, dashArray, removeIndex, isRemoved) {\n if (dashArray === void 0) { dashArray = null; }\n if (removeIndex === void 0) { removeIndex = null; }\n if (isRemoved === void 0) { isRemoved = false; }\n var chart = this.chart;\n var direction;\n var element;\n if (gridModel.width > 0 && axis.visible && axis.internalVisibility && gridDirection) {\n element = getElement(chart.element.id + gridId + index + '_' + (isRemoved ? removeIndex : gridIndex));\n direction = element ? element.getAttribute('d') : null;\n element = null;\n this.htmlObject = chart.renderer.drawPath(new PathOption(chart.element.id + gridId + index + '_' + (isRemoved ? removeIndex : gridIndex), 'transparent', gridModel.width, gridModel.color || themeColor, null, dashArray, gridDirection));\n appendChildElement(chart.enableCanvas, parent, this.htmlObject, chart.redraw, true, 'x', 'y', null, direction, true, null, null, chart.duration);\n if (isRemoved) {\n this.htmlObject.id = chart.element.id + gridId + index + '_' + gridIndex;\n }\n }\n };\n /**\n * To Find the parent node of the axis\n *\n * @param {string} elementId elementId\n * @param {Element} label label\n * @param {number} index index\n * @returns {Element} parent node of the axis\n */\n CartesianAxisLayoutPanel.prototype.findParentNode = function (elementId, label, index) {\n if (document.getElementById(elementId + 'AxisGroup' + index + 'Inside').contains(document.getElementById(label.id))) {\n return document.getElementById(elementId + 'AxisGroup' + index + 'Inside');\n }\n else {\n return document.getElementById(elementId + 'AxisGroup' + index + 'Outside');\n }\n };\n /**\n * Create Zooming Labels Function Called here\n *\n * @param {Chart} chart chart\n * @param {Element} labelElement labelElement\n * @param {Axis} axis axis\n * @param {number} index index\n * @param {Rect} rect rect\n * @returns {void}\n */\n CartesianAxisLayoutPanel.prototype.createZoomingLabel = function (chart, labelElement, axis, index, rect) {\n var parentNode = this.findParentNode(chart.element.id, labelElement, index);\n labelElement.setAttribute('opacity', '0.3');\n var zoomElement = chart.renderer.createGroup({\n id: chart.element.id + 'AxisLabels_Zoom' + index\n });\n zoomElement = createZoomingLabels(chart, axis, zoomElement, index, axis.orientation === 'Vertical', rect);\n parentNode.replaceChild(labelElement, document.getElementById(labelElement.id));\n if (getElement(chart.element.id + 'AxisLabels_Zoom' + index)) {\n parentNode.replaceChild(zoomElement, document.getElementById(zoomElement.id));\n }\n else {\n parentNode.appendChild(zoomElement);\n }\n };\n return CartesianAxisLayoutPanel;\n}());\nexport { CartesianAxisLayoutPanel };\n","import { withInBounds, PointData, getValueXByPoint, getValueYByPoint, sort } from '../../common/utils/helper';\nimport { Rect } from '@syncfusion/ej2-svg-base';\n/**\n * To get the data on mouse move.\n *\n * @private\n */\nvar ChartData = /** @class */ (function () {\n /**\n * Constructor for the data.\n *\n * @private\n */\n function ChartData(chart) {\n /** @private */\n this.currentPoints = [];\n /** @private */\n this.previousPoints = [];\n this.insideRegion = false;\n this.commonXvalues = [];\n this.chart = chart;\n this.lierIndex = 0;\n }\n /**\n * Method to get the Data.\n *\n * @private\n */\n ChartData.prototype.getData = function () {\n var chart = this.chart;\n var point = null;\n var series = null;\n var width;\n var height;\n var mouseX;\n var mouseY;\n for (var len = chart.visibleSeries.length, i = len - 1; i >= 0; i--) {\n series = chart.visibleSeries[i];\n width = (series.type === 'Scatter' || series.drawType === 'Scatter' || (series.marker.visible))\n ? (series.marker.height + 5) / 2 : 0;\n height = (series.type === 'Scatter' || series.drawType === 'Scatter' || (series.marker.visible))\n ? (series.marker.width + 5) / 2 : 0;\n mouseX = chart.mouseX;\n mouseY = chart.mouseY;\n if (series.dragSettings.enable && series.isRectSeries) {\n if (!(series.type === 'Bar' && chart.isTransposed) && (chart.isTransposed || series.type === 'Bar')) {\n var markerWidth = series.marker.width / 2;\n mouseX = series.yAxis.isAxisInverse ? mouseX + markerWidth : mouseX - markerWidth;\n }\n else {\n var markerHeight = series.marker.height / 2;\n mouseY = series.yAxis.isAxisInverse ? mouseY - markerHeight : mouseY + markerHeight;\n }\n }\n if (series.visible && withInBounds(mouseX, mouseY, series.clipRect, width, height)) {\n point = this.getRectPoint(series, series.clipRect, mouseX, mouseY);\n }\n if (point) {\n return new PointData(point, series);\n }\n }\n return new PointData(point, series);\n };\n ChartData.prototype.isSelected = function (chart) {\n return ((chart.selectionMode.indexOf('Drag') > -1 || chart.selectionMode.indexOf('Lasso') > -1) && chart.selectionModule &&\n chart.selectionModule.rectPoints !== null);\n };\n ChartData.prototype.getRectPoint = function (series, rect, x, y) {\n var chart = this.chart;\n var fromCenterX;\n var fromCenterY;\n var clickAngle;\n var arcAngle = 0;\n var startAngle;\n var endAngle;\n var distanceFromCenter;\n if (chart.isScrolling) {\n return null;\n }\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.regionData) {\n if (!point.regions || !point.regions.length) {\n continue;\n }\n }\n if (point.regionData && this.chart.chartAreaType === 'PolarRadar' && series.drawType.indexOf('Column') > -1) {\n fromCenterX = x - (series.clipRect.width / 2 + series.clipRect.x);\n fromCenterY = y - (series.clipRect.height / 2 + series.clipRect.y);\n arcAngle = 2 * Math.PI * (point.regionData.currentXPosition < 0 ? 1 + point.regionData.currentXPosition\n : point.regionData.currentXPosition);\n clickAngle = (Math.atan2(fromCenterY, fromCenterX) + 0.5 * Math.PI - arcAngle) % (2 * Math.PI);\n clickAngle = clickAngle < 0 ? 2 * Math.PI + clickAngle : clickAngle;\n clickAngle = clickAngle + 2 * Math.PI * series.chart.primaryXAxis.startAngle;\n startAngle = point.regionData.startAngle;\n startAngle -= arcAngle;\n startAngle = startAngle < 0 ? 2 * Math.PI + startAngle : startAngle;\n endAngle = point.regionData.endAngle;\n endAngle -= arcAngle;\n endAngle = endAngle < 0 ? 2 * Math.PI + endAngle : endAngle;\n distanceFromCenter = Math.sqrt(Math.pow(Math.abs(fromCenterX), 2) + Math.pow(Math.abs(fromCenterY), 2));\n if (clickAngle >= startAngle && clickAngle <= endAngle &&\n (((distanceFromCenter >= point.regionData.innerRadius && distanceFromCenter <= point.regionData.radius) ||\n (distanceFromCenter <= point.regionData.innerRadius && distanceFromCenter >= point.regionData.radius))\n && distanceFromCenter <= series.chart.radius)) {\n return point;\n }\n }\n if ((series.dragSettings.enable && series.isRectSeries) || (series.isRectSeries && series.marker.visible && this.chart.chartAreaType !== 'PolarRadar')) {\n if (this.isPointInThresholdRegion(x, y, point, rect, series)) {\n this.insideRegion = true;\n return point;\n }\n }\n if (!this.insideRegion && this.checkRegionContainsPoint(point.regions, rect, x, y)) {\n return point;\n }\n else if (this.insideRegion && this.checkRegionContainsPoint(point.regions, rect, x, y)) {\n return point;\n }\n }\n return null;\n };\n /**\n * Checks if the given point is contained within any of the regions defined by the array of rectangles.\n *\n * @param {Rect[]} regionRect - The array of rectangles defining the regions.\n * @param {Rect} rect - The rectangle to check against the regions.\n * @param {number} x - The x-coordinate of the point.\n * @param {number} y - The y-coordinate of the point.\n * @returns {boolean} - True if the point is contained within any of the regions, otherwise false.\n */\n ChartData.prototype.checkRegionContainsPoint = function (regionRect, rect, x, y) {\n var _this = this;\n return regionRect.some(function (region, index) {\n _this.lierIndex = index;\n return withInBounds(x, y, new Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y, region.width, region.height));\n });\n };\n /**\n * Checks if the given point is within the threshold region of a data point.\n *\n * @param {number} x - The x-coordinate of the point to check.\n * @param {number} y - The y-coordinate of the point to check.\n * @param {Points} point - The data point.\n * @param {Rect} rect - The rectangle representing the threshold region.\n * @param {Series} series - The series to which the data point belongs.\n * @returns {boolean} - True if the point is within the threshold region, otherwise false.\n */\n ChartData.prototype.isPointInThresholdRegion = function (x, y, point, rect, series) {\n var _this = this;\n var isBar = series.type === 'Bar';\n var isInversed = series.yAxis.isAxisInverse;\n var isTransposed = series.chart.isTransposed;\n var heightValue = 10;\n var yValue = 0;\n var xValue = 0;\n var width;\n var height = width = 2 * heightValue;\n if (isInversed && isTransposed) {\n if (isBar) {\n yValue = point.regions[0].height - heightValue;\n width = point.regions[0].width;\n }\n else {\n xValue = -heightValue;\n height = point.regions[0].height;\n }\n }\n else if (isInversed || point.yValue < 0) {\n if (isBar) {\n xValue = -heightValue;\n height = point.regions[0].height;\n }\n else {\n yValue = point.regions[0].height - heightValue;\n width = point.regions[0].width;\n }\n }\n else if (isTransposed) {\n if (isBar) {\n yValue = -heightValue;\n width = point.regions[0].width;\n }\n else {\n xValue = point.regions[0].width - heightValue;\n height = point.regions[0].height;\n }\n }\n else {\n if (isBar) {\n xValue = point.regions[0].width - heightValue;\n height = point.regions[0].height;\n }\n else {\n yValue = -heightValue;\n width = point.regions[0].width;\n }\n }\n return point.regions.some(function (region) {\n return withInBounds(x, y, new Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x + xValue, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y + yValue, width, height));\n });\n };\n /**\n * Gets the index of the closest data point to the given value in the series.\n *\n * @param {Series} series - The series.\n * @param {number} value - The value to which the closest data point is sought.\n * @param {number[]} [xvalues] - The x-values of the data points.\n * @returns {number} - The index of the closest data point.\n */\n ChartData.prototype.getClosest = function (series, value, xvalues) {\n var closest;\n var data;\n var xData = xvalues ? xvalues : series.xData;\n var xLength = xData.length;\n var leftSideNearest = 0.5;\n var rightSideNearest = 0.5;\n if (series.xAxis.valueType === 'DateTime' && series.points.length === 1) {\n leftSideNearest = series.xAxis.visibleRange.min;\n rightSideNearest = series.xAxis.visibleRange.max;\n for (var index = 0; index < series.chart.visibleSeries.length; index++) {\n var visibleSeries = series.chart.visibleSeries[index];\n if (visibleSeries.xMin >= leftSideNearest && visibleSeries.xMin < series.xMin) {\n leftSideNearest = visibleSeries.xMin + 0.1;\n }\n if (visibleSeries.xMax <= rightSideNearest && visibleSeries.xMax > series.xMax) {\n rightSideNearest = visibleSeries.xMax - 0.1;\n }\n if (visibleSeries.points.length > 1) {\n if (visibleSeries.xMax >= leftSideNearest && visibleSeries.xMax < series.xMin) {\n leftSideNearest = visibleSeries.xMax + 0.1;\n }\n if (visibleSeries.xMin <= rightSideNearest && visibleSeries.xMin > series.xMax) {\n rightSideNearest = visibleSeries.xMin - 0.1;\n }\n }\n }\n if (leftSideNearest !== series.xAxis.visibleRange.min) {\n leftSideNearest = Math.abs(series.xMin - leftSideNearest) / 2;\n }\n if (rightSideNearest !== series.xAxis.visibleRange.max) {\n rightSideNearest = Math.abs(series.xMax - rightSideNearest) / 2;\n }\n }\n if (value >= series.xMin - leftSideNearest && value <= series.xMax + rightSideNearest) {\n for (var i = 0; i < xLength; i++) {\n data = xData[i];\n if (closest == null || Math.abs(data - value) < Math.abs(closest - value)) {\n closest = data;\n }\n }\n }\n var isDataExist = series.xData.indexOf(closest) !== -1;\n if (isDataExist) {\n return closest;\n }\n else {\n return null;\n }\n };\n ChartData.prototype.binarySearch = function (target, list) {\n var first = 0;\n var last = list.length;\n var position = -1;\n var found = false;\n var middle;\n while (found === false && first <= last) {\n middle = Math.floor((first + last) / 2);\n if (list[middle].xValue === target) {\n found = true;\n position = middle;\n }\n else if (list[middle].xValue > target) {\n last = middle - 1;\n }\n else {\n first = middle + 1;\n }\n }\n return position !== -1 ? list[position] : null;\n };\n ChartData.prototype.getClosestX = function (chart, series, xvalues) {\n var value;\n var rect = series.clipRect;\n if (chart.mouseX <= rect.x + rect.width && chart.mouseX >= rect.x) {\n if (!chart.requireInvertedAxis) {\n value = getValueXByPoint(chart.mouseX - rect.x, rect.width, series.xAxis);\n }\n else {\n value = getValueYByPoint(chart.mouseY - rect.y, rect.height, series.xAxis);\n }\n }\n var closest = this.getClosest(series, value, xvalues);\n var point = ((closest || closest === 0) && series.points.length > 0) ? this.binarySearch(closest, sort(series.points, ['xValue'])) : null;\n if (point && point.visible) {\n if (!(this.chart.chartAreaType === 'Cartesian' && ((series.category === 'Indicator' && series.name === 'Histogram') ||\n (point.symbolLocations && point.symbolLocations.length > 0 && point.symbolLocations[0].x >= 0 &&\n point.symbolLocations[0].x <= rect.width)))) {\n return null;\n }\n return new PointData(point, series);\n }\n return null;\n };\n /**\n * Merges the x-values of the data points from multiple series into a single array.\n *\n * @param {Series[]} visibleSeries - The array of visible series.\n * @returns {number[]} - The merged array of x-values.\n */\n ChartData.prototype.mergeXvalues = function (visibleSeries) {\n if (visibleSeries.length && (!this.commonXvalues.length || (this.commonXvalues.length !== visibleSeries[0].xData.length))) {\n this.commonXvalues = visibleSeries[0].xData;\n for (var index = 1; index < visibleSeries.length; index++) {\n this.commonXvalues = this.getDistinctValues(this.commonXvalues, visibleSeries[index].xData);\n }\n }\n return this.commonXvalues;\n };\n ChartData.prototype.commonXValue = function (visibleSeries) {\n var commonXValues = [];\n for (var j = 0; j < visibleSeries.length; j++) {\n for (var i = 0; (visibleSeries[j].points && i < visibleSeries[j].points.length); i++) {\n var point = visibleSeries[j].points[i];\n if (point && (point.index === 0 || point.index === visibleSeries[j].points.length - 1 ||\n (point.symbolLocations && point.symbolLocations.length > 0))) {\n commonXValues.push(point.xValue);\n }\n }\n }\n return commonXValues;\n };\n ChartData.prototype.getDistinctValues = function (first, second) {\n if (first === void 0) { first = []; }\n if (second === void 0) { second = []; }\n var intial = {};\n var result = [];\n var index;\n for (index = 0; index < first.length; index++) {\n var temp = first[index];\n if (!intial[temp]) {\n intial[temp] = true;\n result.push(temp);\n }\n }\n for (index = 0; index < second.length; index++) {\n var temp = second[index];\n if (!intial[temp]) {\n intial[temp] = true;\n result.push(temp);\n }\n }\n return result;\n };\n return ChartData;\n}());\nexport { ChartData };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Collection, getValue, animationMode } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { StackValues, RectOption, appendChildElement, appendClipElement, getElement } from '../../common/utils/helper';\nimport { firstToLowerCase, CircleOption, getColorByValue } from '../../common/utils/helper';\nimport { Rect, Size } from '@syncfusion/ej2-svg-base';\nimport { Border, Font, Margin, Animation, EmptyPointSettings, CornerRadius, Connector, DragSettings } from '../../common/model/base';\nimport { DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { Offset } from '../../common/model/base';\nimport { seriesRender } from '../../common/model/constants';\nimport { getVisiblePoints, setRange, findClipRect } from '../../common/utils/helper';\nimport { Browser } from '@syncfusion/ej2-base';\n/**\n * Configures the data label in the series.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n __extends(DataLabelSettings, _super);\n function DataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(true)\n ], DataLabelSettings.prototype, \"showZero\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], DataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"format\", void 0);\n __decorate([\n Property(1)\n ], DataLabelSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(0)\n ], DataLabelSettings.prototype, \"angle\", void 0);\n __decorate([\n Property(false)\n ], DataLabelSettings.prototype, \"enableRotation\", void 0);\n __decorate([\n Property('Auto')\n ], DataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], DataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Property('Center')\n ], DataLabelSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], DataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ left: 5, right: 5, top: 5, bottom: 5 }, Margin)\n ], DataLabelSettings.prototype, \"margin\", void 0);\n __decorate([\n Complex({ size: null, color: null, fontStyle: null, fontWeight: null, fontFamily: null }, Font)\n ], DataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Property(null)\n ], DataLabelSettings.prototype, \"template\", void 0);\n __decorate([\n Property('Hide')\n ], DataLabelSettings.prototype, \"labelIntersectAction\", void 0);\n return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n * Configures the marker in the series.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n __extends(MarkerSettings, _super);\n function MarkerSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"shape\", void 0);\n __decorate([\n Property('')\n ], MarkerSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"height\", void 0);\n __decorate([\n Property(false)\n ], MarkerSettings.prototype, \"isFilled\", void 0);\n __decorate([\n Property(5)\n ], MarkerSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ width: 2, color: null }, Border)\n ], MarkerSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Offset)\n ], MarkerSettings.prototype, \"offset\", void 0);\n __decorate([\n Property(null)\n ], MarkerSettings.prototype, \"fill\", void 0);\n __decorate([\n Property(true)\n ], MarkerSettings.prototype, \"allowHighlight\", void 0);\n __decorate([\n Property(1)\n ], MarkerSettings.prototype, \"opacity\", void 0);\n __decorate([\n Complex({}, DataLabelSettings)\n ], MarkerSettings.prototype, \"dataLabel\", void 0);\n return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n * Configures the pareto series.\n */\nvar ParetoOptions = /** @class */ (function (_super) {\n __extends(ParetoOptions, _super);\n function ParetoOptions() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ParetoOptions.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], ParetoOptions.prototype, \"width\", void 0);\n __decorate([\n Property('0')\n ], ParetoOptions.prototype, \"dashArray\", void 0);\n __decorate([\n Complex(null, MarkerSettings)\n ], ParetoOptions.prototype, \"marker\", void 0);\n __decorate([\n Property(true)\n ], ParetoOptions.prototype, \"showAxis\", void 0);\n return ParetoOptions;\n}(ChildProperty));\nexport { ParetoOptions };\n/**\n * Points model for the series.\n *\n * @public\n */\nvar Points = /** @class */ (function () {\n function Points() {\n /** point symbol location. */\n this.symbolLocations = null;\n /** point region. */\n this.regions = null;\n /** point percentage value. */\n this.percentage = null;\n /** point region data. */\n this.regionData = null;\n /** To know the point is selected. */\n this.isSelect = false;\n /** point marker. */\n this.marker = {\n visible: false\n };\n /**\n * To identify point y value with in the range.\n *\n * @private\n */\n this.isPointInRange = true;\n /** vertical error value for the point. */\n this.verticalError = null;\n /** vertical negative error value for the point. */\n this.verticalNegativeError = null;\n /** horizontal error value for the point. */\n this.horizontalError = null;\n /** horizontal negative error value for the point. */\n this.horizontalNegativeError = null;\n /** vertical positive error value for the point. */\n this.verticalPositiveError = null;\n /** horizontal positive error value for the point. */\n this.horizontalPositiveError = null;\n }\n return Points;\n}());\nexport { Points };\n/**\n * Defines the behavior of the trendlines.\n */\nvar Trendline = /** @class */ (function (_super) {\n __extends(Trendline, _super);\n function Trendline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /**\n * Sets the data source for the specified series in the provided chart.\n *\n * @private\n * @param {Series} series - The series for which the data source is set.\n * @param {Chart} chart - The chart in which the data source is set.\n * @returns {void}\n */\n Trendline.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.points = series.points;\n }\n chart.trendLineModule.initDataSource(this);\n chart.visibleSeriesCount++;\n };\n __decorate([\n Property('')\n ], Trendline.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Trendline.prototype, \"dashArray\", void 0);\n __decorate([\n Property(true)\n ], Trendline.prototype, \"visible\", void 0);\n __decorate([\n Property('Linear')\n ], Trendline.prototype, \"type\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"period\", void 0);\n __decorate([\n Property(2)\n ], Trendline.prototype, \"polynomialOrder\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"backwardForecast\", void 0);\n __decorate([\n Property(0)\n ], Trendline.prototype, \"forwardForecast\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Trendline.prototype, \"animation\", void 0);\n __decorate([\n Complex({}, MarkerSettings)\n ], Trendline.prototype, \"marker\", void 0);\n __decorate([\n Property(true)\n ], Trendline.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(null)\n ], Trendline.prototype, \"intercept\", void 0);\n __decorate([\n Property('')\n ], Trendline.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], Trendline.prototype, \"width\", void 0);\n __decorate([\n Property('SeriesType')\n ], Trendline.prototype, \"legendShape\", void 0);\n return Trendline;\n}(ChildProperty));\nexport { Trendline };\n/**\n * Configures Error bar in series.\n */\nvar ErrorBarCapSettings = /** @class */ (function (_super) {\n __extends(ErrorBarCapSettings, _super);\n function ErrorBarCapSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"width\", void 0);\n __decorate([\n Property(10)\n ], ErrorBarCapSettings.prototype, \"length\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarCapSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarCapSettings.prototype, \"opacity\", void 0);\n return ErrorBarCapSettings;\n}(ChildProperty));\nexport { ErrorBarCapSettings };\nvar ChartSegment = /** @class */ (function (_super) {\n __extends(ChartSegment, _super);\n function ChartSegment() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], ChartSegment.prototype, \"color\", void 0);\n __decorate([\n Property('0')\n ], ChartSegment.prototype, \"dashArray\", void 0);\n return ChartSegment;\n}(ChildProperty));\nexport { ChartSegment };\n/**\n * Configures error bar settings.\n *\n * @public\n */\nvar ErrorBarSettings = /** @class */ (function (_super) {\n __extends(ErrorBarSettings, _super);\n function ErrorBarSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ErrorBarSettings.prototype, \"visible\", void 0);\n __decorate([\n Property('Fixed')\n ], ErrorBarSettings.prototype, \"type\", void 0);\n __decorate([\n Property('Both')\n ], ErrorBarSettings.prototype, \"direction\", void 0);\n __decorate([\n Property('Vertical')\n ], ErrorBarSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(null)\n ], ErrorBarSettings.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"verticalError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"width\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalPositiveError\", void 0);\n __decorate([\n Property(3)\n ], ErrorBarSettings.prototype, \"verticalNegativeError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalPositiveError\", void 0);\n __decorate([\n Property(1)\n ], ErrorBarSettings.prototype, \"horizontalNegativeError\", void 0);\n __decorate([\n Complex(null, ErrorBarCapSettings)\n ], ErrorBarSettings.prototype, \"errorBarCap\", void 0);\n __decorate([\n Property('')\n ], ErrorBarSettings.prototype, \"errorBarColorMapping\", void 0);\n return ErrorBarSettings;\n}(ChildProperty));\nexport { ErrorBarSettings };\n/**\n * Defines the common behavior of both series and technical indicators.\n */\nvar SeriesBase = /** @class */ (function (_super) {\n __extends(SeriesBase, _super);\n function SeriesBase() {\n /**\n * The DataSource field that contains the x value.\n * It is applicable for both series and technical indicators.\n *\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.rangeColorPoints = [];\n _this.isAdvancedColor = undefined;\n /** @private */\n _this.currentViewData = [];\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.seriesType = 'XY';\n _this.isRectTypeSeries = false;\n _this.removedPointIndex = null;\n /** @private */\n _this.isLegendClicked = false;\n return _this;\n }\n /**\n * Process data for the series.\n *\n * @hidden\n * @returns {void}\n */\n SeriesBase.prototype.processJsonData = function () {\n var i = 0;\n var point = new Points();\n var xName = (this instanceof Series && this.type === 'Histogram') ? 'x' : this.xName;\n var textMappingName = this instanceof Series && this.marker.dataLabel.name ?\n this.marker.dataLabel.name : '';\n if (this instanceof Series) {\n if ((this.type === 'Waterfall' || this.type === 'Histogram')) {\n this.currentViewData = this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processInternalData(extend([], this.currentViewData, null, true), this);\n }\n if (this.category === 'Pareto') {\n this.currentViewData = extend([], this.currentViewData, null, true);\n if (this.type === 'Line') {\n this.currentViewData = this.chart.paretoSeriesModule.performCumulativeCalculation(this.currentViewData, this);\n }\n }\n this.isRectTypeSeries = this.type.indexOf('Column') > -1 || this.type.indexOf('Bar') > -1\n || this.type.indexOf('Histogram') > -1;\n }\n var len = (this.currentViewData || []).length;\n this.points = [];\n this.xMin = Infinity;\n this.xMax = -Infinity;\n this.yMin = Infinity;\n this.yMax = -Infinity;\n this.sizeMax = -Infinity;\n this.getSeriesType();\n if (this.xAxis.valueType === 'Category') {\n while (i < len) {\n this.pushCategoryPoint(point, i, textMappingName, xName);\n i++;\n }\n }\n else if (this.xAxis.valueType.indexOf('DateTime') > -1) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n while (i < len) {\n this.pushDateTimePoint(point, i, textMappingName, xName, dateParser, dateFormatter);\n i++;\n }\n }\n else {\n while (i < len) {\n this.pushDoublePoint(point, i, textMappingName, xName);\n i++;\n }\n }\n this.updateSplineValue();\n };\n /**\n * Pushes a category point to the data collection.\n *\n * @param {Points} point -The point to be pushed.\n * @param {number} index -The index of the point.\n * @param {string} textMappingName -The name of the text mapping.\n * @param {string} xName -The name of the x-coordinate.\n * @returns {void}\n * @private\n */\n SeriesBase.prototype.pushCategoryPoint = function (point, index, textMappingName, xName) {\n point = this.dataPoint(index, textMappingName, xName);\n this.pushCategoryData(point, index, point.x);\n this.pushData(point, index);\n this.setEmptyPoint(point, index);\n this.rangeColorsInterior(point);\n };\n /**\n * Pushes a double point to the data collection.\n *\n * @param {Points} point -The point to be pushed.\n * @param {number} index -The index of the point.\n * @param {string} textMappingName -The name of the text mapping.\n * @param {string} xName -The name of the x-coordinate.\n * @returns {void}\n * @private\n */\n SeriesBase.prototype.pushDoublePoint = function (point, index, textMappingName, xName) {\n point = this.dataPoint(index, textMappingName, xName);\n point.xValue = point.x;\n this.pushData(point, index);\n this.setEmptyPoint(point, index);\n };\n /**\n * Pushes a DateTime point to the data collection.\n *\n * @param {Points} point -The point to be pushed.\n * @param {number} index -The index of the point.\n * @param {string} textMappingName -The name of the text mapping.\n * @param {string} xName -The name of the x-coordinate.\n * @param {Function} dateParser -The date parser function.\n * @param {Function} dateFormatter -The date formatter function.\n * @returns {void}\n * @private\n */\n SeriesBase.prototype.pushDateTimePoint = function (point, index, textMappingName, xName, dateParser, dateFormatter) {\n point = this.dataPoint(index, textMappingName, xName);\n if (!isNullOrUndefined(point.x) && point.x !== '') {\n point.x = new Date(DataUtil.parse.parseJson({ val: point.x }).val);\n if (this.xAxis.valueType === 'DateTime') {\n point.xValue = Date.parse(point.x.toString());\n }\n else {\n if (this.chart.isBlazor) {\n this.pushCategoryData(point, index, Date.parse(point.x.toString()).toString());\n }\n else {\n this.pushCategoryData(point, index, Date.parse(dateParser(dateFormatter(point.x))).toString());\n }\n }\n this.pushData(point, index);\n this.setEmptyPoint(point, index);\n }\n else {\n point.visible = false;\n }\n };\n SeriesBase.prototype.updateSplineValue = function () {\n if (this instanceof Series && !(this.chart.stockChart && this.xAxis.valueType === 'DateTimeCategory')) {\n if (this.type.indexOf('Spline') > -1 || (this.drawType.indexOf('Spline') > -1 && this.chart.chartAreaType === 'PolarRadar')) {\n var isArea = (this.type.indexOf('Area') > -1 || this.drawType.indexOf('Area') > -1);\n var isRange = this.type.indexOf('Range') > -1;\n this.chart['spline' + (isArea ? isRange ? 'RangeArea' : 'Area' : '') + 'SeriesModule'].findSplinePoint(this);\n }\n else if (this.type.indexOf('Histogram') > -1 && (this.xAxis.maximum || this.xAxis.minimum)) {\n this.chart['histogramSeriesModule'].calculateBinValues(this);\n }\n if (this.type.indexOf('Histogram') > -1 && this.points.length === 1) {\n this.xMin = this.xMin - this.histogramValues.binWidth;\n this.xMax = this.xMax + this.histogramValues.binWidth;\n }\n }\n };\n SeriesBase.prototype.rangeColorsInterior = function (point) {\n if (this.chart.rangeColorSettings && this.chart.rangeColorSettings.length > 0 && this.chart.visibleSeries.length === 1 &&\n (this.chart.series[0].type === 'Column' || this.chart.series[0].type === 'Bar' ||\n this.chart.series[0].type === 'Scatter' || this.chart.series[0].type === 'Bubble')) {\n if (!this.rangeColorPoints[point.interior]) {\n this.rangeColorPoints[point.interior] = [];\n }\n else if (this.rangeColorPoints[point.interior] !== undefined) {\n this.rangeColorPoints[point.interior].push(point);\n }\n }\n };\n /**\n * Sets the empty point values.\n *\n * @param {Points} point - The point to be set.\n * @param {number} i - The index of the point.\n * @private\n * @returns {void}\n */\n SeriesBase.prototype.pushData = function (point, i) {\n point.index = i;\n point.yValue = point.y;\n point.series = this;\n // To find the min, max for the axis range.\n this.xMin = Math.min(this.xMin, point.xValue);\n this.xMax = Math.max(this.xMax, point.xValue);\n this.xData.push(point.xValue);\n };\n /**\n * Retrieves the data point at the specified index with the given text mapping name and x-name.\n *\n * @protected\n * @param {number} i - The index of the data point to retrieve.\n * @param {string} textMappingName - The name used to map text data.\n * @param {string} xName - The name used for the x-axis.\n * @returns {Points} - The data point at the specified index.\n * @private\n */\n SeriesBase.prototype.dataPoint = function (i, textMappingName, xName) {\n this.points[i] = new Points();\n var point = this.points[i];\n var currentViewData = this.currentViewData[i];\n var getObjectValueByMappingString = this.enableComplexProperty ? getValue : this.getObjectValue;\n point.x = getObjectValueByMappingString(xName, currentViewData);\n point.high = getObjectValueByMappingString(this.high, currentViewData);\n point.low = getObjectValueByMappingString(this.low, currentViewData);\n point.open = getObjectValueByMappingString(this.open, currentViewData);\n point.close = getObjectValueByMappingString(this.close, currentViewData);\n point.volume = getObjectValueByMappingString(this.volume, currentViewData);\n point.interior = getObjectValueByMappingString(this.pointColorMapping, currentViewData);\n if (this instanceof Series) {\n if (this.errorBar.visible) {\n point.errorBarColor = getObjectValueByMappingString(this.errorBar.errorBarColorMapping, currentViewData);\n point.verticalError = typeof this.errorBar.verticalError == 'string' ? getObjectValueByMappingString(this.errorBar.verticalError, currentViewData) : this.errorBar.verticalError;\n point.horizontalError = typeof this.errorBar.horizontalError == 'string' ? getObjectValueByMappingString(this.errorBar.horizontalError, currentViewData) : this.errorBar.horizontalError;\n point.verticalNegativeError = typeof this.errorBar.verticalNegativeError == 'string' ? getObjectValueByMappingString(this.errorBar.verticalNegativeError, currentViewData) : this.errorBar.verticalNegativeError;\n point.verticalPositiveError = typeof this.errorBar.verticalPositiveError == 'string' ? getObjectValueByMappingString(this.errorBar.verticalPositiveError, currentViewData) : this.errorBar.verticalPositiveError;\n point.horizontalNegativeError = typeof this.errorBar.horizontalNegativeError == 'string' ? getObjectValueByMappingString(this.errorBar.horizontalNegativeError, currentViewData) : this.errorBar.horizontalNegativeError;\n point.horizontalPositiveError = typeof this.errorBar.horizontalPositiveError == 'string' ? getObjectValueByMappingString(this.errorBar.horizontalPositiveError, currentViewData) : this.errorBar.horizontalPositiveError;\n }\n point.y = getObjectValueByMappingString(this.yName, currentViewData);\n point.size = getObjectValueByMappingString(this.size, currentViewData);\n point.text = getObjectValueByMappingString(textMappingName, currentViewData);\n point.tooltip = getObjectValueByMappingString(this.tooltipMappingName, currentViewData);\n if (this.isAdvancedColorSupported()) {\n this.rangeColorName = this.colorName.length > 0 ? this.colorName : this.yName;\n point.colorValue = getObjectValueByMappingString(this.rangeColorName, currentViewData);\n point.interior = this.getPointFillColor(point.interior, point.colorValue);\n }\n }\n return point;\n };\n SeriesBase.prototype.isAdvancedColorSupported = function () {\n if (isNullOrUndefined(this.isAdvancedColor)) {\n if (this.chart.rangeColorSettings && this.chart.rangeColorSettings.length > 0 &&\n (this.chart.series[0].type === 'Column' || this.chart.series[0].type === 'Bar' ||\n this.chart.series[0].type === 'Scatter' || this.chart.series[0].type === 'Bubble')) {\n this.isAdvancedColor = true;\n }\n else {\n this.isAdvancedColor = false;\n }\n }\n return this.isAdvancedColor;\n };\n SeriesBase.prototype.getPointFillColor = function (pointFill, value) {\n var color = pointFill;\n if (value && this.chart.rangeColorSettings && this.chart.rangeColorSettings.length > 0) {\n for (var _i = 0, _a = this.chart.rangeColorSettings; _i < _a.length; _i++) {\n var rangeMap = _a[_i];\n if (value >= rangeMap.start && value <= rangeMap.end) {\n if (rangeMap.colors.length > 1) {\n color = getColorByValue(rangeMap, value);\n }\n else {\n color = rangeMap.colors[0];\n }\n }\n }\n }\n return color;\n };\n /**\n * Pushes a category point to the data collection.\n *\n * @param {string} mappingName - The name of the mapping.\n * @param {Object} data - The data to be pushed.\n * @returns {Object} - The data point at the specified index.\n * @private\n */\n SeriesBase.prototype.getObjectValue = function (mappingName, data) {\n return data[mappingName];\n };\n /**\n * Sets the specified data point as an empty point at the given index.\n *\n * @private\n * @param {Points} point - The data point to set as empty.\n * @param {number} i - The index of the data point.\n * @returns {void}\n */\n SeriesBase.prototype.setEmptyPoint = function (point, i) {\n if (!this.findVisibility(point)) {\n point.visible = true;\n return null;\n }\n point.isEmpty = true;\n var mode = this instanceof Series && point.isPointInRange ? this.emptyPointSettings.mode : 'Drop';\n switch (mode) {\n case 'Zero':\n point.visible = true;\n if (this instanceof Series && this.seriesType.indexOf('HighLow') > -1) {\n point.high = point.low = 0;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = point.close = 0;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = 0;\n }\n break;\n case 'Average':\n if (this instanceof Series) {\n if (this.seriesType.indexOf('HighLow') > -1) {\n point.high = (isNullOrUndefined(point.high) || isNaN(+point.high)) ? this.getAverage(this.high, i) : point.high;\n point.low = (isNullOrUndefined(point.low) || isNaN(+point.low)) ? this.getAverage(this.low, i) : point.low;\n if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n point.open = (isNullOrUndefined(point.open) || isNaN(+point.open)) ? this.getAverage(this.open, i) : point.open;\n point.close = (isNullOrUndefined(point.close) || isNaN(+point.close)) ? this.getAverage(this.close, i) :\n point.close;\n }\n }\n else {\n point.y = point.yValue = this.yData[i] = this.getAverage(this.yName, i);\n }\n }\n point.visible = true;\n break;\n case 'Drop':\n case 'Gap':\n this.yData[i] = null;\n point.visible = false;\n break;\n }\n };\n SeriesBase.prototype.findVisibility = function (point) {\n var type = this instanceof Series ? this.seriesType : 'HighLowOpenClose';\n var yValues;\n var yAxisMin = this.yAxis.minimum;\n var yAxisMax = this.yAxis.maximum;\n switch (type) {\n case 'XY':\n if (this.chart.chartAreaType === 'PolarRadar' && ((!isNullOrUndefined(yAxisMin) && point.yValue < yAxisMin) ||\n (!isNullOrUndefined(yAxisMax) && point.yValue > yAxisMax))) {\n point.isPointInRange = false;\n return true;\n }\n this.setXYMinMax(point.yValue);\n this.yData.push(point.yValue);\n if (this instanceof Series && this.type === 'Bubble') {\n this.sizeMax = Math.max(this.sizeMax, (isNullOrUndefined(point.size) || isNaN(+point.size)) ? this.sizeMax\n : point.size);\n }\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.y) || isNaN(+point.y));\n case 'HighLow':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'HighLowOpenClose':\n this.setHiloMinMax(point.high, point.low);\n return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n (isNullOrUndefined(point.open) || isNaN(+point.open)) || (isNullOrUndefined(point.close) || isNaN(+point.close))\n || (isNullOrUndefined(point.high) || isNaN(+point.high));\n case 'BoxPlot':\n yValues = (point.y || [null]).filter(function (value) {\n return !isNullOrUndefined(value) && !isNaN(value);\n }).sort(function (a, b) {\n return a - b;\n });\n point.y = yValues;\n this.yMin = Math.min(this.yMin, Math.min.apply(Math, yValues));\n this.yMax = Math.max(this.yMax, Math.max.apply(Math, yValues));\n return !yValues.length;\n }\n };\n /**\n * To get Y min max for the provided point seriesType XY.\n *\n * @param {number} yValue - The y value used to determine the minimum and maximum values for the x and y coordinates.\n * @returns {void}\n */\n SeriesBase.prototype.setXYMinMax = function (yValue) {\n var isLogAxis = (this.yAxis.valueType === 'Logarithmic' || this.xAxis.valueType === 'Logarithmic');\n var isNegativeValue = yValue < 0 || this.yAxis.rangePadding === 'None';\n var seriesMinY;\n if (this.isRectTypeSeries && !setRange(this.yAxis)) {\n seriesMinY = ((isLogAxis ? (yValue) : isNegativeValue ? yValue : 0));\n }\n else {\n seriesMinY = yValue;\n }\n this.yMin = isLogAxis ?\n Math.min(this.yMin, (isNullOrUndefined(seriesMinY) || isNaN(seriesMinY) || (seriesMinY === 0) ||\n (seriesMinY.toString() === '0') || (seriesMinY.toString() === '')) ? this.yMin : seriesMinY) :\n Math.min(this.yMin, (isNullOrUndefined(seriesMinY) || isNaN(seriesMinY)) ? this.yMin : seriesMinY);\n this.yMax = Math.max(this.yMax, (isNullOrUndefined(yValue) || isNaN(yValue)) ? this.yMax : yValue);\n };\n /**\n * Sets the minimum and maximum values for the high and low values.\n *\n * @private\n * @param {number} high - The high value used to determine the maximum value.\n * @param {number} low - The low value used to determine the minimum value.\n * @returns {void}\n */\n SeriesBase.prototype.setHiloMinMax = function (high, low) {\n this.yMin = Math.min(this.yMin, Math.min((isNullOrUndefined(low) || isNaN(low)) ? this.yMin : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMin : high));\n this.yMax = Math.max(this.yMax, Math.max((isNullOrUndefined(low) || isNaN(low)) ? this.yMax : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMax : high));\n };\n /**\n * Finds the type of the series.\n *\n * @private\n * @returns {void}\n */\n SeriesBase.prototype.getSeriesType = function () {\n var type;\n if (this instanceof Series) {\n var seriesType = this.chart.chartAreaType === 'PolarRadar' ? this.drawType : this.type;\n if (seriesType) {\n switch (seriesType) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'RangeStepArea':\n case 'SplineRangeArea':\n case 'Hilo':\n type = 'HighLow';\n break;\n case 'HiloOpenClose':\n case 'Candle':\n type = 'HighLowOpenClose';\n break;\n case 'BoxAndWhisker':\n type = 'BoxPlot';\n break;\n default:\n type = 'XY';\n }\n }\n }\n this.seriesType = type;\n };\n /**\n * Pushes category data into the series points.\n *\n * @protected\n * @param {Points} point - The point to which category data will be pushed.\n * @param {number} index - The index of the data point.\n * @param {string} pointX - The x-value of the point.\n * @returns {void}\n * @private\n */\n SeriesBase.prototype.pushCategoryData = function (point, index, pointX) {\n if (!this.chart.tooltip.shared) {\n if (!this.visible) {\n return null;\n }\n }\n if (!this.xAxis.isIndexed) {\n if (this.xAxis.indexLabels[pointX] === undefined) {\n this.xAxis.indexLabels[pointX] = this.xAxis.labels.length;\n this.xAxis.labels.push(pointX);\n }\n point.xValue = this.xAxis.indexLabels[pointX];\n }\n else {\n if (this.xAxis.labels[index]) {\n this.xAxis.labels[index] += ', ' + pointX;\n }\n else {\n this.xAxis.labels.push(pointX);\n }\n // this.xAxis.labels[index as number] ? this.xAxis.labels[index as number] += ', ' + pointX :\n // this.xAxis.labels.push(pointX);\n point.xValue = index;\n }\n };\n /**\n * Gets the average value of a member in the specified data array or current view data.\n *\n * @param {string} member - The member whose average is to be calculated.\n * @param {number} i - The index of the data point.\n * @param {Object} data - The data array from which to calculate the average. Defaults to the current view data.\n * @returns {number} - The average value of the specified member.\n */\n SeriesBase.prototype.getAverage = function (member, i, data) {\n if (data === void 0) { data = this.currentViewData; }\n var previous = data[i - 1] ? (data[i - 1][member] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][member] || 0) : 0;\n return (previous + next) / 2;\n };\n /**\n * Refreshes the data manager for the provided chart.\n *\n * @param {Chart} chart - The chart whose data manager is to be refreshed.\n * @returns {void}\n * @private\n */\n SeriesBase.prototype.refreshDataManager = function (chart) {\n var _this = this;\n this.chart = chart;\n var dataSource;\n var isAngular = 'isAngular';\n if (chart[isAngular]) {\n dataSource = Object.keys(this.dataSource).length ? this.dataSource : chart.dataSource;\n }\n else {\n dataSource = this.dataSource || chart.dataSource;\n }\n if (!(dataSource instanceof DataManager) && isNullOrUndefined(this.query)) {\n this.dataManagerSuccess({ result: dataSource, count: dataSource.length }, false);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e); });\n };\n SeriesBase.prototype.dataManagerSuccess = function (e, isRemoteData) {\n if (isRemoteData === void 0) { isRemoteData = true; }\n this.currentViewData = e.count ? e.result : [];\n this.chart.allowServerDataBinding = false;\n if (this instanceof Series) {\n if (this.chart.stockChart) {\n this.chart.stockChart.series[this.index].localData = this.currentViewData;\n }\n var argsData = {\n name: seriesRender, series: this, data: this.currentViewData, fill: this.interior\n };\n this.chart.trigger(seriesRender, argsData);\n this.interior = argsData.fill;\n this.currentViewData = argsData.data;\n }\n if (this.chart.stockChart && !(this instanceof Series)) {\n this.currentViewData = this.chart.stockChart.findCurrentData(this.chart.stockChart.series[0].localData, this.chart.stockChart.series[0].xName);\n }\n this.processJsonData();\n this.recordsCount = e.count;\n this.refreshChart(isRemoteData);\n this.currentViewData = null;\n };\n SeriesBase.prototype.refreshChart = function (isRemoteData) {\n var chart = this.chart;\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 1 : 0;\n }\n chart.refreshTechnicalIndicator(this);\n if (this instanceof Series && this.category !== 'TrendLine') {\n for (var _i = 0, _a = this.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n trendline.setDataSource(this, chart);\n }\n }\n //if (chart.visibleSeries.length === (chart.visibleSeriesCount - chart.indicators.length)) {\n if (chart.visibleSeries.length === (chart.visibleSeriesCount)) {\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart.isBlazor ? {} : chart });\n if (this.chart.stockChart && this.chart.stockChart.initialRender) {\n this.chart.stockChart.initialRender = false;\n this.chart.stockChart.stockChartDataManagerSuccess();\n }\n }\n if (this instanceof Series) {\n chart.visibleSeriesCount += isRemoteData ? 0 : 1;\n }\n };\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"colorName\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"high\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"low\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"open\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"close\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"volume\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(true)\n ], SeriesBase.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"xAxisName\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"yAxisName\", void 0);\n __decorate([\n Complex(null, Animation)\n ], SeriesBase.prototype, \"animation\", void 0);\n __decorate([\n Property(null)\n ], SeriesBase.prototype, \"fill\", void 0);\n __decorate([\n Property(1)\n ], SeriesBase.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"dashArray\", void 0);\n __decorate([\n Property('')\n ], SeriesBase.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], SeriesBase.prototype, \"query\", void 0);\n __decorate([\n Collection([], ChartSegment)\n ], SeriesBase.prototype, \"segments\", void 0);\n __decorate([\n Property('X')\n ], SeriesBase.prototype, \"segmentAxis\", void 0);\n __decorate([\n Property(false)\n ], SeriesBase.prototype, \"enableComplexProperty\", void 0);\n return SeriesBase;\n}(ChildProperty));\nexport { SeriesBase };\n/**\n * Configures the series in charts.\n *\n * @public\n */\nvar Series = /** @class */ (function (_super) {\n __extends(Series, _super);\n function Series(parent, propName, defaultValue, isArray) {\n var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n _this.visibleSeriesCount = 0;\n /** @private */\n _this.category = 'Series';\n /** @private */\n _this.isRectSeries = false;\n /** @private */\n _this.drawPoints = [];\n /** @private */\n _this.lowDrawPoints = [];\n /** @private */\n _this.delayedAnimation = false;\n /** @private */\n _this.rangeColorName = _this.colorName.length > 0 ? _this.colorName : _this.yName;\n return _this;\n }\n /**\n * Refresh the axis label.\n *\n * @returns {void}\n * @private\n */\n Series.prototype.refreshAxisLabel = function () {\n if (this.xAxis.valueType.indexOf('Category') === -1) {\n return null;\n }\n this.xAxis.labels = [];\n this.xAxis.indexLabels = {};\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n for (var _i = 0, _a = this.xAxis.series; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.visible && item.category !== 'TrendLine') {\n item.xMin = Infinity;\n item.xMax = -Infinity;\n for (var _b = 0, _c = item.points; _b < _c.length; _b++) {\n var point = _c[_b];\n item.pushCategoryData(point, point.index, this.xAxis.valueType === \"DateTimeCategory\" ? Date.parse(dateParser(dateFormatter(point.x))).toString() : point.x);\n item.xMin = Math.min(item.xMin, point.xValue);\n item.xMax = Math.max(item.xMax, point.xValue);\n }\n }\n }\n };\n /**\n * To get the series collection.\n *\n * @returns {void}\n * @private\n */\n Series.prototype.findSeriesCollection = function (column, row, isStack) {\n var seriesCollection = [];\n for (var _i = 0, _a = row.axes; _i < _a.length; _i++) {\n var rowAxis = _a[_i];\n for (var _b = 0, _c = rowAxis.series; _b < _c.length; _b++) {\n var rowSeries = _c[_b];\n for (var _d = 0, _e = column.axes; _d < _e.length; _d++) {\n var axis = _e[_d];\n for (var _f = 0, _g = axis.series; _f < _g.length; _f++) {\n var series = _g[_f];\n if (series === rowSeries && series.visible && this.rectSeriesInChart(series, isStack)) {\n seriesCollection.push(series);\n }\n }\n }\n }\n }\n return seriesCollection;\n };\n /**\n * Checks if the series in the chart are rectangular.\n *\n * @param {Series} series - The series to be checked.\n * @param {boolean} isStack - Specifies whether the series are stacked.\n * @returns {boolean} - Returns true if the series in the chart are rectangular, otherwise false.\n */\n Series.prototype.rectSeriesInChart = function (series, isStack) {\n var type = (series.type).toLowerCase();\n return (type.indexOf('column') !== -1 || type.indexOf('bar') !== -1 || type.indexOf('histogram') !== -1 ||\n type.indexOf('hiloopenclose') !== -1 || type.indexOf('candle') !== -1 || type.indexOf('pareto') !== -1 ||\n type.indexOf('hilo') !== -1 || series.drawType.indexOf('Column') !== -1 ||\n type.indexOf('waterfall') !== -1 || type.indexOf('boxandwhisker') !== -1 || isStack);\n };\n /**\n * Calculates the stacked value for the chart.\n *\n * @param {boolean} isStacking100 - Specifies whether the stacking is 100%.\n * @param {Chart} chart - The chart for which the stacked value is calculated.\n * @returns {void}\n * @private\n */\n Series.prototype.calculateStackedValue = function (isStacking100, chart) {\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.calculateStackingValues(this.findSeriesCollection(columnItem, item, true), isStacking100);\n }\n }\n };\n Series.prototype.calculateStackingValues = function (seriesCollection, isStacking100) {\n var startValues;\n var endValues;\n var yValues = [];\n var lastPositive = [];\n var lastNegative = [];\n var stackingGroup;\n var lastValue;\n var value;\n var frequencies = [];\n if (isStacking100) {\n frequencies = this.findFrequencies(seriesCollection);\n }\n var groupingValues = [];\n var visiblePoints = [];\n for (var i = 0; i < seriesCollection.length; i++) {\n var series = seriesCollection[i];\n if (!groupingValues[series.stackingGroup]) {\n groupingValues[series.stackingGroup] = [];\n groupingValues[series.stackingGroup].push(series);\n }\n else if (groupingValues[series.stackingGroup] !== undefined) {\n groupingValues[series.stackingGroup].push(series);\n }\n }\n var keys = Object.keys(groupingValues);\n for (var k = 0; k < keys.length; k++) {\n var stackingSeies = [];\n var stackedValues = [];\n var seriesCollection_2 = groupingValues[keys[k]];\n for (var _i = 0, seriesCollection_1 = seriesCollection_2; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n if (series.type.indexOf('Stacking') !== -1 || (series.drawType.indexOf('Stacking') !== -1 &&\n (series.chart.chartAreaType === 'PolarRadar'))) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' :\n (series.type.indexOf('StackingLine') !== -1) ? 'StackingLine100' : series.stackingGroup;\n if (!lastPositive[stackingGroup]) {\n lastPositive[stackingGroup] = [];\n lastNegative[stackingGroup] = [];\n }\n yValues = series.yData;\n startValues = [];\n endValues = [];\n stackingSeies.push(series);\n visiblePoints = getVisiblePoints(series);\n for (var j = 0, pointsLength = visiblePoints.length; j < pointsLength; j++) {\n lastValue = 0;\n value = +yValues[j]; // Fix for chart not rendering while y value is given as string issue\n if (lastPositive[stackingGroup][visiblePoints[j].xValue] === undefined) {\n lastPositive[stackingGroup][visiblePoints[j].xValue] = 0;\n }\n if (lastNegative[stackingGroup][visiblePoints[j].xValue] === undefined) {\n lastNegative[stackingGroup][visiblePoints[j].xValue] = 0;\n }\n if (isStacking100) {\n value = value / frequencies[stackingGroup][visiblePoints[j].xValue] * 100;\n value = !isNaN(value) ? value : 0;\n visiblePoints[j].percentage = +(value.toFixed(2));\n }\n else {\n stackedValues[j] = stackedValues[j] ?\n stackedValues[j] + Math.abs(value) : Math.abs(value);\n }\n if (value >= 0) {\n lastValue = lastPositive[stackingGroup][visiblePoints[j].xValue];\n lastPositive[stackingGroup][visiblePoints[j].xValue] += value;\n }\n else {\n lastValue = lastNegative[stackingGroup][visiblePoints[j].xValue];\n lastNegative[stackingGroup][visiblePoints[j].xValue] += value;\n }\n startValues.push(lastValue);\n endValues.push(value + lastValue);\n if (isStacking100 && (endValues[j] > 100)) {\n endValues[j] = 100;\n }\n }\n series.stackedValues = new StackValues(startValues, endValues);\n var isLogAxis = series.yAxis.valueType === 'Logarithmic';\n var isColumnBarType = (series.type.indexOf('Column') !== -1 || series.type.indexOf('Bar') !== -1);\n series.yMin = isLogAxis && isColumnBarType && series.yMin < 1 ? series.yMin : (series.yAxis.startFromZero && series.yAxis.rangePadding === 'Auto' && series.yMin >= 0) ? 0 : parseFloat((Math.min.apply(0, isStacking100 ? startValues : endValues)).toFixed(10));\n series.yMax = Math.max.apply(0, endValues);\n if (series.yMin > Math.min.apply(0, endValues)) {\n series.yMin = (isStacking100) ? -100 :\n isLogAxis && isColumnBarType && series.yMin < 1 ? series.yMin : Math.min.apply(0, endValues);\n }\n if (series.yMax < Math.max.apply(0, startValues)) {\n series.yMax = 0;\n }\n }\n }\n this.findPercentageOfStacking(stackingSeies, stackedValues, isStacking100);\n }\n };\n Series.prototype.findPercentageOfStacking = function (stackingSeies, values, isStacking100) {\n for (var _i = 0, stackingSeies_1 = stackingSeies; _i < stackingSeies_1.length; _i++) {\n var item = stackingSeies_1[_i];\n if (isStacking100) {\n return null;\n }\n for (var _a = 0, _b = getVisiblePoints(item); _a < _b.length; _a++) {\n var point = _b[_a];\n point.percentage = Math.abs(+(point.y / values[point.index] * 100).toFixed(2));\n }\n }\n };\n Series.prototype.findFrequencies = function (seriesCollection) {\n var frequencies = [];\n var stackingGroup;\n var visiblePoints = [];\n for (var _i = 0, seriesCollection_3 = seriesCollection; _i < seriesCollection_3.length; _i++) {\n var series = seriesCollection_3[_i];\n series.yAxis.isStack100 = series.type.indexOf('100') !== -1 ? true : false;\n visiblePoints = getVisiblePoints(series);\n if (series.type.indexOf('Stacking') !== -1) {\n stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' :\n (series.type.indexOf('StackingLine') !== -1) ? 'StackingLine100' : series.stackingGroup;\n if (!frequencies[stackingGroup]) {\n frequencies[stackingGroup] = [];\n }\n for (var j = 0, pointsLength = visiblePoints.length; j < pointsLength; j++) {\n if (frequencies[stackingGroup][visiblePoints[j].xValue] === undefined) {\n frequencies[stackingGroup][visiblePoints[j].xValue] = 0;\n }\n if (series.yData[j] > 0) {\n frequencies[stackingGroup][visiblePoints[j].xValue] += series.yData[j];\n }\n else {\n frequencies[stackingGroup][visiblePoints[j].xValue] -= series.yData[j];\n }\n }\n }\n }\n return frequencies;\n };\n /* private dataManagerFailure(e: { result: Object[] }): void {\n this.currentViewData = [];\n this.refreshChart();\n }*/\n /**\n * Renders the series on the chart.\n *\n * @param {Chart} chart - The chart on which the series is rendered.\n * @returns {void}\n * @private\n */\n Series.prototype.renderSeries = function (chart) {\n if (this.chart.stockChart && this.xAxis.valueType === 'DateTimeCategory') {\n for (var i = 0; i < this.points.length; i++) {\n var index = this.xAxis.labels.indexOf(Date.parse(this.points[i].x.toString()).toString());\n this.points[i].xValue = index;\n if (chart.series.length > 1) {\n this.xData[i] = index;\n this.xMin = (this.xMin > index) ? index : this.xMin;\n this.xMax = (this.xMax < index) ? index : this.xMax;\n }\n }\n if (this instanceof Series && this.type.indexOf('Spline') > -1) {\n var isArea = this.type.indexOf('Area') > -1;\n var isRange = this.type.indexOf('Range') > -1;\n this.chart['spline' + (isArea ? isRange ? 'RangeArea' : 'Area' : '') + 'SeriesModule'].findSplinePoint(this);\n }\n }\n var seriesType = firstToLowerCase(this.type);\n seriesType = seriesType.replace('100', '');\n if (chart[seriesType + 'SeriesModule']) {\n if (this.category !== 'Indicator' && this.category !== 'TrendLine') {\n this.createSeriesElements(chart);\n }\n this.visiblePoints = getVisiblePoints(this);\n chart[seriesType + 'SeriesModule'].render(this, this.xAxis, this.yAxis, chart.requireInvertedAxis);\n if (this.category !== 'Indicator') {\n if (this.errorBar.visible) {\n this.chart.errorBarModule.render(this);\n }\n if (this.marker.dataLabel.visible) {\n chart.dataLabelModule.render(this, this.chart, this.marker.dataLabel);\n }\n this.appendSeriesElement(chart.seriesElements, chart);\n }\n if (!this.chart.enableCanvas) {\n this.performAnimation(chart, seriesType, this.errorBar, this.marker, this.marker.dataLabel);\n }\n }\n };\n /**\n * Creates elements for the series on the chart.\n *\n * @param {Chart} chart - The chart for which series elements are created.\n * @returns {void}\n * @private\n */\n Series.prototype.createSeriesElements = function (chart) {\n if (this.category !== 'Indicator') {\n var elementId = chart.element.id;\n // 8 for extend border value 5 for extend size value\n var explodeValue = this.marker.border.width + 8 + 5;\n var render = (this.type === 'Bubble') || (!this.marker.visible && chart.tooltip.shared && chart.enableCanvas) ?\n chart.svgRenderer : chart.renderer;\n var index = this.index === undefined ? this.category : this.index;\n var markerHeight = void 0;\n var markerWidth = void 0;\n var options = void 0;\n if (this.type === 'Scatter' || this.drawType === 'Scatter') {\n markerHeight = (this.marker.height + explodeValue) / 2;\n markerWidth = (this.marker.width + explodeValue) / 2;\n }\n else {\n markerHeight = 0;\n markerWidth = 0;\n }\n if (chart.chartAreaType === 'PolarRadar') {\n var markerMaxValue = (this.drawType === 'Scatter') ? Math.max(this.marker.width, this.marker.height) : 0;\n options = new CircleOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, this.clipRect.width / 2 + this.clipRect.x, this.clipRect.height / 2 + this.clipRect.y, chart.radius + markerMaxValue);\n this.clipRectElement = appendClipElement(chart.redraw, options, render, 'drawCircularClipPath');\n }\n else {\n options = new RectOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: (this.xAxis.columnIndex === 0) ? -markerWidth : 0, y: (this.yAxis.rowIndex === chart.rows.length - 1) ? -markerHeight : 0,\n width: this.clipRect.width + (this.xAxis.columnIndex === chart.columns.length - 1 ? markerWidth * 2 : markerWidth),\n height: this.clipRect.height + (this.yAxis.rowIndex === 0 ? markerHeight * 2 : markerHeight)\n });\n this.clipRectElement = appendClipElement(chart.redraw, options, render);\n }\n var transform = chart.chartAreaType === 'Cartesian' ? 'translate(' + this.clipRect.x + ',' + (this.clipRect.y) + ')' : '';\n this.symbolElement = null;\n this.seriesElement = render.createGroup({\n 'id': elementId + 'SeriesGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + elementId + '_ChartSeriesClipRect_' + index + ')'\n });\n if (this.seriesElement) {\n this.seriesElement.setAttribute('role', 'region');\n this.seriesElement.setAttribute('aria-label', (this.name + ',' + this.type + ' series with ' + this.points.length + ' data points'));\n this.seriesElement.setAttribute('aria-hidden', 'false');\n }\n if (!this.chart.enableCanvas || this.type === 'Bubble') {\n this.seriesElement.setAttribute('tabindex', index === 0 ? '0' : !this.checkTabindex(chart.visibleSeries, index) ? '0' : '');\n this.seriesElement.setAttribute('style', 'outline: none');\n this.seriesElement.appendChild(this.clipRectElement);\n }\n }\n };\n Series.prototype.checkTabindex = function (visibleSeries, index) {\n for (var i = 0; i < index; i++) {\n if (visibleSeries[i].visible) {\n return true;\n }\n }\n return false;\n };\n /**\n * Appends a series element to the chart.\n *\n * @param {Element} element - The series element to append.\n * @param {Chart} chart - The chart to which the series element will be appended.\n * @returns {void}\n * @private\n */\n Series.prototype.appendSeriesElement = function (element, chart) {\n var marker = this.marker;\n var dataLabel = marker.dataLabel;\n var redraw = chart.redraw;\n if (this.category !== 'TrendLine') {\n appendChildElement(chart.enableCanvas, chart.seriesElements, this.seriesElement, redraw);\n var errorBar = this.errorBar;\n if (errorBar.visible) {\n if (chart.chartAreaType === 'PolarRadar') {\n appendChildElement(chart.enableCanvas, chart.seriesElements, this.seriesElement, redraw);\n }\n else {\n appendChildElement(chart.enableCanvas, chart.seriesElements, this.errorBarElement, redraw);\n }\n }\n }\n if (marker.visible && (chart.chartAreaType === 'Cartesian' ||\n ((this.drawType !== 'Scatter') && chart.chartAreaType === 'PolarRadar')) && this.type !== 'Scatter' &&\n this.type !== 'Bubble' && this.type !== 'Candle' && this.type !== 'Hilo' && this.type !== 'HiloOpenClose' && this.symbolElement) {\n appendChildElement(chart.enableCanvas, chart.seriesElements, this.symbolElement, redraw);\n }\n if (dataLabel.visible && this.textElement) {\n appendChildElement(chart.enableCanvas, chart.dataLabelElements, this.shapeElement, redraw);\n appendChildElement(chart.enableCanvas, chart.dataLabelElements, this.textElement, redraw);\n }\n if (!chart.enableCanvas && chart.dataLabelElements.hasChildNodes()) {\n chart.seriesElements.appendChild(chart.dataLabelElements);\n }\n };\n /**\n * Performs animation for the specified chart elements.\n *\n * @param {Chart} chart - The chart for which animation is performed.\n * @param {string} type - The type of animation to be performed.\n * @param {ErrorBarSettingsModel} errorBar - The error bar settings for the animation.\n * @param {MarkerSettingsModel} marker - The marker settings for the animation.\n * @param {DataLabelSettingsModel} dataLabel - The data label settings for the animation.\n * @returns {void}\n * @private\n */\n Series.prototype.performAnimation = function (chart, type, errorBar, marker, dataLabel) {\n if (((this.animation.enable && animationMode !== 'Disable') || animationMode === 'Enable') && chart.animateSeries && (!chart.stockChart || !chart.stockChart.isStockChartRendered)) {\n chart[type + 'SeriesModule'].doAnimation(this);\n if (errorBar.visible) {\n chart.errorBarModule.doErrorBarAnimation(this);\n }\n if (marker.visible) {\n chart.markerRender.doMarkerAnimation(this);\n }\n //to datalabel animation disabled for edge and IE\n if (dataLabel.visible && Browser.info.name !== 'edge' && !Browser.isIE) {\n chart.dataLabelModule.doDataLabelAnimation(this);\n }\n }\n };\n /**\n * Sets the color of a data point.\n *\n * @param {Points} point - The data point.\n * @param {string} color - The color to set.\n * @returns {string} - The updated color.\n * @private\n */\n Series.prototype.setPointColor = function (point, color) {\n color = point.interior || color;\n return point.isEmpty ? (this.emptyPointSettings.fill || color) : color;\n };\n /**\n * Sets the border color of a data point.\n *\n * @param {Points} point - The data point.\n * @param {BorderModel} border - The border color to set.\n * @returns {BorderModel} - The updated border color.\n * @private\n */\n Series.prototype.setBorderColor = function (point, border) {\n border.width = point.isEmpty ? (this.emptyPointSettings.border.width || border.width) : border.width;\n border.color = point.isEmpty ? (this.emptyPointSettings.border.color || border.color) : border.color;\n return border;\n };\n /**\n * Adds a data point to the data source.\n *\n * @function addPoint\n * @param {Object} dataPoint - The data point to be added.\n * @param {number} duration - The duration for the animation.\n * @returns {void}\n */\n Series.prototype.addPoint = function (dataPoint, duration) {\n var yMin = this.yMin;\n var yMax = this.yMax;\n this.removeTrackballElements();\n this.dataSource.push(dataPoint);\n if (this.type === 'Radar' || this.type === 'Polar') {\n return this.chart.refresh();\n }\n if (this.type === 'Histogram') {\n this.currentViewData = this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processInternalData(extend([], this.dataSource, null, true), this);\n for (var i = 0; i < this.currentViewData.length; i++) {\n this.updatePoint(i);\n }\n }\n else {\n this.currentViewData = this.dataSource;\n var pointIndex = this.points.length === 0 ? 0 : this.points[this.points.length - 1].index + 1;\n this.updatePoint(pointIndex);\n }\n if (this.category === 'Pareto') {\n var dataSource = extend([], this.dataSource, null, true);\n var series = this.chart.visibleSeries[this.index + this.chart.series.length];\n series.currentViewData = this.chart.paretoSeriesModule.performCumulativeCalculation(dataSource, this);\n for (var i = 0; i < series.currentViewData.length; i++) {\n if (!series.points[i]) {\n series.updatePoint(i);\n }\n series.points[i].y = series.points[i].yValue = series.currentViewData[i][series.yName];\n }\n }\n this.updateSplineValue();\n this.chart.calculateStackValues();\n this.chart.redraw = this.chart.enableAnimation;\n var chartDuration = this.chart.duration;\n this.chart.duration = isNullOrUndefined(duration) ? 500 : duration;\n this.chart.animateSeries = false;\n this.chart.pointsAdded = true;\n if (this.chart.enableAnimation && (!(this.isRectSeries || this.type === 'Bubble' || this.type === 'Scatter')) && (this.type.indexOf('step') === -1)) {\n if (this.marker && this.marker.visible && this.visible) {\n for (var i = this.points.length - 2; i >= 0; i--) {\n if (this.points[i] && this.points[i].symbolLocations[0] !== undefined) {\n this.chart.markerRender.renderMarker(this, this.points[this.points.length - 2], this.points[i].symbolLocations[0], null, true);\n break;\n }\n }\n }\n }\n if (this.yMin >= yMin && this.yMax <= yMax) {\n if (!setRange(this.xAxis)) {\n this.xAxis.baseModule.calculateRangeAndInterval(new Size(this.xAxis.rect.width, this.chart.availableSize.height), this.xAxis);\n this.xAxis.updateAxis();\n }\n this.chart.pointsAdded = false;\n this.updateSeries(true, false);\n }\n if (this.yMin < yMin || this.yMax > yMax) {\n this.updateChartAxis();\n this.chart.pointsAdded = false;\n this.updateSeries(true, true);\n }\n this.chart.redraw = false;\n this.chart.duration = chartDuration;\n };\n /**\n * Removes a data point from the series data source at the specified index.\n *\n * @function removePoint\n * @param {number} index - The index of the data point to be removed.\n * @param {number} duration - The duration for the animation.\n * @returns {void}\n */\n Series.prototype.removePoint = function (index, duration) {\n var dataSource = extend([], this.dataSource, null, true);\n var chartDuration = this.chart.duration;\n if (dataSource.length > 0 && index >= 0 && index < dataSource.length) {\n dataSource.splice(index, 1);\n this.dataSource.splice(index, 1);\n this.removeTrackballElements(index);\n if (this.type === 'Radar' || this.type === 'Polar') {\n return this.chart.refresh();\n }\n this.chart.redraw = this.chart.enableAnimation;\n this.chart.animateSeries = false;\n this.chart.pointsAdded = true;\n this.chart.duration = isNullOrUndefined(duration) ? 500 : duration;\n if (this.type === 'Histogram') {\n var length_1 = this.points.length;\n this.points = [];\n this.visiblePoints = [];\n this.currentViewData = this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processInternalData(extend([], this.dataSource, null, true), this);\n for (var i = 0; i < this.currentViewData.length; i++) {\n this.updatePoint(i);\n }\n if (length_1 > this.points.length) {\n this.removedPointIndex = index;\n }\n }\n else {\n this.removedPointIndex = index;\n this.points.splice(index, 1);\n this.visiblePoints.splice(index, 1);\n }\n this.yData = [];\n this.xData = [];\n var yMin = this.yMin;\n var yMax = this.yMax;\n this.yMin = Infinity;\n this.xMin = Infinity;\n this.yMax = -Infinity;\n this.xMax = -Infinity;\n if (this.xAxis.valueType.indexOf('Category') > -1 && this.chart.series.length === 1) {\n this.xAxis.labels = [];\n this.xAxis.indexLabels = {};\n }\n if (index === 0) {\n this.chart.pointsRemoved = this.chart.enableAnimation;\n }\n for (var i = 0; i < this.points.length; i++) {\n this.updatePointsAfterRemoval(i);\n }\n if (this.category === 'Pareto') {\n var series = this.chart.visibleSeries[this.index + this.chart.series.length];\n series.yMin = Infinity;\n series.xMin = Infinity;\n series.yMax = -Infinity;\n series.xMax = -Infinity;\n series.points.splice(index, 1);\n series.visiblePoints.splice(index, 1);\n series.currentViewData = this.chart.paretoSeriesModule.performCumulativeCalculation(this.dataSource, this);\n for (var i = 0; i < series.currentViewData.length; i++) {\n series.points[i].y = series.points[i].yValue = series.currentViewData[i][series.yName];\n series.updatePointsAfterRemoval(i);\n }\n }\n this.updateSplineValue();\n this.chart.calculateStackValues();\n if (!setRange(this.xAxis) && yMax === this.yMax && yMin === this.yMin) {\n this.xAxis.baseModule.calculateRangeAndInterval(new Size(this.xAxis.rect.width, this.chart.availableSize.height), this.xAxis);\n this.xAxis.updateAxis();\n this.createSeriesElements(this.chart);\n this.chart.pointsAdded = false;\n this.updateSeries(true, false);\n }\n else if (yMax < this.yMax || yMin > this.yMin || yMax > this.yMax || yMin < this.yMin) {\n this.updateChartAxis();\n this.createSeriesElements(this.chart);\n this.chart.pointsAdded = false;\n this.updateSeries(true, true);\n }\n }\n appendChildElement(this.chart.enableCanvas, this.chart.seriesElements, this.seriesElement, true);\n this.chart.redraw = false;\n this.chart.duration = chartDuration;\n this.chart.pointsRemoved = false;\n this.removedPointIndex = null;\n };\n Series.prototype.updatePointsAfterRemoval = function (index) {\n var point = this.points[index];\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n if (this.xAxis.valueType === 'Category' && this.chart.series.length === 1) {\n this.pushCategoryData(point, index, point.x);\n }\n else if (this.xAxis.valueType === 'DateTimeCategory' && this.chart.series.length === 1) {\n this.pushCategoryData(point, index, Date.parse(dateParser(dateFormatter(point.x))).toString());\n }\n this.pushData(point, index);\n this.setEmptyPoint(this.points[index], index);\n };\n /**\n * Removes trackball elements from the series.\n *\n * @param {number} index - The index of the data point.\n * @returns {void}\n */\n Series.prototype.removeTrackballElements = function (index) {\n if (this.marker.visible) {\n if (index !== undefined) {\n var baseId = this.chart.element.id + '_Series_' + this.index + '_Point_' + index + '_Trackball_';\n var trackball0 = getElement(baseId + '0');\n if (trackball0) {\n trackball0.remove();\n }\n var trackball1 = getElement(baseId + '1');\n if (trackball1) {\n trackball1.remove();\n }\n var symbolElement = getElement(this.chart.element.id + '_Series_' + this.index + '_Point_' + index + '_Symbol');\n if (symbolElement) {\n symbolElement.setAttribute('visibility', 'visible');\n }\n }\n else {\n var baseClassPattern = this.chart.element.id + '_EJ2-Trackball_Series_' + this.index + '_Point_';\n var elements = document.querySelectorAll(\"[class*=\\\"\" + baseClassPattern + \"\\\"]\");\n if (elements[0]) {\n var pointIndexMatch = elements[0].id.match(/_Point_(\\d+)_/);\n var pointIndex = pointIndexMatch ? parseInt(pointIndexMatch[1], 10) : null;\n elements[0].remove();\n var symbolElement = getElement(this.chart.element.id + '_Series_' + this.index + '_Point_' + pointIndex + '_Symbol');\n if (symbolElement) {\n symbolElement.setAttribute('visibility', 'visible');\n }\n }\n if (elements[1]) {\n elements[1].remove();\n }\n }\n }\n if (this.chart.tooltip.enable) {\n this.chart.tooltipModule.previousPoints = [];\n var tooltipElement = getElement(this.chart.element.id + '_tooltip');\n if (tooltipElement) {\n tooltipElement.remove();\n }\n }\n };\n /**\n * Sets the data source with the provided data.\n *\n * @function setData\n * @param {Object[]} data - An array of objects representing the data points.\n * @param {number} duration - The duration for the animation.\n * @returns {void}\n */\n Series.prototype.setData = function (data, duration) {\n if (!data) {\n return null;\n }\n var yMin = this.yMin;\n var yMax = this.yMax;\n this.yMin = Infinity;\n this.yMax = -Infinity;\n var pointList = [];\n var samePoints = false;\n if (this.dataSource.length === data.length && !(this.type === 'Radar' || this.type === 'Polar')) {\n samePoints = true;\n this.yData = [];\n if (this.type === 'Histogram' && this.dataSource.length === data.length) {\n var newHistogramData = this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n processInternalData(extend([], data, null, true), this);\n this.currentViewData = newHistogramData;\n for (var j = 0; j < newHistogramData.length; j++) {\n this.updatePoint(j);\n }\n }\n else {\n for (var i = 0; i < data.length; i++) {\n var newData = data[i][this.xName];\n var existingData = this.dataSource[i][this.xName];\n if (data[i][this.xName] instanceof Date) {\n newData = data[i][this.xName].getTime();\n existingData = this.dataSource[i][this.xName].getTime();\n }\n if (existingData === newData) {\n var point = this.points[i];\n var getObjectValueByMappingString = this.enableComplexProperty ? getValue : this.getObjectValue;\n var existingPoint = this.dataSource[i];\n var newPoint = data[i];\n if ((this.seriesType === 'XY' || this.seriesType === 'BoxPlot') && (existingPoint[this.yName] !== newPoint[this.yName] || existingPoint[this.size] !== newPoint[this.size])) {\n point.y = getObjectValueByMappingString(this.yName, newPoint);\n if (this.type === 'Bubble' && existingPoint[this.size] !== newPoint[this.size]) {\n point.size = getObjectValueByMappingString(this.size, newPoint);\n }\n pointList.push(i);\n }\n else if (existingPoint[this.high] !== newPoint[this.high] || existingPoint[this.low] !== newPoint[this.low] ||\n existingPoint[this.open] !== newPoint[this.open] || existingPoint[this.close] !== newPoint[this.close] ||\n existingPoint[this.volume] !== newPoint[this.volume]) {\n point.high = getObjectValueByMappingString(this.high, newPoint);\n point.low = getObjectValueByMappingString(this.low, newPoint);\n point.open = getObjectValueByMappingString(this.open, newPoint);\n point.close = getObjectValueByMappingString(this.close, newPoint);\n point.volume = getObjectValueByMappingString(this.volume, newPoint);\n pointList.push(i);\n }\n point.yValue = point.y;\n this.setEmptyPoint(point, i);\n this.dataSource[i] = data[i];\n }\n else {\n samePoints = false;\n break;\n }\n }\n }\n }\n if (!samePoints) {\n this.dataSource = data;\n }\n else {\n this.chart.redraw = this.chart.enableAnimation;\n this.chart.animateSeries = false;\n this.chart.pointsAdded = true;\n var chartDuration = this.chart.duration;\n this.chart.duration = isNullOrUndefined(duration) ? 500 : duration;\n this.chart.calculateStackValues();\n this.updateSplineValue();\n if (yMax === this.yMax && yMin === this.yMin && this.visible) {\n this.chart.pointsAdded = false;\n this.chart[firstToLowerCase((this.category === 'Pareto' ? 'Column' : this.type.replace('100', ''))) + 'SeriesModule'].updateDirection(this, pointList, this.chart.requireInvertedAxis);\n if (this.chart.annotationModule) {\n this.chart.annotationModule.renderAnnotations(getElement((this.chart.element.id) + '_Secondary_Element'));\n }\n }\n else if ((yMax < this.yMax || yMin > this.yMin || yMax > this.yMax || yMin < this.yMin) && this.visible) {\n var maximumLabelWidth = this.yAxis.maxLabelSize.width;\n this.yAxis.baseModule.calculateRangeAndInterval(new Size(this.chart.availableSize.width, this.yAxis.rect.height), this.yAxis);\n if (maximumLabelWidth < this.yAxis.maxLabelSize.width) {\n this.chart.calculateBounds();\n this.chart.axisCollections.forEach(function (axis) {\n if (!setRange(axis)) {\n axis.updateAxis();\n }\n });\n this.chart.chartAxisLayoutPanel.drawPaneLines(this.chart);\n this.chart.renderAreaBorder();\n }\n else {\n if (!setRange(this.yAxis)) {\n this.yAxis.updateAxis();\n }\n if (this.type === 'Histogram' && !setRange(this.xAxis)) {\n this.xAxis.baseModule.calculateRangeAndInterval(new Size(this.xAxis.rect.width, this.chart.availableSize.height), this.xAxis);\n this.xAxis.updateAxis();\n }\n }\n this.chart.pointsAdded = false;\n this.updateSeries(false, true);\n if (this.marker.dataLabel.visible && this.chart.dataLabelModule) {\n this.chart.dataLabelModule.doDataLabelAnimation(this);\n }\n if (this.chart.stripLineModule) {\n this.chart.stripLineModule.renderStripLine(this.chart, 'Behind', this.chart.axisCollections);\n }\n }\n this.chart.redraw = false;\n this.chart.pointsRemoved = false;\n this.chart.duration = chartDuration;\n }\n };\n /**\n * Updates the chart axes based on current data and axis bounds.\n *\n * @returns {void}\n */\n Series.prototype.updateChartAxis = function () {\n var maximumLabelWidth = this.yAxis.maxLabelSize.width;\n this.yAxis.baseModule.calculateRangeAndInterval(new Size(this.chart.availableSize.width, this.yAxis.rect.height), this.yAxis);\n if (maximumLabelWidth < this.yAxis.maxLabelSize.width) {\n this.chart.calculateBounds();\n this.chart.axisCollections.forEach(function (axis) {\n if (!setRange(axis)) {\n axis.updateAxis();\n }\n });\n this.chart.chartAxisLayoutPanel.drawPaneLines(this.chart);\n this.chart.renderAreaBorder();\n }\n else {\n if (!setRange(this.xAxis)) {\n this.xAxis.baseModule.calculateRangeAndInterval(new Size(this.xAxis.rect.width, this.chart.availableSize.height), this.xAxis);\n this.xAxis.updateAxis();\n }\n if (!setRange(this.yAxis)) {\n this.yAxis.updateAxis();\n }\n }\n if (this.chart.stripLineModule) {\n this.chart.stripLineModule.renderStripLine(this.chart, 'Behind', this.chart.axisCollections);\n }\n };\n Series.prototype.updateSeries = function (xAxis, yAxis) {\n var seriesCollection = [];\n if (xAxis && yAxis) {\n var set = new Set(this.xAxis.series.concat(this.yAxis.series));\n set.forEach(function (series) {\n seriesCollection.push(series);\n });\n }\n else {\n seriesCollection = xAxis ? this.xAxis.series.slice() : this.yAxis.series.slice();\n }\n for (var _i = 0, seriesCollection_4 = seriesCollection; _i < seriesCollection_4.length; _i++) {\n var series = seriesCollection_4[_i];\n if (series.visible) {\n findClipRect(series, this.chart.enableCanvas);\n var transform = 'translate(' + this.clipRect.x + ',' + (this.clipRect.y) + ')';\n series.seriesElement.setAttribute('transform', transform);\n series.chart[firstToLowerCase(series.type.replace('100', '')) + 'SeriesModule'].render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis, series.chart.enableAnimation);\n if (series.marker.visible && (series.chart.chartAreaType === 'Cartesian') && series.type !== 'Scatter' && series.type !== 'Bubble'\n && series.type !== 'Candle' && series.type !== 'Hilo' && series.type !== 'HiloOpenClose' && series.symbolElement) {\n series.symbolElement.setAttribute('transform', transform);\n appendChildElement(series.chart.enableCanvas, series.chart.seriesElements, series.symbolElement, true);\n }\n if (series.marker.dataLabel.visible && series.chart.dataLabelModule) {\n series.chart.dataLabelCollections = [];\n series.chart.dataLabelModule.render(series, series.chart, series.marker.dataLabel);\n if (series.textElement) {\n if (series.shapeElement) {\n series.shapeElement.setAttribute('transform', transform);\n }\n appendChildElement(series.chart.enableCanvas, series.chart.dataLabelElements, series.shapeElement, true);\n series.textElement.setAttribute('transform', transform);\n appendChildElement(series.chart.enableCanvas, series.chart.dataLabelElements, series.textElement, true);\n }\n }\n if (series.chart.annotationModule) {\n series.chart.annotationModule.renderAnnotations(getElement((series.chart.element.id) + '_Secondary_Element'));\n }\n }\n }\n };\n Series.prototype.updatePoint = function (index) {\n var point = new Points();\n var textMappingName = this instanceof Series && this.marker.dataLabel.name ?\n this.marker.dataLabel.name : '';\n var xName = (this instanceof Series && this.type === 'Histogram') ? 'x' : this.xName;\n if (this.xAxis.valueType === 'Category') {\n this.pushCategoryPoint(point, index, textMappingName, xName);\n }\n else if (this.xAxis.valueType.indexOf('DateTime') > -1) {\n var point_1 = this.points[index];\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n this.pushDateTimePoint(point_1, index, textMappingName, xName, dateParser, dateFormatter);\n }\n else {\n this.pushDoublePoint(point, index, textMappingName, xName);\n }\n };\n __decorate([\n Property('')\n ], Series.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"yName\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"drawType\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"isClosed\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"bearFillColor\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"bullFillColor\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"enableSolidCandles\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"size\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"binInterval\", void 0);\n __decorate([\n Property(false)\n ], Series.prototype, \"showNormalDistribution\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"stackingGroup\", void 0);\n __decorate([\n Complex({ color: null, width: 0 }, Border)\n ], Series.prototype, \"border\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"opacity\", void 0);\n __decorate([\n Property(0)\n ], Series.prototype, \"zOrder\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"groupName\", void 0);\n __decorate([\n Property('Line')\n ], Series.prototype, \"type\", void 0);\n __decorate([\n Complex(null, ErrorBarSettings)\n ], Series.prototype, \"errorBar\", void 0);\n __decorate([\n Complex(null, MarkerSettings)\n ], Series.prototype, \"marker\", void 0);\n __decorate([\n Complex(null, ParetoOptions)\n ], Series.prototype, \"paretoOptions\", void 0);\n __decorate([\n Complex({}, DragSettings)\n ], Series.prototype, \"dragSettings\", void 0);\n __decorate([\n Collection([], Trendline)\n ], Series.prototype, \"trendlines\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"tooltipFormat\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"tooltipMappingName\", void 0);\n __decorate([\n Property('SeriesType')\n ], Series.prototype, \"legendShape\", void 0);\n __decorate([\n Property('')\n ], Series.prototype, \"legendImageUrl\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"unSelectedStyle\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"nonHighlightStyle\", void 0);\n __decorate([\n Property(1)\n ], Series.prototype, \"minRadius\", void 0);\n __decorate([\n Property(3)\n ], Series.prototype, \"maxRadius\", void 0);\n __decorate([\n Property('Natural')\n ], Series.prototype, \"splineType\", void 0);\n __decorate([\n Property(0.5)\n ], Series.prototype, \"cardinalSplineTension\", void 0);\n __decorate([\n Complex(null, EmptyPointSettings)\n ], Series.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(true)\n ], Series.prototype, \"showMean\", void 0);\n __decorate([\n Property('Normal')\n ], Series.prototype, \"boxPlotMode\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"columnWidth\", void 0);\n __decorate([\n Property(null)\n ], Series.prototype, \"columnWidthInPixel\", void 0);\n __decorate([\n Property('Rectangle')\n ], Series.prototype, \"columnFacet\", void 0);\n __decorate([\n Property(0)\n ], Series.prototype, \"columnSpacing\", void 0);\n __decorate([\n Property('#C64E4A')\n ], Series.prototype, \"negativeFillColor\", void 0);\n __decorate([\n Property('#4E81BC')\n ], Series.prototype, \"summaryFillColor\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"intermediateSumIndexes\", void 0);\n __decorate([\n Property()\n ], Series.prototype, \"sumIndexes\", void 0);\n __decorate([\n Property('Left')\n ], Series.prototype, \"step\", void 0);\n __decorate([\n Complex({ color: 'black', width: 2 }, Connector)\n ], Series.prototype, \"connector\", void 0);\n __decorate([\n Complex(null, CornerRadius)\n ], Series.prototype, \"cornerRadius\", void 0);\n return Series;\n}(SeriesBase));\nexport { Series };\n","import { Query, DataManager, Deferred } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and dataSource\n */\nvar Data = /** @class */ (function () {\n /**\n * Constructor for data module\n *\n * @param dataSource\n * @param query\n * @param dataSource\n * @param query\n * @private\n */\n function Data(dataSource, query) {\n this.initDataManager(dataSource, query);\n }\n /**\n * The function used to initialize dataManager and query\n *\n * @param dataSource\n * @param query\n * @param dataSource\n * @param query\n * @returns {void}\n * @private\n */\n Data.prototype.initDataManager = function (dataSource, query) {\n this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n this.query = query instanceof Query ? query : new Query();\n };\n /**\n * The function used to generate updated Query from chart model\n *\n * @returns {void}\n * @private\n */\n Data.prototype.generateQuery = function () {\n var query = this.query.clone();\n return query;\n };\n /**\n * The function used to get dataSource by executing given Query\n *\n * @param {Query} query - A Query that specifies to generate dataSource\n * @returns {void}\n * @private\n */\n Data.prototype.getData = function (dataQuery) {\n var _this = this;\n if (this.dataManager.ready) {\n var dataManagerDeferred_1 = new Deferred();\n var ready = this.dataManager.ready;\n ready.then(function () {\n _this.dataManager.executeQuery(dataQuery).then(function (result) {\n dataManagerDeferred_1.resolve(result);\n });\n }).catch(function (e) { dataManagerDeferred_1.reject(e); });\n return dataManagerDeferred_1.promise;\n }\n else {\n return this.dataManager.executeQuery(dataQuery);\n }\n };\n return Data;\n}());\nexport { Data };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { drawSymbol } from '../../common/utils/helper';\nimport { PathOption, Size } from '@syncfusion/ej2-svg-base';\nimport { Browser, extend, remove, isNullOrUndefined, Animation } from '@syncfusion/ej2-base';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { withInBounds, PointData, stopTimer } from '../../common/utils/helper';\nimport { colorNameToHex, convertHexToColor } from '../../common/utils/helper';\n/**\n * `Marker` Module used to render the marker for line type series.\n */\nvar MarkerExplode = /** @class */ (function (_super) {\n __extends(MarkerExplode, _super);\n /**\n * Constructor for the marker module.\n *\n * @private\n */\n function MarkerExplode(chart) {\n var _this = _super.call(this, chart) || this;\n _this.elementId = chart.element.id;\n _this.commonXvalues = [];\n return _this;\n }\n /**\n * Adds event listeners for the series.\n *\n * @returns {void}\n */\n MarkerExplode.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n /**\n * Removes event listeners for the series.\n *\n * @returns {void}\n */\n MarkerExplode.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n this.chart.off(Browser.touchEndEvent, this.mouseUpHandler);\n };\n /**\n * Handles the mouse up event.\n *\n * @returns {void}\n */\n MarkerExplode.prototype.mouseUpHandler = function () {\n var chart = this.chart;\n if (chart.isTouch && !chart.crosshair.enable && !this.isSelected(chart)) {\n this.markerMove(true);\n }\n };\n /**\n * Handles the mouse move event.\n *\n * @returns {void}\n */\n MarkerExplode.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n if ((chart.highlightMode !== 'None' || (chart.tooltip.enable)) && (!chart.isTouch || chart.startMove) && !this.isSelected(chart)) {\n this.markerMove(false);\n }\n };\n MarkerExplode.prototype.markerMove = function (remove) {\n var _this = this;\n var chart = this.chart;\n this.currentPoints = [];\n var data;\n var previous;\n var explodeSeries;\n var series;\n if (!chart.tooltip.shared || !chart.tooltip.enable) {\n data = this.getData();\n series = data.series;\n previous = this.previousPoints[0];\n explodeSeries = series && ((series.type === 'Bubble' || series.drawType === 'Scatter' || series.type === 'Scatter') ||\n (((series.type !== 'Candle') && (series.type !== 'Hilo') && (series.type !== 'HiloOpenClose')) &&\n (series.marker.visible && series.marker.width !== 0 && series.marker.height !== 0)));\n data.lierIndex = this.lierIndex;\n if (data.point && explodeSeries && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex))) {\n this.currentPoints.push(data);\n }\n if (data.point && explodeSeries && chart.isPointMouseDown) {\n this.currentPoints.push(data);\n }\n }\n else {\n if (!withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n return null;\n }\n if (chart.tooltip.enable) {\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n if (!this.chart.tooltip.showNearestPoint) {\n this.currentPoints = this.chart.tooltipModule.currentPoints;\n }\n else {\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var chartSeries = _a[_i];\n if (!chartSeries.enableTooltip || chartSeries.category === 'Indicator') {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && chartSeries.visible) {\n data = this.getClosestX(chart, chartSeries, this.commonXValue(this.chart.visibleSeries));\n }\n else if (chart.chartAreaType === 'PolarRadar' && chartSeries.visible && pointData.point !== null) {\n data = new PointData(chartSeries.points[pointData.point.index], chartSeries);\n }\n if (data) {\n this.currentPoints.push(data);\n data = null;\n }\n }\n }\n }\n }\n var length = this.previousPoints.length;\n if (this.currentPoints.length > 0 || (length > 0 && chart.tooltip.shared)) {\n if (length === 0 || chart.isPointMouseDown || (length > 0 && (this.currentPoints.length === 0 ||\n (this.previousPoints[0].point !== this.currentPoints[0].point)))) {\n if (length > 0) {\n for (var _b = 0, _c = this.previousPoints; _b < _c.length; _b++) {\n var previousPoint = _c[_b];\n if (!isNullOrUndefined(previousPoint)) {\n this.removeHighlightedMarker(previousPoint.series, previousPoint.point);\n }\n }\n }\n var _loop_1 = function (data_1) {\n if ((data_1 && data_1.point) || ((series.type !== 'Candle') &&\n (series.type !== 'Hilo') && (series.type !== 'HiloOpenClose'))) {\n stopTimer(this_1.markerExplode);\n this_1.isRemove = true;\n data_1.point.symbolLocations.map(function (location, index) {\n if (data_1.series.marker.allowHighlight && (!data_1.series.isRectSeries || data_1.point.marker.visible)) {\n _this.drawTrackBall(data_1.series, data_1.point, location, index);\n }\n });\n }\n };\n var this_1 = this;\n for (var _d = 0, _e = this.currentPoints; _d < _e.length; _d++) {\n var data_1 = _e[_d];\n _loop_1(data_1);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n }\n }\n if (!chart.tooltip.enable && ((this.currentPoints.length === 0 && this.isRemove) || (remove && this.isRemove) ||\n !withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect))) {\n this.isRemove = false;\n if (!isNullOrUndefined(this.previousPoints[0])) {\n this.markerExplode = +setTimeout(function () {\n if (_this.previousPoints[0]) {\n _this.removeHighlightedMarker(_this.previousPoints[0].series, _this.previousPoints[0].point);\n }\n }, 2000);\n }\n }\n this.currentPoints = [];\n };\n MarkerExplode.prototype.animationDuration = function () {\n var duration = 200;\n if (this.chart.maxPointCount > 100) {\n duration = 10;\n }\n else if (this.chart.maxPointCount > 50) {\n duration = 100;\n }\n return duration;\n };\n MarkerExplode.prototype.drawTrackBall = function (series, point, location, index) {\n var marker = point.marker;\n var seriesMarker = series.marker;\n var shape = marker.shape || seriesMarker.shape || 'Circle';\n var svg;\n if (shape === 'None' || shape === 'Image') {\n return null;\n }\n var element = series.symbolElement || series.seriesElement;\n var className;\n if (this.chart.highlightModule && this.chart.highlightMode !== 'None') {\n className = this.chart.highlightModule.generateStyle(series);\n }\n if (this.chart.selectionModule && this.chart.selectionMode !== 'None') {\n className = this.chart.selectionModule.generateStyle(series);\n }\n var symbolId = this.elementId + '_Series_' + series.index + '_Point_' + point.index + '_Trackball' +\n (index ? index : '');\n var size = new Size((marker.width || seriesMarker.width) + 3, (marker.height || seriesMarker.height) + 3);\n var border = (marker.border || series.border);\n var explodeSeries = (series.type === 'BoxAndWhisker' || series.type === 'Bubble' || series.type === 'Scatter');\n var borderColor = (border.color && border.color !== 'transparent') ? border.color :\n marker.fill || point.interior || (explodeSeries ? point.color : series.interior);\n var colorValue = convertHexToColor(colorNameToHex(borderColor));\n var borderWidth = marker.border ? marker.border.width : seriesMarker.border.width;\n var markerShadow = series.chart.themeStyle.markerShadow ||\n 'rgba(' + colorValue.r + ',' + colorValue.g + ',' + colorValue.b + ',0.2)';\n var markerElement = document.getElementById(this.elementId + '_Series_' + series.index + '_Point_' +\n point.index + '_Symbol');\n if (!isNullOrUndefined(markerElement)) {\n markerElement.setAttribute('visibility', 'hidden');\n }\n if (this.chart.enableCanvas) {\n var trackElement = document.getElementById(this.chart.element.id + '_Secondary_Element');\n svg = this.chart.svgRenderer.createSvg({\n id: this.chart.element.id + '_trackball_svg',\n width: this.chart.availableSize.width,\n height: this.chart.availableSize.height\n });\n svg.style.cssText = 'position: absolute; display:block; pointer-events: none';\n trackElement.appendChild(svg);\n }\n for (var i = 0; i < 2; i++) {\n var options = new PathOption(symbolId + '_' + i, i ? (marker.fill || point.color || (explodeSeries ? series.interior : '#ffffff')) : 'transparent', borderWidth + (i ? 0 : 8), i ? borderColor : markerShadow, (marker.opacity || seriesMarker.opacity), series.marker.border.dashArray, '');\n var symbol = drawSymbol(location, shape, size, marker.imageUrl, options, '', this.chart.svgRenderer, series.clipRect);\n // incident: 252450 point click selection not working while maker explode\n //symbol.setAttribute('style', 'pointer-events:none');\n symbol.setAttribute('class', this.elementId + '_EJ2-Trackball_Series_' + series.index + '_Point_' + point.index);\n var selectionId = element.id.indexOf('Symbol') !== -1 ? '_Symbol' : '';\n var seletionElem = document.getElementById(this.elementId + '_Series_' + series.index + '_Point_' +\n point.index + selectionId);\n if (className !== '' && !isNullOrUndefined(className) && !isNullOrUndefined(seletionElem) &&\n seletionElem.hasAttribute('class') && (className === seletionElem.getAttribute('class'))) {\n symbol.classList.add(className);\n }\n symbol.setAttribute('clip-path', element.getAttribute('clip-path'));\n symbol.setAttribute('transform', element.getAttribute('transform'));\n if (this.chart.enableCanvas) {\n svg.appendChild(symbol);\n }\n else {\n this.chart.svgObject.appendChild(symbol);\n }\n }\n this.doAnimation(series, point, false);\n };\n /**\n * Perform animation for the series.\n *\n * @param {Series} series - The series to animate.\n * @param {Points} point - The point to animate.\n * @param {boolean} [endAnimate=false] - Flag to indicate if the animation is ending.\n * @returns {void}\n */\n MarkerExplode.prototype.doAnimation = function (series, point, endAnimate) {\n if (endAnimate === void 0) { endAnimate = false; }\n var duration = this.animationDuration();\n var delay = series.animation.delay;\n var rectElements = document.getElementsByClassName(this.elementId + '_EJ2-Trackball_Series_' + series.index + '_Point_' + point.index);\n for (var i = 0, len = rectElements.length; i < len; i++) {\n this.trackballAnimate(rectElements[i], delay, duration, series, point.index, point.symbolLocations[0], false, endAnimate);\n }\n };\n /**\n * Perform animation for the trackball.\n *\n * @param {Element} elements - The elements to animate.\n * @param {number} delays - The delay duration for the animation.\n * @param {number} durations - The duration of the animation.\n * @param {Series} series - The series associated with the trackball.\n * @param {number} pointIndex - The index of the point to animate.\n * @param {ChartLocation} point - The location of the point to animate.\n * @param {boolean} isLabel - Flag to indicate if the animated element is a label.\n * @param {boolean} [endAnimate=false] - Flag to indicate if the animation is ending.\n * @returns {void}\n */\n MarkerExplode.prototype.trackballAnimate = function (elements, delays, durations, series, pointIndex, point, isLabel, endAnimate) {\n var centerX = point.x;\n var centerY = point.y;\n var clipX = (series.type !== 'Polar' && series.type !== 'Radar') ? series.clipRect.x : 0;\n var clipY = (series.type !== 'Polar' && series.type !== 'Radar') ? series.clipRect.y : 0;\n // let height: number = 0;\n //(elements).style.visibility = 'hidden';\n var transform = elements.getAttribute('transform');\n new Animation({}).animate(elements, {\n duration: durations,\n delay: delays,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n // height = ((args.timeStamp - args.delay) / args.duration);\n elements.setAttribute('transform', 'translate(' + (centerX + clipX)\n + ' ' + (centerY + clipY) + ') scale(1) translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n },\n end: function () {\n elements.style.visibility = '';\n elements.setAttribute('transform', transform);\n if (!isLabel && (pointIndex === series.points.length - 1)) {\n series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n }\n if (endAnimate) {\n remove(elements);\n }\n }\n });\n };\n /**\n * Remove the highlighted marker.\n *\n * @param {Series} [series=null] - The series associated with the marker to remove. Defaults to null.\n * @param {Points} [point=null] - The point associated with the marker to remove. Defaults to null.\n * @param {boolean} [fadeOut=false] - Flag to indicate if the removal should be faded out. Defaults to false.\n * @returns {void}\n */\n MarkerExplode.prototype.removeHighlightedMarker = function (series, point, fadeOut) {\n if (series === void 0) { series = null; }\n if (point === void 0) { point = null; }\n if (fadeOut === void 0) { fadeOut = false; }\n if (!isNullOrUndefined(series) && !isNullOrUndefined(point)) {\n var markerElement = document.getElementById(this.elementId + '_Series_' + series.index + '_Point_' +\n point.index + '_Symbol');\n var trackballElements = document.getElementsByClassName(this.elementId + '_EJ2-Trackball_Series_' + series.index + '_Point_' + point.index);\n if (trackballElements.length === 0) {\n var elements = document.querySelectorAll(\"[class*=\\\"\" + (this.elementId + '_EJ2-Trackball_Series_' + series.index + '_Point_' + point.index) + \"\\\"]\");\n if (elements[1]) {\n elements[1].remove();\n }\n if (elements[0]) {\n elements[0].remove();\n }\n }\n for (var i = 0, len = trackballElements.length; i < len; i++) {\n remove(trackballElements[0]);\n }\n if (!isNullOrUndefined(markerElement)) {\n markerElement.setAttribute('visibility', 'visible');\n }\n }\n else {\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point_1 = _a[_i];\n var elements = document.getElementsByClassName(this.elementId + '_EJ2-Trackball_Series_' + series.index + '_Point_' + point_1.index);\n var markerElement = document.getElementById(this.elementId + '_Series_' + series.index + '_Point_' +\n point_1.index + '_Symbol');\n for (var i = 0, len = elements.length; i < len; i++) {\n if (!isNullOrUndefined(markerElement)) {\n markerElement.setAttribute('visibility', 'visible');\n }\n remove(elements[0]);\n }\n }\n }\n if (fadeOut) {\n this.previousPoints = [];\n }\n };\n return MarkerExplode;\n}(ChartData));\nexport { MarkerExplode };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { RectOption, appendChildElement, getElement, appendClipElement } from '../../common/utils/helper';\nimport { findlElement, drawSymbol, markerAnimate, CircleOption } from '../../common/utils/helper';\nimport { PathOption, Size } from '@syncfusion/ej2-svg-base';\nimport { animationMode, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointRender } from '../../common/model/constants';\nimport { MarkerExplode } from './marker-explode';\nimport { getSaturationColor } from '../../common/utils/helper';\nexport var markerShapes = ['Circle', 'Triangle', 'Diamond', 'Rectangle', 'Pentagon', 'InvertedTriangle', 'VerticalLine', 'Cross', 'Plus', 'HorizontalLine'];\n/**\n * Marker module used to render the marker for line type series.\n */\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n /**\n * Constructor for the marker module.\n *\n * @private\n */\n function Marker(chart) {\n var _this = _super.call(this, chart) || this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Render the marker for series.\n *\n * @returns {void}\n * @private\n */\n Marker.prototype.render = function (series) {\n var _this = this;\n var redraw = series.chart.redraw;\n this.createElement(series, redraw);\n var _loop_1 = function (point) {\n if (point.visible && point.symbolLocations && point.symbolLocations.length) {\n point.symbolLocations.map(function (location, index) {\n if (series.marker.shape !== 'None') {\n _this.renderMarker(series, point, location, index, redraw);\n }\n });\n }\n };\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n _loop_1(point);\n }\n };\n Marker.prototype.renderMarker = function (series, point, location, index, redraw) {\n var seriesIndex = series.index === undefined ? series.category : series.index;\n var marker = series.marker;\n series.marker.shape = series.marker.shape ? series.marker.shape : markerShapes[seriesIndex % 10];\n var border = {\n color: marker.border.color,\n width: marker.border.width\n };\n var borderColor = marker.border.color;\n var previousLocation;\n var previousPath;\n var circlePath;\n var shapeOption;\n location.x = location.x + marker.offset.x;\n location.y = location.y - marker.offset.y;\n var isBoxPlot = series.type === 'BoxAndWhisker';\n var fill = marker.fill || ((isBoxPlot || series.marker.isFilled) ? point.interior || series.interior : '#ffffff');\n var markerElement;\n var parentElement = isBoxPlot ?\n findlElement(series.seriesElement.childNodes, 'Series_' + series.index + '_Point_' + point.index)\n : series.symbolElement;\n border.color = borderColor || series.setPointColor(point, series.interior);\n var symbolId = this.elementId + '_Series_' + seriesIndex + '_Point_' + ((series.removedPointIndex !== null && series.removedPointIndex <= point.index) || this.chart.pointsAdded ?\n (point.index + 1) : point.index) + '_Symbol' + (index ? index : '');\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: point.isEmpty ? (series.emptyPointSettings.fill || fill) : fill,\n border: {\n color: series.type === 'BoxAndWhisker' ?\n (!isNullOrUndefined(borderColor) && borderColor !== 'transparent') ? borderColor :\n getSaturationColor(fill, -0.6)\n : border.color,\n width: border.width\n },\n height: marker.height, width: marker.width, shape: marker.shape\n };\n argsData.border = series.setBorderColor(point, { width: argsData.border.width, color: argsData.border.color });\n if (!series.isRectSeries || series.type === 'BoxAndWhisker') {\n this.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n }\n point.color = argsData.fill;\n if (!argsData.cancel) {\n var y = void 0;\n if (series.type === 'RangeArea' || series.type === 'RangeColumn' || series.drawType === 'RangeColumn'\n || series.type === 'SplineRangeArea' || series.type === 'RangeStepArea') {\n y = index ? point.low : point.high;\n }\n else if (isBoxPlot) {\n y = point.outliers[index];\n }\n else {\n y = point.y;\n }\n var markerFill = argsData.point.marker.fill || argsData.fill;\n var markerBorder = void 0;\n if (!isNullOrUndefined(argsData.point.marker.border)) {\n markerBorder = {\n color: argsData.point.marker.border.color || argsData.border.color,\n width: argsData.point.marker.border.width || argsData.border.width\n };\n }\n else {\n markerBorder = { color: argsData.border.color, width: argsData.border.width };\n }\n var markerWidth = argsData.point.marker.width || argsData.width;\n var markerHeight = argsData.point.marker.height || argsData.height;\n var markerOpacity = argsData.point.marker.opacity || marker.opacity;\n var markerShape = argsData.point.marker.shape || argsData.shape;\n var imageURL = argsData.point.marker.imageUrl || marker.imageUrl;\n shapeOption = new PathOption(symbolId, markerFill, markerBorder.width, markerBorder.color, markerOpacity, series.marker.border.dashArray);\n if ((parentElement !== undefined && parentElement !== null) || this.chart.enableCanvas) {\n if (redraw && getElement(shapeOption.id)) {\n markerElement = getElement(shapeOption.id);\n circlePath = markerShape === 'Circle' ? 'c' : '';\n previousLocation = {\n x: +markerElement.getAttribute(circlePath + 'x'), y: +markerElement.getAttribute(circlePath + 'y')\n };\n previousPath = markerElement.getAttribute('d');\n }\n markerElement = drawSymbol(location, markerShape, new Size(markerWidth, markerHeight), imageURL, shapeOption, point.x.toString() + ':' + y.toString(), this.chart.renderer, series.clipRect);\n if (markerElement) {\n markerElement.setAttribute('role', 'img');\n markerElement.setAttribute('aria-label', (point.x + ': ' + point.y + ', ' + series.name));\n }\n appendChildElement(this.chart.enableCanvas, parentElement, markerElement, redraw, true, circlePath + 'x', circlePath + 'y', previousLocation, previousPath, false, false, null, series.chart.duration);\n if ((series.removedPointIndex !== null && series.removedPointIndex <= point.index)) {\n parentElement.lastChild.id = this.elementId + '_Series_' + seriesIndex + '_Point_' + point.index + '_Symbol' + (index ? index : '');\n }\n }\n point.marker = {\n border: markerBorder, fill: markerFill, height: markerHeight,\n visible: true, shape: markerShape, width: markerWidth, imageUrl: imageURL\n };\n }\n else {\n location = null;\n point.marker = {\n visible: false\n };\n }\n };\n Marker.prototype.createElement = function (series, redraw) {\n var markerClipRect;\n var marker = series.marker;\n // 8 for extend border value 5 for extend size value\n var explodeValue = marker.border.width + 8 + 5;\n var render = series.chart.svgRenderer;\n var index = series.index === undefined ? series.category : series.index;\n var options;\n var transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n if (marker.visible) {\n var markerHeight = (marker.height + explodeValue) / 2;\n var markerWidth = (marker.width + explodeValue) / 2;\n if (series.chart.chartAreaType === 'Cartesian') {\n options = new RectOption(this.elementId + '_ChartMarkerClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + (markerWidth * 2),\n height: series.clipRect.height + markerHeight * 2\n }, 0, 0, '', series.marker.border.dashArray);\n markerClipRect = appendClipElement(redraw, options, render);\n }\n else {\n options = new CircleOption(this.elementId + '_ChartMarkerClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, series.clipRect.width / 2 + series.clipRect.x, series.clipRect.height / 2 + series.clipRect.y, series.chart.radius + Math.max(markerHeight, markerWidth));\n markerClipRect = appendClipElement(redraw, options, render, 'drawCircularClipPath');\n }\n options = {\n 'id': this.elementId + 'SymbolGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.elementId + '_ChartMarkerClipRect_' + index + ')'\n };\n series.symbolElement = render.createGroup(options);\n series.symbolElement.appendChild(markerClipRect);\n if (this.chart.enableCanvas) {\n var element = document.getElementById(this.chart.element.id + '_tooltip_svg');\n element.appendChild(series.symbolElement);\n }\n }\n };\n Marker.prototype.getRangeLowPoint = function (region, series) {\n var x = region.x;\n var y = region.y;\n if (series.chart.requireInvertedAxis) {\n y += region.height / 2;\n x += series.yAxis.isAxisInverse ? region.width : 0;\n }\n else {\n y += series.yAxis.isAxisInverse ? 0 : region.height;\n x += region.width / 2;\n }\n return { x: x, y: y };\n };\n /**\n * Perform marker animation for the given series.\n *\n * @param {Series} series - The series for which marker animation needs to be performed.\n * @returns {void}\n */\n Marker.prototype.doMarkerAnimation = function (series) {\n if (!(series.type === 'Scatter' || series.type === 'Bubble' || series.type === 'Candle' || series.type === 'Hilo' ||\n series.type === 'HiloOpenClose' || (series.chart.chartAreaType === 'PolarRadar' && (series.drawType === 'Scatter')))) {\n var markerElements = series.symbolElement.childNodes;\n var delay = series.animation.delay + (series.animation.duration === 0 && animationMode === 'Enable' ? 1000 : series.animation.duration);\n var duration = series.chart.animated ? series.chart.duration : 200;\n var j = 1;\n var incFactor = (series.type === 'RangeArea' || series.type === 'RangeColumn' || series.type === 'SplineRangeArea' || series.type === 'RangeStepArea') ? 2 : 1;\n for (var i = 0; i < series.points.length; i++) {\n if (series.points[i].symbolLocations) {\n if (!series.points[i].symbolLocations.length || !markerElements[j]) {\n continue;\n }\n markerAnimate(markerElements[j], delay, duration, series, i, series.points[i].symbolLocations[0], false);\n if (incFactor === 2) {\n var lowPoint = this.getRangeLowPoint(series.points[i].regions[0], series);\n markerAnimate(markerElements[j + 1], delay, duration, series, i, lowPoint, false);\n }\n j += incFactor;\n }\n }\n }\n };\n return Marker;\n}(MarkerExplode));\nexport { Marker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { measureText, Rect, TextOption, Size, PathOption } from '@syncfusion/ej2-svg-base';\nimport { Font, Border, Margin, ContainerPadding, Location } from '../model/base';\nimport { subtractThickness, Thickness, drawSymbol, ChartLocation, titlePositionX, getTitle, textTrim, getTextAnchor } from '../utils/helper';\nimport { RectOption, textElement, stringToNumber } from '../utils/helper';\nimport { removeElement, showTooltip, getElement, appendChildElement } from '../utils/helper';\n/**\n * Configures the legends in charts.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n __extends(LegendSettings, _super);\n function LegendSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"width\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, Location)\n ], LegendSettings.prototype, \"location\", void 0);\n __decorate([\n Property('Auto')\n ], LegendSettings.prototype, \"position\", void 0);\n __decorate([\n Property('Series')\n ], LegendSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(8)\n ], LegendSettings.prototype, \"padding\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"itemPadding\", void 0);\n __decorate([\n Property('Center')\n ], LegendSettings.prototype, \"alignment\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: null, fontStyle: null, fontWeight: null, color: null }, Font)\n ], LegendSettings.prototype, \"textStyle\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeHeight\", void 0);\n __decorate([\n Property(10)\n ], LegendSettings.prototype, \"shapeWidth\", void 0);\n __decorate([\n Complex({}, Border)\n ], LegendSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ left: 0, right: 0, top: 0, bottom: 0 }, Margin)\n ], LegendSettings.prototype, \"margin\", void 0);\n __decorate([\n Complex({ left: 0, right: 0, top: 0, bottom: 0 }, ContainerPadding)\n ], LegendSettings.prototype, \"containerPadding\", void 0);\n __decorate([\n Property(8)\n ], LegendSettings.prototype, \"shapePadding\", void 0);\n __decorate([\n Property('transparent')\n ], LegendSettings.prototype, \"background\", void 0);\n __decorate([\n Property(1)\n ], LegendSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"enableHighlight\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"description\", void 0);\n __decorate([\n Property(3)\n ], LegendSettings.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"title\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: null, fontStyle: null, fontWeight: null, color: null }, Font)\n ], LegendSettings.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('Top')\n ], LegendSettings.prototype, \"titlePosition\", void 0);\n __decorate([\n Property('Normal')\n ], LegendSettings.prototype, \"textWrap\", void 0);\n __decorate([\n Property('Ellipsis')\n ], LegendSettings.prototype, \"textOverflow\", void 0);\n __decorate([\n Property(100)\n ], LegendSettings.prototype, \"maximumTitleWidth\", void 0);\n __decorate([\n Property(null)\n ], LegendSettings.prototype, \"maximumLabelWidth\", void 0);\n __decorate([\n Property(true)\n ], LegendSettings.prototype, \"enablePages\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"isInversed\", void 0);\n __decorate([\n Property(false)\n ], LegendSettings.prototype, \"reverse\", void 0);\n return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Legend base class for Chart and Accumulation chart.\n *\n * @private\n */\nvar BaseLegend = /** @class */ (function () {\n /**\n * Constructor for the dateTime module.\n *\n * @private\n */\n function BaseLegend(chart) {\n this.maxItemHeight = 0;\n this.rowHeights = [];\n this.pageHeights = [];\n this.columnHeights = [];\n this.pageXCollections = []; // pages of x locations\n this.chartRowCount = 1;\n this.legendTitleCollections = [];\n this.legendRegions = [];\n this.pagingRegions = [];\n this.chart = chart;\n this.legend = chart.legendSettings;\n this.legendID = chart.element.id + '_chart_legend';\n this.isChartControl = (chart.getModuleName() === 'chart' || chart.getModuleName() === 'chart3d');\n this.isAccChartControl = (chart.getModuleName() === 'accumulationchart' || chart.getModuleName() === 'circularchart3d');\n this.isBulletChartControl = (chart.getModuleName() === 'bulletChart');\n this.isStockChartControl = (chart.getModuleName() === 'stockChart');\n this.bulletChart = this.chart;\n this.fivePixel = 5;\n this.rowCount = 0;\n this.pageButtonSize = 8;\n this.maxColumns = 0;\n this.maxWidth = 0;\n this.currentPage = 1;\n this.backwardArrowOpacity = 0;\n this.forwardArrowOpacity = 1;\n this.arrowWidth = (2 * (this.fivePixel + this.pageButtonSize + this.fivePixel));\n this.arrowHeight = this.arrowWidth;\n this.isTop = false;\n this.isTitle = false;\n this.currentPageNumber = 1;\n }\n /**\n * Calculate the bounds for the legends.\n *\n * @returns {void}\n * @private\n */\n BaseLegend.prototype.calculateLegendBounds = function (rect, availableSize, maxLabelSize) {\n var legend = this.legend;\n var defaultValue = (this.isBulletChartControl) ? '40%' : '20%';\n this.getPosition(legend.position, availableSize);\n this.legendBounds = new Rect(rect.x, rect.y, 0, 0);\n this.isVertical = (this.position === 'Left' || this.position === 'Right');\n this.itemPadding = this.legend.itemPadding ? this.legend.itemPadding : this.isVertical ? this.legend.padding : 20;\n if (this.isVertical) {\n this.legendBounds.height = stringToNumber(legend.height, availableSize.height - (rect.y - this.chart.margin.top)) || rect.height;\n this.legendBounds.width = stringToNumber(legend.width || defaultValue, availableSize.width);\n }\n else {\n this.legendBounds.width = stringToNumber(legend.width, availableSize.width) || rect.width;\n this.legendBounds.height = stringToNumber(legend.height || defaultValue, availableSize.height);\n }\n if (this.chart.getModuleName() === 'chart3d') {\n this.library.get3DLegendBounds(availableSize, this.legendBounds, legend);\n }\n else {\n this.library.getLegendBounds(availableSize, this.legendBounds, legend);\n }\n if (!this.isBulletChartControl) {\n this.legendBounds.width += (this.legend.containerPadding.left + this.legend.containerPadding.right);\n this.legendBounds.height += (this.legend.containerPadding.top + this.legend.containerPadding.bottom);\n }\n this.getLocation(this.position, legend.alignment, this.legendBounds, rect, availableSize, maxLabelSize);\n };\n /**\n * To find legend position based on available size for chart and accumulation chart\n *\n * @param position\n * @param availableSize\n * @param position\n * @param availableSize\n * @returns {void}\n */\n BaseLegend.prototype.getPosition = function (position, availableSize) {\n var chart = this.chart;\n var accumulation = this.chart;\n if (this.isChartControl || this.isBulletChartControl || this.isStockChartControl) {\n this.position = (position !== 'Auto') ? position : 'Bottom';\n }\n else {\n if (position === 'Auto' && ((chart || accumulation).visibleSeries && (chart || accumulation).visibleSeries[0].type === 'Funnel' || (chart || accumulation).visibleSeries[0].type === 'Pyramid')) {\n position = 'Top';\n }\n this.position = (position !== 'Auto') ? position :\n (availableSize.width > availableSize.height ? 'Right' : 'Bottom');\n }\n };\n /**\n * To set bounds for chart and accumulation chart\n *\n * @param computedWidth\n * @param computedHeight\n * @param legend\n * @param legendBounds\n * @param computedWidth\n * @param computedHeight\n * @param legend\n * @param legendBounds\n * @param computedWidth\n * @param computedHeight\n * @param legend\n * @param legendBounds\n * @param computedWidth\n * @param computedHeight\n * @param legend\n * @param legendBounds\n * @returns {void}\n */\n BaseLegend.prototype.setBounds = function (computedWidth, computedHeight, legend, legendBounds) {\n var titleHeight = legend.title && legend.titlePosition === 'Top' ? this.legendTitleSize.height + this.fivePixel : 0;\n if (this.isVertical && this.isPaging && !legend.enablePages && !this.isBulletChartControl) {\n titleHeight = legend.title && legend.titlePosition === 'Top' ? this.legendTitleSize.height + this.fivePixel : 0;\n titleHeight += (this.pageButtonSize + this.fivePixel);\n }\n computedWidth = Math.min(computedWidth, legendBounds.width);\n computedHeight = Math.min(computedHeight, legendBounds.height);\n if (legend.mode === 'Gradient') {\n legendBounds.width = legend.width ? legendBounds.width : this.isVertical ? computedWidth : 0.75 * legendBounds.width;\n legendBounds.height = legend.height ? legendBounds.height : this.isVertical ? 0.75 * legendBounds.height : computedHeight;\n }\n else {\n legendBounds.width = !legend.width ? computedWidth : legendBounds.width;\n legendBounds.height = !legend.height ? computedHeight : legendBounds.height;\n }\n if (!this.isBulletChartControl) {\n if (this.isTop && legend.titleStyle.textOverflow !== 'None') {\n this.calculateLegendTitle(legend, legendBounds);\n legendBounds.height += legend.titleStyle.textOverflow === 'Wrap' && this.legendTitleCollections.length > 1 ?\n (this.legendTitleSize.height - (this.legendTitleSize.height / this.legendTitleCollections.length)) : 0;\n }\n }\n this.rowCount = Math.max(1, Math.ceil((legendBounds.height - legend.padding - titleHeight) /\n (this.maxItemHeight + legend.padding)));\n };\n /**\n * To find legend location based on position, alignment for chart and accumulation chart\n *\n * @param position\n * @param alignment\n * @param legendBounds\n * @param rect\n * @param availableSize\n * @param maxLabelSize\n * @param position\n * @param alignment\n * @param legendBounds\n * @param rect\n * @param availableSize\n * @param maxLabelSize\n * @param position\n * @param alignment\n * @param legendBounds\n * @param rect\n * @param availableSize\n * @param maxLabelSize\n * @param position\n * @param alignment\n * @param legendBounds\n * @param rect\n * @param availableSize\n * @param maxLabelSize\n * @param position\n * @param alignment\n * @param legendBounds\n * @param rect\n * @param availableSize\n * @param maxLabelSize\n * @param position\n * @param alignment\n * @param legendBounds\n * @param rect\n * @param availableSize\n * @param maxLabelSize\n */\n BaseLegend.prototype.getLocation = function (position, alignment, legendBounds, rect, availableSize, maxLabelSize) {\n var padding = this.legend.border.width;\n var isBulletChart = this.isBulletChartControl;\n var bulletChart = this.bulletChart;\n var labelIns = bulletChart.labelPosition === 'Inside';\n var ticklIns = bulletChart.tickPosition === 'Inside';\n var isVertical = bulletChart.orientation === 'Vertical';\n var categoryFieldValue = (isBulletChart && bulletChart.categoryField !== '') ?\n maxLabelSize.width + this.chart.border.width + padding * 3 : 0;\n var marginBottom = this.chart.margin.bottom;\n var legendHeight = legendBounds.height + padding + this.legend.margin.top + this.legend.margin.bottom;\n var legendWidth = legendBounds.width + padding + this.legend.margin.left + this.legend.margin.right;\n if (position === 'Bottom') {\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + (rect.height - legendHeight) + padding + this.legend.margin.top;\n legendBounds.y += (isBulletChart && !bulletChart.opposedPosition && !labelIns && !ticklIns\n && !isVertical) ? bulletChart.majorTickLines.height + marginBottom + this.legend.border.width + padding * 2 :\n (isVertical && bulletChart.categoryField !== '') ? maxLabelSize.height + padding * 2 : 0;\n subtractThickness(rect, new Thickness(0, 0, 0, legendHeight));\n }\n else if (position === 'Top') {\n var axisTextSize = void 0;\n if (this.isChartControl) {\n axisTextSize = measureText('100', this.chart.verticalAxes[0].labelStyle, this.chart.themeStyle.legendLabelFont);\n }\n legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n legendBounds.y = rect.y + padding + this.legend.margin.top;\n legendBounds.y -= (isBulletChart && bulletChart.opposedPosition && !labelIns && !ticklIns &&\n !isVertical) ? bulletChart.majorTickLines.height + this.chart.margin.top : 0;\n legendHeight -= (isBulletChart) ? -padding * 2 : (this.isChartControl ? -padding * 2 - axisTextSize.height / 2 : 0);\n subtractThickness(rect, new Thickness(0, 0, legendHeight, 0));\n }\n else if (position === 'Right') {\n legendBounds.x = rect.x + (rect.width - legendBounds.width) - this.legend.margin.right;\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n legendWidth += (isBulletChart && bulletChart.opposedPosition && !labelIns && !ticklIns &&\n isVertical) ? (this.chart.margin.left + this.chart.margin.right + bulletChart.majorTickLines.height) : 0;\n subtractThickness(rect, new Thickness(0, legendWidth, 0, 0));\n }\n else if (position === 'Left') {\n legendBounds.x = legendBounds.x + this.legend.margin.left;\n legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n legendWidth += (isBulletChart && !bulletChart.opposedPosition && !labelIns && !ticklIns &&\n isVertical) ? (legendBounds.x - this.chart.margin.left + padding + bulletChart.majorTickLines.height) :\n (bulletChart.orientation !== 'Vertical' && bulletChart.categoryField !== '') ? categoryFieldValue : 0;\n subtractThickness(rect, new Thickness(legendWidth, 0, 0, 0));\n }\n else {\n legendBounds.x = this.legend.location.x;\n legendBounds.y = this.legend.location.y;\n subtractThickness(rect, new Thickness(0, 0, 0, 0));\n }\n };\n /**\n * To find legend alignment for chart and accumulation chart\n *\n * @param start\n * @param size\n * @param legendSize\n * @param alignment\n * @param start\n * @param size\n * @param legendSize\n * @param alignment\n * @param start\n * @param size\n * @param legendSize\n * @param alignment\n * @param start\n * @param size\n * @param legendSize\n * @param alignment\n */\n BaseLegend.prototype.alignLegend = function (start, size, legendSize, alignment) {\n switch (alignment) {\n case 'Far':\n start = (size - legendSize) - start;\n break;\n case 'Center':\n start = ((size - legendSize) / 2);\n break;\n }\n return start;\n };\n /**\n * Renders the legend.\n *\n * @param chart\n * @param legend\n * @param legendBounds\n * @param redraw\n * @param chart\n * @param legend\n * @param legendBounds\n * @param redraw\n * @param chart\n * @param legend\n * @param legendBounds\n * @param redraw\n * @param chart\n * @param legend\n * @param legendBounds\n * @param redraw\n * @returns {void}\n * @private\n */\n BaseLegend.prototype.renderLegend = function (chart, legend, legendBounds, redraw) {\n var titleHeight = 0;\n var titlePlusArrowWidth = 0;\n var pagingLegendBounds = new Rect(0, 0, 0, 0);\n var requireLegendBounds = new Rect(0, 0, 0, 0);\n var firstLegend = this.findFirstLegendPosition(this.legendCollections);\n var padding = legend.padding;\n this.itemPadding = this.isBulletChartControl ? legend.padding : this.itemPadding;\n var isPaging = legend.enablePages;\n var titlePosition = legend.titlePosition;\n var upArrowHeight = this.isPaging && !legend.enablePages && this.isVertical ? this.pageButtonSize : 0;\n var legendGroup = chart.renderer.createGroup({ id: this.legendID + '_g' });\n var legendTranslateGroup = this.createLegendElements(chart, legendBounds, legendGroup, legend, this.legendID, redraw);\n this.legendRegions = [];\n this.chartRowCount = 1;\n var maxHeight = 0;\n titleHeight = !this.isTitle ? 0 : (this.isTop || this.isVertical ? this.legendTitleSize.height : 0);\n if (this.isChartControl || (this.isAccChartControl && !this.isVertical)) {\n var pageCount = 1;\n var rowHeights = this.rowHeights[0] + padding;\n for (var i = 1; i < this.rowHeights.length; i++) {\n if ((rowHeights + this.rowHeights[i] + padding) >\n (this.legendBounds.height - this.pageButtonSize - this.maxItemHeight / 2)) {\n this.pageHeights[pageCount - 1] = rowHeights + titleHeight;\n pageCount++;\n rowHeights = 0;\n }\n rowHeights += (this.rowHeights[i] + (this.isVertical ? this.itemPadding : padding));\n }\n this.pageHeights[pageCount - 1] = rowHeights + titleHeight;\n this.totalPages = pageCount;\n }\n for (var i = 0; i < this.legendCollections.length; i++) {\n if (this.legendCollections[i].text !== '') {\n maxHeight = Math.max(this.legendCollections[i].textSize.height, maxHeight);\n break;\n }\n else {\n continue;\n }\n }\n if (!this.isChartControl && !this.isAccChartControl) {\n this.maxItemHeight = Math.max(maxHeight, legend.shapeHeight);\n }\n // For new legend navigation\n if (!isPaging && this.isPaging && !this.isVertical) {\n titlePlusArrowWidth = !this.isTitle ? 0 : titlePosition === 'Left' ? this.legendTitleSize.width : 0;\n titlePlusArrowWidth += (this.pageButtonSize + (2 * this.fivePixel));\n }\n else if (this.isTitle && !this.isPaging && !this.isVertical) {\n titlePlusArrowWidth = titlePosition === ((!this.isRtlEnable) ? 'Left' : 'Right') ? (this.fivePixel + this.legendTitleSize.width) : 0;\n }\n if (chart.legendSettings.mode === 'Gradient' && this.legendCollections.length > 1) {\n this.getLinearLegend(legendBounds, chart, legend, legendTranslateGroup);\n this.totalPages = 1;\n }\n else if (firstLegend !== this.legendCollections.length) {\n var legendSeriesGroup = void 0; // legendItem group for each series group element\n var count = 0;\n var previousLegend = this.legendCollections[firstLegend];\n // starting shape center x,y position && to resolve lint error used new line for declaration\n var startPadding = this.isBulletChartControl ? padding : titlePlusArrowWidth + padding +\n (legend.shapeWidth / 2) + legend.containerPadding.left;\n var xLocation = (this.isBulletChartControl && !this.isRtlEnable) ? legendBounds.x + titlePlusArrowWidth +\n padding + (legend.shapeWidth / 2) :\n (!this.isRtlEnable) ? legendBounds.x + startPadding : legendBounds.x + ((this.chart.getModuleName() === 'accumulationchart' && this.isVertical) ? this.maxWidth : legendBounds.width) - startPadding;\n var start = new ChartLocation(xLocation, this.isBulletChartControl ? legendBounds.y + titleHeight + upArrowHeight + padding + (this.maxItemHeight / 2) :\n legendBounds.y + titleHeight + upArrowHeight + padding + (this.maxItemHeight / 2) + legend.containerPadding.top);\n var anchor = chart.isRtlEnabled || chart.enableRtl ? 'end' : 'start';\n var textOptions = new TextOption('', start.x, start.y, anchor);\n var textPadding = legend.shapePadding + this.itemPadding + legend.shapeWidth;\n // initialization for totalPages legend click totalpage again calculate\n this.totalPages = this.totalPages = (this.isAccChartControl || this.isChartControl || this.isBulletChartControl ||\n this.isStockChartControl) ? this.totalPages : 0;\n this.pageXCollections = [];\n this.legendCollections[firstLegend].location = start;\n var legendIndex = void 0;\n if (!legend.enablePages && this.isPaging) {\n var x = start.x - this.fivePixel;\n var y = start.y - this.fivePixel;\n var leftSpace = this.isTitle && !this.isVertical && titlePosition === 'Left' ?\n this.legendTitleSize.width + this.fivePixel : 0;\n var bottomSapce = this.isVertical ? (this.pageButtonSize) + Math.abs(y - legendBounds.y) : 0;\n var rightSpace = this.isTitle && !this.isVertical && titlePosition === 'Right' ?\n this.legendTitleSize.width + this.fivePixel : 0;\n rightSpace += this.isVertical ? 0 : (this.fivePixel + this.pageButtonSize + this.fivePixel);\n pagingLegendBounds = new Rect(x, y, legendBounds.width - rightSpace - leftSpace, legendBounds.height - bottomSapce);\n requireLegendBounds = pagingLegendBounds;\n }\n else {\n requireLegendBounds = legendBounds;\n }\n var legendOption = void 0;\n for (var i = 0; i < this.legendCollections.length; i++) {\n legendOption = this.legendCollections[i];\n legendIndex = !this.isReverse ? count : (this.legendCollections.length - 1) - count;\n if (this.chart.getModuleName() === 'accumulationchart') {\n legendOption.fill = (this.chart || this.chart || this.chart ||\n this.chart).visibleSeries[0].points[legendOption.pointIndex].color;\n }\n if (this.chart.getModuleName() === 'stockChart') {\n legendOption.type = this.chart.visibleSeries[count].type;\n }\n this.accessbilityText = (this.isBulletChartControl) ? 'Legend of bullet chart' + '' + legendOption.text\n : 'Click to show or hide the ' + legendOption.text + ' series';\n if (legendOption.render && legendOption.text && legendOption.text !== '') {\n legendSeriesGroup = chart.renderer.createGroup({\n id: this.legendID + this.generateId(legendOption, '_g_', legendIndex)\n });\n if (legendSeriesGroup) {\n legendSeriesGroup.setAttribute('tabindex', i === 0 ? '0' : '');\n legendSeriesGroup.setAttribute('aria-label', legend.description || (legendOption.text + ' series is ' + (legendOption.visible ? 'showing, press enter to hide the ' : 'hidden, press enter to show the ') + legendOption.text + ' series'));\n legendSeriesGroup.setAttribute('role', 'button');\n legendSeriesGroup.setAttribute('aria-pressed', legendOption.visible ? 'true' : 'false');\n }\n this.library.getRenderPoint(legendOption, start, textPadding, previousLegend, requireLegendBounds, count, firstLegend);\n this.renderSymbol(legendOption, legendSeriesGroup, legendIndex);\n this.renderText(chart, legendOption, legendSeriesGroup, textOptions, count, legendIndex);\n if (legendSeriesGroup) {\n legendSeriesGroup.style.cssText =\n 'pointer-events: bounding-box; cursor: ' + ((!legend.toggleVisibility && (chart.selectionMode === 'None' ||\n chart.highlightMode === 'None' ||\n chart.selectionMode === 'None') || this.isBulletChartControl) ? 'auto' : 'pointer');\n }\n if (legendTranslateGroup) {\n legendTranslateGroup.appendChild(legendSeriesGroup);\n }\n previousLegend = legendOption;\n }\n count++;\n }\n this.totalPages = (this.isPaging && !this.isBulletChartControl && !this.legend.enablePages && !this.isVertical &&\n this.totalPages > this.chartRowCount) ? this.chartRowCount : this.totalPages;\n if (this.isPaging && this.totalPages > 1) {\n this.renderPagingElements(chart, legendBounds, textOptions, legendGroup);\n }\n else {\n this.totalPages = 1;\n }\n }\n appendChildElement(chart.enableCanvas, chart.svgObject, legendGroup, redraw);\n };\n /**\n * To get linear legend.\n *\n * @param {Rect} legendBounds - The bounds of the legend.\n * @param {Chart | AccumulationChart | BulletChart | StockChart | Chart3D | CircularChart3D} chart - The chart instance.\n * @param {LegendSettingsModel} legend - The legend settings.\n * @param {Element} legendTranslateGroup - The group element to translate the legend.\n * @returns {void}\n * @private\n */\n BaseLegend.prototype.getLinearLegend = function (legendBounds, chart, legend, legendTranslateGroup) {\n var xmlns = 'http://www.w3.org/2000/svg';\n var previousLegend = this.legendCollections[0];\n var nextLegend = this.legendCollections[1];\n var defElement = this.chart.renderer.createDefs();\n var gradientLegendCount = 0;\n var linerGradientEle = document.createElementNS(xmlns, 'linearGradient');\n var opacity = 1;\n var fillColors = [];\n var numberItems = [];\n if (legend.title) {\n if (!this.isVertical) {\n if (legend.titlePosition === 'Left') {\n legendBounds.x += this.legendTitleSize.width;\n legendBounds.width -= this.legendTitleSize.width;\n }\n else if (legend.titlePosition === 'Right') {\n legendBounds.width -= this.legendTitleSize.width;\n }\n else if (legend.titlePosition === 'Top') {\n legendBounds.y += this.legendTitleSize.height;\n legendBounds.height -= this.legendTitleSize.height;\n }\n }\n else {\n legendBounds.y += this.legendTitleSize.height;\n legendBounds.height -= this.legendTitleSize.height;\n }\n }\n for (var _i = 0, _a = this.chart.rangeColorSettings; _i < _a.length; _i++) {\n var colorMap = _a[_i];\n if (numberItems.indexOf(colorMap.start) < 0) {\n numberItems.push(colorMap.start);\n }\n if (colorMap.colors.length > 2) {\n var diffValue = (colorMap.end - colorMap.start);\n var colorsLength = colorMap.colors.length - 1;\n if (diffValue > 0) {\n diffValue = diffValue / colorsLength;\n for (var index = 1; index < colorsLength; index++) {\n var calculatedValue = colorMap.start + (diffValue * index);\n numberItems.push(calculatedValue);\n }\n }\n else {\n for (var index = 1; index < colorsLength; index++) {\n numberItems.push(colorMap.start);\n }\n }\n }\n if (numberItems.indexOf(colorMap.end) < 0) {\n numberItems.push(colorMap.end);\n }\n for (var _b = 0, _c = colorMap.colors; _b < _c.length; _b++) {\n var fillColor = _c[_b];\n if (fillColors.indexOf(fillColor) < 0) {\n fillColors.push(fillColor);\n }\n }\n if (colorMap.colors.length > 0 && colorMap.colors.length < 2) {\n fillColors.push(colorMap.colors[0]);\n }\n }\n var x1 = this.isRtlEnable && !this.isVertical ? '100%' : '0%';\n var x2 = this.isVertical || this.isRtlEnable ? '0%' : '100%';\n var y2 = this.isVertical ? '100%' : '0%';\n linerGradientEle.setAttribute('id', this.generateId(previousLegend, 'linearGradient', gradientLegendCount));\n linerGradientEle.setAttribute('x1', x1);\n linerGradientEle.setAttribute('y1', '0%');\n linerGradientEle.setAttribute('x2', x2);\n linerGradientEle.setAttribute('y2', y2);\n var full = numberItems[numberItems.length - 1] - numberItems[0];\n for (var b = 0; b < fillColors.length; b++) {\n var offsetValue = numberItems[b] - numberItems[0];\n offsetValue = offsetValue / full;\n var stopEle = document.createElementNS(xmlns, 'stop');\n stopEle.setAttribute('offset', offsetValue.toString());\n stopEle.setAttribute('stop-color', fillColors[b]);\n stopEle.setAttribute('stop-opacity', opacity.toString());\n linerGradientEle.appendChild(stopEle);\n }\n var startLabel = previousLegend.text.toString();\n var endLabel = nextLegend.text.toString();\n var startTextSize = measureText(startLabel, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n var endTextSize = measureText(endLabel, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n var textWidth = startTextSize.width > endTextSize.width ? startTextSize.width : endTextSize.width;\n var textHeight = startTextSize.height > endTextSize.height ? startTextSize.height : endTextSize.height;\n var otherSpaces = (2 * textWidth) + (4 * legend.padding);\n var linearBarWidth = legendBounds.width;\n var linearBarHeight = legendBounds.height;\n var xValue = legendBounds.x + textWidth + (2 * legend.padding);\n var yValue = legendBounds.y + legend.padding;\n var startLabelY;\n var endLabelY;\n var startLabelX;\n var endLabelX;\n if (this.isVertical) {\n otherSpaces = (2 * textHeight) + (4 * legend.padding);\n linearBarWidth = legendBounds.width - (2 * legend.padding);\n linearBarHeight = legendBounds.height - otherSpaces;\n xValue = legendBounds.x + legend.padding;\n yValue = legendBounds.y + textHeight + (2 * legend.padding);\n startLabelY = legendBounds.y + legend.padding + textHeight;\n endLabelY = yValue + linearBarHeight + textHeight;\n startLabelX = (legendBounds.x + (legendBounds.width * 0.5)) - (textWidth * 0.5);\n endLabelX = startLabelX;\n if (linearBarWidth > 30) {\n var diffWidth = linearBarWidth - 30;\n linearBarWidth = 30;\n xValue = xValue + (diffWidth / 2);\n }\n }\n else {\n linearBarWidth = legendBounds.width - otherSpaces;\n linearBarHeight = legendBounds.height - (2 * legend.padding);\n startLabelX = legendBounds.x + ((!this.isRtlEnable) ? legend.padding + (textWidth - startTextSize.width) :\n linearBarWidth + (3 * legend.padding) + textWidth);\n endLabelX = legendBounds.x + ((!this.isRtlEnable) ? linearBarWidth + (3 * legend.padding) + textWidth :\n legend.padding + (textWidth - endTextSize.width));\n startLabelY = legendBounds.y + (legendBounds.height * 0.5) + (textHeight * 0.25);\n endLabelY = startLabelY;\n if (linearBarHeight > 30) {\n var diffHeight = linearBarHeight - 30;\n linearBarHeight = 30;\n yValue = yValue + (diffHeight / 2);\n }\n }\n var anchor = chart.enableRtl ? 'end' : '';\n var textOptions = new TextOption('', startLabelX, startLabelY, anchor, startLabel);\n var hiddenColor = '#D3D3D3';\n textOptions.id = this.legendID + this.generateId(previousLegend, '_text_', 1);\n var fontcolor = previousLegend.visible ? legend.textStyle.color || chart.themeStyle.legendLabelFont.color : hiddenColor;\n var isCanvas = this.isStockChartControl ? false : this.chart.enableCanvas;\n textElement(chart.renderer, textOptions, legend.textStyle, fontcolor, legendTranslateGroup, false, false, false, false, null, this.currentPageNumber && isCanvas ?\n new Rect(0, -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber), 0, 0) :\n null, null, null, null, null, this.chart.themeStyle.legendLabelFont);\n textOptions = new TextOption('', endLabelX, endLabelY, anchor, endLabel);\n textOptions.id = this.legendID + this.generateId(previousLegend, '_text_', 2);\n textElement(chart.renderer, textOptions, legend.textStyle, fontcolor, legendTranslateGroup, false, false, false, false, null, this.currentPageNumber && isCanvas ?\n new Rect(0, -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber), 0, 0) :\n null, null, null, null, null, this.chart.themeStyle.legendLabelFont);\n var gradientLegend = chart.renderer.drawRectangle({\n width: linearBarWidth,\n height: linearBarHeight,\n x: xValue,\n y: yValue,\n fill: 'url(#' + this.generateId(previousLegend, 'linearGradient', gradientLegendCount) + ')'\n });\n defElement.appendChild(linerGradientEle);\n legendTranslateGroup.appendChild(defElement);\n legendTranslateGroup.appendChild(gradientLegend);\n };\n /**\n * To find first valid legend text index for chart and accumulation chart\n *\n * @param legendCollection\n * @returns {number}\n * @private\n */\n BaseLegend.prototype.findFirstLegendPosition = function (legendCollection) {\n var count = 0;\n for (var _i = 0, legendCollection_1 = legendCollection; _i < legendCollection_1.length; _i++) {\n var legend = legendCollection_1[_i];\n if (legend.render && legend.text && legend.text !== '') {\n break;\n }\n count++;\n }\n return count;\n };\n /**\n * To get the legend title text width and height.\n *\n * @param legend\n * @param legendBounds\n */\n BaseLegend.prototype.calculateLegendTitle = function (legend, legendBounds) {\n if (legend.title) {\n this.isTop = legend.titlePosition === 'Top';\n var padding = legend.titleStyle.textOverflow === 'Trim' ? 2 * legend.padding : 0;\n if (this.isTop || this.isVertical) {\n this.legendTitleCollections = getTitle(legend.title, legend.titleStyle, (legendBounds.width - padding), this.chart.enableRtl, this.chart.themeStyle.legendTitleFont);\n }\n else {\n this.legendTitleCollections[0] = textTrim(legend.maximumTitleWidth, legend.title, legend.titleStyle, this.chart.enableRtl, this.chart.themeStyle.legendTitleFont);\n }\n var text = this.isTop ? legend.title : this.legendTitleCollections[0];\n this.legendTitleSize = measureText(text, legend.titleStyle, this.chart.themeStyle.legendTitleFont);\n this.legendTitleSize.height *= this.legendTitleCollections.length;\n }\n else {\n this.legendTitleSize = new Size(0, 0);\n }\n };\n /**\n * Render the legend title\n *\n * @param chart\n * @param legend\n * @param legendBounds\n * @param legendGroup\n */\n BaseLegend.prototype.renderLegendTitle = function (chart, legend, legendBounds, legendGroup) {\n var padding = legend.padding;\n var alignment = legend.titleStyle.textAlignment;\n this.isTop = legend.titlePosition === 'Top';\n var anchor = getTextAnchor(legend.titleStyle.textAlignment, chart.enableRtl);\n var x = titlePositionX(legendBounds, legend.titleStyle);\n anchor = this.isTop || this.isVertical ? anchor : (chart.enableRtl) ? 'end' : '';\n x = alignment === 'Near' ? (x + padding) : alignment === 'Far' ? (x - padding) : x;\n x = (this.isTop || this.isVertical) ? x : ((legendBounds.x) + (legend.titlePosition === 'Left' ? 5 :\n (legendBounds.width - this.legendTitleSize.width - 5)));\n var topPadding = (legendBounds.height / 2) + (this.legendTitleSize.height / 4);\n var y = legendBounds.y + (!this.isTop && !this.isVertical ? topPadding :\n (this.legendTitleSize.height / this.legendTitleCollections.length));\n var legendTitleTextOptions = new TextOption(this.legendID + '_title', x, y, anchor, this.legendTitleCollections);\n textElement(chart.renderer, legendTitleTextOptions, legend.titleStyle, legend.titleStyle.color ||\n this.chart.themeStyle.legendTitleFont.color, legendGroup, null, null, null, null, null, null, null, null, null, null, this.chart.themeStyle.legendTitleFont);\n };\n /**\n * To create legend rendering elements for chart and accumulation chart\n *\n * @param chart\n * @param legendBounds\n * @param legendGroup\n * @param legend\n * @param id\n * @param redraw\n */\n BaseLegend.prototype.createLegendElements = function (chart, legendBounds, legendGroup, legend, id, redraw) {\n var padding = legend.padding;\n var options = new RectOption(id + '_element', legend.background, legend.border, legend.opacity, legendBounds, 0, 0, '', this.legend.border.dashArray);\n var legendItemsGroup = chart.renderer.createGroup({ id: id + '_collections' });\n var isCanvas = this.isStockChartControl ? false : chart.enableCanvas;\n var clippath = chart.renderer.createClipPath({ id: id + '_clipPath' });\n options.width = (this.isRtlEnable && this.chart.getModuleName() === 'accumulationchart' && this.isVertical) ? this.maxWidth : legendBounds.width;\n if (legendGroup) {\n legendGroup.appendChild(chart.renderer.drawRectangle(options));\n }\n else {\n chart.renderer.drawRectangle(options);\n }\n if (legend.title) {\n this.renderLegendTitle(chart, legend, legendBounds, legendGroup);\n }\n if (!isCanvas) {\n legendGroup.appendChild(legendItemsGroup);\n }\n this.legendTranslateGroup = chart.renderer.createGroup({ id: id + '_translate_g' });\n if (!isCanvas) {\n legendItemsGroup.appendChild(this.legendTranslateGroup);\n }\n options.y += (this.isTop ? this.legendTitleSize.height : 0);\n options.id += '_clipPath_rect';\n options.width = ((!this.isChartControl && chart.getModuleName() !== 'bulletChart' && !this.isStockChartControl) && this.isVertical) ? this.maxWidth - padding + legend.containerPadding.left + legend.containerPadding.right\n : legendBounds.width;\n if (!isCanvas) {\n this.clipRect = chart.renderer.drawRectangle(options);\n clippath.appendChild(this.clipRect);\n }\n else {\n this.pagingClipRect = options;\n }\n appendChildElement(isCanvas, chart.svgObject, clippath, redraw);\n if (!isCanvas) {\n legendItemsGroup.style.cssText = 'clip-path:url(#' + clippath.id + ')';\n }\n return this.legendTranslateGroup;\n };\n /**\n * To render legend symbols for chart and accumulation chart\n *\n * @param legendOption\n * @param group\n * @param i\n * @param legendOption\n * @param group\n * @param i\n * @param legendOption\n * @param group\n * @param i\n */\n BaseLegend.prototype.renderSymbol = function (legendOption, group, legendIndex) {\n var control = this.isBulletChartControl ? this.chart : null;\n var symbolColor = legendOption.visible ? legendOption.fill : '#D3D3D3';\n var isStrokeWidth = (this.chart.getModuleName() === 'chart' || this.chart.getModuleName() === 'stockChart') && (((legendOption.shape === 'SeriesType') &&\n (legendOption.type.toLowerCase().indexOf('line') > -1) && (legendOption.type.toLowerCase().indexOf('area') === -1)) ||\n ((legendOption.shape === 'HorizontalLine') || (legendOption.shape === 'VerticalLine') || (legendOption.shape === 'Cross')));\n var isCustomBorder = (this.chart.getModuleName() === 'chart' || this.chart.getModuleName() === 'stockChart') &&\n (legendOption.type === 'Scatter' || legendOption.type === 'Bubble');\n var isCanvas = this.isStockChartControl ? false : this.chart.enableCanvas;\n var borderColor;\n var shape = (legendOption.shape === 'SeriesType') ? legendOption.type : legendOption.shape;\n var strokewidth = isStrokeWidth ? (this.legend.mode === 'Series' ?\n this.chart.visibleSeries[legendIndex].width : this.chart.visibleSeries[0].width) :\n (this.isBulletChartControl && legendOption.shape === 'Multiply') ? 4 : 1;\n var regionPadding;\n shape = shape === 'Scatter' ? legendOption.markerShape : shape;\n if (isCustomBorder && legendIndex < this.chart.visibleSeries.length) {\n var series = this.chart.visibleSeries[legendIndex];\n var seriesBorder = series.border;\n var isLineShapemarker = shape === 'HorizontalLine' || shape === 'VerticalLine';\n borderColor = isLineShapemarker ? symbolColor : seriesBorder.color ? seriesBorder.color : symbolColor;\n strokewidth = isLineShapemarker ? series.width : seriesBorder.width ? seriesBorder.width : 1;\n }\n var symbolOption = new PathOption(this.legendID + this.generateId(legendOption, '_shape_', legendIndex), symbolColor, strokewidth, (isCustomBorder ? borderColor : symbolColor), this.legend.opacity, legendOption.dashArray, '');\n var textSize = measureText(legendOption.text, this.legend.textStyle, this.chart.themeStyle.legendLabelFont);\n var x = this.legend.isInversed && !this.isRtlEnable ? legendOption.location.x + textSize.width + this.legend.shapePadding\n : legendOption.location.x;\n var y = legendOption.location.y;\n if (!isCanvas) {\n group.appendChild(drawSymbol({ x: x, y: y }, shape, new Size(this.legend.shapeWidth, this.legend.shapeHeight), legendOption.url, symbolOption, this.accessbilityText, this.chart.renderer, null, this.isBulletChartControl, control));\n }\n else {\n regionPadding = -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber);\n drawSymbol({ x: x, y: y }, shape, new Size(this.legend.shapeWidth, this.legend.shapeHeight), '', symbolOption, this.accessbilityText, this.chart.renderer, this.currentPageNumber ? new Rect(0, regionPadding, 0, 0) : null, this.isBulletChartControl, control);\n this.legendRegions.push({\n rect: new Rect(legendOption.location.x, legendOption.location.y, this.legend.shapeWidth, this.legend.shapeHeight + regionPadding), index: legendIndex\n });\n }\n if (shape === 'Line' && legendOption.markerVisibility && legendOption.markerShape !== 'Image' ||\n (legendOption.type === 'Doughnut' && shape === 'Doughnut')) {\n symbolOption.id = this.legendID + this.generateId(legendOption, '_shape_marker_', legendIndex);\n shape = legendOption.type === 'Doughnut' ? 'Circle' : legendOption.markerShape;\n symbolOption.fill = legendOption.type === 'Doughnut' ? '#FFFFFF' : symbolOption.fill;\n if (!isCanvas) {\n group.appendChild(drawSymbol({ x: x, y: y }, shape, new Size(this.legend.shapeWidth / 2, this.legend.shapeHeight / 2), '', symbolOption, this.accessbilityText, null, null, this.isBulletChartControl, control));\n }\n else {\n drawSymbol({ x: x, y: y }, shape, new Size(this.legend.shapeWidth / 2, this.legend.shapeHeight / 2), '', symbolOption, this.accessbilityText, this.chart.renderer, this.currentPageNumber ?\n new Rect(0, -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber), 0, 0) : null, this.isBulletChartControl, control);\n }\n }\n };\n /**\n * To render legend text for chart and accumulation chart\n *\n * @param chart\n * @param legendOption\n * @param group\n * @param textOptions\n * @param i\n * @param chart\n * @param legendOption\n * @param group\n * @param textOptions\n * @param i\n * @param chart\n * @param legendOption\n * @param group\n * @param textOptions\n * @param i\n * @param chart\n * @param legendOption\n * @param group\n * @param textOptions\n * @param i\n * @param chart\n * @param legendOption\n * @param group\n * @param textOptions\n * @param i\n */\n BaseLegend.prototype.renderText = function (chart, legendOption, group, textOptions, i, legendIndex) {\n var legend = chart.legendSettings;\n var hiddenColor = '#D3D3D3';\n var fontcolor = legendOption.visible ? legend.textStyle.color || chart.themeStyle.legendLabelFont.color : hiddenColor;\n var isCanvas = this.isStockChartControl ? false : this.chart.enableCanvas;\n textOptions.id = this.legendID + this.generateId(legendOption, '_text_', legendIndex);\n textOptions.text = legendOption.textCollection.length > 0 ? legendOption.textCollection : legendOption.text;\n if (legend.isInversed && !this.isRtlEnable) {\n textOptions.x = legendOption.location.x - (legend.shapeWidth / 2);\n }\n else if (this.isRtlEnable) {\n var textWidth = measureText(legendOption.text, legend.textStyle, this.chart.themeStyle.legendLabelFont).width;\n textOptions.x = this.chart.getModuleName() === 'bulletChart' ? legendOption.location.x - legend.shapeWidth : legendOption.location.x - ((legendOption.textCollection.length > 1 ? textWidth / legendOption.textCollection.length : textWidth) + legend.shapeWidth / 2 + legend.shapePadding);\n }\n else {\n textOptions.x = legendOption.location.x + (legend.shapeWidth / 2) + legend.shapePadding;\n }\n textOptions.y = legendOption.location.y + this.maxItemHeight / 4;\n textElement(chart.renderer, textOptions, legend.textStyle, fontcolor, group, false, false, false, false, null, this.currentPageNumber && isCanvas ?\n new Rect(0, -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber), 0, 0) :\n null, null, null, null, null, this.chart.themeStyle.legendLabelFont);\n if (isCanvas) {\n var textSize = measureText(legendOption.text, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n var region = void 0;\n for (var j = 0; j < this.legendRegions.length; j++) {\n if (this.legendRegions[j].index === i) {\n region = this.legendRegions[j];\n break;\n }\n }\n region.rect.y = textOptions.y < region.rect.y ? textOptions.y : region.rect.y;\n region.rect.width += textSize.width;\n region.rect.height = textSize.height;\n region.rect.y -= textSize.height * 0.5;\n region.rect.x -= (this.isRtlEnable) ? region.rect.width : 0;\n }\n };\n /**\n * To render legend paging elements for chart and accumulation chart\n *\n * @param chart\n * @param bounds\n * @param textOption\n * @param legendGroup\n * @param chart\n * @param bounds\n * @param textOption\n * @param legendGroup\n * @param chart\n * @param bounds\n * @param textOption\n * @param legendGroup\n * @param chart\n * @param bounds\n * @param textOption\n * @param legendGroup\n */\n BaseLegend.prototype.renderPagingElements = function (chart, bounds, textOption, legendGroup) {\n var paginggroup = chart.renderer.createGroup({ id: this.legendID + '_navigation' });\n var isCanvas = this.isStockChartControl ? false : chart.enableCanvas;\n var titleHeight = this.isBulletChartControl ? 0 : this.legendTitleSize.height;\n var grayColor = (this.chart.theme.indexOf('Dark') > -1 || this.chart.theme.indexOf('Contrast') > -1) ? '#FFFFFF' : '#545454';\n var legend = chart.legendSettings; // to solve parameter lint error, legend declaration is here\n var padding = 8; // const padding for paging elements\n var pageUp = this.legendID + (!this.isRtlEnable ? '_pageup' : '_pagedown');\n var pageDown = this.legendID + (!this.isRtlEnable ? '_pagedown' : '_pageup');\n var symbolOption = new PathOption(pageUp, 'transparent', 5, grayColor, 1, '', '');\n var iconSize = chart.availableSize.width < 110 || chart.availableSize.height < 190 ? 4 : this.pageButtonSize;\n // Page left arrow drawing calculation started here\n var rowCount = !legend.enablePages && this.isPaging && !this.isVertical && !this.isBulletChartControl ? 1 :\n (this.rowCount - 1);\n var titleWidth = this.isTitle && legend.titlePosition === 'Left' ? this.legendTitleSize.width : 0;\n this.pagingRegions = [];\n this.backwardArrowOpacity = this.currentPage !== 1 ? 1 : 0;\n this.forwardArrowOpacity = this.currentPage === this.totalPages ? 0 : 1;\n if (!isCanvas) {\n legendGroup.appendChild(paginggroup);\n }\n if (!this.isChartControl && !this.isAccChartControl) {\n if (this.isBulletChartControl || this.isStockChartControl || !this.isVertical) {\n this.totalPages = Math.ceil(this.totalPages / Math.max(1, this.rowCount - 1));\n }\n else {\n this.totalPages = Math.ceil(this.totalPages / this.maxColumns);\n }\n }\n if (paginggroup) {\n paginggroup.style.cursor = 'pointer';\n }\n if ((this.isChartControl || this.isAccChartControl) && !(!legend.enablePages && this.isPaging)) {\n this.clipPathHeight = this.pageHeights[0];\n }\n else {\n this.clipPathHeight = (rowCount * (this.maxItemHeight + legend.padding));\n }\n //this.clipPathHeight = !(this.isChartControl) ? (rowCount * (this.maxItemHeight + legend.padding)) : this.columnHeights[0];\n if (!isCanvas) {\n this.clipRect.setAttribute('height', this.clipPathHeight.toString());\n }\n else {\n //paging clipRect only for canvas mode\n this.pagingClipRect.height = this.legendBounds.height - this.clipPathHeight -\n (this.pagingClipRect.y - this.legendBounds.y) - legend.border.width;\n this.pagingClipRect.y = this.pagingClipRect.y + this.clipPathHeight;\n this.pagingClipRect.x += legend.border.width;\n this.pagingClipRect.width -= (legend.border.width + legend.border.width / 2);\n this.chart.renderer.clearRect(new Rect(this.pagingClipRect.x, this.pagingClipRect.y, this.pagingClipRect.width, this.pagingClipRect.height));\n }\n var pageTextElement;\n var x = (bounds.x + iconSize / 2);\n var y = bounds.y + this.clipPathHeight + ((titleHeight + bounds.height - this.clipPathHeight) / 2);\n if (this.isPaging && !legend.enablePages && !this.isVertical && !this.isBulletChartControl) {\n x = (bounds.x + this.pageButtonSize + titleWidth);\n y = legend.title && this.isTop ? (bounds.y + padding + titleHeight + (iconSize / 1) + 0.5) :\n (bounds.y + padding + iconSize + 0.5);\n }\n var size = measureText(this.totalPages + '/' + this.totalPages, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n var translateX = (this.isRtlEnable) ? legend.border.width + (iconSize / 2) :\n bounds.width - (2 * (iconSize + padding) + padding + size.width);\n if (!isCanvas) {\n if (this.isVertical && !legend.enablePages && !this.isBulletChartControl) {\n x = bounds.x + (bounds.width / 2);\n y = bounds.y + (iconSize / 2) + (padding / 2) + titleHeight;\n symbolOption.opacity = this.backwardArrowOpacity;\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'UpArrow', new Size(iconSize, iconSize), '', symbolOption, 'UpArrow'));\n }\n else {\n symbolOption.opacity = this.isBulletChartControl ? symbolOption.opacity :\n (legend.enablePages ? 1 : !this.isRtlEnable ? this.backwardArrowOpacity : this.forwardArrowOpacity);\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'LeftArrow', new Size(iconSize, iconSize), '', symbolOption, 'LeftArrow'));\n }\n }\n else {\n drawSymbol({ x: x, y: y }, 'LeftArrow', new Size(iconSize, iconSize), '', symbolOption, 'LeftArrow', this.chart.renderer, new Rect(translateX, 0, 0, 0));\n }\n this.pagingRegions.push(new Rect(!this.isRtlEnable ? x + bounds.width -\n (2 * (iconSize + padding) + padding + size.width) - iconSize * 0.5 : x, y - iconSize * 0.5, iconSize, iconSize));\n // Page numbering rendering calculation started here\n textOption.x = x + (iconSize / 2) + padding;\n textOption.y = y + (size.height / 4);\n textOption.id = this.legendID + '_pagenumber';\n textOption.text = !this.isRtlEnable ? '1/' + this.totalPages : this.totalPages + '/1';\n var color = (this.chart.theme.indexOf('Dark') > -1 || this.chart.theme.indexOf('Contrast') > -1) ? '#FFFFFF' : legend.textStyle.color || this.chart.themeStyle.legendLabelFont.color;\n if (isCanvas && this.totalNoOfPages) {\n textOption.text = !this.isRtlEnable ? this.currentPageNumber + '/' + this.totalNoOfPages : this.totalNoOfPages + '/' + this.currentPageNumber;\n }\n if (legend.enablePages || this.isBulletChartControl) {\n legend.textStyle.size = (chart.availableSize.width < 110 || chart.availableSize.height < 190 && !this.isBulletChartControl) ? '8px' : legend.textStyle.size;\n pageTextElement = textElement(chart.renderer, textOption, legend.textStyle, color, paginggroup, false, false, false, false, null, new Rect(translateX, 0, 0, 0), null, null, null, null, this.chart.themeStyle.legendLabelFont);\n }\n // Page right arrow rendering calculation started here\n x = textOption.x + padding + (iconSize / 2) + size.width;\n if (this.isPaging && !legend.enablePages && !this.isVertical) {\n x = (bounds.x + bounds.width - (this.isBulletChartControl ? this.fivePixel : 0) - this.pageButtonSize - (legend.title && legend.titlePosition === 'Right' ?\n this.legendTitleSize.width + this.fivePixel : 0));\n }\n symbolOption.id = pageDown;\n symbolOption.opacity = !legend.enablePages ? !this.isRtlEnable ? this.forwardArrowOpacity : this.backwardArrowOpacity : 1;\n if (!isCanvas) {\n if (this.isVertical && !legend.enablePages && !this.isBulletChartControl) {\n x = bounds.x + (bounds.width / 2);\n y = bounds.y + bounds.height - (iconSize / 2);\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'DownArrow', new Size(iconSize, iconSize), '', symbolOption, 'DownArrow'));\n }\n else {\n paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'RightArrow', new Size(iconSize, iconSize), '', symbolOption, 'RightArrow'));\n }\n }\n else {\n drawSymbol({ x: x, y: y }, 'RightArrow', new Size(iconSize, iconSize), '', symbolOption, 'RightArrow', this.chart.renderer, new Rect(translateX, 0, 0, 0));\n }\n this.pagingRegions.push(new Rect(!this.isRtlEnable ? x + (bounds.width -\n (2 * (iconSize + padding) + padding + size.width) - iconSize * 0.5) : x, y - iconSize * 0.5, iconSize, iconSize));\n if (!isCanvas && (legend.enablePages || this.isBulletChartControl)) {\n //placing the navigation buttons and page numbering in legend right corner\n paginggroup.setAttribute('transform', 'translate(' + translateX + ', ' + 0 + ')');\n }\n else {\n if (this.currentPageNumber === 1 && this.calTotalPage && (legend.enablePages || this.isBulletChartControl)) {\n this.totalNoOfPages = this.totalPages;\n this.calTotalPage = false;\n }\n if (!legend.enablePages && !this.isBulletChartControl) { // For new legend page navigation\n this.translatePage(isCanvas, null, this.currentPage - 1, this.currentPage, legend);\n }\n }\n if (legend.enablePages || this.isBulletChartControl) {\n this.translatePage(isCanvas, pageTextElement, this.currentPage - 1, this.currentPage, legend);\n }\n };\n BaseLegend.prototype.getPageHeight = function (pageHeights, pageCount) {\n var sum = 0;\n for (var i = 0; i < pageCount; i++) {\n sum += pageHeights[i];\n }\n return sum;\n };\n /**\n * To translate legend pages for chart and accumulation chart\n *\n * @param pagingText\n * @param page\n * @param pageNumber\n * @param legend\n * @param pagingText\n * @param page\n * @param pageNumber\n * @param legend\n * @param pagingText\n * @param page\n * @param pageNumber\n * @param legend\n * @param pagingText\n * @param page\n * @param pageNumber\n * @param legend\n */\n BaseLegend.prototype.translatePage = function (isCanvas, pagingText, page, pageNumber, legend) {\n var size = (this.isChartControl || this.isAccChartControl) ?\n (page ? this.getPageHeight(this.pageHeights, page) : 0) : ((this.clipPathHeight) * page);\n if (!isCanvas && (this.isChartControl || this.isAccChartControl)) {\n this.clipRect.setAttribute('height', this.pageHeights[page].toString());\n if (this.isAccChartControl && this.isPaging && !legend.enablePages && this.isVertical) {\n this.clipRect.setAttribute('height', this.legendBounds.height.toString());\n }\n }\n var translate = 'translate(0,-' + size + ')';\n if (!this.isChartControl && !this.isBulletChartControl && !this.isStockChartControl && this.isVertical) {\n var pageX = this.pageXCollections[page * this.maxColumns];\n size = (!this.isRtlEnable) ? pageX - this.legendBounds.x : (this.legendBounds.x + this.maxWidth) - pageX;\n size = size < 0 ? 0 : size; // to avoid small pixel variation\n translate = ((!this.isRtlEnable) ? 'translate(-' : 'translate(') + size + ',0)';\n }\n if (!this.chart.enableCanvas) {\n this.legendTranslateGroup.setAttribute('transform', translate);\n }\n if (!this.chart.enableCanvas && (legend.enablePages || this.isBulletChartControl)) {\n pagingText.textContent = (pageNumber) + '/' + this.totalPages;\n }\n this.currentPage = pageNumber;\n return size;\n };\n /**\n * To change legend pages for chart and accumulation chart\n *\n * @param event\n * @param pageUp\n * @param event\n * @param pageUp\n */\n BaseLegend.prototype.changePage = function (event, pageUp) {\n var legend = this.chart.legendSettings;\n var backwardArrow = document.getElementById(this.legendID + '_pageup');\n var forwardArrow = document.getElementById(this.legendID + '_pagedown');\n var isCanvas = this.isStockChartControl ? false : this.chart.enableCanvas;\n var pageText = (legend.enablePages || this.isBulletChartControl) ?\n document.getElementById(this.legendID + '_pagenumber') : null;\n var page = (legend.enablePages || this.isBulletChartControl) ? parseInt(pageText.textContent.split('/')[0], 10) :\n this.currentPage;\n if (pageUp && page > 1) {\n this.translatePage(isCanvas, pageText, (page - 2), (page - 1), legend);\n }\n else if (!pageUp && page < this.totalPages) {\n this.translatePage(isCanvas, pageText, page, (page + 1), legend);\n }\n if (this.isPaging && !legend.enablePages && !this.isBulletChartControl) {\n if (this.currentPage === this.totalPages) {\n this.hideArrow(forwardArrow);\n }\n else {\n this.showArrow(forwardArrow);\n }\n if (this.currentPage === 1) {\n this.hideArrow(backwardArrow);\n }\n else {\n this.showArrow(backwardArrow);\n }\n // this.currentPage === this.totalPages ? this.hideArrow(forwardArrow) : this.showArrow(forwardArrow);\n // this.currentPage === 1 ? this.hideArrow(backwardArrow) : this.showArrow(backwardArrow);\n }\n };\n /**\n * To hide the backward and forward arrow\n *\n * @param arrowElement\n */\n BaseLegend.prototype.hideArrow = function (arrowElement) {\n arrowElement.setAttribute('opacity', '0');\n };\n /**\n * To show the backward and forward arrow\n *\n * @param arrowElement\n */\n BaseLegend.prototype.showArrow = function (arrowElement) {\n arrowElement.setAttribute('opacity', '1');\n };\n /**\n * To find legend elements id based on chart or accumulation chart\n *\n * @param option\n * @param prefix\n * @param count\n * @param option\n * @param prefix\n * @param count\n * @param option\n * @param prefix\n * @param count\n * @private\n */\n BaseLegend.prototype.generateId = function (option, prefix, count) {\n if (this.isChartControl || this.isStockChartControl) {\n return prefix + count;\n }\n else {\n return prefix + option.pointIndex;\n }\n };\n /**\n * To show or hide trimmed text tooltip for legend.\n *\n * @param event\n * @returns {void}\n * @private\n */\n BaseLegend.prototype.move = function (event) {\n var _this = this;\n var x = this.chart.mouseX;\n var y = this.chart.mouseY;\n if (event.target.textContent.indexOf('...') > -1) {\n var targetId = event.target.id.split(this.legendID + '_text_');\n if (targetId.length === 2) {\n var index = parseInt(targetId[1], 10);\n var element = this.chart.element;\n if (!isNaN(index)) {\n if (this.chart.isTouch) {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.isChartControl) {\n showTooltip(this.chart.series[index].name, x, y, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n else {\n showTooltip(this.chart.visibleSeries[0].points[index].x.toString(), x + 10, y + 10, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n }\n }\n }\n }\n else {\n removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n }\n if (this.chart.isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = +setTimeout(function () { removeElement(_this.chart.element.id + '_EJ2_Legend_Tooltip'); }, 1000);\n }\n };\n return BaseLegend;\n}());\nexport { BaseLegend };\n/**\n * Class for legend options\n *\n * @private\n */\nvar LegendOptions = /** @class */ (function () {\n function LegendOptions(text, fill, shape, visible, type, url, markerShape, markerVisibility, pointIndex, seriesIndex, dashArray) {\n this.location = { x: 0, y: 0 };\n this.textCollection = [];\n this.text = text;\n this.fill = fill;\n this.shape = shape;\n this.url = url;\n this.visible = visible;\n this.type = type;\n this.markerVisibility = markerVisibility;\n this.markerShape = markerShape;\n this.pointIndex = pointIndex;\n this.seriesIndex = seriesIndex;\n this.dashArray = dashArray;\n }\n return LegendOptions;\n}());\nexport { LegendOptions };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { Property, Complex } from '@syncfusion/ej2-base';\nimport { Connector } from '../../common/model/base';\nimport { SeriesBase } from '../series/chart-series';\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { Rect } from '@syncfusion/ej2-svg-base';\n/**\n * Defines how to represent the market trend using technical indicators.\n */\nvar TechnicalIndicator = /** @class */ (function (_super) {\n __extends(TechnicalIndicator, _super);\n function TechnicalIndicator() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n return _this;\n }\n /**\n * Sets the data source for the series in the chart.\n *\n * @private\n * @param {Series} series - The series for which the data source is being set.\n * @param {Chart} chart - The chart instance.\n * @returns {void}\n */\n TechnicalIndicator.prototype.setDataSource = function (series, chart) {\n if (series) {\n this.xData = series.xData;\n this.yData = series.yData;\n this.points = series.points;\n }\n var type = firstToLowerCase(this.type);\n if (this.visible) {\n chart[type + 'IndicatorModule'].initDataSource(this, chart);\n }\n chart.visibleSeriesCount += this.targetSeries.length;\n };\n __decorate([\n Property('Sma')\n ], TechnicalIndicator.prototype, \"type\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"period\", void 0);\n __decorate([\n Property(14)\n ], TechnicalIndicator.prototype, \"kPeriod\", void 0);\n __decorate([\n Property(3)\n ], TechnicalIndicator.prototype, \"dPeriod\", void 0);\n __decorate([\n Property(80)\n ], TechnicalIndicator.prototype, \"overBought\", void 0);\n __decorate([\n Property(20)\n ], TechnicalIndicator.prototype, \"overSold\", void 0);\n __decorate([\n Property(2)\n ], TechnicalIndicator.prototype, \"standardDeviation\", void 0);\n __decorate([\n Property('Close')\n ], TechnicalIndicator.prototype, \"field\", void 0);\n __decorate([\n Property(12)\n ], TechnicalIndicator.prototype, \"slowPeriod\", void 0);\n __decorate([\n Property(26)\n ], TechnicalIndicator.prototype, \"fastPeriod\", void 0);\n __decorate([\n Property(true)\n ], TechnicalIndicator.prototype, \"showZones\", void 0);\n __decorate([\n Complex({ color: '#ff9933', width: 2 }, Connector)\n ], TechnicalIndicator.prototype, \"macdLine\", void 0);\n __decorate([\n Property('Both')\n ], TechnicalIndicator.prototype, \"macdType\", void 0);\n __decorate([\n Property('#2ecd71')\n ], TechnicalIndicator.prototype, \"macdPositiveColor\", void 0);\n __decorate([\n Property('#e74c3d')\n ], TechnicalIndicator.prototype, \"macdNegativeColor\", void 0);\n __decorate([\n Property('rgba(211,211,211,0.25)')\n ], TechnicalIndicator.prototype, \"bandColor\", void 0);\n __decorate([\n Complex({ color: '#ffb735', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"upperLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"lowerLine\", void 0);\n __decorate([\n Complex({ color: '#f2ec2f', width: 1 }, Connector)\n ], TechnicalIndicator.prototype, \"periodLine\", void 0);\n __decorate([\n Property('')\n ], TechnicalIndicator.prototype, \"seriesName\", void 0);\n return TechnicalIndicator;\n}(SeriesBase));\nexport { TechnicalIndicator };\n","import { print as printWindow, createElement } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nvar PrintUtils = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n *\n * @param control\n */\n function PrintUtils(control) {\n this.control = control;\n }\n /**\n * To print the accumulation and chart elements.\n *\n * @param elements\n */\n PrintUtils.prototype.print = function (elements) {\n this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n this.printWindow.moveTo(0, 0);\n this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n var argsData = {\n cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n };\n this.control.trigger(beforePrint, argsData);\n if (!argsData.cancel) {\n printWindow(argsData.htmlContent, this.printWindow);\n }\n };\n /**\n * To get the html string of the chart and accumulation\n *\n * @param elements\n * @private\n */\n PrintUtils.prototype.getHTMLContent = function (elements) {\n var div = createElement('div');\n if (elements) {\n if (elements instanceof Array) {\n for (var j = 0; j < elements.length; j++) {\n var value = elements[j];\n div.appendChild(getElement(value).cloneNode(true));\n }\n }\n else if (elements instanceof Element) {\n div.appendChild(elements.cloneNode(true));\n }\n else {\n div.appendChild(getElement(elements).cloneNode(true));\n }\n }\n else {\n div.appendChild(this.control.element.cloneNode(true));\n }\n for (var index = 0; index < div.children.length; index++) {\n var backgroundColor = (this.control.theme.indexOf('Dark') > -1 || this.control.theme.indexOf('HighContrast') > -1) ? 'rgba(0, 0, 0, 1)' : 'rgba(255, 255, 255, 1)';\n var svg = div.children[index];\n for (var childIndex = 0; childIndex < svg.children.length; childIndex++) {\n var actualBackgroundColor = void 0;\n var isSVG = false;\n if (svg.id.indexOf('_stockChart_svg') > -1) {\n actualBackgroundColor = svg.children[0].getAttribute('fill');\n isSVG = true;\n }\n else if (svg.children[childIndex].id.indexOf('_svg') > -1) {\n actualBackgroundColor = svg.children[childIndex].children[0].getAttribute('fill');\n isSVG = true;\n }\n if (isSVG) {\n actualBackgroundColor = actualBackgroundColor === 'transparent' ? backgroundColor : actualBackgroundColor;\n svg.children[childIndex].children[0].setAttribute('fill', actualBackgroundColor);\n }\n }\n div[index] = svg;\n }\n return div;\n };\n return PrintUtils;\n}());\nexport { PrintUtils };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { L10n, setValue, isNullOrUndefined, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { ChildProperty } from '@syncfusion/ej2-base';\nimport { remove, extend } from '@syncfusion/ej2-base';\nimport { Browser, Touch } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection } from '@syncfusion/ej2-base';\nimport { findClipRect, showTooltip, ImageOption, removeElement, appendChildElement, blazorTemplatesReset, withInBounds, getValueXByPoint, getValueYByPoint } from '../common/utils/helper';\nimport { textElement, RectOption, createSvg, firstToLowerCase, titlePositionX, redrawElement, getTextAnchor } from '../common/utils/helper';\nimport { appendClipElement, ChartLocation } from '../common/utils/helper';\nimport { getSeriesColor, getThemeColor } from '../common/model/theme';\nimport { Margin, Border, ChartArea, Indexes, TooltipSettings, titleSettings } from '../common/model/base';\nimport { Row, Column, Axis } from './axis/axis';\nimport { CartesianAxisLayoutPanel } from './axis/cartesian-panel';\nimport { Rect, measureText, TextOption, Size, SvgRenderer } from '@syncfusion/ej2-svg-base';\nimport { ChartData } from './utils/get-data';\nimport { Series } from './series/chart-series';\nimport { Data } from '../common/model/data';\nimport { Marker, markerShapes } from './series/marker';\nimport { LegendSettings } from '../common/legend/legend';\nimport { TechnicalIndicator } from './technical-indicators/technical-indicator';\nimport { chartMouseClick, chartDoubleClick, pointClick, pointDoubleClick, axisLabelClick, beforeResize } from '../common/model/constants';\nimport { chartMouseDown, chartMouseMove, chartMouseUp, load, pointMove, chartMouseLeave, resized } from '../common/model/constants';\nimport { ChartAnnotationSettings } from './model/chart-base';\nimport { getElement, getTitle } from '../common/utils/helper';\nimport { PrintUtils } from '../common/utils/print';\n/**\n * Configures the range color settings in the chart.\n */\nvar RangeColorSetting = /** @class */ (function (_super) {\n __extends(RangeColorSetting, _super);\n function RangeColorSetting() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], RangeColorSetting.prototype, \"start\", void 0);\n __decorate([\n Property()\n ], RangeColorSetting.prototype, \"end\", void 0);\n __decorate([\n Property([])\n ], RangeColorSetting.prototype, \"colors\", void 0);\n __decorate([\n Property('')\n ], RangeColorSetting.prototype, \"label\", void 0);\n return RangeColorSetting;\n}(ChildProperty));\nexport { RangeColorSetting };\n/**\n * Configures the crosshair in the chart.\n */\nvar CrosshairSettings = /** @class */ (function (_super) {\n __extends(CrosshairSettings, _super);\n function CrosshairSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], CrosshairSettings.prototype, \"enable\", void 0);\n __decorate([\n Property('')\n ], CrosshairSettings.prototype, \"dashArray\", void 0);\n __decorate([\n Complex({ color: null, width: 1 }, Border)\n ], CrosshairSettings.prototype, \"line\", void 0);\n __decorate([\n Property('Both')\n ], CrosshairSettings.prototype, \"lineType\", void 0);\n __decorate([\n Property('')\n ], CrosshairSettings.prototype, \"verticalLineColor\", void 0);\n __decorate([\n Property('')\n ], CrosshairSettings.prototype, \"horizontalLineColor\", void 0);\n __decorate([\n Property(1)\n ], CrosshairSettings.prototype, \"opacity\", void 0);\n return CrosshairSettings;\n}(ChildProperty));\nexport { CrosshairSettings };\n/**\n * Configures the zooming behavior for the chart.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n __extends(ZoomSettings, _super);\n function ZoomSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableSelectionZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePinchZooming\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"showToolbar\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableMouseWheelZooming\", void 0);\n __decorate([\n Property(true)\n ], ZoomSettings.prototype, \"enableDeferredZooming\", void 0);\n __decorate([\n Property('XY')\n ], ZoomSettings.prototype, \"mode\", void 0);\n __decorate([\n Property(['Zoom', 'ZoomIn', 'ZoomOut', 'Pan', 'Reset'])\n ], ZoomSettings.prototype, \"toolbarItems\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enablePan\", void 0);\n __decorate([\n Property(false)\n ], ZoomSettings.prototype, \"enableScrollbar\", void 0);\n return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Represents the chart control.\n * ```html\n *
\n * \n * ```\n *\n * @public\n */\nvar Chart = /** @class */ (function (_super) {\n __extends(Chart, _super);\n /**\n * Constructor for the chart component.\n *\n * @param {ChartModel} [options] - The chart model options.\n * @param {string | HTMLElement} [element] - The element ID or instance where the chart needs to be rendered.\n * @private\n */\n function Chart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.rotatedDataLabelCollections = [];\n /** @public */\n _this.animated = false;\n /** @private */\n _this.isPointMouseDown = false;\n /** @private */\n _this.isScrolling = false;\n /** @private */\n _this.checkResize = 0;\n /** @private */\n _this.visible = 0;\n /** @private */\n _this.clickCount = 0;\n /** @private */\n _this.maxPointCount = 0;\n /** @private */\n _this.singleClickTimer = 0;\n /** @private */\n _this.chartAreaType = 'Cartesian';\n /** @private */\n _this.isRtlEnabled = false;\n _this.isCrosshair = true;\n _this.chartid = 57723;\n /** @private */\n _this.isLegendClicked = false;\n _this.isZoomed = false;\n _this.previousTargetId = '';\n _this.currentPointIndex = 0;\n _this.currentSeriesIndex = 0;\n _this.currentLegendIndex = 0;\n _this.previousPageX = null;\n _this.previousPageY = null;\n _this.allowPan = false;\n /** @private */\n _this.pointsRemoved = false;\n /** @private */\n _this.pointsAdded = false;\n setValue('mergePersistData', _this.mergePersistChartData, _this);\n return _this;\n }\n /**\n * To manage persist chart data.\n *\n * @returns {void}\n */\n Chart.prototype.mergePersistChartData = function () {\n var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n if (!(isNullOrUndefined(data) || (data === ''))) {\n var dataObj = JSON.parse(data);\n var keys = Object.keys(dataObj);\n this.isProtectedOnChange = true;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if ((typeof this[key] === 'object') && !isNullOrUndefined(this[key])) {\n extend(this[key], dataObj[key]);\n }\n else {\n this[key] = dataObj[key];\n }\n }\n this.isProtectedOnChange = false;\n }\n };\n /**\n * Checks if the element ID contains special characters.\n *\n * @param {string} elementId - The ID of the element.\n * @returns {string} - The modified ID without special characters.\n */\n Chart.prototype.isIdHasSpecialCharacter = function (elementId) {\n var regex = /^[A-Za-z ]+$/;\n var numberRegex = /^[0-9 ]+$/;\n var childElementId = '';\n if (!regex.test(elementId)) {\n var start = 0;\n if (numberRegex.test(elementId[0])) {\n childElementId += ('\\\\3' + elementId[0]);\n start = 1;\n }\n for (var i = start; i < elementId.length; i++) {\n if (!regex.test(elementId[i]) && elementId.indexOf('-') === -1 &&\n elementId.indexOf('_') === -1 && elementId.indexOf('\\\\') === -1 && !numberRegex.test(elementId[i])) {\n childElementId += ('\\\\' + elementId[i]);\n }\n else {\n childElementId += elementId[i];\n }\n }\n return childElementId;\n }\n else {\n return elementId;\n }\n };\n /**\n * Initialize the event handler.\n */\n Chart.prototype.preRender = function () {\n this.element.id = this.isIdHasSpecialCharacter(this.element.id);\n // It is used for checking blazor framework or not.\n var blazor = 'Blazor';\n this.isBlazor = window[blazor];\n this.allowServerDataBinding = false;\n this.markerIndex = 0;\n this.unWireEvents();\n this.initPrivateVariable();\n this.setCulture();\n this.wireEvents();\n if (this.stockChart) {\n if (this.stockChart.tooltip.header === null) {\n this.tooltip.header = '${point.x}';\n }\n if (this.stockChart.tooltip.format === null) {\n this.tooltip.format = 'High : ${point.high}
Low :' +\n ' ${point.low}
Open : ${point.open}
Close : ${point.close}';\n }\n }\n this.element.setAttribute('dir', this.enableRtl ? 'rtl' : 'ltr');\n };\n Chart.prototype.initPrivateVariable = function () {\n this.animateSeries = true;\n this.delayRedraw = false;\n this.dragY = null;\n this.horizontalAxes = [];\n this.verticalAxes = [];\n this.refreshAxis();\n this.refreshDefinition(this.rows);\n this.refreshDefinition(this.columns);\n if (this.tooltipModule) {\n this.tooltipModule.previousPoints = [];\n }\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-label', this.description || this.title + '. Syncfusion interactive chart.');\n if (!(this.element.classList.contains('e-chart-focused'))) {\n this.element.setAttribute('class', this.element.getAttribute('class') + ' e-chart-focused');\n }\n if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-chart').length;\n var elementid = 'chart_' + this.chartid + '_' + collection;\n while (document.getElementById(elementid)) {\n collection++;\n elementid = 'chart_' + this.chartid + '_' + collection;\n }\n this.element.id = 'chart_' + this.chartid + '_' + collection;\n }\n //seperate ID to differentiate chart and stock chart\n this.svgId = this.stockChart ? this.stockChart.element.id + '_stockChart_chart' :\n this.element.id + (this.enableCanvas ? '_canvas' : '_svg');\n };\n /**\n * To Initialize the control rendering.\n */\n Chart.prototype.render = function () {\n var _this = this;\n this.svgRenderer = new SvgRenderer(this.element.id);\n var loadEventData = {\n chart: this.isBlazor ? {} : this, theme: this.theme, name: load, cancel: false\n };\n if (!this.stockChart) {\n /**\n * Load event for the chart will be triggered only chart componet, if this is stock chart, load event did not triggered.\n */\n this.trigger(load, loadEventData, function () {\n if (!loadEventData.cancel) {\n _this.cartesianChartRendering(loadEventData);\n }\n });\n }\n else {\n // The fix is specific for nextjs app, as window is set as not defined for server side application like nextjs.\n this.isRtlEnabled = (window.getComputedStyle(document.querySelector('body')).direction === 'rtl');\n this.cartesianChartRendering(loadEventData);\n }\n this.applyZoomkit();\n };\n Chart.prototype.cartesianChartRendering = function (beforeRenderData) {\n this.theme = this.isBlazor ? beforeRenderData.theme : this.theme;\n this.setTheme();\n this.createChartSvg();\n this.markerRender = new Marker(this);\n this.calculateAreaType();\n this.calculateVisibleSeries();\n this.initTechnicalIndicators();\n this.initTrendLines();\n this.calculateVisibleAxis();\n this.processData();\n this.renderComplete();\n this.mouseMoveEvent();\n this.allowServerDataBinding = true;\n };\n /**\n * Gets the localized label by locale keyword.\n *\n * @param {string} key key\n * @returns {string} localized label\n */\n Chart.prototype.getLocalizedLabel = function (key) {\n return this.localeObject.getConstant(key);\n };\n /**\n * Initiates animation for the chart.\n *\n * @param {number} [duration] - The duration of the animation in milliseconds.\n * @returns {void}\n * @private\n */\n Chart.prototype.animate = function (duration) {\n this.redraw = true;\n this.animated = true; //used to set duration as 1000 for animation at default 300\n this.duration = duration ? duration : 1000;\n if (this.tooltipModule) {\n this.tooltipModule.removeHighlightedMarker(this.tooltipModule.previousPoints, true);\n }\n else if (this.markerRender.previousPoints) {\n for (var previousPoint = 0; previousPoint < this.markerRender.previousPoints.length; previousPoint++) {\n this.markerRender.removeHighlightedMarker(this.markerRender.previousPoints[previousPoint].series, this.markerRender.previousPoints[previousPoint].point);\n }\n }\n };\n /**\n * Refresh the chart bounds.\n *\n * @private\n */\n Chart.prototype.refreshBound = function () {\n this.rotatedDataLabelCollections = [];\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.getLegendOptions(this.visibleSeries, this);\n }\n /**\n * I264230, EJ2-36761\n * Issue: Tooltip doesnot appears after zooming and hovering on same point\n * Root cause: While performing zoom, previous points in tooltip restore.\n * Fix: previous points set to empty array\n */\n if (this.tooltip.enable && this.tooltipModule) {\n this.tooltipModule.previousPoints = [];\n }\n this.calculateStackValues();\n this.calculateBounds();\n //this prevents the initial rendering of stock chart\n if (this.stockChart && !this.stockChart.rangeFound) {\n if (this.stockChart.enablePeriodSelector || this.stockChart.enableSelector) {\n return null;\n }\n }\n this.renderElements();\n removeElement('chartmeasuretext');\n this.removeSelection();\n if (this.markerRender) {\n this.markerRender.mergeXvalues(this.visibleSeries);\n }\n };\n /**\n * To calcualte the stack values.\n *\n * @returns {void}\n * @private\n */\n Chart.prototype.calculateStackValues = function () {\n var series;\n var isCalculateStacking = false;\n for (var i = 0, len = this.visibleSeries.length; i < len; i++) {\n series = this.visibleSeries[i];\n if (series.visible) {\n series.position = series.rectCount = undefined;\n }\n if (((series.type.indexOf('Stacking') !== -1) || (series.drawType.indexOf('Stacking') !== -1\n && this.chartAreaType === 'PolarRadar')) && !isCalculateStacking) {\n series.calculateStackedValue(series.type.indexOf('100') > -1, this);\n isCalculateStacking = true;\n }\n }\n };\n Chart.prototype.removeSelection = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible) {\n for (var _b = 0, _c = series.points; _b < _c.length; _b++) {\n var point = _c[_b];\n point.isSelect = false;\n }\n }\n }\n if (getElement(this.element.id + '_ej2_drag_multi_group')) {\n if (this.selectionMode.indexOf('Drag') > -1) {\n this.selectionModule.filterArray = [];\n }\n removeElement(this.element.id + '_ej2_drag_multi_group');\n this.selectionModule.calculateDragSelectedElements(this, new Rect(0, 0, 0, 0), true);\n }\n else if (getElement(this.element.id + '_ej2_drag_group')) {\n if (this.selectionMode !== 'Lasso') {\n this.selectionModule.filterArray = [];\n }\n removeElement(this.element.id + '_ej2_drag_group');\n this.selectionModule.calculateDragSelectedElements(this, new Rect(0, 0, 0, 0), true);\n }\n };\n Chart.prototype.renderElements = function () {\n this.renderBorder();\n this.renderTitle();\n this.renderAreaBorder();\n this.renderSeriesElements(this.renderAxes());\n this.renderLegend();\n this.applyZoomkit();\n this.performSelection();\n this.setSecondaryElementPosition();\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var value = _a[_i];\n updateBlazorTemplate(this.element.id + '_DataLabel', 'Template', value.marker.dataLabel);\n }\n this.renderAnnotation();\n };\n /**\n * To render the legend\n *\n * @private\n */\n Chart.prototype.renderAxes = function () {\n this.yAxisElements = this.renderer.createGroup({ id: this.element.id + 'yAxisCollection' });\n var axisElement;\n if (this.rows.length > 0 && this.columns.length > 0) {\n axisElement = this.chartAxisLayoutPanel.renderAxes();\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Behind', this.axisCollections);\n }\n return axisElement;\n };\n /**\n * To render the legend\n */\n Chart.prototype.renderLegend = function () {\n if (this.legendModule && this.legendModule.legendCollections.length && this.legendSettings.visible) {\n this.legendModule.calTotalPage = true;\n var borderWidth = this.legendSettings.border.width;\n var bounds = this.legendModule.legendBounds;\n var rect = new Rect(bounds.x, bounds.y, bounds.width, bounds.height);\n if (this.enableCanvas) {\n rect = new Rect(rect.x - borderWidth / 2, rect.y - borderWidth / 2, rect.width + borderWidth, rect.height + borderWidth);\n this.renderer.canvasClip(rect);\n }\n this.legendModule.renderLegend(this, this.legendSettings, bounds);\n if (this.enableCanvas) {\n this.renderer.canvasRestore();\n }\n }\n if (!this.redraw) {\n if (!this.stockChart) {\n this.element.appendChild(this.svgObject);\n }\n else {\n if (!getElement(this.stockChart.chartObject.id)) {\n this.stockChart.mainObject.appendChild(this.svgObject);\n }\n }\n }\n };\n /**\n * To set the left and top position for data label template for center aligned chart.\n *\n * @returns {void}\n */\n Chart.prototype.setSecondaryElementPosition = function () {\n var element = getElement(this.element.id + '_Secondary_Element');\n if (!element) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.svgId).getBoundingClientRect();\n element.style.left = Math.max(((svgRect.left - rect.left) / this.scaleX), 0) + 'px';\n element.style.top = Math.max(((svgRect.top - rect.top) / this.scaleY), 0) + 'px';\n };\n Chart.prototype.initializeModuleElements = function () {\n this.dataLabelCollections = [];\n var elementId = this.element.id;\n if (this.series.length) {\n this.seriesElements = this.svgRenderer.createGroup({ id: elementId + 'SeriesCollection' });\n }\n if (this.indicators.length) {\n this.indicatorElements = this.renderer.createGroup({ id: elementId + 'IndicatorCollection' });\n }\n if (this.hasTrendlines()) {\n this.trendLineElements = this.renderer.createGroup({ id: elementId + 'TrendLineCollection' });\n }\n this.dataLabelElements = this.renderer.createGroup({ id: elementId + 'DataLabelCollection' });\n };\n Chart.prototype.hasTrendlines = function () {\n var isTrendline;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n isTrendline = series.trendlines.length ? true : false;\n if (isTrendline) {\n break;\n }\n }\n return isTrendline;\n };\n Chart.prototype.renderSeriesElements = function (axisElement) {\n // Initialize the series elements values\n this.initializeModuleElements();\n var elementId = this.element.id;\n if (this.element.tagName !== 'g') {\n var tooltipDiv = redrawElement(this.redraw, elementId + '_Secondary_Element') ||\n this.createElement('div');\n tooltipDiv.id = elementId + '_Secondary_Element';\n tooltipDiv.style.cssText = 'position: relative';\n appendChildElement(false, this.element, tooltipDiv, this.redraw);\n }\n // For canvas\n if (this.enableCanvas) {\n var tooltipdiv = document.getElementById(elementId + '_Secondary_Element');\n tooltipdiv = !tooltipdiv ? this.createElement('div', { id: elementId + '_Secondary_Element',\n attrs: { 'style': 'position: relative; left:0px; top:0px' } }) : tooltipdiv;\n var svg = this.svgRenderer.createSvg({\n id: elementId + '_tooltip_svg',\n width: this.availableSize.width,\n height: this.availableSize.height\n });\n svg.style.cssText = 'position: absolute; pointer-events: none';\n tooltipdiv.appendChild(svg);\n }\n // For userInteraction\n if (this.tooltip.enable) {\n appendChildElement(this.enableCanvas, this.svgObject, this.renderer.createGroup({ id: elementId + '_UserInteraction', style: 'pointer-events:none;' }), this.redraw);\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.initializeIndicator();\n this.initializeTrendLine();\n this.renderSeries();\n // Trendline is append to DOM after the series\n if (this.trendLineElements) {\n appendChildElement(this.enableCanvas, this.svgObject, this.trendLineElements, this.redraw);\n }\n this.appendElementsAfterSeries(axisElement);\n }\n };\n /**\n * Renders the series on the chart.\n *\n * @private\n * @returns {void}\n */\n Chart.prototype.renderSeries = function () {\n var visibility;\n if (this.enableCanvas) {\n // To clip the series rect for canvas\n this.renderer.canvasClip(this.chartAxisLayoutPanel.seriesClipRect);\n }\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.category === 'TrendLine') {\n visibility = this.series[item.sourceIndex].trendlines[item.index].visible;\n }\n else {\n visibility = item.visible;\n }\n if (visibility) {\n this.visible++;\n findClipRect(item, this.enableCanvas);\n if (this.enableCanvas) {\n // To render scatter and bubble series in canvas\n this.renderCanvasSeries();\n }\n item.renderSeries(this);\n }\n else if (item.isLegendClicked && (item.type.indexOf('StackingArea') > -1 || item.type.indexOf('StackingBar') > -1 || item.type.indexOf('StackingColumn') > -1)) {\n findClipRect(item, this.enableCanvas);\n item.renderSeries(this);\n }\n }\n if (this.enableCanvas) {\n this.renderer.canvasRestore();\n }\n this.visible = 0;\n var options = {\n 'id': this.element.id + '_ChartAreaClipRect_',\n 'x': this.chartAxisLayoutPanel.seriesClipRect.x,\n 'y': this.chartAxisLayoutPanel.seriesClipRect.y,\n 'width': this.chartAxisLayoutPanel.seriesClipRect.width,\n 'height': this.chartAxisLayoutPanel.seriesClipRect.height,\n 'fill': 'transparent',\n 'stroke-width': 1,\n 'stroke': 'Gray'\n };\n if (!this.seriesElements || (options.height < 0 || options.width < 0)) {\n return;\n }\n var clipRectElement;\n if (this.chartAreaType === 'PolarRadar') {\n clipRectElement = appendClipElement(this.redraw, options, this.renderer, 'drawCircularClipPath');\n }\n else {\n clipRectElement = appendClipElement(this.redraw, options, this.renderer);\n }\n if (!this.enableCanvas) {\n this.seriesElements.appendChild(clipRectElement);\n }\n var seriesSvg = document.getElementById(this.element.id + '_series_svg');\n if (seriesSvg) {\n appendChildElement(false, seriesSvg, this.seriesElements, this.redraw);\n }\n else {\n appendChildElement(this.enableCanvas, this.svgObject, this.seriesElements, this.redraw);\n }\n };\n Chart.prototype.renderCanvasSeries = function () {\n // const svgElement: Element;\n // svgElement = (this.enableCanvas) ?\n // svgElement : this.svgObject;\n // const canvas: boolean = (this.enableCanvas) ?\n // false : this.enableCanvas;\n var svgElement;\n // let canvas: boolean;\n if (this.enableCanvas) {\n var tempSvgElement = svgElement;\n svgElement = tempSvgElement;\n // canvas = false;\n }\n else {\n svgElement = this.svgObject;\n // canvas = this.enableCanvas;\n }\n };\n Chart.prototype.initializeIndicator = function () {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (this[firstToLowerCase(indicator.type) + 'IndicatorModule']) {\n this[firstToLowerCase(indicator.type) + 'IndicatorModule'].createIndicatorElements(this, indicator, indicator.index);\n }\n }\n if (this.indicatorElements) {\n appendChildElement(this.enableCanvas, this.svgObject, this.indicatorElements, this.redraw);\n }\n };\n Chart.prototype.initializeTrendLine = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.trendlines.length) {\n this.trendLineModule.getTrendLineElements(series, this);\n }\n }\n };\n Chart.prototype.appendElementsAfterSeries = function (axisElement) {\n if (this.chartAreaType === 'PolarRadar') {\n appendChildElement(this.enableCanvas, this.svgObject, this.yAxisElements, this.redraw);\n }\n appendChildElement(this.enableCanvas, this.svgObject, axisElement, this.redraw);\n if ((this.zoomModule && this.zoomSettings.enableScrollbar && this.scrollElement.childElementCount) ||\n (this.scrollElement && this.scrollElement.childElementCount)) {\n appendChildElement(false, getElement(this.element.id + '_Secondary_Element'), this.scrollElement, this.redraw);\n }\n if (this.stripLineModule) {\n this.stripLineModule.renderStripLine(this, 'Over', this.axisCollections);\n }\n if (!this.tooltip.enable) {\n appendChildElement(this.enableCanvas, this.svgObject, this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }), this.redraw);\n }\n if (this.stockChart) {\n this.stockChart.calculateStockEvents();\n }\n };\n Chart.prototype.applyZoomkit = function () {\n /**\n * Issue: Zoomkit not visible after performing refresh()\n * Fix: this method called without checking `zoomModule.isZoomed`\n */\n if (this.chartAreaType === 'PolarRadar') {\n return;\n }\n if (!this.redraw && this.zoomModule && (!this.zoomSettings.enablePan || this.zoomModule.performedUI ||\n this.zoomSettings.showToolbar)) {\n this.zoomModule.applyZoomToolkit(this, this.axisCollections);\n }\n };\n /**\n * Render annotation perform here.\n *\n * @private\n * @returns {void}\n */\n Chart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n //for stock chart, stock chart's id is added to render the annotations\n this.annotationModule.renderAnnotations(getElement((this.stockChart ? this.stockChart.element.id : this.element.id) + '_Secondary_Element'));\n }\n };\n Chart.prototype.performSelection = function () {\n var selectedDataIndexes = [];\n if (this.selectionModule) {\n selectedDataIndexes = extend([], this.selectionModule.selectedDataIndexes, null, true);\n this.selectionModule.invokeSelection(this);\n }\n if (this.highlightModule) {\n this.highlightModule.invokeHighlight(this);\n }\n if (selectedDataIndexes.length > 0) {\n this.selectionModule.selectedDataIndexes = selectedDataIndexes;\n this.selectionModule.redrawSelection(this, this.selectionMode);\n }\n };\n Chart.prototype.processData = function (render) {\n if (render === void 0) { render = true; }\n this.visibleSeriesCount = 0;\n var check = true;\n var prevPointCount = 0;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (!series.visible && !this.legendSettings.visible) {\n this.visibleSeriesCount++;\n continue;\n }\n if (series.category !== 'Indicator' && series.category !== 'TrendLine') {\n this.initializeDataModule(series);\n }\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n if (indicator.dataSource) {\n var techIndicator = indicator;\n this.initializeDataModule(techIndicator);\n check = false;\n }\n }\n if (render && (!this.visibleSeries.length || this.visibleSeriesCount === this.visibleSeries.length && check)) {\n this.refreshBound();\n this.trigger('loaded', { chart: this.isBlazor ? {} : this });\n }\n if (!this.stockChart && this.visibleSeries.length > 0) {\n for (var _d = 0, _e = this.visibleSeries; _d < _e.length; _d++) {\n var series = _e[_d];\n if (!isNullOrUndefined(series.points)) {\n this.maxPointCount = Math.max(prevPointCount, series.points.length);\n prevPointCount = series.points.length;\n }\n }\n }\n };\n Chart.prototype.initializeDataModule = function (series) {\n series.xData = [];\n series.yData = [];\n var dataSource;\n var isAngular = 'isAngular';\n if (this[isAngular]) {\n dataSource = Object.keys(series.dataSource).length ? series.dataSource : this.dataSource;\n }\n else {\n dataSource = series.dataSource || this.dataSource;\n }\n series.dataModule = new Data(dataSource, series.query);\n series.points = [];\n series.refreshDataManager(this);\n };\n /**\n * To provide the array of modules needed for control rendering.\n *\n * @returns {void} - To provide the array of modules needed for control rendering.\n * @private\n */\n Chart.prototype.calculateBounds = function () {\n var margin = this.margin;\n // Title Height;\n var titleHeight = 0;\n var subTitleHeight = 0;\n var padding = this.titleStyle.position === 'Top' || (this.titleStyle.position === 'Bottom' && !this.legendSettings.visible) ? 15 : 5;\n var left = margin.left + this.border.width;\n var width = this.availableSize.width - left - margin.right - this.border.width;\n var elementSpacing = 0;\n this.titleCollection = [];\n this.subTitleCollection = [];\n if (this.title) {\n this.titleCollection = getTitle(this.title, this.titleStyle, width, this.enableRtl, this.themeStyle.chartTitleFont);\n titleHeight = (measureText(this.title, this.titleStyle, this.themeStyle.chartTitleFont).height *\n this.titleCollection.length) + padding;\n if (this.subTitle) {\n this.subTitleCollection = getTitle(this.subTitle, this.subTitleStyle, width, this.enableRtl, this.themeStyle.chartSubTitleFont);\n subTitleHeight = (measureText(this.subTitle, this.subTitleStyle, this.themeStyle.chartSubTitleFont).height *\n this.subTitleCollection.length) + padding;\n }\n }\n else if (this.legendSettings.position !== 'Top' && this.border.width) {\n elementSpacing = 10;\n }\n var top = margin.top + elementSpacing + this.border.width + this.chartArea.border.width * 0.5;\n var height = this.availableSize.height - top - this.border.width - margin.bottom;\n var marginTotal = subTitleHeight + titleHeight + this.titleStyle.border.width + this.subTitleStyle.border.width;\n switch (this.titleStyle.position) {\n case 'Top':\n top += marginTotal;\n height -= marginTotal;\n break;\n case 'Bottom':\n height -= marginTotal;\n break;\n case 'Left':\n left += marginTotal;\n width -= marginTotal;\n break;\n case 'Right':\n left -= (this.titleStyle.border.width + this.subTitleStyle.border.width);\n width -= marginTotal;\n break;\n }\n if (this.stockChart && this.stockChart.legendSettings.visible && this.stockChart.stockLegendModule) {\n if (this.stockChart.legendSettings.position === 'Top') {\n top += this.stockChart.stockLegendModule.legendBounds.height;\n }\n else if (this.stockChart.legendSettings.position === 'Left') {\n left += this.stockChart.stockLegendModule.legendBounds.width;\n }\n }\n this.initialClipRect = new Rect(left, top, width, height);\n if (this.legendModule && this.legendSettings.visible) {\n this.legendModule.calculateLegendBounds(this.initialClipRect, this.availableSize, null);\n }\n this.chartAxisLayoutPanel.measureAxis(this.initialClipRect);\n };\n /**\n * Prints the chart or specified element.\n *\n * @param {string[] | string | Element} id - The ID or array of IDs of the elements to print.\n * @returns {void}\n */\n Chart.prototype.print = function (id) {\n var exportChart = new PrintUtils(this);\n var width = this.width;\n if (this.getModuleName() === 'chart' && parseInt(this.width, 10) >= 80 && this.width.indexOf('%') > -1) {\n this.width = '80%';\n this.dataBind();\n }\n exportChart.print(id);\n if (this.getModuleName() === 'chart' && parseInt(this.width, 10) >= 80 && this.width.indexOf('%') > -1) {\n this.width = width;\n this.dataBind();\n }\n };\n /**\n * Defines the trendline initialization.\n *\n * @returns {void}\n */\n Chart.prototype.initTrendLines = function () {\n this.isProtectedOnChange = true;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n var trendIndex = 0;\n for (var _b = 0, _c = series.trendlines; _b < _c.length; _b++) {\n var trendline = _c[_b];\n var trendLine = trendline;\n if (this.trendLineModule) {\n trendLine.index = trendIndex;\n trendLine.sourceIndex = series.index;\n this.trendLineModule.initSeriesCollection(trendLine, this);\n if (trendLine.targetSeries) {\n trendLine.targetSeries.xAxisName = series.xAxisName;\n trendLine.targetSeries.yAxisName = series.yAxisName;\n this.visibleSeries.push(trendLine.targetSeries);\n }\n }\n trendIndex++;\n }\n }\n this.isProtectedOnChange = false;\n };\n Chart.prototype.calculateAreaType = function () {\n var series = this.series[0];\n this.chartArea.border.width = this.stockChart ? 0 : this.chartArea.border.width;\n if (series) {\n this.requireInvertedAxis = ((series.type.indexOf('Bar') !== -1) && !this.isTransposed) ||\n ((series.type.indexOf('Bar') === -1) && this.isTransposed && this.chartAreaType !== 'PolarRadar');\n }\n this.chartAxisLayoutPanel = this.chartAreaType === 'PolarRadar' ? (this.polarSeriesModule || this.radarSeriesModule)\n : new CartesianAxisLayoutPanel(this);\n };\n /**\n * Calculate the visible axis.\n *\n * @private\n * @returns {void}\n */\n Chart.prototype.calculateVisibleAxis = function () {\n var axis;\n var axes = [this.primaryXAxis, this.primaryYAxis];\n axes = this.chartAreaType === 'Cartesian' ? axes.concat(this.axes) : axes;\n if (this.paretoSeriesModule && this.series[0].type === 'Pareto') {\n axes = axes.concat(this.paretoSeriesModule.paretoAxes);\n }\n this.axisCollections = [];\n if (this.zoomModule) {\n this.zoomModule.isPanning = this.zoomModule.isAxisZoomed(axes) && this.zoomSettings.enablePan;\n this.svgObject.setAttribute('cursor', this.zoomModule.isPanning ? 'pointer' : 'auto');\n if (this.scrollBarModule) {\n this.scrollBarModule.axes = axes;\n }\n }\n if (this.scrollSettingEnabled) {\n if (this.scrollBarModule) {\n this.scrollBarModule.axes = axes;\n }\n }\n for (var i = 0, len = axes.length; i < len; i++) {\n axis = axes[i];\n axis.series = [];\n axis.labels = [];\n axis.indexLabels = {};\n axis.orientation = (i === 0) ? (this.requireInvertedAxis ? 'Vertical' : 'Horizontal') :\n (i === 1) ? (this.requireInvertedAxis ? 'Horizontal' : 'Vertical') : axis.orientation;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n this.initAxis(series, axis, true);\n if (series.category === 'Pareto' && series.type === 'Line' && series.yAxis) {\n series.yAxis.internalVisibility = series.paretoOptions.showAxis;\n }\n }\n for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n var indicator = _c[_b];\n this.initAxis(indicator, axis, false);\n }\n if (this.scrollBarModule && !axis.zoomingScrollBar) {\n this.scrollBarModule.injectTo(axis, this);\n }\n if (axis.orientation != null) {\n this.axisCollections.push(axis);\n }\n }\n if (this.rows.length > 0 && this.columns.length > 0) {\n this.chartAxisLayoutPanel.measure();\n }\n };\n Chart.prototype.initAxis = function (series, axis, isSeries) {\n if (series.xAxisName === axis.name || (series.xAxisName == null && axis.name === 'primaryXAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Vertical' : 'Horizontal';\n series.xAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n else if (series.yAxisName === axis.name || (series.yAxisName == null && axis.name === 'primaryYAxis')) {\n axis.orientation = this.requireInvertedAxis ? 'Horizontal' : 'Vertical';\n series.yAxis = axis;\n if (isSeries) {\n axis.series.push(series);\n }\n }\n };\n Chart.prototype.initTechnicalIndicators = function () {\n var i = 0;\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n var techIndicator = indicator;\n var type = firstToLowerCase(techIndicator.type);\n if (this[type + 'IndicatorModule']) {\n techIndicator.index = i;\n this[type + 'IndicatorModule'].initSeriesCollection(techIndicator, this);\n for (var _b = 0, _c = techIndicator.targetSeries; _b < _c.length; _b++) {\n var targetSeries = _c[_b];\n if (indicator.seriesName || indicator.dataSource) {\n this.visibleSeries.push(targetSeries);\n }\n }\n }\n i++;\n }\n };\n /**\n * Refreshes the technical indicator for the specified series.\n *\n * @param {SeriesBase} series - The series for which to refresh the technical indicator.\n * @returns {void}\n * @private\n */\n Chart.prototype.refreshTechnicalIndicator = function (series) {\n if (this.indicators.length) {\n var targetIndicator = null;\n if (series instanceof Series && series.category !== 'Indicator') {\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n if (indicator.seriesName === series.name && !indicator.dataSource) {\n targetIndicator = indicator;\n targetIndicator.setDataSource(series, this);\n }\n }\n }\n else if (series instanceof TechnicalIndicator) {\n targetIndicator = series;\n targetIndicator.setDataSource(series instanceof Series ? series : null, this);\n }\n }\n };\n Chart.prototype.calculateVisibleSeries = function () {\n var series;\n this.visibleSeries = [];\n var colors = this.palettes.length ? this.palettes : getSeriesColor(this.theme);\n var count = colors.length;\n var seriesCollection = this.series.sort(function (a, b) { return a.zOrder - b.zOrder; });\n for (var i = 0, len = seriesCollection.length; i < len; i++) {\n series = seriesCollection[i];\n // for y axis label issue during chart navigation\n series.category = seriesCollection[0].type === 'Pareto' ? 'Pareto' : 'Series';\n series.index = i;\n series.interior = series.fill || colors[i % count];\n if (!series.marker.shape && (series.marker.visible || series.type === 'Scatter' || series.drawType === 'Scatter')) {\n series.marker.shape = markerShapes[this.markerIndex % 10];\n this.markerIndex++;\n }\n if (this.isSecondaryAxis(series.xAxis)) {\n series.xAxis.internalVisibility = series.xAxis.series.some(function (value) { return (value.visible); });\n }\n if (this.isSecondaryAxis(series.yAxis)) {\n series.yAxis.internalVisibility = series.yAxis.series.some(function (value) { return (value.visible); });\n }\n switch (series.type) {\n case 'Bar':\n case 'StackingBar':\n case 'StackingBar100':\n if (seriesCollection[0].type.indexOf('Bar') === -1) {\n continue;\n }\n break;\n case 'Polar':\n case 'Radar':\n if (this.chartAreaType !== 'PolarRadar') {\n continue;\n }\n if (this.chartAreaType === 'PolarRadar' && ((series.xAxisName !== null && (this.primaryXAxis.name !== series.xAxisName)) ||\n (series.yAxisName !== null && (this.primaryYAxis.name !== series.yAxisName)))) {\n continue;\n }\n break;\n case 'Pareto':\n this.visibleSeries.push(series);\n this.paretoSeriesModule.initSeries(series, this);\n continue;\n default:\n if (this.chartAreaType === 'PolarRadar' || seriesCollection[0].type.indexOf('Bar') > -1) {\n continue;\n }\n break;\n }\n this.visibleSeries.push(series);\n seriesCollection[i] = series;\n }\n };\n Chart.prototype.isSecondaryAxis = function (axis) {\n return (this.axes.indexOf(axis) > -1);\n };\n Chart.prototype.renderTitle = function () {\n var rect;\n var margin = this.margin;\n var elementSpacing = 5;\n if (this.title) {\n var getAnchor = getTextAnchor(this.titleStyle.textAlignment, this.enableRtl);\n var elementSize = measureText(this.title, this.titleStyle, this.themeStyle.chartTitleFont);\n rect = new Rect(margin.left, 0, this.availableSize.width - margin.left - margin.right, 0);\n var borderWidth = this.titleStyle.border.width;\n var positionY = this.margin.top + ((elementSize.height) * 3 / 4);\n var positionX = titlePositionX(rect, this.titleStyle || this.themeStyle.chartTitleFont) + borderWidth;\n var rotation = void 0;\n var alignment = this.titleStyle.textAlignment;\n var subtitleSize = measureText(this.subTitle, this.subTitleStyle, this.themeStyle.chartSubTitleFont);\n switch (this.titleStyle.position) {\n case 'Top':\n positionY += borderWidth * 0.5;\n positionX += getAnchor === 'start' ? borderWidth * 0.5 + this.border.width :\n getAnchor === 'end' ? ((-borderWidth * 2) - this.border.width) : 0;\n break;\n case 'Bottom':\n positionX += getAnchor === 'start' ? (borderWidth * 0.5) + this.border.width :\n getAnchor === 'end' ? (-borderWidth * 2) - this.border.width : 0;\n positionY = this.availableSize.height - this.margin.bottom - subtitleSize.height - (elementSize.height / 2) -\n (borderWidth * 0.5) - (this.subTitleStyle.border.width * 0.5);\n break;\n case 'Left':\n positionX = this.margin.left + ((elementSize.height) * 3 / 4) + (borderWidth * 0.5);\n positionY = alignment === 'Near' ? margin.bottom + (borderWidth * 0.5) + this.border.width :\n alignment === 'Far' ? this.availableSize.height - margin.bottom - (borderWidth * 0.5) - this.border.width : this.availableSize.height / 2;\n getAnchor = alignment === 'Near' ? 'end' : alignment === 'Far' ? 'start' : 'middle';\n getAnchor = this.enableRtl ? (getAnchor === 'end' ? 'start' : getAnchor === 'start' ? 'end' : getAnchor) : getAnchor;\n rotation = 'rotate(' + -90 + ',' + positionX + ',' + positionY + ')';\n break;\n case 'Right':\n positionX = this.availableSize.width - this.margin.right - ((elementSize.height) * 3 / 4) - (borderWidth * 0.5);\n positionY = alignment === 'Near' ? margin.bottom + (borderWidth * 0.5) + this.border.width :\n alignment === 'Far' ? this.availableSize.height - margin.bottom - (borderWidth * 0.5) - this.border.width : this.availableSize.height / 2;\n getAnchor = alignment === 'Near' ? 'start' : alignment === 'Far' ? 'end' : 'middle';\n getAnchor = this.enableRtl ? (getAnchor === 'end' ? 'start' : getAnchor === 'start' ? 'end' : getAnchor) : getAnchor;\n rotation = 'rotate(' + 90 + ',' + positionX + ',' + positionY + ')';\n break;\n case 'Custom':\n positionX = this.titleStyle.x;\n positionY = this.titleStyle.y;\n getAnchor = 'middle';\n break;\n }\n var borderOptions = {\n 'id': this.element.id + '_ChartTitleBorder',\n 'x': positionX - (getAnchor === 'middle' ? (elementSize.width / 2) + elementSpacing : getAnchor === 'end' ? elementSize.width + elementSpacing : elementSpacing),\n 'y': positionY - elementSize.height + (elementSize.height / 4),\n 'rx': this.titleStyle.border.cornerRadius,\n 'ry': this.titleStyle.border.cornerRadius,\n 'width': elementSize.width + (elementSpacing * 2),\n 'height': elementSize.height * this.titleCollection.length,\n 'fill': this.titleStyle.background,\n 'stroke-width': borderWidth,\n 'stroke': this.titleStyle.border.color,\n 'transform': rotation ? rotation : '',\n 'd': ''\n };\n var htmlObject = redrawElement(this.redraw, this.element.id + '_ChartTitleBorder', borderOptions, this.renderer)\n || this.renderer.drawRectangle(borderOptions);\n appendChildElement(this.enableCanvas, this.svgObject, htmlObject, this.redraw);\n var options = new TextOption(this.element.id + '_ChartTitle', positionX, positionY, getAnchor, this.titleCollection, rotation, 'auto');\n var element = redrawElement(this.redraw, this.element.id + '_ChartTitle', options, this.renderer) ||\n textElement(this.renderer, options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitleFont.color, this.svgObject, null, null, null, null, null, null, null, null, this.enableCanvas, null, this.themeStyle.chartTitleFont);\n if (element) {\n element.setAttribute('tabindex', '0');\n element.setAttribute('class', 'e-chart-focused');\n }\n if (this.subTitle) {\n this.renderSubTitle(options);\n }\n }\n };\n Chart.prototype.renderSubTitle = function (options) {\n var maxWidth = 0;\n var titleWidth = 0;\n var padding = 10;\n var alignment = this.titleStyle.textAlignment;\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle, this.themeStyle.chartTitleFont).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n var subTitleElementSize = measureText(this.subTitleCollection.reduce(function (a, b) {\n return (a.length > b.length ? a : b);\n }), this.subTitleStyle, this.themeStyle.chartSubTitleFont);\n var getAnchor = getTextAnchor(this.subTitleStyle.textAlignment, this.enableRtl);\n var rect = new Rect(alignment === 'Center' ? (options.x - maxWidth * 0.5) : alignment === 'Far' ? options.x - maxWidth : options.x, 0, maxWidth, 0);\n if (this.titleStyle.position === 'Left') {\n rect.x = alignment === 'Center' ? (options.x - maxWidth * 0.5) : alignment === 'Far' ? this.margin.left + ((subTitleElementSize.height) * 3 / 4) : (options.x - maxWidth);\n }\n var elementSize = measureText(this.title, this.titleStyle, this.themeStyle.chartTitleFont);\n var positionY = options.y * options.text.length + subTitleElementSize.height + (padding / 2) +\n this.titleStyle.border.width + (this.subTitleStyle.border.width * 0.5);\n if (this.titleStyle.position === 'Bottom') {\n positionY = options.y * options.text.length + (padding / 2) + (elementSize.height / 2) + (subTitleElementSize.height / 2);\n }\n var borderOptions = {\n 'id': this.element.id + '_ChartSubTitleBorder',\n 'x': titlePositionX(rect, this.subTitleStyle) - (getAnchor === 'middle' ? (subTitleElementSize.width / 2) + padding / 2 : getAnchor === 'end' ? subTitleElementSize.width + padding / 2 : padding / 2),\n 'y': positionY - subTitleElementSize.height + (subTitleElementSize.height / 4),\n 'rx': this.subTitleStyle.border.cornerRadius,\n 'ry': this.subTitleStyle.border.cornerRadius,\n 'width': subTitleElementSize.width + padding,\n 'height': subTitleElementSize.height * this.subTitleCollection.length,\n 'fill': this.subTitleStyle.background,\n 'stroke-width': this.subTitleStyle.border.width,\n 'stroke': this.subTitleStyle.border.color,\n 'transform': options.transform,\n 'd': ''\n };\n var htmlObject = redrawElement(this.redraw, this.element.id + '_ChartSubTitleBorder', borderOptions, this.renderer)\n || this.renderer.drawRectangle(borderOptions);\n appendChildElement(this.enableCanvas, this.svgObject, htmlObject, this.redraw);\n var subTitleOptions = new TextOption(this.element.id + '_ChartSubTitle', titlePositionX(rect, this.subTitleStyle), positionY, getTextAnchor(this.subTitleStyle.textAlignment, this.enableRtl), this.subTitleCollection, options.transform, 'auto');\n var element = redrawElement(this.redraw, this.element.id + '_ChartSubTitle', subTitleOptions, this.renderer) ||\n textElement(this.renderer, subTitleOptions, this.subTitleStyle, this.subTitleStyle.color ||\n this.themeStyle.chartSubTitleFont.color, this.svgObject, null, null, null, null, null, null, null, null, this.enableCanvas, null, this.themeStyle.chartSubTitleFont);\n };\n Chart.prototype.renderBorder = function () {\n var x = 0;\n var y = 0;\n var width = this.border.width;\n var backGroundImage = this.backgroundImage;\n var fillColor = backGroundImage ? 'transparent' : (this.background || this.themeStyle.background);\n if (this.stockChart && this.stockChart.legendSettings.visible && this.stockChart.stockLegendModule) {\n if (this.stockChart.legendSettings.position === 'Top') {\n y += this.stockChart.stockLegendModule.legendBounds.height;\n }\n else if (this.stockChart.legendSettings.position === 'Left') {\n x += this.stockChart.stockLegendModule.legendBounds.width;\n }\n }\n var rect = new RectOption(this.element.id + '_ChartBorder', fillColor, this.border, 1, new Rect(width * 0.5 + x, width * 0.5 + y, this.availableSize.width - width, this.availableSize.height - width), 0, 0, '', this.border.dashArray);\n this.htmlObject = redrawElement(this.redraw, this.element.id + '_ChartBorder', rect, this.renderer)\n || this.renderer.drawRectangle(rect);\n this.htmlObject.setAttribute('aria-hidden', 'true');\n appendChildElement(this.enableCanvas, this.svgObject, this.htmlObject, this.redraw);\n // to draw back ground image for chart\n if (backGroundImage) {\n var image = new ImageOption(this.availableSize.height - width, this.availableSize.width - width, backGroundImage, 0, 0, this.element.id + '_ChartBackground', 'visible', 'none');\n this.htmlObject = redrawElement(this.redraw, this.element.id + '_ChartBackground', image, this.renderer)\n || this.renderer.drawImage(image);\n appendChildElement(this.enableCanvas, this.svgObject, this.htmlObject, this.redraw);\n }\n };\n /**\n * Renders the border for the area.\n *\n * @returns {void}\n * @private\n */\n Chart.prototype.renderAreaBorder = function () {\n if (this.chartAreaType === 'PolarRadar') {\n return null;\n }\n else {\n var element = getElement(this.element.id + '_ChartAreaBorder');\n var previousRect = element ?\n new Rect(+element.getAttribute('x'), +element.getAttribute('y'), +element.getAttribute('width'), +element.getAttribute('height')) : null;\n var rect = new RectOption(this.element.id + '_ChartAreaBorder', this.chartArea.background, { width: this.chartArea.border.width, color: this.chartArea.border.color || this.themeStyle.areaBorder }, this.chartArea.opacity, this.chartAxisLayoutPanel.seriesClipRect, 0, 0, '', this.chartArea.border.dashArray);\n if (rect.height < 0 || rect.width < 0) {\n return null;\n }\n this.htmlObject = this.renderer.drawRectangle(rect);\n this.htmlObject.setAttribute('aria-hidden', 'true');\n appendChildElement(this.enableCanvas, this.svgObject, this.htmlObject, this.redraw, true, 'x', 'y', null, null, true, true, previousRect);\n this.htmlObject = null;\n }\n // to draw back ground image for chart area\n var backGroundImage = this.chartArea.backgroundImage;\n if (backGroundImage) {\n var width = this.chartArea.border.width;\n var image = new ImageOption(this.initialClipRect.height - width, this.initialClipRect.width - width, backGroundImage, this.initialClipRect.x, this.initialClipRect.y, this.element.id + '_ChartAreaBackground', 'visible', 'none');\n this.htmlObject = this.renderer.drawImage(image);\n appendChildElement(this.enableCanvas, this.svgObject, this.htmlObject, this.redraw, true, 'x', 'y', null, null, true, true);\n }\n };\n /**\n * To add series for the chart\n *\n * @param {SeriesModel[]} seriesCollection - Defines the series collection to be added in chart.\n * @returns {void}.\n */\n Chart.prototype.addSeries = function (seriesCollection) {\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n series = new Series(this, 'series', series);\n this.series.push(series);\n }\n this.refresh();\n window.scrollTo(0, scrollTop);\n };\n /**\n * To Remove series for the chart\n *\n * @param {number} index - Defines the series index to be remove in chart series\n * @returns {void}\n */\n Chart.prototype.removeSeries = function (index) {\n this.redraw = false; //fix for remove svg not working when use animatemethod.\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n if (this.visibleSeries[index]) {\n this.visibleSeries[index].xAxis.orientation = null;\n this.visibleSeries[index].yAxis.orientation = null;\n }\n for (var i = 0; i < this.axes.length; i++) {\n if (this.axes[i].orientation === null) {\n this.axes.splice(i, 1);\n }\n }\n this.series.splice(index, 1);\n this.refresh();\n window.scrollTo(0, scrollTop);\n };\n /**\n * To Clear all series for the chart\n *\n * @returns {void}.\n */\n Chart.prototype.clearSeries = function () {\n this.series = [];\n this.refresh();\n };\n /**\n * To add secondary axis for the chart\n *\n * @param {AxisModel[]} axisCollection - Defines the axis collection to be added in chart.\n * @returns {void}.\n */\n Chart.prototype.addAxes = function (axisCollection) {\n for (var _i = 0, axisCollection_1 = axisCollection; _i < axisCollection_1.length; _i++) {\n var axis = axisCollection_1[_i];\n axis = new Axis(this, 'axes', axis);\n if (this.isBlazor) {\n axis.interval = isNaN(axis.interval) ? null : axis.interval;\n axis.desiredIntervals = isNaN(axis.desiredIntervals) ? null : axis.desiredIntervals;\n }\n this.axes.push(axis);\n }\n this.refresh();\n };\n /**\n * To remove secondary axis for the chart\n *\n * @param {number} index - Defines the axis collection to be removed in chart.\n * @returns {void}\n */\n Chart.prototype.removeAxis = function (index) {\n this.redraw = false;\n this.axes.splice(index, 1);\n this.refresh();\n };\n /**\n * To destroy the widget\n *\n * @function destroy\n * @returns {void}.\n * @member of Chart\n */\n Chart.prototype.destroy = function () {\n if (this.scrollBarModule) {\n this.scrollBarModule.destroy();\n }\n if (this.markerRender) {\n this.markerRender.removeEventListener();\n this.markerRender = null;\n }\n this.horizontalAxes = [];\n this.verticalAxes = [];\n this.visibleSeries = [];\n this.axisCollections = [];\n this.rotatedDataLabelCollections = [];\n this.seriesElements = null;\n this.chartAxisLayoutPanel = null;\n this.dataLabelCollections = null;\n this.dataLabelElements = null;\n this.yAxisElements = null;\n var element = document.getElementById(this.element.id + 'Keyboard_chart_focus');\n if (element) {\n element.remove();\n }\n var highlightElement = document.getElementById(this.element.id + '_ej2_chart_highlight');\n if (highlightElement) {\n highlightElement.remove();\n }\n removeElement('chartmeasuretext');\n /**\n * To fix react timeout destroy issue.\n */\n if (this.element) {\n this.unWireEvents();\n if (this.isReact) {\n this.clearTemplate();\n }\n _super.prototype.destroy.call(this);\n if (!this.enableCanvas) {\n this.removeSvg();\n this.svgObject = null;\n }\n }\n };\n /**\n * Get component name\n */\n Chart.prototype.getModuleName = function () {\n return 'chart';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @private\n * @returns {string} - The persisted data.\n */\n Chart.prototype.getPersistData = function () {\n var keyEntity = ['loaded', 'animationComplete', 'primaryXAxis', 'primaryYAxis'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Method to create SVG element.\n */\n Chart.prototype.createChartSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * Method to bind events for chart\n */\n Chart.prototype.unWireEvents = function () {\n var startEvent = Browser.touchStartEvent;\n var moveEvent = Browser.touchMoveEvent;\n var stopEvent = Browser.touchEndEvent;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /** UnBind the Event handler */\n EventHandler.remove(this.element, startEvent, this.chartOnMouseDown);\n EventHandler.remove(this.element, moveEvent, this.mouseMove);\n EventHandler.remove(this.element, stopEvent, this.mouseEnd);\n EventHandler.remove(this.element, 'click', this.chartOnMouseClick);\n EventHandler.remove(this.element, 'dblclick', this.chartOnDoubleClick);\n EventHandler.remove(this.element, 'contextmenu', this.chartRightClick);\n EventHandler.remove(this.element, cancelEvent, this.mouseLeave);\n EventHandler.remove(this.element, 'keydown', this.chartKeyDown);\n EventHandler.remove(document.body, 'keydown', this.documentKeyHandler);\n EventHandler.remove(this.element, 'keyup', this.chartKeyUp);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.resizeBound);\n /**\n * To fix memory issue\n */\n if (this.touchObject) {\n this.touchObject.destroy();\n this.touchObject = null;\n }\n };\n Chart.prototype.wireEvents = function () {\n /**\n * To fix react timeout destroy issue.\n */\n if (!this.element) {\n return;\n }\n /** Find the Events type */\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n /** Bind the Event handler */\n EventHandler.add(this.element, Browser.touchStartEvent, this.chartOnMouseDown, this);\n EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n EventHandler.add(this.element, 'click', this.chartOnMouseClick, this);\n EventHandler.add(this.element, 'dblclick', this.chartOnDoubleClick, this);\n EventHandler.add(this.element, 'contextmenu', this.chartRightClick, this);\n EventHandler.add(this.element, cancelEvent, this.mouseLeave, this);\n EventHandler.add(this.element, 'keydown', this.chartKeyDown, this);\n EventHandler.add(document.body, 'keydown', this.documentKeyHandler, this);\n EventHandler.add(this.element, 'keyup', this.chartKeyUp, this);\n this.resizeBound = this.chartResize.bind(this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.resizeBound);\n this.longPressBound = this.longPress.bind(this);\n this.touchObject = new Touch(this.element, { tapHold: this.longPressBound, tapHoldThreshold: 500 });\n /** Apply the style for chart */\n this.setStyle(this.element);\n };\n Chart.prototype.chartRightClick = function (event) {\n if (this.crosshair.enable && this.crosshairModule &&\n (event.buttons === 2 || event.which === 0 || event.pointerType === 'touch')) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n Chart.prototype.setStyle = function (element) {\n var zooming = this.zoomSettings;\n var disableScroll = zooming.enableSelectionZooming || zooming.enablePinchZooming ||\n this.selectionMode !== 'None' || this.highlightMode !== 'None';\n element.style.touchAction = disableScroll ? 'none' : 'element';\n element.style.msTouchAction = disableScroll ? 'none' : 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n element.style.display = 'block';\n // To fix angular and react tooltip div scrollbar issue\n element.style.overflow = 'hidden';\n element.style.height = (element.style.height || (this.height && this.height.indexOf('%') === -1)) ? element.style.height : 'inherit';\n };\n /**\n * Determines the orientation.\n *\n * @private\n * @returns {boolean} - True if the orientation is found, otherwise false.\n */\n Chart.prototype.isOrientation = function () {\n return ('orientation' in window && 'onorientationchange' in window);\n };\n /**\n * Handles the long press on the chart.\n *\n * @param {TapEventArgs} [e] - The event arguments for the long press.\n * @returns {boolean} - Returns false.\n * @private\n */\n Chart.prototype.longPress = function (e) {\n this.mouseX = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientX) : 0;\n this.mouseY = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientY) : 0;\n this.startMove = true;\n this.allowPan = this.stockChart ? false : this.allowPan;\n this.setMouseXY(this.mouseX, this.mouseY);\n this.notify('tapHold', e);\n return false;\n };\n /**\n * Sets the mouse x and y coordinates for the aligned chart element SVG position.\n *\n * @param {number} pageX - The x-coordinate of the mouse pointer.\n * @param {number} pageY - The y-coordinate of the mouse pointer.\n * @returns {void}\n * @private\n */\n Chart.prototype.setMouseXY = function (pageX, pageY) {\n if (getElement(this.svgId)) {\n var svgRect = getElement(this.svgId).getBoundingClientRect();\n var rect = this.element.getBoundingClientRect();\n if (this.width === '' || this.width === null || this.width === '100%') {\n if (this.element.clientHeight) {\n this.scaleY = (rect.height - 4) / this.availableSize.height;\n }\n }\n else {\n this.scaleX = svgRect.width / this.availableSize.width;\n this.scaleY = svgRect.height / this.availableSize.height;\n }\n this.mouseY = ((pageY - rect.top) - Math.max(svgRect.top - rect.top, 0)) / this.scaleY;\n this.mouseX = ((pageX - rect.left) - Math.max(svgRect.left - rect.left, 0)) / this.scaleX;\n if (this.stockChart) {\n this.mouseX += this.stockChart.legendSettings.position === 'Left' ? this.stockChart.stockLegendModule.legendBounds.width : 0;\n this.mouseY += this.stockChart.legendSettings.position === 'Top' ? this.stockChart.stockLegendModule.legendBounds.height : 0;\n }\n }\n };\n /**\n * Exports the chart.\n *\n * @param {ExportType} type - The type of export (PNG, JPEG, PDF, or SVG).\n * @param {string} fileName - The name of the file to be saved.\n * @returns {void}\n */\n Chart.prototype.export = function (type, fileName) {\n if (this.exportModule) {\n this.exportModule.export(type, fileName);\n if (this.afterExport) {\n this.exportModule.getDataUrl(this);\n }\n }\n };\n /**\n * Handles the chart resize.\n *\n * @returns {boolean} false\n * @private\n */\n Chart.prototype.chartResize = function () {\n var _this = this;\n this.animateSeries = false;\n var arg = {\n chart: this,\n name: resized,\n currentSize: new Size(0, 0),\n previousSize: new Size(this.availableSize.width, this.availableSize.height)\n };\n var beforeResizeArgs = { name: 'beforeResize', cancelResizedEvent: false };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.trigger(beforeResize, beforeResizeArgs);\n if (!beforeResizeArgs.cancelResizedEvent) {\n this.resizeTo = +setTimeout(function () {\n if (_this.isDestroyed || _this.stockChart) {\n clearTimeout(_this.resizeTo);\n return;\n }\n _this.createChartSvg();\n arg.currentSize = _this.availableSize;\n _this.trigger(resized, arg);\n _this.refreshAxis();\n _this.refreshBound();\n _this.trigger('loaded', { chart: _this.isBlazor ? {} : _this });\n }, 500);\n }\n return false;\n };\n /**\n * Handles the mouse movement event on the chart.\n *\n * @param {PointerEvent} e - The mouse event.\n * @returns {boolean} - Returns false.\n * @private\n */\n Chart.prototype.mouseMove = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (this.allowPan) {\n return false;\n }\n if (e.type === 'touchmove') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2' || this.isTouch;\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.previousPageX = pageX;\n this.previousPageY = pageY;\n if (getElement(this.svgId)) {\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseMove(e);\n }\n return false;\n };\n /**\n * Handles the mouse leave event on the chart.\n *\n * @param {PointerEvent} e - The mouse event.\n * @returns {boolean} - Returns false.\n * @private\n */\n Chart.prototype.mouseLeave = function (e) {\n var pageX;\n var pageY;\n var touchArg;\n if (this.stockChart && this.stockChart.onPanning) {\n return false;\n }\n if (e.type === 'touchleave') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.previousPageX = null;\n this.previousPageY = null;\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseLeave(e);\n return false;\n };\n /**\n * Handles the mouse leave event on the chart.\n *\n * @param {PointerEvent | TouchEvent} e - The mouse or touch event.\n * @returns {boolean} - Returns false.\n * @private\n */\n Chart.prototype.chartOnMouseLeave = function (e) {\n var element = e.target;\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.trigger(chartMouseLeave, { target: element.id, x: this.mouseX, y: this.mouseY });\n removeElement(this.element.id + '_EJ2_AxisLabel_Tooltip');\n this.isChartDrag = this.isPointMouseDown = false;\n this.notify(cancelEvent, e);\n return false;\n };\n /**\n * Handles the double click event on the chart.\n *\n * @param {PointerEvent | TouchEvent} e - The mouse or touch event.\n * @returns {boolean} - Returns false.\n * @private\n */\n Chart.prototype.chartOnDoubleClick = function (e) {\n var element = e.target;\n this.trigger(chartDoubleClick, { target: element.id, x: this.mouseX, y: this.mouseY });\n return false;\n };\n /**\n * Handles the key down event on the chart.\n *\n * @param {KeyboardEvent} e - The keyboard event.\n * @returns {boolean} - Returns false.\n * @private\n */\n Chart.prototype.chartKeyDown = function (e) {\n var actionKey = '';\n if ((this.isZoomed && e.code === 'Tab') || e.code === 'Space') {\n e.preventDefault();\n }\n if (this.tooltip.enable && ((e.code === 'Tab' && this.previousTargetId.indexOf('Series') > -1) || e.code === 'Escape')) {\n actionKey = 'ESC';\n }\n if (this.highlightMode !== 'None' && e.code === 'Tab' && this.previousTargetId.indexOf('_chart_legend_') > -1) {\n if (this.highlightModule) {\n this.highlightModule.removeLegendHighlightStyles();\n }\n }\n if (e.ctrlKey && (e.key === '+' || e.code === 'Equal' || e.key === '-' || e.code === 'Minus')) {\n e.preventDefault();\n this.isZoomed = this.zoomModule && (this.zoomSettings.enableDeferredZooming || this.zoomSettings.enableSelectionZooming ||\n this.zoomSettings.enablePinchZooming || this.zoomSettings.enableMouseWheelZooming);\n //this.tooltipModule.fadeOut(this.element);\n actionKey = this.isZoomed ? e.code : '';\n }\n else if (e['keyCode'] === 82 && this.isZoomed) { // KeyCode 82 (R) for reseting\n e.preventDefault();\n this.isZoomed = false;\n actionKey = 'R';\n }\n else if (e.code.indexOf('Arrow') > -1) {\n e.preventDefault();\n actionKey = this.isZoomed ? e.code : '';\n }\n if (e.ctrlKey && (e.key === 'p')) {\n e.preventDefault();\n actionKey = 'CtrlP';\n }\n if (actionKey !== '') {\n this.chartKeyboardNavigations(e, e.target.id, actionKey);\n }\n return false;\n };\n /**\n * Handles the key up event on the chart.\n *\n * @param {KeyboardEvent} e - The keyboard event.\n * @returns {boolean} - Returns false.\n * @private\n */\n Chart.prototype.chartKeyUp = function (e) {\n var actionKey = '';\n var targetId = e.target['id'];\n var groupElement;\n var markerGroup;\n var targetElement = e.target;\n var titleElement = getElement(this.element.id + '_ChartTitle');\n var seriesElement = getElement(this.element.id + 'SeriesCollection');\n var legendElement = getElement(this.element.id + '_chart_legend_translate_g');\n var pagingElement = getElement(this.element.id + '_chart_legend_pageup');\n if (titleElement) {\n titleElement.setAttribute('class', 'e-chart-focused');\n }\n if (seriesElement && seriesElement.firstElementChild && seriesElement.firstElementChild.children[1]) {\n var firstChild = seriesElement.firstElementChild.children[1];\n var className = firstChild.getAttribute('class');\n if (className && className.indexOf('e-chart-focused') === -1) {\n className = className + ' e-chart-focused';\n }\n else if (!className) {\n className = 'e-chart-focused';\n }\n firstChild.setAttribute('class', className);\n }\n if (legendElement) {\n var firstChild = legendElement.firstElementChild;\n var className = firstChild.getAttribute('class');\n if (className && className.indexOf('e-chart-focused') === -1) {\n className = className + ' e-chart-focused';\n }\n else if (!className) {\n className = 'e-chart-focused';\n }\n firstChild.setAttribute('class', className);\n }\n if (pagingElement) {\n pagingElement.setAttribute('class', 'e-chart-focused');\n }\n if (e.code === 'Tab') {\n if (this.previousTargetId !== '') {\n if ((this.previousTargetId.indexOf('_Series_') > -1 && targetId.indexOf('_Series_') === -1)) {\n groupElement = getElement(this.element.id + 'SeriesCollection');\n var previousElement = this.previousTargetId.indexOf('_Symbol') > -1 ?\n getElement(this.element.id + 'SymbolGroup' + this.currentSeriesIndex).children[this.currentPointIndex + 1] :\n (this.previousTargetId.indexOf('_Point_') > -1 ?\n groupElement.children[this.currentSeriesIndex].children[this.currentPointIndex + 1] :\n groupElement.children[this.currentSeriesIndex]);\n this.setTabIndex(previousElement, groupElement.firstElementChild);\n this.currentPointIndex = 0;\n this.currentSeriesIndex = 0;\n }\n else if (this.previousTargetId.indexOf('_chart_legend_page') > -1 && targetId.indexOf('_chart_legend_page') === -1\n && targetId.indexOf('_chart_legend_g_') === -1) {\n this.setTabIndex(e.target, getElement(this.element.id + '_chart_legend_pageup'));\n }\n else if (this.previousTargetId.indexOf('_chart_legend_g_') > -1 && targetId.indexOf('_chart_legend_g_') === -1) {\n groupElement = getElement(this.element.id + '_chart_legend_translate_g');\n this.setTabIndex(groupElement.children[this.currentLegendIndex], groupElement.firstElementChild);\n }\n }\n this.previousTargetId = targetId;\n if (targetId.indexOf('SeriesGroup') > -1) {\n this.currentSeriesIndex = +targetId.split('SeriesGroup')[1];\n targetElement.removeAttribute('tabindex');\n targetElement.blur();\n if (targetElement.children[1].id.indexOf('_Point_') === -1) {\n markerGroup = getElement(this.element.id + 'SymbolGroup' + targetId.split('SeriesGroup')[1]);\n }\n targetId = this.focusChild((markerGroup != null ? markerGroup.children[1] : targetElement.children[1]));\n }\n actionKey = this.highlightMode !== 'None' || this.tooltip.enable ? 'Tab' : '';\n }\n else if (e.code.indexOf('Arrow') > -1) {\n e.preventDefault();\n this.previousTargetId = targetId;\n if (targetId.indexOf('_chart_legend_page') > -1) {\n if (e.code === 'ArrowLeft') {\n getElement(this.element.id + '_chart_legend_pagedown').removeAttribute('tabindex');\n this.focusChild(getElement(this.element.id + '_chart_legend_pageup'));\n }\n else if (e.code === 'ArrowRight') {\n getElement(this.element.id + '_chart_legend_pageup').removeAttribute('tabindex');\n this.focusChild(getElement(this.element.id + '_chart_legend_pagedown'));\n }\n }\n else if ((targetId.indexOf('_chart_legend_') > -1)) {\n var legendElement_1 = targetElement.parentElement.children;\n legendElement_1[this.currentLegendIndex].removeAttribute('tabindex');\n this.currentLegendIndex += (e.code === 'ArrowUp' || e.code === 'ArrowRight') ? +1 : -1;\n this.currentLegendIndex = this.getActualIndex(this.currentLegendIndex, legendElement_1.length);\n var currentLegend = legendElement_1[this.currentLegendIndex];\n this.focusChild(currentLegend);\n targetId = currentLegend.children[1].id;\n actionKey = this.highlightMode !== 'None' ? 'ArrowMove' : '';\n }\n else if (targetId.indexOf('_Series_') > -1) {\n groupElement = targetElement.parentElement.parentElement;\n var currentPoint = e.target;\n targetElement.removeAttribute('tabindex');\n targetElement.blur();\n if (e.code === 'ArrowRight' || e.code === 'ArrowLeft') {\n var seriesIndexes = [];\n for (var i = 0; i < groupElement.children.length; i++) {\n if (groupElement.children[i].id.indexOf('SeriesGroup') > -1) {\n seriesIndexes.push(+groupElement.children[i].id.split('SeriesGroup')[1]);\n }\n }\n this.currentSeriesIndex = seriesIndexes.indexOf(this.currentSeriesIndex) + (e.code === 'ArrowRight' ? 1 : -1);\n this.currentSeriesIndex = seriesIndexes[this.getActualIndex(this.currentSeriesIndex, seriesIndexes.length)];\n }\n else {\n this.currentPointIndex += e.code === 'ArrowUp' ? 1 : -1;\n }\n if (targetId.indexOf('_Symbol') > -1) {\n this.currentPointIndex = this.getActualIndex(this.currentPointIndex, getElement(this.element.id + 'SymbolGroup' + this.currentSeriesIndex).childElementCount - 1);\n currentPoint = getElement(this.element.id + '_Series_' + this.currentSeriesIndex + '_Point_' +\n this.currentPointIndex + '_Symbol');\n }\n else if (targetId.indexOf('_Point_') > -1) {\n this.currentPointIndex = this.getActualIndex(this.currentPointIndex, getElement(this.element.id + 'SeriesGroup' + this.currentSeriesIndex).childElementCount - 1);\n currentPoint = getElement(this.element.id + '_Series_' + this.currentSeriesIndex + '_Point_' +\n this.currentPointIndex);\n }\n targetId = this.focusChild(currentPoint);\n actionKey = this.tooltip.enable || this.highlightMode !== 'None' ? 'ArrowMove' : '';\n }\n }\n else if ((e.code === 'Enter' || e.code === 'Space') && ((targetId.indexOf('_chart_legend_') > -1) ||\n (targetId.indexOf('_Point_') > -1))) {\n targetId = (targetId.indexOf('_chart_legend_page') > -1) ? targetId : ((targetId.indexOf('_chart_legend_') > -1) ?\n targetElement.children[1].id : targetId);\n actionKey = 'Enter';\n }\n if (actionKey !== '') {\n this.chartKeyboardNavigations(e, targetId, actionKey);\n }\n return false;\n };\n Chart.prototype.setTabIndex = function (previousElement, currentElement) {\n if (previousElement) {\n previousElement.removeAttribute('tabindex');\n }\n if (currentElement) {\n currentElement.setAttribute('tabindex', '0');\n }\n };\n Chart.prototype.getActualIndex = function (index, totalLength) {\n return index > totalLength - 1 ? 0 : (index < 0 ? totalLength - 1 : index);\n };\n Chart.prototype.focusChild = function (element) {\n element.setAttribute('tabindex', '0');\n var className = element.getAttribute('class');\n element.setAttribute('tabindex', '0');\n if (className && className.indexOf('e-chart-focused') === -1) {\n className = 'e-chart-focused ' + className;\n }\n else if (!className) {\n className = 'e-chart-focused';\n }\n element.setAttribute('class', className);\n element.focus();\n return element.id;\n };\n /**\n * Handles the key event on the document.\n *\n * @param {KeyboardEvent} e - The keyboard event.\n * @returns {void}\n * @private\n */\n Chart.prototype.documentKeyHandler = function (e) {\n // 74 - J\n if (e.altKey && e.keyCode === 74 && !isNullOrUndefined(this.element)) {\n this.element.focus();\n }\n };\n Chart.prototype.chartKeyboardNavigations = function (e, targetId, actionKey) {\n this.isLegendClicked = false;\n switch (actionKey) {\n case 'Tab':\n case 'ArrowMove':\n if (this.highlightModule) {\n this.highlightModule.removeLegendHighlightStyles();\n }\n if (targetId.indexOf('_Point_') > -1) {\n var seriesIndex = +(targetId.split('_Series_')[1].split('_Point_')[0]);\n var pointIndex = +(targetId.split('_Series_')[1].replace('_Symbol', '').split('_Point_')[1]);\n var pointRegion = this.visibleSeries[seriesIndex].points[pointIndex].\n symbolLocations[0];\n this.mouseX = pointRegion.x + this.initialClipRect.x;\n this.mouseY = pointRegion.y + this.initialClipRect.y;\n if (this.highlightModule) {\n this.highlightModule.highlightChart(document.getElementById(targetId), 'mousemove');\n this.highlightModule.completeSelection(document.getElementById(targetId), 'mousemove');\n }\n if (this.tooltipModule) {\n this.tooltipModule.tooltip();\n }\n }\n if (this.highlightModule && this.highlightMode !== 'None') {\n targetId = targetId.indexOf('_chart_legend_g_') > -1 ? document.getElementById(targetId).firstChild['id'] : targetId;\n var legendID = this.element.id + '_chart_legend';\n var legendItemsId = [legendID + '_text_', legendID + '_shape_marker_',\n legendID + '_shape_'];\n for (var i = 0; i < legendItemsId.length; i++) {\n var id = legendItemsId[i];\n if (targetId.indexOf(id) > -1) {\n document.getElementById(targetId).setAttribute('class', '');\n this.highlightModule.legendSelection(this, parseInt(targetId.split(id)[1], 10), document.getElementById(targetId), 'mousemove');\n break;\n }\n }\n }\n break;\n case 'Enter':\n case 'Space':\n if (targetId.indexOf('_chart_legend_') > -1) {\n this.isLegendClicked = true;\n this.legendModule.click(e);\n this.focusChild(document.getElementById(targetId).parentElement);\n }\n else {\n this.selectionModule.calculateSelectedElements(document.getElementById(targetId), 'click');\n }\n break;\n case 'CtrlP':\n this.print();\n break;\n case 'ESC':\n this.tooltipModule.removeTooltip(1);\n break;\n case 'Equal':\n case 'Minus':\n this.zoomModule.isZoomed = this.zoomModule.performedUI = true;\n this.zoomModule.isPanning = this.isChartDrag = false;\n if (actionKey === 'Equal') {\n this.zoomModule.toolkit.zoomInOutCalculation(1, this, this.axisCollections, this.zoomSettings.mode);\n }\n else {\n this.zoomModule.toolkit.zoomInOutCalculation(-1, this, this.axisCollections, this.zoomSettings.mode);\n }\n this.zoomModule.performZoomRedraw(this);\n this.element.focus();\n break;\n case 'ArrowUp':\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight': {\n var yArrowPadding = actionKey === 'ArrowUp' ? 10 : (actionKey === 'ArrowDown' ? -10 : 0);\n var xArrowPadding = actionKey === 'ArrowLeft' ? -10 : (actionKey === 'ArrowRight' ? 10 : 0);\n this.zoomModule.isPanning = this.isChartDrag = true;\n this.zoomModule.doPan(this, this.axisCollections, xArrowPadding, yArrowPadding);\n this.zoomModule.performZoomRedraw(this);\n this.element.focus();\n break;\n }\n case 'R':\n this.zoomModule.toolkit.reset(e);\n break;\n }\n };\n /**\n * Handles the mouse click on the chart.\n *\n * @param {PointerEvent | TouchEvent} e - The mouse or touch event.\n * @returns {boolean} - Return false.\n * @private\n */\n Chart.prototype.chartOnMouseClick = function (e) {\n var _this = this;\n var element = e.target;\n var chart = this;\n this.clickCount++;\n var XYvalues = this.FindXYPointValue(chart.mouseX, chart.mouseY);\n var timeInterval = 400;\n if (this.clickCount === 1) {\n this.singleClickTimer = +setTimeout(function () {\n chart.clickCount = 0;\n chart.trigger(chartMouseClick, { target: element.id, x: chart.mouseX, y: chart.mouseY, axisData: XYvalues });\n }, timeInterval);\n }\n else if (this.clickCount === 2 && !this.pointDoubleClick) {\n clearTimeout(this.singleClickTimer);\n this.clickCount = 0;\n }\n var isAngular = 'isAngular';\n if (this[isAngular]) {\n var observers = 'observers';\n timeInterval = this.pointDoubleClick[observers].length > 0 ? 400 : 0;\n }\n else {\n timeInterval = this.pointDoubleClick ? 400 : 0;\n }\n if (this.clickCount === 1 && this.pointClick) {\n this.singleClickTimer = +setTimeout(function () {\n _this.clickCount = 0;\n _this.triggerPointEvent(pointClick, e);\n }, timeInterval);\n }\n else if (this.clickCount === 2 && this.pointDoubleClick) {\n clearTimeout(this.singleClickTimer);\n this.clickCount = 0;\n this.triggerPointEvent(pointDoubleClick, e);\n }\n if (this.axisLabelClick) {\n this.triggerAxisLabelClickEvent(axisLabelClick, e);\n }\n this.notify('click', e);\n return false;\n };\n Chart.prototype.FindXYPointValue = function (mouseX, mouseY) {\n if (withInBounds(mouseX, mouseY, this.chartAxisLayoutPanel.seriesClipRect)\n && this.series.some(function (series) { return series.visible; })) {\n var axis = void 0;\n var Xvalue = void 0;\n var Yvalue = void 0;\n var axisData = {};\n for (var k = 0, length_1 = this.axisCollections.length; k < length_1; k++) {\n axis = this.axisCollections[k];\n if (axis.orientation === 'Horizontal') {\n Xvalue = getValueXByPoint(Math.abs(mouseX - axis.rect.x), axis.rect.width, axis);\n axisData[this.axisCollections[k].name] = Xvalue;\n }\n else {\n Yvalue = getValueYByPoint(Math.abs(mouseY - axis.rect.y), axis.rect.height, axis);\n axisData[this.axisCollections[k].name] = Yvalue;\n }\n }\n return axisData;\n }\n return null;\n };\n Chart.prototype.triggerPointEvent = function (event, e) {\n var evt = e;\n var data = new ChartData(this);\n var pointData = data.getData();\n if (pointData.series && pointData.point) {\n this.trigger(event, {\n series: this.isBlazor ? {} : pointData.series,\n point: pointData.point,\n seriesIndex: pointData.series.index, pointIndex: pointData.point.index,\n x: this.mouseX, y: this.mouseY, pageX: evt.pageX, pageY: evt.pageY\n });\n }\n };\n Chart.prototype.triggerAxisLabelClickEvent = function (event, e) {\n var targetElement = e.target;\n var clickEvt = e;\n if (targetElement.id.indexOf('_AxisLabel_') !== -1) {\n var index = targetElement.id.split('_AxisLabel_');\n var axisIndex = +index[0].slice(-1);\n var labelIndex = +index[1];\n var currentAxis = this.axisCollections[axisIndex];\n if (currentAxis.visible && (axisIndex === 0 || axisIndex === 1)) {\n this.trigger(event, {\n chart: this,\n axis: currentAxis,\n text: currentAxis.visibleLabels[labelIndex].text,\n labelID: targetElement.id,\n index: labelIndex,\n location: new ChartLocation(clickEvt.pageX, clickEvt.pageY),\n value: currentAxis.visibleLabels[labelIndex].value\n });\n }\n }\n };\n /**\n * Handles the mouse move on the chart.\n *\n * @param {PointerEvent | TouchEvent} e - The mouse or touch event.\n * @returns {boolean} - False.\n * @private\n */\n Chart.prototype.chartOnMouseMove = function (e) {\n var element = e.target;\n var XYvalues = this.FindXYPointValue(this.mouseX, this.mouseY);\n this.trigger(chartMouseMove, { target: element.id, x: this.mouseX, y: this.mouseY, axisData: XYvalues });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove, e);\n }\n // Tooltip for chart series.\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n this.axisTooltip(e, this.mouseX, this.mouseY);\n }\n if (this.dataEditingModule) {\n this.dataEditingModule.pointMouseMove(e);\n }\n if (this.crosshair.enable && this.startMove) {\n e.preventDefault();\n }\n this.notify(Browser.touchMoveEvent, e);\n this.isTouch = false;\n return false;\n };\n Chart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n var id = (targetId === (this.element.id + '_ChartTitle') || targetId === (this.element.id + '_ChartSubTitle') ||\n targetId.indexOf('_AxisTitle') > -1 || targetId.indexOf('_legend_title') > -1);\n var index = 0;\n if (targetId.indexOf('_AxisTitle') > -1) {\n index = parseInt(((targetId.replace(this.element.id, '')).replace('AxisLabel_', '')).split('_')[2], 10);\n }\n if (id && (event.target.textContent.indexOf('...') > -1)) {\n var title = (targetId === (this.element.id + '_ChartTitle')) ? this.title :\n targetId.indexOf('_AxisTitle') > -1 ? this.axisCollections[index].title :\n targetId.indexOf('_ChartSubTitle') > -1 ? this.subTitle : this.legendSettings.title;\n showTooltip(title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n Chart.prototype.axisTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n if (((targetId.indexOf('AxisLabel') > -1) || targetId.indexOf('Axis_MultiLevelLabel') > -1) &&\n (event.target.textContent.indexOf('...') > -1)) {\n var isTitleOrLegendEnabled = (this.legendSettings.visible || this.primaryXAxis.title === '');\n showTooltip(this.findAxisLabel(targetId), x, y, this.element.offsetWidth, this.element.id + '_EJ2_AxisLabel_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch, isTitleOrLegendEnabled);\n }\n else {\n removeElement(this.element.id + '_EJ2_AxisLabel_Tooltip');\n }\n };\n Chart.prototype.findAxisLabel = function (text) {\n var texts;\n if (text.indexOf('AxisLabel') > -1) {\n texts = ((text.replace(this.element.id, '')).replace('AxisLabel_', '')).split('_');\n return this.axisCollections[parseInt(texts[0], 10)].visibleLabels[parseInt(texts[1], 10)].originalText;\n }\n else {\n texts = ((text.replace(this.element.id, '')).replace('Axis_MultiLevelLabel_Level_', '').replace('Text_', '')).split('_');\n return (this.axisCollections[parseInt(texts[0], 10)].multiLevelLabels[parseInt(texts[1], 10)]\n .categories[parseInt(texts[2], 10)].text);\n }\n };\n /**\n * Handles the mouse down on the chart.\n *\n * @param {PointerEvent} e - The mouse event.\n * @returns {boolean} - False.\n * @private\n */\n Chart.prototype.chartOnMouseDown = function (e) {\n var pageX;\n var pageY;\n var target;\n var touchArg;\n var XYvalues = this.FindXYPointValue(this.mouseX, this.mouseY);\n var offset = Browser.isDevice ? 20 : 30;\n var rect = this.element.getBoundingClientRect();\n var element = e.target;\n if (this.stockChart && this.stockChart.zoomSettings.enablePan) {\n this.allowPan = true;\n }\n this.trigger(chartMouseDown, { target: element.id, x: this.mouseX, y: this.mouseY, axisData: XYvalues });\n if (e.type === 'touchstart') {\n this.isTouch = true;\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n pageY = touchArg.changedTouches[0].clientY;\n target = touchArg.target;\n }\n else {\n this.isTouch = e.pointerType === 'touch';\n pageX = e.clientX;\n pageY = e.clientY;\n target = e.target;\n }\n var svgRect = getElement(this.svgId).getBoundingClientRect();\n this.mouseDownX = this.previousMouseMoveX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n this.mouseDownY = this.previousMouseMoveY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n if (this.isTouch) {\n this.isDoubleTap = (new Date().getTime() < this.threshold && target.id.indexOf(this.element.id + '_Zooming_') === -1 &&\n (this.mouseDownX - offset >= this.mouseX || this.mouseDownX + offset >= this.mouseX) &&\n (this.mouseDownY - offset >= this.mouseY || this.mouseDownY + offset >= this.mouseY) &&\n (this.mouseX - offset >= this.mouseDownX || this.mouseX + offset >= this.mouseDownX) &&\n (this.mouseY - offset >= this.mouseDownY || this.mouseY + offset >= this.mouseDownY));\n }\n if (this.dataEditingModule) {\n this.dataEditingModule.pointMouseDown();\n }\n this.notify(Browser.touchStartEvent, e);\n return false;\n };\n /**\n * Handles the mouse up on the chart.\n *\n * @param {PointerEvent} e - The mouse event.\n * @returns {boolean} - False.\n * @private\n */\n Chart.prototype.mouseEnd = function (e) {\n var pageY;\n var pageX;\n var touchArg;\n if (e.type === 'touchend') {\n touchArg = e;\n pageX = touchArg.changedTouches[0].clientX;\n this.isTouch = true;\n pageY = touchArg.changedTouches[0].clientY;\n }\n else {\n pageY = e.clientY;\n pageX = e.clientX;\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n }\n this.setMouseXY(pageX, pageY);\n this.chartOnMouseUp(e);\n return false;\n };\n /**\n * Handles the mouse up on the chart.\n *\n * @param {PointerEvent | TouchEvent} e - The mouse or touch event.\n * @returns {boolean} - False.\n * @private\n */\n Chart.prototype.chartOnMouseUp = function (e) {\n var element = e.target;\n var XYvalues = this.FindXYPointValue(this.mouseX, this.mouseY);\n this.trigger(chartMouseUp, { target: element.id, x: this.mouseX, y: this.mouseY, axisData: XYvalues });\n this.isChartDrag = false;\n this.allowPan = false;\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.axisTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n this.threshold = new Date().getTime() + 300;\n }\n if (this.dataEditingModule) {\n this.dataEditingModule.pointMouseUp();\n }\n if (!this.enableCanvas && this.seriesElements) {\n this.seriesElements.removeAttribute('clip-path');\n }\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /**\n * Method to set culture for chart.\n *\n * @returns {void}\n */\n Chart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n this.setLocaleConstants();\n this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n };\n /**\n * Sets the content of the annotation dynamically for the chart.\n *\n * @param {number} annotationIndex - The index of the annotation.\n * @param {string} content - The content to set for the annotation.\n * @returns {void}\n */\n Chart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n var annotation = this.annotations[annotationIndex];\n var element;\n if (content !== null) {\n annotation.content = content;\n if (parentNode) {\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n element = this.createElement('div');\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Method to set locale constants.\n *\n * @returns {void}\n */\n Chart.prototype.setLocaleConstants = function () {\n this.defaultLocalConstants = {\n ZoomIn: 'Zoom in',\n Zoom: 'Zoom',\n ZoomOut: 'Zoom out',\n Pan: 'Pan',\n Reset: 'Reset',\n ResetZoom: 'Reset Zoom'\n };\n };\n /**\n * Theming for chart.\n *\n * @returns {void}\n */\n Chart.prototype.setTheme = function () {\n /** Set theme */\n this.themeStyle = getThemeColor(this.theme, this.enableCanvas, this);\n if (!(document.getElementById(this.element.id + 'Keyboard_chart_focus'))) {\n var style = document.createElement('style');\n style.setAttribute('id', this.element.id + 'Keyboard_chart_focus');\n style.innerText = '.e-chart-focused:focus, path[class*=_ej2_chart_selection_series]:focus,' +\n 'path[id*=_Point_]:focus, text[id*=_ChartTitle]:focus {outline: none } .e-chart-focused:focus-visible, path[class*=_ej2_chart_selection_series]:focus-visible,' +\n 'path[id*=_Point_]:focus-visible, text[id*=_ChartTitle]:focus-visible {outline: 1.5px ' + this.themeStyle.tabColor + ' solid}';\n document.body.appendChild(style);\n }\n };\n /**\n * Provides the array of modules needed for control rendering.\n *\n * @returns {ModuleDeclaration[]} - The array of module declarations.\n * @private\n */\n Chart.prototype.requiredModules = function () {\n var _this = this;\n var modules = [];\n var series = this.series;\n var enableAnnotation = false;\n var moduleName;\n var errorBarVisible = false;\n var isPointDrag = false;\n var dataLabelEnable = false;\n var zooming = this.zoomSettings;\n this.chartAreaType = (series.length > 0 && (series[0].type === 'Polar' || series[0].type === 'Radar')) ? 'PolarRadar' : 'Cartesian';\n if (this.tooltip.enable) {\n modules.push({\n member: 'Tooltip',\n args: [this]\n });\n }\n series.map(function (value) {\n _this.isLegend = (_this.legendSettings.visible && ((value.name !== '') || !!_this.isLegend));\n moduleName = value.type.indexOf('100') !== -1 ? value.type.replace('100', '') + 'Series' : value.type + 'Series';\n errorBarVisible = value.errorBar.visible || errorBarVisible;\n dataLabelEnable = value.marker.dataLabel.visible || dataLabelEnable || (value.type === 'Pareto' && value.paretoOptions.marker.dataLabel.visible);\n isPointDrag = value.dragSettings.enable || isPointDrag;\n if (!modules.some(function (currentModule) {\n return currentModule.member === moduleName;\n })) {\n modules.push({\n member: moduleName,\n args: [_this, series]\n });\n }\n if (_this.chartAreaType === 'PolarRadar') {\n modules.push({\n member: value.drawType + 'Series',\n args: [_this, series]\n });\n }\n if (value.type === 'Pareto') {\n modules.push({\n member: 'ColumnSeries',\n args: [_this, series]\n });\n modules.push({\n member: 'LineSeries',\n args: [_this, series]\n });\n }\n });\n this.findIndicatorModules(modules);\n this.findTrendLineModules(modules);\n modules = this.findAxisModule(modules);\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (errorBarVisible) {\n modules.push({\n member: 'ErrorBar',\n args: [this, series]\n });\n }\n if (this.isLegend) {\n modules.push({\n member: 'Legend',\n args: [this]\n });\n }\n if (this.enableExport || this.allowExport) {\n modules.push({\n member: 'Export',\n args: [this]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && this.crosshair.enable) {\n modules.push({\n member: 'Crosshair',\n args: [this]\n });\n }\n if (this.chartAreaType !== 'PolarRadar' && !this.scrollSettingEnabled && (zooming.enableSelectionZooming\n || zooming.enableMouseWheelZooming || zooming.enablePinchZooming || zooming.enablePan ||\n zooming.enableScrollbar || zooming.showToolbar)) {\n modules.push({\n member: 'Zoom',\n args: [this, this.zoomSettings]\n });\n if (zooming.enableScrollbar) {\n modules.push({\n member: 'ScrollBar',\n args: [this]\n });\n }\n }\n if (this.selectionMode !== 'None' && !(this.chartAreaType === 'PolarRadar' &&\n this.selectionMode.indexOf('Drag') > -1)) {\n modules.push({\n member: 'Selection',\n args: [this]\n });\n }\n if (this.highlightMode !== 'None' || this.legendSettings.enableHighlight) {\n modules.push({\n member: 'Highlight',\n args: [this]\n });\n }\n if (dataLabelEnable) {\n modules.push({\n member: 'DataLabel',\n args: [this, series]\n });\n }\n if (isPointDrag) {\n modules.push({\n member: 'DataEditing',\n args: [this]\n });\n }\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findAxisModule = function (modules) {\n var axisCollections = [];\n axisCollections.push(this.primaryXAxis);\n axisCollections.push(this.primaryYAxis);\n axisCollections = axisCollections.concat(this.axes);\n var datetimeEnabled = false;\n var categoryEnabled = false;\n var logarithmicEnabled = false;\n var striplineEnabled = false;\n var dateTimeCategoryEnabled = false;\n var multiLevelEnabled = false;\n for (var _i = 0, axisCollections_1 = axisCollections; _i < axisCollections_1.length; _i++) {\n var axis = axisCollections_1[_i];\n datetimeEnabled = axis.valueType === 'DateTime' || datetimeEnabled;\n categoryEnabled = axis.valueType === 'Category' || categoryEnabled;\n logarithmicEnabled = axis.valueType === 'Logarithmic' || logarithmicEnabled;\n dateTimeCategoryEnabled = axis.valueType === 'DateTimeCategory' || dateTimeCategoryEnabled;\n striplineEnabled = this.findStriplineVisibility(axis.stripLines) || striplineEnabled;\n multiLevelEnabled = axis.multiLevelLabels.length > 0 || multiLevelEnabled;\n this.scrollSettingEnabled = axis.scrollbarSettings.enable ? true : this.scrollSettingEnabled;\n }\n if (datetimeEnabled) {\n modules.push({\n member: 'DateTime',\n args: [this]\n });\n }\n if (categoryEnabled) {\n modules.push({\n member: 'Category',\n args: [this]\n });\n }\n if (logarithmicEnabled) {\n modules.push({\n member: 'Logarithmic',\n args: [this]\n });\n }\n if (striplineEnabled) {\n modules.push({\n member: 'StripLine',\n args: [this]\n });\n }\n if (multiLevelEnabled) {\n modules.push({\n member: 'MultiLevelLabel',\n args: [this]\n });\n }\n if (dateTimeCategoryEnabled) {\n modules.push({\n member: 'DateTimeCategory',\n args: [this]\n });\n }\n if (this.scrollSettingEnabled) {\n modules.push({\n member: 'ScrollBar',\n args: [this]\n });\n }\n return modules;\n };\n Chart.prototype.findIndicatorModules = function (modules) {\n var macdEnable;\n var bandEnable;\n var indicators = this.indicators;\n if (this.indicators.length) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n indicators.map(function (indicator) {\n macdEnable = macdEnable || indicator.type === 'Macd';\n bandEnable = bandEnable || indicator.type === 'BollingerBands';\n });\n if (macdEnable) {\n modules.push({\n member: 'ColumnSeries',\n args: [this]\n });\n }\n if (bandEnable) {\n modules.push({\n member: 'RangeAreaSeries',\n args: [this]\n });\n }\n if (bandEnable) {\n modules.push({\n member: 'SplineRangeAreaSeries',\n args: [this]\n });\n }\n for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n var indicator = _a[_i];\n modules.push({\n member: indicator.type + 'Indicator',\n args: [this]\n });\n }\n }\n };\n Chart.prototype.findTrendLineModules = function (modules) {\n var isLine;\n var isSpline;\n var _loop_1 = function (series) {\n var markerEnable;\n series.trendlines.map(function (trendline) {\n markerEnable = markerEnable || trendline.marker.visible;\n isLine = isLine || (trendline.type === 'Linear' || trendline.type === 'MovingAverage') ? true : false;\n isSpline = isSpline || (!isLine || (trendline.type === 'Exponential' || trendline.type === 'Logarithmic' || trendline.type === 'Power' || trendline.type === 'Polynomial')) ? true : false;\n });\n if (markerEnable) {\n modules.push({\n member: 'Marker',\n args: [this_1, series]\n });\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n _loop_1(series);\n }\n if (isLine || isSpline) {\n modules.push({\n member: 'TrendLine',\n args: [this]\n });\n }\n if (isLine) {\n modules.push({\n member: 'LineSeries',\n args: [this]\n });\n }\n if (isSpline) {\n modules.push({\n member: 'SplineSeries',\n args: [this]\n });\n }\n };\n Chart.prototype.findStriplineVisibility = function (striplines) {\n var visible = false;\n for (var _i = 0, striplines_1 = striplines; _i < striplines_1.length; _i++) {\n var stripline = striplines_1[_i];\n if (stripline.visible) {\n visible = true;\n break;\n }\n }\n return visible;\n };\n /**\n * To Remove the SVG.\n *\n * @returns {void}\n * @private\n */\n Chart.prototype.removeSvg = function () {\n if (this.redraw) {\n return null;\n }\n blazorTemplatesReset(this);\n if (this.enableCanvas && this.svgObject && this.svgObject.tagName === 'CANVAS') {\n this.renderer.clearRect(new Rect(0, 0, this.availableSize.width, this.availableSize.height));\n if (this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n return null;\n }\n removeElement(this.element.id + '_Secondary_Element');\n if (this.isReact) {\n this.clearTemplate();\n }\n var removeLength = 0;\n if (this.zoomModule && this.zoomModule.pinchTarget) {\n this.zoomModule.pinchTarget.id = '';\n this.zoomModule.pinchTarget.setAttribute('opacity', '0');\n this.svgObject.appendChild(this.zoomModule.pinchTarget);\n removeLength = 1;\n }\n // Fix for blazor resize issue\n if (!isNullOrUndefined(this.resizeTo)) {\n if (this.resizeTo !== this.checkResize && this.isBlazor && this.element.childElementCount) {\n var containerCollection = document.querySelectorAll('.e-chart');\n for (var index = 0; index < containerCollection.length; index++) {\n var container = containerCollection[index];\n while (container.firstChild) {\n remove(container.firstChild);\n }\n }\n }\n this.checkResize = this.resizeTo;\n }\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > removeLength) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode && !(this.stockChart)) {\n remove(this.svgObject);\n }\n }\n };\n Chart.prototype.refreshDefinition = function (definitions) {\n for (var _i = 0, definitions_1 = definitions; _i < definitions_1.length; _i++) {\n var item = definitions_1[_i];\n item.axes = [];\n }\n };\n /**\n * Refresh the axis default value.\n *\n * @returns {void}\n * @private\n */\n Chart.prototype.refreshAxis = function () {\n var axis = this.primaryXAxis;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis = this.primaryYAxis;\n axis.isStack100 = false;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n var item = _a[_i];\n axis = item;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis.isStack100 = false;\n }\n if (this.paretoSeriesModule && this.series[0].type === 'Pareto') {\n for (var _b = 0, _c = this.paretoSeriesModule.paretoAxes; _b < _c.length; _b++) {\n var item = _c[_b];\n axis = item;\n axis.rect = new Rect(undefined, undefined, 0, 0);\n axis.isStack100 = false;\n }\n }\n };\n Chart.prototype.axisChange = function (axis) {\n if (!axis.name && !axis.valueType) {\n return false;\n }\n this.refreshDefinition(this.columns);\n this.refreshDefinition(this.rows);\n this.calculateVisibleAxis();\n this.processData();\n return true;\n };\n /**\n * Gets the visible series by index.\n *\n * @param {Series[]} visibleSeries - The array of visible series.\n * @param {number} index - The index of the series to retrieve.\n * @returns {Series} - The visible series at the specified index.\n * @private\n */\n Chart.prototype.getVisibleSeries = function (visibleSeries, index) {\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (index === series.index) {\n return series;\n }\n }\n return null;\n };\n /**\n * Fix for live data update flicker issue.\n *\n * @returns {void}\n */\n Chart.prototype.refreshLiveData = function () {\n this.calculateVisibleSeries();\n this.initTechnicalIndicators();\n this.initTrendLines();\n this.refreshDefinition(this.columns);\n this.refreshDefinition(this.rows);\n this.calculateVisibleAxis();\n this.processData(false);\n if (!this.isBlazor) {\n if (this.enableCanvas) {\n this.createChartSvg();\n }\n else {\n this.removeSvg();\n }\n // this.enableCanvas ? this.createChartSvg() : this.removeSvg();\n this.refreshAxis();\n this.refreshBound();\n this.trigger('loaded', { chart: this.isBlazor ? {} : this });\n }\n };\n /**\n * To remove style element.\n *\n * @returns {void}\n */\n Chart.prototype.removeStyles = function () {\n removeElement(this.element.id + '_ej2_chart_selection');\n removeElement(this.element.id + '_ej2_chart_highlight');\n };\n /**\n * To trigger the manual mouse move event for live chart tooltip.\n *\n * @returns {void}\n */\n Chart.prototype.mouseMoveEvent = function () {\n if (this.tooltip.enable && this.previousPageX !== null && this.previousPageY !== null) {\n var mousemove = document.createEvent('MouseEvent');\n mousemove.initMouseEvent('mousemove', true, false, window, 1, 100, 100, this.previousPageX, this.previousPageY, false, false, false, false, 0, null);\n this.element.dispatchEvent(mousemove);\n }\n };\n /**\n * Displays a tooltip for the data points.\n *\n * @param {number | string | Date} x - Specifies the x value of the point or x coordinate.\n * @param {number} y - Specifies the x value of the point or y coordinate.\n * @param {boolean} isPoint - Specifies whether x and y are data point or chart coordinates.\n * @returns {void}\n */\n Chart.prototype.showTooltip = function (x, y, isPoint) {\n if (isPoint === void 0) { isPoint = false; }\n if (isPoint) {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n for (var _b = 0, _c = series.points; _b < _c.length; _b++) {\n var point = _c[_b];\n var pointX = series.xAxis.valueType === 'DateTime' ? point.xValue : point.x;\n var xValue = x;\n if (series.xAxis.valueType === 'DateTime') {\n xValue = new Date(xValue).getTime();\n }\n if (x === pointX && y === point.yValue) {\n this.mouseX = point.regions[0].x + this.chartAxisLayoutPanel.seriesClipRect.x;\n this.mouseY = point.regions[0].y + this.chartAxisLayoutPanel.seriesClipRect.y;\n this.tooltipModule.tooltip();\n this.markerRender.mouseMoveHandler();\n break;\n }\n }\n }\n }\n else {\n if (this.isTouch) {\n this.startMove = true;\n }\n this.mouseX = x;\n this.mouseY = y;\n this.tooltipModule.mouseMoveHandler();\n this.markerRender.mouseMoveHandler();\n }\n };\n /**\n * Hides a tooltip in the chart.\n *\n * @returns {void}\n */\n Chart.prototype.hideTooltip = function () {\n this.tooltipModule.removeTooltip(Browser.isDevice ? 2000 : 1000);\n };\n /**\n * Displays a crosshair for the chart.\n *\n * @param {number} x - Specifies the x value of the point or x coordinate.\n * @param {number} y - Specifies the x value of the point or y coordinate.\n * @returns {void}\n */\n Chart.prototype.showCrosshair = function (x, y) {\n this.mouseX = x;\n this.mouseY = y;\n this.isCrosshair = false;\n if (withInBounds(this.mouseX, this.mouseY, this.chartAxisLayoutPanel.seriesClipRect)) {\n this.crosshairModule.crosshair();\n }\n else {\n this.hideCrosshair();\n }\n this.isCrosshair = true;\n };\n /**\n * Hides a tooltip in the chart.\n *\n * @returns {void}\n */\n Chart.prototype.hideCrosshair = function () {\n this.crosshairModule.removeCrosshair(Browser.isDevice ? 2000 : 1000);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {ChartModel} newProp - The new ChartModel.\n * @param {ChartModel} oldProp - The new ChartModel.\n * @returns {void}\n */\n Chart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var renderer = false;\n var refreshBounds = false;\n this.animateSeries = false;\n var axis;\n if (!this.delayRedraw) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'primaryXAxis':\n axis = newProp.primaryXAxis;\n refreshBounds = this.axisChange(axis);\n if (newProp.primaryXAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryXAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n if (!isNullOrUndefined(axis.isInversed) || !isNullOrUndefined(axis.opposedPosition)) {\n this.primaryXAxis.setIsInversedAndOpposedPosition();\n }\n break;\n case 'primaryYAxis':\n axis = newProp.primaryYAxis;\n refreshBounds = this.axisChange(axis);\n if (newProp.primaryYAxis.edgeLabelPlacement) {\n renderer = true;\n }\n if (!newProp.primaryYAxis.crosshairTooltip) {\n refreshBounds = true;\n }\n if (!isNullOrUndefined(axis.isInversed) || !isNullOrUndefined(axis.opposedPosition)) {\n this.primaryYAxis.setIsInversedAndOpposedPosition();\n }\n break;\n case 'axes':\n for (var _b = 0, _c = Object.keys(newProp.axes); _b < _c.length; _b++) {\n var index = _c[_b];\n axis = newProp.axes[index];\n refreshBounds = refreshBounds || this.axisChange(axis);\n if (!axis.crosshairTooltip) {\n refreshBounds = true;\n }\n if (!isNullOrUndefined(axis.isInversed) || !isNullOrUndefined(axis.opposedPosition)) {\n this.axes[index].setIsInversedAndOpposedPosition();\n }\n }\n break;\n case 'height':\n case 'width':\n this.createChartSvg();\n refreshBounds = true;\n break;\n case 'subTitle':\n case 'title':\n refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'subTitleStyle':\n if (newProp.subTitleStyle && (newProp.subTitleStyle.size || newProp.subTitleStyle.textOverflow)) {\n refreshBounds = true;\n }\n else {\n renderer = true;\n }\n break;\n case 'border':\n renderer = true;\n break;\n case 'dataSource':\n this.processData(false);\n refreshBounds = true;\n break;\n case 'enableCanvas':\n this.refresh();\n break;\n case 'series': {\n var len = this.series.length;\n var seriesRefresh = false;\n var series = void 0;\n var blazorProp = void 0;\n for (var i = 0; i < len; i++) {\n series = newProp.series[i];\n // I264774 blazor series visible property binding not working issue fixed.\n if (this.isBlazor && series && ((series.visible !== oldProp.series[i].visible) || series.isClosed ||\n series.marker || series.emptyPointSettings || series.type || series.boxPlotMode || series.showMean)) {\n blazorProp = true;\n }\n if (!isNullOrUndefined(series) && (series.dataSource || series.query || series.errorBar || series.xName ||\n series.yName || series.size || series.high || series.low || series.open || series.close || series.trendlines ||\n series.fill || series.name || series.marker || series.width || series.binInterval || series.type ||\n (series.visible !== oldProp.series[i].visible) || blazorProp)) {\n extend(this.getVisibleSeries(this.visibleSeries, i), series, null, true);\n seriesRefresh = true;\n }\n }\n if (seriesRefresh) {\n this.calculateVisibleSeries();\n this.initTechnicalIndicators();\n this.initTrendLines();\n this.refreshDefinition(this.columns);\n this.refreshDefinition(this.rows);\n this.calculateVisibleAxis();\n this.processData(false);\n refreshBounds = true;\n }\n break;\n }\n case 'indicators':\n refreshBounds = true;\n break;\n case 'zoomSettings':\n if (newProp.zoomSettings.enableScrollbar || oldProp.zoomSettings.enableScrollbar) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'background':\n renderer = true;\n break;\n case 'chartArea':\n if (newProp.chartArea.border && newProp.chartArea.border.width) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'legendSettings':\n if (!newProp.legendSettings.background || !newProp.legendSettings.opacity) {\n refreshBounds = true;\n }\n renderer = true;\n break;\n case 'palettes':\n this.calculateVisibleSeries();\n renderer = true;\n break;\n case 'selectedDataIndexes':\n if (this.selectionModule) {\n this.selectionModule.currentMode = this.selectionMode;\n this.selectionModule.selectedDataIndexes = this.selectedDataIndexes;\n this.selectionModule.styleId = this.element.id + '_ej2_chart_selection';\n this.selectionModule.redrawSelection(this, oldProp.selectionMode, true);\n }\n else if (this.highlightModule) {\n this.highlightModule.currentMode = this.highlightMode;\n this.highlightModule.highlightDataIndexes = this.selectedDataIndexes;\n this.highlightModule.styleId = this.element.id + '_ej2_chart_highlight';\n this.highlightModule.redrawSelection(this, oldProp.selectionMode, true);\n }\n break;\n case 'selectionMode':\n if (this.selectionModule && newProp.selectionMode && newProp.selectionMode.indexOf('Drag') === -1) {\n this.selectionModule.currentMode = this.selectionMode;\n this.selectionModule.styleId = this.element.id + '_ej2_chart_selection';\n this.selectionModule.redrawSelection(this, oldProp.selectionMode, true);\n }\n break;\n case 'isMultiSelect':\n if (this.selectionModule && !newProp.isMultiSelect && this.selectionModule.selectedDataIndexes.length > 1) {\n this.selectionModule.currentMode = this.selectionMode;\n this.selectionModule.styleId = this.element.id + '_ej2_chart_selection';\n this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n }\n break;\n case 'highlightMode':\n case 'selectionPattern':\n case 'highlightPattern':\n this.removeStyles();\n renderer = true;\n break;\n case 'theme':\n this.animateSeries = true;\n break;\n case 'enableRtl':\n case 'locale':\n case 'currencyCode':\n if (this.isBlazor) {\n this.setCulture();\n renderer = true;\n }\n else {\n this.refresh();\n }\n break;\n case 'tooltip':\n if (this.tooltipModule) { // To check the tooltip enable is true.\n this.tooltipModule.previousPoints = [];\n if (this.tooltip.template) {\n this.tooltipModule.template = this.tooltip.template;\n }\n }\n break;\n }\n }\n if (!refreshBounds && renderer) {\n this.rotatedDataLabelCollections = [];\n this.removeSvg();\n this.renderElements();\n this.trigger('loaded', { chart: this.isBlazor ? {} : this });\n }\n if (refreshBounds) {\n if (this.enableCanvas) {\n this.createChartSvg();\n }\n else {\n this.removeSvg();\n }\n // this.enableCanvas ? this.createChartSvg() : this.removeSvg();\n if (this.isReact) {\n this.clearTemplate();\n }\n this.dragY = null;\n this.refreshAxis();\n this.refreshBound();\n this.trigger('loaded', { chart: this.isBlazor ? {} : this });\n this.redraw = false;\n this.animated = false;\n }\n }\n };\n __decorate([\n Property(null)\n ], Chart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"title\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: null, fontStyle: null, fontWeight: null, color: null }, titleSettings)\n ], Chart.prototype, \"titleStyle\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"subTitle\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: null, fontStyle: null, fontWeight: null, color: null }, titleSettings)\n ], Chart.prototype, \"subTitleStyle\", void 0);\n __decorate([\n Complex({}, Margin)\n ], Chart.prototype, \"margin\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], Chart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"background\", void 0);\n __decorate([\n Complex({ border: { color: null, width: 0.5 }, background: 'transparent' }, ChartArea)\n ], Chart.prototype, \"chartArea\", void 0);\n __decorate([\n Complex({ name: 'primaryXAxis' }, Axis)\n ], Chart.prototype, \"primaryXAxis\", void 0);\n __decorate([\n Complex({ name: 'primaryYAxis' }, Axis)\n ], Chart.prototype, \"primaryYAxis\", void 0);\n __decorate([\n Collection([{}], Row)\n ], Chart.prototype, \"rows\", void 0);\n __decorate([\n Collection([{}], Column)\n ], Chart.prototype, \"columns\", void 0);\n __decorate([\n Collection([{}], Axis)\n ], Chart.prototype, \"axes\", void 0);\n __decorate([\n Collection([{}], Series)\n ], Chart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], ChartAnnotationSettings)\n ], Chart.prototype, \"annotations\", void 0);\n __decorate([\n Property([])\n ], Chart.prototype, \"palettes\", void 0);\n __decorate([\n Property('Material')\n ], Chart.prototype, \"theme\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], Chart.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, CrosshairSettings)\n ], Chart.prototype, \"crosshair\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], Chart.prototype, \"legendSettings\", void 0);\n __decorate([\n Collection([{}], RangeColorSetting)\n ], Chart.prototype, \"rangeColorSettings\", void 0);\n __decorate([\n Complex({}, ZoomSettings)\n ], Chart.prototype, \"zoomSettings\", void 0);\n __decorate([\n Property('')\n ], Chart.prototype, \"highlightColor\", void 0);\n __decorate([\n Property('None')\n ], Chart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property('None')\n ], Chart.prototype, \"highlightMode\", void 0);\n __decorate([\n Property('None')\n ], Chart.prototype, \"selectionPattern\", void 0);\n __decorate([\n Property('None')\n ], Chart.prototype, \"highlightPattern\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], Chart.prototype, \"enableExport\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"allowExport\", void 0);\n __decorate([\n Collection([], Indexes)\n ], Chart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"enableAutoIntervalOnBothAxis\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"isTransposed\", void 0);\n __decorate([\n Property(false)\n ], Chart.prototype, \"enableCanvas\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"backgroundImage\", void 0);\n __decorate([\n Collection([], TechnicalIndicator)\n ], Chart.prototype, \"indicators\", void 0);\n __decorate([\n Property(true)\n ], Chart.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(null)\n ], Chart.prototype, \"description\", void 0);\n __decorate([\n Property(1)\n ], Chart.prototype, \"tabIndex\", void 0);\n __decorate([\n Property(true)\n ], Chart.prototype, \"enableSideBySidePlacement\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"resized\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"beforeResize\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"beforeExport\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"afterExport\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisLabelClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisRangeCalculated\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"axisMultiLabelRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"legendClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"multiLevelLabelClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"sharedTooltipRender\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartDoubleClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointDoubleClick\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"dragComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"selectionComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"zoomComplete\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"onZooming\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"scrollStart\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"scrollEnd\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"scrollChanged\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"dragStart\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"drag\", void 0);\n __decorate([\n Event()\n ], Chart.prototype, \"dragEnd\", void 0);\n __decorate([\n Property('USD')\n ], Chart.prototype, \"currencyCode\", void 0);\n Chart = __decorate([\n NotifyPropertyChanges\n ], Chart);\n return Chart;\n}(Component));\nexport { Chart };\n","import { getAnimationFunction, pathAnimation, getElement, animateAddPoints } from '../../common/utils/helper';\nimport { Rect } from '@syncfusion/ej2-svg-base';\nimport { Animation, animationMode, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Base for line type series.\n */\nvar LineBase = /** @class */ (function () {\n /**\n * Initializes the tooltip module for the chart.\n *\n * @param {Chart} [chartModule] - The chart instance to which the tooltip module is initialized.\n */\n function LineBase(chartModule) {\n this.chart = chartModule;\n }\n /**\n * Enhances the performance of the chart by enabling complex properties.\n *\n * @param {Series} series - The series for which complex properties are enabled.\n * @returns {Points[]} An array of points.\n * @private\n */\n LineBase.prototype.enableComplexProperty = function (series) {\n var tempPoints = [];\n var tempPoints2 = [];\n var xVisibleRange = series.xAxis.visibleRange;\n var yVisibleRange = series.yAxis.visibleRange;\n var seriesPoints = series.points;\n var areaBounds = series.clipRect;\n var xTolerance = Math.abs(xVisibleRange.delta / areaBounds.width);\n var yTolerance = Math.abs(yVisibleRange.delta / areaBounds.height);\n var prevXValue = (seriesPoints[0] && seriesPoints[0].xValue > xTolerance) ? 0 : xTolerance;\n var prevYValue = (seriesPoints[0] && seriesPoints[0].y > yTolerance) ? 0 : yTolerance;\n var xVal = 0;\n var yVal = 0;\n for (var _i = 0, seriesPoints_1 = seriesPoints; _i < seriesPoints_1.length; _i++) {\n var currentPoint = seriesPoints_1[_i];\n currentPoint.symbolLocations = [];\n xVal = currentPoint.xValue ? currentPoint.xValue : xVisibleRange.min;\n yVal = currentPoint.yValue ? currentPoint.yValue : yVisibleRange.min;\n if (Math.abs(prevXValue - xVal) >= xTolerance || Math.abs(prevYValue - yVal) >= yTolerance) {\n tempPoints.push(currentPoint);\n prevXValue = xVal;\n prevYValue = yVal;\n }\n }\n var tempPoint;\n for (var i = 0; i < tempPoints.length; i++) {\n tempPoint = tempPoints[i];\n if (isNullOrUndefined(tempPoint.x) || (series.category === 'Indicator' && (isNaN(tempPoint.xValue) || isNaN(tempPoint.yValue)))) {\n continue;\n }\n else {\n tempPoints2.push(tempPoint);\n }\n }\n return tempPoints2;\n };\n /**\n * To generate the line path direction.\n *\n * @param {Points} firstPoint firstPoint\n * @param {Points} secondPoint secondPoint\n * @param {Series} series series\n * @param {boolean} isInverted isInverted\n * @param {Function} getPointLocation getPointLocation\n * @param {string} startPoint startPoint\n * @returns {string} get line path direction\n */\n LineBase.prototype.getLineDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation, startPoint) {\n var direction = '';\n if (firstPoint != null) {\n var point1 = getPointLocation(firstPoint.xValue, firstPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n var point2 = getPointLocation(secondPoint.xValue, secondPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n direction = startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' +\n 'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ';\n }\n return direction;\n };\n /**\n * Appends a line path to the chart.\n *\n * @param {PathOption} options - The options for the path.\n * @param {Series} series - The series to which the path belongs.\n * @param {string} clipRect - The clipping rectangle for the path.\n * @returns {void}\n */\n LineBase.prototype.appendLinePath = function (options, series, clipRect) {\n var points = this.appendPathElement(options, series, clipRect);\n pathAnimation(points.element, options.d, series.chart.redraw, points.previousDirection, points.chart.duration);\n };\n LineBase.prototype.appendPathElement = function (options, series, clipRect) {\n var element = getElement(options.id);\n var chart = series.chart;\n var previousDirection = element ? element.getAttribute('d') : null;\n var htmlObject = series.chart.renderer.drawPath(options, new Int32Array([series.clipRect.x, series.clipRect.y]));\n if (htmlObject) {\n htmlObject.setAttribute('clip-path', clipRect);\n }\n series.pathElement = htmlObject;\n if (!series.chart.enableCanvas) {\n series.seriesElement.appendChild(htmlObject);\n }\n series.isRectSeries = false;\n return { element: element, previousDirection: previousDirection, chart: chart };\n };\n /**\n * Adds a line path to equate the start and end paths.\n *\n * @param {PathOption} options - The options for the path.\n * @param {Series} series - The series to which the path belongs.\n * @param {string} clipRect - The clip rectangle for the path.\n * @returns {void}\n */\n LineBase.prototype.addPath = function (options, series, clipRect) {\n var points = this.appendPathElement(options, series, clipRect);\n if (points.previousDirection !== '' && options.d !== '') {\n var startPathCommands = points.previousDirection.match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var endPathCommands = (options.d).match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var maxLength = Math.max(startPathCommands.length, endPathCommands.length);\n var minLength = Math.min(startPathCommands.length, endPathCommands.length);\n if (startPathCommands.length < endPathCommands.length) {\n for (var i = minLength; i < maxLength; i++) {\n if (endPathCommands.length !== startPathCommands.length) {\n startPathCommands.push((startPathCommands[startPathCommands.length - 1]).replace('M', 'L'));\n }\n }\n animateAddPoints(points.element, options.d, series.chart.redraw, startPathCommands.join(' '), this.chart.duration);\n }\n else if (startPathCommands.length > endPathCommands.length) {\n for (var i = minLength; i < maxLength; i++) {\n if (endPathCommands.length !== startPathCommands.length) {\n if (series.removedPointIndex === series.points.length) {\n endPathCommands.push((endPathCommands[endPathCommands.length - 1]).replace('M', 'L'));\n }\n else {\n endPathCommands.splice(1, 0, endPathCommands[0].replace('M', 'L'));\n }\n }\n }\n animateAddPoints(points.element, endPathCommands.join(''), series.chart.redraw, points.previousDirection, this.chart.duration, options.d);\n }\n else {\n animateAddPoints(points.element, options.d, series.chart.redraw, points.previousDirection, this.chart.duration);\n }\n }\n };\n /**\n * Adds a area path to equate the start and end paths.\n *\n * @param {PathOption} options - The options for the path.\n * @param {Series} series - The series to which the path belongs.\n * @param {string} clipRect - The clip rectangle for the path.\n * @returns {void}\n */\n LineBase.prototype.addAreaPath = function (options, series, clipRect) {\n var points = this.appendPathElement(options, series, clipRect);\n if (points.previousDirection !== '' && options.d !== '') {\n var startPathCommands = points.previousDirection.match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var endPathCommands = (options.d).match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var maxLength = Math.max(startPathCommands.length, endPathCommands.length);\n var minLength = Math.min(startPathCommands.length, endPathCommands.length);\n if (minLength < endPathCommands.length) {\n for (var i = minLength; i < maxLength; i++) {\n if (endPathCommands.length !== startPathCommands.length) {\n if (endPathCommands.length !== startPathCommands.length) {\n if (startPathCommands.length === 1) {\n startPathCommands.push(startPathCommands[startPathCommands.length - (options.id.indexOf('border') !== -1 ? 1 : 2)].replace('M', 'L'));\n }\n else {\n startPathCommands.splice(startPathCommands.length - 1, 0, startPathCommands[startPathCommands.length - (options.id.indexOf('border') !== -1 ? 1 : 2)]);\n }\n }\n }\n }\n animateAddPoints(points.element, options.d, series.chart.redraw, startPathCommands.join(' '), this.chart.duration);\n }\n else if (startPathCommands.length > endPathCommands.length) {\n for (var i = minLength; i < maxLength; i++) {\n if (endPathCommands.length !== startPathCommands.length) {\n if (series.removedPointIndex === series.points.length) {\n if (endPathCommands.length === 1) {\n endPathCommands.push(endPathCommands[endPathCommands.length - (options.id.indexOf('border') !== -1 ? 1 : 2)].replace('M', 'L'));\n }\n else {\n endPathCommands.splice(endPathCommands.length - 1, 0, endPathCommands[endPathCommands.length - (options.id.indexOf('border') !== -1 ? 1 : 2)]);\n }\n }\n else {\n endPathCommands.splice(1, 0, endPathCommands[1] ? endPathCommands[1] : endPathCommands[0]);\n }\n }\n }\n animateAddPoints(points.element, endPathCommands.join(''), series.chart.redraw, points.previousDirection, this.chart.duration, options.d);\n }\n else {\n animateAddPoints(points.element, options.d, series.chart.redraw, points.previousDirection, this.chart.duration);\n }\n }\n };\n /**\n * To render the marker for the series.\n *\n * @param {Series} series - The series for which markers are rendered.\n * @returns {void}\n * @private\n */\n LineBase.prototype.renderMarker = function (series) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * Executes progressive animation for the series.\n *\n * @param {Series} series - The series for which progressive animation is executed.\n * @param {AnimationModel} option - The animation option.\n * @returns {void}\n */\n LineBase.prototype.doProgressiveAnimation = function (series, option) {\n var animation = new Animation({});\n var path = series.pathElement;\n var strokeDashArray = path.getAttribute('stroke-dasharray');\n var pathLength = series.pathElement.getTotalLength();\n var currentTime;\n path.style.visibility = 'hidden';\n animation.animate(path, {\n duration: (option.duration === 0 && animationMode === 'Enable') ? 1000 : option.duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n path.style.visibility = 'visible';\n currentTime = Math.abs(Math.round(((args.timeStamp - args.delay) * pathLength) / args.duration));\n path.setAttribute('stroke-dasharray', currentTime + ',' + pathLength);\n }\n },\n end: function () {\n path.setAttribute('stroke-dasharray', strokeDashArray);\n path.style.visibility = '';\n series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n }\n });\n };\n /**\n * To store the symbol location and region.\n *\n * @param {Points} point point\n * @param {Series} series series\n * @param {boolean} isInverted isInverted\n * @param {Function} getLocation getLocation\n * @returns {void}\n */\n LineBase.prototype.storePointLocation = function (point, series, isInverted, getLocation) {\n var markerWidth = (series.marker && series.marker.width) ? series.marker.width : 0;\n var markerHeight = (series.marker && series.marker.height) ? series.marker.height : 0;\n point.symbolLocations.push(getLocation(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted, series));\n point.regions.push(new Rect(point.symbolLocations[0].x - markerWidth, point.symbolLocations[0].y - markerHeight, 2 * markerWidth, 2 * markerHeight));\n };\n /**\n * Checks if the y-value of a point falls within the y-axis range.\n *\n * @param {Points} point - The point to be checked.\n * @param {Axis} yAxis - The y-axis.\n * @returns {boolean} - Returns true if the y-value falls within the y-axis range, otherwise false.\n */\n LineBase.prototype.withinYRange = function (point, yAxis) {\n return point.yValue >= yAxis.visibleRange.min && point.yValue <= yAxis.visibleRange.max;\n };\n LineBase.prototype.GetStepLineDirection = function (currentPoint, previousPoint, stepLineType, command) {\n if (command === void 0) { command = 'L'; }\n if (stepLineType === 'Right') {\n return (command + ' ' +\n (previousPoint.x) + ' ' + (currentPoint.y) + ' L ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n else if (stepLineType === 'Center') {\n var centerX = previousPoint.x + (currentPoint.x - previousPoint.x) / 2;\n return (command + ' ' +\n (centerX) + ' ' + (previousPoint.y) + ' L ' + (centerX) + ' ' + (currentPoint.y) + ' L ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n else {\n return (command + ' ' +\n (currentPoint.x) + ' ' + (previousPoint.y) + ' L ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n }\n };\n /**\n * Gets the first and last visible points from a collection of points.\n *\n * @param {Points[]} points - Collection of points.\n * @returns {{ first: Points, last: Points }} - Returns an object containing the first and last visible points.\n */\n LineBase.prototype.getFirstLastVisiblePoint = function (points) {\n var first = null;\n var last = null;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (first === null && point.visible) {\n first = last = point;\n }\n last = point.visible ? point : last;\n }\n return { first: first ? first : points[0], last: last ? last : points[points.length - 1] };\n };\n /**\n * Gets the border direction based on the provided direction.\n *\n * @param {string} direction - The direction string.\n * @returns {string} - Returns the border direction.\n */\n LineBase.prototype.getBorderDirection = function (direction) {\n var coordinates = direction.split(' ');\n if (coordinates.length > 3 && !(this.chart.stackingAreaSeriesModule) && !(this.chart.stackingStepAreaSeriesModule)) {\n coordinates.splice(coordinates.length - 4, 3);\n }\n else if (this.chart.stackingAreaSeriesModule || this.chart.stackingStepAreaSeriesModule) {\n coordinates.splice(coordinates.length / 2 + 1, coordinates.length / 2 + 1);\n if (coordinates[coordinates.length - 1] === 'L' || coordinates[coordinates.length - 1] === 'M') {\n coordinates.splice(coordinates.length - 1, 1);\n }\n }\n return coordinates.join(' ');\n };\n /**\n * Removes the border from the empty points based on the provided border direction.\n *\n * @param {string} borderDirection - The border direction.\n * @returns {string} - Returns the updated border direction.\n */\n LineBase.prototype.removeEmptyPointsBorder = function (borderDirection) {\n var startIndex = 0;\n var coordinates = borderDirection.split(' ');\n var point;\n if (coordinates.length === 4) {\n return coordinates.join(' ');\n }\n do {\n point = coordinates.indexOf('M', startIndex);\n if (point > -1) {\n coordinates.splice(point + 1, 3);\n startIndex = point + 1;\n if (point - 6 > 0) {\n coordinates.splice(point - 6, 6);\n startIndex -= 6;\n }\n }\n } while (point !== -1);\n return coordinates.join(' ');\n };\n /**\n * Performs linear animation for the series based on the provided animation model.\n *\n * @param {Series} series - The series to animate.\n * @param {AnimationModel} animation - The animation model containing animation details.\n * @returns {void}\n */\n LineBase.prototype.doLinearAnimation = function (series, animation) {\n var clipRect = series.clipRectElement.childNodes[0].childNodes[0];\n var duration = series.chart.animated ? series.chart.duration : animation.duration;\n var effect = getAnimationFunction('Linear');\n var elementHeight = +clipRect.getAttribute('height');\n var elementWidth = +clipRect.getAttribute('width');\n var xCenter = +clipRect.getAttribute('x');\n var yCenter = series.chart.requireInvertedAxis ? +clipRect.getAttribute('height') + +clipRect.getAttribute('y') :\n +clipRect.getAttribute('y');\n var value;\n clipRect.style.visibility = 'hidden';\n new Animation({}).animate(clipRect, {\n duration: (duration === 0 && animationMode === 'Enable') ? 1000 : duration,\n delay: animation.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n clipRect.style.visibility = 'visible';\n if (series.chart.requireInvertedAxis) {\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n else {\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n }\n }\n },\n end: function () {\n clipRect.setAttribute('transform', 'translate(0,0)');\n series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n }\n });\n };\n return LineBase;\n}());\nexport { LineBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, appendClipElement, pathAnimation, animateAddPoints } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\nimport { RectOption, getElement } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Base class for multi colored series.\n */\nvar MultiColoredSeries = /** @class */ (function (_super) {\n __extends(MultiColoredSeries, _super);\n function MultiColoredSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To generate the area path direction.\n *\n * @param {number} xValue xValue\n * @param {number} yValue yValue\n * @param {Series} series series\n * @param {boolean} isInverted isInverted\n * @param {Function} getPointLocation getPointLocation\n * @param {ChartLocation} startPoint startPoint\n * @param {string} startPath startPath\n * @returns {string} Returns the area path direction.\n */\n MultiColoredSeries.prototype.getAreaPathDirection = function (xValue, yValue, series, isInverted, getPointLocation, startPoint, startPath) {\n var direction = '';\n var firstPoint;\n if (startPoint === null) {\n firstPoint = getPointLocation(xValue, yValue, series.xAxis, series.yAxis, isInverted, series);\n direction += (startPath + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n }\n return direction;\n };\n /**\n * To generate the empty point direction.\n *\n * @param {ChartLocation} firstPoint firstPoint\n * @param {ChartLocation} secondPoint secondPoint\n * @param {Series} series series\n * @param {boolean} isInverted isInverted\n * @param {Function} getPointLocation getPointLocation\n * @returns {string} Returns the empty point direction.\n */\n MultiColoredSeries.prototype.getAreaEmptyDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation) {\n var direction = '';\n direction += this.getAreaPathDirection(firstPoint.x, firstPoint.y, series, isInverted, getPointLocation, null, 'L');\n direction += this.getAreaPathDirection(secondPoint.x, secondPoint.y, series, isInverted, getPointLocation, null, 'L');\n return direction;\n };\n /**\n * Set the color for a point based on its current state and previous state.\n *\n * @param {Points} currentPoint - The current point whose color needs to be set.\n * @param {Points} previous - The previous state of the point.\n * @param {Series} series - The series associated with the point.\n * @param {boolean} isXSegment - Indicates whether the point is in the x-segment.\n * @param {ChartSegmentModel[]} segments - The segments associated with the point.\n * @returns {boolean} - Returns true if the color is set successfully, false otherwise.\n */\n MultiColoredSeries.prototype.setPointColor = function (currentPoint, previous, series, isXSegment, segments) {\n if (series.pointColorMapping === '') {\n var segment = void 0;\n var value = void 0;\n for (var i = 0; i < segments.length; i++) {\n segment = segments[i];\n value = isXSegment ? currentPoint.xValue : currentPoint.yValue;\n if (value <= this.getAxisValue(segment.value, isXSegment ? series.xAxis : series.yAxis, series.chart) ||\n (!segment.value && segment.value !== 0)) {\n currentPoint.interior = segment.color;\n break;\n }\n }\n if (currentPoint.interior == null) {\n currentPoint.interior = series.interior;\n }\n return false;\n }\n else {\n if (previous) {\n return series.setPointColor(currentPoint, series.interior) !== series.setPointColor(previous, series.interior);\n }\n else {\n return false;\n }\n }\n };\n MultiColoredSeries.prototype.sortSegments = function (series, chartSegments) {\n var _this = this;\n var axis = series.segmentAxis === 'X' ? series.xAxis : series.yAxis;\n var segments = [].concat(chartSegments);\n return segments.sort(function (a, b) {\n return _this.getAxisValue(a.value, axis, series.chart) - _this.getAxisValue(b.value, axis, series.chart);\n });\n };\n /**\n * Segment calculation performed here.\n *\n * @param {Series} series series\n * @param {PathOption[]} options options\n * @param {ChartSegmentModel[]} segments chartSegments\n * @param {boolean} pointAnimate pointAnimate\n * @returns {void}\n */\n MultiColoredSeries.prototype.applySegmentAxis = function (series, options, segments, pointAnimate) {\n var _this = this;\n if (series.pointColorMapping !== '') {\n options.map(function (option) {\n _this[pointAnimate ? 'addMulticolorPath' : 'appendLinePath'](option, series, '');\n });\n return null;\n }\n var isXSegment = series.segmentAxis === 'X';\n var axis = isXSegment ? series.xAxis : series.yAxis;\n var chart = series.chart;\n var segment;\n this.includeSegment(segments, axis, series, segments.length);\n var length = segments.length;\n var value;\n var clipPath;\n var attributeOptions;\n var areaBorderCount = 0;\n var _loop_1 = function (index) {\n segment = segments[index];\n value = this_1.getAxisValue(segment.value, axis, series.chart);\n clipPath = this_1.createClipRect(index ? this_1.getAxisValue(segments[index - 1].value, axis, series.chart)\n : axis.visibleRange.min, value, series, index, isXSegment);\n if (clipPath) {\n options.map(function (option) {\n areaBorderCount += 1;\n attributeOptions = {\n 'clip-path': clipPath,\n 'stroke-dasharray': segment.dashArray,\n 'opacity': option.opacity,\n 'stroke': series.type.indexOf('Line') > -1 ? segment.color || series.interior : option['stroke'],\n 'stroke-width': option['stroke-width'],\n 'fill': series.type.indexOf('Line') > -1 ? 'none' : segment.color || series.interior,\n 'id': option.id + '_Segment_' + index,\n 'd': option.d\n };\n if (areaBorderCount % 2 === 0 && _this.chart.multiColoredAreaSeriesModule && series.border.color !== 'transparent' && attributeOptions['stroke-width'] !== 0) {\n attributeOptions.fill = 'transparent';\n }\n if (pointAnimate) {\n _this.addMulticolorPath(attributeOptions, series, '', true);\n }\n else {\n pathAnimation(getElement(attributeOptions.id), attributeOptions.d, chart.redraw);\n }\n series.pathElement = chart.renderer.drawPath(attributeOptions);\n if (!series.chart.enableCanvas && !pointAnimate) {\n series.seriesElement.appendChild(chart.renderer.drawPath(attributeOptions));\n }\n });\n }\n };\n var this_1 = this;\n for (var index = 0; index < length; index++) {\n _loop_1(index);\n }\n };\n MultiColoredSeries.prototype.includeSegment = function (segments, axis, series, length) {\n if (length <= 0) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n return null;\n }\n if (this.getAxisValue(segments[length - 1].value, axis, series.chart) < axis.visibleRange.max) {\n segments.push({ value: axis.visibleRange.max, color: series.interior });\n }\n };\n MultiColoredSeries.prototype.addMulticolorPath = function (options, series, clipRect, isSegnment) {\n var points = this.appendPathElement(options, series, clipRect);\n if (points.previousDirection === null || points.previousDirection === '') {\n points.previousDirection = 'M ' + (options.d).split(' ').slice(-3)[0] + ' ' + (options.d).split(' ').slice(-5)[0] + ' L ' + (options.d).split(' ').slice(-3)[0] + ' ' + (options.d).split(' ').slice(-5)[0] + ' L ' + (options.d).split(' ').slice(-3)[0] + ' ' + (options.d).split(' ').slice(-5)[0];\n }\n if (options.d === null || options.d === '') {\n options.d = 'M ' + (points.previousDirection).split(' ').slice(-3)[0] + ' ' + (points.previousDirection).split(' ').slice(-5)[0] + ' L ' + (points.previousDirection).split(' ').slice(-3)[0] + ' ' + (points.previousDirection).split(' ').slice(-5)[0];\n }\n if (isSegnment) {\n var startPathCommands = points.previousDirection.match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var endPathCommands = (options.d).match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var maxLength = Math.max(startPathCommands.length, endPathCommands.length);\n var minLength = Math.min(startPathCommands.length, endPathCommands.length);\n if (startPathCommands.length === endPathCommands.length) {\n animateAddPoints(getElement(options.id), options.d, series.chart.redraw, points.previousDirection, this.chart.duration);\n }\n if (startPathCommands.length < endPathCommands.length) {\n for (var i = minLength; i < maxLength; i++) {\n if (endPathCommands.length !== startPathCommands.length) {\n startPathCommands.splice(startPathCommands.length - ((series.type.indexOf('Line') !== -1) ? 1 : 2), 0, startPathCommands[startPathCommands.length - ((series.type.indexOf('Line') !== -1) ? 1 : 2)]);\n }\n }\n animateAddPoints(getElement(options.id), options.d, series.chart.redraw, startPathCommands.join(' '), this.chart.duration);\n }\n if (startPathCommands.length > endPathCommands.length) {\n for (var i = minLength; i < maxLength; i++) {\n if (endPathCommands.length !== startPathCommands.length) {\n endPathCommands.splice(1, 0, endPathCommands[1].replace('M', 'L'));\n }\n }\n animateAddPoints(points.element, endPathCommands.join(''), series.chart.redraw, startPathCommands.join(''), this.chart.duration, options.d);\n }\n }\n };\n /**\n * To create clip rect for segment axis.\n *\n * @param {number} startValue startValue\n * @param {number} endValue endValue\n * @param {Series} series series\n * @param {number} index index\n * @param {boolean} isX isX\n * @returns {string} clip rect for segment axis\n */\n MultiColoredSeries.prototype.createClipRect = function (startValue, endValue, series, index, isX) {\n var isRequired = series.chart.requireInvertedAxis;\n var startPointLocation = getPoint(isX ? startValue : series.xAxis.visibleRange.min, isX ? series.yAxis.visibleRange.max : endValue, series.xAxis, series.yAxis, isRequired);\n var endPointLocation = getPoint(isX ? endValue : series.xAxis.visibleRange.max, isX ? series.yAxis.visibleRange.min : startValue, series.xAxis, series.yAxis, isRequired);\n endPointLocation = isRequired ?\n [startPointLocation, startPointLocation = endPointLocation][0] : endPointLocation;\n var options;\n if (((series.xAxis.isInversed || series.xAxis.isAxisInverse) ?\n startPointLocation.x - endPointLocation.x > 0 : endPointLocation.x - startPointLocation.x > 0) &&\n (series.yAxis.isInversed ? startPointLocation.y - endPointLocation.y > 0 : endPointLocation.y - startPointLocation.y > 0)) {\n options = new RectOption(series.chart.element.id + '_ChartSegment' + series.index + 'ClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: (series.xAxis.isInversed || series.xAxis.isAxisInverse) ? endPointLocation.x : startPointLocation.x,\n y: series.yAxis.isInversed ? endPointLocation.y : startPointLocation.y,\n width: (series.xAxis.isInversed || series.xAxis.isAxisInverse) ? startPointLocation.x - endPointLocation.x :\n endPointLocation.x - startPointLocation.x,\n height: series.yAxis.isInversed ? startPointLocation.y - endPointLocation.y : endPointLocation.y - startPointLocation.y\n });\n if (!series.chart.enableCanvas) {\n series.seriesElement.appendChild(appendClipElement(series.chart.redraw, options, series.chart.renderer));\n }\n return 'url(#' + series.chart.element.id + '_ChartSegment' + series.index + 'ClipRect_' + index + ')';\n }\n return null;\n };\n /**\n * To get exact value from segment value.\n *\n * @param {Object} segmentValue segmentValue\n * @param {Axis} axis axis\n * @param {Chart} chart chart\n * @returns {number} - Returns segment value.\n */\n MultiColoredSeries.prototype.getAxisValue = function (segmentValue, axis, chart) {\n if (segmentValue === null) {\n segmentValue = axis.visibleRange.max;\n }\n if (axis.valueType === 'DateTime') {\n var option = { skeleton: 'full', type: 'dateTime' };\n return Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: segmentValue }).val))));\n }\n else if (axis.valueType.indexOf('Category') > -1) {\n var xValue = axis.valueType === 'DateTimeCategory' ?\n (segmentValue.getTime()).toString() :\n segmentValue;\n return (axis.labels.indexOf(xValue) < 0) ? +segmentValue : axis.labels.indexOf(xValue);\n }\n else {\n return +segmentValue;\n }\n };\n return MultiColoredSeries;\n}(LineBase));\nexport { MultiColoredSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, ChartLocation, TransformToVisible } from '../../common/utils/helper';\nimport { PathOption } from '@syncfusion/ej2-svg-base';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `AreaSeries` module is used to render the area series.\n */\nvar AreaSeries = /** @class */ (function (_super) {\n __extends(AreaSeries, _super);\n function AreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Renders the area series on the chart.\n *\n * @param {Series} series - The series to be rendered.\n * @param {Axis} xAxis - The X-axis associated with the series.\n * @param {Axis} yAxis - The Y-axis associated with the series.\n * @param {boolean} isInverted - Indicates whether the chart is inverted or not.\n * @param {boolean} pointAnimate - Specifies whether the point has to be animated or not.\n * @param {boolean} pointUpdate - Specifies whether the point has to be updated or not.\n * @returns {void}\n * @private\n */\n AreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted, pointAnimate, pointUpdate) {\n var startPoint = null;\n var direction = '';\n var isPolar = (series.chart && series.chart.chartAreaType === 'PolarRadar');\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n if (isPolar) {\n var connectPoints = this.getFirstLastVisiblePoint(series.points);\n origin = connectPoints.first.yValue;\n }\n var currentXValue;\n var isDropMode = (series.emptyPointSettings && series.emptyPointSettings.mode === 'Drop');\n var borderWidth = series.border.width ? series.border.width : 0;\n var borderColor = series.border.color ? series.border.color : series.interior;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var visiblePoints = this.enableComplexProperty(series);\n var point;\n var emptyPointDirection = '';\n for (var i = 0; i < visiblePoints.length; i++) {\n point = visiblePoints[i];\n currentXValue = point.xValue;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[i - 1], point, visiblePoints[i + 1], series)) {\n direction += this.getAreaPathDirection(currentXValue, origin, series, isInverted, getCoordinate, startPoint, 'M');\n startPoint = startPoint || new ChartLocation(currentXValue, origin);\n // First Point to draw the area path\n direction += this.getAreaPathDirection(currentXValue, point.yValue, series, isInverted, getCoordinate, null, 'L');\n if (visiblePoints[i + 1] && (!visiblePoints[i + 1].visible &&\n (!isPolar || (isPolar && this.withinYRange(visiblePoints[i + 1], yAxis)))) && !isDropMode) {\n direction += this.getAreaEmptyDirection({ 'x': currentXValue, 'y': origin }, startPoint, series, isInverted, getCoordinate);\n startPoint = null;\n }\n this.storePointLocation(point, series, isInverted, getCoordinate);\n }\n }\n if (isPolar && direction !== '') {\n var endPoint = '';\n var chart = this.chart;\n endPoint += this.getAreaPathDirection(0, origin, series, isInverted, getCoordinate, null, 'L');\n if (xAxis.isAxisInverse || yAxis.isAxisInverse) {\n direction += (series.type === 'Polar' ? chart.polarSeriesModule.getPolarIsInversedPath(xAxis, endPoint) :\n chart.radarSeriesModule.getRadarIsInversedPath(xAxis, endPoint));\n }\n direction = direction.concat(direction + ' ' + 'Z');\n }\n this[pointAnimate ? 'addAreaPath' : 'appendLinePath'](new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, 0, 'transparent', series.opacity, series.dashArray, ((direction !== '') ? (direction + this.getAreaPathDirection(series.points[series.points.length - 1].xValue, series.chart.chartAreaType === 'PolarRadar' ?\n series.points[series.points.length - 1].yValue : origin, series, isInverted, getCoordinate, null, 'L')) : '')), series, '');\n /**\n * To draw border for the path directions of area\n */\n if (series.border.width !== 0) {\n emptyPointDirection = this.removeEmptyPointsBorder(direction);\n this[pointAnimate ? 'addAreaPath' : 'appendLinePath'](new PathOption(series.chart.element.id + '_Series_border_' + series.index, 'transparent', borderWidth, borderColor, 1, series.dashArray, emptyPointDirection), series, '');\n }\n if (!pointUpdate) {\n this.renderMarker(series);\n }\n };\n /**\n * To animate point for area series.\n *\n * @param {Series} series - Specifies the series.\n * @param {number} point - Specifies the point.\n * @returns {void}\n * @private\n */\n AreaSeries.prototype.updateDirection = function (series, point) {\n this.render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis, false, true);\n for (var i = 0; i < point.length; i++) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.renderMarker(series, series.points[point[i]], series.points[point[i]].symbolLocations[0], null, true);\n }\n if (series.marker.dataLabel.visible && series.chart.dataLabelModule) {\n series.chart.dataLabelModule.commonId = series.chart.element.id + '_Series_' + series.index + '_Point_';\n var dataLabelElement = series.chart.dataLabelModule.renderDataLabel(series, series.points[point[i]], null, series.marker.dataLabel);\n for (var j = 0; j < dataLabelElement.length; j++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j]);\n }\n }\n }\n };\n /**\n * To destroy the area series.\n *\n * @returns {void}\n * @private\n */\n AreaSeries.prototype.destroy = function () {\n /**\n * Destroy method calling here.\n */\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n AreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series.\n */\n return 'AreaSeries';\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n AreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return AreaSeries;\n}(MultiColoredSeries));\nexport { AreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, TransformToVisible, animateAddPoints } from '../../common/utils/helper';\nimport { PathOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { LineBase } from './line-base';\n/**\n * `StackingAreaSeries` module used to render the stacking area series.\n */\nvar StackingAreaSeries = /** @class */ (function (_super) {\n __extends(StackingAreaSeries, _super);\n function StackingAreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking area series.\n *\n * @param {Series} series - The series to be rendered.\n * @param {Axis} xAxis - The x-axis of the chart.\n * @param {Axis} yAxis - The y-axis of the chart.\n * @param {boolean} isInverted - Specifies whether the chart is inverted.\n * @param {boolean} pointAnimate - Specifies whether the point has to be animated or not.\n * @param {boolean} pointUpdate - Specifies whether the point has to be updated or not.\n * @returns {void}\n * @private\n */\n StackingAreaSeries.prototype.render = function (series, xAxis, yAxis, isInverted, pointAnimate, pointUpdate) {\n var polarAreaType = series.chart.chartAreaType === 'PolarRadar';\n var getCoordinate = polarAreaType ? TransformToVisible : getPoint;\n var lineDirection = '';\n var visiblePoints = this.enableComplexProperty(series);\n var pointsLength = visiblePoints.length;\n var stackedvalue = series.stackedValues;\n var pointIndex;\n var nextPointIndex;\n var origin = polarAreaType ?\n Math.max(series.yAxis.visibleRange.min, stackedvalue.endValues[0]) :\n Math.max(series.yAxis.visibleRange.min, stackedvalue.startValues[0]);\n var startPoint = 0;\n var point1;\n var point2;\n var emptyPointDirection = '';\n if (pointsLength > 0) {\n point1 = getCoordinate(visiblePoints[0].xValue, origin, xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n }\n var isPolar = (series.chart && series.chart.chartAreaType === 'PolarRadar');\n var index;\n for (var i = series.index; i >= 0; i--) {\n if (series.chart.visibleSeries[i].visible) {\n index = series.chart.visibleSeries[i].index;\n break;\n }\n }\n for (var i = 0; i < pointsLength; i++) {\n pointIndex = visiblePoints[i].index;\n visiblePoints[i].symbolLocations = [];\n visiblePoints[i].regions = [];\n if (visiblePoints[i].visible && withInRange(visiblePoints[i - 1], visiblePoints[i], visiblePoints[i + 1], series)) {\n var startvalue = series.index > 0 && index !== undefined ?\n this.chart.visibleSeries[index].stackedValues.endValues[pointIndex] :\n stackedvalue.startValues[pointIndex];\n point1 = getCoordinate(visiblePoints[i].xValue, (!series.visible && series.isLegendClicked) ? startvalue :\n stackedvalue.endValues[pointIndex], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n visiblePoints[i].symbolLocations.push(getCoordinate(visiblePoints[i].xValue, stackedvalue.endValues[pointIndex], xAxis, yAxis, isInverted, series));\n visiblePoints[i].regions.push(new Rect(visiblePoints[i].symbolLocations[0].x - series.marker.width, visiblePoints[i].symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n }\n else {\n if (!isPolar && series.emptyPointSettings.mode !== 'Drop') {\n for (var j = i - 1; j >= startPoint; j--) {\n pointIndex = visiblePoints[j].index;\n point2 = getCoordinate(visiblePoints[j].xValue, stackedvalue.startValues[pointIndex], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n if (visiblePoints[i + 1] && (visiblePoints[i + 1].visible &&\n (!isPolar || (isPolar && this.withinYRange(visiblePoints[i + 1], yAxis))))) {\n nextPointIndex = visiblePoints[i + 1].index;\n point1 = getCoordinate(visiblePoints[i + 1].xValue, stackedvalue.startValues[nextPointIndex], xAxis, yAxis, isInverted, series);\n lineDirection = lineDirection.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n }\n startPoint = i + 1;\n }\n }\n }\n if (series.chart.chartAreaType === 'PolarRadar' && visiblePoints.length > 1) {\n var connectPoints = this.getFirstLastVisiblePoint(series.points);\n var chart = this.chart;\n point1 = { 'x': connectPoints.first.xValue, 'y': stackedvalue.endValues[connectPoints.first.index] };\n point2 = getCoordinate(point1.x, point1.y, xAxis, yAxis, isInverted, series);\n lineDirection += ('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n if (this.chart.visible === 1 && (xAxis.isAxisInverse || yAxis.isAxisInverse)) {\n this.chart.enableAnimation = false;\n lineDirection = (series.type === 'Polar' ? chart.polarSeriesModule.getPolarIsInversedPath(xAxis, lineDirection) :\n chart.radarSeriesModule.getRadarIsInversedPath(xAxis, lineDirection));\n }\n }\n if (!isPolar || (isPolar && series.index !== this.getFirstSeriesIndex(series.chart.visibleSeries))) {\n for (var j = pointsLength - 1; j >= startPoint; j--) {\n pointIndex = visiblePoints[j].index;\n if (isPolar && !visiblePoints[j].visible) {\n continue;\n }\n var previousSeries = this.getPreviousSeries(series);\n if (previousSeries.emptyPointSettings.mode !== 'Drop' || !previousSeries.points[j].isEmpty) {\n point2 = getCoordinate(visiblePoints[j].xValue, (!series.visible && series.isLegendClicked && series.index > 0\n && index !== undefined) ? this.chart.visibleSeries[index].stackedValues.endValues[pointIndex]\n : stackedvalue.startValues[pointIndex], xAxis, yAxis, isInverted, series);\n if (stackedvalue.startValues[pointIndex] === stackedvalue.endValues[pointIndex]) {\n point2.y = Math.floor(point2.y);\n }\n lineDirection = lineDirection.concat(((j === (pointsLength - 1) && polarAreaType) ? 'M' : 'L')\n + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n }\n }\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index, series.interior, 0, 'transparent', series.opacity, series.dashArray, lineDirection);\n this[pointAnimate ? 'addAreaPath' : 'appendLinePath'](options, series, '');\n /**\n * To draw border for the path directions of area\n */\n if (series.border.width !== 0 && series.visible) {\n emptyPointDirection = this.removeEmptyPointsBorder(this.getBorderDirection(lineDirection));\n var options_1 = new PathOption(series.chart.element.id + '_Series_border_' + series.index, 'transparent', series.visible ? series.border.width : 0, series.border.color ? series.border.color : series.interior, 1, series.dashArray, emptyPointDirection);\n this[pointAnimate ? 'addAreaPath' : 'appendLinePath'](options_1, series, '');\n }\n if (!pointUpdate && series.visible) {\n this.renderMarker(series);\n }\n };\n /**\n * To animate point for stacking area series.\n *\n * @param {Series} series - Specifies the series.\n * @param {number} point - Specifies the point.\n * @returns {void}\n * @private\n */\n StackingAreaSeries.prototype.updateDirection = function (series, point) {\n for (var i = 0; i < series.xAxis.series.length; i++) {\n var stackSeries = series.xAxis.series[i];\n this.render(stackSeries, stackSeries.xAxis, stackSeries.yAxis, stackSeries.chart.requireInvertedAxis, false, true);\n for (var j = 0; j < point.length; j++) {\n if (stackSeries.marker && stackSeries.marker.visible) {\n stackSeries.chart.markerRender.renderMarker(stackSeries, stackSeries.points[point[j]], stackSeries.points[point[j]].symbolLocations[0], null, true);\n }\n if (stackSeries.marker.dataLabel.visible && stackSeries.chart.dataLabelModule) {\n stackSeries.chart.dataLabelModule.commonId = stackSeries.chart.element.id + '_Series_' + stackSeries.index + '_Point_';\n var dataLabelElement = stackSeries.chart.dataLabelModule.\n renderDataLabel(stackSeries, stackSeries.points[point[j]], null, stackSeries.marker.dataLabel);\n for (var k = 0; k < dataLabelElement.length; k++) {\n stackSeries.chart.dataLabelModule.doDataLabelAnimation(stackSeries, dataLabelElement[k]);\n }\n }\n }\n }\n };\n /**\n * Adds a area path to equate the start and end paths.\n *\n * @param {PathOption} options - The options for the path.\n * @param {Series} series - The series to which the path belongs.\n * @param {string} clipRect - The clip rectangle for the path.\n * @returns {void}\n */\n StackingAreaSeries.prototype.addAreaPath = function (options, series, clipRect) {\n var points = this.appendPathElement(options, series, clipRect);\n if (points.previousDirection !== '' && options.d !== '') {\n var startPathCommands = points.previousDirection.match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var endPathCommands = (options.d).match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var maxLength = Math.max(startPathCommands.length, endPathCommands.length);\n var minLength = Math.min(startPathCommands.length, endPathCommands.length);\n if (startPathCommands.length < endPathCommands.length) {\n for (var i = startPathCommands.length; i < endPathCommands.length; i++) {\n if (endPathCommands.length !== startPathCommands.length) {\n startPathCommands.splice((startPathCommands.length + 1) / 2, 0, startPathCommands.slice((startPathCommands.length - 1) / 2)[0], startPathCommands.slice((startPathCommands.length - 1) / 2)[1]);\n }\n }\n animateAddPoints(points.element, options.d, series.chart.redraw, startPathCommands.join(' '), this.chart.duration);\n }\n else if (startPathCommands.length > endPathCommands.length) {\n for (var i = minLength; i < maxLength; i++) {\n if (endPathCommands.length !== startPathCommands.length) {\n endPathCommands.splice(1, 0, endPathCommands[1]);\n endPathCommands.splice(endPathCommands.length - 1, 0, endPathCommands[endPathCommands.length - 1]);\n }\n }\n animateAddPoints(points.element, endPathCommands.join(''), series.chart.redraw, points.previousDirection, this.chart.duration, options.d);\n }\n else {\n animateAddPoints(points.element, options.d, series.chart.redraw, points.previousDirection, this.chart.duration);\n }\n }\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n StackingAreaSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the stacking area.\n *\n * @returns {void}\n * @private\n */\n StackingAreaSeries.prototype.destroy = function () {\n /**\n * Destroy method calling here.\n */\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n StackingAreaSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series.\n */\n return 'StackingAreaSeries';\n };\n /**\n * Retrieves the previous series from the provided series.\n *\n * @param {Series} series - The current series.\n * @returns {Series} - The previous series.\n */\n StackingAreaSeries.prototype.getPreviousSeries = function (series) {\n var seriesCollection = series.chart.visibleSeries;\n for (var i = 0, length_1 = seriesCollection.length; i < length_1; i++) {\n if (series.index === seriesCollection[i].index && i !== 0) {\n return seriesCollection[i - 1];\n }\n }\n return seriesCollection[0];\n };\n /**\n * To find the first visible series index.\n *\n * @param {Series[]} seriesCollection - The first visible series index.\n * @returns {number} - Returns the first visible series index.\n */\n StackingAreaSeries.prototype.getFirstSeriesIndex = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n if (series.visible) {\n return series.index;\n }\n }\n return 0;\n };\n return StackingAreaSeries;\n}(LineBase));\nexport { StackingAreaSeries };\n","import { Animation, animationMode, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { DoubleRange } from '../utils/double-range';\nimport { appendChildElement, redrawElement, pathAnimation, valueToCoefficient, getVisiblePoints, colorNameToHex, checkColorFormat, applyZLight } from '../../common/utils/helper';\nimport { getAnimationFunction, getPoint, getMinPointsDelta } from '../../common/utils/helper';\nimport { PathOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { pointRender } from '../../common/model/constants';\n/**\n * Column Series Base\n */\nvar ColumnBase = /** @class */ (function () {\n function ColumnBase() {\n }\n ColumnBase.prototype.getSideBySideInfo = function (series) {\n if (series.chart.enableSideBySidePlacement && !series.position) {\n this.getSideBySidePositions(series);\n }\n if (series.columnWidthInPixel) {\n return new DoubleRange(0, 0);\n }\n var position = series.type === 'Histogram' || !series.chart.enableSideBySidePlacement ? 0 : series.position;\n var rectCount = series.type === 'Histogram' || !series.chart.enableSideBySidePlacement ? 1 : series.rectCount;\n series.isRectSeries = true;\n var visibleSeries = series.chart.visibleSeries;\n var seriesSpacing = series.chart.enableSideBySidePlacement ? series.columnSpacing : 0; // Column Spacing\n var pointSpacing = (series.columnWidth === null || isNaN(+series.columnWidth)) ? ((series.type === 'Histogram') ? 1 : 0.7) :\n Math.min(series.columnWidth, 1); // Column width\n var minimumPointDelta = getMinPointsDelta(series.xAxis, visibleSeries);\n var width = minimumPointDelta * pointSpacing;\n var radius;\n var location = (position) / rectCount - 0.5;\n var doubleRange = new DoubleRange(location, location + (1 / rectCount));\n if (!(isNaN(doubleRange.start) || isNaN(doubleRange.end))) {\n if (series.groupName && series.type.indexOf('Stacking') === -1) {\n var mainColumnWidth_1 = 0.7;\n series.chart.series.filter(function (series) {\n if (series.columnWidth > mainColumnWidth_1) {\n mainColumnWidth_1 = series.columnWidth;\n }\n });\n var mainWidth = minimumPointDelta * mainColumnWidth_1;\n var mainDoubleRange = new DoubleRange(doubleRange.start * mainWidth, doubleRange.end * mainWidth);\n var difference = ((mainDoubleRange.delta) - (doubleRange.end * width - doubleRange.start * width)) / 2;\n doubleRange = new DoubleRange(mainDoubleRange.start + difference, mainDoubleRange.end - difference);\n }\n else {\n doubleRange = new DoubleRange(doubleRange.start * width, doubleRange.end * width);\n }\n radius = seriesSpacing * doubleRange.delta;\n doubleRange = new DoubleRange(doubleRange.start + radius / 2, doubleRange.end - radius / 2);\n }\n return doubleRange;\n };\n /**\n * Gets the rectangle bounds based on two points.\n *\n * @param {number} x1 - The x-coordinate of the first point.\n * @param {number} y1 - The y-coordinate of the first point.\n * @param {number} x2 - The x-coordinate of the second point.\n * @param {number} y2 - The y-coordinate of the second point.\n * @param {Series} series - The series associated with the rectangle.\n * @returns {Rect} - The rectangle bounds.\n */\n ColumnBase.prototype.getRectangle = function (x1, y1, x2, y2, series) {\n var point1 = getPoint(x1, y1, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n var point2 = getPoint(x2, y2, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n return new Rect(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y), Math.abs(point2.x - point1.x), Math.abs(point2.y - point1.y));\n };\n /**\n * Draws a cylinder using the provided options and element.\n *\n * @param {PathOption} options - The path options for drawing the cylinder.\n * @param {HTMLElement} element - The HTML element to which the cylinder is drawn.\n * @param {CylinderSeriesOption} cylinderSeriesOption - The options specific to the cylinder series.\n * @param {Rect} rect - The rectangle bounds within which the cylinder is drawn.\n * @param {Series} series - The series associated with the cylinder.\n * @returns {void}\n */\n ColumnBase.prototype.drawCylinder = function (options, element, cylinderSeriesOption, rect, series) {\n var width = rect.width;\n var height = rect.height;\n if (series.chart.enableCanvas) {\n var ctx = series.chart.canvasRender.ctx;\n var canvasCtx = ctx;\n ctx.save();\n var gradientColor = colorNameToHex(options.fill);\n var x = rect.x + series.clipRect.x;\n var y = rect.y + series.clipRect.y;\n var arc = 2 * Math.PI + 0.1;\n var rx = void 0;\n var ry = void 0;\n var cx1 = void 0;\n var cx2 = void 0;\n var cy1 = void 0;\n var cy2 = void 0;\n var x1 = void 0;\n var x2 = void 0;\n var y1 = void 0;\n var y2 = void 0;\n var cx = void 0;\n var cy = void 0;\n var xl = void 0;\n var yl = void 0;\n var xPos = void 0;\n var yPos = void 0;\n var step = void 0;\n var rxt = void 0;\n var ryt = void 0;\n var gx1 = 0;\n var gx2 = 0;\n var gy1 = 0;\n var gy2 = 0;\n var ini = 0;\n ctx.fillStyle = applyZLight(gradientColor, 0.9);\n ctx.lineWidth = 0;\n ctx.strokeStyle = applyZLight(gradientColor, 0.9);\n ctx.globalAlpha = options.opacity;\n if (cylinderSeriesOption.isColumn) {\n gx1 = x;\n gx2 = width + x;\n rx = width / 2;\n ry = rx / 4;\n cx2 = cx1 = x + rx;\n y2 = cy1 = y - ry;\n x2 = x;\n x1 = x + width;\n cy2 = y1 = y + height - ry;\n step = Math.PI;\n rxt = -rx;\n ryt = ry;\n if (cylinderSeriesOption.stacking) {\n if (!cylinderSeriesOption.isLastSeries) {\n y2 = cy1 = y + ry;\n }\n }\n }\n else {\n gy2 = height + y;\n gy1 = y;\n ry = height / 2;\n rx = ry / 4;\n x2 = cx1 = x + rx;\n x1 = cx2 = x + width + rx;\n y1 = y + height;\n y2 = y;\n cy2 = cy1 = y + ry;\n ini = Math.PI / 2;\n step = Math.PI * 1.5;\n if (cylinderSeriesOption.stacking) {\n if (!cylinderSeriesOption.isLastSeries) {\n x1 = cx2 = x + width - rx;\n }\n }\n ry = -ry;\n rx = -rx;\n rxt = rx;\n ryt = -ry;\n }\n var color = applyZLight(gradientColor, 0.7);\n var gradient = ctx.createLinearGradient(gx1, gy1, gx2, gy2);\n gradient.addColorStop(0, gradientColor);\n gradient.addColorStop(0.3, color);\n gradient.addColorStop(0.7, color);\n gradient.addColorStop(1, gradientColor);\n for (var j = 1; j <= 4; j++) {\n var i = 0;\n if (j < 4) {\n ctx.beginPath();\n }\n if (j % 2 === 0) {\n cx = cx2;\n cy = cy2;\n xl = x2;\n yl = y2;\n }\n else {\n cx = cx1;\n cy = cy1;\n xl = x1;\n yl = y1;\n }\n if (j === 4) {\n rx = rxt;\n ry = ryt;\n ctx.fillStyle = gradient;\n }\n if (j > 2) {\n i = ini;\n arc = step;\n }\n for (; i <= arc; i += 0.1) {\n xPos = cx - (rx * Math.cos(i));\n yPos = cy + (ry * Math.sin(i));\n if (i === 0) {\n ctx.moveTo(xPos, yPos);\n }\n else {\n ctx.lineTo(xPos, yPos);\n }\n }\n if (j > 2) {\n ctx.lineTo(xl, yl);\n }\n if (j !== 3) {\n ctx.stroke();\n ctx.fill();\n }\n }\n if (options.id.indexOf('Series') >= 0) {\n ctx.clip();\n ctx.restore();\n ctx = canvasCtx;\n }\n }\n else {\n var chart = series.chart;\n var x = rect.x;\n var y = rect.y;\n var id = options.id;\n var gradientColor = options.fill;\n var fillColor = gradientColor;\n var format = checkColorFormat(gradientColor);\n if (!format) {\n gradientColor = colorNameToHex(gradientColor);\n }\n var AEx = 0;\n var AEy = 0;\n var LX = 0;\n var LY = 0;\n var GX = 0;\n var GY = 0;\n var X = void 0;\n var Y = void 0;\n var X1 = void 0;\n var Y1 = void 0;\n var X2 = void 0;\n var Y2 = void 0;\n var rx = void 0;\n var ry = void 0;\n var i = 2;\n if (cylinderSeriesOption.isColumn) {\n rx = width / 2;\n ry = rx / 4;\n X = X1 = x;\n Y = ry < y ? y - ry : cylinderSeriesOption.stacking ? y + ry : (y - ry);\n Y1 = Y;\n AEx = 2 * rx;\n LY = ry < y ? height : (height < 2 * ry ? height : cylinderSeriesOption.stacking ? height - (2 * ry) : height);\n X2 = X;\n Y2 = ry < y ? Y + height : (height < Y ? height + Y : cylinderSeriesOption.stacking ? height + (y - ry) : height + Y);\n GX = 100;\n if (cylinderSeriesOption.stacking) {\n if (!cylinderSeriesOption.isLastSeries) {\n Y = Y1 = y + ry;\n LY = height < rx / 2 ? height : height - rx / 2;\n }\n }\n }\n else {\n ry = height / 2;\n rx = ry / 4;\n Y = Y1 = y;\n X = X1 = Math.abs(x - rx);\n AEy = 2 * ry;\n LX = width;\n X2 = X + width;\n Y2 = Y;\n GY = 100;\n if (cylinderSeriesOption.stacking) {\n if (!cylinderSeriesOption.isLastSeries) {\n X2 = (X + width - rx * 2);\n LX = width - rx * 2;\n }\n }\n }\n remove(this.element);\n while (i--) {\n options.d = 'M' + X.toString() + ',' + Y.toString() + 'a' + rx.toString() + ',' + ry.toString() + ' 0 1,0 ' + AEx.toString() + ',' + AEy.toString() + 'a' + rx.toString() + ',' + ry.toString() + ' 0 1,0 ' + (-1 * AEx).toString() + ',' + (-1 * AEy).toString();\n options.id = id + '_' + 'Region_' + i;\n options.fill = applyZLight(gradientColor, 0.9);\n if (i % 2 === 0 && series.type !== 'StackingBar100' && series.type !== 'StackingBar' && series.type !== 'Bar') {\n options.fill = options.fill + '10';\n }\n this.element = chart.renderer.drawPath(this.options, new Int32Array([series.clipRect.x, series.clipRect.y]));\n appendChildElement(series.chart.enableCanvas, series.seriesElement, this.element, chart.redraw);\n X = X2;\n Y = Y2;\n }\n options.d = 'M' + X1.toString() + ',' + Y1.toString() + 'a' + rx.toString() + ',' + ry.toString() + ' 0 1,0 ' + AEx.toString() + ',' + AEy.toString() + 'l' + LX.toString() + ' ' + LY.toString() + 'a' + rx.toString() + ',' + ry.toString() + ' 0 1,1 ' + (-1 * AEx).toString() + ',' + (-1 * AEy).toString() + ' z';\n options.id = id + '_' + 'Region_2';\n options.fill = applyZLight(gradientColor, 0.7);\n var optiong = void 0;\n if (fillColor.indexOf('url') === -1) {\n if (!document.getElementById(id)) {\n optiong = { 'id': id, x1: '0%', y1: '0%', x2: GX.toString() + '%', y2: GY.toString() + '%' };\n var gradientElement = [{ colorStop: '0%', color: gradientColor }, { colorStop: '30%', color: applyZLight(gradientColor, 0.7) }, { colorStop: '70%', color: applyZLight(gradientColor, 0.7) }, { colorStop: '100%', color: gradientColor }];\n this.drawGradient(optiong, gradientElement, series);\n }\n options.fill = 'url(#' + optiong.id + ')';\n }\n this.element = chart.renderer.drawPath(this.options, new Int32Array([series.clipRect.x, series.clipRect.y]));\n appendChildElement(series.chart.enableCanvas, series.seriesElement, this.element, chart.redraw);\n }\n };\n /**\n * Draws a gradient using the provided options and gradient element.\n *\n * @param {OptionGradient} optiong - The gradient options for drawing the gradient.\n * @param {Object} gradientElement - The gradient element to which the gradient is applied.\n * @param {Series} series - The series associated with the gradient.\n * @returns {void}\n */\n ColumnBase.prototype.drawGradient = function (optiong, gradientElement, series) {\n var chart = series.chart;\n var defElement = chart.renderer.createDefs();\n var xmlns = 'http://www.w3.org/2000/svg';\n var linearGradientElement = document.createElementNS(xmlns, 'linearGradient');\n linearGradientElement.setAttribute('id', optiong.id);\n linearGradientElement.setAttribute('x1', optiong.x1);\n linearGradientElement.setAttribute('y1', optiong.y1);\n linearGradientElement.setAttribute('x2', optiong.x2);\n linearGradientElement.setAttribute('y2', optiong.y2);\n for (var i = 0; i < gradientElement.length; i++) {\n var stopElement = document.createElementNS(xmlns, 'stop');\n stopElement.setAttribute('offset', gradientElement[i].colorStop);\n stopElement.setAttribute('stop-color', gradientElement[i].color);\n stopElement.setAttribute('stop-opacity', '1');\n linearGradientElement.appendChild(stopElement);\n }\n series.seriesElement.appendChild(defElement);\n defElement.appendChild(linearGradientElement);\n };\n /**\n * To get the position of each series.\n *\n * @param {Series} series - The series for which side-by-side positions are calculated.\n * @returns {void}\n * @private\n */\n ColumnBase.prototype.getSideBySidePositions = function (series) {\n var chart = series.chart;\n for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n var columnItem = _a[_i];\n for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n var item = _c[_b];\n this.findRectPosition(series.findSeriesCollection(columnItem, item, false));\n }\n }\n };\n ColumnBase.prototype.findRectPosition = function (seriesCollection) {\n var groupingValues = [];\n var vSeries = { rectCount: 0, position: null };\n for (var i = 0; i < seriesCollection.length; i++) {\n var value = seriesCollection[i];\n if (value.type.indexOf('Stacking') !== -1 || value.groupName !== '') {\n var groupName = value.type.indexOf('Stacking') !== -1 ? value.stackingGroup : value.type + value.groupName;\n if (groupName) {\n if (groupingValues[groupName] === undefined) {\n value.position = vSeries.rectCount;\n groupingValues[groupName] = vSeries.rectCount++;\n }\n else {\n value.position = groupingValues[groupName];\n }\n }\n else {\n if (vSeries.position === null) {\n value.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n value.position = vSeries.position;\n }\n }\n }\n else {\n value.position = vSeries.rectCount++;\n }\n }\n for (var i = 0; i < seriesCollection.length; i++) {\n var value = seriesCollection[i];\n value.rectCount = vSeries.rectCount;\n }\n };\n /**\n * Updates the location of the symbol based on the point and rect coordinates.\n *\n * @param {Points} point - The point for which the symbol location is updated.\n * @param {Rect} rect - The rect representing the symbol location.\n * @param {Series} series - The series to which the point belongs.\n * @returns {void}\n */\n ColumnBase.prototype.updateSymbolLocation = function (point, rect, series) {\n if (!series.chart.requireInvertedAxis) {\n this.updateXRegion(point, rect, series);\n }\n else {\n this.updateYRegion(point, rect, series);\n }\n if (series.type === 'Histogram') {\n point.minimum = +point.x - series.histogramValues.binWidth / 2;\n point.maximum = +point.x + series.histogramValues.binWidth / 2;\n }\n };\n /**\n * Updates the x-region of the symbol based on the point and rect coordinates.\n *\n * @param {Points} point - The point for which the x-region is updated.\n * @param {Rect} rect - The rect representing the x-region.\n * @param {Series} series - The series to which the point belongs.\n * @returns {void}\n */\n ColumnBase.prototype.updateXRegion = function (point, rect, series) {\n point.symbolLocations.push({\n x: rect.x + (rect.width) / 2,\n y: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isAxisInverse)) ? rect.y : (rect.y + rect.height)\n });\n this.getRegion(point, rect, series);\n if (series.type === 'RangeColumn') {\n point.symbolLocations.push({\n x: rect.x + (rect.width) / 2,\n y: rect.y + rect.height\n });\n }\n };\n /**\n * Updates the y-region of the symbol based on the point and rect coordinates.\n *\n * @param {Points} point - The point for which the y-region is updated.\n * @param {Rect} rect - The rect representing the y-region.\n * @param {Series} series - The series to which the point belongs.\n * @returns {void}\n */\n ColumnBase.prototype.updateYRegion = function (point, rect, series) {\n point.symbolLocations.push({\n x: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n (point.yValue >= 0 === !series.yAxis.isAxisInverse)) ? rect.x + rect.width : rect.x,\n y: rect.y + rect.height / 2\n });\n this.getRegion(point, rect, series);\n if (series.type === 'RangeColumn') {\n point.symbolLocations.push({\n x: rect.x,\n y: rect.y + rect.height / 2\n });\n }\n };\n /**\n * To render the marker for the series.\n *\n * @param {Series} series - The series for which markers are rendered.\n * @returns {void}\n * @private\n */\n ColumnBase.prototype.renderMarker = function (series) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.render(series);\n }\n };\n /**\n * To get the marker region when Y value is 0\n *\n * @param {Points} point point\n * @param {rect} rect rect\n * @param {Series} series series\n * @returns {void}\n */\n ColumnBase.prototype.getRegion = function (point, rect, series) {\n if (point.y === 0) {\n var markerWidth = (series.marker && series.marker.width) ? series.marker.width : 0;\n var markerHeight = (series.marker && series.marker.height) ? series.marker.height : 0;\n point.regions.push(new Rect(point.symbolLocations[0].x - markerWidth, point.symbolLocations[0].y - markerHeight, 2 * markerWidth, 2 * markerHeight));\n }\n else {\n point.regions.push(rect);\n }\n };\n /**\n * Triggers the point render event.\n *\n * @param {Series} series - The series associated with the point.\n * @param {Points} point - The data point for which the event is triggered.\n * @param {string} fill - The fill color of the point.\n * @param {BorderModel} border - The border settings of the point.\n * @returns {IPointRenderEventArgs} - The event arguments.\n */\n ColumnBase.prototype.triggerEvent = function (series, point, fill, border) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, fill),\n border: series.setBorderColor(point, border)\n };\n series.chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /**\n * Draws a rectangle for the data point.\n *\n * @param {Series} series - The series associated with the point.\n * @param {Points} point - The data point for which the rectangle is drawn.\n * @param {Rect} rect - The rect bounds.\n * @param {IPointRenderEventArgs} argsData - The event arguments.\n * @returns {void}\n */\n ColumnBase.prototype.drawRectangle = function (series, point, rect, argsData) {\n var chart = series.chart;\n var check = chart.requireInvertedAxis ? rect.height : rect.width;\n if (check <= 0) {\n return null;\n }\n var direction;\n if (point.y === 0) {\n // For 0 values corner radius will not calculate\n direction = this.calculateRoundedRectPath(rect, 0, 0, 0, 0);\n }\n else {\n direction = this.calculateRoundedRectPath(rect, series.cornerRadius.topLeft, series.cornerRadius.topRight, series.cornerRadius.bottomLeft, series.cornerRadius.bottomRight, chart.requireInvertedAxis);\n }\n var name = series.category === 'Indicator' ? chart.element.id + '_Indicator_' + series.index + '_' + series.name +\n '_Point_' + point.index : chart.element.id + '_Series_' + series.index + '_Point_' + ((series.removedPointIndex !== null && series.removedPointIndex <= point.index) ? (point.index + 1) : point.index);\n var previousElement = redrawElement(chart.redraw, name);\n var previousDirection = previousElement ? previousElement.getAttribute('d') : '';\n this.options = new PathOption(name, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, (series.columnFacet === 'Cylinder') ? '' : direction);\n this.element = chart.renderer.drawPath(this.options, new Int32Array([series.clipRect.x, series.clipRect.y]));\n if (series.removedPointIndex !== null && series.removedPointIndex <= point.index) {\n this.element.id = chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n }\n switch (series.seriesType) {\n case 'XY':\n this.element.setAttribute('role', 'img');\n this.element.setAttribute('aria-label', point.x + ':' + point.yValue + ', ' + series.name);\n break;\n case 'HighLow':\n this.element.setAttribute('role', 'img');\n this.element.setAttribute('aria-label', point.x + ':' + point.high + ', ' + point.low + ', ' + series.name);\n break;\n }\n if (!(series.columnFacet === 'Cylinder' && (chart.redraw || !chart.enableAnimation) && series.seriesElement.querySelector('#' + this.element.id))) {\n appendChildElement(series.chart.enableCanvas, series.seriesElement, this.element, chart.redraw);\n }\n if (!series.chart.enableCanvas) {\n pathAnimation(this.element, (series.columnFacet === 'Cylinder') ? '' : direction, chart.redraw, previousDirection, chart.duration);\n }\n };\n /**\n * To animate the series.\n *\n * @param {Series} series - The series to be animated.\n * @returns {void}\n * @private\n */\n ColumnBase.prototype.animate = function (series) {\n var rectElements = series.seriesElement.childNodes;\n var count = series.category === 'Indicator' ? 0 : 1;\n var visiblePoints = getVisiblePoints(series);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n if (!point.symbolLocations.length && !(series.type === 'BoxAndWhisker' && point.regions.length)) {\n continue;\n }\n if ((series.type === 'Column' || series.type === 'Bar' || series.type === 'StackingColumn' || series.type === 'StackingColumn100' || series.type === 'StackingBar' || series.type === 'StackingBar100') && series.columnFacet === 'Cylinder') {\n for (var j = 0; j < rectElements.length; j++) {\n this.animateRect(rectElements[j], series, point);\n }\n }\n else {\n this.animateRect(rectElements[count], series, point);\n count++;\n }\n }\n };\n /**\n * Animates the rect element.\n *\n * @param {HTMLElement} element - The rect element to be animated.\n * @param {Series} series - The series associated with the rect.\n * @param {Points} point - The data point associated with the rect.\n * @returns {void}\n */\n ColumnBase.prototype.animateRect = function (element, series, point) {\n var option = series.animation;\n var duration = series.chart.animated ? series.chart.duration : option.duration;\n var effect = getAnimationFunction('Linear');\n var isPlot = point.yValue < 0;\n var x;\n var y;\n var elementHeight = +point.regions[0].height;\n var elementWidth = +point.regions[0].width;\n var centerX;\n var centerY;\n if (!series.chart.requireInvertedAxis) {\n x = +point.regions[0].x;\n if (series.type.indexOf('Stacking') > -1) {\n y = (1 - valueToCoefficient(0, series.yAxis)) * (series.yAxis.rect.height);\n centerX = x;\n centerY = y;\n }\n else {\n y = +point.regions[0].y;\n centerY = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? y + elementHeight / 2 :\n (isPlot !== series.yAxis.isAxisInverse) ? y : y + elementHeight;\n centerX = isPlot ? x : x + elementWidth;\n }\n }\n else {\n y = +point.regions[0].y;\n if (series.type.indexOf('Stacking') > -1) {\n x = (valueToCoefficient(0, series.yAxis)) * series.yAxis.rect.width;\n centerX = x;\n centerY = y;\n }\n else {\n x = +point.regions[0].x;\n centerY = isPlot ? y : y + elementHeight;\n centerX = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? x + elementWidth / 2 :\n (isPlot !== series.yAxis.isAxisInverse) ? x + elementWidth : x;\n }\n }\n var value;\n if (!isNullOrUndefined(element)) {\n element.style.visibility = 'hidden';\n new Animation({}).animate(element, {\n duration: (duration === 0 && animationMode === 'Enable') ? 1000 : duration,\n delay: option.delay,\n progress: function (args) {\n if (args.timeStamp >= args.delay) {\n element.style.visibility = 'visible';\n if (!series.chart.requireInvertedAxis) {\n elementHeight = elementHeight ? elementHeight : 1;\n value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(1,' + (value / elementHeight) + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n else {\n elementWidth = elementWidth ? elementWidth : 1;\n value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n ') scale(' + (value / elementWidth) + ', 1) translate(' + (-centerX) + ' ' + (-centerY) + ')');\n }\n }\n },\n end: function () {\n element.setAttribute('transform', 'translate(0,0)');\n var seriesElement = series.seriesElement;\n if (element === seriesElement.lastElementChild || point.index === series.points.length - 1 ||\n (series.type === 'Waterfall' && element === seriesElement.children[seriesElement.childElementCount - 2])) {\n series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n if (series.type === 'Waterfall') {\n var rectElements = seriesElement.childNodes;\n for (var i = 0; i < rectElements.length; i++) {\n if (rectElements[i].id.indexOf('Connector') !== -1) {\n rectElements[i].style.visibility = 'visible';\n rectElements[i].setAttribute('transform', 'translate(0,0)');\n }\n }\n }\n }\n }\n });\n }\n };\n /**\n * Calculates the path for a rounded rectangle.\n *\n * @param {Rect} rect - The bounding rectangle.\n * @param {number} topLeft - The radius of the top-left corner.\n * @param {number} topRight - The radius of the top-right corner.\n * @param {number} bottomLeft - The radius of the bottom-left corner.\n * @param {number} bottomRight - The radius of the bottom-right corner.\n * @param {boolean} inverted - Indicates whether the rectangle is inverted.\n * @returns {string} The SVG path string representing the rounded rectangle.\n */\n ColumnBase.prototype.calculateRoundedRectPath = function (rect, topLeft, topRight, bottomLeft, bottomRight, inverted) {\n if (inverted === void 0) { inverted = false; }\n var halfValue = inverted ? rect.width / 2 : rect.height / 2;\n topLeft = Math.min(topLeft, halfValue);\n topRight = Math.min(topRight, halfValue);\n bottomLeft = Math.min(bottomLeft, halfValue);\n bottomRight = Math.min(bottomRight, halfValue);\n return 'M' + ' ' + rect.x + ' ' + (topLeft + rect.y) +\n ' Q ' + rect.x + ' ' + rect.y + ' ' + (rect.x + topLeft) + ' ' +\n rect.y + ' ' + 'L' + ' ' + (rect.x + rect.width - topRight) + ' ' + rect.y +\n ' Q ' + (rect.x + rect.width) + ' ' + rect.y + ' ' +\n (rect.x + rect.width) + ' ' + (rect.y + topRight) + ' ' + 'L ' +\n (rect.x + rect.width) + ' ' + (rect.y + rect.height - bottomRight)\n + ' Q ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' ' + (rect.x + rect.width - bottomRight) + ' ' +\n (rect.y + rect.height) + ' ' + 'L ' + (rect.x + bottomLeft) + ' ' + (rect.y + rect.height) + ' Q ' + rect.x + ' ' +\n (rect.y + rect.height) + ' ' + rect.x + ' ' + (rect.y + rect.height - bottomLeft) + ' ' + 'L' + ' ' + rect.x + ' ' +\n (topLeft + rect.y) + ' ' + 'Z';\n };\n return ColumnBase;\n}());\nexport { ColumnBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `BarSeries` module is used to render the bar series.\n */\nvar BarSeries = /** @class */ (function (_super) {\n __extends(BarSeries, _super);\n function BarSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.sideBySideInfo = [];\n return _this;\n }\n /**\n * Render Bar series.\n *\n * @param {Series} series - Defines the series.\n * @returns {void}\n * @private\n */\n BarSeries.prototype.render = function (series) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n this.sideBySideInfo[series.index] = this.getSideBySideInfo(series);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointBar = _a[_i];\n this.renderPoint(series, pointBar, this.sideBySideInfo[series.index], origin);\n }\n this.renderMarker(series);\n };\n BarSeries.prototype.renderPoint = function (series, pointBar, sideBySideInfo, origin) {\n pointBar.symbolLocations = [];\n pointBar.regions = [];\n if (pointBar.visible && withInRange(series.points[pointBar.index - 1], pointBar, series.points[pointBar.index + 1], series)) {\n this.rect = this.getRectangle(pointBar.xValue + sideBySideInfo.start, pointBar.yValue, pointBar.xValue + sideBySideInfo.end, origin, series);\n this.rect.height = series.columnWidthInPixel ? series.columnWidthInPixel : this.rect.height;\n this.rect.y = series.columnWidthInPixel ? this.rect.y - (((series.columnWidthInPixel / 2) * series.rectCount) -\n (series.columnWidthInPixel * series.index)) : this.rect.y;\n var argsData = this.triggerEvent(series, pointBar, series.interior, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointBar, this.rect, series);\n this.drawRectangle(series, pointBar, this.rect, argsData);\n if (series.columnFacet === 'Cylinder') {\n var cylinderSeriesOption = {\n 'isColumn': false,\n 'stacking': false,\n 'isLastSeries': true\n };\n this.drawCylinder(this.options, this.element, cylinderSeriesOption, this.rect, series);\n }\n }\n }\n };\n BarSeries.prototype.updateDirection = function (series, point, isInverted) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n for (var i = 0; i < point.length; i++) {\n this.renderPoint(series, series.points[point[i]], this.sideBySideInfo[series.index], origin);\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.renderMarker(series, series.points[point[i]], series.points[point[i]].symbolLocations[0], null, true);\n }\n if (series.marker.dataLabel.visible && series.chart.dataLabelModule) {\n series.chart.dataLabelModule.commonId = series.chart.element.id + '_Series_' + series.index + '_Point_';\n var dataLabelElement = series.chart.dataLabelModule.renderDataLabel(series, series.points[point[i]], null, series.marker.dataLabel);\n for (var j = 0; j < dataLabelElement.length; j++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j]);\n }\n }\n }\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n BarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the bar series.\n *\n * @returns {void}\n * @private\n */\n BarSeries.prototype.destroy = function () {\n /**\n * Destroy method performed here.\n */\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n BarSeries.prototype.getModuleName = function () {\n return 'BarSeries';\n };\n return BarSeries;\n}(ColumnBase));\nexport { BarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * AccumulationChart base file\n */\nimport { Property, ChildProperty, Complex, createElement, Browser, animationMode } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { DataManager } from '@syncfusion/ej2-data';\nimport { Border, Font, Animation, EmptyPointSettings, Connector } from '../../common/model/base';\nimport { Rect, PathOption } from '@syncfusion/ej2-svg-base';\nimport { stringToNumber, appendChildElement } from '../../common/utils/helper';\nimport { seriesRender, pointRender } from '../../common/model/constants';\nimport { getSeriesColor } from '../../common/model/theme';\nimport { getElement, firstToLowerCase } from '../../common/utils/helper';\n/**\n * Annotation settings for accumulation series.\n */\nvar AccumulationAnnotationSettings = /** @class */ (function (_super) {\n __extends(AccumulationAnnotationSettings, _super);\n function AccumulationAnnotationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"content\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"x\", void 0);\n __decorate([\n Property('0')\n ], AccumulationAnnotationSettings.prototype, \"y\", void 0);\n __decorate([\n Property('Pixel')\n ], AccumulationAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n __decorate([\n Property('Chart')\n ], AccumulationAnnotationSettings.prototype, \"region\", void 0);\n __decorate([\n Property('Middle')\n ], AccumulationAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n __decorate([\n Property('Center')\n ], AccumulationAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n __decorate([\n Property(null)\n ], AccumulationAnnotationSettings.prototype, \"description\", void 0);\n return AccumulationAnnotationSettings;\n}(ChildProperty));\nexport { AccumulationAnnotationSettings };\n/**\n * Configures the dataLabel in accumulation chart.\n */\nvar AccumulationDataLabelSettings = /** @class */ (function (_super) {\n __extends(AccumulationDataLabelSettings, _super);\n function AccumulationDataLabelSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], AccumulationDataLabelSettings.prototype, \"visible\", void 0);\n __decorate([\n Property(true)\n ], AccumulationDataLabelSettings.prototype, \"showZero\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"name\", void 0);\n __decorate([\n Property('transparent')\n ], AccumulationDataLabelSettings.prototype, \"fill\", void 0);\n __decorate([\n Property('Inside')\n ], AccumulationDataLabelSettings.prototype, \"position\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"rx\", void 0);\n __decorate([\n Property(5)\n ], AccumulationDataLabelSettings.prototype, \"ry\", void 0);\n __decorate([\n Property(0)\n ], AccumulationDataLabelSettings.prototype, \"angle\", void 0);\n __decorate([\n Property(false)\n ], AccumulationDataLabelSettings.prototype, \"enableRotation\", void 0);\n __decorate([\n Complex({ width: null, color: null }, Border)\n ], AccumulationDataLabelSettings.prototype, \"border\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: null, fontStyle: null, fontWeight: null, color: null }, Font)\n ], AccumulationDataLabelSettings.prototype, \"font\", void 0);\n __decorate([\n Complex({}, Connector)\n ], AccumulationDataLabelSettings.prototype, \"connectorStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"template\", void 0);\n __decorate([\n Property('')\n ], AccumulationDataLabelSettings.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], AccumulationDataLabelSettings.prototype, \"maxWidth\", void 0);\n __decorate([\n Property('Ellipsis')\n ], AccumulationDataLabelSettings.prototype, \"textOverflow\", void 0);\n __decorate([\n Property('Normal')\n ], AccumulationDataLabelSettings.prototype, \"textWrap\", void 0);\n return AccumulationDataLabelSettings;\n}(ChildProperty));\nexport { AccumulationDataLabelSettings };\n/**\n * Center value of the Pie series.\n */\nvar PieCenter = /** @class */ (function (_super) {\n __extends(PieCenter, _super);\n function PieCenter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('50%')\n ], PieCenter.prototype, \"x\", void 0);\n __decorate([\n Property('50%')\n ], PieCenter.prototype, \"y\", void 0);\n return PieCenter;\n}(ChildProperty));\nexport { PieCenter };\n/**\n * Points model for the series.\n *\n * @public\n */\nvar AccPoints = /** @class */ (function () {\n function AccPoints() {\n /** Accumulation point visibility. */\n this.visible = true;\n /** Accumulation point symbol location. */\n this.symbolLocation = null;\n /** @private */\n this.region = null;\n /** @private */\n this.labelRegion = null;\n /** @private */\n this.labelVisible = true;\n this.regions = null;\n /** @private */\n this.isExplode = false;\n /** @private */\n this.isClubbed = false;\n /** @private */\n this.isSliced = false;\n /** @private */\n this.argsData = null;\n /** @private */\n this.isLabelUpdated = null;\n /** @private */\n this.initialLabelRegion = null;\n }\n return AccPoints;\n}());\nexport { AccPoints };\n/**\n * Configures the series in accumulation chart.\n */\nvar AccumulationSeries = /** @class */ (function (_super) {\n __extends(AccumulationSeries, _super);\n function AccumulationSeries() {\n /**\n * Specifies the dataSource for the series. It can be an array of JSON objects or an instance of DataManager.\n * ```html\n *
\n * ```\n * ```typescript\n * let dataManager: DataManager = new DataManager({\n * url: 'http://mvc.syncfusion.com/Services/Northwnd.svc/Tasks/'\n * });\n * let query: Query = new Query().take(50).where('Estimate', 'greaterThan', 0, false);\n * let pie: AccumulationChart = new AccumulationChart({\n * ...\n * series: [{\n * dataSource: dataManager,\n * xName: 'Id',\n * yName: 'Estimate',\n * query: query\n * }],\n * ...\n * });\n * pie.appendTo('#Pie');\n * ```\n *\n * @default ''\n */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.points = [];\n /** @private */\n _this.clubbedPoints = [];\n /** @private */\n _this.sumOfPoints = 0;\n /** @private */\n _this.isRectSeries = true;\n /** @private */\n _this.clipRect = new Rect(0, 0, 0, 0);\n /** @private */\n _this.category = 'Series';\n /** @private */\n _this.rightSidePoints = [];\n /** @private */\n _this.leftSidePoints = [];\n return _this;\n }\n /**\n * To refresh the Datamanager for series.\n *\n * @private\n * @param {AccumulationChart} accumulation - The accumulation chart control.\n * @param {boolean} render - Specifies whether to render the accumulation chart after refreshing the DataManager.\n * @returns {void}\n */\n AccumulationSeries.prototype.refreshDataManager = function (accumulation, render) {\n var _this = this;\n this.radius = this.radius ? this.radius : (Browser.isDevice && this.dataLabel.position === 'Outside') ? '40%' : '80%';\n var dateSource = this.dataSource || accumulation.dataSource;\n if (!(dateSource instanceof DataManager) && isNullOrUndefined(this.query)) {\n this.dataManagerSuccess({ result: dateSource, count: dateSource.length }, accumulation, render);\n return;\n }\n var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n dataManager.then(function (e) { return _this.dataManagerSuccess(e, accumulation); });\n };\n /**\n * To get points on dataManager is success.\n *\n * @private\n * @param {Object} e - The data manager result object.\n * @param {Object} e.result - The result of the data manager process.\n * @param {number} e.count - The count of items in the result.\n * @param {AccumulationChart} accumulation - The accumulation chart control.\n * @param {boolean} render - Specifies whether to render the accumulation chart after retrieving the points.\n * @returns {void}\n */\n AccumulationSeries.prototype.dataManagerSuccess = function (e, accumulation, render) {\n if (render === void 0) { render = true; }\n var argsData = {\n name: seriesRender, series: this, data: e.result\n };\n accumulation.allowServerDataBinding = false;\n accumulation.trigger(seriesRender, argsData);\n this.resultData = e.result !== '' ? e.result : [];\n if (!accumulation.isBlazor && !render) {\n this.getPoints(this.resultData, accumulation); // To update datasource using onPropertyChanged method. incident id: 290690\n }\n if ((++accumulation.seriesCounts === accumulation.visibleSeries.length && render)\n || (window['Blazor'] && !render && accumulation.seriesCounts === 1)) {\n this.getPoints(this.resultData, accumulation);\n accumulation.refreshChart();\n }\n };\n /**\n * To find points from result data.\n *\n * @private\n * @param {Object} result - The result of the process.\n * @param {AccumulationChart} accumulation - The accumulation chart control.\n * @returns {void}\n */\n AccumulationSeries.prototype.getPoints = function (result, accumulation) {\n var length = Object.keys(result).length;\n this.sumOfPoints = 0;\n if (length === 0) {\n // fix for Pie datalabels are not removed for empty datasource\n this.points = [];\n return null;\n }\n this.findSumOfPoints(result);\n this.points = [];\n this.clubbedPoints = [];\n this.sumOfClub = 0;\n var point;\n var colors = this.palettes.length ? this.palettes : getSeriesColor(accumulation.theme);\n var clubValue = stringToNumber(this.groupTo, this.sumOfPoints);\n for (var i = 0; i < length; i++) {\n point = this.setPoints(result, i, colors, accumulation);\n if (!this.isClub(point, clubValue, i)) {\n if (isNullOrUndefined(point.y)) {\n point.visible = false;\n }\n this.pushPoints(point, colors);\n }\n else {\n point.index = this.clubbedPoints.length;\n point.isExplode = true;\n this.clubbedPoints.push(point);\n point.isSliced = true;\n }\n }\n this.lastGroupTo = this.groupTo;\n if (this.sumOfClub > 0) {\n var clubPoint_1 = this.generateClubPoint();\n this.pushPoints(clubPoint_1, colors);\n var pointsLength_1 = this.points.length - 1;\n this.clubbedPoints.map(function (point) {\n point.index += pointsLength_1;\n point.color = clubPoint_1.color;\n });\n }\n if (this.clubbedPoints.length && this.explode && this.type === 'Pie'\n && (this.explodeAll || this.points[this.points.length - 1].index === this.explodeIndex)) {\n this.points.splice(this.points.length - 1, 1);\n this.points = this.points.concat(this.clubbedPoints);\n }\n };\n AccumulationSeries.prototype.generateClubPoint = function () {\n var clubPoint = new AccPoints();\n clubPoint.isClubbed = true;\n clubPoint.x = 'Others';\n clubPoint.y = this.sumOfClub;\n clubPoint.text = clubPoint.originalText = clubPoint.x + ': ' + this.sumOfClub;\n clubPoint.sliceRadius = '80%';\n return clubPoint;\n };\n /**\n * Method to set point index and color.\n *\n * @param {AccPoints} point - The point data.\n * @param {string[]} colors - The array of colors used in the accumulation chart.\n * @returns {void}\n */\n AccumulationSeries.prototype.pushPoints = function (point, colors) {\n point.index = this.points.length;\n point.isExplode = this.explodeAll || (point.index === this.explodeIndex);\n point.color = point.color || colors[point.index % colors.length];\n this.points.push(point);\n };\n /**\n * Method to find club point.\n *\n * @param {AccPoints} point - The point data.\n * @param {number} clubValue - The club value for accumulation chart.\n * @param {number} index - The index of the point in the data set.\n * @returns {boolean} - false\n */\n AccumulationSeries.prototype.isClub = function (point, clubValue, index) {\n if (!isNullOrUndefined(clubValue)) {\n if (this.groupMode === 'Value' && Math.abs(point.y) <= clubValue) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\n else if (this.groupMode === 'Point' && index >= clubValue) {\n this.sumOfClub += Math.abs(point.y);\n return true;\n }\n }\n return false;\n };\n /**\n * Method to find sum of points in the series.\n *\n * @param {Object} result - The result of the process.\n * @returns {void}\n */\n AccumulationSeries.prototype.findSumOfPoints = function (result) {\n var length = Object.keys(result).length;\n for (var i = 0; i < length; i++) {\n if (!isNullOrUndefined(result[i]) && !isNullOrUndefined(result[i][this.yName])\n && !isNaN(result[i][this.yName])) {\n this.sumOfPoints += Math.abs(result[i][this.yName]);\n }\n }\n };\n /**\n * Method to set points x, y and text from data source.\n *\n * @param {Object} data - The data containing information for the points.\n * @param {number} i - The index of the current point in the data set.\n * @param {string[]} colors - The array of colors used in the accumulation chart.\n * @param {AccumulationChart} accumulation - The accumulation chart control.\n * @returns {AccPoints} - The point data retrieved from the specified index.\n */\n AccumulationSeries.prototype.setPoints = function (data, i, colors, accumulation) {\n var point = new AccPoints();\n point.x = getValue(this.xName, data[i]);\n point.y = getValue(this.yName, data[i]);\n point.percentage = (+(point.y / this.sumOfPoints * 100).toFixed(2));\n point.legendImageUrl = getValue(this.legendImageUrl, data[i]);\n point.color = getValue(this.pointColorMapping, data[i]);\n point.text = point.originalText = getValue(this.dataLabel.name || '', data[i]);\n point.tooltip = getValue(this.tooltipMappingName || '', data[i]);\n point.sliceRadius = getValue(this.radius, data[i]);\n point.sliceRadius = isNullOrUndefined(point.sliceRadius) ? '80%' : point.sliceRadius;\n point.separatorY = accumulation.intl.formatNumber(point.y, { useGrouping: accumulation.useGroupingSeparator });\n this.setAccEmptyPoint(point, i, data);\n return point;\n };\n /**\n * Method render the series elements for accumulation chart.\n *\n * @private\n * @param {AccumulationChart} accumulation - The AccumulationChart control.\n * @param {boolean} redraw - Specifies whether to redraw the points.\n * @returns {void}\n */\n AccumulationSeries.prototype.renderSeries = function (accumulation, redraw) {\n var seriesGroup = redraw ? getElement(accumulation.element.id + '_Series_' + this.index) :\n accumulation.renderer.createGroup({ id: accumulation.element.id + '_Series_' + this.index });\n this.renderPoints(accumulation, seriesGroup, redraw);\n var datalabelGroup;\n if (accumulation.accumulationDataLabelModule && this.dataLabel.visible) {\n datalabelGroup = accumulation.renderer.createGroup({ id: accumulation.element.id + '_datalabel_Series_' + this.index });\n datalabelGroup.style.visibility =\n (((this.animation.enable && animationMode !== 'Disable') || animationMode === 'Enable') && accumulation.animateSeries && this.type === 'Pie') ? 'hidden' : 'visible';\n this.renderDataLabel(accumulation, datalabelGroup, redraw);\n }\n if (this.type === 'Pie') {\n this.findMaxBounds(this.labelBound, this.accumulationBound);\n accumulation.pieSeriesModule.animateSeries(accumulation, this.animation, this, seriesGroup);\n }\n if (accumulation.accumulationLegendModule) {\n this.labelBound.x -= accumulation.explodeDistance;\n this.labelBound.y -= accumulation.explodeDistance;\n this.labelBound.height += (accumulation.explodeDistance - this.labelBound.y);\n this.labelBound.width += (accumulation.explodeDistance - this.labelBound.x);\n }\n };\n /**\n * Method render the points elements for accumulation chart series.\n *\n * @param {AccumulationChart} accumulation - The AccumulationChart control.\n * @param {Element} seriesGroup - The group element to contain the point elements.\n * @param {boolean} redraw - Specifies whether to redraw the points.\n * @returns {void}\n */\n AccumulationSeries.prototype.renderPoints = function (accumulation, seriesGroup, redraw) {\n var pointId = accumulation.element.id + '_Series_' + this.index + '_Point_';\n var option;\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var argsData = {\n cancel: false, name: pointRender, series: this, point: point, fill: point.color,\n border: this.isEmpty(point) ? { width: this.emptyPointSettings.border.width, color: this.emptyPointSettings.border.color } :\n { width: this.border.width, color: this.border.color }\n };\n accumulation.trigger(pointRender, argsData);\n point.color = argsData.fill;\n option = new PathOption(pointId + point.index, point.color, argsData.border.width || 1, argsData.border.color || point.color, this.opacity, argsData.series.dashArray, '');\n accumulation[(firstToLowerCase(this.type) + 'SeriesModule')].\n renderPoint(point, this, accumulation, option, seriesGroup, redraw);\n }\n appendChildElement(false, accumulation.getSeriesElement(), seriesGroup, redraw);\n };\n /**\n * Method render the datalabel elements for accumulation chart.\n *\n * @param {AccumulationChart} accumulation - The AccumulationChart control.\n * @param {Element} datalabelGroup - The group element to contain the data label elements.\n * @param {boolean} redraw - Specifies whether to redraw the data labels.\n * @returns {void}\n */\n AccumulationSeries.prototype.renderDataLabel = function (accumulation, datalabelGroup, redraw) {\n accumulation.accumulationDataLabelModule.findAreaRect();\n var element = createElement('div', {\n id: accumulation.element.id + '_Series_0' + '_DataLabelCollections'\n });\n this.leftSidePoints = [];\n this.rightSidePoints = [];\n var firstQuarter = [];\n var secondQuarter = [];\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.visible) {\n if (this.dataLabel.showZero || (!this.dataLabel.showZero && ((point.y !== 0) || (point.y === 0 &&\n this.emptyPointSettings.mode === 'Zero')))) {\n accumulation.accumulationDataLabelModule.renderDataLabel(point, this.dataLabel, datalabelGroup, this.points, this.index, element, redraw);\n }\n }\n if (point.midAngle >= 90 && point.midAngle <= 270) {\n this.leftSidePoints.push(point);\n }\n else {\n if (point.midAngle >= 0 && point.midAngle <= 90) {\n secondQuarter.push(point);\n }\n else {\n firstQuarter.push(point);\n }\n }\n }\n firstQuarter.sort(function (a, b) { return a.midAngle - b.midAngle; });\n secondQuarter.sort(function (a, b) { return a.midAngle - b.midAngle; });\n this.leftSidePoints.sort(function (a, b) { return a.midAngle - b.midAngle; });\n this.rightSidePoints = firstQuarter.concat(secondQuarter);\n accumulation.accumulationDataLabelModule.drawDataLabels(this, this.dataLabel, datalabelGroup, element, redraw);\n if (this.dataLabel.template !== null && element.childElementCount) {\n var dataLabelCallBack = accumulation.accumulationDataLabelModule.drawDataLabels.bind(accumulation.accumulationDataLabelModule, this, this.dataLabel, datalabelGroup, element, redraw);\n if (accumulation.isReact) {\n accumulation.renderReactTemplates(dataLabelCallBack);\n }\n appendChildElement(false, getElement(accumulation.element.id + '_Secondary_Element'), element, redraw);\n }\n appendChildElement(false, accumulation.getSeriesElement(), datalabelGroup, redraw);\n };\n /**\n * To find maximum bounds for smart legend placing.\n *\n * @private\n * @param {Rect} totalbound - The total bounding rect.\n * @param {Rect} bound - The bounding rect to be compared.\n * @returns {void}\n */\n AccumulationSeries.prototype.findMaxBounds = function (totalbound, bound) {\n totalbound.x = bound.x < totalbound.x ? bound.x : totalbound.x;\n totalbound.y = bound.y < totalbound.y ? bound.y : totalbound.y;\n totalbound.height = (bound.y + bound.height) > totalbound.height ? (bound.y + bound.height) : totalbound.height;\n totalbound.width = (bound.x + bound.width) > totalbound.width ? (bound.x + bound.width) : totalbound.width;\n };\n /**\n * To set empty point value for null points.\n *\n * @private\n * @param {AccPoints} point - The point to set as empty.\n * @param {number} i - The index of the point in the data set.\n * @param {Object} data - The data object.\n * @returns {void}\n */\n AccumulationSeries.prototype.setAccEmptyPoint = function (point, i, data) {\n if (!(isNullOrUndefined(point.y) || isNaN(point.y))) {\n return null;\n }\n point.color = this.emptyPointSettings.fill || point.color;\n switch (this.emptyPointSettings.mode) {\n case 'Zero':\n point.y = 0;\n point.visible = true;\n break;\n case 'Average': {\n var previous = data[i - 1] ? (data[i - 1][this.yName] || 0) : 0;\n var next = data[i + 1] ? (data[i + 1][this.yName] || 0) : 0;\n point.y = (Math.abs(previous) + Math.abs(next)) / 2;\n this.sumOfPoints += point.y;\n point.visible = true;\n break;\n }\n default:\n point.visible = false;\n break;\n }\n };\n /**\n * To find point is empty.\n *\n * @param {AccPoints} point - The point to check.\n * @returns {boolean} - True if the point is empty, otherwise false.\n */\n AccumulationSeries.prototype.isEmpty = function (point) {\n return point.color === this.emptyPointSettings.fill;\n };\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"dataSource\", void 0);\n __decorate([\n Property()\n ], AccumulationSeries.prototype, \"query\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"xName\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"tooltipMappingName\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"yName\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"visible\", void 0);\n __decorate([\n Complex({ color: null, width: 0 }, Border)\n ], AccumulationSeries.prototype, \"border\", void 0);\n __decorate([\n Complex(null, Animation)\n ], AccumulationSeries.prototype, \"animation\", void 0);\n __decorate([\n Property('SeriesType')\n ], AccumulationSeries.prototype, \"legendShape\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"legendImageUrl\", void 0);\n __decorate([\n Property('')\n ], AccumulationSeries.prototype, \"pointColorMapping\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"selectionStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"groupTo\", void 0);\n __decorate([\n Property('Value')\n ], AccumulationSeries.prototype, \"groupMode\", void 0);\n __decorate([\n Complex({}, AccumulationDataLabelSettings)\n ], AccumulationSeries.prototype, \"dataLabel\", void 0);\n __decorate([\n Property([])\n ], AccumulationSeries.prototype, \"palettes\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"startAngle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"endAngle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"radius\", void 0);\n __decorate([\n Property('0')\n ], AccumulationSeries.prototype, \"innerRadius\", void 0);\n __decorate([\n Property('Pie')\n ], AccumulationSeries.prototype, \"type\", void 0);\n __decorate([\n Property(true)\n ], AccumulationSeries.prototype, \"enableTooltip\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explode\", void 0);\n __decorate([\n Property('30%')\n ], AccumulationSeries.prototype, \"explodeOffset\", void 0);\n __decorate([\n Property(false)\n ], AccumulationSeries.prototype, \"explodeAll\", void 0);\n __decorate([\n Property(null)\n ], AccumulationSeries.prototype, \"explodeIndex\", void 0);\n __decorate([\n Complex({ mode: 'Drop' }, EmptyPointSettings)\n ], AccumulationSeries.prototype, \"emptyPointSettings\", void 0);\n __decorate([\n Property(0)\n ], AccumulationSeries.prototype, \"gapRatio\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"width\", void 0);\n __decorate([\n Property('80%')\n ], AccumulationSeries.prototype, \"height\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckWidth\", void 0);\n __decorate([\n Property('20%')\n ], AccumulationSeries.prototype, \"neckHeight\", void 0);\n __decorate([\n Property('Linear')\n ], AccumulationSeries.prototype, \"pyramidMode\", void 0);\n __decorate([\n Property(1)\n ], AccumulationSeries.prototype, \"opacity\", void 0);\n __decorate([\n Property('0')\n ], AccumulationSeries.prototype, \"dashArray\", void 0);\n return AccumulationSeries;\n}(ChildProperty));\nexport { AccumulationSeries };\n/**\n * method to get series from index.\n *\n * @private\n * @param {number} index - The index of the series to retrieve.\n * @param {AccumulationSeries[]} visibleSeries - The array of visible series in the chart.\n * @returns {AccumulationSeries} - The series retrieved from the specified index.\n */\nexport function getSeriesFromIndex(index, visibleSeries) {\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (index === series.index) {\n return series;\n }\n }\n return visibleSeries[0];\n}\n/**\n * method to get point from index.\n *\n * @private\n * @param {number} index - The index of the point to retrieve.\n * @param {AccPoints[]} points - The array of points in the data set.\n * @returns {AccPoints} - The point retrieved from the specified index.\n */\nexport function pointByIndex(index, points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index === index) {\n return point;\n }\n }\n return null;\n}\n","/**\n * Defines the common functionalities of accumulation series\n */\nimport { isNullOrUndefined, Animation, createElement } from '@syncfusion/ej2-base';\nimport { degreeToLocation, getElement, indexFinder, linear } from '../../common/utils/helper';\nimport { pointByIndex } from '../model/acc-base';\n/**\n * Accumulation Base used to do some base calculation for accumulation chart.\n */\nvar AccumulationBase = /** @class */ (function () {\n /** @private */\n function AccumulationBase(accumulation) {\n this.accumulation = accumulation;\n }\n Object.defineProperty(AccumulationBase.prototype, \"center\", {\n /**\n * Gets the center of the pie.\n *\n * @private\n * @returns {ChartLocation} - The center of the pie.\n */\n get: function () {\n return this.pieCenter || (this.accumulation.visibleSeries[0].type === 'Pie' ?\n this.accumulation.pieSeriesModule.pieBaseCenter : null);\n },\n /**\n * Sets the center of the pie.\n *\n * @private\n * @param {ChartLocation} value - The center point to set.\n */\n set: function (value) {\n this.pieCenter = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"radius\", {\n /**\n * Gets the radius of the pie.\n *\n * @private\n * @returns {number} - The radius of the pie.\n */\n get: function () {\n return this.pieRadius !== undefined ? this.pieRadius :\n this.accumulation.pieSeriesModule.pieBaseRadius;\n },\n /**\n * Sets the radius of the pie.\n *\n * @private\n * @param {number} value - The radius value to set.\n */\n set: function (value) {\n this.pieRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AccumulationBase.prototype, \"labelRadius\", {\n /**\n * Gets the label radius of the pie.\n *\n * @private\n * @returns {number} - The label radius of the pie.\n */\n get: function () {\n return this.pieLabelRadius !== undefined ? this.pieLabelRadius :\n this.accumulation.pieSeriesModule.pieBaseLabelRadius;\n },\n /**\n * Sets the label radius of the pie.\n *\n * @private\n * @param {number} value - The label radius value to set.\n */\n set: function (value) {\n this.pieLabelRadius = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Checks whether the series is circular or not.\n *\n * @private\n * @returns {boolean} - True if the series is circular, otherwise false.\n */\n AccumulationBase.prototype.isCircular = function () {\n return this.accumulation.type === 'Pie';\n };\n /**\n * To check various radius pie.\n *\n * @private\n * @returns {boolean} - True if various radius is enabled, otherwise false.\n */\n AccumulationBase.prototype.isVariousRadius = function () {\n return this.accumulation.pieSeriesModule.isRadiusMapped;\n };\n /**\n * To process the explode on accumulation chart loading.\n *\n * @private\n * @param {Event} event - The event triggered during loading.\n * @returns {void}\n */\n AccumulationBase.prototype.processExplode = function (event) {\n if (event.target.id.indexOf('_Series_') > -1 || event.target.id.indexOf('_datalabel_') > -1) {\n var pointIndex = indexFinder(event.target.id).point;\n if (isNaN(pointIndex) || (event.target.id.indexOf('_datalabel_') > -1 &&\n this.accumulation.visibleSeries[0].points[pointIndex].labelPosition === 'Outside')) {\n return null;\n }\n this.explodePoints(pointIndex, this.accumulation);\n this.deExplodeAll(pointIndex, this.accumulation.enableAnimation ? 300 : 0);\n }\n };\n /**\n * To invoke the explode on accumulation chart loading.\n *\n * @private\n * @returns {void}\n */\n AccumulationBase.prototype.invokeExplode = function () {\n var series = this.accumulation.visibleSeries[0];\n var duration = this.accumulation.enableAnimation ? 300 : 0;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.isExplode && point.y !== 0) {\n this.pointExplode(point.index, point, duration);\n }\n }\n if (this.accumulation.accumulationSelectionModule && this.accumulation.selectionMode !== 'None' &&\n this.accumulation.accumulationSelectionModule.selectedDataIndexes.length) {\n for (var _b = 0, _c = this.accumulation.accumulationSelectionModule.selectedDataIndexes; _b < _c.length; _b++) {\n var index = _c[_b];\n this.explodePoints(index.point, this.accumulation, true);\n this.deExplodeAll(index.point, duration);\n }\n }\n };\n /**\n * To deExplode all points in the series.\n *\n * @private\n * @param {number} index - The index of the point to explode.\n * @param {number} animationDuration - The duration of the animation.\n * @returns {void}\n */\n AccumulationBase.prototype.deExplodeAll = function (index, animationDuration) {\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var points = this.accumulation.visibleSeries[0].points;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var currentPoint = points_1[_i];\n if ((index !== currentPoint.index && !currentPoint.isSliced) || currentPoint.isClubbed) {\n currentPoint.isExplode = false;\n this.deExplodeSlice(currentPoint.index, pointId, animationDuration);\n }\n }\n };\n /**\n * To explode point by index.\n *\n * @private\n * @param {number} index - The index of the point to explode.\n * @param {AccumulationChart} chart - The accumulation chart control.\n * @param {boolean} explode - Specifies whether to explode the point (default: false).\n * @returns {void}\n */\n AccumulationBase.prototype.explodePoints = function (index, chart, explode) {\n if (explode === void 0) { explode = false; }\n var series = chart.visibleSeries[0];\n var points = series.points;\n var point = pointByIndex(index, points);\n var explodePoints = true;\n var duration = this.accumulation.enableAnimation ? 300 : 0;\n if (isNullOrUndefined(point)) {\n return null;\n }\n var clubPointsExploded = !explode &&\n (point.isSliced || (series.clubbedPoints.length &&\n points[points.length - 1].index === series.clubbedPoints[series.clubbedPoints.length - 1].index));\n if (series.type === 'Pie' && (clubPointsExploded || point.isClubbed)) {\n explodePoints = this.clubPointExplode(index, point, series, points, chart, duration, clubPointsExploded);\n }\n if (explodePoints && point.y !== 0) {\n this.pointExplode(index, point, duration, explode);\n }\n };\n AccumulationBase.prototype.getSum = function (points) {\n var total = 0;\n points.map(function (point) {\n total += point.visible ? point.y : 0;\n });\n return total;\n };\n AccumulationBase.prototype.clubPointExplode = function (index, point, series, points, chart, duration, clubPointsExploded) {\n if (clubPointsExploded === void 0) { clubPointsExploded = false; }\n if (point.isClubbed) {\n chart.animateSeries = false;\n points.splice(points.length - 1, 1);\n series.clubbedPoints.map(function (point) {\n point.visible = true;\n point.isExplode = true;\n });\n chart.visibleSeries[0].points = points.concat(series.clubbedPoints);\n this.deExplodeAll(index, duration);\n series.sumOfPoints = this.getSum(chart.visibleSeries[0].points);\n chart.refreshChart();\n return false;\n }\n else if (clubPointsExploded || point.isSliced) {\n chart.animateSeries = false;\n points.splice(points.length - series.clubbedPoints.length, series.clubbedPoints.length);\n var clubPoint = series.generateClubPoint();\n clubPoint.index = points.length;\n clubPoint.color = series.clubbedPoints[0].color;\n points.push(clubPoint);\n series.sumOfPoints = this.getSum(points);\n this.deExplodeAll(index, duration);\n clubPoint.isExplode = false;\n chart.visibleSeries[0].points = points;\n chart.refreshChart();\n this.pointExplode(clubPoint.index, points[clubPoint.index], 0, true);\n clubPoint.isExplode = false;\n this.deExplodeSlice(clubPoint.index, chart.element.id + '_Series_0_Point_', duration);\n if (point.isSliced) {\n return false;\n }\n }\n return true;\n };\n /**\n * To Explode points.\n *\n * @param {number} index - Index of a point.\n * @param {AccPoints} point - To get the point of explode.\n * @param {number} duration - Duration of the explode point.\n * @param {boolean} explode - Either true or false.\n * @returns {void}\n */\n AccumulationBase.prototype.pointExplode = function (index, point, duration, explode) {\n var translate;\n var pointId = this.accumulation.element.id + '_Series_0_Point_';\n var chart = this.accumulation;\n if (!this.isCircular()) {\n translate = {\n x: ((point.labelRegion && point.labelRegion.x < point.region.x) ? -chart.explodeDistance :\n chart.explodeDistance), y: 0\n };\n }\n else {\n translate = degreeToLocation(point.midAngle, chart.explodeDistance, this.center);\n }\n if (this.isExplode(pointId + index) || explode) {\n point.isExplode = true;\n this.explodeSlice(index, translate, pointId, this.center || { x: 0, y: 0 }, duration);\n }\n else {\n point.isExplode = false;\n this.deExplodeSlice(index, pointId, duration);\n }\n };\n /**\n * To check point is exploded by id.\n *\n * @param {string} id - The id of the point to check.\n * @returns {boolean} - True if the point is exploded, otherwise false.\n */\n AccumulationBase.prototype.isExplode = function (id) {\n var element = getElement(id);\n var transform = element ? element.getAttribute('transform') : null;\n return (element && (transform === 'translate(0, 0)' || transform === null || transform === 'translate(0)'));\n };\n /**\n * To deExplode the point by index.\n *\n * @param {number} index - The index of the point.\n * @param {string} sliceId - The id of the slice.\n * @param {number} animationDuration - The duration of the animation.\n * @returns {void}\n */\n AccumulationBase.prototype.deExplodeSlice = function (index, sliceId, animationDuration) {\n var element = getElement(sliceId + index);\n var transform = element ? element.getAttribute('transform') : null;\n if (this.accumulation.enableAnimation && element && transform &&\n transform !== 'translate(0, 0)' && transform !== 'translate(0)') {\n var result = transform.split('(')[1].split(')')[0].split(',');\n this.performAnimation(index, sliceId, 0, 0, +result[0], +result[1] || 0, animationDuration, true);\n }\n else {\n this.performAnimation(index, sliceId, 0, 0, 0, 0, animationDuration, true);\n }\n };\n /**\n * To translate the point elements by index and position.\n *\n * @param {number} index - The index of the point.\n * @param {string} sliceId - The id of the slice.\n * @param {string} position - The position to translate the point to.\n * @param {string} transform - The transformation to apply to the point.\n * @returns {void}\n */\n AccumulationBase.prototype.setTranslate = function (index, sliceId, position, transform) {\n this.setElementTransform(sliceId + index, position);\n if (this.accumulation.visibleSeries[0].dataLabel.visible) {\n sliceId = this.accumulation.element.id + '_datalabel_Series_0_';\n this.setElementTransform(sliceId + 'shape_' + index, position);\n this.setElementTransform(sliceId + 'text_' + index, position + transform);\n this.setElementTransform(sliceId + 'connector_' + index, position);\n }\n };\n /**\n * To translate the point element by id and position.\n *\n * @param {string} id - The id of the point element.\n * @param {string} position - The position to translate the point to.\n * @returns {void}\n */\n AccumulationBase.prototype.setElementTransform = function (id, position) {\n var element = getElement(id);\n if (element) {\n element.setAttribute('transform', position);\n }\n };\n /**\n * To translate the point elements by index position.\n *\n * @param {number} index - The index of the point.\n * @param {ChartLocation} translate - The translation values (x, y).\n * @param {string} sliceId - The id of the slice.\n * @param {ChartLocation} center - The center point of the accumulation chart.\n * @param {number} animationDuration - The duration of the animation.\n * @returns {void}\n */\n AccumulationBase.prototype.explodeSlice = function (index, translate, sliceId, center, animationDuration) {\n this.performAnimation(index, sliceId, 0, 0, translate.x - center.x, translate.y - center.y, animationDuration);\n };\n /**\n * To Perform animation point explode.\n *\n * @param {number} index - Index of the series.\n * @param {string} sliceId - ID of the series.\n * @param {number} startX - X value of start.\n * @param {number} startY - Y value of start.\n * @param {number} endX - X value of end.\n * @param {number} endY - Y value of end.\n * @param {number} duration - Duration of the animation.\n * @param {boolean} isReverse - Duration of the animation.\n * @returns {void}\n */\n AccumulationBase.prototype.performAnimation = function (index, sliceId, startX, startY, endX, endY, duration, isReverse) {\n var _this = this;\n var chart = this.accumulation;\n var values = sliceId.split('_');\n var seriesIndex = parseInt(sliceId.split('_')[values.length - 3], 10);\n var point = chart.visibleSeries[seriesIndex].points[index];\n if (duration <= 0) {\n this.setTranslate(index, sliceId, 'translate(' + (endX) + ', ' + (endY) + ')', point.transform);\n return null;\n }\n var xValue;\n var yValue;\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n progress: function (args) {\n xValue = linear(args.timeStamp, startX, endX, args.duration);\n yValue = linear(args.timeStamp, startY, endY, args.duration);\n _this.setTranslate(index, sliceId, 'translate(' + (isReverse ? endX - xValue : xValue) + ', ' + (isReverse ? endY - yValue : yValue) + ')', point.transform);\n },\n end: function () {\n _this.setTranslate(index, sliceId, 'translate(' + (isReverse ? startX : endX) + ', ' + (isReverse ? startX : endY) + ')', point.transform);\n }\n });\n };\n return AccumulationBase;\n}());\nexport { AccumulationBase };\n","/**\n * public Enum for `PdfPageOrientation`.\n * @private\n */\nexport var PdfPageOrientation;\n(function (PdfPageOrientation) {\n /**\n * Specifies the type of `Portrait`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Portrait\"] = 0] = \"Portrait\";\n /**\n * Specifies the type of `Landscape`.\n * @private\n */\n PdfPageOrientation[PdfPageOrientation[\"Landscape\"] = 1] = \"Landscape\";\n})(PdfPageOrientation || (PdfPageOrientation = {}));\n/**\n * public Enum for `PdfPageRotateAngle`.\n * @private\n */\nexport var PdfPageRotateAngle;\n(function (PdfPageRotateAngle) {\n /**\n * Specifies the type of `RotateAngle0`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle0\"] = 0] = \"RotateAngle0\";\n /**\n * Specifies the type of `RotateAngle90`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle90\"] = 1] = \"RotateAngle90\";\n /**\n * Specifies the type of `RotateAngle180`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle180\"] = 2] = \"RotateAngle180\";\n /**\n * Specifies the type of `RotateAngle270`.\n * @private\n */\n PdfPageRotateAngle[PdfPageRotateAngle[\"RotateAngle270\"] = 3] = \"RotateAngle270\";\n})(PdfPageRotateAngle || (PdfPageRotateAngle = {}));\n/**\n * public Enum for `PdfNumberStyle`.\n * @private\n */\nexport var PdfNumberStyle;\n(function (PdfNumberStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Numeric`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"Numeric\"] = 1] = \"Numeric\";\n /**\n * Specifies the type of `LowerLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerLatin\"] = 2] = \"LowerLatin\";\n /**\n * Specifies the type of `LowerRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"LowerRoman\"] = 3] = \"LowerRoman\";\n /**\n * Specifies the type of `UpperLatin`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperLatin\"] = 4] = \"UpperLatin\";\n /**\n * Specifies the type of `UpperRoman`.\n * @private\n */\n PdfNumberStyle[PdfNumberStyle[\"UpperRoman\"] = 5] = \"UpperRoman\";\n})(PdfNumberStyle || (PdfNumberStyle = {}));\n/**\n * public Enum for `PdfDockStyle`.\n * @private\n */\nexport var PdfDockStyle;\n(function (PdfDockStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Bottom\"] = 1] = \"Bottom\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Top\"] = 2] = \"Top\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Right\"] = 4] = \"Right\";\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n PdfDockStyle[PdfDockStyle[\"Fill\"] = 5] = \"Fill\";\n})(PdfDockStyle || (PdfDockStyle = {}));\n/**\n * public Enum for `PdfAlignmentStyle`.\n * @private\n */\nexport var PdfAlignmentStyle;\n(function (PdfAlignmentStyle) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `TopLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopLeft\"] = 1] = \"TopLeft\";\n /**\n * Specifies the type of `TopCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopCenter\"] = 2] = \"TopCenter\";\n /**\n * Specifies the type of `TopRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"TopRight\"] = 3] = \"TopRight\";\n /**\n * Specifies the type of `MiddleLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleLeft\"] = 4] = \"MiddleLeft\";\n /**\n * Specifies the type of `MiddleCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleCenter\"] = 5] = \"MiddleCenter\";\n /**\n * Specifies the type of `MiddleRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"MiddleRight\"] = 6] = \"MiddleRight\";\n /**\n * Specifies the type of `BottomLeft`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomLeft\"] = 7] = \"BottomLeft\";\n /**\n * Specifies the type of `BottomCenter`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomCenter\"] = 8] = \"BottomCenter\";\n /**\n * Specifies the type of `BottomRight`.\n * @private\n */\n PdfAlignmentStyle[PdfAlignmentStyle[\"BottomRight\"] = 9] = \"BottomRight\";\n})(PdfAlignmentStyle || (PdfAlignmentStyle = {}));\n/**\n * public Enum for `TemplateType`.\n * @private\n */\nexport var TemplateType;\n(function (TemplateType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n TemplateType[TemplateType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Top`.\n * @private\n */\n TemplateType[TemplateType[\"Top\"] = 1] = \"Top\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n TemplateType[TemplateType[\"Bottom\"] = 2] = \"Bottom\";\n /**\n * Specifies the type of `Left`.\n * @private\n */\n TemplateType[TemplateType[\"Left\"] = 3] = \"Left\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n TemplateType[TemplateType[\"Right\"] = 4] = \"Right\";\n})(TemplateType || (TemplateType = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Accumulation charts base file\n */\nimport { Animation, animationMode, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { stringToNumber, ChartLocation, degreeToLocation, getAnimationFunction, getElement } from '../../common/utils/helper';\nimport { Rect } from '@syncfusion/ej2-svg-base';\nimport { animationComplete } from '../../common/model/constants';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * PieBase class used to do pie base calculations.\n */\nvar PieBase = /** @class */ (function (_super) {\n __extends(PieBase, _super);\n function PieBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To initialize the property values.\n *\n * @private\n * @param {AccumulationChart} chart - The accumulation chart control.\n * @param {AccumulationSeries} series - The series for which the properties are initialized.\n * @returns {void}\n */\n PieBase.prototype.initProperties = function (chart, series) {\n this.accumulation = chart;\n this.size = Math.min(chart.initialClipRect.width, chart.initialClipRect.height);\n this.initAngles(series);\n var r = parseInt(series.radius, 10);\n if ((series.radius.indexOf('%') !== -1 || typeof r === 'number') && !isNaN(r)) {\n this.isRadiusMapped = false;\n this.pieBaseRadius = stringToNumber(series.radius, this.size / 2);\n this.innerRadius = stringToNumber(series.innerRadius, this.pieBaseRadius);\n this.pieBaseLabelRadius = series.dataLabel.position === 'Inside' ? (((this.pieBaseRadius - this.innerRadius) / 2) + this.innerRadius) :\n (this.pieBaseRadius + stringToNumber(series.dataLabel.connectorStyle.length || '4%', this.size / 2));\n }\n else {\n var radiusCollection = [];\n this.isRadiusMapped = true;\n for (var i = 0; i < Object.keys(series.points).length; i++) {\n if (series.points[i].sliceRadius.indexOf('%') !== -1) {\n radiusCollection[i] = stringToNumber(series.points[i].sliceRadius, this.size / 2);\n }\n else {\n radiusCollection[i] = parseInt(series.points[i].sliceRadius, 10);\n }\n }\n var minRadius = Math.min.apply(null, radiusCollection);\n var maxRadius = Math.max.apply(null, radiusCollection);\n this.pieBaseRadius = this.seriesRadius = maxRadius;\n this.innerRadius = stringToNumber(series.innerRadius, this.seriesRadius);\n this.innerRadius = this.innerRadius > minRadius ? (this.innerRadius / 2) : this.innerRadius;\n }\n // this.radius = stringToNumber(series.radius, size / 2);\n // this.innerRadius = stringToNumber(series.innerRadius, this.radius);\n // this.labelRadius = series.dataLabel.position === 'Inside' ? (((this.radius - this.innerRadius) / 2) + this.innerRadius) :\n // (this.radius + stringToNumber(series.dataLabel.connectorStyle.length || '4%', size / 2));\n this.radius = this.pieBaseRadius;\n this.labelRadius = this.pieBaseLabelRadius;\n chart.explodeDistance = series.explode ? stringToNumber(series.explodeOffset, this.pieBaseRadius) : 0;\n this.findCenter(chart, series);\n this.center = this.pieBaseCenter;\n this.defaultLabelBound(series, series.dataLabel.visible, series.dataLabel.position);\n this.totalAngle -= 0.001;\n };\n /*\n * To get label radius of the pie.\n * @private\n */\n PieBase.prototype.getLabelRadius = function (series, point) {\n return series.dataLabel.position === 'Inside' ?\n ((((stringToNumber(point.sliceRadius, this.pieBaseRadius) - this.innerRadius)) / 2) + this.innerRadius) :\n (stringToNumber(point.sliceRadius, this.size / 2) + stringToNumber(series.dataLabel.connectorStyle.length || '4%', this.size / 2));\n };\n /**\n * To find the center of the accumulation.\n *\n * @private\n * @param {AccumulationChart} accumulation - The accumulation chart control.\n * @param {AccumulationSeries} series - The series for which the center is calculated.\n * @returns {void}\n */\n PieBase.prototype.findCenter = function (accumulation, series) {\n this.accumulation = accumulation;\n this.pieBaseCenter = {\n x: stringToNumber(accumulation.center.x, accumulation.initialClipRect.width) + (accumulation.initialClipRect.x),\n y: stringToNumber(accumulation.center.y, accumulation.initialClipRect.height) + (accumulation.initialClipRect.y)\n };\n var accumulationRect = this.getSeriesBound(series);\n var accumulationRectCenter = new ChartLocation(accumulationRect.x + accumulationRect.width / 2, accumulationRect.y + accumulationRect.height / 2);\n this.pieBaseCenter.x += (this.pieBaseCenter.x - accumulationRectCenter.x);\n this.pieBaseCenter.y += (this.pieBaseCenter.y - accumulationRectCenter.y);\n this.accumulation.origin = this.pieBaseCenter;\n };\n /**\n * To find angles from series.\n *\n * @param {AccumulationSeries} series - The series for which to calculate angles.\n * @returns {void}\n */\n PieBase.prototype.initAngles = function (series) {\n var endAngle = isNullOrUndefined(series.endAngle) ? series.startAngle : series.endAngle;\n this.totalAngle = (endAngle - series.startAngle) % 360;\n this.startAngle = series.startAngle - 90;\n this.totalAngle = this.totalAngle <= 0 ? (360 + this.totalAngle) : this.totalAngle;\n this.startAngle = (this.startAngle < 0 ? (this.startAngle + 360) : this.startAngle) % 360;\n };\n /**\n * To calculate data-label bound.\n *\n * @private\n * @param {AccumulationSeries} series - The series for which to calculate data-label bounds.\n * @param {boolean} visible - Indicates whether the data-labels are visible.\n * @param {AccumulationLabelPosition} position - The position of the data-labels.\n * @returns {void}\n */\n PieBase.prototype.defaultLabelBound = function (series, visible, position) {\n var accumulationBound = this.getSeriesBound(series);\n series.accumulationBound = accumulationBound;\n series.labelBound = new Rect(accumulationBound.x, accumulationBound.y, accumulationBound.width + accumulationBound.x, accumulationBound.height + accumulationBound.y);\n if (visible && position === 'Outside') {\n series.labelBound = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n }\n };\n /**\n * To calculate series bound.\n *\n * @private\n * @param {AccumulationSeries} series - The series for which to calculate the bound.\n * @returns {Rect} - Returns a rect.\n */\n PieBase.prototype.getSeriesBound = function (series) {\n var rect = new Rect(Infinity, Infinity, -Infinity, -Infinity);\n this.initAngles(series);\n var start = this.startAngle;\n var total = this.totalAngle;\n var end = (this.startAngle + total) % 360;\n end = (end === 0) ? 360 : end;\n series.findMaxBounds(rect, this.getRectFromAngle(start));\n series.findMaxBounds(rect, this.getRectFromAngle(end));\n series.findMaxBounds(rect, new Rect(this.pieBaseCenter.x, this.pieBaseCenter.y, 0, 0));\n var nextQuandrant = (Math.floor(start / 90) * 90 + 90) % 360;\n var lastQuadrant = (Math.floor(end / 90) * 90) % 360;\n lastQuadrant = (lastQuadrant === 0) ? 360 : lastQuadrant;\n if (total >= 90 || lastQuadrant === nextQuandrant) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n series.findMaxBounds(rect, this.getRectFromAngle(lastQuadrant));\n }\n if (start === 0 || (start + total >= 360)) {\n series.findMaxBounds(rect, this.getRectFromAngle(0));\n }\n var length = nextQuandrant === lastQuadrant ? 0 : Math.floor(total / 90);\n for (var i = 1; i < length; i++) {\n nextQuandrant = nextQuandrant + 90;\n if ((nextQuandrant < lastQuadrant || end < start) || total === 360) {\n series.findMaxBounds(rect, this.getRectFromAngle(nextQuandrant));\n }\n }\n rect.width -= rect.x;\n rect.height -= rect.y;\n return rect;\n };\n /**\n * To get rect location size from angle.\n *\n * @param {number} angle - The angle in degrees.\n * @returns {Rect} - The rect representing the location size from angle.\n */\n PieBase.prototype.getRectFromAngle = function (angle) {\n var location = degreeToLocation(angle, this.pieBaseRadius, this.pieBaseCenter);\n return new Rect(location.x, location.y, 0, 0);\n };\n /**\n * To get path arc direction.\n *\n * @param {ChartLocation} center - The center coordinates of the arc.\n * @param {number} start - The starting angle of the arc in degrees.\n * @param {number} end - The ending angle of the arc in degrees.\n * @param {number} radius - The radius of the arc.\n * @param {number} innerRadius - The inner radius of the arc.\n * @returns {string} - The path string representing the arc direction.\n */\n PieBase.prototype.getPathArc = function (center, start, end, radius, innerRadius) {\n var degree = end - start;\n degree = degree < 0 ? (degree + 360) : degree;\n var flag = (degree < 180) ? 0 : 1;\n if (!innerRadius && innerRadius === 0) {\n return this.getPiePath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, flag);\n }\n else {\n return this.getDoughnutPath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, degreeToLocation(start, innerRadius, center), degreeToLocation(end, innerRadius, center), innerRadius, flag);\n }\n };\n /**\n * To get pie direction.\n *\n * @param {ChartLocation} center - The center of the pie.\n * @param {ChartLocation} start - The starting location of the pie.\n * @param {ChartLocation} end - The ending location of the pie.\n * @param {number} radius - The radius of the pie.\n * @param {number} clockWise - The direction of the pie.\n * @returns {string} - The path direction for the pie.\n */\n PieBase.prototype.getPiePath = function (center, start, end, radius, clockWise) {\n return 'M ' + center.x + ' ' + center.y + ' L ' + start.x + ' ' + start.y + ' A ' + radius + ' ' +\n radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y + ' Z';\n };\n /**\n * To get doughnut direction.\n *\n * @param {ChartLocation} center - The center of the doughnut.\n * @param {ChartLocation} start - The starting location of the outer doughnut.\n * @param {ChartLocation} end - The ending location of the outer doughnut.\n * @param {number} radius - The radius of the outer doughnut.\n * @param {ChartLocation} innerStart - The starting location of the inner doughnut.\n * @param {ChartLocation} innerEnd - The ending location of the inner doughnut.\n * @param {number} innerRadius - The radius of the inner doughnut.\n * @param {number} clockWise - The direction of the doughnut.\n * @returns {string} - The path direction for the doughnut.\n */\n PieBase.prototype.getDoughnutPath = function (center, start, end, radius, innerStart, innerEnd, innerRadius, clockWise) {\n return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise +\n ' 1 ' + end.x + ' ' + end.y + ' L ' + innerEnd.x + ' ' + innerEnd.y + ' A ' + innerRadius +\n ' ' + innerRadius + ' 0 ' + clockWise + ',0 ' + innerStart.x + ' ' + innerStart.y + ' Z';\n };\n /**\n * Method to start animation for pie series.\n *\n * @param {Element} slice - The slice element to animate.\n * @param {AccumulationSeries} series - The accumulation chart control.\n * @param {Element} groupElement - The group element containing the pie series.\n * @returns {void}\n */\n PieBase.prototype.doAnimation = function (slice, series, groupElement) {\n var _this = this;\n var startAngle = series.startAngle - 90;\n var duration = this.accumulation.duration ? this.accumulation.duration : series.animation.duration;\n var value;\n this.pieBaseCenter.x += 1;\n var radius = Math.max(this.accumulation.availableSize.height, this.accumulation.availableSize.width) * 0.75;\n radius += radius * (0.414); // formula r + r / 2 * (1.414 -1)\n var effect = getAnimationFunction('Linear'); // need to check animation type\n new Animation({}).animate(slice, {\n duration: (duration === 0 && animationMode === 'Enable') ? 1000 : duration,\n delay: series.animation.delay,\n progress: function (args) {\n value = effect(args.timeStamp, startAngle, _this.totalAngle, args.duration);\n slice.setAttribute('d', _this.getPathArc(_this.pieBaseCenter, startAngle, value, radius, 0));\n },\n end: function () {\n _this.pieBaseCenter.x -= 1;\n slice.setAttribute('d', _this.getPathArc(_this.pieBaseCenter, 0, 359.99999, radius, 0));\n _this.accumulation.trigger(animationComplete, _this.accumulation.isBlazor ? {} :\n { series: series, accumulation: _this.accumulation, chart: _this.accumulation });\n var datalabelGroup = getElement(_this.accumulation.element.id + '_datalabel_Series_' + series.index);\n if (datalabelGroup) {\n datalabelGroup.style.visibility = _this.accumulation.isDestroyed ? 'hidden' : 'visible';\n }\n groupElement.style.cssText = '';\n }\n });\n };\n return PieBase;\n}(AccumulationBase));\nexport { PieBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PathOption } from '@syncfusion/ej2-svg-base';\nimport { degreeToLocation, getElement, linear, stringToNumber, indexFinder } from '../../common/utils/helper';\nimport { PieBase } from '../renderer/pie-base';\nimport { Animation, animationMode, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * PieSeries module used to render `Pie` Series.\n */\nvar PieSeries = /** @class */ (function (_super) {\n __extends(PieSeries, _super);\n function PieSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * To get path option, degree, symbolLocation from the point.\n *\n * @private\n * @param {AccPoints} point - The point data.\n * @param {AccumulationSeries} series - The series of the chart.\n * @param {AccumulationChart} chart - The accumulation chart control.\n * @param {PathOption} option - The rendering options for the point.\n * @param {Element} seriesGroup - The group element to contain the series elements.\n * @param {boolean} redraw - Specifies whether to redraw the series.\n * @returns {void}\n */\n PieSeries.prototype.renderPoint = function (point, series, chart, option, seriesGroup, redraw) {\n var sum = series.sumOfPoints;\n point.startAngle = this.startAngle;\n var yValue = point.visible ? point.y : 0;\n var degree = (sum) ? ((Math.abs(yValue) / sum) * (this.totalAngle)) : null;\n var start = Math.PI / 180 * ((90 - (360 - this.startAngle)) - 90);\n this.radius = this.isRadiusMapped ? stringToNumber(point.sliceRadius, this.seriesRadius) : this.radius;\n option.d = this.getPathOption(point, degree, this.startAngle % 360);\n point.midAngle = (this.startAngle - (degree / 2)) % 360;\n point.endAngle = this.startAngle % 360;\n point.symbolLocation = degreeToLocation(point.midAngle, (this.radius + this.innerRadius) / 2, this.center);\n if (!redraw) {\n var element = chart.renderer.drawPath(option);\n element.setAttribute('role', 'img');\n element.setAttribute('tabindex', point.index === 0 ? '0' : '-1');\n element.setAttribute('aria-label', (point.x + ': ' + point.y + '%. ' + series.name));\n seriesGroup.appendChild(element);\n point.degree = degree;\n point.start = start;\n }\n else {\n var element = chart.renderer.drawPath(option);\n element.setAttribute('role', 'img');\n element.setAttribute('tabindex', point.index === 0 ? '0' : '-1');\n element.setAttribute('aria-label', (point.x + ': ' + point.y + '%. ' + series.name));\n seriesGroup.appendChild(element);\n this.refresh(point, degree, start, chart, option);\n }\n };\n PieSeries.prototype.findSeries = function (e) {\n var borderGap = 3; // Gap between pie/doughnut chart and border\n var width = 2; // width of the border\n var radius = this.innerRadius === 0 ? this.radius + borderGap : this.innerRadius - borderGap;\n var innerRadius = this.innerRadius === 0 ? radius + width : radius - width;\n this.toggleInnerPoint(e, radius, innerRadius);\n };\n PieSeries.prototype.toggleInnerPoint = function (event, radius, innerRadius) {\n var target = event.target;\n var id = indexFinder(target.id, true);\n var accumulationId = event.target.id.substring(0, (event.target.id.indexOf('Series') - 1));\n var borderElement = document.getElementById(this.accumulation.element.id + 'PointHover_Border');\n var createBorderEle;\n var seriesIndex = id.series;\n var pointIndex = id.point;\n var srcElem = getElement(accumulationId + '_Series_' + seriesIndex + '_Point_' + pointIndex);\n if (!isNaN(id.series) && srcElem) {\n if (!isNullOrUndefined(seriesIndex) && !isNaN(seriesIndex) && !isNullOrUndefined(pointIndex) && !isNaN(pointIndex)) {\n var point = this.accumulation.visibleSeries[0].points[pointIndex];\n var opacity = srcElem.getAttribute('class') === accumulationId + '_ej2_deselected' ?\n this.accumulation.tooltip.enable ? 0.5 : 0.3 : this.accumulation.tooltip.enable ? 0.5 : 1;\n var innerPie = this.getPathArc(this.accumulation.pieSeriesModule.center, point.startAngle % 360, (point.startAngle + point.degree) % 360, radius, innerRadius);\n // while using annotation as a chart border will appear in both chart.so changed checked the id with target id\n if ((borderElement) && (accumulationId === this.accumulation.element.id) &&\n (borderElement.getAttribute('d') !== innerPie || point.isExplode)) {\n borderElement.parentNode.removeChild(borderElement);\n borderElement = null;\n }\n var seriousGroup = getElement(accumulationId + '_Series_' + seriesIndex);\n if (!borderElement && ((!point.isExplode) || (point.isExplode && event.type !== 'click'))) {\n var path = new PathOption(accumulationId + 'PointHover_Border', point.color, 1, point.color, opacity, '', innerPie);\n createBorderEle = this.accumulation.renderer.drawPath(path);\n createBorderEle.removeAttribute('transform');\n if (this.accumulation.selectionMode !== 'None' && event.target.hasAttribute('class')) {\n this.accumulation.accumulationSelectionModule.addSvgClass(createBorderEle, event.target.getAttribute('class'));\n }\n seriousGroup.appendChild(createBorderEle);\n if (point.isExplode && createBorderEle) {\n var borderExplode = srcElem.getAttribute('transform');\n if (borderExplode) {\n createBorderEle.setAttribute('transform', borderExplode);\n }\n }\n }\n }\n }\n else if (borderElement) {\n this.removeBorder(borderElement, 1000);\n borderElement = null;\n }\n };\n PieSeries.prototype.removeBorder = function (borderElement, duration) {\n if (borderElement) {\n setTimeout(function () {\n if (borderElement.parentNode) {\n borderElement.parentNode.removeChild(borderElement);\n }\n }, duration);\n }\n };\n PieSeries.prototype.refresh = function (point, degree, start, chart, option) {\n var _this = this;\n var seriesElement = getElement(option.id);\n var duration = chart.duration ? chart.duration : 300;\n new Animation({}).animate(createElement('div'), {\n duration: duration,\n delay: 0,\n progress: function (args) {\n var curentDegree = linear(args.timeStamp, point.degree, (degree - point.degree), args.duration);\n var currentStartAngle = linear(args.timeStamp, point.start, start - point.start, args.duration);\n currentStartAngle = ((currentStartAngle / (Math.PI / 180)) + 360) % 360;\n seriesElement.setAttribute('d', _this.getPathOption(point, curentDegree, currentStartAngle));\n if (point.isExplode) {\n chart.accBaseModule.explodePoints(point.index, chart, true);\n }\n seriesElement.style.visibility = 'visible';\n },\n end: function () {\n seriesElement.style.visibility = point.visible ? 'visible' : 'hidden';\n seriesElement.setAttribute('d', option.d);\n point.degree = degree;\n point.start = start;\n }\n });\n };\n /**\n * To get path option from the point.\n *\n * @param {AccPoints} point - The point data.\n * @param {number} degree - The angle of the point.\n * @param {number} startAngle - The start angle of the slice.\n * @returns {string} - Returns the path option.\n */\n PieSeries.prototype.getPathOption = function (point, degree, startAngle) {\n if (!degree) {\n return '';\n }\n var path = this.getPathArc(this.center, startAngle % 360, (startAngle + degree) % 360, this.isRadiusMapped ? stringToNumber(point.sliceRadius, this.size / 2) : this.radius, this.innerRadius);\n //const path: string = this.getPathArc(this.center, startAngle % 360, (startAngle + degree) % 360, this.radius, this.innerRadius);\n this.startAngle += degree;\n return path;\n };\n /**\n * To animate the pie series.\n *\n * @private\n * @param {AccumulationChart} accumulation - The accumulation chart control.\n * @param {AnimationModel} option - The animation options.\n * @param {AccumulationSeries} series - The pie series.\n * @param {Element} slice - The slice element to animate.\n * @returns {void}\n */\n PieSeries.prototype.animateSeries = function (accumulation, option, series, slice) {\n var groupId = accumulation.element.id + 'SeriesGroup' + series.index;\n if (((series.animation.enable && animationMode !== 'Disable') || animationMode === 'Enable') && accumulation.animateSeries) {\n var clippath = accumulation.renderer.createClipPath({ id: groupId + '_clipPath' });\n var path = new PathOption(groupId + '_slice', 'transparent', 1, 'transparent', 1, '', '');\n var clipslice = accumulation.renderer.drawPath(path);\n clippath.appendChild(clipslice);\n accumulation.svgObject.appendChild(clippath);\n // I263828 pie chart animation issue fixed for safari browser\n slice.style.cssText = 'clip-path:url(#' + clippath.id + '); -webkit-clip-path:url(#' + clippath.id + ');';\n this.doAnimation(clipslice, series, slice);\n }\n };\n /**\n * To get the module name of the Pie series.\n *\n * @returns {string} - Returns the module name.\n */\n PieSeries.prototype.getModuleName = function () {\n return 'PieSeries';\n };\n /**\n * To destroy the pie series.\n *\n * @returns {void}\n * @private\n */\n PieSeries.prototype.destroy = function () {\n /**\n * Destroy method calling here.\n */\n };\n return PieSeries;\n}(PieBase));\nexport { PieSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingBarSeries` module is used to render the stacking bar series.\n */\nvar StackingBarSeries = /** @class */ (function (_super) {\n __extends(StackingBarSeries, _super);\n function StackingBarSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.sideBySideInfo = [];\n return _this;\n }\n StackingBarSeries.prototype.render = function (series) {\n this.sideBySideInfo[series.index] = this.getSideBySideInfo(series);\n var stackedValue = series.stackedValues;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointStack = _a[_i];\n this.renderPoint(series, pointStack, this.sideBySideInfo[series.index], stackedValue);\n }\n if (series.visible) {\n this.renderMarker(series);\n }\n };\n StackingBarSeries.prototype.renderPoint = function (series, pointStack, sideBySideInfo, stackedValue) {\n pointStack.symbolLocations = [];\n pointStack.regions = [];\n if (pointStack.visible &&\n withInRange(series.points[pointStack.index - 1], pointStack, series.points[pointStack.index + 1], series)) {\n var index = void 0;\n var startvalue = void 0;\n if (!series.visible && series.isLegendClicked) {\n for (var i = series.index; i >= 0; i--) {\n if (series.chart.visibleSeries[i].visible) {\n index = series.chart.visibleSeries[i].index;\n break;\n }\n }\n startvalue = series.index > 0 && index !== undefined ?\n series.chart.visibleSeries[index].stackedValues.endValues[pointStack.index] :\n series.stackedValues.startValues[pointStack.index];\n }\n this.rect = this.getRectangle(pointStack.xValue + sideBySideInfo.start, (!series.visible && series.isLegendClicked) ?\n startvalue : stackedValue.endValues[pointStack.index], pointStack.xValue + sideBySideInfo.end, (!series.visible\n && series.isLegendClicked) ? startvalue : stackedValue.startValues[pointStack.index], series);\n this.rect.height = series.columnWidthInPixel ? series.columnWidthInPixel : this.rect.height;\n this.rect.y = series.columnWidthInPixel ? this.rect.y - (series.columnWidthInPixel / 2) : this.rect.y;\n var argsData = this.triggerEvent(series, pointStack, series.interior, { width: series.visible ?\n series.border.width : 0, color: series.visible ? series.border.color : '' });\n if (!argsData.cancel) {\n this.drawRectangle(series, pointStack, this.rect, argsData);\n this.updateSymbolLocation(pointStack, this.rect, series);\n if (series.columnFacet === 'Cylinder') {\n var cylinderSeriesOption = {\n 'isColumn': false,\n 'stacking': series.type === 'StackingBar100',\n 'isLastSeries': true\n };\n this.drawCylinder(this.options, this.element, cylinderSeriesOption, this.rect, series);\n }\n }\n }\n };\n StackingBarSeries.prototype.updateDirection = function (series, point) {\n var seriesCollection = [];\n for (var i = 0; i < series.yAxis.series.length; i++) {\n var stackSeries = series.yAxis.series[i];\n if (stackSeries.stackingGroup === series.stackingGroup) {\n seriesCollection.push(stackSeries);\n }\n }\n for (var j = 0; j < seriesCollection.length; j++) {\n for (var i = 0; i < point.length; i++) {\n this.renderPoint(seriesCollection[j], seriesCollection[j].points[point[i]], this.sideBySideInfo[series.index], seriesCollection[j].stackedValues);\n if (series.marker && series.marker.visible) {\n seriesCollection[j].chart.markerRender.renderMarker(seriesCollection[j], seriesCollection[j].points[point[i]], seriesCollection[j].points[point[i]].symbolLocations[0], null, true);\n }\n if (seriesCollection[j].marker.dataLabel.visible && seriesCollection[j].chart.dataLabelModule) {\n seriesCollection[j].chart.dataLabelModule.commonId = seriesCollection[j].chart.element.id + '_Series_' + seriesCollection[j].index + '_Point_';\n var dataLabelElement = seriesCollection[j].chart.dataLabelModule.renderDataLabel(seriesCollection[j], seriesCollection[j].points[point[i]], null, seriesCollection[j].marker.dataLabel);\n for (var j_1 = 0; j_1 < dataLabelElement.length; j_1++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j_1]);\n }\n }\n }\n }\n };\n /**\n * To destroy the stacking bar.\n *\n * @returns {void}\n * @private\n */\n StackingBarSeries.prototype.destroy = function () {\n /**\n * Destroy method performed here.\n */\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n StackingBarSeries.prototype.getModuleName = function () {\n return 'StackingBarSeries';\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n StackingBarSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n return StackingBarSeries;\n}(ColumnBase));\nexport { StackingBarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { valueToCoefficient, inside, isOverlap, textTrim } from '../../common/utils/helper';\nimport { appendChildElement } from '../../common/utils/helper';\nimport { CircleOption } from '../../common/utils/helper';\nimport { Size, measureText, TextOption, PathOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { LineBase } from '../series/line-base';\nimport { textElement, ChartLocation, valueToPolarCoefficient, CoefficientToVector, getElement } from '../../common/utils/helper';\n/**\n * Specifies the polar axis layout.\n */\nvar PolarRadarPanel = /** @class */ (function (_super) {\n __extends(PolarRadarPanel, _super);\n function PolarRadarPanel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /** @private */\n _this.visibleAxisLabelRect = [];\n return _this;\n }\n /**\n * Measure the polar radar axis size.\n *\n * @returns {void}\n * @private\n */\n PolarRadarPanel.prototype.measureAxis = function (rect) {\n var chart = this.chart;\n this.initialClipRect = rect;\n this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n //Measure axis size calculation\n this.measureRowAxis(chart, this.initialClipRect);\n this.measureColumnAxis(chart, this.initialClipRect);\n this.calculateAxisSize();\n };\n PolarRadarPanel.prototype.measureRowAxis = function (chart, rect) {\n this.calculateRowSize(rect);\n var row = chart.rows[0];\n this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight));\n };\n PolarRadarPanel.prototype.measureColumnAxis = function (chart, rect) {\n this.calculateColumnSize(rect);\n var column = chart.columns[0];\n this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height));\n };\n /**\n * Measures the column and row in the chart.\n *\n * @param {Row | Column} definition - The row or column to measure.\n * @param {Chart} chart - The chart instance.\n * @param {Size} size - The size of the chart.\n * @returns {void}\n * @private\n */\n PolarRadarPanel.prototype.measureDefinition = function (definition, chart, size) {\n for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n axis.getModule(chart);\n axis.baseModule.calculateRangeAndInterval(size, axis);\n }\n };\n /**\n * Measure the axis.\n *\n * @returns {void}\n * @private\n */\n PolarRadarPanel.prototype.calculateAxisSize = function () {\n var chart = this.chart;\n var axis;\n var padding = 5;\n this.centerX = this.initialClipRect.width * 0.5 + this.initialClipRect.x;\n this.centerY = this.initialClipRect.height * 0.5 + this.initialClipRect.y;\n chart.radius = Math.min(this.initialClipRect.width, this.initialClipRect.height) / 2 - padding -\n chart.primaryXAxis.majorTickLines.height - chart.primaryXAxis.maxLabelSize.height;\n chart.radius = (chart.primaryXAxis.coefficient * chart.radius) / 100;\n this.seriesClipRect.y = this.centerY - chart.radius;\n this.seriesClipRect.x = this.centerX - chart.radius;\n this.seriesClipRect.height = 2 * chart.radius;\n this.seriesClipRect.width = 2 * chart.radius;\n this.calculateRowSize(this.seriesClipRect);\n axis = chart.primaryYAxis;\n axis.rect = this.seriesClipRect;\n this.calculateColumnSize(this.seriesClipRect);\n axis = chart.primaryXAxis;\n axis.rect = this.seriesClipRect;\n };\n /**\n * Measure the axis.\n *\n * @returns {void}\n * @private\n */\n PolarRadarPanel.prototype.measure = function () {\n var chart = this.chart;\n var yAxis = chart.primaryYAxis;\n yAxis.isRTLEnabled = chart.enableRtl;\n yAxis.setIsInversedAndOpposedPosition(true);\n chart.verticalAxes.push(yAxis);\n var row = chart.rows[0];\n row.axes[0] = yAxis;\n chart.rows[0] = row;\n var xAxis = chart.primaryXAxis;\n xAxis.isRTLEnabled = chart.enableRtl;\n xAxis.setIsInversedAndOpposedPosition(true);\n chart.horizontalAxes.push(xAxis);\n var column = chart.columns[0];\n column.axes[0] = xAxis;\n chart.columns[0] = column;\n };\n /**\n * Measure the row size.\n *\n * @returns {void}\n */\n PolarRadarPanel.prototype.calculateRowSize = function (rect) {\n /** Calculate row size */\n var chart = this.chart;\n var row = chart.rows[0];\n row.computedHeight = rect.height / 2;\n row.computedTop = rect.y;\n chart.rows[0] = row;\n };\n /**\n * Measure the row size.\n *\n * @returns {void}\n */\n PolarRadarPanel.prototype.calculateColumnSize = function (rect) {\n /** Calculate column size */\n var chart = this.chart;\n var column = chart.columns[0];\n column.computedLeft = rect.x;\n column.computedWidth = rect.width;\n chart.columns[0] = column;\n };\n /**\n * To render the axis element.\n *\n * @returns {void}\n * @private\n */\n PolarRadarPanel.prototype.renderAxes = function () {\n var axis;\n var chart = this.chart;\n this.startAngle = chart.primaryXAxis.startAngle;\n var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisCollection' });\n var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i });\n axis = chart.axisCollections[i];\n if (axis.orientation === 'Horizontal') {\n if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0) {\n this.drawXAxisGridLine(axis, i);\n }\n if (axis.visible && axis.internalVisibility) {\n this.drawXAxisLabels(axis, i);\n }\n }\n else {\n this.drawYAxisGridLine(axis, i);\n if (axis.lineStyle.width > 0) {\n this.drawYAxisLine(axis, i);\n }\n if (axis.visible && axis.internalVisibility) {\n this.drawYAxisLabels(axis, i);\n }\n }\n if (!this.chart.enableCanvas) {\n axisElement.appendChild(this.element);\n }\n }\n if (!this.chart.enableCanvas) {\n axisElement.appendChild(this.element);\n }\n appendChildElement(chart.enableCanvas, chart.svgObject, axisElement, chart.redraw);\n return axisLineElement;\n };\n PolarRadarPanel.prototype.drawYAxisLine = function (axis, index) {\n var chart = this.chart;\n var optionsLine = {};\n var vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n var axisLine = 'M ' + this.centerX + ' ' + this.centerY + 'L ' +\n (this.centerX + chart.radius * vector.x) + ' ' + (this.centerY + chart.radius * vector.y);\n optionsLine = {\n 'id': chart.element.id + 'AxisLine_' + index,\n 'd': axisLine,\n 'stroke-dasharray': axis.lineStyle.dashArray,\n 'stroke-width': axis.lineStyle.width,\n 'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n };\n /**\n * I252450\n * When we click the center of the marker which is plotted in the axis line, selection did not work is fixed\n * Cause: Instead of marker id, axis line id is obtained while clicking\n * Fix: Pointer events set to none for axis lines\n */\n var element = chart.renderer.drawPath(optionsLine);\n this.setPointerEventNone(element);\n if (!this.chart.enableCanvas) {\n chart.yAxisElements.appendChild(element);\n }\n };\n PolarRadarPanel.prototype.drawYAxisLabels = function (axis, index) {\n var chart = this.chart;\n var elementSize;\n var options;\n var pointX = 0;\n var pointY = 0;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var anchor = 'middle';\n var radius;\n var padding = 5;\n var isIntersect;\n var labelRegions = [];\n var isLabelVisible = [];\n isLabelVisible[0] = true;\n var intersectType = axis.labelIntersectAction;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n isIntersect = false;\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n elementSize = axis.visibleLabels[i].size;\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n pointX = (this.centerX + radius * vector.x) + ((axis.majorTickLines.height + elementSize.width / 2 + padding / 2)\n * (Math.cos(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' && chart.enableRtl ? -1 : axis.labelPosition === 'Inside' ? 1 : axis.labelPosition === 'Outside' && chart.enableRtl ? 1 : -1));\n pointY = (this.centerY + radius * vector.y) + ((axis.majorTickLines.height + elementSize.height / 2)\n * (Math.sin(angle * Math.PI / 180)) * (axis.labelPosition === 'Inside' && chart.enableRtl ? -1 : axis.labelPosition === 'Inside' ? 1 : axis.labelPosition === 'Outside' && chart.enableRtl ? 1 : -1));\n pointY += (elementSize.height / 4);\n labelRegions[i] = this.getLabelRegion(pointX, pointY, axis.visibleLabels[i], anchor);\n if (i !== 0 && intersectType === 'Hide') {\n for (var j = i; j >= 0; j--) {\n j = (j === 0) ? 0 : (j === i) ? (j - 1) : j;\n if (isLabelVisible[j] && isOverlap(labelRegions[i], labelRegions[j])) {\n isIntersect = true;\n isLabelVisible[i] = false;\n break;\n }\n else {\n isLabelVisible[i] = true;\n }\n }\n if (isIntersect) {\n continue; // If the label is intersect, the label render is ignored.\n }\n // To check Y axis label with visible X axis label\n for (var _i = 0, _a = this.visibleAxisLabelRect; _i < _a.length; _i++) {\n var rect = _a[_i];\n if (isOverlap(labelRegions[i], rect)) {\n isIntersect = true;\n break;\n }\n }\n }\n if (isIntersect) {\n continue;\n }\n this.visibleAxisLabelRect.push(labelRegions[i]);\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, anchor, axis.visibleLabels[i].text);\n textElement(chart.renderer, options, axis.labelStyle, axis.labelStyle.color || chart.themeStyle.axisLabelFont.color, labelElement, false, chart.redraw, true, true, null, null, null, null, chart.enableCanvas, null, chart.themeStyle.axisLabelFont);\n }\n if (!this.chart.enableCanvas) {\n chart.yAxisElements.appendChild(labelElement);\n }\n };\n PolarRadarPanel.prototype.drawYAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var options;\n var radius;\n var majorTick = '';\n var majorGrid = '';\n var vector;\n var angle = this.startAngle < 0 ? this.startAngle + 360 : this.startAngle;\n var x1;\n var y1;\n var x2;\n var y2;\n var border = {\n color: axis.majorGridLines.color || chart.themeStyle.majorGridLine,\n width: axis.majorGridLines.width\n };\n var previousValue;\n var element;\n var inversedRadius;\n if (axis.majorGridLines.width > 0) {\n if (chart.visibleSeries[0].type === 'Polar') {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n element = getElement(chart.element.id + '_MajorGridLine_' + index + '_' + j);\n previousValue = element ? element.getAttribute('r') : null;\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n if (axis.isInversed && !inversedRadius) {\n inversedRadius = radius;\n }\n options = new CircleOption(chart.element.id + '_MajorGridLine_' + index + '_' + j, 'transparent', border, axis.majorGridLines.width, this.centerX, this.centerY, radius);\n appendChildElement(chart.enableCanvas, this.element, chart.renderer.drawCircle(options), chart.redraw, true, 'r', 'r', new ChartLocation(+previousValue, +previousValue), null, true);\n }\n if (radius !== chart.radius && (!axis.isInversed || inversedRadius !== chart.radius)) {\n options = new CircleOption(chart.element.id + '_MajorGridLine_' + index + '_' + axis.visibleLabels.length + 1, 'transparent', border, axis.majorGridLines.width, this.centerX, this.centerY, chart.radius);\n appendChildElement(chart.enableCanvas, this.element, chart.renderer.drawCircle(options), chart.redraw, true, 'r', 'r', new ChartLocation(+previousValue, +previousValue), null, true);\n }\n }\n else {\n for (var j = 0; j < axis.visibleLabels.length; j++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[j].value, axis);\n majorGrid = this.renderRadarGrid(radius, '', chart);\n element = getElement(chart.element.id + '_MajorGridLine_' + index + '_' + j);\n previousValue = element ? element.getAttribute('d') : null;\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index + '_' + j, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, null, majorGrid);\n appendChildElement(chart.enableCanvas, this.element, chart.renderer.drawPath(options), chart.redraw, true, 'x', 'y', null, previousValue, true);\n }\n if (radius !== chart.radius) {\n majorGrid = this.renderRadarGrid(chart.radius, '', chart);\n element = getElement(chart.element.id + '_MajorGridLine_' + index + '_' + axis.visibleLabels.length);\n previousValue = element ? element.getAttribute('d') : null;\n options = new PathOption(chart.element.id + '_MajorGridLine_' + index + '_' + axis.visibleLabels.length, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, null, majorGrid);\n appendChildElement(chart.enableCanvas, this.element, chart.renderer.drawPath(options), chart.redraw, true, 'x', 'y', null, previousValue, true);\n }\n }\n }\n if (axis.majorTickLines.width > 0) {\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[0].value, axis), this.startAngle);\n for (var i = 0; i < axis.visibleLabels.length; i++) {\n radius = chart.radius * valueToCoefficient(axis.visibleLabels[i].value, axis);\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = x1 + (axis.majorTickLines.height * (Math.cos(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' && chart.enableRtl ? -1 : axis.tickPosition === 'Inside' ? 1 : axis.tickPosition === 'Outside' && chart.enableRtl ? 1 : -1));\n y2 = y1 + (axis.majorTickLines.height * (Math.sin(angle * Math.PI / 180)) * (axis.tickPosition === 'Inside' && chart.enableRtl ? -1 : axis.tickPosition === 'Inside' ? 1 : axis.tickPosition === 'Outside' && chart.enableRtl ? 1 : -1));\n majorTick = 'M ' + x1 + ' ' + y1 + ' L ' + x2 + ' ' + y2;\n this.renderTickLine(axis, index, majorTick, '', i);\n }\n }\n };\n PolarRadarPanel.prototype.renderRadarGrid = function (radius, majorGrid, chart) {\n var vector;\n var vector2;\n var x1;\n var y1;\n var x2;\n var y2;\n for (var i = 0, len = chart.primaryXAxis.visibleLabels.length; i < len; i++) {\n vector = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i].value, chart.primaryXAxis), this.startAngle);\n if (i + 1 < len) {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[i + 1].value, chart.primaryXAxis), this.startAngle);\n }\n else {\n vector2 = CoefficientToVector(valueToPolarCoefficient(chart.primaryXAxis.visibleLabels[0].value, chart.primaryXAxis), this.startAngle);\n }\n x1 = this.centerX + radius * vector.x;\n y1 = this.centerY + radius * vector.y;\n x2 = this.centerX + radius * vector2.x;\n y2 = this.centerY + radius * vector2.y;\n majorGrid = majorGrid.concat((i ? 'L ' : 'M ') + x1 + ' ' + y1 + ' ' + 'L ' + x2 + ' ' + y2 + ' ');\n }\n return majorGrid;\n };\n PolarRadarPanel.prototype.drawXAxisGridLine = function (axis, index) {\n var chart = this.chart;\n var tempInterval;\n var vector;\n var majorGrid = '';\n var majorTick = '';\n var minorGirdLine = '';\n var minorTickLine = '';\n var x1 = this.centerX;\n var x2;\n var y1 = this.centerY;\n var y2;\n var minorDirection;\n var length = axis.visibleLabels.length;\n //Gridlines\n for (var i = 0; i < length; i++) {\n tempInterval = axis.visibleLabels[i].value;\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value, axis), this.startAngle);\n x2 = this.centerX + chart.radius * vector.x;\n y2 = this.centerY + chart.radius * vector.y;\n var xLoc = x2 + (axis.majorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var yLoc = y2 + (axis.majorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n majorGrid = 'M ' + x1 + ' ' + y1 + ' ' + 'L ' + x2 + ' ' + y2;\n majorTick = 'M ' + x2 + ' ' + y2 + ' L ' + xLoc + ' ' + yLoc;\n if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)\n && axis.valueType !== 'Category' && chart.visibleSeries[0].type !== 'Radar') {\n minorDirection = this.drawAxisMinorLine(axis, tempInterval, minorGirdLine, minorTickLine);\n minorGirdLine = minorDirection[0];\n minorTickLine = minorDirection[1];\n }\n this.renderTickLine(axis, index, majorTick, minorTickLine, i);\n this.renderGridLine(axis, index, majorGrid, minorGirdLine, i);\n }\n };\n PolarRadarPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, minorGird, minorTick) {\n var value = tempInterval;\n var x;\n var y;\n var vector;\n var range = axis.visibleRange;\n var direction = [];\n for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n value += (axis.valueType === 'DateTime' ? axis.dateTimeInterval : axis.visibleRange.interval) /\n (axis.minorTicksPerInterval + 1);\n if (inside(value, range)) {\n vector = CoefficientToVector(valueToPolarCoefficient(value, axis), this.startAngle);\n x = this.centerX + this.chart.radius * vector.x;\n y = this.centerY + this.chart.radius * vector.y;\n var tickXSize = x + (axis.minorTickLines.height * vector.x * (axis.tickPosition === 'Inside' ? -1 : 1));\n var tickYSize = y + (axis.minorTickLines.height * vector.y * (axis.tickPosition === 'Inside' ? -1 : 1));\n minorGird = minorGird.concat('M' + ' ' + this.centerX + ' ' + this.centerY\n + 'L ' + x + ' ' + y);\n minorTick = minorTick.concat('M' + ' ' + x + ' ' + y + 'L' + ' ' + (tickXSize) + ' ' +\n (tickYSize));\n }\n }\n direction.push(minorGird);\n direction.push(minorTick);\n return direction;\n };\n /**\n * To render the axis label.\n *\n * @param {Axis} axis axis\n * @param {number} index index\n * @returns {void}\n * @private\n */\n PolarRadarPanel.prototype.drawXAxisLabels = function (axis, index) {\n this.visibleAxisLabelRect = [];\n var legendRect;\n if (this.chart.legendModule) {\n legendRect = this.chart.legendModule.legendBounds;\n }\n var chart = this.chart;\n var pointX = 0;\n var pointY = 0;\n var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n var options;\n var vector;\n var labelText;\n var firstLabelX;\n var islabelInside = axis.labelPosition === 'Inside';\n var padding = 5;\n var lastLabelX;\n var label;\n var textAnchor = '';\n var isIntersect;\n var labelRegions = [];\n var isLabelVisible = [];\n isLabelVisible[0] = true;\n var intersectType = axis.labelIntersectAction;\n var ticksbwtLabel = axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n var radius = chart.radius + axis.majorTickLines.height;\n radius = (islabelInside) ? -radius : radius;\n for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n isIntersect = false;\n vector = CoefficientToVector(valueToPolarCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis), this.startAngle);\n if (!isNaN(vector.x) && !isNaN(vector.y)) {\n pointX = this.centerX + (radius + axis.majorTickLines.height + padding) * vector.x;\n pointY = this.centerY + (radius + axis.majorTickLines.height + padding) * vector.y;\n textAnchor = parseFloat(pointX.toFixed(1)) === parseFloat(this.centerX.toFixed(1)) ? 'middle' :\n ((pointX < this.centerX && !islabelInside) || (pointX > this.centerX && islabelInside)) ? 'end' : 'start';\n }\n label = axis.visibleLabels[i];\n labelText = label.text;\n // to trim axis labels based on available size\n if (axis.enableTrim || intersectType === 'Trim') {\n var originalText = axis.visibleLabels[i].originalText;\n var trimText = void 0;\n var size = void 0;\n var labelPosition = axis.labelPosition;\n var chartWidth = chart.availableSize.width;\n var textLength = originalText.length;\n for (var i_1 = textLength - 1; i_1 >= 0; --i_1) {\n trimText = originalText.substring(0, i_1) + '...';\n size = measureText(trimText, axis.labelStyle, this.chart.themeStyle.axisLabelFont).width;\n if (pointX === chartWidth / 2 ? (pointX - size / 2 >= 0 && pointX + size / 2 <= chartWidth) :\n ((labelPosition === 'Outside' && ((pointX >= chartWidth / 2 && pointX + size <= chartWidth) ||\n (pointX <= chartWidth / 2 && pointX - size >= 0))) || (labelPosition === 'Inside' &&\n (pointX + size <= chartWidth / 2 || pointX - size >= chartWidth / 2)))) {\n labelText = i_1 === textLength - 1 ? originalText : trimText;\n label.size.width = measureText(labelText, axis.labelStyle, this.chart.themeStyle.axisLabelFont).width;\n label.text = labelText;\n break;\n }\n }\n }\n // fix for label style not working in axisLabelRender event issue\n labelRegions[i] = this.getLabelRegion(pointX, pointY, label, textAnchor);\n if (i === 0) {\n firstLabelX = pointX;\n }\n else if (i === axis.visibleLabels.length - 1 && axis.valueType !== 'Category') {\n lastLabelX = measureText(labelText, axis.labelStyle, this.chart.themeStyle.axisLabelFont).height;\n lastLabelX += pointX;\n labelText = (lastLabelX > firstLabelX) ? '' : labelText;\n }\n // Label intersect action (Hide) perform here\n if (i !== 0 && intersectType === 'Hide') {\n for (var j = i; j >= 0; j--) {\n j = (j === 0) ? 0 : ((j === i) ? (j - 1) : j);\n if (isLabelVisible[j] && isOverlap(labelRegions[i], labelRegions[j])) {\n isIntersect = true;\n isLabelVisible[i] = false;\n break;\n }\n else {\n isLabelVisible[i] = true;\n }\n }\n }\n if (!isIntersect && legendRect) {\n isIntersect = isOverlap(labelRegions[i], legendRect);\n if (isIntersect) {\n var width = this.getAvailableSpaceToTrim(legendRect, labelRegions[i]);\n if (width > 0) {\n labelText = textTrim(width, axis.visibleLabels[i].originalText, axis.labelStyle, this.chart.enableRtl, this.chart.themeStyle.axisLabelFont);\n isIntersect = false;\n }\n }\n }\n options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, !chart.enableRtl ? textAnchor : textAnchor === 'end' ? 'start' : textAnchor === 'start' ? 'end' : textAnchor, labelText, '', 'central');\n if (isIntersect) {\n continue; // If the label is intersect, the label render is ignored.\n }\n this.visibleAxisLabelRect.push(labelRegions[i]);\n textElement(chart.renderer, options, label.labelStyle, label.labelStyle.color || chart.themeStyle.axisLabelFont.color, labelElement, false, chart.redraw, true, true, null, null, null, null, chart.enableCanvas, null, chart.themeStyle.axisLabelFont);\n }\n if (!this.chart.enableCanvas) {\n this.element.appendChild(labelElement);\n }\n };\n /**\n * To get available space to trim.\n *\n * @param {Rect} legendRect legendRect\n * @param {Rect} labelRect labelRect\n * @returns {number} available space value\n */\n PolarRadarPanel.prototype.getAvailableSpaceToTrim = function (legendRect, labelRect) {\n var legendX1 = legendRect.x;\n var legendX2 = legendX1 + legendRect.width;\n var labelX1 = labelRect.x;\n var labelX2 = labelX1 + labelRect.width;\n var width = 0;\n if (labelX1 > legendX1 && labelX1 < legendX2 && labelX2 > legendX2) {\n width = labelX2 - legendX2;\n }\n else if (labelX1 > legendX1 && labelX1 < legendX2 && labelX2 < legendX2) {\n width = 0;\n }\n else if (labelX2 > legendX1 && labelX2 < legendX2 && labelX1 < legendX1) {\n width = legendX1 - labelX1;\n }\n else if (labelX2 > legendX1 && labelX2 > legendX2 && labelX1 < legendX1) {\n width = legendX1 - labelX1;\n }\n return width;\n };\n /**\n * Getting axis label bounds\n *\n * @param {number} pointX pointX\n * @param {number} pointY pointY\n * @param {VisibleLabels} label label\n * @param {string} anchor anchor\n * @returns {Rect} label region\n */\n PolarRadarPanel.prototype.getLabelRegion = function (pointX, pointY, label, anchor) {\n if (anchor === 'middle') {\n pointX -= (label.size.width / 2);\n }\n else if (anchor === 'end') {\n pointX -= label.size.width;\n }\n pointY -= (label.size.height / 2);\n return new Rect(pointX, pointY, label.size.width, label.size.height);\n };\n PolarRadarPanel.prototype.renderTickLine = function (axis, index, majorTickLine, minorTickLine, gridIndex) {\n var tickOptions;\n var chart = this.chart;\n var direction;\n var element;\n if (axis.majorTickLines.width > 0) {\n element = getElement(chart.element.id + '_MajorTickLine_' + index + '_' + gridIndex);\n direction = element ? element.getAttribute('d') : null;\n tickOptions = new PathOption(chart.element.id + '_MajorTickLine_' + index + '_' + gridIndex, 'transparent', axis.majorTickLines.width, axis.majorTickLines.color || chart.themeStyle.majorTickLine, null, null, majorTickLine);\n /**\n * I252450\n * When we click the center of the marker which is plotted in the axis, selection did not work is fixed\n * Cause: Instead of marker id, axis Tick line id is obtained while clicking\n * Fix: Pointer events set to none for tick lines\n */\n element = chart.renderer.drawPath(tickOptions);\n this.setPointerEventNone(element);\n appendChildElement(chart.enableCanvas, chart.yAxisElements, element, chart.redraw, true, 'x', 'y', null, direction);\n }\n if (axis.minorTickLines.width > 0) {\n element = getElement(chart.element.id + '_MinorTickLine_' + index + '_' + gridIndex);\n direction = element ? element.getAttribute('d') : null;\n tickOptions = new PathOption(chart.element.id + '_MinorTickLine_' + index + '_' + gridIndex, 'transparent', axis.minorTickLines.width, axis.minorTickLines.color || chart.themeStyle.minorTickLine, null, null, minorTickLine);\n /**\n * I252450\n * When we click the center of the marker which is plotted in the axis, selection did not work is fixed\n * Cause: Instead of marker id, axis Tick line id is obtained while clicking\n * Fix: Pointer events set to none for tick lines\n */\n element = chart.renderer.drawPath(tickOptions);\n this.setPointerEventNone(element);\n appendChildElement(chart.enableCanvas, chart.yAxisElements, element, chart.redraw, true, 'x', 'y', null, direction);\n }\n };\n PolarRadarPanel.prototype.renderGridLine = function (axis, index, majorGrid, minorGird, gridIndex) {\n var chart = this.chart;\n var gridOptions;\n var direction;\n var element;\n if (axis.majorGridLines.width > 0) {\n element = getElement(chart.element.id + '_MajorGridLine_' + index + '_' + gridIndex);\n direction = element ? element.getAttribute('d') : null;\n gridOptions = new PathOption(chart.element.id + '_MajorGridLine_' + index + '_' + gridIndex, 'transparent', axis.majorGridLines.width, axis.majorGridLines.color || chart.themeStyle.majorGridLine, null, axis.majorGridLines.dashArray, majorGrid);\n appendChildElement(chart.enableCanvas, this.element, chart.renderer.drawPath(gridOptions), chart.redraw, true, 'x', 'y', null, direction);\n }\n if (axis.minorGridLines.width > 0) {\n element = getElement(chart.element.id + '_MinorGridLine_' + index + '_' + gridIndex);\n direction = element ? element.getAttribute('d') : null;\n gridOptions = new PathOption(chart.element.id + '_MinorGridLine_' + index + '_' + gridIndex, 'transparent', axis.minorGridLines.width, axis.minorGridLines.color || chart.themeStyle.minorGridLine, null, axis.minorGridLines.dashArray, minorGird);\n appendChildElement(chart.enableCanvas, this.element, chart.renderer.drawPath(gridOptions), chart.redraw, true, 'x', 'y', null, direction);\n }\n };\n PolarRadarPanel.prototype.setPointerEventNone = function (element) {\n if (element) {\n element.style.pointerEvents = 'none';\n }\n };\n return PolarRadarPanel;\n}(LineBase));\nexport { PolarRadarPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, logBase, markerAnimate, PolarArc, firstToLowerCase } from '../../common/utils/helper';\nimport { valueToCoefficient, CoefficientToVector, valueToPolarCoefficient } from '../../common/utils/helper';\nimport { PathOption } from '@syncfusion/ej2-svg-base';\nimport { PolarRadarPanel } from '../axis/polar-radar-panel';\nimport { pointRender } from '../../common/model/constants';\nimport { Animation, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `PolarSeries` module is used to render the polar series.\n */\nvar PolarSeries = /** @class */ (function (_super) {\n __extends(PolarSeries, _super);\n function PolarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Renders the provided polar series on the chart based on the given x-axis, y-axis, and inversion status.\n *\n * @param {Series} series - The series to render.\n * @param {Axis} xAxis - The x-axis of the chart.\n * @param {Axis} yAxis - The y-axis of the chart.\n * @param {boolean} inverted - A flag indicating whether the chart is inverted or not.\n * @returns {void}\n */\n PolarSeries.prototype.render = function (series, xAxis, yAxis, inverted) {\n var seriesType = firstToLowerCase(series.drawType);\n var yAxisMin = yAxis.minimum;\n var yAxisMax = yAxis.maximum;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var visiblePoint = _a[_i];\n visiblePoint.visible = visiblePoint.visible && !((!isNullOrUndefined(yAxisMin) && visiblePoint.yValue < yAxisMin) ||\n (!isNullOrUndefined(yAxisMax) && visiblePoint.yValue > yAxisMax));\n }\n if (series.points.length) {\n if ((series.drawType.indexOf('Column') > -1)) {\n this.columnDrawTypeRender(series, xAxis, yAxis);\n }\n else {\n series.chart[seriesType + 'SeriesModule'].render(series, xAxis, yAxis, inverted);\n }\n }\n };\n /**\n * Renders the column draw type for the provided series based on the given x-axis and y-axis.\n *\n * @param {Series} series - The series for which the column draw type should be rendered.\n * @param {Axis} xAxis - The x-axis of the chart.\n * @param {Axis} yAxis - The y-axis of the chart.\n * @returns {void}\n */\n PolarSeries.prototype.columnDrawTypeRender = function (series, xAxis, yAxis) {\n var options;\n var argsData;\n var startAngle;\n var endAngle;\n var itemCurrentXPos;\n var radius;\n var inversedValue;\n var pointStartAngle;\n var pointEndAngle;\n var x1;\n var x2;\n var y1;\n var y2;\n var startValue;\n var endValue;\n var innerRadius;\n var min = xAxis.actualRange.min;\n var centerX = (series.clipRect.width / 2) + series.clipRect.x;\n var dStartX;\n var dStartY;\n var centerY = (series.clipRect.height / 2) + series.clipRect.y;\n var dEndX;\n var dEndY;\n var isRangeColumn = series.drawType === 'RangeColumn';\n var isPolar = series.type === 'Polar';\n var isLogAxis = yAxis.valueType === 'Logarithmic';\n var isStacking = series.drawType === 'StackingColumn';\n var direction = '';\n var sumofYValues = 0;\n var arcValue;\n var interval = (series.points[1] ? series.points[1].xValue : 2 * series.points[0].xValue) - series.points[0].xValue;\n var isInverse = xAxis.isAxisInverse;\n //customer issue ID-I249730, Polar columnSeries in OnTicks with inversed axis\n var ticks = (xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks') ? 0 :\n isInverse ? -interval / 2 : interval / 2;\n var rangeInterval = xAxis.valueType === 'DateTime' ? xAxis.dateTimeInterval : 1;\n this.getSeriesPosition(series);\n var position = isInverse ? (series.rectCount - 1 - series.position) : series.position;\n do {\n sumofYValues += rangeInterval;\n min += rangeInterval;\n } while (min <= xAxis.actualRange.max - (xAxis.valueType === 'Category' ? 0 : 1));\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n inversedValue = isInverse ? (xAxis.visibleRange.max - point.xValue) : point.xValue - xAxis.visibleRange.min;\n itemCurrentXPos = (inversedValue) +\n ((interval / series.rectCount) * position - ticks) + (sumofYValues / 360 * xAxis.startAngle);\n itemCurrentXPos = (((itemCurrentXPos) / (sumofYValues)));\n startAngle = 2 * Math.PI * (itemCurrentXPos + xAxis.startAngle);\n endAngle = 2 * Math.PI * ((itemCurrentXPos + xAxis.startAngle) + (interval / series.rectCount) / (sumofYValues));\n if (startAngle === 0 && endAngle === 0) {\n endAngle = 2 * Math.PI;\n arcValue = '1';\n }\n else {\n arcValue = '0';\n }\n pointStartAngle = startAngle;\n pointEndAngle = endAngle;\n startAngle = (startAngle - 0.5 * Math.PI) + (series.columnSpacing / 2);\n endAngle = ((endAngle - 0.5 * Math.PI) - 0.000001) - (series.columnSpacing / 2);\n if (isStacking || isRangeColumn) {\n startValue = isRangeColumn ? point.low : series.stackedValues.startValues[point.index];\n endValue = isRangeColumn ? point.high : series.stackedValues.endValues[point.index];\n endValue = (isLogAxis ? logBase(endValue === 0 ? 1 : endValue, yAxis.logBase) : endValue);\n endValue = endValue > yAxis.actualRange.max ? yAxis.actualRange.max : endValue;\n }\n else {\n startValue = yAxis.visibleRange.min;\n endValue = point.yValue > yAxis.actualRange.max ? yAxis.actualRange.max : point.yValue;\n }\n radius = startValue === endValue ? 0 : series.chart.radius * valueToCoefficient(endValue, yAxis);\n x1 = centerX + radius * Math.cos(startAngle);\n x2 = centerX + radius * Math.cos(endAngle);\n y1 = centerY + radius * Math.sin(startAngle);\n y2 = centerY + radius * Math.sin(endAngle);\n innerRadius = series.chart.radius * valueToCoefficient((startValue === 0 && yAxis.visibleRange.min !== 0) ? yAxis.visibleRange.min : startValue, yAxis);\n dStartX = centerX + innerRadius * Math.cos(startAngle);\n dStartY = centerY + innerRadius * Math.sin(startAngle);\n dEndX = centerX + innerRadius * Math.cos(endAngle);\n dEndY = centerY + innerRadius * Math.sin(endAngle);\n if (isPolar) {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'A' + ' ' + radius + ' ' + radius + ' ' + '0' + ' '\n + arcValue + ' ' + 1 + ' ' + x2 + ' ' + y2 + ' ' + 'L' + ' ' + dEndX + ' ' + dEndY + ' ' +\n 'A' + ' ' + innerRadius + ' ' + innerRadius + ' ' + '1' + ' ' + '0' + ' ' + '0' + ' '\n + dStartX + ' ' + dStartY + ' ' + 'Z');\n }\n else {\n direction = ('M' + ' ' + x1 + ' ' + y1 + ' ' + 'L' + ' ' + x2 + ' ' + y2 + ' ' + 'L '\n + dEndX + ' ' + dEndY + ' ' + 'L' + ' ' + dStartX + ' ' + dStartY + ' ' + 'Z');\n }\n point.regionData = new PolarArc(pointStartAngle, pointEndAngle, innerRadius, radius, itemCurrentXPos);\n argsData = this.triggerEvent(series.chart, series, point);\n options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n if (!argsData.cancel) {\n this.appendLinePath(options, series, '');\n if (isPolar) {\n point.symbolLocations.push({\n x: centerX + radius * Math.cos((startAngle + (endAngle - startAngle) / 2)),\n y: centerY + radius * Math.sin((startAngle + (endAngle - startAngle) / 2))\n });\n if (isRangeColumn) {\n point.symbolLocations.push({\n x: centerX + innerRadius * Math.cos((startAngle + (endAngle - startAngle) / 2)),\n y: centerY + innerRadius * Math.sin((startAngle + (endAngle - startAngle) / 2))\n });\n }\n }\n else {\n point.symbolLocations.push({ x: (x1 + x2) / 2, y: (y1 + y2) / 2 });\n if (isRangeColumn) {\n point.symbolLocations.push({ x: (dEndX + dStartX) / 2, y: (dEndY + dStartY) / 2 });\n }\n }\n }\n }\n }\n this.renderMarker(series);\n series.isRectSeries = true;\n };\n /**\n * Triggers the point render event for the provided chart, series, and point.\n *\n * @param {Chart} chart - The chart instance.\n * @param {Series} series - The series to which the point belongs.\n * @param {Points} point - The point for which the event should be triggered.\n * @returns {IPointRenderEventArgs} - The point render event arguments.\n */\n PolarSeries.prototype.triggerEvent = function (chart, series, point) {\n var argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, { width: series.border.width, color: series.border.color })\n };\n chart.trigger(pointRender, argsData);\n point.color = argsData.fill;\n return argsData;\n };\n /**\n * Gets the position of the series.\n *\n * @param {Series} series - The series for which to get the position.\n * @returns {void}\n */\n PolarSeries.prototype.getSeriesPosition = function (series) {\n var chart = series.chart;\n var seriesCollection = [];\n var stackingGroup = [];\n var vSeries = { rectCount: 0, position: null };\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (series_1.visible && (series_1.type === 'Polar' || series_1.type === 'Radar') && series_1.drawType.indexOf('Column') !== -1) {\n seriesCollection.push(series_1);\n }\n }\n for (var i = 0; i < seriesCollection.length; i++) {\n var series_2 = seriesCollection[i];\n if (series_2.drawType.indexOf('Stacking') !== -1) {\n if (series_2.stackingGroup) {\n if (stackingGroup[series_2.stackingGroup] === undefined) {\n series_2.position = vSeries.rectCount;\n stackingGroup[series_2.stackingGroup] = vSeries.rectCount++;\n }\n else {\n series_2.position = stackingGroup[series_2.stackingGroup];\n }\n }\n else {\n if (vSeries.position === null) {\n series_2.position = vSeries.rectCount;\n vSeries.position = vSeries.rectCount++;\n }\n else {\n series_2.position = vSeries.position;\n }\n }\n }\n else {\n series_2.position = vSeries.rectCount++;\n }\n }\n for (var i = 0; i < seriesCollection.length; i++) {\n var value = seriesCollection[i];\n value.rectCount = vSeries.rectCount;\n }\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n PolarSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n if (series.drawType === 'Scatter') {\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n }\n else {\n for (count = 1; count < rectElements.length; count++) {\n this.doPolarRadarAnimation(rectElements[count], delay, duration, series);\n }\n }\n };\n /**\n * Performs animation for polar/radar series.\n *\n * @param {Element} animateElement - The element to animate.\n * @param {number} delay - The delay for animation.\n * @param {number} duration - The duration of animation.\n * @param {Series} series - The series for which to perform animation.\n * @returns {void}\n */\n PolarSeries.prototype.doPolarRadarAnimation = function (animateElement, delay, duration, series) {\n var chartcenterX = series.clipRect.width / 2 + series.clipRect.x;\n var chartcenterY = series.clipRect.height / 2 + series.clipRect.y;\n var elementHeight = 0;\n animateElement.style.visibility = 'hidden';\n new Animation({}).animate(animateElement, {\n duration: duration,\n delay: delay,\n progress: function (args) {\n if (args.timeStamp > args.delay) {\n args.element.style.visibility = 'visible';\n elementHeight = ((args.timeStamp - args.delay) / args.duration);\n animateElement.setAttribute('transform', 'translate(' + chartcenterX\n + ' ' + chartcenterY + ') scale(' + elementHeight + ') translate(' + (-chartcenterX) + ' ' + (-chartcenterY) + ')');\n }\n },\n end: function () {\n animateElement.style.visibility = 'visible';\n animateElement.removeAttribute('transform');\n series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n }\n });\n };\n // path calculation for isInversed polar area series\n PolarSeries.prototype.getPolarIsInversedPath = function (xAxis, endPoint) {\n // let vector: ChartLocation;\n // let x1: number;\n // let y1: number;\n var chart = this.chart;\n var radius = chart.radius;\n var direction = endPoint;\n var circleRotate = xAxis.isAxisInverse ? '1 1 ' : '1 0 ';\n var vector = CoefficientToVector(valueToPolarCoefficient(xAxis.visibleLabels[0].value, xAxis), this.startAngle);\n var x1 = this.centerX + radius * vector.x;\n var y1 = this.centerY + radius * vector.y;\n return direction += 'L ' + x1 + ' ' + y1 + ' A ' + radius + ' ' + radius + ' 0 ' + circleRotate +\n x1 + ' ' + (this.centerY + radius) + ' A ' + radius + ' ' + radius + ' 0 ' + circleRotate + x1 + ' ' + y1 + ' ';\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n PolarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series.\n */\n return 'PolarSeries';\n };\n /**\n * To destroy the polar series.\n *\n * @returns {void}\n * @private\n */\n PolarSeries.prototype.destroy = function () {\n /**\n * Destroy method performed here.\n */\n };\n return PolarSeries;\n}(PolarRadarPanel));\nexport { PolarSeries };\n","import { withInRange, getPoint, drawSymbol, getElement } from '../../common/utils/helper';\nimport { markerAnimate, TransformToVisible, appendChildElement } from '../../common/utils/helper';\nimport { PathOption, Rect, Size } from '@syncfusion/ej2-svg-base';\nimport { pointRender } from '../../common/model/constants';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `ScatterSeries` module is used to render the scatter series.\n */\nvar ScatterSeries = /** @class */ (function () {\n function ScatterSeries() {\n }\n /**\n * Renders the series.\n *\n * @param {Series} series - The series to be rendered.\n * @param {Axis} xAxis - The x-axis of the chart.\n * @param {Axis} yAxis - The y-axis of the chart.\n * @param {boolean} isInverted - Specifies whether the chart is inverted.\n * @returns {void}\n */\n ScatterSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n // Scatter series DataLabel is not rendered after selecting StackingColumn\n series.isRectSeries = false;\n var marker = series.marker;\n var visiblePoints = this.enableComplexProperty(series);\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var scatterBorder = {\n width: this.isLineShapeMarker(marker.shape) ? series.width : series.border.width,\n color: this.isLineShapeMarker(marker.shape) ? series.interior : series.border.color\n };\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n this.renderPoint(series, point, isInverted, getCoordinate, scatterBorder, visiblePoints);\n }\n };\n ScatterSeries.prototype.renderPoint = function (series, point, isInverted, getCoordinate, scatterBorder, visiblePoints) {\n var redraw = series.chart.redraw;\n var argsData;\n var startLocation = (redraw && point.symbolLocations) ? point.symbolLocations[0] : null;\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n argsData = {\n cancel: false, name: pointRender, series: series, point: point,\n fill: series.setPointColor(point, series.interior),\n border: series.setBorderColor(point, scatterBorder),\n height: series.marker.height, width: series.marker.width, shape: series.marker.shape\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n point.symbolLocations.push(getCoordinate(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted, series));\n point.color = argsData.fill;\n this.refresh(series, point, argsData, startLocation);\n }\n else {\n point.marker = { visible: true };\n }\n }\n };\n ScatterSeries.prototype.updateDirection = function (series, point, isInverted) {\n var marker = series.marker;\n var visiblePoints = this.enableComplexProperty(series);\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n var scatterBorder = {\n width: this.isLineShapeMarker(marker.shape) ? series.width : series.border.width,\n color: this.isLineShapeMarker(marker.shape) ? series.interior : series.border.color\n };\n for (var i = 0; i < point.length; i++) {\n this.renderPoint(series, series.points[point[i]], isInverted, getCoordinate, scatterBorder, visiblePoints);\n if (series.marker.dataLabel.visible && series.chart.dataLabelModule) {\n series.chart.dataLabelModule.commonId = series.chart.element.id + '_Series_' + series.index + '_Point_';\n var dataLabelElement = series.chart.dataLabelModule.renderDataLabel(series, series.points[point[i]], null, series.marker.dataLabel);\n for (var j = 0; j < dataLabelElement.length; j++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j]);\n }\n }\n }\n };\n ScatterSeries.prototype.isLineShapeMarker = function (shape) {\n return shape === 'HorizontalLine' || shape === 'VerticalLine' || shape === 'Cross';\n };\n /**\n * Enables complex properties for the series.\n *\n * @param {Series} series - The series for which complex properties need to be enabled.\n * @returns {Points[]} - Returns the updated points array.\n */\n ScatterSeries.prototype.enableComplexProperty = function (series) {\n var tempPoints2 = [];\n var tempPoints = [];\n var yVisibleRange = series.yAxis.visibleRange;\n var xVisibleRange = series.xAxis.visibleRange;\n var areaBounds = series.clipRect;\n var seriesPoints = series.points;\n var yTolerance = Math.abs(yVisibleRange.delta / areaBounds.height);\n var xTolerance = Math.abs(xVisibleRange.delta / areaBounds.width);\n var prevYValue = (seriesPoints[0] && seriesPoints[0].y > yTolerance) ? 0 : yTolerance;\n var prevXValue = (seriesPoints[0] && seriesPoints[0].x > xTolerance) ? 0 : xTolerance;\n var yVal = 0;\n var xVal = 0;\n for (var _i = 0, seriesPoints_1 = seriesPoints; _i < seriesPoints_1.length; _i++) {\n var currentPoint = seriesPoints_1[_i];\n if (!currentPoint.symbolLocations) {\n currentPoint.symbolLocations = [];\n }\n yVal = currentPoint.yValue ? currentPoint.yValue : yVisibleRange.min;\n xVal = currentPoint.xValue ? currentPoint.xValue : xVisibleRange.min;\n if (Math.abs(prevYValue - yVal) >= yTolerance || Math.abs(prevXValue - xVal) >= xTolerance) {\n tempPoints.push(currentPoint);\n prevYValue = yVal;\n prevXValue = xVal;\n }\n }\n var currentTempPoint;\n for (var i = 0; i < tempPoints.length; i++) {\n currentTempPoint = tempPoints[i];\n if (isNullOrUndefined(currentTempPoint.x) || currentTempPoint.x === '') {\n continue;\n }\n else {\n tempPoints2.push(currentTempPoint);\n }\n }\n return tempPoints2;\n };\n /**\n * To append scatter element\n *\n * @param {Series} series series\n * @param {Points} point point\n * @param {IPointRenderEventArgs} argsData argsData\n * @param {ChartLocation} startLocation startLocation\n * @returns {void}\n */\n ScatterSeries.prototype.refresh = function (series, point, argsData, startLocation) {\n var chart = series.chart;\n var circlePath;\n var previousPath;\n var marker = series.marker;\n var imageURL = argsData.point.marker.imageUrl || marker.imageUrl;\n var shapeOption = new PathOption(chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, (series.chart.enableCanvas && !argsData.border.color) ? argsData.fill :\n argsData.border.color, series.opacity, null);\n if (chart.redraw && getElement(shapeOption.id)) {\n circlePath = argsData.shape === 'Circle' ? 'c' : '';\n previousPath = getElement(shapeOption.id).getAttribute('d');\n }\n var element = drawSymbol(point.symbolLocations[0], argsData.shape, new Size(argsData.width, argsData.height), imageURL, shapeOption, point.x.toString() + ':' + point.yValue.toString(), series.chart.renderer, series.clipRect);\n appendChildElement(series.chart.enableCanvas, series.seriesElement, element, chart.redraw, true, circlePath + 'x', circlePath + 'y', startLocation, previousPath, false, false, null, chart.duration, true);\n point.regions.push(new Rect(point.symbolLocations[0].x - marker.width, point.symbolLocations[0].y - marker.height, 2 * marker.width, 2 * marker.height));\n point.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n width: argsData.width, shape: argsData.shape, imageUrl: imageURL\n };\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n ScatterSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!point.symbolLocations.length || !rectElements[count]) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n count++;\n }\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n ScatterSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series.\n */\n return 'ScatterSeries';\n };\n /**\n * To destroy the scatter.\n *\n * @returns {void}\n */\n ScatterSeries.prototype.destroy = function () {\n /**\n * Destroy method calling here.\n */\n };\n return ScatterSeries;\n}());\nexport { ScatterSeries };\n","import { withInRange, getPoint, drawSymbol } from '../../common/utils/helper';\nimport { Size, PathOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { markerAnimate, appendChildElement, animateRedrawElement } from '../../common/utils/helper';\nimport { pointRender } from '../../common/model/constants';\n/**\n * `BubbleSeries` module is used to render the bubble series.\n */\nvar BubbleSeries = /** @class */ (function () {\n function BubbleSeries() {\n }\n /**\n * Render the Bubble series.\n *\n * @param {Series} series - The series to be rendered.\n * @param {Axis} xAxis - The X-axis associated with the series.\n * @param {Axis} yAxis - The Y-axis associated with the series.\n * @param {boolean} isInverted - Indicates whether the chart is inverted or not.\n * @returns {void}\n * @private\n */\n BubbleSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n var visiblePoints = series.points;\n var radius;\n var value = Math.max(series.chart.initialClipRect.height, series.chart.initialClipRect.width);\n var percentChange = value / 100;\n var maxRadius = series.maxRadius * percentChange;\n var minRadius = series.minRadius * percentChange;\n var maximumSize = null;\n var maxValue = null;\n if ((series.maxRadius === null || series.minRadius === null)) {\n for (var _i = 0, _a = series.chart.visibleSeries; _i < _a.length; _i++) {\n var value_1 = _a[_i];\n if (value_1.type === 'Bubble' && value_1.visible === true && (value_1.maxRadius === null || value_1.minRadius === null)) {\n maximumSize = value_1.sizeMax > maximumSize ? value_1.sizeMax : maximumSize;\n }\n }\n maxValue = (value / 5) / 2;\n minRadius = maxRadius = 1;\n radius = maxValue * maxRadius;\n }\n else {\n maximumSize = series.sizeMax;\n radius = maxRadius - minRadius;\n }\n for (var _b = 0, visiblePoints_1 = visiblePoints; _b < visiblePoints_1.length; _b++) {\n var bubblePoint = visiblePoints_1[_b];\n this.renderPoint(series, bubblePoint, isInverted, radius, maximumSize, minRadius, visiblePoints);\n }\n };\n BubbleSeries.prototype.renderPoint = function (series, bubblePoint, isInverted, radius, maximumSize, minRadius, visiblePoints) {\n var startLocation = series.chart.redraw && bubblePoint.symbolLocations ? bubblePoint.symbolLocations[0] : null;\n bubblePoint.symbolLocations = [];\n bubblePoint.regions = [];\n var segmentRadius;\n if (bubblePoint.visible &&\n withInRange(visiblePoints[bubblePoint.index - 1], bubblePoint, visiblePoints[bubblePoint.index + 1], series)) {\n if ((series.maxRadius === null || series.minRadius === null)) {\n segmentRadius = radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n else {\n segmentRadius = minRadius + radius * Math.abs(+bubblePoint.size / maximumSize);\n }\n segmentRadius = segmentRadius || minRadius;\n var argsData = {\n cancel: false, name: pointRender, series: series, point: bubblePoint,\n fill: series.setPointColor(bubblePoint, series.interior),\n border: series.setBorderColor(bubblePoint, { width: series.border.width, color: series.border.color }),\n height: 2 * segmentRadius, width: 2 * segmentRadius\n };\n series.chart.trigger(pointRender, argsData);\n if (!argsData.cancel) {\n bubblePoint.symbolLocations.push(getPoint(bubblePoint.xValue, bubblePoint.yValue, series.xAxis, series.yAxis, isInverted));\n bubblePoint.color = argsData.fill;\n var shapeOption = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + bubblePoint.index, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, null);\n var element = drawSymbol(bubblePoint.symbolLocations[0], 'Circle', new Size(argsData.width, argsData.height), series.marker.imageUrl, shapeOption, bubblePoint.x.toString() + ':' + bubblePoint.yValue.toString(), series.chart.svgRenderer, series.clipRect);\n appendChildElement(series.chart.enableCanvas, series.seriesElement, element, series.chart.redraw, false, '', '', null, '', false, false, null, null, true);\n bubblePoint.regions.push(new Rect(bubblePoint.symbolLocations[0].x - segmentRadius, bubblePoint.symbolLocations[0].y - segmentRadius, 2 * segmentRadius, 2 * segmentRadius));\n bubblePoint.marker = {\n border: argsData.border, fill: argsData.fill,\n height: argsData.height, visible: true,\n shape: 'Circle', width: argsData.width\n };\n if (series.chart.enableCanvas) {\n series.chart.markerRender.render(series);\n }\n startLocation = series.chart.redraw && !startLocation ? bubblePoint.symbolLocations[0] : startLocation;\n if (series.chart.redraw) {\n animateRedrawElement(element, series.chart.duration ? series.chart.duration : 300, startLocation, bubblePoint.symbolLocations[0], 'cx', 'cy');\n }\n }\n else {\n bubblePoint.marker = { visible: false };\n }\n }\n };\n BubbleSeries.prototype.updateDirection = function (series, point, isInverted) {\n var visiblePoints = series.points;\n var radius;\n var value = Math.max(series.chart.initialClipRect.height, series.chart.initialClipRect.width);\n var percentChange = value / 100;\n var maxRadius = series.maxRadius * percentChange;\n var minRadius = series.minRadius * percentChange;\n var maximumSize = null;\n var maxValue = null;\n if ((series.maxRadius === null || series.minRadius === null)) {\n for (var _i = 0, _a = series.chart.visibleSeries; _i < _a.length; _i++) {\n var value_2 = _a[_i];\n if (value_2.type === 'Bubble' && value_2.visible === true && (value_2.maxRadius === null || value_2.minRadius === null)) {\n maximumSize = value_2.sizeMax > maximumSize ? value_2.sizeMax : maximumSize;\n }\n }\n maxValue = (value / 5) / 2;\n minRadius = maxRadius = 1;\n radius = maxValue * maxRadius;\n }\n else {\n maximumSize = series.sizeMax;\n radius = maxRadius - minRadius;\n }\n for (var i = 0; i < point.length; i++) {\n this.renderPoint(series, series.points[point[i]], isInverted, radius, maximumSize, minRadius, visiblePoints);\n if (series.marker.dataLabel.visible && series.chart.dataLabelModule) {\n series.chart.dataLabelModule.commonId = series.chart.element.id + '_Series_' + series.index + '_Point_';\n var dataLabelElement = series.chart.dataLabelModule.renderDataLabel(series, series.points[point[i]], null, series.marker.dataLabel);\n for (var j = 0; j < dataLabelElement.length; j++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j]);\n }\n }\n }\n };\n /**\n * To destroy the Bubble.\n *\n * @returns {void}\n * @private\n */\n BubbleSeries.prototype.destroy = function () {\n /**\n * Destroy method calling here.\n */\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n BubbleSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series.\n */\n return 'BubbleSeries';\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n BubbleSeries.prototype.doAnimation = function (series) {\n var duration = series.animation.duration;\n var delay = series.animation.delay;\n var rectElements = series.seriesElement.childNodes;\n var count = 1;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var bubblePoint = _a[_i];\n if (!bubblePoint.symbolLocations.length) {\n continue;\n }\n markerAnimate(rectElements[count], delay, duration, series, bubblePoint.index, bubblePoint.symbolLocations[0], false);\n count++;\n }\n };\n return BubbleSeries;\n}());\nexport { BubbleSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { firstToLowerCase, CoefficientToVector, valueToPolarCoefficient } from '../../common/utils/helper';\nimport { PolarSeries } from '../series/polar-series';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `RadarSeries` module is used to render the radar series.\n */\nvar RadarSeries = /** @class */ (function (_super) {\n __extends(RadarSeries, _super);\n function RadarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Renders the provided radar series on the chart based on the given x-axis, y-axis, and inversion status.\n *\n * @param {Series} series - The series to render.\n * @param {Axis} xAxis - The x-axis of the chart.\n * @param {Axis} yAxis - The y-axis of the chart.\n * @param {boolean} inverted - A flag indicating whether the chart is inverted or not.\n * @returns {void}\n */\n RadarSeries.prototype.render = function (series, xAxis, yAxis, inverted) {\n var seriesType = firstToLowerCase(series.drawType);\n var yAxisMin = yAxis.minimum;\n var yAxisMax = yAxis.maximum;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n point.visible = point.visible && !((!isNullOrUndefined(yAxisMin) && point.yValue < yAxisMin) ||\n (!isNullOrUndefined(yAxisMax) && point.yValue > yAxisMax));\n }\n if (series.points.length) {\n if (series.drawType.indexOf('Column') === -1) {\n series.chart[seriesType + 'SeriesModule'].render(series, xAxis, yAxis, inverted);\n }\n else {\n this.columnDrawTypeRender(series, xAxis, yAxis);\n }\n }\n };\n // path calculation for isInversed polar area series\n RadarSeries.prototype.getRadarIsInversedPath = function (xAxis, endPoint) {\n var chart = this.chart;\n var x1;\n var y1;\n var vector;\n var radius = chart.radius;\n var length = xAxis.visibleLabels.length;\n var direction = endPoint;\n vector = CoefficientToVector(valueToPolarCoefficient(xAxis.visibleLabels[0].value, xAxis), this.startAngle);\n y1 = this.centerY + radius * vector.y;\n x1 = this.centerX + radius * vector.x;\n if (isNaN(x1) || isNaN(y1)) {\n return direction;\n }\n direction += ' L ' + x1 + ' ' + y1 + ' ';\n for (var i = length - 1; i >= 0; i--) {\n vector = CoefficientToVector(valueToPolarCoefficient(xAxis.visibleLabels[i].value, xAxis), this.startAngle);\n y1 = this.centerY + radius * vector.y;\n x1 = this.centerX + radius * vector.x;\n direction += 'L ' + x1 + ' ' + y1 + ' ';\n }\n return direction;\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n RadarSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series.\n */\n return 'RadarSeries';\n };\n /**\n * To destroy the radar series.\n *\n * @returns {void}\n * @private\n */\n RadarSeries.prototype.destroy = function () {\n /**\n * Destroy method performed here.\n */\n };\n return RadarSeries;\n}(PolarSeries));\nexport { RadarSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Double } from '../axis/double-axis';\n/**\n * Common axis classes\n *\n * @private\n */\nvar NiceInterval = /** @class */ (function (_super) {\n __extends(NiceInterval, _super);\n function NiceInterval() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Method to calculate numeric datetime interval.\n *\n * @param {Axis} axis - The axis for which to calculate the interval.\n * @param {Size} size - The size of the axis.\n * @param {number} start - The start value of the axis.\n * @param {number} end - The end value of the axis.\n * @param {boolean} [isChart=true] - Indicating whether it's a chart. Defaults to true.\n * @returns {number} - The calculated numeric datetime interval.\n */\n NiceInterval.prototype.calculateDateTimeNiceInterval = function (axis, size, start, end, isChart) {\n if (isChart === void 0) { isChart = true; }\n var oneDay = 24 * 60 * 60 * 1000;\n var startDate = new Date(start);\n var endDate = new Date(end);\n //var axisInterval ;\n var totalDays = (Math.abs((startDate.getTime() - endDate.getTime()) / (oneDay)));\n var interval;\n axis.actualIntervalType = axis.intervalType;\n var type = axis.intervalType;\n switch (type) {\n case 'Years':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n break;\n case 'Quarter':\n interval = this.calculateNumericNiceInterval(axis, (totalDays / 365) * 4, size);\n break;\n case 'Months':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n break;\n case 'Weeks':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 7, size);\n break;\n case 'Days':\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n break;\n case 'Hours':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n break;\n case 'Minutes':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n break;\n case 'Seconds':\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n break;\n case 'Auto':\n interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Years';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Months';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays / 7, size);\n if (interval >= 1 && !isChart) {\n axis.actualIntervalType = 'Weeks';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Days';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Hours';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n if (interval >= 1) {\n axis.actualIntervalType = 'Minutes';\n return interval;\n }\n interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n axis.actualIntervalType = 'Seconds';\n return interval;\n }\n return interval;\n };\n /**\n * To get the skeleton for the DateTime axis.\n *\n * @param {Axis} axis - The DateTime axis for which to get the skeleton.\n * @param {number} currentValue - The current value.\n * @param {number} previousValue - The previous value.\n * @param {boolean} isBlazor - Indicates whether it's for Blazor.\n * @returns {string} - The skeleton for the DateTime axis.\n * @private\n */\n NiceInterval.prototype.getSkeleton = function (axis, currentValue, previousValue, isBlazor) {\n var skeleton;\n var intervalType = axis.actualIntervalType;\n if (axis.skeleton) {\n return axis.skeleton;\n }\n if (intervalType === 'Years') {\n if (isBlazor) {\n skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'y' : 'y') : 'y';\n }\n else {\n skeleton = axis.isChart ? ((axis.valueType === 'DateTime' && axis.isIntervalInDecimal) ? 'y' : 'yMMM') : 'y';\n }\n }\n else if (intervalType === 'Quarter') {\n skeleton = isBlazor ? 'y' : 'yMMM';\n }\n else if (intervalType === 'Months') {\n if (isBlazor) {\n skeleton = axis.isChart ? 'm' : 'm';\n }\n else {\n skeleton = axis.isChart ? 'MMMd' : 'MMM';\n }\n }\n else if (intervalType === 'Weeks') {\n skeleton = isBlazor ? 'm' : 'MEd';\n }\n else if (intervalType === 'Days') {\n if (isBlazor) {\n skeleton = 'd';\n }\n else {\n skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'MMMd' : 'yMd') : 'MMMd';\n }\n }\n else if (intervalType === 'Hours') {\n if (isBlazor) {\n skeleton = 't';\n }\n else {\n skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'Hm' : 'EHm') : 'h';\n }\n }\n else if (intervalType === 'Minutes') {\n if (isBlazor) {\n skeleton = 'T';\n }\n else {\n skeleton = axis.isChart ? 'Hms' : 'hm';\n }\n }\n else {\n if (isBlazor) {\n skeleton = 'T';\n }\n else {\n skeleton = axis.isChart ? 'Hms' : 'hms';\n }\n }\n return skeleton;\n };\n /**\n * Find label format for axis\n *\n * @param {Axis} axis - axis\n * @returns {string} - Returns the label format.\n * @private\n */\n NiceInterval.prototype.findCustomFormats = function (axis) {\n var labelFormat = axis.labelFormat ? axis.labelFormat : '';\n if (axis.isChart && !axis.skeleton && axis.actualIntervalType === 'Months' && !labelFormat) {\n labelFormat = axis.valueType === 'DateTime' ? 'MMM yyyy' : 'yMMM';\n }\n return labelFormat;\n };\n return NiceInterval;\n}(Double));\nexport { NiceInterval };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isZoomSet, setRange, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { NiceInterval } from '../axis/axis-helper';\nimport { extend, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `DateTime` module is used to render datetime axis.\n */\nvar DateTime = /** @class */ (function (_super) {\n __extends(DateTime, _super);\n /**\n * Constructor for the dateTime module.\n *\n * @private\n * @param {Chart} chart - Specifies the chart.\n */\n function DateTime(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n *\n * @returns {void}\n */\n DateTime.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis, this.chart);\n };\n /**\n * Actual Range for the axis.\n *\n * @private\n * @param {Axis} axis - The axis for which the actual range is calculated.\n * @param {Size} size - The size used for calculation.\n * @returns {void}\n */\n DateTime.prototype.getActualRange = function (axis, size) {\n var option = {\n skeleton: 'full',\n type: 'dateTime'\n };\n var dateParser = this.chart.intl.getDateParser(option);\n var dateFormatter = this.chart.intl.getDateFormat(option);\n // Axis min\n if ((axis.minimum) !== null) {\n this.min = this.chart.isBlazor ? Date.parse(axis.minimum.toString()) : Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.minimum }).val))));\n }\n else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n this.min = Date.parse(dateParser(dateFormatter(new Date(1970, 1, 1))));\n }\n // Axis Max\n if ((axis.maximum) !== null) {\n this.max = this.chart.isBlazor ? Date.parse(axis.maximum.toString()) : Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.maximum }).val))));\n }\n else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n this.max = Date.parse(dateParser(dateFormatter(new Date(1970, 5, 1))));\n }\n if (this.min === this.max) {\n this.max = this.max + 2592000000;\n this.min = this.min - 2592000000;\n }\n axis.actualRange = {};\n axis.doubleRange = new DoubleRange(this.min, this.max);\n var datetimeInterval = this.calculateDateTimeNiceInterval(axis, size, axis.doubleRange.start, axis.doubleRange.end);\n if (!axis.interval) {\n axis.actualRange.interval = datetimeInterval;\n }\n else {\n axis.actualRange.interval = axis.interval;\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n };\n /**\n * Apply padding for the range.\n *\n * @private\n * @param {Axis} axis - The axis for which padding is applied.\n * @param {Size} size - The size used for padding calculation.\n * @returns {void}\n */\n DateTime.prototype.applyRangePadding = function (axis, size) {\n this.min = (axis.actualRange.min);\n this.max = (axis.actualRange.max);\n var minimum;\n var maximum;\n var interval = axis.actualRange.interval;\n if (!setRange(axis)) {\n var rangePadding = axis.getRangePadding(this.chart);\n minimum = new Date(this.min);\n maximum = new Date(this.max);\n var intervalType = axis.actualIntervalType;\n if (rangePadding === 'None') {\n this.min = minimum.getTime();\n this.max = maximum.getTime();\n }\n else if (rangePadding === 'Additional' || rangePadding === 'Round') {\n switch (intervalType) {\n case 'Years':\n this.getYear(minimum, maximum, rangePadding, interval);\n break;\n case 'Months':\n this.getMonth(minimum, maximum, rangePadding, interval);\n break;\n case 'Days':\n this.getDay(minimum, maximum, rangePadding, interval);\n break;\n case 'Hours':\n this.getHour(minimum, maximum, rangePadding, interval);\n break;\n case 'Minutes': {\n var minute = (minimum.getMinutes() / interval) * interval;\n var endMinute = maximum.getMinutes() + (minimum.getMinutes() - minute);\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minute, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minute + (-interval), 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute + (interval), 0)).getTime();\n }\n break;\n }\n case 'Seconds': {\n var second = (minimum.getSeconds() / interval) * interval;\n var endSecond = maximum.getSeconds() + (minimum.getSeconds() - second);\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond, 0)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second + (-interval), 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond + (interval), 0)).getTime();\n }\n break;\n }\n }\n }\n }\n axis.actualRange.min = (axis.minimum != null) ? this.min : this.min;\n axis.actualRange.max = (axis.maximum != null) ? this.max : this.max;\n axis.actualRange.delta = (axis.actualRange.max - axis.actualRange.min);\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n this.calculateVisibleRange(size, axis);\n };\n DateTime.prototype.getYear = function (minimum, maximum, rangePadding, interval) {\n var startYear = minimum.getFullYear();\n var endYear = maximum.getFullYear();\n if (rangePadding === 'Additional') {\n this.min = (new Date(startYear - interval, 1, 1, 0, 0, 0)).getTime();\n this.max = (new Date(endYear + interval, 1, 1, 0, 0, 0)).getTime();\n }\n else {\n this.min = new Date(startYear, 0, 0, 0, 0, 0).getTime();\n this.max = new Date(endYear, 11, 30, 23, 59, 59).getTime();\n }\n };\n DateTime.prototype.getMonth = function (minimum, maximum, rangePadding, interval) {\n var month = minimum.getMonth();\n var endMonth = maximum.getMonth();\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), month, 0, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), endMonth, new Date(maximum.getFullYear(), maximum.getMonth(), 0).getDate(), 23, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), month + (-interval), 1, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), endMonth + (interval), endMonth === 2 ? 28 : 30, 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getDay = function (minimum, maximum, rangePadding, interval) {\n var day = minimum.getDate();\n var endDay = maximum.getDate();\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day, 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay, 23, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day + (-interval), 0, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay + (interval), 0, 0, 0)).getTime();\n }\n };\n DateTime.prototype.getHour = function (minimum, maximum, rangePadding, interval) {\n var hour = (minimum.getHours() / interval) * interval;\n var endHour = maximum.getHours() + (minimum.getHours() - hour);\n if (rangePadding === 'Round') {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour, 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour, 59, 59)).getTime();\n }\n else {\n this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour + (-interval), 0, 0)).getTime();\n this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour + (interval), 0, 0)).getTime();\n }\n };\n /**\n * Calculate visible range for axis.\n *\n * @private\n * @param {Size} size - The size used for calculation.\n * @param {Axis} axis - The axis for which the visible range is calculated.\n * @returns {void}\n */\n DateTime.prototype.calculateVisibleRange = function (size, axis) {\n axis.visibleRange = {\n min: axis.actualRange.min,\n max: axis.actualRange.max,\n interval: axis.actualRange.interval,\n delta: axis.actualRange.delta\n };\n var isLazyLoad = isNullOrUndefined(axis.zoomingScrollBar) ? false : axis.zoomingScrollBar.isLazyLoad;\n if ((isZoomSet(axis)) && !isLazyLoad) {\n axis.calculateVisibleRangeOnZooming();\n axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n this.calculateDateTimeNiceInterval(axis, size, axis.visibleRange.min, axis.visibleRange.max)\n : axis.visibleRange.interval;\n }\n axis.dateTimeInterval = this.increaseDateTimeInterval(axis, axis.visibleRange.min, axis.visibleRange.interval).getTime()\n - axis.visibleRange.min;\n axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n };\n /**\n * Calculate visible labels for the axis.\n *\n * @param {Axis} axis axis\n * @param {Chart | RangeNavigator} chart chart\n * @returns {void}\n * @private\n */\n DateTime.prototype.calculateVisibleLabels = function (axis, chart) {\n axis.visibleLabels = [];\n var tempInterval = axis.visibleRange.min;\n var labelStyle;\n var previousValue;\n var isBlazor = chart.getModuleName() === 'chart' ? chart.isBlazor : false;\n var axisLabels = axis.visibleLabels;\n if (axis.minimum === null) {\n tempInterval = this.alignRangeStart(axis, tempInterval, axis.visibleRange.interval).getTime();\n }\n while (tempInterval <= axis.visibleRange.max) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n previousValue = axisLabels.length ? axis.visibleLabels[axisLabels.length - 1].value : tempInterval;\n axis.format = chart.intl.getDateFormat({\n format: this.findCustomFormats(axis) || this.blazorCustomFormat(axis),\n type: firstToLowerCase(axis.skeletonType),\n skeleton: this.getSkeleton(axis, tempInterval, previousValue, isBlazor)\n });\n axis.startLabel = axis.format(new Date(axis.visibleRange.min));\n axis.endLabel = axis.format(new Date(axis.visibleRange.max));\n if (withIn(tempInterval, axis.visibleRange)) {\n var interval = this.increaseDateTimeInterval(axis, tempInterval, axis.visibleRange.interval).getTime();\n if (interval > axis.visibleRange.max) {\n axis.endLabel = axis.format(new Date(tempInterval));\n }\n triggerLabelRender(chart, tempInterval, axis.format(new Date(tempInterval)), labelStyle, axis);\n }\n var actualInterval = tempInterval;\n tempInterval = this.increaseDateTimeInterval(axis, tempInterval, axis.visibleRange.interval).getTime();\n if (actualInterval === tempInterval) {\n break;\n }\n }\n //tooltip and crosshair formats for 'Months' and 'Days' interval types\n if ((axis.actualIntervalType === 'Months' || axis.actualIntervalType === 'Days') && axis.isChart) {\n axis.format = chart.intl.getDateFormat({\n format: axis.labelFormat || (axis.actualIntervalType === 'Months' && !axis.skeleton ? 'y MMM' : ''),\n type: firstToLowerCase(axis.skeletonType), skeleton: axis.skeleton || (axis.actualIntervalType === 'Days' ? 'MMMd' : '')\n });\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * Calculate the Blazor custom format for axis.\n *\n * @param {Axis} axis - The axis for which the custom format is calculated.\n * @returns {string} - The custom format string.\n * @private\n */\n DateTime.prototype.blazorCustomFormat = function (axis) {\n if (this.chart.isBlazor) {\n return axis.actualIntervalType === 'Years' ? (axis.isIntervalInDecimal ? 'yyyy' : 'MMM y') :\n (axis.actualIntervalType === 'Days' && !axis.isIntervalInDecimal) ? 'ddd HH tt' : '';\n }\n else {\n return '';\n }\n };\n /**\n * Increase the date-time interval.\n *\n * @param {Axis} axis - The axis for which the interval is increased.\n * @param {number} value - The value of the interval.\n * @param {number} interval - The interval to increase.\n * @returns {Date} - The increased date-time interval.\n * @private\n */\n DateTime.prototype.increaseDateTimeInterval = function (axis, value, interval) {\n var result = new Date(value);\n if (axis.interval) {\n axis.isIntervalInDecimal = (interval % 1) === 0;\n axis.visibleRange.interval = interval;\n }\n else {\n interval = Math.ceil(interval);\n axis.visibleRange.interval = interval;\n }\n var intervalType = axis.actualIntervalType;\n if (axis.isIntervalInDecimal) {\n switch (intervalType) {\n case 'Years':\n result.setFullYear(result.getFullYear() + interval);\n return result;\n case 'Quarter':\n result.setMonth(result.getMonth() + (3 * interval));\n return result;\n case 'Months':\n result.setMonth(result.getMonth() + interval);\n return result;\n case 'Weeks':\n result.setDate(result.getDate() + (interval * 7));\n return result;\n case 'Days':\n result.setDate(result.getDate() + interval);\n return result;\n case 'Hours':\n result.setHours(result.getHours() + interval);\n return result;\n case 'Minutes':\n result.setMinutes(result.getMinutes() + interval);\n return result;\n case 'Seconds':\n result.setSeconds(result.getSeconds() + interval);\n return result;\n }\n }\n else {\n result = this.getDecimalInterval(result, interval, intervalType);\n }\n return result;\n };\n DateTime.prototype.alignRangeStart = function (axis, sDate, intervalSize) {\n var sResult = new Date(sDate);\n switch (axis.actualIntervalType) {\n case 'Years': {\n var year = Math.floor(Math.floor(sResult.getFullYear() / intervalSize) * intervalSize);\n sResult = new Date(year, sResult.getMonth(), sResult.getDate(), 0, 0, 0);\n return sResult;\n }\n case 'Months': {\n var month = Math.floor(Math.floor((sResult.getMonth()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), month, sResult.getDate(), 0, 0, 0);\n return sResult;\n }\n case 'Days': {\n var day = Math.floor(Math.floor((sResult.getDate()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), day, 0, 0, 0);\n return sResult;\n }\n case 'Hours': {\n var hour = Math.floor(Math.floor((sResult.getHours()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), hour, 0, 0);\n return sResult;\n }\n case 'Minutes': {\n var minutes = Math.floor(Math.floor((sResult.getMinutes()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), minutes, 0, 0);\n return sResult;\n }\n case 'Seconds': {\n var seconds = Math.floor(Math.floor((sResult.getSeconds()) / intervalSize) * intervalSize);\n sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), sResult.getMinutes(), seconds, 0);\n return sResult;\n }\n }\n return sResult;\n };\n DateTime.prototype.getDecimalInterval = function (result, interval, intervalType) {\n var roundValue = Math.floor(interval);\n var decimalValue = interval - roundValue;\n switch (intervalType) {\n case 'Years': {\n var month = Math.round(12 * decimalValue);\n result.setFullYear(result.getFullYear() + roundValue);\n result.setMonth(result.getMonth() + month);\n return result;\n }\n case 'Quarter':\n result.setMonth(result.getMonth() + (3 * interval));\n return result;\n case 'Months': {\n var days = Math.round(30 * decimalValue);\n result.setMonth(result.getMonth() + roundValue);\n result.setDate(result.getDate() + days);\n return result;\n }\n case 'Weeks':\n result.setDate(result.getDate() + (interval * 7));\n return result;\n case 'Days': {\n var hour = Math.round(24 * decimalValue);\n result.setDate(result.getDate() + roundValue);\n result.setHours(result.getHours() + hour);\n return result;\n }\n case 'Hours': {\n var min = Math.round(60 * decimalValue);\n result.setHours(result.getHours() + roundValue);\n result.setMinutes(result.getMinutes() + min);\n return result;\n }\n case 'Minutes': {\n var sec = Math.round(60 * decimalValue);\n result.setMinutes(result.getMinutes() + roundValue);\n result.setSeconds(result.getSeconds() + sec);\n return result;\n }\n case 'Seconds': {\n var milliSec = Math.round(1000 * decimalValue);\n result.setSeconds(result.getSeconds() + roundValue);\n result.setMilliseconds(result.getMilliseconds() + milliSec);\n return result;\n }\n }\n return result;\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n DateTime.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'DateTime';\n };\n /**\n * To destroy the category axis.\n *\n * @returns {void}\n * @private\n */\n DateTime.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n return DateTime;\n}(NiceInterval));\nexport { DateTime };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `ColumnSeries` Module used to render the column series.\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n __extends(ColumnSeries, _super);\n function ColumnSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.sideBySideInfo = [];\n return _this;\n }\n ColumnSeries.prototype.render = function (series) {\n this.sideBySideInfo[series.index] = this.getSideBySideInfo(series);\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var pointColumn = _a[_i];\n this.renderPoint(series, pointColumn, this.sideBySideInfo[series.index], origin);\n }\n this.renderMarker(series);\n };\n ColumnSeries.prototype.renderPoint = function (series, pointColumn, sideBySideInfo, origin) {\n pointColumn.symbolLocations = [];\n pointColumn.regions = [];\n if (pointColumn.visible && withInRange(series.points[pointColumn.index - 1], pointColumn, series.points[pointColumn.index + 1], series)) {\n this.rect = this.getRectangle(pointColumn.xValue + sideBySideInfo.start, pointColumn.yValue, pointColumn.xValue + sideBySideInfo.end, origin, series);\n this.rect.width = series.columnWidthInPixel ? (series.columnWidthInPixel - (series.chart.enableSideBySidePlacement ?\n series.columnWidthInPixel * series.columnSpacing : 0)) : this.rect.width;\n this.rect.x = series.columnWidthInPixel ? this.rect.x - (((series.columnWidthInPixel / 2) * series.rectCount) -\n (series.columnWidthInPixel * series.index)) : this.rect.x;\n var color = series.category === 'Indicator' ? pointColumn.color : series.interior;\n var argsData = this.triggerEvent(series, pointColumn, color, { width: series.border.width, color: series.border.color });\n if (!argsData.cancel) {\n this.updateSymbolLocation(pointColumn, this.rect, series);\n this.drawRectangle(series, pointColumn, this.rect, argsData);\n if (series.columnFacet === 'Cylinder') {\n var cylinderSeriesOption = {\n 'isColumn': true,\n 'stacking': false,\n 'isLastSeries': true\n };\n this.drawCylinder(this.options, this.element, cylinderSeriesOption, this.rect, series);\n }\n }\n }\n };\n ColumnSeries.prototype.updateDirection = function (series, point) {\n var origin = Math.max(series.yAxis.visibleRange.min, 0);\n for (var i = 0; i < point.length; i++) {\n this.renderPoint(series, series.points[point[i]], this.sideBySideInfo[series.index], origin);\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.renderMarker(series, series.points[point[i]], series.points[point[i]].symbolLocations[0], null, true);\n }\n if (series.marker.dataLabel.visible && series.chart.dataLabelModule) {\n series.chart.dataLabelModule.commonId = series.chart.element.id + '_Series_' + series.index + '_Point_';\n var dataLabelElement = series.chart.dataLabelModule.renderDataLabel(series, series.points[point[i]], null, series.marker.dataLabel);\n for (var j = 0; j < dataLabelElement.length; j++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j]);\n }\n }\n }\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n ColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n ColumnSeries.prototype.getModuleName = function () {\n return 'ColumnSeries';\n /**\n * return the module name.\n */\n };\n /**\n * To destroy the column series.\n *\n * @returns {void}\n * @private\n */\n ColumnSeries.prototype.destroy = function () {\n /**\n * Destroy method performed here.\n */\n };\n return ColumnSeries;\n}(ColumnBase));\nexport { ColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getVisiblePoints } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingColumnSeries` module used to render the stacking column series.\n */\nvar StackingColumnSeries = /** @class */ (function (_super) {\n __extends(StackingColumnSeries, _super);\n function StackingColumnSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.sideBySideInfo = [];\n return _this;\n }\n StackingColumnSeries.prototype.render = function (series) {\n series.isRectSeries = true;\n this.sideBySideInfo[series.index] = this.getSideBySideInfo(series);\n var stackedValue = series.stackedValues;\n var visiblePoints = getVisiblePoints(series);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n this.renderPoint(series, point, this.sideBySideInfo[series.index], stackedValue, visiblePoints);\n }\n if (series.visible) {\n this.renderMarker(series);\n }\n };\n StackingColumnSeries.prototype.renderPoint = function (series, point, sideBySideInfo, stackedValue, visiblePoints) {\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n var index = void 0;\n var startvalue = void 0;\n if (!series.visible && series.isLegendClicked) {\n for (var i = series.index; i >= 0; i--) {\n if (series.chart.visibleSeries[i].visible) {\n index = series.chart.visibleSeries[i].index;\n break;\n }\n }\n startvalue = series.index > 0 && index !== undefined ?\n series.chart.visibleSeries[index].stackedValues.endValues[point.index] :\n series.stackedValues.startValues[point.index];\n }\n this.rect = this.getRectangle(point.xValue + sideBySideInfo.start, (!series.visible && series.isLegendClicked) ? startvalue :\n stackedValue.endValues[point.index], point.xValue + sideBySideInfo.end, (!series.visible && series.isLegendClicked) ?\n startvalue : stackedValue.startValues[point.index], series);\n this.rect.width = series.columnWidthInPixel ? series.columnWidthInPixel : this.rect.width;\n this.rect.x = series.columnWidthInPixel ? this.rect.x - (((series.columnWidthInPixel / 2) * series.rectCount) -\n (series.columnWidthInPixel * series.position)) : this.rect.x;\n var argsData = this.triggerEvent(series, point, series.interior, { width: series.visible ?\n series.border.width : 0, color: series.visible ? series.border.color : '' });\n if (!argsData.cancel) {\n this.drawRectangle(series, point, this.rect, argsData);\n this.updateSymbolLocation(point, this.rect, series);\n if (series.columnFacet === 'Cylinder') {\n var cylinderSeriesOption = {\n 'isColumn': true,\n 'stacking': series.type === 'StackingColumn100',\n 'isLastSeries': true\n };\n this.drawCylinder(this.options, this.element, cylinderSeriesOption, this.rect, series);\n }\n }\n }\n };\n StackingColumnSeries.prototype.updateDirection = function (series, point) {\n var seriesCollection = [];\n for (var i = 0; i < series.xAxis.series.length; i++) {\n var stackSeries = series.xAxis.series[i];\n if (stackSeries.stackingGroup === series.stackingGroup) {\n seriesCollection.push(stackSeries);\n }\n }\n for (var j = 0; j < seriesCollection.length; j++) {\n var visiblePoints = getVisiblePoints(seriesCollection[j]);\n for (var i = 0; i < point.length; i++) {\n this.renderPoint(seriesCollection[j], seriesCollection[j].points[point[i]], this.sideBySideInfo[series.index], seriesCollection[j].stackedValues, visiblePoints);\n if (series.marker && series.marker.visible) {\n seriesCollection[j].chart.markerRender.renderMarker(seriesCollection[j], seriesCollection[j].points[point[i]], seriesCollection[j].points[point[i]].symbolLocations[0], null, true);\n }\n if (seriesCollection[j].marker.dataLabel.visible && seriesCollection[j].chart.dataLabelModule) {\n seriesCollection[j].chart.dataLabelModule.commonId = seriesCollection[j].chart.element.id + '_Series_' + seriesCollection[j].index + '_Point_';\n var dataLabelElement = seriesCollection[j].chart.dataLabelModule.renderDataLabel(seriesCollection[j], seriesCollection[j].points[point[i]], null, seriesCollection[j].marker.dataLabel);\n for (var j_1 = 0; j_1 < dataLabelElement.length; j_1++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j_1]);\n }\n }\n }\n }\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n StackingColumnSeries.prototype.doAnimation = function (series) {\n this.animate(series);\n };\n /**\n * To destroy the stacking column.\n *\n * @returns {void}\n * @private\n */\n StackingColumnSeries.prototype.destroy = function () {\n /**\n * Destroy method performed here.\n */\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n StackingColumnSeries.prototype.getModuleName = function () {\n return 'StackingColumnSeries';\n };\n return StackingColumnSeries;\n}(ColumnBase));\nexport { StackingColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { withInRange, getPoint, TransformToVisible } from '../../common/utils/helper';\nimport { PathOption } from '@syncfusion/ej2-svg-base';\nimport { LineBase } from './line-base';\n/**\n * `LineSeries` module used to render the line series.\n */\nvar LineSeries = /** @class */ (function (_super) {\n __extends(LineSeries, _super);\n function LineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Renders the line series based on the provided axis and inversion status.\n *\n * @param {Series} series - The series to render.\n * @param {Axis} xAxis - The X-axis associated with the series.\n * @param {Axis} yAxis - The Y-axis associated with the series.\n * @param {boolean} isInverted - Specifies whether the chart is inverted.\n * @param {boolean} pointAnimate - Specifies whether the point has to be animated or not.\n * @param {boolean} pointUpdate - Specifies whether the point has to be updated or not.\n * @returns {void}\n * @private\n */\n LineSeries.prototype.render = function (series, xAxis, yAxis, isInverted, pointAnimate, pointUpdate) {\n var point1;\n var point2;\n var direction = '';\n var prevPoint = null;\n var startPoint = 'M';\n var isPolar = (series.chart && series.chart.chartAreaType === 'PolarRadar');\n var isDrop = (series.emptyPointSettings && series.emptyPointSettings.mode === 'Drop');\n var getCoordinate = isPolar ? TransformToVisible : getPoint;\n var visiblePoints = series.category === 'TrendLine' ? series.points : this.enableComplexProperty(series);\n for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n var point = visiblePoints_1[_i];\n point.regions = [];\n point.symbolLocations = [];\n if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n direction += this.getLineDirection(prevPoint, point, series, isInverted, getCoordinate, startPoint);\n startPoint = prevPoint ? 'L' : startPoint;\n prevPoint = point;\n this.storePointLocation(point, series, isInverted, getCoordinate);\n if (direction === '' && visiblePoints.length === 1) {\n direction = 'M ' + point.symbolLocations[0].x + ' ' + point.symbolLocations[0].y;\n }\n }\n else {\n prevPoint = isDrop ? prevPoint : null;\n startPoint = isDrop ? startPoint : 'M';\n }\n }\n if (isPolar) {\n if (series.isClosed) {\n var points = this.getFirstLastVisiblePoint(visiblePoints);\n point2 = getCoordinate(points.last.xValue, points.last.yValue, xAxis, yAxis, isInverted, series);\n point1 = getCoordinate(points.first.xValue, points.first.yValue, xAxis, yAxis, isInverted, series);\n direction = direction.concat(startPoint + ' ' + point2.x + ' ' + point2.y + ' ' + 'L' + ' ' + point1.x + ' ' + point1.y);\n }\n }\n var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index);\n var options = new PathOption(name, 'none', series.width, series.interior, series.opacity, series.dashArray, direction);\n this[pointAnimate ? 'addPath' : 'appendLinePath'](options, series, '');\n if (!pointUpdate) {\n this.renderMarker(series);\n }\n };\n /**\n * To animate point for line series.\n *\n * @returns {void}\n * @private\n */\n LineSeries.prototype.updateDirection = function (series, point) {\n this.render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis, false, true);\n for (var i = 0; i < point.length; i++) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.renderMarker(series, series.points[point[i]], series.points[point[i]].symbolLocations[0], null, true);\n }\n if (series.marker.dataLabel.visible && series.chart.dataLabelModule) {\n series.chart.dataLabelModule.commonId = series.chart.element.id + '_Series_' + series.index + '_Point_';\n var dataLabelElement = series.chart.dataLabelModule.renderDataLabel(series, series.points[point[i]], null, series.marker.dataLabel);\n for (var j = 0; j < dataLabelElement.length; j++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j]);\n }\n }\n }\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n LineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doProgressiveAnimation(series, option);\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n LineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series\n */\n return 'LineSeries';\n };\n /**\n * To destroy the line series.\n *\n * @returns {void}\n * @private\n */\n LineSeries.prototype.destroy = function () {\n /**\n * Destroy method performed here.\n */\n };\n return LineSeries;\n}(LineBase));\nexport { LineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { PathOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { LineBase } from './line-base';\n/**\n * `StackingLineSeries` module used to render the stacking line series.\n */\nvar StackingLineSeries = /** @class */ (function (_super) {\n __extends(StackingLineSeries, _super);\n function StackingLineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the Stacking line series.\n *\n * @param {Series} series - The series to be rendered.\n * @param {Axis} xAxis - The x-axis of the chart.\n * @param {Axis} yAxis - The y-axis of the chart.\n * @param {boolean} isInverted - Specifies whether the chart is inverted.\n * @param {boolean} pointAnimate - Specifies whether the point has to be animated or not.\n * @param {boolean} pointUpdate - Specifies whether the point has to be updated or not.\n * @returns {void}\n * @private\n */\n StackingLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted, pointAnimate, pointUpdate) {\n var polarType = series.chart.chartAreaType === 'PolarRadar';\n var getCoordinate = polarType ? TransformToVisible : getPoint;\n var direction = '';\n var visiblePts = this.enableComplexProperty(series);\n var pointsLength = visiblePts.length;\n var stackedvalue = series.stackedValues;\n var pointIndex;\n var nextPointIndex;\n var point1;\n var point2;\n for (var i = 0; i < pointsLength; i++) {\n visiblePts[i].regions = [];\n visiblePts[i].symbolLocations = [];\n pointIndex = visiblePts[i].index;\n if (visiblePts[i].visible && withInRange(visiblePts[i - 1], visiblePts[i], visiblePts[i + 1], series)) {\n point1 = getCoordinate(visiblePts[i].xValue, stackedvalue.endValues[pointIndex], xAxis, yAxis, isInverted, series);\n direction = direction.concat((i ? 'L' : 'M') + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n visiblePts[i].symbolLocations.push(getCoordinate(visiblePts[i].xValue, stackedvalue.endValues[pointIndex], xAxis, yAxis, isInverted, series));\n visiblePts[i].regions.push(new Rect(visiblePts[i].symbolLocations[0].x - series.marker.width, visiblePts[i].symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n }\n else {\n if (series.emptyPointSettings.mode !== 'Drop') {\n if (visiblePts[i + 1] && visiblePts[i + 1].visible) {\n nextPointIndex = visiblePts[i + 1].index;\n point1 = getCoordinate(visiblePts[i + 1].xValue, stackedvalue.endValues[nextPointIndex], xAxis, yAxis, isInverted, series);\n direction = direction.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n }\n }\n }\n }\n if (series.chart.chartAreaType === 'PolarRadar' && visiblePts.length > 1) {\n point1 = { 'y': stackedvalue.endValues[0], 'x': series.points[0].xValue };\n point2 = getCoordinate(point1.x, point1.y, xAxis, yAxis, isInverted, series);\n direction += ('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n }\n var options = new PathOption(series.chart.element.id + '_Series_' + series.index, 'none', series.width, series.interior, series.opacity, series.dashArray, direction);\n this[pointAnimate ? 'addPath' : 'appendLinePath'](options, series, '');\n if (!pointUpdate) {\n this.renderMarker(series);\n }\n };\n /**\n * To animate point for stacking line series.\n *\n * @param {Series} series - Specifies the series.\n * @param {number} point - Specifies the point.\n * @returns {void}\n * @private\n */\n StackingLineSeries.prototype.updateDirection = function (series, point) {\n this.render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis, false, true);\n for (var i = 0; i < point.length; i++) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.renderMarker(series, series.points[point[i]], series.points[point[i]].symbolLocations[0], null, true);\n }\n if (series.marker.dataLabel.visible && series.chart.dataLabelModule) {\n series.chart.dataLabelModule.commonId = series.chart.element.id + '_Series_' + series.index + '_Point_';\n var dataLabelElement = series.chart.dataLabelModule.renderDataLabel(series, series.points[point[i]], null, series.marker.dataLabel);\n for (var j = 0; j < dataLabelElement.length; j++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j]);\n }\n }\n }\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n StackingLineSeries.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n /**\n * To destroy the stacking line.\n *\n * @returns {void}\n * @private\n */\n StackingLineSeries.prototype.destroy = function () {\n /**\n * Destroy method calling here.\n */\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n StackingLineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series.\n */\n return 'StackingLineSeries';\n };\n return StackingLineSeries;\n}(LineBase));\nexport { StackingLineSeries };\n","import { Mean, RectOption, pathAnimation, getElement, appendChildElement, appendClipElement } from '../../common/utils/helper';\nimport { getPoint, sum, templateAnimate } from '../../common/utils/helper';\nimport { PathOption } from '@syncfusion/ej2-svg-base';\nimport { animationMode } from '@syncfusion/ej2-base';\n/**\n * `ErrorBar` module is used to render the error bar for series.\n */\nvar ErrorBar = /** @class */ (function () {\n /**\n * Constructor for the error bar module.\n *\n * @private\n */\n function ErrorBar(chart) {\n this.chart = chart;\n }\n /**\n * Render the error bar for series.\n *\n * @returns {void}\n */\n ErrorBar.prototype.render = function (series) {\n if (this.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n this.createElement(series, this.chart);\n this.renderErrorBar(series);\n };\n ErrorBar.prototype.renderErrorBar = function (series) {\n var seriesIndex = series.index;\n var symbolId;\n var capId;\n var errorbar = series.errorBar;\n var errorBarCap = series.errorBar.errorBarCap;\n var errorDirection = ['', ''];\n var redraw = series.chart.redraw;\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (point.visible && point.symbolLocations[0]) {\n var errorX = 0;\n var errorY = 0;\n switch (errorbar.mode) {\n case 'Vertical':\n errorY = point.verticalError;\n break;\n case 'Horizontal':\n errorX = point.horizontalError;\n break;\n case 'Both':\n errorX = point.horizontalError;\n errorY = point.verticalError;\n break;\n }\n errorDirection = this['calculate' + errorbar.type + 'Value'](point, series, this.chart.requireInvertedAxis, errorX, errorY);\n symbolId = this.chart.element.id + '_Series_' + '_ErrorBarGroup_' + seriesIndex + '_Point_' + point.index;\n capId = this.chart.element.id + '_Series_' + '_ErrorBarCap_' + seriesIndex + '_Point_' + point.index;\n var shapeOption = new PathOption(symbolId, '', errorbar.width, (errorbar.errorBarColorMapping ? point.errorBarColor : errorbar.color || this.chart.themeStyle.errorBar), null, '', errorDirection[0]);\n var element = getElement(shapeOption.id);\n var previousDirection = element ? element.getAttribute('d') : null;\n series.errorBarElement.appendChild(this.chart.renderer.drawPath(shapeOption));\n pathAnimation(element, errorDirection[0], redraw, previousDirection);\n var capOption = new PathOption(capId, '', errorBarCap.width, (errorbar.errorBarCap.color ? errorBarCap.color : (errorbar.errorBarColorMapping ? point.errorBarColor : errorbar.color || this.chart.themeStyle.errorBar)), null, '', errorDirection[1]);\n element = getElement(capOption.id);\n previousDirection = element ? element.getAttribute('d') : null;\n appendChildElement(this.chart.enableCanvas, series.errorBarElement, this.chart.renderer.drawPath(capOption), redraw);\n pathAnimation(element, errorDirection[1], redraw, previousDirection);\n }\n }\n };\n // path calculation for error bar\n ErrorBar.prototype.findLocation = function (point, series, isInverted, x1, y1) {\n var errorbar = series.errorBar;\n var direction = errorbar.direction;\n var location = [];\n var yValue = series.type.indexOf('Stacking') > -1 ? series.stackedValues.endValues[point.index] :\n (series.seriesType === 'HighLow' || series.seriesType === 'HighLowOpenClose') ? (series.points[point.index].high) :\n point.yValue;\n var startPoint = getPoint(point.xValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = point.horizontalPositiveError : x1 : 0), yValue + ((direction === 'Plus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = point.verticalPositiveError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(startPoint);\n if (series.isRectSeries) {\n var midPoint = point.symbolLocations[0];\n location.push(midPoint);\n }\n else {\n var midPoint = getPoint(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted);\n location.push(midPoint);\n }\n var endPoint = getPoint(point.xValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Horizontal' || errorbar.mode === 'Both')) ? x1 = point.horizontalNegativeError : x1 : 0), yValue - ((direction === 'Minus' || direction === 'Both') ? (errorbar.type === 'Custom' &&\n (errorbar.mode === 'Vertical' || errorbar.mode === 'Both')) ? y1 = point.verticalNegativeError : y1 : 0), series.xAxis, series.yAxis, isInverted);\n location.push(endPoint);\n // calculate error height for datalabel position alignment\n point.error = (errorbar.mode === 'Vertical') ? errorbar.verticalError : errorbar.horizontalError;\n this.negativeHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[1].x - location[2].x) :\n (location[2].y - location[1].y)) : 0;\n this.positiveHeight = (errorbar.mode === 'Vertical' || errorbar.mode === 'Both') ? (isInverted ? (location[0].x - location[1].x) :\n (location[1].y - location[0].y)) : 0;\n return this.getErrorDirection(location[0], location[1], location[2], series, isInverted);\n };\n //calculations for eror bar types\n ErrorBar.prototype.calculateFixedValue = function (point, series, isInverted, errorX, errorY) {\n // const errorbar: ErrorBarSettingsModel = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculatePercentageValue = function (point, series, isInverted, errorX, errorY) {\n errorX = (errorX / 100) * point.xValue;\n errorY = (errorY / 100) * point.yValue;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardDeviationValue = function (point, series, isInverted, errorX, errorY) {\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = errorX * (getMean.horizontalSquareRoot + getMean.horizontalMean);\n errorY = errorY * (getMean.verticalSquareRoot + getMean.verticalMean);\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateStandardErrorValue = function (point, series, isInverted, errorX, errorY) {\n var length = series.points.length;\n var getMean = this.meanCalculation(series, series.errorBar.mode);\n errorX = ((errorX * getMean.horizontalSquareRoot) / Math.sqrt(length));\n errorY = ((errorY * getMean.verticalSquareRoot) / Math.sqrt(length));\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.calculateCustomValue = function (point, series, isInverted, errorX, errorY) {\n // const errorbar: ErrorBarSettingsModel = series.errorBar;\n return this.findLocation(point, series, isInverted, errorX, errorY);\n };\n ErrorBar.prototype.getHorizontalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += 'M ' + start.x + ' ' + mid.y + ' L ' + end.x + ' ' + mid.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? 'M ' + (start.x) + ' ' + (mid.y - capLength) + ' L '\n + (start.x) + ' ' + (mid.y + capLength) : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? 'M ' + (end.x) + ' ' + (mid.y - capLength) + ' L '\n + (end.x) + ' ' + (mid.y + capLength) : ' ';\n return [path, capDirection];\n };\n ErrorBar.prototype.getVerticalDirection = function (start, mid, end, direction, errorMode, capLength) {\n var path = '';\n var capDirection = '';\n path += 'M ' + mid.x + ' ' + start.y + ' L ' + mid.x + ' ' + end.y;\n capDirection += (direction === 'Plus' || direction === 'Both') ? 'M ' + (mid.x - capLength) + ' ' + start.y + ' L '\n + (mid.x + capLength) + ' ' + start.y : '';\n capDirection += (direction === 'Minus' || direction === 'Both') ? 'M ' + (mid.x - capLength) + ' ' + end.y + ' L '\n + (mid.x + capLength) + ' ' + end.y : '';\n return [path, capDirection];\n };\n ErrorBar.prototype.getBothDirection = function (start, mid, end, direction, errorMode, capLength) {\n var capDirection = '';\n var path = '';\n var pathH = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n var pathV = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n path = pathH[0].concat(pathV[0]);\n capDirection = pathH[1].concat(pathV[1]);\n return [path, capDirection];\n };\n ErrorBar.prototype.getErrorDirection = function (start, mid, end, series, isInverted) {\n var direction = series.errorBar.direction;\n var mode = series.errorBar.mode;\n var capLength = series.errorBar.errorBarCap.length;\n var paths;\n var errorMode = mode;\n switch (mode) {\n case 'Both':\n errorMode = mode;\n break;\n case 'Horizontal':\n errorMode = (isInverted) ? 'Vertical' : mode;\n break;\n case 'Vertical':\n errorMode = (isInverted) ? 'Horizontal' : mode;\n break;\n }\n switch (errorMode) {\n case 'Horizontal':\n paths = this.getHorizontalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Vertical':\n paths = this.getVerticalDirection(start, mid, end, direction, errorMode, capLength);\n break;\n case 'Both':\n paths = this.getBothDirection(start, mid, end, direction, errorMode, capLength);\n break;\n }\n return [paths[0], paths[1]];\n };\n // mean calculation for standard deviation and standard error\n ErrorBar.prototype.meanCalculation = function (series, mode) {\n var sumOfX = 0;\n var sumOfY = 0;\n var verticalMean = 0;\n var horizontalMean = 0;\n var length = series.points.length;\n switch (mode) {\n case 'Vertical':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n break;\n case 'Horizontal':\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n break;\n case 'Both':\n sumOfY = sum(series.yData);\n verticalMean = sumOfY / length;\n sumOfX = sum(series.xData);\n horizontalMean = sumOfX / length;\n }\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (mode === 'Vertical') {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n }\n else if (mode === 'Horizontal') {\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n else {\n sumOfY = sumOfY + Math.pow((point.yValue - verticalMean), 2);\n sumOfX = sumOfX + Math.pow((point.xValue - horizontalMean), 2);\n }\n }\n var verStandardMean = sumOfY / (length - 1);\n var verSquareRoot = Math.sqrt(sumOfY / (length - 1));\n var horStandardMean = sumOfX / (length - 1);\n var horSquareRoot = Math.sqrt(sumOfX / (length - 1));\n return new Mean(verStandardMean, verSquareRoot, horStandardMean, horSquareRoot, verticalMean, horizontalMean);\n };\n ErrorBar.prototype.createElement = function (series, chart) {\n // const explodeValue: number = 5;\n var transform = chart.chartAreaType === 'Cartesian' ?\n 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n var markerHeight = (series.marker.height) / 2;\n var markerWidth = (series.marker.width) / 2;\n if (chart.chartAreaType === 'Cartesian') {\n var options = new RectOption(chart.element.id + '_ChartErrorBarClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: -markerWidth, y: -markerHeight,\n width: series.clipRect.width + markerWidth * 2, height: series.clipRect.height + markerHeight * 2\n });\n series.errorBarElement = chart.renderer.createGroup({\n 'id': chart.element.id + 'ErrorBarGroup' + series.index,\n 'transform': transform,\n 'clip-path': 'url(#' + chart.element.id + '_ChartErrorBarClipRect_' + series.index + ')'\n });\n series.errorBarElement.appendChild(appendClipElement(chart.redraw, options, chart.renderer));\n }\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n ErrorBar.prototype.doErrorBarAnimation = function (series) {\n var errorBarElements = series.errorBarElement.childNodes;\n if (!errorBarElements) {\n return null;\n }\n var delay = series.animation.delay + ((series.animation.duration === 0 && animationMode === 'Enable') ? 1000 : series.animation.duration);\n var j = 1;\n while (j < errorBarElements.length) {\n for (var i = 0; i < series.points.length; i++) {\n if (!series.points[i].symbolLocations[0]) {\n continue;\n }\n errorBarElements[j].style.visibility = 'hidden';\n templateAnimate(errorBarElements[j], delay, 350, series.chart.requireInvertedAxis ? 'SlideLeftIn' : 'SlideBottomIn', false);\n }\n j++;\n }\n };\n /**\n * Get module name.\n */\n ErrorBar.prototype.getModuleName = function () {\n // Returns the module name\n return 'ErrorBar';\n };\n /**\n * To destroy the errorBar for series.\n *\n * @returns {void}\n * @private\n */\n ErrorBar.prototype.destroy = function () {\n // Destroy method performed here\n };\n return ErrorBar;\n}());\nexport { ErrorBar };\n","import { Series, Points } from '../series/chart-series';\nimport { findClipRect, RectOption } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `Trendline` module is used to render 6 types of trendlines in chart.\n */\nvar Trendlines = /** @class */ (function () {\n function Trendlines() {\n }\n /**\n * Initializes the series collection for the specified trendline in the chart.\n *\n * @param {Trendline} trendline - The trendline for which the series collection is initialized.\n * @param {Chart} chart - The chart instance.\n * @returns {void}\n */\n Trendlines.prototype.initSeriesCollection = function (trendline, chart) {\n var trendLineSeries = new Series(trendline, 'targetSeries', {}, true);\n if (trendline.type === 'Linear' || trendline.type === 'MovingAverage') {\n trendLineSeries.type = 'Line';\n }\n else {\n trendLineSeries.type = 'Spline';\n }\n this.setSeriesProperties(trendLineSeries, trendline, trendline.type, trendline.fill, trendline.width, chart);\n };\n /**\n * Sets the properties for the specified series related to the specified trendline.\n *\n * @param {Series} series - The series to which properties are applied.\n * @param {Trendline} trendline - The trendline associated with the series.\n * @param {string} name - The name of the series.\n * @param {string} fill - The fill color of the series.\n * @param {number} width - The width of the series.\n * @param {Chart} chart - The chart instance.\n * @returns {void}\n */\n Trendlines.prototype.setSeriesProperties = function (series, trendline, name, fill, width, chart) {\n series.name = trendline.name;\n series.xName = 'x';\n series.yName = 'y';\n series.fill = fill || 'blue';\n series.width = width;\n series.dashArray = trendline.dashArray;\n series.clipRectElement = trendline.clipRectElement;\n series.points = [];\n series.enableTooltip = trendline.enableTooltip;\n series.index = trendline.index;\n series.sourceIndex = trendline.sourceIndex;\n series.interior = series.fill;\n series.animation = trendline.animation;\n series.legendShape = 'HorizontalLine';\n series.marker = trendline.marker;\n series.category = 'TrendLine';\n series.chart = chart;\n series.xMin = Infinity;\n series.xMax = -Infinity;\n series.yMin = Infinity;\n series.yMax = -Infinity;\n series.xData = [];\n series.yData = [];\n trendline.targetSeries = series;\n if (chart.isBlazor) {\n trendline.targetSeries.border = {}; // To avoid console error in blazor\n trendline.targetSeries.connector = {}; // To avoid console error in blazor\n }\n };\n /**\n * Creates elements for the specified trendline and adds them to the chart.\n *\n * @param {Chart} chart - The chart instance.\n * @param {Trendline} trendline - The trendline for which elements are created.\n * @param {number} index - The index of the trendline.\n * @param {Element} element - The parent element to which trendline elements are added.\n * @param {Element} clipRectElement - The clip rect element associated with the chart.\n * @returns {void}\n */\n Trendlines.prototype.createTrendLineElements = function (chart, trendline, index, element, clipRectElement) {\n trendline.trendLineElement = element;\n trendline.targetSeries.clipRectElement = clipRectElement;\n trendline.targetSeries.seriesElement = element;\n if (chart.trendLineElements) {\n chart.trendLineElements.appendChild(trendline.trendLineElement);\n }\n };\n /**\n * Retrieves the data point at the specified index from the series.\n *\n * @param {Object} x - The x-value of the data point.\n * @param {Object} y - The y-value of the data point.\n * @param {Series} series - The series from which to retrieve the data point.\n * @param {number} index - The index of the data point in the series.\n * @returns {Points} - The data point object.\n */\n Trendlines.prototype.getDataPoint = function (x, y, series, index) {\n var trendPoint = new Points();\n trendPoint.x = series.xAxis.valueType === 'DateTime' ? new Date(Number(x)) : x;\n trendPoint.y = y;\n trendPoint.xValue = Number(x);\n trendPoint.color = series.fill;\n trendPoint.index = index;\n trendPoint.yValue = Number(y);\n trendPoint.visible = true;\n series.xMin = Math.min(series.xMin, trendPoint.xValue);\n series.yMin = Math.min(series.yMin, trendPoint.yValue);\n series.xMax = Math.max(series.xMax, trendPoint.xValue);\n series.yMax = Math.max(series.yMax, trendPoint.yValue);\n series.xData.push(trendPoint.xValue);\n return trendPoint;\n };\n /**\n * Finds the slope and intercept for the trendline.\n *\n * @param {number[]} xValues - The array of x-values.\n * @param {number[]} yValues - The array of y-values.\n * @param {Trendline} trendline - The trendline configuration.\n * @param {Points[]} points - The data points for the trendline.\n * @returns {SlopeIntercept} - The slope and intercept values.\n */\n Trendlines.prototype.findSlopeIntercept = function (xValues, yValues, trendline, points) {\n var xAvg = 0;\n var yAvg = 0;\n var xyAvg = 0;\n var xxAvg = 0;\n var index = 0;\n var slope = 0;\n var intercept = 0;\n while (index < points.length) {\n // To fix trendline not rendered issue while Nan Value is provided for y values.\n if (isNaN(yValues[index])) {\n yValues[index] = ((yValues[index - 1] + yValues[index + 1]) / 2);\n }\n xAvg += xValues[index];\n yAvg += yValues[index];\n xyAvg += xValues[index] * yValues[index];\n xxAvg += xValues[index] * xValues[index];\n index++;\n }\n var type = trendline.type;\n if (trendline.intercept && (type === 'Linear' || type === 'Exponential')) {\n intercept = trendline.intercept;\n switch (type) {\n case 'Linear':\n slope = ((xyAvg) - (trendline.intercept * xAvg)) / xxAvg;\n break;\n case 'Exponential':\n slope = ((xyAvg) - (Math.log(Math.abs(trendline.intercept)) * xAvg)) / xxAvg;\n break;\n }\n }\n else {\n slope = ((points.length * xyAvg) - (xAvg * yAvg)) / ((points.length * xxAvg) - (xAvg * xAvg));\n slope = (type === 'Linear' ? slope : Math.abs(slope));\n if (type === 'Exponential' || type === 'Power') {\n intercept = Math.exp((yAvg - (slope * xAvg)) / points.length);\n }\n else {\n intercept = (yAvg - (slope * xAvg)) / points.length;\n }\n }\n return { slope: slope, intercept: intercept };\n };\n /**\n * Initializes the data source for the trendline.\n *\n * @param {Trendline} trendline - The trendline configuration.\n * @returns {void}\n */\n Trendlines.prototype.initDataSource = function (trendline) {\n var points = trendline.points;\n if (points && points.length) {\n //prepare data\n var trendlineSeries = trendline.targetSeries;\n switch (trendline.type) {\n case 'Linear':\n this.setLinearRange(points, trendline, trendlineSeries);\n break;\n case 'Exponential':\n this.setExponentialRange(points, trendline, trendlineSeries);\n break;\n case 'MovingAverage':\n this.setMovingAverageRange(points, trendline, trendlineSeries);\n break;\n case 'Polynomial':\n this.setPolynomialRange(points, trendline, trendlineSeries);\n break;\n case 'Power':\n this.setPowerRange(points, trendline, trendlineSeries);\n break;\n case 'Logarithmic':\n this.setLogarithmicRange(points, trendline, trendlineSeries);\n break;\n }\n if (trendline.type !== 'Linear' && trendline.type !== 'MovingAverage') {\n trendlineSeries.chart.splineSeriesModule.findSplinePoint(trendlineSeries);\n }\n }\n };\n /**\n * Sets the range for an exponential trendline.\n *\n * @param {Points[]} points - The data points of the series.\n * @param {Trendline} trendline - The exponential trendline configuration.\n * @param {Series} series - The series to which the trendline belongs.\n * @returns {void}\n */\n Trendlines.prototype.setExponentialRange = function (points, trendline, series) {\n var xValue = [];\n var yValue = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n var yDataValue = point.yValue ? Math.log(point.yValue) : 0;\n xValue.push(point.xValue);\n yValue.push(yDataValue);\n index++;\n }\n var slopeIntercept = this.findSlopeIntercept(xValue, yValue, trendline, points);\n series.points = this.getExponentialPoints(trendline, points, xValue, yValue, series, slopeIntercept);\n };\n /**\n * Sets the range for a logarithmic trendline.\n *\n * @param {Points[]} points - The data points of the series.\n * @param {Trendline} trendline - The logarithmic trendline configuration.\n * @param {Series} series - The series to which the trendline belongs.\n * @returns {void}\n */\n Trendlines.prototype.setLogarithmicRange = function (points, trendline, series) {\n var xLogValue = [];\n var yLogValue = [];\n var xPointsLgr = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n var xDataValue = point.xValue ? Math.log(point.xValue) : 0;\n xPointsLgr.push(point.xValue);\n xLogValue.push(xDataValue);\n yLogValue.push(point.yValue);\n index++;\n }\n var slopeIntercept = this.findSlopeIntercept(xLogValue, yLogValue, trendline, points);\n series.points = this.getLogarithmicPoints(trendline, points, xPointsLgr, yLogValue, series, slopeIntercept);\n };\n /**\n * Sets the range for a polynomial trendline.\n *\n * @param {Points[]} points - The data points of the series.\n * @param {Trendline} trendline - The polynomial trendline configuration.\n * @param {Series} series - The series to which the trendline belongs.\n * @returns {void}\n */\n Trendlines.prototype.setPolynomialRange = function (points, trendline, series) {\n var xPolyValues = [];\n var yPolyValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xPolyValues.push(point.xValue);\n yPolyValues.push(point.yValue);\n index++;\n }\n series.points = this.getPolynomialPoints(trendline, points, xPolyValues, yPolyValues, series);\n };\n /**\n * Sets the range for a power trendline.\n *\n * @param {Points[]} points - The data points of the series.\n * @param {Trendline} trendline - The power trendline configuration.\n * @param {Series} series - The series to which the trendline belongs.\n * @returns {void}\n */\n Trendlines.prototype.setPowerRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var powerPoints = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n var xDataValue = point.xValue ? Math.log(point.xValue) : 0;\n var yDataValue = point.yValue ? Math.log(point.yValue) : 0;\n powerPoints.push(point.xValue);\n xValues.push(xDataValue);\n yValues.push(yDataValue);\n index++;\n }\n var slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getPowerPoints(trendline, points, powerPoints, yValues, series, slopeIntercept);\n };\n /**\n * Sets the range for a linear trendline.\n *\n * @param {Points[]} points - The data points of the series.\n * @param {Trendline} trendline - The linear trendline configuration.\n * @param {Series} series - The series to which the trendline belongs.\n * @returns {void}\n */\n Trendlines.prototype.setLinearRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xValues.push(point.xValue);\n yValues.push(point.yValue);\n index++;\n }\n var slopeIntercept = this.findSlopeIntercept(xValues, yValues, trendline, points);\n series.points = this.getLinearPoints(trendline, points, xValues, yValues, series, slopeIntercept);\n };\n /**\n * Sets the range for a moving average trendline.\n *\n * @param {Points[]} points - The data points of the series.\n * @param {Trendline} trendline - The moving average trendline configuration.\n * @param {Series} series - The series to which the trendline belongs.\n * @returns {void}\n */\n Trendlines.prototype.setMovingAverageRange = function (points, trendline, series) {\n var xValues = [];\n var yValues = [];\n var xAvgValues = [];\n var index = 0;\n while (index < points.length) {\n var point = points[index];\n xAvgValues.push(point.xValue);\n xValues.push(index + 1);\n yValues.push(point.yValue);\n index++;\n }\n series.points = this.getMovingAveragePoints(trendline, points, xAvgValues, yValues, series);\n };\n /**\n * Calculates the points for a logarithmic trendline.\n *\n * @param {Trendline} trendline - The logarithmic trendline configuration.\n * @param {Points[]} points - The data points of the series.\n * @param {number[]} xValues - The x values of the data points.\n * @param {number[]} yValues - The y values of the data points.\n * @param {Series} series - The series to which the trendline belongs.\n * @param {SlopeIntercept} slopeInterceptLog - The slope and intercept of the logarithmic trendline.\n * @returns {Points[]} - The calculated points for the logarithmic trendline.\n */\n Trendlines.prototype.getLogarithmicPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLog) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1Log = xValues[0] - trendline.backwardForecast;\n var x1 = x1Log ? Math.log(x1Log) : 0;\n var y1Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * x1);\n var x2Log = xValues[midPoint - 1];\n var x2 = x2Log ? Math.log(x2Log) : 0;\n var y2Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * x2);\n var x3Log = xValues[xValues.length - 1] + trendline.forwardForecast;\n var x3 = x3Log ? Math.log(x3Log) : 0;\n var y3Log = slopeInterceptLog.intercept + (slopeInterceptLog.slope * x3);\n pts.push(this.getDataPoint(x1Log, y1Log, series, pts.length));\n pts.push(this.getDataPoint(x2Log, y2Log, series, pts.length));\n pts.push(this.getDataPoint(x3Log, y3Log, series, pts.length));\n return pts;\n };\n /**\n * Calculates the points for a power trendline.\n *\n * @param {Trendline} trendline - The power trendline configuration.\n * @param {Points[]} points - The data points of the series.\n * @param {number[]} xValues - The x values of the data points.\n * @param {number[]} yValues - The y values of the data points.\n * @param {Series} series - The series to which the trendline belongs.\n * @param {SlopeIntercept} slopeInterceptPower - The slope and intercept of the power trendline.\n * @returns {Points[]} - The calculated points for the power trendline.\n */\n Trendlines.prototype.getPowerPoints = function (trendline, points, xValues, yValues, series, slopeInterceptPower) {\n var midPoint = Math.round((points.length / 2));\n var pts = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n x1 = x1 > -1 ? x1 : 0;\n var y1 = slopeInterceptPower.intercept * Math.pow(x1, slopeInterceptPower.slope);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptPower.intercept * Math.pow(x2, slopeInterceptPower.slope);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptPower.intercept * Math.pow(x3, slopeInterceptPower.slope);\n pts.push(this.getDataPoint(x1, y1, series, pts.length));\n pts.push(this.getDataPoint(x2, y2, series, pts.length));\n pts.push(this.getDataPoint(x3, y3, series, pts.length));\n return pts;\n };\n /**\n * Calculates the points for a polynomial trendline.\n *\n * @param {Trendline} trendline - The polynomial trendline configuration.\n * @param {Points[]} points - The data points of the series.\n * @param {number[]} xValues - The x values of the data points.\n * @param {number[]} yValues - The y values of the data points.\n * @param {Series} series - The series to which the trendline belongs.\n * @returns {Points[]} - The calculated points for the polynomial trendline.\n */\n Trendlines.prototype.getPolynomialPoints = function (trendline, points, xValues, yValues, series) {\n var pts = [];\n var polynomialOrder = points.length <= trendline.polynomialOrder ? points.length : trendline.polynomialOrder;\n polynomialOrder = Math.max(2, polynomialOrder);\n polynomialOrder = Math.min(6, polynomialOrder);\n trendline.polynomialOrder = polynomialOrder;\n trendline.polynomialSlopes = [];\n trendline.polynomialSlopes.length = trendline.polynomialOrder + 1;\n var index = 0;\n while (index < xValues.length) {\n var xVal = xValues[index];\n var yVal = yValues[index];\n var subIndex = 0;\n while (subIndex <= trendline.polynomialOrder) {\n if (!trendline.polynomialSlopes[subIndex]) {\n trendline.polynomialSlopes[subIndex] = 0;\n }\n trendline.polynomialSlopes[subIndex] += Math.pow(xVal, subIndex) * yVal;\n ++subIndex;\n }\n index++;\n }\n var numArray = [];\n numArray.length = 1 + 2 * trendline.polynomialOrder;\n var matrix = [];\n matrix.length = trendline.polynomialOrder + 1;\n var newIndex = 0;\n while (newIndex < (trendline.polynomialOrder + 1)) {\n matrix[newIndex] = [];\n matrix[newIndex].length = 3;\n newIndex++;\n }\n var nIndex = 0;\n while (nIndex < xValues.length) {\n var d = xValues[nIndex];\n var num2 = 1.0;\n var nIndex2 = 0;\n while (nIndex2 < numArray.length) {\n if (!numArray[nIndex2]) {\n numArray[nIndex2] = 0;\n }\n numArray[nIndex2] += num2;\n num2 *= d;\n ++nIndex2;\n }\n ++nIndex;\n }\n var nnIndex = 0;\n while (nnIndex <= trendline.polynomialOrder) {\n var nnIndex2 = 0;\n while (nnIndex2 <= trendline.polynomialOrder) {\n matrix[nnIndex][nnIndex2] = numArray[nnIndex + nnIndex2];\n ++nnIndex2;\n }\n ++nnIndex;\n }\n if (!this.gaussJordanElimination(matrix, trendline.polynomialSlopes)) {\n trendline.polynomialSlopes = null;\n }\n pts = this.getPoints(trendline, points, xValues, series);\n return pts;\n };\n /**\n * Calculates the points for a moving average trendline.\n *\n * @param {Trendline} trendline - The moving average trendline configuration.\n * @param {Points[]} points - The data points of the series.\n * @param {number[]} xValues - The x values of the data points.\n * @param {number[]} yValues - The y values of the data points.\n * @param {Series} series - The series to which the trendline belongs.\n * @returns {Points[]} - The calculated points for the moving average trendline.\n */\n Trendlines.prototype.getMovingAveragePoints = function (trendline, points, xValues, yValues, series) {\n var pts = [];\n var period = trendline.period >= points.length ? points.length - 1 : trendline.period;\n period = Math.max(2, period);\n var index = 0;\n var y;\n var x;\n var count;\n var nullCount;\n while (index < points.length - 1) {\n y = count = nullCount = 0;\n for (var j = index; count < period; j++) {\n count++;\n y += yValues[j];\n }\n y = period - nullCount < 0 ? null : y ? y / (period - nullCount) : y;\n if (!isNullOrUndefined(y) && !isNaN(y)) {\n x = xValues[period - 1 + index];\n pts.push(this.getDataPoint(x, y, series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Calculates the points for a linear trendline.\n *\n * @param {Trendline} trendline - The linear trendline configuration.\n * @param {Points[]} points - The data points of the series.\n * @param {number[]} xValues - The x values of the data points.\n * @param {number[]} yValues - The y values of the data points.\n * @param {Series} series - The series to which the trendline belongs.\n * @param {SlopeIntercept} slopeInterceptLinear - The slope and intercept of the linear trendline.\n * @returns {Points[]} - The calculated points for the linear trendline.\n */\n Trendlines.prototype.getLinearPoints = function (trendline, points, xValues, yValues, series, slopeInterceptLinear) {\n var pts = [];\n var max = xValues.indexOf(Math.max.apply(null, xValues));\n var min = xValues.indexOf(Math.min.apply(null, xValues));\n var x1Linear = xValues[min] - trendline.backwardForecast;\n var y1Linear = slopeInterceptLinear.slope * x1Linear + slopeInterceptLinear.intercept;\n var x2Linear = xValues[max] + trendline.forwardForecast;\n var y2Linear = slopeInterceptLinear.slope * x2Linear + slopeInterceptLinear.intercept;\n pts.push(this.getDataPoint(x1Linear, y1Linear, series, pts.length));\n pts.push(this.getDataPoint(x2Linear, y2Linear, series, pts.length));\n return pts;\n };\n /**\n * Calculates the points for an exponential trendline.\n *\n * @param {Trendline} trendline - The exponential trendline configuration.\n * @param {Points[]} points - The data points of the series.\n * @param {number[]} xValues - The x values of the data points.\n * @param {number[]} yValues - The y values of the data points.\n * @param {Series} series - The series to which the trendline belongs.\n * @param {SlopeIntercept} slopeInterceptExp - The slope and intercept of the exponential trendline.\n * @returns {Points[]} - The calculated points for the exponential trendline.\n */\n Trendlines.prototype.getExponentialPoints = function (trendline, points, xValues, yValues, series, slopeInterceptExp) {\n var midPoint = Math.round((points.length / 2));\n var ptsExp = [];\n var x1 = xValues[0] - trendline.backwardForecast;\n var y1 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x1);\n var x2 = xValues[midPoint - 1];\n var y2 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x2);\n var x3 = xValues[xValues.length - 1] + trendline.forwardForecast;\n var y3 = slopeInterceptExp.intercept * Math.exp(slopeInterceptExp.slope * x3);\n ptsExp.push(this.getDataPoint(x1, y1, series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x2, y2, series, ptsExp.length));\n ptsExp.push(this.getDataPoint(x3, y3, series, ptsExp.length));\n return ptsExp;\n };\n /**\n * Calculates the points for the specified type of trendline.\n *\n * @param {Trendline} trendline - The trendline configuration.\n * @param {Points[]} points - The data points of the series.\n * @param {number[]} xValues - The x values of the data points.\n * @param {Series} series - The series to which the trendline belongs.\n * @returns {Points[]} - The calculated points for the trendline.\n */\n Trendlines.prototype.getPoints = function (trendline, points, xValues, series) {\n var polynomialSlopes = trendline.polynomialSlopes;\n var pts = [];\n var x1 = 1;\n var index = 1;\n var xValue;\n var yValue;\n // We have to sort the points in ascending order. Because, the data source of the series may be random order.\n points.sort(function (a, b) { return a.xValue - b.xValue; });\n xValues.sort(function (a, b) { return a - b; });\n while (polynomialSlopes !== null && index <= polynomialSlopes.length) {\n if (index === 1) {\n xValue = xValues[0] - trendline.backwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, series, pts.length));\n }\n else if (index === polynomialSlopes.length) {\n xValue = xValues[points.length - 1] + trendline.forwardForecast;\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, series, pts.length));\n }\n else {\n x1 += (points.length + (series.xAxis.valueType === 'DateTime' ? index : trendline.forwardForecast)) / polynomialSlopes.length;\n xValue = xValues[parseInt(x1.toString(), 10) - 1];\n yValue = this.getPolynomialYValue(polynomialSlopes, xValue);\n pts.push(this.getDataPoint(xValue, yValue, series, pts.length));\n }\n index++;\n }\n return pts;\n };\n /**\n * Calculates the y value for the specified x value using polynomial regression.\n *\n * @param {number[]} slopes - The coefficients of the polynomial equation.\n * @param {number} x - The x value for which to calculate the y value.\n * @returns {number} - The calculated y value.\n */\n Trendlines.prototype.getPolynomialYValue = function (slopes, x) {\n var sum = 0;\n var index = 0;\n while (index < slopes.length) {\n sum += slopes[index] * Math.pow(x, index);\n index++;\n }\n return sum;\n };\n /**\n * Applies Gauss-Jordan elimination to solve a system of linear equations represented by a matrix.\n * Updates the coefficients of the polynomial equation.\n *\n * @param {number[][]} matrix - The matrix representing the system of linear equations.\n * @param {number[]} polynomialSlopes - The coefficients of the polynomial equation to be updated.\n * @returns {boolean} - A boolean indicating whether the elimination process was successful.\n */\n Trendlines.prototype.gaussJordanElimination = function (matrix, polynomialSlopes) {\n var length = matrix.length;\n var numArray1 = [];\n var numArray2 = [];\n var numArray3 = [];\n numArray1.length = length;\n numArray2.length = length;\n numArray3.length = length;\n var index = 0;\n while (index < length) {\n numArray3[index] = 0;\n ++index;\n }\n var index1 = 0;\n while (index1 < length) {\n var num1 = 0;\n var index2 = 0;\n var index3 = 0;\n var index4 = 0;\n while (index4 < length) {\n if (numArray3[index4] !== 1) {\n var index5 = 0;\n while (index5 < length) {\n if (numArray3[index5] === 0 && Math.abs(matrix[index4][index5]) >= num1) {\n num1 = Math.abs(matrix[index4][index5]);\n index2 = index4;\n index3 = index5;\n }\n ++index5;\n }\n }\n ++index4;\n }\n ++numArray3[index3];\n if (index2 !== index3) {\n var index4_1 = 0;\n while (index4_1 < length) {\n var num2 = matrix[index2][index4_1];\n matrix[index2][index4_1] = matrix[index3][index4_1];\n matrix[index3][index4_1] = num2;\n ++index4_1;\n }\n var num3 = polynomialSlopes[index2];\n polynomialSlopes[index2] = polynomialSlopes[index3];\n polynomialSlopes[index3] = num3;\n }\n numArray2[index1] = index2;\n numArray1[index1] = index3;\n if (matrix[index3][index3] === 0.0) {\n return false;\n }\n var num4 = 1.0 / matrix[index3][index3];\n matrix[index3][index3] = 1.0;\n var iindex4 = 0;\n while (iindex4 < length) {\n matrix[index3][iindex4] *= num4;\n ++iindex4;\n }\n polynomialSlopes[index3] *= num4;\n var iandex4 = 0;\n while (iandex4 < length) {\n if (iandex4 !== index3) {\n var num2 = matrix[iandex4][index3];\n matrix[iandex4][index3] = 0.0;\n var index5 = 0;\n while (index5 < length) {\n matrix[iandex4][index5] -= matrix[index3][index5] * num2;\n ++index5;\n }\n polynomialSlopes[iandex4] -= polynomialSlopes[index3] * num2;\n }\n ++iandex4;\n }\n ++index1;\n }\n var iindex1 = length - 1;\n while (iindex1 >= 0) {\n if (numArray2[iindex1] !== numArray1[iindex1]) {\n var iindex2 = 0;\n while (iindex2 < length) {\n var num = matrix[iindex2][numArray2[iindex1]];\n matrix[iindex2][numArray2[iindex1]] = matrix[iindex2][numArray1[iindex1]];\n matrix[iindex2][numArray1[iindex1]] = num;\n ++iindex2;\n }\n }\n --iindex1;\n }\n return true;\n };\n /**\n * Retrieves the elements required for rendering trendlines for a series in the chart.\n *\n * @param {Series} series - The series for which trendlines are to be rendered.\n * @param {Chart} chart - The chart instance.\n * @returns {void}\n */\n Trendlines.prototype.getTrendLineElements = function (series, chart) {\n findClipRect(series);\n var clipRect = series.clipRect;\n var clipRectElement = chart.renderer.drawClipPath(new RectOption(chart.element.id + '_ChartTrendlineClipRect_' + series.index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n x: 0, y: 0, width: clipRect.width,\n height: clipRect.height\n }));\n var element = chart.renderer.createGroup({\n 'id': chart.element.id + 'TrendlineSeriesGroup' + series.index,\n 'transform': 'translate(' + clipRect.x + ',' + clipRect.y + ')',\n 'clip-path': 'url(#' + chart.element.id + '_ChartTrendlineClipRect_' + series.index + ')'\n });\n //defines the clip rect element\n if (element) {\n element.appendChild(clipRectElement);\n }\n for (var _i = 0, _a = series.trendlines; _i < _a.length; _i++) {\n var trendline = _a[_i];\n this.createTrendLineElements(chart, trendline, trendline.index, element, clipRectElement);\n }\n };\n /**\n * To destroy the trendline.\n *\n * @returns {void}\n */\n Trendlines.prototype.destroy = function () {\n /**\n * Destroys the Linear Trendline.\n */\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n Trendlines.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series.\n */\n return 'TrendLine';\n };\n return Trendlines;\n}());\nexport { Trendlines };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartLocation, ControlPoints } from '../../common/utils/helper';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { LineBase } from './line-base';\n/**\n * Base for spline type series.\n */\nvar SplineBase = /** @class */ (function (_super) {\n __extends(SplineBase, _super);\n /**\n * Initializes the spline rendering module.\n *\n * @param {Chart} [chartModule] - Specifies the chart instance.\n */\n function SplineBase(chartModule) {\n var _this = _super.call(this, chartModule) || this;\n _this.splinePoints = [];\n _this.lowSplinePoints = [];\n return _this;\n }\n /**\n * Finds the spline points for the series.\n *\n * @param {Series} series - The series for which spline points need to be found.\n * @returns {void}\n */\n SplineBase.prototype.findSplinePoint = function (series) {\n var value;\n var lowPoints;\n var realPoints = [];\n var points = [];\n var point;\n var pointIndex = 0;\n var negativePoint = false;\n realPoints = this.filterEmptyPoints(series);\n for (var i = 0; i < realPoints.length; i++) {\n point = realPoints[i];\n if (point.x === null || point.x === '') {\n continue;\n }\n else {\n point.index = pointIndex;\n pointIndex++;\n points.push(point);\n }\n }\n var isLow = false;\n this.splinePoints = this.findSplineCoefficients(points, series, isLow);\n if (series.type === 'SplineRangeArea') {\n isLow = !isLow;\n this.lowSplinePoints = this.findSplineCoefficients(points, series, isLow);\n }\n if (points.length > 1) {\n series.drawPoints = [];\n series.lowDrawPoints = [];\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point_1 = points_1[_i];\n negativePoint = negativePoint ? negativePoint : point_1.yValue < 0;\n if (point_1.index !== 0) {\n var previous = this.getPreviousIndex(points, point_1.index - 1, series);\n if (series.type === 'SplineRangeArea') {\n points[previous].yValue = points[previous].high > points[previous].low ?\n points[previous].high : points[previous].low;\n point_1.yValue = point_1.high > point_1.low ? point_1.high : point_1.low;\n }\n value = this.getControlPoints(points[previous], point_1, this.splinePoints[previous], this.splinePoints[point_1.index], series);\n series.drawPoints.push(value);\n if (series.type === 'SplineRangeArea') {\n points[previous].yValue = points[previous].low < points[previous].high ?\n points[previous].low : points[previous].high;\n point_1.yValue = point_1.low < point_1.high ? point_1.low : point_1.high;\n lowPoints = this.getControlPoints(points[previous], point_1, this.lowSplinePoints[previous], this.lowSplinePoints[point_1.index], series);\n series.lowDrawPoints.push(lowPoints);\n }\n // fix for Y-Axis of Spline chart not adjusting scale to suit dataSource issue\n var delta = series.yMax - series.yMin;\n if (point_1.yValue && value.controlPoint1.y && value.controlPoint2.y && delta > 1) {\n series.yMin = Math.min(series.yMin, point_1.yValue, value.controlPoint1.y, value.controlPoint2.y);\n series.yMax = Math.ceil(Math.max(series.yMax, point_1.yValue, value.controlPoint1.y, value.controlPoint2.y));\n series.yMin = series.yAxis.valueType !== 'Logarithmic' ? Math.floor(series.yMin) : series.yMin;\n }\n }\n }\n if (!negativePoint && series.yMin < 0) {\n series.yMin = 0;\n }\n if (series.chart.chartAreaType === 'PolarRadar' && series.isClosed) {\n value = this.getControlPoints({ xValue: points[points.length - 1].xValue, yValue: points[points.length - 1].yValue }, { xValue: points[points.length - 1].xValue + 1, yValue: points[0].yValue }, this.splinePoints[0], this.splinePoints[points[points.length - 1].index], series);\n series.drawPoints.push(value);\n }\n }\n };\n SplineBase.prototype.getPreviousIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i > -1) {\n i = i - 1;\n }\n return i;\n };\n SplineBase.prototype.getNextIndex = function (points, i, series) {\n if (series.emptyPointSettings.mode !== 'Drop') {\n return i;\n }\n while (isNullOrUndefined(points[i]) && i < points.length) {\n i = i + 1;\n }\n return i;\n };\n SplineBase.prototype.filterEmptyPoints = function (series, seriesPoints) {\n if (series.emptyPointSettings.mode !== 'Drop' && this.isPointInRange(series.points)) {\n return seriesPoints ? seriesPoints : series.points;\n }\n var points = seriesPoints ? seriesPoints : extend([], series.points, null, true);\n for (var i = 0; i < points.length; i++) {\n points[i].index = i;\n if (points[i].isEmpty) {\n points[i].symbolLocations = [];\n points[i].regions = [];\n points.splice(i, 1);\n i--;\n }\n }\n return points;\n };\n /**\n * Checks if the data points are within the range.\n *\n * @param {Points[]} points - The data points to check.\n * @returns {boolean} True if the data points are within the range, false otherwise.\n */\n SplineBase.prototype.isPointInRange = function (points) {\n for (var _i = 0, points_2 = points; _i < points_2.length; _i++) {\n var point = points_2[_i];\n if (!point.isPointInRange) {\n return false;\n }\n }\n return true;\n };\n /**\n * Finds the spline coefficients based on the type of spline interpolation.\n *\n * @param {Points[]} points - The data points for spline interpolation.\n * @param {Series} series - The series associated with the data points.\n * @param {boolean} [isLow] - Indicates whether to calculate the lower bound. Default is false.\n * @returns {number[]} The calculated coefficients.\n * @private\n */\n SplineBase.prototype.findSplineCoefficients = function (points, series, isLow) {\n var ySpline = [];\n var ySplineDuplicate = [];\n var cardinalSplineTension = series.cardinalSplineTension ? series.cardinalSplineTension : 0.5;\n // cardinalSplineTension = cardinalSplineTension < 0 ? 0 : cardinalSplineTension > 1 ? 1 : cardinalSplineTension;\n if (cardinalSplineTension < 0) {\n cardinalSplineTension = 0;\n }\n else if (cardinalSplineTension > 1) {\n cardinalSplineTension = 1;\n }\n switch (series.splineType) {\n case 'Monotonic':\n ySpline = this.monotonicSplineCoefficients(points, series, isLow);\n break;\n case 'Cardinal':\n ySpline = this.cardinalSplineCofficients(points, series);\n break;\n default:\n if (series.splineType === 'Clamped') {\n ySpline = this.clampedSplineCofficients(points, series, isLow);\n }\n else {\n // assigning the first and last value as zero\n ySpline[0] = ySplineDuplicate[0] = 0;\n ySpline[points.length - 1] = 0;\n }\n ySpline = this.naturalSplineCoefficients(points, series, isLow);\n break;\n }\n return ySpline;\n };\n /**\n * Calculates the coefficients for a monotonic spline interpolation.\n *\n * @param {Points[]} points - The data points for spline interpolation.\n * @param {Series} series - The series associated with the data points.\n * @param {boolean} isLow - Indicates whether to calculate the lower bound.\n * @returns {number[]} The calculated coefficients.\n * @private\n */\n SplineBase.prototype.monotonicSplineCoefficients = function (points, series, isLow) {\n var count = points.length;\n var ySpline = [];\n var dx = [];\n var dy = [];\n var slope = [];\n var interPoint;\n for (var i = 0; i < count - 1; i++) {\n if (series.type === 'SplineRangeArea') {\n if (!isLow) {\n points[i + 1].yValue = points[i + 1].high > points[i + 1].low ?\n points[i + 1].high : points[i + 1].low;\n points[i].yValue = points[i].high > points[i].low ?\n points[i].high : points[i].low;\n }\n if (isLow) {\n points[i + 1].yValue = points[i + 1].low < points[i + 1].high ? points[i + 1].low :\n points[i + 1].high;\n points[i].yValue = points[i].low < points[i].high ? points[i].low :\n points[i].high;\n }\n }\n dx[i] = points[i + 1].xValue - points[i].xValue;\n dy[i] = points[i + 1].yValue - points[i].yValue;\n slope[i] = dy[i] / dx[i];\n }\n //interpolant points\n var slopeLength = slope.length;\n // to find the first and last co-efficient value\n ySpline[0] = slope[0];\n ySpline[count - 1] = slope[slopeLength - 1];\n //to find the other co-efficient values\n for (var j = 0; j < dx.length; j++) {\n if (slopeLength > j + 1) {\n if (slope[j] * slope[j + 1] <= 0) {\n ySpline[j + 1] = 0;\n }\n else {\n interPoint = dx[j] + dx[j + 1];\n ySpline[j + 1] = 3 * interPoint / ((interPoint + dx[j + 1]) / slope[j] +\n (interPoint + dx[j]) / slope[j + 1]);\n }\n }\n }\n return ySpline;\n };\n /**\n * Calculates the coefficients for a cardinal spline interpolation.\n *\n * @param {Points[]} points - The data points for spline interpolation.\n * @param {Series} series - The series associated with the data points.\n * @returns {number[]} The calculated coefficients.\n * @private\n */\n SplineBase.prototype.cardinalSplineCofficients = function (points, series) {\n var count = points.length;\n var ySpline = [];\n var cardinalSplineTension = series.cardinalSplineTension ? series.cardinalSplineTension : 0.5;\n cardinalSplineTension = cardinalSplineTension < 0 ? 0 : cardinalSplineTension > 1 ? 1 : cardinalSplineTension;\n for (var i = 0; i < count; i++) {\n if (i === 0) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[i + 2].xValue - points[i].xValue)) : 0;\n }\n else if (i === (count - 1)) {\n ySpline[i] = (count > 2) ? (cardinalSplineTension * (points[count - 1].xValue - points[count - 3].xValue)) : 0;\n }\n else {\n ySpline[i] = (cardinalSplineTension * (points[i + 1].xValue - points[i - 1].xValue));\n }\n }\n return ySpline;\n };\n /**\n * Calculates the coefficients for a clamped spline interpolation.\n *\n * @param {Points[]} points - The data points for spline interpolation.\n * @param {Series} series - The series associated with the data points.\n * @param {boolean} isLow - Indicates whether to calculate the lower bound.\n * @returns {number[]} The calculated coefficients.\n * @private\n */\n SplineBase.prototype.clampedSplineCofficients = function (points, series, isLow) {\n var count = points.length;\n var ySpline = [];\n var ySplineDuplicate = [];\n for (var i = 0; i < count - 1; i++) {\n if (series.type === 'SplineRangeArea') {\n if (!isLow) {\n points[1].yValue = points[1].high > points[1].low ? points[1].high : points[1].low;\n points[0].yValue = points[0].high > points[0].low ? points[0].high : points[0].low;\n points[points.length - 1].yValue = points[points.length - 1].high > points[points.length - 1].low ?\n points[points.length - 1].high : points[points.length - 1].low;\n points[points.length - 2].yValue = points[points.length - 2].high > points[points.length - 2].low ?\n points[points.length - 2].high : points[points.length - 2].low;\n }\n if (isLow) {\n points[1].yValue = points[1].low < points[1].high ? points[1].low : points[1].high;\n points[0].yValue = points[0].low < points[0].high ? points[0].low : points[0].high;\n points[points.length - 1].yValue = points[points.length - 1].low < points[points.length - 1].high ?\n points[points.length - 1].low : points[points.length - 1].high;\n points[points.length - 2].yValue = points[points.length - 2].low < points[points.length - 2].high ?\n points[points.length - 2].low : points[points.length - 2].high;\n }\n }\n ySpline[0] = (3 * (points[1].yValue - points[0].yValue)) / (points[1].xValue - points[0].xValue) - 3;\n ySplineDuplicate[0] = 0.5;\n ySpline[points.length - 1] = (3 * (points[points.length - 1].yValue - points[points.length - 2].yValue)) /\n (points[points.length - 1].xValue - points[points.length - 2].xValue);\n ySpline[0] = ySplineDuplicate[0] = Math.abs(ySpline[0]) === Infinity ? 0 : ySpline[0];\n ySpline[points.length - 1] = ySplineDuplicate[points.length - 1] = Math.abs(ySpline[points.length - 1]) === Infinity ?\n 0 : ySpline[points.length - 1];\n }\n return ySpline;\n };\n /**\n * Calculates the coefficients for a natural spline interpolation.\n *\n * @param {Points[]} points - The data points for spline interpolation.\n * @param {Series} series - The series associated with the data points.\n * @param {boolean} isLow - Indicates whether to calculate the lower bound.\n * @returns {number[]} The calculated coefficients.\n * @private\n */\n SplineBase.prototype.naturalSplineCoefficients = function (points, series, isLow) {\n var count = points.length;\n var ySpline = [];\n var ySplineDuplicate = [];\n var dy1;\n var dy2;\n var coefficient1;\n var coefficient2;\n var coefficient3;\n ySpline[0] = ySplineDuplicate[0] = 0;\n ySpline[points.length - 1] = 0;\n for (var i = 1; i < count - 1; i++) {\n if (series.type === 'SplineRangeArea') {\n if (!isLow) {\n points[i + 1].yValue = points[i + 1].low > points[i + 1].high ? points[i + 1].low :\n points[i + 1].high;\n points[i].yValue = points[i].low > points[i].high ? points[i].low :\n points[i].high;\n points[i - 1].yValue = points[i - 1].low > points[i - 1].high ? points[i - 1].low :\n points[i - 1].high;\n }\n if (isLow) {\n points[i + 1].yValue = points[i + 1].high < points[i + 1].low ? points[i + 1].high :\n points[i + 1].low;\n points[i].yValue = points[i].high < points[i].low ? points[i].high :\n points[i].low;\n points[i - 1].yValue = points[i - 1].high < points[i - 1].low ? points[i - 1].high :\n points[i - 1].low;\n }\n }\n coefficient1 = points[i].xValue - points[i - 1].xValue;\n coefficient2 = points[i + 1].xValue - points[i - 1].xValue;\n coefficient3 = points[i + 1].xValue - points[i].xValue;\n dy1 = points[i + 1].yValue - points[i].yValue || null;\n dy2 = points[i].yValue - points[i - 1].yValue || null;\n if (coefficient1 === 0 || coefficient2 === 0 || coefficient3 === 0) {\n ySpline[i] = 0;\n ySplineDuplicate[i] = 0;\n }\n else {\n var p = 1 / (coefficient1 * ySpline[i - 1] + 2 * coefficient2);\n ySpline[i] = -p * coefficient3;\n ySplineDuplicate[i] = p * (6 * (dy1 / coefficient3 - dy2 / coefficient1) - coefficient1 *\n ySplineDuplicate[i - 1]);\n }\n }\n for (var k = count - 2; k >= 0; k--) {\n ySpline[k] = ySpline[k] * ySpline[k + 1] + ySplineDuplicate[k];\n }\n return ySpline;\n };\n /**\n * Calculates the control points for a spline segment.\n *\n * @param {Points} point1 - The first data point.\n * @param {Points} point2 - The second data point.\n * @param {number} ySpline1 - The Y-value of the first spline point.\n * @param {number} ySpline2 - The Y-value of the second spline point.\n * @param {Series} series - The series associated with the data points.\n * @returns {ControlPoints} The calculated control points.\n * @public\n */\n SplineBase.prototype.getControlPoints = function (point1, point2, ySpline1, ySpline2, series) {\n var controlPoint1;\n var controlPoint2;\n var point;\n var ySplineDuplicate1 = ySpline1;\n var ySplineDuplicate2 = ySpline2;\n var xValue1 = point1.xValue;\n var yValue1 = point1.yValue;\n var xValue2 = point2.xValue;\n var yValue2 = point2.yValue;\n switch (series.splineType) {\n case 'Cardinal':\n if (series.xAxis.valueType === 'DateTime') {\n ySplineDuplicate1 = ySpline1 / this.dateTimeInterval(series);\n ySplineDuplicate2 = ySpline2 / this.dateTimeInterval(series);\n }\n controlPoint1 = new ChartLocation(xValue1 + ySpline1 / 3, yValue1 + ySplineDuplicate1 / 3);\n controlPoint2 = new ChartLocation(xValue2 - ySpline2 / 3, yValue2 - ySplineDuplicate2 / 3);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n case 'Monotonic': {\n var value = (xValue2 - xValue1) / 3;\n controlPoint1 = new ChartLocation(xValue1 + value, yValue1 + ySpline1 * value);\n controlPoint2 = new ChartLocation(xValue2 - value, yValue2 - ySpline2 * value);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n }\n default: {\n var one3 = 1 / 3.0;\n var deltaX2 = (xValue2 - xValue1);\n deltaX2 = deltaX2 * deltaX2;\n var y1 = one3 * (((2 * yValue1) + yValue2) - one3 * deltaX2 * (ySpline1 + 0.5 * ySpline2));\n var y2 = one3 * ((yValue1 + (2 * yValue2)) - one3 * deltaX2 * (0.5 * ySpline1 + ySpline2));\n controlPoint1 = new ChartLocation((2 * (xValue1) + (xValue2)) * one3, y1);\n controlPoint2 = new ChartLocation(((xValue1) + 2 * (xValue2)) * one3, y2);\n point = new ControlPoints(controlPoint1, controlPoint2);\n break;\n }\n }\n return point;\n };\n /**\n * Calculates the date-time interval.\n *\n * @param {Series} series - The series for which the date-time interval needs to be calculated.\n * @returns {number} The calculated date-time interval.\n * @protected\n */\n SplineBase.prototype.dateTimeInterval = function (series) {\n var interval = series.xAxis.actualIntervalType;\n var intervalInMilliseconds;\n if (interval === 'Years') {\n intervalInMilliseconds = 365 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Months') {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Days') {\n intervalInMilliseconds = 24 * 60 * 60 * 1000;\n }\n else if (interval === 'Hours') {\n intervalInMilliseconds = 60 * 60 * 1000;\n }\n else if (interval === 'Minutes') {\n intervalInMilliseconds = 60 * 1000;\n }\n else if (interval === 'Seconds') {\n intervalInMilliseconds = 1000;\n }\n else {\n intervalInMilliseconds = 30 * 24 * 60 * 60 * 1000;\n }\n return intervalInMilliseconds;\n };\n /**\n * Animates the series.\n *\n * @param {Series} series - Defines the series to animate.\n * @returns {void}\n */\n SplineBase.prototype.doAnimation = function (series) {\n var option = series.animation;\n this.doLinearAnimation(series, option);\n };\n return SplineBase;\n}(LineBase));\nexport { SplineBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getPoint, withInRange, TransformToVisible, animateAddPoints } from '../../common/utils/helper';\nimport { PathOption } from '@syncfusion/ej2-svg-base';\nimport { SplineBase } from './spline-base';\n/**\n * `SplineSeries` module is used to render the spline series.\n */\nvar SplineSeries = /** @class */ (function (_super) {\n __extends(SplineSeries, _super);\n function SplineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * Render the spline series.\n *\n * @param {Series} series - The series to be rendered.\n * @param {Axis} xAxis - The x-axis of the chart.\n * @param {Axis} yAxis - The y-axis of the chart.\n * @param {boolean} isInverted - Specifies whether the chart is inverted.\n * @param {boolean} pointAnimate - Specifies whether the chart is inverted.\n * @param {boolean} pointUpdate - Specifies whether the chart is inverted.\n * @returns {void}\n */\n SplineSeries.prototype.render = function (series, xAxis, yAxis, isInverted, pointAnimate, pointUpdate) {\n var firstPoint = null;\n var direction = '';\n var startPoint = 'M';\n var points = [];\n var tempPoints = series.category === 'TrendLine' ? series.points : this.enableComplexProperty(series);\n points = this.filterEmptyPoints(series, tempPoints);\n var previous;\n var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n if (point.index === 1) {\n direction = '';\n }\n previous = this.getPreviousIndex(points, point.index - 1, series);\n point.symbolLocations = [];\n point.regions = [];\n if (point.visible) {\n if (withInRange(points[previous], point, points[this.getNextIndex(points, point.index - 1, series)], series)) {\n if (firstPoint !== null) {\n direction = this.getSplineDirection(series.drawPoints[previous], firstPoint, point, xAxis, yAxis, isInverted, series, startPoint, getCoordinate, direction);\n startPoint = 'L';\n }\n this.storePointLocation(point, series, isInverted, getCoordinate);\n if (direction === '') {\n direction = 'M ' + point.symbolLocations[0].x + ' ' + point.symbolLocations[0].y;\n }\n }\n firstPoint = point;\n }\n else {\n startPoint = 'M';\n firstPoint = null;\n point.symbolLocations = [];\n }\n }\n if ((points.length > 0 && series.drawPoints.length > 0) && series.chart.chartAreaType === 'PolarRadar' && series.isClosed) {\n var connectPoints = this.getFirstLastVisiblePoint(points);\n direction = this.getSplineDirection(series.drawPoints[series.drawPoints.length - 1], connectPoints.last, { xValue: connectPoints.first.xValue, yValue: connectPoints.first.yValue }, xAxis, yAxis, isInverted, series, startPoint, getCoordinate, direction);\n startPoint = 'L';\n }\n var name = series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n series.chart.element.id + '_Series_' + series.index;\n var options = new PathOption(name, 'transparent', series.width, series.interior, series.opacity, series.dashArray, direction);\n this[pointAnimate ? 'addPath' : 'appendLinePath'](options, series, '');\n if (!pointUpdate) {\n this.renderMarker(series);\n }\n };\n /**\n * To find the direct of spline using points.\n *\n * @param {ControlPoints} data data\n * @param {Points} firstPoint firstPoint\n * @param {Points} point point\n * @param {Axis} xAxis xAxis\n * @param {Axis} yAxis yAxis\n * @param {boolean} isInverted isInverted\n * @param {Series} series series\n * @param {string} startPoint startPoint\n * @param {Function} getCoordinate getCoordinate\n * @param {string} direction direction\n * @returns {string} - Returns the direct of spline using points.\n */\n SplineSeries.prototype.getSplineDirection = function (data, firstPoint, point, xAxis, yAxis, isInverted, series, startPoint, getCoordinate, direction) {\n var controlPoint1 = data.controlPoint1;\n var controlPoint2 = data.controlPoint2;\n var pt1 = getCoordinate(firstPoint.xValue, firstPoint.yValue, xAxis, yAxis, isInverted, series);\n var pt2 = getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series);\n var bpt1 = getCoordinate(controlPoint1.x, controlPoint1.y, xAxis, yAxis, isInverted, series);\n var bpt2 = getCoordinate(controlPoint2.x, controlPoint2.y, xAxis, yAxis, isInverted, series);\n return direction.concat((startPoint + ' ' + (pt1.x) + ' ' + (pt1.y) + ' ' + 'C' + ' ' + (bpt1.x) + ' '\n + (bpt1.y) + ' ' + (bpt2.x) + ' ' + (bpt2.y) + ' ' + (pt2.x) + ' ' + (pt2.y) + ' '));\n };\n SplineSeries.prototype.updateDirection = function (series, point) {\n this.render(series, series.xAxis, series.yAxis, series.chart.requireInvertedAxis, false, true);\n for (var i = 0; i < point.length; i++) {\n if (series.marker && series.marker.visible) {\n series.chart.markerRender.renderMarker(series, series.points[point[i]], series.points[point[i]].symbolLocations[0], null, true);\n }\n if (series.marker.dataLabel.visible && series.chart.dataLabelModule) {\n series.chart.dataLabelModule.commonId = series.chart.element.id + '_Series_' + series.index + '_Point_';\n var dataLabelElement = series.chart.dataLabelModule.renderDataLabel(series, series.points[point[i]], null, series.marker.dataLabel);\n for (var j = 0; j < dataLabelElement.length; j++) {\n series.chart.dataLabelModule.doDataLabelAnimation(series, dataLabelElement[j]);\n }\n }\n }\n };\n /**\n * Adds a area path to equate the start and end paths.\n *\n * @param {PathOption} options - The options for the path.\n * @param {Series} series - The series to which the path belongs.\n * @param {string} clipRect - The clip rectangle for the path.\n * @param {ChartLocation[]} [firstSymbol] - The location of the first symbol.\n * @returns {void}\n */\n SplineSeries.prototype.addPath = function (options, series, clipRect) {\n var points = this.appendPathElement(options, series, clipRect);\n if (points.previousDirection !== '' && options.d !== '') {\n var startPathCommands = points.previousDirection.match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var endPathCommands = (options.d).match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/g);\n var maxLength = Math.max(startPathCommands.length, endPathCommands.length);\n var minLength = Math.min(startPathCommands.length, endPathCommands.length);\n if (startPathCommands.length < endPathCommands.length) {\n for (var i = startPathCommands.length; i < endPathCommands.length; i++) {\n if (endPathCommands.length !== startPathCommands.length) {\n if (startPathCommands[startPathCommands.length - 1].indexOf('C') === 0) {\n startPathCommands.push('L ' + ((startPathCommands[startPathCommands.length - 1]).split(' ').slice(-3)).join(' '));\n }\n else if (startPathCommands[startPathCommands.length - 1].indexOf('L') === 0) {\n var points_2 = ((startPathCommands[startPathCommands.length - 1])).split(' ').slice(-3);\n startPathCommands.push('C ' + points_2.join(' ') + points_2.join(' ') + points_2.join(' '));\n }\n else {\n var points_3 = (startPathCommands[startPathCommands.length - 1]).replace('M', '');\n startPathCommands.push('C' + points_3 + points_3 + points_3);\n }\n }\n }\n animateAddPoints(points.element, options.d, series.chart.redraw, startPathCommands.join(' '), this.chart.duration);\n }\n else if (startPathCommands.length > endPathCommands.length) {\n for (var i = minLength; i < maxLength; i++) {\n if (series.removedPointIndex === series.points.length && endPathCommands.length !== startPathCommands.length) {\n if (endPathCommands[endPathCommands.length - 1].indexOf('C') === 0) {\n endPathCommands.push('L ' + ((endPathCommands[endPathCommands.length - 1]).split(' ').slice(-3)).join(' '));\n }\n else if (endPathCommands[endPathCommands.length - 1].indexOf('L') === 0) {\n var points_4 = ((endPathCommands[endPathCommands.length - 1])).split(' ').slice(-3);\n endPathCommands.push('C ' + points_4.join(' ') + points_4.join(' ') + points_4.join(' '));\n }\n else {\n var points_5 = (endPathCommands[endPathCommands.length - 1]).replace('M', '');\n endPathCommands.push('C' + points_5 + points_5 + points_5);\n }\n }\n else {\n if (endPathCommands.length === 1) {\n var points_6 = (endPathCommands[endPathCommands.length - 1]).replace('M', '');\n endPathCommands.push('C' + points_6 + points_6 + points_6);\n }\n else if (endPathCommands.length !== startPathCommands.length) {\n endPathCommands.splice(1, 0, 'C ' + endPathCommands[0].split(' ').slice(-3).join(' ') + endPathCommands[0].split(' ').slice(-3).join(' ') + endPathCommands[0].split(' ').slice(-3).join(' '), endPathCommands[0].replace('M', 'L'));\n }\n }\n }\n animateAddPoints(points.element, endPathCommands.join(''), series.chart.redraw, points.previousDirection, this.chart.duration, options.d);\n }\n else {\n animateAddPoints(points.element, options.d, series.chart.redraw, points.previousDirection, this.chart.duration);\n }\n }\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n SplineSeries.prototype.getModuleName = function () {\n /**\n * Returns the module name of the series.\n */\n return 'SplineSeries';\n };\n /**\n * To destroy the spline.\n *\n * @returns {void}\n * @private\n */\n SplineSeries.prototype.destroy = function () {\n /**\n * Destroy method calling here.\n */\n };\n return SplineSeries;\n}(SplineBase));\nexport { SplineSeries };\n","import { ChartLocation, RectOption, isCollide, isOverlap, rotateTextSize } from '../../common/utils/helper';\nimport { markerAnimate, appendChildElement, getVisiblePoints } from '../../common/utils/helper';\nimport { getLabelText, convertHexToColor, calculateRect, textElement, colorNameToHex } from '../../common/utils/helper';\nimport { measureText, TextOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { textRender } from '../../common/model/constants';\nimport { createTemplate, getFontStyle, getElement, measureElementRect, templateAnimate, withIn, withInBounds } from '../../common/utils/helper';\nimport { createElement, getValue, extend } from '@syncfusion/ej2-base';\nimport { getPoint, isRotatedRectIntersect } from '../../common/utils/helper';\n/**\n * `DataLabel` module is used to render data label for the data point.\n */\nvar DataLabel = /** @class */ (function () {\n /**\n * Constructor for the data label module.\n *\n * @private\n */\n function DataLabel(chart) {\n this.errorHeight = 0;\n this.chart = chart;\n }\n DataLabel.prototype.initPrivateVariables = function (series, marker) {\n var transform = '';\n var clipPath = '';\n var render = series.chart.renderer;\n var index = (series.index === undefined) ? series.category : series.index;\n if (series.chart.chartAreaType === 'Cartesian') {\n transform = 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')';\n clipPath = 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + index + ')';\n }\n if (marker.dataLabel.visible && !this.chart.enableCanvas) {\n series.shapeElement = render.createGroup({\n 'id': this.chart.element.id + 'ShapeGroup' + index,\n 'transform': transform,\n 'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + index + ')'\n });\n series.textElement = render.createGroup({\n 'id': this.chart.element.id + 'TextGroup' + index,\n 'transform': transform,\n 'clip-path': clipPath\n });\n series.textElement.setAttribute('aria-hidden', 'true');\n }\n this.markerHeight = ((series.type === 'Scatter' || marker.visible)) ? (marker.height / 2) : 0;\n this.commonId = this.chart.element.id + '_Series_' + index + '_Point_';\n this.calculateErrorHeight(series, series.marker.dataLabel.position);\n this.chartBackground = this.chart.chartArea.background === 'transparent' ?\n this.chart.background || this.chart.themeStyle.background : this.chart.chartArea.background;\n };\n DataLabel.prototype.calculateErrorHeight = function (series, position) {\n if (!series.errorBar.visible) {\n return null;\n }\n else if (series.errorBar.visible && this.chart.chartAreaType !== 'PolarRadar') {\n var direction = series.errorBar.direction;\n var positiveHeight = this.chart.errorBarModule.positiveHeight;\n var negativeHeight = this.chart.errorBarModule.negativeHeight;\n if (this.isRectSeries(series)) {\n if (position === 'Top' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Outer' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Plus') {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n else {\n if (position === 'Top' || position === 'Outer' || position === 'Auto') {\n if ((direction === 'Both' || direction === 'Plus') && (!series.chart.isTransposed)) {\n this.errorHeight = positiveHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n if (position === 'Bottom' || position === 'Auto') {\n if (direction === 'Both' || direction === 'Minus') {\n this.errorHeight = negativeHeight;\n }\n else {\n this.errorHeight = 0;\n }\n }\n }\n }\n else {\n this.errorHeight = 0;\n }\n };\n DataLabel.prototype.isRectSeries = function (series) {\n return series.isRectSeries || series.type === 'RangeArea' || series.type === 'SplineRangeArea' || series.type === 'RangeStepArea';\n };\n /**\n * Render the data label for series.\n *\n * @param {Series} series - The series to render.\n * @param {Chart} chart - The parent chart.\n * @param {DataLabelSettingsModel} dataLabel - The settings for data labels.\n * @returns {void}\n */\n DataLabel.prototype.render = function (series, chart, dataLabel) {\n // initialize the private variable\n this.initPrivateVariables(series, series.marker);\n this.inverted = chart.requireInvertedAxis;\n this.yAxisInversed = series.yAxis.isAxisInverse;\n var templateId = chart.element.id + '_Series_' +\n (series.index === undefined ? series.category : series.index) + '_DataLabelCollections';\n var element = createElement('div', {\n id: templateId\n });\n var visiblePoints = getVisiblePoints(series);\n // Data label point iteration started\n if (series.visible) {\n for (var i = 0; i < visiblePoints.length; i++) {\n this.renderDataLabel(series, visiblePoints[i], element, dataLabel);\n }\n }\n if (element.childElementCount) {\n if (!chart.enableCanvas) {\n appendChildElement(chart.enableCanvas, getElement(chart.element.id + '_Secondary_Element'), element, chart.redraw, false, 'x', 'y', null, '', false, false, null, chart.duration);\n }\n else {\n getElement(chart.element.id + '_Secondary_Element').appendChild(element);\n }\n }\n };\n DataLabel.prototype.renderDataLabel = function (series, point, element, dataLabel) {\n if (!dataLabel.showZero && ((point.y === 0) || (point.y === 0 && series.emptyPointSettings.mode === 'Zero'))) {\n return null;\n }\n this.margin = dataLabel.margin;\n var labelText = [];\n var labelLength;\n var xPos;\n var yPos;\n var xValue;\n var yValue;\n var degree;\n var isRender = true;\n var rectCenterX;\n var rectCenterY;\n var labelLocation = { x: 0, y: 0 };\n var textSize;\n var clip = series.clipRect;\n var shapeRect;\n var isDataLabelOverlap = false;\n var dataLabelElement = [];\n dataLabel.angle = dataLabel.labelIntersectAction === 'Rotate90' ? 90 : dataLabel.angle;\n dataLabel.enableRotation = dataLabel.labelIntersectAction === 'Rotate90' ? true : dataLabel.enableRotation;\n var angle = degree = dataLabel.angle;\n var border = { width: dataLabel.border.width, color: dataLabel.border.color };\n var argsFont = (extend({}, getValue('properties', dataLabel.font), null, true));\n if ((point.symbolLocations.length && point.symbolLocations[0]) ||\n (series.type === 'BoxAndWhisker' && point.regions.length)) {\n labelText = point.text !== null ? getLabelText(point, series, this.chart) : [];\n labelLength = labelText.length;\n for (var i = 0; i < labelLength; i++) {\n var argsData = {\n cancel: false, name: textRender, series: series,\n point: point, text: labelText[i], border: border,\n color: dataLabel.fill, template: dataLabel.template, font: argsFont, location: labelLocation,\n textSize: measureText(labelText[i], dataLabel.font, this.chart.themeStyle.datalabelFont)\n };\n this.chart.trigger(textRender, argsData);\n if (!argsData.cancel) {\n this.fontBackground = argsData.color;\n this.isDataLabelShape(argsData);\n this.markerHeight = series.type === 'Bubble' ? (point.regions[0].height / 2) : this.markerHeight;\n if (argsData.template !== null) {\n this.createDataLabelTemplate(element, series, dataLabel, point, argsData, i, this.chart.redraw);\n }\n else {\n if (dataLabel.enableRotation) {\n textSize = rotateTextSize(dataLabel.font, argsData.text, dataLabel.angle, this.chart, this.chart.themeStyle.datalabelFont);\n }\n else {\n textSize = measureText(argsData.text, dataLabel.font, this.chart.themeStyle.datalabelFont);\n }\n var rect = this.calculateTextPosition(point, series, textSize, dataLabel, i);\n // To check whether the polar radar chart datalabel intersects the axis label or not\n if (this.chart.chartAreaType === 'PolarRadar') {\n for (var _i = 0, _a = this.chart.chartAxisLayoutPanel.visibleAxisLabelRect; _i < _a.length; _i++) {\n var rectRegion = _a[_i];\n if (isOverlap(new Rect(rect.x, rect.y, rect.width, rect.height), rectRegion)) {\n isRender = false;\n break;\n }\n }\n }\n var actualRect = new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height);\n //let notOverlapping: boolean;\n if (dataLabel.enableRotation) {\n var rectCoordinates = this.getRectanglePoints(rect);\n rectCenterX = rect.x + (rect.width / 2);\n rectCenterY = (rect.y + (rect.height / 2));\n isDataLabelOverlap = (dataLabel.labelIntersectAction === 'Rotate90' || angle === -90) ? false : this.isDataLabelOverlapWithChartBound(rectCoordinates, this.chart, clip);\n if (!isDataLabelOverlap) {\n this.chart.rotatedDataLabelCollections.push(rectCoordinates);\n var currentPointIndex = this.chart.rotatedDataLabelCollections.length - 1;\n for (var index = currentPointIndex; index >= 0; index--) {\n if (this.chart.rotatedDataLabelCollections[currentPointIndex] &&\n this.chart.rotatedDataLabelCollections[index - 1] &&\n isRotatedRectIntersect(this.chart.rotatedDataLabelCollections[currentPointIndex], this.chart.rotatedDataLabelCollections[index - 1])) {\n isDataLabelOverlap = true;\n this.chart.rotatedDataLabelCollections[currentPointIndex] = null;\n break;\n }\n }\n }\n }\n else {\n isDataLabelOverlap = isCollide(rect, this.chart.dataLabelCollections, clip);\n }\n if ((!isDataLabelOverlap || dataLabel.labelIntersectAction === 'None') && isRender) {\n this.chart.dataLabelCollections.push(actualRect);\n if (this.isShape) {\n shapeRect = this.chart.renderer.drawRectangle(new RectOption(this.commonId + point.index + '_TextShape_' + i, argsData.color, argsData.border, dataLabel.opacity, rect, dataLabel.rx, dataLabel.ry, '', dataLabel.border.dashArray), new Int32Array([clip.x, clip.y]));\n if (series.shapeElement) {\n series.shapeElement.appendChild(shapeRect);\n }\n }\n // Checking the font color\n var backgroundColor = this.fontBackground === 'transparent' ? ((this.chart.theme.indexOf('Dark') > -1 || this.chart.theme.indexOf('HighContrast') > -1) ? 'black' : 'white') : this.fontBackground;\n var rgbValue = convertHexToColor(colorNameToHex(backgroundColor));\n var contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n xPos = (rect.x + this.margin.left + textSize.width / 2) + labelLocation.x;\n yPos = dataLabel.enableRotation && this.chart.chartAreaType !== 'PolarRadar' ? (rect.y + this.margin.top + textSize.height / 2 + textSize.width / 4 + (dataLabel.position === 'Auto' ? point.regions[0].width / 10 : 0)) + labelLocation.y : (rect.y + this.margin.top + textSize.height * 3 / 4) + labelLocation.y;\n labelLocation = { x: 0, y: 0 };\n if (angle !== 0 && dataLabel.enableRotation) {\n // xValue = xPos - (dataLabel.margin.left) / 2 + (dataLabel.margin.right / 2);\n xValue = rectCenterX;\n //yValue = yPos - (dataLabel.margin.top) / 2 - (textSize.height / dataLabel.margin.top) +\n // (dataLabel.margin.bottom) / 2;\n yValue = rectCenterY;\n degree = (angle > 360) ? angle - 360 : (angle < -360) ? angle + 360 : angle;\n }\n else {\n degree = 0;\n xValue = rect.x;\n yValue = rect.y;\n xPos -= this.chart.chartAreaType === 'Cartesian' && xPos + (textSize.width / 2) > clip.width ? (xPos + textSize.width / 2) - clip.width : 0;\n yPos -= (yPos + textSize.height > clip.y + clip.height && !(series.type.indexOf('Bar') > -1)) ? (yPos + textSize.height) - (clip.y + clip.height) : 0;\n }\n var textAnchor = dataLabel.labelIntersectAction === 'Rotate90' ? (dataLabel.position === 'Top' ? 'start' : (dataLabel.position === 'Middle' ? 'middle' : 'end')) :\n ((angle === -90 && dataLabel.enableRotation) ? (dataLabel.position === 'Top' ? 'end' : (dataLabel.position === 'Middle' ? 'middle' : 'start')) : 'middle');\n dataLabelElement.push(textElement(this.chart.renderer, new TextOption(this.commonId + ((series.removedPointIndex !== null && series.removedPointIndex <= point.index) ? (point.index + 1) : point.index) + '_Text_' + i, xPos, yPos, textAnchor, argsData.text, 'rotate(' + degree + ',' + (xValue) + ',' + (yValue) + ')', 'auto', degree), argsData.font, argsData.font.color ||\n ((contrast >= 128 || series.type === 'Hilo' || series.type === 'HiloOpenClose') ? 'black' : 'white'), series.textElement, false, this.chart.redraw, true, false, series.chart.duration, series.clipRect, null, null, this.chart.enableCanvas, null, this.chart.themeStyle.datalabelFont, new ChartLocation(xValue, yValue)));\n if (series.removedPointIndex !== null && series.removedPointIndex <= point.index) {\n series.textElement.lastChild.id = this.commonId + point.index + '_Text_' + i;\n }\n }\n }\n }\n }\n }\n return dataLabelElement;\n };\n /**\n * Retrieves the points of a rectangle.\n *\n * @param {Rect} rect - The rectangle whose points are to be retrieved.\n * @returns {ChartLocation[]} - The points of the rectangle.\n */\n DataLabel.prototype.getRectanglePoints = function (rect) {\n var loc1 = new ChartLocation(rect.x, rect.y);\n var loc2 = new ChartLocation(rect.x + rect.width, rect.y);\n var loc3 = new ChartLocation(rect.x + rect.width, rect.y + rect.height);\n var loc4 = new ChartLocation(rect.x, rect.y + rect.height);\n return [loc1, loc2, loc3, loc4];\n };\n DataLabel.prototype.isDataLabelOverlapWithChartBound = function (rectCoordinates, chart, clip) {\n for (var index = 0; index < rectCoordinates.length; index++) {\n if (!withInBounds(rectCoordinates[index].x + clip.x, rectCoordinates[index].y + clip.y, chart.initialClipRect)) {\n return true;\n }\n }\n return false;\n };\n /**\n * Creates a template for data labels.\n *\n * @param {HTMLElement} parentElement - The parent element to which the template will be appended.\n * @param {Series} series - The series associated with the data label.\n * @param {DataLabelSettingsModel} dataLabel - The settings for the data label.\n * @param {Points} point - The data point to which the data label is associated.\n * @param {ITextRenderEventArgs} data - The event data associated with rendering the data label.\n * @param {number} labelIndex - The index of the data label.\n * @param {boolean} redraw - Specifies whether to redraw the template.\n * @returns {void}\n */\n DataLabel.prototype.createDataLabelTemplate = function (parentElement, series, dataLabel, point, data, labelIndex, redraw) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n var clip = series.clipRect;\n var childElement = createTemplate(createElement('div', {\n id: this.chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index) + '_DataLabel_'\n + point.index + (labelIndex ? ('_' + labelIndex) : ''),\n styles: 'position: absolute;background-color:' + data.color + ';' +\n getFontStyle(dataLabel.font, this.chart.themeStyle.datalabelFont) + ';border:' + data.border.width + 'px solid ' + data.border.color + ';'\n }), point.index, data.template, this.chart, point, series, this.chart.element.id + '_DataLabel', labelIndex);\n this.calculateTemplateLabelSize(parentElement, childElement, point, series, dataLabel, labelIndex, clip, redraw);\n };\n DataLabel.prototype.calculateTemplateLabelSize = function (parentElement, childElement, point, series, dataLabel, labelIndex, clip, redraw, isReactCallback) {\n var elementRect = measureElementRect(childElement, redraw, isReactCallback);\n var rect = this.calculateTextPosition(point, series, { width: elementRect.width, height: elementRect.height }, dataLabel, labelIndex);\n var clipWidth = 0;\n var clipHeight = 0;\n var isOverlap = false;\n if (isReactCallback) {\n isOverlap = (elementRect.width === 0 || elementRect.height === 0); // To check the data label already overlap before react callback call\n // clipWidth = ((series.clipRect.x + rect.x) + elementRect.width) > parentElement.clientWidth ?\n // (parentElement.clientWidth - (series.clipRect.x + rect.x)) : 0;\n // clipHeight = (series.points.length - 1 === point.index) ? elementRect.height / 2 : 0;\n }\n childElement.style.left = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.x) + rect.x - clipWidth) + 'px';\n childElement.style.top = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.y) + rect.y + clipHeight) + 'px';\n var backgroundColor = this.fontBackground === 'transparent' ? (this.chart.theme.indexOf('Dark') > -1 ? 'black' : 'white') : this.fontBackground;\n var rgbValue = convertHexToColor(colorNameToHex(backgroundColor));\n var vAxis = series.chart.requireInvertedAxis ? series.xAxis : series.yAxis;\n var hAxis = series.chart.requireInvertedAxis ? series.yAxis : series.xAxis;\n childElement.style.color = dataLabel.font.color ||\n ((Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000)) >= 128 ? 'black' : 'white');\n if (childElement.childElementCount && !isOverlap && (!isCollide(rect, this.chart.dataLabelCollections, clip) ||\n dataLabel.labelIntersectAction === 'None') && (series.seriesType !== 'XY' || point.yValue === undefined ||\n withIn(point.yValue, series.yAxis.visibleRange) || (series.type.indexOf('Stacking') > -1) ||\n (series.type.indexOf('100') > -1 && withIn(series.stackedValues.endValues[point.index], series.yAxis.visibleRange))) &&\n withIn(point.xValue, series.xAxis.visibleRange) && parseFloat(childElement.style.top) >= vAxis.rect.y &&\n parseFloat(childElement.style.left) >= hAxis.rect.x &&\n parseFloat(childElement.style.top) <= vAxis.rect.y + vAxis.rect.height &&\n parseFloat(childElement.style.left) <= hAxis.rect.x + hAxis.rect.width) {\n this.chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n appendChildElement(this.chart.enableCanvas, parentElement, childElement, redraw, true, 'left', 'top');\n if (series.animation.enable && this.chart.animateSeries && !this.chart.enableCanvas) {\n this.doDataLabelAnimation(series, childElement);\n }\n else if (this.chart.enableCanvas) {\n parentElement.appendChild(childElement);\n }\n }\n };\n DataLabel.prototype.calculateTextPosition = function (point, series, textSize, dataLabel, labelIndex) {\n var labelRegion = labelIndex > 1 ? (series.type === 'Candle') ? point.regions[1] : point.regions[0] : point.regions[0];\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var location;\n location = this.getLabelLocation(point, series, textSize, labelIndex);\n var padding = 5;\n var clipRect = series.clipRect;\n // calculating alignment\n if (!this.chart.requireInvertedAxis || !this.isRectSeries(series) || series.type === 'BoxAndWhisker') {\n this.locationX = location.x;\n var alignmentValue = textSize.height + (this.borderWidth * 2) + this.markerHeight +\n this.margin.bottom + this.margin.top + padding;\n location.x = (dataLabel.position === 'Auto') ? location.x :\n this.calculateAlignment(alignmentValue, location.x, dataLabel.alignment, this.isRectSeries(series) ? point.yValue < 0 : false);\n // calculating position\n location.y = (!this.isRectSeries(series) || series.type === 'BoxAndWhisker') ?\n this.calculatePathPosition(location.y, dataLabel.position, series, point, textSize, labelIndex) :\n this.calculateRectPosition(location.y, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n if (this.isRectSeries(series) && this.chart.chartAreaType === 'PolarRadar') {\n location = this.calculatePolarRectPosition(location, dataLabel.position, series, point, textSize, labelIndex, dataLabel.alignment, alignmentValue);\n }\n }\n else {\n this.locationY = location.y;\n var alignmentValue = textSize.width + this.borderWidth + this.margin.left + this.margin.right - padding;\n location.x = dataLabel.position === 'Auto' ? location.x :\n this.calculateAlignment(alignmentValue, location.x, dataLabel.alignment, point.yValue < 0);\n location.x = this.calculateRectPosition(location.x, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n }\n var rect = calculateRect(location, textSize, this.margin);\n // Checking the condition whether data Label has been exist the clip rect\n if (!(dataLabel.enableRotation === true && dataLabel.angle !== 0) &&\n !((rect.y > (clipRect.y + clipRect.height)) || (rect.x > (clipRect.x + clipRect.width)) ||\n (rect.x + rect.width < 0) || (rect.y + rect.height < 0))) {\n rect.x = rect.x < 0 ? padding : rect.x;\n rect.y = (rect.y < 0) && !(dataLabel.labelIntersectAction === 'None') ? padding : rect.y;\n rect.x -= (rect.x + rect.width) > (clipRect.x + clipRect.width) ? (rect.x + rect.width)\n - (clipRect.x + clipRect.width) + padding : 0;\n rect.y -= (rect.y + rect.height) > (clipRect.y + clipRect.height) ? (rect.y + rect.height)\n - (clipRect.y + clipRect.height) + padding : 0;\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n }\n var dataLabelOutRegion;\n if (this.inverted && series.isRectSeries && (rect.x + rect.width > labelRegion.x + labelRegion.width)) {\n dataLabelOutRegion = true;\n }\n this.fontBackground = dataLabelOutRegion ? this.chartBackground : this.fontBackground;\n return rect;\n };\n // Calculation label location for polar column draw types\n DataLabel.prototype.calculatePolarRectPosition = function (location, position, series, point, size, labelIndex, alignment, alignmentValue) {\n var padding = 5;\n var columnRadius;\n var chartWidth = this.chart.availableSize.width;\n var alignmentSign = (alignment === 'Center') ? 0 : (alignment === 'Far' ? 1 : -1);\n var angle = (point.regionData.startAngle - 0.5 * Math.PI) + (point.regionData.endAngle - point.regionData.startAngle) / 2;\n if (labelIndex === 0) {\n columnRadius = point.regionData.radius < point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n else {\n columnRadius = point.regionData.radius > point.regionData.innerRadius ? point.regionData.innerRadius\n : point.regionData.radius;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n if (series.drawType.indexOf('Stacking') > -1) {\n position = position === 'Outer' ? 'Top' : position;\n }\n else if (series.drawType.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n if (position === 'Outer') {\n columnRadius = labelIndex === 0 ? columnRadius + 2 * padding + this.markerHeight :\n columnRadius - 2 * padding - this.markerHeight;\n }\n else if (position === 'Middle') {\n columnRadius = columnRadius / 2 + padding;\n if (series.drawType === 'StackingColumn') {\n columnRadius = point.regionData.innerRadius + ((point.regionData.radius - point.regionData.innerRadius) / 2)\n + padding - (size.height / 2);\n }\n }\n else if (position === 'Top') {\n columnRadius = labelIndex === 0 ? columnRadius - 2 * padding - this.markerHeight :\n columnRadius + 2 * padding + this.markerHeight;\n }\n else if (position === 'Bottom') {\n columnRadius = 2 * padding;\n columnRadius += (series.drawType === 'StackingColumn') ? (point.regionData.innerRadius + this.markerHeight) : 0;\n }\n else {\n if (labelIndex === 0) {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius - padding :\n series.drawType === 'StackingColumn' ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n }\n else {\n columnRadius = columnRadius >= series.chart.radius ? columnRadius + padding : columnRadius - 2 * padding;\n }\n }\n columnRadius += (alignmentValue * alignmentSign);\n location.x = series.clipRect.width / 2 + series.clipRect.x + columnRadius * Math.cos(angle);\n // To change x location based on text anchor for column and stackingcolumn chart\n if (series.drawType === 'StackingColumn') {\n location.x = location.x < chartWidth / 2 ? location.x + size.width / 2 :\n (location.x > chartWidth / 2 ? location.x - size.width / 2 : location.x);\n }\n else if (series.drawType === 'Column') {\n location.x = location.x < chartWidth / 2 ? location.x - size.width / 2 :\n (location.x > chartWidth / 2 ? location.x + size.width / 2 : location.x);\n }\n location.y = series.clipRect.height / 2 + series.clipRect.y + columnRadius * Math.sin(angle);\n return location;\n };\n /**\n * Gets the location for the data label.\n *\n * @param {Points} point - The data point associated with the label.\n * @param {Series} series - The series associated with the data label.\n * @param {Size} textSize - The size of the text to be displayed in the data label.\n * @param {number} labelIndex - The index of the data label.\n * @returns {ChartLocation} - The location for the data label.\n */\n DataLabel.prototype.getLabelLocation = function (point, series, textSize, labelIndex) {\n var location = new ChartLocation(0, 0);\n var labelRegion = (series.type === 'Candle' && labelIndex > 1) ? point.regions[1] : point.regions[0];\n if (series.type === 'HiloOpenClose') {\n labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n }\n var xAxis = series.xAxis;\n var yAxis = series.yAxis;\n var isInverted = series.chart.requireInvertedAxis;\n if (series.type === 'BoxAndWhisker') {\n this.markerHeight = 0;\n switch (labelIndex) {\n case 0:\n location = getPoint(point.xValue, point.median, xAxis, yAxis, isInverted);\n break;\n case 1:\n location = getPoint(point.xValue, point.maximum, xAxis, yAxis, isInverted);\n break;\n case 2:\n location = getPoint(point.xValue, point.minimum, xAxis, yAxis, isInverted);\n break;\n case 3:\n location = getPoint(point.xValue, point.upperQuartile, xAxis, yAxis, isInverted);\n break;\n case 4:\n location = getPoint(point.xValue, point.lowerQuartile, xAxis, yAxis, isInverted);\n break;\n default: {\n location = getPoint(point.xValue, point.outliers[labelIndex - 5], xAxis, yAxis, isInverted);\n this.markerHeight = series.marker.height / 2;\n break;\n }\n }\n if (isInverted) {\n location.y = point.regions[0].y + (point.regions[0].height / 2);\n }\n else {\n location.x = point.regions[0].x + (point.regions[0].width / 2);\n }\n }\n else if (labelIndex === 0 || labelIndex === 1) {\n location = new ChartLocation(point.symbolLocations[0].x, point.symbolLocations[0].y);\n }\n else if ((labelIndex === 2 || labelIndex === 3) && series.type === 'Candle') {\n location = new ChartLocation(point.symbolLocations[1].x, point.symbolLocations[1].y);\n }\n else if (isInverted) {\n location = { x: labelRegion.x + (labelRegion.width) / 2, y: labelRegion.y };\n }\n else {\n location = { x: labelRegion.x + labelRegion.width, y: labelRegion.y + (labelRegion.height) / 2 };\n }\n //Aligning the label at the beginning of the tick, when tick size is less than text size\n if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n if (series.chart.requireInvertedAxis) {\n var height = labelRegion.height;\n location.y = labelRegion.y + height / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n else {\n var width = labelRegion.width;\n location.x = labelRegion.x + width / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n }\n }\n return location;\n };\n DataLabel.prototype.calculateRectPosition = function (labelLocation, rect, isMinus, position, series, textSize, labelIndex, point) {\n if (series.chart.chartAreaType === 'PolarRadar') {\n return null;\n }\n var padding = 5;\n var margin = this.margin;\n var textLength = (series.marker.dataLabel.enableRotation ? textSize.width :\n (!this.inverted ? textSize.height : textSize.width));\n this.extraSpace = this.borderWidth + textLength / 2 + (position !== 'Outer' && series.type.indexOf('Column') > -1 &&\n (Math.abs(rect.height - textSize.height) < padding) ? 0 : padding);\n if (series.type === 'StackingColumn100' || series.type === 'StackingBar100') {\n position = (position === 'Outer') ? 'Top' : position;\n }\n else if (series.type.indexOf('Range') > -1) {\n position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n }\n else if (series.type === 'Waterfall') {\n position = position === 'Auto' ? 'Middle' : position;\n }\n switch (position) {\n case 'Bottom':\n labelLocation = !this.inverted ?\n isMinus ? (labelLocation + (series.type === 'Waterfall' ? (-this.extraSpace - margin.top - this.markerHeight) : (-rect.height + this.extraSpace + margin.top))) :\n (labelLocation + rect.height - this.extraSpace - margin.bottom) :\n isMinus ? (labelLocation + (series.type === 'Waterfall' ? (+this.extraSpace + margin.left + this.markerHeight) : (+rect.width - this.extraSpace - margin.left))) :\n (labelLocation - rect.width + this.extraSpace + margin.right);\n break;\n case 'Middle':\n labelLocation = labelLocation = !this.inverted ?\n (isMinus ? labelLocation - (rect.height / 2) : labelLocation + (rect.height / 2)) :\n (isMinus ? labelLocation + (rect.width / 2) : labelLocation - (rect.width / 2));\n break;\n case 'Auto':\n labelLocation = this.calculateRectActualPosition(labelLocation, rect, isMinus, series, textSize, labelIndex, point);\n break;\n default:\n this.extraSpace += this.errorHeight;\n labelLocation = this.calculateTopAndOuterPosition(labelLocation, rect, position, series, labelIndex, this.extraSpace, isMinus, point);\n break;\n }\n var check = !this.inverted ? (labelLocation < rect.y || labelLocation > rect.y + rect.height) :\n (labelLocation < rect.x || labelLocation > rect.x + rect.width);\n this.fontBackground = check ?\n (this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground)\n : this.fontBackground === 'transparent' ? (point.color || series.interior) : this.fontBackground;\n var seriesLength = series.chart.series.length;\n if (position === 'Outer' && (series.type.indexOf('Stacking') > -1) && ((seriesLength - 1) > series.index)) {\n var nextSeries = void 0;\n var nextSeriesPoint = void 0;\n for (var i = series.index + 1; i < seriesLength; i++) {\n nextSeries = series.chart.series[i];\n nextSeriesPoint = nextSeries.points[point.index];\n if ((nextSeries.type.indexOf('Stacking') > -1) && (nextSeries.type.indexOf('100') === -1)) {\n this.fontBackground = (nextSeriesPoint && ((nextSeriesPoint.yValue < 0 && point.yValue < 0) ||\n (nextSeriesPoint.yValue > 0 && point.yValue > 0))) ? (nextSeriesPoint ? nextSeriesPoint.color :\n nextSeries.interior) : this.fontBackground;\n break;\n }\n }\n }\n return labelLocation;\n };\n DataLabel.prototype.calculatePathPosition = function (labelLocation, position, series, point, size, labelIndex) {\n var padding = 5;\n if ((series.type.indexOf('Area') > -1 && series.type !== 'RangeArea' && series.type !== 'SplineRangeArea' && series.type !== 'RangeStepArea')\n && this.yAxisInversed && series.marker.dataLabel.position !== 'Auto') {\n position = position === 'Top' ? 'Bottom' : position === 'Bottom' ? 'Top' : position;\n }\n this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n switch (position) {\n case 'Top':\n case 'Outer':\n labelLocation = labelLocation - this.markerHeight - this.borderWidth - size.height / 2 - this.margin.bottom - padding -\n this.errorHeight;\n break;\n case 'Bottom':\n labelLocation = labelLocation + this.markerHeight + this.borderWidth + size.height / 2 + this.margin.top + padding +\n this.errorHeight;\n break;\n case 'Auto':\n labelLocation = this.calculatePathActualPosition(labelLocation, this.markerHeight, series, point, size, labelIndex);\n break;\n }\n return labelLocation;\n };\n DataLabel.prototype.isDataLabelShape = function (style) {\n this.isShape = (style.color !== 'transparent' || style.border.width > 0);\n this.borderWidth = style.border.width;\n if (!this.isShape) {\n this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n }\n };\n DataLabel.prototype.calculateRectActualPosition = function (labelLocation, rect, isMinus, series, size, labelIndex, point) {\n var location;\n var labelRect;\n var isOverLap = true;\n var position = 0;\n var collection = this.chart.dataLabelCollections;\n var finalPosition = series.type.indexOf('Range') !== -1 || series.type === 'Hilo' ? 2 : 4;\n while (isOverLap && position < finalPosition) {\n var actualPosition = this.getPosition(position);\n this.fontBackground = series.marker.dataLabel.fill;\n if (series.type.indexOf('Stacking') > -1 && actualPosition === 'Outer') {\n actualPosition = 'Top';\n position++;\n }\n location = this.calculateRectPosition(labelLocation, rect, isMinus, actualPosition, series, size, labelIndex, point);\n if (!this.inverted) {\n if (series.marker.dataLabel.enableRotation) {\n size.width = size.width - point.regions[0].width / 10;\n }\n labelRect = calculateRect(new ChartLocation(this.locationX, location), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect) || labelRect.y > series.clipRect.height;\n if (series.marker.dataLabel.template === null && isOverLap !== true) {\n isOverLap = labelRect.y / 2 + size.height + (actualPosition === 'Outer' ? point.regions[0].height + this.extraSpace : point.regions[0].height - 2 * this.extraSpace) > series.clipRect.height;\n }\n }\n else {\n labelRect = calculateRect(new ChartLocation(location, this.locationY), size, this.margin);\n isOverLap = labelRect.x < 0 || isCollide(labelRect, collection, series.clipRect) ||\n labelRect.x + labelRect.width > series.clipRect.width;\n }\n position++;\n }\n return location;\n };\n // alignment calculation assigned here\n DataLabel.prototype.calculateAlignment = function (value, labelLocation, alignment, isMinus) {\n switch (alignment) {\n case 'Far':\n labelLocation = !this.inverted ? (isMinus ? labelLocation + value : labelLocation - value) :\n (isMinus ? labelLocation - value : labelLocation + value);\n break;\n case 'Near':\n labelLocation = !this.inverted ? (isMinus ? labelLocation - value : labelLocation + value) :\n (isMinus ? labelLocation + value : labelLocation - value);\n break;\n }\n return labelLocation;\n };\n //calculation for top and outer position of datalabel for rect series\n DataLabel.prototype.calculateTopAndOuterPosition = function (location, rect, position, series, index, extraSpace, isMinus, point) {\n var margin = this.margin;\n var top;\n switch (series.type) {\n case 'RangeColumn':\n case 'RangeArea':\n case 'RangeStepArea':\n case 'SplineRangeArea':\n case 'Hilo':\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n break;\n case 'Candle':\n top = (index === 0 || index === 2) && !this.yAxisInversed\n || (index === 1 || index === 3) && this.yAxisInversed;\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top, index > 1);\n break;\n case 'HiloOpenClose':\n if (index <= 1) {\n top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n }\n else {\n if (this.yAxisInversed) {\n location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n }\n else {\n location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n }\n }\n break;\n default:\n if (((isMinus && position === 'Top') || (!isMinus && position === 'Outer')) || (position === 'Top' && series.visiblePoints[point.index].yValue === 0)) {\n location = !this.inverted ? location + (isMinus && series.type === 'Waterfall' ? (-rect.height + extraSpace + margin.bottom) : (-extraSpace - margin.bottom - this.markerHeight)) :\n location + (isMinus && series.type === 'Waterfall' ? (+rect.width - extraSpace - margin.left) : (+extraSpace + margin.left + this.markerHeight));\n }\n else {\n location = !this.inverted ? location + (isMinus && series.type === 'Waterfall' ? (-rect.height - extraSpace - margin.top) : (+extraSpace + margin.top + this.markerHeight)) :\n location + (isMinus && series.type === 'Waterfall' ? (+rect.width + extraSpace + margin.top) : (-extraSpace - margin.right - this.markerHeight));\n }\n break;\n }\n return location;\n };\n /**\n * Updates the location of the data label.\n *\n * @param {LabelPosition} position - The position of the data label.\n * @param {number} location - The initial location of the data label.\n * @param {number} extraSpace - Extra space to adjust the label position.\n * @param {MarginModel} margin - The margin for the chart.\n * @param {Rect} rect - The rectangle associated with the data label.\n * @param {boolean} top - Indicates whether the label is positioned at the top.\n * @param {boolean} inside - Indicates whether the label is inside the chart area.\n * @returns {number} The updated location of the data label.\n */\n DataLabel.prototype.updateLabelLocation = function (position, location, extraSpace, margin, rect, top, inside) {\n if (inside === void 0) { inside = false; }\n if (!this.inverted) {\n if (top) {\n location = (position === 'Outer' && !inside) ? location - extraSpace - margin.bottom - this.markerHeight :\n location + extraSpace + margin.top + this.markerHeight;\n }\n else {\n location = (position === 'Outer' && !inside) ? location + rect.height + extraSpace + margin.top + this.markerHeight :\n location + rect.height - extraSpace - margin.bottom - this.markerHeight;\n }\n }\n else {\n if (top) {\n location = (position === 'Outer' && !inside) ? location + extraSpace + margin.left + this.markerHeight :\n location - extraSpace - margin.right - this.markerHeight;\n }\n else {\n location = (position === 'Outer' && !inside) ? location - rect.width - extraSpace - margin.right - this.markerHeight :\n location - rect.width + extraSpace + margin.left + this.markerHeight;\n }\n }\n return location;\n };\n DataLabel.prototype.calculatePathActualPosition = function (y, markerSize, series, point, size, labelIndex) {\n var points = series.points;\n var index = point.index;\n var yValue = points[index].yValue;\n var position;\n var nextPoint = points.length - 1 > index ? points[index + 1] : null;\n var previousPoint = index > 0 ? points[index - 1] : null;\n var yLocation;\n var isOverLap = true;\n var labelRect;\n var isBottom;\n var positionIndex;\n var collection = this.chart.dataLabelCollections;\n if (series.type === 'Bubble') {\n position = 'Top';\n }\n else if (series.type.indexOf('Step') > -1) {\n position = 'Top';\n if (index) {\n position = (!previousPoint || !previousPoint.visible || (yValue > previousPoint.yValue !== this.yAxisInversed)\n || yValue === previousPoint.yValue) ? 'Top' : 'Bottom';\n }\n }\n else if (series.type === 'BoxAndWhisker') {\n if (labelIndex === 1 || labelIndex === 3 || labelIndex > 4) {\n position = series.yAxis.isAxisInverse ? 'Bottom' : 'Top';\n }\n else if (labelIndex === 2 || labelIndex === 4) {\n position = series.yAxis.isAxisInverse ? 'Top' : 'Bottom';\n }\n else {\n isOverLap = false;\n position = 'Middle';\n yLocation = this.calculatePathPosition(y, position, series, point, size, labelIndex);\n }\n }\n else {\n if (index === 0) {\n position = (!nextPoint || !nextPoint.visible || yValue > nextPoint.yValue ||\n (yValue < nextPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else if (index === points.length - 1) {\n position = (!previousPoint || !previousPoint.visible || yValue > previousPoint.yValue ||\n (yValue < previousPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n }\n else {\n if (!nextPoint.visible && !(previousPoint && previousPoint.visible)) {\n position = 'Top';\n }\n else if (!nextPoint.visible || !previousPoint) {\n position = (nextPoint.yValue > yValue || (previousPoint && previousPoint.yValue > yValue)) ?\n 'Bottom' : 'Top';\n }\n else {\n var slope = (nextPoint.yValue - previousPoint.yValue) / 2;\n var intersectY = (slope * index) + (nextPoint.yValue - (slope * (index + 1)));\n position = !this.yAxisInversed ? intersectY < yValue ? 'Top' : 'Bottom' :\n intersectY < yValue ? 'Bottom' : 'Top';\n }\n }\n }\n isBottom = position === 'Bottom';\n positionIndex = ['Outer', 'Top', 'Bottom', 'Middle', 'Auto'].indexOf(position);\n while (isOverLap && positionIndex < 4) {\n yLocation = this.calculatePathPosition(y, this.getPosition(positionIndex), series, point, size, labelIndex);\n labelRect = calculateRect(new ChartLocation(this.locationX, yLocation), size, this.margin);\n isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect)\n || (labelRect.y + labelRect.height) > series.clipRect.height;\n positionIndex = isBottom ? positionIndex - 1 : positionIndex + 1;\n isBottom = false;\n }\n return yLocation;\n };\n /**\n * Initiates the animation for data labels.\n *\n * @param {Series} series - The series associated with the data labels.\n * @param {Element} [element] - The element to animate.\n * @returns {void}\n */\n DataLabel.prototype.doDataLabelAnimation = function (series, element) {\n var shapeElements = series.shapeElement.childNodes;\n var textNode = series.textElement.childNodes;\n var delay = series.animation.delay + series.animation.duration;\n var duration = series.chart.animated ? series.chart.duration : 200;\n var location;\n var length = element ? 1 : textNode.length;\n var tempElement;\n for (var i = 0; i < length; i++) {\n tempElement = textNode[i];\n if (element) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, duration, 'ZoomIn');\n }\n else {\n location = new ChartLocation((+tempElement.getAttribute('x')) + ((+tempElement.getAttribute('width')) / 2), (+tempElement.getAttribute('y')) + ((+tempElement.getAttribute('height')) / 2));\n markerAnimate(tempElement, delay, duration, series, null, location, true);\n if (shapeElements[i]) {\n tempElement = shapeElements[i];\n location = new ChartLocation((+tempElement.getAttribute('x')) + ((+tempElement.getAttribute('width')) / 2), (+tempElement.getAttribute('y')) + ((+tempElement.getAttribute('height')) / 2));\n markerAnimate(tempElement, delay, duration, series, null, location, true);\n }\n }\n }\n };\n DataLabel.prototype.getPosition = function (index) {\n return (['Outer', 'Top', 'Bottom', 'Middle', 'Auto'][index]);\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n DataLabel.prototype.getModuleName = function () {\n // Returns the module name\n return 'DataLabel';\n };\n /**\n * To destroy the dataLabel for series.\n *\n * @returns {void}\n * @private\n */\n DataLabel.prototype.destroy = function () {\n // Destroy method performed here\n };\n return DataLabel;\n}());\nexport { DataLabel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { getActualDesiredIntervalsCount, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn } from '../../common/utils/helper';\nimport { extend, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `Category` module is used to render category axis.\n */\nvar Category = /** @class */ (function (_super) {\n __extends(Category, _super);\n /**\n * Constructor for the category module.\n *\n * @private\n * @param {Chart} chart - Specifies the chart.\n */\n function Category(chart) {\n return _super.call(this, chart) || this;\n }\n /**\n * The function to calculate the range and labels for the axis.\n *\n * @returns {void}\n */\n Category.prototype.calculateRangeAndInterval = function (size, axis) {\n this.calculateRange(axis);\n this.getActualRange(axis, size);\n this.applyRangePadding(axis, size);\n this.calculateVisibleLabels(axis);\n };\n /**\n * Actual Range for the axis.\n *\n * @private\n */\n Category.prototype.getActualRange = function (axis, size) {\n this.initializeDoubleRange(axis);\n // axis.doubleRange = new DoubleRange(this.min, this.max);\n axis.actualRange = {};\n if (!axis.interval) {\n axis.actualRange.interval = Math.max(1, Math.floor(axis.doubleRange.delta / getActualDesiredIntervalsCount(size, axis)));\n }\n else {\n axis.actualRange.interval = Math.ceil(axis.interval);\n }\n axis.actualRange.min = axis.doubleRange.start;\n axis.actualRange.max = axis.doubleRange.end;\n axis.actualRange.delta = axis.doubleRange.delta;\n };\n /**\n * Padding for the axis.\n *\n * @private\n * @param {Axis} axis - The axis for which padding is applied.\n * @param {Size} size - The size for padding.\n * @returns {void}\n */\n Category.prototype.applyRangePadding = function (axis, size) {\n var isColumn;\n axis.series.forEach(function (element) {\n if (!isColumn) {\n isColumn = element.type.indexOf('Column') > -1 && !(axis.zoomFactor < 1 || axis.zoomPosition > 0) && isNullOrUndefined(axis.minimum) && isNullOrUndefined(axis.maximum);\n }\n });\n var ticks = ((axis.labelPlacement === 'BetweenTicks' || isColumn) && !this.chart.stockChart && this.chart.chartAreaType !== 'PolarRadar') ? 0.5 : 0;\n if (ticks > 0) {\n axis.actualRange.min -= ticks;\n axis.actualRange.max += ticks;\n }\n else {\n axis.actualRange.max += axis.actualRange.max ? 0 : 0.5;\n }\n axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n axis.actualRange.delta = axis.doubleRange.delta;\n this.calculateVisibleRange(size, axis);\n };\n /**\n * Calculate label for the axis.\n *\n * @private\n */\n Category.prototype.calculateVisibleLabels = function (axis) {\n /** Generate axis labels */\n axis.visibleLabels = [];\n axis.visibleRange.interval = axis.visibleRange.interval < 1 ? 1 : axis.visibleRange.interval;\n var tempInterval = Math.ceil(axis.visibleRange.min);\n var labelStyle;\n if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n }\n var position;\n axis.startLabel = axis.labels[Math.round(axis.visibleRange.min)];\n axis.endLabel = axis.labels[Math.floor(axis.visibleRange.max)];\n for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n if (withIn(tempInterval, axis.visibleRange) && axis.labels.length > 0) {\n position = Math.round(tempInterval);\n triggerLabelRender(this.chart, position, axis.labels[position] ? axis.labels[position].toString() : '', labelStyle, axis);\n }\n }\n if (axis.getMaxLabelWidth) {\n axis.getMaxLabelWidth(this.chart);\n }\n };\n /**\n * Get module name\n */\n Category.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Category';\n };\n /**\n * To destroy the category axis.\n *\n * @returns {void}\n * @private\n */\n Category.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n return Category;\n}(NiceInterval));\nexport { Category };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Chart legend\n */\nimport { remove, Browser, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { LegendOptions, BaseLegend } from '../../common/legend/legend';\nimport { textTrim, removeElement, RectOption, withInBounds, blazorTemplatesReset } from '../../common/utils/helper';\nimport { getUnicodeText } from '../../common/utils/helper';\nimport { measureText, Rect, getElement } from '@syncfusion/ej2-svg-base';\nimport { legendRender, legendClick, regSub, regSup } from '../../common/model/constants';\nimport { textWrap } from '../../common/utils/helper';\n/**\n * `Legend` module is used to render legend for the chart.\n */\nvar Legend = /** @class */ (function (_super) {\n __extends(Legend, _super);\n function Legend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for legend module.\n *\n * @returns {void}\n */\n Legend.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on('click', this.click, this);\n this.chart.on(Browser.touchEndEvent, this.mouseEnd, this);\n };\n /**\n * UnBinding events for legend module.\n *\n * @returns {void}\n */\n Legend.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('click', this.click);\n this.chart.off(Browser.touchEndEvent, this.mouseEnd);\n };\n /**\n * To handle mosue move for legend module.\n *\n * @param {MouseEvent} e - The mouse event.\n * @returns {void}\n */\n Legend.prototype.mouseMove = function (e) {\n if (this.chart.legendSettings.visible && !this.chart.isTouch) {\n this.move(e);\n if (this.chart.highlightModule && (this.chart.highlightMode !== 'None' || this.chart.legendSettings.enableHighlight)) {\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n this.legendID + '_shape_', this.legendID + '_g_'];\n var targetId = e.target.id;\n var index = void 0;\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n index = parseInt(targetId.split(id)[1], 10);\n this.chart.highlightModule.legendSelection(this.chart, index, e.target, e.type);\n break;\n }\n }\n // this.click(e);\n }\n }\n };\n /**\n * To handle mosue end for legend module.\n *\n * @param {MouseEvent} e - The mouse event.\n * @returns {void}\n */\n Legend.prototype.mouseEnd = function (e) {\n if (this.chart.legendSettings.visible && this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * Retrieves the legend options based on the visible series collection and chart.\n *\n * @param {Series[]} visibleSeriesCollection - The collection of visible series.\n * @param {Chart} chart - The chart instance.\n * @returns {void}\n */\n Legend.prototype.getLegendOptions = function (visibleSeriesCollection, chart) {\n this.legendCollections = [];\n var seriesType;\n var fill;\n var dashArray;\n var colors = [];\n this.isRtlEnable = chart.enableRtl;\n this.isReverse = !this.isRtlEnable && chart.legendSettings.reverse;\n if (visibleSeriesCollection.length > 1) {\n this.legend.mode = 'Series';\n }\n for (var _i = 0, visibleSeriesCollection_1 = visibleSeriesCollection; _i < visibleSeriesCollection_1.length; _i++) {\n var series = visibleSeriesCollection_1[_i];\n if (this.legend.mode === 'Series') {\n if (series.category !== 'Indicator') {\n seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n series.type;\n dashArray = !series.marker.visible && (seriesType.indexOf('Line') > -1 && seriesType.indexOf('Area') === -1) ? series.dashArray : '';\n // To set legend color when use pointColorMapping\n fill = (series.pointColorMapping && series.points.length > 0) ?\n (series.points[0].interior ? series.points[0].interior : series.interior) : series.interior;\n this.legendCollections.push(new LegendOptions(series.name, fill, series.legendShape, (series.category === 'TrendLine' ?\n this.chart.series[series.sourceIndex].trendlines[series.index].visible : series.visible), seriesType, series.legendImageUrl ? series.legendImageUrl : (series.type === 'Scatter' && series.marker.shape === 'Image' ?\n series.marker.imageUrl : ''), series.marker.shape, series.marker.visible, null, null, dashArray));\n }\n }\n else if (this.legend.mode === 'Point') {\n for (var _a = 0, _b = series.points; _a < _b.length; _a++) {\n var points = _b[_a];\n seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n series.type;\n fill = points.interior ? points.interior : series.interior;\n this.legendCollections.push(new LegendOptions(points.x.toString(), fill, series.legendShape, (series.category === 'TrendLine' ?\n this.chart.series[series.sourceIndex].trendlines[series.index].visible : points.visible), seriesType, (series.type === 'Scatter' && series.marker.shape === 'Image') ? series.marker.imageUrl : '', series.marker.shape, series.marker.visible));\n }\n }\n else if (this.legend.mode === 'Range') {\n for (var _c = 0, _d = series.points; _c < _d.length; _c++) {\n var points = _d[_c];\n seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n series.type;\n fill = points.interior ? points.interior : series.interior;\n var legendLabel = 'Others';\n if (colors.indexOf(fill) < 0) {\n colors.push(fill);\n if (chart.rangeColorSettings.length >= 1 && chart.rangeColorSettings[0].colors.length === 1) {\n for (var _e = 0, _f = chart.rangeColorSettings; _e < _f.length; _e++) {\n var rangeMap = _f[_e];\n if (rangeMap.colors[0] === fill) {\n legendLabel = rangeMap.label;\n }\n }\n this.legendCollections.push(new LegendOptions(legendLabel, fill, series.legendShape, (series.category === 'TrendLine' ?\n this.chart.series[series.sourceIndex].trendlines[series.index].visible : points.visible), seriesType, (series.type === 'Scatter' && series.marker.shape === 'Image') ? series.marker.imageUrl : '', series.marker.shape, series.marker.visible));\n }\n }\n }\n }\n else {\n if (this.legendCollections.length === 0 && chart.rangeColorSettings.length > 0) {\n var startLabel = chart.rangeColorSettings[0].start.toString();\n var endLabel = chart.rangeColorSettings[chart.rangeColorSettings.length - 1].end.toString();\n this.legendCollections.push(new LegendOptions(startLabel, series.interior, 'Rectangle', true, seriesType, '', series.marker.shape, series.marker.visible));\n this.legendCollections.push(new LegendOptions(endLabel, series.interior, 'Rectangle', true, seriesType, '', series.marker.shape, series.marker.visible));\n }\n }\n }\n if (this.isReverse && chart.legendSettings.mode !== 'Gradient') {\n this.legendCollections.reverse();\n }\n };\n /**\n * Calculates the legend bounds based on the available size and legend settings.\n *\n * @param {Size} availableSize - The available size for the legend.\n * @param {Rect} legendBounds - The current bounds of the legend.\n * @param {LegendSettingsModel} legend - The legend settings.\n * @returns {void}\n */\n Legend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n this.calculateLegendTitle(legend, legendBounds);\n this.isTitle = legend.title ? true : false;\n this.chartRowCount = 1;\n this.rowHeights = [];\n this.columnHeights = [];\n this.pageHeights = [];\n var padding = legend.padding;\n var titlePosition = legend.titlePosition;\n var extraHeight = 0;\n var legendOption;\n var extraWidth = 0;\n var arrowWidth = this.arrowWidth;\n var arrowHeight = this.arrowHeight;\n var verticalArrowSpace = this.isVertical && !legend.enablePages ? arrowHeight : 0;\n var titleSpace = this.isTitle && titlePosition === 'Top' ? this.legendTitleSize.height + this.fivePixel : 0;\n titleSpace = this.isTitle && this.isVertical && titlePosition !== 'Top' ? this.legendTitleSize.height + this.fivePixel : titleSpace;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.height += (extraHeight);\n legendBounds.width += extraWidth;\n var shapeWidth = legend.shapeWidth;\n var shapePadding = legend.shapePadding;\n var maximumWidth = 0;\n var rowWidth = 0;\n var legendWidth = 0;\n var columnHeight = 0;\n var columnCount = 0;\n var rowCount = 0;\n var titlePlusArrowSpace = 0;\n var legendEventArgs;\n var render = false;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle, this.chart.themeStyle.legendLabelFont).height, legend.shapeHeight);\n for (var i = 0; i < this.legendCollections.length; i++) {\n legendOption = this.legendCollections[i];\n if (regSub.test(legendOption.text)) {\n legendOption.text = getUnicodeText(legendOption.text, regSub);\n }\n if (regSup.test(legendOption.text)) {\n legendOption.text = getUnicodeText(legendOption.text, regSup);\n }\n legendEventArgs = {\n fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n markerShape: legendOption.markerShape, name: legendRender, cancel: false\n };\n this.chart.trigger(legendRender, legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = legendEventArgs.text;\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.markerShape = legendEventArgs.markerShape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n shapeWidth = legendOption.text ? legend.shapeWidth : 0;\n shapePadding = legendOption.text ? legend.shapePadding : 0;\n if (legendOption.render && legendOption.text) {\n render = true;\n legendWidth = shapeWidth + shapePadding + (legend.maximumLabelWidth ? legend.maximumLabelWidth :\n legendOption.textSize.width) + (!this.isVertical ? (i === 0) ? padding : this.itemPadding : padding);\n rowWidth = rowWidth + legendWidth;\n if (!legend.enablePages && !this.isVertical) {\n titlePlusArrowSpace = this.isTitle && titlePosition !== 'Top' ? this.legendTitleSize.width + this.fivePixel : 0;\n titlePlusArrowSpace += arrowWidth;\n }\n this.getLegendHeight(legendOption, legend, legendBounds, rowWidth, this.maxItemHeight, padding);\n if (legendBounds.width < (padding + rowWidth + titlePlusArrowSpace) || this.isVertical) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding + titlePlusArrowSpace - (this.isVertical ? 0 : legendWidth)));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = this.isVertical ? 0 : legendWidth;\n rowCount++;\n columnCount = 0;\n columnHeight = verticalArrowSpace;\n //columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding + titleSpace + verticalArrowSpace;\n }\n var len = (rowCount > 0 ? (rowCount - 1) : 0);\n this.rowHeights[len] = Math.max((this.rowHeights[len] ?\n this.rowHeights[len] : 0), legendOption.textSize.height);\n // this.maxItemHeight = Math.max(this.maxItemHeight, legendOption.textSize.height);\n this.columnHeights[columnCount] = (this.columnHeights[columnCount] ?\n this.columnHeights[columnCount] : 0) + legendOption.textSize.height +\n (this.isVertical ? (i === 0) ? padding : this.itemPadding : padding);\n columnCount++;\n }\n }\n columnHeight = Math.max.apply(null, this.columnHeights) + padding + titleSpace;\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding + titleSpace);\n this.isPaging = legendBounds.height < columnHeight;\n if (this.isPaging && !legend.enablePages) {\n if (!this.isVertical) {\n columnHeight = (this.maxItemHeight + padding) + padding + (titlePosition === 'Top' ? titleSpace : 0);\n }\n }\n this.totalPages = rowCount;\n if (!this.isPaging && !this.isVertical) {\n rowWidth += this.isTitle && titlePosition !== 'Top' ? (this.fivePixel + this.legendTitleSize.width + this.fivePixel) : 0;\n }\n if (render) {\n this.setBounds(Math.max((rowWidth + padding), maximumWidth), columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n /**\n * Calculates the height of the legend based on the legend options, settings, and available space.\n *\n * @param {LegendOptions} legendOption - The legend options.\n * @param {LegendSettingsModel} legend - The legend settings.\n * @param {Rect} legendBounds - The current bounds of the legend.\n * @param {number} rowWidth - The width of the legend rows.\n * @param {number} legendHeight - The current height of the legend.\n * @param {number} padding - The padding around the legend items.\n * @returns {void}\n */\n Legend.prototype.getLegendHeight = function (legendOption, legend, legendBounds, rowWidth, legendHeight, padding) {\n var legendWidth = legendOption.textSize.width;\n var textPadding = legend.shapePadding + (padding * 2) + legend.shapeWidth;\n switch (legend.textWrap) {\n case 'Wrap':\n case 'AnyWhere':\n if (legendWidth > legend.maximumLabelWidth || legendWidth + rowWidth > legendBounds.width) {\n legendOption.textCollection = textWrap(legendOption.text, (legend.maximumLabelWidth ? Math.min(legend.maximumLabelWidth, (legendBounds.width - textPadding)) :\n (legendBounds.width - textPadding)), legend.textStyle, this.chart.enableRtl, null, null, this.chart.themeStyle.legendLabelFont);\n }\n else {\n legendOption.textCollection.push(legendOption.text);\n }\n legendOption.textSize.height = (legendHeight * legendOption.textCollection.length);\n break;\n }\n };\n /**\n * Calculates the rendering point for the legend item based on various parameters.\n *\n * @param {LegendOptions} legendOption - The legend options.\n * @param {ChartLocation} start - The starting location for the legend.\n * @param {number} textPadding - The padding around the legend text.\n * @param {LegendOptions} previousLegend - The options of the previous legend item.\n * @param {Rect} rect - The bounding rectangle for the legend.\n * @param {number} count - The count of legend items.\n * @param {number} firstLegend - The index of the first legend item.\n * @returns {void}\n */\n Legend.prototype.getRenderPoint = function (legendOption, start, textPadding, previousLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n var textWidth = textPadding + (this.legend.maximumLabelWidth ?\n this.legend.maximumLabelWidth : previousLegend.textSize.width);\n var previousBound = previousLegend.location.x + ((!this.isRtlEnable) ? textWidth : -textWidth);\n if (this.isWithinBounds(previousBound, (this.legend.maximumLabelWidth ?\n this.legend.maximumLabelWidth : legendOption.textSize.width) + textPadding - this.itemPadding, rect) || this.isVertical) {\n legendOption.location.x = start.x;\n if (count !== firstLegend) {\n this.chartRowCount++;\n }\n legendOption.location.y = (count === firstLegend) ? previousLegend.location.y :\n previousLegend.location.y + (this.isVertical ? previousLegend.textSize.height :\n this.rowHeights[(this.chartRowCount - 2)]) + (this.isVertical ? this.itemPadding : padding);\n }\n else {\n legendOption.location.x = (count === firstLegend) ? previousLegend.location.x : previousBound;\n legendOption.location.y = previousLegend.location.y;\n }\n var availwidth = (!this.isRtlEnable) ? (this.legendBounds.x + this.legendBounds.width) - (legendOption.location.x +\n textPadding - this.itemPadding - this.legend.shapeWidth / 2) : (legendOption.location.x - textPadding + this.itemPadding +\n (this.legend.shapeWidth / 2)) - this.legendBounds.x;\n if (!this.isVertical && this.isPaging && !this.legend.enablePages) {\n availwidth = this.legendBounds.width - legendOption.location.x - this.fivePixel;\n }\n availwidth = this.legend.maximumLabelWidth ? Math.min(this.legend.maximumLabelWidth, availwidth) : availwidth;\n if (this.legend.textOverflow === 'Ellipsis' && this.legend.textWrap === 'Normal') {\n legendOption.text = textTrim(+availwidth.toFixed(4), legendOption.text, this.legend.textStyle, this.chart.enableRtl, this.chart.themeStyle.legendLabelFont);\n }\n };\n Legend.prototype.isWithinBounds = function (previousBound, textWidth, rect) {\n if (!this.isRtlEnable) {\n return (previousBound + textWidth) > (rect.x + rect.width + (this.legend.shapeWidth / 2));\n }\n else {\n return (previousBound - textWidth) < (rect.x - (this.legend.shapeWidth / 2));\n }\n };\n /**\n * Handles the click event for a legend item.\n *\n * @param {number} index - The index of the clicked legend item.\n * @param {Event | PointerEvent} event - The click event.\n * @returns {void}\n */\n Legend.prototype.LegendClick = function (index, event) {\n var chart = this.chart;\n var seriesIndex = chart.legendSettings.mode === 'Series' ? index : 0;\n var legendIndex = !this.isReverse ? index : (this.legendCollections.length - 1) - index;\n var series = chart.visibleSeries[seriesIndex];\n var legend = this.legendCollections[legendIndex];\n var changeDetection = 'isProtectedOnChange';\n if (chart.legendSettings.mode === 'Series') {\n var legendClickArgs = {\n legendText: legend.text, legendShape: legend.shape,\n chart: chart.isBlazor ? {} : chart, series: series, points: series.points, name: legendClick, cancel: false\n };\n this.chart.trigger(legendClick, legendClickArgs);\n series.legendShape = legendClickArgs.legendShape;\n if (!legendClickArgs.cancel) {\n if (series.fill !== null) {\n chart.visibleSeries[index].interior = series.fill;\n }\n if (chart.legendSettings.toggleVisibility) {\n series.chart[changeDetection] = true;\n if (series.category === 'TrendLine') {\n if (!chart.series[series.sourceIndex].trendlines[series.index].visible &&\n chart.series[series.sourceIndex].visible) {\n chart.series[series.sourceIndex].trendlines[series.index].visible = true;\n }\n else {\n chart.series[series.sourceIndex].trendlines[series.index].visible = false;\n }\n }\n else {\n this.changeSeriesVisiblity(series, series.visible);\n }\n legend.visible = series.category === 'TrendLine' ? chart.series[series.sourceIndex].trendlines[series.index].visible :\n (series.visible);\n this.refreshLegendToggle(chart, series);\n if (chart.highlightModule && chart.legendSettings.enableHighlight) {\n chart.highlightModule.legendSelection(chart, index, event.target, 'mousemove');\n }\n }\n else if (chart.highlightModule) {\n chart.highlightModule.legendSelection(chart, index, event.target, event.type);\n }\n else if (chart.selectionModule) {\n chart.selectionModule.legendSelection(chart, index, event.target, event.type);\n }\n series.chart[changeDetection] = false;\n }\n }\n else if (chart.legendSettings.mode === 'Point') {\n var point = series.points[index];\n var legendClickArgs = {\n legendText: legend.text, legendShape: legend.shape,\n chart: chart.isBlazor ? {} : chart, series: series, points: [point], name: legendClick, cancel: false\n };\n this.chart.trigger(legendClick, legendClickArgs);\n if (chart.legendSettings.toggleVisibility && !legendClickArgs.cancel) {\n point.visible = !point.visible;\n var legendOption = this.legendCollections[index];\n legendOption.visible = point.visible;\n this.refreshLegendToggle(chart, series);\n }\n }\n else if (chart.legendSettings.mode === 'Range') {\n var points = [];\n var legendOption = this.legendCollections[index];\n for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (legendOption.fill === (point.interior || series.interior)) {\n points.push(point);\n }\n }\n var legendClickArgs = {\n legendText: legend.text, legendShape: legend.shape,\n chart: chart.isBlazor ? {} : chart, series: series, points: points, name: legendClick, cancel: false\n };\n this.chart.trigger(legendClick, legendClickArgs);\n if (chart.legendSettings.toggleVisibility && !legendClickArgs.cancel) {\n legendOption.visible = !legendOption.visible;\n for (var _b = 0, points_1 = points; _b < points_1.length; _b++) {\n var point = points_1[_b];\n point.visible = !point.visible;\n }\n this.refreshLegendToggle(chart, series);\n }\n }\n };\n Legend.prototype.refreshLegendToggle = function (chart, series) {\n var selectedDataIndexes = [];\n if (chart.selectionModule) {\n selectedDataIndexes = extend([], chart.selectionModule.selectedDataIndexes, null, true);\n }\n if ((chart.svgObject.childNodes.length > 0) && !chart.enableAnimation && !chart.enableCanvas) {\n while (chart.svgObject.lastChild) {\n chart.svgObject.removeChild(chart.svgObject.lastChild);\n }\n remove(chart.svgObject);\n }\n chart.animateSeries = false;\n chart.redraw = chart.enableAnimation;\n series.isLegendClicked = true;\n chart.rotatedDataLabelCollections = [];\n removeElement(getElement(chart.element.id + '_Secondary_Element').querySelectorAll('.ejSVGTooltip')[0]);\n blazorTemplatesReset(chart);\n this.redrawSeriesElements(series, chart);\n chart.removeSvg();\n chart.refreshAxis();\n series.refreshAxisLabel();\n this.refreshSeries(chart.visibleSeries);\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series_1 = _a[_i];\n if (!isNullOrUndefined(series_1)) {\n chart.markerRender.removeHighlightedMarker(series_1, null, true);\n }\n }\n chart.refreshBound();\n chart.trigger('loaded', { chart: chart });\n if (selectedDataIndexes.length > 0) {\n chart.selectionModule.selectedDataIndexes = selectedDataIndexes;\n chart.selectionModule.redrawSelection(chart, chart.selectionMode);\n }\n if (chart.highlightModule && chart.highlightMode !== 'None' || chart.legendSettings.enableHighlight) {\n chart.highlightModule.redrawSelection(chart, chart.highlightMode);\n }\n chart.redraw = false;\n series.isLegendClicked = false;\n };\n Legend.prototype.changeSeriesVisiblity = function (series, visibility) {\n series.visible = !visibility;\n if (this.isSecondaryAxis(series.xAxis)) {\n series.xAxis.internalVisibility = series.xAxis.series.some(function (value) { return (value.visible); });\n }\n if (this.isSecondaryAxis(series.yAxis) || (series.category === 'Pareto' && series.type === 'Line')) {\n series.yAxis.internalVisibility = series.yAxis.series.some(function (value) { return (value.visible); });\n }\n if (series.trendlines.length && series.visible) {\n series.trendlines.forEach(function (trendline) {\n trendline.visible = true;\n });\n }\n };\n Legend.prototype.isSecondaryAxis = function (axis) {\n return (this.chart.axes.indexOf(axis) > -1);\n };\n Legend.prototype.redrawSeriesElements = function (series, chart) {\n if (!chart.redraw) {\n return null;\n }\n removeElement(chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index) +\n '_DataLabelCollections');\n };\n Legend.prototype.refreshSeries = function (seriesCollection) {\n for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n var series = seriesCollection_1[_i];\n if (series.type.indexOf('Spline') > -1) {\n var isArea = (series.type.indexOf('Area') > -1 || series.drawType.indexOf('Area') > -1);\n var isRange = series.type.indexOf('Range') > -1;\n this.chart['spline' + (isArea ? isRange ? 'RangeArea' : 'Area' : '') + 'SeriesModule'].findSplinePoint(series);\n }\n if (series.visible) {\n series.position = undefined;\n }\n }\n };\n /**\n * Handles the click event for showing tooltip on trimmed text in legend.\n *\n * @param {Event | PointerEvent} event - The click event.\n * @returns {void}\n */\n Legend.prototype.click = function (event) {\n var _this = this;\n if (!this.chart.legendSettings.visible) {\n return;\n }\n var pageX = this.chart.mouseX;\n var pageY = this.chart.mouseY;\n var legendRegion = [];\n var targetId = event.target.id.indexOf('_chart_legend_g_') > -1 ?\n event.target.firstChild['id'] : event.target.id;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n this.legendID + '_shape_'];\n var seriesIndex;\n for (var _i = 0, legendItemsId_2 = legendItemsId; _i < legendItemsId_2.length; _i++) {\n var id = legendItemsId_2[_i];\n if (targetId.indexOf(id) > -1) {\n seriesIndex = parseInt(targetId.split(id)[1], 10);\n this.LegendClick(seriesIndex, event);\n break;\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n if (this.chart.enableCanvas && this.pagingRegions.length) {\n this.checkWithinBounds(pageX, pageY);\n }\n legendRegion = this.legendRegions.filter(function (region) {\n return (withInBounds(pageX, (pageY + (_this.isPaging ? (_this.currentPageNumber - 1) *\n _this.translatePage(_this.chart.enableCanvas, null, 1, 2) : 0)), region.rect));\n });\n if (legendRegion.length && this.chart.enableCanvas) {\n this.LegendClick(legendRegion[0].index, event);\n }\n };\n /**\n * Checks whether the provided coordinates are within the bounds.\n *\n * @param {number} pageX - The x-coordinate of the mouse pointer.\n * @param {number} pageY - The y-coordinate of the mouse pointer.\n * @returns {void}\n * @protected\n */\n Legend.prototype.checkWithinBounds = function (pageX, pageY) {\n var cRender = this.chart.renderer;\n var bounds = this.legendBounds;\n var borderWidth = this.chart.legendSettings.border.width;\n var canvasRect = new Rect(bounds.x, bounds.y, bounds.width, bounds.height);\n canvasRect.x = canvasRect.x - borderWidth / 2;\n canvasRect.y = canvasRect.y - borderWidth / 2;\n canvasRect.width = canvasRect.width + borderWidth;\n canvasRect.height = canvasRect.height + borderWidth;\n if (withInBounds(pageX, pageY, this.pagingRegions[0])) {\n // pageDown calculations are performing here\n if (!this.isRtlEnable) {\n this.canvasPageDown(cRender, canvasRect, bounds);\n }\n else {\n this.canvasPageUp(cRender, canvasRect, bounds);\n }\n return null;\n }\n if (withInBounds(pageX, pageY, this.pagingRegions[1])) {\n // pageUp calculations are performing here\n if (!this.isRtlEnable) {\n this.canvasPageUp(cRender, canvasRect, bounds);\n }\n else {\n this.canvasPageDown(cRender, canvasRect, bounds);\n }\n return null;\n }\n };\n Legend.prototype.canvasPageDown = function (cRender, canvasRect, bounds) {\n if (--this.currentPageNumber > 0) {\n this.legendRegions = [];\n cRender.clearRect(canvasRect);\n cRender.canvasClip(new RectOption('legendClipPath', 'transparent', { width: 0, color: '' }, null, canvasRect));\n this.renderLegend(this.chart, this.legend, bounds);\n cRender.canvasRestore();\n }\n else {\n ++this.currentPageNumber;\n }\n };\n Legend.prototype.canvasPageUp = function (cRender, canvasRect, bounds) {\n if (++this.currentPageNumber > 0 && this.currentPageNumber <= this.totalNoOfPages) {\n this.legendRegions = [];\n cRender.clearRect(canvasRect);\n cRender.canvasClip(new RectOption('legendClipPath', 'transpaent', { width: 0, color: '' }, null, canvasRect));\n this.renderLegend(this.chart, this.legend, bounds);\n cRender.canvasRestore();\n }\n else {\n --this.currentPageNumber;\n }\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n Legend.prototype.getModuleName = function () {\n return 'Legend';\n };\n /**\n * To destroy the Legend.\n *\n * @returns {void}\n * @private\n */\n Legend.prototype.destroy = function () {\n this.removeEventListener();\n };\n return Legend;\n}(BaseLegend));\nexport { Legend };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ChartLocation } from '../../common/utils/helper';\nimport { stopTimer, removeElement } from '../../common/utils/helper';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { Tooltip as SVGTooltip } from '@syncfusion/ej2-svg-base';\n/**\n * `Tooltip` module is used to render the tooltip for series.\n */\nvar BaseTooltip = /** @class */ (function (_super) {\n __extends(BaseTooltip, _super);\n /**\n * Constructor for tooltip module.\n *\n * @private\n */\n function BaseTooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.element = _this.chart.element;\n _this.textStyle = chart.tooltip.textStyle;\n _this.control = chart;\n _this.template = chart.tooltip.template;\n return _this;\n }\n BaseTooltip.prototype.getElement = function (id) {\n return document.getElementById(id);\n };\n /**\n * Renders the tooltip.\n *\n * @returns {void}\n * @private\n */\n BaseTooltip.prototype.getTooltipElement = function (isTooltip) {\n this.inverted = this.chart.requireInvertedAxis;\n this.header = (this.control.tooltip.header === null) ?\n ((this.control.tooltip.shared) ? '${point.x}' : '${series.name}')\n : (this.control.tooltip.header);\n this.formattedText = [];\n var tooltipDiv = document.getElementById(this.chart.element.id + '_tooltip');\n var isStockChart = this.chart.element.id.indexOf('stockChart') > -1;\n if (!isTooltip && !tooltipDiv || isStockChart) {\n return this.createElement();\n }\n return null;\n };\n BaseTooltip.prototype.createElement = function () {\n var tooltipDiv = document.createElement('div');\n tooltipDiv.id = this.element.id + '_tooltip';\n tooltipDiv.className = 'ejSVGTooltip';\n tooltipDiv.style.pointerEvents = 'none';\n tooltipDiv.style.position = 'absolute';\n tooltipDiv.style.zIndex = '1';\n return tooltipDiv;\n };\n BaseTooltip.prototype.pushData = function (data, isFirst, tooltipDiv, isChart, enable3D) {\n if (data.series.enableTooltip) {\n if (enable3D) {\n this.currentPoints.push(data);\n }\n else if (isChart) {\n this.currentPoints.push(data);\n }\n else {\n this.currentPoints.push(data);\n }\n this.stopAnimation();\n if (tooltipDiv && !document.getElementById(tooltipDiv.id)) {\n if (!this.chart.stockChart) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n else {\n document.getElementById(this.chart.stockChart.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n }\n return true;\n }\n return false;\n };\n BaseTooltip.prototype.removeHighlight = function () {\n var item;\n // let series: Series;\n for (var i = 0, len = this.previousPoints.length; i < len; i++) {\n item = this.previousPoints[i];\n if (item.series.isRectSeries) {\n if (item.series.visible) {\n this.highlightPoint(item.series, item.point.index, false);\n }\n continue;\n }\n // series = item.series as Series;\n }\n };\n BaseTooltip.prototype.highlightPoint = function (series, pointIndex, highlight) {\n var element = this.getElement(this.element.id + '_Series_' + series.index + '_Point_' + pointIndex);\n var selectionModule = this.control.accumulationSelectionModule;\n var isSelectedElement = selectionModule && selectionModule.selectedDataIndexes.length > 0 ? true : false;\n if (element) {\n if ((!isSelectedElement || isSelectedElement && element.getAttribute('class')\n && element.getAttribute('class').indexOf('_ej2_chart_selection_series_') === -1)) {\n if (this.chart.highlightColor !== '' && !isNullOrUndefined(this.chart.highlightColor)) {\n element.setAttribute('fill', (highlight && this.chart.highlightColor !== 'transparent' ? this.chart.highlightColor : series.pointColorMapping !== '' ? (series.points[0]).color : series.points[pointIndex].color || series.interior));\n }\n else {\n element.setAttribute('opacity', (highlight && this.chart.highlightColor !== 'transparent' ? series.opacity / 2 : series.opacity).toString());\n }\n }\n else {\n element.setAttribute('opacity', series.opacity.toString());\n }\n }\n };\n BaseTooltip.prototype.highlightPoints = function () {\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.series.isRectSeries && item.series.category === 'Series') {\n this.highlightPoint(item.series, item.point.index, true);\n }\n }\n };\n BaseTooltip.prototype.createTooltip = function (chart, isFirst, location, clipLocation, point, shapes, offset, bounds, crosshairEnabled, extraPoints, templatePoint, customTemplate) {\n if (crosshairEnabled === void 0) { crosshairEnabled = false; }\n if (extraPoints === void 0) { extraPoints = null; }\n if (templatePoint === void 0) { templatePoint = null; }\n var series = this.currentPoints[0].series;\n var tooltipModule = chart.tooltipModule || chart.tooltip3DModule ||\n chart.accumulationTooltipModule;\n if (!tooltipModule || location === null) { // For the tooltip enable is false.\n removeElement(this.chart.element.id + '_tooltip');\n return;\n }\n if (isFirst) {\n this.svgTooltip = new SVGTooltip({\n opacity: chart.tooltip.opacity ? chart.tooltip.opacity : ((this.chart.theme === 'Material3' || this.chart.theme === 'Material3Dark') ? 1 : 0.75),\n header: this.headerText,\n content: this.text,\n fill: chart.tooltip.fill,\n border: chart.tooltip.border,\n enableAnimation: chart.tooltip.enableAnimation,\n location: location,\n shared: this.control.tooltip.shared,\n crosshair: crosshairEnabled,\n shapes: shapes,\n clipBounds: this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation,\n areaBounds: bounds,\n palette: this.findPalette(),\n template: customTemplate || this.template,\n data: templatePoint,\n theme: chart.theme,\n offset: offset,\n textStyle: chart.tooltip.textStyle,\n isNegative: (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0),\n inverted: this.chart.requireInvertedAxis && series.isRectSeries,\n arrowPadding: this.text.length > 1 || this.chart.stockChart || (this.chart.tooltip.location.x !== null\n || this.chart.tooltip.location.y !== null) ? 0 : 7,\n availableSize: chart.availableSize,\n duration: this.chart.tooltip.duration,\n isCanvas: this.chart.enableCanvas,\n isFixed: (this.chart.tooltip.location.x !== null || this.chart.tooltip.location.y !== null),\n isTextWrap: chart.tooltip.enableTextWrap && chart.getModuleName() === 'chart',\n blazorTemplate: { name: 'Template', parent: this.chart.tooltip },\n controlInstance: this.chart,\n enableRTL: chart.enableRtl,\n controlName: 'Chart',\n allowHighlight: chart.getModuleName() === 'chart' && !series.marker.allowHighlight,\n tooltipRender: function () {\n tooltipModule.removeHighlight();\n tooltipModule.highlightPoints();\n tooltipModule.updatePreviousPoint(extraPoints);\n },\n animationComplete: function (args) {\n if (args.tooltip.fadeOuted) {\n tooltipModule.fadeOut(tooltipModule.previousPoints);\n }\n }\n });\n this.svgTooltip.appendTo(this.getElement(this.element.id + '_tooltip'));\n }\n else {\n if (this.svgTooltip) {\n this.svgTooltip.location = location;\n this.svgTooltip.content = this.text;\n this.svgTooltip.header = this.headerText;\n this.svgTooltip.offset = offset;\n this.svgTooltip.palette = this.findPalette();\n this.svgTooltip.shapes = shapes;\n this.svgTooltip.data = templatePoint;\n this.svgTooltip.template = this.template;\n this.svgTooltip.controlName = 'Chart';\n this.svgTooltip.crosshair = crosshairEnabled;\n this.svgTooltip.textStyle = chart.tooltip.textStyle;\n this.svgTooltip.isNegative = (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0);\n this.svgTooltip.clipBounds = this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation;\n this.svgTooltip.arrowPadding = this.text.length > 1 || this.chart.stockChart || (this.chart.tooltip.location.x !== null\n || this.chart.tooltip.location.y !== null) ? 0 : 7;\n this.svgTooltip.allowHighlight = chart.getModuleName() === 'chart' && !series.marker.allowHighlight;\n this.svgTooltip.dataBind();\n }\n }\n if (this.chart.isReact) {\n this.chart.renderReactTemplates();\n }\n };\n BaseTooltip.prototype.findPalette = function () {\n var colors = [];\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n colors.push(this.findColor(data, data.series));\n }\n return colors;\n };\n BaseTooltip.prototype.findColor = function (data, series) {\n if (series.isRectSeries && (series.type === 'Candle' || series.type === 'Hilo' || series.type === 'HiloOpenClose')) {\n return data.point.color;\n }\n else {\n return (data.point.color && data.point.color !== '#ffffff' ? data.point.color\n : data.point.interior) ||\n series.marker.fill || series.interior;\n }\n };\n BaseTooltip.prototype.updatePreviousPoint = function (extraPoints) {\n if (extraPoints) {\n this.currentPoints = this.currentPoints.concat(extraPoints);\n }\n this.previousPoints = extend([], this.currentPoints, null, true);\n };\n BaseTooltip.prototype.fadeOut = function (data) {\n var svgElement = this.chart.enableCanvas ? this.getElement(this.element.id + '_tooltip_group') :\n this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0);\n if (!isTooltip) {\n this.valueX = null;\n this.valueY = null;\n this.currentPoints = [];\n this.removeHighlight();\n this.removeHighlightedMarker(data, true);\n this.svgTooltip = null;\n this.control.trigger('animationComplete', {});\n }\n };\n /*\n * @hidden\n */\n BaseTooltip.prototype.removeHighlightedMarker = function (data, fadeOut) {\n if (this.chart.markerRender) {\n for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n var item = data_1[_i];\n removeElement(this.element.id + '_Series_' + item.series.index +\n '_Point_' + item.point.index + '_Trackball');\n this.chart.markerRender.removeHighlightedMarker(item.series, item.point, fadeOut);\n }\n }\n this.previousPoints = [];\n };\n // public triggerEvent(point: PointData | AccPointData, isFirst: boolean, textCollection: string, firstText: boolean = true): boolean {\n // let argsData: ITooltipRenderEventArgs = {\n // cancel: false, name: tooltipRender, text: textCollection,\n // point: point.point, series: point.series, textStyle: this.textStyle\n // };\n // this.chart.trigger(tooltipRender, argsData);\n // if (!argsData.cancel) {\n // if (point.series.type === 'BoxAndWhisker') {\n // this.removeText();\n // isFirst = true;\n // }\n // this.formattedText = this.formattedText.concat(argsData.text);\n // this.text = this.formattedText;\n // }\n // return !argsData.cancel;\n // }\n BaseTooltip.prototype.removeText = function () {\n this.textElements = [];\n var element = this.getElement(this.element.id + '_tooltip_group');\n if (element && element.childNodes.length > 0) {\n while (element.lastChild && element.childNodes.length !== 1) {\n element.removeChild(element.lastChild);\n }\n }\n };\n BaseTooltip.prototype.stopAnimation = function () {\n stopTimer(this.toolTipInterval);\n };\n /**\n * Removes the tooltip on mouse leave.\n *\n * @returns {void}\n * @private\n */\n BaseTooltip.prototype.removeTooltip = function (duration) {\n var _this = this;\n var tooltipElement = this.getElement(this.element.id + '_tooltip');\n // const tooltipTemplate: HTMLElement = tooltipElement ? this.getElement(tooltipElement.id + 'parent_template') : null;\n // const isTemplateRendered: boolean = tooltipTemplate && tooltipTemplate.innerText !== '
';\n this.stopAnimation();\n if (tooltipElement && this.previousPoints.length > 0) {\n this.toolTipInterval = +setTimeout(function () {\n if (_this.svgTooltip) {\n _this.svgTooltip.fadeOut();\n }\n }, duration);\n }\n };\n return BaseTooltip;\n}(ChartData));\nexport { BaseTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { extend, Browser, remove } from '@syncfusion/ej2-base';\nimport { PointData, ChartLocation } from '../../common/utils/helper';\nimport { getElement, measureText, Rect } from '@syncfusion/ej2-svg-base';\nimport { valueToCoefficient, removeElement, valueToPolarCoefficient, withInBounds } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\nimport { tooltipRender, sharedTooltipRender } from '../../common/model/constants';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `Tooltip` module is used to render the tooltip for chart series.\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for the Touch module.\n *\n * @param {Chart} chart - The chart instance.\n */\n function Tooltip(chart) {\n var _this = _super.call(this, chart) || this;\n _this.commonXvalues = [];\n _this.addEventListener();\n return _this;\n }\n /**\n * Adds event listeners for the chart.\n *\n * @returns {void}\n */\n Tooltip.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n this.chart.on('tapHold', this.longPress, this);\n this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n Tooltip.prototype.mouseUpHandler = function () {\n var chart = this.control;\n var data = this.getData();\n data.lierIndex = this.lierIndex;\n if (chart.isTouch && !this.isSelected(chart) &&\n ((withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect) && chart.tooltip.shared)\n || !chart.tooltip.shared)) {\n if (!chart.crosshair.enable) {\n this.tooltip();\n if (chart.tooltip.fadeOutMode === 'Move') {\n this.removeTooltip(chart.tooltip.fadeOutDuration);\n }\n }\n else if (chart.startMove && chart.tooltip.fadeOutMode === 'Move') {\n this.removeTooltip(2000);\n }\n }\n else if (!this.findData(data, this.previousPoints[0]) && chart.tooltip.fadeOutMode === 'Click') {\n this.removeTooltip(0);\n }\n };\n Tooltip.prototype.mouseLeaveHandler = function () {\n this.removeTooltip(this.chart.tooltip.fadeOutDuration);\n };\n Tooltip.prototype.mouseMoveHandler = function () {\n var chart = this.chart;\n if (chart.stockChart && chart.stockChart.onPanning) {\n if (chart.mouseY < chart.chartAxisLayoutPanel.seriesClipRect.y) {\n chart.mouseY = chart.chartAxisLayoutPanel.seriesClipRect.y;\n }\n else if (chart.mouseY > chart.chartAxisLayoutPanel.seriesClipRect.y + chart.chartAxisLayoutPanel.seriesClipRect.height) {\n chart.mouseY = chart.chartAxisLayoutPanel.seriesClipRect.y + chart.chartAxisLayoutPanel.seriesClipRect.height;\n }\n }\n // Tooltip for chart series.\n if (!chart.disableTrackTooltip && !this.isSelected(chart)) {\n if (!chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n if (chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n this.tooltip();\n }\n }\n else {\n if (chart.tooltip.shared && chart.tooltip.fadeOutMode === 'Move') {\n this.removeTooltip(this.chart.tooltip.fadeOutDuration);\n }\n }\n }\n };\n /**\n * Handles the long press on chart.\n *\n * @returns {boolean} false\n * @private\n */\n Tooltip.prototype.longPress = function () {\n var chart = this.chart;\n if (chart.crosshair.enable && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n this.tooltip();\n chart.markerRender.markerMove(false);\n }\n return false;\n };\n /**\n * Renders the tooltip.\n *\n * @returns {void}\n */\n Tooltip.prototype.tooltip = function () {\n var elementId = this.chart.enableCanvas ? this.element.id + '_tooltip_group' : this.element.id + '_tooltip_svg';\n var svgElement = this.getElement(elementId);\n // To prevent the disappearance of the tooltip, while resize the stock chart.\n var isStockSvg = this.chart.stockChart && svgElement && (svgElement.firstChild.childNodes.length > 1);\n var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0 && !isStockSvg);\n var tooltipDiv = this.getTooltipElement(isTooltip);\n if (this.chart.enableCanvas && tooltipDiv) {\n document.getElementById(this.chart.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n tooltipDiv.appendChild(document.getElementById(this.chart.element.id + '_tooltip_svg'));\n }\n if (!this.chart.tooltip.shared) {\n this.renderSeriesTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n else {\n this.renderGroupedTooltip(this.chart, !isTooltip, tooltipDiv);\n }\n };\n Tooltip.prototype.findHeader = function (data) {\n if (this.header === '') {\n return '';\n }\n this.header = this.parseTemplate(data.point, data.series, this.header, data.series.xAxis, data.series.yAxis);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n return this.header;\n }\n return '';\n };\n Tooltip.prototype.findShapes = function () {\n if (!this.chart.tooltip.enableMarker) {\n return [];\n }\n var marker = [];\n for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n var data = _a[_i];\n marker.push(data.point.marker.shape || data.series.marker.shape || 'Circle');\n }\n return marker;\n };\n Tooltip.prototype.renderSeriesTooltip = function (chart, isFirst, tooltipDiv) {\n var data = this.getData();\n data.lierIndex = this.lierIndex;\n this.currentPoints = [];\n if (this.findData(data, this.previousPoints[0])) {\n if (!(chart.dataEditingModule && chart.dataEditingModule.isPointDragging) && (this.previousPoints[0] &&\n data.point.index === this.previousPoints[0].point.index && data.series.index === this.previousPoints[0].series.index)) {\n return null;\n }\n if (this.pushData(data, isFirst, tooltipDiv, true)) {\n this.triggerTooltipRender(data, isFirst, this.getTooltipText(data), this.findHeader(data));\n }\n }\n else {\n if (!data.point && this.isRemove && chart.tooltip.fadeOutMode === 'Move') {\n this.removeTooltip(this.chart.tooltip.fadeOutDuration);\n this.isRemove = false;\n }\n else {\n var commonXvalues = this.mergeXvalues(this.chart.visibleSeries);\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible && !(series.category === 'TrendLine')) {\n data = this.getClosestX(chart, series, commonXvalues) || data;\n }\n }\n }\n }\n if (data && data.point) {\n this.findMouseValue(data, chart);\n }\n };\n Tooltip.prototype.triggerTooltipRender = function (point, isFirst, textCollection, headerText) {\n var _this = this;\n var tooltipTemplate;\n var argsData = {\n cancel: false, name: tooltipRender, text: textCollection, headerText: headerText, template: tooltipTemplate,\n series: this.chart.isBlazor ? {} : point.series, textStyle: this.textStyle, point: point.point,\n data: { pointX: point.point.x, pointY: point.point.y, seriesIndex: point.series.index, seriesName: point.series.name,\n pointIndex: point.point.index, pointText: point.point.text }\n };\n var borderWidth = this.chart.border.width;\n var padding = 3;\n var tooltip = this.chart.tooltip;\n var chartTooltipSuccess = function (argsData) {\n if (!argsData.cancel) {\n if (point.series.type === 'BoxAndWhisker') {\n _this.removeText();\n isFirst = true;\n }\n _this.headerText = argsData.headerText;\n _this.formattedText = _this.formattedText.concat(argsData.text);\n _this.text = _this.formattedText;\n var location_1 = _this.getSymbolLocation(point);\n location_1 = location_1 ? location_1 : new ChartLocation(null, null);\n location_1.x = tooltip.location.x !== null ? tooltip.location.x : location_1.x;\n location_1.y = tooltip.location.y !== null ? tooltip.location.y : location_1.y;\n location_1 = (location_1.x === null && location_1.y === null) ? null : location_1;\n _this.createTooltip(_this.chart, isFirst, location_1, point.series.clipRect, point.point, _this.findShapes(), _this.findMarkerHeight(_this.currentPoints[0]), new Rect(borderWidth, borderWidth, _this.chart.availableSize.width - padding - borderWidth * 2, _this.chart.availableSize.height - padding - borderWidth * 2), _this.chart.crosshair.enable, null, _this.getTemplateText(point), _this.template ? argsData.template : '');\n }\n else {\n _this.removeHighlight();\n remove(_this.getElement(_this.element.id + '_tooltip'));\n }\n _this.isRemove = true;\n };\n chartTooltipSuccess.bind(this, point);\n this.chart.trigger(tooltipRender, argsData, chartTooltipSuccess);\n };\n Tooltip.prototype.findMarkerHeight = function (pointData) {\n var markerHeight = 0;\n var series = pointData.series;\n markerHeight = ((series.marker.visible || (this.chart.tooltip.shared &&\n (!series.isRectSeries || series.marker.visible)) || series.type === 'Scatter' || series.drawType === 'Scatter')\n && !(series.type === 'Candle' || series.type === 'Hilo' || series.type === 'HiloOpenClose')) ?\n ((series.marker.height + 2) / 2 + (2 * series.marker.border.width)) : 0;\n return markerHeight;\n };\n Tooltip.prototype.findData = function (data, previous) {\n return data.point && ((!previous || (previous.point !== data.point)) ||\n (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex) || (previous.point === data.point));\n };\n Tooltip.prototype.getSymbolLocation = function (data) {\n var location;\n if (data.series.type !== 'BoxAndWhisker') {\n if (!data.point.symbolLocations[0]) {\n return null;\n }\n location = new ChartLocation(data.point.symbolLocations[0].x, data.point.symbolLocations[0].y);\n }\n switch (data.series.type) {\n case 'BoxAndWhisker':\n return this.getBoxLocation(data);\n case 'Waterfall':\n return this.getWaterfallRegion(data, location);\n case 'RangeArea':\n case 'RangeStepArea':\n case 'SplineRangeArea':\n case 'RangeColumn':\n return this.getRangeArea(data, location);\n default:\n return location;\n }\n };\n Tooltip.prototype.getRangeArea = function (data, location) {\n if (data.point.regions[0]) {\n if (!this.inverted) {\n location.y = data.point.regions[0].y + data.point.regions[0].height / 2;\n }\n else {\n location.x = data.point.regions[0].x + data.point.regions[0].width / 2;\n }\n if (data.series.type === 'RangeStepArea') {\n location.y = data.point.regions[0].y + data.point.regions[0].height / 2 + data.point.regions[0].width;\n }\n }\n return location;\n };\n Tooltip.prototype.getWaterfallRegion = function (data, location) {\n if (!this.inverted) {\n location.y = (data.point.y < 0) ?\n location.y - data.point.regions[0].height : location.y;\n }\n else {\n location.x = (data.point.y < 0) ?\n location.x + data.point.regions[0].width : location.x;\n }\n return location;\n };\n Tooltip.prototype.getTooltipText = function (pointData) {\n var series = pointData.series;\n return this.parseTemplate(pointData.point, series, this.getFormat(this.chart, series), series.xAxis, series.yAxis);\n };\n Tooltip.prototype.getTemplateText = function (data) {\n if (this.template && this.chart.tooltip.shared) {\n var point = [];\n for (var i = 0; i < data.length; i++) {\n point[i] = extend({}, data[i].point);\n point[i].x = this.formatPointValue(data[i].point, data[i].series.xAxis, 'x', true, false);\n if ((data[i].series.seriesType === 'XY')) {\n point[i].y = this.formatPointValue(data[i].point, data[i].series.yAxis, 'y', false, true);\n }\n else {\n point[i].low = this.formatPointValue(data[i].point, data[i].series.yAxis, 'low', false, true);\n point[i].high = this.formatPointValue(data[i].point, data[i].series.yAxis, 'high', false, true);\n }\n }\n return point;\n }\n else if (this.template) {\n var point = extend({}, data.point);\n point.x = this.formatPointValue(data.point, data.series.xAxis, 'x', true, false);\n if ((data.series.seriesType === 'XY')) {\n point.y = this.formatPointValue(data.point, data.series.yAxis, 'y', false, true);\n }\n else {\n point.low = this.formatPointValue(data.point, data.series.yAxis, 'low', false, true);\n point.high = this.formatPointValue(data.point, data.series.yAxis, 'high', false, true);\n }\n return point;\n }\n else {\n return data.point;\n }\n };\n Tooltip.prototype.findMouseValue = function (data, chart) {\n if (!chart.requireInvertedAxis) {\n if (chart.chartAreaType === 'PolarRadar') {\n this.valueX = valueToPolarCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n else {\n this.valueX = (data.series.category === 'TrendLine' && chart.tooltip.shared) ? this.valueX :\n valueToCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n + data.series.xAxis.rect.x;\n }\n this.valueY = chart.mouseY;\n }\n else {\n this.valueY = (1 - valueToCoefficient(data.point.xValue, data.series.xAxis)) * data.series.xAxis.rect.height\n + data.series.xAxis.rect.y;\n this.valueX = chart.mouseX;\n }\n };\n Tooltip.prototype.renderGroupedTooltip = function (chart, isFirst, tooltipDiv) {\n var data;\n var dataCollection = [];\n var lastData;\n var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n this.stopAnimation();\n this.removeHighlight();\n this.currentPoints = [];\n var extraPoints = [];\n var closestXValue = Number.MAX_VALUE;\n var closetYValue = Number.MAX_VALUE;\n var pointXValue;\n var pointYValue;\n var tempData;\n //let headerContent : string = '';\n if (isFirst) {\n if (!chart.stockChart) {\n if (tooltipDiv) {\n document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n }\n else {\n if (tooltipDiv && !getElement(tooltipDiv.id)) {\n document.getElementById(chart.stockChart.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n }\n }\n }\n this.removeText();\n var argument = {\n text: [], cancel: false, name: sharedTooltipRender, data: [], point: [], series: [], headerText: '', textStyle: this.textStyle, template: []\n };\n var i = 0;\n for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (!series.enableTooltip || !series.visible) {\n continue;\n }\n if (chart.chartAreaType === 'Cartesian' && series.visible) {\n data = this.getClosestX(chart, series, this.commonXValue(this.chart.visibleSeries));\n }\n else if (chart.chartAreaType === 'PolarRadar' && series.visible && pointData.point !== null) {\n data = new PointData(series.points[pointData.point.index], series);\n }\n // if (data && this.header !== '' && this.currentPoints.length === 0) {\n // headerContent = this.findHeader(data);\n // }\n if (chart.tooltip.showNearestPoint && !data) {\n data = this.getClosestX(chart, series, this.commonXValue([series]));\n }\n if (data) {\n argument.data.push({ pointX: data.point.x, pointY: data.point.y, seriesIndex: data.series.index,\n seriesName: data.series.name, pointIndex: data.point.index, pointText: data.point.text });\n argument.series[i] = data.series;\n argument.point[i] = data.point;\n argument.headerText = this.findHeader(data);\n this.currentPoints.push(data);\n if (this.template != null) {\n argument.template.push(this.template.toString());\n }\n argument.text.push(this.getTooltipText(data));\n pointXValue = (!chart.requireInvertedAxis) ? chart.mouseX - data.series.clipRect.x : chart.mouseY - data.series.clipRect.y;\n pointYValue = chart.mouseY - data.series.clipRect.y;\n if (data.point.symbolLocations && data.point.symbolLocations.length &&\n Math.abs(pointXValue - data.point.symbolLocations[0].x) <= closestXValue &&\n Math.abs(data.point.symbolLocations[0].y - pointYValue) < Math.abs(closetYValue - pointYValue)) {\n closestXValue = Math.abs(pointXValue - data.point.symbolLocations[0].x);\n closetYValue = data.point.symbolLocations[0].y;\n tempData = data;\n }\n lastData = (data.series.category === 'TrendLine' && chart.tooltip.shared) ? lastData : tempData || data;\n dataCollection.push(data);\n }\n // if (data && this.triggerEvent(data, isFirst, this.getTooltipText(data)), this.findHeader(data)) {\n // this.findMouseValue(data, chart);\n // (this.currentPoints).push(data);\n // data = null;\n // } else if (data) {\n // extraPoints.push(data);\n // }\n i++;\n }\n if (!chart.tooltip.showNearestPoint) {\n var collection = [];\n this.currentPoints = [];\n argument.point = [];\n argument.series = [];\n argument.data = [];\n argument.text = [];\n for (var _b = 0, dataCollection_1 = dataCollection; _b < dataCollection_1.length; _b++) {\n var data_1 = dataCollection_1[_b];\n if (data_1.point.symbolLocations[0].x === lastData.point.symbolLocations[0].x || ((data_1.series.type.indexOf('Column') !== -1 || lastData.series.type.indexOf('Column') !== -1) && (data_1.point.xValue === lastData.point.xValue))) {\n argument.point.push(data_1.point);\n argument.series.push(data_1.series);\n argument.text.push(this.getTooltipText(data_1));\n argument.headerText = this.findHeader(data_1);\n collection.push(data_1);\n argument.data.push({\n pointX: data_1.point.x, pointY: data_1.point.y, seriesIndex: data_1.series.index,\n seriesName: data_1.series.name, pointIndex: data_1.point.index, pointText: data_1.point.text\n });\n }\n }\n dataCollection = collection;\n this.currentPoints = collection;\n }\n if (dataCollection.length > 0 && this.currentPoints.length > 0) { // To avoid console error when we have empty chart with shared tooltip.\n this.triggerSharedTooltip(argument, lastData, extraPoints, chart, isFirst, dataCollection);\n }\n else if (this.getElement(this.element.id + '_tooltip_path')) {\n this.getElement(this.element.id + '_tooltip_path').setAttribute('d', '');\n }\n };\n Tooltip.prototype.triggerSharedTooltip = function (argument, point, extraPoints, chart, isFirst, dataCollection) {\n var _this = this;\n var tooltipTemplate = argument.template;\n var argsData = {\n cancel: false, name: sharedTooltipRender, text: argument.text, headerText: argument.headerText,\n textStyle: argument.textStyle, template: tooltipTemplate,\n point: argument.point, series: argument.series,\n data: argument.data\n };\n var borderWidth = this.chart.border.width;\n var padding = 3;\n var toolbarHeight;\n var titleHeight;\n var currentPoints = [];\n if (chart.stockChart) {\n toolbarHeight = chart.stockChart.enablePeriodSelector ? chart.stockChart.toolbarHeight : 0;\n titleHeight = measureText(this.chart.stockChart.title, this.chart.stockChart.titleStyle, this.chart.themeStyle.tooltipLabelFont).height + 10;\n }\n var sharedTooltip = function (argsData) {\n if (!argsData.cancel) {\n if (point.series.type === 'BoxAndWhisker') {\n _this.removeText();\n isFirst = true;\n }\n for (var i = 0; i < argsData.text.length; i++) {\n if (argsData.text[i]) {\n currentPoints.push(_this.currentPoints[i]);\n }\n }\n _this.currentPoints = currentPoints;\n _this.formattedText = _this.formattedText.concat(argsData.text);\n _this.text = argsData.text;\n _this.headerText = argsData.headerText;\n if (typeof (argsData.template) != 'object') {\n argsData.template = argsData.template.split(',');\n if (argsData.template.length > currentPoints.length) {\n argsData.template = argsData.template.splice(argsData.template.length - 1);\n }\n }\n else {\n if (argsData.template.length > currentPoints.length) {\n argsData.template.splice(argsData.template.length - 1);\n }\n }\n var tooltip = _this.chart.tooltip;\n _this.findMouseValue(point, _this.chart);\n var location_2 = _this.findSharedLocation();\n location_2 = location_2 ? location_2 : new ChartLocation(null, null);\n location_2.x = tooltip.location.x !== null ? tooltip.location.x : location_2.x;\n location_2.y = tooltip.location.y !== null ? tooltip.location.y : location_2.y;\n location_2 = (location_2.x === null && location_2.y === null) ? null : location_2;\n _this.createTooltip(chart, isFirst, location_2, _this.currentPoints.length === 1 ? _this.currentPoints[0].series.clipRect : null, dataCollection.length === 1 ? dataCollection[0].point : null, _this.findShapes(), _this.findMarkerHeight(_this.currentPoints[0]), new Rect(borderWidth, (chart.stockChart ? (toolbarHeight + titleHeight + borderWidth) : borderWidth), _this.chart.availableSize.width - padding - borderWidth * 2, _this.chart.availableSize.height - padding - borderWidth * 2), _this.chart.crosshair.enable, extraPoints, _this.template ? _this.getTemplateText(dataCollection) : null, _this.template ? argsData.template.join('') : '');\n point = null;\n }\n else {\n removeElement(_this.element.id + '_tooltip');\n extraPoints.push(point);\n }\n };\n sharedTooltip.bind(this, point, extraPoints);\n this.chart.trigger(sharedTooltipRender, argsData, sharedTooltip);\n };\n Tooltip.prototype.findSharedLocation = function () {\n var stockChart = this.chart.stockChart;\n if (stockChart) {\n if (this.text.length === 1) {\n this.text.push('');\n }\n var toolbarHeight = stockChart.enablePeriodSelector ? stockChart.toolbarHeight : 0;\n var element = document.getElementById(stockChart.element.id + '_ChartTitle');\n var titleHeight = stockChart.title !== '' ? element.getBoundingClientRect().height + 10 : 0;\n if (stockChart.tooltip.position === 'Nearest') {\n return new ChartLocation(this.valueX, this.valueY + toolbarHeight + titleHeight);\n }\n return new ChartLocation(this.chart.chartAxisLayoutPanel.seriesClipRect.x + 5, this.chart.chartAxisLayoutPanel.seriesClipRect.y + toolbarHeight + 5 + titleHeight);\n }\n else {\n if (this.currentPoints.length > 1) {\n return new ChartLocation(this.valueX, this.valueY);\n }\n else {\n return this.getSymbolLocation(this.currentPoints[0]);\n }\n }\n };\n Tooltip.prototype.getBoxLocation = function (data) {\n var location = this.lierIndex > 3 ? (data.point.outliers.length > 0 ?\n data.point.symbolLocations[this.lierIndex - 4] : null) :\n {\n x: data.point.regions[0].x + (data.point.regions[0].width / 2),\n y: data.point.regions[0].y + (data.point.regions[0].height / 2)\n };\n return location;\n };\n Tooltip.prototype.parseTemplate = function (point, series, format, xAxis, yAxis) {\n var val;\n var textValue;\n var regExp = RegExp;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n val = new regExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(val.source, this.formatPointValue(point, val.source === '${point.x}' ? xAxis : yAxis, dataValue, val.source === '${point.x}', (val.source === '${point.high}' ||\n val.source === '${point.open}' ||\n val.source === '${point.close}' ||\n val.source === '${point.low}' ||\n val.source === '${point.y}' ||\n val.source === '${point.minimum}' ||\n val.source === '${point.maximum}' ||\n val.source === '${point.outliers}' ||\n val.source === '${point.upperQuartile}' ||\n val.source === '${point.lowerQuartile}' ||\n val.source === '${point.median}')));\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n val = new regExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(val.source, textValue);\n }\n return format;\n };\n Tooltip.prototype.formatPointValue = function (point, axis, dataValue, isXPoint, isYPoint) {\n var textValue;\n var customLabelFormat;\n var value;\n if (axis.valueType !== 'Category' && isXPoint) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(point[dataValue])) :\n axis.format(point[dataValue]);\n }\n else if (isYPoint && !isNullOrUndefined(point[dataValue])) {\n customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n value = dataValue === 'outliers' ? axis.format(point[dataValue][this.lierIndex - 4]) :\n axis.format(point[dataValue]);\n textValue = customLabelFormat ? axis.labelFormat.replace('{value}', value) : value;\n }\n else if (dataValue === 'size') {\n var format = this.chart.intl.getNumberFormat({ format: '', useGrouping: this.chart.useGroupingSeparator });\n textValue = typeof point[dataValue] === 'number' ? format(point[dataValue]) : point[dataValue];\n }\n else {\n textValue = point[dataValue];\n }\n return textValue;\n };\n Tooltip.prototype.getFormat = function (chart, series) {\n if (series.tooltipFormat) {\n if (series.seriesType === 'XY' && series.category === 'Indicator') {\n return this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return series.tooltipFormat;\n }\n if (!series.tooltipFormat && chart.tooltip.format) {\n if (series.seriesType === 'XY' && series.category === 'Indicator') {\n return this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return chart.tooltip.format;\n }\n var textX = (series.type === 'Histogram') ? '${point.minimum}' + '-' + '${point.maximum}' : '${point.x}';\n var format = !chart.tooltip.shared ? textX : '${series.name}';\n switch (series.seriesType) {\n case 'XY':\n if (series.category === 'Indicator') {\n this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n }\n return format + ' : ' + ((series.type === 'Bubble') ? '${point.y} Size : ${point.size}' :\n '${point.y}');\n case 'HighLow':\n return format + ('
High : ${point.high}
Low : ${point.low}');\n case 'HighLowOpenClose':\n return format + ('
High : ${point.high}
Low : ${point.low}
' +\n 'Open : ${point.open}
Close : ${point.close}');\n case 'BoxPlot': {\n return format + '
' + (this.lierIndex > 3 ? 'Outliers : ${point.outliers}' :\n 'Maximum : ${point.maximum}
Q3 : ${point.upperQuartile}
' +\n 'Median : ${point.median}
Q1 : ${point.lowerQuartile}
Minimum : ${point.minimum}');\n }\n default: return '';\n }\n };\n Tooltip.prototype.getIndicatorTooltipFormat = function (series, chart, format) {\n var toolTip;\n if (series.seriesType === 'XY') {\n toolTip = series.name + ' : ${point.y}';\n }\n else {\n toolTip = format;\n }\n return toolTip;\n };\n /*\n * @hidden\n */\n Tooltip.prototype.removeHighlightedMarker = function (data, fadeOut) {\n for (var _i = 0, data_2 = data; _i < data_2.length; _i++) {\n var item = data_2[_i];\n removeElement(this.element.id + '_Series_' + item.series.index +\n '_Point_' + item.point.index + '_Trackball');\n if (this.chart.markerRender) {\n this.chart.markerRender.removeHighlightedMarker(item.series, item.point, fadeOut);\n }\n }\n this.previousPoints = [];\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n Tooltip.prototype.getModuleName = function () {\n /**\n * Returns the module name\n */\n return 'Tooltip';\n };\n /**\n * To destroy the tooltip.\n *\n * @returns {void}\n * @private\n */\n Tooltip.prototype.destroy = function () {\n /**\n * Destroy method performed here\n */\n };\n return Tooltip;\n}(BaseTooltip));\nexport { Tooltip };\n","/**\n * Used to `write a string` into output file.\n * @private\n */\nvar PdfWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfWriter` class.\n * @private\n */\n function PdfWriter(stream) {\n this.streamWriter = stream;\n }\n Object.defineProperty(PdfWriter.prototype, \"document\", {\n //properties\n /**\n * Gets and Sets the `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"position\", {\n /**\n * Gets the `position`.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"length\", {\n /**\n * Gets the `length` of the stream'.\n * @private\n */\n get: function () {\n return this.streamWriter.buffer.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfWriter.prototype, \"stream\", {\n /**\n * Gets the `stream`.\n * @private\n */\n get: function () {\n var result = this.streamWriter;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n //public Methods\n /**\n * `Writes the specified data`.\n * @private\n */\n PdfWriter.prototype.write = function (overload) {\n var data = [];\n var tempOverload = overload;\n this.streamWriter.write(tempOverload);\n };\n return PdfWriter;\n}());\nexport { PdfWriter };\n","/**\n * @private\n * @hidden\n */\nexport function defaultToString(item) {\n // if (item === null) {\n // return 'COLLECTION_NULL';\n // } else if (typeof item === 'undefined') {\n // return 'COLLECTION_UNDEFINED';\n // } else if (Object.prototype.toString.call(item) === '[object String]') {\n if (Object.prototype.toString.call(item) === '[object String]') {\n return '$s' + item;\n }\n else {\n return '$o' + item.toString();\n }\n}\n","/**\n * Dictionary.ts class for EJ2-PDF\n * @private\n * @hidden\n */\nimport { defaultToString } from './utils';\n/**\n * @private\n * @hidden\n */\nvar Dictionary = /** @class */ (function () {\n /**\n * @private\n * @hidden\n */\n function Dictionary(toStringFunction) {\n this.table = {};\n this.nElements = 0;\n this.toStr = toStringFunction || defaultToString;\n }\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.getValue = function (key) {\n var pair = this.table['$' + this.toStr(key)];\n if (typeof pair === 'undefined') {\n return undefined;\n }\n return pair.value;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.setValue = function (key, value) {\n // if (typeof key === 'undefined' || typeof value === 'undefined') {\n // return undefined;\n // }\n var ret;\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement === 'undefined') {\n this.nElements++;\n ret = undefined;\n // }\n this.table[k] = {\n key: key,\n value: value\n };\n return ret;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.remove = function (key) {\n var k = '$' + this.toStr(key);\n var previousElement = this.table[k];\n // if (typeof previousElement !== 'undefined') {\n delete this.table[k];\n this.nElements--;\n return previousElement.value;\n // }\n // return undefined;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.keys = function () {\n var keysArray = [];\n var namesOfKeys = Object.keys(this.table);\n for (var index1 = 0; index1 < namesOfKeys.length; index1++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfKeys[index1])) {\n var pair1 = this.table[namesOfKeys[index1]];\n keysArray.push(pair1.key);\n // }\n }\n return keysArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.values = function () {\n var valuesArray = [];\n var namesOfValues = Object.keys(this.table);\n for (var index2 = 0; index2 < namesOfValues.length; index2++) {\n // if (Object.prototype.hasOwnProperty.call(this.table, namesOfValues[index2])) {\n var pair2 = this.table[namesOfValues[index2]];\n valuesArray.push(pair2.value);\n // }\n }\n return valuesArray;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.containsKey = function (key) {\n var retutnValue = true;\n if (typeof this.getValue(key) === 'undefined') {\n retutnValue = true;\n }\n else {\n retutnValue = false;\n }\n return !retutnValue;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.clear = function () {\n this.table = {};\n this.nElements = 0;\n };\n /**\n * @private\n * @hidden\n */\n Dictionary.prototype.size = function () {\n return this.nElements;\n };\n return Dictionary;\n}()); // End of dictionary\nexport { Dictionary };\n","/**\n * public Enum for `CompositeFontType`.\n * @private\n */\nexport var ObjectStatus;\n(function (ObjectStatus) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Registered`.\n * @private\n */\n ObjectStatus[ObjectStatus[\"Registered\"] = 1] = \"Registered\";\n})(ObjectStatus || (ObjectStatus = {}));\n","/**\n * PdfMainObjectCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\nimport { ObjectStatus } from './enum';\n/**\n * The collection of all `objects` within a PDF document.\n * @private\n */\nvar PdfMainObjectCollection = /** @class */ (function () {\n function PdfMainObjectCollection() {\n //Fields\n /**\n * The collection of the `indirect objects`.\n * @default []\n * @private\n */\n this.objectCollections = [];\n /**\n * The collection of the `Indirect objects`.\n * @default new Dictionary()\n * @private\n */\n this.mainObjectCollection = new Dictionary();\n /**\n * The collection of `primitive objects`.\n * @private\n */\n this.primitiveObjectCollection = new Dictionary();\n }\n Object.defineProperty(PdfMainObjectCollection.prototype, \"count\", {\n //Properties\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.objectCollections.length;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the value of `ObjectInfo` from object collection.\n * @private\n */\n PdfMainObjectCollection.prototype.items = function (index) {\n return this.objectCollections[index];\n };\n Object.defineProperty(PdfMainObjectCollection.prototype, \"outIsNew\", {\n //Methods\n /**\n * Specifies the value of `IsNew`.\n * @private\n */\n get: function () {\n return this.isNew;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element.\n * @private\n */\n PdfMainObjectCollection.prototype.add = function (element) {\n var objInfo = new ObjectInfo(element);\n this.objectCollections.push(objInfo);\n if (!this.primitiveObjectCollection.containsKey(element)) {\n this.primitiveObjectCollection.setValue(element, this.objectCollections.length - 1);\n }\n element.position = this.index = this.objectCollections.length - 1;\n element.status = ObjectStatus.Registered;\n };\n /**\n * `Looks` through the collection for the object specified.\n * @private\n */\n PdfMainObjectCollection.prototype.lookFor = function (obj) {\n var index = -1;\n if (obj.position !== -1) {\n return obj.position;\n }\n if (this.primitiveObjectCollection.containsKey(obj) && this.count === this.primitiveObjectCollection.size()) {\n index = this.primitiveObjectCollection.getValue(obj);\n }\n else {\n for (var i = this.count - 1; i >= 0; i--) {\n var oi = this.objectCollections[i];\n if (oi.object === obj) {\n index = i;\n break;\n }\n }\n }\n return index;\n };\n /**\n * Gets the `reference of the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.getReference = function (index, isNew) {\n this.index = this.lookFor(index);\n var reference;\n this.isNew = false;\n var oi = this.objectCollections[this.index];\n reference = oi.reference;\n var obj = { reference: reference, wasNew: isNew };\n return obj;\n };\n /**\n * Tries to set the `reference to the object`.\n * @private\n */\n PdfMainObjectCollection.prototype.trySetReference = function (obj, reference, found) {\n var result = true;\n found = true;\n this.index = this.lookFor(obj);\n var oi = this.objectCollections[this.index];\n oi.setReference(reference);\n return result;\n };\n PdfMainObjectCollection.prototype.destroy = function () {\n for (var _i = 0, _a = this.objectCollections; _i < _a.length; _i++) {\n var obj = _a[_i];\n if (obj !== undefined) {\n obj.pdfObject.position = -1;\n obj.pdfObject.isSaving = undefined;\n obj.pdfObject.objectCollectionIndex = undefined;\n obj.pdfObject.position = undefined;\n }\n }\n this.objectCollections = [];\n this.mainObjectCollection = new Dictionary();\n this.primitiveObjectCollection = new Dictionary();\n };\n return PdfMainObjectCollection;\n}());\nexport { PdfMainObjectCollection };\nvar ObjectInfo = /** @class */ (function () {\n function ObjectInfo(obj, reference) {\n this.pdfObject = obj;\n this.pdfReference = reference;\n }\n Object.defineProperty(ObjectInfo.prototype, \"object\", {\n //Properties\n /**\n * Gets the `object`.\n * @private\n */\n get: function () {\n return this.pdfObject;\n },\n set: function (value) {\n this.pdfObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ObjectInfo.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `reference`.\n * @private\n */\n ObjectInfo.prototype.setReference = function (reference) {\n this.pdfReference = reference;\n };\n return ObjectInfo;\n}());\nexport { ObjectInfo };\n","/**\n * `PdfString` class is used to perform string related primitive operations.\n * @private\n */\nexport var InternalEnum;\n(function (InternalEnum) {\n //Internals\n /**\n * public Enum for `ForceEncoding`.\n * @private\n */\n var ForceEncoding;\n (function (ForceEncoding) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Ascii`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Ascii\"] = 1] = \"Ascii\";\n /**\n * Specifies the type of `Unicode`.\n * @private\n */\n ForceEncoding[ForceEncoding[\"Unicode\"] = 2] = \"Unicode\";\n })(ForceEncoding = InternalEnum.ForceEncoding || (InternalEnum.ForceEncoding = {}));\n /**\n * public Enum for `SourceType`.\n * @private\n */\n var SourceType;\n (function (SourceType) {\n /**\n * Specifies the type of `StringValue`.\n * @private\n */\n SourceType[SourceType[\"StringValue\"] = 0] = \"StringValue\";\n /**\n * Specifies the type of `ByteBuffer`.\n * @private\n */\n SourceType[SourceType[\"ByteBuffer\"] = 1] = \"ByteBuffer\";\n })(SourceType || (SourceType = {}));\n})(InternalEnum || (InternalEnum = {}));\nvar PdfString = /** @class */ (function () {\n function PdfString(value) {\n /**\n * Value indicating whether the string was converted to hex.\n * @default false\n * @private\n */\n this.bHex = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position1 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject1 = null;\n /**\n * `Shows` if the data of the stream was decrypted.\n * @default false\n * @private\n */\n this.bDecrypted = false;\n /**\n * Shows if the data of the stream `was decrypted`.\n * @default false\n * @private\n */\n this.isParentDecrypted = false;\n /**\n * Gets a value indicating whether the object is `packed or not`.\n * @default false\n * @private\n */\n this.isPacked = false;\n /**\n * @hidden\n * @private\n */\n this.isFormField = false;\n /**\n * @hidden\n * @private\n */\n this.isColorSpace = false;\n /**\n * @hidden\n * @private\n */\n this.isHexString = true;\n if (typeof value === 'undefined') {\n this.bHex = false;\n }\n else {\n if (!(value.length > 0 && value[0] === '0xfeff')) {\n this.stringValue = value;\n this.data = [];\n for (var i = 0; i < value.length; ++i) {\n this.data.push(value.charCodeAt(i));\n }\n }\n }\n }\n Object.defineProperty(PdfString.prototype, \"hex\", {\n //Property\n /**\n * Gets a value indicating whether string is in `hex`.\n * @private\n */\n get: function () {\n return this.bHex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"value\", {\n /**\n * Gets or sets string `value` of the object.\n * @private\n */\n get: function () {\n return this.stringValue;\n },\n set: function (value) {\n this.stringValue = value;\n this.data = null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status1;\n },\n set: function (value) {\n this.status1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving1;\n },\n set: function (value) {\n this.isSaving1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index1;\n },\n set: function (value) {\n this.index1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position1;\n },\n set: function (value) {\n this.position1 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"converted\", {\n /**\n * Gets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n get: function () {\n return this.bConverted;\n },\n /**\n * sets a value indicating whether to check if the value has unicode characters.\n * @private\n */\n set: function (value) {\n this.bConverted = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfString.prototype, \"encode\", {\n /**\n * Gets value indicating whether we should convert data to Unicode.\n */\n get: function () {\n return this.bForceEncoding;\n },\n set: function (value) {\n this.bForceEncoding = value;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * Converts `bytes to string using hex format` for representing string.\n * @private\n */\n PdfString.bytesToHex = function (bytes) {\n if (bytes == null) {\n return '';\n }\n var builder = '';\n return builder;\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfString.prototype.save = function (writer) {\n if (writer === null) {\n throw new Error('ArgumentNullException : writer');\n }\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n writer.write(this.pdfEncode());\n }\n else {\n writer.write(PdfString.stringMark[0] + this.value + PdfString.stringMark[1]);\n }\n };\n PdfString.prototype.pdfEncode = function () {\n var result = '';\n if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {\n var data = this.escapeSymbols(this.value);\n for (var i = 0; i < data.length; i++) {\n result += String.fromCharCode(data[i]);\n }\n result = PdfString.stringMark[0] + result + PdfString.stringMark[1];\n }\n else {\n result = this.value;\n }\n return result;\n };\n PdfString.prototype.escapeSymbols = function (value) {\n var data = [];\n for (var i = 0; i < value.length; i++) {\n var currentData = value.charCodeAt(i);\n switch (currentData) {\n case 40:\n case 41:\n data.push(92);\n data.push(currentData);\n break;\n case 13:\n data.push(92);\n data.push(114);\n break;\n case 92:\n data.push(92);\n data.push(currentData);\n break;\n default:\n data.push(currentData);\n break;\n }\n }\n return data;\n };\n /**\n * Creates a `copy of PdfString`.\n * @private\n */\n PdfString.prototype.clone = function (crossTable) {\n if (this.clonedObject1 !== null && this.clonedObject1.CrossTable === crossTable) {\n return this.clonedObject1;\n }\n else {\n this.clonedObject1 = null;\n }\n var newString = new PdfString(this.stringValue);\n newString.bHex = this.bHex;\n newString.crossTable = crossTable;\n newString.isColorSpace = this.isColorSpace;\n this.clonedObject1 = newString;\n return newString;\n };\n /**\n * Converts string to array of unicode symbols.\n */\n PdfString.toUnicodeArray = function (value, bAddPrefix) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var startIndex = 0;\n var output = [];\n for (var i = 0; i < value.length; i++) {\n var code = value.charCodeAt(i);\n output.push(code / 256 >>> 0);\n output.push(code & 0xff);\n }\n return output;\n };\n /**\n * Converts byte data to string.\n */\n PdfString.byteToString = function (data) {\n if (data == null) {\n throw new Error('Argument Null Exception : stream');\n }\n var result = '';\n for (var i = 0; i < data.length; ++i) {\n result += String.fromCharCode(data[i]);\n }\n return result;\n };\n //constants = ;\n /**\n * `General markers` for string.\n * @private\n */\n PdfString.stringMark = '()';\n /**\n * `Hex markers` for string.\n * @private\n */\n PdfString.hexStringMark = '<>';\n /**\n * Format of password data.\n * @private\n */\n PdfString.hexFormatPattern = '{0:X2}';\n return PdfString;\n}());\nexport { PdfString };\n","import { Encoding, validateNullOrUndefined } from './encoding';\nimport { Save } from './save';\n/**\n * StreamWriter class contains the implementation for writing characters to a file in a particular encoding\n * ```typescript\n * let writer = new StreamWriter();\n * writer.write('Hello World');\n * writer.save('Sample.txt');\n * writer.dispose();\n * ```\n */\nvar StreamWriter = /** @class */ (function () {\n /**\n * Initializes a new instance of the StreamWriter class by using the specified encoding.\n * @param {Encoding} encoding?- The character encoding to use.\n */\n function StreamWriter(encoding) {\n this.bufferBlob = new Blob(['']);\n this.bufferText = '';\n this.init(encoding);\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(StreamWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the StreamWriter as Blob.\n * @returns Blob\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StreamWriter.prototype, \"encoding\", {\n /**\n * Gets the encoding.\n * @returns Encoding\n */\n get: function () {\n return this.enc;\n },\n enumerable: true,\n configurable: true\n });\n StreamWriter.prototype.init = function (encoding) {\n if (encoding === null || encoding === undefined) {\n this.enc = new Encoding(false);\n this.enc.type = 'Utf8';\n }\n else {\n this.enc = encoding;\n this.setBomByte();\n }\n };\n /**\n * Private method to set Byte Order Mark(BOM) value based on EncodingType\n */\n StreamWriter.prototype.setBomByte = function () {\n if (this.encoding.includeBom) {\n switch (this.encoding.type) {\n case 'Unicode':\n var arrayUnicode = new ArrayBuffer(2);\n var uint8 = new Uint8Array(arrayUnicode);\n uint8[0] = 255;\n uint8[1] = 254;\n this.bufferBlob = new Blob([arrayUnicode]);\n break;\n case 'Utf8':\n var arrayUtf8 = new ArrayBuffer(3);\n var utf8 = new Uint8Array(arrayUtf8);\n utf8[0] = 239;\n utf8[1] = 187;\n utf8[2] = 191;\n this.bufferBlob = new Blob([arrayUtf8]);\n break;\n default:\n this.bufferBlob = new Blob(['']);\n break;\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - The file name to save\n * @returns {void}\n */\n StreamWriter.prototype.save = function (fileName) {\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Writes the specified string.\n * @param {string} value - The string to write. If value is null or undefined, nothing is written.\n * @returns {void}\n */\n StreamWriter.prototype.write = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText += value;\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n StreamWriter.prototype.flush = function () {\n if (this.bufferText === undefined || this.bufferText === null || this.bufferText.length === 0) {\n return;\n }\n var bufferArray = this.encoding.getBytes(this.bufferText, 0, this.bufferText.length);\n this.bufferText = '';\n this.bufferBlob = new Blob([this.bufferBlob, bufferArray]);\n };\n /**\n * Writes the specified string followed by a line terminator\n * @param {string} value - The string to write. If value is null or undefined, nothing is written\n * @returns {void}\n */\n StreamWriter.prototype.writeLine = function (value) {\n if (this.encoding === undefined) {\n throw new Error('Object Disposed Exception: current writer is disposed');\n }\n validateNullOrUndefined(value, 'string');\n this.bufferText = this.bufferText + value + '\\r\\n';\n if (this.bufferText.length >= 10240) {\n this.flush();\n }\n };\n /**\n * Releases the resources used by the StreamWriter\n * @returns {void}\n */\n StreamWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n this.bufferText = undefined;\n if (this.enc instanceof Encoding) {\n this.enc.destroy();\n }\n this.enc = undefined;\n };\n return StreamWriter;\n}());\nexport { StreamWriter };\n","import { Encoding, StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { PdfDocument } from './pdf-document';\n/**\n * `PdfDocumentBase` class represent common properties of PdfDocument classes.\n * @private\n */\nvar PdfDocumentBase = /** @class */ (function () {\n function PdfDocumentBase(document) {\n /**\n * If the stream is copied, then it specifies true.\n * @private\n */\n this.isStreamCopied = false;\n if (document instanceof PdfDocument) {\n this.document = document;\n }\n }\n Object.defineProperty(PdfDocumentBase.prototype, \"pdfObjects\", {\n //Prpperties\n /**\n * Gets the `PDF objects` collection, which stores all objects and references to it..\n * @private\n */\n get: function () {\n return this.objects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"crossTable\", {\n /**\n * Gets the `cross-reference` table.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"currentSavingObj\", {\n /**\n * Gets or sets the current saving `object number`.\n * @private\n */\n get: function () {\n return this.currentSavingObject;\n },\n set: function (value) {\n this.currentSavingObject = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"catalog\", {\n /**\n * Gets the PDF document `catalog`.\n * @private\n */\n get: function () {\n return this.pdfCatalog;\n },\n set: function (value) {\n this.pdfCatalog = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentBase.prototype, \"viewerPreferences\", {\n /**\n * Gets viewer preferences for presenting the PDF document in a viewer.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets viewer preferences\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfCatalog.viewerPreferences;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Sets the `main object collection`.\n * @private\n */\n PdfDocumentBase.prototype.setMainObjectCollection = function (mainObjectCollection) {\n this.objects = mainObjectCollection;\n };\n /**\n * Sets the `cross table`.\n * @private\n */\n PdfDocumentBase.prototype.setCrossTable = function (cTable) {\n this.pdfCrossTable = cTable;\n };\n /**\n * Sets the `catalog`.\n * @private\n */\n PdfDocumentBase.prototype.setCatalog = function (catalog) {\n this.pdfCatalog = catalog;\n };\n PdfDocumentBase.prototype.save = function (filename) {\n var _this = this;\n var encoding = new Encoding(true);\n var SW = new StreamWriter(encoding);\n if (typeof filename === 'undefined') {\n var encoding_1 = new Encoding(true);\n var SW_1 = new StreamWriter(encoding_1);\n return new Promise(function (resolve, reject) {\n /* tslint:disable-next-line:no-any */\n var obj = {};\n obj.blobData = new Blob([_this.document.docSave(SW_1, true)], { type: 'application/pdf' });\n resolve(obj);\n });\n }\n else {\n this.document.docSave(SW, filename, true);\n }\n };\n /**\n * `Clone` of parent object - PdfDocument.\n * @private\n */\n PdfDocumentBase.prototype.clone = function () {\n return this.document;\n };\n return PdfDocumentBase;\n}());\nexport { PdfDocumentBase };\n","/**\n * `PdfName` class is used to perform name (element names) related primitive operations.\n * @private\n */\nvar PdfName = /** @class */ (function () {\n function PdfName(value) {\n /**\n * `Start symbol` of the name object.\n * @default /\n * @private\n */\n this.stringStartMark = '/';\n /**\n * `Value` of the element.\n * @private\n */\n this.internalValue = '';\n /**\n * Indicates if the object is currently in `saving state or not`.\n * @default false\n * @private\n */\n this.isSaving6 = false;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position6 = -1;\n this.internalValue = this.normalizeValue(value);\n }\n Object.defineProperty(PdfName.prototype, \"status\", {\n //property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status6;\n },\n set: function (value) {\n this.status6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving6;\n },\n set: function (value) {\n this.isSaving6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index6;\n },\n set: function (value) {\n this.index6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position6;\n },\n set: function (value) {\n this.position6 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfName.prototype, \"value\", {\n /**\n * Gets or sets the `value` of the object.\n * @private\n */\n get: function () {\n return this.internalValue;\n },\n set: function (value) {\n // if (value !== this.value) {\n var val = value;\n if (value !== null && value.length > 0) {\n // val = (value.substring(0, 1) === this.stringStartMark) ? value.substring(1) : value;\n val = value;\n this.internalValue = this.normalizeValue(val);\n }\n else {\n this.internalValue = val;\n }\n // }\n },\n enumerable: true,\n configurable: true\n });\n //public methods\n /**\n * `Saves` the name using the specified writer.\n * @private\n */\n PdfName.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.toString());\n };\n /**\n * Gets `string` representation of the primitive.\n * @private\n */\n PdfName.prototype.toString = function () {\n return (this.stringStartMark + this.escapeString(this.value));\n };\n /**\n * Creates a `copy of PdfName`.\n * @private\n */\n PdfName.prototype.clone = function (crossTable) {\n var newName = new PdfName();\n newName.value = this.internalValue;\n return newName;\n };\n /**\n * Replace some characters with its `escape sequences`.\n * @private\n */\n PdfName.prototype.escapeString = function (stringValue) {\n // if (str === null) {\n // throw new Error('ArgumentNullException : str');\n // }\n // if (str === '') {\n // return str;\n // }\n var result = '';\n var len = 0;\n for (var i = 0, len_1 = stringValue.length; i < len_1; i++) {\n var ch = stringValue[i];\n var index = PdfName.delimiters.indexOf(ch);\n // switch (ch) {\n // case '\\r' :\n // result = result + '\\\\r';\n // break;\n // case '\\n' :\n // result = result + '\\n';\n // break;\n // case '(' :\n // case ')' :\n // case '\\\\' :\n // //result.Append( '\\\\' ).Append( ch );\n // result = result + ch;\n // break;\n // default :\n // result = result + ch;\n // break;\n // }\n result = result + ch;\n }\n return result;\n };\n //methiods\n /**\n * Replace a symbol with its code with the precedence of the `sharp sign`.\n * @private\n */\n PdfName.prototype.normalizeValue = function (value, c) {\n // if (typeof c === undefined) {\n // let str : string = value;\n // for (let i : number = 0; i < PdfName.replacements.length; i++) {\n // str = this.normalizeValue(str, c);\n // }\n // return str;\n // } else {\n var strFormat = '#{0:X}';\n //return value.replace(c.toString(),String.format(strFormat,c));\n return value;\n // }\n };\n /**\n * PDF `special characters`.\n * @private\n */\n PdfName.delimiters = '()<>[]{}/%}';\n /**\n * The symbols that are not allowed in PDF names and `should be replaced`.\n * @private\n */\n PdfName.replacements = [' ', '\\t', '\\n', '\\r'];\n return PdfName;\n}());\nexport { PdfName };\n","/**\n * PdfOperators.ts class for EJ2-PDF\n * Class of string PDF common operators.\n * @private\n */\nvar Operators = /** @class */ (function () {\n /**\n * Create an instance of `PdfOperator` class.\n * @private\n */\n function Operators() {\n /**\n * Specifies the value of `test`.\n * @private\n */\n this.forTest = 'test';\n this.forTest = Operators.obj;\n }\n /**\n * Specifies the value of `obj`.\n * @private\n */\n Operators.obj = 'obj';\n /**\n * Specifies the value of `endObj`.\n * @private\n */\n Operators.endObj = 'endobj';\n /**\n * Specifies the value of `R`.\n * @private\n */\n Operators.r = 'R';\n /**\n * Specifies the value of ` `.\n * @private\n */\n Operators.whiteSpace = ' ';\n /**\n * Specifies the value of `/`.\n * @private\n */\n Operators.slash = '/';\n /**\n * Specifies the value of `\\r\\n`.\n * @private\n */\n Operators.newLine = '\\r\\n';\n /**\n * Specifies the value of `stream`.\n * @private\n */\n Operators.stream = 'stream';\n /**\n * Specifies the value of `endStream`.\n * @private\n */\n Operators.endStream = 'endstream';\n /**\n * Specifies the value of `xref`.\n * @private\n */\n Operators.xref = 'xref';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.f = 'f';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.n = 'n';\n /**\n * Specifies the value of `trailer`.\n * @private\n */\n Operators.trailer = 'trailer';\n /**\n * Specifies the value of `startxref`.\n * @private\n */\n Operators.startxref = 'startxref';\n /**\n * Specifies the value of `eof`.\n * @private\n */\n Operators.eof = '%%EOF';\n /**\n * Specifies the value of `header`.\n * @private\n */\n Operators.header = '%PDF-1.5';\n /**\n * Specifies the value of `beginText`.\n * @private\n */\n Operators.beginText = 'BT';\n /**\n * Specifies the value of `endText`.\n * @private\n */\n Operators.endText = 'ET';\n /**\n * Specifies the value of `m`.\n * @private\n */\n Operators.beginPath = 'm';\n /**\n * Specifies the value of `l`.\n * @private\n */\n Operators.appendLineSegment = 'l';\n /**\n * Specifies the value of `S`.\n * @private\n */\n Operators.stroke = 'S';\n /**\n * Specifies the value of `f`.\n * @private\n */\n Operators.fill = 'f';\n /**\n * Specifies the value of `f*`.\n * @private\n */\n Operators.fillEvenOdd = 'f*';\n /**\n * Specifies the value of `B`.\n * @private\n */\n Operators.fillStroke = 'B';\n /**\n * Specifies the value of `B*`.\n * @private\n */\n Operators.fillStrokeEvenOdd = 'B*';\n /**\n * Specifies the value of `c`.\n * @private\n */\n Operators.appendbeziercurve = 'c';\n /**\n * Specifies the value of `re`.\n * @private\n */\n Operators.appendRectangle = 're';\n /**\n * Specifies the value of `q`.\n * @private\n */\n Operators.saveState = 'q';\n /**\n * Specifies the value of `Q`.\n * @private\n */\n Operators.restoreState = 'Q';\n /**\n * Specifies the value of `Do`.\n * @private\n */\n Operators.paintXObject = 'Do';\n /**\n * Specifies the value of `cm`.\n * @private\n */\n Operators.modifyCtm = 'cm';\n /**\n * Specifies the value of `Tm`.\n * @private\n */\n Operators.modifyTM = 'Tm';\n /**\n * Specifies the value of `w`.\n * @private\n */\n Operators.setLineWidth = 'w';\n /**\n * Specifies the value of `J`.\n * @private\n */\n Operators.setLineCapStyle = 'J';\n /**\n * Specifies the value of `j`.\n * @private\n */\n Operators.setLineJoinStyle = 'j';\n /**\n * Specifies the value of `d`.\n * @private\n */\n Operators.setDashPattern = 'd';\n /**\n * Specifies the value of `i`.\n * @private\n */\n Operators.setFlatnessTolerance = 'i';\n /**\n * Specifies the value of `h`.\n * @private\n */\n Operators.closePath = 'h';\n /**\n * Specifies the value of `s`.\n * @private\n */\n Operators.closeStrokePath = 's';\n /**\n * Specifies the value of `b`.\n * @private\n */\n Operators.closeFillStrokePath = 'b';\n /**\n * Specifies the value of `setCharacterSpace`.\n * @private\n */\n Operators.setCharacterSpace = 'Tc';\n /**\n * Specifies the value of `setWordSpace`.\n * @private\n */\n Operators.setWordSpace = 'Tw';\n /**\n * Specifies the value of `setHorizontalScaling`.\n * @private\n */\n Operators.setHorizontalScaling = 'Tz';\n /**\n * Specifies the value of `setTextLeading`.\n * @private\n */\n Operators.setTextLeading = 'TL';\n /**\n * Specifies the value of `setFont`.\n * @private\n */\n Operators.setFont = 'Tf';\n /**\n * Specifies the value of `setRenderingMode`.\n * @private\n */\n Operators.setRenderingMode = 'Tr';\n /**\n * Specifies the value of `setTextRise`.\n * @private\n */\n Operators.setTextRise = 'Ts';\n /**\n * Specifies the value of `setTextScaling`.\n * @private\n */\n Operators.setTextScaling = 'Tz';\n /**\n * Specifies the value of `setCoords`.\n * @private\n */\n Operators.setCoords = 'Td';\n /**\n * Specifies the value of `goToNextLine`.\n * @private\n */\n Operators.goToNextLine = 'T*';\n /**\n * Specifies the value of `setText`.\n * @private\n */\n Operators.setText = 'Tj';\n /**\n * Specifies the value of `setTextWithFormatting`.\n * @private\n */\n Operators.setTextWithFormatting = 'TJ';\n /**\n * Specifies the value of `setTextOnNewLine`.\n * @private\n */\n Operators.setTextOnNewLine = '\\'';\n /**\n * Specifies the value of `selectcolorspaceforstroking`.\n * @private\n */\n Operators.selectcolorspaceforstroking = 'CS';\n /**\n * Specifies the value of `selectcolorspacefornonstroking`.\n * @private\n */\n Operators.selectcolorspacefornonstroking = 'cs';\n /**\n * Specifies the value of `setrbgcolorforstroking`.\n * @private\n */\n Operators.setrbgcolorforstroking = 'RG';\n /**\n * Specifies the value of `setrbgcolorfornonstroking`.\n * @private\n */\n Operators.setrbgcolorfornonstroking = 'rg';\n /**\n * Specifies the value of `K`.\n * @private\n */\n Operators.setcmykcolorforstroking = 'K';\n /**\n * Specifies the value of `k`.\n * @private\n */\n Operators.setcmykcolorfornonstroking = 'k';\n /**\n * Specifies the value of `G`.\n * @private\n */\n Operators.setgraycolorforstroking = 'G';\n /**\n * Specifies the value of `g`.\n * @private\n */\n Operators.setgraycolorfornonstroking = 'g';\n /**\n * Specifies the value of `W`.\n * @private\n */\n Operators.clipPath = 'W';\n /**\n * Specifies the value of `clipPathEvenOdd`.\n * @private\n */\n Operators.clipPathEvenOdd = 'W*';\n /**\n * Specifies the value of `n`.\n * @private\n */\n Operators.endPath = 'n';\n /**\n * Specifies the value of `setGraphicsState`.\n * @private\n */\n Operators.setGraphicsState = 'gs';\n /**\n * Specifies the value of `%`.\n * @private\n */\n Operators.comment = '%';\n /**\n * Specifies the value of `*`.\n * @private\n */\n Operators.evenOdd = '*';\n /**\n * Specifies the value of `M`.\n * @private\n */\n Operators.setMiterLimit = 'M';\n /**\n * Same as SC, but also supports Pattern, Separation, DeviceN, and ICCBased color spaces. For non-stroking operations.\n * @public\n */\n Operators.setColorAndPattern = 'scn';\n /**\n * Same as SC, but also supports Pattern, Separation, DeviceN, and ICCBased color spaces. For stroking.\n */\n Operators.setColorAndPatternStroking = 'SCN';\n return Operators;\n}());\nexport { Operators };\n","/**\n * dictionaryProperties.ts class for EJ2-PDF\n * PDF dictionary properties.\n * @private\n */\nvar DictionaryProperties = /** @class */ (function () {\n /**\n * Initialize an instance for `PdfDictionaryProperties` class.\n * @private\n */\n function DictionaryProperties() {\n /**\n * Specifies the value of `Pages`.\n * @private\n */\n this.pages = 'Pages';\n /**\n * Specifies the value of `Kids`.\n * @private\n */\n this.kids = 'Kids';\n /**\n * Specifies the value of `Count`.\n * @private\n */\n this.count = 'Count';\n /**\n * Specifies the value of `Resources`.\n * @private\n */\n this.resources = 'Resources';\n /**\n * Specifies the value of `Type`.\n * @private\n */\n this.type = 'Type';\n /**\n * Specifies the value of `Size`.\n * @private\n */\n this.size = 'Size';\n /**\n * Specifies the value of `MediaBox`.\n * @private\n */\n this.mediaBox = 'MediaBox';\n /**\n * Specifies the value of `Parent`.\n * @private\n */\n this.parent = 'Parent';\n /**\n * Specifies the value of `Root`.\n * @private\n */\n this.root = 'Root';\n /**\n * Specifies the value of `DecodeParms`.\n * @private\n */\n this.decodeParms = 'DecodeParms';\n /**\n * Specifies the value of `Filter`.\n * @private\n */\n this.filter = 'Filter';\n /**\n * Specifies the value of `Font`.\n * @private\n */\n this.font = 'Font';\n /**\n * Specifies the value of `Type1`.\n * @private\n */\n this.type1 = 'Type1';\n /**\n * Specifies the value of `BaseFont`.\n * @private\n */\n this.baseFont = 'BaseFont';\n /**\n * Specifies the value of `Encoding`.\n * @private\n */\n this.encoding = 'Encoding';\n /**\n * Specifies the value of `Subtype`.\n * @private\n */\n this.subtype = 'Subtype';\n /**\n * Specifies the value of `Contents`.\n * @private\n */\n this.contents = 'Contents';\n /**\n * Specifies the value of `ProcSet`.\n * @private\n */\n this.procset = 'ProcSet';\n /**\n * Specifies the value of `ColorSpace`.\n * @private\n */\n this.colorSpace = 'ColorSpace';\n /**\n * Specifies the value of `ExtGState`.\n * @private\n */\n this.extGState = 'ExtGState';\n /**\n * Specifies the value of `Pattern`.\n * @private\n */\n this.pattern = 'Pattern';\n /**\n * Specifies the value of `XObject`.\n * @private\n */\n this.xObject = 'XObject';\n /**\n * Specifies the value of `Length`.\n * @private\n */\n this.length = 'Length';\n /**\n * Specifies the value of `Width`.\n * @private\n */\n this.width = 'Width';\n /**\n * Specifies the value of `Height`.\n * @private\n */\n this.height = 'Height';\n /**\n * Specifies the value of `BitsPerComponent`.\n * @private\n */\n this.bitsPerComponent = 'BitsPerComponent';\n /**\n * Specifies the value of `Image`.\n * @private\n */\n this.image = 'Image';\n /**\n * Specifies the value of `dctdecode`.\n * @private\n */\n this.dctdecode = 'DCTDecode';\n /**\n * Specifies the value of `Columns`.\n * @private\n */\n this.columns = 'Columns';\n /**\n * Specifies the value of `BlackIs1`.\n * @private\n */\n this.blackIs1 = 'BlackIs1';\n /**\n * Specifies the value of `K`.\n * @private\n */\n this.k = 'K';\n /**\n * Specifies the value of `S`.\n * @private\n */\n this.s = 'S';\n /**\n * Specifies the value of `Predictor`.\n * @private\n */\n this.predictor = 'Predictor';\n /**\n * Specifies the value of `DeviceRGB`.\n * @private\n */\n this.deviceRgb = 'DeviceRGB';\n /**\n * Specifies the value of `Next`.\n * @private\n */\n this.next = 'Next';\n /**\n * Specifies the value of `Action`.\n * @private\n */\n this.action = 'Action';\n /**\n * Specifies the value of `Link`.\n * @private\n */\n this.link = 'Link';\n /**\n *\n * Specifies the value of `A`.\n * @private\n */\n this.a = 'A';\n /**\n * Specifies the value of `Annot`.\n * @private\n */\n this.annot = 'Annot';\n /**\n * Specifies the value of `P`.\n * @private\n */\n this.p = 'P';\n /**\n * Specifies the value of `C`.\n * @private\n */\n this.c = 'C';\n /**\n * Specifies the value of `Rect`.\n * @private\n */\n this.rect = 'Rect';\n /**\n * Specifies the value of `URI`.\n * @private\n */\n this.uri = 'URI';\n /**\n * Specifies the value of `Annots`.\n * @private\n */\n this.annots = 'Annots';\n /**\n * Specifies the value of `ca`.\n * @private\n */\n this.ca = 'ca';\n /**\n * Specifies the value of `CA`.\n * @private\n */\n this.CA = 'CA';\n /**\n * Specifies the value of `XYZ`.\n * @private\n */\n this.xyz = 'XYZ';\n /**\n * Specifies the value of `Fit`.\n * @private\n */\n this.fit = 'Fit';\n /**\n * Specifies the value of `Dest`.\n * @private\n */\n this.dest = 'Dest';\n /**\n * Specifies the value of `BM`.\n * @private\n */\n this.BM = 'BM';\n /**\n * Specifies the value of `flatedecode`.\n * @private\n */\n this.flatedecode = 'FlateDecode';\n /**\n * Specifies the value of `Rotate`.\n * @private\n */\n this.rotate = 'Rotate';\n /**\n * Specifies the value of 'bBox'.\n * @private\n */\n this.bBox = 'BBox';\n /**\n * Specifies the value of 'form'.\n * @private\n */\n this.form = 'Form';\n /**\n * Specifies the value of 'w'.\n * @private\n */\n this.w = 'W';\n /**\n * Specifies the value of 'cIDFontType2'.\n * @private\n */\n this.cIDFontType2 = 'CIDFontType2';\n /**\n * Specifies the value of 'cIDToGIDMap'.\n * @private\n */\n this.cIDToGIDMap = 'CIDToGIDMap';\n /**\n * Specifies the value of 'identity'.\n * @private\n */\n this.identity = 'Identity';\n /**\n * Specifies the value of 'dw'.\n * @private\n */\n this.dw = 'DW';\n /**\n * Specifies the value of 'fontDescriptor'.\n * @private\n */\n this.fontDescriptor = 'FontDescriptor';\n /**\n * Specifies the value of 'cIDSystemInfo'.\n * @private\n */\n this.cIDSystemInfo = 'CIDSystemInfo';\n /**\n * Specifies the value of 'fontName'.\n * @private\n */\n this.fontName = 'FontName';\n /**\n * Specifies the value of 'flags'.\n * @private\n */\n this.flags = 'Flags';\n /**\n * Specifies the value of 'fontBBox'.\n * @private\n */\n this.fontBBox = 'FontBBox';\n /**\n * Specifies the value of 'missingWidth'.\n * @private\n */\n this.missingWidth = 'MissingWidth';\n /**\n * Specifies the value of 'stemV'.\n * @private\n */\n this.stemV = 'StemV';\n /**\n * Specifies the value of 'italicAngle'.\n * @private\n */\n this.italicAngle = 'ItalicAngle';\n /**\n * Specifies the value of 'capHeight'.\n * @private\n */\n this.capHeight = 'CapHeight';\n /**\n * Specifies the value of 'ascent'.\n * @private\n */\n this.ascent = 'Ascent';\n /**\n * Specifies the value of 'descent'.\n * @private\n */\n this.descent = 'Descent';\n /**\n * Specifies the value of 'leading'.\n * @private\n */\n this.leading = 'Leading';\n /**\n * Specifies the value of 'avgWidth'.\n * @private\n */\n this.avgWidth = 'AvgWidth';\n /**\n * Specifies the value of 'fontFile2'.\n * @private\n */\n this.fontFile2 = 'FontFile2';\n /**\n * Specifies the value of 'maxWidth'.\n * @private\n */\n this.maxWidth = 'MaxWidth';\n /**\n * Specifies the value of 'xHeight'.\n * @private\n */\n this.xHeight = 'XHeight';\n /**\n * Specifies the value of 'stemH'.\n * @private\n */\n this.stemH = 'StemH';\n /**\n * Specifies the value of 'registry'.\n * @private\n */\n this.registry = 'Registry';\n /**\n * Specifies the value of 'ordering'.\n * @private\n */\n this.ordering = 'Ordering';\n /**\n * Specifies the value of 'supplement'.\n * @private\n */\n this.supplement = 'Supplement';\n /**\n * Specifies the value of 'type0'.\n * @private\n */\n this.type0 = 'Type0';\n /**\n * Specifies the value of 'identityH'.\n * @private\n */\n this.identityH = 'Identity-H';\n /**\n * Specifies the value of 'toUnicode'.\n * @private\n */\n this.toUnicode = 'ToUnicode';\n /**\n * Specifies the value of 'descendantFonts'.\n * @private\n */\n this.descendantFonts = 'DescendantFonts';\n /**\n * Specifies the value of 'background'.\n * @private\n */\n this.background = 'Background';\n /**\n * Specifies the value of 'shading'.\n * @private\n */\n this.shading = 'Shading';\n /**\n * Specifies the value of 'matrix'.\n * @private\n */\n this.matrix = 'Matrix';\n /**\n * Specifies the value of 'antiAlias'.\n * @private\n */\n this.antiAlias = 'AntiAlias';\n /**\n * Specifies the value of 'function'.\n * @private\n */\n this.function = 'Function';\n /**\n * Specifies the value of 'extend'.\n * @private\n */\n this.extend = 'Extend';\n /**\n * Specifies the value of 'shadingType'.\n * @private\n */\n this.shadingType = 'ShadingType';\n /**\n * Specifies the value of 'coords'.\n * @private\n */\n this.coords = 'Coords';\n /**\n * Specifies the value of 'domain'.\n * @private\n */\n this.domain = 'Domain';\n /**\n * Specifies the value of 'range'.\n * @private\n */\n this.range = 'Range';\n /**\n * Specifies the value of 'functionType'.\n * @private\n */\n this.functionType = 'FunctionType';\n /**\n * Specifies the value of 'bitsPerSample'.\n * @private\n */\n this.bitsPerSample = 'BitsPerSample';\n /**\n * Specifies the value of 'patternType'.\n * @private\n */\n this.patternType = 'PatternType';\n /**\n * Specifies the value of 'paintType'.\n * @private\n */\n this.paintType = 'PaintType';\n /**\n * Specifies the value of 'tilingType'.\n * @private\n */\n this.tilingType = 'TilingType';\n /**\n * Specifies the value of 'xStep'.\n * @private\n */\n this.xStep = 'XStep';\n /**\n * Specifies the value of 'yStep'.\n * @private\n */\n this.yStep = 'YStep';\n /**\n * Specifies the value of viewer preferences.\n * @private\n */\n this.viewerPreferences = 'ViewerPreferences';\n /**\n * Specifies the value of center window.\n * @private\n */\n this.centerWindow = 'CenterWindow';\n /**\n * Specifies the value of display title.\n * @private\n */\n this.displayTitle = 'DisplayTitle';\n /**\n * Specifies the value of fit window.\n * @private\n */\n this.fitWindow = 'FitWindow';\n /**\n * Specifies the value of hide menu bar.\n * @private\n */\n this.hideMenuBar = 'HideMenubar';\n /**\n * Specifies the value of hide tool bar.\n * @private\n */\n this.hideToolBar = 'HideToolbar';\n /**\n * Specifies the value of hide window UI.\n * @private\n */\n this.hideWindowUI = 'HideWindowUI';\n /**\n * Specifies the value of page mode.\n * @private\n */\n this.pageMode = 'PageMode';\n /**\n * Specifies the value of page layout.\n * @private\n */\n this.pageLayout = 'PageLayout';\n /**\n * Specifies the value of duplex.\n * @private\n */\n this.duplex = 'Duplex';\n /**\n * Specifies the value of print scaling.\n * @private\n */\n this.printScaling = 'PrintScaling';\n //\n }\n return DictionaryProperties;\n}());\nexport { DictionaryProperties };\n","import { Dictionary } from './../collections/dictionary';\nimport { PdfName } from './pdf-name';\nimport { Operators } from './../input-output/pdf-operators';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * `PdfDictionary` class is used to perform primitive operations.\n * @private\n */\nvar PdfDictionary = /** @class */ (function () {\n function PdfDictionary(dictionary) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position7 = -1;\n /**\n * The `IPdfSavable` with the specified key.\n * @private\n */\n this.primitiveItems = new Dictionary();\n /**\n * `Start marker` for dictionary.\n * @private\n */\n this.prefix = '<<';\n /**\n * `End marker` for dictionary.\n * @private\n */\n this.suffix = '>>';\n /**\n * @hidden\n * @private\n */\n this.resources = [];\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.object = null;\n /**\n * Flag for PDF file formar 1.5 is dictionary `archiving` needed.\n * @default true\n * @private\n */\n this.archive = true;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isResource = false;\n if (typeof dictionary === 'undefined') {\n this.primitiveItems = new Dictionary();\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n else {\n this.primitiveItems = new Dictionary();\n var keys = dictionary.items.keys();\n var values = dictionary.items.values();\n for (var index = 0; index < dictionary.items.size(); index++) {\n this.primitiveItems.setValue(keys[index], values[index]);\n }\n this.status = dictionary.status;\n this.freezeChanges(this);\n this.encrypt = true;\n this.dictionaryProperties = new DictionaryProperties();\n }\n }\n Object.defineProperty(PdfDictionary.prototype, \"items\", {\n //Properties\n /**\n * Gets or sets the `IPdfSavable` with the specified key.\n * @private\n */\n get: function () {\n return this.primitiveItems;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status7;\n },\n set: function (value) {\n this.status7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving7;\n },\n set: function (value) {\n this.isSaving7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index7;\n },\n set: function (value) {\n this.index7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position7;\n },\n set: function (value) {\n this.position7 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.primitiveItems.size();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDictionary.prototype, \"Dictionary\", {\n /**\n * Collection of `items` in the object.\n * @private\n */\n get: function () {\n return this;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.getArchive = function () {\n return this.archive;\n };\n /**\n * Set flag if need to `archive` dictionary.\n * @private\n */\n PdfDictionary.prototype.setArchive = function (value) {\n this.archive = value;\n };\n /**\n * Sets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.setEncrypt = function (value) {\n this.encrypt = value;\n this.modify();\n };\n /**\n * Gets flag if `encryption` is needed.\n * @private\n */\n PdfDictionary.prototype.getEncrypt = function () {\n return this.encrypt;\n };\n /**\n * `Freezes` the changes.\n * @private\n */\n PdfDictionary.prototype.freezeChanges = function (freezer) {\n this.bChanged = false;\n };\n /**\n * Creates a `copy of PdfDictionary`.\n * @private\n */\n PdfDictionary.prototype.clone = function (crossTable) {\n //Need to add more codings\n var newDict = new PdfDictionary();\n return newDict;\n };\n /**\n * `Mark` this instance modified.\n * @private\n */\n PdfDictionary.prototype.modify = function () {\n this.bChanged = true;\n };\n /**\n * `Removes` the specified key.\n * @private\n */\n PdfDictionary.prototype.remove = function (key) {\n if (typeof key !== 'string') {\n this.primitiveItems.remove(key.value);\n this.modify();\n }\n else {\n this.remove(new PdfName(key));\n }\n };\n /**\n * `Determines` whether the dictionary contains the key.\n * @private\n */\n PdfDictionary.prototype.containsKey = function (key) {\n var returnValue = false;\n returnValue = this.primitiveItems.containsKey(key.toString());\n return returnValue;\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginSave = function () {\n this.beginSave.sender.beginSave();\n };\n /**\n * Raises event `Font Dictionary BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onFontDictionaryBeginSave = function () {\n this.fontDictionaryBeginSave.sender.fontDictionaryBeginSave();\n };\n /**\n * Raises event `Descendant Font BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onDescendantFontBeginSave = function () {\n this.descendantFontBeginSave.sender.descendantFontBeginSave();\n };\n /**\n * Raises event 'BeginSave'.\n * @private\n */\n PdfDictionary.prototype.onTemplateBeginSave = function () {\n this.pageBeginDrawTemplate.sender.pageBeginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onBeginAnnotationSave = function () {\n this.annotationBeginSave.sender.beginSave();\n };\n /**\n * Raises event `BeginSave`.\n * @private\n */\n PdfDictionary.prototype.onSectionBeginSave = function (writer) {\n var saveEvent = this.sectionBeginSave;\n saveEvent.sender.beginSave(saveEvent.state, writer);\n };\n PdfDictionary.prototype.save = function (writer, bRaiseEvent) {\n if (typeof bRaiseEvent === 'undefined') {\n this.save(writer, true);\n }\n else {\n writer.write(this.prefix);\n if (typeof this.beginSave !== 'undefined') {\n this.onBeginSave();\n }\n if (typeof this.descendantFontBeginSave !== 'undefined') {\n this.onDescendantFontBeginSave();\n }\n if (typeof this.fontDictionaryBeginSave !== 'undefined') {\n this.onFontDictionaryBeginSave();\n }\n if (typeof this.annotationBeginSave !== 'undefined') {\n this.onBeginAnnotationSave();\n }\n if (typeof this.sectionBeginSave !== 'undefined') {\n this.onSectionBeginSave(writer);\n }\n if (typeof this.pageBeginDrawTemplate !== 'undefined') {\n this.onTemplateBeginSave();\n }\n // }\n if (this.Count > 0) {\n this.saveItems(writer);\n }\n writer.write(this.suffix);\n writer.write(Operators.newLine);\n }\n };\n /**\n * `Save dictionary items`.\n * @private\n */\n PdfDictionary.prototype.saveItems = function (writer) {\n writer.write(Operators.newLine);\n var keys = this.primitiveItems.keys();\n var values = this.primitiveItems.values();\n for (var index = 0; index < keys.length; index++) {\n var key = keys[index];\n var name_1 = new PdfName(key);\n name_1.save(writer);\n writer.write(Operators.whiteSpace);\n var resources = values[index];\n resources.save(writer);\n writer.write(Operators.newLine);\n }\n };\n return PdfDictionary;\n}());\nexport { PdfDictionary };\nvar SaveSectionCollectionEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveSectionCollectionEventHandler(sender) {\n this.sender = sender;\n }\n return SaveSectionCollectionEventHandler;\n}());\nexport { SaveSectionCollectionEventHandler };\nvar SaveDescendantFontEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveDescendantFontEventHandler(sender) {\n this.sender = sender;\n }\n return SaveDescendantFontEventHandler;\n}());\nexport { SaveDescendantFontEventHandler };\nvar SaveFontDictionaryEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontDictionaryEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontDictionaryEventHandler;\n}());\nexport { SaveFontDictionaryEventHandler };\nvar SaveAnnotationEventHandler = /** @class */ (function () {\n /**\n * New instance for `save annotation event handler` class.\n * @private\n */\n function SaveAnnotationEventHandler(sender) {\n this.sender = sender;\n }\n return SaveAnnotationEventHandler;\n}());\nexport { SaveAnnotationEventHandler };\nvar SaveSectionEventHandler = /** @class */ (function () {\n // constructors\n /**\n * New instance for `save section event handler` class.\n * @private\n */\n function SaveSectionEventHandler(sender, state) {\n this.sender = sender;\n this.state = state;\n }\n return SaveSectionEventHandler;\n}());\nexport { SaveSectionEventHandler };\n/**\n * SaveTemplateEventHandler class used to store information about template elements.\n * @private\n * @hidden\n */\nvar SaveTemplateEventHandler = /** @class */ (function () {\n /**\n * New instance for save section collection event handler class.\n * @public\n */\n function SaveTemplateEventHandler(sender) {\n this.sender = sender;\n }\n return SaveTemplateEventHandler;\n}());\nexport { SaveTemplateEventHandler };\n","/**\n * `PdfNumber` class is used to perform number related primitive operations.\n * @private\n */\nvar PdfNumber = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfNumber` class.\n * @private\n */\n function PdfNumber(value) {\n /**\n * Sotres the `position`.\n * @default -1\n * @private\n */\n this.position5 = -1;\n this.value = value;\n }\n Object.defineProperty(PdfNumber.prototype, \"intValue\", {\n /**\n * Gets or sets the `integer` value.\n * @private\n */\n get: function () {\n return this.value;\n },\n set: function (value) {\n this.value = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isInteger\", {\n /**\n * Gets or sets a value indicating whether this instance `is integer`.\n * @private\n */\n get: function () {\n return this.integer;\n },\n set: function (value) {\n this.integer = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status5;\n },\n set: function (value) {\n this.status5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving5;\n },\n set: function (value) {\n this.isSaving5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index5;\n },\n set: function (value) {\n this.index5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position5;\n },\n set: function (value) {\n this.position5 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfNumber.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves the object`.\n * @private\n */\n PdfNumber.prototype.save = function (writer) {\n writer.write(this.intValue.toString()); //tostring(CultureInfo.InletiantCulture)\n };\n /**\n * Creates a `copy of PdfNumber`.\n * @private\n */\n PdfNumber.prototype.clone = function (crossTable) {\n var newNumber = new PdfNumber(this.value);\n return newNumber;\n };\n /**\n * Converts a `float value to a string` using Adobe PDF rules.\n * @private\n */\n PdfNumber.floatToString = function (number) {\n // let tempString1 : string = number.toString();\n // let tempString2 : string = tempString1.indexOf('.') != -1 ? tempString1.substring(0, tempString1.indexOf('.')) : tempString1;\n var returnString = number.toFixed(2);\n if (returnString === '0.00') {\n returnString = '.00';\n }\n // let prefixLength : number = (22 - tempString2.length) >= 0 ? (22 - tempString2.length) : 0;\n // for (let index : number = 0; index < prefixLength; index++) {\n // returnString += '0';\n // }\n // returnString += tempString2 + '.00';\n // returnString += (tempString3.length > 6) ? tempString3.substring(0,6) : tempString3;\n // let suffixLength : number = (6 - tempString3.length) >= 0 ? (6 - tempString3.length) : 0;\n // for (let index : number = 0; index < suffixLength; index++) {\n // returnString += '0';\n // }\n return returnString;\n };\n /**\n * Determines the `minimum of the three values`.\n * @private\n */\n PdfNumber.min = function (x, y, z) {\n var r = Math.min(x, y);\n return Math.min(z, r);\n };\n return PdfNumber;\n}());\nexport { PdfNumber };\n","import { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\n/**\n * `PdfArray` class is used to perform array related primitive operations.\n * @private\n */\nvar PdfArray = /** @class */ (function () {\n function PdfArray(array) {\n //Fields\n /**\n * `startMark` - '['\n * @private\n */\n this.startMark = '[';\n /**\n * `endMark` - ']'.\n * @private\n */\n this.endMark = ']';\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position9 = -1;\n /**\n * Internal variable to hold `cloned object`.\n * @default null\n * @private\n */\n this.clonedObject9 = null;\n /**\n * Represents the Font dictionary.\n * @hidden\n * @private\n */\n this.isFont = false;\n if (typeof array === 'undefined') {\n this.internalElements = [];\n }\n else {\n if (typeof array !== 'undefined' && !(array instanceof PdfArray)) {\n var tempNumberArray = array;\n for (var index = 0; index < tempNumberArray.length; index++) {\n var pdfNumber = new PdfNumber(tempNumberArray[index]);\n this.add(pdfNumber);\n }\n // } else if (typeof array !== 'undefined' && (array instanceof PdfArray)) {\n }\n else {\n var tempArray = array;\n // if (tempArray.Elements.length > 0) {\n this.internalElements = [];\n for (var index = 0; index < tempArray.elements.length; index++) {\n this.internalElements.push(tempArray.elements[index]);\n }\n // }\n }\n }\n }\n //property\n /**\n * Gets the `IPdfSavable` at the specified index.\n * @private\n */\n PdfArray.prototype.items = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index, The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n Object.defineProperty(PdfArray.prototype, \"count\", {\n /**\n * Gets the `count`.\n * @private\n */\n get: function () {\n return this.internalElements.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"status\", {\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status9;\n },\n set: function (value) {\n this.status9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving9;\n },\n set: function (value) {\n this.isSaving9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return this.clonedObject9;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position9;\n },\n set: function (value) {\n this.position9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index9;\n },\n set: function (value) {\n this.index9 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"CrossTable\", {\n /**\n * Returns `PdfCrossTable` associated with the object.\n * @private\n */\n get: function () {\n return this.pdfCrossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfArray.prototype, \"elements\", {\n /**\n * Gets the `elements` of the Pdf Array.\n * @private\n */\n get: function () {\n return this.internalElements;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Adds` the specified element to the PDF array.\n * @private\n */\n PdfArray.prototype.add = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : obj');\n // }\n if (typeof this.internalElements === 'undefined') {\n this.internalElements = [];\n }\n this.internalElements.push(element);\n this.markedChange();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markedChange = function () {\n this.bChanged = true;\n };\n /**\n * `Determines` whether the specified element is within the array.\n * @private\n */\n PdfArray.prototype.contains = function (element) {\n var returnValue = false;\n for (var index = 0; index < this.internalElements.length; index++) {\n var tempElement = this.internalElements[index];\n var inputElement = element;\n if (tempElement != null && typeof tempElement !== 'undefined' && inputElement != null && typeof inputElement !== 'undefined') {\n if (tempElement.value === inputElement.value) {\n return true;\n }\n }\n // if (this.internalElements[index] === element) {\n // returnValue = true;\n // }\n }\n return returnValue;\n };\n /**\n * Returns the `primitive object` of input index.\n * @private\n */\n PdfArray.prototype.getItems = function (index) {\n // if (index < 0 || index >= this.Count) {\n // throw new Error('ArgumentOutOfRangeException : index , The index can\"t be less then zero or greater then Count.');\n // }\n return this.internalElements[index];\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfArray.prototype.save = function (writer) {\n // if (writer === null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n writer.write(this.startMark);\n for (var i = 0, len = this.count; i < len; i++) {\n this.getItems(i).save(writer);\n if (i + 1 !== len) {\n writer.write(Operators.whiteSpace);\n }\n }\n writer.write(this.endMark);\n };\n /**\n * Creates a `copy of PdfArray`.\n * @private\n */\n PdfArray.prototype.clone = function (crossTable) {\n // if (this.clonedObject9 !== null && this.clonedObject9.CrossTable === crossTable) {\n // return this.clonedObject9;\n // } else {\n this.clonedObject9 = null;\n // Else clone the object.\n var newArray = new PdfArray();\n for (var index = 0; index < this.internalElements.length; index++) {\n var obj = this.internalElements[index];\n newArray.add(obj.clone(crossTable));\n }\n newArray.pdfCrossTable = crossTable;\n this.clonedObject9 = newArray;\n return newArray;\n };\n /**\n * Creates filled PDF array `from the rectangle`.\n * @private\n */\n PdfArray.fromRectangle = function (bounds) {\n var values = [bounds.x, bounds.y, bounds.width, bounds.height];\n var array = new PdfArray(values);\n return array;\n };\n // /**\n // * Creates the rectangle from filled PDF array.\n // * @private\n // */\n // public ToRectangle() : RectangleF {\n // if (this.Count < 4) {\n // throw Error('InvalidOperationException-Can not convert to rectangle.');\n // }\n // let x1 : number;\n // let x2 : number;\n // let y1 : number;\n // let y2 : number;\n // let num : PdfNumber = this.getItems(0) as PdfNumber;\n // x1 = num.IntValue;\n // num = this.getItems(1) as PdfNumber;\n // y1 = num.IntValue;\n // num = this.getItems(2) as PdfNumber;\n // x2 = num.IntValue;\n // num = this.getItems(3) as PdfNumber;\n // y2 = num.IntValue;\n // let x : number = Math.min(x1, x2);\n // let y : number = Math.min(y1, y2);\n // let width : number = Math.abs(x1 - x2);\n // let height : number = Math.abs(y1 - y2);\n // let rect : RectangleF = new RectangleF(new PointF(x, y), new SizeF(width, height));\n // return rect;\n // }\n /**\n * `Inserts` the element into the array.\n * @private\n */\n PdfArray.prototype.insert = function (index, element) {\n if (index < this.internalElements.length && index > 0) {\n var tempElements = [];\n for (var i = 0; i < index; i++) {\n tempElements.push(this.internalElements[i]);\n }\n tempElements.push(element);\n for (var i = index; i < this.internalElements.length; i++) {\n tempElements.push(this.internalElements[i]);\n }\n this.internalElements = tempElements;\n }\n else {\n this.internalElements.push(element);\n }\n this.markChanged();\n };\n /**\n * `Checks whether array contains the element`.\n * @private\n */\n PdfArray.prototype.indexOf = function (element) {\n return this.internalElements.indexOf(element);\n };\n /**\n * `Removes` element from the array.\n * @private\n */\n PdfArray.prototype.remove = function (element) {\n // if (element === null) {\n // throw new Error('ArgumentNullException : element');\n // }\n var index = this.internalElements.indexOf(element);\n // if (index >= 0 && index < this.internalElements.length) {\n this.internalElements[index] = null;\n // }\n this.markChanged();\n };\n /**\n * `Remove` the element from the array by its index.\n * @private\n */\n PdfArray.prototype.removeAt = function (index) {\n // this.internalElements.RemoveAt(index);\n if (this.internalElements.length > index) {\n var tempArray = [];\n for (var i = 0; i < index; i++) {\n tempArray.push(this.internalElements[i]);\n }\n for (var i = index + 1; i < this.internalElements.length; i++) {\n tempArray.push(this.internalElements[i]);\n }\n this.internalElements = tempArray;\n }\n this.markChanged();\n };\n /**\n * `Clear` the array.\n * @private\n */\n PdfArray.prototype.clear = function () {\n this.internalElements = [];\n this.markChanged();\n };\n /**\n * `Marks` the object changed.\n * @private\n */\n PdfArray.prototype.markChanged = function () {\n this.bChanged = true;\n };\n return PdfArray;\n}());\nexport { PdfArray };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfDictionary } from './pdf-dictionary';\nimport { PdfNumber } from './pdf-number';\nimport { Operators } from './../input-output/pdf-operators';\nimport { PdfName } from './pdf-name';\nimport { PdfArray } from './pdf-array';\nimport { PdfReferenceHolder } from './pdf-reference';\nimport { CompressedStreamWriter } from '@syncfusion/ej2-compression';\n/**\n * `PdfStream` class is used to perform stream related primitive operations.\n * @private\n */\nvar PdfStream = /** @class */ (function (_super) {\n __extends(PdfStream, _super);\n function PdfStream(dictionary, data) {\n var _this = _super.call(this, dictionary) || this;\n //Constants\n /**\n * @hidden\n * @private\n */\n _this.dicPrefix = 'stream';\n /**\n * @hidden\n * @private\n */\n _this.dicSuffix = 'endstream';\n /**\n * Internal variable to hold `cloned object`.\n * @private\n */\n _this.clonedObject2 = null;\n /**\n * @hidden\n * @private\n */\n _this.bCompress = true;\n if (typeof dictionary !== 'undefined' || typeof data !== 'undefined') {\n _this.dataStream2 = [];\n _this.dataStream2 = data;\n _this.bCompress2 = false;\n }\n else {\n _this.dataStream2 = [];\n _this.bCompress2 = true;\n //Pending\n }\n return _this;\n }\n Object.defineProperty(PdfStream.prototype, \"internalStream\", {\n /**\n * Gets the `internal` stream.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"compress\", {\n /**\n * Gets or sets `compression` flag.\n * @private\n */\n get: function () {\n return this.bCompress;\n },\n set: function (value) {\n this.bCompress = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStream.prototype, \"data\", {\n /**\n * Gets or sets the `data`.\n * @private\n */\n get: function () {\n return this.dataStream2;\n },\n set: function (value) {\n this.dataStream2 = [];\n this.dataStream2 = value;\n this.modify();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clear` the internal stream.\n * @private\n */\n PdfStream.prototype.clearStream = function () {\n this.internalStream = [];\n if (this.items.containsKey(this.dictionaryProperties.filter)) {\n this.remove(this.dictionaryProperties.filter);\n }\n this.bCompress = true;\n this.modify();\n };\n /**\n * `Writes` the specified string.\n * @private\n */\n PdfStream.prototype.write = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (text.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty string, text');\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * `Writes` the specified bytes.\n * @private\n */\n PdfStream.prototype.writeBytes = function (data) {\n if (data === null) {\n throw new Error('ArgumentNullException:data');\n }\n if (data.length <= 0) {\n throw new Error('ArgumentException: Can not write an empty bytes, data');\n }\n var text = '';\n for (var i = 0; i < data.length; i++) {\n text += String.fromCharCode(data[i]);\n }\n this.dataStream2.push(text);\n this.modify();\n };\n /**\n * Raises event `Cmap BeginSave`.\n * @private\n */\n PdfStream.prototype.onCmapBeginSave = function () {\n this.cmapBeginSave.sender.cmapBeginSave();\n };\n /**\n * Raises event `Font Program BeginSave`.\n * @private\n */\n PdfStream.prototype.onFontProgramBeginSave = function () {\n this.fontProgramBeginSave.sender.fontProgramBeginSave();\n };\n /**\n * `Compresses the content` if it's required.\n * @private\n */\n PdfStream.prototype.compressContent = function (data, writer) {\n if (this.bCompress) {\n var byteArray = [];\n for (var i = 0; i < data.length; i++) {\n byteArray.push(data.charCodeAt(i));\n }\n var dataArray = new Uint8Array(byteArray);\n var sw = new CompressedStreamWriter();\n // data = 'Hello World!!!';\n sw.write(dataArray, 0, dataArray.length);\n sw.close();\n data = sw.getCompressedString;\n this.addFilter(this.dictionaryProperties.flatedecode);\n }\n return data;\n };\n /**\n * `Adds a filter` to the filter array.\n * @private\n */\n PdfStream.prototype.addFilter = function (filterName) {\n var obj = this.items.getValue(this.dictionaryProperties.filter);\n if (obj instanceof PdfReferenceHolder) {\n var rh = obj;\n obj = rh.object;\n }\n var array = obj;\n var name = obj;\n if (name != null) {\n array = new PdfArray();\n array.insert(0, name);\n this.items.setValue(this.dictionaryProperties.filter, array);\n }\n name = new PdfName(filterName);\n if (array == null) {\n this.items.setValue(this.dictionaryProperties.filter, name);\n }\n else {\n array.insert(0, name);\n }\n };\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfStream.prototype.save = function (writer) {\n if (typeof this.cmapBeginSave !== 'undefined') {\n this.onCmapBeginSave();\n }\n if (typeof this.fontProgramBeginSave !== 'undefined') {\n this.onFontProgramBeginSave();\n }\n var data = '';\n for (var i = 0; i < this.data.length; i++) {\n data = data + this.data[i];\n }\n if (data.length > 1 && !this.isResource) {\n data = 'q\\r\\n' + data + 'Q\\r\\n';\n }\n data = this.compressContent(data, writer);\n var length = data.length;\n this.items.setValue(this.dictionaryProperties.length, new PdfNumber(length));\n _super.prototype.save.call(this, writer, false);\n writer.write(this.dicPrefix);\n writer.write(Operators.newLine);\n if (data.length > 0) {\n writer.write(data);\n }\n writer.write(Operators.newLine);\n writer.write(this.dicSuffix);\n writer.write(Operators.newLine);\n };\n /**\n * Converts `bytes to string`.\n * @private\n */\n PdfStream.bytesToString = function (byteArray) {\n var output = '';\n for (var i = 0; i < byteArray.length; i++) {\n output = output + String.fromCharCode(byteArray[i]);\n }\n return output;\n };\n return PdfStream;\n}(PdfDictionary));\nexport { PdfStream };\nvar SaveCmapEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveCmapEventHandler(sender) {\n this.sender = sender;\n }\n return SaveCmapEventHandler;\n}());\nexport { SaveCmapEventHandler };\nvar SaveFontProgramEventHandler = /** @class */ (function () {\n /**\n * New instance for `save section collection event handler` class.\n * @private\n */\n function SaveFontProgramEventHandler(sender) {\n this.sender = sender;\n }\n return SaveFontProgramEventHandler;\n}());\nexport { SaveFontProgramEventHandler };\n","/**\n * public Enum for `ObjectType`.\n * @private\n */\nexport var ObjectType;\n(function (ObjectType) {\n /**\n * Specifies the type of `Free`.\n * @private\n */\n ObjectType[ObjectType[\"Free\"] = 0] = \"Free\";\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n ObjectType[ObjectType[\"Normal\"] = 1] = \"Normal\";\n /**\n * Specifies the type of `Packed`.\n * @private\n */\n ObjectType[ObjectType[\"Packed\"] = 2] = \"Packed\";\n})(ObjectType || (ObjectType = {}));\n","import { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfString } from './../primitives/pdf-string';\n/**\n * `PdfReference` class is used to perform reference related primitive operations.\n * @private\n */\nvar PdfReference = /** @class */ (function () {\n function PdfReference(objNumber, genNumber) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index3 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position3 = -1;\n /**\n * Holds the `object number`.\n * @default 0\n * @private\n */\n this.objNumber = 0;\n /**\n * Holds the `generation number` of the object.\n * @default 0\n * @private\n */\n this.genNumber = 0;\n if (typeof objNumber === 'number' && typeof genNumber === 'number') {\n this.objNumber = objNumber;\n this.genNumber = genNumber;\n // } else if (typeof objNum === 'string' && typeof genNum === 'string') {\n }\n else {\n this.objNumber = Number(objNumber);\n this.genNumber = Number(genNumber);\n }\n }\n Object.defineProperty(PdfReference.prototype, \"status\", {\n //Property\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status3;\n },\n set: function (value) {\n this.status3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving3;\n },\n set: function (value) {\n this.isSaving3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index3;\n },\n set: function (value) {\n this.index3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position3;\n },\n set: function (value) {\n this.position3 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReference.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var returnObject3 = null;\n return returnObject3;\n },\n enumerable: true,\n configurable: true\n });\n //IPdfPrimitives methods\n /**\n * `Saves` the object.\n * @private\n */\n PdfReference.prototype.save = function (writer) {\n writer.write(this.toString());\n };\n /**\n * Returns a `string` representing the object.\n * @private\n */\n PdfReference.prototype.toString = function () {\n return this.objNumber.toString() + ' ' + this.genNumber.toString() + ' R';\n };\n /**\n * Creates a `deep copy` of the IPdfPrimitive object.\n * @private\n */\n PdfReference.prototype.clone = function (crossTable) {\n return null;\n };\n return PdfReference;\n}());\nexport { PdfReference };\n/**\n * `PdfReferenceHolder` class is used to perform reference holder related primitive operations.\n * @private\n */\nvar PdfReferenceHolder = /** @class */ (function () {\n function PdfReferenceHolder(obj1, obj2) {\n /**\n * Holds the `index` number of the object.\n * @default -1\n * @private\n */\n this.index4 = -1;\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.position4 = -1;\n /**\n * The `index` of the object within the object collection.\n * @default -1\n * @private\n */\n this.objectIndex = -1;\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (typeof obj2 === 'undefined') {\n this.initialize(obj1);\n // }\n // else {\n // if (obj2 === null) {\n // throw new Error('ArgumentNullException : crossTable');\n // }\n // if (obj1 === null) {\n // throw new Error('ArgumentNullException : reference');\n // }\n // this.crossTable = obj2;\n // let tempObj1 : PdfReference = obj1;\n // this.reference = tempObj1;\n // }\n }\n Object.defineProperty(PdfReferenceHolder.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.status4;\n },\n set: function (value) {\n this.status4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.isSaving4;\n },\n set: function (value) {\n this.isSaving4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index4;\n },\n set: function (value) {\n this.index4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.position4;\n },\n set: function (value) {\n this.position4 = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"object\", {\n /**\n * Gets the `object` the reference is of.\n * @private\n */\n get: function () {\n // if ((this.reference != null) || (this.object == null)) {\n // this.object = this.GetterObject();\n // }\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"reference\", {\n /**\n * Gets the `reference`.\n * @private\n */\n get: function () {\n return this.pdfReference;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"index\", {\n /**\n * Gets the `index` of the object.\n * @private\n */\n get: function () {\n // let items : PdfMainObjectCollection = this.crossTable.PdfObjects;\n // this.objectIndex = items.GetObjectIndex(this.reference);\n // if (this.objectIndex < 0) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.reference);\n // this.objectIndex = items.Count - 1;\n // }\n return this.objectIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfReferenceHolder.prototype, \"element\", {\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.primitiveObject;\n },\n enumerable: true,\n configurable: true\n });\n PdfReferenceHolder.prototype.initialize = function (obj1) {\n if (obj1 instanceof PdfArray\n || obj1 instanceof PdfDictionary\n || obj1 instanceof PdfName\n || obj1 instanceof PdfNumber\n || obj1 instanceof PdfStream\n || obj1 instanceof PdfReference\n || obj1 instanceof PdfString) {\n this.primitiveObject = obj1;\n }\n else {\n var tempObj = obj1;\n this.initialize(tempObj.element);\n }\n };\n /**\n * `Writes` a reference into a PDF document.\n * @private\n */\n PdfReferenceHolder.prototype.save = function (writer) {\n // if (writer == null) {\n // throw new Error('ArgumentNullException : writer');\n // }\n var position = writer.position;\n var cTable = writer.document.crossTable;\n // if (cTable.Document instanceof PdfDocument) {\n this.object.isSaving = true;\n // }\n var reference = null;\n // if (writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true) {\n // if (this.reference === null) {\n // reference = cTable.GetReference(this.Object);\n // } else {\n // reference = this.reference;\n // }\n // } else {\n // reference = cTable.GetReference(this.Object);\n // }\n // if (!(writer.Document.FileStructure.IncrementalUpdate === true && writer.Document.isStreamCopied === true)) {\n reference = cTable.getReference(this.object);\n // }\n // if (writer.Position !== position) {\n // writer.Position = position;\n // }\n reference.save(writer);\n };\n /**\n * Creates a `copy of PdfReferenceHolder`.\n * @private\n */\n PdfReferenceHolder.prototype.clone = function (crossTable) {\n var refHolder = null;\n var temp = null;\n var refNum = '';\n var reference = null;\n // Restricts addition of same object multiple time.\n /* if (this.Reference != null && this.crossTable != null && this.crossTable.PageCorrespondance.containsKey(this.Reference)) {\n refHolder = new PdfReferenceHolder(this.crossTable.PageCorrespondance.getValue(this.Reference) as PdfReference, crossTable);\n return refHolder;\n }\n if (Object instanceof PdfNumber) {\n return new PdfNumber((Object as PdfNumber).IntValue);\n }\n */\n // if (Object instanceof PdfDictionary) {\n // // Meaning the referenced page is not available for import.\n // let type : PdfName = new PdfName(this.dictionaryProperties.type);\n // let dict : PdfDictionary = Object as PdfDictionary;\n // if (dict.ContainsKey(type)) {\n // let pageName : PdfName = dict.Items.getValue(type.Value) as PdfName;\n // if (pageName !== null) {\n // if (pageName.Value === 'Page') {\n // return new PdfNull();\n // }\n // }\n // }\n // }\n /* if (Object instanceof PdfName) {\n return new PdfName ((Object as PdfName ).Value);\n }\n */\n // Resolves circular references.\n // if (crossTable.PrevReference !== null && (crossTable.PrevReference.indexOf(this.Reference) !== -1)) {\n // let obj : IPdfPrimitive = this.crossTable.GetObject(this.Reference).ClonedObject;\n // if (obj !== null) {\n // reference = crossTable.GetReference(obj);\n // return new PdfReferenceHolder(reference, crossTable);\n // } else {\n // return new PdfNull();\n // }\n // }\n /*if (this.Reference !== null) {\n crossTable.PrevReference.push(this.Reference);\n }\n reference = crossTable.GetReference(temp);\n refHolder = new PdfReferenceHolder(reference, crossTable);\n return refHolder;\n */\n return null;\n };\n return PdfReferenceHolder;\n}());\nexport { PdfReferenceHolder };\n","/**\n * `PdfBoolean` class is used to perform boolean related primitive operations.\n * @private\n */\nvar PdfBoolean = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfBoolean` class.\n * @private\n */\n function PdfBoolean(value) {\n /**\n * Internal variable to store the `position`.\n * @default -1\n * @private\n */\n this.currentPosition = -1;\n this.value = value;\n }\n Object.defineProperty(PdfBoolean.prototype, \"status\", {\n //Properties\n /**\n * Gets or sets the `Status` of the specified object.\n * @private\n */\n get: function () {\n return this.objectStatus;\n },\n set: function (value) {\n this.objectStatus = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"isSaving\", {\n /**\n * Gets or sets a value indicating whether this document `is saving` or not.\n * @private\n */\n get: function () {\n return this.saving;\n },\n set: function (value) {\n this.saving = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"objectCollectionIndex\", {\n /**\n * Gets or sets the `index` value of the specified object.\n * @private\n */\n get: function () {\n return this.index;\n },\n set: function (value) {\n this.index = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"position\", {\n /**\n * Gets or sets the `position` of the object.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfBoolean.prototype, \"clonedObject\", {\n /**\n * Returns `cloned object`.\n * @private\n */\n get: function () {\n var rValue = null;\n return rValue;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Saves` the object using the specified writer.\n * @private\n */\n PdfBoolean.prototype.save = function (writer) {\n writer.write(this.boolToStr(this.value));\n };\n /**\n * Creates a `copy of PdfBoolean`.\n * @private\n */\n PdfBoolean.prototype.clone = function (crossTable) {\n var newNumber = new PdfBoolean(this.value);\n return newNumber;\n };\n // Implementation\n /**\n * Converts `boolean to string` - 0/1 'true'/'false'.\n * @private\n */\n PdfBoolean.prototype.boolToStr = function (value) {\n return value ? 'true' : 'false';\n };\n return PdfBoolean;\n}());\nexport { PdfBoolean };\n","import { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfBoolean } from './../primitives/pdf-boolean';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * Defines the way the document is to be presented on the screen or in print.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets viewer preferences\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Destroy the document\n * document.destroy();\n * ```\n */\nvar PdfViewerPreferences = /** @class */ (function () {\n /**\n * Initialize a new instance of `PdfViewerPreferences` class.\n *\n * @private\n * ```\n */\n function PdfViewerPreferences(catalog) {\n this._dictionaryProperties = new DictionaryProperties();\n this._centerWindow = false;\n this._fitWindow = false;\n this._displayTitle = false;\n this._splitWindow = false;\n this._hideMenuBar = false;\n this._hideToolBar = false;\n this._hideWindowUI = false;\n this._pageMode = PdfPageMode.UseNone;\n this._pageLayout = PdfPageLayout.SinglePage;\n this._dictionary = new PdfDictionary();\n this._duplex = DuplexMode.None;\n this._catalog = catalog;\n }\n Object.defineProperty(PdfViewerPreferences.prototype, \"centerWindow\", {\n /**\n * A flag specifying whether to position the document’s window in the center of the screen.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the center window\n * let centerWindow : boolean = viewerPreferences.centerWindow;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._centerWindow;\n },\n /**\n * A flag specifying whether to position the document’s window in the center of the screen.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the center window\n * viewerPreferences.centerWindow = true;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._centerWindow = value;\n this._dictionary.items.setValue(this._dictionaryProperties.centerWindow, new PdfBoolean(this._centerWindow));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"displayTitle\", {\n /**\n * A flag specifying whether the window’s title bar should display the document title taken\n * from the Title entry of the document information dictionary. If false, the title bar\n * should instead display the name of the PDF file containing the document.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the display title\n * let displayTitle : boolean = viewerPreferences.displayTitle;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._displayTitle;\n },\n /**\n * A flag specifying whether the window’s title bar should display the document title taken\n * from the Title entry of the document information dictionary. If false, the title bar\n * should instead display the name of the PDF file containing the document.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the display title\n * viewerPreferences.displayTitle = true;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._displayTitle = value;\n this._dictionary.items.setValue(this._dictionaryProperties.displayTitle, new PdfBoolean(this._displayTitle));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"fitWindow\", {\n /**\n * A flag specifying whether to resize the document’s window to fit the size of the first\n * displayed page.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the fit window\n * let fitWindow : boolean = viewerPreferences.fitWindow;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._fitWindow;\n },\n /**\n * A flag specifying whether to resize the document’s window to fit the size of the first\n * displayed page.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the fit window\n * viewerPreferences.fitWindow = true;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._fitWindow = value;\n this._dictionary.items.setValue(this._dictionaryProperties.fitWindow, new PdfBoolean(this._fitWindow));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"hideMenuBar\", {\n /**\n * A flag specifying whether to hide the viewer application’s menu bar when the\n * document is active.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the hide menu bar\n * let hideMenuBar: boolean = viewerPreferences.hideMenuBar;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._hideMenuBar;\n },\n /**\n * A flag specifying whether to hide the viewer application’s menu bar when the\n * document is active.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the hide menu bar\n * viewerPreferences.hideMenuBar = true;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._hideMenuBar = value;\n this._dictionary.items.setValue(this._dictionaryProperties.hideMenuBar, new PdfBoolean(this._hideMenuBar));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"hideToolBar\", {\n /**\n * A flag specifying whether to hide the viewer application’s tool bar when the\n * document is active.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the hide tool bar\n * let hideToolBar: boolean = viewerPreferences.hideToolBar;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._hideToolBar;\n },\n /**\n * A flag specifying whether to hide the viewer application’s tool bar when the\n * document is active.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the hide tool bar\n * viewerPreferences.hideToolbar = true;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._hideToolBar = value;\n this._dictionary.items.setValue(this._dictionaryProperties.hideToolBar, new PdfBoolean(this._hideToolBar));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"hideWindowUI\", {\n /**\n * A flag specifying whether to hide user interface elements in the document’s window\n * (such as scroll bars and navigation controls), leaving only the document’s contents displayed.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the hide window UI\n * let hideWindowUI: boolean = viewerPreferences.hideWindowUI;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._hideWindowUI;\n },\n /**\n * A flag specifying whether to hide user interface elements in the document’s window\n * (such as scroll bars and navigation controls), leaving only the document’s contents displayed.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the hide window UI\n * viewerPreferences.hideWindowUI = true;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._hideWindowUI = value;\n this._dictionary.items.setValue(this._dictionaryProperties.hideWindowUI, new PdfBoolean(this._hideWindowUI));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"pageMode\", {\n /**\n * A name object specifying how the document should be displayed when opened.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the page mode\n * let pageMode: PdfPageMode = viewerPreferences.pageMode;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._pageMode;\n },\n /**\n * A name object specifying how the document should be displayed when opened.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the page mode\n * viewerPreferences.pageMode = PdfPageMode.UseOutlines;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._pageMode = value;\n this._catalog.items.setValue(this._dictionaryProperties.pageMode, new PdfName(this._mapPageMode(this._pageMode)));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"duplex\", {\n /**\n * Gets print duplex mode handling option to use when printing the file from the print dialog.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the duplex\n * let duplex : DuplexMode = viewerPreferences.duplex;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._duplex;\n },\n /**\n * Sets print duplex mode handling option to use when printing the file from the print dialog.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the duplex\n * viewerPreferences.duplex = DuplexMode.DuplexFlipLongEdge;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._duplex = value;\n this._catalog.items.setValue(this._dictionaryProperties.duplex, new PdfName(this._mapDuplexMode(this._duplex)));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"pageLayout\", {\n /**\n * A name object specifying the page layout to be used when the document is opened.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the page layout\n * let pageLayout : PdfPageLayout = viewerPreferences.pageLayout;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._pageLayout;\n },\n /**\n * A name object specifying the page layout to be used when the document is opened.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the page layout\n * viewerPreferences.pageLayout = PdfPageLayout.TwoColumnLeft;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._pageLayout = value;\n this._catalog.items.setValue(this._dictionaryProperties.pageLayout, new PdfName(this._mapPageLayout(this._pageLayout)));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"pageScaling\", {\n /**\n * Gets the page scaling option to be selected\n * when a print dialog is displayed for this document.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Gets the page scaling\n * let pageScaling : PageScalingMode = viewerPreferences.pageScaling;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this._pageScaling;\n },\n /**\n * Sets the page scaling option to be selected\n * when a print dialog is displayed for this document.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the page scaling\n * viewerPreferences.pageScaling = PageScalingMode.None;\n * // Destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this._pageScaling = value;\n if (this._pageScaling === PageScalingMode.AppDefault && this._dictionary.items.containsKey(this._dictionaryProperties.printScaling)) {\n this._dictionary.items.remove(this._dictionaryProperties.printScaling);\n }\n else if (this._pageScaling === PageScalingMode.None) {\n this._dictionary.items.setValue(this._dictionaryProperties.printScaling, new PdfName('None'));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfViewerPreferences.prototype, \"element\", {\n /**\n * Primivie element\n *\n * @private\n */\n get: function () {\n return this._dictionary;\n },\n enumerable: true,\n configurable: true\n });\n PdfViewerPreferences.prototype._mapDuplexMode = function (mode) {\n switch (mode) {\n case DuplexMode.Simplex:\n return 'Simplex';\n case DuplexMode.DuplexFlipShortEdge:\n return 'DuplexFlipShortEdge';\n case DuplexMode.DuplexFlipLongEdge:\n return 'DuplexFlipLongEdge';\n case DuplexMode.None:\n return 'None';\n }\n };\n PdfViewerPreferences.prototype._mapPageMode = function (mode) {\n switch (mode) {\n case PdfPageMode.UseNone:\n return 'UseNone';\n case PdfPageMode.UseOutlines:\n return 'UseOutlines';\n case PdfPageMode.UseThumbs:\n return 'UseThumbs';\n case PdfPageMode.FullScreen:\n return 'FullScreen';\n case PdfPageMode.UseOC:\n return 'UseOC';\n case PdfPageMode.UseAttachments:\n return 'UseAttachments';\n }\n };\n PdfViewerPreferences.prototype._mapPageLayout = function (layout) {\n switch (layout) {\n case PdfPageLayout.SinglePage:\n return 'SinglePage';\n case PdfPageLayout.OneColumn:\n return 'OneColumn';\n case PdfPageLayout.TwoColumnLeft:\n return 'TwoColumnLeft';\n case PdfPageLayout.TwoColumnRight:\n return 'TwoColumnRight';\n case PdfPageLayout.TwoPageLeft:\n return 'TwoPageLeft';\n case PdfPageLayout.TwoPageRight:\n return 'TwoPageRight';\n }\n };\n return PdfViewerPreferences;\n}());\nexport { PdfViewerPreferences };\n/**\n * Represents mode of document displaying.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the page mode\n * viewerPreferences.pageMode = PdfPageMode.UseOutlines;\n * // Destroy the document\n * document.destroy();\n * ```\n */\nexport var PdfPageMode;\n(function (PdfPageMode) {\n /**\n * Default value. Neither document outline nor thumbnail images visible.\n */\n PdfPageMode[PdfPageMode[\"UseNone\"] = 0] = \"UseNone\";\n /**\n * Document outline visible.\n */\n PdfPageMode[PdfPageMode[\"UseOutlines\"] = 1] = \"UseOutlines\";\n /**\n * Thumbnail images visible.\n */\n PdfPageMode[PdfPageMode[\"UseThumbs\"] = 2] = \"UseThumbs\";\n /**\n * Full-screen mode, with no menu bar, window controls, or any other window visible.\n */\n PdfPageMode[PdfPageMode[\"FullScreen\"] = 3] = \"FullScreen\";\n /**\n * Optional content group panel visible.\n */\n PdfPageMode[PdfPageMode[\"UseOC\"] = 4] = \"UseOC\";\n /**\n * Attachments are visible.\n */\n PdfPageMode[PdfPageMode[\"UseAttachments\"] = 5] = \"UseAttachments\";\n})(PdfPageMode || (PdfPageMode = {}));\n/**\n * A name object specifying the page layout to be used when the document is opened.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the page layout\n * viewerPreferences.pageLayout = PdfPageLayout.TwoColumnLeft;\n * // Destroy the document\n * document.destroy();\n * ```\n */\nexport var PdfPageLayout;\n(function (PdfPageLayout) {\n /**\n * Default Value. Display one page at a time.\n */\n PdfPageLayout[PdfPageLayout[\"SinglePage\"] = 0] = \"SinglePage\";\n /**\n * Display the pages in one column.\n */\n PdfPageLayout[PdfPageLayout[\"OneColumn\"] = 1] = \"OneColumn\";\n /**\n * Display the pages in two columns, with odd numbered\n * pages on the left.\n */\n PdfPageLayout[PdfPageLayout[\"TwoColumnLeft\"] = 2] = \"TwoColumnLeft\";\n /**\n * Display the pages in two columns, with odd numbered\n * pages on the right.\n */\n PdfPageLayout[PdfPageLayout[\"TwoColumnRight\"] = 3] = \"TwoColumnRight\";\n /**\n * Display the pages two at a time, with odd-numbered pages on the left.\n */\n PdfPageLayout[PdfPageLayout[\"TwoPageLeft\"] = 4] = \"TwoPageLeft\";\n /**\n * Display the pages two at a time, with odd-numbered pages on the right.\n */\n PdfPageLayout[PdfPageLayout[\"TwoPageRight\"] = 5] = \"TwoPageRight\";\n})(PdfPageLayout || (PdfPageLayout = {}));\n/**\n * The paper handling option to use when printing the file from the print dialog.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the duplex\n * viewerPreferences.duplex = DuplexMode.DuplexFlipLongEdge;\n * // Destroy the document\n * document.destroy();\n * ```\n */\nexport var DuplexMode;\n(function (DuplexMode) {\n /**\n * Print single-sided.\n */\n DuplexMode[DuplexMode[\"Simplex\"] = 0] = \"Simplex\";\n /**\n * Duplex and flip on the short edge of the sheet.\n */\n DuplexMode[DuplexMode[\"DuplexFlipShortEdge\"] = 1] = \"DuplexFlipShortEdge\";\n /**\n * Duplex and flip on the long edge of the sheet.\n */\n DuplexMode[DuplexMode[\"DuplexFlipLongEdge\"] = 2] = \"DuplexFlipLongEdge\";\n /**\n * Default value.\n */\n DuplexMode[DuplexMode[\"None\"] = 3] = \"None\";\n})(DuplexMode || (DuplexMode = {}));\n/**\n * Specifies the different page scaling option that shall be selected\n * when a print dialog is displayed for this document.\n * ```typescript\n * // Create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // Gets the viewer preferences of the document\n * let viewerPreferences : PdfViewerPreferences = document.viewerPreferences;\n * // Sets the page scaling\n * viewerPreferences.pageScaling = PageScalingMode.None;\n * // Destroy the document\n * document.destroy();\n * ```\n */\nexport var PageScalingMode;\n(function (PageScalingMode) {\n /**\n * Indicates the conforming reader’s default print scaling.\n */\n PageScalingMode[PageScalingMode[\"AppDefault\"] = 0] = \"AppDefault\";\n /**\n * Indicates no page scaling.\n */\n PageScalingMode[PageScalingMode[\"None\"] = 1] = \"None\";\n})(PageScalingMode || (PageScalingMode = {}));\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfCatalog.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfViewerPreferences } from './pdf-viewer-preferences';\n/**\n * `PdfCatalog` class represents internal catalog of the Pdf document.\n * @private\n */\nvar PdfCatalog = /** @class */ (function (_super) {\n __extends(PdfCatalog, _super);\n //constructor\n /**\n * Initializes a new instance of the `PdfCatalog` class.\n * @private\n */\n function PdfCatalog() {\n var _this = _super.call(this) || this;\n //fields\n /**\n * Internal variable to store collection of `sections`.\n * @default null\n * @private\n */\n _this.sections = null;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @private\n */\n _this.tempDictionaryProperties = new DictionaryProperties();\n _this.items.setValue(new DictionaryProperties().type, new PdfName('Catalog'));\n return _this;\n }\n Object.defineProperty(PdfCatalog.prototype, \"pages\", {\n //Properties\n /**\n * Gets or sets the sections, which contain `pages`.\n * @private\n */\n get: function () {\n return this.sections;\n },\n set: function (value) {\n var dictionary = value.element;\n // if (this.sections !== value) {\n // this.sections = value;\n // this.Items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n // }\n this.sections = value;\n this.items.setValue(this.tempDictionaryProperties.pages, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCatalog.prototype, \"viewerPreferences\", {\n /**\n * Gets the viewer preferences of the PDF document.\n * @private\n */\n get: function () {\n if (this._viewerPreferences === null || typeof this._viewerPreferences === 'undefined') {\n this._viewerPreferences = new PdfViewerPreferences(this);\n this.items.setValue(this.tempDictionaryProperties.viewerPreferences, new PdfReferenceHolder(this._viewerPreferences.element));\n }\n return this._viewerPreferences;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCatalog;\n}(PdfDictionary));\nexport { PdfCatalog };\n","/**\n * public Enum for `PdfHorizontalAlignment`.\n * @private\n */\nexport var PdfHorizontalAlignment;\n(function (PdfHorizontalAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfHorizontalAlignment[PdfHorizontalAlignment[\"Right\"] = 2] = \"Right\";\n})(PdfHorizontalAlignment || (PdfHorizontalAlignment = {}));\n/**\n * public Enum for `PdfVerticalAlignment`.\n * @private\n */\nexport var PdfVerticalAlignment;\n(function (PdfVerticalAlignment) {\n /**\n * Specifies the type of `Top`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Top\"] = 0] = \"Top\";\n /**\n * Specifies the type of `Middle`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Middle\"] = 1] = \"Middle\";\n /**\n * Specifies the type of `Bottom`.\n * @private\n */\n PdfVerticalAlignment[PdfVerticalAlignment[\"Bottom\"] = 2] = \"Bottom\";\n})(PdfVerticalAlignment || (PdfVerticalAlignment = {}));\n/**\n * public Enum for `public`.\n * @private\n */\nexport var PdfTextAlignment;\n(function (PdfTextAlignment) {\n /**\n * Specifies the type of `Left`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Left\"] = 0] = \"Left\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Right`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Right\"] = 2] = \"Right\";\n /**\n * Specifies the type of `Justify`.\n * @private\n */\n PdfTextAlignment[PdfTextAlignment[\"Justify\"] = 3] = \"Justify\";\n})(PdfTextAlignment || (PdfTextAlignment = {}));\n/**\n * public Enum for `TextRenderingMode`.\n * @private\n */\nexport var TextRenderingMode;\n(function (TextRenderingMode) {\n /**\n * Specifies the type of `Fill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Fill\"] = 0] = \"Fill\";\n /**\n * Specifies the type of `Stroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Stroke\"] = 1] = \"Stroke\";\n /**\n * Specifies the type of `FillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"FillStroke\"] = 2] = \"FillStroke\";\n /**\n * Specifies the type of `None`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"None\"] = 3] = \"None\";\n /**\n * Specifies the type of `ClipFlag`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFlag\"] = 4] = \"ClipFlag\";\n /**\n * Specifies the type of `ClipFill`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFill\"] = 4] = \"ClipFill\";\n /**\n * Specifies the type of `ClipStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipStroke\"] = 5] = \"ClipStroke\";\n /**\n * Specifies the type of `ClipFillStroke`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"ClipFillStroke\"] = 6] = \"ClipFillStroke\";\n /**\n * Specifies the type of `Clip`.\n * @private\n */\n TextRenderingMode[TextRenderingMode[\"Clip\"] = 7] = \"Clip\";\n})(TextRenderingMode || (TextRenderingMode = {}));\n/**\n * public Enum for `PdfLineJoin`.\n * @private\n */\nexport var PdfLineJoin;\n(function (PdfLineJoin) {\n /**\n * Specifies the type of `Miter`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Miter\"] = 0] = \"Miter\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Bevel`.\n * @private\n */\n PdfLineJoin[PdfLineJoin[\"Bevel\"] = 2] = \"Bevel\";\n})(PdfLineJoin || (PdfLineJoin = {}));\n/**\n * public Enum for `PdfLineCap`.\n * @private\n */\nexport var PdfLineCap;\n(function (PdfLineCap) {\n /**\n * Specifies the type of `Flat`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Flat\"] = 0] = \"Flat\";\n /**\n * Specifies the type of `Round`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Round\"] = 1] = \"Round\";\n /**\n * Specifies the type of `Square`.\n * @private\n */\n PdfLineCap[PdfLineCap[\"Square\"] = 2] = \"Square\";\n})(PdfLineCap || (PdfLineCap = {}));\n/**\n * public Enum for `PdfDashStyle`.\n * @private\n */\nexport var PdfDashStyle;\n(function (PdfDashStyle) {\n /**\n * Specifies the type of `Solid`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Solid\"] = 0] = \"Solid\";\n /**\n * Specifies the type of `Dash`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dash\"] = 1] = \"Dash\";\n /**\n * Specifies the type of `Dot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Dot\"] = 2] = \"Dot\";\n /**\n * Specifies the type of `DashDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDot\"] = 3] = \"DashDot\";\n /**\n * Specifies the type of `DashDotDot`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"DashDotDot\"] = 4] = \"DashDotDot\";\n /**\n * Specifies the type of `Custom`.\n * @private\n */\n PdfDashStyle[PdfDashStyle[\"Custom\"] = 5] = \"Custom\";\n})(PdfDashStyle || (PdfDashStyle = {}));\n/**\n * public Enum for `PdfFillMode`.\n * @private\n */\nexport var PdfFillMode;\n(function (PdfFillMode) {\n /**\n * Specifies the type of `Winding`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Winding\"] = 0] = \"Winding\";\n /**\n * Specifies the type of `Alternate`.\n * @private\n */\n PdfFillMode[PdfFillMode[\"Alternate\"] = 1] = \"Alternate\";\n})(PdfFillMode || (PdfFillMode = {}));\n/**\n * public Enum for `PdfColorSpace`.\n * @private\n */\nexport var PdfColorSpace;\n(function (PdfColorSpace) {\n /**\n * Specifies the type of `Rgb`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Rgb\"] = 0] = \"Rgb\";\n /**\n * Specifies the type of `Cmyk`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Cmyk\"] = 1] = \"Cmyk\";\n /**\n * Specifies the type of `GrayScale`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"GrayScale\"] = 2] = \"GrayScale\";\n /**\n * Specifies the type of `Indexed`.\n * @private\n */\n PdfColorSpace[PdfColorSpace[\"Indexed\"] = 3] = \"Indexed\";\n})(PdfColorSpace || (PdfColorSpace = {}));\n/**\n * public Enum for `PdfBlendMode`.\n * @private\n */\nexport var PdfBlendMode;\n(function (PdfBlendMode) {\n /**\n * Specifies the type of `Normal`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Normal\"] = 0] = \"Normal\";\n /**\n * Specifies the type of `Multiply`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Multiply\"] = 1] = \"Multiply\";\n /**\n * Specifies the type of `Screen`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Screen\"] = 2] = \"Screen\";\n /**\n * Specifies the type of `Overlay`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Overlay\"] = 3] = \"Overlay\";\n /**\n * Specifies the type of `Darken`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Darken\"] = 4] = \"Darken\";\n /**\n * Specifies the type of `Lighten`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Lighten\"] = 5] = \"Lighten\";\n /**\n * Specifies the type of `ColorDodge`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorDodge\"] = 6] = \"ColorDodge\";\n /**\n * Specifies the type of `ColorBurn`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"ColorBurn\"] = 7] = \"ColorBurn\";\n /**\n * Specifies the type of `HardLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"HardLight\"] = 8] = \"HardLight\";\n /**\n * Specifies the type of `SoftLight`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"SoftLight\"] = 9] = \"SoftLight\";\n /**\n * Specifies the type of `Difference`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Difference\"] = 10] = \"Difference\";\n /**\n * Specifies the type of `Exclusion`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Exclusion\"] = 11] = \"Exclusion\";\n /**\n * Specifies the type of `Hue`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Hue\"] = 12] = \"Hue\";\n /**\n * Specifies the type of `Saturation`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Saturation\"] = 13] = \"Saturation\";\n /**\n * Specifies the type of `Color`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Color\"] = 14] = \"Color\";\n /**\n * Specifies the type of `Luminosity`.\n * @private\n */\n PdfBlendMode[PdfBlendMode[\"Luminosity\"] = 15] = \"Luminosity\";\n})(PdfBlendMode || (PdfBlendMode = {}));\n/**\n * public Enum for `PdfGraphicsUnit`.\n * @private\n */\nexport var PdfGraphicsUnit;\n(function (PdfGraphicsUnit) {\n /**\n * Specifies the type of `Centimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Centimeter\"] = 0] = \"Centimeter\";\n /**\n * Specifies the type of `Pica`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pica\"] = 1] = \"Pica\";\n /**\n * Specifies the type of `Pixel`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Pixel\"] = 2] = \"Pixel\";\n /**\n * Specifies the type of `Point`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Point\"] = 3] = \"Point\";\n /**\n * Specifies the type of `Inch`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Inch\"] = 4] = \"Inch\";\n /**\n * Specifies the type of `Document`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Document\"] = 5] = \"Document\";\n /**\n * Specifies the type of `Millimeter`.\n * @private\n */\n PdfGraphicsUnit[PdfGraphicsUnit[\"Millimeter\"] = 6] = \"Millimeter\";\n})(PdfGraphicsUnit || (PdfGraphicsUnit = {}));\n/**\n * public Enum for `PdfGridImagePosition`.\n * @private\n */\nexport var PdfGridImagePosition;\n(function (PdfGridImagePosition) {\n /**\n * Specifies the type of `Fit`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Fit\"] = 0] = \"Fit\";\n /**\n * Specifies the type of `Center`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Center\"] = 1] = \"Center\";\n /**\n * Specifies the type of `Stretch`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Stretch\"] = 2] = \"Stretch\";\n /**\n * Specifies the type of `Tile`.\n * @private\n */\n PdfGridImagePosition[PdfGridImagePosition[\"Tile\"] = 3] = \"Tile\";\n})(PdfGridImagePosition || (PdfGridImagePosition = {}));\n/**\n * public Enum for `the text rendering direction`.\n * @private\n */\nexport var PdfTextDirection;\n(function (PdfTextDirection) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `LeftToRight`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"LeftToRight\"] = 1] = \"LeftToRight\";\n /**\n * Specifies the type of `RightToLeft`.\n * @private\n */\n PdfTextDirection[PdfTextDirection[\"RightToLeft\"] = 2] = \"RightToLeft\";\n})(PdfTextDirection || (PdfTextDirection = {}));\n","/**\n * public Enum for `PdfFontStyle`.\n * @private\n */\nexport var PdfFontStyle;\n(function (PdfFontStyle) {\n /**\n * Specifies the type of `Regular`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Regular\"] = 0] = \"Regular\";\n /**\n * Specifies the type of `Bold`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Bold\"] = 1] = \"Bold\";\n /**\n * Specifies the type of `Italic`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Italic\"] = 2] = \"Italic\";\n /**\n * Specifies the type of `Underline`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Underline\"] = 4] = \"Underline\";\n /**\n * Specifies the type of `Strikeout`.\n * @private\n */\n PdfFontStyle[PdfFontStyle[\"Strikeout\"] = 8] = \"Strikeout\";\n})(PdfFontStyle || (PdfFontStyle = {}));\n/**\n * Specifies the font family from the standard font.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * ```\n */\nexport var PdfFontFamily;\n(function (PdfFontFamily) {\n /**\n * Specifies the `Helvetica` font.\n */\n PdfFontFamily[PdfFontFamily[\"Helvetica\"] = 0] = \"Helvetica\";\n /**\n * Specifies the `Courier` font.\n */\n PdfFontFamily[PdfFontFamily[\"Courier\"] = 1] = \"Courier\";\n /**\n * Specifies the `TimesRoman` font.\n */\n PdfFontFamily[PdfFontFamily[\"TimesRoman\"] = 2] = \"TimesRoman\";\n /**\n * Specifies the `Symbol` font.\n */\n PdfFontFamily[PdfFontFamily[\"Symbol\"] = 3] = \"Symbol\";\n /**\n * Specifies the `ZapfDingbats` font.\n */\n PdfFontFamily[PdfFontFamily[\"ZapfDingbats\"] = 4] = \"ZapfDingbats\";\n})(PdfFontFamily || (PdfFontFamily = {}));\n/**\n * public Enum for `PdfFontType`.\n * @private\n */\nexport var PdfFontType;\n(function (PdfFontType) {\n /**\n * Specifies the type of `Standard`.\n * @private\n */\n PdfFontType[PdfFontType[\"Standard\"] = 0] = \"Standard\";\n /**\n * Specifies the type of `TrueType`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueType\"] = 1] = \"TrueType\";\n /**\n * Specifies the type of `TrueTypeEmbedded`.\n * @private\n */\n PdfFontType[PdfFontType[\"TrueTypeEmbedded\"] = 2] = \"TrueTypeEmbedded\";\n})(PdfFontType || (PdfFontType = {}));\n/**\n * public Enum for `PdfWordWrapType`.\n * @private\n */\nexport var PdfWordWrapType;\n(function (PdfWordWrapType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `Word`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Word\"] = 1] = \"Word\";\n /**\n * Specifies the type of `WordOnly`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"WordOnly\"] = 2] = \"WordOnly\";\n /**\n * Specifies the type of `Character`.\n * @private\n */\n PdfWordWrapType[PdfWordWrapType[\"Character\"] = 3] = \"Character\";\n})(PdfWordWrapType || (PdfWordWrapType = {}));\n/**\n * public Enum for `PdfSubSuperScript`.\n * @private\n */\nexport var PdfSubSuperScript;\n(function (PdfSubSuperScript) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `SuperScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SuperScript\"] = 1] = \"SuperScript\";\n /**\n * Specifies the type of `SubScript`.\n * @private\n */\n PdfSubSuperScript[PdfSubSuperScript[\"SubScript\"] = 2] = \"SubScript\";\n})(PdfSubSuperScript || (PdfSubSuperScript = {}));\n/**\n * public Enum for `FontEncoding`.\n * @private\n */\nexport var FontEncoding;\n(function (FontEncoding) {\n /**\n * Specifies the type of `Unknown`.\n * @private\n */\n FontEncoding[FontEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `StandardEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"StandardEncoding\"] = 1] = \"StandardEncoding\";\n /**\n * Specifies the type of `MacRomanEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacRomanEncoding\"] = 2] = \"MacRomanEncoding\";\n /**\n * Specifies the type of `MacExpertEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"MacExpertEncoding\"] = 3] = \"MacExpertEncoding\";\n /**\n * Specifies the type of `WinAnsiEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"WinAnsiEncoding\"] = 4] = \"WinAnsiEncoding\";\n /**\n * Specifies the type of `PdfDocEncoding`.\n * @private\n */\n FontEncoding[FontEncoding[\"PdfDocEncoding\"] = 5] = \"PdfDocEncoding\";\n /**\n * Specifies the type of `IdentityH`.\n * @private\n */\n FontEncoding[FontEncoding[\"IdentityH\"] = 6] = \"IdentityH\";\n})(FontEncoding || (FontEncoding = {}));\n/**\n * public Enum for `TtfCmapFormat`.\n * @private\n */\nexport var TtfCmapFormat;\n(function (TtfCmapFormat) {\n /**\n * This is the Apple standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Apple\"] = 0] = \"Apple\";\n /**\n * This is the Microsoft standard character to glyph index mapping table.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Microsoft\"] = 4] = \"Microsoft\";\n /**\n * Format 6: Trimmed table mapping.\n * @private\n */\n TtfCmapFormat[TtfCmapFormat[\"Trimmed\"] = 6] = \"Trimmed\";\n})(TtfCmapFormat || (TtfCmapFormat = {}));\n/**\n * Enumerator that implements CMAP encodings.\n * @private\n */\nexport var TtfCmapEncoding;\n(function (TtfCmapEncoding) {\n /**\n * Unknown encoding.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * When building a symbol font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Symbol\"] = 1] = \"Symbol\";\n /**\n * When building a Unicode font for Windows.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Unicode\"] = 2] = \"Unicode\";\n /**\n * For font that will be used on a Macintosh.\n * @private\n */\n TtfCmapEncoding[TtfCmapEncoding[\"Macintosh\"] = 3] = \"Macintosh\";\n})(TtfCmapEncoding || (TtfCmapEncoding = {}));\n/**\n * Ttf platform ID.\n * @private\n */\nexport var TtfPlatformID;\n(function (TtfPlatformID) {\n /**\n * Apple platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"AppleUnicode\"] = 0] = \"AppleUnicode\";\n /**\n * Macintosh platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Macintosh\"] = 1] = \"Macintosh\";\n /**\n * Iso platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Iso\"] = 2] = \"Iso\";\n /**\n * Microsoft platform.\n * @private\n */\n TtfPlatformID[TtfPlatformID[\"Microsoft\"] = 3] = \"Microsoft\";\n})(TtfPlatformID || (TtfPlatformID = {}));\n/**\n * Microsoft encoding ID.\n * @private\n */\nexport var TtfMicrosoftEncodingID;\n(function (TtfMicrosoftEncodingID) {\n /**\n * Undefined encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Undefined\"] = 0] = \"Undefined\";\n /**\n * Unicode encoding.\n * @private\n */\n TtfMicrosoftEncodingID[TtfMicrosoftEncodingID[\"Unicode\"] = 1] = \"Unicode\";\n})(TtfMicrosoftEncodingID || (TtfMicrosoftEncodingID = {}));\n/**\n * Macintosh encoding ID.\n * @private\n */\nexport var TtfMacintoshEncodingID;\n(function (TtfMacintoshEncodingID) {\n /**\n * Roman encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Roman\"] = 0] = \"Roman\";\n /**\n * Japanese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Japanese\"] = 1] = \"Japanese\";\n /**\n * Chinese encoding.\n * @private\n */\n TtfMacintoshEncodingID[TtfMacintoshEncodingID[\"Chinese\"] = 2] = \"Chinese\";\n})(TtfMacintoshEncodingID || (TtfMacintoshEncodingID = {}));\n/**\n * Enumerator that implements font descriptor flags.\n * @private\n */\nexport var FontDescriptorFlags;\n(function (FontDescriptorFlags) {\n /**\n * All glyphs have the same width (as opposed to proportional or variable-pitch fonts, which have different widths).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"FixedPitch\"] = 1] = \"FixedPitch\";\n /**\n * Glyphs have serifs, which are short strokes drawn at an angle on the top and\n * bottom of glyph stems (as opposed to sans serif fonts, which do not).\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Serif\"] = 2] = \"Serif\";\n /**\n * Font contains glyphs outside the Adobe standard Latin character set. The\n * flag and the nonsymbolic flag cannot both be set or both be clear.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Symbolic\"] = 4] = \"Symbolic\";\n /**\n * Glyphs resemble cursive handwriting.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Script\"] = 8] = \"Script\";\n /**\n * Font uses the Adobe standard Latin character set or a subset of it.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Nonsymbolic\"] = 32] = \"Nonsymbolic\";\n /**\n * Glyphs have dominant vertical strokes that are slanted.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"Italic\"] = 64] = \"Italic\";\n /**\n * Bold font.\n * @private\n */\n FontDescriptorFlags[FontDescriptorFlags[\"ForceBold\"] = 262144] = \"ForceBold\";\n})(FontDescriptorFlags || (FontDescriptorFlags = {}));\n/**\n * true type font composite glyph flags.\n * @private\n */\nexport var TtfCompositeGlyphFlags;\n(function (TtfCompositeGlyphFlags) {\n /**\n * The Arg1And2AreWords.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Arg1And2AreWords\"] = 1] = \"Arg1And2AreWords\";\n /**\n * The ArgsAreXyValues.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"ArgsAreXyValues\"] = 2] = \"ArgsAreXyValues\";\n /**\n * The RoundXyToGrid.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"RoundXyToGrid\"] = 4] = \"RoundXyToGrid\";\n /**\n * The WeHaveScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveScale\"] = 8] = \"WeHaveScale\";\n /**\n * The Reserved.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"Reserved\"] = 16] = \"Reserved\";\n /**\n * The MoreComponents.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"MoreComponents\"] = 32] = \"MoreComponents\";\n /**\n * The WeHaveAnXyScale.\n * @private\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveAnXyScale\"] = 64] = \"WeHaveAnXyScale\";\n /**\n * The WeHaveTwoByTwo\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveTwoByTwo\"] = 128] = \"WeHaveTwoByTwo\";\n /**\n * The WeHaveInstructions.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"WeHaveInstructions\"] = 256] = \"WeHaveInstructions\";\n /**\n * The UseMyMetrics.\n */\n TtfCompositeGlyphFlags[TtfCompositeGlyphFlags[\"UseMyMetrics\"] = 512] = \"UseMyMetrics\";\n})(TtfCompositeGlyphFlags || (TtfCompositeGlyphFlags = {}));\n","import { ObjectStatus } from './../input-output/enum';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './pdf-dictionary-properties';\nimport { Operators } from './pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfReference } from './../primitives/pdf-reference';\nimport { ObjectType } from './cross-table';\nimport { PdfStream } from './../primitives/pdf-stream';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfCatalog } from './../document/pdf-catalog';\n/**\n * `PdfCrossTable` is responsible for intermediate level parsing\n * and savingof a PDF document.\n * @private\n */\nvar PdfCrossTable = /** @class */ (function () {\n function PdfCrossTable() {\n /**\n * The modified `objects` that should be saved.\n * @private\n */\n this.objects = new Dictionary();\n /**\n * Holds `maximal generation number` or offset to object.\n * @default 0\n * @private\n */\n this.maxGenNumIndex = 0;\n /**\n * The `number of the objects`.\n * @default 0\n * @private\n */\n this.objectCount = 0;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new PdfDictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n }\n Object.defineProperty(PdfCrossTable.prototype, \"isMerging\", {\n //Properties\n /**\n * Gets or sets if the document `is merged`.\n * @private\n */\n get: function () {\n return this.merging;\n },\n set: function (value) {\n this.merging = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"trailer\", {\n /**\n * Gets the `trailer`.\n * @private\n */\n get: function () {\n if (this.internalTrailer == null) {\n this.internalTrailer = new PdfStream();\n }\n return this.internalTrailer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"document\", {\n /**\n * Gets or sets the main `PdfDocument` class instance.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n this.items = this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"pdfObjects\", {\n /**\n * Gets the catched `PDF object` main collection.\n * @private\n */\n get: function () {\n return this.items;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"objectCollection\", {\n /**\n * Gets the `object collection`.\n * @private\n */\n get: function () {\n return this.pdfDocument.pdfObjects;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"count\", {\n /**\n * Gets or sets the `number of the objects` within the document.\n * @private\n */\n get: function () {\n return this.objectCount;\n },\n set: function (value) {\n this.objectCount = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCrossTable.prototype, \"nextObjNumber\", {\n /**\n * Returns `next available object number`.\n * @private\n */\n get: function () {\n this.count = this.count + 1;\n return this.count;\n },\n enumerable: true,\n configurable: true\n });\n PdfCrossTable.prototype.save = function (writer, filename) {\n this.saveHead(writer);\n var state = false;\n this.mappedReferences = null;\n this.objects.clear();\n this.markTrailerReferences();\n this.saveObjects(writer);\n var saveCount = this.count;\n var xrefPos = writer.position;\n this.registerObject(0, new PdfReference(0, -1), true);\n var prevXRef = 0;\n writer.write(Operators.xref);\n writer.write(Operators.newLine);\n this.saveSections(writer);\n this.saveTrailer(writer, this.count, prevXRef);\n this.saveTheEndess(writer, xrefPos);\n this.count = saveCount;\n for (var i = 0; i < this.objectCollection.count; ++i) {\n var oi = this.objectCollection.items(i);\n oi.object.isSaving = false;\n }\n if (typeof filename === 'undefined') {\n return writer.stream.buffer;\n }\n else {\n writer.stream.save(filename);\n }\n };\n /**\n * `Saves the endess` of the file.\n * @private\n */\n PdfCrossTable.prototype.saveTheEndess = function (writer, xrefPos) {\n writer.write(Operators.newLine + Operators.startxref + Operators.newLine);\n writer.write(xrefPos.toString() + Operators.newLine);\n writer.write(Operators.eof + Operators.newLine);\n };\n /**\n * `Saves the new trailer` dictionary.\n * @private\n */\n PdfCrossTable.prototype.saveTrailer = function (writer, count, prevXRef) {\n writer.write(Operators.trailer + Operators.newLine);\n // Save the dictionary.\n var trailer = this.trailer;\n trailer.items.setValue(this.dictionaryProperties.size, new PdfNumber(this.objectCount + 1));\n trailer = new PdfDictionary(trailer); // Make it real dictionary.\n trailer.setEncrypt(false);\n trailer.save(writer);\n };\n /**\n * `Saves the xref section`.\n * @private\n */\n PdfCrossTable.prototype.saveSections = function (writer) {\n var objectNum = 0;\n var count = 0;\n do {\n count = this.prepareSubsection(objectNum);\n this.saveSubsection(writer, objectNum, count);\n objectNum += count;\n } while (count !== 0);\n };\n /**\n * `Saves a subsection`.\n * @private\n */\n PdfCrossTable.prototype.saveSubsection = function (writer, objectNum, count) {\n if (count <= 0 || objectNum >= this.count) {\n return;\n }\n var subsectionHead = '{0} {1}{2}';\n writer.write(objectNum + ' ' + (count + 1) + Operators.newLine);\n for (var i = objectNum; i <= objectNum + count; ++i) {\n var obj = this.objects.getValue(i);\n var str = '';\n if (obj.type === ObjectType.Free) {\n str = this.getItem(obj.offset, 65535, true);\n }\n else {\n str = this.getItem(obj.offset, obj.generation, false);\n }\n writer.write(str);\n }\n };\n /**\n * Generates string for `xref table item`.\n * @private\n */\n PdfCrossTable.prototype.getItem = function (offset, genNumber, isFree) {\n var returnString = '';\n var addOffsetLength = 10 - offset.toString().length;\n if (genNumber <= 0) {\n genNumber = 0;\n }\n var addGenNumberLength = (5 - genNumber.toString().length) <= 0 ? 0 : (5 - genNumber.toString().length);\n for (var index = 0; index < addOffsetLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + offset.toString() + ' ';\n for (var index = 0; index < addGenNumberLength; index++) {\n returnString = returnString + '0';\n }\n returnString = returnString + genNumber.toString() + ' ';\n returnString = returnString + ((isFree) ? Operators.f : Operators.n) + Operators.newLine;\n return returnString;\n };\n /**\n * `Prepares a subsection` of the current section within the cross-reference table.\n * @private\n */\n PdfCrossTable.prototype.prepareSubsection = function (objectNum) {\n var count = 0;\n var i;\n var total = this.count;\n for (var k = 0; k < this.document.pdfObjects.count; k++) {\n var reference = this.document.pdfObjects.items(k).reference;\n var refString = reference.toString();\n var refArray = refString.split(' ');\n }\n if (objectNum >= total) {\n return count;\n }\n // search for first changed indirect object.\n for (i = objectNum; i < total; ++i) {\n break;\n }\n objectNum = i;\n // look up for all indirect objects in one subsection.\n for (; i < total; ++i) {\n ++count;\n }\n return count;\n };\n /**\n * `Marks the trailer references` being saved.\n * @private\n */\n PdfCrossTable.prototype.markTrailerReferences = function () {\n var tempArray;\n var keys = this.trailer.items.keys();\n var values = this.trailer.items.values();\n };\n /**\n * `Saves the head`.\n * @private\n */\n PdfCrossTable.prototype.saveHead = function (writer) {\n var version = this.generateFileVersion(writer.document);\n writer.write('%PDF-' + version);\n writer.write(Operators.newLine);\n };\n /**\n * Generates the `version` of the file.\n * @private\n */\n PdfCrossTable.prototype.generateFileVersion = function (document) {\n var iVersion = 4;\n var version = '1.' + iVersion.toString();\n return version;\n };\n PdfCrossTable.prototype.getReference = function (obj, bNew) {\n if (typeof bNew === 'undefined') {\n var wasNew = false;\n return this.getReference(obj, wasNew);\n }\n else {\n //code splitted for reducing lines of code exceeds 100.\n return this.getSubReference(obj, bNew);\n }\n };\n /**\n * Retrieves the `reference` of the object given.\n * @private\n */\n PdfCrossTable.prototype.getSubReference = function (obj, bNew) {\n var isNew = false;\n var wasNew;\n var reference = null;\n // if (obj.IsSaving) {\n if (this.items.count > 0 && obj.objectCollectionIndex > 0 && this.items.count > obj.objectCollectionIndex - 1) {\n var tempObj = this.document.pdfObjects.getReference(obj, wasNew);\n reference = tempObj.reference;\n wasNew = tempObj.wasNew;\n }\n if (reference == null) {\n if (obj.status === ObjectStatus.Registered) {\n wasNew = false;\n }\n else {\n wasNew = true;\n }\n }\n else {\n wasNew = false;\n }\n // need to add mapped reference code\n if (reference == null) {\n var objnumber = this.nextObjNumber;\n reference = new PdfReference(objnumber, 0);\n var found = void 0;\n if (wasNew) {\n this.document.pdfObjects.add(obj);\n this.document.pdfObjects.trySetReference(obj, reference, found);\n var tempIndex = this.document.pdfObjects.count - 1;\n var tempkey = this.document.pdfObjects.objectCollections[tempIndex].reference.objNumber;\n var tempvalue = this.document.pdfObjects.objectCollections[this.document.pdfObjects.count - 1];\n this.document.pdfObjects.mainObjectCollection.setValue(tempkey, tempvalue);\n obj.position = -1;\n }\n else {\n this.document.pdfObjects.trySetReference(obj, reference, found);\n }\n obj.objectCollectionIndex = reference.objNumber;\n obj.status = ObjectStatus.None;\n isNew = true;\n }\n bNew = isNew || this.bForceNew;\n return reference;\n };\n /**\n * `Saves all objects` in the collection.\n * @private\n */\n PdfCrossTable.prototype.saveObjects = function (writer) {\n var objectCollection = this.objectCollection;\n for (var i = 0; i < objectCollection.count; ++i) {\n var oi = objectCollection.items(i);\n var obj = oi.object;\n obj.isSaving = true;\n this.saveIndirectObject(obj, writer);\n }\n };\n /**\n * `Saves indirect object`.\n * @private\n */\n PdfCrossTable.prototype.saveIndirectObject = function (obj, writer) {\n var reference = this.getReference(obj);\n if (obj instanceof PdfCatalog) {\n this.trailer.items.setValue(this.dictionaryProperties.root, reference);\n }\n // NOTE : This is needed for correct string objects encryption.\n this.pdfDocument.currentSavingObj = reference;\n var tempArchive = false;\n tempArchive = obj.getArchive();\n var allowedType = !((obj instanceof PdfStream) || !tempArchive || (obj instanceof PdfCatalog));\n var sigFlag = false;\n this.registerObject(writer.position, reference);\n this.doSaveObject(obj, reference, writer);\n };\n /**\n * Performs `real saving` of the save object.\n * @private\n */\n PdfCrossTable.prototype.doSaveObject = function (obj, reference, writer) {\n var correctPosition = writer.length;\n writer.write(reference.objNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(reference.genNumber.toString());\n writer.write(Operators.whiteSpace);\n writer.write(Operators.obj);\n writer.write(Operators.newLine);\n obj.save(writer);\n var stream = writer.stream;\n writer.write(Operators.endObj);\n writer.write(Operators.newLine);\n };\n PdfCrossTable.prototype.registerObject = function (offset, reference, free) {\n if (typeof free === 'boolean') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference, free));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n else if (typeof free === 'undefined') {\n // Register the object by its number.\n this.objects.setValue(reference.objNumber, new RegisteredObject(offset, reference));\n this.maxGenNumIndex = Math.max(this.maxGenNumIndex, reference.genNumber);\n }\n };\n /**\n * `Dereferences` the specified primitive object.\n * @private\n */\n PdfCrossTable.dereference = function (obj) {\n var rh = obj;\n if (rh != null) {\n obj = rh.object;\n }\n return obj;\n };\n return PdfCrossTable;\n}());\nexport { PdfCrossTable };\nvar RegisteredObject = /** @class */ (function () {\n function RegisteredObject(offset, reference, free) {\n var tempOffset = offset;\n this.offsetNumber = tempOffset;\n var tempReference = reference;\n this.generation = tempReference.genNumber;\n this.object = tempReference.objNumber;\n if (typeof free === 'undefined') {\n this.type = ObjectType.Normal;\n }\n else {\n this.type = ObjectType.Free;\n }\n }\n Object.defineProperty(RegisteredObject.prototype, \"objectNumber\", {\n //Properties\n /**\n * Gets the `object number`.\n * @private\n */\n get: function () {\n return this.object;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(RegisteredObject.prototype, \"offset\", {\n /**\n * Gets the `offset`.\n * @private\n */\n get: function () {\n var result;\n result = this.offsetNumber;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n return RegisteredObject;\n}());\nexport { RegisteredObject };\n","/**\n * Coordinates of Position for `PointF`.\n * @private\n */\nvar PointF = /** @class */ (function () {\n function PointF(x, y) {\n if (typeof x === 'undefined') {\n this.x = 0;\n this.y = 0;\n }\n else {\n if (x !== null) {\n this.x = x;\n }\n else {\n this.x = 0;\n }\n if (y !== null) {\n this.y = y;\n }\n else {\n this.y = 0;\n }\n }\n }\n return PointF;\n}());\nexport { PointF };\n/**\n * Width and Height as `Size`.\n * @private\n */\nvar SizeF = /** @class */ (function () {\n function SizeF(width, height) {\n if (typeof height === 'undefined') {\n this.height = 0;\n this.width = 0;\n }\n else {\n if (height !== null) {\n this.height = height;\n }\n else {\n this.height = 0;\n }\n if (width !== null) {\n this.width = width;\n }\n else {\n this.width = 0;\n }\n }\n }\n return SizeF;\n}());\nexport { SizeF };\n/**\n * `RectangleF` with Position and size.\n * @private\n */\nvar RectangleF = /** @class */ (function () {\n function RectangleF(arg1, arg2, arg3, arg4) {\n if (typeof arg1 === typeof arg1 && typeof arg1 === 'undefined') {\n this.x = 0;\n this.y = 0;\n this.height = 0;\n this.width = 0;\n }\n else {\n if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n var pointf = arg1;\n this.x = pointf.x;\n this.y = pointf.y;\n var sizef = arg2;\n this.height = sizef.height;\n this.width = sizef.width;\n }\n else {\n var x = arg1;\n var y = arg2;\n var width = arg3;\n var height = arg4;\n this.x = x;\n this.y = y;\n this.height = height;\n this.width = width;\n }\n }\n }\n return RectangleF;\n}());\nexport { RectangleF };\n/**\n * `Rectangle` with left, right, top and bottom.\n * @private\n */\nvar Rectangle = /** @class */ (function () {\n /**\n * Instance of `RectangleF` class with X, Y, Width and Height.\n * @private\n */\n function Rectangle(left, top, right, bottom) {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n Object.defineProperty(Rectangle.prototype, \"width\", {\n /**\n * Gets a value of width\n */\n get: function () {\n return this.right - this.left;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"height\", {\n /**\n * Gets a value of height\n */\n get: function () {\n return this.bottom - this.top;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"topLeft\", {\n /**\n * Gets a value of Top and Left\n */\n get: function () {\n return new PointF(this.left, this.top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rectangle.prototype, \"size\", {\n /**\n * Gets a value of size\n */\n get: function () {\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Rectangle.prototype.toString = function () {\n return this.topLeft + 'x' + this.size;\n };\n return Rectangle;\n}());\nexport { Rectangle };\n","/**\n * PdfPageSize.ts class for EJ2-PDF\n */\nimport { SizeF } from './../drawing/pdf-drawing';\n/**\n * Represents information about various predefined `page sizes`.\n */\nvar PdfPageSize = /** @class */ (function () {\n //constructor\n /**\n * Initialize an instance for `PdfPageSize` class.\n * @private\n */\n function PdfPageSize() {\n // \n }\n /**\n * Specifies the size of `letter`.\n * @private\n */\n PdfPageSize.letter = new SizeF(612, 792);\n /**\n * Specifies the size of `note`.\n * @private\n */\n PdfPageSize.note = new SizeF(540, 720);\n /**\n * Specifies the size of `legal`.\n * @private\n */\n PdfPageSize.legal = new SizeF(612, 1008);\n /**\n * Specifies the size of `a0`.\n * @private\n */\n PdfPageSize.a0 = new SizeF(2380, 3368);\n /**\n * Specifies the size of `a1`.\n * @private\n */\n PdfPageSize.a1 = new SizeF(1684, 2380);\n /**\n * Specifies the size of `a2`.\n * @private\n */\n PdfPageSize.a2 = new SizeF(1190, 1684);\n /**\n * Specifies the size of `a3`.\n * @private\n */\n PdfPageSize.a3 = new SizeF(842, 1190);\n /**\n * Specifies the size of `a4`.\n * @private\n */\n PdfPageSize.a4 = new SizeF(595, 842);\n /**\n * Specifies the size of `a5`.\n * @private\n */\n PdfPageSize.a5 = new SizeF(421, 595);\n /**\n * Specifies the size of `a6`.\n * @private\n */\n PdfPageSize.a6 = new SizeF(297, 421);\n /**\n * Specifies the size of `a7`.\n * @private\n */\n PdfPageSize.a7 = new SizeF(210, 297);\n /**\n * Specifies the size of `a8`.\n * @private\n */\n PdfPageSize.a8 = new SizeF(148, 210);\n /**\n * Specifies the size of `a9`.\n * @private\n */\n PdfPageSize.a9 = new SizeF(105, 148);\n /**\n * Specifies the size of `a10`.\n * @private\n */\n PdfPageSize.a10 = new SizeF(74, 105);\n /**\n * Specifies the size of `b0`.\n * @private\n */\n PdfPageSize.b0 = new SizeF(2836, 4008);\n /**\n * Specifies the size of `b1`.\n * @private\n */\n PdfPageSize.b1 = new SizeF(2004, 2836);\n /**\n * Specifies the size of `b2`.\n * @private\n */\n PdfPageSize.b2 = new SizeF(1418, 2004);\n /**\n * Specifies the size of `b3`.\n * @private\n */\n PdfPageSize.b3 = new SizeF(1002, 1418);\n /**\n * Specifies the size of `b4`.\n * @private\n */\n PdfPageSize.b4 = new SizeF(709, 1002);\n /**\n * Specifies the size of `b5`.\n * @private\n */\n PdfPageSize.b5 = new SizeF(501, 709);\n /**\n * Specifies the size of `archE`.\n * @private\n */\n PdfPageSize.archE = new SizeF(2592, 3456);\n /**\n * Specifies the size of `archD`.\n * @private\n */\n PdfPageSize.archD = new SizeF(1728, 2592);\n /**\n * Specifies the size of `archC`.\n * @private\n */\n PdfPageSize.archC = new SizeF(1296, 1728);\n /**\n * Specifies the size of `archB`.\n * @private\n */\n PdfPageSize.archB = new SizeF(864, 1296);\n /**\n * Specifies the size of `archA`.\n * @private\n */\n PdfPageSize.archA = new SizeF(648, 864);\n /**\n * Specifies the size of `flsa`.\n * @private\n */\n PdfPageSize.flsa = new SizeF(612, 936);\n /**\n * Specifies the size of `halfLetter`.\n * @private\n */\n PdfPageSize.halfLetter = new SizeF(396, 612);\n /**\n * Specifies the size of `letter11x17`.\n * @private\n */\n PdfPageSize.letter11x17 = new SizeF(792, 1224);\n /**\n * Specifies the size of `ledger`.\n * @private\n */\n PdfPageSize.ledger = new SizeF(1224, 792);\n return PdfPageSize;\n}());\nexport { PdfPageSize };\n","/**\n * PdfMargins.ts class for EJ2-PDF\n * A class representing PDF page margins.\n */\nvar PdfMargins = /** @class */ (function () {\n /**\n * Initializes a new instance of the `PdfMargins` class.\n * @private\n */\n function PdfMargins() {\n /**\n * Represents the `Default Page Margin` value.\n * @default 0.0\n * @private\n */\n this.pdfMargin = 40.0;\n this.setMargins(this.pdfMargin);\n }\n Object.defineProperty(PdfMargins.prototype, \"left\", {\n //Properties\n /**\n * Gets or sets the `left margin` size.\n * @private\n */\n get: function () {\n return this.leftMargin;\n },\n set: function (value) {\n this.leftMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"top\", {\n /**\n * Gets or sets the `top margin` size.\n * @private\n */\n get: function () {\n return this.topMargin;\n },\n set: function (value) {\n this.topMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"right\", {\n /**\n * Gets or sets the `right margin` size.\n * @private\n */\n get: function () {\n return this.rightMargin;\n },\n set: function (value) {\n this.rightMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"bottom\", {\n /**\n * Gets or sets the `bottom margin` size.\n * @private\n */\n get: function () {\n return this.bottomMargin;\n },\n set: function (value) {\n this.bottomMargin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfMargins.prototype, \"all\", {\n /**\n * Sets the `margins`.\n * @private\n */\n set: function (value) {\n this.setMargins(value);\n },\n enumerable: true,\n configurable: true\n });\n PdfMargins.prototype.setMargins = function (margin1, margin2, margin3, margin4) {\n if (typeof margin2 === 'undefined') {\n this.leftMargin = this.topMargin = this.rightMargin = this.bottomMargin = margin1;\n }\n else {\n if (typeof margin3 === 'undefined') {\n this.leftMargin = this.rightMargin = margin1;\n this.bottomMargin = this.topMargin = margin2;\n }\n else {\n this.leftMargin = margin1;\n this.topMargin = margin2;\n this.rightMargin = margin3;\n this.bottomMargin = margin4;\n }\n }\n };\n /**\n * `Clones` the object.\n * @private\n */\n PdfMargins.prototype.clone = function () {\n return this;\n };\n return PdfMargins;\n}());\nexport { PdfMargins };\n","/**\n * PdfPageSettings.ts class for EJ2-PDF\n */\nimport { SizeF, PointF } from './../drawing/pdf-drawing';\nimport { PdfPageSize } from './pdf-page-size';\nimport { PdfPageRotateAngle, PdfPageOrientation } from './enum';\nimport { PdfMargins } from './../graphics/pdf-margins';\n/**\n * The class provides various `setting` related with PDF pages.\n */\nvar PdfPageSettings = /** @class */ (function () {\n function PdfPageSettings(margins) {\n //Fields\n /**\n * The page `margins`.\n * @private\n */\n this.pageMargins = new PdfMargins();\n /**\n * The page `size`.\n * @default a4\n * @private\n */\n this.pageSize = PdfPageSize.a4;\n /**\n * The page `rotation angle`.\n * @default PdfPageRotateAngle.RotateAngle0\n * @private\n */\n this.rotateAngle = PdfPageRotateAngle.RotateAngle0;\n /**\n * The page `orientation`.\n * @default PdfPageOrientation.Portrait\n * @private\n */\n this.pageOrientation = PdfPageOrientation.Portrait;\n /**\n * The page `origin`.\n * @default 0,0\n * @private\n */\n this.pageOrigin = new PointF(0, 0);\n /**\n * Checks the Whether the `rotation` is applied or not.\n * @default false\n * @private\n */\n this.isRotation = false;\n if (typeof margins === 'number') {\n this.pageMargins.setMargins(margins);\n }\n }\n Object.defineProperty(PdfPageSettings.prototype, \"size\", {\n //Properties\n /**\n * Gets or sets the `size` of the page.\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.setSize(value);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"orientation\", {\n /**\n * Gets or sets the page `orientation`.\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (orientation) {\n if (this.pageOrientation !== orientation) {\n this.pageOrientation = orientation;\n this.updateSize(orientation);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"margins\", {\n /**\n * Gets or sets the `margins` of the page.\n * @private\n */\n get: function () {\n return this.pageMargins;\n },\n set: function (value) {\n this.pageMargins = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"width\", {\n /**\n * Gets or sets the `width` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.width;\n },\n set: function (value) {\n this.pageSize.width = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"height\", {\n /**\n * Gets or sets the `height` of the page.\n * @private\n */\n get: function () {\n return this.pageSize.height;\n },\n set: function (value) {\n this.pageSize.height = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"origin\", {\n /**\n * Gets or sets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageSettings.prototype, \"rotate\", {\n /**\n * Gets or sets the number of degrees by which the page should be `rotated` clockwise when displayed or printed.\n * @private\n */\n get: function () {\n return this.rotateAngle;\n },\n set: function (value) {\n this.rotateAngle = value;\n this.isRotation = true;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Update page size` depending on orientation.\n * @private\n */\n PdfPageSettings.prototype.updateSize = function (orientation) {\n var min = Math.min(this.pageSize.width, this.pageSize.height);\n var max = Math.max(this.pageSize.width, this.pageSize.height);\n switch (orientation) {\n case PdfPageOrientation.Portrait:\n this.pageSize = new SizeF(min, max);\n break;\n case PdfPageOrientation.Landscape:\n this.pageSize = new SizeF(max, min);\n break;\n }\n };\n /**\n * Creates a `clone` of the object.\n * @private\n */\n PdfPageSettings.prototype.clone = function () {\n var settings = this;\n settings.pageMargins = this.pageMargins.clone();\n // if (GetTransition() != null)\n // {\n // settings.Transition = (PdfPageTransition)Transition.clone();\n // }\n return settings;\n };\n /**\n * Returns `size`, shrinked by the margins.\n * @private\n */\n PdfPageSettings.prototype.getActualSize = function () {\n var width = this.width - (this.margins.left + this.margins.right);\n var height = this.height - (this.margins.top + this.margins.bottom);\n var size = new SizeF(width, height);\n return size;\n };\n /**\n * Sets `size` to the page aaccording to the orientation.\n * @private\n */\n PdfPageSettings.prototype.setSize = function (size) {\n var min = Math.min(size.width, size.height);\n var max = Math.max(size.width, size.height);\n if (this.orientation === PdfPageOrientation.Portrait) {\n this.pageSize = new SizeF(min, max);\n }\n else {\n this.pageSize = new SizeF(max, min);\n }\n };\n return PdfPageSettings;\n}());\nexport { PdfPageSettings };\n","import { Operators } from './pdf-operators';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PointF, RectangleF } from './../drawing/pdf-drawing';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfName } from './../primitives/pdf-name';\n/**\n * Helper class to `write PDF graphic streams` easily.\n * @private\n */\nvar PdfStreamWriter = /** @class */ (function () {\n /**\n * Initialize an instance of `PdfStreamWriter` class.\n * @private\n */\n function PdfStreamWriter(stream) {\n if (stream == null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.stream = stream;\n }\n //Implementation\n /**\n * `Clear` the stream.\n * @public\n */\n PdfStreamWriter.prototype.clear = function () {\n this.stream.clearStream();\n };\n PdfStreamWriter.prototype.setGraphicsState = function (dictionaryName) {\n if (dictionaryName instanceof PdfName) {\n this.stream.write(dictionaryName.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n else {\n this.stream.write(Operators.slash);\n this.stream.write(dictionaryName);\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setGraphicsState);\n }\n };\n /**\n * `Executes the XObject`.\n * @private\n */\n PdfStreamWriter.prototype.executeObject = function (name) {\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.paintXObject);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes path object`.\n * @private\n */\n PdfStreamWriter.prototype.closePath = function () {\n this.writeOperator(Operators.closePath);\n };\n /**\n * `Clips the path`.\n * @private\n */\n PdfStreamWriter.prototype.clipPath = function (useEvenOddRule) {\n this.stream.write(Operators.clipPath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n }\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.endPath);\n this.stream.write(Operators.newLine);\n };\n /**\n * `Closes, then fills and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.closeFillStrokePath);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills and strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.fillStrokePath = function (useEvenOddRule) {\n this.stream.write(Operators.fillStroke);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Fills path`.\n * @private\n */\n PdfStreamWriter.prototype.fillPath = function (useEvenOddRule) {\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Ends the path`.\n * @private\n */\n PdfStreamWriter.prototype.endPath = function () {\n this.writeOperator(Operators.n);\n };\n /**\n * `Closes and fills the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeFillPath = function (useEvenOddRule) {\n this.writeOperator(Operators.closePath);\n this.stream.write(Operators.fill);\n if (useEvenOddRule) {\n this.stream.write(Operators.evenOdd);\n this.stream.write(Operators.newLine);\n }\n else {\n this.stream.write(Operators.newLine);\n }\n };\n /**\n * `Closes and strokes the path`.\n * @private\n */\n PdfStreamWriter.prototype.closeStrokePath = function () {\n this.writeOperator(Operators.closeStrokePath);\n };\n /**\n * `Sets the text scaling`.\n * @private\n */\n PdfStreamWriter.prototype.setTextScaling = function (textScaling) {\n this.stream.write(PdfNumber.floatToString(textScaling));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextScaling);\n };\n /**\n * `Strokes path`.\n * @private\n */\n PdfStreamWriter.prototype.strokePath = function () {\n this.writeOperator(Operators.stroke);\n };\n /**\n * `Restores` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.restoreGraphicsState = function () {\n this.writeOperator(Operators.restoreState);\n };\n /**\n * `Saves` the graphics state.\n * @private\n */\n PdfStreamWriter.prototype.saveGraphicsState = function () {\n this.writeOperator(Operators.saveState);\n };\n PdfStreamWriter.prototype.startNextLine = function (arg1, arg2) {\n if (typeof arg1 === 'undefined') {\n this.writeOperator(Operators.goToNextLine);\n }\n else if (arg1 instanceof PointF) {\n this.writePoint(arg1);\n this.writeOperator(Operators.setCoords);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.setCoords);\n }\n };\n /**\n * Shows the `text`.\n * @private\n */\n PdfStreamWriter.prototype.showText = function (text) {\n this.checkTextParam(text);\n this.writeText(text);\n this.writeOperator(Operators.setText);\n };\n /**\n * Sets `text leading`.\n * @private\n */\n PdfStreamWriter.prototype.setLeading = function (leading) {\n this.stream.write(PdfNumber.floatToString(leading));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setTextLeading);\n };\n /**\n * `Begins the path`.\n * @private\n */\n PdfStreamWriter.prototype.beginPath = function (x, y) {\n this.writePoint(x, y);\n this.writeOperator(Operators.beginPath);\n };\n /**\n * `Begins text`.\n * @private\n */\n PdfStreamWriter.prototype.beginText = function () {\n this.writeOperator(Operators.beginText);\n };\n /**\n * `Ends text`.\n * @private\n */\n PdfStreamWriter.prototype.endText = function () {\n this.writeOperator(Operators.endText);\n };\n PdfStreamWriter.prototype.appendRectangle = function (arg1, arg2, arg3, arg4) {\n if (arg1 instanceof RectangleF) {\n this.appendRectangle(arg1.x, arg1.y, arg1.width, arg1.height);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writePoint(arg3, arg4);\n this.writeOperator(Operators.appendRectangle);\n }\n };\n PdfStreamWriter.prototype.appendLineSegment = function (arg1, arg2) {\n if (arg1 instanceof PointF) {\n this.appendLineSegment(arg1.x, arg1.y);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writeOperator(Operators.appendLineSegment);\n }\n };\n /**\n * Sets the `text rendering mode`.\n * @private\n */\n PdfStreamWriter.prototype.setTextRenderingMode = function (renderingMode) {\n this.stream.write(renderingMode.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setRenderingMode);\n };\n /**\n * Sets the `character spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setCharacterSpacing = function (charSpacing) {\n this.stream.write(PdfNumber.floatToString(charSpacing));\n this.stream.write(Operators.whiteSpace);\n this.stream.write(Operators.setCharacterSpace);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `word spacing`.\n * @private\n */\n PdfStreamWriter.prototype.setWordSpacing = function (wordSpacing) {\n this.stream.write(PdfNumber.floatToString(wordSpacing));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setWordSpace);\n };\n PdfStreamWriter.prototype.showNextLineText = function (arg1, arg2) {\n if (arg1 instanceof PdfString) {\n this.checkTextParam(arg1);\n this.writeText(arg1);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n else {\n this.checkTextParam(arg1);\n this.writeText(arg1, arg2);\n this.writeOperator(Operators.setTextOnNewLine);\n }\n };\n PdfStreamWriter.prototype.setColorSpace = function (arg1, arg2) {\n if (arg1 instanceof PdfName && typeof arg2 === 'boolean') {\n var temparg1 = arg1;\n var temparg2 = arg2;\n // if (temparg1 == null) {\n // throw new Error('ArgumentNullException:name');\n // }\n var op = (temparg2) ? Operators.selectcolorspaceforstroking : Operators.selectcolorspacefornonstroking;\n this.stream.write(temparg1.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(op);\n this.stream.write(Operators.newLine);\n }\n else {\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.setColorSpace(new PdfName(temparg1), temparg2);\n }\n };\n /**\n * Modifies current `transformation matrix`.\n * @private\n */\n PdfStreamWriter.prototype.modifyCtm = function (matrix) {\n if (matrix == null) {\n throw new Error('ArgumentNullException:matrix');\n }\n this.stream.write(matrix.toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.modifyCtm);\n };\n PdfStreamWriter.prototype.setFont = function (font, name, size) {\n if (typeof name === 'string') {\n this.setFont(font, new PdfName(name), size);\n }\n else {\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.stream.write(name.toString());\n this.stream.write(Operators.whiteSpace);\n this.stream.write(PdfNumber.floatToString(size));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setFont);\n }\n };\n /**\n * `Writes the operator`.\n * @private\n */\n PdfStreamWriter.prototype.writeOperator = function (opcode) {\n this.stream.write(opcode);\n this.stream.write(Operators.newLine);\n };\n PdfStreamWriter.prototype.checkTextParam = function (text) {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (typeof text === 'string' && text === '') {\n throw new Error('ArgumentException:The text can not be an empty string, text');\n }\n };\n PdfStreamWriter.prototype.writeText = function (arg1, arg2) {\n if ((arg1 instanceof PdfString) && (typeof arg2 === 'undefined')) {\n this.stream.write(arg1.pdfEncode());\n }\n else {\n var start = void 0;\n var end = void 0;\n if (arg2) {\n start = PdfString.hexStringMark[0];\n end = PdfString.hexStringMark[1];\n }\n else {\n start = PdfString.stringMark[0];\n end = PdfString.stringMark[1];\n }\n this.stream.write(start);\n this.stream.write(arg1);\n this.stream.write(end);\n }\n };\n PdfStreamWriter.prototype.writePoint = function (arg1, arg2) {\n if ((arg1 instanceof PointF) && (typeof arg2 === 'undefined')) {\n this.writePoint(arg1.x, arg1.y);\n }\n else {\n var temparg1 = arg1;\n this.stream.write(PdfNumber.floatToString(temparg1));\n this.stream.write(Operators.whiteSpace);\n // NOTE: Change Y co-ordinate because we shifted co-ordinate system only.\n arg2 = this.updateY(arg2);\n this.stream.write(PdfNumber.floatToString(arg2));\n this.stream.write(Operators.whiteSpace);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfStreamWriter.prototype.updateY = function (arg) {\n return -arg;\n };\n /**\n * `Writes string` to the file.\n * @private\n */\n PdfStreamWriter.prototype.write = function (string) {\n var builder = '';\n builder += string;\n builder += Operators.newLine;\n this.writeOperator(builder);\n };\n /**\n * `Writes comment` to the file.\n * @private\n */\n PdfStreamWriter.prototype.writeComment = function (comment) {\n if (comment != null && comment.length > 0) {\n var builder = '';\n builder += Operators.comment;\n builder += Operators.whiteSpace;\n builder += comment;\n //builder.Append( Operators.NewLine );\n this.writeOperator(builder);\n }\n else {\n throw new Error('Invalid comment');\n }\n };\n /**\n * Sets the `color and space`.\n * @private\n */\n PdfStreamWriter.prototype.setColorAndSpace = function (color, colorSpace, forStroking) {\n if (!color.isEmpty) {\n // bool test = color is PdfExtendedColor;\n this.stream.write(color.toString(colorSpace, forStroking));\n this.stream.write(Operators.newLine);\n }\n };\n // public setLineDashPattern(pattern : number[], patternOffset : number) : void\n // {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n // }\n // private setLineDashPatternHelper(pattern : PdfArray, patternOffset : PdfNumber) : void\n // {\n // pattern.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // patternOffset.Save(this);\n // this.m_stream.write(Operators.whiteSpace);\n // this.writeOperator(Operators.setDashPattern);\n // }\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPattern = function (pattern, patternOffset) {\n // let pat : PdfArray = new PdfArray(pattern);\n // let off : PdfNumber = new PdfNumber(patternOffset);\n // this.setLineDashPatternHelper(pat, off);\n this.setLineDashPatternHelper(pattern, patternOffset);\n };\n /**\n * Sets the `line dash pattern`.\n * @private\n */\n PdfStreamWriter.prototype.setLineDashPatternHelper = function (pattern, patternOffset) {\n var tempPattern = '[';\n if (pattern.length > 1) {\n for (var index = 0; index < pattern.length; index++) {\n if (index === pattern.length - 1) {\n tempPattern += pattern[index].toString();\n }\n else {\n tempPattern += pattern[index].toString() + ' ';\n }\n }\n }\n tempPattern += '] ';\n tempPattern += patternOffset.toString();\n tempPattern += ' ' + Operators.setDashPattern;\n this.stream.write(tempPattern);\n this.stream.write(Operators.newLine);\n };\n /**\n * Sets the `miter limit`.\n * @private\n */\n PdfStreamWriter.prototype.setMiterLimit = function (miterLimit) {\n this.stream.write(PdfNumber.floatToString(miterLimit));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setMiterLimit);\n };\n /**\n * Sets the `width of the line`.\n * @private\n */\n PdfStreamWriter.prototype.setLineWidth = function (width) {\n this.stream.write(PdfNumber.floatToString(width));\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineWidth);\n };\n /**\n * Sets the `line cap`.\n * @private\n */\n PdfStreamWriter.prototype.setLineCap = function (lineCapStyle) {\n this.stream.write((lineCapStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineCapStyle);\n };\n /**\n * Sets the `line join`.\n * @private\n */\n PdfStreamWriter.prototype.setLineJoin = function (lineJoinStyle) {\n this.stream.write((lineJoinStyle).toString());\n this.stream.write(Operators.whiteSpace);\n this.writeOperator(Operators.setLineJoinStyle);\n };\n Object.defineProperty(PdfStreamWriter.prototype, \"position\", {\n //IPdfWriter members\n /**\n * Gets or sets the current `position` within the stream.\n * @private\n */\n get: function () {\n return this.stream.position;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"length\", {\n /**\n * Gets `stream length`.\n * @private\n */\n get: function () {\n var returnValue = 0;\n if (this.stream.data.length !== 0 && this.stream.data.length !== -1) {\n for (var index = 0; index < this.stream.data.length; index++) {\n returnValue += this.stream.data[index].length;\n }\n }\n return returnValue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStreamWriter.prototype, \"document\", {\n /**\n * Gets and Sets the `current document`.\n * @private\n */\n get: function () {\n return null;\n },\n enumerable: true,\n configurable: true\n });\n /* tslint:disable-next-line:max-line-length */\n PdfStreamWriter.prototype.appendBezierSegment = function (arg1, arg2, arg3, arg4, arg5, arg6) {\n if (arg1 instanceof PointF && arg2 instanceof PointF && arg3 instanceof PointF) {\n this.writePoint(arg1.x, arg1.y);\n this.writePoint(arg2.x, arg2.y);\n this.writePoint(arg3.x, arg3.y);\n }\n else {\n this.writePoint(arg1, arg2);\n this.writePoint(arg3, arg4);\n this.writePoint(arg5, arg6);\n }\n this.writeOperator(Operators.appendbeziercurve);\n };\n PdfStreamWriter.prototype.setColourWithPattern = function (colours, patternName, forStroking) {\n if ((colours != null)) {\n var count = colours.length;\n var i = 0;\n for (i = 0; i < count; ++i) {\n this.stream.write(colours[i].toString());\n this.stream.write(Operators.whiteSpace);\n }\n }\n if ((patternName != null)) {\n this.stream.write(patternName.toString());\n this.stream.write(Operators.whiteSpace);\n }\n if (forStroking) {\n this.writeOperator(Operators.setColorAndPatternStroking);\n }\n else {\n this.writeOperator(Operators.setColorAndPattern);\n }\n };\n return PdfStreamWriter;\n}());\nexport { PdfStreamWriter };\n","import { SizeF, RectangleF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfWordWrapType } from './enum';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Class `lay outing the text`.\n */\nvar PdfStringLayouter = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringLayouter` class.\n * @private\n */\n function PdfStringLayouter() {\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n //\n }\n PdfStringLayouter.prototype.layout = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n if (arg4 instanceof RectangleF) {\n this.initialize(arg1, arg2, arg3, arg4, arg5);\n this.isOverloadWithPosition = arg6;\n this.clientSize = arg7;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n else {\n this.initialize(arg1, arg2, arg3, arg4);\n this.isOverloadWithPosition = arg5;\n this.clientSize = arg6;\n var result = this.doLayout();\n this.clear();\n return result;\n }\n };\n PdfStringLayouter.prototype.initialize = function (text, font, format, rectSize, pageHeight) {\n if (typeof pageHeight === 'number') {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (font == null) {\n throw new Error('ArgumentNullException:font');\n }\n this.text = text;\n this.font = font;\n this.format = format;\n this.size = new SizeF(rectSize.width, rectSize.height);\n this.rectangle = rectSize;\n this.pageHeight = pageHeight;\n this.reader = new StringTokenizer(text);\n }\n else {\n this.initialize(text, font, format, new RectangleF(new PointF(0, 0), rectSize), 0);\n }\n };\n /**\n * `Clear` all resources.\n * @private\n */\n PdfStringLayouter.prototype.clear = function () {\n this.font = null;\n this.format = null;\n this.reader.close();\n this.reader = null;\n this.text = null;\n };\n /**\n * `Layouts` the text.\n * @private\n */\n PdfStringLayouter.prototype.doLayout = function () {\n var result = new PdfStringLayoutResult();\n var lineResult = new PdfStringLayoutResult();\n var lines = [];\n var line = this.reader.peekLine();\n var lineIndent = this.getLineIndent(true);\n while (line != null) {\n lineResult = this.layoutLine(line, lineIndent);\n if (lineResult !== null || typeof lineResult !== 'undefined') {\n var numSymbolsInserted = 0;\n /* tslint:disable */\n var returnedValue = this.copyToResult(result, lineResult, lines, /*out*/ numSymbolsInserted);\n /* tslint:enable */\n var success = returnedValue.success;\n numSymbolsInserted = returnedValue.numInserted;\n if (!success) {\n this.reader.read(numSymbolsInserted);\n break;\n }\n }\n // if (lineResult.textRemainder != null && lineResult.textRemainder.length > 0 ) {\n // break;\n // }\n this.reader.readLine();\n line = this.reader.peekLine();\n lineIndent = this.getLineIndent(false);\n }\n this.finalizeResult(result, lines);\n return result;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineIndent = function (firstLine) {\n var lineIndent = 0;\n if (this.format != null) {\n lineIndent = (firstLine) ? this.format.firstLineIndent : this.format.paragraphIndent;\n lineIndent = (this.size.width > 0) ? Math.min(this.size.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates `height` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineHeight = function () {\n var height = this.font.height;\n if (this.format != null && this.format.lineSpacing !== 0) {\n height = this.format.lineSpacing + this.font.height;\n }\n return height;\n };\n /**\n * Calculates `width` of the line.\n * @private\n */\n PdfStringLayouter.prototype.getLineWidth = function (line) {\n var width = this.font.getLineWidth(line, this.format);\n return width;\n };\n // tslint:disable\n /**\n * `Layouts` line.\n * @private\n */\n PdfStringLayouter.prototype.layoutLine = function (line, lineIndent) {\n var lineResult = new PdfStringLayoutResult();\n lineResult.layoutLineHeight = this.getLineHeight();\n var lines = [];\n var maxWidth = this.size.width;\n var lineWidth = this.getLineWidth(line) + lineIndent;\n var lineType = LineType.FirstParagraphLine;\n var readWord = true;\n // line is in bounds.\n if (maxWidth <= 0 || Math.round(lineWidth) <= Math.round(maxWidth)) {\n this.addToLineResult(lineResult, lines, line, lineWidth, LineType.NewLineBreak | lineType);\n }\n else {\n var builder = '';\n var curLine = '';\n lineWidth = lineIndent;\n var curIndent = lineIndent;\n var reader = new StringTokenizer(line);\n var word = reader.peekWord();\n var isSingleWord = false;\n if (word.length !== reader.length) {\n if (word === ' ') {\n curLine = curLine + word;\n builder = builder + word;\n reader.position += 1;\n word = reader.peekWord();\n }\n }\n while (word != null) {\n curLine = curLine + word;\n var curLineWidth = this.getLineWidth(curLine.toString()) + curIndent /*)*/;\n if (curLine.toString() === ' ') {\n curLine = '';\n curLineWidth = 0;\n }\n if (curLineWidth > maxWidth) {\n if (this.getWrapType() === PdfWordWrapType.None) {\n break;\n }\n if (curLine.length === word.length) {\n // Character wrap is disabled or one symbol is greater than bounds.\n if (this.getWrapType() === PdfWordWrapType.WordOnly) {\n lineResult.textRemainder = line.substring(reader.position);\n break;\n }\n else if (curLine.length === 1) {\n builder = builder + word;\n break;\n }\n else {\n readWord = false;\n curLine = '';\n word = reader.peek().toString();\n continue;\n }\n }\n else {\n if (this.getLineWidth(word.toString()) > maxWidth) {\n this.format.wordWrap = PdfWordWrapType.Character;\n }\n else {\n if (typeof this.format !== 'undefined' && this.format !== null) {\n this.format.wordWrap = PdfWordWrapType.Word;\n }\n }\n if (this.getWrapType() !== PdfWordWrapType.Character || !readWord) {\n var ln = builder.toString();\n // if (ln.indexOf(' ') === -1) {\n // isSingleWord = true;\n // this.addToLineResult(lineResult, lines, curLine, lineWidth, LineType.LayoutBreak | lineType);\n // } else {\n // this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n // } \n if (ln !== ' ') {\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);\n }\n if (this.isOverloadWithPosition) {\n maxWidth = this.clientSize.width;\n }\n curLine = '';\n builder = '';\n lineWidth = 0;\n curIndent = 0;\n curLineWidth = 0;\n lineType = LineType.None;\n // if (isSingleWord) {\n // reader.readWord();\n // readWord = false;\n // }\n word = (readWord) ? word : reader.peekWord();\n //isSingleWord = false;\n readWord = true;\n }\n else {\n readWord = false;\n curLine = '';\n curLine = curLine + builder.toString();\n word = reader.peek().toString();\n }\n continue;\n }\n }\n /*tslint:disable:max-func-body-length */\n builder = builder + word;\n lineWidth = curLineWidth;\n if (readWord) {\n reader.readWord();\n word = reader.peekWord();\n //isSingleWord = false;\n }\n else {\n reader.read();\n word = reader.peek().toString();\n }\n }\n if (builder.length > 0) {\n var ln = builder.toString();\n this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.NewLineBreak | LineType.LastParagraphLine);\n }\n reader.close();\n }\n lineResult.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n lineResult.layoutLines.push(lines[index]);\n }\n lines = [];\n return lineResult;\n };\n /**\n * `Adds` line to line result.\n * @private\n */\n PdfStringLayouter.prototype.addToLineResult = function (lineResult, lines, line, lineWidth, breakType) {\n var info = new LineInfo();\n info.text = line;\n info.width = lineWidth;\n info.lineType = breakType;\n lines.push(info);\n var size = lineResult.actualSize;\n size.height += this.getLineHeight();\n size.width = Math.max(size.width, lineWidth);\n lineResult.size = size;\n };\n /**\n * `Copies` layout result from line result to entire result. Checks whether we can proceed lay outing or not.\n * @private\n */\n PdfStringLayouter.prototype.copyToResult = function (result, lineResult, lines, \n /*out*/ numInserted) {\n var success = true;\n var allowPartialLines = (this.format != null && !this.format.lineLimit);\n var height = result.actualSize.height;\n var maxHeight = this.size.height;\n if ((this.pageHeight > 0) && (maxHeight + this.rectangle.y > this.pageHeight)) {\n maxHeight = this.rectangle.y - this.pageHeight;\n maxHeight = Math.max(maxHeight, -maxHeight);\n }\n numInserted = 0;\n if (lineResult.lines != null) {\n for (var i = 0, len = lineResult.lines.length; i < len; i++) {\n var expHeight = height + lineResult.lineHeight;\n if (expHeight <= maxHeight || maxHeight <= 0 || allowPartialLines) {\n var info = lineResult.lines[i];\n numInserted += info.text.length;\n info = this.trimLine(info, (lines.length === 0));\n lines.push(info);\n // Update width.\n var size = result.actualSize;\n size.width = Math.max(size.width, info.width);\n result.size = size;\n // The part of the line fits only and it's allowed to use partial lines.\n // if (expHeight >= maxHeight && maxHeight > 0 && allowPartialLines)\n // {\n // let shouldClip : boolean = (this.format == null || !this.format.noClip);\n // if (shouldClip)\n // {\n // let exceededHeight : number = expHeight - maxHeight;\n // let fitHeight : number = /*Utils.Round(*/ lineResult.lineHeight - exceededHeight /*)*/;\n // height = /*Utils.Round(*/ height + fitHeight /*)*/;\n // }\n // else\n // {\n // height = expHeight;\n // }\n // success = false;\n // break;\n // } else {\n height = expHeight;\n // }\n }\n else {\n success = false;\n break;\n }\n }\n }\n if (height != result.size.height) {\n var size1 = result.actualSize;\n size1.height = height;\n result.size = size1;\n }\n return { success: success, numInserted: numInserted };\n };\n /**\n * `Finalizes` final result.\n * @private\n */\n PdfStringLayouter.prototype.finalizeResult = function (result, lines) {\n result.layoutLines = [];\n for (var index = 0; index < lines.length; index++) {\n result.layoutLines.push(lines[index]);\n }\n result.layoutLineHeight = this.getLineHeight();\n if (!this.reader.end) {\n result.textRemainder = this.reader.readToEnd();\n }\n lines = [];\n };\n /**\n * `Trims` whitespaces at the line.\n * @private\n */\n PdfStringLayouter.prototype.trimLine = function (info, firstLine) {\n var line = info.text;\n var lineWidth = info.width;\n // Trim start whitespaces if the line is not a start of the paragraph only.\n var trimStartSpaces = ((info.lineType & LineType.FirstParagraphLine) === 0);\n var start = (this.format == null || !this.format.rightToLeft);\n var spaces = StringTokenizer.spaces;\n line = (start) ? line.trim() : line.trim();\n // Recalculate line width.\n if (line.length !== info.text.length) {\n lineWidth = this.getLineWidth(line);\n if ((info.lineType & LineType.FirstParagraphLine) > 0) {\n lineWidth += this.getLineIndent(firstLine);\n }\n }\n info.text = line;\n info.width = lineWidth;\n return info;\n };\n /**\n * Returns `wrap` type.\n * @private\n */\n PdfStringLayouter.prototype.getWrapType = function () {\n var wrapType = (this.format != null) ? this.format.wordWrap : PdfWordWrapType.Word;\n return wrapType;\n };\n return PdfStringLayouter;\n}());\nexport { PdfStringLayouter };\n//Internal declaration\nvar PdfStringLayoutResult = /** @class */ (function () {\n function PdfStringLayoutResult() {\n }\n Object.defineProperty(PdfStringLayoutResult.prototype, \"remainder\", {\n // Properties\n /**\n * Gets the `text` which is not lay outed.\n * @private\n */\n get: function () {\n return this.textRemainder;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"actualSize\", {\n /**\n * Gets the actual layout text `bounds`.\n * @private\n */\n get: function () {\n if (typeof this.size === 'undefined') {\n this.size = new SizeF(0, 0);\n }\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lines\", {\n /**\n * Gets layout `lines` information.\n * @private\n */\n get: function () {\n return this.layoutLines;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineHeight\", {\n /**\n * Gets the `height` of the line.\n * @private\n */\n get: function () {\n return this.layoutLineHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"empty\", {\n /**\n * Gets value that indicates whether any layout text [`empty`].\n * @private\n */\n get: function () {\n return (this.layoutLines == null || this.layoutLines.length === 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringLayoutResult.prototype, \"lineCount\", {\n /**\n * Gets `number of` the layout lines.\n * @private\n */\n get: function () {\n var count = (!this.empty) ? this.layoutLines.length : 0;\n return count;\n },\n enumerable: true,\n configurable: true\n });\n return PdfStringLayoutResult;\n}());\nexport { PdfStringLayoutResult };\nvar LineInfo = /** @class */ (function () {\n function LineInfo() {\n }\n Object.defineProperty(LineInfo.prototype, \"lineType\", {\n //Properties\n /**\n * Gets the `type` of the line text.\n * @private\n */\n get: function () {\n return this.type;\n },\n set: function (value) {\n this.type = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"text\", {\n /**\n * Gets the line `text`.\n * @private\n */\n get: function () {\n return this.content;\n },\n set: function (value) {\n this.content = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineInfo.prototype, \"width\", {\n /**\n * Gets `width` of the line text.\n * @private\n */\n get: function () {\n return this.lineWidth;\n },\n set: function (value) {\n this.lineWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n return LineInfo;\n}());\nexport { LineInfo };\n/**\n* Break type of the `line`.\n* @private\n*/\nexport var LineType;\n(function (LineType) {\n /**\n * Specifies the type of `None`.\n * @private\n */\n LineType[LineType[\"None\"] = 0] = \"None\";\n /**\n * Specifies the type of `NewLineBreak`.\n * @private\n */\n LineType[LineType[\"NewLineBreak\"] = 1] = \"NewLineBreak\";\n /**\n * Specifies the type of `LayoutBreak`.\n * @private\n */\n LineType[LineType[\"LayoutBreak\"] = 2] = \"LayoutBreak\";\n /**\n * Specifies the type of `FirstParagraphLine`.\n * @private\n */\n LineType[LineType[\"FirstParagraphLine\"] = 4] = \"FirstParagraphLine\";\n /**\n * Specifies the type of `LastParagraphLine`.\n * @private\n */\n LineType[LineType[\"LastParagraphLine\"] = 8] = \"LastParagraphLine\";\n})(LineType || (LineType = {}));\n","import { PdfColorSpace } from './enum';\nimport { Operators } from './../input-output/pdf-operators';\nimport { Dictionary } from './../collections/dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfArray } from './../primitives/pdf-array';\n/**\n * Implements structures and routines working with `color`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // set color\n * let brushColor : PdfColor = new PdfColor(0, 0, 0);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(brushColor);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @default black color\n */\nvar PdfColor = /** @class */ (function () {\n function PdfColor(color1, color2, color3, color4) {\n if (typeof color1 === 'undefined') {\n if (typeof color2 !== 'undefined' && typeof color3 !== 'undefined' && typeof color4 !== 'undefined') {\n this.assignRGB(color2, color3, color4);\n }\n else {\n this.filled = false;\n }\n }\n else if (color1 instanceof PdfColor) {\n this.redColor = color1.r;\n this.greenColor = color1.g;\n this.blueColor = color1.b;\n this.grayColor = color1.gray;\n this.alpha = color1.alpha;\n this.filled = (this.alpha !== 0);\n /* tslint:disable-next-line:max-line-length */\n }\n else if (typeof color1 === 'number' && typeof color2 === 'undefined' && typeof color3 === 'undefined' && typeof color4 === 'undefined') {\n if (color1 < 0) {\n color1 = 0;\n }\n if (color1 > 1) {\n color1 = 1;\n }\n this.redColor = color1 * PdfColor.maxColourChannelValue;\n this.greenColor = color1 * PdfColor.maxColourChannelValue;\n this.blueColor = color1 * PdfColor.maxColourChannelValue;\n this.cyanColor = color1;\n this.magentaColor = color1;\n this.yellowColor = color1;\n this.blackColor = color1;\n this.grayColor = color1;\n this.alpha = PdfColor.maxColourChannelValue;\n this.filled = true;\n }\n else if (typeof color4 === 'undefined') {\n this.assignRGB(color1, color2, color3);\n }\n else {\n this.assignRGB(color2, color3, color4, color1);\n }\n }\n /**\n * `Assign` red, green, blue colors with alpha value..\n * @private\n */\n PdfColor.prototype.assignRGB = function (r, g, b, a) {\n if (typeof r === 'undefined' || typeof g === 'undefined' || typeof b === 'undefined') {\n this.filled = false;\n }\n else {\n this.cyanColor = 0;\n this.magentaColor = 0;\n this.yellowColor = 0;\n this.blackColor = 0;\n this.grayColor = 0;\n this.redColor = r;\n this.greenColor = g;\n this.blueColor = b;\n if (typeof a === 'undefined') {\n this.alpha = PdfColor.maxColourChannelValue;\n }\n else {\n this.alpha = a;\n }\n this.filled = true;\n this.assignCMYK(r, g, b);\n }\n };\n /**\n * `Calculate and assign` cyan, megenta, yellow colors from rgb values..\n * @private\n */\n PdfColor.prototype.assignCMYK = function (r, g, b) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n var black = PdfNumber.min(1 - red, 1 - green, 1 - blue);\n var cyan = (black === 1.0) ? 0 : (1 - red - black) / (1 - black);\n var magenta = (black === 1.0) ? 0 : (1 - green - black) / (1 - black);\n var yellow = (black === 1.0) ? 0 : (1 - blue - black) / (1 - black);\n this.blackColor = black;\n this.cyanColor = cyan;\n this.magentaColor = magenta;\n this.yellowColor = yellow;\n };\n Object.defineProperty(PdfColor.prototype, \"r\", {\n //Properties\n // public static get Empty():PdfColor\n // {\n // return this.s_emptyColor\n // }\n /**\n * Gets or sets `Red` channel value.\n * @private\n */\n get: function () {\n return this.redColor;\n },\n set: function (value) {\n this.redColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"red\", {\n /**\n * Gets the `Red` color\n * @private\n */\n get: function () {\n return (this.r / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"b\", {\n /**\n * Gets or sets `Blue` channel value.\n * @private\n */\n get: function () {\n return this.blueColor;\n },\n set: function (value) {\n this.blueColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"blue\", {\n /**\n * Gets the `blue` color.\n * @private\n */\n get: function () {\n return (this.b / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"c\", {\n /**\n * Gets or sets `Cyan` channel value.\n * @private\n */\n get: function () {\n return this.cyanColor;\n },\n set: function (value) {\n if (value < 0) {\n this.cyanColor = 0;\n }\n else if (value > 1) {\n this.cyanColor = 1;\n }\n else {\n this.cyanColor = value;\n }\n this.assignRGB(this.cyanColor, this.magentaColor, this.yellowColor, this.blackColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"k\", {\n /**\n * Gets or sets `Black` channel value.\n * @private\n */\n get: function () {\n return this.blackColor;\n },\n set: function (value) {\n if ((value < 0)) {\n this.blackColor = 0;\n }\n else if ((value > 1)) {\n this.blackColor = 1;\n }\n else {\n this.blackColor = value;\n }\n this.assignRGB(this.cyanColor, this.magentaColor, this.yellowColor, this.blackColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"m\", {\n /**\n * Gets or sets `Magenta` channel value.\n * @private\n */\n get: function () {\n return this.magentaColor;\n },\n set: function (value) {\n if ((value < 0)) {\n this.magentaColor = 0;\n }\n else if ((value > 1)) {\n this.magentaColor = 1;\n }\n else {\n this.magentaColor = value;\n }\n this.assignRGB(this.cyanColor, this.magentaColor, this.yellowColor, this.blackColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"y\", {\n /**\n * Gets or sets `Yellow` channel value.\n * @private\n */\n get: function () {\n return this.yellowColor;\n },\n set: function (value) {\n if ((value < 0)) {\n this.yellowColor = 0;\n }\n else if ((value > 1)) {\n this.yellowColor = 1;\n }\n else {\n this.yellowColor = value;\n }\n this.assignRGB(this.cyanColor, this.magentaColor, this.yellowColor, this.blackColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"g\", {\n /**\n * Gets or sets `Green` channel value.\n * @private\n */\n get: function () {\n return this.greenColor;\n },\n set: function (value) {\n this.greenColor = value;\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"green\", {\n /**\n * Gets the `Green` color.\n * @private\n */\n get: function () {\n return (this.g / PdfColor.maxColourChannelValue);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"gray\", {\n /**\n * Gets or sets `Gray` channel value.\n * @private\n */\n get: function () {\n return ((((this.redColor + this.greenColor) + this.blueColor)) / (PdfColor.maxColourChannelValue * 3));\n },\n set: function (value) {\n if (value < 0) {\n this.grayColor = 0;\n }\n else if (value > 1) {\n this.grayColor = 1;\n }\n else {\n this.grayColor = value;\n }\n this.r = (this.grayColor * PdfColor.maxColourChannelValue);\n this.g = (this.grayColor * PdfColor.maxColourChannelValue);\n this.b = (this.grayColor * PdfColor.maxColourChannelValue);\n this.assignCMYK(this.redColor, this.greenColor, this.blueColor);\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"isEmpty\", {\n /**\n * Gets whether the PDFColor `is Empty` or not.\n * @private\n */\n get: function () {\n return !this.filled;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfColor.prototype, \"a\", {\n /**\n * Gets or sets `Alpha` channel value.\n * @private\n */\n get: function () {\n return this.alpha;\n },\n set: function (value) {\n if (value < 0) {\n this.alpha = 0;\n }\n else {\n // if (this.alpha !== value) {\n this.alpha = value;\n // }\n }\n this.filled = true;\n },\n enumerable: true,\n configurable: true\n });\n //Public methods\n /**\n * Converts `PDFColor to PDF string` representation.\n * @private\n */\n PdfColor.prototype.toString = function (colorSpace, stroke) {\n if (this.isEmpty) {\n return '';\n }\n var str = '';\n switch (colorSpace) {\n case PdfColorSpace.Rgb:\n str = this.rgbToString(stroke);\n break;\n case PdfColorSpace.GrayScale:\n str = this.grayScaleToString(stroke);\n break;\n case PdfColorSpace.Cmyk:\n str = this.cmykToString(stroke);\n break;\n }\n return str;\n };\n /**\n * Sets `GrayScale` color.\n * @private\n */\n PdfColor.prototype.grayScaleToString = function (ifStroking) {\n var gray = this.gray;\n var colour = '';\n var obj = null;\n /* tslint:disable-next-line:max-line-length */\n obj = (ifStroking) ? PdfColor.grayStringsSroke.containsKey(gray) ? PdfColor.grayStringsSroke.getValue(gray) : null : PdfColor.grayStringsFill.containsKey(gray) ? PdfColor.grayStringsFill.getValue(gray) : null;\n if (obj == null) {\n if (ifStroking) {\n colour = gray.toString() + ' G';\n PdfColor.grayStringsSroke.setValue(gray, colour);\n }\n }\n else {\n colour = obj.toString();\n }\n return colour + Operators.newLine;\n };\n /**\n * Sets `RGB` color.\n * @private\n */\n PdfColor.prototype.rgbToString = function (ifStroking) {\n var r = this.r;\n var g = this.g;\n var b = this.b;\n var key = (r << 16) + (g << 8) + b;\n if (ifStroking) {\n key += 1 << 24;\n }\n var colour = '';\n var obj = null;\n if (PdfColor.rgbStrings.containsKey(key)) {\n obj = PdfColor.rgbStrings.getValue(key);\n }\n if (obj == null) {\n var red = r / PdfColor.maxColourChannelValue;\n var green = g / PdfColor.maxColourChannelValue;\n var blue = b / PdfColor.maxColourChannelValue;\n if (ifStroking) {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' RG';\n }\n else {\n colour = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + ' rg';\n }\n PdfColor.rgbStrings.setValue(key, colour);\n }\n else {\n colour = obj.toString();\n }\n return colour + Operators.newLine;\n };\n /***\n * Sets `CMYK` color.\n * @private\n */\n PdfColor.prototype.cmykToString = function (ifStroking) {\n var cyan = this.c;\n var magenta = this.m;\n var yellow = this.y;\n var black = this.b;\n var colour = '';\n colour = cyan.toString() + ' ' + magenta.toString() + ' ' + yellow.toString() + ' ' + black.toString() + ' K';\n return colour + Operators.newLine;\n };\n /**\n * Converts `colour to a PDF array`.\n * @private\n */\n PdfColor.prototype.toArray = function (colorSpace) {\n var array = new PdfArray();\n switch (colorSpace) {\n case PdfColorSpace.Rgb:\n array.add(new PdfNumber(this.red));\n array.add(new PdfNumber(this.green));\n array.add(new PdfNumber(this.blue));\n break;\n }\n return array;\n };\n //Fields\n /**\n * Holds `RGB colors` converted into strings.\n * @private\n */\n PdfColor.rgbStrings = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `stroking`.\n * @private\n */\n PdfColor.grayStringsSroke = new Dictionary();\n /**\n * Holds Gray scale colors converted into strings for `filling`.\n * @private\n */\n PdfColor.grayStringsFill = new Dictionary();\n /**\n * `Max value` of color channel.\n * @private\n */\n PdfColor.maxColourChannelValue = 255.0;\n return PdfColor;\n}());\nexport { PdfColor };\n","/**\n * `PdfBrush` class provides objects used to fill the interiors of graphical shapes such as rectangles,\n * ellipses, pies, polygons, and paths.\n * @private\n */\nvar PdfBrush = /** @class */ (function () {\n /**\n * Creates instanceof `PdfBrush` class.\n * @hidden\n * @private\n */\n function PdfBrush() {\n //\n }\n //IClonable implementation\n PdfBrush.prototype.clone = function () {\n return this;\n };\n return PdfBrush;\n}());\nexport { PdfBrush };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfColor } from './../pdf-color';\nimport { PdfColorSpace } from './../enum';\nimport { PdfBrush } from './pdf-brush';\n/**\n * Represents a brush that fills any object with a solid color.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfSolidBrush = /** @class */ (function (_super) {\n __extends(PdfSolidBrush, _super);\n //Constructors\n /**\n * Initializes a new instance of the `PdfSolidBrush` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param color color of the brush\n */\n function PdfSolidBrush(color) {\n var _this = _super.call(this) || this;\n _this.pdfColor = color;\n return _this;\n }\n Object.defineProperty(PdfSolidBrush.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color` of the brush.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Monitors` the changes of the brush and modify PDF state respectively.\n * @private\n */\n PdfSolidBrush.prototype.monitorChanges = function (brush, streamWriter, getResources, saveChanges, currentColorSpace) {\n if (streamWriter == null) {\n throw new Error('ArgumentNullException:streamWriter');\n }\n var diff = false;\n if (brush == null) {\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n else {\n var sBrush = brush;\n diff = true;\n streamWriter.setColorAndSpace(this.pdfColor, currentColorSpace, false);\n return diff;\n }\n };\n /**\n * `Resets` the changes, which were made by the brush.\n * @private\n */\n PdfSolidBrush.prototype.resetChanges = function (streamWriter) {\n streamWriter.setColorAndSpace(new PdfColor(0, 0, 0), PdfColorSpace.Rgb, false);\n };\n return PdfSolidBrush;\n}(PdfBrush));\nexport { PdfSolidBrush };\n","/**\n * PdfPen.ts class for EJ2-PDF\n */\nimport { PdfColor } from './pdf-color';\nimport { PdfSolidBrush } from './brushes/pdf-solid-brush';\nimport { PdfDashStyle, PdfColorSpace } from './enum';\nimport { PdfBrush } from './brushes/pdf-brush';\n/**\n * `PdfPen` class defining settings for drawing operations, that determines the color,\n * width, and style of the drawing elements.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPen = /** @class */ (function () {\n function PdfPen(arg1, arg2) {\n //Fields\n /**\n * Specifies the `color of the pen`.\n * @default new PdfColor()\n * @private\n */\n this.pdfColor = new PdfColor(0, 0, 0);\n /**\n * Specifies the `dash offset of the pen`.\n * @default 0\n * @private\n */\n this.dashOffsetValue = 0;\n /**\n * Specifies the `dash pattern of the pen`.\n * @default [0]\n * @private\n */\n this.penDashPattern = [0];\n /**\n * Specifies the `dash style of the pen`.\n * @default Solid\n * @private\n */\n this.pdfDashStyle = PdfDashStyle.Solid;\n /**\n * Specifies the `line cap of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineCap = 0;\n /**\n * Specifies the `line join of the pen`.\n * @default 0\n * @private\n */\n this.pdfLineJoin = 0;\n /**\n * Specifies the `width of the pen`.\n * @default 1.0\n * @private\n */\n this.penWidth = 1.0;\n /**\n * Specifies the `mitter limit of the pen`.\n * @default 0.0\n * @private\n */\n this.internalMiterLimit = 0.0;\n /**\n * Stores the `colorspace` value.\n * @default Rgb\n * @private\n */\n this.colorSpace = PdfColorSpace.Rgb;\n if (arg1 instanceof PdfBrush) {\n this.setBrush(arg1);\n }\n else if (arg1 instanceof PdfColor) {\n this.color = arg1;\n }\n if (typeof arg2 === 'number') {\n this.width = arg2;\n }\n }\n Object.defineProperty(PdfPen.prototype, \"color\", {\n //Properties\n /**\n * Gets or sets the `color of the pen`.\n * @private\n */\n get: function () {\n return this.pdfColor;\n },\n set: function (value) {\n this.pdfColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashOffset\", {\n /**\n * Gets or sets the `dash offset of the pen`.\n * @private\n */\n get: function () {\n if (typeof this.dashOffsetValue === 'undefined' || this.dashOffsetValue == null) {\n return 0;\n }\n else {\n return this.dashOffsetValue;\n }\n },\n set: function (value) {\n this.dashOffsetValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashPattern\", {\n /**\n * Gets or sets the `dash pattern of the pen`.\n * @private\n */\n get: function () {\n return this.penDashPattern;\n },\n set: function (value) {\n this.penDashPattern = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"dashStyle\", {\n /**\n * Gets or sets the `dash style of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen style\n * pen.dashStyle = PdfDashStyle.DashDot;\n * // get pen style\n * let style : PdfDashStyle = pen.dashStyle;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.pdfDashStyle;\n },\n set: function (value) {\n if (this.pdfDashStyle !== value) {\n this.pdfDashStyle = value;\n switch (this.pdfDashStyle) {\n case PdfDashStyle.Custom:\n break;\n case PdfDashStyle.Dash:\n this.penDashPattern = [3, 1];\n break;\n case PdfDashStyle.Dot:\n this.penDashPattern = [1, 1];\n break;\n case PdfDashStyle.DashDot:\n this.penDashPattern = [3, 1, 1, 1];\n break;\n case PdfDashStyle.DashDotDot:\n this.penDashPattern = [3, 1, 1, 1, 1, 1];\n break;\n case PdfDashStyle.Solid:\n break;\n default:\n this.pdfDashStyle = PdfDashStyle.Solid;\n this.penDashPattern = [0];\n break;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineCap\", {\n /**\n * Gets or sets the `line cap of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineCap;\n },\n set: function (value) {\n this.pdfLineCap = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"lineJoin\", {\n /**\n * Gets or sets the `line join style of the pen`.\n * @private\n */\n get: function () {\n return this.pdfLineJoin;\n },\n set: function (value) {\n this.pdfLineJoin = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"miterLimit\", {\n /**\n * Gets or sets the `miter limit`.\n * @private\n */\n get: function () {\n return this.internalMiterLimit;\n },\n set: function (value) {\n this.internalMiterLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPen.prototype, \"width\", {\n /**\n * Gets or sets the `width of the pen`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set pen width\n * pen.width = 2;\n * //\n * // draw rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.penWidth;\n },\n set: function (value) {\n this.penWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n //Helper\n /**\n * `Clones` this instance of PdfPen class.\n * @private\n */\n PdfPen.prototype.clone = function () {\n var pen = this;\n return pen;\n };\n /**\n * `Sets the brush`.\n * @private\n */\n PdfPen.prototype.setBrush = function (brush) {\n var sBrush = brush;\n if ((sBrush != null && sBrush instanceof PdfSolidBrush)) {\n this.color = sBrush.color;\n this.pdfBrush = sBrush;\n }\n this.color = sBrush.color;\n this.pdfBrush = sBrush;\n };\n /**\n * `Monitors the changes`.\n * @private\n */\n PdfPen.prototype.monitorChanges = function (currentPen, streamWriter, getResources, saveState, currentColorSpace, matrix) {\n var diff = false;\n saveState = true;\n if (currentPen == null) {\n diff = true;\n }\n diff = this.dashControl(currentPen, saveState, streamWriter);\n streamWriter.setLineWidth(this.width);\n streamWriter.setLineJoin(this.lineJoin);\n streamWriter.setLineCap(this.lineCap);\n var miterLimit = this.miterLimit;\n if (miterLimit > 0) {\n streamWriter.setMiterLimit(miterLimit);\n diff = true;\n }\n var brush = this.pdfBrush;\n streamWriter.setColorAndSpace(this.color, currentColorSpace, true);\n diff = true;\n return diff;\n };\n /**\n * `Controls the dash style` and behaviour of each line.\n * @private\n */\n PdfPen.prototype.dashControl = function (pen, saveState, streamWriter) {\n saveState = true;\n var lineWidth = this.width;\n var pattern = this.getPattern();\n streamWriter.setLineDashPattern(pattern, this.dashOffset * lineWidth);\n return saveState;\n };\n /**\n * `Gets the pattern` of PdfPen.\n * @private\n */\n PdfPen.prototype.getPattern = function () {\n var pattern = this.dashPattern;\n for (var i = 0; i < pattern.length; ++i) {\n pattern[i] *= this.width;\n }\n return pattern;\n };\n return PdfPen;\n}());\nexport { PdfPen };\n","/**\n * PdfStringFormat.ts class for EJ2-PDF\n */\nimport { PdfVerticalAlignment } from './../../graphics/enum';\nimport { PdfSubSuperScript, PdfWordWrapType } from './../../graphics/fonts/enum';\n/**\n * `PdfStringFormat` class represents the text layout information on PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStringFormat = /** @class */ (function () {\n function PdfStringFormat(arg1, arg2) {\n /**\n * The `scaling factor` of the text being drawn.\n * @private\n */\n this.scalingFactor = 100.0;\n /**\n * Indicates text `wrapping` type.\n * @private\n */\n this.wordWrapType = PdfWordWrapType.Word;\n this.internalLineLimit = true;\n this.wordWrapType = PdfWordWrapType.Word;\n if ((typeof arg1 !== 'undefined') && (typeof arg1 !== 'string')) {\n this.textAlignment = arg1;\n }\n if (typeof arg2 !== 'undefined') {\n this.verticalAlignment = arg2;\n }\n }\n Object.defineProperty(PdfStringFormat.prototype, \"alignment\", {\n //Properties\n /**\n * Gets or sets the `horizontal` text alignment\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the text alignment\n * stringFormat.alignment = PdfTextAlignment.Center;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.textAlignment;\n },\n set: function (value) {\n this.textAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"textDirection\", {\n get: function () {\n return this.direction;\n },\n set: function (value) {\n this.direction = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineAlignment\", {\n /**\n * Gets or sets the `vertical` text alignment.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set the vertical alignment\n * stringFormat.lineAlignment = PdfVerticalAlignment.Middle;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.verticalAlignment === 'undefined' || this.verticalAlignment == null) {\n return PdfVerticalAlignment.Top;\n }\n else {\n return this.verticalAlignment;\n }\n },\n set: function (value) {\n this.verticalAlignment = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"rightToLeft\", {\n /**\n * Gets or sets the value that indicates text `direction` mode.\n * @private\n */\n get: function () {\n if (typeof this.isRightToLeft === 'undefined' || this.isRightToLeft == null) {\n return false;\n }\n else {\n return this.isRightToLeft;\n }\n },\n set: function (value) {\n this.isRightToLeft = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"characterSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the characters in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set character spacing\n * stringFormat.characterSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalCharacterSpacing === 'undefined' || this.internalCharacterSpacing == null) {\n return 0;\n }\n else {\n return this.internalCharacterSpacing;\n }\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordSpacing\", {\n /**\n * Gets or sets value that indicates a `size` among the words in the text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set word spacing\n * stringFormat.wordSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(10, 10), stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.internalWordSpacing === 'undefined' || this.internalWordSpacing == null) {\n return 0;\n }\n else {\n return this.internalWordSpacing;\n }\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or sets value that indicates the `vertical distance` between the baselines of adjacent lines of text.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set string\n * let text : string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor\n * incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitati';\n * // set rectangle bounds\n * let rectangle : RectangleF = new RectangleF({x : 0, y : 0}, {width : 300, height : 100})\n * //\n * // set the format for string\n * let stringFormat : PdfStringFormat = new PdfStringFormat();\n * // set line spacing\n * stringFormat.lineSpacing = 10;\n * //\n * // draw the text\n * page1.graphics.drawString(text, font, blackBrush, rectangle, stringFormat);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n if (typeof this.leading === 'undefined' || this.leading == null) {\n return 0;\n }\n else {\n return this.leading;\n }\n },\n set: function (value) {\n this.leading = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"clipPath\", {\n /**\n * Gets or sets a value indicating whether the text is `clipped` or not.\n * @private\n */\n get: function () {\n if (typeof this.clip === 'undefined' || this.clip == null) {\n return false;\n }\n else {\n return this.clip;\n }\n },\n set: function (value) {\n this.clip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"subSuperScript\", {\n /**\n * Gets or sets value indicating whether the text is in `subscript or superscript` mode.\n * @private\n */\n get: function () {\n if (typeof this.pdfSubSuperScript === 'undefined' || this.pdfSubSuperScript == null) {\n return PdfSubSuperScript.None;\n }\n else {\n return this.pdfSubSuperScript;\n }\n },\n set: function (value) {\n this.pdfSubSuperScript = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"paragraphIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the paragraph.\n * @private\n */\n get: function () {\n if (typeof this.internalParagraphIndent === 'undefined' || this.internalParagraphIndent == null) {\n return 0;\n }\n else {\n return this.internalParagraphIndent;\n }\n },\n set: function (value) {\n this.internalParagraphIndent = value;\n this.firstLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"lineLimit\", {\n /**\n * Gets or sets a value indicating whether [`line limit`].\n * @private\n */\n get: function () {\n return this.internalLineLimit;\n },\n set: function (value) {\n this.internalLineLimit = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"measureTrailingSpaces\", {\n /**\n * Gets or sets a value indicating whether [`measure trailing spaces`].\n * @private\n */\n get: function () {\n if (typeof this.trailingSpaces === 'undefined' || this.trailingSpaces == null) {\n return false;\n }\n else {\n return this.trailingSpaces;\n }\n },\n set: function (value) {\n this.trailingSpaces = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"noClip\", {\n /**\n * Gets or sets a value indicating whether [`no clip`].\n * @private\n */\n get: function () {\n if (typeof this.isNoClip === 'undefined' || this.isNoClip == null) {\n return false;\n }\n else {\n return this.isNoClip;\n }\n },\n set: function (value) {\n this.isNoClip = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"wordWrap\", {\n /**\n * Gets or sets value indicating type of the text `wrapping`.\n * @private\n */\n get: function () {\n // if (typeof this.wrapType === 'undefined' || this.wrapType == null) {\n // return PdfWordWrapType.Word;\n // } else {\n return this.wordWrapType;\n // }\n },\n set: function (value) {\n this.wordWrapType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"horizontalScalingFactor\", {\n /**\n * Gets or sets the `scaling factor`.\n * @private\n */\n get: function () {\n // if (typeof this.scalingFactor === 'undefined' || this.scalingFactor == null) {\n // return 100;\n // } else {\n return this.scalingFactor;\n // }\n },\n set: function (value) {\n if (value <= 0) {\n throw new Error('ArgumentOutOfRangeException:The scaling factor cant be less of equal to zero, ScalingFactor');\n }\n this.scalingFactor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfStringFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or sets the `indent` of the first line in the text.\n * @private\n */\n get: function () {\n if (typeof this.initialLineIndent === 'undefined' || this.initialLineIndent == null) {\n return 0;\n }\n else {\n return this.initialLineIndent;\n }\n },\n set: function (value) {\n this.initialLineIndent = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Clones` the object.\n * @private\n */\n //IClonable implementation\n PdfStringFormat.prototype.clone = function () {\n var format = this;\n return format;\n };\n return PdfStringFormat;\n}());\nexport { PdfStringFormat };\n","/**\n * StringTokenizer.ts class for EJ2-PDF\n * Utility class for working with strings.\n * @private\n */\nvar StringTokenizer = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `StringTokenizer` class.\n * @private\n */\n function StringTokenizer(textValue) {\n /**\n * Current `position`.\n * @private\n */\n this.currentPosition = 0;\n if (textValue == null) {\n throw new Error('ArgumentNullException:text');\n }\n this.text = textValue;\n }\n Object.defineProperty(StringTokenizer.prototype, \"length\", {\n // Properties\n /**\n * Gets text `length`.\n * @private\n */\n get: function () {\n return this.text.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"end\", {\n get: function () {\n return (this.currentPosition === this.text.length);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StringTokenizer.prototype, \"position\", {\n /**\n * Gets or sets the position.\n * @private\n */\n get: function () {\n return this.currentPosition;\n },\n set: function (value) {\n this.currentPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n StringTokenizer.getCharsCount = function (text, symbols) {\n if (typeof symbols === 'string') {\n if (text == null) {\n throw new Error('ArgumentNullException:wholeText');\n }\n var numSymbols = 0;\n var curIndex = 0;\n for (;;) {\n curIndex = text.indexOf(symbols, curIndex);\n if (curIndex === -1) {\n break;\n }\n else {\n numSymbols++;\n curIndex++;\n }\n }\n return numSymbols;\n }\n else {\n if (text == null) {\n throw new Error('ArgumentNullException:text');\n }\n if (symbols == null) {\n throw new Error('ArgumentNullException:symbols');\n }\n var count = 0;\n for (var i = 0, len = text.length; i < len; i++) {\n var ch = text[i];\n if (this.contains(symbols, ch)) {\n count++;\n }\n }\n return count;\n }\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.readLine = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n': {\n var text = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n if (((ch === '\\r') && (this.currentPosition < this.length)) && (this.text[this.currentPosition] === '\\n')) {\n this.currentPosition++;\n }\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Reads line of the text.\n * @private\n */\n StringTokenizer.prototype.peekLine = function () {\n var pos = this.currentPosition;\n var line = this.readLine();\n this.currentPosition = pos;\n return line;\n };\n /**\n * Reads a word from the text.\n * @private\n */\n StringTokenizer.prototype.readWord = function () {\n var pos = this.currentPosition;\n while (pos < this.length) {\n var ch = this.text[pos];\n switch (ch) {\n case '\\r':\n case '\\n':\n var textValue = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos + 1;\n if (((ch === '\\r') && (this.currentPosition < this.length)) && (this.text[this.currentPosition] === '\\n')) {\n this.currentPosition++;\n }\n return textValue;\n case ' ':\n case '\\t': {\n if (pos === this.currentPosition) {\n pos++;\n }\n var text = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text;\n }\n }\n pos++;\n }\n // The remaining text.\n if (pos > this.currentPosition) {\n var text2 = this.text.substr(this.currentPosition, pos - this.currentPosition);\n this.currentPosition = pos;\n return text2;\n }\n return null;\n };\n /**\n * Peeks a word from the text.\n * @private\n */\n StringTokenizer.prototype.peekWord = function () {\n var pos = this.currentPosition;\n var word = this.readWord();\n this.currentPosition = pos;\n return word;\n };\n StringTokenizer.prototype.read = function (count) {\n if (typeof count === 'undefined') {\n var ch = '0';\n if (!this.end) {\n ch = this.text[this.currentPosition];\n this.currentPosition++;\n }\n return ch;\n }\n else {\n var num = 0;\n var builder = '';\n while (!this.end && num < count) {\n var ch = this.read();\n builder = builder + ch;\n num++;\n }\n return builder;\n }\n };\n /**\n * Peeks char form the data.\n * @private\n */\n StringTokenizer.prototype.peek = function () {\n var ch = '0';\n if (!this.end) {\n ch = this.text[this.currentPosition];\n }\n return ch;\n };\n /**\n * Closes a reader.\n * @private\n */\n StringTokenizer.prototype.close = function () {\n this.text = null;\n };\n StringTokenizer.prototype.readToEnd = function () {\n var text;\n if (this.currentPosition === 0) {\n text = this.text;\n }\n else {\n text = this.text.substr(this.currentPosition, this.length - this.currentPosition);\n }\n this.currentPosition = this.length;\n return text;\n };\n //Implementation\n /**\n * Checks whether array contains a symbol.\n * @private\n */\n StringTokenizer.contains = function (array, symbol) {\n var contains = false;\n for (var i = 0; i < array.length; i++) {\n if (array[i] === symbol) {\n contains = true;\n break;\n }\n }\n return contains;\n };\n // Constants\n /**\n * `Whitespace` symbol.\n * @private\n */\n StringTokenizer.whiteSpace = ' ';\n /**\n * `tab` symbol.\n * @private\n */\n StringTokenizer.tab = '\\t';\n /**\n * Array of `spaces`.\n * @private\n */\n StringTokenizer.spaces = [StringTokenizer.whiteSpace, StringTokenizer.tab];\n /**\n * `Pattern` for WhiteSpace.\n * @private\n */\n StringTokenizer.whiteSpacePattern = '^[ \\t]+$';\n return StringTokenizer;\n}());\nexport { StringTokenizer };\n","/**\n * PdfFont.ts class for EJ2-PDF\n */\nimport { PdfFontStyle } from './enum';\nimport { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfStringFormat } from './pdf-string-format';\nimport { PdfStringLayouter } from './string-layouter';\nimport { StringTokenizer } from './string-tokenizer';\n/**\n * Defines a particular format for text, including font face, size, and style attributes.\n * @private\n */\nvar PdfFont = /** @class */ (function () {\n function PdfFont(size, style) {\n /**\n * `Style` of the font.\n * @private\n */\n this.fontStyle = PdfFontStyle.Regular;\n if (typeof size === 'number' && typeof style === 'undefined') {\n this.fontSize = size;\n }\n else {\n this.fontSize = size;\n this.setStyle(style);\n }\n }\n Object.defineProperty(PdfFont.prototype, \"name\", {\n //Properties\n /**\n * Gets the face name of this Font.\n * @private\n */\n get: function () {\n return this.metrics.name;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"size\", {\n /**\n * Gets the size of this font.\n * @private\n */\n get: function () {\n return this.fontSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"height\", {\n /**\n * Gets the height of the font in points.\n * @private\n */\n get: function () {\n return this.metrics.getHeight(null);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"style\", {\n /**\n * Gets the style information for this font.\n * @private\n */\n get: function () {\n return this.fontStyle;\n },\n set: function (value) {\n this.fontStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"bold\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `bold`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Bold) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"italic\", {\n /**\n * Gets a value indicating whether this `PdfFont` has the `italic` style applied.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Italic) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"strikeout\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `strikeout`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Strikeout) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"underline\", {\n /**\n * Gets a value indicating whether this `PdfFont` is `underline`.\n * @private\n */\n get: function () {\n return ((this.style & PdfFontStyle.Underline) > 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"metrics\", {\n /**\n * Gets or sets the `metrics` for this font.\n * @private\n */\n get: function () {\n return this.fontMetrics;\n },\n set: function (value) {\n this.fontMetrics = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfFont.prototype, \"element\", {\n // /**\n // * Gets and Sets the font `internals`.\n // * @private\n // */\n // public get fontInternal() : IPdfPrimitive {\n // return this.pdfFontInternals;\n // }\n // public set fontInternal(value : IPdfPrimitive) {\n // this.pdfFontInternals = value;\n // }\n //IPdfWrapper Members\n /**\n * Gets the `element` representing the font.\n * @private\n */\n get: function () {\n return this.pdfFontInternals;\n },\n enumerable: true,\n configurable: true\n });\n PdfFont.prototype.measureString = function (text, arg2, arg3, arg4, arg5) {\n if (typeof text === 'string' && typeof arg2 === 'undefined') {\n return this.measureString(text, null);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'undefined' && typeof arg4 === 'undefined') {\n var temparg2 = arg2;\n var charactersFitted = 0;\n var linesFilled = 0;\n return this.measureString(text, temparg2, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && (arg2 instanceof PdfStringFormat || arg2 == null) && typeof arg3 === 'number' && typeof arg4 === 'number') {\n var temparg2 = arg2;\n return this.measureString(text, 0, temparg2, arg3, arg4);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else if (typeof text === 'string' && typeof arg2 === 'number' && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'number' && typeof arg5 === 'number') {\n var layoutArea = new SizeF(arg2, 0);\n var temparg3 = arg3;\n return this.measureString(text, layoutArea, temparg3, arg4, arg5);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n // return this.measureString(text, arg2, null);\n // } else if (typeof text === 'string' && arg2 instanceof SizeF && (arg3 instanceof PdfStringFormat || arg3 == null) && typeof arg4 === 'undefined' && typeof arg5 === 'undefined') {\n // let temparg3 : PdfStringFormat = arg3 as PdfStringFormat;\n // let charactersFitted : number = 0;\n // let linesFilled : number = 0;\n // return this.measureString(text, arg2, temparg3, charactersFitted, linesFilled);\n }\n else {\n if (text == null) {\n throw Error(\"ArgumentNullException(\\\"text\\\")\");\n }\n var temparg2 = arg2;\n var temparg3 = arg3;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(text, this, temparg3, temparg2, false, new SizeF(0, 0));\n // arg4 = (result.Remainder == null) ? text.length : text.length - result.Remainder.length;\n arg4 = text.length;\n arg5 = (result.empty) ? 0 : result.lines.length;\n return result.actualSize;\n }\n };\n /* tslint:enable */\n //IPdfCache Members\n /**\n * `Checks` whether the object is similar to another object.\n * @private\n */\n PdfFont.prototype.equalsTo = function (obj) {\n var result = this.equalsToFont(obj);\n return result;\n };\n /**\n * Returns `internals` of the object.\n * @private\n */\n PdfFont.prototype.getInternals = function () {\n return this.pdfFontInternals;\n };\n /**\n * Sets `internals` to the object.\n * @private\n */\n PdfFont.prototype.setInternals = function (internals) {\n if (internals == null) {\n throw new Error('ArgumentNullException:internals');\n }\n this.pdfFontInternals = internals;\n };\n /**\n * Sets the `style` of the font.\n * @private\n */\n PdfFont.prototype.setStyle = function (style) {\n this.fontStyle = style;\n };\n /**\n * Applies `settings` to the default line width.\n * @private\n */\n PdfFont.prototype.applyFormatSettings = function (line, format, width) {\n // if (line == null) {\n // throw new Error(`ArgumentNullException:line`);\n // }\n var realWidth = width;\n if (format != null && width > 0) {\n // Space among characters is not default.\n if (format.characterSpacing !== 0) {\n realWidth += (line.length - 1) * format.characterSpacing;\n }\n // Space among words is not default.\n if (format.wordSpacing !== 0) {\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n realWidth += whitespacesCount * format.wordSpacing;\n }\n }\n return realWidth;\n };\n //Constants\n /**\n * `Multiplier` of the symbol width.\n * @default 0.001\n * @private\n */\n PdfFont.charSizeMultiplier = 0.001;\n /**\n * `Synchronization` object.\n * @private\n */\n PdfFont.syncObject = new Object();\n return PdfFont;\n}());\nexport { PdfFont };\n","/**\n * public Enum for `PdfLayoutType`.\n * @private\n */\nexport var PdfLayoutType;\n(function (PdfLayoutType) {\n /**\n * Specifies the type of `Paginate`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"Paginate\"] = 0] = \"Paginate\";\n /**\n * Specifies the type of `OnePage`.\n * @private\n */\n PdfLayoutType[PdfLayoutType[\"OnePage\"] = 1] = \"OnePage\";\n})(PdfLayoutType || (PdfLayoutType = {}));\n/**\n * public Enum for `PdfLayoutBreakType`.\n * @private\n */\nexport var PdfLayoutBreakType;\n(function (PdfLayoutBreakType) {\n /**\n * Specifies the type of `FitPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitPage\"] = 0] = \"FitPage\";\n /**\n * Specifies the type of `FitElement`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitElement\"] = 1] = \"FitElement\";\n /**\n * Specifies the type of `FitColumnsToPage`.\n * @private\n */\n PdfLayoutBreakType[PdfLayoutBreakType[\"FitColumnsToPage\"] = 2] = \"FitColumnsToPage\";\n})(PdfLayoutBreakType || (PdfLayoutBreakType = {}));\nexport var PathPointType;\n(function (PathPointType) {\n /**\n * Specifies the path point type of `Start`.\n * @private\n */\n PathPointType[PathPointType[\"Start\"] = 0] = \"Start\";\n /**\n * Specifies the path point type of `Line`.\n * @private\n */\n PathPointType[PathPointType[\"Line\"] = 1] = \"Line\";\n /**\n * Specifies the path point type of `Bezier3`.\n * @private\n */\n PathPointType[PathPointType[\"Bezier3\"] = 3] = \"Bezier3\";\n /**\n * Specifies the path point type of `Bezier`.\n * @private\n */\n PathPointType[PathPointType[\"Bezier\"] = 3] = \"Bezier\";\n /**\n * Specifies the path point type of `PathTypeMask`.\n * @private\n */\n PathPointType[PathPointType[\"PathTypeMask\"] = 7] = \"PathTypeMask\";\n /**\n * Specifies the path point type of `DashMode`.\n * @private\n */\n PathPointType[PathPointType[\"DashMode\"] = 16] = \"DashMode\";\n /**\n * Specifies the path point type of `PathMarker`.\n * @private\n */\n PathPointType[PathPointType[\"PathMarker\"] = 32] = \"PathMarker\";\n /**\n * Specifies the path point type of `CloseSubpath`.\n * @private\n */\n PathPointType[PathPointType[\"CloseSubpath\"] = 128] = \"CloseSubpath\";\n})(PathPointType || (PathPointType = {}));\n","/**\n * PdfTransformationMatrix.ts class for EJ2-PDF\n */\nimport { PointF } from './../drawing/pdf-drawing';\nimport { PdfNumber } from './../primitives/pdf-number';\n/**\n * Class for representing Root `transformation matrix`.\n */\nvar PdfTransformationMatrix = /** @class */ (function () {\n function PdfTransformationMatrix(value) {\n /**\n * Value for `angle converting`.\n * @default 180.0 / Math.PI\n * @private\n */\n this.radDegFactor = 180.0 / Math.PI;\n if (typeof value === 'undefined') {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, 1.00, 0.00, 0.00);\n }\n else {\n this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, -1.00, 0.00, 0.00);\n }\n }\n Object.defineProperty(PdfTransformationMatrix.prototype, \"matrix\", {\n // Properties\n /**\n * Gets or sets the `internal matrix object`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n set: function (value) {\n this.transformationMatrix = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.translate = function (offsetX, offsetY) {\n this.transformationMatrix.translate(offsetX, offsetY);\n };\n /**\n * `Scales` coordinates by specified coordinates.\n * @private\n */\n PdfTransformationMatrix.prototype.scale = function (scaleX, scaleY) {\n this.transformationMatrix.elements[0] = scaleX;\n this.transformationMatrix.elements[3] = scaleY;\n };\n /**\n * `Rotates` coordinate system in counterclockwise direction.\n * @private\n */\n PdfTransformationMatrix.prototype.rotate = function (angle) {\n //Convert from degree to radian \n angle = (angle * Math.PI) / 180;\n //Rotation \n this.transformationMatrix.elements[0] = Math.cos(angle);\n this.transformationMatrix.elements[1] = Math.sin(angle);\n this.transformationMatrix.elements[2] = -Math.sin(angle);\n this.transformationMatrix.elements[3] = Math.cos(angle);\n };\n // Overrides\n /**\n * Gets `PDF representation`.\n * @private\n */\n PdfTransformationMatrix.prototype.toString = function () {\n var builder = '';\n var whitespace = ' ';\n for (var i = 0, len = this.transformationMatrix.elements.length; i < len; i++) {\n var temp = this.matrix.elements[i];\n builder += PdfNumber.floatToString(this.transformationMatrix.elements[i]);\n builder += whitespace;\n }\n return builder;\n };\n // Implementation\n /**\n * `Multiplies` matrices (changes coordinate system.)\n * @private\n */\n PdfTransformationMatrix.prototype.multiply = function (matrix) {\n this.transformationMatrix.multiply(matrix.matrix);\n };\n /**\n * Converts `degrees to radians`.\n * @private\n */\n PdfTransformationMatrix.degreesToRadians = function (degreesX) {\n return this.degRadFactor * degreesX;\n };\n /**\n * Converts `radians to degrees`.\n * @private\n */\n PdfTransformationMatrix.prototype.radiansToDegrees = function (radians) {\n return this.radDegFactor * radians;\n };\n /**\n * `Clones` this instance of PdfTransformationMatrix.\n * @private\n */\n PdfTransformationMatrix.prototype.clone = function () {\n return this;\n };\n // Constants\n /**\n * Value for `angle converting`.\n * @default Math.PI / 180.0\n * @private\n */\n PdfTransformationMatrix.degRadFactor = Math.PI / 180.0;\n return PdfTransformationMatrix;\n}());\nexport { PdfTransformationMatrix };\nvar Matrix = /** @class */ (function () {\n function Matrix(arg1, arg2, arg3, arg4, arg5, arg6) {\n if (typeof arg1 === 'undefined') {\n this.metrixElements = [];\n }\n else if (typeof arg1 === 'number') {\n this.metrixElements = [];\n this.metrixElements.push(arg1);\n this.metrixElements.push(arg2);\n this.metrixElements.push(arg3);\n this.metrixElements.push(arg4);\n this.metrixElements.push(arg5);\n this.metrixElements.push(arg6);\n }\n else {\n this.metrixElements = arg1;\n }\n }\n Object.defineProperty(Matrix.prototype, \"elements\", {\n // Properties\n /**\n * Gets the `elements`.\n * @private\n */\n get: function () {\n return this.metrixElements;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetX\", {\n /**\n * Gets the off set `X`.\n * @private\n */\n get: function () {\n return this.metrixElements[4];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"offsetY\", {\n /**\n * Gets the off set `Y`.\n * @private\n */\n get: function () {\n return this.metrixElements[5];\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Translates` coordinates by specified coordinates.\n * @private\n */\n Matrix.prototype.translate = function (offsetX, offsetY) {\n this.metrixElements[4] = offsetX;\n this.metrixElements[5] = offsetY;\n };\n /**\n * `Translates` the specified offset X.\n * @private\n */\n Matrix.prototype.transform = function (point) {\n var x = point.x;\n var y = point.y;\n var x2 = x * this.elements[0] + y * this.elements[2] + this.offsetX;\n var y2 = x * this.elements[1] + y * this.elements[3] + this.offsetY;\n return new PointF(x2, y2);\n };\n /**\n * `Multiplies matrices` (changes coordinate system.)\n * @private\n */\n Matrix.prototype.multiply = function (matrix) {\n var tempMatrix = [];\n tempMatrix.push(this.elements[0] * matrix.elements[0] + this.elements[1] * matrix.elements[2]);\n tempMatrix[1] = (this.elements[0] * matrix.elements[1] + this.elements[1] * matrix.elements[3]);\n tempMatrix[2] = (this.elements[2] * matrix.elements[0] + this.elements[3] * matrix.elements[2]);\n tempMatrix[3] = (this.elements[2] * matrix.elements[1] + this.elements[3] * matrix.elements[3]);\n tempMatrix[4] = (this.offsetX * matrix.elements[0] + this.offsetY * matrix.elements[2] + matrix.offsetX);\n tempMatrix[5] = (this.offsetX * matrix.elements[1] + this.offsetY * matrix.elements[3] + matrix.offsetY);\n for (var i = 0; i < tempMatrix.length; i++) {\n this.elements[i] = tempMatrix[i];\n }\n };\n // IDisposable Members\n /**\n * `Dispose` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.dispose = function () {\n this.metrixElements = null;\n };\n // ICloneable Members\n /**\n * `Clones` this instance of PdfTransformationMatrix class.\n * @private\n */\n Matrix.prototype.clone = function () {\n var m = new Matrix(this.metrixElements);\n return m;\n };\n return Matrix;\n}());\nexport { Matrix };\n","/**\n * `constants.ts` class for EJ2-PDF\n * @private\n */\nvar ProcedureSets = /** @class */ (function () {\n function ProcedureSets() {\n /**\n * Specifies the `PDF` procedure set.\n * @private\n */\n this.pdf = 'PDF';\n /**\n * Specifies the `Text` procedure set.\n * @private\n */\n this.text = 'Text';\n /**\n * Specifies the `ImageB` procedure set.\n * @private\n */\n this.imageB = 'ImageB';\n /**\n * Specifies the `ImageC` procedure set.\n * @private\n */\n this.imageC = 'ImageC';\n /**\n * Specifies the `ImageI` procedure set.\n * @private\n */\n this.imageI = 'ImageI';\n }\n return ProcedureSets;\n}());\nexport { ProcedureSets };\n","/**\n * Dictionary class\n * @private\n * @hidden\n */\nvar TemporaryDictionary = /** @class */ (function () {\n function TemporaryDictionary() {\n /**\n * @hidden\n * @private\n */\n this.mKeys = [];\n /**\n * @hidden\n * @private\n */\n this.mValues = [];\n }\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.size = function () {\n return this.mKeys.length;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.add = function (key, value) {\n if (key === undefined || key === null || value === undefined || value === null) {\n throw new ReferenceError('Provided key or value is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n return 1;\n }\n else {\n throw new RangeError('An item with the same key has already been added.');\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.keys = function () {\n return this.mKeys;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.values = function () {\n return this.mValues;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.getValue = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n return this.mValues[index];\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.setValue = function (key, value) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n this.mKeys.push(key);\n this.mValues.push(value);\n }\n else {\n this.mValues[index] = value;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.remove = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n throw new RangeError('No item with the specified key has been added.');\n }\n else {\n this.mKeys.splice(index, 1);\n this.mValues.splice(index, 1);\n return true;\n }\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.containsKey = function (key) {\n if (key === undefined || key === null) {\n throw new ReferenceError('Provided key is not valid.');\n }\n var index = this.mKeys.indexOf(key);\n if (index < 0) {\n return false;\n }\n return true;\n };\n /**\n * @hidden\n * @private\n */\n TemporaryDictionary.prototype.clear = function () {\n this.mKeys = [];\n this.mValues = [];\n };\n return TemporaryDictionary;\n}());\nexport { TemporaryDictionary };\n","import { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents a simple `transparency`.\n * @private\n */\nvar PdfTransparency = /** @class */ (function () {\n // Properties\n // /**\n // * Gets the `stroke` operation alpha value.\n // * @private\n // */\n // public get stroke() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.CA);\n // return result;\n // }\n // /**\n // * Gets the `fill` operation alpha value.\n // * @private\n // */\n // public get fill() : number {\n // let result : number = this.getNumber(this.dictionaryProperties.ca);\n // return result;\n // }\n // /**\n // * Gets the `blend mode`.\n // * @private\n // */\n // public get mode() : PdfBlendMode {\n // let result : string = this.getName(this.dictionaryProperties.ca);\n // return PdfBlendMode.Normal;\n // }\n // Constructors\n /**\n * Initializes a new instance of the `Transparency` class.\n * @private\n */\n function PdfTransparency(stroke, fill, mode) {\n // Fields\n /**\n * Internal variable to store `dictionary`.\n * @default new PdfDictionary()\n * @private\n */\n this.dictionary = new PdfDictionary();\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @default new DictionaryProperties()\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.dictionary.items.setValue(this.dictionaryProperties.CA, new PdfNumber(stroke));\n this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(fill));\n this.dictionary.items.setValue(this.dictionaryProperties.BM, new PdfName(mode.toString()));\n }\n Object.defineProperty(PdfTransparency.prototype, \"element\", {\n // // Implementation\n // /**\n // * Gets the `number value`.\n // * @private\n // */\n // private getNumber(keyName : string) : number {\n // let result : number = 0.0;\n // let numb : PdfNumber = this.dictionary.items.getValue(keyName) as PdfNumber;\n // result = numb.intValue;\n // return result;\n // }\n // /**\n // * Gets the `name value`.\n // * @private\n // */\n // private getName(keyName : string) : string {\n // let result : string = null;\n // let name : PdfName = this.dictionary.items.getValue(keyName) as PdfName;\n // result = name.value;\n // return result;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.dictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTransparency;\n}());\nexport { PdfTransparency };\n","/**\n * Represent a `collection of automatic fields information`.\n * @private\n */\nvar PdfAutomaticFieldInfoCollection = /** @class */ (function () {\n /**\n * Initializes a new instance of the 'PdfPageNumberFieldInfoCollection' class.\n * @private\n */\n function PdfAutomaticFieldInfoCollection() {\n /**\n * Internal variable to store instance of `pageNumberFields` class.\n * @private\n */\n this.automaticFieldsInformation = [];\n //\n }\n Object.defineProperty(PdfAutomaticFieldInfoCollection.prototype, \"automaticFields\", {\n /**\n * Gets the `page number fields collection`.\n * @private\n */\n get: function () {\n return this.automaticFieldsInformation;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /// Adds the specified field info.\n /**\n * Add page number field into collection.\n * @private\n */\n PdfAutomaticFieldInfoCollection.prototype.add = function (fieldInfo) {\n return this.automaticFields.push(fieldInfo);\n };\n return PdfAutomaticFieldInfoCollection;\n}());\nexport { PdfAutomaticFieldInfoCollection };\n","/**\n * Represents a base class for all page graphics elements.\n */\nvar PdfGraphicsElement = /** @class */ (function () {\n // Constructors\n function PdfGraphicsElement() {\n //\n }\n /**\n * `Draws` the page number field.\n * @public\n */\n PdfGraphicsElement.prototype.drawHelper = function (graphics, x, y) {\n var bNeedSave = (x !== 0 || y !== 0);\n var gState = null;\n // Translate co-ordinates.\n if (bNeedSave) {\n // Save state.\n gState = graphics.save();\n graphics.translateTransform(x, y);\n }\n this.drawInternal(graphics);\n if (bNeedSave) {\n // Restore state.\n graphics.restore(gState);\n }\n };\n return PdfGraphicsElement;\n}());\nexport { PdfGraphicsElement };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfAutomaticField.ts class for EJ2-PDF\n */\nimport { RectangleF, SizeF, PointF } from './../../drawing/pdf-drawing';\nimport { PdfSolidBrush } from './../../graphics/brushes/pdf-solid-brush';\nimport { PdfColor } from './../../graphics/pdf-color';\nimport { PdfDocument } from './../pdf-document';\nimport { PdfGraphicsElement } from './../../graphics/figures/base/graphics-element';\nimport { PdfAutomaticFieldInfo } from './automatic-field-info';\n/**\n * Represents a fields which is calculated before the document saves.\n */\nvar PdfAutomaticField = /** @class */ (function (_super) {\n __extends(PdfAutomaticField, _super);\n // Constructors\n function PdfAutomaticField() {\n var _this = _super.call(this) || this;\n // Fields\n _this.internalBounds = new RectangleF(0, 0, 0, 0);\n _this.internalTemplateSize = new SizeF(0, 0);\n return _this;\n }\n Object.defineProperty(PdfAutomaticField.prototype, \"bounds\", {\n // Properties\n get: function () {\n return this.internalBounds;\n },\n set: function (value) {\n this.internalBounds = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"size\", {\n get: function () {\n return new SizeF(this.bounds.width, this.bounds.height);\n },\n set: function (value) {\n this.bounds.width = value.width;\n this.bounds.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"location\", {\n get: function () {\n return new PointF(this.bounds.x, this.bounds.y);\n },\n set: function (value) {\n this.bounds.x = value.x;\n this.bounds.y = value.y;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"font\", {\n get: function () {\n return this.internalFont;\n },\n set: function (value) {\n this.internalFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"brush\", {\n get: function () {\n return this.internalBrush;\n },\n set: function (value) {\n this.internalBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"pen\", {\n get: function () {\n return this.internalPen;\n },\n set: function (value) {\n this.internalPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticField.prototype, \"stringFormat\", {\n get: function () {\n return this.internalStringFormat;\n },\n set: function (value) {\n this.internalStringFormat = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfAutomaticField.prototype.performDrawHelper = function (graphics, location, scalingX, scalingY) {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n var text = this.getValue(graphics);\n this.internalTemplateSize = this.getFont().measureString(text, this.size, this.stringFormat);\n }\n };\n PdfAutomaticField.prototype.draw = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n var location_1 = new PointF(0, 0);\n this.draw(arg1, location_1);\n }\n else if (arg2 instanceof PointF) {\n this.draw(arg1, arg2.x, arg2.y);\n }\n else {\n this.drawHelper(arg1, arg2, arg3);\n var info = new PdfAutomaticFieldInfo(this, new PointF(arg2, arg3));\n arg1.automaticFields.add(info);\n }\n };\n PdfAutomaticField.prototype.getSize = function () {\n if (this.bounds.height === 0 || this.bounds.width === 0) {\n return this.internalTemplateSize;\n }\n else {\n return this.size;\n }\n };\n PdfAutomaticField.prototype.drawInternal = function (graphics) {\n //\n };\n /* tslint:disable */\n PdfAutomaticField.prototype.getBrush = function () {\n return (typeof this.internalBrush === 'undefined' || this.internalBrush == null) ? new PdfSolidBrush(new PdfColor(0, 0, 0)) : this.internalBrush;\n };\n PdfAutomaticField.prototype.getFont = function () {\n return (typeof this.internalFont === 'undefined' || this.internalFont == null) ? PdfDocument.defaultFont : this.internalFont;\n };\n /* tslint:enable */\n PdfAutomaticField.prototype.getPageFromGraphics = function (graphics) {\n if (typeof graphics.page !== 'undefined' && graphics.page !== null) {\n var page = graphics.page;\n return page;\n }\n else {\n var page = graphics.currentPage;\n return page;\n }\n };\n return PdfAutomaticField;\n}(PdfGraphicsElement));\nexport { PdfAutomaticField };\n","/**\n * PdfAutomaticFieldInfo.ts class for EJ2-PDF\n * @private\n */\nimport { PointF } from './../../drawing/pdf-drawing';\nimport { PdfAutomaticField } from './automatic-field';\n/**\n * Represents information about the automatic field.\n * @private\n */\nvar PdfAutomaticFieldInfo = /** @class */ (function () {\n function PdfAutomaticFieldInfo(field, location, scaleX, scaleY) {\n // Fields\n /**\n * Internal variable to store location of the field.\n * @private\n */\n this.pageNumberFieldLocation = new PointF();\n /**\n * Internal variable to store field.\n * @private\n */\n this.pageNumberField = null;\n /**\n * Internal variable to store x scaling factor.\n * @private\n */\n this.scaleX = 1;\n /**\n * Internal variable to store y scaling factor.\n * @private\n */\n this.scaleY = 1;\n if (typeof location === 'undefined' && field instanceof PdfAutomaticFieldInfo) {\n this.pageNumberField = field.field;\n this.pageNumberFieldLocation = field.location;\n this.scaleX = field.scalingX;\n this.scaleY = field.scalingY;\n }\n else if (typeof scaleX === 'undefined' && location instanceof PointF && field instanceof PdfAutomaticField) {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n }\n else {\n this.pageNumberField = field;\n this.pageNumberFieldLocation = location;\n this.scaleX = scaleX;\n this.scaleY = scaleY;\n }\n }\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"location\", {\n /* tslint:enable */\n // Properties\n /**\n * Gets or sets the location.\n * @private\n */\n get: function () {\n return this.pageNumberFieldLocation;\n },\n set: function (value) {\n this.pageNumberFieldLocation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"field\", {\n /**\n * Gets or sets the field.\n * @private\n */\n get: function () {\n return this.pageNumberField;\n },\n set: function (value) {\n this.pageNumberField = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingX\", {\n /**\n * Gets or sets the scaling X factor.\n * @private\n */\n get: function () {\n return this.scaleX;\n },\n set: function (value) {\n this.scaleX = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfAutomaticFieldInfo.prototype, \"scalingY\", {\n /**\n * Gets or sets the scaling Y factor.\n * @private\n */\n get: function () {\n return this.scaleY;\n },\n set: function (value) {\n this.scaleY = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAutomaticFieldInfo;\n}());\nexport { PdfAutomaticFieldInfo };\n","/**\n * ByteArray class\n * Used to keep information about image stream as byte array.\n * @private\n */\nvar ByteArray = /** @class */ (function () {\n /**\n * Initialize the new instance for `byte-array` class\n * @hidden\n * @private\n */\n function ByteArray(length) {\n /**\n * Current stream `position`.\n * @default 0\n * @private\n */\n this.mPosition = 0;\n this.buffer = new Uint8Array(length);\n this.dataView = new DataView(this.buffer.buffer);\n }\n Object.defineProperty(ByteArray.prototype, \"position\", {\n /**\n * Gets and Sets a current `position` of byte array.\n * @hidden\n * @private\n */\n get: function () {\n return this.mPosition;\n },\n set: function (value) {\n this.mPosition = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Read` from current stream position.\n * @default 0\n * @hidden\n * @private\n */\n ByteArray.prototype.read = function (buffer, offset, count) {\n for (var index = offset; index < count; index++) {\n var position = this.position;\n buffer.buffer[index] = this.readByte(position);\n this.position++;\n }\n };\n /**\n * @hidden\n */\n ByteArray.prototype.getBuffer = function (index) {\n return this.buffer[index];\n };\n /**\n * @hidden\n */\n ByteArray.prototype.writeFromBase64String = function (base64) {\n var arr = this.encodedString(base64);\n this.buffer = arr;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var enc1;\n var enc2;\n var enc3;\n var enc4;\n var i = 0;\n var resultIndex = 0;\n var dataUrlPrefix = 'data:';\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n var output = new Uint8Array(totalLength | 0);\n while (i < input.length) {\n enc1 = keyStr.indexOf(input.charAt(i++));\n enc2 = keyStr.indexOf(input.charAt(i++));\n enc3 = keyStr.indexOf(input.charAt(i++));\n enc4 = keyStr.indexOf(input.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n output[resultIndex++] = chr1;\n output[resultIndex++] = chr2;\n output[resultIndex++] = chr3;\n }\n return output;\n };\n /**\n * @hidden\n */\n ByteArray.prototype.readByte = function (offset) {\n return (this.buffer[offset]);\n };\n Object.defineProperty(ByteArray.prototype, \"internalBuffer\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ByteArray.prototype, \"count\", {\n /**\n * @hidden\n */\n get: function () {\n return this.buffer.byteLength;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * 'readNextTwoBytes' stream\n * @hidden\n * @private\n */\n ByteArray.prototype.readNextTwoBytes = function (stream) {\n var data = stream.readByte(this.position);\n this.position++;\n data <<= 8;\n data |= stream.readByte(this.position);\n this.position++;\n return data;\n };\n return ByteArray;\n}());\nexport { ByteArray };\n","/**\n * TtfTableInfo.ts class for EJ2-PDF\n */\nvar TtfTableInfo = /** @class */ (function () {\n function TtfTableInfo() {\n }\n Object.defineProperty(TtfTableInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this table is empty.\n * @private\n */\n get: function () {\n var empty = (this.offset === this.length && this.length === this.checksum && this.checksum === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n return TtfTableInfo;\n}());\nexport { TtfTableInfo };\n","var TtfNameTable = /** @class */ (function () {\n function TtfNameTable() {\n }\n return TtfNameTable;\n}());\nexport { TtfNameTable };\n","/**\n * TtfNameRecord.ts class for EJ2-PDF\n */\nvar TtfNameRecord = /** @class */ (function () {\n function TtfNameRecord() {\n }\n return TtfNameRecord;\n}());\nexport { TtfNameRecord };\n","/**\n * TtfHeadTable.ts class for EJ2-PDF\n */\nvar TtfHeadTable = /** @class */ (function () {\n function TtfHeadTable() {\n }\n return TtfHeadTable;\n}());\nexport { TtfHeadTable };\n","var TtfMetrics = /** @class */ (function () {\n function TtfMetrics() {\n }\n Object.defineProperty(TtfMetrics.prototype, \"isItalic\", {\n //Properties\n /**\n * Gets a value indicating whether this instance is italic.\n */\n get: function () {\n return ((this.macStyle & 2) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfMetrics.prototype, \"isBold\", {\n /**\n * Gets a value indicating whether this instance is bold.\n */\n get: function () {\n return ((this.macStyle & 1) !== 0);\n },\n enumerable: true,\n configurable: true\n });\n return TtfMetrics;\n}());\nexport { TtfMetrics };\n","/**\n * TtfHorizontalHeaderTable.ts class for EJ2-PDF\n */\nvar TtfHorizontalHeaderTable = /** @class */ (function () {\n function TtfHorizontalHeaderTable() {\n }\n return TtfHorizontalHeaderTable;\n}());\nexport { TtfHorizontalHeaderTable };\n","/**\n * TtfOS2Table.ts class for EJ2-PDF\n * The OS/2 table consists of a set of metrics that are required by Windows and OS/2.\n */\nvar TtfOS2Table = /** @class */ (function () {\n function TtfOS2Table() {\n }\n return TtfOS2Table;\n}());\nexport { TtfOS2Table };\n","/**\n * TtfPostTable.ts class for EJ2-PDF\n */\nvar TtfPostTable = /** @class */ (function () {\n function TtfPostTable() {\n }\n return TtfPostTable;\n}());\nexport { TtfPostTable };\n","/**\n * TtfLongHorMetric.ts class for EJ2-PDF\n */\nvar TtfLongHorMetric = /** @class */ (function () {\n function TtfLongHorMetric() {\n }\n return TtfLongHorMetric;\n}());\nexport { TtfLongHorMetric };\n","/**\n * TtfCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfCmapSubTable = /** @class */ (function () {\n function TtfCmapSubTable() {\n }\n return TtfCmapSubTable;\n}());\nexport { TtfCmapSubTable };\n","/**\n * TtfCmapTable.ts class for EJ2-PDF\n */\nvar TtfCmapTable = /** @class */ (function () {\n function TtfCmapTable() {\n }\n return TtfCmapTable;\n}());\nexport { TtfCmapTable };\n","/**\n * TtfGlyphInfo.ts class for EJ2-PDF\n */\nvar TtfGlyphInfo = /** @class */ (function () {\n function TtfGlyphInfo() {\n }\n Object.defineProperty(TtfGlyphInfo.prototype, \"empty\", {\n //Properties\n /**\n * Gets a value indicating whether this TtfGlyphInfo is empty.\n */\n get: function () {\n var empty = (this.index === this.width && this.width === this.charCode && this.charCode === 0);\n return empty;\n },\n enumerable: true,\n configurable: true\n });\n //IComparable implementation\n /**\n * Compares two WidthDescriptor objects.\n */\n TtfGlyphInfo.prototype.compareTo = function (obj) {\n var glyph = obj;\n return this.index - glyph.index;\n };\n return TtfGlyphInfo;\n}());\nexport { TtfGlyphInfo };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfLocaTable = /** @class */ (function () {\n function TtfLocaTable() {\n }\n return TtfLocaTable;\n}());\nexport { TtfLocaTable };\n","/**\n * TtfAppleCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfAppleCmapSubTable = /** @class */ (function () {\n function TtfAppleCmapSubTable() {\n }\n return TtfAppleCmapSubTable;\n}());\nexport { TtfAppleCmapSubTable };\n","/**\n * TtfMicrosoftCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfMicrosoftCmapSubTable = /** @class */ (function () {\n function TtfMicrosoftCmapSubTable() {\n }\n return TtfMicrosoftCmapSubTable;\n}());\nexport { TtfMicrosoftCmapSubTable };\n","/**\n * TtfTrimmedCmapSubTable.ts class for EJ2-PDF\n */\nvar TtfTrimmedCmapSubTable = /** @class */ (function () {\n function TtfTrimmedCmapSubTable() {\n }\n return TtfTrimmedCmapSubTable;\n}());\nexport { TtfTrimmedCmapSubTable };\n","/**\n * TtfLocaTable.ts class for EJ2-PDF\n */\nvar TtfGlyphHeader = /** @class */ (function () {\n function TtfGlyphHeader() {\n }\n return TtfGlyphHeader;\n}());\nexport { TtfGlyphHeader };\n","/**\n * Writes data in BigEndian order.\n */\nvar BigEndianWriter = /** @class */ (function () {\n //Constructors\n /**\n * Creates a new writer.\n */\n function BigEndianWriter(capacity) {\n //Constants\n /**\n * Size of Int32 type.\n */\n this.int32Size = 4;\n /**\n * Size of Int16 type.\n */\n this.int16Size = 2;\n /**\n * Size of long type.\n */\n this.int64Size = 8;\n this.bufferLength = capacity;\n this.buffer = [];\n }\n Object.defineProperty(BigEndianWriter.prototype, \"data\", {\n //Properties\n /**\n * Gets data written to the writer.\n */\n get: function () {\n if (this.buffer.length < this.bufferLength) {\n var length_1 = this.bufferLength - this.buffer.length;\n for (var i = 0; i < length_1; i++) {\n this.buffer.push(0);\n }\n }\n return this.buffer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BigEndianWriter.prototype, \"position\", {\n /// \n /// Gets position of the internal buffer.\n /// \n get: function () {\n if (this.internalPosition === undefined || this.internalPosition === null) {\n this.internalPosition = 0;\n }\n return this.internalPosition;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes short value.\n */\n BigEndianWriter.prototype.writeShort = function (value) {\n var bytes = [((value & 0x0000ff00) >> 8), value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes int value.\n */\n BigEndianWriter.prototype.writeInt = function (value) {\n var i1 = (value & 0xff000000) >> 24;\n i1 = i1 < 0 ? 256 + i1 : i1;\n var i2 = (value & 0x00ff0000) >> 16;\n i2 = i2 < 0 ? 256 + i2 : i2;\n var i3 = (value & 0x0000ff00) >> 8;\n i3 = i3 < 0 ? 256 + i3 : i3;\n var i4 = value & 0x000000ff;\n i4 = i4 < 0 ? 256 + i4 : i4;\n var bytes = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(bytes);\n };\n /**\n * Writes u int value.\n */\n BigEndianWriter.prototype.writeUInt = function (value) {\n var buff = [(value & 0xff000000) >> 24, (value & 0x00ff0000) >> 16, (value & 0x0000ff00) >> 8, value & 0x000000ff];\n this.flush(buff);\n };\n /**\n * Writes string value.\n */\n BigEndianWriter.prototype.writeString = function (value) {\n if (value == null) {\n throw new Error('Argument Null Exception : value');\n }\n var bytes = [];\n for (var i = 0; i < value.length; i++) {\n bytes.push(value.charCodeAt(i));\n }\n this.flush(bytes);\n };\n /**\n * Writes byte[] value.\n */\n BigEndianWriter.prototype.writeBytes = function (value) {\n this.flush(value);\n };\n // //Implementation\n BigEndianWriter.prototype.flush = function (buff) {\n if (buff === null) {\n throw new Error('Argument Null Exception : buff');\n }\n var position = this.position;\n for (var i = 0; i < buff.length; i++) {\n this.buffer[position] = buff[i];\n position++;\n }\n this.internalPosition += buff.length;\n };\n return BigEndianWriter;\n}());\nexport { BigEndianWriter };\n","/**\n * TtfReader.ts class for EJ2-PDF\n */\nimport { TtfTableInfo } from './ttf-table-info';\nimport { Dictionary } from './../../collections/dictionary';\nimport { TtfNameTable } from './ttf-name-table';\nimport { TtfNameRecord } from './ttf-name-record';\nimport { TtfHeadTable } from './ttf-head-table';\nimport { TtfMetrics } from './ttf-metrics';\nimport { TtfHorizontalHeaderTable } from './ttf-horizontal-header-table';\nimport { TtfOS2Table } from './ttf-OS2-Table';\nimport { TtfPostTable } from './ttf-post-table';\nimport { TtfLongHorMetric } from './ttf-long-hor-metric';\nimport { TtfCmapSubTable } from './ttf-cmap-sub-table';\nimport { TtfCmapTable } from './ttf-cmap-table';\nimport { TtfGlyphInfo } from './ttf-glyph-info';\nimport { TtfLocaTable } from './ttf-loca-table';\nimport { TtfAppleCmapSubTable } from './ttf-apple-cmap-sub-table';\nimport { TtfMicrosoftCmapSubTable } from './ttf-microsoft-cmap-sub-table';\nimport { TtfTrimmedCmapSubTable } from './ttf-trimmed-cmap-sub-table';\nimport { TtfGlyphHeader } from './ttf-glyph-header';\nimport { Rectangle } from './../../drawing/pdf-drawing';\nimport { StringTokenizer } from './string-tokenizer';\nimport { TtfCmapFormat, TtfCmapEncoding, TtfPlatformID } from './enum';\nimport { TtfMicrosoftEncodingID, TtfMacintoshEncodingID, TtfCompositeGlyphFlags } from './enum';\nimport { BigEndianWriter } from './../../input-output/big-endian-writer';\nvar TtfReader = /** @class */ (function () {\n //Constructors\n function TtfReader(fontData) {\n this.int32Size = 4;\n this.isTtcFont = false;\n this.isMacTtf = false;\n this.metricsName = '';\n this.isMacTTF = false;\n this.missedGlyphs = 0;\n this.tableNames = ['cvt ', 'fpgm', 'glyf', 'head', 'hhea', 'hmtx', 'loca', 'maxp', 'prep'];\n this.entrySelectors = [0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4];\n this.fontData = fontData;\n this.initialize();\n }\n Object.defineProperty(TtfReader.prototype, \"macintosh\", {\n //Properties\n /**\n * Gets glyphs for Macintosh or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.macintoshDictionary === null || this.macintoshDictionary === undefined) {\n this.macintoshDictionary = new Dictionary();\n }\n return this.macintoshDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoft\", {\n /**\n * Gets glyphs for Microsoft or Symbol fonts (char - key, glyph - value).\n */\n get: function () {\n if (this.microsoftDictionary === null || this.microsoftDictionary === undefined) {\n this.microsoftDictionary = new Dictionary();\n }\n return this.microsoftDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"macintoshGlyphs\", {\n /**\n * Gets glyphs for Macintosh or Symbol fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMacintoshGlyphs === null || this.internalMacintoshGlyphs === undefined) {\n this.internalMacintoshGlyphs = new Dictionary();\n }\n return this.internalMacintoshGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TtfReader.prototype, \"microsoftGlyphs\", {\n /**\n * Gets glyphs for Microsoft Unicode fonts (glyph index - key, glyph - value).\n */\n get: function () {\n if (this.internalMicrosoftGlyphs === null || this.internalMicrosoftGlyphs === undefined) {\n this.internalMicrosoftGlyphs = new Dictionary();\n }\n return this.internalMicrosoftGlyphs;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n TtfReader.prototype.initialize = function () {\n if (this.metrics === undefined) {\n this.metrics = new TtfMetrics();\n }\n this.readFontDictionary();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.initializeFontName(nameTable);\n this.metrics.macStyle = headTable.macStyle;\n };\n TtfReader.prototype.readFontDictionary = function () {\n this.offset = 0;\n var version = this.checkPreambula();\n //this.offset += 4;\n var numTables = this.readInt16(this.offset);\n var searchRange = this.readInt16(this.offset);\n var entrySelector = this.readInt16(this.offset);\n var rangeShift = this.readInt16(this.offset);\n if (this.tableDirectory === undefined) {\n this.tableDirectory = new Dictionary();\n }\n for (var i = 0; i < numTables; ++i) {\n var table = new TtfTableInfo();\n var tableKey = this.readString(this.int32Size);\n table.checksum = this.readInt32(this.offset);\n table.offset = this.readInt32(this.offset);\n table.length = this.readInt32(this.offset);\n this.tableDirectory.setValue(tableKey, table);\n }\n this.lowestPosition = this.offset;\n if (!this.isTtcFont) {\n this.fixOffsets();\n }\n };\n TtfReader.prototype.fixOffsets = function () {\n var minOffset = Number.MAX_VALUE;\n // Search for a smallest offset and compare it with the lowest position found.\n var tableKeys = this.tableDirectory.keys();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n var offset = value.offset;\n if (minOffset > offset) {\n minOffset = offset;\n if (minOffset <= this.lowestPosition) {\n break;\n }\n }\n }\n var shift = minOffset - this.lowestPosition;\n if (shift !== 0) {\n var table = new Dictionary();\n for (var i = 0; i < tableKeys.length; i++) {\n var value = this.tableDirectory.getValue(tableKeys[i]);\n value.offset -= shift;\n table.setValue(tableKeys[i], value);\n }\n this.tableDirectory = table;\n }\n };\n TtfReader.prototype.checkPreambula = function () {\n var version = this.readInt32(this.offset);\n this.isMacTtf = (version === 0x74727565) ? true : false;\n if (version !== 0x10000 && version !== 0x74727565 && version !== 0x4f54544f) {\n this.isTtcFont = true;\n this.offset = 0;\n var fontTag = this.readString(4);\n if (fontTag !== 'ttcf') {\n throw new Error('Can not read TTF font data');\n }\n //skip 4\n this.offset += 4;\n var ttcIdentificationNumber = this.readInt32(this.offset);\n if (ttcIdentificationNumber < 0) {\n throw new Error('Can not read TTF font data');\n }\n this.offset = this.readInt32(this.offset);\n version = this.readInt32(this.offset);\n }\n return version;\n };\n TtfReader.prototype.readNameTable = function () {\n var tableInfo = this.getTable('name');\n this.offset = tableInfo.offset;\n var table = new TtfNameTable();\n table.formatSelector = this.readUInt16(this.offset);\n table.recordsCount = this.readUInt16(this.offset);\n table.offset = this.readUInt16(this.offset);\n table.nameRecords = [];\n var recordSize = 12;\n var position = this.offset;\n for (var i = 0; i < table.recordsCount; i++) {\n this.offset = position;\n var record = new TtfNameRecord();\n record.platformID = this.readUInt16(this.offset);\n record.encodingID = this.readUInt16(this.offset);\n record.languageID = this.readUInt16(this.offset);\n record.nameID = this.readUInt16(this.offset);\n record.length = this.readUInt16(this.offset);\n record.offset = this.readUInt16(this.offset);\n this.offset = tableInfo.offset + table.offset + record.offset;\n var unicode = (record.platformID === 0 || record.platformID === 3);\n record.name = this.readString(record.length, unicode);\n table.nameRecords[i] = record;\n position += recordSize;\n }\n return table;\n };\n TtfReader.prototype.readHeadTable = function () {\n var tableInfo = this.getTable('head');\n this.offset = tableInfo.offset;\n var table = new TtfHeadTable();\n table.version = this.readFixed(this.offset);\n table.fontRevision = this.readFixed(this.offset);\n table.checkSumAdjustment = this.readUInt32(this.offset);\n table.magicNumber = this.readUInt32(this.offset);\n table.flags = this.readUInt16(this.offset);\n table.unitsPerEm = this.readUInt16(this.offset);\n table.created = this.readInt64(this.offset);\n table.modified = this.readInt64(this.offset);\n table.xMin = this.readInt16(this.offset);\n table.yMin = this.readInt16(this.offset);\n table.xMax = this.readInt16(this.offset);\n table.yMax = this.readInt16(this.offset);\n table.macStyle = this.readUInt16(this.offset);\n table.lowestReadableSize = this.readUInt16(this.offset);\n table.fontDirectionHint = this.readInt16(this.offset);\n table.indexToLocalFormat = this.readInt16(this.offset);\n table.glyphDataFormat = this.readInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readHorizontalHeaderTable = function () {\n var tableInfo = this.getTable('hhea');\n this.offset = tableInfo.offset;\n var table = new TtfHorizontalHeaderTable();\n table.version = this.readFixed(this.offset);\n table.ascender = this.readInt16(this.offset);\n table.descender = this.readInt16(this.offset);\n table.lineGap = this.readInt16(this.offset);\n table.advanceWidthMax = this.readUInt16(this.offset);\n table.minLeftSideBearing = this.readInt16(this.offset);\n table.minRightSideBearing = this.readInt16(this.offset);\n table.xMaxExtent = this.readInt16(this.offset);\n table.caretSlopeRise = this.readInt16(this.offset);\n table.caretSlopeRun = this.readInt16(this.offset);\n //skip 2 * 5\n this.offset += 10;\n table.metricDataFormat = this.readInt16(this.offset);\n table.numberOfHMetrics = this.readUInt16(this.offset);\n return table;\n };\n TtfReader.prototype.readOS2Table = function () {\n var tableInfo = this.getTable('OS/2');\n this.offset = tableInfo.offset;\n var table = new TtfOS2Table();\n table.version = this.readUInt16(this.offset);\n table.xAvgCharWidth = this.readInt16(this.offset);\n table.usWeightClass = this.readUInt16(this.offset);\n table.usWidthClass = this.readUInt16(this.offset);\n table.fsType = this.readInt16(this.offset);\n table.ySubscriptXSize = this.readInt16(this.offset);\n table.ySubscriptYSize = this.readInt16(this.offset);\n table.ySubscriptXOffset = this.readInt16(this.offset);\n table.ySubscriptYOffset = this.readInt16(this.offset);\n table.ySuperscriptXSize = this.readInt16(this.offset);\n table.ySuperscriptYSize = this.readInt16(this.offset);\n table.ySuperscriptXOffset = this.readInt16(this.offset);\n table.ySuperscriptYOffset = this.readInt16(this.offset);\n table.yStrikeoutSize = this.readInt16(this.offset);\n table.yStrikeoutPosition = this.readInt16(this.offset);\n table.sFamilyClass = this.readInt16(this.offset);\n table.panose = this.readBytes(10);\n table.ulUnicodeRange1 = this.readUInt32(this.offset);\n table.ulUnicodeRange2 = this.readUInt32(this.offset);\n table.ulUnicodeRange3 = this.readUInt32(this.offset);\n table.ulUnicodeRange4 = this.readUInt32(this.offset);\n table.vendorIdentifier = this.readBytes(4);\n table.fsSelection = this.readUInt16(this.offset);\n table.usFirstCharIndex = this.readUInt16(this.offset);\n table.usLastCharIndex = this.readUInt16(this.offset);\n table.sTypoAscender = this.readInt16(this.offset);\n table.sTypoDescender = this.readInt16(this.offset);\n table.sTypoLineGap = this.readInt16(this.offset);\n table.usWinAscent = this.readUInt16(this.offset);\n table.usWinDescent = this.readUInt16(this.offset);\n table.ulCodePageRange1 = this.readUInt32(this.offset);\n table.ulCodePageRange2 = this.readUInt32(this.offset);\n if (table.version > 1) {\n table.sxHeight = this.readInt16(this.offset);\n table.sCapHeight = this.readInt16(this.offset);\n table.usDefaultChar = this.readUInt16(this.offset);\n table.usBreakChar = this.readUInt16(this.offset);\n table.usMaxContext = this.readUInt16(this.offset);\n }\n else {\n table.sxHeight = 0;\n table.sCapHeight = 0;\n table.usDefaultChar = 0;\n table.usBreakChar = 0;\n table.usMaxContext = 0;\n }\n return table;\n };\n TtfReader.prototype.readPostTable = function () {\n var tableInfo = this.getTable('post');\n this.offset = tableInfo.offset;\n var table = new TtfPostTable();\n table.formatType = this.readFixed(this.offset);\n table.italicAngle = this.readFixed(this.offset);\n table.underlinePosition = this.readInt16(this.offset);\n table.underlineThickness = this.readInt16(this.offset);\n table.isFixedPitch = this.readUInt32(this.offset);\n table.minType42 = this.readUInt32(this.offset);\n table.maxType42 = this.readUInt32(this.offset);\n table.minType1 = this.readUInt32(this.offset);\n table.maxType1 = this.readUInt32(this.offset);\n return table;\n };\n /**\n * Reads Width of the glyphs.\n */\n TtfReader.prototype.readWidthTable = function (glyphCount, unitsPerEm) {\n var tableInfo = this.getTable('hmtx');\n this.offset = tableInfo.offset;\n var width = [];\n for (var i = 0; i < glyphCount; i++) {\n var glyph = new TtfLongHorMetric();\n glyph.advanceWidth = this.readUInt16(this.offset);\n glyph.lsb = this.readInt16(this.offset);\n var glyphWidth = glyph.advanceWidth * 1000 / unitsPerEm;\n width.push(Math.floor(glyphWidth));\n }\n return width;\n };\n /**\n * Reads the cmap table.\n */\n TtfReader.prototype.readCmapTable = function () {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset;\n var table = new TtfCmapTable();\n table.version = this.readUInt16(this.offset);\n table.tablesCount = this.readUInt16(this.offset);\n var position = this.offset;\n var subTables = [];\n for (var i = 0; i < table.tablesCount; i++) {\n this.offset = position;\n var subTable = new TtfCmapSubTable();\n subTable.platformID = this.readUInt16(this.offset);\n subTable.encodingID = this.readUInt16(this.offset);\n subTable.offset = this.readUInt32(this.offset);\n position = this.offset;\n this.readCmapSubTable(subTable);\n subTables[i] = subTable;\n }\n return subTables;\n };\n /**\n * Reads the cmap sub table.\n */\n TtfReader.prototype.readCmapSubTable = function (subTable) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var format = this.readUInt16(this.offset);\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n var platform = (encoding === TtfCmapEncoding.Macintosh) ? TtfPlatformID.Macintosh : TtfPlatformID.Microsoft;\n if (encoding !== TtfCmapEncoding.Unknown) {\n switch (format) {\n case TtfCmapFormat.Apple:\n this.readAppleCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Microsoft:\n this.readMicrosoftCmapTable(subTable, encoding);\n break;\n case TtfCmapFormat.Trimmed:\n this.readTrimmedCmapTable(subTable, encoding);\n break;\n }\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readAppleCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfAppleCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n if (this.maxMacIndex === null || this.maxMacIndex === undefined) {\n this.maxMacIndex = 0;\n }\n for (var i = 0; i < 256; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readByte(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n /**\n * Reads Symbol cmap table.\n */\n TtfReader.prototype.readMicrosoftCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var collection = (encoding === TtfCmapEncoding.Unicode) ? this.microsoft : this.macintosh;\n var table = new TtfMicrosoftCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.segCountX2 = this.readUInt16(this.offset);\n table.searchRange = this.readUInt16(this.offset);\n table.entrySelector = this.readUInt16(this.offset);\n table.rangeShift = this.readUInt16(this.offset);\n var segCount = table.segCountX2 / 2;\n table.endCount = this.readUshortArray(segCount);\n table.reservedPad = this.readUInt16(this.offset);\n table.startCount = this.readUshortArray(segCount);\n table.idDelta = this.readUshortArray(segCount);\n table.idRangeOffset = this.readUshortArray(segCount);\n var length = (table.length / 2 - 8) - (segCount * 4);\n table.glyphID = this.readUshortArray(length);\n // Process glyphIdArray array.\n var codeOffset = 0;\n var index = 0;\n for (var j = 0; j < segCount; j++) {\n for (var k = table.startCount[j]; k <= table.endCount[j] && k !== 65535; k++) {\n if (table.idRangeOffset[j] === 0) {\n codeOffset = (k + table.idDelta[j]) & 65535;\n }\n else {\n index = j + table.idRangeOffset[j] / 2 - segCount + k - table.startCount[j];\n if (index >= table.glyphID.length) {\n continue;\n }\n codeOffset = (table.glyphID[index] + table.idDelta[j]) & 65535;\n }\n var glyph = new TtfGlyphInfo();\n glyph.index = codeOffset;\n glyph.width = this.getWidth(glyph.index);\n var id = (encoding === TtfCmapEncoding.Symbol) ? ((k & 0xff00) === 0xf000 ? k & 0xff : k) : k;\n glyph.charCode = id;\n collection.setValue(id, glyph);\n this.addGlyph(glyph, encoding);\n }\n }\n };\n /**\n * Reads Trimed cmap table.\n */\n TtfReader.prototype.readTrimmedCmapTable = function (subTable, encoding) {\n var tableInfo = this.getTable('cmap');\n this.offset = tableInfo.offset + subTable.offset;\n var table = new TtfTrimmedCmapSubTable();\n table.format = this.readUInt16(this.offset);\n table.length = this.readUInt16(this.offset);\n table.version = this.readUInt16(this.offset);\n table.firstCode = this.readUInt16(this.offset);\n table.entryCount = this.readUInt16(this.offset);\n for (var i = 0; i < table.entryCount; ++i) {\n var glyphInfo = new TtfGlyphInfo();\n glyphInfo.index = this.readUInt16(this.offset);\n glyphInfo.width = this.getWidth(glyphInfo.index);\n glyphInfo.charCode = i + table.firstCode;\n this.macintosh.setValue(i, glyphInfo);\n this.addGlyph(glyphInfo, encoding);\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n this.maxMacIndex = Math.max(i, this.maxMacIndex);\n }\n };\n TtfReader.prototype.initializeFontName = function (nameTable) {\n for (var i = 0; i < nameTable.recordsCount; i++) {\n var record = nameTable.nameRecords[i];\n if (record.nameID === 1) {\n //font family\n this.metrics.fontFamily = record.name;\n }\n else if (record.nameID === 6) {\n //post script name\n this.metrics.postScriptName = record.name;\n }\n /* tslint:disable */\n if (this.metrics.fontFamily !== null && this.metrics.fontFamily !== undefined && this.metrics.postScriptName !== null && this.metrics.postScriptName !== undefined) {\n break;\n }\n /* tslint:disable */\n }\n };\n TtfReader.prototype.getTable = function (name) {\n // if (name === null) {\n // throw new Error('Argument Null Exception : name');\n // }\n var table = new TtfTableInfo();\n var obj;\n if (this.tableDirectory.containsKey(name)) {\n obj = this.tableDirectory.getValue(name);\n }\n if (obj !== null && obj !== undefined) {\n table = obj;\n }\n return table;\n };\n /**\n * Returns width of the glyph.\n */\n TtfReader.prototype.getWidth = function (glyphCode) {\n glyphCode = (glyphCode < this.width.length) ? glyphCode : this.width.length - 1;\n return this.width[glyphCode];\n };\n /**\n * Gets CMAP encoding based on platform ID and encoding ID.\n */\n /* tslint:disable */\n TtfReader.prototype.getCmapEncoding = function (platformID, encodingID) {\n var format = TtfCmapEncoding.Unknown;\n if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Undefined) {\n // When building a symbol font for Windows,\n // the platform ID should be 3 and the encoding ID should be 0.\n format = TtfCmapEncoding.Symbol;\n }\n else if (platformID == TtfPlatformID.Microsoft && encodingID == TtfMicrosoftEncodingID.Unicode) {\n // When building a Unicode font for Windows,\n // the platform ID should be 3 and the encoding ID should be 1.\n format = TtfCmapEncoding.Unicode;\n }\n else if (platformID == TtfPlatformID.Macintosh && encodingID == TtfMacintoshEncodingID.Roman) {\n // When building a font that will be used on the Macintosh,\n // the platform ID should be 1 and the encoding ID should be 0.\n format = TtfCmapEncoding.Macintosh;\n }\n return format;\n };\n /* tslint:enable */\n /**\n * Adds glyph to the collection.\n */\n TtfReader.prototype.addGlyph = function (glyph, encoding) {\n var collection = null;\n switch (encoding) {\n case TtfCmapEncoding.Unicode:\n collection = this.microsoftGlyphs;\n break;\n case TtfCmapEncoding.Macintosh:\n case TtfCmapEncoding.Symbol:\n collection = this.macintoshGlyphs;\n break;\n }\n collection.setValue(glyph.index, glyph);\n };\n /**\n * Initializes metrics.\n */\n /* tslint:disable */\n TtfReader.prototype.initializeMetrics = function (nameTable, headTable, horizontalHeadTable, os2Table, postTable, cmapTables) {\n /* tslint:enable */\n // if (cmapTables === null) {\n // throw new Error('ArgumentNullException : cmapTables');\n // }\n this.initializeFontName(nameTable);\n // Get font encoding.\n var bSymbol = false;\n for (var i = 0; i < cmapTables.length; i++) {\n var subTable = cmapTables[i];\n var encoding = this.getCmapEncoding(subTable.platformID, subTable.encodingID);\n if (encoding === TtfCmapEncoding.Symbol) {\n bSymbol = true;\n break;\n }\n }\n this.metrics.isSymbol = bSymbol;\n this.metrics.macStyle = headTable.macStyle;\n this.metrics.isFixedPitch = (postTable.isFixedPitch !== 0);\n this.metrics.italicAngle = postTable.italicAngle;\n var factor = 1000 / headTable.unitsPerEm;\n this.metrics.winAscent = os2Table.sTypoAscender * factor;\n this.metrics.macAscent = horizontalHeadTable.ascender * factor;\n //m_metrics.MacAscent = os2Table.UsWinAscent * factor;\n // NOTE: This is stange workaround. The value is good if os2Table.SCapHeight != 0, otherwise it should be properly computed.\n this.metrics.capHeight = (os2Table.sCapHeight !== 0) ? os2Table.sCapHeight : 0.7 * headTable.unitsPerEm * factor;\n this.metrics.winDescent = os2Table.sTypoDescender * factor;\n this.metrics.macDescent = horizontalHeadTable.descender * factor;\n //m_metrics.MacDescent = -os2Table.UsWinDescent * factor;\n this.metrics.leading = (os2Table.sTypoAscender - os2Table.sTypoDescender + os2Table.sTypoLineGap) * factor;\n this.metrics.lineGap = Math.ceil(horizontalHeadTable.lineGap * factor);\n var left = headTable.xMin * factor;\n var top = Math.ceil(this.metrics.macAscent + this.metrics.lineGap);\n var right = headTable.xMax * factor;\n var bottom = this.metrics.macDescent;\n this.metrics.fontBox = new Rectangle(left, top, right, bottom);\n // NOTE: Strange!\n this.metrics.stemV = 80;\n this.metrics.widthTable = this.updateWidth();\n this.metrics.contains = this.tableDirectory.containsKey('CFF');\n this.metrics.subScriptSizeFactor = headTable.unitsPerEm / os2Table.ySubscriptYSize;\n this.metrics.superscriptSizeFactor = headTable.unitsPerEm / os2Table.ySuperscriptYSize;\n };\n /**\n * Updates chars structure which is used in the case of ansi encoding (256 bytes).\n */\n TtfReader.prototype.updateWidth = function () {\n var count = 256;\n var bytes = [];\n if (this.metrics.isSymbol) {\n for (var i = 0; i < count; i++) {\n var glyphInfo = this.getGlyph(String.fromCharCode(i));\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n else {\n var byteToProcess = [];\n var unknown = '?';\n var space = String.fromCharCode(32);\n for (var i = 0; i < count; i++) {\n byteToProcess[0] = i;\n var text = this.getString(byteToProcess, 0, byteToProcess.length);\n var ch = (text.length > 0) ? text[0] : unknown;\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n bytes[i] = glyphInfo.width;\n }\n else {\n glyphInfo = this.getGlyph(space);\n bytes[i] = (glyphInfo.empty) ? 0 : glyphInfo.width;\n }\n }\n }\n return bytes;\n };\n /**\n * Returns default glyph.\n */\n TtfReader.prototype.getDefaultGlyph = function () {\n var glyph = this.getGlyph(StringTokenizer.whiteSpace);\n return glyph;\n };\n /**\n * Reads unicode string from byte array.\n */\n TtfReader.prototype.getString = function (byteToProcess, start, length) {\n var result = '';\n for (var index = 0; index < length; index++) {\n result += String.fromCharCode(byteToProcess[index + start]);\n }\n return result;\n };\n /**\n * Reads loca table.\n */\n TtfReader.prototype.readLocaTable = function (bShort) {\n var tableInfo = this.getTable('loca');\n this.offset = tableInfo.offset;\n var table = new TtfLocaTable();\n var buffer = null;\n if (bShort) {\n var len = tableInfo.length / 2;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt16(this.offset) * 2;\n }\n }\n else {\n var len = tableInfo.length / 4;\n buffer = [];\n for (var i = 0; i < len; i++) {\n buffer[i] = this.readUInt32(this.offset);\n }\n }\n table.offsets = buffer;\n return table;\n };\n /**\n * Updates hash table of used glyphs.\n */\n TtfReader.prototype.updateGlyphChars = function (glyphChars, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Add zero key.\n if (!glyphChars.containsKey(0)) {\n glyphChars.setValue(0, 0);\n }\n var clone = new Dictionary();\n var glyphCharKeys = glyphChars.keys();\n for (var i = 0; i < glyphCharKeys.length; i++) {\n clone.setValue(glyphCharKeys[i], glyphChars.getValue(glyphCharKeys[i]));\n }\n for (var i = 0; i < glyphCharKeys.length; i++) {\n var nextKey = glyphCharKeys[i];\n this.processCompositeGlyph(glyphChars, nextKey, locaTable);\n }\n };\n /**\n * Checks if glyph is composite or not.\n */\n TtfReader.prototype.processCompositeGlyph = function (glyphChars, glyph, locaTable) {\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n // Is in range.\n if (glyph < locaTable.offsets.length - 1) {\n var glyphOffset = locaTable.offsets[glyph];\n if (glyphOffset !== locaTable.offsets[glyph + 1]) {\n var tableInfo = this.getTable('glyf');\n this.offset = tableInfo.offset + glyphOffset;\n var glyphHeader = new TtfGlyphHeader();\n glyphHeader.numberOfContours = this.readInt16(this.offset);\n glyphHeader.xMin = this.readInt16(this.offset);\n glyphHeader.yMin = this.readInt16(this.offset);\n glyphHeader.xMax = this.readInt16(this.offset);\n glyphHeader.yMax = this.readInt16(this.offset);\n // Glyph is composite.\n if (glyphHeader.numberOfContours < 0) {\n var skipBytes = 0;\n var entry = true;\n while (entry) {\n var flags = this.readUInt16(this.offset);\n var glyphIndex = this.readUInt16(this.offset);\n if (!glyphChars.containsKey(glyphIndex)) {\n glyphChars.setValue(glyphIndex, 0);\n }\n if ((flags & TtfCompositeGlyphFlags.MoreComponents) === 0) {\n break;\n }\n skipBytes = ((flags & TtfCompositeGlyphFlags.Arg1And2AreWords) !== 0) ? 4 : 2;\n if ((flags & TtfCompositeGlyphFlags.WeHaveScale) !== 0) {\n skipBytes += 2;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveAnXyScale) !== 0) {\n skipBytes += 4;\n }\n else if ((flags & TtfCompositeGlyphFlags.WeHaveTwoByTwo) !== 0) {\n skipBytes += 2 * 4;\n }\n this.offset += skipBytes;\n }\n }\n }\n }\n };\n /**\n * Creates new glyph tables based on chars that are used for output.\n */\n /* tslint:disable */\n TtfReader.prototype.generateGlyphTable = function (glyphChars, locaTable, newLocaTable, newGlyphTable) {\n /* tslint:enable */\n // if (glyphChars === null) {\n // throw new Error('Argument Null Exception : glyphChars');\n // }\n newLocaTable = [];\n // Sorting used glyphs keys.\n var activeGlyphs = glyphChars.keys();\n activeGlyphs.sort(function (a, b) { return a - b; });\n var glyphSize = 0;\n for (var i = 0; i < activeGlyphs.length; i++) {\n var glyphIndex = activeGlyphs[i];\n if (locaTable.offsets.length > 0) {\n glyphSize += locaTable.offsets[glyphIndex + 1] - locaTable.offsets[glyphIndex];\n }\n }\n var glyphSizeAligned = this.align(glyphSize);\n newGlyphTable = [];\n for (var i = 0; i < glyphSizeAligned; i++) {\n newGlyphTable.push(0);\n }\n var nextGlyphOffset = 0;\n var nextGlyphIndex = 0;\n var table = this.getTable('glyf');\n // Creating NewLocaTable - that would hold offsets for filtered glyphs.\n for (var i = 0; i < locaTable.offsets.length; i++) {\n newLocaTable.push(nextGlyphOffset);\n if (nextGlyphIndex < activeGlyphs.length && activeGlyphs[nextGlyphIndex] === i) {\n ++nextGlyphIndex;\n newLocaTable[i] = nextGlyphOffset;\n var oldGlyphOffset = locaTable.offsets[i];\n var oldNextGlyphOffset = locaTable.offsets[i + 1] - oldGlyphOffset;\n if (oldNextGlyphOffset > 0) {\n this.offset = table.offset + oldGlyphOffset;\n var result = this.read(newGlyphTable, nextGlyphOffset, oldNextGlyphOffset);\n newGlyphTable = result.buffer;\n nextGlyphOffset += oldNextGlyphOffset;\n }\n }\n }\n return { glyphTableSize: glyphSize, newLocaTable: newLocaTable, newGlyphTable: newGlyphTable };\n };\n /**\n * Updates new Loca table.\n */\n /* tslint:disable */\n TtfReader.prototype.updateLocaTable = function (newLocaTable, bLocaIsShort, newLocaTableOut) {\n /* tslint:enable */\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTable');\n }\n var size = (bLocaIsShort) ? newLocaTable.length * 2 : newLocaTable.length * 4;\n var count = this.align(size);\n //BigEndianWiter\n var writer = new BigEndianWriter(count);\n for (var i = 0; i < newLocaTable.length; i++) {\n var value = newLocaTable[i];\n if (bLocaIsShort) {\n value /= 2;\n writer.writeShort(value);\n }\n else {\n writer.writeInt(value);\n }\n }\n return { newLocaUpdated: writer.data, newLocaSize: size };\n };\n /**\n * Aligns number to be divisible on 4.\n */\n TtfReader.prototype.align = function (value) {\n return (value + 3) & (~3);\n };\n /**\n * Returns font program data.\n */\n /* tslint:disable */\n TtfReader.prototype.getFontProgram = function (newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var result = this.getFontProgramLength(newLocaTableOut, newGlyphTable, 0);\n var fontProgramLength = result.fontProgramLength;\n var numTables = result.numTables;\n var writer = new BigEndianWriter(fontProgramLength);\n writer.writeInt(0x10000);\n writer.writeShort(numTables);\n var entrySelector = this.entrySelectors[numTables];\n writer.writeShort((1 << (entrySelector & 31)) * 16);\n writer.writeShort(entrySelector);\n writer.writeShort((numTables - (1 << (entrySelector & 31))) * 16);\n // Writing to destination buffer - checksums && sizes of used tables.\n this.writeCheckSums(writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize);\n // // Writing to destination buffer - used glyphs.\n this.writeGlyphs(writer, newLocaTableOut, newGlyphTable);\n return writer.data;\n };\n /* tslint:disable */\n TtfReader.prototype.getFontProgramLength = function (newLocaTableOut, newGlyphTable, numTables) {\n /* tslint:enable */\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n // glyf and loca are used by default;\n numTables = 2;\n var tableNames = this.tableNames;\n var fontProgramLength = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n if (tableName !== 'glyf' && tableName !== 'loca') {\n var table = this.getTable(tableName);\n if (!table.empty) {\n ++numTables;\n fontProgramLength += this.align(table.length);\n }\n }\n }\n fontProgramLength += newLocaTableOut.length;\n fontProgramLength += newGlyphTable.length;\n var usedTablesSize = numTables * 16 + (3 * 4);\n fontProgramLength += usedTablesSize;\n return { fontProgramLength: fontProgramLength, numTables: numTables };\n };\n /**\n * Writing to destination buffer - checksums and sizes of used tables.\n */\n /* tslint:disable */\n TtfReader.prototype.writeCheckSums = function (writer, numTables, newLocaTableOut, newGlyphTable, glyphTableSize, locaTableSize) {\n /* tslint:enable */\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTableOut === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n var usedTablesSize = numTables * 16 + (3 * 4);\n var nextTableSize = 0;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n writer.writeString(tableName);\n if (tableName === 'glyf') {\n var checksum = this.calculateCheckSum(newGlyphTable);\n writer.writeInt(checksum);\n nextTableSize = glyphTableSize;\n }\n else if (tableName === 'loca') {\n var checksum = this.calculateCheckSum(newLocaTableOut);\n writer.writeInt(checksum);\n nextTableSize = locaTableSize;\n }\n else {\n writer.writeInt(tableInfo.checksum);\n nextTableSize = tableInfo.length;\n }\n writer.writeUInt(usedTablesSize);\n writer.writeUInt(nextTableSize);\n usedTablesSize += this.align(nextTableSize);\n }\n };\n /**\n * Gets checksum from source buffer.\n */\n TtfReader.prototype.calculateCheckSum = function (bytes) {\n if (bytes === null) {\n throw new Error('Argument Null Exception : bytes');\n }\n var pos = 0;\n var byte1 = 0;\n var byte2 = 0;\n var byte3 = 0;\n var byte4 = 0;\n for (var i = 0; i < (bytes.length + 1) / 4; i++) {\n byte4 += (bytes[pos++] & 255);\n byte3 += (bytes[pos++] & 255);\n byte2 += (bytes[pos++] & 255);\n byte1 += (bytes[pos++] & 255);\n }\n var result = byte1;\n result += (byte2 << 8);\n result += (byte3 << 16);\n result += (byte4 << 24);\n return result;\n };\n /**\n * Writing to destination buffer - used glyphs.\n */\n TtfReader.prototype.writeGlyphs = function (writer, newLocaTable, newGlyphTable) {\n if (writer === null) {\n throw new Error('Argument Null Exception : writer');\n }\n if (newLocaTable === null) {\n throw new Error('Argument Null Exception : newLocaTableOut');\n }\n if (newGlyphTable === null) {\n throw new Error('Argument Null Exception : newGlyphTable');\n }\n var tableNames = this.tableNames;\n for (var i = 0; i < tableNames.length; i++) {\n var tableName = tableNames[i];\n var tableInfo = this.getTable(tableName);\n if (tableInfo.empty) {\n continue;\n }\n if (tableName === 'glyf') {\n writer.writeBytes(newGlyphTable);\n }\n else if (tableName === 'loca') {\n writer.writeBytes(newLocaTable);\n }\n else {\n var count = this.align(tableInfo.length);\n var buff = [];\n for (var i_1 = 0; i_1 < count; i_1++) {\n buff.push(0);\n }\n this.offset = tableInfo.offset;\n var result = this.read(buff, 0, tableInfo.length);\n writer.writeBytes(result.buffer);\n }\n }\n };\n //public methods\n /**\n * Sets position value of font data.\n */\n TtfReader.prototype.setOffset = function (offset) {\n this.offset = offset;\n };\n /**\n * Creates font Internals\n * @private\n */\n TtfReader.prototype.createInternals = function () {\n this.metrics = new TtfMetrics();\n var nameTable = this.readNameTable();\n var headTable = this.readHeadTable();\n this.bIsLocaShort = (headTable.indexToLocalFormat === 0);\n var horizontalHeadTable = this.readHorizontalHeaderTable();\n var os2Table = this.readOS2Table();\n var postTable = this.readPostTable();\n this.width = this.readWidthTable(horizontalHeadTable.numberOfHMetrics, headTable.unitsPerEm);\n var subTables = this.readCmapTable();\n this.initializeMetrics(nameTable, headTable, horizontalHeadTable, os2Table, postTable, subTables);\n };\n TtfReader.prototype.getGlyph = function (charCode) {\n if (typeof charCode === 'number') {\n var obj1 = null;\n if (!this.metrics.isSymbol && this.microsoftGlyphs != null) {\n if (this.microsoftGlyphs.containsKey(charCode)) {\n obj1 = this.microsoftGlyphs.getValue(charCode);\n }\n }\n else if (this.metrics.isSymbol && this.macintoshGlyphs != null) {\n if (this.macintoshGlyphs.containsKey(charCode)) {\n obj1 = this.macintoshGlyphs.getValue(charCode);\n }\n }\n var glyph = (obj1 != null) ? obj1 : this.getDefaultGlyph();\n return glyph;\n }\n else {\n var obj = null;\n var code = charCode.charCodeAt(0);\n if (!this.metrics.isSymbol && this.microsoft !== null) {\n if (this.microsoft.containsKey(code)) {\n obj = this.microsoft.getValue(code);\n if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = true;\n }\n }\n else if (code !== StringTokenizer.whiteSpace.charCodeAt(0)) {\n this.isFontPresent = false;\n }\n }\n else if (this.metrics.isSymbol && this.macintosh !== null || this.isMacTTF) {\n // NOTE: this code fixes char codes that extends 0x100. However, it might corrupt something.\n if (this.maxMacIndex !== 0) {\n code %= this.maxMacIndex + 1;\n }\n else {\n code = ((code & 0xff00) === 0xf000 ? code & 0xff : code);\n }\n if (this.macintosh.containsKey(code)) {\n obj = this.macintosh.getValue(code);\n this.isFontPresent = true;\n }\n }\n // Fix for StackOverFlow exception in XPS to PDF converter\n if (charCode === StringTokenizer.whiteSpace && obj === null) {\n obj = new TtfGlyphInfo();\n }\n var glyph = (obj !== null) ? obj : this.getDefaultGlyph();\n return glyph;\n }\n };\n /**\n * Gets hash table with chars indexed by glyph index.\n */\n TtfReader.prototype.getGlyphChars = function (chars) {\n if (chars === null || chars === undefined) {\n throw new Error('Argument Null Exception : chars');\n }\n var dictionary = new Dictionary();\n var charKeys = chars.keys();\n for (var i = 0; i < charKeys.length; i++) {\n var ch = charKeys[i];\n var glyph = this.getGlyph(ch);\n if (!glyph.empty) {\n dictionary.setValue(glyph.index, ch.charCodeAt(0));\n }\n }\n return dictionary;\n };\n /**\n * Gets all glyphs.\n */\n TtfReader.prototype.getAllGlyphs = function () {\n var allGlyphInfo = [];\n var info = new TtfGlyphInfo();\n var index = 0;\n for (var i = 0; i < this.width.length; i++) {\n var width = this.width[i];\n info.index = index;\n info.width = width;\n allGlyphInfo.push(info);\n index++;\n }\n return allGlyphInfo;\n };\n /**\n * Reads a font's program.\n * @private\n */\n TtfReader.prototype.readFontProgram = function (chars) {\n var glyphChars = this.getGlyphChars(chars);\n var locaTable = this.readLocaTable(this.bIsLocaShort);\n if (glyphChars.size() < chars.size()) {\n this.missedGlyphs = chars.size() - glyphChars.size();\n }\n this.updateGlyphChars(glyphChars, locaTable);\n /* tslint:disable */\n var result1 = this.generateGlyphTable(glyphChars, locaTable, null, null);\n /* tslint:enable */\n var glyphTableSize = result1.glyphTableSize;\n var newLocaTable = result1.newLocaTable;\n var newGlyphTable = result1.newGlyphTable;\n var result2 = this.updateLocaTable(newLocaTable, this.bIsLocaShort, null);\n var newLocaSize = result2.newLocaSize;\n var newLocaUpdated = result2.newLocaUpdated;\n var fontProgram = this.getFontProgram(newLocaUpdated, newGlyphTable, glyphTableSize, newLocaSize);\n return fontProgram;\n };\n /**\n * Reconverts string to be in proper format saved into PDF file.\n */\n TtfReader.prototype.convertString = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n var glyph = '';\n var i = 0;\n for (var k = 0; k < text.length; k++) {\n var ch = text[k];\n var glyphInfo = this.getGlyph(ch);\n if (!glyphInfo.empty) {\n glyph += String.fromCharCode(glyphInfo.index);\n i++;\n }\n }\n return glyph;\n };\n /**\n * Gets char width.\n */\n TtfReader.prototype.getCharWidth = function (code) {\n var glyphInfo = this.getGlyph(code);\n glyphInfo = (!glyphInfo.empty) ? glyphInfo : this.getDefaultGlyph();\n var codeWidth = (!glyphInfo.empty) ? glyphInfo.width : 0;\n return codeWidth;\n };\n TtfReader.prototype.readString = function (length, isUnicode) {\n if (isUnicode === undefined) {\n return this.readString(length, false);\n }\n else {\n //let buffer : number[] = this.readBytes(length);\n var result = '';\n if (isUnicode) {\n for (var i = 0; i < length; i++) {\n if (i % 2 !== 0) {\n result += String.fromCharCode(this.fontData[this.offset]);\n }\n this.offset += 1;\n }\n }\n else {\n for (var i = 0; i < length; i++) {\n result += String.fromCharCode(this.fontData[this.offset]);\n this.offset += 1;\n }\n }\n return result;\n }\n };\n TtfReader.prototype.readFixed = function (offset) {\n var integer = this.readInt16(offset);\n var sFraction = this.readInt16(offset + 2);\n var fraction = sFraction / 16384;\n return integer + fraction;\n };\n TtfReader.prototype.readInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return i1 + (i2 << 8) + (i3 << 16) + (i4 << 24);\n };\n TtfReader.prototype.readUInt32 = function (offset) {\n var i1 = this.fontData[offset + 3];\n var i2 = this.fontData[offset + 2];\n var i3 = this.fontData[offset + 1];\n var i4 = this.fontData[offset];\n this.offset += 4;\n return (i1 | i2 << 8 | i3 << 16 | i4 << 24);\n };\n // private readInt16(offset : number) : number {\n // let result : number = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n // this.offset += 2;\n // return result;\n // }\n TtfReader.prototype.readInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) + this.fontData[offset + 1];\n result = result & (1 << 15) ? result - 0x10000 : result;\n this.offset += 2;\n return result;\n };\n TtfReader.prototype.readInt64 = function (offset) {\n var low = this.readInt32(offset + 4);\n var n = this.readInt32(offset) * 4294967296.0 + low;\n if (low < 0) {\n n += 4294967296;\n }\n return n;\n };\n TtfReader.prototype.readUInt16 = function (offset) {\n var result = (this.fontData[offset] << 8) | this.fontData[offset + 1];\n this.offset += 2;\n return result;\n };\n /**\n * Reads ushort array.\n */\n TtfReader.prototype.readUshortArray = function (length) {\n var buffer = [];\n for (var i = 0; i < length; i++) {\n buffer[i] = this.readUInt16(this.offset);\n }\n return buffer;\n };\n TtfReader.prototype.readBytes = function (length) {\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(this.fontData[this.offset]);\n this.offset += 1;\n }\n return result;\n };\n TtfReader.prototype.readByte = function (offset) {\n var result = this.fontData[offset];\n this.offset += 1;\n return result;\n };\n /**\n * Reads bytes to array in BigEndian order.\n * @private\n */\n TtfReader.prototype.read = function (buffer, index, count) {\n if (buffer === null) {\n throw new Error('Argument Null Exception : buffer');\n }\n var written = 0;\n var read = 0;\n do {\n for (var i = 0; (i < count - written) && (this.offset + i < this.fontData.length); i++) {\n buffer[index + i] = this.fontData[this.offset + i];\n }\n read = count - written;\n this.offset += read;\n written += read;\n } while (written < count);\n return { buffer: buffer, written: written };\n };\n return TtfReader;\n}());\nexport { TtfReader };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfFont } from './pdf-font';\nimport { PdfSubSuperScript } from './enum';\nimport { PdfArray } from './../../primitives/pdf-array';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar PdfFontMetrics = /** @class */ (function () {\n function PdfFontMetrics() {\n /**\n * `Line gap`.\n * @private\n */\n this.lineGap = 0;\n }\n // Public methods\n /**\n * Returns `ascent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getAscent = function (format) {\n var returnValue = this.ascent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `descent` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getDescent = function (format) {\n var returnValue = this.descent * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `Line gap` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getLineGap = function (format) {\n var returnValue = this.lineGap * PdfFont.charSizeMultiplier * this.getSize(format);\n return returnValue;\n };\n /**\n * Returns `height` taking into consideration font`s size.\n * @private\n */\n PdfFontMetrics.prototype.getHeight = function (format) {\n var height;\n var clearTypeFonts = ['cambria', 'candara', 'constantia', 'corbel', 'cariadings'];\n var clearTypeFontCollection = [];\n for (var index = 0; index < clearTypeFonts.length; index++) {\n var font = clearTypeFonts[index];\n clearTypeFontCollection.push(font);\n }\n if (this.getDescent(format) < 0) {\n // if ((clearTypeFontCollection.indexOf(this.name.toLowerCase()) !== -1) && !this.isUnicodeFont) {\n // height = (this.GetAscent(format) - this.GetDescent(format) - this.GetLineGap(format));\n // } else {\n height = (this.getAscent(format) - this.getDescent(format) + this.getLineGap(format));\n // }\n }\n else {\n height = (this.getAscent(format) + this.getDescent(format) + this.getLineGap(format));\n }\n return height;\n };\n /**\n * Calculates `size` of the font depending on the subscript/superscript value.\n * @private\n */\n PdfFontMetrics.prototype.getSize = function (format) {\n var size = this.size;\n if (format != null) {\n switch (format.subSuperScript) {\n case PdfSubSuperScript.SubScript:\n size /= this.subScriptSizeFactor;\n break;\n case PdfSubSuperScript.SuperScript:\n size /= this.superscriptSizeFactor;\n break;\n }\n }\n return size;\n };\n /**\n * `Clones` the metrics.\n * @private\n */\n PdfFontMetrics.prototype.clone = function () {\n var metrics = this;\n metrics.widthTable = WidthTable.clone();\n return metrics;\n };\n Object.defineProperty(PdfFontMetrics.prototype, \"widthTable\", {\n // Properies\n /**\n * Gets or sets the `width table`.\n * @private\n */\n get: function () {\n return this.internalWidthTable;\n },\n set: function (value) {\n this.internalWidthTable = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfFontMetrics;\n}());\nexport { PdfFontMetrics };\nvar WidthTable = /** @class */ (function () {\n function WidthTable() {\n }\n /**\n * Static `clones` this instance of the WidthTable class.\n * @private\n */\n WidthTable.clone = function () {\n return null;\n };\n return WidthTable;\n}());\nexport { WidthTable };\nvar StandardWidthTable = /** @class */ (function (_super) {\n __extends(StandardWidthTable, _super);\n // Constructors\n /**\n * Initializes a new instance of the `StandardWidthTable` class.\n * @private\n */\n function StandardWidthTable(widths) {\n var _this = _super.call(this) || this;\n if (widths == null) {\n throw new Error('ArgumentNullException:widths');\n }\n _this.widths = widths;\n return _this;\n }\n //Properties\n /**\n * Gets the `32 bit number` at the specified index.\n * @private\n */\n StandardWidthTable.prototype.items = function (index) {\n if (index < 0 || index >= this.widths.length) {\n throw new Error('ArgumentOutOfRangeException:index, The character is not supported by the font.');\n }\n var result = this.widths[index];\n return result;\n };\n Object.defineProperty(StandardWidthTable.prototype, \"length\", {\n /**\n * Gets the `length` of the internal array.\n * @private\n */\n get: function () {\n return this.widths.length;\n },\n enumerable: true,\n configurable: true\n });\n //Overrides\n /**\n * `Clones` this instance of the WidthTable class.\n * @private\n */\n StandardWidthTable.prototype.clone = function () {\n var swt = this;\n swt.widths = this.widths;\n return swt;\n };\n /**\n * Converts width table to a `PDF array`.\n * @private\n */\n StandardWidthTable.prototype.toArray = function () {\n var arr = new PdfArray(this.widths);\n return arr;\n };\n return StandardWidthTable;\n}(WidthTable));\nexport { StandardWidthTable };\n","/**\n * TrueTypeFont.ts class for EJ2-PDF\n */\nimport { ByteArray } from './../../graphics/images/index';\nimport { TtfReader } from './ttf-reader';\nimport { PdfDictionary, SaveDescendantFontEventHandler, SaveFontDictionaryEventHandler } from './../../primitives/pdf-dictionary';\nimport { SaveFontProgramEventHandler, SaveCmapEventHandler } from './../../primitives/pdf-stream';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfString } from './../../primitives/pdf-string';\nimport { PdfReferenceHolder } from './../../primitives/pdf-reference';\nimport { PdfFontMetrics } from './pdf-font-metrics';\nimport { StandardWidthTable } from './pdf-font-metrics';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { Dictionary } from './../../collections/dictionary';\nimport { FontDescriptorFlags } from './enum';\nimport { RectangleF } from './../../drawing/pdf-drawing';\nimport { Operators } from './../../input-output/pdf-operators';\nvar UnicodeTrueTypeFont = /** @class */ (function () {\n /* tslint:enable */\n //Constructors\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n function UnicodeTrueTypeFont(base64String, size) {\n // Fields\n this.nameString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Indicates whether the font program is compressed or not.\n * @private\n */\n this.isCompress = false;\n /**\n * Indicates whether the font is embedded or not.\n */\n this.isEmbedFont = false;\n /**\n * Cmap table's start prefix.\n */\n /* tslint:disable */\n this.cmapPrefix = '/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap' + Operators.newLine + '/CIDSystemInfo << /Registry (Adobe)/Ordering (UCS)/Supplement 0>> def\\n/CMapName ' + '/Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange' + Operators.newLine;\n /* tslint:enable */\n /**\n * Cmap table's start suffix.\n */\n this.cmapEndCodespaceRange = 'endcodespacerange' + Operators.newLine;\n /**\n * Cmap's begin range marker.\n */\n this.cmapBeginRange = 'beginbfrange' + Operators.newLine;\n /**\n * Cmap's end range marker.\n */\n this.cmapEndRange = 'endbfrange' + Operators.newLine;\n /**\n * Cmap table's end\n */\n /* tslint:disable */\n this.cmapSuffix = 'endbfrange\\nendcmap\\nCMapName currentdict ' + '/CMap defineresource pop\\nend end' + Operators.newLine;\n if (base64String === null || base64String === undefined) {\n throw new Error('ArgumentNullException:base64String');\n }\n this.fontSize = size;\n this.fontString = base64String;\n this.Initialize();\n }\n //Implementation\n /**\n * Returns width of the char symbol.\n */\n UnicodeTrueTypeFont.prototype.getCharWidth = function (charCode) {\n var codeWidth = this.ttfReader.getCharWidth(charCode);\n return codeWidth;\n };\n /**\n * Returns width of the text line.\n */\n UnicodeTrueTypeFont.prototype.getLineWidth = function (line) {\n // if (line == null) {\n // throw new Error('ArgumentNullException : line');\n // }\n var width = 0;\n for (var i = 0, len = line.length; i < len; i++) {\n var ch = line[i];\n var charWidth = this.getCharWidth(ch);\n width += charWidth;\n }\n return width;\n };\n /**\n * Initializes a new instance of the `PdfTrueTypeFont` class.\n * @private\n */\n UnicodeTrueTypeFont.prototype.Initialize = function () {\n var byteArray = new ByteArray(this.fontString.length);\n byteArray.writeFromBase64String(this.fontString);\n this.fontData = byteArray.internalBuffer;\n this.ttfReader = new TtfReader(this.fontData);\n this.ttfMetrics = this.ttfReader.metrics;\n };\n UnicodeTrueTypeFont.prototype.createInternals = function () {\n this.fontDictionary = new PdfDictionary();\n this.fontProgram = new PdfStream();\n this.cmap = new PdfStream();\n this.descendantFont = new PdfDictionary();\n this.metrics = new PdfFontMetrics();\n this.ttfReader.createInternals();\n this.ttfMetrics = this.ttfReader.metrics;\n this.initializeMetrics();\n // Create all the dictionaries of the font.\n this.subsetName = this.getFontName();\n this.createDescendantFont();\n this.createCmap();\n this.createFontDictionary();\n this.createFontProgram();\n };\n UnicodeTrueTypeFont.prototype.getInternals = function () {\n return this.fontDictionary;\n };\n /**\n * Initializes metrics.\n */\n UnicodeTrueTypeFont.prototype.initializeMetrics = function () {\n var ttfMetrics = this.ttfReader.metrics;\n this.metrics.ascent = ttfMetrics.macAscent;\n this.metrics.descent = ttfMetrics.macDescent;\n this.metrics.height = ttfMetrics.macAscent - ttfMetrics.macDescent + ttfMetrics.lineGap;\n this.metrics.name = ttfMetrics.fontFamily;\n this.metrics.postScriptName = ttfMetrics.postScriptName;\n this.metrics.size = this.fontSize;\n this.metrics.widthTable = new StandardWidthTable(ttfMetrics.widthTable);\n this.metrics.lineGap = ttfMetrics.lineGap;\n this.metrics.subScriptSizeFactor = ttfMetrics.subScriptSizeFactor;\n this.metrics.superscriptSizeFactor = ttfMetrics.superscriptSizeFactor;\n this.metrics.isBold = ttfMetrics.isBold;\n };\n /**\n * Gets random string.\n */\n UnicodeTrueTypeFont.prototype.getFontName = function () {\n var builder = '';\n var name;\n // if (this.isEmbed === false) {\n for (var i = 0; i < 6; i++) {\n var index = Math.floor(Math.random() * (25 - 0 + 1)) + 0;\n builder += this.nameString[index];\n }\n builder += '+';\n // }\n builder += this.ttfReader.metrics.postScriptName;\n name = builder.toString();\n // if (name === '') {\n // name = this.ttfReader.metrics.fontFamily;\n // }\n name = this.formatName(name);\n return name;\n };\n /**\n * Generates name of the font.\n */\n UnicodeTrueTypeFont.prototype.formatName = function (fontName) {\n // if (fontName === null) {\n // throw new Error('ArgumentNullException : fontName');\n // }\n // if (fontName === '') {\n // throw new Error('ArgumentOutOfRangeException : fontName, Parameter can not be empty');\n // }\n var ret = fontName.replace('(', '#28');\n ret = ret.replace(')', '#29');\n ret = ret.replace('[', '#5B');\n ret = ret.replace(']', '#5D');\n ret = ret.replace('<', '#3C');\n ret = ret.replace('>', '#3E');\n ret = ret.replace('{', '#7B');\n ret = ret.replace('}', '#7D');\n ret = ret.replace('/', '#2F');\n ret = ret.replace('%', '#25');\n return ret.replace(' ', '#20');\n };\n /**\n * Creates descendant font.\n */\n UnicodeTrueTypeFont.prototype.createDescendantFont = function () {\n // Set property used to clone Font every time\n this.descendantFont.isResource = true;\n this.descendantFont.descendantFontBeginSave = new SaveDescendantFontEventHandler(this);\n this.descendantFont.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.descendantFont.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.cIDFontType2));\n this.descendantFont.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDToGIDMap, new PdfName(this.dictionaryProperties.identity));\n this.descendantFont.items.setValue(this.dictionaryProperties.dw, new PdfNumber(1000));\n this.fontDescriptor = this.createFontDescriptor();\n this.descendantFont.items.setValue(this.dictionaryProperties.fontDescriptor, new PdfReferenceHolder(this.fontDescriptor));\n var systemInfo = this.createSystemInfo();\n this.descendantFont.items.setValue(this.dictionaryProperties.cIDSystemInfo, systemInfo);\n };\n /**\n * Creates font descriptor.\n */\n UnicodeTrueTypeFont.prototype.createFontDescriptor = function () {\n var descriptor = new PdfDictionary();\n var metrics = this.ttfReader.metrics;\n // Set property used to clone Font every time\n descriptor.isResource = true;\n descriptor.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.fontDescriptor));\n descriptor.items.setValue(this.dictionaryProperties.fontName, new PdfName(this.subsetName));\n descriptor.items.setValue(this.dictionaryProperties.flags, new PdfNumber(this.getDescriptorFlags()));\n descriptor.items.setValue(this.dictionaryProperties.fontBBox, PdfArray.fromRectangle(this.getBoundBox()));\n descriptor.items.setValue(this.dictionaryProperties.missingWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.stemV, new PdfNumber(metrics.stemV));\n descriptor.items.setValue(this.dictionaryProperties.italicAngle, new PdfNumber(metrics.italicAngle));\n descriptor.items.setValue(this.dictionaryProperties.capHeight, new PdfNumber(metrics.capHeight));\n descriptor.items.setValue(this.dictionaryProperties.ascent, new PdfNumber(metrics.winAscent));\n descriptor.items.setValue(this.dictionaryProperties.descent, new PdfNumber(metrics.winDescent));\n descriptor.items.setValue(this.dictionaryProperties.leading, new PdfNumber(metrics.leading));\n descriptor.items.setValue(this.dictionaryProperties.avgWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.fontFile2, new PdfReferenceHolder(this.fontProgram));\n descriptor.items.setValue(this.dictionaryProperties.maxWidth, new PdfNumber(metrics.widthTable[32]));\n descriptor.items.setValue(this.dictionaryProperties.xHeight, new PdfNumber(0));\n descriptor.items.setValue(this.dictionaryProperties.stemH, new PdfNumber(0));\n return descriptor;\n };\n /**\n * Generates cmap.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createCmap = function () {\n this.cmap.cmapBeginSave = new SaveCmapEventHandler(this);\n };\n /**\n * Generates font dictionary.\n */\n UnicodeTrueTypeFont.prototype.createFontDictionary = function () {\n // Set property used to clone Font every time\n this.fontDictionary.isResource = true;\n this.fontDictionary.fontDictionaryBeginSave = new SaveFontDictionaryEventHandler(this);\n this.fontDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n this.fontDictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.subsetName));\n this.fontDictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type0));\n this.fontDictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(this.dictionaryProperties.identityH));\n var descFonts = new PdfArray();\n var reference = new PdfReferenceHolder(this.descendantFont);\n // Set property used to clone Font every time\n descFonts.isFont = true;\n descFonts.add(reference);\n this.fontDictionary.items.setValue(this.dictionaryProperties.descendantFonts, descFonts);\n };\n /**\n * Creates font program.\n */\n UnicodeTrueTypeFont.prototype.createFontProgram = function () {\n this.fontProgram.fontProgramBeginSave = new SaveFontProgramEventHandler(this);\n };\n /**\n * Creates system info dictionary for CID font.\n * @private\n */\n UnicodeTrueTypeFont.prototype.createSystemInfo = function () {\n var systemInfo = new PdfDictionary();\n systemInfo.items.setValue(this.dictionaryProperties.registry, new PdfString('Adobe'));\n systemInfo.items.setValue(this.dictionaryProperties.ordering, new PdfString(this.dictionaryProperties.identity));\n systemInfo.items.setValue(this.dictionaryProperties.supplement, new PdfNumber(0));\n return systemInfo;\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.descendantFontBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var width = this.getDescendantWidth();\n if (width !== null) {\n this.descendantFont.items.setValue(this.dictionaryProperties.w, width);\n }\n }\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n UnicodeTrueTypeFont.prototype.cmapBeginSave = function () {\n this.generateCmap();\n };\n /**\n * Runs before font Dictionary will be saved.\n */\n /* tslint:disable */\n UnicodeTrueTypeFont.prototype.fontDictionaryBeginSave = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0 && !this.fontDictionary.containsKey(this.dictionaryProperties.toUnicode)) {\n this.fontDictionary.items.setValue(this.dictionaryProperties.toUnicode, new PdfReferenceHolder(this.cmap));\n }\n };\n /* tslint:enable */\n /**\n * Runs before font program stream save.\n */\n UnicodeTrueTypeFont.prototype.fontProgramBeginSave = function () {\n this.isCompress = true;\n this.generateFontProgram();\n };\n /**\n * Gets width description pad array for c i d font.\n */\n UnicodeTrueTypeFont.prototype.getDescendantWidth = function () {\n var array = new PdfArray();\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphInfo = [];\n // if (!this.isEmbedFont) {\n var keys = this.usedChars.keys();\n for (var i = 0; i < keys.length; i++) {\n var chLen = keys[i];\n var glyph = this.ttfReader.getGlyph(chLen);\n if (glyph.empty) {\n continue;\n }\n glyphInfo.push(glyph);\n }\n // } else {\n // glyphInfo = this.ttfReader.getAllGlyphs();\n // }\n glyphInfo.sort(function (a, b) { return a.index - b.index; });\n var firstGlyphIndex = 0;\n var lastGlyphIndex = 0;\n var firstGlyphIndexWasSet = false;\n var widthDetails = new PdfArray();\n // if (!this.isEmbedFont) {\n for (var i = 0; i < glyphInfo.length; i++) {\n var glyph = glyphInfo[i];\n if (!firstGlyphIndexWasSet) {\n firstGlyphIndexWasSet = true;\n firstGlyphIndex = glyph.index;\n lastGlyphIndex = glyph.index - 1;\n }\n if ((lastGlyphIndex + 1 !== glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // Add glyph index / width.\n array.add(new PdfNumber(firstGlyphIndex));\n if (i !== 0) {\n array.add(widthDetails);\n }\n firstGlyphIndex = glyph.index;\n widthDetails = new PdfArray();\n }\n widthDetails.add(new PdfNumber(glyph.width));\n if (i + 1 === glyphInfo.length) {\n array.add(new PdfNumber(firstGlyphIndex));\n array.add(widthDetails);\n }\n lastGlyphIndex = glyph.index;\n }\n // } else {\n // for (let i : number = 0; i < glyphInfo.length; i++) {\n // let glyph : TtfGlyphInfo = glyphInfo[i];\n // if (!firstGlyphIndexWasSet) {\n // firstGlyphIndexWasSet = true;\n // lastGlyphIndex = glyph.index - 1;\n // }\n // firstGlyphIndex = glyph.index;\n // if ((lastGlyphIndex + 1 === glyph.index || (i + 1 === glyphInfo.length)) && glyphInfo.length > 1) {\n // // Add glyph index / width.\n // widthDetails.add(new PdfNumber(glyph.width));\n // array.add(new PdfNumber(firstGlyphIndex));\n // array.add(widthDetails);\n // widthDetails = new PdfArray();\n // }\n // lastGlyphIndex = glyph.index;\n // }\n // }\n }\n return array;\n };\n /**\n * Creates cmap.\n */\n UnicodeTrueTypeFont.prototype.generateCmap = function () {\n if (this.usedChars !== null && this.usedChars !== undefined && this.usedChars.size() > 0) {\n var glyphChars = this.ttfReader.getGlyphChars(this.usedChars);\n if (glyphChars.size() > 0) {\n var keys = glyphChars.keys().sort();\n // add first and last glyph indexes\n var first = keys[0];\n var last = keys[keys.length - 1];\n var middlePart = this.toHexString(first, false) + this.toHexString(last, false) + Operators.newLine;\n var builder = '';\n builder += this.cmapPrefix;\n builder += middlePart;\n builder += this.cmapEndCodespaceRange;\n var nextRange = 0;\n for (var i = 0; i < keys.length; i++) {\n if (nextRange === 0) {\n if (i !== 0) {\n builder += this.cmapEndRange;\n }\n nextRange = Math.min(100, keys.length - i);\n builder += nextRange;\n builder += Operators.whiteSpace;\n builder += this.cmapBeginRange;\n }\n nextRange -= 1;\n var key = keys[i];\n /* tslint:disable */\n builder += this.toHexString(key, true) + this.toHexString(key, true) + this.toHexString(glyphChars.getValue(key), true) + '\\n';\n /* tslint:enable */\n }\n builder += this.cmapSuffix;\n this.cmap.clearStream();\n this.cmap.isResource = true;\n this.cmap.write(builder);\n }\n }\n };\n /**\n * Generates font program.\n */\n UnicodeTrueTypeFont.prototype.generateFontProgram = function () {\n var fontProgram = null;\n this.usedChars = (this.usedChars === null || this.usedChars === undefined) ? new Dictionary() : this.usedChars;\n this.ttfReader.setOffset(0);\n fontProgram = this.ttfReader.readFontProgram(this.usedChars);\n this.fontProgram.clearStream();\n this.fontProgram.isResource = true;\n this.fontProgram.writeBytes(fontProgram);\n };\n /**\n * Calculates flags for the font descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getDescriptorFlags = function () {\n var flags = 0;\n var metrics = this.ttfReader.metrics;\n if (metrics.isFixedPitch) {\n flags |= FontDescriptorFlags.FixedPitch;\n }\n if (metrics.isSymbol) {\n flags |= FontDescriptorFlags.Symbolic;\n }\n else {\n flags |= FontDescriptorFlags.Nonsymbolic;\n }\n if (metrics.isItalic) {\n flags |= FontDescriptorFlags.Italic;\n }\n if (metrics.isBold) {\n flags |= FontDescriptorFlags.ForceBold;\n }\n return flags;\n };\n /**\n * Calculates BoundBox of the descriptor.\n * @private\n */\n UnicodeTrueTypeFont.prototype.getBoundBox = function () {\n var rect = this.ttfReader.metrics.fontBox;\n var width = Math.abs(rect.right - rect.left);\n var height = Math.abs(rect.top - rect.bottom);\n var rectangle = new RectangleF(rect.left, rect.bottom, width, height);\n return rectangle;\n };\n /**\n * Converts integer of decimal system to hex integer.\n */\n UnicodeTrueTypeFont.prototype.toHexString = function (n, isCaseChange) {\n var s = n.toString(16);\n if (isCaseChange) {\n s = s.toUpperCase();\n }\n return '<0000'.substring(0, 5 - s.length) + s + '>';\n };\n /**\n * Stores used symbols.\n */\n UnicodeTrueTypeFont.prototype.setSymbols = function (text) {\n if (text === null) {\n throw new Error('Argument Null Exception : text');\n }\n if (this.usedChars === null || this.usedChars === undefined) {\n this.usedChars = new Dictionary();\n }\n for (var i = 0; i < text.length; i++) {\n var ch = text[i];\n this.usedChars.setValue(ch, String.fromCharCode(0));\n }\n // else {\n // if (text === null) {\n // throw new Error('Argument Null Exception : glyphs');\n // }\n // if (this.usedChars === null || this.usedChars === undefined) {\n // this.usedChars = new Dictionary();\n // }\n // for (let i : number = 0; i < text.length; i++) {\n // let glyphIndex : number = text[i];\n // let glyph : TtfGlyphInfo = this.ttfReader.getGlyph(glyphIndex);\n // if (!glyph == null) {\n // let c : string = glyph.charCode.toLocaleString();\n // this.usedChars.setValue(c, String.fromCharCode(0));\n // }\n // }\n // }\n if (this.isEmbedFont === false) {\n this.getDescendantWidth();\n }\n };\n return UnicodeTrueTypeFont;\n}());\nexport { UnicodeTrueTypeFont };\n","/**\n * ArabicShapeRenderer.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../../../collections/dictionary';\nvar ArabicShapeRenderer = /** @class */ (function () {\n //#endregion\n //#region Constructor\n function ArabicShapeRenderer() {\n //#region Constants\n this.arabicCharTable = [['\\u0621', '\\uFE80'], ['\\u0622', '\\uFE81', '\\uFE82'],\n ['\\u0623', '\\uFE83', '\\uFE84'],\n ['\\u0624', '\\uFE85', '\\uFE86'],\n ['\\u0625', '\\uFE87', '\\uFE88'],\n ['\\u0626', '\\uFE89', '\\uFE8A', '\\uFE8B', '\\uFE8C'],\n ['\\u0627', '\\uFE8D', '\\uFE8E'],\n ['\\u0628', '\\uFE8F', '\\uFE90', '\\uFE91', '\\uFE92'],\n ['\\u0629', '\\uFE93', '\\uFE94'],\n ['\\u062A', '\\uFE95', '\\uFE96', '\\uFE97', '\\uFE98'],\n ['\\u062B', '\\uFE99', '\\uFE9A', '\\uFE9B', '\\uFE9C'],\n ['\\u062C', '\\uFE9D', '\\uFE9E', '\\uFE9F', '\\uFEA0'],\n ['\\u062D', '\\uFEA1', '\\uFEA2', '\\uFEA3', '\\uFEA4'],\n ['\\u062E', '\\uFEA5', '\\uFEA6', '\\uFEA7', '\\uFEA8'],\n ['\\u062F', '\\uFEA9', '\\uFEAA'],\n ['\\u0630', '\\uFEAB', '\\uFEAC'],\n ['\\u0631', '\\uFEAD', '\\uFEAE'],\n ['\\u0632', '\\uFEAF', '\\uFEB0'],\n ['\\u0633', '\\uFEB1', '\\uFEB2', '\\uFEB3', '\\uFEB4'],\n ['\\u0634', '\\uFEB5', '\\uFEB6', '\\uFEB7', '\\uFEB8'],\n ['\\u0635', '\\uFEB9', '\\uFEBA', '\\uFEBB', '\\uFEBC'],\n ['\\u0636', '\\uFEBD', '\\uFEBE', '\\uFEBF', '\\uFEC0'],\n ['\\u0637', '\\uFEC1', '\\uFEC2', '\\uFEC3', '\\uFEC4'],\n ['\\u0638', '\\uFEC5', '\\uFEC6', '\\uFEC7', '\\uFEC8'],\n ['\\u0639', '\\uFEC9', '\\uFECA', '\\uFECB', '\\uFECC'],\n ['\\u063A', '\\uFECD', '\\uFECE', '\\uFECF', '\\uFED0'],\n ['\\u0640', '\\u0640', '\\u0640', '\\u0640', '\\u0640'],\n ['\\u0641', '\\uFED1', '\\uFED2', '\\uFED3', '\\uFED4'],\n ['\\u0642', '\\uFED5', '\\uFED6', '\\uFED7', '\\uFED8'],\n ['\\u0643', '\\uFED9', '\\uFEDA', '\\uFEDB', '\\uFEDC'],\n ['\\u0644', '\\uFEDD', '\\uFEDE', '\\uFEDF', '\\uFEE0'],\n ['\\u0645', '\\uFEE1', '\\uFEE2', '\\uFEE3', '\\uFEE4'],\n ['\\u0646', '\\uFEE5', '\\uFEE6', '\\uFEE7', '\\uFEE8'],\n ['\\u0647', '\\uFEE9', '\\uFEEA', '\\uFEEB', '\\uFEEC'],\n ['\\u0648', '\\uFEED', '\\uFEEE'],\n ['\\u0649', '\\uFEEF', '\\uFEF0', '\\uFBE8', '\\uFBE9'],\n ['\\u064A', '\\uFEF1', '\\uFEF2', '\\uFEF3', '\\uFEF4'],\n ['\\u0671', '\\uFB50', '\\uFB51'],\n ['\\u0679', '\\uFB66', '\\uFB67', '\\uFB68', '\\uFB69'],\n ['\\u067A', '\\uFB5E', '\\uFB5F', '\\uFB60', '\\uFB61'],\n ['\\u067B', '\\uFB52', '\\uFB53', '\\uFB54', '\\uFB55'],\n ['\\u067E', '\\uFB56', '\\uFB57', '\\uFB58', '\\uFB59'],\n ['\\u067F', '\\uFB62', '\\uFB63', '\\uFB64', '\\uFB65'],\n ['\\u0680', '\\uFB5A', '\\uFB5B', '\\uFB5C', '\\uFB5D'],\n ['\\u0683', '\\uFB76', '\\uFB77', '\\uFB78', '\\uFB79'],\n ['\\u0684', '\\uFB72', '\\uFB73', '\\uFB74', '\\uFB75'],\n ['\\u0686', '\\uFB7A', '\\uFB7B', '\\uFB7C', '\\uFB7D'],\n ['\\u0687', '\\uFB7E', '\\uFB7F', '\\uFB80', '\\uFB81'],\n ['\\u0688', '\\uFB88', '\\uFB89'],\n ['\\u068C', '\\uFB84', '\\uFB85'],\n ['\\u068D', '\\uFB82', '\\uFB83'],\n ['\\u068E', '\\uFB86', '\\uFB87'],\n ['\\u0691', '\\uFB8C', '\\uFB8D'],\n ['\\u0698', '\\uFB8A', '\\uFB8B'],\n ['\\u06A4', '\\uFB6A', '\\uFB6B', '\\uFB6C', '\\uFB6D'],\n ['\\u06A6', '\\uFB6E', '\\uFB6F', '\\uFB70', '\\uFB71'],\n ['\\u06A9', '\\uFB8E', '\\uFB8F', '\\uFB90', '\\uFB91'],\n ['\\u06AD', '\\uFBD3', '\\uFBD4', '\\uFBD5', '\\uFBD6'],\n ['\\u06AF', '\\uFB92', '\\uFB93', '\\uFB94', '\\uFB95'],\n ['\\u06B1', '\\uFB9A', '\\uFB9B', '\\uFB9C', '\\uFB9D'],\n ['\\u06B3', '\\uFB96', '\\uFB97', '\\uFB98', '\\uFB99'],\n ['\\u06BA', '\\uFB9E', '\\uFB9F'],\n ['\\u06BB', '\\uFBA0', '\\uFBA1', '\\uFBA2', '\\uFBA3'],\n ['\\u06BE', '\\uFBAA', '\\uFBAB', '\\uFBAC', '\\uFBAD'],\n ['\\u06C0', '\\uFBA4', '\\uFBA5'],\n ['\\u06C1', '\\uFBA6', '\\uFBA7', '\\uFBA8', '\\uFBA9'],\n ['\\u06C5', '\\uFBE0', '\\uFBE1'],\n ['\\u06C6', '\\uFBD9', '\\uFBDA'],\n ['\\u06C7', '\\uFBD7', '\\uFBD8'],\n ['\\u06C8', '\\uFBDB', '\\uFBDC'],\n ['\\u06C9', '\\uFBE2', '\\uFBE3'],\n ['\\u06CB', '\\uFBDE', '\\uFBDF'],\n ['\\u06CC', '\\uFBFC', '\\uFBFD', '\\uFBFE', '\\uFBFF'],\n ['\\u06D0', '\\uFBE4', '\\uFBE5', '\\uFBE6', '\\uFBE7'],\n ['\\u06D2', '\\uFBAE', '\\uFBAF'],\n ['\\u06D3', '\\uFBB0', '\\uFBB1']\n ];\n this.alef = '\\u0627';\n this.alefHamza = '\\u0623';\n this.alefHamzaBelow = '\\u0625';\n this.alefMadda = '\\u0622';\n this.lam = '\\u0644';\n this.hamza = '\\u0621';\n this.zeroWidthJoiner = '\\u200D';\n this.hamzaAbove = '\\u0654';\n this.hamzaBelow = '\\u0655';\n this.wawHamza = '\\u0624';\n this.yehHamza = '\\u0626';\n this.waw = '\\u0648';\n this.alefMaksura = '\\u0649';\n this.yeh = '\\u064A';\n this.farsiYeh = '\\u06CC';\n this.shadda = '\\u0651';\n this.madda = '\\u0653';\n this.lwa = '\\uFEFB';\n this.lwawh = '\\uFEF7';\n this.lwawhb = '\\uFEF9';\n this.lwawm = '\\uFEF5';\n this.bwhb = '\\u06D3';\n this.fathatan = '\\u064B';\n this.superScriptalef = '\\u0670';\n this.vowel = 0x1;\n // #endregion\n //#region Fields\n this.arabicMapTable = new Dictionary();\n for (var i = 0; i < this.arabicCharTable.length; i++) {\n this.arabicMapTable.setValue(this.arabicCharTable[i][0], this.arabicCharTable[i]);\n }\n }\n //#endregion\n //#region implementation\n ArabicShapeRenderer.prototype.getCharacterShape = function (input, index) {\n if ((input >= this.hamza) && (input <= this.bwhb)) {\n var value = [];\n if (this.arabicMapTable.getValue(input)) {\n value = this.arabicMapTable.getValue(input);\n return value[index + 1];\n }\n }\n else if (input >= this.lwawm && input <= this.lwa) {\n return (input);\n }\n return input;\n };\n ArabicShapeRenderer.prototype.shape = function (text, level) {\n var builder = '';\n var str2 = '';\n for (var i = 0; i < text.length; i++) {\n var c = text[i];\n if (c >= '؀' && c <= 'ۿ') {\n //if(c>= 0x0600.toString() && c<= 0x06FF.toString()) {\n str2 = str2 + c;\n }\n else {\n if (str2.length > 0) {\n var st = this.doShape(str2.toString(), 0);\n builder = builder + st;\n str2 = '';\n }\n builder = builder + c;\n }\n }\n if (str2.length > 0) {\n var st = this.doShape(str2.toString(), 0);\n builder = builder + st;\n }\n return builder.toString();\n };\n ArabicShapeRenderer.prototype.doShape = function (input, level) {\n var str = '';\n var ligature = 0;\n var len = 0;\n var i = 0;\n var next = '';\n var previous = new ArabicShape();\n var present = new ArabicShape();\n while (i < input.length) {\n next = input[i++];\n ligature = this.ligature(next, present);\n if (ligature === 0) {\n var shapeCount = this.getShapeCount(next);\n len = (shapeCount === 1) ? 0 : 2;\n if (previous.Shapes > 2) {\n len += 1;\n }\n len = len % (present.Shapes);\n present.Value = this.getCharacterShape(present.Value, len);\n str = this.append(str, previous, level);\n previous = present;\n present = new ArabicShape();\n present.Value = next;\n present.Shapes = shapeCount;\n present.Ligature++;\n }\n }\n len = (previous.Shapes > 2) ? 1 : 0;\n len = len % (present.Shapes);\n present.Value = this.getCharacterShape(present.Value, len);\n str = this.append(str, previous, level);\n str = this.append(str, present, level);\n return str.toString();\n };\n ArabicShapeRenderer.prototype.append = function (builder, shape, level) {\n if (shape.Value !== '') {\n builder = builder + shape.Value;\n shape.Ligature -= 1;\n if (shape.Type !== '') {\n if ((level & this.vowel) === 0) {\n builder = builder + shape.Type;\n shape.Ligature -= 1;\n }\n else {\n shape.Ligature -= 1;\n }\n }\n if (shape.vowel !== '') {\n if ((level & this.vowel) === 0) {\n builder = builder + shape.vowel;\n shape.Ligature -= 1;\n }\n else {\n shape.Ligature -= 1;\n }\n }\n }\n return builder;\n };\n ArabicShapeRenderer.prototype.ligature = function (value, shape) {\n if (shape.Value !== '') {\n var result = 0;\n if ((value >= this.fathatan && value <= this.hamzaBelow) || value === this.superScriptalef) {\n result = 1;\n if ((shape.vowel !== '') && (value !== this.shadda)) {\n result = 2;\n }\n if (value === this.shadda) {\n if (shape.Type == null) {\n shape.Type = this.shadda;\n }\n else {\n return 0;\n }\n }\n else if (value === this.hamzaBelow) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefHamzaBelow;\n result = 2;\n }\n else if (value === this.lwa) {\n shape.Value = this.lwawhb;\n result = 2;\n }\n else {\n shape.Type = this.hamzaBelow;\n }\n }\n else if (value === this.hamzaAbove) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefHamza;\n result = 2;\n }\n else if (shape.Value === this.lwa) {\n shape.Value = this.lwawh;\n result = 2;\n }\n else if (shape.Value === this.waw) {\n shape.Value = this.wawHamza;\n result = 2;\n }\n else if (shape.Value === this.yeh || shape.Value === this.alefMaksura || shape.Value === this.farsiYeh) {\n shape.Value = this.yehHamza;\n result = 2;\n }\n else {\n shape.Type = this.hamzaAbove;\n }\n }\n else if (value === this.madda) {\n if (shape.Value === this.alef) {\n shape.Value = this.alefMadda;\n result = 2;\n }\n }\n else {\n shape.vowel = value;\n }\n if (result === 1) {\n shape.Ligature++;\n }\n return result;\n }\n if (shape.vowel !== '') {\n return 0;\n }\n if (shape.Value === this.lam) {\n if (value === this.alef) {\n shape.Value = this.lwa;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefHamza) {\n shape.Value = this.lwawh;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefHamzaBelow) {\n shape.Value = this.lwawhb;\n shape.Shapes = 2;\n result = 3;\n }\n else if (value === this.alefMadda) {\n shape.Value = this.lwawm;\n shape.Shapes = 2;\n result = 3;\n }\n }\n // else if (shape.Value === '') {\n // shape.Value = value;\n // shape.Shapes = this.getShapeCount(value);\n // result = 1;\n // }\n return result;\n }\n else {\n return 0;\n }\n };\n ArabicShapeRenderer.prototype.getShapeCount = function (shape) {\n if ((shape >= this.hamza) && (shape <= this.bwhb) && !((shape >= this.fathatan && shape <= this.hamzaBelow)\n || shape === this.superScriptalef)) {\n var c = [];\n if (this.arabicMapTable.getValue(shape)) {\n c = this.arabicMapTable.getValue(shape);\n return c.length - 1;\n }\n }\n else if (shape === this.zeroWidthJoiner) {\n return 4;\n }\n return 1;\n };\n return ArabicShapeRenderer;\n}());\nexport { ArabicShapeRenderer };\n//#endregion\n//#region Internals\nvar ArabicShape = /** @class */ (function () {\n function ArabicShape() {\n //#region Fields\n this.shapeValue = '';\n this.shapeType = '';\n this.shapeVowel = '';\n this.shapeLigature = 0;\n this.shapeShapes = 1;\n //#endregion\n }\n Object.defineProperty(ArabicShape.prototype, \"Value\", {\n //#endregion\n //#region Properties \n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeValue;\n },\n set: function (value) {\n this.shapeValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Type\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeType;\n },\n set: function (value) {\n this.shapeType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"vowel\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeVowel;\n },\n set: function (value) {\n this.shapeVowel = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Ligature\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeLigature;\n },\n set: function (value) {\n this.shapeLigature = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ArabicShape.prototype, \"Shapes\", {\n /**\n * Gets or sets the values.\n * @private\n */\n get: function () {\n return this.shapeShapes;\n },\n set: function (value) {\n this.shapeShapes = value;\n },\n enumerable: true,\n configurable: true\n });\n return ArabicShape;\n}());\nexport { ArabicShape };\n//#endregion\n","/**\n * Bidi.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../../../collections/dictionary';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar Bidi = /** @class */ (function () {\n //#endregion\n //#region Constructor\n function Bidi() {\n //#region Fields\n this.indexes = [];\n this.indexLevels = [];\n this.mirroringShapeCharacters = new Dictionary();\n this.update();\n }\n //#endregion\n //#region implementation\n Bidi.prototype.doMirrorShaping = function (text) {\n var result = [];\n for (var i = 0; i < text.length; i++) {\n if (((this.indexLevels[i] & 1) === 1) && this.mirroringShapeCharacters.containsKey(text[i].charCodeAt(0))) {\n result[i] = String.fromCharCode(this.mirroringShapeCharacters.getValue(text[i].charCodeAt(0)));\n }\n else {\n result[i] = text[i].toString();\n }\n }\n var res = '';\n for (var j = 0; j < result.length; j++) {\n res = res + result[j];\n }\n return res;\n };\n Bidi.prototype.getLogicalToVisualString = function (inputText, isRtl) {\n var rtlCharacters = new RtlCharacters();\n this.indexLevels = rtlCharacters.getVisualOrder(inputText, isRtl);\n this.setDefaultIndexLevel();\n this.doOrder(0, this.indexLevels.length - 1);\n var text = this.doMirrorShaping(inputText);\n //let text : string = inputText;\n var resultBuilder = '';\n for (var i = 0; i < this.indexes.length; i++) {\n var index = this.indexes[i];\n resultBuilder += text[index];\n }\n return resultBuilder.toString();\n };\n Bidi.prototype.setDefaultIndexLevel = function () {\n for (var i = 0; i < this.indexLevels.length; i++) {\n this.indexes[i] = i;\n }\n };\n Bidi.prototype.doOrder = function (sIndex, eIndex) {\n var max = this.indexLevels[sIndex];\n var min = max;\n var odd = max;\n var even = max;\n for (var i = sIndex + 1; i <= eIndex; ++i) {\n var data = this.indexLevels[i];\n if (data > max) {\n max = data;\n }\n else if (data < min) {\n min = data;\n }\n odd &= data;\n even |= data;\n }\n if ((even & 1) === 0) {\n return;\n }\n if ((odd & 1) === 1) {\n this.reArrange(sIndex, eIndex + 1);\n return;\n }\n min |= 1;\n while (max >= min) {\n var pstart = sIndex;\n /*tslint:disable:no-constant-condition */\n while (true) {\n while (pstart <= eIndex) {\n if (this.indexLevels[pstart] >= max) {\n break;\n }\n pstart += 1;\n }\n if (pstart > eIndex) {\n break;\n }\n var pend = pstart + 1;\n while (pend <= eIndex) {\n if (this.indexLevels[pend] < max) {\n break;\n }\n pend += 1;\n }\n this.reArrange(pstart, pend);\n pstart = pend + 1;\n }\n max -= 1;\n }\n };\n Bidi.prototype.reArrange = function (i, j) {\n var length = (i + j) / 2;\n --j;\n for (; i < length; ++i, --j) {\n var temp = this.indexes[i];\n this.indexes[i] = this.indexes[j];\n this.indexes[j] = temp;\n }\n };\n Bidi.prototype.update = function () {\n this.mirroringShapeCharacters.setValue(40, 41);\n this.mirroringShapeCharacters.setValue(41, 40);\n this.mirroringShapeCharacters.setValue(60, 62);\n this.mirroringShapeCharacters.setValue(62, 60);\n this.mirroringShapeCharacters.setValue(91, 93);\n this.mirroringShapeCharacters.setValue(93, 91);\n this.mirroringShapeCharacters.setValue(123, 125);\n this.mirroringShapeCharacters.setValue(125, 123);\n this.mirroringShapeCharacters.setValue(171, 187);\n this.mirroringShapeCharacters.setValue(187, 171);\n this.mirroringShapeCharacters.setValue(8249, 8250);\n this.mirroringShapeCharacters.setValue(8250, 8249);\n this.mirroringShapeCharacters.setValue(8261, 8262);\n this.mirroringShapeCharacters.setValue(8262, 8261);\n this.mirroringShapeCharacters.setValue(8317, 8318);\n this.mirroringShapeCharacters.setValue(8318, 8317);\n this.mirroringShapeCharacters.setValue(8333, 8334);\n this.mirroringShapeCharacters.setValue(8334, 8333);\n this.mirroringShapeCharacters.setValue(8712, 8715);\n this.mirroringShapeCharacters.setValue(8713, 8716);\n this.mirroringShapeCharacters.setValue(8714, 8717);\n this.mirroringShapeCharacters.setValue(8715, 8712);\n this.mirroringShapeCharacters.setValue(8716, 8713);\n this.mirroringShapeCharacters.setValue(8717, 8714);\n this.mirroringShapeCharacters.setValue(8725, 10741);\n this.mirroringShapeCharacters.setValue(8764, 8765);\n this.mirroringShapeCharacters.setValue(8765, 8764);\n this.mirroringShapeCharacters.setValue(8771, 8909);\n this.mirroringShapeCharacters.setValue(8786, 8787);\n this.mirroringShapeCharacters.setValue(8787, 8786);\n this.mirroringShapeCharacters.setValue(8788, 8789);\n this.mirroringShapeCharacters.setValue(8789, 8788);\n this.mirroringShapeCharacters.setValue(8804, 8805);\n this.mirroringShapeCharacters.setValue(8805, 8804);\n this.mirroringShapeCharacters.setValue(8806, 8807);\n this.mirroringShapeCharacters.setValue(8807, 8806);\n this.mirroringShapeCharacters.setValue(8808, 8809);\n this.mirroringShapeCharacters.setValue(8809, 8808);\n this.mirroringShapeCharacters.setValue(8810, 8811);\n this.mirroringShapeCharacters.setValue(8811, 8810);\n this.mirroringShapeCharacters.setValue(8814, 8815);\n this.mirroringShapeCharacters.setValue(8815, 8814);\n this.mirroringShapeCharacters.setValue(8816, 8817);\n this.mirroringShapeCharacters.setValue(8817, 8816);\n this.mirroringShapeCharacters.setValue(8818, 8819);\n this.mirroringShapeCharacters.setValue(8819, 8818);\n this.mirroringShapeCharacters.setValue(8820, 8821);\n this.mirroringShapeCharacters.setValue(8821, 8820);\n this.mirroringShapeCharacters.setValue(8822, 8823);\n this.mirroringShapeCharacters.setValue(8823, 8822);\n this.mirroringShapeCharacters.setValue(8824, 8825);\n this.mirroringShapeCharacters.setValue(8825, 8824);\n this.mirroringShapeCharacters.setValue(8826, 8827);\n this.mirroringShapeCharacters.setValue(8827, 8826);\n this.mirroringShapeCharacters.setValue(8828, 8829);\n this.mirroringShapeCharacters.setValue(8829, 8828);\n this.mirroringShapeCharacters.setValue(8830, 8831);\n this.mirroringShapeCharacters.setValue(8831, 8830);\n this.mirroringShapeCharacters.setValue(8832, 8833);\n this.mirroringShapeCharacters.setValue(8833, 8832);\n this.mirroringShapeCharacters.setValue(8834, 8835);\n this.mirroringShapeCharacters.setValue(8835, 8834);\n this.mirroringShapeCharacters.setValue(8836, 8837);\n this.mirroringShapeCharacters.setValue(8837, 8836);\n this.mirroringShapeCharacters.setValue(8838, 8839);\n this.mirroringShapeCharacters.setValue(8839, 8838);\n this.mirroringShapeCharacters.setValue(8840, 8841);\n this.mirroringShapeCharacters.setValue(8841, 8840);\n this.mirroringShapeCharacters.setValue(8842, 8843);\n this.mirroringShapeCharacters.setValue(8843, 8842);\n this.mirroringShapeCharacters.setValue(8847, 8848);\n this.mirroringShapeCharacters.setValue(8848, 8847);\n this.mirroringShapeCharacters.setValue(8849, 8850);\n this.mirroringShapeCharacters.setValue(8850, 8849);\n this.mirroringShapeCharacters.setValue(8856, 10680);\n this.mirroringShapeCharacters.setValue(8866, 8867);\n this.mirroringShapeCharacters.setValue(8867, 8866);\n this.mirroringShapeCharacters.setValue(8870, 10974);\n this.mirroringShapeCharacters.setValue(8872, 10980);\n this.mirroringShapeCharacters.setValue(8873, 10979);\n this.mirroringShapeCharacters.setValue(8875, 10981);\n this.mirroringShapeCharacters.setValue(8880, 8881);\n this.mirroringShapeCharacters.setValue(8881, 8880);\n this.mirroringShapeCharacters.setValue(8882, 8883);\n this.mirroringShapeCharacters.setValue(8883, 8882);\n this.mirroringShapeCharacters.setValue(8884, 8885);\n this.mirroringShapeCharacters.setValue(8885, 8884);\n /*tslint:disable:max-func-body-length */\n this.mirroringShapeCharacters.setValue(8886, 8887);\n this.mirroringShapeCharacters.setValue(8887, 8886);\n this.mirroringShapeCharacters.setValue(8905, 8906);\n this.mirroringShapeCharacters.setValue(8906, 8905);\n this.mirroringShapeCharacters.setValue(8907, 8908);\n this.mirroringShapeCharacters.setValue(8908, 8907);\n this.mirroringShapeCharacters.setValue(8909, 8771);\n this.mirroringShapeCharacters.setValue(8912, 8913);\n this.mirroringShapeCharacters.setValue(8913, 8912);\n this.mirroringShapeCharacters.setValue(8918, 8919);\n this.mirroringShapeCharacters.setValue(8919, 8918);\n this.mirroringShapeCharacters.setValue(8920, 8921);\n this.mirroringShapeCharacters.setValue(8921, 8920);\n this.mirroringShapeCharacters.setValue(8922, 8923);\n this.mirroringShapeCharacters.setValue(8923, 8922);\n this.mirroringShapeCharacters.setValue(8924, 8925);\n this.mirroringShapeCharacters.setValue(8925, 8924);\n this.mirroringShapeCharacters.setValue(8926, 8927);\n this.mirroringShapeCharacters.setValue(8927, 8926);\n this.mirroringShapeCharacters.setValue(8928, 8929);\n this.mirroringShapeCharacters.setValue(8929, 8928);\n this.mirroringShapeCharacters.setValue(8930, 8931);\n this.mirroringShapeCharacters.setValue(8931, 8930);\n this.mirroringShapeCharacters.setValue(8932, 8933);\n this.mirroringShapeCharacters.setValue(8933, 8932);\n this.mirroringShapeCharacters.setValue(8934, 8935);\n this.mirroringShapeCharacters.setValue(8935, 8934);\n this.mirroringShapeCharacters.setValue(8936, 8937);\n this.mirroringShapeCharacters.setValue(8937, 8936);\n this.mirroringShapeCharacters.setValue(8938, 8939);\n this.mirroringShapeCharacters.setValue(8939, 8938);\n this.mirroringShapeCharacters.setValue(8940, 8941);\n this.mirroringShapeCharacters.setValue(8941, 8940);\n this.mirroringShapeCharacters.setValue(8944, 8945);\n this.mirroringShapeCharacters.setValue(8945, 8944);\n this.mirroringShapeCharacters.setValue(8946, 8954);\n this.mirroringShapeCharacters.setValue(8947, 8955);\n this.mirroringShapeCharacters.setValue(8948, 8956);\n this.mirroringShapeCharacters.setValue(8950, 8957);\n this.mirroringShapeCharacters.setValue(8951, 8958);\n this.mirroringShapeCharacters.setValue(8954, 8946);\n this.mirroringShapeCharacters.setValue(8955, 8947);\n this.mirroringShapeCharacters.setValue(8956, 8948);\n this.mirroringShapeCharacters.setValue(8957, 8950);\n this.mirroringShapeCharacters.setValue(8958, 8951);\n this.mirroringShapeCharacters.setValue(8968, 8969);\n this.mirroringShapeCharacters.setValue(8969, 8968);\n this.mirroringShapeCharacters.setValue(8970, 8971);\n this.mirroringShapeCharacters.setValue(8971, 8970);\n this.mirroringShapeCharacters.setValue(9001, 9002);\n this.mirroringShapeCharacters.setValue(9002, 9001);\n this.mirroringShapeCharacters.setValue(10088, 10089);\n this.mirroringShapeCharacters.setValue(10089, 10088);\n this.mirroringShapeCharacters.setValue(10090, 10091);\n this.mirroringShapeCharacters.setValue(10091, 10090);\n this.mirroringShapeCharacters.setValue(10092, 10093);\n this.mirroringShapeCharacters.setValue(10093, 10092);\n this.mirroringShapeCharacters.setValue(10094, 10095);\n this.mirroringShapeCharacters.setValue(10095, 10094);\n this.mirroringShapeCharacters.setValue(10096, 10097);\n this.mirroringShapeCharacters.setValue(10097, 10096);\n this.mirroringShapeCharacters.setValue(10098, 10099);\n this.mirroringShapeCharacters.setValue(10099, 10098);\n this.mirroringShapeCharacters.setValue(10100, 10101);\n this.mirroringShapeCharacters.setValue(10101, 10100);\n this.mirroringShapeCharacters.setValue(10197, 10198);\n this.mirroringShapeCharacters.setValue(10198, 10197);\n this.mirroringShapeCharacters.setValue(10205, 10206);\n this.mirroringShapeCharacters.setValue(10206, 10205);\n this.mirroringShapeCharacters.setValue(10210, 10211);\n this.mirroringShapeCharacters.setValue(10211, 10210);\n this.mirroringShapeCharacters.setValue(10212, 10213);\n this.mirroringShapeCharacters.setValue(10213, 10212);\n this.mirroringShapeCharacters.setValue(10214, 10215);\n this.mirroringShapeCharacters.setValue(10215, 10214);\n this.mirroringShapeCharacters.setValue(10216, 10217);\n this.mirroringShapeCharacters.setValue(10217, 10216);\n this.mirroringShapeCharacters.setValue(10218, 10219);\n this.mirroringShapeCharacters.setValue(10219, 10218);\n this.mirroringShapeCharacters.setValue(10627, 10628);\n this.mirroringShapeCharacters.setValue(10628, 10627);\n this.mirroringShapeCharacters.setValue(10629, 10630);\n this.mirroringShapeCharacters.setValue(10630, 10629);\n this.mirroringShapeCharacters.setValue(10631, 10632);\n this.mirroringShapeCharacters.setValue(10632, 10631);\n this.mirroringShapeCharacters.setValue(10633, 10634);\n this.mirroringShapeCharacters.setValue(10634, 10633);\n this.mirroringShapeCharacters.setValue(10635, 10636);\n this.mirroringShapeCharacters.setValue(10636, 10635);\n this.mirroringShapeCharacters.setValue(10637, 10640);\n this.mirroringShapeCharacters.setValue(10638, 10639);\n this.mirroringShapeCharacters.setValue(10639, 10638);\n this.mirroringShapeCharacters.setValue(10640, 10637);\n this.mirroringShapeCharacters.setValue(10641, 10642);\n this.mirroringShapeCharacters.setValue(10642, 10641);\n this.mirroringShapeCharacters.setValue(10643, 10644);\n this.mirroringShapeCharacters.setValue(10644, 10643);\n this.mirroringShapeCharacters.setValue(10645, 10646);\n this.mirroringShapeCharacters.setValue(10646, 10645);\n this.mirroringShapeCharacters.setValue(10647, 10648);\n this.mirroringShapeCharacters.setValue(10648, 10647);\n this.mirroringShapeCharacters.setValue(10680, 8856);\n this.mirroringShapeCharacters.setValue(10688, 10689);\n this.mirroringShapeCharacters.setValue(10689, 10688);\n this.mirroringShapeCharacters.setValue(10692, 10693);\n this.mirroringShapeCharacters.setValue(10693, 10692);\n this.mirroringShapeCharacters.setValue(10703, 10704);\n this.mirroringShapeCharacters.setValue(10704, 10703);\n this.mirroringShapeCharacters.setValue(10705, 10706);\n this.mirroringShapeCharacters.setValue(10706, 10705);\n this.mirroringShapeCharacters.setValue(10708, 10709);\n this.mirroringShapeCharacters.setValue(10709, 10708);\n this.mirroringShapeCharacters.setValue(10712, 10713);\n this.mirroringShapeCharacters.setValue(10713, 10712);\n this.mirroringShapeCharacters.setValue(10714, 10715);\n this.mirroringShapeCharacters.setValue(10715, 10714);\n this.mirroringShapeCharacters.setValue(10741, 8725);\n this.mirroringShapeCharacters.setValue(10744, 10745);\n this.mirroringShapeCharacters.setValue(10745, 10744);\n this.mirroringShapeCharacters.setValue(10748, 10749);\n this.mirroringShapeCharacters.setValue(10749, 10748);\n this.mirroringShapeCharacters.setValue(10795, 10796);\n this.mirroringShapeCharacters.setValue(10796, 10795);\n this.mirroringShapeCharacters.setValue(10797, 10796);\n this.mirroringShapeCharacters.setValue(10798, 10797);\n this.mirroringShapeCharacters.setValue(10804, 10805);\n this.mirroringShapeCharacters.setValue(10805, 10804);\n this.mirroringShapeCharacters.setValue(10812, 10813);\n this.mirroringShapeCharacters.setValue(10813, 10812);\n this.mirroringShapeCharacters.setValue(10852, 10853);\n this.mirroringShapeCharacters.setValue(10853, 10852);\n this.mirroringShapeCharacters.setValue(10873, 10874);\n this.mirroringShapeCharacters.setValue(10874, 10873);\n this.mirroringShapeCharacters.setValue(10877, 10878);\n this.mirroringShapeCharacters.setValue(10878, 10877);\n this.mirroringShapeCharacters.setValue(10879, 10880);\n this.mirroringShapeCharacters.setValue(10880, 10879);\n this.mirroringShapeCharacters.setValue(10881, 10882);\n this.mirroringShapeCharacters.setValue(10882, 10881);\n this.mirroringShapeCharacters.setValue(10883, 10884);\n this.mirroringShapeCharacters.setValue(10884, 10883);\n this.mirroringShapeCharacters.setValue(10891, 10892);\n this.mirroringShapeCharacters.setValue(10892, 10891);\n this.mirroringShapeCharacters.setValue(10897, 10898);\n this.mirroringShapeCharacters.setValue(10898, 10897);\n this.mirroringShapeCharacters.setValue(10899, 10900);\n this.mirroringShapeCharacters.setValue(10900, 10899);\n this.mirroringShapeCharacters.setValue(10901, 10902);\n this.mirroringShapeCharacters.setValue(10902, 10901);\n this.mirroringShapeCharacters.setValue(10903, 10904);\n this.mirroringShapeCharacters.setValue(10904, 10903);\n this.mirroringShapeCharacters.setValue(10905, 10906);\n this.mirroringShapeCharacters.setValue(10906, 10905);\n this.mirroringShapeCharacters.setValue(10907, 10908);\n this.mirroringShapeCharacters.setValue(10908, 10907);\n this.mirroringShapeCharacters.setValue(10913, 10914);\n this.mirroringShapeCharacters.setValue(10914, 10913);\n this.mirroringShapeCharacters.setValue(10918, 10919);\n this.mirroringShapeCharacters.setValue(10919, 10918);\n this.mirroringShapeCharacters.setValue(10920, 10921);\n this.mirroringShapeCharacters.setValue(10921, 10920);\n this.mirroringShapeCharacters.setValue(10922, 10923);\n this.mirroringShapeCharacters.setValue(10923, 10922);\n this.mirroringShapeCharacters.setValue(10924, 10925);\n this.mirroringShapeCharacters.setValue(10925, 10924);\n this.mirroringShapeCharacters.setValue(10927, 10928);\n this.mirroringShapeCharacters.setValue(10928, 10927);\n this.mirroringShapeCharacters.setValue(10931, 10932);\n this.mirroringShapeCharacters.setValue(10932, 10931);\n this.mirroringShapeCharacters.setValue(10939, 10940);\n this.mirroringShapeCharacters.setValue(10940, 10939);\n this.mirroringShapeCharacters.setValue(10941, 10942);\n this.mirroringShapeCharacters.setValue(10942, 10941);\n this.mirroringShapeCharacters.setValue(10943, 10944);\n this.mirroringShapeCharacters.setValue(10944, 10943);\n this.mirroringShapeCharacters.setValue(10945, 10946);\n this.mirroringShapeCharacters.setValue(10946, 10945);\n this.mirroringShapeCharacters.setValue(10947, 10948);\n this.mirroringShapeCharacters.setValue(10948, 10947);\n this.mirroringShapeCharacters.setValue(10949, 10950);\n this.mirroringShapeCharacters.setValue(10950, 10949);\n this.mirroringShapeCharacters.setValue(10957, 10958);\n this.mirroringShapeCharacters.setValue(10958, 10957);\n this.mirroringShapeCharacters.setValue(10959, 10960);\n this.mirroringShapeCharacters.setValue(10960, 10959);\n this.mirroringShapeCharacters.setValue(10961, 10962);\n this.mirroringShapeCharacters.setValue(10962, 10961);\n this.mirroringShapeCharacters.setValue(10963, 10964);\n this.mirroringShapeCharacters.setValue(10964, 10963);\n this.mirroringShapeCharacters.setValue(10965, 10966);\n this.mirroringShapeCharacters.setValue(10966, 10965);\n this.mirroringShapeCharacters.setValue(10974, 8870);\n this.mirroringShapeCharacters.setValue(10979, 8873);\n this.mirroringShapeCharacters.setValue(10980, 8872);\n this.mirroringShapeCharacters.setValue(10981, 8875);\n this.mirroringShapeCharacters.setValue(10988, 10989);\n this.mirroringShapeCharacters.setValue(10989, 10988);\n this.mirroringShapeCharacters.setValue(10999, 11000);\n this.mirroringShapeCharacters.setValue(11000, 10999);\n this.mirroringShapeCharacters.setValue(11001, 11002);\n this.mirroringShapeCharacters.setValue(11002, 11001);\n this.mirroringShapeCharacters.setValue(12296, 12297);\n this.mirroringShapeCharacters.setValue(12297, 12296);\n this.mirroringShapeCharacters.setValue(12298, 12299);\n this.mirroringShapeCharacters.setValue(12299, 12298);\n this.mirroringShapeCharacters.setValue(12300, 12301);\n this.mirroringShapeCharacters.setValue(12301, 12300);\n this.mirroringShapeCharacters.setValue(12302, 12303);\n this.mirroringShapeCharacters.setValue(12303, 12302);\n this.mirroringShapeCharacters.setValue(12304, 12305);\n this.mirroringShapeCharacters.setValue(12305, 12304);\n this.mirroringShapeCharacters.setValue(12308, 12309);\n this.mirroringShapeCharacters.setValue(12309, 12308);\n this.mirroringShapeCharacters.setValue(12310, 12311);\n this.mirroringShapeCharacters.setValue(12311, 12310);\n this.mirroringShapeCharacters.setValue(12312, 12313);\n this.mirroringShapeCharacters.setValue(12313, 12312);\n this.mirroringShapeCharacters.setValue(12314, 12315);\n this.mirroringShapeCharacters.setValue(12315, 12314);\n this.mirroringShapeCharacters.setValue(65288, 65289);\n this.mirroringShapeCharacters.setValue(65289, 65288);\n this.mirroringShapeCharacters.setValue(65308, 65310);\n this.mirroringShapeCharacters.setValue(65310, 65308);\n this.mirroringShapeCharacters.setValue(65339, 65341);\n this.mirroringShapeCharacters.setValue(65341, 65339);\n this.mirroringShapeCharacters.setValue(65371, 65373);\n this.mirroringShapeCharacters.setValue(65373, 65371);\n this.mirroringShapeCharacters.setValue(65375, 65376);\n this.mirroringShapeCharacters.setValue(65376, 65375);\n this.mirroringShapeCharacters.setValue(65378, 65379);\n this.mirroringShapeCharacters.setValue(65379, 65378);\n };\n return Bidi;\n}());\nexport { Bidi };\nvar RtlCharacters = /** @class */ (function () {\n //#endregion\n //#region constructors\n function RtlCharacters() {\n //#region fields\n /// \n /// Specifies the character types.\n /// \n this.types = [];\n /// \n /// Specifies the text order (RTL or LTR).\n /// \n this.textOrder = -1;\n /// \n /// Specifies the RTL character types.\n /// \n /* tslint:disable-next-line:prefer-array-literal */\n this.rtlCharacterTypes = new Array(65536);\n //#endregion\n //#region constants\n /// \n /// Left-to-Right (Non-European or non-Arabic digits).\n /// \n this.L = 0;\n /// \n /// Left-to-Right Embedding\n /// \n this.LRE = 1;\n /// \n /// Left-to-Right Override\n /// \n this.LRO = 2;\n /// \n /// Right-to-Left (Hebrew alphabet, and related punctuation).\n /// \n this.R = 3;\n /// \n /// Right-to-Left Arabic \n /// \n this.AL = 4;\n /// \n /// Right-to-Left Embedding.\n /// \n this.RLE = 5;\n /// \n /// Right-to-Left Override\n /// \n this.RLO = 6;\n /// \n /// Pop Directional Format\n /// \n this.PDF = 7;\n /// \n /// European Number (European digits, Eastern Arabic-Indic digits).\n /// \n this.EN = 8;\n /// \n /// European Number Separator (Plus sign, Minus sign).\n /// \n this.ES = 9;\n /// \n /// European Number Terminator (Degree sign, currency symbols).\n /// \n this.ET = 10;\n /// \n /// Arabic Number (Arabic-Indic digits, Arabic decimal and thousands separators).\n /// \n this.AN = 11;\n /// \n /// Common Number Separator (Colon, Comma, Full Stop, No-Break Space.\n /// \n this.CS = 12;\n /// \n /// Nonspacing Mark (Characters with the General_Category values).\n /// \n this.NSM = 13;\n /// \n /// Boundary Neutral (Default ignorables, non-characters, and control characters, other than those explicitly given other types.)\n /// \n this.BN = 14;\n /// \n /// Paragraph Separator (Paragraph separator, appropriate Newline Functions, higher-level protocol paragraph determination).\n /// \n this.B = 15;\n /// \n /// \tSegment Separator (tab).\n /// \n this.S = 16;\n /// \n /// Whitespace (Space, Figure space, Line separator, Form feed, General Punctuation spaces).\n /// \n this.WS = 17;\n /// \n /// Other Neutrals (All other characters, including object replacement character).\n /// \n this.ON = 18;\n /// \n /// RTL character types.\n /// \n this.charTypes = [\n this.L, this.EN, this.BN, this.ES, this.ES, this.S, this.ET, this.ET, this.B, this.AN, this.AN, this.S, this.CS, this.CS,\n this.WS, this.NSM, this.NSM, this.B, this.BN, 27, this.BN, 28, 30, this.B, 31, 31, this.S, 32, 32, this.WS, 33, 34,\n this.ON, 35, 37, this.ET, 38, 42, this.ON, 43, 43, this.ET, 44, 44, this.CS, 45, 45, this.ET, 46, 46, this.CS,\n 47, 47, this.CS, 48, 57, this.EN, 58, 58, this.CS, 59, 64, this.ON, 65, 90, this.L, 91, 96, this.ON, 97, 122, this.L,\n 123, 126, this.ON, 127, 132, this.BN, 133, 133, this.B, 134, 159, this.BN, 160, 160, this.CS,\n 161, 161, this.ON, 162, 165, this.ET, 166, 169, this.ON, 170, 170, this.L, 171, 175, this.ON,\n 176, 177, this.ET, 178, 179, this.EN, 180, 180, this.ON, 181, 181, this.L, 182, 184, this.ON,\n 185, 185, this.EN, 186, 186, this.L, 187, 191, this.ON, 192, 214, this.L, 215, 215, this.ON,\n 216, 246, this.L, 247, 247, this.ON, 248, 696, this.L, 697, 698, this.ON, 699, 705, this.L,\n 706, 719, this.ON, 720, 721, this.L, 722, 735, this.ON, 736, 740, this.L, 741, 749, this.ON,\n 750, 750, this.L, 751, 767, this.ON, 768, 855, this.NSM, 856, 860, this.L, 861, 879, this.NSM,\n 880, 883, this.L, 884, 885, this.ON, 886, 893, this.L, 894, 894, this.ON, 895, 899, this.L,\n 900, 901, this.ON, 902, 902, this.L, 903, 903, this.ON, 904, 1013, this.L, 1014, 1014, this.ON,\n 1015, 1154, this.L, 1155, 1158, this.NSM, 1159, 1159, this.L, 1160, 1161, this.NSM,\n 1162, 1417, this.L, 1418, 1418, this.ON, 1419, 1424, this.L, 1425, 1441, this.NSM,\n 1442, 1442, this.L, 1443, 1465, this.NSM, 1466, 1466, this.L, 1467, 1469, this.NSM,\n 1470, 1470, this.R, 1471, 1471, this.NSM, 1472, 1472, this.R, 1473, 1474, this.NSM,\n 1475, 1475, this.R, 1476, 1476, this.NSM, 1477, 1487, this.L, 1488, 1514, this.R,\n 1515, 1519, this.L, 1520, 1524, this.R, 1525, 1535, this.L, 1536, 1539, this.AL,\n 1540, 1547, this.L, 1548, 1548, this.CS, 1549, 1549, this.AL, 1550, 1551, this.ON,\n 1552, 1557, this.NSM, 1558, 1562, this.L, 1563, 1563, this.AL, 1564, 1566, this.L,\n 1567, 1567, this.AL, 1568, 1568, this.L, 1569, 1594, this.AL, 1595, 1599, this.L,\n 1600, 1610, this.AL, 1611, 1624, this.NSM, 1625, 1631, this.L, 1632, 1641, this.AN,\n 1642, 1642, this.ET, 1643, 1644, this.AN, 1645, 1647, this.AL, 1648, 1648, this.NSM,\n 1649, 1749, this.AL, 1750, 1756, this.NSM, 1757, 1757, this.AL, 1758, 1764, this.NSM,\n 1765, 1766, this.AL, 1767, 1768, this.NSM, 1769, 1769, this.ON, 1770, 1773, this.NSM,\n 1774, 1775, this.AL, 1776, 1785, this.EN, 1786, 1805, this.AL, 1806, 1806, this.L,\n 1807, 1807, this.BN, 1808, 1808, this.AL, 1809, 1809, this.NSM, 1810, 1839, this.AL,\n 1840, 1866, this.NSM, 1867, 1868, this.L, 1869, 1871, this.AL, 1872, 1919, this.L,\n 1920, 1957, this.AL, 1958, 1968, this.NSM, 1969, 1969, this.AL, 1970, 2304, this.L,\n 2305, 2306, this.NSM, 2307, 2363, this.L, 2364, 2364, this.NSM, 2365, 2368, this.L,\n 2369, 2376, this.NSM, 2377, 2380, this.L, 2381, 2381, this.NSM, 2382, 2384, this.L,\n 2385, 2388, this.NSM, 2389, 2401, this.L, 2402, 2403, this.NSM, 2404, 2432, this.L,\n 2433, 2433, this.NSM, 2434, 2491, this.L, 2492, 2492, this.NSM, 2493, 2496, this.L,\n 2497, 2500, this.NSM, 2501, 2508, this.L, 2509, 2509, this.NSM, 2510, 2529, this.L,\n 2530, 2531, this.NSM, 2532, 2545, this.L, 2546, 2547, this.ET, 2548, 2560, this.L,\n 2561, 2562, this.NSM, 2563, 2619, this.L, 2620, 2620, this.NSM, 2621, 2624, this.L,\n 2625, 2626, this.NSM, 2627, 2630, this.L, 2631, 2632, this.NSM, 2633, 2634, this.L,\n 2635, 2637, this.NSM, 2638, 2671, this.L, 2672, 2673, this.NSM, 2674, 2688, this.L,\n 2689, 2690, this.NSM, 2691, 2747, this.L, 2748, 2748, this.NSM, 2749, 2752, this.L,\n 2753, 2757, this.NSM, 2758, 2758, this.L, 2759, 2760, this.NSM, 2761, 2764, this.L,\n 2765, 2765, this.NSM, 2766, 2785, this.L, 2786, 2787, this.NSM, 2788, 2800, this.L,\n 2801, 2801, this.ET, 2802, 2816, this.L, 2817, 2817, this.NSM, 2818, 2875, this.L,\n 2876, 2876, this.NSM, 2877, 2878, this.L, 2879, 2879, this.NSM, 2880, 2880, this.L,\n 2881, 2883, this.NSM, 2884, 2892, this.L, 2893, 2893, this.NSM, 2894, 2901, this.L,\n 2902, 2902, this.NSM, 2903, 2945, this.L, 2946, 2946, this.NSM, 2947, 3007, this.L,\n 3008, 3008, this.NSM, 3009, 3020, this.L, 3021, 3021, this.NSM, 3022, 3058, this.L,\n 3059, 3064, this.ON, 3065, 3065, this.ET, 3066, 3066, this.ON, 3067, 3133, this.L,\n 3134, 3136, this.NSM, 3137, 3141, this.L, 3142, 3144, this.NSM, 3145, 3145, this.L,\n 3146, 3149, this.NSM, 3150, 3156, this.L, 3157, 3158, this.NSM, 3159, 3259, this.L,\n 3260, 3260, this.NSM, 3261, 3275, this.L, 3276, 3277, this.NSM, 3278, 3392, this.L,\n 3393, 3395, this.NSM, 3396, 3404, this.L, 3405, 3405, this.NSM, 3406, 3529, this.L,\n 3530, 3530, this.NSM, 3531, 3537, this.L, 3538, 3540, this.NSM, 3541, 3541, this.L,\n 3542, 3542, this.NSM, 3543, 3632, this.L, 3633, 3633, this.NSM, 3634, 3635, this.L,\n 3636, 3642, this.NSM, 3643, 3646, this.L, 3647, 3647, this.ET, 3648, 3654, this.L,\n 3655, 3662, this.NSM, 3663, 3760, this.L, 3761, 3761, this.NSM, 3762, 3763, this.L,\n 3764, 3769, this.NSM, 3770, 3770, this.L, 3771, 3772, this.NSM, 3773, 3783, this.L,\n 3784, 3789, this.NSM, 3790, 3863, this.L, 3864, 3865, this.NSM, 3866, 3892, this.L,\n 3893, 3893, this.NSM, 3894, 3894, this.L, 3895, 3895, this.NSM, 3896, 3896, this.L,\n 3897, 3897, this.NSM, 3898, 3901, this.ON, 3902, 3952, this.L, 3953, 3966, this.NSM,\n 3967, 3967, this.L, 3968, 3972, this.NSM, 3973, 3973, this.L, 3974, 3975, this.NSM,\n 3976, 3983, this.L, 3984, 3991, this.NSM, 3992, 3992, this.L, 3993, 4028, this.NSM,\n 4029, 4037, this.L, 4038, 4038, this.NSM, 4039, 4140, this.L, 4141, 4144, this.NSM,\n 4145, 4145, this.L, 4146, 4146, this.NSM, 4147, 4149, this.L, 4150, 4151, this.NSM,\n 4152, 4152, this.L, 4153, 4153, this.NSM, 4154, 4183, this.L, 4184, 4185, this.NSM,\n 4186, 5759, this.L, 5760, 5760, this.WS, 5761, 5786, this.L, 5787, 5788, this.ON,\n 5789, 5905, this.L, 5906, 5908, this.NSM, 5909, 5937, this.L, 5938, 5940, this.NSM,\n 5941, 5969, this.L, 5970, 5971, this.NSM, 5972, 6001, this.L, 6002, 6003, this.NSM,\n 6004, 6070, this.L, 6071, 6077, this.NSM, 6078, 6085, this.L, 6086, 6086, this.NSM,\n 6087, 6088, this.L, 6089, 6099, this.NSM, 6100, 6106, this.L, 6107, 6107, this.ET,\n 6108, 6108, this.L, 6109, 6109, this.NSM, 6110, 6127, this.L, 6128, 6137, this.ON,\n 6138, 6143, this.L, 6144, 6154, this.ON, 6155, 6157, this.NSM, 6158, 6158, this.WS,\n 6159, 6312, this.L, 6313, 6313, this.NSM, 6314, 6431, this.L, 6432, 6434, this.NSM,\n 6435, 6438, this.L, 6439, 6443, this.NSM, 6444, 6449, this.L, 6450, 6450, this.NSM,\n 6451, 6456, this.L, 6457, 6459, this.NSM, 6460, 6463, this.L, 6464, 6464, this.ON,\n 6465, 6467, this.L, 6468, 6469, this.ON, 6470, 6623, this.L, 6624, 6655, this.ON,\n 6656, 8124, this.L, 8125, 8125, this.ON, 8126, 8126, this.L, 8127, 8129, this.ON,\n 8130, 8140, this.L, 8141, 8143, this.ON, 8144, 8156, this.L, 8157, 8159, this.ON,\n 8160, 8172, this.L, 8173, 8175, this.ON, 8176, 8188, this.L, 8189, 8190, this.ON,\n 8191, 8191, this.L, 8192, 8202, this.WS, 8203, 8205, this.BN, 8206, 8206, this.L,\n 8207, 8207, this.R, 8208, 8231, this.ON, 8232, 8232, this.WS, 8233, 8233, this.B,\n 8234, 8234, this.LRE, 8235, 8235, this.RLE, 8236, 8236, this.PDF, 8237, 8237, this.LRO,\n 8238, 8238, this.RLO, 8239, 8239, this.WS, 8240, 8244, this.ET, 8245, 8276, this.ON,\n 8277, 8278, this.L, 8279, 8279, this.ON, 8280, 8286, this.L, 8287, 8287, this.WS,\n 8288, 8291, this.BN, 8292, 8297, this.L, 8298, 8303, this.BN, 8304, 8304, this.EN,\n 8305, 8307, this.L, 8308, 8313, this.EN, 8314, 8315, this.ET, 8316, 8318, this.ON,\n 8319, 8319, this.L, 8320, 8329, this.EN, 8330, 8331, this.ET, 8332, 8334, this.ON,\n 8335, 8351, this.L, 8352, 8369, this.ET, 8370, 8399, this.L, 8400, 8426, this.NSM,\n 8427, 8447, this.L, 8448, 8449, this.ON, 8450, 8450, this.L, 8451, 8454, this.ON,\n 8455, 8455, this.L, 8456, 8457, this.ON, 8458, 8467, this.L, 8468, 8468, this.ON,\n 8469, 8469, this.L, 8470, 8472, this.ON, 8473, 8477, this.L, 8478, 8483, this.ON,\n 8484, 8484, this.L, 8485, 8485, this.ON, 8486, 8486, this.L, 8487, 8487, this.ON,\n 8488, 8488, this.L, 8489, 8489, this.ON, 8490, 8493, this.L, 8494, 8494, this.ET,\n 8495, 8497, this.L, 8498, 8498, this.ON, 8499, 8505, this.L, 8506, 8507, this.ON,\n 8508, 8511, this.L, 8512, 8516, this.ON, 8517, 8521, this.L, 8522, 8523, this.ON,\n 8524, 8530, this.L, 8531, 8543, this.ON, 8544, 8591, this.L, 8592, 8721, this.ON,\n 8722, 8723, this.ET, 8724, 9013, this.ON, 9014, 9082, this.L, 9083, 9108, this.ON,\n 9109, 9109, this.L, 9110, 9168, this.ON, 9169, 9215, this.L, 9216, 9254, this.ON,\n 9255, 9279, this.L, 9280, 9290, this.ON, 9291, 9311, this.L, 9312, 9371, this.EN,\n 9372, 9449, this.L, 9450, 9450, this.EN, 9451, 9751, this.ON, 9752, 9752, this.L,\n 9753, 9853, this.ON, 9854, 9855, this.L, 9856, 9873, this.ON, 9874, 9887, this.L,\n 9888, 9889, this.ON, 9890, 9984, this.L, 9985, 9988, this.ON, 9989, 9989, this.L,\n 9990, 9993, this.ON, 9994, 9995, this.L, 9996, 10023, this.ON, 10024, 10024, this.L,\n 10025, 10059, this.ON, 10060, 10060, this.L, 10061, 10061, this.ON, 10062, 10062, this.L,\n 10063, 10066, this.ON, 10067, 10069, this.L, 10070, 10070, this.ON, 10071, 10071, this.L,\n 10072, 10078, this.ON, 10079, 10080, this.L, 10081, 10132, this.ON, 10133, 10135, this.L,\n 10136, 10159, this.ON, 10160, 10160, this.L, 10161, 10174, this.ON, 10175, 10191, this.L,\n 10192, 10219, this.ON, 10220, 10223, this.L, 10224, 11021, this.ON, 11022, 11903, this.L,\n 11904, 11929, this.ON, 11930, 11930, this.L, 11931, 12019, this.ON, 12020, 12031, this.L,\n 12032, 12245, this.ON, 12246, 12271, this.L, 12272, 12283, this.ON, 12284, 12287, this.L,\n 12288, 12288, this.WS, 12289, 12292, this.ON, 12293, 12295, this.L, 12296, 12320, this.ON,\n 12321, 12329, this.L, 12330, 12335, this.NSM, 12336, 12336, this.ON, 12337, 12341, this.L,\n 12342, 12343, this.ON, 12344, 12348, this.L, 12349, 12351, this.ON, 12352, 12440, this.L,\n 12441, 12442, this.NSM, 12443, 12444, this.ON, 12445, 12447, this.L, 12448, 12448, this.ON,\n 12449, 12538, this.L, 12539, 12539, this.ON, 12540, 12828, this.L, 12829, 12830, this.ON,\n 12831, 12879, this.L, 12880, 12895, this.ON, 12896, 12923, this.L, 12924, 12925, this.ON,\n 12926, 12976, this.L, 12977, 12991, this.ON, 12992, 13003, this.L, 13004, 13007, this.ON,\n 13008, 13174, this.L, 13175, 13178, this.ON, 13179, 13277, this.L, 13278, 13279, this.ON,\n 13280, 13310, this.L, 13311, 13311, this.ON, 13312, 19903, this.L, 19904, 19967, this.ON,\n 19968, 42127, this.L, 42128, 42182, this.ON, 42183, 64284, this.L, 64285, 64285, this.R,\n 64286, 64286, this.NSM, 64287, 64296, this.R, 64297, 64297, this.ET, 64298, 64310, this.R,\n 64311, 64311, this.L, 64312, 64316, this.R, 64317, 64317, this.L, 64318, 64318, this.R,\n 64319, 64319, this.L, 64320, 64321, this.R, 64322, 64322, this.L, 64323, 64324, this.R,\n 64325, 64325, this.L, 64326, 64335, this.R, 64336, 64433, this.AL, 64434, 64466, this.L,\n 64467, 64829, this.AL, 64830, 64831, this.ON, 64832, 64847, this.L, 64848, 64911, this.AL,\n 64912, 64913, this.L, 64914, 64967, this.AL, 64968, 65007, this.L, 65008, 65020, this.AL,\n 65021, 65021, this.ON, 65022, 65023, this.L, 65024, 65039, this.NSM, 65040, 65055, this.L,\n 65056, 65059, this.NSM, 65060, 65071, this.L, 65072, 65103, this.ON, 65104, 65104, this.CS,\n 65105, 65105, this.ON, 65106, 65106, this.CS, 65107, 65107, this.L, 65108, 65108, this.ON,\n 65109, 65109, this.CS, 65110, 65118, this.ON, 65119, 65119, this.ET, 65120, 65121, this.ON,\n 65122, 65123, this.ET, 65124, 65126, this.ON, 65127, 65127, this.L, 65128, 65128, this.ON,\n 65129, 65130, this.ET, 65131, 65131, this.ON, 65132, 65135, this.L, 65136, 65140, this.AL,\n 65141, 65141, this.L, 65142, 65276, this.AL, 65277, 65278, this.L, 65279, 65279, this.BN,\n 65280, 65280, this.L, 65281, 65282, this.ON, 65283, 65285, this.ET, 65286, 65290, this.ON,\n 65291, 65291, this.ET, 65292, 65292, this.CS, 65293, 65293, this.ET, 65294, 65294, this.CS,\n 65295, 65295, this.ES, 65296, 65305, this.EN, 65306, 65306, this.CS, 65307, 65312, this.ON,\n 65313, 65338, this.L, 65339, 65344, this.ON, 65345, 65370, this.L, 65371, 65381, this.ON,\n 65382, 65503, this.L, 65504, 65505, this.ET, 65506, 65508, this.ON, 65509, 65510, this.ET,\n 65511, 65511, this.L, 65512, 65518, this.ON, 65519, 65528, this.L, 65529, 65531, this.BN,\n 65532, 65533, this.ON, 65534, 65535, this.L\n ];\n for (var i = 0; i < this.charTypes.length; ++i) {\n var start = this.charTypes[i];\n var end = this.charTypes[++i];\n var b = this.charTypes[++i];\n while (start <= end) {\n this.rtlCharacterTypes[start++] = b;\n }\n }\n }\n //#endregion\n //#region implementation\n RtlCharacters.prototype.getVisualOrder = function (inputText, isRtl) {\n this.types = this.getCharacterCode(inputText);\n this.textOrder = isRtl ? this.LRE : this.L;\n this.doVisualOrder();\n var result = [];\n for (var i = 0; i < this.levels.length; i++) {\n result[i] = this.levels[i];\n }\n return result;\n };\n RtlCharacters.prototype.getCharacterCode = function (text) {\n var characterCodes = [];\n for (var i = 0; i < text.length; i++) {\n characterCodes[i] = this.rtlCharacterTypes[text[i].charCodeAt(0)];\n }\n return characterCodes;\n };\n RtlCharacters.prototype.setDefaultLevels = function () {\n for (var i = 0; i < this.length; i++) {\n this.levels[i] = this.textOrder;\n }\n };\n RtlCharacters.prototype.setLevels = function () {\n this.setDefaultLevels();\n for (var n = 0; n < this.length; ++n) {\n var level = this.levels[n];\n if ((level & 0x80) !== 0) {\n level &= 0x7f;\n this.result[n] = ((level & 0x1) === 0) ? this.L : this.R;\n }\n this.levels[n] = level;\n }\n };\n RtlCharacters.prototype.updateLevels = function (index, level, length) {\n if ((level & 1) === 0) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.R) {\n this.levels[i] += 1;\n }\n else if (this.result[i] !== this.L) {\n this.levels[i] += 2;\n }\n }\n }\n else {\n for (var i = index; i < length; ++i) {\n if (this.result[i] !== this.R) {\n this.levels[i] += 1;\n }\n }\n }\n };\n RtlCharacters.prototype.doVisualOrder = function () {\n this.length = this.types.length;\n this.result = this.types;\n this.levels = [];\n this.setLevels();\n this.length = this.getEmbeddedCharactersLength();\n var preview = this.textOrder;\n var i = 0;\n while (i < this.length) {\n var level = this.levels[i];\n var preType = ((Math.max(preview, level) & 0x1) === 0) ? this.L : this.R;\n var length_1 = i + 1;\n while (length_1 < this.length && this.levels[length_1] === level) {\n ++length_1;\n }\n var success = length_1 < this.length ? this.levels[length_1] : this.textOrder;\n var type = ((Math.max(success, level) & 0x1) === 0) ? this.L : this.R;\n this.checkNSM(i, length_1, level, preType, type);\n this.updateLevels(i, level, length_1);\n preview = level;\n i = length_1;\n }\n this.checkEmbeddedCharacters(this.length);\n };\n RtlCharacters.prototype.getEmbeddedCharactersLength = function () {\n var index = 0;\n for (var i = 0; i < this.length; ++i) {\n if (!(this.types[i] === this.LRE || this.types[i] === this.RLE || this.types[i] === this.LRO ||\n this.types[i] === this.RLO || this.types[i] === this.PDF || this.types[i] === this.BN)) {\n this.result[index] = this.result[i];\n this.levels[index] = this.levels[i];\n index++;\n }\n }\n return index;\n };\n RtlCharacters.prototype.checkEmbeddedCharacters = function (length) {\n for (var i = this.types.length - 1; i >= 0; --i) {\n if (this.types[i] === this.LRE || this.types[i] === this.RLE || this.types[i] === this.LRO ||\n this.types[i] === this.RLO || this.types[i] === this.PDF || this.types[i] === this.BN) {\n this.result[i] = this.types[i];\n this.levels[i] = -1;\n }\n else {\n length -= 1;\n this.result[i] = this.result[length];\n this.levels[i] = this.levels[length];\n }\n }\n for (var i = 0; i < this.types.length; i++) {\n if (this.levels[i] === -1) {\n if (i === 0) {\n this.levels[i] = this.textOrder;\n }\n else {\n this.levels[i] = this.levels[i - 1];\n }\n }\n }\n };\n RtlCharacters.prototype.checkNSM = function (index, length, level, startType, endType) {\n var charType = startType;\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.NSM) {\n this.result[i] = charType;\n }\n else {\n charType = this.result[i];\n }\n }\n this.checkEuropeanDigits(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanDigits = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.EN) {\n for (var j = i - 1; j >= index; --j) {\n if (this.result[j] === this.L || this.result[j] === this.R || this.result[j] === this.AL) {\n if (this.result[j] === this.AL) {\n this.result[i] = this.AN;\n }\n break;\n }\n }\n }\n }\n this.checkArabicCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkArabicCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.AL) {\n this.result[i] = this.R;\n }\n }\n this.checkEuropeanNumberSeparator(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanNumberSeparator = function (index, length, level, startType, endType) {\n for (var i = index + 1; i < length - 1; ++i) {\n if (this.result[i] === this.ES || this.result[i] === this.CS) {\n var preview = this.result[i - 1];\n var success = this.result[i + 1];\n if (preview === this.EN && success === this.EN) {\n this.result[i] = this.EN;\n }\n else if (this.result[i] === this.CS && preview === this.AN && success === this.AN) {\n this.result[i] = this.AN;\n }\n }\n }\n this.checkEuropeanNumberTerminator(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkEuropeanNumberTerminator = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.ET) {\n var s = i;\n var b = [];\n b.push(this.ET);\n var l = this.getLength(s, length, b);\n var data = s === index ? startType : this.result[s - 1];\n if (data !== this.EN) {\n data = (l === length) ? endType : this.result[l];\n }\n if (data === this.EN) {\n for (var j = s; j < l; ++j) {\n this.result[j] = this.EN;\n }\n }\n i = l;\n }\n }\n this.checkOtherNeutrals(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkOtherNeutrals = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.ES || this.result[i] === this.ET || this.result[i] === this.CS) {\n this.result[i] = this.ON;\n }\n }\n this.checkOtherCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.checkOtherCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.EN) {\n var pst = startType;\n for (var j = i - 1; j >= index; --j) {\n if (this.result[j] === this.L || this.result[j] === this.R) {\n pst = this.result[j];\n break;\n }\n }\n if (pst === this.L) {\n this.result[i] = this.L;\n }\n }\n }\n this.checkCommanCharacters(index, length, level, startType, endType);\n };\n RtlCharacters.prototype.getLength = function (index, length, validSet) {\n --index;\n while (++index < length) {\n var t = this.result[index];\n for (var i = 0; i < validSet.length; ++i) {\n if (t === validSet[i]) {\n index = this.getLength(++index, length, validSet);\n }\n }\n return index;\n }\n return length;\n };\n RtlCharacters.prototype.checkCommanCharacters = function (index, length, level, startType, endType) {\n for (var i = index; i < length; ++i) {\n if (this.result[i] === this.WS || this.result[i] === this.ON || this.result[i] === this.B ||\n this.result[i] === this.S) {\n var s = i;\n var byte = [this.B, this.S, this.WS, this.ON];\n var l = this.getLength(s, length, byte);\n var lt = 0;\n var tt = 0;\n var rt = 0;\n if (s === index) {\n lt = startType;\n }\n else {\n lt = this.result[s - 1];\n if (lt === this.AN) {\n lt = this.R;\n }\n else if (lt === this.EN) {\n lt = this.R;\n }\n }\n if (l === length) {\n tt = endType;\n }\n else {\n tt = this.result[l];\n if (tt === this.AN) {\n tt = this.R;\n }\n else if (tt === this.EN) {\n tt = this.R;\n }\n }\n if (lt === tt) {\n rt = lt;\n }\n else {\n rt = ((level & 0x1) === 0) ? this.L : this.R;\n }\n for (var j = s; j < l; ++j) {\n this.result[j] = rt;\n }\n i = l;\n }\n }\n };\n return RtlCharacters;\n}());\nexport { RtlCharacters };\n","import { PdfString } from './../../primitives/pdf-string';\nimport { ArabicShapeRenderer } from './rtl/rtl-text-shape';\nimport { PdfTextDirection } from './../enum';\nimport { Bidi } from './rtl/rtl-bidirectional';\n/**\n * `Metrics` of the font.\n * @private\n */\nvar RtlRenderer = /** @class */ (function () {\n function RtlRenderer() {\n //region Constants\n /// Open bracket symbol.\n /// \n this.openBracket = '(';\n /// \n /// Close bracket symbol.\n /// \n this.closeBracket = ')';\n //#endregion\n }\n //#region Constructors\n /// \n /// Initializes a new instance of the class.\n /// \n // public constructor() {\n // }\n //#region Public Methods\n /// \n /// Layouts text. Changes blocks position in the RTL text.\n /// Ligates the text if needed.\n /// \n /// Line of the text.\n /// Font to be used for string printing.\n /// Font alignment.\n /// Indicates whether Word Spacing used or not.\n /// Layout string.\n RtlRenderer.prototype.layout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var result = [];\n if (font.Unicode) {\n result = this.customLayout(line, rtl, format, font, wordSpace);\n }\n else {\n result = [];\n result[0] = line;\n }\n return result;\n };\n /// \n /// Layouts a string and splits it by the words and using correct lay outing.\n /// \n /// Text line.\n /// Font object.\n /// Indicates whether RTL should be applied.\n /// Indicates whether word spacing is used.\n /// Array of words if converted, null otherwise.\n RtlRenderer.prototype.splitLayout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var words = [];\n var system = false;\n if (!system || words == null) {\n words = this.customSplitLayout(line, font, rtl, wordSpace, format);\n }\n return words;\n };\n //#endregion\n //#region Implementation\n // private isEnglish( word : string) : boolean\n // {\n // let c : string = (word.length > 0) ? word[0] : '';\n // return (c >= '0' && c < 'ÿ');\n // }\n // private keepOrder( words : string, startIndex : number, count: number, result : string[], resultIndex : number) : void\n // {\n // for (let i : number = 0, ri = resultIndex - count + 1; i < count; ++i, ++ri) {\n // result[ri] = words[i + startIndex];\n // }\n // }\n /// \n /// Uses system API to layout the text.\n /// \n /// Line of the text to be layouted.\n /// Font which is used for text printing.\n /// Indicates whether we use RTL or RTL lay outing of the text container.\n /// Layout string.\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.getGlyphIndex = function (line, font, rtl, /*out*/ glyphs, custom) {\n var success = true;\n var fail = false;\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n glyphs = null;\n if (line.length === 0) {\n return { success: fail, glyphs: glyphs };\n }\n var renderer = new ArabicShapeRenderer();\n var text = renderer.shape(line, 0);\n var internalFont = font.fontInternal;\n var ttfReader = internalFont.ttfReader;\n glyphs = new Uint16Array(text.length);\n var i = 0;\n for (var k = 0, len = text.length; k < len; k++) {\n var ch = text[k];\n var glyphInfo = ttfReader.getGlyph(ch);\n if (glyphInfo !== null && typeof glyphInfo !== 'undefined') {\n glyphs[i++] = (glyphInfo).index;\n }\n }\n return { success: success, glyphs: glyphs };\n };\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.customLayout = function (line, rtl, format, font, wordSpace) {\n if (wordSpace === null || typeof wordSpace === 'undefined') {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n var result = null;\n //bidirectional order.\n if (format !== null && typeof format !== 'undefined' && format.textDirection !== PdfTextDirection.None) {\n var bidi = new Bidi();\n result = bidi.getLogicalToVisualString(line, rtl);\n }\n return result;\n }\n else {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var layouted = null;\n if (format !== null && typeof format !== 'undefined' && format.textDirection !== PdfTextDirection.None) {\n var renderer = new ArabicShapeRenderer();\n var txt = renderer.shape(line, 0);\n layouted = this.customLayout(txt, rtl, format);\n }\n // else {\n // layouted = this.customLayout(line, rtl, format);\n // }\n // We have unicode font, but from the file. \n var result = [];\n // Split the text by words if word spacing is not default.\n if (wordSpace) {\n var words = layouted.split('');\n var count = words.length;\n for (var i = 0; i < count; i++) {\n words[i] = this.addChars(font, words[i]);\n }\n result = words;\n }\n else {\n result = [];\n result[0] = this.addChars(font, layouted);\n }\n return result;\n }\n };\n /// \n /// Add information about used glyphs to the font.\n /// \n /// Font used for text rendering.\n /// Array of used glyphs.\n /// String in the form to be written to the file.\n RtlRenderer.prototype.addChars = function (font, glyphs) {\n var line = glyphs;\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n var text = line;\n var internalFont = font.fontInternal;\n var ttfReader = internalFont.ttfReader;\n font.setSymbols(text);\n // Reconvert string according to unicode standard.\n text = ttfReader.convertString(text);\n var bytes = PdfString.toUnicodeArray(text, false);\n text = PdfString.byteToString(bytes);\n return text;\n // else {\n // if (font == null) {\n // throw new Error('ArgumentNullException : font');\n // }\n // if (glyphs == null) {\n // throw new Error('ArgumentNullException : glyphs');\n // }\n // // Mark the chars as used.\n // let text : string = '';\n // font.setSymbols(glyphs);\n // // Create string from the glyphs.\n // \n // let chars : string[] = [];\n // for (let i : number = 0; i < glyphs.length; i++) {\n // chars[i] = glyphs[i].toString();\n // }\n // for (let j : number = 0 ; j < chars.length; j++) {\n // text = text + chars[j];\n // }\n // let bytes : number[] = PdfString.toUnicodeArray(text, false);\n // text = PdfString.byteToString(bytes);\n // return text;\n // }\n };\n /// \n /// Layouts a string and splits it by the words by using custom lay outing.\n /// \n /// Text line.\n /// Font object.\n /// Indicates whether RTL should be applied.\n /// Indicates whether word spacing is used.\n /// Array of words if converted, null otherwise.\n /* tslint:disable-next-line:max-line-length */\n RtlRenderer.prototype.customSplitLayout = function (line, font, rtl, wordSpace, format) {\n if (line == null) {\n throw new Error('ArgumentNullException : line');\n }\n if (font == null) {\n throw new Error('ArgumentNullException : font');\n }\n var reversedLine = this.customLayout(line, rtl, format);\n var words = reversedLine.split('');\n return words;\n };\n return RtlRenderer;\n}());\nexport { RtlRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfColorSpace } from './../enum';\nimport { PdfColor } from './../pdf-color';\nimport { PdfBrush } from './pdf-brush';\nimport { PdfDictionary } from '../../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfBoolean } from './../../primitives/pdf-boolean';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfName } from '../../primitives/pdf-name';\nimport { PdfNumber } from '../../primitives/pdf-number';\nimport { PdfReferenceHolder } from '../../primitives/pdf-reference';\n/**\n * `PdfGradientBrush` class provides objects used to fill the interiors of graphical shapes such as rectangles,\n * ellipses, pies, polygons, and paths.\n * @private\n */\nvar PdfGradientBrush = /** @class */ (function (_super) {\n __extends(PdfGradientBrush, _super);\n //Constructor\n /**\n * Initializes a new instance of the `PdfGradientBrush` class.\n * @public\n */\n /* tslint:disable-next-line:max-line-length */\n function PdfGradientBrush(shading) {\n var _this = _super.call(this) || this;\n // Fields\n /**\n * Local variable to store the background color.\n * @private\n */\n _this.mbackground = new PdfColor(255, 255, 255);\n /**\n * Local variable to store the stroking color.\n * @private\n */\n _this.mbStroking = false;\n /**\n * Local variable to store the function.\n * @private\n */\n _this.mfunction = null;\n /**\n * Local variable to store the DictionaryProperties.\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n _this.mpatternDictionary = new PdfDictionary();\n _this.mpatternDictionary.items.setValue(_this.dictionaryProperties.type, new PdfName(_this.dictionaryProperties.pattern));\n _this.mpatternDictionary.items.setValue(_this.dictionaryProperties.patternType, new PdfNumber(2));\n _this.shading = shading;\n _this.colorSpace = PdfColorSpace.Rgb;\n return _this;\n }\n Object.defineProperty(PdfGradientBrush.prototype, \"background\", {\n //Properties\n /**\n * Gets or sets the background color of the brush.\n * @public\n */\n get: function () {\n return this.mbackground;\n },\n set: function (value) {\n this.mbackground = value;\n var sh = this.shading;\n if (value.isEmpty) {\n sh.remove(this.dictionaryProperties.background);\n }\n else {\n sh.items.setValue(this.dictionaryProperties.background, value.toArray(this.colorSpace));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGradientBrush.prototype, \"antiAlias\", {\n /**\n * Gets or sets a value indicating whether use anti aliasing algorithm.\n * @public\n */\n get: function () {\n var sh = this.shading;\n var aa = (sh.items.getValue(this.dictionaryProperties.antiAlias));\n return aa.value;\n },\n set: function (value) {\n var sh = this.shading;\n var aa = (sh.items.getValue(this.dictionaryProperties.antiAlias));\n if ((aa == null && typeof aa === 'undefined')) {\n aa = new PdfBoolean(value);\n sh.items.setValue(this.dictionaryProperties.antiAlias, aa);\n }\n else {\n aa.value = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGradientBrush.prototype, \"function\", {\n /**\n * Gets or sets the function of the brush.\n * @protected\n */\n get: function () {\n return this.mfunction;\n },\n set: function (value) {\n this.mfunction = value;\n if (value != null && typeof value !== 'undefined') {\n this.shading.items.setValue(this.dictionaryProperties.function, new PdfReferenceHolder(this.mfunction));\n }\n else {\n this.shading.remove(this.dictionaryProperties.function);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGradientBrush.prototype, \"bBox\", {\n /**\n * Gets or sets the boundary box of the brush.\n * @protected\n */\n get: function () {\n var sh = this.shading;\n var box = (sh.items.getValue(this.dictionaryProperties.bBox));\n return box;\n },\n set: function (value) {\n var sh = this.shading;\n if (value == null && typeof value === 'undefined') {\n sh.remove(this.dictionaryProperties.bBox);\n }\n else {\n sh.items.setValue(this.dictionaryProperties.bBox, value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGradientBrush.prototype, \"colorSpace\", {\n /**\n * Gets or sets the color space of the brush.\n * @public\n */\n get: function () {\n return this.mcolorSpace;\n },\n set: function (value) {\n var colorSpace = this.shading.items.getValue(this.dictionaryProperties.colorSpace);\n if ((value !== this.mcolorSpace) || (colorSpace == null)) {\n this.mcolorSpace = value;\n var csValue = this.colorSpaceToDeviceName(value);\n this.shading.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(csValue));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGradientBrush.prototype, \"stroking\", {\n /**\n * Gets or sets a value indicating whether this PdfGradientBrush is stroking.\n * @public\n */\n get: function () {\n return this.mbStroking;\n },\n set: function (value) {\n this.mbStroking = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGradientBrush.prototype, \"patternDictionary\", {\n /**\n * Gets the pattern dictionary.\n * @protected\n */\n get: function () {\n if (this.mpatternDictionary == null) {\n this.mpatternDictionary = new PdfDictionary();\n }\n return this.mpatternDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGradientBrush.prototype, \"shading\", {\n /**\n * Gets or sets the shading dictionary.\n * @protected\n */\n get: function () {\n return this.mshading;\n },\n set: function (value) {\n if (value == null) {\n throw new Error('ArgumentNullException : Shading');\n }\n if (value !== this.mshading) {\n this.mshading = value;\n this.patternDictionary.items.setValue(this.dictionaryProperties.shading, new PdfReferenceHolder(this.mshading));\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGradientBrush.prototype, \"matrix\", {\n /**\n * Gets or sets the transformation matrix.\n * @public\n */\n get: function () {\n return this.mmatrix;\n },\n set: function (value) {\n if (value == null) {\n throw new Error('ArgumentNullException : Matrix');\n }\n if (value !== this.mmatrix) {\n this.mmatrix = value.clone();\n var m = new PdfArray(this.mmatrix.matrix.elements);\n this.mpatternDictionary.items.setValue(this.dictionaryProperties.matrix, m);\n }\n },\n enumerable: true,\n configurable: true\n });\n //Overrides\n /**\n * Monitors the changes of the brush and modify PDF state respectfully.\n * @param brush The brush.\n * @param streamWriter The stream writer.\n * @param getResources The get resources delegate.\n * @param saveChanges if set to true the changes should be saved anyway.\n * @param currentColorSpace The current color space.\n */\n /* tslint:disable-next-line:max-line-length */\n PdfGradientBrush.prototype.monitorChanges = function (brush, streamWriter, getResources, saveChanges, currentColorSpace) {\n var diff = false;\n if (brush instanceof PdfGradientBrush) {\n if ((this.colorSpace !== currentColorSpace)) {\n this.colorSpace = currentColorSpace;\n this.resetFunction();\n }\n // Set the /Pattern colour space.\n streamWriter.setColorSpace('Pattern', this.mbStroking);\n // Set the pattern for non-stroking operations.\n var resources = getResources.getResources();\n var name_1 = resources.getName(this);\n streamWriter.setColourWithPattern(null, name_1, this.mbStroking);\n diff = true;\n }\n return diff;\n };\n /**\n * Resets the changes, which were made by the brush.\n * In other words resets the state to the initial one.\n * @param streamWriter The stream writer.\n */\n PdfGradientBrush.prototype.resetChanges = function (streamWriter) {\n // Unable reset.\n };\n //Implementation\n /**\n * Converts colorspace enum to a PDF name.\n * @param colorSpace The color space enum value.\n */\n PdfGradientBrush.prototype.colorSpaceToDeviceName = function (colorSpace) {\n var result;\n switch (colorSpace) {\n case PdfColorSpace.Rgb:\n result = 'DeviceRGB';\n break;\n }\n return result;\n };\n /**\n * Resets the pattern dictionary.\n * @param dictionary A new pattern dictionary.\n */\n PdfGradientBrush.prototype.resetPatternDictionary = function (dictionary) {\n this.mpatternDictionary = dictionary;\n };\n /**\n * Clones the anti aliasing value.\n * @param brush The brush.\n */\n PdfGradientBrush.prototype.cloneAntiAliasingValue = function (brush) {\n if ((brush == null)) {\n throw new Error('ArgumentNullException : brush');\n }\n var sh = this.shading;\n var aa = (sh.items.getValue(this.dictionaryProperties.antiAlias));\n if ((aa != null)) {\n brush.shading.items.setValue(this.dictionaryProperties.antiAlias, new PdfBoolean(aa.value));\n }\n };\n /**\n * Clones the background value.\n * @param brush The brush.\n */\n PdfGradientBrush.prototype.cloneBackgroundValue = function (brush) {\n var background = this.background;\n if (!background.isEmpty) {\n brush.background = background;\n }\n };\n Object.defineProperty(PdfGradientBrush.prototype, \"element\", {\n /* tslint:enable */\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @private\n */\n get: function () {\n return this.patternDictionary;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGradientBrush;\n}(PdfBrush));\nexport { PdfGradientBrush };\n","/**\n * ImageDecoder class\n */\nimport { ByteArray } from './byte-array';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfBoolean } from './../../primitives/pdf-boolean';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\n/**\n * Specifies the image `format`.\n * @private\n */\nexport var ImageFormat;\n(function (ImageFormat) {\n /**\n * Specifies the type of `Unknown`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Unknown\"] = 0] = \"Unknown\";\n /**\n * Specifies the type of `Bmp`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Bmp\"] = 1] = \"Bmp\";\n /**\n * Specifies the type of `Emf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Emf\"] = 2] = \"Emf\";\n /**\n * Specifies the type of `Gif`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Gif\"] = 3] = \"Gif\";\n /**\n * Specifies the type of `Jpeg`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Jpeg\"] = 4] = \"Jpeg\";\n /**\n * Specifies the type of `Png`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Png\"] = 5] = \"Png\";\n /**\n * Specifies the type of `Wmf`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Wmf\"] = 6] = \"Wmf\";\n /**\n * Specifies the type of `Icon`.\n * @hidden\n * @private\n */\n ImageFormat[ImageFormat[\"Icon\"] = 7] = \"Icon\";\n})(ImageFormat || (ImageFormat = {}));\n/**\n * `Decode the image stream`.\n * @private\n */\nvar ImageDecoder = /** @class */ (function () {\n /**\n * Initialize the new instance for `image-decoder` class.\n * @private\n */\n function ImageDecoder(stream) {\n /**\n * Start of file markers.\n * @hidden\n * @private\n */\n this.sof1Marker = 0x00C1;\n this.sof2Marker = 0x00C2;\n this.sof3Marker = 0x00C3;\n this.sof5Marker = 0x00C5;\n this.sof6Marker = 0x00C6;\n this.sof7Marker = 0x00C7;\n this.sof9Marker = 0x00C9;\n this.sof10Marker = 0x00CA;\n this.sof11Marker = 0x00CB;\n this.sof13Marker = 0x00CD;\n this.sof14Marker = 0x00CE;\n this.sof15Marker = 0x00CF;\n /**\n * Specifies `format` of image.\n * @hidden\n * @private\n */\n this.mFormat = ImageFormat.Unknown;\n /**\n * `Bits per component`.\n * @default 8\n * @hidden\n * @private\n */\n this.mbitsPerComponent = 8;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.mStream = stream;\n this.initialize();\n }\n Object.defineProperty(ImageDecoder.prototype, \"height\", {\n /**\n * Gets the `height` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mHeight;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"width\", {\n /**\n * Gets the `width` of image.\n * @hidden\n * @private\n */\n get: function () {\n return this.mWidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"bitsPerComponent\", {\n /**\n * Gets `bits per component`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mbitsPerComponent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"size\", {\n /**\n * Gets the `size` of an image data.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageData\", {\n /**\n * Gets the value of an `image data`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageDecoder.prototype, \"imageDataAsNumberArray\", {\n /**\n * Gets the value of an `image data as number array`.\n * @hidden\n * @private\n */\n get: function () {\n return this.mImageData.internalBuffer.buffer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Initialize` image data and image stream.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.initialize = function () {\n if (this.mFormat === ImageFormat.Unknown && this.checkIfJpeg()) {\n this.mFormat = ImageFormat.Jpeg;\n this.parseJpegImage();\n }\n else {\n throw new TypeError('Only the JPEG format is supported');\n }\n this.reset();\n this.mImageData = new ByteArray(this.mStream.count);\n this.mStream.read(this.mImageData, 0, this.mImageData.count);\n };\n /**\n * `Reset` stream position into 0.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.reset = function () {\n this.mStream.position = 0;\n };\n /**\n * `Parse` Jpeg image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.parseJpegImage = function () {\n this.reset();\n var imgData = new ByteArray(this.mStream.count);\n this.mStream.read(imgData, 0, imgData.count);\n var i = 4;\n var isLengthExceed = false;\n /* tslint:disable */\n var length = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n while (i < imgData.count) {\n i += length;\n if (i < imgData.count) {\n if (imgData.getBuffer(i + 1) === 192) {\n this.mHeight = imgData.getBuffer(i + 5) * 256 + imgData.getBuffer(i + 6);\n this.mWidth = imgData.getBuffer(i + 7) * 256 + imgData.getBuffer(i + 8);\n return;\n }\n else {\n i += 2;\n length = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);\n }\n }\n else {\n isLengthExceed = true;\n break;\n }\n }\n if (isLengthExceed) {\n this.mStream.position = 0;\n this.skip(this.mStream, 2);\n this.readExceededJPGImage(this.mStream);\n }\n /* tslint:enable */\n };\n Object.defineProperty(ImageDecoder.prototype, \"format\", {\n /**\n * Gets the image `format`.\n * @private\n * @hidden\n */\n get: function () {\n return this.mFormat;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Checks if JPG`.\n * @private\n * @hidden\n */\n ImageDecoder.prototype.checkIfJpeg = function () {\n this.reset();\n for (var i = 0; i < ImageDecoder.mJpegHeader.length; i++) {\n if (ImageDecoder.mJpegHeader[i] !== this.mStream.readByte(i)) {\n return false;\n }\n this.mStream.position++;\n }\n return true;\n };\n /**\n * Return image `dictionary`.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getImageDictionary = function () {\n if (this.mFormat === ImageFormat.Jpeg) {\n var tempArrayBuffer = this.imageData.internalBuffer.length;\n this.imageStream = new PdfStream();\n this.imageStream.isResource = true;\n var tempString = '';\n var decodedString = '';\n for (var i = 0; i < this.imageDataAsNumberArray.byteLength; i++) {\n tempString += String.fromCharCode(null, this.mStream.readByte(i));\n }\n for (var i = 0; i < tempString.length; i++) {\n if (i % 2 !== 0) {\n decodedString += tempString[i];\n }\n }\n this.imageStream.data = [decodedString];\n this.imageStream.compress = false;\n this.imageStream.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.xObject));\n this.imageStream.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.image));\n this.imageStream.items.setValue(this.dictionaryProperties.width, new PdfNumber(this.width));\n this.imageStream.items.setValue(this.dictionaryProperties.height, new PdfNumber(this.height));\n this.imageStream.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n this.imageStream.items.setValue(this.dictionaryProperties.filter, new PdfName(this.dictionaryProperties.dctdecode));\n this.imageStream.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(this.getColorSpace()));\n this.imageStream.items.setValue(this.dictionaryProperties.decodeParms, this.getDecodeParams());\n return this.imageStream;\n }\n else {\n return this.imageStream;\n }\n };\n /**\n * Return `colorSpace` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getColorSpace = function () {\n return this.dictionaryProperties.deviceRgb;\n };\n /**\n * Return `decode parameters` of an image.\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getDecodeParams = function () {\n var decodeParams = new PdfDictionary();\n decodeParams.items.setValue(this.dictionaryProperties.columns, new PdfNumber(this.width));\n decodeParams.items.setValue(this.dictionaryProperties.blackIs1, new PdfBoolean(true));\n decodeParams.items.setValue(this.dictionaryProperties.k, new PdfNumber(-1));\n decodeParams.items.setValue(this.dictionaryProperties.predictor, new PdfNumber(15));\n decodeParams.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));\n return decodeParams;\n };\n /**\n * 'readExceededJPGImage' stream\n * @hidden\n * @private\n */\n ImageDecoder.prototype.readExceededJPGImage = function (stream) {\n this.mStream = stream;\n var isContinueReading = true;\n while (isContinueReading) {\n var marker = this.getMarker(stream);\n switch (marker) {\n case this.sof1Marker:\n case this.sof2Marker:\n case this.sof3Marker:\n case this.sof5Marker:\n case this.sof6Marker:\n case this.sof7Marker:\n case this.sof9Marker:\n case this.sof10Marker:\n case this.sof11Marker:\n case this.sof13Marker:\n case this.sof14Marker:\n case this.sof15Marker:\n stream.position += 3;\n this.mHeight = this.mStream.readNextTwoBytes(stream);\n this.mWidth = this.mStream.readNextTwoBytes(stream);\n isContinueReading = false;\n break;\n default:\n this.skipStream(stream);\n break;\n }\n }\n };\n /**\n * 'skip' stream\n * @hidden\n * @private\n */\n ImageDecoder.prototype.skip = function (stream, noOfBytes) {\n this.mStream = stream;\n var temp = new ByteArray(noOfBytes);\n this.mStream.read(temp, 0, temp.count);\n };\n /**\n * 'getMarker' stream\n * @hidden\n * @private\n */\n ImageDecoder.prototype.getMarker = function (stream) {\n var skippedByte = 0;\n var marker = 32;\n marker = stream.readByte(this.mStream.position);\n stream.position++;\n while (marker !== 255) {\n skippedByte++;\n marker = stream.readByte(this.mStream.position);\n stream.position++;\n }\n do {\n marker = stream.readByte(this.mStream.position);\n stream.position++;\n } while (marker === 255);\n return marker;\n };\n /**\n * 'skipStream' stream\n * @hidden\n * @private\n */\n ImageDecoder.prototype.skipStream = function (stream) {\n var markerLength = this.mStream.readNextTwoBytes(stream) - 2;\n if (markerLength > 0) {\n stream.position += markerLength;\n }\n };\n /**\n * Number array for `png header`.\n * @hidden\n * @private\n */\n ImageDecoder.mPngHeader = [137, 80, 78, 71, 13, 10, 26, 10];\n /**\n * Number Array for `jpeg header`.\n * @hidden\n * @private\n */\n ImageDecoder.mJpegHeader = [255, 216];\n /**\n * Number array for `gif header`.\n * @hidden\n * @private\n */\n ImageDecoder.GIF_HEADER = 'G,I,F,8';\n /**\n * Number array for `bmp header.`\n * @hidden\n * @private\n */\n ImageDecoder.BMP_HEADER = 'B,M';\n return ImageDecoder;\n}());\nexport { ImageDecoder };\n","/**\n * PdfTemplate.ts class for EJ2-PDF\n */\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfGraphics } from './../pdf-graphics';\nimport { PdfResources } from './../pdf-resources';\nimport { PdfName } from './../../primitives/pdf-name';\nimport { PointF, SizeF, RectangleF } from './../../drawing/pdf-drawing';\nimport { GetResourceEventHandler } from './../pdf-graphics';\n/**\n * Represents `Pdf Template` object.\n * @private\n */\nvar PdfTemplate = /** @class */ (function () {\n function PdfTemplate(arg1, arg2) {\n /**\n * Initialize an instance for `DictionaryProperties` class.\n * @private\n * @hidden\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the transformation 'is performed'.\n * @default true\n * @private\n */\n this.writeTransformation = true;\n if (typeof arg1 === 'undefined') {\n //\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.content = new PdfStream();\n var tempSize = new SizeF(arg1.width, arg1.height);\n this.setSize(tempSize);\n this.initialize();\n }\n else {\n this.content = new PdfStream();\n this.setSize(new SizeF(arg1, arg2));\n this.initialize();\n }\n }\n Object.defineProperty(PdfTemplate.prototype, \"size\", {\n //Properties\n /**\n * Gets the size of the 'PdfTemplate'.\n */\n get: function () {\n return this.templateSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"width\", {\n /**\n * Gets the width of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"height\", {\n /**\n * Gets the height of the 'PdfTemplate'.\n */\n get: function () {\n return this.size.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTemplate.prototype, \"graphics\", {\n /**\n * Gets the `graphics` of the 'PdfTemplate'.\n */\n get: function () {\n if (this.pdfGraphics == null || typeof this.pdfGraphics === 'undefined') {\n var gr = new GetResourceEventHandler(this);\n var g = new PdfGraphics(this.size, gr, this.content);\n this.pdfGraphics = g;\n // if(this.writeTransformation) {\n // Transform co-ordinates to Top/Left.\n this.pdfGraphics.initializeCoordinates();\n // }\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the resources and modifies the template dictionary.\n * @private\n */\n PdfTemplate.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.content.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n // Public methods\n /**\n * `Initialize` the type and subtype of the template.\n * @private\n */\n PdfTemplate.prototype.initialize = function () {\n this.addType();\n this.addSubType();\n };\n /**\n * `Adds type key`.\n * @private\n */\n PdfTemplate.prototype.addType = function () {\n var value = new PdfName(this.dictionaryProperties.xObject);\n this.content.items.setValue(this.dictionaryProperties.type, value);\n };\n /**\n * `Adds SubType key`.\n * @private\n */\n PdfTemplate.prototype.addSubType = function () {\n var value = new PdfName(this.dictionaryProperties.form);\n this.content.items.setValue(this.dictionaryProperties.subtype, value);\n };\n PdfTemplate.prototype.reset = function (size) {\n if (typeof size === 'undefined') {\n if (this.resources != null) {\n this.resources = null;\n this.content.remove(this.dictionaryProperties.resources);\n }\n if (this.graphics != null) {\n this.graphics.reset(this.size);\n }\n }\n else {\n this.setSize(size);\n this.reset();\n }\n };\n /**\n * `Set the size` of the 'PdfTemplate'.\n * @private\n */\n PdfTemplate.prototype.setSize = function (size) {\n var rect = new RectangleF(new PointF(0, 0), size);\n var val = PdfArray.fromRectangle(rect);\n this.content.items.setValue(this.dictionaryProperties.bBox, val);\n this.templateSize = size;\n };\n Object.defineProperty(PdfTemplate.prototype, \"element\", {\n // /**\n // * Returns the value of current graphics.\n // * @private\n // */\n // public GetGraphics(g : PdfGraphics) : PdfGraphics {\n // if (this.graphics == null || typeof this.graphics === 'undefined') {\n // this.graphics = g;\n // this.graphics.Size = this.Size;\n // this.graphics.StreamWriter = new PdfStreamWriter(this.content)\n // this.graphics.Initialize();\n // if(this.writeTransformation) {\n // this.graphics.InitializeCoordinates();\n // }\n // }\n // return this.graphics;\n // }\n // IPdfWrapper Members\n /**\n * Gets the `content stream` of 'PdfTemplate' class.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTemplate;\n}());\nexport { PdfTemplate };\n","/**\n * Used to perform `convertion between pixels and points`.\n * @private\n */\nvar PdfUnitConverter = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `UnitConvertor` class with DPI value.\n * @private\n */\n function PdfUnitConverter(dpi) {\n this.updateProportionsHelper(dpi);\n }\n /**\n * `Converts` the value, from one graphics unit to another graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertUnits = function (value, from, to) {\n return this.convertFromPixels(this.convertToPixels(value, from), to);\n };\n /**\n * Converts the value `to pixel` from specified graphics unit.\n * @private\n */\n PdfUnitConverter.prototype.convertToPixels = function (value, from) {\n var index = from;\n var result = (value * this.proportions[index]);\n return result;\n };\n /**\n * Converts value, to specified graphics unit `from Pixel`.\n * @private\n */\n PdfUnitConverter.prototype.convertFromPixels = function (value, to) {\n var index = to;\n var result = (value / this.proportions[index]);\n return result;\n };\n /**\n * `Update proportions` matrix according to Graphics settings.\n * @private\n */\n PdfUnitConverter.prototype.updateProportionsHelper = function (pixelPerInch) {\n this.proportions = [\n pixelPerInch / 2.54,\n pixelPerInch / 6.0,\n 1,\n pixelPerInch / 72.0,\n pixelPerInch,\n pixelPerInch / 300.0,\n pixelPerInch / 25.4 // Millimeter\n ];\n };\n //Fields\n /**\n * Indicates default `horizontal resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.horizontalResolution = 96;\n /**\n * Indicates default `vertical resolution`.\n * @default 96\n * @private\n */\n PdfUnitConverter.verticalResolution = 96;\n return PdfUnitConverter;\n}());\nexport { PdfUnitConverter };\n","import { SizeF } from './../../drawing/pdf-drawing';\nimport { PdfGraphicsUnit } from './../enum';\nimport { PdfUnitConverter } from './../unit-convertor';\n/**\n * `PdfImage` class represents the base class for images and provides functionality for the 'PdfBitmap' class.\n * @private\n */\nvar PdfImage = /** @class */ (function () {\n function PdfImage() {\n }\n Object.defineProperty(PdfImage.prototype, \"width\", {\n /**\n * Gets and Sets the `width` of an image.\n * @private\n */\n get: function () {\n return this.imageWidth;\n },\n set: function (value) {\n this.imageWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"height\", {\n /**\n * Gets and Sets the `height` of an image.\n * @private\n */\n get: function () {\n return this.imageHeight;\n },\n set: function (value) {\n this.imageHeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"size\", {\n /**\n * Gets or sets the size of the image.\n * @private\n */\n set: function (value) {\n this.width = value.width;\n this.height = value.height;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"physicalDimension\", {\n /**\n * Gets the `physical dimension` of an image.\n * @private\n */\n get: function () {\n this.imagePhysicalDimension = this.getPointSize(this.width, this.height, this.horizontalResolution, this.verticalResolution);\n return new SizeF(this.width, this.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfImage.prototype, \"element\", {\n // /**\n // * Gets the `image stream as string`.\n // * @private\n // */\n // public static fromString(string : string) : PdfImage {\n // let image : PdfImage = new PdfBitmap(string);\n // return image;\n // }\n /**\n * Gets the `element` image stream.\n * @private\n */\n get: function () {\n return this.imageStream;\n },\n enumerable: true,\n configurable: true\n });\n PdfImage.prototype.getPointSize = function (width, height, horizontalResolution, verticalResolution) {\n if (typeof horizontalResolution === 'undefined') {\n var dpiX = PdfUnitConverter.horizontalResolution;\n var dpiY = PdfUnitConverter.verticalResolution;\n var size = this.getPointSize(width, height, dpiX, dpiY);\n return size;\n }\n else {\n var ucX = new PdfUnitConverter(horizontalResolution);\n var ucY = new PdfUnitConverter(verticalResolution);\n var ptWidth = ucX.convertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var ptHeight = ucY.convertUnits(height, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);\n var size = new SizeF(ptWidth, ptHeight);\n return size;\n }\n };\n return PdfImage;\n}());\nexport { PdfImage };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfBitmap.ts class for EJ2-PDF\n */\nimport { ImageDecoder } from './../../graphics/images/image-decoder';\nimport { ByteArray } from './../../graphics/images/byte-array';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfImage } from './pdf-image';\n/**\n * The 'PdfBitmap' contains methods and properties to handle the Bitmap images.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfBitmap = /** @class */ (function (_super) {\n __extends(PdfBitmap, _super);\n /**\n * Create an instance for `PdfBitmap` class.\n * @param encodedString Base64 string of an image.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * // base64 string of an image\n * let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';\n * //\n * // load the image from the base64 string of original image.\n * let image : PdfBitmap = new PdfBitmap(imageString);\n * //\n * // draw the image\n * page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n function PdfBitmap(encodedString) {\n var _this = _super.call(this) || this;\n //Fields\n /**\n * Specifies the `status` of an image.\n * @default true.\n * @hidden\n * @private\n */\n _this.imageStatus = true;\n /**\n * Internal variable for accessing fields from `DictionryProperties` class.\n * @hidden\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n _this.loadImage(encodedString);\n return _this;\n }\n /**\n * `Load image`.\n * @hidden\n * @private\n */\n PdfBitmap.prototype.loadImage = function (encodedString) {\n var task = this.initializeAsync(encodedString);\n };\n /**\n * `Initialize` image parameters.\n * @private\n */\n PdfBitmap.prototype.initializeAsync = function (encodedString) {\n var byteArray = new ByteArray(encodedString.length);\n byteArray.writeFromBase64String(encodedString);\n this.decoder = new ImageDecoder(byteArray);\n this.height = this.decoder.height;\n this.width = this.decoder.width;\n // FrameCount = BitmapImageDecoder.FrameCount;\n this.bitsPerComponent = this.decoder.bitsPerComponent;\n };\n /**\n * `Saves` the image into stream.\n * @private\n */\n PdfBitmap.prototype.save = function () {\n this.imageStatus = true;\n this.imageStream = this.decoder.getImageDictionary();\n };\n return PdfBitmap;\n}(PdfImage));\nexport { PdfBitmap };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfResources.ts class for EJ2-PDF\n */\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTemplate } from './figures/pdf-template';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfBitmap } from './../graphics/images/pdf-bitmap';\nimport { PdfImage } from './../graphics/images/pdf-image';\nimport { PdfGradientBrush } from './brushes/pdf-gradient-brush';\nimport { PdfTilingBrush } from './brushes/pdf-tiling-brush';\n/**\n * `PdfResources` class used to set resource contents like font, image.\n * @private\n */\nvar PdfResources = /** @class */ (function (_super) {\n __extends(PdfResources, _super);\n function PdfResources(baseDictionary) {\n var _this = _super.call(this, baseDictionary) || this;\n /**\n * Dictionary for the `properties names`.\n * @private\n */\n _this.properties = new PdfDictionary();\n return _this;\n }\n Object.defineProperty(PdfResources.prototype, \"names\", {\n //Properties\n /**\n * Gets the `font names`.\n * @private\n */\n get: function () {\n return this.getNames();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfResources.prototype, \"document\", {\n /**\n * Get or set the `page document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n set: function (value) {\n this.pdfDocument = value;\n },\n enumerable: true,\n configurable: true\n });\n //Public Methods\n /**\n * `Generates name` for the object and adds to the resource if the object is new.\n * @private\n */\n PdfResources.prototype.getName = function (obj) {\n var primitive = obj.element;\n var name = null;\n if (this.names.containsKey(primitive)) {\n name = this.names.getValue(primitive);\n }\n // Object is new.\n if (name == null) {\n var sName = this.generateName();\n name = new PdfName(sName);\n this.names.setValue(primitive, name);\n if (obj instanceof PdfFont) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTemplate) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfGradientBrush || obj instanceof PdfTilingBrush) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfTransparency) {\n this.add(obj, name);\n }\n else if (obj instanceof PdfImage || obj instanceof PdfBitmap) {\n this.add(obj, name);\n }\n }\n return name;\n };\n /**\n * Gets `resource names` to font dictionaries.\n * @private\n */\n PdfResources.prototype.getNames = function () {\n if (this.pdfNames == null) {\n this.pdfNames = new TemporaryDictionary();\n }\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n var dictionary = fonts;\n dictionary = PdfCrossTable.dereference(fonts);\n }\n return this.pdfNames;\n };\n /**\n * Add `RequireProcedureSet` into procset array.\n * @private\n */\n PdfResources.prototype.requireProcedureSet = function (procedureSetName) {\n if (procedureSetName == null) {\n throw new Error('ArgumentNullException:procedureSetName');\n }\n var procSets = this.items.getValue(this.dictionaryProperties.procset);\n if (procSets == null) {\n procSets = new PdfArray();\n this.items.setValue(this.dictionaryProperties.procset, procSets);\n }\n var name = new PdfName(procedureSetName);\n if (!procSets.contains(name)) {\n procSets.add(name);\n }\n };\n //Helper Methods\n /**\n * `Remove font` from array.\n * @private\n */\n PdfResources.prototype.removeFont = function (name) {\n var key = null;\n var keys = this.pdfNames.keys();\n for (var index = 0; index < this.pdfNames.size(); index++) {\n if (this.pdfNames.getValue(keys[index]) === new PdfName(name)) {\n key = keys[index];\n break;\n }\n }\n if (key != null) {\n this.pdfNames.remove(key);\n }\n };\n /**\n * Generates `Unique string name`.\n * @private\n */\n PdfResources.prototype.generateName = function () {\n var name = Guid.getNewGuidString();\n return name;\n };\n PdfResources.prototype.add = function (arg1, arg2) {\n if (arg1 instanceof PdfFont) {\n var dictionary = null;\n var fonts = this.items.getValue(this.dictionaryProperties.font);\n if (fonts != null) {\n var reference = fonts;\n dictionary = fonts;\n dictionary = fonts;\n }\n else {\n dictionary = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.font, dictionary);\n }\n dictionary.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfTemplate) {\n var xobjects = void 0;\n xobjects = this.items.getValue(this.dictionaryProperties.xObject);\n // Create fonts dictionary.\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n xobjects.items.setValue(arg2.value, new PdfReferenceHolder(arg1.element));\n }\n else if (arg1 instanceof PdfBrush) {\n if (arg1 instanceof PdfGradientBrush || arg1 instanceof PdfTilingBrush) {\n var savable = arg1.element;\n if (savable != null) {\n var pattern = this.items.getValue(this.dictionaryProperties.pattern);\n // Create a new pattern dictionary.\n if (pattern == null) {\n pattern = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.pattern, pattern);\n }\n pattern.items.setValue(arg2.value, new PdfReferenceHolder(savable));\n }\n }\n }\n else if (arg1 instanceof PdfTransparency) {\n var savable = arg1.element;\n var transDic = null;\n transDic = this.items.getValue(this.dictionaryProperties.extGState);\n // Create a new pattern dictionary.\n if (transDic == null) {\n transDic = new PdfDictionary();\n this.items.setValue(this.dictionaryProperties.extGState, transDic);\n }\n transDic.items.setValue(arg2.value, new PdfReferenceHolder(savable));\n }\n else {\n /* tslint:disable */\n var xobjects = this.Dictionary.items.getValue(this.dictionaryProperties.xObject);\n var parentXObjects = void 0;\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects = this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.getValue(this.dictionaryProperties.xObject);\n }\n var values = this.Dictionary.items.values();\n var hasSameImageStream = false;\n var oldReference = void 0;\n if (typeof this.pdfDocument !== 'undefined' && (typeof parentXObjects === undefined || parentXObjects == null)) {\n parentXObjects = new PdfDictionary();\n this.pdfDocument.sections.element.items.getValue(this.dictionaryProperties.resources).items.setValue(this.dictionaryProperties.xObject, parentXObjects);\n }\n else if (typeof this.pdfDocument !== 'undefined') {\n var values_1 = parentXObjects.items.values();\n for (var i = 0; i < values_1.length; i++) {\n if (typeof values_1[i] !== 'undefined' && typeof values_1[i].element !== 'undefined') {\n if (values_1[i].element.data[0] === arg1.element.data[0]) {\n oldReference = values_1[i];\n hasSameImageStream = true;\n }\n }\n }\n }\n if (xobjects == null) {\n xobjects = new PdfDictionary();\n this.Dictionary.items.setValue(this.dictionaryProperties.xObject, xobjects);\n }\n if (hasSameImageStream && typeof oldReference !== 'undefined') {\n xobjects.items.setValue(arg2.value, oldReference);\n }\n else {\n var reference = new PdfReferenceHolder(arg1.element);\n xobjects.items.setValue(arg2.value, reference);\n if (typeof this.pdfDocument !== 'undefined') {\n parentXObjects.items.setValue(arg2.value, reference);\n }\n }\n /* tslint:enable */\n }\n };\n return PdfResources;\n}(PdfDictionary));\nexport { PdfResources };\n/* tslint:disable */\n/**\n * Used to create new guid for resources.\n * @private\n */\nvar Guid = /** @class */ (function () {\n function Guid() {\n }\n /**\n * Generate `new GUID`.\n * @private\n */\n Guid.getNewGuidString = function () {\n return 'aaaaaaaa-aaaa-4aaa-baaa-aaaaaaaaaaaa'.replace(/[ab]/g, function (c) {\n var random = Math.random() * 16 | 0;\n var result = c === 'a' ? random : (random & 0x3 | 0x8);\n return result.toString(16);\n });\n };\n return Guid;\n}());\nexport { Guid };\n/* tslint:enable */ \n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { GetResourceEventHandler } from './../pdf-graphics';\nimport { PdfBrush } from './pdf-brush';\nimport { PointF, SizeF, RectangleF, Rectangle } from './../../drawing/pdf-drawing';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfArray } from './../../primitives/pdf-array';\nimport { PdfNumber } from './../../primitives/pdf-number';\nimport { PdfGraphics } from './../pdf-graphics';\nimport { PdfResources } from './../pdf-resources';\nimport { PdfStream } from './../../primitives/pdf-stream';\nimport { PdfPage } from './../../pages/pdf-page';\n/**\n * `PdfTilingBrush` Implements a colored tiling brush.\n */\nvar PdfTilingBrush = /** @class */ (function (_super) {\n __extends(PdfTilingBrush, _super);\n /**\n * Initializes a new instance of the `PdfTilingBrush` class.\n * @public\n */\n function PdfTilingBrush(arg1, arg2) {\n var _this = _super.call(this) || this;\n /**\n * Local variable to store Stroking.\n * @private\n */\n _this.mStroking = false;\n /**\n * Local variable to store the tile start location.\n * @private\n */\n _this.mLocation = new PointF(0, 0);\n /**\n * Local variable to store the dictionary properties.\n * @private\n */\n _this.mDictionaryProperties = new DictionaryProperties();\n var rect = null;\n if (arg1 instanceof Rectangle) {\n rect = arg1;\n }\n else if (arg1 instanceof SizeF) {\n rect = new Rectangle(0, 0, arg1.width, arg1.height);\n }\n if (arg2 !== null && arg2 instanceof PdfPage) {\n _this.mPage = arg2;\n }\n _this.brushStream = new PdfStream();\n _this.mResources = new PdfResources();\n _this.brushStream.items.setValue(_this.mDictionaryProperties.resources, _this.mResources);\n _this.setBox(rect);\n _this.setObligatoryFields();\n if (arg2 !== null && arg2 instanceof PdfPage) {\n _this.mPage = arg2;\n _this.graphics.colorSpace = arg2.document.colorSpace;\n }\n return _this;\n }\n /**\n * Initializes a new instance of the `PdfTilingBrush` class.\n * @private\n * @param rectangle The size of the smallest brush cell.\n * @param page The Current Page Object.\n * @param location The Tile start location.\n * @param matrix The matrix.\n */\n PdfTilingBrush.prototype.initialize = function (rectangle, page, location, matrix) {\n this.mPage = page;\n this.mLocation = location;\n this.mTransformationMatrix = matrix;\n this.tempBrushStream = this.brushStream;\n this.brushStream = new PdfStream();\n var tempResource = new PdfResources();\n this.brushStream.items.setValue(this.mDictionaryProperties.resources, tempResource);\n this.setBox(rectangle);\n this.setObligatoryFields();\n return this;\n };\n Object.defineProperty(PdfTilingBrush.prototype, \"location\", {\n //Properties\n /**\n * Location representing the start position of the tiles.\n * @public\n */\n get: function () {\n return this.mLocation;\n },\n set: function (value) {\n this.mLocation = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the obligatory fields.\n * @private\n */\n PdfTilingBrush.prototype.setObligatoryFields = function () {\n this.brushStream.items.setValue(this.mDictionaryProperties.patternType, new PdfNumber(1));\n // Tiling brush.\n this.brushStream.items.setValue(this.mDictionaryProperties.paintType, new PdfNumber(1));\n // Coloured.\n this.brushStream.items.setValue(this.mDictionaryProperties.tilingType, new PdfNumber(1));\n // Constant spacing.\n this.brushStream.items.setValue(this.mDictionaryProperties.xStep, new PdfNumber((this.mBox.right - this.mBox.left)));\n this.brushStream.items.setValue(this.mDictionaryProperties.yStep, new PdfNumber((this.mBox.bottom - this.mBox.top)));\n if ((this.mPage != null) && (this.mLocation != null)) {\n if ((this.mTransformationMatrix == null && typeof this.mTransformationMatrix === 'undefined')) {\n // Transform the tile origin to fit the location\n var tileTransform = (this.mPage.size.height % this.rectangle.size.height) - (this.mLocation.y);\n /* tslint:disable-next-line:max-line-length */\n this.brushStream.items.setValue(this.mDictionaryProperties.matrix, new PdfArray([1, 0, 0, 1, this.mLocation.x, tileTransform]));\n }\n else {\n var tileTransform = 0;\n // Transform the tile origin to fit the location\n var elements = this.mTransformationMatrix.matrix.elements;\n if ((this.mPage.size.height > this.rectangle.size.height)) {\n tileTransform = (this.mTransformationMatrix.matrix.offsetY\n - (this.mPage.size.height % this.rectangle.size.height));\n }\n else {\n tileTransform = ((this.mPage.size.height % this.rectangle.size.height) + this.mTransformationMatrix.matrix.offsetY);\n }\n this.brushStream.items.setValue(this.mDictionaryProperties.matrix, new PdfArray([\n elements[0], elements[1], elements[2], elements[3], elements[4], tileTransform\n ]));\n }\n }\n };\n /**\n * Sets the BBox coordinates.\n * @private\n */\n PdfTilingBrush.prototype.setBox = function (box) {\n this.mBox = box;\n var rect = new RectangleF(this.mBox.left, this.mBox.top, this.mBox.right, this.mBox.bottom);\n this.brushStream.items.setValue(this.mDictionaryProperties.bBox, PdfArray.fromRectangle(rect));\n };\n Object.defineProperty(PdfTilingBrush.prototype, \"rectangle\", {\n //Properties\n /**\n * Gets the boundary box of the smallest brush cell.\n * @public\n */\n get: function () {\n return this.mBox;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTilingBrush.prototype, \"size\", {\n /**\n * Gets the size of the smallest brush cell.\n * @public\n */\n get: function () {\n return this.mBox.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfTilingBrush.prototype, \"graphics\", {\n /**\n * Gets Graphics context of the brush.\n */\n get: function () {\n if ((this.mGraphics == null && typeof this.mGraphics === 'undefined')) {\n var gr = new GetResourceEventHandler(this);\n var g = new PdfGraphics(this.size, gr, this.brushStream);\n this.mGraphics = g;\n this.mResources = this.getResources();\n this.mGraphics.initializeCoordinates();\n }\n return this.mGraphics;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the resources and modifies the template dictionary.\n * @public\n */\n PdfTilingBrush.prototype.getResources = function () {\n return this.mResources;\n };\n Object.defineProperty(PdfTilingBrush.prototype, \"stroking\", {\n /**\n * Gets or sets a value indicating whether this PdfTilingBrush\n * is used for stroking operations.\n */\n get: function () {\n return this.mStroking;\n },\n set: function (value) {\n this.mStroking = value;\n },\n enumerable: true,\n configurable: true\n });\n //PdfBrush methods\n /**\n * Creates a new copy of a brush.\n * @public\n */\n PdfTilingBrush.prototype.clone = function () {\n var brush = this.initialize(this.rectangle, this.mPage, this.location, this.mTransformationMatrix);\n if ((this.mTransformationMatrix != null) && (this.mTransformationMatrix.matrix != null)) {\n /* tslint:disable-next-line:max-line-length */\n brush.brushStream.items.setValue(this.mDictionaryProperties.matrix, new PdfArray(this.mTransformationMatrix.matrix.elements));\n }\n brush.brushStream.data = this.tempBrushStream.data;\n brush.mResources = new PdfResources(this.mResources);\n brush.brushStream.items.setValue(this.mDictionaryProperties.resources, brush.mResources);\n return brush;\n };\n /**\n * Monitors the changes of the brush and modify PDF state respectfully.\n * @param brush The brush\n * @param streamWriter The stream writer\n * @param getResources The get resources delegate.\n * @param saveChanges if set to true the changes should be saved anyway.\n * @param currentColorSpace The current color space.\n */\n /* tslint:disable-next-line:max-line-length */\n PdfTilingBrush.prototype.monitorChanges = function (brush, streamWriter, getResources, saveChanges, currentColorSpace) {\n var diff = false;\n if (brush !== this) {\n // Set the Pattern colour space.\n streamWriter.setColorSpace('Pattern', this.mStroking);\n // Set the pattern for non-stroking operations.\n var resources1 = getResources.getResources();\n var name1 = resources1.getName(this);\n streamWriter.setColourWithPattern(null, name1, this.mStroking);\n diff = true;\n }\n else if (brush instanceof PdfTilingBrush) {\n // Set the /Pattern colour space.\n streamWriter.setColorSpace('Pattern', this.mStroking);\n // Set the pattern for non-stroking operations.\n var resources = getResources.getResources();\n var name_1 = resources.getName(this);\n streamWriter.setColourWithPattern(null, name_1, this.mStroking);\n diff = true;\n }\n return diff;\n };\n /**\n * Resets the changes, which were made by the brush.\n * In other words resets the state to the initial one.\n * @param streamWriter The stream writer.\n */\n PdfTilingBrush.prototype.resetChanges = function (streamWriter) {\n // We shouldn't do anything to reset changes.\n // All changes will be reset automatically by setting a new colour space.\n };\n Object.defineProperty(PdfTilingBrush.prototype, \"element\", {\n /* tslint:enable */\n // IPdfWrapper Members\n /**\n * Gets the `element`.\n * @public\n */\n get: function () {\n return this.brushStream;\n },\n enumerable: true,\n configurable: true\n });\n return PdfTilingBrush;\n}(PdfBrush));\nexport { PdfTilingBrush };\n","/**\n * PdfGraphics.ts class for EJ2-PDF\n */\nimport { PdfColorSpace, TextRenderingMode, PdfFillMode, PdfTextAlignment } from './enum';\nimport { PdfVerticalAlignment, PdfBlendMode } from './enum';\nimport { PdfSubSuperScript } from './fonts/enum';\nimport { PdfStreamWriter } from './../input-output/pdf-stream-writer';\nimport { PdfPen } from './pdf-pen';\nimport { PdfBrush } from './brushes/pdf-brush';\nimport { PdfSolidBrush } from './brushes/pdf-solid-brush';\nimport { PdfFont } from './fonts/pdf-font';\nimport { PdfTransformationMatrix, Matrix } from './pdf-transformation-matrix';\nimport { PointF, SizeF, RectangleF } from './../drawing/pdf-drawing';\nimport { ProcedureSets } from './constants';\nimport { PdfString } from './../primitives/pdf-string';\nimport { PdfStringFormat } from './fonts/pdf-string-format';\nimport { TemporaryDictionary } from './../collections/object-object-pair/dictionary';\nimport { PdfTransparency } from './pdf-transparency';\nimport { PdfStringLayouter, LineType } from './fonts/string-layouter';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { StringTokenizer } from './fonts/string-tokenizer';\nimport { PdfAutomaticFieldInfoCollection } from './../document/automatic-fields/automatic-field-info-collection';\nimport { PdfAutomaticFieldInfo } from './../document/automatic-fields/automatic-field-info';\nimport { Operators } from './../input-output/pdf-operators';\nimport { UnicodeTrueTypeFont } from './fonts/unicode-true-type-font';\nimport { InternalEnum } from './../primitives/pdf-string';\nimport { RtlRenderer } from './fonts/rtl-renderer';\nimport { PdfTextDirection } from './enum';\nimport { PathPointType } from './figures/enum';\nimport { PdfGradientBrush } from './../../implementation/graphics/brushes/pdf-gradient-brush';\nimport { PdfTilingBrush } from './brushes/pdf-tiling-brush';\n/**\n * `PdfGraphics` class represents a graphics context of the objects.\n * It's used for performing all the graphics operations.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * //graphics of the page\n * let page1Graphics : PdfGraphics = page1.graphics;\n * // draw the text on the page1 graphics\n * page1Graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfGraphics = /** @class */ (function () {\n function PdfGraphics(arg1, arg2, arg3) {\n /**\n * Represents the `Current color space`.\n * @private\n */\n this.currentColorSpace = PdfColorSpace.Rgb;\n /**\n * Stores `previous rendering mode`.\n * @private\n */\n this.previousTextRenderingMode = TextRenderingMode.Fill;\n /**\n * Previous `character spacing` value or 0.\n * @private\n */\n this.previousCharacterSpacing = 0.0;\n /**\n * Previous `word spacing` value or 0.\n * @private\n */\n this.previousWordSpacing = 0.0;\n /**\n * The `previously used text scaling` value.\n * @private\n */\n this.previousTextScaling = 100.0;\n /**\n * Instance of `ProcedureSets` class.\n * @private\n */\n this.procedureSets = new ProcedureSets();\n /**\n * To check wihether it is a `direct text rendering`.\n * @default true\n * @private\n */\n this.isNormalRender = true;\n /**\n * check whether to `use font size` to calculate the shift.\n * @default false\n * @private\n */\n this.isUseFontSize = false;\n /**\n * check whether the font is in `italic type`.\n * @default false\n * @private\n */\n this.isItalic = false;\n /**\n * Check whether it is an `emf Text Matrix`.\n * @default false\n * @private\n */\n this.isEmfTextScaled = false;\n /**\n * Check whether it is an `emf` call.\n * @default false\n * @private\n */\n this.isEmf = false;\n /**\n * Check whether it is an `emf plus` call.\n * @default false\n * @private\n */\n this.isEmfPlus = false;\n /**\n * Check whether it is in `base line format`.\n * @default true\n * @private\n */\n this.isBaselineFormat = true;\n /**\n * Emf Text `Scaling Factor`.\n * @private\n */\n this.emfScalingFactor = new SizeF(0, 0);\n /**\n * To check whether the `last color space` of document and garphics is saved.\n * @private\n */\n this.colorSpaceChanged = false;\n /**\n * Stores an instance of `DictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isOverloadWithPosition = false;\n /**\n * Checks whether the x co-ordinate is need to set as client size or not.\n * @hidden\n * @private\n */\n this.isPointOverload = false;\n /**\n * Current colorspaces.\n * @hidden\n * @private\n */\n this.currentColorSpaces = ['RGB', 'CMYK', 'GrayScale', 'Indexed'];\n /**\n * Checks the current image `is optimized` or not.\n * @default false.\n * @private\n */\n this.isImageOptimized = false;\n /**\n * Stores the `graphics states`.\n * @private\n */\n this.graphicsState = [];\n /**\n * Indicates whether the object `had trasparency`.\n * @default false\n * @private\n */\n this.istransparencySet = false;\n /**\n * Stores the instance of `PdfAutomaticFieldInfoCollection` class .\n * @default null\n * @private\n */\n this.internalAutomaticFields = null;\n /**\n * Stores the index of the start line that should draw with in the next page.\n * @private\n */\n this.startCutIndex = -1;\n this.getResources = arg2;\n this.canvasSize = arg1;\n if (arg3 instanceof PdfStreamWriter) {\n this.pdfStreamWriter = arg3;\n }\n else {\n this.pdfStreamWriter = new PdfStreamWriter(arg3);\n }\n this.initialize();\n }\n Object.defineProperty(PdfGraphics.prototype, \"stringLayoutResult\", {\n // Properties\n /**\n * Returns the `result` after drawing string.\n * @private\n */\n get: function () {\n return this.pdfStringLayoutResult;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"size\", {\n /**\n * Gets the `size` of the canvas.\n * @private\n */\n get: function () {\n return this.canvasSize;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"mediaBoxUpperRightBound\", {\n /**\n * Gets and Sets the value of `MediaBox upper right bound`.\n * @private\n */\n get: function () {\n if (typeof this.internalMediaBoxUpperRightBound === 'undefined') {\n this.internalMediaBoxUpperRightBound = 0;\n }\n return this.internalMediaBoxUpperRightBound;\n },\n set: function (value) {\n this.internalMediaBoxUpperRightBound = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"clientSize\", {\n /**\n * Gets the `size` of the canvas reduced by margins and page templates.\n * @private\n */\n get: function () {\n return new SizeF(this.clipBounds.width, this.clipBounds.height);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"colorSpace\", {\n /**\n * Gets or sets the current `color space` of the document\n * @private\n */\n get: function () {\n return this.currentColorSpace;\n },\n set: function (value) {\n this.currentColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"streamWriter\", {\n /**\n * Gets the `stream writer`.\n * @private\n */\n get: function () {\n return this.pdfStreamWriter;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"matrix\", {\n /**\n * Gets the `transformation matrix` reflecting current transformation.\n * @private\n */\n get: function () {\n if (this.transformationMatrix == null) {\n this.transformationMatrix = new PdfTransformationMatrix();\n }\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"layer\", {\n /**\n * Gets the `layer` for the graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"page\", {\n /**\n * Gets the `page` for this graphics, if exists.\n * @private\n */\n get: function () {\n return this.pageLayer.page;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphics.prototype, \"automaticFields\", {\n get: function () {\n if (this.internalAutomaticFields == null || typeof this.internalAutomaticFields === 'undefined') {\n this.internalAutomaticFields = new PdfAutomaticFieldInfoCollection();\n }\n return this.internalAutomaticFields;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` this instance.\n * @private\n */\n PdfGraphics.prototype.initialize = function () {\n this.bStateSaved = false;\n this.currentPen = null;\n this.currentBrush = null;\n this.currentFont = null;\n this.currentColorSpace = PdfColorSpace.Rgb;\n this.bCSInitialized = false;\n this.transformationMatrix = null;\n this.previousTextRenderingMode = (-1); //.Fill;\n this.previousCharacterSpacing = -1.0;\n this.previousWordSpacing = -1.0;\n this.previousTextScaling = -100.0;\n // this.m_trasparencies = null;\n this.currentStringFormat = null;\n this.clipBounds = new RectangleF(new PointF(0, 0), this.size);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n };\n PdfGraphics.prototype.drawPdfTemplate = function (template, location, size) {\n if (typeof size === 'undefined') {\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n this.drawPdfTemplate(template, location, template.size);\n }\n else {\n // let crossTable : PdfCrossTable = null;\n // if (this.pageLayer != null) {\n // crossTable = (this.page as PdfPage).section.parentDocument.crossTable;\n // }\n if (template == null) {\n throw Error('ArgumentNullException-template');\n }\n var scaleX = (template.width > 0) ? size.width / template.width : 1;\n var scaleY = (template.height > 0) ? size.height / template.height : 1;\n var bNeedScale = !(scaleX === 1 && scaleY === 1);\n // Save state.\n var state = this.save();\n // Take into consideration that rect location is bottom/left.\n var matrix = new PdfTransformationMatrix();\n if (this.pageLayer != null) {\n this.getTranslateTransform(location.x, location.y + size.height, matrix);\n }\n if (bNeedScale) {\n this.getScaleTransform(scaleX, scaleY, matrix);\n }\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n var name_1 = resources.getName(template);\n this.pdfStreamWriter.executeObject(name_1);\n // Restore state.\n this.restore(state);\n //Transfer automatic fields from template.\n var g = template.graphics;\n if (g != null) {\n for (var index = 0; index < g.automaticFields.automaticFields.length; index++) {\n var fieldInfo = g.automaticFields.automaticFields[index];\n var newLocation = new PointF(fieldInfo.location.x + location.x, fieldInfo.location.y + location.y);\n var scalingX = template.size.width == 0 ? 0 : size.width / template.size.width;\n var scalingY = template.size.height == 0 ? 0 : size.height / template.size.height;\n this.automaticFields.add(new PdfAutomaticFieldInfo(fieldInfo.field, newLocation, scalingX, scalingY));\n this.page.dictionary.modify();\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageB);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageC);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.imageI);\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n }\n };\n /**\n * @public\n */\n PdfGraphics.prototype.drawString = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {\n if (typeof arg1 === 'string' && arg2 instanceof PdfFont && (arg3 instanceof PdfPen || arg3 === null) && (arg4 instanceof PdfBrush || arg4 === null) && typeof arg5 === 'number' && typeof arg6 === 'number' && (arg7 instanceof PdfStringFormat || arg7 === null) && typeof arg8 === 'undefined') {\n this.isOverloadWithPosition = true;\n this.drawString(arg1, arg2, arg3, arg4, arg5, arg6, (this.clientSize.width - arg5), 0, arg7);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n var temparg7 = arg7;\n var temparg8 = arg8;\n var temparg9 = arg9;\n var layouter = new PdfStringLayouter();\n var result = layouter.layout(arg1, arg2, temparg9, new SizeF(temparg7, temparg8), this.isOverloadWithPosition, this.clientSize);\n if (!result.empty) {\n var rect = this.checkCorrectLayoutRectangle(result.actualSize, temparg5, temparg6, temparg9);\n if (temparg7 <= 0) {\n temparg5 = rect.x;\n temparg7 = rect.width;\n }\n if (temparg8 <= 0) {\n temparg6 = rect.y;\n temparg8 = rect.height;\n }\n this.drawStringLayoutResult(result, arg2, temparg3, temparg4, new RectangleF(temparg5, temparg6, temparg7, temparg8), temparg9);\n this.isEmfTextScaled = false;\n this.emfScalingFactor = new SizeF(0, 0);\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n this.isNormalRender = true;\n this.pdfStringLayoutResult = result;\n this.isUseFontSize = false;\n }\n };\n PdfGraphics.prototype.drawLine = function (arg1, arg2, arg3, arg4, arg5) {\n if (arg2 instanceof PointF) {\n var temparg2 = arg2;\n var temparg3 = arg3;\n this.drawLine(arg1, temparg2.x, temparg2.y, temparg3.x, temparg3.y);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n this.stateControl(arg1, null, null);\n var sw = this.streamWriter;\n sw.beginPath(temparg2, temparg3);\n sw.appendLineSegment(temparg4, temparg5);\n sw.strokePath();\n this.getResources.getResources().requireProcedureSet(this.procedureSets.pdf);\n }\n };\n PdfGraphics.prototype.drawRectangle = function (arg1, arg2, arg3, arg4, arg5, arg6) {\n if (arg1 instanceof PdfPen && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(arg1, null, arg2, temparg3, arg4, arg5);\n }\n else if (arg1 instanceof PdfBrush && typeof arg2 === 'number') {\n var temparg3 = arg3;\n this.drawRectangle(null, arg1, arg2, temparg3, arg4, arg5);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n var temparg6 = arg6;\n if ((arg2 instanceof PdfTilingBrush)) {\n this.bCSInitialized = false;\n var xOffset = (this.matrix.matrix.offsetX + temparg3);\n var yOffset = void 0;\n if (((this.layer != null) && (this.layer.page != null))) {\n yOffset = ((this.layer.page.size.height - this.matrix.matrix.offsetY) + temparg4);\n }\n else {\n yOffset = ((this.clientSize.height - this.matrix.matrix.offsetY) + temparg4);\n }\n (arg2).location = new PointF(xOffset, yOffset);\n (arg2).graphics.colorSpace = this.colorSpace;\n }\n else if ((arg2 instanceof PdfGradientBrush)) {\n arg2.colorSpace = this.colorSpace;\n }\n if (arg2 instanceof PdfSolidBrush && arg2.color.isEmpty) {\n arg2 = null;\n }\n var temparg1 = arg1;\n var temparg2 = arg2;\n this.stateControl(temparg1, temparg2, null);\n this.streamWriter.appendRectangle(temparg3, temparg4, temparg5, temparg6);\n this.drawPathHelper(temparg1, temparg2, false);\n }\n };\n /**\n * Draw rounded rectangle specified by a brush, pen, coordinate pair, a width, a height and a radius.\n * ```typescript\n * // Create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // Create a new page\n * let page : PdfPage = document.pages.add();\n * // Create brush for draw rectangle\n * let brush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(238, 130, 238));\n * // Create a new PDF pen\n * let pen: PdfPen = new PdfPen(new PdfColor(255, 0, 0), 1);\n * // Draw rounded rectangle\n * page.graphics.drawRoundedRectangle(pen, brush, 20, 20, 100, 50, 5);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param pen Stoke color of the rectangle.\n * @param brush Fill color of the rectangle.\n * @param x The x-coordinate of the upper-left corner of the rectangle to draw.\n * @param y The y-coordinate of the upper-left corner of the rectangle to draw.\n * @param width Width of the rectangle to draw.\n * @param height Height of the rectangle to draw.\n * @param radius Radius of the arcs to draw.\n */\n PdfGraphics.prototype.drawRoundedRectangle = function (pen, brush, x, y, width, height, radius) {\n if (pen === null) {\n throw new Error('pen');\n }\n if (brush === null) {\n throw new Error('brush');\n }\n if (radius === 0) {\n this.drawRectangle(pen, brush, x, y, width, height);\n }\n else {\n var bounds = [x, y, width, height];\n var diameter = radius * 2;\n var size = [diameter, diameter];\n var arc = [bounds[0], bounds[1], size[0], size[1]];\n this._pathPoints = [];\n this._pathTypes = [];\n var startFigure = true;\n startFigure = this._addArc(arc[0], arc[1], arc[2], arc[3], 180, 90, startFigure);\n arc[0] = (bounds[0] + bounds[2]) - diameter;\n startFigure = this._addArc(arc[0], arc[1], arc[2], arc[3], 270, 90, startFigure);\n arc[1] = (bounds[1] + bounds[3]) - diameter;\n startFigure = this._addArc(arc[0], arc[1], arc[2], arc[3], 0, 90, startFigure);\n arc[0] = bounds[0];\n startFigure = this._addArc(arc[0], arc[1], arc[2], arc[3], 90, 90, startFigure);\n var index = this._pathPoints.length - 1;\n var type = ((this._pathTypes[index]));\n type = (type | PathPointType.CloseSubpath);\n this._pathTypes[index] = (type);\n this._drawPath(pen, brush, this._pathPoints, this._pathTypes, PdfFillMode.Alternate);\n this._pathPoints = [];\n this._pathTypes = [];\n }\n };\n PdfGraphics.prototype._addArc = function (x, y, width, height, startAngle, sweepAngle, startFigure) {\n var points = this._getBezierArcPoints(x, y, (x + width), (y + height), startAngle, sweepAngle);\n for (var i = 0; i < points.length; i = i + 8) {\n var point = [points[i], points[i + 1], points[i + 2], points[i + 3], points[i + 4], points[i + 5], points[i + 6], points[i + 7]];\n startFigure = this._addArcPoints(point, PathPointType.Bezier3, startFigure);\n }\n return startFigure;\n };\n PdfGraphics.prototype._addArcPoints = function (points, pointType, startFigure) {\n for (var i = 0; i < points.length; i++) {\n var point = new PointF(points[i], points[(i + 1)]);\n if (i === 0) {\n if (this._pathPoints.length === 0 || startFigure) {\n this._addPoint(point, PathPointType.Start);\n startFigure = false;\n }\n else if (point.x !== this._getLastPoint().x || point.y !== this._getLastPoint().y) {\n this._addPoint(point, PathPointType.Line);\n }\n }\n else {\n this._addPoint(point, pointType);\n }\n i++;\n }\n return startFigure;\n };\n PdfGraphics.prototype._getLastPoint = function () {\n var lastPoint = new PointF(0, 0);\n var count = this._pathPoints.length;\n if (count > 0) {\n lastPoint.x = this._pathPoints[(count - 1)].x;\n lastPoint.y = this._pathPoints[(count - 1)].y;\n }\n return lastPoint;\n };\n PdfGraphics.prototype._addPoint = function (point, type) {\n this._pathPoints.push(point);\n this._pathTypes.push(type);\n };\n PdfGraphics.prototype._getBezierArcPoints = function (x1, y1, x2, y2, s1, e1) {\n if ((x1 > x2)) {\n var tmp = void 0;\n tmp = x1;\n x1 = x2;\n x2 = tmp;\n }\n if ((y2 > y1)) {\n var tmp = void 0;\n tmp = y1;\n y1 = y2;\n y2 = tmp;\n }\n var fragAngle;\n var numFragments;\n if ((Math.abs(e1) <= 90)) {\n fragAngle = e1;\n numFragments = 1;\n }\n else {\n numFragments = (Math.ceil((Math.abs(e1) / 90)));\n fragAngle = (e1 / numFragments);\n }\n var xcen = ((x1 + x2) / 2);\n var ycen = ((y1 + y2) / 2);\n var rx = ((x2 - x1) / 2);\n var ry = ((y2 - y1) / 2);\n var halfAng = ((fragAngle * (Math.PI / 360)));\n var kappa = (Math.abs(4.0 / 3.0 * (1.0 - Math.cos(halfAng)) / Math.sin(halfAng)));\n var pointList = [];\n for (var i = 0; (i < numFragments); i++) {\n var theta0 = (((s1 + (i * fragAngle)) * (Math.PI / 180)));\n var theta1 = (((s1 + ((i + 1) * fragAngle)) * (Math.PI / 180)));\n var cos0 = (Math.cos(theta0));\n var cos1 = (Math.cos(theta1));\n var sin0 = (Math.sin(theta0));\n var sin1 = (Math.sin(theta1));\n if ((fragAngle > 0)) {\n pointList.push((xcen + (rx * cos0)), (ycen - (ry * sin0)), (xcen + (rx * (cos0 - (kappa * sin0)))), (ycen - (ry * (sin0 + (kappa * cos0)))), (xcen + (rx * (cos1 + (kappa * sin1)))), (ycen - (ry * (sin1 - (kappa * cos1)))), (xcen + (rx * cos1)), (ycen - (ry * sin1)));\n }\n else {\n pointList.push((xcen + (rx * cos0)), (ycen - (ry * sin0)), (xcen + (rx * (cos0 + (kappa * sin0)))), (ycen - (ry * (sin0 - (kappa * cos0)))), (xcen + (rx * (cos1 - (kappa * sin1)))), (ycen - (ry * (sin1 + (kappa * cos1)))), (xcen + (rx * cos1)), (ycen - (ry * sin1)));\n }\n }\n return pointList;\n };\n PdfGraphics.prototype.drawPathHelper = function (arg1, arg2, arg3, arg4) {\n if (typeof arg3 === 'boolean') {\n var temparg3 = arg3;\n this.drawPathHelper(arg1, arg2, PdfFillMode.Winding, temparg3);\n }\n else {\n var temparg3 = arg3;\n var temparg4 = arg4;\n var isPen = arg1 != null;\n var isBrush = arg2 != null;\n var isEvenOdd = (temparg3 === PdfFillMode.Alternate);\n if (isPen && isBrush) {\n this.streamWriter.fillStrokePath(isEvenOdd);\n }\n else if (!isPen && !isBrush) {\n this.streamWriter.endPath();\n }\n else if (isPen) {\n this.streamWriter.strokePath();\n }\n else {\n this.streamWriter.fillPath(isEvenOdd);\n }\n }\n };\n PdfGraphics.prototype.drawImage = function (arg1, arg2, arg3, arg4, arg5) {\n if (typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'undefined') {\n var size = arg1.physicalDimension;\n this.drawImage(arg1, arg2, arg3, size.width, size.height);\n }\n else {\n var temparg2 = arg2;\n var temparg3 = arg3;\n var temparg4 = arg4;\n var temparg5 = arg5;\n arg1.save();\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(temparg2, (temparg3 + temparg5), matrix);\n this.getScaleTransform(arg4, arg5, matrix);\n this.pdfStreamWriter.write('q');\n this.pdfStreamWriter.modifyCtm(matrix);\n // Output template.\n var resources = this.getResources.getResources();\n if (typeof this.pageLayer !== 'undefined' && this.page != null) {\n resources.document = this.page.document;\n }\n var name_2 = resources.getName(arg1);\n if (typeof this.pageLayer !== 'undefined') {\n this.page.setResources(resources);\n }\n this.pdfStreamWriter.executeObject(name_2);\n this.pdfStreamWriter.write(Operators.restoreState);\n this.pdfStreamWriter.write(Operators.newLine);\n var resource = this.getResources.getResources();\n resource.requireProcedureSet(this.procedureSets.imageB);\n resource.requireProcedureSet(this.procedureSets.imageC);\n resource.requireProcedureSet(this.procedureSets.imageI);\n resource.requireProcedureSet(this.procedureSets.text);\n }\n };\n //Implementation\n /**\n * Returns `bounds` of the line info.\n * @private\n */\n PdfGraphics.prototype.getLineBounds = function (lineIndex, result, font, layoutRectangle, format) {\n var bounds;\n if (!result.empty && lineIndex < result.lineCount && lineIndex >= 0) {\n var line = result.lines[lineIndex];\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var y = vShift + layoutRectangle.y + (result.lineHeight * lineIndex);\n var lineWidth = line.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(line, format, layoutRectangle, (lineIndex === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x = layoutRectangle.x + hShift;\n var width = (!this.shouldJustify(line, layoutRectangle.width, format)) ? lineWidth - lineIndent : layoutRectangle.width - lineIndent;\n var height = result.lineHeight;\n bounds = new RectangleF(x, y, width, height);\n }\n else {\n bounds = new RectangleF(0, 0, 0, 0);\n }\n return bounds;\n };\n /**\n * Creates `lay outed rectangle` depending on the text settings.\n * @private\n */\n PdfGraphics.prototype.checkCorrectLayoutRectangle = function (textSize, x, y, format) {\n var layoutedRectangle = new RectangleF(x, y, textSize.width, textSize.width);\n if (format != null) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n layoutedRectangle.x -= layoutedRectangle.width / 2;\n break;\n case PdfTextAlignment.Right:\n layoutedRectangle.x -= layoutedRectangle.width;\n break;\n }\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n layoutedRectangle.y -= layoutedRectangle.height / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n layoutedRectangle.y -= layoutedRectangle.height;\n break;\n }\n }\n return layoutedRectangle;\n };\n /**\n * Sets the `layer` for the graphics.\n * @private\n */\n PdfGraphics.prototype.setLayer = function (layer) {\n this.pageLayer = layer;\n var page = layer.page;\n if (page != null && typeof page !== 'undefined') {\n page.beginSave = this.pageSave;\n }\n };\n /**\n * Adding page number field before page saving.\n * @private\n */\n PdfGraphics.prototype.pageSave = function (page) {\n if (page.graphics.automaticFields != null) {\n for (var i = 0; i < page.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = page.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(page.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n };\n /**\n * `Draws a layout result`.\n * @private\n */\n PdfGraphics.prototype.drawStringLayoutResult = function (result, font, pen, brush, layoutRectangle, format) {\n if (!result.empty) {\n this.applyStringSettings(font, pen, brush, format, layoutRectangle);\n // Set text scaling\n var textScaling = (format != null) ? format.horizontalScalingFactor : 100.0;\n if (textScaling !== this.previousTextScaling && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setTextScaling(textScaling);\n this.previousTextScaling = textScaling;\n }\n var height = (format == null || format.lineSpacing === 0) ? font.height : format.lineSpacing + font.height;\n var subScript = (format != null && format.subSuperScript === PdfSubSuperScript.SubScript);\n var shift = 0;\n shift = (subScript) ? height - (font.height + font.metrics.getDescent(format)) : (height - font.metrics.getAscent(format));\n this.shift = shift;\n this.pdfStreamWriter.startNextLine(layoutRectangle.x, layoutRectangle.y - shift);\n this.pdfStreamWriter.setLeading(+height);\n var resultHeight = 0;\n var remainingString = '';\n for (var i = 0; i < result.lines.length; i++) {\n resultHeight += result.lineHeight;\n if ((layoutRectangle.y + resultHeight) > this.clientSize.height) {\n this.startCutIndex = i;\n break;\n }\n }\n for (var j = this.startCutIndex; (j < result.lines.length && j >= 0); j++) {\n remainingString += result.lines[j].text;\n }\n var bounds = new RectangleF(layoutRectangle.x, layoutRectangle.y, layoutRectangle.width, layoutRectangle.height);\n this.drawLayoutResult(result, font, format, layoutRectangle);\n this.underlineStrikeoutText(pen, brush, result, font, bounds, format);\n this.isEmfPlus = false;\n this.isUseFontSize = false;\n if (this.startCutIndex !== -1) {\n var page = this.getNextPage();\n page.graphics.drawString(remainingString, font, pen, brush, layoutRectangle.x, 0, layoutRectangle.width, 0, format);\n }\n }\n else {\n throw new Error('ArgumentNullException:result');\n }\n };\n /**\n * Gets the `next page`.\n * @private\n */\n PdfGraphics.prototype.getNextPage = function () {\n var section = this.currentPage.section;\n var nextPage = null;\n var index = section.indexOf(this.currentPage);\n if (index === section.count - 1) {\n nextPage = section.add();\n }\n else {\n nextPage = section.getPages()[index + 1];\n }\n return nextPage;\n };\n PdfGraphics.prototype.setClip = function (rectangle, mode) {\n if (typeof mode === 'undefined') {\n this.setClip(rectangle, PdfFillMode.Winding);\n }\n else {\n this.pdfStreamWriter.appendRectangle(rectangle);\n this.pdfStreamWriter.clipPath((mode === PdfFillMode.Alternate));\n }\n };\n /**\n * Applies all the `text settings`.\n * @private\n */\n PdfGraphics.prototype.applyStringSettings = function (font, pen, brush, format, bounds) {\n if (brush instanceof PdfTilingBrush) {\n this.bCSInitialized = false;\n brush.graphics.colorSpace = this.colorSpace;\n }\n else if ((brush instanceof PdfGradientBrush)) {\n this.bCSInitialized = false;\n brush.colorSpace = this.colorSpace;\n }\n var setLineWidth = false;\n var tm = this.getTextRenderingMode(pen, brush, format);\n this.stateControl(pen, brush, font, format);\n this.pdfStreamWriter.beginText();\n if ((tm) !== this.previousTextRenderingMode) {\n this.pdfStreamWriter.setTextRenderingMode(tm);\n this.previousTextRenderingMode = tm;\n }\n // Set character spacing.\n var cs = (format != null) ? format.characterSpacing : 0;\n if (cs !== this.previousCharacterSpacing && !this.isEmfTextScaled) {\n this.pdfStreamWriter.setCharacterSpacing(cs);\n this.previousCharacterSpacing = cs;\n }\n // Set word spacing.\n // NOTE: it works only if the space code is equal to 32 (0x20).\n var ws = (format != null) ? format.wordSpacing : 0;\n if (ws !== this.previousWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(ws);\n this.previousWordSpacing = ws;\n }\n };\n /**\n * Calculates `shift value` if the text is vertically aligned.\n * @private\n */\n PdfGraphics.prototype.getTextVerticalAlignShift = function (textHeight, boundsHeight, format) {\n var shift = 0;\n if (boundsHeight >= 0 && format != null && format.lineAlignment !== PdfVerticalAlignment.Top) {\n switch (format.lineAlignment) {\n case PdfVerticalAlignment.Middle:\n shift = (boundsHeight - textHeight) / 2;\n break;\n case PdfVerticalAlignment.Bottom:\n shift = boundsHeight - textHeight;\n break;\n }\n }\n return shift;\n };\n /**\n * `Draws layout result`.\n * @private\n */\n PdfGraphics.prototype.drawLayoutResult = function (result, font, format, layoutRectangle) {\n var vAlignShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, vAlignShift);\n }\n var ttfFont = font;\n var unicode = (ttfFont != null && ttfFont.isUnicode);\n var embed = (ttfFont != null && ttfFont.isEmbedFont);\n var lines = result.lines;\n for (var i = 0, len = lines.length; (i < len && i !== this.startCutIndex); i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hAlignShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hAlignShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(hAlignShift, 0);\n }\n if (unicode) {\n this.drawUnicodeLine(lineInfo, layoutRectangle, font, format);\n }\n else {\n this.drawAsciiLine(lineInfo, layoutRectangle, font, format);\n }\n if (hAlignShift !== 0 && !this.isEmfTextScaled) {\n this.pdfStreamWriter.startNextLine(-hAlignShift, 0);\n }\n if (this.isOverloadWithPosition && lines.length > 1) {\n this.pdfStreamWriter.startNextLine(-(layoutRectangle.x), 0);\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n this.isOverloadWithPosition = false;\n this.isPointOverload = true;\n }\n }\n this.getResources.getResources().requireProcedureSet(this.procedureSets.text);\n if (vAlignShift !== 0) {\n this.pdfStreamWriter.startNextLine(0, -(vAlignShift - result.lineHeight));\n }\n this.pdfStreamWriter.endText();\n };\n /**\n * `Draws Ascii line`.\n * @private\n */\n PdfGraphics.prototype.drawAsciiLine = function (lineInfo, layoutRectangle, font, format) {\n this.justifyLine(lineInfo, layoutRectangle.width, format);\n var value = '';\n if (lineInfo.text.indexOf('(') !== -1 || lineInfo.text.indexOf(')') !== -1) {\n for (var i = 0; i < lineInfo.text.length; i++) {\n if (lineInfo.text[i] === '(') {\n value += '\\\\\\(';\n }\n else if (lineInfo.text[i] === ')') {\n value += '\\\\\\)';\n }\n else {\n value += lineInfo.text[i];\n }\n }\n }\n if (value === '') {\n value = lineInfo.text;\n }\n var line = '(' + value + ')';\n this.pdfStreamWriter.showNextLineText(new PdfString(line));\n };\n /**\n * Draws unicode line.\n * @private\n */\n PdfGraphics.prototype.drawUnicodeLine = function (lineInfo, layoutRectangle, font, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var rtl = (format !== null && typeof format !== 'undefined' && format.rightToLeft);\n var useWordSpace = (format !== null && typeof format !== 'undefined' && (format.wordSpacing !== 0 || format.alignment === PdfTextAlignment.Justify));\n var ttfFont = font;\n var wordSpacing = this.justifyLine(lineInfo, layoutRectangle.width, format);\n var rtlRender = new RtlRenderer();\n if (rtl || (format !== null && typeof format !== 'undefined' && format.textDirection !== PdfTextDirection.None)) {\n var blocks = null;\n var rightAlign = (format !== null && typeof format !== 'undefined' && format.alignment === PdfTextAlignment.Right);\n if (format !== null && typeof format !== 'undefined' && format.textDirection !== PdfTextDirection.None) {\n /* tslint:disable-next-line:max-line-length */\n blocks = rtlRender.layout(line, ttfFont, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, useWordSpace, format);\n }\n else {\n blocks = rtlRender.layout(line, ttfFont, rightAlign, useWordSpace, format);\n }\n var words = null;\n if (blocks.length > 1) {\n if (format !== null && typeof format !== 'undefined' && format.textDirection !== PdfTextDirection.None) {\n /* tslint:disable-next-line:max-line-length */\n words = rtlRender.splitLayout(line, ttfFont, (format.textDirection === PdfTextDirection.RightToLeft) ? true : false, useWordSpace, format);\n }\n else {\n words = rtlRender.splitLayout(line, ttfFont, rightAlign, useWordSpace, format);\n }\n }\n else {\n words = [line];\n }\n this.drawUnicodeBlocks(blocks, words, ttfFont, format, wordSpacing);\n }\n else {\n if (useWordSpace) {\n var result = this.breakUnicodeLine(line, ttfFont, null);\n var blocks = result.tokens;\n var words = result.words;\n this.drawUnicodeBlocks(blocks, words, ttfFont, format, wordSpacing);\n }\n else {\n var token = this.convertToUnicode(line, ttfFont);\n var value = this.getUnicodeString(token);\n this.streamWriter.showNextLineText(value);\n }\n }\n };\n /**\n * Draws array of unicode tokens.\n */\n PdfGraphics.prototype.drawUnicodeBlocks = function (blocks, words, font, format, wordSpacing) {\n if (blocks == null) {\n throw new Error('Argument Null Exception : blocks');\n }\n if (words == null) {\n throw new Error('Argument Null Exception : words');\n }\n if (font == null) {\n throw new Error('Argument Null Exception : font');\n }\n this.streamWriter.startNextLine();\n var x = 0;\n var xShift = 0;\n var firstLineIndent = 0;\n var paragraphIndent = 0;\n try {\n if (format !== null && typeof format !== 'undefined') {\n firstLineIndent = format.firstLineIndent;\n paragraphIndent = format.paragraphIndent;\n format.firstLineIndent = 0;\n format.paragraphIndent = 0;\n }\n var spaceWidth = font.getCharWidth(StringTokenizer.whiteSpace, format) + wordSpacing;\n var characterSpacing = (format != null) ? format.characterSpacing : 0;\n var wordSpace = (format !== null && typeof format !== 'undefined' && wordSpacing === 0) ? format.wordSpacing : 0;\n spaceWidth += characterSpacing + wordSpace;\n for (var i = 0; i < blocks.length; i++) {\n var token = blocks[i];\n var word = words[i];\n var tokenWidth = 0;\n if (x !== 0) {\n this.streamWriter.startNextLine(x, 0);\n }\n if (word.length > 0) {\n tokenWidth += /*Utils.Round(*/ font.measureString(word, format).width /*)*/;\n tokenWidth += characterSpacing;\n var val = this.getUnicodeString(token);\n this.streamWriter.showText(val);\n }\n if (i !== blocks.length - 1) {\n x = tokenWidth + spaceWidth;\n xShift += x;\n }\n }\n // Rolback current line position.\n if (xShift > 0) {\n this.streamWriter.startNextLine(-xShift, 0);\n }\n }\n finally {\n if (format !== null && typeof format !== 'undefined') {\n format.firstLineIndent = firstLineIndent;\n format.paragraphIndent = paragraphIndent;\n }\n }\n };\n /**\n * Breakes the unicode line to the words and converts symbols to glyphs.\n */\n PdfGraphics.prototype.breakUnicodeLine = function (line, ttfFont, words) {\n if (line === null) {\n throw new Error('Argument Null Exception : line');\n }\n words = line.split(null);\n var tokens = [];\n for (var i = 0; i < words.length; i++) {\n // Reconvert string according to unicode standard.\n var word = words[i];\n var token = this.convertToUnicode(word, ttfFont);\n tokens[i] = token;\n }\n return { tokens: tokens, words: words };\n };\n /**\n * Creates PdfString from the unicode text.\n */\n PdfGraphics.prototype.getUnicodeString = function (token) {\n if (token === null) {\n throw new Error('Argument Null Exception : token');\n }\n var val = new PdfString(token);\n val.converted = true;\n val.encode = InternalEnum.ForceEncoding.Ascii;\n return val;\n };\n /**\n * Converts to unicode format.\n */\n PdfGraphics.prototype.convertToUnicode = function (text, ttfFont) {\n var token = null;\n if (text == null) {\n throw new Error('Argument Null Exception : text');\n }\n if (ttfFont == null) {\n throw new Error('Argument Null Exception : ttfFont');\n }\n if (ttfFont.fontInternal instanceof UnicodeTrueTypeFont) {\n var ttfReader = ttfFont.fontInternal.ttfReader;\n ttfFont.setSymbols(text);\n token = ttfReader.convertString(text);\n var bytes = PdfString.toUnicodeArray(token, false);\n token = PdfString.byteToString(bytes);\n }\n return token;\n };\n /**\n * `Justifies` the line if needed.\n * @private\n */\n PdfGraphics.prototype.justifyLine = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var shouldJustify = this.shouldJustify(lineInfo, boundsWidth, format);\n var hasWordSpacing = (format != null && format.wordSpacing !== 0);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var wordSpace = 0;\n if (shouldJustify) {\n // Correct line width.\n if (hasWordSpacing) {\n lineWidth -= (whitespacesCount * format.wordSpacing);\n }\n var difference = boundsWidth - lineWidth;\n wordSpace = difference / whitespacesCount;\n this.pdfStreamWriter.setWordSpacing(wordSpace);\n }\n else {\n // If there is justifying, but the line shouldn't be justified, restore default word spacing.\n if (hasWordSpacing) {\n this.pdfStreamWriter.setWordSpacing(format.wordSpacing);\n }\n else {\n this.pdfStreamWriter.setWordSpacing(0);\n }\n }\n return wordSpace;\n };\n /**\n * `Reset` or reinitialize the current graphic value.\n * @private\n */\n PdfGraphics.prototype.reset = function (size) {\n this.canvasSize = size;\n this.streamWriter.clear();\n this.initialize();\n this.initializeCoordinates();\n };\n /**\n * Checks whether the line should be `justified`.\n * @private\n */\n PdfGraphics.prototype.shouldJustify = function (lineInfo, boundsWidth, format) {\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var justifyStyle = (format != null && format.alignment === PdfTextAlignment.Justify);\n var goodWidth = (boundsWidth >= 0 && lineWidth < boundsWidth);\n var symbols = StringTokenizer.spaces;\n var whitespacesCount = StringTokenizer.getCharsCount(line, symbols);\n var hasSpaces = (whitespacesCount > 0 && line[0] !== StringTokenizer.whiteSpace);\n var goodLineBreakStyle = ((lineInfo.lineType & LineType.LayoutBreak) > 0);\n var shouldJustify = (justifyStyle && goodWidth && hasSpaces && (goodLineBreakStyle || format.alignment === PdfTextAlignment.Justify));\n return shouldJustify;\n };\n /**\n * Emulates `Underline, Strikeout` of the text if needed.\n * @private\n */\n PdfGraphics.prototype.underlineStrikeoutText = function (pen, brush, result, font, layoutRectangle, format) {\n if (font.underline || font.strikeout) {\n // Calculate line width.\n var linePen = this.createUnderlineStikeoutPen(pen, brush, font, format);\n if (linePen != null) {\n // Approximate line positions.\n var vShift = this.getTextVerticalAlignShift(result.actualSize.height, layoutRectangle.height, format);\n var underlineYOffset = 0;\n underlineYOffset = layoutRectangle.y + vShift + font.metrics.getAscent(format) + 1.5 * linePen.width;\n var strikeoutYOffset = layoutRectangle.y + vShift + font.metrics.getHeight(format) / 2 + 1.5 * linePen.width;\n var lines = result.lines;\n // Run through the text and draw lines.\n for (var i = 0, len = result.lineCount; i < len; i++) {\n var lineInfo = lines[i];\n var line = lineInfo.text;\n var lineWidth = lineInfo.width;\n var hShift = this.getHorizontalAlignShift(lineWidth, layoutRectangle.width, format);\n var lineIndent = this.getLineIndent(lineInfo, format, layoutRectangle, (i === 0));\n hShift += (!this.rightToLeft(format)) ? lineIndent : 0;\n var x1 = layoutRectangle.x + hShift;\n var x2 = (!this.shouldJustify(lineInfo, layoutRectangle.width, format)) ? x1 + lineWidth - lineIndent : x1 + layoutRectangle.width - lineIndent;\n if (font.underline) {\n var y = underlineYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n underlineYOffset += result.lineHeight;\n }\n if (font.strikeout) {\n var y = strikeoutYOffset;\n this.drawLine(linePen, x1, y, x2, y);\n strikeoutYOffset += result.lineHeight;\n }\n if (this.isPointOverload && lines.length > 1) {\n layoutRectangle.x = 0;\n layoutRectangle.width = this.clientSize.width;\n }\n }\n this.isPointOverload = false;\n }\n }\n };\n /**\n * `Creates a pen` for drawing lines in the text.\n * @private\n */\n PdfGraphics.prototype.createUnderlineStikeoutPen = function (pen, brush, font, format) {\n // Calculate line width.\n var lineWidth = font.metrics.getSize(format) / 20;\n var linePen = null;\n // Create a pen fo the lines.\n if (pen != null) {\n linePen = new PdfPen(pen.color, lineWidth);\n }\n else if (brush != null) {\n linePen = new PdfPen(brush, lineWidth);\n }\n return linePen;\n };\n /**\n * Return `text rendering mode`.\n * @private\n */\n PdfGraphics.prototype.getTextRenderingMode = function (pen, brush, format) {\n var tm = TextRenderingMode.None;\n if (pen != null && brush != null) {\n tm = TextRenderingMode.FillStroke;\n }\n else if (pen != null) {\n tm = TextRenderingMode.Stroke;\n }\n else {\n tm = TextRenderingMode.Fill;\n }\n if (format != null && format.clipPath) {\n tm |= TextRenderingMode.ClipFlag;\n }\n return tm;\n };\n /**\n * Returns `line indent` for the line.\n * @private\n */\n PdfGraphics.prototype.getLineIndent = function (lineInfo, format, layoutBounds, firstLine) {\n var lineIndent = 0;\n var firstParagraphLine = ((lineInfo.lineType & LineType.FirstParagraphLine) > 0);\n if (format != null && firstParagraphLine) {\n lineIndent = (firstLine) ? format.firstLineIndent : format.paragraphIndent;\n lineIndent = (layoutBounds.width > 0) ? Math.min(layoutBounds.width, lineIndent) : lineIndent;\n }\n return lineIndent;\n };\n /**\n * Calculates shift value if the line is `horizontaly aligned`.\n * @private\n */\n PdfGraphics.prototype.getHorizontalAlignShift = function (lineWidth, boundsWidth, format) {\n var shift = 0;\n if (boundsWidth >= 0 && format != null && format.alignment !== PdfTextAlignment.Left) {\n switch (format.alignment) {\n case PdfTextAlignment.Center:\n shift = (boundsWidth - lineWidth) / 2;\n break;\n case PdfTextAlignment.Right:\n shift = boundsWidth - lineWidth;\n break;\n }\n }\n return shift;\n };\n /**\n * Gets or sets the value that indicates `text direction` mode.\n * @private\n */\n PdfGraphics.prototype.rightToLeft = function (format) {\n var rtl = (format !== null && typeof format !== 'undefined' && format.rightToLeft);\n if (format !== null && typeof format !== 'undefined') {\n if (format.textDirection !== PdfTextDirection.None && typeof format.textDirection !== 'undefined') {\n rtl = true;\n }\n }\n return rtl;\n };\n PdfGraphics.prototype.stateControl = function (pen, brush, font, format) {\n if (typeof format === 'undefined') {\n this.stateControl(pen, brush, font, null);\n }\n else {\n if (brush instanceof PdfGradientBrush) {\n this.bCSInitialized = false;\n brush.colorSpace = this.colorSpace;\n }\n if (brush instanceof PdfTilingBrush) {\n this.bCSInitialized = false;\n brush.graphics.colorSpace = this.colorSpace;\n }\n var saveState = false;\n if (brush !== null) {\n var solidBrush = brush;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n if (this.colorSpaceChanged === false) {\n this.lastDocumentCS = this.pageLayer.page.document.colorSpace;\n this.lastGraphicsCS = this.pageLayer.page.graphics.colorSpace;\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n this.colorSpaceChanged = true;\n }\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n else if (pen != null) {\n var pdfPen = pen;\n if (typeof this.pageLayer !== 'undefined' && this.pageLayer != null) {\n this.colorSpace = this.pageLayer.page.document.colorSpace;\n this.currentColorSpace = this.pageLayer.page.document.colorSpace;\n }\n this.initCurrentColorSpace(this.currentColorSpace);\n }\n this.penControl(pen, saveState);\n this.brushControl(brush, saveState);\n this.fontControl(font, format, saveState);\n }\n };\n /**\n * Initializes the `current color space`.\n * @private\n */\n PdfGraphics.prototype.initCurrentColorSpace = function (colorspace) {\n var re = this.getResources.getResources();\n if (!this.bCSInitialized) {\n if (this.currentColorSpace != PdfColorSpace.GrayScale) {\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], true);\n this.pdfStreamWriter.setColorSpace('Device' + this.currentColorSpaces[this.currentColorSpace], false);\n this.bCSInitialized = true;\n }\n else {\n this.pdfStreamWriter.setColorSpace('DeviceGray', true);\n this.pdfStreamWriter.setColorSpace('DeviceGray', false);\n this.bCSInitialized = true;\n }\n }\n };\n /**\n * Controls the `pen state`.\n * @private\n */\n PdfGraphics.prototype.penControl = function (pen, saveState) {\n if (pen != null) {\n this.currentPen = pen;\n pen.monitorChanges(this.currentPen, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace, this.matrix.clone());\n this.currentPen = pen.clone();\n }\n };\n /**\n * Controls the `brush state`.\n * @private\n */\n PdfGraphics.prototype.brushControl = function (brush, saveState) {\n if (brush != null && typeof brush !== 'undefined') {\n var b = brush.clone();\n var lgb = b;\n if (lgb !== null && typeof lgb !== 'undefined' && !(brush instanceof PdfSolidBrush) && !(brush instanceof PdfTilingBrush)) {\n var m = lgb.matrix;\n var matrix = this.matrix.clone();\n if ((m != null)) {\n m.multiply(matrix);\n matrix = m;\n }\n lgb.matrix = matrix;\n }\n this.currentBrush = lgb;\n var br = (brush);\n b.monitorChanges(this.currentBrush, this.pdfStreamWriter, this.getResources, saveState, this.colorSpace);\n this.currentBrush = brush;\n brush = null;\n }\n };\n /**\n * Saves the font and other `font settings`.\n * @private\n */\n PdfGraphics.prototype.fontControl = function (font, format, saveState) {\n if (font != null) {\n var curSubSuper = (format != null) ? format.subSuperScript : PdfSubSuperScript.None;\n var prevSubSuper = (this.currentStringFormat != null) ? this.currentStringFormat.subSuperScript : PdfSubSuperScript.None;\n if (saveState || font !== this.currentFont || curSubSuper !== prevSubSuper) {\n var resources = this.getResources.getResources();\n this.currentFont = font;\n this.currentStringFormat = format;\n var size = font.metrics.getSize(format);\n this.isEmfTextScaled = false;\n var fontName = resources.getName(font);\n this.pdfStreamWriter.setFont(font, fontName, size);\n }\n }\n };\n PdfGraphics.prototype.setTransparency = function (arg1, arg2, arg3) {\n if (typeof arg2 === 'undefined') {\n this.istransparencySet = true;\n this.setTransparency(arg1, arg1, PdfBlendMode.Normal);\n }\n else if (typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.setTransparency(arg1, arg2, PdfBlendMode.Normal);\n }\n else {\n if (this.trasparencies == null) {\n this.trasparencies = new TemporaryDictionary();\n }\n var transp = null;\n var td = new TransparencyData(arg1, arg2, arg3);\n if (this.trasparencies.containsKey(td)) {\n transp = this.trasparencies.getValue(td);\n }\n if (transp == null) {\n transp = new PdfTransparency(arg1, arg2, arg3);\n this.trasparencies.setValue(td, transp);\n }\n var resources = this.getResources.getResources();\n var name_3 = resources.getName(transp);\n var sw = this.streamWriter;\n sw.setGraphicsState(name_3);\n }\n };\n PdfGraphics.prototype.clipTranslateMargins = function (x, y, left, top, right, bottom) {\n if (x instanceof RectangleF && typeof y === 'undefined') {\n this.clipBounds = x;\n this.pdfStreamWriter.writeComment('Clip margins.');\n this.pdfStreamWriter.appendRectangle(x);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment('Translate co-ordinate system.');\n this.translateTransform(x.x, x.y);\n }\n else if (typeof x === 'number') {\n var clipArea = new RectangleF(left, top, this.size.width - left - right, this.size.height - top - bottom);\n this.clipBounds = clipArea;\n this.pdfStreamWriter.writeComment(\"Clip margins.\");\n this.pdfStreamWriter.appendRectangle(clipArea);\n this.pdfStreamWriter.closePath();\n this.pdfStreamWriter.clipPath(false);\n this.pdfStreamWriter.writeComment(\"Translate co-ordinate system.\");\n this.translateTransform(x, y);\n }\n };\n /**\n * `Updates y` co-ordinate.\n * @private\n */\n PdfGraphics.prototype.updateY = function (y) {\n return -y;\n };\n /**\n * Used to `translate the transformation`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set translate transform\n * page1.graphics.translateTransform(100, 100);\n * //\n * // draw the rectangle after applying translate transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 0, y : 0}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param offsetX The x-coordinate of the translation.\n * @param offsetY The y-coordinate of the translation.\n */\n PdfGraphics.prototype.translateTransform = function (offsetX, offsetY) {\n var matrix = new PdfTransformationMatrix();\n this.getTranslateTransform(offsetX, offsetY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Translates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getTranslateTransform = function (x, y, input) {\n input.translate(x, this.updateY(y));\n return input;\n };\n /**\n * Applies the specified `scaling operation` to the transformation matrix of this Graphics by prepending it to the object's transformation matrix.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // apply scaling trasformation\n * page1.graphics.scaleTransform(1.5, 2);\n * //\n * // draw the rectangle after applying scaling transform\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param scaleX Scale factor in the x direction.\n * @param scaleY Scale factor in the y direction.\n */\n PdfGraphics.prototype.scaleTransform = function (scaleX, scaleY) {\n var matrix = new PdfTransformationMatrix();\n this.getScaleTransform(scaleX, scaleY, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Scales` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getScaleTransform = function (x, y, input) {\n if (input == null) {\n input = new PdfTransformationMatrix();\n }\n input.scale(x, y);\n return input;\n };\n /**\n * Applies the specified `rotation` to the transformation matrix of this Graphics.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // set RotateTransform with 25 degree of angle\n * page1.graphics.rotateTransform(25);\n * //\n * // draw the rectangle after RotateTransformation\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param angle Angle of rotation in degrees.\n */\n PdfGraphics.prototype.rotateTransform = function (angle) {\n var matrix = new PdfTransformationMatrix();\n this.getRotateTransform(angle, matrix);\n this.pdfStreamWriter.modifyCtm(matrix);\n this.matrix.multiply(matrix);\n };\n /**\n * `Initializes coordinate system`.\n * @private\n */\n PdfGraphics.prototype.initializeCoordinates = function () {\n // Matrix equation: TM(T-1)=M', where T=[1 0 0 -1 0 h]\n this.pdfStreamWriter.writeComment('Change co-ordinate system to left/top.');\n // Translate co-ordinates only, don't flip.\n if (this.mediaBoxUpperRightBound !== -(this.size.height)) {\n if (this.cropBox == null) {\n if (this.mediaBoxUpperRightBound === this.size.height || this.mediaBoxUpperRightBound === 0) {\n this.translateTransform(0, this.updateY(this.size.height));\n }\n else {\n this.translateTransform(0, this.updateY(this.mediaBoxUpperRightBound));\n }\n }\n }\n };\n /**\n * `Rotates` coordinates of the input matrix.\n * @private\n */\n PdfGraphics.prototype.getRotateTransform = function (angle, input) {\n if (input == null || typeof input === 'undefined') {\n input = new PdfTransformationMatrix();\n }\n input.rotate(this.updateY(angle));\n return input;\n };\n /**\n * `Saves` the current state of this Graphics and identifies the saved state with a GraphicsState.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // create a new page\n * let page1 : PdfPage = document.pages.add();\n * // create pen\n * let pen : PdfPen = new PdfPen(new PdfColor(0, 0, 0));\n * //\n * // save the graphics state\n * let state1 : PdfGraphicsState = page1.graphics.save();\n * //\n * page1.graphics.scaleTransform(1.5, 2);\n * // draw the rectangle\n * page1.graphics.drawRectangle(pen, new RectangleF({x : 100, y : 100}, {width : 100, height : 50}));\n * // restore the graphics state\n * page1.graphics.restore(state1);\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfGraphics.prototype.save = function () {\n var state = new PdfGraphicsState(this, this.matrix.clone());\n state.brush = this.currentBrush;\n state.pen = this.currentPen;\n state.font = this.currentFont;\n state.colorSpace = this.currentColorSpace;\n state.characterSpacing = this.previousCharacterSpacing;\n state.wordSpacing = this.previousWordSpacing;\n state.textScaling = this.previousTextScaling;\n state.textRenderingMode = this.previousTextRenderingMode;\n this.graphicsState.push(state);\n this.pdfStreamWriter.saveGraphicsState();\n return state;\n };\n PdfGraphics.prototype.restore = function (state) {\n if (typeof state === 'undefined') {\n if (this.graphicsState.length > 0) {\n this.doRestoreState();\n }\n }\n else {\n if (this.graphicsState.indexOf(state) !== -1) {\n for (;;) {\n if (this.graphicsState.length === 0) {\n break;\n }\n var popState = this.doRestoreState();\n if (popState === state) {\n break;\n }\n }\n }\n }\n };\n /**\n * `Restores graphics state`.\n * @private\n */\n PdfGraphics.prototype.doRestoreState = function () {\n var state = this.graphicsState.pop();\n this.transformationMatrix = state.matrix;\n this.currentBrush = state.brush;\n this.currentPen = state.pen;\n this.currentFont = state.font;\n this.currentColorSpace = state.colorSpace;\n this.previousCharacterSpacing = state.characterSpacing;\n this.previousWordSpacing = state.wordSpacing;\n this.previousTextScaling = state.textScaling;\n this.previousTextRenderingMode = state.textRenderingMode;\n this.pdfStreamWriter.restoreGraphicsState();\n return state;\n };\n /**\n * `Draws the specified path`, using its original physical size, at the location specified by a coordinate pair.\n * ```typescript\n * // create a new PDF document.\n * let document : PdfDocument = new PdfDocument();\n * // add a page to the document.\n * let page1 : PdfPage = document.pages.add();\n * //Create new PDF path.\n * let path : PdfPath = new PdfPath();\n * //Add line path points.\n * path.addLine(new PointF(10, 100), new PointF(10, 200));\n * path.addLine(new PointF(100, 100), new PointF(100, 200));\n * path.addLine(new PointF(100, 200), new PointF(55, 150));\n * // set pen\n * let pen : PdfPen = new PdfPen(new PdfColor(255, 0, 0));\n * // set brush\n * let brush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the path\n * page1.graphics.drawPath(pen, brush, path);\n * //\n * // save the document.\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n * @param pen Color of the text.\n * @param brush Color of the text.\n * @param path Draw path.\n */\n PdfGraphics.prototype.drawPath = function (pen, brush, path) {\n this._drawPath(pen, brush, path.pathPoints, path.pathTypes, path.fillMode);\n };\n PdfGraphics.prototype._drawPath = function (pen, brush, pathPoints, pathTypes, fillMode) {\n if (brush instanceof PdfTilingBrush) {\n this.bCSInitialized = false;\n brush.graphics.colorSpace = this.colorSpace;\n }\n else if (brush instanceof PdfGradientBrush) {\n this.bCSInitialized = false;\n brush.colorSpace = this.colorSpace;\n }\n this.stateControl(pen, brush, null);\n this.buildUpPath(pathPoints, pathTypes);\n this.drawPathHelper(pen, brush, fillMode, false);\n };\n /* tslint:disable-next-line:max-line-length */\n PdfGraphics.prototype.drawArc = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n if (arg2 instanceof RectangleF) {\n this.drawArc(arg1, arg2.x, arg2.y, arg2.width, arg2.height, arg3, arg4);\n }\n else {\n if ((arg7 !== 0)) {\n this.stateControl(arg1, null, null);\n this.constructArcPath(arg2, arg3, (arg2 + arg4), (arg3 + arg5), arg6, arg7);\n this.drawPathHelper(arg1, null, false);\n }\n }\n };\n /**\n * Builds up the path.\n * @private\n */\n PdfGraphics.prototype.buildUpPath = function (arg1, arg2) {\n var cnt = arg1.length;\n for (var i = 0; i < cnt; ++i) {\n var typeValue = 0;\n var point = arg1[i];\n switch (((arg2[i] & (PdfGraphics.pathTypesValuesMask)))) {\n case PathPointType.Start:\n this.pdfStreamWriter.beginPath(point.x, point.y);\n break;\n case PathPointType.Bezier3:\n var p2 = new PointF(0, 0);\n var p3 = new PointF(0, 0);\n var result1 = this.getBezierPoints(arg1, arg2, i, p2, p3);\n this.pdfStreamWriter.appendBezierSegment(point, result1.p2, result1.p3);\n i = result1.i;\n break;\n case PathPointType.Line:\n this.pdfStreamWriter.appendLineSegment(point);\n break;\n default:\n throw new Error('ArithmeticException - Incorrect path formation.');\n }\n typeValue = arg2[i];\n this.checkFlags(typeValue);\n }\n };\n /**\n * Gets the bezier points from respective arrays.\n * @private\n */\n /* tslint:disable-next-line:max-line-length */\n PdfGraphics.prototype.getBezierPoints = function (points, types, i, p2, p3) {\n var errorMsg = 'Malforming path.';\n ++i;\n if ((((types[i] & PdfGraphics.pathTypesValuesMask)) === PathPointType.Bezier3)) {\n p2 = points[i];\n ++i;\n if ((((types[i] & PdfGraphics.pathTypesValuesMask)) === PathPointType.Bezier3)) {\n p3 = points[i];\n }\n else {\n throw new Error('ArgumentException : errorMsg');\n }\n }\n else {\n throw new Error('ArgumentException : errorMsg');\n }\n return { i: i, p2: p2, p3: p3 };\n };\n /**\n * Checks path point type flags.\n * @private\n */\n PdfGraphics.prototype.checkFlags = function (type) {\n if ((((type & (PathPointType.CloseSubpath))) === PathPointType.CloseSubpath)) {\n this.pdfStreamWriter.closePath();\n }\n };\n /**\n * Constructs the arc path using Bezier curves.\n * @private\n */\n PdfGraphics.prototype.constructArcPath = function (x1, y1, x2, y2, startAng, sweepAngle) {\n var points = this.getBezierArc(x1, y1, x2, y2, startAng, sweepAngle);\n if ((points.length === 0)) {\n return;\n }\n var pt = [points[0], points[1], points[2], points[3], points[4], points[5], points[6], points[7]];\n this.pdfStreamWriter.beginPath(pt[0], pt[1]);\n var i = 0;\n for (i = 0; i < points.length; i = i + 8) {\n pt = [points[i], points[i + 1], points[i + 2], points[i + 3], points[i + 4], points[i + 5], points[i + 6], points[i + 7]];\n this.pdfStreamWriter.appendBezierSegment(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]);\n }\n };\n /**\n * Gets the bezier points for arc constructing.\n * @private\n */\n PdfGraphics.prototype.getBezierArc = function (numX1, numY1, numX2, numY2, s1, e1) {\n if ((numX1 > numX2)) {\n var tmp = void 0;\n tmp = numX1;\n numX1 = numX2;\n numX2 = tmp;\n }\n if ((numY2 > numY1)) {\n var tmp = void 0;\n tmp = numY1;\n numY1 = numY2;\n numY2 = tmp;\n }\n var fragAngle1;\n var numFragments;\n if ((Math.abs(e1) <= 90)) {\n fragAngle1 = e1;\n numFragments = 1;\n }\n else {\n numFragments = (Math.ceil((Math.abs(e1) / 90)));\n fragAngle1 = (e1 / numFragments);\n }\n var xcen = ((numX1 + numX2) / 2);\n var ycen = ((numY1 + numY2) / 2);\n var rx = ((numX2 - numX1) / 2);\n var ry = ((numY2 - numY1) / 2);\n var halfAng = ((fragAngle1 * (Math.PI / 360)));\n var kappa = (Math.abs(4.0 / 3.0 * (1.0 - Math.cos(halfAng)) / Math.sin(halfAng)));\n var pointsList = [];\n for (var i = 0; (i < numFragments); i++) {\n var thetaValue0 = (((s1 + (i * fragAngle1)) * (Math.PI / 180)));\n var thetaValue1 = (((s1 + ((i + 1) * fragAngle1)) * (Math.PI / 180)));\n var cos0 = (Math.cos(thetaValue0));\n var cos1 = (Math.cos(thetaValue1));\n var sin0 = (Math.sin(thetaValue0));\n var sin1 = (Math.sin(thetaValue1));\n if ((fragAngle1 > 0)) {\n /* tslint:disable-next-line:max-line-length */\n pointsList.push((xcen + (rx * cos0)), (ycen - (ry * sin0)), (xcen + (rx * (cos0 - (kappa * sin0)))), (ycen - (ry * (sin0 + (kappa * cos0)))), (xcen + (rx * (cos1 + (kappa * sin1)))), (ycen - (ry * (sin1 - (kappa * cos1)))), (xcen + (rx * cos1)), (ycen - (ry * sin1)));\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n pointsList.push((xcen + (rx * cos0)), (ycen - (ry * sin0)), (xcen + (rx * (cos0 + (kappa * sin0)))), (ycen - (ry * (sin0 - (kappa * cos0)))), (xcen + (rx * (cos1 - (kappa * sin1)))), (ycen - (ry * (sin1 + (kappa * cos1)))), (xcen + (rx * cos1)), (ycen - (ry * sin1)));\n }\n }\n return pointsList;\n };\n /* tslint:disable */\n // Constants\n /**\n * Specifies the mask of `path type values`.\n * @private\n */\n PdfGraphics.pathTypesValuesMask = 0xf;\n /**\n * Checks whether the object is `transparencyObject`.\n * @hidden\n * @private\n */\n PdfGraphics.transparencyObject = false;\n return PdfGraphics;\n}());\nexport { PdfGraphics };\n/**\n * `GetResourceEventHandler` class is alternate for event handlers and delegates.\n * @private\n * @hidden\n */\nvar GetResourceEventHandler = /** @class */ (function () {\n /**\n * Initialize instance of `GetResourceEventHandler` class.\n * Alternate for event handlers and delegates.\n * @private\n */\n function GetResourceEventHandler(sender) {\n this.sender = sender;\n }\n /**\n * Return the instance of `PdfResources` class.\n * @private\n */\n GetResourceEventHandler.prototype.getResources = function () {\n return this.sender.getResources();\n };\n return GetResourceEventHandler;\n}());\nexport { GetResourceEventHandler };\nvar PdfGraphicsState = /** @class */ (function () {\n function PdfGraphicsState(graphics, matrix) {\n /**\n * Stores `previous rendering mode`.\n * @default TextRenderingMode.Fill\n * @private\n */\n this.internalTextRenderingMode = TextRenderingMode.Fill;\n /**\n * `Previous character spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalCharacterSpacing = 0.0;\n /**\n * `Previous word spacing` value or 0.\n * @default 0.0\n * @private\n */\n this.internalWordSpacing = 0.0;\n /**\n * The previously used `text scaling value`.\n * @default 100.0\n * @private\n */\n this.internalTextScaling = 100.0;\n /**\n * `Current color space`.\n * @default PdfColorSpace.Rgb\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n if (typeof graphics !== 'undefined') {\n this.pdfGraphics = graphics;\n var elements_1 = [];\n graphics.matrix.matrix.elements.forEach(function (element) {\n elements_1.push(element);\n });\n this.transformationMatrix = new PdfTransformationMatrix();\n this.transformationMatrix.matrix = new Matrix(elements_1);\n }\n }\n Object.defineProperty(PdfGraphicsState.prototype, \"graphics\", {\n // Properties\n /**\n * Gets the parent `graphics object`.\n * @private\n */\n get: function () {\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"matrix\", {\n /**\n * Gets the `current matrix`.\n * @private\n */\n get: function () {\n return this.transformationMatrix;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"characterSpacing\", {\n /**\n * Gets or sets the `current character spacing`.\n * @private\n */\n get: function () {\n return this.internalCharacterSpacing;\n },\n set: function (value) {\n this.internalCharacterSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"wordSpacing\", {\n /**\n * Gets or sets the `word spacing` value.\n * @private\n */\n get: function () {\n return this.internalWordSpacing;\n },\n set: function (value) {\n this.internalWordSpacing = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textScaling\", {\n /**\n * Gets or sets the `text scaling` value.\n * @private\n */\n get: function () {\n return this.internalTextScaling;\n },\n set: function (value) {\n this.internalTextScaling = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"pen\", {\n /**\n * Gets or sets the `current pen` object.\n * @private\n */\n get: function () {\n return this.pdfPen;\n },\n set: function (value) {\n this.pdfPen = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"brush\", {\n /**\n * Gets or sets the `brush`.\n * @private\n */\n get: function () {\n return this.pdfBrush;\n },\n set: function (value) {\n this.pdfBrush = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"font\", {\n /**\n * Gets or sets the `current font` object.\n * @private\n */\n get: function () {\n return this.pdfFont;\n },\n set: function (value) {\n this.pdfFont = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"colorSpace\", {\n /**\n * Gets or sets the `current color space` value.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfGraphicsState.prototype, \"textRenderingMode\", {\n /**\n * Gets or sets the `text rendering mode`.\n * @private\n */\n get: function () {\n return this.internalTextRenderingMode;\n },\n set: function (value) {\n this.internalTextRenderingMode = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfGraphicsState;\n}());\nexport { PdfGraphicsState };\nvar TransparencyData = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `TransparencyData` class.\n * @private\n */\n function TransparencyData(alphaPen, alphaBrush, blendMode) {\n this.alphaPen = alphaPen;\n this.alphaBrush = alphaBrush;\n this.blendMode = blendMode;\n }\n return TransparencyData;\n}());\n/* tslint:enable */\n","import { PdfStream } from './../primitives/pdf-stream';\nimport { PdfGraphics, GetResourceEventHandler } from './../graphics/pdf-graphics';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * The `PdfPageLayer` used to create layers in PDF document.\n * @private\n */\nvar PdfPageLayer = /** @class */ (function () {\n function PdfPageLayer(page, streamClipPageTemplates) {\n // private bSaved : boolean;\n /**\n * Local Variable to store the `color space` of the document.\n * @private\n */\n this.pdfColorSpace = PdfColorSpace.Rgb;\n /**\n * Local Variable to set `visibility`.\n * @default true\n * @private\n */\n this.isVisible = true;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n this.sublayer = false;\n /**\n * Local variable to store `length` of the graphics.\n * @default 0\n * @private\n */\n this.contentLength = 0;\n /**\n * Instance for `PdfDictionaryProperties` Class.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n if (page === null) {\n throw new Error('ArgumentNullException:page');\n }\n this.pdfPage = page;\n this.clipPageTemplates = true;\n if (typeof streamClipPageTemplates === 'undefined') {\n this.content = new PdfStream();\n }\n else if (streamClipPageTemplates instanceof PdfStream || streamClipPageTemplates === null) {\n if (streamClipPageTemplates === null) {\n throw new Error('ArgumentNullException:stream');\n }\n this.content = streamClipPageTemplates;\n }\n else {\n this.content = new PdfStream();\n this.clipPageTemplates = streamClipPageTemplates;\n }\n }\n Object.defineProperty(PdfPageLayer.prototype, \"colorSpace\", {\n // Properties\n /**\n * Get or set the `color space`.\n * @private\n */\n get: function () {\n return this.pdfColorSpace;\n },\n set: function (value) {\n this.pdfColorSpace = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"page\", {\n /**\n * Gets parent `page` of the layer.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layerId\", {\n /**\n * Gets and Sets the `id of the layer`.\n * @private\n */\n get: function () {\n return this.layerid;\n },\n set: function (value) {\n this.layerid = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"name\", {\n /**\n * Gets or sets the `name` of the layer.\n * @private\n */\n get: function () {\n return this.layerName;\n },\n set: function (value) {\n this.layerName = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"visible\", {\n /**\n * Gets or sets the `visibility` of the layer.\n * @private\n */\n get: function () {\n return this.isVisible;\n },\n set: function (value) {\n this.isVisible = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"graphics\", {\n /**\n * Gets `Graphics` context of the layer, used to draw various graphical content on layer.\n * @private\n */\n get: function () {\n if ((this.pdfGraphics == null)) {\n this.initializeGraphics(this.page);\n }\n return this.pdfGraphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageLayer.prototype, \"layers\", {\n /**\n * Gets the collection of `PdfPageLayer`, this collection handle by the class 'PdfPageLayerCollection'.\n * @private\n */\n get: function () {\n if (this.layer == null) {\n this.layer = new PdfPageLayerCollection(this.page);\n this.layer.sublayer = true;\n return this.layer;\n }\n else {\n return this.layer;\n }\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * `Adds` a new PDF Page layer.\n * @private\n */\n PdfPageLayer.prototype.add = function () {\n var layer = new PdfPageLayer(this.pdfPage);\n layer.name = '';\n return layer;\n };\n /**\n * Returns a value indicating the `sign` of a single-precision floating-point number.\n * @private\n */\n PdfPageLayer.prototype.sign = function (number) {\n if (number === 0) {\n return 0;\n }\n else if (number > 0) {\n return 1;\n }\n else {\n return -1;\n }\n };\n /**\n * `Initializes Graphics context` of the layer.\n * @private\n */\n PdfPageLayer.prototype.initializeGraphics = function (page) {\n var oPage = page;\n var gr = new GetResourceEventHandler(this.page);\n var cropBox = null;\n this.pdfGraphics = new PdfGraphics(page.size, gr, this.content);\n this.pdfGraphics.mediaBoxUpperRightBound = 0;\n if (oPage != null) {\n var sc = oPage.section.parent;\n if (sc != null) {\n this.pdfGraphics.colorSpace = sc.document.colorSpace;\n this.colorSpace = sc.document.colorSpace;\n }\n }\n // Transform coordinates to the left/top and activate margins.\n var isSame = (this.sign(page.origin.y) === this.sign(page.origin.x));\n // if (page != null) {\n if (page.origin.x >= 0 && page.origin.y >= 0 || !(isSame)) {\n this.pdfGraphics.initializeCoordinates();\n }\n else {\n // this.m_graphics.InitializeCoordinates(page);\n }\n var clipRect = oPage.section.getActualBounds(oPage, true);\n var margins = oPage.section.pageSettings.margins;\n if (this.clipPageTemplates) {\n if (page.origin.x >= 0 && page.origin.y >= 0) {\n this.pdfGraphics.clipTranslateMargins(clipRect);\n }\n }\n else {\n this.graphics.clipTranslateMargins(clipRect.x, clipRect.y, margins.left, margins.top, margins.right, margins.bottom);\n }\n this.pdfGraphics.setLayer(this);\n // this.bSaved = false;\n };\n Object.defineProperty(PdfPageLayer.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.content;\n },\n enumerable: true,\n configurable: true\n });\n return PdfPageLayer;\n}());\nexport { PdfPageLayer };\n","/**\n * PdfCollection.ts class for EJ2-PDF\n * The class used to handle the collection of PdF objects.\n */\nvar PdfCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `Collection` class.\n * @private\n */\n function PdfCollection() {\n //\n }\n Object.defineProperty(PdfCollection.prototype, \"count\", {\n // Properties\n /**\n * Gets the `Count` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfCollection.prototype, \"list\", {\n /**\n * Gets the `list` of stored objects.\n * @private\n */\n get: function () {\n if (typeof this.collection === 'undefined') {\n this.collection = [];\n }\n return this.collection;\n },\n enumerable: true,\n configurable: true\n });\n return PdfCollection;\n}());\nexport { PdfCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfPageLayerCollection.ts class for EJ2-PDF\n */\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { PdfPageLayer } from './pdf-page-layer';\nimport { PdfCollection } from './../general/pdf-collection';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfStream } from './../primitives/pdf-stream';\n/**\n * The class provides methods and properties to handle the collections of `PdfPageLayer`.\n */\nvar PdfPageLayerCollection = /** @class */ (function (_super) {\n __extends(PdfPageLayerCollection, _super);\n function PdfPageLayerCollection(page) {\n var _this = _super.call(this) || this;\n /**\n * Stores the `number of first level layers` in the document.\n * @default 0\n * @private\n */\n _this.parentLayerCount = 0;\n /**\n * Indicates if `Sublayer` is present.\n * @default false\n * @private\n */\n _this.sublayer = false;\n /**\n * Stores the `optional content dictionary`.\n * @private\n */\n _this.optionalContent = new PdfDictionary();\n if (page instanceof PdfPageBase) {\n // if (page == null) {\n // throw new Error('ArgumentNullException:page');\n // }\n _this.page = page;\n var lPage = page;\n // if (lPage != null) {\n _this.parseLayers(lPage);\n // }\n }\n return _this;\n }\n PdfPageLayerCollection.prototype.items = function (index, value) {\n if (typeof index === 'number' && typeof value === 'undefined') {\n var obj = this.list[index];\n return obj;\n }\n else {\n if (value == null) {\n throw new Error('ArgumentNullException: layer');\n }\n if (value.page !== this.page) {\n throw new Error('ArgumentException: The layer belongs to another page');\n }\n // // Add/remove the layer.\n // let layer : PdfPageLayer = this.items(index);\n // if (layer != null) {\n // this.RemoveLayer(layer);\n // }\n // this.List[index] = value;\n // this.InsertLayer(index, value);\n }\n };\n PdfPageLayerCollection.prototype.add = function (firstArgument, secondArgument) {\n if (typeof firstArgument === 'undefined') {\n var layer = new PdfPageLayer(this.page);\n layer.name = '';\n this.add(layer);\n return layer;\n }\n else if (firstArgument instanceof PdfPageLayer) {\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var index = this.list.push(firstArgument);\n // Register layer.\n this.addLayer(index, firstArgument);\n return index;\n }\n else {\n return 0;\n }\n };\n /**\n * Registers `layer` at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.addLayer = function (index, layer) {\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.add(reference);\n };\n // private RemoveLayer(layer : PdfPageLayer) : void {\n // if (layer == null) {\n // throw new Error('ArgumentNullException:layer');\n // }\n // let reference : PdfReferenceHolder = new PdfReferenceHolder(layer);\n // if (this.page != null) {\n // this.page.Contents.Remove(reference);\n // }\n // }\n /**\n * Inserts `PdfPageLayer` into the collection at specified index.\n * @private\n */\n PdfPageLayerCollection.prototype.insert = function (index, layer) {\n // if (index < 0)\n // throw new ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\");\n // if (layer == null)\n // throw new ArgumentNullException(\"layer\");\n // if (layer.Page != m_page)\n // throw new ArgumentException(\"The layer belongs to another page\");\n var list = [];\n var length = this.list.length;\n for (var i = index; i < length; i++) {\n list.push(this.list.pop());\n }\n this.list.push(layer);\n for (var i = 0; i < list.length; i++) {\n this.list.push(list[i]);\n }\n // Register layer.\n this.insertLayer(index, layer);\n };\n /**\n * Registers layer at the page.\n * @private\n */\n PdfPageLayerCollection.prototype.insertLayer = function (index, layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException:layer');\n }\n var reference = new PdfReferenceHolder(layer);\n this.page.contents.insert(index, reference);\n };\n // tslint:disable\n /**\n * `Parses the layers`.\n * @private\n */\n PdfPageLayerCollection.prototype.parseLayers = function (loadedPage) {\n // if (loadedPage == null) {\n // throw new Error('ArgumentNullException:loadedPage');\n // }\n var contents = this.page.contents;\n var resource = this.page.getResources();\n var crossTable = null;\n var ocproperties = null;\n var propertie = null;\n var isLayerAdded = false;\n // if (loadedPage instanceof PdfPage) {\n crossTable = loadedPage.crossTable;\n // } else {\n // crossTable = (loadedPage as PdfLoadedPage).CrossTable;\n // Propertie = PdfCrossTable.Dereference(Resource[DictionaryProperties.Properties]) as PdfDictionary;\n // ocproperties = PdfCrossTable.Dereference((loadedPage as PdfLoadedPage).\n // Document.Catalog[DictionaryProperties.OCProperties]) as PdfDictionary;\n // }\n var saveStream = new PdfStream();\n var restoreStream = new PdfStream();\n var saveState = 'q';\n var newLine = '\\n';\n var restoreState = 'Q';\n // for (let index : number = 0; index < contents.Items.length; index++) {\n // let obj : IPdfPrimitive = contents[index];\n // let stream : PdfStream = crossTable.GetObject(obj) as PdfStream;\n // if (stream == null)\n // throw new PdfDocumentException(\"Invalid contents array.\");\n // // if (stream.Compress)\n // {\n // if (!loadedPage.Imported)\n // stream.Decompress();\n // }\n // byte[] contentId = stream.Data;\n // string str = PdfString.ByteToString(contentId);\n // if (!loadedPage.Imported && (contents.Count == 1) && ((stream.Data[stream.Data.Length - 2] ==\n // RestoreState) || (stream.Data[stream.Data.Length - 1] == RestoreState)))\n // {\n // byte[] content = stream.Data;\n // byte[] data = new byte[content.Length + 4];\n // data[0] = SaveState;\n // data[1] = NewLine;\n // content.CopyTo(data, 2);\n // data[data.Length - 2] = NewLine;\n // data[data.Length - 1] = RestoreState;\n // stream.Data = data;\n // }\n // if (ocproperties != null)\n // {\n // if (Propertie != null)\n // {\n // foreach (KeyValuePair prop in Propertie.Items)\n // {\n // String Key = prop.Key.ToString();\n // PdfReferenceHolder refh = prop.Value as PdfReferenceHolder;\n // PdfDictionary Dict = null;\n // if (refh != null)\n // {\n // Dict = refh.Object as PdfDictionary;\n // }\n // else\n // {\n // Dict = prop.Value as PdfDictionary;\n // }\n // PdfDictionary m_usage = PdfCrossTable.Dereference(Dict[DictionaryProperties.Usage]) as PdfDictionary;\n // if (m_usage != null)\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // PdfDictionary printoption = PdfCrossTable.Dereference(m_usage[DictionaryProperties.Print])\n // as PdfDictionary;\n // if (printoption != null)\n // {\n // layer.m_printOption = printoption;\n // foreach (KeyValuePair value in printoption.Items)\n // {\n // if (value.Key.Value.Equals(DictionaryProperties.PrintState))\n // {\n // string printState = (value.Value as PdfName).Value;\n // if (printState.Equals(DictionaryProperties.OCGON))\n // {\n // layer.PrintState = PdfPrintState.AlwaysPrint;\n // break;\n // }\n // else\n // {\n // layer.PrintState = PdfPrintState.NeverPrint;\n // break;\n // }\n // }\n // }\n // }\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // List.add(layer);\n // isLayerAdded = true;\n // if(!str.Contains(\"EMC\"))\n // break;\n // }\n // }\n // else\n // {\n // if (str.Contains(Key))\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // if(Dict.ContainsKey(DictionaryProperties.Name))\n // {\n // PdfString layerName = PdfCrossTable.Dereference(Dict[DictionaryProperties.Name]) as PdfString;\n // layer.Name = layerName.Value;\n // }\n // isLayerAdded = true;\n // break;\n // }\n // }\n // }\n // }\n // }\n // if (!isLayerAdded)\n // {\n // PdfPageLayer layer = new PdfPageLayer(loadedPage, stream);\n // List.add(layer);\n // }\n // else\n // isLayerAdded = false;\n // }\n var saveData = [];\n saveData.push(saveState);\n saveStream.data = saveData;\n contents.insert(0, new PdfReferenceHolder(saveStream));\n saveData = [];\n saveData.push(restoreState);\n restoreStream.data = saveData;\n contents.insert(contents.count, new PdfReferenceHolder(restoreStream));\n };\n /**\n * Returns `index of` the `PdfPageLayer` in the collection if exists, -1 otherwise.\n * @private\n */\n PdfPageLayerCollection.prototype.indexOf = function (layer) {\n if (layer == null) {\n throw new Error('ArgumentNullException: layer');\n }\n var index = this.list.indexOf(layer);\n return index;\n };\n return PdfPageLayerCollection;\n}(PdfCollection));\nexport { PdfPageLayerCollection };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfPageLayerCollection } from './pdf-page-layer-collection';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfResources } from './../graphics/pdf-resources';\n/**\n * The abstract base class for all pages,\n * `PdfPageBase` class provides methods and properties to create PDF pages and its elements.\n * @private\n */\nvar PdfPageBase = /** @class */ (function () {\n //constructors\n /**\n * Initializes a new instance of the `PdfPageBase` class.\n * @private\n */\n function PdfPageBase(dictionary) {\n /**\n * `Index` of the default layer.\n * @default -1.\n * @private\n */\n this.defLayerIndex = -1;\n /**\n * Local variable to store if page `updated`.\n * @default false.\n * @private\n */\n this.modified = false;\n /**\n * Instance of `DictionaryProperties` class.\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.pageDictionary = dictionary;\n }\n Object.defineProperty(PdfPageBase.prototype, \"section\", {\n //Properties\n /**\n * Gets the `section` of a page.\n * @private\n */\n get: function () {\n // if (this.pdfSection === null) {\n // throw new Error('PdfException : Page must be added to some section before using.');\n // }\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"dictionary\", {\n /**\n * Gets the page `dictionary`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pageDictionary;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayer\", {\n /**\n * Gets the `default layer` of the page (Read only).\n * @private\n */\n get: function () {\n var layer = this.layers;\n var index = this.defaultLayerIndex;\n var returnlayer = layer.items(index);\n return returnlayer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"defaultLayerIndex\", {\n /**\n * Gets or sets `index of the default layer`.\n * @private\n */\n get: function () {\n if (this.layerCollection.count === 0 || this.defLayerIndex === -1) {\n var layer = this.layerCollection.add();\n this.defLayerIndex = this.layerCollection.indexOf(layer);\n }\n return this.defLayerIndex;\n },\n /**\n * Gets or sets` index of the default layer`.\n * @private\n */\n set: function (value) {\n if (value < 0 || value > this.layers.count - 1) {\n throw new Error('ArgumentOutOfRangeException : value, Index can not be less 0 and greater Layers.Count - 1');\n }\n else {\n this.defLayerIndex = value;\n this.modified = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageBase.prototype, \"layers\", {\n /**\n * Gets the collection of the page's `layers` (Read only).\n * @private\n */\n get: function () {\n if (this.layerCollection == null || typeof this.layerCollection === 'undefined') {\n this.layerCollection = new PdfPageLayerCollection(this);\n }\n return this.layerCollection;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return an instance of `PdfResources` class.\n * @private\n */\n PdfPageBase.prototype.getResources = function () {\n if (this.resources == null) {\n this.resources = new PdfResources();\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n }\n return this.resources;\n };\n Object.defineProperty(PdfPageBase.prototype, \"contents\", {\n /**\n * Gets `array of page's content`.\n * @private\n */\n get: function () {\n var obj = this.pageDictionary.items.getValue(this.dictionaryProperties.contents);\n var contents = obj;\n var rh = obj;\n if (contents == null) {\n contents = new PdfArray();\n this.pageDictionary.items.setValue(this.dictionaryProperties.contents, contents);\n }\n return contents;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Sets the `resources`.\n * @private\n */\n PdfPageBase.prototype.setResources = function (res) {\n this.resources = res;\n this.dictionary.items.setValue(this.dictionaryProperties.resources, this.resources);\n this.modified = true;\n };\n return PdfPageBase;\n}());\nexport { PdfPageBase };\n","import { PdfArray } from './../primitives/pdf-array';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { SizeF, RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfStringLayouter } from './../graphics/fonts/string-layouter';\nimport { PdfColorSpace } from './../graphics/enum';\n/**\n * `PdfAnnotationCollection` class represents the collection of 'PdfAnnotation' objects.\n * @private\n */\nvar PdfAnnotationCollection = /** @class */ (function () {\n function PdfAnnotationCollection(page) {\n // Constants\n /**\n * `Error` constant message.\n * @private\n */\n this.alreadyExistsAnnotationError = 'This annotatation had been already added to page';\n /**\n * `Error` constant message.\n * @private\n */\n this.missingAnnotationException = 'Annotation is not contained in collection.';\n /**\n * Specifies the Internal variable to store fields of `PdfDictionaryProperties`.\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n /**\n * Array of the `annotations`.\n * @private\n */\n this.internalAnnotations = new PdfArray();\n /**\n * privte `list` for the annotations.\n * @private\n */\n this.lists = [];\n if (typeof page !== 'undefined') {\n this.page = page;\n }\n }\n Object.defineProperty(PdfAnnotationCollection.prototype, \"annotations\", {\n /**\n * Gets the `PdfAnnotation` object at the specified index. Read-Only.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n set: function (value) {\n this.internalAnnotations = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public methods\n /**\n * `Adds` a new annotation to the collection.\n * @private\n */\n PdfAnnotationCollection.prototype.add = function (annotation) {\n // this.SetPrint(annotation);\n this.doAdd(annotation);\n };\n /**\n * `Adds` a Annotation to collection.\n * @private\n */\n /* tslint:disable */\n PdfAnnotationCollection.prototype.doAdd = function (annotation) {\n if (typeof annotation.destination !== 'undefined') {\n var layout = new PdfStringLayouter();\n var layoutResult = layout.layout(annotation.text, annotation.font, annotation.stringFormat, new SizeF((annotation.bounds.width), 0), false, new SizeF(0, 0));\n var lastPosition = annotation.bounds.y;\n if (layoutResult.lines.length === 1) {\n var size = annotation.font.measureString(layoutResult.lines[0].text);\n annotation.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annotation.text = layoutResult.lines[0].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, annotation.bounds.y, annotation.bounds.width, annotation.bounds.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n }\n else {\n for (var i = 0; i < layoutResult.lines.length; i++) {\n var size = annotation.font.measureString(layoutResult.lines[i].text);\n if (i === 0) {\n annotation.bounds = new RectangleF(annotation.bounds.x, lastPosition, size.width, size.height);\n annotation.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annotation.text, annotation.font, null, annotation.brush, annotation.bounds.x, lastPosition, size.width, size.height, null);\n //Add annotation to dictionary.\n annotation.setPage(this.page);\n this.setColor(annotation);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n this.lists.push(annotation);\n //Update y for drawing next line of the text.\n lastPosition += annotation.bounds.height;\n }\n else {\n var annot = annotation.clone();\n annot.bounds = new RectangleF(new PointF(annotation.bounds.x, lastPosition), size);\n annot.text = layoutResult.lines[i].text;\n //Draw Annotation Text.\n this.page.graphics.drawString(annot.text, annot.font, null, annot.brush, annot.bounds.x, annot.bounds.y, annot.bounds.width, annot.bounds.height, null);\n //Add annotation to dictionary.\n annot.setPage(this.page);\n this.setColor(annot);\n this.internalAnnotations.add(new PdfReferenceHolder(annot));\n this.lists.push(annot);\n //Update y for drawing next line of the text.\n lastPosition += annot.bounds.height;\n }\n }\n }\n }\n else {\n annotation.setPage(this.page);\n this.internalAnnotations.add(new PdfReferenceHolder(annotation));\n return this.lists.push(annotation);\n }\n };\n /* tslint:enable */\n /**\n * `Set a color of an annotation`.\n * @private\n */\n PdfAnnotationCollection.prototype.setColor = function (annotation) {\n var cs = PdfColorSpace.Rgb;\n var colours = annotation.color.toArray(cs);\n annotation.dictionary.items.setValue(this.dictionaryProperties.c, colours);\n };\n Object.defineProperty(PdfAnnotationCollection.prototype, \"element\", {\n // IPdfWrapper Members\n /**\n * Gets the `Element` representing this object.\n * @private\n */\n get: function () {\n return this.internalAnnotations;\n },\n enumerable: true,\n configurable: true\n });\n return PdfAnnotationCollection;\n}());\nexport { PdfAnnotationCollection };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfPageBase } from './pdf-page-base';\nimport { PdfDictionary, SaveTemplateEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { SizeF } from './../drawing/pdf-drawing';\nimport { PdfAnnotationCollection } from './../annotations/annotation-collection';\nimport { PdfPageLayer } from './pdf-page-layer';\n/**\n * Provides methods and properties to create pages and its elements.\n * `PdfPage` class inherited from the `PdfPageBase` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfPage = /** @class */ (function (_super) {\n __extends(PdfPage, _super);\n //constructors\n /**\n * Initialize the new instance for `PdfPage` class.\n * @private\n */\n function PdfPage() {\n var _this = _super.call(this, new PdfDictionary()) || this;\n /**\n * Stores the instance of `PdfAnnotationCollection` class.\n * @hidden\n * @default null\n * @private\n */\n _this.annotationCollection = null;\n /**\n * Stores the instance of `PageBeginSave` event for Page Number Field.\n * @default null\n * @private\n */\n _this.beginSave = null;\n _this.initialize();\n return _this;\n }\n Object.defineProperty(PdfPage.prototype, \"document\", {\n //Properties\n /**\n * Gets current `document`.\n * @private\n */\n get: function () {\n if (this.section !== null && this.section.parent !== null) {\n return this.section.parent.document;\n }\n else {\n return null;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"graphics\", {\n /**\n * Get the current `graphics`.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // get graphics\n * let graphics : PdfGraphics = page1.graphics;\n * //\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n var result = this.defaultLayer.graphics;\n result.currentPage = this;\n return result;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"crossTable\", {\n /**\n * Gets the `cross table`.\n * @private\n */\n get: function () {\n if (this.section === null) {\n throw new Error('PdfDocumentException : Page is not created');\n }\n return this.section.parent === null ? this.section.parentDocument.crossTable : this.section.parent.document.crossTable;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"size\", {\n /**\n * Gets the size of the PDF page- Read only.\n * @public\n */\n get: function () {\n return this.section.pageSettings.size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"origin\", {\n /**\n * Gets the `origin` of the page.\n * @private\n */\n get: function () {\n return this.section.pageSettings.origin;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPage.prototype, \"annotations\", {\n /**\n * Gets a collection of the `annotations` of the page- Read only.\n * @private\n */\n get: function () {\n if (this.annotationCollection == null) {\n this.annotationCollection = new PdfAnnotationCollection(this);\n // if (!this.Dictionary.ContainsKey(this.dictionaryProperties.annots)) {\n this.dictionary.items.setValue(this.dictionaryProperties.annots, this.annotationCollection.element);\n // }\n this.annotationCollection.annotations = this.dictionary.items.getValue(this.dictionaryProperties.annots);\n }\n return this.annotationCollection;\n },\n enumerable: true,\n configurable: true\n });\n //Implementation\n /**\n * `Initializes` a page.\n * @private\n */\n PdfPage.prototype.initialize = function () {\n this.dictionary.items.setValue(this.dictionaryProperties.type, new PdfName('Page'));\n this.dictionary.pageBeginDrawTemplate = new SaveTemplateEventHandler(this);\n };\n /**\n * Sets parent `section` to the page.\n * @private\n */\n PdfPage.prototype.setSection = function (section) {\n this.section = section;\n this.dictionary.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(section));\n };\n /**\n * `Resets the progress`.\n * @private\n */\n PdfPage.prototype.resetProgress = function () {\n this.isProgressOn = false;\n };\n /**\n * Get the page size reduced by page margins and page template dimensions.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * //\n * // set the specified point using `getClientSize` method\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * //\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfPage.prototype.getClientSize = function () {\n var returnValue = this.section.getActualBounds(this, true);\n return new SizeF(returnValue.width, returnValue.height);\n };\n /**\n * Helper method to retrive the instance of `PageBeginSave` event for header and footer elements.\n * @private\n */\n PdfPage.prototype.pageBeginSave = function () {\n var doc = this.document;\n if (typeof doc !== undefined && doc != null) {\n this.drawPageTemplates(doc);\n }\n if (this.beginSave != null && typeof this.beginSave !== 'undefined') {\n this.beginSave(this);\n }\n };\n /**\n * Helper method to draw template elements.\n * @private\n */\n PdfPage.prototype.drawPageTemplates = function (document) {\n // Draw Background templates.\n var hasBackTemplates = this.section.containsTemplates(document, this, false);\n if (hasBackTemplates) {\n var backLayer = new PdfPageLayer(this, false);\n this.layers.insert(0, backLayer);\n this.section.drawTemplates(this, backLayer, document, false);\n if (backLayer.graphics !== null && typeof backLayer.graphics !== 'undefined') {\n for (var i = 0; i < backLayer.graphics.automaticFields.automaticFields.length; i++) {\n var fieldInfo = backLayer.graphics.automaticFields.automaticFields[i];\n fieldInfo.field.performDraw(backLayer.graphics, fieldInfo.location, fieldInfo.scalingX, fieldInfo.scalingY);\n }\n }\n }\n // Draw Foreground templates.\n var hasFrontTemplates = this.section.containsTemplates(document, this, true);\n if (hasFrontTemplates) {\n var frontLayer = new PdfPageLayer(this, false);\n this.layers.add(frontLayer);\n this.section.drawTemplates(this, frontLayer, document, true);\n }\n };\n return PdfPage;\n}(PdfPageBase));\nexport { PdfPage };\n","/**\n * Provides data for `PageAddedEventHandler` event.\n * This event raises when adding the new PDF page to the PDF document.\n */\nvar PageAddedEventArgs = /** @class */ (function () {\n function PageAddedEventArgs(page) {\n if (typeof page !== 'undefined') {\n this.pdfPage = page;\n }\n else {\n this.pdfPage = null;\n }\n }\n Object.defineProperty(PageAddedEventArgs.prototype, \"page\", {\n /**\n * Gets the `newly added page`.\n * @private\n */\n get: function () {\n return this.pdfPage;\n },\n enumerable: true,\n configurable: true\n });\n return PageAddedEventArgs;\n}());\nexport { PageAddedEventArgs };\n","/**\n * Represents the `collection of pages in a section`.\n * @private\n */\nvar PdfSectionPageCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfSectionPageCollection` class.\n * @private\n */\n function PdfSectionPageCollection(section) {\n // Fields\n /**\n * @hidden\n * @private\n */\n this.pdfSection = null;\n if (section == null) {\n throw Error('ArgumentNullException(\"section\")');\n }\n this.section = section;\n }\n Object.defineProperty(PdfSectionPageCollection.prototype, \"section\", {\n // Properties\n /**\n * Gets the `PdfPage` at the specified index.\n * @private\n */\n get: function () {\n return this.pdfSection;\n },\n set: function (value) {\n this.pdfSection = value;\n },\n enumerable: true,\n configurable: true\n });\n // Public Methods\n /**\n * `Determines` whether the specified page is within the collection.\n * @private\n */\n PdfSectionPageCollection.prototype.contains = function (page) {\n return this.section.contains(page);\n };\n /**\n * `Removes` the specified page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.remove = function (page) {\n this.section.remove(page);\n };\n /**\n * `Adds` a new page from collection.\n * @private\n */\n PdfSectionPageCollection.prototype.add = function () {\n return this.section.add();\n };\n return PdfSectionPageCollection;\n}());\nexport { PdfSectionPageCollection };\n","import { TemplateType } from './../pages/enum';\n// import { PdfStampCollection } from `./../Pages/PdfStampCollection`;\n/**\n * `PdfDocumentTemplate` class encapsulates a page template for all the pages in the document.\n * @private\n */\nvar PdfDocumentTemplate = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfDocumentTemplate` class.\n * @public\n */\n function PdfDocumentTemplate() {\n //\n }\n Object.defineProperty(PdfDocumentTemplate.prototype, \"left\", {\n // private m_stamps : PdfStampCollection;\n // Properties\n /**\n * `Left` page template object.\n * @public\n */\n get: function () {\n return this.leftTemplate;\n },\n set: function (value) {\n this.leftTemplate = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"top\", {\n /**\n * `Top` page template object.\n * @public\n */\n get: function () {\n return this.topTemplate;\n },\n set: function (value) {\n this.topTemplate = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"right\", {\n /**\n * `Right` page template object.\n * @public\n */\n get: function () {\n return this.rightTemplate;\n },\n set: function (value) {\n this.rightTemplate = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"bottom\", {\n /**\n * `Bottom` page template object.\n * @public\n */\n get: function () {\n return this.bottomTemplate;\n },\n set: function (value) {\n this.bottomTemplate = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenLeft\", {\n /**\n * `EvenLeft` page template object.\n * @public\n */\n get: function () {\n return this.evenLeft;\n },\n set: function (value) {\n this.evenLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenTop\", {\n /**\n * `EvenTop` page template object.\n * @public\n */\n get: function () {\n return this.evenTop;\n },\n set: function (value) {\n this.evenTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenRight\", {\n /**\n * `EvenRight` page template object.\n * @public\n */\n get: function () {\n return this.evenRight;\n },\n set: function (value) {\n this.evenRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"EvenBottom\", {\n /**\n * `EvenBottom` page template object.\n * @public\n */\n get: function () {\n return this.evenBottom;\n },\n set: function (value) {\n this.evenBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddLeft\", {\n /**\n * `OddLeft` page template object.\n * @public\n */\n get: function () {\n return this.oddLeft;\n },\n set: function (value) {\n this.oddLeft = this.checkElement(value, TemplateType.Left);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddTop\", {\n /**\n * `OddTop` page template object.\n * @public\n */\n get: function () {\n return this.oddTop;\n },\n set: function (value) {\n this.oddTop = this.checkElement(value, TemplateType.Top);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddRight\", {\n /**\n * `OddRight` page template object.\n * @public\n */\n get: function () {\n return this.oddRight;\n },\n set: function (value) {\n this.oddRight = this.checkElement(value, TemplateType.Right);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentTemplate.prototype, \"OddBottom\", {\n /**\n * `OddBottom` page template object.\n * @public\n */\n get: function () {\n return this.oddBottom;\n },\n set: function (value) {\n this.oddBottom = this.checkElement(value, TemplateType.Bottom);\n },\n enumerable: true,\n configurable: true\n });\n // Implementation\n /**\n * Returns `left` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getLeft = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenLeft != null) ? this.EvenLeft : this.left;\n }\n else {\n template = (this.OddLeft != null) ? this.OddLeft : this.left;\n }\n // }\n return template;\n };\n /**\n * Returns `top` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getTop = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenTop != null) ? this.EvenTop : this.top;\n }\n else {\n template = (this.OddTop != null) ? this.OddTop : this.top;\n }\n // }\n return template;\n };\n /**\n * Returns `right` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getRight = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenRight != null) ? this.EvenRight : this.right;\n }\n else {\n template = (this.OddRight != null) ? this.OddRight : this.right;\n }\n // }\n return template;\n };\n /**\n * Returns `bottom` template.\n * @public\n */\n PdfDocumentTemplate.prototype.getBottom = function (page) {\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var template = null;\n // if (page.Document.Pages != null) {\n var even = this.isEven(page);\n if (even) {\n template = (this.EvenBottom != null) ? this.EvenBottom : this.bottom;\n }\n else {\n template = (this.OddBottom != null) ? this.OddBottom : this.bottom;\n }\n // }\n return template;\n };\n /**\n * Checks whether the page `is even`.\n * @private\n */\n PdfDocumentTemplate.prototype.isEven = function (page) {\n var pages = page.section.document.pages;\n var index = 0;\n if (pages.pageCollectionIndex.containsKey(page)) {\n index = pages.pageCollectionIndex.getValue(page) + 1;\n }\n else {\n index = pages.indexOf(page) + 1;\n }\n var even = ((index % 2) === 0);\n return even;\n };\n /**\n * Checks a `template element`.\n * @private\n */\n PdfDocumentTemplate.prototype.checkElement = function (templateElement, type) {\n if (templateElement != null) {\n if ((typeof templateElement.type !== 'undefined') && (templateElement.type !== TemplateType.None)) {\n throw new Error('NotSupportedException:Can not reassign the template element. Please, create new one.');\n }\n templateElement.type = type;\n }\n return templateElement;\n };\n return PdfDocumentTemplate;\n}());\nexport { PdfDocumentTemplate };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * PdfSectionTemplate.ts class for EJ2-PDF\n */\nimport { PdfDocumentTemplate } from './../document/pdf-document-template';\n/**\n * Represents a `page template` for all the pages in the section.\n */\nvar PdfSectionTemplate = /** @class */ (function (_super) {\n __extends(PdfSectionTemplate, _super);\n // Constructors\n /**\n * `Creates a new object`.\n * @private\n */\n function PdfSectionTemplate() {\n var _this = _super.call(this) || this;\n _this.leftValue = _this.topValue = _this.rightValue = _this.bottomValue = _this.stampValue = true;\n return _this;\n }\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentLeftTemplate\", {\n // Properties\n /**\n * Gets or sets value indicating whether parent `Left page template should be used or not`.\n * @private\n */\n get: function () {\n return this.leftValue;\n },\n set: function (value) {\n this.leftValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentTopTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Top page template should be used or not`.\n * @private\n */\n get: function () {\n return this.topValue;\n },\n set: function (value) {\n this.topValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentRightTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Right page template should be used or not`.\n * @private\n */\n get: function () {\n return this.rightValue;\n },\n set: function (value) {\n this.rightValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentBottomTemplate\", {\n /**\n * Gets or sets value indicating whether parent `Bottom page template should be used or not`.\n * @private\n */\n get: function () {\n return this.bottomValue;\n },\n set: function (value) {\n this.bottomValue = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionTemplate.prototype, \"applyDocumentStamps\", {\n /**\n * Gets or sets value indicating whether the `stamp value` is true or not.\n * @private\n */\n get: function () {\n return this.stampValue;\n },\n set: function (value) {\n this.stampValue = value;\n },\n enumerable: true,\n configurable: true\n });\n return PdfSectionTemplate;\n}(PdfDocumentTemplate));\nexport { PdfSectionTemplate };\n","import { PdfPage } from './pdf-page';\nimport { PageAddedEventArgs } from './page-added-event-arguments';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfDictionary } from './../primitives/pdf-dictionary';\nimport { SaveSectionEventHandler } from './../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\nimport { PdfSectionCollection } from './pdf-section-collection';\nimport { PdfSectionPageCollection } from './pdf-section-page-collection';\nimport { RectangleF } from './../drawing/pdf-drawing';\nimport { PdfSectionTemplate } from './pdf-section-templates';\n/**\n * Represents a `section` entity. A section it's a set of the pages with similar page settings.\n */\nvar PdfSection = /** @class */ (function () {\n function PdfSection(document, pageSettings) {\n //Fields\n //public PageAdded() : PageAddedEventArgs.PageAddedEventHandler = new PageAddedEventArgs.PageAddedEventHandler(Object,args)\n /**\n * @hidden\n * @private\n */\n this.pageAdded = new PageAddedEventArgs();\n /**\n * @hidden\n * @private\n */\n this.pdfPages = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n this.pdfDocument = document;\n if (typeof pageSettings === 'undefined') {\n this.settings = document.pageSettings.clone();\n this.initialSettings = this.settings.clone();\n }\n else {\n this.settings = pageSettings.clone();\n this.initialSettings = this.settings.clone();\n }\n this.initialize();\n }\n Object.defineProperty(PdfSection.prototype, \"parent\", {\n //Property\n /**\n * Gets or sets the `parent`.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n set: function (value) {\n this.sectionCollection = value;\n this.section.items.setValue(this.dictionaryProperties.parent, new PdfReferenceHolder(value));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"parentDocument\", {\n /**\n * Gets the `parent document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pageSettings\", {\n /**\n * Gets or sets the `page settings` of the section.\n * @private\n */\n get: function () {\n return this.settings;\n },\n set: function (value) {\n if (value != null) {\n this.settings = value;\n }\n else {\n throw Error('Value can not be null.');\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.section;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"count\", {\n /**\n * Gets the `count` of the pages in the section.\n * @private\n */\n get: function () {\n return this.pagesReferences.count;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"template\", {\n /**\n * Gets or sets a `template` for the pages in the section.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfSectionTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"document\", {\n /**\n * Gets the `document`.\n * @private\n */\n get: function () {\n return this.sectionCollection.document;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSection.prototype, \"pages\", {\n /**\n * Gets the collection of `pages` in a section (Read only)\n * @private\n */\n get: function () {\n if (this.pagesCollection == null || typeof this.pagesCollection === 'undefined') {\n this.pagesCollection = new PdfSectionPageCollection(this);\n }\n return this.pagesCollection;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * `Return the page collection` of current section.\n * @private\n */\n PdfSection.prototype.getPages = function () {\n return this.pdfPages;\n };\n /**\n * `Translates` point into native coordinates of the page.\n * @private\n */\n PdfSection.prototype.pointToNativePdf = function (page, point) {\n var bounds = this.getActualBounds(page, true);\n point.x += bounds.x;\n point.y = this.pageSettings.height - (point.y);\n return point;\n };\n /**\n * Sets the page setting of the current section.\n * @public\n * @param settings Instance of `PdfPageSettings`\n */\n PdfSection.prototype.setPageSettings = function (settings) {\n this.settings = settings;\n this.state.orientation = settings.orientation;\n this.state.rotate = settings.rotate;\n this.state.size = settings.size;\n this.state.origin = settings.origin;\n };\n /**\n * `Initializes` the object.\n * @private\n */\n PdfSection.prototype.initialize = function () {\n this.pagesReferences = new PdfArray();\n this.section = new PdfDictionary();\n this.state = new PageSettingsState(this.pdfDocument);\n this.section.sectionBeginSave = new SaveSectionEventHandler(this, this.state);\n this.pageCount = new PdfNumber(0);\n this.section.items.setValue(this.dictionaryProperties.count, this.pageCount);\n this.section.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.pages));\n this.section.items.setValue(this.dictionaryProperties.kids, this.pagesReferences);\n };\n /**\n * Checks whether any template should be printed on this layer.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param foreground Layer z-order.\n * @returns True - if some content should be printed on the layer, False otherwise.\n */\n PdfSection.prototype.containsTemplates = function (document, page, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, foreground);\n var sectionTemplates = this.getSectionTemplates(page, foreground);\n return (documentHeaders.length > 0 || sectionTemplates.length > 0);\n };\n /**\n * Returns array of the document templates.\n * @private\n * @param document The parent document.\n * @param page The parent page.\n * @param headers If true - return headers/footers, if false - return simple templates.\n * @param foreground If true - return foreground templates, if false - return background templates.\n * @returns Returns array of the document templates.\n */\n /* tslint:disable */\n PdfSection.prototype.getDocumentTemplates = function (document, page, foreground) {\n var templates = [];\n if (this.template.applyDocumentTopTemplate && document.template.getTop(page) != null) {\n if ((!(document.template.getTop(page).foreground || foreground)) || (document.template.getTop(page).foreground && foreground)) {\n templates.push(document.template.getTop(page));\n }\n }\n if (this.template.applyDocumentBottomTemplate && document.template.getBottom(page) != null) {\n if ((!(document.template.getBottom(page).foreground || foreground)) || (document.template.getBottom(page).foreground && foreground)) {\n templates.push(document.template.getBottom(page));\n }\n }\n if (this.template.applyDocumentLeftTemplate && document.template.getLeft(page) != null) {\n if ((!(document.template.getLeft(page).foreground || foreground)) || (document.template.getLeft(page).foreground && foreground)) {\n templates.push(document.template.getLeft(page));\n }\n }\n if (this.template.applyDocumentRightTemplate && document.template.getRight(page) != null) {\n if ((!(document.template.getRight(page).foreground || foreground)) || (document.template.getRight(page).foreground && foreground)) {\n templates.push(document.template.getRight(page));\n }\n }\n return templates;\n };\n /**\n * Returns array of the section templates.\n * @private\n * @param page The parent page.\n * @param foreground If true - return foreground templates, if false - return background templates.\n * @returns Returns array of the section templates.\n */\n /* tslint:disable */\n PdfSection.prototype.getSectionTemplates = function (page, foreground) {\n var templates = [];\n if (this.template.getTop(page) != null) {\n var pageTemplate = this.template.getTop(page);\n if ((!(pageTemplate.foreground || foreground)) || (pageTemplate.foreground && foreground)) {\n templates.push(pageTemplate);\n }\n }\n if (this.template.getBottom(page) != null) {\n var pageTemplate = this.template.getBottom(page);\n if ((!(pageTemplate.foreground || foreground)) || (pageTemplate.foreground && foreground)) {\n templates.push(pageTemplate);\n }\n }\n if (this.template.getLeft(page) != null) {\n var pageTemplate = this.template.getLeft(page);\n if ((!(pageTemplate.foreground || foreground)) || (pageTemplate.foreground && foreground)) {\n templates.push(pageTemplate);\n }\n }\n if (this.template.getRight(page) != null) {\n var pageTemplate = this.template.getRight(page);\n if ((!(pageTemplate.foreground || foreground)) || (pageTemplate.foreground && foreground)) {\n templates.push(pageTemplate);\n }\n }\n return templates;\n };\n /* tslint:enable */\n /**\n * `Adds` the specified page.\n * @private\n */\n PdfSection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var r = this.checkPresence(page);\n this.pdfPages.push(page);\n this.pagesReferences.add(r);\n page.setSection(this);\n page.resetProgress();\n this.pageAddedMethod(page);\n }\n };\n /**\n * `Checks the presence`.\n * @private\n */\n PdfSection.prototype.checkPresence = function (page) {\n var rh = new PdfReferenceHolder(page);\n var contains = false;\n var sc = this.parent;\n for (var index = 0; index < sc.section.length; index++) {\n var section = sc.section[index];\n contains = contains || section.contains(page);\n }\n return rh;\n };\n /**\n * `Determines` whether the page in within the section.\n * @private\n */\n PdfSection.prototype.contains = function (page) {\n var index = this.indexOf(page);\n return (0 <= index);\n };\n /**\n * Get the `index of` the page.\n * @private\n */\n PdfSection.prototype.indexOf = function (page) {\n for (var index = 0; index < this.pdfPages.length; index++) {\n if (this.pdfPages[index] === page) {\n return this.pdfPages.indexOf(page);\n }\n }\n var r = new PdfReferenceHolder(page);\n return this.pagesReferences.indexOf(r);\n };\n /**\n * Call two event's methods.\n * @hidden\n * @private\n */\n PdfSection.prototype.pageAddedMethod = function (page) {\n //Create event's arguments\n var args = new PageAddedEventArgs(page);\n this.onPageAdded(args);\n var parent = this.parent;\n parent.document.pages.onPageAdded(args);\n this.pageCount.intValue = this.count;\n };\n /**\n * Called when the page has been added.\n * @hidden\n * @private\n */\n PdfSection.prototype.onPageAdded = function (args) {\n //\n };\n PdfSection.prototype.getActualBounds = function (arg1, arg2, arg3) {\n if (arg1 instanceof PdfPage && typeof arg2 === 'boolean') {\n var result = void 0;\n var document_1 = this.parent.document;\n result = this.getActualBounds(document_1, arg1, arg2);\n return result;\n }\n else {\n arg1 = arg1;\n arg2 = arg2;\n arg3 = arg3;\n var bounds = new RectangleF(0, 0, 0, 0);\n bounds.height = (arg3) ? this.pageSettings.size.height : this.pageSettings.getActualSize().height;\n bounds.width = (arg3) ? this.pageSettings.size.width : this.pageSettings.getActualSize().width;\n var left = this.getLeftIndentWidth(arg1, arg2, arg3);\n var top_1 = this.getTopIndentHeight(arg1, arg2, arg3);\n var right = this.getRightIndentWidth(arg1, arg2, arg3);\n var bottom = this.getBottomIndentHeight(arg1, arg2, arg3);\n bounds.x += left;\n bounds.y += top_1;\n bounds.width -= (left + right);\n bounds.height -= (top_1 + bottom);\n return bounds;\n }\n };\n /**\n * Calculates width of the `left indent`.\n * @private\n */\n PdfSection.prototype.getLeftIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.left : 0;\n var templateWidth = (this.template.getLeft(page) != null) ? this.template.getLeft(page).width : 0;\n var docTemplateWidth = (document.template.getLeft(page) != null) ? document.template.getLeft(page).width : 0;\n value += (this.template.applyDocumentLeftTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the top indent.\n * @private\n */\n PdfSection.prototype.getTopIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.top : 0;\n var templateHeight = (this.template.getTop(page) != null) ? this.template.getTop(page).height : 0;\n var docTemplateHeight = (document.template.getTop(page) != null) ? document.template.getTop(page).height : 0;\n value += (this.template.applyDocumentTopTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * Calculates `width` of the right indent.\n * @private\n */\n PdfSection.prototype.getRightIndentWidth = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.right : 0;\n var templateWidth = (this.template.getRight(page) != null) ? this.template.getRight(page).width : 0;\n var docTemplateWidth = (document.template.getRight(page) != null) ? document.template.getRight(page).width : 0;\n value += (this.template.applyDocumentRightTemplate) ? Math.max(templateWidth, docTemplateWidth) : templateWidth;\n return value;\n };\n /**\n * Calculates `Height` of the bottom indent.\n * @private\n */\n PdfSection.prototype.getBottomIndentHeight = function (document, page, includeMargins) {\n if (document == null) {\n throw new Error('ArgumentNullException:document');\n }\n if (page == null) {\n throw new Error('ArgumentNullException:page');\n }\n var value = (includeMargins) ? this.pageSettings.margins.bottom : 0;\n var templateHeight = (this.template.getBottom(page) != null) ? this.template.getBottom(page).height : 0;\n var docTemplateHeight = (document.template.getBottom(page) != null) ? document.template.getBottom(page).height : 0;\n value += (this.template.applyDocumentBottomTemplate) ? Math.max(templateHeight, docTemplateHeight) : templateHeight;\n return value;\n };\n /**\n * `Removes` the page from the section.\n * @private\n */\n PdfSection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var index = this.pdfPages.indexOf(page);\n this.pagesReferences.removeAt(index);\n var temproaryPages = [];\n for (var j = 0; j < index; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n for (var j = index + 1; j < this.pdfPages.length; j++) {\n temproaryPages.push(this.pdfPages[j]);\n }\n this.pdfPages = temproaryPages;\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSection.prototype.applyPageSettings = function (container, parentSettings, state) {\n var bounds = new RectangleF(state.origin, state.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n var rotate = 0;\n rotate = PdfSectionCollection.rotateFactor * state.rotate;\n var angle = new PdfNumber(rotate);\n container.items.setValue(this.dictionaryProperties.rotate, angle);\n };\n /**\n * Catches the Save event of the dictionary.\n * @hidden\n * @private\n */\n PdfSection.prototype.beginSave = function (state, writer) {\n var doc = writer.document;\n this.applyPageSettings(this.section, doc.pageSettings, state);\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplates = function (page, layer, document, foreground) {\n var documentHeaders = this.getDocumentTemplates(document, page, foreground);\n var sectionHeaders = this.getSectionTemplates(page, foreground);\n this.drawTemplatesHelper(layer, document, documentHeaders);\n this.drawTemplatesHelper(layer, document, sectionHeaders);\n };\n /**\n * Draws page templates on the page.\n * @private\n */\n PdfSection.prototype.drawTemplatesHelper = function (layer, document, templates) {\n if (templates != null && templates.length > 0) {\n var len = templates.length;\n for (var i = 0; i < len; i++) {\n var template = templates[i];\n template.draw(layer, document);\n }\n }\n };\n return PdfSection;\n}());\nexport { PdfSection };\nvar PageSettingsState = /** @class */ (function () {\n //Public Constructor\n /**\n * New instance to store the `PageSettings`.\n * @private\n */\n function PageSettingsState(document) {\n this.pageOrientation = document.pageSettings.orientation;\n this.pageRotate = document.pageSettings.rotate;\n this.pageSize = document.pageSettings.size;\n this.pageOrigin = document.pageSettings.origin;\n }\n Object.defineProperty(PageSettingsState.prototype, \"orientation\", {\n //public Properties\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrientation;\n },\n set: function (value) {\n this.pageOrientation = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"rotate\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageRotate;\n },\n set: function (value) {\n this.pageRotate = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"size\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageSize;\n },\n set: function (value) {\n this.pageSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PageSettingsState.prototype, \"origin\", {\n /**\n * @hidden\n * @private\n */\n get: function () {\n return this.pageOrigin;\n },\n set: function (value) {\n this.pageOrigin = value;\n },\n enumerable: true,\n configurable: true\n });\n return PageSettingsState;\n}());\nexport { PageSettingsState };\n","import { PdfNumber } from './../primitives/pdf-number';\nimport { PdfName } from './../primitives/pdf-name';\nimport { PdfArray } from './../primitives/pdf-array';\nimport { PdfDictionary, SaveSectionCollectionEventHandler } from './../primitives/pdf-dictionary';\nimport { PdfReferenceHolder } from './../primitives/pdf-reference';\nimport { RectangleF, PointF } from './../drawing/pdf-drawing';\nimport { PdfSection } from './pdf-section';\nimport { DictionaryProperties } from './../input-output/pdf-dictionary-properties';\n/**\n * Represents the `collection of the sections`.\n * @private\n */\nvar PdfSectionCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n function PdfSectionCollection(document) {\n /**\n * @hidden\n * @private\n */\n this.sections = [];\n /**\n * @hidden\n * @private\n */\n this.dictionaryProperties = new DictionaryProperties();\n // if (document === null) {\n // throw new Error('ArgumentNullException : document');\n // }\n this.pdfDocument = document.clone();\n this.initialize();\n }\n Object.defineProperty(PdfSectionCollection.prototype, \"section\", {\n //Properties\n /**\n * Gets the `Section` collection.\n */\n get: function () {\n return this.sections;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"document\", {\n /**\n * Gets a parent `document`.\n * @private\n */\n get: function () {\n return this.pdfDocument;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"count\", {\n /**\n * Gets the `number of sections` in a document.\n * @private\n */\n get: function () {\n return this.sections.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfSectionCollection.prototype, \"element\", {\n /**\n * Gets the wrapped `element`.\n * @private\n */\n get: function () {\n return this.pages;\n },\n enumerable: true,\n configurable: true\n });\n //Methods\n /**\n * `Initializes the object`.\n * @private\n */\n PdfSectionCollection.prototype.initialize = function () {\n this.sectionCount = new PdfNumber(0);\n this.sectionCollection = new PdfArray();\n this.pages = new PdfDictionary();\n this.pages.beginSave = new SaveSectionCollectionEventHandler(this);\n this.pages.items.setValue(this.dictionaryProperties.type, new PdfName('Pages'));\n this.pages.items.setValue(this.dictionaryProperties.kids, this.sectionCollection);\n this.pages.items.setValue(this.dictionaryProperties.count, this.sectionCount);\n this.pages.items.setValue(this.dictionaryProperties.resources, new PdfDictionary());\n this.setPageSettings(this.pages, this.pdfDocument.pageSettings);\n };\n /**\n * Initializes a new instance of the `PdfSectionCollection` class.\n * @private\n */\n PdfSectionCollection.prototype.pdfSectionCollection = function (index) {\n if (index < 0 || index >= this.count) {\n throw new Error('IndexOutOfRangeException()');\n }\n return this.sections[index];\n };\n /**\n * In fills dictionary by the data from `Page settings`.\n * @private\n */\n PdfSectionCollection.prototype.setPageSettings = function (container, pageSettings) {\n // if (container === null) {\n // throw new Error('ArgumentNullException : container');\n // }\n // if (pageSettings === null) {\n // throw new Error('ArgumentNullException : pageSettings');\n // }\n var bounds = new RectangleF(new PointF(), pageSettings.size);\n container.items.setValue(this.dictionaryProperties.mediaBox, PdfArray.fromRectangle(bounds));\n };\n /**\n * `Adds` the specified section.\n * @private\n */\n PdfSectionCollection.prototype.add = function (section) {\n if (typeof section === 'undefined') {\n var section_1 = new PdfSection(this.pdfDocument);\n this.add(section_1);\n return section_1;\n }\n else {\n // if (section === null) {\n // throw new Error('ArgumentNullException : section');\n // }\n var r = this.checkSection(section);\n this.sections.push(section);\n section.parent = this;\n this.sectionCollection.add(r);\n return this.sections.indexOf(section);\n }\n };\n /**\n * `Checks` if the section is within the collection.\n * @private\n */\n PdfSectionCollection.prototype.checkSection = function (section) {\n var r = new PdfReferenceHolder(section);\n var contains = this.sectionCollection.contains(r);\n // if (contains) {\n // throw new Error('ArgumentException : The object can not be added twice to the collection,section');\n // }\n return r;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @private\n */\n PdfSectionCollection.prototype.countPages = function () {\n var count = 0;\n this.sections.forEach(function (n) { return (count += n.count); });\n return count;\n };\n /**\n * Catches the Save event of the dictionary to `count the pages`.\n * @hidden\n * @private\n */\n PdfSectionCollection.prototype.beginSave = function () {\n this.sectionCount.intValue = this.countPages();\n };\n //Fields\n /**\n * Rotate factor for page `rotation`.\n * @default 90\n * @private\n */\n PdfSectionCollection.rotateFactor = 90;\n return PdfSectionCollection;\n}());\nexport { PdfSectionCollection };\n","import { PdfPage } from './pdf-page';\nimport { Dictionary } from './../collections/dictionary';\n/**\n * Represents a virtual collection of all the pages in the document.\n * @private\n */\nvar PdfDocumentPageCollection = /** @class */ (function () {\n //constructor\n /**\n * Initializes a new instance of the `PdfPageCollection` class.\n * @private\n */\n function PdfDocumentPageCollection(document) {\n /**\n * It holds the page collection with the `index`.\n * @private\n */\n this.pdfPageCollectionIndex = new Dictionary();\n this.document = document;\n }\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"count\", {\n //Property\n /**\n * Gets the total `number of the pages`.\n * @private\n */\n get: function () {\n return this.countPages();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocumentPageCollection.prototype, \"pageCollectionIndex\", {\n /**\n * Gets a `page index` from the document.\n * @private\n */\n get: function () {\n return this.pdfPageCollectionIndex;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocumentPageCollection.prototype.add = function (page) {\n if (typeof page === 'undefined') {\n var page_1 = new PdfPage();\n this.add(page_1);\n return page_1;\n }\n else {\n var section = this.getLastSection();\n section.add(page);\n }\n };\n /**\n * Returns `last section` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getLastSection = function () {\n var sc = this.document.sections;\n if (sc.section.length === 0) {\n sc.add();\n }\n var section = sc.section[sc.section.length - 1];\n return section;\n };\n /**\n * Called when `new page has been added`.\n * @private\n */\n PdfDocumentPageCollection.prototype.onPageAdded = function (args) {\n // if (PageAdded !== null)\n // {\n // PageAdded(this, args);\n // }\n };\n /**\n * Gets the `total number of pages`.\n * @private\n */\n PdfDocumentPageCollection.prototype.countPages = function () {\n var sc = this.document.sections;\n var count = 0;\n for (var index = 0; index < sc.section.length; index++) {\n count += sc.section[index].count;\n }\n return count;\n };\n /**\n * Gets the `page object` from page index.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPageByIndex = function (index) {\n return this.getPage(index);\n };\n /**\n * Gets a page by its `index` in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.getPage = function (index) {\n if ((index < 0) || (index >= this.count)) {\n throw Error('ArgumentOutOfRangeException(\"index\", \"Value can not be less 0\")');\n }\n var page = null;\n var sectionStartIndex = 0;\n var sectionCount = 0;\n var pageIndex = 0;\n var length = this.document.sections.count;\n for (var i = 0; i < length; i++) {\n var section = this.document.sections.section[i];\n sectionCount = section.count;\n pageIndex = index - sectionStartIndex;\n // We found a section containing the page.\n if ((index >= sectionStartIndex && pageIndex < sectionCount)) {\n page = section.getPages()[pageIndex];\n break;\n }\n sectionStartIndex += sectionCount;\n }\n return page;\n };\n /**\n * Gets the `index of` the page in the document.\n * @private\n */\n PdfDocumentPageCollection.prototype.indexOf = function (page) {\n var index = -1;\n if (page == null) {\n throw new Error('ArgumentNullException: page');\n }\n else {\n var numPages = 0;\n for (var i = 0, len = this.document.sections.count; i < len; i++) {\n var section = this.document.sections.pdfSectionCollection(i);\n index = section.indexOf(page);\n if (index >= 0) {\n index += numPages;\n break;\n }\n else {\n index = -1;\n }\n numPages += section.count;\n }\n }\n return index;\n };\n /**\n * `Removes` the specified page.\n * @private\n */\n PdfDocumentPageCollection.prototype.remove = function (page) {\n if (page == null) {\n throw Error('ArgumentNullException(\"page\")');\n }\n var section = null;\n var len;\n for (var i = 0, len_1 = this.document.sections.count; i < len_1; i++) {\n section = this.document.sections.pdfSectionCollection(i);\n if (section.pages.contains(page)) {\n section.pages.remove(page);\n break;\n }\n }\n return section;\n };\n return PdfDocumentPageCollection;\n}());\nexport { PdfDocumentPageCollection };\n","/**\n * PdfCacheCollection.ts class for EJ2-PDF\n */\nimport { Dictionary } from './../collections/dictionary';\n/**\n * `Collection of the cached objects`.\n * @private\n */\nvar PdfCacheCollection = /** @class */ (function () {\n // Constructors\n /**\n * Initializes a new instance of the `PdfCacheCollection` class.\n * @private\n */\n function PdfCacheCollection() {\n this.referenceObjects = [];\n this.pdfFontCollection = new Dictionary();\n }\n // Public methods\n /**\n * `Searches` for the similar cached object. If is not found - adds the object to the cache.\n * @private\n */\n PdfCacheCollection.prototype.search = function (obj) {\n var result = null;\n var group = this.getGroup(obj);\n if (group == null) {\n group = this.createNewGroup();\n }\n else if (group.length > 0) {\n result = group[0];\n }\n group.push(obj);\n return result;\n };\n // Implementation\n /**\n * `Creates` a new group.\n * @private\n */\n PdfCacheCollection.prototype.createNewGroup = function () {\n var group = [];\n this.referenceObjects.push(group);\n return group;\n };\n /**\n * `Find and Return` a group.\n * @private\n */\n PdfCacheCollection.prototype.getGroup = function (result) {\n var group = null;\n if (result !== null) {\n var len = this.referenceObjects.length;\n for (var i = 0; i < len; i++) {\n if (this.referenceObjects.length > 0) {\n var tGroup = this.referenceObjects[i];\n if (tGroup.length > 0) {\n var representative = tGroup[0];\n if (result.equalsTo(representative)) {\n group = tGroup;\n break;\n }\n }\n else {\n this.removeGroup(tGroup);\n }\n }\n len = this.referenceObjects.length;\n }\n }\n return group;\n };\n /**\n * Remove a group from the storage.\n */\n PdfCacheCollection.prototype.removeGroup = function (group) {\n if (group !== null) {\n var index = this.referenceObjects.indexOf(group);\n this.referenceObjects.slice(index, index + 1);\n }\n };\n PdfCacheCollection.prototype.destroy = function () {\n this.pdfFontCollection = undefined;\n this.referenceObjects = undefined;\n };\n return PdfCacheCollection;\n}());\nexport { PdfCacheCollection };\n","/**\n * PdfStandardFontMetricsFactory.ts class for EJ2-PDF\n */\nimport { PdfFontStyle, PdfFontFamily } from './enum';\nimport { PdfFontMetrics, StandardWidthTable } from './pdf-font-metrics';\n/**\n * @private\n * `Factory of the standard fonts metrics`.\n */\nvar PdfStandardFontMetricsFactory = /** @class */ (function () {\n function PdfStandardFontMetricsFactory() {\n }\n /**\n * Returns `metrics` of the font.\n * @private\n */\n PdfStandardFontMetricsFactory.getMetrics = function (fontFamily, fontStyle, size) {\n var metrics = null;\n switch (fontFamily) {\n case PdfFontFamily.Helvetica:\n metrics = this.getHelveticaMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Courier:\n metrics = this.getCourierMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.TimesRoman:\n metrics = this.getTimesMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.Symbol:\n metrics = this.getSymbolMetrics(fontFamily, fontStyle, size);\n break;\n case PdfFontFamily.ZapfDingbats:\n metrics = this.getZapfDingbatsMetrics(fontFamily, fontStyle, size);\n break;\n default:\n metrics = this.getHelveticaMetrics(PdfFontFamily.Helvetica, fontStyle, size);\n break;\n }\n metrics.name = fontFamily.toString();\n metrics.subScriptSizeFactor = this.subSuperScriptFactor;\n metrics.superscriptSizeFactor = this.subSuperScriptFactor;\n return metrics;\n };\n // Implementation\n /**\n * Creates `Helvetica font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getHelveticaMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaBoldItalicAscent;\n metrics.descent = this.helveticaBoldItalicDescent;\n metrics.postScriptName = this.helveticaBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.helveticaBoldAscent;\n metrics.descent = this.helveticaBoldDescent;\n metrics.postScriptName = this.helveticaBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.helveticaItalicAscent;\n metrics.descent = this.helveticaItalicDescent;\n metrics.postScriptName = this.helveticaItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.helveticaAscent;\n metrics.descent = this.helveticaDescent;\n metrics.postScriptName = this.helveticaName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.arialWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Courier font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getCourierMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierBoldItalicAscent;\n metrics.descent = this.courierBoldItalicDescent;\n metrics.postScriptName = this.courierBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.courierBoldAscent;\n metrics.descent = this.courierBoldDescent;\n metrics.postScriptName = this.courierBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.courierItalicAscent;\n metrics.descent = this.courierItalicDescent;\n metrics.postScriptName = this.courierItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.courierAscent;\n metrics.descent = this.courierDescent;\n metrics.postScriptName = this.courierName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.fixedWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Times font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getTimesMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n if ((fontStyle & PdfFontStyle.Bold) > 0 && (fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesBoldItalicAscent;\n metrics.descent = this.timesBoldItalicDescent;\n metrics.postScriptName = this.timesBoldItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldItalicWidths);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Bold) > 0) {\n metrics.ascent = this.timesBoldAscent;\n metrics.descent = this.timesBoldDescent;\n metrics.postScriptName = this.timesBoldName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanBoldWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else if ((fontStyle & PdfFontStyle.Italic) > 0) {\n metrics.ascent = this.timesItalicAscent;\n metrics.descent = this.timesItalicDescent;\n metrics.postScriptName = this.timesItalicName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanItalicWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n else {\n metrics.ascent = this.timesAscent;\n metrics.descent = this.timesDescent;\n metrics.postScriptName = this.timesName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.timesRomanWidth);\n metrics.height = metrics.ascent - metrics.descent;\n }\n return metrics;\n };\n /**\n * Creates `Symbol font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getSymbolMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.symbolAscent;\n metrics.descent = this.symbolDescent;\n metrics.postScriptName = this.symbolName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.symbolWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * Creates `ZapfDingbats font metrics`.\n * @private\n */\n PdfStandardFontMetricsFactory.getZapfDingbatsMetrics = function (fontFamily, fontStyle, size) {\n var metrics = new PdfFontMetrics();\n metrics.ascent = this.zapfDingbatsAscent;\n metrics.descent = this.zapfDingbatsDescent;\n metrics.postScriptName = this.zapfDingbatsName;\n metrics.size = size;\n metrics.widthTable = new StandardWidthTable(this.zapfDingbatsWidth);\n metrics.height = metrics.ascent - metrics.descent;\n return metrics;\n };\n /**\n * `Multiplier` os subscript superscript.\n * @private\n */\n PdfStandardFontMetricsFactory.subSuperScriptFactor = 1.52;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaName = 'Helvetica';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldName = 'Helvetica-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicAscent = 931;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicDescent = -225;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaItalicName = 'Helvetica-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicAscent = 962;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicDescent = -228;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.helveticaBoldItalicName = 'Helvetica-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierName = 'Courier';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldName = 'Courier-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicAscent = 805;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierItalicName = 'Courier-Oblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicAscent = 801;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicDescent = -250;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.courierBoldItalicName = 'Courier-BoldOblique';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesAscent = 898;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesName = 'Times-Roman';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldAscent = 935;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldName = 'Times-Bold';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicAscent = 883;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicDescent = -217;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesItalicName = 'Times-Italic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicAscent = 921;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicDescent = -218;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.timesBoldItalicName = 'Times-BoldItalic';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolAscent = 1010;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolDescent = -293;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolName = 'Symbol';\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsAscent = 820;\n /**\n * `Ascender` value for the font.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsDescent = -143;\n /**\n * `Font type`.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsName = 'ZapfDingbats';\n /**\n * `Arial` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialWidth = [\n 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584,\n 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278,\n 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833,\n 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334,\n 584, 0, 556, 0, 222, 556, 333, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 222, 222, 333, 333, 350, 556, 1000, 333, 1000, 500, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 556, 537, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 584, 611, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Arial bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.arialBoldWidth = [\n 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333,\n 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584,\n 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833,\n 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333,\n 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889,\n 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389,\n 584, 0, 556, 0, 278, 556, 500, 1000, 556, 556, 333, 1000, 667, 333, 1000, 0,\n 611, 0, 0, 278, 278, 500, 500, 350, 556, 1000, 333, 1000, 556, 333, 944, 0,\n 500, 667, 0, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 0,\n 737, 333, 400, 584, 333, 333, 333, 611, 556, 278, 333, 333, 365, 556, 834, 834,\n 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278,\n 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667,\n 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278,\n 278, 278, 611, 611, 611, 611, 611, 611, 611, 584, 611, 611, 611, 611, 611, 556,\n 611, 556\n ];\n /**\n * `Fixed` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.fixedWidth = [\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600,\n 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600\n ];\n /**\n * `Times` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanWidth = [\n 250, 333, 408, 500, 500, 833, 778, 180, 333, 333, 500, 564, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278, 564, 564,\n 564, 444, 921, 722, 667, 667, 722, 611, 556, 722, 722, 333, 389, 722, 611, 889,\n 722, 722, 556, 722, 667, 556, 611, 722, 722, 944, 722, 722, 611, 333, 278, 333,\n 469, 500, 333, 444, 500, 444, 500, 444, 333, 500, 500, 278, 278, 500, 278, 778,\n 500, 500, 500, 500, 333, 389, 278, 500, 500, 722, 500, 500, 444, 480, 200, 480,\n 541, 0, 500, 0, 333, 500, 444, 1000, 500, 500, 333, 1000, 556, 333, 889, 0,\n 611, 0, 0, 333, 333, 444, 444, 350, 500, 1000, 333, 980, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 200, 500, 333, 760, 276, 500, 564, 0,\n 760, 333, 400, 564, 300, 300, 333, 500, 453, 250, 333, 300, 310, 500, 750, 750,\n 750, 444, 722, 722, 722, 722, 722, 722, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 722, 722, 722, 722, 722, 722, 564, 722, 722, 722, 722, 722, 722,\n 556, 500, 444, 444, 444, 444, 444, 444, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 564, 500, 500, 500, 500, 500, 500,\n 500, 500\n ];\n /**\n * `Times bold` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldWidth = [\n 250, 333, 555, 500, 500, 1000, 833, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 930, 722, 667, 722, 722, 667, 611, 778, 778, 389, 500, 778, 667, 944,\n 722, 778, 611, 778, 722, 556, 667, 722, 722, 1000, 722, 722, 667, 333, 278, 333,\n 581, 500, 333, 500, 556, 444, 556, 444, 333, 500, 556, 278, 333, 556, 278, 833,\n 556, 500, 556, 556, 444, 389, 333, 556, 500, 722, 500, 500, 444, 394, 220, 394,\n 520, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 1000, 0,\n 667, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 444, 722, 0, 333, 500, 500, 500, 500, 220, 500, 333, 747, 300, 500, 570, 0,\n 747, 333, 400, 570, 300, 300, 333, 556, 540, 250, 333, 300, 330, 500, 750, 750,\n 750, 500, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 778, 778, 778, 778, 778, 570, 778, 722, 722, 722, 722, 722,\n 611, 556, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 500,\n 556, 500\n ];\n /**\n * `Times italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanItalicWidth = [\n 250, 333, 420, 500, 500, 833, 778, 214, 333, 333, 500, 675, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 675, 675,\n 675, 500, 920, 611, 611, 667, 722, 611, 611, 722, 722, 333, 444, 667, 556, 833,\n 667, 722, 611, 722, 611, 500, 556, 722, 611, 833, 611, 556, 556, 389, 278, 389,\n 422, 500, 333, 500, 500, 444, 500, 444, 278, 500, 500, 278, 278, 444, 278, 722,\n 500, 500, 500, 500, 389, 389, 278, 500, 444, 667, 444, 444, 389, 400, 275, 400,\n 541, 0, 500, 0, 333, 500, 556, 889, 500, 500, 333, 1000, 500, 333, 944, 0,\n 556, 0, 0, 333, 333, 556, 556, 350, 500, 889, 333, 980, 389, 333, 667, 0,\n 389, 556, 0, 389, 500, 500, 500, 500, 275, 500, 333, 760, 276, 500, 675, 0,\n 760, 333, 400, 675, 300, 300, 333, 500, 523, 250, 333, 300, 310, 500, 750, 750,\n 750, 500, 611, 611, 611, 611, 611, 611, 889, 667, 611, 611, 611, 611, 333, 333,\n 333, 333, 722, 667, 722, 722, 722, 722, 722, 675, 722, 722, 722, 722, 722, 556,\n 611, 500, 500, 500, 500, 500, 500, 500, 667, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 500, 500, 500, 500, 500, 500, 675, 500, 500, 500, 500, 500, 444,\n 500, 444\n ];\n /**\n * `Times bold italic` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.timesRomanBoldItalicWidths = [\n 250, 389, 555, 500, 500, 833, 778, 278, 333, 333, 500, 570, 250, 333,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570,\n 570, 500, 832, 667, 667, 667, 722, 667, 667, 722, 778, 389, 500, 667, 611, 889,\n 722, 722, 611, 722, 667, 556, 611, 722, 667, 889, 667, 611, 611, 333, 278, 333,\n 570, 500, 333, 500, 500, 444, 500, 444, 333, 500, 556, 278, 278, 500, 278, 778,\n 556, 500, 500, 500, 389, 389, 278, 556, 444, 667, 500, 444, 389, 348, 220, 348,\n 570, 0, 500, 0, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 944, 0,\n 611, 0, 0, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 0,\n 389, 611, 0, 389, 500, 500, 500, 500, 220, 500, 333, 747, 266, 500, 606, 0,\n 747, 333, 400, 570, 300, 300, 333, 576, 500, 250, 333, 300, 300, 500, 750, 750,\n 750, 500, 667, 667, 667, 667, 667, 667, 944, 667, 667, 667, 667, 667, 389, 389,\n 389, 389, 722, 722, 722, 722, 722, 722, 722, 570, 722, 722, 722, 722, 722, 611,\n 611, 500, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278,\n 278, 278, 500, 556, 500, 500, 500, 500, 500, 570, 500, 556, 556, 556, 556, 444,\n 500, 444\n ];\n /**\n * `Symbol` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.symbolWidth = [\n 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549,\n 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, 278,\n 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333,\n 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, 439, 768,\n 645, 795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439,\n 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603,\n 439, 576, 713, 686, 493, 686, 494, 480, 200, 480, 549, 750, 620, 247,\n 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, 400,\n 549, 411, 549, 549, 713, 494, 460, 549, 549, 549, 549, 1000, 603, 1000,\n 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713,\n 713, 713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, 603, 603,\n 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384,\n 384, 384, 384, 494, 494, 494, 494, 329, 274, 686, 686, 686, 384, 384,\n 384, 384, 384, 384, 494, 494, 494, -1\n ];\n /**\n * `Zip dingbats` widths table.\n * @private\n */\n PdfStandardFontMetricsFactory.zapfDingbatsWidth = [\n 278, 974, 961, 974, 980, 719, 789, 790, 791, 690, 960, 939, 549, 855,\n 911, 933, 911, 945, 974, 755, 846, 762, 761, 571, 677, 763, 760, 759,\n 754, 494, 552, 537, 577, 692, 786, 788, 788, 790, 793, 794, 816, 823,\n 789, 841, 823, 833, 816, 831, 923, 744, 723, 749, 790, 792, 695, 776,\n 768, 792, 759, 707, 708, 682, 701, 826, 815, 789, 789, 707, 687, 696,\n 689, 786, 787, 713, 791, 785, 791, 873, 761, 762, 762, 759, 759, 892,\n 892, 788, 784, 438, 138, 277, 415, 392, 392, 668, 668, 390, 390, 317,\n 317, 276, 276, 509, 509, 410, 410, 234, 234, 334, 334, 732, 544, 544,\n 910, 667, 760, 760, 776, 595, 694, 626, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788, 788,\n 788, 788, 788, 788, 788, 788, 894, 838, 1016, 458, 748, 924, 748, 918,\n 927, 928, 928, 834, 873, 828, 924, 924, 917, 930, 931, 463, 883, 836,\n 836, 867, 867, 696, 696, 874, 874, 760, 946, 771, 865, 771, 888, 967,\n 888, 831, 873, 927, 970, 918\n ];\n return PdfStandardFontMetricsFactory;\n}());\nexport { PdfStandardFontMetricsFactory };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfFontFamily, PdfFontStyle, FontEncoding } from './enum';\nimport { PdfFont } from './pdf-font';\nimport { PdfDocument } from './../../document/pdf-document';\nimport { PdfStandardFontMetricsFactory } from './pdf-standard-font-metrics-factory';\nimport { PdfDictionary } from './../../primitives/pdf-dictionary';\nimport { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';\nimport { PdfName } from './../../primitives/pdf-name';\n/**\n * Represents one of the 14 standard fonts.\n * It's used to create a standard PDF font to draw the text in to the PDF.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * //\n * // create new standard font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * //\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfStandardFont = /** @class */ (function (_super) {\n __extends(PdfStandardFont, _super);\n function PdfStandardFont(fontFamilyPrototype, size, style) {\n var _this = _super.call(this, size, (typeof style === 'undefined') ? ((fontFamilyPrototype instanceof PdfStandardFont) ? fontFamilyPrototype.style : PdfFontStyle.Regular) : style) || this;\n /**\n * Gets `ascent` of the font.\n * @private\n */\n _this.dictionaryProperties = new DictionaryProperties();\n /**\n * Gets `encodings` for internal class use.\n * @hidden\n * @private\n */\n _this.encodings = ['Unknown', 'StandardEncoding', 'MacRomanEncoding', 'MacExpertEncoding',\n 'WinAnsiEncoding', 'PDFDocEncoding', 'IdentityH'];\n if (typeof fontFamilyPrototype === 'undefined') {\n _this.pdfFontFamily = PdfFontFamily.Helvetica;\n }\n else if ((fontFamilyPrototype instanceof PdfStandardFont)) {\n _this.pdfFontFamily = fontFamilyPrototype.fontFamily;\n }\n else {\n _this.pdfFontFamily = fontFamilyPrototype;\n }\n _this.checkStyle();\n _this.initializeInternals();\n return _this;\n }\n Object.defineProperty(PdfStandardFont.prototype, \"fontFamily\", {\n /* tslint:enable */\n //Properties\n /**\n * Gets the `FontFamily`.\n * @private\n */\n get: function () {\n return this.pdfFontFamily;\n },\n enumerable: true,\n configurable: true\n });\n //methods\n /**\n * Checks font `style` of the font.\n * @private\n */\n PdfStandardFont.prototype.checkStyle = function () {\n if (this.fontFamily === PdfFontFamily.Symbol || this.fontFamily === PdfFontFamily.ZapfDingbats) {\n var style = this.style;\n style &= ~(PdfFontStyle.Bold | PdfFontStyle.Italic);\n this.setStyle(style);\n }\n };\n /**\n * Returns `width` of the line.\n * @public\n */\n PdfStandardFont.prototype.getLineWidth = function (line, format) {\n if (line == null) {\n throw new Error('ArgumentNullException:line');\n }\n var width = 0;\n var name = this.name;\n line = PdfStandardFont.convert(line);\n for (var i = 0, len = line.length; i < len; i++) {\n var ch = line[i];\n var charWidth = this.getCharWidthInternal(ch, format);\n width += charWidth;\n }\n var size = this.metrics.getSize(format);\n width *= (PdfFont.charSizeMultiplier * size);\n width = this.applyFormatSettings(line, format, width);\n return width;\n };\n /**\n * Checks whether fonts are `equals`.\n * @private\n */\n PdfStandardFont.prototype.equalsToFont = function (font) {\n var equal = false;\n var stFont = font;\n if (stFont != null) {\n var fontFamilyEqual = (this.fontFamily === stFont.fontFamily);\n var lineReducer = (~(PdfFontStyle.Underline | PdfFontStyle.Strikeout));\n var styleEqual = (this.style & lineReducer) === (stFont.style & lineReducer);\n equal = (fontFamilyEqual && styleEqual);\n }\n return equal;\n };\n /**\n * `Initializes` font internals..\n * @private\n */\n PdfStandardFont.prototype.initializeInternals = function () {\n var equalFont = null;\n // if (PdfDocument.EnableCache) {\n equalFont = PdfDocument.cache.search(this);\n // }\n var internals = null;\n // if (equalFont == null) {\n // Create font metrics.\n var metrics = PdfStandardFontMetricsFactory.getMetrics(this.pdfFontFamily, this.style, this.size);\n this.metrics = metrics;\n internals = this.createInternals();\n this.setInternals(internals);\n };\n /**\n * `Creates` font`s dictionary.\n * @private\n */\n PdfStandardFont.prototype.createInternals = function () {\n var dictionary = new PdfDictionary();\n dictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.font));\n dictionary.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.type1));\n dictionary.items.setValue(this.dictionaryProperties.baseFont, new PdfName(this.metrics.postScriptName));\n if (this.fontFamily !== PdfFontFamily.Symbol && this.fontFamily !== PdfFontFamily.ZapfDingbats) {\n var encoding = this.encodings[FontEncoding.WinAnsiEncoding];\n dictionary.items.setValue(this.dictionaryProperties.encoding, new PdfName(encoding));\n }\n return dictionary;\n };\n /**\n * Returns `width` of the char. This methods doesn`t takes into consideration font`s size.\n * @private\n */\n PdfStandardFont.prototype.getCharWidthInternal = function (charCode, format) {\n var width = 0;\n var code = 0;\n code = charCode.charCodeAt(0);\n if (this.name === '0' || this.name === '1' || this.name === '2' ||\n this.name === '3' || this.name === '4') {\n code = code - PdfStandardFont.charOffset;\n }\n code = (code >= 0 && code !== 128) ? code : 0;\n var metrics = this.metrics;\n var widthTable = metrics.widthTable;\n width = widthTable.items(code);\n return width;\n };\n /**\n * `Converts` the specified text.\n * @private\n */\n PdfStandardFont.convert = function (text) {\n return text;\n };\n //Constants\n /**\n * First character `position`.\n * @private\n */\n PdfStandardFont.charOffset = 32;\n return PdfStandardFont;\n}(PdfFont));\nexport { PdfStandardFont };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { PdfWriter } from './../input-output/pdf-writer';\nimport { PdfMainObjectCollection } from './../input-output/pdf-main-object-collection';\nimport { PdfDocumentBase } from './pdf-document-base';\nimport { PdfCrossTable } from './../input-output/pdf-cross-table';\nimport { PdfCatalog } from './pdf-catalog';\nimport { PdfPageSettings } from './../pages/pdf-page-settings';\nimport { PdfSectionCollection } from './../pages/pdf-section-collection';\nimport { PdfDocumentPageCollection } from './../pages/pdf-document-page-collection';\nimport { PdfCacheCollection } from './../general/pdf-cache-collection';\nimport { PdfColorSpace } from './../graphics/enum';\nimport { PdfDocumentTemplate } from './pdf-document-template';\nimport { PdfFontFamily } from './../graphics/fonts/enum';\nimport { PdfStandardFont } from './../graphics/fonts/pdf-standard-font';\n/**\n * Represents a PDF document and can be used to create a new PDF document from the scratch.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\nvar PdfDocument = /** @class */ (function (_super) {\n __extends(PdfDocument, _super);\n function PdfDocument(isMerging) {\n var _this = _super.call(this) || this;\n /**\n * Default `margin` value.\n * @default 40.0\n * @private\n */\n _this.defaultMargin = 40.0;\n /**\n * Internal variable to store instance of `StreamWriter` classes..\n * @default null\n * @private\n */\n _this.streamWriter = null;\n _this.document = _this;\n var isMerge = false;\n if (typeof isMerging === 'undefined') {\n PdfDocument.cacheCollection = new PdfCacheCollection();\n isMerge = false;\n }\n else {\n isMerge = isMerging;\n }\n var objects = new PdfMainObjectCollection();\n _this.setMainObjectCollection(objects);\n var crossTable = new PdfCrossTable();\n crossTable.isMerging = isMerge;\n crossTable.document = _this;\n _this.setCrossTable(crossTable);\n var catalog = new PdfCatalog();\n _this.setCatalog(catalog);\n objects.add(catalog);\n catalog.position = -1;\n _this.sectionCollection = new PdfSectionCollection(_this);\n _this.documentPageCollection = new PdfDocumentPageCollection(_this);\n catalog.pages = _this.sectionCollection;\n return _this;\n }\n Object.defineProperty(PdfDocument, \"defaultFont\", {\n //Properties\n /**\n * Gets the `default font`. It is used for complex objects when font is not explicitly defined.\n * @private\n */\n get: function () {\n if (this.defaultStandardFont == null) {\n this.defaultStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 8);\n }\n return this.defaultStandardFont;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"sections\", {\n /**\n * Gets the collection of the `sections` in the document.\n * @private\n */\n get: function () {\n return this.sectionCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pageSettings\", {\n /**\n * Gets the document's page setting.\n * @public\n */\n get: function () {\n if (this.settings == null) {\n this.settings = new PdfPageSettings(this.defaultMargin);\n }\n return this.settings;\n },\n /**\n * Sets the document's page setting.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n *\n * // sets the right margin of the page\n * document.pageSettings.margins.right = 0;\n * // set the page size.\n * document.pageSettings.size = new SizeF(500, 500);\n * // change the page orientation to landscape\n * document.pageSettings.orientation = PdfPageOrientation.Landscape;\n * // apply 90 degree rotation on the page\n * document.pageSettings.rotate = PdfPageRotateAngle.RotateAngle90;\n *\n * // add a pages to the document\n * let page1 : PdfPage = document.pages.add();\n * // set font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // set brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // set the specified Point\n * let point : PointF = new PointF(page1.getClientSize().width - 200, page1.getClientSize().height - 200);\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, point);\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n set: function (value) {\n this.settings = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"pages\", {\n /**\n * Represents the collection of pages in the PDF document.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * //\n * // get the collection of pages in the document\n * let pageCollection : PdfDocumentPageCollection = document.pages;\n * //\n * // add pages\n * let page1 : PdfPage = pageCollection.add();\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n get: function () {\n return this.documentPageCollection;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"cache\", {\n /**\n * Gets collection of the `cached objects`.\n * @private\n */\n get: function () {\n if (typeof PdfDocument.cacheCollection === 'undefined' || PdfDocument.cacheCollection == null) {\n return new PdfCacheCollection();\n }\n return PdfDocument.cacheCollection;\n },\n /**\n * Sets collection of the `cached objects`.\n * @private\n */\n set: function (value) {\n this.cacheCollection = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument, \"enableCache\", {\n /**\n * Gets the value of enable cache.\n * @private\n */\n get: function () {\n return this.isCacheEnabled;\n },\n /**\n * Sets thie value of enable cache.\n * @private\n */\n set: function (value) {\n this.isCacheEnabled = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"colorSpace\", {\n /* tslint:disable */\n /**\n * Gets or sets the `color space` of the document. This property can be used to create PDF document in RGB, Gray scale or CMYK color spaces.\n * @private\n */\n get: function () {\n if ((this.pdfColorSpace === PdfColorSpace.Rgb) || ((this.pdfColorSpace === PdfColorSpace.Cmyk)\n || (this.pdfColorSpace === PdfColorSpace.GrayScale))) {\n return this.pdfColorSpace;\n }\n else {\n return PdfColorSpace.Rgb;\n }\n },\n set: function (value) {\n if ((value === PdfColorSpace.Rgb) || ((value === PdfColorSpace.Cmyk) ||\n (value === PdfColorSpace.GrayScale))) {\n this.pdfColorSpace = value;\n }\n else {\n this.pdfColorSpace = PdfColorSpace.Rgb;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfDocument.prototype, \"template\", {\n /* tslint:enable */\n /**\n * Gets or sets a `template` to all pages in the document.\n * @private\n */\n get: function () {\n if (this.pageTemplate == null) {\n this.pageTemplate = new PdfDocumentTemplate();\n }\n return this.pageTemplate;\n },\n set: function (value) {\n this.pageTemplate = value;\n },\n enumerable: true,\n configurable: true\n });\n PdfDocument.prototype.docSave = function (stream, arg2, arg3) {\n this.checkPagesPresence();\n if (stream === null) {\n throw new Error('ArgumentNullException : stream');\n }\n this.streamWriter = stream;\n var writer = new PdfWriter(stream);\n writer.document = this;\n if (typeof arg2 === 'boolean' && typeof arg3 === 'undefined') {\n return this.crossTable.save(writer);\n }\n else {\n this.crossTable.save(writer, arg2);\n }\n };\n /**\n * Checks the pages `presence`.\n * @private\n */\n PdfDocument.prototype.checkPagesPresence = function () {\n if (this.pages.count === 0) {\n this.pages.add();\n }\n };\n /**\n * disposes the current instance of `PdfDocument` class.\n * ```typescript\n * // create a new PDF document\n * let document : PdfDocument = new PdfDocument();\n * // add a new page to the document\n * let page1 : PdfPage = document.pages.add();\n * // set the font\n * let font : PdfStandardFont = new PdfStandardFont(PdfFontFamily.Helvetica, 20);\n * // create black brush\n * let blackBrush : PdfSolidBrush = new PdfSolidBrush(new PdfColor(0, 0, 0));\n * // draw the text\n * page1.graphics.drawString('Hello World', font, blackBrush, new PointF(0, 0));\n * // save the document\n * document.save('output.pdf');\n * // destroy the document\n * document.destroy();\n * ```\n */\n PdfDocument.prototype.destroy = function () {\n this.catalog = undefined;\n this.colorSpace = undefined;\n this.currentSavingObj = undefined;\n this.documentPageCollection = undefined;\n this.isStreamCopied = undefined;\n this.pageSettings = undefined;\n this.pageTemplate = undefined;\n this.pdfColorSpace = undefined;\n this.sectionCollection = undefined;\n PdfDocument.cache.destroy();\n this.crossTable.pdfObjects.destroy();\n PdfDocument.cache = undefined;\n this.streamWriter.destroy();\n };\n /**\n * `Font` used in complex objects to draw strings and text when it is not defined explicitly.\n * @default null\n * @private\n */\n PdfDocument.defaultStandardFont = null;\n /**\n * Indicates whether enable cache or not\n * @default true\n * @private\n */\n PdfDocument.isCacheEnabled = true;\n return PdfDocument;\n}(PdfDocumentBase));\nexport { PdfDocument };\n","/**\n * PdfPageTemplateElement.ts class for EJ2-Pdf\n */\nimport { PdfDockStyle, PdfAlignmentStyle, TemplateType } from './enum';\nimport { PointF, SizeF } from './../drawing/pdf-drawing';\nimport { PdfTemplate } from './../graphics/figures/pdf-template';\nimport { PdfPage } from './pdf-page';\nimport { RectangleF } from './../drawing/pdf-drawing';\n/**\n * Describes a `page template` object that can be used as header/footer, watermark or stamp.\n */\nvar PdfPageTemplateElement = /** @class */ (function () {\n /* tslint:disable */\n function PdfPageTemplateElement(arg1, arg2, arg3, arg4, arg5) {\n if (arg1 instanceof RectangleF && typeof arg2 === 'undefined') {\n this.InitiateBounds(arg1.x, arg1.y, arg1.width, arg1.height, null);\n }\n else if (arg1 instanceof RectangleF && arg2 instanceof PdfPage && typeof arg3 === 'undefined') {\n this.InitiateBounds(arg1.x, arg1.y, arg1.width, arg1.height, arg2);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && typeof arg3 === 'undefined') {\n this.InitiateBounds(arg1.x, arg1.y, arg2.width, arg2.height, null);\n }\n else if (arg1 instanceof PointF && arg2 instanceof SizeF && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.InitiateBounds(arg1.x, arg1.y, arg2.width, arg2.height, arg3);\n }\n else if (arg1 instanceof SizeF && typeof arg2 === 'undefined') {\n this.InitiateBounds(0, 0, arg1.width, arg1.height, null);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'undefined') {\n this.InitiateBounds(0, 0, arg1, arg2, null);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && arg3 instanceof PdfPage && typeof arg4 === 'undefined') {\n this.InitiateBounds(0, 0, arg1, arg2, arg3);\n }\n else if (typeof arg1 === 'number' && typeof arg2 === 'number' && typeof arg3 === 'number' && typeof arg4 === 'number' && typeof arg5 === 'undefined') {\n this.InitiateBounds(arg1, arg2, arg3, arg4, null);\n }\n else {\n this.InitiateBounds(arg1, arg2, arg3, arg4, null);\n // this.graphics.colorSpace = this.page.document.colorSpace;\n }\n /* tslint:enable */\n }\n Object.defineProperty(PdfPageTemplateElement.prototype, \"dock\", {\n // Properties\n /**\n * Gets or sets the `dock style` of the page template element.\n * @private\n */\n get: function () {\n return this.dockStyle;\n },\n set: function (value) {\n // if (this.dockStyle !== value && this.Type === TemplateType.None) {\n this.dockStyle = value;\n // Reset alignment.\n this.resetAlignment();\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"alignment\", {\n /**\n * Gets or sets `alignment` of the page template element.\n * @private\n */\n get: function () {\n return this.alignmentStyle;\n },\n set: function (value) {\n // if (this.alignmentStyle !== value) {\n this.setAlignment(value);\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"foreground\", {\n /**\n * Indicates whether the page template is located `in front of the page layers or behind of it`.\n * @private\n */\n get: function () {\n return this.isForeground;\n },\n set: function (value) {\n // if (this.foreground !== value) {\n this.isForeground = value;\n // }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"background\", {\n /**\n * Indicates whether the page template is located `behind of the page layers or in front of it`.\n * @private\n */\n get: function () {\n return !this.isForeground;\n },\n set: function (value) {\n this.isForeground = !value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"location\", {\n /**\n * Gets or sets `location` of the page template element.\n * @private\n */\n get: function () {\n return this.currentLocation;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"x\", {\n /**\n * Gets or sets `X` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.x : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.x = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"y\", {\n /**\n * Gets or sets `Y` co-ordinate of the template element on the page.\n * @private\n */\n get: function () {\n var value = (typeof this.currentLocation !== 'undefined') ? this.currentLocation.y : 0;\n return value;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.currentLocation.y = value;\n }\n else {\n //\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"size\", {\n /**\n * Gets or sets `size` of the page template element.\n * @private\n */\n get: function () {\n return this.template.size;\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.template.reset(value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"width\", {\n /**\n * Gets or sets `width` of the page template element.\n * @private\n */\n get: function () {\n return this.template.width;\n },\n set: function (value) {\n if (this.template.width !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.width = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"height\", {\n /**\n * Gets or sets `height` of the page template element.\n * @private\n */\n get: function () {\n return this.template.height;\n },\n set: function (value) {\n if (this.template.height !== value && this.type === TemplateType.None) {\n var size = this.template.size;\n size.height = value;\n this.template.reset(size);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"graphics\", {\n /**\n * Gets `graphics` context of the page template element.\n * @private\n */\n get: function () {\n return this.template.graphics;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"template\", {\n /**\n * Gets Pdf `template` object.\n * @private\n */\n get: function () {\n // if (typeof this.pdfTemplate === 'undefined' || this.pdfTemplate == null) {\n // this.pdfTemplate = new PdfTemplate(this.size);\n // }\n return this.pdfTemplate;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"type\", {\n /**\n * Gets or sets `type` of the usage of this page template.\n * @private\n */\n get: function () {\n return this.templateType;\n },\n set: function (value) {\n this.updateDocking(value);\n this.templateType = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PdfPageTemplateElement.prototype, \"bounds\", {\n /**\n * Gets or sets `bounds` of the page template.\n * @public\n */\n get: function () {\n return new RectangleF(new PointF(this.x, this.y), this.size);\n },\n set: function (value) {\n if (this.type === TemplateType.None) {\n this.location = new PointF(value.x, value.y);\n this.size = new SizeF(value.width, value.height);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * `Initialize Bounds` Initialize the bounds value of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.InitiateBounds = function (arg1, arg2, arg3, arg4, arg5) {\n this.x = arg1;\n this.y = arg2;\n this.pdfTemplate = new PdfTemplate(arg3, arg4);\n // this.graphics.colorSpace = this.page.document.colorSpace;\n };\n /**\n * `Updates Dock` property if template is used as header/footer.\n * @private\n */\n PdfPageTemplateElement.prototype.updateDocking = function (type) {\n if (type !== TemplateType.None) {\n switch (type) {\n case TemplateType.Top:\n this.dock = PdfDockStyle.Top;\n break;\n case TemplateType.Bottom:\n this.dock = PdfDockStyle.Bottom;\n break;\n case TemplateType.Left:\n this.dock = PdfDockStyle.Left;\n break;\n case TemplateType.Right:\n this.dock = PdfDockStyle.Right;\n break;\n }\n this.resetAlignment();\n }\n };\n /**\n * `Resets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.resetAlignment = function () {\n this.alignment = PdfAlignmentStyle.None;\n };\n /**\n * `Sets alignment` of the template.\n * @private\n */\n PdfPageTemplateElement.prototype.setAlignment = function (alignment) {\n if (this.dock === PdfDockStyle.None) {\n this.alignmentStyle = alignment;\n }\n else {\n // Template is docked and alignment has been changed.\n var canBeSet = false;\n switch (this.dock) {\n case PdfDockStyle.Left:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.MiddleLeft ||\n alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Top:\n canBeSet = (alignment === PdfAlignmentStyle.TopLeft || alignment === PdfAlignmentStyle.TopCenter ||\n alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Right:\n canBeSet = (alignment === PdfAlignmentStyle.TopRight || alignment === PdfAlignmentStyle.MiddleRight ||\n alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Bottom:\n canBeSet = (alignment === PdfAlignmentStyle.BottomLeft || alignment === PdfAlignmentStyle.BottomCenter\n || alignment === PdfAlignmentStyle.BottomRight || alignment === PdfAlignmentStyle.None);\n break;\n case PdfDockStyle.Fill:\n canBeSet = (alignment === PdfAlignmentStyle.MiddleCenter || alignment === PdfAlignmentStyle.None);\n break;\n }\n if (canBeSet) {\n this.alignmentStyle = alignment;\n }\n }\n };\n /**\n * Draws the template.\n * @private\n */\n PdfPageTemplateElement.prototype.draw = function (layer, document) {\n var page = layer.page;\n var bounds = this.calculateBounds(page, document);\n layer.graphics.drawPdfTemplate(this.template, new PointF(bounds.x, bounds.y), new SizeF(bounds.width, bounds.height));\n };\n /**\n * Calculates bounds of the page template.\n * @private\n */\n PdfPageTemplateElement.prototype.calculateBounds = function (page, document) {\n var result = this.bounds;\n if (this.alignmentStyle !== PdfAlignmentStyle.None) {\n result = this.getAlignmentBounds(page, document);\n }\n else if (this.dockStyle !== PdfDockStyle.None) {\n result = this.getDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getAlignmentBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleAlignmentBounds(page, document);\n }\n else {\n result = this.getTemplateAlignmentBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleAlignmentBounds = function (page, document) {\n var bounds = this.bounds;\n var pdfSection = page.section;\n var actualBounds = pdfSection.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n x = 0;\n y = 0;\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = 0;\n break;\n case PdfAlignmentStyle.TopRight:\n x = actualBounds.width - this.width;\n y = 0;\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = 0;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n x = 0;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n x = actualBounds.width - this.width;\n y = actualBounds.height - this.height;\n break;\n }\n bounds.x = x;\n bounds.y = y;\n return bounds;\n };\n /**\n * Calculates bounds according to the alignment.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateAlignmentBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n switch (this.alignmentStyle) {\n case PdfAlignmentStyle.TopLeft:\n if (this.type === TemplateType.Left) {\n x = this.convertSign(actualBounds.x);\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = this.convertSign(actualBounds.x);\n y = this.convertSign(actualBounds.y);\n }\n break;\n case PdfAlignmentStyle.TopCenter:\n x = (actualBounds.width - this.width) / 2;\n y = this.convertSign(actualBounds.y);\n break;\n case PdfAlignmentStyle.TopRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n }\n else if (this.type === TemplateType.Top) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = this.convertSign(actualBounds.y);\n }\n break;\n case PdfAlignmentStyle.MiddleLeft:\n x = this.convertSign(actualBounds.x);\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleCenter:\n x = (actualBounds.width - this.width) / 2;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.MiddleRight:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = (actualBounds.height - this.height) / 2;\n break;\n case PdfAlignmentStyle.BottomLeft:\n if (this.type === TemplateType.Left) {\n x = this.convertSign(actualBounds.x);\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = this.convertSign(actualBounds.x);\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n case PdfAlignmentStyle.BottomCenter:\n x = (actualBounds.width - this.width) / 2;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n break;\n case PdfAlignmentStyle.BottomRight:\n if (this.type === TemplateType.Right) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height - this.height;\n }\n else if (this.type === TemplateType.Bottom) {\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n }\n break;\n }\n result.x = x;\n result.y = y;\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getDockBounds = function (page, document) {\n var result = this.bounds;\n if (this.type === TemplateType.None) {\n result = this.getSimpleDockBounds(page, document);\n }\n else {\n result = this.getTemplateDockBounds(page, document);\n }\n return result;\n };\n /**\n * Calculates bounds according to the docking.\n * @private\n */\n PdfPageTemplateElement.prototype.getSimpleDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = 0;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = 0;\n y = 0;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = 0;\n y = actualBounds.height - this.height;\n width = actualBounds.width;\n height = this.height;\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n /**\n * Calculates template bounds basing on docking if template is a page template.\n * @private\n */\n PdfPageTemplateElement.prototype.getTemplateDockBounds = function (page, document) {\n var result = this.bounds;\n var section = page.section;\n var actualBounds = section.getActualBounds(document, page, false);\n var actualSize = section.pageSettings.getActualSize();\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n switch (this.dockStyle) {\n case PdfDockStyle.Left:\n x = this.convertSign(actualBounds.x);\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Top:\n x = this.convertSign(actualBounds.x);\n y = this.convertSign(actualBounds.y);\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y = actualSize.height - actualBounds.y;\n }\n break;\n case PdfDockStyle.Right:\n x = actualBounds.width + section.getRightIndentWidth(document, page, false) - this.width;\n y = 0;\n width = this.width;\n height = actualBounds.height;\n break;\n case PdfDockStyle.Bottom:\n x = this.convertSign(actualBounds.x);\n y = actualBounds.height + section.getBottomIndentHeight(document, page, false) - this.height;\n width = actualSize.width;\n height = this.height;\n if (actualBounds.height < 0) {\n y -= actualSize.height;\n }\n break;\n case PdfDockStyle.Fill:\n x = 0;\n x = 0;\n width = actualBounds.width;\n height = actualBounds.height;\n break;\n }\n result = new RectangleF(x, y, width, height);\n return result;\n };\n /**\n * Ignore value zero, otherwise convert sign.\n * @private\n */\n PdfPageTemplateElement.prototype.convertSign = function (value) {\n return (value !== 0 || (value === 0 && 1 / value === -Infinity)) ? -value : value;\n };\n return PdfPageTemplateElement;\n}());\nexport { PdfPageTemplateElement };\n","import { createElement, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { SvgRenderer } from '@syncfusion/ej2-svg-base';\nimport { removeElement } from '../utils/helper';\nimport { afterExport } from '../model/constants';\nimport { PdfPageOrientation, PdfDocument, PdfBitmap, SizeF, PdfStandardFont, PdfPageTemplateElement, PdfSolidBrush, PdfColor } from '@syncfusion/ej2-pdf-export';\nvar ExportUtils = /** @class */ (function () {\n /**\n * Constructor for chart and accumulation annotation\n *\n * @param control\n */\n function ExportUtils(control) {\n this.control = control;\n }\n /**\n * To export the file as image/svg format.\n *\n * @param type\n * @param fileName\n */\n ExportUtils.prototype.export = function (type, fileName, orientation, controls, width, height, isVertical, header, footer, exportToMultiplePage) {\n var _this = this;\n var controlValue = this.getControlsValue(controls, isVertical, (exportToMultiplePage && type === 'PDF'), type);\n var canvasElements = [];\n var controlWidth = [];\n var controlHeight = [];\n var isDownload = !(Browser.userAgent.toString().indexOf('HeadlessChrome') > -1);\n orientation = isNullOrUndefined(orientation) ? PdfPageOrientation.Landscape : orientation;\n var _loop_1 = function (i) {\n controlWidth.push(width ? width : controlValue[i].width);\n controlHeight.push(height ? height : controlValue[i].height);\n var element = controls[i].svgObject;\n var isCanvas = controls[i].enableCanvas;\n var image = void 0;\n if (!isCanvas) {\n element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': controlWidth[i].toString(),\n 'height': controlHeight[i].toString()\n }\n });\n }\n var svgData = '' +\n controlValue[i].svg.outerHTML +\n '';\n var url = window.URL.createObjectURL(new Blob(type === 'SVG' ? [svgData] :\n [(new XMLSerializer()).serializeToString(controlValue[i].svg)], { type: 'image/svg+xml' }));\n if (type === 'SVG') {\n if (Browser.info.name === 'msie') {\n var svg = new Blob([(new XMLSerializer()).serializeToString(controlValue[i].svg)], { type: 'application/octet-stream' });\n window.navigator.msSaveOrOpenBlob(svg, fileName + '.' + type.toLocaleLowerCase());\n }\n else {\n this_1.triggerDownload(fileName, type, url, isDownload);\n }\n }\n else if (Browser.info.name === 'msie') {\n var canvas = element;\n if (!isCanvas) {\n canvas = this_1.createCanvas();\n }\n image = canvas.toDataURL();\n canvasElements.push(element);\n if (type === 'PDF') {\n if (canvasElements.length === controlValue.length) {\n this_1.exportPdf(canvasElements, orientation, controlWidth, controlHeight, isDownload, fileName, header, footer);\n }\n }\n else {\n this_1.doexport(type, image, fileName);\n }\n }\n else {\n var image_1 = new Image();\n var ctx_1 = element.getContext('2d');\n image_1.onload = (function () {\n ctx_1.drawImage(image_1, 0, 0);\n window.URL.revokeObjectURL(url);\n canvasElements.push(element);\n if (type === 'PDF') {\n if (canvasElements.length === controlValue.length) {\n _this.exportPdf(canvasElements, orientation, controlWidth, controlHeight, isDownload, fileName, header, footer);\n }\n }\n else {\n if (window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(element.toBlob(null), fileName + '.' + type.toLocaleLowerCase());\n }\n else {\n _this.triggerDownload(fileName, type, element.toDataURL('image/' + type.toLowerCase()), isDownload);\n }\n }\n });\n image_1.src = url;\n }\n if (!isCanvas) {\n removeElement(document.getElementById(controls[i].element.id + '_canvas'));\n }\n };\n var this_1 = this;\n for (var i = 0; i < controlValue.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * To get data url for charts.\n *\n * @param chart\n */\n ExportUtils.prototype.getDataUrl = function (chart) {\n var controlValue = this.getControlsValue([chart]);\n var element = this.control.svgObject;\n var isCanvas = this.control.enableCanvas;\n if (!isCanvas) {\n element = createElement('canvas', {\n id: 'ej2-canvas',\n attrs: {\n 'width': controlValue[0].width.toString(),\n 'height': controlValue[0].height.toString()\n }\n });\n }\n var url = window.URL.createObjectURL(new Blob([(new XMLSerializer()).serializeToString(controlValue[0].svg)], { type: 'image/svg+xml' }));\n if (Browser.info.name === 'msie') {\n var canvas = element;\n if (!isCanvas) {\n canvas = this.createCanvas();\n }\n var argsData = {\n name: afterExport, cancel: false, dataUrl: element.toDataURL('image/png')\n };\n chart.trigger(afterExport, argsData);\n return { element: canvas, dataUrl: canvas.toDataURL() };\n }\n else {\n var image_2 = new Image();\n var ctx_2 = element.getContext('2d');\n image_2.onload = (function () {\n ctx_2.drawImage(image_2, 0, 0);\n window.URL.revokeObjectURL(url);\n var argsData = {\n name: afterExport, cancel: false, dataUrl: element.toDataURL('image/png')\n };\n chart.trigger(afterExport, argsData);\n return argsData.dataUrl;\n });\n image_2.src = url;\n return { element: element, blobUrl: url };\n }\n };\n /**\n * To trigger the download element.\n *\n * @param fileName\n * @param type\n * @param url\n */\n ExportUtils.prototype.triggerDownload = function (fileName, type, url, isDownload) {\n createElement('a', {\n attrs: {\n 'download': fileName + '.' + type.toLocaleLowerCase(),\n 'href': url\n }\n }).dispatchEvent(new MouseEvent(isDownload ? 'click' : 'move', {\n view: window,\n bubbles: false,\n cancelable: true\n }));\n };\n /**\n * To get the maximum size value.\n *\n * @param {(Chart | RangeNavigator | AccumulationChart | StockChart | BulletChart | Chart3D | CircularChart3D)[]} controls - The array of controls to retrieve the maximum size value.\n * @param {boolean} isVertical - Indicates whether the orientation is vertical.\n * @param {boolean} isMultiPages - Indicates whether multiple pages are used.\n * @param {ExportType} type - The type of export.\n * @returns {IControlValue[]} - An array of control values.\n */\n ExportUtils.prototype.getControlsValue = function (controls, isVertical, isMultiPages, type) {\n var width = 0;\n var height = 0;\n var svgObject = new SvgRenderer('').createSvg({\n id: 'Svg_Export_Element',\n width: 200, height: 200\n });\n var controlValues = [];\n var backgroundColor;\n for (var i = 0; i < controls.length; i++) {\n var control = controls[i];\n var isCanvas = control.enableCanvas;\n var svg = control.svgObject.cloneNode(true);\n var groupEle = control.renderer.createGroup({\n style: (isNullOrUndefined(isVertical) || isVertical) ? 'transform: translateY(' + height + 'px)' :\n 'transform: translateX(' + width + 'px)'\n });\n backgroundColor = svg.childNodes[0] ? svg.childNodes[0].getAttribute('fill') : 'transparent';\n if (backgroundColor === 'transparent') {\n if (control.theme.indexOf('Dark') > -1 || control.theme.indexOf('HighContrast') > -1) {\n backgroundColor = 'rgba(0, 0, 0, 1)';\n }\n else {\n backgroundColor = 'rgba(255, 255, 255, 1)';\n }\n }\n if (!isCanvas) {\n if (control.getModuleName() === 'stockChart') {\n svg.childNodes[0].firstChild.setAttribute('fill', backgroundColor);\n for (var index = 1; index < svg.childNodes.length; index++) {\n svg.childNodes[index].childNodes[0].setAttribute('fill', backgroundColor);\n }\n }\n else if (type === 'SVG') {\n svg.childNodes[0].setAttribute('fill', backgroundColor);\n }\n groupEle.appendChild(svg);\n }\n var top_1 = 0;\n var left = 0;\n if (control.stockLegendModule && control.legendSettings.visible) {\n if (control.legendSettings.position === 'Bottom' || control.legendSettings.position === 'Top'\n || control.legendSettings.position === 'Auto') {\n top_1 += control.stockLegendModule.legendBounds.height;\n }\n else if (control.legendSettings.position === 'Left' || control.legendSettings.position === 'Right') {\n left += control.stockLegendModule.legendBounds.width;\n }\n }\n width = (isNullOrUndefined(isVertical) || isVertical) ? Math.max(control.availableSize.width + left, width) :\n width + control.availableSize.width + left;\n height = (isNullOrUndefined(isVertical) || isVertical) ? height + control.availableSize.height + top_1 :\n Math.max(control.availableSize.height + top_1, height);\n if (!isCanvas) {\n svgObject.appendChild(groupEle);\n }\n if (isMultiPages || i === controls.length - 1) {\n if ((!isMultiPages && !(this.control.enableCanvas)) || (isMultiPages && !isCanvas)) {\n svgObject.setAttribute('width', width + '');\n svgObject.setAttribute('height', height + '');\n svgObject.setAttribute('style', 'background-color: ' + backgroundColor + ';');\n }\n controlValues.push({\n 'width': width,\n 'height': height,\n 'svg': svgObject\n });\n }\n if (isMultiPages && (i < controls.length)) {\n width = 0;\n height = 0;\n svgObject = new SvgRenderer('').createSvg({\n id: 'Svg_Export_Element',\n width: 200, height: 200\n });\n }\n }\n return controlValues;\n };\n ExportUtils.prototype.createCanvas = function () {\n var chart = this.control;\n this.canvasRender(true, chart);\n var canvas = chart.svgObject;\n this.canvasRender(false, chart);\n return canvas;\n };\n /**\n * To convert svg chart into canvas chart to fix export issue in IE\n * We cant export svg to other formats in IE\n *\n * @param enableCanvas\n * @param chart\n * @param enableCanvas\n * @param chart\n */\n ExportUtils.prototype.canvasRender = function (enableCanvas, chart) {\n chart.enableCanvas = enableCanvas;\n chart['preRender']();\n chart['render']();\n };\n ExportUtils.prototype.exportPdf = function (element, orientation, width, height, isDownload, fileName, header, footer) {\n var document = new PdfDocument();\n var margin = document.pageSettings.margins;\n var pdfDefaultWidth = document.pageSettings.width;\n var pdfDefaultHeight = document.pageSettings.height;\n for (var i = 0; element.length > i; i++) {\n var imageString = element[i].toDataURL('image/jpeg').replace('image/jpeg', 'image/octet-stream');\n document.pageSettings.orientation = orientation;\n var exactWidth = (pdfDefaultWidth < width[i]) ? (width[i] + margin.left + margin.right) :\n pdfDefaultWidth;\n var exactHeight = orientation === 0 ? (width[i] + margin.left + margin.right) :\n (pdfDefaultHeight < height[i]) ? (height[i] + margin.top + margin.bottom) : pdfDefaultHeight;\n if (header !== undefined) {\n var font = new PdfStandardFont(1, header.fontSize || 15);\n var pdfHeader = new PdfPageTemplateElement(exactWidth, 40);\n pdfHeader.graphics.drawString(header.content + '', font, null, new PdfSolidBrush(new PdfColor(0, 0, 0)), header.x, header.y, null);\n document.template.top = pdfHeader;\n }\n if (footer !== undefined) {\n var font = new PdfStandardFont(1, footer.fontSize || 15);\n var pdfFooter = new PdfPageTemplateElement(exactWidth, 40);\n pdfFooter.graphics.drawString(footer.content + '', font, null, new PdfSolidBrush(new PdfColor(0, 0, 0)), footer.x, footer.y, null);\n document.template.bottom = pdfFooter;\n }\n document.pageSettings.size = new SizeF(exactWidth, exactHeight);\n imageString = imageString.slice(imageString.indexOf(',') + 1);\n document.pages.add().graphics.drawImage(new PdfBitmap(imageString), 0, 0, width[i], height[i]);\n }\n if (isDownload) {\n document.save(fileName + '.pdf');\n document.destroy();\n }\n };\n ExportUtils.prototype.doexport = function (type, image, fileName) {\n var images = [];\n var fileType = type || 'JPG';\n images = [image];\n this.exportImage(images, fileName, fileType, image);\n };\n ExportUtils.prototype.exportImage = function (images, fileName, fileType, image) {\n var buffers = [];\n var length = (!(images instanceof HTMLElement)) ? images.length : 0;\n for (var g = 0; g < length; g++) {\n image = images[g];\n image = image.replace(/^data:[a-z]*;,/, '');\n var image1 = image.split(',');\n var byteString = atob(image1[1]);\n var buffer = new ArrayBuffer(byteString.length);\n var intArray = new Uint8Array(buffer);\n for (var i = 0; i < byteString.length; i++) {\n intArray[i] = byteString.charCodeAt(i);\n }\n buffers.push(buffer);\n }\n for (var j = 0; j < buffers.length; j++) {\n var b = new Blob([buffers[j]], { type: 'application/octet-stream' });\n if (Browser.info.name === 'msie') {\n window.navigator.msSaveOrOpenBlob(b, fileName + '.' + fileType.toLocaleLowerCase());\n }\n }\n };\n return ExportUtils;\n}());\nexport { ExportUtils };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheets class\n * @private\n */\nvar Worksheets = /** @class */ (function (_super) {\n __extends(Worksheets, _super);\n function Worksheets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Worksheet = /** @class */ (function () {\n function Worksheet() {\n this.isSummaryRowBelow = true;\n this.showGridLines = true;\n this.enableRtl = false;\n }\n return Worksheet;\n}());\nexport { Worksheet };\n/**\n * Hyperlink class\n * @private\n */\nvar HyperLink = /** @class */ (function () {\n function HyperLink() {\n }\n return HyperLink;\n}());\nexport { HyperLink };\n/**\n * Grouping class\n * @private\n */\nvar Grouping = /** @class */ (function () {\n function Grouping() {\n }\n return Grouping;\n}());\nexport { Grouping };\n/**\n * FreezePane class\n * @private\n */\nvar FreezePane = /** @class */ (function () {\n function FreezePane() {\n }\n return FreezePane;\n}());\nexport { FreezePane };\n/**\n * MergeCell\n * @private\n */\nvar MergeCell = /** @class */ (function () {\n function MergeCell() {\n }\n return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n * @private\n */\nvar MergeCells = /** @class */ (function (_super) {\n __extends(MergeCells, _super);\n function MergeCells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (mergeCell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var mCell = _a[_i];\n if (MergeCells.isIntersecting(mCell, mergeCell)) {\n var intersectingCell = new MergeCell();\n intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n _this[count] = intersectingCell;\n mergeCell = intersectingCell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(mergeCell);\n }\n return mergeCell;\n };\n return _this;\n }\n MergeCells.isIntersecting = function (base, compare) {\n return (base.x <= compare.x + compare.width)\n && (compare.x <= base.x + base.width)\n && (base.y <= compare.y + compare.height)\n && (compare.y <= base.y + base.height);\n };\n return MergeCells;\n}(Array));\nexport { MergeCells };\n","/**\n * CellStyle class\n * @private\n */\nvar CellStyle = /** @class */ (function () {\n function CellStyle() {\n this.numFmtId = 0;\n this.backColor = 'none';\n this.fontName = 'Calibri';\n this.fontSize = 10.5;\n this.fontColor = '#000000';\n this.italic = false;\n this.bold = false;\n this.underline = false;\n this.strikeThrough = false;\n this.wrapText = false;\n this.hAlign = 'general';\n this.vAlign = 'bottom';\n this.indent = 0;\n this.rotation = 0;\n this.numberFormat = 'GENERAL';\n this.type = 'datetime';\n this.borders = new Borders();\n this.isGlobalStyle = false;\n }\n return CellStyle;\n}());\nexport { CellStyle };\n/**\n * Font Class\n * @private\n */\nvar Font = /** @class */ (function () {\n function Font() {\n this.sz = 10.5;\n this.name = 'Calibri';\n this.u = false;\n this.b = false;\n this.i = false;\n this.color = 'FF000000';\n this.strike = false;\n }\n return Font;\n}());\nexport { Font };\n/**\n * CellXfs class\n * @private\n */\nvar CellXfs = /** @class */ (function () {\n function CellXfs() {\n }\n return CellXfs;\n}());\nexport { CellXfs };\n/**\n * Alignment class\n * @private\n */\nvar Alignment = /** @class */ (function () {\n function Alignment() {\n }\n return Alignment;\n}());\nexport { Alignment };\n/**\n * CellStyleXfs class\n * @private\n */\nvar CellStyleXfs = /** @class */ (function () {\n function CellStyleXfs() {\n }\n return CellStyleXfs;\n}());\nexport { CellStyleXfs };\n/**\n * CellStyles class\n * @private\n */\nvar CellStyles = /** @class */ (function () {\n function CellStyles() {\n this.name = 'Normal';\n this.xfId = 0;\n }\n return CellStyles;\n}());\nexport { CellStyles };\n/**\n * NumFmt class\n * @private\n */\nvar NumFmt = /** @class */ (function () {\n function NumFmt(id, code) {\n this.numFmtId = id;\n this.formatCode = code;\n }\n return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n * @private\n */\nvar Border = /** @class */ (function () {\n function Border(mLine, mColor) {\n this.lineStyle = mLine;\n this.color = mColor;\n }\n return Border;\n}());\nexport { Border };\n/**\n * Borders class\n * @private\n */\nvar Borders = /** @class */ (function () {\n function Borders() {\n this.left = new Border('none', '#FFFFFF');\n this.right = new Border('none', '#FFFFFF');\n this.top = new Border('none', '#FFFFFF');\n this.bottom = new Border('none', '#FFFFFF');\n this.all = new Border('none', '#FFFFFF');\n }\n return Borders;\n}());\nexport { Borders };\n","/**\n * Column class\n * @private\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Row class\n * @private\n */\nvar Row = /** @class */ (function () {\n function Row() {\n }\n return Row;\n}());\nexport { Row };\n/**\n * Rows class\n * @private\n */\nvar Rows = /** @class */ (function (_super) {\n __extends(Rows, _super);\n function Rows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (row) {\n _this.push(row);\n };\n return _this;\n }\n return Rows;\n}(Array));\nexport { Rows };\n","/**\n * Image class\n * @private\n */\nvar Image = /** @class */ (function () {\n function Image() {\n }\n return Image;\n}());\nexport { Image };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Cell = /** @class */ (function () {\n function Cell() {\n }\n return Cell;\n}());\nexport { Cell };\n/**\n * Cells class\n * @private\n */\nvar Cells = /** @class */ (function (_super) {\n __extends(Cells, _super);\n function Cells() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.add = function (cell) {\n var inserted = false;\n var count = 0;\n for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n var c = _a[_i];\n if (c.index === cell.index) {\n _this[count] = cell;\n inserted = true;\n }\n count++;\n }\n if (!inserted) {\n _this.push(cell);\n }\n };\n return _this;\n }\n return Cells;\n}(Array));\nexport { Cells };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @private\n */\nvar ValueFormatter = /** @class */ (function () {\n function ValueFormatter(cultureName) {\n this.intl = new Internationalization();\n // if (!isNullOrUndefined(cultureName)) {\n // this.intl.culture = cultureName;\n // }\n }\n ValueFormatter.prototype.getFormatFunction = function (format, isServerRendered) {\n if (format.type) {\n if (isServerRendered) {\n format.isServerRendered = true;\n }\n return this.intl.getDateFormat(format);\n }\n else {\n return this.intl.getNumberFormat(format);\n }\n };\n // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n // if ((format).type) {\n // return this.intl.getDateParser(format);\n // } else {\n // return this.intl.getNumberParser(format);\n // }\n // }\n // public fromView(value: string, format: Function, type?: string): string | number | Date {\n // if (type === 'date' || type === 'datetime' || type === 'number') {\n // return format(value);\n // } else {\n // return value;\n // }\n // }\n ValueFormatter.prototype.toView = function (value, format) {\n var result = value;\n if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n result = format(value);\n }\n return result;\n };\n // public setCulture(cultureName: string): void {\n // if (!isNullOrUndefined(cultureName)) {\n // setCulture(cultureName);\n // }\n // }\n /* tslint:disable:no-any */\n ValueFormatter.prototype.displayText = function (value, format, isServerRendered) {\n return this.toView(value, this.getFormatFunction(format, isServerRendered));\n };\n return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * CsvHelper class\n * @private\n */\nvar CsvHelper = /** @class */ (function () {\n /* tslint:disable:no-any */\n function CsvHelper(json, separator) {\n this.csvStr = '';\n if (separator === null || separator === undefined) {\n this.separator = ',';\n }\n else {\n this.separator = separator;\n }\n this.formatter = new ValueFormatter();\n this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n if (json.isServerRendered !== null && json.isServerRendered !== undefined) {\n this.isServerRendered = json.isServerRendered;\n }\n if (json.styles !== null && json.styles !== undefined) {\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parseWorksheet(json.worksheets[0]);\n }\n //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n }\n CsvHelper.prototype.parseWorksheet = function (json) {\n //Rows\n if (json.rows !== null && json.rows !== undefined) {\n this.parseRows(json.rows);\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRows = function (rows) {\n var count = 1;\n for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n var row = rows_1[_i];\n //Row index\n if (row.index !== null && row.index !== undefined) {\n while (count < row.index) {\n this.csvStr += '\\r\\n';\n count++;\n }\n this.parseRow(row);\n }\n else {\n throw Error('Row index is missing.');\n }\n }\n this.csvStr += '\\r\\n';\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseRow = function (row) {\n if (row.cells !== null && row.cells !== undefined) {\n var count = 1;\n for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n var cell = _a[_i];\n //cell index\n if (cell.index !== null && cell.index !== undefined) {\n while (count < cell.index) {\n this.csvStr += this.separator;\n count++;\n }\n this.parseCell(cell);\n }\n else {\n throw Error('Cell index is missing.');\n }\n }\n }\n };\n /* tslint:disable:no-any */\n CsvHelper.prototype.parseCell = function (cell) {\n var csv = this.csvStr;\n if (cell.value !== undefined) {\n if (cell.value instanceof Date) {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n try {\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }, this.isServerRendered));\n }\n catch (error) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: cell.style.numberFormat }, this.isServerRendered));\n }\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n try {\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n catch (error) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n }\n else {\n csv += cell.value;\n }\n }\n else if (typeof (cell.value) === 'boolean') {\n csv += cell.value ? 'TRUE' : 'FALSE';\n }\n else if (typeof (cell.value) === 'number') {\n if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }, this.isServerRendered));\n }\n else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n /* tslint:disable-next-line:max-line-length */\n csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n }\n else {\n csv += cell.value;\n }\n }\n else {\n csv += this.parseCellValue(cell.value);\n }\n }\n this.csvStr = csv;\n };\n CsvHelper.prototype.parseCellValue = function (value) {\n var val = '';\n var length = value.length;\n for (var start = 0; start < length; start++) {\n if (value[start] === '\\\"') {\n val += value[start].replace('\\\"', '\\\"\\\"');\n }\n else {\n val += value[start];\n }\n }\n value = val;\n if (value.indexOf(this.separator) !== -1 || value.indexOf('\\n') !== -1 || value.indexOf('\\\"') !== -1) {\n return value = '\\\"' + value + '\\\"';\n }\n else {\n return value;\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName- file name to save.\n * @param {Blob} buffer- the content to write in file\n */\n CsvHelper.prototype.save = function (fileName) {\n this.buffer = new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n if (this.isMicrosoftBrowser) {\n navigator.msSaveBlob(this.buffer, fileName);\n }\n else {\n var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n dwlLink.download = fileName;\n dwlLink.href = dataUrl_1;\n var event_1 = document.createEvent('MouseEvent');\n event_1.initEvent('click', true, true);\n dwlLink.dispatchEvent(event_1);\n setTimeout(function () {\n window.URL.revokeObjectURL(dataUrl_1);\n });\n }\n };\n /**\n * Returns a Blob object containing CSV data with optional encoding.\n * @param {string} [encodingType] - The supported encoding types are \"ansi\", \"unicode\" and \"utf8\".\n */\n /* tslint:disable:no-any */\n CsvHelper.prototype.saveAsBlob = function (encodingType) {\n if (encodingType != undefined) {\n var encoding = new Encoding();\n var encodeString = 'UTF-8';\n if (encodingType.toUpperCase() == \"ANSI\") {\n encoding.type = 'Ansi';\n encodeString = 'ANSI';\n }\n else if (encodingType.toUpperCase() == \"UNICODE\") {\n encoding.type = 'Unicode';\n encodeString = 'UNICODE';\n }\n else {\n encoding.type = 'Utf8';\n encodeString = 'UTF-8';\n }\n var buffer = encoding.getBytes(this.csvStr, 0, this.csvStr.length);\n return new Blob([buffer], { type: 'text/csv;charset=' + encodeString });\n }\n else\n return new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n };\n return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n * @private\n */\nvar BlobHelper = /** @class */ (function () {\n function BlobHelper() {\n /* tslint:disable:no-any */\n this.parts = [];\n }\n /* tslint:disable:no-any */\n BlobHelper.prototype.append = function (part) {\n this.parts.push(part);\n this.blob = undefined; // Invalidate the blob\n };\n BlobHelper.prototype.getBlob = function () {\n return new Blob(this.parts, { type: 'text/plain' });\n };\n return BlobHelper;\n}());\nexport { BlobHelper };\n","/**\n * AutoFilters class\n * @private\n */\nvar AutoFilters = /** @class */ (function () {\n function AutoFilters() {\n }\n return AutoFilters;\n}());\nexport { AutoFilters };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Image } from './image';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\nimport { AutoFilters } from './auto-filters';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n /* tslint:disable:no-any */\n function Workbook(json, saveType, culture, currencyString, separator) {\n this.sharedStringCount = 0;\n this.unitsProportions = [\n 96 / 75.0,\n 96 / 300.0,\n 96,\n 96 / 25.4,\n 96 / 2.54,\n 1,\n 96 / 72.0,\n 96 / 72.0 / 12700,\n ];\n /* tslint:disable:no-any */\n this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n if (culture !== undefined) {\n this.culture = culture;\n }\n else {\n this.culture = 'en-US';\n }\n if (currencyString !== undefined) {\n this.currency = currencyString;\n }\n else {\n this.currency = 'USD';\n }\n this.intl = new Internationalization(this.culture);\n this.mSaveType = saveType;\n if (saveType === 'xlsx') {\n this.mArchive = new ZipArchive();\n this.sharedString = [];\n this.mFonts = [];\n this.mBorders = [];\n this.mStyles = [];\n this.printTitles = new Map();\n this.cellStyles = new Map();\n this.mNumFmt = new Map();\n this.mFills = new Map();\n this.mStyles.push(new CellStyle());\n this.mFonts.push(new Font());\n /* tslint:disable */\n this.cellStyles.set('Normal', new CellStyles());\n /* tslint:enable */\n this.mCellXfs = [];\n this.mCellStyleXfs = [];\n this.drawingCount = 0;\n this.imageCount = 0;\n if (json.styles !== null && json.styles !== undefined) {\n /* tslint:disable-next-line:no-any */\n this.globalStyles = new Map();\n for (var i = 0; i < json.styles.length; i++) {\n if (json.styles[i].name !== undefined) {\n if (!this.cellStyles.has(json.styles[i].name)) {\n var cellStyle = new CellStyle();\n cellStyle.isGlobalStyle = true;\n this.parserCellStyle(json.styles[i], cellStyle, 'none');\n var cellStylesIn = new CellStyles();\n cellStylesIn.name = cellStyle.name;\n cellStylesIn.xfId = (cellStyle.index - 1);\n this.cellStyles.set(cellStylesIn.name, cellStylesIn);\n /* tslint:disable-next-line:no-any */\n var tFormat = {};\n if (json.styles[i].numberFormat !== undefined) {\n tFormat.format = json.styles[i].numberFormat;\n }\n if (json.styles[i].type !== undefined) {\n tFormat.type = json.styles[i].type;\n }\n else {\n tFormat.type = 'datetime';\n }\n if (tFormat.format !== undefined) {\n this.globalStyles.set(json.styles[i].name, tFormat);\n }\n }\n else {\n throw Error('Style name ' + json.styles[i].name + ' is already existed');\n }\n }\n }\n }\n // Parses Worksheets data to DOM. \n if (json.worksheets !== null && json.worksheets !== undefined) {\n this.parserWorksheets(json.worksheets);\n }\n else {\n throw Error('Worksheet is expected.');\n }\n // Parses the BuiltInProperties data to DOM. \n if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n this.builtInProperties = new BuiltInProperties();\n this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n }\n }\n else {\n this.csvHelper = new CsvHelper(json, separator);\n }\n }\n /* tslint:disable:no-any */\n Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n //Author\n if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n builtInProperties.author = jsonBuiltInProperties.author;\n }\n //Comments\n if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n builtInProperties.comments = jsonBuiltInProperties.comments;\n }\n //Category\n if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n builtInProperties.category = jsonBuiltInProperties.category;\n }\n //Company\n if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n builtInProperties.company = jsonBuiltInProperties.company;\n }\n //Manager\n if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n builtInProperties.manager = jsonBuiltInProperties.manager;\n }\n //Subject\n if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n builtInProperties.subject = jsonBuiltInProperties.subject;\n }\n //Title\n if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n builtInProperties.title = jsonBuiltInProperties.title;\n }\n //Creation date\n if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n }\n //Modified date\n if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n }\n //Tags\n if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n builtInProperties.tags = jsonBuiltInProperties.tags;\n }\n //Status\n if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n builtInProperties.status = jsonBuiltInProperties.status;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserWorksheets = function (json) {\n this.worksheets = new Worksheets();\n var length = json.length;\n for (var i = 0; i < length; i++) {\n var jsonSheet = json[i];\n var sheet = new Worksheet();\n this.mergeCells = new MergeCells();\n this.mergedCellsStyle = new Map();\n this.mHyperLinks = [];\n //Name\n if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n sheet.name = jsonSheet.name;\n }\n else {\n sheet.name = 'Sheet' + (i + 1).toString();\n }\n if (jsonSheet.enableRtl !== null && jsonSheet.enableRtl !== undefined) {\n sheet.enableRtl = jsonSheet.enableRtl;\n }\n sheet.index = (i + 1);\n //Columns\n if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n this.parserColumns(jsonSheet.columns, sheet);\n }\n //Rows\n if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n this.parserRows(jsonSheet.rows, sheet);\n }\n //showGridLines\n if (jsonSheet.showGridLines !== null && jsonSheet.showGridLines !== undefined) {\n sheet.showGridLines = jsonSheet.showGridLines;\n }\n //FreezePanes\n if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n this.parserFreezePanes(jsonSheet.freeze, sheet);\n }\n //Print Title\n if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n this.parserPrintTitle(jsonSheet.printTitle, sheet);\n }\n if (jsonSheet.pageSetup !== undefined) {\n if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n }\n }\n if (jsonSheet.images !== undefined) {\n this.parserImages(jsonSheet.images, sheet);\n }\n if (jsonSheet.autoFilters !== null && jsonSheet.autoFilters !== undefined) {\n this.parseFilters(jsonSheet.autoFilters, sheet);\n }\n sheet.index = (i + 1);\n sheet.mergeCells = this.mergeCells;\n sheet.hyperLinks = this.mHyperLinks;\n this.worksheets.push(sheet);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n /* tslint:disable:no-any */\n var result = {};\n this.applyProperties(fromJson, result);\n this.applyProperties(toJson, result);\n return result;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n var keys = Object.keys(sourceJson);\n for (var index = 0; index < keys.length; index++) {\n if (keys[index] !== 'name') {\n destJson[keys[index]] = sourceJson[keys[index]];\n }\n }\n };\n Workbook.prototype.getCellName = function (row, column) {\n return this.getColumnName(column) + row.toString();\n };\n Workbook.prototype.getColumnName = function (col) {\n col--;\n var strColumnName = '';\n do {\n var iCurrentDigit = col % 26;\n col = col / 26 - 1;\n strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n } while (col >= 0);\n return strColumnName;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserPrintTitle = function (json, sheet) {\n var printTitleName = '';\n var titleRowName;\n if (json.fromRow !== null && json.fromRow !== undefined) {\n var fromRow = json.fromRow;\n var toRow = void 0;\n if (json.toRow !== null && json.toRow !== undefined) {\n toRow = json.toRow;\n }\n else {\n toRow = json.fromRow;\n }\n titleRowName = '$' + fromRow + ':$' + toRow;\n }\n var titleColName;\n if (json.fromColumn !== null && json.fromColumn !== undefined) {\n var fromColumn = json.fromColumn;\n var toColumn = void 0;\n if (json.toColumn !== null && json.toColumn !== undefined) {\n toColumn = json.toColumn;\n }\n else {\n toColumn = json.fromColumn;\n }\n titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n }\n if (titleRowName !== undefined) {\n printTitleName += (sheet.name + '!' + titleRowName);\n }\n if (titleColName !== undefined && titleRowName !== undefined) {\n printTitleName += ',' + (sheet.name + '!' + titleColName);\n }\n else if (titleColName !== undefined) {\n printTitleName += (sheet.name + '!' + titleColName);\n }\n if (printTitleName !== '') {\n this.printTitles.set(sheet.index - 1, printTitleName);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserFreezePanes = function (json, sheet) {\n sheet.freezePanes = new FreezePane();\n if (json.row !== null && json.row !== undefined) {\n sheet.freezePanes.row = json.row;\n }\n else {\n sheet.freezePanes.row = 0;\n }\n if (json.column !== null && json.column !== undefined) {\n sheet.freezePanes.column = json.column;\n }\n else {\n sheet.freezePanes.column = 0;\n }\n sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserColumns = function (json, sheet) {\n var columnsLength = json.length;\n sheet.columns = [];\n for (var column = 0; column < columnsLength; column++) {\n var col = new Column();\n if (json[column].index !== null && json[column].index !== undefined) {\n col.index = json[column].index;\n }\n else {\n throw Error('Column index is missing.');\n }\n if (json[column].width !== null && json[column].width !== undefined) {\n col.width = json[column].width;\n }\n sheet.columns.push(col);\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRows = function (json, sheet) {\n var rowsLength = json.length;\n sheet.rows = new Rows();\n var rowId = 0;\n for (var r = 0; r < rowsLength; r++) {\n var row = this.parserRow(json[r], rowId);\n rowId = row.index;\n sheet.rows.add(row);\n }\n this.insertMergedCellsStyle(sheet);\n };\n Workbook.prototype.insertMergedCellsStyle = function (sheet) {\n var _this = this;\n if (this.mergeCells.length > 0) {\n this.mergedCellsStyle.forEach(function (value, key) {\n var row = sheet.rows.filter(function (item) {\n return item.index === value.y;\n })[0];\n if (!isNullOrUndefined(row)) {\n var cell = row.cells.filter(function (item) {\n return item.index === value.x;\n })[0];\n if (!isNullOrUndefined(cell)) {\n cell.styleIndex = value.styleIndex;\n }\n else {\n var cells = row.cells.filter(function (item) {\n return item.index <= value.x;\n });\n var insertIndex = 0;\n if (cells.length > 0) {\n insertIndex = row.cells.indexOf(cells[cells.length - 1]) + 1;\n }\n row.cells.splice(insertIndex, 0, _this.createCell(value, key));\n }\n }\n else {\n var rows = sheet.rows.filter(function (item) {\n return item.index <= value.y;\n });\n var rowToInsert = new Row();\n rowToInsert.index = value.y;\n rowToInsert.cells = new Cells();\n rowToInsert.cells.add(_this.createCell(value, key));\n var insertIndex = 0;\n if (rows.length > 0) {\n insertIndex = sheet.rows.indexOf(rows[rows.length - 1]) + 1;\n }\n sheet.rows.splice(insertIndex, 0, rowToInsert);\n }\n });\n }\n };\n Workbook.prototype.createCell = function (value, key) {\n var cellToInsert = new Cell();\n cellToInsert.refName = key;\n cellToInsert.index = value.x;\n cellToInsert.cellStyle = new CellStyle();\n cellToInsert.styleIndex = value.styleIndex;\n return cellToInsert;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserRow = function (json, rowIndex) {\n var row = new Row();\n //Row Height\n if (json.height !== null && json.height !== undefined) {\n row.height = json.height;\n }\n //Row index\n if (json.index !== null && json.index !== undefined) {\n row.index = json.index;\n }\n else {\n throw Error('Row index is missing.');\n }\n if (json.grouping !== null && json.grouping !== undefined) {\n this.parseGrouping(json.grouping, row);\n }\n this.parseCells(json.cells, row);\n return row;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseGrouping = function (json, row) {\n row.grouping = new Grouping();\n if (json.outlineLevel !== undefined) {\n row.grouping.outlineLevel = json.outlineLevel;\n }\n if (json.isCollapsed !== undefined) {\n row.grouping.isCollapsed = json.isCollapsed;\n }\n if (json.isHidden !== undefined) {\n row.grouping.isHidden = json.isHidden;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parseCells = function (json, row) {\n row.cells = new Cells();\n var cellsLength = json !== undefined ? json.length : 0;\n var spanMin = 1;\n var spanMax = 1;\n var curCellIndex = 0;\n for (var cellId = 0; cellId < cellsLength; cellId++) {\n /* tslint:disable:no-any */\n var jsonCell = json[cellId];\n var cell = new Cell();\n //cell index\n if (jsonCell.index !== null && jsonCell.index !== undefined) {\n cell.index = jsonCell.index;\n }\n else {\n throw Error('Cell index is missing.');\n }\n if (cell.index < spanMin) {\n spanMin = cell.index;\n }\n else if (cell.index > spanMax) {\n spanMax = cell.index;\n }\n //Update the Cell name\n cell.refName = this.getCellName(row.index, cell.index);\n //Row span\n if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n cell.rowSpan = jsonCell.rowSpan - 1;\n }\n else {\n cell.rowSpan = 0;\n }\n //Column span\n if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n cell.colSpan = jsonCell.colSpan - 1;\n }\n else {\n cell.colSpan = 0;\n }\n //Hyperlink\n if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n var hyperLink = new HyperLink();\n if (jsonCell.hyperlink.target !== undefined) {\n hyperLink.target = jsonCell.hyperlink.target;\n if (jsonCell.hyperlink.displayText !== undefined) {\n cell.value = jsonCell.hyperlink.displayText;\n }\n else {\n cell.value = jsonCell.hyperlink.target;\n }\n cell.type = this.getCellValueType(cell.value);\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n cell.cellStyle = new CellStyle();\n /* tslint:disable-next-line:max-line-length */\n this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n cell.styleIndex = cell.cellStyle.index;\n }\n }\n // formulas\n if (jsonCell.formula !== null && jsonCell.formula !== undefined) {\n cell.formula = jsonCell.formula;\n cell.type = 'formula';\n }\n //Cell value\n if (jsonCell.value !== null && jsonCell.value !== undefined) {\n if (cell.formula !== undefined) {\n cell.value = 0;\n }\n else {\n cell.value = jsonCell.value;\n cell.type = this.getCellValueType(cell.value);\n }\n }\n if (jsonCell.style !== null && jsonCell.style !== undefined && cell.styleIndex === undefined) {\n cell.cellStyle = new CellStyle();\n if (cell.value instanceof Date) {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type, 14);\n }\n else {\n this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type);\n }\n cell.styleIndex = cell.cellStyle.index;\n }\n else if (cell.value instanceof Date) {\n cell.cellStyle = new CellStyle();\n this.parserCellStyle({}, cell.cellStyle, cell.type, 14);\n cell.styleIndex = cell.cellStyle.index;\n }\n this.parseCellType(cell);\n this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n row.cells.add(cell);\n curCellIndex = (cell.index + 1);\n }\n row.spans = (spanMin) + ':' + (spanMax);\n };\n Workbook.prototype.GetColors = function () {\n var colors;\n colors = new Map();\n /* tslint:disable */\n colors.set('WHITE', 'FFFFFFFF');\n /* tslint:disable */\n colors.set('SILVER', 'FFC0C0C0');\n /* tslint:disable */\n colors.set('GRAY', 'FF808080');\n /* tslint:disable */\n colors.set('BLACK', 'FF000000');\n /* tslint:disable */\n colors.set('RED', 'FFFF0000');\n /* tslint:disable */\n colors.set('MAROON', 'FF800000');\n /* tslint:disable */\n colors.set('YELLOW', 'FFFFFF00');\n /* tslint:disable */\n colors.set('OLIVE', 'FF808000');\n /* tslint:disable */\n colors.set('LIME', 'FF00FF00');\n /* tslint:disable */\n colors.set('GREEN', 'FF008000');\n /* tslint:disable */\n colors.set('AQUA', 'FF00FFFF');\n /* tslint:disable */\n colors.set('TEAL', 'FF008080');\n /* tslint:disable */\n colors.set('BLUE', 'FF0000FF');\n /* tslint:disable */\n colors.set('NAVY', 'FF000080');\n /* tslint:disable */\n colors.set('FUCHSIA', 'FFFF00FF');\n /* tslint:disable */\n colors.set('PURPLE', 'FF800080');\n return colors;\n };\n Workbook.prototype.processColor = function (colorVal) {\n if (colorVal.indexOf('#') === 0) {\n return colorVal.replace('#', 'FF');\n }\n colorVal = colorVal.toUpperCase();\n this.rgbColors = this.GetColors();\n if (this.rgbColors.has(colorVal)) {\n colorVal = this.rgbColors.get(colorVal);\n }\n else {\n colorVal = 'FF000000';\n }\n return colorVal;\n };\n Workbook.prototype.processCellValue = function (value, cell) {\n var cellValue = value;\n if (value.indexOf(\"\") !== -1 ||\n value.indexOf(\"\") !== -1 || value.indexOf(\"\") !== -1) {\n var processedVal = '';\n var startindex = value.indexOf('<', 0);\n var endIndex = value.indexOf('>', startindex + 1);\n if (startindex >= 0 && endIndex >= 0) {\n if (startindex !== 0) {\n processedVal += '' + this.processString(value.substring(0, startindex)) + '';\n }\n while (startindex >= 0 && endIndex >= 0) {\n endIndex = value.indexOf('>', startindex + 1);\n if (endIndex >= 0) {\n var subString = value.substring(startindex + 1, endIndex);\n startindex = value.indexOf('<', endIndex + 1);\n if (startindex < 0) {\n startindex = cellValue.length;\n }\n var text = cellValue.substring(endIndex + 1, startindex);\n if (text.length !== 0) {\n var subSplit = subString.split(' ');\n if (subSplit.length > 0) {\n processedVal += '';\n }\n if (subSplit.length > 1) {\n for (var _i = 0, subSplit_1 = subSplit; _i < subSplit_1.length; _i++) {\n var element = subSplit_1[_i];\n var start = element.trim().substring(0, 5);\n switch (start) {\n case 'size=':\n processedVal += '';\n break;\n case 'face=':\n processedVal += '';\n break;\n case 'color':\n processedVal += '';\n break;\n case 'href=':\n var hyperLink = new HyperLink();\n hyperLink.target = element.substring(6, element.length - 1).trim();\n hyperLink.ref = cell.refName;\n hyperLink.rId = (this.mHyperLinks.length + 1);\n this.mHyperLinks.push(hyperLink);\n processedVal += '';\n break;\n }\n }\n }\n else if (subSplit.length === 1) {\n var style = subSplit[0].trim();\n switch (style) {\n case 'b':\n processedVal += '';\n break;\n case 'i':\n processedVal += '';\n break;\n case 'u':\n processedVal += '';\n break;\n }\n }\n processedVal += '' + this.processString(text) + '';\n }\n }\n }\n if (processedVal === '') {\n return cellValue;\n }\n return processedVal;\n }\n else {\n return cellValue;\n }\n }\n else {\n return cellValue;\n }\n };\n Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n var index = 0;\n if (this.cellStyles.has(json.name)) {\n cellStyle.index = this.mStyles.filter(function (a) { return (a.name === json.name); })[0].index;\n cellStyle.name = json.name;\n }\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n //name\n if (json.name !== null && json.name !== undefined) {\n if (cellStyle.isGlobalStyle) {\n cellStyle.name = json.name;\n }\n else {\n this.applyGlobalStyle(json, cellStyle);\n return;\n }\n }\n //background color\n if (json.backColor !== null && json.backColor !== undefined) {\n cellStyle.backColor = json.backColor;\n }\n //borders\n //leftBorder\n cellStyle.borders = new Borders();\n //AllBorder\n if (json.borders !== null && json.borders !== undefined) {\n this.parserBorder(json.borders, cellStyle.borders.all);\n }\n //leftborder\n if (json.leftBorder !== null && json.leftBorder !== undefined) {\n this.parserBorder(json.leftBorder, cellStyle.borders.left);\n }\n //rightBorder\n if (json.rightBorder !== null && json.rightBorder !== undefined) {\n this.parserBorder(json.rightBorder, cellStyle.borders.right);\n }\n //topBorder\n if (json.topBorder !== null && json.topBorder !== undefined) {\n this.parserBorder(json.topBorder, cellStyle.borders.top);\n }\n //bottomBorder\n if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n }\n //fontName\n if (json.fontName !== null && json.fontName !== undefined) {\n cellStyle.fontName = json.fontName;\n }\n //fontSize\n if (json.fontSize !== null && json.fontSize !== undefined) {\n cellStyle.fontSize = json.fontSize;\n }\n //fontColor\n if (json.fontColor !== null && json.fontColor !== undefined) {\n cellStyle.fontColor = json.fontColor;\n }\n //italic\n if (json.italic !== null && json.italic !== undefined) {\n cellStyle.italic = json.italic;\n }\n //bold\n if (json.bold !== null && json.bold !== undefined) {\n cellStyle.bold = json.bold;\n }\n //hAlign\n if (json.hAlign !== null && json.hAlign !== undefined) {\n cellStyle.hAlign = json.hAlign.toLowerCase();\n }\n //indent\n if (json.indent !== null && json.indent !== undefined) {\n cellStyle.indent = json.indent;\n if (!(cellStyle.hAlign === 'left' || cellStyle.hAlign === 'right')) {\n cellStyle.hAlign = 'left';\n }\n }\n if (json.rotation !== null && json.rotation !== undefined) {\n cellStyle.rotation = json.rotation;\n }\n //vAlign\n if (json.vAlign !== null && json.vAlign !== undefined) {\n cellStyle.vAlign = json.vAlign.toLowerCase();\n }\n //underline\n if (json.underline !== null && json.underline !== undefined) {\n cellStyle.underline = json.underline;\n }\n //strikeThrough\n if (json.strikeThrough !== null && json.strikeThrough !== undefined) {\n cellStyle.strikeThrough = json.strikeThrough;\n }\n //wrapText\n if (json.wrapText !== null && json.wrapText !== undefined) {\n cellStyle.wrapText = json.wrapText;\n }\n //numberFormat\n if (json.numberFormat !== null && json.numberFormat !== undefined) {\n if (json.type !== null && json.type !== undefined) {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n }\n else {\n cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n }\n }\n else if (defStyleIndex !== undefined) {\n cellStyle.numFmtId = 14;\n cellStyle.numberFormat = 'GENERAL';\n }\n else {\n cellStyle.numberFormat = 'GENERAL';\n }\n cellStyle.index = this.processCellStyle(cellStyle);\n };\n Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n var format = this.getNumberFormat(numberFormat, type);\n if (format !== numberFormat) {\n var numFmt = this.mNumFmt.get(numberFormat);\n if (numFmt !== undefined) {\n numFmt.formatCode = format;\n if (this.mNumFmt.has(format)) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXfs = _a[_i];\n if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n var cellXfs = _c[_b];\n if (cellXfs.numFmtId === numFmt.numFmtId) {\n cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n }\n }\n }\n }\n }\n };\n Workbook.prototype.changeNumberFormats = function (value) {\n if (typeof value == \"string\") {\n var regex = new RegExp(this.currency, 'g');\n value = value.replace(regex, '[$' + this.currency + ']');\n }\n else if (typeof value == \"object\") {\n for (var i = 0; i < value.length; i++) {\n value[i] = value[i].replace(this.currency, '[$' + this.currency + ']');\n }\n }\n return value;\n };\n Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n var returnFormat;\n switch (type) {\n case 'number':\n try {\n returnFormat = this.intl.getNumberPattern({ format: numberFormat, currency: this.currency, useGrouping: true }, true);\n if (this.currency.length > 1) {\n returnFormat = this.changeNumberFormats(returnFormat);\n }\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n break;\n case 'datetime':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'dateTime' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n case 'date':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'date' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n case 'time':\n try {\n returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n try {\n returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'time' }, true);\n }\n catch (error) {\n returnFormat = numberFormat;\n }\n }\n break;\n default:\n returnFormat = numberFormat;\n break;\n }\n return returnFormat;\n };\n /* tslint:disable:no-any */\n Workbook.prototype.parserBorder = function (json, border) {\n if (json.color !== null && json.color !== undefined) {\n border.color = json.color;\n }\n else {\n border.color = '#000000';\n }\n if (json.lineStyle !== null && json.lineStyle !== undefined) {\n border.lineStyle = json.lineStyle;\n }\n else {\n border.lineStyle = 'thin';\n }\n };\n Workbook.prototype.processCellStyle = function (style) {\n if (style.isGlobalStyle) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n var compareResult = this.compareStyle(style);\n if (!compareResult.result) {\n this.processNumFormatId(style);\n this.mStyles.push(style);\n return this.mStyles.length;\n }\n else {\n //Return the index of the already existing style.\n return compareResult.index;\n }\n }\n };\n Workbook.prototype.processNumFormatId = function (style) {\n if (style.numberFormat !== 'GENERAL' && !this.mNumFmt.has(style.numberFormat)) {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n }\n };\n Workbook.prototype.isNewFont = function (toCompareStyle) {\n var result = false;\n var index = 0;\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n index++;\n var fontColor = undefined;\n if (toCompareStyle.fontColor !== undefined) {\n fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n }\n result = font.color === fontColor &&\n font.b === toCompareStyle.bold &&\n font.i === toCompareStyle.italic &&\n font.u === toCompareStyle.underline &&\n font.strike === toCompareStyle.strikeThrough &&\n font.name === toCompareStyle.fontName &&\n font.sz === toCompareStyle.fontSize;\n if (result) {\n break;\n }\n }\n index = index - 1;\n return { index: index, result: result };\n };\n Workbook.prototype.isNewBorder = function (toCompareStyle) {\n var bStyle = new CellStyle();\n if (this.isAllBorder(toCompareStyle.borders)) {\n return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n }\n else {\n return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n }\n };\n Workbook.prototype.isAllBorder = function (toCompareBorder) {\n var allBorderStyle = new CellStyle();\n return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n };\n Workbook.prototype.compareStyle = function (toCompareStyle) {\n var result = true;\n var index = 0;\n var globalStyleIndex = 0;\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var baseStyle = _a[_i];\n result = baseStyle.isGlobalStyle ? false : (baseStyle.backColor === toCompareStyle.backColor &&\n baseStyle.bold === toCompareStyle.bold &&\n baseStyle.numFmtId === toCompareStyle.numFmtId &&\n baseStyle.numberFormat === toCompareStyle.numberFormat &&\n baseStyle.type === toCompareStyle.type &&\n baseStyle.fontColor === toCompareStyle.fontColor &&\n baseStyle.fontName === toCompareStyle.fontName &&\n baseStyle.fontSize === toCompareStyle.fontSize &&\n baseStyle.hAlign === toCompareStyle.hAlign &&\n baseStyle.italic === toCompareStyle.italic &&\n baseStyle.underline === toCompareStyle.underline &&\n baseStyle.strikeThrough === toCompareStyle.strikeThrough &&\n baseStyle.vAlign === toCompareStyle.vAlign &&\n baseStyle.indent === toCompareStyle.indent &&\n baseStyle.rotation === toCompareStyle.rotation &&\n baseStyle.wrapText === toCompareStyle.wrapText &&\n (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle));\n if (result) {\n index = baseStyle.index;\n break;\n }\n }\n return { index: index, result: result };\n };\n Workbook.prototype.contains = function (array, item) {\n var index = array.indexOf(item);\n return index > -1 && index < array.length;\n };\n Workbook.prototype.getCellValueType = function (value) {\n if (value instanceof Date) {\n return 'datetime';\n }\n else if (typeof (value) === 'boolean') {\n return 'boolean';\n }\n else if (typeof (value) === 'number') {\n return 'number';\n }\n else {\n return 'string';\n }\n };\n Workbook.prototype.parseCellType = function (cell) {\n var type = cell.type;\n var saveType;\n var value = cell.value;\n switch (type) {\n case 'datetime':\n value = this.toOADate(value);\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n var value_1 = this.globalStyles.get(cell.cellStyle.name);\n this.switchNumberFormat(value_1.format, value_1.type);\n }\n }\n saveType = 'n';\n break;\n //TODO: Update the number format index and style\n case 'boolean':\n value = value ? 1 : 0;\n saveType = 'b';\n break;\n case 'number':\n saveType = 'n';\n if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n if (this.globalStyles.has(cell.cellStyle.name)) {\n this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n }\n }\n break;\n case 'string':\n this.sharedStringCount++;\n saveType = 's';\n var sstvalue = this.processCellValue(value, cell);\n if (!this.contains(this.sharedString, sstvalue)) {\n this.sharedString.push(sstvalue);\n }\n value = this.sharedString.indexOf(sstvalue);\n break;\n default:\n break;\n }\n cell.saveType = saveType;\n cell.value = value;\n };\n Workbook.prototype.parserImages = function (json, sheet) {\n var imagesLength = json.length;\n sheet.images = [];\n var imageId = 0;\n for (var p = 0; p < imagesLength; p++) {\n var image = this.parserImage(json[p]);\n sheet.images.push(image);\n }\n };\n Workbook.prototype.parseFilters = function (json, sheet) {\n sheet.autoFilters = new AutoFilters();\n if (json.row !== null && json.row !== undefined)\n sheet.autoFilters.row = json.row;\n else\n throw new Error('Argument Null Exception: row null or empty');\n if (json.lastRow !== null && json.lastRow !== undefined)\n sheet.autoFilters.lastRow = json.lastRow;\n else\n throw new Error('Argument Null Exception: lastRow cannot be null or empty');\n if (json.column !== null && json.column !== undefined)\n sheet.autoFilters.column = json.column;\n else\n throw new Error('Argument Null Exception: column cannot be null or empty');\n if (json.lastColumn !== null && json.row !== undefined)\n sheet.autoFilters.lastColumn = json.lastColumn;\n else\n throw new Error('Argument Null Exception: lastColumn cannot be null or empty');\n };\n Workbook.prototype.parserImage = function (json) {\n var image = new Image();\n if (json.image !== null && json.image !== undefined) {\n image.image = json.image;\n }\n if (json.row !== null && json.row !== undefined) {\n image.row = json.row;\n }\n if (json.column !== null && json.column !== undefined) {\n image.column = json.column;\n }\n if (json.lastRow !== null && json.lastRow !== undefined) {\n image.lastRow = json.lastRow;\n }\n if (json.lastColumn !== null && json.lastColumn !== undefined) {\n image.lastColumn = json.lastColumn;\n }\n if (json.width !== null && json.width !== undefined) {\n image.width = json.width;\n }\n if (json.height !== null && json.height !== undefined) {\n image.height = json.height;\n }\n if (json.horizontalFlip !== null && json.horizontalFlip !== undefined) {\n image.horizontalFlip = json.horizontalFlip;\n }\n if (json.verticalFlip !== null && json.verticalFlip !== undefined) {\n image.verticalFlip = json.verticalFlip;\n }\n if (json.rotation !== null && json.rotation !== undefined) {\n image.rotation = json.rotation;\n }\n return image;\n };\n /**\n * Returns a Promise with a Blob based on the specified BlobSaveType and optional encoding.\n * @param {BlobSaveType} blobSaveType - A string indicating the type of Blob to generate ('text/csv' or other).\n * @param {string} [encodingType] - The supported encoding types are \"ansi\", \"unicode\" and \"utf8\".\n */\n /* tslint:disable:no-any */\n Workbook.prototype.saveAsBlob = function (blobSaveType, encodingType) {\n var _this = this;\n switch (blobSaveType) {\n case 'text/csv':\n return new Promise(function (resolve, reject) {\n var obj = {};\n obj.blobData = _this.csvHelper.saveAsBlob(encodingType);\n resolve(obj);\n });\n default:\n return new Promise(function (resolve, reject) {\n _this.saveInternal();\n _this.mArchive.saveAsBlob().then(function (blob) {\n var obj = {};\n obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n resolve(obj);\n });\n });\n }\n };\n Workbook.prototype.save = function (fileName, proxyUrl) {\n var _this = this;\n if (fileName === null || fileName === undefined || fileName === '') {\n throw new Error('Argument Null Exception: fileName cannot be null or empty');\n }\n var xlsxMatch = fileName.match('.xlsx$');\n var csvMatch = fileName.match('.csv$');\n if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n this.saveInternal();\n this.mArchive.save(fileName).then(function () {\n _this.mArchive.destroy();\n });\n }\n else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n this.csvHelper.save(fileName);\n }\n else {\n throw Error('Save type and file extension is different.');\n }\n };\n Workbook.prototype.saveInternal = function () {\n this.saveWorkbook();\n this.saveWorksheets();\n this.saveSharedString();\n this.saveStyles();\n this.saveApp(this.builtInProperties);\n this.saveCore(this.builtInProperties);\n this.saveContentType();\n this.saveTopLevelRelation();\n this.saveWorkbookRelation();\n };\n Workbook.prototype.saveWorkbook = function () {\n /* tslint:disable-next-line:max-line-length */\n var workbookTemp = '';\n var sheets = '';\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n var sheetName = this.worksheets[i].name;\n sheetName = sheetName.replace(\"&\", \"&\");\n sheetName = sheetName.replace(\"<\", \"<\");\n sheetName = sheetName.replace(\">\", \">\");\n sheetName = sheetName.replace(\"\\\"\", \""\");\n sheets += '';\n }\n sheets += '';\n workbookTemp += sheets;\n if (this.printTitles.size > 0) {\n var printTitle_1 = '';\n this.printTitles.forEach(function (value, key) {\n printTitle_1 += '' + value + '';\n });\n printTitle_1 += '';\n workbookTemp += printTitle_1;\n }\n this.addToArchive(workbookTemp + '', 'xl/workbook.xml');\n };\n Workbook.prototype.saveWorksheets = function () {\n var length = this.worksheets.length;\n for (var i = 0; i < length; i++) {\n this.saveWorksheet(this.worksheets[i], i);\n }\n };\n Workbook.prototype.saveWorksheet = function (sheet, index) {\n var sheetBlob = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetString = '';\n if (!sheet.isSummaryRowBelow) {\n sheetString += ('' + '' + '' + '');\n }\n else {\n sheetString += ('');\n }\n sheetString += this.saveSheetView(sheet);\n if (sheet.columns !== undefined) {\n var colString = '';\n for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n var column = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n if (column.width !== undefined) {\n colString += '
';\n }\n else {\n colString += '';\n }\n }\n sheetString += (colString + '');\n }\n sheetString += ('');\n sheetBlob.append(sheetString);\n sheetString = '';\n if (sheet.rows !== undefined) {\n for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n var row = _c[_b];\n var rowString = '');\n for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n var cell = _e[_d];\n if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n rowString += ('');\n if (cell.formula !== undefined) {\n rowString += ('' + cell.formula + '');\n }\n if (cell.value !== undefined) {\n rowString += ('' + cell.value + '');\n }\n else {\n rowString += ('');\n }\n }\n }\n rowString += ('');\n sheetBlob.append(rowString);\n }\n }\n sheetString += ('');\n /* tslint:disable-next-line:max-line-length */\n if (sheet.autoFilters !== null && sheet.autoFilters !== undefined)\n sheetString += ('');\n if (sheet.mergeCells.length > 0) {\n sheetString += ('');\n for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n var mCell = _g[_f];\n sheetString += ('');\n }\n sheetString += ('');\n }\n if (sheet.hyperLinks.length > 0) {\n sheetString += ('');\n for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n var hLink = _j[_h];\n sheetString += ('');\n }\n sheetString += ('');\n }\n /* tslint:disable-next-line:max-line-length */\n sheetString += ('');\n if (sheet.images != undefined && sheet.images.length > 0) {\n this.drawingCount++;\n this.saveDrawings(sheet, sheet.index);\n sheetString += '';\n }\n this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n sheetBlob.append(sheetString + '');\n this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n };\n Workbook.prototype.saveDrawings = function (sheet, index) {\n var drawings = new BlobHelper();\n /* tslint:disable-next-line:max-line-length */\n var sheetDrawingString = '';\n if (sheet.images !== undefined) {\n var imgId = 0;\n for (var _i = 0, _a = sheet.images; _i < _a.length; _i++) {\n var pic = _a[_i];\n if (pic.height !== undefined && pic.width !== undefined) {\n this.updatelastRowOffset(sheet, pic);\n this.updatelastColumnOffSet(sheet, pic);\n pic.lastRow -= 1;\n pic.lastColumn -= 1;\n }\n else if (pic.lastRow !== undefined && pic.lastColumn !== undefined) {\n pic.lastRowOffset = 0;\n pic.lastColOffset = 0;\n }\n imgId++;\n sheetDrawingString += '';\n sheetDrawingString += '';\n //col\n sheetDrawingString += pic.column - 1;\n sheetDrawingString += '';\n //colOff\n sheetDrawingString += 0;\n sheetDrawingString += '';\n //row\n sheetDrawingString += pic.row - 1;\n sheetDrawingString += '';\n //rowOff\n sheetDrawingString += 0;\n sheetDrawingString += '';\n sheetDrawingString += '';\n //col\n sheetDrawingString += pic.lastColumn;\n sheetDrawingString += '';\n //colOff\n sheetDrawingString += pic.lastColOffset;\n sheetDrawingString += '';\n //row\n sheetDrawingString += pic.lastRow;\n sheetDrawingString += '';\n //rowOff\n sheetDrawingString += pic.lastRowOffset;\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += ' ';\n sheetDrawingString += ' ';\n sheetDrawingString += '';\n /* tslint:disable-next-line:max-line-length */\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '';\n sheetDrawingString += '= -3600) {\n sheetDrawingString += ' rot=\"' + (pic.rotation * 60000) + '\"';\n }\n if (pic.verticalFlip != undefined && pic.verticalFlip != false) {\n sheetDrawingString += ' flipV=\"1\"';\n }\n if (pic.horizontalFlip != undefined && pic.horizontalFlip != false) {\n sheetDrawingString += ' flipH=\"1\"';\n }\n sheetDrawingString += '/>';\n sheetDrawingString += '';\n sheetDrawingString += '';\n var imageFile = new BlobHelper();\n var imageData = this.convertBase64toImage(pic.image);\n this.imageCount += 1;\n this.addToArchive(imageData, 'xl/media/image' + this.imageCount + '.png');\n }\n drawings.append(sheetDrawingString);\n drawings.append('');\n this.saveDrawingRelations(sheet);\n this.addToArchive(drawings.getBlob(), 'xl/drawings/drawing' + this.drawingCount + '.xml');\n }\n };\n Workbook.prototype.updatelastRowOffset = function (sheet, picture) {\n var iCurHeight = picture.height;\n var iCurRow = picture.row;\n var iCurOffset = 0;\n while (iCurHeight >= 0) {\n var iRowHeight = 0;\n if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n iRowHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n else\n iRowHeight = this.convertToPixels(15);\n var iSpaceInCell = iRowHeight - (iCurOffset * iRowHeight / 256);\n if (iSpaceInCell > iCurHeight) {\n picture.lastRow = iCurRow;\n picture.lastRowOffset = iCurOffset + (iCurHeight * 256 / iRowHeight);\n var rowHiddenHeight = 0;\n if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n rowHiddenHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n else\n rowHiddenHeight = this.convertToPixels(15);\n picture.lastRowOffset = (rowHiddenHeight * picture.lastRowOffset) / 256;\n picture.lastRowOffset = Math.round(picture.lastRowOffset / this.unitsProportions[7]);\n break;\n }\n else {\n iCurHeight -= iSpaceInCell;\n iCurRow++;\n iCurOffset = 0;\n }\n }\n };\n Workbook.prototype.updatelastColumnOffSet = function (sheet, picture) {\n var iCurWidth = picture.width;\n var iCurCol = picture.column;\n var iCurOffset = 0;\n while (iCurWidth >= 0) {\n var iColWidth = 0;\n if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n iColWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n else\n iColWidth = this.ColumnWidthToPixels(8.43);\n var iSpaceInCell = iColWidth - (iCurOffset * iColWidth / 1024);\n if (iSpaceInCell > iCurWidth) {\n picture.lastColumn = iCurCol;\n picture.lastColOffset = iCurOffset + (iCurWidth * 1024 / iColWidth);\n var colHiddenWidth = 0;\n if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n colHiddenWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n else\n colHiddenWidth = this.ColumnWidthToPixels(8.43);\n picture.lastColOffset = (colHiddenWidth * picture.lastColOffset) / 1024;\n picture.lastColOffset = Math.round(picture.lastColOffset / this.unitsProportions[7]);\n break;\n }\n else {\n iCurWidth -= iSpaceInCell;\n iCurCol++;\n iCurOffset = 0;\n }\n }\n };\n Workbook.prototype.convertToPixels = function (value) {\n return value * this.unitsProportions[6];\n };\n Workbook.prototype.convertBase64toImage = function (img) {\n var byteStr = window.atob(img);\n var buffer = new ArrayBuffer(byteStr.length);\n var data = new Uint8Array(buffer);\n for (var i = 0; i < byteStr.length; i++) {\n data[i] = byteStr.charCodeAt(i);\n }\n var blob = new Blob([data], { type: 'image/png' });\n return blob;\n };\n Workbook.prototype.saveDrawingRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var drawingRelation = '';\n var length = sheet.images.length;\n var id = this.imageCount - sheet.images.length;\n for (var i = 1; i <= length; i++) {\n id++;\n /* tslint:disable-next-line:max-line-length */\n drawingRelation += '';\n }\n this.addToArchive((drawingRelation + ''), 'xl/drawings/_rels/drawing' + this.drawingCount + '.xml.rels');\n };\n Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n var dDigitWidth = 7;\n var val = (pixels > dDigitWidth + 5) ?\n this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n pixels / (dDigitWidth + 5);\n return (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n };\n Workbook.prototype.ColumnWidthToPixels = function (val) {\n var dDigitWidth = 7;\n var fileWidth = (val > 1) ?\n ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n return this.trunc(((256 * fileWidth + this.trunc(128 / dDigitWidth)) / 256) * dDigitWidth);\n };\n Workbook.prototype.trunc = function (x) {\n var n = x - x % 1;\n return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n };\n Workbook.prototype.pixelsToRowHeight = function (pixels) {\n return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n };\n Workbook.prototype.saveSheetRelations = function (sheet) {\n /* tslint:disable-next-line:max-line-length */\n var relStr = '';\n for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n var hLink = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n if (sheet.images != undefined && sheet.images.length > 0) {\n /* tslint:disable-next-line:max-line-length */\n relStr += '';\n }\n relStr += '';\n return relStr;\n };\n Workbook.prototype.saveSheetView = function (sheet) {\n var paneString = ' 0) {\n /* tslint:disable-next-line:max-line-length */\n var sstStart = '';\n var si = '';\n for (var i = 0; i < length; i++) {\n if (this.sharedString[i].indexOf('') !== 0) {\n si += '';\n si += this.processString(this.sharedString[i]);\n si += '';\n }\n else {\n si += '';\n si += this.sharedString[i];\n si += '';\n }\n }\n si += '';\n this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n }\n };\n Workbook.prototype.processString = function (value) {\n if (typeof value == \"string\") {\n if (value.indexOf('&') !== -1) {\n value = value.replace(/&/g, '&');\n }\n if (value.indexOf('<') !== -1) {\n value = value.replace(/') !== -1) {\n value = value.replace(/>/g, '>');\n }\n if (value.indexOf('\\v') !== -1) {\n value = value.replace(/\\v/g, '_x000B_');\n }\n }\n else if (typeof value == \"object\") {\n for (var i = 0; i < value.length; i++) {\n if (value[i].indexOf('&') !== -1) {\n value[i] = value[i].replace(/&/g, '&');\n }\n if (value[i].indexOf('<') !== -1) {\n value[i] = value[i].replace(/') !== -1) {\n value[i] = value[i].replace(/>/g, '>');\n }\n if (value[i].indexOf('\\v') !== -1) {\n value[i] = value[i].replace(/\\v/g, '_x000B_');\n }\n }\n }\n return value;\n };\n Workbook.prototype.saveStyles = function () {\n this.updateCellXfsStyleXfs();\n /* tslint:disable-next-line:max-line-length */\n var styleTemp = '';\n styleTemp += this.saveNumberFormats();\n styleTemp += this.saveFonts();\n styleTemp += this.saveFills();\n styleTemp += this.saveBorders();\n styleTemp += this.saveCellStyleXfs();\n styleTemp += this.saveCellXfs();\n styleTemp += this.saveCellStyles();\n this.addToArchive(styleTemp + '', 'xl/styles.xml');\n };\n Workbook.prototype.updateCellXfsStyleXfs = function () {\n for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n var style = _a[_i];\n var cellXfs = undefined;\n if (style.isGlobalStyle) {\n cellXfs = new CellStyleXfs();\n cellXfs.xfId = (style.index - 1);\n }\n else {\n cellXfs = new CellXfs();\n cellXfs.xfId = 0;\n }\n //Add font\n var compareFontResult = this.isNewFont(style);\n if (!compareFontResult.result) {\n var font = new Font();\n font.b = style.bold;\n font.i = style.italic;\n font.name = style.fontName;\n font.sz = style.fontSize;\n font.u = style.underline;\n font.strike = style.strikeThrough;\n font.color = ('FF' + style.fontColor.replace('#', ''));\n this.mFonts.push(font);\n cellXfs.fontId = this.mFonts.length - 1;\n }\n else {\n cellXfs.fontId = compareFontResult.index;\n }\n //Add fill\n if (style.backColor !== 'none') {\n var backColor = 'FF' + style.backColor.replace('#', '');\n if (this.mFills.has(backColor)) {\n var fillId = this.mFills.get(backColor);\n cellXfs.fillId = fillId;\n }\n else {\n var fillId = this.mFills.size + 2;\n this.mFills.set(backColor, fillId);\n cellXfs.fillId = (fillId);\n }\n }\n else {\n cellXfs.fillId = 0;\n }\n //Add border \n if (!this.isNewBorder(style)) {\n this.mBorders.push(style.borders);\n cellXfs.borderId = this.mBorders.length;\n }\n else {\n cellXfs.borderId = 0;\n }\n //Add Number Format \n if (style.numberFormat !== 'GENERAL') {\n if (this.mNumFmt.has(style.numberFormat)) {\n var numFmt = this.mNumFmt.get(style.numberFormat);\n cellXfs.numFmtId = numFmt.numFmtId;\n }\n else {\n var id = this.mNumFmt.size + 164;\n this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n cellXfs.numFmtId = id;\n }\n }\n else {\n if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n cellXfs.numFmtId = 14;\n }\n else {\n cellXfs.numFmtId = 0;\n }\n }\n //Add alignment \n if (!style.isGlobalStyle) {\n cellXfs.applyAlignment = 1;\n }\n cellXfs.alignment = new Alignment();\n cellXfs.alignment.indent = style.indent;\n cellXfs.alignment.horizontal = style.hAlign;\n cellXfs.alignment.vertical = style.vAlign;\n cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n cellXfs.alignment.rotation = style.rotation;\n if (style.isGlobalStyle) {\n this.mCellStyleXfs.push(cellXfs);\n this.mCellXfs.push(cellXfs);\n }\n else {\n //Add cellxfs\n this.mCellXfs.push(cellXfs);\n }\n }\n };\n Workbook.prototype.saveNumberFormats = function () {\n if (this.mNumFmt.size >= 1) {\n var numFmtStyle_1 = '';\n this.mNumFmt.forEach(function (value, key) {\n numFmtStyle_1 += '';\n });\n return (numFmtStyle_1 += '');\n }\n else {\n return '';\n }\n };\n Workbook.prototype.saveFonts = function () {\n /* tslint:disable-next-line:max-line-length */\n var fontStyle = '';\n if (this.mFonts.length >= 1) {\n for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n var font = _a[_i];\n fontStyle += '';\n if (font.b) {\n fontStyle += '';\n }\n if (font.i) {\n fontStyle += '';\n }\n if (font.u) {\n fontStyle += '';\n }\n if (font.strike) {\n fontStyle += '';\n }\n fontStyle += '';\n fontStyle += '';\n fontStyle += '';\n }\n }\n return fontStyle + '';\n };\n Workbook.prototype.saveFills = function () {\n /* tslint:disable-next-line:max-line-length */\n var fillsStyle = '';\n if (this.mFills.size >= 1) {\n this.mFills.forEach(function (value, key) {\n /* tslint:disable-next-line:max-line-length */\n fillsStyle += '';\n });\n }\n return fillsStyle + '';\n };\n Workbook.prototype.saveBorders = function () {\n /* tslint:disable-next-line:max-line-length */\n var bordersStyle = '';\n if (this.mBorders.length >= 1) {\n for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n var borders = _a[_i];\n if (this.isAllBorder(borders)) {\n var color = borders.all.color.replace('#', '');\n var lineStyle = borders.all.lineStyle;\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n else {\n /* tslint:disable-next-line:max-line-length */\n bordersStyle += '';\n }\n }\n }\n return bordersStyle + '';\n };\n Workbook.prototype.saveCellStyles = function () {\n var _this = this;\n var cellStyleString = '';\n this.cellStyles.forEach(function (value, key) {\n cellStyleString += '';\n if (this.mCellStyleXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n var cellStyleXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n else {\n cellXfsStyle += ' />';\n }\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveCellXfs = function () {\n /* tslint:disable-next-line:max-line-length */\n var cellXfsStyle = '';\n if (this.mCellXfs.length >= 1) {\n for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n var cellXf = _a[_i];\n /* tslint:disable-next-line:max-line-length */\n cellXfsStyle += '';\n }\n }\n return cellXfsStyle + '';\n };\n Workbook.prototype.saveAlignment = function (cellXf) {\n var alignString = '';\n return alignString;\n };\n Workbook.prototype.saveApp = function (builtInProperties) {\n /* tslint:disable-next-line:max-line-length */\n var appString = 'Essential XlsIO';\n if (builtInProperties !== undefined) {\n if (builtInProperties.manager !== undefined) {\n appString += '' + builtInProperties.manager + '';\n }\n if (builtInProperties.company !== undefined) {\n appString += '' + builtInProperties.company + '';\n }\n }\n this.addToArchive((appString + ''), 'docProps/app.xml');\n };\n Workbook.prototype.saveCore = function (builtInProperties) {\n var createdDate = new Date();\n /* tslint:disable-next-line:max-line-length */\n var coreString = '';\n if (this.builtInProperties !== undefined) {\n if (builtInProperties.author !== undefined) {\n coreString += '' + builtInProperties.author + '';\n }\n if (builtInProperties.subject !== undefined) {\n coreString += '' + builtInProperties.subject + '';\n }\n if (builtInProperties.category !== undefined) {\n coreString += '' + builtInProperties.category + '';\n }\n if (builtInProperties.comments !== undefined) {\n coreString += '' + builtInProperties.comments + '';\n }\n if (builtInProperties.title !== undefined) {\n coreString += '' + builtInProperties.title + '';\n }\n if (builtInProperties.tags !== undefined) {\n coreString += '' + builtInProperties.tags + '';\n }\n if (builtInProperties.status !== undefined) {\n coreString += '' + builtInProperties.status + '';\n }\n if (builtInProperties.createdDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.createdDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n if (builtInProperties.modifiedDate !== undefined) {\n /* tslint:disable-next-line:max-line-length */\n coreString += '' + builtInProperties.modifiedDate.toISOString() + '';\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n }\n }\n else {\n coreString += '' + createdDate.toISOString() + '';\n coreString += '' + createdDate.toISOString() + '';\n }\n /* tslint:disable-next-line:max-line-length */\n coreString += '';\n this.addToArchive(coreString, 'docProps/core.xml');\n };\n Workbook.prototype.saveTopLevelRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var topRelation = '';\n this.addToArchive(topRelation, '_rels/.rels');\n };\n Workbook.prototype.saveWorkbookRelation = function () {\n /* tslint:disable-next-line:max-line-length */\n var wbRelation = '';\n var length = this.worksheets.length;\n var count = 0;\n for (var i = 0; i < length; i++, count++) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n wbRelation += '';\n }\n this.addToArchive((wbRelation + ''), 'xl/_rels/workbook.xml.rels');\n };\n Workbook.prototype.saveContentType = function () {\n /* tslint:disable-next-line:max-line-length */\n var contentTypeString = '';\n var sheetsOverride = '';\n var length = this.worksheets.length;\n var drawingIndex = 0;\n for (var i = 0; i < length; i++) {\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n if (this.worksheets[i].images != undefined && this.worksheets[i].images.length > 0) {\n drawingIndex++;\n /* tslint:disable-next-line:max-line-length */\n sheetsOverride += '';\n }\n }\n if (this.imageCount > 0)\n sheetsOverride += '';\n if (this.sharedStringCount > 0) {\n /* tslint:disable-next-line:max-line-length */\n contentTypeString += '';\n }\n this.addToArchive((contentTypeString + sheetsOverride + ''), '[Content_Types].xml');\n };\n Workbook.prototype.addToArchive = function (xmlString, itemName) {\n if (typeof (xmlString) === 'string') {\n var blob = new Blob([xmlString], { type: 'text/plain' });\n var archiveItem = new ZipArchiveItem(blob, itemName);\n this.mArchive.addItem(archiveItem);\n }\n else {\n var archiveItem = new ZipArchiveItem(xmlString, itemName);\n this.mArchive.addItem(archiveItem);\n }\n };\n Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n var mCell = new MergeCell();\n mCell.x = cell.index;\n mCell.width = cell.colSpan;\n mCell.y = rowIndex;\n mCell.height = cell.rowSpan;\n var startCell = this.getCellName(mCell.y, mCell.x);\n var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n mCell.ref = startCell + ':' + endCell;\n var mergedCell = mergeCells.add(mCell);\n var start = { x: mCell.x, y: mCell.y };\n var end = {\n x: (cell.index + mCell.width), y: (rowIndex + mCell.height)\n };\n this.updatedMergedCellStyles(start, end, cell);\n }\n return mergeCells;\n };\n Workbook.prototype.updatedMergedCellStyles = function (sCell, eCell, cell) {\n for (var x = sCell.x; x <= eCell.x; x++) {\n for (var y = sCell.y; y <= eCell.y; y++) {\n this.mergedCellsStyle.set(this.getCellName(y, x), { x: x, y: y, styleIndex: cell.styleIndex });\n }\n }\n };\n /**\n * Returns the tick count corresponding to the given year, month, and day.\n * @param year number value of year\n * @param month number value of month\n * @param day number value of day\n */\n Workbook.prototype.dateToTicks = function (year, month, day) {\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n var y = year - 1;\n var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n return n * ticksPerDay;\n }\n throw new Error('Not a valid date');\n };\n /**\n * Return the tick count corresponding to the given hour, minute, second.\n * @param hour number value of hour\n * @param minute number value if minute\n * @param second number value of second\n */\n Workbook.prototype.timeToTicks = function (hour, minute, second) {\n if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n var totalSeconds = hour * 3600 + minute * 60 + second;\n return totalSeconds * 10000 * 1000;\n }\n throw new Error('Not valid time');\n };\n /**\n * Checks if given year is a leap year.\n * @param year Year value.\n */\n Workbook.prototype.isLeapYear = function (year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n };\n /**\n * Converts `DateTime` to the equivalent OLE Automation date.\n */\n Workbook.prototype.toOADate = function (date) {\n var ticks = 0;\n /* tslint:disable-next-line:max-line-length */\n ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n if (ticks === 0) {\n return 0.0;\n }\n var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n var doubleDateOffset = daysTo1899 * ticksPerDay;\n var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n if (ticks < oaDateMinAsTicks) {\n throw new Error('Arg_OleAutDateInvalid');\n }\n var millisPerDay = 1000 * 60 * 60 * 24;\n return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n };\n return Workbook;\n}());\nexport { Workbook };\n/**\n * BuiltInProperties Class\n * @private\n */\nvar BuiltInProperties = /** @class */ (function () {\n function BuiltInProperties() {\n }\n return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","import { ExportUtils } from '../../common/utils/export';\nimport { beforeExport } from '../../common/model/constants';\nimport { Workbook } from '@syncfusion/ej2-excel-export';\n/**\n * `ExportModule` module is used to print and export the rendered chart.\n */\nvar Export = /** @class */ (function () {\n /**\n * Constructor for export module.\n *\n * @private\n */\n function Export(chart) {\n this.actualRowCount = 0;\n this.series = [];\n this.axisCollection = [];\n this.requiredValuesLength = 0;\n this.histogramSeriesCount = 0;\n this.chart = chart;\n }\n /**\n * Exports the chart or charts to the specified file format.\n *\n * @param {ExportType} type - The type of export (e.g., 'PNG', 'JPEG', 'PDF', etc.).\n * @param {string} fileName - The name of the file to save.\n * @param {PdfPageOrientation} [orientation] - The orientation of the PDF page. Defaults to 'Portrait'.\n * @param {(Chart | AccumulationChart | RangeNavigator | StockChart)[]} [controls] - An array of chart or chart-like components to export.\n * @param {number} [width] - The width of the exported image or PDF page.\n * @param {number} [height] - The height of the exported image or PDF page.\n * @param {boolean} [isVertical] - Specifies whether to export the chart vertically. Defaults to false.\n * @param {IPDFArgs} [header] - The header options for the PDF.\n * @param {IPDFArgs} [footer] - The footer options for the PDF.\n * @param {boolean} [exportToMultiplePage] - Specifies whether to export the charts to multiple pages in PDF. Defaults to false.\n * @returns {void}\n * @public\n */\n Export.prototype.export = function (type, fileName, orientation, controls, width, height, isVertical, header, footer, exportToMultiplePage) {\n var exportChart = new ExportUtils(this.chart);\n controls = controls ? controls : [this.chart];\n var argsData = {\n cancel: false, name: beforeExport, width: width, height: height\n };\n this.chart.trigger(beforeExport, argsData);\n if (!argsData.cancel) {\n if (type === 'CSV' || type === 'XLSX') {\n this.excelExport(controls, fileName, type);\n }\n else {\n exportChart.export(type, fileName, orientation, controls, width = argsData.width, height = argsData.height, isVertical, header, footer, exportToMultiplePage);\n }\n }\n };\n /**\n * Exports the specified chart or charts to Excel format.\n *\n * @param {(Chart | AccumulationChart | RangeNavigator | StockChart)[]} controls - An array of chart or chart-like components to export.\n * @param {string} fileName - The name of the Excel file to save.\n * @param {ExportType} type - The type of export (e.g., 'XLSX', 'CSV', etc.).\n * @returns {void}\n * @private\n */\n Export.prototype.excelExport = function (controls, fileName, type) {\n this.rows = [];\n this.actualRowCount = 1;\n var workSheets = [];\n var requiredValues = [];\n var headerStyle = { bold: true, hAlign: 'Center', vAlign: 'Center', wrapText: true };\n var xValues = [];\n var isRangeNavigator = controls[0].getModuleName() === 'rangeNavigator';\n var isAccumulation = controls[0].getModuleName() === 'accumulationchart';\n this.series = isRangeNavigator ? controls[0].series : controls[0].visibleSeries;\n if (isRangeNavigator && this.series.length === 0) {\n if (controls[0].dataSource) {\n //To create an Excel sheet when the Rangenavigator series is not given.\n this.createRangeNavigatorExcelSheet(controls[0], headerStyle, type);\n }\n }\n else {\n this.histogramSeriesCount = 0;\n this.requiredValuesLength = 0;\n this.axisCollection = [];\n if (isAccumulation || isRangeNavigator) {\n this.axisCollection.push(null);\n }\n else {\n this.axisCollection = controls[0].getModuleName() === 'stockChart' ? controls[0].chart.horizontalAxes : controls[0].horizontalAxes;\n }\n //To get the number of columns for the excel.\n requiredValues = this.getRequiredValues(isRangeNavigator);\n if (this.requiredValuesLength === 0 && this.series.length === this.histogramSeriesCount) {\n return;\n }\n //To get all x values in the series.\n xValues = this.getXValue(requiredValues, controls, isRangeNavigator, isAccumulation);\n //To get the the chart title and series name.\n this.getTitle(requiredValues, headerStyle, controls, isRangeNavigator, isAccumulation, type, xValues[0].length);\n //To create an Excel sheet.\n this.createExcelSheet(isRangeNavigator, isAccumulation, xValues, type, requiredValues, headerStyle, controls);\n }\n var columns = [];\n this.requiredValuesLength = this.requiredValuesLength === 0 ? 1 : this.requiredValuesLength;\n for (var columnCount = 0; columnCount < this.requiredValuesLength; columnCount++) {\n columns.push({ index: columnCount + 1, width: 100 });\n }\n workSheets.push({ columns: columns, rows: this.rows });\n var book = new Workbook({ worksheets: workSheets }, type === 'XLSX' ? 'xlsx' : 'csv');\n fileName = fileName ? fileName : type === 'XLSX' ? 'XLSX' : 'CSV';\n book.save(fileName + (type === 'XLSX' ? '.xlsx' : '.csv'));\n };\n /**\n * Creates an Excel sheet for exporting RangeNavigator control data.\n *\n * @param {RangeNavigator} controls - The RangeNavigator control to export.\n * @param {ExcelCellStyle} headerStyle - The style to apply to the header cells in the Excel sheet.\n * @param {ExportType} type - The type of export (e.g., 'XLSX', 'CSV', etc.).\n * @returns {void}\n * @private\n */\n Export.prototype.createRangeNavigatorExcelSheet = function (controls, headerStyle, type) {\n var xName = controls.xName;\n var yName = controls.yName;\n this.rows.push({\n index: this.actualRowCount, cells: [{ index: 1, value: controls.valueType.indexOf('DateTime') > -1 ? controls.valueType : 'Category', colSpan: 1, rowSpan: 1,\n style: headerStyle },\n { index: 2, value: yName, colSpan: 1, rowSpan: 1, style: headerStyle }]\n });\n this.actualRowCount++;\n var dataSource = controls.dataSource;\n for (var dataCount = 0; dataCount < dataSource.length; dataCount++) {\n this.rows.push({ index: this.actualRowCount, cells: [{ index: 1, value: (type === 'CSV' && dataSource[dataCount][xName] === null) ? '' :\n dataSource[dataCount][xName], colSpan: 1, rowSpan: 1, style: headerStyle },\n { index: 2, value: (type === 'CSV' && dataSource[dataCount][yName] === null) ? '' : dataSource[dataCount][yName], colSpan: 1, rowSpan: 1, style: {} }] });\n this.actualRowCount++;\n }\n this.requiredValuesLength = 2;\n };\n /**\n * Gets the number of columns for the Excel sheet.\n *\n * @param {boolean} isRangeNavigator - Specifies whether the data is for a RangeNavigator control.\n * @returns {string[][]} - An array containing the required values for the Excel sheet.\n * @private\n */\n Export.prototype.getRequiredValues = function (isRangeNavigator) {\n var requiredValues = [];\n var _loop_1 = function (seriesCount) {\n var seriesType = this_1.series[seriesCount].type;\n if ((!isRangeNavigator && !this_1.series[seriesCount].visible) || this_1.series[seriesCount].category === 'TrendLine') {\n requiredValues.push([]);\n return \"continue\";\n }\n if (seriesType === 'Histogram') {\n requiredValues.push([]);\n this_1.histogramSeriesCount++;\n }\n else if (this_1.series[seriesCount].category === 'Pareto') {\n requiredValues.push([this_1.series[seriesCount]['xName'], 'y']);\n }\n else if (seriesType.indexOf('Range') !== -1 || seriesType === 'Hilo') {\n requiredValues.push([this_1.series[seriesCount]['xName'], this_1.series[seriesCount]['high'], this_1.series[seriesCount]['low']]);\n }\n else if (seriesType === 'HiloOpenClose' || seriesType === 'Candle') {\n requiredValues.push([this_1.series[seriesCount]['xName'], this_1.series[seriesCount]['high'], this_1.series[seriesCount]['low'], this_1.series[seriesCount]['open'], this_1.series[seriesCount]['close']]);\n if (seriesType === 'Candle' && this_1.series[seriesCount]['volume'] !== '') {\n requiredValues[seriesCount].push(this_1.series[seriesCount]['volume']);\n }\n }\n else if (seriesType === 'BoxAndWhisker') {\n requiredValues.push([this_1.series[seriesCount]['xName'], 'maximum', 'upperQuartile', 'median', 'lowerQuartile', 'minimum', 'outliers']);\n }\n else if (seriesType === 'Bubble') {\n requiredValues.push([this_1.series[seriesCount]['xName'], this_1.series[seriesCount]['yName']]);\n if (this_1.series[seriesCount]['size'] !== '') {\n requiredValues[seriesCount].push(this_1.series[seriesCount]['size']);\n }\n }\n else if (seriesType === 'Pie') {\n requiredValues.push([this_1.series[seriesCount]['xName'], this_1.series[seriesCount]['yName']]);\n if (this_1.series[seriesCount]['radius'].match(/[a-zA-Z]/)) {\n requiredValues[seriesCount].push(this_1.series[seriesCount]['radius']);\n }\n }\n else {\n requiredValues.push([this_1.series[seriesCount]['xName'], this_1.series[seriesCount]['yName']]);\n }\n if (this_1.series[seriesCount].errorBar &&\n this_1.series[seriesCount].errorBar.visible) {\n var errorBar_1 = this_1.series[seriesCount].errorBar;\n var errorTypes = ['verticalError', 'horizontalError', 'verticalNegativeError', 'horizontalNegativeError', 'verticalPositiveError', 'horizontalPositiveError'];\n errorTypes.forEach(function (errorType) {\n if (typeof errorBar_1[errorType] === 'string') {\n requiredValues[seriesCount].push(errorBar_1[errorType]);\n }\n });\n }\n this_1.requiredValuesLength += requiredValues[seriesCount].length;\n };\n var this_1 = this;\n for (var seriesCount = 0; seriesCount < this.series.length; seriesCount++) {\n _loop_1(seriesCount);\n }\n return requiredValues;\n };\n /**\n * Gets the title for the Excel sheet.\n *\n * @param {string[][]} requiredValues - The required values for the Excel sheet.\n * @param {ExcelCellStyle} headerStyle - The style for the header.\n * @param {(Chart | AccumulationChart | RangeNavigator | StockChart)[]} controls - The controls to export.\n * @param {boolean} isRangeNavigator - Specifies whether the data is for a RangeNavigator control.\n * @param {boolean} isAccumulation - Specifies whether the data is for an AccumulationChart.\n * @param {ExportType} type - The type of export.\n * @param {number} xValueLength - The length of X values.\n * @returns {void}\n * @private\n */\n Export.prototype.getTitle = function (requiredValues, headerStyle, controls, isRangeNavigator, isAccumulation, type, xValueLength) {\n var cells = [];\n var additionalCells = [];\n var index = 1;\n var isTitle = false;\n if (!isRangeNavigator && type === 'XLSX' && controls[0].title) {\n this.rows.push({});\n this.actualRowCount++;\n isTitle = true;\n }\n for (var axisCount = 0; axisCount < this.axisCollection.length; axisCount++) {\n if (isAccumulation && xValueLength === 0) {\n break;\n }\n var isYName = false;\n var valueType = '';\n var currentIndex = index;\n var isXValue = false;\n for (var seriesCount = 0; seriesCount < this.series.length; seriesCount++) {\n var axisName = this.axisCollection[axisCount] !== null ? (this.axisCollection[axisCount].name === 'primaryXAxis' || (this.axisCollection[axisCount].name === 'primaryYAxis' && this.series[seriesCount].type.indexOf('Bar') > -1)) ? null : this.axisCollection[axisCount].name : '';\n if (!isRangeNavigator && ((!isAccumulation && (axisName !==\n this.series[seriesCount].xAxisName)) ||\n !this.series[seriesCount].visible ||\n this.series[seriesCount].category === 'TrendLine' || this.series[seriesCount].type === 'Histogram')) {\n continue;\n }\n if (!isXValue) {\n cells.push({});\n index++;\n }\n isXValue = true;\n var seriesName = this.series[seriesCount].name;\n var requiredValuesLength = this.series[seriesCount].type === 'BoxAndWhisker' ? requiredValues[seriesCount].length - 1 : requiredValues[seriesCount].length;\n if (requiredValues[seriesCount][1] === this.series[seriesCount].yName) {\n for (var requiredValuesCount = 1; requiredValuesCount < requiredValuesLength; requiredValuesCount++) {\n cells.push({ index: index, value: (requiredValuesCount === 1 ? seriesName ? seriesName : 'Series-' + (seriesCount + 1) : requiredValues[seriesCount][requiredValuesCount]), colSpan: 1, rowSpan: 1, style: headerStyle });\n index++;\n }\n }\n else {\n cells.push({ index: index, value: seriesName ? seriesName : 'Series-' + (seriesCount + 1), colSpan: requiredValuesLength - 1, rowSpan: 1, style: headerStyle });\n var localIndex = index;\n for (var requiredValuesCount = 1; requiredValuesCount < requiredValuesLength; requiredValuesCount++) {\n additionalCells.push({\n index: localIndex, value: requiredValues[seriesCount][requiredValuesCount],\n colSpan: 1, rowSpan: 1, style: headerStyle\n });\n localIndex++;\n }\n if (this.series[seriesCount].type === 'BoxAndWhisker') {\n cells.push({ index: localIndex, value: requiredValues[seriesCount][requiredValuesLength],\n colSpan: 1, rowSpan: 2, style: headerStyle\n });\n localIndex++;\n }\n index = localIndex;\n isYName = true;\n }\n valueType = isAccumulation ? requiredValues[0][0] : isRangeNavigator ? controls[0].valueType :\n this.axisCollection[axisCount].valueType;\n valueType = (isAccumulation || valueType.indexOf('DateTime') > -1) ? valueType : 'Category';\n }\n if (isXValue) {\n cells[(currentIndex - 1)] = { index: currentIndex, value: valueType, colSpan: 1,\n rowSpan: isYName ? 2 : 1, style: headerStyle };\n }\n }\n if (cells.length) {\n this.rows.push({ index: this.actualRowCount, cells: cells });\n this.actualRowCount++;\n }\n if (additionalCells.length) {\n this.rows.push({ index: this.actualRowCount, cells: additionalCells });\n this.actualRowCount++;\n }\n if (isTitle) {\n cells = [];\n cells.push({ index: 1, value: controls[0].title,\n colSpan: (index === 1 ? index : index - 1), rowSpan: 1, style: headerStyle });\n this.rows[0] = ({ index: 1, cells: cells });\n }\n this.requiredValuesLength = index - 1;\n };\n /**\n * Gets the X values for the Excel sheet.\n *\n * @param {string[][]} requiredValues - The required values for the Excel sheet.\n * @param {(Chart | AccumulationChart | RangeNavigator | StockChart)[]} controls - The controls to export.\n * @param {boolean} isRangeNavigator - Specifies whether the data is for a RangeNavigator control.\n * @param {boolean} isAccumulation - Specifies whether the data is for an AccumulationChart.\n * @returns {number[][]} - The X values.\n * @private\n */\n Export.prototype.getXValue = function (requiredValues, controls, isRangeNavigator, isAccumulation) {\n var xValues = [];\n for (var axisCount = 0; axisCount < this.axisCollection.length; axisCount++) {\n var xValue = [];\n var valueType = isAccumulation ? '' : isRangeNavigator ? controls[0].valueType : this.axisCollection[axisCount].valueType;\n for (var seriesCount = 0; seriesCount < this.series.length; seriesCount++) {\n var axisName = this.axisCollection[axisCount] !== null ? (this.axisCollection[axisCount].name === 'primaryXAxis' || (this.axisCollection[axisCount].name === 'primaryYAxis' && this.series[seriesCount].type.indexOf('Bar') > -1)) ? null : this.axisCollection[axisCount].name : '';\n if ((!isRangeNavigator && ((!isAccumulation && (axisName !==\n this.series[seriesCount].xAxisName)) ||\n !this.series[seriesCount].visible) ||\n this.series[seriesCount].category === 'TrendLine' || this.series[seriesCount].type === 'Histogram')) {\n continue;\n }\n for (var dataCount = 0; dataCount < this.series[seriesCount].dataSource.length; dataCount++) {\n if (isAccumulation && !this.series[seriesCount].points[dataCount].visible) {\n continue;\n }\n xValue.push((valueType.indexOf('DateTime') > -1) ? new Date(this.series[seriesCount].\n dataSource[dataCount][requiredValues[seriesCount][0]]).getTime() :\n this.series[seriesCount].dataSource[dataCount][requiredValues[seriesCount][0]]);\n }\n }\n xValues.push(xValue);\n }\n var _loop_2 = function (xValuesLength) {\n xValues[xValuesLength] = xValues[xValuesLength].filter(function (item, index) {\n return xValues[xValuesLength].indexOf(item) === index;\n });\n };\n for (var xValuesLength = 0; xValuesLength < xValues.length; xValuesLength++) {\n _loop_2(xValuesLength);\n }\n return (xValues);\n };\n /**\n * Creates an Excel sheet.\n *\n * @param {boolean} isRangeNavigator - Specifies whether the data is for a RangeNavigator control.\n * @param {boolean} isAccumulation - Specifies whether the data is for an AccumulationChart.\n * @param {number[][]} xValues - The X values for the Excel sheet.\n * @param {ExportType} type - The type of export.\n * @param {string[][]} requiredValues - The required values for the Excel sheet.\n * @param {ExcelCellStyle} headerStyle - The style for the header in Excel.\n * @param {(Chart | AccumulationChart | RangeNavigator | StockChart)[]} controls - The controls to export.\n * @private\n */\n Export.prototype.createExcelSheet = function (isRangeNavigator, isAccumulation, xValues, type, requiredValues, headerStyle, controls) {\n var startIndex = 0;\n var index = 0;\n for (var axisCount = 0; axisCount < this.axisCollection.length; axisCount++) {\n var valueType = isAccumulation ? '' : isRangeNavigator ? controls[0].valueType : this.axisCollection[axisCount].valueType;\n for (var xValueLength = 0; xValueLength < xValues[axisCount].length; xValueLength++) {\n index = startIndex ? startIndex : 1;\n var cells = [];\n var isXValue = true;\n for (var seriesCount = 0; seriesCount < this.series.length; seriesCount++) {\n var axisName = this.axisCollection[axisCount] !== null ? (this.axisCollection[axisCount].name === 'primaryXAxis' || (this.axisCollection[axisCount].name === 'primaryYAxis' && this.series[seriesCount].type.indexOf('Bar') > -1)) ? null : this.axisCollection[axisCount].name : '';\n if ((!isRangeNavigator && ((!isAccumulation &&\n this.series[seriesCount].xAxisName !== axisName) ||\n !this.series[seriesCount].visible) ||\n this.series[seriesCount].category === 'TrendLine' || this.series[seriesCount].type === 'Histogram')) {\n continue;\n }\n var isExist = false;\n var dataSource = this.series[seriesCount].dataSource;\n for (var dataCount = 0; dataCount < dataSource.length; dataCount++) {\n var xValue = (valueType.indexOf('DateTime') > -1) ? this.series[seriesCount].category === 'Pareto' ? new Date(this.series[seriesCount].points[dataCount][requiredValues[seriesCount][0]]).getTime() :\n new Date(dataSource[dataCount][requiredValues[seriesCount][0]]).getTime() :\n this.series[seriesCount].category === 'Pareto' ? this.series[seriesCount].points[dataCount][requiredValues[seriesCount][0]] : dataSource[dataCount][requiredValues[seriesCount][0]];\n if (xValues[axisCount][xValueLength] === xValue) {\n var usedValueCount = isXValue ? 0 : 1;\n var usedValueLength = this.series[seriesCount].type === 'BoxAndWhisker' ? requiredValues[seriesCount].length - 1 : requiredValues[seriesCount].length;\n for (; usedValueCount < usedValueLength; usedValueCount++) {\n var value = (usedValueCount !== 0 && (this.series[seriesCount].type === 'BoxAndWhisker' || this.series[seriesCount].category === 'Pareto')) ? this.series[seriesCount].points[dataCount][requiredValues[seriesCount][usedValueCount]] : dataSource[dataCount][requiredValues[seriesCount][usedValueCount]];\n if (value === null && type === 'CSV') {\n value = '';\n }\n cells.push({\n index: (usedValueCount === 0 ? startIndex === 0 ? 1 : startIndex : index), value: value,\n colSpan: 1, rowSpan: 1, style: usedValueCount === 0 ? headerStyle : {}\n });\n index++;\n }\n if (this.series[seriesCount].type === 'BoxAndWhisker') {\n cells.push({ index: index, value: this.series[seriesCount].points[dataCount]['outliers'][0], colSpan: 1, rowSpan: 1, style: {} });\n index++;\n }\n isXValue = false;\n isExist = true;\n break;\n }\n }\n if (!isExist) {\n index += (requiredValues[seriesCount].length - 1);\n }\n }\n this.rows.push({ index: this.actualRowCount, cells: cells });\n this.actualRowCount++;\n }\n startIndex = index;\n }\n };\n /**\n * Gets the data URL of the chart or accumulation chart.\n *\n * @param {Chart | AccumulationChart} chart - The chart or accumulation chart.\n * @returns {{ element: HTMLCanvasElement, dataUrl?: string, blobUrl?: string}} - The data URL information.\n */\n Export.prototype.getDataUrl = function (chart) {\n var exportUtil = new ExportUtils(chart);\n return exportUtil.getDataUrl(chart);\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n Export.prototype.getModuleName = function () {\n // Returns the module name\n return 'Export';\n };\n /**\n * To destroy the chart.\n *\n * @returns {void}\n * @private\n */\n Export.prototype.destroy = function () {\n // Destroy method performed here\n };\n return Export;\n}());\nexport { Export };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/**\n * AccumulationChart file\n */\nimport { Property, Component, Complex, Collection, NotifyPropertyChanges, animationMode } from '@syncfusion/ej2-base';\nimport { Internationalization, Event, Browser, EventHandler, Touch } from '@syncfusion/ej2-base';\nimport { remove, extend, isNullOrUndefined, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { Font, Margin, Border, TooltipSettings, Indexes, CenterLabel } from '../common/model/base';\nimport { AccumulationSeries, PieCenter } from './model/acc-base';\nimport { getThemeColor } from '../common/model/theme';\nimport { load, pointClick } from '../common/model/constants';\nimport { pointMove, chartDoubleClick, chartMouseClick, chartMouseDown } from '../common/model/constants';\nimport { chartMouseLeave, chartMouseMove, chartMouseUp, resized, beforeResize } from '../common/model/constants';\nimport { LegendSettings } from '../common/legend/legend';\nimport { subtractRect, indexFinder, appendChildElement, redrawElement, blazorTemplatesReset, getTextAnchor, stringToNumber, textWrap } from '../common/utils/helper';\nimport { RectOption, showTooltip, ImageOption } from '../common/utils/helper';\nimport { textElement, createSvg, calculateSize, removeElement, firstToLowerCase, withInBounds } from '../common/utils/helper';\nimport { getElement, titlePositionX } from '../common/utils/helper';\nimport { Rect, Size, measureText, TextOption } from '@syncfusion/ej2-svg-base';\nimport { Data } from '../common/model/data';\nimport { AccumulationBase } from './renderer/accumulation-base';\nimport { PieSeries } from './renderer/pie-series';\nimport { AccumulationAnnotationSettings } from './model/acc-base';\nimport { getTitle, AccPointData } from '../common/utils/helper';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { PrintUtils } from '../common/utils/print';\n/**\n * Represents the AccumulationChart control.\n * ```html\n *
\n * \n * ```\n *\n * @public\n */\nvar AccumulationChart = /** @class */ (function (_super) {\n __extends(AccumulationChart, _super);\n /**\n * Constructor for creating the AccumulationChart widget.\n *\n * @private\n * @param {AccumulationChartModel} options - Specifies the accumulation chart model.\n * @param {string | HTMLElement} element - Specifies the element for the accumulation chart.\n */\n function AccumulationChart(options, element) {\n var _this = _super.call(this, options, element) || this;\n /** @private */\n _this.animateselected = false;\n /** @private */\n _this.explodeDistance = 0;\n /** @private */\n _this.currentLegendIndex = 0;\n /** @private */\n _this.currentPointIndex = 0;\n /** @private */\n _this.previousTargetId = '';\n /** @private */\n _this.isLegendClicked = false;\n _this.chartid = 57724;\n return _this;\n }\n /**\n * Animate the series bounds on data change.\n *\n * @private\n * @param {number} duration - The duration of the animation.\n * @returns {void}\n */\n AccumulationChart.prototype.animate = function (duration) {\n this.duration = (duration === 0 && animationMode === 'Enable') ? 700 : duration;\n this.animateselected = true;\n this.animateSeries = false;\n var temIndex = 0;\n var tempcolor = [];\n var tempindex = [];\n var tempindex1 = [];\n var currentSeries = this.visibleSeries[0];\n var datasource = [];\n datasource = currentSeries.dataSource;\n currentSeries.sumOfPoints = 0;\n if (currentSeries.points.length < Object.keys(currentSeries.dataSource).length) {\n this.refresh();\n }\n else if (currentSeries.points.length > Object.keys(currentSeries.dataSource).length) {\n var currentSeries_1 = this.visibleSeries[0];\n currentSeries_1.points = currentSeries_1.points.filter(function (entry1) {\n entry1.visible = false;\n tempindex.push(entry1.index);\n tempcolor.push(entry1.color);\n return (datasource).some(function (entry2) {\n var accPoint = entry2;\n if (entry1.x === accPoint.x) {\n entry1.visible = true;\n tempindex1.push(entry1.index);\n entry1.index = temIndex;\n temIndex++;\n }\n return entry1.x === accPoint.x;\n });\n });\n var missing = tempindex.filter(function (item) { return tempindex1.indexOf(item) < 0; });\n var interval = tempindex.length - missing.length;\n for (var i = (tempindex.length - 1); i >= interval; i--) {\n removeElement('container_Series_0_Point_' + tempindex[i]);\n }\n for (var i = 0; i < currentSeries_1.points.length; i++) {\n currentSeries_1.points[i].y = currentSeries_1.dataSource[i].y;\n currentSeries_1.points[i].color = tempcolor[i];\n currentSeries_1.sumOfPoints += currentSeries_1.dataSource[i].y;\n }\n this.redraw = this.enableAnimation;\n this.animateSeries = false;\n this.calculateBounds();\n this.renderElements();\n }\n else {\n for (var i = 0; i < currentSeries.points.length; i++) {\n currentSeries.points[i].y = currentSeries.dataSource[i][currentSeries.yName];\n currentSeries.points[i].color = currentSeries.dataSource[i][currentSeries.pointColorMapping] != null\n ? currentSeries.dataSource[i][currentSeries.pointColorMapping] : currentSeries.points[i].color;\n currentSeries.sumOfPoints += currentSeries.dataSource[i][currentSeries.yName];\n }\n this.redraw = this.enableAnimation;\n this.animateSeries = false;\n this.removeSvg();\n this.refreshPoints(currentSeries.points);\n this.renderElements();\n }\n };\n Object.defineProperty(AccumulationChart.prototype, \"type\", {\n /**\n * Gets the type of accumulation chart.\n *\n * @returns {AccumulationType} - The type of accumulation chart.\n * @private\n * */\n get: function () {\n if (this.series && this.series.length) {\n return this.series[0].type;\n }\n return 'Pie';\n },\n enumerable: true,\n configurable: true\n });\n // accumulation chart methods.\n /**\n * To create svg object, renderer and binding events for the container.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.preRender = function () {\n var blazor = 'Blazor';\n this.isBlazor = window[blazor];\n this.allowServerDataBinding = false;\n this.unWireEvents();\n this.setCulture();\n this.animateSeries = true;\n if (this.element.id === '') {\n var collection = document.getElementsByClassName('e-accumulationchart').length;\n this.element.id = 'acc_chart_' + this.chartid + '_' + collection;\n }\n this.wireEvents();\n this.element.setAttribute('dir', this.enableRtl ? 'rtl' : 'ltr');\n };\n /**\n * Themeing for chart goes here.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.setTheme = function () {\n /** Set theme for accumulation chart */\n this.themeStyle = getThemeColor(this.theme, false, this);\n };\n /**\n * To render the accumulation chart elements.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.render = function () {\n var _this = this;\n if (this.element.className.indexOf('e-accumulationchart') === -1) {\n this.element.classList.add('e-accumulationchart');\n }\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('tabindex', '0');\n this.element.setAttribute('aria-label', this.title + '. Syncfusion interactive chart.');\n this.element.setAttribute('class', this.element.getAttribute('class') + ' e-accumulationchart-focused');\n var loadEventData = {\n chart: this.isBlazor ? {} : this,\n accumulation: this.isBlazor ? {} : this,\n theme: this.theme, name: load, cancel: false\n };\n this.trigger(load, loadEventData, function () {\n _this.theme = _this.isBlazor ? loadEventData.theme : _this.theme;\n _this.setTheme();\n _this.accBaseModule = new AccumulationBase(_this);\n _this.pieSeriesModule = new PieSeries(_this);\n _this.calculateVisibleSeries();\n _this.processData();\n _this.renderComplete();\n _this.allowServerDataBinding = true;\n });\n };\n /**\n * Method to unbind events for accumulation chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.unWireEvents = function () {\n /** Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var move = Browser.touchMoveEvent;\n var stop = Browser.touchEndEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /** UnBind the Event handler */\n EventHandler.remove(this.element, move, this.accumulationMouseMove);\n EventHandler.remove(this.element, stop, this.accumulationMouseEnd);\n EventHandler.remove(this.element, start, this.accumulationMouseStart);\n EventHandler.remove(this.element, 'click', this.accumulationOnMouseClick);\n EventHandler.remove(this.element, 'dblclick', this.accumulationOnDoubleClick);\n EventHandler.remove(this.element, 'contextmenu', this.accumulationRightClick);\n EventHandler.remove(this.element, cancel, this.accumulationMouseLeave);\n EventHandler.remove(this.element, 'keydown', this.accumulationChartKeyDown);\n EventHandler.remove(document.body, 'keydown', this.documentKeyHandler);\n EventHandler.remove(this.element, 'keyup', this.accumulationChartKeyUp);\n window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResizeBound);\n };\n /**\n * Method to bind events for the accumulation chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.wireEvents = function () {\n /**\n * To fix react timeout destroy issue.\n */\n if (!this.element) {\n return;\n }\n /** Find the Events type */\n var isIE11Pointer = Browser.isPointer;\n var start = Browser.touchStartEvent;\n var stop = Browser.touchEndEvent;\n var move = Browser.touchMoveEvent;\n var cancel = isIE11Pointer ? 'pointerleave' : 'mouseleave';\n /** Bind the Event handler */\n EventHandler.add(this.element, move, this.accumulationMouseMove, this);\n EventHandler.add(this.element, stop, this.accumulationMouseEnd, this);\n EventHandler.add(this.element, start, this.accumulationMouseStart, this);\n EventHandler.add(this.element, 'click', this.accumulationOnMouseClick, this);\n EventHandler.add(this.element, 'dblclick', this.accumulationOnDoubleClick, this);\n EventHandler.add(this.element, 'contextmenu', this.accumulationRightClick, this);\n EventHandler.add(this.element, cancel, this.accumulationMouseLeave, this);\n EventHandler.add(this.element, 'keydown', this.accumulationChartKeyDown, this);\n EventHandler.add(document.body, 'keydown', this.documentKeyHandler, this);\n EventHandler.add(this.element, 'keyup', this.accumulationChartKeyUp, this);\n this.accumulationResizeBound = this.accumulationResize.bind(this);\n window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.accumulationResizeBound);\n new Touch(this.element); // To avoid geasture blocking for browser\n /** Apply the style for chart */\n this.setStyle(this.element);\n };\n /**\n * Method to set mouse x, y from events.\n *\n * @param {PointerEvent} e - The pointer event containing mouse coordinates.\n * @returns {void}\n */\n AccumulationChart.prototype.setMouseXY = function (e) {\n var pageX;\n var pageY;\n var svgRectElement = getElement(this.element.id + '_svg');\n if (svgRectElement && this.element) {\n var svgRect = svgRectElement.getBoundingClientRect();\n var rect = this.element.getBoundingClientRect();\n if (e.type.indexOf('touch') > -1) {\n this.isTouch = true;\n var touchArg = e;\n pageY = touchArg.changedTouches[0].clientY;\n pageX = touchArg.changedTouches[0].clientX;\n }\n else {\n this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n pageX = e.clientX;\n pageY = e.clientY;\n }\n this.mouseY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n this.mouseX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n }\n };\n /**\n * Handles the mouse end.\n *\n * @param {PointerEvent} e - The pointer event containing mouse coordinates.\n * @returns {boolean} - Mouse end of accumulation chart.\n * @private\n */\n AccumulationChart.prototype.accumulationMouseEnd = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseUp, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n if (this.accumulationDataLabelModule && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY, this.isTouch);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n }\n if (this.centerLabel.hoverTextFormat) {\n this.updateCenterLabel(e);\n }\n this.notify(Browser.touchEndEvent, e);\n return false;\n };\n /*public removeSvgOffset(x: number, y: number): ChartLocation {\n let rect: ClientRect = this.element.getBoundingClientRect();\n let svgRect: ClientRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n return { x: (x - rect.left) - Math.max(svgRect.left - rect.left, 0), y: (y - rect.top) - Math.max(svgRect.top - rect.top, 0)};\n }*/\n /**\n * Handles the mouse start.\n *\n * @param {PointerEvent} e - The pointer event containing mouse coordinates.\n * @returns {boolean} - Mouse start of accumulation chart.\n * @private\n */\n AccumulationChart.prototype.accumulationMouseStart = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseDown, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n return false;\n };\n /**\n * Handles the accumulation chart resize.\n *\n * @returns {boolean} - Resize method of accumulation chart.\n * @private\n */\n AccumulationChart.prototype.accumulationResize = function () {\n var _this = this;\n this.animateSeries = false;\n var args = {\n accumulation: this.isBlazor ? {} : this,\n previousSize: new Size(this.availableSize.width, this.availableSize.height),\n name: resized,\n currentSize: new Size(0, 0),\n chart: this.isBlazor ? {} : this\n };\n var beforeResizeArgs = { name: 'beforeResize', cancelResizedEvent: false };\n if (this.resizeTo) {\n clearTimeout(this.resizeTo);\n }\n this.trigger(beforeResize, beforeResizeArgs);\n if (!beforeResizeArgs.cancelResizedEvent) {\n this.resizeTo = +setTimeout(function () {\n if (_this.isDestroyed) {\n clearTimeout(_this.resizeTo);\n return;\n }\n calculateSize(_this);\n args.currentSize = _this.availableSize;\n _this.trigger(resized, args);\n _this.refreshSeries();\n _this.refreshChart();\n }, 500);\n }\n return false;\n };\n /**\n * Handles the print method for accumulation chart control.\n *\n * @param {string[] | string | Element} id - The id of the accumulation chart to be printed on the page.\n * @returns {void}\n */\n AccumulationChart.prototype.print = function (id) {\n // To handle the print funtion in IE and Edge browsers\n var clippath = document.getElementById(this.element.id + '_Series_0').style.clipPath;\n document.getElementById(this.element.id + '_Series_0').style.clipPath = '';\n var exportChart = new PrintUtils(this);\n exportChart.print(id);\n document.getElementById(this.element.id + '_Series_0').style.clipPath = clippath;\n };\n /**\n * Export method for the chart.\n *\n * @param {ExportType} type - The type of export.\n * @param {string} fileName - The name of the file for export.\n * @returns {void}\n */\n AccumulationChart.prototype.export = function (type, fileName) {\n if (this.exportModule) {\n this.exportModule.export(type, fileName);\n if (this.afterExport) {\n this.exportModule.getDataUrl(this);\n }\n }\n };\n /**\n * Applying styles for accumulation chart element.\n *\n * @param {HTMLElement} element - Specifies the element.\n * @returns {void}\n */\n AccumulationChart.prototype.setStyle = function (element) {\n element.style.touchAction = 'element';\n element.style.msTouchAction = 'element';\n element.style.msContentZooming = 'none';\n element.style.msUserSelect = 'none';\n element.style.webkitUserSelect = 'none';\n element.style.position = 'relative';\n element.style.display = 'block';\n element.style.height = (element.style.height || (this.height && this.height.indexOf('%') === -1)) ? element.style.height : 'inherit';\n var tabColor = '';\n switch (this.theme) {\n case 'HighContrastLight':\n case 'HighContrast':\n tabColor = '#969696';\n break;\n case 'MaterialDark':\n case 'FabricDark':\n case 'Bootstrap':\n case 'Bootstrap4':\n tabColor = '#66afe9';\n break;\n case 'Tailwind':\n case 'TailwindDark':\n tabColor = '#4f46e5';\n break;\n case 'Bootstrap5':\n case 'Bootstrap5Dark':\n tabColor = '#0d6efd';\n break;\n case 'Fluent':\n case 'FluentDark':\n tabColor = '#9e9e9e';\n break;\n case 'Fluent2':\n case 'Fluent2Dark':\n tabColor = '#0078D4';\n break;\n default:\n tabColor = '#9e9e9e';\n break;\n }\n var style = document.createElement('style');\n style.setAttribute('id', element.id + 'Keyboard_accumulationchart_focus');\n style.innerText = '.e-accumulationchart-focused:focus,path[id*=_Series_0_Point_]:focus, text[id*=_title]:focus' +\n '{outline: none} .e-accumulationchart-focused:focus-visible,path[id*=_Series_0_Point_]:focus-visible, text[id*=_title]:focus-visible' +\n '{outline: 1.5px ' + tabColor + ' solid}';\n document.body.appendChild(style);\n };\n /**\n * Method to set the annotation content dynamically for accumulation.\n *\n * @param {number} annotationIndex - The index of the annotation.\n * @param {string} content - The content to set for the annotation.\n * @returns {void}\n */\n AccumulationChart.prototype.setAnnotationValue = function (annotationIndex, content) {\n var annotation = this.annotations[annotationIndex];\n var element;\n var parentNode = getElement(this.element.id + '_Annotation_Collections');\n if (content) {\n annotation.content = content;\n if (parentNode) {\n element = this.createElement('div');\n removeElement(this.element.id + '_Annotation_' + annotationIndex);\n this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n parentNode.appendChild(element.children[0]);\n }\n else {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n }\n };\n /**\n * Handles the mouse move on accumulation chart.\n *\n * @param {PointerEvent} e - The pointer event containing mouse coordinates.\n * @returns {boolean} - Mouse move of accumulation chart.\n * @private\n */\n AccumulationChart.prototype.accumulationMouseMove = function (e) {\n if (!getElement(this.element.id + '_svg')) {\n return false;\n }\n this.setMouseXY(e);\n this.trigger(chartMouseMove, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointMove) {\n this.triggerPointEvent(pointMove, e.target, e);\n }\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.move(e);\n }\n if (this.accumulationDataLabelModule && this.visibleSeries[0] && this.visibleSeries[0].dataLabel.visible) {\n this.accumulationDataLabelModule.move(e, this.mouseX, this.mouseY);\n }\n if (this.centerLabel.hoverTextFormat) {\n this.updateCenterLabel(e);\n }\n if (!this.isTouch) {\n this.titleTooltip(e, this.mouseX, this.mouseY);\n }\n if (this.enableBorderOnMouseMove && this.type === 'Pie' && this.pieSeriesModule &&\n withInBounds(this.mouseX, this.mouseY, this.initialClipRect)) {\n this.pieSeriesModule.findSeries(e);\n }\n this.notify(Browser.touchMoveEvent, e);\n return false;\n };\n AccumulationChart.prototype.titleTooltip = function (event, x, y, isTouch) {\n var targetId = event.target.id;\n var id = (targetId === (this.element.id + '_title') || targetId === (this.element.id + '_subTitle') ||\n targetId === (this.element.id + '_chart_legend_title'));\n if ((event.target.textContent.indexOf('...') > -1) && id) {\n var title = (targetId === (this.element.id + '_title')) ?\n this.title : (targetId === (this.element.id + '_subTitle')) ? this.subTitle : this.legendSettings.title;\n showTooltip(title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n }\n else {\n removeElement(this.element.id + '_EJ2_Title_Tooltip');\n }\n };\n /**\n * Handles the keyboard onkeydown on chart.\n *\n * @param {KeyboardEvent} e - The keyboard event.\n * @returns {boolean} - false\n * @private\n */\n AccumulationChart.prototype.accumulationChartKeyDown = function (e) {\n var actionKey = '';\n if (this.tooltip.enable && ((e.code === 'Tab' && this.previousTargetId.indexOf('Series') > -1) || e.code === 'Escape')) {\n actionKey = 'ESC';\n }\n if (e.code.indexOf('Arrow') > -1) {\n e.preventDefault();\n }\n if (e.ctrlKey && (e.key === 'p')) {\n e.preventDefault();\n actionKey = 'CtrlP';\n }\n if (actionKey !== '') {\n this.chartKeyboardNavigations(e, e.target.id, actionKey);\n }\n return false;\n };\n /**\n * Handles the keyboard onkeydown on chart.\n *\n * @param {KeyboardEvent} e - The keyboard event.\n * @returns {boolean} - false\n * @private\n */\n AccumulationChart.prototype.accumulationChartKeyUp = function (e) {\n var actionKey = '';\n var targetId = e.target['id'];\n var legendElement = getElement(this.element.id + '_chart_legend_translate_g');\n var pagingElement = getElement(this.element.id + '_chart_legend_pageup');\n if (legendElement) {\n var firstChild = legendElement.firstElementChild;\n var className = firstChild.getAttribute('class');\n if (className && className.indexOf('e-accumulationchart-focused') === -1) {\n className = className + ' e-accumulationchart-focused';\n }\n else if (!className) {\n className = 'e-accumulationchart-focused';\n }\n firstChild.setAttribute('class', className);\n }\n if (pagingElement) {\n pagingElement.setAttribute('class', 'e-accumulationchart-focused');\n }\n if (e.code === 'Tab') {\n if (this.previousTargetId !== '') {\n if (this.previousTargetId.indexOf('_Point_') > -1 && targetId.indexOf('_Point_') === -1) {\n var groupElement = document.getElementById(this.previousTargetId).parentElement;\n this.setTabIndex(groupElement.children[this.currentPointIndex], groupElement.firstElementChild);\n this.currentPointIndex = 0;\n }\n else if (this.previousTargetId.indexOf('_chart_legend_page') > -1 && targetId.indexOf('_chart_legend_page') === -1 &&\n targetId.indexOf('_chart_legend_g_') === -1) {\n this.setTabIndex(e.target, pagingElement);\n }\n else if (this.previousTargetId.indexOf('_chart_legend_g_') > -1 && targetId.indexOf('chart_legend_g_') === -1) {\n this.setTabIndex(legendElement.children[this.currentLegendIndex], legendElement.firstElementChild);\n }\n }\n this.previousTargetId = targetId;\n if (targetId.indexOf('_chart_legend_g_') > -1 && this.highlightMode !== 'None') {\n targetId = e.target['lastElementChild'].id;\n actionKey = 'Tab';\n }\n else if (targetId.indexOf('_Point_') > -1 && (this.highlightMode !== 'None' || this.tooltip.enable)) {\n actionKey = 'Tab';\n }\n }\n else if (e.code.indexOf('Arrow') > -1) {\n e.preventDefault();\n if (targetId.indexOf('_chart_legend_page') > -1) {\n e.target.removeAttribute('tabindex');\n this.previousTargetId = targetId = this.element.id + '_chart_legend_page' + (e.code === 'ArrowRight' ? 'up' : 'down');\n this.focusTarget(getElement(targetId));\n }\n else if ((targetId.indexOf('_chart_legend_') > -1)) {\n e.target.removeAttribute('tabindex');\n this.currentLegendIndex += (e.code === 'ArrowUp' || e.code === 'ArrowRight') ? +1 : -1;\n this.currentLegendIndex = this.getActualIndex(this.currentLegendIndex, legendElement.children.length);\n var currentLegend = legendElement.children[this.currentLegendIndex];\n this.focusTarget(currentLegend);\n this.previousTargetId = targetId = currentLegend.lastElementChild.id;\n actionKey = this.highlightMode !== 'None' ? 'ArrowMove' : '';\n }\n else if (targetId.indexOf('_Point_') > -1) {\n e.target.setAttribute('tabindex', '-1');\n this.currentPointIndex += (e.code === 'ArrowUp' || e.code === 'ArrowRight') ? +1 : -1;\n var totalLength = 0;\n for (var i = 0; i < e.target['parentElement'].children.length; i++) {\n totalLength = e.target['parentElement'].children[i].id.indexOf('_Point_') > -1 ? totalLength + 1 : totalLength;\n }\n this.currentPointIndex = this.getActualIndex(this.currentPointIndex, totalLength);\n targetId = this.element.id + '_Series_0_Point_' + this.currentPointIndex;\n this.focusTarget(getElement(targetId));\n actionKey = this.tooltip.enable ? 'ArrowMove' : '';\n }\n }\n else if ((e.code === 'Enter' || e.code === 'Space') && ((targetId.indexOf('_chart_legend_') > -1) ||\n (targetId.indexOf('_Point_') > -1))) {\n targetId = (targetId.indexOf('_chart_legend_g') > -1) ? e.target['lastElementChild'].id : targetId;\n actionKey = 'Enter';\n }\n if (actionKey !== '') {\n this.chartKeyboardNavigations(e, targetId, actionKey);\n }\n return false;\n };\n AccumulationChart.prototype.setTabIndex = function (previousElement, currentElement) {\n if (previousElement) {\n previousElement.removeAttribute('tabindex');\n }\n if (currentElement) {\n currentElement.setAttribute('tabindex', '0');\n }\n };\n AccumulationChart.prototype.getActualIndex = function (index, totalLength) {\n return index > totalLength - 1 ? 0 : (index < 0 ? totalLength - 1 : index);\n };\n AccumulationChart.prototype.focusTarget = function (element) {\n var className = element.getAttribute('class');\n element.setAttribute('tabindex', '0');\n if (className && className.indexOf('e-accumulationchart-focused') === -1) {\n className = className + ' e-accumulationchart-focused';\n }\n else if (!className) {\n className = 'e-accumulationchart-focused';\n }\n element.setAttribute('tabindex', '0');\n element.setAttribute('class', className);\n element.focus();\n return element.id;\n };\n /**\n * Handles the document onkey.\n *\n * @param {KeyboardEvent} e - The keyboard event.\n * @returns {void}\n * @private\n */\n AccumulationChart.prototype.documentKeyHandler = function (e) {\n // 74 - J\n if (e.altKey && e.keyCode === 74 && !isNullOrUndefined(this.element)) {\n this.element.focus();\n }\n };\n AccumulationChart.prototype.chartKeyboardNavigations = function (e, targetId, actionKey) {\n this.isLegendClicked = false;\n switch (actionKey) {\n case 'Tab':\n case 'ArrowMove':\n if (this.accumulationHighlightModule) {\n // this.accumulationHighlightModule.removeHighlightElements();\n }\n if (targetId.indexOf('_Point_') > -1) {\n var seriesIndex = +(targetId.split('_Series_')[1].split('_Point_')[0]);\n var pointIndex = +(targetId.split('_Series_')[1].replace('_Symbol', '').split('_Point_')[1]);\n var pointRegion = this.visibleSeries[seriesIndex].points[pointIndex].symbolLocation;\n this.mouseX = pointRegion.x + this.initialClipRect.x;\n this.mouseY = pointRegion.y + this.initialClipRect.y;\n if (this.accumulationHighlightModule) {\n var targetElement = getElement(targetId);\n if (!isNullOrUndefined(targetElement)) {\n if (targetElement.id.indexOf('text') > 1) {\n targetElement = getElement(targetElement.id.replace('text', 'shape'));\n }\n if ((targetElement).hasAttribute('class') && (targetElement).getAttribute('class').indexOf('highlight') > -1) {\n return;\n }\n this.accumulationHighlightModule.calculateSelectedElements(this, targetElement, 'mousemove');\n return;\n }\n }\n if (this.accumulationTooltipModule) {\n var series = this.visibleSeries[seriesIndex];\n var data = void 0;\n if (series.enableTooltip) {\n data = new AccPointData(series.points[pointIndex], series);\n }\n this.accumulationTooltipModule.renderSeriesTooltip(this, data);\n }\n }\n if (this.accumulationHighlightModule && this.highlightMode !== 'None') {\n targetId = targetId.indexOf('_chart_legend_g_') > -1 ? document.getElementById(targetId).firstChild['id'] : targetId;\n var legendID = this.element.id + '_chart_legend';\n var legendItemsId = [legendID + '_text_', legendID + '_shape_marker_',\n legendID + '_shape_'];\n for (var i = 0; i < legendItemsId.length; i++) {\n var id = legendItemsId[i];\n if (targetId.indexOf(id) > -1) {\n document.getElementById(targetId).setAttribute('class', '');\n this.accumulationHighlightModule.legendSelection(this, 0, parseInt(targetId.split(id)[1], 10), getElement(targetId), 'mousemove');\n break;\n }\n }\n }\n break;\n case 'Enter':\n case 'Space':\n if (targetId.indexOf('_chart_legend_') > -1 && this.accumulationLegendModule) {\n this.isLegendClicked = true;\n this.accumulationLegendModule.click(e);\n this.focusChild(document.getElementById(targetId).parentElement);\n }\n else {\n if (this.accumulationSelectionModule) {\n this.accumulationSelectionModule.calculateSelectedElements(this, document.getElementById(targetId), 'click');\n }\n }\n break;\n case 'CtrlP':\n this.print();\n break;\n case 'ESC':\n if (this.accumulationTooltipModule) {\n this.accumulationTooltipModule.removeTooltip(1);\n }\n break;\n }\n };\n AccumulationChart.prototype.focusChild = function (element) {\n element.setAttribute('tabindex', '0');\n var className = element.getAttribute('class');\n element.setAttribute('tabindex', '0');\n if (className && className.indexOf('e-accumulationchart-focused') === -1) {\n className = 'e-accumulationchart-focused ' + className;\n }\n else if (!className) {\n className = 'e-accumulationchart-focused';\n }\n element.setAttribute('class', className);\n element.focus();\n return element.id;\n };\n /**\n * Handles the mouse double click on accumulation chart.\n *\n * @param {PointerEvent} e - The pointer event.\n * @returns {boolean} - Mouse double click of accumulation chart.\n * @private\n */\n AccumulationChart.prototype.accumulationOnDoubleClick = function (e) {\n this.trigger(chartDoubleClick, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n return false;\n };\n /**\n * Handles the mouse click on accumulation chart.\n *\n * @param {PointerEvent} e - The pointer event.\n * @returns {boolean} - Mouse click of accumulation chart.\n * @private\n */\n AccumulationChart.prototype.accumulationOnMouseClick = function (e) {\n this.setMouseXY(e);\n if (this.accumulationLegendModule && this.legendSettings.visible) {\n this.accumulationLegendModule.click(e);\n }\n if (this.selectionMode !== 'None' && this.accumulationSelectionModule) {\n this.accumulationSelectionModule.calculateSelectedElements(this, e.target, e.type);\n }\n if (this.visibleSeries[0].explode) {\n e.stopPropagation(); //Prevent event trigger to parent in nested rendering case.\n this.accBaseModule.processExplode(e);\n }\n if (this.enableBorderOnMouseMove && this.pieSeriesModule && this.type === 'Pie') {\n this.pieSeriesModule.findSeries(e);\n }\n this.trigger(chartMouseClick, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n if (this.pointClick) {\n this.triggerPointEvent(pointClick, e.target, e);\n }\n return false;\n };\n AccumulationChart.prototype.triggerPointEvent = function (event, element, e) {\n var evt = e;\n var indexes = indexFinder(element.id, true);\n if (indexes.series >= 0 && indexes.point >= 0) {\n this.trigger(event, {\n series: this.isBlazor ? {} : this.series[indexes.series],\n point: this.series[indexes.series].points[indexes.point],\n seriesIndex: indexes.series, pointIndex: indexes.point,\n x: this.mouseX, y: this.mouseY, pageX: evt.pageX, pageY: evt.pageY\n });\n }\n };\n /**\n * Handles the mouse right click on accumulation chart.\n *\n * @param {MouseEvent | PointerEvent} event - The mouse event or pointer event.\n * @returns {boolean} - Right click of accumulation chart.\n * @private\n */\n AccumulationChart.prototype.accumulationRightClick = function (event) {\n if (event.buttons === 2 && event.pointerType === 'touch') {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n return true;\n };\n /**\n * Handles the mouse leave on accumulation chart.\n *\n * @param {PointerEvent} e - The pointer event.\n * @returns {boolean} - Mouse leave of accumulation chart.\n * @private\n */\n AccumulationChart.prototype.accumulationMouseLeave = function (e) {\n this.setMouseXY(e);\n this.trigger(chartMouseLeave, { target: e.target.id, x: this.mouseX, y: this.mouseY });\n this.notify(Browser.isPointer ? 'pointerleave' : 'mouseleave', e);\n var borderElement = document.getElementById(this.element.id + 'PointHover_Border');\n if (borderElement) {\n this.pieSeriesModule.removeBorder(borderElement, 1000);\n borderElement = null;\n }\n return false;\n };\n /**\n * Method to set culture for chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.setCulture = function () {\n this.intl = new Internationalization();\n };\n /**\n * Method to create SVG element for accumulation chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.createPieSvg = function () {\n this.removeSvg();\n createSvg(this);\n };\n /**\n * To Remove the SVG from accumulation chart.\n *\n * @returns {boolean} - Remove svg.\n * @private\n */\n AccumulationChart.prototype.removeSvg = function () {\n if (this.redraw) {\n return null;\n }\n blazorTemplatesReset(this);\n removeElement(this.element.id + '_Secondary_Element');\n if (this.svgObject) {\n while (this.svgObject.childNodes.length > 0) {\n this.svgObject.removeChild(this.svgObject.firstChild);\n }\n if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode) {\n remove(this.svgObject);\n }\n }\n removeElement('EJ2_legend_tooltip');\n removeElement('EJ2_datalabel_tooltip');\n removeElement(this.element.id + 'PointHover_Border');\n };\n /**\n * Method to create the secondary element for tooltip, datalabel and annotaitons.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.createSecondaryElement = function () {\n var element = redrawElement(this.redraw, this.element.id + '_Secondary_Element') ||\n this.createElement('div', {\n id: this.element.id + '_Secondary_Element',\n styles: 'position: relative'\n });\n appendChildElement(false, this.element, element, this.redraw);\n };\n /**\n * Method to find visible series based on series types.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.calculateVisibleSeries = function () {\n this.visibleSeries = [];\n for (var i = 0, length_1 = this.series.length; i < length_1; i++) {\n this.series[i].index = i;\n if (this.series[i].type === this.type && this.visibleSeries.length === 0) {\n this.visibleSeries.push(this.series[i]);\n break;\n }\n }\n };\n /**\n * To find points from dataSource.\n *\n * @param {boolean} render - Indicates whether to render the points (default: true).\n * @returns {void}\n */\n AccumulationChart.prototype.processData = function (render) {\n if (render === void 0) { render = true; }\n this.seriesCounts = 0;\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n series.dataModule = new Data(series.dataSource || this.dataSource, series.query);\n series.refreshDataManager(this, render);\n }\n };\n /**\n * To refresh the accumulation chart.\n *\n * @private\n * @returns {void}\n */\n AccumulationChart.prototype.refreshChart = function () {\n this.doGrouppingProcess();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n removeElement('chartmeasuretext');\n };\n /**\n * Method to find groupped points.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.doGrouppingProcess = function () {\n var series = this.visibleSeries[0];\n if (!isNullOrUndefined(series.resultData) && ((!isNullOrUndefined(series.lastGroupTo) &&\n series.lastGroupTo !== series.groupTo))) {\n series.getPoints(series.resultData, this);\n }\n };\n /**\n * Method to calculate bounds for accumulation chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.calculateBounds = function () {\n this.initialClipRect = new Rect(this.margin.left, this.margin.top, this.availableSize.width, this.availableSize.height);\n this.titleCollection = [];\n this.subTitleCollection = [];\n var titleHeight = 0;\n var subTitleHeight = 0;\n var maxWidth = 0;\n var titleWidth = 0;\n if (this.title) {\n this.titleCollection = getTitle(this.title, this.titleStyle, this.initialClipRect.width, this.enableRtl, this.themeStyle.chartTitleFont);\n }\n titleHeight = this.title ? measureText(this.title, this.titleStyle, this.themeStyle.chartTitleFont).height * this.titleCollection.length : titleHeight;\n if (this.subTitle) {\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle, this.themeStyle.chartSubTitleFont).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n this.subTitleCollection = getTitle(this.subTitle, this.subTitleStyle, maxWidth, this.enableRtl, this.themeStyle.chartSubTitleFont);\n subTitleHeight = (measureText(this.subTitle, this.subTitleStyle, this.themeStyle.chartSubTitleFont).height * this.subTitleCollection.length);\n }\n subtractRect(this.initialClipRect, new Rect(0, (subTitleHeight + titleHeight), this.margin.right + this.margin.left, this.margin.bottom + this.margin.top));\n this.calculateLegendBounds();\n };\n /**\n * Method to calculate legend bounds for accumulation chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.calculateLegendBounds = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n this.accumulationLegendModule.getLegendOptions(this, this.visibleSeries);\n this.accumulationLegendModule.calculateLegendBounds(this.initialClipRect, this.availableSize, null);\n };\n /**\n * To render elements for accumulation chart.\n *\n * @private\n * @returns {void}\n */\n AccumulationChart.prototype.renderElements = function () {\n this.renderBorder();\n this.createSecondaryElement();\n this.renderSeries();\n this.renderTitle();\n this.renderCenterLabel(true);\n this.renderLegend();\n appendChildElement(false, this.element, this.svgObject, this.redraw);\n this.processSelection();\n this.processExplode();\n this.renderAnnotation();\n this.setSecondaryElementPosition();\n updateBlazorTemplate(this.element.id + '_DataLabel', 'Template', this.series[0].dataLabel);\n this.trigger('loaded', { accumulation: this.isBlazor ? {} : this, chart: this.isBlazor ? {} : this });\n this.animateSeries = false;\n };\n /**\n * To set the left and top position for data label template for center aligned chart.\n *\n * @private\n * @returns {void}\n */\n AccumulationChart.prototype.setSecondaryElementPosition = function () {\n var tooltipParent = getElement(this.element.id + '_Secondary_Element');\n if (!tooltipParent) {\n return;\n }\n var rect = this.element.getBoundingClientRect();\n var svgRect = getElement(this.element.id + '_svg').getBoundingClientRect();\n tooltipParent.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n tooltipParent.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n };\n /**\n * To render the annotaitions for accumulation series.\n *\n * @private\n * @returns {void}\n */\n AccumulationChart.prototype.renderAnnotation = function () {\n if (this.annotationModule) {\n this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n }\n };\n /**\n * Method to process the explode in accumulation chart.\n *\n * @private\n * @returns {void}\n */\n AccumulationChart.prototype.processExplode = function () {\n if (this.redraw) {\n return null;\n }\n if (!this.visibleSeries[0].explode) {\n return null;\n }\n this.accBaseModule.invokeExplode();\n };\n /**\n * Method to render series for accumulation chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.renderSeries = function () {\n if (!this.redraw) {\n this.svgObject.appendChild(this.renderer.createGroup({ id: this.element.id + '_SeriesCollection' }));\n }\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.visible && this[(firstToLowerCase(series.type) + 'SeriesModule')]) {\n this[(firstToLowerCase(series.type) + 'SeriesModule')].initProperties(this, series);\n series.renderSeries(this, this.redraw);\n }\n }\n };\n /**\n * Method to render border for accumulation chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.renderBorder = function () {\n var padding = this.border.width;\n var rect = new RectOption(this.element.id + '_border', this.background || this.themeStyle.background, this.border, 1, new Rect(padding / 2, padding / 2, this.availableSize.width - padding, this.availableSize.height - padding), 0, 0, '', this.border.dashArray);\n var htmlObject = this.renderer.drawRectangle(rect);\n htmlObject.setAttribute('aria-hidden', 'true');\n appendChildElement(false, this.svgObject, htmlObject, this.redraw);\n // to draw back ground image for accumulation chart\n var backGroundImage = this.backgroundImage;\n if (backGroundImage) {\n var image = new ImageOption(this.availableSize.height - padding, this.availableSize.width - padding, backGroundImage, 0, 0, this.element.id + '_background', 'visible', 'none');\n appendChildElement(false, this.svgObject, this.renderer.drawImage(image), this.redraw);\n }\n };\n /**\n * Method to render legend for accumulation chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.renderLegend = function () {\n if (!this.accumulationLegendModule || !this.legendSettings.visible) {\n return null;\n }\n if (this.accumulationLegendModule.legendCollections.length) {\n if (this.visibleSeries[0].type === 'Pie') {\n this.accumulationLegendModule.getSmartLegendLocation(this.visibleSeries[0].labelBound, this.accumulationLegendModule.legendBounds, this.margin);\n }\n this.accumulationLegendModule.renderLegend(this, this.legendSettings, this.accumulationLegendModule.legendBounds, this.redraw);\n }\n };\n /**\n * To process the selection in accumulation chart.\n *\n * @private\n * @returns {void}\n */\n AccumulationChart.prototype.processSelection = function () {\n var selectedDataIndexes = [];\n if (this.accumulationSelectionModule && this.selectionMode !== 'None') {\n selectedDataIndexes = extend([], this.accumulationSelectionModule.selectedDataIndexes, null, true);\n this.accumulationSelectionModule.invokeSelection(this);\n }\n if (this.accumulationHighlightModule && this.highlightMode !== 'None') {\n this.accumulationHighlightModule.invokeHighlight(this);\n }\n if (selectedDataIndexes.length > 0) {\n this.accumulationSelectionModule.selectedDataIndexes = selectedDataIndexes;\n this.accumulationSelectionModule.redrawSelection(this);\n }\n };\n /**\n * To render title for accumulation chart.\n *\n * @returns {void}\n */\n AccumulationChart.prototype.renderTitle = function () {\n var margin = this.margin;\n if (!this.title) {\n return null;\n }\n var getAnchor = getTextAnchor(this.titleStyle.textAlignment, this.enableRtl);\n var titleSize = measureText(this.title, this.titleStyle, this.themeStyle.chartTitleFont);\n var padding = 20;\n var titleHeight = this.margin.top + (titleSize.height * 3 / 4);\n var legendHeight = this.accumulationLegendModule === undefined ? 0 : this.legendSettings.position === 'Top' ?\n this.accumulationLegendModule.legendBounds.height : 0;\n var explode = this.explodeDistance === 0 ? 0 : this.explodeDistance;\n var expodeValue = legendHeight !== 0 ? 0 : explode / 2;\n var rect = new Rect(margin.left, 0, this.availableSize.width - margin.left - margin.right, 0);\n var options = new TextOption(this.element.id + '_title', titlePositionX(rect, this.titleStyle), titleHeight, getAnchor, this.titleCollection, '', 'auto');\n var space = (this.series[0].type === 'Pie' && this.visibleSeries[0].dataLabel.position === 'Outside' && this.visibleSeries[0].dataLabel.connectorStyle.length) ? stringToNumber(this.visibleSeries[0].dataLabel.connectorStyle.length, this.accBaseModule.radius) : 0;\n if (!this.subTitle && (this.series[0].type !== 'Funnel' && this.series[0].type !== 'Pyramid')) {\n options.y = parseInt(this.series[0].radius, 10) >= 80 ? options.y :\n (this.accBaseModule.center.y - this.accBaseModule.radius - padding\n - titleHeight - legendHeight - expodeValue - space);\n if (this.series[0].type === 'Pie' && (parseInt(this.series[0].radius, 10) < 80 || isNaN(parseInt(this.series[0].radius, 10)))) {\n options.y = options.y < (this.initialClipRect.y - legendHeight) ? (this.initialClipRect.y - legendHeight) : options.y;\n }\n }\n var element = textElement(this.renderer, options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitleFont.color, this.svgObject, false, this.redraw, null, null, null, null, null, null, null, null, this.themeStyle.chartTitleFont);\n if (element) {\n element.setAttribute('tabindex', '0');\n element.parentNode.insertBefore(element, this.svgObject.children && this.svgObject.children[1]);\n }\n if (this.subTitle) {\n this.renderSubTitle(options);\n }\n };\n /**\n * To update center label on mouse move.\n *\n * @param {Event} event - The mouse move event.\n * @returns {void}\n */\n AccumulationChart.prototype.updateCenterLabel = function (event) {\n var data = this.getPieData(event);\n this.format = (data.point == null) ? '' : this.parseFormat(data.point, this.visibleSeries[0], this.centerLabel.hoverTextFormat);\n this.renderCenterLabel();\n };\n /**\n * Function to get pie data on mouse move.\n *\n * @param {PointerEvent | TouchEvent} e - The event object containing mouse or touch coordinates.\n * @returns {AccPointData} - The data of the pie.\n */\n AccumulationChart.prototype.getPieData = function (e) {\n var dataIndex = indexFinder(e.target.id, true);\n if (!isNaN(dataIndex.series)) {\n return new AccPointData(this.visibleSeries[0].points[dataIndex.point], this.visibleSeries[0]);\n }\n return new AccPointData(null, null);\n };\n /**\n * Function to get format of pie data on mouse move.\n *\n * @param {AccPoints} point - The point data.\n * @param {AccumulationSeries} series - The series to which the point belongs.\n * @param {string} format - The format string for the data.\n * @returns {string} - The formatted data.\n */\n AccumulationChart.prototype.parseFormat = function (point, series, format) {\n var value;\n var textValue;\n var regExp = RegExp;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n value = new regExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(value.source, point[dataValue]);\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n value = new regExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(value.source, textValue);\n }\n return format;\n };\n /**\n * To render center label for accumulation chart.\n *\n * @param {boolean} isanimate - Specifies whether to animate the rendering.\n * @returns {void}\n */\n AccumulationChart.prototype.renderCenterLabel = function (isanimate) {\n if (!this.centerLabel.text) {\n return null;\n }\n var series = this.series[0];\n var ypos;\n var getAnchor = getTextAnchor(this.centerLabel.textStyle.textAlignment, this.enableRtl);\n var padding = 10;\n // To get side of square inside the circle , which is considered as maxwidth , d*sqrt(0.5)\n var maxwidth = this.pieSeriesModule.innerRadius ? ((2 * this.pieSeriesModule.innerRadius) * (0.7071067)) :\n ((2 * this.pieSeriesModule.radius) * (0.7071067));\n var labelCollection = (this.format || this.centerLabel.text).split('
');\n var centerLabelSize = measureText(labelCollection[0], this.centerLabel.textStyle, this.themeStyle.chartTitleFont);\n var collectionLength = labelCollection.length;\n for (var i = 0; i < collectionLength; i++) {\n var labelSize = measureText(labelCollection[i], this.centerLabel.textStyle, this.themeStyle.chartTitleFont);\n if (labelSize.width > maxwidth) {\n labelCollection.splice.apply(labelCollection, [i, 1].concat((textWrap(labelCollection[i], maxwidth, this.centerLabel.textStyle, this.enableRtl, null, null, this.themeStyle.chartTitleFont))));\n }\n }\n if (centerLabelSize.height * (labelCollection.length) > maxwidth) {\n ypos = this.accBaseModule.center.y + ((centerLabelSize.height + padding) / 2) - (maxwidth / 2);\n }\n else if ((series.startAngle && series.endAngle) && (Math.abs(series.endAngle - series.startAngle) === 180)) {\n ypos = this.accBaseModule.center.y - (centerLabelSize.height * labelCollection.length / 2) +\n ((centerLabelSize.height + padding) / 2) - this.pieSeriesModule.innerRadius / 2 +\n (this.pieSeriesModule.innerRadius ? padding : 0);\n if ((centerLabelSize.height * (labelCollection.length) + this.pieSeriesModule.innerRadius / 2 + padding > maxwidth)) {\n ypos = this.accBaseModule.center.y + ((centerLabelSize.height + padding) / 2) - (maxwidth / 2);\n }\n }\n else {\n ypos = labelCollection.length > 1 ? (this.accBaseModule.center.y - (centerLabelSize.height * labelCollection.length / 2) +\n ((centerLabelSize.height + padding) / 2)) : (this.accBaseModule.center.y + (centerLabelSize.height) / 4);\n }\n var options = new TextOption(this.element.id + '_centerLabel', (((this.series[0].animation.enable && animationMode !== 'Disable') || animationMode === 'Enable') && isanimate) ? this.pieSeriesModule.center.x - 1 : this.pieSeriesModule.center.x, ypos, getAnchor, '', '', 'auto');\n var element = textElement(this.renderer, options, this.centerLabel.textStyle, this.centerLabel.textStyle.color ||\n this.themeStyle.chartTitleFont.color, this.svgObject, false, this.redraw, null, null, null, null, null, null, null, null, this.themeStyle.chartTitleFont);\n for (var i = 0; i < labelCollection.length; i++) {\n var tspanOption = { x: options.x, y: options.y + (i * centerLabelSize.height), fill: '' };\n var tspanElement = this.renderer.createTSpan(tspanOption, '');\n tspanElement.style.fontFamily = 'inherit';\n tspanElement.style.fontStyle = 'inherit';\n tspanElement.style.fontSize = 'inherit';\n tspanElement.style.fontWeight = (labelCollection[i].indexOf('') > -1 || labelCollection[i].indexOf('') > -1) ? 'bold' : 'inherit';\n tspanElement.textContent = labelCollection[i].replace(/<\\/?b>/g, '');\n element.appendChild(tspanElement);\n }\n if (isanimate && ((this.series[0].animation.enable && animationMode !== 'Disable') || animationMode === 'Enable') && this.animateSeries) {\n this.centerLabelDelay(element);\n }\n };\n /**\n * Function to delay Center label at initial stage of accumulation chart.\n *\n * @param {Element} element - The element to delay.\n * @returns {void}\n */\n AccumulationChart.prototype.centerLabelDelay = function (element) {\n element.style.visibility = 'hidden';\n var animation = new Animation({});\n animation.animate(element, {\n delay: this.duration ? this.duration : this.series[0].animation.duration,\n progress: function (args) {\n args.element.style.visibility = 'visible';\n }\n });\n };\n AccumulationChart.prototype.renderSubTitle = function (options) {\n var maxWidth = 0;\n var titleWidth = 0;\n var padding = 10;\n var alignment = this.titleStyle.textAlignment;\n var subTitleElementSize = measureText(this.subTitle, this.subTitleStyle, this.themeStyle.chartSubTitleFont);\n for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n var titleText = _a[_i];\n titleWidth = measureText(titleText, this.titleStyle, this.themeStyle.chartSubTitleFont).width;\n maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n }\n var rect = new Rect(alignment === 'Center' ? (options.x - maxWidth / 2) : alignment === 'Far' ? options.x - maxWidth : options.x, 0, maxWidth, 0);\n var subTitleOption = new TextOption(this.element.id + '_subTitle', titlePositionX(rect, this.subTitleStyle), options.y * options.text.length + ((subTitleElementSize.height) * 3 / 4) + padding, getTextAnchor(this.subTitleStyle.textAlignment, this.enableRtl), this.subTitleCollection, '', 'auto');\n textElement(this.renderer, subTitleOption, this.subTitleStyle, this.subTitleStyle.color || this.themeStyle.chartSubTitleFont.color, this.svgObject, false, this.redraw, null, null, null, null, null, null, null, null, this.themeStyle.chartSubTitleFont);\n };\n /**\n * To get the series parent element.\n *\n * @private\n * @returns {Element} - The parent element of the series.\n */\n AccumulationChart.prototype.getSeriesElement = function () {\n return this.svgObject.getElementsByTagName('g')[0];\n };\n /**\n * To refresh the all visible series points.\n *\n * @private\n * @returns {void}\n */\n AccumulationChart.prototype.refreshSeries = function () {\n for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n var series = _a[_i];\n this.refreshPoints(series.points);\n }\n };\n /**\n * To refresh points label region and visible.\n *\n * @private\n * @param {AccPoints[]} points - The array of points to refresh.\n * @returns {void}\n */\n AccumulationChart.prototype.refreshPoints = function (points) {\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n point.labelPosition = null;\n point.labelRegion = null;\n point.labelVisible = true;\n }\n };\n /**\n * To get Module name.\n *\n * @private\n * @returns {string} - Returns the module name.\n */\n AccumulationChart.prototype.getModuleName = function () {\n return 'accumulationchart';\n };\n /**\n * To destroy the accumulation charts.\n *\n * @private\n * @returns {void}\n */\n AccumulationChart.prototype.destroy = function () {\n /**\n * To fix react timeout destroy issue.\n */\n if (this.element) {\n this.unWireEvents();\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-accumulationchart');\n this.element.classList.remove('e-accumulationchart-focused');\n var element = document.getElementById(this.element.id + 'Keyboard_accumulationchart_focus');\n if (element) {\n element.remove();\n }\n removeElement('chartmeasuretext');\n this.removeSvg();\n this.svgObject = null;\n }\n };\n /**\n * To provide the array of modules needed for control rendering.\n *\n * @returns {ModuleDeclaration[]} - required modules.\n * @private\n */\n AccumulationChart.prototype.requiredModules = function () {\n var modules = [];\n var enableAnnotation = false;\n modules.push({\n member: this.type + 'Series',\n args: [this]\n });\n if (this.legendSettings.visible) {\n modules.push({\n member: 'AccumulationLegend',\n args: [this]\n });\n }\n if (this.findDatalabelVisibility()) {\n modules.push({\n member: 'AccumulationDataLabel',\n args: [this]\n });\n }\n if (this.tooltip.enable) {\n modules.push({\n member: 'AccumulationTooltip',\n args: [this]\n });\n }\n if (this.selectionMode !== 'None') {\n modules.push({\n member: 'AccumulationSelection',\n args: [this]\n });\n }\n if (this.highlightMode !== 'None') {\n modules.push({\n member: 'AccumulationHighlight',\n args: [this]\n });\n }\n if (this.enableExport || this.allowExport) {\n modules.push({\n member: 'Export',\n args: [this]\n });\n }\n enableAnnotation = this.annotations.some(function (value) {\n return (value.content !== null);\n });\n if (enableAnnotation) {\n modules.push({\n member: 'Annotation',\n args: [this]\n });\n }\n return modules;\n };\n /**\n * To find datalabel visibility in series.\n *\n * @returns {boolean} - false\n */\n AccumulationChart.prototype.findDatalabelVisibility = function () {\n for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n var series = _a[_i];\n if (series.dataLabel.visible) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get visible series for accumulation chart by index.\n *\n * @param {AccumulationSeries[]} visibleSeries - The array of visible series in the accumulation chart.\n * @param {number} index - The index of the series to retrieve.\n * @returns {AccumulationSeries} - The visible series at the specified index.\n */\n AccumulationChart.prototype.changeVisibleSeries = function (visibleSeries, index) {\n for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n var series = visibleSeries_1[_i];\n if (index === series.index) {\n return series;\n }\n }\n return null;\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @private\n * @returns {string} - The persisted data containing the properties.\n */\n AccumulationChart.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {AccumulationChartModel} newProp - The new AccumulationChartModel.\n * @param {AccumulationChartModel} oldProp - The old AccumulationChartModel.\n * @returns {void}\n */\n AccumulationChart.prototype.onPropertyChanged = function (newProp, oldProp) {\n var update = {\n refreshElements: false, refreshBounds: false\n };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'theme':\n this.animateSeries = true;\n break;\n case 'title':\n case 'subTitle':\n case 'height':\n case 'width':\n case 'margin':\n update.refreshBounds = true;\n break;\n case 'titleStyle':\n if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n update.refreshBounds = true;\n }\n else {\n update.refreshElements = true;\n }\n break;\n case 'subTitleStyle':\n if (newProp.subTitleStyle && (newProp.subTitleStyle.size || newProp.subTitleStyle.textOverflow)) {\n update.refreshBounds = true;\n }\n else {\n update.refreshElements = true;\n }\n break;\n case 'legendSettings':\n update.refreshBounds = true;\n update.refreshElements = true;\n break;\n case 'dataSource':\n this.processData(false);\n update.refreshBounds = true;\n break;\n case 'series':\n if (!this.animateselected) {\n var len = this.series.length;\n var seriesRefresh = false;\n var series = void 0;\n var blazorProp = void 0;\n for (var i = 0; i < len; i++) {\n series = newProp.series[i];\n if (this.isBlazor && (series.startAngle || series.endAngle || series.explodeOffset || series.neckHeight ||\n series.neckWidth || series.radius || series.innerRadius || series.groupMode || series.emptyPointSettings)) {\n blazorProp = true;\n }\n if (newProp.series[i] && (newProp.series[i].dataSource || newProp.series[i].yName\n || newProp.series[i].xName || series.type ||\n newProp.series[i].dataLabel || blazorProp)) {\n extend(this.changeVisibleSeries(this.visibleSeries, i), series, null, true);\n seriesRefresh = true;\n }\n if (newProp.series[i] && !isNullOrUndefined(newProp.series[i].explodeIndex) &&\n newProp.series[i].explodeIndex >= 0\n && newProp.series[i].explodeIndex !== oldProp.series[i].explodeIndex) {\n this.accBaseModule.explodePoints(newProp.series[i].explodeIndex, this);\n this.accBaseModule.deExplodeAll(newProp.series[i].explodeIndex, this.enableAnimation ? 300 : 0);\n }\n else if (newProp.series[i].explodeIndex < 0) {\n this.accBaseModule.deExplodeAll(newProp.series[i].explodeIndex, this.enableAnimation ? 300 : 0);\n }\n if (!this.pieSeriesModule) {\n this.pieSeriesModule = new PieSeries(this);\n }\n }\n if (seriesRefresh) {\n this.processData(false);\n update.refreshBounds = true;\n }\n }\n this.animateselected = false;\n this.redraw = false;\n break;\n case 'enableRtl':\n case 'locale':\n case 'currencyCode':\n _super.prototype.refresh.call(this);\n break;\n case 'background':\n case 'border':\n case 'annotations':\n case 'enableSmartLabels':\n update.refreshElements = true;\n break;\n case 'isMultiSelect':\n case 'selectedDataIndexes':\n case 'selectionMode':\n if (this.accumulationSelectionModule) {\n if (isNullOrUndefined(this.accumulationSelectionModule.selectedDataIndexes)) {\n this.accumulationSelectionModule.invokeSelection(this);\n }\n else {\n this.accumulationSelectionModule.selectedDataIndexes = this.selectedDataIndexes;\n this.accumulationSelectionModule.redrawSelection(this);\n }\n }\n break;\n case 'tooltip':\n if (this.accumulationTooltipModule) { // To check the tooltip enable is true.\n this.accumulationTooltipModule.previousPoints = [];\n if (this.tooltip.template) {\n this.accumulationTooltipModule.template = this.tooltip.template;\n }\n }\n break;\n }\n }\n if (!update.refreshBounds && update.refreshElements) {\n this.createPieSvg();\n this.renderElements();\n }\n else if (update.refreshBounds) {\n this.refreshSeries();\n this.createPieSvg();\n this.calculateBounds();\n this.renderElements();\n }\n };\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"height\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"title\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"backgroundImage\", void 0);\n __decorate([\n Complex({}, PieCenter)\n ], AccumulationChart.prototype, \"center\", void 0);\n __decorate([\n Property('')\n ], AccumulationChart.prototype, \"dataSource\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: null, fontStyle: null, fontWeight: null, color: null }, Font)\n ], AccumulationChart.prototype, \"titleStyle\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"subTitle\", void 0);\n __decorate([\n Complex({ fontFamily: null, size: null, fontStyle: null, fontWeight: null, color: null }, Font)\n ], AccumulationChart.prototype, \"subTitleStyle\", void 0);\n __decorate([\n Complex({}, LegendSettings)\n ], AccumulationChart.prototype, \"legendSettings\", void 0);\n __decorate([\n Complex({}, TooltipSettings)\n ], AccumulationChart.prototype, \"tooltip\", void 0);\n __decorate([\n Complex({}, CenterLabel)\n ], AccumulationChart.prototype, \"centerLabel\", void 0);\n __decorate([\n Property('None')\n ], AccumulationChart.prototype, \"selectionMode\", void 0);\n __decorate([\n Property('')\n ], AccumulationChart.prototype, \"highlightColor\", void 0);\n __decorate([\n Property('None')\n ], AccumulationChart.prototype, \"highlightMode\", void 0);\n __decorate([\n Property('None')\n ], AccumulationChart.prototype, \"selectionPattern\", void 0);\n __decorate([\n Property('None')\n ], AccumulationChart.prototype, \"highlightPattern\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableBorderOnMouseMove\", void 0);\n __decorate([\n Property(false)\n ], AccumulationChart.prototype, \"isMultiSelect\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableAnimation\", void 0);\n __decorate([\n Collection([], Indexes)\n ], AccumulationChart.prototype, \"selectedDataIndexes\", void 0);\n __decorate([\n Complex({}, Margin)\n ], AccumulationChart.prototype, \"margin\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableSmartLabels\", void 0);\n __decorate([\n Complex({ color: '#DDDDDD', width: 0 }, Border)\n ], AccumulationChart.prototype, \"border\", void 0);\n __decorate([\n Property(null)\n ], AccumulationChart.prototype, \"background\", void 0);\n __decorate([\n Collection([{}], AccumulationSeries)\n ], AccumulationChart.prototype, \"series\", void 0);\n __decorate([\n Collection([{}], AccumulationAnnotationSettings)\n ], AccumulationChart.prototype, \"annotations\", void 0);\n __decorate([\n Property('Material')\n ], AccumulationChart.prototype, \"theme\", void 0);\n __decorate([\n Property(false)\n ], AccumulationChart.prototype, \"useGroupingSeparator\", void 0);\n __decorate([\n Property(true)\n ], AccumulationChart.prototype, \"enableExport\", void 0);\n __decorate([\n Property(false)\n ], AccumulationChart.prototype, \"allowExport\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"legendClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"load\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"seriesRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"legendRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"textRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"annotationRender\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"beforePrint\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartDoubleClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointClick\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"pointMove\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"animationComplete\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseDown\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseLeave\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"chartMouseUp\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"beforeResize\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"resized\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"afterExport\", void 0);\n __decorate([\n Event()\n ], AccumulationChart.prototype, \"selectionComplete\", void 0);\n __decorate([\n Property('USD')\n ], AccumulationChart.prototype, \"currencyCode\", void 0);\n AccumulationChart = __decorate([\n NotifyPropertyChanges\n ], AccumulationChart);\n return AccumulationChart;\n}(Component));\nexport { AccumulationChart };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart legend\n */\nimport { Browser, isNullOrUndefined, Animation } from '@syncfusion/ej2-base';\nimport { pointByIndex } from '../model/acc-base';\nimport { BaseLegend, LegendOptions } from '../../common/legend/legend';\nimport { Rect, measureText } from '@syncfusion/ej2-svg-base';\nimport { textTrim, getElement, blazorTemplatesReset } from '../../common/utils/helper';\nimport { textWrap } from '../../common/utils/helper';\nimport { legendClick } from '../../common/model/constants';\n/**\n * AccumulationLegend module used to render `Legend` for Accumulation chart.\n */\nvar AccumulationLegend = /** @class */ (function (_super) {\n __extends(AccumulationLegend, _super);\n /**\n * Constructor for Accumulation Legend.\n *\n * @param {AccumulationChart} chart Get a chart as a parameter.\n */\n function AccumulationLegend(chart) {\n var _this = _super.call(this, chart) || this;\n _this.library = _this;\n _this.titleRect = new Rect(0, chart.margin.top, 0, 0);\n _this.addEventListener();\n return _this;\n }\n /**\n * Binding events for legend module.\n *\n * @returns {void}\n */\n AccumulationLegend.prototype.addEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n this.chart.on(Browser.touchEndEvent, this.mouseEnd, this);\n this.chart.on('click', this.click, this);\n };\n /**\n * UnBinding events for legend module.\n *\n * @returns {void}\n */\n AccumulationLegend.prototype.removeEventListener = function () {\n if (this.chart.isDestroyed) {\n return;\n }\n this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n this.chart.off('click', this.click);\n this.chart.off(Browser.touchEndEvent, this.mouseEnd);\n };\n /**\n * To handle mosue move for legend module.\n *\n * @param {MouseEvent} e - The mouse move event for legend module.\n * @returns {void}\n */\n AccumulationLegend.prototype.mouseMove = function (e) {\n if (this.chart.legendSettings.visible && !this.chart.isTouch) {\n if (this.chart.accumulationHighlightModule && this.chart.highlightMode !== 'None') {\n if (!this.chart.legendSettings.toggleVisibility) {\n this.click(e);\n }\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n this.legendID + '_shape_', this.legendID + '_g_'];\n var targetId = e.target.id;\n var index = void 0;\n for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n var id = legendItemsId_1[_i];\n if (targetId.indexOf(id) > -1) {\n index = parseInt(targetId.split(id)[1], 10);\n this.chart.accumulationHighlightModule.legendSelection(this.chart, 0, index, e.target, e.type);\n break;\n }\n }\n }\n }\n };\n /**\n * To handle mosue end for legend module.\n *\n * @param {MouseEvent} e - The mouse end event for legend module.\n * @returns {void}\n */\n AccumulationLegend.prototype.mouseEnd = function (e) {\n if (this.chart.legendSettings.visible && this.chart.isTouch) {\n this.move(e);\n }\n };\n /**\n * Get the legend options.\n *\n * @param {AccumulationChart} chart - The accumulation chart control.\n * @param {AccumulationSeries[]} series - The array of series in the accumulation chart.\n * @returns {void}\n * @private\n */\n AccumulationLegend.prototype.getLegendOptions = function (chart, series) {\n this.legendCollections = [];\n this.isRtlEnable = chart.enableRtl;\n this.isReverse = !this.isRtlEnable && chart.legendSettings.reverse;\n for (var i = 0; i < 1; i++) {\n var seriesType = series[i].type;\n if (seriesType === 'Pie' || seriesType === 'Doughnut') {\n seriesType = (series[i].innerRadius !== '0' && series[i].innerRadius !== '0%') ?\n 'Doughnut' : 'Pie';\n }\n for (var _i = 0, _a = series[i].points; _i < _a.length; _i++) {\n var point = _a[_i];\n if (!isNullOrUndefined(point.x) && !isNullOrUndefined(point.y)) {\n this.legendCollections.push(new LegendOptions(point.x.toString(), point.color, series[i].legendShape, point.visible, seriesType, point.legendImageUrl, null, null, point.index, series[i].index));\n }\n }\n if (this.isReverse) {\n this.legendCollections.reverse();\n }\n }\n };\n /**\n * To find legend bounds for accumulation chart.\n *\n * @param {Size} availableSize - The available size for the legend.\n * @param {Rect} legendBounds - The boundary of the legend.\n * @param {LegendSettingsModel} legend - The legend settings.\n * @returns {void}\n * @private\n */\n AccumulationLegend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n this.calculateLegendTitle(legend, legendBounds);\n this.isTitle = legend.title ? true : false;\n var extraWidth = 0;\n var extraHeight = 0;\n var legendOption;\n this.chartRowCount = 1;\n this.rowHeights = [];\n this.columnHeights = [];\n this.pageHeights = [];\n var padding = legend.padding;\n var titlePosition = legend.titlePosition;\n var titlePlusArrowSpace = 0;\n var arrowWidth = this.arrowWidth;\n var arrowHeight = legend.enablePages ? 0 : this.arrowHeight;\n if (!this.isVertical) {\n extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n }\n else {\n extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n }\n legendBounds.width += extraWidth;\n legendBounds.height += extraHeight;\n var shapePadding = legend.shapePadding;\n var maximumWidth = legend.maximumLabelWidth ? legend.maximumLabelWidth : 0;\n var shapeWidth = legend.shapeWidth;\n var rowWidth = 0;\n var columnCount = 0;\n var rowCount = 0;\n var columnWidth = [];\n var pageWidth = [];\n var pageRowWidth = 0;\n var previousRowCount = 0;\n var columnHeight = 0;\n var legendWidth = 0;\n var titleHeight = 0;\n this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle, this.chart.themeStyle.legendLabelFont).height, legend.shapeHeight);\n var legendEventArgs;\n var render = false;\n for (var i = 0; i < this.legendCollections.length; i++) {\n legendOption = this.legendCollections[i];\n legendEventArgs = { fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n name: 'legendRender', cancel: false };\n this.chart.trigger('legendRender', legendEventArgs);\n legendOption.render = !legendEventArgs.cancel;\n legendOption.text = ((legendEventArgs.text.indexOf('&') > -1) ?\n this.convertHtmlEntities(legendEventArgs.text) : legendEventArgs.text);\n legendOption.fill = legendEventArgs.fill;\n legendOption.shape = legendEventArgs.shape;\n legendOption.textSize = measureText(legendOption.text, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n if (legendOption.render && legendOption.text !== '') {\n render = true;\n legendWidth = shapeWidth + shapePadding + (legend.maximumLabelWidth ? legend.maximumLabelWidth :\n legendOption.textSize.width) + (!this.isVertical ? (i === 0) ? padding : this.itemPadding : padding);\n this.getLegendHeight(legendOption, legend, legendBounds, rowWidth, this.maxItemHeight, padding);\n if (this.isVertical) {\n columnHeight += legendOption.textSize.height + ((i === 0) ? padding : this.itemPadding);\n if (columnHeight + this.itemPadding + (arrowHeight / this.pageButtonSize) > (legendBounds.height)) {\n //columnHeight = Math.max(columnHeight, (rowCount * (this.maxItemHeight + padding)) + padding + arrowHeight);\n rowWidth = rowWidth + maximumWidth;\n pageRowWidth = this.getPageWidth(pageWidth);\n this.totalPages = Math.max(rowCount, this.totalPages || 1);\n if ((rowWidth - pageRowWidth + legendWidth) > legendBounds.width) {\n pageWidth.push(rowWidth - pageRowWidth);\n rowCount = this.rowHeights.length;\n previousRowCount = rowCount;\n }\n else {\n rowCount = previousRowCount;\n }\n columnWidth.push(maximumWidth);\n maximumWidth = 0;\n columnHeight = legendOption.textSize.height + padding;\n columnCount++;\n }\n this.columnHeights[columnCount] = (this.columnHeights[columnCount] ?\n this.columnHeights[columnCount] : 0) + legendOption.textSize.height + ((i === 0) ?\n padding : this.itemPadding);\n maximumWidth = Math.max(legendWidth, maximumWidth);\n this.rowHeights[rowCount] = Math.max((this.rowHeights[rowCount] ?\n this.rowHeights[rowCount] : 0), legendOption.textSize.height);\n rowCount++;\n }\n else {\n if (!legend.enablePages) { // For new legend navigation support\n titlePlusArrowSpace = this.isTitle && titlePosition !== 'Top' ? this.legendTitleSize.width + this.fivePixel : 0;\n titlePlusArrowSpace += arrowWidth;\n }\n rowWidth = rowWidth + legendWidth;\n if (legendBounds.width < (padding + rowWidth + titlePlusArrowSpace)) {\n maximumWidth = Math.max(maximumWidth, (rowWidth + padding + titlePlusArrowSpace - legendWidth));\n if (rowCount === 0 && (legendWidth !== rowWidth)) {\n rowCount = 1;\n }\n rowWidth = legendWidth;\n rowCount++;\n columnCount = 0;\n // columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding + this.legendTitleSize.height;\n }\n var len = rowCount ? (rowCount - 1) : rowCount;\n this.rowHeights[len] = Math.max((this.rowHeights[len] ? this.rowHeights[len] : 0), legendOption.textSize.height);\n this.columnHeights[columnCount] = (this.columnHeights[columnCount] ?\n this.columnHeights[columnCount] : 0) +\n legendOption.textSize.height + padding;\n columnCount++;\n }\n }\n }\n titleHeight = titlePosition === 'Top' ? this.legendTitleSize.height : 0;\n if (this.isVertical) {\n rowWidth = rowWidth + maximumWidth;\n this.isPaging = legendBounds.width < (rowWidth + padding);\n columnHeight = Math.max.apply(null, this.columnHeights) + padding + arrowHeight + titleHeight;\n columnHeight = Math.max(columnHeight, ((this.totalPages || 1) * (this.maxItemHeight + padding)) + padding + arrowHeight);\n this.isPaging = this.isPaging && (this.totalPages > 1);\n columnWidth.push(maximumWidth);\n }\n else {\n this.totalPages = this.totalRowCount = rowCount;\n columnHeight = Math.max.apply(null, this.columnHeights) + padding + arrowHeight + titleHeight;\n this.isPaging = legendBounds.height < columnHeight;\n columnHeight = !legend.enablePages && this.isPaging ? (this.maxItemHeight + padding) + padding + titleHeight : columnHeight;\n columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding + titleHeight);\n if (!this.isPaging) { // For title left and right position\n rowWidth += this.isTitle && titlePosition !== 'Top' ? (this.fivePixel + this.legendTitleSize.width + this.fivePixel) : 0;\n }\n }\n this.maxColumns = 0; // initialization for max columns\n var width = this.isVertical ? this.getMaxColumn(columnWidth, legendBounds.width, padding, rowWidth + padding) :\n Math.max(rowWidth + padding, maximumWidth);\n if (render) { // if any legends not skipped in event check\n this.setBounds(width, columnHeight, legend, legendBounds);\n }\n else {\n this.setBounds(0, 0, legend, legendBounds);\n }\n };\n AccumulationLegend.prototype.getPageWidth = function (pageWidth) {\n var sum = 0;\n for (var i = 0; i < pageWidth.length; i++) {\n sum += pageWidth[i];\n }\n return sum;\n };\n /** @private */\n AccumulationLegend.prototype.getLegendHeight = function (option, legend, bounds, rowWidth, legendHeight, padding) {\n var legendWidth = option.textSize.width;\n var textPadding = legend.shapePadding + (padding * 2) + legend.shapeWidth;\n switch (legend.textWrap) {\n case 'Wrap':\n case 'AnyWhere':\n if (legendWidth > legend.maximumLabelWidth || legendWidth + rowWidth > bounds.width) {\n option.textCollection = textWrap(option.text, (legend.maximumLabelWidth ? Math.min(legend.maximumLabelWidth, (bounds.width - textPadding)) :\n (bounds.width - textPadding)), legend.textStyle, this.chart.enableRtl, legend.textWrap === 'AnyWhere', null, this.chart.themeStyle.legendLabelFont);\n }\n else {\n option.textCollection.push(option.text);\n }\n option.textSize.height = (legendHeight * option.textCollection.length);\n break;\n }\n };\n /**\n * To find html entities value for legend.\n *\n * @param {string} legendText - The text of the legend item.\n * @returns {string} - Converts the entities to normal string.\n */\n AccumulationLegend.prototype.convertHtmlEntities = function (legendText) {\n var text = (legendText).replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '\"').replace(' ', ' ').replace('¢', '¢').replace('£', '£').replace('¥', '¥').replace('€', '€').replace('©', '©').replace('®', '®');\n text = (text).replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '\"').replace(' ', ' ').\n replace('¢', '¢').replace('£', '£').replace('¥', '¥').replace('€', '€').replace('©', '©').replace('®', '®');\n return text;\n };\n /**\n * To find maximum column size for legend.\n *\n * @param {number[]} columns - Array containing the number of legend items in each column.\n * @param {number} width - The total width available.\n * @param {number} padding - The padding between legend items.\n * @param {number} rowWidth - The width of each row of legend items.\n * @returns {number} - Get a maximum columns.\n */\n AccumulationLegend.prototype.getMaxColumn = function (columns, width, padding, rowWidth) {\n var maxPageColumn = padding;\n this.maxColumnWidth = Math.max.apply(null, columns);\n for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n var column = columns_1[_i];\n maxPageColumn += this.maxColumnWidth;\n this.maxColumns++;\n if (maxPageColumn + padding > width) {\n maxPageColumn -= this.maxColumnWidth;\n this.maxColumns--;\n break;\n }\n }\n this.isPaging = (maxPageColumn < rowWidth) && (this.totalPages > 1);\n if (maxPageColumn === padding) {\n maxPageColumn = width;\n }\n this.maxColumns = Math.max(1, this.maxColumns);\n this.maxWidth = maxPageColumn;\n var columnWidth = this.maxColumnWidth + padding;\n var prevPage = 0;\n var columnCount = this.columnHeights.length;\n if (this.isPaging && this.isVertical) {\n for (var i = 1; i < columnCount; i++) {\n columnWidth += (this.maxColumnWidth + padding);\n if (columnWidth > width) {\n this.pageHeights.push(((prevPage !== i - 1) ? Math.max.apply(null, this.columnHeights.slice(prevPage, i - 1)) :\n this.columnHeights[prevPage]));\n columnWidth = this.maxColumnWidth + padding;\n prevPage = i;\n }\n }\n this.pageHeights.push(((prevPage !== columnCount - 1) ?\n Math.max.apply(null, this.columnHeights.slice(prevPage, columnCount - 1)) : this.columnHeights[prevPage]));\n this.totalPages = this.pageHeights.length;\n }\n return maxPageColumn;\n };\n /**\n * To find available width from legend x position.\n *\n * @param {number} tx - The x-coordinate of the legend.\n * @param {number} width - The total width available.\n * @returns {number} - Get a available width.\n */\n AccumulationLegend.prototype.getAvailWidth = function (tx, width) {\n if (this.isVertical) {\n width = this.maxWidth;\n }\n else if (!this.isVertical && this.isPaging && !this.legend.enablePages) {\n return width - tx - this.fivePixel;\n }\n return width - ((this.legend.padding * 2) + this.legend.shapeWidth + this.legend.shapePadding);\n };\n /**\n * To find legend rendering locations from legend items.\n *\n * @param {LegendOptions} legendOption - The legend options.\n * @param {ChartLocation} start - The starting location for legend rendering.\n * @param {number} textPadding - The padding between legend text items.\n * @param {LegendOptions} prevLegend - The previous legend options.\n * @param {Rect} rect - The bounding of the legend.\n * @param {number} count - The count of legend items.\n * @param {number} firstLegend - The index of the first legend item.\n * @returns {void}\n * @private\n */\n AccumulationLegend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend) {\n var padding = this.legend.padding;\n var previousLocation = prevLegend.location.y + this.maxItemHeight / 4 + (prevLegend.textCollection.length > 0 ?\n ((prevLegend.textCollection.length - 1) * this.maxItemHeight) : 0);\n if (this.isVertical) {\n if (count === firstLegend || (previousLocation + legendOption.textSize.height + padding > (rect.y + rect.height))) {\n legendOption.location.x = prevLegend.location.x + ((count === firstLegend) ? 0 : (!this.isRtlEnable) ?\n this.maxColumnWidth : -this.maxColumnWidth);\n legendOption.location.y = start.y;\n var textStartLoc = (this.legend.shapeWidth / 2) + padding;\n this.pageXCollections.push(legendOption.location.x + ((!this.isRtlEnable) ? -textStartLoc : textStartLoc));\n }\n else {\n legendOption.location.x = prevLegend.location.x;\n legendOption.location.y = prevLegend.location.y + prevLegend.textSize.height + this.itemPadding;\n }\n }\n else {\n var textWidth = textPadding + (this.legend.maximumLabelWidth ?\n this.legend.maximumLabelWidth : prevLegend.textSize.width);\n var previousBound = prevLegend.location.x + ((!this.isRtlEnable) ? textWidth : -textWidth);\n if (this.isWithinBounds(previousBound, (this.legend.maximumLabelWidth ? this.legend.maximumLabelWidth :\n legendOption.textSize.width) + textPadding - this.itemPadding, rect, this.legend.shapeWidth / 2)) {\n if (count !== firstLegend) {\n this.chartRowCount++;\n }\n legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n prevLegend.location.y + this.rowHeights[(this.chartRowCount - 2)] + padding;\n legendOption.location.x = start.x;\n }\n else {\n legendOption.location.y = prevLegend.location.y;\n legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n }\n }\n var availablewidth = this.getAvailWidth(legendOption.location.x, this.legendBounds.width);\n availablewidth = this.legend.maximumLabelWidth ? Math.min(this.legend.maximumLabelWidth, availablewidth) : availablewidth;\n if (this.legend.textOverflow === 'Ellipsis' && this.legend.textWrap === 'Normal') {\n legendOption.text = textTrim(+availablewidth.toFixed(4), legendOption.text, this.legend.textStyle, this.chart.enableRtl, this.chart.themeStyle.legendLabelFont);\n }\n };\n /**\n * Check whether legend group within legend bounds or not.\n *\n * @param {number} previousBound - The previous bound value.\n * @param {number} textWidth - The width of the legend text.\n * @param {Rect} legendBounds - The bounding of the legend.\n * @param {number} shapeWidth - The width of the legend shape.\n * @returns {boolean} - A boolean indicating whether the legend group is within the legend bounds.\n */\n AccumulationLegend.prototype.isWithinBounds = function (previousBound, textWidth, legendBounds, shapeWidth) {\n if (!this.isRtlEnable) {\n return (previousBound + textWidth) > (legendBounds.x + legendBounds.width + shapeWidth);\n }\n else {\n return (previousBound - textWidth) < (legendBounds.x - shapeWidth);\n }\n };\n /**\n * Finding the smart legend place according to positions.\n *\n * @param {Rect} labelBound - The bounding of the label.\n * @param {Rect} legendBound - The bounding of the legend.\n * @param {MarginModel} margin - The margin of the legend.\n * @returns {void}\n * @private\n */\n AccumulationLegend.prototype.getSmartLegendLocation = function (labelBound, legendBound, margin) {\n var space;\n switch (this.position) {\n case 'Left':\n space = ((labelBound.x - legendBound.width) - margin.left) / 2;\n legendBound.x = (labelBound.x - legendBound.width) < margin.left ? legendBound.x :\n (labelBound.x - legendBound.width) - space;\n break;\n case 'Right':\n space = ((this.chart.availableSize.width - margin.right) - (labelBound.x + labelBound.width + legendBound.width)) / 2;\n legendBound.x = (labelBound.x + labelBound.width + legendBound.width) > (this.chart.availableSize.width - margin.right) ?\n legendBound.x : (labelBound.x + labelBound.width + space);\n break;\n case 'Top':\n this.getTitleRect(this.chart);\n space = ((labelBound.y - legendBound.height) - (this.titleRect.y + this.titleRect.height)) / 2;\n legendBound.y = (labelBound.y - legendBound.height) < margin.top ? legendBound.y :\n (labelBound.y - legendBound.height) - space;\n break;\n case 'Bottom':\n space = ((this.chart.availableSize.height - margin.bottom) - (labelBound.y + labelBound.height + legendBound.height)) / 2;\n legendBound.y = labelBound.y + labelBound.height + legendBound.height > (this.chart.availableSize.height - margin.bottom) ?\n legendBound.y : (labelBound.y + labelBound.height) + space;\n break;\n }\n };\n /**\n * To get title rect.\n *\n * @param {AccumulationChart} accumulation - The accumulation chart control.\n * @returns {void}\n */\n AccumulationLegend.prototype.getTitleRect = function (accumulation) {\n if (!accumulation.title) {\n return null;\n }\n var titleSize = measureText(accumulation.title, accumulation.titleStyle, this.chart.themeStyle.legendTitleFont);\n this.titleRect = new Rect(accumulation.availableSize.width / 2 - titleSize.width / 2, accumulation.margin.top, titleSize.width, titleSize.height);\n };\n /**\n * To get legend by index.\n *\n * @param {number} index - The index of the legend.\n * @param {LegendOptions[]} legendCollections - The array of legend options.\n * @returns {LegendOptions} - Return legend index.\n */\n AccumulationLegend.prototype.legendByIndex = function (index, legendCollections) {\n for (var _i = 0, legendCollections_1 = legendCollections; _i < legendCollections_1.length; _i++) {\n var legend = legendCollections_1[_i];\n if (legend.pointIndex === index) {\n return legend;\n }\n }\n return null;\n };\n /**\n * To show or hide the legend on clicking the legend.\n *\n * @param {Event} event - The click event.\n * @returns {void}\n */\n AccumulationLegend.prototype.click = function (event) {\n var targetId = event.target.id.indexOf('_chart_legend_g_') > -1 ?\n event.target.firstChild['id'] : event.target.id;\n var chart = this.chart;\n var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_', this.legendID + '_shape_marker_'];\n // if ((this.chart).accumulationSelectionModule) {\n // // const selectedDataIndexes: Indexes[] = extend([], (this.chart)\n // // .accumulationSelectionModule.selectedDataIndexes, null, true);\n // }\n this.chart.animateSeries = false;\n for (var _i = 0, legendItemsId_2 = legendItemsId; _i < legendItemsId_2.length; _i++) {\n var id = legendItemsId_2[_i];\n if (targetId.indexOf(id) > -1) {\n var pointIndex = parseInt(targetId.split(id)[1], 10);\n if (this.chart.legendSettings.toggleVisibility && !isNaN(pointIndex)) {\n var currentSeries = this.chart.visibleSeries[0];\n var point = pointByIndex(pointIndex, currentSeries.points);\n var legendOption = this.legendByIndex(pointIndex, this.legendCollections);\n var legendClickArgs = {\n legendText: legendOption.text, legendShape: legendOption.shape,\n chart: chart.isBlazor ? {} : chart, series: currentSeries, point: point,\n name: legendClick, cancel: false\n };\n this.chart.trigger(legendClick, legendClickArgs);\n if (!legendClickArgs.cancel) {\n point.visible = !point.visible;\n legendOption.visible = point.visible;\n currentSeries.sumOfPoints += point.visible ? point.y : -point.y;\n chart.redraw = chart.enableAnimation;\n this.sliceVisibility(pointIndex, point.visible);\n chart.removeSvg();\n //To remove the blazor templates\n blazorTemplatesReset(chart);\n this.chart.refreshPoints(currentSeries.points);\n this.chart.calculateBounds();\n this.chart.renderElements();\n }\n }\n else if (this.chart.accumulationSelectionModule && !isNaN(pointIndex)) {\n this.chart.accumulationSelectionModule.legendSelection(this.chart, 0, pointIndex, event.target, event.type);\n }\n else if (this.chart.accumulationHighlightModule && !isNaN(pointIndex)) {\n this.chart.accumulationHighlightModule.legendSelection(this.chart, 0, pointIndex, event.target, event.type);\n }\n }\n }\n if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n this.changePage(event, true);\n }\n else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n this.changePage(event, false);\n }\n chart.redraw = false;\n };\n /**\n * To translate the point elements by index and position.\n *\n * @param {number} index - The index of the point element.\n * @param {boolean} isVisible - A boolean value indicating whether the point is visible.\n * @returns {void}\n */\n AccumulationLegend.prototype.sliceVisibility = function (index, isVisible) {\n var sliceId = this.chart.element.id + '_Series_0_Point_';\n if (this.chart.visibleSeries[0].dataLabel.visible) {\n sliceId = this.chart.element.id + '_datalabel_Series_0_';\n this.sliceAnimate(getElement(sliceId + 'g_' + index), isVisible);\n }\n };\n /**\n * Slice animation.\n *\n * @param {Element} element - slice element.\n * @param {boolean} isVisible - boolean value of slice.\n * @returns {void}\n */\n AccumulationLegend.prototype.sliceAnimate = function (element, isVisible) {\n if (!element) {\n return null;\n }\n new Animation({}).animate(element, {\n duration: 300,\n delay: 0,\n name: isVisible ? 'FadeIn' : 'FadeOut',\n end: function (args) {\n args.element.style.visibility = isVisible ? 'visible' : 'hidden';\n }\n });\n };\n /**\n * Get module name.\n *\n * @returns {string} - Return module name.\n */\n AccumulationLegend.prototype.getModuleName = function () {\n return 'AccumulationLegend';\n };\n /**\n * To destroy the Legend.\n *\n * @returns {void}\n * @private\n */\n AccumulationLegend.prototype.destroy = function () {\n /**\n * Destroy method calling here.\n */\n this.removeEventListener();\n };\n return AccumulationLegend;\n}(BaseLegend));\nexport { AccumulationLegend };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart Tooltip file.\n */\nimport { Browser, remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { AccPointData, withInBounds, indexFinder } from '../../common/utils/helper';\n//import { Rect } from '@syncfusion/ej2-svg-base';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\nimport { tooltipRender } from '../../common/model/constants';\n/**\n * `AccumulationTooltip` module is used to render tooltip for accumulation chart.\n */\nvar AccumulationTooltip = /** @class */ (function (_super) {\n __extends(AccumulationTooltip, _super);\n function AccumulationTooltip(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.accumulation = accumulation;\n _this.addEventListener();\n _this.template = _this.accumulation.tooltip.template;\n return _this;\n }\n /**\n * Adds an event listener.\n *\n * @hidden\n * @returns {void}\n */\n AccumulationTooltip.prototype.addEventListener = function () {\n if (this.accumulation.isDestroyed) {\n return;\n }\n this.accumulation.on(Browser.isPointer ? 'pointerleave' : 'mouseleave', this.mouseLeaveHandler, this);\n this.accumulation.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n this.accumulation.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n };\n AccumulationTooltip.prototype.mouseLeaveHandler = function () {\n this.removeTooltip(this.accumulation.tooltip.fadeOutDuration);\n };\n AccumulationTooltip.prototype.mouseUpHandler = function (e) {\n var control = this.accumulation;\n if (control.tooltip.enable && control.isTouch && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n this.removeTooltip(2000);\n }\n };\n AccumulationTooltip.prototype.mouseMoveHandler = function (e) {\n var control = this.accumulation;\n e.stopPropagation(); //Prevent event trigger to parent in nested rendering case.\n // Tooltip for chart series.\n if (control.tooltip.enable && withInBounds(control.mouseX, control.mouseY, control.initialClipRect)) {\n this.tooltip(e);\n }\n };\n /**\n * Renders the tooltip.\n *\n * @param {PointerEvent | TouchEvent} event - The mouse move event or touch event.\n * @returns {void}\n */\n AccumulationTooltip.prototype.tooltip = function (event) {\n this.renderSeriesTooltip(this.accumulation, this.getPieData(event, this.accumulation));\n };\n /**\n * @private\n */\n AccumulationTooltip.prototype.renderSeriesTooltip = function (chart, data) {\n var svgElement = this.getElement(this.element.id + '_tooltip_svg');\n var isTooltip = svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0;\n var tooltipDiv = this.getTooltipElement(isTooltip);\n var isFirst = !isTooltip;\n this.currentPoints = [];\n if (data.point && (!this.previousPoints[0] || (this.previousPoints[0].point !== data.point))) {\n if (this.previousPoints[0] && data.point.index === this.previousPoints[0].point.index\n && data.series.index === this.previousPoints[0].series.index) {\n return null;\n }\n if (this.pushData(data, isFirst, tooltipDiv, false)) {\n this.triggerTooltipRender(data, isFirst, this.getTooltipText(data, chart.tooltip), this.findHeader(data));\n }\n }\n else {\n if (!data.point && this.isRemove) {\n this.removeTooltip(this.accumulation.tooltip.fadeOutDuration);\n this.isRemove = false;\n }\n }\n };\n AccumulationTooltip.prototype.triggerTooltipRender = function (point, isFirst, textCollection, headerText) {\n var _this = this;\n //let template: string;\n var tooltip = this.chart.tooltip;\n var argsData = {\n cancel: false, name: tooltipRender, text: textCollection, point: point.point, textStyle: this.textStyle,\n series: this.accumulation.isBlazor ? {} : point.series, headerText: headerText,\n data: {\n pointX: point.point.x, pointY: point.point.y, seriesIndex: point.series.index,\n pointIndex: point.point.index, pointText: point.point.text, seriesName: point.series.name\n }\n };\n var tooltipSuccess = function (argsData) {\n if (!argsData.cancel) {\n _this.formattedText = _this.formattedText.concat(argsData.text);\n _this.text = _this.formattedText;\n _this.headerText = argsData.headerText;\n _this.createTooltip(_this.chart, isFirst, { x: (tooltip.location.x !== null) ? tooltip.location.x :\n point.point.symbolLocation.x, y: (tooltip.location.y !== null) ? tooltip.location.y : point.point.symbolLocation.y }, point.series.clipRect, point.point, !tooltip.enableMarker ? [] : ['Circle'], 0, _this.chart.initialClipRect, false, null, point.point, _this.template ? argsData.template : '');\n }\n else {\n _this.removeHighlight();\n remove(_this.getElement(_this.element.id + '_tooltip'));\n }\n _this.isRemove = true;\n };\n tooltipSuccess.bind(this, point);\n this.chart.trigger(tooltipRender, argsData, tooltipSuccess);\n };\n AccumulationTooltip.prototype.getPieData = function (e, chart) {\n var target = e.target;\n var id = indexFinder(target.id, true);\n if (!isNaN(id.series)) {\n var seriesIndex = id.series;\n var pointIndex = id.point;\n if (!isNullOrUndefined(seriesIndex) && !isNaN(seriesIndex) && !isNullOrUndefined(pointIndex) && !isNaN(pointIndex)) {\n var series = this.getSeriesFromIndex(seriesIndex, chart.visibleSeries);\n if (series.enableTooltip) {\n return new AccPointData(series.points[pointIndex], series);\n }\n }\n }\n return new AccPointData(null, null);\n };\n /**\n * To get series from index.\n *\n * @param {number} index - The index of the series to retrieve.\n * @param {AccumulationSeries[]} visibleSeries - The array of visible series in the accumulation chart.\n * @returns {AccumulationSeries} - The series retrieved from the specified index.\n */\n AccumulationTooltip.prototype.getSeriesFromIndex = function (index, visibleSeries) {\n return visibleSeries[0];\n };\n AccumulationTooltip.prototype.getTooltipText = function (data, tooltip) {\n var series = data.series;\n var format = tooltip.format ? tooltip.format : '${point.x} : ${point.y}';\n format = this.accumulation.useGroupingSeparator ? format.replace('${point.y}', '${point.separatorY}') : format;\n return this.parseTemplate(data.point, series, format);\n };\n AccumulationTooltip.prototype.findHeader = function (data) {\n if (this.header === '') {\n return '';\n }\n this.header = this.parseTemplate(data.point, data.series, this.header);\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n return this.header;\n }\n return '';\n };\n AccumulationTooltip.prototype.parseTemplate = function (point, series, format) {\n var value;\n var textValue;\n var regExp = RegExp;\n for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n var dataValue = _a[_i];\n value = new regExp('${point' + '.' + dataValue + '}', 'gm');\n format = format.replace(value.source, point[dataValue]);\n }\n for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n var dataValue = _c[_b];\n value = new regExp('${series' + '.' + dataValue + '}', 'gm');\n textValue = series[dataValue];\n format = format.replace(value.source, textValue);\n }\n return format;\n };\n /**\n * Get module name.\n *\n * @returns {string} - Returns the module name.\n */\n AccumulationTooltip.prototype.getModuleName = function () {\n return 'AccumulationTooltip';\n };\n /**\n * To destroy the Tooltip.\n *\n * @returns {void}\n * @private\n */\n AccumulationTooltip.prototype.destroy = function () {\n /**\n * Destroy method calling here\n */\n };\n return AccumulationTooltip;\n}(BaseTooltip));\nexport { AccumulationTooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * AccumulationChart DataLabel module file\n */\nimport { extend, createElement, getValue, isNullOrUndefined, animationMode } from '@syncfusion/ej2-base';\nimport { Rect, Size, PathOption, measureText, TextOption } from '@syncfusion/ej2-svg-base';\nimport { ChartLocation, degreeToLocation, isOverlap, stringToNumber, getAngle, appendChildElement } from '../../common/utils/helper';\nimport { textTrim, subtractThickness, Thickness, getElement } from '../../common/utils/helper';\nimport { removeElement, RectOption, textElement, showTooltip } from '../../common/utils/helper';\nimport { colorNameToHex, convertHexToColor, containsRect, textWrap, CircleOption } from '../../common/utils/helper';\nimport { getSeriesFromIndex } from '../model/acc-base';\nimport { textRender } from '../../common/model/constants';\nimport { getFontStyle, createTemplate, measureElementRect, templateAnimate } from '../../common/utils/helper';\nimport { AccumulationBase } from './accumulation-base';\n/**\n * AccumulationDataLabel module used to render `dataLabel`.\n */\nvar AccumulationDataLabel = /** @class */ (function (_super) {\n __extends(AccumulationDataLabel, _super);\n function AccumulationDataLabel(accumulation) {\n var _this = _super.call(this, accumulation) || this;\n _this.rightSideRenderingPoints = [];\n _this.leftSideRenderingPoints = [];\n _this.id = accumulation.element.id + '_datalabel_Series_';\n return _this;\n }\n /**\n * Method to get datalabel text location.\n *\n * @private\n * @param {AccPoints} point - The data point for which to calculate the label text location.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The data label settings for the series.\n * @param {Size} textSize - The size of the text to be displayed.\n * @param {AccPoints[]} points - The array of data points in the series.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.getDataLabelPosition = function (point, dataLabel, textSize, points) {\n var radius = this.isCircular() ? (!this.isVariousRadius() ? this.accumulation.pieSeriesModule.labelRadius :\n this.accumulation.pieSeriesModule.getLabelRadius(this.accumulation.visibleSeries[0], point)) :\n this.getLabelDistance(point, dataLabel);\n //let radius: number = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n if (this.accumulation.title) {\n var titleSize = measureText(this.accumulation.title, this.accumulation.titleStyle, this.accumulation.themeStyle.datalabelFont);\n this.titleRect = new Rect(this.accumulation.availableSize.width / 2 - titleSize.width / 2, this.accumulation.margin.top, titleSize.width, titleSize.height);\n }\n this.getLabelRegion(point, dataLabel.position, textSize, radius, this.marginValue);\n point.labelAngle = point.midAngle;\n point.labelPosition = dataLabel.position;\n if (this.accumulation.enableSmartLabels) {\n this.getSmartLabel(point, dataLabel, textSize, points);\n }\n };\n /**\n * Method to get datalabel bound.\n */\n AccumulationDataLabel.prototype.getLabelRegion = function (point, position, textSize, labelRadius, margin, endAngle) {\n if (endAngle === void 0) { endAngle = 0; }\n var labelAngle = endAngle || point.midAngle;\n var space = 20;\n var location = degreeToLocation(labelAngle, labelRadius, this.isCircular() ? this.center :\n this.getLabelLocation(point, position));\n location.y = (position === 'Inside') ? (location.y - textSize.height / 2) : location.y;\n location.x = (position === 'Inside') ? (location.x - textSize.width / 2) : location.x;\n point.labelRegion = new Rect(location.x, location.y, textSize.width + (margin * 2), textSize.height + (margin * 2));\n if (position === 'Outside') {\n point.labelRegion.y -= point.labelRegion.height / 2;\n if (labelAngle >= 90 && labelAngle <= 270) {\n point.labelRegion.x -= (point.labelRegion.width + space);\n }\n else {\n point.labelRegion.x += space;\n }\n }\n };\n /**\n * Method to get data label collection.\n *\n * @param {AccPoints} point - The data point for which to calculate the label collection.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The data label settings for the series.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.calculateLabelCollection = function (point, dataLabel) {\n if (point.argsData.template !== null) {\n return null;\n }\n var position = point.labelPosition || dataLabel.position;\n var labelRadius = this.isCircular() ? (!this.isVariousRadius() ? this.accumulation.pieSeriesModule.labelRadius :\n this.accumulation.pieSeriesModule.getLabelRadius(this.accumulation.visibleSeries[0], point)) :\n this.getLabelDistance(point, dataLabel);\n var radius = (!this.isVariousRadius() ?\n (this.accumulation.pieSeriesModule.radius - this.accumulation.pieSeriesModule.innerRadius) :\n this.accumulation.pieSeriesModule.getLabelRadius(this.accumulation.visibleSeries[0], point));\n var location = degreeToLocation(point.midAngle, labelRadius, this.isCircular() ? this.center :\n this.getLabelLocation(point, position));\n var padding = 20;\n var maxWidth = dataLabel.maxWidth;\n if (!maxWidth) {\n if (position === 'Outside') {\n maxWidth = this.isCircular() ? (location.x >= this.center.x) ? (this.areaRect.x + this.areaRect.width - location.x) :\n (location.x - this.areaRect.x) : (location.x >= point.region.x) ?\n (this.areaRect.x + this.areaRect.width - location.x) : (location.x - this.areaRect.x);\n }\n else {\n maxWidth = this.isCircular() ? (radius - padding) : point.region.width;\n }\n }\n if ((point.label.indexOf('
') !== -1)) {\n point.labelCollection = point.label.split('
');\n }\n else if (dataLabel.textWrap === 'Normal' && dataLabel.textOverflow === 'Ellipsis') {\n point.labelCollection[0] = textTrim(maxWidth, point.label, point.argsData.font, this.accumulation.enableRtl, this.accumulation.themeStyle.datalabelFont);\n }\n else if (dataLabel.textWrap === 'Wrap' || dataLabel.textWrap === 'AnyWhere') {\n point.labelCollection = textWrap(point.label, maxWidth, point.argsData.font, this.accumulation.enableRtl, dataLabel.textWrap === 'AnyWhere', dataLabel.textOverflow === 'Clip', this.accumulation.themeStyle.datalabelFont);\n }\n else {\n point.labelCollection[0] = point.label;\n }\n };\n /**\n * To calculate label collection text size.\n *\n * @param {string[]} labelCollection - The collection of label texts.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The data label settings for the series.\n * @returns {Size} - The size of the label text collection.\n */\n AccumulationDataLabel.prototype.getTextSize = function (labelCollection, dataLabel) {\n var height = 0;\n var font = dataLabel.font;\n var width = dataLabel.maxWidth ? dataLabel.maxWidth : 0;\n var textSize;\n for (var i = 0; i < labelCollection.length; i++) {\n textSize = measureText(labelCollection[i], font, this.accumulation.themeStyle.datalabelFont);\n width = Math.max(textSize.width, width);\n height += textSize.height;\n }\n if (dataLabel.textOverflow === 'Clip' && dataLabel.textWrap !== 'Normal' && dataLabel.maxWidth) {\n width = dataLabel.maxWidth;\n }\n return (new Size(width, height));\n };\n /**\n * Method to get datalabel smart position.\n *\n * @param {AccPoints} point - The data point for which to calculate the label smart position.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The data label settings for the series.\n * @param {Size} textSize - The size of the text.\n * @param {AccPoints[]} points - The collection of data points.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.getSmartLabel = function (point, dataLabel, textSize, points) {\n var circular = this.isCircular();\n var labelRadius = circular ? this.radius : this.getLabelDistance(point, dataLabel);\n var connectorLength = circular ? (dataLabel.connectorStyle.length || '4%') :\n '0px';\n labelRadius += stringToNumber(connectorLength, labelRadius);\n var previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (dataLabel.position === 'Inside') {\n // `4` is padding adding to height and width of label region.\n point.labelRegion.height -= 4;\n point.labelRegion.width -= 4;\n if (previousPoint && previousPoint.labelRegion && !dataLabel.enableRotation &&\n (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points)) || !circular && !containsRect(point.region, point.labelRegion)) {\n point.labelPosition = 'Outside';\n if (!circular) {\n labelRadius = this.getLabelDistance(point, dataLabel);\n }\n this.calculateLabelCollection(point, dataLabel);\n textSize = this.getTextSize(point.labelCollection, dataLabel);\n textSize.height += 4; // 4 for calculation with padding for smart label shape\n textSize.width += 4;\n this.getLabelRegion(point, point.labelPosition, textSize, labelRadius, this.marginValue);\n previousPoint = this.findPreviousPoint(points, point.index, point.labelPosition);\n if (previousPoint && (isOverlap(point.labelRegion, previousPoint.labelRegion) ||\n this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n }\n else {\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points) || this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius, textSize, this.marginValue);\n }\n }\n if (this.isOverlapping(point, points) && (this.accumulation.type === 'Pyramid' || this.accumulation.type === 'Funnel')) {\n var position = 'OutsideLeft';\n var space = 20;\n var labelAngle = point.midAngle || 0;\n var labelRadius_1 = circular ? this.radius : this.getLabelDistance(point, dataLabel);\n var location_1 = degreeToLocation(labelAngle, -labelRadius_1, this.isCircular() ? this.center :\n this.getLabelLocation(point, position));\n point.labelRegion = new Rect(location_1.x, location_1.y, textSize.width + (this.marginValue * 2), textSize.height + (this.marginValue * 2));\n point.labelRegion.y -= point.labelRegion.height / 2;\n point.labelRegion.x = point.labelRegion.x - space - point.labelRegion.width;\n if (previousPoint && previousPoint.labelRegion && (isOverlap(point.labelRegion, previousPoint.labelRegion)\n || this.isOverlapping(point, points) || this.isConnectorLineOverlapping(point, previousPoint))) {\n this.setOuterSmartLabel(previousPoint, point, dataLabel.border.width, labelRadius_1, textSize, this.marginValue);\n }\n }\n };\n /**\n * To find trimmed datalabel tooltip needed.\n *\n * @param {Event} e - The move event.\n * @param {number} x - The x-coordinate.\n * @param {number} y - The y-coordinate.\n * @param {boolean} isTouch - Indicates if the interaction is touch-based.\n * @returns {void}\n * @private\n */\n AccumulationDataLabel.prototype.move = function (e, x, y, isTouch) {\n var _this = this;\n if (e.target.textContent.indexOf('...') > -1) {\n var targetId = e.target.id.split(this.id);\n if (targetId.length === 2) {\n var seriesIndex = parseInt(targetId[1].split('_text_')[0], 10);\n var pointIndex = parseInt(targetId[1].split('_text_')[1], 10);\n if (!isNaN(seriesIndex) && !isNaN(pointIndex)) {\n if (isTouch) {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n var point = getSeriesFromIndex(seriesIndex, (this.accumulation).visibleSeries).points[pointIndex];\n showTooltip(point.text || point.y.toString(), x, y, this.areaRect.width, this.accumulation.element.id + '_EJ2_Datalabel_Tooltip', getElement(this.accumulation.element.id + '_Secondary_Element'), null, null, this.accumulation.initialClipRect);\n }\n }\n }\n else {\n removeElement(this.accumulation.element.id + '_EJ2_Datalabel_Tooltip');\n }\n if (isTouch) {\n clearTimeout(this.clearTooltip);\n this.clearTooltip = +setTimeout(function () { removeElement(_this.accumulation.element.id + '_EJ2_Datalabel_Tooltip'); }, 1000);\n }\n };\n /**\n * To find previous valid label point.\n *\n * @param {AccPoints[]} points - The array of accumulation points.\n * @param {number} index - The index of the current point.\n * @param {AccumulationLabelPosition} position - The position of the label.\n * @returns {AccPoints} - Find the previous value of accumulation point.\n */\n AccumulationDataLabel.prototype.findPreviousPoint = function (points, index, position) {\n var point = points[0];\n for (var i = index - 1; i >= 0; i--) {\n point = points[i];\n if (point.visible && point.labelVisible && point.labelRegion && point.labelPosition === position) {\n return point;\n }\n }\n return null;\n };\n /**\n * To find current point datalabel is overlapping with other points.\n *\n * @param {AccPoints} currentPoint - The current point.\n * @param {AccPoints[]} points - The array of accumulation points.\n * @returns {boolean} - It returns boolean value of overlapping.\n */\n AccumulationDataLabel.prototype.isOverlapping = function (currentPoint, points) {\n for (var i = currentPoint.index - 1; i >= 0; i--) {\n if (points[i].visible && points[i].labelVisible &&\n points[i].labelRegion && currentPoint.labelRegion &&\n currentPoint.labelVisible && isOverlap(currentPoint.labelRegion, points[i].labelRegion)) {\n return true;\n }\n }\n return false;\n };\n /**\n * To get text trimmed while exceeds the accumulation chart area.\n *\n * @param {AccPoints} point - The accumulation point.\n * @param {Rect} rect - The area of the accumulation chart.\n * @param {FontModel} font - The font settings.\n * @param {string} position - The position of the data label.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The data label settings.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.textTrimming = function (point, rect, font, position, dataLabel) {\n if (isOverlap(point.labelRegion, rect)) {\n var size = point.labelRegion.width;\n if (position === 'Right') {\n size = rect.x - point.labelRegion.x;\n }\n else if (position === 'Left') {\n size = point.labelRegion.x - (rect.x + rect.width);\n if (size < 0) {\n size += point.labelRegion.width;\n point.labelRegion.x = rect.x + rect.width;\n }\n }\n else if (position === 'InsideRight') {\n size = (rect.x + rect.width) - point.labelRegion.x;\n }\n else if (position === 'InsideLeft') {\n size = (point.labelRegion.x + point.labelRegion.width) - rect.x;\n if (size < point.labelRegion.width) {\n point.labelRegion.x = rect.x;\n }\n }\n else if (this.accumulation.enableSmartLabels) {\n this.setPointVisibileFalse(point);\n }\n if (point.labelVisible && point.labelRegion) {\n if ((point.label.indexOf('
') !== -1)) {\n point.labelCollection = point.label.split('
');\n }\n else if (size < point.labelRegion.width) {\n if (dataLabel.textWrap === 'Normal' && dataLabel.textOverflow === 'Ellipsis') {\n point.labelCollection[0] = textTrim(size - (this.marginValue * 2), point.label, font, this.accumulation.enableRtl, this.accumulation.themeStyle.datalabelFont);\n }\n else if (dataLabel.textWrap === 'Wrap' || dataLabel.textWrap === 'AnyWhere') {\n point.labelCollection = textWrap(point.label, size - (this.marginValue * 2), font, this.accumulation.enableRtl, dataLabel.textWrap === 'AnyWhere', dataLabel.textOverflow === 'Clip', this.accumulation.themeStyle.datalabelFont);\n }\n point.labelRegion.width = size;\n }\n for (var i = 0; i < point.labelCollection.length; i++) {\n if (point.labelCollection[i].length === 3 && point.labelCollection[i].indexOf('...') > -1) {\n this.setPointVisibileFalse(point);\n break;\n }\n }\n }\n }\n };\n /**\n * To set point label visible and region to disable.\n *\n * @param {AccPoints} point - The accumulation point.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.setPointVisibileFalse = function (point) {\n point.labelVisible = false;\n point.labelRegion = null;\n };\n /**\n * To set point label visible to enable.\n *\n * @param {AccPoints} point - The accumulation point.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.setPointVisibleTrue = function (point) {\n point.labelVisible = true;\n };\n /**\n * To set datalabel angle position for outside labels.\n *\n * @param {AccPoints} previousPoint - The previous accumulation point.\n * @param {AccPoints} point - The accumulation point.\n * @param {number} border - The border size.\n * @param {number} labelRadius - The radius for the labels.\n * @param {Size} textsize - The size of the labels.\n * @param {number} margin - The margin value.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.setOuterSmartLabel = function (previousPoint, point, border, labelRadius, textsize, margin) {\n if (!this.isCircular()) {\n this.setSmartLabelForSegments(point, previousPoint);\n }\n else {\n var labelAngle = this.getOverlappedAngle(previousPoint.labelRegion, point.labelRegion, point.midAngle, border * 2);\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n if (labelAngle > point.endAngle) {\n labelAngle = point.midAngle;\n //this.setPointVisibileFalse(point);\n }\n point.labelAngle = labelAngle;\n while (point.labelVisible && (isOverlap(previousPoint.labelRegion, point.labelRegion) || labelAngle <= previousPoint.labelAngle\n || labelAngle <= point.midAngle * 0.9 || this.isConnectorLineOverlapping(point, previousPoint))) {\n if (labelAngle > point.endAngle) {\n //this.setPointVisibileFalse(point);\n break;\n }\n point.labelAngle = labelAngle;\n this.getLabelRegion(point, 'Outside', textsize, labelRadius, margin, labelAngle);\n labelAngle += 0.1;\n }\n }\n };\n /**\n * Sets smart label positions for funnel and pyramid series.\n *\n * @param {AccPoints} point - The accumulation point.\n * @param {AccPoints} prevPoint - The previous point.\n * @returns {void} setSmartLabelForSegments.\n */\n AccumulationDataLabel.prototype.setSmartLabelForSegments = function (point, prevPoint) {\n var textRegion = point.labelRegion;\n //let overlapWidth: number = prevPoint.labelRegion.x + prevPoint.labelRegion.width - textRegion.x;\n var overlapHeight = this.accumulation.type === 'Funnel' ?\n prevPoint.labelRegion.y - (textRegion.y + textRegion.height) :\n point.labelRegion.y - (prevPoint.labelRegion.y + prevPoint.labelRegion.height);\n if (overlapHeight < 0) {\n point.labelRegion.y += this.accumulation.type === 'Funnel' ? overlapHeight : -overlapHeight;\n }\n };\n /**\n * To find connector line overlapping.\n *\n * @param {AccPoints} point - The accumulation point.\n * @param {AccPoints} previous - The previous point.\n * @returns {boolean} - To find connector line overlapping or not.\n */\n AccumulationDataLabel.prototype.isConnectorLineOverlapping = function (point, previous) {\n var position;\n if (!this.isCircular() && point.labelRegion.x < point.region.x) {\n position = 'outsideLeft';\n }\n var start = this.getLabelLocation(point, position);\n var end = new ChartLocation(0, 0);\n this.getEdgeOfLabel(point.labelRegion, point.labelAngle, end, 0, point);\n var previousstart = this.getLabelLocation(previous);\n var previousend = new ChartLocation(0, 0);\n this.getEdgeOfLabel(previous.labelRegion, previous.labelAngle, previousend, 0, point);\n return this.isLineRectangleIntersect(start, end, point.labelRegion) ||\n this.isLineRectangleIntersect(start, end, previous.labelRegion) ||\n this.isLineRectangleIntersect(previousstart, previousend, point.labelRegion);\n };\n /**\n * To find two rectangle intersect.\n *\n * @param {ChartLocation} line1 - The first line.\n * @param {ChartLocation} line2 - The second line.\n * @param {Rect} rect - The rectangle to check against.\n * @returns {boolean} - To find line rectangle intersect value.\n */\n AccumulationDataLabel.prototype.isLineRectangleIntersect = function (line1, line2, rect) {\n var rectPoints = [\n new ChartLocation(Math.round(rect.x), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round(rect.y)),\n new ChartLocation(Math.round((rect.x + rect.width)), Math.round((rect.y + rect.height))),\n new ChartLocation(Math.round(rect.x), Math.round((rect.y + rect.height)))\n ];\n line1.x = Math.round(line1.x);\n line1.y = Math.round(line1.y);\n line2.x = Math.round(line2.x);\n line2.y = Math.round(line2.y);\n for (var i = 0; i < rectPoints.length; i++) {\n if (this.isLinesIntersect(line1, line2, rectPoints[i], rectPoints[(i + 1) % rectPoints.length])) {\n return true;\n }\n }\n return false;\n };\n /**\n * To find two line intersect.\n *\n * @param {ChartLocation} point1 - The first point of the first line.\n * @param {ChartLocation} point2 - The second point of the first line.\n * @param {ChartLocation} point11 - The first point of the second line.\n * @param {ChartLocation} point12 - The second point of the second line.\n * @returns {boolean} - To find line intersect or not.\n */\n AccumulationDataLabel.prototype.isLinesIntersect = function (point1, point2, point11, point12) {\n var a1 = point2.y - point1.y;\n var b1 = point1.x - point2.x;\n var c1 = a1 * point1.x + b1 * point1.y;\n var a2 = point12.y - point11.y;\n var b2 = point11.x - point12.x;\n var c2 = a2 * point11.x + b2 * point11.y;\n var delta = a1 * b2 - a2 * b1;\n if (delta !== 0) {\n var x = (b2 * c1 - b1 * c2) / delta;\n var y = (a1 * c2 - a2 * c1) / delta;\n var lies = Math.min(point1.x, point2.x) <= x && x <= Math.max(point1.x, point2.x);\n lies = lies && Math.min(point1.y, point2.y) <= y && y <= Math.max(point1.y, point2.y);\n lies = lies && Math.min(point11.x, point12.x) <= x && x <= Math.max(point11.x, point12.x);\n lies = lies && Math.min(point11.y, point12.y) <= y && y <= Math.max(point11.y, point12.y);\n return lies;\n }\n return false;\n };\n /**\n * To get two rectangle overlapping angles.\n *\n * @param {Rect} first - The first rectangle.\n * @param {Rect} second - The second rectangle.\n * @param {number} angle - The angle.\n * @param {number} padding - The padding.\n * @returns {number} - Get overlapped angle.\n */\n AccumulationDataLabel.prototype.getOverlappedAngle = function (first, second, angle, padding) {\n var x = first.x;\n if (angle >= 90 && angle <= 270) {\n second.y = first.y - (padding + second.height / 2);\n x = first.x + first.width;\n }\n else {\n second.y = first.y + first.height + padding;\n }\n return getAngle(this.center, new ChartLocation(x, second.y));\n };\n /**\n * To get connector line path.\n *\n * @param {Rect} label - The label.\n * @param {AccPoints} point - The accumulation point.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The data label settings.\n * @param {number} end - The end.\n * @returns {string} - Get connector line path.\n */\n AccumulationDataLabel.prototype.getConnectorPath = function (label, point, dataLabel, end) {\n if (end === void 0) { end = 0; }\n var connector = dataLabel.connectorStyle;\n var labelRadius = this.isCircular() ? (!this.isVariousRadius() ? this.labelRadius :\n this.accumulation.pieSeriesModule.getLabelRadius(this.accumulation.visibleSeries[0], point)) :\n this.getLabelDistance(point, dataLabel);\n //let labelRadius: number = this.isCircular() ? this.labelRadius : this.getLabelDistance(point, dataLabel);\n var start = this.getConnectorStartPoint(point, connector);\n var labelAngle = this.accumulation.enableSmartLabels ? point.midAngle : end || point.midAngle;\n var middle = new ChartLocation(0, 0);\n var endPoint = this.getEdgeOfLabel(label, labelAngle, middle, connector.width, point);\n if (connector.type === 'Curve') {\n if (this.isCircular()) {\n var r = labelRadius - (this.isVariousRadius() ? stringToNumber(point.sliceRadius, this.accumulation.pieSeriesModule.size / 2) :\n this.radius);\n //let r: number = labelRadius - this.radius;\n if (point.isLabelUpdated) {\n middle = this.getPerpendicularDistance(start, point);\n }\n else {\n middle = degreeToLocation(labelAngle, labelRadius - (r / 2), this.center);\n if (point.labelPosition === 'Outside' && dataLabel.position === 'Inside') {\n middle = degreeToLocation(labelAngle, labelRadius - r * 1.25, this.center);\n }\n }\n return 'M ' + start.x + ' ' + start.y + ' Q ' + middle.x + ' ' + middle.y + ' ' + endPoint.x + ' ' + endPoint.y;\n }\n else {\n return this.getPolyLinePath(start, endPoint);\n }\n }\n else {\n return 'M ' + start.x + ' ' + start.y + ' L ' + middle.x + ' ' + middle.y + ' L ' + endPoint.x + ' ' + endPoint.y;\n }\n };\n /**\n * Finds the curved path for funnel/pyramid data label connectors.\n *\n * @param {ChartLocation} start - The start location.\n * @param {ChartLocation} end - The end location.\n * @returns {string} - Get poly line path.\n */\n AccumulationDataLabel.prototype.getPolyLinePath = function (start, end) {\n var controlPoints = [start, end];\n if (start.y === end.y) {\n return 'M ' + start.x + ' ' + start.y + ' L ' + end.x + ' ' + end.y;\n }\n var path = 'M';\n for (var i = 0; i <= 16; i++) {\n var t = i / 16;\n var points = this.getBezierPoint(t, controlPoints, 0, 2);\n path += points.x + ',' + points.y;\n if (i !== 16) {\n path += ' L';\n }\n }\n return path;\n };\n /**\n * Finds the bezier point for funnel/pyramid data label connectors.\n *\n * @param {number} t - The parameter value.\n * @param {ChartLocation[]} controlPoints - The control points for the bezier point.\n * @param {number} index - The index of the point.\n * @param {number} count - The total count of points.\n * @returns {ChartLocation} - Get bazier point.\n */\n AccumulationDataLabel.prototype.getBezierPoint = function (t, controlPoints, index, count) {\n if (count === 1) {\n return controlPoints[index];\n }\n var p0 = this.getBezierPoint(t, controlPoints, index, count - 1);\n var p1 = this.getBezierPoint(t, controlPoints, index + 1, count - 1);\n var x = (p0.x) ? p0.x : p0.x;\n var y = (p0.y) ? p0.y : p0.y;\n var x1 = (p1.x) ? p1.x : p1.x;\n var y1 = (p1.y) ? p1.y : p1.y;\n var x2 = (1 - t) * x + t * x1;\n var y2 = (1 - t) * y + t * y1;\n if (p0.x) {\n return { x: x2, y: y2 };\n }\n else {\n return { x: x2, y: y2 };\n }\n };\n /**\n * To get label edges based on the center and label rect position.\n *\n * @param {Rect} labelshape - The label shape.\n * @param {number} angle - The angle of the label.\n * @param {ChartLocation} middle - The middle point of the label.\n * @param {number} border - The border value.\n * @param {AccPoints} point - The accumulation point.\n * @returns {ChartLocation} - Get label edge value.\n */\n AccumulationDataLabel.prototype.getEdgeOfLabel = function (labelshape, angle, middle, border, point) {\n if (border === void 0) { border = 1; }\n var edge = new ChartLocation(labelshape.x, labelshape.y);\n var space = 10;\n if (angle >= 90 && angle <= 270) {\n edge.x += labelshape.width + border / 2 + space;\n edge.y += labelshape.height / 2;\n middle.x = edge.x + 10;\n middle.y = edge.y;\n }\n else if (point && point.region && point.region.x > point.labelRegion.x) {\n edge.x += border * 2 + labelshape.width + space;\n edge.y += labelshape.height / 2;\n middle.x = edge.x + 10;\n middle.y = edge.y;\n }\n else {\n edge.x -= space - border / 2;\n edge.y += labelshape.height / 2;\n middle.x = edge.x - 10;\n middle.y = edge.y;\n }\n return edge;\n };\n /**\n * Finds the distance between the label position and the edge/center of the funnel/pyramid.\n *\n * @param {AccPoints} point - The accumulation point.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The data label settings.\n * @returns {number} - Get label distance.\n */\n AccumulationDataLabel.prototype.getLabelDistance = function (point, dataLabel) {\n if (point.labelPosition && dataLabel.position !== point.labelPosition || (dataLabel.connectorStyle.length && dataLabel.position === 'Outside')) {\n var length_1 = stringToNumber(dataLabel.connectorStyle.length || '70px', this.accumulation.initialClipRect.width);\n if (length_1 < this.accumulation.initialClipRect.width) {\n return length_1;\n }\n }\n var position = point.labelPosition || dataLabel.position;\n var series = this.accumulation.visibleSeries[0];\n var extraSpace = (this.accumulation.initialClipRect.width - series.triangleSize.width) / 2;\n var labelLocation;\n switch (position) {\n case 'Inside':\n return 0;\n case 'Outside':\n labelLocation = point.symbolLocation.x + point.labelOffset.x;\n return this.accumulation.initialClipRect.width - labelLocation - extraSpace;\n }\n };\n /**\n * Finds the label position / beginning of the connector(ouside funnel labels).\n *\n * @param {AccPoints} point - The accumulation point.\n * @param {AccumulationLabelPosition | string} position - The data label position.\n * @returns {ChartLocation} - Get label location.\n */\n AccumulationDataLabel.prototype.getLabelLocation = function (point, position) {\n if (position === void 0) { position = 'Outside'; }\n if (this.accumulation.type !== 'Pie') {\n position = position === 'OutsideLeft' ? 'OutsideLeft' : point.labelPosition || position;\n var location_2 = {\n x: point.symbolLocation.x,\n y: point.symbolLocation.y - point.labelOffset.y\n };\n switch (position) {\n case 'Inside':\n location_2.y = point.region.y + point.region.height / 2;\n break;\n case 'Outside':\n location_2.x += point.labelOffset.x;\n break;\n case 'OutsideLeft':\n location_2.x -= point.labelOffset.x;\n }\n return location_2;\n }\n else {\n //return degreeToLocation(point.midAngle, this.radius, this.center);\n return degreeToLocation(point.midAngle, (this.isVariousRadius() ? stringToNumber(point.sliceRadius, this.accumulation.pieSeriesModule.seriesRadius) :\n this.radius), this.center);\n }\n };\n /**\n * Finds the beginning of connector line.\n *\n * @param {AccPoints} point - The accumulation point.\n * @param {ConnectorModel} connector - The connector line.\n * @returns {ChartLocation} - Staring point of connector line.\n */\n AccumulationDataLabel.prototype.getConnectorStartPoint = function (point, connector) {\n // return this.isCircular() ? degreeToLocation(point.midAngle, this.radius - connector.width, this.center) :\n // this.getLabelLocation(point);\n var position;\n if (!this.isCircular() && point.region.x > point.labelRegion.x) {\n position = 'OutsideLeft';\n }\n return this.isCircular() ? degreeToLocation(point.midAngle, (this.isVariousRadius() ? stringToNumber(point.sliceRadius, this.accumulation.pieSeriesModule.seriesRadius) :\n this.radius) - connector.width, this.center) : this.getLabelLocation(point, position);\n };\n /**\n * To find area rect based on margin, available size.\n *\n * @private\n * @returns {void}\n */\n AccumulationDataLabel.prototype.findAreaRect = function () {\n this.areaRect = new Rect(0, 0, this.accumulation.availableSize.width, this.accumulation.availableSize.height);\n var margin = this.accumulation.margin;\n subtractThickness(this.areaRect, new Thickness(margin.left, margin.right, margin.top, margin.bottom));\n };\n /**\n * To render the data labels from series points.\n *\n * @param {AccPoints} point - The point for which to render the data label.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The settings for the data labels.\n * @param {Element} parent - The parent element to which the data labels are appended.\n * @param {AccPoints[]} points - The collection of points in the series.\n * @param {number} series - The index of the series.\n * @param {HTMLElement} templateElement - The template element for the data label.\n * @param {boolean} redraw - Indicates whether the data labels are being redrawn.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.renderDataLabel = function (point, dataLabel, parent, points, series, templateElement, redraw) {\n var id = this.accumulation.element.id + '_datalabel_Series_' + series + '_';\n var datalabelGroup = this.accumulation.renderer.createGroup({ id: id + 'g_' + point.index });\n var border = { width: dataLabel.border.width, color: dataLabel.border.color };\n var argsFont = (extend({}, getValue('properties', dataLabel.font), null, true));\n point.label = this.getDatalabelText(dataLabel.format, this.accumulation, point.originalText || point.y.toString());\n var argsData = {\n cancel: false, name: textRender, series: this.accumulation.visibleSeries[0], point: point,\n text: point.label, border: border, color: dataLabel.fill, template: dataLabel.template, font: argsFont\n };\n this.accumulation.trigger(textRender, argsData);\n point.argsData = argsData;\n var isTemplate = argsData.template !== null;\n point.labelVisible = !argsData.cancel;\n point.text = point.label = argsData.text;\n point.labelCollection = [];\n this.marginValue = argsData.border.width ? (5 + argsData.border.width) : 1;\n var childElement = createElement('div', {\n id: this.accumulation.element.id + '_Series_' + 0 + '_DataLabel_' + point.index,\n styles: 'position: absolute;background-color:' + argsData.color + ';' +\n getFontStyle(dataLabel.font, this.accumulation.themeStyle.datalabelFont) + ';border:' + argsData.border.width + 'px solid ' + argsData.border.color + ';'\n });\n this.calculateLabelSize(isTemplate, childElement, point, points, argsData, datalabelGroup, id, dataLabel, redraw);\n };\n AccumulationDataLabel.prototype.getDatalabelText = function (labelFormat, chart, labelText) {\n if (Number(labelText)) {\n var customLabelFormat = labelFormat.match('{value}') !== null;\n var format = chart.intl.getNumberFormat({\n format: customLabelFormat ? '' : labelFormat,\n useGrouping: chart.useGroupingSeparator\n });\n labelText = customLabelFormat ? labelFormat.replace('{value}', format(parseFloat(labelText))) : format(parseFloat(labelText));\n }\n return labelText;\n };\n /**\n * To calculate label size.\n *\n * @param {boolean} isTemplate - Indicates whether the label is a template.\n * @param {HTMLElement} childElement - The child element of the label.\n * @param {AccPoints} point - The point associated with the label.\n * @param {AccPoints[]} points - The collection of points.\n * @param {IAccTextRenderEventArgs} argsData - The arguments data for text rendering.\n * @param {Element} datalabelGroup - The group element for data labels.\n * @param {string} id - The id of the label.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The settings for the data labels.\n * @param {boolean} redraw - Indicates whether the labels are being redrawn.\n * @param {ClientRect} clientRect - The client rectangle.\n * @param {boolean} isReactCallback - Indicates whether a React callback is being used.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.calculateLabelSize = function (isTemplate, childElement, point, points, argsData, datalabelGroup, id, dataLabel, redraw, clientRect, isReactCallback) {\n this.calculateLabelCollection(point, dataLabel);\n var textSize = isTemplate ? (isReactCallback ? { width: clientRect.width, height: clientRect.height } :\n this.getTemplateSize(childElement, point, argsData, redraw, isTemplate, points, datalabelGroup, id, dataLabel)) : this.getTextSize(point.labelCollection, dataLabel);\n textSize.height += 4; // 4 for calculation with padding for smart label shape\n textSize.width += 4;\n point.textSize = textSize;\n point.templateElement = childElement;\n this.getDataLabelPosition(point, dataLabel, textSize, points);\n if (point.labelRegion) {\n this.correctLabelRegion(point.labelRegion, point.textSize);\n }\n };\n /**\n * To draw a data label.\n *\n * @param {AccumulationSeries} series - The series associated with the data label.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The settings for the data labels.\n * @param {HTMLElement} parent - The parent element of the data labels.\n * @param {HTMLElement} templateElement - The template element for the data label.\n * @param {boolean} redraw - Indicates whether the data labels are being redrawn.\n * @returns {void}\n * @private\n */\n AccumulationDataLabel.prototype.drawDataLabels = function (series, dataLabel, parent, templateElement, redraw) {\n var angle;\n var degree;\n var modifiedPoints = series.leftSidePoints.concat(series.rightSidePoints);\n modifiedPoints.sort(function (a, b) { return a.index - b.index; });\n if (series.type === 'Pie' && this.accumulation.enableSmartLabels) {\n this.extendedLabelsCalculation();\n }\n for (var _i = 0, modifiedPoints_1 = modifiedPoints; _i < modifiedPoints_1.length; _i++) {\n var point = modifiedPoints_1[_i];\n if (!isNullOrUndefined(point.argsData) && !isNullOrUndefined(point.y)) {\n this.finalizeDatalabels(point, modifiedPoints, dataLabel);\n var id = this.accumulation.element.id + '_datalabel_Series_' + 0 + '_';\n var datalabelGroup = this.accumulation.renderer.createGroup({ id: id + 'g_' + point.index });\n datalabelGroup.setAttribute('aria-hidden', 'true');\n var dataLabelElement = void 0;\n var location_3 = void 0;\n var element = void 0;\n if (point.visible && point.labelVisible) {\n angle = degree = dataLabel.angle;\n if (point.argsData.template) {\n this.setTemplateStyle(point.templateElement, point, templateElement, dataLabel.font.color, point.color, redraw);\n }\n else {\n location_3 = new ChartLocation(point.labelRegion.x + this.marginValue, point.labelRegion.y\n + (point.textSize.height * 3 / (point.labelCollection.length * 4)) + this.marginValue);\n element = getElement(id + 'shape_' + point.index);\n var startLocation = element ? new ChartLocation(+element.getAttribute('x'), +element.getAttribute('y')) : null;\n var textWidth = point.textSize.width;\n if (dataLabel.enableRotation) {\n if (angle === 0) {\n if (point.labelPosition === 'Outside') {\n degree = 0;\n }\n else if (point.midAngle >= 90 && point.midAngle <= 260) {\n degree = point.midAngle + 180;\n }\n else {\n degree = point.midAngle;\n }\n }\n else {\n degree = (angle > 360) ? angle - 360 : (angle < -360) ? angle + 360 : angle;\n }\n }\n else {\n degree = 0;\n }\n var rotate = 'rotate(' + degree + ',' + (location_3.x + (textWidth / 2)) + ',' + (location_3.y) + ')';\n point.transform = rotate;\n dataLabelElement = this.accumulation.renderer.drawRectangle(new RectOption(id + 'shape_' + point.index, point.argsData.color, point.argsData.border, 1, point.labelRegion, dataLabel.rx, dataLabel.ry, rotate, series.dataLabel.border.dashArray));\n appendChildElement(false, datalabelGroup, dataLabelElement, redraw, true, 'x', 'y', startLocation, null, false, false, null, this.accumulation.duration);\n textElement(this.accumulation.renderer, new TextOption(id + 'text_' + point.index, location_3.x, location_3.y, this.accumulation.enableRtl ? 'end' : 'start', point.labelCollection, rotate, 'auto', degree), point.argsData.font, point.argsData.font.color || this.getSaturatedColor(point, point.argsData.color), datalabelGroup, false, redraw, true, false, this.accumulation.duration, null, null, null, null, true, this.accumulation.themeStyle.datalabelFont);\n element = null;\n }\n if (this.accumulation.accumulationLegendModule && this.accumulation.legendSettings.visible && (dataLabel.position === 'Outside'\n || this.accumulation.enableSmartLabels)) {\n this.accumulation.visibleSeries[0].findMaxBounds(this.accumulation.visibleSeries[0].labelBound, point.labelRegion);\n }\n if (point.labelPosition === 'Outside') {\n var element_1 = getElement(id + 'connector_' + point.index);\n var previousDirection = element_1 ? element_1.getAttribute('d') : '';\n var pathElement = this.accumulation.renderer.drawPath(new PathOption(id + 'connector_' + point.index, 'transparent', dataLabel.connectorStyle.width, dataLabel.connectorStyle.color || point.color, 1, dataLabel.connectorStyle.dashArray, this.getConnectorPath(extend({}, point.labelRegion, null, true), point, dataLabel, point.labelAngle)));\n appendChildElement(false, datalabelGroup, pathElement, redraw, true, null, null, null, previousDirection, false, false, null, this.accumulation.duration);\n }\n appendChildElement(false, parent, datalabelGroup, redraw);\n }\n }\n }\n if (this.accumulation.type === 'Pie' && dataLabel.textWrap === 'Normal' && dataLabel.textOverflow === 'Clip') {\n this.dataLabelClipPath(dataLabel, parent);\n }\n };\n /**\n * To calculate data label clip path.\n *\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The settings for the data labels.\n * @param {HTMLElement} parent - The parent element of the data labels.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.dataLabelClipPath = function (dataLabel, parent) {\n var id = this.accumulation.element.id + '_datalabel_Series_' + 0 + '_';\n var clippath = this.accumulation.renderer.createClipPath({ id: id + 'clipPath' });\n var clipRect;\n var radius = this.accumulation.pieSeriesModule.pieBaseRadius;\n if (dataLabel.position === 'Inside') {\n clipRect = this.accumulation.renderer.drawCircle(new CircleOption(id + 'clipPath_rect', 'transparent', { width: 0 }, 0, this.center.x, this.center.y, radius));\n }\n else if (dataLabel.maxWidth) {\n var x = this.center.x - radius - stringToNumber((dataLabel.connectorStyle.length || '4%'), radius) - dataLabel.maxWidth;\n var y = this.center.y - radius - stringToNumber((dataLabel.connectorStyle.length || '4%'), radius) - dataLabel.maxWidth;\n var height = (radius + stringToNumber((dataLabel.connectorStyle.length || '4%'), radius) + dataLabel.maxWidth) * 2;\n var width = height;\n if (this.accumulation.legendSettings.visible) {\n var legendModule = this.accumulation.accumulationLegendModule;\n if (legendModule.position === 'Left') {\n width = (legendModule.legendBounds.x + legendModule.legendBounds.width - x) > 0 ?\n (width - (legendModule.legendBounds.width - x)) : width;\n x = (legendModule.legendBounds.x + legendModule.legendBounds.width) < x ? x :\n (legendModule.legendBounds.x + legendModule.legendBounds.width);\n }\n else if (legendModule.position === 'Right') {\n width = (x + width - legendModule.legendBounds.x) > 0 ? (width - (x + width - legendModule.legendBounds.x)) : width;\n }\n }\n clipRect = this.accumulation.renderer.drawRectangle(new RectOption(id + 'clipPath_rect', 'transparent', { width: 0 }, 0, new Rect(x, y, height, width), 0, 0));\n }\n if (dataLabel.position === 'Inside' || dataLabel.maxWidth) {\n clippath.appendChild(clipRect);\n appendChildElement(false, this.accumulation.svgObject, clippath);\n parent.style.cssText = 'clip-path:url(#' + clippath.id + ')';\n }\n };\n /**\n * In this method datalabels region checked with legebdBounds and areaBounds.\n * Trimming of datalabel and point's visibility again changed here.\n *\n * @param {AccPoints} point - Current point in which trimming and visibility to be checked.\n * @param {AccPoints[]} points - Finalized points.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - Datalabel model.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.finalizeDatalabels = function (point, points, dataLabel) {\n if (this.isOverlapping(point, points) ||\n (this.titleRect && point.labelRegion && isOverlap(point.labelRegion, this.titleRect))) {\n if (this.isCircular() && point.labelPosition === 'Outside' && this.accumulation.enableSmartLabels) {\n this.setPointVisibileFalse(point);\n }\n }\n if (this.accumulation.accumulationLegendModule && this.accumulation.legendSettings.visible &&\n point.labelVisible && point.labelRegion && (!dataLabel.maxWidth ? dataLabel.textOverflow === 'Clip' ? dataLabel.textWrap !== 'Normal' : true : false)) {\n var rect = this.accumulation.accumulationLegendModule.legendBounds;\n if (this.accumulation.visibleSeries[0].type !== 'Pie' && this.accumulation.legendSettings.position === 'Left'\n && dataLabel.position === 'Outside') {\n point.labelRegion.x = point.labelRegion.x + rect.width;\n }\n var padding = this.accumulation.legendSettings.border.width / 2;\n this.textTrimming(point, new Rect(rect.x - padding, rect.y - padding, rect.width + (2 * padding), rect.height + (2 * padding)), dataLabel.font, this.accumulation.accumulationLegendModule.position, dataLabel);\n }\n if (point.labelVisible && point.labelRegion && (!dataLabel.maxWidth ? dataLabel.textOverflow === 'Clip' ? dataLabel.textWrap !== 'Normal' : true : false)) {\n var position = this.isCircular() ? (point.labelRegion.x >= this.center.x) ? 'InsideRight' : 'InsideLeft' :\n (point.labelRegion.x >= point.region.x) ? 'InsideRight' : 'InsideLeft';\n this.textTrimming(point, this.areaRect, dataLabel.font, position, dataLabel);\n }\n if (point.labelVisible && point.labelRegion && !dataLabel.maxWidth && dataLabel.textOverflow !== 'Clip' && this.accumulation.enableSmartLabels && ((point.labelRegion.y + point.labelRegion.height / 2 >\n this.areaRect.y + this.areaRect.height || point.labelRegion.y < this.areaRect.y) || (point.labelRegion.x < this.areaRect.x ||\n point.labelRegion.x + point.labelRegion.width > this.areaRect.x + this.areaRect.width))) {\n this.setPointVisibileFalse(point);\n }\n };\n /**\n * To find the template element size.\n *\n * @param {HTMLElement} element - To get a template element.\n * @param {AccPoints} point - The accumulation point for the template.\n * @param {IAccTextRenderEventArgs} argsData - The arguments for the accumulation points.\n * @param {boolean} redraw - Indicates whether to redraw the template.\n * @param {boolean} isTemplate - Indicates whether the element is a template.\n * @param {AccPoints[]} points - The accumulation points for the template.\n * @param {Element} datalabelGroup - The group element for the data labels.\n * @param {string} id - The identifier for the template.\n * @param {AccumulationDataLabelSettingsModel} dataLabel - The settings for the data labels.\n * @returns {Size} - The size of the template.\n */\n AccumulationDataLabel.prototype.getTemplateSize = function (element, point, argsData, redraw, isTemplate, points, datalabelGroup, id, dataLabel) {\n element = createTemplate(element, point.index, argsData.template, this.accumulation, point, this.accumulation.visibleSeries[0], this.accumulation.element.id + '_DataLabel', 0, argsData, isTemplate, points, datalabelGroup, id, dataLabel, redraw);\n var clientRect = measureElementRect(element, redraw);\n return { width: clientRect.width, height: clientRect.height };\n };\n /**\n * To set the template element style.\n *\n * @param {HTMLElement} childElement - The child element of the template.\n * @param {AccPoints} point - The point data for the template.\n * @param {Element} parent - The parent element of the template.\n * @param {string} labelColor - The color of the label in the template.\n * @param {string} fill - The fill color of the template.\n * @param {boolean} redraw - Indicates whether to redraw the template.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.setTemplateStyle = function (childElement, point, parent, labelColor, fill, redraw) {\n childElement.style.left = (point.labelRegion.x) + 'px';\n childElement.style.top = (point.labelRegion.y) + 'px';\n childElement.style.color = labelColor || this.getSaturatedColor(point, point.labelPosition === 'Inside' ? fill : this.getLabelBackground(point));\n if (this.accumulation.isBlazor) {\n var position = this.isCircular() ? (point.labelRegion.x >= this.center.x) ? 'InsideRight' : 'InsideLeft' :\n (point.labelRegion.x >= point.region.x) ? 'InsideRight' : 'InsideLeft';\n if (position === 'InsideRight') {\n childElement.style.transform = 'translate(0%, -50%)';\n }\n else {\n childElement.style.transform = 'translate(-100%, -50%)';\n }\n }\n if (childElement.childElementCount) {\n appendChildElement(false, parent, childElement, redraw, true, 'left', 'top');\n this.doTemplateAnimation(this.accumulation, childElement);\n }\n };\n /**\n * To find saturated color for datalabel\n *\n * @param {AccPoints} point - The accumulation point.\n * @param {string} color - The original color.\n * @returns {string} - Get a saturated color.\n */\n AccumulationDataLabel.prototype.getSaturatedColor = function (point, color) {\n var saturatedColor;\n if (this.marginValue >= 1) {\n saturatedColor = color === 'transparent' ? this.getLabelBackground(point) : color;\n }\n else {\n saturatedColor = this.getLabelBackground(point);\n }\n saturatedColor = (saturatedColor === 'transparent') ? ((this.accumulation.theme.indexOf('Dark') > -1 || this.accumulation.theme.indexOf('HighContrast') > -1) ? 'black' : 'white') : saturatedColor;\n var rgbValue = convertHexToColor(colorNameToHex(saturatedColor));\n var contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n return contrast >= 128 ? 'black' : 'white';\n };\n /**\n * Animates the data label template.\n *\n * @param {AccumulationChart} accumulation - The accumulation chart control.\n * @param {Element} element - The element to animate.\n * @returns {void}\n * @private\n */\n AccumulationDataLabel.prototype.doTemplateAnimation = function (accumulation, element) {\n var series = accumulation.visibleSeries[0];\n var delay = series.animation.delay + series.animation.duration;\n if (((series.animation.enable && animationMode !== 'Disable') || animationMode === 'Enable') && accumulation.animateSeries) {\n element.style.visibility = 'hidden';\n templateAnimate(element, delay, 200, 'ZoomIn');\n }\n };\n /**\n * To find background color for the datalabel.\n *\n * @param {AccPoints} point - The data point for which to determine the background color.\n * @returns {string} - The background color for the data label.\n */\n AccumulationDataLabel.prototype.getLabelBackground = function (point) {\n return point.labelPosition === 'Outside' ?\n this.accumulation.background || this.accumulation.themeStyle.background : !point.y ? this.accumulation.theme.indexOf('dark') ? 'white' : 'black' : point.color;\n };\n /**\n * To correct the padding between datalabel regions.\n *\n * @param {Rect} labelRegion - The region occupied by the data label.\n * @param {Size} textSize - The size of the text within the data label.\n * @param {number} padding - The padding value to adjust the spacing.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.correctLabelRegion = function (labelRegion, textSize, padding) {\n if (padding === void 0) { padding = 4; }\n labelRegion.height -= padding;\n labelRegion.width -= padding;\n labelRegion.x += padding / 2;\n labelRegion.y += padding / 2;\n textSize.height -= padding;\n textSize.width -= padding;\n };\n /**\n * To get the dataLabel module name.\n *\n * @returns {string} - Returns the module name.\n */\n AccumulationDataLabel.prototype.getModuleName = function () {\n return 'AccumulationDataLabel';\n };\n /**\n * To destroy the data label.\n *\n * @returns {void}\n * @private\n */\n AccumulationDataLabel.prototype.destroy = function () {\n /**\n * Destroy method performed here.\n */\n };\n //calculation for placing labels smartly\n AccumulationDataLabel.prototype.extendedLabelsCalculation = function () {\n var _this = this;\n var series = this.accumulation.series[0];\n series.rightSidePoints.forEach(function (point, index, halfSidePoints) {\n point.initialLabelRegion = point.labelRegion;\n point.isLabelUpdated = 0;\n _this.skipPoints(point, halfSidePoints, index);\n });\n series.leftSidePoints.forEach(function (point, index, halfSidePoints) {\n point.initialLabelRegion = point.labelRegion;\n point.isLabelUpdated = 0;\n _this.skipPoints(point, halfSidePoints, index);\n });\n this.arrangeLeftSidePoints(series);\n this.isIncreaseAngle = false;\n this.arrangeRightSidePoints(series);\n };\n /**\n * Rightside points alignments calculation.\n *\n * @param {AccumulationSeries} series - To get a proper series.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.arrangeRightSidePoints = function (series) {\n var startFresh;\n var angleChanged;\n var rightSideRenderPoints = series.rightSidePoints.filter(function (point) { return (point.labelVisible && point.labelPosition === 'Outside'); });\n this.rightSideRenderingPoints = rightSideRenderPoints;\n var checkAngle;\n var currentPoint;\n var lastPoint = rightSideRenderPoints[rightSideRenderPoints.length - 1];\n var nextPoint;\n if (lastPoint) {\n if (lastPoint.labelAngle > 90 && lastPoint.labelAngle < 270) {\n this.isIncreaseAngle = true;\n this.changeLabelAngle(lastPoint, 89);\n }\n }\n /**\n * Right side points arranged from last point.\n * A point checked with successive points for overlapping.\n * If that is overlapped, its label angle is decreased and placing in optimal position\n * If one point's angle is decreased, its previous points in the half side points also decreased until it reaced optimum position.\n * When decreasing angle falls beyond 270, label angle increased.\n * If one point's angle is increased, its successive points in that half point also increased until it reaced optimum position.\n */\n for (var i = rightSideRenderPoints.length - 1; i >= 0; i--) {\n currentPoint = rightSideRenderPoints[i];\n nextPoint = rightSideRenderPoints[i + 1];\n // A point checked for overlapping, label visibility\n if (this.isOverlapWithNext(currentPoint, rightSideRenderPoints, i) && currentPoint.labelVisible\n || !(currentPoint.labelAngle <= 90 || currentPoint.labelAngle >= 270)) {\n checkAngle = lastPoint.labelAngle + 10;\n angleChanged = true;\n //If last's point change angle in beyond the limit, stop the increasing angle and do decrease the angle.\n if (startFresh) {\n this.isIncreaseAngle = false;\n }\n else if (checkAngle > 90 && checkAngle < 270 && nextPoint.isLabelUpdated) {\n this.isIncreaseAngle = true;\n }\n if (!this.isIncreaseAngle) {\n for (var k = i + 1; k < rightSideRenderPoints.length; k++) {\n this.increaseAngle(rightSideRenderPoints[k - 1], rightSideRenderPoints[k], series, true);\n }\n }\n else {\n for (var k = i + 1; k > 0; k--) {\n this.decreaseAngle(rightSideRenderPoints[k], rightSideRenderPoints[k - 1], series, true);\n }\n }\n }\n else {\n //If a point did not overlapped with previous points, increase the angle always for right side points.\n if (angleChanged && nextPoint && !nextPoint.isLabelUpdated) {\n startFresh = true;\n }\n }\n }\n };\n /**\n * Leftside points alignments calculation.\n *\n * @param {AccumulationSeries} series - To get a proper series.\n * @returns {void}\n */\n AccumulationDataLabel.prototype.arrangeLeftSidePoints = function (series) {\n var _this = this;\n var leftSideRenderPoints = series.leftSidePoints.filter(function (point) { return (point.labelVisible && point.labelPosition === 'Outside'); });\n this.leftSideRenderingPoints = leftSideRenderPoints;\n var previousPoint;\n var currentPoint;\n var angleChanged;\n var startFresh;\n /**\n * Left side points arranged from first point.\n * A point checked with previous points for overlapping.\n * If that is overlapped, its label angle is decreased and placing in optimal position\n * If one point's angle is decreased, its previous points in the half side points also decreased until it reaced optimum position.\n * When decreasing angle falls beyond 90, label angle increased.\n * If one point's angle is increased, its successive points in that half point also increased until it reaced optimum position.\n */\n for (var i = 0; i < leftSideRenderPoints.length; i++) {\n currentPoint = leftSideRenderPoints[i];\n previousPoint = leftSideRenderPoints[i - 1];\n // A point checked\n if (this.isOverlapWithPrevious(currentPoint, leftSideRenderPoints, i) && currentPoint.labelVisible\n || !(currentPoint.labelAngle < 270)) {\n angleChanged = true;\n if (startFresh) {\n this.isIncreaseAngle = false;\n }\n if (!this.isIncreaseAngle) {\n for (var k = i; k > 0; k--) {\n this.decreaseAngle(leftSideRenderPoints[k], leftSideRenderPoints[k - 1], series, false);\n leftSideRenderPoints.filter(function (point, index) {\n if (point.isLabelUpdated && leftSideRenderPoints[index].labelAngle - 10 < 100) {\n _this.isIncreaseAngle = true;\n }\n });\n }\n }\n else {\n for (var k = i; k < leftSideRenderPoints.length; k++) {\n this.increaseAngle(leftSideRenderPoints[k - 1], leftSideRenderPoints[k], series, false);\n }\n }\n }\n else {\n if (angleChanged && previousPoint && previousPoint.isLabelUpdated) {\n startFresh = true;\n }\n }\n }\n };\n AccumulationDataLabel.prototype.decreaseAngle = function (currentPoint, previousPoint, series, isRightSide) {\n if (isNullOrUndefined(currentPoint) || isNullOrUndefined(previousPoint)) {\n return null;\n }\n var count = 1;\n if (isRightSide) {\n while (isOverlap(currentPoint.labelRegion, previousPoint.labelRegion) || (!this.isVariousRadius() &&\n !((previousPoint.labelRegion.height + previousPoint.labelRegion.y) < currentPoint.labelRegion.y))) {\n var newAngle = previousPoint.midAngle - count;\n if (newAngle < 0) {\n newAngle = 360 + newAngle;\n }\n if (newAngle <= 270 && newAngle >= 90) {\n newAngle = 270;\n this.isIncreaseAngle = true;\n break;\n }\n this.changeLabelAngle(previousPoint, newAngle);\n count++;\n }\n }\n else {\n if (currentPoint.labelAngle > 270) {\n this.changeLabelAngle(currentPoint, 270);\n previousPoint.labelAngle = 270;\n }\n while (isOverlap(currentPoint.labelRegion, previousPoint.labelRegion) || (!this.isVariousRadius() &&\n ((currentPoint.labelRegion.y + currentPoint.labelRegion.height) > previousPoint.labelRegion.y))) {\n var newAngle = previousPoint.midAngle - count;\n if (!(newAngle <= 270 && newAngle >= 90)) {\n newAngle = 90;\n this.isIncreaseAngle = true;\n break;\n }\n this.changeLabelAngle(previousPoint, newAngle);\n if (isOverlap(currentPoint.labelRegion, previousPoint.labelRegion) &&\n !series.leftSidePoints.indexOf(previousPoint) && (newAngle - 1 < 90 && newAngle - 1 > 270)) {\n this.changeLabelAngle(currentPoint, currentPoint.labelAngle + 1);\n this.arrangeLeftSidePoints(series);\n break;\n }\n count++;\n }\n }\n };\n AccumulationDataLabel.prototype.increaseAngle = function (currentPoint, nextPoint, series, isRightSide) {\n if (isNullOrUndefined(currentPoint) || isNullOrUndefined(nextPoint)) {\n return null;\n }\n var count = 1;\n if (isRightSide) {\n while (isOverlap(currentPoint.labelRegion, nextPoint.labelRegion) || (!this.isVariousRadius() &&\n !((currentPoint.labelRegion.y + currentPoint.labelRegion.height) < nextPoint.labelRegion.y))) {\n var newAngle = nextPoint.midAngle + count;\n if (newAngle < 270 && newAngle > 90) {\n newAngle = 90;\n this.isIncreaseAngle = true;\n break;\n }\n this.changeLabelAngle(nextPoint, newAngle);\n if (isOverlap(currentPoint.labelRegion, nextPoint.labelRegion) && (newAngle + 1 > 90 && newAngle + 1 < 270) &&\n this.rightSideRenderingPoints.indexOf(nextPoint) === this.rightSideRenderingPoints.length - 1) {\n this.changeLabelAngle(currentPoint, currentPoint.labelAngle - 1);\n nextPoint.labelRegion = nextPoint.initialLabelRegion;\n this.arrangeRightSidePoints(series);\n break;\n }\n if (count > 360) {\n break;\n }\n count++;\n }\n }\n else {\n while (isOverlap(currentPoint.labelRegion, nextPoint.labelRegion) || (!this.isVariousRadius() &&\n (currentPoint.labelRegion.y < (nextPoint.labelRegion.y + nextPoint.labelRegion.height)))) {\n var newAngle = nextPoint.midAngle + count;\n if (!(newAngle < 270 && newAngle > 90)) {\n newAngle = 270;\n this.isIncreaseAngle = false;\n break;\n }\n this.changeLabelAngle(nextPoint, newAngle);\n if (count > 360) {\n break;\n }\n count++;\n }\n }\n };\n AccumulationDataLabel.prototype.changeLabelAngle = function (currentPoint, newAngle) {\n var dataLabel = this.accumulation.series[0].dataLabel;\n var variableR;\n if (this.isVariousRadius()) {\n variableR = this.accumulation.pieSeriesModule.getLabelRadius(this.accumulation.visibleSeries[0], currentPoint);\n }\n //padding 10px is added to label radius for increasing the angle and avoid congestion.\n var labelRadius = (currentPoint.labelPosition === 'Outside' && this.accumulation.enableSmartLabels &&\n dataLabel.position === 'Inside') ?\n this.radius + stringToNumber(dataLabel.connectorStyle.length || '4%', this.accumulation.pieSeriesModule.size / 2) :\n (!this.isVariousRadius() ? this.accumulation.pieSeriesModule.labelRadius + 10 : variableR);\n var radius = (!this.isVariousRadius() ? labelRadius : variableR);\n this.getLabelRegion(currentPoint, 'Outside', currentPoint.textSize, radius, this.marginValue, newAngle);\n currentPoint.isLabelUpdated = 1;\n currentPoint.labelAngle = newAngle;\n };\n AccumulationDataLabel.prototype.isOverlapWithPrevious = function (currentPoint, points, currentPointIndex) {\n for (var i = 0; i < currentPointIndex; i++) {\n if (i !== points.indexOf(currentPoint) &&\n points[i].visible && points[i].labelVisible &&\n points[i].labelRegion && currentPoint.labelRegion &&\n currentPoint.labelVisible && isOverlap(currentPoint.labelRegion, points[i].labelRegion)) {\n return true;\n }\n }\n return false;\n };\n AccumulationDataLabel.prototype.isOverlapWithNext = function (point, points, pointIndex) {\n for (var i = pointIndex; i < points.length; i++) {\n if (i !== points.indexOf(point) && points[i].visible &&\n points[i].labelVisible && points[i].labelRegion &&\n point.labelRegion && point.labelVisible && isOverlap(point.labelRegion, points[i].labelRegion)) {\n return true;\n }\n }\n return false;\n };\n AccumulationDataLabel.prototype.skipPoints = function (currentPoint, halfsidePoints, pointIndex) {\n if (pointIndex > 0 && ((currentPoint.midAngle < 285 && currentPoint.midAngle > 255) ||\n (currentPoint.midAngle < 105 && currentPoint.midAngle > 75))) {\n var previousPoint = halfsidePoints[pointIndex - 1];\n var angleDiff = currentPoint.endAngle % 360 - currentPoint.startAngle % 360;\n var prevAngleDiff = previousPoint.endAngle % 360 - previousPoint.startAngle % 360;\n if (prevAngleDiff <= angleDiff && angleDiff < 5 && previousPoint.labelVisible) {\n this.setPointVisibleTrue(currentPoint);\n }\n }\n else if (pointIndex > 1 && ((currentPoint.midAngle < 300 && currentPoint.midAngle > 240) ||\n (currentPoint.midAngle < 120 && currentPoint.midAngle > 60))) {\n var prevPoint = halfsidePoints[pointIndex - 1];\n var secondPrevPoint = halfsidePoints[pointIndex - 2];\n var angleDiff = currentPoint.endAngle % 360 - currentPoint.startAngle % 360;\n var prevAngleDiff = prevPoint.endAngle % 360 - prevPoint.startAngle % 360;\n var thirdAngleDiff = secondPrevPoint.endAngle % 360 - secondPrevPoint.startAngle % 360;\n if (angleDiff < 3 && prevAngleDiff < 3 && thirdAngleDiff < 3 && prevPoint.labelVisible && currentPoint.labelVisible) {\n this.setPointVisibleTrue(currentPoint);\n }\n }\n };\n AccumulationDataLabel.prototype.getPerpendicularDistance = function (startPoint, point) {\n var increasedLocation;\n var add = 10;\n var height = add + 10 * Math.sin(point.midAngle * Math.PI / 360);\n if (point.midAngle > 270 && point.midAngle < 360) {\n increasedLocation = new ChartLocation(startPoint.x + height * (Math.cos((360 - point.midAngle) * Math.PI / 180)), startPoint.y - height * (Math.sin((360 - point.midAngle) * Math.PI / 180)));\n }\n else if (point.midAngle > 0 && point.midAngle < 90) {\n increasedLocation = new ChartLocation(startPoint.x + height * (Math.cos((point.midAngle) * Math.PI / 180)), startPoint.y + height * (Math.sin((point.midAngle) * Math.PI / 180)));\n // eslint-disable-next-line no-dupe-else-if\n }\n else if (point.midAngle > 0 && point.midAngle < 90) {\n increasedLocation = new ChartLocation(startPoint.x - height * (Math.cos((point.midAngle - 90) * Math.PI / 180)), startPoint.y + height * (Math.sin((point.midAngle - 90) * Math.PI / 180)));\n }\n else {\n increasedLocation = new ChartLocation(startPoint.x - height * (Math.cos((point.midAngle - 180) * Math.PI / 180)), startPoint.y - height * (Math.sin((point.midAngle - 180) * Math.PI / 180)));\n }\n return increasedLocation;\n };\n return AccumulationDataLabel;\n}(AccumulationBase));\nexport { AccumulationDataLabel };\n","export var widthProperty = ['width', 'w'];\nexport var heightProperty = ['height', 'h'];\nexport var chartDataProperty = ['chartData', 'chd'];\nexport var chartCategoryProperty = ['chartCategory', 'c'];\nexport var chartSeriesProperty = ['chartSeries', 'cs'];\nexport var chartLegendProperty = ['chartLegend', 'cl'];\nexport var chartPrimaryCategoryAxisProperty = ['chartPrimaryCategoryAxis', 'cpca'];\nexport var chartPrimaryValueAxisProperty = ['chartPrimaryValueAxis', 'cpva'];\nexport var chartTitleProperty = ['chartTitle', 'ctt'];\nexport var chartTypeProperty = ['chartType', 'ct'];\nexport var trendLinesProperty = ['trendLines', 'tl'];\nexport var dataPointsProperty = ['dataPoints', 'dp'];\nexport var seriesNameProperty = ['seriesName', 'sn'];\nexport var dataLabelProperty = ['dataLabel', 'sl'];\nexport var errorBarProperty = ['errorBar', 'eb'];\nexport var fillProperty = ['fill', 'f'];\nexport var lineProperty = ['line', 'l'];\nexport var rgbProperty = ['rgb', 'rgb'];\nexport var idProperty = ['id', 'i'];\nexport var foreColorProperty = ['foreColor', 'fc'];\nexport var positionProperty = ['position', 'p'];\nexport var typeProperty = ['type', 't'];\nexport var nameProperty = ['name', 'n'];\nexport var directionProperty = ['direction', 'dir'];\nexport var endStyleProperty = ['endStyle', 'est'];\nexport var forwardProperty = ['forward', 'fw'];\nexport var backwardProperty = ['backward', 'bw'];\nexport var interceptProperty = ['intercept', 'itr'];\nexport var categoryTypeProperty = ['categoryType', 'ct'];\nexport var hasMajorGridLinesProperty = ['hasMajorGridLines', 'hmajgl'];\nexport var hasMinorGridLinesProperty = ['hasMinorGridLines', 'hmingl'];\nexport var majorUnitProperty = ['majorUnit', 'maju'];\nexport var isAutoMajorProperty = ['isAutoMajor', 'iam'];\nexport var maximumValueProperty = ['maximumValue', 'maxv'];\nexport var minimumValueProperty = ['minimumValue', 'minv'];\nexport var categoryXNameProperty = ['categoryXName', 'cx'];\nexport var numberFormatProperty = ['numberFormat', 'nf'];\nexport var yValueProperty = ['yValue', 'y'];\nexport var sizeProperty = ['size', 'sz'];\nexport var seriesFormatProperty = ['seriesFormat', 'sf'];\n","/* tslint:disable:no-any */\nimport { Chart, AccumulationChart, AccumulationLegend, PieSeries, AccumulationTooltip, AccumulationDataLabel, DateTime, BarSeries, StackingBarSeries, LineSeries, StackingLineSeries, ColumnSeries, StackingColumnSeries, AreaSeries, StackingAreaSeries, Trendlines, ScatterSeries, BubbleSeries, RadarSeries, PolarSeries, ErrorBar, SplineSeries, DataLabel, Category, Legend, Tooltip, Export } from '@syncfusion/ej2-charts';\nChart.Inject(AreaSeries, StackingAreaSeries, BarSeries, PieSeries, StackingBarSeries, PolarSeries, ScatterSeries, BubbleSeries, RadarSeries, DateTime, ColumnSeries, StackingColumnSeries, LineSeries, StackingLineSeries, ErrorBar, Trendlines, SplineSeries, DataLabel, Category, Legend, Tooltip, Export);\nAccumulationChart.Inject(AccumulationLegend, PieSeries, AccumulationTooltip, AccumulationDataLabel);\nimport { SvgRenderer } from '@syncfusion/ej2-svg-base';\nimport { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { chartTypeProperty, widthProperty, heightProperty, chartDataProperty, chartCategoryProperty, chartLegendProperty, chartPrimaryCategoryAxisProperty, chartSeriesProperty, chartTitleProperty, chartPrimaryValueAxisProperty, dataPointsProperty, seriesNameProperty, errorBarProperty, dataLabelProperty, trendLinesProperty, fillProperty, foreColorProperty, positionProperty, typeProperty, directionProperty, endStyleProperty, nameProperty, forwardProperty, backwardProperty, interceptProperty, lineProperty, rgbProperty, categoryTypeProperty, hasMajorGridLinesProperty, hasMinorGridLinesProperty, minimumValueProperty, maximumValueProperty, majorUnitProperty, categoryXNameProperty, numberFormatProperty, yValueProperty, sizeProperty, seriesFormatProperty, idProperty, isAutoMajorProperty } from '../index';\n/**\n * Chart component is used to convert office charts to ej2-charts.\n */\nvar ChartComponent = /** @class */ (function () {\n function ChartComponent() {\n /**\n * @private\n */\n this.keywordIndex = undefined;\n /**\n * @private\n */\n this.chartYValues = [];\n }\n /**\n * @private\n */\n ChartComponent.prototype.chartRender = function (chart, keywordIndex) {\n this.keywordIndex = !isNullOrUndefined(keywordIndex) ? keywordIndex : 0;\n this.chartType = chart[chartTypeProperty[this.keywordIndex]];\n this.isPieType = (this.chartType === 'Pie' || this.chartType === 'Doughnut');\n var chartData = this.chartData(chart, this.chartType);\n var chartModel = {\n enableAnimation: false,\n width: chart[widthProperty[this.keywordIndex]] * (96 / 72) + 'px',\n height: chart[heightProperty[this.keywordIndex]] * (96 / 72) + 'px'\n };\n if (this.isPieType) {\n this.chart = new AccumulationChart(chartModel);\n }\n else {\n this.chart = new Chart(chartModel);\n this.chart.primaryXAxis = this.chartPrimaryXAxis(chart[chartPrimaryCategoryAxisProperty[this.keywordIndex]], this.chartType);\n this.chart.primaryYAxis = this.chartPrimaryYAxis(chart[chartPrimaryValueAxisProperty[this.keywordIndex]]);\n }\n this.chart.series = this.chartSeries(chart[chartSeriesProperty[this.keywordIndex]], chartData, this.chartType);\n for (var i = 0; i < this.chart.series.length; i++) {\n this.chart.series[parseInt(i.toString(), 10)].animation.enable = false;\n }\n this.chart.title = chart[chartTitleProperty[this.keywordIndex]];\n this.chart.legendSettings = this.parseChartLegend(chart[chartLegendProperty[this.keywordIndex]]);\n };\n /**\n * @private\n */\n ChartComponent.prototype.convertChartToImage = function (chart, elementWidth, elementHeight) {\n var _this = this;\n var promise;\n return promise = new Promise(function (resolve, reject) {\n var width = 0;\n var height = 0;\n var dataInfo = _this.getControlsValue([chart], elementWidth, elementHeight);\n width = width ? width : dataInfo.width;\n height = height ? height : dataInfo.height;\n var element = createElement('canvas');\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n element.width = width * (displayPixelRatio);\n element.height = height * (displayPixelRatio);\n element.style.width = width + 'px';\n element.style.height = height + 'px';\n // tslint:disable-next-line:max-line-length\n var url = window.URL.createObjectURL(new Blob([(new XMLSerializer()).serializeToString(dataInfo.svg)], { type: 'image/svg+xml' }));\n var image = new Image();\n var canvasContext = element.getContext('2d');\n canvasContext.scale(displayPixelRatio, displayPixelRatio);\n image.onload = (function () {\n canvasContext.drawImage(image, 0, 0);\n window.URL.revokeObjectURL(url);\n var dataURL = element.toDataURL('image/png');\n resolve(dataURL);\n });\n image.onerror = (function () {\n reject('Invalid data');\n });\n image.src = url;\n });\n };\n ChartComponent.prototype.getControlsValue = function (controls, elementWidth, elementHeight) {\n var width = 0;\n var height = 0;\n var content = '';\n var svgRenderer = new SvgRenderer('').createSvg({\n id: 'Image_Export',\n width: 200, height: 200\n });\n controls.map(function (control) {\n if (control) {\n var svgElement = control.svgObject.cloneNode(true);\n var groupElement = control.renderer.createGroup({\n style: 'transform: translateY(' + height + 'px)'\n });\n groupElement.appendChild(svgElement);\n width = Math.max(control.availableSize.width, elementWidth);\n height += control.availableSize.height;\n content += control.svgObject.outerHTML;\n svgRenderer.appendChild(groupElement);\n }\n });\n svgRenderer.setAttribute('width', width + '');\n svgRenderer.setAttribute('height', height + '');\n return {\n 'width': width,\n 'height': height,\n 'svg': svgRenderer\n };\n };\n ChartComponent.prototype.officeChartType = function (type) {\n var chartType = '';\n switch (type) {\n case 'Area_Stacked':\n chartType = 'StackingArea';\n break;\n case 'Area':\n chartType = 'Area';\n break;\n case 'Area_Stacked_100':\n chartType = 'StackingArea100';\n break;\n case 'Bar_Clustered':\n chartType = 'Bar';\n break;\n case 'Bar_Stacked':\n chartType = 'StackingBar';\n break;\n case 'Bar_Stacked_100':\n chartType = 'StackingBar100';\n break;\n case 'Column_Clustered':\n chartType = 'Column';\n break;\n case 'Column_Stacked':\n chartType = 'StackingColumn';\n break;\n case 'Column_Stacked_100':\n chartType = 'StackingColumn100';\n break;\n case 'Scatter_Markers':\n chartType = 'Scatter';\n break;\n case 'Bubble':\n chartType = 'Bubble';\n break;\n case 'Doughnut':\n case 'Pie':\n chartType = 'Pie';\n break;\n case 'Line_Stacked_100':\n case 'Line_Markers_Stacked_100':\n chartType = 'StackingLine100';\n break;\n case 'Line':\n case 'Line_Markers':\n chartType = 'Line';\n break;\n case 'Line_Stacked':\n case 'Line_Markers_Stacked':\n chartType = 'StackingLine';\n break;\n }\n return chartType;\n };\n ChartComponent.prototype.chartSeries = function (series, data, type) {\n // json data\n var chartSeries = [];\n for (var i = 0; i < series.length; i++) {\n var seriesData = series[parseInt(i.toString(), 10)];\n var seriesValue = this.writeChartSeries(seriesData, data, type, i);\n chartSeries.push(seriesValue);\n }\n return chartSeries;\n };\n ChartComponent.prototype.writeChartSeries = function (seriesData, data, type, count) {\n var chartType = this.officeChartType(type);\n // let isAreaType: boolean = (type === 'Area_Stacked_100' || type === 'Area' || type === 'Area_Stacked');\n var seriesFormat = seriesData[dataPointsProperty[this.keywordIndex]][parseInt(count.toString(), 10)];\n var series = {};\n var fill;\n series.type = chartType;\n series.dataSource = data;\n series.name = seriesData[seriesNameProperty[this.keywordIndex]];\n series.xName = 'x';\n series.yName = 'y' + count;\n if (type === 'Bubble') {\n series.size = 'size' + count;\n }\n if (this.isPieType) {\n series.pointColorMapping = 'color';\n if (type === 'Doughnut') {\n series.innerRadius = '75%';\n series.radius = '70%';\n }\n }\n else {\n if (isNullOrUndefined(seriesFormat)) {\n seriesFormat = seriesData[dataPointsProperty[this.keywordIndex]][0];\n }\n fill = this.chartFormat(seriesFormat, chartType);\n series.fill = fill;\n if (!isNullOrUndefined(seriesFormat[fillProperty[this.keywordIndex]][foreColorProperty[this.keywordIndex]])) {\n series.pointColorMapping = 'color';\n }\n }\n if (type === 'Line_Markers' || type === 'Line_Markers_Stacked' || type === 'Line_Markers_Stacked_100') {\n series.marker = { visible: true };\n }\n if (seriesData.hasOwnProperty(dataLabelProperty[this.keywordIndex])) {\n if (this.isPieType) {\n series.dataLabel = this.parseDataLabels(seriesData[dataLabelProperty[this.keywordIndex]]);\n }\n else {\n var data_1 = {};\n data_1.dataLabel = this.parseDataLabels(seriesData[dataLabelProperty[this.keywordIndex]]);\n series.marker = data_1;\n }\n }\n if (seriesData.hasOwnProperty(errorBarProperty[this.keywordIndex])) {\n var errorBarData = seriesData[errorBarProperty[this.keywordIndex]];\n series.errorBar = this.parseErrorBars(errorBarData);\n }\n if (seriesData.hasOwnProperty(trendLinesProperty[this.keywordIndex])) {\n var trendLines = seriesData[trendLinesProperty[this.keywordIndex]];\n var trendLinesData = [];\n for (var count_1 = 0; count_1 < trendLines.length; count_1++) {\n var trendLine = trendLines[parseInt(count_1.toString(), 10)];\n var data_2 = {};\n data_2 = this.parseTrendLines(trendLine, fill);\n trendLinesData.push(data_2);\n series.trendlines = trendLinesData;\n }\n }\n return series;\n };\n ChartComponent.prototype.parseDataLabels = function (label) {\n var dataLabel = {};\n dataLabel.visible = true;\n if (this.isPieType) {\n if (label[positionProperty[this.keywordIndex]] === 'BestFit' || label[positionProperty[this.keywordIndex]] === 'Inside') {\n dataLabel.position = 'Inside';\n }\n else {\n dataLabel.position = 'Outside';\n }\n }\n else {\n dataLabel.position = this.dataLabelPosition(label[positionProperty[this.keywordIndex]]);\n }\n return dataLabel;\n };\n ChartComponent.prototype.parseErrorBars = function (errorBarData) {\n var errorBar = {};\n errorBar.visible = true;\n errorBar.type = errorBarData[typeProperty[this.keywordIndex]];\n errorBar.direction = errorBarData[directionProperty[this.keywordIndex]];\n if (errorBarData[endStyleProperty[this.keywordIndex]] === 'Cap') {\n errorBar.errorBarCap = { width: 1 };\n }\n else {\n errorBar.errorBarCap = { width: 0 };\n }\n return errorBar;\n };\n ChartComponent.prototype.parseTrendLines = function (trendLines, fill) {\n var trendLine = {};\n trendLine.type = trendLines[typeProperty[this.keywordIndex]];\n trendLine.name = trendLines[nameProperty[this.keywordIndex]];\n trendLine.forwardForecast = trendLines[forwardProperty[this.keywordIndex]];\n trendLine.backwardForecast = trendLines[backwardProperty[this.keywordIndex]];\n if (trendLines[interceptProperty[this.keywordIndex]] === 'NaN') {\n trendLine.intercept = 0;\n }\n else {\n trendLine.intercept = trendLines[interceptProperty[this.keywordIndex]];\n }\n trendLine.fill = fill;\n return trendLine;\n };\n ChartComponent.prototype.dataLabelPosition = function (position) {\n var labelPosition = 'Auto';\n switch (position) {\n case 'Outside':\n labelPosition = 'Outer';\n break;\n case 'Center':\n labelPosition = 'Middle';\n break;\n case 'Inside':\n labelPosition = 'Top';\n break;\n case 'OutsideBase':\n labelPosition = 'Bottom';\n break;\n }\n return labelPosition;\n };\n ChartComponent.prototype.chartFormat = function (dataPoints, type) {\n var format = dataPoints;\n if (type === 'Line' || type === 'StackingLine' || type === 'StackingLine100') {\n return format[lineProperty[this.keywordIndex]][rgbProperty[this.keywordIndex]];\n }\n else {\n return format[fillProperty[this.keywordIndex]][rgbProperty[this.keywordIndex]];\n }\n };\n ChartComponent.prototype.chartPrimaryXAxis = function (data, type) {\n // json data\n var primaryXAxis = {};\n if (data[chartTitleProperty[this.keywordIndex]]) {\n primaryXAxis.title = data[chartTitleProperty[this.keywordIndex]];\n }\n var categoryType = this.chartCategoryType(data[categoryTypeProperty[this.keywordIndex]]);\n primaryXAxis.valueType = categoryType;\n if (categoryType === 'DateTime') {\n primaryXAxis.intervalType = 'Days';\n primaryXAxis.labelFormat = 'M/d/yyyy';\n primaryXAxis.edgeLabelPlacement = 'Shift';\n }\n if (type === 'Scatter_Markers' || type === 'Bubble') {\n this.checkAndSetAxisValue(primaryXAxis, data);\n }\n if (this.parseBoolValue(data[hasMajorGridLinesProperty[this.keywordIndex]])) {\n primaryXAxis.majorGridLines = { width: 1 };\n }\n if (this.parseBoolValue(data[hasMinorGridLinesProperty[this.keywordIndex]])) {\n primaryXAxis.minorTicksPerInterval = 4;\n }\n return primaryXAxis;\n };\n ChartComponent.prototype.chartCategoryType = function (categoryType) {\n var type = '';\n switch (categoryType) {\n case 'Time':\n type = 'DateTime';\n break;\n case 'Automatic':\n type = 'Category';\n break;\n }\n return type;\n };\n ChartComponent.prototype.chartPrimaryYAxis = function (data) {\n // json data\n var primaryYAxis = {};\n if (data[chartTitleProperty[this.keywordIndex]]) {\n primaryYAxis.title = data[chartTitleProperty[this.keywordIndex]];\n }\n this.checkAndSetAxisValue(primaryYAxis, data);\n if (data[hasMajorGridLinesProperty[this.keywordIndex]]) {\n primaryYAxis.majorGridLines = { width: 1 };\n }\n if (data[hasMinorGridLinesProperty[this.keywordIndex]]) {\n primaryYAxis.minorTicksPerInterval = 4;\n }\n return primaryYAxis;\n };\n ChartComponent.prototype.checkAndSetAxisValue = function (primaryYAxis, data) {\n if (data[minimumValueProperty[this.keywordIndex]] !== 0) {\n primaryYAxis.minimum = data[minimumValueProperty[this.keywordIndex]];\n }\n if (data[maximumValueProperty[this.keywordIndex]] !== 0) {\n primaryYAxis.maximum = data[maximumValueProperty[this.keywordIndex]];\n }\n if (data[majorUnitProperty[this.keywordIndex]] !== 0) {\n var isAutoMajor = data[isAutoMajorProperty[this.keywordIndex]];\n if (isAutoMajor && this.parseBoolValue(isAutoMajor)) {\n primaryYAxis.interval = this.calculateMajorUnit(this.chartYValues);\n }\n else {\n primaryYAxis.interval = data[majorUnitProperty[this.keywordIndex]];\n }\n }\n };\n ChartComponent.prototype.calculateMajorUnit = function (chartYValues) {\n if (chartYValues && chartYValues.length > 0) {\n var maxValue = Number.MIN_VALUE;\n var minValue = Number.MAX_VALUE;\n for (var i = 0; i < chartYValues.length; i++) {\n var yValue = chartYValues[parseInt(i.toString(), 10)];\n if (yValue > maxValue) {\n maxValue = yValue;\n }\n if (yValue < minValue) {\n minValue = yValue;\n }\n }\n var range = maxValue - minValue;\n var intervalSize = range / 1.5;\n return this.roundToNiceNumber(intervalSize);\n }\n return 1;\n };\n ChartComponent.prototype.roundToNiceNumber = function (range) {\n var log10 = Math.floor(Math.log(range) / Math.log(10));\n var pow10 = Math.pow(10, log10);\n var frac = range / pow10;\n if (frac < 1.5) {\n return 1 * pow10;\n }\n else if (frac < 3) {\n return 2 * pow10;\n }\n else if (frac < 7) {\n return 5 * pow10;\n }\n else {\n return 10 * pow10;\n }\n };\n ChartComponent.prototype.chartData = function (chart, type) {\n // json data\n var data = chart[chartCategoryProperty[this.keywordIndex]];\n var chartData = [];\n for (var i = 0; i < data.length; i++) {\n var xData = data[parseInt(i.toString(), 10)];\n var plotValue = this.chartPlotData(xData, chart, type, i);\n chartData.push(plotValue);\n }\n return chartData;\n };\n ChartComponent.prototype.chartPlotData = function (data, chart, type, count) {\n var _this = this;\n var plotValue = {};\n var series = chart[chartSeriesProperty[this.keywordIndex]];\n if (chart[chartPrimaryCategoryAxisProperty[this.keywordIndex]][numberFormatProperty[this.keywordIndex]] === 'm/d/yyyy') {\n var date = data[categoryXNameProperty[this.keywordIndex]];\n var array = date.split('/');\n var month = Number(array[0]);\n var day = Number(array[1]);\n var year = Number(array[2]);\n plotValue.x = new Date(year, month - 1, day);\n }\n else {\n plotValue.x = data[categoryXNameProperty[this.keywordIndex]];\n }\n for (var j = 0; j < series.length; j++) {\n var yData = data[chartDataProperty[this.keywordIndex]][parseInt(j.toString(), 10)];\n var yValue = yData[yValueProperty[this.keywordIndex]];\n this.chartYValues.push(yValue);\n plotValue['y' + j] = yValue;\n if (type === 'Bubble') {\n plotValue['size' + j] = yData[sizeProperty[this.keywordIndex]];\n }\n if (chart[chartTypeProperty[this.keywordIndex]] === 'Pie' || chart[chartTypeProperty[this.keywordIndex]] === 'Doughnut' || chart[chartTypeProperty[this.keywordIndex]] === 'Column_Stacked') {\n var seriesData = series[parseInt(j.toString(), 10)];\n var seriesDataPoints = seriesData[dataPointsProperty[this.keywordIndex]].find(function (obj) {\n return obj[idProperty[_this.keywordIndex]] === count;\n });\n if (!isNullOrUndefined(seriesDataPoints)) {\n plotValue.color = this.chartFormat(seriesDataPoints, type);\n }\n else {\n if (seriesData[dataPointsProperty[this.keywordIndex]].length > 1 && seriesData[dataPointsProperty[this.keywordIndex]][parseInt(count.toString(), 10)][idProperty[this.keywordIndex]] === 0) {\n seriesDataPoints = seriesData[dataPointsProperty[this.keywordIndex]][parseInt(count.toString(), 10)];\n plotValue.color = this.chartFormat(seriesDataPoints, type);\n }\n else {\n if (!isNullOrUndefined(seriesData[seriesFormatProperty[this.keywordIndex]]) && !isNullOrUndefined(seriesData[seriesFormatProperty[this.keywordIndex]][fillProperty[this.keywordIndex]])) {\n if (seriesData[seriesFormatProperty[this.keywordIndex]][fillProperty[this.keywordIndex]][rgbProperty[this.keywordIndex]].length > 7) {\n plotValue.color = this.getColor(seriesData[seriesFormatProperty[this.keywordIndex]][fillProperty[this.keywordIndex]][rgbProperty[this.keywordIndex]]);\n }\n }\n }\n }\n }\n }\n return plotValue;\n };\n ChartComponent.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n if (color.length > 7) {\n return color.substr(0, 7);\n }\n }\n }\n return color;\n };\n ChartComponent.prototype.parseChartLegend = function (data) {\n var legendSettings = {};\n var position = data[positionProperty[this.keywordIndex]];\n if (position === 'Corner') {\n position = 'right';\n }\n if (position) {\n legendSettings.visible = true;\n legendSettings.position = position.charAt(0).toUpperCase() + position.slice(1);\n }\n else {\n legendSettings.visible = false;\n }\n return legendSettings;\n };\n ChartComponent.prototype.parseBoolValue = function (value) {\n if (value instanceof String) {\n if (isNullOrUndefined(value) || value == \"f\" || value == \"0\" || value == \"off\" || value == \"false\") {\n return false;\n }\n else {\n return true;\n }\n }\n else {\n if (value == 1) {\n return true;\n }\n else {\n return false;\n }\n }\n };\n /**\n * Destroys the internal objects which is maintained.\n */\n ChartComponent.prototype.destroy = function () {\n if (this.chart) {\n this.chart.destroy();\n }\n this.chart = undefined;\n if (this.chartYValues) {\n this.chartYValues = [];\n }\n this.chartYValues = undefined;\n };\n return ChartComponent;\n}());\nexport { ChartComponent };\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WListLevel } from '../list/list-level';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { WCharacterFormat, WListFormat, WParagraphFormat, WCellFormat, WSectionFormat, WRowFormat, WColumnFormat } from '../format/index';\nimport { WCharacterStyle, WParagraphStyle, WTabStop, WTableStyle } from '../format/index';\nimport { LineWidget, ParagraphWidget, ImageElementBox, BodyWidget, TextElementBox, TableCellWidget, TableRowWidget, TableWidget, FieldElementBox, HeaderFooterWidget, BookmarkElementBox, FieldTextElementBox, TabElementBox, EditRangeStartElementBox, EditRangeEndElementBox, ChartElementBox, ChartDataFormat, ChartCategory, ChartData, ChartSeries, ChartDataLabels, ChartTrendLines, ChartSeriesFormat, CommentCharacterElementBox, CommentElementBox, TextFormField, CheckBoxFormField, DropDownFormField, ShapeElementBox, LineFormat, TextFrame, ContentControlProperties, ContentControlListItems, ContentControl, CheckBoxState, XmlMapping, CustomXmlPart, Footnote, FootnoteElementBox, FillFormat, TablePosition, BreakElementBox, FootnoteEndnoteMarkerElementBox } from './page';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { Dictionary } from '../../base/dictionary';\nimport { ChartComponent } from '@syncfusion/ej2-office-chart';\nimport { Revision } from '../track-changes/track-changes';\nimport { FontSchemeStruct } from '../index';\nimport { sectionsProperty, imagesProperty, paraStyleNameProperty, fontSubstitutionTableProperty, characterFormatProperty, paragraphFormatProperty, listsProperty, abstractListsProperty, backgroundProperty, stylesProperty, commentsProperty, revisionsProperty, customXmlProperty, defaultTabWidthProperty, formattingProperty, trackChangesProperty, protectionTypeProperty, enforcementProperty, hashValueProperty, saltValueProperty, doNotUseHTMLParagraphAutoSpacingProperty, alignTablesRowByRowProperty, formFieldShadingProperty, footnotesProperty, endnotesProperty, compatibilityModeProperty, themeFontLanguagesProperty, themesProperty, nameProperty, basedOnProperty, nextProperty, linkProperty, localeIdProperty, localeIdFarEastProperty, localeIdBidiProperty, boldProperty, italicProperty, underlineProperty, baselineAlignmentProperty, strikethroughProperty, highlightColorProperty, fontSizeProperty, fontColorProperty, fontFamilyProperty, styleNameProperty, bidiProperty, bdoProperty, fontSizeBidiProperty, fontFamilyBidiProperty, boldBidiProperty, italicBidiProperty, allCapsProperty, complexScriptProperty, fontFamilyAsciiProperty, fontFamilyFarEastProperty, fontFamilyNonFarEastProperty, revisionIdsProperty, listIdProperty, listLevelNumberProperty, leftIndentProperty, rightIndentProperty, firstLineIndentProperty, textAlignmentProperty, afterSpacingProperty, beforeSpacingProperty, spaceAfterAutoProperty, spaceBeforeAutoProperty, lineSpacingProperty, lineSpacingTypeProperty, listFormatProperty, keepWithNextProperty, widowControlProperty, keepLinesTogetherProperty, outlineLevelProperty, contextualSpacingProperty, bordersProperty, tabsProperty, headerDistanceProperty, footerDistanceProperty, differentFirstPageProperty, differentOddAndEvenPagesProperty, pageWidthProperty, pageHeightProperty, leftMarginProperty, rightMarginProperty, topMarginProperty, bottomMarginProperty, restartPageNumberingProperty, pageStartingNumberProperty, endnoteNumberFormatProperty, footNoteNumberFormatProperty, restartIndexForFootnotesProperty, restartIndexForEndnotesProperty, initialFootNoteNumberProperty, initialEndNoteNumberProperty, pageNumberStyleProperty, columnsProperty, numberOfColumnsProperty, equalWidthProperty, lineBetweenColumnsProperty, breakCodeProperty, cellWidthProperty, columnSpanProperty, rowSpanProperty, verticalAlignmentProperty, allowBreakAcrossPagesProperty, isHeaderProperty, heightTypeProperty, gridBeforeProperty, gridBeforeWidthProperty, gridBeforeWidthTypeProperty, gridAfterProperty, gridAfterWidthProperty, gridAfterWidthTypeProperty, allowAutoFitProperty, cellSpacingProperty, shadingProperty, tableAlignmentProperty, preferredWidthProperty, preferredWidthTypeProperty, horizontalPositionAbsProperty, textureProperty, backgroundColorProperty, foregroundColorProperty, shadowProperty, hasNoneStyleProperty, verticalProperty, horizontalProperty, diagonalUpProperty, diagonalDownProperty, lineStyleProperty, lineWidthProperty, layoutProperty, dataFormatProperty, yValueProperty, chartDataProperty, categoryXNameProperty, lineProperty, foreColorProperty, layoutXProperty, layoutYProperty, directionProperty, endStyleProperty, numberValueProperty, markerStyleProperty, markerColorProperty, markerSizeProperty, forwardProperty, backwardProperty, interceptProperty, isDisplayRSquaredProperty, isDisplayEquationProperty, seriesNameProperty, dataLabelProperty, errorBarProperty, seriesFormatProperty, trendLinesProperty, dataPointsProperty, firstSliceAngleProperty, holeSizeProperty, isLegendKeyProperty, isBubbleSizeProperty, isCategoryNameProperty, isSeriesNameProperty, isValueProperty, isPercentageProperty, isLeaderLinesProperty, showSeriesKeysProperty, hasHorizontalBorderProperty, hasVerticalBorderProperty, hasBordersProperty, categoryTypeProperty, chartCategoryProperty, chartSeriesProperty, chartAreaProperty, chartTitleAreaProperty, plotAreaProperty, chartLegendProperty, chartPrimaryCategoryAxisProperty, chartPrimaryValueAxisProperty, chartTitleProperty, chartTypeProperty, gapWidthProperty, overlapProperty, chartDataTableProperty, textProperty, shapeIdProperty, alternativeTextProperty, visibleProperty, widthProperty, heightProperty, widthScaleProperty, heightScaleProperty, lineFormatProperty, fillFormatProperty, textWrappingStyleProperty, textWrappingTypeProperty, verticalRelativePercentProperty, horizontalRelativePercentProperty, heightRelativePercentProperty, widthRelativePercentProperty, zOrderPositionProperty, layoutInCellProperty, lockAnchorProperty, autoShapeTypeProperty, textFrameProperty, colorProperty, fillProperty, textVerticalAlignmentProperty, imageStringProperty, metaFileImageStringProperty, isInlineImageProperty, isMetaFileProperty, topProperty, bottomProperty, rightProperty, leftProperty, getImageHeightProperty, getImageWidthProperty, hasFieldEndProperty, formFieldDataProperty, fieldTypeProperty, enabledProperty, helpTextProperty, statusTextProperty, textInputProperty, checkBoxProperty, dropDownListProperty, maxLengthProperty, defaultValueProperty, formatProperty, sizeTypeProperty, sizeProperty, checkedProperty, dropDownItemsProperty, selectedIndexProperty, commentIdProperty, commentCharacterTypeProperty, authorProperty, initialProperty, dateProperty, doneProperty, replyCommentsProperty, revisionTypeProperty, revisionIdProperty, itemIDProperty, xmlProperty, footnoteTypeProperty, symbolCodeProperty, symbolFontNameProperty, customMarkerProperty, inlinesProperty, contentControlPropertiesProperty, lockContentControlProperty, lockContentsProperty, tagProperty, titleProperty, hasPlaceHolderTextProperty, multiLineProperty, isTemporaryProperty, dateCalendarTypeProperty, dateStorageFormatProperty, dateDisplayLocaleProperty, dateDisplayFormatProperty, isCheckedProperty, uncheckedStateProperty, checkedStateProperty, contentControlListItemsProperty, xmlMappingProperty, fontProperty, valueProperty, displayTextProperty, isMappedProperty, isWordMlProperty, prefixMappingProperty, xPathProperty, storeItemIdProperty, customXmlPartProperty, idProperty, cellFormatProperty, rowFormatProperty, cellsProperty, rowsProperty, descriptionProperty, wrapTextAroundProperty, positioningProperty, tableFormatProperty, allowOverlapProperty, distanceTopProperty, distanceRightProperty, distanceLeftProperty, distanceBottomProperty, verticalOriginProperty, verticalPositionProperty, horizontalOriginProperty, horizontalAlignmentProperty, horizontalPositionProperty, blocksProperty, headerProperty, footerProperty, evenHeaderProperty, evenFooterProperty, firstPageHeaderProperty, firstPageFooterProperty, headersFootersProperty, sectionFormatProperty, listLevelPatternProperty, followCharacterProperty, startAtProperty, restartLevelProperty, levelNumberProperty, numberFormatProperty, abstractListIdProperty, levelsProperty, overrideListLevelProperty, levelOverridesProperty, separatorProperty, continuationSeparatorProperty, continuationNoticeProperty, bookmarkTypeProperty, propertiesProperty, tabJustificationProperty, positionProperty, deletePositionProperty, tabLeaderProperty, editRangeIdProperty, columnFirstProperty, columnLastProperty, userProperty, groupProperty, editableRangeStartProperty, spaceProperty, fontSchemeProperty, fontSchemeNameProperty, majorFontSchemeProperty, minorFontSchemeProperty, fontSchemeListProperty, fontTypefaceProperty, typefaceProperty, panoseProperty, typeProperty, majorUnitProperty, maximumValueProperty, minimumValueProperty, hasMajorGridLinesProperty, hasMinorGridLinesProperty, majorTickMarkProperty, minorTickMarkProperty, tickLabelPositionProperty, rgbProperty, appearanceProperty, lineFormatTypeProperty, allowSpaceOfSameStyleInTableProperty, weightProperty, inlineFormatProperty, fontNameProperty, isCompressedProperty, isAfterParagraphMarkProperty, isAfterRowMarkProperty, isAfterCellMarkProperty, isAfterTableMarkProperty, belowTextProperty, breakClearTypeProperty, characterSpacingProperty, scalingProperty, nsidProperty, incrementalOps, isLegalStyleNumberingProperty, horizontalRuleProperty, isAutoMajorProperty } from '../../index';\n/**\n * @private\n */\nvar SfdtReader = /** @class */ (function () {\n function SfdtReader(documentHelper) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.documentHelper = undefined;\n /**\n * @private\n */\n this.commentStarts = undefined;\n /**\n * @private\n */\n this.commentEnds = undefined;\n /**\n * @private\n */\n this.commentsCollection = undefined;\n /**\n * @private\n */\n this.revisionCollection = undefined;\n this.isPageBreakInsideTable = false;\n this.referedRevisions = [];\n this.isParseHeader = false;\n this.footnotes = undefined;\n this.endnotes = undefined;\n this.keywordIndex = undefined;\n this.themes = undefined;\n /**\n * @private\n */\n this.isCutPerformed = false;\n /**\n * @private\n */\n this.isPaste = false;\n /**\n * @private\n */\n this.isHtmlPaste = false;\n this.documentHelper = documentHelper;\n this.editableRanges = new Dictionary();\n }\n Object.defineProperty(SfdtReader.prototype, \"isPasting\", {\n get: function () {\n return this.viewer && this.viewer.owner.isPastingContent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SfdtReader.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n SfdtReader.prototype.convertJsonToDocument = function (json, incrementalOperations) {\n this.commentStarts = new Dictionary();\n this.commentEnds = new Dictionary();\n this.commentsCollection = new Dictionary();\n this.revisionCollection = new Dictionary();\n this.referedRevisions = [];\n this.keywordIndex = 0;\n this.footnotes = new Footnote();\n this.endnotes = new Footnote();\n var sections = [];\n var jsonObject = HelperMethods.getSfdtDocument(json);\n if (!isNullOrUndefined(jsonObject.optimizeSfdt) && jsonObject.optimizeSfdt) {\n this.keywordIndex = 1;\n }\n if (!isNullOrUndefined(jsonObject[fontSubstitutionTableProperty[this.keywordIndex]])) {\n this.parseFontSubstitutionTable(jsonObject[fontSubstitutionTableProperty[this.keywordIndex]]);\n }\n if (isNullOrUndefined(jsonObject[characterFormatProperty[this.keywordIndex]])) {\n this.parseCharacterFormat(0, this.viewer.owner.characterFormat, this.documentHelper.characterFormat);\n }\n else {\n this.documentHelper.characterFormat.clearFormat();\n this.parseCharacterFormat(this.keywordIndex, jsonObject[characterFormatProperty[this.keywordIndex]], this.documentHelper.characterFormat);\n }\n if (isNullOrUndefined(jsonObject[paragraphFormatProperty[this.keywordIndex]])) {\n this.parseParagraphFormat(0, this.viewer.owner.paragraphFormat, this.documentHelper.paragraphFormat);\n }\n else {\n this.parseParagraphFormat(this.keywordIndex, jsonObject[paragraphFormatProperty[this.keywordIndex]], this.documentHelper.paragraphFormat);\n }\n if (!isNullOrUndefined(jsonObject[themeFontLanguagesProperty[this.keywordIndex]])) {\n this.parseCharacterFormat(this.keywordIndex, jsonObject[themeFontLanguagesProperty[this.keywordIndex]], this.documentHelper.themeFontLanguage);\n }\n this.parseDocumentProtection(jsonObject);\n if (!isNullOrUndefined(jsonObject[defaultTabWidthProperty[this.keywordIndex]])) {\n this.documentHelper.defaultTabWidth = jsonObject[defaultTabWidthProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(jsonObject[trackChangesProperty[this.keywordIndex]])) {\n //when new document is open in collaborative editing, again building operation for enable track changes. So skipping it. \n if (this.documentHelper.owner.enableTrackChanges !== HelperMethods.parseBoolValue(jsonObject[trackChangesProperty[this.keywordIndex]])) {\n this.documentHelper.owner.skipSettingsOps = true;\n }\n this.documentHelper.owner.enableTrackChanges = HelperMethods.parseBoolValue(jsonObject[trackChangesProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(jsonObject[doNotUseHTMLParagraphAutoSpacingProperty[this.keywordIndex]])) {\n this.documentHelper.dontUseHtmlParagraphAutoSpacing = HelperMethods.parseBoolValue(jsonObject[doNotUseHTMLParagraphAutoSpacingProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(jsonObject[allowSpaceOfSameStyleInTableProperty[this.keywordIndex]])) {\n this.documentHelper.allowSpaceOfSameStyleInTable = HelperMethods.parseBoolValue(jsonObject[allowSpaceOfSameStyleInTableProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(jsonObject[alignTablesRowByRowProperty[this.keywordIndex]])) {\n this.documentHelper.alignTablesRowByRow = HelperMethods.parseBoolValue(jsonObject[alignTablesRowByRowProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(jsonObject[backgroundProperty[this.keywordIndex]])) {\n this.documentHelper.backgroundColor = this.getColor(jsonObject[backgroundProperty[this.keywordIndex]][colorProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(jsonObject[compatibilityModeProperty[this.keywordIndex]])) {\n this.documentHelper.compatibilityMode = this.getCompatibilityMode(jsonObject[compatibilityModeProperty[this.keywordIndex]]);\n if (!isNullOrUndefined(this.documentHelper.owner.documentSettings)) {\n this.documentHelper.owner.documentSettings.compatibilityMode = this.getCompatibilityMode(jsonObject[compatibilityModeProperty[this.keywordIndex]]);\n }\n }\n if (!isNullOrUndefined(jsonObject[abstractListsProperty[this.keywordIndex]])) {\n this.parseAbstractList(jsonObject, this.documentHelper.abstractLists);\n }\n if (!isNullOrUndefined(jsonObject[listsProperty[this.keywordIndex]])) {\n this.parseList(jsonObject, this.documentHelper.lists);\n }\n if (!isNullOrUndefined(jsonObject[stylesProperty[this.keywordIndex]])) {\n this.parseStyles(jsonObject, this.documentHelper.styles);\n }\n if (!isNullOrUndefined(jsonObject[commentsProperty[this.keywordIndex]])) {\n this.parseComments(jsonObject, this.documentHelper.comments);\n }\n if (!isNullOrUndefined(jsonObject[revisionsProperty[this.keywordIndex]])) {\n this.parseRevisions(jsonObject, this.viewer.owner.revisionsInternal.changes);\n }\n if (!isNullOrUndefined(jsonObject[imagesProperty[this.keywordIndex]])) {\n this.parseImages(jsonObject[imagesProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(jsonObject[sectionsProperty[this.keywordIndex]])) {\n this.parseSections(jsonObject[sectionsProperty[this.keywordIndex]], sections);\n }\n if (!isNullOrUndefined(jsonObject[customXmlProperty[this.keywordIndex]])) {\n this.parseCustomXml(jsonObject);\n }\n if (!isNullOrUndefined(jsonObject[formFieldShadingProperty[this.keywordIndex]])) {\n this.documentHelper.owner.documentEditorSettings.formFieldSettings.applyShading = HelperMethods.parseBoolValue(jsonObject[formFieldShadingProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(jsonObject[footnotesProperty[this.keywordIndex]])) {\n this.parseFootnotes(jsonObject[footnotesProperty[this.keywordIndex]], this.documentHelper.footnotes);\n }\n if (!isNullOrUndefined(jsonObject[endnotesProperty[this.keywordIndex]])) {\n this.parseEndtnotes(jsonObject[endnotesProperty[this.keywordIndex]], this.documentHelper.endnotes);\n }\n if (!isNullOrUndefined(jsonObject[themesProperty[this.keywordIndex]])) {\n this.parseThemes(jsonObject[themesProperty[this.keywordIndex]], this.documentHelper.themes);\n }\n this.generalizeRevisions();\n this.removeUnmappedBookmark();\n if (!isNullOrUndefined(jsonObject[incrementalOps[0]])) {\n incrementalOperations[incrementalOps[0]] = (jsonObject[incrementalOps[0]]);\n }\n if (this.documentHelper.fieldStacks && this.documentHelper.fieldStacks.length > 0) {\n this.documentHelper.fieldStacks = [];\n }\n return sections;\n };\n SfdtReader.prototype.parseFontSubstitutionTable = function (fontSubstitutionTable) {\n if (!isNullOrUndefined(this.documentHelper) && !isNullOrUndefined(this.documentHelper.fontSubstitutionTable)) {\n if (Object.keys(fontSubstitutionTable).length > 0) {\n var keys = Object.keys(fontSubstitutionTable);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n this.documentHelper.fontSubstitutionTable.add(key, fontSubstitutionTable[key]);\n }\n }\n }\n };\n SfdtReader.prototype.removeUnmappedBookmark = function () {\n var bookmarkKeys = this.documentHelper.bookmarks.keys;\n var endBookmark = this.documentHelper.endBookmarksUpdated;\n for (var i = 0; i < bookmarkKeys.length; i++) {\n if (endBookmark.indexOf(bookmarkKeys[i]) === -1) {\n var bookmark = this.documentHelper.bookmarks.get(bookmarkKeys[i]);\n if (bookmark) {\n bookmark.line.children.splice(bookmark.line.children.indexOf(bookmark), 1);\n }\n this.documentHelper.bookmarks.remove(bookmarkKeys[i]);\n }\n }\n this.documentHelper.endBookmarksUpdated = [];\n };\n SfdtReader.prototype.generalizeRevisions = function () {\n var _this = this;\n var tempRevisionCollection = new Dictionary();\n var tempRevisons = [];\n this.referedRevisions.forEach(function (element) {\n var revision = _this.documentHelper.revisionsInternal.get(element);\n if (tempRevisons.indexOf(revision) === -1) {\n tempRevisons.push(revision);\n tempRevisionCollection.add(element, revision);\n }\n });\n this.viewer.owner.revisionsInternal.changes = tempRevisons;\n this.documentHelper.revisionsInternal = tempRevisionCollection;\n };\n SfdtReader.prototype.parseFootnotes = function (data, footnote) {\n if (!isNullOrUndefined(data[separatorProperty[this.keywordIndex]])) {\n this.parseBody(data[separatorProperty[this.keywordIndex]], footnote.separator);\n }\n if (!isNullOrUndefined(data[continuationNoticeProperty[this.keywordIndex]])) {\n this.parseBody(data[continuationNoticeProperty[this.keywordIndex]], footnote.continuationNotice);\n }\n if (!isNullOrUndefined(data[continuationSeparatorProperty[this.keywordIndex]])) {\n this.parseBody(data[continuationSeparatorProperty[this.keywordIndex]], footnote.continuationSeparator);\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseImages = function (data) {\n for (var img in data) {\n if (Array.isArray(data[\"\" + img])) {\n this.documentHelper.images.add(parseInt(img), data[\"\" + img]);\n }\n else {\n var images = [];\n images.push(data[\"\" + img]);\n this.documentHelper.images.add(parseInt(img), images);\n }\n }\n };\n SfdtReader.prototype.parseEndtnotes = function (data, endnote) {\n if (!isNullOrUndefined(data[separatorProperty[this.keywordIndex]])) {\n this.parseBody(data[separatorProperty[this.keywordIndex]], endnote.separator);\n }\n if (!isNullOrUndefined(data[continuationNoticeProperty[this.keywordIndex]])) {\n this.parseBody(data[continuationNoticeProperty[this.keywordIndex]], endnote.continuationNotice);\n }\n if (!isNullOrUndefined(data[continuationSeparatorProperty[this.keywordIndex]])) {\n this.parseBody(data[continuationSeparatorProperty[this.keywordIndex]], endnote.continuationSeparator);\n }\n };\n SfdtReader.prototype.parseCustomXml = function (data) {\n for (var i = 0; i < data[customXmlProperty[this.keywordIndex]].length; i++) {\n var xmlData = data[customXmlProperty[this.keywordIndex]][i];\n if (!this.revisionCollection.containsKey(xmlData[itemIDProperty[this.keywordIndex]])) {\n this.documentHelper.customXmlData.add(xmlData[itemIDProperty[this.keywordIndex]], xmlData[xmlProperty[this.keywordIndex]]);\n }\n }\n };\n SfdtReader.prototype.parseDocumentProtection = function (data) {\n if (!isNullOrUndefined(data[formattingProperty[this.keywordIndex]])) {\n this.documentHelper.restrictFormatting = HelperMethods.parseBoolValue(data[formattingProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(data[enforcementProperty[this.keywordIndex]])) {\n this.documentHelper.isDocumentProtected = HelperMethods.parseBoolValue(data[enforcementProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(data[protectionTypeProperty[this.keywordIndex]])) {\n this.documentHelper.protectionType = this.getProtectionType(data[protectionTypeProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(data[hashValueProperty[this.keywordIndex]])) {\n this.documentHelper.hashValue = data[hashValueProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(data[saltValueProperty[this.keywordIndex]])) {\n this.documentHelper.saltValue = data[saltValueProperty[this.keywordIndex]];\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseStyles = function (data, styles) {\n for (var i = 0; i < data[stylesProperty[this.keywordIndex]].length; i++) {\n var editor = this.documentHelper.owner.editorModule;\n if ((!isNullOrUndefined(editor) && editor.isRemoteAction) || isNullOrUndefined(this.documentHelper.styles.findByName(data[stylesProperty[this.keywordIndex]][i][nameProperty[this.keywordIndex]]))) {\n this.parseStyle(data, data[stylesProperty[this.keywordIndex]][i], styles);\n }\n }\n };\n SfdtReader.prototype.parseRevisions = function (data, revisions) {\n for (var i = 0; i < data[revisionsProperty[this.keywordIndex]].length; i++) {\n var revisionData = data[revisionsProperty[this.keywordIndex]][i];\n if (!isNullOrUndefined(revisionData[revisionIdProperty[this.keywordIndex]]) && !isNullOrUndefined(revisionData[revisionTypeProperty[this.keywordIndex]])) {\n var revision = this.parseRevision(revisionData);\n var revisionCheck = true;\n if (!this.documentHelper.owner.sfdtExportModule.copyWithTrackChange && this.isPaste) {\n if (this.getRevisionType(revisionData[revisionTypeProperty[this.keywordIndex]]) === 'Insertion' && this.isPaste && this.documentHelper.owner.enableTrackChanges) {\n // var editor = this.documentHelper.owner.editor;\n // if (!isNullOrUndefined(editor) && editor.isRemoteAction) {\n // this.documentHelper.owner.editor.revisionData.push(this.documentHelper.owner.editor.getMarkerData(undefined, undefined, revision));\n // }\n continue;\n }\n else {\n if (!this.revisionCollection.containsKey(revisionData[revisionIdProperty[this.keywordIndex]])) {\n this.revisionCollection.add(revisionData[revisionIdProperty[this.keywordIndex]], revision);\n }\n }\n }\n else {\n this.revisionCollection.add(revisionData[revisionIdProperty[this.keywordIndex]], revision);\n }\n for (var j = 0; j < revisions.length; j++) {\n if (revisions[j].revisionID === revision.revisionID) {\n revisionCheck = false;\n }\n }\n if (revisionCheck && !this.documentHelper.owner.editorModule.isRemoteAction) {\n revisions.push(revision);\n }\n }\n }\n this.documentHelper.revisionsInternal = this.revisionCollection;\n if (this.documentHelper.owner.sfdtExportModule) {\n this.documentHelper.owner.sfdtExportModule.copyWithTrackChange = false;\n }\n };\n SfdtReader.prototype.parseRevision = function (data) {\n if (!isNullOrUndefined(data)) {\n var revision = new Revision(this.viewer.owner, data[authorProperty[this.keywordIndex]], data[dateProperty[this.keywordIndex]]);\n revision.revisionID = data[revisionIdProperty[this.keywordIndex]];\n revision.revisionType = this.getRevisionType(data[revisionTypeProperty[this.keywordIndex]]);\n return revision;\n }\n else {\n return undefined;\n }\n };\n SfdtReader.prototype.checkAndApplyRevision = function (keyIndex, inline, item) {\n if (!isNullOrUndefined(inline[revisionIdsProperty[keyIndex]]) && inline[revisionIdsProperty[keyIndex]].length > 0) {\n for (var i = 0; i < inline[revisionIdsProperty[keyIndex]].length; i++) {\n var id = inline[revisionIdsProperty[keyIndex]][i];\n if (this.revisionCollection.containsKey(id)) {\n this.referedRevisions.push(id);\n var revision = this.revisionCollection.get(id);\n if (!(item instanceof WParagraphFormat)) {\n revision.range.push(item);\n }\n item.revisions.push(revision);\n if (this.isPaste && this.documentHelper.owner.editorModule.isRemoteAction && item instanceof WRowFormat) {\n this.documentHelper.owner.editorModule.remotePasteRevision.push(revision);\n }\n }\n }\n }\n };\n SfdtReader.prototype.parseComments = function (data, comments) {\n var count = 0;\n for (var i = 0; i < data[commentsProperty[this.keywordIndex]].length; i++) {\n var commentData = data[commentsProperty[this.keywordIndex]][i];\n var commentElement = undefined;\n commentElement = this.parseComment(commentData, commentElement);\n while (count < commentData[replyCommentsProperty[this.keywordIndex]].length) {\n var replyComment = undefined;\n replyComment = this.parseComment(commentData[replyCommentsProperty[this.keywordIndex]][count], replyComment);\n replyComment.ownerComment = commentElement;\n replyComment.isReply = true;\n commentElement.replyComments.push(replyComment);\n this.commentsCollection.add(replyComment.commentId, replyComment);\n count++;\n }\n this.commentsCollection.add(commentElement.commentId, commentElement);\n comments.push(commentElement);\n count = 0;\n }\n };\n SfdtReader.prototype.parseComment = function (commentData, commentElement) {\n commentElement = new CommentElementBox(commentData[dateProperty[this.keywordIndex]]);\n commentElement.author = commentData[authorProperty[this.keywordIndex]];\n commentElement.initial = commentData[initialProperty[this.keywordIndex]];\n commentElement.commentId = commentData[commentIdProperty[this.keywordIndex]];\n commentElement.isResolved = HelperMethods.parseBoolValue(commentData[doneProperty[this.keywordIndex]]);\n commentElement.text = this.parseCommentText(commentData[blocksProperty[this.keywordIndex]]);\n commentElement.mentions = this.parseCommentMentions(commentData[blocksProperty[this.keywordIndex]]);\n return commentElement;\n };\n SfdtReader.prototype.parseCommentText = function (blocks) {\n var text = '';\n var isFieldDisplayText = false;\n for (var i = 0; i < blocks.length; i++) {\n if (i !== 0) {\n text += '
';\n }\n if (blocks[i][inlinesProperty[this.keywordIndex]].length > 0) {\n var inlines = blocks[i][inlinesProperty[this.keywordIndex]];\n for (var j = 0; j < inlines.length; j++) {\n var inline = inlines[j];\n if ((inline[fieldTypeProperty[this.keywordIndex]] === 0) || (inline[fieldTypeProperty[this.keywordIndex]] === 1) || (inline[fieldTypeProperty[this.keywordIndex]] === 2)) {\n if (inline[fieldTypeProperty[this.keywordIndex]] === 0) {\n j++;\n }\n else if (inline[fieldTypeProperty[this.keywordIndex]] === 2) {\n isFieldDisplayText = true;\n }\n continue;\n }\n var textValue = inline[textProperty[this.keywordIndex]];\n if (isFieldDisplayText) {\n text = text + '' + textValue + '';\n isFieldDisplayText = false;\n }\n else {\n text = text + textValue;\n }\n }\n }\n else {\n text += i === 0 ? '

' : '
';\n }\n if (i !== 0) {\n text += '
';\n }\n }\n return text;\n };\n SfdtReader.prototype.parseCommentMentions = function (blocks) {\n var data = [];\n var isFieldCode = false;\n var isFieldDisplayText = false;\n for (var i = 0; i < blocks.length; i++) {\n var inlines = blocks[i][inlinesProperty[this.keywordIndex]];\n for (var j = 0; j < inlines.length; j++) {\n var inline = inlines[j];\n if ((inline[fieldTypeProperty[this.keywordIndex]] === 0) || (inline[fieldTypeProperty[this.keywordIndex]] === 1) || (inline[fieldTypeProperty[this.keywordIndex]] === 2)) {\n if (inline[fieldTypeProperty[this.keywordIndex]] === 0) {\n isFieldCode = true;\n }\n else if (inline[fieldTypeProperty[this.keywordIndex]] === 2) {\n isFieldDisplayText = true;\n }\n continue;\n }\n var textValue = inline[textProperty[this.keywordIndex]];\n var mention = {};\n if (isFieldCode) {\n var updatedText = textValue.replace(/.*\"(.*)\".*/, '$1');\n mention.EmailId = updatedText;\n isFieldCode = false;\n }\n else if (isFieldDisplayText) {\n mention.Name = textValue;\n isFieldDisplayText = false;\n data.push(mention);\n }\n }\n }\n return data;\n };\n SfdtReader.prototype.parseStyle = function (data, style, styles, resetKeyIndex) {\n var wStyle;\n var keyIndex = 0;\n var editor = this.documentHelper.owner.editorModule;\n if (!isNullOrUndefined(resetKeyIndex) && resetKeyIndex) {\n keyIndex = this.keywordIndex;\n this.keywordIndex = 0;\n }\n if (!isNullOrUndefined(style[typeProperty[this.keywordIndex]])) {\n if (this.getStyleType(style[typeProperty[this.keywordIndex]]) === 'Paragraph') {\n wStyle = new WParagraphStyle();\n wStyle.type = 'Paragraph';\n }\n if (this.getStyleType(style[typeProperty[this.keywordIndex]]) === 'Character') {\n wStyle = new WCharacterStyle();\n wStyle.type = 'Character';\n }\n if (this.getStyleType(style[typeProperty[this.keywordIndex]]) === 'Table') {\n wStyle = new WTableStyle();\n wStyle.type = 'Table';\n }\n if (!isNullOrUndefined(style[nameProperty[this.keywordIndex]])) {\n wStyle.name = style[nameProperty[this.keywordIndex]];\n }\n styles.push(wStyle);\n if (!isNullOrUndefined(style[basedOnProperty[this.keywordIndex]])) {\n var basedOn = void 0;\n if (!isNullOrUndefined(editor) && editor.isRemoteAction) {\n basedOn = this.documentHelper.styles.findByName(style[basedOnProperty[this.keywordIndex]]);\n }\n else {\n basedOn = styles.findByName(style[basedOnProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(basedOn)) {\n if (basedOn.type === wStyle.type && basedOn.name !== wStyle.name) {\n wStyle.basedOn = basedOn;\n }\n }\n else {\n var basedStyle = this.getStyle(style[basedOnProperty[this.keywordIndex]], data);\n var styleString = void 0;\n if (!isNullOrUndefined(basedStyle) && this.getStyleType(basedStyle[typeProperty[this.keywordIndex]]) === wStyle.type) {\n styleString = basedStyle;\n }\n else {\n if (wStyle.type === 'Paragraph') {\n styleString = JSON.parse('{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n }\n else if (wStyle.type === 'Character') {\n styleString = JSON.parse('{\"type\": \"Character\",\"name\": \"Default Paragraph Font\"}');\n }\n }\n this.parseStyle(data, styleString, styles);\n if (!isNullOrUndefined(editor) && editor.isRemoteAction) {\n wStyle.basedOn = this.documentHelper.styles.findByName(styleString[nameProperty[this.keywordIndex]]);\n }\n else {\n wStyle.basedOn = styles.findByName(styleString[nameProperty[this.keywordIndex]]);\n }\n }\n }\n if (!isNullOrUndefined(style[linkProperty[this.keywordIndex]])) {\n var link = styles.findByName(style[linkProperty[this.keywordIndex]]);\n var linkStyle = this.getStyle(style[linkProperty[this.keywordIndex]], data);\n if (!isNullOrUndefined(editor) && editor.isRemoteAction) {\n link = this.documentHelper.styles.findByName(style[linkProperty[this.keywordIndex]]);\n }\n var styleString = void 0;\n if (isNullOrUndefined(link)) {\n if (isNullOrUndefined(linkStyle)) {\n //Construct the CharacterStyle string\n var charaStyle = {};\n charaStyle.characterFormat = style[characterFormatProperty[this.keywordIndex]];\n charaStyle.name = style[nameProperty[this.keywordIndex]] + ' Char';\n charaStyle.type = 'Character';\n //TODO: Implement basedOn\n charaStyle.basedOn = style[basedOnProperty[this.keywordIndex]] === 'Normal' ? 'Default Paragraph Font' : (style[basedOnProperty[this.keywordIndex]] + ' Char');\n styleString = charaStyle;\n }\n else {\n styleString = linkStyle;\n }\n this.parseStyle(data, styleString, styles);\n if (!isNullOrUndefined(editor) && editor.isRemoteAction) {\n wStyle.link = isNullOrUndefined(this.documentHelper.styles.findByName(styleString.name)) ? style[linkProperty[this.keywordIndex]] : this.documentHelper.styles.findByName(styleString.name);\n }\n else {\n wStyle.link = isNullOrUndefined(styles.findByName(styleString.name)) ? style[linkProperty[this.keywordIndex]] : styles.findByName(styleString.name);\n }\n }\n else {\n wStyle.link = link;\n }\n }\n if (!isNullOrUndefined(style[characterFormatProperty[this.keywordIndex]])) {\n this.parseCharacterFormat(this.keywordIndex, style[characterFormatProperty[this.keywordIndex]], wStyle.characterFormat);\n }\n if (!isNullOrUndefined(style[paragraphFormatProperty[this.keywordIndex]])) {\n this.parseParagraphFormat(this.keywordIndex, style[paragraphFormatProperty[this.keywordIndex]], wStyle.paragraphFormat);\n }\n if (!isNullOrUndefined(style[nextProperty[this.keywordIndex]])) {\n if (style[nextProperty[this.keywordIndex]] === style[nameProperty[this.keywordIndex]]) {\n wStyle.next = wStyle;\n }\n else {\n var next = void 0;\n if (!isNullOrUndefined(editor) && editor.isRemoteAction) {\n next = this.documentHelper.styles.findByName(style[nextProperty[this.keywordIndex]]);\n }\n else {\n next = styles.findByName(style[nextProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(next) && next.type === wStyle.type) {\n wStyle.next = next;\n }\n else {\n var nextStyleString = this.getStyle(style[nextProperty[this.keywordIndex]], data);\n if (!isNullOrUndefined(nextStyleString)) {\n this.parseStyle(data, nextStyleString, styles);\n if (!isNullOrUndefined(editor) && editor.isRemoteAction) {\n wStyle.next = this.documentHelper.styles.findByName(nextStyleString.name);\n }\n else {\n wStyle.next = styles.findByName(nextStyleString.name);\n }\n }\n else {\n wStyle.next = wStyle;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(resetKeyIndex) && resetKeyIndex) {\n this.keywordIndex = keyIndex;\n }\n if (!isNullOrUndefined(wStyle) && wStyle.type !== 'Table') {\n this.documentHelper.addToStylesMap(wStyle);\n }\n };\n SfdtReader.prototype.getStyle = function (name, data) {\n for (var i = 0; i < data[stylesProperty[this.keywordIndex]].length; i++) {\n if (data[stylesProperty[this.keywordIndex]][i][nameProperty[this.keywordIndex]] === name) {\n return data[stylesProperty[this.keywordIndex]][i];\n }\n }\n return undefined;\n };\n SfdtReader.prototype.parseAbstractList = function (data, abstractLists) {\n for (var i = 0; i < data[abstractListsProperty[this.keywordIndex]].length; i++) {\n var abstractList = new WAbstractList();\n var abstract = data[abstractListsProperty[this.keywordIndex]][i];\n if (!isNullOrUndefined(abstract)) {\n if (!isNullOrUndefined(abstract[abstractListIdProperty[this.keywordIndex]])) {\n abstractList.abstractListId = abstract[abstractListIdProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(abstract[nsidProperty])) {\n abstractList.nsid = abstract[nsidProperty];\n }\n else {\n // Backward compatibility\n abstractList.nsid = HelperMethods.generateUniqueId(undefined, abstractLists);\n }\n if (!isNullOrUndefined(abstract[levelsProperty[this.keywordIndex]])) {\n for (var j = 0; j < abstract[levelsProperty[this.keywordIndex]].length; j++) {\n var level = abstract[levelsProperty[this.keywordIndex]][j];\n if (!isNullOrUndefined(level)) {\n var listLevel = this.parseListLevel(level, abstractList);\n abstractList.levels.push(listLevel);\n }\n }\n }\n }\n abstractLists.push(abstractList);\n }\n };\n SfdtReader.prototype.parseListLevel = function (data, owner) {\n var listLevel = new WListLevel(owner);\n if (this.getListLevelPattern(data[listLevelPatternProperty[this.keywordIndex]]) === 'Bullet') {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = !isNullOrUndefined(data[numberFormatProperty[this.keywordIndex]]) ? data[numberFormatProperty[this.keywordIndex]] : '';\n }\n else {\n listLevel.listLevelPattern = this.getListLevelPattern(data[listLevelPatternProperty[this.keywordIndex]]);\n listLevel.startAt = data[startAtProperty[this.keywordIndex]];\n listLevel.numberFormat = !isNullOrUndefined(data[numberFormatProperty[this.keywordIndex]]) ? data[numberFormatProperty[this.keywordIndex]] : '';\n if (data[restartLevelProperty[this.keywordIndex]] >= 0) {\n listLevel.restartLevel = data[restartLevelProperty[this.keywordIndex]];\n }\n else {\n listLevel.restartLevel = data[levelNumberProperty[this.keywordIndex]];\n }\n }\n listLevel.paraStyleName = !isNullOrUndefined(data[paraStyleNameProperty[this.keywordIndex]]) ? data[paraStyleNameProperty[this.keywordIndex]] : '';\n listLevel.isLegalStyleNumbering = !isNullOrUndefined(data[isLegalStyleNumberingProperty[this.keywordIndex]]) ? HelperMethods.parseBoolValue(data[isLegalStyleNumberingProperty[this.keywordIndex]]) : false;\n listLevel.followCharacter = this.getFollowCharacterType(data[followCharacterProperty[this.keywordIndex]]);\n this.parseCharacterFormat(this.keywordIndex, data[characterFormatProperty[this.keywordIndex]], listLevel.characterFormat);\n this.parseParagraphFormat(this.keywordIndex, data[paragraphFormatProperty[this.keywordIndex]], listLevel.paragraphFormat);\n return listLevel;\n };\n SfdtReader.prototype.parseList = function (data, listCollection) {\n for (var i = 0; i < data[listsProperty[this.keywordIndex]].length; i++) {\n var list = new WList();\n var lists = data[listsProperty[this.keywordIndex]][i];\n if (!isNullOrUndefined(lists[abstractListIdProperty[this.keywordIndex]])) {\n list.abstractListId = lists[abstractListIdProperty[this.keywordIndex]];\n list.abstractList = this.documentHelper.getAbstractListById(lists[abstractListIdProperty[this.keywordIndex]]);\n }\n listCollection.push(list);\n if (!isNullOrUndefined(lists[listIdProperty[this.keywordIndex]])) {\n list.listId = lists[listIdProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(lists[nsidProperty])) {\n list.nsid = lists[nsidProperty];\n }\n else {\n list.nsid = list.abstractList.nsid;\n }\n if (lists.hasOwnProperty(levelOverridesProperty[this.keywordIndex])) {\n this.parseLevelOverride(lists[levelOverridesProperty[this.keywordIndex]], list);\n }\n }\n };\n SfdtReader.prototype.parseLevelOverride = function (data, list) {\n if (isNullOrUndefined(data)) {\n return;\n }\n for (var i = 0; i < data.length; i++) {\n var levelOverrides = new WLevelOverride();\n var levelOverride = data[i];\n levelOverrides.startAt = levelOverride[startAtProperty[this.keywordIndex]];\n levelOverrides.levelNumber = levelOverride[levelNumberProperty[this.keywordIndex]];\n if (!isNullOrUndefined(levelOverride[overrideListLevelProperty[this.keywordIndex]])) {\n levelOverrides.overrideListLevel = this.parseListLevel(levelOverride[overrideListLevelProperty[this.keywordIndex]], levelOverrides);\n }\n list.levelOverrides.push(levelOverrides);\n }\n };\n SfdtReader.prototype.parseSections = function (data, sections) {\n for (var i = 0; i < data.length; i++) {\n var section = new BodyWidget();\n section.sectionFormat = new WSectionFormat(section);\n section.index = i;\n var item = data[i];\n var breakCode = '';\n var nextItem = data[i + 1];\n var sectionFormat = nextItem && nextItem[sectionFormatProperty[this.keywordIndex]] ? nextItem[sectionFormatProperty[this.keywordIndex]] : undefined;\n breakCode = sectionFormat && sectionFormat[breakCodeProperty[this.keywordIndex]] ? sectionFormat[breakCodeProperty[this.keywordIndex]] : 'NewPage';\n if (!isNullOrUndefined(item[sectionFormatProperty[this.keywordIndex]])) {\n this.parseSectionFormat(this.keywordIndex, item[sectionFormatProperty[this.keywordIndex]], section.sectionFormat);\n }\n if (isNullOrUndefined(item[headersFootersProperty[this.keywordIndex]])) {\n item[headersFootersProperty[this.keywordIndex]] = {};\n }\n this.documentHelper.headersFooters.push(this.parseHeaderFooter(item[headersFootersProperty[this.keywordIndex]], this.documentHelper.headersFooters));\n this.isParseHeader = false;\n this.parseTextBody(item[blocksProperty[this.keywordIndex]], section, i + 1 < data.length, breakCode);\n for (var i_1 = 0; i_1 < section.childWidgets.length; i_1++) {\n section.childWidgets[i_1].containerWidget = section;\n }\n sections.push(section);\n }\n };\n SfdtReader.prototype.parseHeaderFooter = function (data, headersFooters) {\n this.isParseHeader = true;\n var hfs = {};\n if (!isNullOrUndefined(data[headerProperty[this.keywordIndex]])) {\n var oddHeader = new HeaderFooterWidget('OddHeader');\n hfs[0] = oddHeader;\n this.parseTextBody(data[headerProperty[this.keywordIndex]][blocksProperty[this.keywordIndex]], oddHeader);\n }\n if (!isNullOrUndefined(data[footerProperty[this.keywordIndex]])) {\n var oddFooter = new HeaderFooterWidget('OddFooter');\n hfs[1] = oddFooter;\n this.parseTextBody(data[footerProperty[this.keywordIndex]][blocksProperty[this.keywordIndex]], oddFooter);\n }\n if (!isNullOrUndefined(data[evenHeaderProperty[this.keywordIndex]])) {\n var evenHeader = new HeaderFooterWidget('EvenHeader');\n hfs[2] = evenHeader;\n this.parseTextBody(data[evenHeaderProperty[this.keywordIndex]][blocksProperty[this.keywordIndex]], evenHeader);\n }\n if (!isNullOrUndefined(data[evenFooterProperty[this.keywordIndex]])) {\n var evenFooter = new HeaderFooterWidget('EvenFooter');\n hfs[3] = evenFooter;\n this.parseTextBody(data[evenFooterProperty[this.keywordIndex]][blocksProperty[this.keywordIndex]], evenFooter);\n }\n if (!isNullOrUndefined(data[firstPageHeaderProperty[this.keywordIndex]])) {\n var firstPageHeader = new HeaderFooterWidget('FirstPageHeader');\n hfs[4] = firstPageHeader;\n this.parseTextBody(data[firstPageHeaderProperty[this.keywordIndex]][blocksProperty[this.keywordIndex]], firstPageHeader);\n }\n if (!isNullOrUndefined(data[firstPageFooterProperty[this.keywordIndex]])) {\n var firstPageFooter = new HeaderFooterWidget('FirstPageFooter');\n hfs[5] = firstPageFooter;\n this.parseTextBody(data[firstPageFooterProperty[this.keywordIndex]][blocksProperty[this.keywordIndex]], firstPageFooter);\n }\n return hfs;\n };\n SfdtReader.prototype.parseTextBody = function (data, section, isSectionBreak, breakCode) {\n this.parseBody(data, section.childWidgets, section, isSectionBreak, undefined, undefined, breakCode);\n };\n SfdtReader.prototype.addCustomStyles = function (data) {\n if (!isNullOrUndefined(data[stylesProperty[this.keywordIndex]])) {\n for (var i = 0; i < data[stylesProperty[this.keywordIndex]].length; i++) {\n var style = this.documentHelper.styles.findByName(data[stylesProperty[this.keywordIndex]][i][nameProperty[this.keywordIndex]]);\n if (style === undefined) {\n this.parseStyle(data, data[stylesProperty[this.keywordIndex]][i], this.documentHelper.styles);\n }\n }\n }\n };\n SfdtReader.prototype.parseBody = function (data, blocks, container, isSectionBreak, contentControlProperties, styles, breakCode, isFootnoteEndnote) {\n if (!isNullOrUndefined(data)) {\n for (var i = 0; i < data.length; i++) {\n var block = data[i];\n var hasValidElmts = false;\n if (block.hasOwnProperty(inlinesProperty[this.keywordIndex])) {\n var writeInlineFormat = false;\n //writeInlineFormat = this.isPasting && i === data.length - 1;\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n if (block[inlinesProperty[this.keywordIndex]].length > 0) {\n hasValidElmts = this.parseParagraph(block[inlinesProperty[this.keywordIndex]], paragraph, writeInlineFormat, undefined, isFootnoteEndnote && i === 0);\n }\n if (!(isSectionBreak && block === data[data.length - 1] && block[inlinesProperty[this.keywordIndex]].length === 0 && !hasValidElmts)) {\n this.parseCharacterFormat(this.keywordIndex, block[characterFormatProperty[this.keywordIndex]], paragraph.characterFormat);\n this.parseParagraphFormat(this.keywordIndex, block[paragraphFormatProperty[this.keywordIndex]], paragraph.paragraphFormat);\n var styleObj = void 0;\n var styleName = 'Normal';\n var isParaHasStyleName = false;\n if (!isNullOrUndefined(block[paragraphFormatProperty[this.keywordIndex]]) && !isNullOrUndefined(block[paragraphFormatProperty[this.keywordIndex]][styleNameProperty[this.keywordIndex]])) {\n //Default value to link style object.\n styleName = block[paragraphFormatProperty[this.keywordIndex]][styleNameProperty[this.keywordIndex]];\n isParaHasStyleName = true;\n }\n styleObj = this.documentHelper.styles.findByName(styleName, 'Paragraph');\n if (!isNullOrUndefined(styleObj)) {\n // The below lines are disabled because they cause a break for this task: 870732 \n // if (this.isPaste && styles && isParaHasStyleName) {\n // for (let j = 0; j < styles.length; j++) {\n // if (styles[j][nameProperty[this.keywordIndex]] === styleName) {\n // var fontColor = styles[j][characterFormatProperty[this.keywordIndex]];\n // if (isNullOrUndefined(fontColor) || fontColor[fontColorProperty[this.keywordIndex]] !== (styleObj as WCharacterStyle).characterFormat.fontColor) {\n // const charFormat: WCharacterFormat = new WCharacterFormat();\n // this.parseCharacterFormat(this.keywordIndex, styles[j][characterFormatProperty[this.keywordIndex]], charFormat);\n // (styleObj as WCharacterStyle).characterFormat.copyFormat(charFormat);\n // break;\n // }\n // }\n // }\n // }\n paragraph.paragraphFormat.applyStyle(styleObj);\n }\n blocks.push(paragraph);\n }\n else if (isSectionBreak && data.length === 1) {\n blocks.push(paragraph);\n }\n else if (isSectionBreak && block === data[data.length - 1] && block[inlinesProperty[this.keywordIndex]].length === 0 && !hasValidElmts && breakCode != 'NoBreak') {\n var dataIndex = data.indexOf(block);\n var previousData = data[dataIndex - 1];\n if (!isNullOrUndefined(previousData) && previousData.hasOwnProperty(rowsProperty[this.keywordIndex])) {\n blocks.push(paragraph);\n paragraph.isSectionBreak = true;\n }\n }\n paragraph.index = blocks.length - 1;\n paragraph.containerWidget = container;\n }\n else if (block.hasOwnProperty(rowsProperty[this.keywordIndex])) {\n this.parseTable(block, blocks, blocks.length, container);\n }\n else if (block.hasOwnProperty(contentControlPropertiesProperty[this.keywordIndex])) {\n var blockStartContentControl = new ContentControl('Block');\n var blockEndContentControl = new ContentControl('Block');\n this.parseContentControlProperties(block[contentControlPropertiesProperty[this.keywordIndex]], blockStartContentControl.contentControlProperties);\n blockEndContentControl.contentControlProperties = blockStartContentControl.contentControlProperties;\n blockStartContentControl.type = 0;\n blockEndContentControl.type = 1;\n this.parseBody(block[blocksProperty[this.keywordIndex]], blocks, container, isSectionBreak, blockStartContentControl.contentControlProperties);\n for (var j = 0; j < 2; j++) {\n var para = (blocks.length < block[blocksProperty[this.keywordIndex]].length) ? blocks[0] : j === 0 ? blocks[blocks.length - block[blocksProperty[this.keywordIndex]].length] : blocks[blocks.length - 1];\n var blockWidget = void 0;\n if (para instanceof ParagraphWidget) {\n blockWidget = para;\n }\n else if (para instanceof TableWidget) {\n if (j === 0) {\n blockWidget = para.firstChild.firstChild.firstChild;\n }\n else {\n var cell = para.lastChild.lastChild;\n blockWidget = cell.lastChild;\n }\n }\n if (!isNullOrUndefined(blockWidget) && blockWidget.childWidgets.length === 0) {\n var lineWidget = new LineWidget(blockWidget);\n blockWidget.childWidgets.push(lineWidget);\n }\n if (j === 0) {\n blockWidget.firstChild.children.splice(0, 0, blockStartContentControl);\n blockStartContentControl.line = blockWidget.firstChild;\n }\n else {\n blockWidget.lastChild.children.push(blockEndContentControl);\n blockEndContentControl.line = blockWidget.lastChild;\n }\n }\n }\n if (!isNullOrUndefined(contentControlProperties)) {\n blocks[blocks.length - 1].contentControlProperties = contentControlProperties;\n }\n }\n }\n };\n SfdtReader.prototype.parseTable = function (block, blocks, index, section) {\n var table = new TableWidget();\n table.index = index;\n if (!isNullOrUndefined(block[tableFormatProperty[this.keywordIndex]])) {\n this.parseTableFormat(block[tableFormatProperty[this.keywordIndex]], table.tableFormat, this.keywordIndex);\n }\n table.tableFormat.title = block[titleProperty[this.keywordIndex]];\n table.tableFormat.description = block[descriptionProperty[this.keywordIndex]];\n this.parseTablePositioning(block, table);\n for (var i = 0; i < block[rowsProperty[this.keywordIndex]].length; i++) {\n var row = new TableRowWidget();\n row.rowFormat = new WRowFormat(row);\n var tableRow = block[rowsProperty[this.keywordIndex]][i];\n if (!isNullOrUndefined(tableRow[contentControlPropertiesProperty[this.keywordIndex]])) {\n row.contentControlProperties = new ContentControlProperties('Row');\n this.parseContentControlProperties(tableRow[contentControlPropertiesProperty[this.keywordIndex]], row.contentControlProperties);\n }\n if (tableRow.hasOwnProperty(rowFormatProperty[this.keywordIndex])) {\n this.parseRowFormat(tableRow[rowFormatProperty[this.keywordIndex]], row.rowFormat, this.keywordIndex);\n row.index = i;\n for (var j = 0; j < tableRow[cellsProperty[this.keywordIndex]].length; j++) {\n var cell = new TableCellWidget();\n cell.cellFormat = new WCellFormat(cell);\n var tableCell = tableRow[cellsProperty[this.keywordIndex]][j];\n if (!isNullOrUndefined(tableCell[contentControlPropertiesProperty[this.keywordIndex]])) {\n cell.contentControlProperties = new ContentControlProperties('Cell');\n this.parseContentControlProperties(tableCell[contentControlPropertiesProperty[this.keywordIndex]], cell.contentControlProperties);\n }\n row.childWidgets.push(cell);\n cell.containerWidget = row;\n cell.index = j;\n cell.rowIndex = i;\n cell.columnIndex = j;\n if (tableCell.hasOwnProperty(cellFormatProperty[this.keywordIndex])) {\n this.parseCellFormat(tableCell[cellFormatProperty[this.keywordIndex]], cell.cellFormat, this.keywordIndex);\n }\n var item = tableCell[blocksProperty[this.keywordIndex]];\n for (var k = 0; k < item.length; k++) {\n if (item[k].hasOwnProperty([rowsProperty[this.keywordIndex]])) {\n table.isContainInsideTable = true;\n }\n }\n this.isPageBreakInsideTable = true;\n this.parseTextBody(tableCell[blocksProperty[this.keywordIndex]], cell, false);\n if (!isNullOrUndefined(cell.contentControlProperties)) {\n var cellStartContentControl = new ContentControl('Cell');\n var cellEndContentControl = new ContentControl('Cell');\n cellStartContentControl.contentControlProperties = cell.contentControlProperties;\n cellEndContentControl.contentControlProperties = cell.contentControlProperties;\n cellStartContentControl.type = 0;\n cellEndContentControl.type = 1;\n if (cell.firstChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.firstChild);\n cell.firstChild.childWidgets.push(lineWidget);\n }\n cellStartContentControl.line = cell.firstChild.firstChild;\n cell.firstChild.firstChild.children.splice(0, 0, cellStartContentControl);\n if (cell.lastChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.lastChild);\n cell.lastChild.childWidgets.push(lineWidget);\n }\n cellEndContentControl.line = cell.lastChild.lastChild;\n cell.lastChild.lastChild.children.push(cellEndContentControl);\n }\n if (!isNullOrUndefined(row.contentControlProperties)) {\n if (row.firstChild === cell) {\n var rowStartContentControl = new ContentControl('Row');\n rowStartContentControl.contentControlProperties = row.contentControlProperties;\n rowStartContentControl.type = 0;\n if (cell.firstChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.firstChild);\n cell.firstChild.childWidgets.push(lineWidget);\n }\n rowStartContentControl.line = cell.firstChild.firstChild;\n cell.firstChild.firstChild.children.splice(0, 0, rowStartContentControl);\n }\n else if (row.lastChild === cell) {\n var rowEndContentControl = new ContentControl('Row');\n rowEndContentControl.contentControlProperties = row.contentControlProperties;\n rowEndContentControl.type = 1;\n if (cell.lastChild.childWidgets.length === 0) {\n var lineWidget = new LineWidget(cell.lastChild);\n cell.lastChild.childWidgets.push(lineWidget);\n }\n rowEndContentControl.line = cell.lastChild.lastChild;\n cell.lastChild.lastChild.children.push(rowEndContentControl);\n }\n }\n this.isPageBreakInsideTable = false;\n }\n }\n table.childWidgets.push(row);\n row.containerWidget = table;\n }\n table.containerWidget = section;\n blocks.push(table);\n table.isGridUpdated = false;\n };\n SfdtReader.prototype.parseTablePositioning = function (block, table) {\n table.wrapTextAround = !isNullOrUndefined(block[wrapTextAroundProperty[this.keywordIndex]]) ? HelperMethods.parseBoolValue(block[wrapTextAroundProperty[this.keywordIndex]]) : false;\n if (table.wrapTextAround) {\n table.positioning = new TablePosition();\n table.positioning.allowOverlap = HelperMethods.parseBoolValue(block[positioningProperty[this.keywordIndex]][allowOverlapProperty[this.keywordIndex]]);\n if (!isNullOrUndefined(block[positioningProperty[this.keywordIndex]][distanceBottomProperty[this.keywordIndex]])) {\n table.positioning.distanceBottom = HelperMethods.convertPointToPixel(block[positioningProperty[this.keywordIndex]][distanceBottomProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(block[positioningProperty[this.keywordIndex]][distanceLeftProperty[this.keywordIndex]])) {\n table.positioning.distanceLeft = HelperMethods.convertPointToPixel(block[positioningProperty[this.keywordIndex]][distanceLeftProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(block[positioningProperty[this.keywordIndex]][distanceRightProperty[this.keywordIndex]])) {\n table.positioning.distanceRight = HelperMethods.convertPointToPixel(block[positioningProperty[this.keywordIndex]][distanceRightProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(block[positioningProperty[this.keywordIndex]][distanceTopProperty[this.keywordIndex]])) {\n table.positioning.distanceTop = HelperMethods.convertPointToPixel(block[positioningProperty[this.keywordIndex]][distanceTopProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(block[positioningProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]])) {\n table.positioning.verticalAlignment = this.getTableVerticalPosition(block[positioningProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(block[positioningProperty[this.keywordIndex]][verticalOriginProperty[this.keywordIndex]])) {\n table.positioning.verticalOrigin = this.getTableVerticalRelation(block[positioningProperty[this.keywordIndex]][verticalOriginProperty[this.keywordIndex]]);\n }\n table.positioning.verticalPosition = block[positioningProperty[this.keywordIndex]][verticalPositionProperty[this.keywordIndex]];\n if (!isNullOrUndefined(block[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]])) {\n table.positioning.horizontalAlignment = this.getTableHorizontalPosition(block[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(block[positioningProperty[this.keywordIndex]][horizontalOriginProperty[this.keywordIndex]])) {\n table.positioning.horizontalOrigin = this.getTableHorizontalRelation(block[positioningProperty[this.keywordIndex]][horizontalOriginProperty[this.keywordIndex]]);\n }\n table.positioning.horizontalPosition = block[positioningProperty[this.keywordIndex]][horizontalPositionProperty[this.keywordIndex]];\n }\n };\n SfdtReader.prototype.parseRowGridValues = function (data, rowFormat, keyIndex) {\n if (!isNullOrUndefined(data[gridBeforeProperty[keyIndex]])) {\n rowFormat.gridBefore = data[gridBeforeProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[gridBeforeWidthProperty[keyIndex]])) {\n rowFormat.gridBeforeWidth = data[gridBeforeWidthProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[gridBeforeWidthTypeProperty[keyIndex]])) {\n rowFormat.gridBeforeWidthType = this.getWidthType(data[gridBeforeWidthTypeProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(data[gridAfterProperty[keyIndex]])) {\n rowFormat.gridAfter = data[gridAfterProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[gridAfterWidthProperty[keyIndex]])) {\n rowFormat.gridAfterWidth = data[gridAfterWidthProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[gridAfterWidthTypeProperty[keyIndex]])) {\n rowFormat.gridAfterWidthType = this.getWidthType(data[gridAfterWidthTypeProperty[keyIndex]]);\n }\n };\n SfdtReader.prototype.parseContentControlProperties = function (wContentControlProperties, contentControlProperties) {\n if (!isNullOrUndefined(wContentControlProperties[lockContentControlProperty[this.keywordIndex]])) {\n contentControlProperties.lockContentControl = HelperMethods.parseBoolValue(wContentControlProperties[lockContentControlProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[lockContentsProperty[this.keywordIndex]])) {\n contentControlProperties.lockContents = HelperMethods.parseBoolValue(wContentControlProperties[lockContentsProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[tagProperty[this.keywordIndex]])) {\n contentControlProperties.tag = wContentControlProperties[tagProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(wContentControlProperties[colorProperty[this.keywordIndex]])) {\n contentControlProperties.color = wContentControlProperties[colorProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(wContentControlProperties[titleProperty[this.keywordIndex]])) {\n contentControlProperties.title = wContentControlProperties[titleProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(wContentControlProperties[appearanceProperty[this.keywordIndex]])) {\n contentControlProperties.appearance = this.getContentControlAppearance(wContentControlProperties[appearanceProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[typeProperty[this.keywordIndex]])) {\n contentControlProperties.type = this.getContentControlType(wContentControlProperties[typeProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[hasPlaceHolderTextProperty[this.keywordIndex]])) {\n contentControlProperties.hasPlaceHolderText = HelperMethods.parseBoolValue(wContentControlProperties[hasPlaceHolderTextProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[multiLineProperty[this.keywordIndex]])) {\n contentControlProperties.multiline = HelperMethods.parseBoolValue(wContentControlProperties[multiLineProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[isTemporaryProperty[this.keywordIndex]])) {\n contentControlProperties.isTemporary = HelperMethods.parseBoolValue(wContentControlProperties[isTemporaryProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[characterFormatProperty[this.keywordIndex]])) {\n this.parseCharacterFormat(this.keywordIndex, wContentControlProperties[characterFormatProperty[this.keywordIndex]], contentControlProperties.characterFormat);\n }\n if (contentControlProperties.type === 'CheckBox') {\n if (!isNullOrUndefined(wContentControlProperties[isCheckedProperty[this.keywordIndex]])) {\n contentControlProperties.isChecked = HelperMethods.parseBoolValue(wContentControlProperties[isCheckedProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[uncheckedStateProperty[this.keywordIndex]])) {\n contentControlProperties.uncheckedState = new CheckBoxState();\n contentControlProperties.uncheckedState.font = wContentControlProperties[uncheckedStateProperty[this.keywordIndex]][fontProperty[this.keywordIndex]];\n contentControlProperties.uncheckedState.value = wContentControlProperties[uncheckedStateProperty[this.keywordIndex]][valueProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(wContentControlProperties[checkedStateProperty[this.keywordIndex]])) {\n contentControlProperties.checkedState = new CheckBoxState();\n contentControlProperties.checkedState.font = wContentControlProperties[checkedStateProperty[this.keywordIndex]][fontProperty[this.keywordIndex]];\n contentControlProperties.checkedState.value = wContentControlProperties[checkedStateProperty[this.keywordIndex]][valueProperty[this.keywordIndex]];\n }\n }\n else if (contentControlProperties.type === 'Date') {\n if (!isNullOrUndefined(wContentControlProperties[dateCalendarTypeProperty[this.keywordIndex]])) {\n contentControlProperties.dateCalendarType = this.getDateCalendarType(wContentControlProperties[dateCalendarTypeProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[dateStorageFormatProperty[this.keywordIndex]])) {\n contentControlProperties.dateStorageFormat = this.getDateStorageFormat(wContentControlProperties[dateStorageFormatProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(wContentControlProperties[dateDisplayLocaleProperty[this.keywordIndex]])) {\n contentControlProperties.dateDisplayLocale = wContentControlProperties[dateDisplayLocaleProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(wContentControlProperties[dateDisplayFormatProperty[this.keywordIndex]])) {\n contentControlProperties.dateDisplayFormat = wContentControlProperties[dateDisplayFormatProperty[this.keywordIndex]];\n }\n }\n else if (contentControlProperties.type === 'ComboBox' || contentControlProperties.type === 'DropDownList') {\n if (!isNullOrUndefined(wContentControlProperties[contentControlListItemsProperty[this.keywordIndex]])) {\n for (var i = 0; i < wContentControlProperties[contentControlListItemsProperty[this.keywordIndex]].length; i++) {\n var contentControlListItem = new ContentControlListItems();\n contentControlListItem.displayText = wContentControlProperties[contentControlListItemsProperty[this.keywordIndex]][i][displayTextProperty[this.keywordIndex]];\n contentControlListItem.value = wContentControlProperties[contentControlListItemsProperty[this.keywordIndex]][i][valueProperty[this.keywordIndex]];\n contentControlProperties.contentControlListItems.push(contentControlListItem);\n }\n }\n }\n if (!isNullOrUndefined(wContentControlProperties[xmlMappingProperty[this.keywordIndex]])) {\n contentControlProperties.xmlMapping = new XmlMapping();\n contentControlProperties.xmlMapping.isMapped = HelperMethods.parseBoolValue(wContentControlProperties[xmlMappingProperty[this.keywordIndex]][isMappedProperty[this.keywordIndex]]);\n contentControlProperties.xmlMapping.isWordMl = HelperMethods.parseBoolValue(wContentControlProperties[xmlMappingProperty[this.keywordIndex]][isWordMlProperty[this.keywordIndex]]);\n if (!isNullOrUndefined(wContentControlProperties[xmlMappingProperty[this.keywordIndex]][prefixMappingProperty[this.keywordIndex]])) {\n contentControlProperties.xmlMapping.prefixMapping = wContentControlProperties[xmlMappingProperty[this.keywordIndex]][prefixMappingProperty[this.keywordIndex]];\n }\n contentControlProperties.xmlMapping.xPath = wContentControlProperties[xmlMappingProperty[this.keywordIndex]][xPathProperty[this.keywordIndex]];\n contentControlProperties.xmlMapping.storeItemId = wContentControlProperties[xmlMappingProperty[this.keywordIndex]][storeItemIdProperty[this.keywordIndex]];\n if (!isNullOrUndefined(wContentControlProperties[xmlMappingProperty[this.keywordIndex]][customXmlPartProperty[this.keywordIndex]])) {\n contentControlProperties.xmlMapping.customXmlPart = new CustomXmlPart();\n contentControlProperties.xmlMapping.customXmlPart.id = wContentControlProperties[xmlMappingProperty[this.keywordIndex]][customXmlPartProperty[this.keywordIndex]][idProperty[this.keywordIndex]];\n contentControlProperties.xmlMapping.customXmlPart.xml = wContentControlProperties[xmlMappingProperty[this.keywordIndex]][customXmlPartProperty[this.keywordIndex]][xmlProperty[this.keywordIndex]];\n }\n }\n };\n SfdtReader.prototype.parseSymbol = function (fieldCode, lineWidget) {\n var code = fieldCode.split(' ');\n var indexOf = code.indexOf('SYMBOL');\n if (indexOf !== -1) {\n var characterCode = code[indexOf + 1];\n var textElement = new TextElementBox();\n textElement.characterFormat = new WCharacterFormat(textElement);\n textElement.text = String.fromCharCode(parseInt(characterCode));\n var fontIndex = code.indexOf('\\\\f');\n if (fontIndex !== -1) {\n var fontName = \"\";\n for (var j = fontIndex + 1; j < code.length; j++) {\n if (code[j] === '\\\\s') {\n break;\n }\n fontName += code[j] + ' ';\n }\n if (fontName !== null) {\n fontName = fontName.replace(/\"/g, '');\n fontName = fontName.trim();\n textElement.characterFormat.fontFamily = fontName;\n }\n }\n var sizeIndex = code.indexOf('\\\\s');\n if (sizeIndex !== -1) {\n textElement.characterFormat.fontSize = parseInt(code[sizeIndex + 1]);\n }\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n }\n };\n /* eslint-disable */\n SfdtReader.prototype.parseParagraph = function (data, paragraph, writeInlineFormat, lineWidget, isFootnoteEndnote) {\n var _this = this;\n var isContentControl = false;\n if (isNullOrUndefined(lineWidget)) {\n lineWidget = new LineWidget(paragraph);\n }\n else {\n isContentControl = true;\n }\n var hasValidElmts = false;\n var revision;\n var trackChange = this.viewer.owner.enableTrackChanges;\n var count = 0;\n var isCreateTextEleBox = false;\n var isCreateField = false;\n var fieldCode = undefined;\n var _loop_1 = function (i) {\n var inline = data[i];\n isCreateTextEleBox = false;\n if (inline.hasOwnProperty([fieldTypeProperty[this_1.keywordIndex]])) {\n if (inline[fieldTypeProperty[this_1.keywordIndex]] === 2) {\n count = i;\n }\n if (inline[fieldTypeProperty[this_1.keywordIndex]] === 1 && count + 1 === i) {\n isCreateTextEleBox = true;\n count = 0;\n }\n }\n if (isCreateTextEleBox && this_1.documentHelper.isPageField) {\n var textElement = new FieldTextElementBox();\n textElement.characterFormat = new WCharacterFormat(textElement);\n textElement.text = \"\";\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n hasValidElmts = true;\n i--;\n return out_i_1 = i, \"continue\";\n }\n else if (isCreateTextEleBox && !isNullOrUndefined(fieldCode) && fieldCode.indexOf('SYMBOL') !== -1) {\n this_1.parseSymbol(fieldCode, lineWidget);\n fieldCode = undefined;\n isCreateTextEleBox = false;\n }\n if (inline.hasOwnProperty(textProperty[this_1.keywordIndex]) || inline.hasOwnProperty(breakClearTypeProperty[this_1.keywordIndex])) {\n var textElement = undefined;\n if (this_1.documentHelper.isPageField) {\n textElement = new FieldTextElementBox();\n textElement.fieldBegin = this_1.documentHelper.fieldStacks[this_1.documentHelper.fieldStacks.length - 1];\n }\n else if (inline[textProperty[this_1.keywordIndex]] === '\\t') {\n textElement = new TabElementBox();\n }\n else if (inline[textProperty[this_1.keywordIndex]] === '\\f' && this_1.isPageBreakInsideTable) {\n return out_i_1 = i, \"continue\";\n }\n else {\n if (inline.hasOwnProperty(breakClearTypeProperty[this_1.keywordIndex])) {\n textElement = new BreakElementBox();\n textElement.breakClearType = this_1.getBreakClearType(inline[breakClearTypeProperty[this_1.keywordIndex]]);\n }\n else if (inline[textProperty[this_1.keywordIndex]] === '\\u0002'\n || (HelperMethods.checkTextFormat(inline[textProperty[this_1.keywordIndex]]) && lineWidget.children.length === 0 && i === 0 && isFootnoteEndnote)) {\n textElement = new FootnoteEndnoteMarkerElementBox();\n }\n else {\n textElement = new TextElementBox();\n if ((inline[textProperty[this_1.keywordIndex]]).length === 0 && !isNullOrUndefined(inline[revisionIdsProperty[this_1.keywordIndex]])) {\n return out_i_1 = i, \"continue\";\n }\n }\n }\n textElement.characterFormat = new WCharacterFormat(textElement);\n this_1.parseCharacterFormat(this_1.keywordIndex, inline[characterFormatProperty[this_1.keywordIndex]], textElement.characterFormat, writeInlineFormat);\n this_1.applyCharacterStyle(inline, textElement);\n textElement.text = textElement instanceof BreakElementBox ? \"\\v\" : inline[textProperty[this_1.keywordIndex]];\n fieldCode = textElement.text;\n if (this_1.isHtmlPaste && (textElement instanceof TextElementBox || textElement instanceof BreakElementBox)) {\n var previousElement = void 0;\n if (lineWidget.children.length > 0) {\n previousElement = lineWidget.children[lineWidget.children.length - 1];\n }\n // In html content, text bidi property is not present in the file level\n // Hence bidi property is false for RTL content\n // So, For html pasting we need to check and content and enable bidi to order the content similar to MS Word\n if (this_1.documentHelper.textHelper.isRTLText(textElement.text)) {\n textElement.characterFormat.bidi = true;\n if (previousElement instanceof TextElementBox && previousElement.text === ' ') {\n previousElement.characterFormat.bidi = true;\n }\n }\n //If previous element is RTL element, the we need to enable bidi for space character\n else if (textElement.text === ' ' && previousElement && previousElement.characterFormat.bidi) {\n textElement.characterFormat.bidi = true;\n }\n }\n if (this_1.documentHelper.owner.parser.isPaste && !(this_1.isCutPerformed)) {\n if (!isNullOrUndefined(inline[revisionIdsProperty[this_1.keywordIndex]])) {\n for (var j = 0; j < inline[revisionIdsProperty[this_1.keywordIndex]].length; j++) {\n if (this_1.revisionCollection.containsKey(inline[revisionIdsProperty[this_1.keywordIndex]][j])) {\n if (trackChange) {\n revision = this_1.revisionCollection.get(inline[revisionIdsProperty[this_1.keywordIndex]][j]);\n }\n if (!isNullOrUndefined(revision) && lineWidget.children.length > 0 && !isNullOrUndefined(lineWidget.children[i - 1].revisions[j]) && ((!trackChange) || (trackChange && (revision.revisionType === 'Deletion')))) {\n if (revision.revisionID === inline[revisionIdsProperty[this_1.keywordIndex]][j]) {\n inline[revisionIdsProperty[this_1.keywordIndex]][j] = lineWidget.children[i - 1].revisions[j].revisionID;\n this_1.checkAndApplyRevision(this_1.keywordIndex, inline, textElement);\n continue;\n }\n }\n if (!trackChange) {\n revision = this_1.documentHelper.revisionsInternal.get(inline[revisionIdsProperty[this_1.keywordIndex]][j]);\n }\n if (this_1.documentHelper.owner.editorModule.isRemoteAction) {\n this_1.documentHelper.owner.editorModule.insertRevision(textElement, revision.revisionType, revision.author, undefined, undefined, false, revision.revisionID);\n }\n else {\n this_1.documentHelper.owner.editorModule.insertRevision(textElement, revision.revisionType, revision.author, undefined, undefined, false);\n }\n inline[revisionIdsProperty[this_1.keywordIndex]][j] = textElement.revisions[j].revisionID;\n }\n }\n }\n }\n else {\n this_1.checkAndApplyRevision(this_1.keywordIndex, inline, textElement);\n }\n textElement.line = lineWidget;\n // handling in case the previous element is bookmark with isAfterParagraph true\n var lineChildren = lineWidget.children;\n var lastIndex = lineChildren.length - 1;\n while (lineChildren.length > 0\n && lineChildren[lastIndex] instanceof BookmarkElementBox\n && !isNullOrUndefined(lineChildren[lastIndex].properties)\n && lineChildren[lastIndex].properties['isAfterParagraphMark'] === true) {\n lastIndex--;\n }\n if (lastIndex !== lineChildren.length - 1) {\n lineChildren.splice(lastIndex + 1, 0, textElement);\n }\n else {\n lineChildren.push(textElement);\n }\n if (textElement instanceof TextElementBox && textElement.text.length > 90) {\n // Here, the text is split based on the maximum character length of 90.\n HelperMethods.splitWordByMaxLength(textElement, lineWidget, true);\n }\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty(footnoteTypeProperty[this_1.keywordIndex])) {\n var footnoteElement = new FootnoteElementBox();\n footnoteElement.line = lineWidget;\n footnoteElement.footnoteType = this_1.getFootnoteType(inline[footnoteTypeProperty[this_1.keywordIndex]]);\n if (footnoteElement.footnoteType === 'Footnote') {\n this_1.documentHelper.footnoteCollection.push(footnoteElement);\n }\n else {\n this_1.documentHelper.endnoteCollection.push(footnoteElement);\n }\n footnoteElement.symbolCode = inline[symbolCodeProperty[this_1.keywordIndex]];\n footnoteElement.symbolFontName = inline[symbolFontNameProperty[this_1.keywordIndex]];\n footnoteElement.customMarker = inline[customMarkerProperty[this_1.keywordIndex]];\n footnoteElement.characterFormat = new WCharacterFormat(footnoteElement);\n this_1.parseCharacterFormat(this_1.keywordIndex, inline[characterFormatProperty[this_1.keywordIndex]], footnoteElement.characterFormat, writeInlineFormat);\n this_1.applyCharacterStyle(inline, footnoteElement);\n this_1.parseBody(inline[blocksProperty[this_1.keywordIndex]], footnoteElement.bodyWidget.childWidgets, footnoteElement.bodyWidget, false, undefined, undefined, undefined, true);\n this_1.checkAndApplyRevision(this_1.keywordIndex, inline, footnoteElement);\n lineWidget.children.push(footnoteElement);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty(chartTypeProperty[this_1.keywordIndex])) {\n // chartPreservation\n if (this_1.documentHelper.owner.editorModule) {\n this_1.documentHelper.owner.editorModule.chartType = true;\n }\n var chartElement = new ChartElementBox();\n chartElement.title = inline[chartTitleProperty[this_1.keywordIndex]];\n chartElement.type = inline[chartTypeProperty[this_1.keywordIndex]];\n chartElement.chartGapWidth = inline[gapWidthProperty[this_1.keywordIndex]];\n chartElement.chartOverlap = inline[overlapProperty[this_1.keywordIndex]];\n this_1.parseChartTitleArea(inline[chartTitleAreaProperty[this_1.keywordIndex]], chartElement.chartTitleArea);\n this_1.parseChartArea(inline[chartAreaProperty[this_1.keywordIndex]], chartElement.chartArea);\n this_1.parseChartArea(inline[plotAreaProperty[this_1.keywordIndex]], chartElement.chartPlotArea);\n this_1.parseChartLegend(inline[chartLegendProperty[this_1.keywordIndex]], chartElement.chartLegend);\n this_1.parseChartData(inline, chartElement);\n this_1.parseChartCategoryAxis(inline[chartPrimaryCategoryAxisProperty[this_1.keywordIndex]], chartElement.chartPrimaryCategoryAxis);\n this_1.parseChartCategoryAxis(inline[chartPrimaryValueAxisProperty[this_1.keywordIndex]], chartElement.chartPrimaryValueAxis);\n if (inline[chartDataTableProperty[this_1.keywordIndex]] != null) {\n this_1.parseChartDataTable(inline[chartDataTableProperty[this_1.keywordIndex]], chartElement.chartDataTable);\n }\n chartElement.line = lineWidget;\n lineWidget.children.push(chartElement);\n chartElement.height = HelperMethods.convertPointToPixel(inline[heightProperty[this_1.keywordIndex]]);\n chartElement.width = HelperMethods.convertPointToPixel(inline[widthProperty[this_1.keywordIndex]]);\n var officeChart = new ChartComponent();\n officeChart.chartRender(inline, this_1.keywordIndex);\n chartElement.officeChart = officeChart;\n officeChart.chart.appendTo(chartElement.targetElement);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty(imageStringProperty[this_1.keywordIndex])) {\n var image_1 = new ImageElementBox(HelperMethods.parseBoolValue(inline[isInlineImageProperty[this_1.keywordIndex]]));\n image_1.isMetaFile = HelperMethods.parseBoolValue(inline[isMetaFileProperty[this_1.keywordIndex]]);\n image_1.isCompressed = inline[isCompressedProperty[this_1.keywordIndex]];\n image_1.metaFileImageString = inline[metaFileImageStringProperty[this_1.keywordIndex]];\n image_1.characterFormat = new WCharacterFormat(image_1);\n image_1.line = lineWidget;\n this_1.checkAndApplyRevision(this_1.keywordIndex, inline, image_1);\n lineWidget.children.push(image_1);\n var imageString = HelperMethods.formatClippedString(inline[imageStringProperty[this_1.keywordIndex]]).formatClippedString;\n var isValidImage = this_1.validateImageUrl(imageString);\n if (!isValidImage) {\n image_1.imageString = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAgVBMVEX///8AAADgAADY2Njl5eVcXFxjY2NZWVl/f3+wsLCmpqb4+PiioqKpqam7u7vV1dX2uLj2wsLhFRXzpKT3vb30sbHhCwv74+P40dH+9vbkIyO2trbBwcHLy8tsbGycnJz529v4zMzrbGzlLS3qZmblNzfrdXXoRkbvi4vvgYHlHh7CZsBOAAADpUlEQVR4nO3da1faQBSF4ekAUQlUEFs14AXxVv7/D6yaQiZx5mSEYXF2ut+PNKzyyK5diYDmR9czx34AB49C/CjE759w3jvvWr15Tdgz3atXE54f++EcIArxoxA/CvGjED8K8aMQPwrxoxA/CvGLEeZ9jPJdhfk4GyCUjb3ECGE/Q6m/q3DwfudjP0ERZYN9hKdn2hvd3+0jHJz5/kBVuTk96bbQUEjhYR9ckiikUH8UUqg/CinUH4UU6o9CCvVHIYX6o5BC/VFIof4opFB/FFKoPwop1B+FFOqPQgrjyxfjVC38Lxk9tnAxGqZqdKtSOE4GHA5/fuNJpDCtcNHbv4VqYYqPLjgfUViPQgrjozA2CptRSGF8/59w+Wrt+rr1btNna1cPzg0wwuXavncxabnX7PfHYYXzlYARvlobQZyUR9mXm+1NMEK7SSLONgcVV9vb8IQXv4J3KSeKKlxXxNCzONkeYp8AV3p9UT1+P3FWHVAsq5thhGZSEb1DrSZq7dS5HUdoLiuBZ6jORG3tCwAkNJfCUJ2Jrqe1P0ESCkMNTdSACYNDDU7UoAkDQw1P1MAJvUMVJmrwhJ6hShM1gMIvQxUnahCFjaHKEzWQQneoxR95ogZTWBuqPFEDKnSHKk/UoArdoYoTNbDC5lBDEzW4QjMpYiZqgIXG/S76JhwHK5zVVipcnkIVuv/RW/HyFKhwYhuFr6NiCmdNoDBUSGFjovJQEYXuRN9ahwoorJ8uSZenPsMTNk+X2q6jwgm/ntHL11HhhL4zenmoYEL/Gb04VCxh6KKTNFQoYfiikzBUJKF00Sk8VCChfF00OFQcYdt10dBQYYRT5xn0n9G7Q0X8GfCzNNEyZ6iPgD/HlydaVg11DfhajJaJlm2HugIUrlomWrYZKuJKHz6vHhbSM/hROdRnxNe1meuXYvW0DB6+aflYrB7dlzDiCM3N1dVN6GDhMCDhjlHYjEIK46MwNgqbUUhhfJ/vA07wO8N1vw94ONo/3e/lTpVOYfc/UyG//ZmqW52fi/FuTNW3/lZ+eguF+qOQQv1RSKH+KKRQfxRSqD8KKdQfhRTqj0IK9UchhfqjkEL9UUih/iikUH8UUqg/CmXh6Hsv3jlK+wnvD/vgkrSHMMuyu1P9ZdmuwnycDQYn+svG3n9KEUKT9zHyf6+IEWJHIX4U4kchfhTiRyF+FOJHIX4U4kchfnVhijeZa6sunCf4ZdPamteEHY5C/CjEr/vCv0ec0g+AtS1QAAAAAElFTkSuQmCC';\n }\n else {\n if (this_1.isPaste && !isNullOrUndefined(this_1.documentHelper.owner.editorModule.pasteImageIndex)) {\n image_1.imageString = this_1.documentHelper.owner.editorModule.pasteImageIndex.get(inline[imageStringProperty[this_1.keywordIndex]]);\n }\n else {\n image_1.imageString = inline[imageStringProperty[this_1.keywordIndex]];\n }\n }\n // Before 21.1 duplicate images are preserved as inline images with direct base64 string in the image string property. TO provide backward compatibility we are checking both the index based retrieval from images collections and inline image string.\n var imgStrValue = parseInt(inline[imageStringProperty[this_1.keywordIndex]]);\n if (imgStrValue.toString() === \"NaN\" ? true : false) {\n this_1.documentHelper.addBase64StringInCollection(image_1);\n }\n image_1.width = HelperMethods.convertPointToPixel(inline[widthProperty[this_1.keywordIndex]]);\n image_1.height = HelperMethods.convertPointToPixel(inline[heightProperty[this_1.keywordIndex]]);\n var imgStr = this_1.documentHelper.getImageString(image_1);\n if (!isNullOrUndefined(imgStr) && (HelperMethods.startsWith(imgStr, 'http://') || HelperMethods.startsWith(imgStr, 'https://'))) {\n // Generate fall back image for URL images.\n image_1.element.crossOrigin = 'Anonymous';\n this_1.viewer.documentHelper.getBase64(imgStr, image_1.width, image_1.height).then(function (imageUrlString) {\n _this.viewer.documentHelper.images.get(parseInt(image_1.imageString))[1] = imageUrlString;\n });\n var url = new URL(imgStr);\n if (url.search.length > 0) {\n imgStr += \"&t=\" + new Date().getTime();\n }\n else {\n imgStr += \"?t=\" + new Date().getTime();\n }\n }\n image_1.element.src = imgStr;\n image_1.top = inline[topProperty[this_1.keywordIndex]];\n image_1.left = inline[leftProperty[this_1.keywordIndex]];\n image_1.bottom = inline[bottomProperty[this_1.keywordIndex]];\n image_1.right = inline[rightProperty[this_1.keywordIndex]];\n image_1.cropHeightScale = inline[getImageHeightProperty[this_1.keywordIndex]];\n image_1.cropWidthScale = inline[getImageWidthProperty[this_1.keywordIndex]];\n image_1.name = inline[nameProperty[this_1.keywordIndex]];\n image_1.alternateText = inline[alternativeTextProperty[this_1.keywordIndex]];\n image_1.title = inline[titleProperty[this_1.keywordIndex]];\n image_1.visible = HelperMethods.parseBoolValue(inline[visibleProperty[this_1.keywordIndex]]);\n image_1.widthScale = inline[widthScaleProperty[this_1.keywordIndex]];\n image_1.heightScale = inline[heightScaleProperty[this_1.keywordIndex]];\n image_1.verticalPosition = HelperMethods.convertPointToPixel(inline[verticalPositionProperty[this_1.keywordIndex]]);\n image_1.verticalOrigin = this_1.getVerticalOrigin(inline[verticalOriginProperty[this_1.keywordIndex]]);\n image_1.verticalAlignment = this_1.getShapeVerticalAlignment(inline[verticalAlignmentProperty[this_1.keywordIndex]]);\n image_1.horizontalPosition = HelperMethods.convertPointToPixel(inline[horizontalPositionProperty[this_1.keywordIndex]]);\n image_1.horizontalOrigin = this_1.getHorizontalOrigin(inline[horizontalOriginProperty[this_1.keywordIndex]]);\n image_1.horizontalAlignment = this_1.getShapeHorizontalAlignment(inline[horizontalAlignmentProperty[this_1.keywordIndex]]);\n image_1.allowOverlap = HelperMethods.parseBoolValue(inline[allowOverlapProperty[this_1.keywordIndex]]);\n if (!isNullOrUndefined(inline[textWrappingStyleProperty[this_1.keywordIndex]])) {\n image_1.textWrappingStyle = this_1.getTextWrappingStyle(inline[textWrappingStyleProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[textWrappingTypeProperty[this_1.keywordIndex]])) {\n image_1.textWrappingType = this_1.getTextWrappingType(inline[textWrappingTypeProperty[this_1.keywordIndex]]);\n }\n image_1.isBelowText = HelperMethods.parseBoolValue(inline[belowTextProperty[this_1.keywordIndex]]);\n if (!isNullOrUndefined(inline[distanceBottomProperty[this_1.keywordIndex]])) {\n image_1.distanceBottom = HelperMethods.convertPointToPixel(inline[distanceBottomProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[distanceLeftProperty[this_1.keywordIndex]])) {\n image_1.distanceLeft = HelperMethods.convertPointToPixel(inline[distanceLeftProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[distanceRightProperty[this_1.keywordIndex]])) {\n image_1.distanceRight = HelperMethods.convertPointToPixel(inline[distanceRightProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[distanceTopProperty[this_1.keywordIndex]])) {\n image_1.distanceTop = HelperMethods.convertPointToPixel(inline[distanceTopProperty[this_1.keywordIndex]]);\n }\n image_1.zOrderPosition = inline[zOrderPositionProperty[this_1.keywordIndex]];\n image_1.layoutInCell = HelperMethods.parseBoolValue(inline[layoutInCellProperty[this_1.keywordIndex]]);\n if (!isNullOrUndefined(inline[topProperty[this_1.keywordIndex]]) && inline[topProperty[this_1.keywordIndex]] !== 0 ||\n !isNullOrUndefined(inline[bottomProperty[this_1.keywordIndex]]) && inline[bottomProperty[this_1.keywordIndex]] !== 0 ||\n !isNullOrUndefined(inline[leftProperty[this_1.keywordIndex]]) && inline[leftProperty[this_1.keywordIndex]] !== 0 ||\n !isNullOrUndefined(inline[rightProperty[this_1.keywordIndex]]) && inline[rightProperty[this_1.keywordIndex]] !== 0) {\n image_1.isCrop = true;\n }\n if (this_1.getTextWrappingStyle(image_1.textWrappingStyle) !== 'Inline') {\n paragraph.floatingElements.push(image_1);\n }\n this_1.parseCharacterFormat(this_1.keywordIndex, inline[characterFormatProperty[this_1.keywordIndex]], image_1.characterFormat);\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty(hasFieldEndProperty[this_1.keywordIndex]) || (inline.hasOwnProperty(fieldTypeProperty[this_1.keywordIndex]) && inline[fieldTypeProperty[this_1.keywordIndex]] === 0)) {\n isCreateField = true;\n var fieldBegin = new FieldElementBox(0);\n this_1.parseCharacterFormat(this_1.keywordIndex, inline[characterFormatProperty[this_1.keywordIndex]], fieldBegin.characterFormat, writeInlineFormat);\n this_1.applyCharacterStyle(inline, fieldBegin);\n fieldBegin.fieldCodeType = inline.fieldCodeType;\n fieldBegin.hasFieldEnd = inline[hasFieldEndProperty[this_1.keywordIndex]];\n if (inline.hasOwnProperty(formFieldDataProperty[this_1.keywordIndex])) {\n var formFieldData = void 0;\n formFieldData = this_1.parseFormFieldData(this_1.keywordIndex, inline, formFieldData);\n fieldBegin.formFieldData = formFieldData;\n this_1.documentHelper.formFields.push(fieldBegin);\n }\n this_1.documentHelper.fieldStacks.push(fieldBegin);\n this_1.checkAndApplyRevision(this_1.keywordIndex, inline, fieldBegin);\n fieldBegin.line = lineWidget;\n this_1.documentHelper.fields.push(fieldBegin);\n lineWidget.children.push(fieldBegin);\n }\n else if (inline.hasOwnProperty([fieldTypeProperty[this_1.keywordIndex]])) {\n var field = undefined;\n if (inline[fieldTypeProperty[this_1.keywordIndex]] === 2 || (inline[fieldTypeProperty[this_1.keywordIndex]] === 1 && isCreateField)) {\n field = new FieldElementBox(2);\n this_1.parseCharacterFormat(this_1.keywordIndex, inline[characterFormatProperty[this_1.keywordIndex]], field.characterFormat, writeInlineFormat);\n this_1.checkAndApplyRevision(this_1.keywordIndex, inline, field);\n this_1.fieldSeparator = field;\n if (this_1.documentHelper.fieldStacks.length > 0) {\n field.fieldBegin = this_1.documentHelper.fieldStacks[this_1.documentHelper.fieldStacks.length - 1];\n field.fieldBegin.fieldSeparator = field;\n //finds the whether the field is page filed or not\n var lineWidgetCount = lineWidget.children.length;\n if (lineWidgetCount >= 2) {\n var fieldTextElement = this_1.containsFieldBegin(lineWidget);\n if (!isNullOrUndefined(fieldTextElement) && fieldTextElement instanceof TextElementBox && (fieldTextElement.text.match('PAGE') || fieldTextElement.text.match('page'))) {\n var textField = fieldTextElement.text.replace(/^\\s+/g, '');\n if (!textField.startsWith('HYPERLINK')) {\n this_1.documentHelper.isPageField = true;\n }\n }\n }\n }\n if (inline[fieldTypeProperty[this_1.keywordIndex]] === 1 && isCreateField) {\n i--;\n count = i;\n }\n isCreateField = false;\n }\n else if (inline[fieldTypeProperty[this_1.keywordIndex]] === 1) {\n field = new FieldElementBox(1);\n this_1.parseCharacterFormat(this_1.keywordIndex, inline[characterFormatProperty[this_1.keywordIndex]], field.characterFormat, writeInlineFormat);\n this_1.applyCharacterStyle(inline, field);\n this_1.checkAndApplyRevision(this_1.keywordIndex, inline, field);\n //For Field End Updated begin and separator. \n if (this_1.documentHelper.fieldStacks.length > 0) {\n field.fieldBegin = this_1.documentHelper.fieldStacks[this_1.documentHelper.fieldStacks.length - 1];\n field.fieldBegin.fieldEnd = field;\n }\n if (!isNullOrUndefined(field.fieldBegin) && field.fieldBegin.fieldSeparator) {\n field.fieldSeparator = field.fieldBegin.fieldSeparator;\n field.fieldBegin.fieldSeparator.fieldEnd = field;\n hasValidElmts = true;\n }\n //After setting all the property clear the field values\n this_1.documentHelper.fieldStacks.splice(this_1.documentHelper.fieldStacks.length - 1, 1);\n this_1.fieldSeparator = undefined;\n this_1.documentHelper.isPageField = false;\n this_1.documentHelper.fieldCollection.push(field.fieldBegin);\n fieldCode = undefined;\n }\n field.line = lineWidget;\n lineWidget.children.push(field);\n }\n else if (inline.hasOwnProperty([bookmarkTypeProperty[this_1.keywordIndex]])) {\n var bookmark = undefined;\n bookmark = new BookmarkElementBox(inline[bookmarkTypeProperty[this_1.keywordIndex]]);\n bookmark.name = inline[nameProperty[this_1.keywordIndex]];\n bookmark.properties = inline[propertiesProperty[this_1.keywordIndex]];\n if (!isNullOrUndefined(inline[propertiesProperty[this_1.keywordIndex]])) {\n if (!isNullOrUndefined(inline[propertiesProperty[this_1.keywordIndex]][isAfterParagraphMarkProperty[this_1.keywordIndex]])) {\n bookmark.properties['isAfterParagraphMark'] = HelperMethods.parseBoolValue(inline[propertiesProperty[this_1.keywordIndex]][isAfterParagraphMarkProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[propertiesProperty[this_1.keywordIndex]][isAfterTableMarkProperty[this_1.keywordIndex]])) {\n bookmark.properties['isAfterTableMark'] = HelperMethods.parseBoolValue(inline[propertiesProperty[this_1.keywordIndex]][isAfterTableMarkProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[propertiesProperty[this_1.keywordIndex]][isAfterRowMarkProperty[this_1.keywordIndex]])) {\n bookmark.properties['isAfterRowMark'] = HelperMethods.parseBoolValue(inline[propertiesProperty[this_1.keywordIndex]][isAfterRowMarkProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[propertiesProperty[this_1.keywordIndex]][isAfterCellMarkProperty[this_1.keywordIndex]])) {\n bookmark.properties['isAfterCellMark'] = HelperMethods.parseBoolValue(inline[propertiesProperty[this_1.keywordIndex]][isAfterCellMarkProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[propertiesProperty[this_1.keywordIndex]][columnFirstProperty[this_1.keywordIndex]])) {\n bookmark.properties['columnFirst'] = inline[propertiesProperty[this_1.keywordIndex]][columnFirstProperty[this_1.keywordIndex]];\n }\n if (!isNullOrUndefined(inline[propertiesProperty[this_1.keywordIndex]][columnLastProperty[this_1.keywordIndex]])) {\n bookmark.properties['columnLast'] = inline[propertiesProperty[this_1.keywordIndex]][columnLastProperty[this_1.keywordIndex]];\n }\n }\n this_1.checkAndApplyRevision(this_1.keywordIndex, inline, bookmark);\n lineWidget.children.push(bookmark);\n bookmark.line = lineWidget;\n if (!this_1.isParseHeader || this_1.isPaste) {\n if (inline[bookmarkTypeProperty[this_1.keywordIndex]] === 0) {\n var isAdd = this_1.isPaste && !this_1.documentHelper.bookmarks.containsKey(bookmark.name);\n if (!this_1.isPaste || isAdd) {\n this_1.documentHelper.bookmarks.add(bookmark.name, bookmark);\n }\n else if (!isAdd) {\n lineWidget.children.splice(lineWidget.children.indexOf(bookmark), 1);\n }\n }\n else if (inline[bookmarkTypeProperty[this_1.keywordIndex]] === 1) {\n if (this_1.documentHelper.bookmarks.containsKey(bookmark.name)) {\n var bookmarkStart = this_1.documentHelper.bookmarks.get(bookmark.name);\n var isConsider = this_1.isPaste && isNullOrUndefined(bookmarkStart.reference);\n if (!this_1.isPaste || isConsider) {\n bookmarkStart.reference = bookmark;\n bookmark.reference = bookmarkStart;\n this_1.documentHelper.endBookmarksUpdated.push(bookmark.name);\n }\n else if (!isConsider) {\n lineWidget.children.splice(lineWidget.children.indexOf(bookmark), 1);\n }\n }\n }\n }\n if (bookmark.name.indexOf('_') !== 0) {\n hasValidElmts = true;\n }\n }\n else if (inline.hasOwnProperty([editRangeIdProperty[this_1.keywordIndex]])) {\n if (inline.hasOwnProperty(editableRangeStartProperty[this_1.keywordIndex])) {\n var permEnd = new EditRangeEndElementBox();\n if (this_1.editableRanges.containsKey(inline[editRangeIdProperty[this_1.keywordIndex]])) {\n var start = this_1.editableRanges.get(inline[editRangeIdProperty[this_1.keywordIndex]]);\n permEnd.editRangeStart = start;\n start.editRangeEnd = permEnd;\n if (!isNullOrUndefined(inline[editRangeIdProperty[this_1.keywordIndex]])) {\n permEnd.editRangeId = inline[editRangeIdProperty[this_1.keywordIndex]];\n }\n this_1.editableRanges.remove(inline[editRangeIdProperty[this_1.keywordIndex]]);\n }\n lineWidget.children.push(permEnd);\n permEnd.line = lineWidget;\n }\n else {\n var permStart = this_1.parseEditableRangeStart(inline);\n lineWidget.children.push(permStart);\n permStart.line = lineWidget;\n if (!this_1.editableRanges.containsKey(inline[editRangeIdProperty[this_1.keywordIndex]])) {\n this_1.editableRanges.add(inline[editRangeIdProperty[this_1.keywordIndex]], permStart);\n }\n }\n hasValidElmts = true;\n }\n else if (inline.hasOwnProperty([commentIdProperty[this_1.keywordIndex]])) {\n var commentID = inline[commentIdProperty[this_1.keywordIndex]];\n var commentStart = undefined;\n var comment = void 0;\n if (this_1.commentStarts.containsKey(commentID)) {\n commentStart = this_1.commentStarts.get(commentID);\n }\n var commentEnd = undefined;\n if (this_1.commentEnds.containsKey(commentID)) {\n commentEnd = this_1.commentEnds.get(commentID);\n }\n if (inline.hasOwnProperty([commentCharacterTypeProperty[this_1.keywordIndex]])) {\n if (inline[commentCharacterTypeProperty[this_1.keywordIndex]] === 0) {\n var commentStartElement = new CommentCharacterElementBox(0);\n commentStartElement.commentId = commentID;\n if (!this_1.commentStarts.containsKey(commentID)) {\n this_1.commentStarts.add(commentID, commentStartElement);\n }\n commentStartElement.line = lineWidget;\n lineWidget.children.push(commentStartElement);\n comment = this_1.commentsCollection.get(commentID);\n if (!isNullOrUndefined(comment)) {\n comment.commentStart = commentStartElement;\n commentStartElement.comment = comment;\n }\n }\n else {\n var commentEndElement = new CommentCharacterElementBox(1);\n commentEndElement.commentId = commentID;\n if (!this_1.commentEnds.containsKey(commentID)) {\n this_1.commentEnds.add(commentID, commentEndElement);\n }\n commentEndElement.line = lineWidget;\n lineWidget.children.push(commentEndElement);\n comment = this_1.commentsCollection.get(commentID);\n if (!isNullOrUndefined(comment)) {\n comment.commentEnd = commentEndElement;\n commentEndElement.comment = comment;\n }\n }\n if (!isNullOrUndefined(comment) && comment.isReply) {\n if (isNullOrUndefined(comment.ownerComment.commentStart)) {\n comment.ownerComment.commentStart = comment.commentStart;\n }\n if (isNullOrUndefined(comment.ownerComment.commentEnd)) {\n comment.ownerComment.commentEnd = comment.commentEnd;\n }\n }\n }\n }\n else if (inline.hasOwnProperty([shapeIdProperty[this_1.keywordIndex]])) {\n var shape = new ShapeElementBox();\n shape.shapeId = inline[shapeIdProperty[this_1.keywordIndex]];\n shape.name = inline[nameProperty[this_1.keywordIndex]];\n shape.alternateText = inline[alternativeTextProperty[this_1.keywordIndex]];\n shape.title = inline[titleProperty[this_1.keywordIndex]];\n shape.visible = HelperMethods.parseBoolValue(inline[visibleProperty[this_1.keywordIndex]]);\n shape.width = HelperMethods.convertPointToPixel(inline[widthProperty[this_1.keywordIndex]]);\n shape.height = HelperMethods.convertPointToPixel(inline[heightProperty[this_1.keywordIndex]]);\n if (shape.height === 0) {\n shape.isZeroHeight = true;\n }\n shape.widthScale = inline[widthScaleProperty[this_1.keywordIndex]];\n shape.heightScale = inline[heightScaleProperty[this_1.keywordIndex]];\n shape.verticalPosition = HelperMethods.convertPointToPixel(inline[verticalPositionProperty[this_1.keywordIndex]]);\n shape.verticalOrigin = this_1.getVerticalOrigin(inline[verticalOriginProperty[this_1.keywordIndex]]);\n shape.verticalAlignment = this_1.getShapeVerticalAlignment(inline[verticalAlignmentProperty[this_1.keywordIndex]]);\n shape.verticalRelativePercent = inline[verticalRelativePercentProperty[this_1.keywordIndex]];\n shape.horizontalPosition = HelperMethods.convertPointToPixel(inline[horizontalPositionProperty[this_1.keywordIndex]]);\n shape.horizontalOrigin = this_1.getHorizontalOrigin(inline[horizontalOriginProperty[this_1.keywordIndex]]);\n shape.horizontalAlignment = this_1.getShapeHorizontalAlignment(inline[horizontalAlignmentProperty[this_1.keywordIndex]]);\n shape.horizontalRelativePercent = inline[horizontalRelativePercentProperty[this_1.keywordIndex]];\n shape.heightRelativePercent = inline[heightRelativePercentProperty[this_1.keywordIndex]];\n shape.widthRelativePercent = inline[widthRelativePercentProperty[this_1.keywordIndex]];\n shape.zOrderPosition = inline[zOrderPositionProperty[this_1.keywordIndex]];\n shape.allowOverlap = HelperMethods.parseBoolValue(inline[allowOverlapProperty[this_1.keywordIndex]]);\n shape.textWrappingStyle = this_1.getTextWrappingStyle(inline[textWrappingStyleProperty[this_1.keywordIndex]]);\n shape.textWrappingType = this_1.getTextWrappingType(inline[textWrappingTypeProperty[this_1.keywordIndex]]);\n shape.isBelowText = HelperMethods.parseBoolValue(inline[belowTextProperty[this_1.keywordIndex]]);\n shape.isHorizontalRule = HelperMethods.parseBoolValue(inline[horizontalRuleProperty[this_1.keywordIndex]]);\n if (!isNullOrUndefined(inline[distanceBottomProperty[this_1.keywordIndex]])) {\n shape.distanceBottom = HelperMethods.convertPointToPixel(inline[distanceBottomProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[distanceLeftProperty[this_1.keywordIndex]])) {\n shape.distanceLeft = HelperMethods.convertPointToPixel(inline[distanceLeftProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[distanceRightProperty[this_1.keywordIndex]])) {\n shape.distanceRight = HelperMethods.convertPointToPixel(inline[distanceRightProperty[this_1.keywordIndex]]);\n }\n if (!isNullOrUndefined(inline[distanceTopProperty[this_1.keywordIndex]])) {\n shape.distanceTop = HelperMethods.convertPointToPixel(inline[distanceTopProperty[this_1.keywordIndex]]);\n }\n shape.layoutInCell = HelperMethods.parseBoolValue(inline[layoutInCellProperty[this_1.keywordIndex]]);\n shape.lockAnchor = HelperMethods.parseBoolValue(inline[lockAnchorProperty[this_1.keywordIndex]]);\n shape.autoShapeType = this_1.getAutoShapeType(inline[autoShapeTypeProperty[this_1.keywordIndex]]);\n if (inline.hasOwnProperty(lineFormatProperty[this_1.keywordIndex])) {\n var lineFormat = new LineFormat();\n lineFormat.line = HelperMethods.parseBoolValue(inline[lineFormatProperty[this_1.keywordIndex]][lineProperty[this_1.keywordIndex]]);\n lineFormat.lineFormatType = this_1.getLineFormatType(inline[lineFormatProperty[this_1.keywordIndex]][lineFormatTypeProperty[this_1.keywordIndex]]);\n lineFormat.color = inline[lineFormatProperty[this_1.keywordIndex]][colorProperty[this_1.keywordIndex]];\n lineFormat.weight = inline[lineFormatProperty[this_1.keywordIndex]][weightProperty[this_1.keywordIndex]];\n lineFormat.dashStyle = this_1.getLineDashStyle(inline[lineFormatProperty[this_1.keywordIndex]][lineStyleProperty[this_1.keywordIndex]]);\n shape.lineFormat = lineFormat;\n }\n if (inline.hasOwnProperty(fillFormatProperty[this_1.keywordIndex])) {\n var fillFormat = new FillFormat();\n fillFormat.color = inline[fillFormatProperty[this_1.keywordIndex]][colorProperty[this_1.keywordIndex]];\n fillFormat.fill = HelperMethods.parseBoolValue(inline[fillFormatProperty[this_1.keywordIndex]][fillProperty[this_1.keywordIndex]]);\n shape.fillFormat = fillFormat;\n }\n if (inline.hasOwnProperty(textFrameProperty[this_1.keywordIndex])) {\n var textFrame = new TextFrame();\n textFrame.textVerticalAlignment = this_1.getTextVerticalAlignment(inline[textFrameProperty[this_1.keywordIndex]][textVerticalAlignmentProperty[this_1.keywordIndex]]);\n textFrame.marginLeft = HelperMethods.convertPointToPixel(inline[textFrameProperty[this_1.keywordIndex]][leftMarginProperty[this_1.keywordIndex]]);\n textFrame.marginRight = HelperMethods.convertPointToPixel(inline[textFrameProperty[this_1.keywordIndex]][rightMarginProperty[this_1.keywordIndex]]);\n textFrame.marginTop = HelperMethods.convertPointToPixel(inline[textFrameProperty[this_1.keywordIndex]][topMarginProperty[this_1.keywordIndex]]);\n textFrame.marginBottom = HelperMethods.convertPointToPixel(inline[textFrameProperty[this_1.keywordIndex]][bottomMarginProperty[this_1.keywordIndex]]);\n this_1.parseBody(inline[textFrameProperty[this_1.keywordIndex]][blocksProperty[this_1.keywordIndex]], textFrame.childWidgets, textFrame);\n shape.textFrame = textFrame;\n textFrame.containerShape = shape;\n }\n shape.line = lineWidget;\n this_1.checkAndApplyRevision(this_1.keywordIndex, inline, shape);\n lineWidget.children.push(shape);\n paragraph.floatingElements.push(shape);\n }\n else if (inline.hasOwnProperty(contentControlPropertiesProperty[this_1.keywordIndex])) {\n var inlineStartContentControl = new ContentControl('Inline');\n var inlineEndContentControl = new ContentControl('Inline');\n this_1.parseContentControlProperties(inline[contentControlPropertiesProperty[this_1.keywordIndex]], inlineStartContentControl.contentControlProperties);\n inlineEndContentControl.contentControlProperties = inlineStartContentControl.contentControlProperties;\n inlineStartContentControl.line = lineWidget;\n inlineEndContentControl.line = lineWidget;\n inlineStartContentControl.type = 0;\n inlineEndContentControl.type = 1;\n lineWidget.children.push(inlineStartContentControl);\n this_1.parseParagraph(inline[inlinesProperty[this_1.keywordIndex]], paragraph, writeInlineFormat, lineWidget);\n var element = lineWidget.children[lineWidget.children.length - 1];\n while (!(element instanceof ContentControl)) {\n element.contentControlProperties = inlineStartContentControl.contentControlProperties;\n element = element.previousElement;\n }\n lineWidget.children.push(inlineEndContentControl);\n hasValidElmts = true;\n }\n out_i_1 = i;\n };\n var this_1 = this, out_i_1;\n for (var i = 0; i < data.length; i++) {\n _loop_1(i);\n i = out_i_1;\n }\n this.isCutPerformed = false;\n if (!isContentControl) {\n paragraph.childWidgets.push(lineWidget);\n }\n return hasValidElmts;\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseFormFieldData = function (keywordIndex, sourceData, formFieldData) {\n if (formFieldData instanceof TextFormField || formFieldData instanceof CheckBoxFormField || formFieldData instanceof DropDownFormField) {\n if (formFieldData instanceof CheckBoxFormField) {\n formFieldData.sizeType = sourceData.sizeType;\n formFieldData.size = sourceData.size;\n formFieldData.defaultValue = sourceData.defaultValue;\n formFieldData.checked = sourceData.checked;\n }\n else if (formFieldData instanceof TextFormField) {\n formFieldData.type = sourceData.type;\n formFieldData.maxLength = sourceData.maxLength;\n formFieldData.defaultValue = sourceData.defaultValue;\n formFieldData.format = sourceData.format;\n }\n else {\n formFieldData.dropdownItems = sourceData.dropdownItems;\n formFieldData.selectedIndex = sourceData.selectedIndex;\n }\n formFieldData.name = sourceData.name;\n formFieldData.enabled = sourceData.enabled;\n formFieldData.helpText = sourceData.helpText;\n formFieldData.statusText = sourceData.statusText;\n }\n else {\n if (sourceData[formFieldDataProperty[keywordIndex]].hasOwnProperty(textInputProperty[keywordIndex])) {\n formFieldData = new TextFormField();\n formFieldData.type = this.getTextFormFieldType(sourceData[formFieldDataProperty[keywordIndex]][textInputProperty[keywordIndex]][typeProperty[keywordIndex]]);\n formFieldData.maxLength = sourceData[formFieldDataProperty[keywordIndex]][textInputProperty[keywordIndex]][maxLengthProperty[keywordIndex]];\n formFieldData.defaultValue = sourceData[formFieldDataProperty[keywordIndex]][textInputProperty[keywordIndex]][defaultValueProperty[keywordIndex]];\n formFieldData.format = this.getTextFormFieldFormat(sourceData[formFieldDataProperty[keywordIndex]][textInputProperty[keywordIndex]][formatProperty[keywordIndex]]);\n }\n else if (sourceData[formFieldDataProperty[keywordIndex]].hasOwnProperty(checkBoxProperty[keywordIndex])) {\n formFieldData = new CheckBoxFormField();\n formFieldData.sizeType = this.getCheckBoxSizeType(sourceData[formFieldDataProperty[keywordIndex]][checkBoxProperty[keywordIndex]][sizeTypeProperty[keywordIndex]]);\n formFieldData.size = sourceData[formFieldDataProperty[keywordIndex]][checkBoxProperty[keywordIndex]][sizeProperty[keywordIndex]];\n formFieldData.defaultValue = HelperMethods.parseBoolValue(sourceData[formFieldDataProperty[keywordIndex]][checkBoxProperty[keywordIndex]][defaultValueProperty[keywordIndex]]);\n formFieldData.checked = HelperMethods.parseBoolValue(sourceData[formFieldDataProperty[keywordIndex]][checkBoxProperty[keywordIndex]][checkedProperty[keywordIndex]]);\n }\n else {\n formFieldData = new DropDownFormField();\n formFieldData.dropdownItems = sourceData[formFieldDataProperty[keywordIndex]][dropDownListProperty[keywordIndex]][dropDownItemsProperty[keywordIndex]];\n formFieldData.selectedIndex = sourceData[formFieldDataProperty[keywordIndex]][dropDownListProperty[keywordIndex]][selectedIndexProperty[keywordIndex]];\n }\n formFieldData.name = sourceData[formFieldDataProperty[keywordIndex]][nameProperty[keywordIndex]];\n formFieldData.enabled = HelperMethods.parseBoolValue(sourceData[formFieldDataProperty[keywordIndex]][enabledProperty[keywordIndex]]);\n formFieldData.helpText = sourceData[formFieldDataProperty[keywordIndex]][helpTextProperty[keywordIndex]];\n formFieldData.statusText = sourceData[formFieldDataProperty[keywordIndex]][statusTextProperty[keywordIndex]];\n }\n return formFieldData;\n };\n SfdtReader.prototype.applyCharacterStyle = function (inline, elementbox) {\n if (!isNullOrUndefined(inline[characterFormatProperty[this.keywordIndex]]) && !isNullOrUndefined(inline[characterFormatProperty[this.keywordIndex]][styleNameProperty[this.keywordIndex]])) {\n var charStyle = this.documentHelper.styles.findByName(inline[characterFormatProperty[this.keywordIndex]][styleNameProperty[this.keywordIndex]], 'Character');\n elementbox.characterFormat.applyStyle(charStyle);\n }\n };\n SfdtReader.prototype.parseEditableRangeStart = function (data) {\n var permStart = new EditRangeStartElementBox();\n if (!isNullOrUndefined(data[columnFirstProperty[this.keywordIndex]])) {\n permStart.columnFirst = data[columnFirstProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(data[columnLastProperty[this.keywordIndex]])) {\n permStart.columnLast = data[columnLastProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(data[editRangeIdProperty[this.keywordIndex]])) {\n permStart.editRangeId = data[editRangeIdProperty[this.keywordIndex]];\n }\n if (!isNullOrUndefined(data[userProperty[this.keywordIndex]])) {\n permStart.user = data[userProperty[this.keywordIndex]];\n if (this.documentHelper.userCollection.indexOf(permStart.user) === -1) {\n this.documentHelper.userCollection.push(permStart.user);\n }\n this.addEditRangeCollection(permStart.user, permStart);\n }\n if (!isNullOrUndefined(data[groupProperty[this.keywordIndex]]) && data[groupProperty[this.keywordIndex]] !== '') {\n permStart.group = data[groupProperty[this.keywordIndex]];\n permStart.group = permStart.group === 'everyone' ? 'Everyone' : permStart.group;\n if (this.documentHelper.userCollection.indexOf(permStart.group) === -1) {\n this.documentHelper.userCollection.push(permStart.group);\n }\n this.addEditRangeCollection(permStart.group, permStart);\n }\n return permStart;\n };\n SfdtReader.prototype.addEditRangeCollection = function (name, permStart) {\n if (this.documentHelper.editRanges.containsKey(name)) {\n var editStartCollection = this.documentHelper.editRanges.get(name);\n editStartCollection.push(permStart);\n }\n else {\n var newEditStartCollection = [];\n newEditStartCollection.push(permStart);\n this.documentHelper.editRanges.add(name, newEditStartCollection);\n }\n };\n SfdtReader.prototype.parseChartTitleArea = function (titleArea, chartTitleArea) {\n chartTitleArea.chartfontName = titleArea[fontNameProperty[this.keywordIndex]];\n chartTitleArea.chartFontSize = titleArea[fontSizeProperty[this.keywordIndex]];\n this.parseChartDataFormat(titleArea[dataFormatProperty[this.keywordIndex]], chartTitleArea.dataFormat);\n this.parseChartLayout(titleArea[layoutProperty[this.keywordIndex]], chartTitleArea.layout);\n };\n SfdtReader.prototype.parseChartDataFormat = function (format, dataFormat) {\n dataFormat.fill.color = format[fillProperty[this.keywordIndex]][foreColorProperty[this.keywordIndex]];\n dataFormat.fill.rgb = format[fillProperty[this.keywordIndex]][rgbProperty[this.keywordIndex]];\n dataFormat.line.color = format[lineProperty[this.keywordIndex]][colorProperty[this.keywordIndex]];\n dataFormat.line.rgb = format[lineProperty[this.keywordIndex]][rgbProperty[this.keywordIndex]];\n };\n SfdtReader.prototype.parseChartLayout = function (layout, chartLayout) {\n chartLayout.chartLayoutLeft = layout[layoutXProperty[this.keywordIndex]];\n chartLayout.chartLayoutTop = layout[layoutYProperty[this.keywordIndex]];\n };\n SfdtReader.prototype.parseChartLegend = function (legend, chartLegend) {\n chartLegend.chartLegendPostion = legend[positionProperty[this.keywordIndex]];\n this.parseChartTitleArea(legend[chartTitleAreaProperty[this.keywordIndex]], chartLegend.chartTitleArea);\n };\n SfdtReader.prototype.parseChartCategoryAxis = function (categoryAxis, primaryAxis) {\n primaryAxis.categoryAxisType = categoryAxis[categoryTypeProperty[this.keywordIndex]];\n primaryAxis.categoryNumberFormat = categoryAxis[numberFormatProperty[this.keywordIndex]];\n if (categoryAxis.hasOwnProperty(isAutoMajorProperty[this.keywordIndex])) {\n primaryAxis.isAutoInternal = HelperMethods.parseBoolValue(categoryAxis[isAutoMajorProperty[this.keywordIndex]]);\n }\n primaryAxis.interval = categoryAxis[majorUnitProperty[this.keywordIndex]];\n primaryAxis.axisFontSize = categoryAxis[fontSizeProperty[this.keywordIndex]];\n primaryAxis.axisFontName = categoryAxis[fontNameProperty[this.keywordIndex]];\n primaryAxis.max = categoryAxis[maximumValueProperty[this.keywordIndex]];\n primaryAxis.min = categoryAxis[minimumValueProperty[this.keywordIndex]];\n primaryAxis.majorGridLines = HelperMethods.parseBoolValue(categoryAxis[hasMajorGridLinesProperty[this.keywordIndex]]);\n primaryAxis.minorGridLines = HelperMethods.parseBoolValue(categoryAxis[hasMinorGridLinesProperty[this.keywordIndex]]);\n primaryAxis.majorTick = categoryAxis[majorTickMarkProperty[this.keywordIndex]];\n primaryAxis.minorTick = categoryAxis[minorTickMarkProperty[this.keywordIndex]];\n primaryAxis.tickPosition = categoryAxis[tickLabelPositionProperty[this.keywordIndex]];\n primaryAxis.categoryAxisTitle = categoryAxis[chartTitleProperty[this.keywordIndex]];\n if (categoryAxis[chartTitleProperty[this.keywordIndex]] != null) {\n this.parseChartTitleArea(categoryAxis[chartTitleAreaProperty[this.keywordIndex]], primaryAxis.chartTitleArea);\n }\n };\n SfdtReader.prototype.parseChartDataTable = function (dataTable, chartDataTable) {\n chartDataTable.showSeriesKeys = HelperMethods.parseBoolValue(dataTable[showSeriesKeysProperty[this.keywordIndex]]);\n chartDataTable.hasHorzBorder = HelperMethods.parseBoolValue(dataTable[hasHorizontalBorderProperty[this.keywordIndex]]);\n chartDataTable.hasVertBorder = HelperMethods.parseBoolValue(dataTable[hasVerticalBorderProperty[this.keywordIndex]]);\n chartDataTable.hasBorders = HelperMethods.parseBoolValue(dataTable[hasBordersProperty[this.keywordIndex]]);\n };\n SfdtReader.prototype.parseChartArea = function (area, chartArea) {\n chartArea.chartForeColor = area[foreColorProperty[this.keywordIndex]];\n };\n SfdtReader.prototype.parseChartData = function (inline, chart) {\n for (var i = 0; i < inline[chartCategoryProperty[this.keywordIndex]].length; i++) {\n var chartCategory = new ChartCategory();\n var xData = inline[chartCategoryProperty[this.keywordIndex]][i];\n if (xData.hasOwnProperty(categoryXNameProperty[this.keywordIndex])) {\n chartCategory.xName = xData[categoryXNameProperty[this.keywordIndex]];\n }\n for (var j = 0; j < xData[chartDataProperty[this.keywordIndex]].length; j++) {\n var chartData = new ChartData();\n var yData = xData[chartDataProperty[this.keywordIndex]][j];\n chartData.yAxisValue = yData[yValueProperty[this.keywordIndex]];\n if (inline[chartTypeProperty[this.keywordIndex]] === 'Bubble') {\n chartData.bubbleSize = yData[sizeProperty[this.keywordIndex]];\n }\n chartCategory.chartData.push(chartData);\n }\n chart.chartCategory.push(chartCategory);\n }\n this.parseChartSeries(inline, chart);\n };\n SfdtReader.prototype.parseChartSeries = function (inline, chart) {\n var chartType = inline[chartTypeProperty[this.keywordIndex]];\n var isPieType = (chartType === 'Pie' || chartType === 'Doughnut');\n for (var i = 0; i < inline[chartSeriesProperty[this.keywordIndex]].length; i++) {\n var chartSeries = new ChartSeries();\n var xData = inline[chartSeriesProperty[this.keywordIndex]][i];\n if (xData.hasOwnProperty(seriesNameProperty[this.keywordIndex])) {\n chartSeries.seriesName = xData[seriesNameProperty[this.keywordIndex]];\n if (isPieType) {\n if (xData.hasOwnProperty(firstSliceAngleProperty[this.keywordIndex])) {\n chartSeries.firstSliceAngle = xData[firstSliceAngleProperty[this.keywordIndex]];\n }\n if (chartType === 'Doughnut') {\n chartSeries.doughnutHoleSize = xData[holeSizeProperty[this.keywordIndex]];\n }\n }\n if (xData.hasOwnProperty(dataLabelProperty[this.keywordIndex])) {\n this.parseChartDataLabels(xData[dataLabelProperty[this.keywordIndex]], chartSeries);\n }\n if (xData.hasOwnProperty(seriesFormatProperty[this.keywordIndex])) {\n var seriesFormat = new ChartSeriesFormat();\n var format = xData[seriesFormatProperty[this.keywordIndex]];\n seriesFormat.markerStyle = format[markerStyleProperty[this.keywordIndex]];\n seriesFormat.markerColor = format[markerColorProperty[this.keywordIndex]];\n seriesFormat.numberValue = format[markerSizeProperty[this.keywordIndex]];\n chartSeries.seriesFormat = seriesFormat;\n }\n if (xData.hasOwnProperty(errorBarProperty[this.keywordIndex])) {\n var errorBar = chartSeries.errorBar;\n errorBar.errorType = xData[errorBarProperty[this.keywordIndex]][typeProperty[this.keywordIndex]];\n errorBar.errorDirection = xData[errorBarProperty[this.keywordIndex]][directionProperty[this.keywordIndex]];\n errorBar.errorEndStyle = xData[errorBarProperty[this.keywordIndex]][endStyleProperty[this.keywordIndex]];\n errorBar.numberValue = xData[errorBarProperty[this.keywordIndex]][numberValueProperty[this.keywordIndex]];\n }\n if (xData.hasOwnProperty(trendLinesProperty[this.keywordIndex])) {\n this.parseChartTrendLines(xData[trendLinesProperty[this.keywordIndex]], chartSeries);\n }\n this.parseChartSeriesDataPoints(xData[dataPointsProperty[this.keywordIndex]], chartSeries);\n }\n chart.chartSeries.push(chartSeries);\n }\n };\n SfdtReader.prototype.parseChartDataLabels = function (dataLabels, series) {\n var dataLabel = new ChartDataLabels();\n dataLabel.labelPosition = dataLabels[positionProperty[this.keywordIndex]];\n dataLabel.fontName = dataLabels[fontNameProperty[this.keywordIndex]];\n dataLabel.fontColor = dataLabels[fontColorProperty[this.keywordIndex]];\n dataLabel.fontSize = dataLabels[fontSizeProperty[this.keywordIndex]];\n dataLabel.isLegendKey = HelperMethods.parseBoolValue(dataLabels[isLegendKeyProperty[this.keywordIndex]]);\n dataLabel.isBubbleSize = HelperMethods.parseBoolValue(dataLabels[isBubbleSizeProperty[this.keywordIndex]]);\n dataLabel.isCategoryName = HelperMethods.parseBoolValue(dataLabels[isCategoryNameProperty[this.keywordIndex]]);\n dataLabel.isSeriesName = HelperMethods.parseBoolValue(dataLabels[isSeriesNameProperty[this.keywordIndex]]);\n dataLabel.isValue = HelperMethods.parseBoolValue(dataLabels[isValueProperty[this.keywordIndex]]);\n dataLabel.isPercentage = HelperMethods.parseBoolValue(dataLabels[isPercentageProperty[this.keywordIndex]]);\n dataLabel.isLeaderLines = HelperMethods.parseBoolValue(dataLabels[isLeaderLinesProperty[this.keywordIndex]]);\n series.dataLabels = dataLabel;\n };\n SfdtReader.prototype.parseChartSeriesDataPoints = function (dataPoints, series) {\n for (var i = 0; i < dataPoints.length; i++) {\n var chartFormat = new ChartDataFormat();\n this.parseChartDataFormat(dataPoints[i], chartFormat);\n series.chartDataFormat.push(chartFormat);\n }\n };\n SfdtReader.prototype.parseChartTrendLines = function (trendLines, series) {\n for (var i = 0; i < trendLines.length; i++) {\n var data = trendLines[i];\n var trendLine = new ChartTrendLines();\n trendLine.trendLineName = data[nameProperty[this.keywordIndex]];\n trendLine.trendLineType = data[typeProperty[this.keywordIndex]];\n trendLine.forwardValue = data[forwardProperty[this.keywordIndex]];\n trendLine.backwardValue = data[backwardProperty[this.keywordIndex]];\n trendLine.interceptValue = data[interceptProperty[this.keywordIndex]];\n trendLine.isDisplayEquation = HelperMethods.parseBoolValue(data[isDisplayEquationProperty[this.keywordIndex]]);\n trendLine.isDisplayRSquared = HelperMethods.parseBoolValue(data[isDisplayRSquaredProperty[this.keywordIndex]]);\n series.trendLines.push(trendLine);\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseTableFormat = function (sourceFormat, tableFormat, keywordIndex) {\n this.parseBorders(keywordIndex, sourceFormat[bordersProperty[keywordIndex]], tableFormat.borders);\n if (!isNullOrUndefined(sourceFormat[allowAutoFitProperty[keywordIndex]])) {\n tableFormat.allowAutoFit = HelperMethods.parseBoolValue(sourceFormat[allowAutoFitProperty[keywordIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[cellSpacingProperty[keywordIndex]])) {\n tableFormat.cellSpacing = sourceFormat[cellSpacingProperty[keywordIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[leftMarginProperty[keywordIndex]])) {\n tableFormat.leftMargin = sourceFormat[leftMarginProperty[keywordIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[topMarginProperty[keywordIndex]])) {\n tableFormat.topMargin = sourceFormat[topMarginProperty[keywordIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[rightMarginProperty[keywordIndex]])) {\n tableFormat.rightMargin = sourceFormat[rightMarginProperty[keywordIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[bottomMarginProperty[keywordIndex]])) {\n tableFormat.bottomMargin = sourceFormat[bottomMarginProperty[keywordIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[leftIndentProperty[keywordIndex]])) {\n tableFormat.leftIndent = sourceFormat[leftIndentProperty[keywordIndex]];\n }\n this.parseShading(sourceFormat[shadingProperty[keywordIndex]], tableFormat.shading, keywordIndex);\n if (!isNullOrUndefined(sourceFormat[tableAlignmentProperty[keywordIndex]])) {\n tableFormat.tableAlignment = this.getTableAlignment(sourceFormat[tableAlignmentProperty[keywordIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[preferredWidthProperty[keywordIndex]])) {\n tableFormat.preferredWidth = sourceFormat[preferredWidthProperty[keywordIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[preferredWidthTypeProperty[keywordIndex]])) {\n tableFormat.preferredWidthType = this.getWidthType(sourceFormat[preferredWidthTypeProperty[keywordIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[bidiProperty[keywordIndex]])) {\n tableFormat.bidi = HelperMethods.parseBoolValue(sourceFormat[bidiProperty[keywordIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[horizontalPositionAbsProperty[keywordIndex]])) {\n tableFormat.horizontalPositionAbs = this.getHorizontalPositionAbs(sourceFormat[horizontalPositionAbsProperty[keywordIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[horizontalPositionProperty[keywordIndex]])) {\n tableFormat.horizontalPosition = sourceFormat[horizontalPositionProperty[keywordIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[styleNameProperty[keywordIndex]])) {\n tableFormat.styleName = sourceFormat[styleNameProperty[keywordIndex]];\n }\n if (this.documentHelper.owner.enableCollaborativeEditing && !isNullOrUndefined(sourceFormat[titleProperty[keywordIndex]])) {\n tableFormat.title = sourceFormat[titleProperty[keywordIndex]];\n }\n if (this.documentHelper.owner.enableCollaborativeEditing && !isNullOrUndefined(sourceFormat[descriptionProperty[keywordIndex]])) {\n tableFormat.description = sourceFormat[descriptionProperty[keywordIndex]];\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseCellFormat = function (sourceFormat, cellFormat, keyIndex) {\n if (!isNullOrUndefined(sourceFormat)) {\n this.parseBorders(keyIndex, sourceFormat[bordersProperty[keyIndex]], cellFormat.borders);\n if (!sourceFormat.isSamePaddingAsTable) {\n // cellFormat.ClearMargins();\n //else\n this.parseCellMargin(sourceFormat, cellFormat, keyIndex);\n }\n if (!isNullOrUndefined(sourceFormat[cellWidthProperty[keyIndex]])) {\n cellFormat.cellWidth = sourceFormat[cellWidthProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[columnSpanProperty[keyIndex]])) {\n cellFormat.columnSpan = sourceFormat[columnSpanProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[rowSpanProperty[keyIndex]])) {\n cellFormat.rowSpan = sourceFormat[rowSpanProperty[keyIndex]];\n }\n this.parseShading(sourceFormat[shadingProperty[keyIndex]], cellFormat.shading, keyIndex);\n if (!isNullOrUndefined(sourceFormat[verticalAlignmentProperty[keyIndex]])) {\n cellFormat.verticalAlignment = this.getCellVerticalAlignment(sourceFormat[verticalAlignmentProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[preferredWidthTypeProperty[keyIndex]])) {\n cellFormat.preferredWidthType = this.getWidthType(sourceFormat[preferredWidthTypeProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[preferredWidthProperty[keyIndex]])) {\n cellFormat.preferredWidth = sourceFormat[preferredWidthProperty[keyIndex]];\n }\n }\n };\n SfdtReader.prototype.parseCellMargin = function (sourceFormat, cellFormat, keyIndex) {\n if (!isNullOrUndefined(sourceFormat[leftMarginProperty[keyIndex]])) {\n cellFormat.leftMargin = sourceFormat[leftMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[rightMarginProperty[keyIndex]])) {\n cellFormat.rightMargin = sourceFormat[rightMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[topMarginProperty[keyIndex]])) {\n cellFormat.topMargin = sourceFormat[topMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[bottomMarginProperty[keyIndex]])) {\n cellFormat.bottomMargin = sourceFormat[bottomMarginProperty[keyIndex]];\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseRowFormat = function (sourceFormat, rowFormat, keyIndex) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat[allowBreakAcrossPagesProperty[keyIndex]])) {\n rowFormat.allowBreakAcrossPages = HelperMethods.parseBoolValue(sourceFormat[allowBreakAcrossPagesProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[isHeaderProperty[keyIndex]])) {\n rowFormat.isHeader = HelperMethods.parseBoolValue(sourceFormat[isHeaderProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[heightTypeProperty[keyIndex]])) {\n rowFormat.heightType = this.getHeightType(sourceFormat[heightTypeProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[heightProperty[keyIndex]])) {\n rowFormat.height = sourceFormat[heightProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[leftMarginProperty[keyIndex]])) {\n rowFormat.leftMargin = sourceFormat[leftMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[topMarginProperty[keyIndex]])) {\n rowFormat.topMargin = sourceFormat[topMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[rightMarginProperty[keyIndex]])) {\n rowFormat.rightMargin = sourceFormat[rightMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[bottomMarginProperty[keyIndex]])) {\n rowFormat.bottomMargin = sourceFormat[bottomMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[leftIndentProperty[keyIndex]])) {\n rowFormat.leftIndent = sourceFormat[leftIndentProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[revisionIdsProperty[keyIndex]]) && sourceFormat[revisionIdsProperty[keyIndex]].length > 0) {\n this.checkAndApplyRevision(keyIndex, sourceFormat, rowFormat);\n }\n this.parseRowGridValues(sourceFormat, rowFormat, keyIndex);\n this.parseBorders(keyIndex, sourceFormat[bordersProperty[keyIndex]], rowFormat.borders);\n }\n };\n SfdtReader.prototype.parseBorders = function (keyIndex, sourceBorders, destBorder) {\n if (!isNullOrUndefined(sourceBorders)) {\n destBorder.isParsing = true;\n this.parseBorder(keyIndex, sourceBorders[leftProperty[keyIndex]], destBorder.left);\n this.parseBorder(keyIndex, sourceBorders[rightProperty[keyIndex]], destBorder.right);\n this.parseBorder(keyIndex, sourceBorders[topProperty[keyIndex]], destBorder.top);\n this.parseBorder(keyIndex, sourceBorders[bottomProperty[keyIndex]], destBorder.bottom);\n this.parseBorder(keyIndex, sourceBorders[verticalProperty[keyIndex]], destBorder.vertical);\n this.parseBorder(keyIndex, sourceBorders[horizontalProperty[keyIndex]], destBorder.horizontal);\n this.parseBorder(keyIndex, sourceBorders[diagonalDownProperty[keyIndex]], destBorder.diagonalDown);\n this.parseBorder(keyIndex, sourceBorders[diagonalUpProperty[keyIndex]], destBorder.diagonalUp);\n destBorder.isParsing = false;\n }\n };\n SfdtReader.prototype.parseBorder = function (keyIndex, sourceBorder, destBorder) {\n if (!isNullOrUndefined(sourceBorder)) {\n if (!isNullOrUndefined(sourceBorder[colorProperty[keyIndex]])) {\n destBorder.color = this.getColor(sourceBorder[colorProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceBorder[lineStyleProperty[keyIndex]])) {\n destBorder.lineStyle = this.getLineStyle(sourceBorder[lineStyleProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceBorder[lineWidthProperty[keyIndex]])) {\n destBorder.lineWidth = sourceBorder[lineWidthProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceBorder[hasNoneStyleProperty[keyIndex]])) {\n destBorder.hasNoneStyle = HelperMethods.parseBoolValue(sourceBorder[hasNoneStyleProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceBorder[spaceProperty[keyIndex]])) {\n destBorder.space = sourceBorder[spaceProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceBorder[shadowProperty[keyIndex]])) {\n destBorder.shadow = HelperMethods.parseBoolValue(sourceBorder[shadowProperty[keyIndex]]);\n }\n }\n };\n SfdtReader.prototype.parseShading = function (sourceShading, destShading, keyIndex) {\n if (!isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(sourceShading[backgroundColorProperty[keyIndex]])) {\n destShading.backgroundColor = this.getColor(sourceShading[backgroundColorProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceShading[foregroundColorProperty[keyIndex]])) {\n destShading.foregroundColor = this.getColor(sourceShading[foregroundColorProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceShading[textureProperty[keyIndex]]) || !isNullOrUndefined(sourceShading.textureStyle)) {\n destShading.textureStyle = !isNullOrUndefined(sourceShading[textureProperty[keyIndex]]) ? this.getTextureStyle(sourceShading[textureProperty[keyIndex]]) : this.getTextureStyle(sourceShading.textureStyle);\n }\n }\n };\n /**\n * @private\n */\n SfdtReader.prototype.parseCharacterFormat = function (keyIndex, sourceFormat, characterFormat, writeInlineFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (writeInlineFormat && sourceFormat.hasOwnProperty(inlineFormatProperty[keyIndex])) {\n this.parseCharacterFormat(keyIndex, sourceFormat.inlineFormat, characterFormat);\n return;\n }\n if (!isNullOrUndefined(sourceFormat[baselineAlignmentProperty[keyIndex]])) {\n characterFormat.baselineAlignment = this.getBaseAlignment(sourceFormat[baselineAlignmentProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[underlineProperty[keyIndex]])) {\n characterFormat.underline = this.getUnderline(sourceFormat[underlineProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[strikethroughProperty[keyIndex]])) {\n characterFormat.strikethrough = this.getStrikethrough(sourceFormat[strikethroughProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[fontSizeProperty[keyIndex]])) {\n sourceFormat[fontSizeProperty[keyIndex]] = parseFloat(sourceFormat[fontSizeProperty[keyIndex]]);\n var number = sourceFormat[fontSizeProperty[keyIndex]] * 10;\n if (number % 10 !== 0) {\n number = sourceFormat[fontSizeProperty[keyIndex]].toFixed(1) * 10;\n //to check worst case scenerio like 8.2 or 8.7 like these to round off\n if (number % 5 === 0) {\n sourceFormat[fontSizeProperty[keyIndex]] = sourceFormat[fontSizeProperty[keyIndex]].toFixed(1);\n }\n else {\n sourceFormat[fontSizeProperty[keyIndex]] = Math.round(sourceFormat[fontSizeProperty[keyIndex]]);\n }\n }\n var fontSize = parseFloat(sourceFormat[fontSizeProperty[keyIndex]]);\n characterFormat.fontSize = fontSize < 0 ? 0 : fontSize;\n }\n if (!isNullOrUndefined(sourceFormat[fontFamilyProperty[keyIndex]])) {\n if (sourceFormat[fontFamilyProperty[keyIndex]].indexOf('\"') !== -1) {\n sourceFormat[fontFamilyProperty[keyIndex]] = sourceFormat[fontFamilyProperty[keyIndex]].replace('\"', '');\n }\n var fontFamily = sourceFormat[fontFamilyProperty[keyIndex]];\n if (!isNullOrUndefined(this.documentHelper.fontSubstitutionTable) && this.documentHelper.fontSubstitutionTable.containsKey(fontFamily) && !this.isFontInstalled(fontFamily)) {\n fontFamily = this.documentHelper.fontSubstitutionTable.get(fontFamily);\n }\n characterFormat.fontFamily = fontFamily;\n if (isNullOrUndefined(sourceFormat[fontFamilyFarEastProperty[keyIndex]])) {\n characterFormat.fontFamilyFarEast = fontFamily;\n }\n if (isNullOrUndefined(sourceFormat[fontFamilyAsciiProperty[keyIndex]])) {\n characterFormat.fontFamilyAscii = fontFamily;\n }\n if (isNullOrUndefined(sourceFormat[fontFamilyNonFarEastProperty[keyIndex]])) {\n characterFormat.fontFamilyNonFarEast = fontFamily;\n }\n }\n if (!isNullOrUndefined(sourceFormat[boldProperty[keyIndex]])) {\n characterFormat.bold = HelperMethods.parseBoolValue(sourceFormat[boldProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[italicProperty[keyIndex]])) {\n characterFormat.italic = HelperMethods.parseBoolValue(sourceFormat[italicProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[highlightColorProperty[keyIndex]])) {\n characterFormat.highlightColor = this.getHighlightColor(sourceFormat[highlightColorProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[fontColorProperty[keyIndex]])) {\n characterFormat.fontColor = this.getColor(sourceFormat[fontColorProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[bidiProperty[keyIndex]])) {\n characterFormat.bidi = HelperMethods.parseBoolValue(sourceFormat[bidiProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[bdoProperty[keyIndex]])) {\n characterFormat.bdo = this.getBiDirectionalOverride(sourceFormat[bdoProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[fontSizeBidiProperty[keyIndex]])) {\n characterFormat.fontSizeBidi = sourceFormat[fontSizeBidiProperty[keyIndex]] < 0 ? 0 : sourceFormat[fontSizeBidiProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[fontFamilyBidiProperty[keyIndex]])) {\n if (sourceFormat[fontFamilyBidiProperty[keyIndex]].indexOf('\"') !== -1) {\n sourceFormat[fontFamilyBidiProperty[keyIndex]] = sourceFormat[fontFamilyBidiProperty[keyIndex]].replace('\"', '');\n }\n var fontFamilyBidi = sourceFormat[fontFamilyBidiProperty[keyIndex]];\n if (!isNullOrUndefined(this.documentHelper.fontSubstitutionTable) && this.documentHelper.fontSubstitutionTable.containsKey(fontFamilyBidi) && !this.isFontInstalled(fontFamilyBidi)) {\n fontFamilyBidi = this.documentHelper.fontSubstitutionTable.get(fontFamilyBidi);\n }\n characterFormat.fontFamilyBidi = fontFamilyBidi;\n }\n if (!isNullOrUndefined(sourceFormat[boldBidiProperty[keyIndex]])) {\n characterFormat.boldBidi = HelperMethods.parseBoolValue(sourceFormat[boldBidiProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[italicBidiProperty[keyIndex]])) {\n characterFormat.italicBidi = HelperMethods.parseBoolValue(sourceFormat[italicBidiProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[revisionIdsProperty[keyIndex]]) && sourceFormat[revisionIdsProperty[keyIndex]].length > 0) {\n this.checkAndApplyRevision(keyIndex, sourceFormat, characterFormat);\n }\n if (!isNullOrUndefined(sourceFormat[allCapsProperty[keyIndex]])) {\n characterFormat.allCaps = HelperMethods.parseBoolValue(sourceFormat[allCapsProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[localeIdBidiProperty[keyIndex]])) {\n characterFormat.localeIdBidi = sourceFormat[localeIdBidiProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[localeIdProperty[keyIndex]])) {\n characterFormat.localeIdAscii = sourceFormat[localeIdProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[localeIdFarEastProperty[keyIndex]])) {\n characterFormat.localeIdFarEast = sourceFormat[localeIdFarEastProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[complexScriptProperty[keyIndex]])) {\n characterFormat.complexScript = HelperMethods.parseBoolValue(sourceFormat[complexScriptProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[fontFamilyFarEastProperty[keyIndex]])) {\n if (sourceFormat[fontFamilyFarEastProperty[keyIndex]].indexOf('\"') !== -1) {\n sourceFormat[fontFamilyFarEastProperty[keyIndex]] = sourceFormat[fontFamilyFarEastProperty[keyIndex]].replace('\"', '');\n }\n var fontFamilyFarEast = sourceFormat[fontFamilyFarEastProperty[keyIndex]];\n if (!isNullOrUndefined(this.documentHelper.fontSubstitutionTable) && this.documentHelper.fontSubstitutionTable.containsKey(fontFamilyFarEast) && !this.isFontInstalled(fontFamilyFarEast)) {\n fontFamilyFarEast = this.documentHelper.fontSubstitutionTable.get(fontFamilyFarEast);\n }\n characterFormat.fontFamilyFarEast = fontFamilyFarEast;\n }\n if (!isNullOrUndefined(sourceFormat[fontFamilyAsciiProperty[keyIndex]])) {\n if (sourceFormat[fontFamilyAsciiProperty[keyIndex]].indexOf('\"') !== -1) {\n sourceFormat[fontFamilyAsciiProperty[keyIndex]] = sourceFormat[fontFamilyAsciiProperty[keyIndex]].replace('\"', '');\n }\n var fontFamilyAscii = sourceFormat[fontFamilyAsciiProperty[keyIndex]];\n if (!isNullOrUndefined(this.documentHelper.fontSubstitutionTable) && this.documentHelper.fontSubstitutionTable.containsKey(fontFamilyAscii) && !this.isFontInstalled(fontFamilyAscii)) {\n fontFamilyAscii = this.documentHelper.fontSubstitutionTable.get(fontFamilyAscii);\n }\n characterFormat.fontFamilyAscii = fontFamilyAscii;\n }\n if (!isNullOrUndefined(sourceFormat[fontFamilyNonFarEastProperty[keyIndex]])) {\n if (sourceFormat[fontFamilyNonFarEastProperty[keyIndex]].indexOf('\"') !== -1) {\n sourceFormat[fontFamilyNonFarEastProperty[keyIndex]] = sourceFormat[fontFamilyNonFarEastProperty[keyIndex]].replace('\"', '');\n }\n var fontFamilyNonFarEast = sourceFormat[fontFamilyNonFarEastProperty[keyIndex]];\n if (!isNullOrUndefined(this.documentHelper.fontSubstitutionTable) && this.documentHelper.fontSubstitutionTable.containsKey(fontFamilyNonFarEast) && !this.isFontInstalled(fontFamilyNonFarEast)) {\n fontFamilyNonFarEast = this.documentHelper.fontSubstitutionTable.get(fontFamilyNonFarEast);\n }\n characterFormat.fontFamilyNonFarEast = fontFamilyNonFarEast;\n }\n if (!isNullOrUndefined(sourceFormat[characterSpacingProperty[keyIndex]])) {\n characterFormat.characterSpacing = sourceFormat[characterSpacingProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[scalingProperty[keyIndex]])) {\n characterFormat.scaling = sourceFormat[scalingProperty[keyIndex]];\n }\n }\n };\n // Bug 864876: Here, we have checking whether the font is installed or not. If not installed, then we have changed the font name from the font substitution table.\n // The below code is implemented by refering the following link. (https://www.samclarke.com/javascript-is-font-available/#:~:text=Then%20to%20check%20a%20font,otherwise%20another%20fallback%20is%20tried.)\n SfdtReader.prototype.isFontInstalled = function (fontFamily) {\n var monoWidth = this.getWidth('monospace');\n var sansWidth = this.getWidth('sans-serif');\n var serifWidth = this.getWidth('serif');\n return monoWidth !== this.getWidth(fontFamily + ', monospace', monoWidth) ||\n sansWidth !== this.getWidth(fontFamily + ', sans-serif', sansWidth) ||\n serifWidth !== this.getWidth(fontFamily + ', serif', serifWidth);\n };\n SfdtReader.prototype.getWidth = function (fontFamily, defaultWidth) {\n var width;\n var container = document.createElement('span');\n container.innerHTML = Array(100).join('wi');\n container.style.cssText = [\n 'position:absolute',\n 'width:auto',\n 'font-size:128px',\n 'left:-99999px'\n ].join(' !important;');\n container.style.fontFamily = fontFamily;\n document.body.appendChild(container);\n width = container.clientWidth;\n if (container.style.fontFamily === \"\" && !isNullOrUndefined(defaultWidth)) {\n width = defaultWidth;\n }\n document.body.removeChild(container);\n return width;\n };\n SfdtReader.prototype.getColor = function (color) {\n var convertColor = color;\n return convertColor || '#ffffff';\n };\n SfdtReader.prototype.parseThemes = function (sourceFormat, themes) {\n this.parseFontScheme(sourceFormat[fontSchemeProperty[this.keywordIndex]], themes);\n };\n SfdtReader.prototype.parseFontScheme = function (sourceFormat, themes) {\n if (!isNullOrUndefined(sourceFormat[fontSchemeNameProperty[this.keywordIndex]]))\n themes.fontScheme.fontSchemeName = sourceFormat[fontSchemeNameProperty[this.keywordIndex]];\n if (!isNullOrUndefined(sourceFormat[majorFontSchemeProperty[this.keywordIndex]])) {\n this.parseMajorMinorFontScheme(sourceFormat[majorFontSchemeProperty[this.keywordIndex]], themes.fontScheme.majorFontScheme);\n }\n if (!isNullOrUndefined(sourceFormat[minorFontSchemeProperty[this.keywordIndex]])) {\n this.parseMajorMinorFontScheme(sourceFormat[minorFontSchemeProperty[this.keywordIndex]], themes.fontScheme.minorFontScheme);\n }\n };\n SfdtReader.prototype.parseMajorMinorFontScheme = function (sourceFormat, majorMinor) {\n if (!isNullOrUndefined(sourceFormat[fontTypefaceProperty[this.keywordIndex]]) && Object.keys(sourceFormat[fontTypefaceProperty[this.keywordIndex]]).length > 0) {\n var keys = Object.keys(sourceFormat[fontTypefaceProperty[this.keywordIndex]]);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n majorMinor.fontTypeface.add(key, sourceFormat[fontTypefaceProperty[this.keywordIndex]][key]);\n }\n this.documentHelper.hasThemes = true;\n }\n if (!isNullOrUndefined(sourceFormat[fontSchemeListProperty[this.keywordIndex]]) && sourceFormat[fontSchemeListProperty[this.keywordIndex]].length > 0) {\n for (var j = 0; j < sourceFormat[fontSchemeListProperty[this.keywordIndex]].length; j++) {\n var data = sourceFormat[fontSchemeListProperty[this.keywordIndex]][j];\n var fontList = new FontSchemeStruct();\n fontList.name = !isNullOrUndefined(data.fontName) ? data[fontNameProperty[this.keywordIndex]] : data[nameProperty[this.keywordIndex]];\n fontList.typeface = !isNullOrUndefined(data.fontTypeface) ? data.fontTypeface : data[typefaceProperty[this.keywordIndex]];\n fontList.panose = !isNullOrUndefined(data.pnose) ? data.pnose : data[panoseProperty[this.keywordIndex]];\n majorMinor.fontSchemeList.push(fontList);\n }\n this.documentHelper.hasThemes = true;\n }\n };\n SfdtReader.prototype.parseParagraphFormat = function (keyIndex, sourceFormat, paragraphFormat) {\n if (!isNullOrUndefined(sourceFormat)) {\n if (!isNullOrUndefined(sourceFormat[bordersProperty[keyIndex]])) {\n this.parseBorders(keyIndex, sourceFormat[bordersProperty[keyIndex]], paragraphFormat.borders);\n }\n if (!isNullOrUndefined(sourceFormat[bidiProperty[keyIndex]])) {\n paragraphFormat.bidi = HelperMethods.parseBoolValue(sourceFormat[bidiProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[leftIndentProperty[keyIndex]])) {\n paragraphFormat.leftIndent = sourceFormat[leftIndentProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[rightIndentProperty[keyIndex]])) {\n paragraphFormat.rightIndent = sourceFormat[rightIndentProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[firstLineIndentProperty[keyIndex]])) {\n paragraphFormat.firstLineIndent = sourceFormat[firstLineIndentProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[afterSpacingProperty[keyIndex]])) {\n paragraphFormat.afterSpacing = sourceFormat[afterSpacingProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[beforeSpacingProperty[keyIndex]])) {\n paragraphFormat.beforeSpacing = sourceFormat[beforeSpacingProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[spaceBeforeAutoProperty[keyIndex]])) {\n paragraphFormat.spaceBeforeAuto = HelperMethods.parseBoolValue(sourceFormat[spaceBeforeAutoProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[spaceAfterAutoProperty[keyIndex]])) {\n paragraphFormat.spaceAfterAuto = HelperMethods.parseBoolValue(sourceFormat[spaceAfterAutoProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[lineSpacingProperty[keyIndex]])) {\n paragraphFormat.lineSpacing = sourceFormat[lineSpacingProperty[keyIndex]];\n }\n if (!isNullOrUndefined(sourceFormat[lineSpacingTypeProperty[keyIndex]])) {\n paragraphFormat.lineSpacingType = this.getLineSpacingType(sourceFormat[lineSpacingTypeProperty[keyIndex]]);\n }\n else {\n if (!isNullOrUndefined(sourceFormat[lineSpacingProperty[keyIndex]])) {\n paragraphFormat.lineSpacingType = 'Multiple';\n }\n }\n if (!isNullOrUndefined(sourceFormat[textAlignmentProperty[keyIndex]])) {\n paragraphFormat.textAlignment = this.getTextAlignment(sourceFormat[textAlignmentProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[outlineLevelProperty[keyIndex]])) {\n paragraphFormat.outlineLevel = this.getOutlineLevel(sourceFormat[outlineLevelProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[contextualSpacingProperty[keyIndex]])) {\n paragraphFormat.contextualSpacing = HelperMethods.parseBoolValue(sourceFormat[contextualSpacingProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[keepWithNextProperty[keyIndex]])) {\n paragraphFormat.keepWithNext = HelperMethods.parseBoolValue(sourceFormat[keepWithNextProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[keepLinesTogetherProperty[keyIndex]])) {\n paragraphFormat.keepLinesTogether = HelperMethods.parseBoolValue(sourceFormat[keepLinesTogetherProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(sourceFormat[widowControlProperty[keyIndex]])) {\n paragraphFormat.widowControl = HelperMethods.parseBoolValue(sourceFormat[widowControlProperty[keyIndex]]);\n }\n paragraphFormat.listFormat = new WListFormat(paragraphFormat);\n if (sourceFormat.hasOwnProperty(listFormatProperty[keyIndex])) {\n this.parseListFormat(keyIndex, sourceFormat, paragraphFormat.listFormat);\n }\n if (sourceFormat.hasOwnProperty(tabsProperty[keyIndex])) {\n this.parseTabStop(keyIndex, sourceFormat[tabsProperty[keyIndex]], paragraphFormat.tabs);\n }\n }\n };\n SfdtReader.prototype.parseListFormat = function (keyIndex, block, listFormat) {\n if (!isNullOrUndefined(block[listFormatProperty[keyIndex]])) {\n if (!isNullOrUndefined(block[listFormatProperty[keyIndex]][listIdProperty[keyIndex]])) {\n listFormat.listId = block[listFormatProperty[keyIndex]][listIdProperty[keyIndex]];\n listFormat.list = this.documentHelper.getListById(block[listFormatProperty[keyIndex]][listIdProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(block[listFormatProperty[keyIndex]][nsidProperty])) {\n listFormat.nsid = block[listFormatProperty[keyIndex]][nsidProperty];\n }\n else if (!isNullOrUndefined(listFormat.list)) {\n // Backward compatibility\n listFormat.nsid = listFormat.list.nsid;\n }\n if (!isNullOrUndefined(block[listFormatProperty[keyIndex]][listLevelNumberProperty[keyIndex]])) {\n listFormat.listLevelNumber = block[listFormatProperty[keyIndex]][listLevelNumberProperty[keyIndex]];\n }\n }\n };\n SfdtReader.prototype.parseSectionFormat = function (keyIndex, data, sectionFormat) {\n if (!isNullOrUndefined(data[pageWidthProperty[keyIndex]])) {\n sectionFormat.pageWidth = data[pageWidthProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[pageHeightProperty[keyIndex]])) {\n sectionFormat.pageHeight = data[pageHeightProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[leftMarginProperty[keyIndex]])) {\n sectionFormat.leftMargin = data[leftMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[topMarginProperty[keyIndex]])) {\n sectionFormat.topMargin = data[topMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[rightMarginProperty[keyIndex]])) {\n sectionFormat.rightMargin = data[rightMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[bottomMarginProperty[keyIndex]])) {\n sectionFormat.bottomMargin = data[bottomMarginProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[headerDistanceProperty[keyIndex]])) {\n sectionFormat.headerDistance = data[headerDistanceProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[footerDistanceProperty[keyIndex]])) {\n sectionFormat.footerDistance = data[footerDistanceProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[differentFirstPageProperty[keyIndex]])) {\n sectionFormat.differentFirstPage = HelperMethods.parseBoolValue(data[differentFirstPageProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(data[differentOddAndEvenPagesProperty[keyIndex]])) {\n sectionFormat.differentOddAndEvenPages = HelperMethods.parseBoolValue(data[differentOddAndEvenPagesProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(data[bidiProperty[keyIndex]])) {\n sectionFormat.bidi = HelperMethods.parseBoolValue(data[bidiProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(data[restartPageNumberingProperty[keyIndex]])) {\n sectionFormat.restartPageNumbering = HelperMethods.parseBoolValue(data[restartPageNumberingProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(data[pageStartingNumberProperty[keyIndex]])) {\n sectionFormat.pageStartingNumber = data[pageStartingNumberProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[endnoteNumberFormatProperty[keyIndex]])) {\n sectionFormat.endnoteNumberFormat = this.getFootEndNoteNumberFormat(data[endnoteNumberFormatProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(data[footNoteNumberFormatProperty[keyIndex]])) {\n sectionFormat.footNoteNumberFormat = this.getFootEndNoteNumberFormat(data[footNoteNumberFormatProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(data[restartIndexForFootnotesProperty[keyIndex]])) {\n sectionFormat.restartIndexForFootnotes = this.getFootnoteRestartIndex(data[restartIndexForFootnotesProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(data[restartIndexForEndnotesProperty[keyIndex]])) {\n sectionFormat.restartIndexForEndnotes = this.getFootnoteRestartIndex(data[restartIndexForEndnotesProperty[keyIndex]]);\n }\n if (!isNullOrUndefined(data[initialFootNoteNumberProperty[keyIndex]])) {\n sectionFormat.initialFootNoteNumber = data[initialFootNoteNumberProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[initialEndNoteNumberProperty[keyIndex]])) {\n sectionFormat.initialEndNoteNumber = data[initialEndNoteNumberProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[pageNumberStyleProperty[keyIndex]])) {\n sectionFormat.pageNumberStyle = data[pageNumberStyleProperty[keyIndex]];\n }\n if (!isNullOrUndefined(data[columnsProperty[keyIndex]]) && !isNullOrUndefined(data[numberOfColumnsProperty[keyIndex]]) && data[numberOfColumnsProperty[keyIndex]] > 1) {\n sectionFormat.numberOfColumns = data[numberOfColumnsProperty[keyIndex]];\n sectionFormat.equalWidth = HelperMethods.parseBoolValue(data[equalWidthProperty[keyIndex]]);\n sectionFormat.lineBetweenColumns = HelperMethods.parseBoolValue(data[lineBetweenColumnsProperty[keyIndex]]);\n if (data[columnsProperty[keyIndex]]) {\n for (var i = 0; i < data[columnsProperty[keyIndex]].length; i++) {\n var newCol = new WColumnFormat();\n newCol.width = HelperMethods.convertPointToPixel(data[columnsProperty[keyIndex]][i][widthProperty[keyIndex]]);\n newCol.space = HelperMethods.convertPointToPixel(data[columnsProperty[keyIndex]][i][spaceProperty[keyIndex]]);\n newCol.index = i;\n sectionFormat.columns.push(newCol);\n }\n }\n }\n if (!isNullOrUndefined(data[breakCodeProperty[keyIndex]])) {\n sectionFormat.breakCode = data[breakCodeProperty[keyIndex]];\n }\n };\n SfdtReader.prototype.parseColumns = function (wCols, columns) {\n columns = [];\n if (wCols) {\n for (var i = 0; i < wCols.length; i++) {\n var newCol = new WColumnFormat();\n newCol.width = HelperMethods.convertPointToPixel(wCols[i][widthProperty[this.keywordIndex]]);\n newCol.space = HelperMethods.convertPointToPixel(wCols[i][spaceProperty[this.keywordIndex]]);\n newCol.index = i;\n columns.push(newCol);\n }\n }\n };\n SfdtReader.prototype.parseTabStop = function (keyIndex, wTabs, tabs) {\n if (wTabs) {\n for (var i = 0; i < wTabs.length; i++) {\n var tab = wTabs[i];\n if (Object.keys(tab).length > 0) {\n var tabStop = new WTabStop();\n tabStop.position = tab[positionProperty[keyIndex]];\n tabStop.tabLeader = this.getTabLeader(tab[tabLeaderProperty[keyIndex]]);\n tabStop.deletePosition = tab[deletePositionProperty[keyIndex]];\n tabStop.tabJustification = this.getTabJustification(tab[tabJustificationProperty[keyIndex]]);\n tabs.push(tabStop);\n }\n }\n }\n };\n SfdtReader.prototype.validateImageUrl = function (imagestr) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n imagestr = imagestr.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = imagestr.length * 3 / 4;\n if (imagestr.charAt(imagestr.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (imagestr.charAt(imagestr.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the imagestr is not a base64 content\n // - the imagestr is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the imagestr uses a base64 variant (base64url for example)\n return false;\n }\n return true;\n };\n SfdtReader.prototype.containsFieldBegin = function (line) {\n var element = undefined;\n for (var i = line.children.length - 1; i >= 0; i--) {\n element = line.children[i];\n if (element instanceof FieldElementBox && element.hasFieldEnd && element.nextElement instanceof TextElementBox) {\n return element.nextElement;\n }\n else if (element instanceof FieldElementBox) {\n return undefined;\n }\n }\n return element;\n };\n SfdtReader.prototype.getBaseAlignment = function (baselineAlignment) {\n switch (baselineAlignment) {\n case 0:\n return 'Normal';\n case 1:\n return 'Superscript';\n case 2:\n return 'Subscript';\n default:\n return baselineAlignment;\n }\n };\n SfdtReader.prototype.getUnderline = function (underline) {\n switch (underline) {\n case 0:\n return 'None';\n case 1:\n return 'Single';\n case 2:\n return 'Words';\n case 3:\n return 'Double';\n case 4:\n return 'Dotted';\n case 5:\n return 'Thick';\n case 6:\n return 'Dash';\n case 7:\n return 'DashLong';\n case 8:\n return 'DotDash';\n case 9:\n return 'DotDotDash';\n case 10:\n return 'Wavy';\n case 11:\n return 'DottedHeavy';\n case 12:\n return 'DashHeavy';\n case 13:\n return 'DashLongHeavy';\n case 14:\n return 'DotDashHeavy';\n case 15:\n return 'DotDotDashHeavy';\n case 16:\n return 'WavyHeavy';\n case 17:\n return 'WavyDouble';\n default:\n return underline;\n }\n };\n SfdtReader.prototype.getStrikethrough = function (strikethrough) {\n switch (strikethrough) {\n case 0:\n return 'None';\n case 1:\n return 'SingleStrike';\n case 2:\n return 'DoubleStrike';\n default:\n return strikethrough;\n }\n };\n SfdtReader.prototype.getHighlightColor = function (highlightColor) {\n switch (highlightColor) {\n case 0:\n return 'NoColor';\n case 1:\n return 'Yellow';\n case 2:\n return 'BrightGreen';\n case 3:\n return 'Turquoise';\n case 4:\n return 'Pink';\n case 5:\n return 'Blue';\n case 6:\n return 'Red';\n case 7:\n return 'DarkBlue';\n case 8:\n return 'Teal';\n case 9:\n return 'Green';\n case 10:\n return 'Violet';\n case 11:\n return 'DarkRed';\n case 12:\n return 'DarkYellow';\n case 13:\n return 'Gray50';\n case 14:\n return 'Gray25';\n case 15:\n return 'Black';\n default:\n return highlightColor;\n }\n };\n SfdtReader.prototype.getLineSpacingType = function (lineSpacingType) {\n switch (lineSpacingType) {\n case 0:\n return 'Multiple';\n case 1:\n return 'AtLeast';\n case 2:\n return 'Exactly';\n default:\n return lineSpacingType;\n }\n };\n SfdtReader.prototype.getOutlineLevel = function (outlineLevel) {\n switch (outlineLevel) {\n case 0:\n return 'BodyText';\n case 1:\n return 'Level1';\n case 2:\n return 'Level2';\n case 3:\n return 'Level3';\n case 4:\n return 'Level4';\n case 5:\n return 'Level5';\n case 6:\n return 'Level6';\n case 7:\n return 'Level7';\n case 8:\n return 'Level8';\n case 9:\n return 'Level9';\n default:\n return outlineLevel;\n }\n };\n SfdtReader.prototype.getTextAlignment = function (textAlignment) {\n switch (textAlignment) {\n case 0:\n return 'Left';\n case 1:\n return 'Center';\n case 2:\n return 'Right';\n case 3:\n return 'Justify';\n default:\n return textAlignment;\n }\n };\n SfdtReader.prototype.getWidthType = function (widthType) {\n switch (widthType) {\n case 0:\n return 'Auto';\n case 1:\n return 'Percent';\n case 2:\n return 'Point';\n default:\n return widthType;\n }\n };\n SfdtReader.prototype.getTableAlignment = function (tableAlignment) {\n switch (tableAlignment) {\n case 0:\n return 'Left';\n case 1:\n return 'Center';\n case 2:\n return 'Right';\n default:\n return tableAlignment;\n }\n };\n SfdtReader.prototype.getLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 0:\n return 'Single';\n case 1:\n return 'None';\n case 2:\n return 'Dot';\n case 3:\n return 'DashSmallGap';\n case 4:\n return 'DashLargeGap';\n case 5:\n return 'DashDot';\n case 6:\n return 'DashDotDot';\n case 7:\n return 'Double';\n case 8:\n return 'Triple';\n case 9:\n return 'ThinThickSmallGap';\n case 10:\n return 'ThickThinSmallGap';\n case 11:\n return 'ThinThickThinSmallGap';\n case 12:\n return 'ThinThickMediumGap';\n case 13:\n return 'ThickThinMediumGap';\n case 14:\n return 'ThinThickThinMediumGap';\n case 15:\n return 'ThinThickLargeGap';\n case 16:\n return 'ThickThinLargeGap';\n case 17:\n return 'ThinThickThinLargeGap';\n case 18:\n return 'SingleWavy';\n case 19:\n return 'DoubleWavy';\n case 20:\n return 'DashDotStroked';\n case 21:\n return 'Emboss3D';\n case 22:\n return 'Engrave3D';\n case 23:\n return 'Outset';\n case 24:\n return 'Inset';\n case 25:\n return 'Thick';\n case 26:\n return 'Cleared';\n default:\n return lineStyle;\n }\n };\n SfdtReader.prototype.getTextureStyle = function (textureStyle) {\n switch (textureStyle) {\n case 0:\n return 'TextureNone';\n case 1:\n return 'Texture2Pt5Percent';\n case 2:\n return 'Texture5Percent';\n case 3:\n return 'Texture7Pt5Percent';\n case 4:\n return 'Texture10Percent';\n case 5:\n return 'Texture12Pt5Percent';\n case 6:\n return 'Texture15Percent';\n case 7:\n return 'Texture17Pt5Percent';\n case 8:\n return 'Texture20Percent';\n case 9:\n return 'Texture22Pt5Percent';\n case 10:\n return 'Texture25Percent';\n case 11:\n return 'Texture27Pt5Percent';\n case 12:\n return 'Texture30Percent';\n case 13:\n return 'Texture32Pt5Percent';\n case 14:\n return 'Texture35Percent';\n case 15:\n return 'Texture37Pt5Percent';\n case 16:\n return 'Texture40Percent';\n case 17:\n return 'Texture42Pt5Percent';\n case 18:\n return 'Texture45Percent';\n case 19:\n return 'Texture47Pt5Percent';\n case 20:\n return 'Texture50Percent';\n case 21:\n return 'Texture52Pt5Percent';\n case 22:\n return 'Texture55Percent';\n case 23:\n return 'Texture57Pt5Percent';\n case 24:\n return 'Texture60Percent';\n case 25:\n return 'Texture62Pt5Percent';\n case 26:\n return 'Texture65Percent';\n case 27:\n return 'Texture67Pt5Percent';\n case 28:\n return 'Texture70Percent';\n case 29:\n return 'Texture72Pt5Percent';\n case 30:\n return 'Texture75Percent';\n case 31:\n return 'Texture77Pt5Percent';\n case 32:\n return 'Texture80Percent';\n case 33:\n return 'Texture82Pt5Percent';\n case 34:\n return 'Texture85Percent';\n case 35:\n return 'Texture87Pt5Percent';\n case 36:\n return 'Texture90Percent';\n case 37:\n return 'Texture92Pt5Percent';\n case 38:\n return 'Texture95Percent';\n case 39:\n return 'Texture97Pt5Percent';\n case 40:\n return 'TextureSolid';\n case 41:\n return 'TextureDarkHorizontal';\n case 42:\n return 'TextureDarkVertical';\n case 43:\n return 'TextureDarkDiagonalDown';\n case 44:\n return 'TextureDarkDiagonalUp';\n case 45:\n return 'TextureDarkCross';\n case 46:\n return 'TextureDarkDiagonalCross';\n case 47:\n return 'TextureHorizontal';\n case 48:\n return 'TextureVertical';\n case 49:\n return 'TextureDiagonalDown';\n case 50:\n return 'TextureDiagonalUp';\n case 51:\n return 'TextureCross';\n case 52:\n return 'TextureDiagonalCross';\n default:\n return textureStyle;\n }\n };\n SfdtReader.prototype.getHeightType = function (heightType) {\n switch (heightType) {\n case 0:\n return 'AtLeast';\n case 1:\n return 'Exactly';\n default:\n return heightType;\n }\n };\n SfdtReader.prototype.getCellVerticalAlignment = function (cellVerticalAlignment) {\n switch (cellVerticalAlignment) {\n case 0:\n return 'Top';\n case 1:\n return 'Center';\n case 2:\n return 'Bottom';\n default:\n return cellVerticalAlignment;\n }\n };\n SfdtReader.prototype.getListLevelPattern = function (listLevelPattern) {\n switch (listLevelPattern) {\n case 0:\n return 'None';\n case 1:\n // In online Ms Word, the Arabic pattern is applied for unsupported list level pattern.\n case 13:\n case 'KanjiDigit':\n return 'Arabic';\n case 2:\n return 'UpRoman';\n case 3:\n return 'LowRoman';\n case 4:\n return 'UpLetter';\n case 5:\n return 'LowLetter';\n case 6:\n return 'Ordinal';\n case 7:\n return 'Number';\n case 8:\n return 'OrdinalText';\n case 9:\n return 'LeadingZero';\n case 10:\n return 'Bullet';\n case 11:\n return 'FarEast';\n case 12:\n return 'Special';\n default:\n return listLevelPattern;\n }\n };\n SfdtReader.prototype.getFollowCharacterType = function (followCharacterType) {\n switch (followCharacterType) {\n case 0:\n return 'Tab';\n case 1:\n return 'Space';\n case 2:\n return 'None';\n default:\n return followCharacterType;\n }\n };\n SfdtReader.prototype.getStyleType = function (styleType) {\n switch (styleType) {\n case 0:\n return 'Paragraph';\n case 1:\n return 'Character';\n case 2:\n return 'Table';\n default:\n return styleType;\n }\n };\n SfdtReader.prototype.getProtectionType = function (protectionType) {\n switch (protectionType) {\n case 0:\n return 'NoProtection';\n case 1:\n return 'ReadOnly';\n case 2:\n return 'FormFieldsOnly';\n case 3:\n return 'CommentsOnly';\n case 4:\n return 'RevisionsOnly';\n default:\n return protectionType;\n }\n };\n SfdtReader.prototype.getRevisionType = function (revisionType) {\n switch (revisionType) {\n case 1:\n return 'Insertion';\n case 2:\n return 'Deletion';\n case 3:\n return 'MoveTo';\n case 4:\n return 'MoveFrom';\n default:\n return revisionType;\n }\n };\n SfdtReader.prototype.getFootnoteType = function (footnoteType) {\n switch (footnoteType) {\n case 0:\n return 'Footnote';\n case 1:\n return 'Endnote';\n default:\n return footnoteType;\n }\n };\n SfdtReader.prototype.getFootnoteRestartIndex = function (footnoteRestartIndex) {\n switch (footnoteRestartIndex) {\n case 0:\n return 'DoNotRestart';\n case 1:\n return 'RestartForEachSection';\n case 2:\n return 'RestartForEachPage';\n default:\n return footnoteRestartIndex;\n }\n };\n SfdtReader.prototype.getFootEndNoteNumberFormat = function (footEndNoteNumberFormat) {\n switch (footEndNoteNumberFormat) {\n case 0:\n return 'Arabic';\n case 1:\n return 'UpperCaseRoman';\n case 2:\n return 'LowerCaseRoman';\n case 3:\n return 'UpperCaseLetter';\n case 4:\n return 'LowerCaseLetter';\n default:\n return footEndNoteNumberFormat;\n }\n };\n SfdtReader.prototype.getBiDirectionalOverride = function (biDirectionalOverride) {\n switch (biDirectionalOverride) {\n case 0:\n return 'None';\n case 1:\n return 'LTR';\n case 2:\n return 'RTL';\n default:\n return biDirectionalOverride;\n }\n };\n SfdtReader.prototype.getBreakClearType = function (breakClearType) {\n switch (breakClearType) {\n case 0:\n return 'None';\n case 1:\n return 'Left';\n case 2:\n return 'Right';\n case 3:\n return 'All';\n default:\n return breakClearType;\n }\n };\n SfdtReader.prototype.getTextVerticalAlignment = function (textVerticalAlignment) {\n switch (textVerticalAlignment) {\n case 0:\n return 'Top';\n case 1:\n return 'Center';\n case 2:\n return 'Bottom';\n default:\n return textVerticalAlignment;\n }\n };\n SfdtReader.prototype.getShapeVerticalAlignment = function (shapeVerticalAlignment) {\n switch (shapeVerticalAlignment) {\n case 0:\n return 'None';\n case 1:\n return 'Top';\n case 2:\n return 'Center';\n case 3:\n return 'Bottom';\n case 4:\n return 'Inline';\n case 5:\n return 'Inside';\n case 6:\n return 'Outside';\n default:\n return shapeVerticalAlignment;\n }\n };\n SfdtReader.prototype.getShapeHorizontalAlignment = function (shapeHorizontalAlignment) {\n switch (shapeHorizontalAlignment) {\n case 0:\n return 'None';\n case 1:\n return 'Center';\n case 2:\n return 'Inside';\n case 3:\n return 'Left';\n case 4:\n return 'Outside';\n case 5:\n return 'Right';\n default:\n return shapeHorizontalAlignment;\n }\n };\n SfdtReader.prototype.getVerticalOrigin = function (verticalOrigin) {\n switch (verticalOrigin) {\n case 0:\n return 'Paragraph';\n case 1:\n return 'BottomMargin';\n case 2:\n return 'InsideMargin';\n case 3:\n return 'Line';\n case 4:\n return 'Margin';\n case 5:\n return 'OutsideMargin';\n case 6:\n return 'Page';\n case 7:\n return 'TopMargin';\n default:\n return verticalOrigin;\n }\n };\n SfdtReader.prototype.getHorizontalOrigin = function (horizontalOrigin) {\n switch (horizontalOrigin) {\n case 0:\n return 'Column';\n case 1:\n return 'Character';\n case 2:\n return 'InsideMargin';\n case 3:\n return 'LeftMargin';\n case 4:\n return 'Margin';\n case 5:\n return 'OutsideMargin';\n case 6:\n return 'Page';\n case 7:\n return 'RightMargin';\n default:\n return horizontalOrigin;\n }\n };\n SfdtReader.prototype.getTableVerticalRelation = function (tableRelation) {\n switch (tableRelation) {\n case 0:\n return 'Paragraph';\n case 1:\n return 'Margin';\n case 2:\n return 'Page';\n default:\n return tableRelation;\n }\n };\n SfdtReader.prototype.getTableHorizontalRelation = function (tableRelation) {\n switch (tableRelation) {\n case 0:\n return 'Column';\n case 1:\n return 'Margin';\n case 2:\n return 'Page';\n default:\n return tableRelation;\n }\n };\n SfdtReader.prototype.getTableVerticalPosition = function (tableVerticalPosition) {\n switch (tableVerticalPosition) {\n case 0:\n return 'None';\n case 1:\n return 'Top';\n case 2:\n return 'Center';\n case 3:\n return 'Bottom';\n case 4:\n return 'Inside';\n case 5:\n return 'Outside';\n default:\n return tableVerticalPosition;\n }\n };\n SfdtReader.prototype.getTableHorizontalPosition = function (tableHorizontalPosition) {\n switch (tableHorizontalPosition) {\n case 0:\n return 'Left';\n case 1:\n return 'Center';\n case 2:\n return 'Inside';\n case 3:\n return 'Outside';\n case 4:\n return 'Right';\n default:\n return tableHorizontalPosition;\n }\n };\n SfdtReader.prototype.getLineDashStyle = function (lineDashStyle) {\n switch (lineDashStyle) {\n case 0:\n return 'Solid';\n case 1:\n return 'Dash';\n case 2:\n return 'DashDot';\n case 3:\n return 'DashDotDot';\n case 4:\n return 'DashDotGEL';\n case 5:\n return 'DashGEL';\n case 6:\n return 'Dot';\n case 7:\n return 'DotGEL';\n case 8:\n return 'LongDashDotDotGEL';\n case 9:\n return 'LongDashDotGEL';\n case 10:\n return 'LongDashGEL';\n default:\n return lineDashStyle;\n }\n };\n SfdtReader.prototype.getHorizontalPositionAbs = function (horizontalPositionAbs) {\n switch (horizontalPositionAbs) {\n case 0:\n return 'Left';\n case 1:\n return 'Center';\n case 2:\n return 'Right';\n case 3:\n return 'Inside';\n case 4:\n return 'Outside';\n default:\n return horizontalPositionAbs;\n }\n };\n SfdtReader.prototype.getTabJustification = function (tabJustification) {\n switch (tabJustification) {\n case 0:\n return 'Left';\n case 1:\n return 'Bar';\n case 2:\n return 'Center';\n case 3:\n return 'Decimal';\n case 4:\n return 'List';\n case 5:\n return 'Right';\n default:\n return tabJustification;\n }\n };\n SfdtReader.prototype.getTabLeader = function (tabLeader) {\n switch (tabLeader) {\n case 0:\n return 'None';\n case 1:\n return 'Single';\n case 2:\n return 'Dot';\n case 3:\n return 'Hyphen';\n case 4:\n return 'Underscore';\n default:\n return tabLeader;\n }\n };\n SfdtReader.prototype.getTextFormFieldType = function (textFormFieldType) {\n switch (textFormFieldType) {\n case 0:\n return 'Text';\n case 1:\n return 'Number';\n case 2:\n return 'Date';\n case 3:\n return 'Calculation';\n default:\n return textFormFieldType;\n }\n };\n SfdtReader.prototype.getTextFormFieldFormat = function (textFormFieldFormat) {\n switch (textFormFieldFormat) {\n case 0:\n return 'None';\n case 1:\n return 'FirstCapital';\n case 2:\n return 'Lowercase';\n case 3:\n return 'Uppercase';\n case 4:\n return 'Titlecase';\n default:\n return textFormFieldFormat;\n }\n };\n SfdtReader.prototype.getCheckBoxSizeType = function (checkBoxSizeType) {\n switch (checkBoxSizeType) {\n case 0:\n return 'Auto';\n case 1:\n return 'Exactly';\n default:\n return checkBoxSizeType;\n }\n };\n SfdtReader.prototype.getContentControlAppearance = function (contentControlAppearance) {\n switch (contentControlAppearance) {\n case 1:\n return 'BoundingBox';\n case 2:\n return 'Hidden';\n case 3:\n return 'Tags';\n default:\n return contentControlAppearance;\n }\n };\n SfdtReader.prototype.getContentControlType = function (contentControlType) {\n switch (contentControlType) {\n case 0:\n return 'RichText';\n case 1:\n return 'BuildingBlockGallery';\n case 2:\n return 'CheckBox';\n case 3:\n return 'ComboBox';\n case 4:\n return 'Date';\n case 5:\n return 'DropDownList';\n case 6:\n return 'Group';\n case 7:\n return 'Picture';\n case 8:\n return 'RepeatingSection';\n case 9:\n return 'Text';\n default:\n return contentControlType;\n }\n };\n SfdtReader.prototype.getDateCalendarType = function (dateCalendarType) {\n switch (dateCalendarType) {\n case 0:\n return 'Gregorian';\n case 1:\n return 'GregorianArabic';\n case 2:\n return 'GregorianEnglish';\n case 3:\n return 'GregorianMiddleEastFrench';\n case 4:\n return 'GregorianTransliteratedEnglish';\n case 5:\n return 'GregorianTransliteratedFrench';\n case 6:\n return 'Hebrew';\n case 7:\n return 'Hijri';\n case 8:\n return 'Japan';\n case 9:\n return 'Korean';\n case 10:\n return 'Saka';\n case 11:\n return 'Taiwan';\n case 12:\n return 'Thai';\n default:\n return dateCalendarType;\n }\n };\n SfdtReader.prototype.getDateStorageFormat = function (dateStorageFormat) {\n switch (dateStorageFormat) {\n case 1:\n return 'DateStorageDate';\n case 2:\n return 'DateStorageDateTime';\n case 3:\n return 'DateStorageText';\n default:\n return dateStorageFormat;\n }\n };\n SfdtReader.prototype.getTextWrappingStyle = function (textWrappingStyle) {\n switch (textWrappingStyle) {\n case 0:\n return 'Inline';\n case 1:\n return 'InFrontOfText';\n case 2:\n return 'Square';\n case 3:\n return 'TopAndBottom';\n case 4:\n return 'Behind';\n default:\n return textWrappingStyle;\n }\n };\n SfdtReader.prototype.getTextWrappingType = function (textWrappingType) {\n switch (textWrappingType) {\n case 0:\n return 'Both';\n case 1:\n return 'Left';\n case 2:\n return 'Right';\n case 3:\n return 'Largest';\n default:\n return textWrappingType;\n }\n };\n SfdtReader.prototype.getCompatibilityMode = function (compatibilityMode) {\n switch (compatibilityMode) {\n case 0:\n return 'Word2013';\n case 1:\n return 'Word2003';\n case 2:\n return 'Word2007';\n case 3:\n return 'Word2010';\n default:\n return compatibilityMode;\n }\n };\n SfdtReader.prototype.getLineFormatType = function (lineFormatType) {\n switch (lineFormatType) {\n case 0:\n return 'Solid';\n case 1:\n return 'Patterned';\n case 2:\n return 'Gradient';\n case 3:\n return 'None';\n default:\n return lineFormatType;\n }\n };\n SfdtReader.prototype.getAutoShapeType = function (autoShapeType) {\n switch (autoShapeType) {\n case 1:\n return 'Rectangle';\n case 2:\n return 'RoundedRectangle';\n case 3:\n return 'StraightConnector';\n default:\n return autoShapeType;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n SfdtReader.prototype.destroy = function () {\n if (this.footnotes) {\n this.footnotes.destroy();\n }\n this.footnotes = undefined;\n if (this.endnotes) {\n this.endnotes.destroy();\n }\n this.endnotes = undefined;\n if (this.editableRanges) {\n this.editableRanges.destroy();\n }\n this.editableRanges = undefined;\n if (this.commentEnds) {\n this.commentEnds.destroy();\n }\n this.commentEnds = undefined;\n if (this.commentStarts) {\n this.commentStarts.destroy();\n }\n this.commentStarts = undefined;\n if (this.commentsCollection) {\n this.commentsCollection.destroy();\n }\n this.commentsCollection = undefined;\n if (this.revisionCollection) {\n this.revisionCollection.destroy();\n }\n this.revisionCollection = undefined;\n this.documentHelper = undefined;\n this.keywordIndex = undefined;\n };\n return SfdtReader;\n}());\nexport { SfdtReader };\n","import { FontScriptType } from '../../base/types';\nimport { WShading } from '../format/index';\nimport { HelperMethods } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\n/* eslint-disable */\n/**\n * Selection character format implementation\n */\nvar SelectionCharacterFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionCharacterFormat(selection) {\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.fontSizeIn = 0;\n this.scriptType = FontScriptType.English;\n this.fontColorIn = undefined;\n this.allCapsIn = undefined;\n /**\n * @private\n */\n this.boldBidi = undefined;\n /**\n * @private\n */\n this.italicBidi = undefined;\n /**\n * @private\n */\n this.fontSizeBidi = 0;\n /**\n * @private\n */\n this.bidi = undefined;\n /**\n * @private\n */\n this.bdo = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontSize\", {\n /**\n * Gets the font size of selected contents.\n *\n * @aspType int\n */\n get: function () {\n return this.fontSizeIn;\n },\n /**\n * Sets the font size of selected contents.\n *\n * @aspType int\n */\n set: function (value) {\n if (value === this.fontSizeIn) {\n return;\n }\n this.fontSizeIn = value;\n this.notifyPropertyChanged('fontSize');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"renderedFontFamily\", {\n get: function () {\n return this.renderedFontFamilyIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontFamily\", {\n /**\n * Gets or sets the font family of selected contents.\n *\n * @aspType string\n */\n get: function () {\n return this.fontFamilyIn;\n },\n /**\n * Sets the font family of selected contents.\n *\n * @aspType string\n */\n set: function (value) {\n if (value === this.fontFamilyIn) {\n return;\n }\n this.fontFamilyIn = this.renderedFontFamilyIn = value;\n this.notifyPropertyChanged('fontFamily');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"fontColor\", {\n /**\n * Gets or sets the font color of selected contents.\n *\n * @aspType string\n */\n get: function () {\n return this.fontColorIn;\n },\n /**\n * Sets the font color of selected contents.\n *\n * @aspType string\n */\n set: function (value) {\n if (value === this.fontColorIn) {\n return;\n }\n this.fontColorIn = value;\n this.notifyPropertyChanged('fontColor');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"bold\", {\n /**\n * Gets or sets the bold formatting of selected contents.\n *\n * @aspType bool\n */\n get: function () {\n return this.boldIn;\n },\n /**\n * Sets the bold formatting of selected contents.\n *\n * @aspType bool\n */\n set: function (value) {\n if (value === this.boldIn) {\n return;\n }\n this.boldIn = value;\n this.notifyPropertyChanged('bold');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"italic\", {\n /**\n * Gets or sets the italic formatting of selected contents.\n *\n * @aspType bool\n */\n get: function () {\n return this.italicIn;\n },\n /**\n * Sets the italic formatting of selected contents.\n *\n * @aspType bool\n */\n set: function (value) {\n if (value === this.italic) {\n return;\n }\n this.italicIn = value;\n this.notifyPropertyChanged('italic');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"strikethrough\", {\n /**\n * Gets or sets the strikethrough property of selected contents.\n */\n get: function () {\n return this.strikeThroughIn;\n },\n /**\n * Sets the strikethrough property of selected contents.\n */\n set: function (value) {\n if (value === this.strikeThroughIn) {\n return;\n }\n this.strikeThroughIn = value;\n this.notifyPropertyChanged('strikethrough');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"baselineAlignment\", {\n /**\n * Gets or sets the baseline alignment property of selected contents.\n */\n get: function () {\n return this.baselineAlignmentIn;\n },\n /**\n * Sets the baseline alignment property of selected contents.\n */\n set: function (value) {\n if (value === this.baselineAlignmentIn) {\n return;\n }\n this.baselineAlignmentIn = value;\n this.notifyPropertyChanged('baselineAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"underline\", {\n /**\n * Gets or sets the underline style of selected contents.\n */\n get: function () {\n return this.underlineIn;\n },\n /**\n * Sets the underline style of selected contents.\n */\n set: function (value) {\n if (value === this.underlineIn) {\n return;\n }\n this.underlineIn = value;\n this.notifyPropertyChanged('underline');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"highlightColor\", {\n /**\n * Gets or sets the highlight color of selected contents.\n */\n get: function () {\n return this.highlightColorIn;\n },\n /**\n * Sets the highlight color of selected contents.\n */\n set: function (value) {\n if (value === this.highlightColorIn && value !== \"NoColor\") {\n return;\n }\n this.highlightColorIn = value;\n this.notifyPropertyChanged('highlightColor');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCharacterFormat.prototype, \"allCaps\", {\n /**\n * Gets or sets the allCaps formatting of selected contents.\n *\n * @aspType bool\n */\n get: function () {\n return this.allCapsIn;\n },\n /**\n * Sets the allCaps formatting of selected contents.\n *\n * @aspType bool\n */\n set: function (value) {\n if (value === this.allCapsIn) {\n return;\n }\n this.allCapsIn = value;\n this.notifyPropertyChanged('allCaps');\n },\n enumerable: true,\n configurable: true\n });\n SelectionCharacterFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'bold':\n return this.bold;\n case 'italic':\n return this.italic;\n case 'fontSize':\n if (this.fontSize >= 1) {\n return this.fontSize;\n }\n return undefined;\n case 'fontFamily':\n return this.fontFamily;\n case 'strikethrough':\n return this.strikethrough;\n case 'baselineAlignment':\n return this.baselineAlignment;\n case 'highlightColor':\n return this.highlightColor;\n case 'underline':\n return this.underline;\n case 'fontColor':\n return this.fontColor;\n case 'allCaps':\n return this.allCaps;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever property gets changed.\n *\n * @param {string} propertyName\n */\n SelectionCharacterFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared || (this.selection.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) ||\n !this.selection.owner.isDocumentLoaded || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var propertyValue = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(propertyValue)) {\n this.selection.owner.editorModule.onApplyCharacterFormat(propertyName, propertyValue);\n }\n }\n };\n /**\n * Copies the source format.\n *\n * @param {WCharacterFormat} format\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.copyFormat = function (format, renderFontFamily) {\n this.styleName = !isNullOrUndefined(format.baseCharStyle) ? format.baseCharStyle.name : 'Default Paragraph Font';\n this.fontSize = format.fontSize;\n this.renderedFontFamilyIn = renderFontFamily;\n this.fontFamily = format.fontFamily;\n this.bold = format.bold;\n this.italic = format.italic;\n this.baselineAlignment = format.baselineAlignment;\n this.underline = format.underline;\n this.fontColor = format.fontColor;\n this.highlightColor = format.highlightColor;\n this.strikethrough = format.strikethrough;\n this.bidi = format.bidi;\n this.bdo = format.bdo;\n this.boldBidi = format.boldBidi;\n this.italicBidi = format.italicBidi;\n this.fontFamilyBidi = format.fontFamilyBidi;\n this.fontSizeBidi = format.fontSizeBidi;\n this.allCaps = format.allCaps;\n };\n /**\n * Combines the format.\n *\n * @param {WCharacterFormat} format\n * @private\n */\n SelectionCharacterFormat.prototype.combineFormat = function (format, renderFontFamily) {\n if (!isNullOrUndefined(this.bold) && this.bold !== format.bold) {\n this.bold = undefined;\n }\n if (!isNullOrUndefined(this.italic) && this.italic !== format.italic) {\n this.italic = undefined;\n }\n if (this.fontSize !== 0 && this.fontSize !== format.fontSize) {\n this.fontSize = 0;\n }\n if (!isNullOrUndefined(this.renderedFontFamily) && this.renderedFontFamily !== renderFontFamily) {\n this.renderedFontFamilyIn = undefined;\n }\n if (!isNullOrUndefined(this.fontFamily) && this.fontFamily !== format.fontFamily) {\n this.fontFamily = undefined;\n }\n if (!isNullOrUndefined(this.highlightColor) && this.highlightColor !== format.highlightColor) {\n this.highlightColor = undefined;\n }\n if (!isNullOrUndefined(this.baselineAlignment) && this.baselineAlignment !== format.baselineAlignment) {\n this.baselineAlignment = undefined;\n }\n if (!isNullOrUndefined(this.fontColor) && (this.fontColor !== format.fontColor)) {\n this.fontColor = undefined;\n }\n if (!isNullOrUndefined(this.underline) && this.underline !== format.underline) {\n this.underline = undefined;\n }\n if (!isNullOrUndefined(this.strikethrough) && this.strikethrough !== format.strikethrough) {\n this.strikethrough = undefined;\n }\n if (!isNullOrUndefined(this.boldBidi) && this.boldBidi !== format.boldBidi) {\n this.boldBidi = undefined;\n }\n if (!isNullOrUndefined(this.italicBidi) && this.italicBidi !== format.italicBidi) {\n this.italicBidi = undefined;\n }\n if (this.fontSizeBidi !== 0 && this.fontSizeBidi !== format.fontSizeBidi) {\n this.fontSizeBidi = 0;\n }\n if (!isNullOrUndefined(this.fontFamilyBidi) && this.fontFamilyBidi !== format.fontFamilyBidi) {\n this.fontFamilyBidi = undefined;\n }\n if (!isNullOrUndefined(this.bidi) && this.bidi !== format.bidi) {\n this.bidi = undefined;\n }\n if (!isNullOrUndefined(this.bdo) && this.bdo !== format.bdo) {\n this.bdo = undefined;\n }\n if (!isNullOrUndefined(this.allCaps) && this.allCaps !== format.allCaps) {\n this.allCaps = undefined;\n }\n };\n /**\n * @private\n */\n SelectionCharacterFormat.prototype.canRetrieveNextCharacterFormat = function () {\n if (isNullOrUndefined(this.bold) && isNullOrUndefined(this.italic) && this.fontSize === 0 && isNullOrUndefined(this.fontFamily) && isNullOrUndefined(this.highlightColor)\n && isNullOrUndefined(this.baselineAlignment) && isNullOrUndefined(this.fontColor) && isNullOrUndefined(this.underline) && isNullOrUndefined(this.strikethrough) && isNullOrUndefined(this.boldBidi)\n && isNullOrUndefined(this.italicBidi) && this.fontSizeBidi === 0 && isNullOrUndefined(this.fontFamilyBidi) && isNullOrUndefined(this.bdo) && isNullOrUndefined(this.allCaps)) {\n return false;\n }\n return true;\n };\n /**\n * Clones the format.\n *\n * @param {SelectionCharacterFormat} selectionCharacterFormat\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.cloneFormat = function (selectionCharacterFormat) {\n this.bold = selectionCharacterFormat.bold;\n this.italic = selectionCharacterFormat.italic;\n this.underline = selectionCharacterFormat.underline;\n this.strikethrough = selectionCharacterFormat.strikethrough;\n this.baselineAlignment = selectionCharacterFormat.baselineAlignment;\n this.highlightColor = selectionCharacterFormat.highlightColor;\n this.fontSize = selectionCharacterFormat.fontSize;\n this.fontFamily = selectionCharacterFormat.fontFamily;\n this.fontColor = selectionCharacterFormat.fontColor;\n this.styleName = selectionCharacterFormat.styleName;\n this.bidi = selectionCharacterFormat.bidi;\n this.bdo = selectionCharacterFormat.bdo;\n this.boldBidi = selectionCharacterFormat.boldBidi;\n this.italicBidi = selectionCharacterFormat.italicBidi;\n this.fontSizeBidi = selectionCharacterFormat.fontSizeBidi;\n this.fontFamilyBidi = selectionCharacterFormat.fontFamilyBidi;\n this.allCaps = selectionCharacterFormat.allCaps;\n };\n /**\n * Checks whether current format is equal to the source format or not.\n *\n * @param {SelectionCharacterFormat} format\n * @returns boolean\n * @private\n */\n SelectionCharacterFormat.prototype.isEqualFormat = function (format) {\n return (this.fontSize === format.fontSize\n && this.strikethrough === format.strikethrough\n && this.bold === format.bold\n && this.fontFamily === format.fontFamily\n && this.underline === format.underline\n && this.highlightColor === format.highlightColor\n && this.italic === format.italic\n && this.baselineAlignment === format.baselineAlignment\n && this.fontColor === format.fontColor\n && this.allCaps === format.allCaps);\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.clearFormat = function () {\n this.fontSizeIn = 0;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.highlightColorIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.styleName = undefined;\n this.bidi = undefined;\n this.bdo = undefined;\n this.boldBidi = undefined;\n this.italicBidi = undefined;\n this.fontFamilyBidi = undefined;\n this.fontSizeBidi = undefined;\n this.allCapsIn = undefined;\n };\n /**\n * Destroys the maintained resources.\n *\n * @returns {void}\n * @private\n */\n SelectionCharacterFormat.prototype.destroy = function () {\n this.fontSizeIn = undefined;\n this.boldIn = undefined;\n this.italicIn = undefined;\n this.fontFamilyIn = undefined;\n this.fontColorIn = undefined;\n this.underlineIn = undefined;\n this.strikeThroughIn = undefined;\n this.baselineAlignmentIn = undefined;\n this.highlightColorIn = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n this.bidi = undefined;\n this.bdo = undefined;\n this.boldBidi = undefined;\n this.italicBidi = undefined;\n this.fontFamilyBidi = undefined;\n this.fontSizeBidi = undefined;\n this.allCapsIn = undefined;\n };\n return SelectionCharacterFormat;\n}());\nexport { SelectionCharacterFormat };\n/**\n * Selection Border implementation\n */\nvar SelectionBorder = /** @class */ (function () {\n /**\n * @param SelectionBorders\n * @private\n */\n function SelectionBorder(selection, borderType, node) {\n this.colorIn = undefined;\n this.lineStyleIn = undefined;\n this.lineWidthIn = undefined;\n this.shadowIn = undefined;\n this.spaceIn = undefined;\n this.borderType = borderType;\n this.ownerBase = node;\n this.selection = selection;\n }\n Object.defineProperty(SelectionBorder.prototype, \"color\", {\n /**\n * Gets or sets the color for selected paragraph borders.\n *\n * @default undefined\n * @aspType string\n */\n get: function () {\n return this.colorIn;\n },\n /**\n * Sets the color for selected paragraph borders.\n *\n * @default undefined\n * @aspType string\n */\n set: function (value) {\n if (value === this.colorIn) {\n return;\n }\n this.colorIn = value;\n this.notifyPropertyChanged(\"color\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"lineStyle\", {\n /**\n * Gets or sets the lineStyle for selected paragraph borders.\n *\n * @default undefined\n * @aspType LineStyle\n */\n get: function () {\n return this.lineStyleIn;\n },\n /**\n * Sets the lineStyle for selected paragraph borders.\n *\n * @default undefined\n * @aspType LineStyle\n */\n set: function (value) {\n if (value === this.lineStyleIn) {\n return;\n }\n this.lineStyleIn = value;\n this.notifyPropertyChanged(\"lineStyle\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"lineWidth\", {\n /**\n * Gets or sets the lineWidth for selected paragraph borders.\n *\n * @default undefined\n * @aspType number\n */\n get: function () {\n return this.lineWidthIn;\n },\n /**\n * Sets the lineWidth for selected paragraphs borders.\n *\n * @default undefined\n * @aspType number\n */\n set: function (value) {\n if (value === this.lineWidthIn) {\n return;\n }\n this.lineWidthIn = value;\n this.notifyPropertyChanged(\"lineWidth\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"shadow\", {\n /**\n * Gets or sets the shadow for selected paragraph borders.\n *\n * @default undefined\n * @aspType boolean\n */\n get: function () {\n return this.shadowIn;\n },\n /**\n * Sets the shadow for selected paragraphs borders.\n *\n * @default undefined\n * @aspType boolean\n */\n set: function (value) {\n if (value === this.shadowIn) {\n return;\n }\n this.shadowIn = value;\n this.notifyPropertyChanged(\"shadow\");\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorder.prototype, \"space\", {\n /**\n * Gets or sets the space for selected paragraphs borders.\n *\n * @default undefined\n * @aspType number\n */\n get: function () {\n return this.spaceIn;\n },\n /**\n * Sets the space for selected paragraphs borders.\n *\n * @default undefined\n * @aspType number\n */\n set: function (value) {\n if (value === this.spaceIn) {\n return;\n }\n this.spaceIn = value;\n this.notifyPropertyChanged('space');\n },\n enumerable: true,\n configurable: true\n });\n /**\n *Copies the format.\n *\n * @param {WBorder} border\n * @returns {void}\n * @private\n */\n SelectionBorder.prototype.copyFormat = function (border) {\n this.color = border.color;\n this.lineStyle = border.lineStyle;\n this.lineWidth = border.lineWidth;\n this.shadow = border.shadow;\n this.space = border.space;\n };\n /**\n * Combines the format.\n *\n * @param {WBorder} border\n * @returns {void}\n * @private\n */\n SelectionBorder.prototype.combineFormat = function (border) {\n if (!isNullOrUndefined(this.color) && this.color !== border.color) {\n this.color = undefined;\n }\n if (!isNullOrUndefined(this.lineStyle) && this.lineStyle !== border.lineStyle) {\n this.lineStyle = undefined;\n }\n if (!isNullOrUndefined(this.lineWidth) && this.lineWidth !== border.lineWidth) {\n this.lineWidth = undefined;\n }\n if (!isNullOrUndefined(this.shadow) && this.shadow !== border.shadow) {\n this.shadow = undefined;\n }\n if (!isNullOrUndefined(this.space) && this.space !== border.space) {\n this.space = undefined;\n }\n };\n SelectionBorder.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'color':\n return this.color;\n case 'lineStyle':\n return this.lineStyle;\n case 'lineWidth':\n return this.lineWidth;\n case 'space':\n return this.space;\n case 'shadow':\n return this.shadow;\n }\n return undefined;\n };\n /**\n * Notifies whenever the property gets changed.\n * @param {string} propertyName\n * @returns {void}\n */\n SelectionBorder.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) &&\n ((this.selection.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.selection.owner.isDocumentLoaded)\n && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var editor = this.selection.owner.editorModule;\n var propertyValue = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(propertyValue)) {\n editor.applyParagraphBorders(propertyName, this.borderType, propertyValue);\n }\n }\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionBorder.prototype.destroy = function () {\n if (!isNullOrUndefined(this.colorIn)) {\n this.colorIn = undefined;\n }\n if (!isNullOrUndefined(this.lineStyleIn)) {\n this.lineStyleIn = undefined;\n }\n if (!isNullOrUndefined(this.lineWidthIn)) {\n this.lineWidthIn = undefined;\n }\n if (!isNullOrUndefined(this.spaceIn)) {\n this.spaceIn = undefined;\n }\n if (!isNullOrUndefined(this.shadowIn)) {\n this.shadowIn = undefined;\n }\n };\n return SelectionBorder;\n}());\nexport { SelectionBorder };\n/**\n * Selection Borders implementation\n */\nvar SelectionBorders = /** @class */ (function () {\n /**\n * @param Object\n * @private\n */\n function SelectionBorders(selection, node) {\n this.ownerBase = undefined;\n this.ownerBase = node;\n this.selection = selection;\n this.topIn = new SelectionBorder(this.selection, 'topBorder', this);\n this.bottomIn = new SelectionBorder(this.selection, 'bottomBorder', this);\n this.rightIn = new SelectionBorder(this.selection, 'rightBorder', this);\n this.leftIn = new SelectionBorder(this.selection, 'leftBorder', this);\n this.horizontalIn = new SelectionBorder(this.selection, 'horizontalBorder', this);\n this.verticalIn = new SelectionBorder(this.selection, 'verticalBorder', this);\n }\n Object.defineProperty(SelectionBorders.prototype, \"top\", {\n /**\n * Gets the top Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.topIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"bottom\", {\n /**\n * Gets the bottom Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.bottomIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"left\", {\n /**\n * Gets the left Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.leftIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"right\", {\n /**\n * Gets the right Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.rightIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"horizontal\", {\n /**\n * Gets the horizontal Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.horizontalIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionBorders.prototype, \"vertical\", {\n /**\n * Gets the vertical Border for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorder\n */\n get: function () {\n return this.verticalIn;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Copies the format.\n *\n * @param {WBorders} borders\n * @returns {void}\n * @private\n */\n SelectionBorders.prototype.copyFormat = function (borders) {\n this.top.copyFormat(borders.top);\n this.bottom.copyFormat(borders.bottom);\n this.left.copyFormat(borders.left);\n this.right.copyFormat(borders.right);\n this.horizontal.copyFormat(borders.horizontal);\n this.vertical.copyFormat(borders.vertical);\n };\n /**\n * Combines the format.\n *\n * @param {WBorders} borders\n * @private\n */\n SelectionBorders.prototype.combineFormat = function (borders) {\n this.top.combineFormat(borders.top);\n this.bottom.combineFormat(borders.bottom);\n this.left.combineFormat(borders.left);\n this.right.combineFormat(borders.right);\n this.vertical.combineFormat(borders.vertical);\n this.horizontal.combineFormat(borders.horizontal);\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionBorders.prototype.destroy = function () {\n if (!isNullOrUndefined(this.topIn)) {\n this.topIn.destroy();\n this.topIn = undefined;\n }\n if (!isNullOrUndefined(this.topIn)) {\n this.bottomIn.destroy();\n this.bottomIn = undefined;\n }\n if (!isNullOrUndefined(this.leftIn)) {\n this.leftIn.destroy();\n this.leftIn = undefined;\n }\n if (!isNullOrUndefined(this.rightIn)) {\n this.rightIn.destroy();\n this.rightIn = undefined;\n }\n if (!isNullOrUndefined(this.horizontalIn)) {\n this.horizontalIn.destroy();\n this.horizontalIn = undefined;\n }\n if (!isNullOrUndefined(this.verticalIn)) {\n this.verticalIn.destroy();\n this.verticalIn = undefined;\n }\n };\n return SelectionBorders;\n}());\nexport { SelectionBorders };\n/**\n * Selection paragraph format implementation\n */\nvar SelectionParagraphFormat = /** @class */ (function () {\n /**\n * @param selection\n * @param documentHelper\n * @private\n */\n function SelectionParagraphFormat(selection, documentHelper) {\n // Declaring the character format properties.\n this.leftIndentIn = 0;\n this.rightIndentIn = 0;\n this.beforeSpacingIn = 0;\n this.afterSpacingIn = 0;\n this.spaceAfterAutoIn = undefined;\n this.spaceBeforeAutoIn = undefined;\n this.textAlignmentIn = undefined;\n this.outlineLevelIn = undefined;\n this.firstLineIndentIn = 0;\n this.lineSpacingIn = 1;\n this.lineSpacingTypeIn = undefined;\n this.bidiIn = undefined;\n this.keepWithNextIn = undefined;\n this.keepLinesTogetherIn = undefined;\n this.widowControlIn = undefined;\n this.contextualSpacingIn = undefined;\n this.listLevelNumberIn = -1;\n this.selection = selection;\n this.documentHelper = documentHelper;\n this.bordersIn = new SelectionBorders(this.selection, this);\n }\n Object.defineProperty(SelectionParagraphFormat.prototype, \"borders\", {\n /**\n * Gets the borders for selected paragraphs.\n *\n * @default undefined\n * @aspType SelectionBorders\n */\n get: function () {\n return this.bordersIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.leftIndentIn;\n },\n /**\n * Sets the left indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"rightIndent\", {\n /**\n * Gets or Sets the right indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.rightIndentIn;\n },\n /**\n * Sets the right indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.rightIndentIn) {\n return;\n }\n this.rightIndentIn = value;\n this.notifyPropertyChanged('rightIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"firstLineIndent\", {\n /**\n * Gets or Sets the first line indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.firstLineIndentIn;\n },\n /**\n * Sets the first line indent for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.firstLineIndentIn) {\n return;\n }\n this.firstLineIndentIn = value;\n this.notifyPropertyChanged('firstLineIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"textAlignment\", {\n /**\n * Gets or Sets the text alignment for selected paragraphs.\n *\n * @default undefined\n */\n get: function () {\n return this.textAlignmentIn;\n },\n /**\n * Sets the text alignment for selected paragraphs.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.textAlignmentIn) {\n return;\n }\n this.textAlignmentIn = value;\n this.notifyPropertyChanged('textAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"outlineLevel\", {\n /**\n * Gets or Sets the outline level for selected paragraphs.\n *\n * @default undefined\n */\n get: function () {\n return this.outlineLevelIn;\n },\n /**\n * Sets the outline level for selected paragraphs.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.outlineLevelIn) {\n return;\n }\n this.outlineLevelIn = value;\n this.notifyPropertyChanged('outlineLevel');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"afterSpacing\", {\n /**\n * Sets the after spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.afterSpacingIn;\n },\n /**\n * Gets or Sets the after spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.afterSpacingIn) {\n return;\n }\n this.afterSpacingIn = value;\n this.notifyPropertyChanged('afterSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"beforeSpacing\", {\n /**\n * Gets or Sets the before spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.beforeSpacingIn;\n },\n /**\n * Sets the before spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.beforeSpacingIn) {\n return;\n }\n this.beforeSpacingIn = value;\n this.notifyPropertyChanged('beforeSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"spaceAfterAuto\", {\n /**\n * Gets or Sets the space after auto for selected paragraphs.\n *\n * @default false\n * @aspType bool\n */\n get: function () {\n return this.spaceAfterAutoIn;\n },\n /**\n * Sets the space after auto for selected paragraphs.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n if (value === this.spaceAfterAutoIn) {\n return;\n }\n this.spaceAfterAutoIn = value;\n this.notifyPropertyChanged('spaceAfterAuto');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"spaceBeforeAuto\", {\n /**\n * Gets or Sets the space before auto for selected paragraphs.\n *\n * @default false\n * @aspType bool\n */\n get: function () {\n return this.spaceBeforeAutoIn;\n },\n /**\n * Sets the space before auto for selected paragraphs.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n if (value === this.spaceBeforeAutoIn) {\n return;\n }\n this.spaceBeforeAutoIn = value;\n this.notifyPropertyChanged('spaceBeforeAuto');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacing\", {\n /**\n * Gets or Sets the line spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.lineSpacingIn;\n },\n /**\n * Sets the line spacing for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.lineSpacingIn) {\n return;\n }\n this.lineSpacingIn = value;\n this.notifyPropertyChanged('lineSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"lineSpacingType\", {\n /**\n * Gets or Sets the line spacing type for selected paragraphs.\n *\n * @default undefined\n */\n get: function () {\n return this.lineSpacingTypeIn;\n },\n /**\n * Gets or Sets the line spacing type for selected paragraphs.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.lineSpacingTypeIn) {\n return;\n }\n this.lineSpacingTypeIn = value;\n this.notifyPropertyChanged('lineSpacingType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listLevelNumber\", {\n /**\n * Sets the list level number for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.listLevelNumberIn;\n },\n /**\n * Gets or Sets the list level number for selected paragraphs.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.listLevelNumberIn) {\n return;\n }\n this.listLevelNumberIn = value;\n this.notifyPropertyChanged('listLevelNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"bidi\", {\n /**\n * Gets or Sets the bidirectional property for selected paragraphs\n *\n * @aspType bool\n */\n get: function () {\n return this.bidiIn;\n },\n /**\n * Sets the bidirectional property for selected paragraphs\n *\n * @aspType bool\n */\n set: function (value) {\n this.bidiIn = value;\n this.notifyPropertyChanged('bidi');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"keepWithNext\", {\n /**\n * Gets or sets a value indicating whether the specified paragraph remains on the same page as the paragraph that follows it while paginating the document.\n *\n * @default false\n * @aspType bool\n * @returns {boolean} - `true` if the specified paragraph remains on the same page as the paragraph that follows it; otherwise, `false`.\n */\n get: function () {\n return this.keepWithNextIn;\n },\n /**\n * Sets a value indicating whether the specified paragraph remains on the same page as the paragraph that follows it while paginating the document.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n this.keepWithNextIn = value;\n this.notifyPropertyChanged('keepWithNext');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"keepLinesTogether\", {\n /**\n * Gets or sets a value indicating whether all lines in the specified paragraphs remain on the same page while paginating the document.\n *\n * @default false\n * @aspType bool\n * @returns {boolean} - `true` if all lines in the specified paragraphs remain on the same page; otherwise, `false`.\n */\n get: function () {\n return this.keepLinesTogetherIn;\n },\n /**\n * Sets a value indicating whether all lines in the specified paragraphs remain on the same page while paginating the document.\n *\n * @aspType bool\n * @blazorType bool\n */\n set: function (value) {\n this.keepLinesTogetherIn = value;\n this.notifyPropertyChanged('keepLinesTogether');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"widowControl\", {\n /**\n * Gets or sets a value indicating whether the first and last lines of the paragraph are to remain on the same page as the rest of the paragraph when paginating the document.\n *\n * @default true\n * @aspType bool\n * @returns {boolean} - `true` if the first and last lines of the paragraph are to remain on the same page; otherwise, `false`.\n */\n get: function () {\n return this.widowControlIn;\n },\n /**\n * Sets a value indicating whether the first and last lines of the paragraph are to remain on the same page as the rest of the paragraph when paginating the document.\n *\n * @default true\n * @aspType bool\n */\n set: function (value) {\n this.widowControlIn = value;\n this.notifyPropertyChanged('widowControl');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionParagraphFormat.prototype, \"contextualSpacing\", {\n /**\n * Gets or sets a value indicating whether to add space between the paragraphs of same style.\n *\n * @aspType bool\n */\n get: function () {\n return this.contextualSpacingIn;\n },\n /**\n * Sets a value indicating whether to add space between the paragraphs of same style.\n *\n * @aspType bool\n */\n set: function (value) {\n this.contextualSpacingIn = value;\n this.notifyPropertyChanged('contextualSpacing');\n },\n enumerable: true,\n configurable: true\n });\n SelectionParagraphFormat.prototype.validateLineSpacing = function () {\n if (this.lineSpacingType !== 'Multiple' && this.lineSpacingIn < 12) {\n return true;\n }\n return false;\n };\n Object.defineProperty(SelectionParagraphFormat.prototype, \"listText\", {\n /**\n * Gets the list text for selected paragraphs.\n *\n * @aspType string\n */\n get: function () {\n var listFormat = undefined;\n var list = this.documentHelper.getListById(this.listId);\n if (list instanceof WList && this.listLevelNumberIn > -1 && this.listLevelNumberIn < 9) {\n var listLevel = list.getListLevel(this.listLevelNumber);\n if (listLevel instanceof WListLevel) {\n if (listLevel.listLevelPattern === 'Bullet') {\n listFormat = listLevel.numberFormat;\n }\n else {\n listFormat = listLevel.numberFormat;\n for (var i = 0; i < 9; i++) {\n var levelPattern = '%' + (i + 1);\n if (listFormat.indexOf(levelPattern) > -1) {\n var level = i === this.listLevelNumberIn ? listLevel : list.getListLevel(i);\n var listTextElement = this.selection.getListTextElementBox(this.selection.start.paragraph);\n var listText = listTextElement ? listTextElement.text : '';\n listFormat = listText;\n }\n }\n }\n }\n }\n return listFormat;\n },\n enumerable: true,\n configurable: true\n });\n SelectionParagraphFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'leftIndent':\n return this.leftIndent;\n case 'rightIndent':\n return this.rightIndent;\n case 'firstLineIndent':\n return this.firstLineIndent;\n case 'beforeSpacing':\n return this.beforeSpacing;\n case 'afterSpacing':\n return this.afterSpacing;\n case 'spaceAfterAuto':\n return this.spaceAfterAuto;\n case 'spaceBeforeAuto':\n return this.spaceBeforeAuto;\n case 'textAlignment':\n return this.textAlignment;\n case 'lineSpacing':\n return this.lineSpacing;\n case 'lineSpacingType':\n return this.lineSpacingType;\n case 'bidi':\n return this.bidi;\n case 'contextualSpacing':\n return this.contextualSpacing;\n case 'keepWithNext':\n return this.keepWithNext;\n case 'keepLinesTogether':\n return this.keepLinesTogether;\n case 'widowControl':\n return this.widowControl;\n case 'outlineLevel':\n return this.outlineLevel;\n default:\n return undefined;\n }\n };\n /**\n * Notifies whenever the property gets changed.\n *\n * @param {string} propertyName\n */\n SelectionParagraphFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) &&\n ((this.selection.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.selection.owner.isDocumentLoaded)\n && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var editorModule = this.selection.owner.editorModule;\n if (propertyName === 'lineSpacing' || propertyName === 'lineSpacingType') {\n var editorHistory = this.selection.owner.editorHistoryModule;\n if (!(editorHistory && (editorHistory.isUndoing || editorHistory.isRedoing)) && this.validateLineSpacing()) {\n this.selection.owner.editorHistoryModule.initComplexHistory(this.selection, 'LineSpacing');\n if (propertyName === 'lineSpacing') {\n this.lineSpacingTypeIn = 'Multiple';\n var value_1 = this.getPropertyValue('lineSpacingType');\n editorModule.onApplyParagraphFormat('lineSpacingType', value_1, false, false);\n editorModule.onApplyParagraphFormat(propertyName, this.getPropertyValue(propertyName), false, false);\n }\n else {\n editorModule.onApplyParagraphFormat(propertyName, this.getPropertyValue(propertyName), false, false);\n this.lineSpacingIn = 12;\n editorModule.onApplyParagraphFormat('lineSpacing', this.getPropertyValue('lineSpacing'), false, false);\n }\n this.selection.owner.editorHistoryModule.updateComplexHistory();\n return;\n }\n }\n var value = this.getPropertyValue(propertyName);\n if ((propertyName === 'leftIndent' || propertyName === 'rightIndent' || propertyName === 'firstLineIndent')\n && !(value >= -1056 && value < 1056)) {\n return;\n }\n if (propertyName === 'listLevelNumber') {\n editorModule.onApplyListInternal(this.documentHelper.getListById(this.listId), this.listLevelNumber);\n }\n else {\n editorModule.onApplyParagraphFormat(propertyName, value, propertyName === 'textAlignment' ? true : false, false);\n }\n }\n };\n /**\n * Copies the format.\n *\n * @param {WParagraphFormat} format\n * @returns {void}\n * @private\n */\n SelectionParagraphFormat.prototype.copyFormat = function (format) {\n this.styleName = !isNullOrUndefined(format.baseStyle) ? format.baseStyle.name : 'Normal';\n this.leftIndent = format.leftIndent;\n this.rightIndent = format.rightIndent;\n this.firstLineIndent = format.firstLineIndent;\n this.afterSpacing = format.afterSpacing;\n this.beforeSpacing = format.beforeSpacing;\n this.spaceAfterAuto = format.spaceAfterAuto;\n this.spaceBeforeAuto = format.spaceBeforeAuto;\n this.lineSpacing = format.lineSpacing;\n this.lineSpacingType = format.lineSpacingType;\n this.textAlignment = format.textAlignment;\n this.outlineLevel = format.outlineLevel;\n this.bidi = format.bidi;\n this.keepLinesTogether = format.keepLinesTogether;\n this.keepWithNext = format.keepWithNext;\n this.widowControl = format.widowControl;\n this.contextualSpacing = format.contextualSpacing;\n this.borders.copyFormat(format.borders);\n if (!isNullOrUndefined(format.listFormat) && !isNullOrUndefined(format.listFormat.listId)) {\n this.listId = format.listFormat.listId;\n this.listLevelNumber = format.listFormat.listLevelNumber;\n }\n else {\n this.listId = undefined;\n this.listLevelNumber = 0;\n }\n };\n /**\n * Copies to format.\n *\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.copyToFormat = function (format) {\n if (isNullOrUndefined(format)) {\n return;\n }\n if (!isNullOrUndefined(this.afterSpacing)) {\n format.afterSpacing = this.afterSpacing;\n }\n if (!isNullOrUndefined(this.beforeSpacing)) {\n format.beforeSpacing = this.beforeSpacing;\n }\n if (!isNullOrUndefined(this.spaceAfterAuto)) {\n format.spaceAfterAuto = this.spaceAfterAuto;\n }\n if (!isNullOrUndefined(this.spaceBeforeAuto)) {\n format.spaceBeforeAuto = this.spaceBeforeAuto;\n }\n if (!isNullOrUndefined(this.leftIndent)) {\n format.leftIndent = this.leftIndent;\n }\n if (!isNullOrUndefined(this.rightIndent)) {\n format.rightIndent = this.rightIndent;\n }\n if (!isNullOrUndefined(this.textAlignment)) {\n format.textAlignment = this.textAlignment;\n }\n if (!isNullOrUndefined(this.outlineLevel)) {\n format.outlineLevel = this.outlineLevel;\n }\n if (!isNullOrUndefined(this.lineSpacing)) {\n format.lineSpacing = this.lineSpacing;\n }\n if (!isNullOrUndefined(this.lineSpacingType)) {\n format.lineSpacingType = this.lineSpacingType;\n }\n if (!isNullOrUndefined(this.firstLineIndent)) {\n format.firstLineIndent = this.firstLineIndent;\n }\n if (!isNullOrUndefined(this.bidi)) {\n format.bidi = this.bidi;\n }\n if (!isNullOrUndefined(this.keepWithNext)) {\n format.keepWithNext = this.keepWithNext;\n }\n if (!isNullOrUndefined(this.keepLinesTogether)) {\n format.keepLinesTogether = this.keepLinesTogether;\n }\n if (!isNullOrUndefined(this.widowControl)) {\n format.widowControl = this.widowControl;\n }\n if (!isNullOrUndefined(this.contextualSpacing)) {\n format.contextualSpacing = this.contextualSpacing;\n }\n };\n /**\n * Combines the format.\n *\n * @param {WParagraphFormat} format\n * @private\n */\n SelectionParagraphFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftIndent) && this.leftIndent !== format.leftIndent) {\n this.leftIndent = undefined;\n }\n if (!isNullOrUndefined(this.rightIndent) && this.rightIndent !== format.rightIndent) {\n this.rightIndent = undefined;\n }\n if (!isNullOrUndefined(this.firstLineIndent) && this.firstLineIndent !== format.firstLineIndent) {\n this.firstLineIndent = undefined;\n }\n if (this.lineSpacing !== 0 && this.lineSpacing !== format.lineSpacing) {\n this.lineSpacing = 0;\n }\n if (this.beforeSpacing !== -1 && this.beforeSpacing !== format.beforeSpacing) {\n this.beforeSpacing = -1;\n }\n if (this.afterSpacing !== -1 && this.afterSpacing !== format.afterSpacing) {\n this.afterSpacing = -1;\n }\n if (!isNullOrUndefined(this.spaceAfterAuto) && this.spaceAfterAuto !== format.spaceAfterAuto) {\n this.spaceAfterAuto = undefined;\n }\n if (!isNullOrUndefined(this.spaceBeforeAuto) && this.spaceBeforeAuto !== format.spaceBeforeAuto) {\n this.spaceBeforeAuto = undefined;\n }\n if (!isNullOrUndefined(this.lineSpacingType) && this.lineSpacingType !== format.lineSpacingType) {\n this.lineSpacingType = undefined;\n }\n if (!isNullOrUndefined(this.textAlignment) && this.textAlignment !== format.textAlignment) {\n this.textAlignment = undefined;\n }\n if (!isNullOrUndefined(this.outlineLevel) && this.outlineLevel !== format.outlineLevel) {\n this.outlineLevel = undefined;\n }\n if (this.listLevelNumber >= 0 && !isNullOrUndefined(this.listId) && (isNullOrUndefined(format.listFormat) || format.listFormat.listLevelNumber !== this.listLevelNumber)) {\n this.listLevelNumber = -1;\n }\n if (isNullOrUndefined(format.listFormat) || isNullOrUndefined(format.listFormat.listId) || (!isNullOrUndefined(this.listId) && this.listId !== format.listFormat.listId)) {\n this.listId = undefined;\n }\n if (!isNullOrUndefined(this.bidi) && this.bidi !== format.bidi) {\n this.bidi = undefined;\n }\n if (!isNullOrUndefined(this.keepLinesTogether) && this.keepLinesTogether !== format.keepLinesTogether) {\n this.keepLinesTogether = undefined;\n }\n if (!isNullOrUndefined(this.keepWithNext) && this.keepWithNext !== format.keepWithNext) {\n this.keepWithNext = undefined;\n }\n if (!isNullOrUndefined(this.widowControl) && this.widowControl !== format.widowControl) {\n this.widowControl = undefined;\n }\n if (!isNullOrUndefined(this.contextualSpacing) && this.contextualSpacing !== format.contextualSpacing) {\n this.contextualSpacing = undefined;\n }\n if (!isNullOrUndefined(this.styleName) && format.baseStyle && this.styleName !== format.baseStyle.name) {\n this.styleName = undefined;\n }\n this.borders.combineFormat(format.borders);\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionParagraphFormat.prototype.clearFormat = function () {\n this.leftIndent = 0;\n this.rightIndent = 0;\n this.beforeSpacing = 0;\n this.afterSpacing = 0;\n this.spaceAfterAuto = undefined;\n this.spaceBeforeAuto = undefined;\n this.firstLineIndent = 0;\n this.lineSpacing = 1;\n this.textAlignment = undefined;\n this.lineSpacingType = undefined;\n this.listId = undefined;\n this.listLevelNumber = -1;\n this.styleName = undefined;\n this.bidi = undefined;\n this.contextualSpacing = undefined;\n };\n /**\n * Gets the clone of list at current selection.\n *\n * @returns WList\n * @private\n */\n SelectionParagraphFormat.prototype.getList = function () {\n var list = this.documentHelper.getListById(this.listId);\n if (!isNullOrUndefined(list)) {\n var listAdv = new WList();\n var abstractList = new WAbstractList();\n var currentAbstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n var editor = this.selection.owner.editorModule;\n if (!isNullOrUndefined(currentAbstractList)) {\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var level = editor.cloneListLevel(currentAbstractList.levels[i]);\n abstractList.levels.push(level);\n level.ownerBase = abstractList;\n }\n }\n else {\n abstractList.levels.push(new WListLevel(abstractList));\n }\n if (!isNullOrUndefined(list.levelOverrides)) {\n for (var i = 0; i < list.levelOverrides.length; i++) {\n var levelOverride = editor.cloneLevelOverride(list.levelOverrides[i]);\n listAdv.levelOverrides.push(levelOverride);\n }\n }\n listAdv.abstractList = abstractList;\n listAdv.abstractListId = abstractList.abstractListId;\n listAdv.sourceListId = list.listId;\n return listAdv;\n }\n return undefined;\n };\n /**\n * Modifies the list at current selection.\n *\n * @param {WList} listAdv\n * @private\n */\n SelectionParagraphFormat.prototype.setList = function (listAdv, isListDialog) {\n if ((this.documentHelper.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.documentHelper.owner.isDocumentLoaded) {\n return;\n }\n var list = this.documentHelper.getListById(this.listId);\n var collection = undefined;\n var currentAbstractList = listAdv ? this.documentHelper.getAbstractListById(listAdv.abstractListId) : undefined;\n if (!isNullOrUndefined(list) && !isNullOrUndefined(listAdv)\n && !isNullOrUndefined(currentAbstractList) && listAdv.sourceListId === list.listId) {\n var history_1 = this.documentHelper.owner.editorHistoryModule;\n var listLevel = this.documentHelper.layout.getListLevel(list, 1);\n this.selection.owner.isLayoutEnabled = false;\n this.documentHelper.owner.editorModule.setOffsetValue(this.selection);\n if (history_1) {\n collection = history_1.updateListChangesInHistory(currentAbstractList, list);\n }\n this.documentHelper.owner.editorModule.updateListParagraphs();\n if (history_1) {\n history_1.applyListChanges(this.selection, collection);\n }\n this.selection.owner.isLayoutEnabled = true;\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n if (isListDialog) {\n this.documentHelper.layout.clearInvalidList(listAdv);\n }\n this.documentHelper.owner.editorModule.layoutWholeDocument();\n this.documentHelper.owner.editorModule.updateSelectionTextPosition(false);\n if (history_1 && history_1.currentBaseHistoryInfo) {\n if (history_1.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history_1.currentBaseHistoryInfo.updateSelection();\n }\n history_1.updateHistory();\n }\n this.documentHelper.owner.editorModule.fireContentChange();\n }\n else if (!isNullOrUndefined(listAdv)) {\n this.selection.owner.isLayoutEnabled = false;\n if (!isNullOrUndefined(currentAbstractList) && this.documentHelper.abstractLists.indexOf(currentAbstractList) === -1) {\n this.documentHelper.abstractLists.push(currentAbstractList);\n }\n if (this.documentHelper.lists.indexOf(listAdv) === -1) {\n this.documentHelper.lists.push(listAdv);\n }\n //currentAbstractList.listType = 'Numbering';\n this.selection.owner.isLayoutEnabled = true;\n this.selection.owner.editorModule.onApplyList(listAdv);\n }\n else {\n this.selection.owner.editorModule.onApplyList(undefined);\n }\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionParagraphFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.rightIndentIn = undefined;\n this.beforeSpacingIn = undefined;\n this.afterSpacingIn = undefined;\n this.spaceBeforeAutoIn = undefined;\n this.spaceAfterAutoIn = undefined;\n this.firstLineIndentIn = undefined;\n this.lineSpacingIn = undefined;\n this.textAlignmentIn = undefined;\n this.lineSpacingTypeIn = undefined;\n this.listId = undefined;\n this.listLevelNumberIn = undefined;\n this.documentHelper = undefined;\n this.selection = undefined;\n this.styleName = undefined;\n this.bidi = undefined;\n this.contextualSpacing = undefined;\n if (!isNullOrUndefined(this.bordersIn)) {\n this.bordersIn.destroy();\n this.bordersIn = undefined;\n }\n };\n return SelectionParagraphFormat;\n}());\nexport { SelectionParagraphFormat };\nvar SelectionHeaderFooter = /** @class */ (function () {\n function SelectionHeaderFooter(selection) {\n this.linkToPreviousIn = true;\n this.selection = selection;\n }\n Object.defineProperty(SelectionHeaderFooter.prototype, \"linkToPrevious\", {\n get: function () {\n return this.linkToPreviousIn;\n },\n /**\n * Gets or sets a value indicating whether this header footer is linked to the previous section header footer in the document.\n *\n * @default true\n * @aspType bool\n * @returns {boolean} Returns `true` if the header footer is linked to the previous section header footer; Otherwise `false`.\n */\n set: function (value) {\n this.linkToPreviousIn = value;\n this.notifyPropertyChanged('linkToPrevious');\n },\n enumerable: true,\n configurable: true\n });\n SelectionHeaderFooter.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isPastingContent\n || selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded)\n && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyvalue(propertyName);\n if (!isNullOrUndefined(value)) {\n var headerFooterWidget = selection.start.paragraph.bodyWidget;\n var sectionIndex = headerFooterWidget.sectionIndex;\n var headerFooterType = headerFooterWidget.headerFooterType;\n selection.owner.editorModule.removeInlineHeaderFooterWidget(sectionIndex, headerFooterType, propertyName, value);\n }\n }\n };\n SelectionHeaderFooter.prototype.getPropertyvalue = function (propertyName) {\n if (propertyName == \"linkToPrevious\") {\n if (!isNullOrUndefined(this.linkToPrevious)) {\n return this.linkToPrevious;\n }\n }\n return undefined;\n };\n return SelectionHeaderFooter;\n}());\nexport { SelectionHeaderFooter };\n/**\n * Selection section format implementation\n */\nvar SelectionSectionFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionSectionFormat(selection) {\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n /**\n * private\n */\n this.bidi = undefined;\n this.selection = selection;\n this.firstPageHeaderIn = new SelectionHeaderFooter(selection);\n this.firstPageFooterIn = new SelectionHeaderFooter(selection);\n this.oddPageHeaderIn = new SelectionHeaderFooter(selection);\n this.oddPageFooterIn = new SelectionHeaderFooter(selection);\n this.evenPageHeaderIn = new SelectionHeaderFooter(selection);\n this.evenPageFooterIn = new SelectionHeaderFooter(selection);\n }\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageHeight\", {\n /**\n * Gets or sets the page height.\n *\n * @aspType int\n */\n get: function () {\n return this.pageHeightIn;\n },\n /**\n * Gets or sets the page height.\n *\n * @aspType int\n */\n set: function (value) {\n this.pageHeightIn = value;\n this.notifyPropertyChanged('pageHeight');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageWidth\", {\n /**\n * Gets or sets the page width.\n *\n * @aspType int\n */\n get: function () {\n return this.pageWidthIn;\n },\n /**\n * Gets or sets the page width.\n *\n * @aspType int\n */\n set: function (value) {\n this.pageWidthIn = value;\n this.notifyPropertyChanged('pageWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"leftMargin\", {\n /**\n * Gets or sets the page left margin.\n *\n * @aspType int\n */\n get: function () {\n return this.leftMarginIn;\n },\n /**\n * Gets or sets the page left margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or sets the page bottom margin.\n *\n * @aspType int\n */\n get: function () {\n return this.bottomMarginIn;\n },\n /**\n * Gets or sets the page bottom margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"topMargin\", {\n /**\n * Gets or sets the page top margin.\n *\n * @aspType int\n */\n get: function () {\n return this.topMarginIn;\n },\n /**\n * Gets or sets the page top margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"rightMargin\", {\n /**\n * Gets or sets the page right margin.\n *\n * @aspType int\n */\n get: function () {\n return this.rightMarginIn;\n },\n /**\n * Gets or sets the page right margin.\n *\n * @aspType int\n */\n set: function (value) {\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"headerDistance\", {\n /**\n * Gets or sets the header distance.\n *\n * @aspType int\n */\n get: function () {\n return this.headerDistanceIn;\n },\n /**\n * Gets or sets the header distance.\n *\n * @aspType int\n */\n set: function (value) {\n this.headerDistanceIn = value;\n this.notifyPropertyChanged('headerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"firstPageHeader\", {\n get: function () {\n return this.firstPageHeaderIn;\n },\n /**\n * Gets the first page header of the section.\n *\n * @aspType SelectionHeaderFooter\n */\n set: function (value) {\n this.firstPageHeaderIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"firstPageFooter\", {\n get: function () {\n return this.firstPageFooterIn;\n },\n /**\n * Gets the first page footer of the section.\n *\n * @aspType SelectionHeaderFooter\n */\n set: function (value) {\n this.firstPageFooterIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"oddPageHeader\", {\n get: function () {\n return this.oddPageHeaderIn;\n },\n /**\n * Gets the odd page header of the section.\n *\n * @aspType SelectionHeaderFooter\n */\n set: function (value) {\n this.oddPageHeaderIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"oddPageFooter\", {\n get: function () {\n return this.oddPageFooterIn;\n },\n /**\n * Gets the odd page footer of the section.\n *\n * @aspType SelectionHeaderFooter\n */\n set: function (value) {\n this.oddPageFooterIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"evenPageHeader\", {\n get: function () {\n return this.evenPageHeaderIn;\n },\n /**\n * Gets the even page header of the section.\n *\n * @aspType SelectionHeaderFooter\n */\n set: function (value) {\n this.evenPageHeaderIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"evenPageFooter\", {\n get: function () {\n return this.evenPageFooterIn;\n },\n /**\n * Gets the even page footer of the section.\n *\n * @aspType SelectionHeaderFooter\n */\n set: function (value) {\n this.evenPageFooterIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"pageStartingNumber\", {\n /**\n * Gets or sets the starting page number.\n *\n * @aspType int\n */\n get: function () {\n return this.pageStartingNumberIn;\n },\n /**\n * Gets or sets the starting page number.\n *\n * @aspType int\n */\n set: function (value) {\n this.pageStartingNumberIn = value;\n this.notifyPropertyChanged('pageStartingNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"restartPageNumbering\", {\n /**\n * Gets or sets a value indicating whether to restart page numbering.\n *\n * @aspType bool\n */\n get: function () {\n return this.restartPageNumberingIn;\n },\n /**\n * Gets or sets a value indicating whether to restart page numbering.\n *\n * @aspType bool\n */\n set: function (value) {\n this.restartPageNumberingIn = value;\n this.notifyPropertyChanged('restartPageNumbering');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"footerDistance\", {\n /**\n * Gets or sets the footer distance.\n *\n * @aspType int\n */\n get: function () {\n return this.footerDistanceIn;\n },\n /**\n * Gets or sets the footer distance.\n *\n * @aspType int\n */\n set: function (value) {\n this.footerDistanceIn = value;\n this.notifyPropertyChanged('footerDistance');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentFirstPage\", {\n /**\n * Gets or sets a value indicating whether the section has different first page.\n *\n * @aspType bool\n */\n get: function () {\n return this.differentFirstPageIn;\n },\n /**\n * Gets or sets a value indicating whether the section has different first page.\n *\n * @aspType bool\n */\n set: function (value) {\n this.differentFirstPageIn = value;\n this.notifyPropertyChanged('differentFirstPage');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"differentOddAndEvenPages\", {\n /**\n * Gets or sets a value indicating whether the section has different odd and even page.\n *\n * @aspType bool\n */\n get: function () {\n return this.differentOddAndEvenPagesIn;\n },\n /**\n * Gets or sets a value indicating whether the section has different odd and even page.\n *\n * @aspType bool\n */\n set: function (value) {\n this.differentOddAndEvenPagesIn = value;\n this.notifyPropertyChanged('differentOddAndEvenPages');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"endnoteNumberFormat\", {\n /**\n * Gets or sets the number format of endnote.\n */\n get: function () {\n return this.endnoteNumberFormatIn;\n },\n /**\n * Gets or sets the number format of endnote.\n */\n set: function (value) {\n this.endnoteNumberFormatIn = value;\n this.notifyPropertyChanged('endnoteNumberFormat');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"footNoteNumberFormat\", {\n /**\n * Gets or sets the number format of footnote.\n */\n get: function () {\n return this.footNoteNumberFormatIn;\n },\n /**\n * Gets or sets the number format of footnote.\n */\n set: function (value) {\n this.footNoteNumberFormatIn = value;\n this.notifyPropertyChanged('footNoteNumberFormat');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"initialFootNoteNumber\", {\n /**\n * Gets or sets the number format of footnote.\n */\n get: function () {\n return this.initialFootNoteNumberIn;\n },\n /**\n * Gets or sets the number format of footnote.\n */\n set: function (value) {\n this.initialFootNoteNumberIn = value;\n this.notifyPropertyChanged('initialFootNoteNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"initialEndNoteNumber\", {\n /**\n * Gets or sets the number format of footnote.\n */\n get: function () {\n return this.initialEndNoteNumberIn;\n },\n /**\n * Gets or sets the number format of footnote.\n */\n set: function (value) {\n this.initialEndNoteNumberIn = value;\n this.notifyPropertyChanged('initialEndNoteNumber');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"restartIndexForFootnotes\", {\n /**\n * Gets or sets the restart index of footnote\n */\n get: function () {\n return this.restartIndexForFootnotesIn;\n },\n /**\n * Gets or sets the restart index of footnote\n */\n set: function (value) {\n this.restartIndexForFootnotesIn = value;\n this.notifyPropertyChanged('restartIndexForFootnotes');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"restartIndexForEndnotes\", {\n /**\n * Gets or sets the restart index of endnote\n */\n get: function () {\n return this.restartIndexForEndnotesIn;\n },\n /**\n * Gets or sets the restart index of endnote\n */\n set: function (value) {\n this.restartIndexForEndnotesIn = value;\n this.notifyPropertyChanged('restartIndexForEndnotes');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"numberOfColumns\", {\n /**\n * Gets the number of columns on a page.\n */\n get: function () {\n return this.columns.length == 0 ? 1 : this.columns.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"equalWidth\", {\n /**\n * Gets or sets a value indicating whether all the columns on a page has even width and space.\n */\n get: function () {\n return this.equalWidthIn;\n },\n /**\n * Gets or sets a value indicating whether all the columns on a page has even width and space.\n */\n set: function (value) {\n this.equalWidthIn = value;\n this.notifyPropertyChanged('equalWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"lineBetweenColumns\", {\n /**\n * Gets or sets a value indicating whether the vertical lines appear between all the columns.\n */\n get: function () {\n return this.lineBetweenColumnsIn;\n },\n /**\n * Gets or sets a value indicating whether the vertical lines appear between all the columns.\n */\n set: function (value) {\n this.lineBetweenColumnsIn = value;\n this.notifyPropertyChanged('lineBetweenColumns');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"columns\", {\n /**\n * Gets or sets the columns.\n */\n get: function () {\n return this.columnsIn;\n },\n /**\n * Gets or sets the columns.\n */\n set: function (value) {\n this.columnsIn = value;\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isPastingContent\n || selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded)\n && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n this.selection.owner.editorModule.onApplyColumnFormat('columns', value);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionSectionFormat.prototype, \"breakCode\", {\n /**\n * Gets or sets the breakCode.\n *\n * @aspType int\n */\n get: function () {\n return this.breakCodeIn;\n },\n /**\n * Gets or sets the breakCode.\n *\n * @aspType int\n */\n set: function (value) {\n this.breakCodeIn = value;\n this.notifyPropertyChanged('breakCode');\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Copies the format.\n *\n * @param {WSectionFormat} format\n * @returns {void}\n * @private\n */\n SelectionSectionFormat.prototype.copyFormat = function (format) {\n this.pageHeight = format.pageHeight;\n this.pageWidth = format.pageWidth;\n this.leftMargin = format.leftMargin;\n this.topMargin = format.topMargin;\n this.rightMargin = format.rightMargin;\n this.bottomMargin = format.bottomMargin;\n this.headerDistance = format.headerDistance;\n this.footerDistance = format.footerDistance;\n this.differentFirstPage = format.differentFirstPage;\n this.differentOddAndEvenPages = format.differentOddAndEvenPages;\n this.bidi = format.bidi;\n this.pageStartingNumber = format.pageStartingNumber;\n this.restartPageNumbering = format.restartPageNumbering;\n this.endnoteNumberFormat = format.endnoteNumberFormat;\n this.footNoteNumberFormat = format.footNoteNumberFormat;\n this.restartIndexForEndnotes = format.restartIndexForEndnotes;\n this.restartIndexForFootnotes = format.restartIndexForFootnotes;\n this.initialEndNoteNumber = format.initialEndNoteNumber;\n this.initialFootNoteNumber = format.initialFootNoteNumber;\n this.equalWidth = format.equalWidth;\n this.lineBetweenColumns = format.lineBetweenColumns;\n this.columns = [];\n for (var _i = 0, _a = format.columns; _i < _a.length; _i++) {\n var col = _a[_i];\n var selectCol = new SelectionColumnFormat(this.selection);\n selectCol.width = HelperMethods.convertPixelToPoint(col.width);\n selectCol.space = HelperMethods.convertPixelToPoint(col.space);\n this.columns.push(selectCol);\n }\n this.breakCode = format.breakCode;\n if (this.selection.owner.enableHeaderAndFooter) {\n var headerFootersColletion = this.selection.documentHelper.headersFooters;\n var headerFooterWidget = this.selection.start.paragraph.containerWidget;\n var sectionIndex = headerFooterWidget.sectionIndex;\n var headerFooterType = headerFooterWidget.headerFooterType;\n var isLinkedToPrevious = false;\n if (sectionIndex == 0) {\n this.oddPageHeader.linkToPrevious = false;\n this.oddPageFooter.linkToPrevious = false;\n this.evenPageHeader.linkToPrevious = false;\n this.evenPageFooter.linkToPrevious = false;\n this.firstPageHeader.linkToPrevious = false;\n this.firstPageFooter.linkToPrevious = false;\n }\n else if (headerFootersColletion[sectionIndex]) {\n var index = this.selection.viewer.getHeaderFooter(headerFooterType);\n var headerFooterWidget_1 = headerFootersColletion[sectionIndex][index];\n if (isNullOrUndefined(headerFooterWidget_1)) {\n isLinkedToPrevious = true;\n }\n if (!isNullOrUndefined(headerFooterWidget_1) || isLinkedToPrevious) {\n switch (headerFooterType) {\n case \"OddHeader\":\n if (isLinkedToPrevious) {\n this.oddPageHeader.linkToPrevious = true;\n }\n else {\n this.oddPageHeader.linkToPrevious = false;\n }\n break;\n case \"OddFooter\":\n if (isLinkedToPrevious) {\n this.oddPageFooter.linkToPrevious = true;\n }\n else {\n this.oddPageFooter.linkToPrevious = false;\n }\n break;\n case \"EvenHeader\":\n if (isLinkedToPrevious) {\n this.evenPageHeader.linkToPrevious = true;\n }\n else {\n this.evenPageHeader.linkToPrevious = false;\n }\n break;\n case \"EvenFooter\":\n if (isLinkedToPrevious) {\n this.evenPageFooter.linkToPrevious = true;\n }\n else {\n this.evenPageFooter.linkToPrevious = false;\n }\n break;\n case \"FirstPageHeader\":\n if (isLinkedToPrevious) {\n this.firstPageHeader.linkToPrevious = true;\n }\n else {\n this.firstPageHeader.linkToPrevious = false;\n }\n break;\n case \"FirstPageFooter\":\n if (isLinkedToPrevious) {\n this.firstPageFooter.linkToPrevious = true;\n }\n else {\n this.firstPageFooter.linkToPrevious = false;\n }\n break;\n }\n }\n }\n }\n };\n SelectionSectionFormat.prototype.applyColumnFormat = function () {\n };\n SelectionSectionFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isPastingContent\n || selection.owner.isReadOnlyMode || !selection.owner.isDocumentLoaded)\n && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyvalue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplySectionFormat(propertyName, value);\n }\n }\n };\n SelectionSectionFormat.prototype.getPropertyvalue = function (propertyName) {\n switch (propertyName) {\n case 'pageHeight':\n if (this.pageHeight > 0) {\n return this.pageHeight;\n }\n return undefined;\n case 'pageWidth':\n if (this.pageWidth > 0) {\n return this.pageWidth;\n }\n return undefined;\n case 'leftMargin':\n if (this.leftMargin >= 0) {\n return this.leftMargin;\n }\n return undefined;\n case 'rightMargin':\n if (this.rightMargin >= 0) {\n return this.rightMargin;\n }\n return undefined;\n case 'topMargin':\n if (this.topMargin >= 0) {\n return this.topMargin;\n }\n return undefined;\n case 'bottomMargin':\n if (this.bottomMargin >= 0) {\n return this.bottomMargin;\n }\n return undefined;\n case 'differentFirstPage':\n if (!isNullOrUndefined(this.differentFirstPage)) {\n return this.differentFirstPage;\n }\n return undefined;\n case 'differentOddAndEvenPages':\n if (!isNullOrUndefined(this.differentOddAndEvenPages)) {\n return this.differentOddAndEvenPages;\n }\n return undefined;\n case 'headerDistance':\n return this.headerDistanceIn;\n case 'footerDistance':\n return this.footerDistance;\n case 'pageStartingNumber':\n if (!isNullOrUndefined(this.pageStartingNumber)) {\n return this.pageStartingNumber;\n }\n return undefined;\n case 'restartPageNumbering':\n if (!isNullOrUndefined(this.restartPageNumbering)) {\n return this.restartPageNumbering;\n }\n return undefined;\n case 'endnoteNumberFormat':\n return this.endnoteNumberFormatIn;\n case 'restartIndexForEndnotes':\n return this.restartIndexForEndnotesIn;\n case 'restartIndexForFootnotes':\n return this.restartIndexForFootnotesIn;\n case 'footNoteNumberFormat':\n return this.footNoteNumberFormatIn;\n case 'initialFootNoteNumber':\n return this.initialFootNoteNumber;\n case 'initialEndNoteNumber':\n return this.initialEndNoteNumber;\n case 'equalWidth':\n return this.equalWidthIn;\n case 'lineBetweenColumns':\n return this.lineBetweenColumnsIn;\n case 'columns':\n return this.columnsIn;\n case 'breakCode':\n return this.breakCodeIn;\n default:\n return undefined;\n }\n };\n /**\n * Combines the format.\n *\n * @param {WSectionFormat} format\n * @private\n */\n SelectionSectionFormat.prototype.combineFormat = function (format) {\n if (this.pageHeight > 0 && this.pageHeight !== format.pageHeight) {\n this.pageHeight = 0;\n }\n if (this.pageWidth > 0 && this.pageWidth !== format.pageWidth) {\n this.pageWidth = 0;\n }\n if (this.leftMargin > -1 && this.leftMargin !== format.leftMargin) {\n this.leftMargin = -1;\n }\n if (this.topMargin > -1 && this.topMargin !== format.topMargin) {\n this.topMargin = -1;\n }\n if (this.rightMargin > -1 && this.rightMargin !== format.rightMargin) {\n this.rightMargin = -1;\n }\n if (this.bottomMargin > -1 && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = -1;\n }\n if (this.headerDistance !== 0 && this.headerDistance !== format.headerDistance) {\n this.headerDistance = 0;\n }\n if (this.footerDistance !== 0 && this.footerDistance !== format.footerDistance) {\n this.footerDistance = 0;\n }\n if (!isNullOrUndefined(this.differentFirstPage) && this.differentFirstPage !== format.differentFirstPage) {\n this.differentFirstPage = undefined;\n }\n if (!isNullOrUndefined(this.pageStartingNumber) && this.pageStartingNumber !== format.pageStartingNumber) {\n this.pageStartingNumber = undefined;\n }\n if (!isNullOrUndefined(this.restartPageNumbering) && this.restartPageNumbering !== format.restartPageNumbering) {\n this.restartPageNumbering = undefined;\n }\n if (!isNullOrUndefined(this.differentOddAndEvenPages) && this.differentOddAndEvenPages !== format.differentOddAndEvenPages) {\n this.differentOddAndEvenPages = undefined;\n }\n if (!isNullOrUndefined(this.bidi) && this.bidi !== format.bidi) {\n this.bidi = undefined;\n }\n if (!isNullOrUndefined(this.endnoteNumberFormat) && this.endnoteNumberFormat !== format.endnoteNumberFormat) {\n this.endnoteNumberFormat = undefined;\n }\n if (!isNullOrUndefined(this.restartIndexForEndnotes) && this.restartIndexForEndnotes !== format.restartIndexForEndnotes) {\n this.restartIndexForEndnotes = undefined;\n }\n if (!isNullOrUndefined(this.restartIndexForFootnotes) && this.restartIndexForFootnotes !== format.restartIndexForFootnotes) {\n this.restartIndexForFootnotes = undefined;\n }\n if (!isNullOrUndefined(this.footNoteNumberFormat) && this.footNoteNumberFormat !== format.footNoteNumberFormat) {\n this.footNoteNumberFormat = undefined;\n }\n if (!isNullOrUndefined(this.initialFootNoteNumber) && this.initialFootNoteNumber !== format.initialFootNoteNumber) {\n this.initialFootNoteNumber = undefined;\n }\n if (!isNullOrUndefined(this.initialEndNoteNumber) && this.initialEndNoteNumber !== format.initialEndNoteNumber) {\n this.initialEndNoteNumber = undefined;\n }\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionSectionFormat.prototype.clearFormat = function () {\n this.headerDistance = 0;\n this.footerDistance = 0;\n this.pageHeight = 0;\n this.pageWidth = 0;\n this.leftMargin = -1;\n this.rightMargin = -1;\n this.topMargin = -1;\n this.bottomMargin = -1;\n this.differentFirstPage = undefined;\n this.differentOddAndEvenPages = undefined;\n this.bidi = undefined;\n this.pageStartingNumber = undefined;\n this.restartPageNumbering = undefined;\n this.endnoteNumberFormat = undefined;\n this.footNoteNumberFormat = undefined;\n this.restartIndexForFootnotes = undefined;\n this.restartIndexForEndnotes = undefined;\n this.initialFootNoteNumber = 1;\n this.initialEndNoteNumber = 1;\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionSectionFormat.prototype.destroy = function () {\n this.headerDistanceIn = undefined;\n this.footerDistanceIn = undefined;\n this.pageHeightIn = undefined;\n this.pageWidthIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.differentFirstPageIn = undefined;\n this.differentOddAndEvenPagesIn = undefined;\n this.selection = undefined;\n this.bidi = undefined;\n this.pageStartingNumberIn = undefined;\n this.restartPageNumberingIn = undefined;\n this.endnoteNumberFormatIn = undefined;\n this.footNoteNumberFormatIn = undefined;\n this.restartIndexForFootnotesIn = undefined;\n this.restartIndexForEndnotesIn = undefined;\n this.initialEndNoteNumber = undefined;\n this.initialFootNoteNumber = undefined;\n this.firstPageHeaderIn = undefined;\n this.firstPageFooterIn = undefined;\n this.oddPageHeaderIn = undefined;\n this.oddPageFooterIn = undefined;\n this.evenPageHeaderIn = undefined;\n this.evenPageFooterIn = undefined;\n };\n return SelectionSectionFormat;\n}());\nexport { SelectionSectionFormat };\n/**\n * Selection table format implementation\n */\nvar SelectionTableFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionTableFormat(selection) {\n this.leftIndentIn = 0;\n this.backgroundIn = undefined;\n this.tableAlignmentIn = undefined;\n this.cellSpacingIn = 0;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.preferredWidthIn = 0;\n this.bidiIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionTableFormat.prototype, \"table\", {\n /**\n * Gets or sets the table.\n *\n * @private\n */\n get: function () {\n return this.tableIn;\n },\n set: function (value) {\n this.tableIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"title\", {\n /**\n * Gets or sets the title of the selected table.\n *\n * @aspType string\n */\n get: function () {\n return this.titleIn;\n },\n /**\n * Gets or sets the title of the selected table.\n *\n * @aspType string\n */\n set: function (value) {\n if (isNullOrUndefined(this.table)) {\n return;\n }\n this.titleIn = value;\n this.notifyPropertyChanged('title');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"description\", {\n /**\n * Gets or sets the description of the selected table.\n *\n * @aspType string\n */\n get: function () {\n return this.descriptionIn;\n },\n /**\n * Gets or sets the description of the selected table.\n *\n * @aspType string\n */\n set: function (value) {\n if (isNullOrUndefined(this.table)) {\n return;\n }\n this.descriptionIn = value;\n this.notifyPropertyChanged('description');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftIndent\", {\n /**\n * Gets or Sets the left indent for selected table.\n *\n * @aspType int\n */\n get: function () {\n return this.leftIndentIn;\n },\n /**\n * Gets or Sets the left indent for selected table.\n *\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftIndentIn) {\n return;\n }\n this.leftIndentIn = value;\n this.notifyPropertyChanged('leftIndent');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the default top margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.topMarginIn;\n },\n /**\n * Gets or Sets the default top margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected table.\n *\n * @default undefined\n * @aspType string\n */\n get: function () {\n return this.backgroundIn;\n },\n /**\n * Gets or Sets the background for selected table.\n *\n * @default undefined\n * @aspType string\n */\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"tableAlignment\", {\n /**\n * Gets or Sets the table alignment for selected table.\n *\n * @default undefined\n */\n get: function () {\n return this.tableAlignmentIn;\n },\n /**\n * Gets or Sets the table alignment for selected table.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.tableAlignmentIn) {\n return;\n }\n this.tableAlignmentIn = value;\n this.notifyPropertyChanged('tableAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the default left margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.leftMarginIn;\n },\n /**\n * Gets or Sets the default left margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the default bottom margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.bottomMarginIn;\n },\n /**\n * Gets or Sets the default bottom margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"cellSpacing\", {\n /**\n * Gets or Sets the cell spacing for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.cellSpacingIn;\n },\n /**\n * Gets or Sets the cell spacing for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.cellSpacingIn) {\n return;\n }\n this.cellSpacingIn = value;\n this.notifyPropertyChanged('cellSpacing');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the default right margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.rightMarginIn;\n },\n /**\n * Gets or Sets the default right margin of cell for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected table.\n *\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.preferredWidthIn;\n },\n /**\n * Gets or Sets the preferred width for selected table.\n *\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"preferredWidthType\", {\n /**\n * Gets or Sets the preferred width type for selected table.\n *\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n /**\n * Gets or Sets the preferred width type for selected table.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionTableFormat.prototype, \"bidi\", {\n /**\n * Gets or sets the bidi property\n *\n * @aspType bool\n */\n get: function () {\n return this.bidiIn;\n },\n /**\n * Gets or sets the bidi property\n *\n * @aspType bool\n */\n set: function (value) {\n this.bidiIn = value;\n this.notifyPropertyChanged('bidi');\n },\n enumerable: true,\n configurable: true\n });\n SelectionTableFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'tableAlignment':\n return this.tableAlignment;\n case 'leftIndent':\n return this.leftIndent;\n case 'cellSpacing':\n return this.cellSpacing;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n case 'bidi':\n return this.bidi;\n case 'title':\n return this.title;\n case 'description':\n return this.description;\n default:\n return undefined;\n }\n };\n SelectionTableFormat.prototype.notifyPropertyChanged = function (propertyName) {\n if (!isNullOrUndefined(this.selection) && (this.selection.isCleared\n || !this.selection.owner.isDocumentLoaded || this.selection.owner.isReadOnlyMode\n || this.selection.owner.isPastingContent) && !this.selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection) && !isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableFormat(propertyName, value);\n }\n }\n };\n /**\n * Copies the format.\n *\n * @param {WTableFormat} format Format to copy.\n * @returns {void}\n * @private\n */\n SelectionTableFormat.prototype.copyFormat = function (format) {\n this.leftIndent = format.leftIndent;\n this.background = format.shading.backgroundColor;\n this.tableAlignment = format.tableAlignment;\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.cellSpacing = format.cellSpacing;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n this.bidi = format.bidi;\n this.title = format.title;\n this.description = format.description;\n };\n /**\n * Clears the format.\n *\n * @returns {void}\n * @private\n */\n SelectionTableFormat.prototype.clearFormat = function () {\n this.table = undefined;\n this.leftIndent = 0;\n this.background = undefined;\n this.leftIndent = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.bottomMargin = 0;\n this.cellSpacing = 0;\n this.tableAlignment = undefined;\n this.bidi = undefined;\n };\n /**\n * Destroys the managed resources.\n *\n * @returns {void}\n * @private\n */\n SelectionTableFormat.prototype.destroy = function () {\n this.leftIndentIn = undefined;\n this.backgroundIn = undefined;\n this.leftIndentIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.bottomMarginIn = undefined;\n this.cellSpacingIn = undefined;\n this.tableAlignmentIn = undefined;\n this.tableIn = undefined;\n this.selection = undefined;\n this.bidi = undefined;\n };\n return SelectionTableFormat;\n}());\nexport { SelectionTableFormat };\n/**\n * Selection cell format implementation\n */\nvar SelectionCellFormat = /** @class */ (function () {\n /**\n * @private\n */\n function SelectionCellFormat(selection) {\n this.verticalAlignmentIn = undefined;\n this.leftMarginIn = 0;\n this.rightMarginIn = 0;\n this.topMarginIn = 0;\n this.bottomMarginIn = 0;\n this.backgroundIn = undefined;\n this.preferredWidthTypeIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionCellFormat.prototype, \"verticalAlignment\", {\n /**\n * Gets or sets the vertical alignment of the selected cells.\n *\n * @default undefined\n */\n get: function () {\n return this.verticalAlignmentIn;\n },\n /**\n * Gets or sets the vertical alignment of the selected cells.\n *\n * @default undefined\n */\n set: function (value) {\n if (value === this.verticalAlignmentIn) {\n return;\n }\n this.verticalAlignmentIn = value;\n this.notifyPropertyChanged('verticalAlignment');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"leftMargin\", {\n /**\n * Gets or Sets the left margin for selected cells.\n *\n * @default undefined\n * @aspType int\n */\n /* eslint-disable */\n get: function () {\n return this.leftMarginIn;\n },\n /**\n * Gets or Sets the left margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.leftMarginIn) {\n return;\n }\n this.leftMarginIn = value;\n this.notifyPropertyChanged('leftMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"rightMargin\", {\n /**\n * Gets or Sets the right margin for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.rightMarginIn;\n },\n /**\n * Gets or Sets the right margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.rightMarginIn) {\n return;\n }\n this.rightMarginIn = value;\n this.notifyPropertyChanged('rightMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"topMargin\", {\n /**\n * Gets or Sets the top margin for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.topMarginIn;\n },\n /**\n * Gets or Sets the top margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.topMarginIn) {\n return;\n }\n this.topMarginIn = value;\n this.notifyPropertyChanged('topMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"bottomMargin\", {\n /**\n * Gets or Sets the bottom margin for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.bottomMarginIn;\n },\n /**\n * Gets or Sets the bottom margin for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.bottomMarginIn) {\n return;\n }\n this.bottomMarginIn = value;\n this.notifyPropertyChanged('bottomMargin');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"background\", {\n /**\n * Gets or Sets the background for selected cells.\n * @default undefined\n * @aspType string\n */\n get: function () {\n return this.backgroundIn;\n },\n /**\n * Gets or Sets the background for selected cells.\n * @default undefined\n * @aspType string\n */\n set: function (value) {\n if (value === this.backgroundIn) {\n return;\n }\n this.backgroundIn = value;\n this.notifyPropertyChanged('background');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidthType\", {\n /**\n * Gets or Sets the preferred width type for selected cells.\n * @default undefined\n */\n get: function () {\n return this.preferredWidthTypeIn;\n },\n /**\n * Gets or Sets the preferred width type for selected cells.\n * @default undefined\n */\n set: function (value) {\n if (value === this.preferredWidthTypeIn) {\n return;\n }\n this.preferredWidthTypeIn = value;\n this.notifyPropertyChanged('preferredWidthType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionCellFormat.prototype, \"preferredWidth\", {\n /**\n * Gets or Sets the preferred width for selected cells.\n * @default undefined\n * @aspType int\n */\n get: function () {\n return this.preferredWidthIn;\n },\n /**\n * Gets or Sets the preferred width for selected cells.\n * @default undefined\n * @aspType int\n */\n set: function (value) {\n if (value === this.preferredWidthIn) {\n return;\n }\n this.preferredWidthIn = value;\n this.notifyPropertyChanged('preferredWidth');\n },\n enumerable: true,\n configurable: true\n });\n SelectionCellFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection)) {\n if ((selection.isCleared || !selection.owner.isDocumentLoaded\n || selection.owner.isReadOnlyMode || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(this.selection.start) && !this.selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (propertyName === 'background') {\n propertyName = 'shading';\n }\n if (!isNullOrUndefined(value)) {\n this.selection.owner.editorModule.onApplyTableCellFormat(propertyName, value);\n }\n }\n }\n };\n SelectionCellFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'verticalAlignment':\n return this.verticalAlignment;\n case 'leftMargin':\n return this.leftMargin;\n case 'rightMargin':\n return this.rightMargin;\n case 'topMargin':\n return this.topMargin;\n case 'bottomMargin':\n return this.bottomMargin;\n case 'preferredWidth':\n return this.preferredWidth;\n case 'preferredWidthType':\n return this.preferredWidthType;\n case 'background':\n var shading = new WShading();\n shading.backgroundColor = this.background;\n return shading;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n *\n * @private\n * @param {WCellFormat} format - Source Format to copy.\n * @returns {void}\n */\n SelectionCellFormat.prototype.copyFormat = function (format) {\n this.leftMargin = format.leftMargin;\n this.rightMargin = format.rightMargin;\n this.topMargin = format.topMargin;\n this.bottomMargin = format.bottomMargin;\n this.background = format.shading.backgroundColor;\n this.verticalAlignment = format.verticalAlignment;\n this.preferredWidth = format.preferredWidth;\n this.preferredWidthType = format.preferredWidthType;\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionCellFormat.prototype.clearCellFormat = function () {\n this.leftMargin = undefined;\n this.rightMargin = undefined;\n this.topMargin = undefined;\n this.bottomMargin = undefined;\n this.background = undefined;\n this.verticalAlignment = undefined;\n };\n /**\n * Combines the format.\n *\n * @param {WCellFormat} format - Returns cell format\n * @private\n */\n SelectionCellFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.leftMargin) && this.leftMargin !== format.leftMargin) {\n this.leftMargin = undefined;\n }\n if (!isNullOrUndefined(this.topMargin) && this.topMargin !== format.topMargin) {\n this.topMargin = undefined;\n }\n if (!isNullOrUndefined(this.rightMargin) && this.rightMargin !== format.rightMargin) {\n this.rightMargin = undefined;\n }\n if (!isNullOrUndefined(this.bottomMargin) && this.bottomMargin !== format.bottomMargin) {\n this.bottomMargin = undefined;\n }\n if (!isNullOrUndefined(this.background) && this.background !== format.shading.backgroundColor) {\n this.background = undefined;\n }\n if (!isNullOrUndefined(this.verticalAlignment) && this.verticalAlignment !== format.verticalAlignment) {\n this.verticalAlignment = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidth) && this.preferredWidth !== format.preferredWidth) {\n this.preferredWidth = undefined;\n }\n if (!isNullOrUndefined(this.preferredWidthType) && this.preferredWidthType !== format.preferredWidthType) {\n this.preferredWidthType = undefined;\n }\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionCellFormat.prototype.clearFormat = function () {\n this.background = undefined;\n this.bottomMargin = 0;\n this.leftMargin = 0;\n this.rightMargin = 0;\n this.topMargin = 0;\n this.verticalAlignment = undefined;\n };\n /**\n * Destroys the manages resources.\n *\n * @private\n * @returns {void}\n */\n SelectionCellFormat.prototype.destroy = function () {\n this.backgroundIn = undefined;\n this.verticalAlignmentIn = undefined;\n this.bottomMarginIn = undefined;\n this.leftMarginIn = undefined;\n this.rightMarginIn = undefined;\n this.topMarginIn = undefined;\n this.selection = undefined;\n };\n return SelectionCellFormat;\n}());\nexport { SelectionCellFormat };\n/**\n * Selection row format implementation\n */\nvar SelectionRowFormat = /** @class */ (function () {\n /**\n * @param {Selection} selection - Specifies the selection\n * @private\n */\n function SelectionRowFormat(selection) {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.isHeaderIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.selection = selection;\n }\n Object.defineProperty(SelectionRowFormat.prototype, \"height\", {\n /**\n * Gets or Sets the height for selected rows.\n *\n * @default undefined\n * @aspType int\n * @returns {number} - Returns the height\n */\n get: function () {\n return this.heightIn;\n },\n /**\n * Gets or Sets the height for selected rows.\n *\n * @default undefined\n * @aspType int\n * @param {number} value - Specified the value\n */\n set: function (value) {\n if (value === this.heightIn) {\n return;\n }\n this.heightIn = value;\n this.notifyPropertyChanged('height');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"heightType\", {\n /**\n * Gets or Sets the height type for selected rows.\n *\n * @default undefined\n * @returns {HeightType} - Returns height type\n */\n get: function () {\n return this.heightTypeIn;\n },\n /**\n * Gets or Sets the height type for selected rows.\n *\n * @default undefined\n * @param {HeightType} value - Specified the value\n */\n set: function (value) {\n if (value === this.heightTypeIn) {\n return;\n }\n this.heightTypeIn = value;\n this.notifyPropertyChanged('heightType');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"isHeader\", {\n /**\n * Gets or Sets a value indicating whether the selected rows are header rows or not.\n *\n * @default undefined\n * @aspType bool\n * @returns {boolean} - Returns the is header\n */\n get: function () {\n return this.isHeaderIn;\n },\n /**\n * Gets or Sets a value indicating whether the selected rows are header rows or not.\n *\n * @default undefined\n * @aspType bool\n * @param {boolean} value - Specified the value\n */\n set: function (value) {\n if (value === this.isHeaderIn) {\n return;\n }\n this.isHeaderIn = value;\n this.notifyPropertyChanged('isHeader');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionRowFormat.prototype, \"allowBreakAcrossPages\", {\n /**\n * Gets or Sets a value indicating whether to allow break across pages for selected rows.\n *\n * @default undefined\n * @aspType bool\n * @returns {boolean} - Returns the allow break across page\n */\n get: function () {\n return this.allowRowBreakAcrossPagesIn;\n },\n /**\n * Gets or Sets a value indicating whether to allow break across pages for selected rows.\n *\n * @default undefined\n * @param {boolean} value - Specified the value\n * @aspType bool\n */\n set: function (value) {\n if (value === this.allowRowBreakAcrossPagesIn) {\n return;\n }\n this.allowRowBreakAcrossPagesIn = value;\n this.notifyPropertyChanged('allowBreakAcrossPages');\n },\n enumerable: true,\n configurable: true\n });\n SelectionRowFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection) && (selection.isCleared || selection.owner.isReadOnlyMode\n || !selection.owner.isDocumentLoaded || selection.owner.isPastingContent) && !selection.isRetrieveFormatting) {\n return;\n }\n if (!isNullOrUndefined(selection) && !isNullOrUndefined(selection.start) && !selection.isRetrieveFormatting) {\n var value = this.getPropertyValue(propertyName);\n if (!isNullOrUndefined(value)) {\n selection.owner.editorModule.onApplyTableRowFormat(propertyName, value);\n }\n }\n };\n SelectionRowFormat.prototype.getPropertyValue = function (propertyName) {\n switch (propertyName) {\n case 'height':\n return this.height;\n case 'heightType':\n return this.heightType;\n case 'isHeader':\n return this.isHeader;\n case 'allowBreakAcrossPages':\n return this.allowBreakAcrossPages;\n default:\n return undefined;\n }\n };\n /**\n * Copies the format.\n *\n * @param {WRowFormat} format - Specified row format\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.copyFormat = function (format) {\n this.height = format.height;\n this.heightType = format.heightType;\n this.allowBreakAcrossPages = format.allowBreakAcrossPages;\n this.isHeader = format.isHeader;\n };\n /**\n * Combines the format.\n *\n * @param {WRowFormat} format - Secifies row format\n * @private\n */\n SelectionRowFormat.prototype.combineFormat = function (format) {\n if (!isNullOrUndefined(this.height) && this.height !== format.height) {\n this.height = undefined;\n }\n if (!isNullOrUndefined(this.heightType) && this.heightType !== format.heightType) {\n this.heightType = undefined;\n }\n if (!isNullOrUndefined(this.allowBreakAcrossPages) && this.allowBreakAcrossPages !== format.allowBreakAcrossPages) {\n this.allowBreakAcrossPages = undefined;\n }\n if (!isNullOrUndefined(this.isHeader) && this.isHeader !== format.isHeader) {\n this.isHeader = undefined;\n }\n };\n /**\n * Clears the row format.\n *\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.clearRowFormat = function () {\n this.height = undefined;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.clearFormat = function () {\n this.height = 0;\n this.heightType = undefined;\n this.allowBreakAcrossPages = undefined;\n this.isHeader = undefined;\n };\n /**\n * Destroys the managed resources.\n *\n * @private\n * @returns {void}\n */\n SelectionRowFormat.prototype.destroy = function () {\n this.heightIn = undefined;\n this.heightTypeIn = undefined;\n this.allowRowBreakAcrossPagesIn = undefined;\n this.isHeaderIn = undefined;\n this.selection = undefined;\n };\n return SelectionRowFormat;\n}());\nexport { SelectionRowFormat };\n/**\n * Selection image format implementation\n */\nvar SelectionImageFormat = /** @class */ (function () {\n /**\n * @param {Selection} selection - Specifies selecion module\n * @private\n */\n function SelectionImageFormat(selection) {\n this.selection = selection;\n }\n Object.defineProperty(SelectionImageFormat.prototype, \"width\", {\n /**\n * Gets the width of the image.\n *\n * @aspType int\n * @returns {number} - Returns image width\n */\n get: function () {\n if (this.image) {\n return this.image.width;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionImageFormat.prototype, \"height\", {\n /**\n * Gets the height of the image.\n *\n * @aspType int\n * @returns {number} - Returns image height\n */\n get: function () {\n if (this.image) {\n return this.image.height;\n }\n return 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionImageFormat.prototype, \"alternateText\", {\n /**\n * Gets the alternateText of the image.\n *\n * @aspType string\n * @returns {string} - Returns image alternateText\n */\n get: function () {\n if (this.image) {\n return this.image.alternateText;\n }\n return null;\n },\n /**\n * Sets the alternateText of the image.\n *\n * @aspType string\n * @returns {string} - Returns image alternateText\n */\n set: function (value) {\n if (value === this.alternateText) {\n return;\n }\n this.image.alternateText = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Resizes the image based on given size.\n *\n * @param {number} width - Specified the image width\n * @param {number} height - Specifies the image height\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.resize = function (width, height) {\n this.updateImageFormat(width, height, this.alternateText);\n };\n /**\n * update the image based on given alternateText.\n *\n * @param {string} alternateText - Specified the image alternateText\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.applyImageAlternativeText = function (alternateText) {\n this.updateImageFormat(this.width, this.height, alternateText);\n };\n /**\n * Update image width and height\n *\n * @param {number} width - Specified the image width\n * @param {number} height - Specifies the image height\n * @param {string} alternateText - Specofies the image alternateText\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.updateImageFormat = function (width, height, alternateText) {\n if (this.image) {\n if (this.selection.owner.editorModule) {\n this.selection.owner.editorModule.onImageFormat(this.image, width, height, alternateText);\n }\n }\n };\n /**\n * @param {ImageElementBox} image - Specifies image element box\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.copyImageFormat = function (image) {\n this.image = image;\n };\n /**\n * @private\n * @returns {void}\n */\n SelectionImageFormat.prototype.clearImageFormat = function () {\n this.image = undefined;\n };\n return SelectionImageFormat;\n}());\nexport { SelectionImageFormat };\n/**\n * Selection column format\n */\nvar SelectionColumnFormat = /** @class */ (function () {\n /**\n * @param selection\n * @private\n */\n function SelectionColumnFormat(selection) {\n this.widthIn = 0;\n this.spaceIn = 0;\n this.selection = selection;\n }\n /**\n * Copies the format.\n *\n * @private\n * @param {WColumnFormat} format - Source Format to copy.\n * @returns {void}\n */\n SelectionColumnFormat.prototype.copyFormat = function (format) {\n this.width = format.width;\n this.space = format.space;\n };\n Object.defineProperty(SelectionColumnFormat.prototype, \"width\", {\n /**\n * Gets or sets the width of the column.\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * Gets or sets the width of the column.\n */\n set: function (value) {\n if (value === this.widthIn) {\n return;\n }\n this.widthIn = value;\n //this.notifyPropertyChanged('width');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionColumnFormat.prototype, \"space\", {\n /**\n * Gets or sets the space in between this column and next column.\n */\n get: function () {\n return this.spaceIn;\n },\n /**\n * Gets or sets the space in between this column and next column.\n */\n set: function (value) {\n if (value === this.spaceIn) {\n return;\n }\n this.spaceIn = value;\n //this.notifyPropertyChanged('space');\n },\n enumerable: true,\n configurable: true\n });\n SelectionColumnFormat.prototype.getPropertyValue = function (property) {\n switch (property) {\n case 'space':\n return this.space;\n case 'width':\n return this.width;\n default:\n return undefined;\n }\n };\n SelectionColumnFormat.prototype.notifyPropertyChanged = function (propertyName) {\n var selection = this.selection;\n if (!isNullOrUndefined(selection)) {\n this.selection.owner.editorModule.onApplyColumnFormat('columns', this.selection.sectionFormat.columns);\n }\n };\n /**\n * Clears the format.\n *\n * @private\n * @returns {void}\n */\n SelectionColumnFormat.prototype.clearFormat = function () {\n this.widthIn = 0;\n this.spaceIn = 0;\n };\n /**\n * Destroys the manages resources.\n *\n * @private\n * @returns {void}\n */\n SelectionColumnFormat.prototype.destroy = function () {\n this.widthIn = undefined;\n this.spaceIn = undefined;\n };\n return SelectionColumnFormat;\n}());\nexport { SelectionColumnFormat };\n/* eslint-enable */\n","/* eslint-disable */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { sectionsProperty, characterFormatProperty, paragraphFormatProperty, listsProperty, abstractListsProperty, nameProperty, boldProperty, italicProperty, underlineProperty, baselineAlignmentProperty, strikethroughProperty, highlightColorProperty, fontSizeProperty, fontColorProperty, fontFamilyProperty, styleNameProperty, allCapsProperty, listIdProperty, listLevelNumberProperty, leftIndentProperty, rightIndentProperty, firstLineIndentProperty, textAlignmentProperty, afterSpacingProperty, beforeSpacingProperty, lineSpacingProperty, lineSpacingTypeProperty, listFormatProperty, bordersProperty, leftMarginProperty, rightMarginProperty, topMarginProperty, bottomMarginProperty, cellWidthProperty, columnSpanProperty, rowSpanProperty, verticalAlignmentProperty, isHeaderProperty, cellSpacingProperty, shadingProperty, tableAlignmentProperty, preferredWidthProperty, preferredWidthTypeProperty, backgroundColorProperty, hasNoneStyleProperty, lineStyleProperty, lineWidthProperty, textProperty, widthProperty, heightProperty, colorProperty, imageStringProperty, topProperty, bottomProperty, rightProperty, leftProperty, fieldTypeProperty, inlinesProperty, cellFormatProperty, rowFormatProperty, cellsProperty, rowsProperty, tableFormatProperty, blocksProperty, listLevelPatternProperty, abstractListIdProperty, levelsProperty, bookmarkTypeProperty, inlineFormatProperty, startAtProperty, characterSpacingProperty, scalingProperty, imagesProperty, Dictionary, isMetaFileProperty, restartLevelProperty, titleProperty, descriptionProperty } from '../../index';\n/**\n * @private\n */\nvar HtmlExport = /** @class */ (function () {\n function HtmlExport() {\n this.document = undefined;\n this.prevListLevel = undefined;\n this.isOrdered = undefined;\n this.keywordIndex = undefined;\n /**\n * @private\n */\n this.fieldCheck = 0;\n /* eslint:enable:no-any */\n }\n HtmlExport.prototype.writeHtml = function (document, isOptimizeSfdt) {\n this.keywordIndex = isOptimizeSfdt ? 1 : 0;\n this.document = document;\n var html = '';\n if (document.hasOwnProperty(imagesProperty[this.keywordIndex])) {\n this.serializeImages(document[imagesProperty[this.keywordIndex]]);\n }\n for (var i = 0; i < document[sectionsProperty[this.keywordIndex]].length; i++) {\n html += this.serializeSection(document[sectionsProperty[this.keywordIndex]][i]);\n }\n return html;\n };\n HtmlExport.prototype.serializeImages = function (data) {\n this.images = new Dictionary();\n for (var img in data) {\n if (Array.isArray(data[\"\" + img])) {\n this.images.add(parseInt(img), data[\"\" + img]);\n }\n else {\n var images = [];\n images.push(data[\"\" + img]);\n this.images.add(parseInt(img), images);\n }\n }\n };\n HtmlExport.prototype.serializeSection = function (section) {\n var string = '';\n var listLevel = undefined;\n var listCloseCount = [];\n for (var i = 0; i < section[blocksProperty[this.keywordIndex]].length; i++) {\n var block = section[blocksProperty[this.keywordIndex]][i];\n if (block.hasOwnProperty(inlinesProperty[this.keywordIndex])) {\n string += this.serializeParagraph(block, listCloseCount);\n listLevel = this.getListLevel(block);\n }\n else if (block.hasOwnProperty(blocksProperty[this.keywordIndex])) {\n string += this.serializeSection(block);\n }\n else {\n string += this.closeList();\n string += this.serializeTable(block);\n }\n }\n if (listCloseCount.length > 0 && (isNullOrUndefined(listLevel) || isNullOrUndefined(this.prevListLevel) || (this.prevListLevel[restartLevelProperty[this.keywordIndex]] === listLevel[restartLevelProperty[this.keywordIndex]] && this.prevListLevel[paragraphFormatProperty[this.keywordIndex]][leftIndentProperty[this.keywordIndex]] === listLevel[paragraphFormatProperty[this.keywordIndex]][leftIndentProperty[this.keywordIndex]]))) {\n while (listCloseCount.length > 0) {\n string += this.closeList();\n listCloseCount.pop();\n }\n }\n string += this.closeList();\n this.prevListLevel = undefined;\n this.isOrdered = undefined;\n return string;\n };\n // Serialize Paragraph\n HtmlExport.prototype.serializeParagraph = function (paragraph, listCloseCount) {\n var blockStyle = '';\n var isList = false;\n var isPreviousList = false;\n var restartLevel = undefined;\n var leftIndent = 0;\n if (!isNullOrUndefined(this.prevListLevel)) {\n isPreviousList = true;\n }\n var tagAttributes = [];\n var listLevel = undefined;\n if (!isNullOrUndefined(paragraph[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]])) {\n listLevel = this.getListLevel(paragraph);\n if (!isPreviousList) {\n this.prevListLevel = listLevel;\n }\n if (this.prevListLevel !== listLevel) {\n isPreviousList = false;\n }\n if (!isNullOrUndefined(listCloseCount) && !isNullOrUndefined(listLevel) && !isNullOrUndefined(this.prevListLevel) && ((this.prevListLevel[restartLevelProperty[this.keywordIndex]] < listLevel[restartLevelProperty[this.keywordIndex]] && this.prevListLevel !== listLevel) || (this.prevListLevel[paragraphFormatProperty[this.keywordIndex]][leftIndentProperty[this.keywordIndex]] !== listLevel[paragraphFormatProperty[this.keywordIndex]][leftIndentProperty[this.keywordIndex]]))) {\n listCloseCount.push(listCloseCount.length);\n restartLevel = this.prevListLevel[restartLevelProperty[this.keywordIndex]];\n leftIndent = this.prevListLevel[paragraphFormatProperty[this.keywordIndex]][leftIndentProperty[this.keywordIndex]];\n }\n this.prevListLevel = listLevel;\n }\n if (!isNullOrUndefined(listCloseCount) && listCloseCount.length > 0 && (isNullOrUndefined(listLevel) || isNullOrUndefined(this.prevListLevel) || (this.prevListLevel[restartLevelProperty[this.keywordIndex]] === restartLevel && this.prevListLevel[paragraphFormatProperty[this.keywordIndex]][leftIndentProperty[this.keywordIndex]] === leftIndent))) {\n while (listCloseCount.length > 0) {\n blockStyle += this.closeList();\n listCloseCount.pop();\n }\n }\n if (!isPreviousList && !(listCloseCount && listCloseCount.length !== 0)) {\n blockStyle += this.closeList();\n }\n if (!isNullOrUndefined(listLevel)) {\n isList = true;\n }\n if (isList && !isPreviousList) {\n blockStyle += this.getHtmlList(listLevel, paragraph[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]][listLevelNumberProperty[this.keywordIndex]]);\n }\n tagAttributes.push('style=\"' + this.serializeParagraphStyle(paragraph, '', isList) + ';' + 'white-space:pre' + '\"');\n if (isList) {\n blockStyle += this.createAttributesTag('li', tagAttributes);\n }\n else {\n this.prevListLevel = undefined;\n this.isOrdered = undefined;\n blockStyle += this.createAttributesTag(this.getStyleName(paragraph[paragraphFormatProperty[this.keywordIndex]][styleNameProperty[this.keywordIndex]]), tagAttributes);\n }\n if (paragraph[inlinesProperty[this.keywordIndex]].length === 0) {\n //Handled to preserve non breaking space for empty paragraphs similar to MS Word behavior.\n blockStyle += ' ';\n }\n else {\n blockStyle = this.serializeInlines(paragraph, blockStyle);\n }\n if (isList) {\n blockStyle += this.endTag('li');\n if (blockStyle.indexOf(' -1) {\n this.isOrdered = false;\n }\n else if (blockStyle.indexOf(' -1) {\n this.isOrdered = true;\n }\n }\n else {\n blockStyle += this.endTag(this.getStyleName(paragraph[paragraphFormatProperty[this.keywordIndex]][styleNameProperty[this.keywordIndex]]));\n }\n return blockStyle;\n };\n HtmlExport.prototype.closeList = function () {\n var blockStyle = '';\n if (!isNullOrUndefined(this.isOrdered)) {\n if (this.isOrdered) {\n blockStyle = this.endTag('ol');\n }\n else {\n blockStyle = this.endTag('ul');\n }\n this.isOrdered = undefined;\n }\n return blockStyle;\n };\n HtmlExport.prototype.getListLevel = function (paragraph) {\n var listLevel = undefined;\n var list = undefined;\n for (var i = 0; i < this.document[listsProperty[this.keywordIndex]].length; i++) {\n if (this.document[listsProperty[this.keywordIndex]][i][listIdProperty[this.keywordIndex]] === paragraph[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]][listIdProperty[this.keywordIndex]]) {\n list = this.document[listsProperty[this.keywordIndex]][i];\n break;\n }\n }\n if (list) {\n for (var j = 0; j < this.document[abstractListsProperty[this.keywordIndex]].length; j++) {\n if (this.document[abstractListsProperty[this.keywordIndex]][j][abstractListIdProperty[this.keywordIndex]] === list[abstractListIdProperty[this.keywordIndex]]) {\n var levelNumber = paragraph[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]][listLevelNumberProperty[this.keywordIndex]];\n listLevel = this.document[abstractListsProperty[this.keywordIndex]][j][levelsProperty[this.keywordIndex]][levelNumber];\n break;\n }\n }\n }\n return listLevel;\n };\n HtmlExport.prototype.getHtmlList = function (listLevel, levelNumer) {\n //if (start == null || (start != null && start.Paragraph != this)) {\n // let block: BlockAdv = this.GetPreviousBlock();\n // if (block instanceof ParagraphAdv) {\n // let previousListLevel: ListLevelAdv = (block as ParagraphAdv).ParagraphFormat.ListFormat.ListLevel;\n // if (previousListLevel == listLevel)\n // return \"\";\n // }\n //}\n var html = '';\n if (listLevel[listLevelPatternProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 10 : 'Bullet')) {\n html += '
    ';\n }\n return html;\n };\n //SerializeInlines\n HtmlExport.prototype.serializeInlines = function (paragraph, blockStyle) {\n var inline = undefined;\n var i = 0;\n while (paragraph[inlinesProperty[this.keywordIndex]].length > i) {\n inline = paragraph[inlinesProperty[this.keywordIndex]][i];\n if (inline.hasOwnProperty(inlinesProperty[this.keywordIndex])) {\n blockStyle = this.serializeContentInlines(inline, blockStyle);\n i++;\n continue;\n }\n if (inline.hasOwnProperty(imageStringProperty[this.keywordIndex])) {\n blockStyle += this.serializeImageContainer(inline);\n }\n else if (inline.hasOwnProperty(fieldTypeProperty[this.keywordIndex])) {\n if (inline[fieldTypeProperty[this.keywordIndex]] === 0) {\n var fieldCode = paragraph[inlinesProperty[this.keywordIndex]][i + 1];\n if (isNullOrUndefined(fieldCode[textProperty[this.keywordIndex]])) {\n fieldCode = paragraph[inlinesProperty[this.keywordIndex]][i + 2];\n }\n if (!isNullOrUndefined(fieldCode) && !isNullOrUndefined(fieldCode[textProperty[this.keywordIndex]]) &&\n (fieldCode[textProperty[this.keywordIndex]].indexOf('TOC') >= 0 || fieldCode[textProperty[this.keywordIndex]].indexOf('HYPERLINK') >= 0)) {\n this.fieldCheck = 1;\n var tagAttributes = [];\n tagAttributes.push('style=\"' + this.serializeInlineStyle(inline[characterFormatProperty[this.keywordIndex]]) + '\"');\n blockStyle += this.createAttributesTag('a', tagAttributes);\n }\n else {\n this.fieldCheck = undefined;\n }\n }\n else if (inline[fieldTypeProperty[this.keywordIndex]] === 2) {\n if (!isNullOrUndefined(this.fieldCheck)) {\n this.fieldCheck = 2;\n }\n else {\n this.fieldCheck = 0;\n }\n }\n else {\n if (!isNullOrUndefined(this.fieldCheck) && this.fieldCheck !== 0) {\n blockStyle += this.endTag('a');\n }\n this.fieldCheck = 0;\n }\n }\n else {\n var text = isNullOrUndefined(inline[textProperty[this.keywordIndex]]) ? '' : inline[textProperty[this.keywordIndex]];\n if (inline.hasOwnProperty(bookmarkTypeProperty[this.keywordIndex])) {\n switch (inline[bookmarkTypeProperty[this.keywordIndex]]) {\n case 0:\n blockStyle += '';\n break;\n case 1:\n blockStyle += '';\n break;\n }\n }\n if (this.fieldCheck === 0) {\n blockStyle += this.serializeSpan(text, inline[characterFormatProperty[this.keywordIndex]]);\n }\n if (this.fieldCheck === 1) {\n var hyperLink = text.replace(/\"/g, '');\n blockStyle += ' href= \\\"' + hyperLink.replace('HYPERLINK', '').trim();\n blockStyle += '\\\"';\n blockStyle += '>';\n }\n if (this.fieldCheck === 2) {\n blockStyle += this.serializeSpan(text, inline[characterFormatProperty[this.keywordIndex]]);\n }\n }\n i++;\n }\n return blockStyle;\n };\n HtmlExport.prototype.serializeContentInlines = function (inline, inlineStyle) {\n inlineStyle = this.serializeInlines(inline, inlineStyle);\n return inlineStyle;\n };\n // Serialize Span\n HtmlExport.prototype.serializeSpan = function (spanText, characterFormat) {\n var spanClass = '';\n if (spanText.indexOf('\\v') !== -1) {\n spanClass += '
    ';\n return spanClass.toString();\n }\n else if (spanText.indexOf('\\f') !== -1) {\n spanClass += '
    ';\n return spanClass.toString();\n }\n var tagAttributes = [];\n this.serializeInlineStyle(characterFormat);\n tagAttributes.push('style=\"' + this.serializeInlineStyle(characterFormat) + '\"');\n spanClass += this.createAttributesTag('span', tagAttributes);\n // Todo: Need to handle it.\n // If the text starts with white-space, need to check whether it is a continuous space.\n // if (characterFormat.ownerBase instanceof WInline) {\n // let inline: WInline = (characterFormat.ownerBase as WInline);\n // if (inline instanceof WSpan && !isNullOrUndefined(inline.text) && inline.text !== '' && (inline as WSpan).text[0] === ' ') {\n // Check previous inline until, it has valid rendered text.\n // do {\n // inline = WInline.getPreviousTextInline((inline as WSpan));\n // } while (inline instanceof WSpan && !isNullOrUndefined(inline.text));\n // } else {\n // inline = undefined;\n // }\n // If current white-space is a continuation of consecutive spaces, this will be set true.\n // ignoreFirstSpace = inline instanceof WSpan && !isNullOrUndefined(inline.text)\n // && (inline as WSpan).text[(inline as WSpan).text.length - 1] === ' ';\n // }\n var text = this.decodeHtmlNames(spanText.toString());\n // if (text.length === 0) {\n // text = ' ';\n // }\n spanClass += text;\n spanClass += this.endTag('span');\n return spanClass.toString();\n };\n /**\n * @private\n * @param {string} style - style name.\n * @returns {string} - return heading tag.\n */\n HtmlExport.prototype.getStyleName = function (style) {\n switch (style) {\n case 'Heading 1':\n return 'h1';\n case 'Heading 2':\n return 'h2';\n case 'Heading 3':\n return 'h3';\n case 'Heading 4':\n return 'h4';\n case 'Heading 5':\n return 'h5';\n default:\n return 'p';\n }\n };\n //Serialize Image\n HtmlExport.prototype.serializeImageContainer = function (image) {\n var imageStyle = '';\n var tagAttributes = [];\n this.serializeInlineStyle(image[characterFormatProperty[this.keywordIndex]]);\n var imageSource = '';\n if (!isNullOrUndefined(image[imageStringProperty[this.keywordIndex]])) {\n var base64ImageString = this.images.get(parseInt(image[imageStringProperty[this.keywordIndex]]));\n imageSource = base64ImageString[HelperMethods.parseBoolValue(image[isMetaFileProperty[this.keywordIndex]]) ? 1 : 0];\n }\n var width = HelperMethods.convertPointToPixel(image[widthProperty[this.keywordIndex]]);\n var height = HelperMethods.convertPointToPixel(image[heightProperty[this.keywordIndex]]);\n tagAttributes.push('width=\"' + width.toString() + '\"');\n tagAttributes.push('height=\"' + height.toString() + '\"');\n tagAttributes.push('src=\"' + imageSource + '\"');\n imageStyle += this.createAttributesTag('img', tagAttributes);\n imageStyle += (this.endTag('img'));\n return imageStyle.toString();\n };\n // Serialize Table Cell\n HtmlExport.prototype.serializeCell = function (cell, row) {\n var blockStyle = '';\n var tagAttributes = [];\n var cellHtml = '';\n tagAttributes = [];\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]])) {\n //if (cell.cellFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]][backgroundColorProperty[this.keywordIndex]]) && cell[cellFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]][backgroundColorProperty[this.keywordIndex]] !== 'empty') {\n tagAttributes.push('bgcolor=\"' + HelperMethods.getColor(cell[cellFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]][backgroundColorProperty[this.keywordIndex]]) + '\"');\n }\n // }\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][columnSpanProperty[this.keywordIndex]]) && cell[cellFormatProperty[this.keywordIndex]][columnSpanProperty[this.keywordIndex]] > 1) {\n tagAttributes.push('colspan=\"' + cell[cellFormatProperty[this.keywordIndex]][columnSpanProperty[this.keywordIndex]].toString() + '\"');\n }\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][rowSpanProperty[this.keywordIndex]]) && cell[cellFormatProperty[this.keywordIndex]][rowSpanProperty[this.keywordIndex]] > 1) {\n tagAttributes.push('rowspan=\"' + cell[cellFormatProperty[this.keywordIndex]][rowSpanProperty[this.keywordIndex]].toString() + '\"');\n }\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][cellWidthProperty[this.keywordIndex]]) && cell[cellFormatProperty[this.keywordIndex]][cellWidthProperty[this.keywordIndex]] !== 0) {\n var cellWidth = HelperMethods.convertPointToPixel(cell[cellFormatProperty[this.keywordIndex]][cellWidthProperty[this.keywordIndex]]);\n tagAttributes.push('width=\"' + cellWidth.toString() + '\"');\n }\n var cellAlignment = isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]]) ? 'top' :\n this.convertVerticalAlignment(cell[cellFormatProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]]);\n tagAttributes.push('valign=\"' + cellAlignment + '\"');\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][leftMarginProperty[this.keywordIndex]]) && cell[cellFormatProperty[this.keywordIndex]][leftMarginProperty[this.keywordIndex]] !== 0) {\n cellHtml += ('padding-left:' + cell[cellFormatProperty[this.keywordIndex]][leftMarginProperty[this.keywordIndex]].toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][rightMarginProperty[this.keywordIndex]]) && cell[cellFormatProperty[this.keywordIndex]][rightMarginProperty[this.keywordIndex]] !== 0) {\n cellHtml += ('padding-right:' + cell[cellFormatProperty[this.keywordIndex]][rightMarginProperty[this.keywordIndex]].toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][topMarginProperty[this.keywordIndex]]) && cell[cellFormatProperty[this.keywordIndex]][topMarginProperty[this.keywordIndex]] !== 0) {\n cellHtml += ('padding-top:' + cell[cellFormatProperty[this.keywordIndex]][topMarginProperty[this.keywordIndex]].toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][bottomMarginProperty[this.keywordIndex]]) && cell[cellFormatProperty[this.keywordIndex]][bottomMarginProperty[this.keywordIndex]] !== 0) {\n cellHtml += ('padding-bottom:' + cell[cellFormatProperty[this.keywordIndex]][bottomMarginProperty[this.keywordIndex]].toString() + 'pt;');\n }\n if (!isNullOrUndefined(cell[cellFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]])) {\n cellHtml += this.serializeCellBordersStyle(cell[cellFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]], row);\n }\n }\n if (cellHtml.length !== 0) {\n tagAttributes.push('style=\"' + cellHtml + '\"');\n }\n blockStyle += (this.createAttributesTag('td', tagAttributes));\n for (var k = 0; k < cell[blocksProperty[this.keywordIndex]].length; k++) {\n var block = cell[blocksProperty[this.keywordIndex]][k];\n if (block.hasOwnProperty(rowsProperty[this.keywordIndex])) {\n blockStyle += this.serializeTable(block);\n }\n else {\n blockStyle += this.serializeParagraph(block);\n }\n }\n blockStyle += (this.endTag('td'));\n return blockStyle;\n };\n HtmlExport.prototype.convertVerticalAlignment = function (cellVerticalAlignment) {\n switch (cellVerticalAlignment) {\n case 'Center':\n case 1:\n return 'middle';\n case 'Bottom':\n case 2:\n return 'bottom';\n default:\n return 'top';\n }\n };\n // Serialize Table\n HtmlExport.prototype.serializeTable = function (table) {\n var html = '';\n html += this.createTableStartTag(table);\n for (var j = 0; j < table[rowsProperty[this.keywordIndex]].length; j++) {\n html += this.serializeRow(table[rowsProperty[this.keywordIndex]][j]);\n }\n html += this.createTableEndTag();\n return html;\n };\n // Serialize Row\n HtmlExport.prototype.serializeRow = function (row) {\n var html = '';\n html += this.createRowStartTag(row);\n for (var k = 0; k < row[cellsProperty[this.keywordIndex]].length; k++) {\n html += this.serializeCell(row[cellsProperty[this.keywordIndex]][k], row);\n }\n return html;\n };\n // Serialize Styles\n HtmlExport.prototype.serializeParagraphStyle = function (paragraph, className, isList, keywordIndex) {\n var paragraphClass = '';\n var editor;\n if (isNullOrUndefined(this.keywordIndex)) {\n this.keywordIndex = keywordIndex;\n }\n if (paragraph[inlinesProperty[this.keywordIndex]].length > 0) {\n paragraphClass += this.serializeCharacterFormat(paragraph[characterFormatProperty[this.keywordIndex]]);\n }\n var isEmptyLine = false;\n if (paragraph[inlinesProperty[this.keywordIndex]].length == 0) {\n isEmptyLine = true;\n }\n paragraphClass += this.serializeCharacterFormat(paragraph[characterFormatProperty[this.keywordIndex]], isEmptyLine);\n paragraphClass += this.serializeParagraphFormat(paragraph[paragraphFormatProperty[this.keywordIndex]], isList);\n return paragraphClass;\n };\n HtmlExport.prototype.serializeInlineStyle = function (characterFormat) {\n return this.serializeCharacterFormat(characterFormat);\n };\n HtmlExport.prototype.serializeTableBorderStyle = function (borders) {\n var borderStyle = '';\n var border = {};\n //LeftBorder\n border = borders[leftProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'left');\n }\n else if (!isNullOrUndefined(border) && HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]])) {\n borderStyle += ('border-left-style:none;');\n }\n //TopBorder\n border = borders[topProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'top');\n }\n else if (!isNullOrUndefined(border) && HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]])) {\n borderStyle += ('border-top-style:none;');\n }\n //RightBorder\n border = borders[rightProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'right');\n }\n else if (!isNullOrUndefined(border) && HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]])) {\n borderStyle += ('border-right-style:none;');\n }\n //BottomBorder\n border = borders[bottomProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'bottom');\n }\n else if (!isNullOrUndefined(border) && HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]])) {\n borderStyle += ('border-bottom-style:none;');\n }\n return borderStyle;\n };\n HtmlExport.prototype.serializeCellBordersStyle = function (borders, row) {\n var borderStyle = '';\n //borderStyle = 'border:solid 1px;';\n // if (borders.left.color) {\n // borderStyle += ('border-left-color:' + HelperMethods.getColor(borders.left.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.left, 'left');\n // if (!isNullOrUndefined(borders.right.color)) {\n // borderStyle += ('border-right-color:' + HelperMethods.getColor(borders.right.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.right, 'right');\n // if (!isNullOrUndefined(borders.top.color)) {\n // borderStyle += ('border-top-color:' + HelperMethods.getColor(borders.top.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.top, 'top');\n // if (!isNullOrUndefined(borders.bottom.color)) {\n // borderStyle += ('border-bottom-color:' + HelperMethods.getColor(borders.bottom.color));\n // borderStyle += ';';\n // }\n // borderStyle += this.serializeBorderStyle(borders.bottom, 'bottom');\n var border = {};\n //LeftBorder\n border = borders[leftProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'left');\n }\n else if (!isNullOrUndefined(border) && HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]])) {\n borderStyle += ('border-left-style:none;');\n }\n else if (!isNullOrUndefined(row[rowFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]][leftProperty[this.keywordIndex]])) {\n border = row[rowFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]][leftProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'left');\n }\n }\n //TopBorder\n border = borders[topProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'top');\n }\n else if (!isNullOrUndefined(border) && HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]])) {\n borderStyle += ('border-top-style:none;');\n }\n else if (!isNullOrUndefined(row[rowFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]][topProperty[this.keywordIndex]])) {\n border = row[rowFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]][topProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'top');\n }\n }\n //RightBorder\n border = borders[rightProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'right');\n }\n else if (!isNullOrUndefined(border) && HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]])) {\n borderStyle += ('border-right-style:none;');\n }\n else if (!isNullOrUndefined(row[rowFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]][rightProperty[this.keywordIndex]])) {\n border = row[rowFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]][rightProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'right');\n }\n }\n //BottomBorder\n border = borders[bottomProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'bottom');\n }\n else if (!isNullOrUndefined(border) && HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]])) {\n borderStyle += ('border-bottom-style:none;');\n }\n else if (!isNullOrUndefined(row[rowFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]][bottomProperty[this.keywordIndex]])) {\n border = row[rowFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]][bottomProperty[this.keywordIndex]];\n if (!isNullOrUndefined(border) && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 1 : 'None') && border[lineStyleProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n border[colorProperty[this.keywordIndex]] = isNullOrUndefined(border[colorProperty[this.keywordIndex]]) ? \"#000000\" : border[colorProperty[this.keywordIndex]];\n border[lineWidthProperty[this.keywordIndex]] = isNullOrUndefined(border[lineWidthProperty[this.keywordIndex]]) ? 0.5 : border[lineWidthProperty[this.keywordIndex]];\n borderStyle += this.serializeBorderStyle(border, 'bottom');\n }\n }\n return borderStyle;\n };\n HtmlExport.prototype.serializeBorderStyle = function (border, borderPosition) {\n var borderStyle = '';\n borderStyle += ('border-' + borderPosition + '-style:' + this.convertBorderLineStyle(border[lineStyleProperty[this.keywordIndex]]));\n borderStyle += ';';\n if (border[lineWidthProperty[this.keywordIndex]] > 0) {\n borderStyle += ('border-' + borderPosition + '-width:' + border[lineWidthProperty[this.keywordIndex]].toString() + 'pt;');\n }\n //if (border.color !== Color.FromArgb(0, 0, 0, 0))\n if (!isNullOrUndefined(border[colorProperty[this.keywordIndex]])) {\n borderStyle += ('border-' + borderPosition + '-color:' + HelperMethods.getColor(border[colorProperty[this.keywordIndex]]) + ';');\n }\n return borderStyle;\n };\n HtmlExport.prototype.convertBorderLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'Single':\n case 0:\n return 'solid';\n case 'None':\n case 1:\n return 'none';\n case 'Dot':\n case 2:\n return 'dotted';\n case 'DashSmallGap':\n case 'DashLargeGap':\n case 'DashDot':\n case 'DashDotDot':\n case 3:\n case 4:\n case 5:\n case 6:\n return 'dashed';\n case 'Double':\n case 'Triple':\n case 'ThinThickSmallGap':\n case 'ThickThinSmallGap':\n case 'ThinThickThinSmallGap':\n case 'ThinThickMediumGap':\n case 'ThickThinMediumGap':\n case 'ThinThickThinMediumGap':\n case 'ThinThickLargeGap':\n case 'ThickThinLargeGap':\n case 'ThinThickThinLargeGap':\n case 7:\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n case 16:\n case 17:\n return 'double';\n case 'SingleWavy':\n case 18:\n return 'solid';\n case 'DoubleWavy':\n case 19:\n return 'double';\n case 'DashDotStroked':\n case 20:\n return 'solid';\n case 'Emboss3D':\n case 21:\n return 'ridge';\n case 'Engrave3D':\n case 22:\n return 'groove';\n case 'Outset':\n case 23:\n return 'outset';\n case 'Inset':\n case 24:\n return 'inset';\n default:\n return 'solid';\n }\n };\n // Serialize Format\n HtmlExport.prototype.serializeCharacterFormat = function (characterFormat, isEmptyLine) {\n if (!isNullOrUndefined(characterFormat[inlineFormatProperty[this.keywordIndex]])) {\n return this.serializeCharacterFormat(characterFormat[inlineFormatProperty[this.keywordIndex]], isEmptyLine);\n }\n var propertyValue;\n var charStyle = '';\n charStyle += 'font-weight';\n charStyle += ':';\n charStyle += HelperMethods.parseBoolValue(characterFormat[boldProperty[this.keywordIndex]]) ? 'bold' : 'normal';\n charStyle += ';';\n charStyle += 'font-style';\n charStyle += ':';\n if (HelperMethods.parseBoolValue(characterFormat[italicProperty[this.keywordIndex]])) {\n charStyle += 'italic';\n }\n else {\n charStyle += 'normal';\n }\n charStyle += ';';\n charStyle += this.serializeTextDecoration(characterFormat);\n //Text Baseline Alignment\n if (characterFormat[baselineAlignmentProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 1 : 'Superscript') || characterFormat[baselineAlignmentProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 2 : 'Subscript')) {\n charStyle += 'vertical-align';\n charStyle += ':';\n charStyle += characterFormat[baselineAlignmentProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 1 : 'Superscript') ? 'super' : 'sub';\n charStyle += ';';\n }\n //Text Foreground and Background Color\n if (!isNullOrUndefined(characterFormat[highlightColorProperty[this.keywordIndex]]) && characterFormat[highlightColorProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 0 : 'NoColor') && !isEmptyLine) {\n charStyle += 'background-color';\n charStyle += ':';\n charStyle += this.keywordIndex == 1 ? this.getHighlightColorCode(characterFormat[highlightColorProperty[this.keywordIndex]]) : HelperMethods.getHighlightColorCode(characterFormat.highlightColor.toString());\n charStyle += ';';\n }\n //Font Color\n propertyValue = characterFormat[fontColorProperty[this.keywordIndex]];\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'color';\n charStyle += ':';\n charStyle += HelperMethods.getColor(propertyValue);\n charStyle += ';';\n }\n if (!isNullOrUndefined(characterFormat[allCapsProperty[this.keywordIndex]]) && HelperMethods.parseBoolValue(characterFormat[allCapsProperty[this.keywordIndex]])) {\n charStyle += 'text-transform';\n charStyle += ':';\n charStyle += 'uppercase';\n charStyle += ';';\n }\n propertyValue = characterFormat[fontSizeProperty[this.keywordIndex]];\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-size';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += 'pt';\n charStyle += ';';\n }\n propertyValue = characterFormat[fontFamilyProperty[this.keywordIndex]];\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'font-family';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += ';';\n }\n propertyValue = characterFormat[characterSpacingProperty[this.keywordIndex]];\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'letter-spacing';\n charStyle += ':';\n charStyle += propertyValue.toString();\n charStyle += 'pt';\n charStyle += ';';\n }\n propertyValue = characterFormat[scalingProperty[this.keywordIndex]];\n if (!isNullOrUndefined(propertyValue)) {\n charStyle += 'transform:scaleX(';\n charStyle += (propertyValue / 100).toString();\n charStyle += ')';\n charStyle += ';';\n }\n return charStyle.toString();\n };\n HtmlExport.prototype.serializeTextDecoration = function (characterFormat) {\n var charStyle = 'text-decoration:';\n var value = '';\n // Double strike through will become Single strike through while saving HTML using MS Word.\n if (characterFormat[strikethroughProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 1 : 'SingleStrike') || characterFormat[strikethroughProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 2 : 'DoubleStrike')) {\n value += 'line-through ';\n }\n if (!isNullOrUndefined(characterFormat[underlineProperty[this.keywordIndex]]) && characterFormat[underlineProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 0 : 'None')) {\n value += 'underline';\n }\n if (value.length > 1) {\n value = charStyle + value + ';';\n }\n return value;\n };\n /**\n * @private\n */\n HtmlExport.prototype.serializeParagraphFormat = function (paragraphFormat, isList, keywordIndex) {\n if (isNullOrUndefined(this.keywordIndex)) {\n this.keywordIndex = keywordIndex;\n }\n if (!isNullOrUndefined(paragraphFormat[inlineFormatProperty[this.keywordIndex]])) {\n return this.serializeParagraphFormat(paragraphFormat[inlineFormatProperty[this.keywordIndex]], isList);\n }\n var propertyValue;\n var paraStyle = '';\n propertyValue = this.getTextAlignment(paragraphFormat[textAlignmentProperty[this.keywordIndex]]);\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'text-align:' + propertyValue.toLowerCase() + ';';\n }\n propertyValue = paragraphFormat[beforeSpacingProperty[this.keywordIndex]];\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-top:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat[rightIndentProperty[this.keywordIndex]];\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-right:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat[afterSpacingProperty[this.keywordIndex]];\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-bottom:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat[leftIndentProperty[this.keywordIndex]];\n if (isList) {\n // if (isNullOrUndefined(propertyValue)) {\n // propertyValue = -36;\n // } else {\n // propertyValue -= 36;\n // }\n propertyValue = 0;\n }\n if (!isNullOrUndefined(propertyValue)) {\n paraStyle += 'margin-left:' + propertyValue.toString() + 'pt; ';\n }\n propertyValue = paragraphFormat[firstLineIndentProperty[this.keywordIndex]];\n if (isList) {\n // if (isNullOrUndefined(propertyValue)) {\n // propertyValue = 18;\n // } else {\n // propertyValue += 18;\n // }\n propertyValue = 0;\n }\n if (!isNullOrUndefined(propertyValue) && propertyValue !== 0) {\n paraStyle += 'text-indent:' + propertyValue.toString() + 'pt;';\n }\n propertyValue = paragraphFormat[lineSpacingProperty[this.keywordIndex]];\n if (!isNullOrUndefined(propertyValue)) {\n if (paragraphFormat[lineSpacingTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Multiple')) {\n propertyValue = Math.round(propertyValue * 10) / 10;\n }\n else {\n propertyValue = propertyValue.toString() + 'pt;';\n }\n paraStyle += 'line-height:' + propertyValue;\n }\n return paraStyle.toString();\n };\n HtmlExport.prototype.createAttributesTag = function (tagValue, localProperties) {\n var sb = '';\n sb += '<';\n sb += tagValue;\n for (var i = 0; i < localProperties.length; i++) {\n sb += ' ';\n sb += localProperties[i];\n }\n if (tagValue !== 'a') {\n sb += '>';\n }\n return sb;\n };\n HtmlExport.prototype.createTag = function (tagValue) {\n var s = '';\n s += '<';\n s += tagValue;\n s += '>';\n return s;\n };\n HtmlExport.prototype.endTag = function (tagValue) {\n var sb = '';\n sb += '<';\n sb += '/';\n sb += tagValue;\n sb += '>';\n return sb;\n };\n HtmlExport.prototype.createTableStartTag = function (table) {\n var blockStyle = '';\n var tableStyle = '';\n var tagAttributes = [];\n //tagAttributes.push('border=\"' + '1\"');\n if (!isNullOrUndefined(table[tableFormatProperty[this.keywordIndex]])) {\n //if (table.tableFormat.shading.backgroundColor !== Color.FromArgb(0, 0, 0, 0)) {\n if (!isNullOrUndefined(table[tableFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]]) && !isNullOrUndefined(table[tableFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]][backgroundColorProperty[this.keywordIndex]]) && table[tableFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]][backgroundColorProperty[this.keywordIndex]] !== 'empty') {\n tagAttributes.push('bgcolor=\"' + HelperMethods.getColor(table[tableFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]][backgroundColorProperty[this.keywordIndex]]) + '\"');\n }\n //}\n if (!isNullOrUndefined(table[tableFormatProperty[this.keywordIndex]][cellSpacingProperty[this.keywordIndex]]) && table[tableFormatProperty[this.keywordIndex]][cellSpacingProperty[this.keywordIndex]] > 0) {\n tagAttributes.push('cellspacing=\"' + (((table[tableFormatProperty[this.keywordIndex]][cellSpacingProperty[this.keywordIndex]] * 72) / 96) * 2).toString() + '\"');\n }\n else {\n tableStyle += ('border-collapse:collapse;');\n }\n tagAttributes.push('cellpadding=\"' + '0\"');\n //Table title property\n if (!isNullOrUndefined(table[titleProperty[this.keywordIndex]])) {\n tagAttributes.push('title=\"' + table[titleProperty[this.keywordIndex]] + '\"');\n }\n //Table description property\n if (!isNullOrUndefined(table[descriptionProperty[this.keywordIndex]])) {\n tagAttributes.push('summary=\"' + table[descriptionProperty[this.keywordIndex]] + '\"');\n }\n if (!isNullOrUndefined(table[tableFormatProperty[this.keywordIndex]][leftIndentProperty[this.keywordIndex]]) && table[tableFormatProperty[this.keywordIndex]][leftIndentProperty[this.keywordIndex]] !== 0 &&\n table[tableFormatProperty[this.keywordIndex]][tableAlignmentProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Left')) {\n tableStyle += 'margin-left:' + (table[tableFormatProperty[this.keywordIndex]][leftIndentProperty[this.keywordIndex]].toString() + 'pt;');\n }\n if (!isNullOrUndefined(table[tableFormatProperty[this.keywordIndex]])) {\n tableStyle += this.serializeTableWidth(table[tableFormatProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(table[tableFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]])) {\n tableStyle += this.serializeTableBorderStyle(table[tableFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]]);\n }\n }\n if (tableStyle.length !== 0) {\n tagAttributes.push('style=\"', tableStyle.toString() + '\"');\n }\n return blockStyle += (this.createAttributesTag('table', tagAttributes));\n };\n HtmlExport.prototype.serializeTableWidth = function (tableFormat) {\n var width = '';\n switch (tableFormat[preferredWidthTypeProperty[this.keywordIndex]]) {\n case 'Percent':\n case 1:\n width += 'width: ' + tableFormat[preferredWidthProperty[this.keywordIndex]].toString() + '%;';\n break;\n case 'Point':\n case 2:\n width += 'width: ' + tableFormat[preferredWidthProperty[this.keywordIndex]].toString() + 'pt;';\n break;\n case 'Auto':\n case 0:\n width += 'width: auto;';\n break;\n }\n return width;\n };\n HtmlExport.prototype.getHighlightColorCode = function (highlightColor) {\n var color = '#ffffff';\n switch (highlightColor) {\n case 1:\n color = '#ffff00';\n break;\n case 2:\n color = '#00ff00';\n break;\n case 3:\n color = '#00ffff';\n break;\n case 4:\n color = '#ff00ff';\n break;\n case 5:\n color = '#0000ff';\n break;\n case 6:\n color = '#ff0000';\n break;\n case 7:\n color = '#000080';\n break;\n case 8:\n color = '#008080';\n break;\n case 9:\n color = '#008000';\n break;\n case 10:\n color = '#800080';\n break;\n case 11:\n color = '#800000';\n break;\n case 12:\n color = '#808000';\n break;\n case 13:\n color = '#808080';\n break;\n case 14:\n color = '#c0c0c0';\n break;\n case 15:\n color = '#000000';\n break;\n }\n return color;\n };\n HtmlExport.prototype.getTextAlignment = function (textAlignment) {\n switch (textAlignment) {\n case 1:\n return 'Center';\n case 2:\n return 'Right';\n case 3:\n return 'Justify';\n default:\n return 'Left';\n }\n };\n HtmlExport.prototype.createTableEndTag = function () {\n var blockStyle = '';\n blockStyle += (this.endTag('table'));\n return blockStyle;\n };\n HtmlExport.prototype.createRowStartTag = function (row) {\n var blockStyle = '';\n var tagAttributes = [];\n if (HelperMethods.parseBoolValue(row[rowFormatProperty[this.keywordIndex]][isHeaderProperty[this.keywordIndex]])) {\n blockStyle += (this.createTag('thead'));\n }\n if (!isNullOrUndefined(row[rowFormatProperty[this.keywordIndex]][heightProperty[this.keywordIndex]]) && row[rowFormatProperty[this.keywordIndex]][heightProperty[this.keywordIndex]] > 0) {\n var height = HelperMethods.convertPointToPixel(row[rowFormatProperty[this.keywordIndex]][heightProperty[this.keywordIndex]]);\n tagAttributes.push('height=\"' + height + '\"');\n }\n return blockStyle + this.createAttributesTag('tr', tagAttributes);\n };\n HtmlExport.prototype.createRowEndTag = function (row) {\n var blockStyle = '';\n blockStyle += (this.endTag('tr'));\n if (HelperMethods.parseBoolValue(row[rowFormatProperty[this.keywordIndex]][isHeaderProperty[this.keywordIndex]])) {\n blockStyle += (this.endTag('thead'));\n }\n return blockStyle;\n };\n HtmlExport.prototype.decodeHtmlNames = function (text) {\n if (text === '\\t') {\n return ' ';\n }\n text = text.replace(//g, '>');\n var splittedText = text.split(' ');\n var htmlText = '';\n if (splittedText.length > 0) {\n htmlText = splittedText[0];\n for (var i = 0; i < splittedText.length - 1; i++) {\n htmlText += ' ' + splittedText[i + 1];\n }\n }\n return htmlText;\n };\n return HtmlExport;\n}());\nexport { HtmlExport };\n","import { Widget, BodyWidget, TableRowWidget, TableWidget, LineWidget, ElementBox, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockContainer, BookmarkElementBox, CommentCharacterElementBox } from '../index';\nimport { HelperMethods } from '../index';\nimport { Point } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/* eslint-disable */\n/**\n * @private\n */\nvar TextPosition = /** @class */ (function () {\n function TextPosition(owner) {\n /**\n * @private\n */\n this.location = new Point(0, 0);\n /**\n * @private\n */\n this.isUpdateLocation = true;\n this.owner = owner;\n this.documentHelper = this.owner.documentHelper;\n }\n Object.defineProperty(TextPosition.prototype, \"paragraph\", {\n /**\n * @private\n */\n get: function () {\n return this.currentWidget.paragraph;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphStart\", {\n /**\n * @private\n */\n get: function () {\n return this.offset === this.owner.selectionModule.getStartOffset(this.paragraph);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isAtParagraphEnd\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selectionModule.isParagraphLastLine(this.currentWidget)\n && this.offset === this.owner.selectionModule.getLineLength(this.currentWidget);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"isCurrentParaBidi\", {\n /**\n * @private\n */\n get: function () {\n if (!isNullOrUndefined(this.currentWidget.paragraph)) {\n return this.currentWidget.paragraph.paragraphFormat.bidi;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"selection\", {\n /**\n * @private\n */\n get: function () {\n return this.owner.selectionModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"hierarchicalPosition\", {\n /**\n * Gets the hierarchical position of logical text position in the document\n *\n * @returns {string}\n */\n get: function () {\n return this.getHierarchicalIndexInternal();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextPosition.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Return clone of current text position\n *\n * @private\n */\n TextPosition.prototype.clone = function () {\n var textPosition = new TextPosition(this.owner);\n textPosition.currentWidget = this.currentWidget;\n textPosition.offset = this.offset;\n textPosition.location = this.location;\n return textPosition;\n };\n /**\n * @private\n */\n TextPosition.prototype.containsRtlText = function (widget) {\n for (var i = 0; i < widget.children.length; i++) {\n if (widget.children[i].isRightToLeft) {\n return true;\n }\n }\n return false;\n };\n /**\n * Set text position for paragraph and inline\n *\n * @private\n */\n TextPosition.prototype.setPositionForSelection = function (line, element, index, physicalLocation) {\n //Set the start end position\n var isParagraphEnd = false;\n if (isNullOrUndefined(element)) {\n this.currentWidget = line;\n }\n else {\n this.currentWidget = element.line;\n if (element.nextNode instanceof FieldElementBox && index > element.length) {\n isParagraphEnd = this.selection.isLastRenderedInline(element, element.length);\n }\n }\n this.location = physicalLocation;\n if (isParagraphEnd) {\n this.offset = this.selection.getParagraphLength(this.currentWidget.paragraph) + 1;\n }\n else {\n this.offset = this.currentWidget.getOffset(element, index);\n }\n };\n /**\n * Set text position\n *\n * @private\n */\n TextPosition.prototype.setPositionFromLine = function (line, offset, location) {\n this.currentWidget = line;\n this.offset = offset;\n if (location instanceof Point) {\n this.location.copy(location);\n }\n };\n /**\n * Set text position\n *\n * @private\n */\n TextPosition.prototype.setPosition = function (line, positionAtStart) {\n this.currentWidget = line;\n this.offset = positionAtStart ? this.selection.getStartOffset(line.paragraph)\n : line.paragraph.lastChild.getEndOffset() + 1;\n this.updatePhysicalPosition(true);\n };\n /**\n * Set position for text position\n *\n * @private\n */\n TextPosition.prototype.setPositionInternal = function (textPosition) {\n this.currentWidget = textPosition.currentWidget;\n this.offset = textPosition.offset;\n this.location = textPosition.location;\n };\n /**\n * Set position for current index\n *\n * @private\n */\n TextPosition.prototype.setPositionForCurrentIndex = function (hierarchicalIndex) {\n var index = { index: hierarchicalIndex };\n var paragraph = this.getParagraphWidget(index); //ref hierarchicalIndex\n this.offset = parseFloat(index.index);\n this.setPositionParagraph(paragraph, this.offset);\n };\n /**\n * Get Page\n *\n */\n TextPosition.prototype.getPage = function (position) {\n var page;\n var index = position.index.indexOf(';');\n var newValue = '0';\n if (index >= 0) {\n newValue = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n index = parseInt(newValue, 10);\n page = this.documentHelper.pages[index];\n return page;\n };\n /**\n * @private\n */\n TextPosition.prototype.getParagraphWidget = function (position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var page = this.getPage(position);\n var child = this.getLineWidget(undefined, position, page);\n return child;\n };\n /**\n * @private\n */\n TextPosition.prototype.getLineWidget = function (widget, position, page) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n if (value === 'H' || value === 'F') {\n if (value === 'H') {\n widget = page.headerWidget;\n }\n else {\n widget = page.footerWidget;\n }\n }\n else if (value === 'FN' || value === 'EN') {\n var index1 = position.index.indexOf(';');\n var value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n if (value === 'FN') {\n widget = page.footnoteWidget.bodyWidgets[value1];\n }\n else {\n widget = page.endnoteWidget.bodyWidgets[value1];\n }\n }\n else if (!isNullOrUndefined(page)) {\n if (parseInt(value, 10) < page.bodyWidgets.length) {\n widget = page.bodyWidgets[parseInt(value, 10)];\n }\n else {\n widget = page.bodyWidgets[0];\n }\n }\n index = parseInt(value, 10);\n if (widget instanceof BlockContainer) {\n index = position.index.indexOf(';');\n value = '0';\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n }\n if (widget instanceof TableRowWidget && index >= widget.childWidgets.length) {\n position.index = '0;0';\n index = widget.childWidgets.length - 1;\n }\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[index];\n if (child instanceof LineWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getLineWidget(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.getLineWidget(this.documentHelper.getFirstParagraphInFirstCell(child), position);\n }\n else if (child instanceof TableRowWidget && position.index.indexOf(';') === -1) {\n return this.documentHelper.getFirstParagraphInFirstCell(child.ownerTable).childWidgets[0];\n }\n return undefined;\n }\n }\n }\n else if (widget.nextRenderedWidget instanceof Widget) {\n position.index = '0';\n if (widget.nextRenderedWidget instanceof TableWidget) {\n return this.documentHelper.getFirstParagraphInFirstCell(widget.nextRenderedWidget).firstChild;\n }\n return this.getLineWidget(widget.nextRenderedWidget, position);\n }\n return undefined;\n };\n /**\n * Update physical location of paragraph\n *\n * @private\n */\n TextPosition.prototype.updatePhysicalPosition = function (moveNextLine) {\n if (this.currentWidget && this.owner.isLayoutEnabled && this.isUpdateLocation) {\n this.location = this.selection.getPhysicalPositionInternal(this.currentWidget, this.offset, moveNextLine);\n }\n };\n /**\n * Return true if text position are in same paragraph and offset\n *\n * @private\n */\n TextPosition.prototype.isAtSamePosition = function (textPosition) {\n return this.currentWidget === textPosition.currentWidget\n && this.offset === textPosition.offset;\n };\n /**\n * Return true if text position is in same paragraph index\n * @private\n */\n TextPosition.prototype.isInSameParagraphIndex = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph.index === textPosition.paragraph.index;\n };\n /**\n * Return true if text position is in same paragraph\n *\n * @private\n */\n TextPosition.prototype.isInSameParagraph = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph === textPosition.paragraph;\n };\n /**\n * Return true if start and end is in same list\n *\n * @private\n */\n TextPosition.prototype.isInSameListParagraph = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n return this.paragraph.paragraphFormat.listFormat.listId === textPosition.paragraph.paragraphFormat.listFormat.listId;\n };\n /**\n * Return true is current text position exist before given text position\n *\n * @private\n */\n TextPosition.prototype.isExistBefore = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset < textPosition.offset;\n }\n var currentParagraph = this.currentWidget.paragraph;\n var paragraph = textPosition.currentWidget.paragraph;\n if (currentParagraph === paragraph) {\n return currentParagraph.childWidgets.indexOf(this.currentWidget) < paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n if (currentParagraph.containerWidget === paragraph.containerWidget) {\n if (currentParagraph.isInsideTable) {\n return currentParagraph.associatedCell.childWidgets.indexOf(currentParagraph) <\n paragraph.associatedCell.childWidgets.indexOf(paragraph);\n //handle after header footer implementation\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) <\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph)) <\n (paragraph.containerWidget.childWidgets.indexOf(paragraph));\n }\n }\n return this.owner.selectionModule.isExistBefore(currentParagraph, paragraph);\n };\n /**\n * Return true is current text position exist after given text position\n *\n * @private\n */\n TextPosition.prototype.isExistAfter = function (textPosition) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n if (this.currentWidget === textPosition.currentWidget) {\n return this.offset > textPosition.offset;\n }\n if (this.currentWidget.paragraph === textPosition.currentWidget.paragraph) {\n return this.currentWidget.paragraph.childWidgets.indexOf(this.currentWidget) >\n textPosition.currentWidget.paragraph.childWidgets.indexOf(textPosition.currentWidget);\n }\n var startParagraph = this.currentWidget.paragraph;\n var endParagraph = textPosition.currentWidget.paragraph;\n if (!isNullOrUndefined(startParagraph) && !isNullOrUndefined(endParagraph)) {\n if (startParagraph.containerWidget instanceof BodyWidget && endParagraph.containerWidget instanceof BodyWidget &&\n startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable && endParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n // } else if ((this.currentParagraph).owner instanceof WHeaderFooter) {\n // return ((this.currentParagraph).owner as WHeaderFooter).blocks.indexOf((this.currentParagraph)) >\n // ((textPosition.currentParagraph).owner as WHeaderFooter).blocks.indexOf((textPosition.currentParagraph));\n }\n else {\n return (startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n (endParagraph.containerWidget.childWidgets.indexOf(endParagraph)));\n }\n }\n return this.owner.selectionModule.isExistAfter(startParagraph, endParagraph);\n }\n return false;\n };\n /**\n * Return hierarchical index of current text position\n *\n * @private\n */\n TextPosition.prototype.getHierarchicalIndexInternal = function () {\n return this.getHierarchicalIndex(this.currentWidget, this.offset.toString());\n };\n /**\n * @private\n */\n TextPosition.prototype.getHierarchicalIndex = function (line, hierarchicalIndex) {\n var node = line;\n if (node) {\n return node.getHierarchicalIndex(hierarchicalIndex);\n }\n return hierarchicalIndex;\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionParagraph = function (line, offsetInLine) {\n this.currentWidget = line;\n this.offset = offsetInLine;\n this.updatePhysicalPosition(true);\n };\n /**\n * @private\n */\n TextPosition.prototype.setPositionForLineWidget = function (lineWidget, offset) {\n var lineLength = this.selection.getLineLength(lineWidget);\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n if (lineWidget.isLastLine()) {\n if (!isNullOrUndefined(lineWidget.paragraph.bodyWidget.footNoteReference)) {\n lineLength = lineLength + lineWidget.paragraph.bodyWidget.footNoteReference.text.length;\n }\n else {\n lineLength = lineLength + 1;\n }\n }\n if (offset > lineLength) {\n var nextLineWidget = void 0;\n if (lineIndex >= lineWidget.paragraph.childWidgets.length - 1) {\n var nextBlock = this.selection.getNextRenderedBlock(lineWidget.paragraph);\n if (nextBlock && nextBlock.index === lineWidget.paragraph.index) {\n nextLineWidget = nextBlock.firstChild;\n }\n }\n else {\n nextLineWidget = lineWidget.paragraph.childWidgets[lineIndex + 1];\n }\n this.setPositionForLineWidget(nextLineWidget, offset - lineLength);\n return;\n }\n else if (offset < 0) {\n var prevLine = lineWidget.paragraph.childWidgets[lineIndex - 1];\n var currentOffSet = this.selection.getLineLength(prevLine) + offset;\n this.setPositionForLineWidget(prevLine, currentOffSet);\n return;\n }\n else {\n this.currentWidget = lineWidget;\n this.offset = offset;\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move to next text position\n *\n * @private\n */\n TextPosition.prototype.moveNextPosition = function (isNavigate) {\n if (isNullOrUndefined(isNavigate)) {\n isNavigate = true;\n }\n var inline = this.selection.getNextStartInline(this.currentWidget, this.offset);\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNavigate) {\n this.moveNextPositionInternal(inline);\n this.moveNextPosition();\n return;\n }\n else {\n var line = inline.fieldEnd.line;\n var fieldEnd = inline.fieldEnd;\n var fieldEndOffset = line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(line, fieldEndOffset.toString());\n if (TextPosition.isForwardSelection(this.selection.end.getHierarchicalIndexInternal(), fieldEndIndex)) {\n //If field end is after selection end, extend selection end to field end.\n this.selection.end.moveToInline(inline.fieldEnd, 1);\n return;\n }\n this.moveToInline(inline.fieldEnd, 1);\n }\n }\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var index = 0;\n if (nextOffset > this.offset) {\n this.offset = nextOffset;\n var info = this.currentWidget.getInline(this.offset, index);\n inline = info.element;\n index = info.index;\n if (!isNullOrUndefined(inline) && index === inline.length && (inline.nextNode instanceof FieldElementBox\n || inline.nextNode instanceof BookmarkElementBox)) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark or Bookmark end.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1\n || nextValidInline instanceof BookmarkElementBox && nextValidInline.bookmarkType === 1) {\n inline = nextValidInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, this.documentHelper.isFormFillProtectedMode ? 0 : 1);\n }\n }\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n }\n else {\n this.updateOffsetToNextParagraph(index, false);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move text position to previous paragraph inside table\n *\n * @private\n */\n TextPosition.prototype.moveToPreviousParagraphInTable = function (selection) {\n var previousParagraph;\n var currentPara = this.currentWidget.paragraph;\n if (currentPara.isInsideTable) {\n previousParagraph = selection.getPreviousSelectionCell(currentPara.associatedCell);\n }\n else {\n previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n }\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n TextPosition.prototype.updateOffsetToNextParagraph = function (indexInInline, isHighlight) {\n //Moves to owner and get next paragraph.\n var inline;\n var positionAtStart = false;\n var nextParagraph = undefined;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (!isHighlight) {\n nextParagraph = this.selection.getNextParagraphBlock(this.paragraph);\n }\n else if (lineIndex + 1 < this.paragraph.childWidgets.length) {\n var nextLineWidget = this.paragraph.childWidgets[lineIndex + 1];\n if (nextLineWidget) {\n this.currentWidget = nextLineWidget;\n this.offset = 1;\n }\n }\n else {\n nextParagraph = this.selection.getNextSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(nextParagraph)) {\n if (nextParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, nextParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(nextParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(nextParagraph) && nextParagraph.childWidgets.length > 0) {\n if (!positionAtStart) {\n this.currentWidget = nextParagraph.firstChild;\n this.offset = isHighlight ? 1 : this.selection.getStartLineOffset(this.currentWidget);\n }\n else {\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.selection.getLineLength(this.currentWidget) + 1;\n }\n }\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n };\n TextPosition.prototype.updateOffsetToPrevPosition = function (index, isHighlight) {\n var inlineInfo;\n var inline;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n var prevOffset = this.selection.getPreviousValidOffset(this.currentWidget.paragraph, this.offset);\n if (this.offset > prevOffset) {\n this.offset = prevOffset;\n }\n else if (lineIndex > 0) {\n var prevLineWidget = this.paragraph.childWidgets[lineIndex - 1];\n if (prevLineWidget) {\n this.currentWidget = prevLineWidget;\n var endOffset = this.currentWidget.getEndOffset();\n this.offset = endOffset > 0 ? endOffset - 1 : endOffset;\n }\n }\n else {\n //Moves to owner and get previous paragraph.\n var previousParagraph = undefined;\n var positionAtStart = false;\n if (!isHighlight) {\n previousParagraph = this.selection.getPreviousParagraphBlock(this.paragraph);\n }\n else {\n previousParagraph = this.selection.getPreviousSelectionBlock(this.paragraph);\n if (!isNullOrUndefined(previousParagraph)) {\n if (previousParagraph.containerWidget instanceof TableCellWidget) {\n if (this.selection.start.paragraph.isInsideTable) {\n var containerCell = this.selection.getContainerCellOf(this.selection.start.paragraph.associatedCell, previousParagraph.associatedCell);\n positionAtStart = !containerCell.ownerTable.contains(previousParagraph.associatedCell);\n }\n else {\n positionAtStart = true;\n }\n }\n }\n }\n if (!isNullOrUndefined(previousParagraph)) {\n if (!positionAtStart) {\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n // line end with page break and updating offset before page break.\n this.offset = (this.currentWidget.isEndsWithPageBreak || this.currentWidget.isEndsWithColumnBreak) ? this.currentWidget.getEndOffset() - 1 : this.currentWidget.getEndOffset();\n }\n else {\n this.currentWidget = previousParagraph.firstChild;\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n }\n }\n }\n index = 0;\n inlineInfo = this.currentWidget.getInline(this.offset, index);\n inline = inlineInfo.element;\n index = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset++;\n }\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var previousInline = this.selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n inline = previousInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.offset--;\n }\n }\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the next paragraph.\n */\n TextPosition.prototype.moveToNextParagraphStartInternal = function () {\n var paragraph = this.currentWidget.paragraph;\n if (!isNullOrUndefined(this.selection.getNextParagraphBlock(paragraph))) {\n this.currentWidget = this.selection.getNextParagraphBlock(paragraph).firstChild;\n this.offset = this.selection.getStartOffset(paragraph);\n this.updatePhysicalPosition(true);\n }\n };\n /**\n * Move to previous position\n *\n * @private\n */\n TextPosition.prototype.movePreviousPosition = function () {\n var index = 0;\n var inlineInfo = this.currentWidget.getInline(this.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var lineIndex = this.paragraph.childWidgets.indexOf(this.currentWidget);\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)\n || inline instanceof BookmarkElementBox && inline.bookmarkType === 1) {\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(index, false);\n };\n /**\n * Move to next position\n *\n * @private\n */\n TextPosition.prototype.moveNextPositionInternal = function (fieldBegin) {\n var inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n if (this.currentWidget === fieldBegin.fieldEnd.line && !this.selection.hasValidInline(this.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n };\n /**\n * Move text position backward\n *\n * @private\n */\n TextPosition.prototype.moveBackward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!this.owner.selectionModule.isEmpty && !isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var hierarchicalIndex = this.owner.selectionModule.start.getHierarchicalIndexInternal();\n var fieldEndOffset = nextInline.fieldEnd.line.getOffset(nextInline.fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(nextInline.fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, hierarchicalIndex)) {\n //If field end is after selection start, move selection start to field end.\n this.owner.selectionModule.start.setPositionParagraph(nextInline.fieldEnd.line, fieldEndOffset);\n return;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var hierarchicalIndex = this.owner.selectionModule.start.getHierarchicalIndexInternal();\n var fieldEndOffset = inline.line.getOffset(inline, 1);\n var fieldEndIndex = this.getHierarchicalIndex(inline.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldEndIndex)) {\n //If field end is after selection start, extend selection end to field begin.\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n this.currentWidget = inline.fieldBegin.line;\n this.offset = fieldBeginOffset;\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n this.movePreviousPositionInternal(inline);\n }\n this.updateOffsetToPrevPosition(indexInInline, true);\n };\n /**\n * Move text position forward\n *\n * @private\n */\n TextPosition.prototype.moveForward = function () {\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (!this.owner.selectionModule.isEmpty && indexInInline === inline.length && inline instanceof FieldElementBox\n && inline.fieldType === 1) {\n var hierarchicalIndex = this.owner.selectionModule.start.getHierarchicalIndexInternal();\n var fieldBeginOffset = inline.fieldBegin.line.getOffset(inline.fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(inline.fieldBegin.line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(hierarchicalIndex, fieldBeginIndex)) {\n //If field begin is before selection start, move selection start to field begin.\n this.owner.selectionModule.start.setPositionParagraph(inline.fieldBegin.line, fieldBeginOffset);\n return;\n }\n }\n inline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n }\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var selectionStartParagraph = this.owner.selectionModule.start.paragraph;\n var selectionStartIndex = 0;\n var selectionStartInlineObj = selectionStartParagraph.getInline(this.owner.selectionModule.start.offset, selectionStartIndex);\n var selectionStartInline = selectionStartInlineObj.element;\n selectionStartIndex = selectionStartInlineObj.index;\n var nextRenderInline = this.selection.getNextRenderedElementBox(selectionStartInline, selectionStartIndex);\n if (nextRenderInline === inline) {\n this.moveNextPositionInternal(inline);\n }\n else {\n //If selection start is before field begin, extend selection end to field end.\n inline = inline.fieldEnd;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n return;\n }\n }\n else if ((inline instanceof FieldElementBox)\n && (inline.fieldType === 0 || inline.fieldType === 1)) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n indexInInline = 0;\n var nextOffset = this.selection.getNextValidOffset(this.currentWidget, this.offset);\n var length = this.selection.getLineLength(this.currentWidget);\n var isParagraphEnd = this.selection.isParagraphLastLine(this.currentWidget);\n if (this.offset < nextOffset) {\n this.offset = nextOffset;\n var inlineObj_1 = this.currentWidget.getInline(this.offset, indexInInline);\n inline = inlineObj_1.element;\n indexInInline = inlineObj_1.index;\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.selection.getNextValidElement(inline.nextNode);\n //Moves to field end mark.\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 1) {\n inline = nextValidInline;\n this.offset = this.currentWidget.getOffset(inline, 1);\n }\n }\n }\n else if (this.offset === nextOffset && inline instanceof FieldElementBox && inline.fieldType === 1 &&\n inline.previousNode instanceof ImageElementBox) {\n this.offset = nextOffset;\n }\n else if (this.offset === nextOffset && this.offset < length + 1 && isParagraphEnd) {\n this.offset = length + 1;\n }\n else {\n this.updateOffsetToNextParagraph(indexInInline, true);\n }\n //Gets physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to given inline\n *\n * @private\n */\n TextPosition.prototype.moveToInline = function (inline, index) {\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, index);\n //Updates physical position in current page.\n this.updatePhysicalPosition(true);\n };\n /**\n * Return true is start element exist before end element\n *\n * @private\n */\n TextPosition.isForwardSelection = function (start, end) {\n if (start === end) {\n return true;\n }\n start = start.replace(/S;/g, '');\n end = end.replace(/S;/g, '');\n start = start.replace(/C;/g, '');\n end = end.replace(/C;/g, '');\n start = start.replace(/H;/g, '');\n end = end.replace(/H;/g, '');\n start = start.replace(/F;/g, '');\n end = end.replace(/F;/g, '');\n start = start.replace(/FN;/g, '');\n end = end.replace(/FN;/g, '');\n start = start.replace(/EN;/g, '');\n end = end.replace(/EN;/g, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n var length = selectionStart.length;\n if (length > selectionEnd.length) {\n length = selectionEnd.length - 1;\n }\n for (var i = 0; i < length; i++) {\n var startOffset = parseFloat(selectionStart[i]);\n var endOffset = parseFloat(selectionEnd[i]);\n if (startOffset !== endOffset) {\n return startOffset < endOffset;\n }\n }\n return false;\n };\n /**\n * Move to previous position offset\n *\n * @param fieldEnd\n * @private\n */\n TextPosition.prototype.movePreviousPositionInternal = function (fieldEnd) {\n var inline;\n if (fieldEnd instanceof FieldElementBox && isNullOrUndefined(fieldEnd.fieldSeparator)) {\n inline = this.selection.getPreviousValidElement(fieldEnd.fieldBegin);\n }\n else {\n inline = this.selection.getPreviousValidElement(fieldEnd);\n }\n this.currentWidget = inline.line;\n var index = inline instanceof FieldElementBox || inline instanceof BookmarkElementBox && inline.bookmarkType === 1 ? 0 : inline.length;\n this.offset = this.currentWidget.getOffset(inline, index);\n };\n /**\n * Moves the text position to start of the word.\n *\n * @param type\n * @private\n */\n TextPosition.prototype.moveToWordStartInternal = function (type) {\n var endOffset = this.currentWidget.getEndOffset();\n var currentPara = this.currentWidget.paragraph;\n var selection = this.selection;\n if (type === 2 && (this.offset === endOffset || this.offset === endOffset + 1)) {\n return;\n }\n if (this.offset === endOffset + 1) {\n this.offset = endOffset;\n }\n else if (this.offset === selection.getStartOffset(currentPara) && this.currentWidget === currentPara.childWidgets[0]) {\n var previousParagraph = selection.getPreviousParagraphBlock(currentPara);\n if (isNullOrUndefined(previousParagraph)) {\n return;\n }\n this.currentWidget = previousParagraph.childWidgets[previousParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n else {\n if (this.offset === selection.getStartLineOffset(this.currentWidget)) {\n var lineIndex = currentPara.childWidgets.indexOf(this.currentWidget);\n if (lineIndex - 1 >= 0) {\n this.currentWidget = currentPara.childWidgets[lineIndex - 1];\n this.offset = this.currentWidget.getEndOffset();\n }\n }\n var isStarted = false;\n var endSelection = false;\n var indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.getPreviousWordOffset(inline, selection, indexInInline, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, this);\n }\n if (type === 1) {\n this.calculateOffset();\n }\n this.updatePhysicalPosition(true);\n };\n TextPosition.prototype.getNextWordOffset = function (inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (inline instanceof TextElementBox) {\n this.getNextWordOffsetSpan(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof ImageElementBox) {\n this.getNextWordOffsetImage(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.getNextWordOffsetFieldBegin(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2 || inline instanceof BookmarkElementBox) {\n this.getNextWordOffsetFieldSeparator(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n this.getNextWordOffsetFieldEnd(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (inline instanceof CommentCharacterElementBox) {\n this.getNextWordOffsetComment(inline, indexInInline, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetFieldBegin = function (fieldBegin, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n this.getNextWordOffsetFieldEnd(fieldBegin.fieldEnd, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (type === 0) {\n this.getNextWordOffsetFieldSeparator(fieldBegin.fieldSeparator, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n var inline = fieldBegin.fieldSeparator;\n if (inline.line.paragraph === fieldBegin.fieldEnd.line.paragraph && !this.selection.hasValidInline(inline.line.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n this.getNextWordOffset(inline, 0, type, !(endPosition.paragraph === fieldBegin.line.paragraph && endPosition.offset === startOffset), endSelection, endPosition, excludeSpace);\n if (endSelection && !isNullOrUndefined(fieldBegin.fieldSeparator) && (endPosition.paragraph === fieldBegin.line.paragraph) && (endPosition.offset === fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length))) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n return;\n }\n if (!endSelection) {\n endPosition.setPositionParagraph(fieldBegin.fieldEnd.line, fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, fieldBegin.fieldEnd.length));\n }\n }\n };\n TextPosition.prototype.getNextWordOffsetImage = function (image, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n var startOffset = image.line.getOffset(image, 0);\n endSelection = true;\n if (endPosition.offset === startOffset) {\n if (isNullOrUndefined(image.nextNode)) {\n endPosition.setPositionParagraph(image.line, startOffset + image.length);\n }\n else {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n endPosition.setPositionParagraph(image.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(image.nextNode)) {\n this.getNextWordOffset(image.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetSpan = function (span, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === 0) {\n endSelection = true;\n var startOffset = span.line.getOffset(span, 0);\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(span.line, startOffset + span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, startOffset);\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n else {\n var wordEndIndex = 0;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0]) === -1)) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n if (isInField) {\n return;\n }\n }\n else if (indexInInline < span.length) {\n var txt = indexInInline > 0 && span.text.length - 1 >= indexInInline ? span.text.slice(indexInInline, span.length) : span.text;\n wordEndIndex = HelperMethods.indexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordEndIndex === -1 && span.nextNode instanceof CommentCharacterElementBox &&\n isNullOrUndefined(span.nextNode.nextNode)) {\n wordEndIndex = span.length;\n }\n if (wordEndIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n var offset = span.line.getOffset(span, wordEndIndex + indexInInline);\n var spaceCharacter = [' ', ' '];\n if ((excludeSpace || spaceCharacter.indexOf(txt[wordEndIndex]) === -1) && !endSelection && span.line.paragraph === endPosition.paragraph && offset !== endPosition.offset) {\n endSelection = true;\n endPosition.setPositionParagraph(span.line, offset);\n return;\n }\n var isSpaceCharacter = false;\n if (spaceCharacter.indexOf(txt[wordEndIndex]) !== -1 && spaceCharacter.indexOf(txt[wordEndIndex + 1]) === -1) {\n isSpaceCharacter = true;\n wordEndIndex++;\n }\n while (wordEndIndex < txt.length && !isSpaceCharacter) {\n if (HelperMethods.wordSplitCharacters.indexOf(txt[wordEndIndex]) === -1) {\n break;\n }\n wordEndIndex++;\n if (spaceCharacter.indexOf(txt[wordEndIndex]) !== -1 && spaceCharacter.indexOf(txt[wordEndIndex + 1]) === -1 && HelperMethods.wordSplitCharacters.indexOf(txt[wordEndIndex + 1]) !== -1) {\n wordEndIndex++;\n break;\n }\n }\n endSelection = true;\n var nextNodeText = void 0;\n if (!isNullOrUndefined(span.nextNode)) {\n nextNodeText = span.nextNode.text;\n }\n if (wordEndIndex < txt.length || (!isNullOrUndefined(nextNodeText) && span.line == span.nextNode.line && spaceCharacter.indexOf(txt[txt.length - 1]) !== -1 && spaceCharacter.indexOf(nextNodeText[0]) === -1)) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, wordEndIndex + indexInInline));\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n }\n else if (!isNullOrUndefined(span.nextNode)) {\n this.getNextWordOffset(span.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n }\n };\n TextPosition.prototype.getNextWordOffsetFieldSeparator = function (fieldSeparator, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (!isNullOrUndefined(fieldSeparator.nextNode)) {\n this.getNextWordOffset(fieldSeparator.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetComment = function (comment, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n if (!isNullOrUndefined(comment.nextNode)) {\n this.getNextWordOffset(comment.nextNode, 0, type, isInField, endSelection, endPosition, excludeSpace);\n }\n };\n TextPosition.prototype.getNextWordOffsetFieldEnd = function (fieldEnd, indexInInline, type, isInField, endSelection, endPosition, excludeSpace) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n if (isNullOrUndefined(fieldEnd.nextNode)) {\n return;\n }\n }\n if (!isNullOrUndefined(fieldEnd.nextNode)) {\n this.getNextWordOffset(fieldEnd.nextNode, 0, type, false, endSelection, endPosition, excludeSpace);\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n }\n else {\n endPosition.setPositionParagraph(fieldEnd.line, startOffset);\n }\n endSelection = true;\n };\n TextPosition.prototype.getPreviousWordOffset = function (inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (inline instanceof TextElementBox) {\n this.getPreviousWordOffsetSpan(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ImageElementBox) {\n this.getPreviousWordOffsetImage(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n this.getPreviousWordOffsetFieldBegin(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n this.getPreviousWordOffsetFieldSeparator(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n this.getPreviousWordOffsetFieldEnd(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof BookmarkElementBox) {\n this.getPreviousWordOffsetBookMark(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof ListTextElementBox && inline.previousNode) {\n this.getPreviousWordOffsetSpan(inline.previousNode, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (inline instanceof CommentCharacterElementBox) {\n this.getPreviousWordOffsetComment(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n TextPosition.prototype.getPreviousWordOffsetBookMark = function (bookmark, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (bookmark.previousNode) {\n if (bookmark.previousNode instanceof TextElementBox) {\n var inline = bookmark.previousNode;\n if (HelperMethods.lastIndexOfAny(inline.text, HelperMethods.wordSplitCharacters) !== inline.text.length - 1) {\n this.getPreviousWordOffset(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, bookmark.line.getOffset(bookmark, 0));\n }\n }\n }\n else {\n endPosition.setPositionParagraph(bookmark.line, selection.getStartLineOffset(bookmark.line));\n }\n };\n TextPosition.prototype.getPreviousWordOffsetFieldEnd = function (fieldEnd, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endOffset = startOffset + fieldEnd.length;\n if (isNullOrUndefined(fieldEnd.fieldSeparator)) {\n this.getPreviousWordOffsetFieldBegin(fieldEnd.fieldBegin, selection, 0, type, isInField, isStarted, endSelection, endPosition);\n }\n else if (type === 0 && !isNullOrUndefined(fieldEnd.previousNode)) {\n var inline = fieldEnd.previousNode;\n this.getPreviousWordOffset(inline, selection, inline.length, type, (inline instanceof FieldElementBox && inline.fieldType === 1), isStarted, endSelection, endPosition);\n }\n else if (!isNullOrUndefined(fieldEnd.fieldBegin) && type !== 0) {\n var inline = fieldEnd.previousNode;\n if (isNullOrUndefined(inline) || (inline.line.paragraph === fieldEnd.fieldBegin.line.paragraph && !selection.hasValidInline(inline.line.paragraph, inline, fieldEnd.fieldBegin))) {\n inline = fieldEnd.fieldBegin;\n }\n this.getPreviousWordOffset(inline, selection, inline.length, type, !(endPosition.paragraph === fieldEnd.line.paragraph && endPosition.offset === endOffset), isStarted, endSelection, endPosition);\n if (endSelection && endPosition.paragraph === fieldEnd.line.paragraph\n && endPosition.offset === startOffset) {\n endPosition.setPositionParagraph(fieldEnd.line, endOffset);\n return;\n }\n if (!endSelection) {\n endPosition.setPositionParagraph(fieldEnd.fieldBegin.line, fieldEnd.fieldBegin.line.getOffset(fieldEnd.fieldBegin, 0));\n }\n }\n };\n TextPosition.prototype.getPreviousWordOffsetFieldSeparator = function (fieldSeparator, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n this.getPreviousWordOffsetFieldBegin(fieldSeparator.fieldBegin, selection, fieldSeparator.fieldBegin.length, type, isInField, isStarted, endSelection, endPosition);\n };\n /* get previous word offset from comment\n * @private\n */\n TextPosition.prototype.getPreviousWordOffsetComment = function (comment, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (comment.previousNode) {\n var inline = comment.previousNode;\n if (comment.previousNode instanceof TextElementBox\n && HelperMethods.lastIndexOfAny(inline.text, HelperMethods.wordSplitCharacters) !== inline.text.length - 1) {\n this.getPreviousWordOffset(inline, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n this.getPreviousWordOffset(comment.previousNode, selection, comment.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n endPosition.setPositionParagraph(comment.line, selection.getStartLineOffset(comment.line));\n }\n };\n TextPosition.prototype.getPreviousWordOffsetFieldBegin = function (fieldBegin, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n var startOffset = fieldBegin.line.getOffset(fieldBegin, 0);\n var endOffset = startOffset + fieldBegin.length;\n if (endPosition.offset === endOffset) {\n endPosition.setPositionParagraph(fieldBegin.line, startOffset);\n }\n if (!isNullOrUndefined(fieldBegin.previousNode)) {\n this.getPreviousWordOffset(fieldBegin.previousNode, selection, fieldBegin.previousNode.length, type, false, isStarted, endSelection, endPosition);\n if (endPosition.offset === startOffset) {\n if (type !== 0 && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n endPosition.setPositionParagraph(fieldBegin.line, fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length));\n }\n }\n }\n else {\n if (fieldBegin.fieldSeparator) {\n endPosition.setPositionParagraph(fieldBegin.line, fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, fieldBegin.fieldSeparator.length));\n }\n else {\n endPosition.setPositionParagraph(fieldBegin.line, selection.getStartLineOffset(fieldBegin.line));\n }\n }\n };\n TextPosition.prototype.getPreviousWordOffsetImage = function (image, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (isInField) {\n endPosition.setPositionParagraph(image.line, image.line.getOffset(image, indexInInline));\n endSelection = false;\n return;\n }\n if (indexInInline === image.length) {\n var endOffset = image.line.getOffset(image, image.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(image.line, endOffset - image.length);\n }\n else {\n endPosition.setPositionParagraph(image.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(image.previousNode)) {\n this.getPreviousWordOffset(image.previousNode, selection, image.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n };\n TextPosition.prototype.getPreviousWordOffsetSpan = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.text === '\\t' || span.text === '\\v') {\n if (isInField) {\n endSelection = false;\n return;\n }\n if (indexInInline === span.length) {\n endSelection = true;\n var endOffset = span.line.getOffset(span, span.length);\n if (endOffset === endPosition.offset) {\n endPosition.setPositionParagraph(span.line, endOffset - span.length);\n }\n else {\n endPosition.setPositionParagraph(span.line, endOffset);\n }\n }\n else if (!isNullOrUndefined(span.previousNode)) {\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n var wordStartIndex = 0;\n if (!isStarted) {\n while (indexInInline > 0 && span.text[indexInInline - 1] === ' ') {\n indexInInline--;\n }\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n }\n if (indexInInline > 0) {\n isStarted = true;\n if (indexInInline === 0 && endSelection && (HelperMethods.wordSplitCharacters.indexOf(span.text[0])) === -1) {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, indexInInline));\n endSelection = true;\n return;\n }\n var txt = span.text.length > indexInInline ? span.text.slice(0, indexInInline) : span.text;\n wordStartIndex = HelperMethods.lastIndexOfAny(txt, HelperMethods.wordSplitCharacters);\n if (wordStartIndex === -1 && span.previousElement instanceof CommentCharacterElementBox && isNullOrUndefined(span.previousNode.previousNode)) {\n wordStartIndex = span.length;\n }\n if (wordStartIndex !== -1) {\n if (isInField) {\n endSelection = false;\n return;\n }\n while (wordStartIndex > 0 && endSelection && txt[wordStartIndex] !== ' '\n && (HelperMethods.wordSplitCharacters.indexOf(txt[wordStartIndex - 1])) !== -1) {\n wordStartIndex--;\n }\n if (txt[wordStartIndex] === ' ' || txt[wordStartIndex] === ' ' || !endSelection) {\n wordStartIndex++;\n }\n endSelection = true;\n if (wordStartIndex > 0) {\n var offset = span.line.getOffset(span, wordStartIndex);\n if (span.line.paragraph === endPosition.paragraph && offset === endPosition.offset) {\n this.getPreviousWordOffsetSpan(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, offset);\n }\n }\n else if (span.previousNode instanceof TextElementBox) {\n var previousNodeText = span.previousNode.text;\n if (HelperMethods.wordSplitCharacters.indexOf(span.text[0]) !== -1 && HelperMethods.wordSplitCharacters.indexOf(previousNodeText[previousNodeText.length - 1]) === -1) {\n var offset = span.line.getOffset(span, wordStartIndex);\n endPosition.setPositionParagraph(span.line, offset);\n return;\n }\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, span.line.getOffset(span, 0));\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n else {\n this.setPreviousWordOffset(span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition);\n }\n }\n };\n TextPosition.prototype.setPreviousWordOffset = function (span, selection, indexInInline, type, isInField, isStarted, endSelection, endPosition) {\n if (span.previousNode instanceof ElementBox && span.line === span.previousNode.line) {\n this.getPreviousWordOffset(span.previousNode, selection, span.previousNode.length, type, isInField, isStarted, endSelection, endPosition);\n }\n else {\n endPosition.setPositionParagraph(span.line, selection.getStartLineOffset(span.line));\n }\n };\n /**\n * Validate if text position is in field forward\n *\n * @private\n */\n TextPosition.prototype.validateForwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var isPositionMoved = false;\n if (this.selection.start.paragraph !== this.selection.end.paragraph\n || this.selection.start.offset === this.selection.getStartOffset(this.selection.start.paragraph)) {\n // To select Paragraph mark similar to MS WORD\n if (this.selection.end.offset === this.selection.end.currentWidget.getEndOffset()\n && this.selection.isParagraphLastLine(this.selection.end.currentWidget)) {\n this.selection.end.setPositionParagraph(this.selection.end.currentWidget, this.selection.end.offset + 1);\n }\n }\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(currentIndex, selectionEndIndex)) {\n if (!isPositionMoved) {\n textPosition.moveNextPosition(false);\n var nextIndex = textPosition.getHierarchicalIndexInternal();\n //Handled specifically to break infinite looping, if selection ends at last paragraph mark.\n if (currentIndex === nextIndex) {\n break;\n }\n }\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n if (indexInInline === inline.length && inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var lineWidget = inline.fieldBegin.line;\n var fieldBeginOffset = lineWidget.getOffset(inline.fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(lineWidget, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n this.selection.start.setPositionParagraph(lineWidget, fieldBeginOffset);\n }\n }\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (!isNullOrUndefined(nextInline) && nextInline instanceof ElementBox) {\n inline = nextInline;\n }\n }\n isPositionMoved = (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd));\n if (isPositionMoved) {\n if (inline.line.getOffset(inline, 0) === this.offset) {\n return;\n }\n var fieldEnd = inline.fieldEnd;\n var paragraph = fieldEnd.line.paragraph;\n var fieldEndOffset = fieldEnd.line.getOffset(fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(fieldEnd.line, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n //If selection end is after field begin, extend selection end to field end.\n this.moveToInline(inline.fieldEnd, 1);\n return;\n }\n textPosition.moveToInline(inline.fieldEnd, 1);\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * Validate if text position is in field backward\n *\n * @private\n */\n TextPosition.prototype.validateBackwardFieldSelection = function (currentIndex, selectionEndIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(currentIndex);\n textPosition.isUpdateLocation = false;\n var isSelectParaMark = false;\n if ((this.selection.start.paragraph !== this.selection.end.paragraph\n && this.selection.end.offset !== this.selection.getStartOffset(this.selection.start.paragraph)) ||\n (this.documentHelper.isSelectionChangedOnMouseMoved && this.selection.isParagraphFirstLine(this.selection.end.currentWidget)\n && this.selection.end.offset === this.selection.getStartOffset(this.selection.start.paragraph))\n || (((isNullOrUndefined(this.selection.start.paragraph.previousRenderedWidget)\n && this.selection.start.paragraph === this.selection.end.paragraph\n && this.selection.end.offset === this.selection.getStartOffset(this.selection.end.paragraph))\n || (this.selection.start.paragraph !== this.selection.end.paragraph))\n && this.selection.start.offset === this.selection.start.currentWidget.getEndOffset() && this.selection.start.currentWidget.isLastLine())) {\n isSelectParaMark = true;\n }\n // To select Paragraph mark similar to MS WORD\n if (isSelectParaMark && this.selection.start.offset === this.selection.start.currentWidget.getEndOffset()\n && this.selection.isParagraphLastLine(this.selection.start.currentWidget)) {\n this.selection.start.setPositionParagraph(this.selection.start.currentWidget, this.selection.start.offset + 1);\n }\n var selectionStartIndex = this.selection.start.getHierarchicalIndexInternal();\n while (currentIndex !== selectionEndIndex && TextPosition.isForwardSelection(selectionEndIndex, currentIndex)) {\n var indexInInline = 0;\n var inlineObj = textPosition.currentWidget.getInline(textPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n var nextInline = this.selection.getNextRenderedElementBox(inline, indexInInline);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n var paragraph = nextInline.fieldEnd.line;\n var fieldEndOffset = paragraph.getOffset(nextInline.fieldEnd, 1);\n var fieldEndIndex = this.getHierarchicalIndex(paragraph, fieldEndOffset.toString());\n if (!TextPosition.isForwardSelection(fieldEndIndex, selectionStartIndex)) {\n this.selection.start.setPositionParagraph(paragraph, fieldEndOffset);\n selectionStartIndex = fieldEndIndex;\n }\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n var line = inline.fieldBegin.line;\n var fieldBegin = inline.fieldBegin;\n var fieldBeginOffset = line.getOffset(fieldBegin, 0);\n var fieldBeginIndex = this.getHierarchicalIndex(line, fieldBeginOffset.toString());\n if (!TextPosition.isForwardSelection(selectionEndIndex, fieldBeginIndex)) {\n //If field begin is before selection end, extend selection end to field begin.\n this.moveToInline(inline.fieldBegin, 0);\n return;\n }\n textPosition.moveToInline(inline.fieldBegin, 0);\n }\n else {\n textPosition.movePreviousPosition();\n }\n currentIndex = textPosition.getHierarchicalIndexInternal();\n }\n };\n /**\n * @private\n */\n TextPosition.prototype.paragraphStartInternal = function (selection, moveToPreviousParagraph) {\n var offset = selection.getStartLineOffset(this.currentWidget);\n if (this.offset === offset && moveToPreviousParagraph) {\n var startParagraph = this.moveToNextParagraphInTableCheck();\n if (startParagraph) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var paragraphValue = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = paragraphValue.childWidgets[0];\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n }\n else {\n this.currentWidget = this.currentWidget.paragraph.getSplitWidgets()[0].childWidgets[0];\n this.offset = offset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.calculateOffset = function () {\n var selectionStartIndex = this.owner.selectionModule.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Moves the text position to start of the paragraph.\n *\n * @private\n */\n TextPosition.prototype.moveToParagraphStartInternal = function (selection, moveToPreviousParagraph) {\n var splittedParagraph = this.currentWidget.paragraph;\n while (splittedParagraph.previousSplitWidget) {\n splittedParagraph = splittedParagraph.previousSplitWidget;\n }\n var startOffset = selection.getStartOffset(splittedParagraph);\n if (this.offset === startOffset && moveToPreviousParagraph) {\n var paragraphstart = this.moveToNextParagraphInTableCheck();\n if (paragraphstart) {\n this.moveToPreviousParagraphInTable(selection);\n }\n else if (!isNullOrUndefined(selection.getPreviousParagraphBlock(this.paragraph))) {\n this.currentWidget = selection.getPreviousParagraphBlock(this.paragraph).firstChild;\n this.offset = selection.getStartOffset(this.paragraph);\n }\n }\n else {\n this.currentWidget = splittedParagraph.firstChild;\n this.offset = selection.getStartLineOffset(this.currentWidget);\n }\n var selectionStartIndex = this.owner.selectionModule.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n this.updatePhysicalPosition(false);\n };\n /**\n * Moves the text position to end of the paragraph.\n *\n * @private\n */\n TextPosition.prototype.moveToParagraphEndInternal = function (selection, moveToNextParagraph) {\n var splittedParagraph = this.currentWidget.paragraph;\n while (splittedParagraph.nextSplitWidget) {\n splittedParagraph = splittedParagraph.nextSplitWidget;\n }\n this.currentWidget = splittedParagraph.childWidgets[splittedParagraph.childWidgets.length - 1];\n var endOffset = this.currentWidget.getEndOffset() + 1;\n if (this.offset === endOffset && moveToNextParagraph) {\n var paragraphEnd = this.moveToNextParagraphInTableCheck();\n if (paragraphEnd) {\n this.moveToNextParagraphInTable();\n }\n else if (!isNullOrUndefined(selection.getNextParagraphBlock(this.currentWidget.paragraph))) {\n var endParagraph = selection.getNextParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = endParagraph.childWidgets[endParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n }\n }\n else {\n this.offset = endOffset;\n }\n this.calculateOffset();\n };\n /**\n * @private\n */\n TextPosition.prototype.moveUp = function (selection, left) {\n var paragraph = this.currentWidget.paragraph;\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n //Moves previous line starting.\n this.movePreviousPosition();\n var prevLine = undefined;\n var currentParagraph = this.currentWidget.paragraph;\n if (paragraph.isInsideTable && paragraph !== currentParagraph && paragraph.associatedCell !== currentParagraph.associatedCell\n && (!isNullOrUndefined(currentParagraph.associatedCell) && (paragraph.associatedCell.ownerRow === currentParagraph.associatedCell.ownerRow))) {\n var ownerRow = currentParagraph.associatedCell.ownerRow;\n if (ownerRow.previousRenderedWidget instanceof TableRowWidget) {\n var cell = selection.getFirstCellInRegion(ownerRow.previousRenderedWidget, currentParagraph.associatedCell, left, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n var prevBlock = ownerRow.ownerTable.previousRenderedWidget;\n do {\n if (prevBlock instanceof TableWidget) {\n prevBlock = selection.getLastBlockInLastCell(prevBlock);\n }\n } while (prevBlock instanceof TableWidget);\n if (prevBlock instanceof ParagraphWidget) {\n this.setPosition(prevBlock.childWidgets[prevBlock.childWidgets.length - 1], false);\n }\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!paragraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n var cell = selection.getFirstCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selectionModule.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else if (paragraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && paragraph.associatedCell.ownerRow.previousRenderedWidget !== paragraph.associatedCell.ownerRow.previousSplitWidget &&\n paragraph.associatedCell.ownerRow.previousRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selectionModule.upDownSelectionLength, true);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = selection.getTop(prevLine);\n // Here, updating the left position when line widget end with page break\n // to update cursor before page break\n if ((this.currentWidget.isEndsWithPageBreak || this.currentWidget.isEndsWithColumnBreak) && this.offset === this.currentWidget.getEndOffset() - 1) {\n left = this.location.x;\n }\n selection.updateTextPositionWidget(prevLine, new Point(left, top), this, false);\n };\n /**\n * @private\n */\n TextPosition.prototype.moveDown = function (selection, left) {\n //Moves text position to end of line.\n var prevParagraph = this.currentWidget.paragraph;\n var currentLine = this.currentWidget;\n this.moveToLineEndInternal(selection, true);\n var length = this.selection.getParagraphLength(this.currentWidget.paragraph);\n if (this.offset > length) {\n this.offset = length;\n }\n //Moves next line starting.\n this.moveNextPosition();\n var nextLine = undefined;\n if (prevParagraph.isInsideTable && prevParagraph !== this.currentWidget.paragraph && prevParagraph.associatedCell !== this.currentWidget.paragraph.associatedCell && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var ownerRow = this.currentWidget.paragraph.associatedCell.ownerRow;\n if (prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable && prevParagraph.associatedCell.cellFormat.rowSpan > 1 && prevParagraph.associatedCell.cellFormat.rowSpan + prevParagraph.associatedCell.ownerRow.rowIndex === prevParagraph.associatedCell.ownerTable.childWidgets.length) {\n //If the prevParagraph owner cell is Verically merged upto the last row, then theposition moved to next column. the position moved to out of the current tabel so owner row is assigned to last row.\n ownerRow = this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets[this.currentWidget.paragraph.associatedCell.ownerTable.childWidgets.length - 1];\n }\n if (ownerRow.nextRenderedWidget instanceof TableRowWidget) {\n var cell = this.selection.getLastCellInRegion(ownerRow.nextRenderedWidget, this.currentWidget.paragraph.associatedCell, left, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n }\n else {\n var nextBlock = this.selection.getNextRenderedBlock(ownerRow.ownerTable);\n do {\n if (nextBlock instanceof TableWidget) {\n nextBlock = this.selection.getFirstBlockInFirstCell(nextBlock);\n }\n } while (nextBlock instanceof TableWidget);\n if (nextBlock instanceof ParagraphWidget) {\n this.setPosition(nextBlock.childWidgets[0], true);\n }\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n else {\n if (!prevParagraph.isInsideTable && this.currentWidget.paragraph.isInsideTable) {\n var cell = this.selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selectionModule.upDownSelectionLength, false);\n this.setPosition(this.selection.getFirstParagraph(cell).childWidgets[0], true);\n }\n else if (prevParagraph.isInsideTable && (!isNullOrUndefined(this.currentWidget.paragraph.associatedCell) && prevParagraph.associatedCell.ownerRow.nextRenderedWidget !== prevParagraph.associatedCell.ownerRow.nextSplitWidget\n && prevParagraph.associatedCell.ownerRow.nextRenderedWidget === this.currentWidget.paragraph.associatedCell.ownerRow)) {\n var cell = selection.getLastCellInRegion(this.currentWidget.paragraph.associatedCell.ownerRow, this.currentWidget.paragraph.associatedCell, this.owner.selectionModule.upDownSelectionLength, true);\n this.setPosition(selection.getFirstParagraph(cell).childWidgets[0], false);\n }\n nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n }\n //Moves till the Up/Down selection width.\n var top = this.selection.getTop(nextLine);\n if (nextLine !== currentLine) {\n this.selection.updateTextPositionWidget(nextLine, new Point(left, top), this, false);\n }\n };\n /**\n * Moves the text position to start of the line.\n *\n * @private\n */\n TextPosition.prototype.moveToLineStartInternal = function (selection, moveToPreviousLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetInternal(this.currentWidget, this.offset, moveToPreviousLine);\n var firstElement = selection.getFirstElementInternal(currentLine);\n this.documentHelper.moveCaretPosition = 1;\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n if (isNullOrUndefined(firstElement) && this.offset > startOffset) {\n var index = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, index);\n var inline = inlineObj.element;\n index = inlineObj.index;\n if (inline instanceof TextElementBox && inline.text !== '\\v') {\n this.offset = startOffset;\n }\n }\n else if (!isNullOrUndefined(firstElement)) {\n var indexInInline = 0;\n this.currentWidget = firstElement.line;\n this.offset = this.currentWidget.getOffset(firstElement, indexInInline);\n indexInInline = 0;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (inline instanceof FieldElementBox) {\n //Checks if field character is part of rendered field, otherwise moves to previous rendered content.\n var prevInline = selection.getPreviousValidElement(inline);\n if (!isNullOrUndefined(prevInline)) {\n inline = prevInline;\n this.currentWidget = inline.line;\n this.offset = this.currentWidget.getOffset(inline, inline.length);\n if (inline instanceof FieldElementBox) {\n this.offset--;\n }\n }\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Check paragraph is inside table\n *\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTableCheck = function () {\n if ((this.selection.start.paragraph.isInsideTable || this.paragraph.isInsideTable)\n && (this.selection.start.paragraph.associatedCell !== this.paragraph.associatedCell\n || this.selection.isCellSelected(this.selection.start.paragraph.associatedCell, this.selection.start, this))) {\n return true;\n }\n return false;\n };\n /**\n * Moves the text position to end of the word.\n *\n * @private\n */\n TextPosition.prototype.moveToWordEndInternal = function (type, excludeSpace) {\n // type === 0 -------->CTRL+ARROW Navigation\n // type === 1 -------->CTRL+SHIFT+ARROW Selection\n // type === 2 -------->Double-tap Word Selection\n var incrementValue = 0;\n var endOffset = this.currentWidget.getEndOffset();\n if (this.selection.isParagraphFirstLine(this.currentWidget)) {\n if (this.currentWidget.children[0] instanceof ListTextElementBox) {\n incrementValue = 1;\n }\n if (this.currentWidget.children[1] instanceof ListTextElementBox) {\n incrementValue = 2;\n }\n }\n if ((this.offset + incrementValue === endOffset || this.offset === endOffset + 1) && isNullOrUndefined(this.currentWidget.nextLine)) {\n if (this.offset === endOffset && type !== 0) {\n this.setPositionParagraph(this.currentWidget, endOffset + 1);\n }\n else {\n var nextParagraph = this.selection.getNextParagraphBlock(this.currentWidget.paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[0];\n this.offset = this.selection.getStartLineOffset(this.currentWidget);\n if (type === 1) {\n var nextWord = this.moveToNextParagraphInTableCheck();\n if (nextWord) {\n this.moveToNextParagraphInTable();\n }\n else {\n this.moveToWordEndInternal(type, excludeSpace);\n }\n }\n }\n }\n else {\n var indexInInline = 0;\n var endSelection = false;\n var inlineObj = this.currentWidget.getInline(this.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.getNextWordOffset(inline, indexInInline, type, false, endSelection, this, excludeSpace);\n }\n if (type !== 0) {\n var selectionStartIndex = this.owner.selectionModule.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex) {\n this.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * move text position to next paragraph inside table\n *\n * @private\n */\n TextPosition.prototype.moveToNextParagraphInTable = function () {\n var paragraph = this.currentWidget.paragraph;\n var nextParagraph = (paragraph.isInsideTable) ? this.selection.getNextSelectionCell(paragraph.associatedCell) :\n this.selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n return;\n }\n this.currentWidget = nextParagraph.childWidgets[nextParagraph.childWidgets.length - 1];\n this.offset = this.currentWidget.getEndOffset() + 1;\n };\n /**\n * Moves the text position to start of the previous paragraph.\n *\n */\n TextPosition.prototype.moveToPreviousParagraph = function (selection) {\n var startOffset = selection.getStartOffset(this.currentWidget.paragraph);\n if (this.offset === startOffset && !isNullOrUndefined(selection.getPreviousParagraphBlock(this.currentWidget.paragraph))) {\n var previousParagraph = selection.getPreviousParagraphBlock(this.currentWidget.paragraph);\n this.currentWidget = previousParagraph.childWidgets[0];\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n else {\n this.offset = selection.getStartOffset(this.currentWidget.paragraph);\n }\n this.updatePhysicalPosition(true);\n };\n /**\n * Move to previous line from current position\n *\n * @private\n */\n TextPosition.prototype.moveToPreviousLine = function (selection, left) {\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n //Moves text position to start of line.\n this.moveToLineStartInternal(selection, true);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveUpInTable(selection);\n }\n else {\n this.moveBackward();\n }\n var prevLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(prevLine);\n var lineWidth = selection.getWidth(prevLine, true);\n //Moves till the Up/Down selection width.\n if (lineWidth + lineStart >= left && currentLine !== prevLine) {\n var top_1 = selection.getTop(prevLine);\n var point = new Point(left, top_1);\n selection.updateTextPositionWidget(prevLine, point, this, true);\n }\n //Checks if the current position is between field result, then move to field begin.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateBackwardFieldSelection(currentIndex, selectionEndIndex);\n };\n /**\n * @param {Selection} selection Specifies the selection\n * @param {boolean} moveToNextLine Specifies the move to next line\n * @private\n */\n TextPosition.prototype.moveToLineEndInternal = function (selection, moveToNextLine) {\n if (this.location.x > this.viewer.clientActiveArea.right) {\n this.offset = this.offset - 1;\n }\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var firstElement = selection.getFirstElementInternal(currentLine);\n var isParaBidi = this.currentWidget.paragraph.paragraphFormat.bidi;\n this.documentHelper.moveCaretPosition = 2;\n if (isNullOrUndefined(firstElement) && this.offset === selection.getStartLineOffset(this.currentWidget)) {\n this.offset = selection.getParagraphLength(this.paragraph) + 1;\n this.updatePhysicalPosition(true);\n }\n else if (!isNullOrUndefined(firstElement)) {\n var lastElement = void 0;\n // As per Microsoft Behavior, when current para is RTL and if line widget contains rtl text or mixed inlines(rtl, normal),\n // then need to consider the last element and to update offset to last element\n if (isParaBidi && this.containsRtlText(currentLine)) {\n var endOffset = currentLine.getEndOffset();\n lastElement = currentLine.getInline(endOffset, 0).element;\n }\n else {\n lastElement = currentLine.children[currentLine.children.length - 1];\n if (lastElement instanceof ListTextElementBox && currentLine.children.length > 2) {\n lastElement = currentLine.children[currentLine.children.length - 3];\n }\n }\n var index = 0;\n index += lastElement instanceof TextElementBox ? lastElement.length : 1;\n this.currentWidget = lastElement.line;\n if (index === lastElement.length\n && isNullOrUndefined(lastElement.nextNode) && selection.isParagraphLastLine(this.currentWidget)) {\n var length_1 = selection.getLineLength(this.currentWidget);\n this.offset = moveToNextLine ? length_1 + 1 : length_1;\n }\n else {\n var inline = lastElement;\n while (!isNullOrUndefined(inline) && inline.length === index && inline.nextNode instanceof FieldElementBox) {\n var nextInline = selection.getNextValidElement(inline.nextNode);\n if (inline !== nextInline) {\n inline = nextInline;\n index = 0;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n this.currentWidget = inline.line;\n if (this.currentWidget === fieldBegin.fieldEnd.line\n && !selection.hasValidInline(this.currentWidget.paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n }\n this.currentWidget = inline.line;\n }\n if (inline instanceof FieldElementBox) {\n index = 1;\n }\n }\n if (index === inline.length && isNullOrUndefined(inline.nextNode)) {\n index++;\n }\n if (!moveToNextLine && inline instanceof ElementBox && inline.text === '\\v') {\n index--;\n }\n this.offset = this.currentWidget.getOffset(inline, index);\n }\n this.updatePhysicalPosition(moveToNextLine);\n }\n };\n /**\n * Move to next line\n *\n * @param {number} left Specified the left\n * @private\n * @returns {void}\n */\n TextPosition.prototype.moveToNextLine = function (left) {\n var selection = this.selection;\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionInternal(this);\n var currentIndex = this.getHierarchicalIndexInternal();\n var currentLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n //Moves text position to end of line.\n this.moveToLineEndInternal(selection, true);\n var isMoveToLineEnd = !textPosition.isAtSamePosition(this);\n textPosition.setPositionInternal(this);\n if (this.currentWidget.paragraph.isInsideTable) {\n this.moveDownInTable(selection);\n }\n else {\n this.moveNextPosition();\n var isAtLineStart = this.offset === 0 ? true : false;\n if (!isAtLineStart) {\n this.moveForward();\n }\n }\n var nextLine = selection.getLineWidgetParagraph(this.offset, this.currentWidget);\n var lineStart = selection.getLeft(nextLine);\n var firstElement = selection.getFirstElementInternal(nextLine);\n var firstItemWidth = isNullOrUndefined(firstElement) ? selection.getWidth(nextLine, true) : selection.getLeftInternal(nextLine, firstElement, 1) - lineStart;\n //Moves till the Up/Down selection width.\n if (lineStart < left && (firstItemWidth / 2 < left - lineStart)) {\n var top_2 = selection.getTop(nextLine);\n var point = new Point(left, top_2);\n selection.updateTextPositionWidget(nextLine, point, this, true);\n var width = selection.getWidth(nextLine, true);\n if (width < left - lineStart) {\n this.moveToLineEndInternal(selection, true);\n }\n }\n else if (isMoveToLineEnd && this.currentWidget.paragraph.isInsideTable\n && this.currentWidget === this.owner.selectionModule.start.currentWidget) {\n this.setPositionInternal(textPosition);\n }\n else if (!isMoveToLineEnd) {\n this.moveToLineEndInternal(selection, true);\n }\n //Checks if the current position is between field result, then move to field end.\n var selectionEndIndex = this.getHierarchicalIndexInternal();\n this.validateForwardFieldSelection(currentIndex, selectionEndIndex);\n };\n TextPosition.prototype.moveUpInTable = function (selection) {\n var isPositionUpdated = false;\n var end = this.owner.selectionModule.end;\n var isBackwardSelection = !this.owner.selectionModule.isEmpty;\n isPositionUpdated = end.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.currentWidget.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(endCell, startCell);\n isPositionUpdated = containerCell.ownerTable.contains(startCell);\n if (isPositionUpdated) {\n endCell = selection.getSelectedCell(endCell, containerCell);\n startCell = selection.getSelectedCell(startCell, containerCell);\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this, end);\n if (!isContainerCellSelected) {\n isContainerCellSelected = this.currentWidget.paragraph === selection.getFirstParagraph(containerCell) && this.isAtParagraphStart;\n }\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(startCell.ownerRow.previousRenderedWidget)) {\n //Moves to cell in previous row.\n var row = startCell.ownerRow.previousRenderedWidget;\n var cell = selection.getFirstCellInRegion(row, containerCell, this.owner.selectionModule.upDownSelectionLength, true);\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(startCell.ownerRow.previousRenderedWidget) || !isInContainerCell) {\n if (isBackwardSelection) {\n //Moves to first cell of row.\n startCell = startCell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to last cell of row.\n startCell = startCell.ownerRow.childWidgets[startCell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(startCell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to previous row / previous block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isBackwardSelection) {\n //Moves to first cell of row.\n cell = cell.ownerRow.childWidgets[0];\n var previousParagraph = selection.getFirstParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], true);\n }\n else {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var previousParagraph = selection.getLastParagraph(cell);\n this.setPosition(previousParagraph.childWidgets[0], false);\n }\n }\n //Moves to previous row / previous block.\n this.moveBackward();\n };\n TextPosition.prototype.moveDownInTable = function (selection) {\n var isPositionUpdated = false;\n var isForwardSelection = this.owner.selectionModule.isEmpty || this.owner.selectionModule.isForward;\n isPositionUpdated = this.owner.selectionModule.start.paragraph.isInsideTable;\n if (isPositionUpdated) {\n var startCell = this.owner.selectionModule.start.paragraph.associatedCell;\n var endCell = this.currentWidget.paragraph.associatedCell;\n var containerCell = selection.getContainerCellOf(startCell, endCell);\n isPositionUpdated = containerCell.ownerTable.contains(endCell);\n if (isPositionUpdated) {\n startCell = selection.getSelectedCell(startCell, containerCell);\n endCell = selection.getSelectedCell(endCell, containerCell);\n var isInContainerCell = selection.containsCell(containerCell, this.currentWidget.paragraph.associatedCell);\n var isContainerCellSelected = selection.isCellSelected(containerCell, this.owner.selectionModule.start, this);\n if ((isInContainerCell && isContainerCellSelected\n || !isInContainerCell) && !isNullOrUndefined(endCell.ownerRow.nextRenderedWidget)) {\n //Moves to cell in next row.\n var row = endCell.ownerRow.nextRenderedWidget;\n var cell = selection.getLastCellInRegion(row, containerCell, this.owner.selectionModule.upDownSelectionLength, false);\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n return;\n }\n else if (isInContainerCell && isContainerCellSelected\n && isNullOrUndefined(endCell.ownerRow.nextRenderedWidget) || !isInContainerCell) {\n if (isForwardSelection) {\n //Moves to last cell of row.\n endCell = endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else {\n //Moves to first cell of row.\n endCell = endCell.ownerRow.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(endCell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n }\n }\n if (!isPositionUpdated) {\n //Moves to next row / next block.\n var cell = selection.getContainerCell(this.currentWidget.paragraph.associatedCell);\n if (isForwardSelection) {\n //Moves to end of row.\n cell = cell.ownerRow.childWidgets[cell.ownerRow.childWidgets.length - 1];\n var lastParagraph = selection.getLastParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], false);\n }\n else if (cell.ownerRow.nextRenderedWidget) {\n //Moves to first cell of row.\n cell = cell.ownerRow.nextRenderedWidget.childWidgets[0];\n var lastParagraph = selection.getFirstParagraph(cell);\n this.setPosition(lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1], true);\n }\n }\n //Moves to next row / next block.\n this.moveForward();\n };\n /**\n * @private\n * @returns {void}\n */\n TextPosition.prototype.destroy = function () {\n this.offset = undefined;\n this.isUpdateLocation = undefined;\n if (!isNullOrUndefined(this.location)) {\n this.location.destroy();\n }\n this.location = undefined;\n this.currentWidget = undefined;\n this.owner = undefined;\n this.documentHelper = undefined;\n };\n return TextPosition;\n}());\nexport { TextPosition };\n/**\n * @private\n */\nvar SelectionWidgetInfo = /** @class */ (function () {\n function SelectionWidgetInfo(left, width) {\n this.leftIn = 0;\n this.widthIn = 0;\n this.color = '';\n this.leftIn = left;\n this.widthIn = width;\n }\n Object.defineProperty(SelectionWidgetInfo.prototype, \"left\", {\n /**\n * @private\n */\n get: function () {\n return this.leftIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.leftIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectionWidgetInfo.prototype, \"width\", {\n /**\n * @private\n */\n get: function () {\n return this.widthIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n */\n SelectionWidgetInfo.prototype.destroy = function () {\n this.widthIn = undefined;\n this.leftIn = undefined;\n this.floatingItems = [];\n this.floatingItems = undefined;\n };\n return SelectionWidgetInfo;\n}());\nexport { SelectionWidgetInfo };\n/**\n * @private\n */\nvar Hyperlink = /** @class */ (function () {\n function Hyperlink(fieldBeginAdv, selection) {\n this.linkInternal = '';\n this.localRef = '';\n this.opensNewWindow = false;\n this.isCrossRefField = false;\n this.screenTipText = '';\n var fieldCode = selection.getFieldCode(fieldBeginAdv);\n var lowercase = fieldCode.toLowerCase();\n if (lowercase.substring(0, 9) === 'hyperlink') {\n this.parseFieldValues(fieldCode.substring(9).trim(), true);\n }\n else if ((lowercase.indexOf('ref ') === 0 && lowercase.match('\\\\h'))) {\n this.parseFieldValues(fieldCode.substring(4).trim(), false);\n this.isCrossRefField = true;\n }\n else if (lowercase.indexOf('pageref') === 0) {\n this.parseFieldValues(fieldCode.substring(7).trim(), false);\n }\n }\n Object.defineProperty(Hyperlink.prototype, \"screenTip\", {\n /**\n * Gets screentip text.\n *\n * @returns string\n * @private\n */\n get: function () {\n return this.screenTipText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"navigationLink\", {\n /**\n * Gets navigation link.\n *\n * @returns string\n * @private\n */\n get: function () {\n return this.linkInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"localReference\", {\n /**\n * Gets the local reference if any.\n *\n * @returns string\n * @private\n */\n get: function () {\n return this.localRef;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"linkType\", {\n /**\n * Gets hyper link type.\n *\n * @returns HyperLinkType\n * @private\n */\n get: function () {\n return this.typeInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Hyperlink.prototype, \"isCrossRef\", {\n /**\n * @private\n */\n get: function () {\n return this.isCrossRefField;\n },\n enumerable: true,\n configurable: true\n });\n Hyperlink.prototype.parseFieldValues = function (value, isHyperlink) {\n var codes = value.split('\\\\o ');\n if (codes.length === 2) {\n this.screenTipText = this.parseFieldValue(codes[1], codes[1] === '\\\"' ? '\\\"' : undefined, isHyperlink);\n this.screenTipText = this.screenTipText.substring(0, this.screenTipText.length - 1);\n value = codes[0];\n codes = undefined;\n }\n codes = value.split(' ');\n var isLocalRef = false;\n var hyperlinkRef = true;\n if (isHyperlink) {\n for (var i = 0; i < codes.length; i++) {\n var code = codes[i];\n if (code.length < 1) {\n continue;\n }\n if (code === '\\\\t' || code === '\\\\l') {\n isLocalRef = true;\n }\n else if (code === '\\\\n') {\n this.opensNewWindow = true;\n }\n else {\n code = this.parseFieldValue(code, code[0] === '\\\"' ? '\\\"' : undefined, isHyperlink);\n if (isLocalRef) {\n this.localRef = code;\n isLocalRef = false;\n hyperlinkRef = false;\n }\n else if (hyperlinkRef) {\n this.linkInternal = this.parseFieldValue(value, value[0] === '\\\"' ? '\\\"' : undefined, isHyperlink);\n }\n else {\n this.linkInternal = code;\n }\n }\n }\n }\n else {\n this.localRef = codes[0];\n }\n this.setLinkType();\n };\n Hyperlink.prototype.parseFieldValue = function (value, endChar, isHyperlink) {\n value = isHyperlink ? value.substring(1) : value.substring(0);\n var endIndex = endChar ? value.indexOf(endChar) : -1;\n if (endIndex < 0) {\n endIndex = value.length;\n }\n return value.substring(0, endIndex).trim();\n };\n Hyperlink.prototype.setLinkType = function () {\n // If only local reference.\n if (isNullOrUndefined(this.linkInternal) || this.linkInternal.length < 1) {\n this.typeInternal = 'Bookmark';\n return;\n }\n // Validates link.\n if (this.linkInternal.substring(0, 4) === ('www.')) {\n this.linkInternal = 'http://' + this.navigationLink;\n }\n else if (this.linkInternal[0] === '@') {\n this.linkInternal = 'mailto:' + this.navigationLink;\n }\n // Finds proper link type.\n if (this.linkInternal.substring(0, 7) === 'http://'\n || this.linkInternal.substring(0, 8) === 'https://') {\n this.typeInternal = 'WebPage';\n }\n else if (this.linkInternal.substring(0, 7) === 'mailto:') {\n this.typeInternal = 'Email';\n }\n else {\n this.typeInternal = 'File';\n }\n };\n /**\n * @private\n */\n Hyperlink.prototype.destroy = function () {\n this.linkInternal = undefined;\n this.localRef = undefined;\n this.typeInternal = undefined;\n this.opensNewWindow = undefined;\n this.screenTipText = undefined;\n };\n return Hyperlink;\n}());\nexport { Hyperlink };\n/**\n * @private\n */\nvar ImageSizeInfo = /** @class */ (function () {\n /**\n * Constructor for image format class\n *\n * @param imageContainer - Specifies for image width and height values.\n */\n function ImageSizeInfo(imageContainer) {\n /**\n * @private\n */\n this.width = 0;\n /**\n * @private\n */\n this.height = 0;\n this.width = imageContainer.width;\n this.height = imageContainer.height;\n this.alternatetext = imageContainer.alternateText;\n }\n /**\n * Dispose the internal objects which are maintained.\n *\n * @private\n */\n ImageSizeInfo.prototype.destroy = function () {\n this.width = undefined;\n this.height = undefined;\n this.alternatetext = undefined;\n };\n return ImageSizeInfo;\n}());\nexport { ImageSizeInfo };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { Widget, BodyWidget, TableRowWidget, TableWidget, LineWidget, TextElementBox, ListTextElementBox, ImageElementBox, ParagraphWidget, TableCellWidget, FieldElementBox, BlockWidget, HeaderFooterWidget, BlockContainer, BookmarkElementBox, ElementBox, EditRangeStartElementBox, EditRangeEndElementBox, TabElementBox, CommentElementBox, CommentCharacterElementBox, TextFormField, CheckBoxFormField, DropDownFormField, ShapeElementBox, TextFrame, ContentControl, FieldTextElementBox, FootNoteWidget, FootnoteElementBox, ShapeBase } from '../viewer/page';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { SelectionCharacterFormat, SelectionCellFormat, SelectionParagraphFormat, SelectionRowFormat, SelectionSectionFormat, SelectionTableFormat, SelectionImageFormat } from './selection-format';\nimport { PageLayoutViewer, WebLayoutViewer, WRowFormat } from '../index';\nimport { isNullOrUndefined, createElement, L10n, Browser } from '@syncfusion/ej2-base';\nimport { Dictionary } from '../../base/dictionary';\nimport { contentControlEvent, beforeFormFieldFillEvent, afterFormFieldFillEvent, requestNavigateEvent, CharacterRangeType } from '../../base/index';\nimport { WCharacterFormat, WParagraphFormat, WParagraphStyle } from '../index';\nimport { HtmlExport } from '../writer/html-export';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { TextPosition, SelectionWidgetInfo, Hyperlink } from './selection-helper';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\n/* eslint-disable */\n/**\n * Selection\n */\nvar Selection = /** @class */ (function () {\n /**\n * @param documentEditor\n * @private\n */\n function Selection(documentEditor) {\n var _this = this;\n /**\n * @private\n */\n this.upDownSelectionLength = 0;\n /**\n * @private\n */\n this.isSkipLayouting = false;\n /**\n * @private\n */\n this.isImageSelected = false;\n this.contextTypeInternal = undefined;\n /**\n * @private\n */\n this.caret = undefined;\n //Format Retrieval Field\n /**\n * @private\n */\n this.isRetrieveFormatting = false;\n /**\n * @private\n */\n this.skipFormatRetrieval = false;\n /**\n * @private\n */\n this.isModifyingSelectionInternally = false;\n this.isMoveDownOrMoveUp = false;\n /**\n * @private\n */\n this.isEndOffset = false;\n /**\n * @private\n */\n this.isViewPasteOptions = false;\n /**\n * @private\n */\n this.skipEditRangeRetrieval = false;\n /**\n * @private\n */\n this.selectedWidgets = undefined;\n /**\n * @private\n */\n this.isHighlightEditRegionIn = false;\n /**\n * @private\n */\n this.isHighlightContentControlEditRegionIn = false;\n /**\n * @private\n */\n this.isHighlightFormFields = false;\n /**\n * @private\n */\n this.isHightlightEditRegionInternal = false;\n /**\n * @private\n */\n this.isCurrentUser = false;\n /**\n * @private\n */\n this.isHighlightNext = false;\n /**\n * @private\n */\n this.isWebLayout = false;\n /**\n * @private\n */\n this.contentControlHighlighters = undefined;\n /**\n * @private\n */\n this.editRegionHighlighters = undefined;\n /**\n * @private\n */\n this.contentControleditRegionHighlighters = undefined;\n /**\n * @private\n */\n this.formFieldHighlighters = undefined;\n this.isSelectList = false;\n /**\n * @private\n */\n this.previousSelectedFormField = undefined;\n /**\n * @private\n */\n this.isFormatUpdated = false;\n /**\n * @private\n */\n this.isCellPrevSelected = false;\n /**\n * @private\n */\n this.currentFormField = undefined;\n /**\n * @private\n */\n this.pasteOptions = function (event) {\n var locale = new L10n('documenteditor', _this.owner.defaultLocale);\n locale.setLocale(_this.owner.locale);\n if (event.item.text === locale.getConstant('Keep source formatting')) {\n _this.owner.editorModule.applyPasteOptions('KeepSourceFormatting');\n }\n else if (event.item.text === locale.getConstant('Match destination formatting')) {\n _this.owner.editorModule.applyPasteOptions('MergeWithExistingFormatting');\n }\n else if (event.item.text === locale.getConstant('NestTable')) {\n _this.owner.editorModule.applyTablePasteOptions('NestTable');\n }\n else if (event.item.text === locale.getConstant('InsertAsRows')) {\n _this.owner.editorModule.applyTablePasteOptions('InsertAsRows');\n }\n else if (event.item.text === locale.getConstant('InsertAsColumns')) {\n _this.owner.editorModule.applyTablePasteOptions('InsertAsColumns');\n }\n else if (event.item.text === locale.getConstant('OverwriteCells')) {\n _this.owner.editorModule.applyTablePasteOptions('OverwriteCells');\n }\n else {\n _this.owner.editorModule.applyPasteOptions('KeepTextOnly');\n }\n };\n /**\n * Hides caret.\n *\n * @private\n * @returns {void}\n */\n this.hideCaret = function () {\n if (!isNullOrUndefined(_this.caret)) {\n _this.caret.style.display = 'none';\n }\n };\n this.owner = documentEditor;\n this.documentHelper = this.owner.documentHelper;\n this.start = new TextPosition(this.owner);\n this.end = new TextPosition(this.owner);\n this.selectedWidgets = new Dictionary();\n this.characterFormatIn = new SelectionCharacterFormat(this);\n this.paragraphFormatIn = new SelectionParagraphFormat(this, this.documentHelper);\n this.sectionFormatIn = new SelectionSectionFormat(this);\n this.rowFormatIn = new SelectionRowFormat(this);\n this.cellFormatIn = new SelectionCellFormat(this);\n this.tableFormatIn = new SelectionTableFormat(this);\n this.imageFormatInternal = new SelectionImageFormat(this);\n this.editRangeCollection = [];\n this.editRegionHighlighters = new Dictionary();\n this.contentControleditRegionHighlighters = new Dictionary();\n this.formFieldHighlighters = new Dictionary();\n this.contentControleditRegionHighlighters = new Dictionary();\n }\n Object.defineProperty(Selection.prototype, \"isHighlightEditRegion\", {\n // Code for Comparing the offset calculated using old approach and optimized approach\n // /**\n // * @private\n // */\n // public isNewApproach: boolean;\n /**\n * @private\n * @returns {boolean} - Retuens true if highlighting editing region\n */\n get: function () {\n return this.isHighlightEditRegionIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isHighlightEditRegionIn = value;\n this.onHighlight();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isHighlightContentControlEditRegion\", {\n /**\n * @private\n * @returns {boolean} - Retuens true if highlighting editing region\n */\n get: function () {\n return this.isHighlightContentControlEditRegionIn;\n },\n /**\n * @private\n */\n set: function (value) {\n this.isHighlightContentControlEditRegionIn = value;\n this.onHighlightContentControl();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"htmlWriter\", {\n /**\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.htmlWriterIn)) {\n this.htmlWriterIn = new HtmlExport();\n }\n return this.htmlWriterIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"start\", {\n /**\n * Gets the start text position of last range in the selection\n *\n * @private\n * @returns {TextPosition} - Returns selection start position.\n */\n get: function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.viewer)) {\n if (isNullOrUndefined(this.startInternal)) {\n this.startInternal = this.owner.documentStart;\n }\n return this.startInternal;\n }\n return undefined;\n },\n /**\n * @private\n */\n set: function (value) {\n this.startInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"characterFormat\", {\n //Format retrieval properties\n /**\n * Gets the instance of selection character format.\n *\n * @default undefined\n * @aspType SelectionCharacterFormat\n * @returns {SelectionCharacterFormat} Returns the selection character format.\n */\n get: function () {\n return this.characterFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"paragraphFormat\", {\n /**\n * Gets the instance of selection paragraph format.\n *\n * @default undefined\n * @aspType SelectionParagraphFormat\n * @returns {SelectionParagraphFormat} Returns the selection paragraph format.\n */\n get: function () {\n return this.paragraphFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"sectionFormat\", {\n /**\n * Gets the instance of selection section format.\n *\n * @default undefined\n * @aspType SelectionSectionFormat\n * @returns {SelectionSectionFormat} Returns the selection section format.\n */\n get: function () {\n return this.sectionFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"tableFormat\", {\n /**\n * Gets the instance of selection table format.\n *\n * @default undefined\n * @aspType SelectionTableFormat\n * @returns {SelectionTableFormat} Returns the selection table format.\n */\n get: function () {\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"cellFormat\", {\n /**\n * Gets the instance of selection cell format.\n *\n * @default undefined\n * @aspType SelectionCellFormat\n * @returns {SelectionCellFormat} Returns the selection cell format.\n */\n get: function () {\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"rowFormat\", {\n /**\n * Gets the instance of selection row format.\n *\n * @default undefined\n * @aspType SelectionRowFormat\n * @returns {SelectionRowFormat} Returns selection row format.\n */\n get: function () {\n return this.rowFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"imageFormat\", {\n /**\n * Gets the instance of selection image format.\n *\n * @default undefined\n * @aspType SelectionImageFormat\n * @returns {SelectionImageFormat} Returns the selection image format.\n */\n get: function () {\n return this.imageFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"end\", {\n /**\n * Gets the start text position of selection range.\n *\n * @private\n * @returns {TextPosition} - Returns selection end position.\n */\n get: function () {\n return this.endInternal;\n },\n /**\n * For internal use\n *\n * @private\n */\n set: function (value) {\n this.endInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"startPage\", {\n /**\n * Gets the page number where the selection starts.\n *\n * @returns {number} Returns the selection start page number.\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || this.viewer instanceof WebLayoutViewer || isNullOrUndefined(this.documentHelper.selectionStartPage)) {\n return 1;\n }\n return this.documentHelper.pages.indexOf(this.documentHelper.selectionStartPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"endPage\", {\n /**\n * Gets the page number where the selection ends.\n *\n * @returns {number} Returns the selection end page number.\n */\n get: function () {\n if (!this.owner.isDocumentLoaded || isNullOrUndefined(this.viewer)\n || this.viewer instanceof WebLayoutViewer || isNullOrUndefined(this.documentHelper.selectionEndPage)) {\n return 1;\n }\n return this.documentHelper.pages.indexOf(this.documentHelper.selectionEndPage) + 1;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isForward\", {\n /**\n * Determines whether the selection direction is forward or not.\n *\n * @default false\n * @private\n * @returns {boolean} Returns isForward\n */\n get: function () {\n return this.start.isExistBefore(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isinFootnote\", {\n /**\n * Determines whether the selection is in footnote or not.\n *\n * @default false\n * @returns {boolean} Returns true if selection is in footnote\n * @private\n */\n get: function () {\n return this.isFootNoteParagraph(this.start.paragraph);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isinEndnote\", {\n /**\n * Determines whether the selection is in endnote or not.\n *\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n return this.isEndNoteParagraph(this.start.paragraph);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isEmpty\", {\n /**\n * Determines whether the start and end positions are same or not.\n *\n * @default false\n * @returns {boolean}\n * @private\n */\n get: function () {\n if (isNullOrUndefined(this.start)) {\n return true;\n }\n return this.start.isAtSamePosition(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"startOffset\", {\n /**\n * Returns the start hierarchical index.\n */\n get: function () {\n return this.getHierarchicalIndexByPosition(this.start);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"endOffset\", {\n /**\n * Returns the end hierarchical index.\n */\n get: function () {\n return this.getHierarchicalIndexByPosition(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isInShape\", {\n /**\n * @private\n */\n get: function () {\n var container = this.start.paragraph.containerWidget;\n do {\n if (container instanceof TextFrame) {\n return true;\n }\n if (container) {\n container = container.containerWidget;\n }\n } while (container);\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"text\", {\n /**\n * Gets the text within selection.\n *\n * @default ''\n * @aspType string\n * @returns {string} Returns the text within selection.\n */\n get: function () {\n return this.getText(false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"contextType\", {\n /**\n * Gets the context type of the selection.\n */\n get: function () {\n return this.contextTypeInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"bookmarks\", {\n /**\n * Gets bookmark name collection.\n */\n get: function () {\n return this.getSelBookmarks(false);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"sfdt\", {\n /**\n * Gets the selected content of the document as SFDT(Syncfusion Document Text) file format.\n *\n * @default undefined\n * @returns {string}\n */\n get: function () {\n if (this.owner.editorModule && !this.isEmpty) {\n return JSON.stringify(this.writeSfdt());\n }\n else {\n return undefined;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the bookmark name collection in current selection.\n *\n * @param includeHidden - Decide whether to include hidden bookmark name in current selection or not.\n * @returns Returns the bookmark name collection in current selection.\n */\n Selection.prototype.getBookmarks = function (includeHidden) {\n return this.getSelBookmarks(includeHidden);\n };\n Object.defineProperty(Selection.prototype, \"isCleared\", {\n /**\n * @private\n */\n get: function () {\n return isNullOrUndefined(this.end);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"isInField\", {\n /**\n * Returns true if selection is in field.\n *\n * @returns Returns true if selection is in field; Otherwise, false.\n */\n get: function () {\n if (!isNullOrUndefined(this.getHyperlinkField(true))) {\n return true;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Gets the field information for the selected field.\n *\n * @returns { FieldInfo } Returns `FieldInfo` if selection is in field, otherwise `undefined`\n * > Returns `undefined` for text, image, table, shape. For nested fields, it returns combined field code and result.\n */\n Selection.prototype.getFieldInfo = function () {\n var field = this.getHyperlinkField(true);\n if (!isNullOrUndefined(field)) {\n var code = this.getFieldCode(field);\n var result = this.owner.editorModule.getFieldResultText(field);\n return {\n code: code,\n result: result\n };\n }\n return undefined;\n };\n Selection.prototype.isFootNoteParagraph = function (paragraph) {\n var container = this.getContainerWidget(paragraph);\n if (container instanceof FootNoteWidget && container.footNoteType === 'Footnote') {\n return true;\n }\n else {\n return false;\n }\n };\n Selection.prototype.isEndNoteParagraph = function (paragraph) {\n var container = this.getContainerWidget(paragraph);\n if (container instanceof FootNoteWidget && container.footNoteType === 'Endnote') {\n return true;\n }\n else {\n return false;\n }\n };\n /**\n * @param documentEditor\n * @private\n */\n Selection.prototype.isFootEndNoteParagraph = function (paragraph) {\n if (this.isFootNoteParagraph(paragraph)) {\n return true;\n }\n else if (this.isEndNoteParagraph(paragraph)) {\n return true;\n }\n else {\n return false;\n }\n };\n Selection.prototype.getSelBookmarks = function (includeHidden) {\n var bookmarkCln = [];\n var bookmarks = this.documentHelper.bookmarks;\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n var bookmrkStart;\n var bookmrkEnd;\n var isCellSelected = false;\n var selectedCells = this.getSelectedCells();\n for (var i = 0; i < bookmarks.length; i++) {\n if (includeHidden || !includeHidden && bookmarks.keys[i].indexOf('_') !== 0) {\n bookmrkStart = bookmarks.get(bookmarks.keys[i]);\n bookmrkEnd = bookmrkStart.reference;\n if (isNullOrUndefined(bookmrkEnd)) {\n continue;\n }\n var bmStartPos = this.getElementPosition(bookmrkStart).startPosition;\n var bmEndPos = this.getElementPosition(bookmrkEnd, true).startPosition;\n if (bmStartPos.paragraph.isInsideTable || bmEndPos.paragraph.isInsideTable) {\n if (selectedCells.length > 0) {\n if (selectedCells.indexOf(bmStartPos.paragraph.associatedCell) >= 0\n || selectedCells.indexOf(bmEndPos.paragraph.associatedCell) >= 0) {\n isCellSelected = true;\n }\n else {\n isCellSelected = false;\n if (selectedCells.indexOf(bmStartPos.paragraph.associatedCell) < 0\n || selectedCells.indexOf(bmEndPos.paragraph.associatedCell) < 0) {\n var endCell = end.paragraph.isInsideTable && end.paragraph.associatedCell;\n var bmEndPosCell = bmEndPos.paragraph.associatedCell;\n if (endCell && bmEndPosCell && endCell.ownerTable.equals(bmEndPosCell.ownerTable) &&\n !(endCell.ownerTable\n && selectedCells.indexOf(this.getCellInTable(endCell.ownerTable, bmEndPosCell)) >= 0)) {\n // Bug 891131: The below code is comment to resolve the bookmark is not retrieved when selecting the table cell\n // continue;\n }\n }\n }\n }\n else {\n isCellSelected = false;\n }\n }\n else {\n isCellSelected = false;\n }\n if ((start.isExistAfter(bmStartPos) || start.isAtSamePosition(bmStartPos))\n && (end.isExistBefore(bmEndPos) || end.isAtSamePosition(bmEndPos)) ||\n ((bmStartPos.isExistAfter(start) || bmStartPos.isAtSamePosition(start))\n && (bmEndPos.isExistBefore(end) || bmEndPos.isAtSamePosition(end))) ||\n (bmStartPos.isExistAfter(start) && bmStartPos.isExistBefore(end)\n && (end.isExistAfter(bmEndPos) || end.isExistBefore(bmEndPos))) ||\n (bmEndPos.isExistBefore(end) && bmEndPos.isExistAfter(start)\n && (start.isExistBefore(bmStartPos) || start.isExistAfter(bmStartPos))) || isCellSelected) {\n bookmarkCln.push(bookmrkStart.name);\n }\n }\n }\n return bookmarkCln;\n };\n Object.defineProperty(Selection.prototype, \"viewer\", {\n /**\n *\n * @private\n */\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Selection.prototype.getModuleName = function () {\n return 'Selection';\n };\n Selection.prototype.checkLayout = function () {\n if (this.owner.layoutType === 'Continuous') {\n this.isWebLayout = true;\n this.documentHelper.isHeaderFooter = true;\n this.owner.layoutType = 'Pages';\n this.owner.viewer.destroy();\n this.owner.viewer = new PageLayoutViewer(this.owner);\n this.owner.editorModule.layoutWholeDocument();\n }\n };\n //Public API\n /**\n * Moves the selection to the header of current page.\n *\n * @returns {void}\n */\n Selection.prototype.goToHeader = function () {\n this.checkLayout();\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.headerWidget, this.start.paragraph.bodyWidget.page);\n this.isWebLayout = false;\n };\n /**\n * Moves the selection to the footer of current page.\n *\n * @returns {void}\n */\n Selection.prototype.goToFooter = function () {\n this.checkLayout();\n this.owner.enableHeaderAndFooter = true;\n this.enableHeadersFootersRegion(this.start.paragraph.bodyWidget.page.footerWidget, this.start.paragraph.bodyWidget.page);\n this.isWebLayout = false;\n };\n /**\n * Closes the header and footer region.\n *\n * @returns {void}\n */\n Selection.prototype.closeHeaderFooter = function () {\n this.disableHeaderFooter();\n if (this.documentHelper.isHeaderFooter && this.owner.layoutType === 'Pages') {\n this.owner.layoutType = 'Continuous';\n this.documentHelper.isHeaderFooter = false;\n }\n };\n /**\n * Moves the selection to the start of specified page number.\n *\n * @param pageNumber Specify the page number to move selection.\n * @returns {void}\n */\n Selection.prototype.goToPage = function (pageNumber) {\n this.owner.scrollToPage(pageNumber);\n if (pageNumber >= 1 && pageNumber <= this.owner.documentHelper.pages.length) {\n var page = this.owner.documentHelper.pages[pageNumber - 1];\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n }\n };\n /**\n * Selects the entire table if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectTable = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableInternal();\n };\n /**\n * Selects the entire row if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectRow = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableRow();\n };\n /**\n * Selects the entire column if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectColumn = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectColumnInternal();\n };\n /**\n * Selects the entire cell if the context is within table.\n *\n * @returns {void}\n */\n Selection.prototype.selectCell = function () {\n if (!this.owner.enableSelection) {\n return;\n }\n this.selectTableCell();\n };\n Selection.prototype.select = function (selectionSettings, startOrEnd) {\n if (typeof (selectionSettings) === 'string') {\n var startPosition = this.getTextPosBasedOnLogicalIndex(selectionSettings);\n var endPosition = this.getTextPosBasedOnLogicalIndex(startOrEnd);\n this.selectPosition(startPosition, endPosition);\n }\n else {\n var point = new Point(selectionSettings.x, selectionSettings.y);\n var pageCoordinates = this.viewer.findFocusedPage(point, true);\n if (selectionSettings.extend) {\n this.moveTextPosition(pageCoordinates, this.end);\n }\n else {\n this.documentHelper.updateTextPositionForSelection(pageCoordinates, 1);\n }\n }\n };\n /**\n * Selects the content based on the specified start and end hierarchical index.\n *\n * @param start Specify the start index to select.\n * @param end Specify the end index to select.\n * @returns {void}\n */\n Selection.prototype.selectByHierarchicalIndex = function (start, end) {\n var startPosition = this.getTextPosBasedOnLogicalIndex(start);\n var endPosition = this.getTextPosBasedOnLogicalIndex(end);\n this.selectPosition(startPosition, endPosition);\n };\n /**\n * Selects the current field if selection is in field\n *\n * @param fieldStart Specify the field start to select.\n * @returns {void}\n */\n Selection.prototype.selectField = function (fieldStart) {\n if (this.isInField || !isNullOrUndefined(fieldStart)) {\n if (isNullOrUndefined(fieldStart)) {\n fieldStart = this.getHyperlinkField(true);\n }\n this.selectFieldInternal(fieldStart);\n }\n };\n /**\n * @private\n * @param fieldStart\n * @returns {void}\n */\n Selection.prototype.selectContentControlInternal = function (fieldStart) {\n if (fieldStart) {\n var offset = fieldStart.line.getOffset(fieldStart, 1);\n var startPosition = new TextPosition(this.owner);\n var fieldEnd = fieldStart.reference;\n startPosition.setPositionParagraph(fieldStart.line, offset);\n var endoffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(fieldEnd.line, endoffset);\n //selects the field range\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n }\n };\n /**\n * @private\n * @param fieldStart\n * @returns {void}\n */\n Selection.prototype.selectFieldInternal = function (fieldStart, isKeyBoardEvent, isReplacingFormResult) {\n if (fieldStart) {\n var formFillingMode = this.documentHelper.isFormFillProtectedMode || isReplacingFormResult;\n var fieldEnd = fieldStart.fieldEnd;\n if (formFillingMode) {\n fieldStart = fieldStart.fieldSeparator;\n }\n var offset = fieldStart.line.getOffset(fieldStart, formFillingMode ? 1 : 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(fieldStart.line, offset);\n var isBookmark = fieldStart.nextNode instanceof BookmarkElementBox;\n if (isBookmark && !formFillingMode && fieldStart.nextElement.reference) {\n fieldEnd = fieldStart.nextElement.reference;\n }\n var endoffset = fieldEnd.line.getOffset(fieldEnd, formFillingMode ? 0 : 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(fieldEnd.line, endoffset);\n //selects the field range\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n if (!isReplacingFormResult) {\n this.triggerFormFillEvent(isKeyBoardEvent);\n }\n }\n };\n /**\n * @private\n * @param contentControl\n * @returns {void}\n */\n Selection.prototype.selectContentInternal = function (contentControl) {\n if (contentControl) {\n var fieldEnd = contentControl.reference;\n var offset = contentControl.line.getOffset(contentControl, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(contentControl.line, offset);\n var endoffset = fieldEnd.line.getOffset(fieldEnd, 0);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(fieldEnd.line, endoffset);\n startPosition.offset++;\n endPosition.offset;\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n }\n };\n /**\n * @param shape\n * @private\n * @returns {void}\n */\n Selection.prototype.selectShape = function (shape) {\n if (shape) {\n var offset = shape.line.getOffset(shape, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(shape.line, offset);\n var endoffset = shape.line.getOffset(shape, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(shape.line, endoffset);\n this.documentHelper.selection.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Toggles the bold property of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleBold = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleBold();\n }\n };\n /**\n * Toggles the italic property of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleItalic = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleItalic();\n }\n };\n /**\n * Toggles the allCaps property of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleAllCaps = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleAllCaps();\n }\n };\n /**\n * Toggles the underline property of selected contents.\n *\n * @param {Underline} underline Default value of ‘underline’ parameter is Single.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleUnderline = function (underline) {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleUnderline(underline);\n }\n };\n /**\n * Toggles the strike through property of selected contents.\n *\n * @param {Strikethrough} strikethrough Default value of strikethrough parameter is SingleStrike.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleStrikethrough = function (strikethrough) {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleStrikethrough(strikethrough);\n }\n };\n /**\n * Toggles the highlight color property of selected contents.\n *\n * @param {HighlightColor} highlightColor Default value of ‘underline’ parameter is Yellow.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleHighlightColor = function (highlightColor) {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleHighlightColor(highlightColor);\n }\n };\n /**\n * Toggles the subscript formatting of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleSubscript = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleSubscript();\n }\n };\n /**\n * Toggles the superscript formatting of selected contents.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleSuperscript = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleSuperscript();\n }\n };\n /**\n * Toggles the text alignment property of selected contents.\n *\n * @param {TextAlignment} textAlignment Default value of ‘textAlignment parameter is TextAlignment.Left.\n * @private\n * @returns {void}\n */\n Selection.prototype.toggleTextAlignment = function (textAlignment) {\n if (this.owner.editorModule) {\n this.owner.editorModule.toggleTextAlignment(textAlignment);\n }\n };\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.increaseIndent = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.increaseIndent();\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.decreaseIndent = function () {\n if (this.owner.editorModule) {\n this.owner.editorModule.decreaseIndent();\n }\n };\n /**\n * Fires the `requestNavigate` event if current selection context is in hyperlink.\n *\n * @returns {void}\n */\n Selection.prototype.navigateHyperlink = function () {\n var fieldBegin = this.getHyperlinkField();\n if (fieldBegin) {\n this.fireRequestNavigate(fieldBegin);\n }\n };\n /**\n * Navigate Hyperlink\n *\n * @param fieldBegin\n * @private\n * @returns {void}\n */\n Selection.prototype.fireRequestNavigate = function (fieldBegin) {\n var code = this.getFieldCode(fieldBegin);\n if (code.toLowerCase().indexOf('ref ') === 0 && !code.match('\\\\h')) {\n return;\n }\n var hyperlink = new Hyperlink(fieldBegin, this);\n var eventArgs = {\n isHandled: false,\n navigationLink: hyperlink.navigationLink,\n linkType: hyperlink.linkType,\n localReference: hyperlink.localReference,\n source: this.owner\n };\n this.owner.trigger(requestNavigateEvent, eventArgs);\n if (!eventArgs.isHandled) {\n this.documentHelper.selection.navigateBookmark(hyperlink.localReference, true);\n }\n };\n /**\n * Copies the hyperlink URL if the context is within hyperlink.\n *\n * @returns {void}\n */\n Selection.prototype.copyHyperlink = function () {\n var hyperLinkField = this.getHyperlinkField();\n var linkText = this.getLinkText(hyperLinkField, true);\n this.copyToClipboard(linkText);\n };\n Selection.prototype.isHideSelection = function (paragraph) {\n var bodyWgt = paragraph.bodyWidget;\n var sectionFormat = bodyWgt.sectionFormat;\n var pageHt = sectionFormat.pageHeight - sectionFormat.footerDistance;\n var headerFooterHt = bodyWgt.page.boundingRectangle.height / 100 * 40;\n return this.contextType.indexOf('Footer') >= 0\n && (paragraph.y + paragraph.height > HelperMethods.convertPointToPixel(pageHt))\n || this.contextType.indexOf('Header') >= 0 && paragraph.y + paragraph.height > headerFooterHt;\n };\n //Selection add, Highlight, remove API starts\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightSelection = function (isSelectionChanged, isBookmark) {\n if (this.owner.enableImageResizerMode) {\n this.owner.imageResizerModule.hideImageResizer();\n }\n if (this.isEmpty) {\n if (!this.isInShape && this.isHideSelection(this.start.paragraph)) {\n this.hideCaret();\n return;\n }\n if (this.isInShape) {\n this.showResizerForShape();\n }\n this.updateCaretPosition();\n }\n else {\n if (this.isForward) {\n this.highlightSelectedContent(this.start, this.end);\n }\n else {\n this.highlightSelectedContent(this.end, this.start);\n }\n if (this.documentHelper.isComposingIME) {\n this.updateCaretPosition();\n }\n }\n this.documentHelper.updateTouchMarkPosition();\n if (isSelectionChanged) {\n this.documentHelper.scrollToPosition(this.start, this.end, undefined, isBookmark);\n }\n };\n Selection.prototype.createHighlightBorder = function (lineWidget, width, left, top, isElementBoxHighlight, contentControl) {\n if (width < 0) {\n width = 0;\n }\n var paragraph = lineWidget.paragraph;\n var floatingItems = [];\n if (paragraph.floatingElements.length > 0) {\n for (var k = 0; k < paragraph.floatingElements.length; k++) {\n var shapeElement = paragraph.floatingElements[k];\n if (shapeElement.line === lineWidget) {\n var startTextPos = this.start;\n var endTextPos = this.end;\n if (!this.isForward) {\n startTextPos = this.end;\n endTextPos = this.start;\n }\n var offset = shapeElement.line.getOffset(shapeElement, 0);\n if ((startTextPos.currentWidget !== lineWidget && endTextPos.currentWidget !== lineWidget) ||\n (startTextPos.currentWidget === lineWidget && startTextPos.offset <= offset\n && (endTextPos.currentWidget === lineWidget && endTextPos.offset >= offset + 1\n || endTextPos.currentWidget !== lineWidget)) || (startTextPos.currentWidget !== lineWidget\n && endTextPos.currentWidget === lineWidget && endTextPos.offset >= offset)) {\n floatingItems.push(shapeElement);\n }\n }\n }\n }\n var page = this.getPage(lineWidget.paragraph);\n var height = lineWidget.height;\n var widgets = this.selectedWidgets;\n var selectionWidget = undefined;\n var selectionWidgetCollection = undefined;\n if (this.isHighlightContentControlEditRegion && !isNullOrUndefined(contentControl)) {\n this.addContentControlEditRegionHighlight(lineWidget, left, width, contentControl);\n return;\n }\n else if (this.isHightlightEditRegionInternal) {\n this.addEditRegionHighlight(lineWidget, left, width);\n return;\n }\n else if (this.isHighlightFormFields) {\n this.addFormFieldHighlight(lineWidget, left, width);\n return;\n }\n else {\n if (widgets.containsKey(lineWidget)) {\n if (widgets.get(lineWidget) instanceof SelectionWidgetInfo) {\n selectionWidget = widgets.get(lineWidget);\n // if the line element has already added with SelectionWidgetInfo\n // now its need to be added as ElementBox highlighting them remove it from dictionary and add it collection.\n if (isElementBoxHighlight) {\n widgets.remove(lineWidget);\n selectionWidgetCollection = [];\n widgets.add(lineWidget, selectionWidgetCollection);\n }\n }\n else {\n selectionWidgetCollection = widgets.get(lineWidget);\n }\n }\n else {\n if (isElementBoxHighlight) {\n selectionWidgetCollection = [];\n widgets.add(lineWidget, selectionWidgetCollection);\n }\n else {\n var wrapPosition = this.getWrapPosition(lineWidget, paragraph);\n if (wrapPosition.length > 0) {\n var selectionWidgetInfos = this.splitSelectionHighlightPosition(left, width, wrapPosition);\n if (selectionWidgetInfos.length > 0) {\n selectionWidgetInfos[0].floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidgetInfos);\n this.renderHighlight(page, lineWidget, selectionWidgetInfos, top, floatingItems);\n return;\n }\n else {\n selectionWidget = new SelectionWidgetInfo(left, width);\n selectionWidget.floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidget);\n }\n }\n else {\n selectionWidget = new SelectionWidgetInfo(left, width);\n selectionWidget.floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidget);\n }\n }\n }\n if (selectionWidget === undefined) {\n selectionWidget = new SelectionWidgetInfo(left, width);\n selectionWidget.floatingItems = floatingItems;\n widgets.add(lineWidget, selectionWidget);\n }\n }\n this.renderHighlight(page, lineWidget, [selectionWidget], top, floatingItems);\n if (isElementBoxHighlight) {\n selectionWidgetCollection.push(selectionWidget);\n }\n };\n Selection.prototype.renderHighlight = function (page, lineWidget, selectionWidget, top, floatingItems) {\n var documentHelper = this.owner.documentHelper;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n var height = lineWidget.height;\n if (this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + documentHelper.selectionCanvas.height) {\n var zoomFactor = documentHelper.zoomFactor;\n this.clipSelection(page, pageTop);\n for (var i = 0; i < selectionWidget.length; i++) {\n var selectedWidget = selectionWidget[i];\n var left = selectedWidget.left;\n var width = selectedWidget.width;\n if (this.documentHelper.isComposingIME) {\n this.renderDashLine(documentHelper.selectionContext, page, lineWidget, (pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, top, width * zoomFactor, height);\n }\n else {\n this.documentHelper.selectionContext.fillStyle = 'gray';\n documentHelper.selectionContext.globalAlpha = 0.4;\n documentHelper.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (top * zoomFactor)) - this.viewer.containerTop, width * zoomFactor, height * zoomFactor);\n }\n }\n if (floatingItems.length > 0) {\n for (var z = 0; z < floatingItems.length; z++) {\n var left = floatingItems[z].x;\n var shapeTop = floatingItems[z].y;\n var shapeWidth = floatingItems[z].width;\n var shapeHeight = floatingItems[z].height;\n documentHelper.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (shapeTop * zoomFactor)) - this.viewer.containerTop, shapeWidth * zoomFactor, shapeHeight * zoomFactor);\n }\n }\n documentHelper.selectionContext.restore();\n }\n };\n Selection.prototype.getWrapPosition = function (lineWidget, paragraph) {\n var bodyWidget = paragraph.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && bodyWidget.floatingElements.length > 0 && lineWidget.children.length > 0) {\n var startLeft = this.getLeftInternal(lineWidget, lineWidget.children[0], 0);\n var width = 0;\n var wrapPos = [];\n var isStarted = false;\n for (var z = 0; z < lineWidget.children.length; z++) {\n var element = lineWidget.children[z];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (element.padding.left > 0) {\n if (wrapPos.length === 1 && wrapPos[0].end === 0) {\n wrapPos[0].end = wrapPos[0].start - paragraph.x;\n wrapPos[0].start = paragraph.x;\n startLeft = paragraph.x;\n }\n var clipInfo = {};\n clipInfo.start = startLeft + width;\n clipInfo.end = 0;\n if (isStarted) {\n clipInfo.end = startLeft + width + element.padding.left;\n }\n wrapPos.push(clipInfo);\n }\n width += element.padding.left + element.width;\n if (element instanceof TextElementBox) {\n isStarted = true;\n }\n }\n if (wrapPos.length === 1 && wrapPos[0].end === 0) {\n wrapPos[0].end = wrapPos[0].start - paragraph.x;\n wrapPos[0].start = paragraph.x;\n }\n return wrapPos;\n }\n return [];\n };\n Selection.prototype.splitSelectionHighlightPosition = function (left, width, clipInfo) {\n var selectedWidget = [];\n for (var m = 0; m < clipInfo.length; m++) {\n var info = clipInfo[m];\n if ((left < info.start && left + width < info.end) || left > (info.end)) {\n continue;\n }\n if (left < info.start && left + width > info.end) {\n selectedWidget.push(new SelectionWidgetInfo(left, info.start - left));\n width = (left + width) - info.end;\n left = info.end;\n }\n else if (left === info.start) {\n left += info.end;\n width = width - info.end;\n }\n if (m === clipInfo.length - 1) {\n selectedWidget.push(new SelectionWidgetInfo(left, width));\n }\n }\n return selectedWidget;\n };\n Selection.prototype.addEditRegionHighlight = function (lineWidget, left, width) {\n var highlighters = undefined;\n var collection = this.editRegionHighlighters;\n if (collection.containsKey(lineWidget)) {\n highlighters = collection.get(lineWidget);\n }\n else {\n highlighters = [];\n collection.add(lineWidget, highlighters);\n }\n var editRegionHighlight = new SelectionWidgetInfo(left, width);\n if (this.isCurrentUser) {\n editRegionHighlight.color = this.owner.userColor !== '' ? this.owner.userColor : '#FFFF00';\n }\n highlighters.push(editRegionHighlight);\n return editRegionHighlight;\n };\n Selection.prototype.addContentControlEditRegionHighlight = function (lineWidget, left, width, contentControl) {\n var collection = this.contentControleditRegionHighlighters;\n var highlighters = [];\n if (!collection.containsKey(contentControl)) {\n collection.add(contentControl, new Dictionary());\n }\n var contentInfo = collection.get(contentControl);\n contentInfo.add(lineWidget, highlighters);\n var editRegionHighlight = new SelectionWidgetInfo(left, width);\n highlighters.push(editRegionHighlight);\n };\n Selection.prototype.addFormFieldHighlight = function (lineWidget, left, width) {\n var highlighters = undefined;\n var collection = this.formFieldHighlighters;\n if (collection.containsKey(lineWidget)) {\n highlighters = collection.get(lineWidget);\n }\n else {\n highlighters = [];\n collection.add(lineWidget, highlighters);\n }\n var formFieldHighlight = new SelectionWidgetInfo(left, width);\n highlighters.push(formFieldHighlight);\n };\n Selection.prototype.createHighlightBorderInsideTable = function (cellWidget) {\n var page = this.getPage(cellWidget);\n var selectionWidget = undefined;\n var left = cellWidget.x - cellWidget.margin.left + cellWidget.leftBorderWidth;\n var width = cellWidget.width + cellWidget.margin.left\n + cellWidget.margin.right - cellWidget.leftBorderWidth - cellWidget.rightBorderWidth;\n var top = cellWidget.y;\n var height = cellWidget.height;\n var pageTop = this.getPageTop(page);\n var pageLeft = page.boundingRectangle.x;\n var isVisiblePage = this.documentHelper.isPageInVisibleBound(page, pageTop);\n var widgets = this.selectedWidgets;\n if (!this.isHightlightEditRegionInternal && !this.isHighlightFormFields) {\n if (widgets.containsKey(cellWidget) && widgets.get(cellWidget) instanceof SelectionWidgetInfo) {\n selectionWidget = widgets.get(cellWidget);\n if (isVisiblePage) {\n this.documentHelper.selectionContext.clearRect((pageLeft + (selectionWidget.left * this.documentHelper.zoomFactor) - this.viewer.containerLeft), (pageTop + (top * this.documentHelper.zoomFactor)) - this.viewer.containerTop, selectionWidget.width * this.documentHelper.zoomFactor, height * this.documentHelper.zoomFactor);\n }\n }\n else {\n selectionWidget = new SelectionWidgetInfo(left, width);\n if (widgets.containsKey(cellWidget)) {\n widgets.remove(widgets.get(cellWidget));\n }\n widgets.add(cellWidget, selectionWidget);\n }\n }\n if (isVisiblePage) {\n this.documentHelper.selectionContext.fillStyle = 'gray';\n this.documentHelper.selectionContext.globalAlpha = 0.4;\n var zoomFactor = this.documentHelper.zoomFactor;\n this.clipSelection(page, pageTop);\n this.documentHelper.selectionContext.fillRect((pageLeft + (left * zoomFactor)) - this.viewer.containerLeft, (pageTop + (top * zoomFactor)) - this.viewer.containerTop, width * zoomFactor, height * zoomFactor);\n this.documentHelper.selectionContext.restore();\n }\n };\n Selection.prototype.clipSelection = function (page, pageTop) {\n var documentHelper = this.owner.documentHelper;\n var width;\n var height;\n if (this.viewer instanceof WebLayoutViewer && this.documentHelper.zoomFactor < 1) {\n width = page.boundingRectangle.width / this.documentHelper.zoomFactor;\n height = page.boundingRectangle.height / this.documentHelper.zoomFactor;\n }\n else {\n width = page.boundingRectangle.width * this.documentHelper.zoomFactor;\n height = page.boundingRectangle.height * this.documentHelper.zoomFactor;\n }\n var left = page.boundingRectangle.x;\n documentHelper.selectionContext.beginPath();\n documentHelper.selectionContext.save();\n documentHelper.selectionContext.rect(left - this.viewer.containerLeft, pageTop - this.viewer.containerTop, width, height);\n documentHelper.selectionContext.clip();\n };\n /**\n * Add selection highlight\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.addSelectionHighlight = function (canvasContext, widget, top, page) {\n if (this.selectedWidgets.containsKey(widget)) {\n var height = this.documentHelper.render.getScaledValue(widget.height);\n var widgetInfo = this.selectedWidgets.get(widget);\n var widgetInfoCollection = undefined;\n if (widgetInfo instanceof SelectionWidgetInfo) {\n widgetInfoCollection = [];\n widgetInfoCollection.push(widgetInfo);\n }\n else {\n widgetInfoCollection = widgetInfo;\n }\n if (!isNullOrUndefined(widgetInfoCollection)) {\n for (var i = 0; i < widgetInfoCollection.length; i++) {\n var selectedWidgetInfo = widgetInfoCollection[i];\n var width = this.documentHelper.render.getScaledValue(widgetInfoCollection[i].width);\n var left = this.documentHelper.render.getScaledValue(widgetInfoCollection[i].left, 1);\n if (isNullOrUndefined(page)) {\n page = this.owner.selectionModule.getPage(widget.paragraph);\n }\n this.owner.selectionModule.clipSelection(page, this.owner.selectionModule.getPageTop(page));\n if (this.documentHelper.isComposingIME) {\n this.renderDashLine(canvasContext, page, widget, left, top, width, height);\n }\n else {\n canvasContext.globalAlpha = 0.4;\n canvasContext.fillStyle = 'gray';\n canvasContext.fillRect(left, this.documentHelper.render.getScaledValue(top, 2), width, height);\n if (selectedWidgetInfo.floatingItems && selectedWidgetInfo.floatingItems.length > 0) {\n for (var j = 0; j < selectedWidgetInfo.floatingItems.length; j++) {\n var shape = selectedWidgetInfo.floatingItems[j];\n width = this.documentHelper.render.getScaledValue(shape.width);\n left = this.documentHelper.render.getScaledValue(shape.x, 1);\n var shapeTop = this.documentHelper.render.getScaledValue(shape.y, 2);\n canvasContext.fillRect(left, shapeTop, width, this.documentHelper.render.getScaledValue(shape.height));\n }\n }\n }\n canvasContext.restore();\n }\n }\n }\n };\n Selection.prototype.renderDashLine = function (ctx, page, widget, left, top, width, height) {\n var fontColor = this.characterFormat.fontColor;\n var fillColor = fontColor ? HelperMethods.getColor(fontColor) : '#000000';\n ctx.globalAlpha = 1;\n // Get character format copied from selection format\n var format = this.owner.editorModule.copyInsertFormat(new WCharacterFormat(), false);\n var heightInfo = this.documentHelper.textHelper.getHeight(format);\n var pageTop = this.getPageTop(page);\n var descent = heightInfo.Height - heightInfo.BaselineOffset;\n top = this.documentHelper.render.getUnderlineYPosition(widget) + top + 4 - descent;\n this.documentHelper.render.renderDashLine(ctx, left, (pageTop - this.viewer.containerTop) + (top * this.documentHelper.zoomFactor), width, fillColor, true);\n };\n /**\n * Add Selection highlight inside table\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.addSelectionHighlightTable = function (canvasContext, tableCellWidget, page) {\n if (this.selectedWidgets.containsKey(tableCellWidget)) {\n var selectedWidgetInfo = this.selectedWidgets.get(tableCellWidget);\n var selectedWidgetInfoCollection = undefined;\n if (selectedWidgetInfo instanceof SelectionWidgetInfo) {\n selectedWidgetInfoCollection = [];\n selectedWidgetInfoCollection.push(selectedWidgetInfo);\n }\n else {\n selectedWidgetInfoCollection = selectedWidgetInfo;\n }\n if (!isNullOrUndefined(selectedWidgetInfoCollection)) {\n for (var i = 0; i < selectedWidgetInfoCollection.length; i++) {\n var left = this.documentHelper.render.getScaledValue(selectedWidgetInfoCollection[i].left, 1);\n var top_1 = this.documentHelper.render.getScaledValue(tableCellWidget.y, 2);\n var width = this.documentHelper.render.getScaledValue(selectedWidgetInfoCollection[i].width);\n var height = this.documentHelper.render.getScaledValue(tableCellWidget.height);\n canvasContext.fillStyle = 'gray';\n if (isNullOrUndefined(page)) {\n page = this.owner.selectionModule.getPage(tableCellWidget);\n }\n this.owner.selectionModule.clipSelection(page, this.owner.selectionModule.getPageTop(page));\n canvasContext.fillRect(left, top_1, width, height);\n canvasContext.restore();\n }\n }\n }\n };\n Selection.prototype.removeSelectionHighlight = function (widget) {\n var left = 0;\n var top = 0;\n var width = 0;\n var height = 0;\n var page = undefined;\n if (widget instanceof LineWidget) {\n var lineWidget = widget;\n var currentParaWidget = lineWidget.paragraph;\n page = !isNullOrUndefined(currentParaWidget) ?\n this.getPage((lineWidget.paragraph)) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = this.getTop(lineWidget);\n height = lineWidget.height;\n }\n else if (widget instanceof TableCellWidget) {\n page = !isNullOrUndefined(widget) ?\n this.getPage(widget) : undefined;\n if (isNullOrUndefined(page)) {\n return;\n }\n top = widget.y;\n height = widget.height;\n }\n if (isNullOrUndefined(page)) {\n return;\n }\n var selectedWidget = this.selectedWidgets.get(widget);\n var selectedWidgetCollection = undefined;\n if (selectedWidget instanceof SelectionWidgetInfo) {\n selectedWidgetCollection = [];\n selectedWidgetCollection.push(selectedWidget);\n }\n else {\n selectedWidgetCollection = selectedWidget;\n }\n if (!isNullOrUndefined(selectedWidgetCollection)) {\n for (var i = 0; i < selectedWidgetCollection.length; i++) {\n width = selectedWidgetCollection[i].width;\n left = selectedWidgetCollection[i].left;\n var pageRect = page.boundingRectangle;\n var pageIndex = this.documentHelper.pages.indexOf(page);\n var pageGap = this.viewer.pageGap;\n var pageTop = (pageRect.y - pageGap * (pageIndex + 1)) * this.documentHelper.zoomFactor + pageGap * (pageIndex + 1);\n var pageLeft = pageRect.x;\n var zoomFactor = this.documentHelper.zoomFactor;\n if (this.viewer.containerTop <= pageTop\n || pageTop < this.viewer.containerTop + this.documentHelper.selectionCanvas.height) {\n this.documentHelper.selectionContext.clearRect((pageLeft + (left * zoomFactor) - this.viewer.containerLeft) - 0.5, (pageTop + (top * zoomFactor)) - this.viewer.containerTop - 0.5, width * zoomFactor + 0.5, height * zoomFactor + 0.5);\n }\n }\n }\n };\n /**\n * Selects the current word.\n *\n * @param excludeSpace True if exclude white space; Otherwise, false.\n * @returns {void}\n */\n Selection.prototype.selectCurrentWord = function (excludeSpace) {\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n this.selectCurrentWordRange(startPosition, endPosition, excludeSpace ? excludeSpace : false);\n this.selectRange(startPosition, endPosition);\n };\n /**\n * Selects the current paragraph.\n *\n * @returns {void}\n */\n Selection.prototype.selectParagraph = function () {\n if (!isNullOrUndefined(this.start)) {\n this.start.paragraphStartInternal(this, false);\n this.end.moveToParagraphEndInternal(this, false);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Selects the current line.\n *\n * @returns {void}\n */\n Selection.prototype.selectLine = function () {\n if (!isNullOrUndefined(this.start)) {\n this.moveToLineStart();\n this.handleShiftEndKey();\n }\n };\n /**\n * Moves the selection to the start of the document.\n *\n * @returns {void}\n */\n Selection.prototype.moveToDocumentStart = function () {\n this.handleControlHomeKey();\n };\n /**\n * Moves the selection to the end of the document.\n *\n * @returns {void}\n */\n Selection.prototype.moveToDocumentEnd = function () {\n this.handleControlEndKey();\n };\n /**\n * Moves the selection to the current paragraph start.\n *\n * @returns {void}\n */\n Selection.prototype.moveToParagraphStart = function () {\n if (this.isForward) {\n this.start.paragraphStartInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.end.location.x;\n }\n else {\n this.end.paragraphStartInternal(this, false);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.start.location.x;\n }\n this.fireSelectionChanged(true);\n };\n /**\n * Moves the selection to the current paragraph end.\n *\n * @returns {void}\n */\n Selection.prototype.moveToParagraphEnd = function () {\n if (this.isForward) {\n this.start.moveToParagraphEndInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.end.location.x;\n }\n else {\n this.end.moveToParagraphEndInternal(this, false);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.start.location.x;\n }\n this.fireSelectionChanged(true);\n };\n /**\n * Moves the selection to the next line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToNextLine = function () {\n this.moveDown();\n };\n /**\n * Moves the selection to the previous line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToPreviousLine = function () {\n this.moveUp();\n };\n /**\n * Moves the selection to the next character.\n *\n * @returns {void}\n */\n Selection.prototype.moveToNextCharacter = function () {\n this.handleRightKey();\n };\n /**\n * Moves the selection to the previous character.\n *\n * @returns {void}\n */\n Selection.prototype.moveToPreviousCharacter = function () {\n this.handleLeftKey();\n };\n Selection.prototype.selectCurrentWordRange = function (startPosition, endPosition, excludeSpace) {\n if (!isNullOrUndefined(startPosition)) {\n if (startPosition.offset > 0) {\n var wordStart = startPosition.clone();\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline) && inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (startPosition.offset > 2 && (!isNullOrUndefined(inline.fieldSeparator) || isNullOrUndefined(inline.fieldBegin))) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 2);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset - 1)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n else if (startPosition.offset > 3 && isNullOrUndefined(inline.fieldSeparator)) {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 3);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n else {\n wordStart.setPositionParagraph(wordStart.currentWidget, startPosition.offset - 1);\n wordStart.moveToWordEndInternal(0, false);\n if (!(wordStart.paragraph === startPosition.paragraph && wordStart.offset === startPosition.offset)) {\n startPosition.moveToWordStartInternal(2);\n }\n }\n }\n endPosition.moveToWordEndInternal(2, excludeSpace);\n }\n };\n /**\n * Extends the selection to the paragraph start.\n *\n * @returns {void}\n */\n Selection.prototype.extendToParagraphStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.paragraphStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends the selection to the paragraph end.\n *\n * @returns {void}\n */\n Selection.prototype.extendToParagraphEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToParagraphEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Move to next text position\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveNextPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.moveNextPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateForwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n if (this.documentHelper.isFormFillProtectedMode) {\n var formField = this.getCurrentFormField();\n if (!formField) {\n formField = this.getFormFieldInFormFillMode();\n this.selectPrevNextFormField(true, formField);\n }\n }\n };\n /**\n * Move to next paragraph\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveToNextParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextParagraphStartInternal();\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Navigates to the next footnote from the current selection.\n *\n * @returns {void}\n */\n Selection.prototype.nextFootnote = function () {\n if (this.isinFootnote) {\n var footNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var colLength = this.documentHelper.footnoteCollection.length;\n var indexCount = this.documentHelper.footnoteCollection.indexOf(footNoteElement);\n var nextFootnoteElement = this.documentHelper.footnoteCollection[indexCount + 1];\n if (isNullOrUndefined(nextFootnoteElement)) {\n nextFootnoteElement = footNoteElement;\n }\n var start = this.start.clone();\n var end = this.end.clone();\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var referenceElement = this.documentHelper.pages[i].footnoteWidget;\n for (var j = 1; j < referenceElement.bodyWidgets.length; j++) {\n var element = (referenceElement.bodyWidgets[j]).footNoteReference;\n if (element === nextFootnoteElement) {\n start.setPositionParagraph(referenceElement.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n end.setPositionInternal(start);\n this.selectRange(start, end);\n }\n }\n }\n }\n };\n /**\n * Navigates to the previous footnote from the current selection.\n *\n * @returns {void}\n */\n Selection.prototype.previousFootnote = function () {\n if (this.isinFootnote) {\n var footNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var colLength = this.documentHelper.footnoteCollection.length;\n var indexCount = this.documentHelper.footnoteCollection.indexOf(footNoteElement);\n var previousFootnote = this.documentHelper.footnoteCollection[indexCount - 1];\n if (isNullOrUndefined(previousFootnote)) {\n previousFootnote = footNoteElement;\n }\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var footnote = this.documentHelper.pages[i].footnoteWidget;\n for (var j = 1; j < footnote.bodyWidgets.length; j++) {\n var element = (footnote.bodyWidgets[j]).footNoteReference;\n if (element === previousFootnote) {\n startPosition.setPositionParagraph(footnote.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionInternal(startPosition);\n this.selectRange(startPosition, endPosition);\n }\n }\n }\n }\n };\n /**\n * Navigates to the next endnote from the current selection\n *\n * @returns {void}\n */\n Selection.prototype.nextEndnote = function () {\n if (this.isinEndnote) {\n var endNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var indexCount = this.documentHelper.endnoteCollection.indexOf(endNoteElement);\n var nextEndnote = this.documentHelper.endnoteCollection[indexCount + 1];\n if (isNullOrUndefined(nextEndnote)) {\n nextEndnote = endNoteElement;\n }\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n var endnoteElement = this.documentHelper.pages[this.endPage - 1].endnoteWidget;\n for (var j = 0; j < endnoteElement.childWidgets.length; j++) {\n var element = (endnoteElement.bodyWidgets[j]).footNoteReference;\n if (element === nextEndnote) {\n startPosition.setPositionParagraph(endnoteElement.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionInternal(startPosition);\n this.selectRange(startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Navigates to the previous endnote from the current selection.\n *\n * @returns {void}\n */\n Selection.prototype.previousEndnote = function () {\n if (this.isinEndnote) {\n var endNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n var indexCount = this.documentHelper.endnoteCollection.indexOf(endNoteElement);\n var inline = this.documentHelper.endnoteCollection[indexCount - 1];\n if (isNullOrUndefined(inline)) {\n inline = endNoteElement;\n }\n var startPosition = this.start.clone();\n var endPosition = this.end.clone();\n var referenceElement = this.documentHelper.pages[this.endPage - 1].endnoteWidget;\n for (var j = 0; j < referenceElement.childWidgets.length; j++) {\n var element = (referenceElement.bodyWidgets[j]).footNoteReference;\n if (element === inline) {\n startPosition.setPositionParagraph(referenceElement.bodyWidgets[j].childWidgets[0].childWidgets[0], 0);\n endPosition.setPositionInternal(startPosition);\n this.selectRange(startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Move to previous text position\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.movePreviousPosition = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (this.isEmpty) {\n this.start.movePreviousPosition();\n this.end.setPositionInternal(this.start);\n }\n this.updateBackwardSelection();\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n if (this.documentHelper.isFormFillProtectedMode) {\n var formField = this.getCurrentFormField();\n if (!formField) {\n formField = this.getFormFieldInFormFillMode();\n this.selectPrevNextFormField(false, formField);\n }\n }\n };\n /**\n * Move to previous paragraph\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveToPreviousParagraph = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousParagraph(this);\n this.start.setPositionInternal(this.end);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends the selection to previous line.\n *\n * @returns {void}\n */\n Selection.prototype.extendToPreviousLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToPreviousLine(this, this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n /**\n * Extends the selection to line end\n *\n * @returns {void}\n */\n Selection.prototype.extendToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineEndInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends the selection to line start.\n *\n * @returns {void}\n */\n Selection.prototype.extendToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToLineStartInternal(this, true);\n this.upDownSelectionLength = this.end.location.x;\n // To select Paragraph mark similar to MS WORD\n if (this.start.paragraph === this.end.paragraph && this.start.offset === this.start.currentWidget.getEndOffset()\n && this.isParagraphLastLine(this.start.currentWidget) && this.isParagraphFirstLine(this.end.currentWidget)) {\n this.start.setPositionParagraph(this.start.currentWidget, this.start.offset + 1);\n }\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.moveUp = function () {\n if (this.documentHelper.isFormFillProtectedMode) {\n this.selectPrevNextFormField(false);\n return;\n }\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.upDownSelectionLength = this.start.location.x;\n var beforeUp = this.start.currentWidget.paragraph.bodyWidget.columnIndex;\n var isMultiColumn = this.start.currentWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns > 1 ? true : false;\n var beforeIndex = this.start.currentWidget.paragraph.bodyWidget.index;\n this.start.moveUp(this, this.upDownSelectionLength);\n isMultiColumn = this.start.currentWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns > 1 ? true : false;\n var afterUp = this.start.currentWidget.paragraph.bodyWidget.columnIndex;\n if (isMultiColumn) {\n if (beforeUp === afterUp || beforeIndex !== this.start.currentWidget.paragraph.bodyWidget.index && this.start.currentWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns === 1) {\n this.end.setPositionInternal(this.start);\n }\n else {\n do {\n if (isNullOrUndefined(this.start.currentWidget.paragraph.previousRenderedWidget) || (beforeIndex !== this.start.currentWidget.paragraph.bodyWidget.index && this.start.currentWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns === 1)) {\n break;\n }\n if (beforeIndex !== this.start.currentWidget.paragraph.bodyWidget.index && this.start.currentWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns > 1 && beforeUp > this.start.currentWidget.paragraph.bodyWidget.columnIndex) {\n break;\n }\n this.start.moveUp(this, this.upDownSelectionLength);\n } while (beforeUp !== this.start.currentWidget.paragraph.bodyWidget.columnIndex);\n }\n }\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.moveDown = function () {\n if (this.documentHelper.isFormFillProtectedMode) {\n this.selectPrevNextFormField(true);\n return;\n }\n if (isNullOrUndefined(this.start)) {\n return;\n }\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n this.upDownSelectionLength = this.start.location.x;\n }\n this.upDownSelectionLength = this.start.location.x;\n var beforeDown = this.start.currentWidget.paragraph.bodyWidget.columnIndex;\n var beforeIndex = this.start.currentWidget.paragraph.bodyWidget.index;\n var isMultiColumn = this.start.currentWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns > 1 ? true : false;\n this.start.moveDown(this, this.upDownSelectionLength);\n var afterDown = this.start.currentWidget.paragraph.bodyWidget.columnIndex;\n if (isMultiColumn) {\n if (beforeDown === afterDown || beforeIndex !== this.start.currentWidget.paragraph.bodyWidget.index && this.start.currentWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns === 1) {\n this.end.setPositionInternal(this.start);\n }\n else {\n do {\n if (isNullOrUndefined(this.start.currentWidget.paragraph.nextRenderedWidget) || (beforeIndex !== this.start.currentWidget.paragraph.bodyWidget.index && this.start.currentWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns === 1)) {\n break;\n }\n if (beforeIndex !== this.start.currentWidget.paragraph.bodyWidget.index && this.start.currentWidget.paragraph.bodyWidget.sectionFormat.numberOfColumns > 1 && this.documentHelper.layout.getBodyWidget(this.start.currentWidget.paragraph.bodyWidget, false) === this.start.currentWidget.paragraph.bodyWidget) {\n break;\n }\n this.start.moveDown(this, this.upDownSelectionLength);\n } while (beforeDown !== this.start.currentWidget.paragraph.bodyWidget.columnIndex);\n }\n }\n this.end.setPositionInternal(this.start);\n this.fireSelectionChanged(true);\n };\n Selection.prototype.updateForwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.setPositionInternal(this.end);\n }\n else {\n this.end.setPositionInternal(this.start);\n }\n }\n };\n Selection.prototype.updateBackwardSelection = function () {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.end.setPositionInternal(this.start);\n }\n else {\n this.start.setPositionInternal(this.end);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.getFirstBlockInFirstCell = function (table) {\n if (table.childWidgets.length > 0) {\n var firstrow = table.childWidgets[0];\n if (firstrow.childWidgets.length > 0) {\n var firstcell = firstrow.childWidgets[0];\n if (firstcell.childWidgets.length === 0) {\n return undefined;\n }\n return firstcell.childWidgets[0];\n }\n }\n return undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.getFirstCellInRegion = function (row, startCell, selectionLength, isMovePrevious) {\n var cellStart = this.getCellLeft(row, startCell);\n var cellEnd = cellStart + startCell.cellFormat.cellWidth;\n var flag = true;\n if (cellStart <= selectionLength && selectionLength < cellEnd) {\n for (var k = 0; k < row.childWidgets.length; k++) {\n var left = this.getCellLeft(row, row.childWidgets[k]);\n if (HelperMethods.round(cellStart, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(cellEnd, 2)) {\n flag = false;\n return row.childWidgets[k];\n }\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cellLeft = this.getCellLeft(row, row.childWidgets[j]);\n if (cellLeft <= selectionLength && cellLeft +\n row.childWidgets[j].cellFormat.cellWidth > selectionLength) {\n flag = false;\n return row.childWidgets[j];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrevious) {\n var previousWidget = row.previousRenderedWidget;\n return this.getFirstCellInRegion(previousWidget, startCell, selectionLength, isMovePrevious);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrevious) {\n return this.getFirstCellInRegion(row.nextRenderedWidget, startCell, selectionLength, isMovePrevious);\n }\n }\n return row.childWidgets[0];\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.getFirstParagraph = function (tableCell) {\n while (tableCell.previousSplitWidget) {\n tableCell = tableCell.previousSplitWidget;\n }\n var firstBlock = tableCell.firstChild;\n return this.documentHelper.getFirstParagraphBlock(firstBlock);\n };\n /**\n * Get last block in last cell\n *\n * @private\n * @returns {void}\n */\n //Table\n Selection.prototype.getLastBlockInLastCell = function (table) {\n if (table.childWidgets.length > 0) {\n var lastRow = table.childWidgets[table.childWidgets.length - 1];\n var lastCell = lastRow.childWidgets[lastRow.childWidgets.length - 1];\n while (lastCell.childWidgets.length === 0 && !isNullOrUndefined(lastCell.previousSplitWidget)) {\n lastCell = lastCell.previousSplitWidget;\n }\n return lastCell.childWidgets[lastCell.childWidgets.length - 1];\n }\n return undefined;\n };\n /**\n * Moves the selection to start of the current line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToLineStart = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateBackwardSelection();\n this.start.moveToLineStartInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Moves the selection to end of the current line.\n *\n * @returns {void}\n */\n Selection.prototype.moveToLineEnd = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.updateForwardSelection();\n this.start.moveToLineEndInternal(this, false);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Get Page top\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.getPageTop = function (page) {\n return (page.boundingRectangle.y - this.viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1)) * this.documentHelper.zoomFactor + this.viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1);\n };\n /**\n * Move text position to cursor point\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.moveTextPosition = function (cursorPoint, textPosition, isMouseLeave) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n //Updates the text position based on the cursor position.\n var widget = this.documentHelper.getLineWidgetInternal(cursorPoint, true);\n if (!isNullOrUndefined(widget)) {\n this.updateTextPositionWidget(widget, cursorPoint, textPosition, true);\n }\n this.upDownSelectionLength = textPosition.location.x;\n var selectionStartIndex = this.start.getHierarchicalIndexInternal();\n var selectionEndIndex = this.end.getHierarchicalIndexInternal();\n if (selectionStartIndex !== selectionEndIndex && !isMouseLeave) {\n // Extends selection end to field begin or field end.\n if (TextPosition.isForwardSelection(selectionStartIndex, selectionEndIndex)) {\n textPosition.validateForwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n else {\n textPosition.validateBackwardFieldSelection(selectionStartIndex, selectionEndIndex);\n }\n }\n this.fireSelectionChanged(true);\n };\n //Helper Method Implementation\n //Document\n /**\n * Get document start position\n *\n * @private\n * @returns {TextPosition}\n */\n Selection.prototype.getDocumentStart = function () {\n var textPosition = undefined;\n var block = this.documentHelper.pages[0].bodyWidgets[0].childWidgets[0];\n return this.setPositionForBlock(block, true);\n };\n /**\n * Get document end position\n *\n * @private\n * @returns {TextPosition}\n */\n Selection.prototype.getDocumentEnd = function () {\n var textPosition = undefined;\n var documentStart = this.owner.documentStart;\n var lastPage = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n if (!isNullOrUndefined(documentStart) && lastPage.bodyWidgets[lastPage.bodyWidgets.length - 1].childWidgets.length > 0) {\n var block = undefined;\n var section = lastPage.bodyWidgets[lastPage.bodyWidgets.length - 1];\n var blocks = section.childWidgets;\n var lastBlkItem = blocks.length - 1;\n var lastBlock = blocks[lastBlkItem];\n if (lastBlock instanceof BlockWidget) {\n block = lastBlock;\n }\n textPosition = this.setPositionForBlock(block, false);\n }\n return textPosition;\n };\n //Keyboard shortcut internal API\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.owner.selectionModule.selectContent(documentEnd, true);\n }\n if (this.owner.enableAutoFocus) {\n this.checkForCursorVisibility();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.owner.selectionModule.selectContent(documentStart, true);\n }\n if (this.owner.enableAutoFocus) {\n this.checkForCursorVisibility();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlLeftKey = function () {\n this.extendToWordStartInternal(true);\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlRightKey = function () {\n this.extendToWordEndInternal(true);\n this.checkForCursorVisibility();\n };\n /**\n * Handles control down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlDownKey = function () {\n this.moveToNextParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlUpKey = function () {\n this.moveToPreviousParagraph();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftLeftKey = function () {\n this.extendBackward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftUpKey = function () {\n this.extendToPreviousLine();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift right key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftRightKey = function () {\n this.extendForward();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftDownKey = function () {\n this.extendToNextLine();\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftLeftKey = function () {\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.extendToWordEndInternal(false);\n }\n else {\n this.extendToWordStartInternal(false);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftUpKey = function () {\n this.extendToParagraphStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift right key\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftRightKey = function () {\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.extendToWordStartInternal(false);\n }\n else {\n this.extendToWordEndInternal(false);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftDownKey = function () {\n this.extendToParagraphEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles left key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleLeftKey = function () {\n if (this.end.isCurrentParaBidi) {\n this.moveNextPosition();\n }\n else {\n this.movePreviousPosition();\n }\n if (this.owner.enableAutoFocus) {\n this.checkForCursorVisibility();\n }\n };\n /**\n * Handles up key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleUpKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveUp();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles right key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleRightKey = function () {\n if (this.end.isCurrentParaBidi) {\n this.movePreviousPosition();\n }\n else {\n this.moveNextPosition();\n }\n if (this.owner.enableAutoFocus) {\n this.checkForCursorVisibility();\n }\n };\n /**\n * Handles end key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleEndKey = function () {\n this.moveToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles home key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleHomeKey = function () {\n this.moveToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles down key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleDownKey = function () {\n this.isMoveDownOrMoveUp = true;\n this.moveDown();\n this.isMoveDownOrMoveUp = false;\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift end key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftEndKey = function () {\n this.extendToLineEnd();\n this.checkForCursorVisibility();\n };\n /**\n * Handles shift home key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleShiftHomeKey = function () {\n this.extendToLineStart();\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift end key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftEndKey = function () {\n var documentEnd = undefined;\n if (!isNullOrUndefined(this.owner.documentEnd)) {\n documentEnd = this.owner.documentEnd;\n }\n if (!isNullOrUndefined(documentEnd)) {\n this.end.setPosition(documentEnd.currentWidget, false);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * Handles control shift home key.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.handleControlShiftHomeKey = function () {\n var documentStart = undefined;\n if (!isNullOrUndefined(this.owner.documentStart)) {\n documentStart = this.owner.documentStart;\n }\n if (!isNullOrUndefined(documentStart)) {\n this.end.setPositionInternal(documentStart);\n this.fireSelectionChanged(true);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handleSpaceBarKey = function () {\n if (this.owner.documentHelper.isDocumentProtected && this.owner.documentHelper.protectionType === 'FormFieldsOnly'\n && this.getFormFieldType() === 'CheckBox') {\n this.owner.editorModule.toggleCheckBoxFormField(this.getCurrentFormField());\n }\n };\n /**\n * Handles tab key.\n *\n * @param isNavigateInCell\n * @param isShiftTab\n * @private\n * @returns {void}\n */\n Selection.prototype.handleTabKey = function (isNavigateInCell, isShiftTab) {\n var start = this.start;\n if (!this.isForward) {\n start = this.end;\n }\n var isCursorAtParaStart = false;\n var isCursorAtLineStart = false;\n if (isNullOrUndefined(start)) {\n return;\n }\n if (start.offset === 0 && start.paragraph.paragraphFormat.listFormat.listId == -1) {\n if (start.currentWidget.isFirstLine()) {\n isCursorAtParaStart = true;\n }\n isCursorAtLineStart = true;\n }\n if (this.start.paragraph.isInsideTable && this.end.paragraph.isInsideTable && (isNavigateInCell || isShiftTab)) {\n //Perform tab navigation\n if (!this.owner.documentHelper.isDocumentProtected && !(this.documentHelper.protectionType === 'FormFieldsOnly')) {\n if (isShiftTab) {\n this.selectPreviousCell();\n }\n else {\n this.selectNextCell();\n }\n }\n }\n else if ((isNavigateInCell || isShiftTab) && !isNullOrUndefined(start) && start.offset === this.getStartOffset(start.paragraph)\n && !isNullOrUndefined(start.paragraph.paragraphFormat) && !isNullOrUndefined(start.paragraph.paragraphFormat.listFormat)\n && start.paragraph.paragraphFormat.listFormat.listId !== -1 && !this.owner.isReadOnlyMode) {\n var selection = this.documentHelper.selection;\n var currentPara = start.paragraph;\n var isFirstParaForList = false;\n if (!selection.isForward) {\n currentPara = selection.end.paragraph;\n }\n isFirstParaForList = this.owner.editorModule.isFirstParaForList(selection, currentPara);\n if (isFirstParaForList) {\n if (isShiftTab) {\n this.owner.editorModule.updateListLevelIndent(-this.documentHelper.defaultTabWidth, currentPara);\n }\n else {\n this.owner.editorModule.updateListLevelIndent(this.documentHelper.defaultTabWidth, currentPara);\n }\n }\n else {\n this.owner.editorModule.updateListLevel(isShiftTab ? false : true);\n }\n }\n else if (!this.owner.isReadOnlyMode && !this.documentHelper.isFormFillProtectedMode) {\n if (isCursorAtParaStart && start.paragraph.paragraphFormat.firstLineIndent < this.documentHelper.defaultTabWidth) {\n this.documentHelper.owner.editorModule.onApplyParagraphFormat('firstLineIndent', this.documentHelper.defaultTabWidth, true, false);\n }\n else if (isCursorAtLineStart) {\n if (isShiftTab) {\n this.owner.editorModule.decreaseIndent();\n }\n else {\n if (HelperMethods.convertPointToPixel(start.paragraph.paragraphFormat.firstLineIndent + start.paragraph.paragraphFormat.leftIndent) < this.documentHelper.viewer.clientArea.width) {\n this.owner.editorModule.increaseIndent();\n }\n }\n }\n else {\n this.owner.editorModule.handleTextInput('\\t');\n }\n }\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.formFields.length > 0) {\n this.selectPrevNextFormField(!isShiftTab);\n }\n this.checkForCursorVisibility();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.handlePageUpPageDownKey = function (isPageDown, shiftKey) {\n var _this = this;\n var offsetX = this.end.location.x;\n var offsetY = this.end.location.y;\n var page = this.end.paragraph.bodyWidget.page;\n var pageTop = this.getPageTop(page);\n var previousScrollTop = this.documentHelper.viewerContainer.scrollTop;\n offsetY = (offsetY * this.documentHelper.zoomFactor) + (pageTop - previousScrollTop);\n offsetX = (offsetX * this.documentHelper.zoomFactor) + page.boundingRectangle.x;\n if (isPageDown) {\n this.documentHelper.viewerContainer.scrollTop += this.documentHelper.visibleBounds.height;\n }\n else {\n this.documentHelper.viewerContainer.scrollTop -= this.documentHelper.visibleBounds.height;\n }\n var isSameScrollTop = false;\n if (previousScrollTop === this.documentHelper.viewerContainer.scrollTop) {\n isSameScrollTop = true;\n }\n if (shiftKey) {\n this.documentHelper.skipScrollToPosition = true;\n }\n setTimeout(function () {\n if (isSameScrollTop) {\n if (!shiftKey) {\n if (isPageDown)\n _this.moveToDocumentEnd();\n else\n _this.moveToDocumentStart();\n }\n else {\n var position = void 0;\n if (isPageDown) {\n position = _this.getDocumentEnd();\n }\n else {\n position = _this.getDocumentStart();\n }\n _this.end.setPositionForLineWidget(position.currentWidget, position.offset);\n _this.fireSelectionChanged(true);\n }\n }\n else {\n _this.select({ x: offsetX, y: offsetY, extend: shiftKey });\n }\n }, 0);\n };\n // returns current field in FormFill mode\n Selection.prototype.getFormFieldInFormFillMode = function () {\n var currentStart = this.owner.selectionModule.start;\n var formField;\n for (var i = (this.documentHelper.formFields.length - 1); i >= 0; i--) {\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n continue;\n }\n var paraIndex = this.getElementPosition(this.documentHelper.formFields[i]).startPosition;\n if (paraIndex.isExistBefore(currentStart)) {\n formField = this.documentHelper.formFields[i];\n break;\n }\n else if (i === 0) {\n formField = this.documentHelper.formFields[(this.documentHelper.formFields.length - 1)];\n }\n }\n return formField;\n };\n // Navigates & Selects next form field\n Selection.prototype.selectPrevNextFormField = function (forward, formField) {\n if (this.documentHelper.isFormFillProtectedMode) {\n if (!formField) {\n formField = this.getCurrentFormField();\n }\n var index = this.documentHelper.formFields.indexOf(formField);\n if (forward) {\n for (var i = index;; i++) {\n if (i === (this.documentHelper.formFields.length - 1)) {\n i = 0;\n }\n else {\n i = i + 1;\n }\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n i = i - 1;\n continue;\n }\n this.selectFieldInternal(this.documentHelper.formFields[i], true);\n break;\n }\n }\n else {\n for (var i = index;; i--) {\n if (i === 0) {\n i = (this.documentHelper.formFields.length - 1);\n }\n else {\n i = i - 1;\n }\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n i = i + 1;\n continue;\n }\n this.selectFieldInternal(this.documentHelper.formFields[i], true);\n break;\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.navigateToNextFormField = function () {\n var currentStart = this.owner.selectionModule.end;\n var currentFormField;\n for (var i = 0; i < this.documentHelper.formFields.length; i++) {\n currentFormField = this.documentHelper.formFields[i];\n if (!this.documentHelper.formFields[i].formFieldData.enabled) {\n continue;\n }\n var paraIndex = this.getElementPosition(this.documentHelper.formFields[i]).startPosition;\n if (paraIndex.isExistAfter(currentStart)) {\n if (currentFormField.formFieldData instanceof TextFormField && currentFormField.formFieldData.type === 'Text' &&\n this.documentHelper.isInlineFormFillProtectedMode) {\n this.selectTextElementStartOfField(this.documentHelper.formFields[i]);\n }\n else {\n this.selectFieldInternal(this.documentHelper.formFields[i]);\n }\n break;\n }\n else if (i === (this.documentHelper.formFields.length - 1)) {\n currentFormField = this.documentHelper.formFields[0];\n if (currentFormField.formFieldData instanceof TextFormField && currentFormField.formFieldData.type === 'Text' &&\n this.documentHelper.isInlineFormFillProtectedMode) {\n this.selectTextElementStartOfField(this.documentHelper.formFields[0]);\n }\n else {\n this.selectFieldInternal(this.documentHelper.formFields[0]);\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTextElementStartOfField = function (formField) {\n var fieldSeparator = formField.fieldSeparator;\n var element = fieldSeparator.nextElement;\n if (element) {\n while (!(element instanceof TextElementBox)) {\n element = element.nextElement;\n }\n var offset = formField.line.getOffset(element, 0);\n var point = this.getPhysicalPositionInternal(formField.line, offset, false);\n this.selectInternal(formField.line, element, 0, point);\n }\n };\n Selection.prototype.triggerFormFillEvent = function (isKeyBoardNavigation) {\n var previousField = this.previousSelectedFormField;\n var currentField = this.currentFormField;\n var previousFieldData;\n var currentFieldData;\n if (currentField !== previousField && previousField && previousField.formFieldData instanceof TextFormField\n && previousField.formFieldData.type === 'Text') {\n if (previousField.formFieldData.format !== '' && !this.isFormatUpdated) {\n // Need to handle update form field format\n this.owner.editorModule.applyFormTextFormat(previousField);\n if (!isNullOrUndefined(this.previousSelectedFormField)) {\n previousField = this.previousSelectedFormField;\n }\n }\n previousFieldData = { 'fieldName': previousField.formFieldData.name, 'value': this.owner.editorModule.getFieldResultText(previousField) };\n this.owner.trigger(afterFormFieldFillEvent, previousFieldData);\n }\n if (currentField !== previousField && currentField && ((currentField.formFieldData instanceof TextFormField\n && currentField.formFieldData.type === 'Text' && isKeyBoardNavigation == undefined) || (((currentField.formFieldData instanceof TextFormField && this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline') || (currentField.formFieldData instanceof CheckBoxFormField)) && isKeyBoardNavigation))) {\n currentFieldData = { 'fieldName': currentField.formFieldData.name, 'value': this.owner.editorModule.getFieldResultText(currentField) };\n this.owner.trigger(beforeFormFieldFillEvent, currentFieldData);\n }\n };\n Selection.prototype.selectPreviousCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.previousWidget)) {\n if (!isNullOrUndefined(tableRow.previousRenderedWidget)) {\n //Move text selection or cursor to previous row's last cell\n var prevRow = undefined;\n if (tableRow.previousRenderedWidget instanceof TableRowWidget) {\n prevRow = tableRow.previousRenderedWidget;\n }\n this.selectTableCellInternal(prevRow.childWidgets[prevRow.childWidgets.length - 1], true);\n }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var prevCell = undefined;\n if (tableCell.previousWidget instanceof TableCellWidget) {\n prevCell = tableCell.previousWidget;\n }\n this.selectTableCellInternal(prevCell, true);\n }\n };\n Selection.prototype.selectNextCell = function () {\n var tableCell = this.start.paragraph.associatedCell;\n var tableRow = tableCell.ownerRow;\n var tableAdv = tableRow.ownerTable;\n if (isNullOrUndefined(tableCell.nextWidget)) {\n if (isNullOrUndefined(tableRow.nextRenderedWidget) && !this.owner.isReadOnlyMode) {\n //Insert new row below\n this.owner.editorModule.insertRow(false);\n }\n else {\n //Move text selection or cursor to next row's first cell\n var nextRow = undefined;\n if (tableRow.nextRenderedWidget instanceof TableRowWidget) {\n nextRow = tableRow.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextRow.childWidgets[0], true);\n }\n // }\n }\n else {\n //Move text selection or cursor to next cell in current row\n var nextCell = undefined;\n if (tableCell.nextRenderedWidget instanceof TableCellWidget) {\n nextCell = tableCell.nextRenderedWidget;\n }\n this.selectTableCellInternal(nextCell, true);\n }\n };\n /**\n * Select given table cell\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableCellInternal = function (tableCell, clearMultiSelection) {\n var firstParagraph = this.getFirstParagraph(tableCell);\n var lastParagraph = this.getLastParagraph(tableCell);\n if (firstParagraph === lastParagraph && lastParagraph.isEmpty()) {\n this.selectParagraphInternal(lastParagraph, true);\n }\n else {\n var firstLineWidget = lastParagraph.childWidgets[0];\n this.start.setPosition(firstParagraph.childWidgets[0], true);\n this.end.setPositionParagraph(firstLineWidget, firstLineWidget.getEndOffset());\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select while table\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableInternal = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.getTable(start, end))) {\n var containerCell = this.getContainerCellOf(start.paragraph.associatedCell, end.paragraph.associatedCell);\n var table = containerCell.ownerTable;\n var firstPara = this.documentHelper.getFirstParagraphBlock(table);\n var lastPara = this.documentHelper.getLastParagraphBlock(table);\n var offset = lastPara.lastChild.getEndOffset();\n this.start.setPosition(firstPara.childWidgets[0], true);\n this.end.setPositionParagraph(lastPara.lastChild, offset + 1);\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * @private\n */\n Selection.prototype.getTableRevision = function () {\n var start = this.start.clone();\n var end = this.end.clone();\n if (!this.isForward) {\n start = this.end.clone();\n end = this.start.clone();\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.getTable(start, end))) {\n var containerCell = this.getContainerCellOf(start.paragraph.associatedCell, end.paragraph.associatedCell);\n var table = containerCell.ownerTable;\n var firstPara = this.documentHelper.getFirstParagraphBlock(table);\n var lastPara = this.documentHelper.getLastParagraphBlock(table);\n var offset = lastPara.lastChild.getEndOffset();\n start.setPosition(firstPara.childWidgets[0], true);\n end.setPositionParagraph(lastPara.lastChild, offset + 1);\n }\n var startIndex = this.getAbsolutePositionFromRelativePosition(start);\n var endIndex = this.getAbsolutePositionFromRelativePosition(end);\n return Math.abs(endIndex - startIndex);\n // this.selectPosition(this.start, this.end);\n };\n /**\n * Select single column\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectColumnInternal = function () {\n var startTextPos = this.start;\n var endTextPos = this.end;\n if (!this.isForward) {\n startTextPos = this.end;\n endTextPos = this.start;\n }\n if (!isNullOrUndefined(startTextPos) && !isNullOrUndefined(endTextPos) && !isNullOrUndefined(this.getTable(startTextPos, endTextPos))) {\n var containerCell = this.getContainerCellOf(startTextPos.paragraph.associatedCell, endTextPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endTextPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startTextPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endTextPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endTextPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var columnCells = containerCell.ownerTable.getColumnCellsForSelection(containerCell, containerCell);\n if (columnCells.length > 0) {\n var firstPara = this.getFirstParagraph(columnCells[0]);\n var lastPara = this.getLastParagraph(columnCells[columnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n else {\n var startCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(startCell, startCell);\n var endCellColumnCells = containerCell.ownerTable.getColumnCellsForSelection(endCell, endCell);\n if (startCellColumnCells.length > 0 && endCellColumnCells.length > 0) {\n var firstPara = this.getFirstParagraph(startCellColumnCells[0]);\n var lastPara = this.getLastParagraph(endCellColumnCells[endCellColumnCells.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n var lastLine = lastPara.lastChild;\n this.end.setPositionParagraph(lastLine, lastLine.getEndOffset() + 1);\n }\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single row\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableRow = function () {\n var startPos = this.start;\n var endPos = this.end;\n if (!this.isForward) {\n startPos = this.end;\n endPos = this.start;\n }\n if (!isNullOrUndefined(startPos) && !isNullOrUndefined(endPos) && !isNullOrUndefined(this.getTable(startPos, endPos))) {\n var containerCell = void 0;\n containerCell = this.getContainerCellOf(startPos.paragraph.associatedCell, endPos.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(endPos.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(startPos.paragraph.associatedCell, containerCell);\n var endCell = this.getSelectedCell(endPos.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, endPos.paragraph.associatedCell)) {\n var row = startCell.ownerRow;\n var firstPara = this.getFirstParagraph(row.childWidgets[0]);\n var lastPara = this.getLastParagraph(row.childWidgets[row.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n var firstPara = this.getFirstParagraph(startCell.ownerRow.childWidgets[0]);\n var lastPara = void 0;\n lastPara = this.getLastParagraph(endCell.ownerRow.childWidgets[endCell.ownerRow.childWidgets.length - 1]);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Select single cell\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.selectTableCell = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(this.getTable(start, end))) {\n return;\n }\n if (this.isEmpty) {\n if (start.paragraph.isInsideTable && !isNullOrUndefined(start.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(start.paragraph.associatedCell);\n var lastPara = this.getLastParagraph(end.paragraph.associatedCell);\n if (firstPara === lastPara) {\n this.start.setPosition(lastPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n else {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n else {\n var containerCell = this.getContainerCell(start.paragraph.associatedCell);\n if (this.containsCell(containerCell, start.paragraph.associatedCell) && this.containsCell(containerCell, end.paragraph.associatedCell)) {\n var firstPara = this.getFirstParagraph(containerCell);\n var lastPara = this.getLastParagraph(containerCell);\n if (!isNullOrUndefined(firstPara) && !isNullOrUndefined(lastPara)) {\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n }\n this.selectPosition(this.start, this.end);\n };\n /**\n * Selects the entire document.\n *\n * @returns {void}\n */\n Selection.prototype.selectAll = function () {\n var documentStart;\n var documentEnd;\n this.documentHelper.skipScrollToPosition = true;\n var container = this.getContainerWidget(this.start.paragraph);\n if (this.owner.enableHeaderAndFooter) {\n var headerFooter = this.getContainerWidget(this.start.paragraph);\n documentStart = this.setPositionForBlock(headerFooter.firstChild, true);\n documentEnd = this.setPositionForBlock(headerFooter.lastChild, false);\n }\n else if (this.isInShape) {\n var textFrame = this.getCurrentTextFrame();\n documentStart = this.setPositionForBlock(textFrame.firstChild, true);\n documentEnd = this.setPositionForBlock(textFrame.lastChild, false);\n }\n else if (container instanceof FootNoteWidget && container.footNoteType === 'Footnote') {\n var i = void 0;\n var j = void 0;\n var pageLength = this.documentHelper.pages.length;\n for (i = 0; i <= pageLength - 1; i++) {\n if (isNullOrUndefined(this.documentHelper.pages[i].footnoteWidget)) {\n continue;\n }\n else {\n documentStart = this.setPositionForBlock(this.documentHelper.pages[i].footnoteWidget.bodyWidgets[0].firstChild, true);\n break;\n }\n }\n for (j = pageLength - 1; j >= 0; j--) {\n if (isNullOrUndefined(this.documentHelper.pages[j].footnoteWidget)) {\n continue;\n }\n else {\n var child = this.documentHelper.pages[j].footnoteWidget.bodyWidgets.length;\n var lastChild = this.documentHelper.pages[j].footnoteWidget.bodyWidgets[child - 1].childWidgets.length;\n documentEnd = this.setPositionForBlock(this.documentHelper.pages[j].footnoteWidget.bodyWidgets[child - 1].childWidgets[lastChild - 1], false);\n break;\n }\n }\n }\n else if (container instanceof FootNoteWidget && container.footNoteType === 'Endnote') {\n var endNotes = this.getContainerWidget(this.start.paragraph);\n documentStart = this.setPositionForBlock(endNotes.bodyWidgets[0].firstChild, true);\n documentEnd = this.setPositionForBlock(endNotes.bodyWidgets[endNotes.bodyWidgets.length - 1].firstChild, false);\n }\n else {\n documentStart = this.owner.documentStart;\n documentEnd = this.owner.documentEnd;\n }\n //Selects the entire document.\n if (!isNullOrUndefined(documentStart)) {\n this.start.setPositionInternal(documentStart);\n this.end.setPositionParagraph(documentEnd.currentWidget, documentEnd.offset + 1);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Extends the selection backward.\n *\n * @returns {void}\n */\n Selection.prototype.extendBackward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.end.moveForward();\n }\n else {\n this.end.moveBackward();\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends the selection forward.\n *\n * @returns {void}\n */\n Selection.prototype.extendForward = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isForward = this.isForward ? this.start.isCurrentParaBidi : this.end.isCurrentParaBidi;\n if (isForward) {\n this.end.moveBackward();\n }\n else {\n this.end.moveForward();\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extend selection to word start and end\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.extendToWordStartEnd = function () {\n if ((this.start.paragraph.isInsideTable || this.end.paragraph.isInsideTable)\n && (this.start.paragraph.associatedCell !== this.end.paragraph.associatedCell\n || this.isCellSelected(this.start.paragraph.associatedCell, this.start, this.end))) {\n return true;\n }\n return false;\n };\n /**\n * Extends the selection to word start.\n *\n * @returns {void}\n */\n Selection.prototype.extendToWordStart = function () {\n this.extendToWordStartInternal(false);\n };\n /**\n * Extends the selection to word end.\n *\n * @returns {void}\n */\n Selection.prototype.extendToWordEnd = function () {\n this.extendToWordEndInternal(false);\n };\n /**\n * Extends selection to word start\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.extendToWordStartInternal = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelected = this.extendToWordStartEnd();\n if (isCellSelected) {\n this.end.moveToPreviousParagraphInTable(this);\n }\n else {\n if (isNavigation && this.end.isCurrentParaBidi) {\n this.end.moveToWordEndInternal(isNavigation ? 0 : 1, false);\n }\n else {\n this.end.moveToWordStartInternal(isNavigation ? 0 : 1);\n }\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends the selection to word end.\n *\n * @returns {void}\n */\n Selection.prototype.extendToWordEndInternal = function (isNavigation) {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n var isCellSelect = this.extendToWordStartEnd();\n if (isCellSelect) {\n this.end.moveToNextParagraphInTable();\n }\n else {\n if (isNavigation && this.end.isCurrentParaBidi) {\n this.end.moveToWordStartInternal(isNavigation ? 0 : 1);\n }\n else {\n this.end.moveToWordEndInternal(isNavigation ? 0 : 1, false);\n }\n }\n if (isNavigation) {\n this.start.setPositionInternal(this.end);\n }\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Extends the selection to next line.\n *\n * @returns {void}\n */\n Selection.prototype.extendToNextLine = function () {\n if (isNullOrUndefined(this.start)) {\n return;\n }\n this.end.moveToNextLine(this.upDownSelectionLength);\n this.fireSelectionChanged(true);\n };\n //Selection Text get API\n //Selection add, Highlight, remove API enda\n Selection.prototype.getTextPosition = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n textPosition.setPositionForCurrentIndex(hierarchicalIndex);\n return textPosition;\n };\n /**\n * Get Selected text\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.getText = function (includeObject) {\n if (isNullOrUndefined(this.start) || isNullOrUndefined(this.end)\n || isNullOrUndefined(this.start.paragraph) || isNullOrUndefined(this.end.paragraph)) {\n return undefined;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (startPosition.isAtSamePosition(endPosition)) {\n return '';\n }\n return this.getTextInternal(startPosition, endPosition, includeObject);\n };\n /**\n * Get selected text\n *\n * @private\n * @returns {string}\n */\n Selection.prototype.getTextInternal = function (start, end, includeObject) {\n if (start.isExistAfter(end)) {\n var temp = end;\n end = start;\n start = temp;\n }\n var startPosition = start;\n var endPosition = end;\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n var startIndex = 0;\n var endIndex = 0;\n var startOffset = start.offset;\n var endOffset = end.offset;\n var startInlineObj = start.currentWidget.getInline(startOffset, startIndex);\n startIndex = startInlineObj.index;\n var inline = startInlineObj.element;\n // If the start position is at the beginning of field begin that has field end, then field code should be skipped.\n if (inline instanceof FieldElementBox && !isNullOrUndefined(inline.fieldEnd)) {\n var elementInfo = this.getRenderedInline(inline, startIndex);\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n var endInlineObj = end.currentWidget.getInline(endOffset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n var text = '';\n // Retrieves the text from start inline.\n if (inline instanceof ImageElementBox && includeObject && startIndex === 0) {\n text = ElementBox.objectCharacter;\n }\n else if (inline instanceof TextElementBox) {\n text = ((isNullOrUndefined(inline.text)) || (inline.text) === '') || inline.text.length < startIndex ? text : inline.text.substring(startIndex);\n }\n if (startPosition.paragraph === endPosition.paragraph) {\n if (inline instanceof ElementBox) {\n if (inline === endInline && inline instanceof TextElementBox) {\n text = text.length < endIndex - startIndex ? text : text.substring(0, endIndex - startIndex);\n }\n else if (inline.nextNode instanceof ElementBox) {\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n else {\n if (inline instanceof ElementBox && inline.nextNode instanceof ElementBox) {\n text = text + this.getTextInline(inline.nextNode, endPosition.paragraph, endInline, endIndex, includeObject);\n }\n else {\n var nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(startPosition.paragraph);\n text = text + '\\r';\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endPosition.paragraph) {\n return text;\n }\n nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n text = text + this.getTextInline(nextParagraphWidget.childWidgets[0].children[0], endPosition.paragraph, endInline, endIndex, includeObject);\n }\n }\n }\n // If the selection includes end paragraph mark.\n if (endOffset === (endPosition.currentWidget).getEndOffset() + 1) {\n text = text + '\\r';\n }\n return text;\n }\n return undefined;\n };\n /**\n * @private\n * @param block\n * @param offset\n * @returns {string}\n */\n Selection.prototype.getHierarchicalIndex = function (block, offset) {\n var index;\n if (block) {\n if (block instanceof HeaderFooterWidget) {\n var hfString = block.headerFooterType.indexOf('Header') !== -1 ? 'H' : 'F';\n var pageIndex = block.page.index.toString();\n // let headerFooterIndex: string = (this.viewer as PageLayoutViewer).getHeaderFooter(block.headerFooterType).toString();\n var sectionIndex = block.page.sectionIndex;\n index = sectionIndex + ';' + hfString + ';' + pageIndex + ';' + offset;\n }\n else {\n if (block instanceof BodyWidget && !isNullOrUndefined(block.containerWidget) && block.containerWidget instanceof FootNoteWidget) {\n var ind = block.containerWidget.bodyWidgets.indexOf(block);\n index = ind + ';' + offset;\n }\n else {\n // if (block instanceof BodyWidget && block.sectionFormat.columns.length > 1) {\n // index = block.indexInOwner + ';' + offset;\n // }\n // else {\n index = block.index + ';' + offset;\n // }\n }\n }\n if (block instanceof TextFrame) {\n var indexInOwner = block.containerShape.line.getOffset(block.containerShape, 1);\n index = 'S' + ';' + indexInOwner + ';' + offset;\n return this.getHierarchicalIndex(block.containerShape.paragraph, index);\n }\n if (block instanceof FootNoteWidget) {\n // index = block.index + ';' + index;\n //block = block.containerWidget;\n var hfString = block.footNoteType === 'Footnote' ? 'FN' : 'EN';\n var pageIndex = block.page.index.toString();\n // let headerFooterIndex: string = (this.viewer as PageLayoutViewer).getHeaderFooter(block.headerFooterType).toString();\n var sectionIndex = block.page.sectionIndex;\n index = sectionIndex + ';' + hfString + ';' + pageIndex + ';' + offset;\n }\n if (block.containerWidget) {\n if (block instanceof TableCellWidget && block.rowIndex !== block.containerWidget.index) {\n index = block.rowIndex + ';' + index;\n block = block.containerWidget;\n }\n return this.getHierarchicalIndex(block.containerWidget, index);\n }\n }\n return index;\n };\n /**\n * @private\n * @returns {string}\n */\n Selection.prototype.getHierarchicalIndexByPosition = function (position) {\n var info = this.getParagraphInfo(position);\n return this.getHierarchicalIndex(info.paragraph, info.offset.toString());\n };\n /**\n * @private\n * @returns {TextPosition}\n */\n Selection.prototype.getTextPosBasedOnLogicalIndex = function (hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var blockInfo = this.getParagraph({ index: hierarchicalIndex });\n var lineInfo = this.getLineInfoBasedOnParagraph(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n return textPosition;\n };\n /**\n * Get offset value to update in selection\n *\n * @private\n * @returns {LineInfo}\n */\n Selection.prototype.getLineInfoBasedOnParagraph = function (paragraph, offset) {\n var position = undefined;\n var element = undefined;\n var length = this.getParagraphLength(paragraph);\n var next = paragraph.nextSplitWidget;\n if (offset > length + 1 && isNullOrUndefined(next)) {\n offset = length;\n }\n while (offset > length && next instanceof ParagraphWidget) {\n offset -= length;\n paragraph = next;\n length = this.getParagraphLength(paragraph);\n next = paragraph.nextSplitWidget;\n }\n return this.getLineInfo(paragraph, offset);\n };\n /**\n * @private\n * @returns {ParagraphInfo}\n */\n Selection.prototype.getParagraph = function (position) {\n var paragraph = this.getParagraphInternal(this.getBodyWidget(position), position);\n return { paragraph: paragraph, offset: parseInt(position.index, 10) };\n };\n /**\n * Gets body widget based on position.\n *\n * @private\n * @returns {BlockContainer}\n */\n Selection.prototype.getBodyWidget = function (position) {\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var sectionIndex = parseInt(value, 10);\n index = parseInt(value, 10);\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n // position = position.substring(index).replace(';', '');\n if (value === 'H' || value === 'F') {\n return this.getHeaderFooterWidget(position);\n }\n else if (value === 'FN' || value === 'EN') {\n return this.getFootNoteWidget(position);\n }\n index = parseInt(value, 10);\n return this.getBodyWidgetInternal(sectionIndex, index);\n };\n Selection.prototype.getFootNoteWidget = function (position) {\n var index1 = position.index.indexOf(';');\n var value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n var footNote = value1 === 'FN';\n index1 = position.index.indexOf(';');\n value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n index1 = parseInt(value1, 10);\n var page = this.documentHelper.pages[index1];\n index1 = position.index.indexOf(';');\n value1 = position.index.substring(0, index1);\n position.index = position.index.substring(index1).replace(';', '');\n index1 = parseInt(value1, 10);\n if (footNote) {\n return page.footnoteWidget.bodyWidgets[index1];\n }\n else {\n return page.endnoteWidget.bodyWidgets[index1];\n }\n };\n Selection.prototype.getHeaderFooterWidget = function (position) {\n //HEADER OR FOOTER WIDGET\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var isHeader = value === 'H';\n index = position.index.indexOf(';');\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n index = parseInt(value, 10);\n var page = this.documentHelper.pages[index];\n var headerFooterWidget;\n if (isHeader) {\n headerFooterWidget = page.headerWidget;\n }\n else {\n headerFooterWidget = page.footerWidget;\n }\n if (!isNullOrUndefined(headerFooterWidget)) {\n headerFooterWidget.page = page;\n }\n return headerFooterWidget;\n };\n /**\n * @private\n * @returns {BodyWidget}\n */\n Selection.prototype.getBodyWidgetInternal = function (sectionIndex, blockIndex) {\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n for (var j = 0; j < this.documentHelper.pages[i].bodyWidgets.length; j++) {\n var bodyWidget = this.documentHelper.pages[i].bodyWidgets[j];\n if (bodyWidget.index === sectionIndex) {\n if (bodyWidget.childWidgets.length > 0 && bodyWidget.firstChild.index <= blockIndex &&\n bodyWidget.lastChild.index >= blockIndex) {\n return bodyWidget;\n }\n }\n if (bodyWidget.index > sectionIndex) {\n break;\n }\n }\n }\n return undefined;\n };\n Selection.prototype.getParagraphInternal = function (container, position) {\n if (isNullOrUndefined(position.index)) {\n return undefined;\n }\n // let ins: Widget = container;\n var index = position.index.indexOf(';');\n var value = '0';\n if (index >= 0) {\n value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n }\n // if (container instanceof BodyWidget && value === 'HF') {\n // return this.getParagraph(container.headerFooters, position);\n // }\n index = parseInt(value, 10);\n if (container instanceof TableRowWidget && index >= container.childWidgets.length) {\n position.index = '0;0';\n index = container.childWidgets.length - 1;\n }\n var childWidget = this.getBlockByIndex(container, index);\n if (childWidget) {\n value = position.index.substring(0, 1);\n if (value === 'S') {\n position.index = position.index.substring(1).replace(';', '');\n var indexInOwner = position.index.substring(0, position.index.indexOf(';'));\n position.index = position.index.substring(position.index.indexOf(';')).replace(';', '');\n var paraIndex = position.index.substring(0, position.index.indexOf(';'));\n position.index = position.index.substring(position.index.indexOf(';')).replace(';', '');\n var shape = childWidget.getInline(parseInt(indexInOwner), 0).element;\n childWidget = shape.textFrame.childWidgets[paraIndex];\n }\n var child = childWidget;\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') > 0) {\n position.index = '0';\n }\n return child;\n }\n if (child instanceof Widget) {\n if (position.index.indexOf(';') > 0) {\n return this.getParagraphInternal(child, position);\n }\n else {\n //If table is shifted to previous text position then return the first paragraph within table.\n if (child instanceof TableWidget) {\n return this.documentHelper.getFirstParagraphInFirstCell(child);\n }\n return undefined;\n }\n }\n }\n else if (container) {\n var nextWidget = container.getSplitWidgets().pop().nextRenderedWidget;\n if (nextWidget instanceof Widget) {\n position.index = '0';\n if (nextWidget instanceof TableWidget) {\n return this.documentHelper.getFirstParagraphInFirstCell(nextWidget);\n }\n return nextWidget;\n }\n }\n return undefined;\n };\n /**\n * @private\n * @returns {Widget}\n */\n Selection.prototype.getBlockByIndex = function (container, blockIndex) {\n var childWidget;\n if (container) {\n for (var j = 0; j < container.childWidgets.length; j++) {\n if (container.childWidgets[j].index === blockIndex) {\n childWidget = container.childWidgets[j];\n break;\n }\n }\n if (!childWidget && !(container instanceof HeaderFooterWidget)) {\n return this.getBlockByIndex(container.nextSplitWidget, blockIndex);\n }\n }\n return childWidget;\n };\n /**\n * Get logical offset of paragraph.\n *\n * @private\n * @returns {ParagraphInfo}\n */\n Selection.prototype.getParagraphInfo = function (position) {\n return this.getParagraphInfoInternal(position.currentWidget, position.offset);\n };\n /**\n * Get the start or end cell from current selection\n *\n * @private\n * @returns {TableCellWidget}\n */\n Selection.prototype.getCellFromSelection = function (type) {\n var cell;\n var selectedCells = this.getSelectedCells();\n if (this.hasMergedCells()) {\n return undefined;\n }\n if (type == 0 && selectedCells.length > 0) {\n if (!(this.selectedWidgets.keys[0] instanceof TableCellWidget)) {\n return undefined;\n }\n cell = selectedCells[0];\n var rowIndex = cell.rowIndex;\n var colIndex = cell.columnIndex;\n var tableIndex = cell.ownerTable.index;\n for (var i = 0; i < selectedCells.length; i++) {\n var widget = selectedCells[i];\n if (widget.rowIndex < rowIndex) {\n rowIndex = widget.rowIndex;\n }\n if (widget.columnIndex < colIndex) {\n colIndex = widget.columnIndex;\n }\n if (widget.ownerTable.index < tableIndex) {\n tableIndex = widget.ownerTable.index;\n }\n }\n for (var i = 0; i < selectedCells.length; i++) {\n var widget = selectedCells[i];\n if (rowIndex == widget.rowIndex && colIndex == widget.columnIndex && tableIndex == widget.ownerTable.index) {\n cell = widget;\n }\n }\n }\n else if (type == 1 && selectedCells.length > 0) {\n if (!(this.selectedWidgets.keys[this.selectedWidgets.length - 1] instanceof TableCellWidget)) {\n return undefined;\n }\n cell = selectedCells[selectedCells.length - 1];\n var rowIndex = cell.rowIndex;\n var colIndex = cell.columnIndex;\n var tableIndex = cell.ownerTable.index;\n for (var i = selectedCells.length - 1; i >= 0; i--) {\n var widget = selectedCells[i];\n if (widget.rowIndex > rowIndex) {\n rowIndex = widget.rowIndex;\n }\n if (widget.columnIndex > colIndex) {\n colIndex = widget.columnIndex;\n }\n if (widget.ownerTable.index > tableIndex) {\n tableIndex = widget.ownerTable.index;\n }\n }\n for (var i = 0; i < selectedCells.length; i++) {\n var widget = selectedCells[i];\n if (rowIndex == widget.rowIndex && colIndex == widget.columnIndex && tableIndex == widget.ownerTable.index) {\n cell = widget;\n }\n }\n }\n return (cell instanceof TableCellWidget) ? cell : undefined;\n };\n /**\n * Get the start cell or end cell in table with merged cells from current selection.\n *\n * @private\n * @returns {TableCellWidget}\n */\n Selection.prototype.getCellFromSelectionInTable = function (type) {\n var cell;\n var selectedCells = this.getSelectedCells();\n var bounds = this.getCellBoundsInfo();\n var sortedRowIndexArray = [];\n var sortedColumnIndexArray = [];\n for (var i = 0; i < selectedCells.length; i++) {\n var widget = selectedCells[i];\n sortedRowIndexArray.push(widget.rowIndex);\n sortedColumnIndexArray.push(widget.columnIndex);\n }\n sortedRowIndexArray.sort();\n sortedColumnIndexArray.sort();\n var requiredRow;\n var requiredCol;\n if (type == 1) {\n requiredRow = bounds.row.rowLast;\n requiredCol = bounds.column.colLast;\n var isRequiredCellExist = false;\n while (!isRequiredCellExist && isNullOrUndefined(cell)) {\n for (var i = 0; i < selectedCells.length; i++) {\n var widget_1 = selectedCells[i];\n if (widget_1.rowIndex == requiredRow && widget_1.columnIndex == requiredCol) {\n isRequiredCellExist = true;\n cell = widget_1;\n break;\n }\n }\n if (!isRequiredCellExist) {\n requiredRow -= 1;\n }\n }\n }\n else if (type == 0) {\n requiredRow = bounds.row.rowFirst;\n requiredCol = bounds.column.colFirst;\n var isRequiredCellExist = false;\n while (!isRequiredCellExist && isNullOrUndefined(cell)) {\n for (var i = 0; i < selectedCells.length; i++) {\n var widget_2 = selectedCells[i];\n if (widget_2.rowIndex == requiredRow && widget_2.columnIndex == requiredCol) {\n isRequiredCellExist = true;\n cell = widget_2;\n break;\n }\n }\n if (!isRequiredCellExist) {\n requiredCol += 1;\n }\n }\n }\n return cell;\n };\n /**\n * Get the actual offset from the current selection.\n *\n * @private\n * @returns {string}\n */\n Selection.prototype.getActualOffset = function (cell, type) {\n var offset;\n if (type == 0) {\n var paraElement = this.getFirstParagraph(cell);\n offset = this.getHierarchicalIndex(paraElement, this.getStartOffset(paraElement).toString());\n }\n else if (type == 1) {\n var paraElement = this.getLastParagraph(cell);\n var lastLine = paraElement.lastChild;\n var length_1 = this.getParagraphLength(paraElement, lastLine) + this.getLineLength(lastLine) + 1;\n offset = this.getHierarchicalIndex(paraElement, length_1.toString());\n }\n return offset;\n };\n /**\n * Get the properties for Bookmark.\n *\n * @private\n * @returns {object}\n */\n Selection.prototype.getBookmarkProperties = function (bookmark) {\n var selectedWidgets = this.selectedWidgets.keys;\n if (bookmark.bookmarkType == 0) {\n if (!(selectedWidgets[0] instanceof TableCellWidget)) {\n return undefined;\n }\n var bounds = this.getCellBoundsInfo();\n if (!isNullOrUndefined(bounds)) {\n return {\n 'columnFirst': bounds.column.colFirst.toString(),\n 'columnLast': bounds.column.colLast.toString()\n };\n }\n }\n if (bookmark.bookmarkType == 1) {\n if (selectedWidgets[selectedWidgets.length - 1] instanceof TableCellWidget) {\n return undefined;\n }\n var properties = {};\n // isAfterParagraphMark\n if (this.isParagraphMarkSelected()) {\n properties.isAfterParagraphMark = true;\n }\n // isAfterCellMark\n var bookmarkStart = bookmark.reference;\n var selectedCells = this.getSelectedCells();\n if (bookmarkStart && !isNullOrUndefined(bookmarkStart.properties)) {\n if (selectedCells.length == 1) {\n if (this.isCellSelected(selectedCells[0], this.start, this.end)) {\n properties.isAfterCellMark = true;\n delete properties.isAfterParagraphMark;\n }\n }\n }\n // isAfterTableMark\n if (this.isTableSelected()) {\n properties.isAfterTableMark = true;\n }\n // isAfterRowMark\n if (this.isRowSelected()) {\n properties.isAfterRowMark = true;\n }\n if (!isNullOrUndefined(properties.isAfterParagraphMark) || !isNullOrUndefined(properties.isAfterCellMark)) {\n return properties;\n }\n }\n return undefined;\n };\n /**\n * Returns true if Paragraph Mark is selected.\n *\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isParagraphMarkSelected = function () {\n var line = this.end.currentWidget;\n var paraElement;\n if (line instanceof LineWidget) {\n paraElement = line.paragraph;\n }\n var paraLength = this.getParagraphLength(paraElement);\n var endIndices = this.endOffset.split(';');\n var endIndex = parseInt(endIndices[endIndices.length - 1]);\n if (endIndex > paraLength) {\n return true;\n }\n return false;\n };\n /**\n * Returns true if Row is selected.\n *\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isRowSelected = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(start.paragraph.associatedCell) ||\n isNullOrUndefined(end.paragraph.associatedCell)) {\n return false;\n }\n var row = end.paragraph.associatedCell.ownerRow.getSplitWidgets();\n var firstParagraph;\n var firstcell;\n if (row[0].childWidgets.length > 0) {\n firstcell = row[0].childWidgets[0];\n if (firstcell.childWidgets.length === 0) {\n return undefined;\n }\n firstParagraph = firstcell.childWidgets[0];\n }\n var lastParagraph;\n var lastRow = row[row.length - 1];\n var lastCell = lastRow.childWidgets[lastRow.childWidgets.length - 1];\n while (lastCell.childWidgets.length === 0 && !isNullOrUndefined(lastCell.previousSplitWidget)) {\n lastCell = lastCell.previousSplitWidget;\n }\n lastParagraph = lastCell.childWidgets[lastCell.childWidgets.length - 1];\n return firstcell.equals(firstParagraph.associatedCell) &&\n end.paragraph.associatedCell.equals(lastParagraph.associatedCell)\n && (!firstParagraph.associatedCell.equals(lastParagraph.associatedCell) || (start.offset === 0\n && end.offset === this.getLineLength(lastParagraph.lastChild) + 1));\n };\n /**\n * Get the bounds of row and col index from selected cells\n *\n * @private\n * @returns {object}\n */\n Selection.prototype.getCellBoundsInfo = function () {\n var selectedWidgets = this.getSelectedCells();\n if (selectedWidgets.length > 0) {\n var colFirst = selectedWidgets[0].columnIndex;\n var colLast = selectedWidgets[selectedWidgets.length - 1].columnIndex;\n var rowFirst = selectedWidgets[0].rowIndex;\n var rowLast = selectedWidgets[selectedWidgets.length - 1].rowIndex;\n for (var i = 0; i < selectedWidgets.length; i++) {\n var widget = selectedWidgets[i];\n if (widget.columnIndex < colFirst) {\n colFirst = widget.columnIndex;\n }\n if (widget.columnIndex > colLast) {\n colLast = widget.columnIndex;\n }\n if (widget.rowIndex < rowFirst) {\n rowFirst = widget.rowIndex;\n }\n if (widget.rowIndex > rowLast) {\n rowLast = widget.rowIndex;\n }\n }\n return { 'column': {\n 'colFirst': colFirst,\n 'colLast': colLast\n },\n 'row': {\n 'rowFirst': rowFirst,\n 'rowLast': rowLast\n }\n };\n }\n return undefined;\n };\n /**\n * Return true if the selection has merged cells, else false.\n *\n * @private\n * @returns {boolean}\n */\n Selection.prototype.hasMergedCells = function () {\n var selectedCells = this.getSelectedCells();\n for (var i = 0; i < selectedCells.length; i++) {\n var widget = selectedCells[i];\n if (widget.cellFormat.rowSpan > 1 || widget.cellFormat.columnSpan > 1) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {ParagraphInfo}\n */\n Selection.prototype.getParagraphInfoInternal = function (line, lineOffset) {\n var paragraph = line.paragraph;\n var offset = this.getParagraphLength(paragraph, line) + lineOffset;\n var previous = paragraph.previousSplitWidget;\n while (previous instanceof ParagraphWidget) {\n paragraph = previous;\n offset += this.documentHelper.selection.getParagraphLength(paragraph);\n previous = paragraph.previousSplitWidget;\n }\n return { 'paragraph': paragraph, 'offset': offset };\n };\n /**\n * @private\n * @returns {ListTextElementBox}\n */\n Selection.prototype.getListTextElementBox = function (paragarph) {\n if (isNullOrUndefined(paragarph)) {\n return undefined;\n }\n var listTextElement;\n if (!paragarph.isEmpty()) {\n var lineWidget = paragarph.childWidgets[0];\n if (lineWidget.children.length > 1) {\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n listTextElement = lineWidget.children[0];\n }\n }\n }\n return listTextElement;\n };\n /**\n * @private\n * @returns {WListLevel}\n */\n Selection.prototype.getListLevel = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(currentList) &&\n !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId))\n // && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels.getItem(listLevelNumber))) {\n && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels)) {\n return this.documentHelper.layout.getListLevel(currentList, listLevelNumber);\n }\n return undefined;\n };\n Selection.prototype.getTextInline = function (inlineElement, endParagraphWidget, endInline, endIndex, includeObject) {\n var text = '';\n do {\n if (inlineElement === endInline) {\n if (inlineElement instanceof TextElementBox) {\n var span = inlineElement;\n if (!(isNullOrUndefined(span.text) || span.text === '')) {\n if (span.text.length < endIndex) {\n text = text + span.text;\n }\n else {\n text = text + span.text.substring(0, endIndex);\n }\n }\n }\n else if (inlineElement instanceof ImageElementBox && includeObject && endIndex === inlineElement.length) {\n text = text + ElementBox.objectCharacter;\n }\n return text;\n }\n if (inlineElement instanceof TextElementBox) {\n text = text + inlineElement.text;\n }\n else if (inlineElement instanceof ImageElementBox && includeObject) {\n text = text + ElementBox.objectCharacter;\n }\n else if (inlineElement instanceof FieldElementBox && !isNullOrUndefined(inlineElement.fieldEnd)) {\n if (!isNullOrUndefined(inlineElement.fieldSeparator)) {\n inlineElement = inlineElement.fieldSeparator;\n }\n else {\n inlineElement = inlineElement.fieldEnd;\n }\n }\n if (isNullOrUndefined(inlineElement.nextNode)) {\n break;\n }\n inlineElement = inlineElement.nextNode;\n } while (!isNullOrUndefined(inlineElement));\n if (endParagraphWidget === inlineElement.line.paragraph) {\n return text;\n }\n var nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(inlineElement.line.paragraph);\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.isEmpty()) {\n text = text + '\\r';\n if (nextParagraphWidget === endParagraphWidget) {\n return text;\n }\n nextParagraphWidget = this.documentHelper.selection.getNextParagraphBlock(nextParagraphWidget);\n }\n if (!isNullOrUndefined(nextParagraphWidget) && !nextParagraphWidget.isEmpty()) {\n var lineWidget = nextParagraphWidget.childWidgets[0];\n if (isNullOrUndefined(nextParagraphWidget.previousSplitWidget)) {\n text = text + '\\r';\n }\n text = text + this.getTextInline(lineWidget.children[0], endParagraphWidget, endInline, endIndex, includeObject);\n }\n return text;\n };\n /**\n * Returns field code.\n *\n * @private\n * @param fieldBegin\n * @returns {string}\n */\n Selection.prototype.getFieldCode = function (fieldBegin, isSkipTrim) {\n var fieldCode = '';\n if (!isNullOrUndefined(fieldBegin) && !(fieldBegin.fieldEnd instanceof FieldElementBox)) {\n return fieldCode;\n }\n var paragraph = fieldBegin.paragraph;\n var endParagraph = fieldBegin.fieldEnd.paragraph;\n if (fieldBegin.fieldSeparator instanceof FieldElementBox) {\n endParagraph = fieldBegin.fieldSeparator.paragraph;\n }\n var startLineIndex = fieldBegin.line.indexInOwner;\n var startIndex = fieldBegin.indexInOwner;\n do {\n fieldCode += this.getFieldCodeInternal(paragraph, startLineIndex, startIndex);\n if (paragraph === endParagraph) {\n break;\n }\n paragraph = this.getNextParagraphBlock(paragraph);\n startLineIndex = 0;\n startIndex = 0;\n } while (paragraph instanceof ParagraphWidget);\n return isSkipTrim ? fieldCode : fieldCode.trim();\n };\n Selection.prototype.getFieldCodeInternal = function (paragraph, startLineIndex, inlineIndex) {\n var fieldCode = '';\n for (var i = startLineIndex; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var i_1 = inlineIndex; i_1 < line.children.length; i_1++) {\n var element = line.children[i_1];\n if (element instanceof TextElementBox) {\n fieldCode += element.text;\n }\n if (element instanceof FieldElementBox\n && (element.fieldType === 2 || element.fieldType === 1)) {\n return fieldCode;\n }\n }\n inlineIndex = 0;\n }\n return fieldCode;\n };\n /**\n * @private\n * @returns {FieldElementBox}\n */\n Selection.prototype.getTocFieldInternal = function () {\n var paragraph = this.start.paragraph;\n if (!this.isEmpty && !this.isForward) {\n paragraph = this.end.paragraph;\n }\n while (paragraph instanceof ParagraphWidget && paragraph.childWidgets.length > 0) {\n var line = paragraph.firstChild;\n if (line.children.length > 0) {\n var element = line.children[0];\n var nextElement = element.nextNode;\n if (element instanceof FieldElementBox && element.fieldType === 0 && nextElement instanceof TextElementBox\n && nextElement.text.trim().toLowerCase().indexOf('toc') === 0) {\n return element;\n }\n }\n paragraph = paragraph.previousRenderedWidget;\n }\n return undefined;\n };\n /**\n * Get next paragraph in bodyWidget\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getNextParagraph = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n return this.documentHelper.getFirstParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getPreviousParagraph = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var bodyWidget = section.previousRenderedWidget;\n var block = bodyWidget.childWidgets[bodyWidget.childWidgets.length - 1];\n return this.documentHelper.getLastParagraphBlock(block);\n }\n return undefined;\n };\n /**\n * Get Next start inline\n *\n * @private\n * @returns {ElementBox}\n */\n Selection.prototype.getNextStartInline = function (line, offset) {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if ((!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox)\n || inline instanceof ShapeElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * Get previous text inline\n *\n * @private\n * @returns {ElementBox}\n */\n Selection.prototype.getPreviousTextInline = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (inline.previousNode instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline.previousNode)) {\n if (inline.previousNode.fieldType === 0 || inline.previousNode.fieldType === 1) {\n return inline.previousNode;\n }\n return inline.previousNode.fieldBegin;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextInline((inline.previousNode));\n }\n return undefined;\n };\n /**\n * Get next text inline\n *\n * @private\n * @returns {ElementBox}\n */\n Selection.prototype.getNextTextInline = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (inline.nextNode instanceof FieldElementBox && (HelperMethods.isLinkedFieldCharacter(inline.nextNode))) {\n if (inline.nextNode.fieldType === 1 || inline.nextNode.fieldType === 0) {\n return inline.nextNode;\n }\n return inline.nextNode.fieldEnd;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextInline((inline.nextNode));\n }\n return undefined;\n };\n /**\n * Get container table\n *\n * @private\n * @returns {TableWidget}\n */\n Selection.prototype.getContainerTable = function (block) {\n if (block.isInsideTable) {\n if (block.associatedCell.ownerTable.isInsideTable) {\n block = this.getContainerTable(block.associatedCell.ownerTable);\n }\n else {\n block = block.associatedCell.ownerTable;\n }\n }\n if (block instanceof TableWidget) {\n return block;\n }\n return undefined;\n };\n /**\n * @private\n * @param element\n * @returns\n */\n Selection.prototype.isElementInSelection = function (element, isEnd) {\n var offset = element.line.getOffset(element, isEnd ? 0 : 1);\n var elemPosition = new TextPosition(this.owner);\n elemPosition.setPositionParagraph(element.line, offset);\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n return ((elemPosition.isExistAfter(start) || elemPosition.isAtSamePosition(start))\n && (elemPosition.isExistBefore(end) || elemPosition.isAtSamePosition(end)));\n };\n /**\n * @private\n */\n Selection.prototype.isSelectionInsideElement = function (element) {\n //Handled for spellcheck\n if (this.isEmpty) {\n var startOffset = element.line.getOffset(element, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(element.line, startOffset);\n var endOffset = element.line.getOffset(element, element.length);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(element.line, endOffset);\n return ((this.start.isExistAfter(startPosition) || this.start.isAtSamePosition(startPosition))\n && (this.start.isExistBefore(endPosition) || this.start.isAtSamePosition(endPosition)));\n }\n return false;\n };\n /**\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistBefore = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) < cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex < cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n //Checks if current block exists before the block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistBefore(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistBefore(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex < cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex < cell2.ownerRow.rowIndex;\n }\n return this.isExistBefore(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistBefore(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistBefore(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistBefore(start, ownerTable);\n }\n else {\n {\n if (start.containerWidget === block.containerWidget) {\n return start.index <\n block.index;\n }\n if ((start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget)) {\n //Splitted blocks\n var startPage = this.documentHelper.pages.indexOf(start.containerWidget.page);\n var endPage = this.documentHelper.pages.indexOf(block.containerWidget.page);\n if (startPage === endPage) {\n return start.containerWidget.indexInOwner < block.containerWidget.indexInOwner;\n }\n if (startPage === endPage && start.containerWidget.containerWidget instanceof FootNoteWidget && block.containerWidget.containerWidget instanceof FootNoteWidget) {\n var startindex = this.documentHelper.pages[startPage].footnoteWidget.bodyWidgets.indexOf(start.containerWidget);\n var endindex = this.documentHelper.pages[endPage].footnoteWidget.bodyWidgets.indexOf(block.containerWidget);\n return startindex < endindex;\n }\n else if (startPage === endPage && start.containerWidget.index !== block.containerWidget.index) {\n var startindex = this.documentHelper.pages[startPage].bodyWidgets.indexOf(start.containerWidget);\n var endindex = this.documentHelper.pages[endPage].bodyWidgets.indexOf(block.containerWidget);\n return startindex < endindex;\n }\n else {\n return startPage < endPage;\n }\n }\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistAfter = function (start, block) {\n if (start.isInsideTable) {\n var cell1 = start.associatedCell;\n //Current paragraph in cell, paragraph in cell\n if (block.isInsideTable) {\n var cell2 = block.associatedCell;\n if (cell1 === cell2) {\n return cell1.childWidgets.indexOf(start) > cell1.childWidgets.indexOf(block);\n }\n if (cell1.ownerRow === cell2.ownerRow) {\n return cell1.cellIndex > cell2.cellIndex;\n }\n if (cell1.ownerTable === cell2.ownerTable) {\n return cell1.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n //Checks if this block exists before block.\n var containerCell = this.getContainerCellOf(cell1, cell2);\n if (containerCell.ownerTable.contains(cell2)) {\n cell1 = this.getSelectedCell(cell1, containerCell);\n cell2 = this.getSelectedCell(cell2, containerCell);\n if (cell1 === containerCell) {\n return this.isExistAfter(start, cell2.ownerTable);\n }\n if (cell2 === containerCell) {\n return this.isExistAfter(cell1.ownerTable, block);\n }\n if (containerCell.ownerRow === cell2.ownerRow) {\n return containerCell.cellIndex > cell2.cellIndex;\n }\n if (containerCell.ownerTable === cell2.ownerTable) {\n return containerCell.ownerRow.rowIndex > cell2.ownerRow.rowIndex;\n }\n return this.isExistAfter(cell1.ownerTable, cell2.ownerTable);\n }\n return this.isExistAfter(containerCell.ownerTable, this.getContainerTable(cell2.ownerTable));\n }\n else {\n var ownerTable = this.getContainerTable(start);\n return this.isExistAfter(ownerTable, block);\n }\n }\n else if (block.isInsideTable) {\n var ownerTable = this.getContainerTable(block);\n return this.isExistAfter(start, ownerTable);\n }\n else {\n if (start.containerWidget === block.containerWidget) {\n return start.index >\n block.index;\n }\n if ((start.containerWidget instanceof BodyWidget && block.containerWidget instanceof BodyWidget) || (start.containerWidget instanceof FootNoteWidget && block.containerWidget instanceof FootNoteWidget)) {\n //Splitted blocks\n var startPage = this.documentHelper.pages.indexOf(start.containerWidget.page);\n var endPage = this.documentHelper.pages.indexOf(block.containerWidget.page);\n return startPage > endPage;\n }\n // if (start.owner instanceof WHeaderFooter) {\n // return (start.owner as WHeaderFooter).childWidgets.indexOf(start)\n // > (block.owner as WHeaderFooter).childWidgets.indexOf(block);\n // } else if (start.section === block.section && start.section instanceof WSection) {\n // return (start.section as WSection).childWidgets.indexOf(start)\n // > (start.section as WSection).childWidgets.indexOf(block);\n // } else if (start.wordDocument instanceof WordDocument) {\n // return (start.wordDocument as WordDocument).sections.indexOf(start.section as WSection) > (start.wordDocument as WordDocument).sections.indexOf(block.section as WSection);\n }\n return false;\n };\n /**\n * Return true if current inline in exist before inline\n *\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistBeforeInline = function (currentInline, inline) {\n if (currentInline.line === inline.line) {\n return currentInline.line.children.indexOf(currentInline) <=\n inline.line.children.indexOf(inline);\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n < inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) <\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) <\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistBefore(startParagraph, endParagraph);\n };\n /**\n * Return true id current inline is exist after inline\n *\n * @private\n * @returns {boolean}\n */\n Selection.prototype.isExistAfterInline = function (currentInline, inline, isRetrieve) {\n if (currentInline.line === inline.line) {\n var selection = this.documentHelper.selection;\n if (isRetrieve) {\n return currentInline.line.children.indexOf(currentInline) >=\n inline.line.children.indexOf(inline);\n }\n else if (currentInline === inline && selection.start.offset !== selection.end.offset) {\n return currentInline.line.children.indexOf(currentInline) ===\n inline.line.children.indexOf(inline);\n }\n else {\n return currentInline.line.children.indexOf(currentInline) >\n inline.line.children.indexOf(inline);\n }\n }\n if (currentInline.line.paragraph === inline.line.paragraph) {\n return currentInline.line.paragraph.childWidgets.indexOf(currentInline.line)\n > inline.line.paragraph.childWidgets.indexOf(inline.line);\n }\n var startParagraph = currentInline.line.paragraph;\n var endParagraph = inline.line.paragraph;\n if (startParagraph.containerWidget === endParagraph.containerWidget) {\n if (startParagraph.isInsideTable) {\n return startParagraph.associatedCell.childWidgets.indexOf(startParagraph) >\n endParagraph.associatedCell.childWidgets.indexOf(endParagraph);\n }\n else if (startParagraph.containerWidget instanceof HeaderFooterWidget) {\n // return ((currentInline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(currentInline.owner as WParagraph) <\n // ((inline.owner as WParagraph).owner as WHeaderFooter).blocks.indexOf(inline.owner as WParagraph);\n }\n else {\n return startParagraph.containerWidget.childWidgets.indexOf(startParagraph) >\n endParagraph.containerWidget.childWidgets.indexOf(endParagraph);\n }\n }\n return this.isExistAfter(startParagraph, endParagraph);\n };\n /**\n * Get next rendered block\n *\n * @private\n * @returns {BlockWidget}\n */\n Selection.prototype.getNextRenderedBlock = function (block) {\n if (isNullOrUndefined(block.nextWidget)) {\n return block.nextRenderedWidget;\n }\n return block.nextWidget;\n };\n /**\n * Get next rendered block\n *\n * @private\n * @returns {BlockWidget}\n */\n Selection.prototype.getPreviousRenderedBlock = function (block) {\n if (isNullOrUndefined(block.previousWidget)) {\n return block.previousRenderedWidget;\n }\n return block.previousWidget;\n };\n /**\n * Get Next paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getNextParagraphBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n return this.documentHelper.getFirstParagraphInFirstCell(block.nextRenderedWidget);\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextParagraphCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n var bodyWidget = block.containerWidget;\n return this.getNextParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp) {\n return this.getFirstBlockInNextHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getFirstBlockInNextHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var nextBlock;\n if (headerFooter.headerFooterType.indexOf('Header') !== -1) {\n nextBlock = headerFooter.page.footerWidget.firstChild;\n }\n else if (headerFooter.page.nextPage) {\n var nextPage = headerFooter.page.nextPage;\n var headerWidget = nextPage.headerWidget;\n headerWidget.page = nextPage;\n if (nextPage.footerWidget) {\n nextPage.footerWidget.page = nextPage;\n }\n nextBlock = headerWidget.firstChild;\n }\n else {\n return undefined;\n }\n if (nextBlock instanceof ParagraphWidget) {\n return nextBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(nextBlock);\n }\n };\n /**\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getLastBlockInPreviousHeaderFooter = function (block) {\n var headerFooter = block.containerWidget;\n var previousBlock;\n if (headerFooter.headerFooterType.indexOf('Footer') !== -1) {\n previousBlock = headerFooter.page.headerWidget.lastChild;\n }\n else if (headerFooter.page.previousPage) {\n var previousPage = headerFooter.page.previousPage;\n var footerWidget = previousPage.footerWidget;\n footerWidget.page = previousPage;\n if (previousPage.headerWidget) {\n previousPage.headerWidget.page = previousPage;\n }\n previousBlock = footerWidget.lastChild;\n }\n else {\n return undefined;\n }\n if (previousBlock instanceof ParagraphWidget) {\n return previousBlock;\n }\n else {\n return this.getFirstBlockInFirstCell(previousBlock);\n }\n };\n /**\n * Get previous paragraph in block\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.getPreviousParagraphBlock = function (block, isAutoList) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n return this.documentHelper.getLastParagraphInLastCell((block.previousRenderedWidget));\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousParagraphCell((block.containerWidget));\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousParagraph(block.containerWidget);\n }\n else if (block.containerWidget instanceof HeaderFooterWidget && this.isMoveDownOrMoveUp && !isAutoList) {\n return this.getLastBlockInPreviousHeaderFooter(block);\n }\n return undefined;\n };\n /**\n * Return true if paragraph has valid inline\n *\n * @private\n * @returns {ParagraphWidget}\n */\n Selection.prototype.hasValidInline = function (paragraph, start, end) {\n var index = paragraph.childWidgets.indexOf(start.line);\n for (var i = index; i < paragraph.childWidgets.length; i++) {\n for (var j = 0; j < paragraph.childWidgets[i].children.length; j++) {\n var inline = paragraph.childWidgets[i].children[j];\n if (inline.length === 0) {\n continue;\n }\n if (inline === end) {\n return false;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Get paragraph length\n *\n * @private\n * @returns {number}\n */\n Selection.prototype.getParagraphLength = function (paragraph, endLine, elementInfo, includeShape) {\n var length = 0;\n if (!isNullOrUndefined(paragraph)) {\n for (var j = 0; j < paragraph.childWidgets.length; j++) {\n var line = paragraph.childWidgets[j];\n if (endLine instanceof LineWidget && endLine === line) {\n if (elementInfo) {\n length += this.getLineLength(line, elementInfo, includeShape);\n }\n break;\n }\n length += this.getLineLength(line, undefined, includeShape);\n }\n }\n return length;\n };\n /**\n * Get Line length\n *\n * @private\n * @returns {number}\n */\n Selection.prototype.getLineLength = function (line, elementInfo, includeShape) {\n var length = 0;\n var bidi = line.paragraph.bidi;\n for (var i = !bidi ? 0 : line.children.length - 1; bidi ? i > -1 : i < line.children.length; bidi ? i-- : i++) {\n var element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (includeShape) {\n if (element instanceof ShapeElementBox) {\n for (var m = 0; m < element.textFrame.childWidgets.length; m++) {\n var para = element.textFrame.childWidgets[m];\n length += this.getParagraphLength(para) + 1;\n }\n }\n else if (element instanceof FootnoteElementBox) {\n for (var m = 0; m < element.bodyWidget.childWidgets.length; m++) {\n var para = element.bodyWidget.childWidgets[m];\n length += this.getParagraphLength(para) + 1;\n }\n }\n }\n if (elementInfo && elementInfo.element instanceof ElementBox && elementInfo.element === element) {\n length += elementInfo.index;\n break;\n }\n length += element.length;\n }\n return length;\n };\n /**\n * Get line information\n *\n * @private\n * @returns {LineInfo}\n */\n Selection.prototype.getLineInfo = function (paragraph, offset) {\n var line = undefined;\n var length = 0;\n var childLength = paragraph.childWidgets.length;\n for (var j = 0; j < childLength; j++) {\n line = paragraph.childWidgets[j];\n length = this.getLineLength(line);\n if (offset <= length || j === childLength - 1) {\n break;\n }\n else {\n offset = offset - length;\n }\n }\n return { 'line': line, 'offset': offset };\n };\n /**\n * @private\n * @returns {ElementInfo}\n */\n Selection.prototype.getElementInfo = function (line, offset) {\n var index = 0;\n var element = undefined;\n for (var i = 0; i < line.children.length; i++) {\n element = line.children[i];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (offset > element.length\n && (!(offset === element.length + 1 && isNullOrUndefined(element.nextNode)))) {\n offset = offset - element.length;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'index': offset };\n };\n /**\n * Get paragraph start offset\n *\n * @private\n * @returns {number}\n */\n Selection.prototype.getStartOffset = function (paragraph) {\n var startOffset = 0;\n if (paragraph.childWidgets.length > 0) {\n var childWidgets = paragraph.childWidgets[0];\n return this.getStartLineOffset(childWidgets);\n }\n return startOffset;\n };\n /**\n * @private\n */\n Selection.prototype.getStartLineOffset = function (line) {\n var startOffset = 0;\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0) {\n continue;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || inline instanceof ShapeElementBox || inline instanceof EditRangeStartElementBox\n || inline instanceof EditRangeEndElementBox || inline instanceof CommentCharacterElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))\n || inline instanceof ContentControl) {\n return startOffset;\n }\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n startOffset += inline.length;\n }\n return startOffset;\n };\n /**\n * Get previous paragraph from selection\n *\n * @private\n */\n Selection.prototype.getPreviousSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget)) {\n if (!this.isForward) {\n var block = cell.previousRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.documentHelper.getFirstParagraphInLastRow(block);\n }\n }\n else {\n var widgets = cell.previousRenderedWidget.childWidgets;\n var block = widgets[widgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getPreviousParagraphSelection(block.childWidgets[block.childWidgets.length - 1]);\n }\n }\n }\n return this.getPreviousSelectionRow(cell.ownerRow);\n };\n /**\n * Get previous paragraph selection in selection\n *\n * @private\n */\n Selection.prototype.getPreviousSelectionRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n if (!this.isForward) {\n var cell = row.previousRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.documentHelper.getFirstParagraphBlock(block);\n }\n else {\n return this.getPreviousParagraphSelection(row.previousRenderedWidget);\n }\n }\n return this.getPreviousSelectionBlock(row.ownerTable);\n };\n /**\n * @private\n */\n Selection.prototype.getNextSelectionBlock = function (block) {\n if (block.nextRenderedWidget instanceof ParagraphWidget) {\n return block.nextRenderedWidget;\n }\n else if (block.nextRenderedWidget instanceof TableWidget) {\n if (this.isEmpty || this.isForward) {\n return this.documentHelper.getLastParagraphInFirstRow(block.nextRenderedWidget);\n }\n else {\n return this.getNextParagraphSelection(block.nextRenderedWidget.childWidgets[0]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getNextSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getNextSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get next paragraph from selected cell\n *\n * @private\n */\n Selection.prototype.getNextSelectionCell = function (cell) {\n if (!isNullOrUndefined(cell.nextRenderedWidget)) {\n if (this.isEmpty || this.isForward) {\n var block = cell.nextRenderedWidget.childWidgets[cell.nextRenderedWidget.childWidgets.length - 1];\n return this.documentHelper.getLastParagraphBlock(block);\n }\n else {\n //Return first paragraph in cell.\n var block = cell.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return this.getNextSelectionRow(cell.ownerRow);\n };\n /**\n * Get next paragraph in selection\n *\n * @private\n */\n Selection.prototype.getNextSelectionRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var isForwardSelection = this.isEmpty || this.isForward;\n if (isForwardSelection) {\n var cell = row.nextRenderedWidget.childWidgets[row.nextRenderedWidget.childWidgets.length - 1];\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.documentHelper.getLastParagraphBlock(block);\n }\n else {\n return this.getNextParagraphSelection(row.nextRenderedWidget);\n }\n }\n return this.getNextSelectionBlock(row.ownerTable);\n };\n /**\n * Get next block with selection\n *\n * @private\n */\n Selection.prototype.getNextSelection = function (section) {\n if (section.nextRenderedWidget instanceof BodyWidget) {\n var block = section.nextRenderedWidget.childWidgets[0];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (this.isEmpty || this.isForward) {\n return this.documentHelper.getLastParagraphInFirstRow(block);\n }\n else {\n return this.getNextParagraphSelection(block.childWidgets[0]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[0];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getFirstCellInRegion(row, startCell, this.upDownSelectionLength, false);\n }\n var block = cell.childWidgets[0];\n return this.documentHelper.getFirstParagraphBlock(block);\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousSelectionBlock = function (block) {\n if (block.previousRenderedWidget instanceof ParagraphWidget) {\n return block.previousRenderedWidget;\n }\n else if (block.previousRenderedWidget instanceof TableWidget) {\n if (!this.isForward) {\n return this.documentHelper.getFirstParagraphInLastRow(block.previousRenderedWidget);\n }\n else {\n return this.getPreviousParagraphSelection(block.previousRenderedWidget.childWidgets[block.previousRenderedWidget.childWidgets.length - 1]);\n }\n }\n if (block.containerWidget instanceof TableCellWidget) {\n return this.getPreviousSelectionCell(block.containerWidget);\n }\n else if (block.containerWidget instanceof BodyWidget) {\n return this.getPreviousSelection(block.containerWidget);\n }\n return undefined;\n };\n /**\n * Get previous paragraph in selection\n *\n * @private\n */\n Selection.prototype.getPreviousSelection = function (section) {\n if (section.previousRenderedWidget instanceof BodyWidget) {\n var prevBodyWidget = section.previousRenderedWidget;\n var block = prevBodyWidget.childWidgets[prevBodyWidget.childWidgets.length - 1];\n if (block instanceof ParagraphWidget) {\n return block;\n }\n else {\n if (!this.isForward) {\n return this.documentHelper.getFirstParagraphInLastRow(block);\n }\n else {\n var tableWidget = block;\n return this.getPreviousParagraphSelection(tableWidget.childWidgets[tableWidget.childWidgets.length - 1]);\n }\n }\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousParagraphSelection = function (row) {\n //Iterate the exact cell based on UP/Down selection length.\n var cell = row.childWidgets[row.childWidgets.length - 1];\n if (this.start.paragraph.isInsideTable\n && row.ownerTable.contains(this.start.paragraph.associatedCell)) {\n var startCell = this.getCellInTable(row.ownerTable, this.start.paragraph.associatedCell);\n cell = this.getLastCellInRegion(row, startCell, this.upDownSelectionLength, true);\n }\n var block = cell.childWidgets[cell.childWidgets.length - 1];\n return this.documentHelper.getLastParagraphBlock(block);\n };\n /**\n * Get last cell in the selected region\n *\n * @private\n */\n Selection.prototype.getLastCellInRegion = function (row, startCell, selLength, isMovePrev) {\n var start = this.getCellLeft(row, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var flag = true;\n if (start <= selLength && selLength < end) {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n else {\n for (var i = row.childWidgets.length - 1; i >= 0; i--) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (left <= selLength && left + row.childWidgets[i].cellFormat.cellWidth > selLength) {\n flag = false;\n return row.childWidgets[i];\n }\n }\n }\n if (flag) {\n if (!isNullOrUndefined(row.previousRenderedWidget) && isMovePrev) {\n return this.getLastCellInRegion(row.previousRenderedWidget, startCell, selLength, isMovePrev);\n }\n else if (!isNullOrUndefined(row.nextRenderedWidget) && !isMovePrev) {\n return this.getLastCellInRegion(row.nextRenderedWidget, startCell, selLength, isMovePrev);\n }\n }\n return row.childWidgets[row.childWidgets.length - 1];\n };\n /**\n * Get Container table\n *\n * @private\n */\n Selection.prototype.getCellInTable = function (table, tableCell) {\n while (tableCell.ownerTable.isInsideTable) {\n if (table.equals(tableCell.ownerTable)) {\n return tableCell;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return tableCell;\n };\n /**\n * Get previous valid offset\n *\n * @private\n */\n Selection.prototype.getPreviousValidOffset = function (paragraph, offset) {\n if (offset === 0) {\n return 0;\n }\n var validOffset = 0;\n var count = 0;\n var value = 0;\n var bidi = paragraph.paragraphFormat.bidi;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (inline.length === 0 || inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset <= count + inline.length) {\n return offset - 1 === count ? validOffset : offset - 1;\n }\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox || inline instanceof BookmarkElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n validOffset = count + inline.length;\n }\n count += inline.length;\n }\n }\n return offset - 1 === count ? validOffset : offset - 1;\n };\n /**\n * Get next valid offset\n *\n * @private\n */\n Selection.prototype.getNextValidOffset = function (line, offset) {\n var count = 0;\n // if (!line.paragraph.paragraphFormat.bidi) {\n for (var i = 0; i < line.children.length; i++) {\n var inline = line.children[i];\n if (inline.length === 0 || inline instanceof ListTextElementBox) {\n continue;\n }\n if (offset < count + inline.length) {\n if (inline instanceof TextElementBox || inline instanceof ImageElementBox\n || (inline instanceof FieldElementBox && HelperMethods.isLinkedFieldCharacter(inline))) {\n return (offset > count ? offset : count) + 1;\n }\n }\n if (offset === count + inline.length && inline instanceof FieldElementBox &&\n inline.fieldType === 1 && inline.previousNode instanceof ImageElementBox) {\n return offset;\n }\n count += inline.length;\n }\n // } else {\n // if (offset !== this.getLineLength(line)) {\n // offset = line.getInlineForOffset(offset, false, undefined, false, false, true).index;\n // }\n // }\n return offset;\n };\n /**\n * Get paragraph mark size info\n *\n * @private\n */\n Selection.prototype.getParagraphMarkSize = function (paragraph, topMargin, bottomMargin) {\n var size = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat);\n var baselineOffset = size.BaselineOffset;\n var maxHeight = size.Height;\n var maxBaselineOffset = baselineOffset;\n if (paragraph instanceof ParagraphWidget) {\n // let paragraphWidget: ParagraphWidget[] = paragraph.renderedElement() as ParagraphWidget[];\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n }\n //Gets line spacing.\n var lineSpacing = this.documentHelper.layout.getLineSpacing(paragraph, maxHeight);\n var beforeSpacing = this.documentHelper.layout.getBeforeSpacing(paragraph);\n topMargin = maxBaselineOffset - baselineOffset;\n bottomMargin = maxHeight - maxBaselineOffset - (size.Height - baselineOffset);\n //Updates line spacing, paragraph after/ before spacing and aligns the text to base line offset.\n var lineSpacingType = paragraph.paragraphFormat.lineSpacingType;\n if (lineSpacingType === 'Multiple') {\n if (lineSpacing > maxHeight) {\n bottomMargin += lineSpacing - maxHeight;\n }\n else {\n topMargin += lineSpacing - maxHeight;\n }\n }\n else if (lineSpacingType === 'Exactly') {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n else if (lineSpacing > topMargin + size.Height + bottomMargin) {\n topMargin += lineSpacing - (topMargin + size.Height + bottomMargin);\n }\n topMargin += beforeSpacing;\n bottomMargin += this.documentHelper.layout.getAfterSpacing(paragraph);\n }\n return { 'width': size.Width, 'height': size.Height, 'topMargin': topMargin, 'bottomMargin': bottomMargin };\n };\n /**\n * @private\n */\n Selection.prototype.getPhysicalPositionInternal = function (line, offset, moveNextLine) {\n if (line.paragraph.isEmpty()) {\n var paragraphWidget = line.paragraph;\n var left = paragraphWidget.x;\n if (paragraphWidget.childWidgets.length > 0) {\n var lineWidget = paragraphWidget.childWidgets[0];\n left = this.getLeft(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(line.paragraph, topMargin, bottomMargin);\n if (offset > 0 || (offset === 0 && paragraphWidget.isEmpty() && paragraphWidget.bidi)) {\n left += size.width;\n }\n return new Point(left, paragraphWidget.y + size.topMargin);\n }\n else {\n var indexInInline = 0;\n var inlineObj = line.getInline(offset, indexInInline, line.paragraph.bidi);\n var inline = inlineObj.element; //return indexInInline must\n indexInInline = inlineObj.index;\n // if (inline.length === indexInInline && !isNullOrUndefined(inline.nextNode) && this.viewer.renderedElements.containsKey(inline) &&\n // this.viewer.renderedElements.get(inline).length > 0 && this.viewer.renderedElements.containsKey(inline.nextNode as WInline)\n // && this.viewer.renderedElements.get(inline.nextNode as WInline).length > 0 &&\n // (this.viewer.renderedElements.get(inline)[this.viewer.renderedElements.get(inline).length - 1] as ElementBox).line !== (this.viewer.renderedElements.get(inline.nextNode as WInline)[0] as ElementBox).line) {\n // //Handled specifically to move the cursor at start of next line.\n // inline = inline.nextNode as WInline;\n // indexInInline = 0;\n // }\n return this.getPhysicalPositionInline(inline, indexInInline, moveNextLine);\n }\n };\n /**\n * Highlight selected content\n *\n * @private\n */\n Selection.prototype.highlightSelectedContent = function (start, end) {\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || (!start.paragraph.associatedCell.equals(end.paragraph.associatedCell))\n || (!this.documentHelper.isSelectionChangedOnMouseMoved && this.isCellSelected(start.paragraph.associatedCell, start, end))\n || this.isCellPrevSelected)) {\n this.highlightCell(start.paragraph.associatedCell, this, start, end);\n this.isCellPrevSelected = true;\n }\n else {\n var inline = undefined;\n var index = 0;\n if (!this.owner.isReadOnlyMode && start.paragraph === end.paragraph) {\n if (start.offset + 1 === end.offset) {\n var inlineObj = end.currentWidget.getInline(end.offset, index);\n inline = inlineObj.element; // return index value\n index = inlineObj.index;\n if (inline instanceof ImageElementBox || inline instanceof ShapeElementBox) {\n var startOffset = start.currentWidget.getOffset(inline, 0);\n if (startOffset !== start.offset) {\n inline = undefined;\n }\n }\n }\n else {\n var indexInInline = 0;\n var startInlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var startInline = startInlineObj.element; //return indexInInline\n indexInInline = startInlineObj.index;\n if (indexInInline === startInline.length) {\n startInline = this.getNextRenderedElementBox(startInline, indexInInline);\n }\n var endInlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n var endInline = endInlineObj.element; //return indexInInline\n indexInInline = endInlineObj.index;\n if (startInline instanceof FieldElementBox && endInline instanceof FieldElementBox && !isNullOrUndefined(startInline.fieldSeparator)) {\n var fieldValue = startInline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n inline = fieldValue;\n }\n }\n }\n }\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded && (inline instanceof ImageElementBox || inline instanceof ShapeElementBox)) {\n var elementBoxObj = this.getElementBoxInternal(inline, index);\n var elementBox = elementBoxObj.element; //return index\n index = elementBoxObj.index;\n if (this.owner.enableImageResizerMode && !this.owner.editorModule.isRemoteAction) {\n this.owner.imageResizerModule.positionImageResizer(elementBox);\n this.owner.imageResizerModule.showImageResizer();\n }\n if (this.documentHelper.isTouchInput) {\n this.documentHelper.touchStart.style.display = 'none';\n this.documentHelper.touchEnd.style.display = 'none';\n }\n }\n else {\n if (start.paragraph.isInsideTable\n && start.paragraph.associatedCell.equals(end.paragraph.associatedCell)\n && end.paragraph.equals(this.getLastParagraph(end.paragraph.associatedCell))\n && (this.getParagraphLength(end.paragraph) + 1) == end.offset) {\n end.offset--;\n }\n this.highlight(start.paragraph, start, end);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, start, end);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n if (this.isInShape) {\n this.showResizerForShape();\n }\n }\n };\n Selection.prototype.showResizerForShape = function () {\n var shape = this.getCurrentTextFrame().containerShape;\n this.owner.imageResizerModule.positionImageResizer(shape);\n this.owner.imageResizerModule.showImageResizer();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlight = function (paragraph, start, end, contentControl) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = undefined;\n var endElement = undefined;\n var startLineWidget = undefined;\n var endLineWidget = undefined;\n //return start Element and selection start index\n var startLineObj = this.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n startElement = startLineObj.element;\n if (isNullOrUndefined(startElement)) {\n startLineWidget = paragraph.childWidgets[0];\n }\n else {\n startLineWidget = startElement.line;\n }\n selectionStartIndex = startLineObj.index;\n var endLineObj = this.getEndLineWidget(end, endElement, selectionEndIndex);\n endElement = endLineObj.element;\n if (endElement) {\n endLineWidget = endElement.line;\n }\n else {\n endLineWidget = end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n }\n selectionEndIndex = endLineObj.index;\n var top = 0;\n var left = 0;\n if (!isNullOrUndefined(startLineWidget)) {\n top = this.getTop(startLineWidget);\n left = this.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n }\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //Selection ends in current line.\n var right = this.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n var width = 0;\n var isRtlText = false;\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n if (!isRtlText && startElement instanceof TextElementBox) {\n isRtlText = startElement.isRightToLeft;\n }\n width = Math.abs(right - left);\n // Handled the highlighting approach as genric for normal and rtl text.\n if (isRtlText || paragraph.bidi) {\n var elementBoxCollection = this.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementBoxCollection && elementBoxCollection.length > 1) {\n for (var i = 0; i < elementBoxCollection.length; i++) {\n var element = elementBoxCollection[i];\n var elementIsRTL = false;\n var index = element instanceof TextElementBox ? element.length : 1;\n if (element === startElement) {\n left = this.getLeftInternal(startLineWidget, element, selectionStartIndex);\n right = this.getLeftInternal(startLineWidget, element, index);\n }\n else if (element === endElement) {\n left = this.getLeftInternal(startLineWidget, element, 0);\n right = this.getLeftInternal(startLineWidget, element, selectionEndIndex);\n }\n else {\n left = this.getLeftInternal(startLineWidget, element, 0);\n right = this.getLeftInternal(startLineWidget, element, index);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n // Handled the paragraph mark highliting as special case.\n if (element === endElement && element instanceof TextElementBox\n && selectionEndIndex > element.length) {\n var charFormat = element.line.paragraph.characterFormat;\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(charFormat).Width;\n if (paragraph.bidi && !elementIsRTL) {\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(startLineWidget, width, left, top, true, contentControl);\n // Highlight the paragraph mark of Bidi paragrph. \n left = this.getLineStartLeft(startLineWidget) - paragraphMarkWidth;\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, left, top, true, contentControl);\n // continue to next element.\n continue;\n }\n }\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top, true, contentControl);\n }\n }\n else { // Need to handle the Paragraph mark highlighting.\n if (endElement instanceof TextElementBox && selectionEndIndex > endElement.length) {\n var charFormat = endElement.line.paragraph.characterFormat;\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(charFormat).Width;\n // Since isRTLText is truo, so the right is considered as left\n if (!paragraph.bidi && isRtlText) {\n right += paragraphMarkWidth;\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(startLineWidget, width, right, top, true, contentControl);\n // Highlight the paragraph mark. \n right += endElement.width;\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, right, top, true, contentControl);\n }\n else if (paragraph.bidi && !isRtlText) {\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(startLineWidget, width, left, top, true, contentControl);\n // Highlight the paragraph mark of Bidi paragrph. \n left = this.getLineStartLeft(startLineWidget) - paragraphMarkWidth;\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, left, top, true, contentControl);\n }\n else {\n this.createHighlightBorder(startLineWidget, width, isRtlText ? right : left, top, false, contentControl);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, isRtlText ? right : left, top, false, contentControl);\n }\n }\n }\n else {\n // Start element and end element will be in reverese for Bidi paragraph highlighting. \n // So, the right is considered based on Bidi property.\n this.createHighlightBorder(startLineWidget, width, paragraph.bidi ? right : left, top, false, contentControl);\n }\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n var x = startLineWidget.paragraph.x;\n if (paragraph !== startLineWidget.paragraph) {\n paragraph = startLineWidget.paragraph;\n }\n var width = this.getWidth(startLineWidget, true) - (left - startLineWidget.paragraph.x);\n // Handled the highlighting approach as genric for normal and rtl text.\n if (paragraph.bidi || (startElement instanceof TextElementBox && startElement.isRightToLeft)) {\n var right = 0;\n var elementCollection = this.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementCollection) {\n var elementIsRTL = false;\n for (var i = 0; i < elementCollection.length; i++) {\n var element = elementCollection[i];\n elementIsRTL = false;\n if (element === startElement) {\n left = this.getLeftInternal(startLineWidget, element, selectionStartIndex);\n }\n else {\n left = this.getLeftInternal(startLineWidget, element, 0);\n }\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.getLeftInternal(startLineWidget, element, index);\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top, true, contentControl);\n }\n // Highlight the Paragrph mark for last line.\n if (startLineWidget.isLastLine()) {\n var charFormat = elementCollection[elementCollection.length - 1].line.paragraph.characterFormat;\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(charFormat).Width;\n if (paragraph.bidi) {\n // The paragraph mark will be at the left most end.\n left = this.getLineStartLeft(startLineWidget) - paragraphMarkWidth;\n }\n else { // The paragraph mark will at right most end.\n left = elementIsRTL ? startLineWidget.paragraph.x + this.getWidth(startLineWidget, false) : right;\n }\n this.createHighlightBorder(startLineWidget, paragraphMarkWidth, left, top, true, contentControl);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, left, top, false, contentControl);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, left, top, false, contentControl);\n }\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or selection end. \n this.highlightParagraph(paragraph, lineIndex + 1, endLineWidget, endElement, selectionEndIndex, contentControl);\n if (paragraph.childWidgets.indexOf(end.currentWidget) !== -1) {\n return;\n }\n }\n if (this.isHideSelection(paragraph)) {\n this.isHighlightNext = false;\n return;\n }\n this.isHighlightNext = true;\n this.hightLightNextParagraph = paragraph;\n }\n };\n Selection.prototype.highlightNextBlock = function (paragraph, start, end) {\n var block = paragraph.nextRenderedWidget;\n if (!isNullOrUndefined(block)) {\n if (block instanceof ParagraphWidget) {\n this.isHighlightNext = false;\n this.highlight(block, start, end);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, start, end);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n else {\n this.highlightTable(block, start, end);\n }\n }\n };\n /**\n * Get start line widget\n * @private\n * @returns {ElementInfo}\n */\n Selection.prototype.getStartLineWidget = function (paragraph, start, startElement, selectionStartIndex) {\n var offset = paragraph === start.paragraph ? start.offset : this.getStartOffset(paragraph);\n var startInlineObj = undefined;\n if (paragraph === start.paragraph) {\n startInlineObj = start.currentWidget.getInline(offset, selectionStartIndex);\n }\n else {\n startInlineObj = paragraph.firstChild.getInline(offset, selectionStartIndex);\n }\n startElement = startInlineObj.element; //return selectionStartIndex\n selectionStartIndex = startInlineObj.index;\n if (startElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(startElement, selectionStartIndex);\n startElement = inlineInfo.element;\n selectionStartIndex = inlineInfo.index;\n }\n if (offset === this.getParagraphLength(start.paragraph) + 1) {\n selectionStartIndex++;\n }\n return {\n 'index': selectionStartIndex, 'element': startElement\n };\n };\n /**\n * Get end line widget\n * @private\n */\n Selection.prototype.getEndLineWidget = function (end, endElement, selectionEndIndex) {\n var endInlineObj = end.currentWidget.getInline(end.offset, selectionEndIndex);\n endElement = endInlineObj.element; //return selection end index\n selectionEndIndex = endInlineObj.index;\n if (endElement instanceof FieldElementBox) {\n var inlineInfo = this.getRenderedInline(endElement, selectionEndIndex);\n endElement = inlineInfo.element;\n selectionEndIndex = inlineInfo.index;\n }\n var lineIndex = end.paragraph.childWidgets.indexOf(end.currentWidget);\n if (lineIndex === end.paragraph.childWidgets.length - 1 && end.offset === this.getLineLength(end.currentWidget) + 1) {\n selectionEndIndex = endElement ? endElement.length + 1 : 1;\n }\n return { 'index': selectionEndIndex, 'element': endElement };\n };\n /**\n * Get line widget\n * @private\n */\n Selection.prototype.getLineWidgetInternal = function (line, offset, moveToNextLine) {\n var lineWidget = undefined;\n if (line.children.length === 0 && line instanceof LineWidget) {\n lineWidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n lineWidget = inline instanceof ElementBox ? inline.line\n : this.getLineWidgetInternalInline(inline, indexInInline, moveToNextLine);\n }\n return lineWidget;\n };\n /**\n * Get last line widget\n * @private\n */\n Selection.prototype.getLineWidgetParagraph = function (offset, line) {\n var linewidget = undefined;\n if (line.children.length === 0) {\n linewidget = line;\n }\n else {\n var indexInInline = 0;\n var inlineInfo = line.getInline(offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n linewidget = this.getLineWidget(inline, indexInInline);\n }\n return linewidget;\n };\n /**\n * Highlight selected cell\n * @private\n */\n Selection.prototype.highlightCells = function (table, startCell, endCell) {\n var start = this.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > this.upDownSelectionLength) {\n start = this.upDownSelectionLength;\n }\n if (end < this.upDownSelectionLength) {\n end = this.upDownSelectionLength;\n }\n var tableWidgetCollection = table.getSplitWidgets();\n var startTableIndex = tableWidgetCollection.indexOf(startCell.ownerRow.ownerTable);\n var endTableIndex = tableWidgetCollection.indexOf(endCell.ownerRow.ownerTable);\n if (startTableIndex === endTableIndex) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n this.highlightRow(table.childWidgets[i], start, end);\n }\n }\n else {\n var startRowIndex = 0;\n var endRowIndex = 0;\n for (var i = startTableIndex; i <= endTableIndex; i++) {\n table = tableWidgetCollection[i];\n if (i === startTableIndex) {\n startRowIndex = table.childWidgets.indexOf(startCell.ownerRow);\n }\n else {\n startRowIndex = 0;\n }\n if (i === endTableIndex) {\n endRowIndex = table.childWidgets.indexOf(endCell.ownerRow);\n }\n else {\n endRowIndex = table.childWidgets.length - 1;\n }\n for (var j = startRowIndex; j <= endRowIndex; j++) {\n this.highlightRow(table.childWidgets[j], start, end);\n }\n }\n }\n };\n /**\n * highlight selected table\n *\n * @private\n */\n Selection.prototype.highlightTable = function (table, start, end) {\n this.highlightInternal(table.childWidgets[0], start, end);\n if (!end.paragraph.isInsideTable //Selection end is outside the table cell.\n || !table.contains(end.paragraph.associatedCell)) { //Selection end is not inside the current table.\n this.highlightNextBlock(table, start, end);\n }\n };\n /**\n * Get cell left\n *\n * @private\n */\n Selection.prototype.getCellLeft = function (row, cell) {\n var left = 0;\n left += cell.x - cell.margin.left;\n return left;\n };\n /**\n * Get next paragraph for row\n *\n * @private\n */\n Selection.prototype.getNextParagraphRow = function (row) {\n if (!isNullOrUndefined(row.nextRenderedWidget)) {\n var cell = row.nextRenderedWidget.childWidgets[0];\n var block = cell.childWidgets[0];\n return this.documentHelper.getFirstParagraphBlock(block);\n }\n return this.getNextParagraphBlock(row.ownerTable);\n };\n /**\n * Get previous paragraph from row\n *\n * @private\n */\n Selection.prototype.getPreviousParagraphRow = function (row) {\n if (!isNullOrUndefined(row.previousRenderedWidget)) {\n var cell = row.previousRenderedWidget.lastChild;\n var block = cell.lastChild ? cell.lastChild : (cell.previousSplitWidget).lastChild;\n return this.documentHelper.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphBlock(row.ownerTable);\n };\n /**\n * Return true if row contain cell\n *\n * @private\n */\n Selection.prototype.containsRow = function (row, tableCell) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n while (tableCell.ownerTable.isInsideTable) {\n if (row.childWidgets.indexOf(tableCell) !== -1) {\n return true;\n }\n tableCell = tableCell.ownerTable.associatedCell;\n }\n return row.childWidgets.indexOf(tableCell) !== -1;\n };\n /**\n * Highlight selected row\n *\n * @private\n */\n Selection.prototype.highlightRow = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n var left = this.getCellLeft(row, row.childWidgets[i]);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(end, 2)) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlightInternal = function (row, start, end) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n this.highlightCellWidget(row.childWidgets[i]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n else if (row.nextRenderedWidget instanceof TableRowWidget) {\n this.highlightInternal(row.nextRenderedWidget, start, end);\n }\n };\n /**\n * Get last paragraph in cell\n *\n * @private\n */\n Selection.prototype.getLastParagraph = function (cell) {\n while (cell.nextSplitWidget) {\n if (cell.nextSplitWidget.childWidgets.length > 0) {\n cell = cell.nextSplitWidget;\n }\n else {\n break;\n }\n }\n var lastBlock;\n if (cell.childWidgets.length > 0) {\n lastBlock = cell.lastChild;\n }\n else {\n lastBlock = cell.previousSplitWidget.lastChild;\n }\n return this.documentHelper.getLastParagraphBlock(lastBlock);\n };\n /**\n * Return true is source cell contain cell\n *\n * @private\n */\n Selection.prototype.containsCell = function (sourceCell, cell) {\n if (sourceCell.equals(cell)) {\n return true;\n }\n while (cell.ownerTable.isInsideTable) {\n if (sourceCell.equals(cell.ownerTable.associatedCell)) {\n return true;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return false;\n };\n /**\n * Return true if cell is selected\n *\n * @private\n */\n Selection.prototype.isCellSelected = function (cell, startPosition, endPosition) {\n var lastParagraph = this.getLastParagraph(cell);\n var isAtCellEnd = lastParagraph === endPosition.paragraph && endPosition.offset === this.getParagraphLength(lastParagraph) + 1;\n return isAtCellEnd || (!this.containsCell(cell, startPosition.paragraph.associatedCell) ||\n !this.containsCell(cell, endPosition.paragraph.associatedCell));\n };\n /**\n * Return Container cell\n *\n * @private\n */\n Selection.prototype.getContainerCellOf = function (cell, tableCell) {\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.contains(tableCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Get Selected cell\n *\n * @private\n */\n Selection.prototype.getSelectedCell = function (cell, containerCell) {\n if (cell.ownerTable.equals(containerCell.ownerTable)) {\n return cell;\n }\n while (cell.ownerTable.isInsideTable) {\n if (cell.ownerTable.associatedCell.equals(containerCell)) {\n return cell;\n }\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * @private\n */\n Selection.prototype.getSelectedCells = function () {\n var cells = [];\n for (var i = 0; i < this.selectedWidgets.keys.length; i++) {\n var widget = this.selectedWidgets.keys[i];\n if (widget instanceof TableCellWidget) {\n cells.push(widget);\n }\n }\n return cells;\n };\n /**\n * @private\n * @return\n */\n Selection.prototype.getLevelFormatNumber = function () {\n var numberFormat = '%';\n numberFormat = numberFormat + (((this.paragraphFormat.listLevelNumber <= 0) ? 0 : this.paragraphFormat.listLevelNumber) + 1) + '.';\n return numberFormat;\n };\n /**\n * Get Next paragraph from cell\n *\n * @private\n */\n Selection.prototype.getNextParagraphCell = function (cell) {\n if (cell.nextRenderedWidget && cell.nextRenderedWidget instanceof TableCellWidget) {\n //Return first paragraph in cell.\n cell = cell.nextRenderedWidget;\n if (cell.getSplitWidgets()[0] instanceof TableCellWidget) {\n cell = cell.getSplitWidgets()[0];\n }\n var block = cell.firstChild;\n if (block) {\n return this.documentHelper.getFirstParagraphBlock(block);\n }\n else {\n return this.getNextParagraphCell(cell);\n }\n }\n else if (cell.nextSplitWidget && cell.nextSplitWidget.childWidgets.length === 0) {\n cell = cell.getSplitWidgets().pop();\n }\n return this.getNextParagraphRow(cell.containerWidget);\n };\n /**\n * Get previous paragraph from cell\n *\n * @private\n */\n Selection.prototype.getPreviousParagraphCell = function (cell) {\n if (!isNullOrUndefined(cell.previousRenderedWidget) && cell.previousRenderedWidget instanceof TableCellWidget) {\n cell = cell.previousRenderedWidget;\n var block = cell.lastChild;\n return this.documentHelper.getLastParagraphBlock(block);\n }\n return this.getPreviousParagraphRow(cell.ownerRow);\n };\n /**\n * Get cell's container cell\n *\n * @private\n */\n Selection.prototype.getContainerCell = function (cell) {\n while (!isNullOrUndefined(cell.ownerTable) && cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n /**\n * Highlight selected cell\n *\n * @private\n */\n Selection.prototype.highlightCell = function (cell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.highlightCellWidget(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.highlight(start.paragraph, start, end);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, start, end);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n else {\n this.highlightContainer(startCell, start, end);\n }\n }\n }\n else {\n //Selection end is not in container cell.\n this.highlightCellWidget(containerCell);\n if (containerCell.ownerRow.equals(endCell.ownerRow)) {\n //Highlight other selected cells in current row.\n startCell = containerCell;\n while (!isNullOrUndefined(startCell.nextRenderedWidget)) {\n startCell = startCell.nextRenderedWidget;\n this.highlightCellWidget(startCell);\n if (startCell === endCell) {\n break;\n }\n }\n }\n else {\n this.highlightCells(containerCell.ownerTable, containerCell, endCell);\n }\n }\n }\n else {\n this.highlightContainer(containerCell, start, end);\n }\n }\n else {\n var cell1 = this.getContainerCell(cell);\n this.highlightContainer(cell1, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.highlightContainer = function (cell, start, end) {\n this.highlightInternal(cell.containerWidget, start, end);\n this.highlightNextBlock(cell.ownerTable.getSplitWidgets().pop(), start, end);\n };\n /**\n * Get previous valid element\n *\n * @private\n */\n Selection.prototype.getPreviousValidElement = function (inline) {\n var previousValidInline = undefined;\n if (this.documentHelper.isFormFillProtectedMode && inline.fieldType === 2) {\n return inline;\n }\n while (inline instanceof FieldElementBox) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n previousValidInline = inline;\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n previousValidInline = inline;\n if (isNullOrUndefined(inline.fieldSeparator)) {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n else {\n inline = inline.fieldBegin;\n previousValidInline = inline;\n }\n }\n inline = inline.previousNode;\n }\n return isNullOrUndefined(previousValidInline) ? inline : previousValidInline;\n };\n /**\n * Get next valid element\n *\n * @private\n */\n Selection.prototype.getNextValidElement = function (inline) {\n var nextValidInline = undefined;\n if (inline instanceof BookmarkElementBox && inline.bookmarkType === 1) {\n return inline;\n }\n while (inline instanceof FieldElementBox) {\n if (inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n return isNullOrUndefined(nextValidInline) ? inline : nextValidInline;\n }\n else if (inline.fieldType === 1 && !isNullOrUndefined(inline.fieldBegin)) {\n nextValidInline = inline;\n }\n inline = inline.nextNode;\n }\n return (isNullOrUndefined(nextValidInline) ? inline : nextValidInline);\n };\n /**\n * Return next valid inline with index\n *\n * @private\n */\n Selection.prototype.validateTextPosition = function (inline, index) {\n var nextNode = inline.nextNode;\n if (inline.length === index && (nextNode instanceof FieldElementBox\n || (!(inline instanceof ImageElementBox) && (nextNode instanceof BookmarkElementBox || nextNode instanceof CommentCharacterElementBox)))) {\n //If inline is last item within field, then set field end as text position.\n var nextInline = this.getNextValidElement(inline.nextNode);\n if ((nextInline instanceof FieldElementBox && nextInline.fieldType === 1)\n || (nextInline instanceof BookmarkElementBox && nextInline.bookmarkType === 1)\n || (nextInline instanceof CommentCharacterElementBox && nextInline.commentType === 1)) {\n inline = nextInline;\n index = this.documentHelper.isFormFillProtectedMode ? 0 : 1;\n }\n }\n else if (index === 0 && inline.previousNode instanceof FieldElementBox) {\n var prevInline = this.getPreviousValidElement(inline.previousNode);\n inline = prevInline;\n index = inline instanceof FieldElementBox ? 0 : inline.length;\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n index++;\n }\n }\n return { 'element': inline, 'index': index };\n };\n /**\n * Get inline physical location\n *\n * @private\n */\n Selection.prototype.getPhysicalPositionInline = function (inline, index, moveNextLine) {\n var element = undefined;\n element = this.getElementBox(inline, index, moveNextLine).element;\n var lineWidget = undefined;\n if (isNullOrUndefined(element) || isNullOrUndefined(element.line)) {\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n element = inline;\n }\n else {\n if (inline instanceof FieldElementBox || inline instanceof BookmarkElementBox || inline instanceof CommentCharacterElementBox) {\n return this.getFieldCharacterPosition(inline);\n }\n return new Point(0, 0);\n }\n }\n var margin = element.margin;\n var top = 0;\n var left = 0;\n if (element instanceof TextElementBox && element.text === '\\v' && isNullOrUndefined(inline.nextNode) && !this.owner.editorModule.handledEnter) {\n lineWidget = this.getNextLineWidget(element.line.paragraph, element);\n index = 0;\n }\n else {\n lineWidget = element.line;\n }\n top = this.getTop(lineWidget);\n if (element instanceof ImageElementBox && element.textWrappingStyle === 'Inline') {\n var format = element.line.paragraph.characterFormat;\n var previousInline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(previousInline)) {\n format = previousInline.characterFormat;\n }\n else {\n var nextInline = this.getNextTextElement(inline);\n if (!isNullOrUndefined(nextInline)) {\n format = nextInline.characterFormat;\n }\n }\n var measureObj = this.documentHelper.textHelper.getHeight(format);\n if (element.margin.top + element.height - measureObj.BaselineOffset > 0) {\n top += element.margin.top + element.height - measureObj.BaselineOffset;\n }\n }\n else if (!(element instanceof FieldElementBox)) {\n top += margin.top > 0 ? margin.top : 0;\n }\n left = (isNullOrUndefined(element) || isNullOrUndefined(lineWidget)) ? 0 : this.getLeftInternal(lineWidget, element, index);\n return new Point(left, top);\n };\n /**\n * Get field character position\n *\n * @private\n */\n Selection.prototype.getFieldCharacterPosition = function (firstInline) {\n var nextValidInline = this.getNextValidElementForField(firstInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = firstInline.line.paragraph;\n return this.getEndPosition(nextParagraph);\n }\n else {\n return this.getPhysicalPositionInline(nextValidInline, 0, true);\n }\n };\n /**\n * @private\n */\n Selection.prototype.isRenderBookmarkAtEnd = function (bookmark) {\n var bookmarkElement;\n if (bookmark.bookmarkType == 1) {\n bookmarkElement = bookmark.reference;\n }\n else {\n bookmarkElement = bookmark;\n }\n if (bookmarkElement && isNullOrUndefined(bookmarkElement.properties)) {\n var endCell = bookmarkElement.reference ? bookmarkElement.reference.paragraph.associatedCell : undefined;\n if (isNullOrUndefined(endCell)) {\n return false;\n }\n var lastRow = bookmarkElement.reference ? bookmarkElement.reference.paragraph.associatedCell.ownerRow : undefined;\n var lastCell = lastRow ? lastRow.childWidgets[lastRow.childWidgets.length - 1] : undefined;\n if (isNullOrUndefined(lastCell)) {\n return false;\n }\n if (endCell == lastCell && !(bookmark.bookmarkType === 1 && !isNullOrUndefined(bookmark.line) && bookmark.line.children.indexOf(bookmark) !== bookmark.line.children.length - 1)) {\n return true;\n }\n else {\n return false;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getNextValidElementForField = function (firstInline) {\n if (firstInline instanceof FieldElementBox && firstInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(firstInline)) {\n var fieldBegin = firstInline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n firstInline = fieldBegin.fieldEnd;\n }\n else {\n firstInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(firstInline.nextNode)) {\n nextValidInline = this.getNextValidElement(firstInline.nextNode);\n }\n return nextValidInline;\n };\n /**\n * Get paragraph end position\n *\n * @private\n */\n Selection.prototype.getEndPosition = function (widget) {\n var left = widget.x;\n var top = widget.y;\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n left += this.getWidth(lineWidget, false);\n }\n if (!isNullOrUndefined(lineWidget)) {\n top = this.getTop(lineWidget);\n }\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget, topMargin, bottomMargin);\n return new Point(left, top + size.topMargin);\n };\n /**\n * Get element box\n *\n * @private\n */\n Selection.prototype.getElementBox = function (currentInline, index, moveToNextLine) {\n var elementBox = undefined;\n if (!(currentInline instanceof FieldElementBox || currentInline instanceof BookmarkElementBox || currentInline instanceof CommentCharacterElementBox)) {\n elementBox = currentInline;\n }\n return { 'element': elementBox, 'index': index };\n };\n /**\n * @private\n */\n Selection.prototype.getPreviousTextElement = function (inline) {\n if (inline.previousNode instanceof TextElementBox) {\n return inline.previousNode;\n }\n if (!isNullOrUndefined(inline.previousNode)) {\n return this.getPreviousTextElement(inline.previousNode);\n }\n return undefined;\n };\n /**\n * Get next text inline\n *\n * @private\n */\n Selection.prototype.getNextTextElement = function (inline) {\n if (inline.nextNode instanceof TextElementBox) {\n return inline.nextNode;\n }\n if (!isNullOrUndefined(inline.nextNode)) {\n return this.getNextTextElement(inline.nextNode);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getNextRenderedElementBox = function (inline, indexInInline) {\n if (inline instanceof FieldElementBox) {\n var fieldBegin = inline;\n if (fieldBegin.fieldType === 0) {\n inline = this.getRenderedField(fieldBegin);\n if (fieldBegin === inline) {\n return fieldBegin;\n }\n }\n indexInInline = 1;\n }\n while (!isNullOrUndefined(inline) && indexInInline === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement((inline.nextNode));\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n var fieldBegin = nextValidInline;\n inline = this.getRenderedField(fieldBegin);\n if (!isNullOrUndefined(inline) && fieldBegin === inline) {\n return fieldBegin;\n }\n indexInInline = 1;\n }\n else {\n inline = nextValidInline;\n }\n }\n return inline;\n };\n /**\n * @private\n */\n Selection.prototype.getElementBoxInternal = function (inline, index) {\n var element = undefined;\n element = inline;\n return {\n 'element': element, 'index': index\n };\n };\n /**\n * Get Line widget\n *\n * @private\n */\n Selection.prototype.getLineWidget = function (inline, index) {\n return this.getLineWidgetInternalInline(inline, index, true);\n };\n /**\n * @private\n */\n Selection.prototype.getLineWidgetInternalInline = function (inline, index, moveToNextLine) {\n var elementObj = this.getElementBox(inline, index, moveToNextLine);\n var element = elementObj.element; //return index\n index = elementObj.index;\n if (!isNullOrUndefined(element)) {\n if (moveToNextLine && element instanceof TextElementBox && element.text === '\\v' && index === 1) {\n return this.getNextLineWidget(element.line.paragraph, element);\n }\n else {\n return element.line;\n }\n }\n var startInline = inline;\n //ToDo: Check previous inline here.\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var lineWidget = undefined;\n var widget = startInline.line.paragraph;\n if (widget.childWidgets.length > 0) {\n lineWidget = widget.childWidgets[widget.childWidgets.length - 1];\n }\n return lineWidget;\n }\n else {\n return this.getLineWidget(nextValidInline, 0);\n }\n };\n /**\n * Get next line widget\n *\n * @private\n */\n Selection.prototype.getNextLineWidget = function (paragraph, element) {\n var lineWidget = undefined;\n var widget = paragraph;\n if (widget.childWidgets.length > 0) {\n var widgetIndex = widget.childWidgets.indexOf(element.line);\n if (widgetIndex === widget.childWidgets.length - 1) {\n widget = paragraph;\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widgetIndex = -1;\n }\n else if (widgetIndex > widget.childWidgets.length - 1) {\n widget = this.getNextParagraphBlock(paragraph);\n widgetIndex = -1;\n }\n else if (widgetIndex < 0) {\n // widget = paragraph.leafWidgets[paragraph.leafWidgets.length - 1];\n widget = paragraph;\n widgetIndex = widget.childWidgets.indexOf(element.line);\n }\n lineWidget = widget.childWidgets[widgetIndex + 1];\n }\n return lineWidget;\n };\n Selection.prototype.getCaretHeight = function (inline, index, format, isEmptySelection, topMargin, isItalic) {\n var elementBoxInfo = this.getElementBox(inline, index, false);\n var element = elementBoxInfo.element;\n var currentInline = inline;\n if (isNullOrUndefined(element)) {\n if (currentInline instanceof FieldElementBox) {\n return this.getFieldCharacterHeight(currentInline, format, isEmptySelection, topMargin, isItalic);\n }\n return { 'height': this.documentHelper.textHelper.getHeight(format).Height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var margin = element.margin;\n var heightElement = element.height;\n var maxLineHeight = 0;\n if (element instanceof ImageElementBox) {\n var previousInline = this.getPreviousTextElement(inline);\n var nextInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n var top_2 = 0;\n var bottom = 0;\n var paragarph = inline.line.paragraph;\n var sizeInfo = this.getParagraphMarkSize(paragarph, top_2, bottom);\n top_2 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n maxLineHeight = sizeInfo.height;\n isItalic = paragarph.characterFormat.italic;\n if (!isEmptySelection) {\n maxLineHeight += this.documentHelper.layout.getAfterSpacing(paragarph);\n }\n }\n else if (isNullOrUndefined(previousInline)) {\n isItalic = nextInline.characterFormat.italic;\n return this.getCaretHeight(nextInline, 0, nextInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n else {\n if (!isNullOrUndefined(nextInline) && element instanceof ImageElementBox) {\n //Calculates the caret size using image character format.\n var textSizeInfo = this.documentHelper.textHelper.getHeight(element.characterFormat);\n var charHeight = textSizeInfo.Height;\n var baselineOffset = textSizeInfo.BaselineOffset;\n maxLineHeight = (element.margin.top < 0 && baselineOffset > element.margin.top + element.height) ? element.margin.top + element.height + charHeight - baselineOffset : charHeight;\n if (!isEmptySelection) {\n maxLineHeight += element.margin.bottom;\n }\n }\n else {\n isItalic = previousInline.characterFormat.italic;\n return this.getCaretHeight(previousInline, previousInline.length, previousInline.characterFormat, isEmptySelection, topMargin, isItalic);\n }\n }\n }\n else {\n var baselineAlignment = this.characterFormat.baselineAlignment;\n var elementHeight = heightElement;\n if (baselineAlignment !== 'Normal' && isEmptySelection) {\n //Set the caret height as sub/super script text height and updates the top margin for sub script text.\n elementHeight = elementHeight / 1.5;\n if (baselineAlignment === 'Subscript') {\n topMargin = heightElement - elementHeight;\n }\n }\n maxLineHeight = (margin.top < 0 ? margin.top : 0) + elementHeight;\n if (!isEmptySelection) {\n maxLineHeight += margin.bottom;\n }\n }\n if (!isEmptySelection) {\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n var height = this.documentHelper.textHelper.getHeight(format).Height;\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n };\n Selection.prototype.getFieldCharacterHeight = function (startInline, format, isEmptySelection, topMargin, isItalic) {\n var nextValidInline = this.getNextValidElementForField(startInline);\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n var nextParagraph = startInline.line.paragraph;\n var height = this.documentHelper.textHelper.getParagraphMarkSize(format).Height;\n var top_3 = 0;\n var bottom = 0;\n var sizeInfo = this.getParagraphMarkSize(nextParagraph, top_3, bottom);\n var maxLineHeight = sizeInfo.height;\n top_3 = sizeInfo.topMargin;\n bottom = sizeInfo.bottomMargin;\n if (!isEmptySelection) {\n maxLineHeight += bottom;\n return { 'height': maxLineHeight, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n if (height > maxLineHeight) {\n height = maxLineHeight;\n }\n return { 'height': height, 'topMargin': topMargin, 'isItalic': isItalic };\n }\n else {\n return this.getCaretHeight(nextValidInline, 0, format, isEmptySelection, topMargin, isItalic);\n }\n };\n /**\n * Get rendered inline\n *\n * @private\n */\n //FieldCharacter\n Selection.prototype.getRenderedInline = function (inline, inlineIndex) {\n if (this.documentHelper.isFormFillProtectedMode && inline.fieldType === 2) {\n return { 'element': inline, 'index': inlineIndex };\n }\n var prevInline = this.getPreviousValidElement(inline);\n while (prevInline instanceof FieldElementBox) {\n prevInline = this.getPreviousTextElement(prevInline);\n if (prevInline instanceof FieldElementBox) {\n prevInline = prevInline.previousNode;\n }\n }\n if (!isNullOrUndefined(prevInline)) {\n inlineIndex = prevInline.length;\n return { 'element': prevInline, 'index': inlineIndex };\n }\n inlineIndex = 0;\n var nextInline = this.getNextRenderedElementBox(inline, 0);\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0) {\n nextInline = nextInline.fieldSeparator;\n nextInline = nextInline.nextNode;\n while (nextInline instanceof FieldElementBox) {\n if (nextInline instanceof FieldElementBox && nextInline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(nextInline)) {\n if (isNullOrUndefined(nextInline.fieldSeparator)) {\n nextInline = nextInline.fieldEnd;\n }\n else {\n nextInline = nextInline.fieldSeparator;\n }\n }\n nextInline = nextInline.nextNode;\n }\n }\n return { 'element': nextInline, 'index': inlineIndex };\n };\n //Field Begin\n /**\n * Get rendered field\n *\n * @private\n */\n Selection.prototype.getRenderedField = function (fieldBegin) {\n var inline = fieldBegin;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n return inline;\n }\n }\n return inline;\n };\n /**\n * Return true is inline is tha last inline\n *\n * @private\n */\n Selection.prototype.isLastRenderedInline = function (inline, index) {\n while (index === inline.length && inline.nextNode instanceof FieldElementBox) {\n var nextValidInline = this.getNextValidElement(inline.nextNode);\n index = 0;\n if (nextValidInline instanceof FieldElementBox && nextValidInline.fieldType === 0) {\n inline = nextValidInline;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0 && !isNullOrUndefined(inline.fieldEnd)) {\n var fieldBegin = inline;\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n inline = fieldBegin.fieldEnd;\n index = 1;\n }\n else {\n inline = fieldBegin.fieldSeparator;\n var paragraph = inline.line.paragraph;\n index = 1;\n if (paragraph === fieldBegin.fieldEnd.line.paragraph\n && !this.hasValidInline(paragraph, inline, fieldBegin.fieldEnd)) {\n inline = fieldBegin.fieldEnd;\n }\n else {\n break;\n }\n }\n }\n }\n return index === inline.length && isNullOrUndefined(inline.nextNode);\n };\n /**\n * Get page\n *\n * @private\n */\n Selection.prototype.getPage = function (widget) {\n var page = undefined;\n if (widget.containerWidget instanceof TextFrame) {\n var shape = widget.containerWidget.containerShape;\n if (shape.line) {\n page = this.getPage(shape.line.paragraph);\n }\n }\n else if (widget.containerWidget instanceof BlockContainer) {\n var bodyWidget = widget.containerWidget;\n page = widget.containerWidget.page;\n }\n else if (!isNullOrUndefined(widget.containerWidget)) {\n page = this.getPage(widget.containerWidget);\n }\n return page;\n };\n /**\n * Clear Selection highlight\n *\n * @private\n */\n Selection.prototype.clearSelectionHighlightInSelectedWidgets = function () {\n var isNonEmptySelection = false;\n var widgets = this.selectedWidgets.keys;\n if (!this.viewer.documentHelper.isDragStarted) {\n for (var i = 0; i < widgets.length; i++) {\n this.removeSelectionHighlight(widgets[i]);\n isNonEmptySelection = true;\n }\n this.selectedWidgets.clear();\n }\n return isNonEmptySelection;\n };\n /**\n * Clear selection highlight\n *\n * @private\n */\n Selection.prototype.clearChildSelectionHighlight = function (widget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i] instanceof LineWidget) {\n this.clearSelectionHighlightLineWidget(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof TableCellWidget) {\n this.clearSelectionHighlight(widget.childWidgets[i]);\n }\n else if (widget.childWidgets[i] instanceof Widget) {\n this.clearChildSelectionHighlight(widget.childWidgets[i]);\n }\n }\n };\n /**\n * Get line widget from paragraph widget\n *\n * @private\n */\n //Body Widget \n Selection.prototype.getLineWidgetBodyWidget = function (widget, point, isGetFirstChild) {\n isGetFirstChild = isNullOrUndefined(isGetFirstChild) ? true : isGetFirstChild;\n var bodyWgt = widget;\n if (bodyWgt instanceof BlockContainer) {\n for (var x = 0; x < bodyWgt.floatingElements.length; x++) {\n var floatWidget = bodyWgt.floatingElements[x];\n if (floatWidget instanceof TableWidget) {\n var floatWidgetWidth = floatWidget.getTableCellWidth();\n if (point.x <= floatWidget.x + floatWidgetWidth && point.x >= floatWidget.x\n && point.y <= floatWidget.y + floatWidget.height && point.y >= floatWidget.y) {\n return this.getLineWidgetTableWidget(floatWidget, point);\n }\n }\n else if (floatWidget instanceof ShapeBase && floatWidget.x <= point.x && (floatWidget.x + floatWidget.width) >= point.x\n && floatWidget.y <= point.y && (floatWidget.y + floatWidget.height) >= point.y) {\n return floatWidget.line;\n }\n }\n }\n if (widget instanceof FootNoteWidget) {\n var selectionBody = void 0;\n var isFit = false;\n for (var j = 0; j < widget.bodyWidgets.length; j++) {\n if (widget.sectionFormat.columns.length <= 1) {\n for (var k = 0; k < widget.bodyWidgets[j].childWidgets.length; k++) {\n var footChild = widget.bodyWidgets[j].childWidgets[k];\n if (footChild instanceof Widget && footChild.y <= point.y\n && (footChild.y + footChild.height) >= point.y) {\n if (footChild instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(footChild, point);\n }\n else {\n return this.getLineWidgetTableWidget(footChild, point);\n }\n }\n }\n }\n else {\n var bodyWidget = widget.bodyWidgets[j];\n if (bodyWidget.firstChild.x + bodyWidget.sectionFormat.columns[bodyWidget.columnIndex].width >= point.x && bodyWidget.firstChild.x <= point.x && bodyWidget.firstChild.y <= point.y && this.documentHelper.layout.getNextWidgetHeight(bodyWidget) >= point.y) {\n selectionBody = bodyWidget;\n }\n else if (bodyWidget.firstChild.x + bodyWidget.sectionFormat.columns[bodyWidget.columnIndex].width < point.x && bodyWidget.firstChild.y <= point.y && this.documentHelper.layout.getNextWidgetHeight(bodyWidget) >= point.y) {\n selectionBody = bodyWidget;\n }\n else if (widget.x > point.x && bodyWidget.firstChild.y <= point.y && this.documentHelper.layout.getNextWidgetHeight(bodyWidget) >= point.y && !isFit) {\n selectionBody = bodyWidget;\n isFit = true;\n }\n if (j === widget.bodyWidgets.length - 1 && !isNullOrUndefined(selectionBody)) {\n for (var k = 0; k < selectionBody.childWidgets.length; k++) {\n var footChild = selectionBody.childWidgets[k];\n if (footChild instanceof Widget && footChild.y <= point.y\n && (footChild.y + footChild.height) >= point.y) {\n if (footChild instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(footChild, point);\n }\n else {\n return this.getLineWidgetTableWidget(footChild, point);\n }\n }\n }\n }\n }\n }\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof FootNoteWidget) {\n return childWidget[i];\n }\n else {\n if (childWidget instanceof Widget && childWidget.y <= point.y\n && (childWidget.y + childWidget.height) >= point.y) {\n if (childWidget instanceof ParagraphWidget) {\n // if ((childWidget as Widget).x <= point.x\n // && ((childWidget as Widget).x + (childWidget as Widget).width) >= point.x) {\n return this.getLineWidgetParaWidget(childWidget, point);\n // }// return this.getLineWidgetParaWidget((childWidget as ParagraphWidget), point);\n }\n else {\n var table = childWidget;\n if (table.wrapTextAround) {\n continue;\n }\n return this.getLineWidgetTableWidget(table, point);\n }\n }\n }\n }\n var line = undefined;\n if (isGetFirstChild) {\n if (widget.childWidgets.length > 0) {\n var firstChild = widget.childWidgets[0];\n if (firstChild instanceof Widget && firstChild.y <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n line = this.getLineWidgetParaWidget(widget.childWidgets[i], point);\n }\n }\n else {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n line = this.getLineWidgetTableWidget(widget.childWidgets[i], point);\n }\n }\n }\n else {\n var childWidget = undefined;\n if (firstChild instanceof Widget) {\n childWidget = firstChild;\n }\n if (!isNullOrUndefined(childWidget)) {\n if (childWidget instanceof ParagraphWidget) {\n line = this.getLineWidgetParaWidget(firstChild, point);\n }\n else {\n line = this.getLineWidgetTableWidget(firstChild, point);\n }\n }\n }\n }\n }\n return line;\n };\n //ParagraphWidget\n /**\n * Get line widget from paragraph widget\n *\n * @private\n */\n Selection.prototype.getLineWidgetParaWidget = function (widget, point) {\n var childWidgets = widget.childWidgets;\n var top = widget.y;\n for (var i = 0; i < childWidgets.length; i++) {\n var line = childWidgets[i];\n top += line.marginTop;\n var lineTotalHeight = line.height;\n if (line.nextLine && line.nextLine.marginTop > 0) {\n lineTotalHeight += line.nextLine.marginTop;\n }\n if (top <= point.y\n && (top + lineTotalHeight) >= point.y) {\n return line;\n }\n top += line.height;\n }\n var lineWidget = undefined;\n if (childWidgets.length > 0) {\n if (widget.y <= point.y) {\n lineWidget = childWidgets[childWidgets.length - 1];\n }\n else {\n lineWidget = childWidgets[0];\n }\n }\n return lineWidget;\n };\n Selection.prototype.highlightParagraph = function (widget, startIndex, endLine, endElement, endIndex, contentControl) {\n var top = 0;\n var width = 0;\n var isRtlText = false;\n if (widget.paragraphFormat.bidi && endLine.children.indexOf(endElement) > 0) {\n endElement = endLine.children[0];\n }\n for (var i = startIndex; i < widget.childWidgets.length; i++) {\n var line = widget.childWidgets[i];\n if (i === startIndex) {\n top = this.getTop(line);\n }\n else {\n top += line.marginTop;\n }\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n var left = this.getLeft(line);\n if (line === endLine) {\n //Selection ends in current line.\n var right = 0;\n // highlighting approach for normal and rtl text.\n if (isRtlText || widget.bidi) {\n var elementBoxCollection = this.getElementsBackward(line, endElement, endElement, widget.bidi);\n for (var i_2 = 0; i_2 < elementBoxCollection.length; i_2++) {\n var element = elementBoxCollection[i_2];\n var elementIsRTL = false;\n if (element === endElement) {\n right = this.getLeftInternal(line, element, element.length);\n }\n else {\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.getLeftInternal(line, element, index);\n }\n left = this.getLeftInternal(line, element, 0);\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n // Handled the paragraph mark highliting as special case.\n if (element === endElement && element instanceof TextElementBox && endIndex > element.length) {\n var paragraphMarkWidth = this.documentHelper.textHelper.getParagraphMarkSize(element.line.paragraph.characterFormat).Width;\n if (!widget.bidi && elementIsRTL) {\n right += paragraphMarkWidth;\n }\n else if (widget.bidi && !elementIsRTL) { // Paragrph and Selection ends in normal text\n width -= paragraphMarkWidth;\n // Highlight the element.\n this.createHighlightBorder(line, width, left, top, true, contentControl);\n // Highlight the paragraph mark of Bidi paragrph.\n left = this.getLineStartLeft(line) - paragraphMarkWidth;\n this.createHighlightBorder(line, paragraphMarkWidth, left, top, true, contentControl);\n // continue to next element.\n continue;\n }\n }\n this.createHighlightBorder(line, width, elementIsRTL ? right : left, top, true, contentControl);\n }\n return;\n }\n else {\n right = this.getLeftInternal(endLine, endElement, endIndex);\n width = Math.abs(right - left);\n this.createHighlightBorder(line, width, isRtlText ? right : left, top, false, contentControl);\n return;\n }\n }\n else {\n width = this.getWidth(line, true) - (left - widget.x);\n // Highlight the paragrph mark for Bidi paragrph.\n if (widget.bidi && line.isLastLine()) {\n left -= this.documentHelper.textHelper.getParagraphMarkSize(widget.characterFormat).Width;\n }\n this.createHighlightBorder(line, width, left, top, false, contentControl);\n top += line.height;\n }\n }\n };\n //Table Widget\n /**\n * Get line widget form table widget\n *\n * @private\n */\n Selection.prototype.getLineWidgetTableWidget = function (widget, point) {\n var lineWidget = undefined;\n for (var i = 0; i < widget.childWidgets.length; i++) {\n //Removed the height condition check to handle the vertically merged cells.\n var childWidget = widget.childWidgets[i];\n if (childWidget instanceof TableRowWidget && childWidget.y <= point.y) {\n if (childWidget.rowFormat.heightType === 'Exactly' &&\n (childWidget.y + HelperMethods.convertPointToPixel(childWidget.rowFormat.height) < point.y)) {\n continue;\n }\n lineWidget = this.getLineWidgetRowWidget(childWidget, point);\n var cellWidget = undefined;\n if (!isNullOrUndefined(lineWidget) && lineWidget.paragraph.containerWidget instanceof TableCellWidget) {\n cellWidget = lineWidget.paragraph.containerWidget;\n }\n var cellSpacing = 0;\n var rowSpan = 0;\n if (!isNullOrUndefined(cellWidget)) {\n var tableWidget = cellWidget.ownerRow.containerWidget;\n cellSpacing = HelperMethods.convertPointToPixel(tableWidget.tableFormat.cellSpacing);\n rowSpan = cellWidget.cellFormat.rowSpan;\n }\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n var topCellSpacing = 0;\n var bottomCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = cellWidget.cellIndex === 0 ? cellSpacing : cellSpacing / 2;\n rightCellSpacing = cellWidget.cellIndex === cellWidget.ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n var rowWidget = undefined;\n if (cellWidget.containerWidget instanceof TableRowWidget) {\n rowWidget = cellWidget.containerWidget;\n }\n var tableWidget = undefined;\n if (cellWidget.containerWidget.containerWidget instanceof TableWidget) {\n tableWidget = cellWidget.containerWidget.containerWidget;\n }\n if (!isNullOrUndefined(rowWidget) && !isNullOrUndefined(tableWidget)) {\n topCellSpacing = cellWidget.ownerRow.rowIndex === 0 ? cellSpacing : cellSpacing / 2;\n if (cellWidget.ownerRow.rowIndex + rowSpan === cellWidget.ownerTable.childWidgets.length) {\n bottomCellSpacing = cellSpacing;\n }\n else {\n bottomCellSpacing = cellSpacing / 2;\n }\n }\n }\n if ((!isNullOrUndefined(lineWidget) && lineWidget.paragraph.x <= point.x\n && lineWidget.paragraph.x + lineWidget.width >= point.x\n && lineWidget.paragraph.y <= point.y && this.getTop(lineWidget) + lineWidget.height >= point.y)\n || (!isNullOrUndefined(cellWidget) && cellWidget.x - cellWidget.margin.left - leftCellSpacing <= point.x\n && cellWidget.x + cellWidget.width + cellWidget.margin.right + rightCellSpacing >= point.x\n && cellWidget.y - cellWidget.margin.top - topCellSpacing <= point.y\n && cellWidget.y + cellWidget.height + cellWidget.margin.bottom + bottomCellSpacing >= point.y)) {\n break;\n }\n }\n }\n return lineWidget;\n };\n //TableRowWidget\n /**\n * Get line widget fom row\n *\n * @private\n */\n Selection.prototype.getLineWidgetRowWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var cellSpacing = 0;\n cellSpacing = HelperMethods.convertPointToPixel(widget.ownerTable.tableFormat.cellSpacing);\n var leftCellSpacing = 0;\n var rightCellSpacing = 0;\n if (cellSpacing > 0) {\n leftCellSpacing = widget.childWidgets[i].columnIndex === 0 ? cellSpacing : cellSpacing / 2;\n rightCellSpacing = widget.childWidgets[i].cellIndex === widget.childWidgets[i].ownerRow.childWidgets.length - 1 ? cellSpacing : cellSpacing / 2;\n }\n if (widget.childWidgets[i].x -\n widget.childWidgets[i].margin.left - leftCellSpacing <= point.x && (widget.childWidgets[i].x +\n widget.childWidgets[i].width) + widget.childWidgets[i].margin.right + rightCellSpacing >= point.x) {\n return this.getLineWidgetCellWidget(widget.childWidgets[i], point);\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].x <= point.x) {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetCellWidget(widget.childWidgets[0], point);\n }\n }\n return lineWidget;\n };\n /**\n * @private\n */\n Selection.prototype.getFirstBlock = function (cell) {\n if (cell.childWidgets.length > 0) {\n return cell.childWidgets[0];\n }\n return undefined;\n };\n //Table Cell Widget\n /**\n * Highlight selected cell widget\n *\n * @private\n */\n Selection.prototype.highlightCellWidget = function (widget) {\n var widgets = [];\n if (widget.previousSplitWidget || widget.nextSplitWidget) {\n widgets = widget.getSplitWidgets();\n }\n else {\n widgets.push(widget);\n }\n for (var i = 0; i < widgets.length; i++) {\n widget = widgets[i];\n //Clears Selection highlight of the child widgets.\n this.clearChildSelectionHighlight(widget);\n //Highlights the entire cell.\n this.createHighlightBorderInsideTable(widget);\n }\n };\n /**\n * Clear selection highlight\n *\n * @private\n */\n Selection.prototype.clearSelectionHighlight = function (widget) {\n if (this.selectedWidgets.containsKey(widget)) {\n this.removeSelectionHighlight(widget);\n this.selectedWidgets.remove(widget);\n }\n };\n /**\n * Get line widget from cell widget\n *\n * @private\n */\n Selection.prototype.getLineWidgetCellWidget = function (widget, point) {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n if (widget.childWidgets[i].y <= point.y\n && (widget.childWidgets[i].y + widget.childWidgets[i].height) >= point.y) {\n if (widget.childWidgets[i] instanceof ParagraphWidget) {\n return this.getLineWidgetParaWidget(widget.childWidgets[i], point);\n }\n else {\n return this.getLineWidgetTableWidget(widget.childWidgets[i], point);\n }\n }\n }\n var lineWidget = undefined;\n if (widget.childWidgets.length > 0) {\n if (widget.childWidgets[0].y - widget.margin.top <= point.y) {\n if (widget.childWidgets[widget.childWidgets.length - 1] instanceof ParagraphWidget) {\n lineWidget = this.getLineWidgetParaWidget(widget.childWidgets[widget.childWidgets.length - 1], point);\n }\n else {\n lineWidget = this.getLineWidgetTableWidget(widget.childWidgets[0], point);\n }\n }\n }\n return lineWidget;\n };\n //LineWidget\n /**\n * update text position\n *\n * @private\n */\n Selection.prototype.updateTextPosition = function (widget, point) {\n var caretPosition = point;\n var element = undefined;\n var index = 0;\n var isImageSelected = false;\n if (this.owner.enableHeaderAndFooter) {\n var headerFooterWidget = this.start.paragraph.bodyWidget;\n if (headerFooterWidget.headerFooterType.indexOf('Header') != -1) {\n this.comparePageWidthAndMargins(headerFooterWidget.page.headerWidget, headerFooterWidget.page);\n }\n else {\n this.comparePageWidthAndMargins(headerFooterWidget.page.footerWidget, headerFooterWidget.page);\n }\n }\n var isImageSelectedObj = this.updateTextPositionIn(widget, element, index, point, false);\n if (!isNullOrUndefined(isImageSelectedObj)) {\n element = isImageSelectedObj.element;\n index = isImageSelectedObj.index;\n caretPosition = isImageSelectedObj.caretPosition;\n isImageSelected = isImageSelectedObj.isImageSelected;\n this.isImageSelected = isImageSelected;\n }\n if (isImageSelected) {\n this.selectInternal(widget, element, index, caretPosition);\n if (index === 0) {\n this.extendForward();\n }\n else {\n this.extendBackward();\n }\n }\n else {\n if (!isNullOrUndefined(this.owner.imageResizerModule)) {\n this.owner.imageResizerModule.selectedImageWidget.clear();\n }\n this.selectInternal(widget, element, index, caretPosition);\n }\n };\n /**\n * @private\n */\n Selection.prototype.updateTextPositionIn = function (widget, inline, index, caretPosition, includeParagraphMark) {\n var isImageSelected = false;\n var top = this.getTop(widget);\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n var element = elementValues.element;\n var isRtlText = false;\n var isParaBidi = false;\n left = elementValues.left;\n var children = widget.renderedElements;\n if (isNullOrUndefined(element)) {\n var topMargin = 0;\n var bottomMargin = 0;\n var size = this.getParagraphMarkSize(widget.paragraph, topMargin, bottomMargin);\n topMargin = size.topMargin;\n bottomMargin = size.bottomMargin;\n var selectParaMark = this.documentHelper.mouseDownOffset.y >= top && this.documentHelper.mouseDownOffset.y < top + widget.height ? (this.documentHelper.mouseDownOffset.x < left + size.width) : true;\n if (selectParaMark && includeParagraphMark && caretPosition.x > left + size.width / 2) {\n left += size.width;\n if (children.length > 0) {\n inline = children[children.length - 1];\n index = inline.length;\n }\n index++;\n }\n else if (widget.paragraph.isEmpty() && widget.paragraph.bidi) {\n left += size.width;\n }\n caretPosition = new Point(left, topMargin > 0 ? top + topMargin : top);\n }\n else {\n if (!isNullOrUndefined(element)) {\n if (caretPosition.x > left + element.margin.left || (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline')) {\n var isInInline = false;\n if (widget.paragraph.floatingElements.length > 0) {\n isInInline = this.documentHelper.checkPointIsInLine(widget, caretPosition);\n }\n for (var i = children.indexOf(element); i < children.length; i++) {\n element = children[i];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline') {\n if (this.documentHelper.isInShapeBorder(element, caretPosition) &&\n !this.documentHelper.isSelectionChangedOnMouseMoved && !isInInline) {\n left = element.x;\n top = element.y;\n break;\n }\n continue;\n }\n var isCurrentParaBidi = false;\n if (element instanceof ListTextElementBox || element instanceof TextElementBox) {\n isCurrentParaBidi = element.line.paragraph.paragraphFormat.bidi;\n }\n if (caretPosition.x < left + element.margin.left + element.width + element.padding.left || i === children.length - 1\n || ((children[i + 1] instanceof ListTextElementBox) && isCurrentParaBidi)) {\n break;\n }\n left += element.margin.left + element.width + element.padding.left;\n }\n if (element instanceof TextElementBox) {\n isRtlText = element.isRightToLeft;\n isParaBidi = element.line.paragraph.paragraphFormat.bidi;\n }\n if (caretPosition.x > left + element.margin.left + element.width + element.padding.left) {\n //Line End\n index = element instanceof TextElementBox ? element.length : 1;\n if (isRtlText && isParaBidi) {\n index = 0;\n }\n if ((element instanceof TextElementBox && (element.text !== \"\\v\" && element.text !== '\\f' && element.text !== String.fromCharCode(14))) || includeParagraphMark) {\n left += element.margin.left + element.width + element.padding.left;\n }\n }\n else if (element instanceof TextElementBox) {\n if (element instanceof TextElementBox && isRtlText) {\n left += element.width + element.padding.left;\n }\n var x = 0;\n if (isRtlText) {\n x = (left + element.margin.left) - caretPosition.x;\n }\n else {\n x = caretPosition.x - left - element.margin.left - element.padding.left;\n }\n left += (element.margin.left + element.padding.left);\n var prevWidth = 0;\n var charIndex = 0;\n for (var i = 1; i <= element.length; i++) {\n var width = 0;\n if (i === element.length) {\n width = element.width + element.padding.left;\n }\n else {\n width = this.documentHelper.textHelper.getWidth(element.text.substr(0, i), element.characterFormat, element.scriptType);\n }\n if (x < width || i === element.length) {\n //Updates exact left position of the caret.\n var charWidth = width - prevWidth;\n if (x - prevWidth > charWidth / 2) {\n if (isRtlText) {\n left -= width;\n }\n else {\n left += width;\n }\n charIndex = i;\n }\n else {\n if (isRtlText) {\n left -= prevWidth;\n }\n else {\n left += prevWidth;\n }\n charIndex = i - 1;\n if (i === 1 && element !== children[0] && !(children[0] instanceof ShapeBase &&\n children[0].textWrappingStyle !== 'Inline')) {\n var curIndex = children.indexOf(element);\n if (!(children[curIndex - 1] instanceof ListTextElementBox) && !isRtlText) {\n element = children[curIndex - 1];\n if (element instanceof ShapeBase && element.textWrappingStyle !== 'Inline' && charIndex == 0 && !isNullOrUndefined(element.previousElement)) {\n element = children[children.indexOf(element) - 1];\n }\n charIndex = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n break;\n }\n prevWidth = width;\n }\n index = charIndex;\n }\n else {\n isImageSelected = element instanceof ImageElementBox || element instanceof ShapeElementBox;\n if (caretPosition.x - left - element.margin.left > element.width / 2) {\n index = 1;\n left += (element.margin.left + element.width + element.padding.left);\n }\n else if (element !== children[0] && !isImageSelected) {\n var curIndex = children.indexOf(element);\n if (!(children[curIndex - 1] instanceof ListTextElementBox)) {\n element = children[curIndex - 1];\n index = element instanceof TextElementBox ? element.length : 1;\n }\n }\n }\n if (element instanceof TextElementBox && (element.text === '\\v' || element.text === '\\f' || element.text === String.fromCharCode(14))) {\n index = 0;\n }\n }\n else {\n isRtlText = element.isRightToLeft;\n isParaBidi = element.line.paragraph.paragraphFormat.bidi;\n if (element instanceof TextElementBox && (isParaBidi || isRtlText) && caretPosition.x < left + element.margin.left + element.width + element.padding.left) {\n index = this.getTextLength(element.line, element) + element.length;\n }\n else {\n index = this.getTextLength(element.line, element);\n }\n left += element.margin.left;\n }\n if (element instanceof TextElementBox) {\n top += element.margin.top > 0 ? element.margin.top : 0;\n }\n else {\n var textMetrics = this.documentHelper.textHelper.getHeight(element.characterFormat); //for ascent and descent\n var height = element.height;\n if (element instanceof BookmarkElementBox && !this.documentHelper.layout.hasValidElement(element.line.paragraph)) {\n height = textMetrics.Height; //after text helper class\n }\n top += element.margin.top + height - textMetrics.BaselineOffset;\n }\n inline = element;\n if (inline instanceof FieldElementBox && inline.fieldType === 2 && !isNullOrUndefined(inline.fieldBegin)) {\n inline = inline.fieldBegin;\n index = 0;\n }\n if (inline instanceof EditRangeEndElementBox) {\n index = 0;\n }\n if (!isNullOrUndefined(inline.previousElement) && inline.previousElement instanceof ShapeBase && inline.previousElement.textWrappingStyle !== 'Inline' && index == 0) {\n inline = inline.previousElement;\n }\n var inlineObj = this.validateTextPosition(inline, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n var isParagraphEnd = isNullOrUndefined(inline.nextNode) && index === inline.length;\n var isLineEnd = inline.line.isEndsWithLineBreak\n && inline instanceof TextElementBox && inline.text === '\\v';\n if (includeParagraphMark && inline.nextNode instanceof FieldElementBox && index === inline.length) {\n isParagraphEnd = this.isLastRenderedInline(inline, index);\n }\n if (includeParagraphMark && isParagraphEnd || isLineEnd) {\n var width = 0;\n //Include width of Paragraph mark.\n if (isParagraphEnd) {\n width = this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n var selectParaMark = this.documentHelper.mouseDownOffset.y >= top && this.documentHelper.mouseDownOffset.y < top + widget.height ? (this.documentHelper.mouseDownOffset.x < left + width) : true;\n if (selectParaMark && caretPosition.x > left + width / 2) {\n left += width;\n index = inline.length + 1;\n }\n //Include width of line break mark.\n }\n else if (isLineEnd) {\n width = element.width + element.padding.left;\n left += width;\n // index = inline.length;\n }\n }\n caretPosition = new Point(left, top);\n }\n }\n return {\n 'element': inline,\n 'index': index,\n 'caretPosition': caretPosition,\n 'isImageSelected': isImageSelected\n };\n };\n /**\n * @private\n */\n Selection.prototype.checkAllFloatingElements = function (widget, caretPosition) {\n var bodyWidget;\n var isShapeSelected = false;\n var isInShapeBorder = false;\n var floatElement;\n if (!isNullOrUndefined(widget)) {\n bodyWidget = widget.paragraph.bodyWidget;\n isShapeSelected = false;\n isInShapeBorder = false;\n for (var i = 0; i < bodyWidget.floatingElements.length; i++) {\n if (bodyWidget.floatingElements[i] instanceof TableWidget) {\n continue;\n }\n floatElement = bodyWidget.floatingElements[i];\n if (caretPosition.x < floatElement.x + floatElement.margin.left + floatElement.width && caretPosition.x > floatElement.x\n && caretPosition.y < floatElement.y + floatElement.margin.top + floatElement.height && caretPosition.y > floatElement.y) {\n isShapeSelected = true;\n if (this.documentHelper.isInShapeBorder(floatElement, caretPosition)) {\n isInShapeBorder = true;\n }\n break;\n }\n }\n }\n return {\n 'element': floatElement,\n 'caretPosition': caretPosition,\n 'isShapeSelected': isShapeSelected,\n 'isInShapeBorder': isInShapeBorder\n };\n };\n /**\n * Get text length if the line widget\n *\n * @private\n */\n Selection.prototype.getTextLength = function (widget, element) {\n var length = 0;\n var renderedElement = widget.renderedElements;\n var count = renderedElement.indexOf(element);\n if (renderedElement.length > 0 && renderedElement[0] instanceof ListTextElementBox) {\n if (renderedElement[1] instanceof ListTextElementBox) {\n count -= 2;\n }\n else {\n count -= 1;\n }\n }\n for (var i = 1; i < count; i++) {\n length += renderedElement[i].length;\n }\n return length;\n };\n /**\n * Get Line widget left\n *\n * @private\n */\n Selection.prototype.getLeft = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paragraphFormat.bidi && !(paragraphFormat.textAlignment === 'Right')) {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n var renderedElements = widget.renderedElements;\n for (var i = 0; i < renderedElements.length; i++) {\n var element = renderedElements[i];\n if (element instanceof ListTextElementBox && !paragraphFormat.bidi) { //after list implementation\n if (i === 0) {\n left += element.margin.left + element.width;\n }\n else {\n left += element.width;\n }\n }\n else {\n left += element.margin.left;\n break;\n }\n }\n return left;\n };\n /**\n * Get line widget top\n *\n * @private\n */\n Selection.prototype.getTop = function (widget) {\n var top = widget.paragraph.y;\n var count = widget.paragraph.childWidgets.indexOf(widget);\n for (var i = 0; i < count; i++) {\n var line = widget.paragraph.childWidgets[i];\n top = (top + line.height + line.marginTop);\n }\n top += widget.marginTop;\n return top;\n };\n /**\n * Get first element the widget\n *\n * @private\n */\n Selection.prototype.getFirstElement = function (widget, left) {\n var firstLineIndent = 0;\n if (this.isParagraphFirstLine(widget) && !widget.paragraph.paragraphFormat.bidi) {\n firstLineIndent = HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n left += firstLineIndent;\n var element = undefined;\n var renderedChild = widget.renderedElements;\n for (var i = 0; i < renderedChild.length; i++) {\n element = renderedChild[i];\n if (element instanceof ListTextElementBox || element instanceof CommentCharacterElementBox) {\n if (widget.paragraph.paragraphFormat.bidi) {\n left += element.margin.left;\n element = undefined;\n break;\n }\n left += element.margin.left + element.width;\n element = undefined;\n // }\n // else if (element instanceof FieldElementBox || element instanceof BookmarkElementBox\n // || (element.nextNode instanceof FieldElementBox && ((element.nextNode as FieldElementBox).fieldType === 2))) {\n // element = undefined;\n }\n else {\n break;\n }\n }\n return { 'element': element, 'left': left };\n };\n /**\n * Return inline index\n *\n * @private\n */\n //ElementBox\n Selection.prototype.getIndexInInline = function (elementBox) {\n var indexInInline = 0;\n if (elementBox instanceof TextElementBox) {\n var count = elementBox.line.children.indexOf(elementBox);\n for (var i = 0; i < count; i++) {\n var element = elementBox.line.children[i];\n if (element instanceof FieldElementBox || element instanceof ListTextElementBox) {\n continue;\n }\n indexInInline += element.length;\n }\n }\n return indexInInline;\n };\n /**\n * Return true if widget is first inline of paragraph\n *\n * @private\n */\n Selection.prototype.isParagraphFirstLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.previousSplitWidget) &&\n widget === widget.paragraph.firstChild) {\n return true;\n }\n return false;\n };\n /**\n * @param widget\n * @private\n */\n Selection.prototype.isParagraphLastLine = function (widget) {\n if (isNullOrUndefined(widget.paragraph.nextSplitWidget)\n && widget === widget.paragraph.lastChild) {\n return true;\n }\n return false;\n };\n /**\n * Return line widget width\n *\n * @private\n */\n Selection.prototype.getWidth = function (widget, includeParagraphMark) {\n var width = 0;\n var paraFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paraFormat.bidi) {\n width += HelperMethods.convertPointToPixel(paraFormat.firstLineIndent);\n }\n for (var i = 0; i < widget.children.length; i++) {\n var elementBox = widget.children[i];\n if (elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline') {\n continue;\n }\n width += (elementBox.margin.left + elementBox.width + elementBox.padding.left);\n }\n if (includeParagraphMark && widget.paragraph.childWidgets.indexOf(widget) === widget.paragraph.childWidgets.length - 1\n && isNullOrUndefined(widget.paragraph.nextSplitWidget)) {\n width += this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n return width;\n };\n /**\n * Return line widget left\n *\n * @private\n */\n Selection.prototype.getLeftInternal = function (widget, elementBox, index) {\n var left = widget.paragraph.x;\n var paraFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paraFormat.bidi) {\n left += HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.firstLineIndent);\n }\n var renderedWidget = widget.renderedElements;\n var count = renderedWidget.indexOf(elementBox);\n if ((renderedWidget.length === 1 && renderedWidget[0] instanceof ListTextElementBox) || (renderedWidget.length === 2\n && renderedWidget[0] instanceof ListTextElementBox && renderedWidget[1] instanceof ListTextElementBox)) {\n count = renderedWidget.length;\n }\n var isFieldCode = false;\n for (var i = 0; i < count; i++) {\n var widgetInternal = renderedWidget[i];\n if (widgetInternal instanceof FieldElementBox && widgetInternal.fieldType === 2) {\n isFieldCode = false;\n }\n if (isFieldCode) {\n continue;\n }\n if (widgetInternal instanceof ShapeBase && widgetInternal.textWrappingStyle !== 'Inline') {\n continue;\n }\n if (i === 1 && widgetInternal instanceof ListTextElementBox) {\n left += widgetInternal.width;\n }\n else if (widgetInternal instanceof TabElementBox && elementBox === widgetInternal) {\n left += widgetInternal.margin.left;\n }\n else {\n left += widgetInternal.margin.left + widgetInternal.width + widgetInternal.padding.left;\n }\n if (widgetInternal instanceof FieldElementBox && widgetInternal.fieldType === 0) {\n isFieldCode = true;\n }\n }\n var isRtlText = false;\n var isParaBidi = widget.paragraph.bidi;\n if (!isNullOrUndefined(elementBox)) {\n isRtlText = elementBox.characterRange === CharacterRangeType.RightToLeft;\n isParaBidi = elementBox.line.paragraph.paragraphFormat.bidi;\n left += (elementBox.margin.left + elementBox.padding.left);\n if (elementBox instanceof ShapeBase && !isNullOrUndefined(elementBox.nextElement)) {\n left += (elementBox.nextElement.margin.left + elementBox.nextElement.padding.left);\n }\n if (isRtlText || (this.documentHelper.moveCaretPosition === 1 && !isRtlText && isParaBidi)) {\n left += elementBox.width;\n }\n }\n var width = 0;\n if (elementBox instanceof TextElementBox) {\n if ((this.documentHelper.moveCaretPosition !== 0) && (isParaBidi || isRtlText)) {\n if ((isRtlText && isParaBidi && this.documentHelper.moveCaretPosition === 2)\n || (isRtlText && !isParaBidi && this.documentHelper.moveCaretPosition === 1)) {\n left -= elementBox.width;\n }\n this.documentHelper.moveCaretPosition = 0;\n return left;\n }\n if (index === elementBox.length && !isRtlText) {\n left += elementBox.width;\n }\n else if (index > elementBox.length) {\n width = this.documentHelper.textHelper.getParagraphMarkWidth(elementBox.line.paragraph.characterFormat);\n if (isRtlText) {\n left -= elementBox.width + width;\n }\n else {\n left += elementBox.width + width;\n }\n }\n else {\n if (index === elementBox.length && isRtlText && paraFormat.textAlignment === 'Justify') {\n width = elementBox.width;\n }\n else {\n width = this.documentHelper.textHelper.getWidth(elementBox.text.substr(0, index), elementBox.characterFormat, elementBox.scriptType);\n }\n if (isRtlText) {\n left -= width;\n }\n else {\n left += width;\n }\n }\n this.documentHelper.moveCaretPosition = 0;\n }\n else if (index > 0) {\n if (!isNullOrUndefined(elementBox) && !(elementBox instanceof ListTextElementBox)) {\n if (!(elementBox instanceof ShapeBase && elementBox.textWrappingStyle !== 'Inline')) {\n left += elementBox.width;\n }\n if (index === 2) {\n var paragraph = elementBox.line.paragraph;\n left += this.documentHelper.textHelper.getParagraphMarkWidth(paragraph.characterFormat);\n }\n }\n else {\n left += this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n }\n }\n return left;\n };\n /**\n * Return line widget start offset\n * @private\n */\n Selection.prototype.getLineStartLeft = function (widget) {\n var left = widget.paragraph.x;\n var paragraphFormat = widget.paragraph.paragraphFormat;\n if (this.isParagraphFirstLine(widget) && !paragraphFormat.bidi) {\n left += HelperMethods.convertPointToPixel(paragraphFormat.firstLineIndent);\n }\n if (widget.children.length > 0) {\n left += widget.children[0].margin.left;\n }\n return left;\n };\n /**\n * Update text position\n * @private\n */\n Selection.prototype.updateTextPositionWidget = function (widget, point, textPosition, includeParagraphMark) {\n var caretPosition = point;\n var inline = undefined;\n var index = 0;\n var updatePositionObj;\n updatePositionObj = this.updateTextPositionIn(widget, inline, index, caretPosition, includeParagraphMark);\n inline = updatePositionObj.element;\n index = updatePositionObj.index;\n caretPosition = updatePositionObj.caretPosition;\n textPosition.setPositionForSelection(widget, inline, index, caretPosition);\n };\n /**\n * Clear selection highlight\n * @private\n */\n Selection.prototype.clearSelectionHighlightLineWidget = function (widget) {\n if (!isNullOrUndefined(this.owner) && this.selectedWidgets.length > 0) {\n this.clearSelectionHighlight(this);\n }\n };\n /**\n * Return first element from line widget\n * @private\n */\n Selection.prototype.getFirstElementInternal = function (widget) {\n var element = undefined;\n var childLen = widget.children.length;\n for (var i = 0; i < childLen; i++) {\n element = widget.children[i];\n if (element instanceof ListTextElementBox) {\n element = undefined;\n }\n else {\n break;\n }\n }\n return element;\n };\n //Selection API \n /**\n * Select content between given range\n * @private\n */\n Selection.prototype.selectRange = function (startPosition, endPosition, isBookmark) {\n this.start.setPositionInternal(startPosition);\n this.end.setPositionInternal(endPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true, true, isBookmark);\n };\n /**\n * Selects current paragraph\n * @private\n */\n Selection.prototype.selectParagraphInternal = function (paragraph, positionAtStart) {\n var line;\n if (!isNullOrUndefined(paragraph) && !isNullOrUndefined(paragraph.firstChild)) {\n line = paragraph.firstChild;\n if (positionAtStart) {\n this.start.setPosition(line, positionAtStart);\n }\n else {\n var endOffset = line.getEndOffset();\n this.start.setPositionParagraph(line, endOffset);\n }\n }\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = this.start.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.setPositionForBlock = function (block, selectFirstBlock) {\n var position;\n if (block instanceof TableWidget) {\n if (selectFirstBlock) {\n block = this.documentHelper.getFirstParagraphInFirstCell(block);\n }\n else {\n block = this.documentHelper.getLastParagraphInLastCell(block);\n }\n }\n if (block instanceof ParagraphWidget) {\n position = new TextPosition(this.owner);\n if (selectFirstBlock) {\n position.setPosition(block.firstChild, true);\n }\n else {\n var line = block.lastChild;\n position.setPositionParagraph(line, line.getEndOffset());\n }\n }\n return position;\n };\n /**\n * Select content in given text position\n * @private\n */\n Selection.prototype.selectContent = function (textPosition, clearMultiSelection) {\n if (isNullOrUndefined(textPosition)) {\n throw new Error('textPosition is undefined.');\n }\n this.start.setPositionInternal(textPosition);\n this.end.setPositionInternal(textPosition);\n this.upDownSelectionLength = this.end.location.x;\n this.fireSelectionChanged(true);\n };\n /**\n * Select paragraph\n * @private\n */\n Selection.prototype.selectInternal = function (lineWidget, element, index, physicalLocation) {\n this.start.setPositionForSelection(lineWidget, element, index, physicalLocation);\n this.end.setPositionInternal(this.start);\n this.upDownSelectionLength = physicalLocation.x;\n this.fireSelectionChanged(true);\n };\n /**\n * @private\n */\n Selection.prototype.selects = function (lineWidget, offset, skipSelectionChange) {\n this.documentHelper.clearSelectionHighlight();\n this.start.setPositionForLineWidget(lineWidget, offset);\n this.end.setPositionInternal(this.start);\n if (!skipSelectionChange) {\n this.fireSelectionChanged(true);\n }\n };\n /**\n * Select content between start and end position\n * @private\n */\n Selection.prototype.selectPosition = function (startPosition, endPosition) {\n if (isNullOrUndefined(startPosition) || isNullOrUndefined(endPosition)) {\n throw new Error('TextPosition cannot be undefined');\n }\n if (isNullOrUndefined(startPosition.paragraph)\n || startPosition.offset > this.getParagraphLength(startPosition.paragraph) + 1) {\n throw new Error('Start TextPosition is not valid.');\n }\n if (isNullOrUndefined(endPosition.paragraph)\n || endPosition.offset > this.getParagraphLength(endPosition.paragraph) + 1) {\n throw new Error('End TextPosition is not valid.');\n }\n if (startPosition.isAtSamePosition(endPosition)) {\n // Select start position.\n this.selectRange(startPosition, startPosition);\n }\n else {\n // If both text position exists within same comment or outside comment, and not at same position.\n if (startPosition.isExistBefore(endPosition)) {\n endPosition.validateForwardFieldSelection(startPosition.getHierarchicalIndexInternal(), endPosition.getHierarchicalIndexInternal());\n }\n else {\n startPosition.validateForwardFieldSelection(endPosition.getHierarchicalIndexInternal(), startPosition.getHierarchicalIndexInternal());\n }\n this.selectRange(startPosition, endPosition);\n }\n };\n /**\n * Notify selection change event\n * @private\n */\n Selection.prototype.fireSelectionChanged = function (isSelectionChanged, isKeyBoardNavigation, isBookmark) {\n if (!this.isEmpty) {\n if (this.isForward) {\n this.start.updatePhysicalPosition(true);\n this.end.updatePhysicalPosition(false);\n }\n else {\n this.start.updatePhysicalPosition(false);\n this.end.updatePhysicalPosition(true);\n }\n }\n if (this.isModifyingSelectionInternally) {\n return;\n }\n if (this.documentHelper.formFields.length > 0 && !this.owner.editor.isRemoteAction) {\n this.currentFormField = this.getCurrentFormField();\n }\n else {\n this.currentFormField = undefined;\n }\n if (!isNullOrUndefined(this.previousSelectedFormField) && isNullOrUndefined(this.previousSelectedFormField.fieldSeparator)) {\n this.previousSelectedFormField = this.currentFormField;\n }\n if (!this.skipFormatRetrieval) {\n this.retrieveCurrentFormatProperties();\n }\n this.documentHelper.clearSelectionHighlight();\n this.hideToolTip();\n if (this.owner.isLayoutEnabled && !this.owner.isShiftingEnabled) {\n this.highlightSelection(true, isBookmark);\n }\n if (this.documentHelper.restrictEditingPane.isShowRestrictPane && !this.skipEditRangeRetrieval) {\n this.documentHelper.restrictEditingPane.updateUserInformation();\n }\n if (isSelectionChanged) {\n if (this.start.paragraph.isInHeaderFooter && !this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = true;\n }\n else if (!this.start.paragraph.isInHeaderFooter && this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n }\n this.owner.fireSelectionChange();\n }\n if (this.owner.enableAutoFocus) {\n this.documentHelper.updateFocus();\n }\n if (this.documentHelper.isFormFillProtectedMode && isSelectionChanged) {\n this.triggerFormFillEvent(isKeyBoardNavigation);\n this.previousSelectedFormField = this.currentFormField;\n }\n if (this.owner.rulerHelper && this.owner.documentEditorSettings && this.owner.documentEditorSettings.showRuler &&\n !this.owner.isReadOnlyMode) {\n this.owner.rulerHelper.updateRuler(this.owner, false);\n }\n };\n //Formats Retrieval\n /**\n * Retrieve all current selection format\n * @private\n */\n Selection.prototype.retrieveCurrentFormatProperties = function () {\n this.isRetrieveFormatting = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n this.retrieveImageFormat(startPosition, endPosition);\n this.retrieveCharacterFormat(startPosition, endPosition);\n this.retrieveParagraphFormat(startPosition, endPosition);\n this.retrieveSectionFormat(startPosition, endPosition);\n this.retrieveTableFormat(startPosition, endPosition);\n this.isRetrieveFormatting = false;\n this.setCurrentContextType();\n };\n /**\n * @private\n */\n Selection.prototype.retrieveImageFormat = function (start, end) {\n var image;\n if (start.currentWidget === end.currentWidget && start.offset + 1 === end.offset) {\n var elementInfo = end.currentWidget.getInline(end.offset, 0);\n image = elementInfo.element;\n var index = elementInfo.index;\n if (image instanceof ImageElementBox) {\n var startOffset = start.currentWidget.getOffset(image, 0);\n if (startOffset !== start.offset) {\n image = undefined;\n }\n }\n }\n if (image instanceof ImageElementBox) {\n this.imageFormat.copyImageFormat(image);\n }\n else {\n this.imageFormat.clearImageFormat();\n }\n };\n /**\n * Gets the context type of previous character or element.\n * @param isElement - Decides whether to get previous context type from element or character. By default, character.\n * @returns Returns the context type of previous character or element.\n */\n Selection.prototype.getPreviousContextType = function (isElement) {\n var contextType;\n var start = this.start;\n if (start.offset > 0) {\n var element = start.currentWidget.getInline(start.offset, 0).element;\n if (isElement) {\n element = element.previousElement;\n }\n else {\n element = start.currentWidget.getInline(start.offset - 1, 0).element;\n }\n contextType = this.getContextElement(element);\n return contextType;\n }\n return undefined;\n };\n /**\n * Gets the context type of next character or element.\n * @param isElement - Decides whether to get next context type from element or character. By default, character.\n * @return Returns the context type of next character or element.\n */\n Selection.prototype.getNextContextType = function (isElement) {\n var contextType;\n var start = this.start;\n var element = start.currentWidget.getInline(start.offset, 0).element;\n if (isElement && element.nextElement) {\n element = element.nextElement;\n }\n else {\n element = start.currentWidget.getInline(start.offset + 1, 0).element;\n }\n contextType = this.getContextElement(element);\n return contextType;\n };\n Selection.prototype.getContextElement = function (element) {\n if (element instanceof TextElementBox) {\n return 'Text';\n }\n else if (element instanceof FieldElementBox || element instanceof FieldTextElementBox) {\n return 'Field';\n }\n else if (element instanceof BookmarkElementBox) {\n return 'Bookmark';\n }\n else if (element instanceof ImageElementBox) {\n return 'Image';\n }\n else if (element instanceof ShapeElementBox) {\n return 'Shape';\n }\n else if (element instanceof CommentElementBox || element instanceof CommentCharacterElementBox) {\n return 'Comment';\n }\n else if (element instanceof ListTextElementBox) {\n return 'List';\n }\n else if (element instanceof EditRangeStartElementBox || element instanceof EditRangeEndElementBox) {\n return 'EditRange';\n }\n else {\n return undefined;\n }\n };\n Selection.prototype.setCurrentContextType = function () {\n var contextIsinImage = this.imageFormat.image ? true : false;\n var contextIsinTable = (isNullOrUndefined(this.tableFormat) || isNullOrUndefined(this.tableFormat.table)) ? false : true;\n var style = this.start.paragraph.paragraphFormat.baseStyle;\n if (style instanceof WParagraphStyle && style.name.toLowerCase().indexOf('toc') === 0) {\n var tocField = this.getTocFieldInternal();\n if (!isNullOrUndefined(tocField)) {\n this.contextTypeInternal = 'TableOfContents';\n return;\n }\n }\n var currentRevision = this.getCurrentRevision();\n if (!isNullOrUndefined(currentRevision) && this.owner.showRevisions) {\n this.owner.trackChangesPane.currentSelectedRevision = currentRevision[0];\n if (isNullOrUndefined(this.owner.documentHelper.currentSelectedComment)) {\n this.owner.commentReviewPane.selectReviewTab('Changes');\n }\n this.owner.notify('reviewPane', { comment: this.owner.showComments, changes: true, isUserClosed: false });\n }\n else if (!isNullOrUndefined(this.owner.trackChangesPane.currentSelectedRevision)) {\n this.owner.trackChangesPane.currentSelectedRevision = undefined;\n }\n if (this.start.paragraph.isInHeaderFooter) {\n var isInHeader = this.start.paragraph.bodyWidget.headerFooterType.indexOf('Header') !== -1;\n if (contextIsinTable) {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderTableImage' : 'FooterTableImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderTableText' : 'FooterTableText';\n }\n }\n else {\n if (contextIsinImage) {\n this.contextTypeInternal = isInHeader ? 'HeaderImage' : 'FooterImage';\n }\n else {\n this.contextTypeInternal = isInHeader ? 'HeaderText' : 'FooterText';\n }\n }\n }\n else {\n if (contextIsinTable) {\n this.contextTypeInternal = contextIsinImage ? 'TableImage' : 'TableText';\n }\n else {\n this.contextTypeInternal = contextIsinImage ? 'Image' : 'Text';\n }\n }\n };\n Selection.prototype.addItemRevisions = function (currentItem, isFromAccept) {\n for (var i = 0; i < currentItem.revisions.length; i++) {\n var currentRevision = currentItem.revisions[i];\n this.selectRevision(currentRevision);\n if (isFromAccept) {\n currentRevision.accept();\n }\n else {\n currentRevision.reject();\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.hasRevisions = function () {\n if (this.getCurrentRevision()) {\n return true;\n }\n return false;\n };\n Selection.prototype.getCurrentRevision = function () {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n var elementInfo = start.currentWidget.getInline(start.offset, 0);\n var currentElement = elementInfo.element;\n var startPara = start.paragraph;\n var nextOffsetElement = start.currentWidget.getInline(start.offset + 1, 0).element;\n var eleEndPosition;\n if (currentElement && currentElement === nextOffsetElement) {\n var offset = currentElement.line.getOffset(currentElement, (currentElement.length));\n eleEndPosition = new TextPosition(this.owner);\n eleEndPosition.setPositionParagraph(currentElement.line, offset);\n if (end.offset === eleEndPosition.offset && !isNullOrUndefined(currentElement.nextElement)) {\n return undefined;\n }\n }\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n return currentElement.revisions;\n }\n if (startPara.isInsideTable) {\n var cellWidget = startPara.associatedCell;\n if (!isNullOrUndefined(cellWidget.ownerRow) && cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n return cellWidget.ownerRow.rowFormat.revisions;\n }\n }\n if (end.offset > end.paragraph.getLength()) {\n if (end.paragraph.characterFormat.revisions.length > 0) {\n return end.paragraph.characterFormat.revisions;\n }\n }\n return undefined;\n };\n Selection.prototype.processLineRevisions = function (linewidget, isFromAccept) {\n for (var i = 0; i < linewidget.children.length; i++) {\n var element = linewidget.children[i];\n if (element.revisions.length > 0) {\n this.addItemRevisions(element, isFromAccept);\n }\n }\n };\n /**\n * @private\n * @param isFromAccept\n */\n Selection.prototype.handleAcceptReject = function (isFromAccept) {\n if (this.isEmpty) {\n var elementInfo = this.start.currentWidget.getInline((this.start.offset + 1), 0);\n var currentElement = elementInfo.element;\n var startPara = this.start.paragraph;\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n this.addItemRevisions(currentElement, isFromAccept);\n }\n if (startPara.isInsideTable) {\n var cellWidget = startPara.associatedCell;\n if (!isNullOrUndefined(cellWidget)) {\n if (cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n this.addItemRevisions(cellWidget.ownerRow.rowFormat, isFromAccept);\n }\n }\n else if (!startPara.isEmpty()) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n var paraWidget = cellWidget.childWidgets[i];\n for (var lineIndex = void 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var linewidget = paraWidget.childWidgets[lineIndex];\n this.processLineRevisions(linewidget, isFromAccept);\n }\n }\n }\n }\n }\n else {\n var revisions = this.getselectedRevisionElements();\n for (var i = 0; i < revisions.length; i++) {\n this.acceptReject(revisions[i], isFromAccept);\n }\n }\n };\n Selection.prototype.acceptReject = function (currentRevision, toAccept) {\n this.selectRevision(currentRevision);\n if (toAccept) {\n currentRevision.accept();\n }\n else {\n currentRevision.reject();\n }\n };\n Selection.prototype.getselectedRevisionElements = function () {\n var revisionCollec = [];\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n for (var i = 0; i < this.selectedWidgets.length; i++) {\n var currentWidget = this.selectedWidgets.keys[i];\n if (currentWidget instanceof LineWidget) {\n revisionCollec = this.getSelectedLineRevisions(currentWidget, start, end, revisionCollec);\n }\n else if (currentWidget instanceof TableCellWidget) {\n if (currentWidget.ownerRow.rowFormat.revisions.length > 0) {\n revisionCollec = this.addRevisionsCollec(currentWidget.ownerRow.rowFormat.revisions, revisionCollec);\n }\n for (var i_3 = 0; i_3 < currentWidget.childWidgets.length; i_3++) {\n var paraWidget = currentWidget.childWidgets[i_3];\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var linewidget = paraWidget.childWidgets[lineIndex];\n revisionCollec = this.getSelectedLineRevisions(linewidget, start, end, revisionCollec);\n }\n }\n }\n }\n return revisionCollec;\n };\n Selection.prototype.getSelectedLineRevisions = function (currentWidget, start, end, elements) {\n if (currentWidget.paragraph.characterFormat.revisions.length > 0) {\n elements = this.addRevisionsCollec(currentWidget.paragraph.characterFormat.revisions, elements);\n }\n for (var j = 0; j < currentWidget.children.length; j++) {\n var currentElement = currentWidget.children[j];\n var offset = currentElement.line.getOffset(currentElement, 0);\n var eleStartPosition = new TextPosition(this.owner);\n eleStartPosition.setPositionParagraph(currentElement.line, offset);\n offset = currentElement.line.getOffset(currentElement, (currentElement.length));\n var eleEndPosition = new TextPosition(this.owner);\n eleEndPosition.setPositionParagraph(currentElement.line, offset);\n if (((eleEndPosition.isExistAfter(start) && eleEndPosition.isExistBefore(end))\n || (eleStartPosition.isExistAfter(start) && eleStartPosition.isExistBefore(end))\n || eleStartPosition.isAtSamePosition(start)\n || (start.isExistAfter(eleStartPosition) && end.isExistBefore(eleEndPosition))) && currentElement.revisions.length > 0) {\n elements = this.addRevisionsCollec(currentElement.revisions, elements);\n }\n }\n return elements;\n };\n Selection.prototype.addRevisionsCollec = function (element, revisCollec) {\n for (var i = 0; i < element.length; i++) {\n if (revisCollec.indexOf(element[i]) === -1) {\n revisCollec.push(element[i]);\n }\n }\n return revisCollec;\n };\n //Table Format retrieval starts\n /**\n * Retrieve selection table format\n * @private\n */\n Selection.prototype.retrieveTableFormat = function (start, end) {\n var tableAdv = this.getTable(start, end);\n if (!isNullOrUndefined(tableAdv)) {\n this.tableFormat.table = tableAdv;\n this.tableFormat.copyFormat(tableAdv.tableFormat);\n this.retrieveCellFormat(start, end);\n this.retrieveRowFormat(start, end);\n }\n else {\n //When the selection is out of table\n this.tableFormat.clearFormat();\n }\n };\n /**\n * Retrieve selection cell format\n * @private\n */\n Selection.prototype.retrieveCellFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.cellFormat.copyFormat(start.paragraph.associatedCell.cellFormat);\n this.getCellFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.cellFormat.clearCellFormat();\n }\n };\n /**\n * Retrieve selection row format\n * @private\n */\n Selection.prototype.retrieveRowFormat = function (start, end) {\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable) {\n this.rowFormat.copyFormat(start.paragraph.associatedCell.ownerRow.rowFormat);\n this.getRowFormat(start.paragraph.associatedCell.ownerTable, start, end);\n }\n else {\n //When the selection is out of table\n this.rowFormat.clearRowFormat();\n }\n };\n /**\n * Get selected cell format\n * @private\n */\n Selection.prototype.getCellFormat = function (table, start, end) {\n if (start.paragraph.associatedCell.equals(end.paragraph.associatedCell)) {\n return;\n }\n var isStarted = false;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === start.paragraph.associatedCell.ownerRow) {\n isStarted = true;\n }\n if (isStarted) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (this.isCellSelected(cell, start, end)) {\n this.cellFormat.combineFormat(cell.cellFormat);\n }\n if (cell === end.paragraph.associatedCell) {\n this.cellFormat.combineFormat(cell.cellFormat);\n return;\n }\n }\n }\n }\n };\n /**\n * Get selected row format\n * @private\n */\n Selection.prototype.getRowFormat = function (table, start, end) {\n var tableRow = start.paragraph.associatedCell.ownerRow;\n if (tableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n for (var i = table.childWidgets.indexOf(tableRow) + 1; i < table.childWidgets.length; i++) {\n var tempTableRow = table.childWidgets[i];\n this.rowFormat.combineFormat(tempTableRow.rowFormat);\n if (tempTableRow === end.paragraph.associatedCell.ownerRow) {\n return;\n }\n }\n };\n /**\n * Return table with given text position\n * @private\n */\n Selection.prototype.getTable = function (startPosition, endPosition) {\n if (!isNullOrUndefined(startPosition.paragraph.associatedCell) && !isNullOrUndefined(endPosition.paragraph.associatedCell)) {\n var startTable = startPosition.paragraph.associatedCell.ownerTable;\n var endTable = startPosition.paragraph.associatedCell.ownerTable;\n if (startTable === endTable) {\n return startTable;\n }\n else {\n if (startTable.contains(startPosition.paragraph.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startPosition.paragraph.associatedCell)) {\n return endTable;\n }\n else if (!startTable.isInsideTable || !endTable.isInsideTable) {\n return undefined;\n }\n else {\n do {\n startTable = startTable.associatedCell.ownerTable;\n if (startTable === endTable || startTable.contains(endTable.associatedCell)) {\n return startTable;\n }\n else if (endTable.contains(startTable.associatedCell)) {\n return endTable;\n }\n } while (!isNullOrUndefined(startTable.associatedCell));\n }\n }\n }\n return undefined;\n };\n Selection.prototype.getContainerWidget = function (block) {\n var bodyWidget;\n if (block.containerWidget instanceof TextFrame) {\n bodyWidget = block.containerWidget.containerShape.line.paragraph.bodyWidget;\n }\n else if (block.containerWidget instanceof BlockContainer) {\n if (!isNullOrUndefined(block.containerWidget.containerWidget) && block.containerWidget.containerWidget instanceof FootNoteWidget) {\n bodyWidget = block.containerWidget.containerWidget;\n }\n else {\n bodyWidget = block.containerWidget;\n }\n }\n else {\n bodyWidget = block.containerWidget;\n while (!(bodyWidget instanceof BlockContainer)) {\n if (bodyWidget instanceof TextFrame) {\n bodyWidget = bodyWidget.containerShape.line.paragraph;\n }\n bodyWidget = bodyWidget.containerWidget;\n }\n }\n return bodyWidget;\n };\n //Table format retrieval ends\n //Section format retrieval starts\n /**\n * Retrieve selection section format\n * @private\n */\n Selection.prototype.retrieveSectionFormat = function (start, end) {\n var startParaSection = this.getContainerWidget(start.paragraph);\n var endParaSection = this.getContainerWidget(end.paragraph);\n if (!isNullOrUndefined(startParaSection)) {\n this.sectionFormat.copyFormat(startParaSection.sectionFormat);\n var startPageIndex = this.documentHelper.pages.indexOf(startParaSection.page);\n var endPageIndex = this.documentHelper.pages.indexOf(endParaSection.page);\n for (var i = startPageIndex + 1; i <= endPageIndex; i++) {\n this.sectionFormat.combineFormat(this.documentHelper.pages[i].bodyWidgets[0].sectionFormat);\n }\n }\n };\n //section format retrieval ends.\n //Paragraph format retrieval implementation starts.\n /**\n * Retrieve selection paragraph format\n * @private\n */\n Selection.prototype.retrieveParagraphFormat = function (start, end) {\n this.getParagraphFormatForSelection(start.paragraph, this, start, end);\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatForSelection = function (paragraph, selection, start, end) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || this.isCellSelected(start.paragraph.associatedCell, start, end))) {\n this.getParagraphFormatInternalInCell(start.paragraph.associatedCell, start, end);\n }\n else {\n this.getParagraphFormatInternalInParagraph(paragraph, start, end);\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getParagraphFormatInternalInBlock(block, start, end);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphsInSelection = function () {\n var selection = this.owner.selectionModule;\n var selectedWidgets = selection.selectedWidgets.keys;\n var paragraphsInSelection = [];\n if (selection.isEmpty || selection.start.paragraph === selection.end.paragraph) {\n return [selection.start.paragraph];\n }\n for (var i = 0; i < selectedWidgets.length; i++) {\n var widget = selectedWidgets[i];\n if (paragraphsInSelection.indexOf(widget.paragraph) === -1) {\n paragraphsInSelection.push(widget.paragraph);\n }\n }\n return paragraphsInSelection;\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInParagraph = function (paragraph, start, end) {\n if (start.paragraph === paragraph) {\n this.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n }\n else {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInternalInParagraph(block, start, end);\n if (end.paragraph === block) {\n return;\n }\n var para = this.getNextRenderedBlock(block);\n if (!isNullOrUndefined(para)) {\n this.getParagraphFormatInternalInBlock(para, start, end);\n }\n }\n else {\n this.getParagraphFormatInternalInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(table);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInCell = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getParagraphFormatInBlock(cell.childWidgets[i]);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n this.getParagraphFormatInParagraph(block);\n }\n else {\n this.getParagraphFormatInTable(block);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInTable = function (tableAdv) {\n for (var i = 0; i < tableAdv.childWidgets.length; i++) {\n var tableRow = tableAdv.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getParagraphFormatInCell(tableRow.childWidgets[j]);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParagraphFormatInParagraph = function (paragraph) {\n if (this.start.paragraph === paragraph) {\n this.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n }\n else {\n this.paragraphFormat.combineFormat(paragraph.paragraphFormat);\n }\n };\n /**\n * Get paragraph format in cell\n * @private\n */\n Selection.prototype.getParagraphFormatInternalInCell = function (cellAdv, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(cellAdv, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(cellAdv, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getParagraphFormatInCell(containerCell);\n }\n else {\n if (startCell === containerCell) {\n this.getParagraphFormatInternalInParagraph(start.paragraph, start, end);\n if (end.paragraph === start.paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(start.paragraph);\n if (!isNullOrUndefined(block)) {\n this.getParagraphFormatInternalInBlock(block, start, end);\n }\n }\n else {\n this.getParagraphFormatInRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getParaFormatForCell(containerCell.ownerTable, containerCell, endCell);\n }\n }\n else {\n this.getParagraphFormatInRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(cellAdv);\n this.getParagraphFormatInRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getParaFormatForCell = function (table, startCell, endCell) {\n var startCellIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endCellIn = startCellIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startCellIn > endCellLeft) {\n startCellIn = endCellLeft;\n }\n if (endCellIn < endCellRight) {\n endCellIn = endCellRight;\n }\n if (startCellIn > this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n if (startCellIn < this.upDownSelectionLength) {\n startCellIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var tableRow = table.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n var cell = tableRow.childWidgets[j];\n var left = this.getCellLeft(tableRow, cell);\n if (HelperMethods.round(startCellIn, 2) <= HelperMethods.round(left, 2)\n && HelperMethods.round(left, 2) < HelperMethods.round(endCellIn, 2)) {\n this.getParagraphFormatInCell(cell);\n }\n }\n }\n };\n /**\n * Get paragraph format ins row\n * @private\n */\n Selection.prototype.getParagraphFormatInRow = function (tableRow, start, end) {\n for (var i = tableRow.rowIndex; i < tableRow.ownerTable.childWidgets.length; i++) {\n var row = tableRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getParagraphFormatInCell(row.childWidgets[j]);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRow.ownerTable);\n //Goto the next block.\n this.getParagraphFormatInternalInBlock(block, start, end);\n };\n // paragraph format retrieval implementation ends\n // Character format retrieval implementation starts.\n /**\n * Retrieve Selection character format\n * @private\n */\n Selection.prototype.retrieveCharacterFormat = function (start, end) {\n this.characterFormat.copyFormat(start.paragraph.characterFormat);\n if (start.paragraph.isEmpty()) {\n this.characterFormat.copyFormat(start.paragraph.characterFormat, this.documentHelper.textHelper.getFontNameToRender(0, start.paragraph.characterFormat));\n }\n if (start.paragraph === end.paragraph && start.currentWidget.isLastLine()\n && start.offset === this.getLineLength(start.currentWidget) && start.offset + 1 === end.offset) {\n return;\n }\n var para = start.paragraph;\n if (start.paragraph === end.paragraph && this.isSelectList) {\n var listLevel = this.getListLevel(start.paragraph);\n // let breakCharacterFormat: WCharacterFormat = start.paragraph.characterFormat;\n if (listLevel && listLevel.characterFormat.uniqueCharacterFormat) {\n this.characterFormat.copyFormat(listLevel.characterFormat);\n }\n return;\n }\n if (start.offset === this.getParagraphLength(para) && !this.isEmpty) {\n para = this.getNextParagraphBlock(para);\n }\n while (!isNullOrUndefined(para) && para !== end.paragraph && para.isEmpty()) {\n para = this.getNextParagraphBlock(para);\n }\n var offset = para === start.paragraph ? start.offset : 0;\n var indexInInline = 0;\n if (!isNullOrUndefined(para) && !para.isEmpty()) {\n var position = new TextPosition(this.owner);\n var elemInfo = start.currentWidget.getInline(offset, indexInInline);\n var physicalLocation = this.getPhysicalPositionInternal(start.currentWidget, offset, true);\n position.setPositionForSelection(start.currentWidget, elemInfo.element, elemInfo.index, physicalLocation);\n this.getCharacterFormatForSelection(para, this, position, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatForSelection = function (paragraph, selection, startPosition, endPosition) {\n //Selection start in cell.\n if (startPosition.paragraph instanceof ParagraphWidget && startPosition.paragraph.isInsideTable\n && (!endPosition.paragraph.isInsideTable\n || startPosition.paragraph.associatedCell !== endPosition.paragraph.associatedCell\n || this.isCellSelected(startPosition.paragraph.associatedCell, startPosition, endPosition))) {\n this.getCharacterFormatInTableCell(startPosition.paragraph.associatedCell, selection, startPosition, endPosition);\n }\n else {\n this.getCharacterFormat(paragraph, startPosition, endPosition);\n }\n };\n /**\n * Get Character format\n * @private\n */\n //Format Retrieval\n Selection.prototype.getCharacterFormatForTableRow = function (tableRowAdv, start, end) {\n for (var i = tableRowAdv.rowIndex; i < tableRowAdv.ownerTable.childWidgets.length; i++) {\n var tableRow = tableRowAdv.ownerTable.childWidgets[i];\n for (var j = 0; j < tableRow.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(tableRow.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(tableRow, end.paragraph.associatedCell)) {\n return;\n }\n }\n var block = this.getNextRenderedBlock(tableRowAdv.ownerTable);\n // //Goto the next block.\n this.getCharacterFormatForBlock(block, start, end);\n };\n /**\n * Get Character format in table\n * @private\n */\n Selection.prototype.getCharacterFormatInTableCell = function (tableCell, selection, start, end) {\n if (end.paragraph.isInsideTable) {\n var containerCell = this.getContainerCellOf(tableCell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = this.getSelectedCell(tableCell, containerCell);\n var endCell = this.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (this.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (this.isCellSelected(containerCell, start, end)) {\n this.getCharacterFormatForSelectionCell(containerCell, start, end);\n }\n else {\n if (startCell === containerCell) {\n this.getCharacterFormat(start.paragraph, start, end);\n }\n else {\n this.getCharacterFormatForTableRow(startCell.ownerRow, start, end);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.getCharacterFormatInternalInTable(containerCell.ownerTable, containerCell, endCell, start, end);\n }\n }\n else {\n this.getCharacterFormatForTableRow(containerCell.ownerRow, start, end);\n }\n }\n else {\n var cell = this.getContainerCell(tableCell);\n this.getCharacterFormatForTableRow(cell.ownerRow, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInternalInTable = function (table, startCell, endCell, startPosition, endPosition) {\n var startIn = this.getCellLeft(startCell.ownerRow, startCell);\n var endIn = startIn + startCell.cellFormat.cellWidth;\n var endCellLeft = this.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n if (startIn > endCellLeft) {\n startIn = endCellLeft;\n }\n if (endIn < endCellRight) {\n endIn = endCellRight;\n }\n if (startIn > this.upDownSelectionLength) {\n startIn = this.upDownSelectionLength;\n }\n if (endIn < this.upDownSelectionLength) {\n endIn = this.upDownSelectionLength;\n }\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var left = this.getCellLeft(row, cell);\n if (HelperMethods.round(startIn, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(endIn, 2)) {\n this.getCharacterFormatForSelectionCell(cell, startPosition, endPosition);\n }\n }\n }\n };\n /**\n * Get character format with in selection\n * @private\n */\n Selection.prototype.getCharacterFormat = function (paragraph, start, end) {\n if (paragraph !== start.paragraph && paragraph !== end.paragraph && !paragraph.isEmpty()) {\n this.getCharacterFormatInternal(paragraph, this);\n if (!this.characterFormat.canRetrieveNextCharacterFormat())\n return;\n }\n if (end.paragraph === paragraph && start.paragraph !== paragraph && end.offset === 0) {\n return;\n }\n var startOffset = 0;\n var length = this.getParagraphLength(paragraph);\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n //Sets selection character format. \n var isUpdated = this.setCharacterFormat(paragraph, start, end, length);\n if (isUpdated) {\n return;\n }\n }\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n var endOffset = end.offset;\n if (paragraph !== end.paragraph) {\n endOffset = length;\n }\n var isFieldStartSelected = false;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = this.getStartLineOffset(lineWidget);\n }\n if (lineWidget === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = this.getLineLength(lineWidget);\n }\n var count = 0;\n for (var j = 0; j < lineWidget.children.length; j++) {\n var inline = lineWidget.children[j];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n if (startOffset >= count + inline.length) {\n count += inline.length;\n continue;\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && HelperMethods.isLinkedFieldCharacter(inline)) {\n var nextInline = isNullOrUndefined(inline.fieldEnd) ?\n inline.fieldBegin : inline.fieldEnd;\n j--;\n do {\n this.characterFormat.combineFormat(inline.characterFormat);\n count += inline.length;\n inline = inline.nextNode;\n i++;\n j++;\n } while (!isNullOrUndefined(inline) && inline !== nextInline);\n continue;\n //isFieldStartSelected = true;\n }\n // if (inline instanceof FieldElementBox && (inline as FieldElementBox).fieldType === 1\n // && HelperMethods.isLinkedFieldCharacter((inline as FieldElementBox)) && isFieldStartSelected) {\n // let fieldInline: ElementBox = (inline as FieldElementBox).fieldBegin;\n // do {\n // this.characterFormat.combineFormat(fieldInline.characterFormat);\n // fieldInline = fieldInline.nextNode as ElementBox;\n // } while (!(fieldInline instanceof FieldElementBox));\n // }\n if (inline instanceof TextElementBox || inline instanceof FieldElementBox) {\n this.characterFormat.combineFormat(inline.characterFormat, this.documentHelper.textHelper.getFontNameToRender(inline.scriptType, inline.characterFormat));\n }\n if (isNullOrUndefined(inline) || endOffset <= count + inline.length) {\n break;\n }\n count += inline.length;\n }\n }\n if (end.paragraph === paragraph) {\n return;\n }\n var block = this.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n this.getCharacterFormatForBlock(block, start, end);\n }\n };\n Selection.prototype.setCharacterFormat = function (para, startPos, endPos, length) {\n var index = 0;\n var startOffset = startPos.offset;\n var inlineAndIndex = startPos.currentWidget.getInline(startOffset, index);\n index = inlineAndIndex.index;\n var inline = inlineAndIndex.element;\n if (isNullOrUndefined(inline)) {\n var currentLineIndex = startPos.paragraph.childWidgets.indexOf(startPos.currentWidget);\n if (startPos.currentWidget.previousLine) {\n inline = startPos.currentWidget.previousLine.children[startPos.currentWidget.previousLine.children.length - 1];\n this.characterFormat.copyFormat(inline.characterFormat, this.documentHelper.textHelper.getFontNameToRender(inline.scriptType, inline.characterFormat));\n return true;\n }\n }\n if (startOffset < length) {\n if (this.isEmpty) {\n if (inline instanceof TextElementBox || (inline instanceof FieldElementBox\n && (inline.fieldType === 0 || inline.fieldType === 1))) {\n var previousNode = this.getPreviousTextElement(inline);\n if (startOffset === 0 && previousNode) {\n inline = previousNode;\n }\n this.characterFormat.copyFormat(inline.characterFormat, this.documentHelper.textHelper.getFontNameToRender(inline.scriptType, inline.characterFormat));\n }\n else {\n if (!isNullOrUndefined(this.getPreviousTextElement(inline))) {\n var element = this.getPreviousTextElement(inline);\n this.characterFormat.copyFormat(element.characterFormat, this.documentHelper.textHelper.getFontNameToRender(element.scriptType, inline.characterFormat));\n }\n else if (!isNullOrUndefined(this.getNextTextElement(inline))) {\n var element = this.getNextTextElement(inline);\n this.characterFormat.copyFormat(element.characterFormat, this.documentHelper.textHelper.getFontNameToRender(element.scriptType, inline.characterFormat));\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n }\n return true;\n }\n else {\n if (index === inline.length && !isNullOrUndefined(inline.nextNode)) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormat(inline), this.documentHelper.textHelper.getFontNameToRender(inline.scriptType, inline.characterFormat));\n }\n else if (inline instanceof TextElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat, this.documentHelper.textHelper.getFontNameToRender(inline.scriptType, inline.characterFormat));\n }\n else if (inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(this.getNextValidCharacterFormatOfField(inline));\n }\n }\n }\n else {\n if (length === endPos.offset) {\n if (inline instanceof TextElementBox || inline instanceof FieldElementBox) {\n this.characterFormat.copyFormat(inline.characterFormat, this.documentHelper.textHelper.getFontNameToRender(inline.scriptType, inline.characterFormat));\n }\n else if (!isNullOrUndefined(inline)) {\n inline = this.getPreviousTextElement(inline);\n if (!isNullOrUndefined(inline)) {\n this.characterFormat.copyFormat(inline.characterFormat, this.documentHelper.textHelper.getFontNameToRender(inline.scriptType, inline.characterFormat));\n }\n }\n else {\n this.characterFormat.copyFormat(para.characterFormat);\n }\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatForBlock = function (block, start, end) {\n if (block instanceof ParagraphWidget) {\n this.getCharacterFormat(block, start, end);\n }\n else {\n this.getCharacterFormatInTable(block, start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInTable = function (table, start, end) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.getCharacterFormatForSelectionCell(row.childWidgets[j], start, end);\n }\n if (end.paragraph.isInsideTable && this.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n var blockAdv = this.getNextRenderedBlock(table);\n // //Goto the next block.\n if (!isNullOrUndefined(blockAdv)) {\n this.getCharacterFormatForBlock(blockAdv, start, end);\n }\n };\n /**\n * Get character format in selection\n * @private\n */\n Selection.prototype.getCharacterFormatForSelectionCell = function (cell, start, end) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n this.getCharacterFormatForBlock(cell.childWidgets[i], start, end);\n }\n };\n /**\n * @private\n */\n Selection.prototype.getCharacterFormatInternal = function (paragraph, selection) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var linewidget = paragraph.childWidgets[i];\n for (var j = 0; j < linewidget.children.length; j++) {\n var element = linewidget.children[j];\n if (!(element instanceof ImageElementBox || element instanceof FieldElementBox || element instanceof ListTextElementBox)) {\n selection.characterFormat.combineFormat(element.characterFormat);\n }\n }\n }\n };\n /**\n * Get next valid character format from inline\n * @private\n */\n Selection.prototype.getNextValidCharacterFormat = function (inline) {\n var startInline = this.getNextTextElement(inline);\n if (isNullOrUndefined(startInline)) {\n return inline.characterFormat;\n }\n var fieldBegin = undefined;\n if (startInline instanceof FieldElementBox) {\n if (fieldBegin.fieldType === 0) {\n fieldBegin = startInline;\n }\n }\n if (isNullOrUndefined(fieldBegin)) {\n return startInline.characterFormat;\n }\n else {\n return this.getNextValidCharacterFormatOfField(fieldBegin);\n }\n };\n /**\n * Get next valid paragraph format from field\n * @private\n */\n Selection.prototype.getNextValidCharacterFormatOfField = function (fieldBegin) {\n var startInline = fieldBegin;\n if (HelperMethods.isLinkedFieldCharacter(fieldBegin)) {\n if (isNullOrUndefined(fieldBegin.fieldSeparator)) {\n startInline = fieldBegin.fieldEnd;\n }\n else {\n startInline = fieldBegin.fieldSeparator;\n }\n }\n var nextValidInline = undefined;\n if (!isNullOrUndefined(startInline.nextNode)) {\n //Check the next node is a valid and returns inline.\n nextValidInline = this.getNextValidElement(startInline.nextNode);\n }\n //If field separator/end exists at end of paragraph, then move to next paragraph.\n if (isNullOrUndefined(nextValidInline)) {\n return startInline.characterFormat;\n }\n return nextValidInline.characterFormat;\n };\n /**\n * Return true if cursor point with in selection range\n * @private\n */\n Selection.prototype.checkCursorIsInSelection = function (widget, point) {\n if (isNullOrUndefined(this.start) || this.isEmpty || isNullOrUndefined(widget)) {\n return false;\n }\n var isSelected = false;\n do {\n if (this.selectedWidgets.containsKey(widget)) {\n var top_4 = void 0;\n var left = void 0;\n if (widget instanceof LineWidget) {\n top_4 = this.owner.selectionModule.getTop(widget);\n left = this.owner.selectionModule.getLeft(widget);\n }\n else {\n top_4 = widget.y;\n left = widget.x;\n }\n var widgetInfo = this.selectedWidgets.get(widget);\n if (widgetInfo instanceof SelectionWidgetInfo) {\n isSelected = widgetInfo.left <= point.x && top_4 <= point.y &&\n top_4 + widget.height >= point.y && widgetInfo.left + widgetInfo.width >= point.x;\n }\n else {\n var widgetIn = widgetInfo;\n for (var j = 0; j < widgetIn.length; j++) {\n if (widgetIn[j] instanceof SelectionWidgetInfo) {\n isSelected = widgetIn[j].left <= point.x && top_4 <= point.y &&\n top_4 + widget.height >= point.y && widgetIn[j].left + widgetIn[j].width >= point.x;\n if (isSelected) {\n break;\n }\n }\n }\n }\n }\n widget = (widget instanceof LineWidget) ? widget.paragraph : widget.containerWidget;\n } while (!isNullOrUndefined(widget) && !isSelected);\n return isSelected;\n };\n /**\n * Copy paragraph for to selection paragraph format\n * @private\n */\n Selection.prototype.copySelectionParagraphFormat = function () {\n var format = new WParagraphFormat();\n this.paragraphFormat.copyToFormat(format);\n return format;\n };\n /**\n * Get hyperlink display text\n * @private\n */\n Selection.prototype.getHyperlinkDisplayText = function (paragraph, fieldSeparator, fieldEnd, isNestedField, format) {\n var para = paragraph;\n if (para !== fieldEnd.line.paragraph) {\n isNestedField = true;\n return { displayText: '<>', 'isNestedField': isNestedField, 'format': format };\n }\n var displayText = '';\n var lineIndex = para.childWidgets.indexOf(fieldSeparator.line);\n var index = para.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < para.childWidgets.length; j++) {\n var lineWidget = para.childWidgets[j];\n if (j !== lineIndex) {\n index = -1;\n }\n for (var i = index + 1; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (inline === fieldEnd) {\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n }\n if (inline instanceof TextElementBox) {\n displayText += inline.text;\n format = inline.characterFormat;\n }\n else if (inline instanceof FieldElementBox) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && !isNullOrUndefined(inline.fieldEnd)) {\n if (isNullOrUndefined(inline.fieldSeparator)) {\n index = lineWidget.children.indexOf(inline.fieldEnd);\n }\n else {\n index = lineWidget.children.indexOf(inline.fieldSeparator);\n }\n }\n }\n else {\n isNestedField = true;\n return { 'displayText': '<>', 'isNestedField': isNestedField, 'format': format };\n }\n }\n }\n return { 'displayText': displayText, 'isNestedField': isNestedField, 'format': format };\n };\n /**\n * Navigates hyperlink on mouse Event.\n * @private\n */\n Selection.prototype.navigateHyperLinkOnEvent = function (cursorPoint, isTouchInput) {\n var _this = this;\n var widget = this.documentHelper.getLineWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n var hyperLinkField = this.getHyperLinkFieldInCurrentSelection(widget, cursorPoint);\n //Invokes Hyperlink navigation events.\n if (!isNullOrUndefined(hyperLinkField)) {\n this.documentHelper.updateTextPositionForSelection(cursorPoint, 1);\n this.fireRequestNavigate(hyperLinkField);\n setTimeout(function () {\n if (_this.viewer) {\n _this.documentHelper.isTouchInput = isTouchInput;\n _this.documentHelper.updateFocus();\n _this.documentHelper.isTouchInput = false;\n }\n });\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getLinkText = function (fieldBegin, copyAddress) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n var link = hyperlink.navigationLink;\n var screenTip = hyperlink.screenTip;\n if (copyAddress) {\n if (hyperlink.localReference.length > 0) {\n if (hyperlink.localReference[0] === '_' && (isNullOrUndefined(link) || link.length === 0)) {\n link = 'Current Document';\n }\n else {\n if (hyperlink.isCrossRef) {\n link += hyperlink.localReference;\n }\n else {\n link += '#' + hyperlink.localReference;\n }\n }\n }\n hyperlink.destroy();\n return link;\n }\n else {\n hyperlink.destroy();\n return screenTip;\n }\n };\n /**\n * Set Hyperlink content to tool tip element\n * @private\n */\n Selection.prototype.setHyperlinkContentToToolTip = function (fieldBegin, widget, xPos, isFormField) {\n if (fieldBegin) {\n if (this.owner.contextMenuModule &&\n this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n if (!this.toolTipElement) {\n this.toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(this.toolTipElement);\n this.screenTipElement = createElement('p');\n this.toolTipElement.appendChild(this.screenTipElement);\n this.toolTipTextElement = createElement('p', { styles: 'font-weight:bold' });\n this.toolTipElement.appendChild(this.toolTipTextElement);\n }\n this.toolTipElement.style.display = 'block';\n var l10n = new L10n('documenteditor', this.owner.defaultLocale);\n l10n.setLocale(this.owner.locale);\n var toolTipText = l10n.getConstant('Click to follow link');\n if (this.owner.useCtrlClickToFollowHyperlink) {\n if (this.documentHelper.isIosDevice) {\n toolTipText = 'Command+' + toolTipText;\n }\n else {\n toolTipText = 'Ctrl+' + toolTipText;\n }\n }\n var linkText = this.getScreenTipText(fieldBegin);\n if (isFormField) {\n var helpText = fieldBegin.formFieldData.helpText;\n if (isNullOrUndefined(helpText) || helpText === '') {\n return;\n }\n this.screenTipElement.innerText = helpText;\n }\n else {\n this.screenTipElement.innerText = linkText;\n this.toolTipTextElement.innerText = toolTipText;\n }\n var position = this.getTooltipPosition(fieldBegin.line, xPos, this.toolTipElement, false);\n this.showToolTip(position.x, position.y);\n if (!isNullOrUndefined(this.toolTipField) && fieldBegin !== this.toolTipField) {\n this.toolTipObject.position = { X: position.x, Y: position.y };\n }\n this.toolTipObject.show();\n this.toolTipField = fieldBegin;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * Get screenTip text\n * @private\n */\n Selection.prototype.getScreenTipText = function (fieldBegin) {\n var hyperlink = new Hyperlink(fieldBegin, this);\n if (!hyperlink.screenTip && !hyperlink.localReference) {\n return hyperlink.navigationLink;\n }\n else if (hyperlink.screenTip) {\n return hyperlink.screenTip;\n }\n else {\n return hyperlink.localReference;\n }\n };\n /**\n * Set Hyperlink content to tool tip element\n * @private\n */\n Selection.prototype.setFootnoteContentToToolTip = function (footnote, widget, xPos) {\n if (footnote) {\n if (this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block' &&\n this.owner.contextMenuModule) {\n return;\n }\n if (!this.toolTipElement) {\n this.toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(this.toolTipElement);\n }\n this.toolTipElement.style.display = 'block';\n var ln = new L10n('documenteditor', this.owner.defaultLocale);\n ln.setLocale(this.owner.locale);\n var toolTipText = void 0;\n if (footnote.footnoteType === 'Endnote') {\n toolTipText = ln.getConstant('Click to View/Edit Endnote');\n }\n else if (footnote.footnoteType === 'Footnote') {\n toolTipText = ln.getConstant('Click to View/Edit Footnote');\n }\n this.toolTipElement.innerHTML = '' + toolTipText + '';\n var positions = this.getTooltipPosition(footnote.line, xPos, this.toolTipElement, false);\n this.showToolTip(positions.x, positions.y);\n if (!isNullOrUndefined(this.toolTipField)) {\n this.toolTipObject.position = { X: positions.x, Y: positions.y };\n }\n this.toolTipObject.show();\n // this.toolTipField = fieldBegin;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * Set locked content info to tool tip element\n * @private\n */\n Selection.prototype.setLockInfoTooptip = function (widget, xPos, user) {\n if (widget) {\n if (this.owner.contextMenuModule &&\n this.owner.contextMenuModule.contextMenuInstance.element.style.display === 'block') {\n return;\n }\n var toolTipElement = this.toolTipElement;\n if (!this.toolTipElement) {\n toolTipElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(toolTipElement);\n this.toolTipElement = toolTipElement;\n }\n toolTipElement.style.display = 'block';\n var l10n = new L10n('documenteditor', this.owner.defaultLocale);\n l10n.setLocale(this.owner.locale);\n var toolTipInfo = l10n.getConstant('This region is locked by');\n toolTipElement.innerHTML = toolTipInfo + ' ' + user + '';\n var position = this.getTooltipPosition(widget, xPos, toolTipElement, false);\n this.showToolTip(position.x, position.y);\n if (!isNullOrUndefined(this.toolTipField) && user !== this.toolTipField) {\n this.toolTipObject.position = { X: position.x, Y: position.y };\n }\n this.toolTipObject.show();\n this.toolTipField = user;\n }\n else {\n this.hideToolTip();\n }\n };\n /**\n * @private\n */\n Selection.prototype.getTooltipPosition = function (widget, xPos, toolTipElement, isFormField) {\n var widgetTop = this.getTop(widget) * this.documentHelper.zoomFactor;\n var page = this.getPage(widget.paragraph);\n var containerWidth = this.documentHelper.viewerContainer.getBoundingClientRect().width + this.documentHelper.viewerContainer.scrollLeft;\n var left = page.boundingRectangle.x + xPos * this.documentHelper.zoomFactor;\n if ((left + toolTipElement.clientWidth + 10) > containerWidth) {\n left = left - ((toolTipElement.clientWidth - (containerWidth - left)) + 15);\n }\n var offsetHeight = !isFormField ? toolTipElement.offsetHeight : 0;\n var top = this.getPageTop(page) + (widgetTop - offsetHeight);\n top = top > this.documentHelper.viewerContainer.scrollTop ? top : top + widget.height + offsetHeight;\n return new Point(left, top);\n };\n /**\n * @private\n */\n Selection.prototype.updateSelectionInfo = function (info) {\n var cells = this.selectedWidgets.keys;\n if (cells[0] instanceof TableCellWidget && cells[cells.length - 1] instanceof TableCellWidget) {\n if (cells.length > 0) {\n var firstcell = cells[0];\n var lastCell = cells[cells.length - 1];\n var firstrow = firstcell.ownerRow;\n var lastRow = lastCell.ownerRow;\n var startCell = firstrow.getCell(firstrow.rowIndex, undefined, 0);\n var firstPara = this.owner.documentHelper.getFirstParagraphInCell(startCell);\n info.start = this.owner.documentHelper.selection.getHierarchicalIndex(firstPara, \"0\");\n var lastCellInRow = lastRow.getCell(lastRow.rowIndex, undefined, lastRow.childWidgets.length - 1);\n var lastPara = this.getLastParagraph(lastCellInRow);\n var offset = this.getParagraphLength(lastPara);\n info.end = this.owner.documentHelper.selection.getHierarchicalIndex(lastPara, offset.toString());\n }\n }\n return info;\n };\n /**\n * @private\n */\n Selection.prototype.createPasteElement = function (top, left) {\n var items;\n var locale = new L10n('documenteditor', this.owner.defaultLocale);\n locale.setLocale(this.owner.locale);\n switch (this.currentPasteAction) {\n case 'DefaultPaste':\n items = [\n {\n text: locale.getConstant('Keep source formatting'),\n iconCss: 'e-icons e-de-paste-source'\n },\n {\n text: locale.getConstant('Match destination formatting'),\n iconCss: 'e-icons e-de-paste-merge'\n },\n {\n text: locale.getConstant('Text only'),\n iconCss: 'e-icons e-de-paste-text'\n }\n ];\n break;\n case 'TextOnly':\n items = [\n {\n text: locale.getConstant('Text only'),\n iconCss: 'e-icons e-de-paste-text'\n }\n ];\n break;\n case 'InsertAsColumns':\n case 'OverwriteCells':\n case 'InsertAsRows':\n items = [\n {\n text: locale.getConstant('NestTable'),\n iconCss: 'e-icons e-de-paste-nested-table'\n },\n {\n text: locale.getConstant('InsertAsRows'),\n iconCss: 'e-icons e-de-paste-row'\n }\n ];\n if (this.currentPasteAction === 'InsertAsColumns') {\n var obj = {\n text: locale.getConstant('InsertAsColumns'),\n iconCss: 'e-icons e-de-paste-column'\n };\n items.unshift(obj);\n }\n else if (this.currentPasteAction === 'OverwriteCells') {\n var obj = {\n text: locale.getConstant('OverwriteCells'),\n iconCss: 'e-icons e-de-paste-overwrite-cells'\n };\n items.splice(2, 0, obj);\n }\n break;\n }\n if (!this.pasteElement) {\n this.pasteElement = createElement('div', { className: 'e-de-tooltip' });\n this.documentHelper.viewerContainer.appendChild(this.pasteElement);\n var splitButtonEle = createElement('button', { id: this.owner.containerId + '_iconsplitbtn' });\n this.pasteElement.appendChild(splitButtonEle);\n this.pasteDropDwn = new DropDownButton({\n items: items, iconCss: 'e-icons e-de-paste', select: this.pasteOptions\n });\n this.pasteDropDwn.appendTo(splitButtonEle);\n }\n else {\n this.pasteDropDwn.items = items;\n }\n this.pasteElement.style.display = 'block';\n this.pasteElement.style.position = 'absolute';\n this.pasteElement.style.left = left;\n this.pasteElement.style.top = top;\n this.pasteDropDwn.dataBind();\n };\n /**\n * Show hyperlink tooltip\n * @private\n */\n Selection.prototype.showToolTip = function (x, y) {\n if (!this.toolTipObject) {\n this.toolTipObject = new Popup(this.toolTipElement, {\n height: 'auto',\n width: 'auto',\n relateTo: this.documentHelper.viewerContainer.parentElement,\n position: { X: x, Y: y }\n });\n }\n };\n /**\n * Hide tooltip object\n * @private\n */\n Selection.prototype.hideToolTip = function () {\n this.toolTipField = undefined;\n if (this.toolTipObject) {\n this.toolTipElement.style.display = 'none';\n this.toolTipObject.hide();\n this.toolTipObject.destroy();\n this.toolTipObject = undefined;\n }\n };\n /**\n * Return hyperlink field\n * @private\n */\n Selection.prototype.getHyperLinkFieldInCurrentSelection = function (widget, cursorPosition, isFormField) {\n var inline = undefined;\n var top = this.getTop(widget);\n var lineStartLeft = this.getLineStartLeft(widget);\n var leftIndent = HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.leftIndent);\n var rightIndent = HelperMethods.convertPointToPixel(widget.paragraph.paragraphFormat.rightIndent);\n if (cursorPosition.y < top || cursorPosition.y > top + widget.height\n || cursorPosition.x < lineStartLeft || cursorPosition.x > lineStartLeft + widget.paragraph.width + leftIndent + rightIndent) {\n return undefined;\n }\n var left = widget.paragraph.x;\n var elementValues = this.getFirstElement(widget, left);\n left = elementValues.left;\n var element = elementValues.element;\n if (isNullOrUndefined(element)) {\n var width = this.documentHelper.textHelper.getParagraphMarkWidth(widget.paragraph.characterFormat);\n if (cursorPosition.x <= lineStartLeft + width || cursorPosition.x >= lineStartLeft + width) {\n //Check if paragraph is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFields(widget.paragraph, checkedFields, false, isFormField);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n else {\n var renderedChild = widget.renderedElements;\n if (cursorPosition.x > left + element.margin.left) {\n for (var i = renderedChild.indexOf(element); i < renderedChild.length; i++) {\n element = renderedChild[i];\n if (cursorPosition.x < left + element.margin.left + element.width || i === renderedChild.length - 1) {\n break;\n }\n left += element.margin.left + element.width;\n }\n }\n inline = element;\n var width = element.margin.left + element.width;\n if (isNullOrUndefined(inline.nextNode)) {\n //Include width of Paragraph mark.\n width += this.documentHelper.textHelper.getParagraphMarkWidth(inline.line.paragraph.characterFormat);\n }\n if (cursorPosition.x <= left + width) {\n //Check if inline is within a field result.\n var checkedFields = [];\n var field = this.getHyperLinkFieldInternal(inline.line.paragraph, inline, checkedFields, false, isFormField);\n checkedFields = [];\n checkedFields = undefined;\n return field;\n }\n }\n return undefined;\n };\n /**\n * Return FootnoteElementBox\n * @private\n */\n Selection.prototype.getFootNoteElementInCurrentSelection = function (lineWidget, position) {\n var inline = undefined;\n var top = this.getTop(lineWidget);\n var lineStartInLeft = this.getLineStartLeft(lineWidget);\n if (position.y < top || position.y > top + lineWidget.height\n || position.x < lineStartInLeft\n || position.x > lineStartInLeft + lineWidget.paragraph.width) {\n return undefined;\n }\n var leftLength = lineWidget.paragraph.x;\n var elementValues = this.getFirstElement(lineWidget, leftLength);\n leftLength = elementValues.left;\n var element = elementValues.element;\n if (isNullOrUndefined(element)) {\n var width = this.documentHelper.textHelper.getParagraphMarkWidth(lineWidget.paragraph.characterFormat);\n if (position.x <= lineStartInLeft + width || position.x >= lineStartInLeft + width) {\n //Check if paragraph is within a field result.\n var inlineObj = this.documentHelper.selection.start.currentWidget.getInline(this.documentHelper.selection.start.offset, 0);\n var footNote = inlineObj.element;\n if (footNote instanceof FootnoteElementBox) {\n return footNote;\n }\n else {\n return undefined;\n }\n }\n }\n else {\n if (position.x > leftLength + element.margin.left) {\n for (var i = lineWidget.children.indexOf(element); i < lineWidget.children.length; i++) {\n element = lineWidget.children[i];\n if (position.x < leftLength + element.margin.left + element.width || i === lineWidget.children.length - 1) {\n break;\n }\n leftLength += element.margin.left + element.width;\n }\n }\n if (element instanceof FootnoteElementBox) {\n inline = element;\n }\n var width = element.margin.left + element.width;\n if (isNullOrUndefined(element.nextNode)) {\n //Include width of Paragraph mark.\n width += this.documentHelper.textHelper.getParagraphMarkWidth(element.line.paragraph.characterFormat);\n }\n if (position.x <= leftLength + width) {\n return inline;\n }\n }\n return undefined;\n };\n /**\n * Return field if paragraph contain hyperlink field\n * @private\n */\n Selection.prototype.getHyperlinkField = function (isRetrieve) {\n if (isNullOrUndefined(this.end)) {\n return undefined;\n }\n var index = 0;\n var selection = this.documentHelper.selection;\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n ;\n }\n var currentInline = this.end.currentWidget.getInline(end.offset, index);\n index = currentInline.index;\n var inline = currentInline.element;\n var checkedFields = [];\n var field = undefined;\n if (isNullOrUndefined(inline)) {\n field = this.getHyperLinkFields(this.end.paragraph, checkedFields, isRetrieve);\n }\n else if (this.documentHelper.isFormFillProtectedMode && inline instanceof BookmarkElementBox\n && inline.previousNode instanceof FieldElementBox && inline.previousNode.fieldType === 1) {\n field = undefined;\n }\n else {\n var paragraph = inline.line.paragraph;\n field = this.getHyperLinkFieldInternal(paragraph, inline, checkedFields, isRetrieve, false);\n }\n checkedFields = [];\n return field;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFields = function (paragraph, checkedFields, isRetrieve, checkFormField) {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n if (checkedFields.indexOf(this.documentHelper.fields[i]) !== -1 || isNullOrUndefined(this.documentHelper.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n checkedFields.push(this.documentHelper.fields[i]);\n }\n var field = this.getFieldCode(this.documentHelper.fields[i]);\n field = field.trim().toLowerCase();\n var isParagraph = this.paragraphIsInFieldResult(this.documentHelper.fields[i], paragraph);\n if ((isRetrieve || (!isRetrieve && field.match('hyperlink '))) && isParagraph) {\n return this.documentHelper.fields[i];\n }\n if (isParagraph && checkFormField && this.documentHelper.fields[i].formFieldData) {\n return this.documentHelper.fields[i];\n }\n if ((isRetrieve || (!isRetrieve && field.match('ref '))) && isParagraph) {\n return this.documentHelper.fields[i];\n }\n }\n // if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof WHeaderFooter)) {\n // return this.getHyperLinkFields((paragraph.con as WCompositeNode), checkedFields);\n // }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getHyperLinkFieldInternal = function (paragraph, inline, fields, isRetrieve, checkFormField) {\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n if (fields.indexOf(this.documentHelper.fields[i]) !== -1 || isNullOrUndefined(this.documentHelper.fields[i].fieldSeparator)) {\n continue;\n }\n else {\n fields.push(this.documentHelper.fields[i]);\n }\n var fieldCode = this.getFieldCode(this.documentHelper.fields[i]);\n fieldCode = fieldCode.trim().toLowerCase();\n var fieldBegin = this.documentHelper.fields[i];\n var fieldEnd = fieldBegin.fieldEnd;\n if (isRetrieve && fieldBegin.nextNode instanceof BookmarkElementBox && fieldBegin.nextNode.reference) {\n fieldEnd = fieldBegin.nextNode.reference;\n }\n var isInline = (this.inlineIsInFieldResult(fieldBegin, fieldEnd, fieldBegin.fieldSeparator, inline, isRetrieve) || this.isImageField());\n if ((isRetrieve || (!isRetrieve && fieldCode.match('hyperlink '))) && isInline) {\n return this.documentHelper.fields[i];\n }\n if (isInline && checkFormField && this.documentHelper.fields[i].formFieldData) {\n return this.documentHelper.fields[i];\n }\n if ((isRetrieve || (!isRetrieve && fieldCode.match('ref '))) && isInline) {\n return this.documentHelper.fields[i];\n }\n }\n if (paragraph.containerWidget instanceof BodyWidget && !(paragraph instanceof HeaderFooterWidget)) {\n return this.getHyperLinkFieldInternal(paragraph.containerWidget, inline, fields, isRetrieve, checkFormField);\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getBlock = function (currentIndex) {\n if (currentIndex === '' || isNullOrUndefined(currentIndex)) {\n return undefined;\n }\n var index = { index: currentIndex };\n var page = this.start.getPage(index);\n var bodyIndex = index.index.indexOf(';');\n var value = index.index.substring(0, bodyIndex);\n index.index = index.index.substring(bodyIndex).replace(';', '');\n var bodyWidget = page.bodyWidgets[parseInt(value, 10)];\n return this.getBlockInternal(bodyWidget, index.index);\n };\n /**\n * Return Block relative to position\n * @private\n */\n Selection.prototype.getBlockInternal = function (widget, position) {\n if (position === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.indexOf(';');\n var value = position.substring(0, index);\n position = position.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof Widget && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headersFooters, position);\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n if (index >= 0 && index < widget.childWidgets.length) {\n var child = widget.childWidgets[(index)];\n if (position.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.indexOf(';') >= 0) {\n position = '0';\n }\n return child;\n }\n if (child instanceof BlockWidget) {\n var blockObj = this.getBlockInternal(child, position);\n return blockObj;\n }\n }\n else {\n return child;\n }\n }\n else {\n return node;\n }\n return node;\n };\n /**\n * Return true if inline is in field result\n * @private\n */\n Selection.prototype.inlineIsInFieldResult = function (fieldBegin, fieldEnd, fieldSeparator, inline, isRetrieve) {\n if (!isNullOrUndefined(fieldEnd) && !isNullOrUndefined(fieldSeparator)) {\n if (this.isExistBeforeInline(fieldSeparator, inline)) {\n return this.isExistAfterInline(fieldEnd, inline, isRetrieve);\n }\n }\n return false;\n };\n /**\n * Retrieve true if paragraph is in field result\n * @private\n */\n Selection.prototype.paragraphIsInFieldResult = function (fieldBegin, paragraph) {\n if (!isNullOrUndefined(fieldBegin.fieldEnd) && !isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var fieldParagraph = fieldBegin.fieldSeparator.line.paragraph;\n if (fieldBegin.fieldSeparator.line.paragraph === paragraph\n || this.isExistBefore(fieldParagraph, paragraph)) {\n var currentParagraph = fieldBegin.fieldEnd.line.paragraph;\n return (currentParagraph !== paragraph && this.isExistAfter(fieldParagraph, paragraph));\n }\n }\n return false;\n };\n /**\n * Return true if image is In field\n * @private\n */\n Selection.prototype.isImageField = function () {\n if (this.start.paragraph.isEmpty() || this.end.paragraph.isEmpty()) {\n return false;\n }\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var indexInInline = 0;\n var inlineInfo = startPosition.paragraph.getInline(startPosition.offset, indexInInline);\n var inline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (indexInInline === inline.length) {\n inline = this.getNextRenderedElementBox(inline, indexInInline);\n }\n inlineInfo = endPosition.paragraph.getInline(endPosition.offset, indexInInline);\n var endInline = inlineInfo.element;\n indexInInline = inlineInfo.index;\n if (inline instanceof FieldElementBox && inline.fieldType === 0\n && endInline instanceof FieldElementBox && endInline.fieldType === 1 && inline.fieldSeparator) {\n var fieldValue = inline.fieldSeparator.nextNode;\n if (fieldValue instanceof ImageElementBox && fieldValue.nextNode === endInline) {\n return true;\n }\n }\n return false;\n };\n /**\n * Return true if selection is in Form field\n * @private\n */\n Selection.prototype.isFormField = function () {\n var inline = this.currentFormField;\n if (inline instanceof FieldElementBox && inline.formFieldData) {\n return true;\n }\n return false;\n };\n /**\n * Return true if selection is in reference field\n * @private\n */\n Selection.prototype.isReferenceField = function (field) {\n if (isNullOrUndefined(field)) {\n field = this.getHyperlinkField(true);\n }\n if (field) {\n var fieldCode = this.getFieldCode(field);\n fieldCode = fieldCode.toLowerCase();\n if (field instanceof FieldElementBox && fieldCode.match('ref ')) {\n return true;\n }\n }\n return false;\n };\n /**\n * Return true if selection is in text form field\n * @private\n */\n Selection.prototype.isInlineFormFillMode = function (field) {\n if (this.documentHelper.isInlineFormFillProtectedMode) {\n field = isNullOrUndefined(field) ? this.currentFormField : field;\n if (isNullOrUndefined(field)) {\n field = this.getCurrentFormField();\n }\n if (field) {\n if (field.formFieldData instanceof TextFormField && field.formFieldData.type === 'Text') {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getFormFieldType = function (formField) {\n if (isNullOrUndefined(formField)) {\n formField = this.currentFormField;\n }\n if (formField instanceof FieldElementBox) {\n if (formField.formFieldData instanceof TextFormField) {\n return 'Text';\n }\n else if (formField.formFieldData instanceof CheckBoxFormField) {\n return 'CheckBox';\n }\n else if (formField.formFieldData instanceof DropDownFormField) {\n return 'DropDown';\n }\n }\n return undefined;\n };\n /**\n * Get selected form field type\n * @private\n */\n Selection.prototype.getCurrentFormField = function (checkFieldResult) {\n var field;\n if (checkFieldResult || this.documentHelper.isFormFillProtectedMode && this.owner.documentEditorSettings.formFieldSettings &&\n this.owner.documentEditorSettings.formFieldSettings.formFillingMode === 'Inline') {\n for (var i = 0; i < this.documentHelper.formFields.length; i++) {\n var formField = this.documentHelper.formFields[i];\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (HelperMethods.isLinkedFieldCharacter(formField)) {\n var offset = formField.fieldSeparator.line.getOffset(formField.fieldSeparator, 1);\n var fieldStart = new TextPosition(this.owner);\n fieldStart.setPositionParagraph(formField.fieldSeparator.line, offset);\n var fieldEndElement = formField.fieldEnd;\n offset = fieldEndElement.line.getOffset(fieldEndElement, 0);\n var fieldEnd = new TextPosition(this.owner);\n fieldEnd.setPositionParagraph(fieldEndElement.line, offset);\n if ((start.isExistAfter(fieldStart) || start.isAtSamePosition(fieldStart))\n && (end.isExistBefore(fieldEnd) || end.isAtSamePosition(fieldEnd))) {\n field = formField;\n break;\n }\n }\n }\n }\n else {\n field = this.getHyperlinkField(true);\n }\n if (field instanceof FieldElementBox && field.fieldType === 0 && !isNullOrUndefined(field.formFieldData)) {\n return field;\n }\n return undefined;\n };\n /**\n * @private\n */\n Selection.prototype.getCurrentTextFrame = function () {\n var container = this.start.paragraph.containerWidget;\n do {\n if (container instanceof TextFrame) {\n return container;\n }\n if (container) {\n container = container.containerWidget;\n }\n } while (container);\n return null;\n };\n /**\n * @private\n */\n Selection.prototype.isTableSelected = function (isNested) {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(start.paragraph.associatedCell) ||\n isNullOrUndefined(end.paragraph.associatedCell)) {\n return false;\n }\n var table = start.paragraph.associatedCell.ownerTable.getSplitWidgets();\n var firstParagraph = this.getFirstBlockInFirstCell(table[0]);\n var lastParagraph = this.getLastBlockInLastCell(table[table.length - 1]);\n if (isNested) {\n var nestedTable = lastParagraph.associatedCell.ownerTable;\n while (nestedTable.containerWidget instanceof TableCellWidget) {\n nestedTable = nestedTable.containerWidget.ownerTable;\n }\n lastParagraph = this.getLastBlockInLastCell(nestedTable);\n }\n return start.paragraph.associatedCell.equals(firstParagraph.associatedCell) &&\n end.paragraph.associatedCell.equals(lastParagraph.associatedCell)\n && (!firstParagraph.associatedCell.equals(lastParagraph.associatedCell) || (start.offset === 0\n && end.offset === this.getLineLength(lastParagraph.lastChild) + 1));\n };\n /**\n * Select List Text\n * @private\n */\n Selection.prototype.selectListText = function () {\n var lineWidget = this.documentHelper.selectionLineWidget;\n var endOffset = '0';\n var selectionIndex = lineWidget.getHierarchicalIndex(endOffset);\n var startPosition = this.getTextPosition(selectionIndex);\n var endPosition = this.getTextPosition(selectionIndex);\n this.isSelectList = true;\n this.selectRange(startPosition, endPosition);\n this.isSelectList = false;\n this.highlightListText(this.documentHelper.selectionLineWidget);\n this.contextTypeInternal = 'List';\n };\n /**\n * Manually select the list text\n * @private\n */\n Selection.prototype.highlightListText = function (linewidget) {\n var width = linewidget.children[0].width;\n var left = this.documentHelper.getLeftValue(linewidget);\n var top = linewidget.paragraph.y;\n this.createHighlightBorder(linewidget, width, left, top, false);\n this.documentHelper.isListTextSelected = true;\n };\n /**\n * @private\n */\n Selection.prototype.updateImageSize = function (imageFormat) {\n this.owner.isShiftingEnabled = true;\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n var inline = null;\n var index = 0;\n var paragraph = startPosition.paragraph;\n if (paragraph === endPosition.paragraph\n && startPosition.offset + 1 === endPosition.offset) {\n var inlineObj = paragraph.getInline(endPosition.offset, index);\n inline = inlineObj.element;\n index = inlineObj.index;\n }\n if (inline instanceof ImageElementBox || inline instanceof ShapeElementBox) {\n var width = inline.width;\n var height = inline.height;\n var alternateText = inline.alternateText;\n inline.width = imageFormat.width;\n inline.height = imageFormat.height;\n inline.alternateText = imageFormat.alternatetext;\n imageFormat.width = width;\n imageFormat.height = height;\n imageFormat.alternatetext = alternateText;\n if (paragraph !== null && paragraph.containerWidget !== null && this.owner.editorModule) {\n var lineIndex = paragraph.childWidgets.indexOf(inline.line);\n var elementIndex = inline.line.children.indexOf(inline);\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n this.highlightSelection(false);\n }\n }\n };\n /**\n * Gets selected table content\n * @private\n */\n Selection.prototype.getSelectedCellsInTable = function (table, startCell, endCell) {\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowindex = startCell.ownerRow.index;\n var endRowIndex = endCell.ownerRow.index;\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowindex && row.index <= endRowIndex) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n cells.push(cell);\n }\n }\n }\n if (row.index > endRowIndex) {\n break;\n }\n }\n return cells;\n // return html;\n };\n /**\n * Copies the selected content to clipboard.\n *\n * @returns {void}\n */\n Selection.prototype.copy = function () {\n if (this.isEmpty) {\n return;\n }\n this.copySelectedContent(false);\n };\n /**\n * @private\n *\n * @returns {void}\n */\n Selection.prototype.copySelectedContent = function (isCut) {\n if (isNullOrUndefined(this.owner.sfdtExportModule)) {\n return;\n }\n this.copyToClipboard(this.getHtmlContent());\n if (isCut && this.owner.editorModule) {\n this.owner.editorModule.handleCut(this);\n }\n if (this.owner.enableAutoFocus) {\n this.documentHelper.updateFocus();\n }\n };\n /**\n * Write the selected content as SFDT.\n * @returns SFDT Object.\n */\n Selection.prototype.writeSfdt = function () {\n var startPosition = this.start;\n var endPosition = this.end;\n if (!this.isForward) {\n startPosition = this.end;\n endPosition = this.start;\n }\n return (this.owner.sfdtExportModule.write((this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0), startPosition.currentWidget, startPosition.offset, endPosition.currentWidget, endPosition.offset, true));\n };\n /**\n * @private\n */\n Selection.prototype.getHtmlContent = function () {\n var documentContent = this.writeSfdt();\n if (this.owner.editorModule) {\n this.owner.editorModule.copiedData = JSON.stringify(documentContent);\n }\n var isOptimizedSfdt = this.owner.documentEditorSettings.optimizeSfdt;\n return this.htmlWriter.writeHtml(documentContent, isOptimizedSfdt);\n };\n Selection.prototype.copyToClipboard = function (htmlContent) {\n return __awaiter(this, void 0, void 0, function () {\n var navigator, textContent, htmlBlob, textBlob, e_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n navigator = window.navigator;\n textContent = this.text;\n if (!(navigator.clipboard && navigator.clipboard['write'])) return [3 /*break*/, 6];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 4, , 5]);\n htmlBlob = new Blob([htmlContent], { type: 'text/html' });\n textBlob = new Blob([textContent], { type: 'text/plain' });\n if (!document.hasFocus()) {\n document.body.focus();\n }\n return [4 /*yield*/, new Promise(function (resolve) { return window.requestAnimationFrame(resolve); })];\n case 2:\n _a.sent();\n return [4 /*yield*/, navigator.clipboard.write([new ClipboardItem({ 'text/html': htmlBlob, 'text/plain': textBlob })])\n .catch(function () {\n return _this.copyExecCommand(htmlContent);\n })];\n case 3:\n _a.sent();\n return [2 /*return*/, true];\n case 4:\n e_1 = _a.sent();\n return [2 /*return*/, false];\n case 5: return [3 /*break*/, 7];\n case 6: return [2 /*return*/, this.copyExecCommand(htmlContent)];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n Selection.prototype.copyExecCommand = function (htmlContent) {\n window.getSelection().removeAllRanges();\n //Skip the copy operation Using shadow DOM if it is mobile device or IE browser.\n var isSafariOnMac = (navigator.vendor && navigator.vendor.indexOf('Apple') > -1 &&\n navigator.userAgent &&\n navigator.userAgent.indexOf('Macintosh') > -1 &&\n navigator.userAgent.indexOf('Safari') > -1 &&\n navigator.userAgent.indexOf('Chrome') === -1);\n var isMobileDeviceOrInternetExplorer = /Android|Windows Phone|iPhone|Trident|webOS/i.test(navigator.userAgent) || isSafariOnMac;\n var shadowRoot;\n var div = document.createElement('div');\n div.style.left = '-10000px';\n div.style.top = '-10000px';\n div.style.position = 'relative';\n div.innerHTML = htmlContent;\n if (!isMobileDeviceOrInternetExplorer) {\n shadowRoot = document.createElement('div');\n var shadowDOM = shadowRoot.attachShadow({ mode: 'open' });\n shadowDOM.appendChild(div);\n document.body.appendChild(shadowRoot);\n }\n else {\n document.body.appendChild(div);\n }\n if (navigator !== undefined && navigator.userAgent.indexOf('Firefox') !== -1) {\n div.contentEditable = 'true';\n }\n var range = document.createRange();\n range.selectNodeContents(div);\n window.getSelection().addRange(range);\n var copySuccess = false;\n try {\n copySuccess = document.execCommand('copy');\n }\n catch (e) {\n // Copying data to Clipboard can potentially fail - for example, if another application is holding Clipboard open.       \n }\n finally {\n window.getSelection().removeAllRanges();\n div.parentNode.removeChild(div);\n if (!isMobileDeviceOrInternetExplorer) {\n shadowRoot.parentNode.removeChild(shadowRoot);\n }\n }\n return copySuccess;\n };\n // Caret implementation starts\n /**\n * Shows caret in current selection position.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.showCaret = function () {\n var page = !isNullOrUndefined(this.documentHelper.currentPage) ? this.documentHelper.currentPage : this.documentHelper.currentRenderingPage;\n if (isNullOrUndefined(page) || this.documentHelper.isRowOrCellResizing || (this.owner.enableImageResizerMode && this.owner.imageResizerModule.isImageResizerVisible && !this.owner.imageResizerModule.isShapeResize)) {\n return;\n }\n var left = page.boundingRectangle.x;\n var right;\n if (this.viewer instanceof PageLayoutViewer) {\n right = page.boundingRectangle.width * this.documentHelper.zoomFactor + left;\n }\n else {\n right = page.boundingRectangle.width - this.owner.viewer.padding.right - this.documentHelper.scrollbarWidth;\n }\n if (!this.owner.enableImageResizerMode || (!this.owner.imageResizerModule.isImageResizerVisible || this.owner.imageResizerModule.isShapeResize)) {\n if (this.isHideSelection(this.start.paragraph)) {\n this.caret.style.display = 'none';\n }\n else if (this.isEmpty && (!this.owner.isReadOnly || this.owner.enableCursorOnReadOnly || this.isInlineFormFillMode())) {\n var caretLeft = parseInt(this.caret.style.left.replace('px', ''), 10);\n if (caretLeft < left || caretLeft > right) {\n this.caret.style.display = 'none';\n }\n else {\n this.caret.style.display = 'block';\n }\n }\n else if (this.isImageSelected && !this.owner.enableImageResizerMode) {\n this.caret.style.display = 'block';\n }\n else {\n if (this.caret.style.display === 'block' || isNullOrUndefined(this)) {\n if (!this.documentHelper.isComposingIME) {\n this.caret.style.display = 'none';\n }\n }\n }\n }\n if (!isNullOrUndefined(this) && this.documentHelper.isTouchInput && !this.owner.isReadOnlyMode) {\n var caretStartLeft = parseInt(this.documentHelper.touchStart.style.left.replace('px', ''), 10) + 14;\n var caretEndLeft = parseInt(this.documentHelper.touchEnd.style.left.replace('px', ''), 10) + 14;\n var page_1 = this.getSelectionPage(this.start);\n if (page_1) {\n if (caretEndLeft < left || caretEndLeft > right) {\n this.documentHelper.touchEnd.style.display = 'none';\n }\n else {\n this.documentHelper.touchEnd.style.display = 'block';\n }\n if (!this.isEmpty) {\n left = page_1.boundingRectangle.x;\n right = page_1.boundingRectangle.width * this.documentHelper.zoomFactor + left;\n }\n if (caretStartLeft < left || caretStartLeft > right) {\n this.documentHelper.touchStart.style.display = 'none';\n }\n else {\n this.documentHelper.touchStart.style.display = 'block';\n }\n }\n }\n else {\n this.documentHelper.touchStart.style.display = 'none';\n this.documentHelper.touchEnd.style.display = 'none';\n }\n };\n /**\n * To set the editable div caret position\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.setEditableDivCaretPosition = function (index) {\n this.documentHelper.editableDiv.focus();\n var child = this.documentHelper.editableDiv.childNodes[this.documentHelper.editableDiv.childNodes.length - 1];\n if (child) {\n var range = document.createRange();\n range.setStart(child, index);\n range.collapse(true);\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(range);\n }\n };\n /**\n * Initializes caret.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.initCaret = function () {\n this.caret = createElement('div', {\n styles: 'position:absolute',\n className: 'e-de-blink-cursor e-de-cursor-animation'\n });\n this.caret.style.display = 'none';\n this.owner.documentHelper.viewerContainer.appendChild(this.caret);\n };\n /**\n * Updates caret position.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.updateCaretPosition = function () {\n var caretPosition = this.end.location;\n var page = this.getSelectionPage(this.end);\n if (page && !isNullOrUndefined(this.caret)) {\n this.caret.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.documentHelper.zoomFactor) + 'px';\n var caretInfo = this.updateCaretSize(this.owner.selectionModule.end);\n var topMargin = caretInfo.topMargin;\n //let caretHeight: number = caretInfo.height;\n var viewer = this.viewer;\n var pageTop = (page.boundingRectangle.y - viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1)) * this.documentHelper.zoomFactor + viewer.pageGap * (this.documentHelper.pages.indexOf(page) + 1);\n this.caret.style.top = pageTop + (Math.round(caretPosition.y + topMargin) * this.documentHelper.zoomFactor) + 'px';\n if (this.owner.selectionModule.characterFormat.baselineAlignment === 'Subscript') {\n this.caret.style.top = parseFloat(this.caret.style.top) + (parseFloat(this.caret.style.height) / 2) + 'px';\n }\n if (this.documentHelper.isTouchInput || this.documentHelper.touchStart.style.display !== 'none') {\n this.documentHelper.touchStart.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.documentHelper.zoomFactor - 14) + 'px';\n this.documentHelper.touchStart.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.documentHelper.zoomFactor) + 'px';\n this.documentHelper.touchEnd.style.left = page.boundingRectangle.x + (Math.round(caretPosition.x) * this.documentHelper.zoomFactor - 14) + 'px';\n this.documentHelper.touchEnd.style.top = pageTop + ((caretPosition.y + caretInfo.height) * this.documentHelper.zoomFactor) + 'px';\n }\n }\n this.showHidePasteOptions(this.caret.style.top, this.caret.style.left);\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.showHidePasteOptions = function (top, left) {\n if (Browser.isIE) {\n return;\n }\n if (this.isViewPasteOptions) {\n if (this.pasteElement && this.pasteElement.style.display === 'block') {\n return;\n }\n this.createPasteElement(top, left);\n }\n else if (this.pasteElement) {\n this.pasteElement.style.display = 'none';\n if (!isNullOrUndefined(this.owner.editorModule)) {\n this.owner.editorModule.isHtmlPaste = false;\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.getRect = function (position) {\n var caretPosition = position.location;\n var page = this.getSelectionPage(position);\n if (page) {\n var documentHelper = this.owner.documentHelper;\n var left = page.boundingRectangle.x + (Math.round(caretPosition.x) * documentHelper.zoomFactor);\n var pageGap = this.viewer.pageGap;\n var pageTop = (page.boundingRectangle.y - pageGap * (page.index + 1)) * documentHelper.zoomFactor + pageGap * (page.index + 1);\n var top_5 = pageTop + (Math.round(caretPosition.y) * documentHelper.zoomFactor);\n return new Point(left, top_5);\n }\n return new Point(0, 0);\n };\n /**\n * Gets current selected page\n * @private\n */\n Selection.prototype.getSelectionPage = function (position) {\n var lineWidget = this.getLineWidgetInternal(position.currentWidget, position.offset, true);\n if (lineWidget) {\n return this.getPage(lineWidget.paragraph);\n }\n return undefined;\n };\n /**\n * Updates caret size.\n * @private\n */\n Selection.prototype.updateCaretSize = function (textPosition, skipUpdate) {\n var topMargin = 0;\n var isItalic = false;\n var caret;\n var index = 0;\n var caretHeight = 0;\n if (this.characterFormat.italic) {\n isItalic = this.characterFormat.italic;\n }\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var bottomMargin = 0;\n var paragraphInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = paragraphInfo.topMargin;\n bottomMargin = paragraphInfo.bottomMargin;\n var height = paragraphInfo.height;\n var baselineAlignment = this.characterFormat.baselineAlignment;\n var elementHeight = height;\n if (baselineAlignment !== 'Normal') {\n //Set the caret height as sub/super script text height and updates the top margin for sub script text.\n elementHeight = elementHeight / 1.5;\n if (baselineAlignment === 'Subscript') {\n topMargin = height - elementHeight;\n }\n }\n caretHeight = topMargin < 0 ? topMargin + elementHeight : elementHeight;\n if (!skipUpdate) {\n this.caret.style.height = caretHeight * this.documentHelper.zoomFactor + 'px';\n }\n topMargin = 0;\n }\n else {\n var inlineInfo = textPosition.currentWidget.getInline(textPosition.offset, index);\n index = inlineInfo.index;\n var inline = inlineInfo.element;\n if (!isNullOrUndefined(inline)) {\n caret = this.getCaretHeight(inline, index, inline.characterFormat, true, topMargin, isItalic);\n caretHeight = caret.height;\n if (!skipUpdate) {\n this.caret.style.height = caret.height * this.documentHelper.zoomFactor + 'px';\n }\n }\n }\n if (!skipUpdate) {\n if (isItalic) {\n this.caret.style.transform = 'rotate(13deg)';\n }\n else {\n this.caret.style.transform = '';\n }\n }\n return {\n 'topMargin': topMargin,\n 'height': caretHeight\n };\n };\n /**\n * Updates caret to page.\n * @private\n * @returns {void}\n */\n Selection.prototype.updateCaretToPage = function (startPosition, endPage) {\n if (!isNullOrUndefined(endPage)) {\n this.documentHelper.selectionEndPage = endPage;\n if (this.owner.selectionModule.isEmpty) {\n this.documentHelper.selectionStartPage = endPage;\n }\n else {\n var startLineWidget = this.getLineWidgetParagraph(startPosition.offset, startPosition.paragraph.childWidgets[0]);\n //Gets start page.\n var startPage = this.getPage(startLineWidget.paragraph);\n if (!isNullOrUndefined(startPage)) {\n this.documentHelper.selectionStartPage = startPage;\n }\n }\n }\n if (this.owner.enableAutoFocus) {\n this.checkForCursorVisibility();\n }\n };\n /**\n * Gets caret bottom position.\n * @private\n */\n Selection.prototype.getCaretBottom = function (textPosition, isEmptySelection) {\n var bottom = textPosition.location.y;\n if (textPosition.paragraph.isEmpty()) {\n var paragraph = textPosition.paragraph;\n var topMargin = 0;\n var bottomMargin = 0;\n var sizeInfo = this.getParagraphMarkSize(paragraph, topMargin, bottomMargin);\n topMargin = sizeInfo.topMargin;\n bottomMargin = sizeInfo.bottomMargin;\n bottom += sizeInfo.height;\n bottom += topMargin;\n if (!isEmptySelection) {\n bottom += bottomMargin;\n }\n }\n else {\n var index = 0;\n var inlineInfo = textPosition.paragraph.getInline(textPosition.offset, index);\n var inline = inlineInfo.element;\n index = inlineInfo.index;\n var topMargin = 0;\n var isItalic = false;\n var caretHeightInfo = this.getCaretHeight(inline, index, inline.characterFormat, false, topMargin, isItalic);\n topMargin = caretHeightInfo.topMargin;\n isItalic = caretHeightInfo.isItalic;\n bottom += caretHeightInfo.height;\n if (isEmptySelection) {\n bottom -= HelperMethods.convertPointToPixel(this.documentHelper.layout.getAfterSpacing(textPosition.paragraph));\n }\n }\n return bottom;\n };\n /**\n * Checks for cursor visibility.\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.checkForCursorVisibility = function () {\n this.showCaret();\n };\n // caret implementation ends\n /**\n * Keyboard shortcuts\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n this.owner.focusIn();\n if (ctrl && !shift && !alt) {\n this.documentHelper.isControlPressed = true;\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.selection.handleTabKey(false, false);\n // }\n // break;\n case 35:\n this.handleControlEndKey();\n break;\n case 36:\n this.handleControlHomeKey();\n break;\n case 37:\n this.handleControlLeftKey();\n break;\n case 38:\n this.handleControlUpKey();\n break;\n case 39:\n this.handleControlRightKey();\n break;\n case 40:\n this.handleControlDownKey();\n break;\n case 65:\n this.owner.selectionModule.selectAll();\n break;\n case 67:\n event.preventDefault();\n this.copy();\n break;\n case 70:\n event.preventDefault();\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.documentEditorSettings.showNavigationPane = true;\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n this.documentHelper.isCompleted = false;\n switch (key) {\n case 33:\n event.preventDefault();\n this.handlePageUpPageDownKey(false, shift);\n break;\n case 34:\n event.preventDefault();\n this.handlePageUpPageDownKey(true, shift);\n break;\n case 35:\n this.handleShiftEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleShiftHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleShiftLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleShiftUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleShiftRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleShiftDownKey();\n event.preventDefault();\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 32:\n this.owner.editorModule.insertText(String.fromCharCode(160));\n break;\n case 35:\n this.handleControlShiftEndKey();\n break;\n case 36:\n this.handleControlShiftHomeKey();\n break;\n case 37:\n this.handleControlShiftLeftKey();\n break;\n case 38:\n this.handleControlShiftUpKey();\n break;\n case 39:\n this.handleControlShiftRightKey();\n break;\n case 40:\n this.handleControlShiftDownKey();\n break;\n case 56:\n this.owner.toggleShowHiddenMarksInternal();\n break;\n }\n }\n else {\n switch (key) {\n // case 9:\n // event.preventDefault();\n // if (this.owner.acceptTab) {\n // this.handleTabKey(true, false);\n // }\n // break; \n case 33:\n event.preventDefault();\n this.handlePageUpPageDownKey(false, shift);\n break;\n case 34:\n event.preventDefault();\n this.handlePageUpPageDownKey(true, shift);\n break;\n case 35:\n this.handleEndKey();\n event.preventDefault();\n break;\n case 36:\n this.handleHomeKey();\n event.preventDefault();\n break;\n case 37:\n this.handleLeftKey();\n event.preventDefault();\n break;\n case 38:\n this.handleUpKey();\n event.preventDefault();\n break;\n case 39:\n this.handleRightKey();\n event.preventDefault();\n break;\n case 40:\n this.handleDownKey();\n event.preventDefault();\n break;\n }\n }\n if (this.isFormField() && !(this.documentHelper.isDocumentProtected)) {\n var formField = this.getCurrentFormField(true);\n if (formField && formField.formFieldData instanceof DropDownFormField) {\n formField = (event.keyCode === 37 || event.keyCode === 38 || event.keyCode === 40) ? formField : formField.nextElement instanceof BookmarkElementBox ? formField.nextElement.reference : formField.fieldEnd;\n var index = event.keyCode === 39 ? 1 : 0;\n var offset = formField.line.getOffset(formField, index);\n var point = this.getPhysicalPositionInternal(formField.line, offset, false);\n this.selectInternal(formField.line, formField, index, point);\n }\n }\n if (!this.owner.isReadOnlyMode || this.documentHelper.isCommentOnlyMode || this.isInlineFormFillMode() || (this.documentHelper.isDocumentProtected && this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.owner.editor.canEditContentControl && !isNullOrUndefined(this.documentHelper.selection) && this.documentHelper.selection.checkContentControlLocked())) {\n this.owner.editorModule.onKeyDownInternal(event, ctrl, shift, alt);\n }\n else if (this.documentHelper.isDocumentProtected && this.documentHelper.protectionType === 'FormFieldsOnly') {\n if (event.keyCode === 9 || event.keyCode === 32) {\n this.owner.editorModule.onKeyDownInternal(event, ctrl, shift, alt);\n }\n }\n if (this.owner.searchModule) {\n if (!isNullOrUndefined(this.owner.searchModule.searchHighlighters) && this.owner.searchModule.searchHighlighters.length > 0) {\n this.owner.searchModule.searchResults.clear();\n }\n }\n if (event.keyCode === 27 || event.which === 27) {\n if (!isNullOrUndefined(this.owner.optionsPaneModule)) {\n this.owner.optionsPaneModule.showHideOptionsPane(false);\n this.documentHelper.updateFocus();\n }\n if (this.owner.enableHeaderAndFooter) {\n this.disableHeaderFooter();\n }\n }\n };\n //#region Enable or disable Header Footer\n /**\n * @private\n */\n Selection.prototype.checkAndEnableHeaderFooter = function (point, pagePoint) {\n var page = this.documentHelper.currentPage;\n if (this.isCursorInsidePageRect(point, page)) {\n if (this.isCursorInHeaderRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.headerWidget, page);\n }\n if (this.isCursorInFooterRegion(point, page)) {\n if (this.owner.enableHeaderAndFooter) {\n return false;\n }\n return this.enableHeadersFootersRegion(page.footerWidget, page);\n }\n }\n if (this.owner.enableHeaderAndFooter) {\n this.owner.enableHeaderAndFooter = false;\n this.documentHelper.updateTextPositionForSelection(pagePoint, 1);\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInsidePageRect = function (point, page) {\n if ((this.viewer.containerLeft + point.x) >= page.boundingRectangle.x &&\n (this.viewer.containerLeft + point.x) <= (page.boundingRectangle.x + (page.boundingRectangle.width * this.documentHelper.zoomFactor)) && this.viewer instanceof PageLayoutViewer) {\n return true;\n }\n else if ((this.viewer.containerLeft + point.x) >= page.boundingRectangle.x &&\n (this.viewer.containerLeft + point.x) <= (page.boundingRectangle.x + page.boundingRectangle.width)) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInHeaderRegion = function (point, page) {\n if (this.viewer instanceof PageLayoutViewer) {\n var pageTop = this.getPageTop(page);\n var headerHeight = 0;\n var header = page.headerWidget;\n if (header) {\n headerHeight = (header.y + header.height);\n }\n var isEmpty = header.isEmpty && !this.owner.enableHeaderAndFooter;\n var topMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.topMargin);\n var pageHeight = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.pageHeight);\n var height = isEmpty ? topMargin : Math.min(Math.max(headerHeight, topMargin), pageHeight / 100 * 40);\n height = height * this.documentHelper.zoomFactor;\n if ((this.viewer.containerTop + point.y) >= pageTop && (this.viewer.containerTop + point.y) <= pageTop + height) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isCursorInFooterRegion = function (point, page) {\n if (this.viewer instanceof PageLayoutViewer) {\n var pageRect = page.boundingRectangle;\n var pageTop = this.getPageTop(page);\n var pageBottom = pageTop + (pageRect.height * this.documentHelper.zoomFactor);\n var footerDistance = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.footerDistance);\n var footerHeight = 0;\n if (page.footerWidget) {\n footerHeight = page.footerWidget.height;\n }\n var bottomMargin = HelperMethods.convertPointToPixel(page.bodyWidgets[0].sectionFormat.bottomMargin);\n var isEmpty = page.footerWidget.isEmpty && !this.owner.enableHeaderAndFooter;\n var height = pageRect.height;\n if (isEmpty) {\n height = (height - bottomMargin) * this.documentHelper.zoomFactor;\n }\n else {\n height = (height - Math.min(pageRect.height / 100 * 40, Math.max(footerHeight + footerDistance, bottomMargin))) * this.documentHelper.zoomFactor;\n }\n if ((this.viewer.containerTop + point.y) <= pageBottom && (this.viewer.containerTop + point.y) >= pageTop + height) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.enableHeadersFootersRegion = function (widget, page) {\n if (this.viewer instanceof PageLayoutViewer) {\n this.owner.enableHeaderAndFooter = true;\n widget.page = page;\n this.comparePageWidthAndMargins(widget, page);\n this.updateTextPositionForBlockContainer(widget);\n this.shiftBlockOnHeaderFooterEnableDisable();\n return true;\n }\n return false;\n };\n /**\n * /* Here is the explanation for the code below:\n 1. When there are multiple sections in a document, the first section is the parent section of the other sections.\n 2. If you change the page width or header distance of the parent section, the child section will inherit the page width or header distance of the parent section.\n 3. So when you change the page width or header distance of the parent section, the child section should be relayouted.\n * @private\n */\n Selection.prototype.comparePageWidthAndMargins = function (parentHFWidget, page) {\n var headerFooterType = parentHFWidget.headerFooterType;\n var currentHFWidget;\n var isHeader = headerFooterType.indexOf('Header') != -1;\n var isRelayout = false;\n if (isHeader) {\n currentHFWidget = page.headerWidgetIn;\n }\n else {\n currentHFWidget = page.footerWidgetIn;\n }\n if (!isNullOrUndefined(currentHFWidget)) {\n var parentSectionFormat = parentHFWidget.sectionFormat;\n var currentSectionFormat = currentHFWidget.sectionFormat;\n if (!isNullOrUndefined(parentSectionFormat) && !isNullOrUndefined(currentSectionFormat)) {\n if (isHeader) {\n if (parentHFWidget.width != currentHFWidget.width || parentSectionFormat.headerDistance != currentSectionFormat.headerDistance) {\n isRelayout = true;\n }\n }\n else {\n if (parentHFWidget.width != currentHFWidget.width || parentSectionFormat.footerDistance != currentSectionFormat.footerDistance) {\n isRelayout = true;\n }\n }\n }\n if (isRelayout) {\n this.owner.viewer.updateHFClientArea(parentHFWidget.sectionFormat, isHeader);\n parentHFWidget = this.documentHelper.layout.layoutHeaderFooterItems(this.owner.viewer, parentHFWidget);\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.shiftBlockOnHeaderFooterEnableDisable = function () {\n for (var i = 0; i < this.documentHelper.headersFooters.length; i++) {\n var headerFooter = this.documentHelper.headersFooters[i];\n var bodywidget = this.getBodyWidgetInternal(i, 0);\n if (isNullOrUndefined(bodywidget)) {\n continue;\n }\n var sectionFormat = bodywidget.sectionFormat;\n for (var _i = 0, _a = Object.keys(headerFooter); _i < _a.length; _i++) {\n var key = _a[_i];\n var widget = headerFooter[key];\n if (widget.isEmpty) {\n this.owner.editorModule.shiftPageContent(widget.headerFooterType, sectionFormat);\n }\n }\n }\n };\n /**\n * @private\n */\n Selection.prototype.updateTextPositionForBlockContainer = function (widget) {\n var block = widget.firstChild;\n if (block instanceof TableWidget) {\n block = this.getFirstBlockInFirstCell(block);\n if (block instanceof TableWidget) {\n block = this.getFirstBlockInFirstCell(block);\n }\n }\n this.selectParagraphInternal(block, true);\n };\n /**\n * Disable Header footer\n * @private\n */\n Selection.prototype.disableHeaderFooter = function () {\n var page = this.getPage(this.start.paragraph);\n this.updateTextPositionForBlockContainer(page.bodyWidgets[0]);\n this.owner.enableHeaderAndFooter = false;\n this.shiftBlockOnHeaderFooterEnableDisable();\n };\n //#endregion\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.clear = function () {\n if (this.editRegionHighlighters) {\n this.editRegionHighlighters.clear();\n }\n this.editRangeCollection = [];\n if (this.selectedWidgets) {\n this.selectedWidgets.clear();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.destroy = function () {\n if (!isNullOrUndefined(this.contextTypeInternal)) {\n this.contextTypeInternal = undefined;\n }\n if (this.pasteDropDwn) {\n this.pasteDropDwn.destroy();\n this.pasteDropDwn = undefined;\n }\n this.caret = undefined;\n this.contextTypeInternal = undefined;\n this.upDownSelectionLength = undefined;\n this.owner = undefined;\n this.upDownSelectionLength = undefined;\n this.isSkipLayouting = undefined;\n this.isImageSelected = undefined;\n if (!isNullOrUndefined(this.documentHelper)) {\n this.documentHelper = undefined;\n }\n this.contextTypeInternal = undefined;\n this.isRetrieveFormatting = undefined;\n if (this.characterFormatIn) {\n this.characterFormatIn.destroy();\n }\n this.characterFormatIn = undefined;\n if (this.paragraphFormatIn) {\n this.paragraphFormatIn.destroy();\n }\n this.paragraphFormatIn = undefined;\n if (this.sectionFormatIn) {\n this.sectionFormatIn.destroy();\n }\n this.sectionFormatIn = undefined;\n if (this.tableFormatIn) {\n this.tableFormatIn.destroy();\n }\n this.tableFormatIn = undefined;\n if (this.cellFormatIn) {\n this.cellFormatIn.destroy();\n }\n this.cellFormatIn = undefined;\n if (this.rowFormatIn) {\n this.rowFormatIn.destroy();\n }\n this.rowFormatIn = undefined;\n this.imageFormatInternal = undefined;\n this.skipFormatRetrieval = undefined;\n this.startInternal = undefined;\n this.endInternal = undefined;\n this.htmlWriterIn = undefined;\n this.toolTipElement = undefined;\n if (!isNullOrUndefined(this.toolTipObject)) {\n this.toolTipObject.destroy();\n }\n this.toolTipField = undefined;\n this.isMoveDownOrMoveUp = undefined;\n this.pasteElement = undefined;\n this.currentPasteAction = undefined;\n this.isViewPasteOptions = undefined;\n this.skipEditRangeRetrieval = undefined;\n this.editPosition = undefined;\n if (!isNullOrUndefined(this.selectedWidgets)) {\n this.selectedWidgets.destroy();\n }\n this.isHighlightEditRegionIn = undefined;\n this.isHighlightFormFields = undefined;\n this.editRangeCollection = [];\n this.editRangeCollection = undefined;\n this.isHightlightEditRegionInternal = undefined;\n this.isCurrentUser = undefined;\n this.isHighlightNext = undefined;\n this.hightLightNextParagraph = undefined;\n this.isWebLayout = undefined;\n if (!isNullOrUndefined(this.editRegionHighlighters)) {\n this.editRegionHighlighters.destroy();\n }\n if (!isNullOrUndefined(this.formFieldHighlighters)) {\n this.formFieldHighlighters.destroy();\n }\n this.isCellPrevSelected = undefined;\n this.currentFormField = undefined;\n };\n /**\n * Returns the cells in between the bounds.\n * @param table Specify the table to find cells.\n * @param columnFirst Specify start index of column to find cells.\n * @param columnLast Specify end index of column to find cells.\n * @param bookmark Specify the bookmark element.\n */\n Selection.prototype.getCellsToSelect = function (table, columnFirst, columnLast, bookmark) {\n var rows = table.childWidgets;\n if (isNullOrUndefined(bookmark.paragraph.associatedCell) || !isNullOrUndefined(bookmark.reference) && isNullOrUndefined(bookmark.reference.paragraph.associatedCell)) {\n return undefined;\n }\n var startRowIndex = bookmark.paragraph.associatedCell.ownerRow.rowIndex;\n var endRowIndex = bookmark.reference.paragraph.associatedCell.ownerRow.rowIndex;\n var cellArray = [];\n for (var i = startRowIndex; i <= endRowIndex; i++) {\n var row = rows[i];\n for (var j = columnFirst; j <= columnLast; j++) {\n var cell = row.childWidgets[j];\n if (!isNullOrUndefined(cell)) {\n cellArray.push(cell);\n }\n }\n }\n return cellArray;\n };\n /**\n * Selects the cells between bookmark start and end.\n * @param bookmark Specify the bookmark.\n */\n Selection.prototype.selectBookmarkInTable = function (bookmark) {\n this.documentHelper.clearSelectionHighlight();\n var columnFirst = parseInt(bookmark.properties['columnFirst']);\n var columnLast = parseInt(bookmark.properties['columnLast']);\n var table = bookmark.paragraph.associatedCell.ownerTable;\n var cellArray = this.getCellsToSelect(table, columnFirst, columnLast, bookmark);\n if (!isNullOrUndefined(cellArray)) {\n for (var i = 0; i < cellArray.length; i++) {\n this.highlightCellWidget(cellArray[i]);\n }\n }\n };\n /**\n * Navigates to the specified bookmark.\n * @param name\n * @param moveToStart\n * @param excludeBookmarkStartEnd\n * @private\n */\n Selection.prototype.navigateBookmark = function (name, moveToStart, excludeBookmarkStartEnd) {\n var bookmarks = this.documentHelper.bookmarks;\n if (bookmarks.containsKey(name)) {\n //bookmark start element\n var bookmrkElmnt = bookmarks.get(name);\n if (!isNullOrUndefined(bookmrkElmnt.properties)) {\n this.selectBookmarkInTable(bookmrkElmnt);\n }\n else {\n var offset = bookmrkElmnt.line.getOffset(bookmrkElmnt, 0);\n if (excludeBookmarkStartEnd) {\n offset++;\n }\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(bookmrkElmnt.line, offset);\n if (moveToStart) {\n this.documentHelper.selection.selectRange(startPosition, startPosition, true);\n }\n else {\n //bookmark end element\n var bookmrkEnd = bookmrkElmnt.reference;\n if (bookmrkElmnt.reference && bookmrkElmnt.reference.line.paragraph.bodyWidget == null) {\n bookmrkEnd = bookmrkElmnt;\n }\n var endoffset = bookmrkEnd.line.getOffset(bookmrkEnd, 1);\n if (bookmrkEnd instanceof BookmarkElementBox && !excludeBookmarkStartEnd) {\n if (!isNullOrUndefined(bookmrkEnd.properties)) {\n if (bookmrkEnd.properties['isAfterParagraphMark']) {\n endoffset = bookmrkEnd.line.getOffset(bookmrkEnd, 1);\n }\n }\n }\n if (excludeBookmarkStartEnd) {\n endoffset--;\n }\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(bookmrkEnd.line, endoffset);\n //selects the bookmark range\n this.documentHelper.selection.selectRange(startPosition, endPosition, true);\n }\n }\n }\n };\n /**\n * Selects the specified bookmark.\n * @param name Specify the bookmark name to select.\n * @param excludeBookmarkStartEnd Specify true to exclude bookmark start and end from selection, otherwise false.\n */\n Selection.prototype.selectBookmark = function (name, excludeBookmarkStartEnd) {\n this.navigateBookmark(name, undefined, excludeBookmarkStartEnd);\n };\n /**\n * Returns the toc field from the selection.\n * @private\n */\n Selection.prototype.getTocField = function () {\n var paragraph = this.start.paragraph;\n var tocPara = undefined;\n while ((paragraph !== undefined && this.isTocStyle(paragraph))) {\n tocPara = paragraph;\n paragraph = paragraph.previousRenderedWidget;\n }\n if (tocPara !== undefined) {\n var lineWidget = tocPara.childWidgets[0];\n if (lineWidget !== undefined) {\n return lineWidget.children[0];\n }\n }\n return undefined;\n };\n /**\n * Returns true if the paragraph has toc style.\n */\n Selection.prototype.isTocStyle = function (paragraph) {\n var style = paragraph.paragraphFormat.baseStyle;\n return (style !== undefined && (style.name.toLowerCase().indexOf('toc') !== -1));\n };\n /**\n * Return true if selection is in TOC\n * @private\n */\n Selection.prototype.isTOC = function () {\n var info = this.getParagraphInfo(this.start);\n var para = info.paragraph;\n for (var i = 0; i < para.childWidgets[0].children.length; i++) {\n var element = para.childWidgets[0].children[i];\n if (element instanceof FieldElementBox) {\n var fieldCode = this.owner.selectionModule.getFieldCode(element);\n if (fieldCode.match('TOC ') || fieldCode.match('Toc')) {\n return true;\n }\n }\n else {\n continue;\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getElementsForward = function (lineWidget, startElement, endElement, bidi) {\n if (isNullOrUndefined(startElement)) {\n return undefined;\n }\n var elements = [];\n // while (bidi && startElement && startElement !== endElement && startElement.nextElement && !startElement.isRightToLeft) {\n // startElement = startElement.nextElement;\n // }\n // while (bidi && endElement && startElement !== endElement && endElement.previousElement && !endElement.isRightToLeft) {\n // endElement = endElement.previousElement;\n // }\n var elementIndex = lineWidget.children.indexOf(startElement);\n while (elementIndex >= 0) {\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n var inlineElement = lineWidget.children[i];\n if (inlineElement.line === lineWidget) {\n if (inlineElement === endElement) {\n elements.push(inlineElement);\n elementIndex = -1;\n break;\n }\n else {\n elements.push(inlineElement);\n }\n }\n else {\n elementIndex = -1;\n break;\n }\n }\n // inline = inline !== null && inline.NextNode !== null ? (inline.NextNode as Inline).GetNextRenderedInline() : null;\n elementIndex = -1;\n }\n return elements.length === 0 ? undefined : elements;\n };\n // Gets the current line elements in inline reverse order from the end element.\n /**\n * @private\n */\n Selection.prototype.getElementsBackward = function (lineWidget, startElement, endElement, bidi) {\n var elements = [];\n while (bidi && startElement && startElement.previousElement && (!startElement.isRightToLeft\n || startElement instanceof TextElementBox && this.documentHelper.textHelper.isRTLText(startElement.text))) {\n startElement = startElement.previousElement;\n }\n var elementIndex = lineWidget.children.indexOf(startElement);\n while (elementIndex >= 0) {\n for (var i = elementIndex; i > -1 && i < lineWidget.children.length; bidi ? i++ : i--) {\n var inlineElement = lineWidget.children[i];\n if (inlineElement.line === lineWidget) {\n elements.push(inlineElement);\n }\n else {\n elementIndex = -1;\n break;\n }\n }\n // inline = inline !== null && inline.NextNode !== null ? (inline.NextNode as Inline).GetNextRenderedInline() : null;\n elementIndex = -1;\n }\n return elements;\n };\n /**\n * Navigates to the previous comment in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigatePreviousComment = function () {\n this.commentNavigateInternal(false);\n };\n /**\n * Navigates to the next comment in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigateNextComment = function () {\n this.commentNavigateInternal(true);\n };\n Selection.prototype.commentNavigateInternal = function (next) {\n if (!this.documentHelper.currentSelectedComment) {\n if (this.documentHelper.comments.length === 0) {\n return;\n }\n this.documentHelper.currentSelectedComment = this.documentHelper.comments[0];\n }\n if (this.documentHelper.currentSelectedComment) {\n var comments = this.documentHelper.comments;\n var comment = this.documentHelper.currentSelectedComment;\n var index = comments.indexOf(comment);\n if (next) {\n comment = (index === (comments.length - 1)) ? comments[0] : comments[index + 1];\n }\n else {\n comment = index === 0 ? comments[comments.length - 1] : comments[index - 1];\n }\n this.documentHelper.currentSelectedComment = comment;\n this.selectComment(comment);\n }\n };\n /**\n * Navigates to the previous revision in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigatePreviousRevision = function () {\n this.revisionNavigateInternal(false);\n };\n /**\n * Navigates to the next revision in the document.\n *\n * @returns {void}\n */\n Selection.prototype.navigateNextRevision = function () {\n this.revisionNavigateInternal(true);\n };\n /**\n * Method to navigate revisions\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.revisionNavigateInternal = function (next) {\n if (!this.documentHelper.currentSelectedRevisionInternal) {\n if (this.documentHelper.owner.revisions.length === 0) {\n return;\n }\n this.documentHelper.currentSelectedRevision = this.documentHelper.owner.revisions.get(0);\n }\n if (this.documentHelper.currentSelectedRevision) {\n var revisions = this.documentHelper.owner.revisions.changes;\n var revision = this.documentHelper.currentSelectedRevision;\n var index = revisions.indexOf(revision);\n if (next) {\n revision = (index === (revisions.length - 1)) ? revisions[0] : revisions[index + 1];\n }\n else {\n revision = index === 0 ? revisions[revisions.length - 1] : revisions[index - 1];\n }\n this.documentHelper.currentSelectedRevision = revision;\n this.selectRevision(revision);\n }\n this.owner.trackChangesPane.currentSelectedRevision = this.documentHelper.currentSelectedRevision;\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.selectComment = function (comment) {\n if (!isNullOrUndefined(comment)) {\n var startPosition = this.getElementPosition(comment.commentStart, true).startPosition;\n var endPosition = this.getElementPosition(comment.commentEnd, false).startPosition;\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.selectComment(comment);\n }\n this.selectPosition(startPosition, endPosition);\n }\n };\n /**\n * @private\n * @param revision\n * @returns {void}\n */\n Selection.prototype.selectRevision = function (revision, startPosition, endPosition) {\n var isSelect = false;\n if (isNullOrUndefined(startPosition) && isNullOrUndefined(endPosition)) {\n isSelect = true;\n }\n if (!isNullOrUndefined(revision) && revision.range.length > 0) {\n var firstElement = revision.range[0];\n var lastElement = revision.range[revision.range.length - 1];\n if (firstElement instanceof WRowFormat) {\n var rowWidget = firstElement.ownerBase;\n var firstCell = rowWidget.childWidgets[0];\n var lastCell = rowWidget.childWidgets[rowWidget.childWidgets.length - 1];\n var firstPara = this.getFirstParagraph(firstCell);\n var lastPara = this.getLastParagraph(lastCell);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n this.selectPosition(this.start, this.end);\n }\n else if (firstElement && lastElement) {\n if (isNullOrUndefined(startPosition)) {\n startPosition = new TextPosition(this.owner);\n }\n var offset = 0;\n if (firstElement instanceof WCharacterFormat) {\n var currentPara = firstElement.ownerBase;\n // Set the offset based on length of para - length of remaning lines except last line because we have added the remaning line length in getParagraphInfoInternal method.\n //when we have add para length to the offset, again added the length of remaning lines except last line in getParagraphInfoInternal method. so when perform undo, the offset is greater than para length + 1. in this case, we set the para length to start and end offset, so paramark doesn't comes to selection region (undo case for splitted para but paramark only tracked).\n if (currentPara.childWidgets.length > 1) {\n offset = this.getParagraphLength(currentPara) - this.getParagraphLength(currentPara, currentPara.lastChild);\n }\n else {\n // added the condition to set offset to paragraph start when para without contain text elements.\n if (this.isEmptyWidget(currentPara)) {\n offset = 0;\n }\n else {\n offset = currentPara.getLength();\n }\n }\n startPosition.setPositionParagraph(currentPara.lastChild, offset);\n }\n else {\n offset = firstElement.line.getOffset(firstElement, 0);\n var line = firstElement.line;\n if (line.isFirstLine()) {\n for (var i = 0; i < line.children.length; i++) {\n if (firstElement === line.children[i] && line.children[i] instanceof TextElementBox && !(line.children[i] instanceof FootnoteElementBox)) {\n offset = 0;\n break;\n }\n else if (line.children[i] instanceof TextElementBox) {\n break;\n }\n }\n }\n startPosition.setPositionForLineWidget(firstElement.line, offset);\n }\n if (isNullOrUndefined(endPosition)) {\n endPosition = new TextPosition(this.owner);\n }\n if (lastElement instanceof WCharacterFormat) {\n var currentPara = lastElement.ownerBase;\n var splittedWidgets = currentPara.getSplitWidgets();\n currentPara = splittedWidgets[splittedWidgets.length - 1];\n if (currentPara.isEndsWithPageBreak || currentPara.isEndsWithColumnBreak) {\n this.owner.trackChangesPane.isTrackingPageBreak = true;\n }\n // Changed the condition to get last child of current paragraph instead of next para of current para if current para contain page break\n if (currentPara.childWidgets.length > 1) {\n offset = this.getParagraphLength(currentPara) - this.getParagraphLength(currentPara, currentPara.lastChild);\n }\n else {\n offset = currentPara.getLength();\n }\n endPosition.setPositionParagraph(currentPara.lastChild, offset + 1);\n }\n else {\n offset = lastElement.line.getOffset(lastElement, 0) + lastElement.length;\n if (this.isTOC()) {\n offset += 1;\n }\n endPosition.setPositionForLineWidget(lastElement.line, offset);\n }\n var curentPosition = startPosition.clone();\n if (!startPosition.isExistBefore(endPosition)) {\n startPosition = endPosition;\n endPosition = curentPosition;\n }\n if (isSelect) {\n this.selectPosition(startPosition, endPosition);\n }\n }\n }\n };\n Selection.prototype.isEmptyWidget = function (block) {\n if (block instanceof TableWidget) {\n return false;\n }\n else if (block.isEmpty()) {\n return true;\n }\n else {\n for (var i = 0; i < block.childWidgets.length; i++) {\n var line = block.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n if (line.children[j] instanceof TextElementBox) {\n return false;\n }\n }\n }\n return true;\n }\n };\n /**\n * @private\n */\n Selection.prototype.selectTableRevision = function (revision) {\n if (!isNullOrUndefined(revision) && revision[0].range.length > 0) {\n var firstElementTable = revision[0].range[0];\n var lastElementTable = revision[revision.length - 1].range[0];\n if (firstElementTable instanceof WRowFormat) {\n var firstRowWidget = firstElementTable.ownerBase;\n var firstCell = firstRowWidget.childWidgets[0];\n var secondRowWidget = lastElementTable.ownerBase;\n var lastCell = secondRowWidget.childWidgets[secondRowWidget.childWidgets.length - 1];\n var firstPara = this.getFirstParagraph(firstCell);\n var lastPara = this.getLastParagraph(lastCell);\n this.start.setPosition(firstPara.firstChild, true);\n this.end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n this.selectPosition(this.start, this.end);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.updateEditRangeCollection = function () {\n if (this.editRangeCollection.length > 0) {\n this.editRangeCollection = [];\n }\n var editRangeStart;\n var everyOneArea;\n if (!this.documentHelper.isDocumentProtected) {\n for (var i = 0; i < this.documentHelper.editRanges.length; i++) {\n var user = this.documentHelper.editRanges.keys[i];\n editRangeStart = this.documentHelper.editRanges.get(user);\n for (var j = 0; j < editRangeStart.length; j++) {\n this.editRangeCollection.push(editRangeStart[j]);\n }\n }\n }\n else {\n if (this.documentHelper.editRanges.containsKey(this.owner.currentUser)) {\n editRangeStart = this.documentHelper.editRanges.get(this.owner.currentUser);\n for (var j = 0; j < editRangeStart.length; j++) {\n this.editRangeCollection.push(editRangeStart[j]);\n }\n }\n if (this.documentHelper.editRanges.containsKey('Everyone')) {\n var user = 'Everyone';\n everyOneArea = this.documentHelper.editRanges.get(user);\n for (var j = 0; j < everyOneArea.length; j++) {\n this.editRangeCollection.push(everyOneArea[j]);\n }\n }\n }\n };\n //Restrict editing implementation starts\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.onHighlight = function () {\n if (this.isHighlightEditRegion) {\n this.highlightEditRegion();\n }\n else {\n this.unHighlightEditRegion();\n }\n this.viewer.renderVisiblePages();\n };\n //Restrict editing implementation starts\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.onHighlightContentControl = function () {\n if (this.isHighlightContentControlEditRegionIn) {\n if (this.documentHelper.contentControlCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n if (this.documentHelper.contentControlCollection[i].paragraph.isInHeaderFooter && this.documentHelper.owner.layoutType === \"Continuous\") {\n continue;\n }\n this.highlightContentControlEditRegionInternal(this.documentHelper.contentControlCollection[i]);\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightContentControlEditRegionInternal = function (editRangeStart) {\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n this.highlight(editRangeStart.line.paragraph, startPosition, endPosition, editRangeStart);\n var currentParagraph = editRangeStart.line.paragraph;\n while (currentParagraph !== endPosition.paragraph) {\n if (currentParagraph.nextRenderedWidget instanceof ParagraphWidget) {\n currentParagraph = currentParagraph.nextRenderedWidget;\n this.highlight(currentParagraph, startPosition, endPosition, editRangeStart);\n }\n else {\n return;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightEditRegion = function () {\n this.updateEditRangeCollection();\n if (this.owner.enableLockAndEdit) {\n this.viewer.updateScrollBars();\n return;\n }\n if (!this.isHighlightEditRegion) {\n this.unHighlightEditRegion();\n return;\n }\n this.isHightlightEditRegionInternal = true;\n if (isNullOrUndefined(this.editRegionHighlighters)) {\n this.editRegionHighlighters = new Dictionary();\n }\n this.editRegionHighlighters.clear();\n for (var j = 0; j < this.editRangeCollection.length; j++) {\n this.highlightEditRegionInternal(this.editRangeCollection[j]);\n }\n this.isHightlightEditRegionInternal = false;\n this.viewer.updateScrollBars();\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightFormFields = function () {\n if (isNullOrUndefined(this.formFieldHighlighters)) {\n this.formFieldHighlighters = new Dictionary();\n }\n this.formFieldHighlighters.clear();\n var formFields = this.documentHelper.formFields;\n if (!isNullOrUndefined(formFields) && formFields.length > 0) {\n for (var i = 0; i < formFields.length; i++) {\n var formField = formFields[i];\n if (HelperMethods.isLinkedFieldCharacter(formField)) {\n var offset = formField.line.getOffset(formField, 0);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(formField.line, offset);\n var endElement = formField.fieldEnd;\n offset = endElement.line.getOffset(endElement, 1);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(endElement.line, offset);\n this.isHighlightFormFields = true;\n this.highlight(startPosition.paragraph, startPosition, endPosition);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, startPosition, endPosition);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n }\n this.isHighlightFormFields = false;\n this.viewer.updateScrollBars();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.unHighlightEditRegion = function () {\n if (!isNullOrUndefined(this.editRegionHighlighters)) {\n this.editRegionHighlighters.clear();\n this.editRegionHighlighters = undefined;\n }\n this.isHightlightEditRegionInternal = false;\n };\n /**\n * @private\n * @returns {void}\n */\n Selection.prototype.highlightEditRegionInternal = function (editRangeStart) {\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n // if (editRangeStart.user === this.owner.currentUser && editRangeStart.group === '') {\n this.isCurrentUser = true;\n // }\n this.highlightEditRegions(editRangeStart, startPosition, endPosition);\n this.isCurrentUser = false;\n };\n /**\n * Shows all the editing region, where current user can edit.\n *\n * @returns {void}\n */\n Selection.prototype.showAllEditingRegion = function () {\n if (this.editRangeCollection.length === 0) {\n this.updateEditRangeCollection();\n }\n this.documentHelper.clearSelectionHighlight();\n for (var j = 0; j < this.editRangeCollection.length; j++) {\n var editRangeStart = this.editRangeCollection[j];\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n this.highlightEditRegions(editRangeStart, startPosition, endPosition);\n }\n };\n Selection.prototype.highlightEditRegions = function (editRangeStart, startPosition, endPosition) {\n if (!editRangeStart.line.paragraph.isInsideTable\n || (editRangeStart.line.paragraph.isInsideTable && !editRangeStart.editRangeEnd.line.paragraph.isInsideTable) || editRangeStart.columnFirst === -1) {\n this.highlight(editRangeStart.line.paragraph, startPosition, endPosition);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, startPosition, endPosition);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n else {\n var row = editRangeStart.line.paragraph.associatedCell.ownerRow;\n var cell = row.childWidgets[editRangeStart.columnFirst];\n if (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n if (cell.childWidgets[i] instanceof ParagraphWidget) {\n this.highlight(cell.childWidgets[i], startPosition, endPosition);\n if (this.isHighlightNext) {\n this.highlightNextBlock(this.hightLightNextParagraph, startPosition, endPosition);\n this.isHighlightNext = false;\n this.hightLightNextParagraph = undefined;\n }\n }\n }\n }\n }\n };\n /**\n * Navigates to the next editing region, where current user can edit.\n *\n * @returns {void}\n */\n Selection.prototype.navigateToNextEditingRegion = function () {\n var editRange = this.getEditRangeStartElement();\n if (this.editRangeCollection.length > 0) {\n this.sortEditRangeCollection();\n var length_2 = this.editRangeCollection.length;\n var index = length_2;\n if (!isNullOrUndefined(editRange)) {\n index = this.editRangeCollection.indexOf(editRange);\n }\n var editRangeStart = index < length_2 - 1 ?\n this.editRangeCollection[index + 1] : this.editRangeCollection[0];\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n this.selectRange(startPosition, endPosition);\n }\n };\n Selection.prototype.sortEditRangeCollection = function () {\n //Sort based on position\n for (var i = this.editRangeCollection.length - 1; i >= 0; i--) {\n for (var j = 1; j <= i; j++) {\n var nextPosition = this.getPosition(this.editRangeCollection[j - 1]).startPosition;\n var firstPosition = this.getPosition(this.editRangeCollection[j]).startPosition;\n if (nextPosition.isExistAfter(firstPosition)) {\n var temp = this.editRangeCollection[j - 1];\n this.editRangeCollection[j - 1] = this.editRangeCollection[j];\n this.editRangeCollection[j] = temp;\n }\n }\n }\n };\n /**\n * Highlights all the editing region, where current user can edit.\n *\n * @returns {void}\n */\n Selection.prototype.toggleEditingRegionHighlight = function () {\n this.isHighlightEditRegion = !this.isHighlightEditRegion;\n };\n /**\n * @private\n */\n Selection.prototype.getEditRangeStartElement = function () {\n for (var i = 0; i < this.editRangeCollection.length; i++) {\n var editStart = this.editRangeCollection[i];\n var position = this.getPosition(editStart);\n var start = position.startPosition;\n var end = position.endPosition;\n if ((this.start.isExistAfter(start) || this.start.isAtSamePosition(start))\n && (this.end.isExistBefore(end) || this.end.isAtSamePosition(end))) {\n return editStart;\n }\n }\n return undefined;\n };\n /**\n * Determines whether the selection is inside the edit region.\n *\n * @returns {boolean} Returns true if the selection is inside the edit region; Otherwise, false.\n */\n Selection.prototype.isSelectionInEditRegion = function () {\n if (!this.documentHelper.isDocumentProtected) {\n return false;\n }\n return this.checkSelectionIsAtEditRegion();\n };\n /**\n * Determines whether the specified start and end position of the selection is inside the edit region.\n * @param {TextPosition} start Specify the start position of the selection.\n * @param {TextPosition} end Specify the end position of the selection.\n * @returns {boolean} Returns true if the specified start and end position of the selection is inside the edit region; Otherwise, false.\n */\n Selection.prototype.checkSelectionIsAtEditRegion = function (start, end) {\n if (isNullOrUndefined(start) && isNullOrUndefined(end)) {\n start = this.start;\n end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n }\n for (var i = 0; i < this.editRangeCollection.length; i++) {\n var editRangeStart = this.editRangeCollection[i];\n if (!editRangeStart.line.paragraph.isInsideTable\n || (editRangeStart.line.paragraph.isInsideTable && !editRangeStart.editRangeEnd.line.paragraph.isInsideTable)\n || editRangeStart.columnFirst === -1) {\n if (this.isSelectionInsideEditRange(editRangeStart, start, end)) {\n return true;\n }\n }\n else {\n if (editRangeStart.paragraph.isInsideTable && editRangeStart.editRangeEnd &&\n editRangeStart.editRangeEnd.line.paragraph.isInsideTable) {\n var editRangeRow = editRangeStart.paragraph.associatedCell.ownerRow;\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n if (!isNullOrUndefined(startCell) && !isNullOrUndefined(endCell)) {\n if (editRangeRow.equals(startCell.ownerRow) && editRangeRow.equals(endCell.ownerRow)\n && startCell.index >= editRangeStart.columnFirst && startCell.index <= editRangeStart.columnLast) {\n if (this.isEmpty && startCell.index === editRangeStart.line.paragraph.associatedCell.index) {\n if (this.isSelectionInsideEditRange(editRangeStart, start, end)) {\n return true;\n }\n }\n else if (!this.isCellSelected(startCell, start, end)) {\n return true;\n }\n }\n }\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.isEditRangeCellSelected = function (start, end) {\n if (isNullOrUndefined(start) && isNullOrUndefined(end)) {\n start = this.start;\n end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n }\n for (var i = 0; i < this.editRangeCollection.length; i++) {\n var editRangeStart = this.editRangeCollection[i];\n if (editRangeStart.paragraph.isInsideTable && editRangeStart.editRangeEnd &&\n editRangeStart.editRangeEnd.line.paragraph.isInsideTable) {\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var editRangeCell = editRangeStart.paragraph.associatedCell;\n if (!isNullOrUndefined(startCell) && !isNullOrUndefined(endCell)) {\n if (startCell.index >= editRangeStart.columnFirst && startCell.index <= editRangeStart.columnLast) {\n if (this.isCellSelected(editRangeCell, start, end)) {\n return true;\n }\n }\n }\n }\n }\n return false;\n };\n Selection.prototype.isSelectionInsideEditRange = function (editRangeStart, start, end) {\n var positionInfo = this.getPosition(editRangeStart);\n var startPosition = positionInfo.startPosition;\n var endPosition = positionInfo.endPosition;\n if ((start.isExistAfter(startPosition) || start.isAtSamePosition(startPosition))\n && (end.isExistBefore(endPosition) || end.isAtSamePosition(endPosition))) {\n return true;\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getPosition = function (element) {\n var offset = element.line.getOffset(element, 1);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(element.line, offset);\n var endElement;\n if (element instanceof EditRangeStartElementBox) {\n endElement = element.editRangeEnd;\n }\n else if (element instanceof ContentControl) {\n endElement = element.reference;\n }\n else if (element instanceof BookmarkElementBox) {\n endElement = element.reference;\n }\n else if (element instanceof CommentCharacterElementBox) {\n endElement = element.comment.commentEnd;\n }\n var endPosition;\n var line = endElement.line;\n if (!isNullOrUndefined(endElement.line) && !isNullOrUndefined(line.children)) {\n offset = endElement.line.getOffset(endElement, 1);\n endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(endElement.line, offset);\n }\n else {\n endPosition = startPosition.clone();\n }\n return { 'startPosition': startPosition, 'endPosition': endPosition };\n };\n /**\n * @private\n */\n Selection.prototype.checkContentControlLocked = function (checkFormat) {\n this.owner.editorModule.isXmlMapped = false;\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n var contentControlStart = this.documentHelper.contentControlCollection[i];\n if (isNullOrUndefined(contentControlStart.reference) || contentControlStart.reference.indexInOwner === -1) {\n continue;\n }\n var position = this.getPosition(contentControlStart);\n var cCstart = position.startPosition;\n var cCend = position.endPosition;\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(checkFormat)) {\n var cCStartInsideSelction = ((cCstart.isExistAfter(start) || cCstart.isAtSamePosition(start)) && (cCstart.isExistBefore(end) || cCstart.isAtSamePosition(end)));\n var cCEndInsideSelction = ((cCend.isExistAfter(start) || cCend.isAtSamePosition(start)) && (cCend.isExistBefore(end) || cCend.isAtSamePosition(end)));\n if (cCStartInsideSelction && cCEndInsideSelction) {\n if (contentControlStart.contentControlProperties.lockContentControl) {\n this.owner.trigger(contentControlEvent);\n return true;\n }\n return false;\n }\n if ((cCStartInsideSelction) || (cCEndInsideSelction)) {\n if (!(cCstart.isAtSamePosition(start) || cCend.isAtSamePosition(start)) && (contentControlStart.contentControlProperties.lockContentControl || contentControlStart.contentControlProperties.lockContents)) {\n return true;\n }\n }\n }\n if ((start.isExistAfter(cCstart) || start.isAtSamePosition(cCstart))\n && (end.isExistBefore(cCend) || end.isAtSamePosition(cCend))) {\n if (contentControlStart.contentControlProperties.xmlMapping\n && contentControlStart.contentControlProperties.xmlMapping.isMapped) {\n this.owner.editorModule.isXmlMapped = true;\n }\n if (contentControlStart.contentControlProperties.lockContents) {\n this.owner.trigger(contentControlEvent);\n return true;\n }\n else if (isNullOrUndefined(checkFormat)\n && (contentControlStart.contentControlProperties.type === 'CheckBox'\n || contentControlStart.contentControlProperties.type === 'ComboBox'\n || contentControlStart.contentControlProperties.type === 'DropDownList'\n || contentControlStart.contentControlProperties.type === 'Date'\n || contentControlStart.contentControlProperties.type === 'Picture'\n || contentControlStart.contentControlProperties.type === 'Text'\n || contentControlStart.contentControlProperties.type === 'RichText')) {\n this.owner.trigger(contentControlEvent);\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Selection.prototype.getElementPosition = function (element, isEnd) {\n var offset = element.line.getOffset(element, isEnd ? 0 : 1);\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(element.line, offset);\n return { 'startPosition': startPosition, 'endPosition': undefined };\n };\n //Restrict editing implementation ends\n /**\n * Update ref field.\n * @private\n */\n Selection.prototype.updateRefField = function (field) {\n if (isNullOrUndefined(field)) {\n field = this.getHyperlinkField(true);\n }\n if (!isNullOrUndefined(field)) {\n if (!this.isReferenceField(field)) {\n return;\n }\n var fieldCode = this.getFieldCode(field).replace(/\\s+/g, ' ');\n fieldCode = fieldCode.trim();\n if (fieldCode.toLowerCase().indexOf('ref') === 0) {\n var code = fieldCode.split(' ');\n if (code.length > 1) {\n var bookmarkId = code[1];\n if (this.documentHelper.bookmarks.containsKey(bookmarkId)) {\n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n var bookmarkStart = this.documentHelper.bookmarks.get(bookmarkId);\n var bookmarkEnd = bookmarkStart.reference;\n var previousNode = bookmarkStart.previousNode;\n if ((isNullOrUndefined(previousNode) || !(previousNode instanceof FieldElementBox))\n && bookmarkEnd && bookmarkEnd.previousNode instanceof FieldElementBox\n && bookmarkEnd.previousNode.fieldType === 1\n && !isNullOrUndefined(bookmarkEnd.previousNode.fieldBegin)\n && !isNullOrUndefined(bookmarkEnd.previousNode.fieldBegin.formFieldData)) {\n bookmarkStart = bookmarkEnd.previousNode.fieldBegin.fieldSeparator;\n bookmarkEnd = bookmarkEnd.previousNode.fieldBegin.fieldEnd;\n }\n else if (previousNode instanceof FieldElementBox && previousNode.fieldType === 0\n && !isNullOrUndefined(previousNode.formFieldData)) {\n bookmarkStart = previousNode.fieldSeparator;\n bookmarkEnd = previousNode.fieldEnd;\n }\n var offset = bookmarkStart.line.getOffset(bookmarkStart, 1);\n start.setPositionParagraph(bookmarkStart.line, offset);\n end.setPositionParagraph(bookmarkEnd.line, bookmarkEnd.line.getOffset(bookmarkEnd, 0));\n var documentContent = this.owner.sfdtExportModule.write((this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0), start.currentWidget, start.offset, end.currentWidget, end.offset, false, true);\n var startElement = field.fieldSeparator;\n var endElement = field.fieldEnd;\n start.setPositionParagraph(startElement.line, startElement.line.getOffset(startElement, 1));\n end.setPositionParagraph(endElement.line, endElement.line.getOffset(endElement, 0));\n this.owner.editorModule.pasteContents(documentContent);\n }\n }\n }\n }\n };\n /**\n *\n * @private\n * @returns {void}\n */\n Selection.prototype.footnoteReferenceElement = function (start, end, inline) {\n var container = this.getContainerWidget(start.paragraph);\n var count = 0;\n if (container instanceof FootNoteWidget) {\n var footNoteElement = this.start.paragraph.bodyWidget.footNoteReference;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n count = 0;\n var page = this.documentHelper.pages[i];\n for (var j = 0; j < page.bodyWidgets.length; j++) {\n var bodyWidget = page.bodyWidgets[j];\n for (var k = 0; k < bodyWidget.childWidgets.length; k++) {\n var paragraph = bodyWidget.childWidgets[k];\n if (paragraph instanceof TableWidget) {\n for (var tr = 0; tr < paragraph.childWidgets.length; tr++) {\n var tablerow = paragraph.childWidgets[tr];\n for (var tc = 0; tc < tablerow.childWidgets.length; tc++) {\n var tablecell = tablerow.childWidgets[tc];\n for (var para = 0; para < tablecell.childWidgets.length; para++) {\n var paragr = tablecell.childWidgets[para];\n for (var line = 0; line < paragr.childWidgets.length; line++) {\n var lines = paragr.childWidgets[line];\n count = 0;\n if (!isNullOrUndefined(lines.children)) {\n for (var m = 0; m < lines.children.length; m++) {\n var child = lines.children[m];\n count += child.length;\n if (child instanceof FootnoteElementBox && child === footNoteElement) {\n start.setPositionParagraph(lines, count - 1);\n end.setPositionParagraph(lines, count);\n this.selectRange(start, end);\n }\n }\n }\n }\n }\n }\n }\n }\n else {\n for (var l = 0; l < paragraph.childWidgets.length; l++) {\n var lines = paragraph.childWidgets[l];\n count = 0;\n if (!isNullOrUndefined(lines.children)) {\n for (var m = 0; m < lines.children.length; m++) {\n var child = lines.children[m];\n count += child.length;\n if (child instanceof FootnoteElementBox && child === footNoteElement) {\n start.setPositionParagraph(lines, count - 1);\n end.setPositionParagraph(lines, count);\n this.selectRange(start, end);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n };\n /**\n * Convert hierachical index to linear index;\n * @private\n */\n Selection.prototype.getAbsolutePositionFromRelativePosition = function (textPosition) {\n var startPosition;\n if (typeof textPosition == 'string') {\n startPosition = this.getTextPosBasedOnLogicalIndex(textPosition);\n }\n else {\n startPosition = textPosition;\n }\n var paragraphInfo = this.getParagraphInfo(startPosition);\n var positionInfo = { position: 0, done: false };\n this.getPositionInfoForHeaderFooter(paragraphInfo, positionInfo);\n if (!positionInfo.done) {\n //Iterate Footnotes content;\n }\n return positionInfo.position;\n };\n /**\n * @private\n */\n Selection.prototype.getPositionInfoForBodyContent = function (paragraphInfo, positionInfo, blockWidget, tableBlock) {\n var block = !isNullOrUndefined(blockWidget) ? blockWidget : this.documentHelper.pages[0].bodyWidgets[0].childWidgets[0];\n //Iterate body content;\n positionInfo.position += this.getBlockIndex(block, paragraphInfo, positionInfo, tableBlock);\n return positionInfo;\n };\n /**\n * @private\n */\n Selection.prototype.getPositionInfoForHeaderFooter = function (paragraphInfo, positionInfo, tableBlock) {\n positionInfo = this.getPositionInfoForBodyContent(paragraphInfo, positionInfo, undefined, tableBlock);\n if (!positionInfo.done) {\n //Iterate header/footer content;\n this.getBlockIndexFromHeaderFooter(paragraphInfo, positionInfo, tableBlock);\n }\n return positionInfo;\n };\n Selection.prototype.getBlockIndexFromHeaderFooter = function (paragraphInfo, positionInfo, tableBlock) {\n //Iterate header/footer content;\n var headersFooters = this.documentHelper.headersFooters;\n for (var _i = 0, headersFooters_1 = headersFooters; _i < headersFooters_1.length; _i++) {\n var headerFooter = headersFooters_1[_i];\n for (var i = 0; i < 6; i++) {\n var currentHeaderFooter = headerFooter[i];\n if (currentHeaderFooter) {\n positionInfo.position += this.getBlockIndex(currentHeaderFooter.childWidgets[0], paragraphInfo, positionInfo, tableBlock);\n if (positionInfo.done) {\n return positionInfo;\n }\n }\n else {\n positionInfo.position += 1;\n }\n }\n }\n return positionInfo;\n };\n Selection.prototype.getBlockIndex = function (block, paragraphInfo, positionInfo, tableBlock) {\n var position = 0;\n var fieldResult = { length: 0 };\n do {\n if (block instanceof ParagraphWidget && !isNullOrUndefined(paragraphInfo) && !isNullOrUndefined(paragraphInfo.paragraph) && paragraphInfo.paragraph.equals(block)) {\n //Paragraph start\n position += 1;\n var elementInfo = block.getInline(paragraphInfo.offset, 0);\n position += this.getBlockOffsetByElement(paragraphInfo, block, elementInfo.element, elementInfo.index, fieldResult);\n // if (this.isEndOffset && this.end.offset === this.getLineLength(this.end.currentWidget) + 1) {\n // position += 1;\n // }\n // if (this.owner.documentHelper.isDocumentProtected && this.owner.documentHelper.protectionType === 'FormFieldsOnly') {\n // position -= fieldResult.length;\n // }\n positionInfo.done = true;\n break;\n }\n position = this.getBlockLength(paragraphInfo, block, position, positionInfo, true, tableBlock, fieldResult);\n if (positionInfo.done) {\n // if (this.owner.documentHelper.isDocumentProtected && this.owner.documentHelper.protectionType === 'FormFieldsOnly') {\n // position -= fieldResult.length;\n // }\n break;\n }\n if (!isNullOrUndefined(block)) {\n if (block.containerWidget instanceof BodyWidget && block.containerWidget.containerWidget instanceof FootNoteWidget) {\n var nextBlock = block.getSplitWidgets().pop().nextRenderedWidget;\n if (!isNullOrUndefined(nextBlock) && block.containerWidget !== nextBlock.containerWidget) {\n break;\n }\n else {\n block = nextBlock;\n }\n }\n else {\n block = block.getSplitWidgets().pop().nextRenderedWidget;\n }\n }\n } while (block);\n //positionInfo.position = position;\n return position;\n };\n Selection.prototype.getBlockTotalLength = function (block, targetBlock, positionInfo, tableBlock, fieldResult) {\n var offset = 0;\n var isDropdown = false;\n var splittedWidget = block.getSplitWidgets();\n for (var i = 0; i < splittedWidget.length; i++) {\n for (var j = 0; j < splittedWidget[i].childWidgets.length; j++) {\n var line = splittedWidget[i].childWidgets[j];\n for (var k = 0; k < line.children.length; k++) {\n var element = line.children[k];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (element instanceof ShapeElementBox || element instanceof FootnoteElementBox) {\n if (element instanceof ShapeElementBox) {\n if (element.textFrame.childWidgets.length > 0) {\n offset += this.getBlockIndex(element.textFrame.childWidgets[0], targetBlock, positionInfo, undefined);\n }\n }\n else {\n offset += this.getBlockIndex(element.bodyWidget.childWidgets[0], targetBlock, positionInfo, undefined);\n }\n if (positionInfo.done) {\n return offset;\n }\n }\n if (element instanceof FieldElementBox && element.fieldType == 0 && element.formFieldData instanceof DropDownFormField) {\n isDropdown = true;\n }\n if (isDropdown && element instanceof FieldElementBox && element.fieldType == 1) {\n if (element.previousNode instanceof TextElementBox) {\n fieldResult.length += element.previousNode.length;\n isDropdown = false;\n }\n }\n if (!element.skipformFieldLength) {\n offset += element.length;\n }\n }\n }\n }\n return offset;\n };\n /**\n * @private\n */\n Selection.prototype.getBlockLength = function (paragraphInfo, block, position, completed, skipShapeElement, tableBlock, fieldResult) {\n if (paragraphInfo && block instanceof ParagraphWidget && !isNullOrUndefined(paragraphInfo.paragraph) && paragraphInfo.paragraph.equals(block)) {\n //Paragraph start\n position += 1;\n var elementInfo = block.getInline(paragraphInfo.offset, 0);\n position += this.getBlockOffsetByElement(paragraphInfo, block, elementInfo.element, elementInfo.index, fieldResult);\n if (this.isEndOffset && block.isInsideTable && block.associatedCell.lastChild.equals(block) && paragraphInfo.offset === this.getParagraphLength(block) + 1) {\n position += 1;\n }\n completed.done = true;\n return position;\n }\n if (block instanceof ParagraphWidget) {\n // Code for Comparing the offset calculated using old approach and optimized approach\n // if (this.isNewApproach) {\n // position += 1;\n // if (!skipShapeElement) {\n // position += block.length;\n // } else {\n // position += this.getBlockTotalLength(block, paragraphInfo, completed, tableBlock, fieldResult);\n // }\n // } else {\n //Add Paragraph start length;\n position += 1;\n if (!skipShapeElement) {\n position += (block.getTotalLength());\n }\n else {\n position += this.getBlockTotalLength(block, paragraphInfo, completed, tableBlock, fieldResult);\n }\n // }\n }\n else if (block instanceof TableWidget) {\n // Table start mark length\n position += 1;\n if (!isNullOrUndefined(tableBlock)) {\n if (tableBlock instanceof TableWidget) {\n if (tableBlock.equals(block)) {\n completed.done = true;\n return position;\n }\n }\n }\n var row = block.firstChild;\n while (row) {\n // Row mark length\n position += 1;\n if (!isNullOrUndefined(tableBlock)) {\n if (tableBlock instanceof TableRowWidget) {\n if (tableBlock.equals(row)) {\n completed.done = true;\n return position;\n }\n }\n }\n var cell = row.firstChild;\n while (cell) {\n // Cell mark length\n position += 1;\n if (!isNullOrUndefined(tableBlock)) {\n if (tableBlock instanceof TableCellWidget) {\n if (tableBlock.equals(cell)) {\n completed.done = true;\n return position;\n }\n }\n }\n var childBlock = cell.firstChild;\n while (childBlock) {\n position = this.getBlockLength(paragraphInfo, childBlock, position, completed, skipShapeElement, tableBlock, fieldResult);\n if (completed.done) {\n return position;\n }\n childBlock = childBlock.getSplitWidgets().pop().nextRenderedWidget;\n }\n cell = cell.nextWidget;\n }\n var tableIndex = row.ownerTable.index;\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n if (row && row.ownerTable.index !== tableIndex) {\n row = undefined;\n }\n }\n // Table end mark length\n // position += 1;\n }\n return position;\n };\n /**\n * Calculate the cell length.\n * @private\n */\n Selection.prototype.calculateCellLength = function (cell) {\n var block = cell.firstChild;\n var position = 0;\n var completed = { \"done\": false };\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n while (block) {\n position = this.getBlockLength(paragraphInfo, block, position, completed, true, undefined, undefined);\n block = block.getSplitWidgets().pop().nextRenderedWidget;\n }\n return position;\n };\n Selection.prototype.getBlockOffsetByElement = function (paragraphInfo, block, targetElement, elementIndex, fieldResult) {\n var offset = 0;\n var isDropdown = false;\n var splittedWidget = block.getSplitWidgets();\n for (var i = 0; i < splittedWidget.length; i++) {\n for (var j = 0; j < splittedWidget[i].childWidgets.length; j++) {\n var line = splittedWidget[i].childWidgets[j];\n for (var k = 0; k < line.children.length; k++) {\n var element = line.children[k];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (element instanceof FieldElementBox && element.fieldType == 0 && element.formFieldData instanceof DropDownFormField) {\n isDropdown = true;\n }\n if (isDropdown && element instanceof FieldElementBox && element.fieldType == 1) {\n if (element.previousNode instanceof TextElementBox) {\n fieldResult.length += element.previousNode.length;\n isDropdown = false;\n }\n }\n if (element === targetElement) {\n return offset + elementIndex;\n }\n if (element instanceof ShapeElementBox || element instanceof FootnoteElementBox) {\n if (element instanceof ShapeElementBox) {\n if (element.textFrame.childWidgets.length > 0) {\n for (var m = 0; m < element.textFrame.childWidgets.length; m++) {\n offset = this.getBlockLength(paragraphInfo, element.textFrame.childWidgets[m], offset, { done: false }, false, undefined, undefined);\n }\n }\n }\n else {\n if (element.bodyWidget.childWidgets.length > 0) {\n for (var m = 0; m < element.bodyWidget.childWidgets.length; m++) {\n offset = this.getBlockLength(paragraphInfo, element.bodyWidget.childWidgets[m], offset, { done: false }, false, undefined, undefined);\n }\n }\n }\n }\n if (!element.skipformFieldLength) {\n offset += element.length;\n }\n }\n }\n }\n return offset;\n };\n /**\n * This method is for collaborative editing.\n * @private\n */\n Selection.prototype.getTableRelativeValue = function (startPosition, endPosition) {\n // If start is in firset row first cell and end is in last row last cell or next table or next para. we need to minus the offset to 3. Else checking row.\n // If start is first cell and end is in row last cell or other row last cell or other widgets. we need to minus the offset to 2. else return 0.\n if (startPosition.currentWidget.paragraph.isInsideTable) {\n if (this.isTableSelected()) {\n return 3;\n }\n else if (this.isRowSelect() && endPosition.paragraph.isInsideTable && startPosition.paragraph.associatedCell.ownerTable.equals(endPosition.paragraph.associatedCell.ownerTable)) {\n return 2;\n }\n else {\n var table = startPosition.paragraph.associatedCell.ownerTable.getSplitWidgets();\n var firstParagraph = this.getFirstBlockInFirstCell(table[0]);\n if (startPosition.paragraph.associatedCell.equals(firstParagraph.associatedCell)) {\n if (endPosition.paragraph.isInsideTable) {\n if (!startPosition.paragraph.associatedCell.ownerTable.equals(endPosition.paragraph.associatedCell.ownerTable)) {\n var length_3 = this.isRowSelect() ? 2 : 3;\n var table_1 = startPosition.paragraph.associatedCell.ownerTable;\n while (table_1.containerWidget instanceof TableCellWidget) {\n length_3 += 3;\n table_1 = table_1.containerWidget.ownerTable;\n if (table_1.equals(endPosition.paragraph.associatedCell.ownerTable)) {\n break;\n }\n }\n return length_3;\n }\n else {\n return 0;\n }\n }\n else {\n return 3;\n }\n }\n else {\n if (endPosition.currentWidget.paragraph.isInsideTable) {\n if (!startPosition.paragraph.associatedCell.ownerTable.equals(endPosition.paragraph.associatedCell.ownerTable)) {\n return 2;\n }\n else {\n return 0;\n }\n }\n else {\n return 2;\n }\n }\n }\n }\n return 0;\n };\n /**\n *\n * @private\n */\n Selection.prototype.isRowSelect = function () {\n // This method wil return if start row child widgets equals to end row child widgets. \n var start = this.start;\n var end = this.end;\n if (!this.isForward) {\n start = this.end;\n end = this.start;\n }\n if (isNullOrUndefined(start.paragraph.associatedCell) ||\n isNullOrUndefined(end.paragraph.associatedCell) || start.paragraph.associatedCell.equals(end.paragraph.associatedCell) || this.isTableSelected(true)) {\n return false;\n }\n var endTable = end.paragraph.associatedCell.ownerTable;\n var isRowSelect = false;\n if (endTable.containerWidget instanceof TableCellWidget) {\n while (endTable.containerWidget instanceof TableCellWidget) {\n endTable = endTable.containerWidget.ownerTable;\n for (var i = 0; i < endTable.childWidgets.length; i++) {\n var row_1 = endTable.childWidgets[i];\n if (row_1.childWidgets[row_1.childWidgets.length - 1].equals(endTable.containerWidget)) {\n isRowSelect = true;\n }\n }\n }\n }\n else {\n for (var i = 0; i < endTable.childWidgets.length; i++) {\n var row_2 = endTable.childWidgets[i];\n if (row_2.childWidgets[row_2.childWidgets.length - 1].equals(end.paragraph.associatedCell)) {\n isRowSelect = true;\n }\n }\n }\n var row = start.paragraph.associatedCell.ownerRow.getSplitWidgets();\n var firstcell;\n if (row[0].childWidgets.length > 0) {\n firstcell = row[0].childWidgets[0];\n }\n return start.paragraph.associatedCell.equals(firstcell) && isRowSelect;\n };\n return Selection;\n}());\nexport { Selection };\n","/**\n * Represents a comment.\n */\nvar Comment = /** @class */ (function () {\n function Comment(id, commentProperties) {\n this.id = id;\n this.commentProperties = commentProperties;\n }\n return Comment;\n}());\nexport { Comment };\n","import { WTableHolder } from '../viewer/page';\n/**\n * @private\n */\nvar ModifiedLevel = /** @class */ (function () {\n function ModifiedLevel(owner, modified) {\n this.ownerListLevelIn = undefined;\n this.modifiedListLevelIn = undefined;\n this.ownerListLevel = owner;\n this.modifiedListLevel = modified;\n }\n Object.defineProperty(ModifiedLevel.prototype, \"ownerListLevel\", {\n get: function () {\n return this.ownerListLevelIn;\n },\n set: function (value) {\n this.ownerListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedLevel.prototype, \"modifiedListLevel\", {\n get: function () {\n return this.modifiedListLevelIn;\n },\n set: function (value) {\n this.modifiedListLevelIn = value;\n },\n enumerable: true,\n configurable: true\n });\n ModifiedLevel.prototype.destroy = function () {\n this.ownerListLevel = undefined;\n this.modifiedListLevel = undefined;\n };\n return ModifiedLevel;\n}());\nexport { ModifiedLevel };\n/**\n * @private\n */\nvar ModifiedParagraphFormat = /** @class */ (function () {\n function ModifiedParagraphFormat(ownerFormat, modifiedFormat) {\n this.ownerFormatIn = undefined;\n this.modifiedFormatIn = undefined;\n this.ownerFormat = ownerFormat;\n this.modifiedFormat = modifiedFormat;\n }\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"ownerFormat\", {\n get: function () {\n return this.ownerFormatIn;\n },\n set: function (value) {\n this.ownerFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ModifiedParagraphFormat.prototype, \"modifiedFormat\", {\n get: function () {\n return this.modifiedFormatIn;\n },\n set: function (value) {\n this.modifiedFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n ModifiedParagraphFormat.prototype.destroy = function () {\n if (this.modifiedFormat) {\n this.modifiedFormat.destroy();\n }\n this.modifiedFormat = undefined;\n this.ownerFormat = undefined;\n };\n return ModifiedParagraphFormat;\n}());\nexport { ModifiedParagraphFormat };\n/**\n * @private\n */\nvar RowHistoryFormat = /** @class */ (function () {\n function RowHistoryFormat(table, startingPoint, rowFormat, owner) {\n this.startingPoint = startingPoint;\n this.rowFormat = rowFormat;\n this.rowHeightType = rowFormat.heightType;\n this.tableHierarchicalIndex = owner.selectionModule.getHierarchicalIndex(table, '0');\n }\n RowHistoryFormat.prototype.revertChanges = function (isRedo, owner, table) {\n //backup current format values.\n var currentRowHeightType = this.rowFormat.heightType;\n //Restore old values.\n var row = table.childWidgets[this.rowFormat.ownerBase.index];\n owner.editorModule.tableResize.updateRowHeight(row, isRedo ? this.displacement : (-this.displacement));\n owner.documentHelper.layout.reLayoutTable(table);\n if (this.rowFormat.heightType !== this.rowHeightType) {\n this.rowFormat.heightType = this.rowHeightType;\n }\n //backup the current format values for redo.\n this.rowHeightType = currentRowHeightType;\n };\n return RowHistoryFormat;\n}());\nexport { RowHistoryFormat };\n/**\n * @private\n */\nvar TableHistoryInfo = /** @class */ (function () {\n function TableHistoryInfo(table, owner) {\n this.tableHolder = new WTableHolder();\n this.tableFormat = new TableFormatHistoryInfo();\n this.rows = [];\n this.owner = owner;\n this.copyProperties(table);\n }\n TableHistoryInfo.prototype.copyProperties = function (table) {\n if (table.tableHolder) {\n this.tableHolder = table.tableHolder.clone();\n }\n if (table.tableFormat) {\n this.tableFormat.leftIndent = table.tableFormat.leftIndent;\n this.tableFormat.preferredWidth = table.tableFormat.preferredWidth;\n this.tableFormat.preferredWidthType = table.tableFormat.preferredWidthType;\n this.tableFormat.allowAutoFit = table.tableFormat.allowAutoFit;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[parseInt(i.toString(), 10)];\n var rowFormat = new RowFormatHistoryInfo();\n rowFormat.gridBefore = row.rowFormat.gridBefore;\n rowFormat.gridBeforeWidth = row.rowFormat.gridBeforeWidth;\n rowFormat.gridBeforeWidthType = row.rowFormat.gridBeforeWidthType;\n rowFormat.gridAfter = row.rowFormat.gridAfter;\n rowFormat.gridAfterWidth = row.rowFormat.gridAfterWidth;\n rowFormat.gridAfterWidthType = row.rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[parseInt(j.toString(), 10)];\n var cellFormat = new CellFormatHistoryInfo();\n cellFormat.columnIndex = cell.columnIndex;\n cellFormat.columnSpan = cell.cellFormat.columnSpan;\n cellFormat.preferredWidth = cell.cellFormat.preferredWidth;\n cellFormat.preferredWidthType = cell.cellFormat.preferredWidthType;\n rowFormat.cells.push(cellFormat);\n }\n this.rows.push(rowFormat);\n }\n this.tableHierarchicalIndex = this.owner.selectionModule.getHierarchicalIndex(table, '0');\n };\n TableHistoryInfo.prototype.destroy = function () {\n this.tableHierarchicalIndex = undefined;\n if (this.tableHolder) {\n this.tableHolder.destroy();\n this.tableHolder = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat = null;\n }\n if (this.rows) {\n this.rows = [];\n this.rows = undefined;\n }\n };\n return TableHistoryInfo;\n}());\nexport { TableHistoryInfo };\n/**\n * @private\n */\nvar TableFormatHistoryInfo = /** @class */ (function () {\n function TableFormatHistoryInfo() {\n }\n return TableFormatHistoryInfo;\n}());\nexport { TableFormatHistoryInfo };\n/**\n * @private\n */\nvar RowFormatHistoryInfo = /** @class */ (function () {\n function RowFormatHistoryInfo() {\n this.cells = [];\n }\n return RowFormatHistoryInfo;\n}());\nexport { RowFormatHistoryInfo };\n/**\n * @private\n */\nvar CellFormatHistoryInfo = /** @class */ (function () {\n function CellFormatHistoryInfo() {\n }\n return CellFormatHistoryInfo;\n}());\nexport { CellFormatHistoryInfo };\n/**\n * @private\n */\nvar CellHistoryFormat = /** @class */ (function () {\n function CellHistoryFormat(point) {\n this.startingPoint = point; // starting point preserved to calculate the displacement on after cell resizing finished.\n }\n return CellHistoryFormat;\n}());\nexport { CellHistoryFormat };\n","import { WParagraphFormat } from '../format/paragraph-format';\nimport { WSectionFormat } from '../format/section-format';\nimport { WCharacterFormat } from '../format/character-format';\nimport { WListFormat } from '../format/list-format';\nimport { HistoryInfo } from '../index';\nimport { ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { BlockWidget, ParagraphWidget, BodyWidget, TableCellWidget, FieldElementBox, TableWidget, TableRowWidget, BookmarkElementBox, HeaderFooterWidget, CheckBoxFormField, TextFrame, TextElementBox, FootnoteElementBox, ImageElementBox, ListTextElementBox } from '../viewer/page';\nimport { Dictionary } from '../../base/dictionary';\nimport { abstractListsProperty, listIdProperty, listsProperty, nsidProperty } from '../../index';\nimport { TextPosition, ImageSizeInfo } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ElementBox, CommentCharacterElementBox } from '../viewer/page';\nimport { WTableFormat, WRowFormat, WCellFormat, WParagraphStyle } from '../format/index';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CONTROL_CHARACTERS } from '../../base/types';\n// Code for Comparing the offset calculated using old approach and optimized approach\n// /**\n// * @private\n// */\n// export class MyError extends Error {\n// constructor(message: string) {\n// super(message);\n// }\n// }\n// export function throwCustomError(condition: boolean, message: string) {\n// if (condition) {\n// throw new MyError(message);\n// }\n// }\n/**\n * @private\n */\nvar BaseHistoryInfo = /** @class */ (function () {\n function BaseHistoryInfo(node) {\n this.cellOperation = [];\n this.splittedRevisions = [];\n this.isRemovedNodes = false;\n this.modifiedFormatOperation = [];\n this.revisionOperation = [];\n /**\n * @private\n */\n this.markerData = [];\n this.ownerIn = node;\n this.documentHelper = node.documentHelper;\n this.modifiedPropertiesIn = [];\n this.modifiedNodeLength = [];\n this.removedNodesIn = [];\n this.insertedNodes = [];\n }\n Object.defineProperty(BaseHistoryInfo.prototype, \"owner\", {\n //Properties\n //gets owner control\n get: function () {\n return this.ownerIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"editorHistory\", {\n get: function () {\n return this.owner.editorHistoryModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"action\", {\n get: function () {\n return this.actionIn;\n },\n set: function (value) {\n this.actionIn = value;\n if (this.owner.enableCollaborativeEditing && !this.editorHistory.isUndoing && this.cellOperation.length === 0) {\n if (value === 'DeleteColumn' || value === 'DeleteCells' || value === 'ClearCells' || value === 'MergeCells') {\n if (!(this.owner.selectionModule.isTableSelected(true) || this.owner.selectionModule.isRowSelect()) || value === 'ClearCells' || value === 'MergeCells') {\n this.insertedText = CONTROL_CHARACTERS.Cell;\n this.deleteColumnOperation(this.action);\n }\n }\n else if (value === 'Accept Change' || value === 'Reject Change') {\n this.createAcceptRejectOperation(this.action);\n }\n else if (value === 'SectionBreak') {\n this.insertedText = CONTROL_CHARACTERS.Section_Break;\n this.type = 'NewPage';\n }\n else if (value === 'SectionBreakContinuous') {\n this.insertedText = CONTROL_CHARACTERS.Section_Break;\n this.type = 'Continuous';\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"modifiedProperties\", {\n get: function () {\n return this.modifiedPropertiesIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"removedNodes\", {\n /* eslint-enable */\n get: function () {\n return this.removedNodesIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionStart\", {\n //gets or sets selection start\n get: function () {\n return this.selectionStartIn;\n },\n set: function (value) {\n this.selectionStartIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"selectionEnd\", {\n get: function () {\n return this.selectionEndIn;\n },\n set: function (value) {\n this.selectionEndIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"insertPosition\", {\n get: function () {\n return this.insertPositionIn;\n },\n set: function (value) {\n this.insertPositionIn = value;\n if (this.owner.enableCollaborativeEditing && !this.owner.editorModule.isRemoteAction && value !== '' && !isNullOrUndefined(value) && value.indexOf('C') === -1) {\n //TODO: Insert position not needed in all the cases. Need to optimize it.\n this.insertIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(value);\n // Code for Comparing the offset calculated using old approach and optimized approach\n // this.owner.selection.isNewApproach = true;\n // this.newInsertIndex = this.owner.selection.getAbsolutePositionFromRelativePosition(value);\n // this.owner.selection.isNewApproach = false;\n // throwCustomError(this.newInsertIndex !== this.insertIndex, \"New InsertIndex \" + this.newInsertIndex + \" and old insertIndex \" + this.insertIndex + \" doesnot match\");\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"endPosition\", {\n get: function () {\n return this.endPositionIn;\n },\n set: function (value) {\n this.endPositionIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BaseHistoryInfo.prototype, \"viewer\", {\n get: function () {\n return this.ownerIn.viewer;\n },\n enumerable: true,\n configurable: true\n });\n BaseHistoryInfo.prototype.updateSelection = function () {\n this.updateCollaborativeSelection(this.owner.selectionModule.start.clone(), this.owner.selectionModule.end.clone());\n var blockInfo = this.owner.selectionModule.getParagraphInfo(this.owner.selectionModule.start);\n this.selectionStart = this.owner.selectionModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.owner.selectionModule.getParagraphInfo(this.owner.selectionModule.end);\n this.selectionEnd = this.owner.selectionModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n };\n BaseHistoryInfo.prototype.updateCollaborativeSelection = function (start, end) {\n if (this.owner.enableCollaborativeEditing && !this.owner.editorModule.isRemoteAction) {\n //TODO: Need to consider formard and backward selection\n if (this.action === 'RemoveEditRange') {\n var startEdit = this.owner.selectionModule.getEditRangeStartElement();\n var position = this.owner.selectionModule.getPosition(startEdit);\n start = position.startPosition;\n end = position.endPosition;\n }\n else {\n this.updateTableSelection(start, end);\n }\n this.startIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(start);\n // Code for Comparing the offset calculated using old approach and optimized approach\n // this.owner.selection.isNewApproach = true;\n // this.newStartIndex = this.owner.selection.getAbsolutePositionFromRelativePosition(start);\n // this.owner.selection.isNewApproach = false;\n this.owner.selectionModule.isEndOffset = true;\n this.endIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(end);\n // Code for Comparing the offset calculated using old approach and optimized approach\n // this.owner.selection.isNewApproach = true;\n // this.newEndIndex = this.owner.selection.getAbsolutePositionFromRelativePosition(end);\n // this.owner.selection.isNewApproach = false;\n this.owner.selectionModule.isEndOffset = false;\n var isForward = this.owner.selectionModule.isForward;\n if (isForward) {\n this.startIndex -= this.owner.selectionModule.getTableRelativeValue(start, end);\n }\n else {\n this.endIndex -= this.owner.selectionModule.getTableRelativeValue(end, start);\n }\n // if (this.action === 'BackSpace' || this.action === 'Delete') {\n var isParagraphStart = isForward ? (start.paragraph.equals(end.paragraph)\n && start.isAtParagraphStart) : (start.paragraph.equals(end.paragraph) && end.isAtParagraphStart);\n if ((isParagraphStart || !start.paragraph.equals(end.paragraph))) {\n if (isForward) {\n this.endIndex += this.paraInclude(end);\n }\n else {\n this.startIndex += this.paraInclude(start);\n }\n }\n // }\n if (!this.owner.enableTrackChanges) {\n this.splitOperationForDelete(start, end);\n }\n // Code for Comparing the offset calculated using old approach and optimized approach\n // throwCustomError(this.newStartIndex !== this.startIndex, \"New StartIndex \" + this.newStartIndex + \" and old StartIndex \" + this.startIndex + \" doesnot match\");\n // throwCustomError(this.newEndIndex !== this.endIndex, \"New EndIndex \" + this.newEndIndex + \" and old EndIndex \" + this.endIndex + \" doesnot match\");\n }\n };\n BaseHistoryInfo.prototype.paraInclude = function (position) {\n var paragrapthInfo = this.owner.selectionModule.getParagraphInfo(position);\n if (position.paragraph.getTotalLength() < paragrapthInfo.offset) {\n if (!(position.paragraph.isInsideTable\n && position.paragraph.equals(position.paragraph.associatedCell.lastChild))) {\n return 1;\n }\n }\n return 0;\n };\n /**\n * This method will set position when the multple cell selected.\n *\n * @param {TextPosition} startPosition - Specifies the start position.\n * @param {TextPosition} endPosition - Specifies the end position.\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.updateTableSelection = function (startPosition, endPosition) {\n var start = startPosition;\n var end = endPosition;\n if (!this.owner.selectionModule.isForward) {\n start = endPosition;\n end = startPosition;\n }\n if (start.paragraph.isInsideTable) {\n var firstPara = this.owner.selectionModule.getFirstParagraph(start.paragraph.associatedCell);\n if (end.paragraph.isInsideTable) {\n if (!start.paragraph.associatedCell.equals(end.paragraph.associatedCell)) {\n var lastPara = this.owner.selectionModule.getLastParagraph(end.paragraph.associatedCell);\n start.setPosition(firstPara.firstChild, true);\n end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n }\n else {\n start.setPosition(firstPara.firstChild, true);\n }\n }\n else if (end.paragraph.isInsideTable) {\n var lastPara = this.owner.selectionModule.getLastParagraph(end.paragraph.associatedCell);\n end.setPositionParagraph(lastPara.lastChild, lastPara.lastChild.getEndOffset() + 1);\n }\n };\n /**\n * start is para and end is in row.\n *\n * @param {TextPosition} startPosition - Specifies the start position.\n * @param {TextPosition} endPosition - Specifies the end position.\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.splitOperationForDelete = function (startPosition, endPosition) {\n // when start is para and end is row. we are building the operation like:\n // fisrt delete the end table from table start to selection end.\n // second need to paste the content from the start para and need to paste it in the next row.\n // third delete the start paragraph to before wiget of end table.\n var start = startPosition;\n var end = endPosition;\n if (!this.owner.selectionModule.isForward) {\n start = endPosition;\n end = startPosition;\n }\n if (!start.paragraph.isInsideTable && end.paragraph.isInsideTable && (this.action === 'BackSpace' || this.action === 'Delete')) {\n var lastParagraph = this.owner.selectionModule.getLastBlockInLastCell(end.paragraph.associatedCell.ownerTable);\n if (!lastParagraph.associatedCell.equals(end.paragraph.associatedCell)) {\n var PasteLength = this.startIndex;\n var endLineWidget = start.currentWidget;\n var endOffset = start.offset;\n start.setPosition(start.paragraph.firstChild, true);\n this.startIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(start);\n var startIndex = this.startIndex;\n var table = this.owner.documentHelper.layout.getParentTable(end.paragraph.associatedCell.ownerTable);\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n var tableStart = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, table).position;\n // Table start will get the offset for table. So adding plus one to row offset.\n this.startIndex = tableStart + 1;\n this.cellOperation.push(this.getDeleteOperation(this.action));\n // This will add the paste content in first and first cell so adding plus 3.\n this.startIndex = tableStart + 3;\n if (endOffset !== 0) {\n this.pasteContent = this.owner.sfdtExportModule.write((this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0), start.currentWidget, start.offset, endLineWidget, endOffset, false, true);\n this.cellOperation.push(this.getPasteOpertion(this.pasteContent, PasteLength - startIndex));\n }\n this.endIndex = tableStart;\n this.startIndex = startIndex;\n this.cellOperation.push(this.getDeleteOperation(this.action));\n }\n }\n if (this.action === 'PasteColumn' || this.action === 'PasteOverwrite' || this.action === 'PasteRow') {\n //when inserting new colomn in paste. first deleting the table and inserting the whole table.\n var table = startPosition.paragraph.associatedCell.ownerTable;\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, table).position;\n this.endIndex = this.startIndex + this.owner.selectionModule.getBlockLength(undefined, table, 0, { done: false }, true, undefined, undefined);\n }\n };\n BaseHistoryInfo.prototype.setBookmarkInfo = function (bookmark) {\n this.removedNodes.push({ 'bookmark': bookmark, 'startIndex': bookmark.indexInOwner, 'endIndex': bookmark.reference.indexInOwner });\n };\n BaseHistoryInfo.prototype.setContentControlInfo = function (contentControl) {\n this.removedNodes.push({ 'contentcontrol': contentControl, 'startIndex': contentControl.indexInOwner, 'endIndex': contentControl.reference.indexInOwner });\n };\n BaseHistoryInfo.prototype.setFormFieldInfo = function (field, value) {\n this.removedNodes.push({ 'formField': field, 'value': value });\n };\n BaseHistoryInfo.prototype.setEditRangeInfo = function (editStart) {\n this.removedNodes.push({ 'editStart': editStart, 'startIndex': editStart.indexInOwner, 'endIndex': editStart.editRangeEnd.indexInOwner });\n };\n BaseHistoryInfo.prototype.revertFormTextFormat = function () {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var fieldInfo = this.removedNodes[0];\n var text = fieldInfo.value;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var formField = fieldInfo.formField;\n if (this.editorHistory.isUndoing) {\n this.owner.editorModule.applyTextFormatInternal(formField, text);\n this.editorHistory.recordChanges(this);\n }\n else {\n text = HelperMethods.formatText(formField.formFieldData.format, text);\n this.owner.editorModule.applyTextFormatInternal(formField, text);\n this.editorHistory.undoStack.push(this);\n }\n };\n BaseHistoryInfo.prototype.revertFormField = function () {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var fieldInfo = this.removedNodes[0];\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var field = fieldInfo.formField;\n if (field.formFieldData instanceof CheckBoxFormField) {\n this.owner.editorModule.toggleCheckBoxFormField(field, true, fieldInfo.value);\n }\n else {\n this.owner.editorModule.updateFormField(field, fieldInfo.value);\n }\n };\n BaseHistoryInfo.prototype.revertContentControl = function () {\n var contentControlInfo = this.removedNodes[0];\n var contentcontrol = contentControlInfo.contentcontrol;\n if (this.editorHistory.isUndoing) {\n var markerData = this.owner.editorModule.getMarkerData(contentcontrol);\n this.documentHelper.contentControlCollection.push(contentcontrol);\n this.markerData.push(markerData);\n contentcontrol.line.children.splice(contentControlInfo.startIndex, 0, contentcontrol);\n //const previousNode: ElementBox = contentControl.previousNode;\n this.markerData.push(markerData);\n contentcontrol.reference.line.children.splice(contentControlInfo.endIndex, 0, contentcontrol.reference);\n this.editorHistory.recordChanges(this);\n this.viewer.updateScrollBars();\n this.owner.editorModule.fireContentChange();\n }\n else {\n this.owner.editorModule.removeContentControlInternal();\n this.editorHistory.undoStack.push(this);\n }\n };\n BaseHistoryInfo.prototype.revertBookmark = function () {\n var bookmarkInfo = this.removedNodes[0];\n var bookmark = bookmarkInfo.bookmark;\n if (this.editorHistory.isUndoing) {\n var markerData = this.owner.editorModule.getMarkerData(bookmark);\n this.documentHelper.bookmarks.add(bookmark.name, bookmark);\n this.markerData.push(markerData);\n bookmark.line.children.splice(bookmarkInfo.startIndex, 0, bookmark);\n var previousNode = bookmark.previousNode;\n if (previousNode instanceof FieldElementBox && !isNullOrUndefined(previousNode.formFieldData)) {\n previousNode.formFieldData.name = bookmark.name;\n }\n this.markerData.push(markerData);\n bookmark.reference.line.children.splice(bookmarkInfo.endIndex, 0, bookmark.reference);\n this.editorHistory.recordChanges(this);\n if (this.owner.documentEditorSettings.showBookmarks === true) {\n this.viewer.updateScrollBars();\n }\n this.owner.editorModule.fireContentChange();\n }\n else {\n this.owner.editorModule.deleteBookmarkInternal(bookmark);\n this.editorHistory.undoStack.push(this);\n }\n };\n BaseHistoryInfo.prototype.revertComment = function () {\n var editPosition = this.insertPosition;\n var comment = this.removedNodes[0];\n var insert = false;\n if (this.action === 'ResolveComment') {\n this.editorHistory.currentBaseHistoryInfo = this;\n this.owner.editorModule.resolveOrReopenComment(comment, !comment.isResolved);\n return;\n }\n if (this.action === 'EditComment') {\n var modifiedCommentObject = this.modifiedProperties[0];\n this.editorHistory.currentBaseHistoryInfo = this;\n var commentView = this.owner.commentReviewPane.commentPane.comments.get(comment);\n commentView.commentText.innerText = modifiedCommentObject.text;\n modifiedCommentObject.text = comment.text;\n comment.text = commentView.commentText.innerText;\n this.owner.editorHistoryModule.updateHistory();\n this.owner.fireContentChange();\n return;\n }\n if (this.action === 'InsertCommentWidget') {\n insert = (this.editorHistory.isRedoing);\n }\n else if (this.action === 'DeleteCommentWidget') {\n insert = (this.editorHistory.isUndoing);\n }\n if (insert) {\n if (comment) {\n this.insertedElement = comment.clone();\n if (comment.isReply) {\n this.owner.editorModule.addReplyComment(comment, this.insertPosition);\n }\n else {\n this.owner.editorModule.addCommentWidget(comment, false, true, true);\n }\n }\n }\n else {\n var commentElement = this.owner.editorModule.getCommentElementBox(editPosition);\n this.owner.editorModule.deleteCommentWidget(commentElement);\n }\n };\n BaseHistoryInfo.prototype.revertEditRangeRegion = function () {\n var editRangeInfo = this.removedNodes[0];\n var editStart = editRangeInfo.editStart;\n if (this.editorHistory.isUndoing) {\n var user = editStart.user === '' ? editStart.group : editStart.user;\n this.owner.editorModule.updateRangeCollection(editStart, user);\n this.markerData.push(this.owner.editorModule.getMarkerData(editStart));\n this.markerData.push(this.owner.editorModule.getMarkerData(editStart.editRangeEnd));\n editStart.line.children.splice(editRangeInfo.startIndex, 0, editStart);\n editStart.editRangeEnd.line.children.splice(editRangeInfo.endIndex, 0, editStart.editRangeEnd);\n this.editorHistory.recordChanges(this);\n }\n else {\n this.owner.editorModule.removeUserRestrictionsInternal(editStart);\n this.editorHistory.undoStack.push(this);\n }\n this.owner.editorModule.fireContentChange();\n };\n /* eslint-disable */\n BaseHistoryInfo.prototype.revert = function () {\n if (this.action === 'FormTextFormat') {\n this.revertFormTextFormat();\n return;\n }\n if (this.action === 'UpdateFormField') {\n this.revertFormField();\n return;\n }\n if (this.action === 'DeleteBookmark') {\n this.revertBookmark();\n return;\n }\n if (this.action === 'RemoveContentControl') {\n this.revertContentControl();\n return;\n }\n if (this.action === 'RemoveEditRange') {\n this.revertEditRangeRegion();\n return;\n }\n if (this.action === 'InsertCommentWidget' || this.action === 'DeleteCommentWidget' || this.action === 'ResolveComment' || this.action === 'EditComment') {\n this.revertComment();\n return;\n }\n if (this.action === 'ListFormat' && this.owner.editorModule.listNumberFormat !== '') {\n var abstractList = this.documentHelper.lists[0].abstractList.levels[this.owner.editorModule.listLevelNumber];\n var currentListLevelPattern = abstractList.listLevelPattern;\n var currentNUmberFormat = abstractList.numberFormat;\n abstractList.listLevelPattern = this.owner.editorModule.listLevelPattern;\n abstractList.numberFormat = this.owner.editorModule.listNumberFormat;\n this.owner.editorModule.listLevelPattern = currentListLevelPattern;\n this.owner.editorModule.listNumberFormat = currentNUmberFormat;\n }\n this.owner.isShiftingEnabled = true;\n var selectionStartTextPosition = undefined;\n var selectionEndTextPosition = undefined;\n var start = this.selectionStart;\n var end = this.selectionEnd;\n this.collabStart = this.selectionStart;\n this.collabEnd = this.selectionEnd;\n var isForwardSelection = TextPosition.isForwardSelection(start, end);\n if (this.modifiedProperties.length > 0 || this.action === 'Selection'\n || this.action === 'ClearCharacterFormat' || this.action === 'ClearParagraphFormat') {\n selectionStartTextPosition = !isNullOrUndefined(start) ? this.owner.selectionModule.getTextPosBasedOnLogicalIndex(start) : undefined;\n selectionEndTextPosition = !isNullOrUndefined(end) ? this.owner.selectionModule.getTextPosBasedOnLogicalIndex(end) : undefined;\n if (this.owner.enableCollaborativeEditing) {\n this.updateCollaborativeSelection(selectionStartTextPosition, selectionEndTextPosition);\n }\n this.revertModifiedProperties(selectionStartTextPosition, selectionEndTextPosition);\n }\n else {\n if (this.owner.enableCollaborativeEditing) {\n if (!isNullOrUndefined(this.insertPosition)) {\n this.insertIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(this.insertPosition);\n }\n if (!isNullOrUndefined(this.endPosition)) {\n var startPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(this.insertPosition);\n var endPosition = this.owner.selection.getTextPosBasedOnLogicalIndex(this.endPosition);\n this.updateCollaborativeSelection(startPosition, endPosition);\n }\n }\n var sel = this.owner.selectionModule;\n var deletedNodes = this.removedNodes;\n if (this.removedNodes.length > 0) {\n if (this.action === 'InsertTable' && this.editorHistory.isRedoing) {\n for (var i = 0; i < this.removedNodes.length; i++) {\n this.insertedNodes.push(this.removedNodes[parseInt(i.toString(), 10)]);\n }\n }\n this.isRemovedNodes = true;\n }\n else {\n this.isRemovedNodes = false;\n }\n this.removedNodesIn = [];\n if (isNullOrUndefined(this.endPosition)) {\n this.endPosition = this.insertPosition;\n }\n var isForward = TextPosition.isForwardSelection(this.insertPosition, this.endPosition);\n var insertTextPosition = sel.getTextPosBasedOnLogicalIndex(isForward ? this.insertPosition : this.endPosition);\n var endTextPosition = sel.getTextPosBasedOnLogicalIndex(isForward ? this.endPosition : this.insertPosition);\n // Set the endRevisionLogicalIndex based on undo stack value when the selection contains a table with the above paragraph (undoing).\n if (this.action === 'RemoveRowTrack' && this.editorHistory.isUndoing) {\n this.owner.selectionModule.select(this.selectionEnd, this.selectionEnd);\n var isLastChild = (this.owner.selectionModule.start.paragraph === this.owner.editor.getLastParaForBodywidgetCollection(this.owner.selectionModule.start.paragraph));\n if (this.owner.selectionModule.start.paragraph.isInsideTable || isLastChild && this.owner.selectionModule.end.paragraph.isEmpty() && deletedNodes.length > 0 && deletedNodes[0] instanceof TableWidget) {\n this.endRevisionLogicalIndex = this.selectionEnd;\n }\n }\n if (this.editorHistory.isUndoing) {\n if (this.lastElementRevision && isNullOrUndefined(this.isAcceptOrReject) && deletedNodes.length > 0 && deletedNodes[0] instanceof ParagraphWidget && deletedNodes[0].isEmpty()) {\n this.endRevisionLogicalIndex = this.selectionEnd;\n }\n else if (this.action === 'Delete' && this.editorHistory.currentHistoryInfo\n && this.editorHistory.currentHistoryInfo.action === 'RemoveHyperlink'\n && this.lastElementRevision instanceof FieldElementBox) {\n // Bug 873011: Updated the selection for delete operation on \"RemoveHyperlink\" undo case.\n this.endRevisionLogicalIndex = this.selectionEnd;\n }\n else if (this.lastElementRevision && isNullOrUndefined(this.endRevisionLogicalIndex)) {\n this.updateEndRevisionInfo();\n }\n else if (this.action === 'RemoveRowTrack') {\n this.endRevisionLogicalIndex = this.selectionEnd;\n }\n }\n if (this.action === 'ClearRevisions') {\n // Bug 873011: Handled the separate undo revision for field begin and field end for \"ClearRevisions\" action on hyperlink undo.\n var fieldBegin = sel.getHyperlinkField();\n if (this.isHyperlinkField && !isNullOrUndefined(fieldBegin)) {\n var offset = fieldBegin.fieldSeparator.line.getOffset(fieldBegin.fieldSeparator, 1);\n endTextPosition.setPositionParagraph(fieldBegin.fieldSeparator.line, offset);\n this.undoRevisionForElements(insertTextPosition, endTextPosition, deletedNodes[deletedNodes.length - 1]);\n var fieldEnd = fieldBegin.fieldEnd;\n insertTextPosition.setPositionParagraph(fieldEnd.line, fieldEnd.line.getOffset(fieldEnd, 0));\n endTextPosition.setPositionParagraph(fieldEnd.line, fieldEnd.line.getOffset(fieldEnd, 1));\n this.undoRevisionForElements(insertTextPosition, endTextPosition, deletedNodes[deletedNodes.length - 1]);\n }\n else {\n this.owner.selectionModule.select(this.selectionEnd, this.selectionEnd);\n this.undoRevisionForElements(insertTextPosition, endTextPosition, deletedNodes[deletedNodes.length - 1]);\n }\n this.removedNodes.push(deletedNodes[deletedNodes.length - 1]);\n deletedNodes = [];\n }\n if (this.action === 'Uppercase') {\n sel.selectPosition(insertTextPosition, endTextPosition);\n this.editorHistory.currentBaseHistoryInfo = this;\n var editModule = this.owner.editorModule;\n editModule.changeSelectedTextCase(sel, insertTextPosition, endTextPosition, this.action.toString(), deletedNodes);\n editModule.reLayout(sel);\n return;\n }\n if (this.action === 'Lowercase') {\n sel.selectPosition(insertTextPosition, endTextPosition);\n this.editorHistory.currentBaseHistoryInfo = this;\n var editModule = this.owner.editorModule;\n editModule.changeSelectedTextCase(sel, insertTextPosition, endTextPosition, this.action.toString(), deletedNodes);\n editModule.reLayout(sel);\n return;\n }\n if (this.action === 'CapitalizeEachWord') {\n sel.selectPosition(insertTextPosition, endTextPosition);\n this.editorHistory.currentBaseHistoryInfo = this;\n var editModule = this.owner.editorModule;\n editModule.changeSelectedTextCase(sel, insertTextPosition, endTextPosition, this.action.toString(), deletedNodes);\n editModule.reLayout(sel);\n return;\n }\n if (this.action === 'SentenceCase') {\n sel.selectPosition(insertTextPosition, endTextPosition);\n this.editorHistory.currentBaseHistoryInfo = this;\n var editModule = this.owner.editorModule;\n editModule.changeSelectedTextCase(sel, insertTextPosition, endTextPosition, this.action.toString(), deletedNodes);\n editModule.reLayout(sel);\n return;\n }\n if (this.action === 'ToggleCase') {\n sel.selectPosition(insertTextPosition, endTextPosition);\n this.editorHistory.currentBaseHistoryInfo = this;\n var editModule = this.owner.editorModule;\n editModule.changeSelectedTextCase(sel, insertTextPosition, endTextPosition, this.action.toString(), deletedNodes);\n editModule.reLayout(sel);\n return;\n }\n if (insertTextPosition.isAtSamePosition(endTextPosition)) {\n sel.selectContent(insertTextPosition, true);\n }\n else {\n sel.selectPosition(insertTextPosition, endTextPosition);\n }\n if (this.action === 'InsertHyperlink' && this.editorHistory.isRedoing) {\n var fieldBegin = this.owner.selectionModule.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n var offset = (fieldBegin.line).getOffset(fieldBegin, 0);\n insertTextPosition.setPositionParagraph(fieldBegin.line, offset);\n this.owner.selectionModule.start.setPositionInternal(insertTextPosition);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n endTextPosition.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n }\n }\n this.editorHistory.currentBaseHistoryInfo = this;\n this.selectionStart = this.insertPosition;\n this.insertPosition = undefined;\n this.selectionEnd = this.endPosition;\n this.endPosition = undefined;\n // Use this property to skip deletion if already selected content deleted case.\n var isRemoveContent = false;\n var isDeletecell = false;\n if (this.action === 'DeleteCells' || this.action === 'RemoveRowTrack') {\n isDeletecell = true;\n }\n if (this.endRevisionLogicalIndex && deletedNodes.length > 0) {\n var currentPosition = sel.getTextPosBasedOnLogicalIndex(this.endRevisionLogicalIndex);\n if (this.editorHistory.isUndoing || (this.editorHistory.isRedoing && insertTextPosition.isAtSamePosition(endTextPosition))) {\n sel.selectPosition(insertTextPosition, currentPosition);\n }\n this.collabEnd = this.endRevisionLogicalIndex;\n if (this.owner.enableCollaborativeEditing) {\n this.endIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(currentPosition);\n this.endIndex += this.paraInclude(currentPosition);\n }\n if (this.editorHistory.isUndoing || (this.editorHistory.isRedoing && !this.owner.selectionModule.isEmpty && deletedNodes.length > 0)) {\n this.owner.editorModule.deleteSelectedContents(sel, true, isDeletecell);\n isRemoveContent = true;\n }\n }\n if (!insertTextPosition.isAtSamePosition(endTextPosition) && !isRemoveContent) {\n isRemoveContent = this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'ClearCells'\n || this.action === 'DeleteCells';\n var skipDelete = (deletedNodes.length > 0 && this.action === 'ParaMarkTrack') || this.action === 'ClearRevisions' || this.action === 'AcceptTOC';\n if (!(isRemoveContent) && this.action !== 'MergeCells' && this.action !== 'InsertRowAbove'\n && this.action !== 'InsertRowBelow' && this.action !== 'InsertColumnLeft'\n && this.action !== 'InsertColumnRight' && this.action !== 'Borders'\n && this.action !== 'DeleteTable' && this.action !== 'DeleteColumn' && this.action !== 'DeleteRow') {\n sel.end.setPositionInternal(endTextPosition);\n if (!this.owner.selectionModule.isEmpty && !skipDelete) {\n if (this.editorHistory.isRedoing && this.action !== 'Accept Change' && this.action !== 'ParaMarkTrack' &&\n this.action !== 'ParaMarkReject' && this.action !== 'RemoveRowTrack') {\n this.owner.editorModule.removeSelectedContents(sel);\n }\n else {\n // Bug 873011: Handled the separate deletion for field begin and field end for \"Accept Change\" action on hyperlink redo.\n var fieldBegin = sel.getHyperlinkField();\n if (this.isHyperlinkField && !isNullOrUndefined(fieldBegin)\n && this.editorHistory.isRedoing && this.action === 'Accept Change') {\n var fieldEnd = fieldBegin.fieldEnd;\n sel.start.setPositionParagraph(fieldBegin.line, (fieldBegin.line).getOffset(fieldBegin, 0));\n sel.end.setPositionParagraph(fieldBegin.fieldSeparator.line, (fieldBegin.fieldSeparator.line).getOffset(fieldBegin.fieldSeparator, 1));\n this.owner.editorModule.deleteSelectedContents(sel, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.reverse();\n }\n sel.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 0));\n sel.end.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 1));\n this.owner.editorModule.deleteSelectedContents(sel, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.reverse();\n }\n }\n else {\n this.owner.editorModule.deleteSelectedContents(sel, true);\n }\n }\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak' && this.documentHelper.blockToShift) {\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n }\n }\n else if (this.action === 'SectionBreakContinuous' && insertTextPosition && this.editorHistory.isUndoing) {\n if (insertTextPosition.offset === 0 && !isNullOrUndefined(insertTextPosition.paragraph.previousRenderedWidget) && insertTextPosition.paragraph.previousRenderedWidget instanceof ParagraphWidget && insertTextPosition.paragraph.previousRenderedWidget.isEndsWithPageBreak && insertTextPosition.paragraph.containerWidget instanceof BodyWidget && insertTextPosition.currentWidget === insertTextPosition.currentWidget.paragraph.firstChild && insertTextPosition.paragraph.containerWidget.sectionFormat.breakCode === 'NoBreak') {\n var section = insertTextPosition.paragraph.previousRenderedWidget.containerWidget;\n this.owner.editorModule.combineSectionInternal(this.owner.selectionModule, section, insertTextPosition.paragraph.containerWidget);\n this.owner.editorModule.layoutWholeDocument();\n }\n }\n else {\n isRemoveContent = false;\n if (!insertTextPosition.isAtSamePosition(endTextPosition)) {\n isRemoveContent = this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'ClearCells'\n || this.action === 'DeleteCells';\n }\n }\n var isRedoAction = (this.editorHistory.isRedoing && !isRemoveContent);\n isRemoveContent = this.lastElementRevision ? false : isRemoveContent;\n this.revertModifiedNodes(deletedNodes, isRedoAction, isForwardSelection ? start : end, start === end, isForwardSelection ? end : start);\n // Use this property to delete table or cell based on history action.\n if (isRemoveContent) {\n this.removeContent(insertTextPosition, endTextPosition, isDeletecell);\n }\n //this.owner.editorModule.reLayout(this.documentHelper.selection);\n }\n var isSelectionChanged = false;\n var updateSelection = false;\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) && (this.editorHistory.currentHistoryInfo.action === 'Reject All' || this.editorHistory.currentHistoryInfo.action === 'Accept All' || this.editorHistory.currentHistoryInfo.action === 'Paste')) {\n updateSelection = true;\n }\n if (this.action !== 'TrackingPageBreak' && ((this.editorHistory.isUndoing || this.endRevisionLogicalIndex || this.action === 'RemoveRowTrack' || updateSelection) && isNullOrUndefined(this.editorHistory.currentHistoryInfo) || updateSelection) ||\n ((this.action === 'InsertRowAbove' || this.action === 'Borders' || this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft' || this.action === 'InsertColumnRight' || this.action === 'Accept Change' || this.action === 'PasteColumn' || this.action === 'PasteRow' || this.action === 'PasteOverwrite' || this.action === 'PasteNested') && (this.editorHistory.isRedoing\n || this.editorHistory.currentHistoryInfo.action === 'Paste'))) {\n if (this.action === 'RemoveRowTrack' && this.editorHistory.isRedoing) {\n selectionStartTextPosition = !isNullOrUndefined(this.selectionStart) ? this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.selectionStart) : undefined;\n selectionEndTextPosition = !isNullOrUndefined(this.selectionEnd) ? this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.selectionEnd) : undefined;\n }\n else {\n selectionStartTextPosition = !isNullOrUndefined(start) ? this.owner.selectionModule.getTextPosBasedOnLogicalIndex(start) : undefined;\n selectionEndTextPosition = !isNullOrUndefined(end) ? this.owner.selectionModule.getTextPosBasedOnLogicalIndex(end) : undefined;\n }\n if (this.action !== 'ModifyStyle') {\n this.owner.selectionModule.selectRange(selectionStartTextPosition, selectionEndTextPosition);\n }\n this.documentHelper.updateFocus();\n isSelectionChanged = true;\n }\n this.owner.trackChangesPane.isTrackingPageBreak = false;\n var index = this.insertIndex;\n // Updates insert position of history info instance.\n this.insertPosition = start;\n this.endPosition = end;\n if (this.action === 'InsertHyperlink') {\n this.insertIndex = index;\n }\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n (this.editorHistory.currentHistoryInfo.action === 'Accept All'\n || this.editorHistory.currentHistoryInfo.action === 'Reject All' || this.editorHistory.currentHistoryInfo.action === 'RemoveComment')) {\n if (this.owner.documentHelper.blockToShift) {\n this.owner.documentHelper.layout.shiftLayoutedItems(false);\n }\n }\n this.owner.editorModule.reLayout(this.owner.selectionModule, this.owner.selectionModule.isEmpty);\n if (this.editorHistory.isUndoing && this.action === 'SectionBreak') {\n this.owner.editorModule.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.owner.editorModule.layoutWholeDocument();\n this.owner.editorModule.isSkipOperationsBuild = false;\n }\n if (isSelectionChanged) {\n this.documentHelper.scrollToPosition(this.owner.selectionModule.start, this.owner.selectionModule.end);\n }\n this.highlightListText();\n };\n BaseHistoryInfo.prototype.highlightListText = function () {\n if (!isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n if (this.action === 'ListCharacterFormat' || (this.editorHistory.currentHistoryInfo.action === 'ListSelect' && this.action === 'ListFormat')) {\n var selectionStartTextPosition = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.selectionStart);\n var widget = selectionStartTextPosition.currentWidget;\n this.documentHelper.selection.highlightListText(widget);\n }\n }\n };\n BaseHistoryInfo.prototype.removeContent = function (insertTextPosition, endTextPosition, isDeletecell) {\n //If the base parent of the insert text position and end text position is null \n //then the paragraphs already removed.\n //Example scenario: In table editing that is delete cells operation \n // we will backed up the entire table ad it will be replaced on undo operation.\n //At that time if the positions are in table \n //which is already replaced in undo (revert modified nodes method) then the base parent of the paragraph will be null.\n //So again, selecting the content and deleting is unnecessary\n // and it will cause improper position updates and null reference exceptions. \n if ((!isNullOrUndefined(insertTextPosition.paragraph.containerWidget) &&\n insertTextPosition.paragraph.containerWidget instanceof BodyWidget &&\n (!isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && endTextPosition.paragraph.containerWidget instanceof BodyWidget))\n || (!isNullOrUndefined(insertTextPosition.paragraph.containerWidget)\n && !isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && insertTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && endTextPosition.paragraph.containerWidget instanceof TableCellWidget\n && !isNullOrUndefined(insertTextPosition.paragraph.bodyWidget)) ||\n (!isNullOrUndefined(insertTextPosition.paragraph.containerWidget)\n && !isNullOrUndefined(endTextPosition.paragraph.containerWidget)\n && insertTextPosition.paragraph.containerWidget instanceof TextFrame\n && endTextPosition.paragraph.containerWidget instanceof TextFrame)) {\n //Removes if any empty paragraph is added while delete.\n this.owner.selectionModule.selectRange(insertTextPosition, endTextPosition);\n this.documentHelper.updateFocus();\n var isDelete = false;\n if (this.action === 'BackSpace' || this.action === 'Uppercase' || this.action === 'RemoveRowTrack') {\n isDelete = true;\n }\n this.owner.editorModule.deleteSelectedContents(this.owner.selectionModule, isDelete, isDeletecell);\n }\n };\n BaseHistoryInfo.prototype.updateEndRevisionInfo = function () {\n this.lastElementRevision = this.checkAdjacentNodeForMarkedRevision(this.lastElementRevision);\n var currentRevision = this.retrieveEndPosition(this.lastElementRevision);\n var blockInfo = this.owner.selectionModule.getParagraphInfo(currentRevision);\n var isLastChild = (blockInfo.paragraph == this.owner.editor.getLastParaForBodywidgetCollection(blockInfo.paragraph));\n if (blockInfo.paragraph.isInsideTable && blockInfo.paragraph == this.owner.selection.getLastParagraph(blockInfo.paragraph.associatedCell)) {\n isLastChild = true;\n }\n if (blockInfo.paragraph.getLength() == blockInfo.offset && !isLastChild) {\n blockInfo.offset++;\n }\n this.endRevisionLogicalIndex = this.owner.selectionModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.lastElementRevision.isMarkedForRevision = false;\n };\n BaseHistoryInfo.prototype.retrieveEndPosition = function (elementBox) {\n var endPosition = new TextPosition(this.owner);\n var offset = elementBox.line.getOffset(elementBox, 0) + elementBox.length;\n endPosition.setPositionFromLine(elementBox.line, offset);\n return endPosition;\n };\n /**\n * Method to retrieve exact spitted node which is marked as last available element.\n *\n * @param {ElementBox} elementBox - Specifies the element box\n * @returns {ElementBox} - Returns element box\n */\n BaseHistoryInfo.prototype.checkAdjacentNodeForMarkedRevision = function (elementBox) {\n var nextItem = elementBox.nextNode;\n var markedNode;\n while (!isNullOrUndefined(nextItem) && nextItem.isMarkedForRevision) {\n markedNode = nextItem;\n nextItem = nextItem.nextNode;\n }\n return !isNullOrUndefined(markedNode) ? markedNode : elementBox;\n };\n BaseHistoryInfo.prototype.revertModifiedProperties = function (start, end) {\n if (this.action === 'CellFormat' || this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.owner.isShiftingEnabled = false;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end)) {\n this.owner.selectionModule.selectRange(start, end);\n }\n this.documentHelper.updateFocus();\n if (this.action === 'RowResizing' || this.action === 'CellResizing') {\n this.revertResizing();\n }\n else if (this.action === 'CellOptions' || this.action === 'TableOptions') {\n this.revertTableDialogProperties(this.action);\n }\n else if (this.action !== 'Selection') {\n this.revertProperties();\n }\n };\n // Redoes the Action\n BaseHistoryInfo.prototype.redoAction = function () {\n var editor = this.owner.editorModule;\n this.action = this.action;\n switch (this.action) {\n case 'BackSpace':\n editor.singleBackspace(this.owner.selectionModule, true);\n break;\n case 'Delete':\n editor.singleDelete(this.owner.selectionModule, true);\n break;\n case 'DeleteTable':\n editor.deleteTable();\n break;\n case 'DeleteColumn':\n editor.deleteColumn();\n break;\n case 'DeleteRow':\n editor.deleteRow();\n break;\n case 'MergeCells':\n editor.mergeSelectedCellsInTable();\n break;\n case 'InsertRowAbove':\n editor.insertRow(true);\n break;\n case 'InsertRowBelow':\n editor.insertRow(false);\n break;\n case 'InsertColumnLeft':\n editor.insertColumn(true);\n break;\n case 'InsertColumnRight':\n editor.insertColumn(true);\n break;\n case 'SectionBreak':\n editor.insertSection(this.owner.selectionModule, true);\n break;\n case 'SectionBreakContinuous':\n editor.insertSection(this.owner.selectionModule, true, undefined, true);\n break;\n case 'TableAutoFitToContents':\n editor.autoFitTable('FitToContents');\n break;\n case 'TableAutoFitToWindow':\n editor.autoFitTable('FitToWindow');\n break;\n case 'TableFixedColumnWidth':\n editor.autoFitTable('FixedColumnWidth');\n break;\n case 'RemoveRowTrack':\n this.owner.selectionModule.handleAcceptReject(true);\n break;\n }\n };\n BaseHistoryInfo.prototype.revertModifiedNodes = function (deletedNodes, isRedoAction, start, isEmptySelection, end) {\n if (isRedoAction && (this.action === 'BackSpace' || this.action === 'Delete' || this.action === 'DeleteTable'\n || this.action === 'DeleteColumn' || this.action === 'DeleteRow' || this.action === 'InsertRowAbove' ||\n this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft' || this.action === 'InsertColumnRight'\n || this.action === 'MergeCells' || this.action === 'SectionBreak' || this.action === 'SectionBreakContinuous' || this.action === 'TableAutoFitToContents' ||\n this.action === 'TableAutoFitToWindow' || this.action === 'TableFixedColumnWidth' || this.action === 'PasteColumn' || this.action === 'PasteOverwrite' || this.action === 'PasteNested')) {\n this.redoAction();\n if (this.action === 'SectionBreak' || this.action === 'SectionBreakContinuous') {\n return;\n }\n }\n if (deletedNodes.length > 0) {\n //tslint:disable-next-line:max-line-length\n if ((this.editorHistory.isUndoing && (this.action === 'RemoveRowTrack' || this.action === 'DeleteCells' ||\n this.action === 'DeleteColumn' || this.action === 'DeleteRow' || this.action === 'MergeCells'))\n || (this.action === 'InsertRowAbove' || this.action === 'InsertRowBelow' || this.action === 'InsertColumnLeft'\n //tslint:disable-next-line:max-line-length\n || this.action === 'ClearCells' || this.action === 'InsertColumnRight' || this.action === 'Borders' || this.action === 'TableAutoFitToContents' || this.action === 'TableAutoFitToWindow' ||\n this.action === 'TableFixedColumnWidth' || this.action === 'RemoveRowTrack' || this.action === 'PasteColumn' || this.action === 'PasteRow' || this.action === 'PasteOverwrite' || this.action === 'PasteNested')) {\n var insertIndex = this.selectionStart;\n var block = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n var lastNode = deletedNodes[deletedNodes.length - 1];\n if ((block instanceof TableWidget || block.previousRenderedWidget instanceof TableWidget || block.isInsideTable)\n && lastNode instanceof TableWidget) {\n if (block instanceof ParagraphWidget && !block.isInsideTable) {\n block = block.previousRenderedWidget;\n }\n else if (block instanceof ParagraphWidget && block.isInsideTable) {\n block = block.associatedCell.ownerTable;\n }\n block = block.combineWidget(this.viewer);\n if (this.owner.enableCollaborativeEditing) {\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, block).position;\n this.endIndex = this.startIndex + this.owner.selectionModule.getBlockLength(undefined, block, 0, { done: false }, true, undefined, undefined);\n var operation = this.getDeleteOperation('Delete');\n if (this.owner.enableTrackChanges) {\n if (isNullOrUndefined(operation.markerData)) {\n operation.markerData = {};\n }\n operation.markerData.isSkipTracking = true;\n }\n this.cellOperation.push(operation);\n }\n this.owner.editorModule.insertTableInternal(block, lastNode, false);\n if (this.action === 'PasteColumn' || this.action === 'PasteRow' || this.action === 'PasteOverwrite' || this.action === 'PasteNested') {\n this.removedNodes.push(block);\n }\n else {\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n // Call the insertRemovedNodes API to insert remining elements that are present in the removed nodes collection.\n if (deletedNodes.length > 0) {\n if (!isNullOrUndefined(deletedNodes[deletedNodes.length - 1]) && !isNullOrUndefined(lastNode.nextRenderedWidget) && lastNode.nextRenderedWidget instanceof ParagraphWidget) {\n this.owner.selectionModule.start.setPositionParagraph(lastNode.nextRenderedWidget.firstChild, 0);\n this.owner.selectionModule.end.setPositionParagraph(lastNode.nextRenderedWidget.firstChild, 0);\n }\n this.insertRemovedNodes(deletedNodes, deletedNodes[deletedNodes.length - 1]);\n }\n }\n }\n else if (lastNode instanceof TableWidget && !(this.action === 'RemoveRowTrack')) {\n this.owner.editorModule.insertBlock(lastNode);\n }\n else {\n this.insertRemovedNodes(deletedNodes, deletedNodes[deletedNodes.length - 1]);\n }\n }\n else {\n var initialStart = start;\n var block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n // initialStart = blockObj.position;\n if (deletedNodes.length > 0 && (this.action === 'BackSpace' && isEmptySelection\n || (!(block instanceof TableWidget) && !(block instanceof HeaderFooterWidget)))) {\n var lastNode = deletedNodes[0];\n if (lastNode instanceof BodyWidget && !isNullOrUndefined(deletedNodes[1])) {\n lastNode = deletedNodes[1];\n }\n if (this.action === 'TrackingPageBreak' || ((this.action === 'SectionBreak' || this.action === 'SectionBreakContinuous') && lastNode instanceof BodyWidget ||\n !isNullOrUndefined(this.editorHistory.currentHistoryInfo) &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak')) {\n lastNode = deletedNodes[1];\n }\n if (lastNode instanceof WCharacterFormat) {\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = lastNode;\n this.owner.editorModule.insertNewParagraphWidget(newParagraph, true);\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n block = newParagraph;\n }\n var skipinsert = false;\n if (!isNullOrUndefined(this.isAcceptOrReject)) {\n skipinsert = true;\n if (!isNullOrUndefined(this.owner.selectionModule.start.paragraph.nextRenderedWidget) && this.owner.selectionModule.start.paragraph.nextRenderedWidget instanceof TableWidget) {\n skipinsert = false;\n }\n }\n if (lastNode instanceof ParagraphWidget && this.owner.selectionModule.start.offset > 0 && !skipinsert) {\n this.owner.editorModule.insertNewParagraphWidget(lastNode, true);\n if (lastNode.characterFormat.removedIds.length > 0) {\n this.owner.editorModule.constructRevisionFromID(lastNode.characterFormat, undefined);\n }\n deletedNodes.splice(deletedNodes.indexOf(lastNode), 1);\n if (isNullOrUndefined(block)) {\n var nextBlock = this.documentHelper.selection.getNextParagraphBlock(lastNode.getSplitWidgets().pop());\n this.owner.selectionModule.getNextRenderedBlock(lastNode);\n var startParagraph = this.owner.selectionModule.start.paragraph;\n if (nextBlock && startParagraph && startParagraph.bodyWidget instanceof BodyWidget\n && !startParagraph.isInsideTable && !this.owner.selectionModule.isinEndnote && !this.owner.selectionModule.isinFootnote\n && !startParagraph.bodyWidget.equals(nextBlock.bodyWidget)) {\n nextBlock = undefined;\n }\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selectionModule.selectParagraphInternal(lastNode, true);\n }\n }\n }\n if (lastNode instanceof TableWidget && this.owner.selectionModule.start.offset > 0) {\n var firstBlock = deletedNodes[deletedNodes.length - 1];\n if (firstBlock instanceof ParagraphWidget) {\n this.owner.editorModule.insertNewParagraphWidget(firstBlock, true);\n deletedNodes.splice(deletedNodes.indexOf(firstBlock), 1);\n if (isNullOrUndefined(block)) {\n var nextBlock = this.documentHelper.selection.getNextParagraphBlock(firstBlock.getSplitWidgets().pop());\n if (isNullOrUndefined(nextBlock)) {\n //Sets the selection as starting of last paragraph.\n this.owner.selectionModule.selectParagraphInternal(firstBlock, true);\n }\n }\n }\n }\n }\n if (deletedNodes.length > 0) {\n var firstNode = deletedNodes[deletedNodes.length - 1];\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n if (firstNode instanceof TableWidget) {\n if (this.owner.enableCollaborativeEditing) {\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n var startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, block).position;\n var endIndex = startIndex + this.owner.selectionModule.getBlockLength(undefined, block, 0, { done: false }, true, undefined, undefined);\n var operation = this.getDeleteOperation('Delete');\n operation.offset = startIndex;\n operation.length = endIndex - startIndex;\n this.cellOperation.push(operation);\n }\n this.owner.editorModule.insertTableInternal(block, firstNode, true);\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n this.insertPosition = start;\n var nextWidget = firstNode.getSplitWidgets().pop();\n if (nextWidget.nextRenderedWidget instanceof TableWidget) {\n block = nextWidget.nextRenderedWidget;\n }\n else {\n initialStart = start;\n block = this.owner.editorModule.getBlock({ index: initialStart }).node;\n }\n }\n }\n //Checks if first node is paragraph and current insert position is paragraph end.\n if (firstNode instanceof ParagraphWidget && this.owner.selectionModule.start.offset > 0\n && this.owner.selectionModule.start.offset === this.owner.selectionModule.getLineLength(this.owner.selectionModule.start.paragraph.lastChild)) {\n var editor = this.owner.editorModule;\n editor.insertNewParagraphWidget(firstNode, false);\n if (firstNode.characterFormat.removedIds.length > 0) {\n this.owner.editorModule.constructRevisionFromID(firstNode.characterFormat, undefined);\n }\n deletedNodes.splice(deletedNodes.indexOf(firstNode), 1);\n //Removes the intermediate empty paragraph instance.\n if (this.action !== 'Paste' && this.owner.selectionModule.start.paragraph !== firstNode.containerWidget.lastChild) {\n editor.removeBlock(this.owner.selectionModule.start.paragraph);\n }\n var paragraph = this.documentHelper.selection.getNextParagraphBlock(firstNode.getSplitWidgets().pop());\n if (!isNullOrUndefined(paragraph) && firstNode !== firstNode.containerWidget.lastChild) {\n this.owner.selectionModule.selectParagraphInternal(paragraph, true);\n }\n else if (!isNullOrUndefined(firstNode)) {\n this.owner.selectionModule.selectParagraphInternal(firstNode, false);\n }\n }\n else if (deletedNodes[0] instanceof TableWidget && deletedNodes.length !== 1) {\n var nextNode = deletedNodes[1];\n if (nextNode instanceof ParagraphWidget && nextNode.isEmpty()) {\n deletedNodes.splice(deletedNodes.indexOf(nextNode), 1);\n }\n }\n }\n if (deletedNodes.length > 0) {\n if (block instanceof TableWidget) {\n block = block.combineWidget(this.viewer);\n }\n this.insertRemovedNodes(deletedNodes, block, end);\n }\n }\n }\n };\n BaseHistoryInfo.prototype.insertRemovedNodes = function (deletedNodes, block, endIndex) {\n // Use this property to relayout whole document (after complete all insertion intead of each section insertion) when insert section (this functionality already added in insertSection API).\n var isRelayout = false;\n for (var i = deletedNodes.length - 1, index = 0; i > -1; i--) {\n var node = deletedNodes[i];\n if (this.isHyperlinkField && !isNullOrUndefined(endIndex) && node instanceof FieldElementBox && node.fieldType === 1) {\n // Bug 873011: Updated the selection for field end element insertion on \"Accept Change\" undo case.\n this.owner.selectionModule.start.setPositionInternal(this.owner.selectionModule.getTextPosBasedOnLogicalIndex(endIndex));\n this.owner.selectionModule.end.setPositionInternal(this.owner.selectionModule.start);\n }\n if (node instanceof ElementBox) {\n this.owner.editorModule.insertInlineInSelection(this.owner.selectionModule, node);\n }\n else if (node instanceof ParagraphWidget && node.childWidgets === undefined) {\n this.owner.selection.moveToNextParagraph();\n }\n else if (node instanceof BlockWidget) {\n if (node instanceof TableRowWidget) {\n if (block instanceof TableWidget) {\n block.childWidgets.splice(index, 0, node);\n this.owner.editorModule.updateNextBlocksIndex(node, true);\n if (i === 0 || !(deletedNodes[i - 1] instanceof TableRowWidget)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n }\n }\n }\n else if (block instanceof TableWidget && this.action !== 'RemoveRowTrack') {\n this.owner.editorModule.insertBlockTable(this.owner.selectionModule, node, block);\n }\n else {\n if (node instanceof ParagraphWidget && !node.isInsideTable && this.action === 'RemoveRowTrack') {\n this.owner.editorModule.insertNewParagraphWidget(node, false);\n }\n else if (node instanceof TableWidget && this.action === 'RemoveRowTrack') {\n this.owner.editorModule.insertTableInternal(node, node, false, true);\n if (!isNullOrUndefined(deletedNodes[i - 1]) && !isNullOrUndefined(node.nextRenderedWidget) && node.nextRenderedWidget instanceof ParagraphWidget) {\n this.owner.selectionModule.start.setPositionParagraph(node.nextRenderedWidget.firstChild, 0);\n this.owner.selectionModule.end.setPositionParagraph(node.nextRenderedWidget.firstChild, 0);\n }\n }\n else {\n this.owner.editorModule.insertBlock(node);\n }\n }\n }\n else if (node instanceof WCharacterFormat) {\n var insertIndex = this.selectionStart;\n var wiget = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n if (wiget instanceof ParagraphWidget) {\n if (node.removedIds.length > 0) {\n wiget.characterFormat.removedIds = node.removedIds.slice();\n this.owner.editorModule.constructRevisionFromID(wiget.characterFormat, true);\n }\n else if (wiget.characterFormat.revisions.length > 0) {\n wiget.characterFormat = node.cloneFormat();\n }\n }\n }\n else if (node instanceof BodyWidget) {\n if (!isNullOrUndefined(node.removedHeaderFooters) && node.removedHeaderFooters.length !== 0) {\n this.owner.documentHelper.headersFooters.splice(node.sectionIndex, 0, node.removedHeaderFooters[0]);\n node.removedHeaderFooters = undefined;\n }\n isRelayout = true;\n this.owner.editorModule.insertSection(this.owner.selectionModule, false, true, undefined, undefined, node.sectionFormat);\n }\n else if (typeof (node) === 'string' && this.action === 'AcceptTOC') {\n var insertIndex = this.selectionStart;\n var widget = this.owner.editorModule.getBlock({ index: insertIndex }).node;\n var endWidget = this.owner.editorModule.getBlock({ index: this.selectionEnd }).node;\n var currentRevision = this.owner.documentHelper.revisionsInternal.get(node);\n if (this.editorHistory.isUndoing) {\n while (widget instanceof ParagraphWidget && widget !== endWidget) {\n this.owner.editorModule.insertRevisionForBlock(widget, currentRevision.revisionType, true, currentRevision);\n widget = this.documentHelper.selection.getNextParagraphBlock(widget.getSplitWidgets().pop());\n }\n this.owner.editorModule.insertRevisionForBlock(endWidget, currentRevision.revisionType, true, currentRevision);\n }\n else {\n while (currentRevision.range.length > 0) {\n var item = currentRevision.range[0];\n var revisionIndex = item.revisions.indexOf(currentRevision);\n if (revisionIndex >= 0) {\n item.revisions.splice(revisionIndex, 1);\n var rangeIndex = currentRevision.range.indexOf(item);\n currentRevision.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n this.owner.editorModule.addRemovedNodes(currentRevision.revisionID);\n }\n }\n if (isRelayout) {\n this.owner.editorModule.layoutWholeDocument(true);\n }\n deletedNodes = [];\n };\n BaseHistoryInfo.prototype.undoRevisionForElements = function (start, end, id) {\n var currentPara = start.paragraph;\n var endPara = end.paragraph;\n var currentRevision = this.documentHelper.revisionsInternal.get(id);\n var startoffset = this.owner.selectionModule.getParagraphInfo(start).offset;\n var endoffset = this.owner.selectionModule.getParagraphInfo(end).offset;\n var isSamePara = start.paragraph === end.paragraph;\n var isSplittedWidget = false;\n if (this.editorHistory.isUndoing) {\n while (currentPara !== endPara) {\n isSplittedWidget = false;\n var endOffset = 0;\n if (!isNullOrUndefined(currentPara.previousSplitWidget)) {\n startoffset = currentPara.previousSplitWidget.getLength() + 1;\n endOffset = currentPara.previousSplitWidget.getLength() + currentPara.getLength();\n }\n else {\n endOffset = currentPara.getLength();\n }\n this.owner.editorModule.applyRevisionForCurrentPara(currentPara, startoffset, endOffset, id, true);\n //Correct the condition to get next widget instead of next widget of next splitted widget\n currentPara = this.documentHelper.selection.getNextParagraphBlock(currentPara);\n if (!isNullOrUndefined(currentPara) && !isNullOrUndefined(currentPara.previousRenderedWidget) && currentPara.previousRenderedWidget instanceof ParagraphWidget && currentPara.previousRenderedWidget.nextSplitWidget && currentPara === endPara) {\n isSplittedWidget = true;\n }\n if (currentPara !== endPara) {\n startoffset = 0;\n }\n }\n if (currentPara === endPara) {\n if (!isSamePara) {\n startoffset = 0;\n }\n // Update the startoffset to the paragraph end if next paragraph is splitted widget\n if (isSplittedWidget) {\n startoffset = currentPara.previousRenderedWidget.getLength();\n }\n this.owner.editorModule.applyRevisionForCurrentPara(currentPara, startoffset, endoffset, id, false);\n }\n }\n else {\n while (currentRevision.range.length > 0) {\n var item = currentRevision.range[0];\n var revisionIndex = item.revisions.indexOf(currentRevision);\n if (revisionIndex >= 0) {\n item.revisions.splice(revisionIndex, 1);\n var rangeIndex = currentRevision.range.indexOf(item);\n currentRevision.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n if (currentPara.characterFormat.revisions.length > 0 && this.editorHistory.isRedoing) {\n for (var i = 0; i < currentPara.characterFormat.revisions.length; i++) {\n var revision = currentPara.characterFormat.revisions[i];\n if (revision.range.length === 0) {\n currentPara.characterFormat.revisions.splice(i, 1);\n i--;\n }\n }\n }\n }\n }\n this.removedNodes.push(id);\n };\n BaseHistoryInfo.prototype.revertResizing = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n if (this.action === 'RowResizing') {\n if (this.modifiedProperties[0] instanceof RowHistoryFormat) {\n var prevRowHistoryFormat = this.modifiedProperties[0];\n var position = prevRowHistoryFormat.tableHierarchicalIndex;\n var block = this.owner.editorModule.getBlock({ index: position }).node;\n if (block instanceof TableWidget) {\n this.modifiedProperties[0].revertChanges(this.editorHistory.isRedoing, this.owner, block);\n }\n }\n }\n else {\n if (this.modifiedProperties[0] instanceof TableHistoryInfo) {\n //selected cell resizing the condition checks done based on the selected widgets only. so need to highlight the selection.\n if (this.owner.selectionModule.selectedWidgets.length === 0) {\n this.owner.selectionModule.highlightSelection(true);\n }\n var prevTableHistoryInfo = this.modifiedProperties[0];\n var position = prevTableHistoryInfo.tableHierarchicalIndex;\n var block = this.owner.editorModule.getBlock({ index: position }).node;\n if (block instanceof TableWidget) {\n var tableResize = this.owner.editorModule.tableResize;\n this.owner.editorModule.setOffsetValue(this.owner.selectionModule);\n block = block.combineWidget(this.owner.viewer);\n tableResize.currentResizingTable = block;\n this.modifiedProperties.splice(0, 1);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var tableHistoryInfoCurrent = new TableHistoryInfo(block, this.owner);\n this.modifiedProperties.splice(0, 0, tableHistoryInfoCurrent);\n this.owner.isLayoutEnabled = false;\n tableResize.applyProperties(tableResize.currentResizingTable, prevTableHistoryInfo);\n tableResize.currentResizingTable.isGridUpdated = true;\n this.owner.isLayoutEnabled = true;\n tableResize.updateGridValue(tableResize.currentResizingTable, false);\n prevTableHistoryInfo.destroy();\n prevTableHistoryInfo = undefined;\n }\n }\n }\n }\n };\n BaseHistoryInfo.prototype.revertTableDialogProperties = function (action) {\n this.owner.isShiftingEnabled = false;\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n if (action === 'CellOptions') {\n var selection = this.owner.selectionModule;\n var cellFormat = this.modifiedProperties[0];\n this.owner.editorModule.updateCellMargins(selection, cellFormat);\n }\n else if (action === 'TableOptions') {\n this.owner.tableOptionsDialogModule.applyTableOptionsHelper(this.modifiedProperties[0]);\n }\n this.currentPropertyIndex = 0;\n this.owner.isShiftingEnabled = true;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForSection = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var modifiedProperties = this.modifiedProperties;\n var previousFormat = (this.currentPropertyIndex < modifiedProperties.length ?\n modifiedProperties[this.currentPropertyIndex] : modifiedProperties[modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n else {\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(format);\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WSectionFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n var skipRemove = false;\n if (format.ownerBase instanceof ElementBox) {\n var prevLength = this.modifiedNodeLength[this.currentPropertyIndex];\n if (format.ownerBase.length < prevLength) {\n skipRemove = true;\n this.modifiedNodeLength[this.currentPropertyIndex] = format.ownerBase.length;\n this.modifiedNodeLength.splice(this.currentPropertyIndex + 1, 0, prevLength - format.ownerBase.length);\n //Adds a copy of character format at next position for splitted inline.\n var nextFormat = new WCharacterFormat(undefined);\n nextFormat.copyFormat(previousFormat);\n this.modifiedProperties.splice(this.currentPropertyIndex + 1, 0, nextFormat);\n }\n }\n if (this.action === 'ClearCharacterFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n if (!skipRemove) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n }\n else {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n }\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WCharacterFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n if (format.ownerBase instanceof ElementBox) {\n this.modifiedNodeLength.push(format.ownerBase.length);\n }\n else {\n this.modifiedNodeLength.push(0);\n }\n }\n return value;\n };\n /**\n * build character Operation for undo/redo\n *\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.buildCharacterFormatOperation = function (widget, format) {\n var position = this.owner.selectionModule.getElementPosition(widget, true).startPosition;\n var start = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(position);\n position.offset += widget.length;\n var end = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(position);\n var characterData = this.owner.sfdtExportModule.writeCharacterFormat(format, 0, true);\n var operation = {\n action: 'Format',\n offset: start,\n length: end - start,\n format: JSON.stringify(characterData),\n type: 'CharacterFormat',\n };\n this.modifiedFormatOperation.push(operation);\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForParagraphFormat = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.action === 'ClearParagraphFormat') {\n if (this.editorHistory.isUndoing) {\n value = previousFormat;\n this.modifiedProperties.splice(this.currentPropertyIndex, 1);\n this.currentPropertyIndex--;\n }\n else {\n this.modifiedProperties.push(format.cloneFormat());\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'listFormat') {\n value = new WParagraphFormat(undefined);\n value.copyFormat(previousFormat);\n previousFormat.listFormat = new WListFormat(previousFormat);\n previousFormat.listFormat.copyFormat(format.listFormat);\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'tabStop') {\n value = [];\n for (var i = 0; i < previousFormat.tabs.length; i++) {\n value.push(previousFormat.tabs[i]);\n }\n var currentFormat = new WParagraphFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties[this.currentPropertyIndex] = currentFormat;\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'styleName') {\n if (!isNullOrUndefined(previousFormat.baseStyle)) {\n value = new WParagraphStyle();\n value.copyStyle(previousFormat.baseStyle);\n this.currentPropertyIndex++;\n if (!isNullOrUndefined(format.baseStyle)) {\n previousFormat.baseStyle = new WParagraphStyle();\n previousFormat.baseStyle.copyStyle(format.baseStyle);\n }\n return value;\n }\n else {\n if (!isNullOrUndefined(format.baseStyle)) {\n previousFormat.baseStyle = new WParagraphStyle();\n previousFormat.baseStyle.copyStyle(format.baseStyle);\n }\n return undefined;\n }\n }\n if (property === 'borders') {\n value = previousFormat.borders.cloneFormat();\n }\n else if (this.action.indexOf('Border') >= 0) {\n value = previousFormat.borders.getBorder(property.replace('Border', ''));\n }\n else {\n value = previousFormat.getPropertyValue(property);\n }\n previousFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n if (isNullOrUndefined(property)) {\n this.modifiedProperties.push(format.cloneFormat());\n }\n else {\n var currentFormat = new WParagraphFormat(undefined);\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n }\n return value;\n };\n /**\n * build paragraph Operation for undo/redo\n *\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.getParagraohFormatOperation = function (paragarph, format) {\n var _a;\n if ((this.modifiedProperties.length > 1 || this.modifiedFormatOperation.length > 0) && !isNullOrUndefined(paragarph)) {\n var position = this.owner.selectionModule.setPositionForBlock(paragarph, true);\n this.startIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(position);\n this.endIndex = this.startIndex + this.owner.selectionModule.getBlockLength(undefined, paragarph, 0, { done: false }, true, undefined, undefined) - 1;\n this.insertedFormat = format;\n (_a = this.modifiedFormatOperation).push.apply(_a, this.getActionInfo(true));\n }\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForContinueNumbering = function (paragraphFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = paragraphFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = paragraphFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n var currentFormat = new WParagraphFormat();\n currentFormat.copyFormat(paragraphFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForRestartNumbering = function (listFormat, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var listId = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = listId;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = listFormat.listId;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = listFormat.listId;\n }\n this.currentPropertyIndex++;\n return value;\n }\n else {\n this.modifiedProperties.push(listFormat.listId);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedPropertiesForList = function (listLevel) {\n var value;\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousLevel = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n value = previousLevel;\n previousLevel = new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel));\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = previousLevel;\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = previousLevel;\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(new ModifiedLevel(listLevel, this.owner.editorModule.cloneListLevel(listLevel)));\n value = listLevel;\n }\n return value;\n };\n BaseHistoryInfo.prototype.revertProperties = function () {\n this.editorHistory.currentBaseHistoryInfo = this;\n this.currentPropertyIndex = 0;\n var property = this.getProperty();\n this.viewer.owner.editorModule.setOffsetValue(this.documentHelper.selection);\n if (this.action === 'ClearCharacterFormat' || this.modifiedProperties[0] instanceof WCharacterFormat) {\n if (this.action === 'ListCharacterFormat') {\n this.owner.editorModule.updateListCharacterFormat(this.documentHelper.selection, property, undefined);\n return;\n }\n this.owner.editorModule.updateSelectionCharacterFormatting(property, undefined, false);\n }\n else if (this.action === 'ClearParagraphFormat' || this.modifiedProperties[0] instanceof WParagraphFormat) {\n if (this.action === 'ContinueNumbering') {\n this.owner.editorModule.revertContinueNumbering(this.owner.selectionModule, this.modifiedProperties[0]);\n return;\n }\n if (this.action === 'StyleName' && this.modifiedProperties[0] instanceof WParagraphFormat) {\n this.owner.editorModule.updateSelectionParagraphFormatting(property, this.modifiedProperties[0].baseStyle, false);\n return;\n }\n this.owner.editorModule.setPreviousBlockToLayout();\n this.owner.editorModule.updateSelectionParagraphFormatting(property, undefined, false);\n }\n else if (this.action === 'LinkToPrevious' && this.modifiedProperties[0] instanceof WSectionFormat) {\n var sectionIndex = parseInt(this.selectionStart.split(';')[0]);\n this.owner.editorModule.updateHeaderFooters(property, undefined, sectionIndex, this.modifiedProperties[0].removedHeaderFooters[0]);\n }\n else if (this.modifiedProperties[0] instanceof WSectionFormat) {\n this.owner.editorModule.updateSectionFormat(property, undefined);\n }\n else if (this.action === 'RestartNumbering') {\n this.owner.editorModule.restartListAtInternal(this.owner.selectionModule, this.modifiedProperties[0]);\n return;\n }\n else if (this.modifiedProperties[0] instanceof ImageSizeInfo) {\n this.owner.selectionModule.updateImageSize(this.modifiedProperties[0]);\n }\n else if (this.modifiedProperties[0] instanceof ModifiedLevel) {\n var modified = new Dictionary();\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var modifiedLevel = this.modifiedProperties[i];\n // modified.modifiedLevels.add(modifiedLevel.ownerListLevel.levelNumber, modifiedLevel);\n modified.add(i, modifiedLevel);\n }\n this.editorHistory.updateListChanges(modified);\n modified.destroy();\n modified = undefined;\n }\n else if (this.modifiedProperties[0] instanceof WTableFormat) {\n this.owner.editorModule.updateTableFormat(this.owner.selectionModule, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WCellFormat) {\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.updateCellFormat(this.owner.selectionModule, property, undefined);\n }\n else if (this.modifiedProperties[0] instanceof WRowFormat) {\n this.owner.editorModule.updateRowFormat(this.owner.selectionModule, property, undefined);\n }\n else if (this.action === 'ModifyStyle') {\n var styleObject = this.modifiedProperties.pop();\n this.owner.editor.updateStyleObject(styleObject);\n }\n this.currentPropertyIndex = 0;\n if (this.action === 'ClearCharacterFormat' || this.action === 'ClearParagraphFormat') {\n this.owner.editorModule.getOffsetValue(this.documentHelper.selection);\n }\n };\n BaseHistoryInfo.prototype.addModifiedCellOptions = function (applyFormat, format, table) {\n var currentFormat;\n if (isNullOrUndefined(applyFormat.bottomMargin) && isNullOrUndefined(applyFormat.topMargin)\n && isNullOrUndefined(applyFormat.rightMargin) && isNullOrUndefined(applyFormat.leftMargin)) {\n currentFormat = this.copyCellOptions(table.tableFormat);\n }\n else {\n currentFormat = this.copyCellOptions(applyFormat);\n }\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n format = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = this.copyCellOptions(applyFormat);\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = this.copyCellOptions(applyFormat);\n }\n this.currentPropertyIndex++;\n return format;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n return format;\n };\n BaseHistoryInfo.prototype.copyCellOptions = function (format) {\n var cellFormat = new WCellFormat();\n cellFormat.topMargin = format.topMargin;\n cellFormat.rightMargin = format.rightMargin;\n cellFormat.bottomMargin = format.bottomMargin;\n cellFormat.leftMargin = format.leftMargin;\n return cellFormat;\n };\n BaseHistoryInfo.prototype.addModifiedTableOptions = function (format) {\n var currentFormat = this.copyTableOptions(format);\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties.splice(this.currentPropertyIndex, 1, currentFormat);\n }\n else {\n this.modifiedProperties.splice(this.modifiedProperties.length - 1, 1, currentFormat);\n }\n this.currentPropertyIndex++;\n }\n else {\n this.modifiedProperties.push(currentFormat);\n }\n };\n BaseHistoryInfo.prototype.copyTableOptions = function (format) {\n var tableFormat = new WTableFormat();\n tableFormat.topMargin = format.topMargin;\n tableFormat.rightMargin = format.rightMargin;\n tableFormat.bottomMargin = format.bottomMargin;\n tableFormat.leftMargin = format.leftMargin;\n tableFormat.cellSpacing = format.cellSpacing;\n return tableFormat;\n };\n BaseHistoryInfo.prototype.getProperty = function () {\n switch (this.action) {\n case 'Bold':\n return 'bold';\n case 'Italic':\n return 'italic';\n case 'FontColor':\n return 'fontColor';\n case 'FontFamily':\n return 'fontFamily';\n case 'FontSize':\n return 'fontSize';\n case 'HighlightColor':\n return 'highlightColor';\n case 'BaselineAlignment':\n return 'baselineAlignment';\n case 'Strikethrough':\n return 'strikethrough';\n case 'Underline':\n return 'underline';\n case 'AfterSpacing':\n return 'afterSpacing';\n case 'BeforeSpacing':\n return 'beforeSpacing';\n case 'LeftIndent':\n return 'leftIndent';\n case 'RightIndent':\n return 'rightIndent';\n case 'FirstLineIndent':\n return 'firstLineIndent';\n case 'LineSpacingType':\n return 'lineSpacingType';\n case 'LineSpacing':\n return 'lineSpacing';\n case 'TextAlignment':\n return 'textAlignment';\n case 'ListFormat':\n return 'listFormat';\n case 'PageHeight':\n return 'pageHeight';\n case 'PageWidth':\n return 'pageWidth';\n case 'DifferentOddAndEvenPages':\n return 'differentOddAndEvenPages';\n case 'TableAlignment':\n return 'tableAlignment';\n case 'TableLeftIndent':\n return 'leftIndent';\n case 'DefaultCellSpacing':\n return 'cellSpacing';\n case 'LeftMargin':\n case 'CellLeftMargin':\n case 'DefaultCellLeftMargin':\n return 'leftMargin';\n case 'RightMargin':\n case 'CellRightMargin':\n case 'DefaultCellRightMargin':\n return 'rightMargin';\n case 'TopMargin':\n case 'CellTopMargin':\n case 'DefaultCellTopMargin':\n return 'topMargin';\n case 'BottomMargin':\n case 'CellBottomMargin':\n case 'DefaultCellBottomMargin':\n return 'bottomMargin';\n case 'CellContentVerticalAlignment':\n return 'verticalAlignment';\n case 'RowHeight':\n return 'height';\n case 'RowHeightType':\n return 'heightType';\n case 'RowHeader':\n return 'isHeader';\n case 'AllowBreakAcrossPages':\n return 'allowBreakAcrossPages';\n case 'TablePreferredWidth':\n case 'CellPreferredWidth':\n return 'preferredWidth';\n case 'TablePreferredWidthType':\n case 'CellPreferredWidthType':\n return 'preferredWidthType';\n case 'Shading':\n return 'shading';\n case 'StyleName':\n return 'styleName';\n case 'ParagraphBidi':\n case 'TableBidi':\n return 'bidi';\n case 'ContextualSpacing':\n return 'contextualSpacing';\n case 'LinkToPrevious':\n return 'linkToPrevious';\n case 'LeftBorder':\n case 'TopBorder':\n case 'RightBorder':\n case 'BottomBorder':\n case 'HorizontalBorder':\n case 'VerticalBorder':\n case 'Borders':\n return (this.action[0].toLowerCase() + this.action.slice(1));\n case 'TabStop':\n return 'tabStop';\n }\n return undefined;\n };\n BaseHistoryInfo.prototype.getCharacterPropertyValue = function (property, modifiedProperty) {\n var value;\n if (property === 'bold') {\n value = modifiedProperty.bold;\n }\n else if (property === 'italic') {\n value = modifiedProperty.italic;\n }\n else if (property === 'fontColor') {\n value = modifiedProperty.fontColor;\n }\n else if (property === 'fontFamily') {\n value = modifiedProperty.fontFamily;\n }\n else if (property === 'fontSize') {\n value = modifiedProperty.fontSize;\n }\n else if (property === 'highlightColor') {\n value = modifiedProperty.highlightColor;\n }\n else if (property === 'baselineAlignment') {\n value = modifiedProperty.baselineAlignment;\n }\n else if (property === 'strikethrough') {\n value = modifiedProperty.strikethrough;\n }\n else if (property === 'underline') {\n value = modifiedProperty.underline;\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedTableProperties = function (format, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousTableFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousTableFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = format.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = format.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousTableFormat.shading;\n }\n else {\n value = previousTableFormat.getPropertyValue(property);\n }\n previousTableFormat.copyFormat(format);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WTableFormat();\n currentFormat.copyFormat(format);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedRowProperties = function (rowFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (this.owner.enableCollaborativeEditing && this.modifiedProperties.length > 1 && rowFormat.ownerBase) {\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n var startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, rowFormat.ownerBase).position;\n var endIndex = startIndex + 1;\n var rowData = {};\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n this.owner.sfdtExportModule.assignRowFormat(rowData, previousFormat, 0);\n }\n var operation = {\n action: 'Format',\n offset: startIndex,\n length: endIndex - startIndex,\n format: JSON.stringify(rowData),\n type: 'RowFormat',\n };\n this.modifiedFormatOperation.push(operation);\n }\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = rowFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = rowFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n value = previousFormat.getPropertyValue(property);\n previousFormat.copyFormat(rowFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WRowFormat();\n currentFormat.copyFormat(rowFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n BaseHistoryInfo.prototype.addModifiedCellProperties = function (cellFormat, property, value) {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var previousFormat = (this.currentPropertyIndex < this.modifiedProperties.length ? this.modifiedProperties[this.currentPropertyIndex] : this.modifiedProperties[this.modifiedProperties.length - 1]);\n if (isNullOrUndefined(property)) {\n value = previousFormat;\n if (this.currentPropertyIndex < this.modifiedProperties.length) {\n this.modifiedProperties[this.currentPropertyIndex] = cellFormat.cloneFormat();\n }\n else {\n this.modifiedProperties[this.modifiedProperties.length - 1] = cellFormat.cloneFormat();\n }\n this.currentPropertyIndex++;\n return value;\n }\n if (property === 'shading') {\n value = previousFormat.shading;\n }\n else {\n value = previousFormat.getPropertyValue(property);\n }\n previousFormat.copyFormat(cellFormat);\n this.currentPropertyIndex++;\n }\n else {\n var currentFormat = new WCellFormat();\n currentFormat.copyFormat(cellFormat);\n this.modifiedProperties.push(currentFormat);\n }\n return value;\n };\n /**\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.destroy = function () {\n this.selectionStart = undefined;\n this.selectionEnd = undefined;\n this.insertPosition = undefined;\n this.endPosition = undefined;\n if (!isNullOrUndefined(this.modifiedNodeLength)) {\n this.modifiedNodeLength = [];\n this.modifiedNodeLength = undefined;\n }\n if (!isNullOrUndefined(this.modifiedProperties)) {\n for (var i = 0; i < this.modifiedProperties.length; i++) {\n var property = this.modifiedProperties[i];\n if (property instanceof WCharacterFormat) {\n property.destroy();\n }\n else if (property instanceof WParagraphFormat) {\n property.destroy();\n }\n else if (property instanceof WSectionFormat) {\n property.destroy();\n }\n else if (property instanceof ModifiedLevel) {\n property.destroy();\n }\n this.modifiedProperties.splice(this.modifiedProperties.indexOf(property), 1);\n i--;\n }\n this.modifiedPropertiesIn = undefined;\n }\n if (!isNullOrUndefined(this.removedNodes)) {\n for (var i = 0; i < this.removedNodes.length; i++) {\n var node = this.removedNodes[i];\n if (node instanceof ParagraphWidget) {\n node.destroyInternal(this.viewer);\n }\n else if (node instanceof ElementBox && !(node instanceof CommentCharacterElementBox)) {\n node.destroy();\n }\n this.removedNodes.splice(this.removedNodes.indexOf(node), 1);\n i--;\n }\n this.removedNodesIn = undefined;\n }\n if (!isNullOrUndefined(this.insertedNodes)) {\n for (var i = 0; i < this.insertedNodes.length; i++) {\n var node = this.insertedNodes[i];\n if (node instanceof ParagraphWidget) {\n node.destroyInternal(this.viewer);\n }\n else if (node instanceof ElementBox && !(node instanceof CommentCharacterElementBox)) {\n node.destroy();\n }\n this.insertedNodes.splice(this.insertedNodes.indexOf(node), 1);\n i--;\n }\n this.insertedNodes = undefined;\n }\n this.ownerIn = undefined;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.recordInsertRevisionDeletetion = function (widget, startOffset, endOffset) {\n if (this.startIndex > this.endIndex) {\n var temp = this.startIndex;\n this.startIndex = this.endIndex;\n this.endIndex = temp;\n }\n var startIndex = this.startIndex;\n var endIndex = this.endIndex;\n if (widget instanceof TextElementBox || widget instanceof ImageElementBox || widget instanceof FieldElementBox || widget instanceof BookmarkElementBox) {\n if (widget.revisions.length > 0) {\n var currentStart = this.owner.selectionModule.getElementPosition(widget, true).startPosition;\n startOffset = isNullOrUndefined(startOffset) ? 0 : startOffset;\n endOffset = isNullOrUndefined(endOffset) ? widget.length : endOffset;\n currentStart.setPositionParagraph(widget.line, startOffset + currentStart.offset);\n this.startIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(currentStart);\n this.endIndex = this.startIndex + endOffset;\n var revision = this.owner.editorModule.retrieveRevisionInOder(widget);\n var currentUser = this.owner.currentUser === '' ? 'Guest user' : this.owner.currentUser;\n if (revision.revisionType === 'Insertion' && revision.author !== currentUser) {\n this.revisionOperation.push(this.getFormatOperation());\n }\n else if (revision.revisionType === 'Insertion') {\n var operation = this.getDeleteOperation('Delete', undefined, undefined);\n this.revisionOperation.push(operation);\n endIndex -= operation.length;\n }\n else if (revision.revisionType === 'Deletion') {\n if (revision.author !== currentUser) {\n var operation = this.getFormatOperation(widget);\n if (widget.removedIds.length > 0) {\n for (var i = 0; i < widget.removedIds.length; i++) {\n if (!isNullOrUndefined(operation.markerData.removedIds)) {\n operation.markerData.removedIds = [];\n }\n operation.markerData.removedIds.push(widget.removedIds[i]);\n }\n }\n this.revisionOperation.push(operation);\n }\n }\n }\n }\n else if (widget instanceof ParagraphWidget) {\n var isAllRevision = true;\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var line = widget.childWidgets[i];\n if (line.children.length === 0) {\n isAllRevision = false;\n }\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (element.revisions.length <= 0) {\n isAllRevision = false;\n }\n else if (element.revisions[0].revisionType !== 'Insertion') {\n isAllRevision = false;\n }\n }\n }\n if (isAllRevision) {\n var position = new TextPosition(this.owner);\n position.setPositionParagraph(widget.childWidgets[0], 0);\n this.startIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(position);\n var length_1 = this.owner.selectionModule.getBlockLength(undefined, widget, 0, { done: false }, true, undefined, undefined);\n var currentUser = this.owner.currentUser === '' ? 'Guest user' : this.owner.currentUser;\n var revision = this.owner.editorModule.retrieveRevisionInOder(widget.childWidgets[0].children[0]);\n if (currentUser === revision.author) {\n this.endIndex = this.startIndex + length_1;\n this.revisionOperation.push(this.getDeleteOperation(this.action, undefined, this.getRemovedText(widget)));\n endIndex -= length_1;\n }\n }\n else {\n for (var i = 0; i < widget.childWidgets.length; i++) {\n for (var j = 0; j < widget.childWidgets[i].children.length; j++) {\n this.recordInsertRevisionDeletetion(widget.childWidgets[i].children[j]);\n startIndex = this.startIndex;\n endIndex = this.endIndex;\n }\n }\n }\n }\n this.startIndex = startIndex;\n this.endIndex = endIndex;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.getDeleteOperationsForTrackChanges = function () {\n var operations = [];\n var startIndex = this.startIndex;\n var endIndex = this.endIndex;\n var insertIndex = this.insertIndex;\n var isInsertRevision = false;\n this.startIndex = startIndex;\n this.endIndex = endIndex;\n for (var i = 0; i < this.revisionOperation.length; i++) {\n if (this.revisionOperation[i].action == 'Format' && isNullOrUndefined(this.revisionOperation[i].markerData)) {\n this.revisionOperation[i].markerData = this.markerData.pop();\n }\n operations.push(this.revisionOperation[i]);\n }\n for (var i = this.removedNodes.length - 1; i >= 0; i--) {\n var element = this.removedNodes[i];\n if (element instanceof TextElementBox || element instanceof ImageElementBox || element instanceof FieldElementBox || element instanceof BookmarkElementBox) {\n if (element.removedIds.length === 0) {\n var operation = this.getFormatOperation();\n if (!isNullOrUndefined(operation.markerData)) {\n for (var j = 0; j < this.markerData.length; j++) {\n if (this.markerData[j].revisionType === 'Deletion') {\n if (isNullOrUndefined(operation.markerData.splittedRevisions)) {\n operation.markerData.splittedRevisions = [];\n }\n if (this.checkValidRevision(this.markerData[j].revisionId)) {\n operation.markerData.splittedRevisions.push(this.markerData[j]);\n }\n this.markerData.splice(j, 1);\n j--;\n }\n }\n }\n operations.push(operation);\n break;\n }\n }\n else if (element instanceof ParagraphWidget) {\n if (element.characterFormat.revisions.length > 0) {\n operations.push(this.getDeleteOperation(this.action));\n }\n else if (element.characterFormat.removedIds.length > 0) {\n var operation = this.getDeleteOperation(this.action);\n operation.markerData.isAcceptOrReject = this.isAcceptOrReject;\n operations.push(operation);\n var position = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.insertPosition);\n if (!position.isAtParagraphStart) {\n //When accept the delete revision if paragraph is not start then paragraph is combining.\n var endIndex_1 = this.endIndex;\n this.endIndex = this.startIndex;\n operations.push(this.getDeleteOperation('Delete'));\n this.endIndex = endIndex_1;\n }\n break;\n }\n else if (element.characterFormat.revisions.length === 0) {\n var operation = this.getFormatOperation();\n for (var j = 0; j < this.markerData.length; j++) {\n if (this.markerData[j].revisionType === 'Deletion') {\n if (isNullOrUndefined(operation.markerData.splittedRevisions)) {\n operation.markerData.splittedRevisions = [];\n }\n if (this.checkValidRevision(this.markerData[j].revisionId)) {\n operation.markerData.splittedRevisions.push(this.markerData[j]);\n }\n this.markerData.splice(j, 1);\n j--;\n }\n }\n this.markerData = [];\n operations.push(operation);\n break;\n }\n }\n }\n return operations;\n };\n BaseHistoryInfo.prototype.checkValidRevision = function (revisionID) {\n for (var i = 0; i < this.owner.revisions.changes.length; i++) {\n if (this.owner.revisions.changes[i].revisionID === revisionID) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.getDeleteOperationForTrackChanges = function (element) {\n var operation;\n if (element instanceof TextElementBox || element instanceof ImageElementBox || element instanceof FieldElementBox || element instanceof BookmarkElementBox) {\n if (element.removedIds.length === 0) {\n operation = this.getFormatOperation(element);\n }\n else if (element.removedIds.length > 0) {\n var revisionId = element.removedIds[0];\n var revision = this.owner.editorModule.getRevision(revisionId);\n var currentUser = this.owner.currentUser === '' ? 'Guest user' : this.owner.currentUser;\n if (revision.revisionType === 'Insertion' && revision.author !== currentUser) {\n operation = this.getFormatOperation(element);\n }\n else if (revision.revisionType === 'Insertion') {\n operation = this.getDeleteOperation(this.action, undefined, this.getRemovedText(element));\n }\n else if (revision.revisionType === 'Deletion') {\n if (revision.author !== currentUser) {\n operation = this.getFormatOperation(element);\n if (element.removedIds.length > 0) {\n for (var i = 0; i < element.removedIds.length; i++) {\n if (!isNullOrUndefined(operation.markerData.removedIds)) {\n operation.markerData.removedIds = [];\n }\n operation.markerData.removedIds.push(element.removedIds[i]);\n }\n }\n }\n }\n }\n }\n if (this.action !== 'Enter' && !(element instanceof ParagraphWidget) && (isNullOrUndefined(operation) || operation.action !== 'Delete')) {\n this.startIndex += element.length;\n }\n return operation;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.getActionInfo = function (isInvertOperation) {\n var action = this.action;\n if (!isNullOrUndefined(this.isAcceptOrReject) && this.isAcceptOrReject === 'Reject') {\n action = 'Reject Change';\n }\n var operations = [];\n switch (action.toString()) {\n case 'Insert':\n case 'InsertTextParaReplace':\n case 'Enter':\n case 'InsertInline':\n case 'SectionBreak':\n case 'SectionBreakContinuous':\n if (this.removedNodes.length > 0 && isNullOrUndefined(this.dropDownIndex)) {\n if (this.owner.enableTrackChanges && !this.editorHistory.isUndoing) {\n operations = this.getDeleteOperationsForTrackChanges();\n if (action !== 'InsertInline') {\n this.insertIndex = this.endIndex;\n }\n }\n else {\n var deleteOperation = this.getDeleteOperation(action);\n if (action === 'Enter' && this.owner.enableTrackChanges && this.editorHistory.isUndoing) {\n deleteOperation.markerData = { isSkipTracking: true };\n }\n operations.push(deleteOperation);\n }\n }\n if ((action === 'Enter' || this.insertedText.length > 0)) {\n if (!this.editorHistory.isUndoing && (!this.editorHistory.isRedoing || action === 'Enter' || action === 'SectionBreak' || action === 'SectionBreakContinuous')) {\n var operation = this.getInsertOperation(action);\n if (this.owner.enableTrackChanges && this.action !== 'Enter') {\n if (this.insertedElement instanceof FootnoteElementBox) {\n operation.markerData = this.markerData[0];\n this.markerData.splice(0, 1);\n operation.text = CONTROL_CHARACTERS.Marker_Start;\n operation.markerData.type = this.insertedElement.footnoteType;\n operation.markerData.revisionForFootnoteEndnoteContent = this.markerData.pop();\n }\n operations.push(operation);\n for (var i = 0; i < this.splittedRevisions.length; i++) {\n if (isNullOrUndefined(operation.markerData)) {\n operation.markerData = {};\n }\n if (isNullOrUndefined(operation.markerData.splittedRevisions)) {\n operation.markerData.splittedRevisions = [];\n }\n operation.markerData.splittedRevisions.push(this.splittedRevisions[i]);\n }\n }\n else {\n operations.push(operation);\n }\n }\n else if (this.isRemovedNodes) {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n }\n var operation2 = operations[operations.length - 1];\n if (action === 'Insert' && !isNullOrUndefined(operation2.text)) {\n operation2.length = operation2.text.length;\n }\n if (!isNullOrUndefined(this.dropDownIndex)) {\n operation2.markerData = { 'type': 'Field', 'dropDownIndex': this.dropDownIndex };\n operation2.offset = this.getElementAbsolutePosition(this.fieldBegin);\n operation2.type = 'DropDown';\n }\n break;\n case 'InsertTable':\n case 'InsertTableBelow':\n if (this.removedNodes.length > 0) {\n operations.push(this.getDeleteOperation(action));\n }\n if (this.editorHistory.isUndoing && this.isRemovedNodes) {\n operations.push(this.getUndoRedoOperation(action));\n }\n else {\n var tableRowOperation = this.buildTableRowCellOperation(action);\n for (var i = 0; i < tableRowOperation.length; i++) {\n operations.push(tableRowOperation[i]);\n }\n }\n break;\n case 'InsertRowAbove':\n case 'InsertRowBelow':\n case 'InsertColumnLeft':\n case 'InsertColumnRight':\n if (this.editorHistory.isUndoing) {\n for (var i = 0; i < this.cellOperation.length; i++) {\n operations.push(this.cellOperation[i]);\n }\n var operation = this.getUndoRedoOperation(action, true);\n if (this.owner.enableTrackChanges && isNullOrUndefined(operation.markerData)) {\n operation.markerData = { isSkipTracking: true };\n }\n operations.push(operation);\n }\n else {\n var tableCellOperation = this.buildTableRowCellOperation(action);\n if (action === 'InsertRowAbove' || action === 'InsertRowBelow') {\n operations = tableCellOperation.slice();\n }\n else {\n operations = tableCellOperation.reverse().slice();\n }\n }\n break;\n case 'BackSpace':\n case 'Delete':\n case 'Cut':\n case 'DeleteBookmark':\n case 'RemoveEditRange':\n if (this.editorHistory.isUndoing) {\n if (action == \"DeleteBookmark\" || action == \"RemoveEditRange\") {\n this.startIndex -= 1;\n this.insertIndex = this.startIndex;\n this.insertedText = CONTROL_CHARACTERS.Marker_Start;\n operations.push(this.getInsertOperation(action));\n this.insertedText = CONTROL_CHARACTERS.Marker_End;\n operations.push(this.getInsertOperation(action, true));\n if (action === 'RemoveEditRange') {\n var operation = operations[operations.length - 1];\n operation.offset -= 1;\n }\n this.startIndex += 1;\n }\n else {\n if (this.endRevisionLogicalIndex && this.editorHistory.isUndoing) {\n if (this.removedNodes.length > 0) {\n var deleteOperation = this.getDeleteOperation(action);\n deleteOperation.markerData = { isSkipTracking: true };\n operations.push(deleteOperation);\n }\n if (this.isRemovedNodes) {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n }\n else {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n }\n }\n else {\n if (this.cellOperation.length > 0) {\n operations = this.cellOperation;\n this.cellOperation = [];\n }\n else {\n if (this.removedNodes.length > 0) {\n if (this.owner.enableTrackChanges) {\n if (this.editorHistory.isRedoing) {\n if (this.removedNodes.length > 0) {\n var deleteOperation = this.getDeleteOperation(action);\n deleteOperation.markerData = { isSkipTracking: true };\n operations.push(deleteOperation);\n }\n if (this.isRemovedNodes) {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n }\n else {\n operations = this.getDeleteOperationsForTrackChanges();\n }\n }\n else {\n var deleteOperation = this.getDeleteOperation(action);\n operations.push(deleteOperation);\n for (var i = 0; i < this.removedNodes.length; i++) {\n var element = this.removedNodes[parseInt(i.toString(), 10)];\n if (element instanceof BodyWidget) {\n var headersFooters = element.removedHeaderFooters;\n for (var j = 0; j < headersFooters.length; j++) {\n var headerFooter = headersFooters[parseInt(j.toString(), 10)];\n var keysLength = Object.keys(headerFooter).length;\n if (keysLength > 0) {\n operations.push(this.getDeleteOperation('DeleteHeaderFooter', undefined));\n break;\n }\n }\n }\n }\n if (action === 'DeleteBookmark' || action === 'RemoveEditRange') {\n operations.push(this.getDeleteOperation(action, true));\n if (action === 'RemoveEditRange') {\n var operation = operations[operations.length - 1];\n operation.offset -= 1;\n }\n }\n }\n }\n }\n }\n this.markerData = [];\n break;\n case 'ResolveComment':\n case 'EditComment':\n for (var i = 0; i < this.removedNodes.length; i++) {\n var operation = this.getUpdateOperation();\n operations.push(this.getCommentOperation(operation, action, this.removedNodes[i]));\n }\n break;\n case 'ClearRevisions':\n case 'TrackingPageBreak':\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n if (this.removedNodes.length > 0) {\n var deleteOperation = this.getDeleteOperation(action);\n deleteOperation.markerData = { isSkipTracking: true };\n operations.push(deleteOperation);\n }\n if (this.isRemovedNodes) {\n var revision = void 0;\n if (typeof (this.removedNodes[0]) === 'string') {\n revision = this.owner.editorModule.getRevision(this.removedNodes[0]);\n }\n if (revision && revision.range[0] instanceof WCharacterFormat) {\n operations.push(this.getInsertOperation('Enter'));\n }\n else {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n }\n }\n else {\n if (this.removedNodes.length > 0) {\n var revision = this.owner.editorModule.getRevision(this.removedNodes[0]);\n if (action === 'TrackingPageBreak') {\n if (!(typeof this.removedNodes[0] === 'string')) {\n var operation = this.getDeleteOperation(action);\n operation.markerData.isAcceptOrReject = 'Reject';\n operations.push(operation);\n break;\n }\n }\n operations.push(this.getRevisionOperation(revision));\n }\n }\n break;\n case 'Reject Change':\n if (this.isRemovedNodes) {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n else {\n var operation = this.getDeleteOperation(action);\n operation.markerData.isAcceptOrReject = 'Reject';\n operations.push(operation);\n }\n break;\n case 'Accept Change':\n if (this.isRemovedNodes) {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n else {\n var deleteOperation = this.getDeleteOperation(action);\n deleteOperation.markerData.isAcceptOrReject = 'Accept';\n operations.push(deleteOperation);\n }\n break;\n case 'Paste':\n case 'PasteColumn':\n case 'PasteOverwrite':\n case 'PasteRow':\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n if (this.removedNodes.length > 0) {\n operations.push(this.getDeleteOperation('Delete'));\n }\n if (this.isRemovedNodes) {\n if (this.action === 'Paste') {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n else {\n operations.push(this.getUndoRedoOperation(action, true));\n }\n }\n }\n else {\n if (this.removedNodes.length > 0) {\n operations.push(this.getDeleteOperation('Delete'));\n }\n var length_2 = this.getPasteContentLength();\n if (action !== 'Paste') {\n if (this.owner.selectionModule.start.paragraph.isInsideTable) {\n length_2 = this.owner.selectionModule.getBlockLength(undefined, this.owner.selectionModule.start.paragraph.associatedCell.ownerTable, 0, { done: false }, true, undefined, undefined);\n }\n }\n var pasteOperation = {\n action: 'Insert',\n offset: this.startIndex,\n length: length_2,\n pasteContent: JSON.stringify(this.pasteContent),\n type: isNullOrUndefined(this.type) ? 'Paste' : this.type,\n markerData: this.markerData.pop()\n };\n operations.push(pasteOperation);\n }\n break;\n case 'InsertHyperlink':\n if (isNullOrUndefined(this.fieldBegin)) {\n operations.push(this.getDeleteOperation('BackSpace'));\n if (this.isRemovedNodes) {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n }\n else {\n if (this.isEditHyperlink) {\n operations = this.getEditHyperlinkOperation();\n }\n else {\n operations = this.getFieldOperation();\n }\n }\n this.fieldBegin = undefined;\n break;\n case 'UpdateFormField':\n this.insertedText = '';\n var operation1 = this.getInsertOperation('UpdateFormField');\n operation1.text = CONTROL_CHARACTERS.Marker_Start;\n operation1.markerData = { 'type': 'Field', 'checkBoxValue': this.fieldBegin.formFieldData.checked };\n operation1.offset = this.getElementAbsolutePosition(this.fieldBegin);\n operations.push(operation1);\n break;\n case 'DeleteRow':\n case 'DeleteCells':\n case 'DeleteColumn':\n case 'DeleteTable':\n case 'ClearCells':\n case 'MergeCells':\n if (this.editorHistory.isUndoing) {\n if (action == 'DeleteTable') {\n operations.push(this.getUndoRedoOperation(action));\n }\n else {\n operations = this.cellOperation.slice();\n this.insertIndex = this.startIndex;\n operations.push(this.getUndoRedoOperation(action, true));\n this.cellOperation = [];\n }\n }\n else {\n if (this.removedNodes.length > 0) {\n if (this.cellOperation.length > 0) {\n // For delete column and delete cell.\n for (var i = 0; i < this.cellOperation.length; i++) {\n operations.push(this.cellOperation[i]);\n }\n if (action === 'MergeCells') {\n operations.push(this.getPasteMergeOperation());\n operations.push(this.getFormatOperation());\n this.type = undefined;\n }\n else {\n operations.reverse();\n }\n }\n else {\n if (this.owner.enableTrackChanges) {\n operations.push(this.getFormatOperation(undefined, action));\n }\n else {\n operations.push(this.getDeleteOperation(action));\n }\n }\n this.cellOperation = [];\n }\n }\n break;\n case 'RemoveRowTrack':\n if (this.editorHistory.isUndoing) {\n if (this.isRemovedNodes && this.editorHistory.isUndoing) {\n operations = this.cellOperation.slice();\n var operationCollection = this.getDeleteContent(action);\n if (isNullOrUndefined(operationCollection[0].markerData)) {\n operationCollection[0].markerData = { isSkipTracking: true };\n }\n operations.push.apply(operations, operationCollection);\n }\n }\n else {\n if (this.removedNodes.length > 0) {\n if (this.cellOperation.length > 0) {\n operations.push.apply(operations, this.cellOperation);\n }\n else {\n operations = this.revisionOperation.slice();\n this.getTrackchangesOperation(operations);\n }\n }\n }\n break;\n case 'RowResizing':\n case 'CellResizing':\n operations = this.getResizingOperation(action);\n break;\n case 'ImageResizing':\n operations.push(this.getFormatOperation());\n break;\n case 'Bold':\n case 'Italic':\n case 'Underline':\n case 'FontSize':\n case 'Strikethrough':\n case 'BaselineAlignment':\n case 'HighlightColor':\n case 'FontColor':\n case 'FontFamily':\n case 'Uppercase':\n case 'Lowercase':\n case 'CapitalizeEachWord':\n case 'SentenceCase':\n case 'ToggleCase':\n case 'CharacterFormat':\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n if (action === 'Uppercase') {\n operations.push(this.getDeleteOperation(action));\n if (this.removedNodes) {\n var operationCollection = this.getDeleteContent(action);\n operations = operations.concat(operationCollection);\n }\n }\n else {\n operations = this.modifiedFormatOperation;\n this.modifiedFormatOperation = [];\n }\n }\n else {\n var charFormatOperation = this.buildFormatOperation(action, true);\n operations = charFormatOperation.slice();\n }\n break;\n case 'AfterSpacing':\n case 'BeforeSpacing':\n case 'RightIndent':\n case 'LeftIndent':\n case 'FirstLineIndent':\n case 'LineSpacing':\n case 'LineSpacingType':\n case 'TextAlignment':\n case 'Borders':\n case 'TopBorder':\n case 'BottomBorder':\n case 'LeftBorder':\n case 'RightBorder':\n case 'HorizontalBorder':\n case 'VerticalBorder':\n case 'ListFormat':\n case 'ParagraphFormat':\n case 'StyleName':\n case 'ClearParagraphFormat':\n case 'SpaceBeforeAuto':\n case 'SpaceAfterAuto':\n case 'ParagraphBidi':\n case 'ContextualSpacing':\n case 'ContinueNumbering':\n case 'List':\n if (this.modifiedFormatOperation.length > 0 && !isInvertOperation) {\n operations = this.modifiedFormatOperation;\n this.modifiedFormatOperation = [];\n }\n else {\n if (isInvertOperation && this.editorHistory.isUndoing && (action === 'ListFormat' || action === 'ClearParagraphFormat')) {\n action = 'ParagraphFormat';\n }\n if (action === 'ContinueNumbering') {\n this.type = action.toString();\n }\n if (action === 'Borders' && this.removedNodes[this.removedNodes.length - 1] instanceof TableWidget) {\n this.insertedText = CONTROL_CHARACTERS.Cell;\n this.type = 'CellFormat';\n this.createCellFormat(action);\n operations = this.getSelectedCellOperation(action, undefined, true, false, true);\n break;\n }\n var paraFormatOperation = this.buildFormatOperation(action, false);\n operations = paraFormatOperation.slice();\n }\n break;\n case 'TableAlignment':\n case 'DefaultCellSpacing':\n case 'TableLeftIndent':\n case 'DefaultCellLeftMargin':\n case 'DefaultCellRightMargin':\n case 'DefaultCellTopMargin':\n case 'DefaultCellBottomMargin':\n case 'TablePreferredWidth':\n case 'TablePreferredWidthType':\n case 'TableBidi':\n this.createTableFormat(action);\n this.type = 'TableFormat';\n operations.push(this.getFormatOperation());\n this.format = undefined;\n break;\n case 'RestartNumbering':\n this.type = action.toString();\n var numberingOperation = this.getFormatOperation(undefined, action);\n this.createListFormat(action, numberingOperation);\n operations.push(numberingOperation);\n break;\n case 'Shading':\n this.createCellFormat(action);\n this.type = 'CellFormat';\n operations = this.getSelectedCellOperation(action, undefined, undefined, true, true);\n break;\n case 'TableAutoFitToContents':\n case 'TableAutoFitToWindow':\n case 'TableFixedColumnWidth':\n if (this.editorHistory.isUndoing) {\n operations = this.getDeleteContent('Insert');\n }\n else {\n this.createTableFormat(action);\n this.type = 'TableFormat';\n this.insertedText = action.toString();\n operations.push(this.getFormatOperation());\n this.format = undefined;\n }\n break;\n case 'SectionFormat':\n case 'HeaderDistance':\n case 'FooterDistance':\n case 'DifferentFirstPage':\n case 'DifferentOddAndEvenPages':\n case 'PageWidth':\n case 'PageHeight':\n case 'LeftMargin':\n case 'TopMargin':\n case 'RightMargin':\n case 'BottomMargin':\n case 'RestartPageNumbering':\n case 'PageStartingNumber':\n case 'EndnoteNumberFormat':\n case 'FootNoteNumberFormat':\n case 'RestartIndexForEndnotes':\n case 'RestartIndexForFootnotes':\n case 'InitialFootNoteNumber':\n case 'InitialEndNoteNumber':\n case 'LineBetweenColumns':\n case 'EqualWidth':\n case 'BreakCode':\n case 'LinkToPrevious':\n this.createSectionFormat(action);\n this.type = 'SectionFormat';\n operations.push(this.getFormatOperation(undefined));\n if (action === 'LinkToPrevious') {\n var operation = operations[operations.length - 1];\n operation.offset = this.insertIndex;\n }\n break;\n case 'RowHeight':\n case 'RowHeightType':\n case 'AllowBreakAcrossPages':\n case 'RowHeader':\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing && this.modifiedProperties.length > 1) {\n operations = this.modifiedFormatOperation;\n this.modifiedFormatOperation = [];\n }\n else {\n this.createRowFormat(action);\n this.type = 'RowFormat';\n operations.push(this.getFormatOperation(undefined));\n this.format = undefined;\n }\n break;\n case 'CellContentVerticalAlignment':\n case 'CellLeftMargin':\n case 'CellRightMargin':\n case 'CellBottomMargin':\n case 'CellTopMargin':\n case 'CellPreferredWidth':\n case 'CellPreferredWidthType':\n this.createCellFormat(action);\n this.type = 'CellFormat';\n operations = this.getSelectedCellOperation(action, false, false, false, true).slice();\n this.format = undefined;\n break;\n }\n this.cellOperation = [];\n this.revisionOperation = [];\n this.isRemovedNodes = false;\n return operations;\n };\n BaseHistoryInfo.prototype.getTrackchangesOperation = function (operations) {\n var markerInfo = this.markerData;\n for (var i = markerInfo.length - 1; i >= 0; i--) {\n if (!isNullOrUndefined(markerInfo[i].revisionId)) {\n var revision = this.getRevision(markerInfo[i].revisionId);\n if (revision && revision.range.length > 0) {\n if (revision.range[0] instanceof WRowFormat) {\n operations.push(this.buildRowOperationForTrackChanges(revision.range[0].ownerBase, 'RemoveRowTrack'));\n }\n else {\n var startPosition = new TextPosition(this.owner);\n var endPosition = new TextPosition(this.owner);\n this.owner.selection.selectRevision(revision, startPosition, endPosition);\n this.startIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(startPosition);\n this.endIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(endPosition);\n operations.push(this.getFormatOperation(undefined));\n }\n }\n else {\n this.owner.editorModule.removeMarkerInfoRevision(markerInfo[i].revisionId, markerInfo);\n }\n }\n }\n };\n BaseHistoryInfo.prototype.getRevision = function (revisionId) {\n for (var i = 0; i < this.owner.revisions.changes.length; i++) {\n var revision = this.owner.revisions.changes[i].revisionID;\n if (revision === revisionId) {\n return this.owner.revisions.changes[i];\n }\n }\n return undefined;\n };\n BaseHistoryInfo.prototype.getElementAbsolutePosition = function (element) {\n if (element) {\n var position = this.owner.selectionModule.getElementPosition(element);\n var startIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(position.startPosition);\n return startIndex;\n }\n return undefined;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.getFieldOperation = function () {\n var operations = [];\n var element = this.fieldBegin;\n var isFieldEnd = false;\n var elementOffset = this.insertIndex;\n if (!isNullOrUndefined(element)) {\n do {\n var insertedText = void 0;\n var Data = void 0;\n var elementLength = void 0;\n var characterFormat = void 0;\n var type = void 0;\n if (!element.skipformFieldLength) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0 && this.getRemovedText() !== '') {\n operations.push(this.getDeleteOperation('Delete'));\n var operation_1 = operations[operations.length - 1];\n operation_1.offset = elementOffset;\n if (!isNullOrUndefined(operation_1.markerData) && this.owner.enableTrackChanges) {\n operation_1.markerData.isSkipTracking = true;\n }\n }\n insertedText = element.fieldType === 0 ? CONTROL_CHARACTERS.Marker_Start : element.fieldType === 1 ? CONTROL_CHARACTERS.Marker_End : element.fieldType === 2 ? CONTROL_CHARACTERS.Field_Separator : '';\n if (element.fieldType === 0 && element.formFieldData) {\n type = this.formFieldType;\n if (element.revisions.length > 0) {\n Data = this.owner.editorModule.getRevisionMarkerData(Data, element.revisions[0]);\n }\n if (isNullOrUndefined(Data)) {\n Data = {};\n }\n Data.type = 'Field';\n Data.formFieldData = JSON.stringify(element.formFieldData);\n }\n else {\n if (element.revisions.length > 0) {\n Data = this.owner.editorModule.getRevisionMarkerData(Data, element.revisions[0]);\n }\n if (isNullOrUndefined(Data)) {\n Data = {};\n }\n Data.type = 'Field';\n }\n elementLength = element.length;\n }\n else if (this.fieldBegin.formFieldData && element instanceof BookmarkElementBox) {\n insertedText = element.bookmarkType === 0 ? CONTROL_CHARACTERS.Marker_Start : CONTROL_CHARACTERS.Marker_End;\n Data = { 'bookmarkName': element.name, 'type': 'Bookmark' };\n elementLength = element.length;\n }\n else if (element instanceof TextElementBox) {\n insertedText = element.text;\n elementLength = element.length;\n if (element.revisions.length > 0) {\n Data = this.owner.editorModule.getRevisionMarkerData(Data, element.revisions[0]);\n }\n }\n if (!(element instanceof BookmarkElementBox)) {\n var characterData = this.owner.sfdtExportModule.writeCharacterFormat(element.characterFormat, 0);\n characterFormat = JSON.stringify(characterData);\n }\n var operation = {\n action: 'Insert',\n offset: elementOffset,\n type: type,\n text: insertedText,\n length: elementLength,\n markerData: Data,\n format: characterFormat\n };\n operations.push(operation);\n elementOffset += element.length;\n Data = undefined;\n type = undefined;\n characterFormat = undefined;\n if (element instanceof FieldElementBox && element.fieldType === 1) {\n isFieldEnd = true;\n if (this.fieldBegin.formFieldData && element.nextNode instanceof BookmarkElementBox) {\n var elementBox = element.nextNode;\n insertedText = elementBox.bookmarkType === 0 ? CONTROL_CHARACTERS.Marker_Start : CONTROL_CHARACTERS.Marker_End;\n if (elementBox.revisions.length > 0) {\n Data = this.owner.editorModule.getRevisionMarkerData(Data, elementBox.revisions[0]);\n }\n if (isNullOrUndefined(Data)) {\n Data = {};\n }\n Data.bookmarkName = elementBox.name;\n Data.type = 'Bookmark';\n elementLength = elementBox.length;\n var operation_2 = {\n action: 'Insert',\n offset: elementOffset,\n text: insertedText,\n length: elementLength,\n markerData: Data\n };\n operations.push(operation_2);\n }\n }\n }\n element = element.nextNode;\n } while (!isFieldEnd && !isNullOrUndefined(element));\n }\n return operations;\n };\n /**\n * @private\n * @returns {Operation}\n * This method will build the operation for undo/Redo deleted content as paste action.\n */\n BaseHistoryInfo.prototype.getDeleteContent = function (action) {\n var operations = [];\n var startPosition = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.collabStart);\n var endPosition = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.collabEnd);\n var paraEnd = endPosition.clone();\n paraEnd.offset = endPosition.offset - 1;\n var isParaSelected = startPosition.isAtParagraphStart && paraEnd.isAtParagraphEnd;\n if (isParaSelected && (!startPosition.currentWidget.paragraph.isInsideTable)) {\n operations.push(this.getInsertOperation('Enter', false, true));\n operations.push(this.getUndoRedoOperation(action));\n }\n else if (startPosition.paragraph == endPosition.paragraph) {\n if (startPosition.isAtSamePosition(endPosition)) {\n if (this.owner.selectionModule.isEmpty && action === 'BackSpace') {\n this.insertIndex -= 1;\n }\n operations.push(this.getUndoRedoOperation(action, false, true));\n }\n else {\n operations.push(this.getUndoRedoOperation(action));\n }\n }\n else {\n if (startPosition.currentWidget.paragraph.isInsideTable) {\n operations = this.cellOperation.slice();\n operations.push(this.getUndoRedoOperation(action, true));\n }\n else {\n operations.push(this.getUndoRedoOperation(action));\n this.startIndex = this.endIndex + 1;\n if (!(startPosition.isAtParagraphStart || paraEnd.isAtParagraphEnd)) {\n var operation = this.getDeleteOperation('Delete');\n if (this.owner.enableTrackChanges) {\n operation.markerData = { isSkipTracking: true };\n }\n operations.push(operation);\n }\n }\n }\n return operations;\n };\n BaseHistoryInfo.prototype.getEditHyperlinkOperation = function () {\n var operations = [];\n var element = this.fieldBegin;\n if (element) {\n var startIndex = this.getElementAbsolutePosition(element);\n operations.push(this.getDeleteOperation('Delete'));\n var operation = operations[operations.length - 1];\n operation.offset = startIndex;\n var fieldCode = this.getRemovedFieldCode();\n operation.length = fieldCode.length;\n operation.text = fieldCode;\n operations.push(this.getInsertOperation('InsertHyperlink'));\n operation = operations[operations.length - 1];\n operation.offset = startIndex;\n fieldCode = this.owner.selectionModule.getFieldCode(element, true);\n operation.text = fieldCode;\n operation.length = fieldCode.length;\n }\n return operations;\n };\n BaseHistoryInfo.prototype.getPasteContentLength = function () {\n var length = 0;\n for (var i = 0; i < this.insertedNodes.length; i++) {\n var block = this.insertedNodes[i];\n if (block instanceof TextElementBox) {\n length += block.length;\n }\n else {\n length += this.owner.selectionModule.getBlockLength(undefined, block, 0, { done: false }, true, undefined, undefined);\n }\n }\n this.insertedNodes = [];\n return length;\n };\n /**\n * @private\n * @returns {Operation}\n */\n BaseHistoryInfo.prototype.getUpdateOperation = function () {\n var operation = {\n action: 'Update'\n };\n return operation;\n };\n BaseHistoryInfo.prototype.getResizingOperation = function (action) {\n var operations = [];\n var tableResize = this.owner.editorModule.tableResize;\n var table = tableResize.currentResizingTable;\n if (!isNullOrUndefined(table.childWidgets)) {\n table = table.combineWidget(this.owner.viewer);\n var resizerPosition = tableResize.resizerPosition;\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n if (action == 'RowResizing') {\n var row = table.childWidgets[resizerPosition];\n if (isNullOrUndefined(row)) {\n row = this.modifiedProperties[0].rowFormat.ownerBase;\n }\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, row).position;\n this.endIndex = this.startIndex + this.getRowLength(row);\n var rowFormat = {};\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n this.owner.sfdtExportModule.assignRowFormat(rowFormat, row.rowFormat, 0);\n }\n this.format = JSON.stringify(rowFormat);\n this.insertedText = CONTROL_CHARACTERS.Row;\n operations.push(this.getFormatOperation());\n }\n else {\n var rightColumnIndex = resizerPosition;\n var leftColumnIndex = resizerPosition - 1;\n this.insertedText = CONTROL_CHARACTERS.Cell;\n var isResize = false;\n if (!this.owner.selectionModule.isEmpty) {\n var cellwidget = tableResize.getTableCellWidget(tableResize.startingPoint);\n if (cellwidget && (this.owner.selectionModule.selectedWidgets.containsKey(cellwidget) || (cellwidget.previousWidget\n && this.owner.selectionModule.selectedWidgets.containsKey((cellwidget.previousWidget))))) {\n isResize = true;\n var selectedCells = this.owner.selectionModule.getSelectedCells();\n var startCell = selectedCells[0];\n var endCell = selectedCells[selectedCells.length - 1];\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var row = table.childWidgets[rowStartIndex];\n while (row && row.index <= count) {\n var cell = row.firstChild;\n while (cell) {\n if (cell.index == rightColumnIndex || cell.index == leftColumnIndex) {\n var cellFormat = {};\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n cellFormat = this.owner.sfdtExportModule.writeCellFormat(cell.cellFormat, 0);\n }\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, cell).position;\n // Plus one for adding the cell index.\n this.endIndex = this.startIndex + this.owner.selectionModule.calculateCellLength(cell) + 1;\n this.type = \"CellFormat\";\n this.format = JSON.stringify(cellFormat);\n operations.push(this.getFormatOperation());\n }\n cell = cell.nextWidget;\n }\n var rowFormat = {};\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n this.owner.sfdtExportModule.assignRowFormat(rowFormat, row.rowFormat, 0);\n }\n this.format = JSON.stringify(rowFormat);\n this.type = \"RowFormat\";\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, row).position;\n this.endIndex = this.startIndex + this.getRowLength(row);\n operations.push(this.getFormatOperation());\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n }\n }\n }\n else {\n isResize = true;\n var row = table.firstChild;\n while (row) {\n var cell = row.firstChild;\n while (cell) {\n if (cell.index == rightColumnIndex || cell.index == leftColumnIndex) {\n var cellFormat = {};\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n cellFormat = this.owner.sfdtExportModule.writeCellFormat(cell.cellFormat, 0);\n }\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, cell).position;\n // Plus one for adding the cell index.\n this.endIndex = this.startIndex + this.owner.selectionModule.calculateCellLength(cell) + 1;\n this.type = \"CellFormat\";\n this.format = JSON.stringify(cellFormat);\n operations.push(this.getFormatOperation());\n }\n cell = cell.nextWidget;\n }\n var rowFormat = {};\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n this.owner.sfdtExportModule.assignRowFormat(rowFormat, row.rowFormat, 0);\n }\n this.format = JSON.stringify(rowFormat);\n this.type = \"RowFormat\";\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, row).position;\n this.endIndex = this.startIndex + this.getRowLength(row);\n operations.push(this.getFormatOperation());\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n }\n }\n if (isResize) {\n var tableFormat = {};\n tableFormat = this.owner.sfdtExportModule ? this.owner.sfdtExportModule.writeTableFormat(table.tableFormat, 0) : {};\n this.format = JSON.stringify(tableFormat);\n this.type = \"TableFormat\";\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, table).position;\n // this.startIndex will get the offset of table. So in get block length it will start from the table. So doing minus one.\n this.endIndex = this.startIndex + this.owner.selectionModule.getBlockLength(undefined, table, 0, { done: false }, true, undefined, undefined) - 1;\n operations.push(this.getFormatOperation());\n }\n }\n this.owner.documentHelper.layout.reLayoutTable(table);\n }\n this.format = undefined;\n return operations;\n };\n BaseHistoryInfo.prototype.getRowLength = function (row) {\n var length = 0;\n for (var i = 0; i < row.childWidgets.length; i++) {\n // for collab editing for row amd cell we are adding plus one index to the offset. So it will calculate the widgets inside the cell one. So adding plus one offset.\n length += this.owner.selectionModule.calculateCellLength(row.childWidgets[i]) + 1;\n }\n return length;\n };\n /**\n * @private\n * @returns {Operation}\n */\n BaseHistoryInfo.prototype.getDeleteOperation = function (action, setEndIndex, text) {\n if (this.startIndex > this.endIndex) {\n var temp = this.startIndex;\n this.startIndex = this.endIndex;\n this.endIndex = temp;\n }\n // if (action === 'Delete' && this.endIndex === this.startIndex) {\n // this.startIndex++;\n // this.endIndex++;\n // }\n if (action === 'Delete' && this.endIndex < this.startIndex) {\n var start = this.startIndex;\n this.startIndex = this.endIndex;\n this.endIndex = start;\n }\n if (this.endIndex === this.startIndex && action !== 'DeleteBookmark' && action !== 'RemoveEditRange' && this.action !== 'InsertHyperlink') {\n if (action === 'BackSpace' || action === 'Insert' || action === 'Enter') {\n this.startIndex--;\n }\n else {\n this.endIndex++;\n }\n }\n if (action === 'DeleteHeaderFooter') {\n this.startIndex = this.headerFooterStart;\n this.endIndex = this.headerFooterEnd;\n }\n var selectionLength = !isNullOrUndefined(text) ? text.length : this.endIndex - this.startIndex;\n var removedText;\n if (action === 'DeleteBookmark' || action === 'RemoveEditRange') {\n removedText = this.insertedText;\n selectionLength = 1;\n }\n else if (action === 'DeleteHeaderFooter') {\n removedText === '';\n }\n else if (action === 'DeleteTable' || action === 'DeleteRow' || action === 'DeleteColumn' || action === 'MergeCells' || action === 'RemoveRowTrack') {\n removedText = this.insertedText;\n if (action !== 'DeleteTable' && action !== 'DeleteRow') {\n selectionLength = this.tableRelatedLength;\n }\n }\n else {\n removedText = !isNullOrUndefined(text) ? text : this.getRemovedText();\n }\n if (action === 'Cut' && removedText[removedText.length - 1] === ' ' && selectionLength < removedText.length) {\n selectionLength = removedText.length;\n }\n var operation = {\n action: 'Delete',\n offset: setEndIndex ? this.endIndex : this.startIndex,\n text: removedText,\n length: (action === 'Paste' || selectionLength === 0) ? removedText.length : selectionLength,\n skipOperation: action === 'DeleteHeaderFooter' ? true : undefined,\n markerData: this.markerData[0],\n };\n if (this.removedNodes[0] instanceof FootnoteElementBox) {\n if (this.editorHistory.isUndoing && operation.length >= 3) {\n operation.length += 1;\n }\n else {\n var element = this.removedNodes[0];\n var lastPara = element.bodyWidget.lastChild;\n var positionInfo = { position: 0, done: false };\n var paragraphInfo = { paragraph: lastPara, offset: this.owner.selectionModule.getParagraphLength(lastPara) + 1 };\n this.owner.selectionModule.getPositionInfoForBodyContent(paragraphInfo, positionInfo, element.bodyWidget.firstChild);\n operation.length += positionInfo.position;\n }\n }\n return operation;\n };\n /**\n * @private\n * @returns {Operation}\n */\n BaseHistoryInfo.prototype.getInsertOperation = function (action, setEndIndex, skipMarkerData) {\n var insertedText = action === 'Enter' ? '\\n' : this.insertedText;\n var length;\n if (action === 'InsertTable' || action === 'InsertTableBelow' || action === 'InsertRowAbove' || action === 'InsertRowBelow'\n || action === 'InsertColumnLeft' || action === 'InsertColumnRight' || action === 'MergeCells' || action === 'RemoveRowTrack') {\n length = this.tableRelatedLength;\n if (this.action === 'InsertTable' || this.action === 'InsertTableBelow') {\n this.insertIndex = this.startIndex;\n }\n }\n else {\n if (!isNullOrUndefined(insertedText)) {\n length = insertedText.length;\n }\n }\n var operation = {\n action: 'Insert',\n offset: setEndIndex ? this.endIndex : this.insertIndex,\n text: insertedText,\n type: this.type,\n length: length,\n skipOperation: false,\n imageData: this.insertedData,\n format: this.format,\n };\n if (!isNullOrUndefined(this.markerData) && !skipMarkerData) {\n operation.markerData = this.markerData.pop();\n }\n if (this.insertedElement instanceof FootnoteElementBox) {\n var lastPara = this.insertedElement.bodyWidget.lastChild;\n var positionInfo = { position: 0, done: false };\n var paragraphInfo = { paragraph: lastPara, offset: this.owner.selectionModule.getParagraphLength(lastPara) + 1 };\n this.owner.selectionModule.getPositionInfoForBodyContent(paragraphInfo, positionInfo, this.insertedElement.bodyWidget.firstChild);\n operation.length += positionInfo.position;\n }\n return operation;\n };\n BaseHistoryInfo.prototype.getUndoRedoOperation = function (action, isTableInsert, issamePosition) {\n var table;\n var lastPara;\n var startLine;\n var lastLine;\n var endoffset;\n var startOffset;\n var startPosition = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.collabStart);\n var endPosition = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.collabEnd);\n var length = 0;\n if (isTableInsert) {\n if (action === 'BackSpace' || action === 'Delete' || action === 'Insert') {\n table = startPosition.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, table).position;\n if (endPosition.currentWidget.paragraph.isInsideTable) {\n lastPara = this.documentHelper.getLastParagraphBlock(endPosition.currentWidget.paragraph.associatedCell.ownerTable);\n lastLine = lastPara.lastChild;\n endoffset = lastPara.lastChild.getEndOffset();\n }\n else {\n lastLine = endPosition.currentWidget;\n endoffset = endPosition.offset;\n }\n }\n else {\n table = this.owner.selectionModule.start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n lastPara = this.documentHelper.getLastParagraphBlock(table);\n lastLine = lastPara.lastChild;\n endoffset = lastPara.lastChild.getEndOffset();\n }\n startLine = this.documentHelper.getFirstParagraphBlock(table).firstChild;\n startOffset = 0;\n length = this.owner.selectionModule.getBlockLength(undefined, table, 0, { done: false }, true, undefined, undefined);\n }\n else {\n startLine = startPosition.currentWidget;\n lastLine = endPosition.currentWidget;\n endoffset = issamePosition ? (action == 'BackSpace' ? endPosition.offset : endPosition.offset + 1) : endPosition.offset;\n startOffset = issamePosition ? (action === 'BackSpace' ? startPosition.offset - 1 : startPosition.offset) : startPosition.offset;\n var startIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(this.collabStart);\n var endIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(this.collabEnd);\n length = endIndex - startIndex;\n }\n this.pasteContent = this.owner.sfdtExportModule.write((this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0), startLine, startOffset, lastLine, endoffset, false, true);\n return this.getPasteOpertion(this.pasteContent, length);\n };\n BaseHistoryInfo.prototype.getPasteOpertion = function (pasteContent, length) {\n var pasteOperation = {\n action: 'Insert',\n offset: this.startIndex,\n length: length > 0 ? length : 1,\n pasteContent: JSON.stringify(pasteContent),\n type: 'Paste'\n };\n if (this.owner.enableTrackChanges) {\n pasteOperation.markerData = { isSkipTracking: true };\n }\n return pasteOperation;\n };\n // Builds the Table and Row operation.\n BaseHistoryInfo.prototype.buildTableRowCellOperation = function (action) {\n var operations = [];\n if (this.insertedNodes.length > 0) {\n if (this.insertedNodes[0] instanceof TableRowWidget) {\n var row = this.insertedNodes[0];\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n this.insertIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, this.insertedNodes[0]).position;\n var length_3 = this.insertedNodes.length;\n if (row.ownerTable.childWidgets.length === row.indexInOwner + length_3) {\n this.insertIndex -= 1;\n }\n }\n if (this.insertedNodes.length > 1 && action === 'InsertTable') {\n var enterOperation = this.getInsertOperation('Enter', false, true);\n if (isNullOrUndefined(enterOperation.markerData)) {\n enterOperation.markerData = {};\n }\n enterOperation.markerData.isSkipTracking = true;\n operations.push(enterOperation);\n }\n for (var i = 0; i < this.insertedNodes.length; i++) {\n if (this.insertedNodes[i] instanceof TableWidget) {\n var tableWidget = this.insertedNodes[i].combineWidget(this.owner.viewer);\n this.tableRelatedLength = action === 'InsertTableBelow' ? 0 : 1;\n this.insertedText = CONTROL_CHARACTERS.Table;\n var tableFormat = this.owner.sfdtExportModule ? this.owner.sfdtExportModule.writeTableFormat(tableWidget.tableFormat, 0) : {};\n this.format = JSON.stringify(tableFormat);\n operations.push(this.getInsertOperation(action, false, true));\n for (var j = 0; j < tableWidget.childWidgets.length; j++) {\n var row = tableWidget.childWidgets[j];\n operations.push(this.buildRowOperation(row, action));\n for (var k = 0; k < row.childWidgets.length; k++) {\n var cell = row.childWidgets[k];\n var cellOperations = this.buildCellOperation(cell, action, true);\n for (var l = 0; l < cellOperations.length; l++) {\n operations.push(cellOperations[l]);\n }\n }\n }\n }\n else if (this.insertedNodes[i] instanceof TableRowWidget) {\n var row = this.insertedNodes[i];\n operations.push(this.buildRowOperation(row, action));\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellOperations = this.buildCellOperation(cell, action, true);\n for (var l = 0; l < cellOperations.length; l++) {\n operations.push(cellOperations[l]);\n }\n }\n }\n else if (this.insertedNodes[i] instanceof TableCellWidget) {\n var cell = this.insertedNodes[i];\n var table = cell.ownerTable.combineWidget(this.owner.viewer);\n var num = 0;\n for (var j = 0; j < table.childWidgets.length; j++) {\n i = this.insertedNodes.length;\n var row = table.childWidgets[j];\n for (var k = 0; k < row.childWidgets.length; k++) {\n var cell_1 = row.childWidgets[k];\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n if (this.insertedNodes.indexOf(cell_1) !== -1) {\n var offset = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, cell_1).position;\n this.insertIndex = offset - num;\n if (cell_1.ownerTable.childWidgets.length === cell_1.ownerRow.indexInOwner + 1) {\n if (this.insertedNodes.indexOf(row.childWidgets[row.childWidgets.length - 1]) !== -1) {\n this.insertIndex -= 1;\n }\n }\n var cellOperations = this.buildCellOperation(cell_1, action, true);\n for (var l = 0; l < cellOperations.length; l++) {\n operations.push(cellOperations[l]);\n }\n num += 2;\n }\n else {\n var offset = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, cell_1).position;\n this.insertIndex = offset - num;\n var cellOperations = this.buildCellOperation(cell_1, action, false);\n for (var l = 0; l < cellOperations.length; l++) {\n operations.push(cellOperations[l]);\n }\n }\n }\n }\n }\n }\n this.insertedNodes = [];\n }\n return operations;\n };\n BaseHistoryInfo.prototype.assignRevisionData = function (type, author, date, revisionId) {\n var markerData = {\n revisionType: type,\n author: author,\n date: date,\n revisionId: revisionId\n };\n return markerData;\n };\n BaseHistoryInfo.prototype.createAcceptRejectOperation = function (action) {\n var start = this.owner.selectionModule.start;\n if (!start.paragraph.isInsideTable) {\n return;\n }\n var row = start.paragraph.associatedCell.ownerRow;\n var length = 0;\n this.insertedText = CONTROL_CHARACTERS.Row;\n if (row.rowFormat.revisions.length > 0) {\n var revision = row.rowFormat.revisions[0];\n var isAcceptOrReject = void 0;\n if (action === 'Accept Change') {\n isAcceptOrReject = 'Accept';\n }\n else if (action === 'Reject Change') {\n isAcceptOrReject = 'Reject';\n }\n this.markerData.push(this.owner.editorModule.getMarkerData(undefined, undefined, revision, isAcceptOrReject));\n }\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n var offset = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, row).position;\n if (row.rowFormat.revisions.length > 0) {\n if (row.rowFormat.revisions[0].revisionType === 'Insertion') {\n if (action === 'Accept Change') {\n this.startIndex = offset;\n this.tableRelatedLength = 1;\n this.cellOperation.push(this.getFormatOperation(undefined, 'RemoveRowTrack'));\n }\n else if (action === 'Reject Change') {\n this.startIndex = offset;\n for (var j = 0; j < row.childWidgets.length; j++) {\n length += this.owner.selectionModule.calculateCellLength(row.childWidgets[j]) + 1;\n }\n this.tableRelatedLength = length;\n this.cellOperation.push(this.getDeleteOperation('RemoveRowTrack'));\n }\n }\n else if (row.rowFormat.revisions[0].revisionType === 'Deletion') {\n if (action === 'Accept Change') {\n this.startIndex = offset;\n // this.tableRelatedLength = 0;\n for (var j = 0; j < row.childWidgets.length; j++) {\n length += this.owner.selectionModule.calculateCellLength(row.childWidgets[j]) + 1;\n }\n this.tableRelatedLength = length;\n this.cellOperation.push(this.getDeleteOperation('RemoveRowTrack'));\n }\n else if (action === 'Reject Change') {\n this.startIndex = offset;\n for (var j = 0; j < row.childWidgets.length; j++) {\n length += this.owner.selectionModule.calculateCellLength(row.childWidgets[j]) + 1;\n }\n this.tableRelatedLength = length;\n this.cellOperation.push(this.getFormatOperation(undefined, 'RemoveRowTrack'));\n }\n }\n this.markerData = [];\n }\n };\n BaseHistoryInfo.prototype.buildRowOperation = function (row, action) {\n this.insertedText = CONTROL_CHARACTERS.Row;\n var rowFormat = {};\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n this.owner.sfdtExportModule.assignRowFormat(rowFormat, row.rowFormat, 0);\n }\n this.format = JSON.stringify(rowFormat);\n if (action === 'InsertTable' && row.rowFormat.revisions.length > 0) {\n var revision = row.rowFormat.revisions[row.rowFormat.revisions.length - 1];\n var lastRevision = this.markerData[this.markerData.length - 1];\n if (!(!isNullOrUndefined(lastRevision) && lastRevision.revisionId === revision.revisionID)) {\n this.markerData.push(this.owner.editorModule.getMarkerData(undefined, undefined, revision));\n }\n }\n this.tableRelatedLength = 1;\n var operation = this.getInsertOperation(action);\n this.format = undefined;\n return operation;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.buildRowOperationForTrackChanges = function (row, action) {\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n var length = 0;\n var offset = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, row).position;\n this.startIndex = offset;\n for (var j = 0; j < row.childWidgets.length; j++) {\n length += this.owner.selectionModule.calculateCellLength(row.childWidgets[j]) + 1;\n }\n this.tableRelatedLength = length;\n this.insertedText = CONTROL_CHARACTERS.Row;\n var operation = this.getFormatOperation(undefined, action);\n this.insertedText = '';\n return operation;\n };\n BaseHistoryInfo.prototype.buildCellOperation = function (cell, action, isCellInserted) {\n var operations = [];\n this.tableRelatedLength = isCellInserted ? 1 : 0;\n this.insertedText = CONTROL_CHARACTERS.Cell;\n this.type = 'CellFormat';\n var cellFormat = !isNullOrUndefined(this.owner.sfdtExportModule) ? this.owner.sfdtExportModule.writeCellFormat(cell.cellFormat, 0) : {};\n this.format = JSON.stringify(cellFormat);\n operations.push(this.getInsertOperation(action, false, true));\n if (!isCellInserted) {\n return operations;\n }\n this.tableRelatedLength = isCellInserted ? 1 : 0;\n this.type = 'ParagraphFormat';\n var paragraphFormat = this.owner.sfdtExportModule.writeParagraphFormat(cell.childWidgets[0].paragraphFormat, 0, true);\n this.format = JSON.stringify(paragraphFormat);\n operations.push(this.getInsertOperation(action, false, true));\n this.tableRelatedLength = 0;\n this.type = 'CharacterFormat';\n var characterData = this.owner.sfdtExportModule.writeCharacterFormat(cell.childWidgets[0].characterFormat, 0, true);\n this.format = JSON.stringify(characterData);\n operations.push(this.getInsertOperation(action, false, true));\n this.format = undefined;\n this.type = undefined;\n return operations;\n };\n BaseHistoryInfo.prototype.deleteColumnOperation = function (action) {\n var startCell = this.owner.editorModule.getOwnerCell(this.owner.selectionModule.isForward);\n var endCell = this.owner.editorModule.getOwnerCell(!this.owner.selectionModule.isForward);\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var deleteCells = [];\n var rowStartIndex = 0;\n var count = 0;\n if (action === 'DeleteColumn') {\n deleteCells = table.getColumnCellsForSelection(startCell, endCell);\n }\n else {\n var start = this.owner.selectionModule.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.owner.selectionModule.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.owner.editorModule.updateSelectedCellsInTable(start, end, endCellLeft, endCellRight);\n start = cellInfo.start;\n end = cellInfo.end;\n count = table.childWidgets.indexOf(endCell.ownerRow);\n rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.owner.selectionModule.getCellLeft(row, cell);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(end, 2)) {\n deleteCells.push(cell);\n }\n }\n }\n }\n var isRowSelect = this.owner.selectionModule.isRowSelect() && rowStartIndex != count;\n for (var i = 0; i < deleteCells.length; i++) {\n if (action === 'ClearCells') {\n this.deleteCell(action, deleteCells[i], false);\n }\n else if (action === 'MergeCells') {\n if (i !== 0) {\n var isRowOffset = isRowSelect && (!deleteCells[0].ownerRow.equals(deleteCells[i].ownerRow)) && deleteCells[i].index == 0;\n this.deleteCell(action, deleteCells[i], isRowOffset);\n }\n }\n else {\n this.deleteCell('DeleteColumn', deleteCells[i], false);\n }\n }\n if (action === 'MergeCells') {\n this.cellOperation.reverse();\n this.deleteCell('ClearCells', deleteCells[0], false);\n }\n };\n BaseHistoryInfo.prototype.getPasteMergeOperation = function () {\n var cell = this.owner.selectionModule.start.paragraph.associatedCell;\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n var offset = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, cell).position;\n var length = this.owner.selectionModule.calculateCellLength(cell) - 1;\n var firstParagraph = this.owner.selectionModule.getFirstParagraph(cell);\n var lastParagraph = this.owner.selectionModule.getLastParagraph(cell);\n var startline = firstParagraph.firstChild;\n var lastLine = lastParagraph.lastChild;\n this.pasteContent = this.owner.sfdtExportModule.write((this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0), startline, 0, lastLine, lastLine.getEndOffset(), false, true);\n this.startIndex = offset + 1;\n var pasteOperation = {\n action: 'Insert',\n offset: this.startIndex,\n length: length,\n pasteContent: JSON.stringify(this.pasteContent),\n type: 'Paste'\n };\n this.insertedText = CONTROL_CHARACTERS.Cell;\n this.type = 'CellFormat';\n this.startIndex = offset;\n this.endIndex = offset;\n this.format = JSON.stringify(this.owner.sfdtExportModule.writeCellFormat(cell.cellFormat, 0));\n return pasteOperation;\n };\n BaseHistoryInfo.prototype.deleteCell = function (action, cell, isRowDelete) {\n this.tableRelatedLength = this.owner.selectionModule.calculateCellLength(cell) + 1;\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, cell).position;\n this.startIndex -= isRowDelete ? 1 : 0;\n this.tableRelatedLength += isRowDelete ? 1 : 0;\n if (!this.owner.enableTrackChanges) {\n if (action === 'ClearCells') {\n var block = cell.childWidgets[0];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget && block.isEmpty()) {\n return;\n }\n this.endIndex = this.startIndex + this.tableRelatedLength - 1;\n this.startIndex += 1;\n this.cellOperation.push(this.getDeleteOperation('ClearCells'));\n }\n else {\n this.cellOperation.push(this.getDeleteOperation('DeleteColumn'));\n }\n }\n };\n /**\n * @private\n * @returns {Operation}\n */\n BaseHistoryInfo.prototype.getFormatOperation = function (element, action, skipIncrement) {\n if (this.startIndex > this.endIndex) {\n var temp = this.startIndex;\n this.startIndex = this.endIndex;\n this.endIndex = temp;\n }\n var length = 0;\n if (this.endIndex === this.startIndex && !skipIncrement && this.action !== 'DeleteBookmark' && this.action !== 'RemoveEditRange' && this.action !== 'InsertHyperlink') {\n if (this.action === 'BackSpace') {\n this.startIndex--;\n }\n else {\n this.endIndex++;\n }\n }\n if (action === 'RemoveRowTrack') {\n length = this.tableRelatedLength;\n }\n else if (action === 'RowResizing' || action === 'CellResizing' || action === 'ImageResizing') {\n length = this.insertedText.length;\n }\n else {\n length = !isNullOrUndefined(element) ? element.length : this.endIndex - this.startIndex;\n }\n var formatOperation = {\n action: 'Format',\n offset: this.startIndex,\n length: length,\n markerData: this.markerData[this.markerData.length - 1],\n imageData: this.insertedData,\n text: this.insertedText,\n format: this.format\n };\n this.markerData.pop();\n if (!isNullOrUndefined(action)) {\n formatOperation.type = action.toString();\n }\n else {\n formatOperation.type = this.type;\n }\n return formatOperation;\n };\n BaseHistoryInfo.prototype.getRemovedText = function (element) {\n var text = '';\n if (!isNullOrUndefined(element)) {\n var node = element;\n if (node instanceof ParagraphWidget) {\n text += this.getParagraphText(node);\n }\n else if (node instanceof ElementBox) {\n if (node instanceof TextElementBox) {\n text += node.text;\n }\n else {\n if (!(node instanceof ListTextElementBox)) {\n text += ElementBox.objectCharacter;\n }\n }\n }\n else if (node instanceof TableWidget) {\n text += this.getTableText(node);\n }\n else if (node instanceof TableRowWidget) {\n text += this.getRowText(node);\n }\n }\n else {\n for (var i = this.removedNodes.length - 1; i >= 0; i--) {\n var node = this.removedNodes[i];\n if (node instanceof ParagraphWidget) {\n text += this.getParagraphText(node);\n }\n else if (node instanceof ElementBox) {\n if (node instanceof TextElementBox) {\n text += node.text;\n }\n else {\n if (!(node instanceof ListTextElementBox)) {\n text += ElementBox.objectCharacter;\n }\n }\n }\n else if (node instanceof TableWidget) {\n text += this.getTableText(node);\n }\n else if (node instanceof TableRowWidget) {\n text += this.getRowText(node);\n }\n }\n }\n return text;\n };\n BaseHistoryInfo.prototype.getRevisionOperation = function (revision) {\n if (revision.revisionType === 'Insertion') {\n // Accept operation - Insertion\n this.markerData.push(this.owner.editorModule.getMarkerData(undefined, undefined, revision, 'Accept'));\n return this.getFormatOperation();\n }\n else if (revision.revisionType === 'Deletion') {\n // Reject operation - Deletion\n this.markerData.push(this.owner.editorModule.getMarkerData(undefined, undefined, revision, 'Reject'));\n return this.getFormatOperation();\n }\n return {};\n };\n BaseHistoryInfo.prototype.getRemovedFieldCode = function () {\n var fieldCode = '';\n var isStarted = false;\n for (var i = this.removedNodes.length - 1; i >= 0; i--) {\n var node = this.removedNodes[i];\n if (node instanceof ElementBox) {\n if (node instanceof FieldElementBox && node.fieldType === 0) {\n isStarted = true;\n }\n if (node && node instanceof TextElementBox) {\n if (isStarted) {\n fieldCode += node.text;\n }\n }\n if (node instanceof FieldElementBox\n && (node.fieldType === 2 || node.fieldType === 1)) {\n return fieldCode;\n }\n }\n else if (node instanceof ParagraphWidget) {\n for (var i_1 = 0; i_1 < node.childWidgets.length; i_1++) {\n var lineWidget = node.childWidgets[i_1];\n for (var j = 0; j < lineWidget.children.length; j++) {\n var element = lineWidget.children[j];\n if (element instanceof FieldElementBox && element.fieldType === 0) {\n isStarted = true;\n }\n if (element instanceof TextElementBox) {\n if (isStarted) {\n fieldCode += element.text;\n }\n }\n if (element instanceof FieldElementBox\n && (element.fieldType === 2 || element.fieldType === 1)) {\n return fieldCode;\n }\n }\n }\n }\n }\n return undefined;\n };\n // Add for loop to iterate paragraph child elements and get text \n BaseHistoryInfo.prototype.getParagraphText = function (paragraph) {\n var text = '';\n if (!isNullOrUndefined(paragraph) && !isNullOrUndefined(paragraph.childWidgets)) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n if (line.children[j] instanceof ListTextElementBox) {\n continue;\n }\n if (line.children[j] instanceof TextElementBox) {\n text += line.children[j].text;\n }\n else {\n text += ElementBox.objectCharacter;\n }\n }\n }\n return text + '\\n';\n }\n return text;\n };\n // Add for loop to iterate table child elements and get text\n BaseHistoryInfo.prototype.getTableText = function (table) {\n var text = CONTROL_CHARACTERS.Table;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n text += this.getRowText(row);\n }\n return text;\n };\n // Add for loop to iterate table row child elements and get text\n BaseHistoryInfo.prototype.getRowText = function (row) {\n var text = CONTROL_CHARACTERS.Row;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n text += CONTROL_CHARACTERS.Cell;\n var block = cell.childWidgets[k];\n if (block instanceof ParagraphWidget) {\n text += this.getParagraphText(block);\n }\n else {\n text += this.getTableText(block);\n }\n }\n }\n return text;\n };\n /**\n * @private\n * @returns {Operation}\n */\n BaseHistoryInfo.prototype.getCommentOperation = function (operation, action, comment) {\n if (action === 'InsertInline' || action === 'RemoveInline') {\n var commentRangeElement = action === 'RemoveInline' ? this.removedNodes[0] : this.insertedElement;\n var commentElement = commentRangeElement.comment;\n operation.text = commentRangeElement.commentType === 0 ? CONTROL_CHARACTERS.Marker_Start : CONTROL_CHARACTERS.Marker_End;\n operation.markerData = {\n type: 'Comment',\n commentId: commentRangeElement.commentId,\n ownerCommentId: commentElement.isReply ? commentElement.ownerComment.commentId : undefined\n };\n }\n else if (action === 'InsertCommentWidget' || action === 'DeleteCommentWidget') {\n if (isNullOrUndefined(comment)) {\n comment = this.removedNodes[0];\n }\n operation.length = 1;\n operation.action = 'Format';\n operation.offset = this.startIndex < this.endIndex ? this.endIndex : this.startIndex;\n // To get the offset of end comment element box we are seperating minus one to it.\n operation.offset -= 1;\n operation.text = CONTROL_CHARACTERS.Marker_Start + CONTROL_CHARACTERS.Marker_End;\n operation.markerData = {\n type: 'Comment',\n commentId: comment.commentId,\n author: comment.author,\n date: comment.date,\n commentIndex: comment.isReply ? comment.ownerComment.replyComments.indexOf(comment) : this.owner.documentHelper.comments.indexOf(comment),\n initial: comment.initial,\n done: comment.isResolved,\n text: comment.text,\n isReply: comment.isReply\n };\n if (!isNullOrUndefined(comment.ownerComment)) {\n // Get the position of the comment owner offset\n var position = this.owner.selection.getElementPosition(comment.ownerComment.commentEnd, true).startPosition;\n operation.offset = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(position);\n }\n if (action === 'DeleteCommentWidget') {\n operation.offset = this.startIndex < this.endIndex ? this.endIndex : this.startIndex;\n // To get the offset of end comment element box we are seperating minus one to it. \n operation.offset -= 1;\n operation.markerData.commentAction = 'remove';\n }\n else if (action === 'InsertCommentWidget') {\n operation.markerData.commentAction = 'add';\n }\n }\n else if (action === 'ResolveComment') {\n operation.action = 'Format';\n operation.length = 1;\n operation.text = CONTROL_CHARACTERS.Marker_Start + CONTROL_CHARACTERS.Marker_End;\n operation.offset = this.startIndex < this.endIndex ? this.endIndex : this.startIndex;\n // To get the offset of end comment element box we are seperating minus one to it.\n operation.offset -= 1;\n operation.markerData = {\n type: 'Comment',\n commentId: comment.commentId,\n done: comment.isResolved\n };\n }\n else if (action === 'EditComment') {\n operation.action = 'Format';\n operation.length = 1;\n operation.text = CONTROL_CHARACTERS.Marker_Start + CONTROL_CHARACTERS.Marker_End;\n operation.offset = this.startIndex < this.endIndex ? this.endIndex : this.startIndex;\n // To get the offset of end comment element box we are seperating minus one to it.\n operation.offset -= 1;\n operation.markerData = {\n type: 'Comment',\n text: comment.text,\n };\n }\n return operation;\n };\n /**\n * @private\n */\n BaseHistoryInfo.prototype.getDeleteCommentOperation = function (modifiedActions, operations) {\n for (var i = 0; i < modifiedActions.length; i++) {\n var currentHistory = modifiedActions[i];\n if (currentHistory instanceof HistoryInfo && (currentHistory.action === 'DeleteComment')) {\n this.getDeleteCommentOperation(currentHistory.modifiedActions, operations);\n }\n else {\n var operation = currentHistory.getDeleteOperation(currentHistory.action);\n currentHistory.getCommentOperation(operation, currentHistory.action);\n if (currentHistory.action === 'DeleteCommentWidget' && !isNullOrUndefined(modifiedActions[i + 1])) {\n // For update operation we need end offset. So taking the offset from end remove inline history.\n var updateHistory = modifiedActions[i + 1];\n operation.offset = updateHistory.startIndex < updateHistory.endIndex ? updateHistory.startIndex : updateHistory.endIndex;\n }\n operations.push(operation);\n }\n }\n };\n /**\n * @private\n * @returns {Operation}\n */\n BaseHistoryInfo.prototype.buildFormatOperation = function (action, ischarFormat) {\n var operations = [];\n if ((action === 'ApplyStyle' || action === 'StyleName') && this.insertedFormat instanceof WParagraphStyle) {\n this.insertedFormat = this.insertedFormat.name;\n this.type = 'ParagraphFormat';\n this.createParagraphFormat(action);\n }\n else {\n if (action === 'ApplyStyle' || action === 'StyleName') {\n if (this.insertedFormat instanceof WCharacterFormat && this.insertedFormat.baseCharStyle) {\n this.insertedFormat = this.insertedFormat.baseCharStyle.name;\n }\n else {\n this.insertedFormat = this.insertedFormat.name;\n }\n }\n if (ischarFormat) {\n this.type = 'CharacterFormat';\n this.createCharacterFormat(action);\n }\n else {\n this.type = action == 'ContinueNumbering' ? 'ContinueNumbering' : 'ParagraphFormat';\n this.createParagraphFormat(action);\n }\n }\n operations = this.getSelectedCellOperation(action, ischarFormat);\n this.format = undefined;\n return operations;\n };\n /**\n * @private\n * @returns {Operation}\n */\n BaseHistoryInfo.prototype.getSelectedCellOperation = function (action, ischarFormat, isBorder, isShading, isCell) {\n var operations = [];\n var start = this.owner.selectionModule.start;\n var end = this.owner.selectionModule.end;\n if (start.paragraph.isInsideTable && end.paragraph.isInsideTable && (start.paragraph.associatedCell.ownerTable.equals(end.paragraph.associatedCell.ownerTable)\n && this.owner.selectionModule.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var selectCells = this.owner.selectionModule.getSelectedCells();\n for (var i = 0; i < selectCells.length; i++) {\n var cell = selectCells[i];\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, cell).position;\n // Plus one is for cell index\n var length_4 = this.owner.selectionModule.calculateCellLength(cell) + 1;\n this.endIndex = this.startIndex + length_4;\n if (length_4 === 0 && ischarFormat) {\n continue;\n }\n if ((this.editorHistory.isUndoing || this.editorHistory.isRedoing) && !ischarFormat) {\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n var cellFormat = this.owner.sfdtExportModule.writeCellFormat(cell.cellFormat, 0);\n this.format = JSON.stringify(cellFormat);\n }\n }\n else {\n this.writeBorderFormat(isBorder, isShading, cell);\n }\n var formatOperation = void 0;\n if (action === 'ListFormat') {\n formatOperation = this.getFormatOperation(undefined, undefined, true);\n formatOperation.type = 'ListFormat';\n this.createListFormat(action, formatOperation);\n }\n else {\n formatOperation = this.getFormatOperation(undefined, undefined, true);\n }\n operations.push(formatOperation);\n }\n }\n else {\n var operation = void 0;\n if (action === 'ListFormat') {\n operation = this.getFormatOperation(undefined, action);\n this.createListFormat(action, operation);\n }\n else {\n if (start.paragraph.isInsideTable && isCell) {\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, start.paragraph.associatedCell).position;\n var length_5 = this.owner.selectionModule.calculateCellLength(start.paragraph.associatedCell) + 1;\n this.endIndex = this.startIndex + length_5;\n this.writeBorderFormat(isBorder, isShading, start.paragraph.associatedCell);\n }\n if (action === 'ClearFormat' && this.editorHistory.isUndoing) {\n this.buildclearFormatOperations(operations);\n return operations;\n }\n else {\n operation = this.getFormatOperation(undefined, undefined, true);\n }\n }\n operations.push(operation);\n }\n return operations;\n };\n BaseHistoryInfo.prototype.buildclearFormatOperations = function (operations) {\n var start = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.collabStart);\n var end = this.owner.selectionModule.getTextPosBasedOnLogicalIndex(this.collabEnd);\n var block = start.paragraph;\n var isBreak = false;\n do {\n isBreak = block.equals(end.paragraph);\n if (block instanceof ParagraphWidget) {\n this.buildclearFormatOperation(block, operations);\n }\n else {\n var positionInfo = { done: false };\n this.tableClearFormatOperation(block, end.paragraph, operations, positionInfo);\n if (positionInfo.done) {\n isBreak = true;\n }\n }\n block = block.nextRenderedWidget;\n } while (!isBreak);\n };\n BaseHistoryInfo.prototype.tableClearFormatOperation = function (table, endParagraph, operations, positionInfo) {\n var row = table.firstChild;\n while (row) {\n var cell = row.firstChild;\n while (cell) {\n var childBlock = cell.firstChild;\n if (childBlock instanceof ParagraphWidget) {\n this.buildclearFormatOperation(childBlock, operations);\n }\n else {\n this.tableClearFormatOperation(childBlock, endParagraph, operations, positionInfo);\n if (positionInfo.done) {\n return;\n }\n }\n if (endParagraph.equals(childBlock)) {\n positionInfo.done = true;\n return;\n }\n cell = cell.nextWidget;\n }\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n }\n };\n BaseHistoryInfo.prototype.buildclearFormatOperation = function (paragraph, operations) {\n var isParagraphFormat = true;\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var inlines = paragraph.childWidgets[i];\n for (var j = 0; j < inlines.children.length; j++) {\n if (inlines.children[j] instanceof TextElementBox) {\n var currentStart = this.owner.selectionModule.getElementPosition(inlines.children[j], true).startPosition;\n this.startIndex = this.owner.selectionModule.getAbsolutePositionFromRelativePosition(currentStart);\n var operation = this.getFormatOperation(inlines.children[j]);\n operation.length += 1;\n if (isParagraphFormat) {\n var paraFormatOperation = {\n action: 'Format',\n offset: operation.offset,\n length: operation.length,\n type: 'ParagraphFormat',\n format: JSON.stringify(this.owner.sfdtExportModule.writeParagraphFormat(paragraph.paragraphFormat, 0, true))\n };\n operations.push(paraFormatOperation);\n isParagraphFormat = false;\n }\n operation.type = 'CharacterFormat';\n operation.format = JSON.stringify(this.owner.sfdtExportModule.writeCharacterFormat(inlines.children[j].characterFormat, 0, true));\n operations.push(operation);\n }\n }\n }\n };\n BaseHistoryInfo.prototype.writeBorderFormat = function (isBorder, isShading, cell) {\n var cellFormat = {};\n if (isBorder) {\n cellFormat['borders'] = HelperMethods.writeBorders(cell.cellFormat.borders, 0);\n this.format = JSON.stringify(cellFormat);\n }\n if (isShading) {\n cellFormat['shading'] = this.owner.sfdtExportModule ? this.owner.sfdtExportModule.writeShading(cell.cellFormat.shading, 0) : {};\n this.format = JSON.stringify(cellFormat);\n }\n };\n BaseHistoryInfo.prototype.createListFormat = function (action, operation) {\n var listId;\n var nsid;\n if (action === 'ListFormat') {\n listId = this.insertedFormat.listId;\n operation.text = action.toString().charAt(0).toLowerCase() + action.toString().slice(1);\n }\n else {\n listId = this.insertedFormat.listId;\n nsid = this.insertedFormat.nsid;\n }\n if (listId > -1) {\n var list = this.owner.documentHelper.getListById(listId);\n var listData = {};\n listData.optimizeSfdt = this.owner.documentEditorSettings.optimizeSfdt;\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n this.owner.sfdtExportModule.keywordIndex = this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0;\n listData[listsProperty[this.owner.sfdtExportModule.keywordIndex]] = [];\n listData[listsProperty[this.owner.sfdtExportModule.keywordIndex]].push(this.owner.sfdtExportModule.writeList(list));\n listData[abstractListsProperty[this.owner.sfdtExportModule.keywordIndex]] = [];\n if (!isNullOrUndefined(list)) {\n listData[abstractListsProperty[this.owner.sfdtExportModule.keywordIndex]].push(this.owner.sfdtExportModule.writeAbstractList(list.abstractList));\n }\n if (action == 'RestartNumbering') {\n listData[listIdProperty[this.owner.sfdtExportModule.keywordIndex]] = listId;\n listData[nsidProperty] = nsid;\n }\n }\n operation.listData = JSON.stringify(listData);\n }\n };\n BaseHistoryInfo.prototype.createCharacterFormat = function (action) {\n var characterFormat = {};\n if (action === 'Uppercase') {\n characterFormat.Uppercase = true;\n }\n else if (action === 'Lowercase') {\n characterFormat.Lowercase = true;\n }\n else if (action === 'SentenceCase') {\n characterFormat.SentenceCase = true;\n }\n else if (action === 'ToggleCase') {\n characterFormat.ToggleCase = true;\n }\n else if (action === 'CapitalizeEachWord') {\n characterFormat.CapitalizeEachWord = true;\n }\n else if (action === 'ApplyStyle' || action === 'StyleName') {\n if (isNullOrUndefined(this.insertedFormat)) {\n characterFormat.styleName = null;\n }\n else {\n characterFormat.styleName = this.insertedFormat;\n }\n }\n else if (action === 'CharacterFormat') {\n var charFormat = this.insertedFormat;\n characterFormat.bold = charFormat.hasValue('bold') ? charFormat.bold : characterFormat.bold;\n characterFormat.italic = charFormat.hasValue('italic') ? charFormat.italic : characterFormat.italic;\n characterFormat.fontSize = charFormat.hasValue('fontSize') ? charFormat.fontSize : characterFormat.fontSize;\n characterFormat.underline = charFormat.hasValue('underline') ? charFormat.underline : characterFormat.underline;\n characterFormat.strikethrough = charFormat.hasValue('strikethrough') ? charFormat.strikethrough : characterFormat.strikethrough;\n characterFormat.baselineAlignment = charFormat.hasValue('baselineAlignment') ? charFormat.baselineAlignment : characterFormat.baselineAlignment;\n characterFormat.highlightColor = charFormat.hasValue('highlightColor') ? charFormat.highlightColor : characterFormat.highlightColor;\n characterFormat.fontColor = charFormat.hasValue('fontColor') ? charFormat.fontColor : characterFormat.fontColor;\n characterFormat.fontFamily = charFormat.hasValue('fontFamily') ? charFormat.fontFamily : characterFormat.fontFamily;\n characterFormat.allCaps = charFormat.hasValue('allCaps') ? charFormat.allCaps : characterFormat.allCaps;\n characterFormat.LowerCase = charFormat.hasValue('Lowercase') ? charFormat.Lowercase : characterFormat.Lowercase;\n characterFormat.Uppercase = charFormat.hasValue('Uppercase') ? charFormat.Lowercase : characterFormat.Uppercase;\n characterFormat.CapitalizeEachWord = charFormat.hasValue('CapitalizeEachWord') ? charFormat.CapitalizeEachWord : characterFormat.CapitalizeEachWord;\n characterFormat.SentenceCase = charFormat.hasValue('SentenceCase') ? charFormat.SentenceCase : characterFormat.SentenceCase;\n characterFormat.ToggleCase = charFormat.hasValue('ToggleCase') ? charFormat.ToggleCase : characterFormat.ToggleCase;\n }\n else {\n if (this.insertedFormat === 'increment' || this.insertedFormat === 'decrement') {\n this.type = this.insertedFormat;\n characterFormat.fontSize = 0;\n }\n else {\n if (action !== 'ClearFormat') {\n var text = action.toString().charAt(0).toLowerCase() + action.toString().slice(1);\n if (this.insertedFormat instanceof WCharacterFormat && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.insertedFormat = this.insertedFormat[text];\n }\n characterFormat[text] = this.insertedFormat;\n }\n }\n }\n this.format = JSON.stringify(characterFormat);\n };\n BaseHistoryInfo.prototype.createParagraphFormat = function (action) {\n var paragraphFormat = {};\n if (action === 'ParagraphFormat' || action === 'ContinueNumbering') {\n var paraFormat = this.insertedFormat;\n paragraphFormat.afterSpacing = paraFormat.hasValue('afterSpacing') ? paraFormat.afterSpacing : paragraphFormat.afterSpacing;\n paragraphFormat.beforeSpacing = paraFormat.hasValue('beforeSpacing') ? paraFormat.beforeSpacing : paragraphFormat.beforeSpacing;\n paragraphFormat.spaceAfterAuto = paraFormat.hasValue('spaceAfterAuto') ? paraFormat.spaceAfterAuto : paragraphFormat.spaceAfterAuto;\n paragraphFormat.spaceBeforeAuto = paraFormat.hasValue('spaceBeforeAuto') ? paraFormat.spaceBeforeAuto : paragraphFormat.spaceBeforeAuto;\n paragraphFormat.rightIndent = paraFormat.hasValue('rightIndent') ? paraFormat.rightIndent : paragraphFormat.rightIndent;\n paragraphFormat.leftIndent = paraFormat.hasValue('leftIndent') ? paraFormat.leftIndent : paragraphFormat.leftIndent;\n paragraphFormat.firstLineIndent = paraFormat.hasValue('firstLineIndent') ? paraFormat.firstLineIndent : paragraphFormat.firstLineIndent;\n paragraphFormat.lineSpacing = paraFormat.hasValue('lineSpacing') ? paraFormat.lineSpacing : paragraphFormat.lineSpacing;\n paragraphFormat.lineSpacingType = paraFormat.hasValue('lineSpacingType') ? paraFormat.lineSpacingType : paragraphFormat.lineSpacingType;\n paragraphFormat.textAlignment = paraFormat.hasValue('textAlignment') ? paraFormat.textAlignment : paragraphFormat.textAlignment;\n paragraphFormat.outlineLevel = paraFormat.hasValue('outlineLevel') ? paraFormat.outlineLevel : paragraphFormat.outlineLevel;\n paragraphFormat.bidi = paraFormat.hasValue('bidi') ? paraFormat.bidi : paragraphFormat.bidi;\n if (paragraphFormat.bidi) {\n if (paragraphFormat.textAlignment === 'Right') {\n paragraphFormat.textAlignment = 'Left';\n }\n else if (paragraphFormat.textAlignment === 'Left') {\n paragraphFormat.textAlignment = 'Right';\n }\n }\n paragraphFormat.borders = paraFormat.hasValue('borders') ? paraFormat.borders : paragraphFormat.borders;\n if (paraFormat.listFormat.listId !== -1) {\n var listFormat = {};\n listFormat.listId = paraFormat.listFormat.listId;\n listFormat.listLevelNumber = paraFormat.listFormat.listLevelNumber;\n listFormat.nsid = paraFormat.listFormat.nsid;\n paragraphFormat.listFormat = listFormat;\n }\n paragraphFormat.styleName = paraFormat.hasValue('styleName') ? paragraphFormat.styleName.name : undefined;\n paragraphFormat.contextualSpacing = paraFormat.hasValue('contextualSpacing') ? paraFormat.contextualSpacing : paragraphFormat.contextualSpacing;\n paragraphFormat.keepWithNext = paraFormat.hasValue('keepWithNext') ? paraFormat.keepWithNext : paragraphFormat.keepWithNext;\n paragraphFormat.keepLinesTogether = paraFormat.hasValue('keepLinesTogether') ? paraFormat.keepLinesTogether : paragraphFormat.keepLinesTogether;\n paragraphFormat.widowControl = paraFormat.hasValue('contextualSpacing') ? paraFormat.widowControl : paragraphFormat.widowControl;\n }\n else if (action === 'ListFormat') {\n if (this.insertedFormat instanceof WParagraphFormat) {\n this.insertedFormat = this.insertedFormat.listFormat;\n }\n var listFormat = {};\n listFormat.listId = this.insertedFormat.listId;\n listFormat.nsid = this.insertedFormat.nsid;\n listFormat.listLevelNumber = this.insertedFormat.listLevelNumber;\n paragraphFormat.listFormat = listFormat;\n }\n else if (action === 'ApplyStyle' || action === 'StyleName') {\n paragraphFormat.styleName = this.insertedFormat;\n }\n else if (action === 'ParagraphBidi') {\n paragraphFormat.bidi = this.insertedFormat;\n }\n else if (action === 'Borders') {\n paragraphFormat['borders'] = HelperMethods.writeBorders(this.insertedFormat, 0);\n }\n else {\n if (this.insertedFormat instanceof WParagraphFormat) {\n var paraFormat = this.owner.sfdtExportModule.writeParagraphFormat(this.insertedFormat, 0);\n paragraphFormat[action.toString().charAt(0).toLowerCase() + action.toString().slice(1)] = paraFormat;\n }\n else if (action === 'List') {\n paragraphFormat = this.insertedFormat;\n }\n else {\n paragraphFormat[action.toString().charAt(0).toLowerCase() + action.toString().slice(1)] = this.insertedFormat;\n }\n }\n this.format = JSON.stringify(paragraphFormat);\n };\n /**\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.createTableFormat = function (action) {\n var paragraphInfo = { 'paragraph': null, 'offset': 0 };\n this.startIndex = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false }, this.owner.selectionModule.start.paragraph.associatedCell.ownerTable).position;\n this.endIndex = this.startIndex;\n this.endIndex += this.owner.selectionModule.getBlockLength(undefined, this.owner.selectionModule.start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer), 0, { done: false }, true, undefined, undefined) - 1;\n var tableFormat = {};\n if (action === 'TableFormat') {\n var tabFormat = this.insertedFormat;\n if (!isNullOrUndefined(tabFormat)) {\n tableFormat.bidi = tabFormat.hasValue('bidi') ? tabFormat.bidi : undefined;\n tableFormat.preferredWidth = tabFormat.hasValue('preferredWidth') ? tabFormat.preferredWidth : undefined;\n tableFormat.preferredWidthType = tabFormat.hasValue('preferredWidthType') ? tabFormat.preferredWidthType : undefined;\n tableFormat.tableAlignment = tabFormat.hasValue('tableAlignment') ? tabFormat.tableAlignment : undefined;\n tableFormat.leftIndent = tabFormat.hasValue('leftIndent') ? tabFormat.leftIndent : undefined;\n }\n }\n else if (action === 'TableOptions') {\n var tableOption = this.owner.selectionModule.start.paragraph.associatedCell.ownerTable.tableFormat;\n if (!isNullOrUndefined(tableOption)) {\n tableFormat.cellSpacing = tableOption.hasValue('cellSpacing') ? tableOption.cellSpacing : undefined;\n tableFormat.leftMargin = tableOption.hasValue('leftMargin') ? tableOption.leftMargin : undefined;\n tableFormat.topMargin = tableOption.hasValue('topMargin') ? tableOption.topMargin : undefined;\n tableFormat.rightMargin = tableOption.hasValue('rightMargin') ? tableOption.rightMargin : undefined;\n tableFormat.bottomMargin = tableOption.hasValue('bottomMargin') ? tableOption.bottomMargin : undefined;\n }\n }\n else if (action === 'BordersAndShading') {\n var tabBorderFormat = this.insertedFormat;\n tableFormat = !isNullOrUndefined(this.owner.sfdtExportModule) ? this.owner.sfdtExportModule.writeTableFormat(tabBorderFormat, 0) : {};\n }\n else {\n tableFormat[this.getTableFormatString(action)] = this.insertedFormat;\n }\n this.format = JSON.stringify(tableFormat);\n };\n /**\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.createRowFormat = function (action) {\n var rowFormat = {};\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n this.owner.sfdtExportModule.assignRowFormat(rowFormat, this.owner.selectionModule.start.paragraph.associatedCell.ownerRow.rowFormat, 0);\n }\n }\n else {\n if (action === 'RowFormat') {\n var rForamt = this.insertedFormat;\n if (!isNullOrUndefined(rForamt)) {\n rowFormat.height = rForamt.hasValue('height') ? rForamt.height : undefined;\n rowFormat.heightType = rForamt.hasValue('heightType') ? rForamt.heightType : undefined;\n rowFormat.isHeader = rForamt.hasValue('isHeader') ? rForamt.isHeader : undefined;\n rowFormat.allowBreakAcrossPages = rForamt.hasValue('allowBreakAcrossPages') ? rForamt.allowBreakAcrossPages : undefined;\n }\n }\n else {\n rowFormat[this.getRowString(action)] = this.insertedFormat;\n }\n }\n this.format = JSON.stringify(rowFormat);\n };\n /**\n * @private\n * @returns {void}\n */\n BaseHistoryInfo.prototype.createCellFormat = function (action) {\n var cellFormat = {};\n if (action === 'CellFormat') {\n var cFormat = this.insertedFormat;\n cellFormat.preferredWidth = cFormat.hasValue('preferredWidth') ? cFormat.preferredWidth : undefined;\n cellFormat.preferredWidthType = cFormat.hasValue('preferredWidthType') ? cFormat.preferredWidthType : undefined;\n cellFormat.verticalAlignment = cFormat.hasValue('verticalAlignment') ? cFormat.verticalAlignment : undefined;\n }\n else if (action === 'CellOptions') {\n var cellOption = this.insertedFormat;\n cellFormat.leftMargin = cellOption.leftMargin;\n cellFormat.rightMargin = cellOption.rightMargin;\n cellFormat.bottomMargin = cellOption.bottomMargin;\n cellFormat.topMargin = cellOption.topMargin;\n }\n else if (action === 'Shading') {\n cellFormat[this.getCellString(action)] = !isNullOrUndefined(this.owner.sfdtExportModule) ? this.owner.sfdtExportModule.writeShading(this.insertedFormat, 0) : {};\n }\n else if (action === 'Borders') {\n cellFormat['borders'] = HelperMethods.writeBorders(this.insertedFormat, 0);\n }\n else if (action === 'BordersAndShading') {\n cellFormat['shading'] = !isNullOrUndefined(this.owner.sfdtExportModule) ? this.owner.sfdtExportModule.writeShading(this.insertedFormat, 0) : {};\n cellFormat['borders'] = HelperMethods.writeBorders(this.insertedFormat.borders, 0);\n }\n else {\n cellFormat[this.getCellString(action)] = this.insertedFormat;\n }\n this.format = JSON.stringify(cellFormat);\n };\n BaseHistoryInfo.prototype.getTableFormatString = function (property) {\n switch (property) {\n case 'TableAlignment':\n return 'tableAlignment';\n case 'TableLeftIndent':\n return 'leftIndent';\n case 'DefaultCellLeftMargin':\n return 'leftMargin';\n case 'DefaultCellRightMargin':\n return 'rightMargin';\n case 'DefaultCellBottomMargin':\n return 'bottomMargin';\n case 'DefaultCellTopMargin':\n return 'topMargin';\n case 'TablePreferredWidth':\n return 'preferredWidth';\n case 'TablePreferredWidthType':\n return 'preferredWidthType';\n case 'Shading':\n return 'shading';\n case 'TableBidi':\n return 'bidi';\n default:\n return 'cellSpacing';\n }\n };\n BaseHistoryInfo.prototype.createSectionFormat = function (action) {\n var sectionFormat = {};\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n if (!isNullOrUndefined(this.owner.sfdtExportModule)) {\n this.owner.sfdtExportModule.writeSectionFormat(this.owner.selectionModule.start.paragraph.bodyWidget.sectionFormat, sectionFormat, 0);\n }\n }\n else {\n if (action === 'LinkToPrevious') {\n var headerFooterWidget = this.owner.selectionModule.start.paragraph.bodyWidget;\n var sectionIndex = headerFooterWidget.sectionIndex;\n var headerFooterType = headerFooterWidget.headerFooterType;\n this.format = JSON.stringify({ linkToPrevious: this.insertedFormat, sectionIndex: sectionIndex, headerFooterType: headerFooterType });\n return;\n }\n else if (action === 'SectionFormat') {\n var secFormat = this.insertedFormat;\n this.owner.sfdtExportModule.writeSectionFormat(secFormat, sectionFormat, 0);\n }\n else {\n sectionFormat[action[0].toLowerCase() + action.slice(1)] = this.insertedFormat;\n }\n }\n this.format = JSON.stringify(sectionFormat);\n };\n BaseHistoryInfo.prototype.getRowString = function (property) {\n switch (property) {\n case 'RowHeight':\n return 'height';\n case 'RowHeightType':\n return 'heightType';\n case 'RowHeader':\n return 'isHeader';\n default:\n return 'allowBreakAcrossPages';\n }\n };\n BaseHistoryInfo.prototype.getCellString = function (property) {\n switch (property) {\n case 'CellContentVerticalAlignment':\n return 'verticalAlignment';\n case 'CellLeftMargin':\n return 'leftMargin';\n case 'CellRightMargin':\n return 'rightMargin';\n case 'CellBottomMargin':\n return 'bottomMargin';\n case 'CellTopMargin':\n return 'topMargin';\n case 'CellPreferredWidth':\n return 'preferredWidth';\n case 'Shading':\n return 'shading';\n default:\n return 'preferredWidthType';\n }\n };\n return BaseHistoryInfo;\n}());\nexport { BaseHistoryInfo };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo } from './base-history-info';\nimport { CommentCharacterElementBox } from '../viewer/page';\nimport { CONTROL_CHARACTERS } from '../../base/types';\n/**\n * EditorHistory preservation class\n */\n/**\n * @private\n */\nvar HistoryInfo = /** @class */ (function (_super) {\n __extends(HistoryInfo, _super);\n function HistoryInfo(node, isChild) {\n var _this = _super.call(this, node) || this;\n _this.isChildHistoryInfo = false;\n _this.editRangeStart = undefined;\n _this.documentHelper = node.documentHelper;\n _this.isChildHistoryInfo = isChild;\n return _this;\n }\n Object.defineProperty(HistoryInfo.prototype, \"hasAction\", {\n get: function () {\n return !isNullOrUndefined(this.modifiedActions);\n },\n enumerable: true,\n configurable: true\n });\n HistoryInfo.prototype.addModifiedAction = function (baseHistoryInfo) {\n // For complex actions such as Replace text, Insert/Remove Hyperlink etc.\n if (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n if (isNullOrUndefined(this.modifiedActions)) {\n this.modifiedActions = [];\n }\n this.modifiedActions.push(baseHistoryInfo);\n }\n };\n /**\n * @returns {Operation[]} returns an array of type Operations\n * @param {boolean} isInvertOperation accepts a boolean value\n * @private\n */\n HistoryInfo.prototype.getActionInfo = function (isInvertOperation) {\n var action = this.action;\n var operations = [];\n switch (action) {\n case 'InsertBookmark':\n case 'RestrictEditing':\n if (this.editorHistory.isUndoing) {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n if (action === 'RestrictEditing') {\n this.modifiedActions[parseInt(i.toString(), 10)].markerData.push(this.owner.editorModule.getMarkerData(this.modifiedActions[parseInt(i.toString(), 10)].removedNodes[0]));\n }\n operations.push(this.modifiedActions[parseInt(i.toString(), 10)].getDeleteOperation('DeleteBookmark', i === 0 ? true : undefined));\n this.modifiedActions[parseInt(i.toString(), 10)].markerData.shift();\n }\n }\n else {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (currentHistory.action === 'DeleteBookmark') {\n operations.push(currentHistory.getDeleteOperation('DeleteBookmark'));\n operations.push(currentHistory.getDeleteOperation('DeleteBookmark', true));\n continue;\n }\n operations.push(currentHistory.getInsertOperation(action));\n }\n }\n break;\n case 'BackSpace':\n case 'Delete':\n case 'RemoveEditRange':\n if (this.editorHistory.isUndoing) {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (currentHistory.action === 'InsertInline') {\n var operation = currentHistory.getDeleteOperation('DeleteBookmark', true);\n operations.push(operation);\n }\n else {\n var operationCollection = currentHistory.getActionInfo();\n operations = operations.concat(operationCollection);\n if (currentHistory.action === 'RemoveEditRange') {\n operations.push(currentHistory.getDeleteOperation(action, true));\n }\n }\n }\n operations.reverse();\n }\n else {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (currentHistory.action === 'InsertInline') {\n var operation = currentHistory.getInsertOperation('InsertBookmark');\n operations.push(operation);\n }\n else {\n operations.push(currentHistory.getDeleteOperation(action));\n if (currentHistory.action === 'RemoveEditRange') {\n operations.push(currentHistory.getDeleteOperation(action, true));\n }\n }\n }\n }\n break;\n case 'PageBreak':\n case 'ColumnBreak':\n if (this.owner.enableTrackChanges) {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (currentHistory.removedNodes.length > 0) {\n operations = operations.concat(currentHistory.getDeleteOperationsForTrackChanges());\n }\n var markerData = currentHistory.markerData[currentHistory.markerData.length - 1];\n var operation = currentHistory.getInsertOperation('Enter');\n var breakOperation = this.getInsertOperation(action);\n operation.markerData = markerData;\n breakOperation.markerData =\n this.owner.editorModule.getMarkerData(undefined, undefined, this.owner.editorModule.getRevision(markerData.revisionId));\n operations.push(operation);\n operations.push(breakOperation);\n operations.push(operation);\n operation.markerData.skipOperation = true;\n }\n }\n else {\n if (this.editorHistory.isUndoing) {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n currentHistory.endIndex = currentHistory.startIndex;\n //Basically for pagebreak and column break there will three paragraph difference. So for transformation we sended three backspace operation.\n operations.push(currentHistory.getDeleteOperation('Delete'));\n operations.push(currentHistory.getDeleteOperation('Delete'));\n operations.push(currentHistory.getDeleteOperation('Delete'));\n if (currentHistory.isRemovedNodes) {\n var operationCollection = currentHistory.getDeleteContent('BackSpace');\n operations = operations.concat(operationCollection);\n }\n }\n }\n else {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (currentHistory.removedNodes.length > 0) {\n operations.push(currentHistory.getDeleteOperation(action));\n }\n }\n var operation = this.getInsertOperation('Enter');\n operation.markerData = { skipOperation: true };\n //Basically for pagebreak and column break there will three paragraph difference. So for transformation we sended three insert operation.\n operations.push(operation);\n operations.push(operation);\n operations.push(this.getInsertOperation(action));\n operations.push(operation);\n }\n }\n break;\n case 'InsertHyperlink':\n case 'AutoFormatHyperlink':\n case 'RemoveHyperlink':\n if (this.editorHistory.isUndoing && action === 'RemoveHyperlink') {\n var length_1 = 0;\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (currentHistory.action === 'FontColor' || currentHistory.action === 'Underline') {\n length_1 = currentHistory.endIndex - currentHistory.startIndex;\n }\n }\n if (!isNullOrUndefined(this.modifiedActions[parseInt((this.modifiedActions.length - 1).toString(), 10)].fieldBegin)) {\n this.modifiedActions[parseInt((this.modifiedActions.length - 1).toString(), 10)].endIndex =\n this.modifiedActions[parseInt((this.modifiedActions.length - 1).toString(), 10)].startIndex + length_1;\n var operation = this.modifiedActions[parseInt((this.modifiedActions.length - 1).toString(), 10)].getDeleteOperation('Delete');\n operation.markerData = undefined;\n operations.push(operation);\n var operationCollection = this.modifiedActions[parseInt((this.modifiedActions.length - 1).toString(), 10)].getFieldOperation();\n operations = operations.concat(operationCollection);\n }\n }\n else {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (currentHistory.action === 'InsertHyperlink') {\n operations.push.apply(operations, currentHistory.getActionInfo());\n }\n else if (currentHistory.action === 'InsertInline') {\n if (currentHistory.insertedText === CONTROL_CHARACTERS.Marker_Start ||\n currentHistory.insertedText === CONTROL_CHARACTERS.Marker_End) {\n if (this.editorHistory.isUndoing) {\n operations.push(currentHistory.getDeleteOperation(currentHistory.action));\n }\n else {\n operations.push(currentHistory.getInsertOperation('InsertHyperlink'));\n }\n }\n else {\n if (this.editorHistory.isUndoing) {\n operations.push(currentHistory.getDeleteOperation(currentHistory.action));\n }\n else {\n operations.push(currentHistory.getInsertOperation('Insert'));\n }\n }\n }\n else if (currentHistory.action === 'Delete') {\n operations.push(currentHistory.getDeleteOperation(currentHistory.action));\n }\n else if (currentHistory.action === 'Underline') {\n operations = operations.concat(currentHistory.getActionInfo());\n }\n else if (currentHistory.action === 'FontColor') {\n operations = operations.concat(currentHistory.getActionInfo());\n }\n }\n if (this.editorHistory.isUndoing) {\n operations.reverse();\n }\n }\n break;\n case 'InsertComment':\n if (this.editorHistory.isUndoing) {\n this.getDeleteCommentOperation(this.modifiedActions, operations);\n }\n else {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n var operation = currentHistory.getInsertOperation(currentHistory.action);\n if ((currentHistory.insertedElement instanceof CommentCharacterElementBox && currentHistory.action === 'InsertInline')) {\n operations.push(currentHistory.getCommentOperation(operation, currentHistory.action));\n }\n else if (currentHistory.action === 'InsertCommentWidget') {\n operation = this.getUpdateOperation();\n operations.push(currentHistory.getCommentOperation(operation, currentHistory.action));\n }\n }\n }\n break;\n case 'RemoveComment':\n if (this.editorHistory.isUndoing) {\n for (var i = this.modifiedActions.length - 1; i >= 0; i--) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n var operation = undefined;\n var operationCollection = [];\n if (currentHistory.action === 'InsertInline' && currentHistory.insertedElement instanceof CommentCharacterElementBox) {\n operation = currentHistory.getDeleteOperation(currentHistory.action);\n operationCollection.push(currentHistory.getCommentOperation(operation, 'InsertInline'));\n }\n else if (currentHistory.action === 'RemoveInline') {\n operation = currentHistory.getDeleteOperation(currentHistory.action);\n operationCollection.push(currentHistory.getCommentOperation(operation, 'InsertInline'));\n operation = currentHistory.getInsertOperation(currentHistory.action);\n operationCollection.push(currentHistory.getCommentOperation(operation, 'InsertInline'));\n }\n else if (currentHistory.action === 'DeleteComment') {\n operationCollection = currentHistory.getActionInfo();\n }\n else {\n this.owner.sfdtExportModule.iscontentInsert = false;\n operationCollection = currentHistory.getActionInfo();\n this.owner.sfdtExportModule.iscontentInsert = true;\n }\n operations = operations.concat(operationCollection);\n }\n }\n else {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n var operation = undefined;\n var operationCollection = [];\n if (currentHistory.action === 'RemoveInline' && currentHistory.removedNodes[0] instanceof CommentCharacterElementBox) {\n operation = currentHistory.getDeleteOperation(currentHistory.action);\n operationCollection.push(currentHistory.getCommentOperation(operation, currentHistory.action));\n }\n else if (currentHistory.action === 'InsertInline' && currentHistory.insertedElement instanceof CommentCharacterElementBox) {\n operation = currentHistory.getInsertOperation(currentHistory.action);\n operationCollection.push(currentHistory.getCommentOperation(operation, currentHistory.action));\n }\n else {\n operationCollection = currentHistory.getActionInfo();\n }\n operations = operations.concat(operationCollection);\n }\n }\n break;\n case 'DeleteComment':\n if (this.editorHistory.isUndoing) {\n for (var j = this.modifiedActions.length - 1; j >= 0; j--) {\n var history_1 = this.modifiedActions[parseInt(j.toString(), 10)];\n var operation = history_1.getInsertOperation(history_1.action);\n if ((history_1.insertedElement instanceof CommentCharacterElementBox && history_1.action === 'RemoveInline')) {\n operations.push(history_1.getCommentOperation(operation, 'InsertInline'));\n }\n else if (history_1.action === 'DeleteCommentWidget') {\n operation = this.getUpdateOperation();\n operations.push(history_1.getCommentOperation(operation, 'InsertCommentWidget'));\n }\n else if (history_1.action === 'DeleteComment') {\n history_1.getActionInfo();\n }\n }\n }\n else {\n this.getDeleteCommentOperation(this.modifiedActions, operations);\n }\n break;\n case 'FormField': {\n var currentHistory = this.modifiedActions.pop();\n operations = currentHistory.getFieldOperation();\n break;\n }\n case 'IMEInput':\n if (isInvertOperation && (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (this.modifiedActions[0].removedNodes.length > 0) {\n var removeOperation = this.modifiedActions[0].getDeleteOperation('Delete');\n removeOperation.length = removeOperation.text.length;\n operations.push(removeOperation);\n }\n var insertOperation = this.modifiedActions[this.modifiedActions.length - 1].getInsertOperation('Insert');\n insertOperation.length = insertOperation.text.length;\n operations.push(insertOperation);\n operations.reverse();\n for (var i = 0; i < operations.length; i++) {\n var operation = operations[parseInt(i.toString(), 10)];\n if (operation.action === 'Insert') {\n operation.action = 'Delete';\n }\n else if (operation.action === 'Delete') {\n operation.action = 'Insert';\n }\n }\n }\n else {\n var currentHistory = this.modifiedActions[this.modifiedActions.length - 1];\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (currentHistory.removedNodes.length > 0) {\n operations.push(currentHistory.getDeleteOperation(action));\n }\n if (currentHistory.isRemovedNodes) {\n var operationCollection = currentHistory.getDeleteContent('BackSpace');\n operations = operations.concat(operationCollection);\n }\n currentHistory.isRemovedNodes = false;\n }\n }\n else {\n if (currentHistory.removedNodes.length > 0) {\n operations.push(currentHistory.getDeleteOperation(action));\n }\n operations.push(currentHistory.getInsertOperation(this.action));\n }\n currentHistory.isRemovedNodes = false;\n }\n break;\n case 'Accept All':\n case 'ReplaceAll':\n case 'Reject All': {\n var isSkip = false;\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n var currentHistory = this.modifiedActions[this.modifiedActions.length - 1];\n operations.push.apply(operations, currentHistory.cellOperation);\n currentHistory.cellOperation = [];\n if (currentHistory.isRemovedNodes) {\n var operationCollection = currentHistory.getDeleteContent('Insert');\n operations = operations.concat(operationCollection);\n }\n }\n else {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (!isNullOrUndefined(currentHistory.cellOperation) && currentHistory.cellOperation.length > 0) {\n operations.push(currentHistory.cellOperation[0]);\n isSkip = true;\n currentHistory.cellOperation = [];\n }\n else {\n var operationsCollection = currentHistory.getActionInfo();\n operations.push.apply(operations, operationsCollection);\n }\n }\n }\n // if (!isSkip && (action === 'Accept All' || action === 'Reject All')) {\n // operations.reverse();\n // }\n break;\n }\n case 'Paste':\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n currentHistory.type = this.type === 'PasteToc' ? this.type : 'Paste';\n var pasteOperations = currentHistory.getActionInfo();\n operations.push.apply(operations, pasteOperations);\n }\n break;\n case 'TOC':\n if (this.modifiedActions) {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n currentHistory.type = currentHistory.action === 'Paste' ? 'PasteToc' : undefined;\n var tocOperations = currentHistory.getActionInfo();\n operations.push.apply(operations, tocOperations);\n }\n if (this.editorHistory.isUndoing && operations.length > 0) {\n var lastelement = operations.pop();\n operations.unshift(lastelement);\n }\n }\n break;\n case 'DragAndDropContent':\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n currentHistory.type = currentHistory.action === 'Paste' ? 'Paste' : undefined;\n var ddcOperations = currentHistory.getActionInfo();\n operations.push.apply(operations, ddcOperations);\n }\n break;\n case 'ClearFormat':\n if (this.editorHistory.isUndoing) {\n for (var i = 0; i < this.modifiedActions.length; i++) {\n operations.push.apply(operations, this.modifiedActions[parseInt(i.toString(), 10)].modifiedFormatOperation);\n this.modifiedActions[parseInt(i.toString(), 10)].modifiedFormatOperation = [];\n }\n }\n else {\n var clearHistory = this.modifiedActions[this.modifiedActions.length - 1];\n var formatOperation = clearHistory.buildFormatOperation('ClearFormat', true);\n operations = formatOperation.slice();\n }\n break;\n case 'ApplyStyle': {\n var styleHistory = void 0;\n var formatstyleOperation = [];\n if (this.modifiedActions[0] instanceof HistoryInfo) {\n var historyInfo = this.modifiedActions[0];\n styleHistory = historyInfo.modifiedActions[0];\n formatstyleOperation = styleHistory.buildFormatOperation('ClearFormat', true);\n operations = formatstyleOperation.slice();\n }\n if (!(this.modifiedActions[this.modifiedActions.length - 1] instanceof HistoryInfo)) {\n formatstyleOperation = this.modifiedActions[this.modifiedActions.length - 1].buildFormatOperation(action, true);\n for (var i = 0; i < formatstyleOperation.length; i++) {\n operations.push(formatstyleOperation[parseInt(i.toString(), 10)]);\n }\n }\n break;\n }\n case 'TableMarginsSelection':\n this.modifiedActions[this.modifiedActions.length - 1].createTableFormat(this.modifiedActions[this.modifiedActions.length - 1].action);\n this.modifiedActions[this.modifiedActions.length - 1].type = 'TableFormat';\n operations.push(this.modifiedActions[this.modifiedActions.length - 1].getFormatOperation());\n break;\n case 'BordersAndShading':\n if (this.modifiedActions[0].action === 'TableFormat') {\n this.modifiedActions[0].type = 'TableFormat';\n this.modifiedActions[0].createTableFormat('BordersAndShading');\n operations.push(this.modifiedActions[0].getFormatOperation());\n }\n else {\n this.modifiedActions[0].createCellFormat('BordersAndShading');\n this.modifiedActions[0].type = 'CellFormat';\n operations = this.modifiedActions[0].getSelectedCellOperation('BordersAndShading', undefined, true, true, true);\n }\n break;\n case 'AutoList':\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var currentHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n var autoListOperations = currentHistory.getActionInfo();\n operations.push.apply(operations, autoListOperations);\n }\n break;\n case 'TableProperties':\n for (var i = 0; i < this.modifiedActions.length; i++) {\n var tablePropHistory = this.modifiedActions[parseInt(i.toString(), 10)];\n if (tablePropHistory.action === 'TableFormat') {\n tablePropHistory.createTableFormat(tablePropHistory.action);\n tablePropHistory.type = 'TableFormat';\n operations.push(tablePropHistory.getFormatOperation());\n }\n else if (tablePropHistory.action === 'RowFormat') {\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing &&\n tablePropHistory.modifiedProperties.length > 1) {\n operations = tablePropHistory.modifiedFormatOperation;\n tablePropHistory.modifiedFormatOperation = [];\n }\n else {\n tablePropHistory.createRowFormat(tablePropHistory.action);\n tablePropHistory.type = 'RowFormat';\n operations.push(tablePropHistory.getFormatOperation());\n }\n }\n else if (tablePropHistory.action === 'CellFormat') {\n tablePropHistory.createCellFormat(tablePropHistory.action);\n tablePropHistory.type = 'CellFormat';\n var cellProp = tablePropHistory.getSelectedCellOperation(tablePropHistory.action, false, false, false, true);\n for (var i_1 = 0; i_1 < cellProp.length; i_1++) {\n operations.push(cellProp[parseInt(i_1.toString(), 10)]);\n }\n }\n }\n break;\n case 'CellMarginsSelection':\n this.modifiedActions[this.modifiedActions.length - 1].createCellFormat('CellOptions');\n this.modifiedActions[this.modifiedActions.length - 1].type = 'CellFormat';\n operations = this.modifiedActions[this.modifiedActions.length - 1].getSelectedCellOperation('CellOptions', false, false, false, true).slice();\n break;\n }\n return operations;\n };\n HistoryInfo.prototype.revert = function () {\n this.editorHistory.currentHistoryInfo = this;\n if (this.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n if (!isNullOrUndefined(this.modifiedActions)) {\n if (this.editorHistory.isUndoing) {\n var i = this.modifiedActions.length;\n while (i > 0) {\n var baseHistoryInfo = this.modifiedActions[i - 1];\n baseHistoryInfo.revert();\n i = i - 1;\n }\n }\n else {\n var i = 0;\n while (i < this.modifiedActions.length) {\n var baseHistoryInfo = this.modifiedActions[parseInt(i.toString(), 10)];\n baseHistoryInfo.revert();\n i = i + 1;\n }\n }\n }\n if (this.action === 'RestrictEditing') {\n var user = this.editRangeStart.user !== '' ? this.editRangeStart.user : this.editRangeStart.group;\n if (this.editorHistory.isUndoing) {\n var index = this.owner.documentHelper.editRanges.get(user).indexOf(this.editRangeStart);\n if (index !== -1) {\n this.owner.documentHelper.editRanges.get(user).splice(index, 1);\n }\n }\n else {\n this.owner.editorModule.updateRangeCollection(this.editRangeStart, user);\n }\n this.owner.selectionModule.updateEditRangeCollection();\n }\n if (!this.isChildHistoryInfo) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.editorHistory.updateComplexHistoryInternal();\n }\n };\n HistoryInfo.prototype.destroy = function () {\n if (!isNullOrUndefined(this.modifiedActions)) {\n while (this.modifiedActions.length > 0) {\n var baseHistoryInfo = this.modifiedActions[this.modifiedActions.length - 1];\n baseHistoryInfo.destroy();\n this.modifiedActions.splice(this.modifiedActions.indexOf(baseHistoryInfo), 1);\n }\n this.modifiedActions = undefined;\n }\n _super.prototype.destroy.call(this);\n };\n return HistoryInfo;\n}(BaseHistoryInfo));\nexport { HistoryInfo };\n","import { TableWidget } from '../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Point, HelperMethods } from './editor-helper';\n/**\n * @private\n */\nvar TableResizer = /** @class */ (function () {\n function TableResizer(node) {\n this.resizeNode = 0;\n this.resizerPosition = -1;\n this.currentResizingTable = undefined;\n this.owner = node;\n this.documentHelper = this.owner.documentHelper;\n this.startingPoint = new Point(0, 0);\n }\n Object.defineProperty(TableResizer.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n TableResizer.prototype.getModuleName = function () {\n return 'TableResizer';\n };\n TableResizer.prototype.updateResizingHistory = function (touchPoint) {\n if (this.owner.editorHistoryModule) {\n this.owner.editorHistoryModule.updateResizingHistory(touchPoint, this);\n }\n this.documentHelper.isRowOrCellResizing = false;\n this.resizerPosition = -1;\n };\n TableResizer.prototype.handleResize = function (point) {\n this.owner.documentHelper.isRowOrCellResizing = true;\n this.startingPoint.x = point.x;\n this.startingPoint.y = point.y;\n //Initialize resizing history.\n this.owner.editorHistoryModule.initResizingHistory(point, this);\n };\n //Table Resizing implementation starts\n TableResizer.prototype.isInRowResizerArea = function (touchPoint) {\n var position = this.getRowReSizerPosition(undefined, touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 1;\n this.resizerPosition = position;\n return true;\n }\n };\n TableResizer.prototype.isInCellResizerArea = function (touchPoint) {\n var position = this.getCellReSizerPosition(touchPoint);\n if (position === -1) {\n return false;\n }\n else {\n this.resizeNode = 0;\n this.resizerPosition = position;\n return true;\n }\n };\n TableResizer.prototype.getCellReSizerPosition = function (touchPoint) {\n var position = -1;\n var resizerBoundaryWidth = 2;\n var tableWidget = this.getTableWidget(touchPoint);\n var cellWidget = this.getTableCellWidget(touchPoint);\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(tableWidget.x - HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) - 0.25, tableWidget.y, HelperMethods.convertPointToPixel(tableWidget.leftBorderWidth) + 0.5, tableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = tableWidget.x;\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n var preferredWidth = HelperMethods.convertPointToPixel(tableWidget.tableHolder.columns[parseInt(i.toString(), 10)].preferredWidth);\n /* eslint-disable-next-line max-len */\n if ((this.documentHelper.isInsideRect(startingPointX - 1, tableWidget.y, tableWidget.leftBorderWidth + resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n /* eslint-disable-next-line max-len */\n }\n else if (i > 0 && (this.documentHelper.isInsideRect(startingPointX + preferredWidth - resizerBoundaryWidth / 2, tableWidget.y, resizerBoundaryWidth, tableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(cellWidget)) {\n this.currentResizingTable = cellWidget.ownerTable;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(cellWidget.x - cellWidget.margin.left - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom, touchPoint)) {\n return position = cellWidget.columnIndex;\n }\n else if (isNullOrUndefined(cellWidget.nextRenderedWidget)\n /* eslint-disable-next-line max-len */\n && this.documentHelper.isInsideRect(cellWidget.x + cellWidget.margin.right + cellWidget.width - resizerBoundaryWidth / 2, cellWidget.y - cellWidget.margin.top, resizerBoundaryWidth, cellWidget.height + cellWidget.margin.top + cellWidget.margin.bottom, touchPoint)) {\n return position = (cellWidget.columnIndex + cellWidget.cellFormat.columnSpan);\n }\n else if (cellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(cellWidget, touchPoint); // Gets the nested table resizer position.\n }\n }\n }\n return position;\n };\n TableResizer.prototype.getCellReSizerPositionInternal = function (cellWidget, touchPoint) {\n var position = -1;\n var childTableWidget = this.getTableWidgetFromWidget(touchPoint, cellWidget);\n var childCellWidget = undefined;\n if (!isNullOrUndefined(childTableWidget) && childTableWidget.tableFormat.cellSpacing > 0) {\n this.currentResizingTable = childTableWidget;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(childTableWidget.x - childTableWidget.leftBorderWidth - 0.25, childTableWidget.y, childTableWidget.leftBorderWidth + 0.5, childTableWidget.height, touchPoint)) {\n return position = 0;\n }\n var startingPointX = childTableWidget.x;\n for (var i = 0; i < childTableWidget.tableHolder.columns.length; i++) {\n var preferredWidth = HelperMethods.convertPointToPixel(childTableWidget.tableHolder.columns[parseInt(i.toString(), 10)].preferredWidth);\n /* eslint-disable-next-line max-len */\n if ((this.documentHelper.isInsideRect(startingPointX - 1, childTableWidget.y, childTableWidget.leftBorderWidth + 2, childTableWidget.height, touchPoint))) {\n return position = i > 0 ? i : 0;\n /* eslint-disable-next-line max-len */\n }\n else if (i > 0 && (this.documentHelper.isInsideRect(startingPointX + preferredWidth - 1, childTableWidget.y, 2, childTableWidget.height, touchPoint))) {\n return position = (i + 1);\n }\n startingPointX = startingPointX + preferredWidth;\n }\n }\n else {\n if (!isNullOrUndefined(childTableWidget)) {\n childCellWidget = childTableWidget.getTableCellWidget(touchPoint);\n }\n if (!isNullOrUndefined(childCellWidget)) {\n this.currentResizingTable = childCellWidget.ownerTable;\n /* eslint-disable-next-line max-len */\n if (this.documentHelper.isInsideRect(childCellWidget.x - childCellWidget.margin.left - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = childCellWidget.columnIndex;\n }\n else if (isNullOrUndefined(childCellWidget.nextRenderedWidget)\n /* eslint-disable-next-line max-len */\n && this.documentHelper.isInsideRect(childCellWidget.x + childCellWidget.margin.right + childCellWidget.width - 1, childCellWidget.y - childCellWidget.margin.top, 2, childCellWidget.height, touchPoint)) {\n return position = (childCellWidget.columnIndex + childCellWidget.cellFormat.columnSpan);\n }\n else if (childCellWidget.childWidgets.length > 0) {\n return this.getCellReSizerPositionInternal(childCellWidget, touchPoint);\n }\n }\n }\n return position;\n };\n TableResizer.prototype.getRowReSizerPosition = function (widget, touchPoint) {\n var tableWidget = undefined;\n var cellWidget = undefined;\n if (isNullOrUndefined(widget)) {\n tableWidget = this.getTableWidget(touchPoint);\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n else {\n tableWidget = this.getTableWidgetFromWidget(touchPoint, widget);\n }\n var cellSpacing = isNullOrUndefined(tableWidget) ? 0 : tableWidget.tableFormat.cellSpacing;\n if (tableWidget && cellSpacing > 0) {\n this.currentResizingTable = tableWidget;\n /* eslint-disable-next-line max-len */\n if (this.owner.documentHelper.isInsideRect(tableWidget.x, tableWidget.y + tableWidget.height - cellSpacing, this.getActualWidth(tableWidget.lastChild), (isNullOrUndefined(tableWidget.nextSplitWidget) ? tableWidget.bottomBorderWidth + cellSpacing : 0), touchPoint)) {\n return tableWidget.lastChild.rowIndex;\n }\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n //Need to consider for splitted widgets\n var rowWidget = tableWidget.childWidgets[parseInt(i.toString(), 10)];\n if (tableWidget.childWidgets.indexOf(rowWidget) > -1\n /* eslint-disable-next-line max-len */\n && (this.owner.documentHelper.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height + cellSpacing / 2, this.getActualWidth(rowWidget), cellSpacing / 2, touchPoint))) {\n return rowWidget.rowIndex;\n }\n }\n }\n else {\n if (tableWidget && cellWidget) {\n cellWidget = this.getTableCellWidget(touchPoint);\n }\n if (cellWidget) {\n var rowWidget = cellWidget.containerWidget;\n var height = 0;\n if (rowWidget.rowIndex === rowWidget.ownerTable.childWidgets.length - 1) {\n height = rowWidget.bottomBorderWidth + 2;\n }\n else {\n height = rowWidget.nextRenderedWidget.topBorderWidth + 2;\n }\n /* eslint-disable-next-line max-len */\n if (this.owner.documentHelper.isInsideRect(rowWidget.x, rowWidget.y + rowWidget.height - height, rowWidget.width, height * 2, touchPoint)) {\n this.currentResizingTable = rowWidget.ownerTable;\n return rowWidget.rowIndex;\n }\n else {\n if (cellWidget.childWidgets.length > 0) {\n return this.getRowReSizerPosition(cellWidget, touchPoint);\n }\n }\n }\n }\n return -1;\n };\n TableResizer.prototype.handleResizing = function (touchPoint, isTableMarkerDragging, dragValue) {\n this.owner.isShiftingEnabled = true;\n if (!isTableMarkerDragging) {\n if (this.resizeNode === 0) {\n dragValue = touchPoint.x - this.startingPoint.x;\n this.resizeTableCellColumn(dragValue);\n }\n else {\n dragValue = touchPoint.y - this.startingPoint.y;\n this.resizeTableRow(dragValue);\n }\n }\n else {\n if (this.resizeNode === 0) {\n this.resizeTableCellColumn(dragValue);\n }\n }\n };\n TableResizer.prototype.resizeTableRow = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0 || this.resizerPosition === -1) {\n return;\n }\n var selection = this.owner.selectionModule;\n if (table.isInsideTable) {\n this.owner.isLayoutEnabled = false; //Layouting is disabled to skip the child table layouting.\n }\n var row = undefined;\n if (this.resizerPosition > -1) {\n row = table.childWidgets[this.resizerPosition];\n if (row) {\n this.updateRowHeight(row, dragValue);\n }\n selection.selectPosition(selection.start, selection.end);\n }\n if (table.isInsideTable) {\n var parentTable = this.owner.documentHelper.layout.getParentTable(table);\n this.owner.isLayoutEnabled = true; //layouting is enabled to layout the parent table of the nested table.\n table = parentTable;\n }\n this.startingPoint.y += HelperMethods.convertPointToPixel(dragValue);\n this.owner.documentHelper.layout.reLayoutTable(table);\n this.owner.editorModule.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.owner.editorModule.reLayout(this.owner.selectionModule);\n this.owner.editorModule.isSkipOperationsBuild = false;\n if (row) {\n this.getRowReSizerPosition(undefined, this.startingPoint);\n }\n if (this.currentResizingTable && (this.currentResizingTable.childWidgets === undefined\n || this.currentResizingTable.childWidgets[this.resizerPosition] === undefined)) {\n this.resizerPosition = -1;\n }\n };\n TableResizer.prototype.getTableWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.documentHelper.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[parseInt(i.toString(), 10)];\n widget = this.getTableWidgetFromWidget(cursorPoint, bodyWidget);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n if (this.documentHelper.owner.layoutType === 'Pages') {\n var body = currentPage.headerWidget;\n widget = this.getTableWidgetFromWidget(cursorPoint, body);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n var bodywid = currentPage.footerWidget;\n widget = this.getTableWidgetFromWidget(cursorPoint, bodywid);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.getTableWidgetFromWidget = function (point, widget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n if (widget.childWidgets[parseInt(j.toString(), 10)] instanceof TableWidget) {\n var childWidget = widget.childWidgets[parseInt(j.toString(), 10)];\n var tableWidth = 0;\n if (childWidget.wrapTextAround) {\n tableWidth = childWidget.getTableCellWidth();\n }\n if (!(childWidget.wrapTextAround) && childWidget.y <= point.y && (childWidget.y + childWidget.height) >= point.y) {\n return childWidget;\n }\n if ((childWidget.wrapTextAround &&\n (childWidget.x <= point.x && (childWidget.x + tableWidth) >= point.x &&\n childWidget.y <= point.y && (childWidget.y + childWidget.height) >= point.y))) {\n return childWidget;\n }\n }\n }\n return undefined;\n };\n TableResizer.prototype.getTableCellWidget = function (cursorPoint) {\n var widget = undefined;\n var currentPage = this.owner.documentHelper.currentPage;\n if (!isNullOrUndefined(currentPage)) {\n for (var i = 0; i < currentPage.bodyWidgets.length; i++) {\n var bodyWidget = currentPage.bodyWidgets[parseInt(i.toString(), 10)];\n widget = bodyWidget.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n if (this.documentHelper.owner.layoutType === 'Pages' && this.viewer.owner.enableHeaderAndFooter) {\n var body = currentPage.headerWidget;\n widget = body.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n var bodywid = currentPage.footerWidget;\n widget = bodywid.getTableCellWidget(cursorPoint);\n if (!isNullOrUndefined(widget)) {\n break;\n }\n }\n }\n }\n return widget;\n };\n TableResizer.prototype.updateRowHeight = function (row, dragValue) {\n var rowFormat = row.rowFormat;\n if (rowFormat.heightType === 'Auto') {\n rowFormat.heightType = 'AtLeast';\n var row_1 = rowFormat.ownerBase;\n var currentHeight = this.owner.documentHelper.layout.getRowHeight(row_1, [row_1]);\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (currentHeight + dragValue >= 2.7 && rowFormat.height !== currentHeight + dragValue) {\n rowFormat.height = currentHeight + dragValue;\n }\n }\n else {\n //the minimum height of the Row in MS word is 2.7 points which is equal to 3.6 pixel.\n if (rowFormat.height + dragValue >= 2.7 && rowFormat.height !== rowFormat.height + dragValue) {\n rowFormat.height = rowFormat.height + dragValue;\n }\n }\n };\n //Resize Table cell\n TableResizer.prototype.resizeTableCellColumn = function (dragValue) {\n var table = this.currentResizingTable;\n if (isNullOrUndefined(table) || dragValue === 0 || isNullOrUndefined(table.childWidgets) || this.resizerPosition < 0) {\n return;\n }\n var selectionFlag = true;\n var selection = this.owner.selectionModule;\n this.owner.editorModule.setOffsetValue(selection);\n table = table.combineWidget(this.viewer);\n this.owner.isLayoutEnabled = false;\n // table.PreserveGrid = true;\n this.setPreferredWidth(table);\n var containerWidth = table.getOwnerWidth(true);\n var newIndent = table.leftIndent;\n var tableAlignment = table.tableFormat.tableAlignment;\n if (!selection.isEmpty) {\n selectionFlag = this.resizeColumnWithSelection(selection, table, dragValue);\n }\n if (!selectionFlag) {\n this.updateGridValue(table, true);\n return;\n }\n if (this.resizerPosition === 0) {\n // Todo: need to handle the resizing of first column and table indent.\n var columnIndex = this.resizerPosition;\n var rightColumn = table.tableHolder.columns[parseInt(columnIndex.toString(), 10)];\n var width = rightColumn.preferredWidth;\n if (dragValue > 0) {\n var prevDragValue = dragValue;\n do {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minimumWidth) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n break;\n }\n else {\n prevDragValue = dragValue;\n dragValue += newWidth - rightColumn.minimumWidth;\n }\n } while (dragValue !== prevDragValue);\n }\n else {\n var prevDragValue = dragValue;\n do {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth <= 2112) {\n rightColumn.preferredWidth = newWidth;\n newIndent = table.leftIndent + dragValue;\n newIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n break;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - 2112;\n }\n } while (dragValue !== prevDragValue);\n }\n var dragOffset = dragValue;\n if (tableAlignment !== 'Left' && (table.tableHolder.getTotalWidth(0) > containerWidth) && table.tableFormat.preferredWidthType === 'Auto') {\n if (table.tableHolder.isFitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto')) {\n table.tableHolder.fitColumns(containerWidth, table.tableHolder.tableWidth, table.tableFormat.preferredWidthType === 'Auto', table.tableFormat.allowAutoFit);\n }\n else {\n rightColumn.preferredWidth = width;\n }\n dragOffset = 0;\n }\n if (tableAlignment === 'Center'\n && (table.tableHolder.getTotalWidth(0) < containerWidth || table.tableFormat.preferredWidthType !== 'Auto')) {\n dragOffset = dragOffset / 2;\n }\n table.tableFormat.leftIndent = tableAlignment === 'Left' ? newIndent : 0;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth(0);\n this.updateCellPreferredWidths(table);\n if (table.tableFormat.preferredWidthType !== 'Auto') {\n table.updateWidth(dragValue);\n }\n this.updateGridValue(table, true, dragOffset);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n // Todo: need to handle the resizing of last column and table width.\n this.resizeColumnAtLastColumnIndex(table, dragValue, containerWidth);\n }\n else {\n if (this.resizerPosition === -1) {\n this.owner.isLayoutEnabled = true;\n return;\n }\n this.resizeCellAtMiddle(table, dragValue);\n }\n // table.PreserveGrid = false;\n this.owner.isLayoutEnabled = true;\n selection.selectPosition(selection.start, selection.end);\n };\n TableResizer.prototype.resizeColumnWithSelection = function (selection, table, dragValue) {\n //const newIndent: number = table.leftIndent;\n var cellwidget = this.getTableCellWidget(this.startingPoint);\n if (cellwidget && (selection.selectedWidgets.containsKey(cellwidget) || (cellwidget.previousWidget\n && selection.selectedWidgets.containsKey((cellwidget.previousWidget))))) {\n var selectedCells = selection.getSelectedCells();\n if (this.resizerPosition === 0) {\n this.resizeColumnAtStart(table, dragValue, selectedCells);\n }\n else if (table !== null && this.resizerPosition === table.tableHolder.columns.length) {\n var leftColumnCollection = this.getColumnCells(table, this.resizerPosition, true);\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[parseInt(i.toString(), 10)];\n if (selectedCells.indexOf(cell) !== -1) {\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n }\n }\n //Updates the grid after value for all the rows.\n this.updateRowsGridAfterWidth(table);\n table.updateWidth(dragValue);\n table.tableFormat.allowAutoFit = false;\n this.updateGridValue(table, true, dragValue);\n }\n else {\n if (this.resizerPosition === -1) {\n return false;\n }\n var columnIndex = this.resizerPosition;\n var leftColumnCollection = this.getColumnCells(table, columnIndex, true);\n var rightColumnCollection = this.getColumnCells(table, columnIndex, false);\n var isColumnResizing = this.isColumnSelected(table, columnIndex);\n if (leftColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n if (selectedCells.indexOf(leftColumnCollection[parseInt(i.toString(), 10)]) === -1) {\n leftColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n if (rightColumnCollection.length > 0 && !isColumnResizing) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n if (selectedCells.indexOf(rightColumnCollection[parseInt(i.toString(), 10)]) === -1) {\n rightColumnCollection.splice(i, 1);\n i--;\n }\n }\n }\n //Getting the adjacent cell collections for left side selected cells in the right column collection.\n if (leftColumnCollection.length === 0 && rightColumnCollection.length > 0) {\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[parseInt(i.toString(), 10)];\n if (cell.previousWidget) {\n leftColumnCollection.push(cell.previousWidget);\n }\n }\n }\n else if (rightColumnCollection.length === 0 && leftColumnCollection.length > 0) {\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[parseInt(i.toString(), 10)];\n if (cell.nextWidget) {\n rightColumnCollection.push(cell.nextWidget);\n }\n }\n }\n this.changeWidthOfCells(table, leftColumnCollection, rightColumnCollection, dragValue);\n if (table.tableFormat.allowAutoFit) {\n table.updateWidth(dragValue);\n }\n table.tableFormat.allowAutoFit = false;\n this.updateGridValue(table, true, dragValue);\n }\n selection.selectPosition(selection.start, selection.end);\n }\n return false;\n };\n TableResizer.prototype.resizeColumnAtStart = function (table, dragValue, selectedCells) {\n var newIndent = table.leftIndent;\n //const rightColumnCollection: TableCellWidget[] = this.getColumnCells(table, this.resizerPosition, false);\n var offset = 0;\n var selectedRow = selectedCells[0].ownerRow;\n var rowFormat = selectedRow.rowFormat;\n if (rowFormat.beforeWidth > 0) {\n var newGridBefore = rowFormat.beforeWidth + dragValue;\n if (newGridBefore > 0) {\n this.updateGridBefore(selectedRow, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n if (newGridBefore < leastGridBefore && offset !== newGridBefore) {\n newIndent = table.leftIndent + newGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[parseInt(i.toString(), 10)];\n if (selectedRow !== tableRow) {\n this.updateGridBefore(tableRow, -newGridBefore);\n }\n }\n }\n }\n }\n else {\n if (dragValue < 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n var leastGridBefore = this.getLeastGridBefore(table, selectedRow);\n var currentTableIndent = table.tableFormat.leftIndent;\n if (currentTableIndent === 0) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[parseInt(i.toString(), 10)];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.updateGridBefore(tableRow, dragValue);\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n }\n }\n else {\n var difference = leastGridBefore - dragValue;\n if (difference > 0) {\n newIndent = table.leftIndent + dragValue;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n this.updateWidthForCells(table, selectedCells, dragValue);\n }\n else {\n newIndent = table.leftIndent + leastGridBefore;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[parseInt(i.toString(), 10)];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n this.updateGridBefore(tableRow, dragValue - leastGridBefore);\n }\n else {\n this.updateGridBefore(tableRow, -leastGridBefore);\n }\n }\n }\n }\n }\n }\n table.tableFormat.allowAutoFit = false;\n this.updateGridValue(table, true, dragValue);\n };\n TableResizer.prototype.updateWidthForCells = function (table, selectedCells, dragValue) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[parseInt(i.toString(), 10)];\n if (selectedCells.indexOf(tableRow.childWidgets[0]) !== -1) {\n this.increaseOrDecreaseWidth(tableRow.childWidgets[0], dragValue, false);\n }\n else {\n this.updateGridBefore(tableRow, -dragValue);\n }\n }\n };\n TableResizer.prototype.resizeColumnAtLastColumnIndex = function (table, dragValue, containerWidth) {\n var tableAlignment = table.tableFormat.tableAlignment;\n var preferredWidth = table.tableFormat.preferredWidth;\n var hasTableWidth = preferredWidth;\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var prevDragValue = 0;\n while (dragValue !== prevDragValue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minimumWidth) {\n leftColumn.preferredWidth = newWidth;\n prevDragValue = dragValue;\n }\n else {\n prevDragValue = dragValue;\n dragValue -= newWidth - leftColumn.minimumWidth;\n }\n }\n this.updateCellPreferredWidths(table);\n if (hasTableWidth || table.tableHolder.getTotalWidth(0) > containerWidth) {\n table.tableFormat.allowAutoFit = false;\n table.updateWidth(dragValue);\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth(0);\n }\n var dragOffset = dragValue;\n if (tableAlignment === 'Right') {\n dragOffset = 0;\n }\n else if (tableAlignment === 'Center') {\n dragOffset = dragOffset / 2;\n }\n this.updateGridValue(table, true, dragOffset);\n };\n TableResizer.prototype.resizeCellAtMiddle = function (table, dragValue) {\n var columnIndex = this.resizerPosition;\n var leftColumn = table.tableHolder.columns[columnIndex - 1];\n var rightColumn = table.tableHolder.columns[parseInt(columnIndex.toString(), 10)];\n if (dragValue > 0) {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(rightColumn.preferredWidth - dragValue, 1);\n if (newWidth >= rightColumn.minimumWidth) {\n rightColumn.preferredWidth = newWidth;\n leftColumn.preferredWidth = leftColumn.preferredWidth + dragValue;\n isContinue = false;\n }\n else {\n dragValue += newWidth - rightColumn.minimumWidth;\n }\n }\n }\n else {\n var isContinue = true;\n while (isContinue) {\n var newWidth = HelperMethods.round(leftColumn.preferredWidth + dragValue, 1);\n if (newWidth >= leftColumn.minimumWidth) {\n leftColumn.preferredWidth = newWidth;\n rightColumn.preferredWidth = rightColumn.preferredWidth - dragValue;\n isContinue = false;\n }\n else {\n dragValue -= newWidth - leftColumn.minimumWidth;\n }\n }\n }\n // Update the cell widths based on the columns preferred width\n this.updateCellPreferredWidths(table);\n if (table.tableFormat.allowAutoFit) {\n table.updateWidth(dragValue);\n }\n table.tableFormat.allowAutoFit = false;\n table.tableHolder.tableWidth = table.tableHolder.getTotalWidth(0);\n this.updateGridValue(table, false, dragValue);\n };\n TableResizer.prototype.updateGridValue = function (table, isUpdate, dragValue) {\n if (isUpdate) {\n table.calculateGrid();\n table.isGridUpdated = false;\n }\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.viewer.owner.isLayoutEnabled = true;\n if (table.isInsideTable) {\n var parentTable = this.documentHelper.layout.getParentTable(table);\n this.documentHelper.layout.reLayoutTable(parentTable); // Need to optmize this.\n }\n else {\n this.documentHelper.layout.reLayoutTable(table);\n }\n this.owner.editorModule.getOffsetValue(this.documentHelper.selection);\n this.owner.editorModule.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.owner.editorModule.reLayout(this.owner.selectionModule);\n this.owner.editorModule.isSkipOperationsBuild = false;\n if (dragValue) {\n this.startingPoint.x += HelperMethods.convertPointToPixel(dragValue);\n this.resizerPosition = this.getCellReSizerPosition(this.startingPoint);\n }\n };\n TableResizer.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[parseInt(i.toString(), 10)];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[parseInt(j.toString(), 10)];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n TableResizer.prototype.updateGridBefore = function (row, offset) {\n if (row.rowFormat.beforeWidth + offset !== row.rowFormat.beforeWidth) {\n row.rowFormat.beforeWidth = row.rowFormat.beforeWidth + offset;\n row.rowFormat.gridBeforeWidth = row.rowFormat.beforeWidth;\n }\n };\n TableResizer.prototype.getLeastGridBefore = function (table, ignoreRow) {\n var gridBefore = 0;\n var flag = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[parseInt(i.toString(), 10)];\n if (row !== ignoreRow) {\n if (flag === 0) {\n gridBefore = row.rowFormat.beforeWidth;\n flag++;\n }\n if (row.rowFormat.beforeWidth <= gridBefore) {\n gridBefore = row.rowFormat.beforeWidth;\n }\n }\n }\n return gridBefore;\n };\n TableResizer.prototype.increaseOrDecreaseWidth = function (cell, dragValue, isIncrease) {\n var preferredWidth = cell.cellFormat.preferredWidth;\n if (cell.cellFormat.preferredWidthType === 'Auto') {\n preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n var minimumWidth = cell.ownerColumn.minWidth;\n if (cell.cellFormat.preferredWidthType === 'Percent') {\n minimumWidth = cell.convertPointToPercent(minimumWidth);\n }\n // Margins properties usedd for internal purpose.\n if (isIncrease) {\n cell.cellFormat.preferredWidth = preferredWidth + dragValue > minimumWidth ? preferredWidth + dragValue : minimumWidth;\n }\n else {\n cell.cellFormat.preferredWidth = preferredWidth - dragValue > minimumWidth ? preferredWidth - dragValue : minimumWidth;\n }\n };\n /* eslint-disable-next-line max-len */\n TableResizer.prototype.changeWidthOfCells = function (table, leftColumnCollection, rightColumnCollection, dragValue) {\n if (leftColumnCollection.length > 0) {\n var flag = false;\n for (var i = 0; i < leftColumnCollection.length; i++) {\n var cell = leftColumnCollection[parseInt(i.toString(), 10)];\n this.increaseOrDecreaseWidth(cell, dragValue, true);\n if (cell.cellIndex === cell.ownerRow.childWidgets.length - 1) {\n flag = true;\n }\n }\n if (flag) {\n this.updateRowsGridAfterWidth(table);\n }\n }\n if (rightColumnCollection.length > 0) {\n var diff = 0;\n for (var i = 0; i < rightColumnCollection.length; i++) {\n var cell = rightColumnCollection[parseInt(i.toString(), 10)];\n if (cell.cellIndex === 0) {\n var newGridBefore = cell.ownerRow.rowFormat.beforeWidth + dragValue;\n if (newGridBefore >= 0) {\n this.updateGridBefore(cell.ownerRow, dragValue);\n }\n else {\n if (diff !== newGridBefore) {\n diff = newGridBefore;\n }\n cell.ownerRow.rowFormat.gridBeforeWidth = 0;\n cell.ownerRow.rowFormat.gridBeforeWidthType = 'Auto';\n }\n }\n this.increaseOrDecreaseWidth(cell, dragValue, false);\n }\n if (diff !== 0) {\n var newIndent = table.leftIndent + diff;\n table.tableFormat.leftIndent = newIndent >= -1440 ? (newIndent <= 1440 ? newIndent : 1440) : -1440;\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[parseInt(j.toString(), 10)];\n if (rightColumnCollection.indexOf(row.childWidgets[0]) === -1) {\n this.updateGridBefore(row, diff > 0 ? diff : -diff);\n }\n }\n }\n }\n };\n TableResizer.prototype.updateRowsGridAfterWidth = function (table) {\n var maxRowWidth = this.getMaxRowWidth(table, true);\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[parseInt(i.toString(), 10)];\n var currentRowWidth = this.getRowWidth(row, true);\n if (maxRowWidth >= currentRowWidth && row.rowFormat.afterWidth !== maxRowWidth - currentRowWidth) {\n var value = maxRowWidth - currentRowWidth;\n row.rowFormat.gridAfterWidth = value;\n row.rowFormat.afterWidth = value;\n }\n }\n };\n TableResizer.prototype.getRowWidth = function (row, toUpdateGridAfter) {\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[parseInt(i.toString(), 10)];\n rowWidth += cell.cellFormat.cellWidth;\n }\n return rowWidth;\n };\n TableResizer.prototype.getMaxRowWidth = function (table, toUpdateGridAfter) {\n var width = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[parseInt(i.toString(), 10)];\n var rowWidth = 0;\n if (toUpdateGridAfter) {\n rowWidth = rowWidth + row.rowFormat.beforeWidth;\n }\n for (var i_1 = 0; i_1 < row.childWidgets.length; i_1++) {\n var cell = row.childWidgets[parseInt(i_1.toString(), 10)];\n rowWidth += cell.cellFormat.cellWidth;\n }\n if (width < rowWidth) {\n width = rowWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.isColumnSelected = function (table, columnIndex) {\n var selection = this.owner.selectionModule;\n var selectedCells = selection.getSelectedCells();\n var leftColumnCells = this.getColumnCells(table, columnIndex, true);\n var rightColumnCells = this.getColumnCells(table, columnIndex, false);\n var isColumnSelected = false;\n for (var i = 0; i < leftColumnCells.length; i++) {\n var columnCell = leftColumnCells[parseInt(i.toString(), 10)];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n if (!isColumnSelected) {\n for (var i = 0; i < rightColumnCells.length; i++) {\n var columnCell = rightColumnCells[parseInt(i.toString(), 10)];\n isColumnSelected = selectedCells.indexOf(columnCell) !== -1 ? true : false;\n }\n }\n return isColumnSelected;\n };\n TableResizer.prototype.applyProperties = function (table, tableHistoryInfo) {\n if (isNullOrUndefined(tableHistoryInfo)) {\n return;\n }\n // PreserveGrid = true;\n if (tableHistoryInfo.tableHolder) {\n table.tableHolder = tableHistoryInfo.tableHolder.clone();\n }\n if (tableHistoryInfo.tableFormat !== null) {\n table.tableFormat.leftIndent = tableHistoryInfo.tableFormat.leftIndent;\n table.tableFormat.preferredWidth = tableHistoryInfo.tableFormat.preferredWidth;\n table.tableFormat.preferredWidthType = tableHistoryInfo.tableFormat.preferredWidthType;\n table.tableFormat.allowAutoFit = tableHistoryInfo.tableFormat.allowAutoFit;\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[parseInt(i.toString(), 10)];\n var rowFormat = tableHistoryInfo.rows[parseInt(i.toString(), 10)];\n row.rowFormat.gridBefore = rowFormat.gridBefore;\n row.rowFormat.gridBeforeWidth = rowFormat.gridBeforeWidth;\n row.rowFormat.gridBeforeWidthType = rowFormat.gridBeforeWidthType;\n row.rowFormat.gridAfter = rowFormat.gridAfter;\n row.rowFormat.gridAfterWidth = rowFormat.gridAfterWidth;\n row.rowFormat.gridAfterWidthType = rowFormat.gridAfterWidthType;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[parseInt(j.toString(), 10)];\n var cellFormat = rowFormat.cells[parseInt(j.toString(), 10)];\n cell.columnIndex = cellFormat.columnIndex;\n cell.cellFormat.columnSpan = cellFormat.columnSpan;\n cell.cellFormat.preferredWidth = cellFormat.preferredWidth;\n cell.cellFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n }\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n //Sets the width to cells\n table.setWidthToCells(tableWidth, table.tableFormat.preferredWidthType === 'Auto');\n // PreserveGrid = false;\n };\n TableResizer.prototype.getActualWidth = function (row) {\n var width = 0;\n if (row.childWidgets.length > 0) {\n for (var i = 0; i < row.childWidgets.length; i++) {\n width += row.childWidgets[parseInt(i.toString(), 10)].cellFormat.cellWidth;\n }\n }\n return width;\n };\n TableResizer.prototype.setPreferredWidth = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rw = table.childWidgets[parseInt(i.toString(), 10)];\n var rowFormat = rw.rowFormat;\n if (rowFormat.gridBefore > 0) {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n rowFormat.gridBeforeWidthType = 'Point';\n }\n for (var j = 0; j < rw.childWidgets.length; j++) {\n var cell = rw.childWidgets[parseInt(j.toString(), 10)];\n cell.cellFormat.preferredWidth = cell.cellFormat.cellWidth;\n cell.cellFormat.preferredWidthType = 'Point';\n }\n if (rowFormat.gridAfter > 0) {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n rowFormat.gridAfterWidthType = 'Point';\n }\n }\n };\n TableResizer.prototype.updateCellPreferredWidths = function (table) {\n var tableWidth = table.tableHolder.tableWidth;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[parseInt(i.toString(), 10)];\n if (row.rowFormat.gridBefore > 0) {\n var width = table.tableHolder.getCellWidth(0, row.rowFormat.gridBefore, tableWidth);\n this.updateGridBeforeWidth(width, row);\n }\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[parseInt(j.toString(), 10)];\n cell.updateWidth(table.tableHolder.getCellWidth(cell.columnIndex, cell.cellFormat.columnSpan, tableWidth));\n }\n if (row.rowFormat.gridAfter > 0) {\n /* eslint-disable-next-line max-len */\n this.updateGridAfterWidth(table.tableHolder.getCellWidth(row.childWidgets.length, row.rowFormat.gridAfter, tableWidth), row);\n }\n }\n };\n TableResizer.prototype.updateGridBeforeWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.beforeWidth) {\n rowFormat.beforeWidth = width;\n if (rowFormat.gridBeforeWidthType === 'Auto') {\n rowFormat.gridBeforeWidthType = 'Point';\n }\n if (rowFormat.gridBeforeWidthType === 'Point') {\n rowFormat.gridBeforeWidth = rowFormat.beforeWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method.\n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.beforeWidth, ownerWidth);\n rowFormat.gridBeforeWidth = value;\n }\n }\n };\n TableResizer.prototype.updateGridAfterWidth = function (width, row) {\n var rowFormat = row.rowFormat;\n if (width !== rowFormat.afterWidth) {\n rowFormat.afterWidth = width;\n }\n if (rowFormat.gridAfterWidthType === 'Auto') {\n rowFormat.gridAfterWidthType = 'Point';\n }\n if (rowFormat.gridAfterWidthType === 'Point') {\n rowFormat.gridAfterWidth = rowFormat.afterWidth;\n }\n else {\n // The value is calculated from the pixel values hence, its converted to percent using method.\n var ownerWidth = row.ownerTable.getTableClientWidth(row.ownerTable.getOwnerWidth(true));\n var value = row.ownerTable.convertPointToPercent(rowFormat.afterWidth, ownerWidth);\n rowFormat.gridAfterWidth = value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TableResizer.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return TableResizer;\n}());\nexport { TableResizer };\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { TextPosition, ImageSizeInfo } from '../selection/selection-helper';\nimport { ParagraphWidget, LineWidget, ElementBox, TextElementBox, Margin, ImageElementBox, BlockWidget, BlockContainer, BodyWidget, TableWidget, TableCellWidget, TableRowWidget, Widget, ListTextElementBox, BookmarkElementBox, HeaderFooterWidget, FieldTextElementBox, TabElementBox, EditRangeStartElementBox, EditRangeEndElementBox, CommentElementBox, CommentCharacterElementBox, CheckBoxFormField, DropDownFormField, TextFormField, ShapeElementBox, TextFrame, ContentControl, FootnoteElementBox, FootNoteWidget, ShapeBase, FootnoteEndnoteMarkerElementBox, ContentControlProperties, CheckBoxState, ContentControlListItems } from '../viewer/page';\nimport { WCharacterFormat } from '../format/character-format';\nimport { HelperMethods, Base64 } from './editor-helper';\nimport { isNullOrUndefined, Browser, classList, L10n } from '@syncfusion/ej2-base';\nimport { WParagraphFormat, WSectionFormat, WListFormat, WTableFormat, WRowFormat, WCellFormat, WBorder, WBorders, WTabStop } from '../index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { WLevelOverride } from '../list/level-override';\nimport { FieldElementBox } from '../viewer/page';\nimport { protectionTypeChangeEvent, imagesProperty, abstractListIdProperty, Comment } from '../../base/index';\nimport { SelectionCharacterFormat } from '../index';\nimport { PageLayoutViewer } from '../index';\nimport { WCharacterStyle, WStyles } from '../format/style';\nimport { HistoryInfo } from '../editor-history/index';\nimport { TableResizer } from './table-resizer';\nimport { Dictionary } from '../../base/dictionary';\nimport { WParagraphStyle } from '../format/style';\nimport { CONTROL_CHARACTERS } from '../../base/types';\nimport { showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { Revision } from '../track-changes/track-changes';\nimport { XmlHttpRequestHandler } from '../../base/ajax-helper';\nimport { beforeCommentActionEvent, trackChangeEvent, beforeXmlHttpRequestSend, internalStyleCollectionChange } from '../../base/index';\nimport { SectionBreakType } from '../../base/types';\nimport { sectionsProperty, commentsProperty, bidiProperty, revisionsProperty, lastParagraphMarkCopiedProperty, sectionFormatProperty, revisionIdProperty, contextualSpacingProperty, keepWithNextProperty, keepLinesTogetherProperty, widowControlProperty, outlineLevelProperty, numberFormatProperty, startAtProperty, paragraphFormatProperty, listsProperty, abstractListsProperty, listIdProperty, listLevelNumberProperty, leftIndentProperty, rightIndentProperty, firstLineIndentProperty, textAlignmentProperty, afterSpacingProperty, beforeSpacingProperty, lineSpacingProperty, lineSpacingTypeProperty, listFormatProperty, cellsProperty, rowsProperty, blocksProperty, listLevelPatternProperty, levelsProperty, stylesProperty, nameProperty } from '../../index';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { ChangesSingleView } from '../track-changes/track-changes-pane';\n/**\n * Editor module\n */\nvar Editor = /** @class */ (function () {\n /**\n * Initialize the editor module\n *\n * @param {DocumentHelper} documentHelper - Document helper\n * @private\n */\n function Editor(documentHelper) {\n var _this = this;\n this.nodes = [];\n this.editHyperlinkInternal = false;\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n this.formFieldCounter = 1;\n this.skipFieldDeleteTracking = false;\n this.skipFootNoteDeleteTracking = false;\n this.isForHyperlinkFormat = false;\n this.isTrackingFormField = false;\n this.isInsertText = false;\n this.keywordIndex = 0;\n this.casingIndex = -1;\n this.checkLastLetterSpace = '';\n this.checkLastLetterSpaceDot = '';\n this.pasteFootNoteType = '';\n /**\n * @private\n */\n this.isFootnoteElementRemoved = false;\n /**\n * @private\n */\n this.isEndnoteElementRemoved = false;\n /**\n * @private\n */\n this.handledEnter = false;\n /**\n * @private\n */\n this.removeEditRange = false;\n /**\n * @private\n */\n this.isRemoveRevision = false;\n /**\n * @private\n */\n this.isFootNoteInsert = false;\n /**\n * @private\n */\n this.isTableInsert = false;\n /**\n * @private\n */\n this.isFootNote = false;\n /**\n * @private\n */\n this.isHandledComplex = false;\n /**\n * @private\n */\n this.isUserInsert = false;\n /**\n * @private\n */\n this.tableResize = undefined;\n /**\n * @private\n */\n this.tocStyles = {};\n /**\n * @private\n */\n this.triggerPageSpellCheck = true;\n /**\n * @private\n */\n this.chartType = false;\n /**\n * @private\n */\n this.removedBookmarkElements = [];\n /**\n * @private\n */\n this.removedEditRangeStartElements = [];\n /**\n * @private\n */\n this.removedEditRangeEndElements = [];\n /**\n * @private\n */\n this.tocBookmarkId = 0;\n /**\n * @private\n */\n this.copiedData = undefined;\n /**\n * @private\n */\n this.isPasteContentCheck = false;\n this.pageRefFields = {};\n this.delBlockContinue = false;\n this.delBlock = undefined;\n this.delSection = undefined;\n /**\n * @private\n */\n this.isInsertingTOC = false;\n /**\n * @private\n */\n this.isMeasureParaWidth = false;\n this.editStartRangeCollection = [];\n this.skipReplace = false;\n this.skipTableElements = false;\n this.editRangeID = [];\n /**\n * @private\n */\n this.isImageInsert = false;\n /**\n * @private\n */\n this.isSkipOperationsBuild = false;\n /**\n * @private\n */\n this.isCellFormatApplied = false;\n /**\n * @private\n */\n this.revisionData = undefined;\n /**\n * @private\n */\n this.splittedRevisions = [];\n /**\n * @private\n */\n this.isSkipComments = false;\n /**\n * @private\n */\n this.isRemoteAction = false;\n /**\n * @private\n */\n this.isIncrementalSave = false;\n /**\n * @private\n */\n this.listNumberFormat = '';\n /**\n * @private\n */\n this.listLevelNumber = 0;\n /**\n * @private\n */\n this.isXmlMapped = false;\n this.isAutoList = false;\n this.isLastParaMarkCopied = false;\n this.combineLastBlock = false;\n /**\n * @private\n */\n this.remotePasteRevision = [];\n /**\n * @private\n */\n this.isFieldOperation = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n /**\n * @private\n */\n this.copiedContent = '';\n /**\n * @private\n */\n this.copiedTextContent = '';\n /**\n * @private\n */\n this.previousParaFormat = undefined;\n this.previousCharFormat = undefined;\n this.previousSectionFormat = undefined;\n this.pasteTextPosition = undefined;\n //public isSkipHistory: boolean = false;\n /**\n * @private\n */\n this.isPaste = false;\n /**\n * @private\n */\n this.isPasteListUpdated = false;\n /**\n * @private\n */\n this.isHtmlPaste = false;\n /**\n * @private\n */\n this.isInsertField = false;\n /**\n * @private\n */\n this.isBordersAndShadingDialog = false;\n /**\n * @private\n */\n this.pasteImageIndex = undefined;\n /**\n * @private\n * @returns {void}\n */\n this.onTextInputInternal = function () {\n if (Browser.isDevice) {\n var documentHelper = _this.documentHelper;\n var nbsp = new RegExp(String.fromCharCode(160), 'g');\n var lineFeed = new RegExp(String.fromCharCode(10), 'g');\n documentHelper.prefix = documentHelper.prefix.replace(nbsp, ' ').replace(lineFeed, ' ');\n var text = documentHelper.editableDiv.textContent.replace(nbsp, ' ').replace(lineFeed, ' ');\n var textBoxText = text.substring(2);\n if (documentHelper.isCompositionStart && documentHelper.isCompositionUpdated) {\n documentHelper.isCompositionUpdated = false;\n if (!documentHelper.owner.isReadOnlyMode && documentHelper.owner.isDocumentLoaded && _this.canEditContentControl) {\n if (documentHelper.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty) {\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionForLineWidget(documentHelper.selection.start.currentWidget, _this.selection.start.offset - (documentHelper.prefix.length - 2));\n _this.handleTextInput(textBoxText);\n documentHelper.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n else {\n _this.handleTextInput(textBoxText);\n documentHelper.prefix = '@' + String.fromCharCode(160) + textBoxText;\n }\n }\n }\n return;\n }\n else if (documentHelper.isCompositionStart && documentHelper.isCompositionEnd && documentHelper.suffix === '') {\n if (documentHelper.prefix.substring(2) !== textBoxText) {\n if (_this.selection.isEmpty && documentHelper.isCompositionStart) {\n documentHelper.isCompositionStart = false;\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionForLineWidget(documentHelper.selection.start.currentWidget, _this.selection.start.offset - documentHelper.prefix.substring(2).length);\n _this.selection.retrieveCurrentFormatProperties();\n if (documentHelper.suffix === '' || textBoxText === '') {\n _this.handleTextInput(textBoxText);\n }\n }\n else if (!_this.selection.isEmpty) {\n documentHelper.isCompositionStart = false;\n _this.handleTextInput(textBoxText);\n }\n }\n else if (textBoxText === '') {\n documentHelper.isCompositionStart = false;\n _this.handleBackKey();\n }\n else if (documentHelper.prefix.substring(2) === textBoxText && documentHelper.suffix === '') {\n documentHelper.isCompositionStart = false;\n _this.handleTextInput(' ');\n }\n documentHelper.isCompositionEnd = false;\n return;\n }\n else if (documentHelper.isCompositionEnd || documentHelper.isCompositionStart && !documentHelper.isCompositionUpdated) {\n if (textBoxText.length < documentHelper.prefix.length &&\n /* eslint-disable-next-line max-len */\n textBoxText === documentHelper.prefix.substring(2, documentHelper.prefix.length - 1) || documentHelper.editableDiv.innerText.length < 2) {\n _this.handleBackKey();\n return;\n }\n else if (documentHelper.suffix !== '' &&\n documentHelper.editableDiv.innerText[documentHelper.editableDiv.innerText.length - 1] !== String.fromCharCode(160)) {\n documentHelper.isCompositionStart = false;\n //When cursor is placed in between a word and chosen a word from predicted words.\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionForLineWidget(documentHelper.selection.start.currentWidget, _this.selection.start.offset - (documentHelper.prefix.length - 2));\n /* eslint-disable-next-line max-len */\n _this.selection.end.setPositionForLineWidget(documentHelper.selection.end.currentWidget, _this.selection.end.offset + documentHelper.suffix.length);\n //Retrieve the character format properties. Since the selection was changed manually.\n _this.selection.retrieveCurrentFormatProperties();\n _this.handleTextInput(textBoxText);\n return;\n }\n }\n if (text !== '\\r' && text !== '\\b' && text !== String.fromCharCode(27) && !documentHelper.owner.isReadOnlyMode && documentHelper.isControlPressed === false && _this.canEditContentControl) {\n if (text === '@' || text[0] !== '@' || text === '' || text.length < documentHelper.prefix.length &&\n textBoxText === documentHelper.prefix.substring(2, documentHelper.prefix.length - 1)) {\n _this.handleBackKey();\n if (documentHelper.editableDiv.innerText.length < 2) {\n _this.predictText();\n }\n }\n else if (text.indexOf(documentHelper.prefix) === 0 && text.length > documentHelper.prefix.length) {\n _this.handleTextInput(text.substring(documentHelper.prefix.length));\n }\n else if (text.indexOf(documentHelper.prefix) === -1 && text[text.length - 1] !== String.fromCharCode(160)\n && text[text.length - 1] !== ' ') {\n if ((textBoxText.charAt(0).toLowerCase() + textBoxText.slice(1)) === documentHelper.prefix.substring(2)) {\n /* eslint-disable-next-line max-len */\n _this.selection.start.setPositionParagraph(documentHelper.selection.start.currentWidget, _this.selection.start.offset - (documentHelper.prefix.length - 2));\n }\n _this.handleTextInput(textBoxText);\n }\n else if (text.length !== 2) {\n _this.handleTextInput(' ');\n }\n }\n }\n else {\n var text = _this.documentHelper.editableDiv.innerText;\n if (text !== String.fromCharCode(160)) {\n if (text !== '\\r' && text !== '\\b' && text !== String.fromCharCode(27) && !_this.owner.isReadOnlyMode && _this.documentHelper.isControlPressed === false && _this.canEditContentControl) {\n _this.handleTextInput(text);\n }\n }\n else {\n _this.handleTextInput(' ');\n }\n _this.documentHelper.editableDiv.innerText = '';\n }\n };\n /**\n * Fired on paste.\n *\n * @param {ClipboardEvent} event - Specfies clipboard event\n * @private\n * @returns {void}\n */\n this.onPaste = function (event) {\n if (!_this.owner.isReadOnlyMode && _this.canEditContentControl) {\n _this.pasteInternal(event);\n }\n event.preventDefault();\n };\n this.documentHelper = documentHelper;\n if (!isNullOrUndefined(this.documentHelper)) {\n this.tableResize = new TableResizer(this.documentHelper.owner);\n }\n this.base64 = new Base64();\n }\n Object.defineProperty(Editor.prototype, \"restrictFormatting\", {\n /**\n * @private\n * @returns {boolean} - Returns the restrict formatting\n */\n get: function () {\n return this.documentHelper.isDocumentProtected && (this.documentHelper.restrictFormatting\n || (!this.documentHelper.restrictFormatting && !this.selection.isSelectionInEditRegion()))\n && this.documentHelper.protectionType !== 'RevisionsOnly';\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"restrictEditing\", {\n /**\n * @private\n * @returns {boolean} - Returns the restrict editing\n */\n get: function () {\n return this.documentHelper.isDocumentProtected && ((this.documentHelper.protectionType === 'ReadOnly' || this.documentHelper.isCommentOnlyMode)\n && !this.selection.isSelectionInEditRegion() || this.documentHelper.protectionType === 'FormFieldsOnly');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"canEditContentControl\", {\n /**\n * @private\n * @returns {boolean} - Returns the can edit content control.\n */\n get: function () {\n var currentContentControl = this.getContentControl();\n if (!isNullOrUndefined(currentContentControl)) {\n if (currentContentControl.contentControlProperties.lockContents || currentContentControl.contentControlProperties.type === 'DropDownList') {\n return false;\n }\n }\n else if (this.selection.checkContentControlLocked()) {\n return false;\n }\n if (this.owner.isReadOnly) {\n return false;\n }\n return true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"viewer\", {\n get: function () {\n if (!isNullOrUndefined(this.owner)) {\n return this.owner.viewer;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"editorHistory\", {\n get: function () {\n return this.documentHelper.owner.editorHistoryModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"selection\", {\n get: function () {\n if (this.documentHelper) {\n return this.documentHelper.selection;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Editor.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner;\n },\n enumerable: true,\n configurable: true\n });\n Editor.prototype.getModuleName = function () {\n return 'Editor';\n };\n /**\n * Sets the field information for the selected field.\n *\n * @param { FieldInfo } fieldInfo – Specifies the field information.\n * @returns {void}\n * > Nested field gets replaced completely with the specified field information.\n */\n Editor.prototype.setFieldInfo = function (fieldInfo) {\n var field = this.selection.getHyperlinkField(true);\n if (!isNullOrUndefined(field)) {\n this.selection.selectField();\n this.insertField(fieldInfo.code, fieldInfo.result);\n }\n };\n /**\n * Inserts the specified field at cursor position.\n *\n * @param {string} code Specify the field code.\n * @param {string} result Specify the field result.\n * @returns {void}\n */\n Editor.prototype.insertField = function (code, result) {\n this.isInsertField = true;\n var fieldCode = code;\n fieldCode = HelperMethods.trimStart(fieldCode);\n if (fieldCode.substring(0, 8) === 'NUMPAGES') {\n this.insertPageCount(result);\n }\n else if (fieldCode.substring(0, 4) === 'PAGE') {\n this.insertPageNumber(result);\n }\n else {\n if (isNullOrUndefined(result)) {\n if (fieldCode.substring(0, 10) === 'MERGEFIELD') {\n fieldCode = fieldCode.substring(10).trim();\n var index = fieldCode.indexOf('\\\\*');\n result = '«' + fieldCode.substring(0, index).trim() + '»';\n }\n }\n var paragraph = new ParagraphWidget();\n var insertFormat = new WCharacterFormat();\n var selectionFormat = this.copyInsertFormat(insertFormat, false);\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.characterFormat.mergeFormat(selectionFormat);\n line.children.push(fieldBegin);\n var fieldCodeSpan = new TextElementBox();\n fieldCodeSpan.characterFormat.mergeFormat(selectionFormat);\n fieldCodeSpan.text = code;\n line.children.push(fieldCodeSpan);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.characterFormat.mergeFormat(selectionFormat);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n var fieldResultSpan = new TextElementBox();\n fieldResultSpan.text = result;\n fieldResultSpan.characterFormat.mergeFormat(selectionFormat);\n line.children.push(fieldResultSpan);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.mergeFormat(selectionFormat);\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldEnd.fieldBegin = fieldBegin;\n fieldBegin.fieldEnd = fieldEnd;\n fieldSeparator.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n this.documentHelper.fields.push(fieldBegin);\n var section = new BodyWidget();\n section.sectionFormat = new WSectionFormat(section);\n section.childWidgets.push(paragraph);\n this.pasteContentsInternal([section], false);\n }\n this.isInsertField = false;\n };\n /**\n * @private\n */\n Editor.prototype.isLinkedStyle = function (styleName) {\n var styleObj = this.documentHelper.styles.findByName(styleName);\n return !isNullOrUndefined(styleObj.link);\n };\n /**\n * Applies the specified style for paragraph.\n *\n * @param {string} style Specify the style name to apply.\n * @param {boolean} clearDirectFormatting - Removes manual formatting (formatting not applied using a style)\n * from the selected text, to match the formatting of the applied style. Default value is false.\n * @returns {void}\n */\n Editor.prototype.applyStyle = function (style, clearDirectFormatting) {\n clearDirectFormatting = isNullOrUndefined(clearDirectFormatting) ? false : clearDirectFormatting;\n var startPosition = undefined;\n var endPosition = undefined;\n var styleObj = this.documentHelper.styles.findByName(style);\n if (clearDirectFormatting) {\n this.initComplexHistory('ApplyStyle');\n this.setOffsetValue(this.selection);\n startPosition = this.startOffset;\n endPosition = this.endOffset;\n var isSelectionEmpty = this.selection.isEmpty;\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n if (!isNullOrUndefined(styleObj) && (styleObj instanceof WCharacterStyle && styleObj.type === 'Character')) {\n this.clearFormattingInternal(false);\n }\n else {\n this.clearFormattingInternal(true);\n }\n this.isSkipOperationsBuild = false;\n if (isSelectionEmpty && !this.selection.isEmpty) {\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n if (styleObj !== undefined) {\n if (styleObj instanceof WCharacterStyle && styleObj.type === 'Character') {\n if (this.selection.isEmpty) {\n var offset = this.selection.start.offset;\n var preservedStartPosition = this.selection.start.clone();\n var preservedEndPosition = this.selection.end.clone();\n this.selection.selectCurrentWord();\n if (offset === this.selection.start.offset || offset === this.selection.end.offset - 1) {\n this.selection.start = preservedStartPosition;\n this.selection.end = preservedEndPosition;\n this.selection.characterFormat.copyFormat(styleObj.characterFormat);\n }\n else {\n this.onApplyCharacterFormat('styleName', styleObj, false, true);\n }\n }\n else {\n this.onApplyCharacterFormat('styleName', styleObj, false, true);\n }\n }\n else {\n this.onApplyParagraphFormat('styleName', styleObj, false, true);\n }\n }\n else {\n /* eslint-disable-next-line max-len */\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.documentHelper.preDefinedStyles.get(style)), this.documentHelper.styles);\n this.applyStyle(style);\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action === 'ApplyStyle') {\n this.startOffset = startPosition;\n this.endOffset = endPosition;\n this.editorHistory.updateComplexHistory();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n };\n // Public Implementation Starts\n /**\n * Moves the selected content in the document editor control to clipboard.\n *\n * @returns {void}\n */\n Editor.prototype.cut = function () {\n if (this.owner.isReadOnlyMode || this.selection.isEmpty || !this.canEditContentControl) {\n return;\n }\n this.selection.copySelectedContent(true);\n this.documentHelper.owner.parser.isCutPerformed = true;\n };\n /**\n * Inserts the editing region in the current selection range for the specified user.\n *\n * @param {string} user Specifies the native rendering\n * @returns {void}\n */\n Editor.prototype.insertEditingRegion = function (user) {\n this.insertEditRangeElement(user && user !== '' ? user : 'Everyone');\n };\n Editor.prototype.enforceProtection = function (credential, restrictFormatType, isReadOnly) {\n var typeOfProtection;\n var limitToFormatting;\n if (typeof (restrictFormatType) === 'boolean') {\n typeOfProtection = isReadOnly ? 'ReadOnly' : this.documentHelper.protectionType;\n limitToFormatting = restrictFormatType;\n }\n else {\n typeOfProtection = restrictFormatType;\n }\n if (!isNullOrUndefined(limitToFormatting)) {\n this.documentHelper.restrictFormatting = limitToFormatting;\n }\n this.documentHelper.protectionType = typeOfProtection;\n this.selection.isHighlightEditRegion = true;\n this.addProtection(credential, this.documentHelper.protectionType, false);\n };\n Editor.prototype.enforceProtectionAsync = function (credential, restrictFormatType, isReadOnly) {\n return __awaiter(this, void 0, void 0, function () {\n var typeOfProtection, limitToFormatting;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (typeof (restrictFormatType) === 'boolean') {\n typeOfProtection = isReadOnly ? 'ReadOnly' : this.documentHelper.protectionType;\n limitToFormatting = restrictFormatType;\n }\n else {\n limitToFormatting = true;\n typeOfProtection = restrictFormatType;\n }\n this.documentHelper.restrictFormatting = limitToFormatting;\n this.documentHelper.protectionType = typeOfProtection;\n this.selection.isHighlightEditRegion = true;\n return [4 /*yield*/, this.addProtection(credential, this.documentHelper.protectionType, true)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n Editor.prototype.getCommentHierarchicalIndex = function (comment) {\n var index = '';\n while (comment.ownerComment) {\n if (!isNullOrUndefined(comment.ownerComment)) {\n index = comment.ownerComment.replyComments.indexOf(comment) + ';' + index;\n comment = comment.ownerComment;\n }\n else {\n index = comment.replyComments.indexOf(comment) + ';' + index;\n comment = comment;\n }\n }\n index = 'C;' + this.documentHelper.comments.indexOf(comment) + ';' + index;\n return index;\n };\n Editor.prototype.alertBox = function () {\n var localObj = new L10n('documenteditor', this.owner.defaultLocale);\n localObj.setLocale(this.owner.locale);\n DialogUtility.alert({\n title: localObj.getConstant('Information'),\n content: localObj.getConstant('Multiple Comment')\n });\n };\n /**\n * Inserts the comment.\n *\n * @param {string} text Specify the comment text to be inserted.\n * @param {CommentProperties} commentProperties The properties of the comment (author, isResolved, dateTime).\n * @returns {Comment}\n */\n Editor.prototype.insertComment = function (text, commentProperties) {\n if (isNullOrUndefined(this.selection.start) || (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) || this.viewer.owner.enableHeaderAndFooter\n || !this.viewer.owner.enableComment) {\n return;\n }\n if (this.viewer.owner.commentReviewPane.commentPane.isEditMode) {\n return this.alertBox();\n }\n if (isNullOrUndefined(text)) {\n text = '';\n }\n var markerData = {};\n if (!isNullOrUndefined(commentProperties)) {\n var authorInternal = isNullOrUndefined(commentProperties.author) ? this.owner.currentUser : commentProperties.author;\n markerData = {\n author: authorInternal,\n initial: this.constructCommentInitial(authorInternal),\n text: SanitizeHtmlHelper.sanitize(text),\n commentId: Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15),\n done: commentProperties.isResolved ? commentProperties.isResolved : false,\n date: commentProperties.dateTime ? commentProperties.dateTime.toUTCString() : HelperMethods.getUtcDate()\n };\n }\n else {\n markerData = {\n author: this.owner.currentUser ? this.owner.currentUser : 'Guest user',\n initial: this.constructCommentInitial(this.owner.currentUser ? this.owner.currentUser : 'Guest user'),\n text: SanitizeHtmlHelper.sanitize(text),\n commentId: Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15),\n done: false,\n date: HelperMethods.getUtcDate(),\n };\n }\n this.insertCommentInternal(text, markerData);\n var commentInfo = {\n author: markerData.author,\n isResolved: markerData.done,\n dateTime: new Date(markerData.date),\n };\n var newComment = new Comment(markerData.commentId, commentInfo);\n return newComment;\n };\n Editor.prototype.insertCommentInternal = function (text, markerData) {\n this.documentHelper.layout.allowLayout = false;\n if (this.selection.isEmpty) {\n // If selection is at paragraph end, move selection to previous word similar to MS Word\n if (this.selection.start.isAtSamePosition(this.selection.end) && this.selection.start.isAtParagraphEnd) {\n var startOffset = this.selection.start.offset;\n this.selection.start.offset = startOffset - 1 !== -1 ? startOffset - 1 : startOffset;\n }\n this.selection.selectCurrentWord();\n }\n // If paragraph mark selected, remove paragraph mark selection\n if (this.selection.isParagraphLastLine(this.selection.end.currentWidget)\n && this.selection.end.offset === this.selection.getLineLength(this.selection.end.currentWidget) + 1) {\n this.selection.end.offset -= 1;\n }\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n var startIndex = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var endParagraphInfo = this.selection.getParagraphInfo(this.selection.end);\n var endIndex = this.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n this.initComplexHistory('InsertComment');\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n var position = new TextPosition(this.owner);\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n // Clones the end position.\n position.setPositionInternal(endPosition);\n var commentRangeStart = new CommentCharacterElementBox(0);\n var commentRangeEnd = new CommentCharacterElementBox(1);\n var isSameLine = startPosition.currentWidget === endPosition.currentWidget;\n // Adds comment start at selection start position.\n endPosition.setPositionInternal(startPosition);\n var lineIndex = position.currentWidget.indexInOwner;\n var paragraph = position.currentWidget.paragraph;\n this.initInsertInline(commentRangeStart);\n if (isNullOrUndefined(position.paragraph) || position.currentWidget.indexInOwner === -1) {\n var endPos = this.selection.getTextPosBasedOnLogicalIndex(endIndex);\n position.setPositionInternal(endPos);\n }\n // Updates the cloned position, since comment start is added in the same line.\n if (isSameLine) {\n position.setPositionParagraph(position.currentWidget, position.offset + commentRangeStart.length);\n }\n // Adds comment end and comment at selection end position.\n startPosition.setPositionInternal(position);\n endPosition.setPositionInternal(position);\n this.initInsertInline(commentRangeEnd);\n var commentAdv = new CommentElementBox(markerData.date);\n if (this.owner.editorHistoryModule) {\n this.initHistory('InsertCommentWidget');\n this.owner.editorHistoryModule.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_Start + CONTROL_CHARACTERS.Marker_End;\n this.owner.editorHistoryModule.currentBaseHistoryInfo.removedNodes.push(commentAdv);\n }\n this.updateCommentElement(commentAdv, commentRangeStart, commentRangeEnd, markerData);\n this.addCommentWidget(commentAdv, true, true, true);\n if (this.owner.isSpellCheck && commentRangeStart.previousElement && commentRangeStart.previousElement instanceof TextElementBox) {\n commentRangeStart.previousElement.ischangeDetected = true;\n }\n if (this.owner.isSpellCheck && commentRangeEnd.previousElement && commentRangeEnd.previousElement instanceof TextElementBox && commentRangeStart.line !== commentRangeEnd.line) {\n commentRangeEnd.previousElement.ischangeDetected = true;\n }\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = this.getCommentHierarchicalIndex(commentAdv);\n this.editorHistory.updateHistory();\n }\n // this.selection.selectPosition(this.selection.getTextPosBasedOnLogicalIndex(startIndex), this.selection.getTextPosBasedOnLogicalIndex(endIndex));\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.reLayout(this.selection, false);\n this.documentHelper.layout.allowLayout = true;\n if (!this.isUserInsert) {\n var comment = this.owner.commentReviewPane.commentPane.comments.get(commentAdv);\n comment.postComment();\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateCommentElement = function (commentAdv, commentRangeStart, commentRangeEnd, markerData) {\n commentAdv.author = markerData.author;\n commentAdv.initial = markerData.initial;\n commentAdv.text = markerData.text;\n commentAdv.commentId = markerData.commentId;\n if (!isNullOrUndefined(markerData.done)) {\n commentAdv.isResolved = markerData.done;\n }\n if (!isNullOrUndefined(markerData.isReply)) {\n commentAdv.isReply = markerData.isReply;\n }\n if (!isNullOrUndefined(commentRangeStart) && !isNullOrUndefined(commentRangeEnd)) {\n commentRangeStart.comment = commentAdv;\n commentRangeStart.commentId = commentAdv.commentId;\n commentRangeEnd.comment = commentAdv;\n commentRangeEnd.commentId = commentAdv.commentId;\n commentAdv.commentStart = commentRangeStart;\n commentAdv.commentEnd = commentRangeEnd;\n }\n return commentAdv;\n };\n /**\n * Deletes all the comments in the current document.\n *\n * @returns {void}\n */\n Editor.prototype.deleteAllComments = function () {\n if (this.documentHelper.comments.length === 0) {\n return;\n }\n // this.documentHelper.clearSearchHighlight();\n this.initComplexHistory('DeleteAllComments');\n this.owner.isLayoutEnabled = false;\n var historyInfo;\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n historyInfo = this.editorHistory.currentHistoryInfo;\n }\n while (this.documentHelper.comments.length > 0) {\n var comment = this.documentHelper.comments[0];\n this.initComplexHistory('DeleteComment');\n this.deleteCommentInternal(comment);\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n historyInfo.addModifiedAction(this.editorHistory.currentHistoryInfo);\n }\n }\n this.selection.selectContent(this.owner.documentStart, true);\n if (this.editorHistory) {\n this.editorHistory.currentHistoryInfo = historyInfo;\n this.editorHistory.updateComplexHistory();\n }\n };\n /**\n * Deletes the current selected comment.\n *\n * @returns {void}\n */\n Editor.prototype.deleteComment = function () {\n if ((this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) || isNullOrUndefined(this.owner) || isNullOrUndefined(this.owner.viewer)\n || isNullOrUndefined(this.owner.documentHelper.currentSelectedComment) || this.owner.enableHeaderAndFooter\n || !this.viewer.owner.enableComment) {\n return;\n }\n this.deleteCommentInternal(this.owner.documentHelper.currentSelectedComment);\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.deleteCommentInternal = function (comment) {\n this.initComplexHistory('DeleteComment');\n if (comment) {\n if (comment.replyComments.length > 0) {\n for (var i = comment.replyComments.length - 1; i >= 0; i--) {\n this.deleteCommentInternal(comment.replyComments[i]);\n }\n }\n this.deleteCommentWidgetInternal(comment);\n var commentStart = comment.commentStart;\n var commentEnd = comment.commentEnd;\n if (commentEnd.indexInOwner !== -1) {\n this.removeInline(commentEnd);\n }\n if (commentStart.indexInOwner !== -1) {\n this.removeInline(commentStart);\n }\n commentStart.removeCommentMark();\n }\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n };\n Editor.prototype.deleteCommentWidgetInternal = function (comment) {\n if (this.owner.editorHistoryModule) {\n this.initHistory('DeleteCommentWidget');\n this.owner.editorHistoryModule.currentBaseHistoryInfo.insertPosition = this.getCommentHierarchicalIndex(comment);\n this.owner.editorHistoryModule.currentBaseHistoryInfo.removedNodes.push(comment);\n }\n this.deleteCommentWidget(comment);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.deleteCommentWidget = function (comment) {\n var commentIndex = this.documentHelper.comments.indexOf(comment);\n if (commentIndex !== -1) {\n this.documentHelper.comments.splice(commentIndex, 1);\n }\n else if (comment.isReply && comment.ownerComment) {\n commentIndex = comment.ownerComment.replyComments.indexOf(comment);\n comment.ownerComment.replyComments.splice(commentIndex, 1);\n }\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.deleteComment(comment);\n if (this.documentHelper.currentSelectedComment === comment) {\n this.documentHelper.currentSelectedComment = undefined;\n }\n }\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.resolveComment = function (comment) {\n if (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) {\n return;\n }\n var eventArgs = { author: comment.author, cancel: false, type: 'Resolve' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Resolve') {\n return;\n }\n this.initHistory('ResolveComment');\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(comment);\n }\n this.resolveOrReopenComment(comment, true);\n };\n /**\n * @param {CommentElementBox} comment - Specified the comment element box\n * @private\n * @returns {void}\n */\n Editor.prototype.reopenComment = function (comment) {\n if (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) {\n return;\n }\n var eventArgs = { author: comment.author, cancel: false, type: 'Reopen' };\n this.owner.trigger(beforeCommentActionEvent, eventArgs);\n if (eventArgs.cancel && eventArgs.type === 'Reopen') {\n return;\n }\n this.initHistory('ResolveComment');\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(comment);\n }\n this.resolveOrReopenComment(comment, false);\n };\n /**\n * @private\n */\n Editor.prototype.resolveOrReopenComment = function (comment, resolve) {\n comment.isResolved = resolve;\n for (var i = 0; i < comment.replyComments.length; i++) {\n comment.replyComments[i].isResolved = resolve;\n }\n if (this.owner.commentReviewPane) {\n if (resolve) {\n this.owner.commentReviewPane.resolveComment(comment);\n }\n else {\n this.owner.commentReviewPane.reopenComment(comment);\n }\n }\n this.reLayout(this.selection, false, false);\n };\n /**\n * @param {CommentElementBox} parentComment - Specified the parent comment\n * @param {string} text - Specified the text.\n * @private\n * @returns {void}\n */\n Editor.prototype.replyComment = function (parentComment, text, mentions) {\n if (this.owner.isReadOnlyMode && !this.documentHelper.isCommentOnlyMode) {\n return;\n }\n var commentWidget = parentComment;\n if (parentComment) {\n this.initComplexHistory('InsertComment');\n var currentCmtStart = commentWidget.commentStart;\n var currentCmtEnd = commentWidget.commentEnd;\n var replyCmtLength = commentWidget.replyComments.length;\n var offset = currentCmtStart.line.getOffset(currentCmtStart, replyCmtLength + 1);\n var startPosition = new TextPosition(this.documentHelper.owner);\n startPosition.setPositionParagraph(currentCmtStart.line, offset);\n var endOffset = currentCmtEnd.line.getOffset(currentCmtEnd, replyCmtLength + 1);\n var endPosition = new TextPosition(this.documentHelper.owner);\n endPosition.setPositionParagraph(currentCmtEnd.line, endOffset);\n this.selection.start.setPositionInternal(startPosition);\n this.selection.end.setPositionInternal(endPosition);\n startPosition = this.selection.start;\n endPosition = this.selection.end;\n var position = new TextPosition(this.owner);\n // Clones the end position.\n position.setPositionInternal(endPosition);\n var commentRangeStart = new CommentCharacterElementBox(0);\n var commentRangeEnd = new CommentCharacterElementBox(1);\n var isAtSameLine = startPosition.currentWidget === endPosition.currentWidget;\n // Adds comment start at selection start position.\n endPosition.setPositionInternal(startPosition);\n var lineIndex = position.currentWidget.indexInOwner;\n this.initInsertInline(commentRangeStart);\n if (position.currentWidget.indexInOwner === -1) {\n position.currentWidget = position.currentWidget.paragraph.childWidgets[lineIndex];\n }\n // Updates the cloned position, since comment start is added in the same paragraph.\n if (isAtSameLine) {\n position.setPositionParagraph(position.currentWidget, position.offset + commentRangeStart.length);\n }\n // Adds comment end and comment at selection end position.\n startPosition.setPositionInternal(position);\n endPosition.setPositionInternal(position);\n this.initInsertInline(commentRangeEnd);\n var replyComment = new CommentElementBox(HelperMethods.getUtcDate());\n replyComment.author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n replyComment.text = text ? text : '';\n replyComment.mentions = mentions ? mentions : [];\n replyComment.commentId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n replyComment.isReply = true;\n commentWidget.replyComments.push(replyComment);\n replyComment.ownerComment = commentWidget;\n if (this.owner.editorHistoryModule) {\n this.initHistory('InsertCommentWidget');\n this.owner.editorHistoryModule.currentBaseHistoryInfo.removedNodes.push(replyComment);\n this.owner.editorHistoryModule.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_Start + CONTROL_CHARACTERS.Marker_End;\n }\n commentRangeStart.comment = replyComment;\n commentRangeStart.commentId = replyComment.commentId;\n commentRangeEnd.comment = replyComment;\n commentRangeEnd.commentId = replyComment.commentId;\n replyComment.commentStart = commentRangeStart;\n replyComment.commentEnd = commentRangeEnd;\n if (this.owner.commentReviewPane) {\n this.owner.commentReviewPane.addReply(replyComment, false, true);\n }\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = this.getCommentHierarchicalIndex(replyComment);\n this.editorHistory.updateHistory();\n }\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.reLayout(this.selection);\n this.isSkipOperationsBuild = false;\n }\n };\n Editor.prototype.removeInline = function (element) {\n this.selection.start.setPositionParagraph(element.line, element.line.getOffset(element, 0));\n this.selection.end.setPositionParagraph(this.selection.start.currentWidget, this.selection.start.offset + element.length);\n this.initHistory('RemoveInline');\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.updateHistoryPosition(this.selection.start, true);\n }\n this.removeSelectedContents(this.documentHelper.selection);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.fireContentChange();\n };\n /**\n * @param {CommentElementBox} commentWidget - Specifies the comment\n * @param {boolean} isNewComment - Specifies is new comment\n * @param {boolean} showComments - Specifies show comments\n * @param {boolean} selectComment - Specified select comment\n * @private\n * @returns {void}\n */\n Editor.prototype.addCommentWidget = function (commentWidget, isNewComment, showComments, selectComment) {\n if (this.documentHelper.comments.indexOf(commentWidget) === -1) {\n var isInserted = false;\n if (this.documentHelper.comments.length > 0) {\n var currentStart = this.selection.getElementPosition(commentWidget.commentStart).startPosition;\n for (var i = 0; i < this.documentHelper.comments.length; i++) {\n /* eslint-disable-next-line max-len */\n var paraIndex = this.selection.getElementPosition(this.documentHelper.comments[i].commentStart).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.comments.splice(i, 0, commentWidget);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.comments.push(commentWidget);\n }\n if (this.owner.commentReviewPane) {\n this.owner.showComments = showComments;\n this.owner.commentReviewPane.selectedTab = 0;\n this.owner.commentReviewPane.addComment(commentWidget, isNewComment, selectComment);\n this.owner.commentReviewPane.reviewTab.selectedItem = 0;\n if (selectComment) {\n this.owner.selectionModule.selectComment(commentWidget);\n }\n }\n }\n };\n /**\n * @param {CommentElementBox} comment - Specifies comment element box\n * @param {string} hierarchicalIndex - Specifies the hierachical index.\n * @private\n * @returns {void}\n */\n Editor.prototype.addReplyComment = function (comment, hierarchicalIndex) {\n var index = hierarchicalIndex.split(';');\n var ownerComment = this.documentHelper.comments[parseInt(index[1], 10)];\n if (index[2] !== '') {\n ownerComment.replyComments.splice(parseInt(index[2], 10), 0, comment);\n comment.ownerComment = ownerComment;\n }\n if (this.owner.commentReviewPane) {\n this.owner.showComments = true;\n this.owner.commentReviewPane.addReply(comment, false, true);\n this.owner.selectionModule.selectComment(comment);\n }\n };\n /**\n * @param {string} password - Specifies the password\n * @param {string} protectionType - Specifies the protection type\n * @param {boolean} isAsync - specifies whether the send method is synchronous or asynchronous\n * @private\n * @returns {void}\n */\n Editor.prototype.addProtection = function (password, protectionType, isAsync) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n isAsync = isNullOrUndefined(isAsync) ? true : isAsync;\n if (password === '') {\n _this.protectDocument(protectionType);\n resolve();\n }\n else {\n _this.currentProtectionType = protectionType;\n var enforceProtectionHandler = new XmlHttpRequestHandler();\n var passwordBase64 = _this.base64.encodeString(password);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var formObject = {\n passwordBase64: passwordBase64,\n saltBase64: '',\n spinCount: 100000\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var url = _this.owner.serviceUrl + _this.owner.serverActionSettings.restrictEditing;\n enforceProtectionHandler.url = url;\n enforceProtectionHandler.contentType = 'application/json;charset=UTF-8';\n enforceProtectionHandler.onSuccess = function (result) {\n _this.enforceProtectionInternal(result);\n resolve();\n };\n enforceProtectionHandler.onFailure = function (result) {\n _this.protectionFailureHandler(result);\n reject();\n };\n enforceProtectionHandler.onError = function (result) {\n _this.protectionFailureHandler(result);\n reject();\n };\n enforceProtectionHandler.customHeaders = _this.owner.headers;\n var httprequestEventArgs = { serverActionType: 'RestrictEditing', headers: _this.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n _this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n if (_this.documentHelper.dialog.visible) {\n _this.documentHelper.dialog.hide();\n }\n }\n else {\n enforceProtectionHandler.send(formObject, httprequestEventArgs, isAsync);\n }\n }\n })];\n });\n });\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.protectionFailureHandler = function (result) {\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (result.name === 'onError') {\n DialogUtility.alert(localeValue.getConstant('Error in establishing connection with web server'));\n }\n else {\n this.owner.fireServiceFailure(result);\n console.error(result.statusText);\n }\n };\n Editor.prototype.enforceProtectionInternal = function (result) {\n var data = JSON.parse(result.data);\n this.enforceProtectionAssign(data[0], data[1], this.currentProtectionType);\n this.owner.showHideRulers();\n };\n /**\n * @private\n */\n Editor.prototype.enforceProtectionAssign = function (saltValue, hashValue, protectionType) {\n this.documentHelper.saltValue = saltValue;\n this.documentHelper.hashValue = hashValue;\n this.protectDocument(protectionType);\n };\n Editor.prototype.toggleTrackChangesProtection = function (enabled) {\n this.viewer.owner.enableTrackChanges = enabled;\n var eventArgs = { isTrackChangesEnabled: enabled };\n this.owner.trigger(trackChangeEvent, eventArgs);\n };\n /**\n * @private\n */\n Editor.prototype.protectDocument = function (protectionType) {\n this.documentHelper.owner.getSettingData(\"protection\", null, this.documentHelper.hashValue, this.documentHelper.saltValue, protectionType);\n this.protect(protectionType);\n var restrictPane = this.documentHelper.restrictEditingPane.restrictPane;\n if (restrictPane && restrictPane.style.display === 'block') {\n this.documentHelper.restrictEditingPane.showStopProtectionPane(true);\n this.documentHelper.restrictEditingPane.loadPaneValue();\n this.documentHelper.dialog.hide();\n }\n this.owner.notify(protectionTypeChangeEvent, {});\n if (protectionType === 'RevisionsOnly') {\n this.toggleTrackChangesProtection(true);\n }\n this.owner.trackChangesPane.enableDisableButton(false);\n };\n /**\n * Stops the document protection.\n *\n * @param {string} password Specify the password to stop protection.\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.stopProtection = function (password) {\n if (this.documentHelper.isDocumentProtected) {\n if ((!isNullOrUndefined(this.documentHelper.saltValue) && this.documentHelper.saltValue === '')\n && (!isNullOrUndefined(this.documentHelper.hashValue) && this.documentHelper.hashValue === '')\n && (!isNullOrUndefined(password) && password === '')) {\n this.unProtectDocument();\n return;\n }\n var unProtectDocumentHandler = new XmlHttpRequestHandler();\n var passwordBase64 = this.base64.encodeString(password);\n var formObject = {\n passwordBase64: passwordBase64,\n saltBase64: this.documentHelper.saltValue,\n spinCount: 100000\n };\n unProtectDocumentHandler.url = this.owner.serviceUrl + this.owner.serverActionSettings.restrictEditing;\n unProtectDocumentHandler.contentType = 'application/json;charset=UTF-8';\n unProtectDocumentHandler.customHeaders = this.owner.headers;\n unProtectDocumentHandler.onSuccess = this.onUnProtectionSuccess.bind(this);\n unProtectDocumentHandler.onFailure = this.protectionFailureHandler.bind(this);\n unProtectDocumentHandler.onError = this.protectionFailureHandler.bind(this);\n var httprequestEventArgs = { serverActionType: 'RestrictEditing', headers: this.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n if (this.documentHelper.dialog.visible) {\n this.documentHelper.dialog.hide();\n }\n }\n else {\n unProtectDocumentHandler.send(formObject, httprequestEventArgs, false);\n }\n if (!this.owner.enableTrackChanges) {\n this.toggleTrackChangesProtection(false);\n }\n }\n };\n /**\n * Stops the document protection.\n *\n * @param {string} password Specify the password to stop protection.\n * @returns {Promise} Returns a Promise which is resolved when protection is stopped, or rejected if for any reason protection cannot be stopped.\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.stopProtectionAsync = function (password) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n if (_this.documentHelper.isDocumentProtected) {\n if ((!isNullOrUndefined(_this.documentHelper.saltValue) && _this.documentHelper.saltValue === '')\n && (!isNullOrUndefined(_this.documentHelper.hashValue) && _this.documentHelper.hashValue === '')\n && (!isNullOrUndefined(password) && password === '')) {\n _this.unProtectDocument();\n resolve();\n return;\n }\n var unProtectDocumentHandler = new XmlHttpRequestHandler();\n var passwordBase64 = _this.base64.encodeString(password);\n var formObject = {\n passwordBase64: passwordBase64,\n saltBase64: _this.documentHelper.saltValue,\n spinCount: 100000\n };\n unProtectDocumentHandler.url = _this.owner.serviceUrl + _this.owner.serverActionSettings.restrictEditing;\n unProtectDocumentHandler.contentType = 'application/json;charset=UTF-8';\n unProtectDocumentHandler.customHeaders = _this.owner.headers;\n unProtectDocumentHandler.onSuccess = function (result) {\n _this.onUnProtectionSuccess(result);\n resolve();\n };\n unProtectDocumentHandler.onFailure = function (result) {\n _this.protectionFailureHandler(result);\n reject();\n };\n unProtectDocumentHandler.onError = function (result) {\n _this.protectionFailureHandler(result);\n reject();\n };\n var httprequestEventArgs = { serverActionType: 'RestrictEditing', headers: _this.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n _this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n if (_this.documentHelper.dialog.visible) {\n _this.documentHelper.dialog.hide();\n }\n }\n else {\n unProtectDocumentHandler.send(formObject, httprequestEventArgs);\n }\n if (!_this.owner.enableTrackChanges) {\n _this.toggleTrackChangesProtection(false);\n }\n }\n })];\n });\n });\n };\n Editor.prototype.onUnProtectionSuccess = function (result) {\n var encodeString = JSON.parse(result.data);\n this.validateHashValue(encodeString[1]);\n this.owner.showHideRulers();\n };\n /**\n * @private\n */\n Editor.prototype.validateHashValue = function (currentHashValue) {\n this.currentHashValue = currentHashValue;\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n var decodeUserHashValue = this.base64.decodeString(currentHashValue);\n var documentHashValue = this.documentHelper.hashValue;\n var defaultHashValue = this.base64.decodeString(documentHashValue);\n var stopProtection = true;\n if (decodeUserHashValue.length === defaultHashValue.length) {\n for (var i = 0; i < decodeUserHashValue.length; i++) {\n if (decodeUserHashValue[i] !== defaultHashValue[i]) {\n stopProtection = false;\n break;\n }\n }\n }\n else {\n stopProtection = false;\n }\n if (stopProtection) {\n this.unProtectDocument();\n }\n else {\n DialogUtility.alert(localeValue.getConstant('The password is incorrect'));\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.unProtectDocument = function () {\n this.documentHelper.owner.getSettingData('protection', false, this.currentHashValue);\n this.currentHashValue = null;\n var previousProtectionType = this.documentHelper.protectionType;\n this.documentHelper.isDocumentProtected = false;\n this.documentHelper.restrictFormatting = false;\n this.documentHelper.protectionType = 'NoProtection';\n this.documentHelper.saltValue = '';\n this.documentHelper.hashValue = '';\n this.documentHelper.selection.highlightEditRegion();\n var restrictPane = this.documentHelper.restrictEditingPane.restrictPane;\n if (restrictPane && restrictPane.style.display === 'block') {\n this.documentHelper.restrictEditingPane.showStopProtectionPane(false);\n }\n if (previousProtectionType === 'RevisionsOnly' && !this.owner.enableTrackChanges) {\n this.toggleTrackChangesProtection(false);\n }\n this.owner.trackChangesPane.enableDisableButton(true);\n if (!isNullOrUndefined(this.editorHistory)) {\n this.owner.editorHistoryModule.clearHistory();\n }\n this.owner.notify(protectionTypeChangeEvent, {});\n this.documentHelper.dialog.hide();\n this.owner.showHideRulers();\n };\n /**\n * Notify content change event\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.fireContentChange = function () {\n this.owner.documentHelper.render.commentMarkDictionary.clear();\n if (this.selection.isHighlightEditRegion) {\n if (this.owner.enableLockAndEdit) {\n this.owner.collaborativeEditingModule.updateLockRegion();\n }\n else {\n this.selection.onHighlight();\n }\n }\n this.selection.highlightFormFields();\n if (!this.isPaste) {\n this.copiedContent = undefined;\n this.copiedTextContent = '';\n this.previousSectionFormat = undefined;\n this.previousParaFormat = undefined;\n this.previousCharFormat = undefined;\n this.selection.isViewPasteOptions = false;\n if (this.isPasteListUpdated) {\n this.isPasteListUpdated = false;\n }\n this.selection.showHidePasteOptions(undefined, undefined);\n }\n if (!isNullOrUndefined(this.owner.optionsPaneModule) && this.owner.optionsPaneModule.isOptionsPaneShow\n && !this.owner.optionsPaneModule.isUpdateHeading && this.selection.paragraphFormat.outlineLevel !== 'BodyText') {\n this.owner.optionsPaneModule.updateHeadingTab();\n }\n if (this.documentHelper.owner.isLayoutEnabled && !this.documentHelper.owner.editorModule.isUserInsert && !this.documentHelper.owner.isShiftingEnabled && !this.isSkipOperationsBuild && !this.isRemoteAction) {\n this.documentHelper.owner.fireContentChange();\n }\n if (this.owner.isSpellCheck && !isNullOrUndefined(this.selection.editPosition)) {\n this.triggerPageSpellCheck = false;\n }\n };\n /**\n * Update physical location for text position\n *\n * @param {boolean} isSelectionChanged - Specifies the selection change\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSelectionTextPosition = function (isSelectionChanged) {\n this.getOffsetValue(this.selection);\n this.selection.start.updatePhysicalPosition(true);\n if (this.selection.isEmpty) {\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.selection.end.updatePhysicalPosition(true);\n }\n this.selection.upDownSelectionLength = this.selection.end.location.x;\n this.selection.fireSelectionChanged(isSelectionChanged);\n };\n /**\n * Predict text\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.predictText = function () {\n this.documentHelper.suffix = '';\n if (this.selection.start.paragraph.isEmpty() || this.selection.start.offset === 0 &&\n this.selection.start.currentWidget.isFirstLine() || this.selection.end.offset === 0 &&\n this.selection.end.currentWidget.isFirstLine()) {\n this.documentHelper.prefix = '';\n }\n else {\n this.getPrefixAndSuffix();\n }\n this.documentHelper.prefix = '@' + String.fromCharCode(160) + this.documentHelper.prefix; //  \n this.documentHelper.editableDiv.innerText = this.documentHelper.prefix;\n this.documentHelper.selection.setEditableDivCaretPosition(this.documentHelper.prefix.length);\n };\n /* eslint-disable */\n Editor.prototype.getPrefixAndSuffix = function () {\n //let viewer: LayoutViewer = this.owner.viewer;\n var editor = this.owner;\n var documentHelper = editor.documentHelper;\n if (this.selection.text !== '') {\n documentHelper.prefix = '';\n return;\n }\n else {\n var startIndex = 0;\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset, startIndex);\n var inline = inlineInfo.element;\n startIndex = inlineInfo.index;\n if (inline !== undefined) {\n var boxInfo = this.selection.getElementBoxInternal(inline, startIndex);\n var box = boxInfo.element;\n startIndex = boxInfo.index;\n var spaceIndex = 0;\n if (!isNullOrUndefined(box)) {\n var prefixAdded = false;\n if (box instanceof TextElementBox && startIndex > 0 && box.line.isFirstLine()) {\n documentHelper.prefix = '';\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n /* eslint-disable no-cond-assign */\n while ((spaceIndex = documentHelper.prefix.lastIndexOf(' ')) < 0 && inline instanceof TextElementBox) {\n if (inline.previousNode instanceof TextElementBox && documentHelper.prefix.indexOf(' ') === -1) {\n if (!prefixAdded) {\n documentHelper.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n documentHelper.prefix = inline.text + documentHelper.prefix;\n }\n inline = inline.previousNode;\n // If the line has no elements then break the loop to avoid the exception.\n if (inline instanceof ListTextElementBox) {\n break;\n }\n if (!(inline instanceof TextElementBox)) {\n inline = this.selection.getPreviousTextElement(inline);\n }\n }\n else if (!(inline.previousNode instanceof TextElementBox)) {\n if (!prefixAdded) {\n documentHelper.prefix = inline.text.substring(0, startIndex);\n prefixAdded = true;\n }\n else {\n documentHelper.prefix = inline.text + documentHelper.prefix;\n }\n break;\n }\n }\n if (!(documentHelper.prefix.length > 1 && documentHelper.prefix[documentHelper.prefix.length - 1] === ' ' &&\n documentHelper.prefix[documentHelper.prefix.length - 2] === '.')) {\n spaceIndex = documentHelper.prefix.lastIndexOf(' ');\n }\n else {\n spaceIndex = -1;\n documentHelper.prefix = '';\n }\n documentHelper.prefix = spaceIndex < 0 ? documentHelper.prefix : documentHelper.prefix.substring(spaceIndex);\n if (documentHelper.prefix.indexOf(' ') === 0 && documentHelper.prefix.length >= 1) {\n documentHelper.prefix = documentHelper.prefix.substring(1);\n }\n // suffix text prediction\n var endIndex = 0;\n var endInlineInfo = this.selection.end.currentWidget.getInline(this.selection.end.offset, endIndex);\n var endInline = endInlineInfo.element;\n endIndex = endInlineInfo.index;\n boxInfo = this.selection.getElementBoxInternal(endInline, endIndex);\n box = boxInfo.element;\n endIndex = boxInfo.index;\n if (box) {\n var suffixAdded = false;\n if (box instanceof TextElementBox && endIndex < box.length) {\n documentHelper.suffix = '';\n }\n // boxIndex = renderedElements.get(endInline).indexOf(box);\n while ((spaceIndex = documentHelper.suffix.indexOf(' ')) < 0 && endInline instanceof TextElementBox) {\n if (endInline.nextNode instanceof TextElementBox && documentHelper.suffix.indexOf(' ') === -1) {\n if (!suffixAdded) {\n documentHelper.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n documentHelper.suffix = documentHelper.suffix + endInline.text;\n }\n endInline = endInline.nextNode;\n }\n else if (!(endInline.nextNode instanceof TextElementBox)) {\n if (!suffixAdded) {\n documentHelper.suffix = box.text.substring(endIndex);\n suffixAdded = true;\n }\n else {\n documentHelper.suffix = documentHelper.suffix + endInline.text;\n }\n break;\n }\n }\n spaceIndex = documentHelper.suffix.indexOf(' ');\n documentHelper.suffix = spaceIndex < 0 ? documentHelper.suffix : documentHelper.suffix.substring(0, spaceIndex);\n }\n }\n }\n }\n };\n /**\n * key action\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Editor.prototype.onKeyDownInternal = function (event, ctrl, shift, alt) {\n var key = event.which || event.keyCode;\n this.owner.focusIn();\n if (ctrl && !shift && !alt) {\n this.documentHelper.isControlPressed = true;\n switch (key) {\n case 8:\n event.preventDefault();\n this.handleCtrlBackKey();\n break;\n case 46:\n event.preventDefault();\n this.handleCtrlDelete();\n break;\n case 9:\n event.preventDefault();\n if (this.owner.acceptTab) {\n this.selection.handleTabKey(false, false);\n }\n break;\n case 13:\n event.preventDefault();\n this.insertPageBreak();\n break;\n case 48:\n event.preventDefault();\n var value = 0;\n var beforeSpacing = this.documentHelper.selection.start.paragraph.paragraphFormat.beforeSpacing;\n if (beforeSpacing > 12) {\n value = 12;\n }\n else if (beforeSpacing > 0 && beforeSpacing <= 12) {\n value = 0;\n }\n else if (beforeSpacing === 0) {\n value = 12;\n }\n this.onApplyParagraphFormat('beforeSpacing', value, true, false);\n break;\n case 49:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('lineSpacing', 1, false, false);\n }\n break;\n case 50:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('lineSpacing', 2, false, false);\n }\n break;\n case 53:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('lineSpacing', 1.5, false, false);\n }\n break;\n case 66:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleBold();\n }\n break;\n case 68:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.fontDialogModule) {\n this.owner.fontDialogModule.showFontDialog();\n }\n break;\n case 69:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Center');\n }\n event.preventDefault();\n break;\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnly && this.owner.optionsPaneModule) {\n this.owner.optionsPaneModule.isReplace = true;\n this.owner.documentEditorSettings.showNavigationPane = true;\n this.owner.optionsPaneModule.showHideOptionsPane(true);\n }\n break;\n case 73:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleItalic();\n }\n break;\n case 74:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Justify');\n }\n event.preventDefault();\n break;\n case 75:\n event.preventDefault();\n if (this.owner.hyperlinkDialogModule && !this.owner.isReadOnlyMode) {\n this.owner.hyperlinkDialogModule.show();\n }\n break;\n case 76:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Left');\n }\n event.preventDefault();\n break;\n case 77:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.owner.selectionModule.increaseIndent();\n }\n event.preventDefault();\n break;\n case 78:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.openBlank();\n }\n break;\n case 82:\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleTextAlignment('Right');\n }\n event.preventDefault();\n break;\n case 85:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.owner.selectionModule.toggleUnderline('Single');\n }\n break;\n case 88:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.owner.editorModule.cut();\n }\n break;\n case 89:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.redo();\n event.preventDefault();\n }\n break;\n case 90:\n if (this.owner.enableEditorHistory) {\n this.editorHistory.undo();\n event.preventDefault();\n }\n break;\n case 219:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 221:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.toggleBaselineAlignment('Subscript');\n }\n break;\n }\n }\n else if (shift && !ctrl && !alt) {\n switch (key) {\n case 9:\n if (this.owner.acceptTab) {\n event.preventDefault();\n this.selection.handleTabKey(false, true);\n }\n else {\n this.documentHelper.editableDiv.blur();\n }\n break;\n case 13:\n this.handleShiftEnter();\n event.preventDefault();\n break;\n case 114:\n event.preventDefault();\n this.changeCase(this.toggleChangeCase());\n break;\n }\n }\n else if (shift && ctrl && !alt) {\n switch (key) {\n case 13:\n if (!this.owner.isReadOnlyMode) {\n event.preventDefault();\n this.insertColumnBreak();\n }\n break;\n case 68:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selectionModule.toggleUnderline('Double');\n }\n break;\n case 77:\n if (!this.owner.isReadOnlyMode) {\n this.owner.selectionModule.decreaseIndent();\n }\n event.preventDefault();\n break;\n case 188:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'decrement', true);\n }\n break;\n case 190:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.onApplyCharacterFormat('fontSize', 'increment', true);\n }\n break;\n case 187:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n this.toggleBaselineAlignment('Superscript');\n }\n break;\n case 69:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode) {\n var eventArgs = { isTrackChangesEnabled: !this.owner.enableTrackChanges };\n this.owner.trigger(trackChangeEvent, eventArgs);\n }\n }\n }\n else if (!shift && ctrl && alt) {\n switch (key) {\n case 72:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.toggleHighlightColor();\n }\n break;\n case 70:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.insertFootnote();\n }\n break;\n case 68:\n event.preventDefault();\n if (!this.owner.isReadOnlyMode && this.owner.isDocumentLoaded) {\n this.insertEndnote();\n }\n break;\n }\n }\n else {\n switch (key) {\n case 8:\n event.preventDefault();\n this.handleBackKey();\n break;\n case 9:\n if (this.owner.acceptTab) {\n event.preventDefault();\n this.selection.handleTabKey(true, false);\n }\n else {\n this.documentHelper.editableDiv.blur();\n }\n break;\n case 13:\n event.preventDefault();\n if (this.owner.isSpellCheck) {\n this.documentHelper.triggerSpellCheck = true;\n }\n this.handleEnterKey();\n if (this.owner.isSpellCheck) {\n this.documentHelper.triggerSpellCheck = false;\n }\n break;\n case 27:\n event.preventDefault();\n if (!this.isPaste) {\n this.copiedContent = undefined;\n this.copiedTextContent = '';\n this.previousParaFormat = undefined;\n this.previousCharFormat = undefined;\n this.previousSectionFormat = undefined;\n this.selection.isViewPasteOptions = false;\n if (this.isPasteListUpdated) {\n this.isPasteListUpdated = false;\n }\n this.selection.showHidePasteOptions(undefined, undefined);\n }\n break;\n case 46:\n this.handleDelete();\n event.preventDefault();\n break;\n case 32:\n this.selection.handleSpaceBarKey();\n break;\n case 120:\n var textPosition = this.selection.getDocumentEnd();\n textPosition.offset = (this.selection.getDocumentEnd().offset + 1);\n if (this.selection.start.isAtSamePosition(this.selection.getDocumentStart()) &&\n this.selection.end.isAtSamePosition(textPosition)) {\n this.owner.updateFields();\n }\n else {\n this.selection.updateRefField();\n }\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.handleShiftEnter = function () {\n if (!this.owner.isReadOnlyMode) {\n this.handleTextInput('\\v');\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles back key.\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleBackKey = function () {\n if (!this.owner.isReadOnlyMode && this.canEditContentControl || (this.documentHelper.protectionType === 'FormFieldsOnly' && this.canEditContentControl && !isNullOrUndefined(this.documentHelper.selection) && this.documentHelper.selection.checkContentControlLocked()) || this.selection.isInlineFormFillMode()) {\n this.owner.editorModule.onBackSpace();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles delete\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleDelete = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n this.owner.editorModule.delete();\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles enter key.\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleEnterKey = function () {\n var contentControl = this.documentHelper.owner.editor.getContentControl();\n var check = false;\n if (!isNullOrUndefined(contentControl) && contentControl.contentControlProperties.type === 'RichText') {\n var firstChild = this.selection.start.paragraph.firstChild.children[0];\n var lastChild = this.selection.start.paragraph.lastChild.children[this.selection.start.paragraph.lastChild.children.length - 1];\n if (firstChild instanceof ContentControl && lastChild instanceof ContentControl && firstChild.reference === lastChild) {\n check = true;\n }\n }\n if ((!this.owner.isReadOnlyMode && !this.documentHelper.selection.checkContentControlLocked()) || this.selection.isInlineFormFillMode() ||\n ((this.documentHelper.protectionType === 'FormFieldsOnly' || this.documentHelper.protectionType == 'NoProtection') && (contentControl.contentControlProperties.multiline && !isNullOrUndefined(this.documentHelper.selection) && this.documentHelper.selection.checkContentControlLocked()))\n || (!isNullOrUndefined(contentControl) && contentControl.contentControlProperties.type === 'RichText' && check)) {\n if (Browser.isDevice) {\n this.documentHelper.isCompositionStart = false;\n }\n this.owner.editorModule.onEnter();\n if (this.documentHelper.selection.checkContentControlLocked()) {\n this.selection.contentControleditRegionHighlighters.clear();\n this.selection.isHighlightContentControlEditRegion = true;\n this.selection.onHighlightContentControl();\n }\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Handles Control back key.\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleCtrlBackKey = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n if (!this.selection.isForward) {\n start = end;\n }\n if (this.selection.isEmpty) {\n this.selection.handleControlShiftLeftKey();\n this.owner.editorModule.onBackSpace();\n /* eslint-disable max-len */\n }\n else if (((isNullOrUndefined(start.paragraph.previousRenderedWidget) || start.paragraph.previousRenderedWidget instanceof TableWidget)\n && start.offset === 0)) {\n return;\n }\n else {\n this.selection.handleLeftKey();\n this.selection.handleControlShiftLeftKey();\n this.owner.editorModule.onBackSpace();\n }\n }\n };\n /**\n * Handles Ctrl delete\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.handleCtrlDelete = function () {\n if ((!this.owner.isReadOnlyMode && this.canEditContentControl) || this.selection.isInlineFormFillMode()) {\n if (!this.selection.isEmpty) {\n this.selection.handleLeftKey();\n this.selection.handleControlShiftRightKey();\n var selectedText = this.selection.text;\n var checkSpace = HelperMethods.endsWith(selectedText);\n if (checkSpace) {\n this.selection.handleShiftLeftKey();\n }\n this.owner.editorModule.delete();\n }\n else {\n this.selection.handleControlShiftRightKey();\n this.owner.editorModule.delete();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.handleTextInput = function (text) {\n var _this = this;\n if (!this.owner.isReadOnlyMode && this.canEditContentControl || (this.documentHelper.protectionType === 'FormFieldsOnly' && this.canEditContentControl && !isNullOrUndefined(this.documentHelper.selection) && this.documentHelper.selection.checkContentControlLocked()) || this.selection.isInlineFormFillMode()) {\n if (this.animationTimer) {\n clearTimeout(this.animationTimer);\n }\n classList(this.selection.caret, [], ['e-de-cursor-animation']);\n this.owner.editorModule.insertText(text);\n /* eslint-disable @typescript-eslint/indent */\n this.animationTimer = Number(setTimeout(function () {\n if (_this.animationTimer) {\n clearTimeout(_this.animationTimer);\n }\n if (_this.selection && _this.selection.caret) {\n classList(_this.selection.caret, ['e-de-cursor-animation'], []);\n }\n }, 600));\n }\n this.selection.checkForCursorVisibility();\n };\n /**\n * Copies to format.\n * @param {WCharacterFormat} format\n * @private\n * @returns {void}\n */\n Editor.prototype.copyInsertFormat = function (format, copy) {\n var insertFormat = new WCharacterFormat();\n var sFormat = this.selection.characterFormat;\n if (copy) {\n insertFormat.copyFormat(format);\n }\n if (!isNullOrUndefined(sFormat.bidi) && format.bidi !== sFormat.bidi) {\n insertFormat.bidi = sFormat.bidi;\n }\n if (!isNullOrUndefined(sFormat.bold) && format.bold !== sFormat.bold) {\n insertFormat.bold = sFormat.bold;\n }\n if (!isNullOrUndefined(sFormat.italic) && format.italic !== sFormat.italic) {\n insertFormat.italic = sFormat.italic;\n }\n if (sFormat.fontSize > 0 && format.fontSize !== sFormat.fontSize) {\n insertFormat.fontSize = sFormat.fontSize;\n }\n if (!isNullOrUndefined(sFormat.fontFamily) && format.fontFamily !== sFormat.fontFamily) {\n insertFormat.fontFamily = sFormat.fontFamily;\n }\n if (!isNullOrUndefined(sFormat.highlightColor) && format.highlightColor !== sFormat.highlightColor) {\n insertFormat.highlightColor = sFormat.highlightColor;\n }\n if (!isNullOrUndefined(sFormat.baselineAlignment) && format.baselineAlignment !== sFormat.baselineAlignment) {\n insertFormat.baselineAlignment = sFormat.baselineAlignment;\n }\n if (!isNullOrUndefined(sFormat.fontColor) && format.fontColor !== sFormat.fontColor) {\n insertFormat.fontColor = sFormat.fontColor;\n }\n if (!isNullOrUndefined(sFormat.underline) && format.underline !== sFormat.underline) {\n insertFormat.underline = sFormat.underline;\n }\n if (!isNullOrUndefined(sFormat.strikethrough) && format.strikethrough !== sFormat.strikethrough) {\n insertFormat.strikethrough = sFormat.strikethrough;\n }\n return insertFormat;\n };\n Editor.prototype.getResultContentControlText = function (element) {\n var ele = element.nextNode;\n var text = '';\n while (!(ele instanceof ContentControl)) {\n if (ele instanceof TextElementBox) {\n text += ele.text;\n }\n if (isNullOrUndefined(ele)) {\n break;\n }\n if (isNullOrUndefined(ele.nextNode)) {\n if (ele.paragraph.nextRenderedWidget) {\n ele = ele.paragraph.nextRenderedWidget.firstChild.children[0];\n }\n else {\n break;\n }\n }\n else {\n ele = ele.nextNode;\n }\n }\n return text;\n };\n Editor.prototype.insertContentControlPlaceholder = function () {\n var contentControl = this.owner.editor.getContentControl();\n if (!isNullOrUndefined(contentControl) && contentControl.nextElement instanceof ContentControl && contentControl.nextElement === contentControl.reference) {\n this.selection.isHighlightContentControlEditRegion = true;\n var span = new TextElementBox();\n span.text = 'Click here or tap to insert text';\n if (contentControl.contentControlProperties.type === 'ComboBox' || contentControl.contentControlProperties.type === 'DropDownList') {\n span.text = 'Choose an item';\n }\n if (contentControl.contentControlProperties.type === 'Date') {\n span.text = 'Click or tap enter the date';\n }\n span.characterFormat = this.owner.editor.copyInsertFormat(this.selection.start.paragraph.characterFormat, true);\n this.owner.editor.insertElementsInternal(this.owner.selectionModule.end, [span]);\n contentControl.contentControlProperties.hasPlaceHolderText = true;\n this.selection.isHighlightContentControlEditRegion = true;\n this.selection.contentControleditRegionHighlighters.clear();\n this.selection.onHighlightContentControl();\n }\n };\n Editor.prototype.insertContentControl = function (typeOrInfo, value, items) {\n var type;\n var info;\n if (!(typeof typeOrInfo === 'string')) {\n type = typeOrInfo.type;\n value = typeOrInfo.value;\n items = typeOrInfo.items;\n info = typeOrInfo;\n }\n else {\n type = typeOrInfo;\n }\n if (isNullOrUndefined(info)) {\n info = {\n title: undefined,\n tag: undefined,\n value: String(value),\n canDelete: false,\n canEdit: false,\n type: type\n };\n }\n switch (type) {\n case 'RichText':\n if (!isNullOrUndefined(value)) {\n try {\n var parsed = value;\n if (typeof parsed !== 'object') {\n parsed = JSON.parse(value);\n }\n if (parsed && typeof parsed === 'object' || 'sections' in parsed) {\n this.applyRichText(value, info.title, info.tag, info.canDelete, info.canEdit);\n }\n }\n catch (e) {\n var sfdt = {\n \"sections\": [\n {\n \"blocks\": [\n {\n \"inlines\": [\n {\n \"text\": value\n }\n ]\n }\n ]\n }\n ]\n };\n this.applyRichText(JSON.stringify(sfdt), info.title, info.tag, info.canDelete, info.canEdit);\n }\n }\n else {\n this.applyRichText();\n }\n break;\n case 'Text':\n if (!isNullOrUndefined(value)) {\n this.applyPlainText(value, info.title, info.tag, info.canDelete, info.canEdit);\n }\n else {\n this.applyPlainText();\n }\n break;\n case 'Picture':\n this.applyPictureContentControl(type, value);\n break;\n case 'ComboBox':\n this.applyComboBox('ComboBox', items, value);\n break;\n case 'DropDownList':\n this.applyComboBox('DropDownList', items, value);\n break;\n case 'Date':\n this.applyDatePickerContentControl(type, value);\n break;\n case 'CheckBox':\n this.applyCheckBoxContentControl(type, String.fromCharCode(9744), value);\n break;\n }\n var contantControl = this.getContentControl();\n var contentControlInfo = {\n title: contantControl.contentControlProperties.title,\n tag: contantControl.contentControlProperties.tag,\n value: String(value),\n canDelete: contantControl.contentControlProperties.lockContentControl,\n canEdit: contantControl.contentControlProperties.lockContents,\n type: contantControl.contentControlProperties.type\n };\n return contentControlInfo;\n };\n Editor.prototype.applyRichText = function (value, title, tag, lock, lockContents) {\n this.selection.isHighlightContentControlEditRegion = true;\n var blockStartContentControl = new ContentControl('Inline');\n var blockEndContentControl = new ContentControl('Inline');\n var properties = new ContentControlProperties('Inline');\n properties.color = \"#00000000\";\n this.selection.isEmpty ? properties.hasPlaceHolderText = true : properties.hasPlaceHolderText = false;\n properties.isTemporary = false;\n properties.lockContentControl = !isNullOrUndefined(lock) ? lock : false;\n properties.lockContents = !isNullOrUndefined(lockContents) ? lock : false;\n properties.tag = !isNullOrUndefined(tag) ? tag : undefined;\n properties.title = !isNullOrUndefined(title) ? title : undefined;\n properties.multiline = false;\n properties.type = 'RichText';\n properties.contentControlWidgetType = 'Inline';\n blockStartContentControl.contentControlProperties = properties;\n blockEndContentControl.contentControlProperties = blockStartContentControl.contentControlProperties;\n blockStartContentControl.type = 0;\n blockEndContentControl.type = 1;\n if (this.editorHistory) {\n this.initComplexHistory('InsertContentControl');\n }\n var positionStart = this.selection.isForward ? this.selection.start.clone() : this.selection.end.clone();\n var positionEnd = this.selection.isForward ? this.selection.end.clone() : this.selection.start.clone();\n if (positionEnd.paragraph !== positionStart.paragraph) {\n if (positionEnd.isAtParagraphEnd) {\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(positionEnd.paragraph.lastChild, positionEnd.paragraph.lastChild.getEndOffset());\n positionEnd = endPosition;\n }\n else {\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(positionEnd.paragraph.previousWidget.lastChild, positionEnd.paragraph.previousWidget.lastChild.getEndOffset());\n positionEnd = endPosition;\n }\n }\n if (properties.hasPlaceHolderText) {\n var span = new TextElementBox();\n span.text = 'Click here or tap to insert text';\n span.characterFormat = this.copyInsertFormat(this.selection.start.paragraph.characterFormat, true);\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n this.insertElementsInternal(positionStart, [span]);\n positionStart.offset + span.length;\n this.insertElementsInternal(positionStart, [blockEndContentControl]);\n }\n else {\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n positionEnd.offset++;\n this.insertElementsInternal(positionEnd, [blockEndContentControl]);\n }\n if (!isNullOrUndefined(value)) {\n this.documentHelper.selection.selectContentInternal(blockStartContentControl);\n this.paste(value);\n }\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset - 1, 0);\n var inline = inlineInfo.element;\n inline.contentControlProperties = properties;\n this.selection.onHighlightContentControl();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.documentHelper.viewer.updateScrollBars();\n };\n Editor.prototype.applyPlainText = function (value, title, tag, lock, lockContents) {\n var contentControl = this.getContentControl();\n if (isNullOrUndefined(contentControl) || contentControl.contentControlProperties.type === 'RichText') {\n this.selection.isHighlightContentControlEditRegion = true;\n var blockStartContentControl = new ContentControl('Inline');\n var blockEndContentControl = new ContentControl('Inline');\n var properties = new ContentControlProperties('Inline');\n properties.color = \"#00000000\";\n this.selection.isEmpty ? properties.hasPlaceHolderText = true : properties.hasPlaceHolderText = false;\n properties.isTemporary = false;\n properties.lockContentControl = !isNullOrUndefined(lock) ? lock : false;\n properties.lockContents = !isNullOrUndefined(lockContents) ? lock : false;\n properties.tag = !isNullOrUndefined(tag) ? tag : undefined;\n properties.title = !isNullOrUndefined(title) ? title : undefined;\n properties.multiline = false;\n properties.type = 'Text';\n properties.contentControlWidgetType = 'Inline';\n blockStartContentControl.contentControlProperties = properties;\n blockEndContentControl.contentControlProperties = blockStartContentControl.contentControlProperties;\n blockStartContentControl.type = 0;\n blockEndContentControl.type = 1;\n if (this.editorHistory) {\n this.initComplexHistory('InsertContentControl');\n }\n var positionStart = this.selection.isForward ? this.selection.start.clone() : this.selection.end.clone();\n var positionEnd = this.selection.isForward ? this.selection.end.clone() : this.selection.start.clone();\n if (positionEnd.paragraph !== positionStart.paragraph) {\n positionEnd = new TextPosition(this.owner);\n positionEnd.setPositionParagraph(positionStart.paragraph.lastChild, positionStart.paragraph.lastChild.getEndOffset());\n }\n if (properties.hasPlaceHolderText) {\n var span = new TextElementBox();\n if (!isNullOrUndefined(value)) {\n span.text = value;\n }\n else {\n span.text = 'Click here or tap to insert text';\n }\n span.characterFormat = this.copyInsertFormat(this.selection.start.paragraph.characterFormat, true);\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n this.insertElementsInternal(positionStart, [span]);\n positionStart.offset + span.length;\n this.insertElementsInternal(positionStart, [blockEndContentControl]);\n }\n else {\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n positionEnd.offset++;\n this.insertElementsInternal(positionEnd, [blockEndContentControl]);\n }\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset - 1, 0);\n var inline = inlineInfo.element;\n inline.contentControlProperties = properties;\n this.selection.onHighlightContentControl();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.documentHelper.viewer.updateScrollBars();\n }\n };\n Editor.prototype.applyComboBox = function (type, items, value) {\n var contentControl = this.getContentControl();\n if (isNullOrUndefined(contentControl) || contentControl.contentControlProperties.type === 'RichText') {\n this.selection.isHighlightContentControlEditRegion = true;\n var blockStartContentControl = new ContentControl('Inline');\n var blockEndContentControl = new ContentControl('Inline');\n var properties = new ContentControlProperties('Inline');\n properties.color = \"#00000000\";\n properties.type = type;\n this.selection.isEmpty ? properties.hasPlaceHolderText = true : properties.hasPlaceHolderText = false;\n properties.isTemporary = false;\n properties.lockContentControl = false;\n properties.lockContents = false;\n properties.multiline = false;\n var list = [];\n if (!isNullOrUndefined(items)) {\n for (var i = 0; i < items.length; i++) {\n var span = new ContentControlListItems();\n span.displayText = items[i];\n span.value = items[i];\n list.push(span);\n }\n }\n else {\n var span = new ContentControlListItems();\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n span.displayText = localeValue.getConstant('Choose an item');\n span.value = localeValue.getConstant('Choose an item');\n list.push(span);\n }\n properties.contentControlListItems = list;\n //properties.appearance='Bounding Box';\n properties.contentControlWidgetType = 'Inline';\n blockStartContentControl.contentControlProperties = properties;\n blockEndContentControl.contentControlProperties = blockStartContentControl.contentControlProperties;\n blockStartContentControl.type = 0;\n blockEndContentControl.type = 1;\n if (this.editorHistory) {\n this.initComplexHistory('InsertContentControl');\n }\n var positionStart = this.selection.isForward ? this.selection.start.clone() : this.selection.end.clone();\n var positionEnd = this.selection.isForward ? this.selection.end.clone() : this.selection.start.clone();\n if (positionEnd.paragraph !== positionStart.paragraph) {\n positionEnd = new TextPosition(this.owner);\n positionEnd.setPositionParagraph(positionStart.paragraph.lastChild, positionStart.paragraph.lastChild.getEndOffset());\n }\n if (properties.hasPlaceHolderText) {\n var span = new TextElementBox();\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n span.text = localeValue.getConstant('Choose an item');\n span.characterFormat = this.copyInsertFormat(this.selection.start.paragraph.characterFormat, true);\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n this.insertElementsInternal(positionStart, [span]);\n positionStart.offset + span.length;\n this.insertElementsInternal(positionStart, [blockEndContentControl]);\n }\n else {\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n positionEnd.offset++;\n this.insertElementsInternal(positionEnd, [blockEndContentControl]);\n }\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset - 1, 0);\n var inline = inlineInfo.element;\n inline.contentControlProperties = properties;\n if (!isNullOrUndefined(items)) {\n this.dropDownChange(blockStartContentControl, value);\n }\n this.selection.onHighlightContentControl();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.documentHelper.viewer.updateScrollBars();\n }\n };\n Editor.prototype.applyDatePickerContentControl = function (type, value, title, tag, lock, lockContents) {\n this.dateValue = value;\n var contentControl = this.getContentControl();\n if (isNullOrUndefined(contentControl) || contentControl.contentControlProperties.type === 'RichText') {\n this.selection.isHighlightContentControlEditRegion = true;\n var blockStartContentControl = new ContentControl('Inline');\n var blockEndContentControl = new ContentControl('Inline');\n //blockStartContentControl.contentControlProperties.lockContents=true;\n var properties = new ContentControlProperties('Inline');\n properties.color = \"#00000000\";\n this.selection.isEmpty ? properties.hasPlaceHolderText = true : properties.hasPlaceHolderText = false;\n properties.isTemporary = false;\n properties.lockContentControl = !isNullOrUndefined(lock) ? lock : false;\n properties.lockContents = !isNullOrUndefined(lockContents) ? lock : false;\n properties.tag = !isNullOrUndefined(tag) ? tag : undefined;\n properties.title = !isNullOrUndefined(title) ? title : undefined;\n properties.multiline = false;\n properties.type = type;\n //properties.appearance='Bounding Box';\n properties.contentControlWidgetType = 'Inline';\n blockStartContentControl.contentControlProperties = properties;\n blockEndContentControl.contentControlProperties = blockStartContentControl.contentControlProperties;\n blockStartContentControl.type = 0;\n blockEndContentControl.type = 1;\n if (this.editorHistory) {\n this.initComplexHistory('InsertContentControl');\n }\n var positionStart = this.selection.isForward ? this.selection.start.clone() : this.selection.end.clone();\n var positionEnd = this.selection.isForward ? this.selection.end.clone() : this.selection.start.clone();\n if (positionEnd.paragraph !== positionStart.paragraph) {\n positionEnd = new TextPosition(this.owner);\n positionEnd.setPositionParagraph(positionStart.paragraph.lastChild, positionStart.paragraph.lastChild.getEndOffset());\n }\n if (properties.hasPlaceHolderText) {\n var span = new TextElementBox();\n if (value) {\n span.text = value;\n }\n else {\n span.text = 'Click or tap enter the date';\n }\n span.characterFormat = this.copyInsertFormat(this.selection.start.paragraph.characterFormat, true);\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n this.insertElementsInternal(positionStart, [span]);\n positionStart.offset + span.length;\n this.insertElementsInternal(positionStart, [blockEndContentControl]);\n }\n else {\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n positionEnd.offset++;\n this.insertElementsInternal(positionEnd, [blockEndContentControl]);\n }\n var inlineInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset - 1, 0);\n var inline = inlineInfo.element;\n inline.contentControlProperties = properties;\n this.selection.onHighlightContentControl();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.documentHelper.viewer.updateScrollBars();\n }\n };\n Editor.prototype.applyCheckBoxContentControl = function (type, value, inputValue) {\n var contentControl = this.getContentControl();\n if (isNullOrUndefined(contentControl) || contentControl.contentControlProperties.type === 'RichText') {\n this.selection.isHighlightContentControlEditRegion = true;\n var blockStartContentControl = new ContentControl('Inline');\n var blockEndContentControl = new ContentControl('Inline');\n //blockStartContentControl.contentControlProperties.lockContents=true;\n var properties = new ContentControlProperties('Inline');\n properties.color = \"#00000000\";\n properties.hasPlaceHolderText = false;\n properties.isTemporary = false;\n properties.lockContentControl = false;\n properties.lockContents = false;\n properties.multiline = false;\n properties.type = type;\n if (!isNullOrUndefined(inputValue)) {\n properties.isChecked = inputValue;\n }\n else {\n properties.isChecked = false;\n }\n properties.uncheckedState = new CheckBoxState();\n properties.uncheckedState.font = this.selection.characterFormat.fontFamily;\n properties.uncheckedState.value = String.fromCharCode(9744);\n properties.checkedState = new CheckBoxState();\n properties.checkedState.font = this.selection.characterFormat.fontFamily;\n properties.checkedState.value = String.fromCharCode(9746);\n properties.contentControlWidgetType = 'Inline';\n blockStartContentControl.contentControlProperties = properties;\n blockEndContentControl.contentControlProperties = blockStartContentControl.contentControlProperties;\n blockStartContentControl.type = 0;\n blockEndContentControl.type = 1;\n if (this.editorHistory) {\n this.initComplexHistory('InsertContentControl');\n }\n var positionStart = this.selection.isForward ? this.selection.start.clone() : this.selection.end.clone();\n var positionEnd = this.selection.isForward ? this.selection.end.clone() : this.selection.start.clone();\n if (positionEnd.paragraph !== positionStart.paragraph) {\n positionEnd = new TextPosition(this.owner);\n positionEnd.setPositionParagraph(positionStart.paragraph.lastChild, positionStart.paragraph.lastChild.getEndOffset());\n }\n if (this.selection) {\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n positionEnd.offset++;\n this.insertElementsInternal(positionEnd, [blockEndContentControl]);\n }\n var startOffset = this.documentHelper.selection.start.currentWidget.getOffset(blockStartContentControl, 1);\n var startPosition = new TextPosition(this.documentHelper.owner);\n startPosition.setPositionParagraph(blockStartContentControl.line, startOffset);\n var endOffset = this.documentHelper.selection.start.currentWidget.getOffset(blockEndContentControl, 0);\n var endposition = new TextPosition(this.documentHelper.owner);\n endposition.setPositionParagraph(blockEndContentControl.line, endOffset);\n this.documentHelper.selection.selectRange(startPosition, endposition);\n this.documentHelper.owner.editor.insertTextInternal(value, true);\n this.selection.onHighlightContentControl();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.documentHelper.viewer.updateScrollBars();\n }\n };\n /**\n * Apply the content Control properties to the picture content Control\n * @param {type} refers the type of Content control.\n */\n Editor.prototype.applyPictureContentControl = function (type, value) {\n var contentControl = this.getContentControl();\n if (isNullOrUndefined(contentControl) || contentControl.contentControlProperties.type === 'RichText') {\n var blockStartContentControl = new ContentControl('Inline');\n var blockEndContentControl = new ContentControl('Inline');\n //blockStartContentControl.contentControlProperties.lockContents=true;\n var properties = new ContentControlProperties('Inline');\n properties.color = \"#00000000\";\n properties.hasPlaceHolderText = false;\n properties.isTemporary = false;\n properties.lockContentControl = false;\n properties.lockContents = false;\n properties.multiline = false;\n properties.type = type;\n //properties.appearance='Bounding Box';\n properties.contentControlWidgetType = 'Inline';\n blockStartContentControl.contentControlProperties = properties;\n blockEndContentControl.contentControlProperties = blockStartContentControl.contentControlProperties;\n blockStartContentControl.type = 0;\n blockEndContentControl.type = 1;\n if (this.editorHistory) {\n this.initComplexHistory('InsertContentControl');\n }\n var positionStart = this.selection.start.clone();\n var positionEnd = this.selection.end.clone();\n if (!this.selection.isForward) {\n blockStartContentControl.type = 1;\n blockEndContentControl.type = 0;\n }\n if (this.selection.start.paragraph == this.selection.end.paragraph) {\n this.insertElementsInternal(positionStart, [blockStartContentControl]);\n if (!isNullOrUndefined(value)) {\n this.insertImageAsync(value);\n }\n this.insertElementsInternal(positionEnd, [blockEndContentControl]);\n }\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n }\n this.documentHelper.viewer.updateScrollBars();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.dropDownChange = function (contentControl, value) {\n if (!isNullOrUndefined(contentControl)) {\n this.documentHelper.selection.selectContentInternal(contentControl);\n this.insertTextInternal(value, true);\n if (contentControl.contentControlProperties.isTemporary) {\n this.removeContentControl();\n }\n }\n return;\n };\n Editor.prototype.updateXmlMappedContentControl = function () {\n if (this.isXmlMapped) {\n var startInlineEle = this.getContentControl();\n if (startInlineEle && startInlineEle.contentControlProperties) {\n this.updateCustomXml(startInlineEle.contentControlProperties.xmlMapping.storeItemId, startInlineEle.contentControlProperties.xmlMapping.xPath, this.getResultContentControlText(startInlineEle));\n }\n }\n };\n Editor.prototype.updateCustomXml = function (itemId, xPath, text) {\n if (this.documentHelper.customXmlData.containsKey(itemId)) {\n var xml = this.documentHelper.customXmlData.get(itemId);\n var parser = new DOMParser();\n var xmlDoc = parser.parseFromString(xml, 'text/xml');\n var lastText = xPath.substring(xPath.lastIndexOf('/') + 1);\n lastText = lastText.split('[')[0];\n lastText = lastText.substring(lastText.lastIndexOf(':') + 1);\n lastText = lastText.substring(lastText.lastIndexOf('@') + 1);\n var htmlCollec = xmlDoc.getElementsByTagName(lastText);\n if (htmlCollec.length > 0) {\n htmlCollec[0].childNodes[0].nodeValue = text;\n }\n else if (xmlDoc.documentElement.attributes.length > 0 && xmlDoc.documentElement.attributes.getNamedItem(lastText) !== null) {\n xmlDoc.documentElement.attributes.getNamedItem(lastText).value = text;\n }\n else {\n return;\n }\n var newXml = new XMLSerializer();\n var xmlString = newXml.serializeToString(xmlDoc);\n this.documentHelper.customXmlData.set(itemId, xmlString);\n }\n };\n /**\n * Inserts the specified text at cursor position\n * @param {string} text Specify the text to insert.\n */\n Editor.prototype.insertText = function (text) {\n if (isNullOrUndefined(text) || text === ''\n || this.owner.isReadOnly\n || this.documentHelper.protectionType === 'ReadOnly' && !this.selection.isSelectionInEditRegion()\n || this.documentHelper.protectionType === 'CommentsOnly' && this.owner.isReadOnly) {\n return;\n }\n this.insertTextInternal(text, false);\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Editor.prototype.insertTextInternal = function (text, isReplace, revisionType, allowLayout) {\n if (text.indexOf('\\r') >= 0 || text.indexOf('\\n') >= 0) {\n if (text === '\\r' || text === '\\n' || text === '\\r\\n') {\n this.onEnter();\n }\n else {\n this.isInsertText = true;\n this.pasteContents(text);\n this.isInsertText = false;\n }\n return;\n }\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.selection.isInlineFormFillMode()) {\n var inline = this.selection.currentFormField;\n if (!inline.formFieldData.enabled) {\n return;\n }\n var resultText = this.getFieldResultText(inline);\n var rex = new RegExp(this.owner.documentHelper.textHelper.getEnSpaceCharacter(), 'gi');\n if (resultText.length > 0 && resultText.replace(rex, '') === '') {\n resultText = '';\n this.selection.selectFieldInternal(inline);\n }\n var maxLength = inline.formFieldData.maxLength;\n if (maxLength !== 0 && resultText.length >= maxLength) {\n return;\n }\n }\n if (isReplace) {\n this.documentHelper.layout.isReplaceAll = !isNullOrUndefined(allowLayout) ? !allowLayout : false;\n }\n var contentControl = this.documentHelper.owner.editor.getContentControl();\n if (!isNullOrUndefined(contentControl) && contentControl.contentControlProperties.hasPlaceHolderText) {\n this.documentHelper.selection.selectContentInternal(contentControl);\n contentControl.contentControlProperties.hasPlaceHolderText = false;\n }\n var selection = this.documentHelper.selection;\n var insertPosition;\n var isRemoved = true;\n var isInsertPositionUpdated = false;\n revisionType = (this.owner.enableTrackChanges && isNullOrUndefined(revisionType)) ? 'Insertion' : revisionType;\n var commentStarts = this.checkAndRemoveComments();\n this.isListTextSelected();\n if (this.documentHelper.isBookmarkInserted && selection.bookmarks.length > 0) {\n this.extendSelectionToBookmarkStart();\n }\n if (isNullOrUndefined(revisionType) || revisionType === 'Insertion') {\n this.initHistory('Insert');\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = text;\n if (this.documentHelper.protectionType === 'FormFieldsOnly') {\n var field = this.documentHelper.selection.getCurrentFormField();\n if (field && field instanceof FieldElementBox && field.formFieldData && field.formFieldData instanceof DropDownFormField) {\n this.editorHistory.currentBaseHistoryInfo.fieldBegin = field;\n this.editorHistory.currentBaseHistoryInfo.dropDownIndex = field.formFieldData.selectedIndex;\n }\n }\n }\n }\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var paraFormat = paragraphInfo.paragraph.paragraphFormat;\n selection.editPosition = selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var bidi = selection.start.paragraph.paragraphFormat.bidi;\n if ((!selection.isEmpty && !selection.isImageSelected) ||\n this.documentHelper.isListTextSelected && selection.contextType === 'List') {\n selection.isSkipLayouting = true;\n selection.skipFormatRetrieval = true;\n var endPosition = undefined;\n var endParagraphInfo = undefined;\n var endOffset = 0;\n var paragraphLength = 0;\n if (this.owner.enableTrackChanges) {\n if (!this.selection.start.isExistBefore(this.selection.end)) {\n endParagraphInfo = this.selection.getParagraphInfo(selection.start);\n endPosition = this.selection.start.clone();\n }\n else {\n endParagraphInfo = this.selection.getParagraphInfo(selection.end);\n endPosition = this.selection.end.clone();\n }\n paragraphLength = endParagraphInfo.paragraph.getLength();\n endOffset = endParagraphInfo.offset - 1 === paragraphLength ? endParagraphInfo.offset - 1 : endParagraphInfo.offset;\n this.skipReplace = true;\n }\n isRemoved = this.removeSelectedContents(selection);\n if (isRemoved) {\n this.updateInsertPosition();\n isInsertPositionUpdated = true;\n }\n this.skipReplace = false;\n if (!isNullOrUndefined(endPosition) && this.owner.searchModule && this.owner.searchModule.isRepalceTracking) {\n this.owner.searchModule.isRepalceTracking = false;\n this.selection.start.setPositionInternal(this.selection.start);\n this.selection.end.setPositionInternal(endPosition);\n }\n else if (endOffset > 0 && endOffset <= paragraphLength) {\n var updatedParagraphLength = endParagraphInfo.paragraph.getLength();\n if (paragraphLength !== updatedParagraphLength) {\n endOffset -= paragraphLength - updatedParagraphLength;\n }\n this.setPositionParagraph(endParagraphInfo.paragraph, endOffset, true);\n }\n selection.skipFormatRetrieval = false;\n selection.isSkipLayouting = false;\n }\n else if (selection.isEmpty && !this.documentHelper.isListTextSelected && !isReplace) {\n this.documentHelper.isTextInput = true;\n }\n paragraphInfo = this.selection.getParagraphInfo(selection.start);\n paragraphInfo.paragraph.paragraphFormat.copyFormat(paraFormat);\n var isSpecialChars = this.documentHelper.textHelper.containsSpecialCharAlone(text);\n if (isRemoved) {\n selection.owner.isShiftingEnabled = true;\n if (!isInsertPositionUpdated) {\n this.updateInsertPosition();\n }\n insertPosition = selection.start;\n if (insertPosition.paragraph.isEmpty()) {\n var span = new TextElementBox();\n var insertFormat = this.copyInsertFormat(insertPosition.paragraph.characterFormat, true);\n span.characterFormat.copyFormat(insertFormat);\n span.text = text;\n var isBidi = this.documentHelper.textHelper.getRtlLanguage(text).isRtl || this.selection.characterFormat.bidi;\n span.characterFormat.bidi = isBidi;\n insertFormat.bidi = isBidi;\n span.isRightToLeft = isBidi;\n span.line = insertPosition.paragraph.childWidgets[0];\n span.margin = new Margin(0, 0, 0, 0);\n span.line.children.push(span);\n this.setCharFormatForCollaborativeEditing(span.characterFormat);\n if (this.owner.enableTrackChanges) {\n if (span.paragraph.characterFormat.revisions.length > 0) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(span.paragraph.characterFormat.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, span.paragraph.characterFormat, span, true);\n }\n }\n if (!this.checkToCombineRevisionWithPrevPara(span, revisionType) && span.revisions.length === 0) {\n this.insertRevision(span, revisionType);\n }\n }\n if ((insertPosition.paragraph.paragraphFormat.textAlignment === 'Center'\n || insertPosition.paragraph.paragraphFormat.textAlignment === 'Right'\n || (insertPosition.paragraph.paragraphFormat.textAlignment === 'Justify'\n && insertPosition.paragraph.paragraphFormat.bidi))\n && insertPosition.paragraph.paragraphFormat.listFormat.listId === -1) {\n insertPosition.paragraph.x = insertPosition.paragraph.clientX;\n insertPosition.paragraph.clientX = undefined;\n if (insertPosition.paragraph.hasOwnProperty('absoluteXPosition')) {\n delete insertPosition.paragraph['absoluteXPosition'];\n }\n }\n if (span instanceof TextElementBox && span.text.length > 90) {\n // Here, the text is split based on the maximum character length of 90.\n HelperMethods.splitWordByMaxLength(span, span.line);\n }\n this.documentHelper.layout.reLayoutParagraph(insertPosition.paragraph, 0, 0);\n }\n else {\n var indexInInline = 0;\n var inlineObj = insertPosition.currentWidget.getInline(insertPosition.offset, indexInInline, bidi, (isReplace) ? false : true, this.documentHelper.owner.isSpellCheck);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n inline.ischangeDetected = true;\n if (inline instanceof TextElementBox && text !== ' ' && this.documentHelper.owner.isSpellCheck) {\n this.owner.spellCheckerModule.removeErrorsFromCollection({ 'element': inline, 'text': inline.text });\n if (!isReplace) {\n inline.ignoreOnceItems = [];\n }\n }\n if (inline.canTrigger && inline.text.length <= 1) {\n inline.canTrigger = false;\n }\n // Todo: compare selection format\n var insertFormat = this.copyInsertFormat(inline.characterFormat, true);\n var isBidi = this.documentHelper.textHelper.getRtlLanguage(text).isRtl || this.selection.characterFormat.bidi;\n var insertLangId = this.documentHelper.textHelper.getRtlLanguage(text).id;\n var inlineLangId = 0;\n var isRtl = false;\n var isInlineContainsSpecChar = false;\n var isTextContainsSpecChar = false;\n if (inline instanceof TextElementBox) {\n inlineLangId = this.documentHelper.textHelper.getRtlLanguage(inline.text).id;\n isRtl = this.documentHelper.textHelper.getRtlLanguage(inline.text).isRtl;\n isTextContainsSpecChar = this.documentHelper.textHelper.containsSpecialCharAlone(text);\n }\n if ((!isBidi && inline.characterFormat.bidi && (inlineLangId !== 0 || (isTextContainsSpecChar && isRtl)))\n || (text === ' ' && this.selection.characterFormat.bidi)) {\n isBidi = true;\n }\n if (isBidi || !this.documentHelper.owner.isSpellCheck) {\n insertFormat.bidi = isBidi;\n }\n this.setCharFormatForCollaborativeEditing(insertFormat);\n if ((!this.documentHelper.owner.isSpellCheck || (text !== ' ' && inline.text !== ' ')) && insertFormat.isSameFormat(inline.characterFormat) && this.canInsertRevision(inline, revisionType)\n || (text.trim() === '' && !isBidi && inline.characterFormat.bidi) || isRtl && insertFormat.isSameFormat(inline.characterFormat) && isSpecialChars) {\n this.insertTextInline(inline, selection, text, indexInInline);\n this.setCharFormatForCollaborativeEditing(inline.characterFormat);\n }\n else {\n var tempSpan = new TextElementBox();\n tempSpan.text = text;\n tempSpan.line = inline.line;\n tempSpan.isRightToLeft = isRtl;\n tempSpan.characterFormat.copyFormat(insertFormat);\n if (!isNullOrUndefined(inline) && inline.contentControlProperties) {\n tempSpan.contentControlProperties = inline.contentControlProperties;\n }\n this.setCharFormatForCollaborativeEditing(tempSpan.characterFormat);\n if (inline instanceof FootnoteElementBox) {\n tempSpan.characterFormat.baselineAlignment = 'Normal';\n }\n var isRevisionCombined = false;\n var insertIndex = inline.indexInOwner;\n var prevRevisionCount = tempSpan.revisions.length;\n if (indexInInline === inline.length) {\n var index = -1;\n index = insertIndex + 1;\n if (this.owner.enableTrackChanges && !(inline instanceof BookmarkElementBox)) {\n isRevisionCombined = this.checkToMapRevisionWithInlineText(inline, indexInInline, tempSpan, isBidi, revisionType);\n if (!isRevisionCombined && tempSpan.revisions.length === prevRevisionCount) {\n if (inline.nextNode != undefined && inline.nextNode.revisions.length == 1) {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(inline.nextNode, tempSpan, isBidi, revisionType);\n }\n else if (inline.paragraph.characterFormat.revisions.length == 1 && inline.paragraph.characterFormat.revisions[0].revisionType == 'Deletion') {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(inline.nextNode, tempSpan, isBidi, revisionType, inline.paragraph);\n }\n else {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(inline.nextNode, tempSpan, isBidi, revisionType);\n }\n }\n }\n if (!isRevisionCombined) {\n inline.line.children.splice(index, 0, tempSpan);\n this.checkToCombineRevisionsinBlocks(tempSpan, prevRevisionCount === tempSpan.revisions.length, true, revisionType);\n }\n }\n else if (indexInInline === 0) {\n if (this.owner.enableTrackChanges) {\n isRevisionCombined = this.checkToMapRevisionWithInlineText(inline, indexInInline, tempSpan, isBidi, revisionType);\n if (!isRevisionCombined && tempSpan.revisions.length === 0) {\n this.checkToMapRevisionWithPreviousNode(inline.previousNode, tempSpan, isBidi, revisionType);\n }\n }\n if (!isRevisionCombined) {\n inline.line.children.splice(insertIndex, 0, tempSpan);\n this.checkToCombineRevisionsinBlocks(tempSpan, prevRevisionCount === tempSpan.revisions.length, true, revisionType);\n }\n }\n else {\n if (inline instanceof TextElementBox) {\n var splittedSpan = new TextElementBox();\n splittedSpan.line = inline.line;\n splittedSpan.characterFormat.copyFormat(inline.characterFormat);\n if (!isNullOrUndefined(inline) && inline.contentControlProperties) {\n splittedSpan.contentControlProperties = inline.contentControlProperties;\n }\n // Commented because character format is not syncing correctly.\n // this.setCharFormatForCollaborativeEditing(splittedSpan.characterFormat);\n splittedSpan.text = inline.text.substring(indexInInline);\n if (!this.owner.enableTrackChanges && !this.selection.isInField) {\n this.updateRevisionForSpittedTextElement(inline, splittedSpan);\n }\n inline.text = inline.text.slice(0, indexInInline);\n inline.isWidthUpdated = false;\n if (this.owner.enableTrackChanges) {\n isRevisionCombined = this.checkToMapRevisionWithInlineText(inline, indexInInline, tempSpan, isBidi, revisionType);\n if (isRevisionCombined || tempSpan.revisions.length > prevRevisionCount) {\n this.copyElementRevision(inline, splittedSpan, true);\n }\n else if (tempSpan.revisions.length === prevRevisionCount) {\n this.updateRevisionForSpittedTextElement(inline, splittedSpan);\n this.insertRevision(tempSpan, revisionType);\n }\n }\n else if (this.selection.isInField) {\n this.copyElementRevision(inline, splittedSpan, false);\n this.updateElementInFieldRevision(inline, tempSpan, inline.revisions, true);\n }\n if (this.owner.isSpellCheck) {\n this.owner.spellCheckerModule.updateSplittedElementError(inline, splittedSpan);\n }\n inline.line.children.splice(insertIndex + 1, 0, splittedSpan);\n }\n if (!isRevisionCombined) {\n inline.line.children.splice(insertIndex + 1, 0, tempSpan);\n }\n }\n if (tempSpan instanceof TextElementBox && tempSpan.text.length > 90) {\n // Here, the text is split based on the maximum character length of 90.\n HelperMethods.splitWordByMaxLength(tempSpan, tempSpan.line);\n }\n if (!(!isNullOrUndefined(revisionType) && revisionType === 'Deletion' && !insertPosition.paragraph.isLayouted)) {\n this.documentHelper.layout.reLayoutParagraph(insertPosition.paragraph, inline.line.indexInOwner, 0);\n }\n }\n }\n if (!isNullOrUndefined(contentControl) && contentControl.contentControlProperties.isTemporary) {\n this.removeContentControl();\n }\n if (!isNullOrUndefined(contentControl)) {\n this.selection.contentControleditRegionHighlighters.clear();\n this.selection.onHighlightContentControl();\n }\n this.documentHelper.layout.allowLayout = true;\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + text.length, true);\n this.updateEndPosition();\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)\n && (this.editorHistory.currentHistoryInfo.action === 'ListSelect') &&\n this.documentHelper.isListTextSelected) {\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n if ((isNullOrUndefined(revisionType) || revisionType === 'Insertion') && !this.isFieldOperation) {\n this.reLayout(selection);\n }\n this.documentHelper.isTextInput = false;\n }\n this.updateXmlMappedContentControl();\n if (!isReplace && isRemoved && (text === ' ' || text === '\\t' || text === '\\v')) {\n var isList = false;\n if (!(text === '\\v') && !this.isRemoteAction) {\n isList = this.checkAndConvertList(selection, text === '\\t');\n }\n if (!isList) {\n if (!isNullOrUndefined(selection.getHyperlinkField())) {\n return;\n }\n //Checks if the previous text is URL, then it is auto formatted to hyperlink.\n this.checkAndConvertToHyperlink(selection, false);\n }\n }\n this.updateHistoryForComments(commentStarts);\n };\n Editor.prototype.extendSelectionToBookmarkStart = function () {\n if (this.documentHelper.bookmarks.length > 0) {\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var bookMark = void 0;\n var selectionBookmark = this.selection.bookmarks;\n for (var i = 0; i < selectionBookmark.length; i++) {\n bookMark = this.documentHelper.bookmarks.get(selectionBookmark[i]);\n if (this.selection.isElementInSelection(bookMark.reference, false) &&\n !this.selection.isElementInSelection(bookMark, true)) {\n var bookmarkPargraph = bookMark.line.paragraph;\n var selectionParagraphInfo = this.selection.getParagraphInfo(startPos);\n if (bookmarkPargraph.equals(selectionParagraphInfo.paragraph)) {\n var elementOffset = bookMark.line.getOffset(bookMark, bookMark.bookmarkType);\n if (bookMark.line === startPos.currentWidget && selectionParagraphInfo.offset === elementOffset + 1) {\n startPos.offset--;\n }\n }\n }\n }\n }\n };\n Editor.prototype.updateElementInFieldRevision = function (revisionElement, elementToInclude, revisions, isEnd) {\n for (var i = 0; i < revisions.length; i++) {\n var currentRevision = revisions[i];\n var rangeIndex = currentRevision.range.indexOf(revisionElement);\n currentRevision.range.splice(isEnd ? rangeIndex + 1 : rangeIndex, 0, elementToInclude);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n };\n /**\n * Retrieves the resultant field text from the specified field element box.\n * @param item Specify the field element box to retrieve field text.\n * @returns Returns the resultant field text.\n */\n Editor.prototype.retrieveFieldResultantText = function (item) {\n var resultantText = '';\n if (item.fieldType === 1) {\n var textElement = item.previousElement;\n // Get the last child of previous line if the field code presents at the start of the current line.\n if (isNullOrUndefined(textElement) && item.indexInOwner === 0 && !isNullOrUndefined(item.line) && !isNullOrUndefined(item.line.previousLine) && item.line.previousLine.children[item.line.previousLine.children.length - 1] instanceof TextElementBox) {\n textElement = item.line.previousLine.children[item.line.previousLine.children.length - 1];\n }\n while (!isNullOrUndefined(textElement) && textElement instanceof TextElementBox) {\n resultantText = textElement.text + resultantText;\n textElement = (!isNullOrUndefined(textElement.previousNode)) ? textElement.previousNode.previousValidNodeForTracking : undefined;\n }\n }\n return resultantText;\n };\n Editor.prototype.checkToCombineRevisionsinBlocks = function (tempSpan, checkWidget, isEnd, revisionType) {\n if (!checkWidget || !this.owner.enableTrackChanges) {\n return;\n }\n // if (tempSpan instanceof FieldElementBox && tempSpan.fieldType === 2) {\n // return;\n // }\n if (tempSpan instanceof BookmarkElementBox || tempSpan instanceof CommentCharacterElementBox || tempSpan instanceof EditRangeStartElementBox || tempSpan instanceof EditRangeEndElementBox) {\n return;\n }\n var isCombined = false;\n if (isEnd) {\n isCombined = this.combineRevisionWithNextPara(tempSpan, revisionType);\n }\n else {\n isCombined = this.combineRevisionWithPrevPara(tempSpan, revisionType);\n }\n if (!isCombined) {\n this.insertRevision(tempSpan, revisionType);\n }\n };\n Editor.prototype.checkToMapRevisionWithNextNode = function (inline, tempSpan, isBidi, revisionType, inlinePara) {\n if (!isNullOrUndefined(inlinePara) && inlinePara.characterFormat.revisions.length == 1) {\n var nextElementPara = inlinePara.characterFormat;\n if (!isNullOrUndefined(nextElementPara)) {\n return this.checkToMapRevisionWithInlineText(undefined, 0, tempSpan, isBidi, revisionType, nextElementPara);\n }\n return false;\n }\n if (isNullOrUndefined(inline)) {\n return false;\n }\n var nextElement = inline.nextValidNodeForTracking;\n if (!isNullOrUndefined(nextElement)) {\n return this.checkToMapRevisionWithInlineText(nextElement, 0, tempSpan, isBidi, revisionType);\n }\n return false;\n };\n Editor.prototype.checkToMapRevisionWithPreviousNode = function (inline, tempSpan, isBidi, revisionType) {\n if (isNullOrUndefined(inline)) {\n return false;\n }\n var prevElement = inline.previousValidNodeForTracking;\n if (!isNullOrUndefined(prevElement)) {\n return this.checkToMapRevisionWithInlineText(prevElement, prevElement.length, tempSpan, isBidi, revisionType);\n }\n return false;\n };\n Editor.prototype.checkToMapRevisionWithInlineText = function (inline, indexInInline, newElement, isBidi, revisionType, inlinePara) {\n if (!isNullOrUndefined(inlinePara)) {\n if (revisionType === 'Deletion') {\n this.updateLastElementRevision(newElement);\n }\n if (!isNullOrUndefined(inlinePara) && inlinePara.revisions.length > 0) {\n return this.applyMatchedRevisionInorder(undefined, newElement, indexInInline, true, isBidi, revisionType, inlinePara);\n }\n }\n else if (!isNullOrUndefined(inline)) {\n if (revisionType === 'Deletion') {\n this.updateLastElementRevision(newElement);\n }\n if (inline.length === indexInInline && inline.previousValidNodeForTracking != undefined) {\n inline = inline.previousValidNodeForTracking;\n indexInInline = inline.length;\n if (inline.revisions.length > 0) {\n return this.applyMatchedRevisionInorder(inline, newElement, indexInInline, false, isBidi, revisionType);\n }\n }\n else if (indexInInline === 0) {\n inline = inline.nextValidNodeForTracking;\n if (!isNullOrUndefined(inline) && inline.revisions.length > 0) {\n return this.applyMatchedRevisionInorder(inline, newElement, indexInInline, true, isBidi, revisionType);\n }\n }\n }\n return false;\n };\n Editor.prototype.combineElementRevisions = function (inline, elementToCombine) {\n if (inline.revisions.length === 0 || elementToCombine.revisions.length === 0) {\n return;\n }\n for (var i = 0; i < inline.revisions.length; i++) {\n var prevRevision = inline.revisions[i];\n for (var j = 0; j < elementToCombine.revisions.length; j++) {\n var currentRevision = elementToCombine.revisions[i];\n if (prevRevision.range.indexOf(elementToCombine) === -1 && currentRevision.revisionType === prevRevision.revisionType && currentRevision.author === prevRevision.author) {\n elementToCombine.revisions.splice(j, 1);\n prevRevision.range.push(elementToCombine);\n elementToCombine.revisions.splice(j, 0, prevRevision);\n this.owner.trackChangesPane.updateCurrentTrackChanges(prevRevision);\n }\n }\n }\n };\n Editor.prototype.applyMatchedRevisionInorder = function (inline, newElement, indexInInline, isBegin, isBidi, revisionType, inlinePara) {\n var revisionsMatched;\n if (!isNullOrUndefined(inlinePara) && isNullOrUndefined(inline)) {\n revisionsMatched = this.getMatchedRevisionsToCombine(inlinePara.revisions, revisionType);\n if (revisionsMatched.length > 0) {\n this.mapMatchedRevisions(revisionsMatched, inlinePara, newElement, isBegin);\n }\n return false;\n }\n else {\n revisionsMatched = this.getMatchedRevisionsToCombine(inline.revisions, revisionType);\n if (revisionsMatched.length > 0) {\n this.mapMatchedRevisions(revisionsMatched, inline, newElement, isBegin);\n }\n return false;\n }\n };\n Editor.prototype.copyElementRevision = function (elementToCopy, elementToInclude, isSplitElementMerged) {\n if (!this.isTrackingFormField) {\n for (var i = 0; i < elementToCopy.revisions.length; i++) {\n var currentRevision = elementToCopy.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(elementToCopy);\n elementToInclude.revisions.splice(0, 0, currentRevision);\n currentRevision.range.splice(rangeIndex + ((isSplitElementMerged) ? 2 : 1), 0, elementToInclude);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.mapMatchedRevisions = function (revisions, revisionElement, elementToInclude, isBegin) {\n for (var i = 0; i < revisions.length; i++) {\n var currentRevision = revisions[i];\n if (!this.isRevisionAlreadyIn(elementToInclude, currentRevision) || elementToInclude instanceof WCharacterFormat) {\n elementToInclude.revisions.splice(0, 0, currentRevision);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && this.editorHistory.currentBaseHistoryInfo.markerData.length === 0) {\n this.editorHistory.currentBaseHistoryInfo.markerData.push(this.getMarkerData(undefined, undefined, currentRevision));\n }\n if (elementToInclude instanceof FootnoteElementBox) {\n this.insertRevisionForFootnoteWidget(elementToInclude, currentRevision);\n }\n var rangeIndex = currentRevision.range.indexOf(revisionElement);\n currentRevision.range.splice((isBegin) ? rangeIndex : rangeIndex + 1, 0, elementToInclude);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n }\n };\n Editor.prototype.isRevisionAlreadyIn = function (element, revision) {\n if (element.revisions.length > 0) {\n for (var i = 0; i < element.revisions.length; i++) {\n var elementRevision = element.revisions[i];\n if (elementRevision.revisionID === revision.revisionID) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.getMatchedRevisionsToCombine = function (revisions, revisionType) {\n var matchedRevisions = [];\n for (var i = 0; i < revisions.length; i++) {\n if (this.isRevisionMatched(revisions[i], revisionType)) {\n matchedRevisions.push(revisions[i]);\n }\n }\n return matchedRevisions;\n };\n Editor.prototype.decideInlineForTrackChanges = function (inline, revisionType) {\n var matched = false;\n if (this.owner.enableTrackChanges && !this.canInsertRevision(inline, revisionType)) {\n var currentElement = inline.nextValidNodeForTracking;\n if (!isNullOrUndefined(currentElement) && this.canInsertRevision(currentElement, revisionType)) {\n inline = currentElement;\n matched = true;\n }\n }\n return { 'element': inline, 'isMatched': matched };\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.insertIMEText = function (text, isUpdate) {\n if (this.documentHelper.lastComposedText === text && isUpdate) {\n return;\n }\n // Clone selection start position\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n var startPosition = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n // Insert IME text in current selection\n this.insertText(text);\n this.documentHelper.lastComposedText = text;\n // update selection start\n var start = this.selection.start;\n this.setPositionForCurrentIndex(start, startPosition);\n // Update selection end\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionForLineWidget(start.currentWidget, start.offset + text.length);\n if (this.owner.enableTrackChanges) {\n if (!isUpdate) {\n this.selection.start.setPositionInternal(this.selection.end);\n }\n this.selection.end.updatePhysicalPosition(true);\n }\n else {\n this.selection.selectPosition(isUpdate ? start : endPosition, endPosition);\n }\n };\n /**\n * Inserts the section break at cursor position with specified section break type.\n *\n * @param {SectionBreakType} sectionBreakType Specifies the section break type.\n * > If this parameter is not set, it inserts the section break of type new page.\n * @returns {void}\n */\n Editor.prototype.insertSectionBreak = function (sectionBreakType) {\n if (isNullOrUndefined(sectionBreakType)) {\n sectionBreakType = SectionBreakType.NewPage;\n }\n var selection = this.documentHelper.selection;\n if (isNullOrUndefined(selection) || this.owner.isReadOnlyMode || selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n if (sectionBreakType === SectionBreakType.Continuous) {\n this.initHistory('SectionBreakContinuous');\n }\n else {\n this.initHistory('SectionBreak');\n }\n if (!selection.isEmpty) {\n selection.selectContent(selection.isForward ? selection.start : selection.end, true);\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n if (sectionBreakType === SectionBreakType.Continuous) {\n this.documentHelper.layout.isSectionBreakCont = true;\n this.insertSection(selection, true, undefined, true);\n }\n else {\n this.insertSection(selection, true, undefined, undefined, true);\n }\n this.updateEndPosition();\n this.reLayout(selection, true);\n //if (this.owner.layoutType === 'Continuous') {\n this.layoutWholeDocument(true);\n //} \n this.documentHelper.layout.isSectionBreakCont = false;\n };\n Editor.prototype.combineRevisionWithBlocks = function (elementBox, revisionType) {\n if (!this.owner.enableTrackChanges || isNullOrUndefined(elementBox)) {\n return;\n }\n while (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof ListTextElementBox) {\n elementBox = elementBox.nextElement;\n }\n if (isNullOrUndefined(elementBox)) {\n return;\n }\n var prevPara = (elementBox instanceof ParagraphWidget ? elementBox.previousRenderedWidget : elementBox.paragraph.previousRenderedWidget);\n if (prevPara instanceof TableWidget) {\n return;\n }\n var isNew = true;\n var currentElement;\n if (elementBox instanceof ParagraphWidget) {\n currentElement = elementBox.characterFormat;\n }\n else {\n currentElement = elementBox;\n }\n if (!isNullOrUndefined(prevPara) && prevPara.characterFormat.revisions.length > 0) {\n var lastLine = prevPara.lastChild;\n if (isNullOrUndefined(lastLine) || lastLine.children.length === 0) {\n return;\n }\n var lastElement_1 = lastLine.children[lastLine.children.length - 1];\n while (lastElement_1 instanceof BookmarkElementBox || lastElement_1 instanceof CommentCharacterElementBox || lastElement_1 instanceof ListTextElementBox) {\n lastElement_1 = lastElement_1.previousElement;\n }\n if (prevPara.isEmpty()) {\n lastElement_1 = prevPara.characterFormat;\n }\n if (lastElement_1.revisions.length > 0) {\n if (this.compareElementRevision(prevPara.characterFormat, currentElement)) {\n var currentRevision = currentElement.revisions[currentElement.revisions.length - 1];\n if (this.compareElementRevision(lastElement_1, currentElement)) {\n var lastElementRevision = lastElement_1.revisions[lastElement_1.revisions.length - 1];\n isNew = false;\n if (currentRevision !== lastElementRevision) {\n this.clearAndUpdateRevisons(currentRevision.range, lastElementRevision, lastElementRevision.range.indexOf(lastElement_1) + 1);\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n }\n }\n var lastElement;\n if (elementBox instanceof ParagraphWidget) {\n lastElement = elementBox.characterFormat;\n }\n else {\n var lastLine = elementBox.paragraph.lastChild;\n while (lastLine.children.length == 0 && !isNullOrUndefined(lastLine.previousLine)) {\n // in case there was a line break and last line doesn't have any children\n lastLine = lastLine.previousLine;\n }\n lastElement = lastLine.children[lastLine.children.length - 1];\n elementBox = lastElement == undefined ? elementBox : lastElement;\n }\n var nextPara = (elementBox instanceof ParagraphWidget ? elementBox.nextRenderedWidget : elementBox.paragraph.nextRenderedWidget);\n if (nextPara instanceof TableWidget) {\n return;\n }\n if (!isNullOrUndefined(nextPara)) {\n // let lastLine: LineWidget = elementBox.paragraph.lastChild as LineWidget;\n // let lastElement: ElementBox = lastLine.children[lastLine.children.length - 1];\n var firstLine = nextPara.firstChild;\n var firstElement = firstLine.children[0];\n while (firstElement instanceof BookmarkElementBox || firstElement instanceof CommentCharacterElementBox || firstElement instanceof ListTextElementBox) {\n firstElement = firstElement.nextElement;\n }\n if (nextPara.isEmpty()) {\n firstElement = nextPara.characterFormat;\n }\n if (isNullOrUndefined(firstElement)) {\n return;\n }\n if (firstElement.revisions.length > 0) {\n var firstEleRevision = firstElement.revisions[firstElement.revisions.length - 1];\n if (this.compareElementRevision(currentElement, firstElement)) {\n if (this.compareElementRevision(currentElement, firstElement)) {\n var lastElementRevision = currentElement.revisions[currentElement.revisions.length - 1];\n isNew = false;\n if (firstEleRevision !== lastElementRevision) {\n this.clearAndUpdateRevisons(lastElementRevision.range, firstEleRevision, 0, true);\n this.owner.revisions.remove(lastElementRevision);\n }\n }\n }\n }\n }\n if (elementBox instanceof ElementBox && elementBox.revisions.length === 0) {\n this.insertRevision(elementBox, revisionType);\n }\n };\n Editor.prototype.checkToCombineRevisionWithNextPara = function (elementBox, revisionType) {\n var nextPara = elementBox.paragraph.nextRenderedWidget;\n if (nextPara instanceof TableWidget) {\n return false;\n }\n if (!isNullOrUndefined(nextPara) && !nextPara.isEmpty()) {\n var firstLine = nextPara.firstChild;\n var firstElement = firstLine.children[0];\n while (firstElement instanceof BookmarkElementBox || firstElement instanceof CommentCharacterElementBox) {\n firstElement = firstElement.previousElement;\n }\n if (isNullOrUndefined(firstElement)) {\n return false;\n }\n if (firstElement.revisions.length > 0) {\n var mappedRevisions = this.getMatchedRevisionsToCombine(firstElement.revisions, revisionType);\n if (mappedRevisions.length > 0) {\n this.mapMatchedRevisions(mappedRevisions, firstElement, elementBox, true);\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkToCombineRevisionWithPrevPara = function (elementBox, revisionType) {\n var prevPara = elementBox.paragraph.previousRenderedWidget;\n if (prevPara instanceof TableWidget) {\n return false;\n }\n if (!isNullOrUndefined(prevPara) && prevPara.characterFormat.revisions.length > 0) {\n if (!this.isRevisionMatched(prevPara.characterFormat, revisionType)) {\n return false;\n }\n // let firstLine: LineWidget = prevPara.firstChild as LineWidget;\n // let lastLine: LineWidget = prevPara.lastChild as LineWidget;\n // if (isNullOrUndefined(lastLine) || lastLine.children.length === 0) {\n // return false;\n // }\n // let lastElement: ElementBox = lastLine.children[lastLine.children.length - 1];\n // if (lastElement instanceof BookmarkElementBox || lastElement instanceof CommentCharacterElementBox) {\n // lastElement = lastElement.previousValidNodeForTracking;\n // }\n // if (isNullOrUndefined(lastElement)) {\n // return false;\n // }\n // if (lastElement.revisions.length > 0) {\n var mappedRevisions = this.getMatchedRevisionsToCombine(prevPara.characterFormat.revisions, revisionType);\n if (mappedRevisions.length > 0) {\n this.mapMatchedRevisions(mappedRevisions, prevPara.characterFormat, elementBox, false);\n return true;\n }\n // }\n }\n return false;\n };\n Editor.prototype.combineRevisionWithNextPara = function (elementBox, revisionType) {\n var isLastLine = elementBox.line.isLastLine();\n var nextElement = elementBox.nextNode;\n if (isLastLine && isNullOrUndefined(nextElement)) {\n return this.checkToCombineRevisionWithNextPara(elementBox, revisionType);\n }\n return false;\n };\n Editor.prototype.combineRevisionWithPrevPara = function (elementBox, revisionType) {\n var isFirstLine = elementBox.line.isFirstLine();\n var prevElement = elementBox.previousNode;\n if (isFirstLine && isNullOrUndefined(prevElement)) {\n return this.checkToCombineRevisionWithPrevPara(elementBox, revisionType);\n }\n return false;\n };\n /**\n * Removes the specified revision from the document.\n *\n * @param revisionToRemove Specify the revision to be removed.\n * @returns {void}\n */\n Editor.prototype.removeRevision = function (revisionToRemove) {\n var elementInfo = this.selection.start.currentWidget.getInline(this.selection.start.offset + 1, 0);\n var elementBox = elementInfo.element;\n if (elementInfo.element.revisions.length > 0) {\n for (var i = 0; i < elementBox.revisions.length; i++) {\n if (elementBox.revisions[i].revisionType === revisionToRemove.revisionType) {\n var revision = elementBox.revisions[i];\n var startIndex = revision.range.indexOf(elementBox);\n for (var j = startIndex; startIndex < revision.range.length; startIndex++) {\n revision.range[j].revisions.splice(i, 1);\n revision.range.splice(j, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n }\n }\n }\n }\n };\n /**\n * Clears the specified revision from the document.\n *\n * @param revision Specify the revision to clear from the document.\n * @returns {void}\n */\n Editor.prototype.clearElementRevision = function (revision) {\n if (isNullOrUndefined(revision)) {\n return;\n }\n for (var i = 0; i < revision.range.length; i++) {\n if (revision.range[i] instanceof ElementBox) {\n var currentElement = revision.range[i];\n currentElement.revisions.splice(currentElement.revisions.length - 1, 1);\n revision.range.splice(i, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.insertRevision = function (item, type, author, date, spittedRange, skip, parseRevisionId) {\n if (this.isRemoteAction && isNullOrUndefined(this.revisionData) && !this.documentHelper.owner.parser.isPaste) {\n return undefined;\n }\n var revisionId;\n if (!isNullOrUndefined(parseRevisionId)) {\n revisionId = parseRevisionId;\n }\n if (!isNullOrUndefined(this.revisionData) && this.revisionData.length > 0) {\n var newRevisionData = this.revisionData.pop();\n author = newRevisionData.author;\n date = newRevisionData.date;\n revisionId = newRevisionData.revisionId;\n }\n author = !isNullOrUndefined(author) ? author : this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n var currentDate = !isNullOrUndefined(date) ? date : HelperMethods.getUtcDate();\n if (item instanceof ElementBox && !isNullOrUndefined(item.line) && item.line.paragraph.associatedCell || (item instanceof WCharacterFormat && item.ownerBase instanceof ParagraphWidget && item.ownerBase.associatedCell)) {\n var cellWidget = undefined;\n if (item instanceof ElementBox) {\n cellWidget = item.line.paragraph.associatedCell;\n }\n else if (item instanceof WCharacterFormat) {\n cellWidget = item.ownerBase.associatedCell;\n }\n if (cellWidget.ownerRow.rowFormat.revisions.length > 0) {\n var rowFormat = cellWidget.ownerRow.rowFormat;\n var matchedRevisions = this.getMatchedRevisionsToCombine(rowFormat.revisions, type);\n if (matchedRevisions.length > 0) {\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.markerData.length === 0) {\n this.editorHistory.currentBaseHistoryInfo.markerData.push(this.getMarkerData(undefined, undefined, matchedRevisions[0]));\n }\n for (var i = 0; i < matchedRevisions.length; i++) {\n item.revisions.splice(0, 0, matchedRevisions[i]);\n matchedRevisions[i].range.push(item);\n }\n return undefined;\n }\n }\n }\n var revision = new Revision(this.owner, author, currentDate);\n revision.revisionType = type;\n if (this.owner.enableCollaborativeEditing && this.isRemoteAction && !isNullOrUndefined(revisionId) && revisionId != '') {\n revision.revisionID = revisionId;\n }\n else {\n revision.revisionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n }\n if (this.owner.enableCollaborativeEditing && !isNullOrUndefined(this.getRevision(revision.revisionID))) {\n revision = this.getRevision(revision.revisionID);\n }\n if (!isNullOrUndefined(spittedRange) && spittedRange.length > 0) {\n this.clearAndUpdateRevisons(spittedRange, revision, spittedRange.indexOf(item));\n }\n if (!isNullOrUndefined(item)) {\n if (item instanceof FootnoteElementBox) {\n this.insertRevisionForFootnoteWidget(item, revision);\n }\n if (this.owner.enableCollaborativeEditing && !isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && !skip) {\n this.editorHistory.currentBaseHistoryInfo.markerData.splice(0, 0, this.getMarkerData(item, undefined, revision));\n }\n item.revisions.push(revision);\n revision.range.push(item);\n }\n if (this.isRemoteAction && this.documentHelper.owner.parser.isPaste) {\n this.remotePasteRevision.push(revision);\n }\n else {\n this.updateRevisionCollection(revision);\n }\n return revision;\n };\n Editor.prototype.insertRevisionForFootnoteWidget = function (element, revision) {\n var blocks = element.bodyWidget.childWidgets;\n this.skipFootNoteDeleteTracking = true;\n for (var j = 0; j < blocks.length; j++) {\n this.insertRevisionForBlock(blocks[j], revision.revisionType, false, revision);\n }\n this.skipFootNoteDeleteTracking = false;\n };\n /**\n * Method help to clear previous revisions and include new revision at specified index\n *\n * @param range - range of elements to be cleared\n * @param revision - revision to be inserted\n * @param index - index at which to be included in the revision range\n * @returns {void}\n */\n Editor.prototype.clearAndUpdateRevisons = function (range, revision, index, isReverse) {\n if (revision.range.filter(function (range) { return range instanceof WCharacterFormat; })) {\n index += 1;\n }\n var j = 0;\n for (var i = 0; i < range.length; i++) {\n if (range[i] instanceof ElementBox || range[i] instanceof WCharacterFormat) {\n var currentElement = range[i];\n var isSameRange = false;\n if (currentElement.revisions[currentElement.revisions.length - 1].range === range) {\n currentElement.revisions[currentElement.revisions.length - 1].range.splice(currentElement.revisions.length - 1, 1);\n isSameRange = true;\n }\n currentElement.revisions.splice(currentElement.revisions.length - 1, 1);\n currentElement.revisions.push(revision);\n revision.range.splice(isReverse ? j : index + j, 0, currentElement);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n if (isSameRange) {\n i--;\n }\n j++;\n }\n }\n };\n Editor.prototype.splitRevisionByElement = function (item, revision) {\n if (item.revisions.length > 0) {\n var range = revision.range;\n var index = range.indexOf(item);\n revision.range = range.splice(0, index + 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n return range;\n }\n return undefined;\n };\n /**\n * Method to update revision for the splitted text element\n * @param inline - Original text element\n * @param splittedSpan - Splitted element\n */\n Editor.prototype.updateRevisionForSpittedTextElement = function (inline, splittedSpan) {\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.splittedRevisions = [];\n }\n for (var i = 0; i < inline.revisions.length; i++) {\n var revision = inline.revisions[i];\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var splittedRange = this.splitRevisionByElement(inline, revision);\n var splittedRevision = this.insertRevision(splittedSpan, revision.revisionType, revision.author, revision.date, splittedRange, true);\n if (!this.isRemoteAction) {\n this.editorHistory.currentBaseHistoryInfo.splittedRevisions.push(this.getMarkerData(undefined, undefined, this.getRevision(splittedRevision.revisionID)));\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.getRevision = function (revisionId) {\n for (var i = 0; i < this.owner.documentHelper.revisionsInternal.length; i++) {\n var revision = this.owner.documentHelper.revisionsInternal.keys[i];\n if (revision === revisionId) {\n return this.owner.documentHelper.revisionsInternal.get(revision);\n }\n }\n return undefined;\n };\n Editor.prototype.isRevisionMatched = function (item, type) {\n var author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n if (item instanceof Revision) {\n if ((isNullOrUndefined(type) || type === item.revisionType) && item.author === author) {\n return true;\n }\n }\n else if (item.revisions.length > 0) {\n for (var i = 0; i < item.revisions.length; i++) {\n var elementRevision = item.revisions[i];\n if ((isNullOrUndefined(type) || type === elementRevision.revisionType) && elementRevision.author === author) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.compareElementRevision = function (element, compare) {\n if (element.revisions.length === 0 || compare.revisions.length === 0) {\n return false;\n }\n for (var i = 0; i < element.revisions.length; i++) {\n var currentRevision = element.revisions[i];\n for (var j = 0; j < compare.revisions.length; j++) {\n if (currentRevision.author === compare.revisions[j].author && currentRevision.revisionType === compare.revisions[j].revisionType) {\n return true;\n }\n }\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.canInsertRevision = function (item, type) {\n var revisionType = isNullOrUndefined(type) ? 'Insertion' : type;\n if (revisionType === 'Deletion') {\n return false;\n }\n if (this.owner.enableTrackChanges) {\n return this.isRevisionMatched(item, revisionType);\n //if it has revision\n }\n else if (item.revisions.length > 0) {\n return false;\n }\n return true;\n };\n Editor.prototype.insertRevisionAtEnd = function (item, newElement, revisionType) {\n if (newElement instanceof BookmarkElementBox || newElement instanceof CommentCharacterElementBox || newElement instanceof EditRangeStartElementBox || newElement instanceof EditRangeEndElementBox) {\n return false;\n }\n item = item.previousValidNodeForTracking;\n if (isNullOrUndefined(item)) {\n return false;\n }\n return this.insertRevisionAtPosition(item, newElement, true, revisionType);\n };\n Editor.prototype.insertRevisionAtPosition = function (item, newElement, isEnd, revisionType) {\n // if (newElement instanceof FieldElementBox && (newElement as FieldElementBox).fieldType === 2) {\n // return false;\n // }\n var prevRevisionLength = newElement.revisions.length;\n var isRevisionCombined = this.checkToMapRevisionWithInlineText(item, (isEnd) ? item.length : 0, newElement, false, revisionType);\n // Check to combine with previous and next element\n if (isEnd) {\n if (!isRevisionCombined && newElement.revisions.length === prevRevisionLength) {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(item.nextNode, newElement, false, revisionType);\n }\n }\n else {\n if (!isRevisionCombined && newElement.revisions.length === prevRevisionLength) {\n isRevisionCombined = this.checkToMapRevisionWithPreviousNode(item.previousNode, newElement, false, revisionType);\n }\n }\n return isRevisionCombined;\n };\n Editor.prototype.insertRevisionAtBegining = function (item, newElement, revisionType) {\n if (newElement instanceof BookmarkElementBox || newElement instanceof CommentCharacterElementBox || newElement instanceof EditRangeStartElementBox || newElement instanceof EditRangeEndElementBox) {\n return false;\n }\n item = item.nextValidNodeForTracking;\n if (isNullOrUndefined(item)) {\n return false;\n }\n return this.insertRevisionAtPosition(item, newElement, false, revisionType);\n };\n Editor.prototype.splitRevisionForSpittedElement = function (element, spittedElement) {\n for (var i = element.revisions.length - 1; i >= 0; i--) {\n var revision = element.revisions[i];\n var splittedRange = this.splitRevisionByElement(element, revision);\n this.insertRevision(spittedElement, revision.revisionType, revision.author, revision.date, splittedRange);\n }\n };\n /**\n * Method to combine element revision if not inserts new revision\n */\n // private checkToCombineRevision(element: ElementBox, newElement: ElementBox, revisionType: RevisionType): boolean {\n // let isCombined: boolean = false;\n // if (this.isRevisionMatched(element, revisionType)) {\n // isCombined = true;\n // this.combineElementRevision(element, newElement, true);\n // } else {\n // this.insertRevision(newElement, revisionType);\n // }\n // return isCombined;\n // }\n Editor.prototype.combineElementRevision = function (currentElementRevisions, elementToCombine, isReverse) {\n for (var i = 0; i < currentElementRevisions.length; i++) {\n for (var j = 0; j < elementToCombine.length; j++) {\n var currentRevision = currentElementRevisions[i];\n var revisionToCombine = elementToCombine[j];\n if (currentRevision.author === revisionToCombine.author && currentRevision.revisionType === revisionToCombine.revisionType) {\n var rangeLength = revisionToCombine.range.length;\n for (var k = 0; k < rangeLength; k++) {\n var item = revisionToCombine.range[0];\n item.revisions.splice(item.revisions.indexOf(revisionToCombine), 1);\n revisionToCombine.range.splice(0, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revisionToCombine);\n var insertIndex = -1;\n if (isReverse) {\n if (item instanceof TextElementBox && item.indexInOwner === 0 && item.line.indexInOwner === 0 && !isNullOrUndefined(item.paragraph.previousWidget) && item.paragraph.previousWidget instanceof ParagraphWidget) {\n insertIndex = currentRevision.range.indexOf(item.paragraph.previousWidget.characterFormat);\n }\n else if (item instanceof TextElementBox && item.indexInOwner !== 0 && !isNullOrUndefined(item.previousElement)) {\n insertIndex = currentRevision.range.indexOf(item.previousElement);\n }\n else if (item instanceof WCharacterFormat && !item.ownerBase.isEmpty()) {\n var element = item.ownerBase.lastChild.children[item.ownerBase.lastChild.children.length - 1];\n insertIndex = currentRevision.range.indexOf(element);\n }\n }\n if (insertIndex !== -1) {\n currentRevision.range.splice(insertIndex + 1, 0, item);\n }\n else {\n isReverse ? currentRevision.range.splice(k, 0, item) : currentRevision.range.push(item);\n }\n // Create the new currentChangeView if the current element contains revisions but is not present in the pane case.\n var currentChangeView = void 0;\n if (!isNullOrUndefined(currentRevision)) {\n currentChangeView = this.owner.trackChangesPane.changes.get(currentRevision);\n }\n if (isNullOrUndefined(currentChangeView) && currentRevision.range.length > 0) {\n this.updateRevisionCollection(currentRevision);\n }\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n item.revisions.push(currentRevision);\n }\n if (revisionToCombine.range.length === 0) {\n this.owner.revisions.remove(revisionToCombine);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.removeMarkerInfoRevision(revisionToCombine.revisionID, this.editorHistory.currentBaseHistoryInfo.markerData);\n }\n }\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeMarkerInfoRevision = function (revisionID, markerInfo) {\n for (var i = 0; i < markerInfo.length; i++) {\n if (!isNullOrUndefined(markerInfo[i].revisionId) && markerInfo[i].revisionId === revisionID) {\n markerInfo.splice(markerInfo.indexOf(markerInfo[i]), 1);\n }\n }\n };\n Editor.prototype.combineRevisions = function (block, startPosition, endposition) {\n if (!this.owner.enableTrackChanges) {\n return;\n }\n var info = this.selection.getLineInfo(block, startPosition.offset);\n var elementInfo = info.line.getInline(startPosition.offset, 0);\n var currentElement = elementInfo.element;\n if (currentElement.revisions.length > 0) {\n if (this.isRevisionMatched(currentElement, 'Insertion')) {\n var nextElement = currentElement.nextElement;\n if (!isNullOrUndefined(nextElement) && nextElement.revisions.length > 0) {\n var revision = currentElement.revisions[currentElement.revisions.length - 1];\n var range = nextElement.revisions[nextElement.revisions.length - 1].range;\n if (revision !== nextElement.revisions[nextElement.revisions.length - 1]) {\n this.clearAndUpdateRevisons(range, revision, revision.range.indexOf(currentElement) + 1);\n }\n }\n }\n }\n // let startOffset: number = startPosition.currentWidget.getOffset(firstElement, 0);\n // let endOffset: number = endposition.currentWidget.getOffset(lastElement, 0);\n };\n Editor.prototype.handleDeleteTrackingForParaMark = function (elementBox) {\n var isRevisionInserted = false;\n if (elementBox.revisions.length > 0) {\n var revision = this.retrieveRevisionInOder(elementBox);\n var index = this.owner.revisions.changes.indexOf(revision);\n if (revision.revisionType === 'Deletion') {\n if (index !== -1 && revision.author !== this.owner.currentUser && revision.range.length > 0) {\n isRevisionInserted = true;\n var range = revision.range;\n range.splice(range.indexOf(elementBox), 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n elementBox.revisions.splice(elementBox.revisions.indexOf(revision), 1);\n this.insertRevision(elementBox, 'Deletion');\n if (this.owner.revisions.changes.indexOf(revision) !== -1 && revision.range.length === 0) {\n this.owner.revisions.changes.splice(index, 1);\n }\n }\n }\n }\n if (!isRevisionInserted) {\n this.insertRevision(elementBox, 'Deletion');\n }\n };\n /**\n * Method to update the revision for whole block\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.insertRevisionForBlock = function (widget, revisionType, isTOC, revision, skipReLayout, isRemoveInline) {\n if (widget.childWidgets.length === 0 || !this.owner.enableTrackChanges) {\n return;\n }\n if (revisionType === 'Deletion' && !this.editorHistory.isUndoing) {\n var editPostion = this.selection.editPosition;\n var start = this.selection.start.clone();\n var end = this.selection.end.clone();\n this.documentHelper.layout.clearListElementBox(widget);\n var isLastChild = (widget == this.getLastParaForBodywidgetCollection(widget));\n var nextParagraph = this.selection.getNextParagraphBlock(widget);\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n var endParagraphInfo = this.selection.getParagraphInfo(this.selection.end);\n var startIndex = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var endIndex = this.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n if (widget.isInsideTable && widget == this.selection.getLastParagraph(widget.associatedCell)) {\n isLastChild = true;\n }\n if (!isLastChild && !widget.isInsideTable && !(isNullOrUndefined(nextParagraph) && widget.isEmpty()) && !isRemoveInline) {\n // Added the condition to remove section if current and next para have different section indexes if selection is covered till the end of section.\n if (!isNullOrUndefined(nextParagraph) && !nextParagraph.isInsideTable && widget.bodyWidget.sectionIndex !== nextParagraph.bodyWidget.sectionIndex) {\n this.addRemovedNodes(widget.bodyWidget);\n }\n if (!isNullOrUndefined(this.owner.editorHistoryModule) && !isNullOrUndefined(this.owner.editorHistoryModule.currentBaseHistoryInfo)) {\n this.owner.editorHistoryModule.currentBaseHistoryInfo.recordInsertRevisionDeletetion(widget);\n }\n this.addRemovedNodes(widget.clone());\n this.handleDeleteTrackingForParaMark(widget.characterFormat);\n }\n else if (!isLastChild && widget.isInsideTable && start.paragraph.isInsideTable && end.paragraph.isInsideTable && end.offset <= end.paragraph.getLength() && end.paragraph.associatedCell.index === start.paragraph.associatedCell.index) {\n if (!isNullOrUndefined(this.owner.editorHistoryModule) && !isNullOrUndefined(this.owner.editorHistoryModule.currentBaseHistoryInfo)) {\n this.owner.editorHistoryModule.currentBaseHistoryInfo.recordInsertRevisionDeletetion(widget);\n }\n this.addRemovedNodes(widget.clone());\n this.handleDeleteTrackingForParaMark(widget.characterFormat);\n }\n for (var i = widget.childWidgets.length - 1; i > -1; i--) {\n var line = (widget.childWidgets[i]);\n this.removeContent(line, 0, this.documentHelper.selection.getLineLength(line), undefined, isRemoveInline ? false : !isLastChild);\n }\n if (widget.isEmpty() && this.selection.end.paragraph === widget && isLastChild && !isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endRevisionLogicalIndex = this.selection.endOffset;\n }\n var lastLine = widget.lastChild;\n while (lastLine.children.length == 0 && !isNullOrUndefined(lastLine.previousLine)) {\n // in case there was a line break and last line doesn't have any children\n lastLine = lastLine.previousLine;\n }\n if (lastLine.children.length > 0) {\n var lastEle = lastLine.children[lastLine.children.length - 1];\n this.combineElementRevision(widget.characterFormat.revisions, lastEle.revisions, true);\n }\n this.selection.editPosition = editPostion;\n this.selection.start.setPositionInternal(start);\n this.selection.end.setPositionInternal(end);\n // let textPosition: TextPosition = this.selection.getTextPosBasedOnLogicalIndex(editPostion);\n // this.selection.selectContent(textPosition, true);\n this.removeEmptyLine(widget);\n if (!skipReLayout) {\n this.documentHelper.layout.reLayoutParagraph(widget, 0, 0);\n if (this.selection.start.currentWidget.indexInOwner === -1) {\n var startPos = this.selection.getTextPosBasedOnLogicalIndex(startIndex);\n this.selection.start.setPositionInternal(startPos);\n }\n if (this.selection.end.currentWidget.indexInOwner === -1) {\n var endPos = this.selection.getTextPosBasedOnLogicalIndex(endIndex);\n this.selection.end.setPositionInternal(endPos);\n }\n }\n }\n else {\n var skipParaMark = false;\n if (isNullOrUndefined(revision)) {\n var author = this.owner.currentUser ? this.owner.currentUser : 'Guest user';\n revision = new Revision(this.owner, author, HelperMethods.getUtcDate());\n revision.revisionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n revision.revisionType = revisionType;\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n var elemets = widget.childWidgets[i].children;\n if (elemets.length === 0) {\n var paraIndex = widget.containerWidget.childWidgets.indexOf(widget);\n var prevWidget = undefined;\n if (paraIndex > 0) {\n prevWidget = widget.containerWidget.childWidgets[paraIndex - 1];\n }\n if (!isNullOrUndefined(prevWidget) && prevWidget instanceof ParagraphWidget && prevWidget.characterFormat.revisions.length > 0) {\n if (this.isRevisionMatched(prevWidget.characterFormat, revisionType)) {\n var mappedRevisions = this.getMatchedRevisionsToCombine(prevWidget.characterFormat.revisions, revisionType);\n if (mappedRevisions.length > 0) {\n this.mapMatchedRevisions(mappedRevisions, prevWidget.characterFormat, widget.characterFormat, false);\n skipParaMark = true;\n revision = undefined;\n }\n }\n }\n }\n for (var j = 0; j < elemets.length; j++) {\n if (j === 0 && !isTOC) {\n var prevRevisionCount = elemets[i].revisions.length;\n this.checkToCombineRevisionsinBlocks(elemets[i], true, false, 'Insertion');\n if (elemets[i].revisions.length > prevRevisionCount) {\n revision = elemets[i].revisions[elemets[i].revisions.length - 1];\n }\n else {\n elemets[j].revisions.push(revision);\n revision.range.push(elemets[j]);\n }\n }\n else {\n elemets[j].revisions.push(revision);\n revision.range.push(elemets[j]);\n }\n }\n }\n if (!isTOC && !skipParaMark) {\n widget.characterFormat.revisions.push(revision);\n revision.range.push(widget.characterFormat);\n }\n if (!isNullOrUndefined(revision)) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n this.updateRevisionCollection(revision);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.getLastParaForBodywidgetCollection = function (widget) {\n var bodywidget = widget.containerWidget;\n if (bodywidget.containerWidget instanceof FootNoteWidget) {\n return bodywidget.childWidgets[bodywidget.childWidgets.length - 1];\n }\n var lastPage = this.documentHelper.pages[this.documentHelper.pages.length - 1];\n var lastBodyWidget = lastPage.bodyWidgets[lastPage.bodyWidgets.length - 1];\n var lastPara = lastBodyWidget.childWidgets[lastBodyWidget.childWidgets.length - 1];\n return lastPara;\n };\n Editor.prototype.updatePasteRevision = function () {\n for (var i = 0; i < this.remotePasteRevision.length; i++) {\n this.updateRevisionCollection(this.remotePasteRevision[i]);\n }\n this.remotePasteRevision = [];\n };\n Editor.prototype.updateRevisionCollection = function (revision) {\n var isInserted = false;\n var paraIndex = undefined;\n if (this.owner.revisions.changes.indexOf(revision) < 0) {\n if (!this.documentHelper.revisionsInternal.containsKey(revision.revisionID)) {\n this.documentHelper.revisionsInternal.add(revision.revisionID, revision);\n }\n if (this.owner.revisions.changes.length > 0) {\n var currentStart = this.owner.selectionModule.start;\n for (var i = 0; i < this.owner.revisions.changes.length; i++) {\n var currentRange = this.owner.revisions.changes[i].range[0];\n if (currentRange instanceof ElementBox && !isNullOrUndefined(currentRange.line) && currentRange.line.paragraph.bodyWidget) {\n paraIndex = this.selection.getElementPosition(this.owner.revisions.changes[i].range[0]).startPosition;\n }\n else if (currentRange instanceof WRowFormat) {\n var rowWidget = currentRange.ownerBase;\n var firstCell = rowWidget.childWidgets[0];\n if (firstCell.childWidgets.length === 0) {\n for (var j = 1; j < rowWidget.childWidgets.length; j++) {\n if (rowWidget.childWidgets[j].childWidgets.length > 0) {\n firstCell = rowWidget.childWidgets[j];\n break;\n }\n }\n }\n var firstPara = this.selection.getFirstParagraph(firstCell);\n // Get the currentRange position to check (before or after) to insert table revision in order.\n var editPosition = void 0;\n if (firstPara.bodyWidget) {\n var selection = this.documentHelper.selection;\n if (!isNullOrUndefined(selection.editPosition)) {\n editPosition = selection.editPosition;\n }\n this.updateEditPosition(firstCell, selection);\n paraIndex = this.selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n if (!isNullOrUndefined(editPosition) && !this.selection.start.paragraph.isInsideTable) {\n selection.editPosition = editPosition;\n }\n }\n }\n else if (currentRange instanceof WCharacterFormat) {\n var paraWidget = currentRange.ownerBase;\n if (paraWidget.lastChild && paraWidget.lastChild.paragraph.bodyWidget) {\n var offset = paraWidget.getLength();\n var startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(paraWidget.lastChild, offset);\n paraIndex = startPosition;\n }\n }\n if (!isNullOrUndefined(paraIndex) && !isNullOrUndefined(currentStart)) {\n if (currentStart.isExistBefore(paraIndex) && !(revision.range[0] instanceof WRowFormat)) {\n isInserted = true;\n this.owner.revisions.changes.splice(i, 0, revision);\n var currentChangeView = new ChangesSingleView(this.owner, this.owner.trackChangesPane);\n this.owner.trackChangesPane.changesInfoDiv.insertBefore(currentChangeView.createSingleChangesDiv(revision), this.owner.trackChangesPane.changesInfoDiv.children[i + 1]);\n this.owner.trackChangesPane.revisions.splice(i, 0, revision);\n this.owner.trackChangesPane.changes.add(revision, currentChangeView);\n this.owner.trackChangesPane.renderedChanges.add(revision, currentChangeView);\n break;\n }\n else if (revision.range[0] instanceof WRowFormat && currentRange instanceof WRowFormat && revision.range[0].ownerBase.containerWidget === currentRange.ownerBase.containerWidget && revision.range[0].ownerBase.index === currentRange.ownerBase.index) {\n isInserted = true;\n this.owner.revisions.changes.splice(i - revision.range[0].ownerBase.indexInOwner, 0, revision);\n break;\n }\n else if (!isNullOrUndefined(paraIndex) && !isNullOrUndefined(currentStart) && ((currentStart.isExistBefore(paraIndex)) || currentStart.isAtSamePosition(paraIndex) || (currentStart.paragraph.isInsideTable && paraIndex.paragraph.isInsideTable && currentStart.paragraph.associatedCell === paraIndex.paragraph.associatedCell))) {\n // Insert the table revision if getting row is first row of table we insert directly in ith index or insert next index of currentRange.\n if (currentRange instanceof WRowFormat && revision.range[0] instanceof WRowFormat && currentRange.ownerBase.containerWidget === revision.range[0].ownerBase.containerWidget) {\n if (currentRange.ownerBase.index - 1 === revision.range[0].ownerBase.index) {\n this.owner.revisions.changes.splice(i, 0, revision);\n isInserted = true;\n break;\n }\n else {\n this.owner.revisions.changes.splice(i + revision.range[0].ownerBase.indexInOwner, 0, revision);\n isInserted = true;\n break;\n }\n }\n else if (revision.range[0] instanceof WRowFormat) {\n this.owner.revisions.changes.splice(i, 0, revision);\n isInserted = true;\n break;\n }\n }\n }\n }\n }\n if (!isInserted) {\n this.owner.revisions.changes.push(revision);\n if (!(revision.range[0] instanceof WRowFormat)) {\n var currentChangeView = new ChangesSingleView(this.owner, this.owner.trackChangesPane);\n this.owner.trackChangesPane.changesInfoDiv.appendChild(currentChangeView.createSingleChangesDiv(revision));\n this.owner.trackChangesPane.revisions.push(revision);\n this.owner.trackChangesPane.changes.add(revision, currentChangeView);\n this.owner.trackChangesPane.renderedChanges.add(revision, currentChangeView);\n }\n }\n this.documentHelper.updateAuthorIdentity();\n }\n };\n /**\n * @private\n * @returns {BodyWidget}\n */\n Editor.prototype.insertSection = function (selection, selectFirstBlock, isUndoing, sectionBreakContinuous, sectionBreakNewPage, sectionFormat) {\n var newSectionFormat;\n var startPara = this.selection.start.paragraph;\n if (sectionBreakContinuous && !isUndoing && !startPara.isInsideTable && selection.start.offset === 0 && selection.start.currentWidget === startPara.firstChild && !isNullOrUndefined(startPara.previousRenderedWidget) && startPara.previousRenderedWidget instanceof ParagraphWidget && startPara.previousRenderedWidget.isEndsWithPageBreak) {\n this.selection.start.paragraph.bodyWidget.sectionFormat.breakCode = 'NoBreak';\n this.selection.start.paragraph.index = 0;\n this.updateNextBlocksIndex(this.selection.start.paragraph, true);\n this.updateSectionIndex(this.selection.start.paragraph.bodyWidget.sectionFormat, this.selection.start.paragraph.bodyWidget, true);\n this.selection.moveToNextParagraph();\n this.editorHistory.currentBaseHistoryInfo.insertPosition = undefined;\n this.updateInsertPosition();\n return undefined;\n }\n if (!isNullOrUndefined(sectionFormat)) {\n newSectionFormat = sectionFormat;\n }\n else {\n newSectionFormat = this.selection.start.paragraph.bodyWidget.sectionFormat.cloneFormat();\n }\n var lastBlock;\n var firstBlock;\n if (selection.start.paragraph.isInsideTable) {\n var table = this.documentHelper.layout.getParentTable(selection.start.paragraph);\n table = table.combineWidget(this.owner.viewer);\n var insertBefore = false;\n if (selection.start.paragraph.associatedCell.rowIndex === 0) {\n insertBefore = true;\n }\n var newParagraph = new ParagraphWidget();\n var previousBlock = table.previousRenderedWidget;\n if (!insertBefore) {\n lastBlock = this.splitTable(table, selection.start.paragraph.associatedCell.ownerRow);\n this.documentHelper.layout.layoutBodyWidgetCollection(lastBlock.index, lastBlock.containerWidget, lastBlock, false);\n lastBlock = lastBlock.getSplitWidgets().pop();\n }\n else {\n lastBlock = table;\n }\n var insertIndex = 0;\n if ((isNullOrUndefined(previousBlock) || !previousBlock.bodyWidget.equals(lastBlock.bodyWidget)) && insertBefore) {\n insertIndex = 0;\n newParagraph.index = 0;\n }\n else {\n insertIndex = lastBlock.indexInOwner + 1;\n newParagraph.index = lastBlock.index + 1;\n }\n lastBlock.containerWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n newParagraph.containerWidget = lastBlock.containerWidget;\n this.updateNextBlocksIndex(newParagraph, true);\n this.documentHelper.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.containerWidget, newParagraph, false);\n lastBlock = newParagraph;\n }\n else {\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var selectionStart = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n //Split Paragraph\n if (!isUndoing) {\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset);\n }\n this.setPositionForCurrentIndex(selection.start, selectionStart);\n lastBlock = selection.start.paragraph.getSplitWidgets().pop();\n if (isUndoing && lastBlock.previousRenderedWidget !== undefined) {\n lastBlock = lastBlock.previousRenderedWidget;\n }\n }\n //Split body widget\n firstBlock = this.splitBodyWidget(lastBlock.bodyWidget, newSectionFormat, lastBlock, sectionBreakContinuous, sectionBreakNewPage).firstChild;\n // if (isUndoing) {\n // this.layoutWholeDocument(true);\n // }\n if (firstBlock instanceof TableWidget) {\n firstBlock.updateRowIndex(0);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(firstBlock.index, firstBlock.containerWidget, firstBlock, false);\n if (firstBlock instanceof TableWidget) {\n firstBlock = this.documentHelper.getFirstParagraphInFirstCell(firstBlock);\n }\n if (selectFirstBlock) {\n selection.selectParagraphInternal(firstBlock, true);\n }\n return firstBlock;\n };\n /**\n * @private\n */\n Editor.prototype.splitBodyWidget = function (bodyWidget, sectionFormat, startBlock, sectionBreakContinuous, sectionBreakNewPage) {\n //let sectionIndex: number;\n //Move blocks after the start block to next body widget\n var newBodyWidget = this.documentHelper.layout.moveBlocksToNextPage(startBlock, true, undefined, sectionBreakContinuous);\n if (this.editorHistory.isUndoing || (this.editorHistory.isRedoing && !isNullOrUndefined(sectionFormat.ownerBase))) {\n startBlock.bodyWidget.sectionFormat = sectionFormat;\n }\n if (newBodyWidget.page === undefined) {\n newBodyWidget.page = bodyWidget.page;\n bodyWidget.page.bodyWidgets.splice(bodyWidget.page.bodyWidgets.indexOf(bodyWidget) + 1, 0, newBodyWidget);\n }\n else if (bodyWidget.page.bodyWidgets.length > 1 && newBodyWidget.page !== undefined && !this.editorHistory.isUndoing) {\n var temp_NewBody = newBodyWidget;\n while (!isNullOrUndefined(bodyWidget.nextRenderedWidget) && newBodyWidget !== bodyWidget.nextRenderedWidget) {\n var startindex = bodyWidget.nextRenderedWidget.page.bodyWidgets.indexOf(bodyWidget.nextRenderedWidget);\n newBodyWidget.page.bodyWidgets.push(bodyWidget.nextRenderedWidget);\n bodyWidget.nextRenderedWidget.page.bodyWidgets.splice(startindex, 1);\n }\n while (!isNullOrUndefined(newBodyWidget.nextRenderedWidget)) {\n newBodyWidget.nextRenderedWidget.page = newBodyWidget.page;\n newBodyWidget = newBodyWidget.nextRenderedWidget;\n }\n newBodyWidget = temp_NewBody;\n newBodyWidget.sectionFormat = new WSectionFormat(newBodyWidget);\n this.viewer.owner.parser.parseSectionFormat(0, bodyWidget.sectionFormat, newBodyWidget.sectionFormat);\n newBodyWidget.sectionFormat.breakCode = 'NewPage';\n }\n //Update SectionIndex for splitted body widget\n if (sectionBreakContinuous) {\n newBodyWidget.sectionFormat = new WSectionFormat(newBodyWidget);\n this.viewer.owner.parser.parseSectionFormat(0, bodyWidget.sectionFormat, newBodyWidget.sectionFormat);\n newBodyWidget.sectionFormat.breakCode = 'NoBreak';\n }\n if (sectionBreakNewPage) {\n newBodyWidget.sectionFormat = new WSectionFormat(newBodyWidget);\n this.viewer.owner.parser.parseSectionFormat(0, bodyWidget.sectionFormat, newBodyWidget.sectionFormat);\n newBodyWidget.sectionFormat.breakCode = 'NewPage';\n }\n this.updateSectionIndex(newBodyWidget.sectionFormat, newBodyWidget, true);\n if (newBodyWidget.sectionFormat.numberOfColumns > 1) {\n this.updateColumnIndex(newBodyWidget, false);\n }\n // insert New header footer widget in to section index \n if (this.editorHistory && !this.editorHistory.isUndoing) {\n this.insertRemoveHeaderFooter(newBodyWidget.sectionIndex, true);\n }\n // if (this.documentHelper.viewer instanceof PageLayoutViewer) {\n // //update header and footer for splitted widget\n // this.documentHelper.layout.layoutHeaderFooter(newBodyWidget, this.owner.viewer as PageLayoutViewer, newBodyWidget.page);\n // }\n //Update Child item index from 0 for new Section\n this.updateBlockIndex(0, newBodyWidget.firstChild);\n // Start sinfting from first block\n this.owner.viewer.updateClientArea(newBodyWidget, newBodyWidget.page);\n return newBodyWidget;\n };\n Editor.prototype.insertRemoveHeaderFooter = function (sectionIndex, insert) {\n if (this.documentHelper.headersFooters[sectionIndex]) {\n // Need to handle further\n this.documentHelper.headersFooters.splice(sectionIndex, 0, {});\n }\n else {\n this.documentHelper.headersFooters[sectionIndex] = {};\n }\n };\n Editor.prototype.updateBlockIndex = function (blockIndex, block) {\n var blocks;\n var sectionIndex = block.bodyWidget.sectionIndex;\n do {\n blocks = block.getSplitWidgets();\n for (var i = 0; i < blocks.length; i++) {\n blocks[i].index = blockIndex;\n }\n blockIndex++;\n block = blocks.pop().nextRenderedWidget;\n } while (!isNullOrUndefined(block) && block.bodyWidget.sectionIndex === sectionIndex);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSectionIndex = function (sectionFormat, startBodyWidget, increaseIndex) {\n var currentSectionIndex = startBodyWidget.sectionIndex;\n var blockIndex = 0;\n var bodyWidget = startBodyWidget;\n do {\n if (bodyWidget.index === currentSectionIndex && sectionFormat) {\n bodyWidget.sectionFormat = sectionFormat;\n }\n if (increaseIndex) {\n bodyWidget.index++;\n }\n else {\n bodyWidget.index--;\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n } while (bodyWidget);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateColumnIndex = function (startBodyWidget, increaseIndex) {\n var bodyWidget = startBodyWidget;\n do {\n if (!increaseIndex && bodyWidget.columnIndex === 0) {\n break;\n }\n if (increaseIndex) {\n bodyWidget.columnIndex++;\n }\n else {\n bodyWidget.columnIndex--;\n }\n if (!isNullOrUndefined(bodyWidget.nextRenderedWidget) && bodyWidget.sectionIndex !== bodyWidget.nextRenderedWidget.sectionIndex) {\n break;\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n } while (bodyWidget);\n };\n //Auto convert List\n Editor.prototype.checkAndConvertList = function (selection, isTab) {\n var list = selection.paragraphFormat.getList();\n if (!isNullOrUndefined(list) || selection.start.paragraph.containerWidget instanceof FootNoteWidget) {\n return false;\n }\n var convertList = false;\n var isLeadingZero = false;\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return false;\n }\n var span = inline;\n var text = span.text.substring(0, indexInInline);\n var tabValue = 0;\n var length = 0;\n while (!isNullOrUndefined(span.previousNode)) {\n if (span.previousNode instanceof TextElementBox && (span.previousNode.text === '\\t' || span.previousNode.text.trim().length === 0)) {\n (span.previousNode.text === '\\t') ? tabValue += 36 : length = span.previousNode.text.length * 2.5;\n span = span.previousNode;\n continue;\n }\n return false;\n }\n span = inline;\n var index = 0;\n var tabIndex = text.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousNode instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabIndex = previousText.lastIndexOf('\\t');\n index = (tabIndex >= 0) ? tabIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n text = text.substring(index);\n }\n text = HelperMethods.trimStart(text);\n var numberFormat = text.substring(1, 2);\n var previousList = undefined;\n var listLevelPattern = this.getListLevelPattern(text.substring(0, 1));\n if (listLevelPattern !== 'None' && this.checkNumberFormat(numberFormat, listLevelPattern === 'Bullet', text)) {\n convertList = true;\n }\n else if (this.checkLeadingZero(text)) {\n isLeadingZero = true;\n convertList = true;\n }\n else {\n previousList = this.checkNextLevelAutoList(text);\n if (!isNullOrUndefined(previousList)) {\n convertList = true;\n }\n }\n if (convertList && listLevelPattern === 'Bullet' && inline.text === '- ' && (!isNullOrUndefined(inline.paragraph.previousWidget) && !(inline.paragraph.previousWidget.firstChild.children[0] instanceof ListTextElementBox))) {\n convertList = false;\n }\n if (convertList) {\n this.initComplexHistory('AutoList');\n var paragraph = inline.paragraph;\n selection.start.setPositionParagraph(paragraph.childWidgets[0], paragraph.childWidgets[0].getOffset(inline, indexInInline + 1));\n selection.end.setPositionParagraph(paragraph.childWidgets[0], 0);\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, false);\n var followCharacter = isTab ? 'Tab' : 'Space';\n numberFormat = !isLeadingZero ? '%1' + numberFormat : '%1' + text.substring(text.length - 1, text.length);\n var leadingZeroText = text.substring(text.length - 3, text.length - 1);\n listLevelPattern = !isLeadingZero ? listLevelPattern : this.getListLevelPattern(leadingZeroText);\n var listLevel = new WListLevel(undefined);\n listLevel.listLevelPattern = listLevelPattern;\n if (listLevelPattern === 'Bullet') {\n if (text === '*') {\n listLevel.numberFormat = String.fromCharCode(61623);\n listLevel.characterFormat.fontFamily = 'Symbol';\n }\n else if (text === '-') {\n listLevel.numberFormat = '-';\n }\n }\n else {\n listLevel.numberFormat = numberFormat;\n }\n listLevel.followCharacter = followCharacter;\n var leftIndent = selection.paragraphFormat.leftIndent;\n if (tabValue !== 0 || length !== 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18 + tabValue + length;\n }\n else if (indexInInline > 2) {\n listLevel.paragraphFormat.leftIndent = leftIndent + (indexInInline - 2) * 2.5 + 18;\n }\n else if (leftIndent > 0) {\n listLevel.paragraphFormat.leftIndent = leftIndent + 18;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n if ((!isLeadingZero && text.substring(0, 1) === '0') || leadingZeroText === '00') {\n listLevel.startAt = 0;\n }\n else {\n listLevel.startAt = 1;\n }\n if (!isNullOrUndefined(previousList)) {\n selection.paragraphFormat.setList(previousList);\n }\n else {\n this.autoConvertList(selection, listLevel);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection);\n }\n }\n return convertList;\n };\n Editor.prototype.checkNextLevelAutoList = function (text) {\n var selection = this.documentHelper.selection;\n var previousList = undefined;\n var convertList = false;\n var currentParagraph = selection.start.paragraph;\n var prevParagraph = selection.getPreviousParagraphBlock(currentParagraph);\n while (!isNullOrUndefined(prevParagraph) && prevParagraph instanceof ParagraphWidget) {\n if (prevParagraph.paragraphFormat.listFormat && prevParagraph.paragraphFormat.listFormat.listId !== -1) {\n var levelNumber = prevParagraph.paragraphFormat.listFormat.listLevelNumber;\n convertList = this.isConvertList(text, prevParagraph);\n if (convertList) {\n this.listLevelNumber = levelNumber;\n this.isAutoList = true;\n break;\n }\n }\n prevParagraph = selection.getPreviousParagraphBlock(prevParagraph, true);\n }\n if (convertList) {\n previousList = this.documentHelper.getListById(prevParagraph.paragraphFormat.listFormat.listId);\n }\n return previousList;\n };\n Editor.prototype.isConvertList = function (text, paragraph) {\n var convertList = false;\n var listNumber = this.documentHelper.layout.getListNumber(paragraph.paragraphFormat.listFormat, true);\n var prevListText = listNumber.substring(0, listNumber.length - 1);\n var currentListText = text.substring(0, text.length - 1);\n //check if numberFormat equal\n var inputString;\n if (listNumber.substring(listNumber.length - 1) !== text.substring(text.length - 1)) {\n convertList = false;\n }\n else if (currentListText.match(/^[0-9]+$/) && prevListText.match(/^[0-9]+$/)) {\n inputString = parseInt(currentListText, 10);\n if (parseInt(prevListText, 10) === inputString || parseInt(prevListText, 10) + 1 === inputString\n || parseInt(prevListText, 10) + 2 === inputString) {\n convertList = true;\n }\n }\n else if (currentListText.match(/^[a-zA-Z]+$/) && prevListText.match(/^[a-zA-Z]+$/)) {\n if (prevListText.charCodeAt(0) === text.charCodeAt(0) || prevListText.charCodeAt(0) + 1 === text.charCodeAt(0)\n || prevListText.charCodeAt(0) + 2 === text.charCodeAt(0)) {\n convertList = true;\n }\n else if (currentListText.match(/^[MDCLXVImdclxvi]+$/) && prevListText.match(/^[MDCLXVImdclxvi]+$/)) {\n var prevListNumber = this.getNumber(prevListText.toUpperCase());\n var currentListNumber = this.getNumber(currentListText.toUpperCase());\n if (prevListNumber === currentListNumber || prevListNumber + 1 === currentListNumber\n || prevListNumber + 2 === currentListNumber) {\n convertList = true;\n }\n }\n }\n return convertList;\n };\n Editor.prototype.getNumber = function (roman) {\n var conversion = { 'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1 };\n var arr = roman.split('');\n var num = 0;\n for (var i = 0; i < arr.length; i++) {\n var currentValue = conversion[arr[i]];\n var nextValue = conversion[arr[i + 1]];\n if (currentValue < nextValue) {\n num -= (currentValue);\n }\n else {\n num += (currentValue);\n }\n }\n return num;\n };\n Editor.prototype.getListLevelPattern = function (value) {\n switch (value) {\n case '0':\n case '1':\n return 'Arabic';\n case 'I':\n return 'UpRoman';\n case 'i':\n return 'LowRoman';\n case 'A':\n return 'UpLetter';\n case 'a':\n return 'LowLetter';\n case '*':\n case '-':\n return 'Bullet';\n case '00':\n case '01':\n return 'LeadingZero';\n default:\n return 'None';\n }\n };\n Editor.prototype.autoConvertList = function (selection, listLevel) {\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var newList = new WList();\n if (this.documentHelper.lists.length > 0) {\n newList.listId = this.documentHelper.lists[this.documentHelper.lists.length - 1].listId + 1;\n }\n else {\n newList.listId = 0;\n }\n var newAbstractList = new WAbstractList();\n var layout = this.documentHelper;\n if (layout.abstractLists.length > 0) {\n newAbstractList.abstractListId = layout.abstractLists[layout.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n newAbstractList.abstractListId = 0;\n }\n newList.abstractListId = newAbstractList.abstractListId;\n newList.abstractList = newAbstractList;\n newList.nsid = newAbstractList.nsid = HelperMethods.generateUniqueId(layout.lists);\n layout.abstractLists.push(newAbstractList);\n newAbstractList.levels.push(listLevel);\n listLevel.ownerBase = newAbstractList;\n selection.paragraphFormat.setList(newList);\n selection.paragraphFormat.listLevelNumber = 0;\n };\n Editor.prototype.checkNumberFormat = function (numberFormat, isBullet, text) {\n if (isBullet) {\n return numberFormat === '';\n }\n else {\n var index = text.indexOf(numberFormat);\n return (numberFormat === '.' || numberFormat === ')'\n || numberFormat === '>' || numberFormat === '-') && text.substring(index, text.length - 1) === '';\n }\n };\n Editor.prototype.checkLeadingZero = function (text) {\n var j;\n var isZero = false;\n for (var i = 0; i <= text.length - 1; i++) {\n if (text.charAt(i) === '0') {\n isZero = true;\n continue;\n }\n j = i;\n break;\n }\n var numberFormat = undefined;\n if (text.charAt(j) === '1') {\n numberFormat = text.charAt(j + 1);\n }\n else {\n numberFormat = text.charAt(j);\n }\n return isZero && this.checkNumberFormat(numberFormat, false, text);\n };\n Editor.prototype.getPageFromBlockWidget = function (block) {\n var page = undefined;\n if (block.containerWidget instanceof BodyWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof HeaderFooterWidget) {\n page = block.containerWidget.page;\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n page = block.containerWidget.bodyWidget.page;\n }\n return page;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.insertTextInline = function (element, selection, text, index, skipReLayout) {\n if (element instanceof TextElementBox) {\n element.text = HelperMethods.insert(element.text, index, text);\n element.isWidthUpdated = false;\n if (this.owner.enableTrackChanges) {\n var revision = element.revisions[0];\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.markerData.push(this.getMarkerData(undefined, undefined, revision));\n }\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n }\n var paragraph = element.line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(element.line);\n var elementIndex = element.line.children.indexOf(element);\n if (element instanceof TextElementBox && element.text.length > 90) {\n // Here, the text is split based on the maximum character length of 90.\n HelperMethods.splitWordByMaxLength(element, element.line);\n }\n if (isNullOrUndefined(skipReLayout) || !skipReLayout) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex, element.line.paragraph.bidi);\n }\n }\n else if (element instanceof ImageElementBox) {\n this.insertImageText(element, selection, text, index);\n }\n else if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n this.insertFieldBeginText(element, selection, text, index);\n }\n else if (element.fieldType === 2) {\n this.insertFieldSeparatorText(element, selection, text, index);\n }\n else {\n this.insertFieldEndText(element, selection, text, index);\n }\n }\n else if (element instanceof BookmarkElementBox || element instanceof EditRangeStartElementBox\n || element instanceof EditRangeEndElementBox) {\n this.insertBookMarkText(element, text);\n }\n };\n Editor.prototype.insertFieldBeginText = function (fieldBegin, selection, text, index) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = fieldBegin.line.paragraph.childWidgets.indexOf(fieldBegin.line);\n var spanIndex = fieldBegin.line.children.indexOf(fieldBegin);\n if (this.owner.enableCollaborativeEditing && this.isRemoteAction) {\n spanIndex++;\n }\n spanObj.characterFormat.copyFormat(fieldBegin.characterFormat);\n fieldBegin.line.children.splice(spanIndex, 0, spanObj);\n spanObj.line = fieldBegin.line;\n this.documentHelper.layout.reLayoutParagraph(fieldBegin.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertBookMarkText = function (element, text) {\n var spanObj = new TextElementBox();\n spanObj.text = text;\n var lineIndex = element.line.paragraph.childWidgets.indexOf(element.line);\n var spanIndex = element.line.children.indexOf(element);\n spanObj.characterFormat.copyFormat(element.characterFormat);\n if (element instanceof EditRangeEndElementBox || element instanceof BookmarkElementBox) {\n element.line.children.splice(spanIndex, 0, spanObj);\n }\n else {\n element.line.children.splice(spanIndex + 1, 0, spanObj);\n }\n spanObj.line = element.line;\n this.documentHelper.layout.reLayoutParagraph(element.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldSeparatorText = function (fieldSeparator, selection, text, index) {\n var previousInline = selection.getPreviousTextInline(fieldSeparator);\n var nextInline = selection.getNextTextInline(fieldSeparator);\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldSeparator.line.children.indexOf(fieldSeparator);\n if (index === fieldSeparator.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInline) && isNullOrUndefined(nextInline)) {\n span.characterFormat.copyFormat(fieldSeparator.line.paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInline)) {\n span.characterFormat.copyFormat(nextInline.characterFormat);\n }\n else {\n if (this.owner.enableCollaborativeEditing && this.isRemoteAction) {\n var temp = this.getCharacterFormat(this.selection);\n span.characterFormat.copyFormat(temp);\n }\n else {\n span.characterFormat.copyFormat(previousInline.characterFormat);\n }\n }\n fieldSeparator.line.children.splice(spanIndex, 0, span);\n span.line = fieldSeparator.line;\n var lineIndex = fieldSeparator.line.paragraph.childWidgets.indexOf(fieldSeparator.line);\n this.documentHelper.layout.reLayoutParagraph(fieldSeparator.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertFieldEndText = function (fieldEnd, selection, text, index) {\n var span = new TextElementBox();\n span.text = text;\n var spanIndex = fieldEnd.line.children.indexOf(fieldEnd);\n span.characterFormat.copyFormat(fieldEnd.characterFormat);\n if (selection.isInlineFormFillMode() && index == 0) {\n // special case to insert text before fieldEnd while filling a text form field.\n // when spell check enabled the white space and charaters are inserted as saperate text element box and getInline returns fieldEnd with index 0\n fieldEnd.line.children.splice(spanIndex, 0, span);\n }\n else {\n fieldEnd.line.children.splice(spanIndex + 1, 0, span);\n }\n span.line = fieldEnd.line;\n var lineIndex = fieldEnd.line.paragraph.childWidgets.indexOf(fieldEnd.line);\n if (this.owner.enableTrackChanges) {\n var isBidi = this.documentHelper.textHelper.getRtlLanguage(text).isRtl;\n var revisionType = 'Insertion';\n var isRevisionCombined = this.checkToMapRevisionWithInlineText(fieldEnd, index, span, isBidi, revisionType);\n if (!isRevisionCombined && span.revisions.length === 0) {\n isRevisionCombined = this.checkToMapRevisionWithNextNode(fieldEnd.nextNode, span, isBidi, revisionType);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(fieldEnd.line.paragraph, lineIndex, spanIndex);\n };\n Editor.prototype.insertImageText = function (image, selection, text, index) {\n var previousInlineObj = selection.getPreviousTextInline(image);\n var nextInlineObj = selection.getNextTextInline(image);\n var line = image.line;\n var element = new TextElementBox();\n var paragraph = line.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(line);\n element.text = text;\n var spanIndex = line.children.indexOf(image);\n if (index === image.length) {\n spanIndex++;\n }\n if (isNullOrUndefined(previousInlineObj) && isNullOrUndefined(nextInlineObj)) {\n element.characterFormat.copyFormat(paragraph.characterFormat);\n }\n else if (isNullOrUndefined(previousInlineObj)) {\n element.characterFormat.copyFormat(nextInlineObj.characterFormat);\n }\n else {\n element.characterFormat.copyFormat(previousInlineObj.characterFormat);\n }\n line.children.splice(spanIndex, 0, element);\n element.line = line;\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, spanIndex);\n };\n /**\n * @private\n */\n Editor.prototype.isListTextSelected = function () {\n if (this.documentHelper.isListTextSelected) {\n this.initComplexHistory('ListSelect');\n if (this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat && this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n };\n //Auto Format and insert Hyperlink Implementation starts\n Editor.prototype.checkAndConvertToHyperlink = function (selection, isEnter, paragraph) {\n var text;\n var span;\n if (isEnter) {\n span = paragraph.lastChild.children[paragraph.lastChild.children.length - 1];\n text = span.text;\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset - 1, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!(inline instanceof TextElementBox)) {\n return;\n }\n span = inline;\n text = span.text.substring(0, indexInInline);\n }\n var index = 0;\n var tabCharIndex = text.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : text.lastIndexOf(' ') + 1;\n while (span.previousElement instanceof TextElementBox && index === 0) {\n span = span.previousNode;\n var previousText = span.text;\n tabCharIndex = previousText.lastIndexOf('\\t');\n index = (tabCharIndex >= 0) ? tabCharIndex + 1 : previousText.lastIndexOf(' ') + 1;\n text = span.text + text;\n }\n text = text.substring(index);\n var lowerCaseText = text.toLowerCase();\n var containsURL = false;\n if (lowerCaseText.substring(0, 8) === 'file:///'\n || (lowerCaseText.substring(0, 7) === 'http://' && lowerCaseText.length > 7)\n || (lowerCaseText.substring(0, 8) === 'https://' && lowerCaseText.length > 8)\n || (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4)\n || (lowerCaseText.substring(0, 3) === '\\\\' && lowerCaseText.length > 3)\n || (lowerCaseText.substring(0, 7) === 'mailto:' && lowerCaseText.length > 7)) {\n containsURL = true;\n if (lowerCaseText.substring(0, 4) === 'www.' && lowerCaseText.length > 4) {\n text = 'http://' + text;\n }\n }\n else {\n var atIndex = text.indexOf('@');\n var dotIndex = text.indexOf('.');\n if (atIndex > 0 && atIndex < dotIndex && dotIndex < text.length - 1) {\n containsURL = true;\n text = 'mailto:' + text;\n }\n }\n if (containsURL) {\n var startPos = new TextPosition(this.documentHelper.owner);\n startPos.setPositionParagraph(span.line, span.line.getOffset(span, index));\n var endPos = new TextPosition(this.documentHelper.owner);\n if (isEnter) {\n endPos.setPositionParagraph(span.line, span.line.getEndOffset());\n }\n else {\n if (selection.end.currentWidget.children.length === 0 && selection.end.offset === 0) {\n var prevLine = selection.end.currentWidget.previousLine;\n endPos.setPositionParagraph(prevLine, prevLine.getEndOffset());\n }\n else {\n endPos.setPositionParagraph(selection.end.currentWidget, selection.end.offset - 1);\n }\n }\n this.autoFormatHyperlink(selection, text, startPos, endPos);\n }\n };\n Editor.prototype.autoFormatHyperlink = function (selection, url, startPosition, endPosition) {\n if (this.owner.enableCollaborativeEditing && this.isRemoteAction) {\n return;\n }\n this.initComplexHistory('AutoFormatHyperlink');\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n var start = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.insertPosition = start;\n }\n // Moves the selection to URL text start and end position.\n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(endPosition);\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldEnd = this.createHyperlinkElement(url, startPosition, endPosition, format);\n // Moves the selection to the end of field end position.\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 1));\n // Moves to next text position. (To achieve common behavior for space and enter).\n selection.start.moveNextPosition();\n selection.end.setPositionInternal(selection.start);\n blockInfo = this.selection.getParagraphInfo(selection.end);\n var end = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = end;\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.editorHistory.updateComplexHistory();\n this.isSkipOperationsBuild = false;\n this.reLayout(selection);\n }\n else {\n this.updateComplexWithoutHistory(0, start, end);\n }\n };\n Editor.prototype.appylingHyperlinkFormat = function (selection) {\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'Single', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.isForHyperlinkFormat = true;\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', '#0563c1', false);\n this.isForHyperlinkFormat = false;\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.createHyperlinkElement = function (url, startPosition, endPosition, format) {\n var selection = this.selection;\n this.documentHelper.layout.allowLayout = false;\n this.documentHelper.layout.isReplaceAll = true;\n this.appylingHyperlinkFormat(selection);\n //this.documentHelper.layout.allowLayout = true;\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n selection.start.setPositionInternal(selection.end);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n selection.start.setPositionInternal(startPosition);\n selection.end.setPositionInternal(selection.start);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n fieldEnd.linkFieldCharacter(this.documentHelper);\n this.documentHelper.layout.isReplaceAll = false;\n this.documentHelper.layout.allowLayout = true;\n this.documentHelper.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n return fieldEnd;\n };\n Editor.prototype.insertHyperlinkfield = function (selection, format, url, isBookmark) {\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = new FieldElementBox(0);\n begin.characterFormat.copyFormat(format);\n begin.line = selection.start.currentWidget;\n this.initInsertInline(begin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(format);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.initInsertInline(span);\n var separator = new FieldElementBox(2);\n separator.characterFormat.copyFormat(format);\n separator.line = selection.start.currentWidget;\n this.initInsertInline(separator);\n return begin;\n };\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.unlinkRangeFromRevision = function (inline, removeCollection) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var currentRevision = inline.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(inline);\n if (rangeIndex >= 0) {\n currentRevision.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n if (currentRevision.range.length === 0 && removeCollection) {\n this.owner.revisions.remove(currentRevision);\n if (this.isRemoveRevision && this.documentHelper.revisionsInternal.containsKey(currentRevision.revisionID)) {\n this.documentHelper.revisionsInternal.remove(currentRevision.revisionID);\n this.owner.trackChangesPane.updateTrackChanges();\n }\n }\n }\n this.constructRevisionnsForLink(inline, true);\n };\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n // used to update the revisions for elements present between the field separator and field end when performing undo if the link covered multiple blocks.\n Editor.prototype.constructRevisionnsForLink = function (inline, isRemove) {\n if (inline instanceof FieldElementBox && inline.fieldType === 2 && !isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.historyInfoStack) && this.editorHistory.historyInfoStack.length > 0 && this.editorHistory.historyInfoStack[0].action === 'InsertHyperlink') {\n var element = inline.nextElement;\n var isConstructRevision = false;\n if (!isNullOrUndefined(inline.fieldEnd) && inline.fieldEnd.indexInOwner !== -1) {\n isConstructRevision = true;\n }\n while (!isNullOrUndefined(element)) {\n if (element instanceof FieldElementBox && element.fieldType === 1) {\n break;\n }\n if (isRemove) {\n this.unlinkRangeFromRevision(element);\n this.addRemovedRevisionInfo(element, undefined);\n }\n else if (isConstructRevision && element.removedIds.length > 0) {\n this.constructRevisionFromID(element, true, element.previousElement);\n }\n if (isNullOrUndefined(element.nextElement)) {\n if (!isNullOrUndefined(element.paragraph) && !isNullOrUndefined(element.paragraph.nextRenderedWidget) && element.paragraph.nextRenderedWidget instanceof ParagraphWidget && !element.paragraph.nextRenderedWidget.isEmpty()) {\n if (isRemove) {\n this.unlinkRangeFromRevision(element.paragraph.characterFormat);\n this.addRemovedRevisionInfo(element.paragraph.characterFormat, undefined);\n }\n else if (isConstructRevision && element.paragraph.characterFormat.removedIds.length > 0) {\n this.constructRevisionFromID(element.paragraph.characterFormat, true);\n }\n element = element.paragraph.nextRenderedWidget.firstChild.children[0];\n }\n else {\n element = undefined;\n }\n }\n else {\n element = element.nextElement;\n }\n }\n }\n };\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.unlinkWholeRangeInRevision = function (item, revision) {\n var currentRevision = revision;\n item.revisions.splice(item.revisions.indexOf(item), 1);\n var rangeLength = currentRevision.range.length;\n for (var rangeIndex = 0; rangeIndex < rangeLength; rangeIndex++) {\n currentRevision.range.splice(0, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n if (this.isRemoveRevision && this.documentHelper.revisionsInternal.containsKey(currentRevision.revisionID)) {\n this.documentHelper.revisionsInternal.remove(currentRevision.revisionID);\n this.owner.trackChangesPane.updateTrackChanges();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.unLinkFieldCharacter = function (inline) {\n if (inline instanceof FieldElementBox && inline.fieldType === 0) {\n if (inline.fieldEnd) {\n if (this.documentHelper) {\n this.documentHelper.fieldToLayout = inline;\n this.documentHelper.fieldEndParagraph = inline.line.paragraph;\n }\n // inline.line.paragraph.addFieldCharacter(inline.fieldEnd);\n if (inline.fieldEnd) {\n inline.fieldEnd.fieldBegin = undefined;\n }\n inline.fieldEnd = undefined;\n }\n }\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (!isNullOrUndefined(inline.fieldEnd)) {\n if (this.documentHelper) {\n this.documentHelper.fieldToLayout = inline.fieldBegin;\n this.documentHelper.fieldEndParagraph = inline.line.paragraph;\n }\n inline.fieldBegin.fieldSeparator = undefined;\n inline.fieldEnd.fieldSeparator = undefined;\n }\n }\n else if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n if (inline.fieldBegin) {\n if (!isNullOrUndefined(this.documentHelper)) {\n this.documentHelper.fieldToLayout = inline.fieldBegin;\n this.documentHelper.fieldEndParagraph = inline.line.paragraph;\n }\n var fieldIndex = this.documentHelper.fields.indexOf(inline.fieldBegin);\n if (fieldIndex !== -1) {\n this.documentHelper.fields.splice(fieldIndex, 1);\n }\n var formFieldIndex = this.documentHelper.formFields.indexOf(inline.fieldBegin);\n if (formFieldIndex !== -1) {\n this.documentHelper.formFields.splice(formFieldIndex, 1);\n }\n inline.fieldBegin.fieldEnd = undefined;\n inline.fieldBegin = undefined;\n }\n }\n };\n Editor.prototype.getCharacterFormat = function (selection) {\n if (selection.start.paragraph.isEmpty()) {\n return selection.start.paragraph.characterFormat;\n }\n else {\n var info = selection.start.currentWidget.getInline(selection.start.offset + 1, 0);\n return info.element.characterFormat;\n }\n };\n /**\n * Inserts the Hyperlink.\n *\n * @param {string} address Specify the Hyperlink URL to be inserted.\n * @param {string} displayText Specify the display text for the hyperlink\n * @param {string} screenTip Specify the screen tip text.\n * @returns {void}\n */\n Editor.prototype.insertHyperlink = function (address, displayText, screenTip) {\n if (HelperMethods.startsWith(address, 'http://') || HelperMethods.startsWith(address, 'https://')) {\n address = address.replace(/\\s/g, \"\");\n }\n if (isNullOrUndefined(displayText)) {\n displayText = address;\n }\n if (!isNullOrUndefined(screenTip)) {\n address = address + '\\\" \\\\o \\\"' + screenTip;\n }\n this.insertHyperlinkInternal(address, displayText, this.owner.selectionModule.text !== displayText, false);\n };\n /**\n * @private\n */\n Editor.prototype.insertHyperlinkInternal = function (url, displayText, remove, isBookmark) {\n var selection = this.documentHelper.selection;\n if (selection.start.paragraph.associatedCell !== selection.end.paragraph.associatedCell) {\n return;\n }\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // if selection end is covering paraMark exclude paraMark\n if (endPosition.offset == endPosition.paragraph.getLength() + 1) {\n endPosition.movePreviousPosition();\n }\n if (remove) {\n //Empty selection Hyperlink insert\n this.insertHyperlinkInternalInternal(selection, url, displayText, isBookmark);\n }\n else {\n this.documentHelper.layout.allowLayout = false;\n //Non-Empty Selection- change the selected text to Field \n // this.preservedFontCol = this.getFontColor();\n var fieldStartPosition = new TextPosition(this.documentHelper.owner);\n fieldStartPosition.setPositionInternal(startPosition);\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat(undefined);\n format.copyFormat(temp);\n this.initComplexHistory('InsertHyperlink');\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n var start = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.insertPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.appylingHyperlinkFormat(selection);\n startPosition.setPositionInternal(endPosition);\n // Adds the field end at the URL text end position.\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n fieldEnd.line = selection.end.currentWidget;\n startPosition.setPositionInternal(endPosition);\n // this.insertElementInCurrentLine(selection, fieldEnd, true);\n this.initInsertInline(fieldEnd);\n // Moves the selection to URL text start position. \n startPosition.setPositionInternal(fieldStartPosition);\n endPosition.setPositionInternal(startPosition);\n // Adds field begin, field code and field separator at the URL text start position.\n var begin = this.insertHyperlinkfield(selection, format, url, isBookmark);\n fieldEnd.linkFieldCharacter(this.documentHelper);\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(begin.line);\n var index = begin.line.children.indexOf(begin);\n this.documentHelper.layout.allowLayout = true;\n this.documentHelper.layout.reLayoutParagraph(selection.start.paragraph, lineIndex, index);\n var lineWidget = fieldEnd.line;\n selection.selects(lineWidget, lineWidget.getOffset(fieldEnd, fieldEnd.length), true);\n blockInfo = this.selection.getParagraphInfo(endPosition);\n var end = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.updateComplexWithoutHistory(1, start, end);\n }\n }\n };\n Editor.prototype.insertHyperlinkInternalInternal = function (selection, url, displayText, isBookmark) {\n if (isNullOrUndefined(selection.start)) {\n return;\n }\n if (this.editHyperlink(selection, url, displayText)) {\n return;\n }\n var commentStarts = this.checkAndRemoveComments();\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n this.initHistory('InsertHyperlink');\n var isRemoved = true;\n if (!selection.isEmpty) {\n var isTrackEnabled = this.owner.enableTrackChanges;\n this.owner.enableTrackChanges = false;\n isRemoved = this.removeSelectedContents(selection);\n this.owner.enableTrackChanges = isTrackEnabled;\n }\n if (isRemoved) {\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n }\n this.updateHistoryForComments(commentStarts);\n };\n Editor.prototype.insertHyperlinkByFormat = function (selection, url, displayText, format, isBookmark) {\n this.updateInsertPosition();\n selection.owner.isShiftingEnabled = true;\n var indexInInline = 0;\n //let initial: number = indexInInline;\n var element = [];\n var fieldBegin = new FieldElementBox(0);\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.fieldBegin = fieldBegin;\n }\n element.push(fieldBegin);\n var span = new TextElementBox();\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n element.push(fieldSeparator);\n if (!isNullOrUndefined(displayText) && displayText !== '') {\n span = new TextElementBox();\n span.characterFormat.copyFormat(format);\n span.characterFormat.underline = 'Single';\n span.characterFormat.fontColor = '#0563c1';\n span.text = displayText;\n element.push(span);\n }\n var fieldEnd = new FieldElementBox(1);\n element.push(fieldEnd);\n fieldBegin.fieldSeparator = fieldEnd.fieldSeparator = fieldSeparator;\n fieldBegin.fieldEnd = fieldSeparator.fieldEnd = fieldEnd;\n fieldSeparator.fieldBegin = fieldEnd.fieldBegin = fieldBegin;\n this.insertElement(element);\n //let paragraph: ParagraphWidget = selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n if (this.documentHelper.fields.indexOf(fieldBegin) === -1) {\n this.documentHelper.fields.push(fieldBegin);\n }\n //let offset: number = fieldEnd.line.getOffset(fieldEnd, 1);\n selection.selects(fieldEnd.line, fieldEnd.line.getOffset(fieldEnd, fieldEnd.length), true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n };\n /**\n * @private\n */\n Editor.prototype.initInsertInline = function (element, insertHyperlink, isInsertRemovedBookamrk) {\n var selection = this.selection;\n var isSelectionUpdated = false;\n // if (!this.isInsertingTOC && isInsertRemovedBookamrk && element instanceof BookmarkElementBox) {\n // selection.start.offset--;\n // selection.end.offset--;\n // isSelectionUpdated = true;\n // }\n this.initHistory('InsertInline');\n this.insertInlineInSelection(selection, element);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n // if (isSelectionUpdated) {\n // selection.start.offset++;\n // selection.end.offset++;\n // }\n };\n Editor.prototype.insertElementInCurrentLine = function (selection, inline) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n this.updateInsertPosition();\n this.insertElement([inline]);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * Edit Hyperlink\n * @param {Selection} selection - Specified the selection\n * @param {string} url - Specifies the url\n * @param {string} displayText - Specified the display test\n * @param {boolean} isBookmark - Specifies is bookmark\n * @private\n * @returns {boolean} - Return tru of hyperlink is edited.\n */\n Editor.prototype.editHyperlink = function (selection, url, displayText, isBookmark) {\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return false;\n }\n this.initHistory('InsertHyperlink');\n this.editHyperlinkInternal = isNullOrUndefined(this.editorHistory)\n || (this.editorHistory && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo));\n var fieldResult = '';\n var isNestedField = false;\n // Preserves the character format for hyperlink field.\n var temp = this.getCharacterFormat(selection);\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var fieldSeparator = undefined;\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n fieldSeparator = fieldBegin.fieldSeparator;\n var fieldObj = selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, isNestedField, format);\n fieldResult = fieldObj.displayText;\n isNestedField = fieldObj.isNestedField;\n format = fieldObj.format;\n }\n var offset = fieldBegin.line.getOffset(fieldBegin, 0);\n selection.start.setPositionParagraph(fieldBegin.line, offset);\n offset = fieldBegin.fieldEnd.line.getOffset(fieldBegin.fieldEnd, 1);\n selection.end.setPositionParagraph(fieldBegin.fieldEnd.line, offset);\n this.skipFieldDeleteTracking = true;\n this.deleteSelectedContents(selection, false);\n if (!isNestedField && fieldResult !== displayText || isNullOrUndefined(fieldSeparator)) {\n this.insertHyperlinkByFormat(selection, url, displayText, format, isBookmark);\n this.skipFieldDeleteTracking = false;\n }\n else {\n //Modify the new hyperlink url. Inserts field begin, url and field separator.\n this.updateInsertPosition();\n var newFieldBegin = new FieldElementBox(0);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.fieldBegin = newFieldBegin;\n this.editorHistory.currentBaseHistoryInfo.isEditHyperlink = true;\n }\n newFieldBegin.characterFormat.copyFormat(fieldBegin.characterFormat);\n newFieldBegin.line = selection.start.currentWidget;\n this.insertInlineInternal(newFieldBegin);\n var span = new TextElementBox();\n span.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (isBookmark) {\n span.text = ' HYPERLINK \\\\l \\\"' + url + '\\\" ';\n }\n else {\n span.text = ' HYPERLINK \\\"' + url + '\\\" ';\n }\n span.line = selection.start.currentWidget;\n this.insertInlineInternal(span);\n var nodes = this.editorHistory && this.editorHistory.currentBaseHistoryInfo ?\n this.editorHistory.currentBaseHistoryInfo.removedNodes : this.nodes;\n this.insertClonedFieldResult(selection, nodes, fieldSeparator);\n var fieldEnd = selection.end.currentWidget.getInline(selection.end.offset, 0).element;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n this.skipFieldDeleteTracking = false;\n var paragraph = newFieldBegin.line.paragraph;\n var lineIndex = newFieldBegin.line.paragraph.childWidgets.indexOf(newFieldBegin.line);\n var elementIndex = newFieldBegin.line.children.indexOf(newFieldBegin);\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n offset = newFieldBegin.fieldEnd.line.getOffset(newFieldBegin.fieldEnd, 1);\n selection.selects(newFieldBegin.fieldEnd.line, offset, true);\n this.updateEndPosition();\n this.reLayout(selection, true);\n }\n this.editHyperlinkInternal = false;\n this.nodes = [];\n return true;\n };\n Editor.prototype.insertClonedFieldResult = function (selection, nodes, fieldSeparator) {\n var fieldEnd;\n var isStarted = false;\n for (var i = nodes.length - 1; i > -1; i--) {\n var node = nodes[i];\n if (!isStarted) {\n if (fieldSeparator === node) {\n isStarted = true;\n }\n else {\n if (node instanceof ParagraphWidget && node === fieldSeparator.line.paragraph) {\n isStarted = true;\n var paragraph = undefined;\n if (i === nodes.length - 1) {\n paragraph = selection.start.paragraph;\n var fieldParagraph = fieldSeparator.line.paragraph;\n this.getClonedFieldResultWithSel(fieldParagraph, selection, fieldSeparator);\n }\n else {\n paragraph = this.getClonedFieldResult(fieldSeparator.line.paragraph, fieldSeparator);\n this.insertParagraph(paragraph, true);\n }\n selection.selectParagraphInternal(selection.getNextParagraphBlock(paragraph), true);\n }\n continue;\n }\n }\n if (node instanceof ElementBox) {\n this.insertInlineInternal(node.clone());\n }\n else if (node instanceof BlockWidget) {\n this.insertBlock(node.clone());\n }\n // else if (node instanceof WSection)\n // editor.insertSection((node as WSection)._Clone());\n }\n };\n Editor.prototype.getClonedFieldResultWithSel = function (paragraph, selection, fieldSeparator) {\n var lineIndex = paragraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = paragraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < paragraph.childWidgets.length; j++) {\n var lineWidget = paragraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n this.insertInlineInternal(lineWidget.children[i].clone());\n }\n }\n };\n Editor.prototype.getClonedFieldResult = function (curParagraph, fieldSeparator) {\n var paragraph = new ParagraphWidget();\n paragraph.characterFormat.copyFormat(curParagraph.characterFormat);\n paragraph.paragraphFormat.copyFormat(curParagraph.paragraphFormat);\n var lineIndex = curParagraph.childWidgets.indexOf(fieldSeparator.line);\n var elementIndex = curParagraph.childWidgets[lineIndex].children.indexOf(fieldSeparator);\n for (var j = lineIndex; j < curParagraph.childWidgets.length; j++) {\n var lineWidget = curParagraph.childWidgets[j];\n if (j !== lineIndex) {\n elementIndex = 0;\n }\n for (var i = elementIndex; i < lineWidget.children.length; i++) {\n paragraph.childWidgets[0].children.push(lineWidget.children[i]);\n }\n }\n return paragraph;\n };\n /**\n * Removes the content control if selection is in content control\n * @returns {void}\n * @private\n */\n Editor.prototype.removeContentControl = function () {\n var contentControl = this.documentHelper.owner.editor.getContentControl();\n if (contentControl instanceof ContentControl) {\n var contentControlEnd = contentControl.reference;\n var start = this.selection.start.clone();\n var end = this.selection.end.clone();\n var endElementInfo = this.selection.getElementInfo(end.currentWidget, end.offset);\n this.selection.start.setPositionParagraph(contentControl.line, contentControl.line.getOffset(contentControl, contentControl.length));\n this.selection.end.setPositionParagraph(contentControlEnd.line, contentControlEnd.line.getOffset(contentControlEnd, contentControlEnd.length) - 1);\n this.initHistory('RemoveContentControl');\n this.selection.selectPosition(start, end);\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.markerData.push({ contentControl: contentControl });\n this.editorHistory.currentBaseHistoryInfo.setContentControlInfo(contentControl);\n }\n this.removeContentControlInternal();\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n if (endElementInfo.element !== contentControl && endElementInfo.element !== contentControlEnd) {\n this.selection.end.setPositionParagraph(endElementInfo.element.line, endElementInfo.element.line.getOffset(endElementInfo.element, endElementInfo.index));\n }\n }\n this.fireContentChange();\n //if (this.owner.documentEditorSettings.showBookmarks == true) {\n this.viewer.updateScrollBars();\n //}\n };\n /**\n * Removes the content control if selection is in content control\n * @returns {void}\n * @private\n */\n Editor.prototype.removeContentControlInternal = function () {\n var contentControl;\n var getContentControl = this.documentHelper.owner.editor.getContentControl();\n var contentControlImage = this.owner.selectionModule.start.currentWidget.children[0];\n if (contentControlImage instanceof ContentControl) {\n if (contentControlImage.contentControlProperties.type == 'Picture') {\n this.owner.renderPictureContentControlElement(this.owner, false, false);\n contentControl = contentControlImage;\n }\n else {\n contentControl = contentControlImage;\n }\n }\n else {\n contentControl = getContentControl;\n }\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n if (this.documentHelper.contentControlCollection[i] === contentControl) {\n var index = this.documentHelper.contentControlCollection.indexOf(contentControl);\n this.documentHelper.contentControlCollection.splice(index, 1);\n contentControl.line.children.splice(contentControl.indexInOwner, 1);\n if (!isNullOrUndefined(contentControl.reference)) {\n contentControl.reference.line.children.splice(contentControl.reference.indexInOwner, 1);\n }\n }\n }\n var element = document.getElementById(\"contenticon\");\n var picElement = document.getElementById('container_editorPICTURE_CONTENT_CONTROL');\n if (element) {\n element.style.display = 'none';\n }\n if (picElement) {\n picElement.style.display = 'none';\n }\n this.viewer.updateScrollBars();\n };\n /**\n * Removes the hyperlink if selection is within hyperlink.\n *\n * @returns {void}\n */\n Editor.prototype.removeHyperlink = function () {\n if (this.owner.isReadOnlyMode) {\n return;\n }\n var selection = this.selection;\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return;\n }\n var fieldEnd = fieldBegin.fieldEnd;\n var fieldSeparator = fieldBegin.fieldSeparator;\n var fieldStartPosition = new TextPosition(selection.owner);\n fieldStartPosition.setPositionParagraph(fieldBegin.line, (fieldBegin.line).getOffset(fieldBegin, 0));\n var blockInfo = this.selection.getParagraphInfo(fieldStartPosition);\n var fieldStartString = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var fieldSeparatorPosition = new TextPosition(selection.owner);\n fieldSeparatorPosition.setPositionParagraph(fieldSeparator.line, (fieldSeparator.line).getOffset(fieldSeparator, fieldSeparator.length));\n blockInfo = this.selection.getParagraphInfo(fieldSeparatorPosition);\n var fieldSeparatorString = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.initComplexHistory('RemoveHyperlink');\n selection.start.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 0));\n blockInfo = this.selection.getParagraphInfo(selection.start);\n var startIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n selection.end.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 1));\n this.delete();\n selection.start.setPositionInternal(this.selection.getTextPosBasedOnLogicalIndex(fieldSeparatorString));\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'None', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n selection.end.setPositionInternal(this.selection.getTextPosBasedOnLogicalIndex(startIndex));\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', undefined, false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n selection.end.setPositionInternal(selection.start);\n selection.start.setPositionInternal(this.selection.getTextPosBasedOnLogicalIndex(fieldStartString));\n this.initHistory('Delete');\n this.deleteSelectedContents(selection, false);\n this.reLayout(selection, true);\n // Bug 873011: Combined the field begin and field end revisions to preserve single tracking in track changes pane.\n this.combineElementRevision(fieldSeparator.revisions, fieldEnd.revisions);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateHyperlinkFormat = function (selection) {\n var fieldBegin = selection.getHyperlinkField();\n if (isNullOrUndefined(fieldBegin)) {\n return;\n }\n var fieldEnd = fieldBegin.fieldEnd;\n var fieldSeparator = fieldBegin.fieldSeparator;\n selection.start.setPositionParagraph(fieldSeparator.line, (fieldSeparator.line).getOffset(fieldSeparator, fieldSeparator.length));\n selection.end.setPositionParagraph(fieldEnd.line, (fieldEnd.line).getOffset(fieldEnd, 0));\n this.initHistory('Underline');\n this.updateCharacterFormatWithUpdate(selection, 'underline', 'Single', false);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n // Applies font color for field result.\n this.initHistory('FontColor');\n this.isForHyperlinkFormat = true;\n this.updateCharacterFormatWithUpdate(selection, 'fontColor', '#0563c1', false);\n this.isForHyperlinkFormat = false;\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.reLayout(selection, false);\n };\n //Paste Implementation starts\n /**\n * Paste copied clipboard content on Paste event\n * @param {ClipboardEvent} event - Specifies the paste event\n * @param {any} pasteWindow - Specifies the paste window\n * @private\n */\n Editor.prototype.pasteInternal = function (event, pasteWindow) {\n this.currentPasteOptions = this.owner.defaultPasteOption;\n this.isHtmlPaste = false;\n if (this.documentHelper.owner.enableLocalPaste) {\n this.paste();\n }\n else {\n this.selection.isViewPasteOptions = true;\n if (this.selection.pasteElement) {\n this.selection.pasteElement.style.display = 'none';\n }\n if (isNullOrUndefined(pasteWindow)) {\n pasteWindow = window;\n }\n var textContent = '';\n var htmlContent = '';\n var rtfContent = '';\n var clipbordData = pasteWindow.clipboardData ? pasteWindow.clipboardData : event.clipboardData;\n if (Browser.info.name !== 'msie') {\n rtfContent = clipbordData.getData('Text/Rtf');\n htmlContent = clipbordData.getData('Text/Html');\n }\n this.copiedTextContent = textContent = HelperMethods.sanitizeString(clipbordData.getData('Text'));\n this.previousCharFormat = new WCharacterFormat();\n this.previousCharFormat.copyFormat(this.selection.start.paragraph.characterFormat);\n this.previousParaFormat = new WParagraphFormat();\n this.previousParaFormat.copyFormat(this.selection.start.paragraph.paragraphFormat);\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.selection.isInlineFormFillMode()) {\n htmlContent = '';\n rtfContent = '';\n }\n if (rtfContent !== '') {\n this.pasteAjax(rtfContent, '.rtf');\n }\n else if (htmlContent !== '') {\n this.isHtmlPaste = true;\n var doc = new DOMParser().parseFromString(htmlContent, 'text/html');\n var result = new XMLSerializer().serializeToString(doc);\n result = result.replace(//gi, '');\n result = result.replace(//gi, '');\n // Removed namesapce which is added when using XMLSerializer.\n // When copy content from MS Word, the clipboard html content already have same namespace which cause duplicate namespace\n // Here, removed the duplicate namespace.\n result = result.replace('xmlns=\"http://www.w3.org/1999/xhtml\"', '');\n this.pasteAjax(result, '.html');\n }\n else if (textContent !== null && textContent !== '') {\n this.selection.currentPasteAction = 'TextOnly';\n this.pasteContents(textContent);\n this.applyPasteOptions(this.currentPasteOptions, true);\n this.copiedContent = undefined;\n this.documentHelper.editableDiv.innerHTML = '';\n }\n else if (Browser.info.name !== 'msie' && clipbordData.items !== undefined && clipbordData.items.length !== 0) {\n for (var m = 0; m < clipbordData.items.length; m++) {\n var item = clipbordData.items[m];\n if (item.type === 'image/png' || (item.type === \"image/svg+xml\" && item.kind !== 'string')) {\n this.pasteImage(item.getAsFile());\n }\n }\n }\n else if (Browser.info.name === 'msie' && clipbordData.files !== undefined && clipbordData.files.length !== 0 &&\n (clipbordData.files[0].type === 'image/png')) {\n this.pasteImage(clipbordData.files[0]);\n }\n // if (textContent !== '') {\n // this.pasteContents(textContent);\n // this.documentHelper.editableDiv.innerHTML = '';\n // }\n }\n };\n Editor.prototype.pasteImage = function (imgFile) {\n var _this = this;\n var fileReader = new FileReader();\n fileReader.onload = function () {\n _this.onPasteImage(fileReader.result);\n };\n fileReader.readAsDataURL(imgFile);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onPasteImage = function (data) {\n var image = document.createElement('img');\n var editor = this;\n image.addEventListener('load', function () {\n editor.insertImageInternal(data, true, this.width, this.height, this.alt);\n });\n image.src = data;\n };\n Editor.prototype.pasteAjax = function (content, type) {\n var proxy = this;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var formObject = {\n content: content,\n type: type\n };\n var editor = this;\n this.pasteRequestHandler = new XmlHttpRequestHandler();\n this.owner.documentHelper.viewerContainer.focus();\n showSpinner(this.owner.element);\n this.pasteRequestHandler.url = proxy.owner.serviceUrl + this.owner.serverActionSettings.systemClipboard;\n this.pasteRequestHandler.responseType = 'json';\n this.pasteRequestHandler.contentType = 'application/json;charset=UTF-8';\n this.pasteRequestHandler.customHeaders = proxy.owner.headers;\n this.pasteRequestHandler.onSuccess = this.pasteFormattedContent.bind(this);\n this.pasteRequestHandler.onFailure = this.onPasteFailure.bind(this);\n this.pasteRequestHandler.onError = this.onPasteFailure.bind(this);\n var httprequestEventArgs = { serverActionType: 'SystemClipboard', headers: this.owner.headers, timeout: 0, cancel: false, withCredentials: false, clipboardData: formObject };\n this.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n hideSpinner(this.owner.element);\n }\n else {\n this.pasteRequestHandler.send(formObject, httprequestEventArgs);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.pasteFormattedContent = function (result) {\n var _this = this;\n if (this.isPasteListUpdated) {\n this.isPasteListUpdated = false;\n }\n this.pasteContents(isNullOrUndefined(result.data) ? this.copiedTextContent : HelperMethods.getSfdtDocument(result.data));\n if (this.currentPasteOptions !== 'KeepSourceFormatting') {\n this.applyPasteOptions(this.currentPasteOptions);\n }\n hideSpinner(this.owner.element);\n setTimeout(function () {\n if (!isNullOrUndefined(_this.viewer)) {\n _this.documentHelper.isScrollHandler = true;\n _this.isPasteContentCheck = true;\n _this.viewer.updateScrollBars();\n _this.documentHelper.isScrollHandler = false;\n _this.isPasteContentCheck = false;\n }\n }, 0);\n };\n Editor.prototype.onPasteFailure = function (result) {\n this.owner.fireServiceFailure(result);\n console.error(result.status, result.statusText);\n hideSpinner(this.owner.element);\n this.documentHelper.updateFocus();\n };\n /**\n * Pastes the provided sfdt content or the data present in local clipboard if any.\n *\n * @param {string} sfdt Specifies the sfdt content to paste at current position.\n * @param {PasteOptions} defaultPasteOption Specifies the paste options.\n * @returns {void}\n */\n Editor.prototype.paste = function (sfdt, defaultPasteOption) {\n var _this = this;\n if (isNullOrUndefined(sfdt)) {\n sfdt = this.owner.enableLocalPaste ? HelperMethods.sanitizeString(this.copiedData) : undefined;\n }\n if (!isNullOrUndefined(defaultPasteOption)) {\n this.currentPasteOptions = defaultPasteOption;\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (sfdt) {\n var document_1 = HelperMethods.getSfdtDocument(sfdt);\n this.pasteContents(document_1);\n this.applyPasteOptions(this.currentPasteOptions);\n if (this.chartType) {\n setTimeout(function () {\n if (!isNullOrUndefined(_this.viewer)) {\n _this.viewer.updateScrollBars();\n }\n }, 30);\n this.chartType = false;\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.getUniqueListOrAbstractListId = function (isList) {\n if (isList && this.documentHelper.lists.length) {\n var sortedList = this.documentHelper.lists.slice().sort(function (a, b) {\n return a.listId - b.listId;\n });\n return sortedList[sortedList.length - 1].listId + 1;\n }\n else if (this.documentHelper.abstractLists.length) {\n var sortedAbsList = this.documentHelper.abstractLists.slice().sort(function (a, b) {\n return a.abstractListId - b.abstractListId;\n });\n return sortedAbsList[sortedAbsList.length - 1].abstractListId + 1;\n }\n return 0;\n };\n Editor.prototype.checkSameLevelFormat = function (lstLevelNo, abstractList, list) {\n return abstractList[levelsProperty[this.keywordIndex]][lstLevelNo][listLevelPatternProperty[this.keywordIndex]] === list.abstractList.levels[lstLevelNo].listLevelPattern\n && abstractList[levelsProperty[this.keywordIndex]][lstLevelNo][numberFormatProperty[this.keywordIndex]] === list.abstractList.levels[lstLevelNo].numberFormat\n && (abstractList[levelsProperty[this.keywordIndex]][lstLevelNo][listLevelPatternProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 10 : 'Bullet')\n || abstractList[levelsProperty[this.keywordIndex]][lstLevelNo][startAtProperty[this.keywordIndex]] === list.abstractList.levels[lstLevelNo].startAt);\n };\n Editor.prototype.listLevelPatternInCollection = function (lstLevelNo, listLevel) {\n var _this = this;\n return this.documentHelper.lists.filter(function (list) {\n return list.abstractList.levels[lstLevelNo].listLevelPattern === listLevel[listLevelPatternProperty[_this.keywordIndex]]\n && list.abstractList.levels[lstLevelNo].numberFormat === listLevel[numberFormatProperty[_this.keywordIndex]]\n && (listLevel[listLevelPatternProperty[_this.keywordIndex]] === (_this.keywordIndex == 1 ? 10 : 'Bullet') || list.abstractList.levels[lstLevelNo].startAt === listLevel[startAtProperty[_this.keywordIndex]])\n && _this.isEqualParagraphFormat(list.abstractList.levels[lstLevelNo].paragraphFormat, listLevel[paragraphFormatProperty[_this.keywordIndex]]);\n })[0];\n };\n Editor.prototype.isEqualParagraphFormat = function (source, dest) {\n if ((isNullOrUndefined(dest[leftIndentProperty[this.keywordIndex]]) && source.leftIndent !== 0)\n || (!isNullOrUndefined(dest[leftIndentProperty[this.keywordIndex]]) && Math.round(source.leftIndent) !== Math.round(dest[leftIndentProperty[this.keywordIndex]]))) {\n return false;\n }\n if ((isNullOrUndefined(dest[rightIndentProperty[this.keywordIndex]]) && source.rightIndent !== 0)\n || (!isNullOrUndefined(dest[rightIndentProperty[this.keywordIndex]]) && Math.round(source.rightIndent) !== Math.round(dest[rightIndentProperty[this.keywordIndex]]))) {\n return false;\n }\n if ((isNullOrUndefined(dest[firstLineIndentProperty[this.keywordIndex]]) && source.firstLineIndent !== 0)\n || (!isNullOrUndefined(dest[firstLineIndentProperty[this.keywordIndex]]) && Math.round(source.firstLineIndent) !== Math.round(dest[firstLineIndentProperty[this.keywordIndex]]))) {\n return false;\n }\n if ((isNullOrUndefined(dest[beforeSpacingProperty[this.keywordIndex]]) && source.beforeSpacing !== 0)\n || (!isNullOrUndefined(dest[beforeSpacingProperty[this.keywordIndex]]) && Math.round(source.beforeSpacing) !== Math.round(dest[beforeSpacingProperty[this.keywordIndex]]))) {\n return false;\n }\n if ((isNullOrUndefined(dest[afterSpacingProperty[this.keywordIndex]]) && source.afterSpacing !== 0)\n || (!isNullOrUndefined(dest.afterSpacing) && Math.round(source.afterSpacing) !== Math.round(dest[afterSpacingProperty[this.keywordIndex]]))) {\n return false;\n }\n if ((isNullOrUndefined(dest[textAlignmentProperty[this.keywordIndex]]) && source.textAlignment !== 'Left')\n || (!isNullOrUndefined(dest[textAlignmentProperty[this.keywordIndex]]) && source.textAlignment !== dest[textAlignmentProperty[this.keywordIndex]])) {\n return false;\n }\n if ((isNullOrUndefined(dest[bidiProperty[this.keywordIndex]]) && source.bidi !== false)\n || (!isNullOrUndefined(dest[bidiProperty[this.keywordIndex]]) && source.bidi !== dest[bidiProperty[this.keywordIndex]])) {\n return false;\n }\n if ((isNullOrUndefined(dest[contextualSpacingProperty[this.keywordIndex]]) && source.contextualSpacing !== false)\n || (!isNullOrUndefined(dest.contextualSpacing) && source.contextualSpacing !== dest[contextualSpacingProperty[this.keywordIndex]])) {\n return false;\n }\n if ((isNullOrUndefined(dest[keepWithNextProperty[this.keywordIndex]]) && source.keepWithNext !== false)\n || (!isNullOrUndefined(dest[keepWithNextProperty[this.keywordIndex]]) && source.keepWithNext !== dest[keepWithNextProperty[this.keywordIndex]])) {\n return false;\n }\n if ((isNullOrUndefined(dest[keepLinesTogetherProperty[this.keywordIndex]]) && source.keepLinesTogether !== false)\n || (!isNullOrUndefined(dest[keepLinesTogetherProperty[this.keywordIndex]]) && source.keepLinesTogether !== dest[keepLinesTogetherProperty[this.keywordIndex]])) {\n return false;\n }\n if ((isNullOrUndefined(dest[widowControlProperty[this.keywordIndex]]) && source.widowControl !== false)\n || (!isNullOrUndefined(dest[widowControlProperty[this.keywordIndex]]) && source.widowControl !== dest[widowControlProperty[this.keywordIndex]])) {\n return false;\n }\n if ((isNullOrUndefined(dest[outlineLevelProperty[this.keywordIndex]]) && source.outlineLevel !== 'BodyText')\n || (!isNullOrUndefined(dest[outlineLevelProperty[this.keywordIndex]]) && source.outlineLevel !== dest[outlineLevelProperty[this.keywordIndex]])) {\n return false;\n }\n if ((isNullOrUndefined(dest[lineSpacingProperty[this.keywordIndex]]) && source.lineSpacing !== 1)\n || (!isNullOrUndefined(dest[lineSpacingProperty[this.keywordIndex]]) && Math.round(source.lineSpacing) !== Math.round(dest[lineSpacingProperty[this.keywordIndex]]))) {\n return false;\n }\n if ((isNullOrUndefined(dest[lineSpacingTypeProperty[this.keywordIndex]]) && source.lineSpacingType !== 'Multiple')\n || (!isNullOrUndefined(dest[lineSpacingTypeProperty[this.keywordIndex]]) && source.lineSpacingType !== dest[lineSpacingTypeProperty[this.keywordIndex]])) {\n return false;\n }\n return true;\n };\n Editor.prototype.getBlocksToUpdate = function (blocks) {\n var blcks = [];\n for (var i = 0; i < blocks.length; i++) {\n var obj = blocks[i];\n if (obj[paragraphFormatProperty[this.keywordIndex]] && obj[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]]\n && Object.keys(obj[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]]).length > 0) {\n blcks.push(obj);\n }\n else if (obj[rowsProperty[this.keywordIndex]]) {\n for (var j = 0; j < obj[rowsProperty[this.keywordIndex]].length; j++) {\n var currentRow = obj[rowsProperty[this.keywordIndex]][j];\n for (var k = 0; k < currentRow[cellsProperty[this.keywordIndex]].length; k++) {\n var cell = currentRow[cellsProperty[this.keywordIndex]][k];\n blcks = blcks.concat(this.getBlocksToUpdate(cell[blocksProperty[this.keywordIndex]]));\n }\n }\n }\n }\n return blcks;\n };\n Editor.prototype.updateListIdForBlocks = function (blocks, abstractList, list, id, idToUpdate) {\n var update = false;\n for (var i = 0; i < blocks.length; i++) {\n var obj = blocks[i];\n if (obj[paragraphFormatProperty[this.keywordIndex]] && obj[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]]\n && Object.keys(obj[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]]).length > 0) {\n var format = obj[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]];\n var existingList = this.listLevelPatternInCollection(format[listLevelNumberProperty[this.keywordIndex]], abstractList[levelsProperty[this.keywordIndex]][format[listLevelNumberProperty[this.keywordIndex]]]);\n if (format[listIdProperty[this.keywordIndex]] === id) {\n if (isNullOrUndefined(existingList) && (!list || (list\n && !this.checkSameLevelFormat(format[listLevelNumberProperty[this.keywordIndex]], abstractList, list)))) {\n update = true;\n format[listIdProperty[this.keywordIndex]] = idToUpdate;\n }\n else if (!isNullOrUndefined(existingList)\n && this.checkSameLevelFormat(format[listLevelNumberProperty[this.keywordIndex]], abstractList, existingList)) {\n if (!format.isUpdated) {\n format[listIdProperty[this.keywordIndex]] = existingList[listIdProperty[this.keywordIndex]];\n format.isUpdated = true;\n }\n update = false;\n }\n }\n }\n else if (obj[rowsProperty[this.keywordIndex]]) {\n for (var j = 0; j < obj[rowsProperty[this.keywordIndex]].length; j++) {\n var row = obj[rowsProperty[this.keywordIndex]][j];\n for (var k = 0; k < row[cellsProperty[this.keywordIndex]].length; k++) {\n var cell = row[cellsProperty[this.keywordIndex]][k];\n var toUpdate = this.updateListIdForBlocks(cell[blocksProperty[this.keywordIndex]], abstractList, list, id, idToUpdate);\n if (!update) {\n update = toUpdate;\n }\n }\n }\n }\n }\n return update;\n };\n Editor.prototype.updatePasteContent = function (pasteContent, sectionId) {\n var _this = this;\n var uniqueListId = this.getUniqueListOrAbstractListId(true);\n if (pasteContent[listsProperty[this.keywordIndex]].filter(function (obj) { return obj[listIdProperty[_this.keywordIndex]] === uniqueListId; }).length > 0) {\n var sortedPasteList = pasteContent[listsProperty[this.keywordIndex]].slice().sort(function (a, b) {\n return a[listIdProperty[_this.keywordIndex]] - b[listIdProperty[_this.keywordIndex]];\n });\n uniqueListId = sortedPasteList[sortedPasteList.length - 1][listIdProperty[this.keywordIndex]] + 1;\n }\n var uniqueAbsLstId = this.getUniqueListOrAbstractListId(false);\n if (pasteContent[abstractListsProperty[this.keywordIndex]].filter(function (obj) {\n return obj[abstractListIdProperty[_this.keywordIndex]] === uniqueAbsLstId;\n }).length > 0) {\n var sortedPasteAbsList = pasteContent[abstractListsProperty[this.keywordIndex]].slice().sort(function (a, b) {\n return a[abstractListIdProperty[_this.keywordIndex]] - b[abstractListIdProperty[_this.keywordIndex]];\n });\n uniqueAbsLstId = sortedPasteAbsList[sortedPasteAbsList.length - 1][abstractListIdProperty[this.keywordIndex]] + 1;\n }\n var _loop_1 = function (k) {\n var list = pasteContent[listsProperty[this_1.keywordIndex]][k];\n var abstractList = pasteContent[abstractListsProperty[this_1.keywordIndex]].filter(function (obj) {\n return obj[abstractListIdProperty[_this.keywordIndex]] === list[abstractListIdProperty[_this.keywordIndex]];\n })[0];\n var lstDup = this_1.documentHelper.lists.filter(function (obj) {\n return obj.listId === list[listIdProperty[_this.keywordIndex]];\n });\n if (!isNullOrUndefined(abstractList)) {\n var isUpdate = this_1.updateListIdForBlocks(pasteContent[sectionsProperty[this_1.keywordIndex]][sectionId][blocksProperty[this_1.keywordIndex]], abstractList, lstDup[0], list[listIdProperty[this_1.keywordIndex]], uniqueListId);\n if (isUpdate) {\n var absListId = abstractList[abstractListIdProperty[this_1.keywordIndex]];\n // iterate the list object from pasteContent and update the abstractListId with new value.\n for (var i = 0; i < pasteContent[listsProperty[this_1.keywordIndex]].length; i++) {\n var listObj = pasteContent[listsProperty[this_1.keywordIndex]][i];\n if (listObj[abstractListIdProperty[this_1.keywordIndex]] === absListId) {\n listObj[abstractListIdProperty[this_1.keywordIndex]] = uniqueAbsLstId;\n }\n }\n abstractList[abstractListIdProperty[this_1.keywordIndex]] = uniqueAbsLstId;\n list[listIdProperty[this_1.keywordIndex]] = uniqueListId;\n uniqueListId++;\n uniqueAbsLstId++;\n }\n else {\n pasteContent[listsProperty[this_1.keywordIndex]].splice(k, 1);\n pasteContent[abstractListsProperty[this_1.keywordIndex]].splice(pasteContent[abstractListsProperty[this_1.keywordIndex]].indexOf(abstractList), 1);\n k--;\n }\n }\n out_k_1 = k;\n };\n var this_1 = this, out_k_1;\n for (var k = 0; k < pasteContent[listsProperty[this.keywordIndex]].length; k++) {\n _loop_1(k);\n k = out_k_1;\n }\n var blocks = this.getBlocksToUpdate(pasteContent[sectionsProperty[this.keywordIndex]][sectionId][blocksProperty[this.keywordIndex]]);\n for (var i = 0; i < blocks.length; i++) {\n var blck = blocks[i];\n delete blck[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]].isUpdated;\n }\n };\n /**\n * @private\n */\n Editor.prototype.getBlocks = function (pasteContent, isPaste, sections, comments, revision) {\n var widgets = [];\n if (typeof (pasteContent) === 'string') {\n var startParagraph = this.selection.start.paragraph;\n if (!this.selection.isForward) {\n startParagraph = this.selection.end.paragraph;\n }\n var arr = [];\n var txt = pasteContent;\n txt = txt.replace(/\\r?\\n/g, '\\r');\n arr = txt.split('\\r');\n var widget = [];\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets = widget;\n for (var i = 0; i < arr.length; i++) {\n if (i === arr.length - 1 && arr[i].length === 0 && !this.isInsertText) {\n continue;\n }\n var currentInline = this.selection.start.currentWidget.getInline(this.selection.start.offset, 0);\n var element = this.selection.getPreviousValidElement(currentInline.element);\n if (element !== currentInline.element) {\n element = this.selection.getNextValidElement(currentInline.element);\n }\n var insertFormat = void 0;\n if (startParagraph.isEmpty()) {\n insertFormat = startParagraph.characterFormat;\n }\n else if (!isNullOrUndefined(element) && !this.isInsertText) {\n insertFormat = element.characterFormat;\n }\n else {\n this.copyInsertFormat(startParagraph.characterFormat, false);\n }\n var insertParaFormat = this.documentHelper.selection.copySelectionParagraphFormat();\n if (!isNullOrUndefined(this.previousParaFormat)) {\n insertParaFormat = this.previousParaFormat;\n }\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat.copyFormat(insertParaFormat);\n var line = new LineWidget(paragraph);\n if (arr[i].length > 0) {\n //Too many character in single line it took time past the content will cause layout performance, so spliting by space.\n var words = arr[i].split(/(\\s+)/);\n for (var j = 0; j < words.length; j++) {\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(insertFormat);\n textElement.text = words[j];\n line.children.push(textElement);\n textElement.line = line;\n }\n }\n paragraph.childWidgets.push(line);\n paragraph.containerWidget = bodyWidget;\n widget.push(paragraph);\n }\n widgets.push(bodyWidget);\n }\n else {\n var parser = this.documentHelper.owner.parser;\n parser.keywordIndex = this.keywordIndex;\n parser.isPaste = isPaste;\n parser.isHtmlPaste = this.isHtmlPaste;\n parser.addCustomStyles(pasteContent);\n if (pasteContent[commentsProperty[this.keywordIndex]] && pasteContent[commentsProperty[this.keywordIndex]].length > 0) {\n parser.commentsCollection = new Dictionary();\n parser.commentStarts = new Dictionary();\n parser.commentEnds = new Dictionary();\n parser.parseComments(pasteContent, comments ? comments : this.documentHelper.comments);\n }\n var bodyWidget = void 0;\n this.selection.currentPasteAction = 'DefaultPaste';\n for (var i = 0; i < pasteContent[sectionsProperty[this.keywordIndex]].length; i++) {\n if (!this.isPasteListUpdated && !isNullOrUndefined(pasteContent[listsProperty[this.keywordIndex]])) {\n if (this.documentHelper.lists.length > 0) {\n this.updatePasteContent(pasteContent, i);\n }\n this.isPasteListUpdated = true;\n if (!isNullOrUndefined(pasteContent[abstractListsProperty[this.keywordIndex]])) {\n parser.parseAbstractList(pasteContent, this.documentHelper.abstractLists);\n }\n if (!isNullOrUndefined(pasteContent[listsProperty[this.keywordIndex]])) {\n parser.parseList(pasteContent, this.documentHelper.lists);\n }\n }\n if (!isNullOrUndefined(pasteContent[revisionsProperty[this.keywordIndex]])) {\n if (isPaste) {\n var revisionChanges = this.viewer.owner.revisionsInternal.changes;\n if (!isNullOrUndefined(parser.revisionCollection)) {\n parser.revisionCollection = undefined;\n }\n if (this.isRemoteAction) {\n parser.revisionCollection = this.documentHelper.revisionsInternal;\n }\n else {\n parser.revisionCollection = new Dictionary();\n }\n var revisionCollection = parser.revisionCollection;\n if (!(this.documentHelper.owner.sfdtExportModule.copyWithTrackChange && parser.isCutPerformed)) {\n if (pasteContent[revisionsProperty[this.keywordIndex]].length >= 1) {\n for (var i_1 = 0; i_1 < pasteContent[revisionsProperty[this.keywordIndex]].length; i_1++) {\n var revisionCheck = true;\n if (revisionCollection.containsKey(pasteContent[revisionsProperty[this.keywordIndex]][i_1][revisionIdProperty[this.keywordIndex]])) {\n if (revisionChanges.length > 0) {\n for (var j_1 = 0; j_1 < revisionChanges.length; j_1++) {\n if (revisionChanges[j_1].revisionID === pasteContent[revisionsProperty[this.keywordIndex]][i_1][revisionIdProperty[this.keywordIndex]]) {\n revisionCheck = false;\n }\n }\n }\n if (revisionCheck && !this.isRemoteAction) {\n var revision_1 = revisionCollection.get(pasteContent[revisionsProperty[this.keywordIndex]][i_1][revisionIdProperty[this.keywordIndex]]);\n revisionChanges.push(revision_1);\n }\n }\n else {\n parser.parseRevisions(pasteContent, revisionChanges);\n }\n }\n }\n }\n this.documentHelper.owner.sfdtExportModule.copyWithTrackChange = false;\n }\n else {\n parser.revisionCollection = this.documentHelper.revisionsInternal;\n parser.parseRevisions(pasteContent, revision);\n }\n }\n bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n if (!isPaste) {\n sections.unshift(bodyWidget);\n }\n else {\n widgets.push(bodyWidget);\n }\n if (isPaste && !isNullOrUndefined(pasteContent[stylesProperty[this.keywordIndex]])) {\n for (var j = 0; j < pasteContent[stylesProperty[this.keywordIndex]].length; j++) {\n var styleName = pasteContent[stylesProperty[this.keywordIndex]][j][nameProperty[this.keywordIndex]];\n var style = this.documentHelper.styles.findByName(styleName);\n if (isNullOrUndefined(style)) {\n parser.parseStyle(pasteContent, pasteContent[stylesProperty[this.keywordIndex]][j], this.documentHelper.styles);\n }\n }\n }\n parser.parseBody(pasteContent[sectionsProperty[this.keywordIndex]][i][blocksProperty[this.keywordIndex]], bodyWidget.childWidgets, undefined, undefined, undefined, pasteContent[stylesProperty[this.keywordIndex]]);\n if (pasteContent[lastParagraphMarkCopiedProperty[this.keywordIndex]] && this.selection.start.paragraph.isEmpty() && this.documentHelper.pages.length == 1 && this.documentHelper.pages[0].bodyWidgets[0].childWidgets.length == 1) {\n parser.parseSectionFormat(this.keywordIndex, pasteContent[sectionsProperty[this.keywordIndex]][i][sectionFormatProperty[this.keywordIndex]], bodyWidget.sectionFormat);\n }\n parser.isPaste = false;\n parser.isHtmlPaste = false;\n }\n if (pasteContent[lastParagraphMarkCopiedProperty[this.keywordIndex]]) {\n this.isLastParaMarkCopied = true;\n var paragraphWidget = new ParagraphWidget();\n bodyWidget.childWidgets.push(paragraphWidget);\n }\n }\n if (this.currentPasteOptions === 'MergeWithExistingFormatting') {\n this.applyMergeFormat(widgets);\n }\n return widgets;\n };\n Editor.prototype.applyMergeFormat = function (bodyWidgets) {\n var startParagraph = this.selection.start.paragraph;\n var currentInline = this.selection.start.currentWidget.getInline(this.selection.start.offset, 0);\n var element = this.selection.getPreviousValidElement(currentInline.element);\n var insertFormat = element ? element.characterFormat :\n this.copyInsertFormat(startParagraph.characterFormat, true);\n var insertParaFormat = this.documentHelper.selection.paragraphFormat;\n for (var k = 0; k < bodyWidgets.length; k++) {\n var widgets = bodyWidgets[k].childWidgets;\n for (var i = 0; i < widgets.length; i++) {\n var widget = widgets[i];\n if (widget instanceof ParagraphWidget) {\n this.applyParaFormatInternal(widget.paragraphFormat, insertParaFormat);\n this.applyFormatInternal(widget, insertFormat);\n }\n else {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var row = widget.childWidgets[j];\n for (var k_1 = 0; k_1 < row.childWidgets.length; k_1++) {\n var cell = row.childWidgets[k_1];\n for (var l = 0; l < cell.childWidgets.length; l++) {\n this.applyFormatInternal(cell.childWidgets[l], insertFormat);\n }\n }\n }\n }\n }\n }\n };\n Editor.prototype.applyParaFormatInternal = function (paragraphFormat, insertedParaFormat) {\n if (!isNullOrUndefined(insertedParaFormat.leftIndent)) {\n paragraphFormat.leftIndent = insertedParaFormat.leftIndent;\n }\n if (!isNullOrUndefined(insertedParaFormat.rightIndent)) {\n paragraphFormat.rightIndent = insertedParaFormat.rightIndent;\n }\n if (!isNullOrUndefined(insertedParaFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = insertedParaFormat.firstLineIndent;\n }\n if (!isNullOrUndefined(insertedParaFormat.textAlignment)) {\n paragraphFormat.textAlignment = insertedParaFormat.textAlignment;\n }\n else {\n paragraphFormat.textAlignment = 'Left';\n }\n if (!isNullOrUndefined(insertedParaFormat.outlineLevel)) {\n paragraphFormat.outlineLevel = insertedParaFormat.outlineLevel;\n }\n else {\n paragraphFormat.outlineLevel = 'BodyText';\n }\n if (insertedParaFormat.beforeSpacing === -1) {\n paragraphFormat.beforeSpacing = 0;\n }\n else {\n paragraphFormat.beforeSpacing = insertedParaFormat.beforeSpacing;\n }\n if (insertedParaFormat.afterSpacing === -1) {\n paragraphFormat.afterSpacing = 0;\n }\n else {\n paragraphFormat.afterSpacing = insertedParaFormat.afterSpacing;\n }\n if (insertedParaFormat.lineSpacing === 0) {\n paragraphFormat.lineSpacing = 1;\n }\n else {\n paragraphFormat.lineSpacing = insertedParaFormat.lineSpacing;\n }\n if (!isNullOrUndefined(insertedParaFormat.lineSpacingType)) {\n paragraphFormat.lineSpacingType = insertedParaFormat.lineSpacingType;\n }\n if (!isNullOrUndefined(insertedParaFormat.bidi)) {\n paragraphFormat.bidi = insertedParaFormat.bidi;\n }\n if (!isNullOrUndefined(insertedParaFormat.spaceAfterAuto)) {\n paragraphFormat.spaceAfterAuto = insertedParaFormat.spaceAfterAuto;\n }\n if (!isNullOrUndefined(insertedParaFormat.spaceBeforeAuto)) {\n paragraphFormat.spaceBeforeAuto = insertedParaFormat.spaceBeforeAuto;\n }\n if (!isNullOrUndefined(insertedParaFormat.keepWithNext)) {\n paragraphFormat.keepWithNext = insertedParaFormat.keepWithNext;\n }\n if (!isNullOrUndefined(insertedParaFormat.keepLinesTogether)) {\n paragraphFormat.keepLinesTogether = insertedParaFormat.keepLinesTogether;\n }\n if (!isNullOrUndefined(insertedParaFormat.widowControl)) {\n paragraphFormat.widowControl = insertedParaFormat.widowControl;\n }\n if (!isNullOrUndefined(insertedParaFormat.contextualSpacing)) {\n paragraphFormat.contextualSpacing = insertedParaFormat.contextualSpacing;\n }\n if (paragraphFormat.tabs) {\n paragraphFormat.tabs = [];\n }\n };\n Editor.prototype.applyFormatInternal = function (widget, insertFormat) {\n if (widget instanceof ParagraphWidget) {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var lineWidget = widget.childWidgets[j];\n for (var k = 0; k < lineWidget.children.length; k++) {\n var inlineCharacterFormat = lineWidget.children[k].characterFormat;\n var characterFormat = inlineCharacterFormat.cloneFormat();\n if (characterFormat.bold) {\n lineWidget.children[k].characterFormat.bold = characterFormat.bold;\n }\n if (characterFormat.italic) {\n lineWidget.children[k].characterFormat.italic = characterFormat.italic;\n }\n if (characterFormat.underline !== 'None') {\n lineWidget.children[k].characterFormat.underline = characterFormat.underline;\n }\n if (this.currentPasteOptions === 'MergeWithExistingFormatting' && !isNullOrUndefined(insertFormat)) {\n if (insertFormat.bold) {\n lineWidget.children[k].characterFormat.bold = insertFormat.bold;\n }\n if (insertFormat.italic) {\n lineWidget.children[k].characterFormat.italic = insertFormat.italic;\n }\n if (insertFormat.underline !== 'None') {\n lineWidget.children[k].characterFormat.underline = insertFormat.underline;\n }\n if (lineWidget.children[k].characterFormat.fontColor !== insertFormat.fontColor) {\n lineWidget.children[k].characterFormat.fontColor = insertFormat.fontColor;\n }\n if (lineWidget.children[k].characterFormat.fontSize !== insertFormat.fontSize) {\n lineWidget.children[k].characterFormat.fontSize = insertFormat.fontSize;\n lineWidget.children[k].characterFormat.fontSizeBidi = insertFormat.fontSizeBidi;\n }\n if (lineWidget.children[k].characterFormat.fontFamily !== insertFormat.fontFamily) {\n lineWidget.children[k].characterFormat.fontFamily = insertFormat.fontFamily;\n lineWidget.children[k].characterFormat.fontFamilyBidi = insertFormat.fontFamilyBidi;\n }\n if (lineWidget.children[k].characterFormat.fontFamilyAscii !== insertFormat.fontFamilyAscii) {\n lineWidget.children[k].characterFormat.fontFamilyAscii = insertFormat.fontFamilyAscii;\n }\n if (lineWidget.children[k].characterFormat.fontFamilyFarEast !== insertFormat.fontFamilyFarEast) {\n lineWidget.children[k].characterFormat.fontFamilyFarEast = insertFormat.fontFamilyFarEast;\n }\n if (lineWidget.children[k].characterFormat.fontFamilyAscii !== insertFormat.fontFamilyAscii) {\n lineWidget.children[k].characterFormat.fontFamilyAscii = insertFormat.fontFamilyAscii;\n }\n }\n }\n }\n }\n else {\n for (var j = 0; j < widget.childWidgets.length; j++) {\n var rowWidget = widget.childWidgets[j];\n for (var k = 0; k < rowWidget.childWidgets.length; k++) {\n var cellWidget = rowWidget.childWidgets[k];\n for (var l = 0; l < cellWidget.childWidgets.length; l++) {\n this.applyFormatInternal(cellWidget.childWidgets[l], insertFormat);\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.applyPasteOptions = function (options, isPasteOptionTextOnly) {\n if (isNullOrUndefined(this.copiedContent) || this.copiedTextContent === '' || isPasteOptionTextOnly) {\n return;\n }\n //this.isSkipHistory = true;\n this.currentPasteOptions = options;\n var start = this.selection.isForward ? this.selection.start : this.selection.end;\n var currentFormat = start.paragraph.paragraphFormat;\n var copiedContent = this.copiedContent;\n var copiedTextContent = this.copiedTextContent;\n if (this.editorHistory && this.editorHistory.canUndo()) {\n this.editorHistory.undo();\n this.editorHistory.redoStack.pop();\n }\n this.copiedContent = copiedContent;\n this.copiedTextContent = copiedTextContent;\n this.selection.isViewPasteOptions = true;\n // }\n switch (options) {\n case 'KeepSourceFormatting':\n this.pasteContents(this.copiedContent !== '' ? this.copiedContent : this.copiedTextContent);\n break;\n case 'MergeWithExistingFormatting':\n this.pasteContents(this.copiedContent !== '' ? this.copiedContent : this.copiedTextContent, currentFormat);\n break;\n case 'KeepTextOnly':\n this.pasteContents(this.copiedTextContent);\n break;\n }\n //this.isSkipHistory = false;\n };\n /**\n * @private\n */\n Editor.prototype.applyTablePasteOptions = function (options) {\n if (isNullOrUndefined(this.copiedContent) || this.copiedTextContent === '') {\n return;\n }\n this.isPaste = true;\n var copiedContent = this.copiedContent !== '' ? this.copiedContent : this.copiedTextContent;\n if (this.editorHistory && this.editorHistory.canUndo()) {\n // this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.editorHistory.undo();\n this.editorHistory.redoStack.pop();\n // this.isSkipOperationsBuild = false;\n }\n var widgets = this.getBlocks(copiedContent, true);\n var currentFormat = this.selection.start.paragraph.paragraphFormat;\n switch (options) {\n case 'NestTable':\n this.pasteAsNestedTable(widgets, currentFormat);\n break;\n case 'InsertAsRows':\n this.pasteAsNewRow(widgets[0].childWidgets[0]);\n break;\n case 'InsertAsColumns':\n this.pasteAsNewColumn(widgets[0].childWidgets[0]);\n break;\n case 'OverwriteCells':\n this.pasteOverwriteCell(widgets[0].childWidgets[0]);\n break;\n }\n this.isPaste = false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.pasteContents = function (content, currentFormat) {\n if (!isNullOrUndefined(content.optimizeSfdt) && content.optimizeSfdt) {\n this.keywordIndex = 1;\n }\n else {\n this.keywordIndex = 0;\n }\n if (typeof (content) !== 'string') {\n this.copiedContent = content;\n }\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.documentHelper.selection.isInlineFormFillMode()) {\n var inline = this.selection.getCurrentFormField();\n var resultText = this.getFieldResultText();\n var maxLength = inline.formFieldData.maxLength;\n var selectedTextLength = this.documentHelper.selection.text.length;\n if (maxLength > 0) {\n if (selectedTextLength === 0) {\n var contentlength = maxLength - resultText.length;\n content = content.substring(0, contentlength);\n }\n else if (selectedTextLength > 0) {\n content = content.substring(0, selectedTextLength);\n }\n }\n }\n if (!isNullOrUndefined(content[imagesProperty[this.keywordIndex]])) {\n var images = content[imagesProperty[this.keywordIndex]];\n if (this.documentHelper.images.length > 0) {\n this.pasteImageIndex = new Dictionary();\n var newImages = {};\n for (var img in images) {\n var newIndex = (Math.max.apply(Math, this.documentHelper.images.keys) + 1) + parseInt(img);\n newImages[newIndex] = images[img];\n this.pasteImageIndex.add(img, newIndex.toString());\n }\n images = newImages;\n }\n this.documentHelper.owner.parser.parseImages(images);\n }\n this.pasteContentsInternal(this.getBlocks(content, true), true, currentFormat);\n if (this.isRemoteAction) {\n this.updatePasteRevision();\n this.owner.trackChangesPane.updateTrackChanges();\n }\n if (content[commentsProperty[this.keywordIndex]] && content[commentsProperty[this.keywordIndex]].length > 0) {\n this.documentHelper.layout.layoutComments(this.documentHelper.comments);\n }\n if (!isNullOrUndefined(this.pasteImageIndex)) {\n this.pasteImageIndex.destroy();\n }\n this.pasteImageIndex = undefined;\n this.isInsertField = false;\n this.isPasteListUpdated = false;\n this.isLastParaMarkCopied = false;\n };\n Editor.prototype.pasteContentsInternal = function (widgets, isPaste, currentFormat) {\n this.isPaste = isPaste;\n var selection = this.documentHelper.selection;\n if (selection.start.paragraph.isInsideTable && selection.end.paragraph.isInsideTable) {\n var isTablePaste = false;\n if (widgets.length === 1) {\n var childWidgets = widgets[0].childWidgets;\n if ((childWidgets.length < 3)) {\n if (childWidgets.length === 1 && childWidgets[0] instanceof TableWidget || childWidgets.length === 2 && childWidgets[0] instanceof TableWidget && childWidgets[1].isEmpty()) {\n isTablePaste = true;\n }\n }\n }\n if (isTablePaste) {\n var startCell = selection.start.paragraph.associatedCell;\n var endCell = selection.end.paragraph.associatedCell;\n var newTable = widgets[0].childWidgets[0];\n // tslint:disable-next-line:max-line-length\n if (startCell.ownerTable.equals(endCell.ownerTable)) {\n if (selection.start.paragraph.associatedCell.rowIndex === 0 && selection.end.paragraph.associatedCell.rowIndex === 0\n && startCell.equals(endCell) && !this.selection.isCellSelected(startCell, selection.start, selection.end)) {\n this.selection.currentPasteAction = 'InsertAsColumns';\n this.pasteAsNewColumn(newTable);\n }\n else {\n this.selection.currentPasteAction = 'OverwriteCells';\n this.pasteOverwriteCell(newTable);\n }\n this.isPaste = false;\n return;\n }\n }\n }\n var commentStartToInsert;\n //if (!this.isSkipHistory) {\n commentStartToInsert = this.checkAndRemoveComments();\n //}\n this.defaultPaste(widgets, currentFormat);\n //if (!this.isSkipHistory) {\n this.updateHistoryForComments(commentStartToInsert);\n //}\n };\n Editor.prototype.defaultPaste = function (widgets, currentFormat) {\n var selection = this.documentHelper.selection;\n var isRemoved = true;\n var layoutWholeDocument = false;\n //if (!this.isSkipHistory) {\n this.initComplexHistory('Paste');\n //}\n if (this.documentHelper.isListTextSelected) {\n var paragraph = selection.start.paragraph;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n this.onApplyList(undefined);\n }\n }\n //if (!this.isSkipHistory) {\n this.initHistory('Paste');\n //}\n if ((!selection.isEmpty && (!this.owner.documentHelper.isDragging || !this.owner.selection.isImageSelected)) || this.documentHelper.isListTextSelected) {\n isRemoved = this.removeSelectedContentInternal(selection, selection.start, selection.end);\n }\n if (isRemoved) {\n layoutWholeDocument = this.pasteContent(widgets, currentFormat);\n if (this.owner.enableTrackChanges && this.isInsertingTOC && isNullOrUndefined(this.owner.documentHelper.blockToShift)) {\n this.owner.documentHelper.blockToShift = this.selection.start.paragraph;\n }\n }\n else if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n if (this.editorHistory.currentBaseHistoryInfo) {\n if (this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n var start = this.selection.getTextPosBasedOnLogicalIndex(this.editorHistory.currentBaseHistoryInfo.insertPosition);\n var end = this.selection.getTextPosBasedOnLogicalIndex(this.editorHistory.currentBaseHistoryInfo.endPosition);\n if (!this.isRemoteAction) {\n var documentContent = !isNullOrUndefined(this.owner.sfdtExportModule) ? this.owner.sfdtExportModule.write((this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0), start.currentWidget, start.offset, end.currentWidget, end.offset, false, true) : {};\n this.editorHistory.currentBaseHistoryInfo.pasteContent = documentContent;\n }\n }\n }\n this.editorHistory.updateHistory();\n this.editorHistory.updateComplexHistory();\n }\n else {\n this.reLayout(selection, selection.isEmpty);\n }\n if (layoutWholeDocument) {\n if (this.selection.pasteElement) {\n this.selection.pasteElement.style.display = 'none';\n }\n this.layoutWholeDocument(true);\n }\n this.isPaste = false;\n };\n Editor.prototype.pasteAsNewColumn = function (data) {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteColumn');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n this.selection.owner.isLayoutEnabled = false;\n var cloneTable = data.clone();\n var rowWidget = cloneTable.childWidgets[0];\n var numberOfRows = cloneTable.childWidgets.length;\n var numberOfColumns = rowWidget.childWidgets.length;\n var cellIndex = startCell.columnIndex;\n var startParagraph = undefined;\n var newCell = undefined;\n var columnCount = numberOfColumns;\n var rowSpannedCells = [];\n if (numberOfRows > table.childWidgets.length) {\n this.addRows(numberOfRows - table.childWidgets.length, table);\n this.tableUpdate(table);\n }\n else if (table.childWidgets.length > numberOfRows) {\n this.addRows(table.childWidgets.length - numberOfRows, cloneTable, table);\n this.tableUpdate(table);\n }\n for (var i = 0; i < columnCount; i++) {\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n var rowWidget_1 = cloneTable.childWidgets[j];\n var cellWidget = rowWidget_1.childWidgets[i];\n var cell = row.childWidgets[startCell.columnIndex];\n newCell = this.createColumn(this.selection.getLastParagraph(startCell));\n newCell.index = j;\n newCell.rowIndex = row.index;\n newCell.containerWidget = row;\n var prevCell = row.previousWidget;\n var spannedCell = this.rowspannedCollection(row, rowSpannedCells);\n if (cell != null) {\n newCell.cellFormat.copyFormat(cell.cellFormat);\n newCell.cellFormat.rowSpan = 1;\n }\n else if (spannedCell.length > 0) {\n for (var z = 0; z < spannedCell.length; z++) {\n if (prevCell.rowIndex + (spannedCell[z].cellFormat.rowSpan - 1) >= row.rowIndex) {\n newCell.cellFormat.copyFormat(spannedCell[z].cellFormat);\n newCell.cellFormat.rowSpan = 1;\n }\n }\n }\n cellWidget.containerWidget = newCell.containerWidget;\n newCell.childWidgets = cellWidget.childWidgets;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(newCell);\n }\n if (cellIndex === 0) {\n row.childWidgets.splice(i, 0, newCell);\n }\n else {\n this.insertSpannedCells(row, rowSpannedCells, newCell, cellIndex);\n }\n }\n }\n this.tableReLayout(table, startParagraph, newCell, true);\n }\n };\n Editor.prototype.pasteAsNestedTable = function (widgets, currentFormat) {\n var data = widgets[0].childWidgets[0];\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteNested');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n this.cloneTableToHistoryInfo(table);\n }\n var startParagraph = undefined;\n var dataTable = data.clone();\n var endCell = this.selection.end.paragraph.containerWidget;\n var pasteCell = void 0;\n if (startCell != endCell) {\n var row = startCell.ownerRow;\n while (row != endCell.ownerRow.nextRow) {\n for (var cellIndex = startCell.columnIndex; cellIndex <= endCell.columnIndex; cellIndex++) {\n pasteCell = row.childWidgets[cellIndex];\n var clonedTable = dataTable.clone();\n var newPara = new ParagraphWidget();\n pasteCell.childWidgets = [];\n pasteCell.childWidgets[0] = clonedTable;\n pasteCell.childWidgets[1] = newPara;\n newPara.containerWidget = pasteCell;\n clonedTable.containerWidget = pasteCell;\n clonedTable.index = 0;\n newPara.index = 1;\n row.childWidgets[cellIndex] = pasteCell;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(pasteCell);\n }\n }\n row = row.nextRow;\n }\n this.tableReLayout(table, startParagraph, pasteCell);\n }\n else {\n this.defaultPaste(widgets, currentFormat);\n }\n }\n };\n Editor.prototype.pasteOverwriteCell = function (data) {\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteOverwrite');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n this.cloneTableToHistoryInfo(table);\n }\n var cloneTable = data.clone();\n // let rowWidget: TableRowWidget = cloneTable.childWidgets[0] as TableRowWidget;\n var numberOfRows = cloneTable.childWidgets.length;\n var endCell = this.getOwnerCell(!this.selection.isForward);\n // let columnCount: number = numberOfColumns;\n // let newCell: TableCellWidget = undefined;\n var coloumnIndexPaste = startCell.columnIndex;\n var rowIndexPaste = startCell.rowIndex;\n var startParagraph = undefined;\n var row = this.selection.start.paragraph.associatedCell.ownerRow;\n var rowWidget = cloneTable.childWidgets[0];\n var newCells = void 0; // = rowWidget.childWidgets[0] as TableCellWidget;\n var numberOfColumns = rowWidget.childWidgets.length;\n var row2 = startCell.ownerRow;\n if (startCell != endCell) {\n var k = 0;\n var rowSpan = void 0;\n var rowSpanIndex = void 0;\n var columnSpan = void 0;\n var cloneCells = void 0;\n while (row2 != endCell.ownerRow.nextRow) {\n rowWidget = cloneTable.childWidgets[k] || cloneTable.childWidgets[k = 0];\n var rowWidgetLength = rowWidget.childWidgets.length;\n var cellIndexSE = 0;\n for (var cellIndex = startCell.columnIndex; cellIndex <= endCell.columnIndex; cellIndex++) {\n rowWidget = cloneTable.childWidgets[k];\n if (rowSpan > 1 && rowSpanIndex === cellIndex) {\n cellIndex++;\n rowSpan--;\n rowSpanIndex = null;\n }\n if (columnSpan > 1 && cellIndexSE >= (rowWidgetLength - (columnSpan - 1))) {\n columnSpan = 1;\n cellIndex = cellIndex + (columnSpan - 1);\n cellIndexSE = 0;\n }\n newCells = rowWidget.childWidgets[cellIndexSE] || rowWidget.childWidgets[cellIndexSE = 0];\n cloneCells = newCells.clone();\n var pasteCell = row2.childWidgets[cellIndex];\n for (var x = 0; x < cloneCells.childWidgets.length; x++) {\n var newPara = cloneCells.childWidgets[x];\n newPara.containerWidget = pasteCell;\n cloneCells.childWidgets[x] = newPara;\n }\n pasteCell.childWidgets = cloneCells.childWidgets;\n if (newCells.cellFormat.rowSpan > 1) {\n rowSpan = newCells.cellFormat.rowSpan;\n rowSpanIndex = cellIndex;\n }\n if (newCells.cellFormat.columnSpan > 1) {\n columnSpan = newCells.cellFormat.columnSpan;\n }\n row2.childWidgets[cellIndex] = pasteCell;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(cloneCells);\n }\n cellIndexSE++;\n }\n row2 = row2.nextRow;\n k++;\n }\n this.tableReLayout(table, startParagraph, cloneCells);\n }\n else {\n var rowsToAdd = void 0;\n var rowSpan = void 0;\n var rowSpanIndex = void 0;\n var pasteCell = void 0;\n if (numberOfRows > table.childWidgets.length - rowIndexPaste) {\n rowsToAdd = numberOfRows - table.childWidgets.length + rowIndexPaste;\n this.addRows(rowsToAdd, table);\n }\n for (var i = 0; i < numberOfRows; i++) {\n var cellIndex = startCell.columnIndex;\n rowWidget = cloneTable.childWidgets[i];\n var numberOfColumns_1 = rowWidget.childWidgets.length;\n for (var cellIterate = 0; cellIterate < numberOfColumns_1; cellIterate++) {\n newCells = rowWidget.childWidgets[cellIterate];\n var cloneCells = newCells.clone();\n if (rowSpan > 1 && rowSpanIndex === cellIndex) {\n cellIndex++;\n rowSpan--;\n rowSpanIndex = null;\n }\n pasteCell = row.childWidgets[cellIndex];\n if (!pasteCell) {\n pasteCell = cloneCells;\n pasteCell.containerWidget = row;\n pasteCell.index = cellIndex;\n }\n for (var index = 0; index < cloneCells.childWidgets.length; index++) {\n var newPara = cloneCells.childWidgets[index];\n newPara.containerWidget = pasteCell;\n cloneCells.childWidgets[index] = newPara;\n }\n pasteCell.childWidgets = cloneCells.childWidgets;\n if (newCells.cellFormat.rowSpan > 1) {\n rowSpan = newCells.cellFormat.rowSpan; //getting span\n rowSpanIndex = cellIndex;\n }\n row.childWidgets.splice(cellIndex++, 1, pasteCell);\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(pasteCell);\n }\n }\n row = row.nextRow;\n }\n this.tableReLayout(table, startParagraph, pasteCell, true);\n }\n }\n };\n Editor.prototype.pasteAsNewRow = function (data) {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (this.checkIsNotRedoing()) {\n this.initHistory('PasteRow');\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = this.getOwnerCell(!this.selection.isForward).getSplitWidgets()[0];\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = endCell.ownerRow;\n if (this.editorHistory) {\n this.cloneTableToHistoryInfo(table);\n }\n var rowCount = this.getRowCountToInsert();\n var columncount = this.getColumnCountToInsert();\n var rows = [];\n var index = row.rowIndex;\n index++;\n var pasteRowCount = data.childWidgets.length;\n for (var i = 0; i < pasteRowCount; i++) {\n var newRow = data.childWidgets[i].clone();\n if (this.owner.enableTrackChanges) {\n this.insertRevision(newRow.rowFormat, 'Insertion');\n }\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index, false);\n var cellWidget = undefined;\n var paragraphWidget = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cellWidget = table.childWidgets[index].firstChild;\n paragraphWidget = this.selection.getFirstParagraph(cellWidget);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraphWidget = this.documentHelper.getFirstParagraphInFirstCell(widget);\n }\n this.copyContent(table);\n this.documentHelper.layout.reLayoutTable(table);\n this.selection.selectParagraphInternal(paragraphWidget, true);\n this.reLayout(this.selection, true);\n };\n Editor.prototype.tableUpdate = function (table) {\n table.isGridUpdated = false;\n table.calculateGrid();\n table.buildTableColumns();\n table.isGridUpdated = true;\n };\n Editor.prototype.rowspannedCollection = function (row, rowSpannedCells) {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var rowCell = row.childWidgets[j];\n if (rowCell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(rowCell);\n }\n }\n return rowSpannedCells;\n };\n Editor.prototype.insertSpannedCells = function (row, rowSpannedCells, newCell, cellIndex) {\n var isCellInserted = false;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var rowCell = row.childWidgets[j];\n // Add the row spanned cells to colection for adding column before / after row spnned cells.\n if (rowCell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(rowCell);\n }\n if (rowCell.columnIndex + rowCell.cellFormat.columnSpan === cellIndex) {\n row.childWidgets.splice(rowCell.cellIndex + 1, 0, newCell);\n isCellInserted = true;\n }\n else if (cellIndex > rowCell.columnIndex && rowCell.columnIndex + rowCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowCell.columnIndex + rowCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowCell.cellIndex + 1, 0, newCell);\n isCellInserted = true;\n }\n if (isCellInserted) {\n break;\n }\n }\n // If the cell is not inserted for row, then check for row spanned cells.\n if (!isCellInserted) {\n if (rowSpannedCells.length > 0) {\n for (var k = 0; k < rowSpannedCells.length; k++) {\n var rowSpannedCell = rowSpannedCells[k];\n if (rowSpannedCell.ownerRow !== row\n && row.rowIndex <= rowSpannedCell.ownerRow.rowIndex + rowSpannedCell.cellFormat.rowSpan - 1) {\n if (rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan === cellIndex) {\n if (rowSpannedCell.cellIndex > row.childWidgets.length) {\n row.childWidgets.push(newCell);\n }\n else {\n row.childWidgets.splice(rowSpannedCell.cellIndex + 1, 0, newCell);\n }\n isCellInserted = true;\n }\n else if (cellIndex > rowSpannedCell.columnIndex &&\n rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan > cellIndex\n && cellIndex < rowSpannedCell.columnIndex + rowSpannedCell.cellFormat.columnSpan) {\n row.childWidgets.splice(rowSpannedCell.columnIndex, 0, newCell);\n isCellInserted = true;\n }\n }\n if (isCellInserted) {\n break;\n }\n }\n }\n }\n };\n Editor.prototype.addRows = function (count, table, ownerTable) {\n var rowPlacement = 'Below';\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var isInsertRow = false;\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var rows = table.childWidgets.length;\n var rowWidget = table.childWidgets[rows - 1];\n var column = rowWidget.childWidgets.length;\n var cloneTable = ownerTable ? ownerTable : table;\n if (startPos.paragraph.isInsideTable) {\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = rowWidget.childWidgets[column - 1];\n var row = endCell.ownerRow;\n this.rowInsertion(count, rowPlacement, startCell, endCell, row, table, isInsertRow);\n }\n //this.reLayout(this.selection, true);\n };\n Editor.prototype.pasteContent = function (widgets, currentFormat) {\n this.documentHelper.owner.isShiftingEnabled = true;\n var insertPosition = '';\n this.updateInsertPosition();\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n insertPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n else {\n var position = this.selection.start;\n if (!this.selection.isForward) {\n position = this.selection.end;\n }\n var blockInfo = this.selection.getParagraphInfo(position);\n insertPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n this.documentHelper.owner.isLayoutEnabled = true;\n this.documentHelper.owner.isPastingContent = true;\n var layoutWholeDocument = this.pasteCopiedData(widgets, currentFormat);\n var endPosition = '';\n this.updateEndPosition();\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n endPosition = this.editorHistory.currentBaseHistoryInfo.endPosition;\n }\n else {\n var blockInfo = this.selection.getParagraphInfo(this.selection.start);\n endPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n if (this.selection.start.paragraph.isEmpty() && this.selection.start.paragraph.paragraphFormat.bidi) {\n this.documentHelper.layout.reLayoutParagraph(this.selection.start.paragraph, 0, 0);\n }\n var startPosition = new TextPosition(this.documentHelper.owner);\n this.setPositionForCurrentIndex(startPosition, insertPosition);\n var end = new TextPosition(this.documentHelper.owner);\n this.setPositionForCurrentIndex(end, endPosition);\n this.pasteTextPosition = { startPosition: startPosition, endPosition: end };\n this.documentHelper.owner.isPastingContent = false;\n this.documentHelper.selection.fireSelectionChanged(true);\n return layoutWholeDocument;\n };\n Editor.prototype.pasteCopiedData = function (bodyWidget, currentFormat) {\n var layoutWholeDocument = false;\n var hasFootNoteElement = false;\n if (this.documentHelper.layout.isBidiReLayout) {\n this.documentHelper.layout.isBidiReLayout = false;\n }\n if (this.isPaste && this.isSectionEmpty(this.selection) && !this.selection.start.paragraph.isInHeaderFooter) {\n this.previousSectionFormat = new WSectionFormat();\n this.previousSectionFormat.copyFormat(this.selection.start.paragraph.bodyWidget.sectionFormat);\n this.selection.start.paragraph.bodyWidget.sectionFormat.copyFormat(bodyWidget[0].sectionFormat);\n this.selection.start.paragraph.bodyWidget.sectionFormat.footerDistance = this.previousSectionFormat.footerDistance;\n this.selection.start.paragraph.bodyWidget.sectionFormat.headerDistance = this.previousSectionFormat.headerDistance;\n if (this.owner.viewer instanceof PageLayoutViewer) {\n var page = this.selection.start.paragraph.bodyWidget.page;\n this.owner.viewer.updatePageBoundingRectangle(this.selection.start.paragraph.bodyWidget, page, page.boundingRectangle.y);\n this.owner.viewer.updateClientArea(this.selection.start.paragraph.bodyWidget, page);\n }\n layoutWholeDocument = true;\n }\n for (var k = 0; k < bodyWidget.length; k++) {\n if (k !== 0) {\n this.insertSectionBreak(bodyWidget[k].sectionFormat.breakCode);\n }\n var widgets = bodyWidget[k].childWidgets;\n var isConsiderLastBlock = false;\n for (var j = 0; j < widgets.length; j++) {\n var widget = widgets[j];\n if (widget instanceof TableWidget) {\n isConsiderLastBlock = true;\n }\n if (widget instanceof ParagraphWidget && widget.childWidgets.length === 0) {\n widget.childWidgets[0] = new LineWidget(widget);\n }\n if (widget instanceof ParagraphWidget && !isNullOrUndefined(currentFormat)) {\n widget.paragraphFormat.copyFormat(currentFormat);\n var insertFormat = this.copyInsertFormat(this.selection.start.paragraph.characterFormat, false);\n widget.characterFormat.mergeFormat(insertFormat);\n }\n if (j === widgets.length - 1 && widget instanceof ParagraphWidget\n && (!isNullOrUndefined(widget.paragraphFormat.listFormat)\n && isNullOrUndefined(widget.paragraphFormat.listFormat.list)\n && widget.paragraphFormat.listFormat.listId === -1)) {\n var newParagraph = widget;\n if (newParagraph.childWidgets.length > 0\n && newParagraph.childWidgets[0].children.length > 0) {\n var insertPosition = this.selection.start;\n if ((insertPosition.paragraph.paragraphFormat.textAlignment === 'Center'\n || insertPosition.paragraph.paragraphFormat.textAlignment === 'Right') &&\n insertPosition.paragraph.paragraphFormat.listFormat.listId === -1) {\n insertPosition.paragraph.x = this.owner.viewer.clientActiveArea.x;\n }\n if (this.currentPasteOptions === 'KeepTextOnly') {\n var paraFormat = new WParagraphFormat(this.selection.start.paragraph);\n this.selection.start.paragraph.paragraphFormat = paraFormat;\n }\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.insertedNodes.push(newParagraph.clone());\n }\n hasFootNoteElement = this.insertElement(newParagraph.childWidgets[0].children, newParagraph.paragraphFormat);\n }\n }\n else if (widget instanceof BlockWidget) {\n var block = widget;\n var startParagraph = this.selection.start.paragraph;\n var isTable = block instanceof TableWidget;\n if (isTable) {\n var table = block;\n this.generateTableRevision(table);\n if (startParagraph.isInsideTable) {\n //Handled to resize table based on parent cell width.\n var clientWidth = startParagraph.getContainerWidth();\n table.fitCellsToClientArea(clientWidth);\n }\n if (startParagraph.isEmpty() && startParagraph.previousWidget instanceof TableWidget && !this.isPaste) {\n this.insertTableRows(table, startParagraph.previousWidget);\n return layoutWholeDocument;\n }\n }\n this.insertBlockInternal(block);\n }\n }\n }\n if (hasFootNoteElement) {\n layoutWholeDocument = true;\n if (this.pasteFootNoteType === 'Footnote') {\n this.arrangeFootnoteCollection();\n }\n else if (this.pasteFootNoteType === 'Endnote') {\n this.arrangeEndnoteCollection();\n }\n }\n return layoutWholeDocument;\n };\n Editor.prototype.arrangeEndnoteCollection = function () {\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n for (var j = 0; j < this.documentHelper.endnoteCollection.length - 1 - i; j++) {\n var currentStart = this.selection.getElementPosition(this.documentHelper.endnoteCollection[j]).startPosition;\n var nextStart = this.selection.getElementPosition(this.documentHelper.endnoteCollection[j + 1]).startPosition;\n if (!currentStart.isExistBefore(nextStart)) {\n var tempElementBox = this.documentHelper.endnoteCollection[j];\n this.documentHelper.endnoteCollection[j] = this.documentHelper.endnoteCollection[j + 1];\n this.documentHelper.endnoteCollection[j + 1] = tempElementBox;\n }\n }\n }\n };\n Editor.prototype.arrangeFootnoteCollection = function () {\n for (var i = 0; i < this.documentHelper.footnoteCollection.length; i++) {\n for (var j = 0; j < this.documentHelper.footnoteCollection.length - 1 - i; j++) {\n var currentStart = this.selection.getElementPosition(this.documentHelper.footnoteCollection[j]).startPosition;\n var nextStart = this.selection.getElementPosition(this.documentHelper.footnoteCollection[j + 1]).startPosition;\n if (!currentStart.isExistBefore(nextStart)) {\n var tempElementBox = this.documentHelper.footnoteCollection[j];\n this.documentHelper.footnoteCollection[j] = this.documentHelper.footnoteCollection[j + 1];\n this.documentHelper.footnoteCollection[j + 1] = tempElementBox;\n }\n }\n }\n };\n Editor.prototype.generateTableRevision = function (table) {\n if (this.owner.enableTrackChanges && !isNullOrUndefined(table)) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n this.insertRevision(row.rowFormat, 'Insertion');\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var para = cell.childWidgets[k];\n if (!isNullOrUndefined(para)) {\n this.insertRevisionForBlock(para, 'Insertion');\n }\n }\n }\n }\n }\n };\n Editor.prototype.isSectionEmpty = function (selection) {\n var startParagraph = selection.start.paragraph;\n if (startParagraph) {\n if (startParagraph.isInsideTable || startParagraph.isInHeaderFooter ||\n startParagraph !== selection.end.paragraph) {\n return false;\n }\n var bodyWidget = startParagraph.bodyWidget;\n if (bodyWidget) {\n var page = bodyWidget.page;\n if (page) {\n if ((isNullOrUndefined(page.previousPage) || page.previousPage.sectionIndex !== page.sectionIndex)\n && isNullOrUndefined(page.nextPage) && startParagraph.isEmpty() &&\n bodyWidget.childWidgets.length === 1) {\n var isEmpty = true;\n var sectionIndex = selection.start.paragraph.bodyWidget.sectionIndex;\n var headerFooters = this.documentHelper.headersFooters[sectionIndex];\n if (headerFooters) {\n for (var index in headerFooters) {\n var headerFooter = headerFooters[index];\n if (!isNullOrUndefined(headerFooter)) {\n var widget = headerFooter.childWidgets[0];\n if (widget instanceof TableWidget) {\n isEmpty = false;\n }\n else if ((widget instanceof ParagraphWidget) && !widget.isEmpty()) {\n isEmpty = false;\n }\n }\n else {\n isEmpty = false;\n }\n if (!isEmpty) {\n break;\n }\n }\n return isEmpty;\n }\n }\n }\n }\n }\n return false;\n };\n /**\n * Insert table on undo\n *\n * @param {TableWidget} table - Specifies the table\n * @param {TableWidget} newTable - Speciefies the new table\n * @param {boolean} moveRows - Specifies the new row\n * @private\n * @private {void}\n */\n Editor.prototype.insertTableInternal = function (table, newTable, moveRows, skipRemoving) {\n //Gets the index of current table.\n var insertIndex = table.index;\n var owner;\n var currentParagraph = this.selection.start.paragraph;\n if (!table.isInsideTable && newTable.isInsideTable) {\n insertIndex = newTable.index;\n skipRemoving = true;\n owner = currentParagraph.containerWidget;\n }\n if (moveRows) {\n //Moves the rows to table.\n for (var i = 0, index = 0; i < table.childWidgets.length; i++, index++) {\n var row = table.childWidgets[i];\n newTable.childWidgets.splice(index, 0, row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n }\n if (!currentParagraph.isInsideTable && isNullOrUndefined(owner)) {\n table.containerWidget = currentParagraph.containerWidget;\n owner = currentParagraph.containerWidget;\n }\n else if (isNullOrUndefined(owner)) {\n owner = table.containerWidget;\n }\n if (table.isInsideTable) {\n owner = owner.combineWidget(this.owner.viewer);\n }\n //remove old table revisions if it is present.\n this.constructRevisionsForTable(table, false);\n if (!skipRemoving) {\n this.removeBlock(table, true);\n }\n this.removeRevisionFromTable(newTable);\n if (owner instanceof TableCellWidget) {\n owner = owner.combineWidget(this.owner.viewer);\n }\n else {\n var curretBlock = this.documentHelper.layout.checkAndGetBlock(owner, insertIndex);\n if (owner.childWidgets.indexOf(curretBlock) !== -1) {\n insertIndex = owner.childWidgets.indexOf(curretBlock);\n }\n }\n //Inserts table in the current table position.\n var blockAdvCollection = owner.childWidgets;\n blockAdvCollection.splice(insertIndex, 0, newTable);\n if (!skipRemoving) {\n table.containerWidget = undefined;\n newTable.index = table.index;\n }\n newTable.containerWidget = owner;\n this.documentHelper.layout.clearTableWidget(newTable, true, true, true);\n newTable.buildTableColumns();\n this.constructRevisionsForTable(newTable, true);\n newTable.isGridUpdated = true;\n this.updateNextBlocksIndex(newTable, true);\n this.documentHelper.layout.linkFieldInTable(newTable);\n this.documentHelper.layout.layoutBodyWidgetCollection(newTable.index, owner, newTable, false);\n };\n Editor.prototype.removeRevisionFromTable = function (table) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.revisions.length > 0) {\n for (var j = 0; j < row.rowFormat.revisions.length; j++) {\n if (row.rowFormat.revisions[j].range.length === 0) {\n var revisionIndex = row.rowFormat.revisions.indexOf(row.rowFormat.revisions[j]);\n row.rowFormat.revisions.splice(revisionIndex, 1);\n j--;\n }\n }\n }\n }\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.canConstructRevision = function (item) {\n if ((item.revisions.length > 0 && item.revisions[0].range.length === 0) || item.removedIds.length > 0) {\n return true;\n }\n return false;\n };\n Editor.prototype.constructRevisionsForTable = function (table, canConstructRevision) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n if (canConstructRevision) {\n if (this.canConstructRevision(rowWidget.rowFormat)) {\n this.constructRevisionFromID(rowWidget.rowFormat, true);\n }\n for (var rowIndex = 0; rowIndex < rowWidget.childWidgets.length; rowIndex++) {\n var cellWidget = rowWidget.childWidgets[rowIndex];\n for (var paraIndex = 0; paraIndex < cellWidget.childWidgets.length; paraIndex++) {\n if (cellWidget.childWidgets[paraIndex] instanceof ParagraphWidget) {\n this.constructRevisionsForBlock(cellWidget.childWidgets[paraIndex], canConstructRevision);\n }\n else if (cellWidget.childWidgets[paraIndex] instanceof TableWidget) {\n this.constructRevisionsForTable(cellWidget.childWidgets[paraIndex], true);\n }\n }\n }\n }\n else {\n if (!isNullOrUndefined(this.owner.editorHistoryModule) && (this.owner.editorHistoryModule.isUndoing || this.owner.editorHistoryModule.isRedoing)) {\n this.deleteRevision(rowWidget);\n }\n else {\n this.removeDeletedCellRevision(rowWidget);\n }\n }\n }\n };\n Editor.prototype.deleteRevision = function (row) {\n if (row.rowFormat.revisions.length > 0) {\n for (var i = 0; i < row.rowFormat.revisions.length; i++) {\n var currentRevision = row.rowFormat.revisions[i];\n for (var j = 0; j < currentRevision.range.length; j++) {\n currentRevision.range.splice(j, 1);\n j--;\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n }\n }\n };\n Editor.prototype.constructRevisionForFootnote = function (footnote, canConstructRevision) {\n for (var i = 0; i < footnote.bodyWidget.childWidgets.length; i++) {\n if (footnote.bodyWidget.childWidgets[i] instanceof ParagraphWidget) {\n this.constructRevisionsForBlock(footnote.bodyWidget.childWidgets[i], canConstructRevision);\n }\n }\n };\n Editor.prototype.constructRevisionsForBlock = function (paragraph, canConstructRevision) {\n for (var linIndex = 0; linIndex < paragraph.childWidgets.length; linIndex++) {\n var lineWidget = paragraph.childWidgets[linIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n if (canConstructRevision) {\n if (lineWidget.children[elementIndex] instanceof ElementBox && this.canConstructRevision(lineWidget.children[elementIndex])) {\n this.constructRevisionFromID(lineWidget.children[elementIndex], true);\n }\n if (lineWidget.children[elementIndex] instanceof FootnoteElementBox) {\n var footnote = lineWidget.children[elementIndex];\n this.constructRevisionForFootnote(footnote, canConstructRevision);\n }\n }\n }\n }\n if (this.canConstructRevision(paragraph.characterFormat)) {\n this.constructRevisionFromID(paragraph.characterFormat, true);\n }\n };\n /**\n * @private\n * @param paraWidget\n * @param startoffset\n * @param endoffset\n * @param revisionId\n * @param isParaMarkIncluded\n * @returns {void}\n */\n Editor.prototype.applyRevisionForCurrentPara = function (paraWidget, startoffset, endoffset, revisionId, isParaMarkIncluded) {\n var elementInfo = paraWidget.getInline(startoffset + 1, 0);\n var currentElement = elementInfo.element;\n if (elementInfo.element instanceof TextElementBox && elementInfo.element.text === \"\" && !isNullOrUndefined(elementInfo.element.previousElement)) {\n currentElement = elementInfo.element.previousElement;\n }\n var skipElement = false;\n if (startoffset === paraWidget.getLength()) {\n skipElement = true;\n }\n // Update the end offset if start and end both are same and both are positioned in the end of previous para of splitted para.\n if (startoffset === endoffset && paraWidget.nextSplitWidget) {\n endoffset += currentElement.length;\n }\n var endElement = paraWidget.getInline(endoffset, 0).element;\n // Set false if paraWidget contains nextSplitWidget because we shouldn't include paramark if current para contains nextSplitWidget.\n if (!isNullOrUndefined(paraWidget.nextSplitWidget)) {\n isParaMarkIncluded = false;\n }\n // Get the total length of previous splitted widgets of current para to include paramark because endoffset point out to the end of current. \n var lastIndex = 0;\n var tempPara = paraWidget;\n while (tempPara) {\n if (!isNullOrUndefined(tempPara)) {\n lastIndex += tempPara.getLength();\n }\n tempPara = tempPara.previousSplitWidget;\n }\n if (!isNullOrUndefined(paraWidget.previousSplitWidget) && lastIndex !== 0 && startoffset !== lastIndex) {\n skipElement = false;\n }\n if (endoffset > lastIndex) {\n isParaMarkIncluded = true;\n }\n if (!isNullOrUndefined(currentElement) && !isNullOrUndefined(endElement)) {\n if (!skipElement && currentElement === endElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n else {\n while (!isNullOrUndefined(currentElement) && currentElement !== endElement) {\n if (!skipElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n if (!isNullOrUndefined(currentElement.nextNode)) {\n if (currentElement.nextNode instanceof BookmarkElementBox) {\n currentElement = currentElement.nextNode;\n }\n else {\n currentElement = currentElement.nextNode.nextValidNodeForTracking;\n }\n }\n skipElement = false;\n }\n if (!isNullOrUndefined(currentElement) && !skipElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n }\n }\n else if (!isNullOrUndefined(currentElement) && !skipElement) {\n currentElement.removedIds.push(revisionId);\n this.constructRevisionFromID(currentElement, true);\n }\n else if (!isNullOrUndefined(endElement)) {\n endElement.removedIds.push(revisionId);\n this.constructRevisionFromID(endElement, true);\n }\n if (isParaMarkIncluded) {\n paraWidget.characterFormat.removedIds.push(revisionId);\n this.constructRevisionFromID(paraWidget.characterFormat, true);\n }\n };\n /**\n * Insert table on undo\n *\n * @param {Selection} selection - Specified the selection\n * @param {WBlock} block - Spcifies the block\n * @param {WTable} table - Specifies the table.\n * @private\n * @returns {void}\n */\n Editor.prototype.insertBlockTable = function (selection, block, table) {\n var offset = selection.start.offset;\n var lineIndex = selection.start.paragraph.childWidgets.indexOf(selection.start.currentWidget);\n if (block instanceof ParagraphWidget && offset > 0) {\n //Moves the inline items before selection start to the inserted paragraph.\n this.moveInlines(selection.start.paragraph, block, 0, 0, selection.start.paragraph.firstChild, offset, selection.start.currentWidget);\n selection.selectParagraphInternal(selection.start.paragraph, true);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(block, offset.toString()), true);\n }\n }\n if (offset > 0 && this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n }\n var index = table.indexInOwner;\n table.containerWidget.childWidgets.splice(index, 0, block);\n block.containerWidget = table.containerWidget;\n block.index = table.index;\n this.updateNextBlocksIndex(block, true);\n // Insert the revision based on id when perform accept + undo in pagebreak case\n if (block instanceof ParagraphWidget) {\n this.constructRevisionsForBlock(block, true);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, block.containerWidget, block, false);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n if (block instanceof TableWidget) {\n paragraph = this.documentHelper.getFirstParagraphInFirstCell(block);\n }\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(paragraph, '0'), true);\n }\n };\n /**\n * On cut handle selected content remove and relayout\n *\n * @param {Selection} selection - Specified the selection\n * @private\n * @returns {void}\n */\n Editor.prototype.handleCut = function (selection) {\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.owner.isShiftingEnabled = true; \n var image = undefined;\n if (startPosition.paragraph === endPosition.paragraph && startPosition.offset + 1 === endPosition.offset) {\n //Gets selected image and copy image to clipboard.\n var index = 0;\n var currentInline = startPosition.paragraph.getInline(endPosition.offset, index);\n var inline = currentInline.element;\n image = inline;\n }\n var removedCommentStart = this.checkAndRemoveComments();\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.initHistory('Cut');\n selection.owner.isShiftingEnabled = true;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.editPosition, true);\n }\n }\n this.deleteSelectedContent(endPosition.paragraph, selection, startPosition, endPosition, 3);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n }\n this.reLayout(selection);\n this.updateHistoryForComments(removedCommentStart);\n };\n Editor.prototype.insertInlineInternal = function (element, revisionType) {\n var selection = this.selection;\n var length = element.length;\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n revisionType = (isNullOrUndefined(revisionType) ? 'Insertion' : revisionType);\n if (selection.start.paragraph.isEmpty()) {\n var paragraph = selection.start.paragraph;\n if ((paragraph.paragraphFormat.textAlignment === 'Center' || paragraph.paragraphFormat.textAlignment === 'Right')\n && paragraph.paragraphFormat.listFormat.listId === -1) {\n paragraph.x = this.owner.viewer.clientActiveArea.x;\n }\n var isUndoing = !isNullOrUndefined(this.editorHistory) ? (this.editorHistory.isUndoing || this.editorHistory.isRedoing) : false;\n paragraph.childWidgets[0].children.push(element);\n element.line = paragraph.childWidgets[0];\n if (this.owner.enableTrackChanges && element.isValidNodeForTracking && !isUndoing) {\n this.insertRevision(element, revisionType);\n }\n if (element.removedIds.length > 0 || isUndoing) {\n this.constructRevisionFromID(element, true);\n }\n element.linkFieldCharacter(this.documentHelper);\n if (element instanceof FootnoteElementBox) {\n this.constructRevisionForFootnote(element, true);\n if (isUndoing) {\n element.isLayout = false;\n }\n if (element.footnoteType === 'Footnote') {\n this.updateFootnoteCollection(element);\n }\n if (element.footnoteType === 'Endnote') {\n this.updateEndnoteCollection(element);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0, undefined, undefined);\n }\n else {\n var indexInInline = 0;\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n this.insertElementInternal(curInline, element, indexInInline, revisionType, true);\n }\n var revision = element.revisions[0];\n if (!isNullOrUndefined(revision)) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n };\n Editor.prototype.insertElement = function (element, paragraphFormat) {\n var isElementHasEndNote = false;\n var selection = this.selection;\n var length = 0;\n var paragraph = undefined;\n var lineIndex = -1;\n var lineWidget = undefined;\n var insertIndex = 0;\n var begin = undefined;\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var isTrackingEnabled = this.owner.enableTrackChanges;\n var curInline = undefined;\n var prevElement = undefined;\n var indexInInline = 0;\n if (selection.start.paragraph.isEmpty()) {\n paragraph = selection.start.paragraph;\n lineWidget = paragraph.childWidgets[0];\n lineIndex = 0;\n }\n else {\n var inlineObj = selection.start.currentWidget.getInline(selection.start.offset, indexInInline);\n curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n paragraph = curInline.line.paragraph;\n lineIndex = paragraph.childWidgets.indexOf(curInline.line);\n insertIndex = curInline.indexInOwner;\n lineWidget = curInline.line;\n if (indexInInline === curInline.length) { // Add new Element in current \n insertIndex++;\n begin = false;\n }\n else if (indexInInline === 0) {\n if (isNullOrUndefined(curInline.previousNode)) {\n insertIndex = 0;\n }\n begin = true;\n }\n else {\n insertIndex++;\n prevElement = new TextElementBox();\n prevElement.characterFormat.copyFormat(curInline.characterFormat);\n prevElement.text = curInline.text.substring(indexInInline);\n curInline.text = curInline.text.slice(0, indexInInline);\n curInline.isWidthUpdated = false;\n if (curInline.revisions.length > 0 && !this.owner.enableTrackChanges) {\n this.splitRevisionForSpittedElement(curInline, prevElement);\n }\n lineWidget.children.splice(insertIndex, 0, prevElement);\n prevElement.line = curInline.line;\n }\n }\n for (var i = 0; i < element.length; i++) {\n length += element[i].length;\n if (element[i] instanceof TextElementBox && element[i].text.indexOf(' ') >= 0) {\n this.documentHelper.triggerSpellCheck = true;\n }\n var prevRevisionsCount = element[i].revisions.length;\n element[i].ischangeDetected = true;\n lineWidget.children.splice(insertIndex, 0, element[i]);\n element[i].line = lineWidget;\n element[i].linkFieldCharacter(this.documentHelper);\n var isRevisionCombined = this.updateRevisionForElement(curInline, element[i], indexInInline, (i === 0) ? true : false, prevElement, begin);\n //Check to combine elements with previous / next para\n if (isTrackingEnabled && !isRevisionCombined && element[i].revisions.length === prevRevisionsCount) {\n //if (!(element[i] instanceof FieldElementBox && (element[i] as FieldElementBox).fieldType === 2)) {\n this.checkToCombineRevisionsinBlocks(element[i], prevRevisionsCount === element[i].revisions.length, (i > 0 && i === element.length - 1), 'Insertion');\n //}\n }\n curInline = element[i];\n insertIndex++;\n if (element[i] instanceof FootnoteElementBox) {\n this.pasteFootNoteType = element[i].footnoteType;\n isElementHasEndNote = true;\n }\n }\n if ((!this.isPaste) && paragraphFormat && (isNullOrUndefined(paragraph.paragraphFormat.listFormat.list) ||\n (!isNullOrUndefined(paragraph.paragraphFormat.listFormat) && paragraph.paragraphFormat.listFormat.listId === -1))) {\n paragraph.paragraphFormat.copyFormat(paragraphFormat);\n }\n if (this.isPaste) {\n if (this.isRemoteAction) {\n var revision = paragraphFormat.ownerBase.characterFormat.revisions;\n var isBreak = false;\n for (var i = 0; i < revision.length; i++) {\n paragraph.characterFormat.revisions.push(revision[i]);\n var range = revision[i].range;\n for (var j = 0; j < range.length; j++) {\n if (range[j] instanceof WCharacterFormat && range[j] == paragraphFormat.ownerBase.characterFormat) {\n range.splice(j, 1);\n range.push(paragraph.characterFormat);\n isBreak = true;\n break;\n }\n }\n if (isBreak) {\n break;\n }\n }\n }\n this.viewer.updateClientAreaForBlock(paragraph, true);\n paragraph.x = this.viewer.clientActiveArea.x;\n }\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, 0, this.isInsertField ? undefined : paragraph.paragraphFormat.bidi);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n return isElementHasEndNote;\n };\n Editor.prototype.updateRevisionForElement = function (currentElement, newElement, indexInInline, isFirstItem, prevElement, isBeginning) {\n if (!this.owner.enableTrackChanges) {\n return false;\n }\n if (isNullOrUndefined(currentElement) && isNullOrUndefined(prevElement)) {\n return false;\n }\n var isMiddle = isNullOrUndefined(isBeginning) ? true : false;\n var prevRevisionCount = newElement.revisions.length;\n if (isFirstItem) {\n if (isMiddle) {\n var isRevisionCombined = this.checkToMapRevisionWithInlineText(currentElement, indexInInline, newElement, false, 'Insertion');\n if (isRevisionCombined || newElement.revisions.length > prevRevisionCount) {\n this.copyElementRevision(currentElement, prevElement, true);\n }\n else if (newElement.revisions.length === 0) {\n this.splitRevisionForSpittedElement(currentElement, prevElement);\n this.insertRevision(newElement, 'Insertion');\n }\n }\n else if (isBeginning) {\n return this.insertRevisionAtBegining(currentElement, newElement, 'Insertion');\n }\n else {\n return this.insertRevisionAtEnd(currentElement, newElement, 'Insertion');\n }\n }\n else {\n // if (currentElement instanceof FieldElementBox && currentElement.fieldType === 2) {\n // currentElement = (currentElement as FieldElementBox).previousElement;\n // }\n return this.insertRevisionAtEnd(currentElement, newElement, 'Insertion');\n }\n return false;\n };\n Editor.prototype.insertElementInternal = function (element, newElement, index, revisionType, relayout) {\n var line = element.line;\n var paragraph = line.paragraph;\n var lineIndex = line.indexInOwner;\n var insertIndex = element.indexInOwner;\n var isBidi = paragraph.paragraphFormat.bidi && element.isRightToLeft;\n var isEqualFormat = false;\n revisionType = isNullOrUndefined(revisionType) ? 'Insertion' : revisionType;\n var isUndoing = this.skipTracking();\n var isTrackingEnabled = this.owner.enableTrackChanges;\n var isRevisionCombined = false;\n var prevRevisionCount = newElement.revisions.length;\n if (this.owner.editorHistoryModule && (this.owner.editorHistoryModule.isUndoing || this.owner.editorHistoryModule.isRedoing)\n && newElement instanceof TextElementBox) {\n isEqualFormat = element.characterFormat.isEqualFormat(newElement.characterFormat)\n && this.documentHelper.textHelper.isRTLText(newElement.text);\n }\n if (!isEqualFormat) {\n if (index === element.length) {\n // Add new Element in current \n insertIndex = this.incrementCommentIndex(isBidi, element, insertIndex);\n if (newElement.removedIds.length > 0 || isUndoing) {\n this.constructRevisionFromID(newElement, true, element);\n }\n else if (isTrackingEnabled && !isUndoing && !this.skipFieldDeleteTracking) {\n isRevisionCombined = this.insertRevisionAtEnd(element, newElement, revisionType);\n }\n if (newElement instanceof FootnoteElementBox) {\n this.constructRevisionForFootnote(newElement, true);\n }\n line.children.splice(insertIndex, 0, newElement);\n if (newElement instanceof FieldElementBox && newElement.fieldType === 2) {\n this.constructRevisionnsForLink(newElement, false);\n }\n }\n else if (index === 0) {\n if (newElement.removedIds.length > 0) {\n // 885534 (insertIndex used for this bug).\n this.constructRevisionFromID(newElement, false, undefined, insertIndex);\n }\n else if (isTrackingEnabled && !isUndoing && !this.skipFieldDeleteTracking) {\n isRevisionCombined = this.insertRevisionAtBegining(element, newElement, revisionType);\n }\n if (isNullOrUndefined(element.previousNode)) {\n element.line.children.splice(0, 0, newElement);\n insertIndex = 0;\n }\n else {\n element.line.children.splice(insertIndex, 0, newElement);\n }\n }\n else if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.isHyperlinkField && newElement instanceof FieldElementBox && newElement.fieldType === 1 && newElement.removedIds.length > 0) {\n this.constructRevisionFromID(newElement, false);\n line.children.splice(insertIndex, 0, newElement);\n }\n else {\n insertIndex = this.incrementCommentIndex(isBidi, element, insertIndex);\n var textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(element.characterFormat);\n textElement.text = element.text.substring(index);\n if (element.revisions.length > 0 && !isTrackingEnabled && !isUndoing && newElement.removedIds.length === 0) {\n this.splitRevisionForSpittedElement(element, textElement);\n }\n element.text = element.text.substr(0, index);\n element.isWidthUpdated = false;\n line.children.splice(insertIndex, 0, textElement);\n textElement.line = element.line;\n isRevisionCombined = true;\n this.isTrackingFormField = element.previousElement instanceof FieldElementBox ? true : false;\n if (newElement.removedIds.length > 0 && !this.isTrackingFormField) {\n this.constructRevisionFromID(newElement, false);\n this.copyElementRevision(element, textElement, true);\n }\n else if (this.owner.enableTrackChanges) {\n if (!(newElement instanceof BookmarkElementBox) && !(newElement instanceof CommentCharacterElementBox) && !(newElement instanceof EditRangeStartElementBox) && !(newElement instanceof EditRangeEndElementBox)) {\n var isRevisionCombined_1 = this.checkToMapRevisionWithInlineText(element, index, newElement, isBidi, revisionType);\n if (isRevisionCombined_1 || newElement.revisions.length > prevRevisionCount) {\n this.copyElementRevision(element, textElement, true);\n }\n else if (newElement.revisions.length === prevRevisionCount) {\n this.splitRevisionForSpittedElement(element, textElement);\n this.insertRevision(newElement, revisionType);\n }\n }\n else {\n this.copyElementRevision(element, textElement, false);\n }\n }\n //Inserts the new inline.\n line.children.splice(insertIndex, 0, newElement);\n insertIndex -= 1;\n }\n }\n else {\n element.text = element.text.substring(0, index) + newElement.text + element.text.substring(index);\n element.isWidthUpdated = false;\n }\n newElement.line = element.line;\n if (newElement instanceof BookmarkElementBox) {\n var bookmarkCol = this.documentHelper.bookmarks;\n if (newElement.reference) {\n newElement.reference.reference = newElement;\n }\n if (!bookmarkCol.containsKey(newElement.name)) {\n bookmarkCol.add(newElement.name, newElement);\n }\n }\n if (!isNullOrUndefined(newElement.line.paragraph.containerWidget) && !isNullOrUndefined(newElement.line.paragraph.containerWidget.containerWidget) && newElement.line.paragraph.containerWidget.containerWidget instanceof FootNoteWidget) {\n newElement.line.paragraph.containerWidget.containerWidget.height += newElement.height;\n }\n newElement.linkFieldCharacter(this.documentHelper);\n if (newElement instanceof ContentControl && newElement.type === 0) {\n this.documentHelper.contentControlCollection.push(newElement);\n }\n if ((newElement instanceof ImageElementBox && newElement.textWrappingStyle !== 'Inline') || newElement instanceof ShapeElementBox) {\n if (paragraph.floatingElements.indexOf(newElement) === -1) {\n paragraph.floatingElements.push(newElement);\n }\n if (paragraph.bodyWidget.floatingElements.indexOf(newElement) === -1 && newElement.textWrappingStyle !== 'Inline') {\n paragraph.bodyWidget.floatingElements.push(newElement);\n }\n }\n if (isTrackingEnabled && !isRevisionCombined && !isUndoing && !this.skipFieldDeleteTracking) {\n this.checkToCombineRevisionsinBlocks(newElement, prevRevisionCount === newElement.revisions.length, (index === element.length), revisionType);\n }\n if (newElement instanceof FootnoteElementBox) {\n if (isUndoing) {\n // this.documentHelper.layout.isLayoutWhole = true;\n newElement.isLayout = false;\n }\n if (newElement.footnoteType === 'Footnote') {\n this.updateFootnoteCollection(newElement);\n this.updateFootNoteIndex();\n }\n if (newElement.footnoteType === 'Endnote') {\n this.updateEndnoteCollection(newElement);\n this.updateEndNoteIndex();\n }\n }\n if (relayout) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, insertIndex, undefined, undefined);\n }\n };\n Editor.prototype.incrementCommentIndex = function (isBidi, element, insertIndex) {\n if (!this.owner.editorHistoryModule || !(this.owner.editorHistoryModule && this.owner.editorHistoryModule.currentHistoryInfo) || (this.owner.editorHistoryModule && this.owner.editorHistoryModule.currentHistoryInfo\n && (this.owner.editorHistoryModule.currentHistoryInfo.action !== \"SkipCommentInline\" ||\n this.owner.editorHistoryModule.currentHistoryInfo.action === \"SkipCommentInline\" &&\n (this.owner.editorHistoryModule.currentHistoryInfo.modifiedActions[0] === this.editorHistory.currentBaseHistoryInfo\n || (this.owner.editorHistoryModule.currentHistoryInfo.modifiedActions[0] !== this.editorHistory.currentBaseHistoryInfo\n && !(element instanceof CommentCharacterElementBox)))))) {\n insertIndex++;\n }\n return insertIndex;\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Editor.prototype.constructRevisionFromID = function (insertElement, isEnd, prevElement, index) {\n if (insertElement.removedIds.length > 0) {\n for (var i = 0; i < insertElement.removedIds.length; i++) {\n var revisionToInclude = undefined;\n if (this.documentHelper.revisionsInternal.containsKey(insertElement.removedIds[i])) {\n revisionToInclude = this.documentHelper.revisionsInternal.get(insertElement.removedIds[i]);\n insertElement.revisions.push(revisionToInclude);\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n // Handle collab editing for track changes.\n this.editorHistory.currentBaseHistoryInfo.markerData.push(this.getMarkerData(insertElement, undefined, revisionToInclude));\n }\n var isFieldBeginRedoing = insertElement instanceof FieldElementBox && insertElement.fieldType === 0;\n isEnd = isEnd ? true : (!isFieldBeginRedoing && this.skipTracking());\n var isInsertEnd = false;\n // Bug 873011: Handled the revision update for Accept Change action on undoing.\n if (this.editorHistory.isUndoing && this.owner.editorHistoryModule.currentBaseHistoryInfo\n && this.owner.editorHistoryModule.currentBaseHistoryInfo.isHyperlinkField\n && this.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'Accept Change'\n && insertElement instanceof FieldElementBox && insertElement.fieldType === 1) {\n isInsertEnd = true;\n }\n if (isEnd) {\n if (this.editorHistory.isRedoing && this.owner.editorHistoryModule.currentBaseHistoryInfo && this.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'BackSpace' && this.selection.isTOC()) {\n isEnd = false;\n }\n // Bug 873011: Handled the revision update for Remove Hyperlink action on redoing.\n if (this.editorHistory.isRedoing && this.owner.editorHistoryModule.currentHistoryInfo && this.owner.editorHistoryModule.currentHistoryInfo.action === 'RemoveHyperlink'\n && insertElement instanceof FieldElementBox && insertElement.fieldType === 0) {\n isEnd = false;\n }\n }\n if (!isNullOrUndefined(index) && revisionToInclude.range.length > 0 && revisionToInclude.range[revisionToInclude.range.length - 1] instanceof TextElementBox && revisionToInclude.range[revisionToInclude.range.length - 1].paragraph.indexInOwner === this.selection.start.paragraph.indexInOwner) {\n revisionToInclude.range.splice(index, 0, insertElement);\n }\n else if (!isNullOrUndefined(prevElement)) {\n var rangeIndex = revisionToInclude.range.indexOf(prevElement);\n if (rangeIndex === -1 && isInsertEnd && revisionToInclude.range.length > 0) {\n rangeIndex = revisionToInclude.range.indexOf(revisionToInclude.range[revisionToInclude.range.length - 1]);\n }\n if (rangeIndex >= 0) {\n revisionToInclude.range.splice(rangeIndex + ((isEnd) ? 1 : 0), 0, insertElement);\n }\n else {\n revisionToInclude.range.splice(0, 0, insertElement);\n }\n }\n else {\n var insertIndex = void 0;\n if (!isNullOrUndefined(this.owner.editorHistory) && (this.owner.editorHistory.isUndoing || this.owner.editorHistory.isRedoing) && !(insertElement instanceof WRowFormat)) {\n var currentElementIndex = this.owner.selectionModule.start.paragraph.index;\n if (insertElement instanceof WCharacterFormat && insertElement.ownerBase) {\n currentElementIndex = insertElement.ownerBase.index;\n }\n var isInsideTable = this.owner.selectionModule.start.paragraph.isInsideTable;\n var existingIndex = 0;\n //if (!isInsideTable) {\n for (var j = 0; j < revisionToInclude.range.length; j++) {\n if (revisionToInclude.range[j] instanceof TextElementBox) {\n existingIndex = revisionToInclude.range[j].paragraph.index;\n }\n else if (revisionToInclude.range[j] instanceof WCharacterFormat) {\n existingIndex = revisionToInclude.range[j].ownerBase.index;\n }\n if (currentElementIndex < existingIndex) {\n insertIndex = j;\n break;\n }\n }\n //}\n }\n if (isNullOrUndefined(insertIndex)) {\n if (isEnd) {\n insertIndex = revisionToInclude.range.length;\n }\n else {\n insertIndex = 0;\n }\n }\n revisionToInclude.range.splice(insertIndex, 0, insertElement);\n }\n this.owner.trackChangesPane.updateCurrentTrackChanges(revisionToInclude);\n this.updateRevisionCollection(revisionToInclude);\n }\n }\n insertElement.removedIds = [];\n }\n else {\n // on undoing revisions will be cloned , so need to update range information.\n for (var i = 0; i < insertElement.revisions.length; i++) {\n var currentRevision = insertElement.revisions[i];\n if (this.documentHelper.revisionsInternal.containsKey(currentRevision.revisionID)) {\n currentRevision = this.documentHelper.revisionsInternal.get(currentRevision.revisionID);\n currentRevision.range.splice(isEnd ? currentRevision.range.length : 0, 0, insertElement);\n this.updateRevisionCollection(currentRevision);\n }\n }\n }\n };\n /**\n * Insert block on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {WBlock} block - Specifes the block\n * @private\n * @returns {void}\n */\n Editor.prototype.insertBlock = function (block) {\n var isRemoved = true;\n var isSkipEmptyPara = false;\n var selection = this.selection;\n if (!selection.isEmpty) {\n isRemoved = this.removeSelectedContents(selection);\n isSkipEmptyPara = true;\n }\n if (!isRemoved) {\n selection.selectContent(selection.start, false);\n }\n this.insertBlockInternal(block, isSkipEmptyPara);\n if (this.checkInsertPosition(selection)) {\n var paragraph = undefined;\n if (block instanceof ParagraphWidget) {\n paragraph = block;\n }\n else {\n paragraph = this.documentHelper.getFirstParagraphInFirstCell(block);\n }\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(paragraph, '0'), true);\n }\n this.fireContentChange();\n };\n Editor.prototype.insertBlockInternal = function (block, isRemoved) {\n var selection = this.selection;\n var startPara = this.selection.start.paragraph;\n var paraStart = this.selection.start.isAtParagraphStart;\n if (!selection.start.isAtParagraphStart) {\n if (block instanceof ParagraphWidget) {\n if (!this.isInsertingTOC && this.owner.enableTrackChanges && !this.skipTracking()) {\n this.insertRevisionForBlock(block, 'Insertion');\n }\n var startPosition = selection.start.clone();\n //let prevBlock: ParagraphWidget = (block as ParagraphWidget).clone()\n if (!this.isInsertingTOC && this.owner.enableTrackChanges && !this.skipTracking()) {\n this.insertRevisionForBlock(block, 'Insertion');\n }\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo) {\n if (!this.editorHistory.isUndoing && !this.editorHistory.isRedoing) {\n this.editorHistory.currentBaseHistoryInfo.insertedNodes.push(block.clone());\n }\n }\n this.insertNewParagraphWidget(block, false);\n if (!this.isInsertingTOC) {\n this.combineRevisions(block, startPosition, this.selection.end);\n }\n return;\n }\n this.updateInsertPosition();\n startPara = startPara.combineWidget(this.owner.viewer);\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo) {\n if (!this.editorHistory.isUndoing && !this.editorHistory.isRedoing) {\n this.editorHistory.currentBaseHistoryInfo.insertedNodes.push(startPara);\n }\n }\n this.splitParagraph(startPara, startPara.firstChild, 0, selection.start.currentWidget, selection.start.offset, false);\n selection.selectParagraphInternal(this.selection.start.paragraph, true);\n }\n var bodyWidget = selection.start.paragraph.containerWidget;\n var blockIndex = selection.start.paragraph.index;\n if (!isNullOrUndefined(bodyWidget)) {\n if (!isNullOrUndefined(this.editorHistory)) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && !this.editorHistory.isUndoing && !this.editorHistory.isRedoing) {\n this.editorHistory.currentBaseHistoryInfo.insertedNodes.push(block.clone());\n }\n // Added the condition to skip adding an empty paragraph when performing a redo if the document has an empty case.\n if (this.editorHistory.isRedoing && isRemoved && bodyWidget.firstChild instanceof ParagraphWidget && bodyWidget.firstChild.isEmpty() && bodyWidget.firstChild === bodyWidget.lastChild && block instanceof ParagraphWidget && block.isEmpty()) {\n return;\n }\n }\n var insertIndex = bodyWidget.childWidgets.indexOf(selection.start.paragraph);\n if (selection.start.paragraph.isEmpty() && selection.start.paragraph.index === block.index && bodyWidget.childWidgets.length === 1 && selection.start.paragraph.containerWidget.containerWidget instanceof FootNoteWidget && this.owner.editorHistory.isUndoing) {\n bodyWidget.childWidgets.splice(0, 1);\n }\n bodyWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = bodyWidget;\n block.index = blockIndex;\n block.height = 0;\n if (block instanceof TableWidget) {\n block.isGridUpdated = false;\n block.buildTableColumns();\n block.isGridUpdated = true;\n }\n this.updateNextBlocksIndex(block, true);\n if (!this.isInsertingTOC && this.owner.enableTrackChanges && !this.skipTracking() && block instanceof ParagraphWidget) {\n this.insertRevisionForBlock(block, 'Insertion');\n }\n else if (block instanceof ParagraphWidget) {\n this.constructRevisionsForBlock(block, true);\n }\n else if (block instanceof TableWidget) {\n this.constructRevisionsForTable(block, true);\n }\n if (this.documentHelper.owner.editorModule.isRemoteAction && !paraStart && block instanceof TableWidget) {\n this.updateNextBlocksIndex(block.nextWidget, false);\n bodyWidget.childWidgets.splice(block.indexInOwner + 1, 1);\n }\n if (block instanceof ParagraphWidget) {\n this.documentHelper.layout.linkFieldInParagraph(block);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(blockIndex, bodyWidget, block, false);\n }\n };\n /**\n * Inserts the image with specified size at cursor position in the document editor.\n *\n\n *\n * @param {string} imageString Base64 string, web URL or file URL.\n * @param {number} width Specify the image width.\n * @param {number} height Specify the image height.\n * @param {string} alternateText Specify the image alternateText.\n * @returns {void}\n */\n Editor.prototype.insertImage = function (imageString, width, height, alternateText) {\n this.insertImageInternal(imageString, false, width, height, alternateText);\n };\n /**\n * Inserts an image with a specified size at the cursor position in the DocumentEditor component.\n *\n * @param {string} imageString - The Base64 string, web URL, or file URL of the image to be inserted.\n * @param {number} width - The width of the image. Optional parameter, if not specified, the original width of the image will be used.\n * @param {number} height - The height of the image. Optional parameter, if not specified, the original height of the image will be used.\n * @param {string} alternateText - The alternate text of the image. Optional parameter, if specified, this text will be displayed when the image is not available or when images are disabled in the document.\n * @returns {Promise} - A Promise that is resolved when the image has been inserted successfully, or rejected if the image could not be inserted for any reason.\n */\n Editor.prototype.insertImageAsync = function (imageString, width, height, alternateText) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.insertImageInternal(imageString, false, width, height, alternateText)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Inserts the image with specified size at cursor position in the document editor.\n *\n * @private\n * @param {string} imageString Base64 string, web URL or file URL.\n * @param {boolean} isUiInteracted Is image instered from UI interaction.\n * @param {number} width? Image width\n * @param {number} height? Image height\n * @param {string} alternateText? Image alternateText\n * @returns {void}\n */\n Editor.prototype.insertImageInternal = function (imageString, isUiInteracted, width, height, alternateText) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve, reject) {\n var formField = _this.selection.getCurrentFormField();\n var isFormFillProtectedMode = _this.documentHelper.protectionType === 'FormFieldsOnly' && !isNullOrUndefined(formField) && formField.formFieldData instanceof TextFormField;\n if ((_this.owner.isReadOnlyMode || !_this.canEditContentControl) && !isFormFillProtectedMode) {\n resolve();\n return;\n }\n if (isNullOrUndefined(width) && isNullOrUndefined(height)) {\n var image = document.createElement('img');\n var editor_1 = _this;\n image.addEventListener('load', function () {\n editor_1.insertPicture(imageString, this.width, this.height, this.alt, true);\n resolve();\n });\n image.src = imageString;\n }\n else {\n _this.insertPicture(imageString, width, height, alternateText, isUiInteracted);\n resolve();\n }\n setTimeout(function () {\n if (!isNullOrUndefined(_this.documentHelper)) {\n _this.viewer.updateScrollBars();\n }\n }, 30);\n })];\n });\n });\n };\n /**\n * Inserts a table of specified size at cursor position in the document editor.\n *\n * @param {number} rows Default value of ‘rows’ parameter is 1.\n * @param {number} columns Default value of ‘columns’ parameter is 1.\n * @returns {void}\n */\n Editor.prototype.insertTable = function (rows, columns) {\n var startPos = this.selection.start;\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n rows = rows || 1;\n columns = columns || 1;\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (columns < 1 || columns > this.documentHelper.owner.documentEditorSettings.maximumColumns) {\n var columnAlertPopup = localeValue.getConstant('Number of columns must be between') + ' 1 ' + localeValue.getConstant('and') + ' ' + this.documentHelper.owner.documentEditorSettings.maximumColumns.toString();\n DialogUtility.alert(columnAlertPopup).enableRtl = this.documentHelper.owner.enableRtl;\n return;\n }\n if (rows < 1 || rows > this.documentHelper.owner.documentEditorSettings.maximumRows) {\n var rowAlertPopup = localeValue.getConstant('Number of rows must be between') + ' 1 ' + localeValue.getConstant('and') + ' ' + this.documentHelper.owner.documentEditorSettings.maximumColumns.toString();\n localeValue.getConstant('Number of rows must be between 1 and 32767.').replace(\"32767\", this.documentHelper.owner.documentEditorSettings.maximumRows.toString());\n DialogUtility.alert(rowAlertPopup).enableRtl = this.documentHelper.owner.enableRtl;\n return;\n }\n var table = this.createTable(rows, columns);\n var clientWidth = startPos.paragraph.getContainerWidth() - table.tableFormat.leftIndent;\n table.splitWidthToTableCells(clientWidth);\n var removedComment;\n var prevBlock = startPos.paragraph.previousWidget;\n if (startPos.currentWidget.isFirstLine() && startPos.offset === 0 && prevBlock instanceof TableWidget) {\n this.insertTableRows(table, prevBlock);\n table.destroy();\n return;\n }\n else {\n removedComment = this.checkAndRemoveComments();\n this.initHistory('InsertTable');\n this.documentHelper.owner.isShiftingEnabled = true;\n this.insertBlock(table);\n if (!isNullOrUndefined(table.containerWidget) && !isNullOrUndefined(table.containerWidget.containerWidget) && table.containerWidget.containerWidget instanceof FootNoteWidget) {\n table.containerWidget.containerWidget.height += table.height;\n this.isTableInsert = true;\n }\n }\n var startLine = this.documentHelper.getFirstParagraphInFirstCell(table).childWidgets[0];\n startPos.setPosition(startLine, true);\n this.selection.end.setPositionInternal(startPos);\n var lastParagraph = this.documentHelper.getLastParagraphInLastCell(table.getSplitWidgets().pop());\n var endOffset = lastParagraph.getLength() + 1;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.selection.getHierarchicalIndex(lastParagraph, endOffset.toString());\n }\n this.reLayout(this.selection);\n this.isTableInsert = false;\n this.updateHistoryForComments(removedComment);\n };\n /**\n * Inserts the specified number of rows to the table above or below to the row at cursor position.\n *\n * @param {boolean} above The above parameter is optional and if omitted,\n * it takes the value as false and inserts below the row at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n * @returns {void}\n */\n Editor.prototype.insertRow = function (above, count) {\n var rowPlacement = above ? 'Above' : 'Below';\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var isInsertRow = true;\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(rowPlacement === 'Above' ? 'InsertRowAbove' : 'InsertRowBelow');\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward).getSplitWidgets()[0];\n var endCell = this.getOwnerCell(!this.selection.isForward).getSplitWidgets()[0];\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = rowPlacement === 'Below' ? endCell.ownerRow : startCell.ownerRow;\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n this.rowInsertion(count, rowPlacement, startCell, endCell, row, table, isInsertRow);\n }\n this.reLayout(this.selection, true);\n };\n Editor.prototype.rowInsertion = function (count, rowPlacement, startCell, endCell, row, table, isInsertRow) {\n var rowCount = count ? count : this.getRowCountToInsert();\n var rows = [];\n var index = row.rowIndex;\n if (rowPlacement === 'Below') {\n index++;\n var isAffectedByRowSpannedCell = isNullOrUndefined(endCell.previousWidget)\n || endCell.columnIndex === endCell.previousWidget.columnIndex + 1;\n var isRowSpanEnd = endCell.cellIndex !== endCell.columnIndex && isAffectedByRowSpannedCell\n && row.rowIndex + startCell.cellFormat.rowSpan - 1 === endCell.ownerRow.rowIndex;\n if (!isRowSpanEnd) {\n if (endCell.cellFormat.rowSpan > 1) {\n if (!isNullOrUndefined(row.nextWidget) && row.nextWidget instanceof TableRowWidget) {\n endCell.cellFormat.rowSpan += rowCount;\n row = row.nextWidget;\n }\n }\n }\n row.bottomBorderWidth = 0;\n }\n for (var i = 0; i < rowCount; i++) {\n var cellCountInfo = this.updateRowspan(row, rowPlacement === 'Below' ? endCell : startCell, rowPlacement);\n var newRow = this.createRowAndColumn(cellCountInfo.count, i, index, table);\n newRow.rowFormat = row.rowFormat.cloneFormat();\n newRow.rowFormat.ownerBase = newRow;\n if (this.owner.enableTrackChanges) {\n this.insertRevision(newRow.rowFormat, 'Insertion');\n }\n this.updateCellFormatForInsertedRow(newRow, cellCountInfo.cellFormats);\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.insertedNodes.push(newRow);\n }\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index, isInsertRow);\n var cell = undefined;\n var paragraph = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cell = table.childWidgets[index].firstChild;\n paragraph = this.selection.getFirstParagraph(cell);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraph = this.documentHelper.getFirstParagraphInFirstCell(widget);\n }\n if (isInsertRow) {\n this.documentHelper.layout.reLayoutTable(table);\n }\n this.selection.selectParagraphInternal(paragraph, true);\n };\n /**\n * Fits the table based on AutoFitType.\n *\n * @param {AutoFitType} fitType Specify the auto fit type.\n * @returns {void}\n */\n Editor.prototype.autoFitTable = function (fitType) {\n if (this.documentHelper.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n this.insertAutoFitTable(fitType);\n };\n /**\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.insertAutoFitTable = function (fitType, tableAdv) {\n if (isNullOrUndefined(tableAdv)) {\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n tableAdv = this.selection.getTable(startPosition, endPosition);\n tableAdv = tableAdv.getSplitWidgets()[0];\n }\n var parentTable = this.documentHelper.layout.getParentTable(tableAdv);\n if (!isNullOrUndefined(parentTable)) {\n this.setOffsetValue(this.selection);\n parentTable = parentTable.combineWidget(this.owner.viewer);\n this.initHistory(fitType === 'FitToContents' ? 'TableAutoFitToContents' : fitType === 'FitToWindow' ? 'TableAutoFitToWindow' : 'TableFixedColumnWidth');\n if (this.documentHelper.owner.editorHistoryModule) {\n this.cloneTableToHistoryInfo(parentTable);\n }\n parentTable.updateProperties(true, tableAdv, fitType);\n this.documentHelper.owner.isShiftingEnabled = true;\n //Layouts the table.\n this.documentHelper.layout.reLayoutTable(tableAdv);\n this.reLayout(this.selection, true);\n }\n };\n /**\n * Inserting the row for collaborative editing.\n * @private\n * @returns {void}\n */\n Editor.prototype.rowInsertionForCE = function (index, cellCount, insertrow, table, rowData, cellData, paragraphData, characterData) {\n var rows = [];\n for (var i = 0; i < insertrow; i++) {\n var newRow = this.createRowAndColumn(cellCount, i, index, table);\n this.documentHelper.owner.parser.parseRowFormat(rowData, newRow.rowFormat, 0);\n for (var j = 0; j < cellCount; j++) {\n var cellWidget = newRow.childWidgets[j];\n this.documentHelper.owner.parser.parseCellFormat(cellData[j], cellWidget.cellFormat, 0);\n this.documentHelper.owner.parser.parseParagraphFormat(0, paragraphData[j], cellWidget.childWidgets[0].paragraphFormat);\n this.documentHelper.owner.parser.parseCharacterFormat(0, characterData[j], cellWidget.childWidgets[0].characterFormat);\n }\n if (this.owner.enableTrackChanges) {\n this.insertRevision(newRow.rowFormat, 'Insertion');\n }\n rows.push(newRow);\n }\n table.insertTableRowsInternal(rows, index, true);\n var cell = undefined;\n var paragraph = undefined;\n if ((table.childWidgets[index] instanceof TableRowWidget)) {\n cell = table.childWidgets[index].firstChild;\n paragraph = this.selection.getFirstParagraph(cell);\n }\n else {\n var widget = undefined;\n while (!(widget instanceof TableWidget)) {\n widget = table.nextRenderedWidget;\n }\n paragraph = this.documentHelper.getFirstParagraphInFirstCell(widget);\n }\n this.documentHelper.layout.reLayoutTable(table);\n this.selection.selectParagraphInternal(paragraph, true);\n this.reLayout(this.selection, true);\n };\n Editor.prototype.updateCellFormatForInsertedRow = function (newRow, cellFormats) {\n for (var i = 0; i < newRow.childWidgets.length; i++) {\n newRow.childWidgets[i].cellFormat.copyFormat(cellFormats[i]);\n newRow.childWidgets[i].cellFormat.rowSpan = 1;\n }\n };\n Editor.prototype.updateRowspan = function (row, startCell, rowPlacement) {\n var spannedCells = row.getPreviousRowSpannedCells(true);\n var count = 0;\n var cellFormats = [];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n var isCellIncluded = false;\n // Need to check with all the row spanned cells. if the start cell contains rowspan greater than 1, \n // and when inserting below, need to increment rowspan for all row spanned cells by 1 except\n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n // and when inserting above, if cloned cell placed in the same row of start cell or\n // if the cloned cell has equal column index, need to skip updating rowspan value of cloned cell.\n // else update row span value for spanned cell except \n // if the spanned cells is placed in the same column or cell to be cloned has the same row index of cloned cell row index.\n var isRowSpanned = (isNullOrUndefined(cell.previousWidget)\n || cell.columnIndex !== cell.previousWidget.columnIndex + 1);\n for (var j = 0; j < spannedCells.length; j++) {\n if (isRowSpanned) {\n var spannedCell = spannedCells[j];\n var clonedRowIndex = spannedCell.ownerRow.rowIndex + spannedCell.cellFormat.rowSpan - 1;\n if (cell.columnIndex < spannedCell.columnIndex && cell.cellIndex !== cell.columnIndex && !isCellIncluded) {\n isCellIncluded = true;\n count++;\n cellFormats.push(cell.cellFormat);\n }\n if (startCell.cellFormat.rowSpan === 1) {\n // Need to check whether cell is affected by a row spanned cell. if cell is placed on the row where it is affected \n // by row spanned cell, then if we are inserting row below, need to add new cell with spanned cell width\n // or if we are inserting above, need to update row span value of the spanned cell.\n // if cell is placed inbetween the spanned cell , \n // then if we are inserting below, need to update row span value of spanned cell or\n // if we are inserting above, need to skip updating row span value except\n // if start cell is placed on the same row of spanned cell or if start cell placed in the same column.\n if (clonedRowIndex > cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above'\n && spannedCell.ownerRow === startCell.ownerRow) {\n continue;\n }\n else {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n else if (cell.cellIndex !== cell.columnIndex && isRowSpanned && clonedRowIndex === cell.ownerRow.rowIndex) {\n if (rowPlacement === 'Above') {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n else {\n count++;\n cellFormats.push(spannedCell.cellFormat);\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n else {\n if (spannedCell !== startCell) {\n if (rowPlacement === 'Above'\n && (spannedCell.ownerRow === startCell.ownerRow || spannedCell.columnIndex === startCell.columnIndex)) {\n continue;\n }\n else {\n if (spannedCell.columnIndex !== startCell.columnIndex\n && spannedCell.ownerRow.rowIndex !== cell.ownerRow.rowIndex\n && (clonedRowIndex > startCell.ownerRow.rowIndex\n || (rowPlacement === 'Above' && clonedRowIndex === startCell.ownerRow.rowIndex))) {\n spannedCell.cellFormat.rowSpan += 1;\n spannedCells.splice(j, 1);\n j--;\n }\n }\n }\n }\n }\n }\n if (spannedCells.indexOf(cell) === -1 && cell.cellFormat.rowSpan > 1) {\n isCellIncluded = true;\n }\n if (!isCellIncluded) {\n count++;\n cellFormats.push(cell.cellFormat);\n }\n }\n cellFormats.sort(function (a, b) { return a.ownerBase.columnIndex - b.ownerBase.columnIndex; });\n return { count: count, cellFormats: cellFormats };\n };\n Editor.prototype.getInsertedTable = function (table, index) {\n if (table.childWidgets && table.childWidgets.length > 0) {\n table.childWidgets.splice(0, index);\n this.editorHistory.currentBaseHistoryInfo.insertedNodes.push(table);\n }\n };\n Editor.prototype.insertTableRows = function (table, prevBlock) {\n this.initHistory('InsertTableBelow');\n table.containerWidget = prevBlock.containerWidget;\n prevBlock = prevBlock.combineWidget(this.owner.viewer);\n // if (this.editorHistory) {\n // let clonedTable: TableWidget = this.cloneTableToHistoryInfo(prevBlock);\n // }\n var row = prevBlock.childWidgets[prevBlock.childWidgets.length - 1];\n var index = prevBlock.childWidgets.length;\n prevBlock.insertTableRowsInternal(table.childWidgets, index, true);\n var cloneTable = prevBlock.clone();\n this.getInsertedTable(cloneTable, index);\n var paragraph = this.selection.getFirstParagraph(row.nextWidget.childWidgets[0]);\n prevBlock.isDefaultFormatUpdated = false;\n this.documentHelper.layout.reLayoutTable(prevBlock);\n if (this.checkInsertPosition(this.selection)) {\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(paragraph, '0'), true);\n }\n this.selection.start.setPosition(paragraph.firstChild, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.updateHistoryPosition(this.selection.end, false);\n }\n this.selection.end.setPosition(paragraph.firstChild, true);\n this.reLayout(this.selection);\n };\n /**\n * Inserts the specified number of columns to the table left or right to the column at cursor position.\n *\n * @param {number} left The left parameter is optional and if omitted, it takes the value as false and\n * inserts to the right of column at cursor position.\n * @param {number} count The count parameter is optional and if omitted, it takes the value as 1.\n * @returns {void}\n */\n Editor.prototype.insertColumn = function (left, count) {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var columnPlacement = left ? 'Left' : 'Right';\n if (this.selection.start.paragraph.isInsideTable) {\n if (this.checkIsNotRedoing()) {\n this.initHistory(columnPlacement === 'Left' ? 'InsertColumnLeft' : 'InsertColumnRight');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerRow.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n //Clones the entire table to preserve in history.\n this.cloneTableToHistoryInfo(table);\n }\n this.selection.owner.isLayoutEnabled = false;\n var cellIndex = startCell.columnIndex;\n if (columnPlacement === 'Right') {\n cellIndex = endCell.columnIndex + endCell.cellFormat.columnSpan;\n }\n var startParagraph = undefined;\n var newCell = undefined;\n var columnCount = count ? count : this.getColumnCountToInsert();\n var rowSpannedCells = [];\n //let rowSpanCellIndex: number = cellIndex;\n for (var i = 0; i < columnCount; i++) {\n for (var j = 0; j < table.childWidgets.length; j++) {\n var row = table.childWidgets[j];\n newCell = this.createColumn(this.selection.getLastParagraph(startCell));\n newCell.index = j;\n newCell.rowIndex = row.rowIndex;\n newCell.containerWidget = row;\n newCell.cellFormat.copyFormat(startCell.cellFormat);\n newCell.cellFormat.rowSpan = 1;\n if (isNullOrUndefined(startParagraph)) {\n startParagraph = this.selection.getFirstParagraph(newCell);\n }\n if (cellIndex === 0) {\n row.childWidgets.splice(cellIndex, 0, newCell);\n }\n else {\n this.insertSpannedCells(row, rowSpannedCells, newCell, cellIndex);\n }\n this.copyCellFormats(row, cellIndex);\n this.editorHistory.currentBaseHistoryInfo.insertedNodes.push(newCell);\n }\n }\n this.tableReLayout(table, startParagraph, newCell);\n }\n };\n /**\n * Inserting the cell for collaborative editing.\n * @private\n * @returns {void}\n */\n Editor.prototype.cellInsertionForCE = function (index, row, cellData, paragraphData, characterData) {\n var startParagraph = undefined;\n var newCell = undefined;\n newCell = this.createColumn(undefined);\n var line = new LineWidget(newCell.childWidgets[0]);\n newCell.childWidgets[0].childWidgets.push(line);\n newCell.index = row.index;\n newCell.rowIndex = row.rowIndex;\n newCell.containerWidget = row;\n this.documentHelper.owner.parser.parseCellFormat(cellData, newCell.cellFormat, 0);\n this.documentHelper.owner.parser.parseParagraphFormat(0, paragraphData, newCell.childWidgets[0].paragraphFormat);\n this.documentHelper.owner.parser.parseCharacterFormat(0, characterData, newCell.childWidgets[0].characterFormat);\n newCell.cellFormat.rowSpan = 1;\n row.childWidgets.splice(index, 0, newCell);\n };\n Editor.prototype.copyCellFormats = function (row, index) {\n var newCell = row.childWidgets[index];\n if (!isNullOrUndefined(newCell)) {\n var newCellPara = newCell.childWidgets[0];\n (index == (row.childWidgets.length - 1)) ? --index : ++index;\n var nextCell = row.childWidgets[index];\n var widget = nextCell.childWidgets[0];\n while (widget instanceof TableWidget) {\n widget = widget.childWidgets[0].childWidgets[0].childWidgets[0];\n }\n var nextCellpara = nextCell.childWidgets[0];\n var line = void 0;\n var nextCellTextBox = void 0;\n if (nextCellpara.childWidgets.length > 0) {\n line = nextCellpara.childWidgets[0];\n if (line.children.length > 0) {\n nextCellTextBox = line.children[0];\n }\n }\n newCellPara.paragraphFormat.copyFormat(nextCellpara.paragraphFormat);\n if (!isNullOrUndefined(nextCellTextBox)) {\n newCellPara.characterFormat.copyFormat(nextCellTextBox.characterFormat);\n }\n else {\n newCellPara.characterFormat.copyFormat(nextCellpara.characterFormat);\n }\n }\n };\n Editor.prototype.copyContent = function (table) {\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && this.owner.enableCollaborativeEditing) {\n var lastPara = this.documentHelper.getLastParagraphBlock(table);\n var firstPara = this.documentHelper.getFirstParagraphBlock(table);\n if (firstPara.childWidgets.length === 0) {\n firstPara.childWidgets[0] = new LineWidget(firstPara);\n }\n if (lastPara.childWidgets.length === 0) {\n lastPara.childWidgets[0] = new LineWidget(lastPara);\n }\n var startLine = firstPara.firstChild;\n var lastLine = lastPara.lastChild;\n var endoffset = lastPara.lastChild.getEndOffset();\n var documentContent = !isNullOrUndefined(this.owner.sfdtExportModule) ? this.owner.sfdtExportModule.write((this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0), startLine, 0, lastLine, endoffset, false, true) : {};\n this.editorHistory.currentBaseHistoryInfo.pasteContent = documentContent;\n }\n };\n Editor.prototype.tableReLayout = function (table, startParagraph, newCell, isCollaborativePaste) {\n table.updateRowIndex(0);\n var parentTable = this.documentHelper.layout.getParentTable(table);\n if (parentTable) {\n parentTable.fitChildToClientArea();\n }\n else {\n table.fitChildToClientArea();\n }\n this.selection.owner.isLayoutEnabled = true;\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.skipScrollToPosition = true;\n if (isCollaborativePaste) {\n this.copyContent(table);\n }\n this.documentHelper.layout.reLayoutTable(table);\n this.selection.start.setPosition(startParagraph.firstChild, true);\n this.selection.end.setPosition(this.selection.getLastParagraph(newCell).firstChild, false);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n }\n };\n /**\n * Creates table with specified rows and columns.\n * @private\n *\n * @returns {TableWidget}\n */\n Editor.prototype.createTable = function (rows, columns) {\n var startPara = this.selection.start.paragraph;\n var table = new TableWidget();\n table.tableFormat.preferredWidthType = 'Auto';\n table.tableFormat.leftIndent = this.selection.start.paragraph.leftIndent;\n table.tableFormat.initializeTableBorders();\n var index = 0;\n while (index < rows) {\n var tableRow = this.createRowAndColumn(columns, index);\n tableRow.rowFormat.heightType = 'Auto';\n if (this.owner.enableTrackChanges) {\n this.insertRevision(tableRow.rowFormat, 'Insertion');\n }\n tableRow.containerWidget = table;\n table.childWidgets.push(tableRow);\n index++;\n }\n return table;\n };\n Editor.prototype.createRowAndColumn = function (columns, rowIndex, index, table) {\n var tableWidget = table;\n var startPara = this.selection.start.paragraph;\n var tableRow = new TableRowWidget();\n tableRow.rowFormat = new WRowFormat(tableRow);\n tableRow.index = rowIndex;\n for (var i = 0; i < columns; i++) {\n if (!isNullOrUndefined(index) && !isNullOrUndefined(tableWidget)) {\n if (index && index > 0 && tableWidget.childWidgets[index - 1] && tableWidget.childWidgets[index - 1].childWidgets[i]) {\n var widget = tableWidget.childWidgets[index - 1].childWidgets[i].childWidgets[0];\n while (widget instanceof TableWidget) {\n widget = widget.childWidgets[0].childWidgets[0].childWidgets[0];\n }\n startPara = widget;\n }\n else if (index == 0) {\n var widget = tableWidget.childWidgets[index].childWidgets[i].childWidgets[0];\n while (widget instanceof TableWidget) {\n widget = widget.childWidgets[0].childWidgets[0].childWidgets[0];\n }\n startPara = widget;\n }\n }\n var tableCell = this.createColumn(startPara, true);\n tableCell.index = i;\n tableCell.rowIndex = rowIndex;\n tableCell.containerWidget = tableRow;\n tableRow.childWidgets.push(tableCell);\n }\n return tableRow;\n };\n Editor.prototype.createColumn = function (paragraph, isNewRow) {\n var tableCell = new TableCellWidget();\n var para = new ParagraphWidget();\n // let line: LineWidget = new LineWidget(para);\n // para.childWidgets.push(line);\n if (isNewRow) {\n para.paragraphFormat.copyFormat(paragraph.paragraphFormat);\n para.paragraphFormat.leftIndent = 0;\n para.paragraphFormat.firstLineIndent = 0;\n var elementBox = void 0;\n if (!isNullOrUndefined(paragraph.childWidgets[0])) {\n elementBox = paragraph.childWidgets[0].children[0];\n }\n if (!isNullOrUndefined(elementBox)) {\n para.characterFormat.copyFormat(elementBox.characterFormat);\n }\n else {\n para.characterFormat.copyFormat(paragraph.characterFormat);\n }\n }\n para.containerWidget = tableCell;\n tableCell.childWidgets.push(para);\n tableCell.cellFormat = new WCellFormat(tableCell);\n return tableCell;\n };\n Editor.prototype.getColumnCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (start && end && this.selection.getTable(start, end)) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell) {\n return count = 1;\n }\n if (start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = count + end.paragraph.associatedCell.cellIndex - start.paragraph.associatedCell.cellIndex;\n }\n else {\n count = 0;\n var selectedCells = start.paragraph.associatedCell.ownerTable.getColumnCellsForSelection(start.paragraph.associatedCell, end.paragraph.associatedCell);\n for (var i = 0; i < selectedCells.length; i++) {\n if (start.paragraph.associatedCell.ownerRow === selectedCells[i].ownerRow) {\n count++;\n }\n }\n }\n }\n return count === 0 ? 1 : count;\n };\n Editor.prototype.getRowCountToInsert = function () {\n var count = 1;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!isNullOrUndefined(start) && !isNullOrUndefined(end) && !isNullOrUndefined(this.selection.getTable(start, end))) {\n if (start.paragraph.associatedCell === end.paragraph.associatedCell ||\n start.paragraph.associatedCell.ownerRow === end.paragraph.associatedCell.ownerRow) {\n return count = 1;\n }\n else {\n return count = count +\n this.getOwnerRow(!this.selection.isForward).rowIndex - this.getOwnerRow(this.selection.isForward).rowIndex;\n }\n }\n return count === 0 ? 1 : count;\n };\n /**\n * @private\n */\n Editor.prototype.getOwnerCell = function (isStart) {\n var cell = undefined;\n var startCell = isStart ? this.selection.start.paragraph.associatedCell\n : this.selection.end.paragraph.associatedCell;\n var endCell = isStart ? this.selection.end.paragraph.associatedCell\n : this.selection.start.paragraph.associatedCell;\n cell = startCell;\n var owner = cell.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endCell.ownerTable) {\n cell = owner.containerWidget;\n owner = cell.ownerTable;\n }\n return cell;\n };\n Editor.prototype.getOwnerRow = function (isStart) {\n var row;\n var startRow = isStart ? this.selection.start.paragraph.associatedCell.ownerRow\n : this.selection.end.paragraph.associatedCell.ownerRow;\n var endRow = isStart ? this.selection.end.paragraph.associatedCell.ownerRow\n : this.selection.start.paragraph.associatedCell.ownerRow;\n row = startRow;\n var owner = row.ownerTable;\n while (!isNullOrUndefined(owner) && owner.containerWidget instanceof TableCellWidget && owner !== endRow.ownerTable) {\n row = owner.containerWidget.ownerRow;\n owner = row.ownerTable;\n }\n return row;\n };\n Editor.prototype.getOwnerTable = function (isStart) {\n var table = undefined;\n var startTable = this.selection.start.paragraph.associatedCell.ownerTable;\n var endTable = this.selection.end.paragraph.associatedCell.ownerTable;\n table = isStart ? startTable : endTable;\n while (table.containerWidget instanceof TableCellWidget && table !== (isStart ? endTable : startTable)) {\n table = table.containerWidget.ownerTable;\n }\n return table;\n };\n /**\n * Merge Selected cells\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.mergeSelectedCellsInTable = function () {\n if (!this.canMergeCells()) {\n return;\n }\n if (this.owner.enableTrackChanges) {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n this.alertDialog = DialogUtility.alert({\n title: localizeValue.getConstant('UnTrack'),\n content: localizeValue.getConstant('Merge Track'),\n showCloseIcon: true,\n okButton: {\n text: 'Ok', click: this.confirmCellMerge.bind(this)\n },\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n this.alertDialog.enableRtl = this.owner.enableRtl;\n }\n else {\n this.confirmCellMerge();\n }\n };\n Editor.prototype.confirmCellMerge = function () {\n if (this.checkIsNotRedoing()) {\n this.initHistory('MergeCells');\n }\n this.selection.owner.isShiftingEnabled = true;\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n var startOwnerCell = this.getOwnerCell(this.selection.isForward);\n var endOwnerCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startOwnerCell, endOwnerCell);\n if (containerCell.ownerTable.contains(endOwnerCell)) {\n if (!this.selection.containsCell(containerCell, endOwnerCell)) {\n //Start and End are in different cells. \n var table = startOwnerCell.ownerTable.combineWidget(this.owner.viewer);\n startOwnerCell = this.selection.getSelectedCell(startOwnerCell, containerCell);\n endOwnerCell = this.selection.getSelectedCell(endOwnerCell, containerCell);\n //Merges the selected cells. \n var mergedCell = this.mergeSelectedCells(table, startOwnerCell, endOwnerCell);\n var firstParagraph = this.selection.getFirstParagraph(mergedCell);\n startPosition.setPosition(firstParagraph.firstChild, true);\n var lastParagraph = this.selection.getLastParagraph(mergedCell);\n endPosition.setPosition(lastParagraph.lastChild, false);\n this.selection.fireSelectionChanged(false);\n }\n }\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection, false);\n }\n if (!isNullOrUndefined(this.alertDialog)) {\n this.alertDialog.close();\n this.alertDialog = undefined;\n }\n };\n Editor.prototype.mergeSelectedCells = function (table, startCell, endCell) {\n //Clones the entire table to preserve in history.\n var clonedTable = this.cloneTableToHistoryInfo(table);\n this.selection.owner.isLayoutEnabled = false;\n //Merges the selected cells.\n var start = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var end = start + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(start, end, endCellLeft, endCellRight);\n start = cellInfo.start;\n end = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var mergedCell = undefined;\n var firstBlock;\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (HelperMethods.round(start, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(end, 2)) {\n var lastBlock = cell.lastChild;\n if (lastBlock instanceof ParagraphWidget && lastBlock.isEmpty()) {\n cell.childWidgets.pop();\n }\n if (isNullOrUndefined(mergedCell)) {\n mergedCell = cell;\n firstBlock = lastBlock;\n }\n else {\n if (i === rowStartIndex) {\n mergedCell.cellFormat.preferredWidth += cell.cellFormat.preferredWidth;\n mergedCell.cellFormat.columnSpan += cell.cellFormat.columnSpan;\n this.mergeBorders(mergedCell, cell);\n }\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block = cell.childWidgets[k];\n var newBlock = block.clone();\n newBlock.containerWidget = mergedCell;\n mergedCell.childWidgets.push(newBlock);\n }\n row.childWidgets.splice(j, 1);\n cell.destroy();\n j--;\n for (var l = this.documentHelper.contentControlCollection.length - 1; l > -1; l--) {\n var content = this.documentHelper.contentControlCollection[l];\n if (isNullOrUndefined(content.contentControlProperties)) {\n this.documentHelper.contentControlCollection.splice(l);\n }\n }\n }\n }\n }\n //To Ensure minimul content. \n if ((mergedCell.childWidgets.length === 0 || mergedCell.childWidgets.length === 1 && mergedCell.childWidgets[0] instanceof TableWidget) && firstBlock) {\n var newBlock = firstBlock.clone();\n mergedCell.childWidgets.push(newBlock);\n newBlock.containerWidget = mergedCell;\n }\n if (row.childWidgets.length === 0) {\n var rowIndex = table.childWidgets.indexOf(row);\n row.updateRowBySpannedCells();\n table.childWidgets.splice(rowIndex, 1);\n row.destroy();\n count--;\n i--;\n }\n }\n if (!isNullOrUndefined(mergedCell) && rowStartIndex < count) {\n mergedCell.cellFormat.rowSpan = count - rowStartIndex + 1;\n }\n this.updateBlockIndexAfterMerge(mergedCell);\n table.updateRowIndex(0);\n table.calculateGrid();\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n //Layouts the table after merging cells.\n this.selection.owner.isLayoutEnabled = true;\n return mergedCell;\n };\n Editor.prototype.mergeBorders = function (mergedCell, tableCell) {\n var mergedCellborders = undefined;\n var cellBorders = null;\n if (!isNullOrUndefined(mergedCell.cellFormat.borders)) {\n mergedCellborders = mergedCell.cellFormat.borders;\n }\n if (!isNullOrUndefined(tableCell.cellFormat.borders)) {\n cellBorders = tableCell.cellFormat.borders;\n }\n if (isNullOrUndefined(mergedCellborders) && isNullOrUndefined(cellBorders)) {\n return;\n }\n if (isNullOrUndefined(mergedCellborders)) {\n mergedCellborders = new WBorders(mergedCell.cellFormat);\n mergedCellborders.copyFormat(cellBorders);\n }\n else if (isNullOrUndefined(cellBorders)) {\n return;\n }\n else {\n if (mergedCell.ownerRow.rowIndex === tableCell.ownerRow.rowIndex) {\n mergedCellborders.top = mergedCell.getBorderBasedOnPriority(mergedCellborders.top, cellBorders.bottom);\n mergedCellborders.bottom = mergedCell.getBorderBasedOnPriority(mergedCellborders.bottom, cellBorders.bottom);\n }\n }\n };\n Editor.prototype.updateBlockIndexAfterMerge = function (cell) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n cell.childWidgets[i].index = i;\n }\n };\n /**\n * Determines whether the merge cell operation can be done.\n *\n * @returns {boolean} Returns true if to merge cells; Otherwise, false.\n */\n Editor.prototype.canMergeCells = function () {\n if (this.selection.isEmpty || !this.selection.start.paragraph.isInsideTable || !this.selection.end.paragraph.isInsideTable) {\n return false;\n }\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n if (!this.selection.containsCell(containerCell, endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n var rowSpan = 1;\n if (startCell.ownerRow === endCell.ownerRow) {\n var startCellIndex = startCell.ownerRow.childWidgets.indexOf(startCell);\n for (var i = startCellIndex; i <= startCell.ownerRow.childWidgets.indexOf(endCell); i++) {\n var cell = startCell.ownerRow.childWidgets[i];\n var prevCell = cell.previousWidget;\n if (i !== startCellIndex) {\n if (cell.cellFormat.rowSpan !== rowSpan) {\n return false;\n }\n if (!isNullOrUndefined(prevCell)\n && cell.columnIndex !== (prevCell.cellFormat.columnSpan + prevCell.columnIndex)) {\n return false;\n }\n }\n rowSpan = cell.cellFormat.rowSpan;\n }\n return true;\n }\n return this.canMergeSelectedCellsInTable(startCell.ownerTable, startCell, endCell);\n }\n }\n return false;\n };\n Editor.prototype.canMergeSelectedCellsInTable = function (table, startCell, endCell) {\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var startLeft = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var endLeft = startLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startLeft, endLeft, endCellLeft, endCellRight);\n startLeft = cellInfo.start;\n endLeft = cellInfo.end;\n var selectionLeft = 0;\n var selectionRight = 0;\n var isRowLeftWithinSel = false;\n var isRowRightWithinSel = false;\n var rowSpannedCells = [];\n for (var i = rowStartIndex; i <= count; i++) {\n var row = table.childWidgets[i];\n var rowLeft = 0;\n var rowRight = 0;\n var isStarted = false;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (this.checkCellWithInSelection(startLeft, endLeft, cellStart)) {\n isRowLeftWithinSel = false;\n isRowRightWithinSel = false;\n if (cell.cellFormat.rowSpan > 1) {\n rowSpannedCells.push(cell);\n }\n if (!isStarted) {\n rowLeft = cellStart;\n rowRight = cellStart;\n isStarted = true;\n }\n var prevCell = cell.previousWidget;\n if (rowRight !== 0 && HelperMethods.round(rowRight, 0) !== HelperMethods.round(cellStart, 0)) {\n rowRight = cellStart;\n }\n rowRight += HelperMethods.convertPointToPixel(cell.cellFormat.cellWidth);\n var isPrevCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, true);\n var isNextCellWithinSel = this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false);\n // When selected cell not having row spanned cells and column index is not having immediate cell index value,\n // then returned false.\n var isNoRowSpan = rowSpannedCells.length === 0 || rowSpannedCells.length === 1 && rowSpannedCells[0] === cell;\n // checks whether current cell is with in selection.\n var isCellWithInSel = this.checkCurrentCell(rowSpannedCells, cell, isPrevCellWithinSel, isNextCellWithinSel);\n // when last selected row not having equal row span then returned false.\n if (i === count && !isNullOrUndefined(prevCell) && cell.cellFormat.rowSpan > prevCell.cellFormat.rowSpan\n && !isCellWithInSel) {\n return false;\n }\n if (i !== rowStartIndex) {\n for (var m = 0; m < rowSpannedCells.length; m++) {\n {\n var rowSpan = (rowSpannedCells[m].ownerRow.rowIndex + rowSpannedCells[m].cellFormat.rowSpan) - 1;\n if (rowSpan >= row.rowIndex) {\n if (rowSpannedCells[m].columnIndex > cell.columnIndex) {\n isRowRightWithinSel = true;\n }\n else {\n isRowLeftWithinSel = true;\n }\n if (i === count && rowSpannedCells[m] !== cell\n && rowSpan > (cell.ownerRow.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return false;\n }\n if (rowSpan === row.rowIndex && !this.checkPrevOrNextCellIsWithinSel(startLeft, endLeft, cell, false)) {\n rowSpannedCells.splice(rowSpannedCells.indexOf(rowSpannedCells[m]), 1);\n }\n }\n }\n }\n }\n if (isPrevCellWithinSel && !isNullOrUndefined(prevCell)\n && isNoRowSpan\n && (cell.columnIndex !== prevCell.columnIndex + 1 && this.checkCellWidth(cell))) {\n return false;\n }\n }\n }\n if (i === rowStartIndex) {\n selectionLeft = rowLeft;\n selectionRight = rowRight;\n }\n else {\n if (rowRight > 0 && rowLeft > 0) {\n if (!((isRowLeftWithinSel || Math.round(selectionLeft) === Math.round(rowLeft))\n && (isRowRightWithinSel || Math.round(selectionRight) === Math.round(rowRight)))) {\n return false;\n }\n }\n if (i === count) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkCellWidth = function (cell) {\n var prevCell = cell.previousWidget;\n var cellLeft = this.documentHelper.selection.getCellLeft(cell.ownerRow, cell);\n var prevCellLeft = this.documentHelper.selection.getCellLeft(cell.ownerRow, prevCell);\n var left = prevCellLeft + HelperMethods.convertPointToPixel(prevCell.cellFormat.cellWidth);\n if (HelperMethods.round(left, 2) !== HelperMethods.round(cellLeft, 2)) {\n return true;\n }\n return false;\n };\n Editor.prototype.checkCellWithInSelection = function (startLeft, endLeft, cellStart) {\n if (HelperMethods.round(startLeft, 2) <= HelperMethods.round(cellStart, 2)\n && HelperMethods.round(cellStart, 2) < HelperMethods.round(endLeft, 2)) {\n return true;\n }\n return false;\n };\n Editor.prototype.checkPrevOrNextCellIsWithinSel = function (startLeft, endLeft, cell, isPrev) {\n var prevOrNextCell = isPrev ? cell.previousWidget : cell.nextWidget;\n var cellStart = 0;\n if (isNullOrUndefined(prevOrNextCell)) {\n return false;\n }\n cellStart = this.documentHelper.selection.getCellLeft(prevOrNextCell.ownerRow, prevOrNextCell);\n return this.checkCellWithInSelection(startLeft, endLeft, cellStart);\n };\n Editor.prototype.checkCurrentCell = function (rowSpannedCells, cell, isPrevCellWithInSel, isNextCellWithinSel) {\n var cellOwner = cell.ownerRow;\n if (rowSpannedCells.length > 0) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n var spannedCellOwner = rowSpannedCells[i].ownerRow;\n var rowSpan = (spannedCellOwner.rowIndex + rowSpannedCells[i].cellFormat.rowSpan) - 1;\n if (rowSpannedCells[i] === cell && (rowSpannedCells.length === 1 || this.checkRowSpannedCells(rowSpannedCells, cell))\n && !(isNextCellWithinSel || isPrevCellWithInSel)) {\n return true;\n }\n if (rowSpannedCells[i] !== cell && spannedCellOwner.rowIndex < cellOwner.rowIndex\n && rowSpan === (cellOwner.rowIndex + cell.cellFormat.rowSpan - 1)) {\n return true;\n }\n }\n }\n return false;\n };\n Editor.prototype.checkRowSpannedCells = function (rowSpannedCells, cell) {\n for (var i = 0; i < rowSpannedCells.length; i++) {\n if (rowSpannedCells[i] !== cell && rowSpannedCells[i].columnIndex === cell.columnIndex) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.insertNewParagraphWidget = function (newParagraph, insertAfter) {\n this.updateInsertPosition();\n this.insertParagraph(newParagraph, insertAfter);\n if (!insertAfter) {\n var nextParagraph = void 0;\n var currentParagraph = newParagraph;\n do {\n nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n currentParagraph = nextParagraph;\n } while (nextParagraph && nextParagraph.equals(newParagraph));\n if (!isNullOrUndefined(nextParagraph)) {\n this.selection.selectParagraphInternal(nextParagraph, true);\n }\n else {\n this.selection.selectParagraphInternal(newParagraph, true);\n }\n }\n this.fireContentChange();\n };\n Editor.prototype.insertParagraph = function (newParagraph, insertAfter) {\n var lineWidget = this.selection.start.currentWidget;\n var offset = this.selection.start.offset;\n if (this.editorHistory && this.editorHistory.isUndoing && this.editorHistory.currentBaseHistoryInfo &&\n this.editorHistory.currentBaseHistoryInfo.action === 'InsertTextParaReplace') {\n offset = 0;\n }\n var currentParagraph = this.selection.start.paragraph;\n currentParagraph = currentParagraph.combineWidget(this.owner.viewer);\n if (insertAfter) {\n var length_1 = this.selection.getLineLength(currentParagraph.lastChild);\n var insertIndex_1 = newParagraph.firstChild ? newParagraph.firstChild.children.length : 0;\n this.moveInlines(currentParagraph, newParagraph, insertIndex_1, offset, lineWidget, length_1, currentParagraph.lastChild);\n }\n else if (offset > 0) {\n var length_2 = currentParagraph.getLength();\n this.moveInlines(currentParagraph, newParagraph, 0, 0, currentParagraph.firstChild, offset, lineWidget);\n if (length_2 === offset && currentParagraph.characterFormat.revisions.length > 0) {\n while (currentParagraph.characterFormat.revisions.length > 0) {\n newParagraph.characterFormat.revisions.push(currentParagraph.characterFormat.revisions.shift());\n }\n }\n }\n var splittedWidget = currentParagraph.getSplitWidgets();\n currentParagraph = insertAfter ? splittedWidget[splittedWidget.length - 1] : splittedWidget[0];\n var insertIndex = currentParagraph.containerWidget.childWidgets.indexOf(currentParagraph);\n if (insertAfter) {\n insertIndex++;\n }\n var bodyWidget = currentParagraph.containerWidget;\n newParagraph.index = currentParagraph.index;\n newParagraph.containerWidget = bodyWidget;\n bodyWidget.childWidgets.splice(insertIndex, 0, newParagraph);\n this.constructRevisionsForBlock(newParagraph, true);\n this.updateNextBlocksIndex(insertAfter ? currentParagraph : newParagraph, true);\n newParagraph.height = 0;\n if (newParagraph instanceof ParagraphWidget) {\n this.documentHelper.layout.linkFieldInParagraph(newParagraph);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(newParagraph.index, bodyWidget, newParagraph, false);\n };\n Editor.prototype.moveInlines = function (currentParagraph, newParagraph, insertIndex, startOffset, startLine, endOffset, endLine, removeBlock) {\n if (newParagraph.childWidgets.length === 0) {\n var line = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(line);\n }\n var isMoved = false;\n this.documentHelper.layout.clearListElementBox(currentParagraph);\n this.documentHelper.layout.clearListElementBox(newParagraph);\n for (var j = 0; j < currentParagraph.childWidgets.length; j++) {\n var lineWidget = currentParagraph.childWidgets[j];\n if (startLine === lineWidget && endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, startOffset, endOffset, insertIndex, newParagraph);\n break;\n }\n if (endLine === lineWidget) {\n insertIndex = this.moveContent(lineWidget, 0, endOffset, insertIndex, newParagraph);\n break;\n }\n else if (startLine === lineWidget) {\n isMoved = true;\n insertIndex = this.moveContent(lineWidget, startOffset, this.documentHelper.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n else if (isMoved) {\n insertIndex = this.moveContent(lineWidget, 0, this.documentHelper.selection.getLineLength(lineWidget), insertIndex, newParagraph);\n }\n }\n this.removeEmptyLine(currentParagraph);\n if (!currentParagraph.isInsideTable && !removeBlock) {\n this.viewer.updateClientArea(currentParagraph.bodyWidget, currentParagraph.bodyWidget.page);\n this.documentHelper.layout.reLayoutParagraph(currentParagraph, 0, 0);\n }\n };\n Editor.prototype.moveContent = function (lineWidget, startOffset, endOffset, insertIndex, paragraph) {\n var count = 0;\n //let lineIndex: number = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n for (var i = 0; i < lineWidget.children.length; i++) {\n var inline = lineWidget.children[i];\n if (startOffset >= count + inline.length || inline instanceof ListTextElementBox) {\n if (!(inline instanceof ListTextElementBox)) {\n count += inline.length;\n }\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n if (endIndex > inline.length) {\n endIndex = inline.length;\n }\n if (startIndex > 0) {\n count += startIndex;\n }\n if (startIndex === 0 && endIndex === inline.length) {\n if (inline instanceof ShapeBase) {\n var shapeIndex = lineWidget.paragraph.floatingElements.indexOf(inline);\n if (shapeIndex !== -1) {\n lineWidget.paragraph.floatingElements.splice(shapeIndex, 1);\n }\n }\n paragraph.firstChild.children.splice(insertIndex, 0, inline);\n inline.line = paragraph.firstChild;\n insertIndex++;\n // if (editAction < 4) {\n // this.unLinkFieldCharacter(inline);\n lineWidget.children.splice(i, 1);\n i--;\n // }\n }\n else if (inline instanceof TextElementBox) {\n // if (editAction < 4) {\n var span = new TextElementBox();\n span.characterFormat.copyFormat(inline.characterFormat);\n span.text = inline.text.substr(startIndex, endIndex - startIndex);\n inline.ischangeDetected = true;\n span.ischangeDetected = true;\n paragraph.firstChild.children.splice(insertIndex, 0, span);\n span.line = paragraph.firstChild;\n insertIndex++;\n this.updateRevisionForMovedContent(inline, span);\n inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n inline.isWidthUpdated = false;\n inline.ischangeDetected = true;\n }\n if (endOffset <= count + endIndex - startIndex) {\n break;\n }\n count += endIndex - startIndex;\n }\n return insertIndex;\n };\n Editor.prototype.updateRevisionForMovedContent = function (inline, tempSpan) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var currentRevision = inline.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(inline);\n tempSpan.revisions.splice(0, 0, currentRevision);\n currentRevision.range.splice(rangeIndex, 0, tempSpan);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n };\n /**\n * update complex changes when history is not preserved\n *\n * @param {number} action - Specifies the action\n * @param {string} start - Specifies the selection start\n * @param {string} end - Specified the selection end\n * @private\n * @returns {void}\n */\n Editor.prototype.updateComplexWithoutHistory = function (action, start, end) {\n var selection = this.documentHelper.selection;\n if (action === 0) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n this.documentHelper.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n this.setPositionForCurrentIndex(selection.start, end);\n this.setPositionForCurrentIndex(selection.end, end);\n }\n if (action === 1) {\n var startPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(startPosition, start);\n var endPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(endPosition, end);\n this.documentHelper.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.documentHelper.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (selection.owner.isShiftingEnabled) {\n this.documentHelper.layout.shiftLayoutedItems(false);\n if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n }\n selection.owner.isShiftingEnabled = false;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n this.documentHelper.updateFocus();\n this.owner.viewer.updateScrollBars();\n this.fireContentChange();\n this.isHandledComplex = true;\n };\n /**\n * Re-layout content.\n *\n * @param {Selection} selection - Specifies the selection\n * @param isSelectionChanged - Specifies the selection changed\n * @private\n * @returns {void}\n */\n Editor.prototype.reLayout = function (selection, isSelectionChanged, isLayoutChanged) {\n if (!isNullOrUndefined(this.previousBlockToLayout)) {\n // Layout content for previous page to fix content based on KeepWithNext format.\n var previousBlock = this.previousBlockToLayout;\n this.documentHelper.layout.layoutBodyWidgetCollection(previousBlock.index, previousBlock.bodyWidget, previousBlock, false, false);\n this.previousBlockToLayout = undefined;\n }\n if (!this.documentHelper.isComposingIME && this.editorHistory && this.editorHistory.isHandledComplexHistory()) {\n if (this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action !== 'ClearFormat') {\n if (this.editorHistory.currentHistoryInfo.action !== 'ApplyStyle') {\n if (this.editorHistory.currentHistoryInfo.action === 'DragAndDropContent') {\n this.documentHelper.layout.shiftLayoutedItems(true);\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n }\n this.isHandledComplex = false;\n if (this.editorHistory.currentHistoryInfo && (this.editorHistory.currentHistoryInfo.action === 'ColumnBreak'\n || this.editorHistory.currentHistoryInfo.action === 'PageBreak')) {\n }\n else {\n return;\n }\n }\n if (!isNullOrUndefined(selection.editRegionHighlighters)) {\n selection.editRegionHighlighters.clear();\n }\n if (isNullOrUndefined(this.documentHelper.blockToShift)) {\n this.documentHelper.removeEmptyPages();\n this.documentHelper.layout.updateFieldElements();\n /* if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.footnoteWidget)) {\n let foot: FootNoteWidget = selection.start.paragraph.bodyWidget.page.footnoteWidget;\n //this.documentHelper.layout.layoutfootNote(foot);\n }\n if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.endnoteWidget)) {\n let foot: FootNoteWidget = selection.start.paragraph.bodyWidget.page.endnoteWidget;\n //this.documentHelper.layout.layoutfootNote(foot);\n }*/\n this.selection.contentControleditRegionHighlighters.clear();\n this.selection.onHighlightContentControl();\n if (!this.documentHelper.owner.enableHeaderAndFooter) {\n this.owner.viewer.updateScrollBars();\n }\n if (!selection.owner.isShiftingEnabled || this.documentHelper.isRowOrCellResizing) {\n selection.fireSelectionChanged(true);\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n }\n }\n if (isNullOrUndefined(isSelectionChanged)) {\n isSelectionChanged = selection.isEmpty;\n }\n if (this.owner.showRevisions && this.owner.trackChangesPane.isUpdateTrackChanges(this.owner.revisions.length)) {\n this.owner.trackChangesPane.updateTrackChanges();\n }\n if (selection.owner.isShiftingEnabled) {\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n var bodyWidget = selection.start.paragraph.bodyWidget;\n var splittedSection = bodyWidget.getSplitWidgets();\n bodyWidget = splittedSection[splittedSection.length - 1];\n var isColumnBreak = (this.editorHistory && this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action === 'ColumnBreak' && this.documentHelper.layout.isMultiColumnDoc) ? true : false;\n if (this.documentHelper.compatibilityMode === \"Word2010\" && (bodyWidget.isWord2010NextColumn || (!isNullOrUndefined(bodyWidget.nextRenderedWidget) && (bodyWidget.nextRenderedWidget.isWord2010NextColumn || (bodyWidget.nextRenderedWidget.sectionFormat.numberOfColumns > 1 && bodyWidget.nextRenderedWidget.sectionFormat.breakCode === \"NoBreak\")))) && !(bodyWidget instanceof HeaderFooterWidget) && !(!isNullOrUndefined(bodyWidget.containerWidget) && bodyWidget.containerWidget instanceof FootNoteWidget)) {\n this.layoutWholeDocument(true, true);\n }\n else if (((!isNullOrUndefined(bodyWidget.nextRenderedWidget) && bodyWidget.nextRenderedWidget.sectionFormat.breakCode === 'NoBreak' && this.documentHelper.layout.isMultiColumnDoc) || (bodyWidget.sectionFormat.breakCode === 'NoBreak' && (bodyWidget.sectionIndex === bodyWidget.page.bodyWidgets[0].sectionIndex) && bodyWidget.sectionFormat.numberOfColumns > 1) || isColumnBreak) && !(bodyWidget instanceof HeaderFooterWidget) && !(!isNullOrUndefined(bodyWidget.containerWidget) && bodyWidget.containerWidget instanceof FootNoteWidget)) {\n var startPosition = this.documentHelper.selection.start;\n var endPosition = this.documentHelper.selection.end;\n var startInfo = this.selection.getParagraphInfo(startPosition);\n var endInfo = this.selection.getParagraphInfo(endPosition);\n var startIndex = this.selection.getHierarchicalIndex(startInfo.paragraph, startInfo.offset.toString());\n var endIndex = this.selection.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n this.documentHelper.layout.shiftLayoutedItems(true);\n this.setPositionForCurrentIndex(startPosition, startIndex);\n this.setPositionForCurrentIndex(endPosition, endIndex);\n this.documentHelper.selection.selectPosition(startPosition, endPosition);\n if (!this.documentHelper.owner.enableHeaderAndFooter) {\n this.owner.viewer.updateScrollBars();\n }\n }\n else {\n this.documentHelper.layout.shiftLayoutedItems(true);\n }\n if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n // We are considered headerWigetIn and footerWidgetIn for rendering the header and footer. So, we called the updateScrollBars method once the headerWidgetIn and footerWidgetIn were updated.\n this.owner.viewer.updateScrollBars();\n }\n if (!this.documentHelper.isRowOrCellResizing) {\n if (!isNullOrUndefined(selection.start.paragraph)) {\n if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.containerWidget) && selection.start.paragraph.bodyWidget.containerWidget instanceof FootNoteWidget) {\n if (selection.start.paragraph.bodyWidget.containerWidget.footNoteType === 'Footnote') {\n this.documentHelper.layout.isRelayoutFootnote = true;\n this.shiftFootnotePageContent(selection.start.paragraph.bodyWidget.containerWidget);\n //this.documentHelper.layout.layoutfootNote(selection.start.paragraph.bodyWidget.containerWidget);\n }\n else {\n this.documentHelper.layout.isRelayoutFootnote = false;\n this.shiftFootnotePageContent();\n }\n }\n }\n this.getOffsetValue(selection);\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(true);\n if (this.owner.enableAutoFocus) {\n this.documentHelper.updateFocus();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n //this.documentHelper.layout.allowLayout = true;\n }\n }\n else if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n // We are considered headerWigetIn and footerWidgetIn for rendering the header and footer. So, we called the updateScrollBars method once the headerWidgetIn and footerWidgetIn were updated.\n this.owner.viewer.updateScrollBars();\n }\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo &&\n ((this.editorHistory.currentBaseHistoryInfo.action !== 'RowResizing'\n && this.editorHistory.currentBaseHistoryInfo.action !== 'CellResizing')\n || (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (this.editorHistory.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n this.editorHistory.currentBaseHistoryInfo.updateSelection();\n }\n if (!(this.editorHistory.undoStack && this.editorHistory.undoStack.length > 0 && this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1] instanceof HistoryInfo &&\n this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].modifiedActions &&\n this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].modifiedActions[this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].modifiedActions.length - 1] === this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n else {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n if (isLayoutChanged) {\n if (!isNullOrUndefined(selection) && this.documentHelper.formFields.length > 0) {\n selection.highlightFormFields();\n }\n return;\n }\n this.fireContentChange();\n if (this.owner.enableLockAndEdit) {\n // Editable region border get updated in content changes event.\n // So, handled rerendering content after applying border.\n this.owner.viewer.updateScrollBars();\n }\n this.owner.documentHelper.layout.isRelayout = false;\n this.isFootnoteElementRemoved = false;\n this.isEndnoteElementRemoved = false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateHeaderFooterWidget = function (headerFooterWidget) {\n if (isNullOrUndefined(headerFooterWidget)) {\n headerFooterWidget = this.selection.start.paragraph.bodyWidget;\n }\n this.updateHeaderFooterWidgetToPage(headerFooterWidget);\n this.shiftPageContent(headerFooterWidget.headerFooterType, headerFooterWidget.sectionFormat);\n };\n Editor.prototype.updateHeaderFooterWidgetToPage = function (node) {\n var currentPage = node.page;\n //node = this.documentHelper.layout.updateHeaderFooterToParent(node);\n var isEvenPage = (node.headerFooterType === 'EvenHeader' || node.headerFooterType === 'EvenFooter');\n var isFirstPage = (node.headerFooterType === 'FirstPageHeader' || node.headerFooterType === 'FirstPageFooter');\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage && isFirstPage\n && (page.headerWidgetIn.headerFooterType == node.headerFooterType || page.footerWidgetIn.headerFooterType == node.headerFooterType)) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n continue;\n }\n if (page.bodyWidgets[0].sectionFormat.differentFirstPage &&\n (isFirstPage || (!isFirstPage && page.index == 0 || page.sectionIndex != page.previousPage.sectionIndex))) {\n continue;\n }\n //if (currentPage !== page) {\n if (page.bodyWidgets[0].sectionFormat.differentOddAndEvenPages) {\n if (isEvenPage && (i + 1) % 2 === 0) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n else if ((!isEvenPage && (i + 1) % 2 !== 0)) {\n if (i > 0 || !(page.bodyWidgets[0].sectionFormat.differentFirstPage)) {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n }\n }\n else {\n this.updateHeaderFooterWidgetToPageInternal(page, node, node.headerFooterType.indexOf('Header') !== -1);\n }\n //}\n }\n };\n Editor.prototype.updateHeaderFooterWidgetToPageInternal = function (page, widget, isHeader) {\n var update = false;\n if (isHeader) {\n update = widget != page.headerWidgetIn && widget.page.headerWidget == page.headerWidget;\n }\n else {\n update = widget != page.footerWidgetIn && widget.page.footerWidget == page.footerWidget;\n }\n if (update) {\n var hfWidget = widget.clone();\n this.documentHelper.layout.clearBlockWidget(hfWidget.childWidgets, true, true, true);\n hfWidget.page = page;\n hfWidget.parentHeaderFooter = widget;\n this.owner.viewer.updateHFClientArea(hfWidget.sectionFormat, isHeader);\n hfWidget = this.documentHelper.layout.layoutHeaderFooterItems(this.owner.viewer, hfWidget);\n var headerOrFooter = void 0;\n if (isHeader) {\n headerOrFooter = page.headerWidgetIn;\n page.headerWidget = hfWidget;\n }\n else {\n headerOrFooter = page.footerWidgetIn;\n page.footerWidget = hfWidget;\n }\n this.removeFieldInWidget(headerOrFooter);\n this.removeFieldInWidget(headerOrFooter, undefined, true);\n headerOrFooter.destroy();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeFieldInWidget = function (widget, isBookmark, isContentControl) {\n if (isNullOrUndefined(isBookmark)) {\n isBookmark = false;\n }\n for (var i = 0; i < widget.childWidgets.length; i++) {\n this.removeFieldInBlock(widget.childWidgets[i], isBookmark, isContentControl);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeFieldInBlock = function (block, isBookmark, isContentControl) {\n if (block instanceof TableWidget) {\n if (block.wrapTextAround && !isNullOrUndefined(block.bodyWidget)) {\n var index = block.bodyWidget.floatingElements.indexOf(block);\n if (index !== -1) {\n block.bodyWidget.floatingElements.splice(index, 1);\n }\n }\n this.removeFieldTable(block, isBookmark, isContentControl);\n }\n else if (block instanceof TableRowWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n this.removeFieldInWidget(block.childWidgets[i], isBookmark, isContentControl);\n }\n }\n else {\n this.removeField(block, isBookmark, isContentControl);\n }\n };\n Editor.prototype.removeFieldTable = function (table, isBookmark, isContentControl) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.removeFieldInWidget(row.childWidgets[j], isBookmark, isContentControl);\n }\n }\n };\n Editor.prototype.shiftFootnotePageContent = function (foot) {\n var section = this.documentHelper.pages[0].bodyWidgets[0];\n if (!isNullOrUndefined(foot)) {\n var index = this.documentHelper.pages.indexOf(foot.page);\n section = this.documentHelper.pages[index].bodyWidgets[0];\n }\n if (!isNullOrUndefined(section.page.footnoteWidget)) {\n this.checkAndShiftFromBottom(section.page, section.page.footnoteWidget);\n }\n if (!isNullOrUndefined(section.page.endnoteWidget)) {\n //this.checkAndShiftFromBottom(section.page, section.page.endnoteWidget);\n }\n if (this.documentHelper.blockToShift) {\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.shiftPageContent = function (type, sectionFormat) {\n // let type: HeaderFooterType = headerFooter.headerFooterType;\n var pageIndex;\n if (type.indexOf('First') !== -1) {\n pageIndex = 0;\n }\n else if (sectionFormat.differentOddAndEvenPages) {\n var isEven = type.indexOf('Even') !== -1;\n if (sectionFormat.differentFirstPage) {\n pageIndex = isEven ? 1 : 2;\n }\n else {\n pageIndex = !isEven ? 0 : 1;\n }\n }\n else {\n pageIndex = sectionFormat.differentFirstPage ? 1 : 0;\n if (pageIndex === 1 && this.documentHelper.pages.length === 1) {\n pageIndex = 0;\n }\n }\n var section = this.documentHelper.pages[pageIndex].bodyWidgets[0];\n do {\n if (type.indexOf('Header') !== -1) {\n var widget = section.page.headerWidget;\n var isNotEmpty = !widget.isEmpty || widget.isEmpty && this.owner.enableHeaderAndFooter;\n var firstBlock = section.firstChild;\n var top_1 = HelperMethods.convertPointToPixel(sectionFormat.topMargin);\n var headerDistance = HelperMethods.convertPointToPixel(sectionFormat.headerDistance);\n if (isNotEmpty) {\n top_1 = Math.max(headerDistance + section.page.headerWidget.height, top_1);\n }\n if (firstBlock.y !== top_1 && section.sectionFormat.breakCode !== \"NoBreak\") {\n this.owner.viewer.updateClientArea(section, section.page);\n firstBlock = firstBlock.combineWidget(this.owner.viewer);\n var prevWidget = firstBlock.previousRenderedWidget;\n if (prevWidget) {\n if (firstBlock.containerWidget.equals(prevWidget.containerWidget) && !(prevWidget.containerWidget.lastChild instanceof ParagraphWidget && (prevWidget.containerWidget.lastChild.isEndsWithPageBreak || prevWidget.containerWidget.lastChild.isEndsWithColumnBreak))) {\n this.owner.viewer.cutFromTop(prevWidget.y + prevWidget.height);\n this.documentHelper.layout.updateContainerWidget(firstBlock, prevWidget.containerWidget, prevWidget.indexInOwner + 1, false);\n }\n }\n this.documentHelper.blockToShift = firstBlock;\n }\n }\n else {\n this.checkAndShiftFromBottom(section.page, section.page.footerWidget);\n }\n if (this.documentHelper.blockToShift) {\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n this.documentHelper.layout.shiftLayoutedItems(false);\n }\n while (section) {\n var previousSection = section;\n do {\n //To skip section continuous, since it already shifted in `shiftLayoutedItems` method.\n var splittedSection = section.getSplitWidgets();\n section = splittedSection[splittedSection.length - 1].nextRenderedWidget;\n } while (section && previousSection.page === section.page);\n if (section) {\n if (pageIndex === 0) {\n break;\n }\n else {\n if (section.page.index + 1 % 2 === 0 && pageIndex === 1 ||\n (section.page.index + 1 % 2 !== 0 && pageIndex === 2)) {\n break;\n }\n var nextPage = section.page.nextPage;\n if (!isNullOrUndefined(nextPage) && nextPage.bodyWidgets[0].equals(section)) {\n section = nextPage.bodyWidgets[0];\n break;\n }\n }\n }\n }\n } while (section);\n };\n Editor.prototype.checkAndShiftFromBottom = function (page, footerWidget) {\n var bodyWidget = page.bodyWidgets[0];\n var blockToShift;\n if (bodyWidget.childWidgets.length > 1) {\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets[i];\n if (block.y + block.height > footerWidget.y) {\n blockToShift = block;\n break;\n }\n if (!(footerWidget instanceof FootNoteWidget)) {\n if (bodyWidget.childWidgets.length - 1 === i && block.y + block.height < footerWidget.y) {\n blockToShift = block;\n break;\n }\n }\n }\n if (!isNullOrUndefined(blockToShift)) {\n this.owner.viewer.updateClientArea(bodyWidget, page, true);\n this.owner.viewer.cutFromTop(blockToShift.y);\n this.documentHelper.blockToShift = blockToShift;\n }\n }\n };\n Editor.prototype.allowFormattingInFormFields = function (property) {\n if (this.documentHelper.protectionType === 'FormFieldsOnly' && this.selection.isInlineFormFillMode() &&\n !isNullOrUndefined(this.owner.documentEditorSettings.formFieldSettings.formattingExceptions)) {\n for (var j = 0; j < this.owner.documentEditorSettings.formFieldSettings.formattingExceptions.length; j++) {\n if (property.toLowerCase() === this.owner.documentEditorSettings.formFieldSettings.formattingExceptions[j].toLowerCase()) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.getContentControl = function () {\n for (var i = 0; i < this.documentHelper.contentControlCollection.length; i++) {\n if (this.documentHelper.contentControlCollection[i].paragraph.isInHeaderFooter && this.documentHelper.owner.layoutType === \"Continuous\") {\n continue;\n }\n var contentControlStart = this.documentHelper.contentControlCollection[i];\n var line = contentControlStart.line;\n if (!isNullOrUndefined(line.children) && !isNullOrUndefined(line.children.length)) {\n var position = this.selection.getPosition(contentControlStart);\n var cCstart = position.startPosition;\n var cCend = position.endPosition;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if ((start.isExistAfter(cCstart) || start.isAtSamePosition(cCstart))\n && (end.isExistBefore(cCend) || end.isAtSamePosition(cCend))) {\n return contentControlStart;\n }\n }\n }\n return undefined;\n };\n Editor.prototype.checkPlainTextContentControl = function () {\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n end = this.selection.start;\n start = this.selection.end;\n }\n var startIndex = 0;\n var endIndex = 0;\n var startInline = start.currentWidget.getInline(start.offset, startIndex);\n var endInline = end.currentWidget.getInline(end.offset, endIndex);\n startIndex = startInline.index;\n endIndex = endInline.index;\n var startInlineEle = startInline.element;\n var endInlineEle = endInline.element;\n var startPosition;\n var endPosition;\n if ((startInlineEle && startInlineEle.contentControlProperties && startInlineEle.contentControlProperties.type === 'Text')\n || (endInlineEle && endInlineEle.contentControlProperties && endInlineEle.contentControlProperties.type === 'Text')) {\n startInlineEle = this.getContentControl();\n if (!isNullOrUndefined(startInlineEle) && startInlineEle.contentControlProperties) {\n var offset = startInlineEle.line.getOffset(startInlineEle, 1);\n startPosition = new TextPosition(this.owner);\n startPosition.setPositionParagraph(startInlineEle.line, offset);\n }\n else {\n startPosition = start;\n }\n if (endInlineEle.contentControlProperties && !isNullOrUndefined(startInlineEle)\n && startInlineEle.reference) {\n endInlineEle = startInlineEle.reference;\n var endoffset = endInlineEle.line.getOffset(endInlineEle, endInlineEle.length);\n endPosition = new TextPosition(this.owner);\n endPosition.setPositionParagraph(endInlineEle.line, endoffset);\n }\n else {\n endPosition = end;\n }\n this.selection.selectRange(startPosition, endPosition);\n }\n else if (start.paragraph.contentControlProperties\n && start.paragraph.contentControlProperties.type === 'Text') {\n this.selection.selectParagraph();\n }\n };\n //Paste Implementation ends\n //Character Format apply implementation starts\n /**\n * Applies character format for selection.\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Spcifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyCharacterFormat = function (property, value, update, applyStyle) {\n var allowFormatting = this.documentHelper.isFormFillProtectedMode\n && this.documentHelper.selection.isInlineFormFillMode() && this.allowFormattingInFormFields(property);\n if ((this.restrictFormatting && !allowFormatting) || !isNullOrUndefined(this.selection) && this.selection.checkContentControlLocked(true)) {\n return;\n }\n this.documentHelper.layout.isBidiReLayout = true;\n var selection = this.documentHelper.selection;\n if ((selection.owner.isReadOnlyMode && !allowFormatting) || !selection.owner.isDocumentLoaded) {\n return;\n }\n update = isNullOrUndefined(update) ? false : update;\n applyStyle = isNullOrUndefined(applyStyle) ? false : applyStyle;\n var action = (property[0].toUpperCase() + property.slice(1));\n var paragraph = selection.start.paragraph;\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n this.checkPlainTextContentControl();\n if (selection.isEmpty && selection.contextType !== 'List' && !applyStyle) {\n selection.skipFormatRetrieval = true;\n if (selection.end.isAtParagraphEnd) {\n this.initHistory(action);\n this.documentHelper.owner.isShiftingEnabled = true;\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n this.reLayout(this.documentHelper.selection);\n this.documentHelper.updateFocus();\n }\n else {\n selection.fireSelectionChanged(true);\n }\n selection.skipFormatRetrieval = false;\n return;\n }\n //Skip consider highlightcolor if paragraph mark alone is selected similar to Microsoft Word behaviour\n if (property === 'highlightColor' && selection.start.isInSameParagraph(selection.end)) {\n var start = selection.start;\n var end = selection.end;\n if (!this.selection.isForward) {\n end = selection.start;\n start = selection.end;\n }\n if (end.offset === selection.getLineLength(end.currentWidget) + 1 && end.offset - 1 === start.offset) {\n return;\n }\n }\n this.setOffsetValue(selection);\n this.initHistory(action);\n // Todo: Complete Microsoft Word behavior on apply formatting in empty selection\n // if (selection.isEmpty) {\n // this.documentHelper.owner.isShiftingEnabled = true;\n // this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n // this.reLayout(this.documentHelper.selection);\n // this.documentHelper.updateFocus();\n // return;\n // }\n if (selection.contextType === 'List') {\n // this.updateCharacterFormatForListText(selection, action, value, update);\n this.applyCharacterFormatForListText(selection, property, value, update);\n }\n else {\n //Iterate and update format.\n this.updateSelectionCharacterFormatting(property, value, update);\n }\n if (this.documentHelper.contentControlCollection.length > 0) {\n this.selection.contentControleditRegionHighlighters.clear();\n this.selection.isHighlightContentControlEditRegion = true;\n this.selection.onHighlightContentControl();\n }\n this.documentHelper.layout.isBidiReLayout = false;\n };\n Editor.prototype.applyCharacterFormatForListText = function (selection, property, values, update) {\n var listLevel = selection.getListLevel(selection.start.paragraph);\n if (isNullOrUndefined(listLevel)) {\n return;\n }\n var characterFormat = listLevel.characterFormat;\n switch (property) {\n case 'bold':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'bold', !(characterFormat.bold));\n break;\n case 'italic':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'italic', !(characterFormat.italic));\n break;\n case 'fontColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontColor', values);\n break;\n case 'fontFamily':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontFamily', values);\n break;\n case 'fontSize':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'fontSize', values);\n break;\n case 'highlightColor':\n this.applyListCharacterFormatByValue(selection, characterFormat, 'highlightColor', values);\n break;\n case 'baselineAlignment':\n if (characterFormat.baselineAlignment === values) {\n values = 'Normal';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'baselineAlignment', values);\n break;\n case 'strikethrough':\n if (characterFormat.strikethrough === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'strikethrough', values);\n break;\n case 'underline':\n if (characterFormat.underline === values) {\n values = 'None';\n }\n this.applyListCharacterFormatByValue(selection, characterFormat, 'underline', values);\n break;\n case 'characterFormat':\n this.applyListCharacterFormatByValue(selection, characterFormat, undefined, values);\n break;\n }\n };\n Editor.prototype.applyListCharacterFormatByValue = function (selection, format, property, value) {\n this.initHistory('ListCharacterFormat');\n this.applyCharFormatValue(format, property, value, false);\n this.editorHistory.updateHistory();\n this.reLayout(selection);\n this.fireContentChange();\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListCharacterFormat = function (selection, property, value) {\n this.updateListTextSelRange(selection, property, value, false);\n };\n Editor.prototype.updateListTextSelRange = function (selection, property, value, update) {\n this.documentHelper.owner.isShiftingEnabled = true;\n var startPositionInternal = selection.start;\n var endPositionInternal = selection.end;\n if (!selection.isForward) {\n startPositionInternal = selection.end;\n endPositionInternal = selection.start;\n }\n this.initHistoryPosition(selection, startPositionInternal);\n var listLevel = selection.getListLevel(selection.start.paragraph);\n this.applyCharFormatValue(listLevel.characterFormat, property, value, update);\n this.startSelectionReLayouting(startPositionInternal.paragraph, selection, startPositionInternal, endPositionInternal);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateInsertPosition = function () {\n var selection = this.documentHelper.selection;\n var position = selection.start;\n if (!selection.isForward) {\n position = selection.end;\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && !isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.updateHistoryPosition(position, true);\n }\n }\n };\n /**\n * Preserve paragraph and offset value for selection\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.setOffsetValue = function (selection) {\n var info = this.selection.getParagraphInfo(selection.start);\n this.startParagraph = info.paragraph;\n this.startOffset = info.offset;\n info = this.selection.getParagraphInfo(selection.end);\n this.endParagraph = info.paragraph;\n this.endOffset = info.offset;\n };\n /**\n * Toggles the highlight color property of selected contents.\n *\n * @param {HighlightColor} highlightColor Specify the highlight color to be applied (default: Yellow).\n * @returns {void}\n */\n Editor.prototype.toggleHighlightColor = function (highlightColor) {\n var selection = this.documentHelper.selection;\n if (isNullOrUndefined(highlightColor) || highlightColor === 'NoColor') {\n highlightColor = 'Yellow';\n }\n //In Ms Word the highlight color is took from the ribbon. So we Have given yellow as constant.\n if (selection.characterFormat.highlightColor === highlightColor) {\n highlightColor = 'NoColor';\n }\n this.selection.characterFormat.highlightColor = highlightColor;\n };\n /**\n * Toggles the subscript formatting of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleSubscript = function () {\n if (this.owner.isReadOnlyMode || this.restrictFormatting) {\n return;\n }\n var value = this.selection.characterFormat.baselineAlignment === 'Subscript' ? 'Normal' : 'Subscript';\n this.selection.characterFormat.baselineAlignment = value;\n };\n /**\n * Toggles the superscript formatting of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleSuperscript = function () {\n if (this.owner.isReadOnlyMode || this.restrictFormatting) {\n return;\n }\n var value = this.selection.characterFormat.baselineAlignment === 'Superscript' ? 'Normal' : 'Superscript';\n this.selection.characterFormat.baselineAlignment = value;\n };\n /**\n * Increases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @returns {void}\n */\n Editor.prototype.increaseIndent = function () {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('leftIndent', this.documentHelper.defaultTabWidth, true, false);\n }\n };\n /**\n * Decreases the left indent of selected paragraphs to a factor of 36 points.\n *\n * @returns {void}\n */\n Editor.prototype.decreaseIndent = function () {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.onApplyParagraphFormat('leftIndent', -this.documentHelper.defaultTabWidth, true, false);\n }\n };\n /**\n * Clears the list format for selected paragraphs.\n *\n * @returns {void}\n */\n Editor.prototype.clearList = function () {\n this.selection.owner.editorModule.onApplyList(undefined);\n };\n /**\n * Applies the bullet list to selected paragraphs.\n *\n * @param {string} bullet Specify the bullet character to be applied.\n * @param {string} fontFamily Specify the bullet font family name.\n * @returns {void}\n */\n Editor.prototype.applyBullet = function (bullet, fontFamily) {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.applyBulletOrNumbering(bullet, 'Bullet', fontFamily);\n }\n };\n /**\n * Applies the numbering list to selected paragraphs.\n *\n * @param {string} numberFormat “%n” representations in ‘numberFormat’ parameter will be replaced by respective list level’s value.\n * `“%1)” will be displayed as “1)” `\n * @param {ListLevelPattern} listLevelPattern Default value of ‘listLevelPattern’ parameter is ListLevelPattern.Arabic\n * @returns {void}\n */\n Editor.prototype.applyNumbering = function (numberFormat, listLevelPattern) {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n this.applyBulletOrNumbering(numberFormat, listLevelPattern, 'Verdana');\n }\n };\n /**\n * Toggles the baseline alignment property of selected contents.\n *\n * @param {BaselineAlignment} baseAlignment Specifies the baseline alignment.\n * @returns {void}\n */\n Editor.prototype.toggleBaselineAlignment = function (baseAlignment) {\n this.updateProperty(2, baseAlignment);\n };\n Editor.prototype.clearFormattingInternal = function (isCompletePara) {\n var selection = this.documentHelper.selection;\n this.setPreviousBlockToLayout();\n this.initComplexHistory('ClearFormat');\n // let startIndex: string = selection.start.getHierarchicalIndexInternal();\n // let endIndex: string = selection.end.getHierarchicalIndexInternal();\n if (selection.isEmpty || (!isNullOrUndefined(isCompletePara) && isCompletePara)) {\n selection.start.moveToParagraphStartInternal(selection, false);\n selection.end.moveToParagraphEndInternal(selection, false);\n }\n this.setOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearCharacterFormat');\n }\n this.updateSelectionCharacterFormatting('ClearCharacterFormat', undefined, false);\n this.getOffsetValue(selection);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.setOffsetValue(selection);\n if (isNullOrUndefined(isCompletePara) || isCompletePara) {\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ClearParagraphFormat');\n }\n this.updateParagraphFormatInternal('ClearParagraphFormat', undefined, false);\n }\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n this.getOffsetValue(selection);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n // else {\n // this.checkAndUpdatedSelection(startIndex, endIndex);\n // }\n };\n /**\n * Clears the formatting.\n *\n * @returns {void}\n */\n Editor.prototype.clearFormatting = function () {\n this.clearFormattingInternal();\n };\n Editor.prototype.updateProperty = function (type, value) {\n var selection = this.selection;\n if (((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) || !selection.owner.isDocumentLoaded) {\n return;\n }\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var indexInInline = 0;\n var inlineObj = startPosition.currentWidget.getInline(startPosition.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n var paragraph = startPosition.paragraph;\n if (!isNullOrUndefined(inline) && inline.length === indexInInline && !this.selection.isEmpty) {\n inline = inline.nextNode;\n }\n if (type === 1) {\n var currentUnderline = 'None';\n if (!isNullOrUndefined(inline)) {\n currentUnderline = inline.characterFormat.underline;\n }\n else if (!isNullOrUndefined(paragraph)) {\n currentUnderline = paragraph.characterFormat.underline;\n }\n this.selection.characterFormat.underline = value === currentUnderline ? 'None' : value;\n }\n else {\n var script = 'Normal';\n if (!isNullOrUndefined(inline)) {\n script = inline.characterFormat.baselineAlignment;\n }\n else if (!isNullOrUndefined(paragraph)) {\n script = paragraph.characterFormat.baselineAlignment;\n }\n if (script === value) {\n value = 'Normal';\n }\n this.selection.characterFormat.baselineAlignment = value;\n }\n };\n Editor.prototype.getCompleteStyles = function () {\n var completeStylesString = '{\"styles\":[';\n for (var _i = 0, _a = this.documentHelper.preDefinedStyles.keys; _i < _a.length; _i++) {\n var name_1 = _a[_i];\n completeStylesString += (this.documentHelper.preDefinedStyles.get(name_1) + ',');\n }\n return completeStylesString.slice(0, -1) + ']}';\n };\n /**\n * Initialize default styles\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.intializeDefaultStyles = function () {\n var existingStyles = this.owner.getStyleNames('Paragraph');\n var defaultStyleNames = ['Normal', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6', 'Heading 7', 'Heading 8', 'Heading 9', 'Header', 'Footer'];\n var styleNames = defaultStyleNames.filter(function (val) {\n return existingStyles.indexOf(val) === -1;\n });\n for (var _i = 0, styleNames_1 = styleNames; _i < styleNames_1.length; _i++) {\n var name_2 = styleNames_1[_i];\n this.createStyle(this.documentHelper.preDefinedStyles.get(name_2));\n }\n };\n /**\n * Creates a new style or modifies an existing style with the specified style properties.\n *\n * > If modifyExistingStyle parameter is set to true and a style already exists with same name, it modifies the specified properties in the existing style.\n * > If modifyExistingStyle parameter is set to false and a style already exists with same name, it creates a new style with unique name by appending ‘_1’. Hence, the newly style will not have the specified name.\n * > If no style exists with same name, it creates a new style.\n *\n * @param {string} styleString The style properties.\n * @param {boolean} modifyExistingStyle The Boolean value denotes whether to modify the properties in the existing style or create a new style.\n *\n * @returns {string} Returns the name of the created style.\n */\n Editor.prototype.createStyle = function (styleString, modifyExistingStyle) {\n return this.createStyleIn(styleString, modifyExistingStyle).name;\n };\n /**\n * @private\n * Adds a new style to the document or updates an existing style.\n *\n * @param {string} styleString - The style to be added or updated.\n * @param {boolean} modifyExistingStyle - Whether to modify an existing style.\n * @returns {Object} - The style that was added or updated.\n */\n Editor.prototype.createStyleIn = function (styleString, modifyExistingStyle) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var style = JSON.parse(styleString);\n var styleObj = this.documentHelper.styles.findByName(style.name);\n var inputStyleType = style.type;\n if (isNullOrUndefined(styleObj) || isNullOrUndefined(modifyExistingStyle) || !modifyExistingStyle) {\n if (styleObj !== undefined) {\n // Create a new style with new name and add it to collection.\n style.name = this.getUniqueStyleName(style.name);\n }\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), style, this.documentHelper.styles, true);\n }\n else {\n if (inputStyleType === styleObj.type) {\n // Update the existing style with the newly received style information(Json)\n this.setStyle(styleObj, style);\n }\n else {\n // Create a new style with new name and add it to collection.\n style.name = this.getUniqueStyleName(style.name);\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), style, this.documentHelper.styles, true);\n }\n }\n this.owner.notify(internalStyleCollectionChange, {});\n return this.documentHelper.styles.findByName(style.name);\n };\n /**\n * Modify the Style\n * @private\n * @returns {void}\n */\n Editor.prototype.setStyle = function (styleObj, style) {\n // based on Style\n if (!isNullOrUndefined(style.basedOn)) {\n var basedOn = this.documentHelper.styles.findByName(style.basedOn);\n if (!isNullOrUndefined(basedOn)) {\n if (basedOn.type === style.type) {\n styleObj.basedOn = basedOn;\n }\n }\n else {\n var basedStyle = this.getStyle(style.basedOn, JSON.parse(this.getCompleteStyles()));\n var styleData = void 0;\n if (!isNullOrUndefined(basedStyle) && basedStyle.type === style.type) {\n styleData = basedStyle;\n }\n else {\n if (style.type === 'Paragraph') {\n styleData = JSON.parse('{\"type\":\"Paragraph\",\"name\":\"Normal\",\"next\":\"Normal\"}');\n }\n else {\n styleData = JSON.parse('{\"type\": \"Character\",\"name\": \"Default Paragraph Font\"}');\n }\n }\n styleObj.basedOn = this.documentHelper.styles.findByName(styleData.name);\n }\n }\n // next style\n if (!isNullOrUndefined(style.next)) {\n if (style.type === \"Paragraph\") {\n if (style.next === style.name) {\n styleObj.next = styleObj;\n }\n else {\n var next = this.documentHelper.styles.findByName(style.next);\n if (!isNullOrUndefined(next) && next.type === styleObj.type) {\n styleObj.next = next;\n }\n else {\n styleObj.next = styleObj;\n }\n }\n }\n }\n // link style\n if (!isNullOrUndefined(style.link)) {\n var link = this.documentHelper.styles.findByName(style.link);\n var styleString = void 0;\n if (!isNullOrUndefined(link) && (link.type === \"Character\")) {\n this.documentHelper.owner.parser.parseCharacterFormat(0, style.characterFormat, link.characterFormat);\n styleObj.link = link;\n }\n else {\n //Construct the CharacterStyle string\n var charaStyle = {};\n charaStyle.characterFormat = style.characterFormat;\n var newCharStyle = this.documentHelper.styles.findByName(style.name + ' Char');\n if (newCharStyle.name !== undefined) {\n charaStyle.name = this.getUniqueStyleName(style.name) + ' Char';\n }\n else {\n charaStyle.name = style.name + ' Char';\n }\n charaStyle.type = 'Character';\n charaStyle.basedOn = 'Default Paragraph Font';\n styleString = charaStyle;\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), styleString, this.documentHelper.styles);\n styleObj.link = this.documentHelper.styles.findByName(styleString.name);\n }\n if (style.type == 'Character') {\n for (var i = 0; i < this.documentHelper.styles.length; i++) {\n var styleFormCollection = this.documentHelper.styles.getItem(i);\n var styleLink = styleFormCollection.link;\n var linkName = styleLink === undefined ? \"\" : styleLink.name;\n if (styleFormCollection.type === 'Paragraph' && linkName === style.link) {\n if (!isNullOrUndefined(styleFormCollection.characterFormat)) {\n this.documentHelper.owner.parser.parseCharacterFormat(0, style.characterFormat, styleFormCollection.characterFormat);\n }\n }\n }\n }\n }\n //update the new paragraph style \n if (!isNullOrUndefined(style.paragraphFormat)) {\n this.documentHelper.owner.parser.parseParagraphFormat(0, style.paragraphFormat, styleObj.paragraphFormat);\n }\n //update the new character style \n if (!isNullOrUndefined(style.characterFormat)) {\n this.documentHelper.owner.parser.parseCharacterFormat(0, style.characterFormat, styleObj.characterFormat);\n }\n };\n Editor.prototype.getStyle = function (name, data) {\n for (var i = 0; i < data.styles.length; i++) {\n if (data.styles[i].name === name) {\n return data.styles[i];\n }\n }\n return undefined;\n };\n Editor.prototype.getUniqueStyleName = function (name) {\n var uniqueName = this.getUniqueName(name);\n var style = this.documentHelper.styles.findByName(uniqueName);\n while (!isNullOrUndefined(style)) {\n uniqueName = this.getUniqueStyleName(style.name);\n style = this.documentHelper.styles.findByName(uniqueName);\n }\n return uniqueName;\n };\n Editor.prototype.getUniqueName = function (name) {\n var matchArray = name.match(/\\d+$/);\n var returnName;\n if (!isNullOrUndefined(matchArray) && matchArray.length > 0) {\n return name.replace(matchArray[0], (parseInt(matchArray[0], 10) + 1).toString());\n }\n else {\n return name + '_1';\n }\n };\n /**\n * Update Character format for selection\n * @private\n */\n Editor.prototype.updateSelectionCharacterFormatting = function (property, values, update) {\n if (isNullOrUndefined(property)) {\n property = 'CharacterFormat';\n }\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = values;\n }\n switch (property) {\n case 'bold':\n this.updateCharacterFormat('bold', values);\n break;\n case 'italic':\n this.updateCharacterFormat('italic', values);\n break;\n case 'fontColor':\n this.updateCharacterFormat('fontColor', values);\n break;\n case 'fontFamily':\n this.updateCharacterFormat('fontFamily', values);\n break;\n case 'fontSize':\n this.documentHelper.layout.isBidiReLayout = false;\n this.updateCharacterFormatWithUpdate(this.documentHelper.selection, 'fontSize', values, update);\n break;\n case 'highlightColor':\n this.updateCharacterFormat('highlightColor', values);\n break;\n case 'baselineAlignment':\n this.updateCharacterFormat('baselineAlignment', values);\n break;\n case 'strikethrough':\n this.updateCharacterFormat('strikethrough', values);\n break;\n case 'underline':\n this.updateCharacterFormat('underline', values);\n break;\n case 'styleName':\n this.updateCharacterFormatWithUpdate(this.documentHelper.selection, 'styleName', values, true, true);\n break;\n case 'CharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n case 'ClearCharacterFormat':\n this.updateCharacterFormat(undefined, values);\n break;\n case 'allCaps':\n this.updateCharacterFormat('allCaps', values);\n break;\n }\n this.reLayout(this.documentHelper.selection);\n };\n Editor.prototype.updateCharacterFormat = function (property, value) {\n this.updateCharacterFormatWithUpdate(this.documentHelper.selection, property, value, false);\n };\n Editor.prototype.updateCharacterFormatWithUpdate = function (selection, property, value, update, styleName) {\n styleName = isNullOrUndefined(styleName) ? false : styleName;\n this.documentHelper.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isEmpty && !selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n if (selection.isEmpty && styleName) {\n var offset = startPosition.offset;\n var preservedStartPosition = startPosition.clone();\n var preservedEndPosition = endPosition.clone();\n this.selection.selectCurrentWord();\n if (offset === this.selection.start.offset || offset === this.selection.end.offset - 1) {\n this.selection.start = preservedStartPosition;\n this.selection.end = preservedEndPosition;\n }\n }\n this.applyCharFormatSelectedContent(startPosition.paragraph, selection, startPosition, endPosition, property, value, update);\n };\n Editor.prototype.applyCharFormatSelectedContent = function (paragraph, selection, start, end, property, value, update) {\n //Selection start in cell.\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyCharFormatCell(cell, selection, start, end, property, value, update);\n var table = cell.ownerTable;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n this.applyCharFormat(paragraph, selection, start, end, property, value, update);\n }\n };\n Editor.prototype.applyCharFormatForSelectedPara = function (paragraph, selection, property, value, update) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n element.isWidthUpdated = false;\n this.applyCharFormatValue(element.characterFormat, property, value, update);\n }\n }\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n };\n Editor.prototype.splittedLastParagraph = function (paragraph) {\n var splittedWidets = paragraph.getSplitWidgets();\n return splittedWidets[splittedWidets.length - 1];\n };\n Editor.prototype.getNextParagraphForCharacterFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.documentHelper.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.applyCharFormat(block, this.documentHelper.selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatForTable(0, block, this.documentHelper.selection, start, end, property, value, update);\n }\n }\n };\n Editor.prototype.applyCharFormat = function (paragraph, selection, start, end, property, value, update) {\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var startOffset = 0;\n var length = selection.getParagraphLength(paragraph);\n var startLineWidget = paragraph.childWidgets.indexOf(start.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(start.currentWidget) : 0;\n var endOffset = end.offset;\n var endLineWidget = paragraph.childWidgets.indexOf(end.currentWidget) !== -1 ?\n paragraph.childWidgets.indexOf(end.currentWidget) : paragraph.childWidgets.length - 1;\n if (!isNullOrUndefined(selection)) {\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n }\n }\n if (!paragraph.equals(end.paragraph)) {\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n //Skip consider highlightcolor if paragraph mark alone is selected similar to Microsoft Word behaviour\n if (!(property === 'highlightColor' && selection.isParagraphLastLine(lastLine)\n && start.currentWidget === lastLine && start.offset === selection.getLineLength(lastLine))) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n }\n endOffset = length;\n }\n else {\n var lastLine = paragraph.childWidgets[paragraph.childWidgets.length - 1];\n if (selection.isParagraphLastLine(lastLine) && end.currentWidget === lastLine\n && ((endOffset === selection.getLineLength(lastLine) + 1) || (selection.isEmpty && selection.end.isAtParagraphEnd))) {\n this.applyCharFormatValue(paragraph.characterFormat, property, value, update);\n }\n }\n // let count: number = 0;\n for (var i = startLineWidget; i <= endLineWidget; i++) {\n var line = paragraph.childWidgets[i];\n if (i !== startLineWidget) {\n startOffset = selection.getStartLineOffset(line);\n }\n if (line === end.currentWidget) {\n endOffset = end.offset;\n }\n else {\n endOffset = selection.getLineLength(line);\n }\n var count = 0;\n var isStarted = true;\n var endElement = undefined;\n var indexOf = -1;\n var isIncrease = true;\n for (var j = 0; j < line.children.length; isIncrease ? j++ : j--) {\n var inlineObj = line.children[j];\n isStarted = false;\n inlineObj.isWidthUpdated = false;\n if (inlineObj instanceof ListTextElementBox) {\n continue;\n }\n if (endElement === inlineObj) {\n endElement = undefined;\n j = indexOf;\n indexOf = -1;\n isIncrease = true;\n }\n if (startOffset >= count + inlineObj.length) {\n count += inlineObj.length;\n continue;\n }\n var startIndex = 0;\n if (startOffset > count) {\n startIndex = startOffset - count;\n }\n var endIndex = endOffset - count;\n var inlineLength = inlineObj.length;\n if (endIndex > inlineLength) {\n endIndex = inlineLength;\n }\n var index = this.applyCharFormatInline(inlineObj, selection, startIndex, endIndex, property, value, update);\n // Added the revision for the character format of the current para when inserting the link when selecting the multiple para and inserting the link.\n if ((property !== \"fontColor\" || paragraph.characterFormat.revisions.length === 0) && !paragraph.equals(end.paragraph) && this.isForHyperlinkFormat && this.owner.enableTrackChanges && line.children[j].indexInOwner === line.children.length - 1 && line === line.paragraph.lastChild) {\n if (!isNullOrUndefined(inlineObj) && inlineObj.revisions.length > 0) {\n var currentRevision = inlineObj.revisions[inlineObj.revisions.length - 1];\n paragraph.characterFormat.revisions.push(currentRevision);\n currentRevision.range.push(paragraph.characterFormat);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n }\n j += index;\n if (endOffset <= count + inlineLength) {\n break;\n }\n count += inlineLength;\n }\n }\n var endParagraph = end.paragraph;\n this.documentHelper.layout.reLayoutParagraph(paragraph, startLineWidget, 0);\n if (paragraph.equals(endParagraph)) {\n return;\n }\n this.getNextParagraphForCharacterFormatting(paragraph, start, end, property, value, update);\n };\n /**\n * Toggles the bold property of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleBold = function () {\n if ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) {\n return;\n }\n var value = this.getCurrentSelectionValue('bold');\n this.selection.characterFormat.bold = value;\n };\n /**\n * Toggles the bold property of selected contents.\n *\n * @returns {void}\n */\n Editor.prototype.toggleItalic = function () {\n if ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) {\n return;\n }\n var value = this.getCurrentSelectionValue('italic');\n this.selection.characterFormat.italic = value;\n };\n /**\n * Change the selected text to uppercase.\n * @private\n */\n Editor.prototype.changeCase = function (property) {\n if (this.selection.isEmpty || ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode())) {\n return;\n }\n // this.selection.characterFormat.allCaps = (property === \"Uppercase\") ? true : false;\n this.initHistory(property);\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.selection;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n this.changeSelectedTextCase(selection, startPosition, endPosition, property);\n this.reLayout(selection);\n };\n /**\n * Change the selected text case.\n * @private\n */\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeSelectedTextCase = function (selection, startPosition, endPosition, property, removedTextNodes) {\n var blockInfo = this.selection.getParagraphInfo(startPosition);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(startPosition, true);\n }\n }\n var isRevert = this.editorHistory.isUndoing;\n if (isRevert && !isNullOrUndefined(removedTextNodes) && removedTextNodes.length > 0) {\n this.removedTextNodes = removedTextNodes;\n }\n var endPos = endPosition.selection.endOffset;\n this.changeTextCase(startPosition.paragraph, selection, startPosition, endPosition, property, isRevert);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (endPosition.selection.endOffset !== endPos) {\n endPosition = selection.getTextPosBasedOnLogicalIndex(endPos);\n }\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(endPosition, false);\n }\n selection.selectPosition(startPosition, endPosition);\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeTextCase = function (para, selection, startPosition, endPosition, property, isRevert) {\n if (startPosition.paragraph.isInsideTable && (!endPosition.paragraph.isInsideTable\n || startPosition.paragraph.associatedCell !== endPosition.paragraph.associatedCell\n || selection.isCellSelected(startPosition.paragraph.associatedCell, startPosition, endPosition))) {\n var tableCell = void 0;\n startPosition.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(startPosition, true);\n }\n tableCell = startPosition.paragraph.associatedCell;\n this.changeCaseParaFormatInCell(tableCell, startPosition, endPosition, property, isRevert);\n var table = tableCell.ownerTable;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n this.changeCaseParagraph(para, selection, startPosition, endPosition, property, isRevert);\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParagraph = function (para, selection, startPos, endPos, property, isRevert) {\n para = para.combineWidget(this.owner.viewer);\n var startOffsetVal = 0;\n var len = selection.getParagraphLength(para);\n var startLine = para.childWidgets.indexOf(startPos.currentWidget) !== -1 ?\n para.childWidgets.indexOf(startPos.currentWidget) : 0;\n var endOffsetVal = endPos.offset;\n var endLine = para.childWidgets.indexOf(endPos.currentWidget) !== -1 ?\n para.childWidgets.indexOf(endPos.currentWidget) : para.childWidgets.length - 1;\n if (!isNullOrUndefined(selection)) {\n if (para === startPos.paragraph) {\n startOffsetVal = startPos.offset;\n }\n }\n if (!para.equals(endPos.paragraph)) {\n endOffsetVal = len;\n }\n // let count: number = 0;\n for (var i = startLine; i <= endLine; i++) {\n this.checkLastLetterSpaceDot = '';\n this.checkLastLetterSpace = '';\n var line = para.childWidgets[i];\n if (i !== startLine) {\n startOffsetVal = selection.getStartLineOffset(line);\n }\n if (line === endPos.currentWidget) {\n endOffsetVal = endPos.offset;\n }\n else {\n endOffsetVal = selection.getLineLength(line);\n }\n var textCount = 0;\n var isIterationStarted = true;\n var endElementBox = undefined;\n var childIndex = -1;\n var isIncreaseIteration = true;\n /* eslint-disable-next-line max-len */\n for (var j = 0; j < line.children.length; isIncreaseIteration ? j++ : j--) {\n var child = line.children[j];\n var isPreviousTextElementBox = false;\n if (j === 0 || j > 0 && line.children[j - 1] instanceof TextElementBox) {\n isPreviousTextElementBox = true;\n if (j > 0) {\n var textElement = line.children[j - 1];\n this.checkLastLetterSpace = textElement.text.substr(-1);\n this.checkLastLetterSpaceDot = textElement.text.substr(-2);\n }\n }\n isIterationStarted = false;\n if (child instanceof ListTextElementBox) {\n continue;\n }\n if (endElementBox === child) {\n endElementBox = undefined;\n j = childIndex;\n childIndex = -1;\n isIncreaseIteration = true;\n }\n if (startOffsetVal >= textCount + child.length) {\n textCount += child.length;\n continue;\n }\n var startIndex = 0;\n if (startOffsetVal > textCount) {\n startIndex = startOffsetVal - textCount;\n }\n var endIndex = endOffsetVal - textCount;\n var inlineLength = child.length;\n if (endIndex > inlineLength) {\n endIndex = inlineLength;\n }\n var index = this.changeCaseInline(child, selection, startIndex, endIndex, property, isRevert, isPreviousTextElementBox);\n j += index;\n if (endOffsetVal <= textCount + inlineLength) {\n break;\n }\n textCount += inlineLength;\n }\n }\n var endPara = endPos.paragraph;\n this.documentHelper.layout.reLayoutParagraph(para, startLine, 0);\n if (para.equals(endPara)) {\n return;\n }\n this.changeCaseNextBlock(para, startPos, endPos, property, isRevert);\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseInline = function (inline, selection, startIndex, endIndex, property, isRevert, isPreviousTextElementBox) {\n if (inline instanceof TextElementBox) {\n if (startIndex === 0 && endIndex === inline.length) {\n this.changeCaseInlineInternal(inline, selection, startIndex, endIndex, property, isRevert, isPreviousTextElementBox);\n }\n else {\n return this.changeCaseInlineInternal(inline, selection, startIndex, endIndex, property, isRevert, isPreviousTextElementBox);\n }\n }\n return 0;\n };\n Editor.prototype.addRemovedTextNodes = function (inline, newText) {\n if (inline instanceof TextElementBox) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n var span = this.editorHistory.currentBaseHistoryInfo.removedNodes[0];\n if (isNullOrUndefined(span)) {\n span = new TextElementBox();\n span.text = '';\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(span);\n }\n span.text += newText;\n span.isWidthUpdated = false;\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseInlineInternal = function (inlineObj, selection, startIndex, endIndex, property, isRevert, isPreviousTextElementBox) {\n var x = 0;\n var makeFirstLetterCapital = false;\n var index = inlineObj.line.children.indexOf(inlineObj);\n var paragraph = inlineObj.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(inlineObj.line);\n var textElement;\n inlineObj.isWidthUpdated = false;\n if (startIndex > 0) {\n var textToChange = inlineObj.text.substr(startIndex, endIndex - startIndex);\n this.addRemovedTextNodes(inlineObj, textToChange);\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inlineObj.characterFormat);\n textElement.line = inlineObj.line;\n //Change the text case\n if (property === 'CapitalizeEachWord') {\n var firstLetter = inlineObj.text.substr(startIndex - 1, 1);\n makeFirstLetterCapital = firstLetter === ' ';\n }\n if (property === 'SentenceCase') {\n var firstLetter = inlineObj.text.substr(startIndex - 2, 2);\n makeFirstLetterCapital = firstLetter === '. ';\n }\n textElement.characterFormat.allCaps = (property === \"Uppercase\") ? isRevert ? false : true : false;\n textElement.text = this.getChangeCaseText(textToChange, property, isRevert, makeFirstLetterCapital);\n textElement.isRightToLeft = inlineObj.isRightToLeft;\n index++;\n inlineObj.line.children.splice(index, 0, textElement);\n x++;\n }\n if (endIndex < inlineObj.length) {\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inlineObj.characterFormat);\n textElement.text = inlineObj.text.substring(endIndex);\n textElement.line = inlineObj.line;\n textElement.isRightToLeft = inlineObj.isRightToLeft;\n index++;\n inlineObj.line.children.splice(index, 0, textElement);\n x++;\n }\n var textElementBox = inlineObj;\n if (startIndex === 0) {\n var newText = textElementBox.text.substr(0, endIndex);\n this.addRemovedTextNodes(inlineObj, newText);\n //Change the text case\n if (property === 'SentenceCase') {\n if (this.checkLastLetterSpaceDot === '. ') {\n makeFirstLetterCapital = true;\n }\n else if (lineIndex === 0 && this.checkLastLetterSpaceDot === '') {\n if (isPreviousTextElementBox) {\n var line = paragraph.childWidgets[0];\n var element = line.children[0];\n makeFirstLetterCapital = element === textElementBox;\n }\n else {\n makeFirstLetterCapital = true;\n }\n }\n this.checkLastLetterSpaceDot = textElementBox.text.substr(-2);\n }\n else if (property == 'CapitalizeEachWord') {\n if (isPreviousTextElementBox) {\n makeFirstLetterCapital = selection.getIndexInInline(inlineObj) === 0 || this.checkLastLetterSpace === ' ';\n }\n else {\n makeFirstLetterCapital = true;\n }\n this.checkLastLetterSpace = textElementBox.text.charAt(textElementBox.length - 1);\n }\n textElementBox.characterFormat.allCaps = (property === \"Uppercase\") ? isRevert ? false : true : false;\n textElementBox.text = this.getChangeCaseText(newText, property, isRevert, makeFirstLetterCapital);\n }\n else {\n var preText = textElementBox.text.substr(0, startIndex);\n textElementBox.text = preText;\n }\n return x;\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseNextBlock = function (block, start, end, property, isRevert) {\n block = this.getNextBlockForChangeCase(block, start, end, property, isRevert);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n this.changeCaseParagraph(block, this.documentHelper.selection, start, end, property, isRevert);\n }\n else {\n this.changeCaseForTable(0, block, this.documentHelper.selection, start, end, property, isRevert);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.getNextBlockForChangeCase = function (block, start, end, property, isRevert) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.documentHelper.selection.getNextRenderedBlock(block);\n return block;\n };\n Editor.prototype.getChangeCaseText = function (input, property, isRevert, makeFirstLetterCapital) {\n if (isRevert) {\n if (!isNullOrUndefined(this.removedTextNodes) && this.removedTextNodes.length > 0) {\n var textElement = this.removedTextNodes[0];\n var oldText = textElement.text.substr(0, input.length);\n textElement.text = textElement.text.substr(oldText.length, textElement.length - oldText.length);\n input = oldText;\n if (textElement.text === '') {\n this.removedTextNodes.splice(0, 1);\n }\n }\n }\n else {\n switch (property) {\n case 'SentenceCase':\n input = this.sentencecase(input, makeFirstLetterCapital);\n break;\n case 'Uppercase':\n input = input.toUpperCase();\n break;\n case 'Lowercase':\n input = input.toLowerCase();\n break;\n case 'CapitalizeEachWord':\n input = this.capitalizeFirst(input, makeFirstLetterCapital);\n break;\n case 'ToggleCase':\n input = this.togglecase(input);\n break;\n default:\n break;\n }\n }\n return input;\n };\n //Change text into capitalize each word\n Editor.prototype.capitalizeFirst = function (inputString, makeFirstLetterCapital) {\n var words = inputString.split(/[^\\w]+/g);\n var capitalizedWords = words.map(function (word, index) {\n if (index === 0) {\n return makeFirstLetterCapital ? word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() : word.toLowerCase();\n }\n return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n });\n var specialChars = inputString.split(/\\w+/).filter(Boolean);\n var resultArray = [];\n for (var i = 0; i < Math.max(capitalizedWords.length, specialChars.length); i++) {\n if (capitalizedWords[i]) {\n resultArray.push(capitalizedWords[i]);\n }\n if (specialChars[i]) {\n resultArray.push(specialChars[i]);\n }\n }\n var resultString = resultArray.join('');\n return resultString;\n };\n //change text to sentence case\n Editor.prototype.sentencecase = function (value, makeFirstLetterCapital) {\n var sentences = value.split('. ');\n var capitalizedSentences = sentences.map(function (sentence, index) {\n if (index === 0) {\n return makeFirstLetterCapital ? sentence.charAt(0).toUpperCase() + sentence.slice(1).toLowerCase() : sentence.toLowerCase();\n }\n return sentence.charAt(0).toUpperCase() + sentence.slice(1).toLowerCase();\n });\n var resultString = capitalizedSentences.join('. ');\n return resultString;\n };\n //Change text to toggle case\n Editor.prototype.togglecase = function (value) {\n var text = '';\n var toggle = value.split('').map(function (char) {\n if (char === char.toLowerCase()) {\n return char.toUpperCase();\n }\n else {\n return char.toLowerCase();\n }\n });\n text = toggle.join('');\n return text;\n };\n // Table\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForTable = function (indexToStart, tableWidget, selection, startPos, endPos, property, isRevert) {\n tableWidget = tableWidget.combineWidget(this.owner.viewer);\n for (var i = indexToStart; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.changeCaseForSelectedCell(row.childWidgets[j], selection, property, isRevert);\n }\n if (endPos.paragraph.isInsideTable && selection.containsRow(row, endPos.paragraph.associatedCell)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(tableWidget.index, tableWidget.containerWidget, tableWidget, false);\n return;\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(tableWidget.index, tableWidget.containerWidget, tableWidget, false);\n this.changeCaseNextBlock(tableWidget, startPos, endPos, property, isRevert);\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForSelectedCell = function (cell, selection, property, isRevert) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.changeCaseForSelectedPara(block, selection, property, isRevert);\n }\n else {\n this.changeCaseForSelTable(block, selection, property, isRevert);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForSelectedPara = function (paragraph, selection, property, isRevert) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var line = paragraph.childWidgets[i];\n var firstLetter = '';\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n element.characterFormat.allCaps = (property === \"Uppercase\") ? isRevert ? false : true : false;\n var makeFirstLetterCapital = false;\n if (!isNullOrUndefined(element) && element instanceof TextElementBox) {\n this.addRemovedTextNodes(element, element.text);\n if (property === 'CapitalizeEachWord') {\n makeFirstLetterCapital = j === 0 || firstLetter === ' ';\n firstLetter = element.text.substr(element.length - 1, 1);\n }\n else if (property === 'SentenceCase') {\n makeFirstLetterCapital = (element.text.substr(element.length - 2, 2) === '. ') || j === 0;\n }\n element.text = this.getChangeCaseText(element.text, property, isRevert, makeFirstLetterCapital);\n element.isWidthUpdated = false;\n }\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseForSelTable = function (tableWidget, selection, property, isRevert) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.changeCaseForSelectedCell(row.childWidgets[j], selection, property, isRevert);\n }\n }\n };\n // Cell\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaFormatInCell = function (tableCell, startPos, endPos, property, isRevert) {\n var selection = this.documentHelper.selection;\n if (endPos.paragraph.isInsideTable) {\n var cellContainer = selection.getContainerCellOf(tableCell, endPos.paragraph.associatedCell);\n if (cellContainer.ownerTable.contains(endPos.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(tableCell, cellContainer);\n var endCell = selection.getSelectedCell(endPos.paragraph.associatedCell, cellContainer);\n if (selection.containsCell(cellContainer, endPos.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(cellContainer, startPos, endPos)) {\n this.changeCaseParaForCellInternal(cellContainer, selection, property, isRevert);\n }\n else {\n if (startCell === cellContainer) {\n this.changeCaseParagraph(startPos.paragraph, selection, startPos, endPos, property, isRevert);\n }\n else {\n this.changeCaseParaForRow(startCell.ownerRow, selection, startPos, endPos, property, isRevert);\n }\n }\n }\n else {\n //Change case of other selected cells in the current table.\n this.changeCaseParaForTableCell(cellContainer.ownerTable, cellContainer, endCell, property, isRevert);\n }\n }\n else {\n this.changeCaseParaForRow(cellContainer.ownerRow, selection, startPos, endPos, property, isRevert);\n }\n }\n else {\n var wCell = selection.getContainerCell(tableCell);\n this.changeCaseParaForRow(wCell.ownerRow, selection, startPos, endPos, property, isRevert);\n }\n };\n // Table\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaForTableCell = function (tableWidget, startCell, endCell, property, isRevert) {\n var selection = this.documentHelper.selection;\n var cellStartValue = selection.getCellLeft(startCell.ownerRow, startCell);\n var cellEndValue = cellStartValue + startCell.cellFormat.cellWidth;\n var cellEndLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var cellEndRight = cellEndLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(cellStartValue, cellEndValue, cellEndLeft, cellEndRight);\n cellStartValue = cellInfo.start;\n cellEndValue = cellInfo.end;\n var count = tableWidget.childWidgets.indexOf(endCell.ownerRow);\n for (var m = tableWidget.childWidgets.indexOf(startCell.ownerRow); m <= count; m++) {\n var row = tableWidget.childWidgets[m];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (Math.round(cellStartValue) <= Math.round(left) && Math.round(left) < Math.round(cellEndValue)) {\n this.changeCaseParaForCellInternal(row.childWidgets[j], selection, property, isRevert);\n }\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaForCellInternal = function (tableCell, selection, property, isRevert) {\n for (var i = 0; i < tableCell.childWidgets.length; i++) {\n var childBlock = tableCell.childWidgets[i];\n if (childBlock instanceof ParagraphWidget) {\n this.changeCaseForSelectedPara(childBlock, selection, property, isRevert);\n }\n else {\n this.changeCaseParaFormatTableInternal(childBlock, selection, property, isRevert);\n }\n }\n };\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaFormatTableInternal = function (table, selection, property, isRevert) {\n for (var x = 0; x < table.childWidgets.length; x++) {\n var row = table.childWidgets[x];\n for (var y = 0; y < row.childWidgets.length; y++) {\n this.changeCaseParaForCellInternal(row.childWidgets[y], selection, property, isRevert);\n }\n }\n };\n // Row\n /* eslint-disable-next-line max-len */\n Editor.prototype.changeCaseParaForRow = function (wRow, selection, start, end, property, isRevert) {\n for (var i = wRow.rowIndex; i < wRow.ownerTable.childWidgets.length; i++) {\n var row = wRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.changeCaseParaForCellInternal(row.childWidgets[j], selection, property, isRevert);\n }\n if (end.paragraph.isInsideTable && this.documentHelper.selection.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n this.changeCaseNextBlock(wRow.ownerTable, start, end, property, isRevert);\n };\n /**\n * Toggles the all Caps formatting for the selected content.\n *\n * @returns {void}\n */\n Editor.prototype.toggleAllCaps = function () {\n if (this.documentHelper.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) {\n return;\n }\n var value = this.getCurrentSelectionValue('allCaps');\n this.selection.characterFormat.allCaps = value;\n };\n Editor.prototype.toggleChangeCase = function () {\n var casings = ['Uppercase', 'Lowercase', 'CapitalizeEachWord'];\n this.casingIndex++;\n if (this.casingIndex >= casings.length) {\n this.casingIndex = 0;\n }\n return casings[this.casingIndex];\n };\n Editor.prototype.getCurrentSelectionValue = function (property) {\n var value = false;\n if ((property === 'bold' || property === 'italic')) {\n var characterFormat = this.getSelectedCharacterFormat();\n if (property === 'bold') {\n value = !(characterFormat.bold);\n }\n if (property === 'italic') {\n value = !(characterFormat.italic);\n }\n }\n return value;\n };\n Editor.prototype.getSelectedCharacterFormat = function () {\n var index = 0;\n var start = this.selection.start;\n if (!this.selection.isForward) {\n start = this.selection.end;\n }\n var lineWidget = start.currentWidget;\n var inlineObj = lineWidget.getInline(start.offset, index);\n var inline = inlineObj.element;\n // inline.ownerBase\n index = inlineObj.index;\n var characterFormat = lineWidget.paragraph.characterFormat;\n if (!isNullOrUndefined(inline)) {\n if (this.selection.isEmpty && this.selection.contextType === 'List') {\n var listLevel = this.selection.getListLevel(this.selection.start.paragraph);\n if (listLevel.characterFormat.uniqueCharacterFormat) {\n characterFormat = listLevel.characterFormat;\n }\n }\n else if (!this.selection.isEmpty && index === inline.length) {\n characterFormat = isNullOrUndefined(inline.nextNode) ? lineWidget.paragraph.characterFormat\n : inline.nextNode.characterFormat;\n }\n else {\n characterFormat = inline.characterFormat;\n }\n }\n return characterFormat;\n };\n /**\n * Toggles the underline property of selected contents.\n *\n * @param underline Specify the underline to be toggled (default: Single).\n * @returns {void}\n */\n Editor.prototype.toggleUnderline = function (underline) {\n if ((this.owner.isReadOnlyMode || this.restrictFormatting) && !this.selection.isInlineFormFillMode()) {\n return;\n }\n this.updateProperty(1, underline);\n };\n /**\n * Toggles the strike through property of selected contents.\n *\n * @param {Strikethrough} strikethrough Specify the strike through to be toggled (default: SingleStrike).\n * @returns {void}\n */\n Editor.prototype.toggleStrikethrough = function (strikethrough) {\n if (!this.owner.isReadOnlyMode || this.selection.isInlineFormFillMode()) {\n var value = void 0;\n if (isNullOrUndefined(strikethrough)) {\n value = this.selection.characterFormat.strikethrough === 'SingleStrike' ? 'None' : 'SingleStrike';\n }\n else {\n value = strikethrough;\n }\n this.selection.characterFormat.strikethrough = value;\n }\n };\n Editor.prototype.updateFontSize = function (format, value) {\n if (typeof (value) === 'number' && !(value < 0 && format.fontSize === 1)) {\n return format.fontSize + value;\n }\n var fontsizeCollection = [8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 26, 28, 36, 48, 72];\n if (typeof (value) === 'string' && value === 'increment') {\n if (format.fontSize < 8) {\n return format.fontSize + 1;\n }\n else if (format.fontSize >= 72 && format.fontSize < 80) {\n return 80;\n }\n else if (format.fontSize >= 80) {\n return format.fontSize + 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize < fontsizeCollection[i]) {\n return fontsizeCollection[i];\n }\n }\n }\n }\n else if (typeof (value) === 'string' && value === 'decrement' && format.fontSize > 1) {\n if (format.fontSize <= 8) {\n return format.fontSize - 1;\n }\n else if (format.fontSize > 72 && format.fontSize <= 80) {\n return 72;\n }\n else if (format.fontSize > 80) {\n return format.fontSize - 10;\n }\n else {\n for (var i = 0; i < fontsizeCollection.length; i++) {\n if (format.fontSize <= fontsizeCollection[i]) {\n return fontsizeCollection[i - 1];\n }\n }\n }\n }\n return format.fontSize;\n };\n // Inline\n Editor.prototype.applyCharFormatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n if (startIndex === 0 && endIndex === inline.length) {\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n return 0;\n }\n else if (inline instanceof TextElementBox) {\n return this.formatInline(inline, selection, startIndex, endIndex, property, value, update);\n }\n return 0;\n };\n Editor.prototype.formatInline = function (inline, selection, startIndex, endIndex, property, value, update) {\n var x = 0;\n var node = inline;\n var index = inline.line.children.indexOf(node);\n var paragraph = inline.paragraph;\n var textElement;\n var indexCountForRevision = 0;\n if (startIndex > 0) {\n indexCountForRevision += 1;\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n if (!isNullOrUndefined(inline.contentControlProperties)) {\n textElement.contentControlProperties = inline.contentControlProperties;\n }\n textElement.line = inline.line;\n textElement.text = inline.text.substr(startIndex, endIndex - startIndex);\n textElement.isRightToLeft = inline.isRightToLeft;\n this.applyCharFormatValue(textElement.characterFormat, property, value, update);\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n this.updateRevisionForFormattedContent(inline, textElement, indexCountForRevision);\n // this.addToLinkedFields(span); \n }\n if (endIndex < node.length) {\n indexCountForRevision += 1;\n textElement = new TextElementBox();\n textElement.characterFormat.copyFormat(inline.characterFormat);\n if (!isNullOrUndefined(inline.contentControlProperties)) {\n textElement.contentControlProperties = inline.contentControlProperties;\n }\n textElement.text = node.text.substring(endIndex);\n textElement.line = inline.line;\n textElement.isRightToLeft = inline.isRightToLeft;\n index++;\n node.line.children.splice(index, 0, textElement);\n x++;\n this.updateRevisionForFormattedContent(inline, textElement, indexCountForRevision);\n // this.addToLinkedFields(span); \n }\n if (startIndex === 0) {\n inline.text = inline.text.substr(0, endIndex);\n this.applyCharFormatValue(inline.characterFormat, property, value, update);\n }\n else {\n inline.text = inline.text.substr(0, startIndex);\n }\n return x;\n };\n Editor.prototype.updateRevisionForFormattedContent = function (inline, tempSpan, indexCount) {\n for (var i = 0; i < inline.revisions.length; i++) {\n var currentRevision = inline.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(inline) + indexCount;\n tempSpan.revisions.splice(0, 0, currentRevision);\n currentRevision.range.splice(rangeIndex, 0, tempSpan);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n };\n // Cell\n Editor.prototype.applyCharFormatCell = function (cell, selection, start, end, property, value, update) {\n if (end.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, containerCell);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n value = this.getCharacterFormatValueOfCell(cell, selection, value, property);\n this.applyCharFormatForSelectedCell(containerCell, selection, property, value, update);\n }\n else {\n if (startCell === containerCell) {\n this.applyCharFormat(start.paragraph, selection, start, end, property, value, update);\n }\n else {\n this.applyCharFormatRow(startCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n }\n else { //Format other selected cells in current table.\n this.applyCharFormatForTableCell(containerCell.ownerTable, selection, containerCell, endCell, property, value, update);\n }\n }\n else {\n this.applyCharFormatRow(containerCell.ownerRow, selection, start, end, property, value, update);\n }\n }\n else {\n var tableCell = selection.getContainerCell(cell);\n this.applyCharFormatRow(tableCell.ownerRow, selection, start, end, property, value, update);\n }\n };\n Editor.prototype.applyCharFormatForSelectedCell = function (cell, selection, property, value, update) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n this.applyCharFormatForSelectedPara(block, selection, property, value, update);\n }\n else {\n this.applyCharFormatForSelTable(block, selection, property, value, update);\n }\n }\n };\n // Row\n Editor.prototype.applyCharFormatRow = function (row, selection, start, end, property, value, update) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[0], selection, value, property);\n this.applyCharFormatForTable(row.rowIndex, row.ownerTable, selection, start, end, property, value, update);\n };\n // Table\n Editor.prototype.applyCharFormatForTable = function (index, table, selection, start, end, property, value, update) {\n table = table.combineWidget(this.owner.viewer);\n for (var i = index; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForCharacterFormatting(table, start, end, property, value, update);\n };\n Editor.prototype.applyCharFormatForSelTable = function (tableWidget, selection, property, value, update) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n };\n Editor.prototype.applyCharFormatForTableCell = function (table, selection, startCell, endCell, property, value, update) {\n var startCellLeft = selection.getCellLeft(startCell.ownerRow, startCell);\n var startCellRight = startCellLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startCellLeft, startCellRight, endCellLeft, endCellRight);\n startCellLeft = cellInfo.start;\n startCellRight = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var i = table.childWidgets.indexOf(startCell.ownerRow); i <= count; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (HelperMethods.round(startCellLeft, 2) <= HelperMethods.round(left, 2) &&\n HelperMethods.round(left, 2) < HelperMethods.round(startCellRight, 2)) {\n if (!isStarted) {\n value = this.getCharacterFormatValueOfCell(row.childWidgets[j], selection, value, property);\n isStarted = true;\n }\n this.applyCharFormatForSelectedCell(row.childWidgets[j], selection, property, value, update);\n }\n }\n }\n };\n /**\n * private\n * @returns {CellInfo}\n */\n Editor.prototype.updateSelectedCellsInTable = function (start, end, endCellLeft, endCellRight) {\n var selection = this.documentHelper.selection;\n if (start > endCellLeft) {\n start = endCellLeft;\n }\n if (end < endCellRight) {\n end = endCellRight;\n }\n if (start > selection.upDownSelectionLength) {\n start = selection.upDownSelectionLength;\n }\n if (end < selection.upDownSelectionLength) {\n end = selection.upDownSelectionLength;\n }\n return { start: start, end: end };\n };\n Editor.prototype.getCharacterFormatValueOfCell = function (cell, selection, value, property) {\n if (typeof (value) === 'boolean' || (value === undefined && (property === 'bold' || property === 'italic'))) {\n var firstParagraph = selection.getFirstParagraph(cell);\n var format = firstParagraph.characterFormat;\n if (firstParagraph.childWidgets.length > 0 && firstParagraph.childWidgets[0].children.length > 0) {\n format = firstParagraph.childWidgets[0].children[0].characterFormat;\n }\n value = !format.getPropertyValue(property);\n }\n return value;\n };\n /**\n * Apply Character format for selection\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.applyCharFormatValueInternal = function (selection, format, property, value) {\n this.applyCharFormatValue(format, property, value, false);\n };\n Editor.prototype.copyInlineCharacterFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueCharacterFormat = sourceFormat.uniqueCharacterFormat;\n destFormat.baseCharStyle = sourceFormat.baseCharStyle;\n };\n Editor.prototype.applyCharFormatValue = function (format, property, value, update) {\n if (update && property === 'fontSize') {\n value = this.updateFontSize(format, value);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedProperties(format, property, value);\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = value;\n }\n if (value instanceof WCharacterFormat) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyInlineCharacterFormat(value, format);\n if (this.owner.enableCollaborativeEditing && format.ownerBase instanceof ElementBox) {\n this.editorHistory.currentBaseHistoryInfo.buildCharacterFormatOperation(format.ownerBase, format);\n }\n }\n else {\n format.copyFormat(value);\n }\n return;\n }\n if (this.isForHyperlinkFormat && this.owner.enableTrackChanges && format.ownerBase instanceof ElementBox) {\n var currentElement = format.ownerBase;\n var prevElement = currentElement.previousNode;\n if (isNullOrUndefined(prevElement)) {\n var paraWidget = currentElement.paragraph.previousWidget;\n if (!isNullOrUndefined(paraWidget) && !paraWidget.isEmpty()) {\n var lineWidget = paraWidget.lastChild;\n prevElement = lineWidget.children[lineWidget.children.length - 1];\n }\n }\n while (!isNullOrUndefined(prevElement) && !(prevElement instanceof TextElementBox)) {\n prevElement = prevElement.previousNode;\n }\n if (!isNullOrUndefined(prevElement) && prevElement.revisions.length > 0) {\n var currentRevision = prevElement.revisions[prevElement.revisions.length - 1];\n if ((property !== \"fontColor\" || currentElement.revisions.length === 0) && !this.isRevisionAlreadyIn(currentElement, currentRevision)) {\n currentElement.revisions.push(currentRevision);\n currentRevision.range.push(currentElement);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n }\n else {\n var currentRevision = currentElement.revisions[currentElement.revisions.length - 1];\n if ((property !== \"fontColor\" || currentElement.revisions.length === 0) && !isNullOrUndefined(currentRevision) && currentRevision.range.length > 0) {\n currentElement.revisions.splice(currentElement.revisions.length - 1, 1);\n var rangeIndex = currentRevision.range.indexOf(currentElement);\n currentRevision.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n }\n if (property !== \"fontColor\" || currentElement.revisions.length === 0) {\n this.insertRevision(currentElement, 'Insertion');\n }\n }\n }\n if (isNullOrUndefined(value) && isNullOrUndefined(property)) {\n format.clearFormat();\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = format[property];\n }\n return;\n }\n if (property === 'bold') {\n format.bold = value;\n }\n else if (property === 'italic') {\n format.italic = value;\n }\n else if (property === 'fontColor') {\n format.fontColor = value;\n }\n else if (property === 'fontFamily') {\n format.fontFamily = value;\n format.fontFamilyAscii = value;\n format.fontFamilyFarEast = value;\n format.fontFamilyNonFarEast = value;\n format.fontFamilyBidi = value;\n }\n else if (property === 'fontSize') {\n format.fontSize = value;\n }\n else if (property === 'highlightColor') {\n format.highlightColor = value;\n }\n else if (property === 'baselineAlignment') {\n format.baselineAlignment = value;\n }\n else if (property === 'strikethrough') {\n format.strikethrough = value;\n }\n else if (property === 'underline') {\n format.underline = value;\n }\n else if (property === 'styleName') {\n format.baseCharStyle = value;\n }\n else if (property === 'allCaps') {\n format.allCaps = value;\n }\n if (property === 'fontColor') {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = format.fontColor;\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.updateStyleObject = function (styleData) {\n var styles = new WStyles();\n var keyIndex = this.owner.parser.keywordIndex;\n this.owner.parser.keywordIndex = 1;\n var isRemoteAction = this.owner.editor.isRemoteAction;\n this.owner.editor.isRemoteAction = true;\n this.owner.parser.parseStyles(styleData, styles);\n for (var i = 0; i < styles.length; i++) {\n var style = styles.getItem(i);\n var styleInCollection = this.owner.documentHelper.styles.findByName(style.name);\n if (!isNullOrUndefined(styleData[abstractListsProperty[1]])) {\n this.owner.parser.parseAbstractList(styleData, this.owner.documentHelper.abstractLists);\n if (!isNullOrUndefined(styleData[listsProperty[1]])) {\n this.owner.parser.parseList(styleData, this.owner.documentHelper.lists);\n }\n }\n if (!isNullOrUndefined(styleInCollection)) {\n if (this.owner.editorHistoryModule && (this.owner.editorHistoryModule.isUndoing || this.owner.editorHistoryModule.isRedoing) && i === 0) {\n if (this.owner.editorHistoryModule.currentBaseHistoryInfo && this.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'ModifyStyle') {\n var listId = styleInCollection instanceof WParagraphStyle ? styleInCollection.paragraphFormat.listFormat.listId : -1;\n var styleObject = this.owner.getStyleObject(styleInCollection, listId);\n if (!isNullOrUndefined(styleData['isNew'])) {\n styleObject['isNew'] = styleData['isNew'];\n }\n this.owner.editorHistoryModule.currentBaseHistoryInfo.modifiedProperties.push(styleObject);\n }\n }\n if (styleData['isNew'] && this.owner.editorHistoryModule.isUndoing) {\n this.owner.documentHelper.styles.remove(styleInCollection);\n }\n else {\n this.owner.updateStyle(styleInCollection, style);\n }\n }\n else {\n if (this.owner.editorHistory.isRedoing) {\n var listId = style instanceof WParagraphStyle ? style.paragraphFormat.listFormat.listId : -1;\n var styleObject = this.documentHelper.owner.getStyleObject(style, listId);\n styleObject[\"isNew\"] = true;\n this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.modifiedProperties.push(styleObject);\n }\n this.owner.documentHelper.styles.push(style);\n }\n }\n this.owner.editor.isRemoteAction = isRemoteAction;\n if (styles.length > 0) {\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.layoutWholeDocument();\n this.owner.isShiftingEnabled = false;\n }\n this.owner.parser.keywordIndex = keyIndex;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onImageFormat = function (elementBox, width, height, alternateText) {\n var modifiedFormat = new ImageSizeInfo(elementBox);\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ImageResizing');\n this.editorHistory.currentBaseHistoryInfo.modifiedProperties.push(modifiedFormat);\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Image;\n this.editorHistory.currentBaseHistoryInfo.insertedData = { width: HelperMethods.convertPixelToPoint(width), height: HelperMethods.convertPixelToPoint(height), alternativeText: alternateText };\n }\n this.setOffsetValue(this.selection);\n elementBox.width = width;\n elementBox.height = height;\n elementBox.alternateText = alternateText;\n this.documentHelper.layout.reLayoutParagraph(elementBox.line.paragraph, elementBox.line.indexInOwner, 0);\n this.reLayout(this.selection, false);\n if (this.documentHelper.owner.imageResizerModule && !this.isRemoteAction) {\n this.documentHelper.owner.imageResizerModule.positionImageResizer(elementBox);\n }\n };\n /**\n * Toggles the text alignment of selected paragraphs.\n *\n * @param {TextAlignment} textAlignment Specifies the text alignment.\n * @returns {void}\n */\n Editor.prototype.toggleTextAlignment = function (textAlignment) {\n if ((this.documentHelper.owner.isReadOnlyMode && !this.selection.isInlineFormFillMode()) || !this.documentHelper.owner.isDocumentLoaded) {\n return;\n }\n // Toggle performed based on current selection format similar to MS word behavior.\n if (!isNullOrUndefined(this.documentHelper.selection.paragraphFormat.textAlignment) && this.documentHelper.selection.paragraphFormat.textAlignment === textAlignment) {\n if (textAlignment === 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Justify', false, true);\n }\n else {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n }\n }\n else {\n this.onApplyParagraphFormat('textAlignment', textAlignment, false, true);\n }\n };\n /**\n * @private\n */\n Editor.prototype.setPreviousBlockToLayout = function () {\n var startPosition = this.documentHelper.selection.start;\n if (!this.documentHelper.selection.isForward) {\n startPosition = this.documentHelper.selection.end;\n }\n var startParagraph = startPosition.paragraph;\n if (startParagraph.paragraphFormat.keepWithNext) {\n var bodyWidget = startParagraph.bodyWidget;\n if (!isNullOrUndefined(bodyWidget) && bodyWidget instanceof BodyWidget && bodyWidget.page) {\n var previousPage = bodyWidget.page.previousPage;\n if (previousPage) {\n this.previousBlockToLayout = previousPage.bodyWidgets[0].lastChild;\n }\n }\n }\n };\n /**\n * Apply borders for selected paragraph borders\n * @private\n */\n Editor.prototype.applyParagraphBorders = function (property, bordersType, value) {\n var borders = new WBorder();\n switch (property) {\n case 'color':\n borders.color = value;\n break;\n case 'lineWidth':\n borders.lineWidth = value;\n break;\n case 'lineStyle':\n borders.lineStyle = value;\n break;\n case 'shadow':\n borders.shadow = value;\n break;\n case 'space':\n borders.space = value;\n break;\n }\n this.onApplyParagraphFormat(bordersType, borders, false, false);\n };\n /**\n * @private\n */\n Editor.prototype.applyRulerMarkerValues = function (type, initialValue, finalValue) {\n var differenceValue = HelperMethods.convertPixelToPoint(finalValue - initialValue) / this.owner.zoomFactor;\n if (type === 'firstLineIndent') {\n var currentValue = this.owner.selectionModule.start.paragraph.paragraphFormat.firstLineIndent;\n this.onApplyParagraphFormat(type, currentValue + differenceValue, false, false);\n }\n else if (type === 'hangingIndent') {\n var currentValue = this.owner.selectionModule.start.paragraph.paragraphFormat.firstLineIndent;\n this.onApplyParagraphFormat('firstLineIndent', currentValue - differenceValue, false, false);\n var leftIndentCurrentValue = this.owner.selectionModule.start.paragraph.paragraphFormat.leftIndent + currentValue;\n currentValue = currentValue - differenceValue;\n this.onApplyParagraphFormat('leftIndent', leftIndentCurrentValue - currentValue, false, false, true);\n }\n else if (type === 'leftIndent') {\n var currentValue = this.owner.selectionModule.start.paragraph.paragraphFormat.leftIndent;\n this.onApplyParagraphFormat(type, currentValue + differenceValue, false, false);\n }\n else if (type === 'rightIndent') {\n var currentValue = this.owner.selectionModule.start.paragraph.paragraphFormat.rightIndent;\n this.onApplyParagraphFormat(type, currentValue + differenceValue, false, false);\n }\n };\n /**\n * Applies paragraph format for the selection ranges.\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @param {boolean} isSelectionChanged - Specifies the selection change.\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyParagraphFormat = function (property, value, update, isSelectionChanged, isSkipPositionCheck) {\n var allowFormatting = this.documentHelper.isFormFillProtectedMode\n && this.documentHelper.selection.isInlineFormFillMode() && this.allowFormattingInFormFields(property);\n if (this.restrictFormatting && !allowFormatting) {\n return;\n }\n this.setPreviousBlockToLayout();\n var action = property === 'bidi' ? 'ParagraphBidi' : (property[0].toUpperCase() + property.slice(1));\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n var currentPara = selection.start.paragraph;\n var isFirstParaForList = false;\n if (!selection.isForward) {\n currentPara = selection.end.paragraph;\n }\n if (property == 'leftIndent') {\n isFirstParaForList = this.isFirstParaForList(selection, currentPara);\n }\n // To stop the indentation when the paragraph x position is at the clientArea's x position\n if (value <= 0 && property == 'leftIndent' && !isSkipPositionCheck) {\n var x = HelperMethods.convertPointToPixel(value);\n if ((currentPara.x + x) < this.viewer.clientArea.x && !currentPara.paragraphFormat.bidi) {\n this.documentHelper.owner.isShiftingEnabled = false;\n return;\n }\n }\n this.initHistory(action);\n if ((this.owner.isReadOnlyMode && !allowFormatting) || !this.owner.isDocumentLoaded) {\n return;\n }\n if (property === 'leftIndent') {\n if (!isNullOrUndefined(selection.paragraphFormat.listId) && selection.paragraphFormat.listId !== -1 && update) {\n if (isFirstParaForList) {\n this.updateListLevelIndent(value, currentPara);\n }\n else {\n this.updateListLevel(value > 0);\n }\n return;\n }\n }\n var isSkipSelection = !((value instanceof WCharacterStyle) && property == 'styleName' && selection.isEmpty);\n if (isSkipSelection && selection.isEmpty) {\n this.setOffsetValue(selection);\n var isBidiList = selection.paragraphFormat.bidi &&\n (property === 'listFormat' || selection.paragraphFormat.listId !== -1);\n if (!isBidiList) {\n this.documentHelper.layout.isBidiReLayout = true;\n }\n if (update && property === 'leftIndent') {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n var para = selection.start.paragraph;\n var layout = this.documentHelper.layout;\n // let footNoteWidgetsInfo: FootNoteWidgetsInfo = layout.getFootNodeWidgetsToShiftToPage(para);\n para = para.combineWidget(this.owner.viewer);\n this.applyParaFormatProperty(para, property, value, update);\n this.isMeasureParaWidth = true;\n this.layoutItemBlock(para, false);\n this.isMeasureParaWidth = false;\n // if (footNoteWidgetsInfo.footNoteWidgets.length > 0) {\n // layout.moveFootNotesToPage(footNoteWidgetsInfo.footNoteWidgets, footNoteWidgetsInfo.fromBodyWidget, footNoteWidgetsInfo.toBodyWidget);\n // layout.layoutfootNote(footNoteWidgetsInfo.toBodyWidget.page.footnoteWidget);\n // }\n }\n else {\n //Iterate and update formatting's. \n if (action !== 'ParagraphBidi') {\n this.setOffsetValue(selection);\n }\n this.updateSelectionParagraphFormatting(property, value, update);\n }\n this.reLayout(selection);\n };\n /**\n * Updates the indent value in the ListLevel\n * @param {Object} value - Specifies the value\n * @param {ParagraphWidget} currentPara - Specifies the selected paragraph\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListLevelIndent = function (value, currentPara) {\n var _a;\n var list = this.documentHelper.getListById(currentPara.paragraphFormat.listFormat.listId);\n var abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n var level;\n var property = undefined;\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n property = this.editorHistory.currentBaseHistoryInfo.action;\n }\n this.initHistory('List');\n if (value < 0) {\n if ((abstractList.levels[0].paragraphFormat.leftIndent + value) <= 0) {\n value = 18 - abstractList.levels[0].paragraphFormat.leftIndent;\n }\n }\n if (value == 0) {\n return;\n }\n for (var i = 0; i < abstractList.levels.length; i++) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForList(abstractList.levels[i]);\n }\n level = abstractList.levels[i];\n level.paragraphFormat.leftIndent += value;\n }\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && !isNullOrUndefined(property)) {\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = (_a = {}, _a[property.toString().charAt(0).toLowerCase() + property.toString().slice(1)] = value, _a[\"isFirstParaForList\"] = true, _a);\n }\n //To Do, Implement relayouting logic for this listStyle applied paragraphs alone.\n //And shift remaining elements without layouting again.\n //It will improve the performance in large size documents.\n //The same can be reused in style modifications.\n this.documentHelper.owner.isShiftingEnabled = true;\n this.layoutWholeDocument();\n this.documentHelper.owner.isShiftingEnabled = false;\n };\n /**\n * To check the current selection is first paragraph for list\n * @param {Selection} selection - Specifies the selection\n * @param {ParagraphWidget} currentPara - Specifies the current paragraph\n * @private\n * @returns {boolean}\n */\n Editor.prototype.isFirstParaForList = function (selection, currentPara) {\n var isFirstParaForList = false;\n if (!isNullOrUndefined(selection.paragraphFormat.listId) && selection.paragraphFormat.listId !== -1 && currentPara.paragraphFormat.listFormat.listLevelNumber === 0) {\n //Getting the previous paragraph with same listId\n var previousParagraph = this.updateWholeListItems(currentPara, true, selection.paragraphFormat.listId);\n if (isNullOrUndefined(previousParagraph)) {\n isFirstParaForList = true;\n }\n }\n return isFirstParaForList;\n };\n /**\n * Update the list level\n *\n * @param {boolean} increaseLevel - Specifies the increase level\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListLevel = function (increaseLevel) {\n // Increment or Decrement list level for Multilevel lists.\n var documentHelper = this.documentHelper;\n var listFormat = this.documentHelper.selection.start.paragraph.paragraphFormat.listFormat;\n var paragraphFormat = this.documentHelper.selection.start.paragraph.paragraphFormat;\n var list = documentHelper.getListById(paragraphFormat.listFormat.listId);\n var listLevel = documentHelper.layout.getListLevel(list, paragraphFormat.listFormat.listLevelNumber);\n var levelNumber;\n if (increaseLevel) {\n levelNumber = paragraphFormat.listFormat.listLevelNumber + 1;\n }\n else {\n levelNumber = paragraphFormat.listFormat.listLevelNumber - 1;\n }\n var nextListLevel = documentHelper.layout.getListLevel(list, levelNumber);\n if (!isNullOrUndefined(nextListLevel)) {\n this.onApplyListInternal(list, levelNumber);\n documentHelper.selection.start.updatePhysicalPosition(true);\n documentHelper.selection.end.updatePhysicalPosition(true);\n documentHelper.selection.updateCaretPosition();\n }\n };\n /**\n * Applies list\n *\n * @param {WList} list - Specified the list\n * @param {number} listLevelNumber - Specified the list level number\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyListInternal = function (list, listLevelNumber) {\n //let selection: Selection = this.documentHelper.selection;\n var listFormat = new WListFormat();\n if (!isNullOrUndefined(list) && listLevelNumber >= 0 && listLevelNumber < 9) {\n listFormat.listId = list.listId;\n listFormat.listLevelNumber = listLevelNumber;\n }\n this.onApplyParagraphFormat('listFormat', listFormat, false, false);\n };\n /**\n * Apply paragraph format to selection range\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSelectionParagraphFormatting = function (property, value, update) {\n var selection = this.documentHelper.selection;\n if (property === 'leftIndent' && update) {\n if (!isNullOrUndefined(selection.start) && selection.start.isExistBefore(selection.end)) {\n value = this.getIndentIncrementValue(selection.start.paragraph, value);\n }\n else {\n value = this.getIndentIncrementValue(selection.end.paragraph, value);\n }\n }\n this.updateParagraphFormatInternal(property, value, update);\n };\n Editor.prototype.getIndentIncrementValue = function (currentParagraph, incrementFactor) {\n var currentParagraphIndent = currentParagraph.paragraphFormat.leftIndent;\n if (currentParagraphIndent < 0) {\n // In MS Word, if the current paragraph left indent is lesser that or equal to 0\n // then performing decrement indent will set left indent to 0. \n if (incrementFactor < 0 || currentParagraphIndent + incrementFactor >= 0) {\n return -currentParagraphIndent;\n }\n else {\n var incrementValue = -this.getIndentIncrementValueInternal(-currentParagraphIndent, -incrementFactor);\n return incrementValue % incrementFactor === 0 ? incrementValue : incrementValue + incrementFactor;\n }\n }\n else {\n return this.getIndentIncrementValueInternal(currentParagraphIndent, incrementFactor);\n }\n };\n Editor.prototype.getIndentIncrementValueInternal = function (position, incrementFactor) {\n var tabValue = Math.abs(incrementFactor);\n if (position === 0 || tabValue === 0) {\n return incrementFactor > 0 ? tabValue : 0;\n }\n else {\n var diff = ((Math.round(position) * 100) % (Math.round(tabValue) * 100)) / 100;\n var cnt = (Math.round(position) - diff) / Math.round(tabValue);\n var fPosition = cnt * tabValue;\n if (incrementFactor > 0) {\n fPosition += tabValue;\n }\n return (fPosition - position) === 0 ? incrementFactor : fPosition - position;\n }\n };\n Editor.prototype.updateParagraphFormatInternal = function (property, value, update) {\n if (isNullOrUndefined(property)) {\n property = 'ParagraphFormat';\n }\n switch (property) {\n case 'afterSpacing':\n this.updateParagraphFormat('afterSpacing', value, false);\n break;\n case 'beforeSpacing':\n this.updateParagraphFormat('beforeSpacing', value, false);\n break;\n case 'spaceAfterAuto':\n this.updateParagraphFormat('spaceAfterAuto', value, false);\n break;\n case 'spaceBeforeAuto':\n this.updateParagraphFormat('spaceBeforeAuto', value, false);\n break;\n case 'rightIndent':\n this.updateParagraphFormat('rightIndent', value, false);\n break;\n case 'leftIndent':\n this.updateParagraphFormat('leftIndent', value, update);\n break;\n case 'firstLineIndent':\n this.updateParagraphFormat('firstLineIndent', value, false);\n break;\n case 'lineSpacing':\n this.updateParagraphFormat('lineSpacing', value, false);\n break;\n case 'lineSpacingType':\n this.updateParagraphFormat('lineSpacingType', value, false);\n break;\n case 'textAlignment':\n this.updateParagraphFormat('textAlignment', value, false);\n break;\n case 'borders':\n case 'topBorder':\n case 'bottomBorder':\n case 'leftBorder':\n case 'rightBorder':\n case 'horizontalBorder':\n case 'verticalBorder':\n this.updateParagraphFormat(property, value, false);\n break;\n case 'listFormat':\n this.updateParagraphFormat('listFormat', value, false);\n break;\n case 'ParagraphFormat':\n this.updateParagraphFormat(undefined, value, false);\n break;\n case 'styleName':\n this.updateParagraphFormat('styleName', value, false);\n break;\n case 'ClearParagraphFormat':\n // this.initializeHistory('ClearParagraphFormat', selectionRange);\n this.updateParagraphFormat(undefined, value, false);\n break;\n case 'bidi':\n var isBidiList = this.selection.paragraphFormat.listId !== -1;\n if (!isBidiList) {\n this.documentHelper.layout.isBidiReLayout = true;\n }\n this.updateParagraphFormat('bidi', value, false);\n if (!isBidiList) {\n this.documentHelper.layout.isBidiReLayout = false;\n }\n break;\n case 'contextualSpacing':\n this.updateParagraphFormat('contextualSpacing', value, false);\n break;\n case 'tabStop':\n this.updateParagraphFormat('tabStop', value, false);\n break;\n }\n };\n /**\n * Update paragraph format on undo\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.updateParagraphFormat = function (property, value, update) {\n var selection = this.documentHelper.selection;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n // this.updateInsertPosition(selection, startPosition);\n this.applyParaFormatSelectedContent(startPosition, endPosition, property, value, update);\n // this.startSelectionReLayouting(startPosition.paragraph, selection, startPosition, endPosition);\n };\n Editor.prototype.applyParaFormatSelectedContent = function (start, end, property, value, update) {\n var selection = this.documentHelper.selection;\n if (start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end))) {\n var cell = void 0;\n start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(start, true);\n }\n cell = start.paragraph.associatedCell;\n this.applyParaFormatInCell(cell, start, end, property, value, update);\n var table = cell.ownerTable;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n }\n else {\n if (!isNullOrUndefined(value) && !this.selection.isEmpty && property === 'styleName' && this.applyCharacterStyle(start.paragraph, start, end, property, value, update)) {\n return;\n }\n else {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n }\n };\n /**\n * Apply Paragraph format\n *\n * @param {ParagraphWidget} paragraph - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @param {boolean} update - Specifies the update\n * @private\n * @returns {void}\n */\n Editor.prototype.applyParaFormatProperty = function (paragraph, property, value, update) {\n var format = paragraph.paragraphFormat;\n if (update && property === 'leftIndent') {\n value = format.leftIndent + value;\n }\n if (property === 'listFormat' && value instanceof WListFormat) {\n var listFormat = value;\n if (!listFormat.hasValue('listLevelNumber')) {\n if (this.isAutoList) {\n listFormat.listLevelNumber = this.listLevelNumber;\n // reset the list level number to 0.\n this.listLevelNumber = 0;\n this.isAutoList = false;\n }\n else {\n listFormat.listLevelNumber = format.listFormat.listLevelNumber;\n }\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForParagraphFormat(format, property, value);\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = value;\n }\n if (value instanceof WParagraphFormat) {\n if (isNullOrUndefined(property)) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.copyParagraphFormat(value, format);\n }\n else if (this.isRemoteAction) {\n this.copyParagraphFormat(value, format);\n }\n else {\n format.copyFormat(value);\n }\n }\n else if (property === 'listFormat') {\n format.listFormat = value.listFormat;\n format.listFormat.ownerBase = format;\n // this.handleListFormat(format, value as WParagraphFormat);\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (this.owner.enableCollaborativeEditing && this.editorHistory.isUndoing) {\n this.editorHistory.currentBaseHistoryInfo.getParagraohFormatOperation(paragraph, format);\n }\n }\n }\n if (isNullOrUndefined(value)) {\n format.clearFormat();\n this.documentHelper.layout.reLayoutParagraph(format.ownerBase, 0, 0);\n return;\n }\n if (property === 'afterSpacing') {\n format.afterSpacing = value;\n }\n else if (property === 'beforeSpacing') {\n format.beforeSpacing = value;\n }\n else if (property === 'leftIndent') {\n format.leftIndent = value;\n }\n else if (property === 'lineSpacingType') {\n format.lineSpacingType = value;\n }\n else if (property === 'lineSpacing') {\n format.lineSpacing = value;\n }\n else if (property === 'rightIndent') {\n format.rightIndent = value;\n }\n else if (property === 'firstLineIndent') {\n format.firstLineIndent = value;\n }\n else if (property === 'textAlignment') {\n var textAlignment = value;\n if (format.bidi && !(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n if (textAlignment === 'Left') {\n textAlignment = 'Right';\n }\n else if (textAlignment === 'Right') {\n textAlignment = 'Left';\n }\n }\n format.textAlignment = textAlignment;\n //this.documentHelper.layout.allowLayout = false;\n }\n else if (property === 'outlineLevel') {\n format.outlineLevel = value;\n }\n else if (property === 'topBorder') {\n this.applyBorder(format.borders.top, value);\n }\n else if (property === 'bottomBorder') {\n this.applyBorder(format.borders.bottom, value);\n }\n else if (property === 'leftBorder') {\n this.applyBorder(format.borders.left, value);\n }\n else if (property === 'rightBorder') {\n this.applyBorder(format.borders.right, value);\n }\n else if (property === 'horizontalBorder') {\n this.applyBorder(format.borders.horizontal, value);\n }\n else if (property === 'verticalBorder') {\n this.applyBorder(format.borders.vertical, value);\n }\n else if (property === 'borders') {\n format.borders.copyFormat(value);\n }\n else if (property === 'styleName') {\n if (typeof (value) === 'string') {\n value = this.documentHelper.styles.findByName(value);\n }\n format.applyStyle(value);\n }\n else if (property === 'listFormat') {\n if (value instanceof WParagraphFormat) {\n value = value.listFormat;\n }\n format.listFormat.copyFormat(value);\n this.documentHelper.layout.clearListElementBox(format.ownerBase);\n if (format.listFormat.listId >= 0) {\n format.clearIndent();\n }\n this.layoutItemBlock(format.ownerBase, false);\n return;\n }\n else if (property === 'bidi') {\n format.bidi = value;\n }\n else if (property === 'keepWithNext') {\n format.keepWithNext = value;\n }\n else if (property === 'keepLinesTogether') {\n format.keepLinesTogether = value;\n }\n else if (property === 'widowControl') {\n format.widowControl = value;\n }\n else if (property === 'contextualSpacing') {\n format.contextualSpacing = value;\n }\n else if (property === 'spaceAfterAuto') {\n format.spaceAfterAuto = value;\n }\n else if (property === 'spaceBeforeAuto') {\n format.spaceBeforeAuto = value;\n }\n else if (property === 'tabStop') {\n var isReplace = this.editorHistory.isUndoing || this.editorHistory.isRedoing;\n this.updateTabStopCollection(paragraph, value, isReplace);\n }\n };\n Editor.prototype.copyParagraphFormat = function (sourceFormat, destFormat) {\n destFormat.uniqueParagraphFormat = sourceFormat.uniqueParagraphFormat;\n destFormat.listFormat = sourceFormat.listFormat;\n destFormat.listFormat.ownerBase = destFormat;\n destFormat.baseStyle = sourceFormat.baseStyle;\n //destFormat.borders = sourceFormat.borders;\n };\n /**\n * Copies list level paragraph format\n *\n * @param {WParagraphFormat} oldFormat - Specifies the old format\n * @param {WParagraphFormat} newFormat - Specifies the new format\n * @private\n * @returns {void}\n */\n Editor.prototype.copyFromListLevelParagraphFormat = function (oldFormat, newFormat) {\n if (!isNullOrUndefined(newFormat.leftIndent)) {\n oldFormat.leftIndent = newFormat.leftIndent;\n }\n if (!isNullOrUndefined(newFormat.firstLineIndent)) {\n oldFormat.firstLineIndent = newFormat.firstLineIndent;\n }\n };\n /**\n * Applies the continue numbering from the previous list.\n *\n * @returns {void}\n */\n Editor.prototype.applyContinueNumbering = function () {\n var selection = this.selection;\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('ContinueNumbering');\n }\n this.applyContinueNumberingInternal(selection);\n };\n /**\n * @private\n * @param selection\n * @param paraFormat\n */\n Editor.prototype.applyContinueNumberingInternal = function (selection, paraFormat) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n if (isNullOrUndefined(paraFormat)) {\n paraFormat = this.getParagraphFormat(paragraph, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n }\n paraFormat = !isNullOrUndefined(paraFormat) ? paraFormat : paragraph.paragraphFormat;\n this.changeListId(numberingInfo.currentList, paragraph, paraFormat, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n if (this.owner.enableAutoFocus) {\n this.documentHelper.updateFocus();\n }\n };\n Editor.prototype.getContinueNumberingInfo = function (paragraph) {\n var currentList = undefined;\n var listLevelNumber = 0;\n var listPattern = 'None';\n if (!isNullOrUndefined(paragraph.paragraphFormat)\n && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n var documentHelper = this.documentHelper;\n if (listLevelNumber !== 0 && !isNullOrUndefined(currentList) &&\n !isNullOrUndefined(documentHelper.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(documentHelper.getAbstractListById(currentList.abstractListId).levels[listLevelNumber])) {\n var listLevel = this.documentHelper.layout.getListLevel(currentList, listLevelNumber);\n if (!isNullOrUndefined(listLevel)) {\n listPattern = listLevel.listLevelPattern;\n }\n }\n return {\n currentList: currentList,\n listLevelNumber: listLevelNumber,\n listPattern: listPattern\n };\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.revertContinueNumbering = function (selection, format) {\n var paragraph = selection.start.paragraph;\n var numberingInfo = this.getContinueNumberingInfo(paragraph);\n this.changeListId(numberingInfo.currentList, paragraph, format, numberingInfo.listLevelNumber, numberingInfo.listPattern);\n this.reLayout(selection, false);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.updateHistory();\n }\n };\n Editor.prototype.changeListId = function (list, block, format, levelNum, listType) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId) {\n if (this.editorHistory) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n format = baseHistoryInfo.addModifiedPropertiesForContinueNumbering(block.paragraphFormat, format);\n baseHistoryInfo.insertedFormat = format;\n }\n }\n if (levelNum === block.paragraphFormat.listFormat.listLevelNumber) {\n block.paragraphFormat.copyFormat(format);\n }\n else {\n block.paragraphFormat.listFormat.listId = format.listFormat.listId;\n }\n this.documentHelper.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeListId(list, block.nextRenderedWidget, format, levelNum, listType);\n };\n Editor.prototype.getParagraphFormat = function (paragraph, levelNumber, listType) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget)) {\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n if (!isNullOrUndefined(paragraph.previousRenderedWidget.paragraphFormat.listFormat)\n && paragraph.previousRenderedWidget.paragraphFormat.listFormat.listId !== -1) {\n // let listLevel: WListLevel = this.selection.getListLevel(paragraph.previousRenderedWidget);\n if (levelNumber === paragraph.previousRenderedWidget.paragraphFormat.listFormat.listLevelNumber) {\n return paragraph.previousRenderedWidget.paragraphFormat;\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n else {\n return this.getParagraphFormat(paragraph.previousRenderedWidget, levelNumber, listType);\n }\n }\n }\n return undefined;\n };\n Editor.prototype.checkNumberArabic = function (listType, levelPattern) {\n if ((listType === 'Number' && levelPattern === 'Arabic')\n || (levelPattern === 'Number' && listType === 'Arabic')) {\n return true;\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.applyRestartNumbering = function (selection) {\n if (this.editorHistory) {\n this.editorHistory.initializeHistory('RestartNumbering');\n }\n this.restartListAt(selection);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.restartListAt = function (selection) {\n var currentList = selection.paragraphFormat.getList();\n var list = currentList.clone();\n list.listId = this.documentHelper.lists[(this.documentHelper.lists.length - 1)].listId + 1;\n var nsid = HelperMethods.generateUniqueId(this.documentHelper.lists);\n this.documentHelper.lists.push(list);\n var abstractList = currentList.abstractList.clone();\n abstractList.abstractListId = this.documentHelper.abstractLists[(this.documentHelper.abstractLists.length - 1)].abstractListId + 1;\n list.abstractListId = abstractList.abstractListId;\n list.nsid = abstractList.nsid = nsid;\n list.abstractList = abstractList;\n this.documentHelper.abstractLists.push(abstractList);\n this.restartListAtInternal(selection, list.listId, list.nsid);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.restartListAtInternal = function (selection, listId, nsid) {\n var numberingInfo = this.getContinueNumberingInfo(selection.start.paragraph);\n this.changeRestartNumbering(numberingInfo.currentList, selection.start.paragraph, listId, nsid);\n this.reLayout(selection, false);\n this.documentHelper.updateFocus();\n };\n Editor.prototype.changeRestartNumbering = function (list, block, listId, nsid) {\n if (isNullOrUndefined(block)) {\n return;\n }\n if (block instanceof ParagraphWidget) {\n if (list.listId === block.paragraphFormat.listFormat.listId) {\n if (this.editorHistory) {\n var baseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (!isNullOrUndefined(baseHistoryInfo)) {\n listId = baseHistoryInfo.addModifiedPropertiesForRestartNumbering(block.paragraphFormat.listFormat, listId);\n baseHistoryInfo.insertedFormat = {\n listId: listId,\n nsid: nsid\n };\n }\n }\n block.paragraphFormat.listFormat.listId = listId;\n this.documentHelper.layout.reLayoutParagraph(block, 0, 0);\n }\n }\n return this.changeRestartNumbering(list, block.nextRenderedWidget, listId, nsid);\n };\n Editor.prototype.applyParaFormat = function (paragraph, start, end, property, value, update) {\n this.setOffsetValue(this.selection);\n paragraph = paragraph.combineWidget(this.owner.viewer);\n //Apply Paragraph Format for spitted paragraph\n this.applyParaFormatProperty(paragraph, property, value, update);\n this.isMeasureParaWidth = true;\n this.layoutItemBlock(paragraph, false);\n this.isMeasureParaWidth = false;\n this.getOffsetValue(this.selection);\n if (paragraph.equals(end.paragraph)) {\n return;\n }\n this.getNextParagraphForFormatting(paragraph, start, end, property, value, update);\n };\n Editor.prototype.applyCharacterStyle = function (paragraph, start, end, property, value, update) {\n var paragraphWidget = paragraph.getSplitWidgets();\n var selection = end.owner.selectionModule;\n var lastLine = end.currentWidget;\n var isParaSelected = start.offset === 0 && (selection.isParagraphLastLine(lastLine) && end.currentWidget === lastLine\n && end.offset === selection.getLineLength(lastLine) + 1 || end.isAtParagraphEnd);\n if (!isParaSelected && (end.paragraph === paragraph || paragraphWidget.indexOf(end.paragraph) !== -1)) {\n if (((value.type === 'Paragraph') && ((value.link) instanceof WCharacterStyle)) || (value.type === 'Character')) {\n var obj = (value.type === 'Character') ? value : value.link;\n this.updateSelectionCharacterFormatting(property, obj, update);\n return true;\n }\n }\n return false;\n };\n // Cell\n Editor.prototype.applyParaFormatInCell = function (cell, start, end, property, value, update) {\n var selection = this.documentHelper.selection;\n if (end.paragraph.isInsideTable) {\n var cellContainer = selection.getContainerCellOf(cell, end.paragraph.associatedCell);\n if (cellContainer.ownerTable.contains(end.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cell, cellContainer);\n var endCell = selection.getSelectedCell(end.paragraph.associatedCell, cellContainer);\n if (selection.containsCell(cellContainer, end.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(cellContainer, start, end)) {\n value = this.getParaFormatValueInCell(cellContainer, property, value);\n this.applyParaFormatCellInternal(cellContainer, property, value, update);\n }\n else {\n if (startCell === cellContainer) {\n this.applyParaFormat(start.paragraph, start, end, property, value, update);\n }\n else {\n this.applyParagraphFormatRow(startCell.ownerRow, start, end, property, value, update);\n }\n }\n }\n else {\n //Format other selected cells in current table.\n this.applyParaFormatTableCell(cellContainer.ownerTable, cellContainer, endCell, property, value, update);\n }\n }\n else {\n this.applyParagraphFormatRow(cellContainer.ownerRow, start, end, property, value, update);\n }\n }\n else {\n var wCell = selection.getContainerCell(cell);\n this.applyParagraphFormatRow(wCell.ownerRow, start, end, property, value, update);\n }\n };\n Editor.prototype.applyParaFormatCellInternal = function (cell, property, value, update, isNext) {\n for (var i = 0; i < cell.childWidgets.length; i++) {\n var block = cell.childWidgets[i];\n if (block instanceof ParagraphWidget) {\n if (property === 'listFormat' && value instanceof WListFormat && isNext && block.paragraphFormat.listFormat.hasValue(\"listLevelNumber\") && value[\"listLevelNumber\"] < block.paragraphFormat.listFormat.listLevelNumber) {\n value[\"listLevelNumber\"] = block.paragraphFormat.listFormat.listLevelNumber;\n }\n this.isMeasureParaWidth = true;\n this.applyParaFormatProperty(block, property, value, update);\n this.isMeasureParaWidth = false;\n }\n else {\n this.applyParagraphFormatTableInternal(block, property, value, update, isNext);\n }\n }\n };\n Editor.prototype.getParaFormatValueInCell = function (cell, property, value) {\n if (typeof value === 'boolean') {\n var firstPara = this.documentHelper.selection.getFirstParagraph(cell);\n value = !firstPara.paragraphFormat.getPropertyValue(property);\n }\n return value;\n };\n // Row\n Editor.prototype.applyParagraphFormatRow = function (wRow, start, end, property, value, update) {\n value = this.getParaFormatValueInCell(wRow.childWidgets[0], property, value);\n for (var i = wRow.rowIndex; i < wRow.ownerTable.childWidgets.length; i++) {\n var row = wRow.ownerTable.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n if (end.paragraph.isInsideTable && this.documentHelper.selection.containsRow(row, end.paragraph.associatedCell)) {\n return;\n }\n }\n this.getNextParagraphForFormatting(wRow.ownerTable, start, end, property, value, update);\n };\n // Table\n Editor.prototype.applyParaFormatTableCell = function (table, startCell, endCell, property, value, update) {\n var selection = this.documentHelper.selection;\n var startValue = selection.getCellLeft(startCell.ownerRow, startCell);\n var endValue = startValue + startCell.cellFormat.cellWidth;\n var endCellLeft = selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startValue, endValue, endCellLeft, endCellRight);\n startValue = cellInfo.start;\n endValue = cellInfo.end;\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var isStarted = false;\n for (var m = table.childWidgets.indexOf(startCell.ownerRow); m <= count; m++) {\n var row = table.childWidgets[m];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var left = selection.getCellLeft(row, row.childWidgets[j]);\n if (Math.round(startValue) <= Math.round(left) && Math.round(left) < Math.round(endValue)) {\n if (!isStarted) {\n value = this.getParaFormatValueInCell(row.childWidgets[j], property, value);\n isStarted = true;\n }\n this.applyParaFormatCellInternal(row.childWidgets[j], property, value, update);\n }\n }\n }\n };\n Editor.prototype.applyParaFormatTable = function (table, start, end, property, value, update, isNext) {\n table = table.combineWidget(this.owner.viewer);\n var selection = this.documentHelper.selection;\n for (var m = 0; m < table.childWidgets.length; m++) {\n var tableRow = table.childWidgets[m];\n for (var k = 0; k < tableRow.childWidgets.length; k++) {\n this.applyParaFormatCellInternal(tableRow.childWidgets[k], property, value, update, isNext);\n }\n if (end.paragraph.isInsideTable && selection.containsRow(tableRow, end.paragraph.associatedCell)) {\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n return;\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n this.getNextParagraphForFormatting(table, start, end, property, value, update);\n };\n Editor.prototype.getNextParagraphForFormatting = function (block, start, end, property, value, update) {\n var widgetCollection = block.getSplitWidgets();\n block = widgetCollection[widgetCollection.length - 1];\n block = this.documentHelper.selection.getNextRenderedBlock(block);\n if (!isNullOrUndefined(block)) { //Goto the next block.\n if (block instanceof ParagraphWidget) {\n if (property === 'listFormat' && value instanceof WListFormat && block.paragraphFormat.listFormat.hasValue(\"listLevelNumber\") && value[\"listLevelNumber\"] < block.paragraphFormat.listFormat.listLevelNumber) {\n value[\"listLevelNumber\"] = block.paragraphFormat.listFormat.listLevelNumber;\n }\n this.applyParaFormat(block, start, end, property, value, update);\n }\n else {\n this.applyParaFormatTable(block, start, end, property, value, update, true);\n }\n }\n };\n Editor.prototype.applyParagraphFormatTableInternal = function (table, property, value, update, isNext) {\n for (var x = 0; x < table.childWidgets.length; x++) {\n var row = table.childWidgets[x];\n for (var y = 0; y < row.childWidgets.length; y++) {\n this.applyParaFormatCellInternal(row.childWidgets[y], property, value, update, isNext);\n }\n }\n };\n /**\n * Apply column format changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyColumnFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n this.initHistory('SectionFormat');\n var selection = this.documentHelper.selection;\n selection.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var startPageIndex;\n var endPageIndex;\n this.documentHelper.clearContent();\n var startSectionIndex = startPosition.paragraph.bodyWidget.sectionIndex;\n var endSectionIndex = endPosition.paragraph.bodyWidget.sectionIndex;\n var isMultipleSection = false;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n if (this.documentHelper.pages[i].bodyWidgets[0].index === startSectionIndex) {\n startPageIndex = i;\n }\n else {\n isMultipleSection = true;\n }\n }\n for (var i = startPageIndex; i < this.documentHelper.pages.length; i++) {\n var bodyWidget = this.documentHelper.pages[i].bodyWidgets[0];\n endPageIndex = i;\n if ((bodyWidget.index === startSectionIndex)) {\n continue;\n }\n else if ((bodyWidget.index >= startSectionIndex) && bodyWidget.index <= endSectionIndex) {\n continue;\n }\n else {\n endPageIndex = i - 1;\n break;\n }\n }\n if (isMultipleSection && property == \"differentOddAndEvenPages\" && startPosition.paragraph.isInHeaderFooter) {\n startPageIndex = 0;\n endPageIndex = this.documentHelper.pages.length - 1;\n }\n // let startPageIndex: number = this.documentHelper.pages.indexOf((selection.start.paragraph.containerWidget as BodyWidget).page);\n // let endPageIndex: number = this.documentHelper.pages.indexOf((selection.end.paragraph.containerWidget as BodyWidget).page);\n var update = true;\n var index = 0;\n for (var i = startPageIndex; i <= endPageIndex; i++) {\n if (index !== this.documentHelper.pages[i].bodyWidgets[0].index && !update) {\n update = true;\n }\n this.applyPropertyValueForSection(this.documentHelper.pages[i].bodyWidgets[0].sectionFormat, property, value, update);\n index = this.documentHelper.pages[i].bodyWidgets[0].index;\n update = false;\n }\n this.layoutWholeDocument();\n this.fireContentChange();\n };\n //Paragraph Format apply implementation Ends\n // Apply Selection Section Format Option Implementation Starts\n /**\n * Apply section format selection changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplySectionFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n if (!isNullOrUndefined(property)) {\n var action = (property[0].toUpperCase() + property.slice(1));\n this.initHistory(action);\n }\n else {\n this.initHistory('SectionFormat');\n }\n this.updateSectionFormat(property, value);\n };\n /**\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.removeInlineHeaderFooterWidget = function (sectionIndex, headerFooterType, propertyName, value) {\n if (sectionIndex != 0) {\n var headerFooters = this.documentHelper.headersFooters[sectionIndex];\n var index = this.viewer.getHeaderFooter(headerFooterType);\n var sectionFormat = this.selection.start.paragraph.containerWidget.sectionFormat.cloneFormat();\n if (!isNullOrUndefined(value)) {\n if (!isNullOrUndefined(propertyName)) {\n var action = (propertyName[0].toUpperCase() + propertyName.slice(1));\n this.initHistory(action);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = value;\n }\n var blockInfo = this.selection.getParagraphInfo(this.selection.start);\n this.selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.checkInsertPosition(this.selection)) {\n this.setPositionForHistory(this.selection.editPosition);\n }\n }\n if (value) {\n if (headerFooters && !isNullOrUndefined(headerFooters[index])) {\n sectionFormat.removedHeaderFooters.push(headerFooters[index]);\n this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForSection(sectionFormat, propertyName, value);\n delete headerFooters[index];\n }\n }\n else {\n var parentHeaderFooter = this.viewer.getCurrentHeaderFooter(headerFooterType, sectionIndex);\n if (!isNullOrUndefined(parentHeaderFooter) && isNullOrUndefined(headerFooters[index])) {\n var HeaderFooterWidget_1 = parentHeaderFooter.clone();\n headerFooters[index] = HeaderFooterWidget_1;\n sectionFormat.removedHeaderFooters.push(HeaderFooterWidget_1);\n this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForSection(sectionFormat, propertyName, value);\n }\n }\n this.selection.updateTextPositionForBlockContainer(this.selection.start.paragraph.containerWidget);\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.layoutWholeDocument();\n this.isSkipOperationsBuild = false;\n this.fireContentChange();\n }\n }\n };\n /**\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.updateHeaderFooters = function (propertyName, value, sectionIndex, widget) {\n var headerFooters = this.documentHelper.headersFooters[sectionIndex];\n var index = this.viewer.getHeaderFooter(widget.headerFooterType);\n var headerFooter = headerFooters[index];\n if (this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n if (isNullOrUndefined(headerFooter)) {\n this.documentHelper.headersFooters[sectionIndex][index] = widget;\n }\n else if (!isNullOrUndefined(headerFooter)) {\n delete headerFooters[index];\n }\n }\n this.selection.updateTextPositionForBlockContainer(this.selection.start.paragraph.containerWidget);\n this.layoutWholeDocument();\n };\n /**\n * Update section format\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateSectionFormat = function (property, value) {\n if (this.documentHelper.selection.startPage === 1 && property === \"differentFirstPage\") {\n var paraInfo = void 0;\n if (this.documentHelper.selection.start.paragraph.containerWidget instanceof TableCellWidget) {\n paraInfo = this.getFirstChildOfTable(this.documentHelper.selection.start.paragraph.containerWidget);\n }\n else {\n paraInfo = this.documentHelper.selection.start.paragraph.containerWidget.childWidgets[0];\n }\n var startIndex = this.selection.getHierarchicalIndex(paraInfo, \"0\");\n this.documentHelper.selection.select(startIndex, startIndex);\n }\n var selection = this.documentHelper.selection;\n selection.owner.isShiftingEnabled = true;\n var startPosition = selection.start;\n var endPosition = selection.end;\n if (!selection.isForward) {\n startPosition = selection.end;\n endPosition = selection.start;\n }\n var startPageIndex;\n var endPageIndex;\n this.documentHelper.clearContent();\n var startSectionIndex = startPosition.paragraph.bodyWidget.sectionIndex;\n var endSectionIndex = endPosition.paragraph.bodyWidget.sectionIndex;\n var isMultipleSection = false;\n var isSkip = false;\n for (var i = 0; i < this.documentHelper.pages.length; i++) {\n for (var j = 0; j < this.documentHelper.pages[i].bodyWidgets.length; j++) {\n if (this.documentHelper.pages[i].bodyWidgets[j].index === startSectionIndex) {\n startPageIndex = i;\n if (selection.isForward) {\n isSkip = true;\n break;\n }\n }\n else {\n isMultipleSection = true;\n }\n }\n if (isSkip) {\n break;\n }\n }\n for (var i = startPageIndex; i < this.documentHelper.pages.length; i++) {\n for (var j = 0; j < this.documentHelper.pages[i].bodyWidgets.length; j++) {\n var bodyWidget = this.documentHelper.pages[i].bodyWidgets[j];\n if ((bodyWidget.index === startSectionIndex)) {\n endPageIndex = i;\n continue;\n }\n else if ((bodyWidget.index >= startSectionIndex) && bodyWidget.index <= endSectionIndex) {\n endPageIndex = i;\n continue;\n }\n }\n }\n if (isMultipleSection && property == \"differentOddAndEvenPages\" && startPosition.paragraph.isInHeaderFooter) {\n startPageIndex = 0;\n endPageIndex = this.documentHelper.pages.length - 1;\n }\n // let startPageIndex: number = this.documentHelper.pages.indexOf((selection.start.paragraph.containerWidget as BodyWidget).page);\n // let endPageIndex: number = this.documentHelper.pages.indexOf((selection.end.paragraph.containerWidget as BodyWidget).page);\n var update = true;\n var index = 0;\n for (var i = startPageIndex; i <= endPageIndex; i++) {\n for (var j = 0; j < this.documentHelper.pages[i].bodyWidgets.length; j++) {\n if ((this.documentHelper.pages[i].bodyWidgets[j].index >= startSectionIndex && this.documentHelper.pages[i].bodyWidgets[j].index <= endSectionIndex) ||\n (!selection.isForward && this.documentHelper.pages[i].bodyWidgets[j].index <= startSectionIndex && this.documentHelper.pages[i].bodyWidgets[j].index >= endSectionIndex)) {\n if (index !== this.documentHelper.pages[i].bodyWidgets[j].index && !update) {\n update = true;\n }\n this.applyPropertyValueForSection(this.documentHelper.pages[i].bodyWidgets[j].sectionFormat, property, value, update);\n index = this.documentHelper.pages[i].bodyWidgets[j].index;\n update = false;\n var body = this.documentHelper.pages[i].bodyWidgets[j];\n if (!isNullOrUndefined(body.nextWidget) && (body.sectionFormat.pageHeight !== body.nextWidget.sectionFormat.pageHeight || body.sectionFormat.pageWidth !== body.nextWidget.sectionFormat.pageWidth) && body.nextWidget.sectionFormat.breakCode === 'NoBreak') {\n body.nextWidget.sectionFormat.breakCode = 'NewPage';\n body = this.documentHelper.layout.getBodyWidget(body.nextWidget, false);\n if (!isNullOrUndefined(body.nextWidget)) {\n body.nextWidget.sectionFormat.breakCode = 'NewPage';\n }\n }\n }\n }\n }\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.layoutWholeDocument();\n this.isSkipOperationsBuild = false;\n this.fireContentChange();\n };\n Editor.prototype.getFirstChildOfTable = function (cellWidget) {\n var ownerTable = cellWidget.ownerTable;\n return ownerTable.childWidgets[0].childWidgets[0].childWidgets[0];\n };\n //Apply Selection Table Format option implementation starts\n /**\n * Apply table format property changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyTableFormat = function (property, value, table) {\n if (this.restrictFormatting) {\n return;\n }\n var action = this.getTableFormatAction(property);\n this.viewer.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n if (isNullOrUndefined(table)) {\n table = selection.start.paragraph.associatedCell.ownerTable;\n }\n table = table.combineWidget(this.owner.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyTablePropertyValue(property, value, table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.reLayoutTable(table);\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableFormatAction = function (property) {\n switch (property) {\n case 'tableAlignment':\n return 'TableAlignment';\n case 'leftIndent':\n return 'TableLeftIndent';\n case 'leftMargin':\n return 'DefaultCellLeftMargin';\n case 'rightMargin':\n return 'DefaultCellRightMargin';\n case 'bottomMargin':\n return 'DefaultCellBottomMargin';\n case 'topMargin':\n return 'DefaultCellTopMargin';\n case 'preferredWidth':\n return 'TablePreferredWidth';\n case 'preferredWidthType':\n return 'TablePreferredWidthType';\n case 'shading':\n return 'Shading';\n case 'bidi':\n return 'TableBidi';\n case 'title':\n return 'TableTitle';\n case 'description':\n return 'TableDescription';\n default:\n return 'DefaultCellSpacing';\n }\n };\n // Apply Selection Row Format Option Implementation Starts\n /**\n * Apply table row format property changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyTableRowFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n var action = this.getRowAction(property);\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n if (selection.isEmpty) {\n this.initHistory(action);\n var table = selection.start.paragraph.associatedCell.ownerRow.ownerTable;\n this.applyRowPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.ownerRow);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getRowAction = function (property) {\n switch (property) {\n case 'height':\n return 'RowHeight';\n case 'heightType':\n return 'RowHeightType';\n case 'isHeader':\n return 'RowHeader';\n default:\n return 'AllowBreakAcrossPages';\n }\n };\n /**\n * Apply table cell property changes\n *\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyTableCellFormat = function (property, value) {\n if (this.restrictFormatting) {\n return;\n }\n var action = this.getTableCellAction(property);\n this.documentHelper.owner.isShiftingEnabled = true;\n var selection = this.documentHelper.selection;\n var table = selection.start.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n if (selection.isEmpty) {\n this.initHistory(action);\n this.applyCellPropertyValue(selection, property, value, selection.start.paragraph.associatedCell.cellFormat);\n table.calculateGrid();\n this.selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.reLayoutTable(table);\n }\n else {\n this.updateSelectionTableFormat(this.selection, action, value);\n }\n this.reLayout(selection, false);\n };\n Editor.prototype.getTableCellAction = function (property) {\n switch (property) {\n case 'verticalAlignment':\n return 'CellContentVerticalAlignment';\n case 'leftMargin':\n return 'CellLeftMargin';\n case 'rightMargin':\n return 'CellRightMargin';\n case 'bottomMargin':\n return 'CellBottomMargin';\n case 'topMargin':\n return 'CellTopMargin';\n case 'preferredWidth':\n return 'CellPreferredWidth';\n case 'shading':\n return 'Shading';\n default:\n return 'CellPreferredWidthType';\n }\n };\n Editor.prototype.applyPropertyValueForSection = function (sectionFormat, property, value, update) {\n //let selection: Selection = this.documentHelper.selection;\n if (update && this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (property === 'columns') {\n sectionFormat.numberOfColumns = value.length;\n }\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedPropertiesForSection(sectionFormat, property, value);\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = value;\n }\n if (isNullOrUndefined(value)) {\n return;\n }\n if (value instanceof WSectionFormat) {\n if (isNullOrUndefined(property)) {\n sectionFormat.copyFormat(value, this.editorHistory);\n }\n return;\n }\n if (property === 'pageHeight') {\n sectionFormat.pageHeight = value;\n }\n else if (property === 'pageWidth') {\n sectionFormat.pageWidth = value;\n }\n else if (property === 'leftMargin') {\n sectionFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sectionFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sectionFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sectionFormat.bottomMargin = value;\n }\n else if (property === 'differentFirstPage') {\n sectionFormat.differentFirstPage = value;\n }\n else if (property === 'differentOddAndEvenPages') {\n sectionFormat.differentOddAndEvenPages = value;\n }\n else if (property === 'headerDistance') {\n sectionFormat.headerDistance = value;\n }\n else if (property === 'footerDistance') {\n sectionFormat.footerDistance = value;\n }\n else if (property === 'pageStartingNumber') {\n sectionFormat.pageStartingNumber = value;\n }\n else if (property === 'restartPageNumbering') {\n sectionFormat.restartPageNumbering = value;\n }\n else if (property === 'endnoteNumberFormat') {\n sectionFormat.endnoteNumberFormat = value;\n }\n else if (property === 'footNoteNumberFormat') {\n sectionFormat.footNoteNumberFormat = value;\n }\n else if (property === 'restartIndexForEndnotes') {\n sectionFormat.restartIndexForEndnotes = value;\n }\n else if (property === 'restartIndexForFootnotes') {\n sectionFormat.restartIndexForFootnotes = value;\n }\n else if (property === 'initialFootNoteNumber') {\n sectionFormat.initialFootNoteNumber = value;\n }\n else if (property === 'initialEndNoteNumber') {\n sectionFormat.initialEndNoteNumber = value;\n }\n else if (property == 'numberOfColumns') {\n sectionFormat.numberOfColumns = value;\n }\n else if (property == 'equalWidth') {\n sectionFormat.equalWidth = value;\n }\n else if (property == 'lineBetweenColumns') {\n sectionFormat.lineBetweenColumns = value;\n }\n else if (property == 'columns') {\n sectionFormat.columns = value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.layoutWholeDocument = function (isLayoutChanged, skipClearContent) {\n this.documentHelper.layout.isInitialLoad = true;\n this.documentHelper.layout.isLayoutWhole = true;\n var startPosition = this.documentHelper.selection.start;\n var endPosition = this.documentHelper.selection.end;\n if (startPosition.isExistAfter(endPosition)) {\n startPosition = this.documentHelper.selection.end;\n endPosition = this.documentHelper.selection.start;\n }\n if (this.owner.layoutType == 'Continuous' && (this.documentHelper.selection.isinEndnote || this.documentHelper.selection.isinFootnote)) {\n this.documentHelper.selection.footnoteReferenceElement(startPosition, endPosition);\n startPosition = endPosition;\n }\n var startInfo = this.selection.getParagraphInfo(startPosition);\n var endInfo = this.selection.getParagraphInfo(endPosition);\n var startIndex = this.selection.getHierarchicalIndex(startInfo.paragraph, startInfo.offset.toString());\n var endIndex = this.selection.getHierarchicalIndex(endInfo.paragraph, endInfo.offset.toString());\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n // this.viewer.owner.isLayoutEnabled = true;\n var sections = this.combineSection();\n if (!skipClearContent) {\n this.documentHelper.clearContent();\n }\n // this.documentHelper.layout.isRelayout = false;\n this.documentHelper.layout.layoutItems(sections, true);\n // this.documentHelper.layout.isRelayout = true;\n this.documentHelper.owner.isShiftingEnabled = false;\n this.setPositionForCurrentIndex(startPosition, startIndex);\n this.setPositionForCurrentIndex(endPosition, endIndex);\n this.documentHelper.selection.selectPosition(startPosition, endPosition);\n this.reLayout(this.documentHelper.selection, undefined, isLayoutChanged);\n this.documentHelper.layout.isLayoutWhole = false;\n this.documentHelper.layout.isInitialLoad = false;\n };\n Editor.prototype.combineSection = function () {\n var sections = [];\n var nextSection = this.documentHelper.pages[0].bodyWidgets[0];\n do {\n nextSection = this.combineSectionChild(nextSection, sections, false);\n } while (nextSection);\n for (var j = 0; j < this.documentHelper.pages.length; j++) {\n this.documentHelper.pages[j].destroy();\n j--;\n }\n return sections;\n };\n Editor.prototype.combineFollowingSection = function () {\n var sections = [];\n var nextSection = this.documentHelper.selection.start.paragraph.bodyWidget.getSplitWidgets()[0];\n if (nextSection.childWidgets[0] instanceof ParagraphWidget) {\n this.updateWholeListItems(nextSection.childWidgets[0]);\n }\n else {\n var block = this.documentHelper.getFirstParagraphInFirstCell(nextSection.childWidgets[0]);\n this.viewer.owner.editorModule.updateWholeListItems(block);\n }\n var pageIndex = this.documentHelper.pages.indexOf(nextSection.page);\n var startIndex = nextSection.indexInOwner === 0 ? pageIndex : pageIndex + 1;\n do {\n nextSection = this.combineSectionChild(nextSection, sections, false);\n } while (nextSection);\n for (var i = startIndex; i < this.documentHelper.pages.length; i++) {\n this.documentHelper.pages[i].destroy();\n i--;\n }\n for (var j = pageIndex; j < this.documentHelper.pages.length; j++) {\n for (var k = 0; k < this.documentHelper.pages[j].bodyWidgets.length; k++) {\n if (this.documentHelper.pages[j].bodyWidgets[k].childWidgets.length === 0) {\n this.documentHelper.pages[j].bodyWidgets.splice(k, 1);\n k--;\n }\n }\n }\n return sections;\n };\n Editor.prototype.combineSectionChild = function (bodyWidget, sections, destoryPage) {\n var previousBodyWidget = bodyWidget;\n var temp = new BodyWidget();\n var emptyBody = false;\n temp.sectionFormat = bodyWidget.sectionFormat;\n temp.index = previousBodyWidget.index;\n do {\n emptyBody = false;\n previousBodyWidget = bodyWidget;\n if (bodyWidget.lastChild) {\n bodyWidget.lastChild.combineWidget(this.owner.viewer);\n }\n bodyWidget = bodyWidget.nextRenderedWidget;\n for (var j = 0; j < previousBodyWidget.childWidgets.length; j++) {\n var block = previousBodyWidget.childWidgets[j];\n if (block instanceof TableWidget) {\n this.documentHelper.layout.clearTableWidget(block, true, true, true);\n }\n else {\n block.x = 0;\n block.y = 0;\n block.width = 0;\n block.height = 0;\n }\n temp.childWidgets.push(block);\n previousBodyWidget.childWidgets.splice(j, 1);\n j--;\n block.containerWidget = temp;\n }\n for (var i = 0; i < previousBodyWidget.page.bodyWidgets.length; i++) {\n if (previousBodyWidget.page.bodyWidgets[i].childWidgets.length === 0) {\n emptyBody = true;\n }\n else {\n emptyBody = false;\n break;\n }\n }\n if (emptyBody && destoryPage) {\n previousBodyWidget.page.destroy();\n }\n // this.documentHelper.pages.splice(previousBodyWidget.page.index, 1);\n } while (bodyWidget && previousBodyWidget.index === bodyWidget.index);\n sections.push(temp);\n return bodyWidget;\n };\n Editor.prototype.updateSelectionTableFormat = function (selection, action, value) {\n switch (action) {\n case 'TableAlignment':\n this.editorHistory.initializeHistory('TableAlignment');\n this.updateTableFormat(selection, 'tableAlignment', value);\n break;\n case 'TableLeftIndent':\n this.editorHistory.initializeHistory('TableLeftIndent');\n this.updateTableFormat(selection, 'leftIndent', value);\n break;\n case 'DefaultCellSpacing':\n this.editorHistory.initializeHistory('DefaultCellSpacing');\n this.updateTableFormat(selection, 'cellSpacing', value);\n break;\n case 'DefaultCellLeftMargin':\n this.editorHistory.initializeHistory('DefaultCellLeftMargin');\n this.updateTableFormat(selection, 'leftMargin', value);\n break;\n case 'DefaultCellRightMargin':\n this.editorHistory.initializeHistory('DefaultCellRightMargin');\n this.updateTableFormat(selection, 'rightMargin', value);\n break;\n case 'DefaultCellTopMargin':\n this.editorHistory.initializeHistory('DefaultCellTopMargin');\n this.updateTableFormat(selection, 'topMargin', value);\n break;\n case 'TablePreferredWidth':\n this.editorHistory.initializeHistory('TablePreferredWidth');\n this.updateTableFormat(selection, 'preferredWidth', value);\n break;\n case 'TablePreferredWidthType':\n this.editorHistory.initializeHistory('TablePreferredWidthType');\n this.updateTableFormat(selection, 'preferredWidthType', value);\n break;\n case 'DefaultCellBottomMargin':\n this.editorHistory.initializeHistory('DefaultCellBottomMargin');\n this.updateTableFormat(selection, 'bottomMargin', value);\n break;\n case 'CellContentVerticalAlignment':\n this.editorHistory.initializeHistory('CellContentVerticalAlignment');\n this.updateCellFormat(selection, 'verticalAlignment', value);\n break;\n case 'CellLeftMargin':\n this.editorHistory.initializeHistory('CellLeftMargin');\n this.updateCellFormat(selection, 'leftMargin', value);\n break;\n case 'CellRightMargin':\n this.editorHistory.initializeHistory('CellRightMargin');\n this.updateCellFormat(selection, 'rightMargin', value);\n break;\n case 'CellTopMargin':\n this.editorHistory.initializeHistory('CellTopMargin');\n this.updateCellFormat(selection, 'topMargin', value);\n break;\n case 'CellBottomMargin':\n this.editorHistory.initializeHistory('CellBottomMargin');\n this.updateCellFormat(selection, 'bottomMargin', value);\n break;\n case 'CellPreferredWidth':\n this.editorHistory.initializeHistory('CellPreferredWidth');\n this.updateCellFormat(selection, 'preferredWidth', value);\n break;\n case 'CellPreferredWidthType':\n this.editorHistory.initializeHistory('CellPreferredWidthType');\n this.updateCellFormat(selection, 'preferredWidthType', value);\n break;\n case 'Shading':\n this.editorHistory.initializeHistory('Shading');\n this.updateCellFormat(selection, 'shading', value);\n break;\n case 'RowHeight':\n this.editorHistory.initializeHistory('RowHeight');\n this.updateRowFormat(selection, 'height', value);\n break;\n case 'RowHeightType':\n this.editorHistory.initializeHistory('RowHeightType');\n this.updateRowFormat(selection, 'heightType', value);\n break;\n case 'RowHeader':\n this.editorHistory.initializeHistory('RowHeader');\n this.updateRowFormat(selection, 'isHeader', value);\n break;\n case 'AllowBreakAcrossPages':\n this.editorHistory.initializeHistory('AllowBreakAcrossPages');\n this.updateRowFormat(selection, 'allowBreakAcrossPages', value);\n break;\n case 'TableBidi':\n this.editorHistory.initializeHistory(action);\n this.updateTableFormat(selection, 'bidi', value);\n break;\n case 'TableTitle':\n this.editorHistory.initializeHistory(action);\n this.updateTableFormat(selection, 'title', value);\n break;\n case 'TableDescription':\n this.editorHistory.initializeHistory(action);\n this.updateTableFormat(selection, 'description', value);\n break;\n }\n };\n // Update Table Properties\n /**\n * Update Table Format on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateTableFormat = function (selection, property, value) {\n var tableStartPosition = selection.start;\n var tableEndPosition = selection.end;\n if (!selection.isForward) {\n tableStartPosition = selection.end;\n tableEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, tableStartPosition);\n this.applyTablePropertyValue(property, value, tableStartPosition.paragraph.associatedCell.ownerTable);\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.documentHelper.layout.reLayoutTable(tableStartPosition.paragraph.associatedCell.ownerTable);\n }\n };\n /**\n * update cell format on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateCellFormat = function (selection, property, value) {\n selection.owner.isShiftingEnabled = true;\n var newStartPosition = selection.start;\n var newEndPosition = selection.end;\n if (!selection.isForward) {\n newStartPosition = selection.end;\n newEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, newStartPosition);\n this.updateFormatForCell(selection, property, value);\n };\n /**\n * Update row format on undo\n *\n * @param {Selection} selection - Specifies the selection\n * @param {string} property - Specifies the property\n * @param {Object} value - Specifies the value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateRowFormat = function (selection, property, value) {\n var rowStartPosition = selection.start;\n var rowEndPosition = selection.end;\n if (!selection.isForward) {\n rowStartPosition = selection.end;\n rowEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, rowStartPosition);\n this.applyRowFormat(rowStartPosition.paragraph.associatedCell.ownerRow, rowStartPosition, rowEndPosition, property, value);\n };\n Editor.prototype.initHistoryPosition = function (selection, position) {\n if (this.documentHelper.owner.editorHistoryModule && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (!isNullOrUndefined(position)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = position.getHierarchicalIndexInternal();\n }\n }\n else if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.start.getHierarchicalIndexInternal();\n }\n }\n };\n Editor.prototype.startSelectionReLayouting = function (paragraph, selection, start, end) {\n selection.owner.isLayoutEnabled = true;\n if (start.paragraph.isInsideTable) {\n var table = start.paragraph.associatedCell.ownerTable;\n while (table.isInsideTable) {\n table = table.associatedCell.ownerTable;\n }\n this.reLayoutSelectionOfTable(table, selection, start, end);\n }\n else {\n this.reLayoutSelection(paragraph, selection, start, end);\n }\n };\n Editor.prototype.reLayoutSelectionOfTable = function (table, selection, start, end) {\n var isEnded = false;\n this.documentHelper.layout.layoutBodyWidgetCollection(table.index, table.containerWidget, table, false);\n // If the selection ends in the current table, need to stop relayouting.\n if (!isNullOrUndefined(end.paragraph.associatedCell) && table.contains(end.paragraph.associatedCell)) {\n return true;\n }\n var block = selection.getNextRenderedBlock(table);\n // Relayout the next block.\n if (!isNullOrUndefined(block)) {\n isEnded = this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return isEnded;\n };\n Editor.prototype.reLayoutSelection = function (paragraph, selection, start, end) {\n if (start.paragraph === paragraph) {\n var startOffset = start.offset;\n var length_3 = selection.getParagraphLength(paragraph);\n var indexInInline = 0;\n var index = 0;\n var inlineObj = paragraph.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n if (!isNullOrUndefined(inline)) {\n if (indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n }\n index = inline.line.children.indexOf(inline);\n }\n var lineIndex = 0;\n if (start.currentWidget.paragraph === paragraph) {\n lineIndex = paragraph.childWidgets.indexOf(start.currentWidget);\n index = start.currentWidget.children.indexOf(inline);\n }\n // If selection start inline is at new inline, need to relayout from the previous inline.\n if (inline instanceof TextElementBox && !inline.line && index > 0) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, index - 1);\n }\n else {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, index);\n }\n }\n else {\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n }\n // If the selection ends at the current paragraph, need to stop relayouting.\n if (end.paragraph === paragraph) {\n return true;\n }\n // _Relayout the next block.\n var block = selection.getNextRenderedBlock(paragraph);\n if (!isNullOrUndefined(block)) {\n return this.reLayoutSelectionOfBlock(block, selection, start, end);\n }\n return false;\n };\n //Relayouting Start \n Editor.prototype.reLayoutSelectionOfBlock = function (block, selection, start, end) {\n if (block instanceof ParagraphWidget) {\n return this.reLayoutSelection(block, selection, start, end);\n }\n else {\n return undefined;\n // return this.reLayoutSelectionOfTable(block as TableWidget, selection, start, end);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.layoutItemBlock = function (block, shiftNextWidget) {\n var section = undefined;\n if (block.containerWidget instanceof BlockContainer || block.containerWidget instanceof TextFrame) {\n // let index: number = section.childWidgets.indexOf(block);\n if (!isNullOrUndefined(this.documentHelper.owner)\n && this.documentHelper.owner.isLayoutEnabled) {\n block = block.combineWidget(this.viewer);\n section = block.containerWidget;\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, section, block, false);\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cell = block.containerWidget;\n cell = this.documentHelper.selection.getContainerCell(cell);\n if (!isNullOrUndefined(this.documentHelper.owner)\n && this.documentHelper.owner.isLayoutEnabled) {\n this.documentHelper.layout.reLayoutTable(block);\n }\n }\n };\n /**\n * @private\n * @returns {boolean}\n */\n Editor.prototype.removeSelectedContents = function (selection) {\n return this.removeSelectedContentInternal(selection, selection.start, selection.end);\n };\n Editor.prototype.removeSelectedContentInternal = function (selection, startPosition, endPosition) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n if (startPos.paragraph === endPos.paragraph && startPos.paragraph.childWidgets.indexOf(startPos.currentWidget) === startPos.paragraph.childWidgets.length - 1 &&\n startPos.offset === selection.getParagraphLength(startPos.paragraph) && startPos.offset + 1 === endPos.offset) {\n selection.owner.isShiftingEnabled = true;\n selection.selectContent(startPos, true);\n return true;\n }\n var paragraphInfo = this.selection.getParagraphInfo(startPos);\n selection.editPosition = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var start = startPos.clone();\n var body = start.paragraph.containerWidget;\n var isFirstLine = start.currentWidget.isFirstLine();\n var isMultipleSectionSelected = this.checkMultipleSectionSelected(start, endPos);\n var isRemoved = this.removeSelectedContent(endPos.paragraph, selection, startPos, endPos);\n var textPosition = new TextPosition(selection.owner);\n if (isMultipleSectionSelected && this.selection.currentPasteAction == \"DefaultPaste\" && isFirstLine && start.offset < 1) {\n var currentParagraph = start.paragraph;\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n line.paragraph = paragraph;\n paragraph.containerWidget = body;\n paragraph.childWidgets.push(line);\n body.childWidgets.push(paragraph);\n paragraph.index = currentParagraph.index;\n paragraph.x = start.location.x;\n paragraph.y = start.location.y;\n }\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n return isRemoved;\n };\n Editor.prototype.checkMultipleSectionSelected = function (start, end) {\n var startSectionIndex = this.getBodyWidgetIndex(start);\n var endSectionIndex = this.getBodyWidgetIndex(end);\n if (startSectionIndex == endSectionIndex) {\n return false;\n }\n return true;\n };\n Editor.prototype.getBodyWidgetIndex = function (textPosition) {\n var position = textPosition.hierarchicalPosition;\n var index = position.indexOf(';');\n var value = position.substring(0, index);\n position = position.substring(index).replace(';', '');\n index = position.indexOf(';');\n value = position.substring(0, index);\n var bodyWidgetIndex = parseInt(value, 10);\n return bodyWidgetIndex;\n };\n Editor.prototype.removeSelectedContent = function (paragraph, selection, start, end) {\n //If end is not table end and start is outside the table, then skip removing the contents and move caret to start position.\n if (end.paragraph.isInsideTable\n && end.paragraph !== this.documentHelper.getLastParagraphInLastCell(end.paragraph.associatedCell.ownerTable)\n && (!start.paragraph.isInsideTable\n || start.paragraph.associatedCell.ownerTable.index !== end.paragraph.associatedCell.ownerTable.index)) {\n return false;\n }\n selection.owner.isShiftingEnabled = true;\n this.deleteSelectedContent(paragraph, selection, start, end, 2);\n return true;\n };\n Editor.prototype.deleteSelectedContent = function (paragraph, selection, start, end, editAction, isDeletecell) {\n var indexInInline = 0;\n var inlineObj = start.currentWidget.getInline(start.offset, indexInInline);\n var inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldBegin && !isNullOrUndefined((inline as WFieldBegin).fieldEnd)) {\n // let fieldEndOffset: number = ((inline as WFieldBegin).fieldEnd.owner as WParagraph).getOffset((inline as WFieldBegin).fieldEnd, 1);\n // let fieldEndIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldBegin).fieldEnd.owner as WParagraph, fieldEndOffset.toString());\n // let selectionEndIndex: string = end.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(fieldEndIndex, selectionEndIndex)) {\n // //If selection end is after field begin, moves selection start to field separator.\n // start.moveToInline((inline as WFieldBegin).fieldSeparator, 1);\n // selection.editPosition = start.getHierarchicalIndexInternal();\n // if (!isNullOrUndefined(selection.currentBaseHistoryInfo)) {\n // selection.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n // }\n // }\n // }\n indexInInline = 0;\n inlineObj = end.currentWidget.getInline(end.offset, indexInInline);\n inline = inlineObj.element;\n indexInInline = inlineObj.index;\n // if (!isNullOrUndefined(inline)) {\n // inline = selection.getNextRenderedInline(inline, indexInInline);\n // }\n // if (inline instanceof WFieldEnd && !isNullOrUndefined((inline as WFieldEnd).fieldBegin)) {\n // let fieldBeginOffset: number = ((inline as WFieldEnd).fieldBegin.owner as WParagraph).getOffset((inline as WFieldEnd).fieldBegin, 0);\n // let fieldBeginIndex: string = WordDocument.getHierarchicalIndexOf((inline as WFieldEnd).fieldBegin.owner as WParagraph, fieldBeginOffset.toString());\n // let selectionStartIndex: string = start.getHierarchicalIndexInternal();\n // if (!TextPosition.isForwardSelection(selectionStartIndex, fieldBeginIndex)) {\n // //If field begin is before selection start, move selection end to inline item before field end.\n // let prevInline: WInline = selection.getPreviousTextInline(inline);\n // if (isNullOrUndefined(prevInline)) {\n // end.moveBackward();\n // } else {\n // end.moveToInline(prevInline, prevInline.length);\n // }\n // }\n // }\n // if (inline instanceof FootnoteElementBox) {\n // this.removeFootnote(inline);\n // }\n if (end.paragraph !== paragraph) {\n this.deleteSelectedContent(end.paragraph, selection, start, end, editAction);\n return;\n }\n // Selection start in cell.\n if (end.paragraph.isInsideTable && (!start.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || (selection.isCellSelected(end.paragraph.associatedCell, start, end) && isDeletecell))) {\n end.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n this.deleteTableCell(end.paragraph.associatedCell, selection, start, end, editAction, isDeletecell);\n }\n else {\n var shiftPara = undefined;\n if (this.owner.viewer instanceof PageLayoutViewer && paragraph.bodyWidget.sectionFormat.numberOfColumns > 1 && paragraph === paragraph.bodyWidget.lastChild && !isNullOrUndefined(paragraph.bodyWidget.nextRenderedWidget) && paragraph.bodyWidget.index !== paragraph.bodyWidget.nextRenderedWidget.index && paragraph.bodyWidget.page === paragraph.bodyWidget.nextRenderedWidget.page) {\n shiftPara = paragraph.nextRenderedWidget;\n }\n this.deletePara(paragraph, start, end, editAction);\n if (this.delBlockContinue && this.delBlock) {\n if (this.delSection) {\n var bodyWidget = paragraph.bodyWidget instanceof BodyWidget ? paragraph.bodyWidget : undefined;\n this.deleteSection(selection, this.delSection, bodyWidget, editAction);\n this.delSection = undefined;\n }\n this.deleteBlock(this.delBlock, selection, start, end, editAction);\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n if (this.owner.viewer instanceof PageLayoutViewer && shiftPara !== undefined) {\n this.documentHelper.blockToShift = shiftPara;\n }\n }\n };\n /**\n * Merges the selected cells.\n *\n * @returns {void}\n */\n Editor.prototype.mergeCells = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl || !this.owner.isDocumentLoaded) {\n return;\n }\n if (!isNullOrUndefined(this.documentHelper) && !this.selection.isEmpty) {\n this.mergeSelectedCellsInTable();\n }\n };\n /**\n * Deletes the entire table at selection.\n *\n * @returns {void}\n */\n Editor.prototype.deleteTable = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n if (startPos.paragraph.isInsideTable) {\n var table = this.getOwnerTable(this.selection.isForward).combineWidget(this.owner.viewer);\n this.selection.selectTable();\n var commentStart = [];\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n commentStart = this.checkAndRemoveComments();\n this.initHistory('DeleteTable');\n //Sets the insert position in history info as current table. \n this.updateHistoryPosition(startPos, true);\n }\n var considerTrackChanges = true;\n if (!this.skipTracking()) {\n var count = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.rowFormat.revisions.length === 1 && row.rowFormat.revisions[0].revisionType === 'Insertion'\n && row.rowFormat.revisions[0].author === (this.owner.currentUser === '' ? 'Guest user' : this.owner.currentUser)) {\n this.isRemoveRevision = true;\n this.unlinkRangeFromRevision(row.rowFormat, true);\n this.isRemoveRevision = false;\n if (row.rowFormat.revisions[0].range.length === 0) {\n row.rowFormat.revisions.splice(0, 1);\n }\n count++;\n }\n }\n if (count === table.childWidgets.length) {\n considerTrackChanges = false;\n }\n }\n var paragraph = this.getParagraphForSelection(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Table;\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(table.clone());\n }\n if (this.owner.enableTrackChanges && considerTrackChanges) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n if (i === 0) {\n var nextCell = table.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n this.trackRowDeletion(table.childWidgets[i]);\n }\n }\n else {\n this.removeBlock(table);\n }\n this.selection.selectParagraphInternal(paragraph, true);\n if (this.checkIsNotRedoing() || isNullOrUndefined(this.editorHistory)) {\n this.reLayout(this.selection);\n this.updateHistoryForComments(commentStart);\n }\n }\n };\n /**\n * Deletes the selected column(s).\n *\n * @returns {void}\n */\n Editor.prototype.deleteColumn = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n if (this.owner.enableTrackChanges) {\n var locale = new L10n('documenteditor', this.owner.defaultLocale);\n locale.setLocale(this.owner.locale);\n this.alertDialog = DialogUtility.alert({\n title: locale.getConstant('UnTrack'),\n content: locale.getConstant('Merge Track'),\n showCloseIcon: true,\n okButton: {\n text: 'Ok', click: this.onDeleteColumnConfirmed.bind(this)\n },\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n this.alertDialog.enableRtl = this.owner.enableRtl;\n }\n else {\n this.onDeleteColumnConfirmed();\n }\n };\n Editor.prototype.onDeleteColumnConfirmed = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n if (startPos.paragraph.isInsideTable) {\n this.selection.selectColumn();\n var commentStart = [];\n this.selection.owner.isShiftingEnabled = true;\n if (this.checkIsNotRedoing()) {\n commentStart = this.checkAndRemoveComments();\n this.initHistory('DeleteColumn');\n }\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (endCell.nextWidget) {\n var nextCell = endCell.nextWidget;\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n else if (startCell.previousWidget) {\n var previousCell = startCell.previousWidget;\n paragraph = this.selection.getFirstParagraph(previousCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n //retrieve the cell collection based on start and end cell to remove. \n var deleteCells = table.getColumnCellsForSelection(startCell, endCell);\n this.onDeleteColumn(table, deleteCells);\n if (table.childWidgets.length === 0) {\n // Before disposing table reset the paragrph.\n paragraph = this.getParagraphForSelection(table);\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n this.updateTable(table);\n }\n this.selection.selectParagraphInternal(paragraph, true);\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n this.updateHistoryForComments(commentStart);\n }\n if (!isNullOrUndefined(this.alertDialog)) {\n this.alertDialog.close();\n this.alertDialog = undefined;\n }\n }\n };\n /**\n * Delete the column for collaborative editing.\n * @private\n * @returns {void}\n */\n Editor.prototype.onDeleteColumn = function (table, deleteCells) {\n var length = 0;\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.childWidgets.length === 1) {\n if (deleteCells.indexOf(row.childWidgets[0]) >= 0) {\n this.removeFieldInWidget(row.childWidgets[0], true);\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n length += 1;\n i--;\n }\n }\n else {\n for (var j = 0; j < row.childWidgets.length; j++) {\n var tableCell = row.childWidgets[j];\n if (deleteCells.indexOf(tableCell) >= 0) {\n this.removeFieldInWidget(tableCell, true);\n row.childWidgets.splice(j, 1);\n tableCell.destroy();\n j--;\n }\n }\n if (row.childWidgets.length === 0) {\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n length += 1;\n i--;\n }\n }\n }\n return length;\n };\n /**\n * Deletes the selected row(s).\n *\n * @returns {void}\n */\n Editor.prototype.deleteRow = function () {\n if (this.owner.isReadOnlyMode || !this.canEditContentControl) {\n return;\n }\n var startPos = !this.selection.isForward ? this.selection.end : this.selection.start;\n var endPos = !this.selection.isForward ? this.selection.start : this.selection.end;\n var blockInfo = this.selection.getParagraphInfo(startPos);\n var startIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (startPos.paragraph.isInsideTable) {\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n this.selection.selectRow();\n var commentStart = [];\n if (this.checkIsNotRedoing()) {\n commentStart = this.checkAndRemoveComments();\n this.initHistory('DeleteRow');\n }\n this.selection.owner.isShiftingEnabled = true;\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = this.getOwnerRow(true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.cloneTableToHistoryInfo(table);\n }\n var paragraph = undefined;\n if (row.nextWidget) {\n var nextCell = row.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n startPos = startPos.clone();\n if (!this.selection.isEmpty) {\n var containerCell = this.selection.getContainerCellOf(startCell, endCell);\n if (containerCell.ownerTable.contains(endCell)) {\n startCell = this.selection.getSelectedCell(startCell, containerCell);\n endCell = this.selection.getSelectedCell(endCell, containerCell);\n if (this.selection.containsCell(containerCell, endCell)) {\n row = startCell.ownerRow;\n if (this.owner.enableTrackChanges) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.action = 'RemoveRowTrack';\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Row;\n }\n this.trackRowDeletion(row, true, false);\n }\n else {\n this.removeRow(row);\n }\n }\n else {\n row = startCell.ownerRow;\n var endRow = endCell.ownerRow;\n //Update the selection paragraph.\n paragraph = undefined;\n if (endRow.nextWidget) {\n var nextCell = endRow.nextWidget.childWidgets[0];\n paragraph = this.selection.getFirstParagraph(nextCell);\n }\n if (isNullOrUndefined(paragraph)) {\n paragraph = this.getParagraphForSelection(table);\n }\n for (var i = 0; i < table.childWidgets.length; i++) {\n var tableRow = table.childWidgets[i];\n if (tableRow.rowIndex >= row.rowIndex && tableRow.rowIndex <= endRow.rowIndex) {\n if (this.owner.enableTrackChanges && this.checkIsNotRedoing()) {\n this.trackRowDeletion(tableRow, true, false);\n }\n else {\n this.removeFieldInBlock(tableRow, true);\n table.childWidgets.splice(i, 1);\n tableRow.destroy();\n i--;\n }\n }\n }\n if (table.childWidgets.length === 0) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'DeleteTable';\n }\n table.destroy();\n }\n else {\n this.updateTable(table);\n }\n }\n }\n }\n else {\n if (this.owner.enableTrackChanges) {\n this.trackRowDeletion(row, true, false);\n }\n else {\n this.removeRow(row);\n }\n }\n if (!this.owner.enableTrackChanges || isNullOrUndefined(table.childWidgets)) {\n this.selection.selectParagraphInternal(paragraph, true);\n }\n else {\n var textPosition = this.selection.getTextPosBasedOnLogicalIndex(startIndex);\n this.selection.selectContent(textPosition, true);\n // this.selection.start.setPositionInternal(startPos);\n // this.selection.end.setPositionInternal(this.selection.start);\n }\n if (isNullOrUndefined(this.editorHistory) || this.checkIsNotRedoing()) {\n this.reLayout(this.selection, true);\n this.updateHistoryForComments(commentStart);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.trackRowDeletion = function (row, canremoveRow, updateHistory) {\n var rowFormat = row.rowFormat;\n if (!isNullOrUndefined(rowFormat)) {\n var canInsertRevision = true;\n if (rowFormat.revisions.length > 0) {\n var revision = this.retrieveRevisionInOder(rowFormat);\n if (revision.revisionType === 'Insertion') {\n if (this.isRevisionMatched(rowFormat, undefined)) {\n if (isNullOrUndefined(canremoveRow) || canremoveRow) {\n this.removeRow(row);\n }\n else {\n this.removeRevisionsInRow(row);\n }\n return true;\n }\n }\n else if (revision.revisionType === 'Deletion') {\n this.unlinkWholeRangeInRevision(rowFormat, revision);\n canInsertRevision = false;\n }\n }\n if (canInsertRevision) {\n if ((isNullOrUndefined(updateHistory) || updateHistory) && this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'RemoveRowTrack';\n }\n this.insertRevision(rowFormat, 'Deletion');\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n for (var j = 0; j < cellWidget.childWidgets.length; j++) {\n if (cellWidget.childWidgets[j] instanceof TableWidget) {\n this.trackInnerTable(cellWidget.childWidgets[j], canremoveRow, updateHistory);\n }\n else {\n var paraWidget = cellWidget.childWidgets[j];\n // We used this boolean since for table tracking we should add removed nodes only for entire table not for every elements in the table\n this.skipTableElements = true;\n if (canInsertRevision) {\n this.insertRevisionForBlock(paraWidget, 'Deletion', undefined, undefined, true);\n }\n this.skipTableElements = false;\n }\n }\n }\n }\n return false;\n };\n Editor.prototype.trackInnerTable = function (tableWidget, canremoveRow, updateHistory) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n this.trackRowDeletion(tableWidget.childWidgets[i], canremoveRow, updateHistory);\n }\n };\n Editor.prototype.returnDeleteRevision = function (revisions) {\n for (var i = 0; i < revisions.length; i++) {\n if (revisions[i].revisionType === 'Deletion') {\n return revisions[i];\n }\n }\n return undefined;\n };\n Editor.prototype.removeRow = function (row) {\n var table = row.ownerTable;\n if (row.rowFormat.revisions.length > 0) {\n this.removeRevisionsInRow(row);\n }\n if (table.childWidgets.length === 1) {\n this.removeBlock(table);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.action = 'Delete';\n }\n table.destroy();\n }\n else {\n this.removeFieldInBlock(row, true);\n table.childWidgets.splice(table.childWidgets.indexOf(row), 1);\n row.destroy();\n this.updateTable(table);\n }\n };\n /**\n * @private\n * @param {TableWidget} table Specifies the table widget\n * @returns {void}\n */\n Editor.prototype.updateTable = function (table, skipCombine) {\n if (!skipCombine) {\n table = table.combineWidget(this.viewer);\n }\n table.updateRowIndex(0);\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n };\n /**\n * @private\n * @param {TableWidget} table Specifies the table widget\n * @returns { ParagraphWidget }\n */\n Editor.prototype.getParagraphForSelection = function (table) {\n var paragraph = undefined;\n var nextWidget = table.nextWidget ? table.nextWidget : table.nextRenderedWidget;\n var previousWidget = table.previousWidget ? table.previousWidget : table.previousRenderedWidget;\n if (nextWidget) {\n paragraph = nextWidget instanceof ParagraphWidget ? nextWidget\n : this.documentHelper.getFirstParagraphInFirstCell(nextWidget);\n }\n else if (previousWidget) {\n paragraph = previousWidget instanceof ParagraphWidget ? previousWidget\n : this.documentHelper.getLastParagraphInLastCell(previousWidget);\n }\n return paragraph;\n };\n Editor.prototype.deletePara = function (paragraph, start, end, editAction) {\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var selection = this.documentHelper.selection;\n var paragraphStart = selection.getStartOffset(paragraph);\n var endParagraphStartOffset = selection.getStartOffset(end.paragraph);\n var startOffset = paragraphStart;\n var endOffset = 0;\n var isCombineNextParagraph = false;\n var lastLinelength = this.selection.getLineLength(paragraph.lastChild);\n var currentParagraph = paragraph;\n var section = paragraph.bodyWidget instanceof BodyWidget ? paragraph.bodyWidget : undefined;\n var startLine = undefined;\n var endLineWidget = undefined;\n var isCombineLastBlock = this.combineLastBlock;\n var tempStartOffset;\n if (paragraph === start.paragraph) {\n startOffset = start.offset;\n startLine = start.currentWidget;\n tempStartOffset = startOffset;\n if ((startOffset + 1 === this.documentHelper.selection.getLineLength(paragraph.lastChild))) {\n startOffset++;\n }\n if (end.paragraph.isInsideTable && (!this.owner.enableTrackChanges || this.skipTracking())) {\n isCombineNextParagraph = this.isEndInAdjacentTable(paragraph, end.paragraph);\n }\n if (!isCombineNextParagraph) {\n isCombineNextParagraph = this.combineLastBlock;\n }\n this.combineLastBlock = false;\n }\n else {\n startLine = paragraph.firstChild;\n }\n if (paragraph !== start.paragraph && selection.isSkipLayouting) {\n selection.isSkipLayouting = false;\n }\n if (paragraph === end.paragraph) {\n endLineWidget = end.currentWidget;\n endOffset = end.offset;\n }\n else {\n endLineWidget = paragraph.lastChild;\n endOffset = this.documentHelper.selection.getLineLength(paragraph.lastChild);\n }\n // If previous widget is splitted paragraph, combine paragraph widget.\n var block = (!isNullOrUndefined(paragraph.previousRenderedWidget) && start.paragraph !== paragraph) ?\n paragraph.previousRenderedWidget.combineWidget(this.documentHelper.viewer) : undefined;\n if (this.owner.enableTrackChanges && !isNullOrUndefined(block) && block instanceof TableWidget && paragraph.isEmpty() && isNullOrUndefined(paragraph.nextRenderedWidget)) {\n this.delBlockContinue = true;\n this.delBlock = block;\n return;\n }\n if (startOffset > paragraphStart && start.currentWidget === paragraph.lastChild &&\n startOffset === lastLinelength && (paragraph === end.paragraph && end.offset === startOffset + 1 ||\n paragraph.nextRenderedWidget === end.paragraph && end.offset === endParagraphStartOffset) ||\n (this.editorHistory && this.editorHistory.isUndoing && this.editorHistory.currentHistoryInfo &&\n this.editorHistory.currentHistoryInfo.action === 'PageBreak' && block && block.isPageBreak()\n && (startOffset === 0 && !start.currentWidget.isFirstLine || startOffset > 0)) ||\n start.paragraph !== end.paragraph && editAction === 2 && start.paragraph === paragraph && start.paragraph.nextWidget === end.paragraph && !this.owner.enableTrackChanges || !(paragraph.nextRenderedWidget instanceof TableWidget) && !isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && ((this.editorHistory.currentBaseHistoryInfo.action === 'Reject Change' && start.paragraph === paragraph && end.paragraph != paragraph && startOffset >= paragraphStart) || (this.editorHistory.currentBaseHistoryInfo.action === 'Accept Change' && start.currentWidget.isLastLine() && ((start.currentWidget == end.currentWidget && start.offset + 1 >= end.paragraph.getLength()) || (start.currentWidget !== end.currentWidget && start.paragraph === paragraph))))) {\n isCombineNextParagraph = true;\n }\n if ((tempStartOffset + 1 === this.documentHelper.selection.getLineLength(paragraph.lastChild))) {\n startOffset--;\n }\n var paraEnd = end.clone();\n paraEnd.offset = paraEnd.offset - 1;\n // used the isRemoveInine property to skip the entire block (end of selection), removing and adding in history when inserting text.\n var isRemoveInline = false;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && (this.editorHistory.currentBaseHistoryInfo.action === 'Insert' || this.editorHistory.currentBaseHistoryInfo.action === 'InsertTextParaReplace') && end.paragraph === paragraph && endOffset === selection.getLineLength(paragraph.lastChild) + 1) {\n isRemoveInline = true;\n }\n var paraReplace = (start.paragraph === paragraph && start.isAtParagraphStart && paraEnd.isAtParagraphEnd &&\n this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && this.editorHistory.currentBaseHistoryInfo.action === 'Insert');\n if (paraReplace) {\n this.editorHistory.currentBaseHistoryInfo.action = 'InsertTextParaReplace';\n if (end.paragraph !== paragraph && this.owner.enableTrackChanges && editAction === 2) {\n paraReplace = false;\n }\n }\n var isStartParagraph = start.paragraph === paragraph;\n if (end.paragraph === paragraph && end.currentWidget !== paragraph.lastChild ||\n (end.currentWidget === paragraph.lastChild && end.offset <= selection.getLineLength(paragraph.lastChild)) || paraReplace) {\n if (end.currentWidget.isFirstLine() && end.offset > paragraphStart || !end.currentWidget.isFirstLine() || paraReplace) {\n //If selection end with this paragraph and selection doesnot include paragraph mark. \n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n //Removes the splitted paragraph.\n }\n if (!isNullOrUndefined(block) && !isStartParagraph && !paraReplace) {\n this.delBlockContinue = true;\n this.delBlock = block;\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n if (nextSection && !section.equals(nextSection) && section.index !== nextSection.index) {\n this.delSection = nextSection;\n }\n else {\n this.delSection = undefined;\n }\n }\n else {\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n else if (start.paragraph === paragraph && (start.currentWidget !== paragraph.firstChild ||\n (start.currentWidget === paragraph.firstChild && startOffset > paragraphStart))) {\n // If selection start is after paragraph start\n //And selection does not end with this paragraph Or selection include paragraph mark.\n this.delBlockContinue = false;\n this.delBlock = undefined;\n if (editAction === 4) {\n return;\n }\n else {\n if (this.skipTracking() && this.editorHistory.currentBaseHistoryInfo.action === 'ParaMarkTrack') {\n this.addRemovedNodes(paragraph.characterFormat.cloneFormat());\n if (paragraph.characterFormat.revisions.length > 0) {\n this.unlinkRangeFromRevision(paragraph.characterFormat, true);\n }\n paragraph.characterFormat.revisions = [];\n }\n else {\n if (this.owner.enableTrackChanges && !this.skipTracking() && this.editorHistory.currentBaseHistoryInfo.action !== 'TOC' && this.editorHistory.currentBaseHistoryInfo.action !== 'Reject Change') {\n if (isCombineNextParagraph) {\n currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, startLine, startOffset, true);\n this.deleteParagraphMark(currentParagraph, selection, editAction, true);\n this.addRemovedNodes(paragraph);\n }\n else {\n if (start.paragraph !== end.paragraph && startOffset !== paragraph.getLength()) {\n var para = new ParagraphWidget();\n para.childWidgets = undefined;\n this.addRemovedNodes(para);\n this.insertRevision(paragraph.characterFormat, 'Deletion');\n }\n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n if (startOffset !== paragraph.getLength()) {\n var lastLine = paragraph.lastChild;\n if (lastLine.children.length > 0) {\n var lastEle = lastLine.children[lastLine.children.length - 1];\n this.combineElementRevision(lastEle.revisions, paragraph.characterFormat.revisions);\n }\n if (paragraph.isEmpty()) {\n this.combineRevisionWithBlocks(paragraph);\n }\n else {\n this.combineRevisionWithBlocks(paragraph.lastChild.children[paragraph.lastChild.children.length - 1]);\n }\n }\n }\n }\n else {\n if (!start.currentWidget.isFirstLine() && paragraph.lastChild === end.currentWidget && !isCombineNextParagraph) {\n this.removeInlines(paragraph, startLine, startOffset, endLineWidget, endOffset, editAction);\n }\n else {\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && this.editorHistory.currentBaseHistoryInfo.action === 'Reject Change' && start.paragraph === paragraph && end.paragraph != paragraph && startOffset >= paragraphStart && isCombineNextParagraph) {\n isCombineLastBlock = true;\n }\n currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, startLine, startOffset, true);\n if (!isNullOrUndefined(currentParagraph) && !isNullOrUndefined(this.editorHistory) && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.deletaRevisionIDs(currentParagraph.characterFormat);\n }\n var skipHistoryCollection = false;\n if (!end.paragraph.isEmpty() && isCombineNextParagraph && !(this.editorHistory && this.editorHistory.currentHistoryInfo && this.editorHistory.currentHistoryInfo.action === 'PageBreak')) {\n skipHistoryCollection = true;\n }\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction, isCombineLastBlock, skipHistoryCollection);\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n this.addRemovedNodes(paragraph);\n isCombineLastBlock = false;\n }\n }\n }\n return;\n }\n }\n else {\n if ((!(this.owner.enableTrackChanges && !this.skipTracking()) && end.paragraph === paragraph && end.paragraph.isInsideTable && (start.currentWidget.isFirstLine() && start.offset > selection.getStartOffset(start.paragraph) || !start.currentWidget.isFirstLine()) &&\n end.offset >= selection.getLineLength(end.paragraph.lastChild) && end.paragraph.nextRenderedWidget)) {\n this.combineLastBlock = true;\n }\n var newParagraph = undefined;\n var previousBlock = paragraph.previousWidget;\n var prevParagraph = (previousBlock instanceof ParagraphWidget) ? previousBlock : undefined;\n var nextWidget = paragraph.nextRenderedWidget;\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner text body and previousBlock is not paragraph.\n if (this.owner.enableTrackChanges && !this.skipTracking() && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action !== 'TOC') {\n var removedNodeLength = -1;\n if (this.editorHistory.currentBaseHistoryInfo) {\n removedNodeLength = this.editorHistory.currentBaseHistoryInfo.removedNodes.length;\n }\n this.insertRevisionForBlock(paragraph, 'Deletion', undefined, undefined, undefined, isRemoveInline);\n var charFormatRev = paragraph.characterFormat.revisions;\n if (!(end.paragraph.previousRenderedWidget instanceof TableWidget)\n && charFormatRev.length > 1\n && charFormatRev[charFormatRev.length - 2].revisionType == 'Insertion') {\n if (paragraph.isEmpty()) {\n newParagraph = this.checkAndInsertBlock(paragraph, start, end, editAction, prevParagraph);\n this.removeBlock(paragraph);\n if (removedNodeLength === -1) {\n this.addRemovedNodes(paragraph);\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.splice(removedNodeLength, 0, paragraph);\n }\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n }\n else {\n while (paragraph.characterFormat.revisions.length !== 0) {\n this.removePrevParaMarkRevision(paragraph, true);\n }\n this.deleteParagraphMark(paragraph, selection, editAction, false);\n var lastLine = paragraph.lastChild;\n if (lastLine.children.length > 0 && !paragraph.isEmpty()) {\n var lastEle = lastLine.children[lastLine.children.length - 1];\n this.combineElementRevision(lastEle.revisions, paragraph.characterFormat.revisions);\n }\n nextWidget = paragraph.nextRenderedWidget;\n }\n }\n else {\n if (paragraph.isEmpty()) {\n this.combineRevisionWithBlocks(paragraph);\n }\n else {\n // On deleting para, para items may be added with delete revisions so we need to ensure whether it can be combined with prev/ next para.\n this.combineRevisionWithBlocks(paragraph.firstChild.children[0]);\n }\n }\n if (this.editorHistory.currentBaseHistoryInfo.action === 'Delete' && !this.isInsertingTOC) {\n // Changed the condition to update editposition if current para contains revision (deletion) and previous para contain revision (insertion) and both are selected case.\n if ((paragraph === end.paragraph && paragraph.containerWidget && !paragraph.isEmpty()) || (isNullOrUndefined(start.paragraph.containerWidget) && !isNullOrUndefined(end.paragraph.containerWidget) && !end.paragraph.isEmpty())) {\n var paraInfo = this.selection.getParagraphInfo(end);\n this.selection.editPosition = this.selection.getHierarchicalIndex(paraInfo.paragraph, paraInfo.offset.toString());\n }\n if (paragraph === start.paragraph) {\n var blockInfo = this.selection.getParagraph({ index: this.selection.editPosition });\n if (isNullOrUndefined(blockInfo.paragraph)) {\n var paraInfo = this.selection.getParagraphInfo(end);\n this.selection.editPosition = this.selection.getHierarchicalIndex(paraInfo.paragraph, paraInfo.offset.toString());\n }\n }\n }\n if (start.paragraph !== paragraph && !isNullOrUndefined(block)) {\n this.delBlockContinue = true;\n this.delBlock = block;\n return;\n }\n }\n else {\n //this.documentHelper.comments;\n var foot = void 0;\n /* if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.footnoteWidget)) {\n foot = selection.start.paragraph.bodyWidget.page.footnoteWidget;\n }else if (!isNullOrUndefined(selection.start.paragraph.bodyWidget.page.endnoteWidget)) {\n foot = selection.start.paragraph.bodyWidget.page.endnoteWidget;\n }*/\n newParagraph = this.checkAndInsertBlock(paragraph, start, end, editAction, prevParagraph);\n this.removeRevisionForBlock(paragraph, undefined, false, true);\n // Added the condition to skip to add entair paragraph (with para mark) into history if the current widget has the last widget. \n var isLastChild = (paragraph == this.getLastParaForBodywidgetCollection(paragraph));\n var isRemoved = false;\n if (this.owner.enableTrackChanges && (isLastChild || isRemoveInline)) {\n for (var i = paragraph.childWidgets.length - 1; i > -1; i--) {\n var line = (paragraph.childWidgets[i]);\n this.removeContent(line, 0, this.documentHelper.selection.getLineLength(line), undefined, false);\n }\n isRemoved = true;\n }\n else {\n // Added the condition to remove section if current and next para have different section indexes if selection is covered till the end of first section.\n var nextParagraph = this.selection.getNextParagraphBlock(paragraph);\n if (!isLastChild && !paragraph.isInsideTable && !isNullOrUndefined(nextParagraph) && paragraph.bodyWidget.sectionIndex !== nextParagraph.bodyWidget.sectionIndex) {\n this.deleteSection(selection, paragraph.bodyWidget, nextParagraph.bodyWidget, editAction);\n isStartParagraph = true;\n }\n this.addRemovedNodes(paragraph);\n }\n if (!isNullOrUndefined(block) && !isStartParagraph && !paraReplace) {\n this.delBlock = block;\n var nextSection = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n if (nextSection && section.index !== nextSection.index) {\n var bodyWidget = paragraph.bodyWidget instanceof BodyWidget ? paragraph.bodyWidget : undefined;\n this.deleteSection(selection, nextSection, bodyWidget, editAction);\n }\n }\n if (!isRemoved) {\n this.removeBlock(paragraph);\n }\n /* let widget: IWidget;\n for(let i:number =0;i< foot.childWidgets.length; i++) {\n widget = foot.childWidgets[i];\n if (widget instanceof ParagraphWidget) {\n \n let para: ParagraphWidget = widget;\n if (!isNullOrUndefined(para)) {\n this.removeBlock(para);\n }}}*/\n }\n if (this.documentHelper.blockToShift === paragraph) {\n this.documentHelper.blockToShift = undefined;\n }\n if (!isNullOrUndefined(newParagraph)) {\n selection.editPosition = this.selection.getHierarchicalIndex(newParagraph, '0');\n var offset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.selection.getHierarchicalIndex(newParagraph, offset.toString());\n }\n }\n else if (paragraph === start.paragraph && (isNullOrUndefined(nextWidget) || (!isNullOrUndefined(nextWidget) && !isNullOrUndefined(section) && section.index !== nextWidget.bodyWidget.index)) && !isNullOrUndefined(prevParagraph)) {\n var offset = this.selection.getParagraphLength(prevParagraph);\n // if (isNullOrUndefined(block)) {\n selection.editPosition = this.selection.getHierarchicalIndex(prevParagraph, offset.toString());\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.editPosition, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n // } else {\n // let offset: number = selection.getParagraphLength(paragraph) + 1;\n // if (block instanceof ParagraphWidget) {\n // prevParagraph = block as ParagraphWidget;\n // }\n // // if (block instanceof WTable) {\n // // prevParagraph = (block as WTable).getFirstParagraphInFirstCell();\n // // }\n // selection.editPosition = prevLineWidget.getHierarchicalIndex('0');\n // }\n }\n }\n if (start.paragraph !== paragraph && !isNullOrUndefined(block)) {\n this.delBlockContinue = true;\n this.delBlock = block;\n }\n else {\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n this.insertParagraphPaste(paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction, isCombineLastBlock);\n };\n Editor.prototype.deletaRevisionIDs = function (format) {\n if (format.removedIds.length > 0) {\n while (format.removedIds.length > 0) {\n format.removedIds.splice(0, 1);\n }\n }\n };\n Editor.prototype.deleteSection = function (selection, section, nextSection, editAction) {\n if (editAction < 4) {\n if (this.owner.enableCollaborativeEditing) {\n var paragraphInfo = void 0;\n var positionInfo = void 0;\n // Find the start linear index of deleted HeadersFooters\n var headerFooterWidget = this.owner.documentHelper.headersFooters[section.sectionIndex]['0'];\n if (!isNullOrUndefined(headerFooterWidget)) {\n paragraphInfo = { 'paragraph': headerFooterWidget.firstChild, 'offset': 0 };\n positionInfo = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false });\n this.editorHistory.currentBaseHistoryInfo.headerFooterStart = positionInfo.position;\n }\n // Find the end linear index of deleted HeadersFooters\n var keyCount = Object.keys(this.owner.documentHelper.headersFooters[section.sectionIndex]).length;\n if (keyCount > 0) {\n headerFooterWidget = this.owner.documentHelper.headersFooters[section.sectionIndex][(keyCount - 1).toString()];\n if (!isNullOrUndefined(headerFooterWidget)) {\n var paraLength = this.owner.selectionModule.getParagraphLength(headerFooterWidget.lastChild);\n paragraphInfo = { 'paragraph': headerFooterWidget.lastChild, 'offset': paraLength + 1 };\n positionInfo = this.owner.selectionModule.getPositionInfoForHeaderFooter(paragraphInfo, { position: 0, done: false });\n this.editorHistory.currentBaseHistoryInfo.headerFooterEnd = positionInfo.position;\n }\n }\n }\n this.combineSectionInternal(selection, section, nextSection);\n }\n //Copies the section properties, if this is last paragraph of section.\n if (editAction > 2) {\n section.sectionFormat.copyFormat(nextSection.sectionFormat);\n }\n };\n /**\n *\n * @private\n */\n Editor.prototype.combineSectionInternal = function (selection, section, nextSection) {\n // if (section.sectionFormat.isEqualFormat(nextSection.sectionFormat)) {\n // } else {\n var bodyWidget = section.getSplitWidgets()[0];\n var currentSection = [];\n var previousY = bodyWidget.y;\n this.combineSectionChild(bodyWidget, currentSection, true);\n bodyWidget = currentSection[0];\n var lastBlockIndex = bodyWidget.lastChild.index;\n this.updateBlockIndex(lastBlockIndex + 1, nextSection.firstChild);\n var insertIndex = 0;\n var containerWidget = nextSection;\n containerWidget.y = previousY;\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n var block = bodyWidget.childWidgets.splice(i, 1)[0];\n containerWidget.childWidgets.splice(insertIndex, 0, block);\n block.containerWidget = containerWidget;\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, block.bodyWidget, block, false);\n block = block.getSplitWidgets().pop();\n containerWidget = block.containerWidget;\n insertIndex = block.indexInOwner + 1;\n i--;\n }\n if (bodyWidget.sectionIndex > 0 && this.documentHelper.headersFooters[bodyWidget.sectionIndex]) {\n bodyWidget.removedHeaderFooters = [];\n var headerFooters = this.documentHelper.headersFooters.splice(bodyWidget.sectionIndex, 1)[0];\n var keys = Object.keys(headerFooters);\n for (var i = 0; i < keys.length; i++) {\n var headerWidgetIn = headerFooters[keys[i]];\n //if (headerWidgetIn.page) {\n this.removeFieldInWidget(headerWidgetIn);\n // Remove content control\n this.removeFieldInWidget(headerWidgetIn, false, true);\n //}\n headerWidgetIn.page = undefined;\n }\n bodyWidget.removedHeaderFooters.push(headerFooters);\n }\n this.updateSectionIndex(undefined, nextSection, false);\n this.addRemovedNodes(bodyWidget);\n this.documentHelper.removeEmptyPages();\n if (this.editorHistory && this.editorHistory.isUndoing && !(this.editorHistory.currentBaseHistoryInfo && (this.editorHistory.currentBaseHistoryInfo.endRevisionLogicalIndex || this.editorHistory.currentBaseHistoryInfo.lastElementRevision))) {\n nextSection.sectionFormat = section.sectionFormat;\n }\n var page = nextSection.page;\n do {\n this.documentHelper.layout.layoutHeaderFooter(page.bodyWidgets[0], this.viewer, page);\n page = page.nextPage;\n } while (page);\n // }\n };\n /* eslint-disable max-len */\n Editor.prototype.checkAndInsertBlock = function (block, start, end, editAction, previousParagraph) {\n if (block instanceof ParagraphWidget && block === start.paragraph || block instanceof TableWidget) {\n var newParagraph = void 0; //Adds an empty paragraph, to ensure minimal content.\n if (isNullOrUndefined(block.nextRenderedWidget) && (isNullOrUndefined(previousParagraph) || previousParagraph.nextRenderedWidget instanceof TableWidget)) {\n newParagraph = new ParagraphWidget();\n if (editAction === 1 && block instanceof ParagraphWidget && !isNullOrUndefined(block.paragraphFormat.baseStyle) && block.paragraphFormat.baseStyle.name === 'Normal') {\n newParagraph.characterFormat.copyFormat(block.characterFormat);\n // Added the condition to remove removedIds when document contain single empty paragraph\n if (isNullOrUndefined(block.previousRenderedWidget) && newParagraph.characterFormat.removedIds.length !== 0) {\n while (newParagraph.characterFormat.removedIds.length > 0) {\n newParagraph.characterFormat.removedIds.splice(0, 1);\n }\n }\n newParagraph.paragraphFormat.copyFormat(block.paragraphFormat);\n }\n newParagraph.index = block.index + 1;\n newParagraph.containerWidget = block.containerWidget;\n if (block instanceof ParagraphWidget) {\n newParagraph.paragraphFormat.lineSpacing = block.paragraphFormat.lineSpacing;\n newParagraph.paragraphFormat.lineSpacingType = block.paragraphFormat.lineSpacingType;\n var style = this.documentHelper.styles.findByName('Normal');\n if (!isNullOrUndefined(style)) {\n newParagraph.paragraphFormat.baseStyle = new WParagraphStyle();\n newParagraph.paragraphFormat.baseStyle.copyStyle(style);\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(newParagraph.index, newParagraph.bodyWidget, newParagraph, false);\n if (block.containerWidget instanceof Widget) {\n block.containerWidget.childWidgets.push(newParagraph);\n }\n }\n return newParagraph;\n }\n return undefined;\n };\n Editor.prototype.splitParagraph = function (paragraphAdv, startLine, startOffset, endLine, endOffset, removeBlock) {\n var paragraph = new ParagraphWidget();\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n var blockIndex = paragraphAdv.index;\n var insertIndex = paragraphAdv.indexInOwner;\n this.moveInlines(paragraphAdv, paragraph, 0, startOffset, startLine, endOffset, endLine, removeBlock);\n if (paragraphAdv.containerWidget.childWidgets[insertIndex]) {\n var line = (paragraphAdv.containerWidget.childWidgets[insertIndex]);\n for (var i = 0; i < line.childWidgets.length; i++) {\n var linewid = line.childWidgets[i];\n for (var j = 0; j < linewid.children.length; j++) {\n var inline = linewid.children[j];\n if (inline instanceof FootnoteElementBox) {\n this.removeFootnote(inline);\n }\n }\n }\n }\n //Inserts new paragraph in the current text position.\n paragraphAdv.containerWidget.childWidgets.splice(insertIndex, 0, paragraph);\n paragraph.index = blockIndex;\n paragraph.containerWidget = paragraphAdv.containerWidget;\n this.updateNextBlocksIndex(paragraph, true);\n if (removeBlock) {\n this.removeBlock(paragraphAdv);\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(blockIndex, paragraph.containerWidget, paragraph, false);\n return paragraph;\n };\n Editor.prototype.removeCommentsInBlock = function (block) {\n if (block instanceof TableWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n var row = block.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n var block_1 = cell.childWidgets[k];\n this.removeCommentsInBlock(block_1);\n }\n }\n }\n }\n else {\n this.removeCommentInPara(block);\n }\n };\n Editor.prototype.removeCommentInPara = function (block) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n var lineWidget = block.childWidgets[i];\n //Iterate through each line widgets.\n for (var j = 0; j < lineWidget.children.length; j++) {\n this.removeCommentsInline(lineWidget.children[j]);\n }\n }\n };\n Editor.prototype.removeCommentsInline = function (inline) {\n if (inline instanceof CommentCharacterElementBox) {\n if (inline.commentType === 1) {\n // if (!inline.comment.isReply) {\n // for (let i: number = 0; i < inline.comment.replyComments.length; i++) {\n // this.removeCommentsInline(inline.comment.replyComments[i].commentEnd);\n // }\n // }\n // if (inline.comment.commentStart && inline.comment.commentStart.commentMark) {\n // inline.comment.commentStart.removeCommentMark();\n // }\n // if (!inline.comment.isReply && this.documentHelper.comments.indexOf(inline.comment) >= 0\n // || inline.comment.isReply && this.documentHelper.comments.indexOf(inline.comment.ownerComment) >= 0) {\n // this.deleteCommentWidget(inline.comment);\n // }\n }\n else {\n inline.removeCommentMark();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeBlock = function (block, isSkipShifting, skipElementRemoval) {\n var index;\n var blockCollection;\n var containerWidget;\n if (!skipElementRemoval) {\n this.removeFieldInBlock(block);\n this.removeFieldInBlock(block, true);\n this.removeFieldInBlock(block, undefined, true);\n this.removeCommentsInBlock(block);\n }\n if (block.isInsideTable) {\n containerWidget = block.associatedCell;\n index = block.associatedCell.childWidgets.indexOf(block);\n blockCollection = block.associatedCell.childWidgets;\n this.updateNextBlocksIndex(block, false);\n block.associatedCell.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false);\n }\n else {\n containerWidget = block.containerWidget;\n for (var i = 0; i < block.childWidgets.length; i++) {\n var isSkipTracking = void 0;\n if (!this.isPasteRevertAction()) {\n isSkipTracking = this.skipTracking();\n }\n if (block.childWidgets[i] instanceof TableRowWidget && !isSkipTracking) {\n var tableDelete = block.childWidgets[i];\n this.removeDeletedCellRevision(tableDelete);\n }\n if (block.childWidgets[i] instanceof LineWidget) {\n var line = block.childWidgets[i];\n for (var j = 0; j < line.children.length; j++) {\n var element = line.children[j];\n if (element instanceof FootnoteElementBox && !this.selection.isEmpty) {\n this.removeFootnote(element);\n }\n }\n }\n }\n index = containerWidget.childWidgets.indexOf(block);\n blockCollection = containerWidget.childWidgets;\n this.updateNextBlocksIndex(block, false);\n containerWidget.childWidgets.splice(index, 1);\n block.containerWidget = undefined;\n containerWidget.height -= block.height;\n if (!isNullOrUndefined(containerWidget.containerWidget) && containerWidget.containerWidget instanceof FootNoteWidget) {\n containerWidget.containerWidget.height -= block.height;\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(block.index, containerWidget, block, false, isSkipShifting);\n }\n };\n Editor.prototype.removePrevParaMarkRevision = function (currentBlock, isFromDelete) {\n isFromDelete = isNullOrUndefined(isFromDelete) ? false : isFromDelete;\n if (this.owner.enableTrackChanges || currentBlock.characterFormat.revisions.length != 0) {\n var currentPara = currentBlock;\n var rangeIndex = -1;\n var revision = void 0;\n var nonEmptyEndPara = currentPara;\n if (!isFromDelete && !isNullOrUndefined(nonEmptyEndPara.previousRenderedWidget)) {\n nonEmptyEndPara = nonEmptyEndPara.previousRenderedWidget;\n }\n if (nonEmptyEndPara.characterFormat.revisions.length > 0) {\n revision = nonEmptyEndPara.characterFormat.revisions[nonEmptyEndPara.characterFormat.revisions.length - 1];\n rangeIndex = revision.range.indexOf(nonEmptyEndPara.characterFormat);\n }\n if (rangeIndex >= 0 && !isNullOrUndefined(revision)) {\n var lastRange = revision.range[rangeIndex];\n var isParaMark = lastRange instanceof WCharacterFormat;\n if (isParaMark) {\n revision.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n if (nonEmptyEndPara.characterFormat && nonEmptyEndPara.characterFormat.revisions.indexOf(revision) > -1) {\n nonEmptyEndPara.characterFormat.revisions.splice(nonEmptyEndPara.characterFormat.revisions.indexOf(revision), 1);\n }\n if (revision.range.length == 0) {\n this.owner.revisionsInternal.remove(revision);\n }\n }\n }\n }\n };\n Editor.prototype.isPasteRevertAction = function () {\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n return true;\n }\n return false;\n };\n Editor.prototype.toCheckForTrack = function (block) {\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n if (block instanceof TableWidget && block.childWidgets.length > 0) {\n var rowFormat = block.childWidgets[0].rowFormat;\n if ((rowFormat.revisions.length > 0 && rowFormat.revisions[0].revisionType !== 'Insertion'\n && rowFormat.revisions[0].author === (this.owner.currentUser === '' ? 'Guest user' : this.owner.currentUser))\n || (rowFormat.revisions.length === 0)) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * @private\n */\n Editor.prototype.removeFootnote = function (element, paragraph) {\n if (element.paragraph.bodyWidget.page.footnoteWidget) {\n var footnoteWidget = element.paragraph.bodyWidget.page.footnoteWidget;\n for (var j = 0; j < footnoteWidget.bodyWidgets.length; j++) {\n if (element === (footnoteWidget.bodyWidgets[j]).footNoteReference) {\n footnoteWidget.height -= footnoteWidget.bodyWidgets[j].childWidgets[0].height;\n if (this.owner.enableTrackChanges) {\n for (var i = 0; i < footnoteWidget.bodyWidgets[j].childWidgets.length; i++) {\n this.removeRevisionForBlock(footnoteWidget.bodyWidgets[j].childWidgets[i], undefined, false, true);\n }\n }\n footnoteWidget.bodyWidgets.splice(j, 1);\n j--;\n this.isFootnoteElementRemoved = true;\n }\n }\n if (footnoteWidget.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.footnoteWidget = undefined;\n }\n }\n this.documentHelper.footnoteCollection.splice(this.documentHelper.footnoteCollection.indexOf(element), 1);\n this.updateFootNoteIndex();\n };\n Editor.prototype.removeEndnote = function (element, paragraph) {\n var lastpage = this.documentHelper.pages.length;\n var bodyWidget = this.documentHelper.pages[lastpage - 1].bodyWidgets[0];\n if (bodyWidget.page.endnoteWidget) {\n var endnoteWidget = bodyWidget.page.endnoteWidget;\n for (var j = 0; j < endnoteWidget.bodyWidgets.length; j++) {\n if (element === (endnoteWidget.bodyWidgets[j]).footNoteReference) {\n endnoteWidget.height -= endnoteWidget.bodyWidgets[j].childWidgets[0].height;\n if (this.owner.enableTrackChanges) {\n for (var i = 0; i < endnoteWidget.bodyWidgets[j].childWidgets.length; i++) {\n this.removeRevisionForBlock(endnoteWidget.bodyWidgets[j].childWidgets[i], undefined, false, true);\n }\n }\n endnoteWidget.bodyWidgets.splice(j, 1);\n this.isEndnoteElementRemoved = true;\n j--;\n }\n }\n if (endnoteWidget.bodyWidgets.length === 0) {\n bodyWidget.page.endnoteWidget = undefined;\n }\n }\n this.documentHelper.endnoteCollection.splice(this.documentHelper.endnoteCollection.indexOf(element), 1);\n this.updateEndNoteIndex();\n };\n Editor.prototype.removeAutoShape = function (inline) {\n var shapeIndex = inline.line.paragraph.floatingElements.indexOf(inline);\n var floatingElementIndex = inline.line.paragraph.bodyWidget.floatingElements.indexOf(inline);\n if (floatingElementIndex > -1) {\n inline.line.paragraph.bodyWidget.floatingElements.splice(floatingElementIndex, 1);\n }\n inline.line.paragraph.floatingElements.splice(shapeIndex, 1);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeField = function (block, isBookmark, isContentControl) {\n var collection = this.documentHelper.fields;\n if (isBookmark) {\n collection = this.documentHelper.bookmarks.keys;\n }\n else if (isContentControl) {\n collection = this.documentHelper.contentControlCollection;\n }\n if (block.floatingElements.length > 0) {\n for (var z = 0; z < block.floatingElements.length; z++) {\n var inline = block.floatingElements[z];\n this.removeAutoShape(inline);\n z--;\n }\n }\n for (var i = 0; i < collection.length; i++) {\n var element = isBookmark ?\n this.documentHelper.bookmarks.get(collection[i]) : collection[i];\n if (element.line.paragraph === block || (element instanceof BookmarkElementBox && !isNullOrUndefined(element.reference) && element.reference.line.paragraph === block)) {\n if (isBookmark) {\n this.documentHelper.bookmarks.remove(collection[i]);\n element.line.children.splice(element.indexInOwner, 1);\n if (!isNullOrUndefined(element.line.paragraph.associatedCell)) {\n var cell = element.line.paragraph.associatedCell;\n cell.isRenderBookmarkStart ? cell.isRenderBookmarkStart = false : cell.isRenderBookmarkEnd = false;\n }\n var endBookMarkElement = element.reference;\n if (endBookMarkElement) {\n endBookMarkElement.line.children.splice(endBookMarkElement.indexInOwner, 1);\n }\n if (endBookMarkElement && !isNullOrUndefined(endBookMarkElement.line.paragraph.associatedCell)) {\n var cell = endBookMarkElement.line.paragraph.associatedCell;\n cell.isRenderBookmarkStart ? cell.isRenderBookmarkStart = false : cell.isRenderBookmarkEnd = false;\n }\n }\n else if (isContentControl) {\n this.documentHelper.contentControlCollection.splice(i, 1);\n }\n else {\n this.documentHelper.fields.splice(i, 1);\n if (this.documentHelper.formFields.indexOf(element) !== -1) {\n this.documentHelper.formFields.splice(this.documentHelper.formFields.indexOf(element), 1);\n }\n }\n i--;\n }\n }\n if (this.documentHelper.footnoteCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.footnoteCollection.length; i++) {\n var element = this.documentHelper.footnoteCollection[i];\n if (element.line.paragraph === block) {\n if (element.paragraph.bodyWidget.page.footnoteWidget) {\n var footnote = element.paragraph.bodyWidget.page.footnoteWidget;\n for (var j = 0; j < footnote.bodyWidgets.length; j++) {\n if (element === (footnote.bodyWidgets[j]).footNoteReference) {\n footnote.height -= (footnote.bodyWidgets[j]).height;\n footnote.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (footnote.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.footnoteWidget = undefined;\n }\n }\n this.documentHelper.footnoteCollection.splice(i, 1);\n i--;\n }\n }\n }\n if (this.documentHelper.endnoteCollection.length > 0) {\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n var element = this.documentHelper.endnoteCollection[i];\n if (element.line.paragraph === block) {\n if (element.paragraph.bodyWidget.page.endnoteWidget) {\n var endnote = element.paragraph.bodyWidget.page.endnoteWidget;\n for (var j = 0; j < endnote.bodyWidgets.length; j++) {\n if (element === (endnote.bodyWidgets[j]).footNoteReference) {\n endnote.height -= (endnote.bodyWidgets[j]).height;\n endnote.bodyWidgets.splice(j, 1);\n j--;\n }\n }\n if (endnote.bodyWidgets.length === 0) {\n element.paragraph.bodyWidget.page.endnoteWidget = undefined;\n }\n }\n this.documentHelper.endnoteCollection.splice(i, 1);\n i--;\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.getTabsInSelection = function () {\n var oldTabstops = [];\n var selection = this.owner.selectionModule;\n var selectedWidgets = selection.selectedWidgets.keys;\n var paragraphsInSelection = [];\n if (selectedWidgets.length === 0) {\n return selection.start.paragraph.paragraphFormat.getUpdatedTabs();\n }\n else if (selection.start.paragraph === selection.end.paragraph) {\n return selection.start.paragraph.paragraphFormat.getUpdatedTabs();\n }\n else if (selection.start.paragraph !== selection.end.paragraph) {\n paragraphsInSelection = this.owner.selectionModule.getParagraphsInSelection();\n }\n var para = paragraphsInSelection.length > 0 ? paragraphsInSelection[0] : undefined;\n var tabs = !isNullOrUndefined(para) ? para.paragraphFormat.getUpdatedTabs() : [];\n var isRemove = true;\n for (var j = 0; j < tabs.length; j++) {\n oldTabstops.push(tabs[j]);\n }\n for (var i = 1; i < paragraphsInSelection.length; i++) {\n var para_1 = paragraphsInSelection[i];\n var newCollection = para_1.paragraphFormat.getUpdatedTabs();\n var itemsToRemove = [];\n isRemove = true;\n for (var k = 0; k < oldTabstops.length; k++) {\n for (var j = 0; j < newCollection.length; j++) {\n if (newCollection[j].equals(oldTabstops[k])) {\n isRemove = false;\n break;\n }\n }\n if (isRemove) {\n itemsToRemove.push(oldTabstops[k]);\n }\n }\n for (var k = 0; k < itemsToRemove.length; k++) {\n oldTabstops.splice(oldTabstops.indexOf(itemsToRemove[k]), 1);\n }\n }\n return oldTabstops;\n };\n /**\n * @private\n */\n Editor.prototype.updateTabStopCollection = function (paragraph, newCollection, isReplace) {\n var oldCollection = paragraph.paragraphFormat.tabs;\n if (isReplace) {\n paragraph.paragraphFormat.tabs = [];\n for (var i = 0; i < newCollection.length; i++) {\n paragraph.paragraphFormat.tabs.push(newCollection[i]);\n }\n return;\n }\n for (var i = 0; i < newCollection.length; i++) {\n var newTab = newCollection[i];\n var index = -1;\n for (var j = 0; j < oldCollection.length; j++) {\n var oldTab = oldCollection[j];\n if (newTab.position === oldTab.position) {\n index = j;\n break;\n }\n else if (newTab.position < oldTab.position) {\n break;\n }\n }\n if (index >= 0) {\n this.modifyTabStop(oldCollection[index], newTab);\n }\n else {\n this.addTabStopToCollection(oldCollection, newTab);\n }\n }\n };\n Editor.prototype.modifyTabStop = function (oldTab, newTab) {\n oldTab.deletePosition = newTab.deletePosition;\n oldTab.tabJustification = newTab.tabJustification;\n oldTab.tabLeader = newTab.tabLeader;\n };\n /**\n * @private\n */\n Editor.prototype.removeTabStops = function (paragraphs, tabs) {\n for (var k = 0; k < paragraphs.length; k++) {\n var tabCollection = paragraphs[k].paragraphFormat.tabs;\n for (var i = 0; i < tabs.length; i++) {\n var tab = tabs[i];\n for (var j = 0; j < tabCollection.length; j++) {\n if (tabCollection[j].equals(tab)) {\n tabCollection.splice(j, 1);\n break;\n }\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.addTabStopToCollection = function (collection, tab, isReturnIndex) {\n var index = -1;\n for (var i = 0; i < collection.length; i++) {\n var element = collection[i];\n if (element.position > tab.position) {\n index = i;\n break;\n }\n }\n index = index === -1 ? collection.length : index;\n if (isReturnIndex) {\n return index;\n }\n collection.splice(index, 0, tab.clone());\n return index;\n };\n /**\n * @private\n * @param {IWidget} node Specifies the node.\n * @returns {void}\n */\n Editor.prototype.addRemovedNodes = function (node, isInsertBefore) {\n if (node instanceof CommentCharacterElementBox && node.commentType === 0 && node.commentMark) {\n node.removeCommentMark();\n }\n if (node instanceof ContentControl && node.type === 0) {\n this.documentHelper.contentControlCollection.splice(this.documentHelper.contentControlCollection.indexOf(node), 1);\n }\n if (node instanceof FieldElementBox && node.fieldType === 0) {\n if (this.documentHelper.fields.indexOf(node) !== -1) {\n this.documentHelper.fields.splice(this.documentHelper.fields.indexOf(node), 1);\n }\n if (this.documentHelper.formFields.indexOf(node) !== -1) {\n this.documentHelper.formFields.splice(this.documentHelper.formFields.indexOf(node), 1);\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (isInsertBefore) {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.splice(0, 0, node);\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(node);\n }\n }\n else if (this.editHyperlinkInternal) {\n this.nodes.push(node);\n }\n };\n Editor.prototype.deleteBlock = function (block, selection, start, end, editAction) {\n if (block instanceof ParagraphWidget) {\n this.deletePara(block, start, end, editAction);\n if (this.delBlockContinue && this.delBlock) {\n if (this.delSection) {\n var bodyWidget = block.bodyWidget instanceof BodyWidget ? block.bodyWidget : undefined;\n this.deleteSection(selection, this.delSection, bodyWidget, editAction);\n this.delSection = undefined;\n }\n if (this.delBlock.indexInOwner !== -1) {\n this.deleteBlock(this.delBlock, selection, start, end, editAction);\n }\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n else {\n this.deleteTableBlock(block, selection, start, end, editAction);\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.documentHelper.layout.reLayoutTable(block);\n }\n }\n };\n Editor.prototype.deleteTableCell = function (cellAdv, selection, start, end, editAction, isDeletecell) {\n var deletePreviousBlock = !(start.paragraph.isInsideTable && cellAdv.ownerTable.contains(start.paragraph.associatedCell));\n var previousBlock = cellAdv.ownerTable.previousRenderedWidget;\n if (start.paragraph.isInsideTable) {\n var containerCell = selection.getContainerCellOf(cellAdv, start.paragraph.associatedCell);\n if (containerCell.ownerTable.contains(start.paragraph.associatedCell)) {\n var startCell = selection.getSelectedCell(cellAdv, containerCell);\n var endCell = selection.getSelectedCell(start.paragraph.associatedCell, containerCell);\n if (selection.containsCell(containerCell, start.paragraph.associatedCell)) {\n //Selection end is in container cell.\n if (selection.isCellSelected(containerCell, start, end)) {\n //Container cell is completely selected.\n this.updateEditPosition(containerCell, selection);\n if (editAction === 1 || isDeletecell) {\n //Specifically handled for backspace. Delete selected cell in current table.\n this.deleteCellsInTable(cellAdv.ownerRow.ownerTable, selection, start, end, editAction);\n }\n else {\n //Delete contents within table cell or Copy contents within table cell to clipboard.\n var isCellCleared = this.deleteCell(containerCell, selection, editAction, true);\n if (!isCellCleared && editAction !== 2 && this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n else if (isCellCleared) {\n this.documentHelper.layout.reLayoutTable(containerCell.ownerRow.ownerTable);\n }\n }\n }\n else {\n if (startCell === containerCell) {\n this.deletePara(end.paragraph, start, end, editAction);\n if (this.delBlockContinue && this.delBlock) {\n if (this.delSection) {\n var para = end.paragraph;\n var bodyWidget = para.bodyWidget instanceof BodyWidget ? para.bodyWidget : undefined;\n this.deleteSection(selection, this.delSection, bodyWidget, editAction);\n this.delSection = undefined;\n }\n this.deleteBlock(this.delBlock, selection, start, end, editAction);\n this.delBlockContinue = false;\n this.delBlock = undefined;\n }\n }\n else {\n this.deleteContainer(startCell, selection, start, end, editAction);\n }\n }\n }\n else {\n if (editAction === 2) {\n //Delete contents within table cell.\n this.deleteCell(cellAdv, selection, 2, false);\n }\n else {\n //Delete other selected cells in current table.\n this.deleteCellsInTable(containerCell.ownerTable, selection, start, end, editAction);\n }\n }\n }\n else {\n //Selection end is different table.\n this.deleteContainer(containerCell, selection, start, end, editAction);\n }\n }\n else {\n //Selection end is outside table.\n var cell = selection.getContainerCell(cellAdv);\n //Added the condition to remove the entire table when the selection contains a table with the above paragraph.\n if (!isNullOrUndefined(this.editorHistory) && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.deleteTableBlock(cell.ownerTable, selection, start, end, editAction);\n deletePreviousBlock = false;\n }\n else {\n this.deleteContainer(cell, selection, start, end, editAction);\n }\n }\n if (deletePreviousBlock) {\n var sectionAdv = previousBlock.bodyWidget instanceof BodyWidget ? previousBlock.bodyWidget : undefined;\n // this.deleteContent(cellAdv.ownerTable, selection, editAction);\n if (!isNullOrUndefined(previousBlock)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(previousBlock, selection, start, end, editAction);\n }\n }\n };\n Editor.prototype.deleteCellsInTable = function (table, selection, start, end, editAction, endCells) {\n var clonedTable = undefined;\n var action = 'Delete';\n var isDeleteCells = false;\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n if (!isNullOrUndefined(endCells)) {\n endCell = endCells;\n }\n var startColumnIndex = startCell.columnIndex;\n var endColumnIndex = endCell.columnIndex + endCell.cellFormat.columnSpan - 1;\n var startRowIndex = startCell.rowIndex;\n var endRowIndex = endCell.rowIndex;\n var isRowSelected = this.isWholeRowSelected(startCell.ownerRow, startColumnIndex, endColumnIndex);\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n action = this.editorHistory.currentBaseHistoryInfo.action;\n isDeleteCells = this.editorHistory.currentBaseHistoryInfo.action === 'BackSpace' || this.editorHistory.currentBaseHistoryInfo.action === 'DeleteCells'\n || this.editorHistory.currentBaseHistoryInfo.action === 'InsertTable' || this.editorHistory.currentBaseHistoryInfo.action === 'RemoveRowTrack' || (isNullOrUndefined(startCell.ownerRow.previousWidget)\n && isNullOrUndefined(endCell.ownerRow.nextWidget) && this.editorHistory.currentBaseHistoryInfo.action === 'Cut');\n clonedTable = this.cloneTableToHistoryInfo(table);\n if (this.editorHistory.isRedoing && this.editorHistory.currentBaseHistoryInfo.action === 'RemoveRowTrack') {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row.index >= startRowIndex && row.index <= endRowIndex) {\n if (isRowSelected) {\n this.trackRowDeletion(row, false);\n }\n }\n }\n }\n if (this.editorHistory.currentBaseHistoryInfo.action === 'RemoveRowTrack') {\n return;\n }\n this.editorHistory.currentBaseHistoryInfo.action = isDeleteCells ? 'DeleteCells' : 'ClearCells';\n selection.owner.isLayoutEnabled = false;\n }\n //let cells: TableCellWidget[] = [];\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n if (!isRowSelected) {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n var tiltle = localizeValue.getConstant('UnTrack');\n var content = localizeValue.getConstant('Merge Track');\n localizeValue.setLocale(this.owner.locale);\n this.alertDialog = DialogUtility.alert({\n title: tiltle,\n content: content,\n showCloseIcon: true,\n okButton: {\n text: 'Ok', click: this.onConfirmedTableCellsDeletion.bind(this, table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action)\n },\n closeOnEscape: true, position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n });\n this.alertDialog.enableRtl = this.owner.enableRtl;\n }\n else {\n this.onConfirmedTableCellsDeletion(table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action);\n }\n }\n else {\n this.onConfirmedTableCellsDeletion(table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action);\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeDeletedCellRevision = function (row) {\n if (row.rowFormat.revisions.length > 0) {\n this.unlinkRangeFromRevision(row.rowFormat, true);\n }\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cellWidget = row.childWidgets[i];\n for (var j = 0; j < cellWidget.childWidgets.length; j++) {\n var paraWidget = cellWidget.childWidgets[j];\n if (!isNullOrUndefined(paraWidget) && paraWidget instanceof ParagraphWidget) {\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var lineWidget = paraWidget.childWidgets[lineIndex];\n if (!isNullOrUndefined(lineWidget.children)) {\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var element = lineWidget.children[elementIndex];\n if (element.revisions.length > 0) {\n this.unlinkRangeFromRevision(element, true);\n }\n }\n }\n }\n this.unlinkRangeFromRevision(paraWidget.characterFormat, true);\n }\n else if (!isNullOrUndefined(paraWidget) && paraWidget instanceof TableWidget) {\n for (var k = 0; k < paraWidget.childWidgets.length; k++) {\n var tableRow = paraWidget.childWidgets[k];\n this.removeDeletedCellRevision(tableRow);\n }\n }\n }\n }\n };\n Editor.prototype.onConfirmedTableCellsDeletion = function (table, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction, isRowSelected, action) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n var canRemoveRow = false;\n if (row.index >= startRowIndex && row.index <= endRowIndex) {\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n if (isRowSelected) {\n canRemoveRow = this.trackRowDeletion(row, false);\n if (canRemoveRow) {\n this.onConfirmedCellDeletion(row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction);\n }\n }\n else {\n this.onConfirmedCellDeletion(row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction);\n }\n }\n else {\n this.onConfirmedCellDeletion(row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction);\n }\n }\n if (!canRemoveRow && row.childWidgets.length === 0) {\n var rowToRemove = table.childWidgets[i];\n var prevRenderedRow = rowToRemove.previousRenderedWidget;\n while (!isNullOrUndefined(prevRenderedRow)) {\n for (var k = 0; k < prevRenderedRow.childWidgets.length; k++) {\n var cell = prevRenderedRow.childWidgets[k];\n if (rowToRemove.rowIndex < cell.ownerRow.rowIndex + cell.cellFormat.rowSpan) {\n cell.cellFormat.rowSpan--;\n }\n }\n prevRenderedRow = prevRenderedRow.previousRenderedWidget;\n }\n this.updateNextBlocksIndex(rowToRemove, false);\n table.childWidgets.splice(i, 1);\n i--;\n endRowIndex--;\n }\n }\n //Layouts the table after delete cells.\n selection.owner.isLayoutEnabled = true;\n if (table.childWidgets.length === 0) {\n selection.editPosition = this.selection.getHierarchicalIndex(table, '0');\n this.setActionInternal(selection, action);\n this.removeBlock(table);\n }\n else {\n // Before lay outing need to update table grid.\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.layout.reLayoutTable(table);\n }\n if (!isNullOrUndefined(this.alertDialog)) {\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n this.alertDialog.close();\n this.alertDialog = undefined;\n }\n };\n Editor.prototype.onConfirmedCellDeletion = function (row, selection, startRowIndex, endRowIndex, startColumnIndex, endColumnIndex, isDeleteCells, editAction) {\n var isStarted = false;\n var isCellCleared = false;\n this.removeDeletedCellRevision(row);\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n //this.removeRevisionForCell(cell, true);\n if (cell.columnIndex >= startColumnIndex && cell.columnIndex <= endColumnIndex) {\n if (!isStarted) {\n this.updateEditPosition(cell, selection);\n isStarted = true;\n }\n if (isDeleteCells) {\n //Specific for Backspace and Cut if selection includes all rows.\n var cell_1 = row.childWidgets[j];\n this.updateNextBlocksIndex(cell_1, false);\n for (var k = 0; k < cell_1.childWidgets.length; k++) {\n var para = cell_1.childWidgets[k];\n for (var l = 0; l < para.childWidgets.length; l++) {\n var block = para.childWidgets[l];\n if (block instanceof LineWidget) {\n var line = block;\n for (var j_2 = 0; j_2 < line.children.length; j_2++) {\n var element = line.children[j_2];\n if (element instanceof FootnoteElementBox) {\n this.removeFootnote(element);\n }\n }\n }\n }\n }\n row.childWidgets.splice(j, 1);\n j--;\n }\n else if (editAction < 4) {\n isCellCleared = this.deleteCell(cell, selection, editAction, false);\n }\n }\n }\n };\n Editor.prototype.removeRevisionForRow = function (rowWidget) {\n if (rowWidget.rowFormat.revisions.length > 0 && this.skipTracking()) {\n this.unlinkRangeFromRevision(rowWidget.rowFormat, true);\n this.addRemovedRevisionInfo(rowWidget.rowFormat, undefined);\n }\n };\n Editor.prototype.removeRevisionsInRow = function (rowWidget) {\n if (rowWidget.rowFormat.revisions.length > 0) {\n for (var i = 0; i < rowWidget.rowFormat.revisions.length; i++) {\n var rowRevision = rowWidget.rowFormat.revisions[i];\n this.unlinkWholeRangeInRevision(rowWidget.rowFormat, rowRevision);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeRevisionForCell = function (cellWidget, removeCollection) {\n for (var i = 0; i < cellWidget.childWidgets.length; i++) {\n if (cellWidget.childWidgets[i] instanceof ParagraphWidget) {\n var paraWidget = cellWidget.childWidgets[i];\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var lineWidget = paraWidget.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var currentElement = lineWidget.children[elementIndex];\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n this.unlinkRangeFromRevision(currentElement, removeCollection);\n this.addRemovedRevisionInfo(currentElement, undefined);\n }\n }\n }\n }\n else if (cellWidget.childWidgets[i] instanceof TableWidget) {\n this.removeRevisionForInnerTable(cellWidget.childWidgets[i]);\n }\n }\n };\n Editor.prototype.removeRevisionForInnerTable = function (tableWidget) {\n if (tableWidget.childWidgets.length > 0) {\n for (var i = 0; i < tableWidget.childWidgets.length; i++) {\n var row = tableWidget.childWidgets[i];\n if (!isNullOrUndefined(row)) {\n this.removeRevisionForRow(row);\n }\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeRevisionForBlock = function (paraWidget, revision, skipParaMark, addToRevisionInfo) {\n if (paraWidget.characterFormat.revisions.length > 0 && !skipParaMark) {\n if (addToRevisionInfo) {\n this.addRemovedRevisionInfo(paraWidget.characterFormat, undefined, false);\n }\n if (isNullOrUndefined(revision)) {\n this.unlinkRangeFromRevision(paraWidget.characterFormat, true);\n }\n else {\n this.unlinkRangeByRevision(paraWidget.characterFormat, revision);\n }\n paraWidget.characterFormat.revisions = [];\n }\n if (!isNullOrUndefined(paraWidget)) {\n for (var lineIndex = 0; lineIndex < paraWidget.childWidgets.length; lineIndex++) {\n var lineWidget = paraWidget.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var currentElement = lineWidget.children[elementIndex];\n if (currentElement instanceof FootnoteElementBox) {\n var nextRevision = currentElement.nextValidNodeForTracking;\n if (nextRevision.footnoteType === 'Footnote') {\n this.removeFootnote(nextRevision);\n }\n else {\n this.removeEndnote(nextRevision);\n }\n }\n if (!isNullOrUndefined(currentElement) && currentElement.revisions.length > 0) {\n if (addToRevisionInfo) {\n this.addRemovedRevisionInfo(currentElement, undefined, false);\n }\n if (isNullOrUndefined(revision)) {\n this.unlinkRangeFromRevision(currentElement, true);\n }\n else {\n this.unlinkRangeByRevision(currentElement, revision);\n }\n currentElement.revisions = [];\n }\n }\n }\n }\n };\n Editor.prototype.unlinkRangeByRevision = function (item, revision) {\n for (var i = 0; i < item.revisions.length; i++) {\n var currentRevision = item.revisions[i];\n if (currentRevision.author === revision.author && currentRevision.revisionType === revision.revisionType) {\n item.revisions.splice(item.revisions.indexOf(revision), 1);\n var rangeIndex = revision.range.indexOf(item);\n revision.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n }\n }\n };\n Editor.prototype.isWholeRowSelected = function (ownerRow, startColumnIndex, endColumnIndex) {\n var columnCount = startColumnIndex + endColumnIndex;\n if (startColumnIndex === 0 && ownerRow.childWidgets.length - 1 === columnCount) {\n return true;\n }\n return false;\n };\n Editor.prototype.deleteCell = function (cell, selection, editAction, copyChildToClipboard) {\n //Checks whether this is last paragraph of owner textbody.\n var block = cell.childWidgets[0];\n if (cell.childWidgets.length === 1 && block instanceof ParagraphWidget && block.isEmpty()) {\n return false;\n }\n var totalLength = cell.childWidgets.length - 1;\n for (var i = cell.childWidgets.length - 1; i > -1; i--) {\n block = cell.childWidgets[i];\n if (editAction < 4) {\n //Checks whether this is last paragraph of owner textbody.\n if (block instanceof ParagraphWidget && i === totalLength) {\n //Preserves empty paragraph, to ensure minimal content.\n var paragraph = block;\n //Removes all the inlines in the paragraph.\n if (!this.checkClearCells(selection)) {\n for (var j = paragraph.childWidgets.length - 1; j >= 0; j--) {\n var inline = paragraph.childWidgets[j];\n for (var k = inline.children.length - 1; k >= 0; k--) {\n var element = inline.children[k];\n if (element instanceof FootnoteElementBox) {\n this.removeFootnote(element);\n }\n else if (element instanceof BookmarkElementBox && element.bookmarkType === 0 && this.documentHelper.bookmarks.containsKey(element.name)) {\n this.documentHelper.bookmarks.remove(element.name);\n }\n this.unLinkFieldCharacter(element);\n inline.children.splice(k, 1);\n }\n if (paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(j, 1);\n }\n }\n }\n else if (!paragraph.isEmpty()) {\n this.removeInlines(paragraph, paragraph.firstChild, 0, paragraph.lastChild, paragraph.lastChild.getEndOffset(), editAction);\n }\n continue;\n }\n this.removeBlock(block);\n if (this.checkClearCells(selection)) {\n this.addRemovedNodes(block);\n if (cell.childWidgets.length === 1) {\n //Add Index for line Widget\n selection.editPosition = this.selection.getHierarchicalIndex(cell.childWidgets[0], '0');\n this.updateHistoryPosition(selection.editPosition, true);\n }\n }\n }\n }\n return true;\n };\n Editor.prototype.paragrapghBookmarkCollection = function (block, existingBookmark) {\n var bookmarkCol = this.documentHelper.bookmarks;\n for (var i = 0; i < bookmarkCol.length; i++) {\n var bookmark = this.documentHelper.bookmarks.get(bookmarkCol.keys[i]);\n if (bookmark.paragraph === block) {\n existingBookmark.push(bookmark);\n }\n }\n return existingBookmark;\n };\n Editor.prototype.deleteContainer = function (cell, selection, start, end, editAction) {\n var ownerTable = cell.ownerTable;\n if (selection.containsRow(ownerTable.lastChild, end.paragraph.associatedCell) && !this.owner.enableTrackChanges) {\n this.deleteContent(ownerTable, selection, editAction);\n }\n else {\n if (this.toCheckForTrack(ownerTable)) {\n this.cloneTableToHistoryInfo(ownerTable);\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var inline = ownerTable.childWidgets[i];\n this.trackRowDeletion(inline);\n if (end.paragraph.isInsideTable && selection.containsRow(inline, end.paragraph.associatedCell)) {\n this.documentHelper.layout.reLayoutTable(ownerTable);\n return;\n }\n }\n }\n else {\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var row = ownerTable.childWidgets[i];\n if (editAction < 4) {\n this.updateNextBlocksIndex(row, false);\n ownerTable.childWidgets.splice(i, 1);\n this.addRemovedNodes(row);\n i--;\n }\n if (end.paragraph.isInsideTable && selection.containsRow(row, end.paragraph.associatedCell)) {\n this.documentHelper.layout.reLayoutTable(ownerTable);\n return;\n }\n }\n }\n }\n };\n Editor.prototype.deleteTableBlock = function (table, selection, start, end, editAction) {\n table = table.combineWidget(this.owner.viewer);\n if (start.paragraph.isInsideTable && table.contains(start.paragraph.associatedCell)) {\n var block = table.previousRenderedWidget;\n var previousBlock = this.checkAndInsertBlock(table, start, end, editAction, block instanceof ParagraphWidget ? block : undefined);\n if (selection.containsRow(table.firstChild, start.paragraph.associatedCell)) {\n if (this.owner.enableTrackChanges) {\n this.cloneTableToHistoryInfo(table);\n for (var i = 0; i < table.childWidgets.length; i++) {\n this.trackRowDeletion(table.childWidgets[i]);\n }\n // Added the condition to remove the entire table when the selection contains a table with the below paragraph.\n if (!isNullOrUndefined(this.editorHistory) && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.removeBlock(table);\n }\n }\n else {\n this.deleteContent(table, selection, editAction);\n }\n }\n else {\n if (this.owner.enableTrackChanges) {\n if (isNullOrUndefined(end.paragraph.associatedCell) && !end.paragraph.isInsideTable) {\n //let previousChild: TableCellWidget = end.paragraph.previousRenderedWidget.lastChild as TableCellWidget;\n var endCells = table.lastChild.lastChild;\n this.deleteCellsInTable(table, selection, start, end, editAction, endCells);\n }\n }\n else {\n var newTable = this.splitTable(table, start.paragraph.associatedCell.ownerRow);\n this.deleteContent(table, selection, editAction);\n this.documentHelper.layout.layoutBodyWidgetCollection(newTable.index, newTable.containerWidget, newTable, false);\n }\n }\n if (!isNullOrUndefined(previousBlock)) {\n selection.editPosition = this.selection.getHierarchicalIndex(previousBlock, '0');\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.endPosition = selection.editPosition;\n }\n }\n }\n else {\n var blockAdv = table.previousRenderedWidget;\n var sectionAdv = table.bodyWidget instanceof BodyWidget ? table.bodyWidget : undefined;\n if (this.owner.enableTrackChanges) {\n this.cloneTableToHistoryInfo(table);\n for (var i = 0; i < table.childWidgets.length; i++) {\n this.trackRowDeletion(table.childWidgets[i]);\n }\n if (!isNullOrUndefined(this.editorHistory) && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.removeBlock(table);\n }\n }\n else {\n this.deleteContent(table, selection, editAction);\n }\n if (!isNullOrUndefined(blockAdv)) {\n // let nextSection: WSection = blockAdv.section instanceof WSection ? blockAdv.section as WSection : undefined;\n // if (sectionAdv !== nextSection) {\n // this.deleteSection(selection, sectionAdv, nextSection, editAction);\n // }\n //Goto the next block.\n this.deleteBlock(blockAdv, selection, start, end, editAction);\n }\n }\n };\n Editor.prototype.splitTable = function (table, splitEndRow) {\n var newTable = new TableWidget();\n newTable.tableFormat.copyFormat(table.tableFormat);\n newTable.index = table.index;\n //Moves the rows to new table.\n for (var i = 0; i < table.childWidgets.length; i++) {\n var row = table.childWidgets[i];\n if (row === splitEndRow) {\n break;\n }\n newTable.childWidgets.push(row);\n row.containerWidget = newTable;\n table.childWidgets.splice(i, 1);\n i--;\n }\n //Inserts new table in the current text position.\n var insertIndex = table.getIndex();\n table.containerWidget.childWidgets.splice(insertIndex, 0, newTable);\n newTable.containerWidget = table.containerWidget;\n this.updateNextBlocksIndex(newTable, true);\n return newTable;\n };\n Editor.prototype.updateEditPosition = function (cell, selection) {\n var firstParagraph = this.documentHelper.getFirstParagraphInCell(cell);\n selection.editPosition = this.selection.getHierarchicalIndex(firstParagraph, '0');\n };\n Editor.prototype.deleteContent = function (table, selection, editAction) {\n if (editAction < 4) {\n this.removeBlock(table);\n this.addRemovedNodes(table);\n }\n };\n Editor.prototype.setActionInternal = function (selection, action) {\n if (this.documentHelper.owner.enableHistoryMode && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.action = action;\n }\n };\n Editor.prototype.checkClearCells = function (selection) {\n return this.editorHistory && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action !== 'ClearCells';\n };\n Editor.prototype.isEndInAdjacentTable = function (paragraph, endParagraph) {\n var start = this.selection.getHierarchicalIndex(paragraph, '');\n var end = this.selection.getHierarchicalIndex(endParagraph, '');\n var selectionStart = start.split(';');\n var selectionEnd = end.split(';');\n return selectionStart.length < selectionEnd.length;\n };\n /**\n * @private\n * @param table\n * @returns {TableWidget}\n */\n Editor.prototype.cloneTableToHistoryInfo = function (table) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n //Clones the entire table to preserve in history.\n var clonedTable = table.clone();\n clonedTable.index = table.index;\n //Preserves the cloned table in history info, for future undo operation.\n this.editorHistory.currentBaseHistoryInfo.removedNodes.push(clonedTable);\n //Sets the insert position in history info as current table.\n if (this.documentHelper.selection.start.paragraph.isInsideTable &&\n this.documentHelper.selection.start.paragraph.associatedCell.ownerTable === table) {\n this.updateHistoryPosition(this.selection.getHierarchicalIndex(table, '0'), true);\n }\n return clonedTable;\n }\n return undefined;\n };\n Editor.prototype.insertParagraphPaste = function (paragraph, currentParagraph, start, end, isCombineNextParagraph, editAction, isCombineLastBlock, skipHistoryCollection) {\n if (this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n var nextParagraph = this.selection.getNextParagraphBlock(currentParagraph);\n if (nextParagraph) {\n if (start.offset > 0 && nextParagraph === end.paragraph && paragraph === start.paragraph\n && this.editorHistory.currentBaseHistoryInfo.action === 'Paste') {\n //Combines the current paragraph with end paragraph specific for undo/redo paste action.\n var insertIndex = 0;\n this.removeBlock(currentParagraph);\n this.documentHelper.layout.clearListElementBox(nextParagraph);\n this.documentHelper.layout.clearListElementBox(currentParagraph);\n for (var i = 0; i < currentParagraph.childWidgets.length; i++) {\n var line = currentParagraph.childWidgets[i];\n nextParagraph.childWidgets.splice(insertIndex, 0, line);\n currentParagraph.childWidgets.splice(i, 1);\n i--;\n insertIndex++;\n line.paragraph = nextParagraph;\n }\n this.documentHelper.layout.reLayoutParagraph(nextParagraph, 0, 0);\n isCombineNextParagraph = false;\n var offset = this.selection.editPosition.substring(this.selection.editPosition.lastIndexOf(';') + 1);\n this.selection.editPosition = this.selection.getHierarchicalIndex(nextParagraph, offset);\n }\n }\n }\n if (isCombineNextParagraph) {\n this.deleteParagraphMark(currentParagraph, this.selection, editAction, false, isCombineLastBlock, skipHistoryCollection);\n }\n };\n Editor.prototype.removeInlines = function (paragraph, startLine, startOffset, endLine, endOffset, editAction) {\n var isRemoved = false;\n this.documentHelper.layout.clearListElementBox(paragraph);\n var startIndex = paragraph.childWidgets.indexOf(startLine);\n var startPosition = this.selection.start.clone();\n var endPosition = this.selection.end.clone();\n var editPosition = this.selection.editPosition;\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n var endParagraphInfo = this.selection.getParagraphInfo(this.selection.end);\n var startAtIndex = this.selection.getHierarchicalIndex(paragraphInfo.paragraph, paragraphInfo.offset.toString());\n var endIndex = this.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var lineWidget = paragraph.childWidgets[i];\n if (startLine === lineWidget && endLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, endOffset, editAction);\n isRemoved = true;\n break;\n }\n if (endLine === lineWidget) {\n paragraph.isLayouted = false;\n isRemoved = true;\n this.removeContent(lineWidget, 0, endOffset, editAction);\n }\n else if (startLine === lineWidget) {\n this.removeContent(lineWidget, startOffset, this.documentHelper.selection.getLineLength(lineWidget), editAction);\n break;\n }\n else if (isRemoved) {\n this.removeContent(lineWidget, 0, this.documentHelper.selection.getLineLength(lineWidget), editAction);\n }\n }\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.selection.start.setPositionInternal(startPosition);\n this.selection.end.setPositionInternal(endPosition);\n if (this.skipReplace) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = undefined;\n this.updateInsertPosition();\n }\n this.selection.editPosition = editPosition;\n }\n if (isRemoved) {\n paragraph.isLayouted = true;\n this.removeEmptyLine(paragraph);\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n if (this.selection.start.currentWidget.indexInOwner === -1 && this.owner.enableTrackChanges && !this.skipTracking()) {\n var startPos = this.selection.getTextPosBasedOnLogicalIndex(startAtIndex);\n this.selection.start.setPositionInternal(startPos);\n }\n if (this.selection.end.currentWidget.indexInOwner === -1 && this.owner.enableTrackChanges && !this.skipTracking()) {\n var endPos = this.selection.getTextPosBasedOnLogicalIndex(endIndex);\n this.selection.end.setPositionInternal(endPos);\n }\n }\n };\n Editor.prototype.skipTracking = function () {\n if (!isNullOrUndefined(this.editorHistory) && (this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n return true;\n }\n else if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && (this.editorHistory.currentBaseHistoryInfo.action === 'Reject Change' || this.editorHistory.currentBaseHistoryInfo.action === 'Accept Change')) {\n return true;\n }\n return false;\n };\n Editor.prototype.canHandleDeletion = function () {\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && (this.editorHistory.currentBaseHistoryInfo.action === 'DeleteRow')) {\n return true;\n }\n return false;\n };\n /**\n *\n * @param comment\n * Deletes comment start and end markers along with its comment widgets.\n */\n Editor.prototype.deleteCommentInSelection = function (comment) {\n //if comment end mark is in selection, both comment start and end markers will get deleted along with its comment widgets.\n var curentBaseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && !this.editorHistory.currentHistoryInfo\n && !(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.initComplexHistory('DeleteCommentInline');\n }\n this.deleteCommentInternal(comment);\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n if (!(this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n this.editorHistory.currentHistoryInfo.addModifiedAction(curentBaseHistoryInfo);\n }\n this.selection.editPosition = curentBaseHistoryInfo.insertPosition;\n this.editorHistory.currentHistoryInfo.insertPosition = this.selection.editPosition;\n this.editorHistory.currentBaseHistoryInfo = curentBaseHistoryInfo;\n }\n };\n /**\n * @private\n */\n Editor.prototype.removeContent = function (lineWidget, startOffset, endOffset, editAction, skipHistoryCollection) {\n var count = this.selection.getLineLength(lineWidget);\n var startText = undefined;\n var textCount = 0;\n var lastText = undefined;\n for (var i = lineWidget.children.length - 1; i >= 0; i--) {\n var inline = lineWidget.children[i];\n inline.isWidthUpdated = false;\n if (isNullOrUndefined(editAction) || (editAction !== 2 && editAction !== 1)) {\n for (var k = 0; k < lineWidget.children.length; k++) {\n var elementbox = lineWidget.children[k];\n if (elementbox instanceof TextElementBox) {\n var text = elementbox.text;\n if (text.length + textCount > startOffset && !(textCount > startOffset)) {\n startText = text[startOffset - textCount - 1];\n if (isNullOrUndefined(startText) && (startOffset - textCount) === 0) {\n startText = lastText;\n }\n }\n // tslint:disable-next-line:max-line-length\n if (text.length + textCount > endOffset) {\n if ((text[endOffset - textCount] === ' ' && startOffset === 0) || (startText === ' ' && text[endOffset - textCount] === ' ')) {\n endOffset += 1;\n }\n }\n lastText = text[text.length - 1];\n }\n textCount += elementbox.length;\n }\n }\n if (endOffset <= count - inline.length) {\n count -= inline.length;\n continue;\n }\n var endIndex = inline.length;\n if (count > endOffset && (count - endIndex < endOffset)) {\n endIndex = endOffset - (count - inline.length);\n }\n var startIndex = 0;\n if (count - inline.length < startOffset) {\n startIndex = startOffset - (count - inline.length);\n }\n if (count > endOffset) {\n count -= (inline.length - endIndex);\n }\n if (startIndex === 0 && endIndex === inline.length) {\n if (!this.owner.enableTrackChanges || this.owner.enableTrackChanges && this.skipTracking()) {\n if (!(this.editorHistory && (this.editorHistory.isUndoing || this.editorHistory.isRedoing))) {\n if (inline instanceof BookmarkElementBox) {\n this.removedBookmarkElements.push(inline);\n }\n }\n if (inline instanceof BookmarkElementBox) {\n if (this.documentHelper.bookmarks.containsKey(inline.name)) {\n if (this.owner.enableCollaborativeEditing && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.markerData.push({ bookmarkName: inline.name });\n }\n this.documentHelper.bookmarks.remove(inline.name);\n }\n }\n }\n if ((inline instanceof ImageElementBox && inline.textWrappingStyle !== 'Inline') || inline instanceof ShapeElementBox) {\n this.removeAutoShape(inline);\n }\n //clear form field revisions if it is intentionally deleted.\n if (this.skipFieldDeleteTracking && inline.revisions.length > 0) {\n var fieldInline = inline;\n if (fieldInline instanceof FieldElementBox) {\n if (fieldInline.fieldType === 1 || fieldInline.fieldType === 2) {\n fieldInline = fieldInline.fieldBegin;\n }\n this.clearFieldElementRevisions(fieldInline, inline.revisions);\n }\n }\n if (this.canHandleDeletion() || (this.owner.enableTrackChanges && (!this.skipTracking() || (inline.paragraph.isInsideTable && !isNullOrUndefined(this.editorHistory) && this.editorHistory.isRedoing && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action === \"RemoveRowTrack\")) && !this.skipFieldDeleteTracking)) {\n if (!this.skipTableElements && !this.skipFootNoteDeleteTracking && !skipHistoryCollection) {\n this.addRemovedNodes(inline.clone());\n }\n this.handleDeleteTracking(inline, startOffset, endOffset, i, skipHistoryCollection);\n }\n else {\n // if (editAction < 4) {\n if (inline instanceof FootnoteElementBox) {\n inline.isLayout = false;\n }\n this.unLinkFieldCharacter(inline);\n this.unlinkRangeFromRevision(inline, true);\n this.addRemovedRevisionInfo(inline, undefined);\n // Added the condition to skip adding inner elements of the table to separate collection of history if the entire table is selected.\n if (!(!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action === 'RemoveRowTrack' && inline.paragraph.isInsideTable)) {\n this.addRemovedNodes(inline);\n }\n if (inline instanceof EditRangeStartElementBox) {\n this.removedEditRangeStartElements.push(inline);\n if (inline.columnFirst != -1 && inline.columnLast != -1) {\n this.removeEditRangeFromCollection(inline);\n }\n }\n else if (inline instanceof EditRangeEndElementBox) {\n this.removedEditRangeEndElements.push(inline);\n }\n lineWidget.children.splice(i, 1);\n if (!isNullOrUndefined(lineWidget.layoutedElements) && lineWidget.layoutedElements.length > 0) {\n lineWidget.layoutedElements.splice(i, 1);\n }\n }\n }\n else if (inline instanceof TextElementBox) {\n var span = this.handleDeleteTracking(inline, startIndex, endIndex);\n //if (editAction < 4) {\n // let span: TextElementBox = new TextElementBox();\n // span.characterFormat.copyFormat(inline.characterFormat);\n // span.text = inline.text.substr(startIndex, endIndex - startIndex);\n // for (let i = inline.revisions.length - 1; i >= 0; i--) {\n // let revision: Revision = inline.revisions[i];\n // let splittedRange: object[] = this.splitRevisionByElement(inline, revision);\n // this.insertRevision(span, revision.revisionType, revision.author, revision.date, splittedRange);\n // }\n // inline.text = inline.text.slice(0, startIndex) + inline.text.slice(endIndex);\n if (!isNullOrUndefined(span)) {\n if (!this.skipTableElements) {\n if (inline.revisions.length > 0) {\n this.addRemovedRevisionInfo(inline, span);\n }\n this.addRemovedNodes(span);\n }\n }\n // else {\n // this.insertTextInternal(span.text, false, 'Deletion');\n // this.editorHistory.currentBaseHistoryInfo.revisionToRemove = inline.revisions[inline.revisions.length - 1];\n // // let info: ElementInfo = this.selection.start.currentWidget.getInline(startOffset +1, 0);\n // // let element: ElementBox = info.element.clone();\n // //this.addRemovedNodes(span);\n // }\n }\n if ((!this.owner.enableTrackChanges || this.editorHistory.isUndoing) && inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n if (startOffset >= count - (endIndex - startIndex)) {\n break;\n }\n count -= (endIndex - startIndex);\n this.documentHelper.layout.clearListElementBox(lineWidget.paragraph);\n }\n };\n /**\n * Deletes comment widgets from comment pane along with history preservation.\n */\n Editor.prototype.deleteCommentWidgetInline = function (inline) {\n // let curentBaseHistoryInfo: BaseHistoryInfo = this.editorHistory.currentBaseHistoryInfo;\n // if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && !this.editorHistory.currentHistoryInfo) {\n // this.initComplexHistory('DeleteCommentInline');\n // }\n // // if (!this.selection.isElementInSelection(inline.comment.commentStart, true)) {\n // // this.removeCommentCharacters.push(inline.comment.commentStart);\n // // }\n // this.deleteCommentWidgetInternal(inline.comment);\n // if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n // // let index = this.editorHistory.currentHistoryInfo.modifiedActions.indexOf(curentHistoryInfo);\n // // this.editorHistory.currentHistoryInfo.modifiedActions.push(this.editorHistory.currentHistoryInfo.modifiedActions.splice(index, 1)[0]);\n // let lstActionHistoryInfo: HistoryInfo = this.editorHistory.currentHistoryInfo;\n // let frstAction: BaseHistoryInfo = lstActionHistoryInfo.modifiedActions[0];\n // // if (frstAction.action === \"DeleteCommentWidget\" && frstAction.removedNodes[0] instanceof CommentElementBox\n // // && !(frstAction.removedNodes[0] as CommentElementBox).isReply && (lstActionHistoryInfo.modifiedActions[1].action === \"DeleteCommentWidget\")) {\n // // // index = this.editorHistory.currentHistoryInfo.modifiedActions.indexOf(curentHistoryInfo);\n // // // this.editorHistory.currentHistoryInfo.modifiedActions.splice(index - 1, 0, this.editorHistory.currentHistoryInfo.modifiedActions.splice(0, 1)[0]);\n // // }\n // }\n // this.editorHistory.currentHistoryInfo.addModifiedAction(curentBaseHistoryInfo);\n // this.editorHistory.currentBaseHistoryInfo = curentBaseHistoryInfo;\n // this.selection.editPosition = curentBaseHistoryInfo.insertPosition; \n // this.editorHistory.currentHistoryInfo.insertPosition = curentBaseHistoryInfo.insertPosition;\n // this.editorHistory.currentHistoryInfo.endPosition = curentBaseHistoryInfo.insertPosition;\n // this.editorHistory.currentHistoryInfo.selectionStart = curentBaseHistoryInfo.selectionStart;\n // this.editorHistory.currentHistoryInfo.selectionEnd = curentBaseHistoryInfo.selectionEnd;\n };\n Editor.prototype.clearFieldElementRevisions = function (inline, revision) {\n var revisions = revision;\n for (var i = 0; i < revisions.length; i++) {\n var currentRevision = revisions[i];\n for (var j = 0; j < currentRevision.range.length; j++) {\n if (currentRevision.range[j] === inline) {\n for (var k = j; k < currentRevision.range.length; k) {\n if (currentRevision.range[j] instanceof FieldElementBox && currentRevision.range[j].fieldType === 1 && currentRevision.range[j].fieldBegin === inline) {\n currentRevision.removeRangeRevisionForItem(currentRevision.range[j]);\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n break;\n }\n currentRevision.removeRangeRevisionForItem(currentRevision.range[j]);\n }\n }\n }\n }\n };\n Editor.prototype.addRemovedRevisionInfo = function (currentElement, spittedElement, removePrevRevisions) {\n for (var i = 0; i < currentElement.revisions.length; i++) {\n var revisionId = currentElement.revisions[i].revisionID;\n if (!isNullOrUndefined(spittedElement)) {\n spittedElement.removedIds.push(revisionId);\n }\n else {\n currentElement.removedIds.push(revisionId);\n }\n }\n if (isNullOrUndefined(spittedElement) && (isNullOrUndefined(removePrevRevisions) || removePrevRevisions)) {\n currentElement.revisions = [];\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeEmptyLine = function (paragraph) {\n if (paragraph.childWidgets.length > 1) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n var lineWidget = paragraph.childWidgets[i];\n if (lineWidget.children.length === 0 && paragraph.childWidgets.length > 1) {\n paragraph.childWidgets.splice(i, 1);\n i--;\n }\n }\n }\n };\n //#endregion\n /**\n * Clone the list level\n *\n * @param {WListLevel} source - Specifies the source\n * @private\n * @returns {WListLevel} - Returns the list level\n */\n Editor.prototype.cloneListLevel = function (source) {\n var listLevel = new WListLevel(undefined);\n this.copyListLevel(listLevel, source);\n return listLevel;\n };\n /**\n * Copies the list level\n *\n * @param {WListLevel} destination - Specifies the destination\n * @param {WListLevel} listLevel - Specifies the list level\n * @private\n * @returns {void}\n */\n Editor.prototype.copyListLevel = function (destination, listLevel) {\n if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n destination.paragraphFormat = new WParagraphFormat(destination);\n destination.paragraphFormat.copyFormat(listLevel.paragraphFormat);\n }\n if (!isNullOrUndefined(listLevel.characterFormat)) {\n destination.characterFormat = new WCharacterFormat(destination);\n destination.characterFormat.copyFormat(listLevel.characterFormat);\n }\n if (!isNullOrUndefined(listLevel.followCharacter)) {\n destination.followCharacter = listLevel.followCharacter;\n }\n if (!isNullOrUndefined(listLevel.listLevelPattern)) {\n destination.listLevelPattern = listLevel.listLevelPattern;\n }\n if (!isNullOrUndefined(listLevel.numberFormat)) {\n destination.numberFormat = listLevel.numberFormat;\n }\n if (!isNullOrUndefined(listLevel.restartLevel)) {\n destination.restartLevel = listLevel.restartLevel;\n }\n if (!isNullOrUndefined(listLevel.startAt)) {\n destination.startAt = listLevel.startAt;\n }\n };\n /**\n * Clone level override\n *\n * @param {WLevelOverride} source @returns {void} - Specifies the level override\n * @private\n * @returns {WLevelOverride} - Returns the level overeide\n */\n Editor.prototype.cloneLevelOverride = function (source) {\n var levelOverride = new WLevelOverride();\n if (!isNullOrUndefined(source.startAt)) {\n levelOverride.startAt = source.startAt;\n }\n if (!isNullOrUndefined(source.overrideListLevel)) {\n levelOverride.overrideListLevel = source.overrideListLevel;\n }\n if (!isNullOrUndefined(source.levelNumber)) {\n levelOverride.levelNumber = source.levelNumber;\n }\n return levelOverride;\n };\n /**\n * Update List Paragraph\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListParagraphs = function () {\n this.documentHelper.listParagraphs = [];\n for (var j = 0; j < this.documentHelper.pages.length; j++) {\n var bodyWidget = this.documentHelper.pages[j].bodyWidgets[0];\n for (var i = 0; i < bodyWidget.childWidgets.length; i++) {\n this.updateListParagraphsInBlock(bodyWidget.childWidgets[i]);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListParagraphsInBlock = function (block) {\n if (block instanceof ParagraphWidget) {\n if (!isNullOrUndefined(block.paragraphFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat)\n && !isNullOrUndefined(block.paragraphFormat.listFormat.listId)) {\n if (block.paragraphFormat.listFormat.listId >= 0) {\n block.paragraphFormat.clearIndent();\n }\n if (isNullOrUndefined(this.documentHelper.listParagraphs)) {\n this.documentHelper.listParagraphs = [];\n }\n this.documentHelper.listParagraphs.push(block);\n }\n }\n else if (block instanceof TableWidget) {\n for (var i = 0; i < block.childWidgets.length; i++) {\n for (var j = 0; j < block.childWidgets[i].childWidgets.length; j++) {\n var cell = block.childWidgets[i].childWidgets[j];\n for (var k = 0; k < cell.childWidgets.length; k++) {\n this.updateListParagraphsInBlock(cell.childWidgets[k]);\n }\n }\n }\n }\n };\n /**\n * Applies list format\n *\n * @param {WList} list - Specifies the list.\n * @private\n * @returns {void}\n */\n Editor.prototype.onApplyList = function (list) {\n var selection = this.documentHelper.selection;\n this.setOffsetValue(this.documentHelper.selection);\n this.initHistory('ListFormat');\n var format = new WListFormat();\n if (!isNullOrUndefined(list)) {\n format.listId = list.listId;\n format.nsid = list.nsid;\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n if (selection.isEmpty) {\n this.applyParaFormatProperty(selection.start.paragraph, 'listFormat', format, false);\n this.isMeasureParaWidth = true;\n this.layoutItemBlock(selection.start.paragraph, false);\n this.isMeasureParaWidth = false;\n }\n else {\n this.updateSelectionParagraphFormatting('listFormat', format, false);\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n this.layoutWholeDocument();\n this.documentHelper.owner.isShiftingEnabled = false;\n this.startParagraph = undefined;\n this.endParagraph = undefined;\n };\n /**\n * Applies bullets or numbering list\n *\n * @param {string} format - Specifies the format\n * @param {ListLevelPattern} listLevelPattern - Specifies the list level patterns\n * @param {string} fontFamily - Specifies the font family.\n * @private\n * @returns {void}\n */\n Editor.prototype.applyBulletOrNumbering = function (format, listLevelPattern, fontFamily) {\n var selection = this.documentHelper.selection;\n var list = selection.paragraphFormat.getList();\n var isUpdate = false;\n var start = selection.start;\n if (!selection.isForward) {\n start = selection.end;\n }\n var currentParagraph = start.paragraph;\n if (isNullOrUndefined(list)) {\n while (!isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.isEmpty() && currentParagraph.previousWidget.paragraphFormat.listFormat.listId === -1) {\n currentParagraph = currentParagraph.previousWidget;\n }\n if (currentParagraph.previousWidget && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.paragraphFormat.listFormat.listId !== -1) {\n var isUpdated = false;\n while (!isNullOrUndefined(currentParagraph.previousWidget) && currentParagraph.previousWidget instanceof ParagraphWidget\n && currentParagraph.previousWidget.paragraphFormat.listFormat.listId !== -1 && start.paragraph.paragraphFormat.firstLineIndent < Math.abs(currentParagraph.previousWidget.paragraphFormat.firstLineIndent)) {\n currentParagraph = currentParagraph.previousWidget;\n isUpdated = true;\n }\n if (!isUpdated) {\n currentParagraph = currentParagraph.previousWidget;\n }\n list = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n isUpdate = true;\n }\n if (!isUpdate) {\n while (!isNullOrUndefined(currentParagraph.nextWidget) && currentParagraph.nextWidget instanceof ParagraphWidget\n && currentParagraph.nextWidget.isEmpty() && currentParagraph.nextWidget.paragraphFormat.listFormat.listId === -1) {\n currentParagraph = currentParagraph.nextWidget;\n }\n if (currentParagraph.nextWidget && currentParagraph.nextWidget instanceof ParagraphWidget\n && currentParagraph.nextWidget.paragraphFormat.listFormat.listId !== -1) {\n currentParagraph = currentParagraph.nextWidget;\n list = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n isUpdate = true;\n }\n }\n }\n var startListLevel = undefined;\n var levelNumber = -1;\n var initialListLevel = undefined;\n var isSameList = false;\n if (currentParagraph.paragraphFormat.listFormat.listId !== -1 && !isNullOrUndefined(currentParagraph.paragraphFormat.listFormat.listLevel)) {\n this.listNumberFormat = currentParagraph.paragraphFormat.listFormat.listLevel.numberFormat;\n this.listLevelPattern = currentParagraph.paragraphFormat.listFormat.listLevel.listLevelPattern;\n this.listLevelNumber = currentParagraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(list)) {\n levelNumber = currentParagraph.paragraphFormat.listFormat.listLevelNumber;\n var tempList = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n startListLevel = this.documentHelper.layout.getListLevel(tempList, levelNumber);\n if (levelNumber > 0) {\n initialListLevel = this.documentHelper.layout.getListLevel(tempList, 0);\n isSameList = !isNullOrUndefined(initialListLevel) && levelNumber > 0 && selection.start.isInSameListParagraph(selection.end);\n }\n var abstractList = tempList.abstractList;\n if (!abstractList) {\n abstractList = this.documentHelper.getAbstractListById(list.abstractListId);\n }\n if (abstractList.levels.length === 0) {\n startListLevel = this.documentHelper.layout.getListLevel(tempList, currentParagraph.paragraphFormat.listFormat.listLevelNumber);\n }\n if (isUpdate) {\n if (listLevelPattern !== 'Bullet' && startListLevel.listLevelPattern === listLevelPattern\n && (startListLevel.numberFormat === format || startListLevel.numberFormat.indexOf(format) !== -1)) {\n selection.paragraphFormat.listId = list.listId;\n selection.paragraphFormat.listLevelNumber = levelNumber;\n selection.paragraphFormat.setList(list);\n return;\n }\n else {\n startListLevel = abstractList.levels[0];\n }\n }\n }\n if (isNullOrUndefined(list) || (!isNullOrUndefined(list) && levelNumber === 0\n && ((startListLevel.listLevelPattern !== listLevelPattern) || startListLevel.numberFormat !== format\n || (startListLevel.characterFormat.fontFamily !== fontFamily && startListLevel.listLevelPattern === 'Bullet')))) {\n isUpdate = false;\n list = new WList();\n if (this.documentHelper.lists.length > 0) {\n list.listId = this.documentHelper.lists[this.documentHelper.lists.length - 1].listId + 1;\n }\n else {\n list.listId = 0;\n }\n var abstractList = new WAbstractList();\n if (this.documentHelper.abstractLists.length > 0) {\n abstractList.abstractListId = this.documentHelper.abstractLists[this.documentHelper.abstractLists.length - 1].abstractListId + 1;\n }\n else {\n abstractList.abstractListId = 0;\n }\n list.nsid = abstractList.nsid = HelperMethods.generateUniqueId(this.owner.documentHelper.lists);\n list.abstractListId = abstractList.abstractListId;\n list.abstractList = abstractList;\n this.documentHelper.abstractLists.push(abstractList);\n if (format === 'bullet' || format === 'multiLevel' || format === 'numbering') {\n this.addListLevels(abstractList, format, selection);\n }\n else {\n var listLevel = new WListLevel(abstractList);\n listLevel.listLevelPattern = listLevelPattern;\n listLevel.numberFormat = format;\n if (listLevelPattern !== 'Bullet') {\n listLevel.startAt = 1;\n }\n else {\n listLevel.characterFormat.fontFamily = fontFamily;\n }\n listLevel.paragraphFormat.leftIndent = 36;\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractList.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = 0;\n }\n selection.paragraphFormat.setList(list);\n }\n else if (isSameList && !isNullOrUndefined(list) && !isUpdate) {\n var tempList = this.documentHelper.getListById(currentParagraph.paragraphFormat.listFormat.listId);\n var listLevel = this.documentHelper.layout.getListLevel(tempList, levelNumber);\n if (listLevelPattern === 'Bullet') {\n listLevel.numberFormat = format;\n listLevel.characterFormat.fontFamily = fontFamily;\n listLevel.listLevelPattern = listLevelPattern;\n }\n else {\n listLevel.listLevelPattern = listLevelPattern;\n listLevel.characterFormat.fontFamily = fontFamily;\n var currentFormat = listLevel.numberFormat.substring(listLevel.numberFormat.length - 1);\n if (listLevel.numberFormat.length !== format.length && levelNumber > 0) {\n listLevel.numberFormat = format;\n }\n else if (format.substring(format.length - 1) !== listLevel.numberFormat.substring(listLevel.numberFormat.length - 1)) {\n listLevel.numberFormat = listLevel.numberFormat.replace(currentFormat, format.substring(format.length - 1));\n }\n }\n selection.paragraphFormat.setList(tempList);\n }\n else if (!isNullOrUndefined(list) && isUpdate) {\n selection.paragraphFormat.setList(list);\n }\n else {\n selection.paragraphFormat.setList(undefined);\n }\n };\n Editor.prototype.addListLevels = function (abstractListAdv, listName, selection) {\n var bulletCharacters = [String.fromCharCode(61558), String.fromCharCode(61656), String.fromCharCode(61607), String.fromCharCode(61623), String.fromCharCode(61608)];\n for (var i = abstractListAdv.levels.length; i < 9; i++) {\n var listLevel = new WListLevel(abstractListAdv);\n if (listName.match('bullet')) {\n listLevel.listLevelPattern = 'Bullet';\n listLevel.numberFormat = bulletCharacters[i < 5 ? i % 5 : i % 5 + 1];\n listLevel.characterFormat.fontFamily = i < 3 || i === 5 ? 'Wingdings' : 'Symbol';\n }\n else {\n if (listName.match('multiLevel')) {\n for (var j = 0; j < i + 1; j++) {\n listLevel.numberFormat += '%' + (j + 1).toString() + '.';\n }\n listLevel.listLevelPattern = 'Number';\n }\n else {\n listLevel.numberFormat = '%' + (i + 1).toString() + ')';\n listLevel.listLevelPattern = i % 3 === 0 ? 'Number'\n : i % 3 === 1 ? 'LowLetter' : 'LowRoman';\n }\n listLevel.startAt = 1;\n listLevel.restartLevel = i;\n }\n if (i === 0) {\n listLevel.paragraphFormat.leftIndent = 36;\n }\n else {\n listLevel.paragraphFormat.leftIndent = 36 * i;\n }\n listLevel.paragraphFormat.firstLineIndent = -18;\n abstractListAdv.levels.push(listLevel);\n selection.paragraphFormat.listLevelNumber = i;\n }\n };\n /**\n * Inserts the page break at the cursor position.\n *\n * @returns {void}\n */\n Editor.prototype.insertPageBreak = function () {\n if (!this.owner.isReadOnlyMode) {\n if (this.documentHelper.selection.start.paragraph.isInsideTable ||\n this.documentHelper.selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initComplexHistory('PageBreak');\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.onEnter('PageBreak');\n this.isSkipOperationsBuild = false;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n if (this.owner.enableAutoFocus) {\n this.selection.checkForCursorVisibility();\n }\n }\n };\n /**\n * Inserts a column break at cursor position.\n *\n * @returns {void}\n */\n Editor.prototype.insertColumnBreak = function () {\n if (!this.owner.isReadOnlyMode) {\n if (this.documentHelper.selection.start.paragraph.isInsideTable ||\n this.documentHelper.selection.start.paragraph.isInHeaderFooter) {\n return;\n }\n this.initComplexHistory('ColumnBreak');\n var para = this.documentHelper.selection.start.paragraph;\n if (this.viewer instanceof PageLayoutViewer && para.bodyWidget.sectionFormat.columns.length > 1) {\n var lastbody = this.documentHelper.layout.getBodyWidget(para.bodyWidget, false);\n if ((!isNullOrUndefined(lastbody.nextRenderedWidget) && lastbody.page === lastbody.nextRenderedWidget.page)) {\n this.documentHelper.layout.combineMultiColumn(lastbody);\n }\n }\n this.onEnter('ColumnBreak');\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n this.editorHistory.updateComplexHistory();\n }\n if (this.owner.enableAutoFocus) {\n this.selection.checkForCursorVisibility();\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onEnter = function (breakType) {\n this.handledEnter = true;\n var selection = this.documentHelper.selection;\n var isInsertParaBeforeTable = false;\n var format;\n if (isNullOrUndefined(selection.start.paragraph.paragraphFormat.baseStyle) ||\n selection.start.paragraph.paragraphFormat.baseStyle.name === 'Normal' ||\n selection.start.paragraph.paragraphFormat.baseStyle.name === 'Normal (Web)') {\n format = new SelectionCharacterFormat(undefined);\n format.cloneFormat(this.selection.characterFormat);\n var eleme = selection.start.paragraph.lastChild.children[selection.start.paragraph.lastChild.children.length - 1];\n if (eleme instanceof FootnoteElementBox) {\n format.baselineAlignment = 'Normal';\n }\n }\n if (selection.isEmpty && selection.start.paragraph.isInsideTable && (selection.start.paragraph.associatedCell.ownerTable.isInsideTable ? true : selection.startPage === 1) && selection.start.paragraph.associatedCell.ownerTable.index === 0 && selection.start.paragraph.associatedCell.columnIndex === 0 && selection.start.paragraph.associatedCell.rowIndex === 0 && selection.start.paragraph.index === 0 && selection.start.offset === 0) {\n isInsertParaBeforeTable = true;\n }\n if (this.isXmlMapped) {\n return;\n }\n if (selection.isEmpty) {\n //ToDo: Need to handle the CTRL + Enter (Page Break) and SHIFT + Enter (Line Break) behavior.\n var hyperlinkField = selection.getHyperlinkField();\n var isSelectionOnHyperlink = !isNullOrUndefined(hyperlinkField);\n if (isSelectionOnHyperlink) {\n selection.fireRequestNavigate(hyperlinkField);\n return;\n }\n var paragraph = selection.start.paragraph;\n if (paragraph.isEmpty() && paragraph.paragraphFormat.listFormat.listId !== -1 && !isInsertParaBeforeTable) {\n this.onApplyListInternal(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId), paragraph.paragraphFormat.listFormat.listLevelNumber - 1);\n return;\n }\n }\n var commentStartToInsert = this.checkAndRemoveComments();\n this.initHistory('Enter');\n var isRemoved = true;\n if (!selection.isEmpty && !selection.isImageSelected) {\n // this.initHistoryWithSelection(selection, 'Enter');\n isRemoved = this.removeSelectedContents(selection);\n }\n if (isRemoved) {\n if (selection.isImageSelected && !selection.isForward) {\n var start = selection.start;\n selection.start = selection.end;\n selection.end = start;\n }\n selection.owner.isShiftingEnabled = true;\n this.updateInsertPosition();\n var blockInfo = this.selection.getParagraphInfo(selection.start);\n var initialStart = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n this.splitParagraphInternal(selection, selection.start.paragraph, selection.start.currentWidget, selection.start.offset, isInsertParaBeforeTable);\n this.setPositionForCurrentIndex(selection.start, initialStart);\n if (!isNullOrUndefined(breakType) && (breakType === 'PageBreak' || breakType === 'ColumnBreak')) {\n var currentParagraph = selection.start.paragraph;\n var breakParagraph = new ParagraphWidget();\n breakParagraph.characterFormat.copyFormat(currentParagraph.characterFormat);\n breakParagraph.paragraphFormat.copyFormat(currentParagraph.paragraphFormat);\n var pageBreak = new TextElementBox();\n switch (breakType) {\n case 'PageBreak':\n pageBreak.text = '\\f';\n break;\n case 'ColumnBreak':\n pageBreak.text = String.fromCharCode(14);\n break;\n }\n var line = new LineWidget(breakParagraph);\n line.children.push(pageBreak);\n pageBreak.line = line;\n breakParagraph.childWidgets.push(line);\n if (this.owner.enableTrackChanges && currentParagraph.characterFormat.revisions.length > 0) {\n var currentRevision = this.retrieveRevisionInOder(currentParagraph.characterFormat);\n currentRevision.range.push(breakParagraph.characterFormat);\n breakParagraph.characterFormat.revisions.push(currentRevision);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n breakParagraph.characterFormat.removedIds = [];\n }\n this.insertParagraph(breakParagraph, true);\n selection.selectParagraphInternal(breakParagraph, true);\n }\n var nextNode = selection.start.paragraph.nextWidget;\n if (isNullOrUndefined(nextNode)) {\n nextNode = selection.getNextRenderedBlock(selection.start.paragraph);\n }\n selection.selectParagraphInternal(isInsertParaBeforeTable ? selection.start.paragraph : nextNode, true);\n if (!isInsertParaBeforeTable) {\n this.updateEndPosition();\n }\n if (!isNullOrUndefined(breakType) && this.editorHistory) {\n this.owner.editorHistoryModule.updateHistory();\n }\n // if (!isNullOrUndefined(selection.currentHistoryInfo)) {\n // this.updateComplexHistory();\n // } else {\n this.reLayout(selection);\n var currentPara = this.selection.start.paragraph.containerWidget.firstChild;\n if (!isNullOrUndefined(currentPara)) {\n currentPara.isChangeDetected = false;\n var nextPara = currentPara.nextRenderedWidget;\n while (this.owner.isSpellCheck && !isNullOrUndefined(nextPara)) {\n currentPara = nextPara;\n currentPara.isChangeDetected = false;\n nextPara = currentPara.nextRenderedWidget;\n }\n }\n // }\n var paragraph = selection.start.paragraph.previousWidget;\n if (!isNullOrUndefined(paragraph) && !paragraph.isEmpty() &&\n paragraph.lastChild.children[paragraph.lastChild.children.length - 1] instanceof TextElementBox) {\n this.checkAndConvertToHyperlink(selection, true, paragraph);\n }\n }\n if (!isNullOrUndefined(format) && !isNullOrUndefined(selection.start.paragraph) && selection.start.paragraph.isEmpty() && !isInsertParaBeforeTable) {\n this.selection.isRetrieveFormatting = true;\n this.selection.characterFormat.cloneFormat(format);\n this.selection.isRetrieveFormatting = false;\n }\n this.documentHelper.layout.islayoutFootnote = false;\n this.updateHistoryForComments(commentStartToInsert);\n this.handledEnter = false;\n };\n Editor.prototype.splitParagraphInternal = function (selection, paragraphAdv, currentLine, offset, isInsertParaBeforeTable) {\n var insertIndex = 0;\n var blockIndex = paragraphAdv.index;\n var currentPara = paragraphAdv;\n var isAddRevToNxtPara = false;\n currentPara.isChangeDetected = (offset === 0) ? true : false;\n while (this.owner.isSpellCheck && !isNullOrUndefined(currentPara.nextRenderedWidget)) {\n currentPara = currentPara.nextRenderedWidget;\n currentPara.isChangeDetected = true;\n }\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n paragraph.childWidgets.push(lineWidget);\n //Cop ies the format to new paragraph.\n paragraph.paragraphFormat.ownerBase = paragraph;\n if (currentLine === paragraphAdv.lastChild && offset === selection.getLineLength(currentLine) && !paragraphAdv.isContainsShapeAlone()) {\n if (!isInsertParaBeforeTable) {\n if (paragraphAdv.paragraphFormat.baseStyle\n && paragraphAdv.paragraphFormat.baseStyle.name !== 'Normal' && paragraphAdv.paragraphFormat.baseStyle.next instanceof WParagraphStyle) {\n if (paragraphAdv.paragraphFormat.baseStyle.name === paragraphAdv.paragraphFormat.baseStyle.next.name) {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n else {\n paragraph.paragraphFormat.baseStyle = paragraphAdv.paragraphFormat.baseStyle.next;\n }\n this.selection.skipFormatRetrieval = false;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n }\n if (paragraphAdv.lastChild.children.length > 0) {\n paragraphAdv.characterFormat.copyFormat(paragraphAdv.lastChild.children[paragraphAdv.lastChild.children.length - 1].characterFormat);\n }\n }\n // let revisions: Revision[] = [];\n // if (paragraphAdv.characterFormat.revisions.length > 0) {\n // revisions = paragraphAdv.characterFormat.revisions;\n // } else {\n if (this.handledEnter && this.selection.isEmpty && this.selection.start.isAtParagraphEnd && paragraphAdv.characterFormat.revisions.length > 0) {\n isAddRevToNxtPara = true;\n }\n if (this.owner.enableTrackChanges) {\n var lastLine = paragraphAdv.lastChild;\n if (!isNullOrUndefined(lastLine) && lastLine.children.length > 0) {\n var lastElement = lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking;\n if (lastElement.revisions.length !== 0) {\n isAddRevToNxtPara = false;\n }\n //ensure whether para mark can be combined with element revision\n if (!isNullOrUndefined(lastElement) && !this.checkParaMarkMatchedWithElement(lastElement, paragraphAdv.characterFormat, false, 'Insertion')) {\n if (isAddRevToNxtPara) {\n this.insertParaRevision(paragraph);\n }\n else {\n this.insertParaRevision(paragraphAdv);\n }\n }\n }\n }\n //}\n //ToDo in future: Need to skip copying formattings to new paragraph, if the style for following paragraph is same style.\n insertIndex++;\n blockIndex++;\n }\n else {\n paragraph.paragraphFormat.copyFormat(paragraphAdv.paragraphFormat);\n paragraph.characterFormat.copyFormat(paragraphAdv.characterFormat);\n if ((offset > 0 || !currentLine.isFirstLine()) && !paragraphAdv.isContainsShapeAlone()) {\n paragraphAdv = paragraphAdv.combineWidget(this.owner.viewer);\n this.moveInlines(paragraphAdv, paragraph, 0, 0, paragraphAdv.firstChild, offset, currentLine);\n if (this.owner.enableTrackChanges) {\n this.insertParaRevision(paragraph, paragraphAdv.firstChild);\n }\n }\n else {\n var paragraphWidget = paragraphAdv.previousRenderedWidget;\n var isPreviousRevision = false;\n if (!isNullOrUndefined(paragraphWidget) && paragraphWidget instanceof ParagraphWidget) {\n isPreviousRevision = paragraphWidget.characterFormat.revisions.length > 0 ? true : false;\n }\n if (this.owner.enableTrackChanges) {\n if (!isPreviousRevision) {\n var firstLine = paragraphAdv.firstChild;\n var firstElement = firstLine.children[0].previousValidNodeForTracking;\n //ensure whether para mark can be combined with element revision\n if (!isNullOrUndefined(firstElement) && !this.checkParaMarkMatchedWithElement(firstElement, paragraph.characterFormat, true, 'Insertion')) {\n this.insertParaRevision(paragraph);\n }\n else if (isNullOrUndefined(firstElement)) {\n insertIndex++;\n blockIndex++;\n }\n }\n else {\n if (!this.checkToMatchEmptyParaMark(paragraphAdv, paragraph)) {\n this.insertParaRevision(paragraphAdv);\n }\n }\n }\n }\n paragraphAdv = paragraphAdv.getSplitWidgets()[0];\n }\n var container;\n if (isInsertParaBeforeTable) {\n insertIndex = 0;\n blockIndex = 0;\n var containerTable = paragraphAdv.associatedCell.ownerTable;\n container = containerTable.containerWidget;\n container.childWidgets.splice(0, 0, paragraph);\n paragraph.containerWidget = container;\n paragraph.index = 0;\n this.updateNextBlocksIndex(paragraph, true);\n this.owner.selectionModule.start.setPositionParagraph(paragraph.firstChild, 0);\n this.owner.selectionModule.end.setPositionParagraph(paragraph.firstChild, 1);\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.selectionStart = this.owner.selectionModule.startOffset;\n this.editorHistory.currentBaseHistoryInfo.selectionEnd = this.owner.selectionModule.startOffset;\n this.editorHistory.currentBaseHistoryInfo.insertPosition = this.owner.selectionModule.startOffset;\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.owner.selectionModule.endOffset;\n }\n }\n else {\n insertIndex += paragraphAdv.getIndex();\n container = paragraphAdv.containerWidget;\n var childNodes = container.childWidgets;\n childNodes.splice(insertIndex, 0, paragraph);\n paragraph.containerWidget = container;\n paragraph.index = blockIndex;\n this.updateNextBlocksIndex(paragraph, true);\n }\n if ((!isNullOrUndefined(container.containerWidget) && container.containerWidget instanceof FootNoteWidget) || (container instanceof TableCellWidget && !isNullOrUndefined(container.bodyWidget) && container.bodyWidget.containerWidget instanceof FootNoteWidget)) {\n var height = this.documentHelper.textHelper.getParagraphMarkSize(paragraph.characterFormat).Height;\n if (container instanceof TableCellWidget) {\n container.bodyWidget.height += height;\n container.bodyWidget.containerWidget.height += height;\n }\n else {\n container.containerWidget.height += height;\n container.height += height;\n }\n }\n if (this.owner.enableTrackChanges && (paragraph.characterFormat.revisions.length === 0)) {\n var para = undefined;\n if (paragraphAdv.characterFormat.revisions.length === 0 && !isInsertParaBeforeTable) {\n para = paragraphAdv;\n }\n else if (isAddRevToNxtPara || isInsertParaBeforeTable) {\n para = paragraph;\n }\n if (!isNullOrUndefined(para) && !this.checkToMatchEmptyParaMark(para)) {\n this.insertParaRevision(para);\n }\n }\n this.documentHelper.layout.layoutBodyWidgetCollection(blockIndex, container, paragraph, false);\n };\n Editor.prototype.insertParaRevision = function (paragraph, firstChild) {\n if (this.owner.enableTrackChanges && isNullOrUndefined(firstChild) && !this.isRevisionMatched(paragraph.characterFormat, 'Insertion')) {\n paragraph.characterFormat.revisions = [];\n this.insertRevision(paragraph.characterFormat, 'Insertion');\n }\n //If it is spitted para, we need to ensure whether first element of the spitted para matches with inserted revision\n if (!isNullOrUndefined(firstChild)) {\n if (firstChild.paragraph.isInsideTable) {\n this.insertRevision(paragraph.characterFormat, 'Insertion');\n return;\n }\n this.applyRevisionForParaMark(paragraph, firstChild, 'Insertion', true);\n // let firstElement: ElementBox = firstChild.children[0];\n // firstElement = firstElement.nextValidNodeForTracking;\n // let lastLine: LineWidget = paragraph.lastChild as LineWidget;\n // let lastElement: ElementBox = lastLine.children.length === 0 ? undefined : lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking;\n // let isCombined: boolean = false;\n // //Ensure revision matched with inserted para mark\n // if (!isNullOrUndefined(lastElement)) {\n // isCombined = this.checkParaMarkMatchedWithElement(lastElement, paragraph.characterFormat, true);\n // }\n // if (!isNullOrUndefined(firstElement)) {\n // if (paragraph.characterFormat.revisions.length > 0) {\n // if (this.isRevisionMatched(firstElement, 'Insertion')) {\n // let revisionToInclude: Revision = paragraph.characterFormat.revisions[0];\n // let matchedRevisions: Revision[] = this.getMatchedRevisionsToCombine(firstElement.revisions, 'Insertion');\n // for (let i: number = 0; i < matchedRevisions.length; i++) {\n // isCombined = true;\n // this.clearAndUpdateRevisons(matchedRevisions[i].range, revisionToInclude, revisionToInclude.range.indexOf(paragraph.characterFormat) + 1);\n // }\n // }\n // } else {\n // isCombined = this.checkParaMarkMatchedWithElement(firstElement, paragraph.characterFormat, false);\n // }\n // }\n // if (!isCombined) {\n // this.insertRevision(paragraph.characterFormat, 'Insertion');\n // }\n }\n };\n Editor.prototype.applyRevisionForParaMark = function (paragraph, firstChild, revisionType, splitRevision) {\n var firstElement = firstChild.children[0];\n if (isNullOrUndefined(firstElement)) {\n return;\n }\n firstElement = firstElement.nextValidNodeForTracking;\n var lastLine = paragraph.lastChild;\n var lastElement = lastLine.children.length === 0 ? undefined : lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking;\n var isCombined = false;\n var prevRevCount = paragraph.characterFormat.revisions.length;\n //Ensure revision matched with inserted para mark\n if (!isNullOrUndefined(lastElement)) {\n isCombined = this.checkParaMarkMatchedWithElement(lastElement, paragraph.characterFormat, false, revisionType);\n }\n if (!isNullOrUndefined(firstElement)) {\n //Ensure previous inserted para mark revision matched with first element of the next paragraph.\n if (paragraph.characterFormat.revisions.length > prevRevCount) {\n if (this.isRevisionMatched(firstElement, revisionType)) {\n var revisionToInclude = paragraph.characterFormat.revisions[0];\n var matchedRevisions = this.getMatchedRevisionsToCombine(firstElement.revisions, revisionType);\n for (var i = 0; i < matchedRevisions.length; i++) {\n if (matchedRevisions[i] !== revisionToInclude) {\n isCombined = true;\n this.clearAndUpdateRevisons(matchedRevisions[i].range, revisionToInclude, revisionToInclude.range.indexOf(paragraph.characterFormat) + 1);\n }\n }\n }\n }\n else {\n isCombined = this.checkParaMarkMatchedWithElement(firstElement, paragraph.characterFormat, true, revisionType);\n }\n }\n if (!isCombined && (this.owner.enableTrackChanges || firstChild.paragraph.characterFormat.revisions.length > 0)) {\n this.insertRevision(paragraph.characterFormat, revisionType);\n // for spitted paragraph on moving content we maintain same revision, so if it not matched with inserted paragraph then we need to spit it.\n if (splitRevision && lastElement.revisions.length > 0 && firstElement.revisions.length > 0) {\n this.updateRevisionForSpittedTextElement(lastElement, firstElement);\n }\n }\n };\n //Combines para mark with element revision\n Editor.prototype.checkParaMarkMatchedWithElement = function (lastElement, characterFormat, isBegin, revisionType) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(lastElement.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, lastElement, characterFormat, isBegin);\n return true;\n }\n return false;\n };\n Editor.prototype.checkToMatchEmptyParaMark = function (paraWidget, paragraphAdv) {\n var prevPara = paraWidget.previousRenderedWidget;\n if (!isNullOrUndefined(prevPara) && prevPara instanceof ParagraphWidget && prevPara.characterFormat.revisions.length > 0) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(prevPara.characterFormat.revisions, 'Insertion');\n if (matchedRevisions.length > 0) {\n if (!isNullOrUndefined(paragraphAdv)) {\n this.mapMatchedRevisions(matchedRevisions, prevPara.characterFormat, paragraphAdv.characterFormat, false);\n }\n else {\n this.mapMatchedRevisions(matchedRevisions, prevPara.characterFormat, paraWidget.characterFormat, false);\n }\n return true;\n }\n }\n return false;\n };\n Editor.prototype.checkToMatchEmptyParaMarkBack = function (paraWidget) {\n var prevPara = paraWidget.nextRenderedWidget;\n var lineWid = prevPara.childWidgets[0];\n var textWid = lineWid.children[0];\n if (!isNullOrUndefined(prevPara) && prevPara instanceof ParagraphWidget && prevPara.characterFormat.revisions.length > 0) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(prevPara.characterFormat.revisions, 'Deletion');\n if (matchedRevisions.length > 0) {\n if (prevPara != undefined && lineWid != undefined && textWid != undefined && textWid.revisions.length == 1) {\n this.mapMatchedRevisions(matchedRevisions, textWid, paraWidget.characterFormat, true);\n return true;\n }\n else {\n this.mapMatchedRevisions(matchedRevisions, prevPara.characterFormat, paraWidget.characterFormat, true);\n return true;\n }\n }\n }\n else if (textWid != undefined && textWid.revisions.length == 1) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(textWid.revisions, 'Deletion');\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, textWid, paraWidget.characterFormat, true);\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateNextBlocksIndex = function (block, increaseIndex) {\n if (isNullOrUndefined(block.nextRenderedWidget) || block.nextRenderedWidget instanceof ParagraphWidget && block.bodyWidget.index !== block.nextRenderedWidget.bodyWidget.index) {\n return;\n }\n var nextIndex = block.containerWidget.childWidgets.indexOf(block) + 1;\n if (block.containerWidget instanceof BodyWidget && !(block.containerWidget.containerWidget instanceof FootNoteWidget)) {\n // let startSel = this.selection.startOffset.substring(0,1);\n // let endSel = this.selection.endOffset.substring(0,1);\n if (block.containerWidget.page.bodyWidgets.length > 1 && block.containerWidget.sectionFormat.numberOfColumns > 1) {\n var fromSectionIndex = block.containerWidget.indexInOwner;\n for (var i = this.documentHelper.pages.indexOf(block.containerWidget.page); i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n for (var j = 0; j < page.bodyWidgets.length; j++) {\n if (page.bodyWidgets[j].indexInOwner === fromSectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[j].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[j].childWidgets[k];\n this.updateIndex(childWidget, increaseIndex);\n }\n nextIndex = 0;\n if (!isNullOrUndefined(page.bodyWidgets[j].nextRenderedWidget) && page.bodyWidgets[j].nextRenderedWidget.sectionIndex === page.bodyWidgets[j].sectionIndex) {\n fromSectionIndex++;\n }\n }\n }\n if (fromSectionIndex !== block.containerWidget.indexInOwner && !isNullOrUndefined(page.bodyWidgets[page.bodyWidgets.length - 1].nextRenderedWidget) && page.bodyWidgets[page.bodyWidgets.length - 1].nextRenderedWidget.sectionFormat.columns.length > 1) {\n fromSectionIndex = 0;\n }\n }\n }\n else if (block.containerWidget.page.bodyWidgets.length > 1) {\n var currentSectionIndex = block.containerWidget.index;\n for (var i = this.documentHelper.pages.indexOf(block.containerWidget.page); i < this.documentHelper.pages.length; i++) {\n var page = this.documentHelper.pages[i];\n for (var j = 0; j < page.bodyWidgets.length; j++) {\n if (page.bodyWidgets[j].index === currentSectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[j].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[j].childWidgets[k];\n this.updateIndex(childWidget, increaseIndex);\n }\n nextIndex = 0;\n }\n }\n }\n }\n else {\n var currentSectionIndex = block.containerWidget.index;\n for (var j = this.documentHelper.pages.indexOf(block.containerWidget.page); j < this.documentHelper.pages.length; j++) {\n var page = this.documentHelper.pages[j];\n if (page.bodyWidgets[0].index === currentSectionIndex) {\n for (var k = nextIndex; k < page.bodyWidgets[0].childWidgets.length; k++) {\n var childWidget = page.bodyWidgets[0].childWidgets[k];\n this.updateIndex(childWidget, increaseIndex);\n }\n nextIndex = 0;\n }\n else {\n return;\n }\n }\n }\n }\n else if (block.containerWidget instanceof TableCellWidget) {\n var cells = block.containerWidget.getSplitWidgets();\n var currentCellIndex = cells.indexOf(block.containerWidget);\n for (var x = currentCellIndex; x < cells.length; x++) {\n var blocks = cells[x].childWidgets;\n for (var y = nextIndex; y < blocks.length; y++) {\n this.updateIndex(blocks[y], increaseIndex);\n }\n currentCellIndex = 0;\n nextIndex = 0;\n }\n }\n else if (block.containerWidget instanceof TableRowWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var cell = block.containerWidget.childWidgets[i];\n if (cell.rowIndex === block.containerWidget.index) {\n this.updateIndex(cell, increaseIndex);\n }\n }\n }\n else if (block.containerWidget instanceof TableWidget) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var row = block.containerWidget.childWidgets[i];\n this.updateIndex(row, increaseIndex);\n for (var j = 0; j < row.childWidgets.length; j++) {\n row.childWidgets[j].rowIndex = row.index;\n }\n }\n //update Row index of all the cell\n }\n else if (block.containerWidget instanceof HeaderFooterWidget || block.containerWidget instanceof TextFrame\n || (!isNullOrUndefined(block.containerWidget) && block.containerWidget.containerWidget instanceof FootNoteWidget)) {\n for (var i = nextIndex; i < block.containerWidget.childWidgets.length; i++) {\n var nextBlock = block.containerWidget.childWidgets[i];\n this.updateIndex(nextBlock, increaseIndex);\n }\n }\n };\n Editor.prototype.updateIndex = function (widget, increment) {\n if (increment) {\n widget.index++;\n }\n else {\n widget.index--;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateEndPosition = function () {\n var selection = this.documentHelper.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, false);\n }\n };\n /**\n * @private\n * @returns { CommentCharacterElementBox[] }\n */\n Editor.prototype.checkAndRemoveComments = function () {\n var selection = this.selection;\n if (selection.isEmpty || this.owner.enableTrackChanges) {\n return [];\n }\n var initComplexHistory = false;\n var comments = this.getSelectedComments();\n if (comments.commentEndInfo.length > 0 || comments.commentStartInfo.length > 0) {\n if (!initComplexHistory) {\n initComplexHistory = true;\n this.initComplexHistory('RemoveComment');\n }\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n if (!this.selection.isForward) {\n startPosition = this.selection.end;\n endPosition = this.selection.start;\n }\n //Get start and end position in order.\n var startBlockInfo = this.selection.getParagraphInfo(startPosition);\n var endBlockInfo = this.selection.getParagraphInfo(endPosition);\n for (var j = 0; j < comments.commentEndInfo.length; j++) {\n var commentToDelete = comments.commentEndInfo[j].comment;\n var commentStart = commentToDelete.commentStart;\n var commentEndMark = commentToDelete.commentEnd;\n var commentStartBlockInfo = this.selection.getParagraphInfoInternal(commentStart.line, commentStart.line.getOffset(commentStart, 0));\n var commentEndBlockInfo = this.selection.getParagraphInfoInternal(commentEndMark.line, commentEndMark.line.getOffset(commentEndMark, 0));\n if (endBlockInfo.paragraph === commentEndBlockInfo.paragraph) {\n if (commentToDelete.replyComments.length > 0) {\n for (var m = 0; m < commentToDelete.replyComments.length; m++) {\n var replyComment = commentToDelete.replyComments[m];\n if (!isNullOrUndefined(replyComment.commentEnd)) {\n endBlockInfo.offset--;\n }\n }\n }\n endBlockInfo.offset--;\n }\n if (startBlockInfo.paragraph === commentStartBlockInfo.paragraph) {\n var updateStartPosition = commentStartBlockInfo.offset < startBlockInfo.offset;\n if (commentToDelete.replyComments.length > 0) {\n for (var m = 0; m < commentToDelete.replyComments.length; m++) {\n var replyComment = commentToDelete.replyComments[m];\n if (!isNullOrUndefined(replyComment.commentStart)) {\n var replyCommentStart = this.selection.getParagraphInfoInternal(replyComment.commentStart.line, replyComment.commentStart.line.getOffset(replyComment.commentStart, 0));\n if (replyCommentStart.offset < startBlockInfo.offset) {\n startBlockInfo.offset--;\n }\n if (endBlockInfo.paragraph === commentStartBlockInfo.paragraph) {\n endBlockInfo.offset--;\n }\n }\n }\n }\n if (updateStartPosition) {\n startBlockInfo.offset--;\n }\n if (endBlockInfo.paragraph === commentStartBlockInfo.paragraph) {\n endBlockInfo.offset--;\n }\n }\n this.deleteCommentInternal(commentToDelete);\n }\n if (comments.commentStartInfo.length > 0) {\n for (var k = 0; k < comments.commentStartInfo.length; k++) {\n if (comments.commentStartInfo[k].line.paragraph.equals(endBlockInfo.paragraph)) {\n endBlockInfo.offset--;\n }\n this.removeInline(comments.commentStartInfo[k]);\n }\n }\n var startLineInfo = selection.getLineInfoBasedOnParagraph(startBlockInfo.paragraph, startBlockInfo.offset);\n selection.start.setPositionFromLine(startLineInfo.line, startLineInfo.offset);\n var endLineInfo = selection.getLineInfoBasedOnParagraph(endBlockInfo.paragraph, endBlockInfo.offset);\n selection.end.setPositionFromLine(endLineInfo.line, endLineInfo.offset);\n }\n return comments.commentStartInfo;\n };\n Editor.prototype.updateHistoryForComments = function (removedCommentStart) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)\n && this.editorHistory.currentHistoryInfo.action === 'RemoveComment') {\n if (!isNullOrUndefined(removedCommentStart)) {\n for (var i = 0; i < removedCommentStart.length; i++) {\n this.initInsertInline(removedCommentStart[i], false);\n }\n }\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onBackSpace = function () {\n this.removeEditRange = true;\n var selection = this.documentHelper.selection;\n this.documentHelper.triggerSpellCheck = true;\n if (selection.bookmarks.length > 0) {\n this.extendSelectionToBookmarkStart();\n }\n if (selection.isEmpty) {\n this.singleBackspace(selection, false);\n }\n else {\n var comments = this.checkAndRemoveComments();\n this.initHistory('BackSpace');\n var skipBackSpace = this.deleteSelectedContents(selection, true);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n if (skipBackSpace) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n else {\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.isSkipOperationsBuild = !isNullOrUndefined(this.alertDialog);\n this.reLayout(selection);\n this.isSkipOperationsBuild = false;\n this.insertSpaceInFormField();\n }\n }\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)) {\n for (var k = 0; k < comments.length; k++) {\n this.initInsertInline(comments[k], false);\n }\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n if (this.owner.isSpellCheck) {\n this.documentHelper.triggerSpellCheck = false;\n }\n }\n var contentControl = this.documentHelper.owner.editor.getContentControl();\n if (!isNullOrUndefined(contentControl)) {\n this.selection.contentControleditRegionHighlighters.clear();\n this.selection.onHighlightContentControl();\n }\n this.removeEditRange = false;\n this.documentHelper.layout.islayoutFootnote = false;\n this.updateXmlMappedContentControl();\n };\n /**\n * @private\n * @returns {boolean}\n */\n Editor.prototype.insertRemoveBookMarkElements = function (isUpdateComplexHistory) {\n var isHandledComplexHistory = false;\n if (!this.isRemoteAction) {\n for (var i = 0; i < this.removedBookmarkElements.length; i++) {\n var bookMark = this.removedBookmarkElements[i];\n if (bookMark.bookmarkType === 0) {\n var bookMarkStart = bookMark;\n if (bookMarkStart && bookMarkStart.reference && this.removedBookmarkElements.indexOf(bookMarkStart.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkStart.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkStart);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n i--;\n }\n else {\n if (this.editorHistory.currentBaseHistoryInfo && !isUpdateComplexHistory) {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n }\n this.initInsertInline(bookMarkStart.clone(), undefined, true);\n if (this.editorHistory.currentHistoryInfo && i === this.removedBookmarkElements.length - 1 && this.removedEditRangeStartElements.length === 0 && this.removedEditRangeEndElements.length === 0) {\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n else {\n var bookMarkEnd = bookMark;\n if (bookMarkEnd && bookMarkEnd.reference && this.removedBookmarkElements.indexOf(bookMarkEnd.reference) !== -1) {\n var endIndex = this.removedBookmarkElements.indexOf(bookMarkEnd.reference);\n var startIndex = this.removedBookmarkElements.indexOf(bookMarkEnd);\n this.removedBookmarkElements.splice(endIndex, 1);\n this.removedBookmarkElements.splice(startIndex, 1);\n i--;\n }\n else {\n if (this.editorHistory.currentBaseHistoryInfo && !isUpdateComplexHistory) {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n }\n this.initInsertInline(bookMarkEnd.clone(), undefined, true);\n if (this.editorHistory.currentHistoryInfo && i === this.removedBookmarkElements.length - 1 && this.removedEditRangeStartElements.length === 0 && this.removedEditRangeEndElements.length === 0) {\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n }\n }\n this.removedBookmarkElements = [];\n return isHandledComplexHistory;\n };\n /**\n * @private\n * @returns {boolean}\n */\n Editor.prototype.insertRemovedEditRangeEndElements = function (isUpdateComplexHistory) {\n var isHandledComplexHistory = false;\n if (!this.isRemoteAction) {\n for (var i = this.removedEditRangeEndElements.length - 1; i >= 0; i--) {\n var editRangeEndElementBox = this.removedEditRangeEndElements[i];\n if (editRangeEndElementBox && this.removedEditRangeStartElements.indexOf(editRangeEndElementBox.editRangeStart) !== -1) {\n var endIndex = this.removedEditRangeEndElements.indexOf(editRangeEndElementBox);\n var startIndex = this.removedEditRangeStartElements.indexOf(editRangeEndElementBox.editRangeStart);\n this.removedEditRangeEndElements.splice(endIndex, 1);\n this.removedEditRangeStartElements.splice(startIndex, 1);\n i--;\n }\n else {\n if (this.editorHistory.currentBaseHistoryInfo && !isUpdateComplexHistory) {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n }\n this.initInsertInline(editRangeEndElementBox.clone(), undefined, true);\n var inlineObj = this.selection.start.paragraph.getInline(this.selection.start.offset, 0);\n inlineObj.element.editRangeStart.editRangeEnd = inlineObj.element;\n if (this.editorHistory.currentHistoryInfo && i === 0 && this.removedEditRangeStartElements.length === 0 && this.removedBookmarkElements.length === 0) {\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n }\n this.removedEditRangeEndElements = [];\n return isHandledComplexHistory;\n };\n /**\n * @private\n * @returns {boolean}\n */\n Editor.prototype.insertRemovedEditRangeStartElements = function (isUpdateComplexHistory) {\n var isHandledComplexHistory = false;\n if (!this.isRemoteAction) {\n for (var i = 0; i < this.removedEditRangeStartElements.length; i++) {\n var editRangeStartElementBox = this.removedEditRangeStartElements[i];\n if (editRangeStartElementBox && this.removedEditRangeEndElements.indexOf(editRangeStartElementBox.editRangeEnd) !== -1) {\n var endIndex = this.removedEditRangeEndElements.indexOf(editRangeStartElementBox.editRangeEnd);\n var startIndex = this.removedEditRangeStartElements.indexOf(editRangeStartElementBox);\n this.removedEditRangeEndElements.splice(endIndex, 1);\n this.removedEditRangeStartElements.splice(startIndex, 1);\n i--;\n }\n else {\n if (this.editorHistory.currentBaseHistoryInfo && !isUpdateComplexHistory) {\n this.initComplexHistory(this.editorHistory.currentBaseHistoryInfo.action);\n this.editorHistory.updateHistory();\n }\n this.initInsertInline(editRangeStartElementBox.clone(), undefined, true);\n var inlineObj = this.selection.start.paragraph.getInline(this.selection.start.offset, 0);\n inlineObj.element.editRangeEnd.editRangeStart = inlineObj.element;\n if (this.editorHistory.currentHistoryInfo && i === this.removedEditRangeStartElements.length - 1 && this.removedBookmarkElements.length === 0 && this.removedEditRangeEndElements.length === 0) {\n this.editorHistory.updateComplexHistory();\n isHandledComplexHistory = true;\n }\n }\n }\n }\n this.removedEditRangeStartElements = [];\n return isHandledComplexHistory;\n };\n /**\n * @private\n * @param {Selection} selection - Specifies the selection\n * @param {boolean} isBackSpace - Specifies is backspace.\n * @returns {boolean}\n */\n Editor.prototype.deleteSelectedContents = function (selection, isBackSpace, isDeletecell) {\n var skipBackSpace = this.deleteSelectedContentInternal(selection, isBackSpace, selection.start, selection.end, isDeletecell);\n var textPosition = selection.getTextPosBasedOnLogicalIndex(selection.editPosition);\n selection.selectContent(textPosition, true);\n return skipBackSpace;\n };\n Editor.prototype.removeWholeElement = function (selection) {\n this.initHistory('BackSpace');\n this.deleteSelectedContents(selection, true);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.end, false);\n }\n this.reLayout(selection);\n };\n Editor.prototype.getSelectedComments = function () {\n var comments = this.documentHelper.comments;\n var commentEnds = [];\n var commentStarts = [];\n for (var i = 0; i < comments.length; i++) {\n var comment = comments[i];\n var commentEnd = comment.commentEnd;\n var commentStart = comment.commentStart;\n if (!isNullOrUndefined(commentEnd) && this.selection.isElementInSelection(commentEnd, true)) {\n commentEnds.push(commentEnd);\n }\n else if (!isNullOrUndefined(commentStart) && this.selection.isElementInSelection(commentStart, false)) {\n commentStarts.push(commentStart);\n for (var j = 0; j < comment.replyComments.length; j++) {\n if (comment.replyComments[j].commentStart) {\n commentStarts.push(comment.replyComments[j].commentStart);\n }\n }\n }\n }\n return { commentStartInfo: commentStarts, commentEndInfo: commentEnds };\n };\n /**\n * Remove single character on left of cursor position\n *\n * @param {Selection} selection - Specifies the selection\n * @param {boolean} isRedoing - Specified the is redoing.\n * @private\n * @returns {void}\n */\n Editor.prototype.singleBackspace = function (selection, isRedoing) {\n var history = this.editorHistory;\n // If backspace is pressed after auto format to hyperlink is done, need to undo auto format.\n if (history && !isRedoing && !history.canRedo() && history.canUndo()) {\n var historyInfo = history.undoStack[history.undoStack.length - 1];\n var startBlockInfo = this.selection.getParagraphInfo(selection.start);\n var endBlockInfo = this.selection.getParagraphInfo(selection.end);\n if (historyInfo.action === 'AutoFormatHyperlink' && historyInfo.insertPosition === this.selection.getHierarchicalIndex(startBlockInfo.paragraph, startBlockInfo.offset.toString()) &&\n historyInfo.endPosition === this.selection.getHierarchicalIndex(endBlockInfo.paragraph, endBlockInfo.offset.toString())) {\n history.undo();\n return;\n }\n }\n var isCommentDelete = false;\n var paragraph = selection.start.paragraph;\n var currentLineWidget = selection.start.currentWidget;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = currentLineWidget.getInline(offset, indexInInline);\n var inline = inlineObj.element;\n var initComplextHistory = false;\n var previousOffset = offset;\n var updateSelection = false;\n var previousNode;\n while (inline instanceof CommentCharacterElementBox) {\n var commentMark = inline;\n inline = inline.previousNode;\n if (isNullOrUndefined(inline)) {\n inline = previousNode;\n }\n if (!isNullOrUndefined(inline) && inline.commentType == 0) {\n previousNode = inline.previousNode;\n }\n else if (inline instanceof ListTextElementBox) {\n inline = undefined;\n }\n if (inline) {\n previousOffset = inline.length;\n }\n if (commentMark.commentType === 0 && (isNullOrUndefined(inline) || !(inline instanceof CommentCharacterElementBox))) {\n if (isNullOrUndefined(inline)) {\n inline = commentMark;\n previousOffset = 0;\n }\n else {\n previousOffset = inline.length;\n }\n updateSelection = true;\n break;\n }\n else if (commentMark.commentType === 1) {\n if (!initComplextHistory) {\n this.initComplexHistory('RemoveComment');\n initComplextHistory = true;\n }\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.deleteCommentInternal(commentMark.comment);\n this.isSkipOperationsBuild = false;\n updateSelection = true;\n }\n }\n if (updateSelection) {\n //When paragraph has only comment end mark, there will be no previous inline and comment end mark will be delete\n //And paragraph will become empty paragraph.\n //So handled special case to update selection.\n if (isNullOrUndefined(inline)) {\n var lineWidget = paragraph.childWidgets[0];\n selection.start.setPositionParagraph(lineWidget, 0);\n selection.end.setPositionParagraph(lineWidget, 0);\n }\n else {\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, previousOffset);\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n }\n }\n if (inline instanceof ContentControl) {\n var contentControl = this.getContentControl();\n this.selection.selectContentControlInternal(contentControl);\n //to prevent the backspacing for content control locked state\n if ((!isNullOrUndefined(contentControl) && inline.type === 1 && contentControl.contentControlProperties.lockContentControl || isNullOrUndefined(inline.nextElement))) {\n if (this.selection.isEmpty) {\n this.onBackSpace();\n }\n else {\n return;\n }\n }\n if ((!isNullOrUndefined(contentControl) && inline.type === 0 && inline.nextElement !== contentControl.reference) || (!isNullOrUndefined(contentControl) && inline.type === 0 && contentControl.contentControlProperties.lockContentControl && inline.nextElement === contentControl.reference)) {\n return;\n }\n }\n if (this.selection.isInlineFormFillMode()) {\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n return;\n }\n var resultText = this.getFieldResultText();\n if (resultText.length === 1) {\n this.selection.selectFieldInternal(this.selection.getCurrentFormField());\n this.insertTextInternal(this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5), true);\n this.selection.selectTextElementStartOfField(this.selection.getCurrentFormField());\n return;\n }\n }\n indexInInline = inlineObj.index;\n if (inline instanceof TextElementBox) {\n inline.ignoreOnceItems = [];\n }\n if (inline instanceof TextElementBox) {\n inline.ignoreOnceItems = [];\n }\n var previousInline = inline;\n if (inline instanceof FieldElementBox && inline.fieldType === 2) {\n if (HelperMethods.isLinkedFieldCharacter(inline)) {\n var begin = inline.fieldBegin;\n var end = inline.fieldEnd;\n if (begin.nextNode instanceof BookmarkElementBox && begin.nextNode.reference) {\n end = begin.nextNode.reference;\n }\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n selection.fireSelectionChanged(true);\n return;\n }\n }\n if (!this.owner.enableTrackChanges && inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n if (inline && (inline instanceof ContentControl || inline.previousNode instanceof ContentControl)) {\n if (inline instanceof ContentControl && inline.previousNode && !(inline.previousElement instanceof ListTextElementBox)) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n if (inline && inline.length === 1 && inline.nextNode instanceof ContentControl\n && inline.previousNode instanceof ContentControl) {\n var start_1 = inline.previousNode;\n var end = inline.nextNode;\n if (!start_1.contentControlProperties.lockContentControl) {\n selection.start.setPositionParagraph(start_1.line, start_1.line.getOffset(start_1, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.removeWholeElement(selection);\n return;\n }\n }\n }\n // if (inline instanceof CommentCharacterElementBox && inline.commentType === 1) {\n // let comment: CommentElementBox = inline.comment;\n // if (comment.isReply) {\n // comment = comment.ownerComment;\n // }\n // while (inline instanceof CommentCharacterElementBox) {\n // inline = inline.previousNode;\n // }\n // this.deleteCommentInternal(comment);\n // paragraph = inline.line.paragraph;\n // offset = inline.line.getOffset(inline, inline.length);\n // selection.start.setPositionParagraph(inline.line, offset);\n // selection.end.setPositionParagraph(inline.line, offset);\n // isCommentDelete = true;\n // }\n if (inline instanceof FieldElementBox && inline.fieldType === 1 && !this.selection.isInlineFormFillMode()) {\n var prevInline = selection.getPreviousValidElement(inline);\n if (prevInline instanceof FieldElementBox) {\n inline = prevInline.fieldBegin;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline.nextNode instanceof BookmarkElementBox && inline.nextNode.reference) {\n var start_2 = inline.nextNode.reference;\n selection.start.setPositionParagraph(start_2.line, start_2.line.getOffset(start_2, 1));\n }\n selection.end.setPositionParagraph(inline.line, offset); //Selects the entire field.\n selection.fireSelectionChanged(true);\n return;\n }\n else if (prevInline !== inline) {\n inline = prevInline; //Updates the offset to delete next content.\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n }\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n if ((inline.nextNode instanceof EditRangeEndElementBox && inline.editRangeEnd === inline.nextNode)\n || (inline.previousNode instanceof EditRangeStartElementBox\n && inline.editRangeStart === inline.previousNode)) {\n return;\n }\n if (inline instanceof EditRangeStartElementBox && !(inline.previousNode instanceof EditRangeEndElementBox)) {\n return;\n }\n if (this.documentHelper.isDocumentProtected &&\n this.documentHelper.protectionType === 'ReadOnly') {\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n return;\n }\n }\n if (inline instanceof EditRangeEndElementBox) {\n do {\n if (!isNullOrUndefined(inline.previousNode)) {\n inline = inline.previousNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n }\n else {\n break;\n }\n } while (inline instanceof EditRangeEndElementBox);\n }\n if (inline.length === 1 && inline.nextNode instanceof EditRangeEndElementBox\n && inline.previousNode instanceof EditRangeStartElementBox) {\n var start_3 = inline.previousNode;\n var end = inline.nextNode;\n selection.start.setPositionParagraph(start_3.line, start_3.line.getOffset(start_3, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.removeWholeElement(selection);\n return;\n }\n }\n if (inline && (inline instanceof BookmarkElementBox || inline.previousNode instanceof BookmarkElementBox)) {\n if (this.documentHelper.isDocumentProtected &&\n this.documentHelper.protectionType === 'ReadOnly') {\n if (inline.previousNode && inline.previousNode instanceof EditRangeStartElementBox || inline.previousNode instanceof EditRangeEndElementBox) {\n return;\n }\n }\n if (inline instanceof BookmarkElementBox) {\n if (inline.previousNode) {\n inline = inline.previousNode;\n if (inline instanceof FieldElementBox && !this.selection.isInlineFormFillMode()) {\n inline = inline.fieldBegin;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline.nextNode instanceof BookmarkElementBox && inline.nextNode.reference) {\n var start = inline.nextNode.reference;\n selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 1));\n }\n selection.end.setPositionParagraph(inline.line, offset);\n selection.fireSelectionChanged(true);\n return;\n }\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, inline.length);\n selection.start.setPositionFromLine(inline.line, offset);\n selection.end.setPositionInternal(selection.start);\n }\n else {\n if (inline.bookmarkType === 1) {\n // remove paragraph mark and move bookmark to previous paragraph\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n var prevParagraph = paragraph.previousRenderedWidget;\n var line = prevParagraph.lastChild;\n selection.start.setPositionParagraph(inline.line, inline.line.getOffset(inline, 0));\n selection.end.setPositionParagraph(line, line.getEndOffset());\n this.removeWholeElement(selection);\n return;\n }\n }\n else {\n if (inline.paragraph.previousWidget instanceof ParagraphWidget) {\n selection.start.setPositionFromLine(inline.line, 0);\n selection.end.setPositionInternal(selection.start);\n offset = 0;\n }\n else {\n return;\n }\n }\n }\n // Remove bookmark if selection is in between bookmark start and end element.\n }\n else if (inline.nextNode instanceof BookmarkElementBox && inline instanceof BookmarkElementBox &&\n inline.bookmarkType === 0 && inline.reference === inline.nextNode) {\n this.deleteBookmark(inline.name);\n return;\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox && inline.previousNode instanceof BookmarkElementBox) {\n var begin = inline.previousNode;\n var end = inline.nextNode;\n selection.start.setPositionParagraph(begin.line, begin.line.getOffset(begin, 0));\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.removeWholeElement(selection);\n return;\n }\n }\n if (!isRedoing) {\n this.initHistory('BackSpace');\n }\n if (offset === selection.getStartOffset(paragraph) && selection.start.currentWidget.isFirstLine()) {\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1) {\n // BUG_859140 - handled backspace for list as per word desktop behaviour\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.undoStack) && this.editorHistory.undoStack.length > 0 &&\n this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1].action === 'ListFormat') {\n this.onApplyListInternal(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId), paragraph.paragraphFormat.listFormat.listLevelNumber - 1);\n }\n else {\n this.onApplyList(undefined);\n }\n return;\n }\n if (paragraph.paragraphFormat.firstLineIndent !== 0) {\n this.onApplyParagraphFormat('firstLineIndent', 0, false, false);\n if (paragraph.paragraphFormat.leftIndent !== 0) {\n this.onApplyParagraphFormat('leftIndent', 0, false, false);\n }\n return;\n }\n if (paragraph.paragraphFormat.leftIndent !== 0) {\n this.onApplyParagraphFormat('leftIndent', 0, false, false);\n return;\n }\n if (!paragraph.paragraphFormat.bidi && paragraph.paragraphFormat.textAlignment !== 'Left') {\n this.onApplyParagraphFormat('textAlignment', 'Left', false, true);\n return;\n }\n if (paragraph.previousRenderedWidget instanceof ParagraphWidget) {\n selection.owner.isShiftingEnabled = true;\n var previousParagraph = paragraph.previousRenderedWidget;\n // if (isNullOrUndefined(previousParagraph)) {\n // previousParagraph = this.documentHelper.selection.getPreviousBlock(paragraph) as ParagraphWidget;\n // }\n if (this.owner.enableTrackChanges && paragraph.previousRenderedWidget != undefined && paragraph.previousRenderedWidget.characterFormat.revisions.length == 0) {\n if (!this.checkToMatchEmptyParaMarkBack(previousParagraph)) {\n this.insertRevision(previousParagraph.characterFormat, 'Deletion');\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n else {\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n }\n else if (previousParagraph.isEmpty() && !this.owner.enableTrackChanges) {\n this.removePrevParaMarkRevision(paragraph);\n if (!(paragraph === paragraph.bodyWidget.lastChild && previousParagraph.bodyWidget.index !== paragraph.bodyWidget.index)) {\n this.removeBlock(previousParagraph);\n this.addRemovedNodes(previousParagraph);\n var prevParagraph = paragraph.previousRenderedWidget;\n if (!isNullOrUndefined(prevParagraph) && prevParagraph instanceof ParagraphWidget && prevParagraph.isEmpty() && prevParagraph.bodyWidget.index !== paragraph.bodyWidget.index) {\n selection.moveToPreviousCharacter();\n }\n }\n else {\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n }\n }\n else if (this.owner.enableTrackChanges && previousParagraph.characterFormat.revisions != undefined && previousParagraph.characterFormat.revisions[0].revisionType == 'Deletion') {\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n this.addRemovedNodes(paragraph);\n }\n else if (this.owner.enableTrackChanges && previousParagraph.characterFormat.revisions != undefined && selection.start.isAtParagraphStart && previousParagraph.isEmpty()) {\n this.addRemovedRevisionInfo(previousParagraph.characterFormat, undefined, false);\n this.addRemovedNodes(previousParagraph);\n this.removePrevParaMarkRevision(paragraph);\n this.removeBlock(previousParagraph, false, true);\n }\n else {\n var checkCombine = false;\n if (!(paragraph === paragraph.bodyWidget.lastChild && previousParagraph.bodyWidget.index !== paragraph.bodyWidget.index) && paragraph.bodyWidget.sectionFormat.breakCode !== 'NoBreak') {\n if (previousParagraph.characterFormat.revisions != undefined) {\n this.addRemovedRevisionInfo(previousParagraph.characterFormat, undefined, false);\n this.addRemovedNodes(previousParagraph.characterFormat);\n }\n this.removePrevParaMarkRevision(paragraph);\n this.removeBlock(paragraph, false, true);\n checkCombine = true;\n }\n var endOffset = this.documentHelper.selection.getLineLength(previousParagraph.lastChild);\n var previousIndex = previousParagraph.childWidgets.length - 1;\n var lineWidget = void 0;\n if (!paragraph.isEmpty() && checkCombine) {\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n lineWidget = paragraph.childWidgets[i];\n previousParagraph.childWidgets.push(lineWidget);\n for (var j = 0; j < lineWidget.children.length; j++) {\n if (lineWidget.children[j] instanceof FootnoteElementBox) {\n var index = this.documentHelper.footnoteCollection.indexOf(lineWidget.children[j]);\n if (index === -1) {\n lineWidget.children[j].isLayout = false;\n var indexcolle = parseInt(lineWidget.children[j].text);\n this.documentHelper.footnoteCollection.splice(indexcolle - 1, 0, lineWidget.children[j]);\n // this.documentHelper.footnoteCollection.push(lineWidget.children[j] as FootnoteElementBox);\n }\n }\n }\n paragraph.childWidgets.splice(i, 1);\n i--;\n lineWidget.paragraph = previousParagraph;\n }\n }\n this.documentHelper.layout.reLayoutParagraph(previousParagraph, previousIndex, 0);\n selection.selects(previousParagraph.childWidgets[previousIndex], endOffset, true);\n if (checkCombine) {\n this.addRemovedNodes(paragraph);\n }\n }\n this.setPositionForHistory();\n var footNoteWidgets = this.documentHelper.layout.getFootNoteWidgetsOf(paragraph);\n if (footNoteWidgets.length > 0) {\n var layout = this.documentHelper.layout;\n var bodyWidget = paragraph.bodyWidget;\n layout.layoutfootNote(bodyWidget.page.footnoteWidget);\n }\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n }\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = offset - 1;\n if (removeOffset < 0) {\n lineWidget = lineWidget.previousLine;\n removeOffset = this.documentHelper.selection.getLineLength(lineWidget) + removeOffset;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n var contentControl = this.documentHelper.owner.editor.getContentControl();\n if (!isNullOrUndefined(contentControl) && contentControl.contentControlProperties.isTemporary) {\n this.removeContentControl();\n }\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset - 1, false);\n this.setPositionForHistory();\n if (!isRedoing) {\n this.reLayout(selection);\n if (isCommentDelete) {\n this.owner.editorHistoryModule.undoStack[this.owner.editorHistoryModule.undoStack.length - 2].modifiedActions.push(this.owner.editorHistoryModule.undoStack[this.owner.editorHistoryModule.undoStack.length - 1]);\n this.owner.editorHistoryModule.undoStack.splice(this.owner.editorHistoryModule.undoStack.length - 1, 1);\n isCommentDelete = false;\n }\n }\n else {\n this.fireContentChange();\n }\n }\n if (initComplextHistory && this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n };\n Editor.prototype.setPositionForHistory = function (editPosition) {\n var selection = this.documentHelper.selection;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n if (isNullOrUndefined(editPosition)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = editPosition;\n this.editorHistory.currentBaseHistoryInfo.endPosition = editPosition;\n }\n }\n };\n /**\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.removeAtOffset = function (lineWidget, selection, offset) {\n var count = 0;\n var lineIndex = lineWidget.paragraph.childWidgets.indexOf(lineWidget);\n var childLength = lineWidget.children.length;\n for (var i = 0; i < childLength; i++) {\n var inline = lineWidget.children[i];\n if (inline instanceof ListTextElementBox) {\n continue;\n }\n var isBreak = this.removeCharacter(inline, offset, count, lineWidget, lineIndex, i);\n if (isBreak) {\n break;\n }\n count += inline.length;\n }\n };\n Editor.prototype.removeCharacter = function (inline, offset, count, lineWidget, lineIndex, i, isRearrange) {\n var isBreak = false;\n if (inline instanceof BookmarkElementBox && inline.reference && inline.line !== inline.reference.line && !(lineWidget.children[i] instanceof BookmarkElementBox)) {\n if (!isNullOrUndefined(inline.line.previousLine)) {\n inline.line.previousLine.children.splice(inline.line.previousLine.children.length, 0, inline);\n inline.line = inline.line.previousLine;\n }\n else if (!isNullOrUndefined(inline.line.paragraph.previousRenderedWidget)) {\n inline.line.paragraph.previousRenderedWidget.lastChild.children.splice(inline.line.paragraph.previousRenderedWidget.lastChild.children.length, 0, inline);\n inline.line = inline.line.paragraph.previousRenderedWidget.lastChild;\n }\n else if (!isNullOrUndefined(inline.line.paragraph.nextRenderedWidget)) {\n inline.line.paragraph.nextRenderedWidget.firstChild.children.splice(inline.line.paragraph.nextRenderedWidget.firstChild.children.length, 0, inline);\n inline.line = inline.line.paragraph.nextRenderedWidget.firstChild;\n }\n lineWidget.children.splice(i, 1);\n if (!isNullOrUndefined(lineWidget.layoutedElements) && lineWidget.layoutedElements.length > 0) {\n lineWidget.layoutedElements.splice(i, 1);\n }\n return true;\n }\n if (offset < count + inline.length) {\n var indexInInline = offset - count;\n inline.ischangeDetected = true;\n if (this.owner.isSpellCheck) {\n // here we are removing errorCollection for next & previous elements for recalculating spellcheck error\n var nextElement = inline.nextElement;\n var previousElement = inline.previousElement;\n this.owner.spellCheckerModule.removeErrorsFromCollection({ 'element': inline, 'text': inline.text });\n if (!isNullOrUndefined(nextElement) && nextElement instanceof TextElementBox) {\n nextElement.ischangeDetected = true;\n this.owner.spellCheckerModule.removeErrorsFromCollection({ 'element': nextElement, 'text': nextElement.text });\n }\n if (!isNullOrUndefined(previousElement) && previousElement instanceof TextElementBox) {\n previousElement.ischangeDetected = true;\n this.owner.spellCheckerModule.removeErrorsFromCollection({ 'element': previousElement, 'text': previousElement.text });\n }\n if (!inline.canTrigger) {\n this.documentHelper.triggerSpellCheck = false;\n }\n }\n if (offset === count && inline.length === 1) {\n if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.addRemovedNodes(inline.clone());\n this.handleDeleteTracking(inline, indexInInline, 1, i);\n }\n else {\n this.unLinkFieldCharacter(inline);\n this.unlinkRangeFromRevision(inline, true);\n this.addRemovedRevisionInfo(inline, undefined);\n this.addRemovedNodes(inline);\n if (this.owner.enableTrackChanges && this.editorHistory.isRedoing && inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n lineWidget.children.splice(i, 1);\n if (!isNullOrUndefined(lineWidget.layoutedElements) && lineWidget.layoutedElements.length > 0) {\n lineWidget.layoutedElements.splice(i, 1);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i, undefined, isRearrange);\n }\n else {\n var span = this.handleDeleteTracking(inline, indexInInline, 1);\n this.documentHelper.layout.reLayoutParagraph(lineWidget.paragraph, lineIndex, i, undefined, isRearrange);\n if (!isNullOrUndefined(span)) {\n if (inline.revisions.length > 0) {\n this.addRemovedRevisionInfo(inline, span);\n }\n this.addRemovedNodes(span);\n }\n }\n if (inline instanceof EditRangeStartElementBox) {\n this.selection.skipEditRangeRetrieval = true;\n this.removeUserRestrictionsInternal(inline, undefined, true);\n this.selection.updateEditRangeCollection();\n this.fireContentChange();\n this.selection.skipEditRangeRetrieval = false;\n }\n if (inline instanceof BookmarkElementBox) {\n if (inline.bookmarkType === 0 && this.documentHelper.bookmarks.containsKey(inline.name)) {\n this.documentHelper.bookmarks.remove(inline.name);\n }\n }\n isBreak = true;\n }\n return isBreak;\n };\n Editor.prototype.removeCharacterInLine = function (inline, indexInInline, endOffset) {\n var span = new TextElementBox();\n if (inline instanceof TextElementBox) {\n inline.isWidthUpdated = false;\n span.characterFormat.copyFormat(inline.characterFormat);\n var removedCount = (endOffset === 1) ? 1 : (endOffset - indexInInline);\n span.text = inline.text.substr(indexInInline, removedCount);\n var text = inline.text;\n inline.text = text.substring(0, indexInInline) + text.substring(indexInInline + removedCount, text.length);\n if (inline.contentControlProperties) {\n span.contentControlProperties = inline.contentControlProperties.clone();\n }\n }\n return span;\n };\n Editor.prototype.removeRevisionsInformation = function (elementBox, indexInInline, endOffset, elementIndex) {\n var removeElement = elementBox.previousElement;\n var revision;\n revision = this.retrieveRevisionInOder(removeElement);\n if (revision.revisionType === 'Insertion') {\n if (this.isRevisionMatched(removeElement, undefined)) {\n elementBox.line.children.splice(elementIndex, 1);\n }\n }\n };\n Editor.prototype.handleDeleteTracking = function (elementBox, indexInInline, endOffset, elementIndex, isSkipRecordRevision, startIndex, endIndex) {\n var isTrackingEnabled = this.owner.enableTrackChanges;\n var isUndoing = isNullOrUndefined(this.editorHistory) ? false : (this.editorHistory.isUndoing || this.editorHistory.isRedoing);\n var removedNode = undefined;\n if (this.canHandleDeletion() || (isTrackingEnabled && (!this.skipTracking() || (elementBox.paragraph.isInsideTable && !isNullOrUndefined(this.editorHistory) && this.editorHistory.isRedoing && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action === \"RemoveRowTrack\")))) {\n if (elementBox instanceof BookmarkElementBox || elementBox instanceof CommentCharacterElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox) {\n if (elementBox instanceof BookmarkElementBox && elementBox.previousElement instanceof FieldElementBox && elementBox.previousElement.formFieldData) {\n if (elementBox.previousElement.revisions.length > 0) {\n this.removeRevisionsInformation(elementBox, indexInInline, endOffset, elementIndex);\n }\n }\n else {\n if (isTrackingEnabled && elementBox instanceof BookmarkElementBox) {\n if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n }\n this.updateLastElementRevision(elementBox);\n }\n else {\n elementBox.line.children.splice(elementBox.indexInOwner, 1);\n }\n }\n return undefined;\n }\n var isDelete = false;\n if (this.owner.editorHistoryModule) {\n isDelete = (!isNullOrUndefined(this.owner.editorHistoryModule.currentBaseHistoryInfo) && this.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'Delete');\n }\n if (!this.skipTableElements) {\n this.updateEndRevisionIndex();\n }\n if (elementBox.revisions.length > 0) {\n var revision = this.retrieveRevisionInOder(elementBox);\n var index = this.owner.revisions.changes.indexOf(revision);\n if (!isNullOrUndefined(this.owner.editorHistoryModule) && !isNullOrUndefined(this.owner.editorHistoryModule.currentBaseHistoryInfo) && !isSkipRecordRevision) {\n var startValue = isNullOrUndefined(elementIndex) ? indexInInline : 0;\n var endValue = isNullOrUndefined(elementIndex) ? ((endOffset === 1) ? 1 : (endOffset - indexInInline)) : elementBox.length;\n this.owner.editorHistoryModule.currentBaseHistoryInfo.recordInsertRevisionDeletetion(elementBox, startValue, endValue);\n }\n if (revision.revisionType === 'Insertion') {\n if (this.isRevisionMatched(elementBox, undefined)) {\n // inserted revision same author as delete revision so we can delete\n if (isNullOrUndefined(elementIndex)) {\n removedNode = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n var revision_2 = elementBox.revisions[0];\n if (!isNullOrUndefined(revision_2)) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision_2);\n }\n }\n else {\n var index_1 = revision.range.indexOf(elementBox);\n revision.range.splice(index_1, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n if (revision.range.length === 0) {\n this.owner.revisionsInternal.remove(revision);\n }\n this.unLinkFieldCharacter(elementBox);\n elementBox.line.children.splice(elementIndex, 1);\n }\n if (elementBox instanceof FootnoteElementBox) {\n if (elementBox.footnoteType === 'Footnote') {\n this.removeFootnote(elementBox);\n }\n else {\n this.removeEndnote(elementBox);\n }\n }\n }\n else {\n //Insert revision and delete revision (which is to be included) haven't matched\n if (isNullOrUndefined(elementIndex)) {\n var text = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n var revision_3 = elementBox.revisions[0];\n if (!isNullOrUndefined(revision_3)) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision_3);\n }\n if (indexInInline === 0) {\n var prevElement = elementBox.previousElement;\n this.handleDeletionForInsertRevision(prevElement, elementBox, text, endOffset, indexInInline, true);\n }\n else if (elementBox.length !== indexInInline) {\n for (var i = elementBox.revisions.length - 1; i >= 0; i--) {\n var revision_4 = elementBox.revisions[i];\n var index_2 = revision_4.range.indexOf(elementBox);\n var newElement = new TextElementBox();\n newElement.characterFormat.copyFormat(elementBox.characterFormat);\n newElement.line = elementBox.line;\n newElement.text = elementBox.text.substr(indexInInline);\n newElement.revisions.splice(0, 0, revision_4);\n revision_4.range.splice(index_2 + 1, 0, newElement);\n text.revisions.splice(0, 0, revision_4);\n text.line = elementBox.line;\n text.isWidthUpdated = false;\n revision_4.range.splice(index_2 + 1, 0, text);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision_4);\n elementBox.text = elementBox.text.substr(0, indexInInline);\n elementBox.isWidthUpdated = false;\n var indexInOwner = elementBox.indexInOwner;\n elementBox.line.children.splice(indexInOwner + 1, 0, newElement);\n elementBox.line.children.splice(indexInOwner + 1, 0, text);\n this.addRemovedNodes(text.clone());\n this.insertRevision(text, 'Deletion');\n this.updateLastElementRevision(text);\n }\n }\n else if (elementBox.length === indexInInline) {\n var nextElement = elementBox.nextElement;\n this.handleDeletionForInsertRevision(nextElement, elementBox, text, endOffset, indexInInline, false);\n }\n else {\n if (endOffset === 1) {\n if (!isDelete) {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n else {\n this.updateCursorForInsertRevision(elementBox, indexInInline, endOffset);\n }\n this.addRemovedNodes(text.clone());\n this.insertInlineInternal(text, 'Deletion');\n }\n }\n else if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.updateLastElementRevision(elementBox);\n }\n }\n }\n else if (revision.revisionType === 'Deletion') {\n if (index !== -1 && revision.author !== this.owner.currentUser && revision.range.length > 0) {\n var range = revision.range;\n var startOff = range[0] instanceof WCharacterFormat ? 0 : range[0].line.getOffset(range[0], 0);\n var lastEle = range[range.length - 1] instanceof WCharacterFormat ? range[range.length - 2] : range[range.length - 1];\n var endOff = lastEle.line.getOffset(lastEle, lastEle.length);\n var isRevisionInserted = false;\n if (startOff === indexInInline && endOff === endOffset) {\n range.splice(range.indexOf(elementBox), 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n elementBox.revisions.splice(elementBox.revisions.indexOf(revision), 1);\n if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n isRevisionInserted = true;\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.combineElementRevision(elementBox.revisions, elementBox.revisions);\n }\n if (isRevisionInserted && elementBox.line.getOffset(elementBox, 0) === startOff && this.owner.revisions.changes.indexOf(revision) !== -1 && revision.range.length === 0) {\n this.owner.revisions.changes.splice(index, 1);\n }\n }\n }\n if (endOffset === 1) {\n if (isDelete) {\n this.selection.start.moveNextPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n else {\n if (this.isRevisionMatched(elementBox, 'Deletion')) {\n this.updateCursorForInsertRevision(elementBox, indexInInline, endOffset);\n }\n else {\n var rangeIndex = revision.range.indexOf(elementBox);\n var endOff = elementBox.line.getOffset(elementBox, elementBox.length);\n if (endOff >= endOffset && (revision.range.length > (rangeIndex + 1))) {\n this.updateRevisionForSpittedTextElement(elementBox, revision.range[(rangeIndex + 1)]);\n revision.range.splice(revision.range.indexOf(elementBox), 1);\n this.toCombineOrInsertRevision(elementBox, 'Deletion');\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n }\n else if (revision.range.length === 1 || indexInInline === 0) {\n this.handleDeleteBySplitting(elementBox, indexInInline, endOffset);\n if (rangeIndex > 0 && revision.range.length !== 1) {\n this.updateRevisionForSpittedTextElement(revision.range[(rangeIndex - 1)], revision.range[rangeIndex]);\n revision = this.retrieveRevisionInOder(elementBox);\n revision.range.splice(revision.range.indexOf(elementBox), 1);\n }\n }\n else {\n revision.range.splice(revision.range.indexOf(elementBox), 1);\n this.toCombineOrInsertRevision(elementBox, 'Deletion');\n }\n }\n }\n this.updateLastElementRevision(elementBox);\n }\n }\n else {\n //No revision information in the element\n if (!isNullOrUndefined(elementIndex)) {\n if (!this.checkToCombineRevisionsInSides(elementBox, 'Deletion')) {\n this.insertRevision(elementBox, 'Deletion');\n }\n if (!this.skipFootNoteDeleteTracking) {\n this.updateLastElementRevision(elementBox);\n }\n }\n else {\n this.handleDeleteBySplitting(elementBox, indexInInline, endOffset);\n }\n }\n }\n else {\n removedNode = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n var revision = elementBox.revisions[0];\n if (!isNullOrUndefined(revision)) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n }\n }\n return removedNode;\n };\n Editor.prototype.toCombineOrInsertRevision = function (elementBox, type) {\n if (!this.checkToCombineRevisionsInSides(elementBox, type)) {\n this.insertRevision(elementBox, type);\n this.updateLastElementRevision(elementBox);\n }\n else {\n this.combineElementRevision(elementBox.revisions, elementBox.revisions);\n }\n };\n Editor.prototype.updateLastElementRevision = function (elementBox) {\n if (!this.skipTableElements) {\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo && !this.skipReplace && (!isNullOrUndefined(this.owner.searchModule) ? !this.owner.searchModule.isRepalceTracking : true)) {\n if (isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.lastElementRevision)) {\n this.editorHistory.currentBaseHistoryInfo.lastElementRevision = elementBox;\n }\n elementBox.isMarkedForRevision = true;\n }\n }\n };\n Editor.prototype.updateEndRevisionIndex = function () {\n if (!isNullOrUndefined(this.editorHistory.undoStack) && this.editorHistory.undoStack.length > 0) {\n var prevHistoryInfo = this.editorHistory.undoStack[this.editorHistory.undoStack.length - 1];\n if (prevHistoryInfo.lastElementRevision && isNullOrUndefined(prevHistoryInfo.endRevisionLogicalIndex)) {\n prevHistoryInfo.updateEndRevisionInfo();\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.retrieveRevisionInOder = function (elementBox) {\n if (elementBox.revisions.length === 1) {\n return elementBox.revisions[0];\n }\n for (var i = 0; i < elementBox.revisions.length; i++) {\n if (elementBox.revisions[i].revisionType === 'Deletion') {\n return elementBox.revisions[i];\n }\n }\n return elementBox.revisions[elementBox.revisions.length - 1];\n };\n Editor.prototype.handleDeletionForInsertRevision = function (elementToEnsure, currentElement, spittedSpan, endOffset, indexInInline, isBegin) {\n if (!isNullOrUndefined(elementToEnsure) && currentElement.revisions.length === 0 && this.isRevisionMatched(elementToEnsure, 'Deletion')) {\n this.addRemovedNodes(spittedSpan.clone());\n this.insertTextInline(elementToEnsure, this.selection, spittedSpan.text, 0);\n }\n else {\n var revision = currentElement.revisions[currentElement.revisions.length - 1];\n var index = revision.range.indexOf(currentElement);\n revision.range.splice((isBegin) ? index : index + 1, 0, spittedSpan);\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n spittedSpan.revisions.splice(0, 0, revision);\n var isDelete = false;\n if (this.owner.editorHistoryModule) {\n isDelete = (!isNullOrUndefined(this.owner.editorHistoryModule.currentBaseHistoryInfo) && this.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'Delete');\n }\n if (endOffset === 1 && !isDelete) {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n this.updateCursorForInsertRevision(currentElement, indexInInline, endOffset);\n }\n this.addRemovedNodes(spittedSpan.clone());\n this.insertInlineInternal(spittedSpan, 'Deletion');\n }\n };\n Editor.prototype.handleDeleteBySplitting = function (elementBox, indexInInline, endOffset) {\n var isDelete = false;\n if (this.owner.editorHistoryModule) {\n isDelete = (!isNullOrUndefined(this.owner.editorHistoryModule.currentBaseHistoryInfo) && this.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'Delete');\n }\n //Update cursor position to insert removed content\n if (endOffset === 1) {\n var startPosition = elementBox.line.getOffset(elementBox, 0);\n if (startPosition > 0) {\n var currentPosition = new TextPosition(this.owner);\n currentPosition.setPositionForLineWidget(elementBox.line, startPosition + indexInInline);\n this.selection.start.setPositionInternal(currentPosition);\n this.selection.end.setPositionInternal(this.selection.start);\n }\n else {\n if (!isDelete) {\n this.selection.start.movePreviousPosition();\n this.selection.end.setPositionInternal(this.selection.start);\n }\n }\n }\n else {\n this.updateCursorForInsertRevision(elementBox, indexInInline, endOffset);\n }\n var spittedElement = this.removeCharacterInLine(elementBox, indexInInline, endOffset);\n var revision = elementBox.revisions[0];\n if (!isNullOrUndefined(revision)) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(revision);\n }\n this.addRemovedNodes(spittedElement.clone());\n if (spittedElement.text === '' && !(this.owner.enableTrackChanges && !this.skipTracking())) {\n this.deleteParagraphMark(elementBox.paragraph, this.selection, 0, true);\n }\n else {\n this.insertTextInternal(spittedElement.text, false, 'Deletion');\n }\n };\n Editor.prototype.updateCursorForInsertRevision = function (inline, startOffset, endOffset) {\n var startPosition = inline.line.getOffset(inline, 0);\n if (startPosition > 0) {\n startOffset = startPosition + startOffset;\n endOffset = startPosition + endOffset;\n }\n var currentPosition = new TextPosition(this.owner);\n currentPosition.setPositionFromLine(inline.line, startOffset);\n var endPosition = new TextPosition(this.owner);\n endPosition.setPositionFromLine(inline.line, endOffset);\n if (!currentPosition.isExistBefore(endPosition)) {\n this.selection.start.setPositionInternal(endPosition);\n this.selection.end.setPositionInternal(endPosition);\n }\n else {\n this.selection.end.setPositionInternal(currentPosition);\n this.selection.start.setPositionInternal(currentPosition);\n }\n };\n Editor.prototype.checkToCombineRevisionsInSides = function (currentElement, revisionType) {\n var prevElement = currentElement.previousNode;\n var nextElement = currentElement.nextNode;\n var isCombined = false;\n if (!isNullOrUndefined(prevElement)) {\n if (!(prevElement instanceof BookmarkElementBox)) {\n prevElement = prevElement.previousValidNodeForTracking;\n }\n if (!isNullOrUndefined(prevElement)) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(prevElement.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, prevElement, currentElement, false);\n isCombined = true;\n }\n }\n }\n if (!isNullOrUndefined(nextElement)) {\n if (!(nextElement instanceof BookmarkElementBox)) {\n nextElement = nextElement.nextValidNodeForTracking;\n }\n if (!isNullOrUndefined(nextElement)) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(nextElement.revisions, revisionType);\n if (matchedRevisions.length > 0) {\n if (isCombined) {\n this.combineElementRevision(currentElement.revisions, nextElement.revisions);\n }\n else {\n this.mapMatchedRevisions(matchedRevisions, nextElement, currentElement, true);\n }\n isCombined = true;\n }\n }\n }\n return isCombined;\n };\n /**\n * Removes the current selected content or one character right of the cursor.\n *\n * @returns {void}\n */\n Editor.prototype.delete = function () {\n this.removeEditRange = true;\n var selection = this.documentHelper.selection;\n if (selection.bookmarks.length > 0) {\n this.extendSelectionToBookmarkStart();\n }\n if (selection.isEmpty) {\n this.singleDelete(selection, false);\n }\n else {\n var commentStarts = this.checkAndRemoveComments();\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n this.insertSpaceInFormField();\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentHistoryInfo)\n && this.editorHistory.currentHistoryInfo.action === 'RemoveComment') {\n for (var k = 0; k < commentStarts.length; k++) {\n this.initInsertInline(commentStarts[k], false);\n }\n this.editorHistory.currentHistoryInfo.endPosition = this.selection.startOffset;\n this.editorHistory.updateComplexHistory();\n }\n }\n this.removeEditRange = false;\n this.documentHelper.layout.islayoutFootnote = false;\n this.updateXmlMappedContentControl();\n };\n Editor.prototype.deleteEditElement = function (selection) {\n this.initHistory('Delete');\n this.deleteSelectedContentInternal(selection, false, selection.start, selection.end);\n var textPosition = new TextPosition(selection.owner);\n this.setPositionForCurrentIndex(textPosition, selection.editPosition);\n selection.selectContent(textPosition, true);\n this.reLayout(selection);\n };\n Editor.prototype.removeContentControlMark = function (start, end) {\n if (!start.contentControlProperties.lockContentControl) {\n this.selection.start.setPositionParagraph(start.line, start.line.getOffset(start, 0));\n this.selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 0) + 1);\n this.deleteEditElement(this.selection);\n return true;\n }\n return false;\n };\n /**\n * Remove single character on right of cursor position\n *\n * @param {Selection} selection - Specifies the selection\n * @param {boolean} isRedoing - Specified the is redoing.\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Editor.prototype.singleDelete = function (selection, isRedoing) {\n var lineWidget = selection.start.currentWidget;\n var paragraph = selection.start.paragraph;\n var offset = selection.start.offset;\n var indexInInline = 0;\n var inlineObj = lineWidget.getInline(selection.start.offset, indexInInline);\n var inline = inlineObj.element;\n if (this.selection.isInlineFormFillMode()) {\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n return;\n }\n var resultText = this.getFieldResultText();\n if (!(inline instanceof TextElementBox)) {\n inline = inline.nextElement;\n }\n if (resultText.length === 1 && inline instanceof TextElementBox) {\n this.selection.selectFieldInternal(this.selection.getCurrentFormField());\n this.insertTextInternal(this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5), true);\n this.selection.selectTextElementStartOfField(this.selection.getCurrentFormField());\n return;\n }\n else {\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n return;\n }\n }\n }\n indexInInline = inlineObj.index;\n if (paragraph.paragraphFormat.listFormat && paragraph.paragraphFormat.listFormat.listId !== -1 &&\n this.documentHelper.isListTextSelected && selection.contextType === 'List') {\n this.onApplyList(undefined);\n return;\n }\n if (!isNullOrUndefined(inline) && indexInInline === inline.length && !isNullOrUndefined(inline.nextNode)) {\n inline = inline.nextNode;\n if (inline instanceof FieldElementBox && inline.fieldType === 1 &&\n !isNullOrUndefined(inline.fieldBegin.formFieldData)) {\n return;\n }\n if (inline instanceof FootnoteElementBox) {\n return;\n }\n indexInInline = 0;\n }\n var updateSelection = inline instanceof CommentCharacterElementBox;\n //Skip removing comment start/end mark on delete key\n while (inline instanceof CommentCharacterElementBox) {\n if (inline.nextNode) {\n inline = inline.nextNode;\n indexInInline = 0;\n }\n else {\n indexInInline = 1;\n break;\n }\n }\n if (updateSelection) {\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, indexInInline);\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n }\n if (!this.owner.enableTrackChanges && inline instanceof FootnoteElementBox) {\n if (inline.footnoteType === 'Footnote') {\n this.removeFootnote(inline);\n }\n else {\n this.removeEndnote(inline);\n }\n }\n if (!isNullOrUndefined(inline)) {\n var nextRenderedInline = undefined;\n var nextInline = selection.getNextValidElement(inline);\n if (nextInline instanceof ElementBox) {\n nextRenderedInline = nextInline;\n }\n if (!isNullOrUndefined(nextRenderedInline) && nextRenderedInline instanceof FieldElementBox\n && nextRenderedInline.fieldType === 0) { //Selects the entire field.\n inline = nextRenderedInline.fieldEnd;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 1);\n selection.end.setPositionParagraph(inline.line, offset);\n if (inline.nextNode instanceof BookmarkElementBox) {\n var end = inline.nextNode;\n selection.end.setPositionParagraph(end.line, end.line.getOffset(end, 1));\n }\n selection.fireSelectionChanged(true);\n return;\n }\n else if (inline !== nextRenderedInline) { //Updates the offset to delete next content. \n inline = nextRenderedInline;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n if (inline instanceof FieldElementBox && inline.fieldType === 1) {\n offset++;\n }\n }\n }\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n if ((inline.nextNode instanceof EditRangeEndElementBox && inline.editRangeEnd === inline.nextNode)\n || (inline.previousNode instanceof EditRangeStartElementBox\n && inline.editRangeStart === inline.previousNode)) {\n return;\n }\n if (this.documentHelper.isDocumentProtected &&\n this.documentHelper.protectionType === 'ReadOnly') {\n if (inline instanceof EditRangeStartElementBox || inline instanceof EditRangeEndElementBox) {\n return;\n }\n }\n else {\n if (inline instanceof EditRangeStartElementBox) {\n inline = inline.nextNode;\n offset = inline.line.getOffset(inline, 0);\n paragraph = inline.line.paragraph;\n }\n else if (inline instanceof EditRangeEndElementBox) {\n offset++;\n }\n }\n if (inline.length === 1 && inline.nextNode instanceof EditRangeEndElementBox\n && inline.previousNode instanceof EditRangeStartElementBox) {\n var editStart = inline.previousNode;\n var editEnd = inline.nextNode;\n selection.start.setPositionParagraph(editStart.line, editStart.line.getOffset(editStart, 0));\n selection.end.setPositionParagraph(editEnd.line, editEnd.line.getOffset(editEnd, 0) + 1);\n this.deleteEditElement(selection);\n return;\n }\n }\n if (inline && (inline instanceof ContentControl || inline.nextNode instanceof ContentControl)) {\n if (inline instanceof ContentControl && inline.nextNode) {\n inline = inline.nextNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n // Move cursor inbetween content control\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n return;\n }\n if (inline && inline.length === 1 && inline.nextNode instanceof ContentControl\n && inline.previousNode instanceof ContentControl) {\n if (this.removeContentControlMark(inline.previousNode, inline.nextNode)) {\n return;\n }\n }\n // Remove content if content control is empty\n if (inline instanceof ContentControl && inline.previousNode instanceof ContentControl\n && inline.previousNode.reference === inline) {\n // Remove content control if there is no element presen in between start and end mark.\n if (this.removeContentControlMark(inline.previousNode, inline)) {\n return;\n }\n }\n }\n if (inline && (inline instanceof BookmarkElementBox && inline.bookmarkType === 0\n || inline.nextNode instanceof BookmarkElementBox)) {\n if (inline.nextNode && inline instanceof BookmarkElementBox) {\n inline = inline.nextNode;\n paragraph = inline.line.paragraph;\n offset = inline.line.getOffset(inline, 0);\n selection.start.setPositionParagraph(inline.line, offset);\n selection.end.setPositionParagraph(inline.line, offset);\n }\n if (inline.length === 1 && inline.nextNode instanceof BookmarkElementBox\n && inline.previousNode instanceof BookmarkElementBox) {\n var bookMarkBegin = inline.previousNode;\n var bookMarkEnd = inline.nextNode;\n selection.start.setPositionParagraph(bookMarkBegin.line, bookMarkBegin.line.getOffset(bookMarkBegin, 0));\n selection.end.setPositionParagraph(bookMarkEnd.line, bookMarkEnd.line.getOffset(bookMarkEnd, 0) + 1);\n this.deleteEditElement(selection);\n return;\n }\n if (inline instanceof BookmarkElementBox) {\n offset = inline.line.getOffset(inline, 1);\n }\n }\n if (selection.start.currentWidget.isLastLine() && offset === this.documentHelper.selection.getLineLength(selection.start.currentWidget)) {\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget)) {\n return;\n }\n var previousParagraph = undefined;\n var newParagraph = undefined;\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (offset > 0) {\n return;\n }\n else {\n if (paragraph.previousWidget instanceof ParagraphWidget) {\n previousParagraph = paragraph.previousWidget;\n }\n if (paragraph.previousWidget instanceof FootNoteWidget) {\n return;\n }\n if (paragraph.previousWidget instanceof TableWidget) {\n return;\n }\n if (isNullOrUndefined(previousParagraph) || (paragraph.isEmpty() && previousParagraph.characterFormat.revisions.length > 0)) {\n return;\n //Adds an empty paragraph, to ensure minimal content.\n }\n }\n }\n if (!isRedoing) {\n this.initHistory('Delete');\n }\n if (paragraph.isEndsWithPageBreak || paragraph.isEndsWithColumnBreak) {\n var lastLine = paragraph.lastChild;\n var lastChild = lastLine.children[lastLine.children.length - 1];\n this.selection.start.setPositionForSelection(lastLine, lastChild, 0, this.selection.start.location);\n }\n var blockInfo = this.selection.getParagraphInfo(selection.start);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n if (this.checkInsertPosition(selection)) {\n this.setPositionForHistory(selection.editPosition);\n }\n selection.owner.isShiftingEnabled = true;\n if (paragraph.isEmpty()) {\n this.removePrevParaMarkRevision(paragraph, true);\n var nxtParagraph = selection.getNextParagraphBlock(paragraph);\n if (!isNullOrUndefined(nxtParagraph) && nxtParagraph instanceof ParagraphWidget && nxtParagraph.bodyWidget.index !== paragraph.bodyWidget.index) {\n this.deleteSection(selection, paragraph.bodyWidget, nxtParagraph.bodyWidget, 0);\n this.editorHistory.currentBaseHistoryInfo.type = \"SectionBreak\";\n }\n this.removeBlock(paragraph, false, true);\n this.addRemovedNodes(paragraph);\n if (isNullOrUndefined(nextParagraph)) {\n if (isNullOrUndefined(previousParagraph)) {\n // selection.selectParagraphInternal(newParagraph, true, true);\n var paraEndOffset = selection.getParagraphLength(newParagraph) + 1;\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.selection.getHierarchicalIndex(newParagraph, paraEndOffset.toString());\n }\n }\n else {\n selection.selectParagraphInternal(previousParagraph, false);\n this.setPositionForHistory();\n }\n }\n else {\n selection.selectParagraphInternal(nextParagraph, true);\n }\n }\n else {\n if (this.owner.enableTrackChanges && paragraph.nextRenderedWidget instanceof ParagraphWidget) {\n var nextParagraph_1 = paragraph.nextRenderedWidget;\n var startingOffset = 0;\n var nextIndex = nextParagraph_1.childWidgets.length - 1;\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, selection.start.currentWidget, selection.start.offset, true);\n if (paragraph != undefined && paragraph.characterFormat.revisions.length != 0 && paragraph.characterFormat.revisions[0].revisionType == 'Insertion') {\n this.removePrevParaMarkRevision(paragraph, true);\n this.deleteParagraphMark(currentParagraph, selection, 0);\n this.addRemovedNodes(paragraph);\n this.setPositionForCurrentIndex(selection.start, selection.editPosition);\n selection.selectContent(selection.start, true);\n }\n else {\n this.removePrevParaMarkRevision(paragraph, true);\n this.deleteParagraphMark(currentParagraph, selection, 0, true);\n this.addRemovedNodes(paragraph);\n this.setPositionForCurrentIndex(selection.start, selection.editPosition);\n selection.selects(nextParagraph_1.childWidgets[nextIndex], startingOffset, true);\n }\n }\n else {\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var currentParagraph = this.splitParagraph(paragraph, paragraph.firstChild, 0, selection.start.currentWidget, selection.start.offset, true);\n this.removePrevParaMarkRevision(paragraph, true);\n this.deleteParagraphMark(currentParagraph, selection, 0);\n this.addRemovedNodes(paragraph);\n this.setPositionForCurrentIndex(selection.start, selection.editPosition);\n selection.selectContent(selection.start, true);\n }\n }\n // if (!isRedoing) {\n this.reLayout(selection);\n // }\n }\n else {\n var inline_1 = inlineObj.element;\n if (inline_1 instanceof ContentControl) {\n var contentControl = this.getContentControl();\n this.selection.selectContentControlInternal(contentControl);\n if ((!isNullOrUndefined(contentControl) && inline_1.type === 1 && contentControl.contentControlProperties.lockContentControl && isNullOrUndefined(inline_1.nextElement))) {\n if (this.selection.isEmpty) {\n this.delete();\n }\n else {\n return;\n }\n }\n if ((!isNullOrUndefined(contentControl) && inline_1.type === 0 && inline_1.nextElement !== contentControl.reference) || (!isNullOrUndefined(contentControl) && inline_1.type === 0 && contentControl.contentControlProperties.lockContentControl && inline_1.nextElement === contentControl.reference)) {\n return;\n }\n }\n else {\n this.singleDeleteInternal(selection, isRedoing, paragraph);\n }\n }\n var line = selection.start.currentWidget;\n var elementInfo = line.getInline(selection.start.offset + 1, 0);\n if (elementInfo.element instanceof BookmarkElementBox) {\n selection.start.offset++;\n selection.end.offset++;\n }\n };\n Editor.prototype.singleDeleteInternal = function (selection, isRedoing, paragraph) {\n if (!isRedoing) {\n selection.owner.isShiftingEnabled = true;\n this.initHistory('Delete');\n }\n if (this.checkInsertPosition(selection)) {\n this.updateHistoryPosition(selection.start, true);\n this.editorHistory.currentBaseHistoryInfo.endPosition = this.editorHistory.currentBaseHistoryInfo.insertPosition;\n }\n var paragraphInfo = this.selection.getParagraphInfo(selection.start);\n var lineWidget = selection.start.currentWidget;\n var removeOffset = selection.start.offset;\n var lineLength = selection.getLineLength(selection.start.currentWidget);\n if (removeOffset >= lineLength) {\n lineWidget = lineWidget.nextLine;\n removeOffset = removeOffset - lineLength;\n }\n this.removeAtOffset(lineWidget, selection, removeOffset);\n if (this.owner.enableTrackChanges && !isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && this.editorHistory.currentBaseHistoryInfo.action === 'Delete' && lineLength !== selection.getLineLength(selection.start.currentWidget)) {\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset, false);\n }\n else if (this.owner.enableTrackChanges && !this.skipTracking()) {\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + 1, false);\n }\n else {\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset, false);\n }\n if (!isRedoing) {\n this.reLayout(selection);\n }\n else {\n this.fireContentChange();\n }\n };\n Editor.prototype.deleteParagraphMark = function (paragraph, selection, editAction, handleParaMark, isCombineLastBlock, skipHistoryCollection) {\n if (isNullOrUndefined(paragraph.containerWidget)) {\n return;\n }\n paragraph = paragraph.combineWidget(this.owner.viewer);\n var nextParagraph = selection.getNextParagraphBlock(paragraph);\n if (paragraph.isInsideTable && isNullOrUndefined(paragraph.nextWidget) || isNullOrUndefined(nextParagraph)) {\n return;\n }\n //BodyWidget\n var section = paragraph.containerWidget instanceof BodyWidget ? paragraph.containerWidget : undefined;\n var table = undefined;\n if (selection.getNextRenderedBlock(paragraph) instanceof TableWidget) {\n table = selection.getNextRenderedBlock(paragraph);\n }\n else {\n table = undefined;\n }\n if (nextParagraph.isInsideTable && !isNullOrUndefined(table) && table.contains(nextParagraph.associatedCell)) {\n if (editAction < 4) {\n // let nextSection: BodyWidget = table.containerWidget instanceof BodyWidget ? table.containerWidget : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // } \n var offset = 0;\n this.removeBlock(paragraph);\n this.documentHelper.layout.clearListElementBox(nextParagraph);\n this.documentHelper.layout.clearListElementBox(paragraph);\n for (var i = paragraph.childWidgets.length - 1; i >= 0; i--) {\n var line = paragraph.childWidgets[i];\n for (var j = line.children.length - 1; j >= 0; j--) {\n var element = line.children[j];\n offset += element.length;\n nextParagraph.firstChild.children.unshift(element);\n element.line = nextParagraph.firstChild;\n // this.layoutInlineCollection(false, 0, nextParagraph.inlines, inline);\n }\n }\n this.documentHelper.layout.reLayoutParagraph(nextParagraph, 0, 0);\n if (offset > 0) {\n selection.editPosition = this.selection.getHierarchicalIndex(nextParagraph, offset.toString());\n }\n }\n }\n else {\n if (editAction < 4) {\n // let nextSection: WSection = nextParagraph.section instanceof WSection ? nextParagraph.section as WSection : undefined;\n // if (section !== nextSection) {\n // this.combineSection(section, selection, nextSection);\n // }\n var prevLength = paragraph.childWidgets.length - 1;\n var nextPara = nextParagraph.getSplitWidgets();\n nextParagraph = nextParagraph.combineWidget(this.owner.viewer);\n this.documentHelper.layout.clearListElementBox(nextParagraph);\n this.documentHelper.layout.clearListElementBox(paragraph);\n this.updateEditPositionOnMerge(paragraph, nextParagraph);\n var canRemoveParaMark = (!isNullOrUndefined(handleParaMark) && handleParaMark) ? this.handleDeleteParaMark(paragraph, nextPara[0]) : true;\n if (canRemoveParaMark) {\n var prevLastLineIndex = paragraph.childWidgets.length - 1;\n var elementIndex = paragraph.childWidgets[prevLastLineIndex].children.length - 1;\n for (var i = 0; i < nextParagraph.childWidgets.length; i++) {\n var inline_2 = nextParagraph.childWidgets[i];\n if (nextParagraph.characterFormat.revisions.length > 0) {\n for (var i_2 = 0; i_2 < nextParagraph.characterFormat.revisions.length; i_2++) {\n if (nextParagraph.characterFormat.revisions[i_2].range.indexOf(nextParagraph.characterFormat) !== -1) {\n var index = nextParagraph.characterFormat.revisions[i_2].range.indexOf(nextParagraph.characterFormat);\n nextParagraph.characterFormat.revisions[i_2].range.splice(index, 1);\n nextParagraph.characterFormat.revisions[i_2].range.splice(index, 0, paragraph.characterFormat);\n }\n paragraph.characterFormat.revisions.push(nextParagraph.characterFormat.revisions[i_2]);\n }\n }\n nextParagraph.childWidgets.splice(i, 1);\n paragraph.childWidgets.push(inline_2);\n inline_2.paragraph = paragraph;\n i--;\n }\n for (var i = 0; i < nextParagraph.floatingElements.length; i++) {\n var inline = nextParagraph.floatingElements[i];\n nextParagraph.floatingElements.splice(i, 1);\n paragraph.floatingElements.push(inline);\n i--;\n }\n if (nextParagraph.bodyWidget.index !== paragraph.bodyWidget.index) {\n this.deleteSection(selection, paragraph.bodyWidget, nextParagraph.bodyWidget, editAction);\n this.editorHistory.currentBaseHistoryInfo.type = \"SectionBreak\";\n }\n if (nextParagraph.childWidgets.length === 0) {\n nextParagraph.childWidgets.push(new LineWidget(nextParagraph));\n }\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n this.removeBlock(nextParagraph);\n //this.combineRevisionOnDeleteParaMark(paragraph, prevLastLineIndex, elementIndex);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo.action !== \"Insert\") {\n // if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentHistoryInfo) && this.editorHistory.currentHistoryInfo.action == 'Accept All') {\n // this.removeRevisionForBlock(nextParagraph, undefined, false, true);\n // }\n if (!skipHistoryCollection) {\n this.addRemovedNodes(nextParagraph, isCombineLastBlock);\n }\n }\n }\n }\n }\n };\n Editor.prototype.handleDeleteParaMark = function (currentPara, nextPara) {\n if (!this.owner.enableTrackChanges && currentPara.characterFormat.revisions.length > 0) {\n // If tracking disabled and revision exists then remove revision from character format\n for (var i = 0; i < currentPara.characterFormat.revisions.length; i++) {\n var currentRevision = currentPara.characterFormat.revisions[i];\n var rangeIndex = currentRevision.range.indexOf(currentPara.characterFormat);\n currentRevision.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n if (currentRevision.range.length === 0) {\n this.owner.revisions.remove(currentRevision);\n }\n return true;\n }\n }\n if (this.owner.enableTrackChanges) {\n var canRemoveParaMark = false;\n if (currentPara.characterFormat.revisions.length > 0) {\n var deleteRevision = this.retrieveRevisionByType(currentPara.characterFormat, 'Deletion');\n if (!isNullOrUndefined(deleteRevision) && this.isRevisionMatched(deleteRevision, 'Deletion')) {\n var revisionIndex = currentPara.characterFormat.revisions.indexOf(deleteRevision);\n currentPara.characterFormat.revisions.splice(revisionIndex, 1);\n deleteRevision.range.splice(deleteRevision.range.indexOf(currentPara.characterFormat), 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(deleteRevision);\n if (deleteRevision.range.length === 0) {\n this.owner.revisions.remove(deleteRevision);\n }\n canRemoveParaMark = true;\n }\n var insertRevision = this.retrieveRevisionByType(currentPara.characterFormat, 'Insertion');\n if (!isNullOrUndefined(insertRevision) && this.isRevisionMatched(currentPara.characterFormat, 'Insertion')) {\n var rangeIndex = insertRevision.range.indexOf(currentPara.characterFormat);\n insertRevision.range.splice(rangeIndex, 1);\n this.owner.trackChangesPane.updateCurrentTrackChanges(insertRevision);\n if (insertRevision.range.length === 0) {\n this.owner.revisions.remove(insertRevision);\n }\n canRemoveParaMark = true;\n }\n if (canRemoveParaMark) {\n return true;\n }\n else {\n this.applyRevisionForParaMark(currentPara, nextPara.firstChild, 'Deletion', false);\n }\n return false;\n }\n else {\n this.applyRevisionForParaMark(currentPara, nextPara.firstChild, 'Deletion', false);\n return false;\n }\n }\n return true;\n };\n Editor.prototype.insertDeleteParaMarkRevision = function (currentPara, nextPara) {\n var lastLine = currentPara.lastChild;\n var lastElement = lastLine.children.length > 0 ? lastLine.children[lastLine.children.length - 1].previousValidNodeForTracking : undefined;\n if (!isNullOrUndefined(lastElement)) {\n var matchedRevisions = this.getMatchedRevisionsToCombine(lastElement.revisions, 'Deletion');\n if (matchedRevisions.length > 0) {\n this.mapMatchedRevisions(matchedRevisions, lastElement, currentPara.characterFormat, false);\n }\n }\n var firstLine = nextPara.firstChild;\n var firstElement = firstLine.children[0].nextValidNodeForTracking;\n };\n Editor.prototype.retrieveRevisionByType = function (item, revisionToRetrieve) {\n for (var i = 0; i < item.revisions.length; i++) {\n if (item.revisions[i].revisionType === revisionToRetrieve) {\n return item.revisions[i];\n }\n }\n return undefined;\n };\n Editor.prototype.combineRevisionOnDeleteParaMark = function (paragraph, lineIndex, elementIndex) {\n var lastLine = paragraph.childWidgets[lineIndex];\n var lastElement = lastLine.children[elementIndex];\n var firstElement = lastElement.nextNode;\n firstElement = firstElement.nextValidNodeForTracking;\n lastElement = lastElement.nextValidNodeForTracking;\n if (firstElement.revisions.length > 0 && lastElement.revisions.length > 0) {\n this.combineElementRevisions(lastElement, firstElement);\n }\n };\n Editor.prototype.updateEditPositionOnMerge = function (currentParagraph, nextParagraph) {\n if (this.documentHelper.selection.editPosition === this.selection.getHierarchicalIndex(nextParagraph, '0') &&\n nextParagraph.nextRenderedWidget === undefined) {\n this.documentHelper.selection.editPosition = this.selection.getHierarchicalIndex(currentParagraph, this.documentHelper.selection.getLineLength(currentParagraph.lastChild).toString());\n }\n };\n Editor.prototype.checkEndPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.endPosition));\n };\n Editor.prototype.checkInsertPosition = function (selection) {\n return (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)\n && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo.insertPosition));\n };\n Editor.prototype.checkIsNotRedoing = function () {\n return this.documentHelper.owner.enableHistoryMode && !this.editorHistory.isRedoing;\n };\n /**\n * deleteSelectedContentInternal\n * @private\n */\n Editor.prototype.deleteSelectedContentInternal = function (selection, isBackSpace, startPosition, endPosition, isDeletecell) {\n var startPos = startPosition;\n var endPos = endPosition;\n if (!startPosition.isExistBefore(endPosition)) {\n startPos = endPosition;\n endPos = startPosition;\n }\n var blockInfo = this.selection.getParagraphInfo(startPos);\n selection.editPosition = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var skipBackSpace = false;\n if (isBackSpace && startPos.isInSameParagraph(endPos)) {\n //Handled specifically to skip removal of contents, if selection is only paragraph mark and next rendered block is table.\n if (startPos.offset < endPos.offset && startPos.offset === selection.getParagraphLength(endPos.paragraph)) {\n var nextBlock = selection.getNextRenderedBlock(startPos.paragraph);\n skipBackSpace = nextBlock instanceof TableWidget;\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && (this.editorHistory.currentBaseHistoryInfo.action === 'Accept All' || this.editorHistory.currentBaseHistoryInfo.action === 'Accept Change' || this.editorHistory.currentBaseHistoryInfo.action === 'Reject All' || this.editorHistory.currentBaseHistoryInfo.action === 'Reject Change' || this.editorHistory.isUndoing || this.editorHistory.isRedoing)) {\n skipBackSpace = false;\n }\n }\n //Handled specifically to remove paragraph completely (Delete behavior), if the selected paragraph is empty.\n if (endPos.offset === 1 && endPos.offset > selection.getParagraphLength(endPos.paragraph)\n && !(endPos.paragraph.isInsideTable && isNullOrUndefined(endPos.paragraph.nextWidget))) {\n isBackSpace = false;\n }\n }\n if (!skipBackSpace) {\n selection.owner.isShiftingEnabled = true;\n if (this.checkInsertPosition(selection)) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = selection.editPosition;\n }\n var editAction = (isBackSpace ? 1 : 0);\n this.deleteSelectedContent(endPos.paragraph, selection, startPos, endPos, editAction, isDeletecell);\n }\n return skipBackSpace;\n };\n /**\n * Init EditorHistory\n *\n * @private\n * @param {Action} action Specified the action.\n * @returns {void}\n */\n Editor.prototype.initHistory = function (action) {\n if (this.documentHelper.owner.enableHistoryMode) {\n this.editorHistory.initializeHistory(action);\n }\n };\n /**\n * Init Complex EditorHistory\n *\n * @private\n * @param {Action} action Specified the action.\n * @returns {void}\n */\n Editor.prototype.initComplexHistory = function (action) {\n if (this.documentHelper.owner.enableHistoryMode) {\n this.editorHistory.initComplexHistory(this.documentHelper.selection, action);\n }\n };\n //Insert Picture implementation starts\n /**\n * Insert image\n *\n * @private\n * @param {string} base64String Base64 string, web URL or file URL.\n * @param {number} width Image width\n * @param {number} height Image height\n * @param {string} alternateText Image alternateText\n * @returns {void}\n */\n Editor.prototype.insertPicture = function (base64String, width, height, alternateText, isUiInteracted) {\n var _this = this;\n var imageElementBox = new ImageElementBox(true);\n imageElementBox.width = width;\n imageElementBox.height = height;\n if (!isNullOrUndefined(alternateText) || alternateText != \"\") {\n imageElementBox.alternateText = alternateText;\n }\n imageElementBox.textWrappingStyle = 'Inline';\n if (HelperMethods.formatClippedString(base64String).extension === '.svg') {\n imageElementBox.metaFileImageString = base64String;\n imageElementBox.isMetaFile = true;\n this.generateFallBackImage(base64String, width, height, imageElementBox, isUiInteracted);\n if (!this.owner.enableCollaborativeEditing) {\n this.documentHelper.addBase64StringInCollection(imageElementBox);\n imageElementBox.element.src = this.documentHelper.getImageString(imageElementBox);\n this.insertPictureInternal(imageElementBox, isUiInteracted);\n }\n }\n else {\n if (!isNullOrUndefined(this.documentHelper)) {\n imageElementBox.imageString = base64String;\n imageElementBox.element.crossOrigin = 'Anonymous';\n this.documentHelper.addBase64StringInCollection(imageElementBox);\n var imgStr = this.documentHelper.getImageString(imageElementBox);\n if (!isNullOrUndefined(imgStr) && (HelperMethods.startsWith(imgStr, 'http://') || HelperMethods.startsWith(imgStr, 'https://'))) {\n var url = new URL(imgStr);\n if (url.search.length > 0) {\n imgStr += \"&t=\" + new Date().getTime();\n }\n else {\n imgStr += \"?t=\" + new Date().getTime();\n }\n // Generate fall back image for URL images.\n this.viewer.documentHelper.getBase64(base64String, width, height).then(function (imageUrlString) {\n _this.viewer.documentHelper.images.get(parseInt(imageElementBox.imageString))[1] = imageUrlString;\n });\n }\n imageElementBox.element.src = imgStr;\n this.insertPictureInternal(imageElementBox, isUiInteracted);\n }\n }\n };\n Editor.prototype.generateFallBackImage = function (base64String, width, height, imageElementBox, isUiInteracted) {\n var _this = this;\n var drawImage = new Image();\n drawImage.onload = function () {\n if (_this.isImageInsert && _this.owner.enableCollaborativeEditing) {\n _this.isRemoteAction = true;\n }\n var displayPixelRatio = Math.max(1, window.devicePixelRatio || 1);\n var draw = document.createElement('canvas');\n draw.width = width * displayPixelRatio;\n draw.height = height * displayPixelRatio;\n var context = draw.getContext('2d');\n context.scale(displayPixelRatio, displayPixelRatio);\n context.drawImage(drawImage, 0, 0, width, height);\n imageElementBox.imageString = draw.toDataURL('image/png', 1);\n if (_this.owner.enableCollaborativeEditing) {\n _this.documentHelper.addBase64StringInCollection(imageElementBox);\n imageElementBox.element.src = _this.documentHelper.getImageString(imageElementBox);\n _this.insertPictureInternal(imageElementBox, isUiInteracted, _this.isRemoteAction);\n _this.isImageInsert = false;\n _this.isRemoteAction = false;\n }\n };\n drawImage.src = base64String;\n if (this.isRemoteAction) {\n this.insertInlineInSelection(this.selection, imageElementBox);\n }\n };\n Editor.prototype.insertPictureInternal = function (imageElementBox, isUiInteracted, isElementInserted) {\n var selection = this.documentHelper.selection;\n var removedCommentStart = this.checkAndRemoveComments();\n this.initHistory('InsertInline');\n if (isUiInteracted) {\n this.fitImageToPage(selection, imageElementBox);\n }\n if (this.owner.enableCollaborativeEditing) {\n var imageString = void 0;\n var metaImageString = void 0;\n if (imageElementBox.isMetaFile) {\n imageString = this.documentHelper.images.get(parseInt(imageElementBox.imageString))[1].toString();\n metaImageString = this.documentHelper.images.get(parseInt(imageElementBox.metaFileImageString))[0].toString();\n }\n else {\n imageString = this.documentHelper.images.get(parseInt(imageElementBox.imageString)).toString();\n }\n var imageData = {\n imageString: imageString,\n height: HelperMethods.convertPixelToPoint(imageElementBox.height),\n width: HelperMethods.convertPixelToPoint(imageElementBox.width),\n metaString: metaImageString,\n alternativeText: imageElementBox.alternateText\n };\n this.editorHistory.currentBaseHistoryInfo.insertedData = imageData;\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Image;\n }\n if (!isElementInserted) {\n this.insertInlineInSelection(selection, imageElementBox);\n }\n this.reLayout(selection);\n this.updateHistoryForComments(removedCommentStart);\n };\n Editor.prototype.fitImageToPage = function (selection, imageElementBox) {\n var section = selection.start.paragraph.bodyWidget;\n var pageHeight = section.sectionFormat.pageHeight - section.sectionFormat.topMargin - section.sectionFormat.topMargin;\n var width = 0;\n if (section instanceof BodyWidget && section.sectionFormat.columns.length > 1) {\n // column width\n var colIndex = section.columnIndex;\n width = section.sectionFormat.columns[colIndex].width;\n }\n else {\n // page width\n width = HelperMethods.convertPointToPixel(section.sectionFormat.pageWidth - section.sectionFormat.leftMargin - section.sectionFormat.rightMargin);\n }\n // Resize image based on page width or column width\n if (imageElementBox.width > width) {\n imageElementBox.height = imageElementBox.height * width / imageElementBox.width;\n imageElementBox.width = width;\n }\n if (imageElementBox.height > pageHeight) {\n imageElementBox.width = imageElementBox.width * pageHeight / imageElementBox.height;\n imageElementBox.height = pageHeight;\n }\n };\n //Insert Picture implementation ends\n /**\n * @param {selection} Selection context.\n * @param {elementBox} Elementbox\n * @param selection\n * @param elementBox\n * @private\n */\n Editor.prototype.insertInlineInSelection = function (selection, elementBox) {\n if (this.checkIsNotRedoing()) {\n selection.owner.isShiftingEnabled = true;\n }\n if (!selection.isEmpty) {\n this.removeSelectedContents(selection);\n }\n // Need to check below case when undo/redo in trackchanges enabled. \n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo && this.owner.enableCollaborativeEditing) {\n this.editorHistory.currentBaseHistoryInfo.insertedElement = elementBox;\n if (elementBox instanceof CommentCharacterElementBox) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = elementBox.commentType == 0 ? CONTROL_CHARACTERS.Marker_Start : CONTROL_CHARACTERS.Marker_End;\n }\n else if (elementBox instanceof FootnoteElementBox) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_Start;\n this.editorHistory.currentBaseHistoryInfo.markerData.push(this.getMarkerData(elementBox));\n }\n else if (elementBox instanceof BookmarkElementBox || elementBox instanceof EditRangeStartElementBox || elementBox instanceof EditRangeEndElementBox || elementBox instanceof FieldElementBox || (elementBox instanceof TextElementBox && elementBox.removedIds.length == 0)) {\n this.editorHistory.currentBaseHistoryInfo.markerData.push(this.getMarkerData(elementBox, this.editorHistory.isUndoing));\n if (elementBox instanceof FieldElementBox && elementBox.fieldType === 0) {\n this.editorHistory.currentBaseHistoryInfo.fieldBegin = elementBox;\n }\n }\n }\n this.updateInsertPosition();\n this.insertInlineInternal(elementBox);\n if (this.checkEndPosition(selection)) {\n this.updateHistoryPosition(selection.start, false);\n }\n this.fireContentChange();\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onPortrait = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.documentHelper.selection.sectionFormat.pageWidth;\n var height = this.documentHelper.selection.sectionFormat.pageHeight;\n if (width > height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.onLandscape = function () {\n var sectionFormat = new WSectionFormat();\n var width = this.documentHelper.selection.sectionFormat.pageWidth;\n var height = this.documentHelper.selection.sectionFormat.pageHeight;\n if (width < height) {\n sectionFormat.pageWidth = height;\n sectionFormat.pageHeight = width;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n Editor.prototype.copyValues = function () {\n var format = new WSectionFormat();\n format.bottomMargin = this.documentHelper.selection.sectionFormat.bottomMargin;\n format.topMargin = this.documentHelper.selection.sectionFormat.topMargin;\n format.leftMargin = this.documentHelper.selection.sectionFormat.leftMargin;\n format.rightMargin = this.documentHelper.selection.sectionFormat.rightMargin;\n format.pageHeight = this.documentHelper.selection.sectionFormat.pageHeight;\n format.pageWidth = this.documentHelper.selection.sectionFormat.pageWidth;\n format.footerDistance = this.documentHelper.selection.sectionFormat.footerDistance;\n format.headerDistance = this.documentHelper.selection.sectionFormat.headerDistance;\n return format;\n };\n /**\n * @param property\n * @private\n * @returns {void}\n */\n Editor.prototype.changeMarginValue = function (property) {\n var sectionFormat = this.copyValues();\n if (property === 'lastCustomSetting' || property === 'normal') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 72;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'narrow') {\n sectionFormat.topMargin = 36;\n sectionFormat.bottomMargin = 36;\n sectionFormat.leftMargin = 36;\n sectionFormat.rightMargin = 36;\n }\n else if (property === 'moderate') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 54;\n sectionFormat.rightMargin = 54;\n }\n else if (property === 'wide') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 144;\n sectionFormat.rightMargin = 144;\n }\n else if (property === 'mirrored') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 72;\n }\n else if (property === 'office2003Default') {\n sectionFormat.topMargin = 72;\n sectionFormat.bottomMargin = 72;\n sectionFormat.leftMargin = 90;\n sectionFormat.rightMargin = 90;\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n /**\n * @param property\n * @private\n * @returns {void}\n */\n Editor.prototype.onPaperSize = function (property) {\n var sectionFormat = this.copyValues();\n var width = this.documentHelper.selection.sectionFormat.pageWidth;\n var height = this.documentHelper.selection.sectionFormat.pageHeight;\n if (property === 'letter') {\n if (width < height) {\n sectionFormat.pageWidth = 612;\n sectionFormat.pageHeight = 792;\n }\n else {\n sectionFormat.pageWidth = 792;\n sectionFormat.pageHeight = 612;\n }\n }\n else if (property === 'tabloid') {\n if (width < height) {\n sectionFormat.pageWidth = 792;\n sectionFormat.pageHeight = 1224;\n }\n else {\n sectionFormat.pageWidth = 1224;\n sectionFormat.pageHeight = 792;\n }\n }\n else if (property === 'legal') {\n if (width < height) {\n sectionFormat.pageWidth = 612;\n sectionFormat.pageHeight = 1008;\n }\n else {\n sectionFormat.pageWidth = 1008;\n sectionFormat.pageHeight = 612;\n }\n }\n else if (property === 'statement') {\n if (width < height) {\n sectionFormat.pageWidth = 396;\n sectionFormat.pageHeight = 612;\n }\n else {\n sectionFormat.pageWidth = 612;\n sectionFormat.pageHeight = 396;\n }\n }\n else if (property === 'executive') {\n if (width < height) {\n sectionFormat.pageWidth = 522;\n sectionFormat.pageHeight = 756;\n }\n else {\n sectionFormat.pageWidth = 756;\n sectionFormat.pageHeight = 522;\n }\n }\n else if (property === 'a3') {\n if (width < height) {\n sectionFormat.pageWidth = 841.9;\n sectionFormat.pageHeight = 1190.55;\n }\n else {\n sectionFormat.pageWidth = 1190.55;\n sectionFormat.pageHeight = 841.9;\n }\n }\n else if (property === 'a4') {\n if (width < height) {\n sectionFormat.pageWidth = 595.3;\n sectionFormat.pageHeight = 841.9;\n }\n else {\n sectionFormat.pageWidth = 841.9;\n sectionFormat.pageHeight = 595.3;\n }\n }\n else if (property === 'a5') {\n if (width < height) {\n sectionFormat.pageWidth = 419.55;\n sectionFormat.pageHeight = 595.3;\n }\n else {\n sectionFormat.pageWidth = 595.3;\n sectionFormat.pageHeight = 419.55;\n }\n }\n else if (property === 'b4') {\n if (width < height) {\n sectionFormat.pageWidth = 728.5;\n sectionFormat.pageHeight = 1031.8;\n }\n else {\n sectionFormat.pageWidth = 1031.8;\n sectionFormat.pageHeight = 728.5;\n }\n }\n else if (property === 'b5') {\n if (width < height) {\n sectionFormat.pageWidth = 515.9;\n sectionFormat.pageHeight = 728.5;\n }\n else {\n sectionFormat.pageWidth = 728.5;\n sectionFormat.pageHeight = 515.9;\n }\n }\n this.onApplySectionFormat(undefined, sectionFormat);\n };\n //Update List Items\n /**\n * @param blockAdv\n * @param updateNextBlockList\n * @param blockAdv\n * @param updateNextBlockList\n * @private\n * @returns {void}\n */\n Editor.prototype.updateListItemsTillEnd = function (blockAdv, updateNextBlockList) {\n var block = updateNextBlockList ? this.documentHelper.selection.getNextRenderedBlock(blockAdv) : blockAdv;\n while (!isNullOrUndefined(block) && !this.documentHelper.isTextInput) {\n //Updates the list value of the rendered paragraph.\n this.updateRenderedListItems(block);\n block = block.getSplitWidgets().pop().nextRenderedWidget;\n }\n };\n /**\n * @param block\n * @private\n * @returns {void}\n */\n Editor.prototype.updateWholeListItems = function (block, isFindingListParagraph, listID) {\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n var sectionIndex = block.bodyWidget.index;\n var currentBlock;\n for (var j = 0; j < this.documentHelper.pages.length; j++) {\n var page = this.documentHelper.pages[j];\n for (var i = 0; i < page.bodyWidgets.length; i++) {\n //if (page.bodyWidgets[i].index === sectionIndex) {\n currentBlock = this.getNextBlockForList(page.bodyWidgets[i].firstChild);\n if (!isNullOrUndefined(currentBlock)) {\n break;\n }\n //}\n }\n if (!isNullOrUndefined(currentBlock)) {\n break;\n }\n }\n var isListUpdated = false;\n do {\n if (!currentBlock) {\n break;\n }\n var listSearchResultInfo = null;\n if (isFindingListParagraph) {\n listSearchResultInfo = { paragraph: null, listId: listID };\n }\n isListUpdated = this.updateListItems(currentBlock, block, listSearchResultInfo);\n if (isListUpdated) {\n if (!isNullOrUndefined(listSearchResultInfo)) {\n if (listSearchResultInfo.paragraph == block) {\n return null;\n }\n else {\n return listSearchResultInfo.paragraph;\n }\n }\n break;\n }\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n if (!isNullOrUndefined(currentBlock)) {\n currentBlock = this.getNextBlockForList(currentBlock);\n }\n } while (currentBlock);\n return null;\n };\n Editor.prototype.getNextBlockForList = function (currentBlock) {\n if (currentBlock instanceof ParagraphWidget &&\n this.documentHelper.layout.isFirstElementWithPageBreak(currentBlock)) {\n var nextBlock = currentBlock.nextRenderedWidget;\n if (!isNullOrUndefined(nextBlock) && nextBlock.equals(currentBlock)) {\n return nextBlock;\n }\n }\n return currentBlock;\n };\n Editor.prototype.updateListItems = function (blockAdv, block, listSearchResultInfo) {\n var isListUpdated = false;\n if (blockAdv instanceof ParagraphWidget) {\n isListUpdated = this.updateListItemsForPara(blockAdv, block, listSearchResultInfo);\n }\n else {\n isListUpdated = this.updateListItemsForTable(blockAdv, block, listSearchResultInfo);\n }\n return isListUpdated;\n };\n Editor.prototype.updateListItemsForTable = function (table, block, listSearchResultInfo) {\n if (isNullOrUndefined(listSearchResultInfo) && block instanceof TableWidget && table.equals(block)) {\n return true;\n }\n var row = table.firstChild;\n do {\n var isListUpdated = this.updateListItemsForRow(row, block, listSearchResultInfo);\n if (isListUpdated) {\n return true;\n }\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n return false;\n };\n Editor.prototype.updateListItemsForRow = function (row, block, listSearchResultInfo) {\n if (isNullOrUndefined(listSearchResultInfo) && block.isInsideTable && row.childWidgets.indexOf(this.documentHelper.selection.getContainerCell(block.associatedCell)) !== -1) {\n //Returns as list updated, inorder to start list numbering from first list paragraph of this row.\n return true;\n }\n var cell = row.firstChild;\n do {\n this.updateListItemsForCell(cell, block, listSearchResultInfo);\n if (!isNullOrUndefined(listSearchResultInfo) && !isNullOrUndefined(listSearchResultInfo.paragraph)) {\n return true;\n }\n cell = cell.nextRenderedWidget;\n } while (cell);\n return false;\n };\n Editor.prototype.updateListItemsForCell = function (cell, block, listSearchResultInfo) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateListItems(currentBlock, block, listSearchResultInfo);\n if (!isNullOrUndefined(listSearchResultInfo) && !isNullOrUndefined(listSearchResultInfo.paragraph)) {\n break;\n }\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n // public abstract updateListParagraphs(): void;\n /**\n * @param block\n * @private\n * @returns {void}\n */\n Editor.prototype.updateRenderedListItems = function (block) {\n if (block instanceof ParagraphWidget) {\n // if the block is a column break pick the next rendered widget.\n if (block.isEndsWithColumnBreak) {\n block = block.nextRenderedWidget;\n }\n this.updateRenderedListItemsForPara(block);\n }\n else {\n this.updateRenderedListItemsForTable(block);\n }\n };\n Editor.prototype.updateRenderedListItemsForTable = function (table) {\n var row = table.firstChild;\n do {\n this.updateRenderedListItemsForRow(row);\n row = row.getSplitWidgets().pop().nextRenderedWidget;\n } while (row);\n };\n Editor.prototype.updateRenderedListItemsForRow = function (row) {\n var cell = row.firstChild;\n do {\n this.updateRenderedListItemsForCell(cell);\n cell = cell.nextRenderedWidget;\n } while (cell);\n };\n Editor.prototype.updateRenderedListItemsForCell = function (cell) {\n if (cell.childWidgets.length === 0) {\n return;\n }\n var currentBlock = cell.firstChild;\n do {\n this.updateRenderedListItems(currentBlock);\n currentBlock = currentBlock.getSplitWidgets().pop().nextRenderedWidget;\n } while (currentBlock);\n };\n Editor.prototype.updateListItemsForPara = function (paragraph, block, listSearchResultInfo) {\n if (paragraph.equals(block)) {\n if (!isNullOrUndefined(listSearchResultInfo)) {\n listSearchResultInfo.paragraph = paragraph;\n }\n return true;\n }\n else {\n var currentList = undefined;\n var levelNumber = 0;\n if (!isNullOrUndefined(paragraph.paragraphFormat) && !isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n if (!isNullOrUndefined(listSearchResultInfo) && paragraph.paragraphFormat.listFormat.listId === listSearchResultInfo.listId) {\n listSearchResultInfo.paragraph = paragraph;\n return true;\n }\n currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n levelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n }\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels[levelNumber])) {\n var currentListLevel = this.documentHelper.layout.getListLevel(currentList, levelNumber);\n //Updates the list numbering from document start for reLayouting.\n this.updateListNumber(currentListLevel, paragraph, false);\n }\n }\n return false;\n };\n Editor.prototype.updateRenderedListItemsForPara = function (paragraph) {\n if (!isNullOrUndefined(this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId))) {\n var currentList = this.documentHelper.getListById(paragraph.paragraphFormat.listFormat.listId);\n var listLevelNumber = paragraph.paragraphFormat.listFormat.listLevelNumber;\n if (!isNullOrUndefined(currentList) && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId))\n && !isNullOrUndefined(this.documentHelper.getAbstractListById(currentList.abstractListId).levels[paragraph.paragraphFormat.listFormat.listLevelNumber])) {\n var currentListLevel = this.documentHelper.layout.getListLevel(currentList, listLevelNumber);\n //Updates the list numbering from document start for reLayouting.\n this.updateListNumber(currentListLevel, paragraph, true);\n }\n }\n };\n Editor.prototype.updateListNumber = function (currentListLevel, paragraph, isUpdate) {\n var element = undefined;\n if (paragraph.childWidgets.length > 0) {\n var lineWidget = paragraph.childWidgets[0];\n if (lineWidget.children.length > 0) {\n element = lineWidget.children[0];\n }\n }\n var listWholeWidth;\n if (!isNullOrUndefined(element) && element.nextElement instanceof ListTextElementBox) {\n listWholeWidth = element.width + element.nextElement.width;\n }\n if (!isNullOrUndefined(element) && element instanceof ListTextElementBox) {\n var text = this.documentHelper.layout.getListNumber(paragraph.paragraphFormat.listFormat);\n if (isUpdate) {\n var prevWidth = element.width;\n element.text = text;\n if (this.documentHelper.isIosDevice) {\n var listText = element.text;\n listText = listText === String.fromCharCode(61623) ? String.fromCharCode(9679) : listText === String.fromCharCode(61551) + String.fromCharCode(32) ? String.fromCharCode(9675) : listText;\n if (listText !== element.text) {\n element.text = listText;\n }\n }\n var currentWidth = this.documentHelper.textHelper.getTextSize(element, element.characterFormat);\n if (currentWidth > prevWidth) {\n element.width = currentWidth;\n }\n this.documentHelper.textHelper.updateTextSize(element, paragraph);\n if (!isNullOrUndefined(listWholeWidth) && element.width < listWholeWidth) {\n element.nextElement.width = (listWholeWidth - element.width);\n }\n }\n }\n };\n /**\n * Get offset value to update in selection\n *\n * @param selection\n * @private\n * @returns {void}\n */\n Editor.prototype.getOffsetValue = function (selection) {\n if (this.startParagraph) {\n var lineInfo = selection.getLineInfoBasedOnParagraph(this.startParagraph, this.startOffset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n if (this.endParagraph) {\n var lineInfo = selection.getLineInfoBasedOnParagraph(this.endParagraph, this.endOffset);\n selection.end.setPositionFromLine(lineInfo.line, lineInfo.offset);\n }\n selection.end.updatePhysicalPosition(true);\n }\n };\n Editor.prototype.setPositionParagraph = function (paragraph, offset, skipSelectionChange) {\n var selection = this.documentHelper.selection;\n var lineInfo = selection.getLineInfoBasedOnParagraph(paragraph, offset);\n selection.start.setPositionFromLine(lineInfo.line, lineInfo.offset);\n selection.end.setPositionInternal(selection.start);\n if (!skipSelectionChange) {\n selection.fireSelectionChanged(true);\n }\n };\n /**\n * @param textPosition\n * @param editPosition\n * @param textPosition\n * @param editPosition\n * @private\n * @returns {void}\n */\n Editor.prototype.setPositionForCurrentIndex = function (textPosition, editPosition) {\n var blockInfo = this.selection.getParagraph({ index: editPosition });\n var lineInfo = this.selection.getLineInfoBasedOnParagraph(blockInfo.paragraph, blockInfo.offset);\n textPosition.setPositionForLineWidget(lineInfo.line, lineInfo.offset);\n };\n /**\n * Inserts the page number in the current cursor position.\n *\n * @param {string} numberFormat - Optional switch that overrides the numeral style of the page number.\n * @returns {void}\n */\n Editor.prototype.insertPageNumber = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\\\*' + numberFormat;\n }\n var fieldCode = 'PAGE ' + numberFormat + ' \\\\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n /**\n * @param numberFormat\n * @private\n * @returns {void}\n */\n Editor.prototype.insertPageCount = function (numberFormat) {\n if (isNullOrUndefined(numberFormat)) {\n numberFormat = '';\n }\n else {\n numberFormat = ' \\*' + numberFormat;\n }\n var fieldCode = 'NUMPAGES ' + numberFormat + ' \\* MERGEFORMAT';\n this.createFields(fieldCode);\n };\n Editor.prototype.createFields = function (fieldCode) {\n var paragraph = new ParagraphWidget();\n var line = new LineWidget(paragraph);\n var fieldBegin = new FieldElementBox(0);\n line.children.push(fieldBegin);\n var fieldtext = new FieldTextElementBox();\n fieldtext.fieldBegin = fieldBegin;\n fieldtext.text = '1';\n var text = new TextElementBox();\n text.text = fieldCode;\n line.children.push(text);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldBegin.fieldSeparator = fieldSeparator;\n line.children.push(fieldSeparator);\n line.children.push(fieldtext);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldSeparator = fieldSeparator;\n fieldSeparator.fieldEnd = fieldEnd;\n fieldBegin.fieldEnd = fieldEnd;\n line.children.push(fieldEnd);\n fieldBegin.line = line;\n paragraph.childWidgets.push(line);\n this.documentHelper.fields.push(fieldBegin);\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets.push(paragraph);\n this.pasteContentsInternal([bodyWidget], false);\n };\n /**\n * Inserts the specified bookmark at the current selection range.\n *\n * @param {string} name Specify the name of bookmark to be inserted.\n * @returns {void}\n */\n Editor.prototype.insertBookmark = function (name) {\n var isHistoryInitiated = false;\n if (this.documentHelper.bookmarks.containsKey(name)) {\n var existingBookmark = this.documentHelper.bookmarks.get(name);\n // existingBookmark.line.children.splice(existingBookmark.line.children.indexOf(existingBookmark), 1);\n // /* eslint-disable-next-line max-len */\n // existingBookmark.reference.line.children.splice(existingBookmark.reference.line.children.indexOf(existingBookmark.reference), 1);\n // this.documentHelper.bookmarks.remove(name);\n isHistoryInitiated = true;\n this.initComplexHistory('InsertBookmark');\n this.documentHelper.owner.editorModule.isRemoteAction = true;\n this.deleteBookmark(name);\n this.documentHelper.owner.editorModule.isRemoteAction = false;\n if (!isNullOrUndefined(existingBookmark.reference) && !isNullOrUndefined(existingBookmark.reference.paragraph.associatedCell)) {\n var row = existingBookmark.reference.paragraph.associatedCell.ownerRow;\n if (row.isRenderBookmarkEnd) {\n row.isRenderBookmarkEnd = false;\n }\n if (!isNullOrUndefined(existingBookmark.properties)) {\n var columnFirst = parseInt(existingBookmark.properties[\"columnFirst\"]);\n var row_1 = existingBookmark.paragraph.associatedCell.ownerRow;\n var cell = row_1.getCellUsingColumnIndex(row_1.rowIndex, columnFirst);\n if (!isNullOrUndefined(cell)) {\n cell.isRenderBookmarkStart = false;\n }\n var columnLast = parseInt(existingBookmark.properties[\"columnLast\"]);\n var endRow = existingBookmark.reference.paragraph.associatedCell.ownerRow;\n var endCell = undefined;\n var cellIndex = columnLast;\n while (isNullOrUndefined(endCell) && cellIndex > -1) {\n endCell = endRow.getCell(endRow.rowIndex, cellIndex);\n if (isNullOrUndefined(endCell)) {\n cellIndex--;\n }\n }\n if (endCell.isRenderBookmarkEnd) {\n endCell.isRenderBookmarkEnd = false;\n }\n }\n }\n else {\n if (!isNullOrUndefined(existingBookmark.properties)) {\n var columnFirst = parseInt(existingBookmark.properties[\"columnFirst\"]);\n var row = existingBookmark.paragraph.associatedCell.ownerRow;\n var cell = row.getCellUsingColumnIndex(row.rowIndex, columnFirst);\n if (!isNullOrUndefined(cell) && cell.isRenderBookmarkStart) {\n cell.isRenderBookmarkStart = false;\n }\n }\n }\n }\n var bookmarks = this.createBookmarkElements(name);\n var bookmark = bookmarks[0];\n var bookmarkEnd = bookmarks[1];\n bookmark.properties = this.selection.getBookmarkProperties(bookmark);\n bookmarkEnd.properties = this.selection.getBookmarkProperties(bookmarkEnd);\n this.owner.isShiftingEnabled = true;\n if (!isHistoryInitiated) {\n this.initComplexHistory('InsertBookmark');\n }\n this.insertElements([bookmarkEnd], [bookmark], true);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n if (this.documentHelper.owner.enableHeaderAndFooter) {\n this.updateHeaderFooterWidget();\n }\n this.documentHelper.bookmarks.add(name, bookmark);\n if (!isNullOrUndefined(bookmark.properties)) {\n this.selection.selectBookmarkInTable(bookmark);\n this.documentHelper.owner.isShiftingEnabled = false;\n }\n else {\n this.selection.start.setPositionForSelection(bookmark.line, bookmark, 1, this.selection.start.location);\n var endOffset = 0;\n if (!isNullOrUndefined(bookmarkEnd.properties)) {\n if (bookmarkEnd.properties['isAfterParagraphMark']) {\n endOffset = 2;\n }\n }\n this.selection.end.setPositionForSelection(bookmarkEnd.line, bookmarkEnd, endOffset, this.selection.end.location);\n var block = this.documentHelper.blockToShift;\n if (!isNullOrUndefined(block) && this.viewer instanceof PageLayoutViewer && block.bodyWidget.sectionFormat.columns.length > 1) {\n var lastbody = this.documentHelper.layout.getBodyWidget(block.bodyWidget, false);\n if ((!isNullOrUndefined(lastbody.nextRenderedWidget) && lastbody.nextRenderedWidget.sectionFormat.breakCode === 'NoBreak' && lastbody.page === lastbody.nextRenderedWidget.page)) {\n this.reLayout(this.selection);\n }\n }\n this.owner.isShiftingEnabled = false;\n this.selection.fireSelectionChanged(true);\n }\n if (this.owner.documentEditorSettings.showBookmarks == true) {\n this.viewer.updateScrollBars();\n }\n this.fireContentChange();\n };\n /**\n * @private\n */\n Editor.prototype.createBookmarkElements = function (name) {\n var bookmark = new BookmarkElementBox(0);\n bookmark.name = name;\n var bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.name = name;\n bookmark.reference = bookmarkEnd;\n bookmarkEnd.reference = bookmark;\n return [bookmark, bookmarkEnd];\n };\n /**\n * Deletes the specified bookmark in the current document.\n *\n * @param {string} bookmarkName Specify the name of bookmark to be deleted.\n * @returns {void}\n */\n Editor.prototype.deleteBookmark = function (bookmarkName) {\n var bookmarks = this.documentHelper.bookmarks;\n var bookmark = bookmarks.get(bookmarkName);\n if (bookmark instanceof BookmarkElementBox) {\n var bookmarkEnd = bookmark.reference;\n // History for inserting bookmark with existing bookmark name was changed as a complex history as per MS word behavior and added the below lines for getting existing bookmarks offset in history \n var start = this.selection.start.clone();\n var end = this.selection.end.clone();\n var endElementInfo = this.selection.getElementInfo(end.currentWidget, end.offset);\n this.selection.start.setPositionParagraph(bookmark.line, bookmark.line.getOffset(bookmark, bookmark.length));\n this.selection.end.setPositionParagraph(bookmarkEnd.line, bookmarkEnd.line.getOffset(bookmarkEnd, bookmarkEnd.length) - 1);\n this.initHistory('DeleteBookmark');\n this.selection.selectPosition(start, end);\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_Start;\n this.editorHistory.currentBaseHistoryInfo.markerData.push({ bookmarkName: bookmarkName });\n this.editorHistory.currentBaseHistoryInfo.setBookmarkInfo(bookmark);\n }\n this.deleteBookmarkInternal(bookmark);\n if (this.editorHistory) {\n this.editorHistory.updateHistory();\n }\n if (endElementInfo.element !== bookmark && endElementInfo.element !== bookmarkEnd) {\n this.selection.end.setPositionParagraph(endElementInfo.element.line, endElementInfo.element.line.getOffset(endElementInfo.element, endElementInfo.index));\n }\n }\n this.fireContentChange();\n if (this.owner.documentEditorSettings.showBookmarks == true) {\n this.viewer.updateScrollBars();\n }\n };\n /**\n * @param bookmark\n * @private\n * @returns {void}\n */\n Editor.prototype.deleteBookmarkInternal = function (bookmark) {\n var previousNode = bookmark.previousNode;\n if (previousNode instanceof FieldElementBox && previousNode.fieldType === 0\n && !isNullOrUndefined(previousNode.formFieldData)) {\n previousNode.formFieldData.name = '';\n }\n if (!isNullOrUndefined(bookmark.properties)) {\n var columnFirst = parseInt(bookmark.properties[\"columnFirst\"]);\n var row = bookmark.paragraph.associatedCell.ownerRow;\n var cell = row.getCellUsingColumnIndex(row.rowIndex, columnFirst);\n if (!isNullOrUndefined(cell)) {\n cell.isRenderBookmarkStart = false;\n }\n var columnLast = parseInt(bookmark.properties[\"columnLast\"]);\n if (!isNullOrUndefined(bookmark.reference) && !isNullOrUndefined(bookmark.reference.paragraph.associatedCell)) {\n var endRow = bookmark.reference.paragraph.associatedCell.ownerRow;\n var endCell = undefined;\n var cellIndex = columnLast;\n while (isNullOrUndefined(endCell) && cellIndex > -1) {\n endCell = endRow.getCell(endRow.rowIndex, cellIndex);\n if (isNullOrUndefined(endCell)) {\n cellIndex--;\n }\n }\n if (endCell.isRenderBookmarkEnd) {\n endCell.isRenderBookmarkEnd = false;\n }\n }\n }\n else {\n if (this.documentHelper.selection.isRenderBookmarkAtEnd(bookmark)) {\n if (!isNullOrUndefined(bookmark.reference) && !isNullOrUndefined(bookmark.reference.paragraph.associatedCell)) {\n var row = bookmark.reference.paragraph.associatedCell.ownerRow;\n if (row.isRenderBookmarkEnd) {\n row.isRenderBookmarkEnd = false;\n }\n }\n }\n }\n this.documentHelper.bookmarks.remove(bookmark.name);\n bookmark.line.children.splice(bookmark.indexInOwner, 1);\n if (!isNullOrUndefined(bookmark.reference)) {\n bookmark.reference.line.children.splice(bookmark.reference.indexInOwner, 1);\n }\n // Remove bookmark from header footer collections\n var paragraph = bookmark.line.paragraph;\n if (bookmark.line.paragraph.isInHeaderFooter) {\n var headerFooterWidget = undefined;\n if (paragraph.containerWidget instanceof TableCellWidget) {\n headerFooterWidget = paragraph.containerWidget.getContainerTable().containerWidget;\n }\n else if (paragraph.containerWidget instanceof HeaderFooterWidget) {\n headerFooterWidget = paragraph.containerWidget;\n }\n this.updateHeaderFooterWidget(headerFooterWidget);\n }\n };\n /**\n * @private\n */\n Editor.prototype.getSelectionInfo = function (isBookmark) {\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!(end.offset === this.selection.getLineLength(end.currentWidget) + 1\n && this.selection.isParagraphLastLine(end.currentWidget)) && !this.owner.documentHelper.isDragging) {\n end.offset += 1;\n }\n var blockInfo = this.selection.getParagraphInfo(start);\n var startIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.selection.getParagraphInfo(end);\n var endIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n var selectedWidgets = this.selection.selectedWidgets.keys;\n if ((!isNullOrUndefined(isBookmark) && isBookmark == true) && !this.selection.hasMergedCells()) {\n if (start.paragraph.isInsideTable) {\n var startCell_1 = this.selection.getCellFromSelection(0);\n if (!isNullOrUndefined(startCell_1) && startCell_1 instanceof TableCellWidget) {\n startIndex = this.selection.getActualOffset(startCell_1, 0);\n }\n }\n if (end.paragraph.isInsideTable) {\n var endCell_1 = this.selection.getCellFromSelection(1);\n if (!isNullOrUndefined(endCell_1) && endCell_1 instanceof TableCellWidget) {\n endIndex = this.selection.getActualOffset(endCell_1, 1);\n }\n }\n }\n else {\n if (selectedWidgets[0] instanceof TableCellWidget) {\n if (start.paragraph.isInsideTable) {\n var startCell = this.selection.getCellFromSelectionInTable(0);\n if (!isNullOrUndefined(startCell) && startCell instanceof TableCellWidget) {\n startIndex = this.selection.getActualOffset(startCell, 0);\n }\n }\n }\n if (selectedWidgets[selectedWidgets.length - 1] instanceof TableCellWidget) {\n if (end.paragraph.isInsideTable) {\n var endCell = this.selection.getCellFromSelectionInTable(1);\n if (!isNullOrUndefined(endCell) && endCell instanceof TableCellWidget) {\n endIndex = this.selection.getActualOffset(endCell, 1);\n }\n }\n }\n }\n return { 'start': startIndex, 'end': endIndex };\n };\n Editor.prototype.insertElements = function (endElements, startElements, isBookmark) {\n var info = this.getSelectionInfo(isBookmark);\n if (isBookmark) {\n if (!isNullOrUndefined(startElements[0].properties) && startElements[0].bookmarkType == 0) {\n info = this.owner.selection.updateSelectionInfo(info);\n }\n }\n if (!isNullOrUndefined(startElements)) {\n this.insertElementsInternal(this.selection.getTextPosBasedOnLogicalIndex(info.start), startElements, undefined);\n if (this.owner.isSpellCheck && isBookmark && startElements[0].previousElement && startElements[0].previousElement instanceof TextElementBox) {\n startElements[0].previousElement.ischangeDetected = true;\n }\n }\n if (!isNullOrUndefined(endElements)) {\n this.insertElementsInternal(this.selection.getTextPosBasedOnLogicalIndex(info.end), endElements, undefined);\n if (this.owner.isSpellCheck && isBookmark && endElements[0].reference.line !== endElements[0].line && endElements[0].previousElement && endElements[0].previousElement instanceof TextElementBox) {\n endElements[0].previousElement.ischangeDetected = true;\n }\n }\n };\n /**\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.insertElementsInternal = function (position, elements, isRelayout) {\n this.selection.selectPosition(position, position);\n this.initHistory('InsertElements');\n if ((!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo) && (elements[0] instanceof BookmarkElementBox && this.editorHistory || elements[0] instanceof EditRangeStartElementBox || elements[0] instanceof EditRangeEndElementBox)) {\n this.editorHistory.currentBaseHistoryInfo.markerData.push(this.getMarkerData(elements[0]));\n }\n this.updateInsertPosition();\n var indexInInline = 0;\n var paragraphInfo = this.selection.getParagraphInfo(this.selection.start);\n if (this.selection.start.paragraph.isEmpty()) {\n var paragraph = this.selection.start.paragraph;\n paragraph.childWidgets[0].children.push(elements[0]);\n elements[0].line = paragraph.childWidgets[0];\n elements[0].linkFieldCharacter(this.documentHelper);\n this.documentHelper.layout.reLayoutParagraph(paragraph, 0, 0);\n this.setPositionParagraph(paragraphInfo.paragraph, paragraphInfo.offset + length, true);\n position.setPositionForSelection(elements[0].line, elements[0], elements[0].length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n else {\n var inlineObj = this.selection.start.currentWidget.getInline(this.documentHelper.selection.start.offset, indexInInline);\n var curInline = inlineObj.element;\n indexInInline = inlineObj.index;\n var firstElement = elements[0];\n this.insertElementInternal(curInline, firstElement, indexInInline, undefined, true);\n var index = firstElement.indexInOwner;\n var lastElement = firstElement;\n for (var i = 1; i < elements.length; i++) {\n lastElement = elements[i];\n firstElement.line.children.splice(index + i, 0, lastElement);\n }\n position.setPositionForSelection(lastElement.line, lastElement, lastElement.length, this.selection.start.location);\n this.selection.selectPosition(position, position);\n }\n if (this.editorHistory) {\n if (this.checkEndPosition()) {\n this.updateHistoryPosition(this.selection.start, false);\n }\n this.editorHistory.updateHistory();\n }\n };\n /**\n * @private\n */\n Editor.prototype.getMarkerData = function (element, skip, revision, isAcceptOrReject) {\n var markerData = {};\n if (this.editorHistory.currentBaseHistoryInfo || this.editorHistory.isUndoing || this.editorHistory.isRedoing) {\n if (element instanceof BookmarkElementBox) {\n var columnFirst = '';\n var columnLast = '';\n var isAfterParagraphMark = void 0;\n var isAfterTableMark = void 0;\n var isAfterRowMark = void 0;\n var isAfterCellMark = void 0;\n if (element.bookmarkType == 0) {\n if (!this.editorHistory.isUndoing && !this.editorHistory.isRedoing) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_Start;\n }\n if (!isNullOrUndefined(element.properties)) {\n columnFirst = element.properties['columnFirst'];\n columnLast = element.properties['columnLast'];\n }\n }\n else {\n if (!this.editorHistory.isUndoing && !this.editorHistory.isRedoing) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_End;\n }\n if (!isNullOrUndefined(element.properties)) {\n isAfterParagraphMark = element.properties['isAfterParagraphMark'];\n isAfterTableMark = element.properties['isAfterTableMark'];\n isAfterRowMark = element.properties['isAfterRowMark'];\n isAfterCellMark = element.properties['isAfterCellMark'];\n }\n }\n markerData = {\n bookmarkName: element.name,\n type: \"Bookmark\",\n skipOperation: skip,\n columnFirst: columnFirst,\n columnLast: columnLast,\n isAfterParagraphMark: isAfterParagraphMark,\n isAfterTableMark: isAfterTableMark,\n isAfterRowMark: isAfterRowMark,\n isAfterCellMark: isAfterCellMark\n };\n }\n else if (element instanceof EditRangeStartElementBox || element instanceof EditRangeEndElementBox) {\n var elementBox = void 0;\n if (element instanceof EditRangeStartElementBox) {\n elementBox = element;\n if (!this.editorHistory.isUndoing && !this.editorHistory.isRedoing) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_Start;\n }\n }\n else {\n elementBox = element.editRangeStart;\n if (!this.editorHistory.isUndoing && !this.editorHistory.isRedoing) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_End;\n }\n }\n var user = elementBox.user === '' ? elementBox.group : elementBox.user;\n markerData = { 'user': user, 'type': \"EditRange\", 'editRangeId': elementBox.editRangeId, 'skipOperation': skip, 'columnFirst': isNullOrUndefined(elementBox.columnFirst) ? undefined : elementBox.columnFirst.toString(), 'columnLast': isNullOrUndefined(elementBox.columnLast) ? undefined : elementBox.columnLast.toString() };\n }\n else if (element instanceof FieldElementBox) {\n if (element.fieldType == 0) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_Start;\n }\n else if (element.fieldType == 2) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Field_Separator;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.insertedText = CONTROL_CHARACTERS.Marker_End;\n }\n markerData = { 'type': \"Field\" };\n }\n else if (element instanceof FootnoteElementBox) {\n markerData =\n {\n type: element.footnoteType\n };\n }\n else if (element instanceof TextElementBox) {\n this.editorHistory.currentBaseHistoryInfo.insertedText = element.text;\n }\n }\n if (this.owner.enableTrackChanges && !isNullOrUndefined(revision)) {\n markerData = this.getRevisionMarkerData(markerData, revision, skip, isAcceptOrReject);\n }\n return markerData;\n };\n /**\n * @private\n * @returns {any}\n */\n Editor.prototype.getRevisionMarkerData = function (markerData, revision, skip, isAcceptOrReject) {\n if (isNullOrUndefined(markerData)) {\n markerData = {};\n }\n markerData.revisionId = revision.revisionID;\n markerData.revisionType = revision.revisionType;\n markerData.author = revision.author;\n markerData.date = revision.date;\n markerData.skipOperation = skip;\n markerData.isAcceptOrReject = isAcceptOrReject;\n return markerData;\n };\n /**\n * @param index\n * @private\n * @returns {CommentElementBox}\n */\n Editor.prototype.getCommentElementBox = function (index) {\n var position = index.split(';');\n var comment = this.documentHelper.comments[parseInt(position[1], 10)];\n if (position.length > 2 && position[2] !== '') {\n return comment.replyComments[parseInt(position[2], 10)];\n }\n return comment;\n };\n /**\n * @param position\n * @private\n * @returns {BlockInfo}\n */\n Editor.prototype.getBlock = function (position) {\n var bodyWidget = this.selection.getBodyWidget(position);\n return this.getBlockInternal(bodyWidget, position);\n };\n Editor.prototype.getBlockInternal = function (widget, position) {\n if (position.index === '' || isNullOrUndefined(position)) {\n return undefined;\n }\n var index = position.index.indexOf(';');\n var value = position.index.substring(0, index);\n position.index = position.index.substring(index).replace(';', '');\n var node = widget;\n // if (node instanceof WSection && value === 'HF') {\n // //Gets the block in Header footers.\n // let blockObj: BlockInfo = this.getBlock((node as WSection).headerFooters, position);\n // return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n // }\n index = parseInt(value, 10);\n var childWidget = this.selection.getBlockByIndex(widget, index);\n if (childWidget) {\n var child = childWidget;\n if (position.index.indexOf(';') >= 0) {\n if (child instanceof ParagraphWidget) {\n if (position.index.indexOf(';') >= 0) {\n position.index = '0';\n }\n return { 'node': child, 'position': position };\n }\n if (child instanceof Widget) {\n var blockObj = this.getBlockInternal(child, position);\n return { 'node': (!isNullOrUndefined(blockObj)) ? blockObj.node : undefined, 'position': (!isNullOrUndefined(blockObj)) ? blockObj.position : undefined };\n }\n }\n else {\n return { 'node': child, 'position': position };\n }\n }\n else {\n return { 'node': node, 'position': position };\n }\n return { 'node': node, 'position': position };\n };\n /**\n * @param position\n * @param isInsertPosition\n * @private\n * @returns {void}\n */\n Editor.prototype.updateHistoryPosition = function (position, isInsertPosition) {\n if (this.editorHistory && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n var hierarchicalIndex = void 0;\n if (position instanceof TextPosition) {\n var blockInfo = this.selection.getParagraphInfo(position);\n hierarchicalIndex = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n }\n else {\n hierarchicalIndex = position;\n }\n if (isInsertPosition) {\n this.editorHistory.currentBaseHistoryInfo.insertPosition = hierarchicalIndex;\n }\n else {\n this.editorHistory.currentBaseHistoryInfo.endPosition = hierarchicalIndex;\n }\n }\n };\n /**\n * Applies the borders based on given settings.\n *\n * @param {BorderSettings} settings Specify the border settings to be applied.\n * @returns {void}\n */\n Editor.prototype.applyBorders = function (settings) {\n this.initHistory('Borders');\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n if (this.editorHistory) {\n var clonedTable = this.cloneTableToHistoryInfo(table);\n }\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var cells;\n var border = this.getBorder(settings.borderColor, settings.lineWidth, settings.borderStyle);\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = startPos.paragraph.associatedCell.cellFormat.borders;\n }\n if (this.selection.isEmpty) {\n //Apply borders for current selected cell initially.\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'LeftBorder') {\n endCell.cellFormat.borders.left.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'TopBorder') {\n endCell.cellFormat.borders.top.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'RightBorder') {\n endCell.cellFormat.borders.right.copyFormat(border);\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'AllBorders' ||\n settings.type === 'BottomBorder') {\n endCell.cellFormat.borders.bottom.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideVerticalBorder') {\n endCell.cellFormat.borders.vertical.copyFormat(border);\n }\n if (settings.type === 'AllBorders' || settings.type === 'InsideBorders'\n || settings.type === 'InsideHorizontalBorder') {\n endCell.cellFormat.borders.horizontal.copyFormat(border);\n }\n if (settings.type === 'NoBorder') {\n this.clearAllBorderValues(endCell.cellFormat.borders);\n }\n }\n else {\n if (settings.type === 'OutsideBorders' || settings.type === 'TopBorder') {\n var selectedCell = this.getTopBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.top.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'LeftBorder') {\n var selectedCell = this.getLeftBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.left.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'RightBorder') {\n var selectedCell = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.right.copyFormat(border);\n }\n }\n if (settings.type === 'OutsideBorders' || settings.type === 'BottomBorder') {\n var selectedCell = this.getBottomBorderCellsOnSelection();\n for (var i = 0; i < selectedCell.length; i++) {\n selectedCell[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n }\n //Apply Only borders property to selected cells\n if (settings.type === 'BottomBorder' || settings.type === 'AllBorders' || settings.type === 'OutsideBorders'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyBottomBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'OutsideBorders' || settings.type === 'RightBorder'\n || settings.type === 'NoBorder') {\n cells = this.getAdjacentCellToApplyRightBorder();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (settings.type === 'NoBorder') {\n cell.cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n cell.cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n if (settings.type === 'AllBorders' || settings.type === 'NoBorder') {\n this.applyAllBorders(border, settings.type);\n }\n if (settings.type === 'InsideBorders' || settings.type === 'InsideVerticalBorder'\n || settings.type === 'InsideHorizontalBorder' || settings.type === 'NoBorder') {\n this.applyInsideBorders(border, settings.type, table);\n }\n this.updateGridForTableDialog(table, false);\n this.reLayout(this.selection, false);\n this.editorHistory.updateHistory();\n };\n Editor.prototype.applyAllBorders = function (border, borderType) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (borderType === 'NoBorder') {\n cells[i].cellFormat.borders.left.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.right.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.top.copyFormat(this.clearBorder());\n cells[i].cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n cells[i].cellFormat.borders.left.copyFormat(border);\n cells[i].cellFormat.borders.right.copyFormat(border);\n cells[i].cellFormat.borders.top.copyFormat(border);\n cells[i].cellFormat.borders.bottom.copyFormat(border);\n }\n }\n };\n Editor.prototype.applyInsideBorders = function (border, borderType, table) {\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var isLastSelectedRow = cell.ownerRow === cells[cells.length - 1].ownerRow;\n var isLastRightCell = (cell.columnIndex + cell.cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex;\n if (borderType === 'NoBorder') {\n cell.cellFormat.borders.right.copyFormat(this.clearBorder());\n cell.cellFormat.borders.bottom.copyFormat(this.clearBorder());\n }\n else {\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n cell.cellFormat.borders.right.copyFormat(border);\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n cell.cellFormat.borders.bottom.copyFormat(border);\n }\n }\n if (!isLastSelectedRow && borderType !== 'InsideVerticalBorder') {\n // Apply adjacent bottom borders.\n var nextRowIndex = cell.ownerRow.rowIndex + cell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n var selectedCells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, cell, true);\n for (var j = 0; j < selectedCells.length; j++) {\n if (borderType === 'NoBorder') {\n selectedCells[j].cellFormat.borders.top.copyFormat(this.clearBorder());\n }\n else {\n selectedCells[j].cellFormat.borders.top.copyFormat(border);\n }\n }\n }\n }\n if (!isLastRightCell && borderType !== 'InsideHorizontalBorder') {\n // Apply adjacent right borders.\n var rightBorderCells = this.getSelectedCellsNextWidgets(cell, table);\n for (var k = 0; k < rightBorderCells.length; k++) {\n if (borderType === 'NoBorder') {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(this.clearBorder());\n }\n else {\n rightBorderCells[k].cellFormat.borders.left.copyFormat(border);\n }\n }\n }\n }\n };\n Editor.prototype.getTopBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var topBorderCells = [];\n var cells = this.selection.getSelectedCells();\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === startCell.ownerRow) {\n topBorderCells.push(cells[i]);\n }\n }\n return topBorderCells;\n };\n Editor.prototype.getLeftBorderCellsOnSelection = function () {\n var startPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var startCell = startPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var leftBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].columnIndex === startCell.columnIndex) {\n leftBorderCells.push(cells[i]);\n }\n }\n return leftBorderCells;\n };\n Editor.prototype.getRightBorderCellsOnSelection = function () {\n var cells = this.selection.getSelectedCells();\n var rightBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if ((cells[i].columnIndex + cells[i].cellFormat.columnSpan - 1) === cells[cells.length - 1].columnIndex) {\n rightBorderCells.push(cells[i]);\n }\n }\n return rightBorderCells;\n };\n Editor.prototype.getBottomBorderCellsOnSelection = function () {\n var endPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var endCell = endPos.paragraph.associatedCell;\n var cells = this.selection.getSelectedCells();\n var bottomBorderCells = [];\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].ownerRow === endCell.ownerRow) {\n bottomBorderCells.push(cells[i]);\n }\n }\n return bottomBorderCells;\n };\n Editor.prototype.clearAllBorderValues = function (borders) {\n var border = this.clearBorder();\n borders.bottom.copyFormat(border);\n borders.left.copyFormat(border);\n borders.right.copyFormat(border);\n borders.top.copyFormat(border);\n borders.vertical.copyFormat(border);\n borders.horizontal.copyFormat(border);\n };\n Editor.prototype.clearBorder = function () {\n var border = new WBorder();\n border.lineStyle = 'Cleared';\n return border;\n };\n Editor.prototype.getAdjacentCellToApplyBottomBorder = function () {\n var cells = [];\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n var table = startPos.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n var startCell = startPos.paragraph.associatedCell;\n var endCell = endPos.paragraph.associatedCell;\n var nextRowIndex = endCell.ownerRow.rowIndex + endCell.cellFormat.rowSpan;\n var nextRow = table.childWidgets[nextRowIndex];\n if (nextRow) {\n if (endCell.cellFormat.columnSpan > 1) {\n for (var i = endCell.columnIndex; i < endCell.columnIndex + endCell.cellFormat.columnSpan; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n cells = this.getAdjacentBottomBorderOnEmptyCells(nextRow, endCell);\n if (!this.selection.isEmpty) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n var nextCellColIndex = nextRow.childWidgets[i].columnIndex;\n if (nextCellColIndex >= startCell.columnIndex && nextCellColIndex <= endCell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getAdjacentBottomBorderOnEmptyCells = function (nextRow, cell, isSingleCell) {\n var cells = [];\n if (cell.cellFormat.columnSpan > 1) {\n for (var i = cell.columnIndex; i < cell.columnIndex; i++) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n else {\n if (this.selection.isEmpty || isSingleCell) {\n for (var i = 0; i < nextRow.childWidgets.length; i++) {\n if (nextRow.childWidgets[i].columnIndex === cell.columnIndex) {\n cells.push(nextRow.childWidgets[i]);\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getAdjacentCellToApplyRightBorder = function () {\n var cells = [];\n var startPosIn = this.selection.start;\n var endPosIn = this.selection.end;\n if (!this.selection.isForward) {\n startPosIn = this.selection.end;\n endPosIn = this.selection.start;\n }\n var table = startPosIn.paragraph.associatedCell.ownerTable;\n table = table.combineWidget(this.owner.viewer);\n var startCell = startPosIn.paragraph.associatedCell;\n var endCell = endPosIn.paragraph.associatedCell;\n if (this.selection.isEmpty) {\n var selectedCell = startPosIn.paragraph.associatedCell;\n cells = this.getSelectedCellsNextWidgets(selectedCell, table);\n }\n else {\n var selectedCells = this.getRightBorderCellsOnSelection();\n for (var i = 0; i < selectedCells.length; i++) {\n var cell = selectedCells[i];\n cells = cells.concat(this.getSelectedCellsNextWidgets(cell, table));\n }\n }\n return cells;\n };\n Editor.prototype.getSelectedCellsNextWidgets = function (selectedCell, table) {\n var cells = [];\n if (!isNullOrUndefined(selectedCell.nextWidget)) {\n cells.push(selectedCell.nextWidget);\n if (selectedCell.cellFormat.rowSpan > 1) {\n var nextRowIndex = selectedCell.ownerRow.rowIndex + selectedCell.cellFormat.rowSpan;\n for (var i = selectedCell.ownerRow.rowIndex + 1; i < nextRowIndex; i++) {\n var nextRow = table.childWidgets[i];\n if (nextRow) {\n for (var j = 0; j < nextRow.childWidgets.length; j++) {\n if (nextRow.childWidgets[j].columnIndex ===\n selectedCell.nextWidget.columnIndex) {\n cells.push(nextRow.childWidgets[j]);\n }\n }\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getBorder = function (borderColor, lineWidth, borderStyle) {\n var border = new WBorder();\n border.color = borderColor || '#000000';\n border.lineWidth = lineWidth || 1;\n border.lineStyle = borderStyle || 'Single';\n return border;\n };\n /**\n * Applies borders\n *\n * @param {WBorders} sourceBorders\n * @param {WBorders} applyBorders\n * @private\n * @returns {void}\n */\n Editor.prototype.applyBordersInternal = function (sourceBorders, applyBorders) {\n if (!isNullOrUndefined(sourceBorders) && !isNullOrUndefined(sourceBorders)) {\n if (!isNullOrUndefined(sourceBorders.top)) {\n this.applyBorder(sourceBorders.top, applyBorders.top);\n }\n if (!isNullOrUndefined(sourceBorders.bottom)) {\n this.applyBorder(sourceBorders.bottom, applyBorders.bottom);\n }\n if (!isNullOrUndefined(sourceBorders.left)) {\n this.applyBorder(sourceBorders.left, applyBorders.left);\n }\n if (!isNullOrUndefined(sourceBorders.right)) {\n this.applyBorder(sourceBorders.right, applyBorders.right);\n }\n if (!isNullOrUndefined(sourceBorders.horizontal)) {\n this.applyBorder(sourceBorders.horizontal, applyBorders.horizontal);\n }\n if (!isNullOrUndefined(sourceBorders.vertical)) {\n this.applyBorder(sourceBorders.vertical, applyBorders.vertical);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalUp)) {\n this.applyBorder(sourceBorders.diagonalUp, applyBorders.diagonalUp);\n }\n if (!isNullOrUndefined(sourceBorders.diagonalDown)) {\n this.applyBorder(sourceBorders.diagonalDown, applyBorders.diagonalDown);\n }\n }\n };\n /**\n * Apply shading to table\n *\n * @param {WShading} sourceShading\n * @param {WShading} applyShading\n * @private\n * @returns {void}\n */\n Editor.prototype.applyShading = function (sourceShading, applyShading) {\n if (!isNullOrUndefined(applyShading) && !isNullOrUndefined(sourceShading)) {\n if (!isNullOrUndefined(applyShading.backgroundColor)\n && sourceShading.backgroundColor !== applyShading.backgroundColor) {\n sourceShading.backgroundColor = applyShading.backgroundColor;\n }\n if (!isNullOrUndefined(applyShading.foregroundColor)\n && sourceShading.foregroundColor !== applyShading.foregroundColor) {\n sourceShading.foregroundColor = applyShading.foregroundColor;\n }\n if (!isNullOrUndefined(applyShading.textureStyle)\n && sourceShading.textureStyle !== applyShading.textureStyle) {\n sourceShading.textureStyle = applyShading.textureStyle;\n }\n }\n };\n Editor.prototype.applyBorder = function (sourceBorder, applyBorder) {\n if (!isNullOrUndefined(sourceBorder) && !isNullOrUndefined(applyBorder)) {\n if (!isNullOrUndefined(applyBorder.color)\n && sourceBorder.color !== applyBorder.color) {\n sourceBorder.color = applyBorder.color;\n }\n if (!isNullOrUndefined(applyBorder.lineStyle)\n && sourceBorder.lineStyle !== applyBorder.lineStyle) {\n sourceBorder.lineStyle = applyBorder.lineStyle;\n }\n if (!isNullOrUndefined(applyBorder.lineWidth)\n && sourceBorder.lineWidth !== applyBorder.lineWidth) {\n sourceBorder.lineWidth = applyBorder.lineWidth;\n }\n if (!isNullOrUndefined(applyBorder.shadow)\n && sourceBorder.shadow !== applyBorder.shadow) {\n sourceBorder.shadow = applyBorder.shadow;\n }\n if (!isNullOrUndefined(applyBorder.space)\n && sourceBorder.space !== applyBorder.space) {\n sourceBorder.space = applyBorder.space;\n }\n }\n };\n /**\n * Apply Table Format changes\n *\n * @param {WTableFormat} format Specifies table format\n * @param {boolean} isShading Specifies shading.\n * @private\n * @returns {void}\n */\n Editor.prototype.onTableFormat = function (format, isShading, table) {\n if (!isNullOrUndefined(this.selection.tableFormat)) {\n if (isNullOrUndefined(isShading)) {\n isShading = false;\n }\n this.documentHelper.owner.isShiftingEnabled = true;\n this.editorHistory.initializeHistory('TableFormat');\n if (isNullOrUndefined(table)) {\n table = this.selection.start.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n }\n if (isShading) {\n for (var i = 0; i < table.childWidgets.length; i++) {\n var rowWidget = table.childWidgets[i];\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[j];\n cellWidget.cellFormat.shading.copyFormat(format.shading);\n }\n }\n }\n // if (!isNullOrUndefined(isShading) && !this.isCellFormatApplied && !isNullOrUndefined(format.borders)) {\n // for (let i: number = 0; i < table.childWidgets.length; i++) {\n // const rowWidget: TableRowWidget = table.childWidgets[i] as TableRowWidget;\n // rowWidget.rowFormat.borders.copyFormat(format.borders);\n // for (let j: number = 0; j < rowWidget.childWidgets.length; j++) {\n // const cellWidget: TableCellWidget = rowWidget.childWidgets[j] as TableCellWidget;\n // cellWidget.cellFormat.borders.copyFormat(format.borders);\n // }\n // }\n // }\n this.applyTableFormat(table, undefined, format);\n this.reLayout(this.selection, false);\n }\n };\n Editor.prototype.applyTableFormat = function (table, property, value) {\n this.applyTablePropertyValue(undefined, value, table);\n };\n Editor.prototype.applyTablePropertyValue = function (property, value, table) {\n var sourceFormat = table.tableFormat;\n if (!isNullOrUndefined(this.editorHistory) && this.editorHistory.currentBaseHistoryInfo) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedTableProperties(sourceFormat, property, value);\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = value;\n }\n if (value instanceof WTableFormat) {\n if (isNullOrUndefined(property)) {\n this.handleTableFormat(sourceFormat, value);\n }\n return;\n }\n if (property === 'preferredWidth') {\n sourceFormat.preferredWidth = value;\n }\n else if (property === 'leftIndent') {\n sourceFormat.leftIndent = value;\n }\n else if (property === 'tableAlignment') {\n sourceFormat.tableAlignment = value;\n }\n else if (property === 'cellSpacing') {\n sourceFormat.cellSpacing = value;\n }\n else if (property === 'leftMargin') {\n sourceFormat.leftMargin = value;\n }\n else if (property === 'rightMargin') {\n sourceFormat.rightMargin = value;\n }\n else if (property === 'topMargin') {\n sourceFormat.topMargin = value;\n }\n else if (property === 'bottomMargin') {\n sourceFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidthType') {\n sourceFormat.preferredWidthType = value;\n }\n else if (property === 'bidi') {\n sourceFormat.bidi = value;\n }\n else if (property === 'title') {\n sourceFormat.title = value;\n }\n else if (property === 'description') {\n sourceFormat.description = value;\n }\n if (property === 'shading') {\n sourceFormat.shading = value;\n }\n else if (property === 'borders') {\n sourceFormat.borders = value;\n }\n // if (!isNullOrUndefined(table)) {\n // this.layoutItemBlock(table, true);\n // }\n };\n Editor.prototype.handleTableFormat = function (tableFormat, applyFormat) {\n if (this.isBordersAndShadingDialog || this.editorHistory.isUndoing\n || this.editorHistory.isRedoing) {\n if (!isNullOrUndefined(tableFormat.borders)) {\n this.applyBordersInternal(tableFormat.borders, applyFormat.borders);\n }\n if (!isNullOrUndefined(tableFormat.shading)) {\n this.applyShading(tableFormat.shading, applyFormat.shading);\n }\n }\n if (!this.isBordersAndShadingDialog) {\n if (applyFormat.hasValue('bidi') && applyFormat.bidi !== tableFormat.bidi) {\n tableFormat.bidi = applyFormat.bidi;\n }\n if (applyFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== tableFormat.preferredWidth) {\n tableFormat.preferredWidth = applyFormat.preferredWidth;\n }\n if (applyFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== tableFormat.preferredWidthType) {\n tableFormat.preferredWidthType = applyFormat.preferredWidthType;\n }\n if (applyFormat.hasValue('tableAlignment') && applyFormat.tableAlignment !== tableFormat.tableAlignment) {\n tableFormat.tableAlignment = applyFormat.tableAlignment;\n }\n if (applyFormat.hasValue('leftIndent') && applyFormat.leftIndent !== tableFormat.leftIndent) {\n tableFormat.leftIndent = applyFormat.leftIndent;\n }\n }\n this.updateGridForTableDialog(tableFormat.ownerBase, false);\n if (applyFormat.title !== tableFormat.title) {\n tableFormat.title = applyFormat.title;\n }\n if (applyFormat.description !== tableFormat.description) {\n tableFormat.description = applyFormat.description;\n }\n };\n Editor.prototype.updateGridForTableDialog = function (table, shiftNextItem) {\n if (table.tableHolder) {\n table.updateRowIndex(0);\n table.isGridUpdated = false;\n }\n this.documentHelper.layout.reLayoutTable(table);\n };\n /**\n * Applies Row Format Changes\n *\n * @param {WRowFormat} format Specifies row format\n * @private\n * @returns {void}\n */\n Editor.prototype.onRowFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('RowFormat');\n this.documentHelper.owner.isShiftingEnabled = true;\n var rowStartPos = this.selection.isForward ? this.selection.start : this.selection.end;\n var rowEndPos = this.selection.isForward ? this.selection.end : this.selection.start;\n var table = rowStartPos.paragraph.associatedCell.ownerTable.combineWidget(this.owner.viewer);\n this.applyRowFormat(rowStartPos.paragraph.associatedCell.ownerRow, rowStartPos, rowEndPos, undefined, format);\n this.reLayout(this.selection, false);\n };\n Editor.prototype.applyRowFormat = function (row, start, end, property, value) {\n this.applyRowPropertyValue(this.documentHelper.selection, property, value, row);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyRowFormat(newRow, start, end, property, value);\n }\n };\n Editor.prototype.applyRowPropertyValue = function (selection, property, value, row) {\n var applyFormat = row.rowFormat;\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedRowProperties(applyFormat, property, value);\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = value;\n }\n if (value instanceof WRowFormat) {\n if (isNullOrUndefined(property)) {\n this.handleRowFormat(value, applyFormat);\n }\n return;\n }\n if (property === 'heightType') {\n applyFormat.heightType = value;\n }\n else if (property === 'height') {\n applyFormat.height = value;\n }\n else if (property === 'isHeader') {\n applyFormat.isHeader = value;\n }\n else if (property === 'allowBreakAcrossPages') {\n applyFormat.allowBreakAcrossPages = value;\n }\n if (!isNullOrUndefined(row.ownerTable)) {\n this.layoutItemBlock(row.ownerTable, true);\n }\n };\n Editor.prototype.handleRowFormat = function (format, applyFormat) {\n if (format.hasValue('allowBreakAcrossPages') && format.allowBreakAcrossPages !== applyFormat.allowBreakAcrossPages) {\n applyFormat.allowBreakAcrossPages = format.allowBreakAcrossPages;\n }\n if (format.hasValue('isHeader') && format.isHeader !== applyFormat.isHeader) {\n applyFormat.isHeader = format.isHeader;\n }\n if (format.hasValue('heightType') && format.heightType !== applyFormat.heightType) {\n applyFormat.heightType = format.heightType;\n }\n if (format.hasValue('height') && format.height !== applyFormat.height) {\n applyFormat.height = format.height;\n }\n this.updateGridForTableDialog(applyFormat.ownerBase.ownerTable, true);\n };\n /**\n * Applies Cell Format changes\n *\n * @param {WCellFormat} format Specifies cell format\n * @private\n * @returns {void}\n */\n Editor.prototype.onCellFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('CellFormat');\n this.updateFormatForCell(this.selection, undefined, format);\n this.reLayout(this.selection, false);\n };\n /**\n * Applies Paragraph Format changes\n *\n * @param {WParagraphFormat} format Specifies cell format\n * @private\n * @returns {void}\n */\n Editor.prototype.onParaFormat = function (format) {\n if (isNullOrUndefined(this.selection) || isNullOrUndefined(format)) {\n return;\n }\n this.editorHistory.initializeHistory('ParagraphFormat');\n this.updateParagraphFormat(undefined, format, false);\n this.reLayout(this.selection, false);\n };\n /**\n * @param selection\n * @param value\n * @private\n * @returns {void}\n */\n Editor.prototype.updateCellMargins = function (selection, value) {\n var cellStartPosition = selection.start;\n var cellEndPosition = selection.end;\n if (!selection.isForward) {\n cellStartPosition = selection.end;\n cellEndPosition = selection.start;\n }\n this.initHistoryPosition(selection, cellStartPosition);\n this.documentHelper.owner.cellOptionsDialogModule.applyCellMarginValue(cellStartPosition.paragraph.associatedCell.ownerRow, cellStartPosition, cellEndPosition, value);\n };\n Editor.prototype.updateFormatForCell = function (selection, property, value) {\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n }\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n var cells;\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var appliedFormat;\n for (var k = startCell.columnIndex; k <= endCell.columnIndex; k++) {\n cells = this.getSelectedCellInColumn(startCell.ownerTable, startCell.ownerRow.rowIndex, k, endCell.ownerRow.rowIndex);\n for (var i = 0; i < cells.length; i++) {\n appliedFormat = this.applyCellPropertyValue(this.documentHelper.selection, property, value, cells[i].cellFormat);\n }\n }\n this.updateGridForTableDialog(table, false);\n };\n Editor.prototype.getSelectedCellInColumn = function (table, rowStartIndex, columnIndex, rowEndIndex) {\n var cells = [];\n for (var i = rowStartIndex; i <= rowEndIndex; i++) {\n var row = table.childWidgets[i];\n for (var j = 0; j < row.childWidgets.length; j++) {\n if (row.childWidgets[j].columnIndex === columnIndex) {\n cells.push(row.childWidgets[j]);\n }\n }\n }\n return cells;\n };\n Editor.prototype.getColumnCells = function (table, columnIndex, isLeftSideCollection) {\n var cells = [];\n for (var k = 0; k < table.childWidgets.length; k++) {\n var row = table.childWidgets[k];\n for (var i = 0; i < row.childWidgets.length; i++) {\n var cell = row.childWidgets[i];\n if (isLeftSideCollection) {\n if (cell.columnIndex + cell.cellFormat.columnSpan === columnIndex) {\n cells.push(cell);\n }\n }\n else {\n if (cell.columnIndex === columnIndex) {\n cells.push(cell);\n }\n }\n }\n }\n return cells;\n };\n Editor.prototype.getTableWidth = function (table) {\n if (table.tableFormat.preferredWidth !== 0 || table.tableFormat.preferredWidthType === 'Percent') {\n if (table.tableFormat.preferredWidthType === 'Auto' || table.tableFormat.preferredWidthType === 'Point') {\n return table.tableFormat.preferredWidth;\n }\n else {\n if (table.tableFormat.preferredWidth === 0) {\n return 0;\n }\n else {\n return HelperMethods.convertPixelToPoint(this.owner.viewer.clientArea.width) / 100 * table.tableFormat.preferredWidth;\n }\n }\n }\n return HelperMethods.convertPixelToPoint(this.documentHelper.layout.getTableWidth(table));\n };\n /**\n *\n * @private\n * @returns {void}\n */\n Editor.prototype.applyCellPropertyValue = function (selection, property, value, applyFormat) {\n if (!isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo)) {\n value = this.editorHistory.currentBaseHistoryInfo.addModifiedCellProperties(applyFormat, property, value);\n this.editorHistory.currentBaseHistoryInfo.insertedFormat = value;\n }\n if (value instanceof WCellFormat) {\n if (isNullOrUndefined(property)) {\n this.handleCellFormat(value, applyFormat);\n }\n return value;\n }\n if (property === 'leftMargin') {\n applyFormat.leftMargin = value;\n }\n else if (property === 'topMargin') {\n applyFormat.topMargin = value;\n }\n else if (property === 'rightMargin') {\n applyFormat.rightMargin = value;\n }\n else if (property === 'bottomMargin') {\n applyFormat.bottomMargin = value;\n }\n else if (property === 'preferredWidth') {\n applyFormat.preferredWidth = value;\n applyFormat.cellWidth = value;\n }\n else if (property === 'cellWidth') {\n applyFormat.cellWidth = value;\n }\n else if (property === 'columnSpan') {\n applyFormat.columnSpan = value;\n }\n else if (property === 'rowSpan') {\n applyFormat.rowSpan = value;\n }\n else if (property === 'preferredWidthType') {\n applyFormat.preferredWidthType = value;\n }\n else if (property === 'verticalAlignment') {\n applyFormat.verticalAlignment = value;\n }\n if (property === 'shading') {\n applyFormat.shading = value;\n }\n else if (property === 'borders') {\n applyFormat.borders = value;\n }\n return undefined;\n };\n Editor.prototype.handleCellFormat = function (cellFormat, applyFormat) {\n if (!isNullOrUndefined(cellFormat) && !isNullOrUndefined(applyFormat)) {\n if (this.isBordersAndShadingDialog) {\n if (!isNullOrUndefined(cellFormat.borders)) {\n this.applyBordersInternal(applyFormat.borders, cellFormat.borders);\n }\n if (!isNullOrUndefined(cellFormat.shading)) {\n this.applyShading(applyFormat.shading, cellFormat.shading);\n }\n // this.layoutRow((applyFormat.ownerBase as TableCellWidget).ownerRow, this.documentHelper, false);\n }\n else {\n if (cellFormat.hasValue('preferredWidth') && applyFormat.preferredWidth !== cellFormat.preferredWidth) {\n applyFormat.preferredWidth = cellFormat.preferredWidth;\n }\n if (cellFormat.hasValue('preferredWidthType') && applyFormat.preferredWidthType !== cellFormat.preferredWidthType) {\n applyFormat.preferredWidthType = cellFormat.preferredWidthType;\n }\n if (cellFormat.hasValue('verticalAlignment') && applyFormat.verticalAlignment !== cellFormat.verticalAlignment) {\n applyFormat.verticalAlignment = cellFormat.verticalAlignment;\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.destroy = function () {\n if (this.tableResize) {\n this.tableResize.destroy();\n this.tableResize = undefined;\n }\n if (this.previousCharFormat) {\n this.previousCharFormat.destroy();\n this.previousCharFormat = undefined;\n }\n if (this.previousParaFormat) {\n this.previousParaFormat.destroy();\n this.previousParaFormat = undefined;\n }\n if (this.alertDialog) {\n this.alertDialog.destroy();\n }\n this.alertDialog = undefined;\n if (this.base64) {\n this.base64.destroy();\n }\n this.base64 = undefined;\n this.endParagraph = undefined;\n this.copiedData = undefined;\n this.copiedTextContent = undefined;\n this.listNumberFormat = undefined;\n this.nodes = [];\n this.removedTextNodes = [];\n this.removedBookmarkElements = [];\n this.editStartRangeCollection = [];\n this.documentHelper = undefined;\n this.editRangeID = undefined;\n this.isCellFormatApplied = undefined;\n };\n /**\n * Updates the table of contents.\n *\n * @param tocField\n * @private\n * @returns {void}\n */\n Editor.prototype.updateToc = function (tocField) {\n if (isNullOrUndefined(tocField)) {\n tocField = this.selection.getTocFieldInternal();\n }\n if (!this.documentHelper.layout.isTocField(tocField)) {\n return;\n }\n // Decode field code to get parameters\n var code = this.selection.getFieldCode(tocField);\n if (code.toLocaleLowerCase().indexOf('toc') !== -1) {\n this.insertTableOfContents(this.validateTocSettings(this.getTocSettings(code, tocField)));\n }\n };\n Editor.prototype.getTocSettings = function (code, tocField) {\n var tocSettings = {};\n tocSettings.includePageNumber = true;\n tocSettings.rightAlign = true;\n // Decode field code to get parameters\n if (code.toLowerCase() === 'toc \\\\mergeformat') {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 3;\n }\n else {\n var swtiches = code.split('\\\\');\n for (var i = 0; i < swtiches.length; i++) {\n var swtch = swtiches[i];\n if (swtch.length === 0) {\n continue;\n }\n switch (swtch[0]) {\n case 'o':\n if (!isNullOrUndefined(swtch.match(/\\d+/g))) {\n var levels = swtch.match(/\\d+/g).map(Number);\n tocSettings.startLevel = levels[0];\n tocSettings.endLevel = levels[1];\n }\n else {\n tocSettings.startLevel = 1;\n tocSettings.endLevel = 9;\n }\n break;\n case 'h':\n tocSettings.includeHyperlink = true;\n break;\n case 'n':\n tocSettings.includePageNumber = false;\n break;\n case 'p':\n tocSettings.rightAlign = false;\n break;\n case 'u':\n tocSettings.includeOutlineLevels = true;\n break;\n case 't':\n this.decodeTSwitch(tocSettings, swtch);\n break;\n }\n }\n }\n //assigns tab leader.\n var tabs = tocField.paragraph.paragraphFormat.getUpdatedTabs();\n if (tabs.length > 0) {\n tocSettings.tabLeader = tabs[tabs.length - 1].tabLeader;\n }\n if (tocSettings.rightAlign && isNullOrUndefined(tocSettings.tabLeader)) {\n tocSettings.tabLeader = 'Dot';\n }\n return tocSettings;\n };\n Editor.prototype.decodeTSwitch = function (tocSettings, tSwitch) {\n tocSettings.levelSettings = {};\n tSwitch = tSwitch.replace('t', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.replace('\"', '');\n tSwitch = tSwitch.trim();\n var levels = tSwitch.split(',');\n for (var index = 0; index < levels.length; index++) {\n tocSettings.levelSettings[levels[index]] = parseInt(levels[index + 1], 10);\n index++;\n }\n };\n /**\n * Inserts, modifies or updates the table of contents based on given settings.\n *\n * @param {TableOfContentsSettings} tableOfContentsSettings Specify the table of content settings to be inserted.\n * @returns {void}\n */\n Editor.prototype.insertTableOfContents = function (tableOfContentsSettings) {\n this.isInsertingTOC = true;\n var removedCommentStart = this.checkAndRemoveComments();\n this.initComplexHistory('TOC');\n if (isNullOrUndefined(tableOfContentsSettings)) {\n //Initializes with default value.\n tableOfContentsSettings = {};\n tableOfContentsSettings.startLevel = 1;\n tableOfContentsSettings.endLevel = 3;\n tableOfContentsSettings.includeHyperlink = true;\n tableOfContentsSettings.includeOutlineLevels = true;\n tableOfContentsSettings.includePageNumber = true;\n tableOfContentsSettings.rightAlign = true;\n tableOfContentsSettings.tabLeader = 'Dot';\n }\n var tocField = undefined;\n var code = undefined;\n if (this.selection.contextType === 'TableOfContents') {\n tocField = this.selection.getTocFieldInternal();\n }\n if (tocField instanceof FieldElementBox) {\n this.selection.start.setPositionForSelection(tocField.line, tocField, 0, this.selection.start.location);\n var offset = 2;\n if (tocField.fieldEnd.paragraph === tocField.fieldEnd.paragraph.bodyWidget.lastChild) {\n offset--;\n }\n this.selection.end.setPositionForSelection(tocField.fieldEnd.line, tocField.fieldEnd, offset, this.selection.end.location);\n this.delete();\n }\n // Build TOC field code based on parameter\n code = this.constructTocFieldCode(tableOfContentsSettings);\n var isStartParagraph = this.selection.start.isAtParagraphStart;\n var blockInfo = this.selection.getParagraphInfo(this.selection.start);\n var initialStart = this.selection.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n // Build TOC fields\n var widgets = this.buildToc(this.validateTocSettings(tableOfContentsSettings), code, true, isStartParagraph);\n if (widgets.length > 0) {\n var tocLastPara = new ParagraphWidget();\n var tocLastLine = new LineWidget(tocLastPara);\n tocLastPara.childWidgets.push(tocLastLine);\n var index = 0;\n if (!isStartParagraph) {\n index = 1;\n }\n var line = widgets[index].childWidgets[0];\n var fieldBegin = line.children[0];\n this.appendEndField(fieldBegin, tocLastLine);\n widgets.push(tocLastPara);\n this.appendEmptyPara(widgets);\n }\n else {\n var localizeValue = new L10n('documenteditor', this.owner.defaultLocale);\n localizeValue.setLocale(this.owner.locale);\n DialogUtility.alert({\n title: localizeValue.getConstant('No Headings'),\n content: localizeValue.getConstant('Add Headings'),\n showCloseIcon: true,\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n }).enableRtl = this.owner.enableRtl;\n }\n this.setPositionForCurrentIndex(this.selection.start, initialStart);\n this.selection.end.setPositionInternal(this.selection.start);\n var bodyWidget = new BodyWidget();\n bodyWidget.sectionFormat = new WSectionFormat(bodyWidget);\n bodyWidget.childWidgets = widgets;\n this.pasteContentsInternal([bodyWidget], false);\n this.isInsertingTOC = false;\n this.updatePageRef();\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistory();\n this.updateHistoryForComments(removedCommentStart);\n }\n if (widgets.length === 0) {\n this.owner.editorHistoryModule.undo();\n this.owner.editorHistoryModule.redoStack.pop();\n }\n };\n Editor.prototype.appendEmptyPara = function (widgets) {\n var emptyPara = new ParagraphWidget();\n var emptyLine = new LineWidget(emptyPara);\n emptyPara.childWidgets.push(emptyLine);\n widgets.push(emptyPara);\n };\n Editor.prototype.constructTocFieldCode = function (tocSettings) {\n var tocFieldCode = 'TOC';\n //appends styles level\n if (!isNullOrUndefined(tocSettings.startLevel) && tocSettings.startLevel !== 0 && !isNullOrUndefined(tocSettings.endLevel) && tocSettings.endLevel !== 0) {\n tocFieldCode = tocFieldCode + ' \\\\o \"' + tocSettings.startLevel + '-' + tocSettings.endLevel + '\"';\n }\n if (tocSettings.includePageNumber && !tocSettings.rightAlign) {\n tocFieldCode = tocFieldCode + ' \\\\p \" \"';\n }\n if (!tocSettings.includePageNumber) {\n tocFieldCode = tocFieldCode + ' \\\\n';\n }\n if (tocSettings.includeHyperlink) {\n tocFieldCode = tocFieldCode + ' \\\\h \\\\z';\n }\n if (tocSettings.includeOutlineLevels) {\n tocFieldCode = tocFieldCode + ' \\\\u';\n }\n var tSwitch = this.constructTSwitch(tocSettings);\n if (tSwitch.length > 6) {\n tocFieldCode = tocFieldCode + tSwitch;\n }\n return tocFieldCode;\n };\n Editor.prototype.constructTSwitch = function (tocSettings) {\n var tSwitch = '';\n var prefix = ' \\\\t ';\n if (!isNullOrUndefined(tocSettings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(tocSettings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n tSwitch = tSwitch + key + ',' + tocSettings.levelSettings[key].toString() + ',';\n }\n }\n tSwitch = tSwitch.slice(0, -1);\n tSwitch = prefix + '\"' + tSwitch + '\"';\n return tSwitch;\n };\n Editor.prototype.appendEndField = function (fieldBegin, lineWidget) {\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.fieldSeparator = fieldBegin.fieldSeparator;\n fieldBegin.fieldSeparator.fieldEnd = fieldEnd;\n fieldEnd.fieldBegin = fieldBegin;\n fieldEnd.fieldBegin.fieldEnd = fieldEnd;\n fieldEnd.line = lineWidget;\n //For TOC we used to append field end at last we need to map that inserted revision to field end.\n if (fieldBegin.revisions.length > 0) {\n var currentRevision = fieldBegin.revisions[fieldBegin.revisions.length - 1];\n currentRevision.range.push(fieldEnd);\n this.owner.trackChangesPane.updateCurrentTrackChanges(currentRevision);\n fieldEnd.revisions.push(currentRevision);\n }\n lineWidget.children.push(fieldEnd);\n };\n Editor.prototype.validateTocSettings = function (tocSettings) {\n if (isNullOrUndefined(tocSettings.startLevel) || tocSettings.startLevel < 1) {\n tocSettings.startLevel = 1;\n }\n if (isNullOrUndefined(tocSettings.endLevel) || tocSettings.endLevel < tocSettings.endLevel) {\n tocSettings.endLevel = tocSettings.startLevel > 3 ? tocSettings.startLevel : 3;\n }\n if (isNullOrUndefined(tocSettings.includeHyperlink)) {\n tocSettings.includeHyperlink = false;\n }\n if (isNullOrUndefined(tocSettings.includePageNumber)) {\n tocSettings.includePageNumber = false;\n }\n if (isNullOrUndefined(tocSettings.rightAlign)) {\n tocSettings.rightAlign = false;\n }\n if (isNullOrUndefined(tocSettings.levelSettings)) {\n tocSettings.levelSettings = {};\n }\n return tocSettings;\n };\n /**\n * Builds the TOC\n *\n * @private\n * @returns {ParagraphWidget[]}\n *\n */\n Editor.prototype.buildToc = function (tocSettings, fieldCode, isFirstPara, isStartParagraph, isNavigationPane) {\n var tocDomBody = this.documentHelper.pages[0].bodyWidgets[0];\n var widgets = [];\n this.createHeadingLevels(tocSettings);\n if (tocSettings.includeOutlineLevels) {\n this.createOutlineLevels(tocSettings);\n }\n var sectionFormat = this.selection.start.paragraph.bodyWidget.sectionFormat;\n var widget = tocDomBody.childWidgets[0];\n while (widget !== undefined) {\n if (widget instanceof ParagraphWidget && (this.isHeadingStyle(widget) || (tocSettings.includeOutlineLevels && this.isOutlineLevelStyle(widget)))) {\n var bookmarkName = this.insertTocBookmark(widget);\n this.createTOCWidgets(widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph, sectionFormat, isNavigationPane);\n isFirstPara = false;\n }\n widget = this.selection.getNextParagraphBlock(widget.getSplitWidgets().pop());\n }\n this.tocStyles = {};\n return widgets;\n };\n Editor.prototype.createOutlineLevels = function (settings) {\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var levelStyle = 'Level' + i.toString();\n if (isNullOrUndefined(this.tocStyles[levelStyle])) {\n this.tocStyles[levelStyle] = i;\n }\n }\n };\n Editor.prototype.createHeadingLevels = function (settings) {\n //let normalStyle: string = 'Normal';\n for (var i = settings.startLevel; i <= settings.endLevel; i++) {\n var headingStyle = 'Heading ' + i.toString();\n if (isNullOrUndefined(this.tocStyles[headingStyle])) {\n this.tocStyles[headingStyle] = i;\n }\n }\n if (!isNullOrUndefined(settings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(settings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n this.tocStyles[key] = settings.levelSettings[key];\n }\n }\n };\n Editor.prototype.isHeadingStyle = function (para) {\n var style = para.paragraphFormat.baseStyle;\n if (style !== undefined) {\n return isNullOrUndefined(this.tocStyles[style.name]) ? false : true;\n }\n return false;\n };\n Editor.prototype.isOutlineLevelStyle = function (para) {\n var styleName = para.paragraphFormat.outlineLevel;\n return isNullOrUndefined(this.tocStyles[styleName]) ? false : true;\n };\n Editor.prototype.createTocFieldElement = function (lineWidget, fieldCode, isSkipRevision) {\n //begin\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.hasFieldEnd = true;\n fieldBegin.line = lineWidget;\n lineWidget.children.push(fieldBegin);\n var currentRevision = undefined;\n //format toc\n var textElement = new TextElementBox();\n textElement.text = fieldCode;\n textElement.line = lineWidget;\n lineWidget.children.push(textElement);\n //field separator\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.fieldBegin = fieldBegin;\n fieldSeparator.fieldBegin.fieldSeparator = fieldSeparator;\n fieldSeparator.line = lineWidget;\n lineWidget.children.push(fieldSeparator);\n // If revision enabled.\n return fieldBegin;\n };\n Editor.prototype.createTOCWidgets = function (widget, widgets, fieldCode, bookmarkName, tocSettings, isFirstPara, isStartParagraph, sectionFormat, isNavigationPane) {\n var fieldBegin = undefined;\n var tocPara = undefined;\n var tocLine = undefined;\n var emptyParaAppended = false;\n if (widgets.length === 1 && widgets[0].childWidgets[0].children.length === 3 && !isNullOrUndefined(isFirstPara) && !isFirstPara) {\n tocLine = widgets[0].childWidgets[0];\n }\n else {\n tocPara = new ParagraphWidget();\n var styleName = undefined;\n //Adds toc syles into paragraph\n var headingStyleName = widget.paragraphFormat.baseStyle.name;\n if (tocSettings.includeOutlineLevels && isNullOrUndefined(this.tocStyles[headingStyleName])) {\n styleName = widget.paragraphFormat.outlineLevel;\n }\n else {\n styleName = headingStyleName;\n }\n var tocStyleName = 'TOC ' + this.tocStyles[styleName];\n var headingPaneStyleName = 'Heading ' + this.tocStyles[styleName];\n var paraStyle = undefined;\n if (isNavigationPane) {\n paraStyle = this.documentHelper.styles.findByName(headingPaneStyleName, 'Paragraph');\n if (isNullOrUndefined(paraStyle)) {\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.documentHelper.preDefinedStyles.get(headingPaneStyleName)), this.documentHelper.styles, true);\n paraStyle = this.documentHelper.styles.findByName(headingPaneStyleName, 'Paragraph');\n }\n }\n else {\n paraStyle = this.documentHelper.styles.findByName(tocStyleName, 'Paragraph');\n if (isNullOrUndefined(paraStyle)) {\n this.documentHelper.owner.parser.parseStyle(JSON.parse(this.getCompleteStyles()), JSON.parse(this.documentHelper.preDefinedStyles.get(tocStyleName)), this.documentHelper.styles, true);\n paraStyle = this.documentHelper.styles.findByName(tocStyleName, 'Paragraph');\n }\n }\n tocPara.paragraphFormat.applyStyle(paraStyle);\n //Creates right tab for page number.\n if (tocSettings.rightAlign && tocSettings.includePageNumber) {\n var tabStop = new WTabStop();\n tabStop.position = sectionFormat.pageWidth - (sectionFormat.leftMargin + sectionFormat.rightMargin);\n tabStop.tabLeader = tocSettings.tabLeader;\n tabStop.deletePosition = 0;\n tabStop.tabJustification = 'Right';\n tocPara.paragraphFormat.tabs.push(tabStop);\n }\n tocLine = new LineWidget(tocPara);\n tocPara.childWidgets.push(tocLine);\n }\n //creates toc field element if it is insert\n if ((isFirstPara !== undefined) && isFirstPara) {\n if (!isNullOrUndefined(isStartParagraph) && !isStartParagraph) {\n this.appendEmptyPara(widgets);\n emptyParaAppended = true;\n }\n this.createTocFieldElement(tocLine, fieldCode);\n }\n var text = '';\n var isFieldCode = false;\n var paragraph = widget;\n while (paragraph instanceof ParagraphWidget) {\n for (var lineIndex = 0; lineIndex < paragraph.childWidgets.length; lineIndex++) {\n var lineWidget = paragraph.childWidgets[lineIndex];\n for (var elementIndex = 0; elementIndex < lineWidget.children.length; elementIndex++) {\n var element = lineWidget.children[elementIndex];\n if (element.isPageBreak || element.isColumnBreak) {\n continue;\n }\n if ((element instanceof FieldElementBox) || (element instanceof BookmarkElementBox) || isFieldCode) {\n if (element instanceof FieldElementBox) {\n if (element.fieldType === 0) {\n isFieldCode = true;\n }\n else if (element.fieldType === 2) {\n isFieldCode = false;\n }\n }\n }\n else if (element instanceof TextElementBox || element instanceof ListTextElementBox) {\n var temp = element.text;\n var tabChar = '\\t';\n if (temp.indexOf(tabChar) !== -1) {\n temp = temp.replace(new RegExp(tabChar, 'g'), ' ');\n }\n text = text + temp;\n }\n }\n }\n paragraph = paragraph.nextSplitWidget;\n }\n if (text !== '') {\n // inserts hyperlink\n if (tocSettings.includeHyperlink && (bookmarkName !== undefined)) {\n fieldBegin = this.insertTocHyperlink(tocLine, bookmarkName, text, widget);\n }\n else {\n var span = new TextElementBox();\n span.text = text;\n span.line = tocLine;\n tocLine.children.push(span);\n }\n //inserts page number\n if (tocSettings.includePageNumber && (bookmarkName !== undefined)) {\n if (tocSettings.rightAlign) {\n var tabText = new TabElementBox();\n tabText.text = '\\t';\n tabText.line = tocLine;\n tocLine.children.push(tabText);\n }\n var pageField = this.insertTocPageNumber(bookmarkName, tocLine, tocSettings.rightAlign, widget);\n this.appendEndField(pageField, tocLine);\n }\n if (tocSettings.includeHyperlink && fieldBegin !== undefined) {\n this.appendEndField(fieldBegin, tocLine);\n }\n }\n if (!isNullOrUndefined(tocPara) && (text !== '' || isFirstPara)) {\n widgets.push(tocPara);\n if (!isNavigationPane && this.owner.enableTrackChanges && !isNullOrUndefined(tocPara)) {\n if (widgets.length === 1 || emptyParaAppended) {\n this.insertRevisionForBlock(tocPara, 'Insertion', true);\n }\n else {\n var revision = this.owner.revisionsInternal.changes[0];\n this.insertRevisionForBlock(tocPara, 'Insertion', true, revision);\n }\n }\n }\n };\n Editor.prototype.insertTocHyperlink = function (lineWidget, bookmarkName, text, widget) {\n var fieldCode = ' HYPERLINK \\\\l \\\"' + bookmarkName + '\\\" ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode, true);\n //text element.\n var span = new TextElementBox();\n span.text = text;\n // retrieve the TOC character format\n var styleName = widget.paragraphFormat.baseStyle.name;\n var curBaseSytle = this.documentHelper.styles.findByName(styleName, 'Paragraph');\n if (curBaseSytle.characterFormat.isEqualTocFormat(widget.characterFormat)) {\n var noramlStyle = this.documentHelper.styles.findByName('Normal', 'Paragraph');\n span.characterFormat.copyTocFormat(noramlStyle.characterFormat);\n }\n else {\n span.characterFormat.copyTocFormat(widget.characterFormat);\n }\n span.line = lineWidget;\n lineWidget.children.push(span);\n return fieldBegin;\n };\n Editor.prototype.getPageNumber = function (widget) {\n var pageNumber;\n if (widget.bodyWidget.sectionFormat.restartPageNumbering) {\n pageNumber = widget.bodyWidget.page.currentPageNum;\n }\n else {\n pageNumber = this.documentHelper.pages.indexOf(widget.bodyWidget.page) + 1;\n }\n return pageNumber;\n };\n Editor.prototype.insertTocPageNumber = function (bookMarkname, lineWidget, isRightAlign, widget) {\n var fieldCode = ' PAGEREF' + bookMarkname + ' \\\\h ';\n var fieldBegin = this.createTocFieldElement(lineWidget, fieldCode, true);\n var text = (this.getPageNumber(widget)).toString();\n var span = new FieldTextElementBox();\n span.fieldBegin = fieldBegin;\n if (!isRightAlign) {\n text = ' ' + text;\n }\n span.text = text;\n span.line = lineWidget;\n lineWidget.children.push(span);\n this.pageRefFields[bookMarkname] = span;\n return fieldBegin;\n };\n Editor.prototype.updatePageRef = function () {\n for (var _i = 0, _a = Object.keys(this.pageRefFields); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.documentHelper.bookmarks.containsKey(key)) {\n var bookmark = this.documentHelper.bookmarks.get(key);\n var pageRef = (this.getPageNumber(bookmark.paragraph)).toString();\n var span = this.pageRefFields[key];\n if (pageRef !== span.text) {\n span.isWidthUpdated = false;\n span.text = pageRef;\n var paragraph = span.paragraph;\n var lineIndex = paragraph.childWidgets.indexOf(span.line);\n var elementIndex = span.line.children.indexOf(span);\n if (!isNullOrUndefined(paragraph.containerWidget)) {\n this.documentHelper.layout.reLayoutParagraph(paragraph, lineIndex, elementIndex);\n }\n }\n }\n }\n };\n /**\n * Inserts toc bookmark.\n *\n * @param widget\n * @returns {string}\n */\n Editor.prototype.insertTocBookmark = function (widget) {\n var bookmarkName = undefined;\n var lineLength = widget.childWidgets.length;\n if (lineLength > 0) {\n var splitParagraph = widget.getSplitWidgets();\n var firstParagraph = splitParagraph[0];\n var lastParagraph = splitParagraph.pop();\n var startLine = firstParagraph.childWidgets[0];\n var endLine = lastParagraph.childWidgets[lastParagraph.childWidgets.length - 1];\n if ((startLine !== undefined) && (endLine !== undefined)) {\n var startElement = startLine.children[0];\n if (startElement instanceof ListTextElementBox || startElement instanceof CommentCharacterElementBox) {\n do {\n startElement = startElement.nextNode;\n } while (startElement instanceof ListTextElementBox || startElement instanceof CommentCharacterElementBox);\n }\n //Returns the bookmark if already present for paragraph.\n if (!isNullOrUndefined(startElement) && startElement instanceof BookmarkElementBox && startElement.bookmarkType === 0 && (startElement.name.toLowerCase().match('^_toc'))) {\n return startElement.name;\n }\n var endElement = endLine.children[endLine.children.length - 1];\n if ((startElement !== undefined) && (endElement !== undefined)) {\n this.selection.start.setPositionForSelection(startLine, startElement, 0, this.selection.start.location);\n this.selection.end.setPositionForSelection(endLine, endElement, endElement.length, this.selection.end.location);\n bookmarkName = this.generateBookmarkName();\n this.insertBookmark(bookmarkName);\n }\n }\n }\n return bookmarkName;\n };\n Editor.prototype.generateBookmarkName = function () {\n var bookmarkName = '';\n do {\n this.tocBookmarkId++;\n var count = 10 - this.tocBookmarkId.toString().length;\n var formatString = '';\n while (count - 1 > 0) {\n formatString = '0' + formatString;\n count--;\n }\n bookmarkName = '_Toc' + formatString + this.tocBookmarkId;\n } while (this.documentHelper.bookmarks.containsKey(bookmarkName));\n return bookmarkName;\n };\n /**\n * Change cell content alignment\n *\n * @param verticalAlignment\n * @param textAlignment\n * @param verticalAlignment\n * @param textAlignment\n * @private\n * @returns {void}\n */\n Editor.prototype.onCellContentAlignment = function (verticalAlignment, textAlignment) {\n this.owner.isShiftingEnabled = true;\n var selection = this.owner.selectionModule;\n if (selection.isEmpty && selection.start.paragraph.isInsideTable) {\n if (this.owner.editorHistoryModule) {\n this.owner.editorHistoryModule.initComplexHistory(selection, 'MultiSelection');\n }\n //Selecting the table cell to update the all the paragraph format.\n selection.selectTableCell();\n this.initHistory('CellContentVerticalAlignment');\n var cellFormat = selection.start.paragraph.associatedCell.cellFormat;\n this.applyCellPropertyValue(selection, 'verticalAlignment', verticalAlignment, cellFormat);\n this.reLayout(selection, false);\n this.initHistory('TextAlignment');\n this.updateParagraphFormat('textAlignment', textAlignment, false);\n this.reLayout(this.owner.selectionModule, false);\n if (this.owner.editorHistoryModule) {\n this.owner.editorHistoryModule.updateComplexHistory();\n }\n }\n else {\n if (this.owner.editorHistoryModule) {\n this.owner.editorHistoryModule.initComplexHistory(selection, 'MultiSelection');\n }\n if (!isNullOrUndefined(selection.getTable(selection.start, selection.end))) {\n //Table cell vertical alignment.\n this.updateSelectionTableFormat(selection, 'CellContentVerticalAlignment', verticalAlignment);\n this.reLayout(this.owner.selectionModule, false);\n this.initHistory('TextAlignment');\n //Paragraph text alignment.\n this.updateSelectionParagraphFormatting('textAlignment', textAlignment, false);\n this.reLayout(selection, false);\n }\n if (this.owner.editorHistoryModule) {\n this.owner.editorHistoryModule.updateComplexHistory();\n }\n }\n };\n //Restrict editing implementation starts\n /**\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.insertEditRangeElement = function (user) {\n if (this.documentHelper.isDocumentProtected || this.documentHelper.selection.isEmpty) {\n return;\n }\n this.initComplexHistory('RestrictEditing');\n this.selection.skipEditRangeRetrieval = true;\n var selection = this.documentHelper.selection;\n var startPos = this.selection.start;\n var endPos = this.selection.end;\n if (!this.selection.isForward) {\n startPos = this.selection.end;\n endPos = this.selection.start;\n }\n if (selection.start.paragraph.isInsideTable && selection.end.paragraph.isInsideTable\n && selection.start.paragraph.associatedCell.ownerTable.contains(selection.end.paragraph.associatedCell)) {\n var startCell = this.getOwnerCell(this.selection.isForward);\n var endCell = this.getOwnerCell(!this.selection.isForward);\n if (startCell.rowIndex === endCell.rowIndex) {\n var startIndex = startCell.ownerRow.childWidgets.indexOf(startCell);\n var endIndex = startCell.ownerRow.childWidgets.indexOf(endCell);\n var startElement = [];\n var endElement = [];\n for (var i = startIndex; i <= endIndex; i++) {\n var editStart = this.addEditElement(user);\n if (i == startIndex) {\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.editRangeStart = editStart;\n }\n }\n editStart.columnFirst = i;\n editStart.columnLast = i;\n editStart.line = selection.start.currentWidget;\n var editEnd = editStart.editRangeEnd;\n editEnd.line = selection.end.currentWidget;\n startElement.push(editStart);\n endElement.push(editEnd);\n this.insertElements(undefined, [editStart]);\n }\n //this.insertElements(endElement, startElement);\n var lastLine = this.selection.getLastParagraph(endCell).lastChild;\n for (var l = 0; l < endElement.length; l++) {\n endElement[l].line = lastLine;\n if (l == 0) {\n this.selection.start.setPositionParagraph(lastLine, this.selection.getLineLength(lastLine));\n this.selection.end.setPositionParagraph(lastLine, this.selection.getLineLength(lastLine));\n }\n this.insertElements(undefined, [endElement[l]]);\n }\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n var offset = startElement[0].line.getOffset(startElement[0], 1);\n this.selection.start.setPositionParagraph(startElement[0].line, offset);\n offset = endElement[0].line.getOffset(endElement[0], 1);\n this.selection.end.setPositionParagraph(endElement[0].line, offset);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n }\n else {\n this.insertEditRangeInsideTable(startCell, endCell, user);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n var startLine = this.documentHelper.getFirstParagraphInCell(startCell).childWidgets[0];\n var endLine = this.selection.getLastParagraph(endCell).childWidgets[0];\n var offset = startLine.getOffset(startLine.children[0], 1);\n this.selection.start.setPositionParagraph(startLine, offset);\n offset = endLine.getOffset(endLine.children[0], 1);\n this.selection.end.setPositionParagraph(endLine, offset);\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n }\n }\n else {\n this.addRestrictEditingForSelectedArea(user);\n }\n this.selection.skipEditRangeRetrieval = false;\n };\n Editor.prototype.insertEditRangeInsideTable = function (startCell, endCell, user) {\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var count = table.childWidgets.indexOf(endCell.ownerRow);\n var rowStartIndex = table.childWidgets.indexOf(startCell.ownerRow);\n var startLeft = this.selection.getCellLeft(startCell.ownerRow, startCell);\n var endLeft = startLeft + startCell.cellFormat.cellWidth;\n var endCellLeft = this.selection.getCellLeft(endCell.ownerRow, endCell);\n var endCellRight = endCellLeft + endCell.cellFormat.cellWidth;\n var cellInfo = this.updateSelectedCellsInTable(startLeft, endLeft, endCellLeft, endCellRight);\n startLeft = cellInfo.start;\n endLeft = cellInfo.end;\n var endElement = [];\n for (var i = rowStartIndex; i <= count; i++) {\n table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var row = table.childWidgets[i];\n var cellSelectionStartIndex = -1;\n var cellSelectionEndIndex = -1;\n for (var j = 0; j < row.childWidgets.length; j++) {\n var cell = row.childWidgets[j];\n var cellStart = this.selection.getCellLeft(row, cell);\n if (this.checkCellWithInSelection(startLeft, endLeft, cellStart)) {\n if (cellSelectionStartIndex === -1) {\n cellSelectionStartIndex = j;\n }\n cellSelectionEndIndex = j;\n }\n }\n var newEndElement = [];\n for (var z = cellSelectionStartIndex; z <= cellSelectionEndIndex; z++) {\n var startCell_2 = void 0;\n var startParagraph = void 0;\n var startLine = void 0;\n if (z >= cellSelectionStartIndex && z <= cellSelectionEndIndex) {\n startCell_2 = row.childWidgets[cellSelectionStartIndex];\n startParagraph = this.documentHelper.getFirstParagraphInCell(startCell_2);\n startLine = startParagraph.childWidgets[0];\n }\n var editStart = this.addEditElement(user);\n if (z === cellSelectionStartIndex) {\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.editRangeStart = editStart;\n }\n this.selection.start.setPositionParagraph(startLine, this.selection.getStartOffset(startParagraph));\n this.selection.end.setPositionParagraph(startLine, this.selection.getStartOffset(startParagraph));\n }\n editStart.columnFirst = z;\n editStart.columnLast = z;\n editStart.line = startLine;\n this.insertElements(undefined, [editStart]);\n var editEnd = editStart.editRangeEnd;\n newEndElement.push(editEnd);\n if (endElement.length > 0 && z === cellSelectionEndIndex) {\n for (var l = 0; l < endElement.length; l++) {\n endElement[l].line = editStart.line;\n this.insertElements(undefined, [endElement[l]]);\n }\n endElement = [];\n }\n }\n endElement = newEndElement;\n if (i === count && endElement.length > 0) {\n var cellWidget = row.childWidgets[cellSelectionEndIndex];\n var lastLine = this.selection.getLastParagraph(cellWidget).lastChild;\n for (var l = 0; l < endElement.length; l++) {\n endElement[l].line = lastLine;\n if (l == 0) {\n this.selection.start.setPositionParagraph(lastLine, this.selection.getLineLength(lastLine));\n this.selection.end.setPositionParagraph(lastLine, this.selection.getLineLength(lastLine));\n }\n this.insertElements(undefined, [endElement[l]]);\n }\n }\n }\n };\n Editor.prototype.addRestrictEditingForSelectedArea = function (user) {\n var editStart = this.addEditElement(user);\n var editEnd = editStart.editRangeEnd;\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.editorHistory.currentHistoryInfo.editRangeStart = editStart;\n }\n this.owner.isShiftingEnabled = true;\n this.insertElements([editEnd], [editStart]);\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n var offset = editStart.line.getOffset(editStart, 1);\n this.selection.start.setPositionParagraph(editStart.line, offset);\n offset = editEnd.line.getOffset(editEnd, 1);\n this.selection.end.setPositionParagraph(editEnd.line, offset);\n var block = this.documentHelper.blockToShift;\n if (!isNullOrUndefined(block) && this.viewer instanceof PageLayoutViewer && block.bodyWidget.sectionFormat.columns.length > 1) {\n var lastbody = this.documentHelper.layout.getBodyWidget(block.bodyWidget, false);\n if ((!isNullOrUndefined(lastbody.nextRenderedWidget) && lastbody.nextRenderedWidget.sectionFormat.breakCode === 'NoBreak' && lastbody.page === lastbody.nextRenderedWidget.page)) {\n this.reLayout(this.selection);\n }\n }\n this.owner.isShiftingEnabled = false;\n this.selection.fireSelectionChanged(true);\n this.fireContentChange();\n };\n /**\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.addEditElement = function (user, id) {\n var editStart = new EditRangeStartElementBox();\n if (user.toLocaleLowerCase() === 'everyone') {\n editStart.group = user;\n }\n else {\n editStart.user = user;\n }\n var editEnd = new EditRangeEndElementBox();\n editEnd.editRangeStart = editStart;\n editStart.editRangeEnd = editEnd;\n if (id) {\n editStart.editRangeId = id;\n editEnd.editRangeId = id;\n }\n else {\n var editRangeId = this.getEditRangeID(9);\n editStart.editRangeId = editRangeId;\n editEnd.editRangeId = editRangeId;\n }\n this.editStartRangeCollection.push(editStart);\n this.addEditCollectionToDocument();\n this.editStartRangeCollection = [];\n return editStart;\n };\n /**\n * @param numDigits\n * @private\n * @returns {number}\n */\n Editor.prototype.getEditRangeID = function (numDigits) {\n var min = Math.pow(10, numDigits - 1);\n var max = Math.pow(10, numDigits) - 1;\n var num = Math.floor(Math.random() * (max - min + 1)) + min;\n if (this.editRangeID.includes(num)) {\n // Number is not unique, generate a new one recursively\n return this.getEditRangeID(numDigits);\n }\n this.editRangeID.push(num);\n return num;\n };\n /**\n * @param protectionType\n * @private\n * @returns {void}\n */\n Editor.prototype.protect = function (protectionType) {\n this.documentHelper.isDocumentProtected = true;\n this.documentHelper.protectionType = protectionType;\n this.selection.highlightEditRegion();\n if (this.editorHistory) {\n this.editorHistory.destroy();\n }\n };\n Editor.prototype.addEditCollectionToDocument = function () {\n for (var i = 0; i < this.editStartRangeCollection.length; i++) {\n var editStart = this.editStartRangeCollection[i];\n var user = editStart.user === '' ? editStart.group : editStart.user;\n if (this.documentHelper.editRanges.length > 0 && this.documentHelper.editRanges.containsKey(user)) {\n this.documentHelper.editRanges.get(user).push(editStart);\n }\n else {\n var collection = [];\n collection.push(editStart);\n this.documentHelper.editRanges.add(user, collection);\n }\n }\n this.selection.updateEditRangeCollection();\n };\n /**\n * @param editStart\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.updateRangeCollection = function (editStart, user) {\n if (this.documentHelper.editRanges.length > 0 && this.documentHelper.editRanges.containsKey(user)) {\n this.documentHelper.editRanges.get(user).push(editStart);\n }\n else {\n var collection = [];\n collection.push(editStart);\n this.documentHelper.editRanges.add(user, collection);\n }\n };\n /**\n * @param user\n * @private\n * @returns {void}\n */\n Editor.prototype.removeUserRestrictions = function (user) {\n if (!this.selection.checkSelectionIsAtEditRegion() && !this.selection.isEditRangeCellSelected()) {\n return;\n }\n this.selection.skipEditRangeRetrieval = true;\n var editStart = this.selection.getEditRangeStartElement();\n this.selection.skipEditRangeRetrieval = true;\n var start = this.selection.start;\n var end = this.selection.end;\n if (!this.selection.isForward) {\n start = this.selection.end;\n end = this.selection.start;\n }\n if (!this.selection.isEmpty && start.paragraph.isInsideTable && end.paragraph.isInsideTable && this.selection.isCellSelected(start.paragraph.associatedCell, start, end)) {\n var startCell = start.paragraph.associatedCell;\n var table = startCell.ownerTable.combineWidget(this.owner.viewer);\n var endCell = end.paragraph.associatedCell;\n if (table.contains(endCell)) {\n this.removeEditRangeElementsOnTable(user);\n }\n }\n else {\n this.removeEditRangeElements(editStart, user);\n }\n this.fireContentChange();\n this.selection.skipEditRangeRetrieval = false;\n };\n Editor.prototype.removeEditRangeElements = function (editStart, user) {\n this.initHistory('RemoveEditRange');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.markerData.push(this.getMarkerData(editStart));\n this.editorHistory.currentBaseHistoryInfo.setEditRangeInfo(editStart);\n this.editorHistory.updateHistory();\n }\n if (editStart.user === user || editStart.group === user) {\n this.removeUserRestrictionsInternal(editStart, user);\n }\n this.selection.updateEditRangeCollection();\n };\n Editor.prototype.removeEditRangeElementsOnTable = function (currentUser) {\n var selectedWidgets = this.selection.selectedWidgets.keys;\n if (selectedWidgets) {\n this.initComplexHistory('RemoveEditRange');\n for (var i = 0; i < selectedWidgets.length; i++) {\n if (selectedWidgets[i] instanceof TableCellWidget) {\n var cell = selectedWidgets[i];\n var row = cell.containerWidget;\n var editRangeElements = row.editRangeID.values;\n if (editRangeElements.length > 0) {\n var editStart = void 0;\n for (var _i = 0, editRangeElements_1 = editRangeElements; _i < editRangeElements_1.length; _i++) {\n var element = editRangeElements_1[_i];\n if (element.columnFirst == cell.index && element.columnLast == cell.index) {\n editStart = element;\n }\n }\n if (editStart) {\n var editRangeEnd = editStart.editRangeEnd;\n this.selection.start.setPositionParagraph(editStart.line, editStart.line.getOffset(editStart, editStart.length));\n this.selection.end.setPositionParagraph(editRangeEnd.line, editRangeEnd.line.getOffset(editRangeEnd, editRangeEnd.length) - 1);\n if (editStart.user === currentUser || editStart.group === currentUser) {\n this.removeEditRangeElements(editStart, currentUser);\n }\n }\n }\n }\n }\n if (this.editorHistory) {\n this.editorHistory.updateComplexHistoryInternal();\n }\n }\n };\n /**\n * @param editStart\n * @param currentUser\n * @private\n * @returns {void}\n */\n Editor.prototype.removeUserRestrictionsInternal = function (editStart, currentUser, notRemoveElement) {\n var user = currentUser;\n if (isNullOrUndefined(currentUser)) {\n user = editStart.user === '' ? editStart.group : editStart.user;\n }\n var index = this.documentHelper.editRanges.get(user).indexOf(editStart);\n this.documentHelper.editRanges.get(user).splice(index, 1);\n if (this.documentHelper.editRanges.get(user).length === 0) {\n this.documentHelper.editRanges.remove(user);\n }\n if (editStart.columnFirst != -1 && editStart.columnLast != -1) {\n this.removeEditRangeFromCollection(editStart);\n }\n editStart.removeEditRangeMark();\n if (!notRemoveElement) {\n editStart.editRangeEnd.line.children.splice(editStart.editRangeEnd.indexInOwner, 1);\n editStart.line.children.splice(editStart.indexInOwner, 1);\n }\n };\n Editor.prototype.removeEditRangeFromCollection = function (editStart) {\n var row = editStart.paragraph.associatedCell.ownerRow;\n if (row.editRangeID.containsKey(editStart.editRangeId)) {\n var cell = row.getCellUsingColumnIndex(row.rowIndex, editStart.columnFirst);\n if (!isNullOrUndefined(cell)) {\n if (cell.isRenderEditRangeStart && cell.isRenderEditRangeEnd) {\n cell.isRenderEditRangeEnd = false;\n cell.isRenderEditRangeStart = false;\n row.editRangeID.remove(editStart.editRangeId);\n }\n }\n }\n else {\n var table = editStart.paragraph.associatedCell.ownerTable;\n for (var i = row.rowIndex - 1; i >= 0; i--) {\n var previousRow = table.childWidgets[i];\n if (previousRow.editRangeID.containsKey(editStart.editRangeId)) {\n var previousCell = previousRow.getCellUsingColumnIndex(previousRow.rowIndex, editStart.columnFirst);\n if (!isNullOrUndefined(previousCell)) {\n if (previousCell.isRenderEditRangeStart && previousCell.isRenderEditRangeEnd) {\n previousCell.isRenderEditRangeEnd = false;\n previousCell.isRenderEditRangeStart = false;\n previousRow.editRangeID.remove(editStart.editRangeId);\n break;\n }\n }\n }\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.removeAllEditRestrictions = function () {\n this.selection.skipEditRangeRetrieval = true;\n var startPosition = this.selection.start;\n var endPosition = this.selection.end;\n var editStart = [];\n var keys = this.documentHelper.editRanges.keys;\n for (var j = 0; j < keys.length; j++) {\n editStart = this.documentHelper.editRanges.get(keys[j]);\n for (var i = 0; i < editStart.length; i++) {\n editStart[i].editRangeEnd.line.children.splice(editStart[i].editRangeEnd.indexInOwner, 1);\n editStart[i].line.children.splice(editStart[i].indexInOwner, 1);\n }\n }\n this.documentHelper.editRanges.clear();\n this.selection.updateEditRangeCollection();\n this.selection.start.setPositionInternal(startPosition);\n this.selection.end.setPositionInternal(endPosition);\n this.selection.editRegionHighlighters.clear();\n this.owner.viewer.updateScrollBars();\n this.selection.fireSelectionChanged(false);\n this.selection.skipEditRangeRetrieval = false;\n };\n /**\n * Inserts the specified form field at the current selection.\n *\n * @param {FormFieldType} type Specify the Form field type to insert.\n * @returns {void}\n */\n Editor.prototype.insertFormField = function (type) {\n if (isNullOrUndefined(this.selection.start) || this.owner.enableHeaderAndFooter) {\n return;\n }\n this.initHistory('InsertHyperlink');\n var isRemoved = true;\n if (!this.selection.isEmpty) {\n isRemoved = this.removeSelectedContents(this.selection);\n }\n if (isRemoved) {\n this.insertFormFieldInternal(type);\n }\n };\n Editor.prototype.insertFormFieldInternal = function (type) {\n this.updateInsertPosition();\n var element = [];\n var temp = this.getCharacterFormat(this.selection);\n var format = new WCharacterFormat(undefined);\n format.copyFormat(temp);\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.formFieldData = this.getFormFieldData(type);\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.formFieldType = type;\n this.editorHistory.currentBaseHistoryInfo.fieldBegin = fieldBegin;\n }\n fieldBegin.characterFormat.copyFormat(format);\n element.push(fieldBegin);\n var bookmark = new BookmarkElementBox(0);\n bookmark.characterFormat.copyFormat(format);\n fieldBegin.formFieldData.name = this.getBookmarkName(type, 'Insert', this.formFieldCounter);\n bookmark.name = fieldBegin.formFieldData.name;\n element.push(bookmark);\n var span = new TextElementBox();\n span.text = this.getFormFieldCode(type);\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n element.push(fieldSeparator);\n var result = new TextElementBox();\n result.characterFormat.copyFormat(format);\n if (type === 'CheckBox') {\n result.text = String.fromCharCode(9744);\n this.documentHelper.layout.setCheckBoxFontSize(fieldBegin.formFieldData, result.characterFormat);\n }\n else {\n result.text = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n element.push(result);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n element.push(fieldEnd);\n fieldBegin.fieldSeparator = fieldEnd.fieldSeparator = fieldSeparator;\n fieldBegin.fieldEnd = fieldSeparator.fieldEnd = fieldEnd;\n fieldSeparator.fieldBegin = fieldEnd.fieldBegin = fieldBegin;\n var bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.characterFormat.copyFormat(format);\n bookmarkEnd.name = fieldBegin.formFieldData.name;\n bookmarkEnd.reference = bookmark;\n bookmark.reference = bookmarkEnd;\n element.push(bookmarkEnd);\n this.documentHelper.layout.isInsertFormField = true;\n this.insertElement(element);\n this.documentHelper.layout.isInsertFormField = false;\n var paragraph = this.selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n if (this.documentHelper.fields.indexOf(fieldBegin) === -1) {\n this.documentHelper.fields.push(fieldBegin);\n }\n this.addFormFieldWidget(fieldBegin);\n var offset = bookmarkEnd.line.getOffset(bookmarkEnd, 1);\n this.selection.selects(bookmarkEnd.line, offset, true);\n this.updateEndPosition();\n this.reLayout(this.selection, true);\n };\n Editor.prototype.addFormFieldWidget = function (fieldBegin) {\n if (this.documentHelper.formFields.indexOf(fieldBegin) === -1) {\n var isInserted = false;\n if (this.documentHelper.formFields.length > 0) {\n var currentStart = this.selection.getElementPosition(fieldBegin).startPosition;\n for (var i = 0; i < this.documentHelper.formFields.length; i++) {\n /* eslint-disable-next-line max-len */\n var paraIndex = this.selection.getElementPosition(this.documentHelper.formFields[i]).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.formFields.splice(i, 0, fieldBegin);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.formFields.push(fieldBegin);\n }\n }\n };\n /**\n * @private\n */\n Editor.prototype.getFormFieldData = function (type) {\n switch (type) {\n case 'Text':\n return new TextFormField();\n case 'CheckBox':\n return new CheckBoxFormField();\n case 'DropDown':\n return new DropDownFormField();\n }\n };\n /**\n * @param field\n * @param info\n * @private\n * @returns {void}\n */\n Editor.prototype.setFormField = function (field, info) {\n var type;\n var formField;\n if (!isNullOrUndefined(info.format)) {\n type = 'Text';\n formField = new TextFormField();\n }\n else if (!isNullOrUndefined(info.sizeType)) {\n type = 'CheckBox';\n formField = new CheckBoxFormField();\n }\n else if (!isNullOrUndefined(info.dropdownItems)) {\n type = 'DropDown';\n formField = new DropDownFormField();\n }\n if (!isNullOrUndefined(type) && !isNullOrUndefined(formField)) {\n formField.name = !isNullOrUndefined(info.name) ? info.name : field.formFieldData.name;\n formField.copyFieldInfo(info);\n this.editFormField(type, formField);\n }\n };\n /**\n * @param type\n * @param formData\n * @param type\n * @param formData\n * @private\n * @returns {boolean}\n */\n Editor.prototype.editFormField = function (type, formData) {\n var begin = this.selection.getCurrentFormField();\n if (isNullOrUndefined(begin) || isNullOrUndefined(begin.formFieldData)) {\n return false;\n }\n this.initComplexHistory('FormField');\n var bookmarkStart;\n var bookmarkEnd;\n if (formData.name !== '') {\n if (begin.formFieldData.name !== formData.name &&\n this.documentHelper.bookmarks.containsKey(formData.name)) {\n this.deleteBookmark(formData.name);\n }\n bookmarkStart = new BookmarkElementBox(0);\n bookmarkStart.name = formData.name;\n bookmarkEnd = new BookmarkElementBox(1);\n bookmarkEnd.name = formData.name;\n bookmarkStart.reference = bookmarkEnd;\n bookmarkEnd.reference = bookmarkStart;\n }\n this.initHistory('InsertHyperlink');\n this.editHyperlinkInternal = isNullOrUndefined(this.editorHistory)\n || (this.editorHistory && isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo));\n // Preserves the character format for hyperlink field.\n var temp = begin.characterFormat.cloneFormat();\n var format = new WCharacterFormat();\n format.copyFormat(temp);\n var textFormat = begin.fieldSeparator.nextElement.characterFormat.cloneFormat();\n var currentOffset = begin.line.getOffset(begin, 0);\n this.selection.start.setPositionParagraph(begin.line, currentOffset);\n var endElement = begin.fieldEnd;\n if (begin.nextNode && begin.nextNode instanceof BookmarkElementBox) {\n endElement = begin.nextNode.reference;\n }\n currentOffset = endElement.line.getOffset(endElement, 1);\n this.selection.end.setPositionParagraph(endElement.line, currentOffset);\n this.skipFieldDeleteTracking = true;\n this.deleteSelectedContents(this.selection, false);\n this.skipFieldDeleteTracking = false;\n this.updateInsertPosition();\n var element = [];\n var fieldBegin = new FieldElementBox(0);\n fieldBegin.formFieldData = formData;\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.currentBaseHistoryInfo.formFieldType = type;\n this.editorHistory.currentBaseHistoryInfo.fieldBegin = fieldBegin;\n }\n element.push(fieldBegin);\n fieldBegin.characterFormat.copyFormat(format);\n if (!isNullOrUndefined(bookmarkStart)) {\n element.push(bookmarkStart);\n }\n var span = new TextElementBox();\n span.text = this.getFormFieldCode(type);\n element.push(span);\n var fieldSeparator = new FieldElementBox(2);\n fieldSeparator.characterFormat.copyFormat(format);\n element.push(fieldSeparator);\n span = new TextElementBox();\n span.characterFormat.copyFormat(textFormat);\n span.text = this.getDefaultText(formData);\n if (type === 'CheckBox') {\n span.characterFormat.copyFormat(fieldBegin.characterFormat);\n if (formData.sizeType === 'Exactly') {\n span.characterFormat.fontSize = formData.size;\n }\n }\n else if (formData instanceof TextFormField) {\n if (formData.defaultValue !== '') {\n if (formData.type === 'Text') {\n span.text = HelperMethods.formatText(formData.format, formData.defaultValue);\n }\n else if (formData.type === 'Number') {\n span.text = HelperMethods.formatNumber(formData.format, formData.defaultValue);\n }\n else {\n span.text = HelperMethods.formatDate(formData.format, formData.defaultValue);\n }\n }\n }\n element.push(span);\n var fieldEnd = new FieldElementBox(1);\n fieldEnd.characterFormat.copyFormat(format);\n element.push(fieldEnd);\n var lastElement = fieldEnd;\n if (!isNullOrUndefined(bookmarkEnd)) {\n lastElement = bookmarkEnd;\n element.push(bookmarkEnd);\n }\n fieldBegin.fieldSeparator = fieldEnd.fieldSeparator = fieldSeparator;\n fieldBegin.fieldEnd = fieldSeparator.fieldEnd = fieldEnd;\n fieldSeparator.fieldBegin = fieldEnd.fieldBegin = fieldBegin;\n this.documentHelper.layout.isInsertFormField = true;\n this.insertElement(element);\n this.documentHelper.layout.isInsertFormField = false;\n var paragraph = this.selection.start.paragraph;\n fieldEnd.linkFieldCharacter(this.documentHelper);\n if (this.documentHelper.fields.indexOf(fieldBegin) === -1) {\n this.documentHelper.fields.push(fieldBegin);\n }\n this.addFormFieldWidget(fieldBegin);\n var offset = lastElement.line.getOffset(lastElement, 1);\n this.selection.selects(lastElement.line, offset, true);\n this.updateEndPosition();\n if (this.editorHistory && this.editorHistory.currentBaseHistoryInfo) {\n this.editorHistory.updateHistory();\n }\n if (this.editorHistory && this.editorHistory.currentHistoryInfo) {\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.editorHistory.updateComplexHistory();\n this.isSkipOperationsBuild = false;\n }\n this.reLayout(this.selection, true);\n this.editHyperlinkInternal = false;\n this.nodes = [];\n return true;\n };\n Editor.prototype.getDefaultText = function (formField) {\n var defaultText = '';\n if (formField instanceof CheckBoxFormField) {\n defaultText = formField.defaultValue ? String.fromCharCode(9745) : String.fromCharCode(9744);\n }\n else if (formField instanceof DropDownFormField) {\n if (formField.dropdownItems.length > 0) {\n defaultText = formField.dropdownItems[0];\n }\n else {\n defaultText = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n }\n else if (formField instanceof TextFormField) {\n if (formField.defaultValue !== '') {\n defaultText = formField.defaultValue;\n }\n else {\n defaultText = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n }\n return defaultText;\n };\n Editor.prototype.getFormFieldCode = function (type) {\n switch (type) {\n case 'Text':\n return 'FORMTEXT';\n case 'CheckBox':\n return 'FORMCHECKBOX';\n case 'DropDown':\n return 'FORMDROPDOWN';\n }\n };\n /**\n * @param field\n * @param reset\n * @param value\n * @param field\n * @param reset\n * @param value\n * @private\n * @returns {void}\n */\n Editor.prototype.toggleCheckBoxFormField = function (field, reset, value) {\n var formFieldData = field.formFieldData;\n if (formFieldData instanceof CheckBoxFormField && formFieldData.enabled) {\n this.initHistory('UpdateFormField');\n if (this.editorHistory) {\n var currentValue = void 0;\n if (formFieldData instanceof CheckBoxFormField) {\n currentValue = formFieldData.checked;\n }\n this.editorHistory.currentBaseHistoryInfo.fieldBegin = field;\n this.editorHistory.currentBaseHistoryInfo.setFormFieldInfo(field, currentValue);\n this.editorHistory.updateHistory();\n }\n if (reset) {\n formFieldData.checked = value;\n }\n else {\n formFieldData.checked = !formFieldData.checked;\n }\n var separator = field.fieldSeparator;\n var checkBoxTextElement = separator.nextNode;\n if (formFieldData.checked) {\n checkBoxTextElement.text = String.fromCharCode(9745);\n }\n else {\n checkBoxTextElement.text = String.fromCharCode(9744);\n }\n checkBoxTextElement.isWidthUpdated = false;\n this.owner.documentHelper.layout.reLayoutParagraph(field.line.paragraph, 0, 0);\n this.reLayout(this.selection, false);\n }\n };\n /**\n * @param contentControl\n * @returns {void}\n */\n Editor.prototype.toggleContentControlCheckBox = function (contentControl) {\n var checkBoxText = contentControl.nextNode;\n checkBoxText.isWidthUpdated = false;\n checkBoxText.text = (checkBoxText.text === String.fromCharCode(9744)) ? String.fromCharCode(9746) : String.fromCharCode(9744);\n if (checkBoxText.text === String.fromCharCode(9744)) {\n contentControl.contentControlProperties.isChecked = false;\n }\n else {\n contentControl.contentControlProperties.isChecked = true;\n }\n this.reLayout(this.selection, true);\n };\n /**\n * @param field\n * @param value\n * @param reset\n * @private\n * @returns {void}\n */\n Editor.prototype.updateFormField = function (field, value, reset) {\n var formFieldData = field.formFieldData;\n if (formFieldData) {\n this.updateFormFieldInternal(field, formFieldData, value, reset);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.updateContentControl = function (contentControl, value, reset) {\n if (contentControl.contentControlProperties.type === 'RichText' || contentControl.contentControlProperties.type === 'Text' || contentControl.contentControlProperties.type === 'Date' || contentControl.contentControlProperties.type === 'Picture') {\n this.updateContentControlResult(contentControl, value, reset);\n }\n else if (contentControl.contentControlProperties.type === 'CheckBox') {\n if (value == 'true' && !reset) {\n contentControl.contentControlProperties.isChecked = true;\n }\n else {\n contentControl.contentControlProperties.isChecked = false;\n }\n var element = contentControl.nextElement;\n if (element) {\n if (contentControl.contentControlProperties.isChecked && !reset) {\n element.text = String.fromCharCode(9746);\n }\n else {\n element.text = String.fromCharCode(9744);\n }\n }\n }\n else if (contentControl.contentControlProperties.type === 'ComboBox' || contentControl.contentControlProperties.type === 'DropDownList') {\n var span = new ContentControlListItems();\n if (reset) {\n var localeValue = new L10n('documenteditor', this.owner.defaultLocale);\n span.displayText = localeValue.getConstant('Choose an item');\n span.value = localeValue.getConstant('Choose an item');\n }\n else {\n span.displayText = value;\n span.value = value;\n }\n contentControl.contentControlProperties.contentControlListItems.push(span);\n this.dropDownChange(contentControl, span.displayText);\n }\n };\n Editor.prototype.updateContentControlResult = function (contentControl, value, reset) {\n this.selection.selectContentControlInternal(contentControl);\n if (contentControl.contentControlProperties.type === 'Picture') {\n if (reset) {\n value = '';\n }\n this.insertImageAsync(value);\n }\n else {\n if (reset) {\n value = 'Click here or tap to insert text';\n }\n this.insertText(value);\n }\n };\n Editor.prototype.updateFormFieldInternal = function (field, formFieldData, value, reset) {\n if (formFieldData instanceof TextFormField) {\n if (value === '') {\n if (reset) {\n value = this.getDefaultText(formFieldData);\n }\n else {\n value = this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5);\n }\n }\n var formattedText = value;\n var type = formFieldData.type;\n if (type === 'Text' && formFieldData.format !== '') {\n formattedText = HelperMethods.formatText(formFieldData.format, value);\n }\n this.updateFormFieldResult(field, formattedText);\n }\n else if (formFieldData instanceof DropDownFormField) {\n var text = formFieldData.dropdownItems[value];\n formFieldData.selectedIndex = value;\n this.updateFormFieldResult(field, text);\n }\n var endoffset = field.fieldEnd.line.getOffset(field.fieldEnd, 1);\n var startPos = new TextPosition(this.owner);\n startPos.setPositionParagraph(field.fieldEnd.line, endoffset);\n //selects the field range\n this.documentHelper.selection.selectRange(startPos, startPos);\n this.reLayout(this.selection, false);\n };\n Editor.prototype.updateFormFieldResult = function (field, value) {\n //When protection is enabled with type Form Filling below method selects the field result alone.\n this.selection.selectFieldInternal(field, false, true);\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.insertText(value);\n this.isSkipOperationsBuild = false;\n };\n Editor.prototype.checkBookmarkAvailability = function (name, action) {\n var bookmarkCol = this.documentHelper.bookmarks;\n for (var i = 0; i < bookmarkCol.length; i++) {\n if (bookmarkCol.containsKey(name)) {\n return false;\n }\n }\n return true;\n };\n Editor.prototype.getBookmarkName = function (type, action, count) {\n var name;\n var available = false;\n while (available === false) {\n name = type + count;\n available = this.checkBookmarkAvailability(name, action);\n count = count + 1;\n }\n return name;\n };\n /**\n * @param formField\n * @private\n * @returns {void}\n */\n Editor.prototype.applyFormTextFormat = function (formField) {\n if (!isNullOrUndefined(formField)) {\n var text = this.getFieldResultText(formField);\n var currentValue = text;\n text = HelperMethods.formatText(formField.formFieldData.format, text);\n if (formField.fieldSeparator != undefined) {\n this.applyTextFormatInternal(formField, text);\n }\n this.initHistory('FormTextFormat');\n if (this.editorHistory) {\n this.editorHistory.currentBaseHistoryInfo.setFormFieldInfo(formField, currentValue);\n this.editorHistory.updateHistory();\n }\n }\n };\n // Inserts 5 space on Form Fill inline mode if length is 0\n Editor.prototype.insertSpaceInFormField = function () {\n if (this.documentHelper.isInlineFormFillProtectedMode && this.selection.isInlineFormFillMode()) {\n var resultText = this.getFieldResultText();\n if (resultText.length === 0 || resultText === '\\r') {\n this.insertTextInternal(this.documentHelper.textHelper.repeatChar(this.documentHelper.textHelper.getEnSpaceCharacter(), 5), true);\n this.selection.selectTextElementStartOfField(this.selection.getCurrentFormField());\n }\n }\n };\n /**\n * @param formField\n * @private\n * @returns {string}\n */\n Editor.prototype.getFieldResultText = function (formField) {\n if (isNullOrUndefined(formField)) {\n formField = this.selection.getCurrentFormField();\n }\n //Stores the current selection index, to reset after getting the result text\n var previousStartIndex = this.selection.startOffset;\n var previousEndIndex = this.selection.endOffset;\n this.selection.isModifyingSelectionInternally = true;\n this.selection.selectFieldInternal(formField, false, true);\n var resultText = this.selection.getText(false);\n //Resets the selection back to the original index\n this.selection.select(previousStartIndex, previousEndIndex);\n this.selection.isModifyingSelectionInternally = false;\n return resultText;\n };\n /**\n * @private\n * @returns {void}\n */\n Editor.prototype.contentControlDropDownChange = function () {\n var contenControl = this.documentHelper.owner.editor.getContentControl();\n if (!isNullOrUndefined(contenControl)) {\n if ((contenControl.contentControlProperties.type == 'ComboBox' || contenControl.contentControlProperties.type == 'DropDownList')) {\n this.documentHelper.contentDropDown.showPopUp(contenControl);\n }\n else if (contenControl.contentControlProperties.type == 'Date') {\n this.documentHelper.owner.dateContentDialogModule.show();\n }\n }\n };\n /**\n * @param field\n * @param text\n * @private\n * @returns {void}\n */\n Editor.prototype.applyTextFormatInternal = function (field, text) {\n var textElement = field.fieldSeparator.nextElement;\n var start = 0;\n text = text.replace(/\\r/g, '');\n do {\n if (!isNullOrUndefined(textElement) && textElement instanceof TextElementBox) {\n textElement.text = text.slice(start, start + textElement.text.length);\n start = start + textElement.length;\n }\n if (isNullOrUndefined(textElement.nextElement)) {\n if (!isNullOrUndefined(textElement.line.nextLine)) {\n textElement = textElement.line.nextLine.children[0];\n }\n else {\n this.documentHelper.layout.layoutBodyWidgetCollection(textElement.paragraph.index, textElement.paragraph.bodyWidget, textElement.paragraph, true);\n var nextBlock = textElement.paragraph.nextRenderedWidget;\n if (isNullOrUndefined(nextBlock)) {\n break;\n }\n if (nextBlock instanceof TableWidget) {\n nextBlock = this.documentHelper.getFirstParagraphBlock(nextBlock);\n }\n while (nextBlock.isEmpty()) {\n nextBlock = nextBlock.nextRenderedWidget;\n }\n textElement = nextBlock.childWidgets[0].children[0];\n }\n }\n else {\n textElement = textElement.nextElement;\n }\n } while (!(textElement instanceof FieldElementBox && textElement.fieldType === 1 &&\n textElement.fieldBegin.formFieldData instanceof TextFormField));\n this.documentHelper.layout.layoutBodyWidgetCollection(textElement.paragraph.index, textElement.paragraph.bodyWidget, textElement.paragraph, true);\n this.selection.isFormatUpdated = true;\n this.reLayout(this.selection, false);\n this.selection.isFormatUpdated = false;\n };\n Editor.prototype.constructCommentInitial = function (authorName) {\n var splittedName = authorName.split(' ');\n var initials = '';\n for (var i = 0; i < splittedName.length; i++) {\n if (splittedName[i].length > 0 && splittedName[i] !== '') {\n initials += splittedName[i][0];\n }\n }\n return initials;\n };\n /**\n * Inserts the footnote at the current selection.\n *\n * @returns {void}\n */\n Editor.prototype.insertFootnote = function () {\n if (this.selection.isinFootnote || this.selection.isinEndnote) {\n return;\n }\n this.isFootNoteInsert = true;\n this.isFootNote = true;\n var footnote = new FootnoteElementBox();\n footnote.characterFormat.baselineAlignment = 'Superscript';\n footnote.footnoteType = 'Footnote';\n footnote.text = 's';\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var text = new FootnoteEndnoteMarkerElementBox();\n paragraph.paragraphFormat.afterSpacing = 0;\n text.characterFormat.baselineAlignment = 'Superscript';\n text.line = lineWidget;\n text.text = '?';\n lineWidget.children.push(text);\n var text1 = new TextElementBox();\n text1.text = ' ';\n text1.line = lineWidget;\n lineWidget.children.push(text1);\n paragraph.childWidgets.push(lineWidget);\n footnote.bodyWidget.childWidgets.push(paragraph);\n if (!this.selection.isEmpty) {\n this.selection.handleRightKey();\n }\n this.initInsertInline(footnote);\n // this.documentHelper.layout.isLayoutWhole = true;\n // this.layoutWholeDocument();\n // this.documentHelper.layout.isLayoutWhole = false;\n var footPara;\n if (footnote.paragraph.bodyWidget.page.footnoteWidget) {\n for (var i = 0; i < footnote.paragraph.bodyWidget.page.footnoteWidget.bodyWidgets.length; i++) {\n if ((footnote.paragraph.bodyWidget.page.footnoteWidget.bodyWidgets[i]).footNoteReference === footnote) {\n footPara = footnote.paragraph.bodyWidget.page.footnoteWidget.bodyWidgets[i].childWidgets[0];\n }\n }\n }\n this.selection.start.setPositionForLineWidget(footPara.childWidgets[0], text1.line.getOffset(text1, footnote.text.length));\n this.selection.end.setPositionInternal(this.selection.start);\n // this.selection.fireSelectionChanged(true);\n this.updateFootNoteIndex();\n this.reLayout(this.selection, false);\n this.documentHelper.layout.isLayoutWhole = true;\n this.isSkipOperationsBuild = true;\n this.layoutWholeDocument();\n this.isSkipOperationsBuild = false;\n this.documentHelper.layout.isLayoutWhole = false;\n this.separator('footnote');\n this.continuationSeparator('footnote');\n this.isFootNote = false;\n this.isFootNoteInsert = false;\n };\n Editor.prototype.updateFootnoteCollection = function (footnote) {\n if (this.documentHelper.footnoteCollection.indexOf(footnote) === -1) {\n var isInserted = false;\n if (this.documentHelper.footnoteCollection.length > 0) {\n var currentStart = this.selection.getElementPosition(footnote).startPosition;\n for (var i = 0; i < this.documentHelper.footnoteCollection.length; i++) {\n var paraIndex = this.selection.getElementPosition(this.documentHelper.footnoteCollection[i]).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.footnoteCollection.splice(i, 0, footnote);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.footnoteCollection.push(footnote);\n }\n // this.viewer.updateScrollBars();\n }\n };\n // Footnote implementation ends\n /**\n * Inserts the endnote at the current selection\n *\n * @returns {void}\n */\n Editor.prototype.insertEndnote = function () {\n if (this.selection.isinFootnote || this.selection.isinEndnote) {\n return;\n }\n this.documentHelper.layout.isEndnoteContentChanged = true;\n var endnote = new FootnoteElementBox();\n endnote.characterFormat.baselineAlignment = 'Superscript';\n endnote.footnoteType = 'Endnote';\n endnote.text = 's';\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var footText = new FootnoteEndnoteMarkerElementBox();\n paragraph.paragraphFormat.afterSpacing = 0;\n footText.characterFormat.baselineAlignment = 'Superscript';\n footText.line = lineWidget;\n footText.text = '?';\n lineWidget.children.push(footText);\n var followText = new TextElementBox();\n followText.text = ' ';\n followText.line = lineWidget;\n lineWidget.children.push(followText);\n paragraph.childWidgets.push(lineWidget);\n endnote.bodyWidget.childWidgets.push(paragraph);\n if (!this.selection.isEmpty) {\n this.selection.handleRightKey();\n }\n this.initInsertInline(endnote);\n // this.documentHelper.layout.isLayoutWhole = true;\n // this.layoutWholeDocument();\n // this.documentHelper.layout.isLayoutWhole = false;\n var lastpage = this.documentHelper.pages.length;\n var bodyWidget = this.documentHelper.pages[lastpage - 1].bodyWidgets[0];\n var footPara;\n if (bodyWidget.page.endnoteWidget) {\n for (var i = 0; i < bodyWidget.page.endnoteWidget.bodyWidgets.length; i++) {\n if ((bodyWidget.page.endnoteWidget.bodyWidgets[i]).footNoteReference === endnote) {\n footPara = bodyWidget.page.endnoteWidget.bodyWidgets[i].childWidgets[0];\n }\n }\n }\n this.selection.start.setPositionForLineWidget(footPara.childWidgets[0], footText.line.getOffset(followText, endnote.text.length));\n this.selection.end.setPositionInternal(this.selection.start);\n this.updateEndNoteIndex();\n this.reLayout(this.selection, false);\n this.documentHelper.layout.isLayoutWhole = true;\n this.isSkipOperationsBuild = this.owner.enableCollaborativeEditing;\n this.layoutWholeDocument();\n this.isSkipOperationsBuild = false;\n this.documentHelper.layout.isLayoutWhole = false;\n this.owner.documentHelper.blockToShift = undefined;\n this.separator('endnote');\n this.continuationSeparator('endnote');\n this.documentHelper.layout.isEndnoteContentChanged = false;\n };\n Editor.prototype.updateEndnoteCollection = function (endnote) {\n if (this.documentHelper.endnoteCollection.indexOf(endnote) === -1) {\n var isInserted = false;\n if (this.documentHelper.endnoteCollection.length > 0) {\n var currentStart = this.selection.getElementPosition(endnote).startPosition;\n for (var i = 0; i < this.documentHelper.endnoteCollection.length; i++) {\n var paraIndex = this.selection.getElementPosition(this.documentHelper.endnoteCollection[i]).startPosition;\n if (currentStart.isExistBefore(paraIndex)) {\n isInserted = true;\n this.documentHelper.endnoteCollection.splice(i, 0, endnote);\n break;\n }\n }\n }\n if (!isInserted) {\n this.documentHelper.endnoteCollection.push(endnote);\n }\n var lastpage = this.documentHelper.pages.length;\n if (this.documentHelper.endnoteCollection.length > 0) {\n var positionchanged = false;\n // this.documentHelper.layout.isFootnoteContentChanged = true;\n var foot = void 0;\n var endnoteWidget = void 0;\n var footIndex = this.documentHelper.endnoteCollection.indexOf(endnote);\n var insertIndex = 1;\n var height = 0;\n var isCreated = void 0;\n var bodyWidget = this.documentHelper.pages[lastpage - 1].bodyWidgets[0];\n if (bodyWidget.page.endnoteWidget) {\n for (var j = 0; j < bodyWidget.page.endnoteWidget.bodyWidgets.length; j++) {\n var currentIndex = this.documentHelper.endnoteCollection.indexOf((bodyWidget.page.endnoteWidget.bodyWidgets[j]).footNoteReference);\n if (currentIndex > footIndex) {\n if (currentIndex - footIndex === 1) {\n insertIndex = j;\n positionchanged = true;\n break;\n }\n }\n }\n }\n // endnote.isLayout = true;\n foot = endnote; //this.documentHelper.endnoteCollection[i];\n if (bodyWidget.page.endnoteWidget instanceof FootNoteWidget && bodyWidget.page.endnoteWidget.footNoteType === 'Endnote') {\n endnoteWidget = bodyWidget.page.endnoteWidget;\n }\n else {\n isCreated = true;\n endnoteWidget = new FootNoteWidget();\n endnoteWidget.footNoteType = 'Endnote';\n endnoteWidget.page = bodyWidget.page;\n var newParagraph = new ParagraphWidget();\n newParagraph.characterFormat = new WCharacterFormat();\n newParagraph.paragraphFormat = new WParagraphFormat();\n newParagraph.index = 0;\n var lineWidget = new LineWidget(newParagraph);\n newParagraph.childWidgets.push(lineWidget);\n //endnoteWidget.childWidgets.push(newParagraph);\n this.viewer.cutFromTop(this.viewer.clientActiveArea.y + 18);\n }\n var body = foot.bodyWidget;\n for (var j = 0; j < foot.bodyWidget.childWidgets.length; j++) {\n var block = foot.bodyWidget.childWidgets[j];\n //body.childWidgets.push(block);\n if (this.documentHelper.layout.isLayoutWhole) {\n block.containerWidget = undefined;\n }\n else {\n block.containerWidget = body;\n body.page = bodyWidget.page;\n body.sectionFormat = endnoteWidget.sectionFormat;\n block.containerWidget.containerWidget = endnoteWidget;\n }\n // endnoteWidget.bodyWidgets[j].childWidgets.push(block);\n if (positionchanged) {\n endnoteWidget.bodyWidgets.splice(insertIndex, 0, body);\n }\n else {\n endnoteWidget.bodyWidgets.push(body);\n }\n }\n insertIndex++;\n if (isCreated) {\n bodyWidget.page.endnoteWidget = endnoteWidget;\n }\n // endNote.containerWidget = bodyWidget;\n endnoteWidget.height += height;\n // }\n // this.documentHelper.layout.layoutfootNote(endnoteWidget);\n //this.layoutfootNote(endNote);\n }\n // this.viewer.updateScrollBars();\n }\n };\n Editor.prototype.updateEndNoteIndex = function () {\n var endNoteCollec = this.documentHelper.endnoteCollection;\n for (var i = 0; i < endNoteCollec.length; i++) {\n var text = this.documentHelper.layout.getFootEndNote(endNoteCollec[i].paragraph.bodyWidget.sectionFormat.endnoteNumberFormat, i + 1);\n if (text != '') {\n endNoteCollec[i].text = text;\n if (endNoteCollec[i].revisions !== undefined) {\n var j = 0;\n while (j < endNoteCollec[i].revisions.length) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(endNoteCollec[i].revisions[j]);\n j++;\n }\n }\n var marker = endNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0];\n if (!isNullOrUndefined(marker)) {\n if (marker instanceof FootnoteEndnoteMarkerElementBox || HelperMethods.checkTextFormat(marker.text)) {\n marker.text = text;\n marker.width = endNoteCollec[i].bodyWidget.footNoteReference.width;\n }\n if (marker.revisions != undefined) {\n var j = 0;\n while (j < marker.revisions.length) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(marker.revisions[j]);\n j++;\n }\n }\n }\n }\n }\n };\n Editor.prototype.separator = function (type) {\n //let block = new page_1.block;\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var text = new TextElementBox();\n text.characterFormat.fontColor = '#00000000';\n text.line = lineWidget;\n text.text = String.fromCharCode(3);\n lineWidget.children.push(text);\n paragraph.childWidgets.push(lineWidget);\n if (type === 'footnote' && this.documentHelper.footnotes.separator.length < 1) {\n this.documentHelper.footnotes.separator.push(paragraph);\n }\n else if (type === 'endnote' && this.documentHelper.endnotes.separator.length < 1) {\n this.documentHelper.endnotes.separator.push(paragraph);\n }\n };\n Editor.prototype.continuationSeparator = function (type) {\n //var block = new page_1.block;\n var paragraph = new ParagraphWidget();\n var lineWidget = new LineWidget(paragraph);\n var text = new TextElementBox();\n text.characterFormat.fontColor = '#00000000';\n text.line = lineWidget;\n text.text = String.fromCharCode(4);\n lineWidget.children.push(text);\n paragraph.childWidgets.push(lineWidget);\n if (type === 'footnote' && this.documentHelper.footnotes.continuationSeparator.length < 1) {\n this.documentHelper.footnotes.continuationSeparator.push(paragraph);\n }\n else if (type === 'endnote' && this.documentHelper.endnotes.continuationSeparator.length < 1) {\n this.documentHelper.endnotes.continuationSeparator.push(paragraph);\n }\n };\n Editor.prototype.updateFootNoteIndex = function () {\n var footNoteCollec = this.documentHelper.footnoteCollection;\n for (var i = 0; i < footNoteCollec.length; i++) {\n var text = this.documentHelper.layout.getFootEndNote(footNoteCollec[i].paragraph.bodyWidget.sectionFormat.footNoteNumberFormat, i + 1);\n if (text != '') {\n footNoteCollec[i].text = text;\n if (footNoteCollec[i].revisions !== undefined) {\n var j = 0;\n while (j < footNoteCollec[i].revisions.length) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(footNoteCollec[i].revisions[j]);\n j++;\n }\n }\n var marker = footNoteCollec[i].bodyWidget.childWidgets[0].childWidgets[0].children[0];\n if (!isNullOrUndefined(marker) && marker instanceof FootnoteEndnoteMarkerElementBox) {\n marker.text = text;\n marker.width = footNoteCollec[i].bodyWidget.footNoteReference.width;\n if (marker.revisions != undefined) {\n var j = 0;\n while (j < marker.revisions.length) {\n this.owner.trackChangesPane.updateCurrentTrackChanges(marker.revisions[j]);\n j++;\n }\n }\n }\n }\n }\n };\n Editor.prototype.setCharFormatForCollaborativeEditing = function (insertFormat) {\n if (!isNullOrUndefined(this.editorHistory) && !isNullOrUndefined(this.editorHistory.currentBaseHistoryInfo) && this.owner.enableCollaborativeEditing) {\n var characterFormat = {};\n HelperMethods.writeCharacterFormat(characterFormat, true, insertFormat, undefined, true);\n this.editorHistory.currentBaseHistoryInfo.type = \"CharacterFormat\";\n this.editorHistory.currentBaseHistoryInfo.format = JSON.stringify(characterFormat);\n }\n };\n /**\n * @private\n */\n Editor.prototype.clear = function () {\n if (this.pageRefFields) {\n this.pageRefFields = {};\n }\n };\n return Editor;\n}());\nexport { Editor };\n","import { Dictionary } from '../../base/dictionary';\nimport { TextPosition } from '../selection/selection-helper';\nimport { CONTROL_CHARACTERS } from '../../index';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BaseHistoryInfo } from './base-history-info';\nimport { ModifiedParagraphFormat, ModifiedLevel, RowHistoryFormat, TableHistoryInfo } from './history-helper';\nimport { HistoryInfo } from './history-info';\nimport { WParagraphFormat } from '../format/paragraph-format';\nimport { HelperMethods } from '../editor/editor-helper';\n/**\n * `EditorHistory` Module class is used to handle history preservation\n */\nvar EditorHistory = /** @class */ (function () {\n /**\n * @param {DocumentEditor} node - Specified the document editor.\n * @private\n */\n function EditorHistory(node) {\n //Fields\n this.undoStackIn = [];\n this.redoStackIn = [];\n /**\n * @private\n */\n this.historyInfoStack = [];\n this.isUndoGroupingEnded = true;\n /**\n * @private\n */\n this.isUndoing = false;\n /**\n * @private\n */\n this.isRedoing = false;\n this.owner = node;\n this.documentHelper = node.documentHelper;\n this.modifiedParaFormats = new Dictionary();\n this.undoLimitIn = 500;\n this.redoLimitIn = 500;\n }\n Object.defineProperty(EditorHistory.prototype, \"currentHistoryInfo\", {\n /**\n * @private\n * @returns {HistoryInfo} - Returns the history info.\n */\n get: function () {\n return this.historyInfoStack && this.historyInfoStack.length > 0 ?\n this.historyInfoStack[this.historyInfoStack.length - 1] : undefined;\n },\n /**\n * @private\n * @param {HistoryInfo} value - Specified the value.\n */\n set: function (value) {\n if (value instanceof HistoryInfo) {\n this.historyInfoStack.push(value);\n }\n else {\n this.historyInfoStack.pop();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoStack\", {\n //Properties\n /**\n * gets undo stack\n *\n * @private\n * @returns {BaseHistoryInfo[]} - Returns the undo stack.\n */\n get: function () {\n return this.undoStackIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoStack\", {\n /**\n * gets redo stack\n *\n * @private\n * @returns {BaseHistoryInfo[]} - Returns the redo stack.\n */\n get: function () {\n return this.redoStackIn;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"undoLimit\", {\n /**\n * Gets the limit of undo operations can be done.\n *\n * @aspType int\n * @returns {number} - Returns the redo limit\n */\n get: function () {\n return isNullOrUndefined(this.undoLimitIn) ? 0 : this.undoLimitIn;\n },\n /**\n * Sets the limit of undo operations can be done.\n *\n * @aspType int\n * @param {number} value - Specifies the value to set undo limit.\n */\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.undoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"redoLimit\", {\n /**\n * Gets the limit of redo operations can be done.\n *\n * @aspType int\n * @returns {number} - Returns the redo limit.\n */\n get: function () {\n return isNullOrUndefined(this.redoLimitIn) ? 0 : this.redoLimitIn;\n },\n /**\n * Sets the limit of redo operations can be done.\n *\n * @aspType int\n * @param {number} value Specifies the value to set redo limit.\n */\n set: function (value) {\n if (value < 0) {\n throw new Error('The limit should be greater than or equal to zero.');\n }\n this.redoLimitIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(EditorHistory.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n EditorHistory.prototype.getModuleName = function () {\n return 'EditorHistory';\n };\n /**\n * Determines whether the undo operation can be done.\n *\n * @returns {boolean} - Returns true if can undo; Otherwise, false.\n */\n EditorHistory.prototype.canUndo = function () {\n return !isNullOrUndefined(this.undoStack) && this.undoStack.length > 0;\n };\n /**\n * Determines whether the redo operation can be done.\n *\n * @returns {boolean} - Returns true if can redo; Otherwise, false.\n */\n EditorHistory.prototype.canRedo = function () {\n return !isNullOrUndefined(this.redoStack) && this.redoStack.length > 0;\n };\n //EditorHistory Initialization\n /**\n * initialize EditorHistory\n *\n * @private\n * @param {Action} action - Specifies the action.\n * @returns {void}\n */\n EditorHistory.prototype.initializeHistory = function (action) {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n this.currentBaseHistoryInfo.destroy();\n }\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.currentBaseHistoryInfo.action = action;\n if (action !== 'ModifyStyle') {\n this.currentBaseHistoryInfo.updateSelection();\n }\n };\n /**\n * Initialize complex history\n *\n * @private\n * @param {Selection} selection - Specifies the selection.\n * @param {Action} action - Specifies the action.\n * @returns {void}\n */\n EditorHistory.prototype.initComplexHistory = function (selection, action) {\n this.currentHistoryInfo = new HistoryInfo(selection.owner, !isNullOrUndefined(this.currentHistoryInfo));\n this.currentHistoryInfo.action = action;\n switch (action) {\n case 'PageBreak':\n this.currentHistoryInfo.insertedText = CONTROL_CHARACTERS.PageBreak;\n this.currentHistoryInfo.insertPosition = selection.startOffset;\n break;\n case 'ColumnBreak':\n this.currentHistoryInfo.insertedText = CONTROL_CHARACTERS.ColumnBreak;\n this.currentHistoryInfo.insertPosition = selection.startOffset;\n break;\n }\n this.currentHistoryInfo.updateSelection();\n };\n /**\n * @private\n * @param {Point} startingPoint - Specifies the start point.\n * @param {TableResizer} tableResize - Spcifies the table resizer.\n * @returns {void}\n */\n EditorHistory.prototype.initResizingHistory = function (startingPoint, tableResize) {\n if (tableResize.resizeNode === 1) {\n this.initializeHistory('RowResizing');\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n /* eslint-disable-next-line max-len */\n tableResize.currentResizingTable = tableResize.currentResizingTable.combineWidget(this.viewer);\n this.currentBaseHistoryInfo.modifiedProperties.push(new RowHistoryFormat(tableResize.currentResizingTable, startingPoint, tableResize.currentResizingTable.childWidgets[tableResize.resizerPosition].rowFormat, this.owner));\n this.documentHelper.layout.reLayoutTable(tableResize.currentResizingTable);\n }\n }\n else {\n this.initializeHistory('CellResizing');\n if (this.currentBaseHistoryInfo) {\n tableResize.currentResizingTable = tableResize.currentResizingTable.combineWidget(this.viewer);\n var tableHistoryInfo = new TableHistoryInfo(tableResize.currentResizingTable, this.owner);\n tableHistoryInfo.startingPoint = startingPoint;\n this.currentBaseHistoryInfo.modifiedProperties.push(tableHistoryInfo);\n this.documentHelper.layout.reLayoutTable(tableResize.currentResizingTable);\n }\n }\n };\n /**\n * Starts a new undo able action.\n * > All editing and formatting changes made between `beginUndoAction` and `endUndoAction` will be grouped together as a single undo able action.\n *\n * @returns {void}\n */\n EditorHistory.prototype.beginUndoAction = function () {\n if (this.isUndoGroupingEnded) {\n this.owner.editorModule.initComplexHistory('Grouping');\n this.isUndoGroupingEnded = false;\n this.clearRedoStack();\n }\n };\n /**\n * Ends the current undo able action.\n * > All editing and formatting changes made between `beginUndoAction` and `endUndoAction` will be grouped together as a single undo able action.\n *\n * @returns {void}\n */\n EditorHistory.prototype.endUndoAction = function () {\n if (!this.isUndoGroupingEnded) {\n this.updateComplexHistory();\n this.isUndoGroupingEnded = true;\n }\n };\n /**\n * Update resizing history\n *\n * @private\n * @param {Point} point - Specifies the point.\n * @param {TableResizer} tableResize - Specifies the table resizer.\n * @returns {void}\n */\n EditorHistory.prototype.updateResizingHistory = function (point, tableResize) {\n if (tableResize.resizeNode === 1) {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var rowHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (rowHistoryFormat.startingPoint.y === point.y) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n rowHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.y - rowHistoryFormat.startingPoint.y);\n this.recordChanges(this.currentBaseHistoryInfo);\n this.owner.fireContentChange();\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n else {\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n var cellHistoryFormat = this.currentBaseHistoryInfo.modifiedProperties[0];\n if (cellHistoryFormat.startingPoint.x === point.x) {\n this.currentBaseHistoryInfo.modifiedProperties.length = 0;\n }\n else {\n cellHistoryFormat.displacement = HelperMethods.convertPixelToPoint(point.x - cellHistoryFormat.startingPoint.x);\n cellHistoryFormat.endIndex = tableResize.getCellReSizerPosition(point);\n this.owner.editorHistoryModule.recordChanges(this.currentBaseHistoryInfo);\n this.owner.fireContentChange();\n this.currentBaseHistoryInfo = undefined;\n }\n }\n }\n };\n /**\n * Record the changes\n *\n * @private\n * @param {BaseHistoryInfo} baseHistoryInfo - Specified the base history info.\n * @returns {void}\n */\n EditorHistory.prototype.recordChanges = function (baseHistoryInfo) {\n if (!this.owner.enableHistoryMode) {\n return;\n }\n if (this.isUndoing) {\n if (isNullOrUndefined(this.redoStack)) {\n this.redoStackIn = [];\n }\n if (this.redoStack.length === this.redoLimit && this.redoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.redoStackIn.splice(0, count);\n }\n if (this.redoStack.length < this.redoLimit) {\n this.redoStack.push(baseHistoryInfo);\n }\n }\n else {\n if (!this.isRedoing) {\n this.clearRedoStack();\n }\n if (isNullOrUndefined(this.undoStack)) {\n this.undoStackIn = [];\n }\n if (this.undoStack.length === this.undoLimit && this.undoLimit > 0) {\n var count = this.undoLimit > 20 ? 10 : 1;\n this.undoStackIn.splice(0, count);\n }\n if (this.undoStack.length < this.undoLimit) {\n this.undoStackIn.push(baseHistoryInfo);\n }\n }\n this.lastOperation = baseHistoryInfo;\n };\n /**\n * update EditorHistory\n *\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.updateHistory = function () {\n if (this.documentHelper.owner.enableHistoryMode && !isNullOrUndefined(this.currentBaseHistoryInfo)) {\n //Updates the current end position\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)\n && isNullOrUndefined(this.currentBaseHistoryInfo.endPosition)) {\n this.currentBaseHistoryInfo.endPosition = this.currentBaseHistoryInfo.insertPosition;\n }\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n this.currentHistoryInfo.addModifiedAction(this.currentBaseHistoryInfo);\n }\n else {\n this.recordChanges(this.currentBaseHistoryInfo);\n }\n this.currentBaseHistoryInfo = undefined;\n }\n };\n /**\n * @private\n * @returns {boolean} -Returns isHandleComplexHistory\n */\n EditorHistory.prototype.isHandledComplexHistory = function () {\n var isHandledComplexHistory = false;\n if (!(this.isUndoing || this.isRedoing)) {\n if (this.owner.editorModule.removedBookmarkElements.length > 0\n && this.owner.editorModule.insertRemoveBookMarkElements(isHandledComplexHistory)) {\n isHandledComplexHistory = true;\n }\n if (this.owner.editorModule.removedEditRangeEndElements.length > 0\n && this.owner.editorModule.insertRemovedEditRangeEndElements(isHandledComplexHistory)) {\n isHandledComplexHistory = true;\n }\n if (this.owner.editorModule.removedEditRangeStartElements.length > 0\n && this.owner.editorModule.insertRemovedEditRangeStartElements(isHandledComplexHistory)) {\n isHandledComplexHistory = true;\n }\n }\n if (this.documentHelper.owner.enableHistoryMode && !isNullOrUndefined(this.currentHistoryInfo)) {\n if (this.currentHistoryInfo.action !== 'Grouping') {\n this.updateHistory();\n isHandledComplexHistory = true;\n }\n }\n else if (this.owner.editorModule.isHandledComplex) {\n isHandledComplexHistory = true;\n }\n return isHandledComplexHistory;\n };\n /**\n * Update complex history\n *\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.updateComplexHistory = function () {\n var selection = this.documentHelper.selection;\n if (!isNullOrUndefined(this.currentHistoryInfo) && this.currentHistoryInfo.hasAction) {\n if (this.currentHistoryInfo.action === 'AutoFormatHyperlink' || this.currentHistoryInfo.action === 'SkipCommentInline'\n || this.currentHistoryInfo.action === 'DeleteCommentInline' || this.currentHistoryInfo.action === 'RemoveComment') {\n // this.reLayoutParagraph(startPosition.paragraph, 0);\n if (selection.owner.editorHistoryModule.isUndoing) {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.selectionStart);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.selectionEnd);\n }\n else {\n this.owner.editorModule.setPositionForCurrentIndex(selection.start, this.currentHistoryInfo.endPosition);\n this.owner.editorModule.setPositionForCurrentIndex(selection.end, this.currentHistoryInfo.endPosition);\n }\n }\n if (this.currentHistoryInfo.action === 'InsertHyperlink') {\n var startPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(startPosition, this.currentHistoryInfo.insertPosition);\n var endPosition = new TextPosition(selection.owner);\n this.owner.editorModule.setPositionForCurrentIndex(endPosition, this.currentHistoryInfo.endPosition);\n this.documentHelper.layout.reLayoutParagraph(startPosition.paragraph, 0, 0);\n if (endPosition.paragraph !== startPosition.paragraph) {\n this.documentHelper.layout.reLayoutParagraph(endPosition.paragraph, 0, 0);\n }\n }\n if (this.currentHistoryInfo.action === 'ReplaceAll') {\n this.documentHelper.contentControlCollection = [];\n this.owner.editorModule.layoutWholeDocument();\n }\n else if (selection.owner.isShiftingEnabled) {\n this.documentHelper.layout.shiftLayoutedItems(false);\n if (this.owner.enableHeaderAndFooter) {\n this.owner.editorModule.updateHeaderFooterWidget();\n }\n this.documentHelper.removeEmptyPages();\n }\n }\n if (this.owner.showRevisions) {\n this.owner.trackChangesPane.updateTrackChanges();\n }\n selection.owner.isShiftingEnabled = false;\n selection.owner.isLayoutEnabled = true;\n // // selection.addMultipleSelectionRanges();\n if (!isNullOrUndefined(this.currentHistoryInfo) && this.currentHistoryInfo.action === 'ApplyStyle') {\n this.owner.editorModule.getOffsetValue(selection);\n }\n else {\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n }\n selection.upDownSelectionLength = selection.end.location.x;\n this.documentHelper.isScrollHandler = true;\n this.viewer.updateScrollBars();\n selection.fireSelectionChanged(true);\n this.documentHelper.isScrollHandler = false;\n if (this.owner.enableAutoFocus) {\n this.documentHelper.updateFocus();\n }\n this.updateComplexHistoryInternal();\n if (!this.owner.editorModule.isInsertingTOC) {\n this.owner.editorModule.fireContentChange();\n }\n };\n /**\n * @private\n *\n * @returns {void}\n */\n EditorHistory.prototype.updateComplexHistoryInternal = function () {\n if (!isNullOrUndefined(this.currentHistoryInfo)) {\n //Updates the current end position\n if (isNullOrUndefined(this.currentHistoryInfo.endPosition)) {\n this.currentHistoryInfo.endPosition = this.currentHistoryInfo.insertPosition;\n }\n if (this.historyInfoStack.length > 1) {\n var historyInfo = this.historyInfoStack[this.historyInfoStack.length - 2];\n historyInfo.addModifiedAction(this.currentHistoryInfo);\n }\n else {\n this.recordChanges(this.currentHistoryInfo);\n }\n this.currentHistoryInfo = undefined;\n }\n };\n //List history preservation undo API\n /**\n * update list changes for history preservation\n *\n * @private\n * @param {WAbstractList} currentAbstractList - Specfies the abstractlist.\n * @param {WList} list - Specifies the list.\n * @returns {Dictionary} - Returns the modified action.\n */\n EditorHistory.prototype.updateListChangesInHistory = function (currentAbstractList, list) {\n this.currentBaseHistoryInfo = new BaseHistoryInfo(this.documentHelper.owner);\n this.currentBaseHistoryInfo.action = 'List';\n this.currentBaseHistoryInfo.updateSelection();\n var collection = new Dictionary();\n for (var i = 0; i < currentAbstractList.levels.length; i++) {\n var levels = this.documentHelper.getAbstractListById(list.abstractListId).levels[parseInt(i.toString(), 10)];\n this.currentBaseHistoryInfo.addModifiedPropertiesForList(levels);\n var modifiedLevel = new ModifiedLevel(levels, currentAbstractList.levels[parseInt(i.toString(), 10)]);\n if (!isNullOrUndefined(levels)) {\n this.documentHelper.owner.editorModule.copyListLevel(levels, currentAbstractList.levels[parseInt(i.toString(), 10)]);\n }\n collection.add(i, modifiedLevel);\n }\n return collection;\n };\n /**\n * Apply list changes\n *\n * @private\n * @param {Selection} selection - Specifies the selection.\n * @param {Dictionary} modifiedLevelsInternal - Specifies the modified levels.\n * @returns {void}\n */\n EditorHistory.prototype.applyListChanges = function (selection, modifiedLevelsInternal) {\n if (isNullOrUndefined(this.modifiedParaFormats)) {\n this.modifiedParaFormats = new Dictionary();\n }\n var collection = [];\n for (var i = 0; i < this.documentHelper.listParagraphs.length; i++) {\n var paragraph = this.documentHelper.listParagraphs[parseInt(i.toString(), 10)];\n var paraFormat = paragraph.paragraphFormat;\n var currentList = this.documentHelper.getListById(paraFormat.listFormat.listId);\n var listLevel = this.documentHelper.layout.getListLevel(currentList, paraFormat.listFormat.listLevelNumber);\n if (modifiedLevelsInternal.containsKey(paraFormat.listFormat.listLevelNumber)\n && modifiedLevelsInternal.get(paraFormat.listFormat.listLevelNumber).ownerListLevel === listLevel) {\n var modifiedFormat = new WParagraphFormat(null);\n modifiedFormat.leftIndent = paraFormat.leftIndent;\n modifiedFormat.firstLineIndent = paraFormat.firstLineIndent;\n var modified = new ModifiedParagraphFormat(paraFormat, modifiedFormat);\n collection.push(modified);\n this.owner.editorModule.copyFromListLevelParagraphFormat(paraFormat, listLevel.paragraphFormat);\n }\n }\n this.modifiedParaFormats.add(this.currentBaseHistoryInfo, collection);\n };\n /**\n * Update list changes\n *\n * @private\n * @param {Dictionary} modifiedCollection - Specifies the modified colection.\n * @returns {void }\n */\n EditorHistory.prototype.updateListChanges = function (modifiedCollection) {\n this.documentHelper.owner.isLayoutEnabled = false;\n this.owner.editorModule.updateListParagraphs();\n for (var i = 0; i < modifiedCollection.keys.length; i++) {\n var levelNumber = modifiedCollection.keys[parseInt(i.toString(), 10)];\n var modifiedLevel = modifiedCollection.get(levelNumber);\n if (!isNullOrUndefined(this.currentBaseHistoryInfo)) {\n modifiedLevel = this.currentBaseHistoryInfo.addModifiedPropertiesForList(modifiedLevel.ownerListLevel);\n }\n this.owner.editorModule.copyListLevel(modifiedLevel.ownerListLevel, modifiedLevel.modifiedListLevel);\n }\n this.documentHelper.owner.isLayoutEnabled = true;\n this.documentHelper.renderedLists.clear();\n this.documentHelper.renderedLevelOverrides = [];\n this.owner.editorModule.layoutWholeDocument();\n var selection = this.documentHelper.selection;\n selection.start.updatePhysicalPosition(true);\n if (selection.isEmpty) {\n selection.end.setPositionInternal(selection.start);\n }\n else {\n selection.end.updatePhysicalPosition(true);\n }\n selection.upDownSelectionLength = selection.end.location.x;\n selection.fireSelectionChanged(false);\n this.updateHistory();\n };\n /**\n * Reverts the last editing action.\n *\n * @returns {void}\n */\n EditorHistory.prototype.undo = function () {\n if ((this.owner.isReadOnlyMode && !this.owner.documentHelper.isCommentOnlyMode &&\n (this.owner.documentHelper.protectionType !== 'FormFieldsOnly')) ||\n !this.canUndo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.undoStack.pop();\n this.isUndoing = true;\n historyInfo.revert();\n this.isUndoing = false;\n this.owner.selection.contentControleditRegionHighlighters.clear();\n this.owner.selection.onHighlightContentControl();\n this.owner.selectionModule.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * Performs the last reverted action.\n *\n * @returns {void}\n */\n EditorHistory.prototype.redo = function () {\n if ((this.owner.isReadOnlyMode && !this.owner.documentHelper.isCommentOnlyMode &&\n (this.owner.documentHelper.protectionType !== 'FormFieldsOnly'))\n || !this.canRedo() || !this.owner.enableHistoryMode) {\n return;\n }\n //this.owner.ClearTextSearchResults();\n var historyInfo = this.redoStack.pop();\n if (historyInfo.action === 'BordersAndShading') {\n this.owner.editorModule.isBordersAndShadingDialog = true;\n }\n this.isRedoing = true;\n historyInfo.revert();\n this.isRedoing = false;\n this.owner.selection.contentControleditRegionHighlighters.clear();\n this.owner.selection.onHighlightContentControl();\n this.owner.selectionModule.checkForCursorVisibility();\n this.owner.editorModule.isBordersAndShadingDialog = false;\n };\n /**\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.destroy = function () {\n this.clearHistory();\n this.undoStackIn = undefined;\n this.redoStackIn = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n EditorHistory.prototype.clearHistory = function () {\n this.clearUndoStack();\n this.clearRedoStack();\n };\n EditorHistory.prototype.clearUndoStack = function () {\n if (this.canUndo()) {\n while (this.undoStack.length > 0) {\n var historyInfo = this.undoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n EditorHistory.prototype.clearRedoStack = function () {\n if (this.canRedo()) {\n while (this.redoStack.length > 0) {\n var historyInfo = this.redoStack.pop();\n historyInfo.destroy();\n historyInfo = undefined;\n }\n }\n };\n return EditorHistory;\n}());\nexport { EditorHistory };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { LineWidget, TextElementBox, ParagraphWidget, ListTextElementBox, FieldElementBox, ShapeElementBox, BookmarkElementBox, CommentCharacterElementBox } from '../viewer/page';\nimport { searchResultsChangeEvent } from '../../base/index';\n/**\n * @private\n */\nvar TextSearch = /** @class */ (function () {\n function TextSearch(owner) {\n this.wordBefore = '\\\\b';\n this.wordAfter = '\\\\b';\n this.owner = owner;\n this.documentHelper = this.owner.documentHelper;\n }\n TextSearch.prototype.find = function (pattern, findOption) {\n return this.findNext(pattern, findOption, '0;0;0');\n };\n TextSearch.prototype.findNext = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, true, findOption, hierarchicalPosition);\n return results.length > 0, results.currentSearchResult;\n };\n TextSearch.prototype.stringToRegex = function (textToFind, option) {\n if (textToFind.indexOf('\\\\') > -1) {\n textToFind = textToFind.split('\\\\').join('\\\\\\\\');\n }\n if (textToFind.indexOf('(') > -1 || textToFind.indexOf(')') > -1 || textToFind.indexOf('.') > -1 || textToFind.indexOf('[') > -1\n || textToFind.indexOf(']') > -1 || textToFind.indexOf('$') > -1 || textToFind.indexOf('{') > -1\n || textToFind.indexOf('}') > -1 || textToFind.indexOf('*') > -1 || textToFind.indexOf('|') > -1\n || textToFind.indexOf('^') > -1 || textToFind.indexOf('?') > -1 || textToFind.indexOf('+') > -1) {\n var text = '';\n for (var i = 0; i < textToFind.length; i++) {\n if (textToFind[parseInt(i.toString(), 10)] === '(' || textToFind[parseInt(i.toString(), 10)] === ')' || textToFind[parseInt(i.toString(), 10)] === '.' || textToFind[parseInt(i.toString(), 10)] === '['\n || textToFind[parseInt(i.toString(), 10)] === ']' || textToFind[parseInt(i.toString(), 10)] === '$' || textToFind[parseInt(i.toString(), 10)] === '{' || textToFind[parseInt(i.toString(), 10)] === '}'\n || textToFind[parseInt(i.toString(), 10)] === '*' || textToFind[parseInt(i.toString(), 10)] === '|' || textToFind[parseInt(i.toString(), 10)] === '^' || textToFind[parseInt(i.toString(), 10)] === '?'\n || textToFind[parseInt(i.toString(), 10)] === '+') {\n text += '\\\\' + textToFind[parseInt(i.toString(), 10)];\n }\n else {\n text += textToFind[parseInt(i.toString(), 10)];\n }\n }\n textToFind = text;\n }\n if (option === 'WholeWord' || option === 'CaseSensitiveWholeWord') {\n textToFind = this.wordBefore + textToFind + this.wordAfter;\n }\n return RegExp(textToFind, (option === 'CaseSensitive' || option === 'CaseSensitiveWholeWord') ? 'g' : 'ig');\n };\n TextSearch.prototype.isPatternEmpty = function (pattern) {\n var wordEmpty = this.wordBefore + this.wordAfter;\n var patternRegExp = pattern.toString();\n return (patternRegExp.length === 0 || patternRegExp === wordEmpty);\n };\n TextSearch.prototype.findAll = function (pattern, findOption, hierarchicalPosition) {\n if (typeof pattern === 'string') {\n pattern = this.stringToRegex(pattern, findOption);\n }\n if (hierarchicalPosition === undefined) {\n hierarchicalPosition = '0;0;0';\n }\n this.owner.searchModule.textSearchResults.clearResults();\n var results = this.owner.searchModule.textSearchResults;\n this.findDocument(results, pattern, false, findOption, hierarchicalPosition);\n if (results.length > 0 && results.currentIndex < 0) {\n results.currentIndex = 0;\n }\n if (!isNullOrUndefined(results.currentSearchResult)) {\n var eventArgs = { source: this.documentHelper.owner };\n this.documentHelper.owner.trigger(searchResultsChangeEvent, eventArgs);\n return results;\n }\n return undefined;\n };\n TextSearch.prototype.getElementInfo = function (inlineElement, indexInInline, includeNextLine, pattern, findOption, isFirstMatch, results, selectionEnd, isSpellCheck) {\n var inlines = inlineElement;\n var stringBuilder = '';\n var spans = new Dictionary();\n // eslint-disable no-constant-condition\n var previousElementCount = 0;\n do {\n if (inlineElement instanceof TextElementBox && (!isNullOrUndefined(inlineElement.text) && inlineElement.text !== '')) {\n spans.add(inlineElement, isSpellCheck ? stringBuilder.length + previousElementCount : stringBuilder.length);\n previousElementCount = 0;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (inlineElement === inlines) {\n stringBuilder = stringBuilder + (inlineElement.text.substring(indexInInline));\n }\n else {\n stringBuilder = stringBuilder + (inlineElement.text);\n }\n }\n else if (inlineElement instanceof FieldElementBox) {\n var fieldBegin = inlineElement;\n if (!isNullOrUndefined(fieldBegin.fieldEnd)) {\n /* eslint-disable-next-line max-len */\n inlineElement = isNullOrUndefined(fieldBegin.fieldSeparator) ? fieldBegin.fieldEnd : fieldBegin.fieldSeparator;\n }\n }\n else if (inlineElement instanceof ShapeElementBox && !isNullOrUndefined(inlineElement.textFrame)\n && inlineElement.textFrame.childWidgets.length > 0) {\n this.findInlineText(inlineElement.textFrame, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n if (!(inlineElement instanceof TextElementBox)) {\n previousElementCount += inlineElement.length;\n }\n if (!isNullOrUndefined(inlineElement) && isNullOrUndefined(inlineElement.nextNode)) {\n var splittedParagraph = inlineElement.paragraph.nextSplitWidget;\n if (!isSpellCheck && !isNullOrUndefined(splittedParagraph) && splittedParagraph !== inlineElement.paragraph\n && splittedParagraph.childWidgets.length > 0 && splittedParagraph.childWidgets[0] instanceof LineWidget\n && splittedParagraph.childWidgets[0].children.length > 0) {\n inlineElement = splittedParagraph.childWidgets[0].children[0];\n continue;\n }\n else {\n break;\n }\n }\n if (!isNullOrUndefined(inlineElement)) {\n if ((!isNullOrUndefined(includeNextLine) && !includeNextLine)) {\n var elementBoxes = inlineElement.line.children;\n var length_1 = inlineElement.line.children.length;\n if (elementBoxes.indexOf(inlineElement) < length_1 - 1) {\n inlineElement = inlineElement.nextNode;\n }\n else {\n inlineElement = undefined;\n break;\n }\n }\n else {\n inlineElement = inlineElement.nextNode;\n }\n }\n // eslint-disable-next-line no-constant-condition\n } while (true);\n var text = stringBuilder.toString();\n return { elementsWithOffset: spans, fullText: text };\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.updateMatchedTextLocation = function (matches, results, textInfo, indexInInline, inlines, isFirstMatch, selectionEnd, startPosition) {\n for (var i = 0; i < matches.length; i++) {\n var match = matches[parseInt(i.toString(), 10)];\n var isMatched = void 0;\n if (!(isNullOrUndefined(startPosition)) && match.index < startPosition) {\n continue;\n }\n var result = results.addResult();\n var spanKeys = textInfo.keys;\n var isContainField = false;\n for (var j = 0; j < spanKeys.length; j++) {\n var span = spanKeys[parseInt(j.toString(), 10)];\n var startIndex = textInfo.get(span);\n var spanLength = span.length;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n spanLength -= indexInInline;\n }\n if (isNullOrUndefined(result.start) && match.index < startIndex + spanLength) {\n var index = match.index - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n var offset = (span.line).getOffset(span, index);\n result.start = this.getTextPosition(span.line, offset.toString());\n result.start.location = this.owner.selectionModule.getPhysicalPositionInternal(span.line, offset, true);\n result.start.setPositionParagraph(span.line, offset);\n }\n if (match.index + match[0].length <= startIndex + spanLength) {\n var index = (match.index + match[0].length) - startIndex;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n if (span === inlines) {\n index += indexInInline;\n }\n if (!(!isNullOrUndefined(this.owner.searchModule.textSearchResults) && this.owner.searchModule.textSearchResults.length !== 0) && span.text.charAt(span.text.length - 1) !== ' ' && !isNullOrUndefined(span.nextElement) && (span.nextElement instanceof BookmarkElementBox || span.nextElement instanceof CommentCharacterElementBox)) {\n var element = span.nextElement;\n while (element) {\n element = element.nextElement;\n if (element instanceof TextElementBox) {\n break;\n }\n }\n if (element && element instanceof TextElementBox && element.text.charAt(0) !== ' ') {\n isContainField = true;\n continue;\n }\n }\n if (!(!isNullOrUndefined(this.owner.searchModule.textSearchResults) && this.owner.searchModule.textSearchResults.length !== 0) && span.previousElement && (span.previousElement instanceof BookmarkElementBox || span.previousElement instanceof CommentCharacterElementBox)) {\n isContainField = true;\n }\n var offset = 0;\n if (isContainField) {\n offset = (span.line).getOffset(span, 0) + span.length;\n }\n else {\n offset = (span.line).getOffset(span, index);\n }\n result.end = this.getTextPosition(span.line, offset.toString());\n result.end.location = this.owner.selectionModule.getPhysicalPositionInternal(span.line, offset, true);\n result.end.setPositionParagraph(span.line, offset);\n isMatched = true;\n break;\n }\n }\n if (isFirstMatch) {\n results.currentIndex = 0;\n break;\n }\n else if (results.currentIndex < 0 && !isNullOrUndefined(selectionEnd) && (selectionEnd.isExistBefore(result.start) ||\n selectionEnd.isAtSamePosition(result.start))) {\n results.currentIndex = results.indexOf(result);\n }\n if (!isNullOrUndefined(startPosition) && isMatched) {\n break;\n }\n }\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.findDocument = function (results, pattern, isFirstMatch, findOption, hierachicalPosition) {\n if (this.isPatternEmpty(pattern)) {\n return;\n }\n if (findOption === undefined) {\n findOption = 'None';\n }\n var inline = undefined;\n var selectionEnd = undefined;\n if (hierachicalPosition !== undefined) {\n selectionEnd = this.owner.selectionModule.end;\n }\n if (hierachicalPosition !== undefined && isFirstMatch && selectionEnd !== undefined && selectionEnd.paragraph !== undefined) {\n if (selectionEnd.paragraph instanceof ParagraphWidget) {\n var indexInInline = 0;\n // IndexInInline Handled specifically for simple find operation to start from starting point\n /* eslint-disable-next-line max-len */\n var inlineElement = selectionEnd.currentWidget.getInline(this.owner.selectionModule.start.offset, indexInInline);\n inline = inlineElement.element;\n indexInInline = inlineElement.index;\n if (!isNullOrUndefined(inline)) {\n var nextParagraphWidget = undefined;\n nextParagraphWidget = this.findInline(inline, pattern, findOption, indexInInline, isFirstMatch, results, selectionEnd);\n while (results.length === 0 && !isNullOrUndefined(nextParagraphWidget)) {\n while (!isNullOrUndefined(nextParagraphWidget) && nextParagraphWidget.childWidgets.length === 0) {\n /* eslint-disable-next-line max-len */\n nextParagraphWidget = this.owner.selectionModule.getNextParagraph(nextParagraphWidget.containerWidget);\n }\n if (isNullOrUndefined(nextParagraphWidget)) {\n break;\n }\n var lineWidget = nextParagraphWidget.childWidgets[0];\n if (lineWidget.children[0] instanceof ListTextElementBox) {\n inline = (lineWidget.children[2] instanceof TextElementBox) ? lineWidget.children[2] : undefined;\n }\n else {\n inline = lineWidget.children[0];\n }\n if (isNullOrUndefined(inline)) {\n break;\n }\n nextParagraphWidget = this.findInline(inline, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n }\n if (results.length > 0) {\n return;\n }\n }\n }\n }\n var section;\n section = this.documentHelper.pages[0].bodyWidgets[0];\n while (!isNullOrUndefined(section) && section.childWidgets.length === 0) {\n section = section.nextWidget;\n }\n if (isNullOrUndefined(section) || section.childWidgets.length === 0) {\n return;\n }\n this.findInlineText(section, pattern, findOption, isFirstMatch, results, selectionEnd);\n var headerFootersColletion = this.documentHelper.headersFooters;\n for (var i = 0; i < headerFootersColletion.length; i++) {\n var headerFooters = headerFootersColletion[parseInt(i.toString(), 10)];\n if (headerFooters) {\n for (var index in headerFooters) {\n if (Object.prototype.hasOwnProperty.call(headerFooters, index)) {\n var headerFooter = headerFooters[parseInt(index.toString(), 10)];\n if (!isNullOrUndefined(headerFooter) && !isNullOrUndefined(headerFooter.page)) {\n this.findInlineText(headerFooter, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n }\n }\n }\n // (EJ2-854069) - Added below code to add the search results of the endnote and footnote in the results.\n var endNoteCollection = this.documentHelper.endnoteCollection;\n for (var i = 0; i < endNoteCollection.length; i++) {\n var endNote = endNoteCollection[parseInt(i.toString(), 10)];\n if (endNote) {\n if (!isNullOrUndefined(endNote) && !isNullOrUndefined(endNote.bodyWidget.page)) {\n this.findInlineText(endNote.bodyWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n }\n var footNoteCollection = this.documentHelper.footnoteCollection;\n for (var i = 0; i < footNoteCollection.length; i++) {\n var footNote = footNoteCollection[parseInt(i.toString(), 10)];\n if (footNote) {\n if (!isNullOrUndefined(footNote) && !isNullOrUndefined(footNote.bodyWidget.page)) {\n this.findInlineText(footNote.bodyWidget, pattern, findOption, isFirstMatch, results, selectionEnd);\n }\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.findInlineText = function (section, pattern, findOption, isFirstMatch, results, selectionEnd) {\n var paragraphWidget = this.owner.documentHelper.getFirstParagraphBlock(section.childWidgets[0]);\n /* eslint-disable-next-line max-len */\n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length === 1 && paragraphWidget.childWidgets[0].children.length === 0) {\n paragraphWidget = this.owner.selectionModule.getNextParagraphBlock(paragraphWidget);\n }\n while (!isNullOrUndefined(paragraphWidget) && paragraphWidget.childWidgets.length > 0) {\n var inlineElement = paragraphWidget.childWidgets[0];\n var inlineEle = inlineElement.children[0];\n if (isNullOrUndefined(inlineEle)) {\n break;\n }\n this.findInline(inlineEle, pattern, findOption, 0, isFirstMatch, results, selectionEnd);\n paragraphWidget = this.owner.selectionModule.getNextParagraphBlock(paragraphWidget);\n /* eslint-disable-next-line max-len */\n while (!isNullOrUndefined(paragraphWidget) && (((paragraphWidget.childWidgets.length === 1) && paragraphWidget.childWidgets[0].children.length === 0) || !isNullOrUndefined(paragraphWidget.previousSplitWidget))) {\n paragraphWidget = this.owner.selectionModule.getNextParagraphBlock(paragraphWidget);\n }\n }\n if (isFirstMatch && !isNullOrUndefined(results) && results.length > 0) {\n return;\n }\n };\n /* eslint-disable-next-line max-len */\n TextSearch.prototype.findInline = function (inlineElement, pattern, option, indexInInline, isFirstMatch, results, selectionEnd) {\n var inlines = inlineElement;\n var textInfo = this.getElementInfo(inlineElement, indexInInline, undefined, pattern, option, isFirstMatch, results, selectionEnd);\n var text = textInfo.fullText;\n var matches = [];\n var spans = textInfo.elementsWithOffset;\n var matchObject;\n // eslint-disable-next-line no-cond-assign\n while (!isNullOrUndefined(matchObject = pattern.exec(text))) {\n matches.push(matchObject);\n }\n this.updateMatchedTextLocation(matches, results, spans, indexInInline, inlines, isFirstMatch, selectionEnd);\n if (isFirstMatch) {\n return undefined;\n }\n /* eslint-disable-next-line max-len */\n var paragraphWidget = this.owner.selectionModule.getNextParagraphBlock(inlineElement.line.paragraph);\n return paragraphWidget;\n };\n TextSearch.prototype.getTextPosition = function (lineWidget, hierarchicalIndex) {\n var textPosition = new TextPosition(this.owner);\n var index = textPosition.getHierarchicalIndex(lineWidget, hierarchicalIndex);\n textPosition.setPositionForCurrentIndex(index);\n return textPosition;\n };\n return TextSearch;\n}());\nexport { TextSearch };\n/**\n * @private\n */\nvar SearchWidgetInfo = /** @class */ (function () {\n function SearchWidgetInfo(left, width) {\n this.leftInternal = 0;\n this.widthInternal = 0;\n this.leftInternal = left;\n this.widthInternal = width;\n }\n Object.defineProperty(SearchWidgetInfo.prototype, \"left\", {\n get: function () {\n return this.leftInternal;\n },\n set: function (value) {\n this.leftInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchWidgetInfo.prototype, \"width\", {\n get: function () {\n return this.widthInternal;\n },\n set: function (value) {\n this.widthInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n return SearchWidgetInfo;\n}());\nexport { SearchWidgetInfo };\n","/**\n * @private\n */\nvar TextSearchResult = /** @class */ (function () {\n function TextSearchResult(owner) {\n this.startIn = undefined;\n this.endIn = undefined;\n this.owner = owner;\n this.documentHelper = this.owner.documentHelper;\n }\n Object.defineProperty(TextSearchResult.prototype, \"start\", {\n get: function () {\n return this.startIn;\n },\n set: function (value) {\n this.startIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"end\", {\n get: function () {\n return this.endIn;\n },\n set: function (value) {\n this.endIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResult.prototype, \"text\", {\n get: function () {\n return this.documentHelper.selection.getTextInternal(this.start, this.end, false);\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResult.prototype.destroy = function () {\n this.start = undefined;\n this.end = undefined;\n };\n return TextSearchResult;\n}());\nexport { TextSearchResult };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextSearchResult } from './text-search-result';\n/**\n * @private\n */\nvar TextSearchResults = /** @class */ (function () {\n function TextSearchResults(owner) {\n this.currentIndex = -1;\n this.owner = owner;\n }\n Object.defineProperty(TextSearchResults.prototype, \"length\", {\n get: function () {\n if (this.innerList === undefined) {\n return 0;\n }\n return this.innerList.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextSearchResults.prototype, \"currentSearchResult\", {\n get: function () {\n if (this.innerList === undefined || this.currentIndex < 0 || this.currentIndex >= this.length) {\n return undefined;\n }\n return this.innerList[this.currentIndex];\n },\n enumerable: true,\n configurable: true\n });\n TextSearchResults.prototype.addResult = function () {\n var textSearchResult = new TextSearchResult(this.owner);\n if (isNullOrUndefined(this.innerList)) {\n this.innerList = [];\n }\n this.innerList.push(textSearchResult);\n return textSearchResult;\n };\n TextSearchResults.prototype.clearResults = function () {\n this.currentIndex = -1;\n if (!isNullOrUndefined(this.innerList)) {\n for (var i = this.innerList.length - 1; i >= 0; i--) {\n this.innerList[parseInt(i.toString(), 10)].destroy();\n this.innerList.splice(i, 1);\n }\n }\n };\n TextSearchResults.prototype.indexOf = function (result) {\n if (isNullOrUndefined(this.innerList)) {\n return -1;\n }\n return this.innerList.indexOf(result);\n };\n TextSearchResults.prototype.destroy = function () {\n if (!isNullOrUndefined(this.innerList)) {\n this.clearResults();\n }\n this.innerList = undefined;\n };\n return TextSearchResults;\n}());\nexport { TextSearchResults };\n","/**\n * Search Result info\n */\nvar SearchResults = /** @class */ (function () {\n function SearchResults(search) {\n this.searchModule = search;\n }\n Object.defineProperty(SearchResults.prototype, \"length\", {\n /**\n * Gets the length of search results.\n *\n * @aspType int\n * @returns {number} - Returns search results length.\n */\n get: function () {\n return this.searchModule.textSearchResults.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SearchResults.prototype, \"index\", {\n /**\n * Gets the index of current search result.\n *\n * @aspType int\n * @returns {number} - Returns current search result index.\n */\n get: function () {\n return this.searchModule.textSearchResults.currentIndex;\n },\n /**\n * Set the index of current search result.\n *\n * @param {number} value - Specifies the search result index.\n * @aspType int\n */\n set: function (value) {\n if (this.length === 0 || value < 0 || value > this.searchModule.textSearchResults.length - 1) {\n return;\n }\n this.searchModule.textSearchResults.currentIndex = value;\n this.navigate();\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Get start and end offset of searched text results.\n *\n * @returns {TextSearchResults[]} - Returns the text search results.\n */\n SearchResults.prototype.getTextSearchResultsOffset = function () {\n var index = [];\n var searchIndex;\n for (var i = 0; i < this.searchModule.textSearchResults.innerList.length; i++) {\n searchIndex = this.getOffset(this.searchModule.textSearchResults.innerList[parseInt(i.toString(), 10)]);\n index.push(searchIndex);\n }\n return index;\n };\n SearchResults.prototype.getOffset = function (innerList) {\n var start = innerList.start;\n var end = innerList.end;\n var blockInfo = this.searchModule.documentHelper.owner.selectionModule.getParagraphInfo(start);\n /* eslint-disable-next-line max-len */\n var startIndex = this.searchModule.documentHelper.owner.selectionModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n blockInfo = this.searchModule.documentHelper.owner.selectionModule.getParagraphInfo(end);\n /* eslint-disable-next-line max-len */\n var endIndex = this.searchModule.documentHelper.owner.selectionModule.getHierarchicalIndex(blockInfo.paragraph, blockInfo.offset.toString());\n return { 'startOffset': startIndex, 'endOffset': endIndex };\n };\n SearchResults.prototype.getModuleName = function () {\n return 'SearchResults';\n };\n /**\n * Replace text in current search result.\n *\n * @private\n * @param {string} textToReplace - text to replace\n * @returns {void}\n */\n SearchResults.prototype.replace = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceInternal(textToReplace);\n };\n /**\n * Replace all the instance of search result.\n *\n * @param {string} textToReplace text to replace\n * @returns {void}\n */\n SearchResults.prototype.replaceAll = function (textToReplace) {\n if (this.index === -1) {\n return;\n }\n this.searchModule.replaceAllInternal(textToReplace);\n };\n /**\n * @private\n * @returns {void}\n */\n SearchResults.prototype.navigate = function () {\n this.searchModule.navigate(this.searchModule.textSearchResults.currentSearchResult);\n this.searchModule.highlight(this.searchModule.textSearchResults);\n };\n /**\n * Clears all the instance of search result.\n *\n * @returns {void}\n */\n SearchResults.prototype.clear = function () {\n this.searchModule.textSearchResults.clearResults();\n this.searchModule.clearSearchHighlight();\n this.searchModule.viewer.renderVisiblePages();\n };\n return SearchResults;\n}());\nexport { SearchResults };\n","import { Dictionary } from '../../base/dictionary';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { TextPosition } from '../selection/selection-helper';\nimport { TextElementBox, FieldElementBox, HeaderFooterWidget } from '../viewer/page';\nimport { SearchWidgetInfo } from './text-search';\nimport { TextSearch } from '../search/text-search';\nimport { TextSearchResults } from '../search/text-search-results';\nimport { SearchResults } from './search-results';\nimport { searchResultsChangeEvent } from '../../base/index';\n/**\n * Search module\n */\nvar Search = /** @class */ (function () {\n function Search(owner) {\n /**\n * @private\n */\n this.searchHighlighters = undefined;\n this.owner = owner;\n this.searchHighlighters = new Dictionary();\n this.textSearch = new TextSearch(this.owner);\n this.textSearchResults = new TextSearchResults(this.owner);\n this.searchResultsInternal = new SearchResults(this);\n }\n Object.defineProperty(Search.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Search.prototype, \"searchResults\", {\n /**\n * Gets the search results object.\n *\n * @aspType SearchResults\n * @returns {SearchResults} - Returns the search results object.\n */\n get: function () {\n return this.searchResultsInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Search.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n Search.prototype.getModuleName = function () {\n return 'Search';\n };\n //#region Find & Find All\n /**\n * Finds the immediate occurrence of specified text from cursor position in the document.\n *\n * @param {string} text - Specifies text to find.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is 'None'.\n * @returns {void}\n */\n Search.prototype.find = function (text, findOptions) {\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var result = this.textSearch.find(text, findOptions);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n }\n };\n /**\n * Finds all occurrence of specified text in the document.\n *\n * @param {string} text - Specifies text to find.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is 'None'.\n * @returns {void}\n */\n Search.prototype.findAll = function (text, findOptions) {\n if (isNullOrUndefined(text || text === '')) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var results = this.textSearch.findAll(text, findOptions);\n if (!isNullOrUndefined(results) && results.length > 0) {\n this.navigate(results.innerList[results.currentIndex]);\n this.highlight(results);\n }\n };\n //#endregion\n //#region Replace and Replace All\n /**\n * Replace the searched string with specified string\n *\n * @private\n * @param {string} replaceText - Specifies text to replace.\n * @param {TextSearchResult} result - Specifies the result.\n * @param {TextSearchResults} results - Specifies the results.\n * @returns {number} - Returns replaced text count.\n */\n Search.prototype.replace = function (replaceText, result, results) {\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode\n || !this.viewer.owner.editorModule.canEditContentControl || isNullOrUndefined(results)) {\n return 0;\n }\n if (!isNullOrUndefined(this.viewer)) {\n this.clearSearchHighlight();\n }\n this.navigate(result);\n var endPosition = this.documentHelper.selection.start;\n if (this.owner.enableTrackChanges && this.documentHelper.selection.start.currentWidget) {\n var inline = undefined;\n /* eslint-disable-next-line max-len */\n var inlineElement = this.documentHelper.selection.end.currentWidget.getInline(this.owner.selectionModule.start.offset, 0);\n inline = inlineElement.element;\n if (inline.revisions.length > 0) {\n this.isRepalceTracking = true;\n }\n }\n var index = results.indexOf(result);\n if (index < 0) {\n return 0;\n }\n this.owner.editorModule.insertTextInternal(replaceText, true);\n var endTextPosition = result.end;\n var startPosition = new TextPosition(this.viewer.owner);\n if (endTextPosition.currentWidget.children.length === 0) {\n var linewidget = endTextPosition.currentWidget.paragraph.childWidgets[0];\n startPosition.setPositionParagraph(linewidget, endPosition.offset - replaceText.length);\n }\n else {\n startPosition.setPositionParagraph(endTextPosition.currentWidget, endPosition.offset - replaceText.length);\n }\n this.documentHelper.selection.selectRange(endPosition, startPosition);\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger(searchResultsChangeEvent, eventArgs);\n return 1;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n *\n * @private\n * @param {string} textToReplace - Specifies the text to replace.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is FindOption.None.\n * @returns {void}\n */\n Search.prototype.replaceInternal = function (textToReplace, findOptions) {\n if ((textToReplace === '' || isNullOrUndefined(textToReplace))) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n var textToFind = this.textSearchResults.currentSearchResult.text;\n var pattern = this.viewer.owner.searchModule.textSearch.stringToRegex(textToFind, findOptions);\n var index = this.owner.selectionModule.end.getHierarchicalIndexInternal();\n var result = this.viewer.owner.searchModule.textSearch.findNext(pattern, findOptions, index);\n if (!isNullOrUndefined(result)) {\n this.navigate(result);\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.replace(textToReplace, result, this.textSearchResults);\n index = this.owner.selectionModule.end.getHierarchicalIndexInternal();\n result = this.textSearch.findNext(textToFind, findOptions, index);\n if (result) {\n this.textSearchResults.addResult();\n this.textSearchResults.innerList[0] = result;\n this.navigate(result);\n }\n }\n };\n /**\n * Replace all the searched string with specified string\n *\n * @private\n * @param {string} replaceText - Specifies the replace text.\n * @param {TextSearchResults} results - Specfies the results.\n * @returns {number} - Returns the replace count.\n */\n Search.prototype.replaceAll = function (replaceText, results) {\n this.documentHelper.layout.isReplacingAll = true;\n if (isNullOrUndefined(this.viewer.owner) || this.viewer.owner.isReadOnlyMode || isNullOrUndefined(results)) {\n return 0;\n }\n if (this.owner.editorHistoryModule) {\n this.owner.editorHistoryModule.initComplexHistory(this.owner.selectionModule, 'ReplaceAll');\n }\n var count = results.length;\n this.viewer.owner.isLayoutEnabled = false;\n var text = results.innerList[0].text;\n for (var i = count - 1; i >= 0; i--) {\n var result = results.innerList[parseInt(i.toString(), 10)];\n if (result.start.currentWidget.children.length === 0) {\n results = this.textSearch.findAll(text);\n i = results.length;\n }\n else {\n this.navigate(result);\n if (this.viewer.owner.isReadOnlyMode || !this.viewer.owner.editorModule.canEditContentControl) {\n continue;\n }\n var allowLayout = true;\n if (i > 0) {\n var previousResult = results.innerList[i - 1];\n if (previousResult.start.paragraph.equals(result.start.paragraph)) {\n allowLayout = false;\n }\n }\n this.owner.editorModule.insertTextInternal(replaceText, true, undefined, allowLayout);\n result.destroy();\n }\n //if (result.isHeader || result.isFooter) {\n // eslint-disable-next-line max-len\n //this.documentHelper.layout.updateHeaderFooterToParent(this.documentHelper.selection.start.paragraph.bodyWidget as HeaderFooterWidget);\n //}\n }\n if (this.owner.editorHistoryModule && !isNullOrUndefined(this.owner.editorHistoryModule.currentHistoryInfo)) {\n this.owner.editorHistoryModule.updateComplexHistory();\n }\n else {\n this.owner.editorModule.updateComplexWithoutHistory(2);\n }\n this.searchResults.clear();\n this.documentHelper.layout.isReplacingAll = false;\n return count;\n };\n /**\n * Find the textToFind string in current document and replace the specified string.\n *\n * @private\n * @param {string} textToReplace - Specifies the text to replace.\n * @param {FindOption} findOptions - Default value of ‘findOptions’ parameter is FindOption.None.\n * @returns {void}\n */\n Search.prototype.replaceAllInternal = function (textToReplace, findOptions) {\n if (isNullOrUndefined(textToReplace)) {\n return;\n }\n if (isNullOrUndefined(findOptions)) {\n findOptions = 'None';\n }\n if (this.textSearchResults.length > 0) {\n this.navigate(this.textSearchResults.innerList[this.textSearchResults.currentIndex]);\n this.highlight(this.textSearchResults);\n this.replaceAll(textToReplace, this.textSearchResults);\n }\n };\n //#endregion\n //#region Highlight Search Result\n /**\n * @private\n * @param {TextSearchResult} textSearchResult - Specifies the text search results.\n * @returns {void}\n */\n Search.prototype.navigate = function (textSearchResult) {\n if (textSearchResult) {\n var start = textSearchResult.start;\n var end = textSearchResult.end;\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.owner.selectionModule) && !isNullOrUndefined(start) &&\n !isNullOrUndefined(end) && !isNullOrUndefined(start.paragraph) && !isNullOrUndefined(end.paragraph)) {\n this.owner.selectionModule.selectRange(start, end);\n this.documentHelper.updateFocus();\n }\n }\n };\n /**\n * @private\n * @param {TextSearchResults} textSearchResults - Specifies the text search results.\n * @returns {void}\n */\n Search.prototype.highlight = function (textSearchResults) {\n this.searchHighlighters = new Dictionary();\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[parseInt(i.toString(), 10)];\n this.highlightResult(result);\n }\n this.viewer.renderVisiblePages();\n };\n Search.prototype.highlightResult = function (result) {\n this.highlightSearchResult(result.start.paragraph, result.start, result.end);\n };\n /* eslint-disable */\n Search.prototype.highlightSearchResult = function (paragraph, start, end) {\n var selectionStartIndex = 0;\n var selectionEndIndex = 0;\n var startElement = null;\n var endElement = null;\n var lineWidget = this.documentHelper.selection.getStartLineWidget(paragraph, start, startElement, selectionStartIndex);\n selectionStartIndex = lineWidget.index;\n startElement = lineWidget.element;\n var startLineWidget = startElement ? startElement.line : paragraph.childWidgets[0];\n var endLine = this.documentHelper.selection.getEndLineWidget(end, endElement, selectionEndIndex);\n selectionEndIndex = endLine.index;\n endElement = endLine.element;\n var endLineWidget = endElement ? endElement.line :\n end.paragraph.childWidgets[end.paragraph.childWidgets.length - 1];\n var top = this.documentHelper.selection.getTop(startLineWidget);\n var left = this.documentHelper.selection.getLeftInternal(startLineWidget, startElement, selectionStartIndex);\n if (!isNullOrUndefined(startLineWidget) && startLineWidget === endLineWidget) {\n //find result ends in current line.\n var right = this.documentHelper.selection.getLeftInternal(endLineWidget, endElement, selectionEndIndex);\n var isRtlText = false;\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n var width = 0;\n width = Math.abs(right - left);\n if (!isRtlText && startElement instanceof TextElementBox) {\n isRtlText = startElement.isRightToLeft;\n }\n // Handled the highlighting approach as genric for normal and rtl text.\n if (isRtlText || paragraph.bidi) {\n var elementBox = this.documentHelper.selection.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementBox && elementBox.length > 1) {\n for (var i = 0; i < elementBox.length; i++) {\n var element = elementBox[i];\n var elementIsRTL = false;\n var index = element instanceof TextElementBox ? element.length : 1;\n if (element === startElement) {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, selectionStartIndex);\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, index);\n }\n else if (element === endElement) {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, 0);\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, selectionEndIndex);\n }\n else {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, 0);\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, index);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top);\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, isRtlText ? right : left, top);\n }\n }\n else {\n // Start element and end element will be in reverese for Bidi paragraph highlighting. \n // So, the right is considered based on Bidi property. \n this.createHighlightBorder(startLineWidget, width, left, top);\n }\n }\n else {\n if (!isNullOrUndefined(startLineWidget)) {\n if (paragraph !== startLineWidget.paragraph) {\n paragraph = startLineWidget.paragraph;\n }\n var width = this.documentHelper.selection.getWidth(startLineWidget, true) - (left - startLineWidget.paragraph.x);\n // Handled the highlighting approach as genric for normal and rtl text.\n if (paragraph.bidi || (startElement instanceof TextElementBox && startElement.isRightToLeft)) {\n var right = 0;\n var elementCollection = this.documentHelper.selection.getElementsForward(startLineWidget, startElement, endElement, paragraph.bidi);\n if (elementCollection) {\n var elementIsRTL = false;\n for (var i = 0; i < elementCollection.length; i++) {\n var element = elementCollection[i];\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.documentHelper.selection.getLeftInternal(startLineWidget, element, index);\n elementIsRTL = false;\n if (element === startElement) {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, selectionStartIndex);\n }\n else {\n left = this.documentHelper.selection.getLeftInternal(startLineWidget, element, 0);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(startLineWidget, width, elementIsRTL ? right : left, top);\n }\n // Highlight the Paragrph mark for last line.\n }\n }\n else {\n this.createHighlightBorder(startLineWidget, width, left, top);\n }\n var lineIndex = startLineWidget.paragraph.childWidgets.indexOf(startLineWidget);\n //Iterates to last item of paragraph or search result end.\n for (var i = 0; i < paragraph.childWidgets.length; i++) {\n if (paragraph === startLineWidget.paragraph) {\n lineIndex += 1;\n }\n this.highlightSearchResultParaWidget(paragraph, lineIndex, endLineWidget, endElement, selectionEndIndex);\n if (paragraph === endLineWidget.paragraph) {\n return;\n }\n else {\n lineIndex = 0;\n paragraph = endLineWidget.paragraph;\n i--;\n }\n }\n }\n }\n };\n Search.prototype.createHighlightBorder = function (lineWidget, width, left, top) {\n var findHighLight = this.addSearchHighlightBorder(lineWidget);\n var page = this.viewer.owner.selectionModule.getPage(lineWidget.paragraph);\n var pageTop = page.boundingRectangle.y;\n var pageLeft = page.boundingRectangle.x;\n findHighLight.left = Math.ceil(left);\n top = Math.ceil(top);\n findHighLight.width = Math.floor(width);\n var height = Math.floor(lineWidget.height);\n var context = this.documentHelper.containerContext;\n };\n Search.prototype.addSearchHighlightBorder = function (lineWidget) {\n var highlighters = undefined;\n var collection = this.searchHighlighters;\n if (collection.containsKey(lineWidget)) {\n highlighters = collection.get(lineWidget);\n }\n else {\n highlighters = [];\n collection.add(lineWidget, highlighters);\n }\n var searchHighlight = new SearchWidgetInfo(0, 0);\n highlighters.push(searchHighlight);\n return searchHighlight;\n };\n Search.prototype.highlightSearchResultParaWidget = function (widget, startIndex, endLine, endElement, endIndex) {\n var top = 0;\n var width = 0;\n var isRtlText = false;\n for (var j = startIndex; j < widget.childWidgets.length; j++) {\n var lineWidget = widget.childWidgets[j];\n if (j === startIndex) {\n top = this.documentHelper.selection.getTop(lineWidget);\n }\n var left = this.documentHelper.selection.getLeft(lineWidget);\n if (endElement instanceof TextElementBox) {\n isRtlText = endElement.isRightToLeft;\n }\n if (lineWidget === endLine) {\n //Selection ends in current line.\n var right = 0;\n // Handled the highlighting using the element box highlighting approach as genric for normal and rtl text.\n if (isRtlText || widget.bidi) {\n var elementBox = this.documentHelper.selection.getElementsBackward(lineWidget, endElement, endElement, widget.bidi);\n for (var i = 0; i < elementBox.length; i++) {\n var element = elementBox[i];\n var elementIsRTL = false;\n left = this.documentHelper.selection.getLeftInternal(lineWidget, element, 0);\n if (element === endElement) {\n right = this.documentHelper.selection.getLeftInternal(lineWidget, element, endIndex);\n }\n else {\n var index = element instanceof TextElementBox ? element.length : 1;\n right = this.documentHelper.selection.getLeftInternal(lineWidget, element, index);\n }\n if (element instanceof TextElementBox) {\n elementIsRTL = element.isRightToLeft;\n }\n width = Math.abs(right - left);\n this.createHighlightBorder(lineWidget, width, elementIsRTL ? right : left, top);\n }\n return;\n }\n else {\n right = this.documentHelper.selection.getLeftInternal(endLine, endElement, endIndex);\n width = Math.abs(right - left);\n this.createHighlightBorder(lineWidget, width, isRtlText ? right : left, top);\n return;\n }\n }\n else {\n width = this.documentHelper.selection.getWidth(lineWidget, true) - (left - widget.x);\n this.createHighlightBorder(lineWidget, width, left, top);\n top += lineWidget.height;\n }\n }\n };\n //#endregion\n //#region Get find result view\n /**\n * @private\n * @param {string} result - Specified the result.\n * @returns {void}\n */\n Search.prototype.addSearchResultItems = function (result) {\n if (isNullOrUndefined(result) || result === '') {\n return;\n }\n if (isNullOrUndefined(this.owner.findResultsList)) {\n this.owner.findResultsList = [];\n }\n this.owner.findResultsList.push(result);\n };\n /**\n * @private\n * @param {TextSearchResults} textSearchResults - Specified text search result.\n * @returns {void}\n */\n Search.prototype.addFindResultView = function (textSearchResults) {\n for (var i = 0; i < textSearchResults.innerList.length; i++) {\n var result = textSearchResults.innerList[i];\n this.addFindResultViewForSearch(result);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n /* eslint-disable */\n Search.prototype.addFindResultViewForSearch = function (result) {\n if (result.start != null && result.end != null && result.start.paragraph != null && result.end.paragraph != null) {\n var prefixText = void 0;\n var suffixtext = void 0;\n var currentText = void 0;\n var startIndex = 0;\n var inlineObj = result.start.currentWidget.getInline(result.start.offset, startIndex);\n var inline = inlineObj.element;\n startIndex = inlineObj.index;\n var prefix = '';\n var lastIndex = 0;\n if (inline instanceof FieldElementBox) {\n var elementInfo = this.owner.selectionModule.getRenderedInline(inline, startIndex);\n if (elementInfo.element.nextNode instanceof TextElementBox) {\n inline = elementInfo.element.nextNode;\n startIndex = elementInfo.index;\n }\n else {\n inline = elementInfo.element;\n startIndex = elementInfo.index;\n }\n }\n var boxObj = this.owner.selectionModule.getElementBoxInternal(inline, startIndex);\n var box = boxObj.element;\n startIndex = boxObj.index;\n if (box != null) {\n if (box instanceof TextElementBox && startIndex > 0) {\n prefix = box.text.substring(0, startIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n lastIndex = prefix.lastIndexOf(' ');\n while (lastIndex < 0 && boxIndex > 0 && box.line.children[boxIndex - 1] instanceof TextElementBox) {\n prefix = box.line.children[boxIndex - 1].text + prefix;\n boxIndex--;\n lastIndex = prefix.lastIndexOf(' ');\n }\n }\n var shiftIndex = prefix.lastIndexOf('\\v');\n if (shiftIndex > 0) {\n prefix = prefix.substring(0, shiftIndex);\n }\n else {\n lastIndex = prefix.lastIndexOf(' ');\n prefixText = lastIndex < 0 ? prefix : prefix.substring(lastIndex + 1);\n }\n currentText = result.text;\n var endIndex = 0;\n var endInlineObj = result.end.currentWidget.getInline(result.end.offset, endIndex);\n var endInline = endInlineObj.element;\n endIndex = endInlineObj.index;\n suffixtext = '';\n //Checks prefix element box is empty\n if (boxObj != null) {\n // Gets the element box using endIndex of the text and set as suffix\n boxObj = this.owner.selectionModule.getElementBoxInternal(endInline, endIndex);\n box = boxObj.element;\n endIndex = boxObj.index;\n }\n //Checks suffix element box is empty.\n if (box != null) {\n if (box instanceof TextElementBox && endIndex < box.length) {\n suffixtext = box.text.substring(endIndex);\n }\n var boxIndex = box.line.children.indexOf(box);\n while (boxIndex + 1 < box.line.children.length && (box.line.children[boxIndex + 1] instanceof TextElementBox) || (box.line.children[boxIndex + 1] instanceof FieldElementBox)) {\n if (box.line.children[boxIndex + 1] instanceof FieldElementBox) {\n boxIndex = boxIndex + 2;\n }\n else {\n suffixtext = suffixtext + box.line.children[boxIndex + 1].text;\n boxIndex = boxIndex + 1;\n }\n }\n }\n lastIndex = suffixtext.lastIndexOf(' ');\n suffixtext = suffixtext === '\\v' ? suffixtext = '' : suffixtext;\n var headerFooterString = '';\n var listElement = '';\n var containerWidget = result.start.paragraph.containerWidget;\n var type = containerWidget instanceof HeaderFooterWidget ? containerWidget.headerFooterType : '';\n if (type.indexOf('Header') != -1) {\n headerFooterString = '' + 'Header' + ': ' + '';\n }\n else if (type.indexOf('Footer') != -1) {\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n headerFooterString = '' + 'Footer' + ': ' + '';\n }\n listElement = '
  • ' + headerFooterString + prefix + '' + result.text + '' + suffixtext + '
  • ';\n this.addSearchResultItems(listElement);\n }\n };\n //#endregion\n /**\n * Clears search highlight.\n *\n * @private\n * @returns {void}\n */\n Search.prototype.clearSearchHighlight = function () {\n if (!isNullOrUndefined(this.searchHighlighters)) {\n this.searchHighlighters.clear();\n this.searchHighlighters = undefined;\n }\n var eventArgs = { source: this.viewer.owner };\n this.viewer.owner.trigger(searchResultsChangeEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n Search.prototype.destroy = function () {\n if (this.textSearchResults) {\n this.textSearchResults.destroy();\n }\n this.textSearchResults = undefined;\n this.owner = undefined;\n };\n return Search;\n}());\nexport { Search };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, isUndefined, Browser, compile, isNullOrUndefined, SanitizeHtmlHelper, animationMode } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, ChildProperty, Complex } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { rippleEffect, Animation, remove } from '@syncfusion/ej2-base';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { getElement } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, closest, matches, detach, select, selectAll, isVisible, append } from '@syncfusion/ej2-base';\nimport { DataManager, Query } from '@syncfusion/ej2-data';\nimport { isNullOrUndefined as isNOU, Touch, getValue, setValue, extend, merge, attributes } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { createCheckBox, rippleMouseHandler } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nvar ROOT = 'e-treeview';\nvar CONTROL = 'e-control';\nvar COLLAPSIBLE = 'e-icon-collapsible';\nvar EXPANDABLE = 'e-icon-expandable';\nvar LISTITEM = 'e-list-item';\nvar LISTTEXT = 'e-list-text';\nvar LISTWRAP = 'e-text-wrap';\nvar IELISTWRAP = 'e-ie-wrap';\nvar PARENTITEM = 'e-list-parent';\nvar HOVER = 'e-hover';\nvar ACTIVE = 'e-active';\nvar LOAD = 'e-icons-spinner';\nvar PROCESS = 'e-process';\nvar ICON = 'e-icons';\nvar TEXTWRAP = 'e-text-content';\nvar INPUT = 'e-input';\nvar INPUTGROUP = 'e-input-group';\nvar TREEINPUT = 'e-tree-input';\nvar EDITING = 'e-editing';\nvar RTL = 'e-rtl';\nvar INTERACTION = 'e-interaction';\nvar DRAGITEM = 'e-drag-item';\nvar DROPPABLE = 'e-droppable';\nvar DRAGGING = 'e-dragging';\nvar SIBLING = 'e-sibling';\nvar DROPIN = 'e-drop-in';\nvar DROPNEXT = 'e-drop-next';\nvar DROPOUT = 'e-drop-out';\nvar NODROP = 'e-no-drop';\nvar FULLROWWRAP = 'e-fullrow-wrap';\nvar FULLROW = 'e-fullrow';\nvar SELECTED = 'e-selected';\nvar EXPANDED = 'e-expanded';\nvar NODECOLLAPSED = 'e-node-collapsed';\nvar DISABLE = 'e-disable';\nvar DROPCOUNT = 'e-drop-count';\nvar CHECK = 'e-check';\nvar INDETERMINATE = 'e-stop';\nvar CHECKBOXWRAP = 'e-treeview-checkbox';\nvar CHECKBOXFRAME = 'e-frame';\nvar CHECKBOXRIPPLE = 'e-ripple-container';\nvar RIPPLE = 'e-ripple';\nvar RIPPLEELMENT = 'e-ripple-element';\nvar FOCUS = 'e-node-focus';\nvar IMAGE = 'e-list-img';\nvar BIGGER = 'e-bigger';\nvar SMALL = 'e-small';\nvar CHILD = 'e-has-child';\nvar ITEM_ANIMATION_ACTIVE = 'e-animation-active';\nvar DISABLED = 'e-disabled';\nvar PREVENTSELECT = 'e-prevent';\nvar treeAriaAttr = {\n treeRole: 'group',\n itemRole: 'treeitem',\n listRole: 'group',\n itemText: '',\n wrapperRole: ''\n};\n/**\n * Configures the fields to bind to the properties of node in the TreeView component.\n */\nvar FieldsSettings = /** @class */ (function (_super) {\n __extends(FieldsSettings, _super);\n function FieldsSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('child')\n ], FieldsSettings.prototype, \"child\", void 0);\n __decorate([\n Property([])\n ], FieldsSettings.prototype, \"dataSource\", void 0);\n __decorate([\n Property('expanded')\n ], FieldsSettings.prototype, \"expanded\", void 0);\n __decorate([\n Property('hasChildren')\n ], FieldsSettings.prototype, \"hasChildren\", void 0);\n __decorate([\n Property('htmlAttributes')\n ], FieldsSettings.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldsSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('id')\n ], FieldsSettings.prototype, \"id\", void 0);\n __decorate([\n Property('imageUrl')\n ], FieldsSettings.prototype, \"imageUrl\", void 0);\n __decorate([\n Property('isChecked')\n ], FieldsSettings.prototype, \"isChecked\", void 0);\n __decorate([\n Property('parentID')\n ], FieldsSettings.prototype, \"parentID\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"query\", void 0);\n __decorate([\n Property('selectable')\n ], FieldsSettings.prototype, \"selectable\", void 0);\n __decorate([\n Property('selected')\n ], FieldsSettings.prototype, \"selected\", void 0);\n __decorate([\n Property(null)\n ], FieldsSettings.prototype, \"tableName\", void 0);\n __decorate([\n Property('text')\n ], FieldsSettings.prototype, \"text\", void 0);\n __decorate([\n Property('tooltip')\n ], FieldsSettings.prototype, \"tooltip\", void 0);\n __decorate([\n Property('navigateUrl')\n ], FieldsSettings.prototype, \"navigateUrl\", void 0);\n return FieldsSettings;\n}(ChildProperty));\nexport { FieldsSettings };\n/**\n * Configures animation settings for the TreeView component.\n */\nvar ActionSettings = /** @class */ (function (_super) {\n __extends(ActionSettings, _super);\n function ActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], ActionSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], ActionSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('linear')\n ], ActionSettings.prototype, \"easing\", void 0);\n return ActionSettings;\n}(ChildProperty));\nexport { ActionSettings };\n/**\n * Configures the animation settings for expanding and collapsing nodes in TreeView.\n */\nvar NodeAnimationSettings = /** @class */ (function (_super) {\n __extends(NodeAnimationSettings, _super);\n function NodeAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Complex({ effect: 'SlideUp', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"collapse\", void 0);\n __decorate([\n Complex({ effect: 'SlideDown', duration: 400, easing: 'linear' }, ActionSettings)\n ], NodeAnimationSettings.prototype, \"expand\", void 0);\n return NodeAnimationSettings;\n}(ChildProperty));\nexport { NodeAnimationSettings };\n/**\n * The TreeView component is used to represent hierarchical data in a tree like structure with advanced\n * functions to perform edit, drag and drop, selection with check-box, and more.\n * ```html\n *
    \n * ```\n * ```typescript\n * let treeObj: TreeView = new TreeView();\n * treeObj.appendTo('#tree');\n * ```\n */\nvar TreeView = /** @class */ (function (_super) {\n __extends(TreeView, _super);\n function TreeView(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isRefreshed = false;\n _this.preventExpand = false;\n _this.checkedElement = [];\n _this.disableNode = [];\n _this.validArr = [];\n _this.validNodes = [];\n _this.expandChildren = [];\n _this.isFieldChange = false;\n _this.changeDataSource = false;\n _this.hasTemplate = false;\n _this.isFirstRender = false;\n // Specifies whether the node is dropped or not\n _this.isNodeDropped = false;\n _this.isInteracted = false;\n _this.isRightClick = false;\n _this.mouseDownStatus = false;\n _this.isDropIn = false;\n _this.OldCheckedData = [];\n return _this;\n }\n TreeView_1 = TreeView;\n /**\n * Get component name.\n *\n * @returns {string} - returns module name.\n * @private\n */\n TreeView.prototype.getModuleName = function () {\n return 'treeview';\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n */\n TreeView.prototype.preRender = function () {\n var _this = this;\n this.checkActionNodes = [];\n this.parentNodeCheck = [];\n this.dragStartAction = false;\n this.isAnimate = false;\n this.keyConfigs = {\n escape: 'escape',\n end: 'end',\n enter: 'enter',\n f2: 'f2',\n home: 'home',\n moveDown: 'downarrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n moveUp: 'uparrow',\n ctrlDown: 'ctrl+downarrow',\n ctrlUp: 'ctrl+uparrow',\n ctrlEnter: 'ctrl+enter',\n ctrlHome: 'ctrl+home',\n ctrlEnd: 'ctrl+end',\n ctrlA: 'ctrl+A',\n shiftDown: 'shift+downarrow',\n shiftUp: 'shift+uparrow',\n shiftEnter: 'shift+enter',\n shiftHome: 'shift+home',\n shiftEnd: 'shift+end',\n csDown: 'ctrl+shift+downarrow',\n csUp: 'ctrl+shift+uparrow',\n csEnter: 'ctrl+shift+enter',\n csHome: 'ctrl+shift+home',\n csEnd: 'ctrl+shift+end',\n space: 'space',\n shiftSpace: 'shift+space',\n ctrlSpace: 'ctrl+space'\n };\n this.listBaseOption = {\n expandCollapse: true,\n showIcon: true,\n expandIconClass: EXPANDABLE,\n ariaAttributes: treeAriaAttr,\n expandIconPosition: 'Left',\n itemCreated: function (e) {\n _this.beforeNodeCreate(e);\n },\n enableHtmlSanitizer: this.enableHtmlSanitizer,\n itemNavigable: this.fullRowNavigable\n };\n this.updateListProp(this.fields);\n this.aniObj = new Animation({});\n this.treeList = [];\n this.isLoaded = false;\n this.isInitalExpand = false;\n this.expandChildren = [];\n this.index = 0;\n this.setTouchClass();\n this.DDTTreeData = JSON.parse(JSON.stringify(this.fields.dataSource));\n if (isNOU(this.selectedNodes)) {\n this.setProperties({ selectedNodes: [] }, true);\n }\n if (isNOU(this.checkedNodes)) {\n this.setProperties({ checkedNodes: [] }, true);\n }\n if (isNOU(this.expandedNodes)) {\n this.setProperties({ expandedNodes: [] }, true);\n }\n else {\n this.isInitalExpand = true;\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - returns the persisted data\n * @hidden\n */\n TreeView.prototype.getPersistData = function () {\n var keyEntity = ['selectedNodes', 'checkedNodes', 'expandedNodes'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n TreeView.prototype.render = function () {\n this.initialRender = true;\n this.initialize();\n this.setDataBinding(false);\n this.setDisabledMode();\n this.setExpandOnType();\n if (!this.disabled) {\n this.setRipple();\n }\n this.wireEditingEvents(this.allowEditing);\n this.setDragAndDrop(this.allowDragAndDrop);\n if (!this.disabled) {\n this.wireEvents();\n }\n this.initialRender = false;\n this.renderComplete();\n };\n TreeView.prototype.initialize = function () {\n this.element.setAttribute('role', 'tree');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n this.setCssClass(null, this.cssClass);\n this.setEnableRtl();\n this.setFullRow(this.fullRowSelect);\n this.setTextWrap();\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n };\n TreeView.prototype.setDisabledMode = function () {\n if (this.disabled) {\n this.element.classList.add(DISABLED);\n this.element.setAttribute('aria-disabled', 'true');\n }\n else {\n this.element.classList.remove(DISABLED);\n this.element.setAttribute('aria-disabled', 'false');\n }\n };\n TreeView.prototype.setEnableRtl = function () {\n (this.enableRtl ? addClass : removeClass)([this.element], RTL);\n };\n TreeView.prototype.setRipple = function () {\n var tempStr = '.' + FULLROW + ',.' + TEXTWRAP;\n var rippleModel = {\n selector: tempStr,\n ignore: '.' + TEXTWRAP + ' > .' + ICON + ',.' + INPUTGROUP + ',.' + INPUT + ', .' + CHECKBOXWRAP\n };\n this.rippleFn = rippleEffect(this.element, rippleModel);\n var iconModel = {\n selector: '.' + TEXTWRAP + ' > .' + ICON,\n isCenterRipple: true\n };\n this.rippleIconFn = rippleEffect(this.element, iconModel);\n };\n TreeView.prototype.setFullRow = function (isEnabled) {\n (isEnabled ? addClass : removeClass)([this.element], FULLROWWRAP);\n };\n TreeView.prototype.setMultiSelect = function (isEnabled) {\n if (isEnabled) {\n this.element.setAttribute('aria-multiselectable', 'true');\n }\n else {\n this.element.setAttribute('aria-multiselectable', 'false');\n }\n };\n TreeView.prototype.templateComplier = function (template) {\n if (template) {\n this.hasTemplate = true;\n this.element.classList.add(INTERACTION);\n try {\n if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n return compile(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (e) {\n return compile(template);\n }\n }\n this.element.classList.remove(INTERACTION);\n return undefined;\n };\n TreeView.prototype.setDataBinding = function (changeDataSource) {\n var _this = this;\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager) {\n this.isOffline = this.fields.dataSource.dataSource.offline;\n if (this.fields.dataSource.ready) {\n this.fields.dataSource.ready.then(function (e) {\n _this.isOffline = _this.fields.dataSource.dataSource.offline;\n if (_this.fields.dataSource instanceof DataManager && _this.isOffline) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n _this.renderItems(true);\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n }\n }).catch(function (e) {\n _this.trigger('actionFailure', { error: e });\n });\n }\n else {\n this.fields.dataSource.executeQuery(this.getQuery(this.fields)).then(function (e) {\n _this.treeList.pop();\n _this.treeData = e.result;\n _this.isNumberTypeId = _this.getType();\n _this.setRootData();\n if (changeDataSource) {\n _this.changeDataSource = true;\n }\n _this.renderItems(true);\n _this.changeDataSource = false;\n if (_this.treeList.length === 0 && !_this.isLoaded) {\n _this.finalize();\n }\n }).catch(function (e) {\n _this.trigger('actionFailure', { error: e });\n });\n }\n }\n else {\n this.treeList.pop();\n if (isNOU(this.fields.dataSource)) {\n this.rootData = this.treeData = [];\n }\n else {\n this.treeData = JSON.parse(JSON.stringify(this.fields.dataSource));\n this.setRootData();\n }\n this.isNumberTypeId = this.getType();\n this.renderItems(false);\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.getQuery = function (mapper, value) {\n if (value === void 0) { value = null; }\n var columns = [];\n var query;\n if (!mapper.query) {\n query = new Query();\n var prop = this.getActualProperties(mapper);\n for (var _i = 0, _a = Object.keys(prop); _i < _a.length; _i++) {\n var col = _a[_i];\n if (col !== 'dataSource' && col !== 'tableName' && col !== 'child' && !!mapper[\"\" + col]\n && col !== 'url' && columns.indexOf(mapper[\"\" + col]) === -1) {\n columns.push(mapper[\"\" + col]);\n }\n }\n query.select(columns);\n if (Object.prototype.hasOwnProperty.call(prop, 'tableName')) {\n query.from(mapper.tableName);\n }\n }\n else {\n query = mapper.query.clone();\n }\n ListBase.addSorting(this.sortOrder, mapper.text, query);\n if (!isNOU(value) && !isNOU(mapper.parentID)) {\n query.where(mapper.parentID, 'equal', (this.isNumberTypeId ? parseFloat(value) : value));\n }\n return query;\n };\n TreeView.prototype.getType = function () {\n return this.treeData[0] ? ((typeof getValue(this.fields.id, this.treeData[0]) === 'number') ? true : false) : false;\n };\n TreeView.prototype.setRootData = function () {\n this.dataType = this.getDataType(this.treeData, this.fields);\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n var rootItems = this.getChildNodes(this.treeData, undefined, true);\n if (isNOU(rootItems)) {\n this.rootData = [];\n }\n else {\n this.rootData = rootItems;\n }\n }\n else {\n this.rootData = this.treeData;\n }\n };\n TreeView.prototype.isChildObject = function () {\n if (typeof this.fields.child === 'object') {\n return true;\n }\n else {\n return false;\n }\n };\n TreeView.prototype.renderItems = function (isSorted) {\n this.listBaseOption.ariaAttributes.level = 1;\n var sortedData = this.getSortedData(this.rootData);\n this.ulElement = ListBase.createList(this.createElement, isSorted ? this.rootData : sortedData, this.listBaseOption);\n this.element.appendChild(this.ulElement);\n var rootNodes = this.ulElement.querySelectorAll('.e-list-item');\n if (this.loadOnDemand === false) {\n var i = 0;\n while (i < rootNodes.length) {\n this.renderChildNodes(rootNodes[parseInt(i.toString(), 10)], true, null, true);\n i++;\n }\n }\n var parentEle = selectAll('.' + PARENTITEM, this.element);\n if ((parentEle.length === 1 && (rootNodes && rootNodes.length !== 0)) || this.loadOnDemand) {\n this.finalizeNode(this.element);\n }\n this.parentNodeCheck = [];\n this.parentCheckData = [];\n this.updateCheckedStateFromDS();\n if (this.autoCheck && this.showCheckBox && !this.isLoaded) {\n this.updateParentCheckState();\n }\n };\n /**\n * Update the checkedNodes from datasource at initial rendering\n *\n * @returns {void}\n */\n TreeView.prototype.updateCheckedStateFromDS = function () {\n this.validNodes = [];\n if (this.treeData && this.showCheckBox) {\n if (this.dataType === 1) {\n var mapper = this.fields;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.isChecked, 'equal', true, false));\n for (var i = 0; i < resultData.length; i++) {\n var resultId = resultData[parseInt(i.toString(), 10)][this.fields.id]\n ? resultData[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.checkedNodes.indexOf(resultId) === -1 && !(this.isLoaded)) {\n this.checkedNodes.push(resultId);\n }\n if (resultData[parseInt(i.toString(), 10)][this.fields.hasChildren]) {\n var id = resultData[parseInt(i.toString(), 10)][this.fields.id];\n var childData = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper.parentID, 'equal', id, false));\n for (var child = 0; child < childData.length; child++) {\n var childId = childData[parseInt(child.toString(), 10)][this.fields.id]\n ? childData[parseInt(child.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.checkedNodes.indexOf(childId) === -1 && this.autoCheck) {\n this.checkedNodes.push(childId);\n }\n }\n }\n }\n for (var i = 0; i < this.checkedNodes.length; i++) {\n var mapper_1 = this.fields;\n var checkState = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper_1.id, 'equal', this.checkedNodes[parseInt(i.toString(), 10)], true));\n if (checkState[0] && this.autoCheck) {\n this.getCheckedNodeDetails(mapper_1, checkState);\n this.checkIndeterminateState(checkState[0]);\n }\n if (checkState.length > 0) {\n var checkedId = checkState[0][this.fields.id] ? checkState[0][this.fields.id].toString() : null;\n if (this.checkedNodes.indexOf(checkedId) > -1 && this.validNodes.indexOf(checkedId) === -1) {\n this.validNodes.push(checkedId);\n }\n }\n var checkedData = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper_1.parentID, 'equal', this.checkedNodes[parseInt(i.toString(), 10)], true));\n for (var index = 0; index < checkedData.length; index++) {\n var checkedId = checkedData[parseInt(index.toString(), 10)][this.fields.id]\n ? checkedData[parseInt(index.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.checkedNodes.indexOf(checkedId) === -1 && this.autoCheck) {\n this.checkedNodes.push(checkedId);\n }\n if (this.checkedNodes.indexOf(checkedId) > -1 && this.validNodes.indexOf(checkedId) === -1) {\n this.validNodes.push(checkedId);\n }\n }\n }\n }\n else if (this.dataType === 2 || (this.fields.dataSource instanceof DataManager &&\n this.isOffline)) {\n for (var index = 0; index < this.treeData.length; index++) {\n var fieldId = this.treeData[parseInt(index.toString(), 10)][this.fields.id] ? this.treeData[parseInt(index.toString(), 10)][this.fields.id].toString() : '';\n if (this.treeData[parseInt(index.toString(), 10)][this.fields.isChecked] &&\n !(this.isLoaded) && this.checkedNodes.indexOf(fieldId) === -1) {\n this.checkedNodes.push(fieldId);\n }\n if (this.checkedNodes.indexOf(fieldId) > -1 && this.validNodes.indexOf(fieldId) === -1) {\n this.validNodes.push(fieldId);\n }\n var childItems = getValue(this.fields.child.toString(), this.treeData[parseInt(index.toString(), 10)]);\n if (childItems) {\n this.updateChildCheckState(childItems, this.treeData[parseInt(index.toString(), 10)]);\n }\n }\n this.validNodes = (this.enablePersistence) ? this.checkedNodes : this.validNodes;\n }\n this.setProperties({ checkedNodes: this.validNodes }, true);\n }\n };\n /**\n * To check whether the list data has sub child and to change the parent check state accordingly\n *\n * @param {FieldsSettingsModel} mapper - The mapper object containing field settings.\n * @param {Object[]} checkNodes - The array of checked nodes.\n * @returns {void}\n * @private\n */\n TreeView.prototype.getCheckedNodeDetails = function (mapper, checkNodes) {\n var id = checkNodes[0][this.fields.parentID] ? checkNodes[0][this.fields.parentID].toString() : null;\n var count = 0;\n var element = this.element.querySelector('[data-uid=\"' + checkNodes[0][this.fields.id] + '\"]');\n var parentEle = this.element.querySelector('[data-uid=\"' + checkNodes[0][this.fields.parentID] + '\"]');\n if (!element && !parentEle) {\n if (this.parentNodeCheck.indexOf(id) === -1) {\n this.parentNodeCheck.push(id);\n }\n var childNodes = this.getChildNodes(this.treeData, id);\n for (var i = 0; i < childNodes.length; i++) {\n var childId = childNodes[parseInt(i.toString(), 10)][this.fields.id]\n ? childNodes[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n if (count === childNodes.length && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n }\n var preElement = new DataManager(this.treeData).\n executeLocal(new Query().where(mapper.id, 'equal', id, true));\n this.getCheckedNodeDetails(mapper, preElement);\n }\n else if (parentEle) {\n var check = select('.' + CHECK, parentEle);\n if (!check) {\n this.changeState(parentEle, 'indeterminate', null, true, true);\n }\n }\n };\n /**\n * Update the checkedNodes and parent state when all the child Nodes are in checkedstate at initial rendering\n *\n * @returns {void}\n * @private\n */\n TreeView.prototype.updateParentCheckState = function () {\n var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n var childCheckedElement;\n var data = this.treeData;\n if (this.element.classList.contains('e-filtering')) {\n data = this.DDTTreeData;\n }\n for (var i = 0; i < indeterminate.length; i++) {\n var node = closest(indeterminate[parseInt(i.toString(), 10)], '.' + LISTITEM);\n var nodeId = node.getAttribute('data-uid').toString();\n var OldCheckedNodes = void 0;\n if (this.element.classList.contains('e-filtering')) {\n OldCheckedNodes = new DataManager(this.OldCheckedData).executeLocal(new Query().where('parentID', 'equal', nodeId, true));\n }\n if (this.dataType === 1) {\n childCheckedElement = new DataManager(data).\n executeLocal(new Query().where(this.fields.parentID, 'equal', nodeId, true));\n }\n else {\n childCheckedElement = this.getChildNodes(data, nodeId);\n }\n var count = 0;\n if (childCheckedElement) {\n var _loop_1 = function (j) {\n var childId = childCheckedElement[parseInt(j.toString(), 10)][this_1.fields.id].toString();\n if (this_1.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n else if (this_1.element.classList.contains('e-filtering') && OldCheckedNodes.findIndex(function (e) { return e['id'] === childId; }) !== -1) {\n count++;\n }\n };\n var this_1 = this;\n for (var j = 0; j < childCheckedElement.length; j++) {\n _loop_1(j);\n }\n if (count === childCheckedElement.length) {\n var nodeCheck = node.getAttribute('data-uid');\n if (this.checkedNodes.indexOf(nodeCheck) === -1) {\n this.checkedNodes.push(nodeCheck);\n }\n this.changeState(node, 'check', null, true, true);\n }\n else if (count === 0 && this.checkedNodes.length === 0) {\n this.changeState(node, 'uncheck', null, true, true);\n }\n }\n }\n };\n /**\n * Change the parent to indeterminate state whenever the child is in checked state which is not rendered in DOM\n *\n * @param {Object} data - The data object to check for indeterminate state.\n * @returns {void}\n * @private\n */\n TreeView.prototype.checkIndeterminateState = function (data) {\n var element;\n if (this.dataType === 1) {\n element = this.element.querySelector('[data-uid=\"' + data[this.fields.parentID] + '\"]');\n }\n else {\n element = this.element.querySelector('[data-uid=\"' + data[this.fields.id] + '\"]');\n }\n if (element) {\n var ariaChecked = element.getAttribute('aria-checked');\n if (ariaChecked !== 'true') {\n this.changeState(element, 'indeterminate', null, true, true);\n }\n }\n else if (this.dataType === 2) {\n if (this.parentNodeCheck.indexOf(data[this.fields.id].toString()) === -1) {\n this.parentNodeCheck.push(data[this.fields.id].toString());\n }\n }\n };\n /**\n * Update the checkedNodes for child and subchild from datasource (hierarchical datasource) at initial rendering\n *\n * @param {Object[]} childItems - The array of child items to update the checked state.\n * @param {Object} treeData - The tree data object containing field values.\n * @returns {void}\n * @private\n */\n TreeView.prototype.updateChildCheckState = function (childItems, treeData) {\n var count = 0;\n var checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : '';\n for (var index = 0; index < childItems.length; index++) {\n var checkedChild = childItems[parseInt(index.toString(), 10)][this.fields.id] ? childItems[parseInt(index.toString(), 10)][this.fields.id].toString() : '';\n if (childItems[parseInt(index.toString(), 10)][this.fields.isChecked] &&\n !(this.isLoaded) && this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n }\n if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1 && this.autoCheck) {\n this.checkedNodes.push(checkedChild);\n }\n if (this.checkedNodes.indexOf(checkedChild) !== -1 && this.autoCheck) {\n count++;\n }\n if (this.checkedNodes.indexOf(checkedChild) > -1 && this.validNodes.indexOf(checkedChild) === -1) {\n this.validNodes.push(checkedChild);\n }\n var subChildItems = getValue(this.fields.child.toString(), childItems[parseInt(index.toString(), 10)]);\n if (subChildItems && subChildItems.length) {\n if (this.parentCheckData.indexOf(treeData) === -1) {\n this.parentCheckData.push(treeData);\n }\n this.updateChildCheckState(subChildItems, childItems[parseInt(index.toString(), 10)]);\n }\n if (count === childItems.length && this.autoCheck && this.checkedNodes.indexOf(checkedParent) === -1) {\n this.checkedNodes.push(checkedParent);\n }\n }\n if (count !== 0 && this.autoCheck) {\n this.checkIndeterminateState(treeData);\n for (var len = 0; len < this.parentCheckData.length; len++) {\n if ((treeData !== this.parentCheckData[parseInt(len.toString(), 10)]) &&\n (this.parentCheckData[parseInt(len.toString(), 10)])) {\n this.checkIndeterminateState(this.parentCheckData[parseInt(len.toString(), 10)]);\n }\n }\n }\n this.parentCheckData = [];\n };\n TreeView.prototype.beforeNodeCreate = function (e) {\n if (this.showCheckBox) {\n var checkboxEle = createCheckBox(this.createElement, true, { cssClass: this.touchClass });\n checkboxEle.classList.add(CHECKBOXWRAP);\n var icon = select('div.' + ICON, e.item);\n var id = e.item.getAttribute('data-uid');\n e.item.childNodes[0].insertBefore(checkboxEle, e.item.childNodes[0].childNodes[isNOU(icon) ? 0 : 1]);\n var checkValue = getValue(e.fields.isChecked, e.curData);\n if (this.checkedNodes.indexOf(id) > -1) {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n e.item.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else if (!isNOU(checkValue) && checkValue.toString() === 'true') {\n select('.' + CHECKBOXFRAME, checkboxEle).classList.add(CHECK);\n e.item.setAttribute('aria-checked', 'true');\n this.addCheck(e.item);\n }\n else {\n e.item.setAttribute('aria-checked', 'false');\n }\n var frame = select('.' + CHECKBOXFRAME, checkboxEle);\n EventHandler.add(frame, 'mousedown', this.frameMouseHandler, this);\n EventHandler.add(frame, 'mouseup', this.frameMouseHandler, this);\n }\n if (this.fullRowSelect) {\n this.createFullRow(e.item);\n }\n if (this.allowMultiSelection && !e.item.classList.contains(SELECTED)) {\n e.item.setAttribute('aria-selected', 'false');\n }\n var fields = e.fields;\n this.addActionClass(e, fields.selected, SELECTED);\n this.addActionClass(e, fields.expanded, EXPANDED);\n e.item.setAttribute('tabindex', '-1');\n EventHandler.add(e.item, 'focus', this.focusIn, this);\n if (!isNOU(this.nodeTemplateFn)) {\n var textEle = e.item.querySelector('.' + LISTTEXT);\n var dataId = e.item.getAttribute('data-uid');\n textEle.innerHTML = '';\n this.renderNodeTemplate(e.curData, textEle, dataId);\n }\n var eventArgs = {\n node: e.item,\n nodeData: e.curData,\n text: e.text\n };\n if (!this.isRefreshed) {\n this.trigger('drawNode', eventArgs);\n if (e.curData[this.fields.selectable] === false && !this.showCheckBox) {\n e.item.classList.add(PREVENTSELECT);\n e.item.firstElementChild.setAttribute('style', 'cursor: not-allowed');\n }\n }\n };\n TreeView.prototype.frameMouseHandler = function (e) {\n var rippleSpan = select('.' + CHECKBOXRIPPLE, e.target.parentElement);\n rippleMouseHandler(e, rippleSpan);\n };\n TreeView.prototype.addActionClass = function (e, action, cssClass) {\n var data = e.curData;\n var actionValue = getValue(action, data);\n if (!isNOU(actionValue) && actionValue.toString() !== 'false') {\n e.item.classList.add(cssClass);\n }\n };\n TreeView.prototype.getDataType = function (ds, mapper) {\n if (this.fields.dataSource instanceof DataManager) {\n for (var i = 0; i < ds.length; i++) {\n if (this.isOffline) {\n if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[parseInt(i.toString(), 10)])) && !isNOU(getValue(mapper.parentID, ds[parseInt(i.toString(), 10)]))) {\n return 1;\n }\n }\n else if ((typeof mapper.child === 'string') && isNOU(getValue(mapper.child, ds[parseInt(i.toString(), 10)]))) {\n return 1;\n }\n }\n return 2;\n }\n for (var i = 0, len = ds.length; i < len; i++) {\n if ((typeof mapper.child === 'string') && (!isNOU(getValue(mapper.child, ds[parseInt(i.toString(), 10)])) || (Object.prototype.hasOwnProperty.call(ds[parseInt(i.toString(), 10)], mapper.child)))) {\n return 2;\n }\n if (this.isChildObject()) {\n return 2;\n }\n if (!isNOU(getValue(mapper.parentID, ds[parseInt(i.toString(), 10)])) ||\n !isNOU(getValue(mapper.hasChildren, ds[parseInt(i.toString(), 10)]))) {\n return 1;\n }\n }\n return 1;\n };\n TreeView.prototype.getGroupedData = function (dataSource, groupBy) {\n var cusQuery = new Query().group(groupBy);\n var ds = ListBase.getDataSource(dataSource, cusQuery);\n var grpItem = [];\n for (var j = 0; j < ds.length; j++) {\n var itemObj = ds[parseInt(j.toString(), 10)].items;\n grpItem.push(itemObj);\n }\n return grpItem;\n };\n TreeView.prototype.getSortedData = function (list) {\n if (list && this.sortOrder !== 'None') {\n list = ListBase.getDataSource(list, ListBase.addSorting(this.sortOrder, this.fields.text));\n }\n return list;\n };\n TreeView.prototype.finalizeNode = function (element) {\n var _this = this;\n var iNodes = selectAll('.' + IMAGE, element);\n for (var k = 0; k < iNodes.length; k++) {\n iNodes[parseInt(k.toString(), 10)].setAttribute('alt', IMAGE);\n }\n if (this.isLoaded) {\n var sNodes = selectAll('.' + SELECTED, element);\n for (var i = 0; i < sNodes.length; i++) {\n this.selectNode(sNodes[parseInt(i.toString(), 10)], null);\n break;\n }\n removeClass(sNodes, SELECTED);\n }\n var cNodes = selectAll('.' + LISTITEM + ':not(.' + EXPANDED + ')', element);\n for (var j = 0; j < cNodes.length; j++) {\n var icon = select('div.' + ICON, cNodes[parseInt(j.toString(), 10)]);\n if (icon && icon.classList.contains(EXPANDABLE)) {\n this.disableExpandAttr(cNodes[parseInt(j.toString(), 10)]);\n }\n }\n var eNodes = selectAll('.' + EXPANDED, element);\n if (!this.loadOnDemand && this.fields.dataSource instanceof DataManager) {\n this.isInitalExpand = this.treeData.filter(function (e) { return e[_this.fields.expanded] === true; }).length > 0\n ? true\n : this.isInitalExpand;\n }\n if (!this.isInitalExpand) {\n for (var i = 0; i < eNodes.length; i++) {\n this.renderChildNodes(eNodes[parseInt(i.toString(), 10)]);\n }\n }\n removeClass(eNodes, EXPANDED);\n this.updateList();\n if (this.isLoaded) {\n this.updateCheckedProp();\n }\n };\n TreeView.prototype.updateCheckedProp = function () {\n if (this.showCheckBox) {\n var nodes = [].concat([], this.checkedNodes);\n this.setProperties({ checkedNodes: nodes }, true);\n }\n };\n TreeView.prototype.ensureIndeterminate = function () {\n if (this.autoCheck) {\n var liElement = selectAll('li', this.element);\n var ulElement = void 0;\n for (var i = 0; i < liElement.length; i++) {\n if (liElement[parseInt(i.toString(), 10)].classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, liElement[parseInt(i.toString(), 10)]);\n if (ulElement) {\n this.ensureParentCheckState(liElement[parseInt(i.toString(), 10)]);\n }\n else {\n this.ensureChildCheckState(liElement[parseInt(i.toString(), 10)]);\n }\n }\n }\n }\n else {\n var indeterminate = selectAll('.' + INDETERMINATE, this.element);\n for (var i = 0; i < indeterminate.length; i++) {\n indeterminate[parseInt(i.toString(), 10)].classList.remove(INDETERMINATE);\n }\n }\n };\n TreeView.prototype.ensureParentCheckState = function (element) {\n if (!isNOU(element)) {\n if (element.classList.contains(ROOT)) {\n return;\n }\n var ulElement = element;\n if (element.classList.contains(LISTITEM)) {\n ulElement = select('.' + PARENTITEM, element);\n }\n var checkedNodes = selectAll('.' + CHECKBOXWRAP + ' .' + CHECK, ulElement);\n var indeterminateNodes = selectAll('.' + INDETERMINATE, ulElement);\n var nodes = selectAll('.' + LISTITEM, ulElement);\n var checkBoxEle = element.getElementsByClassName(CHECKBOXWRAP)[0];\n var count = nodes.length;\n var checkedCount = checkedNodes.length;\n var dataUid = element.getAttribute('data-uid');\n if (this.element.classList.contains('e-filtering')) {\n var oldCheckedNodes = new DataManager(this.OldCheckedData).executeLocal(new Query().where('parentID', 'equal', dataUid, true));\n checkedCount = oldCheckedNodes.length;\n var childItems = [];\n if (this.dataType === 1) {\n childItems = new DataManager(this.DDTTreeData).executeLocal(new Query().where(this.fields.parentID, 'equal', dataUid, true));\n }\n else {\n childItems = this.getChildNodes(this.DDTTreeData, dataUid);\n }\n count = childItems.length;\n }\n if (count === checkedCount) {\n this.changeState(checkBoxEle, 'check', null, true, true);\n }\n else if (checkedCount > 0 || indeterminateNodes.length > 0) {\n this.changeState(checkBoxEle, 'indeterminate', null, true, true);\n }\n else if (checkedCount === 0) {\n this.changeState(checkBoxEle, 'uncheck', null, true, true);\n }\n var parentUL = closest(element, '.' + PARENTITEM);\n if (!isNOU(parentUL)) {\n var currentParent = closest(parentUL, '.' + LISTITEM);\n this.ensureParentCheckState(currentParent);\n }\n }\n };\n TreeView.prototype.ensureChildCheckState = function (element, e) {\n if (!isNOU(element)) {\n var childElement = select('.' + PARENTITEM, element);\n var checkBoxes = void 0;\n if (!isNOU(childElement)) {\n checkBoxes = selectAll('.' + CHECKBOXWRAP, childElement);\n var isChecked = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(CHECK);\n var parentCheck = element.getElementsByClassName(CHECKBOXFRAME)[0].classList.contains(INDETERMINATE);\n var childCheck = childElement.querySelectorAll('li');\n var checkedState = void 0;\n for (var index = 0; index < checkBoxes.length; index++) {\n var childId = childCheck[parseInt(index.toString(), 10)].getAttribute('data-uid');\n if (!isNOU(this.currentLoadData) &&\n !isNOU(getValue(this.fields.isChecked, this.currentLoadData[parseInt(index.toString(), 10)]))) {\n checkedState = getValue(this.fields.isChecked, this.currentLoadData[parseInt(index.toString(), 10)]) ? 'check' : 'uncheck';\n if (this.ele !== -1) {\n checkedState = isChecked ? 'check' : 'uncheck';\n }\n if ((checkedState === 'uncheck') && (!isUndefined(this.parentNodeCheck) && this.autoCheck\n && this.parentNodeCheck.indexOf(childId) !== -1)) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n checkedState = 'indeterminate';\n }\n }\n else {\n var isNodeChecked = checkBoxes[parseInt(index.toString(), 10)]\n .getElementsByClassName(CHECKBOXFRAME)[0]\n .classList.contains(CHECK);\n if (isChecked) {\n checkedState = 'check';\n }\n else if (isNodeChecked && !this.isLoaded) {\n checkedState = 'check';\n }\n else if (this.checkedNodes.indexOf(childId) !== -1 && this.isLoaded && (parentCheck || isChecked)) {\n checkedState = 'check';\n }\n else if (childCheck[parseInt(index.toString(), 10)].classList.contains(CHILD) &&\n (!isUndefined(this.parentNodeCheck) && this.autoCheck\n && (isChecked || parentCheck) && this.parentNodeCheck.indexOf(childId) !== -1)) {\n checkedState = 'indeterminate';\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n }\n else if (this.dataType === 1 && (!isUndefined(this.parentNodeCheck) && this.autoCheck &&\n (isChecked || parentCheck) && this.parentNodeCheck.indexOf(childId) !== -1)) {\n checkedState = 'indeterminate';\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(childId), 1);\n }\n else {\n checkedState = 'uncheck';\n }\n }\n this.changeState(checkBoxes[parseInt(index.toString(), 10)], checkedState, e, true, true);\n }\n }\n if (this.autoCheck && this.isLoaded) {\n this.updateParentCheckState();\n }\n }\n };\n TreeView.prototype.doCheckBoxAction = function (nodes, doCheck) {\n if (!isNOU(nodes)) {\n nodes.reverse();\n for (var len = nodes.length - 1; len >= 0; len--) {\n var liEle = this.getElement(nodes[parseInt(len.toString(), 10)]);\n if (isNOU(liEle)) {\n var node = nodes[len - nodes.length] ? nodes[len - nodes.length].toString()\n : nodes[parseInt(len.toString(), 10)]\n ? nodes[parseInt(len.toString(), 10)].toString()\n : null;\n if (node !== '' && doCheck && node) {\n this.setValidCheckedNode(node);\n this.dynamicCheckState(node, doCheck);\n }\n else if (this.checkedNodes.indexOf(node) !== -1 && node !== '' && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(node), 1);\n var childItems = this.getChildNodes(this.treeData, node);\n if (childItems) {\n for (var i = 0; i < childItems.length; i++) {\n var id = childItems[parseInt(i.toString(), 10)][this.fields.id]\n ? childItems[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.checkedNodes.indexOf(id) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(id), 1);\n var ele = this.element.querySelector('[data-uid=\"' + id + '\"]');\n if (ele) {\n this.changeState(ele, 'uncheck', null);\n }\n }\n }\n if (this.parentNodeCheck.indexOf(node) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(node), 1);\n }\n }\n if (node) {\n this.dynamicCheckState(node, doCheck);\n }\n this.updateField(this.treeData, this.fields, node, 'isChecked', null);\n }\n continue;\n }\n var checkBox = select('.' + PARENTITEM + ' .' + CHECKBOXWRAP, liEle);\n this.validateCheckNode(checkBox, !doCheck, liEle, null);\n }\n }\n else {\n var checkBoxes = selectAll('.' + CHECKBOXWRAP, this.element);\n if (this.loadOnDemand) {\n for (var index = 0; index < checkBoxes.length; index++) {\n this.updateFieldChecked(checkBoxes[parseInt(index.toString(), 10)], doCheck);\n this.changeState(checkBoxes[parseInt(index.toString(), 10)], doCheck ? 'check' : 'uncheck', null, null, null, doCheck);\n }\n }\n else {\n for (var index = 0; index < checkBoxes.length; index++) {\n this.updateFieldChecked(checkBoxes[parseInt(index.toString(), 10)], doCheck);\n this.changeState(checkBoxes[parseInt(index.toString(), 10)], doCheck ? 'check' : 'uncheck');\n }\n }\n }\n if (nodes) {\n for (var j = 0; j < nodes.length - 1; j++) {\n var node = nodes[parseInt(j.toString(), 10)] ? nodes[parseInt(j.toString(), 10)].toString() : '';\n if (!doCheck) {\n this.updateField(this.treeData, this.fields, node, 'isChecked', null);\n }\n }\n }\n if (this.autoCheck) {\n this.updateParentCheckState();\n }\n };\n TreeView.prototype.updateFieldChecked = function (checkbox, doCheck) {\n var currLi = closest(checkbox, '.' + LISTITEM);\n var id = currLi.getAttribute('data-uid');\n var nodeDetails = this.getNodeData(currLi);\n if (nodeDetails.isChecked === 'true' && !doCheck) {\n this.updateField(this.treeData, this.fields, id, 'isChecked', null);\n }\n };\n /**\n * Changes the parent and child check state while changing the checkedNodes via setmodel\n *\n * @param {string} node - The unique identifier of the node.\n * @param {boolean} doCheck - A boolean value indicating whether to check or uncheck the node.\n * @returns {void}\n * @private\n */\n TreeView.prototype.dynamicCheckState = function (node, doCheck) {\n if (this.dataType === 1) {\n var count = 0;\n var resultId = new DataManager(this.treeData).executeLocal(new Query().where(this.fields.id, 'equal', node, true));\n if (resultId[0]) {\n var id = resultId[0][this.fields.id] ? resultId[0][this.fields.id].toString() : null;\n var parent_1 = resultId[0][this.fields.parentID] ? resultId[0][this.fields.parentID].toString() : null;\n var parentElement = this.element.querySelector('[data-uid=\"' + parent_1 + '\"]');\n var element = this.element.querySelector('[data-uid=\"' + id + '\"]');\n var childNodes = this.getChildNodes(this.treeData, parent_1);\n if (childNodes) {\n for (var i = 0; i < childNodes.length; i++) {\n var childId = childNodes[parseInt(i.toString(), 10)][this.fields.id]\n ? childNodes[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n }\n if (this.checkedNodes.indexOf(node) !== -1 && parentElement && (id === node) && this.autoCheck) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && element && (id === node) && !doCheck) {\n this.changeState(element, 'uncheck', null);\n }\n else if (this.checkedNodes.indexOf(node) !== -1 && element && (id === node) && doCheck) {\n this.changeState(element, 'check', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && !element && parentElement && (id === node) && this.autoCheck\n && count !== 0) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && !element && parentElement && (id === node) && this.autoCheck\n && count === 0) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else if (!element && !parentElement && (id === node) && this.autoCheck) {\n this.updateIndeterminate(node, doCheck);\n }\n }\n }\n else if (this.dataType === 2 || (this.fields.dataSource instanceof DataManager &&\n this.isOffline)) {\n var id = void 0;\n var parentElement = void 0;\n var check = void 0;\n for (var i = 0; i < this.treeData.length; i++) {\n id = this.treeData[parseInt(i.toString(), 10)][this.fields.id] ? this.treeData[parseInt(i.toString(), 10)][this.fields.id].toString() : '';\n parentElement = this.element.querySelector('[data-uid=\"' + id + '\"]');\n check = parentElement ? select('.' + CHECK, parentElement) : null;\n if (this.checkedNodes.indexOf(id) === -1 && parentElement && check && !doCheck) {\n this.changeState(parentElement, 'uncheck', null);\n }\n var subChild = getValue(this.fields.child.toString(), this.treeData[parseInt(i.toString(), 10)]);\n if (subChild) {\n this.updateChildIndeterminate(subChild, id, node, doCheck, id);\n }\n }\n }\n };\n /**\n * updates the parent and child check state while changing the checkedNodes via setmodel for listData\n *\n * @param {string} node - The unique identifier of the node.\n * @param {boolean} doCheck - A boolean value indicating whether to check or uncheck the node.\n * @returns {void}\n * @private\n */\n TreeView.prototype.updateIndeterminate = function (node, doCheck) {\n var indeterminateData = this.getTreeData(node);\n var count = 0;\n var parent;\n if (this.dataType === 1) {\n parent = indeterminateData[0][this.fields.parentID] ? indeterminateData[0][this.fields.parentID].toString() : null;\n }\n var childNodes = this.getChildNodes(this.treeData, parent);\n if (childNodes) {\n for (var i = 0; i < childNodes.length; i++) {\n var childId = childNodes[parseInt(i.toString(), 10)][this.fields.id]\n ? childNodes[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n }\n var parentElement = this.element.querySelector('[data-uid=\"' + parent + '\"]');\n if (parentElement && doCheck) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (!doCheck && parentElement && this.parentNodeCheck.indexOf(parent) === -1 && count !== 0) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (!doCheck && parentElement && this.parentNodeCheck.indexOf(parent) === -1 && count === 0) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else if (!parentElement) {\n if (!doCheck && this.checkedNodes.indexOf(parent) === -1 && this.parentNodeCheck.indexOf(parent) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(parent), 1);\n }\n else if (doCheck && this.checkedNodes.indexOf(parent) === -1 && this.parentNodeCheck.indexOf(parent) === -1) {\n this.parentNodeCheck.push(parent);\n }\n else if (!doCheck && this.checkedNodes.indexOf(parent) !== -1 && this.parentNodeCheck.indexOf(parent) === -1\n && count !== 0) {\n this.parentNodeCheck.push(parent);\n }\n this.updateIndeterminate(parent, doCheck);\n if (this.checkedNodes.indexOf(parent) !== -1 && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(parent), 1);\n }\n }\n };\n /**\n * updates the parent and child check state while changing the checkedNodes via setmodel for hierarchical data\n *\n * @param {Object[]} subChild - Array of child nodes\n * @param {string} parent - Parent identifier\n * @param {string} node - Current node identifier\n * @param {boolean} doCheck - Boolean indicating whether to perform a check\n * @param {string} [child] - Optional child identifier\n * @returns {void}\n * @private\n */\n TreeView.prototype.updateChildIndeterminate = function (subChild, parent, node, doCheck, child) {\n var count = 0;\n for (var j = 0; j < subChild.length; j++) {\n var subId = subChild[parseInt(j.toString(), 10)][this.fields.id] ? subChild[parseInt(j.toString(), 10)][this.fields.id].toString() : '';\n if (this.checkedNodes.indexOf(subId) !== -1) {\n count++;\n }\n var parentElement = this.element.querySelector('[data-uid=\"' + parent + '\"]');\n var indeterminate = parentElement ? select('.' + INDETERMINATE, parentElement) : null;\n var check = parentElement ? select('.' + CHECK, parentElement) : null;\n var element = this.element.querySelector('[data-uid=\"' + subId + '\"]');\n var childElementCheck = element ? select('.' + CHECK, element) : null;\n if (this.checkedNodes.indexOf(node) !== -1 && parentElement && (subId === node) && this.autoCheck) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && parentElement && !element && (subId === node) && !doCheck) {\n if (this.autoCheck) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else {\n if (count !== 0) {\n this.changeState(parentElement, 'indeterminate', null);\n }\n else {\n this.changeState(parentElement, 'uncheck', null);\n }\n }\n }\n else if (this.checkedNodes.indexOf(node) === -1 && element && (subId === node) && !doCheck) {\n this.changeState(element, 'uncheck', null);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && indeterminate && (subId === node) && this.autoCheck && count === 0\n && !doCheck) {\n indeterminate.classList.remove(INDETERMINATE);\n }\n else if (this.checkedNodes.indexOf(node) === -1 && !element && check && (subId === node) && count === 0) {\n this.changeState(parentElement, 'uncheck', null);\n }\n else if (this.checkedNodes.indexOf(subId) === -1 && element && childElementCheck && count === 0) {\n this.changeState(element, 'uncheck', null);\n }\n else if (!element && !parentElement && (subId === node) || (this.parentNodeCheck.indexOf(parent) !== -1) && this.autoCheck) {\n var childElement = this.element.querySelector('[data-uid=\"' + child + '\"]');\n if (doCheck && count !== 0) {\n this.changeState(childElement, 'indeterminate', null);\n }\n else if (doCheck && count === subChild.length && this.checkedNodes.indexOf(parent) === -1) {\n this.checkedNodes.push(parent);\n }\n else if (!doCheck && count === 0 && this.parentNodeCheck.indexOf(parent) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(parent));\n }\n if (this.parentNodeCheck.indexOf(parent) === -1) {\n this.parentNodeCheck.push(parent);\n }\n }\n var innerChild = getValue(this.fields.child.toString(), subChild[parseInt(j.toString(), 10)]);\n if (innerChild) {\n this.updateChildIndeterminate(innerChild, subId, node, doCheck, child);\n }\n }\n };\n TreeView.prototype.changeState = function (wrapper, state, e, isPrevent, isAdd, doCheck) {\n var _this = this;\n var eventArgs;\n var currLi = closest(wrapper, '.' + LISTITEM);\n if (wrapper === currLi) {\n wrapper = select('.' + CHECKBOXWRAP, currLi);\n }\n if (!isPrevent) {\n this.checkActionNodes = [];\n eventArgs = this.getCheckEvent(currLi, state, e);\n this.trigger('nodeChecking', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.nodeCheckAction(wrapper, state, currLi, observedArgs, e, isPrevent, isAdd, doCheck);\n }\n });\n }\n else {\n this.nodeCheckAction(wrapper, state, currLi, eventArgs, e, isPrevent, isAdd, doCheck);\n }\n };\n TreeView.prototype.nodeCheckAction = function (wrapper, state, currLi, eventArgs, e, isPrevent, isAdd, doCheck) {\n var ariaState;\n var frameSpan = wrapper.getElementsByClassName(CHECKBOXFRAME)[0];\n if (state === 'check' && !frameSpan.classList.contains(CHECK)) {\n frameSpan.classList.remove(INDETERMINATE);\n frameSpan.classList.add(CHECK);\n this.addCheck(currLi);\n ariaState = 'true';\n }\n else if (state === 'uncheck' && (frameSpan.classList.contains(CHECK) || frameSpan.classList.contains(INDETERMINATE))) {\n removeClass([frameSpan], [CHECK, INDETERMINATE]);\n this.removeCheck(currLi);\n ariaState = 'false';\n }\n else if (state === 'indeterminate' && this.autoCheck) {\n frameSpan.classList.remove(CHECK);\n frameSpan.classList.add(INDETERMINATE);\n this.removeCheck(currLi);\n ariaState = 'mixed';\n }\n ariaState = state === 'check' ? 'true' : state === 'uncheck' ? 'false' : ariaState;\n if (!isNOU(ariaState)) {\n currLi.setAttribute('aria-checked', ariaState);\n }\n if (isAdd) {\n var data = [].concat([], this.checkActionNodes);\n eventArgs = this.getCheckEvent(currLi, state, e);\n if (isUndefined(isPrevent)) {\n eventArgs.data = data;\n }\n }\n if (doCheck !== undefined) {\n this.ensureStateChange(currLi, doCheck);\n }\n if (!isPrevent) {\n if (!isNOU(ariaState)) {\n currLi.setAttribute('aria-checked', ariaState);\n eventArgs.data[0].checked = ariaState;\n this.trigger('nodeChecked', eventArgs);\n this.checkActionNodes = [];\n }\n }\n };\n TreeView.prototype.addCheck = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.checkedNodes.indexOf(id) === -1) {\n this.checkedNodes.push(id);\n }\n };\n TreeView.prototype.removeCheck = function (liEle) {\n var index = this.checkedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.checkedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.getCheckEvent = function (currLi, action, e) {\n this.checkActionNodes.push(this.getNodeData(currLi));\n var nodeData = this.checkActionNodes;\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, data: nodeData };\n };\n TreeView.prototype.finalize = function () {\n var firstUl = select('.' + PARENTITEM, this.element);\n if (!isNullOrUndefined(firstUl)) {\n firstUl.setAttribute('role', treeAriaAttr.treeRole);\n this.setMultiSelect(this.allowMultiSelection);\n var firstNode = select('.' + LISTITEM, this.element);\n if (firstNode) {\n firstNode.setAttribute('tabindex', '0');\n this.updateIdAttr(null, firstNode);\n }\n if (this.allowTextWrap) {\n this.updateWrap();\n }\n this.renderReactTemplates();\n this.hasPid = this.rootData[0] ? Object.prototype.hasOwnProperty.call(this.rootData[0], this.fields.parentID) : false;\n this.doExpandAction();\n }\n };\n TreeView.prototype.setTextWrap = function () {\n (this.allowTextWrap ? addClass : removeClass)([this.element], LISTWRAP);\n if (Browser.isIE) {\n (this.allowTextWrap ? addClass : removeClass)([this.element], IELISTWRAP);\n }\n };\n TreeView.prototype.updateWrap = function (ulEle) {\n if (!this.fullRowSelect) {\n return;\n }\n var liEle = ulEle ? selectAll('.' + LISTITEM, ulEle) : this.liList;\n var length = liEle.length;\n for (var i = 0; i < length; i++) {\n this.calculateWrap(liEle[parseInt(i.toString(), 10)]);\n }\n };\n TreeView.prototype.calculateWrap = function (liEle) {\n var element = select('.' + FULLROW, liEle);\n if (element && element.nextElementSibling) {\n element.style.height = this.allowTextWrap ? element.nextElementSibling.offsetHeight + 'px' : '';\n }\n };\n TreeView.prototype.doExpandAction = function () {\n var _this = this;\n var eUids = this.expandedNodes;\n if (!this.loadOnDemand && this.fields.dataSource instanceof DataManager) {\n this.isInitalExpand = this.treeData.filter(function (e) { return e[_this.fields.expanded] === true; }).length > 0\n ? true\n : this.isInitalExpand;\n }\n if (this.isInitalExpand && eUids.length > 0) {\n this.setProperties({ expandedNodes: [] }, true);\n if (this.fields.dataSource instanceof DataManager) {\n this.expandGivenNodes(eUids);\n }\n else {\n for (var i = 0; i < eUids.length; i++) {\n var eNode = select('[data-uid=\"' + eUids[parseInt(i.toString(), 10)] + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null);\n }\n }\n else {\n if (eUids[parseInt(i.toString(), 10)] && this.expandChildren.indexOf(eUids[parseInt(i.toString(), 10)]) === -1) {\n this.expandChildren.push(eUids[parseInt(i.toString(), 10)].toString());\n }\n continue;\n }\n }\n this.afterFinalized();\n }\n }\n else {\n this.afterFinalized();\n }\n };\n TreeView.prototype.expandGivenNodes = function (arr) {\n var _this = this;\n this.expandCallback(arr[this.index], function () {\n _this.index++;\n if (_this.index < arr.length) {\n _this.expandGivenNodes(arr);\n }\n else {\n _this.afterFinalized();\n }\n });\n if (this.index > 0) {\n this.index = 0;\n }\n };\n TreeView.prototype.expandCallback = function (eUid, callback) {\n var eNode = select('[data-uid=\"' + eUid + '\"]', this.element);\n if (!isNOU(eNode)) {\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, eNode));\n if (!isNOU(icon)) {\n this.expandAction(eNode, icon, null, false, callback);\n }\n callback();\n }\n else {\n callback();\n }\n };\n TreeView.prototype.afterFinalized = function () {\n this.doSelectionAction();\n this.updateCheckedProp();\n this.isAnimate = true;\n this.isInitalExpand = false;\n if ((!this.isLoaded || this.isFieldChange) && !this.isNodeDropped) {\n var eventArgs = { data: this.treeData };\n this.trigger('dataBound', eventArgs);\n }\n this.isLoaded = true;\n this.isNodeDropped = false;\n };\n TreeView.prototype.doSelectionAction = function () {\n var sNodes = selectAll('.' + SELECTED, this.element);\n var sUids = this.selectedNodes;\n if (sUids.length > 0) {\n this.setProperties({ selectedNodes: [] }, true);\n for (var i = 0; i < sUids.length; i++) {\n var sNode = select('[data-uid=\"' + sUids[parseInt(i.toString(), 10)] + '\"]', this.element);\n if (sNode && !(sNode.classList.contains('e-active'))) {\n this.selectNode(sNode, null, true);\n }\n else {\n this.selectedNodes.push(sUids[parseInt(i.toString(), 10)]);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n }\n else {\n this.selectGivenNodes(sNodes);\n }\n removeClass(sNodes, SELECTED);\n };\n TreeView.prototype.selectGivenNodes = function (sNodes) {\n for (var i = 0; i < sNodes.length; i++) {\n if (!sNodes[parseInt(i.toString(), 10)].classList.contains('e-disable')) {\n this.selectNode(sNodes[parseInt(i.toString(), 10)], null, true);\n }\n if (!this.allowMultiSelection) {\n break;\n }\n }\n };\n TreeView.prototype.clickHandler = function (event) {\n var target = Browser.isDevice && event.originalEvent.changedTouches && !Browser.isIos\n ? document.elementFromPoint(event.originalEvent.changedTouches[0].clientX, event.originalEvent.changedTouches[0].clientY)\n : event.originalEvent.target;\n EventHandler.remove(this.element, 'contextmenu', this.preventContextMenu);\n if (!target || this.dragStartAction) {\n return;\n }\n else {\n var classList = target.classList;\n var li = closest(target, '.' + LISTITEM);\n if (!li || (li.classList.contains(PREVENTSELECT) && !(classList.contains(EXPANDABLE) || classList.contains(COLLAPSIBLE)))) {\n return;\n }\n else if (event.originalEvent.which !== 3) {\n var rippleElement = select('.' + RIPPLEELMENT, li);\n var rippleIcons = select('.' + ICON, li);\n this.removeHover();\n this.setFocusElement(li);\n if (this.showCheckBox && !li.classList.contains('e-disable')) {\n var checkWrapper = closest(target, '.' + CHECKBOXWRAP);\n if (!isNOU(checkWrapper)) {\n var checkElement = select('.' + CHECKBOXFRAME, checkWrapper);\n this.validateCheckNode(checkWrapper, checkElement.classList.contains(CHECK), li, event.originalEvent);\n this.triggerClickEvent(event.originalEvent, li);\n return;\n }\n }\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(li, target, event);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, target, event);\n }\n else if (rippleElement && rippleIcons) {\n if (rippleIcons.classList.contains(RIPPLE) && rippleIcons.classList.contains(EXPANDABLE)) {\n this.expandAction(li, rippleIcons, event);\n }\n else if (rippleIcons.classList.contains(RIPPLE) && rippleIcons.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(li, rippleIcons, event);\n }\n else if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n else {\n if (!classList.contains(PARENTITEM) && !classList.contains(LISTITEM)) {\n this.toggleSelect(li, event.originalEvent, false);\n }\n }\n }\n if (event.originalEvent.which === 3) {\n this.isRightClick = true;\n }\n this.triggerClickEvent(event.originalEvent, li);\n }\n };\n TreeView.prototype.nodeCheckedEvent = function (wrapper, isCheck, e) {\n var eventArgs = this.getCheckEvent(wrapper, isCheck ? 'uncheck' : 'check', e);\n eventArgs.data = eventArgs.data.splice(0, eventArgs.data.length - 1);\n this.trigger('nodeChecked', eventArgs);\n };\n TreeView.prototype.updateOldCheckedData = function (data) {\n var dataManager = new DataManager(data);\n var childItems = dataManager.executeLocal(new Query().where('isChecked', 'equal', 'true', true));\n var uncheckedItems = dataManager.executeLocal(new Query().where('isChecked', 'equal', 'false', true));\n if (uncheckedItems.length > 0) {\n var index = this.OldCheckedData.findIndex(function (e) { return e['id'] === uncheckedItems[0]['id']; });\n if (index !== -1) {\n this.OldCheckedData.splice(index, 1);\n return;\n }\n }\n if (childItems.length > 0) {\n var index = this.OldCheckedData.findIndex(function (e) { return e['id'] === childItems[0]['id']; });\n if (index === -1) {\n this.OldCheckedData.push(childItems[0]);\n return;\n }\n }\n };\n TreeView.prototype.triggerClickEvent = function (e, li) {\n var eventArgs = {\n event: e,\n node: li\n };\n this.trigger('nodeClicked', eventArgs);\n };\n TreeView.prototype.expandNode = function (currLi, icon, loaded) {\n var _this = this;\n this.renderReactTemplates();\n if (icon.classList.contains(LOAD)) {\n this.hideSpinner(icon);\n }\n if (!this.initialRender) {\n icon.classList.add('interaction');\n }\n if (loaded !== true || (loaded === true && currLi.classList.contains('e-expanded'))) {\n if (this.preventExpand !== true) {\n removeClass([icon], EXPANDABLE);\n addClass([icon], COLLAPSIBLE);\n var start_1 = 0;\n var end_1 = 0;\n var ul_1 = select('.' + PARENTITEM, currLi);\n var liEle_1 = currLi;\n this.setHeight(liEle_1, ul_1);\n var activeElement_1 = select('.' + LISTITEM + '.' + ACTIVE, currLi);\n if (this.isAnimate && !this.isRefreshed) {\n this.aniObj.animate(ul_1, {\n name: this.animation.expand.effect,\n duration: (this.animation.expand.duration === 0 && animationMode === 'Enable') ? 400 : this.animation.expand.duration,\n timingFunction: this.animation.expand.easing,\n begin: function () {\n liEle_1.style.overflow = 'hidden';\n if (!isNullOrUndefined(activeElement_1) && activeElement_1 instanceof HTMLElement) {\n activeElement_1.classList.add(ITEM_ANIMATION_ACTIVE);\n }\n start_1 = liEle_1.offsetHeight;\n end_1 = select('.' + TEXTWRAP, currLi).offsetHeight;\n },\n progress: function (args) {\n args.element.style.display = 'block';\n _this.animateHeight(args, start_1, end_1);\n },\n end: function (args) {\n args.element.style.display = 'block';\n if (!isNullOrUndefined(activeElement_1) && activeElement_1 instanceof HTMLElement) {\n activeElement_1.classList.remove(ITEM_ANIMATION_ACTIVE);\n }\n _this.expandedNode(liEle_1, ul_1, icon);\n }\n });\n }\n else {\n this.expandedNode(liEle_1, ul_1, icon);\n }\n }\n }\n else {\n var ul = select('.' + PARENTITEM, currLi);\n ul.style.display = 'none';\n if (this.fields.dataSource instanceof DataManager === true) {\n this.preventExpand = false;\n }\n }\n if (this.initialRender) {\n icon.classList.add('interaction');\n }\n };\n TreeView.prototype.expandedNode = function (currLi, ul, icon) {\n ul.style.display = 'block';\n currLi.style.display = 'block';\n currLi.style.overflow = '';\n currLi.style.height = '';\n removeClass([icon], PROCESS);\n this.addExpand(currLi);\n if (this.allowTextWrap && this.isLoaded && this.isFirstRender) {\n this.updateWrap(currLi);\n this.isFirstRender = false;\n }\n if (this.isLoaded && this.expandArgs && !this.isRefreshed) {\n this.expandArgs = this.getExpandEvent(currLi, null);\n this.expandArgs.isInteracted = this.isInteracted;\n this.trigger('nodeExpanded', this.expandArgs);\n }\n };\n TreeView.prototype.addExpand = function (liEle) {\n liEle.setAttribute('aria-expanded', 'true');\n removeClass([liEle], NODECOLLAPSED);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.expandedNodes.indexOf(id) === -1) {\n this.expandedNodes.push(id);\n }\n };\n TreeView.prototype.collapseNode = function (currLi, icon, e) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n var colArgs;\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(currLi, e);\n this.isInteracted = colArgs.isInteracted;\n this.trigger('nodeCollapsing', colArgs, function (observedArgs) {\n if (observedArgs.cancel) {\n removeClass([icon], PROCESS);\n }\n else {\n _this.nodeCollapseAction(currLi, icon, observedArgs);\n }\n });\n }\n else {\n this.nodeCollapseAction(currLi, icon, colArgs);\n }\n };\n TreeView.prototype.nodeCollapseAction = function (currLi, icon, colArgs) {\n var _this = this;\n removeClass([icon], COLLAPSIBLE);\n addClass([icon], EXPANDABLE);\n var start = 0;\n var end = 0;\n var ul = select('.' + PARENTITEM, currLi);\n var liEle = currLi;\n var activeElement = select('.' + LISTITEM + '.' + ACTIVE, currLi);\n if (this.isAnimate) {\n this.aniObj.animate(ul, {\n name: this.animation.collapse.effect,\n duration: (this.animation.collapse.duration === 0 && animationMode === 'Enable') ? 400 : this.animation.collapse.duration,\n timingFunction: this.animation.collapse.easing,\n begin: function () {\n liEle.style.overflow = 'hidden';\n if (!isNullOrUndefined(activeElement) && activeElement instanceof HTMLElement) {\n activeElement.classList.add(ITEM_ANIMATION_ACTIVE);\n }\n start = select('.' + TEXTWRAP, currLi).offsetHeight;\n end = liEle.offsetHeight;\n },\n progress: function (args) {\n _this.animateHeight(args, start, end);\n },\n end: function (args) {\n args.element.style.display = 'none';\n if (!isNullOrUndefined(activeElement) && activeElement instanceof HTMLElement) {\n activeElement.classList.remove(ITEM_ANIMATION_ACTIVE);\n }\n _this.collapsedNode(liEle, ul, icon, colArgs);\n }\n });\n }\n else {\n this.collapsedNode(liEle, ul, icon, colArgs);\n }\n };\n TreeView.prototype.collapsedNode = function (liEle, ul, icon, colArgs) {\n ul.style.display = 'none';\n liEle.style.overflow = '';\n liEle.style.height = '';\n removeClass([icon], PROCESS);\n this.removeExpand(liEle);\n if (this.isLoaded) {\n colArgs = this.getExpandEvent(liEle, null);\n colArgs.isInteracted = this.isInteracted;\n this.trigger('nodeCollapsed', colArgs);\n }\n };\n TreeView.prototype.removeExpand = function (liEle, toRemove) {\n if (toRemove) {\n liEle.removeAttribute('aria-expanded');\n }\n else {\n this.disableExpandAttr(liEle);\n }\n var index = this.expandedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.expandedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.disableExpandAttr = function (liEle) {\n liEle.setAttribute('aria-expanded', 'false');\n addClass([liEle], NODECOLLAPSED);\n };\n TreeView.prototype.setHeight = function (currLi, ul) {\n ul.style.display = 'block';\n ul.style.visibility = 'hidden';\n currLi.style.height = currLi.offsetHeight + 'px';\n ul.style.display = 'none';\n ul.style.visibility = '';\n };\n TreeView.prototype.animateHeight = function (args, start, end) {\n var remaining = (args.duration - args.timeStamp) / args.duration;\n var currentHeight = (end - start) * remaining + start;\n args.element.parentElement.style.height = currentHeight + 'px';\n };\n TreeView.prototype.renderChildNodes = function (parentLi, expandChild, callback, loaded) {\n var _this = this;\n var eicon = select('div.' + ICON, parentLi);\n if (isNOU(eicon)) {\n return;\n }\n this.showSpinner(eicon);\n var childItems;\n if (this.fields.dataSource instanceof DataManager) {\n var level = this.parents(parentLi, '.' + PARENTITEM).length;\n var mapper_2 = this.getChildFields(this.fields, level, 1);\n if (isNOU(mapper_2) || isNOU(mapper_2.dataSource)) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n return;\n }\n this.treeList.push('false');\n if (this.fields.dataSource instanceof DataManager && this.isOffline) {\n this.treeList.pop();\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'));\n this.loadChild(childItems, mapper_2, eicon, parentLi, expandChild, callback, loaded);\n }\n else {\n mapper_2.dataSource.executeQuery(this.getQuery(mapper_2, parentLi.getAttribute('data-uid'))).then(function (e) {\n _this.treeList.pop();\n childItems = e.result;\n if (_this.dataType === 1) {\n _this.dataType = 2;\n }\n _this.loadChild(childItems, mapper_2, eicon, parentLi, expandChild, callback, loaded);\n }).catch(function (e) {\n _this.trigger('actionFailure', { error: e });\n });\n }\n }\n else {\n childItems = this.getChildNodes(this.treeData, parentLi.getAttribute('data-uid'), false, parseFloat(parentLi.getAttribute('aria-level')) + 1);\n this.currentLoadData = this.getSortedData(childItems);\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n if (eicon.classList.contains(LOAD)) {\n this.hideSpinner(eicon);\n }\n this.removeExpand(parentLi, true);\n return;\n }\n else {\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, this.currentLoadData, this.listBaseOption));\n this.expandNode(parentLi, eicon, loaded);\n this.setSelectionForChildNodes(childItems);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.disableTreeNodes(childItems);\n this.renderSubChild(parentLi, expandChild, loaded);\n }\n }\n };\n TreeView.prototype.loadChild = function (childItems, mapper, eicon, parentLi, expandChild, callback, loaded) {\n this.currentLoadData = childItems;\n if (isNOU(childItems) || childItems.length === 0) {\n detach(eicon);\n this.removeExpand(parentLi, true);\n }\n else {\n this.updateListProp(mapper);\n if (this.fields.dataSource instanceof DataManager && !this.isOffline) {\n var id = parentLi.getAttribute('data-uid');\n var nodeData = this.getNodeObject(id);\n setValue('child', childItems, nodeData);\n }\n this.listBaseOption.ariaAttributes.level = parseFloat(parentLi.getAttribute('aria-level')) + 1;\n parentLi.appendChild(ListBase.createList(this.createElement, childItems, this.listBaseOption));\n this.expandNode(parentLi, eicon, loaded);\n this.setSelectionForChildNodes(childItems);\n this.ensureCheckNode(parentLi);\n this.finalizeNode(parentLi);\n this.disableTreeNodes(childItems);\n this.renderSubChild(parentLi, expandChild, loaded);\n }\n if (callback) {\n callback();\n }\n if (expandChild) {\n this.expandedNodes.push(parentLi.getAttribute('data-uid'));\n }\n if (this.treeList.length === 0 && !this.isLoaded) {\n this.finalize();\n }\n };\n TreeView.prototype.disableTreeNodes = function (childItems) {\n var i = 0;\n while (i < childItems.length) {\n var id = childItems[parseInt(i.toString(), 10)][this.fields.id]\n ? childItems[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.disableNode !== undefined && this.disableNode.indexOf(id) !== -1) {\n this.doDisableAction([id]);\n }\n i++;\n }\n };\n /**\n * Sets the child Item in selectedState while rendering the child node\n *\n * @param {Object[]} nodes - Array of nodes\n * @returns {void}\n */\n TreeView.prototype.setSelectionForChildNodes = function (nodes) {\n var i;\n for (i = 0; i < nodes.length; i++) {\n var id = nodes[parseInt(i.toString(), 10)][this.fields.id]\n ? nodes[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.selectedNodes !== undefined && this.selectedNodes.indexOf(id) !== -1) {\n this.doSelectionAction();\n }\n }\n };\n TreeView.prototype.ensureCheckNode = function (element) {\n if (this.showCheckBox) {\n this.ele = (this.checkedElement) ? this.checkedElement.indexOf(element.getAttribute('data-uid')) : null;\n if (this.autoCheck) {\n this.ensureChildCheckState(element);\n this.ensureParentCheckState(element);\n }\n }\n this.currentLoadData = null;\n };\n TreeView.prototype.getFields = function (mapper, nodeLevel, dataLevel) {\n if (nodeLevel === dataLevel) {\n return mapper;\n }\n else {\n return this.getFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildFields = function (mapper, nodeLevel, dataLevel) {\n if (nodeLevel === dataLevel) {\n return this.getChildMapper(mapper);\n }\n else {\n return this.getChildFields(this.getChildMapper(mapper), nodeLevel, dataLevel + 1);\n }\n };\n TreeView.prototype.getChildMapper = function (mapper) {\n return (typeof mapper.child === 'string' || isNOU(mapper.child)) ? mapper : mapper.child;\n };\n TreeView.prototype.getChildNodes = function (obj, parentId, isRoot, level) {\n var _this = this;\n if (isRoot === void 0) { isRoot = false; }\n var childNodes;\n if (isNOU(obj)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n return this.getChildGroup(this.groupedData, parentId, isRoot);\n }\n else {\n if (typeof this.fields.child === 'string') {\n var index = obj.findIndex(function (data) {\n return getValue(_this.fields.id, data) &&\n getValue(_this.fields.id, data).toString() === parentId;\n });\n if (index !== -1) {\n return getValue(this.fields.child, obj[parseInt(index.toString(), 10)]);\n }\n if (index === -1) {\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var tempArray = getValue(this.fields.child, obj[parseInt(i.toString(), 10)]);\n var childIndex = !isNOU(tempArray)\n ? tempArray.findIndex(function (data) {\n return getValue(_this.fields.id, data) &&\n getValue(_this.fields.id, data).toString() === parentId;\n })\n : -1;\n if (childIndex !== -1) {\n return getValue(this.fields.child, tempArray[parseInt(childIndex.toString(), 10)]);\n }\n else if (!isNOU(tempArray)) {\n childNodes = this.getChildNodes(tempArray, parentId);\n if (childNodes !== undefined) {\n break;\n }\n }\n }\n }\n }\n else if (this.isChildObject()) {\n var tempField = !isNOU(level) ? this.fields : this.fields.child;\n var i = 1;\n while (i < level) {\n if (!isNOU(tempField.child)) {\n tempField = tempField.child;\n }\n else {\n break;\n }\n i++;\n }\n this.updateListProp(tempField);\n var index = obj.findIndex(function (data) {\n return getValue(_this.fields.id, data) &&\n getValue(_this.fields.id, data).toString() === parentId;\n });\n if (index !== -1) {\n return getValue('child', obj[parseInt(index.toString(), 10)]);\n }\n if (index === -1) {\n for (var i_1 = 0, objlen = obj.length; i_1 < objlen; i_1++) {\n var tempArray = getValue('child', obj[parseInt(i_1.toString(), 10)]);\n var childIndex = !isNOU(tempArray)\n ? tempArray.findIndex(function (data) {\n return getValue(_this.fields.child.id, data) &&\n getValue(_this.fields.child.id, data).toString() === parentId;\n })\n : -1;\n if (childIndex !== -1) {\n return getValue('child', tempArray[parseInt(childIndex.toString(), 10)]);\n }\n else if (!isNOU(tempArray)) {\n childNodes = this.getChildNodes(tempArray, parentId, false, level);\n if (childNodes !== undefined) {\n break;\n }\n }\n }\n }\n }\n }\n return childNodes;\n };\n TreeView.prototype.getChildGroup = function (data, parentId, isRoot) {\n var childNodes;\n if (isNOU(data)) {\n return childNodes;\n }\n for (var i = 0, objlen = data.length; i < objlen; i++) {\n if (!isNOU(data[parseInt(i.toString(), 10)][0]) &&\n !isNOU(getValue(this.fields.parentID, data[parseInt(i.toString(), 10)][0]))) {\n if (getValue(this.fields.parentID, data[parseInt(i.toString(), 10)][0]).toString() === parentId) {\n return data[parseInt(i.toString(), 10)];\n }\n }\n else if (isRoot) {\n return data[parseInt(i.toString(), 10)];\n }\n else {\n return [];\n }\n }\n return childNodes;\n };\n TreeView.prototype.renderSubChild = function (element, expandChild, loaded) {\n if (expandChild) {\n var cIcons = selectAll('.' + EXPANDABLE, element);\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[parseInt(i.toString(), 10)];\n if (element.querySelector('.e-icons') !== cIcons[parseInt(i.toString(), 10)]) {\n var curLi = closest(icon, '.' + LISTITEM);\n this.expandArgs = this.getExpandEvent(curLi, null);\n if (loaded !== true) {\n this.trigger('nodeExpanding', this.expandArgs);\n }\n this.renderChildNodes(curLi, expandChild, null, loaded);\n }\n }\n }\n };\n TreeView.prototype.toggleSelect = function (li, e, multiSelect) {\n if (!li.classList.contains('e-disable')) {\n if (this.allowMultiSelection && ((e && e.ctrlKey) || multiSelect) && this.isActive(li)) {\n this.unselectNode(li, e);\n }\n else {\n this.selectNode(li, e, multiSelect);\n }\n }\n };\n TreeView.prototype.isActive = function (li) {\n return li.classList.contains(ACTIVE) ? true : false;\n };\n TreeView.prototype.selectNode = function (li, e, multiSelect) {\n var _this = this;\n if (isNOU(li) || (!this.allowMultiSelection && this.isActive(li) && !isNOU(e))) {\n this.setFocusElement(li);\n return;\n }\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'select', e);\n this.trigger('nodeSelecting', eventArgs, function (observedArgs) {\n if ((!observedArgs.cancel) && !observedArgs.node.classList.contains(PREVENTSELECT)) {\n _this.nodeSelectAction(li, e, observedArgs, multiSelect);\n }\n });\n }\n else {\n this.nodeSelectAction(li, e, eventArgs, multiSelect);\n }\n };\n TreeView.prototype.nodeSelectAction = function (li, e, eventArgs, multiSelect) {\n if (!this.allowMultiSelection || (!multiSelect && (!e || (e && !(e.ctrlKey || e.metaKey))))) {\n this.removeSelectAll();\n }\n if (this.allowMultiSelection && e && e.shiftKey) {\n if (!this.startNode) {\n this.startNode = li;\n }\n var startIndex = this.liList.indexOf(this.startNode);\n var endIndex = this.liList.indexOf(li);\n if (startIndex > endIndex) {\n var temp = startIndex;\n startIndex = endIndex;\n endIndex = temp;\n }\n for (var i = startIndex; i <= endIndex; i++) {\n var currNode = this.liList[parseInt(i.toString(), 10)];\n if (isVisible(currNode) && !currNode.classList.contains('e-disable')) {\n this.addSelect(currNode);\n }\n }\n }\n else {\n this.startNode = li;\n this.addSelect(li);\n }\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n this.isRightClick = false;\n }\n this.isRightClick = false;\n };\n TreeView.prototype.unselectNode = function (li, e) {\n var _this = this;\n var eventArgs;\n if (this.isLoaded) {\n eventArgs = this.getSelectEvent(li, 'un-select', e);\n this.trigger('nodeSelecting', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.nodeUnselectAction(li, observedArgs);\n }\n });\n }\n else {\n this.nodeUnselectAction(li, eventArgs);\n }\n };\n TreeView.prototype.nodeUnselectAction = function (li, eventArgs) {\n this.removeSelect(li);\n this.setFocusElement(li);\n if (this.isLoaded) {\n eventArgs.nodeData = this.getNodeData(li);\n this.trigger('nodeSelected', eventArgs);\n }\n };\n TreeView.prototype.setFocusElement = function (li) {\n if (!isNOU(li)) {\n var focusedNode = this.getFocusedNode();\n if (focusedNode) {\n removeClass([focusedNode], FOCUS);\n focusedNode.setAttribute('tabindex', '-1');\n }\n addClass([li], FOCUS);\n li.setAttribute('tabindex', '0');\n EventHandler.add(li, 'blur', this.focusOut, this);\n this.updateIdAttr(focusedNode, li);\n }\n };\n TreeView.prototype.addSelect = function (liEle) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n var id = liEle.getAttribute('data-uid');\n if (!isNOU(id) && this.selectedNodes.indexOf(id) === -1) {\n this.selectedNodes.push(id);\n }\n };\n TreeView.prototype.removeSelect = function (liEle) {\n if (this.allowMultiSelection) {\n liEle.setAttribute('aria-selected', 'false');\n }\n else {\n liEle.removeAttribute('aria-selected');\n }\n removeClass([liEle], ACTIVE);\n var index = this.selectedNodes.indexOf(liEle.getAttribute('data-uid'));\n if (index > -1) {\n this.selectedNodes.splice(index, 1);\n }\n };\n TreeView.prototype.removeSelectAll = function () {\n var selectedLI = this.element.querySelectorAll('.' + ACTIVE);\n for (var _i = 0, selectedLI_1 = selectedLI; _i < selectedLI_1.length; _i++) {\n var ele = selectedLI_1[_i];\n if (this.allowMultiSelection) {\n ele.setAttribute('aria-selected', 'false');\n }\n else {\n ele.removeAttribute('aria-selected');\n }\n }\n removeClass(selectedLI, ACTIVE);\n this.setProperties({ selectedNodes: [] }, true);\n };\n TreeView.prototype.getSelectEvent = function (currLi, action, e) {\n var nodeData = this.getNodeData(currLi);\n return { action: action, cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData };\n };\n TreeView.prototype.setExpandOnType = function () {\n this.expandOnType = (this.expandOn === 'Auto') ? (Browser.isDevice ? 'Click' : 'DblClick') : this.expandOn;\n };\n TreeView.prototype.expandHandler = function (e) {\n var target = Browser.isDevice && e.originalEvent.changedTouches && !Browser.isIos\n ? document.elementFromPoint(e.originalEvent.changedTouches[0].clientX, e.originalEvent.changedTouches[0].clientY)\n : e.originalEvent.target;\n if (!target || target.classList.contains(INPUT) || target.classList.contains(ROOT) ||\n target.classList.contains(PARENTITEM) || target.classList.contains(LISTITEM) ||\n target.classList.contains(ICON) || this.showCheckBox && closest(target, '.' + CHECKBOXWRAP)) {\n return;\n }\n else {\n this.expandCollapseAction(closest(target, '.' + LISTITEM), e);\n }\n };\n TreeView.prototype.expandCollapseAction = function (currLi, e) {\n var icon = select('div.' + ICON, currLi);\n if (!icon || icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n var classList = icon.classList;\n if (classList.contains(EXPANDABLE)) {\n this.expandAction(currLi, icon, e);\n }\n else if (classList.contains(COLLAPSIBLE)) {\n this.collapseNode(currLi, icon, e);\n }\n }\n };\n TreeView.prototype.expandAction = function (currLi, icon, e, expandChild, callback) {\n var _this = this;\n if (icon.classList.contains(PROCESS)) {\n return;\n }\n else {\n addClass([icon], PROCESS);\n }\n if (this.isLoaded && !this.isRefreshed) {\n this.expandArgs = this.getExpandEvent(currLi, e);\n this.isInteracted = this.expandArgs.isInteracted;\n this.trigger('nodeExpanding', this.expandArgs, function (observedArgs) {\n if (observedArgs.cancel) {\n removeClass([icon], PROCESS);\n }\n else {\n _this.nodeExpandAction(currLi, icon, expandChild, callback);\n }\n });\n }\n else {\n this.nodeExpandAction(currLi, icon, expandChild, callback);\n }\n };\n TreeView.prototype.nodeExpandAction = function (currLi, icon, expandChild, callback) {\n var ul = select('.' + PARENTITEM, currLi);\n if (ul && ul.nodeName === 'UL') {\n this.expandNode(currLi, icon);\n }\n else {\n this.isFirstRender = true;\n this.renderChildNodes(currLi, expandChild, callback);\n var liEles = selectAll('.' + LISTITEM, currLi);\n for (var i = 0; i < liEles.length; i++) {\n var id = this.getId(liEles[parseInt(i.toString(), 10)]);\n if (this.expandChildren.indexOf(id) !== -1 && this.expandChildren !== undefined) {\n var icon_1 = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEles[parseInt(i.toString(), 10)]));\n if (!isNOU(icon_1)) {\n this.expandAction(liEles[parseInt(i.toString(), 10)], icon_1, null);\n }\n this.expandChildren.splice(this.expandChildren.indexOf(id), 1);\n }\n }\n }\n };\n TreeView.prototype.keyActionHandler = function (e) {\n var _this = this;\n var target = e.target;\n var focusedNode = this.getFocusedNode();\n if (target && target.classList.contains(INPUT)) {\n var inpEle = target;\n if (e.action === 'enter') {\n inpEle.blur();\n }\n else if (e.action === 'escape') {\n inpEle.value = this.oldText;\n inpEle.blur();\n }\n return;\n }\n e.preventDefault();\n var eventArgs = {\n cancel: false,\n event: e,\n node: focusedNode\n };\n this.trigger('keyPress', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n switch (e.action) {\n case 'space':\n if (_this.showCheckBox) {\n _this.checkNode(e);\n }\n else {\n _this.toggleSelect(focusedNode, e);\n }\n break;\n case 'moveRight':\n _this.openNode(_this.enableRtl ? false : true, e);\n break;\n case 'moveLeft':\n _this.openNode(_this.enableRtl ? true : false, e);\n break;\n case 'shiftDown':\n _this.shiftKeySelect(true, e);\n break;\n case 'moveDown':\n case 'ctrlDown':\n case 'csDown':\n _this.navigateNode(true);\n break;\n case 'shiftUp':\n _this.shiftKeySelect(false, e);\n break;\n case 'moveUp':\n case 'ctrlUp':\n case 'csUp':\n _this.navigateNode(false);\n break;\n case 'home':\n case 'shiftHome':\n case 'ctrlHome':\n case 'csHome':\n _this.navigateRootNode(true);\n break;\n case 'end':\n case 'shiftEnd':\n case 'ctrlEnd':\n case 'csEnd':\n _this.navigateRootNode(false);\n break;\n case 'enter':\n case 'ctrlEnter':\n case 'shiftEnter':\n case 'csEnter':\n case 'shiftSpace':\n case 'ctrlSpace':\n _this.toggleSelect(focusedNode, e);\n break;\n case 'f2':\n if (_this.allowEditing && !focusedNode.classList.contains('e-disable')) {\n _this.createTextbox(focusedNode);\n }\n break;\n case 'ctrlA':\n if (_this.allowMultiSelection) {\n var sNodes = selectAll('.' + LISTITEM + ':not(.' + ACTIVE + ')', _this.element);\n _this.selectGivenNodes(sNodes);\n }\n break;\n }\n }\n });\n };\n TreeView.prototype.navigateToFocus = function (isUp) {\n var focusNode = this.getFocusedNode().querySelector('.' + TEXTWRAP);\n var pos = focusNode.getBoundingClientRect();\n var parent = this.getScrollParent(this.element);\n if (!isNOU(parent)) {\n var parentPos = parent.getBoundingClientRect();\n if (pos.bottom > parentPos.bottom) {\n parent.scrollTop += pos.bottom - parentPos.bottom;\n }\n else if (pos.top < parentPos.top) {\n parent.scrollTop -= parentPos.top - pos.top;\n }\n }\n var isVisible = this.isVisibleInViewport(focusNode);\n if (!isVisible) {\n focusNode.scrollIntoView(isUp);\n }\n };\n TreeView.prototype.isVisibleInViewport = function (txtWrap) {\n var pos = txtWrap.getBoundingClientRect();\n return (pos.top >= 0 && pos.left >= 0 && pos.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n pos.right <= (window.innerWidth || document.documentElement.clientWidth));\n };\n TreeView.prototype.getScrollParent = function (node) {\n if (isNOU(node)) {\n return null;\n }\n return (node.scrollHeight > node.clientHeight) ? node : this.getScrollParent(node.parentElement);\n };\n TreeView.prototype.shiftKeySelect = function (isTowards, e) {\n if (this.allowMultiSelection) {\n var focusedNode = this.getFocusedNode();\n var nextNode = isTowards ? this.getNextNode(focusedNode) : this.getPrevNode(focusedNode);\n this.removeHover();\n this.setFocusElement(nextNode);\n this.toggleSelect(nextNode, e, false);\n this.navigateToFocus(!isTowards);\n }\n else {\n this.navigateNode(isTowards);\n }\n };\n TreeView.prototype.checkNode = function (e) {\n var focusedNode = this.getFocusedNode();\n var checkWrap = select('.' + CHECKBOXWRAP, focusedNode);\n var isChecked = select(' .' + CHECKBOXFRAME, checkWrap).classList.contains(CHECK);\n if (!focusedNode.classList.contains('e-disable')) {\n if (focusedNode.getElementsByClassName('e-checkbox-disabled').length === 0) {\n this.validateCheckNode(checkWrap, isChecked, focusedNode, e);\n }\n }\n };\n TreeView.prototype.validateCheckNode = function (checkWrap, isCheck, li, e) {\n var _this = this;\n var currLi = closest(checkWrap, '.' + LISTITEM);\n this.checkActionNodes = [];\n var ariaState = !isCheck ? 'true' : 'false';\n if (!isNOU(ariaState)) {\n currLi.setAttribute('aria-checked', ariaState);\n }\n var eventArgs = this.getCheckEvent(currLi, isCheck ? 'uncheck' : 'check', e);\n this.trigger('nodeChecking', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.nodeCheckingAction(checkWrap, isCheck, li, observedArgs, e);\n }\n });\n };\n TreeView.prototype.nodeCheckingAction = function (checkWrap, isCheck, li, eventArgs, e) {\n if (this.checkedElement.indexOf(li.getAttribute('data-uid')) === -1) {\n this.checkedElement.push(li.getAttribute('data-uid'));\n if (this.autoCheck) {\n var child = this.getChildNodes(this.treeData, li.getAttribute('data-uid'));\n if (child !== null) {\n this.allCheckNode(child, this.checkedElement, null, null, false);\n }\n else {\n child = null;\n }\n }\n }\n this.changeState(checkWrap, isCheck ? 'uncheck' : 'check', e, true);\n if (this.autoCheck) {\n this.ensureChildCheckState(li);\n this.updateOldCheckedData([this.getNodeData(li)]);\n this.ensureParentCheckState(closest(closest(li, '.' + PARENTITEM), '.' + LISTITEM));\n var doCheck = void 0;\n if (eventArgs.action === 'check') {\n doCheck = true;\n }\n else if (eventArgs.action === 'uncheck') {\n doCheck = false;\n }\n this.ensureStateChange(li, doCheck);\n }\n this.nodeCheckedEvent(checkWrap, isCheck, e);\n };\n /**\n * Update checkedNodes when UI interaction happens before the child node renders in DOM\n *\n * @param {Element} li - The list item element\n * @param {boolean} [doCheck] - Optional parameter to specify whether to perform a check\n * @returns {void}\n */\n TreeView.prototype.ensureStateChange = function (li, doCheck) {\n var childElement = select('.' + PARENTITEM, li);\n var parentIndex = li.getAttribute('data-uid');\n var mapper = this.fields;\n if (this.dataType === 1 && this.autoCheck) {\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.parentID, 'equal', parentIndex, true));\n for (var i = 0; i < resultData.length; i++) {\n var resultId = resultData[parseInt(i.toString(), 10)][this.fields.id]\n ? resultData[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n var isCheck = resultData[parseInt(i.toString(), 10)][this.fields.isChecked]\n ? resultData[parseInt(i.toString(), 10)][this.fields.isChecked].toString()\n : null;\n if (this.checkedNodes.indexOf(parentIndex) !== -1 && this.checkedNodes.indexOf(resultId) === -1) {\n this.checkedNodes.push(resultId);\n var childItems = this.getChildNodes(this.treeData, resultId);\n this.getChildItems(childItems, doCheck);\n if (this.parentNodeCheck.indexOf(resultId) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(resultId), 1);\n }\n }\n else if (this.checkedNodes.indexOf(parentIndex) === -1 && childElement === null &&\n this.checkedNodes.indexOf(resultId) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(resultId), 1);\n if (isCheck === 'true') {\n this.updateField(this.treeData, this.fields, resultId, 'isChecked', null);\n }\n if (this.checkedNodes.indexOf(parentIndex) === -1 && childElement === null ||\n this.parentNodeCheck.indexOf(resultId) !== -1) {\n var childNodes = this.getChildNodes(this.treeData, resultId);\n this.getChildItems(childNodes, doCheck);\n if (this.parentNodeCheck.indexOf(resultId) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(resultId), 1);\n }\n }\n }\n else {\n var childItems = this.getChildNodes(this.treeData, resultId);\n this.getChildItems(childItems, doCheck);\n }\n }\n }\n else if (this.dataType === 1 && !this.autoCheck) {\n if (!doCheck) {\n var checkedData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.isChecked, 'equal', true, false));\n for (var i = 0; i < checkedData.length; i++) {\n var id = checkedData[parseInt(i.toString(), 10)][this.fields.id]\n ? checkedData[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.checkedNodes.indexOf(id) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(id), 1);\n }\n this.updateField(this.treeData, this.fields, id, 'isChecked', null);\n }\n this.checkedNodes = [];\n }\n else {\n for (var i = 0; i < this.treeData.length; i++) {\n var checkedId = this.treeData[parseInt(i.toString(), 10)][this.fields.id]\n ? this.treeData[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n if (this.checkedNodes.indexOf(checkedId) === -1) {\n this.checkedNodes.push(checkedId);\n }\n }\n }\n }\n else {\n var childItems = this.getChildNodes(this.treeData, parentIndex);\n if (childItems) {\n this.childStateChange(childItems, parentIndex, childElement, doCheck);\n }\n }\n };\n TreeView.prototype.getChildItems = function (childItems, doCheck) {\n for (var i = 0; i < childItems.length; i++) {\n var childId = childItems[parseInt(i.toString(), 10)][this.fields.id]\n ? childItems[parseInt(i.toString(), 10)][this.fields.id].toString()\n : null;\n var childIsCheck = childItems[parseInt(i.toString(), 10)][this.fields.isChecked]\n ? childItems[parseInt(i.toString(), 10)][this.fields.isChecked].toString()\n : null;\n if (this.checkedNodes.indexOf(childId) !== -1 && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(childId), 1);\n }\n if (this.checkedNodes.indexOf(childId) === -1 && doCheck) {\n this.checkedNodes.push(childId);\n }\n if (childIsCheck === 'true' && !doCheck) {\n this.updateField(this.treeData, this.fields, childId, 'isChecked', null);\n }\n var subChildItems = this.getChildNodes(this.treeData, childId);\n if (subChildItems.length > 0) {\n this.getChildItems(subChildItems, doCheck);\n }\n }\n };\n /**\n * Update checkedNodes when UI interaction happens before the child node renders in DOM for hierarchical DS\n *\n * @param {Object[]} childItems - Array of child items\n * @param {string} parent - Parent identifier\n * @param {Element} childElement - Child DOM element\n * @param {boolean} [doCheck] - Optional parameter to specify whether to perform a check\n * @returns {void}\n */\n TreeView.prototype.childStateChange = function (childItems, parent, childElement, doCheck) {\n for (var i = 0; i < childItems.length; i++) {\n var checkedChild = childItems[parseInt(i.toString(), 10)][this.fields.id] ? childItems[parseInt(i.toString(), 10)][this.fields.id].toString() : '';\n var isCheck = childItems[parseInt(i.toString(), 10)][this.fields.isChecked]\n ? childItems[parseInt(i.toString(), 10)][this.fields.isChecked].toString()\n : null;\n if (this.autoCheck) {\n if (this.checkedNodes.indexOf(parent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n if (this.parentNodeCheck.indexOf(checkedChild) !== -1) {\n this.parentNodeCheck.splice(this.parentNodeCheck.indexOf(checkedChild), 1);\n }\n }\n else if (this.checkedNodes.indexOf(parent) === -1 && this.checkedNodes.indexOf(checkedChild) !== -1 && !doCheck) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(checkedChild), 1);\n if (isCheck === 'true') {\n this.updateField(this.treeData, this.fields, checkedChild, 'isChecked', null);\n }\n }\n }\n else if (!this.autoCheck) {\n if (!doCheck) {\n if (this.checkedNodes.indexOf(checkedChild) !== -1) {\n this.checkedNodes.splice(this.checkedNodes.indexOf(checkedChild), 1);\n }\n this.updateField(this.treeData, this.fields, checkedChild, 'isChecked', null);\n this.checkedNodes = [];\n }\n else {\n if (this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n }\n }\n }\n var subChild = this.getChildNodes([childItems[parseInt(i.toString(), 10)]], checkedChild);\n if (subChild) {\n this.childStateChange(subChild, parent, childElement, doCheck);\n }\n }\n };\n //This method can be used to get all child nodes of a parent by passing the children of a parent along with 'validateCheck' set to false\n TreeView.prototype.allCheckNode = function (child, newCheck, checked, childCheck, validateCheck) {\n if (child) {\n for (var length_1 = 0; length_1 < child.length; length_1++) {\n var childId = getValue(this.fields.id, child[parseInt(length_1.toString(), 10)]);\n var check = this.element.querySelector('[data-uid=\"' + childId + '\"]');\n //Validates isChecked case while no UI interaction has been performed on the node or it's parent\n if (validateCheck !== false && this.checkedElement.indexOf(childId.toString()) === -1) {\n if (((check === null && !isNOU(child[parseInt(length_1.toString(), 10)][this.fields.isChecked]) &&\n newCheck.indexOf(childId.toString()) === -1)\n || childCheck === 0 || checked === 2)) {\n if (child[parseInt(length_1.toString(), 10)][this.fields.isChecked] !== false || checked === 2) {\n newCheck.push(childId.toString());\n }\n else {\n childCheck = null;\n }\n childCheck = (child[parseInt(length_1.toString(), 10)][this.fields.isChecked] !== false || checked === 2) ? 0 : null;\n }\n }\n //Pushes child checked node done thro' UI interaction\n if (newCheck.indexOf(childId.toString()) === -1 && isNOU(checked)) {\n newCheck.push(childId.toString());\n }\n var hierChildId = getValue(this.fields.child.toString(), child[parseInt(length_1.toString(), 10)]);\n //Gets if any next level children are available for child nodes\n if (getValue(this.fields.hasChildren, child[parseInt(length_1.toString(), 10)]) === true || hierChildId) {\n var id = getValue(this.fields.id, child[parseInt(length_1.toString(), 10)]);\n var childId_1 = void 0;\n if (this.dataType === 1) {\n childId_1 = this.getChildNodes(this.treeData, id.toString());\n }\n else {\n childId_1 = hierChildId;\n }\n if (childId_1) {\n if (isNOU(validateCheck)) {\n this.allCheckNode(childId_1, newCheck, checked, childCheck);\n }\n else {\n this.allCheckNode(childId_1, newCheck, checked, childCheck, validateCheck);\n }\n childCheck = null;\n }\n }\n childCheck = null;\n }\n }\n };\n TreeView.prototype.openNode = function (toBeOpened, e) {\n var focusedNode = this.getFocusedNode();\n var icon = select('div.' + ICON, focusedNode);\n if (toBeOpened) {\n if (!icon) {\n return;\n }\n else if (icon.classList.contains(EXPANDABLE)) {\n this.expandAction(focusedNode, icon, e);\n }\n else {\n this.focusNextNode(focusedNode, true);\n }\n }\n else {\n if (icon && icon.classList.contains(COLLAPSIBLE)) {\n this.collapseNode(focusedNode, icon, e);\n }\n else {\n var parentLi = closest(closest(focusedNode, '.' + PARENTITEM), '.' + LISTITEM);\n if (!parentLi) {\n return;\n }\n else {\n if (!parentLi.classList.contains('e-disable')) {\n this.setFocus(focusedNode, parentLi);\n this.navigateToFocus(true);\n }\n }\n }\n }\n };\n TreeView.prototype.navigateNode = function (isTowards) {\n var focusedNode = this.getFocusedNode();\n this.focusNextNode(focusedNode, isTowards);\n };\n TreeView.prototype.navigateRootNode = function (isBackwards) {\n var focusedNode = this.getFocusedNode();\n var rootNode = isBackwards ? this.getRootNode() : this.getEndNode();\n if (!rootNode.classList.contains('e-disable')) {\n this.setFocus(focusedNode, rootNode);\n this.navigateToFocus(isBackwards);\n }\n };\n TreeView.prototype.getFocusedNode = function () {\n var selectedItem;\n var fNode = select('.' + LISTITEM + '[tabindex=\"0\"]', this.element);\n if (isNOU(fNode)) {\n selectedItem = select('.' + LISTITEM, this.element);\n }\n return isNOU(fNode) ? (isNOU(selectedItem) ? this.element.firstElementChild : selectedItem) : fNode;\n };\n TreeView.prototype.focusNextNode = function (li, isTowards) {\n var nextNode = isTowards ? this.getNextNode(li) : this.getPrevNode(li);\n this.setFocus(li, nextNode);\n this.navigateToFocus(!isTowards);\n if (nextNode.classList.contains('e-disable') || nextNode.classList.contains('e-prevent')) {\n var lastChild = nextNode.lastChild;\n if (nextNode.previousSibling == null && nextNode.classList.contains('e-level-1')) {\n this.focusNextNode(nextNode, true);\n }\n else if (nextNode.nextSibling == null && nextNode.classList.contains('e-node-collapsed')) {\n this.focusNextNode(nextNode, false);\n }\n else if (nextNode.nextSibling == null && lastChild.classList.contains(TEXTWRAP)) {\n this.focusNextNode(nextNode, false);\n }\n else {\n this.focusNextNode(nextNode, isTowards);\n }\n }\n };\n TreeView.prototype.getNextNode = function (li) {\n var index = this.liList.indexOf(li);\n var nextNode;\n do {\n index++;\n nextNode = this.liList[parseInt(index.toString(), 10)];\n if (isNOU(nextNode)) {\n return li;\n }\n } while (!isVisible(nextNode));\n return nextNode;\n };\n TreeView.prototype.getPrevNode = function (li) {\n var index = this.liList.indexOf(li);\n var prevNode;\n do {\n index--;\n prevNode = this.liList[parseInt(index.toString(), 10)];\n if (isNOU(prevNode)) {\n return li;\n }\n } while (!isVisible(prevNode));\n return prevNode;\n };\n TreeView.prototype.getRootNode = function () {\n var index = 0;\n var rootNode;\n do {\n rootNode = this.liList[parseInt(index.toString(), 10)];\n index++;\n } while (!isVisible(rootNode));\n return rootNode;\n };\n TreeView.prototype.getEndNode = function () {\n var index = this.liList.length - 1;\n var endNode;\n do {\n endNode = this.liList[parseInt(index.toString(), 10)];\n index--;\n } while (!isVisible(endNode));\n return endNode;\n };\n TreeView.prototype.setFocus = function (preNode, nextNode) {\n removeClass([preNode], FOCUS);\n preNode.setAttribute('tabindex', '-1');\n if (!nextNode.classList.contains('e-disable') && !nextNode.classList.contains(PREVENTSELECT)) {\n addClass([nextNode], FOCUS);\n nextNode.setAttribute('tabindex', '0');\n nextNode.focus();\n EventHandler.add(nextNode, 'blur', this.focusOut, this);\n this.updateIdAttr(preNode, nextNode);\n }\n };\n TreeView.prototype.updateIdAttr = function (preNode, nextNode) {\n this.element.removeAttribute('aria-activedescendant');\n if (preNode) {\n preNode.removeAttribute('id');\n }\n nextNode.setAttribute('id', this.element.id + '_active');\n this.element.setAttribute('aria-activedescendant', this.element.id + '_active');\n };\n TreeView.prototype.focusIn = function () {\n if (!this.mouseDownStatus) {\n var focusedElement = this.getFocusedNode();\n if (focusedElement.classList.contains('e-disable') || focusedElement.classList.contains('e-prevent')) {\n focusedElement.setAttribute('tabindex', '-1');\n this.navigateNode(true);\n }\n else {\n focusedElement.setAttribute('tabindex', '0');\n addClass([focusedElement], FOCUS);\n EventHandler.add(focusedElement, 'blur', this.focusOut, this);\n }\n this.mouseDownStatus = false;\n }\n };\n TreeView.prototype.focusOut = function (event) {\n var focusedElement = this.getFocusedNode();\n if (event.target === focusedElement) {\n removeClass([focusedElement], FOCUS);\n EventHandler.remove(focusedElement, 'blur', this.focusOut);\n }\n };\n TreeView.prototype.onMouseOver = function (e) {\n if (Browser.isDevice) {\n return;\n }\n var target = e.target;\n var classList = target.classList;\n var currentLi = closest(target, '.' + LISTITEM);\n if (!currentLi || classList.contains(PARENTITEM) || classList.contains(LISTITEM)) {\n this.removeHover();\n return;\n }\n else {\n if (currentLi && !currentLi.classList.contains('e-disable')) {\n this.setHover(currentLi);\n }\n }\n };\n TreeView.prototype.setHover = function (li) {\n if (!li.classList.contains(HOVER) && !li.classList.contains(PREVENTSELECT)) {\n this.removeHover();\n addClass([li], HOVER);\n }\n };\n TreeView.prototype.onMouseLeave = function () {\n this.removeHover();\n };\n TreeView.prototype.removeHover = function () {\n var hoveredNode = selectAll('.' + HOVER, this.element);\n if (hoveredNode && hoveredNode.length) {\n removeClass(hoveredNode, HOVER);\n }\n };\n TreeView.prototype.getNodeData = function (currLi, fromDS) {\n if (!isNOU(currLi) && currLi.classList.contains(LISTITEM) &&\n !isNOU(closest(currLi, '.' + CONTROL)) && closest(currLi, '.' + CONTROL).classList.contains(ROOT)) {\n var id = currLi.getAttribute('data-uid');\n var text = this.getText(currLi, fromDS);\n var pNode = closest(currLi.parentNode, '.' + LISTITEM);\n var pid = pNode ? pNode.getAttribute('data-uid') : null;\n var selected = currLi.classList.contains(ACTIVE);\n var selectable = currLi.classList.contains(PREVENTSELECT) ? false : true;\n var expanded = (currLi.getAttribute('aria-expanded') === 'true') ? true : false;\n var hasChildren = currLi.getAttribute('aria-expanded') !== null ? true : (select('.' + EXPANDABLE, currLi) || select('.' + COLLAPSIBLE, currLi)) != null ? true : false;\n var checked = null;\n var checkboxElement = select('.' + CHECKBOXWRAP, currLi);\n if (this.showCheckBox && checkboxElement) {\n checked = currLi.getAttribute('aria-checked');\n }\n return {\n id: id, text: text, parentID: pid, selected: selected, selectable: selectable, expanded: expanded,\n isChecked: checked, hasChildren: hasChildren\n };\n }\n return { id: '', text: '', parentID: '', selected: false, expanded: false, isChecked: '', hasChildren: false };\n };\n TreeView.prototype.getText = function (currLi, fromDS) {\n if (fromDS) {\n var nodeData = this.getNodeObject(currLi.getAttribute('data-uid'));\n var level = parseFloat(currLi.getAttribute('aria-level'));\n var nodeFields = this.getFields(this.fields, level, 1);\n return getValue(nodeFields.text, nodeData);\n }\n return select('.' + LISTTEXT, currLi).textContent;\n };\n TreeView.prototype.getExpandEvent = function (currLi, e) {\n var nodeData = this.getNodeData(currLi);\n return { cancel: false, isInteracted: isNOU(e) ? false : true, node: currLi, nodeData: nodeData, event: e };\n };\n TreeView.prototype.renderNodeTemplate = function (data, textEle, dataId) {\n var tempArr = this.nodeTemplateFn(data, this, 'nodeTemplate' + dataId, this.element.id + 'nodeTemplate', this.isStringTemplate, undefined, textEle, this.root);\n if (tempArr) {\n tempArr = Array.prototype.slice.call(tempArr);\n append(tempArr, textEle);\n }\n };\n TreeView.prototype.destroyTemplate = function (liEle) {\n this.clearTemplate(['nodeTemplate' + liEle.getAttribute('data-uid')]);\n };\n TreeView.prototype.reRenderNodes = function () {\n this.updateListProp(this.fields);\n if (Browser.isIE) {\n this.ulElement = this.element.querySelector('.e-list-parent.e-ul');\n this.ulElement.parentElement.removeChild(this.ulElement);\n }\n else {\n this.element.innerHTML = '';\n }\n if (!isNOU(this.nodeTemplateFn)) {\n this.clearTemplate();\n }\n this.setTouchClass();\n this.setProperties({ selectedNodes: [], checkedNodes: [], expandedNodes: [] }, true);\n this.checkedElement = [];\n this.isLoaded = false;\n this.setDataBinding(true);\n };\n TreeView.prototype.setCssClass = function (oldClass, newClass) {\n if (!isNOU(oldClass) && oldClass !== '') {\n removeClass([this.element], oldClass.split(' '));\n }\n if (!isNOU(newClass) && newClass !== '') {\n addClass([this.element], newClass.split(' '));\n }\n };\n TreeView.prototype.editingHandler = function (e) {\n var target = e.target;\n if (!target || target.classList.contains(ROOT) || target.classList.contains(PARENTITEM) ||\n target.classList.contains(LISTITEM) || target.classList.contains(ICON) ||\n target.classList.contains(INPUT) || target.classList.contains(INPUTGROUP)) {\n return;\n }\n else {\n var liEle = closest(target, '.' + LISTITEM);\n this.createTextbox(liEle);\n }\n };\n TreeView.prototype.createTextbox = function (liEle) {\n var _this = this;\n var oldInpEle = select('.' + TREEINPUT, this.element);\n if (oldInpEle) {\n oldInpEle.blur();\n }\n var textEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var innerEle = this.createElement('input', { className: TREEINPUT, attrs: { value: this.oldText } });\n var eventArgs = this.getEditEvent(liEle, null, innerEle.outerHTML);\n this.trigger('nodeEditing', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n var inpWidth = textEle.offsetWidth + 5;\n var style_1 = 'width:' + inpWidth + 'px';\n addClass([liEle], EDITING);\n if (!isNOU(_this.nodeTemplateFn)) {\n _this.destroyTemplate(liEle);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (_this.isReact) {\n setTimeout(function () {\n _this.renderTextBox(eventArgs, textEle, style_1);\n }, 5);\n }\n else {\n _this.renderTextBox(eventArgs, textEle, style_1);\n }\n }\n });\n };\n TreeView.prototype.renderTextBox = function (eventArgs, textEle, style) {\n textEle.innerHTML = eventArgs.innerHtml;\n var inpEle = select('.' + TREEINPUT, textEle);\n this.inputObj = Input.createInput({\n element: inpEle,\n properties: {\n enableRtl: this.enableRtl\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('style', style);\n inpEle.focus();\n var inputEle = inpEle;\n inputEle.setSelectionRange(0, inputEle.value.length);\n this.wireInputEvents(inpEle);\n };\n TreeView.prototype.updateOldText = function (liEle) {\n var id = liEle.getAttribute('data-uid');\n this.editData = this.getNodeObject(id);\n var level = parseFloat(liEle.getAttribute('aria-level'));\n this.editFields = this.getFields(this.fields, level, 1);\n this.oldText = getValue(this.editFields.text, this.editData);\n };\n TreeView.prototype.inputFocusOut = function (e) {\n if (!select('.' + TREEINPUT, this.element)) {\n return;\n }\n var target = e.target;\n var newText = target.value;\n var txtEle = closest(target, '.' + LISTTEXT);\n var liEle = closest(target, '.' + LISTITEM);\n detach(this.inputObj.container);\n Input.destroy({ element: target, properties: this.properties });\n if (this.fields.dataSource instanceof DataManager && !this.isOffline) {\n this.crudOperation('update', null, liEle, newText, null, null, true);\n }\n else {\n this.appendNewText(liEle, txtEle, newText, true);\n }\n EventHandler.remove(target, 'blur', this.inputFocusOut);\n };\n TreeView.prototype.appendNewText = function (liEle, txtEle, newText, isInput) {\n var _this = this;\n var eventArgs = this.getEditEvent(liEle, newText, null);\n this.trigger('nodeEdited', eventArgs, function (observedArgs) {\n newText = observedArgs.cancel ? observedArgs.oldText : observedArgs.newText;\n _this.updateText(liEle, txtEle, newText, isInput);\n if (observedArgs.oldText !== newText) {\n _this.triggerEvent('nodeEdited', [_this.getNode(liEle)]);\n }\n });\n };\n TreeView.prototype.updateText = function (liEle, txtEle, newText, isInput) {\n var newData = setValue(this.editFields.text, newText, this.editData);\n if (!isNOU(this.nodeTemplateFn)) {\n txtEle.innerText = '';\n var dataId = liEle.getAttribute('data-uid');\n this.renderNodeTemplate(newData, txtEle, dataId);\n this.renderReactTemplates();\n }\n else {\n if (this.enableHtmlSanitizer) {\n txtEle.innerText = SanitizeHtmlHelper.sanitize(newText);\n }\n else {\n txtEle.innerHTML = newText;\n }\n }\n if (isInput) {\n removeClass([liEle], EDITING);\n liEle.focus();\n EventHandler.add(liEle, 'blur', this.focusOut, this);\n addClass([liEle], FOCUS);\n }\n if (this.allowTextWrap) {\n this.calculateWrap(liEle);\n }\n };\n TreeView.prototype.getElement = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return this.element.querySelector('[data-uid=\"' + ele + '\"]');\n }\n else if (typeof ele === 'object') {\n return getElement(ele);\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getId = function (ele) {\n if (isNOU(ele)) {\n return null;\n }\n else if (typeof ele === 'string') {\n return ele;\n }\n else if (typeof ele === 'object') {\n return (getElement(ele)).getAttribute('data-uid');\n }\n else {\n return null;\n }\n };\n TreeView.prototype.getEditEvent = function (liEle, newText, inpEle) {\n var data = this.getNodeData(liEle);\n return { cancel: false, newText: newText, node: liEle, nodeData: data, oldText: this.oldText, innerHtml: inpEle };\n };\n TreeView.prototype.getNodeObject = function (id) {\n var childNodes;\n if (isNOU(id)) {\n return childNodes;\n }\n else if (this.dataType === 1) {\n for (var i = 0, objlen = this.treeData.length; i < objlen; i++) {\n var dataId = getValue(this.fields.id, this.treeData[parseInt(i.toString(), 10)]);\n if (!isNOU(this.treeData[parseInt(i.toString(), 10)]) && !isNOU(dataId) && dataId.toString() === id) {\n return this.treeData[parseInt(i.toString(), 10)];\n }\n }\n }\n else {\n return this.getChildNodeObject(this.treeData, this.fields, id);\n }\n return childNodes;\n };\n TreeView.prototype.getChildNodeObject = function (obj, mapper, id) {\n var newList;\n if (isNOU(obj)) {\n return newList;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var dataId = getValue(mapper.id, obj[parseInt(i.toString(), 10)]);\n if (obj[parseInt(i.toString(), 10)] && dataId && dataId.toString() === id) {\n return obj[parseInt(i.toString(), 10)];\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[parseInt(i.toString(), 10)]))) {\n var childData = getValue(mapper.child, obj[parseInt(i.toString(), 10)]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[parseInt(i.toString(), 10)]))) {\n var child = 'child';\n newList = this.getChildNodeObject(getValue(child, obj[parseInt(i.toString(), 10)]), this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n else if (this.isChildObject()) {\n var children = 'child';\n var childData = getValue(children, obj[parseInt(i.toString(), 10)]);\n newList = this.getChildNodeObject(childData, this.getChildMapper(mapper), id);\n if (newList !== undefined) {\n break;\n }\n }\n }\n return newList;\n };\n TreeView.prototype.setDragAndDrop = function (toBind) {\n if (toBind && !this.disabled) {\n this.initializeDrag();\n }\n else {\n this.destroyDrag();\n }\n };\n TreeView.prototype.initializeDrag = function () {\n var _this = this;\n var virtualEle;\n this.dragObj = new Draggable(this.element, {\n enableTailMode: true, enableAutoScroll: true,\n dragArea: this.dragArea,\n dragTarget: '.' + TEXTWRAP,\n enableTapHold: true,\n tapHoldThreshold: 100,\n helper: function (e) {\n _this.dragTarget = e.sender.target;\n var dragRoot = closest(_this.dragTarget, '.' + ROOT);\n var dragWrap = closest(_this.dragTarget, '.' + TEXTWRAP);\n _this.dragLi = closest(_this.dragTarget, '.' + LISTITEM);\n if (_this.fullRowSelect && !dragWrap && _this.dragTarget.classList.contains(FULLROW)) {\n dragWrap = _this.dragTarget.nextElementSibling;\n }\n if (!_this.dragTarget || !e.element.isSameNode(dragRoot) || !dragWrap ||\n _this.dragTarget.classList.contains(ROOT) || _this.dragTarget.classList.contains(PARENTITEM) ||\n _this.dragTarget.classList.contains(LISTITEM) || _this.dragLi.classList.contains('e-disable')) {\n return false;\n }\n var cloneEle = (dragWrap.cloneNode(true));\n if (isNOU(select('div.' + ICON, cloneEle))) {\n var icon = _this.createElement('div', { className: ICON + ' ' + EXPANDABLE });\n cloneEle.insertBefore(icon, cloneEle.children[0]);\n }\n var cssClass = DRAGITEM + ' ' + ROOT + ' ' + _this.cssClass + ' ' + (_this.enableRtl ? RTL : '');\n virtualEle = _this.createElement('div', { className: cssClass });\n virtualEle.appendChild(cloneEle);\n var nLen = _this.selectedNodes.length;\n if (nLen > 1 && _this.allowMultiSelection && _this.dragLi.classList.contains(ACTIVE)) {\n var cNode = _this.createElement('span', { className: DROPCOUNT, innerHTML: '' + nLen });\n virtualEle.appendChild(cNode);\n }\n document.body.appendChild(virtualEle);\n document.body.style.cursor = '';\n _this.dragData = _this.getNodeData(_this.dragLi);\n return virtualEle;\n },\n dragStart: function (e) {\n addClass([_this.element], DRAGGING);\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, null, e.target, null, virtualEle, level);\n if (eventArgs.draggedNode.classList.contains(EDITING)) {\n _this.dragObj.intDestroy(e.event);\n _this.dragCancelAction(virtualEle);\n }\n else {\n _this.trigger('nodeDragStart', eventArgs, function (observedArgs) {\n if (observedArgs.cancel) {\n _this.dragObj.intDestroy(e.event);\n _this.dragCancelAction(virtualEle);\n }\n else {\n _this.dragStartAction = true;\n }\n });\n }\n },\n drag: function (e) {\n _this.dragObj.setProperties({ cursorAt: { top: (!isNOU(e.event.targetTouches) || Browser.isDevice) ? 60 : -20 } });\n _this.dragAction(e, virtualEle);\n },\n dragStop: function (e) {\n removeClass([_this.element], DRAGGING);\n if (!e.target.classList.contains('e-sibling')) {\n _this.removeVirtualEle();\n }\n var dropTarget = e.target;\n var preventTargetExpand = false;\n var dropRoot = (closest(dropTarget, '.' + DROPPABLE));\n // eslint-disable-next-line\n var isHelperElement = true;\n if (!dropTarget || !dropRoot) {\n detach(e.helper);\n document.body.style.cursor = '';\n }\n var listItem = closest(dropTarget, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = _this.getDragEvent(e.event, _this, dropTarget, dropTarget, null, e.helper, level);\n eventArgs.preventTargetExpand = preventTargetExpand;\n _this.trigger('nodeDragStop', eventArgs, function (observedArgs) {\n _this.dragParent = observedArgs.draggedParentNode;\n _this.preventExpand = observedArgs.preventTargetExpand;\n if (observedArgs.cancel) {\n if (e.helper.parentNode) {\n detach(e.helper);\n }\n document.body.style.cursor = '';\n isHelperElement = false;\n if (dropTarget.classList.contains('e-sibling')) {\n _this.removeVirtualEle();\n }\n }\n _this.dragStartAction = false;\n });\n }\n });\n this.dropObj = new Droppable(this.element, {\n out: function (e) {\n if (!isNOU(e) && !e.target.classList.contains(SIBLING) &&\n (_this.dropObj.dragData.default && _this.dropObj.dragData.default.helper.classList.contains(ROOT))) {\n document.body.style.cursor = 'not-allowed';\n }\n },\n over: function () {\n document.body.style.cursor = '';\n },\n drop: function (e) {\n _this.dropAction(e);\n _this.removeVirtualEle();\n }\n });\n };\n TreeView.prototype.dragCancelAction = function (virtualEle) {\n detach(virtualEle);\n removeClass([this.element], DRAGGING);\n this.dragStartAction = false;\n };\n TreeView.prototype.dragAction = function (e, virtualEle) {\n var dropRoot = closest(e.target, '.' + DROPPABLE);\n var dropWrap = closest(e.target, '.' + TEXTWRAP);\n var icon = select('div.' + ICON, virtualEle);\n removeClass([icon], [DROPIN, DROPNEXT, DROPOUT, NODROP]);\n this.isDropIn = false;\n this.removeVirtualEle();\n document.body.style.cursor = '';\n var classList = e.target.classList;\n if (this.fullRowSelect && !dropWrap && !isNOU(classList) && classList.contains(FULLROW)) {\n dropWrap = e.target.nextElementSibling;\n }\n if (dropRoot) {\n var dropLi = closest(e.target, '.' + LISTITEM);\n var checkWrapper = closest(e.target, '.' + CHECKBOXWRAP);\n var collapse = closest(e.target, '.' + COLLAPSIBLE);\n var expand = closest(e.target, '.' + EXPANDABLE);\n if (!dropRoot.classList.contains(ROOT) || (dropWrap &&\n (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi)))) {\n if (this.hasTemplate && dropLi) {\n var templateTarget = select(this.fullRowSelect ? '.' + FULLROW : '.' + TEXTWRAP, dropLi);\n if ((e && (!expand && !collapse) && e.event.offsetY < 7 && !checkWrapper) ||\n (((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3)))) {\n var index = this.fullRowSelect ? (1) : (0);\n this.appendIndicator(dropLi, icon, index);\n }\n else if ((e && (!expand && !collapse) &&\n !checkWrapper && templateTarget && e.event.offsetY > templateTarget.offsetHeight - 10) ||\n ((expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19))) {\n var index = this.fullRowSelect ? (2) : (1);\n this.appendIndicator(dropLi, icon, index);\n }\n else {\n addClass([icon], DROPIN);\n this.isDropIn = true;\n }\n }\n else {\n if ((dropLi && e && (!expand && !collapse) && (e.event.offsetY < 7) && !checkWrapper) ||\n (((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3)))) {\n var index = this.fullRowSelect ? (1) : (0);\n this.appendIndicator(dropLi, icon, index);\n }\n else if ((dropLi && e && (!expand && !collapse) &&\n (e.target.offsetHeight > 0 && e.event.offsetY > (e.target.offsetHeight - 10)) && !checkWrapper) ||\n (((expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19)))) {\n var index = this.fullRowSelect ? (2) : (1);\n this.appendIndicator(dropLi, icon, index);\n }\n else {\n addClass([icon], DROPIN);\n this.isDropIn = true;\n }\n }\n }\n else if (e.target.nodeName === 'LI' && (!dropLi.isSameNode(this.dragLi) && !this.isDescendant(this.dragLi, dropLi))) {\n addClass([icon], DROPNEXT);\n this.renderVirtualEle(e);\n }\n else if (e.target.classList.contains(SIBLING)) {\n addClass([icon], DROPNEXT);\n }\n else {\n addClass([icon], DROPOUT);\n }\n }\n else {\n addClass([icon], NODROP);\n document.body.style.cursor = 'not-allowed';\n }\n var listItem = closest(e.target, '.e-list-item');\n var level;\n if (listItem) {\n level = parseInt(listItem.getAttribute('aria-level'), 10);\n }\n var eventArgs = this.getDragEvent(e.event, this, e.target, e.target, null, virtualEle, level);\n if (eventArgs.dropIndicator) {\n removeClass([icon], eventArgs.dropIndicator);\n }\n this.trigger('nodeDragging', eventArgs);\n if (eventArgs.dropIndicator) {\n addClass([icon], eventArgs.dropIndicator);\n }\n };\n TreeView.prototype.appendIndicator = function (dropLi, icon, index) {\n addClass([icon], DROPNEXT);\n var virEle = this.createElement('div', { className: SIBLING });\n dropLi.insertBefore(virEle, dropLi.children[parseInt(index.toString(), 10)]);\n };\n TreeView.prototype.dropAction = function (e) {\n var offsetY = e.event.offsetY;\n var dropTarget = e.target;\n var dragObj;\n var level;\n var drop = false;\n var nodeData = [];\n var liArray = [];\n var dragInstance = e.dragData.draggable;\n for (var i = 0; i < dragInstance.ej2_instances.length; i++) {\n if (dragInstance.ej2_instances[parseInt(i.toString(), 10)] instanceof TreeView_1) {\n dragObj = dragInstance.ej2_instances[parseInt(i.toString(), 10)];\n break;\n }\n }\n if (dragObj && dragObj.dragTarget) {\n var dragTarget = dragObj.dragTarget;\n var dragLi = (closest(dragTarget, '.' + LISTITEM));\n var dropLi = (closest(dropTarget, '.' + LISTITEM));\n liArray.push(dragLi);\n if (dropLi == null && dropTarget.classList.contains(ROOT)) {\n dropLi = dropTarget.firstElementChild;\n }\n detach(e.droppedElement);\n document.body.style.cursor = '';\n if (!dropLi || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n return;\n }\n if (dragObj.allowMultiSelection && dragLi.classList.contains(ACTIVE)) {\n var sNodes = selectAll('.' + ACTIVE, dragObj.element);\n liArray = sNodes;\n if (e.target.offsetHeight <= 33 && offsetY > e.target.offsetHeight - 10 && offsetY > 6) {\n for (var i = sNodes.length - 1; i >= 0; i--) {\n if (dropLi.isSameNode(sNodes[parseInt(i.toString(), 10)]) ||\n this.isDescendant(sNodes[parseInt(i.toString(), 10)], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[parseInt(i.toString(), 10)], dropLi, e, dragObj, offsetY);\n }\n }\n else {\n for (var i = 0; i < sNodes.length; i++) {\n if (dropLi.isSameNode(sNodes[parseInt(i.toString(), 10)]) ||\n this.isDescendant(sNodes[parseInt(i.toString(), 10)], dropLi)) {\n continue;\n }\n this.appendNode(dropTarget, sNodes[parseInt(i.toString(), 10)], dropLi, e, dragObj, offsetY);\n }\n }\n }\n else {\n this.appendNode(dropTarget, dragLi, dropLi, e, dragObj, offsetY);\n }\n level = parseInt(dragLi.getAttribute('aria-level'), 10);\n drop = true;\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n for (var i = 0; i < liArray.length; i++) {\n nodeData.push(this.getNode(liArray[parseInt(i.toString(), 10)]));\n }\n this.trigger('nodeDropped', this.getDragEvent(e.event, dragObj, dropTarget, e.target, e.dragData.draggedElement, null, level, drop));\n if (dragObj.element.id !== this.element.id) {\n dragObj.triggerEvent('nodeDropped', nodeData);\n this.isNodeDropped = true;\n this.fields.dataSource = this.treeData;\n }\n this.triggerEvent('nodeDropped', nodeData);\n };\n TreeView.prototype.appendNode = function (dropTarget, dragLi, dropLi, e, dragObj, offsetY) {\n var checkWrapper = closest(dropTarget, '.' + CHECKBOXWRAP);\n var collapse = closest(e.target, '.' + COLLAPSIBLE);\n var expand = closest(e.target, '.' + EXPANDABLE);\n if (!dragLi.classList.contains('e-disable') && !checkWrapper && ((expand && e.event.offsetY < 5) || (collapse && e.event.offsetX < 3) || (expand && e.event.offsetY > 19) || (collapse && e.event.offsetX > 19) || (!expand && !collapse))) {\n if (dropTarget.nodeName === 'LI') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else if (dropTarget.firstElementChild && dropTarget.classList.contains(ROOT)) {\n if (dropTarget.firstElementChild.nodeName === 'UL') {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n }\n else if ((dropTarget.classList.contains('e-icon-collapsible')) || (dropTarget.classList.contains('e-icon-expandable'))) {\n this.dropAsSiblingNode(dragLi, dropLi, e, dragObj);\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY, null, dropTarget);\n }\n }\n else {\n this.dropAsChildNode(dragLi, dropLi, dragObj, null, e, offsetY, true, dropTarget);\n }\n if (this.showCheckBox) {\n this.ensureIndeterminate();\n }\n };\n TreeView.prototype.dropAsSiblingNode = function (dragLi, dropLi, e, dragObj) {\n var dropUl = closest(dropLi, '.' + PARENTITEM);\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var pre;\n if (e.target.offsetHeight > 0 && e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n else if (e.target.classList.contains('e-icon-expandable') || (e.target.classList.contains('e-icon-collapsible'))) {\n if ((e.event.offsetY < 5) || (e.event.offsetX < 3)) {\n pre = true;\n }\n else if ((e.event.offsetY > 15) || (e.event.offsetX > 17)) {\n pre = false;\n }\n }\n if ((e.target.classList.contains('e-icon-expandable')) || (e.target.classList.contains('e-icon-collapsible'))) {\n var target = e.target.closest('li');\n dropUl.insertBefore(dragLi, pre ? target : target.nextElementSibling);\n }\n else {\n dropUl.insertBefore(dragLi, pre ? e.target : e.target.nextElementSibling);\n }\n this.moveData(dragLi, dropLi, dropUl, pre, dragObj);\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.dropAsChildNode = function (dragLi, dropLi, dragObj, index, e, pos, isCheck, dropTarget) {\n var dragParentUl = closest(dragLi, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n var dropParentUl = closest(dropLi, '.' + PARENTITEM);\n var templateTarget;\n if (e && e.target) {\n templateTarget = select(this.fullRowSelect ? '.' + FULLROW : '.' + TEXTWRAP, dropLi);\n }\n if (e && ((pos < 7 && !dropTarget.classList.contains('e-sibling')) || (dropTarget.classList.contains('e-sibling') && !dropLi.lastChild.classList.contains('e-sibling'))) && !isCheck) {\n dropParentUl.insertBefore(dragLi, dropLi);\n this.moveData(dragLi, dropLi, dropParentUl, true, dragObj);\n }\n else if (e && (e.target.offsetHeight > 0 && pos > (e.target.offsetHeight - 10)) && !isCheck && !this.hasTemplate) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n this.moveData(dragLi, dropLi, dropParentUl, false, dragObj);\n }\n else if (this.hasTemplate && templateTarget && pos > templateTarget.offsetHeight - 10 && !isCheck) {\n dropParentUl.insertBefore(dragLi, dropLi.nextElementSibling);\n this.moveData(dragLi, dropLi, dropParentUl, false, dragObj);\n }\n else {\n var dropUl = this.expandParent(dropLi);\n var childLi = !isNullOrUndefined(index) ? dropUl.childNodes[parseInt(index.toString(), 10)] : null;\n dropUl.insertBefore(dragLi, childLi);\n this.moveData(dragLi, childLi, dropUl, true, dragObj);\n }\n this.updateElement(dragParentUl, dragParentLi);\n this.updateAriaLevel(dragLi);\n if (dragObj.element.id === this.element.id) {\n this.updateList();\n }\n else {\n dragObj.updateInstance();\n this.updateInstance();\n }\n };\n TreeView.prototype.moveData = function (dragLi, dropLi, dropUl, pre, dragObj) {\n var dropParentLi = closest(dropUl, '.' + LISTITEM);\n var id = this.getId(dragLi);\n var removedData = dragObj.updateChildField(dragObj.treeData, dragObj.fields, id, null, null, true);\n var refId = this.getId(dropLi);\n var index = this.getDataPos(this.treeData, this.fields, refId);\n var parentId = this.getId(dropParentLi);\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', true);\n var pos = isNOU(index) ? this.treeData.length : (pre ? index : index + 1);\n if (isNOU(parentId) && !this.hasPid) {\n delete removedData[0][this.fields.parentID];\n }\n else {\n var currPid = this.isNumberTypeId ? parseFloat(parentId) : parentId;\n setValue(this.fields.parentID, currPid, removedData[0]);\n }\n this.treeData.splice(pos, 0, removedData[0]);\n if (dragObj.element.id !== this.element.id) {\n var childData = dragObj.removeChildNodes(id);\n pos++;\n for (var i = 0, len = childData.length; i < len; i++) {\n this.treeData.splice(pos, 0, childData[parseInt(i.toString(), 10)]);\n pos++;\n }\n dragObj.groupedData = dragObj.getGroupedData(dragObj.treeData, dragObj.fields.parentID);\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n else {\n this.addChildData(this.treeData, this.fields, parentId, removedData, pre ? index : index + 1);\n }\n };\n TreeView.prototype.expandParent = function (dropLi) {\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && this.preventExpand !== true) {\n this.expandAction(dropLi, dropIcon, null);\n }\n var dropUl = select('.' + PARENTITEM, dropLi);\n if (this.preventExpand === true && !dropUl && dropIcon) {\n this.renderChildNodes(dropLi);\n }\n dropUl = select('.' + PARENTITEM, dropLi);\n if (!isNOU(dropUl) && this.preventExpand === true) {\n dropUl.style.display = 'none';\n }\n if (!isNOU(dropUl) && this.preventExpand === false) {\n dropUl.style.display = 'block';\n }\n if (isNOU(dropUl) && this.preventExpand === true) {\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n if (icon) {\n icon.classList.add('e-icon-expandable');\n }\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n if (icon) {\n removeClass([icon], COLLAPSIBLE);\n }\n else {\n ListBase.generateIcon(this.createElement, dropLi, EXPANDABLE, this.listBaseOption);\n }\n dropLi.setAttribute('aria-expanded', 'false');\n dropUl.style.display = 'none';\n }\n if (isNOU(dropUl)) {\n var args = this.expandArgs;\n if (isNOU(args) || (args && args.name !== 'nodeExpanding')) {\n this.trigger('nodeExpanding', this.getExpandEvent(dropLi, null));\n }\n if (isNOU(dropIcon)) {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n }\n var icon = select('div.' + ICON, dropLi);\n if (icon) {\n removeClass([icon], EXPANDABLE);\n }\n else {\n ListBase.generateIcon(this.createElement, dropLi, COLLAPSIBLE, this.listBaseOption);\n icon = select('div.' + ICON, dropLi);\n removeClass([icon], EXPANDABLE);\n }\n dropUl = ListBase.generateUL(this.createElement, [], null, this.listBaseOption);\n dropLi.appendChild(dropUl);\n this.addExpand(dropLi);\n this.trigger('nodeExpanded', this.getExpandEvent(dropLi, null));\n }\n return dropUl;\n };\n TreeView.prototype.updateElement = function (dragParentUl, dragParentLi) {\n if (dragParentLi && dragParentUl.childElementCount === 0) {\n var dragIcon = select('div.' + ICON, dragParentLi);\n detach(dragParentUl);\n detach(dragIcon);\n var parentId = this.getId(dragParentLi);\n this.updateField(this.treeData, this.fields, parentId, 'hasChildren', false);\n this.removeExpand(dragParentLi, true);\n }\n };\n TreeView.prototype.updateAriaLevel = function (dragLi) {\n var level = this.parents(dragLi, '.' + PARENTITEM).length;\n dragLi.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, dragLi), level + 1);\n };\n TreeView.prototype.updateChildAriaLevel = function (element, level) {\n if (!isNOU(element)) {\n var cNodes = element.childNodes;\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[parseInt(i.toString(), 10)];\n liEle.setAttribute('aria-level', '' + level);\n this.updateChildAriaLevel(select('.' + PARENTITEM, liEle), level + 1);\n }\n }\n };\n TreeView.prototype.renderVirtualEle = function (e) {\n var pre;\n if (e.event.offsetY > e.target.offsetHeight - 2) {\n pre = false;\n }\n else if (e.event.offsetY < 2) {\n pre = true;\n }\n var virEle = this.createElement('div', { className: SIBLING });\n var index = this.fullRowSelect ? (pre ? 1 : 2) : (pre ? 0 : 1);\n e.target.insertBefore(virEle, e.target.children[parseInt(index.toString(), 10)]);\n };\n TreeView.prototype.removeVirtualEle = function () {\n var sibEle = select('.' + SIBLING);\n if (sibEle) {\n detach(sibEle);\n }\n };\n TreeView.prototype.destroyDrag = function () {\n if (this.dragObj && this.dropObj) {\n this.dragObj.destroy();\n this.dropObj.destroy();\n }\n };\n TreeView.prototype.getDragEvent = function (event, obj, dropTarget, target, dragNode, cloneEle, level, drop) {\n var dropLi = dropTarget ? closest(dropTarget, '.' + LISTITEM) : null;\n var dropData = dropLi ? this.getNodeData(dropLi) : null;\n var draggedNode = obj ? obj.dragLi : dragNode;\n var draggedNodeData = obj ? obj.dragData : null;\n var newParent = dropTarget ? this.parents(dropTarget, '.' + LISTITEM) : null;\n var dragLiParent = obj.dragLi.parentElement;\n var dragParent = obj.dragLi ? closest(dragLiParent, '.' + LISTITEM) : null;\n var targetParent = null;\n var indexValue = null;\n var iconCss = [DROPNEXT, DROPIN, DROPOUT, NODROP];\n var iconClass = null;\n var node = (drop === true) ? draggedNode : dropLi;\n var index = node ? closest(node, '.e-list-parent') : null;\n var i = 0;\n var position = null;\n dragParent = (obj.dragLi && dragParent === null) ? closest(dragLiParent, '.' + ROOT) : dragParent;\n dragParent = (drop === true) ? this.dragParent : dragParent;\n if (cloneEle) {\n while (i < 4) {\n if (select('.' + ICON, cloneEle).classList.contains(iconCss[parseInt(i.toString(), 10)])) {\n iconClass = iconCss[parseInt(i.toString(), 10)];\n break;\n }\n i++;\n }\n }\n if (index) {\n var dropTar = 0;\n for (i = 0; i < index.childElementCount; i++) {\n dropTar = (drop !== true && index.children[parseInt(i.toString(), 10)] === draggedNode && dropLi !== draggedNode)\n ? ++dropTar\n : dropTar;\n if ((drop !== true && index.children[parseInt(i.toString(), 10)].classList.contains('e-hover'))) {\n indexValue = (event.offsetY >= 23) ? i + 1 : i;\n break;\n }\n else if (index.children[parseInt(i.toString(), 10)] === node) {\n indexValue = (event.offsetY >= 23) ? i : i;\n break;\n }\n }\n indexValue = (dropTar !== 0) ? --indexValue : indexValue;\n position = this.isDropIn ? 'Inside' : ((event.offsetY < 7) ? 'Before' : 'After');\n }\n if (dropTarget) {\n if (newParent.length === 0) {\n targetParent = null;\n }\n else if (dropTarget.classList.contains(LISTITEM)) {\n targetParent = newParent[0];\n }\n else {\n targetParent = newParent[1];\n }\n }\n if (dropLi === draggedNode) {\n targetParent = dropLi;\n }\n if (dropTarget && target.offsetHeight <= 33 && event.offsetY < target.offsetHeight - 10 && event.offsetY > 6) {\n targetParent = dropLi;\n if (drop !== true) {\n level = ++level;\n var parent_2 = targetParent ? select('.e-list-parent', targetParent) : null;\n indexValue = (parent_2) ? parent_2.children.length : 0;\n if (!(this.fields.dataSource instanceof DataManager) && parent_2 === null && targetParent) {\n var parent_3 = targetParent.hasAttribute('data-uid') ?\n this.getChildNodes(this.fields.dataSource, targetParent.getAttribute('data-uid').toString()) : null;\n indexValue = (parent_3) ? parent_3.length : 0;\n }\n }\n }\n return {\n cancel: false,\n clonedNode: cloneEle,\n event: event,\n draggedNode: draggedNode,\n draggedNodeData: draggedNodeData,\n droppedNode: dropLi,\n droppedNodeData: dropData,\n dropIndex: indexValue,\n dropLevel: level,\n draggedParentNode: dragParent,\n dropTarget: targetParent,\n dropIndicator: iconClass,\n target: target,\n position: position\n };\n };\n TreeView.prototype.addFullRow = function (toAdd) {\n var len = this.liList.length;\n if (toAdd) {\n for (var i = 0; i < len; i++) {\n this.createFullRow(this.liList[parseInt(i.toString(), 10)]);\n }\n }\n else {\n for (var i = 0; i < len; i++) {\n var rowDiv = select('.' + FULLROW, this.liList[parseInt(i.toString(), 10)]);\n detach(rowDiv);\n }\n }\n };\n TreeView.prototype.createFullRow = function (item) {\n var rowDiv = this.createElement('div', { className: FULLROW });\n item.insertBefore(rowDiv, item.childNodes[0]);\n };\n TreeView.prototype.addMultiSelect = function (toAdd) {\n if (toAdd) {\n var liEles = selectAll('.' + LISTITEM + ':not([aria-selected=\"true\"])', this.element);\n for (var _i = 0, liEles_1 = liEles; _i < liEles_1.length; _i++) {\n var ele = liEles_1[_i];\n ele.setAttribute('aria-selected', 'false');\n }\n }\n else {\n var liEles = selectAll('.' + LISTITEM + '[aria-selected=\"false\"]', this.element);\n for (var _a = 0, liEles_2 = liEles; _a < liEles_2.length; _a++) {\n var ele = liEles_2[_a];\n ele.removeAttribute('aria-selected');\n }\n }\n };\n TreeView.prototype.collapseByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var cNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var liEle = cNodes[parseInt(i.toString(), 10)];\n var icon = select('.' + COLLAPSIBLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.collapseNode(liEle, icon, null);\n }\n this.collapseByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.collapseAllNodes = function (excludeHiddenNodes) {\n var cIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + COLLAPSIBLE, this.element));\n for (var i = 0, len = cIcons.length; i < len; i++) {\n var icon = cIcons[parseInt(i.toString(), 10)];\n var liEle = closest(icon, '.' + LISTITEM);\n this.collapseNode(liEle, icon, null);\n }\n };\n TreeView.prototype.expandByLevel = function (element, level, excludeHiddenNodes) {\n if (level > 0 && !isNOU(element)) {\n var eNodes = this.getVisibleNodes(excludeHiddenNodes, element.childNodes);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n var liEle = eNodes[parseInt(i.toString(), 10)];\n var icon = select('.' + EXPANDABLE, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n this.expandAction(liEle, icon, null);\n }\n this.expandByLevel(select('.' + PARENTITEM, liEle), level - 1, excludeHiddenNodes);\n }\n }\n };\n TreeView.prototype.expandAllNodes = function (excludeHiddenNodes) {\n var eIcons = this.getVisibleNodes(excludeHiddenNodes, selectAll('.' + EXPANDABLE, this.element));\n for (var i = 0, len = eIcons.length; i < len; i++) {\n var icon = eIcons[parseInt(i.toString(), 10)];\n var liEle = closest(icon, '.' + LISTITEM);\n this.expandAction(liEle, icon, null, true);\n }\n };\n TreeView.prototype.getVisibleNodes = function (excludeHiddenNodes, nodes) {\n var vNodes = Array.prototype.slice.call(nodes);\n if (excludeHiddenNodes) {\n for (var i = 0; i < vNodes.length; i++) {\n if (!isVisible(vNodes[parseInt(i.toString(), 10)])) {\n vNodes.splice(i, 1);\n i--;\n }\n }\n }\n return vNodes;\n };\n TreeView.prototype.removeNode = function (node) {\n var dragParentUl = closest(node, '.' + PARENTITEM);\n var dragParentLi = closest(dragParentUl, '.' + LISTITEM);\n if (!isNOU(this.nodeTemplateFn)) {\n this.destroyTemplate(node);\n }\n detach(node);\n this.updateElement(dragParentUl, dragParentLi);\n this.removeData(node);\n };\n TreeView.prototype.updateInstance = function () {\n this.updateList();\n this.updateSelectedNodes();\n this.updateExpandedNodes();\n };\n TreeView.prototype.updateList = function () {\n this.liList = Array.prototype.slice.call(selectAll('.' + LISTITEM, this.element));\n };\n TreeView.prototype.updateSelectedNodes = function () {\n this.setProperties({ selectedNodes: [] }, true);\n var sNodes = selectAll('.' + ACTIVE, this.element);\n this.selectGivenNodes(sNodes);\n };\n TreeView.prototype.updateExpandedNodes = function () {\n this.setProperties({ expandedNodes: [] }, true);\n var eNodes = selectAll('[aria-expanded=\"true\"]', this.element);\n for (var i = 0, len = eNodes.length; i < len; i++) {\n this.addExpand(eNodes[parseInt(i.toString(), 10)]);\n }\n };\n TreeView.prototype.removeData = function (node) {\n if (this.dataType === 1) {\n var dm = new DataManager(this.treeData);\n var id = this.getId(node);\n var data = {};\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = newId;\n dm.remove(this.fields.id, data);\n this.removeChildNodes(id);\n }\n else {\n var id = this.getId(node);\n this.updateChildField(this.treeData, this.fields, id, null, null, true);\n }\n };\n TreeView.prototype.removeChildNodes = function (parentId) {\n var cNodes = this.getChildGroup(this.groupedData, parentId, false);\n var childData = [];\n if (cNodes) {\n for (var i = 0, len = cNodes.length; i < len; i++) {\n var dm = new DataManager(this.treeData);\n var id = getValue(this.fields.id, cNodes[parseInt(i.toString(), 10)]).toString();\n var data = {};\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n data[this.fields.id] = currId;\n var nodeData = dm.remove(this.fields.id, data);\n childData.push(nodeData[0]);\n this.removeChildNodes(id);\n }\n }\n return childData;\n };\n TreeView.prototype.doGivenAction = function (nodes, selector, toExpand) {\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[parseInt(i.toString(), 10)]);\n if (isNOU(liEle)) {\n continue;\n }\n var icon = select('.' + selector, select('.' + TEXTWRAP, liEle));\n if (!isNOU(icon)) {\n if (toExpand) {\n this.expandAction(liEle, icon, null);\n }\n else {\n this.collapseNode(liEle, icon, null);\n }\n }\n }\n };\n TreeView.prototype.addGivenNodes = function (nodes, dropLi, index, isRemote, dropEle) {\n if (nodes.length === 0) {\n return;\n }\n var sNodes = this.getSortedData(nodes);\n var level = dropLi ? parseFloat(dropLi.getAttribute('aria-level')) + 1 : 1;\n if (isRemote) {\n this.updateMapper(level);\n }\n var li = ListBase.createListItemFromJson(this.createElement, sNodes, this.listBaseOption, level);\n var id = this.getId(dropLi);\n var dropIcon1;\n if (!isNullOrUndefined(dropLi)) {\n dropIcon1 = select('div.' + ICON, dropLi);\n }\n if (this.dataType === 1 && dropIcon1 && dropIcon1.classList.contains(EXPANDABLE) && !isNOU(this.element.offsetParent) && !this.element.offsetParent.parentElement.classList.contains('e-filemanager')) {\n this.preventExpand = true;\n }\n if (this.dataType !== 1) {\n this.addChildData(this.treeData, this.fields, id, nodes, index);\n this.isFirstRender = false;\n }\n var dropUl;\n if (!dropEle) {\n dropUl = dropLi ? this.expandParent(dropLi) : select('.' + PARENTITEM, this.element);\n }\n else {\n dropUl = dropEle;\n }\n var refNode = !isNullOrUndefined(index) ? dropUl.childNodes[parseInt(index.toString(), 10)] : null;\n if (!this.isFirstRender || this.dataType === 1) {\n var args = this.expandArgs;\n if (refNode || this.sortOrder === 'None') {\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[parseInt(i.toString(), 10)], refNode);\n }\n if (this.dataType === 1 && !isNullOrUndefined(dropLi) && !isNOU(this.element.offsetParent) && !this.element.offsetParent.parentElement.classList.contains('e-filemanager')) {\n this.preventExpand = false;\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && (isNOU(args) || args.name !== 'nodeExpanding')) {\n this.expandAction(dropLi, dropIcon, null);\n }\n }\n }\n if (!refNode && ((this.sortOrder === 'Ascending') || (this.sortOrder === 'Descending'))) {\n if (dropUl.childNodes.length === 0) {\n for (var i = 0; i < li.length; i++) {\n dropUl.insertBefore(li[parseInt(i.toString(), 10)], refNode);\n }\n if (this.dataType === 1 && !isNullOrUndefined(dropLi) && !isNOU(this.element.offsetParent) && !this.element.offsetParent.parentElement.classList.contains('e-filemanager')) {\n this.preventExpand = false;\n var dropIcon = select('div.' + ICON, dropLi);\n if (dropIcon && dropIcon.classList.contains(EXPANDABLE) && (isNOU(args) || args.name !== 'nodeExpanding')) {\n this.expandAction(dropLi, dropIcon, null);\n }\n }\n }\n else {\n var cNodes = dropUl.childNodes;\n for (var i = 0; i < li.length; i++) {\n for (var j = 0; j < cNodes.length; j++) {\n var returnValue = (this.sortOrder === 'Ascending') ? cNodes[parseInt(j.toString(), 10)].textContent.toUpperCase() > li[parseInt(i.toString(), 10)].innerText.toUpperCase() : cNodes[parseInt(j.toString(), 10)].textContent.toUpperCase() < li[parseInt(i.toString(), 10)].innerText.toUpperCase();\n if (returnValue) {\n dropUl.insertBefore(li[parseInt(i.toString(), 10)], cNodes[parseInt(j.toString(), 10)]);\n break;\n }\n dropUl.insertBefore(li[parseInt(i.toString(), 10)], cNodes[cNodes.length]);\n }\n }\n }\n }\n }\n if (this.dataType === 1) {\n this.updateField(this.treeData, this.fields, id, 'hasChildren', true);\n var refId = this.getId(refNode);\n var pos = isNOU(refId) ? this.treeData.length : this.getDataPos(this.treeData, this.fields, refId);\n for (var j = 0; j < nodes.length; j++) {\n if (!isNOU(id)) {\n var currId = this.isNumberTypeId ? parseFloat(id) : id;\n setValue(this.fields.parentID, currId, nodes[parseInt(j.toString(), 10)]);\n }\n this.treeData.splice(pos, 0, nodes[parseInt(j.toString(), 10)]);\n pos++;\n }\n }\n this.finalizeNode(dropUl);\n };\n TreeView.prototype.updateMapper = function (level) {\n var mapper = (level === 1) ? this.fields : this.getChildFields(this.fields, level - 1, 1);\n this.updateListProp(mapper);\n };\n TreeView.prototype.updateListProp = function (mapper) {\n var prop = this.getActualProperties(mapper);\n this.listBaseOption.fields = prop;\n this.listBaseOption.fields.url = Object.prototype.hasOwnProperty.call(prop, 'navigateUrl') ? prop.navigateUrl : 'navigateUrl';\n };\n TreeView.prototype.getDataPos = function (obj, mapper, id) {\n var pos = null;\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[parseInt(i.toString(), 10)]);\n if (obj[parseInt(i.toString(), 10)] && nodeId && nodeId.toString() === id) {\n return i;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[parseInt(i.toString(), 10)]))) {\n var data = getValue(mapper.child, obj[parseInt(i.toString(), 10)]);\n pos = this.getDataPos(data, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[parseInt(i.toString(), 10)]))) {\n var items = getValue('child', obj[parseInt(i.toString(), 10)]);\n pos = this.getDataPos(items, this.getChildMapper(mapper), id);\n if (pos !== null) {\n break;\n }\n }\n }\n return pos;\n };\n TreeView.prototype.addChildData = function (obj, mapper, id, data, index) {\n var updated;\n if (isNOU(id)) {\n index = isNOU(index) ? obj.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n obj.splice(index, 0, data[parseInt(k.toString(), 10)]);\n index++;\n }\n return updated;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[parseInt(i.toString(), 10)]);\n if (obj[parseInt(i.toString(), 10)] && nodeId && nodeId.toString() === id) {\n if ((typeof mapper.child === 'string' && (Object.prototype.hasOwnProperty.call(obj[parseInt(i.toString(), 10)], mapper.child) && obj[parseInt(i.toString(), 10)][mapper.child] !== null)) ||\n ((this.fields.dataSource instanceof DataManager) && Object.prototype.hasOwnProperty.call(obj[parseInt(i.toString(), 10)], 'child'))) {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n var childData = getValue(key, obj[parseInt(i.toString(), 10)]);\n if (isNOU(childData)) {\n childData = [];\n }\n index = isNOU(index) ? childData.length : index;\n for (var k = 0, len = data.length; k < len; k++) {\n childData.splice(index, 0, data[parseInt(k.toString(), 10)]);\n index++;\n }\n }\n else {\n var key = (typeof mapper.child === 'string') ? mapper.child : 'child';\n obj[parseInt(i.toString(), 10)][\"\" + key] = data;\n }\n return true;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[parseInt(i.toString(), 10)]))) {\n var childObj = getValue(mapper.child, obj[parseInt(i.toString(), 10)]);\n updated = this.addChildData(childObj, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n else if ((this.fields.dataSource instanceof DataManager) && !isNOU(getValue('child', obj[parseInt(i.toString(), 10)]))) {\n var childData = getValue('child', obj[parseInt(i.toString(), 10)]);\n updated = this.addChildData(childData, this.getChildMapper(mapper), id, data, index);\n if (updated !== undefined) {\n break;\n }\n }\n }\n return updated;\n };\n TreeView.prototype.doDisableAction = function (nodes) {\n var validNodes = this.nodeType(nodes);\n var validID = this.checkValidId(validNodes);\n this.validArr = [];\n for (var i = 0, len = validID.length; i < len; i++) {\n var id = validID[parseInt(i.toString(), 10)][this.fields.id].toString();\n if (id && this.disableNode.indexOf(id) === -1) {\n this.disableNode.push(id);\n }\n var liEle = this.getElement(id);\n if (liEle) {\n liEle.setAttribute('aria-disabled', 'true');\n addClass([liEle], DISABLE);\n }\n }\n };\n TreeView.prototype.doEnableAction = function (nodes) {\n var strNodes = this.nodeType(nodes);\n for (var i = 0, len = strNodes.length; i < len; i++) {\n var liEle = this.getElement(strNodes[parseInt(i.toString(), 10)]);\n var id = strNodes[parseInt(i.toString(), 10)];\n if (id && this.disableNode.indexOf(id) !== -1) {\n this.disableNode.splice(this.disableNode.indexOf(id), 1);\n }\n if (liEle) {\n liEle.removeAttribute('aria-disabled');\n removeClass([liEle], DISABLE);\n }\n }\n };\n TreeView.prototype.nodeType = function (nodes) {\n var validID = [];\n for (var i = 0, len = nodes.length; i < len; i++) {\n var id = void 0;\n if (typeof nodes[parseInt(i.toString(), 10)] == 'string') {\n id = (nodes[parseInt(i.toString(), 10)]) ? nodes[parseInt(i.toString(), 10)].toString() : null;\n }\n else if (typeof nodes[parseInt(i.toString(), 10)] === 'object') {\n id = nodes[parseInt(i.toString(), 10)] ? nodes[parseInt(i.toString(), 10)].getAttribute('data-uid').toString() : null;\n }\n if (validID.indexOf(id) === -1) {\n validID.push(id);\n }\n }\n return validID;\n };\n TreeView.prototype.checkValidId = function (node) {\n var _this = this;\n if (this.dataType === 1) {\n this.validArr = this.treeData.filter(function (data) {\n return node.indexOf(data[_this.fields.id] ? data[_this.fields.id].toString() : null) !== -1;\n });\n }\n else if (this.dataType === 2) {\n for (var k = 0; k < this.treeData.length; k++) {\n var id = this.treeData[parseInt(k.toString(), 10)][this.fields.id]\n ? this.treeData[parseInt(k.toString(), 10)][this.fields.id].toString()\n : null;\n if (node.indexOf(id) !== -1) {\n this.validArr.push(this.treeData[parseInt(k.toString(), 10)]);\n }\n var childItems = getValue(this.fields.child.toString(), this.treeData[parseInt(k.toString(), 10)]);\n if (childItems) {\n this.filterNestedChild(childItems, node);\n }\n }\n }\n return this.validArr;\n };\n TreeView.prototype.filterNestedChild = function (treeData, nodes) {\n for (var k = 0; k < treeData.length; k++) {\n var id = treeData[parseInt(k.toString(), 10)][this.fields.id]\n ? treeData[parseInt(k.toString(), 10)][this.fields.id].toString()\n : null;\n if (nodes.indexOf(id) !== -1) {\n this.validArr.push(treeData[parseInt(k.toString(), 10)]);\n }\n var childItems = getValue(this.fields.child.toString(), treeData[parseInt(k.toString(), 10)]);\n if (childItems) {\n this.filterNestedChild(childItems, nodes);\n }\n }\n };\n TreeView.prototype.setTouchClass = function () {\n var ele = closest(this.element, '.' + BIGGER);\n this.touchClass = isNOU(ele) ? '' : SMALL;\n };\n TreeView.prototype.updatePersistProp = function () {\n this.removeField(this.treeData, this.fields, ['selected', 'expanded']);\n var sleNodes = this.selectedNodes;\n for (var l = 0, slelen = sleNodes.length; l < slelen; l++) {\n this.updateField(this.treeData, this.fields, sleNodes[parseInt(l.toString(), 10)], 'selected', true);\n }\n var enodes = this.expandedNodes;\n for (var k = 0, nodelen = enodes.length; k < nodelen; k++) {\n this.updateField(this.treeData, this.fields, enodes[parseInt(k.toString(), 10)], 'expanded', true);\n }\n if (this.showCheckBox) {\n this.removeField(this.treeData, this.fields, ['isChecked']);\n var cnodes = this.checkedNodes;\n for (var m = 0, nodelen = cnodes.length; m < nodelen; m++) {\n this.updateField(this.treeData, this.fields, cnodes[parseInt(m.toString(), 10)], 'isChecked', true);\n }\n }\n };\n TreeView.prototype.removeField = function (obj, mapper, names) {\n if (isNOU(obj) || isNOU(mapper)) {\n return;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n for (var j = 0; j < names.length; j++) {\n var field = this.getMapperProp(mapper, names[parseInt(j.toString(), 10)]);\n if (!isNOU(obj[parseInt(i.toString(), 10)][\"\" + field])) {\n delete obj[parseInt(i.toString(), 10)][\"\" + field];\n }\n }\n if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[parseInt(i.toString(), 10)]))) {\n this.removeField(getValue(mapper.child, obj[parseInt(i.toString(), 10)]), this.getChildMapper(mapper), names);\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[parseInt(i.toString(), 10)]))) {\n this.removeField(getValue('child', obj[parseInt(i.toString(), 10)]), this.getChildMapper(mapper), names);\n }\n }\n };\n TreeView.prototype.getMapperProp = function (mapper, fieldName) {\n switch (fieldName) {\n case 'selected':\n return !isNOU(mapper.selected) ? mapper.selected : 'selected';\n case 'expanded':\n return !isNOU(mapper.expanded) ? mapper.expanded : 'expanded';\n case 'isChecked':\n return !isNOU(mapper.isChecked) ? mapper.isChecked : 'isChecked';\n case 'hasChildren':\n return !isNOU(mapper.hasChildren) ? mapper.hasChildren : 'hasChildren';\n default:\n return fieldName;\n }\n };\n TreeView.prototype.updateField = function (obj, mapper, id, key, value) {\n if (isNOU(id)) {\n return;\n }\n else if (this.dataType === 1) {\n var newId = this.isNumberTypeId ? parseFloat(id) : id;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', newId, false));\n setValue(this.getMapperProp(mapper, key), value, resultData[0]);\n }\n else {\n this.updateChildField(obj, mapper, id, key, value);\n }\n };\n TreeView.prototype.updateChildField = function (obj, mapper, id, key, value, remove) {\n var removedData;\n if (isNOU(obj)) {\n return removedData;\n }\n for (var i = 0, objlen = obj.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, obj[parseInt(i.toString(), 10)]);\n if (obj[parseInt(i.toString(), 10)] && !isNOU(nodeId) && nodeId.toString() === id) {\n if (remove) {\n removedData = obj.splice(i, 1);\n }\n else {\n setValue(this.getMapperProp(mapper, key), value, obj[parseInt(i.toString(), 10)]);\n removedData = [];\n }\n return removedData;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, obj[parseInt(i.toString(), 10)]))) {\n var childData = getValue(mapper.child, obj[parseInt(i.toString(), 10)]);\n removedData = this.updateChildField(childData, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', obj[parseInt(i.toString(), 10)]))) {\n var childItems = getValue('child', obj[parseInt(i.toString(), 10)]);\n removedData = this.updateChildField(childItems, this.getChildMapper(mapper), id, key, value, remove);\n if (removedData !== undefined) {\n break;\n }\n }\n }\n return removedData;\n };\n TreeView.prototype.triggerEvent = function (action, node) {\n this.renderReactTemplates();\n if (action === 'addNodes') {\n var nodeData = [];\n for (var i = 0; i < node.length; i++) {\n nodeData.push(this.getNode(this.getElement(isNOU(node[parseInt(i.toString(), 10)][this.fields.id])\n ? getValue(this.fields.id, node[parseInt(i.toString(), 10)]).toString()\n : null)));\n }\n node = nodeData;\n }\n var eventArgs = { data: this.treeData, action: action, nodeData: node };\n this.trigger('dataSourceChanged', eventArgs);\n };\n TreeView.prototype.wireInputEvents = function (inpEle) {\n EventHandler.add(inpEle, 'blur', this.inputFocusOut, this);\n };\n TreeView.prototype.wireEditingEvents = function (toBind) {\n var _this = this;\n if (toBind && !this.disabled) {\n this.touchEditObj = new Touch(this.element, {\n tap: function (e) {\n if (_this.isDoubleTapped(e) && e.tapCount === 2) {\n e.originalEvent.preventDefault();\n _this.editingHandler(e.originalEvent);\n }\n }\n });\n }\n else {\n if (this.touchEditObj) {\n this.touchEditObj.destroy();\n }\n }\n };\n TreeView.prototype.wireClickEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n this.touchClickObj = new Touch(this.element, {\n tap: function (e) {\n _this.clickHandler(e);\n }\n });\n }\n else {\n if (this.touchClickObj) {\n this.touchClickObj.destroy();\n }\n }\n };\n TreeView.prototype.wireExpandOnEvent = function (toBind) {\n var _this = this;\n if (toBind) {\n this.touchExpandObj = new Touch(this.element, {\n tap: function (e) {\n if ((_this.expandOnType === 'Click' || (_this.expandOnType === 'DblClick' && _this.isDoubleTapped(e) && e.tapCount === 2))\n && e.originalEvent.which !== 3) {\n _this.expandHandler(e);\n }\n }\n });\n }\n else {\n if (this.touchExpandObj) {\n this.touchExpandObj.destroy();\n }\n }\n };\n TreeView.prototype.mouseDownHandler = function (e) {\n this.mouseDownStatus = true;\n if (e.shiftKey || e.ctrlKey) {\n e.preventDefault();\n }\n if (e.ctrlKey && this.allowMultiSelection) {\n EventHandler.add(this.element, 'contextmenu', this.preventContextMenu, this);\n }\n };\n TreeView.prototype.preventContextMenu = function (e) {\n e.preventDefault();\n };\n TreeView.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'mousedown', this.mouseDownHandler, this);\n this.wireClickEvent(true);\n if (this.expandOnType !== 'None') {\n this.wireExpandOnEvent(true);\n }\n EventHandler.add(this.element, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.element, 'mouseout', this.onMouseLeave, this);\n this.keyboardModule = new KeyboardEvents(this.element, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n TreeView.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'mousedown', this.mouseDownHandler);\n this.wireClickEvent(false);\n this.wireExpandOnEvent(false);\n EventHandler.remove(this.element, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.element, 'mouseout', this.onMouseLeave);\n if (!this.disabled) {\n this.keyboardModule.destroy();\n }\n };\n TreeView.prototype.parents = function (element, selector) {\n var matched = [];\n var el = element.parentNode;\n while (!isNOU(el)) {\n if (matches(el, selector)) {\n matched.push(el);\n }\n el = el.parentNode;\n }\n return matched;\n };\n TreeView.prototype.isDoubleTapped = function (e) {\n var target = e.originalEvent.target;\n var secondTap;\n if (target && e.tapCount) {\n if (e.tapCount === 1) {\n this.firstTap = closest(target, '.' + LISTITEM);\n }\n else if (e.tapCount === 2) {\n secondTap = closest(target, '.' + LISTITEM);\n }\n }\n return (this.firstTap === secondTap);\n };\n TreeView.prototype.isDescendant = function (parent, child) {\n var node = child.parentNode;\n while (!isNOU(node)) {\n if (node === parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n };\n TreeView.prototype.showSpinner = function (element) {\n addClass([element], LOAD);\n createSpinner({\n target: element,\n width: Browser.isDevice ? 16 : 14\n }, this.createElement);\n showSpinner(element);\n };\n TreeView.prototype.hideSpinner = function (element) {\n hideSpinner(element);\n element.innerHTML = '';\n removeClass([element], LOAD);\n };\n TreeView.prototype.setCheckedNodes = function (nodes) {\n nodes = JSON.parse(JSON.stringify(nodes));\n this.uncheckAll(this.checkedNodes);\n this.setIndeterminate(nodes);\n if (nodes.length > 0) {\n this.checkAll(nodes);\n }\n };\n /**\n * Checks whether the checkedNodes entered are valid and sets the valid checkedNodes while changing via setmodel\n *\n * @param {string} node - The unique identifier of the node.\n * @returns {void}\n * @private\n */\n TreeView.prototype.setValidCheckedNode = function (node) {\n if (this.dataType === 1) {\n var mapper = this.fields;\n var resultData = new DataManager(this.treeData).executeLocal(new Query().where(mapper.id, 'equal', node, true));\n if (resultData[0]) {\n this.setChildCheckState(resultData, node, resultData[0]);\n if (this.autoCheck) {\n var parent_4 = resultData[0][this.fields.parentID] ? resultData[0][this.fields.parentID].toString() : null;\n var childNodes = this.getChildNodes(this.treeData, parent_4);\n var count = 0;\n for (var len = 0; len < childNodes.length; len++) {\n var childId = childNodes[parseInt(len.toString(), 10)][this.fields.id].toString();\n if (this.checkedNodes.indexOf(childId) !== -1) {\n count++;\n }\n }\n if (count === childNodes.length && this.checkedNodes.indexOf(parent_4) === -1 && parent_4) {\n this.checkedNodes.push(parent_4);\n }\n }\n }\n }\n else if (this.dataType === 2) {\n for (var a = 0; a < this.treeData.length; a++) {\n var index = this.treeData[parseInt(a.toString(), 10)][this.fields.id] ? this.treeData[parseInt(a.toString(), 10)][this.fields.id].toString() : '';\n if (index === node && this.checkedNodes.indexOf(node) === -1) {\n this.checkedNodes.push(node);\n break;\n }\n var childItems = getValue(this.fields.child.toString(), this.treeData[parseInt(a.toString(), 10)]);\n if (childItems) {\n this.setChildCheckState(childItems, node, this.treeData[parseInt(a.toString(), 10)]);\n }\n }\n }\n };\n /**\n * Checks whether the checkedNodes entered are valid and sets the valid checkedNodes while changing via setmodel(for hierarchical DS)\n *\n * @param {Object[]} childItems - The child items to check.\n * @param {string} node - The node to set the check state for.\n * @param {Object} [treeData] - The optional tree data.\n * @returns {void}\n * @private\n */\n TreeView.prototype.setChildCheckState = function (childItems, node, treeData) {\n var checkedParent;\n var count = 0;\n if (this.dataType === 1) {\n if (treeData) {\n checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : null;\n }\n for (var index = 0; index < childItems.length; index++) {\n var checkNode = childItems[parseInt(index.toString(), 10)][this.fields.id]\n ? childItems[parseInt(index.toString(), 10)][this.fields.id].toString()\n : null;\n if (treeData && checkedParent && this.autoCheck) {\n if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkNode) === -1) {\n this.checkedNodes.push(checkNode);\n }\n }\n if (checkNode === node && this.checkedNodes.indexOf(node) === -1) {\n this.checkedNodes.push(node);\n }\n var subChildItems = this.getChildNodes(this.treeData, checkNode);\n if (subChildItems) {\n this.setChildCheckState(subChildItems, node, treeData);\n }\n }\n }\n else {\n if (treeData) {\n checkedParent = treeData[this.fields.id] ? treeData[this.fields.id].toString() : '';\n }\n for (var index = 0; index < childItems.length; index++) {\n var checkedChild = childItems[parseInt(index.toString(), 10)][this.fields.id] ? childItems[parseInt(index.toString(), 10)][this.fields.id].toString() : '';\n if (treeData && checkedParent && this.autoCheck) {\n if (this.checkedNodes.indexOf(checkedParent) !== -1 && this.checkedNodes.indexOf(checkedChild) === -1) {\n this.checkedNodes.push(checkedChild);\n }\n }\n if (checkedChild === node && this.checkedNodes.indexOf(node) === -1) {\n this.checkedNodes.push(node);\n }\n var subChildItems = getValue(this.fields.child.toString(), childItems[parseInt(index.toString(), 10)]);\n if (subChildItems) {\n this.setChildCheckState(subChildItems, node, childItems[parseInt(index.toString(), 10)]);\n }\n if (this.checkedNodes.indexOf(checkedChild) !== -1 && this.autoCheck) {\n count++;\n }\n if (count === childItems.length && this.checkedNodes.indexOf(checkedParent) === -1 && this.autoCheck) {\n this.checkedNodes.push(checkedParent);\n }\n }\n }\n };\n TreeView.prototype.setIndeterminate = function (nodes) {\n for (var i = 0; i < nodes.length; i++) {\n this.setValidCheckedNode(nodes[parseInt(i.toString(), 10)]);\n }\n };\n TreeView.prototype.updatePosition = function (id, newData, isRefreshChild, childValue) {\n if (this.dataType === 1) {\n var pos = this.getDataPos(this.treeData, this.fields, id);\n this.treeData.splice(pos, 1, newData);\n if (isRefreshChild) {\n this.removeChildNodes(id);\n for (var j = 0; j < childValue.length; j++) {\n this.treeData.splice(pos, 0, childValue[parseInt(j.toString(), 10)]);\n pos++;\n }\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n else {\n this.updateChildPosition(this.treeData, this.fields, id, [newData], undefined);\n }\n };\n TreeView.prototype.updateChildPosition = function (treeData, mapper, currID, newData, index) {\n var found;\n for (var i = 0, objlen = treeData.length; i < objlen; i++) {\n var nodeId = getValue(mapper.id, treeData[parseInt(i.toString(), 10)]);\n if (treeData[parseInt(i.toString(), 10)] && nodeId && nodeId.toString() === currID) {\n treeData[parseInt(i.toString(), 10)] = newData[0];\n return true;\n }\n else if (typeof mapper.child === 'string' && !isNOU(getValue(mapper.child, treeData[parseInt(i.toString(), 10)]))) {\n var childObj = getValue(mapper.child, treeData[parseInt(i.toString(), 10)]);\n found = this.updateChildPosition(childObj, this.getChildMapper(mapper), currID, newData, index);\n if (found !== undefined) {\n break;\n }\n }\n else if (this.fields.dataSource instanceof DataManager && !isNOU(getValue('child', treeData[parseInt(i.toString(), 10)]))) {\n var childData = getValue('child', treeData[parseInt(i.toString(), 10)]);\n found = this.updateChildPosition(childData, this.getChildMapper(mapper), currID, newData, index);\n if (found !== undefined) {\n break;\n }\n }\n }\n return found;\n };\n TreeView.prototype.dynamicState = function () {\n this.setDragAndDrop(this.allowDragAndDrop);\n this.wireEditingEvents(this.allowEditing);\n if (!this.disabled) {\n this.wireEvents();\n this.setRipple();\n }\n else {\n this.unWireEvents();\n this.rippleFn();\n this.rippleIconFn();\n }\n };\n TreeView.prototype.crudOperation = function (operation, nodes, target, newText, newNode, index, prevent) {\n var _this = this;\n var data = this.fields.dataSource;\n var matchedArr = [];\n var query = this.getQuery(this.fields);\n var key = this.fields.id;\n var crud;\n var changes = {\n addedRecords: [],\n deletedRecords: [],\n changedRecords: []\n };\n var nodesID = [];\n if (nodes) {\n nodesID = this.nodeType(nodes);\n }\n else if (target) {\n if (typeof target == 'string') {\n nodesID[0] = target.toString();\n }\n else if (typeof target === 'object') {\n nodesID[0] = target.getAttribute('data-uid').toString();\n }\n }\n for (var i = 0, len = nodesID.length; i < len; i++) {\n var liEle = this.getElement(nodesID[parseInt(i.toString(), 10)]);\n if (isNullOrUndefined(liEle)) {\n continue;\n }\n var removedData = this.getNodeObject(nodesID[parseInt(i.toString(), 10)]);\n matchedArr.push(removedData);\n }\n switch (operation) {\n case 'delete':\n if (nodes.length === 1) {\n crud = data.remove(key, matchedArr[0], query.fromTable, query);\n }\n else {\n changes.deletedRecords = matchedArr;\n crud = data.saveChanges(changes, key, query.fromTable, query);\n }\n crud.then(function () { return _this.deleteSuccess(nodesID); })\n .catch(function (e) { return _this.dmFailure(e); });\n break;\n case 'update':\n matchedArr[0][this.fields.text] = newText;\n crud = data.update(key, matchedArr[0], query.fromTable, query);\n crud.then(function () { return _this.editSucess(target, newText, prevent); })\n .catch(function (e) { return _this.dmFailure(e, target, prevent); });\n break;\n case 'insert':\n if (newNode.length === 1) {\n crud = data.insert(newNode[0], query.fromTable, query);\n }\n else {\n var arr = [];\n for (var i = 0, len = newNode.length; i < len; i++) {\n arr.push(newNode[parseInt(i.toString(), 10)]);\n }\n changes.addedRecords = arr;\n crud = data.saveChanges(changes, key, query.fromTable, query);\n }\n crud.then(function () {\n var dropLi = _this.getElement(target);\n _this.addSuccess(newNode, dropLi, index);\n _this.preventExpand = false;\n }).catch(function (e) { return _this.dmFailure(e); });\n break;\n }\n };\n TreeView.prototype.deleteSuccess = function (nodes) {\n var nodeData = [];\n for (var i = 0, len = nodes.length; i < len; i++) {\n var liEle = this.getElement(nodes[parseInt(i.toString(), 10)]);\n nodeData.push(this.getNode(liEle));\n if (isNOU(liEle)) {\n continue;\n }\n this.removeNode(liEle);\n }\n this.updateInstance();\n if (this.dataType === 1) {\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n this.triggerEvent('removeNode', nodeData);\n };\n TreeView.prototype.editSucess = function (target, newText, prevent) {\n var liEle = this.getElement(target);\n var txtEle = select('.' + LISTTEXT, liEle);\n this.appendNewText(liEle, txtEle, newText, prevent);\n };\n TreeView.prototype.addSuccess = function (nodes, dropLi, index) {\n var _this = this;\n var dropUl;\n var icon = dropLi ? dropLi.querySelector('.' + ICON) : null;\n if (dropLi && icon && icon.classList.contains(EXPANDABLE) &&\n dropLi.querySelector('.' + PARENTITEM) === null) {\n this.renderChildNodes(dropLi, null, function () {\n dropUl = dropLi.querySelector('.' + PARENTITEM);\n _this.addGivenNodes(nodes, dropLi, index, true, dropUl);\n _this.triggerEvent('addNodes', nodes);\n });\n }\n else {\n this.addGivenNodes(nodes, dropLi, index, true);\n this.triggerEvent('addNodes', nodes);\n }\n };\n TreeView.prototype.dmFailure = function (e, target, prevent) {\n if (target) {\n this.updatePreviousText(target, prevent);\n }\n this.trigger('actionFailure', { error: e });\n };\n TreeView.prototype.updatePreviousText = function (target, prevent) {\n var liEle = this.getElement(target);\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateText(liEle, txtEle, this.oldText, prevent);\n };\n TreeView.prototype.getHierarchicalParentId = function (node, data, parentsID) {\n var _this = this;\n var index = data.findIndex(function (data) {\n return data[_this.fields.id] && data[_this.fields.id].toString() === node;\n });\n if (index === -1) {\n for (var i = 0; i < data.length; i++) {\n var childItems = getValue(this.fields.child.toString(), data[parseInt(i.toString(), 10)]);\n if (!isNOU(childItems)) {\n index = childItems.findIndex(function (data) {\n return data[_this.fields.id] && data[_this.fields.id].toString() === node;\n });\n if (index === -1) {\n this.getHierarchicalParentId(node, childItems, parentsID);\n }\n else {\n parentsID.push(data[parseInt(i.toString(), 10)][this.fields.id].toString());\n this.getHierarchicalParentId(data[parseInt(i.toString(), 10)][this.fields.id].toString(), this.treeData, parentsID);\n break;\n }\n }\n }\n }\n return parentsID;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TreeViewModel} newProp - The new property value.\n * @param {TreeViewModel} oldProp - The old property value.\n * @returns {void}\n * @private\n */\n TreeView.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowDragAndDrop':\n this.setDragAndDrop(this.allowDragAndDrop);\n break;\n case 'dragArea':\n if (this.allowDragAndDrop) {\n this.dragObj.dragArea = this.dragArea;\n }\n break;\n case 'allowEditing':\n this.wireEditingEvents(this.allowEditing);\n break;\n case 'allowMultiSelection':\n if (this.selectedNodes.length > 1) {\n var sNode = this.getElement(this.selectedNodes[0]);\n this.isLoaded = false;\n this.removeSelectAll();\n this.selectNode(sNode, null);\n this.isLoaded = true;\n }\n this.setMultiSelect(this.allowMultiSelection);\n this.addMultiSelect(this.allowMultiSelection);\n break;\n case 'allowTextWrap':\n this.setTextWrap();\n this.updateWrap();\n break;\n case 'checkedNodes':\n if (this.showCheckBox) {\n this.checkedNodes = oldProp.checkedNodes;\n this.setCheckedNodes(newProp.checkedNodes);\n }\n break;\n case 'autoCheck':\n if (this.showCheckBox) {\n this.autoCheck = newProp.autoCheck;\n this.ensureIndeterminate();\n }\n break;\n case 'cssClass':\n this.setCssClass(oldProp.cssClass, newProp.cssClass);\n break;\n case 'enableRtl':\n this.setEnableRtl();\n break;\n case 'expandedNodes':\n this.isAnimate = false;\n this.setProperties({ expandedNodes: [] }, true);\n this.collapseAll();\n this.isInitalExpand = true;\n this.setProperties({ expandedNodes: isNOU(newProp.expandedNodes) ? [] : newProp.expandedNodes }, true);\n this.doExpandAction();\n this.isInitalExpand = false;\n this.isAnimate = true;\n break;\n case 'expandOn':\n this.wireExpandOnEvent(false);\n this.setExpandOnType();\n if (this.expandOnType !== 'None' && !this.disabled) {\n this.wireExpandOnEvent(true);\n }\n break;\n case 'disabled':\n this.setDisabledMode();\n this.dynamicState();\n break;\n case 'fields':\n this.isAnimate = false;\n this.isFieldChange = true;\n this.initialRender = true;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!this.isReact || this.isReact && !(this.fields.dataSource instanceof DataManager)) {\n if (!this.element.classList.contains('e-filtering')) {\n this.DDTTreeData = JSON.parse(JSON.stringify(this.fields.dataSource));\n }\n this.reRenderNodes();\n }\n this.initialRender = false;\n this.isAnimate = true;\n this.isFieldChange = false;\n break;\n case 'fullRowSelect':\n this.setFullRow(this.fullRowSelect);\n this.addFullRow(this.fullRowSelect);\n if (this.allowTextWrap) {\n this.setTextWrap();\n this.updateWrap();\n }\n break;\n case 'loadOnDemand':\n if (this.loadOnDemand === false && !this.onLoaded) {\n var nodes = this.element.querySelectorAll('li');\n var i = 0;\n while (i < nodes.length) {\n if (nodes[parseInt(i.toString(), 10)].getAttribute('aria-expanded') !== 'true') {\n this.renderChildNodes(nodes[parseInt(i.toString(), 10)], true, null, true);\n }\n i++;\n }\n this.onLoaded = true;\n }\n break;\n case 'nodeTemplate':\n this.hasTemplate = false;\n this.nodeTemplateFn = this.templateComplier(this.nodeTemplate);\n this.reRenderNodes();\n break;\n case 'selectedNodes':\n this.removeSelectAll();\n this.setProperties({ selectedNodes: newProp.selectedNodes }, true);\n this.doSelectionAction();\n break;\n case 'showCheckBox':\n this.reRenderNodes();\n break;\n case 'sortOrder':\n this.reRenderNodes();\n break;\n case 'fullRowNavigable':\n this.setProperties({ fullRowNavigable: newProp.fullRowNavigable }, true);\n this.listBaseOption.itemNavigable = newProp.fullRowNavigable;\n this.reRenderNodes();\n break;\n }\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. It also removes the attributes and classes.\n *\n * @returns {void}\n */\n TreeView.prototype.destroy = function () {\n this.clearTemplate();\n this.element.removeAttribute('aria-activedescendant');\n this.unWireEvents();\n this.wireEditingEvents(false);\n if (!this.disabled) {\n this.rippleFn();\n this.rippleIconFn();\n }\n this.setCssClass(this.cssClass, null);\n this.setDragAndDrop(false);\n this.setFullRow(false);\n if (this.ulElement && this.ulElement.parentElement) {\n this.ulElement.parentElement.removeChild(this.ulElement);\n }\n this.ulElement = null;\n this.liList = null;\n this.startNode = null;\n this.firstTap = null;\n this.expandArgs = null;\n this.dragLi = null;\n this.dragTarget = null;\n this.dragParent = null;\n this.dragObj = null;\n this.dropObj = null;\n this.inputObj = null;\n this.touchEditObj = null;\n this.touchExpandObj = null;\n this.touchClickObj = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Adds the collection of TreeView nodes based on target and index position. If target node is not specified,\n * then the nodes are added as children of the given parentID or in the root level of TreeView.\n *\n * @param { object } nodes - Specifies the array of JSON data that has to be added.\n * @param { string | Element } target - Specifies ID of TreeView node/TreeView node as target element.\n * @param { number } index - Specifies the index to place the newly added nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n * @returns {void}\n */\n TreeView.prototype.addNodes = function (nodes, target, index, preventTargetExpand) {\n if (isNOU(nodes)) {\n return;\n }\n nodes = JSON.parse(JSON.stringify(nodes));\n var dropLi = this.getElement(target);\n this.preventExpand = preventTargetExpand;\n if (this.fields.dataSource instanceof DataManager) {\n if (!this.isOffline) {\n this.crudOperation('insert', null, target, null, nodes, index, this.preventExpand);\n }\n else {\n this.addSuccess(nodes, dropLi, index);\n }\n }\n else if (this.dataType === 2) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n if (dropLi) {\n this.addGivenNodes(nodes, dropLi, index);\n }\n else {\n nodes = this.getSortedData(nodes);\n for (var i = 0; i < nodes.length; i++) {\n var pid = getValue(this.fields.parentID, nodes[parseInt(i.toString(), 10)]);\n dropLi = pid ? this.getElement(pid.toString()) : pid;\n this.addGivenNodes([nodes[parseInt(i.toString(), 10)]], dropLi, index);\n }\n }\n this.groupedData = this.getGroupedData(this.treeData, this.fields.parentID);\n }\n this.updateCheckedStateFromDS();\n if (this.showCheckBox && dropLi) {\n this.ensureParentCheckState(dropLi);\n }\n if ((this.fields.dataSource instanceof DataManager === false)) {\n this.preventExpand = false;\n this.triggerEvent('addNodes', nodes);\n }\n };\n /**\n * Editing can also be enabled by using the `beginEdit` property, instead of clicking on the\n * TreeView node. On passing the node ID or element through this property, the edit textBox\n * will be created for the particular node thus allowing us to edit it.\n *\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n * @returns {void}\n */\n TreeView.prototype.beginEdit = function (node) {\n var ele = this.getElement(node);\n if (isNOU(ele) || this.disabled) {\n return;\n }\n this.createTextbox(ele);\n };\n /**\n * Checks all the unchecked nodes. You can also check specific nodes by passing array of unchecked nodes\n * as argument to this method.\n *\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @returns {void}\n */\n TreeView.prototype.checkAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, true);\n }\n };\n /**\n * Collapses all the expanded TreeView nodes. You can collapse specific nodes by passing array of nodes as argument to this method.\n * You can also collapse all the nodes excluding the hidden nodes by setting **excludeHiddenNodes** to true. If you want to collapse\n * a specific level of nodes, set **level** as argument to collapseAll method.\n *\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/ array of TreeView node.\n * @param {number} level - TreeView nodes will collapse up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes of TreeView when collapsing all nodes.\n * @returns {void}\n */\n TreeView.prototype.collapseAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, COLLAPSIBLE, false);\n }\n else {\n if (level > 0) {\n this.collapseByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.collapseAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Disables the collection of nodes by passing the ID of nodes or node elements in the array.\n *\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @returns {void}\n */\n TreeView.prototype.disableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doDisableAction(nodes);\n }\n };\n /**\n * Enables the collection of disabled nodes by passing the ID of nodes or node elements in the array.\n *\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @returns {void}\n */\n TreeView.prototype.enableNodes = function (nodes) {\n if (!isNOU(nodes)) {\n this.doEnableAction(nodes);\n }\n };\n /**\n * Ensures visibility of the TreeView node by using node ID or node element.\n * When many TreeView nodes are present and we need to find a particular node, `ensureVisible` property\n * helps bring the node to visibility by expanding the TreeView and scrolling to the specific node.\n *\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView nodes.\n * @returns {void}\n */\n TreeView.prototype.ensureVisible = function (node) {\n var parentsId = [];\n if (this.dataType === 1) {\n var nodeData = this.getTreeData(node);\n while (nodeData.length !== 0 && !isNOU(nodeData[0][this.fields.parentID])) {\n parentsId.push(nodeData[0][this.fields.parentID].toString());\n nodeData = this.getTreeData(nodeData[0][this.fields.parentID].toString());\n }\n }\n else if (this.dataType === 2) {\n parentsId = this.getHierarchicalParentId(node, this.treeData, parentsId);\n }\n this.expandAll(parentsId.reverse());\n var liEle = this.getElement(node);\n if (!isNOU(liEle)) {\n if (typeof node == 'object') {\n var parents = this.parents(liEle, '.' + LISTITEM);\n this.expandAll(parents);\n }\n setTimeout(function () { liEle.scrollIntoView({ behavior: 'smooth' }); }, 450);\n }\n };\n /**\n * Expands all the collapsed TreeView nodes. You can expand the specific nodes by passing the array of collapsed nodes\n * as argument to this method. You can also expand all the collapsed nodes by excluding the hidden nodes by setting\n * **excludeHiddenNodes** to true to this method. To expand a specific level of nodes, set **level** as argument to expandAll method.\n *\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView nodes.\n * @param {number} level - TreeView nodes will expand up to the given level.\n * @param {boolean} excludeHiddenNodes - Whether or not to exclude hidden nodes when expanding all nodes.\n * @returns {void}\n */\n TreeView.prototype.expandAll = function (nodes, level, excludeHiddenNodes) {\n if (!isNOU(nodes)) {\n this.doGivenAction(nodes, EXPANDABLE, true);\n }\n else {\n if (level > 0) {\n this.expandByLevel(select('.' + PARENTITEM, this.element), level, excludeHiddenNodes);\n }\n else {\n this.expandAllNodes(excludeHiddenNodes);\n }\n }\n };\n /**\n * Gets all the checked nodes including child, whether it is loaded or not.\n *\n * @returns {string[]} - An array of strings representing the unique identifiers of checked nodes.\n */\n TreeView.prototype.getAllCheckedNodes = function () {\n var checkNodes = this.checkedNodes;\n return checkNodes;\n };\n /**\n * Gets all the disabled nodes including child, whether it is loaded or not.\n *\n * @returns {string[]} An array of strings representing the unique identifiers of disabled nodes.\n */\n TreeView.prototype.getDisabledNodes = function () {\n var disabledNodes = this.disableNode;\n return disabledNodes;\n };\n /**\n * Gets the node's data such as id, text, parentID, selected, isChecked, and expanded by passing the node element or it's ID.\n *\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n * @returns {Object} - The data associated with the specified node.\n */\n TreeView.prototype.getNode = function (node) {\n var ele = this.getElement(node);\n return this.getNodeData(ele, true);\n };\n /**\n * To get the updated data source of TreeView after performing some operation like drag and drop, node editing,\n * node selecting/unSelecting, node expanding/collapsing, node checking/unChecking, adding and removing node.\n * * If you pass the ID of TreeView node as arguments for this method then it will return the updated data source\n * of the corresponding node otherwise it will return the entire updated data source of TreeView.\n * * The updated data source also contains custom attributes if you specified in data source.\n *\n * @param {string | Element} node - Specifies ID of TreeView node/TreeView node.\n * @isGenericType true\n * @returns {Object} - The tree data associated with the specified node or element.\n */\n TreeView.prototype.getTreeData = function (node) {\n var id = this.getId(node);\n this.updatePersistProp();\n if (isNOU(id)) {\n return this.treeData;\n }\n else {\n var data = this.getNodeObject(id);\n return isNOU(data) ? [] : [data];\n }\n };\n /**\n * Moves the collection of nodes within the same TreeView based on target or its index position.\n *\n * @param {string[] | Element[]} sourceNodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {number} index - Specifies the index to place the moved nodes in the target element.\n * @param { boolean } preventTargetExpand - If set to true, the target parent node will be prevented from auto expanding.\n * @returns {void}\n */\n TreeView.prototype.moveNodes = function (sourceNodes, target, index, preventTargetExpand) {\n var dropLi = this.getElement(target);\n var nodeData = [];\n if (isNOU(dropLi)) {\n return;\n }\n for (var i = 0; i < sourceNodes.length; i++) {\n var dragLi = this.getElement(sourceNodes[parseInt(i.toString(), 10)]);\n nodeData.push(this.getNode(dragLi));\n if (isNOU(dragLi) || dropLi.isSameNode(dragLi) || this.isDescendant(dragLi, dropLi)) {\n continue;\n }\n this.preventExpand = preventTargetExpand;\n this.dropAsChildNode(dragLi, dropLi, this, index, null, null, null, dropLi);\n }\n if (this.fields.dataSource instanceof DataManager === false) {\n this.preventExpand = false;\n }\n this.triggerEvent('moveNodes', nodeData);\n };\n /**\n * Refreshes a particular node of the TreeView.\n *\n * @param {string | Element} target - Specifies the ID of TreeView node or TreeView node as target element.\n * @param {Object[]} newData - Specifies the new data of TreeView node.\n * @returns {void}\n */\n TreeView.prototype.refreshNode = function (target, newData) {\n if (isNOU(target) || isNOU(newData)) {\n return;\n }\n var isRefreshChild = false;\n if (this.dataType === 1 && newData.length > 1) {\n isRefreshChild = true;\n }\n else if (this.dataType === 2 && newData.length === 1) {\n var updatedChildValue = getValue(this.fields.child.toString(), newData[0]);\n if (!isNOU(updatedChildValue)) {\n isRefreshChild = true;\n }\n }\n var liEle = this.getElement(target);\n var id = liEle ? liEle.getAttribute('data-uid') : ((target) ? target.toString() : null);\n this.refreshData = this.getNodeObject(id);\n newData = JSON.parse(JSON.stringify(newData));\n var newNodeData;\n var parentData;\n if (this.dataType === 1 && isRefreshChild) {\n for (var k = 0; k < newData.length; k++) {\n if (isNOU(newData[parseInt(k.toString(), 10)][this.fields.parentID])) {\n parentData = newData[parseInt(k.toString(), 10)];\n newData.splice(k, 1);\n break;\n }\n }\n newNodeData = extend({}, this.refreshData, parentData);\n }\n else {\n newNodeData = extend({}, this.refreshData, newData[0]);\n }\n if (isNOU(liEle)) {\n this.updatePosition(id, newNodeData, isRefreshChild, newData);\n return;\n }\n this.isRefreshed = true;\n var level = parseFloat(liEle.getAttribute('aria-level'));\n var newliEle = ListBase.createListItemFromJson(this.createElement, [newNodeData], this.listBaseOption, level);\n var ul = select('.' + PARENTITEM, liEle);\n var childItems = getValue(this.fields.child.toString(), newNodeData);\n if ((isRefreshChild && ul) || (isRefreshChild && !isNOU(childItems))) {\n var parentEle = liEle.parentElement;\n var index = Array.prototype.indexOf.call(parentEle.childNodes, liEle);\n remove(liEle);\n parentEle.insertBefore(newliEle[0], parentEle.childNodes[parseInt(index.toString(), 10)]);\n this.updatePosition(id, newNodeData, isRefreshChild, newData);\n if (isRefreshChild && ul) {\n this.expandAll([id]);\n }\n }\n else {\n var txtEle = select('.' + TEXTWRAP, liEle);\n var newTextEle = select('.' + TEXTWRAP, newliEle[0]);\n var icon = select('div.' + ICON, txtEle);\n var newIcon = select('div.' + ICON, newTextEle);\n if (icon && newIcon) {\n if (newIcon.classList.contains(EXPANDABLE) && icon.classList.contains(COLLAPSIBLE)) {\n removeClass([newIcon], EXPANDABLE);\n addClass([newIcon], COLLAPSIBLE);\n }\n else if (newIcon.classList.contains(COLLAPSIBLE) && icon.classList.contains(EXPANDABLE)) {\n removeClass([newIcon], COLLAPSIBLE);\n addClass([newIcon], EXPANDABLE);\n }\n else if (icon.classList.contains('interaction')) {\n addClass([newIcon], 'interaction');\n }\n }\n remove(txtEle);\n var fullEle = select('.' + FULLROW, liEle);\n fullEle.parentNode.insertBefore(newTextEle, fullEle.nextSibling);\n this.updatePosition(id, newNodeData, isRefreshChild, newData);\n }\n liEle = this.getElement(target);\n if (newNodeData[this.fields.tooltip]) {\n liEle.setAttribute('title', newNodeData[this.fields.tooltip]);\n }\n if (Object.prototype.hasOwnProperty.call(newNodeData, this.fields.htmlAttributes) && newNodeData[this.fields.htmlAttributes]) {\n var attr = {};\n merge(attr, newNodeData[this.fields.htmlAttributes]);\n if (attr.class) {\n addClass([liEle], attr.class.split(' '));\n delete attr.class;\n }\n else {\n attributes(liEle, attr);\n }\n }\n if (this.selectedNodes.indexOf(id) !== -1) {\n liEle.setAttribute('aria-selected', 'true');\n addClass([liEle], ACTIVE);\n }\n this.isRefreshed = false;\n this.triggerEvent('refreshNode', [this.getNode(liEle)]);\n };\n /**\n * Removes the collection of TreeView nodes by passing the array of node details as argument to this method.\n *\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @returns {void}\n */\n TreeView.prototype.removeNodes = function (nodes) {\n if (!isNOU(nodes)) {\n if (this.fields.dataSource instanceof DataManager && !this.isOffline) {\n this.crudOperation('delete', nodes);\n }\n else {\n this.deleteSuccess(nodes);\n }\n }\n };\n /**\n * Replaces the text of the TreeView node with the given text.\n *\n * @param {string | Element} target - Specifies ID of TreeView node/TreeView node as target element.\n * @param {string} newText - Specifies the new text of TreeView node.\n * @returns {void}\n */\n TreeView.prototype.updateNode = function (target, newText) {\n var _this = this;\n if (isNOU(target) || isNOU(newText) || !this.allowEditing) {\n return;\n }\n var liEle = this.getElement(target);\n if (isNOU(liEle)) {\n return;\n }\n var txtEle = select('.' + LISTTEXT, liEle);\n this.updateOldText(liEle);\n var eventArgs = this.getEditEvent(liEle, null, null);\n this.trigger('nodeEditing', eventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n if (_this.fields.dataSource instanceof DataManager && !_this.isOffline) {\n _this.crudOperation('update', null, target, newText, null, null, false);\n }\n else {\n _this.appendNewText(liEle, txtEle, newText, false);\n }\n }\n });\n };\n /**\n * Unchecks all the checked nodes. You can also uncheck the specific nodes by passing array of checked nodes\n * as argument to this method.\n *\n * @param {string[] | Element[]} nodes - Specifies the array of TreeView nodes ID/array of TreeView node.\n * @returns {void}\n */\n TreeView.prototype.uncheckAll = function (nodes) {\n if (this.showCheckBox) {\n this.doCheckBoxAction(nodes, false);\n }\n };\n var TreeView_1;\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowEditing\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowMultiSelection\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"allowTextWrap\", void 0);\n __decorate([\n Complex({}, NodeAnimationSettings)\n ], TreeView.prototype, \"animation\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"checkedNodes\", void 0);\n __decorate([\n Property('')\n ], TreeView.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"disabled\", void 0);\n __decorate([\n Property(null)\n ], TreeView.prototype, \"dragArea\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"expandedNodes\", void 0);\n __decorate([\n Property('Auto')\n ], TreeView.prototype, \"expandOn\", void 0);\n __decorate([\n Complex({}, FieldsSettings)\n ], TreeView.prototype, \"fields\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"fullRowSelect\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"loadOnDemand\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"locale\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"nodeTemplate\", void 0);\n __decorate([\n Property()\n ], TreeView.prototype, \"selectedNodes\", void 0);\n __decorate([\n Property('None')\n ], TreeView.prototype, \"sortOrder\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"showCheckBox\", void 0);\n __decorate([\n Property(true)\n ], TreeView.prototype, \"autoCheck\", void 0);\n __decorate([\n Property(false)\n ], TreeView.prototype, \"fullRowNavigable\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"actionFailure\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataBound\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"dataSourceChanged\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"drawNode\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"keyPress\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeChecking\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeClicked\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsed\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeCollapsing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragging\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStart\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDragStop\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeDropped\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEdited\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeEditing\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanded\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeExpanding\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelected\", void 0);\n __decorate([\n Event()\n ], TreeView.prototype, \"nodeSelecting\", void 0);\n TreeView = TreeView_1 = __decorate([\n NotifyPropertyChanges\n ], TreeView);\n return TreeView;\n}(Component));\nexport { TreeView };\n","import { createElement, isNullOrUndefined, L10n, classList } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { Tab, TreeView } from '@syncfusion/ej2-navigations';\n/**\n * Options Pane class.\n */\nvar OptionsPane = /** @class */ (function () {\n function OptionsPane(documentHelper) {\n var _this = this;\n /**\n * @private\n */\n this.isOptionsPaneShow = false;\n this.findOption = 'None';\n this.matchCase = undefined;\n this.wholeWord = undefined;\n // private regular: CheckBox = undefined;\n this.searchText = 'Navigation';\n this.resultsText = 'Results';\n this.messageDivText = 'No matches';\n this.replaceButtonText = 'Replace';\n this.replaceAllButtonText = 'Replace All';\n this.focusedIndex = -1;\n this.focusedElement = [];\n this.isOptionsPane = true;\n this.replacePaneText = 'Replace';\n this.findPaneText = 'Find';\n this.headingPaneText = 'Heading';\n this.matchDivReplaceText = 'No matches';\n /**\n * @private\n */\n this.tabInstance = undefined;\n /**\n * @private\n */\n this.isReplace = false;\n /**\n * @private\n */\n this.isUpdateHeading = false;\n /**\n * @returns {void}\n */\n this.searchOptionChange = function () {\n _this.clearSearchResultItems();\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n var inputText = _this.searchInput.value;\n if (inputText === '') {\n return;\n }\n var pattern = _this.documentHelper.owner.searchModule.textSearch.stringToRegex(inputText, _this.findOption);\n var endSelection = _this.documentHelper.selection.end;\n var selectionIndex = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.documentHelper.owner.searchModule.textSearch.findAll(pattern, _this.findOption, selectionIndex);\n if (_this.results != null && _this.results.length > 0) {\n _this.navigateSearchResult(false);\n }\n else {\n _this.viewer.renderVisiblePages();\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * @returns {void}\n */\n this.onEnableDisableReplaceButton = function () {\n if (_this.searchInput.value.length !== 0) {\n _this.replaceButton.disabled = false;\n _this.replaceAllButton.disabled = false;\n }\n else {\n _this.replaceButton.disabled = true;\n _this.replaceAllButton.disabled = true;\n }\n if (!isNullOrUndefined(_this.searchInput.value) && _this.searchInput.value.match(/[!\\@\\#$%\\^&*\\(\\)_\\-+\\=\\[\\]\\{\\};:\"\\|,.<>\\/?`~\\s\\\\؟°÷×،؛]/) && _this.searchInput.value !== \"\") {\n _this.wholeWord.checked = false;\n _this.wholeWord.disabled = true;\n }\n else {\n _this.wholeWord.disabled = false;\n }\n };\n /**\n * Fires on key down on options pane.\n *\n * @private\n * @param {KeyboardEvent} event - Specifies the focus of current element.\n * @returns {void}\n */\n this.onKeyDownOnOptionPane = function (event) {\n // if (event.keyCode === 70) {\n // event.preventDefault();\n // return;\n // }\n if (event.keyCode === 9) {\n event.preventDefault();\n var focusIndex = undefined;\n if (event.shiftKey) {\n focusIndex = (_this.focusedIndex === 0 || isNullOrUndefined(_this.focusedIndex)) ?\n _this.focusedElement.length - 1 : _this.focusedIndex - 1;\n }\n else {\n focusIndex = (_this.focusedElement.length - 1 === _this.focusedIndex || isNullOrUndefined(_this.focusedIndex)) ?\n 0 : _this.focusedIndex + 1;\n }\n var element = _this.focusedElement[focusIndex];\n element.focus();\n if (element instanceof HTMLInputElement) {\n element.select();\n }\n _this.focusedIndex = focusIndex;\n if (element instanceof HTMLLIElement) {\n _this.scrollToPosition(element);\n }\n }\n else if (event.keyCode === 13) {\n _this.hideMatchDiv();\n if (event.target !== _this.searchInput && event.target !== _this.closeButton) {\n event.preventDefault();\n var index = _this.focusedElement.indexOf(event.target);\n if (index !== -1) {\n var list = _this.focusedElement[index];\n list.click();\n list.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else if (event.keyCode === 40 || event.keyCode === 38) {\n if (_this.resultsListBlock.style.display !== 'none') {\n var index = void 0;\n var element = void 0;\n if (event.keyCode === 40) {\n if (_this.focusedIndex > 7) {\n if (_this.focusedIndex + 1 < _this.focusedElement.length) {\n element = _this.focusedElement[_this.focusedIndex + 1];\n element.focus();\n _this.focusedIndex = _this.focusedIndex + 1;\n }\n }\n else {\n index = (_this.focusedElement.length - _this.resultsListBlock.children.length) + _this.results.currentIndex + 1;\n if (index < _this.focusedElement.length) {\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n else {\n if (_this.focusedIndex > 6) {\n index = _this.focusedIndex - 1;\n element = _this.focusedElement[index];\n element.focus();\n _this.focusedIndex = index;\n }\n }\n }\n }\n };\n /**\n * Fires on replace.\n *\n * @private\n * @returns {void}\n */\n this.onReplaceButtonClick = function () {\n var optionsPane = _this.optionsPane;\n var findText = _this.searchInput.value;\n var replaceText = _this.replaceWith.value;\n var results = _this.documentHelper.owner.searchModule.textSearchResults;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n if (_this.documentHelper.owner.selectionModule != null) {\n var selectionText = _this.documentHelper.owner.selectionModule.text;\n if (!_this.documentHelper.owner.selectionModule.isEmpty) {\n if (_this.documentHelper.owner.selectionModule.isForward) {\n _this.documentHelper.owner.selectionModule.selectContent(_this.documentHelper.owner.selectionModule.start, true);\n }\n else {\n _this.documentHelper.owner.selectionModule.selectContent(_this.documentHelper.owner.selectionModule.end, true);\n }\n }\n if (!isNullOrUndefined(results) && !isNullOrUndefined(results.currentSearchResult)) {\n var result = results.currentSearchResult;\n _this.documentHelper.owner.searchModule.navigate(result);\n if (result.text === selectionText) {\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n _this.documentHelper.owner.searchModule.replace(replace, result, results);\n var pattern = _this.documentHelper.owner.searchModule.textSearch.stringToRegex(findText, _this.findOption);\n var endSelection = _this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.documentHelper.owner.searchModule.textSearch.findAll(pattern, _this.findOption, index);\n if (!isNullOrUndefined(_this.results) && !isNullOrUndefined(_this.results.currentSearchResult)) {\n _this.documentHelper.owner.searchModule.navigate(_this.results.currentSearchResult);\n }\n else {\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n _this.documentHelper.owner.findResultsList = [];\n if (!isNullOrUndefined(_this.results) && _this.results.innerList.length > 0) {\n _this.navigateSearchResult(true);\n }\n else {\n _this.resultsListBlock.innerHTML = '';\n }\n }\n else {\n _this.documentHelper.owner.searchModule.findAll(findText, _this.findOption);\n }\n }\n else {\n _this.documentHelper.owner.searchModule.findAll(findText, _this.findOption);\n _this.messageDiv.style.display = 'block';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant(_this.matchDivReplaceText);\n }\n }\n }\n };\n /**\n * Fires on replace all.\n *\n * @private\n * @returns {void}\n */\n this.onReplaceAllButtonClick = function () {\n _this.replaceAll();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * Fires on search icon.\n *\n * @private\n * @returns {void}\n */\n this.searchIconClickInternal = function () {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var inputElement = document.getElementById(_this.documentHelper.owner.containerId + '_option_search_text_box');\n /* eslint-enable @typescript-eslint/no-explicit-any */\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n _this.hideMatchDiv();\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n inputElement.value = '';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.matchDiv.style.display = 'none';\n _this.occurrenceDiv.style.display = 'none';\n _this.onEnableDisableReplaceButton();\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n _this.clearSearchResultItems();\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n _this.viewer.renderVisiblePages();\n return;\n }\n if (_this.searchIcon.classList.contains('e-de-op-search-icon') && text.length >= 1) {\n _this.searchIcon.classList.add('e-de-op-search-close-icon');\n _this.searchIcon.classList.remove('e-de-op-search-icon');\n _this.onEnableDisableReplaceButton();\n }\n _this.clearSearchResultItems();\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n var patterns = _this.documentHelper.owner.searchModule.textSearch.stringToRegex(text, _this.findOption);\n var endSelection = _this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n _this.results = _this.documentHelper.owner.searchModule.textSearch.findAll(patterns, _this.findOption, index);\n if (_this.results != null && _this.results.length > 0) {\n var start = _this.results.innerList[_this.results.currentIndex].start;\n var end = _this.results.innerList[_this.results.currentIndex].end;\n _this.documentHelper.scrollToPosition(start, end, true);\n _this.navigateSearchResult(false);\n _this.getMessageDivHeight();\n var height = _this.isOptionsPane ? 215 : 292;\n var resultsContainerHeight = _this.optionsPane.offsetHeight - _this.findTab.offsetHeight;\n _this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n }\n else {\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'block';\n _this.resultsListBlock.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Fires on getting next results.\n *\n * @private\n * @returns {void}\n */\n this.navigateNextResultButtonClick = function () {\n if (document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container').style.display !== 'none') {\n var selectionEnd = _this.documentHelper.owner.selectionModule.end;\n var nextResult = void 0;\n var currentIndex = 0;\n if (selectionEnd.isExistAfter(_this.results.currentSearchResult.start)) {\n currentIndex = _this.results.currentIndex;\n }\n for (var i = currentIndex; i < _this.results.length; i++) {\n var result = _this.results.innerList[i];\n if (selectionEnd.isExistBefore(result.start) || selectionEnd.isAtSamePosition(result.start)) {\n nextResult = result;\n _this.results.currentIndex = i;\n break;\n }\n }\n if (isNullOrUndefined(nextResult)) {\n _this.results.currentIndex = 0;\n nextResult = _this.results.innerList[0];\n }\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.updateListItems(nextResult);\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToNextResult);\n }\n };\n /**\n * Fires on getting previous results.\n *\n * @private\n * @returns {void}\n */\n this.navigatePreviousResultButtonClick = function () {\n if (document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container') != null &&\n document.getElementById(_this.documentHelper.owner.containerId + '_list_box_container').style.display !== 'none') {\n var previousResult = void 0;\n var selectionStart = _this.documentHelper.owner.selectionModule.start;\n var currentIndex = _this.results.currentIndex;\n if (selectionStart.isExistAfter(_this.results.currentSearchResult.start)) {\n currentIndex = _this.results.length - 1;\n }\n for (var i = currentIndex; i >= 0; i--) {\n var result = _this.results.innerList[i];\n if (selectionStart.isExistAfter(result.start) || _this.documentHelper.owner.selectionModule.end.isAtSamePosition(result.start)) {\n previousResult = result;\n _this.results.currentIndex = i;\n break;\n }\n }\n if (isNullOrUndefined(previousResult)) {\n _this.results.currentIndex = _this.results.length - 1;\n previousResult = _this.results.innerList[_this.results.currentIndex];\n }\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (_this.results.currentIndex + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.updateListItems(previousResult);\n _this.focusedIndex = _this.focusedElement.indexOf(_this.navigateToPreviousResult);\n }\n };\n /**\n * Fires on key down\n *\n * @private\n * @param {KeyboardEvent} event - Speficies key down actions.\n * @returns {void}\n */\n this.onKeyDown = function (event) {\n var code = event.which || event.keyCode;\n if (code === 13 && event.keyCode !== 9 && event.keyCode !== 40) {\n event.preventDefault();\n _this.findDiv.style.height = '';\n _this.onKeyDownInternal();\n }\n else if (code === 8 && (_this.searchInput.value.length === 0)) {\n _this.resultContainer.style.display = 'block';\n }\n else if (event.keyCode !== 9 && event.keyCode !== 40 && event.keyCode !== 27) {\n _this.documentHelper.owner.searchModule.clearSearchHighlight();\n _this.clearSearchResultItems();\n _this.viewer.renderVisiblePages();\n _this.resultsListBlock.style.display = 'none';\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('No matches');\n _this.resultContainer.style.display = 'none';\n _this.clearFocusElement();\n _this.resultsListBlock.innerHTML = '';\n if (_this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n _this.searchIcon.classList.add('e-de-op-search-icon');\n _this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n }\n else if (code === 27 && event.keyCode === 27) {\n _this.showHideOptionsPane(false);\n _this.documentHelper.owner.documentEditorSettings.showNavigationPane = false;\n _this.documentHelper.updateFocus();\n }\n };\n /**\n * Close the optios pane.\n *\n * @private\n * @returns {void}\n */\n this.close = function () {\n _this.clearFocusElement();\n _this.showHideOptionsPane(false);\n _this.documentHelper.owner.documentEditorSettings.showNavigationPane = false;\n _this.resultsListBlock.innerHTML = '';\n _this.focusedIndex = 1;\n _this.isOptionsPane = true;\n _this.documentHelper.updateFocus();\n };\n /**\n * Fires on results list block.\n *\n * @private\n * @param {MouseEvent} args - Specifies which list was clicked.\n * @returns {void}\n */\n this.resultListBlockClick = function (args) {\n var currentlist = args.target;\n var element = _this.resultsListBlock.children;\n var index = 0;\n for (var i = 0; i < element.length; i++) {\n var list_1 = element[i];\n if (list_1.classList.contains('e-de-search-result-hglt')) {\n list_1.classList.remove('e-de-search-result-hglt');\n list_1.children[0].classList.remove('e-de-op-search-word-text');\n list_1.classList.add('e-de-search-result-item');\n }\n }\n var list;\n for (var i = 0; i < element.length; i++) {\n if (currentlist === element[i]) {\n index = i;\n list = element[i];\n if (list.classList.contains('e-de-search-result-item')) {\n list.classList.remove('e-de-search-result-item');\n list.classList.add('e-de-search-result-hglt');\n list.children[0].classList.add('e-de-op-search-word-text');\n _this.focusedIndex = _this.focusedElement.indexOf(list);\n }\n }\n }\n var currentelement = _this.results.innerList[index];\n _this.results.currentIndex = index;\n _this.messageDiv.innerHTML = _this.localeValue.getConstant('Result') + ' ' + (index + 1) + ' ' + _this.localeValue.getConstant('of') + ' ' + _this.resultsListBlock.children.length;\n _this.documentHelper.owner.searchModule.navigate(currentelement);\n _this.documentHelper.owner.searchModule.highlight(_this.results);\n if (list) {\n list.focus();\n }\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(OptionsPane.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n OptionsPane.prototype.getModuleName = function () {\n return 'OptionsPane';\n };\n /**\n * Initialize the options pane.\n *\n * @private\n * @param {L10n} localeValue - Specifies the localization based on culture.\n * @param {boolean} isRtl - Specifies the Rtl.\n * @returns {void}\n */\n /* eslint-disable */\n OptionsPane.prototype.initOptionsPane = function (localeValue, isRtl) {\n var viewer = this.viewer;\n this.localeValue = localeValue;\n this.optionsPane = createElement('div', { className: 'e-de-op', styles: 'display:none;' });\n this.optionsPane.addEventListener('keydown', this.onKeyDownOnOptionPane);\n //parent\n this.findTab = createElement('div', { id: this.documentHelper.owner.containerId + '_findTabDiv', className: 'e-de-op-tab' });\n this.optionsPane.appendChild(this.findTab);\n //head\n this.searchDiv = createElement('div', {\n className: 'e-de-op-header',\n innerHTML: localeValue.getConstant(this.searchText)\n });\n this.findTab.appendChild(this.searchDiv);\n this.closeButton = createElement('button', {\n className: 'e-de-op-close-button e-de-close-icon e-de-op-icon-btn e-btn e-flat e-icon-btn', id: 'close',\n attrs: { type: 'button' }\n });\n this.closeButton.setAttribute('aria-label', localeValue.getConstant('Close'));\n this.findTab.appendChild(this.closeButton);\n var closeSpan = createElement('span', { className: 'e-de-op-close-icon e-de-close-icon e-btn-icon e-icons' });\n this.closeButton.appendChild(closeSpan);\n this.focusedElement.push(this.closeButton);\n // tab\n this.tabDiv = createElement('div');\n this.findTab.appendChild(this.tabDiv);\n this.findTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.findPaneText) });\n this.replaceTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.replacePaneText) });\n this.headingTabButton = createElement('div', { innerHTML: localeValue.getConstant(this.headingPaneText) });\n var items = [\n { header: { text: this.headingTabButton } },\n { header: { text: this.findTabButton } },\n { header: { text: this.replaceTabButton } }\n ];\n this.tabInstance = new Tab({ items: items, enableRtl: isRtl, selected: this.selectedTabItem.bind(this) });\n this.tabInstance.isStringTemplate = true;\n this.tabInstance.appendTo(this.tabDiv);\n //search\n this.findTabContentDiv = createElement('div', { className: 'e-de-search-tab-content', styles: 'display:none;' });\n this.findTab.appendChild(this.findTabContentDiv);\n this.searchTextBoxContainer = createElement('div', { className: 'e-input-group e-de-op-input-group' });\n this.findTabContentDiv.appendChild(this.searchTextBoxContainer);\n this.searchInput = createElement('input', { className: 'e-input e-de-search-input', id: this.documentHelper.owner.containerId + '_option_search_text_box', attrs: { placeholder: localeValue.getConstant('Search for') } });\n this.searchTextBoxContainer.appendChild(this.searchInput);\n this.searchIcon = createElement('span', {\n className: 'e-de-op-icon e-de-op-search-icon e-input-group-icon e-icon',\n id: this.documentHelper.owner.containerId + '_search-icon'\n });\n this.searchIcon.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.searchIcon);\n this.focusedElement.push(this.searchIcon);\n this.navigateToPreviousResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-up e-spin-up e-btn-icon e-icon e-input-group-icon' });\n this.navigateToPreviousResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToPreviousResult);\n this.focusedElement.push(this.navigateToPreviousResult);\n this.navigateToNextResult = createElement('span', { className: 'e-de-op-icon e-de-op-nav-btn e-arrow-down e-spin-down e-btn-icon e-icon e-input-group-icon' });\n this.navigateToNextResult.tabIndex = 0;\n this.searchTextBoxContainer.appendChild(this.navigateToNextResult);\n this.focusedElement.push(this.navigateToNextResult);\n //match\n this.checkboxDiv = createElement('div', { className: 'e-de-op-more-less', styles: 'display:none' });\n this.matchInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.documentHelper.owner.containerId + '_matchCase'\n });\n this.checkboxDiv.appendChild(this.matchInput);\n this.matchCase = new CheckBox({ label: localeValue.getConstant('Match case'), enableRtl: isRtl, checked: false, change: this.matchChange.bind(this) });\n this.matchCase.appendTo(this.matchInput);\n this.focusedElement.push(this.matchInput);\n this.matchInput.tabIndex = 0;\n var wholeWordLabel;\n if (isRtl) {\n wholeWordLabel = '_e-de-rtl';\n }\n else {\n wholeWordLabel = '_e-de-ltr';\n }\n this.wholeInput = createElement('input', {\n attrs: { type: 'checkbox' },\n id: this.documentHelper.owner.containerId + '_wholeWord' + wholeWordLabel\n });\n this.checkboxDiv.appendChild(this.wholeInput);\n this.wholeWord = new CheckBox({ label: localeValue.getConstant('Whole words'), enableRtl: isRtl, checked: false, change: this.wholeWordsChange.bind(this) });\n this.wholeWord.appendTo(this.wholeInput);\n this.focusedElement.push(this.wholeInput);\n this.wholeInput.tabIndex = 0;\n this.findTab.appendChild(this.checkboxDiv);\n //Replace tab\n this.replaceTabContentDiv = createElement('div', { className: 'e-de-op-replacetabcontentdiv', styles: 'display:none;' });\n this.findTab.appendChild(this.replaceTabContentDiv);\n this.createReplacePane(isRtl);\n //container\n this.resultContainer = createElement('div', { styles: 'width:85%;display:none;', className: 'e-de-op-result-container' });\n this.findTab.appendChild(this.resultContainer);\n this.messageDiv = createElement('div', { className: this.documentHelper.owner.containerId + '_messageDiv e-de-op-msg', innerHTML: this.localeValue.getConstant(this.messageDivText), id: this.documentHelper.owner.containerId + '_search_status' });\n this.resultContainer.appendChild(this.messageDiv);\n //resultblock-finding\n var resultDiv = createElement('div', { id: this.documentHelper.owner.containerId + '_resultDiv' });\n this.optionsPane.appendChild(resultDiv);\n this.findDiv = createElement('div', { className: 'findDiv', styles: 'display:none;' });\n resultDiv.appendChild(this.findDiv);\n this.resultsListBlock = createElement('div', { id: this.documentHelper.owner.containerId + '_list_box_container', styles: 'display:none;width:270px;list-style:none;padding-right:5px;overflow:auto;', className: 'e-de-result-list-block' });\n this.findDiv.appendChild(this.resultsListBlock);\n //tree view\n this.treeviewDiv = createElement('div', { className: 'e-de-scrollbar-hide', styles: 'height:375px;overflow:auto;padding-top:5px', id: this.documentHelper.owner.containerId + '_treeDiv' });\n this.initHeadingTab();\n this.onWireEvents();\n if (isRtl) {\n this.optionsPane.classList.add('e-de-rtl');\n this.closeButton.classList.add('e-de-rtl');\n this.searchDiv.classList.add('e-de-rtl');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.updateHeadingTab = function () {\n if (!isNullOrUndefined(this.treeviewDiv)) {\n this.isUpdateHeading = true;\n this.treeviewDiv.innerHTML = '';\n this.data = this.dataForTreeview();\n this.initHeadingTab();\n this.isUpdateHeading = false;\n }\n };\n /**\n * Initialize the heading tab with the values.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.initHeadingTab = function () {\n var tree = createElement('div', { id: 'tree' });\n if (!isNullOrUndefined(this.data) && this.data.length > 0) {\n this.treeviewObject = new TreeView({\n fields: { dataSource: this.data, id: 'id', text: 'name', parentID: 'pid', hasChildren: 'hasChild', tooltip: 'tooltipText' },\n nodeClicked: this.nodeClick.bind(this),\n cssClass: 'e-de-custom-treeview',\n });\n if (!isNullOrUndefined(this.treeviewDiv)) {\n this.treeviewDiv.innerHTML = \"\";\n this.treeviewObject.appendTo(tree);\n this.treeviewDiv.appendChild(tree);\n if (!isNullOrUndefined(this.findTab)) {\n this.findTab.appendChild(this.treeviewDiv);\n }\n }\n }\n else {\n if (!isNullOrUndefined(this.treeviewDiv)) {\n this.treeviewDiv.innerHTML = this.localeValue.getConstant('No Headings');\n this.findTab.appendChild(this.treeviewDiv);\n }\n }\n };\n OptionsPane.prototype.nodeClick = function (args) {\n var targetNodeId = this.treeviewObject.selectedNodes[0];\n if (!isNullOrUndefined(targetNodeId))\n this.documentHelper.selection.navigateBookmark(this.data[(targetNodeId - 1)].hyperlink.toString(), true);\n };\n /**\n * Data source for tree view.\n *\n * @private\n * @returns {{ [key: string]: Object; }[]}\n */\n OptionsPane.prototype.dataForTreeview = function () {\n this.data = [];\n var datas = this.createDataSourceForTreeview();\n this.documentHelper.blockToShift = undefined;\n var data = [];\n if (!isNullOrUndefined(this.treeviewDiv)) {\n var index = 1;\n if (!isNullOrUndefined(datas) && datas.length > 0) {\n for (var i = 0; i < datas.length; i++) {\n var parentId = null;\n if (datas[i].paragraphFormat.outlineLevel !== \"Level1\" && i > 0) {\n var currentIndex = i - 1;\n if (datas[i].paragraphFormat.outlineLevel === datas[i - 1].paragraphFormat.outlineLevel) {\n parentId = data[currentIndex].pid;\n }\n else if (Number(datas[i].paragraphFormat.outlineLevel.substr(5, 1)) > Number(datas[currentIndex].paragraphFormat.outlineLevel.substr(5, 1))) {\n parentId = data[currentIndex].id;\n data[currentIndex].hasChild = true;\n data[currentIndex].expanded = true;\n }\n else {\n currentIndex--;\n while (currentIndex > 0) {\n if (Number(datas[i].paragraphFormat.outlineLevel.substr(5, 1)) > Number(datas[currentIndex].paragraphFormat.outlineLevel.substr(5, 1))) {\n parentId = data[currentIndex].id;\n data[currentIndex].hasChild = true;\n data[currentIndex].expanded = true;\n break;\n }\n else if (Number(datas[i].paragraphFormat.outlineLevel.substr(5, 1)) === Number(datas[currentIndex].paragraphFormat.outlineLevel.substr(5, 1))) {\n parentId = data[currentIndex].pid;\n break;\n }\n currentIndex--;\n }\n }\n }\n var widget = datas[i].childWidgets[0];\n var name_1 = void 0;\n var tooltipText = void 0;\n var text = void 0;\n if (isNullOrUndefined(widget.children[3])) {\n name_1 = widget.children[0].text;\n tooltipText = widget.children[0].text;\n var value = index;\n text = 'Toc00000000' + value;\n index++;\n }\n else {\n tooltipText = widget.children[3].text;\n name_1 = widget.children[3].text;\n text = widget.children[1].text;\n }\n var newItem = {\n pid: parentId,\n id: i + 1,\n name: name_1,\n hyperlink: text.length > 15 ? text.substring(15, text.length - 2) : text,\n tooltipText: tooltipText,\n };\n data.push(newItem);\n }\n }\n }\n return data;\n };\n OptionsPane.prototype.createDataSourceForTreeview = function () {\n var headingPaneSettings = {\n startLevel: 1,\n endLevel: 9,\n includeOutlineLevels: true,\n includeHyperlink: true,\n };\n var startPosition = this.documentHelper.selection.start.clone();\n var endPosition = this.documentHelper.selection.end.clone();\n this.documentHelper.owner.editor.initComplexHistory('TOC');\n var code = undefined;\n // Build TOC field code based on parameter\n code = this.constructHeadingFieldCode(headingPaneSettings);\n var widgets = this.documentHelper.owner.editorModule.buildToc(this.validateHeadingSettings(headingPaneSettings), code, false, true, true);\n if (this.documentHelper.owner.editorHistory) {\n this.documentHelper.owner.editorHistory.updateComplexHistory();\n if (this.documentHelper.owner.editorHistory.undoStack.length > 1\n && !isNullOrUndefined(this.documentHelper.owner.editorHistory.undoStack[this.documentHelper.owner.editorHistory.undoStack.length - 1].modifiedActions)) {\n this.documentHelper.owner.editorHistory.undoStack.pop();\n }\n }\n this.documentHelper.selection.selectPosition(startPosition, endPosition);\n return widgets;\n };\n OptionsPane.prototype.validateHeadingSettings = function (navigationSettings) {\n if (isNullOrUndefined(navigationSettings.startLevel) || navigationSettings.startLevel < 1) {\n navigationSettings.startLevel = 1;\n }\n if (isNullOrUndefined(navigationSettings.endLevel) || navigationSettings.endLevel < navigationSettings.endLevel) {\n navigationSettings.endLevel = navigationSettings.startLevel > 3 ? navigationSettings.startLevel : 3;\n }\n if (isNullOrUndefined(navigationSettings.includeHyperlink)) {\n navigationSettings.includeHyperlink = false;\n }\n if (isNullOrUndefined(navigationSettings.includePageNumber)) {\n navigationSettings.includePageNumber = false;\n }\n if (isNullOrUndefined(navigationSettings.rightAlign)) {\n navigationSettings.rightAlign = false;\n }\n if (isNullOrUndefined(navigationSettings.levelSettings)) {\n navigationSettings.levelSettings = {};\n }\n return navigationSettings;\n };\n OptionsPane.prototype.constructHeadingFieldCode = function (navigationSettings) {\n var headingFieldCode = 'TOC';\n //appends styles level\n if (!isNullOrUndefined(navigationSettings.startLevel) && navigationSettings.startLevel !== 0 && !isNullOrUndefined(navigationSettings.endLevel) && navigationSettings.endLevel !== 0) {\n headingFieldCode = headingFieldCode + ' \\\\o \"' + navigationSettings.startLevel + '-' + navigationSettings.endLevel + '\"';\n }\n if (navigationSettings.includePageNumber && !navigationSettings.rightAlign) {\n headingFieldCode = headingFieldCode + ' \\\\p \" \"';\n }\n if (!navigationSettings.includePageNumber) {\n headingFieldCode = headingFieldCode + ' \\\\n';\n }\n if (navigationSettings.includeHyperlink) {\n headingFieldCode = headingFieldCode + ' \\\\h \\\\z';\n }\n if (navigationSettings.includeOutlineLevels) {\n headingFieldCode = headingFieldCode + ' \\\\u';\n }\n var tSwitch = this.constructTSwitch(navigationSettings);\n if (tSwitch.length > 6) {\n headingFieldCode = headingFieldCode + tSwitch;\n }\n return headingFieldCode;\n };\n OptionsPane.prototype.constructTSwitch = function (navigationSettings) {\n var tSwitch = '';\n var prefix = ' \\\\t ';\n if (!isNullOrUndefined(navigationSettings.levelSettings)) {\n for (var _i = 0, _a = Object.keys(navigationSettings.levelSettings); _i < _a.length; _i++) {\n var key = _a[_i];\n tSwitch = tSwitch + key + ',' + navigationSettings.levelSettings[key].toString() + ',';\n }\n }\n tSwitch = tSwitch.slice(0, -1);\n tSwitch = prefix + '\"' + tSwitch + '\"';\n return tSwitch;\n };\n OptionsPane.prototype.createReplacePane = function (isRtl) {\n this.replaceDiv = createElement('div');\n this.replaceTabContentDiv.appendChild(this.replaceDiv);\n this.replaceWith = createElement('input', {\n className: 'e-de-op-replacewith e-input',\n attrs: { placeholder: this.localeValue.getConstant('Replace with') }\n });\n this.replaceDiv.appendChild(this.replaceWith);\n var replaceButtonDivTextAlign;\n var replaceButtonMargin;\n if (isRtl) {\n replaceButtonDivTextAlign = 'text-align:left';\n replaceButtonMargin = 'margin-left:10px';\n }\n else {\n replaceButtonDivTextAlign = 'text-align:right';\n replaceButtonMargin = 'margin-right:10px';\n }\n var replaceButtonDiv = createElement('div', { styles: replaceButtonDivTextAlign, className: 'e-de-op-dlg-footer' });\n this.replaceDiv.appendChild(replaceButtonDiv);\n this.replaceButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replace',\n styles: replaceButtonMargin,\n innerHTML: this.localeValue.getConstant(this.replaceButtonText),\n attrs: { type: 'button' }\n });\n replaceButtonDiv.appendChild(this.replaceButton);\n this.replaceButton.setAttribute('aria-label', this.localeValue.getConstant(this.replaceButtonText));\n this.replaceAllButton = createElement('button', {\n className: 'e-control e-btn e-flat e-replaceall',\n innerHTML: this.localeValue.getConstant(this.replaceAllButtonText),\n attrs: { type: 'button' }\n });\n replaceButtonDiv.appendChild(this.replaceAllButton);\n this.replaceAllButton.setAttribute('aria-label', this.localeValue.getConstant(this.replaceAllButtonText));\n this.matchDiv = createElement('div', { styles: 'display:none;padding-top:10px;' });\n this.replaceDiv.appendChild(this.matchDiv);\n var emptyDiv6 = createElement('div', { className: 'e-de-op-search-replacediv' });\n this.replaceDiv.appendChild(emptyDiv6);\n this.occurrenceDiv = createElement('div', { styles: 'display:none;' });\n this.replaceDiv.appendChild(this.occurrenceDiv);\n };\n OptionsPane.prototype.selectedTabItem = function (args) {\n var contentParent = this.findTab.getElementsByClassName('e-content').item(0);\n if (args.previousIndex !== args.selectedIndex) {\n var previousTab = contentParent.children[0];\n var nextTab = contentParent.children[1];\n var element = previousTab.firstElementChild;\n if (element) {\n if (element.parentElement) {\n element.parentElement.removeChild(element);\n }\n nextTab.appendChild(element);\n }\n }\n var selectedElement = contentParent.children[0];\n if (!isNullOrUndefined(selectedElement)) {\n if (args.selectedIndex === 0) {\n this.isOptionsPane = false;\n this.onHeadingPane();\n }\n else if (args.selectedIndex === 1) {\n this.isOptionsPane = true;\n this.onFindPane();\n }\n else {\n this.isOptionsPane = false;\n this.onReplacePane();\n }\n }\n };\n OptionsPane.prototype.navigateSearchResult = function (navigate) {\n if (navigate) {\n this.documentHelper.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n }\n this.documentHelper.owner.searchModule.highlight(this.results);\n this.documentHelper.owner.searchModule.addFindResultView(this.results);\n this.resultsListBlock.style.display = 'block';\n this.resultContainer.style.display = 'block';\n var lists = this.documentHelper.owner.findResultsList;\n var text = '';\n for (var i = 0; i < lists.length; i++) {\n text += lists[i];\n }\n var resultsContainerHeight = this.optionsPane.offsetHeight - this.findTab.offsetHeight;\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = text;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var currentIndexValue = this.results.currentIndex;\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndexValue + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndexValue];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n this.scrollToPosition(listElement);\n }\n };\n /**\n * Apply find option based on whole words value.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.wholeWordsChange = function () {\n if (this.matchInput.checked && this.wholeInput.checked) {\n this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (this.matchInput.checked && !(this.wholeInput.checked)) {\n this.findOption = 'CaseSensitive';\n }\n else if (!(this.matchInput.checked) && this.wholeInput.checked) {\n this.findOption = 'WholeWord';\n }\n else {\n this.findOption = 'None';\n }\n this.searchOptionChange();\n };\n /**\n * Apply find option based on match value.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.matchChange = function () {\n if (this.matchInput.checked && this.wholeInput.checked) {\n this.findOption = 'CaseSensitiveWholeWord';\n }\n else if (!(this.matchInput.checked) && this.wholeInput.checked) {\n this.findOption = 'WholeWord';\n }\n else if (this.matchInput.checked && !(this.wholeInput.checked)) {\n this.findOption = 'CaseSensitive';\n }\n else {\n this.findOption = 'None';\n }\n var resultsContainerHeight = this.optionsPane.offsetHeight - this.findTab.offsetHeight;\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.searchOptionChange();\n };\n // /**\n // * Apply find options based on regular value.\n // * @param {ChangeEventArgs} args - Specifies the search options value.\n // * @private\n // */\n // public regularChange = (args: ChangeEventArgs): void => {\n // if (args.checked) {\n // this.matchCase.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.add('e-checkbox-disabled');\n // this.matchCase.checked = false;\n // this.wholeWord.checked = false;\n // this.findOption = 'None';\n // this.onKeyDownInternal();\n // } else {\n // this.matchCase.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // this.wholeWord.element.parentElement.parentElement.classList.remove('e-checkbox-disabled');\n // }\n // }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Binding events from the element when optins pane creation.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onWireEvents = function () {\n this.searchIcon.addEventListener('click', this.searchIconClickInternal);\n this.navigateToNextResult.addEventListener('click', this.navigateNextResultButtonClick);\n this.navigateToPreviousResult.addEventListener('click', this.navigatePreviousResultButtonClick);\n this.searchInput.addEventListener('keydown', this.onKeyDown);\n this.searchInput.addEventListener('keyup', this.onEnableDisableReplaceButton);\n this.resultsListBlock.addEventListener('click', this.resultListBlockClick);\n this.closeButton.addEventListener('click', this.close);\n this.replaceButton.addEventListener('click', this.onReplaceButtonClick);\n this.replaceAllButton.addEventListener('click', this.onReplaceAllButtonClick);\n };\n /**\n * Fires on key down actions done.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onKeyDownInternal = function () {\n var inputElement = document.getElementById(this.documentHelper.owner.containerId + '_option_search_text_box');\n if (isNullOrUndefined(inputElement)) {\n return;\n }\n inputElement.blur();\n var text = inputElement.value;\n if (text === '') {\n return;\n }\n if (text.length >= 1 && this.searchIcon.classList.contains('e-de-op-search-icon')) {\n this.searchIcon.classList.add('e-de-op-search-close-icon');\n this.searchIcon.classList.remove('e-de-op-search-icon');\n }\n var height = this.isOptionsPane ? 215 : 292;\n this.clearSearchResultItems();\n this.documentHelper.owner.searchModule.clearSearchHighlight();\n var pattern = this.documentHelper.owner.searchModule.textSearch.stringToRegex(text, this.findOption);\n var endSelection = this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n this.results = this.documentHelper.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var results = this.results;\n if (isNullOrUndefined(results)) {\n this.viewer.renderVisiblePages();\n }\n if (results != null && results.length > 0) {\n if ((this.focusedElement.indexOf(this.navigateToPreviousResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToPreviousResult);\n }\n if ((this.focusedElement.indexOf(this.navigateToNextResult) === -1) && this.isOptionsPane) {\n this.focusedElement.push(this.navigateToNextResult);\n }\n this.documentHelper.owner.searchModule.navigate(this.results.innerList[this.results.currentIndex]);\n this.documentHelper.owner.searchModule.highlight(results);\n this.documentHelper.owner.searchModule.addFindResultView(results);\n // if (this.isOptionsPane) {\n this.resultContainer.style.display = 'block';\n this.resultsListBlock.style.display = 'block';\n var resultsContainerHeight = this.optionsPane.offsetHeight - this.findTab.offsetHeight;\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n var list = this.documentHelper.owner.findResultsList;\n var text_1 = '';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n for (var i = 0; i < list.length; i++) {\n text_1 += list[i];\n }\n this.resultsListBlock.innerHTML = text_1;\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n this.focusedElement.push(this.resultsListBlock.children[i]);\n }\n var lists = this.resultsListBlock.children;\n var currentIndex = this.results.currentIndex;\n this.messageDiv.innerHTML = this.localeValue.getConstant('Result') + ' ' + (currentIndex + 1) + ' ' + this.localeValue.getConstant('of') + ' ' + this.resultsListBlock.children.length;\n var listElement = this.resultsListBlock.children[currentIndex];\n if (listElement.classList.contains('e-de-search-result-item')) {\n listElement.classList.remove('e-de-search-result-item');\n listElement.classList.add('e-de-search-result-hglt');\n listElement.children[0].classList.add('e-de-op-search-word-text');\n }\n this.navigateToNextResult.focus();\n this.focusedIndex = this.focusedElement.indexOf(this.navigateToNextResult);\n this.getMessageDivHeight();\n // } else {\n //this.focusedIndex = 4;\n // }\n }\n else {\n this.messageDiv.innerHTML = this.localeValue.getConstant('No matches');\n this.resultContainer.style.display = 'block';\n this.resultsListBlock.style.display = 'none';\n this.clearFocusElement();\n this.resultsListBlock.innerHTML = '';\n }\n };\n /**\n * Enable Heading pane only.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onHeadingPane = function () {\n this.treeviewDiv.style.display = 'block';\n this.refreshHeadingPaneHeight();\n this.messageDiv.classList.remove('e-de-op-msg');\n this.messageDiv.classList.remove('e-de-op-replace-messagediv');\n this.replaceDiv.style.display = 'none';\n this.occurrenceDiv.style.display = 'none';\n this.findDiv.style.display = 'none';\n this.findTabContentDiv.style.display = 'none';\n this.checkboxDiv.style.display = 'none';\n this.resultContainer.style.display = 'none';\n };\n /**\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.refreshHeadingPaneHeight = function () {\n if (!isNullOrUndefined(this.optionsPane) && !isNullOrUndefined(this.searchDiv) && !isNullOrUndefined(this.tabDiv)) {\n var computedStyle = window.getComputedStyle(this.searchDiv);\n var marginBottom = parseFloat(computedStyle.marginBottom);\n var resultsContainerHeight = this.optionsPane.offsetHeight - (marginBottom + this.searchDiv.offsetHeight + this.tabDiv.offsetHeight);\n this.treeviewDiv.style.height = resultsContainerHeight + 'px';\n }\n };\n /**\n * Enable find pane only.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onFindPane = function () {\n this.replaceDiv.style.display = 'none';\n this.occurrenceDiv.style.display = 'none';\n this.treeviewDiv.style.display = 'none';\n this.findDiv.style.display = 'block';\n this.findTabContentDiv.style.display = 'block';\n this.checkboxDiv.style.display = 'block';\n this.resultContainer.style.display = 'block';\n if (!isNullOrUndefined(this.results) && this.results.length === 0) {\n this.resultsListBlock.innerHTML = '';\n this.resultsListBlock.style.display = 'none';\n this.messageDiv.innerHTML = this.localeValue.getConstant('No matches');\n }\n var height = this.isOptionsPane ? 215 : 292;\n var resultsContainerHeight = this.optionsPane.offsetHeight - (this.findTab.offsetHeight - this.replaceTabContentDiv.offsetHeight);\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.replaceTabContentDiv.style.display = 'none';\n this.findDiv.style.display = 'block';\n this.messageDiv.style.display = 'block';\n this.focusedElement = [];\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput);\n this.focusedIndex = 1;\n this.searchInput.select();\n this.getMessageDivHeight();\n };\n OptionsPane.prototype.getMessageDivHeight = function () {\n if (!this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-msg')) {\n this.messageDiv.classList.add('e-de-op-replace-messagediv');\n this.messageDiv.classList.remove('e-de-op-msg');\n }\n else if (this.isOptionsPane && this.messageDiv.classList.contains('e-de-op-replace-messagediv')) {\n this.messageDiv.classList.add('e-de-op-msg');\n this.messageDiv.classList.remove('e-de-op-replace-messagediv');\n }\n };\n /**\n * Enable replace pane only.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.onReplacePane = function () {\n this.findDiv.style.display = 'block';\n this.replaceDiv.style.display = 'block';\n this.replaceTabContentDiv.style.display = 'block';\n this.findDiv.style.display = 'block';\n this.treeviewDiv.style.display = 'none';\n this.findTabContentDiv.style.display = 'block';\n this.checkboxDiv.style.display = 'block';\n this.resultContainer.style.display = 'block';\n var height = this.isOptionsPane ? 215 : 292;\n var resultsContainerHeight = this.optionsPane.offsetHeight - this.findTab.offsetHeight;\n this.resultsListBlock.style.height = resultsContainerHeight + 'px';\n this.isOptionsPane = false;\n if (this.searchInput.value.length !== 0) {\n this.replaceButton.disabled = false;\n this.replaceAllButton.disabled = false;\n }\n else {\n this.replaceButton.disabled = true;\n this.replaceAllButton.disabled = true;\n }\n this.focusedElement = [];\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput, this.replaceWith, this.replaceButton, this.replaceAllButton);\n this.focusedIndex = 1;\n if (this.searchInput.value === '') {\n this.searchInput.select();\n }\n else {\n this.replaceWith.select();\n }\n this.getMessageDivHeight();\n };\n /**\n * Replace all.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.replaceAll = function () {\n var optionsPane = this.optionsPane;\n var findText = this.searchInput.value;\n var replaceText = this.replaceWith.value;\n if (findText !== '' && !isNullOrUndefined(findText)) {\n var pattern = this.documentHelper.owner.searchModule.textSearch.stringToRegex(findText, this.findOption);\n var endSelection = this.documentHelper.selection.end;\n var index = endSelection.getHierarchicalIndexInternal();\n var results = this.documentHelper.owner.searchModule.textSearch.findAll(pattern, this.findOption, index);\n var replace = isNullOrUndefined(replaceText) ? '' : replaceText;\n var count = isNullOrUndefined(results) ? 0 : results.length;\n this.documentHelper.owner.searchModule.replaceAll(replace, results);\n this.documentHelper.layout.isReplacingAll = false;\n this.matchDiv.style.display = 'block';\n this.matchDiv.innerHTML = this.localeValue.getConstant('All Done') + '!';\n this.occurrenceDiv.style.display = 'block';\n this.occurrenceDiv.innerHTML = this.localeValue.getConstant('We replaced all') + ' ' + count + ' ' + this.localeValue.getConstant('instances') + ' ' + this.localeValue.getConstant('of') + ' \"' + findText + '\" ' + this.localeValue.getConstant('with') + ' \"' + replaceText + '\" ';\n }\n };\n OptionsPane.prototype.hideMatchDiv = function () {\n this.matchDiv.style.display = 'none';\n this.occurrenceDiv.style.display = 'none';\n };\n OptionsPane.prototype.updateListItems = function (textSearchResult) {\n var searchElements = this.resultsListBlock.getElementsByClassName('e-de-search-result-hglt');\n for (var j = 0; j < searchElements.length; j++) {\n var list = searchElements[j];\n classList(list, ['e-de-search-result-item'], ['e-de-search-result-hglt']);\n classList(list.children[0], [], ['e-de-op-search-word-text']);\n }\n var listElement = this.resultsListBlock.children[this.results.currentIndex];\n classList(listElement, ['e-de-search-result-hglt'], ['e-de-search-result-item']);\n classList(listElement.children[0], ['e-de-op-search-word-text'], []);\n this.scrollToPosition(listElement);\n this.documentHelper.owner.searchModule.navigate(textSearchResult);\n this.documentHelper.owner.searchModule.highlight(this.results);\n };\n /**\n * Scrolls to position.\n *\n * @private\n * @param {HTMLElement} list - Specifies the list element.\n * @returns {void}\n */\n OptionsPane.prototype.scrollToPosition = function (list) {\n var rect = list.getBoundingClientRect();\n var top;\n if (rect.top > 0) {\n top = rect.top - list.parentElement.getBoundingClientRect().top;\n if ((list.parentElement.offsetHeight - top) <= list.offsetHeight) {\n if (Math.ceil(top + list.offsetHeight) === list.parentElement.scrollHeight) {\n list.parentElement.scrollTop = top;\n }\n list.parentElement.scrollTop = list.parentElement.scrollTop + (list.parentElement.offsetHeight / 100) * 30;\n }\n else if (top < 0) {\n list.parentElement.scrollTop = list.parentElement.scrollTop - (list.parentElement.offsetHeight / 100) * 30;\n }\n }\n else {\n list.parentElement.scrollTop = 0;\n }\n };\n /**\n * Clear the focus elements.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.clearFocusElement = function () {\n for (var i = 0; i < this.resultsListBlock.children.length; i++) {\n var index = this.focusedElement.indexOf(this.resultsListBlock.children[i]);\n if (index !== -1) {\n this.focusedElement.splice(index, 1);\n }\n }\n this.focusedIndex = 1;\n };\n /**\n * Show or hide option pane based on boolean value.\n *\n * @private\n * @param {boolean} show - Specifies showing or hiding the options pane.\n * @returns {void}\n */\n OptionsPane.prototype.showHideOptionsPane = function (show) {\n if (!isNullOrUndefined(this.documentHelper.owner.selectionModule)) {\n this.documentHelper.owner.fireOptionPaneChange(show);\n if (show) {\n this.localeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localeValue.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.optionsPane)) {\n this.initOptionsPane(this.localeValue, this.documentHelper.owner.enableRtl);\n //Add Option Pane\n var isRtl = this.documentHelper.owner.enableRtl;\n var optionsPaneContainerStyle = void 0;\n if (isRtl) {\n optionsPaneContainerStyle = 'display:inline-flex;direction:rtl;';\n }\n else {\n optionsPaneContainerStyle = 'display:inline-flex;';\n }\n this.documentHelper.optionsPaneContainer.setAttribute('style', optionsPaneContainerStyle);\n this.documentHelper.optionsPaneContainer.insertBefore(this.documentHelper.owner.optionsPaneModule.optionsPane, this.documentHelper.viewerContainer);\n }\n this.optionsPane.style.display = 'block';\n if (this.documentHelper.owner.isReadOnlyMode) {\n this.tabInstance.hideTab(2);\n }\n else {\n this.tabInstance.hideTab(2, false);\n }\n if (this.isReplace && !this.documentHelper.owner.isReadOnlyMode) {\n this.tabInstance.select(2);\n this.isReplace = false;\n this.isOptionsPane = false;\n }\n else {\n this.tabInstance.select(1);\n }\n var treeViewResult = document.getElementById(this.documentHelper.owner.containerId + '_treeDiv');\n if (!isNullOrUndefined(treeViewResult)) {\n treeViewResult.innerHTML = '';\n this.data = this.dataForTreeview();\n this.initHeadingTab();\n }\n this.searchDiv.innerHTML = this.localeValue.getConstant(this.searchText);\n this.isOptionsPaneShow = true;\n var textBox = document.getElementById(this.documentHelper.owner.getDocumentEditorElement().id + '_option_search_text_box');\n var selectedText = this.documentHelper.owner.selectionModule.text;\n if (!isNullOrUndefined(selectedText)) {\n var char = ['\\v', '\\r'];\n var index = HelperMethods.indexOfAny(selectedText, char);\n selectedText = index < 0 ? selectedText : selectedText.substring(0, index);\n }\n textBox.value = selectedText;\n textBox.select();\n if (!isNullOrUndefined(textBox.value) && textBox.value.match(/[!\\@\\#$%\\^&*\\(\\)_\\-+\\=\\[\\]\\{\\};:\"\\|,.<>\\/?`~\\s\\\\؟°÷×،؛]/) && textBox.value !== \"\") {\n this.wholeInput.checked = false;\n this.wholeWord.disabled = true;\n }\n else {\n this.wholeWord.disabled = false;\n }\n this.messageDiv.innerHTML = '';\n if (this.searchIcon.classList.contains('e-de-op-search-close-icon')) {\n this.searchIcon.classList.add('e-de-op-search-icon');\n this.searchIcon.classList.remove('e-de-op-search-close-icon');\n }\n this.documentHelper.selection.caret.style.display = 'none';\n this.focusedIndex = 1;\n this.focusedElement = [];\n if (this.isOptionsPane) {\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput);\n }\n else {\n this.focusedElement.push(this.closeButton, this.searchInput, this.searchIcon, this.navigateToPreviousResult, this.navigateToNextResult, this.matchInput, this.wholeInput, this.replaceWith, this.replaceButton, this.replaceAllButton);\n }\n this.documentHelper.updateViewerSize();\n }\n else {\n if (!isNullOrUndefined(this.optionsPane)) {\n this.clearSearchResultItems();\n if (!isNullOrUndefined(this.documentHelper.owner.searchModule)) {\n this.documentHelper.owner.searchModule.clearSearchHighlight();\n }\n this.isOptionsPaneShow = false;\n var resultListBox = document.getElementById(this.documentHelper.owner.containerId + '_list_box_container');\n var message = document.getElementById(this.documentHelper.owner.containerId + '_search_status');\n if (!isNullOrUndefined(resultListBox) && !isNullOrUndefined(message)) {\n resultListBox.style.display = 'none';\n this.clearFocusElement();\n resultListBox.innerHTML = '';\n message.innerHTML = this.localeValue.getConstant('No matches');\n }\n var treeViewResult = document.getElementById(this.documentHelper.owner.containerId + '_treeDiv');\n if (!isNullOrUndefined(treeViewResult)) {\n treeViewResult.innerHTML = '';\n }\n }\n this.documentHelper.updateViewerSize();\n if (!isNullOrUndefined(this.optionsPane)) {\n if (this.optionsPane.style.display !== 'none') {\n this.documentHelper.selection.updateCaretPosition();\n this.optionsPane.style.display = 'none';\n }\n }\n if (this.documentHelper.owner.enableAutoFocus) {\n this.documentHelper.updateFocus();\n }\n if (this.documentHelper.owner.enableAutoFocus) {\n this.documentHelper.selection.caret.style.display = 'block';\n }\n }\n this.documentHelper.owner.triggerResize();\n }\n };\n /**\n * Clears search results.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.clearSearchResultItems = function () {\n if (!isNullOrUndefined(this.documentHelper.owner.findResultsList)) {\n this.documentHelper.owner.findResultsList = [];\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n OptionsPane.prototype.destroy = function () {\n if (this.optionsPane) {\n this.optionsPane.innerHTML = '';\n this.optionsPane = undefined;\n }\n if (this.resultsListBlock) {\n this.resultsListBlock.innerHTML = '';\n this.resultsListBlock = undefined;\n }\n if (this.messageDiv) {\n this.messageDiv.innerHTML = '';\n this.messageDiv = undefined;\n }\n if (this.resultContainer) {\n this.resultContainer.innerHTML = '';\n }\n this.resultContainer = undefined;\n if (this.searchInput) {\n this.searchInput.value = '';\n this.searchInput = undefined;\n }\n if (this.searchDiv) {\n this.searchDiv.innerHTML = '';\n this.searchDiv = undefined;\n }\n if (this.searchTextBoxContainer) {\n this.searchTextBoxContainer.innerHTML = '';\n this.searchTextBoxContainer = undefined;\n }\n if (this.replaceWith) {\n this.replaceWith.innerHTML = '';\n this.replaceWith = undefined;\n }\n if (this.findDiv) {\n this.findDiv.innerHTML = '';\n this.findDiv = undefined;\n }\n if (this.treeviewDiv) {\n this.treeviewDiv.innerHTML = '';\n this.treeviewDiv = undefined;\n }\n if (this.replaceButton) {\n this.replaceButton.innerHTML = '';\n this.replaceButton = undefined;\n }\n if (this.replaceAllButton) {\n this.replaceAllButton.innerHTML = '';\n this.replaceAllButton = undefined;\n }\n if (this.matchInput) {\n this.matchInput.innerHTML = '';\n this.matchCase = undefined;\n }\n if (this.wholeInput) {\n this.wholeInput.innerHTML = '';\n this.wholeWord = undefined;\n }\n // if (this.regularInput) {\n // this.regularInput.innerHTML = '';\n // this.regular = undefined;\n // }\n if (!isNullOrUndefined(this.results)) {\n this.results.destroy();\n }\n if (this.focusedElement) {\n this.focusedElement = [];\n }\n this.focusedElement = undefined;\n this.destroyInternal();\n this.documentHelper = undefined;\n };\n /**\n * Dispose the internal objects which are maintained.\n *\n * @returns {void}\n */\n OptionsPane.prototype.destroyInternal = function () {\n if (this.searchText) {\n this.searchText = undefined;\n }\n if (this.resultsText) {\n this.resultsText = undefined;\n }\n if (this.messageDivText) {\n this.messageDivText = undefined;\n }\n if (this.replaceButtonText) {\n this.replaceButtonText = undefined;\n }\n if (this.replaceAllButtonText) {\n this.replaceAllButtonText = undefined;\n }\n if (this.tabDiv) {\n this.tabDiv = undefined;\n }\n };\n return OptionsPane;\n}());\nexport { OptionsPane };\n","import { Save } from './save';\n/**\n * XmlWriter class provide method to create XML data\n */\nvar XmlWriter = /** @class */ (function () {\n /**\n * Initialize new instance of {XmlWriter}\n */\n function XmlWriter() {\n this.contentPos = 0;\n this.bufferText = '';\n this.bufferBlob = new Blob([''], { type: 'text/plain' });\n this.currentState = 'Initial';\n this.namespaceStack = [];\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[0].set('xmlns', 'http://www.w3.org/2000/xmlns/', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[1].set('xml', 'http://www.w3.org/XML/1998/namespace', 'Special');\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[2].set('', '', 'Implied');\n this.elementStack = [];\n this.elementStack.push(new XmlElement());\n this.elementStack[0].set('', '', '', this.namespaceStack.length - 1);\n this.attributeStack = [];\n Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n }\n Object.defineProperty(XmlWriter.prototype, \"buffer\", {\n /**\n * Gets the content written to the {XmlWriter} as Blob.\n * @returns {Blob}\n */\n get: function () {\n this.flush();\n return this.bufferBlob;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Writes processing instruction with a space between the name and text\n * @param {string} name - name of the processing instruction\n * @param {string} text - text to write in the processing instruction\n * @throws ArgumentException\n * @throws InvalidArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeProcessingInstruction = function (name, text) {\n if (name === undefined || name === null || name.length === 0) {\n throw new Error('ArgumentException: name should not be undefined, null or empty');\n }\n this.checkName(name);\n if (text === undefined || text === null) {\n text = '';\n }\n if (name.length === 3 && name === 'xml') {\n if (this.currentState !== 'Initial') {\n // tslint:disable-next-line:max-line-length\n throw new Error('InvalidArgumentException: Cannot write XML declaration.WriteStartDocument method has already written it');\n }\n }\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n else {\n this.writeStartDocument();\n this.writeProcessingInstructionInternal(name, text);\n }\n };\n /**\n * Writes Xml declaration with version and standalone attribute\n * @param {boolean} standalone - if true it write standalone=yes else standalone=no\n * @throws InvalidOperation\n */\n XmlWriter.prototype.writeStartDocument = function (standalone) {\n if (this.currentState !== 'Initial' || this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.currentState = 'StartDocument';\n this.rawText('');\n };\n /**\n * Closes any open tag or attribute and write the state back to start\n */\n XmlWriter.prototype.writeEndDocument = function () {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n this.currentState = 'EndDocument';\n this.flush();\n };\n /**\n * Writes the specified start tag and associates it with the given namespace and prefix.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName -localName of element\n * @param {string} namespace - namespace URI associate with element\n * @throws ArgumentException\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeStartElement = function (prefix, localName, namespace) {\n if (this.bufferBlob === undefined) {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (localName === undefined || localName === null || localName.length === 0) {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n this.checkName(localName);\n if (this.currentState === 'Initial') {\n this.writeStartDocument();\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'StartElement';\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n prefix = this.lookupPrefix(namespace);\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n else if (prefix.length > 0) {\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null || (namespace !== undefined && namespace.length === 0)) {\n throw new Error('ArgumentException: Cannot use a prefix with an empty namespace');\n }\n }\n if (namespace === undefined || namespace === null) {\n namespace = this.lookupNamespace(prefix);\n }\n this.writeStartElementInternal(prefix, localName, namespace);\n };\n /**\n * Closes one element and pop corresponding namespace scope\n */\n XmlWriter.prototype.writeEndElement = function () {\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n this.currentState = 'ElementContent';\n }\n else if (this.currentState === 'ElementContent') {\n this.currentState = 'ElementContent';\n }\n this.currentState = 'EndElement';\n var top = this.elementStack.length - 1;\n this.writeEndElementInternal(this.elementStack[top].prefix, this.elementStack[top].localName);\n this.namespaceStack.splice(this.elementStack[top].previousTop + 1);\n this.elementStack.splice(top);\n if (this.bufferText.length > 10240) {\n this.flush();\n }\n };\n /**\n * Writes an element with the specified prefix, local name, namespace URI, and value.\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeElementString = function (prefix, localName, namespace, value) {\n this.writeStartElement(prefix, localName, namespace);\n if (value !== undefined && value !== null && value.length !== 0) {\n this.writeString(value);\n }\n this.writeEndElement();\n };\n /**\n * Writes out the attribute with the specified prefix, local name, namespace URI, and value\n * @param {string} prefix - namespace prefix of element\n * @param {string} localName - localName of element\n * @param {string} namespace - namespace URI associate with element\n * @param {string} value - value of element\n */\n XmlWriter.prototype.writeAttributeString = function (prefix, localName, namespace, value) {\n this.writeStartAttribute(prefix, localName, namespace, value);\n this.writeStringInternal(value, true);\n this.writeEndAttribute();\n };\n /**\n * Writes the given text content\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeString = function (text) {\n this.writeInternal(text, false);\n };\n /**\n * Write given text as raw data\n * @param {string} text - text to write\n * @throws InvalidOperationException\n */\n XmlWriter.prototype.writeRaw = function (text) {\n this.writeInternal(text, true);\n };\n XmlWriter.prototype.writeInternal = function (text, isRawString) {\n if (text === undefined || text === null) {\n return;\n }\n else {\n if (this.currentState !== 'StartElement' && this.currentState !== 'ElementContent') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n if (this.currentState === 'StartElement') {\n this.startElementContent();\n }\n this.currentState = 'ElementContent';\n if (isRawString) {\n this.rawText(text);\n }\n else {\n this.writeStringInternal(text, false);\n }\n }\n };\n /**\n * Saves the file with specified name and sends the file to client browser\n * @param {string} fileName - file name\n */\n XmlWriter.prototype.save = function (fileName) {\n while (this.elementStack.length - 1 > 0) {\n this.writeEndElement();\n }\n if (this.bufferText !== '') {\n this.flush();\n }\n Save.save(fileName, this.buffer);\n };\n /**\n * Releases the resources used by XmlWriter.\n */\n XmlWriter.prototype.destroy = function () {\n this.bufferBlob = undefined;\n for (var i = 0; i < this.namespaceStack.length; i++) {\n this.namespaceStack[i].destroy();\n }\n this.namespaceStack = [];\n for (var i = 0; i < this.elementStack.length; i++) {\n this.elementStack[i].destroy();\n }\n this.elementStack = [];\n this.bufferText = '';\n this.contentPos = 0;\n };\n XmlWriter.prototype.flush = function () {\n if (this.bufferBlob === undefined) {\n return;\n }\n this.bufferBlob = new Blob([this.bufferBlob, this.bufferText], { type: 'text/plain' });\n this.bufferText = '';\n };\n XmlWriter.prototype.writeProcessingInstructionInternal = function (name, text) {\n this.bufferText += ' 0) {\n this.bufferText += ' ';\n text = text.replace(/\\?\\>/g, '? >');\n this.bufferText += text;\n }\n this.bufferText += '?';\n this.bufferText += '>';\n };\n XmlWriter.prototype.writeStartAttribute = function (prefix, localName, namespace, value) {\n if (localName === undefined || localName === null || localName.length === 0) {\n if (prefix === 'xmlns') {\n localName = 'xmlns';\n prefix = '';\n }\n else {\n throw new Error('ArgumentException: localName cannot be undefined, null or empty');\n }\n }\n if (this.currentState !== 'StartElement') {\n throw new Error('InvalidOperationException: Wrong Token');\n }\n this.checkName(localName);\n this.writeStartAttributePrefixAndNameSpace(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributePrefixAndNameSpace = function (prefix, localName, namespace, value) {\n if (prefix === undefined || prefix === null) {\n if (namespace !== undefined && namespace !== null) {\n if (!(localName === 'xmlns' && namespace === 'http://www.w3.org/2000/xmlns/')) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n if (prefix === undefined || prefix === null) {\n prefix = '';\n }\n }\n if (namespace === undefined || namespace === null) {\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n namespace = this.lookupNamespace(prefix);\n }\n if (namespace === undefined || namespace === null) {\n namespace = '';\n }\n }\n this.writeStartAttributeSpecialAttribute(prefix, localName, namespace, value);\n };\n XmlWriter.prototype.writeStartAttributeSpecialAttribute = function (prefix, localName, namespace, value) {\n if (prefix.length === 0) {\n if (localName[0] === 'x' && localName === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit('', value);\n return;\n }\n else if (namespace.length > 0) {\n prefix = this.lookupPrefix(namespace);\n }\n }\n else {\n if (prefix[0] === 'x') {\n if (prefix === 'xmlns') {\n this.skipPushAndWrite(prefix, localName, namespace);\n this.pushNamespaceExplicit(localName, value);\n return;\n }\n else if (prefix === 'xml') {\n if (localName === 'space' || localName === 'lang') {\n this.skipPushAndWrite(prefix, localName, namespace);\n return;\n }\n }\n }\n if (namespace.length === 0) {\n prefix = '';\n }\n }\n if (prefix !== undefined && prefix !== null && prefix.length !== 0) {\n this.pushNamespaceImplicit(prefix, namespace);\n }\n this.skipPushAndWrite(prefix, localName, namespace);\n };\n XmlWriter.prototype.writeEndAttribute = function () {\n this.currentState = 'StartElement';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartElementInternal = function (prefix, localName, namespace) {\n this.bufferText += '<';\n if (prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n var top = this.elementStack.length;\n this.elementStack.push(new XmlElement());\n this.elementStack[top].set(prefix, localName, namespace, this.namespaceStack.length - 1);\n this.pushNamespaceImplicit(prefix, namespace);\n for (var i = 0; i < this.attributeStack.length; i++) {\n this.attributeStack[i].destroy();\n }\n this.attributeStack = [];\n };\n XmlWriter.prototype.writeEndElementInternal = function (prefix, localName) {\n if (this.contentPos !== this.bufferText.length + 1) {\n this.bufferText += '';\n }\n else {\n this.bufferText = this.bufferText.substring(0, this.bufferText.length - 1);\n this.bufferText += ' />';\n }\n };\n XmlWriter.prototype.writeStartAttributeInternal = function (prefix, localName, namespaceName) {\n this.bufferText += ' ';\n if (prefix !== undefined && prefix !== null && prefix.length > 0) {\n this.rawText(prefix);\n this.bufferText += ':';\n }\n this.rawText(localName);\n this.bufferText += '=';\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeNamespaceDeclaration = function (prefix, namespaceUri) {\n this.writeStartNamespaceDeclaration(prefix);\n this.writeStringInternal(namespaceUri, true);\n this.bufferText += '\"';\n };\n XmlWriter.prototype.writeStartNamespaceDeclaration = function (prefix) {\n if (prefix === undefined || prefix === null || prefix.length === 0) {\n this.rawText(' xmlns=\\\"');\n }\n else {\n this.rawText(' xmlns:');\n this.rawText(prefix);\n this.bufferText += '=';\n this.bufferText += '\"';\n }\n };\n XmlWriter.prototype.writeStringInternal = function (text, inAttributeValue) {\n if (text === null || text === undefined) {\n text = '';\n }\n var tempText = '';\n text = text.replace(/\\&/g, '&');\n text = text.replace(/\\/g, '>');\n if (inAttributeValue) {\n text = text.replace(/\\\"/g, '"');\n }\n this.bufferText += text;\n if (!inAttributeValue) {\n this.contentPos = 0;\n }\n };\n XmlWriter.prototype.startElementContent = function () {\n var start = this.elementStack[this.elementStack.length - 1].previousTop;\n for (var i = this.namespaceStack.length - 1; i > start; i--) {\n if (this.namespaceStack[i].kind === 'NeedToWrite') {\n this.writeNamespaceDeclaration(this.namespaceStack[i].prefix, this.namespaceStack[i].namespaceUri);\n }\n }\n this.bufferText += '>';\n this.contentPos = this.bufferText.length + 1;\n };\n XmlWriter.prototype.rawText = function (text) {\n this.bufferText += text;\n };\n XmlWriter.prototype.addNamespace = function (prefix, ns, kind) {\n var top = this.namespaceStack.length;\n this.namespaceStack.push(new Namespace());\n this.namespaceStack[top].set(prefix, ns, kind);\n };\n XmlWriter.prototype.lookupPrefix = function (namespace) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].namespaceUri === namespace) {\n return this.namespaceStack[i].prefix;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespace = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return this.namespaceStack[i].namespaceUri;\n }\n }\n return undefined;\n };\n XmlWriter.prototype.lookupNamespaceIndex = function (prefix) {\n for (var i = this.namespaceStack.length - 1; i >= 0; i--) {\n if (this.namespaceStack[i].prefix === prefix) {\n return i;\n }\n }\n return -1;\n };\n XmlWriter.prototype.pushNamespaceImplicit = function (prefix, ns) {\n var kind;\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n if (this.namespaceStack[existingNsIndex].namespaceUri !== ns) {\n throw new Error('XmlException namespace Uri needs to be the same as the one that is already declared');\n }\n return;\n }\n else {\n if (this.namespaceStack[existingNsIndex].kind === 'Special') {\n if (prefix === 'xml') {\n if (ns !== this.namespaceStack[existingNsIndex].namespaceUri) {\n throw new Error('InvalidArgumentException: Xml String');\n }\n else {\n kind = 'Implied';\n }\n }\n else {\n throw new Error('InvalidArgumentException: Prefix \"xmlns\" is reserved for use by XML.');\n }\n }\n else {\n kind = (this.namespaceStack[existingNsIndex].namespaceUri === ns) ? 'Implied' : 'NeedToWrite';\n }\n }\n }\n else {\n if ((ns === 'http://www.w3.org/XML/1998/namespace' && prefix !== 'xml') ||\n (ns === 'http://www.w3.org/2000/xmlns/' && prefix !== 'xmlns')) {\n throw new Error('InvalidArgumentException');\n }\n kind = 'NeedToWrite';\n }\n this.addNamespace(prefix, ns, kind);\n };\n XmlWriter.prototype.pushNamespaceExplicit = function (prefix, ns) {\n var existingNsIndex = this.lookupNamespaceIndex(prefix);\n if (existingNsIndex !== -1) {\n if (existingNsIndex > this.elementStack[this.elementStack.length - 1].previousTop) {\n this.namespaceStack[existingNsIndex].kind = 'Written';\n return;\n }\n }\n this.addNamespace(prefix, ns, 'Written');\n return;\n };\n XmlWriter.prototype.addAttribute = function (prefix, localName, namespaceName) {\n var top = this.attributeStack.length;\n this.attributeStack.push(new XmlAttribute());\n this.attributeStack[top].set(prefix, localName, namespaceName);\n for (var i = 0; i < top; i++) {\n if (this.attributeStack[i].isDuplicate(prefix, localName, namespaceName)) {\n throw new Error('XmlException: duplicate attribute name');\n }\n }\n };\n XmlWriter.prototype.skipPushAndWrite = function (prefix, localName, namespace) {\n this.addAttribute(prefix, localName, namespace);\n this.writeStartAttributeInternal(prefix, localName, namespace);\n };\n XmlWriter.prototype.checkName = function (text) {\n var format = /[ !@#$%^&*()+\\=\\[\\]{};':\"\\\\|,<>\\/?]/;\n if (format.test(text)) {\n throw new Error('InvalidArgumentException: invalid name character');\n }\n };\n return XmlWriter;\n}());\nexport { XmlWriter };\n/**\n * class for managing namespace collection\n */\nvar Namespace = /** @class */ (function () {\n function Namespace() {\n }\n /**\n * set value for current namespace instance\n * @param {string} prefix namespace's prefix\n * @param {string} namespaceUri namespace URI\n * @param {string} kind namespace kind\n */\n Namespace.prototype.set = function (prefix, namespaceUri, kind) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.kind = kind;\n };\n /**\n * Releases the resources used by Namespace\n */\n Namespace.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.kind = undefined;\n };\n return Namespace;\n}());\nexport { Namespace };\n/**\n * class for managing element collection\n */\nvar XmlElement = /** @class */ (function () {\n function XmlElement() {\n }\n /**\n * set value of current element\n * @param {string} prefix - element prefix\n * @param {string} localName - element local name\n * @param {string} namespaceUri -namespace URI\n * @param {string} previousTop - previous namespace top\n */\n XmlElement.prototype.set = function (prefix, localName, namespaceUri, previousTop) {\n this.previousTop = previousTop;\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * Releases the resources used by XmlElement\n */\n XmlElement.prototype.destroy = function () {\n this.previousTop = undefined;\n this.prefix = undefined;\n this.localName = undefined;\n this.namespaceUri = undefined;\n };\n return XmlElement;\n}());\nexport { XmlElement };\n/**\n * class for managing attribute collection\n */\nvar XmlAttribute = /** @class */ (function () {\n function XmlAttribute() {\n }\n /**\n * set value of current attribute\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.set = function (prefix, localName, namespaceUri) {\n this.prefix = prefix;\n this.namespaceUri = namespaceUri;\n this.localName = localName;\n };\n /**\n * get whether the attribute is duplicate or not\n * @param {string} prefix - namespace's prefix\n * @param {string} namespaceUri - namespace URI\n * @param {string} localName - attribute localName\n */\n XmlAttribute.prototype.isDuplicate = function (prefix, localName, namespaceUri) {\n return ((this.localName === localName) && ((this.prefix === prefix) || (this.namespaceUri === namespaceUri)));\n };\n /**\n * Releases the resources used by XmlAttribute\n */\n XmlAttribute.prototype.destroy = function () {\n this.prefix = undefined;\n this.namespaceUri = undefined;\n this.localName = undefined;\n };\n return XmlAttribute;\n}());\nexport { XmlAttribute };\n","import { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { XmlWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../index';\nimport { Dictionary, LocaleId } from '../../index';\nimport { sectionsProperty, paraStyleNameProperty, isLegalStyleNumberingProperty, breakClearTypeProperty, characterFormatProperty, paragraphFormatProperty, listsProperty, abstractListsProperty, backgroundProperty, stylesProperty, defaultTabWidthProperty, formattingProperty, trackChangesProperty, protectionTypeProperty, enforcementProperty, hashValueProperty, saltValueProperty, doNotUseHTMLParagraphAutoSpacingProperty, formFieldShadingProperty, footnotesProperty, endnotesProperty, compatibilityModeProperty, themeFontLanguagesProperty, themesProperty, nameProperty, basedOnProperty, nextProperty, linkProperty, localeIdProperty, localeIdFarEastProperty, localeIdBidiProperty, boldProperty, italicProperty, underlineProperty, baselineAlignmentProperty, strikethroughProperty, highlightColorProperty, fontSizeProperty, fontColorProperty, fontFamilyProperty, styleNameProperty, bidiProperty, bdoProperty, fontSizeBidiProperty, fontFamilyBidiProperty, boldBidiProperty, italicBidiProperty, allCapsProperty, complexScriptProperty, fontFamilyAsciiProperty, fontFamilyFarEastProperty, fontFamilyNonFarEastProperty, revisionIdsProperty, listIdProperty, listLevelNumberProperty, leftIndentProperty, rightIndentProperty, firstLineIndentProperty, textAlignmentProperty, afterSpacingProperty, beforeSpacingProperty, spaceAfterAutoProperty, spaceBeforeAutoProperty, lineSpacingProperty, lineSpacingTypeProperty, listFormatProperty, keepWithNextProperty, widowControlProperty, keepLinesTogetherProperty, outlineLevelProperty, contextualSpacingProperty, bordersProperty, tabsProperty, headerDistanceProperty, footerDistanceProperty, differentFirstPageProperty, differentOddAndEvenPagesProperty, pageWidthProperty, pageHeightProperty, leftMarginProperty, rightMarginProperty, topMarginProperty, bottomMarginProperty, restartPageNumberingProperty, pageStartingNumberProperty, endnoteNumberFormatProperty, footNoteNumberFormatProperty, restartIndexForFootnotesProperty, restartIndexForEndnotesProperty, initialFootNoteNumberProperty, initialEndNoteNumberProperty, pageNumberStyleProperty, columnsProperty, numberOfColumnsProperty, equalWidthProperty, lineBetweenColumnsProperty, breakCodeProperty, columnSpanProperty, rowSpanProperty, verticalAlignmentProperty, allowBreakAcrossPagesProperty, isHeaderProperty, heightTypeProperty, gridBeforeProperty, gridBeforeWidthProperty, gridBeforeWidthTypeProperty, gridAfterProperty, gridAfterWidthProperty, gridAfterWidthTypeProperty, allowAutoFitProperty, cellSpacingProperty, shadingProperty, tableAlignmentProperty, preferredWidthProperty, preferredWidthTypeProperty, textureProperty, backgroundColorProperty, foregroundColorProperty, shadowProperty, hasNoneStyleProperty, verticalProperty, horizontalProperty, diagonalUpProperty, diagonalDownProperty, lineStyleProperty, lineWidthProperty, dataFormatProperty, yValueProperty, chartDataProperty, categoryXNameProperty, lineProperty, foreColorProperty, directionProperty, endStyleProperty, numberValueProperty, markerStyleProperty, markerSizeProperty, forwardProperty, backwardProperty, interceptProperty, isDisplayRSquaredProperty, isDisplayEquationProperty, seriesNameProperty, dataLabelProperty, errorBarProperty, seriesFormatProperty, trendLinesProperty, dataPointsProperty, firstSliceAngleProperty, holeSizeProperty, isLegendKeyProperty, isBubbleSizeProperty, isCategoryNameProperty, isSeriesNameProperty, isValueProperty, isPercentageProperty, isLeaderLinesProperty, showSeriesKeysProperty, hasHorizontalBorderProperty, hasVerticalBorderProperty, hasBordersProperty, chartCategoryProperty, chartSeriesProperty, chartTitleAreaProperty, chartLegendProperty, chartPrimaryCategoryAxisProperty, chartPrimaryValueAxisProperty, chartTitleProperty, chartTypeProperty, gapWidthProperty, overlapProperty, chartDataTableProperty, textProperty, shapeIdProperty, alternativeTextProperty, widthProperty, heightProperty, lineFormatProperty, fillFormatProperty, textWrappingStyleProperty, textWrappingTypeProperty, zOrderPositionProperty, layoutInCellProperty, lockAnchorProperty, autoShapeTypeProperty, textFrameProperty, colorProperty, fillProperty, textVerticalAlignmentProperty, imageStringProperty, metaFileImageStringProperty, isMetaFileProperty, topProperty, bottomProperty, rightProperty, leftProperty, formFieldDataProperty, fieldTypeProperty, textInputProperty, checkBoxProperty, dropDownListProperty, defaultValueProperty, formatProperty, sizeTypeProperty, sizeProperty, checkedProperty, dropDownItemsProperty, selectedIndexProperty, commentIdProperty, commentCharacterTypeProperty, footnoteTypeProperty, inlinesProperty, contentControlPropertiesProperty, lockContentControlProperty, lockContentsProperty, tagProperty, titleProperty, hasPlaceHolderTextProperty, multiLineProperty, isTemporaryProperty, dateCalendarTypeProperty, dateStorageFormatProperty, dateDisplayLocaleProperty, dateDisplayFormatProperty, isCheckedProperty, uncheckedStateProperty, checkedStateProperty, contentControlListItemsProperty, xmlMappingProperty, fontProperty, valueProperty, displayTextProperty, isMappedProperty, xPathProperty, storeItemIdProperty, cellFormatProperty, rowFormatProperty, cellsProperty, rowsProperty, descriptionProperty, wrapTextAroundProperty, positioningProperty, tableFormatProperty, allowOverlapProperty, distanceTopProperty, distanceRightProperty, distanceLeftProperty, distanceBottomProperty, verticalOriginProperty, verticalPositionProperty, horizontalOriginProperty, horizontalAlignmentProperty, horizontalPositionProperty, blocksProperty, headerProperty, footerProperty, evenHeaderProperty, evenFooterProperty, firstPageHeaderProperty, firstPageFooterProperty, headersFootersProperty, sectionFormatProperty, listLevelPatternProperty, followCharacterProperty, startAtProperty, levelNumberProperty, numberFormatProperty, abstractListIdProperty, levelsProperty, overrideListLevelProperty, levelOverridesProperty, separatorProperty, continuationSeparatorProperty, continuationNoticeProperty, bookmarkTypeProperty, propertiesProperty, tabJustificationProperty, positionProperty, deletePositionProperty, tabLeaderProperty, editRangeIdProperty, columnFirstProperty, columnLastProperty, userProperty, groupProperty, editableRangeStartProperty, spaceProperty, fontSchemeProperty, fontSchemeNameProperty, majorFontSchemeProperty, minorFontSchemeProperty, fontSchemeListProperty, fontTypefaceProperty, typefaceProperty, panoseProperty, typeProperty, majorUnitProperty, maximumValueProperty, minimumValueProperty, hasMajorGridLinesProperty, hasMinorGridLinesProperty, rgbProperty, appearanceProperty, lineFormatTypeProperty, allowSpaceOfSameStyleInTableProperty, weightProperty, fontNameProperty, columnIndexProperty, isAfterRowMarkProperty, isAfterParagraphMarkProperty, columnCountProperty, gridProperty, characterSpacingProperty, scalingProperty, horizontalRuleProperty } from '../../index';\n/**\n * Exports the document to Word format.\n */\nvar WordExport = /** @class */ (function () {\n function WordExport() {\n //Part path\n this.customXMLItemsPath = 'customXml/item';\n this.customXMLItemsPropspath = 'customXml/itemProps';\n this.itemPropsPath = 'itemProps';\n this.documentPath = 'word/document.xml';\n this.stylePath = 'word/styles.xml';\n this.chartPath = 'word/charts';\n this.numberingPath = 'word/numbering.xml';\n this.settingsPath = 'word/settings.xml';\n this.headerPath = 'word/header';\n this.footerPath = 'word/footer';\n //private commentsPath: string = 'word/comments.xml';\n this.imagePath = 'word/media/image';\n this.footnotesPath = 'word/footnotes.xml';\n this.endnotesPath = 'word/endnotes.xml';\n this.appPath = 'docProps/app.xml';\n this.corePath = 'docProps/core.xml';\n // private CustomPath: string = 'docProps/custom.xml';\n // private FontTablePath: string = 'word/fontTable.xml';\n this.contentTypesPath = '[Content_Types].xml';\n // private ChartsPath: string = 'word/charts/';\n this.defaultEmbeddingPath = 'word/embeddings/';\n this.commentsPath = 'word/comments.xml';\n this.commentsExtendedPath = 'word/commentsExtended.xml';\n // private EmbeddingPath:string = 'word\\embeddings\\';\n // private DrawingPath:string = 'word\\drawings\\';\n this.themePath = 'word/theme/theme1.xml';\n // private FontsPath:string = 'word\\fonts\\';\n // private DiagramPath:string = \"word/diagrams/';\n // private ControlPath:string = \"word/activeX/';\n // private VbaProject: string = 'vbaProject.bin';\n // private VbaData: string = 'vbaData.xml';\n // private VbaProjectPath: string = 'word/vbaProject.bin';\n // private VbaDataPath: string = 'word/vbaData.xml';\n // private CustomXMLPath:string = 'customXml\\';\n //Relationship path\n this.generalRelationPath = '_rels/.rels';\n this.wordRelationPath = 'word/_rels/document.xml.rels';\n this.customXMLRelPath = 'customXml/_rels/item';\n this.excelRelationPath = 'xl/_rels/workbook.xml.rels';\n // private FontRelationPath: string = 'word/_rels/fontTable.xml.rels';\n // private CommentsRelationPath: string = 'word/_rels/comments.xml.rels';\n this.footnotesRelationPath = 'word/_rels/footnotes.xml.rels';\n this.endnotesRelationPath = 'word/_rels/endnotes.xml.rels';\n // private NumberingRelationPath: string = 'word/_rels/numbering.xml.rels';\n this.headerRelationPath = 'word/_rels/header';\n this.footerRelationPath = 'word/_rels/footer';\n // private SettingsRelationpath: string = 'word/_rels/settings.xml.rels';\n // private VbaProjectRelsPath: string = 'word/_rels/vbaProject.bin.rels';\n //Content type of the parts\n this.xmlContentType = 'application/xml';\n this.fontContentType = 'application/vnd.openxmlformats-officedocument.obfuscatedFont';\n this.documentContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml';\n this.TemplateContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml';\n // private CommentsContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\n this.settingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml';\n this.commentsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml';\n this.commentsExContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml';\n this.endnoteContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml';\n // private FontTableContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml';\n this.footerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml';\n this.footnoteContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml';\n // private GlossaryDocumentContentType: string = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml';\n this.headerContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml';\n this.numberingContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml';\n this.stylesContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml';\n this.webSettingsContentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml';\n this.appContentType = 'application/vnd.openxmlformats-officedocument.extended-properties+xml';\n this.coreContentType = 'application/vnd.openxmlformats-package.core-properties+xml';\n this.customContentType = 'application/vnd.openxmlformats-officedocument.custom-properties+xml';\n this.customXmlContentType = 'application/vnd.openxmlformats-officedocument.customXmlProperties+xml';\n this.relationContentType = 'application/vnd.openxmlformats-package.relationships+xml';\n // private DiagramColor: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml';\n // private DiagramData: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml';\n // private DiagramLayout: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml';\n // private DiagramStyle: string = 'application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml';\n this.chartsContentType = 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml';\n this.themeContentType = 'application/vnd.openxmlformats-officedocument.theme+xml';\n // private ChartDrawingContentType: string = 'application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml';\n // private ActiveXContentType: string = 'application/vnd.ms-office.activeX+xml';\n // private ActiveXBinContentType: string = 'application/vnd.ms-office.activeX';\n this.tableStyleContentType = 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml';\n // private ChartStyleContentType: string = 'application/vnd.ms-office.chartstyle+xml';\n this.chartColorStyleContentType = 'application/vnd.ms-office.chartcolorstyle+xml';\n // private VbaProjectContentType: string = 'application/vnd.ms-office.vbaProject';\n // private VbaDataContentType: string = 'application/vnd.ms-word.vbaData+xml';\n // private MacroDocumentContentType: string = 'application/vnd.ms-word.document.macroEnabled.main+xml';\n // private MacroTemplateContentType: string = 'application/vnd.ms-word.template.macroEnabledTemplate.main+xml';\n // private OleObjectContentType: string = 'application/vnd.openxmlformats-officedocument.oleObject';\n // Relationship types of document parts\n // private AltChunkRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk';\n this.commentsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments';\n this.commentsExRelType = 'http://schemas.microsoft.com/office/2011/relationships/commentsExtended';\n this.settingsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings';\n this.endnoteRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes';\n // private FontTableRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable';\n this.footerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer';\n this.footnoteRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes';\n this.headerRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/header';\n this.documentRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument';\n this.numberingRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering';\n this.stylesRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles';\n // private OleObjectRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject';\n this.chartRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart';\n this.ThemeRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme';\n this.fontRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/font';\n this.tableStyleRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles';\n this.coreRelType = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n this.appRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n this.customRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n this.imageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image';\n this.hyperlinkRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink';\n this.controlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/control';\n this.packageRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // private VbaProjectRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/vbaProject';\n // private VbaDataRelType: string = 'http://schemas.microsoft.com/office/2006/relationships/wordVbaData';\n this.customXmlRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml';\n this.customUIRelType = 'http://schemas.microsoft.com/office/2006/relationships/ui/extensibility';\n this.attachedTemplateRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate';\n this.chartColorStyleRelType = 'http://schemas.microsoft.com/office/2011/relationships/chartColorStyle';\n // private ChartStyleRelType: string = 'http://schemas.microsoft.com/office/2011/relationships/chartStyle';\n // private ChartUserShapesRelType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes';\n // private ChartContentType: string = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package';\n // Namespaces\n // private PKG_namespace: string = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.wNamespace = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main';\n this.wpNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing';\n this.pictureNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/picture';\n this.aNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/main';\n this.a14Namespace = 'http://schemas.microsoft.com/office/drawing/2010/main';\n this.svgNamespace = 'http://schemas.microsoft.com/office/drawing/2016/SVG/main';\n this.rNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships';\n this.rpNamespace = 'http://schemas.openxmlformats.org/package/2006/relationships';\n this.vNamespace = 'urn:schemas-microsoft-com:vml';\n this.oNamespace = 'urn:schemas-microsoft-com:office:office';\n this.xmlNamespace = 'http://www.w3.org/XML/1998/namespace';\n this.w10Namespace = 'urn:schemas-microsoft-com:office:word';\n this.cpNamespace = 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties';\n this.dcNamespace = 'http://purl.org/dc/elements/1.1/';\n // private DCTERMS_namespace: string = 'http://purl.org/dc/terms/';\n // private XSI_namespace: string = 'http://www.w3.org/2001/XMLSchema-instance';\n this.docPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties';\n this.veNamespace = 'http://schemas.openxmlformats.org/markup-compatibility/2006';\n this.mNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/math';\n this.wneNamespace = 'http://schemas.microsoft.com/office/word/2006/wordml';\n // private DCMI_namespace: string = 'http://purl.org/dc/dcmitype/';\n this.customPropsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties';\n this.vtNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes';\n this.chartNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/chart';\n this.slNamespace = 'http://schemas.openxmlformats.org/schemaLibrary/2006/main';\n //2003WML namespace\n // private amlNamespace: string = 'http://schemas.microsoft.com/aml/2001/core';\n this.dtNamespace = 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882';\n this.wmlNamespace = 'http://schemas.microsoft.com/office/word/2003/wordml';\n //2010 namespaces\n this.w14Namespace = 'http://schemas.microsoft.com/office/word/2010/wordml';\n this.wpCanvasNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas';\n this.wpDrawingNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing';\n this.wpGroupNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingGroup';\n this.wpInkNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingInk';\n this.wpShapeNamespace = 'http://schemas.microsoft.com/office/word/2010/wordprocessingShape';\n //2013 namespaces\n this.w15Namespace = 'http://schemas.microsoft.com/office/word/2012/wordml';\n this.diagramNamespace = 'http://schemas.openxmlformats.org/drawingml/2006/diagram';\n //Encryption namespaces\n this.eNamespace = 'http://schemas.microsoft.com/office/2006/encryption';\n this.pNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/password';\n this.certNamespace = 'http://schemas.microsoft.com/office/2006/keyEncryptor/certificate';\n this.cxNamespace = 'http://schemas.microsoft.com/office/drawing/2014/chartex';\n // chart\n this.c15Namespace = 'http://schemas.microsoft.com/office/drawing/2015/06/chart';\n this.c7Namespace = 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart';\n this.csNamespace = 'http://schemas.microsoft.com/office/drawing/2012/chartStyle';\n // worksheet\n this.spreadSheetNamespace = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main';\n this.spreadSheet9 = 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/main';\n // Dls xml tags\n this.cRelationshipsTag = 'Relationships';\n this.cRelationshipTag = 'Relationship';\n this.cIdTag = 'Id';\n this.cTypeTag = 'Type';\n this.cTargetTag = 'Target';\n this.cUserShapesTag = 'userShapes';\n this.cExternalData = 'externalData';\n this.twipsInOnePoint = 20;\n this.twentiethOfPoint = 20;\n this.borderMultiplier = 8;\n this.percentageFactor = 50;\n this.emusPerPoint = 12700;\n // private const TOC_SYMBOL:string = (char)0x01;\n // private const FOOTNOTE_SYMBOL:string = (char)0x02;\n // private const PAGENUMBER_SYMBOL:string = (char)0xB;\n // private DEF_FIT_TEXT_TO_SHAPE: string = 'mso-fit-shape-to-text:t';\n // Document tags\n this.cConditionalTableStyleTag = 'tblStylePr';\n this.cTableFormatTag = 'tblPr';\n this.cTowFormatTag = 'trPr';\n this.cCellFormatTag = 'tcPr';\n this.cParagraphFormatTag = 'pPr';\n this.cCharacterFormatTag = 'rPr';\n this.packageType = 'http://schemas.microsoft.com/office/2006/xmlPackage';\n this.relsPartPath = '/_rels/.rels';\n this.documentRelsPartPath = '/word/_rels/document.xml.rels';\n this.webSettingsPath = '/word/webSettings.xml';\n this.wordMLDocumentPath = '/word/document.xml';\n this.wordMLStylePath = '/word/styles.xml';\n this.wordMLNumberingPath = '/word/numbering.xml';\n this.wordMLSettingsPath = '/word/settings.xml';\n this.wordMLHeaderPath = '/word/header';\n this.wordMLFooterPath = '/word/footer';\n this.wordMLCommentsPath = '/word/comments.xml';\n this.wordMLImagePath = '/word/media/image';\n this.wordMLFootnotesPath = '/word/footnotes.xml';\n this.wordMLEndnotesPath = '/word/endnotes.xml';\n this.wordMLAppPath = '/docProps/app.xml';\n this.wordMLCorePath = '/docProps/core.xml';\n this.wordMLCustomPath = '/docProps/custom.xml';\n this.wordMLFontTablePath = '/word/fontTable.xml';\n this.wordMLChartsPath = '/word/charts/';\n this.wordMLDefaultEmbeddingPath = '/word/embeddings/';\n this.wordMLEmbeddingPath = '/word/embeddings/';\n this.wordMLDrawingPath = '/word/drawings/';\n this.wordMLThemePath = '/word/theme/theme1.xml';\n this.wordMLFontsPath = '/word/fonts/';\n this.wordMLDiagramPath = '/word/diagrams/';\n this.wordMLControlPath = '/word/activeX/';\n this.wordMLVbaProject = '/vbaProject.bin';\n this.wordMLVbaData = '/vbaData.xml';\n this.wordMLVbaProjectPath = '/word/vbaProject.bin';\n this.wordMLVbaDataPath = '/word/vbaData.xml';\n // private WordMLCustomXMLPath: string = '/customXml/';\n this.wordMLWebSettingsPath = '/word/webSettings.xml';\n this.wordMLCustomItemProp1Path = '/customXml/itemProps1.xml';\n // private WordMLCustomXMLRelPath: string = '/customXml/_rels/item1.xml.rels';\n this.wordMLFootnoteRelPath = '/word/_rels/footnotes.xml.rels';\n this.wordMLEndnoteRelPath = '/word/_rels/endnotes.xml.rels';\n this.wordMLSettingsRelPath = '/word/_rels/settings.xml.rels';\n this.wordMLNumberingRelPath = '/word/_rels/numbering.xml.rels';\n this.wordMLFontTableRelPath = '/word/_rels/fontTable.xml.rels';\n this.wordMLCustomXmlPropsRelType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps';\n this.wordMLControlRelType = 'http://schemas.microsoft.com/office/2006/relationships/activeXControlBinary';\n this.wordMLDiagramContentType = 'application/vnd.ms-office.drawingml.diagramDrawing+xml';\n this.dsNamespace = 'http://schemas.openxmlformats.org/officeDocument/2006/customXml';\n this.excelFiles = undefined;\n this.lastSection = false;\n this.mRelationShipID = 0;\n this.cRelationShipId = 0;\n this.eRelationShipId = 0;\n this.efRelationShipId = 0;\n this.mDocPrID = 1;\n this.chartCount = 0;\n this.seriesCount = 0;\n this.chartStringCount = 0;\n this.mDifferentFirstPage = false;\n this.mBookmarks = undefined;\n this.mComments = [];\n this.revisions = [];\n this.customXMLProps = [];\n this.paraID = 0;\n this.commentParaID = 0;\n this.commentParaIDInfo = {};\n this.isInsideComment = false;\n this.commentId = {};\n this.currentCommentId = 0;\n this.trackChangesId = 0;\n this.prevRevisionIds = [];\n this.isRevisionContinuous = false;\n this.isBookmarkAtEnd = false;\n this.isBookmarkAtRowEnd = false;\n this.keywordIndex = undefined;\n this.isHeaderFooter = false;\n this.isSerializeFootEndNote = undefined;\n this.containerWidth = 0;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /* eslint-enable */\n }\n WordExport.prototype.getModuleName = function () {\n return 'WordExport';\n };\n Object.defineProperty(WordExport.prototype, \"bookmarks\", {\n // Gets the bookmark name\n get: function () {\n if (isNullOrUndefined(this.mBookmarks)) {\n this.mBookmarks = [];\n }\n return this.mBookmarks;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"documentImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mDocumentImages === undefined) {\n this.mDocumentImages = new Dictionary();\n }\n return this.mDocumentImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"svgImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mSvgImages === undefined) {\n this.mSvgImages = new Dictionary();\n }\n return this.mSvgImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"externalImages\", {\n // Gets the collection of images present in the document body\n get: function () {\n if (this.mExternalLinkImages === undefined) {\n this.mExternalLinkImages = new Dictionary();\n }\n return this.mExternalLinkImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headerFooterImages\", {\n // Gets the collections of images present in the HeaderFooters\n get: function () {\n if (this.mHeaderFooterImages === undefined) {\n this.mHeaderFooterImages = new Dictionary();\n }\n return this.mHeaderFooterImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headerFooterSvgImages\", {\n // Gets the collections of images present in the HeaderFooters\n get: function () {\n if (this.mHeaderFooterSvgImages === undefined) {\n this.mHeaderFooterSvgImages = new Dictionary();\n }\n return this.mHeaderFooterSvgImages;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"documentCharts\", {\n // Gets the collection of charts present in the document body\n get: function () {\n if (this.mDocumentCharts === undefined) {\n this.mDocumentCharts = new Dictionary();\n }\n return this.mDocumentCharts;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"headersFooters\", {\n /// Gets the HeaderFooter Collection\n get: function () {\n if (this.mHeaderFooterColl === undefined) {\n this.mHeaderFooterColl = new Dictionary();\n }\n return this.mHeaderFooterColl;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(WordExport.prototype, \"endnotesFootnotes\", {\n /// Gets the Endnote and Footnote Collection\n get: function () {\n if (this.mFootEndnotesColl === undefined) {\n this.mFootEndnotesColl = new Dictionary();\n }\n return this.mFootEndnotesColl;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {DocumentHelper} documentHelper - Document helper\n * @param {string} fileName - file name\n * @param {string} formatType - format type\n * @returns {void}\n */\n WordExport.prototype.save = function (documentHelper, fileName, formatType) {\n var _this = this;\n this.fileName = fileName;\n this.serialize(documentHelper, formatType);\n var excelFiles = this.serializeExcelFiles();\n if (excelFiles && excelFiles.length > 0) {\n Promise.all(excelFiles).then(function () {\n _this.saveInternal(fileName, formatType);\n });\n }\n else {\n this.saveInternal(fileName, formatType);\n }\n this.close();\n };\n WordExport.prototype.saveInternal = function (fileName, formatType) {\n if (formatType === 'Docx') {\n this.mArchive.save(fileName + '.docx').then(function (mArchive) {\n mArchive.destroy();\n });\n }\n else if (formatType === 'Dotx') {\n this.mArchive.save(fileName + '.dotx').then(function (mArchive) {\n mArchive.destroy();\n });\n }\n };\n /**\n * @private\n * @param {DocumentHelper} documentHelper - Document helper\n * @param {string} formatType - format type\n * @returns {Promise} - Return Promise\n */\n WordExport.prototype.saveAsBlob = function (documentHelper, formatType) {\n var _this = this;\n this.serialize(documentHelper, formatType);\n var excelFiles = this.serializeExcelFiles();\n /* eslint-disable */\n return new Promise(function (resolve, reject) {\n if (excelFiles.length > 0) {\n Promise.all(excelFiles).then(function () {\n _this.mArchive.saveAsBlob().then(function (blob) {\n _this.mArchive.destroy();\n blob = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n resolve(blob);\n });\n });\n }\n else {\n _this.mArchive.saveAsBlob().then(function (blob) {\n _this.mArchive.destroy();\n blob = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });\n resolve(blob);\n });\n }\n });\n /* eslint-enable */\n };\n WordExport.prototype.serializeExcelFiles = function () {\n var _this = this;\n var excelFiles = this.excelFiles;\n var files = [];\n if (excelFiles && excelFiles.length > 0) {\n var _loop_1 = function (i) {\n var fileName = excelFiles.keys[parseInt(i.toString(), 10)];\n var excelFile = excelFiles.get(fileName);\n var excelPromise = excelFile.saveAsBlob();\n files.push(excelPromise);\n excelPromise.then(function (blob) {\n var zipArchiveItem = new ZipArchiveItem(blob, fileName);\n _this.mArchive.addItem(zipArchiveItem);\n });\n };\n for (var i = 0; i < excelFiles.length; i++) {\n _loop_1(i);\n }\n this.excelFiles.clear();\n }\n return files;\n };\n /**\n * @private\n * @returns {void}\n */\n WordExport.prototype.saveExcel = function () {\n var xlsxPath = this.defaultEmbeddingPath + 'Microsoft_Excel_Worksheet' + this.chartCount + '.xlsx';\n this.excelFiles.add(xlsxPath, this.mArchiveExcel);\n this.mArchiveExcel = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n WordExport.prototype.destroy = function () {\n this.clearDocument();\n this.mRelationShipID = undefined;\n this.mDocPrID = undefined;\n this.mDifferentFirstPage = undefined;\n this.fileName = undefined;\n this.imageRelationIds = undefined;\n this.svgImageRelationIds = undefined;\n if (this.mArchive) {\n this.mArchive.destroy();\n this.mArchive = undefined;\n }\n if (this.mArchiveExcel) {\n this.mArchiveExcel.destroy();\n this.mArchiveExcel = undefined;\n }\n };\n // Saves the word document in the stream\n WordExport.prototype.serialize = function (documentHelper, formatType) {\n this.keywordIndex = documentHelper.owner.documentEditorSettings.optimizeSfdt ? 1 : 0;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var document = documentHelper.owner.sfdtExportModule.write(this.keywordIndex);\n this.setDocument(document);\n this.mComments = documentHelper.comments;\n this.mCustomXML = documentHelper.customXmlData;\n this.mImages = documentHelper.images;\n this.revisions = documentHelper.owner.revisions.changes;\n this.mArchive = new ZipArchive();\n this.mArchive.compressionLevel = 'Normal';\n this.commentParaIDInfo = {};\n this.commentParaID = 0;\n this.currentCommentId = 0;\n this.commentId = {};\n this.mVerticalMerge = new Dictionary();\n this.mGridSpans = new Dictionary();\n this.imageRelationIds = new Dictionary();\n this.svgImageRelationIds = new Dictionary();\n var contenttype;\n //document.xml\n this.serializeDocument();\n //Styles.xml\n this.serializeStyles();\n //numbering.xml\n this.serializeNumberings();\n //comments.xml\n this.serializeComments();\n //commentsExtended.xml\n this.serializeCommentsExtended();\n //theme.xml\n // if (m_document.DocHasThemes && !isNullOrUndefined(m_document.Themes))\n this.serializeThemes();\n // else\n // this.serializeDefaultThemes();\n //settings.xml\n this.serializeSettings();\n //core.xml\n this.serializeCoreProperties();\n //app.xml\n this.serializeAppProperties();\n //fontTable.xml\n this.serializeFontTable(contenttype);\n //custom.xml\n // if (!isNullOrUndefined(this.wordDocument.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0) {\n // SerializeCustomProperties();\n // }\n //Settings Relations\n this.serializeSettingsRelation();\n //Numbering relation if the document has picture bullet\n // if (PictureBullets.length > 0) {\n // SerializeNumberingsRelation();\n // }\n this.serializeHeaderFooters();\n this.serializeFootnotes();\n this.serializeEndnotes();\n //document relations\n this.serializeDocumentRelations();\n // Add controls to archieve.\n // if (ControlsPathNames.length > 0) {\n // AddControlsToZip(m_document.DocxPackage);\n // }\n // if (!isNullOrUndefined(m_document.CustomUIPartContainer))\n // AddPartContainerToArchive(m_document.CustomUIPartContainer);\n // if (!isNullOrUndefined(m_document.CustomXMLContainer))\n // AddPartContainerToArchive(m_document.CustomXMLContainer);\n //general relations\n this.serializeGeneralRelations();\n //[ContentTypes].xml\n this.serializeContentTypes(contenttype, formatType);\n // Clears the internal fields maintained for serializing.\n this.clearDocument();\n };\n // Sets the document\n WordExport.prototype.setDocument = function (document, keyindex) {\n if (isNullOrUndefined(this.keywordIndex)) {\n this.keywordIndex = keyindex;\n }\n this.document = document;\n this.mSections = document[sectionsProperty[this.keywordIndex]];\n this.mLists = document[listsProperty[this.keywordIndex]];\n this.mAbstractLists = document[abstractListsProperty[this.keywordIndex]];\n this.defCharacterFormat = document[characterFormatProperty[this.keywordIndex]];\n this.defParagraphFormat = document[paragraphFormatProperty[this.keywordIndex]];\n this.defaultTabWidthValue = document[defaultTabWidthProperty[this.keywordIndex]];\n this.themeFontLang = document[themeFontLanguagesProperty[this.keywordIndex]];\n this.dontUseHtmlParagraphAutoSpacing = HelperMethods.parseBoolValue(document[doNotUseHTMLParagraphAutoSpacingProperty[this.keywordIndex]]);\n this.mStyles = document[stylesProperty[this.keywordIndex]];\n this.mThemes = document[themesProperty[this.keywordIndex]];\n this.formatting = HelperMethods.parseBoolValue(document[formattingProperty[this.keywordIndex]]);\n this.enforcement = HelperMethods.parseBoolValue(document[enforcementProperty[this.keywordIndex]]);\n this.hashValue = document[hashValueProperty[this.keywordIndex]];\n this.saltValue = document[saltValueProperty[this.keywordIndex]];\n this.protectionType = document[protectionTypeProperty[this.keywordIndex]];\n this.formFieldShading = HelperMethods.parseBoolValue(document[formFieldShadingProperty[this.keywordIndex]]);\n this.trackChanges = HelperMethods.parseBoolValue(document[trackChangesProperty[this.keywordIndex]]);\n this.compatibilityMode = document[compatibilityModeProperty[this.keywordIndex]];\n this.allowSpaceOfSameStyleInTable = HelperMethods.parseBoolValue(document[allowSpaceOfSameStyleInTableProperty[this.keywordIndex]]);\n };\n // Clears the document\n WordExport.prototype.clearDocument = function () {\n // Owner Nodes\n this.section = undefined;\n this.lastSection = undefined;\n this.blockOwner = undefined;\n this.paragraph = undefined;\n this.table = undefined;\n this.row = undefined;\n this.headerFooter = undefined;\n this.commentParaIDInfo = {};\n this.commentParaID = 0;\n this.currentCommentId = 0;\n this.commentId = {};\n this.document = undefined;\n this.mSections = undefined;\n this.mLists = undefined;\n this.mAbstractLists = undefined;\n this.defCharacterFormat = undefined;\n this.defParagraphFormat = undefined;\n this.defaultTabWidthValue = undefined;\n this.trackChanges = undefined;\n this.customXMLProps = [];\n this.mRelationShipID = 0;\n this.eRelationShipId = 0;\n this.cRelationShipId = 0;\n this.efRelationShipId = 0;\n this.mDocPrID = 1;\n this.chartCount = 0;\n this.keywordIndex = undefined;\n this.mDifferentFirstPage = false;\n if (this.mHeaderFooterColl) {\n this.mHeaderFooterColl.destroy();\n this.mHeaderFooterColl = undefined;\n }\n if (this.mVerticalMerge) {\n this.mVerticalMerge.destroy();\n this.mVerticalMerge = undefined;\n }\n if (this.mGridSpans) {\n this.mGridSpans.destroy();\n this.mGridSpans = undefined;\n }\n if (this.mDocumentImages) {\n this.mDocumentImages.destroy();\n this.mDocumentImages = undefined;\n }\n if (this.mSvgImages) {\n this.mSvgImages.destroy();\n this.mSvgImages = undefined;\n }\n if (this.mExternalLinkImages) {\n this.mExternalLinkImages.destroy();\n this.mExternalLinkImages = undefined;\n }\n if (this.mHeaderFooterImages) {\n this.mHeaderFooterImages.destroy();\n this.mHeaderFooterImages = undefined;\n }\n if (this.mHeaderFooterSvgImages) {\n this.mHeaderFooterSvgImages.destroy();\n this.mHeaderFooterSvgImages = undefined;\n }\n if (this.mDocumentCharts) {\n this.mDocumentCharts.destroy();\n this.mDocumentCharts = undefined;\n }\n if (this.mFootEndnotesColl) {\n this.mFootEndnotesColl.destroy();\n this.mFootEndnotesColl = undefined;\n }\n };\n // Serializes the document elements (document.xml)\n WordExport.prototype.serializeDocument = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'document', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n writer.writeStartElement('w', 'background', this.wNamespace);\n writer.writeAttributeString('w', 'color', undefined, this.getColor(this.document[backgroundProperty[this.keywordIndex]][colorProperty[this.keywordIndex]]));\n writer.writeEndElement();\n this.serializeDocumentBody(writer);\n writer.writeEndElement(); //end of document tag\n var archiveItem = new ZipArchiveItem(writer.buffer, this.documentPath);\n this.mArchive.addItem(archiveItem);\n };\n WordExport.prototype.writeCommonAttributeStrings = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n this.writeCustom(writer);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n WordExport.prototype.writeDup = function (writer) {\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'wpg', undefined, this.wpGroupNamespace);\n writer.writeAttributeString('xmlns', 'wpi', undefined, this.wpInkNamespace);\n };\n WordExport.prototype.writeCustom = function (writer) {\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n };\n // Serializes the document body\n WordExport.prototype.serializeDocumentBody = function (writer) {\n writer.writeStartElement(undefined, 'body', this.wNamespace);\n var count = this.document[sectionsProperty[this.keywordIndex]].length;\n for (var i = 0; i < count; i++) {\n this.section = this.document[sectionsProperty[this.keywordIndex]][parseInt(i.toString(), 10)];\n this.lastSection = i === count - 1;\n this.containerWidth = this.section[sectionFormatProperty[this.keywordIndex]][pageWidthProperty[this.keywordIndex]] -\n (this.section[sectionFormatProperty[this.keywordIndex]][leftMarginProperty[this.keywordIndex]] +\n this.section[sectionFormatProperty[this.keywordIndex]][rightMarginProperty[this.keywordIndex]]);\n this.serializeSection(writer, this.section, i === count - 1);\n this.section = undefined;\n }\n writer.writeEndElement();\n };\n // Serializes the Section.\n WordExport.prototype.serializeSection = function (writer, section, last) {\n this.blockOwner = section;\n if (!isNullOrUndefined(section[blocksProperty[this.keywordIndex]])) {\n this.serializeBodyItems(writer, section[blocksProperty[this.keywordIndex]], last);\n }\n if (last) {\n this.serializeSectionProperties(writer, section);\n }\n this.blockOwner = undefined;\n };\n // Serialize the comments (comments.xml)\n WordExport.prototype.serializeComments = function () {\n if (this.mComments.length === 0 || (this.mComments.length === 1 && this.mComments[0].text === '')) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'comments', this.wNamespace);\n this.serializeCommentCommonAttribute(writer);\n this.serializeCommentInternal(writer, this.mComments);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.commentsPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n //SerializeThemes the themes (theme.xml)\n WordExport.prototype.serializeThemes = function () {\n if (!isNullOrUndefined(this.mThemes)) {\n var writer = new XmlWriter();\n writer.writeStartElement('a', 'theme', this.aNamespace);\n writer.writeAttributeString(undefined, 'name', undefined, 'Office Theme');\n writer.writeStartElement(undefined, 'themeElements', this.aNamespace);\n writer.writeRaw('');\n writer.writeStartElement(undefined, 'fontScheme', this.aNamespace);\n writer.writeAttributeString(undefined, 'name', undefined, this.mThemes[fontSchemeNameProperty[this.keywordIndex]]);\n writer.writeStartElement(undefined, 'majorFont', this.aNamespace);\n for (var i = 0; i < this.mThemes[fontSchemeProperty[this.keywordIndex]][majorFontSchemeProperty[this.keywordIndex]][fontSchemeListProperty[this.keywordIndex]].length; i++) {\n var theme = this.mThemes[fontSchemeProperty[this.keywordIndex]][majorFontSchemeProperty[this.keywordIndex]][fontSchemeListProperty[this.keywordIndex]][parseInt(i.toString(), 10)];\n this.themeFont(writer, theme);\n }\n var keys = Object.keys(this.mThemes[fontSchemeProperty[this.keywordIndex]][majorFontSchemeProperty[this.keywordIndex]][fontTypefaceProperty[this.keywordIndex]]);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n this.themeType(writer, key, this.mThemes[fontSchemeProperty[this.keywordIndex]][majorFontSchemeProperty[this.keywordIndex]][fontTypefaceProperty[this.keywordIndex]][\"\" + key]);\n }\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'minorFont', this.aNamespace);\n for (var i = 0; i < this.mThemes[fontSchemeProperty[this.keywordIndex]][minorFontSchemeProperty[this.keywordIndex]][fontSchemeListProperty[this.keywordIndex]].length; i++) {\n var theme = this.mThemes[fontSchemeProperty[this.keywordIndex]][minorFontSchemeProperty[this.keywordIndex]][fontSchemeListProperty[this.keywordIndex]][parseInt(i.toString(), 10)];\n this.themeFont(writer, theme);\n }\n keys = Object.keys(this.mThemes[fontSchemeProperty[this.keywordIndex]][minorFontSchemeProperty[this.keywordIndex]][fontTypefaceProperty[this.keywordIndex]]);\n for (var _a = 0, keys_2 = keys; _a < keys_2.length; _a++) {\n var key = keys_2[_a];\n this.themeType(writer, key, this.mThemes[fontSchemeProperty[this.keywordIndex]][minorFontSchemeProperty[this.keywordIndex]][fontTypefaceProperty[this.keywordIndex]][\"\" + key]);\n }\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'fmtScheme', this.aNamespace);\n writer.writeAttributeString(undefined, 'name', undefined, 'Office');\n writer.writeRaw('');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.themePath);\n this.mArchive.addItem(zipArchiveItem);\n }\n };\n WordExport.prototype.themeFont = function (writer, theme) {\n if (theme[nameProperty[this.keywordIndex]] === 'latin' || theme[nameProperty[this.keywordIndex]] === 'ea' || theme[nameProperty[this.keywordIndex]] === 'cs') {\n writer.writeStartElement(undefined, theme[nameProperty[this.keywordIndex]], this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, theme[typefaceProperty[this.keywordIndex]]);\n writer.writeAttributeString(undefined, 'panose', undefined, theme[panoseProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n };\n WordExport.prototype.themeType = function (writer, script, typeFace) {\n writer.writeStartElement(undefined, 'font', this.aNamespace);\n writer.writeAttributeString(undefined, 'script', undefined, script);\n writer.writeAttributeString(undefined, 'typeface', undefined, typeFace);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeCommentCommonAttribute = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'cx', undefined, this.cxNamespace);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n };\n WordExport.prototype.serializeCommentInternal = function (writer, comments) {\n for (var i = 0; i < comments.length; i++) {\n var comment = comments[parseInt(i.toString(), 10)];\n writer.writeStartElement('w', 'comment', this.wNamespace);\n writer.writeAttributeString('w', 'id', this.wNamespace, this.commentId[comment.commentId].toString());\n if (comment.author && comment.author !== ' ') {\n writer.writeAttributeString('w', 'author', this.wNamespace, comment.author);\n }\n if (comment.date) {\n writer.writeAttributeString('w', 'date', this.wNamespace, comment.date);\n }\n if (comment.initial && comment.initial !== '') {\n writer.writeAttributeString('w', 'initials', this.wNamespace, comment.initial);\n }\n var blocks = HelperMethods.commentInlines(comment.text, comment.mentions, this.keywordIndex);\n for (var k = 0; k < blocks.length; k++) {\n this.isInsideComment = true;\n this.commentParaID++;\n this.serializeBodyItem(writer, blocks[parseInt(k.toString(), 10)], true);\n this.isInsideComment = false;\n }\n if (blocks.length === 0) {\n this.isInsideComment = true;\n this.commentParaID++;\n }\n this.commentParaIDInfo[comment.commentId] = this.commentParaID;\n //}\n this.isInsideComment = false;\n //}\n writer.writeEndElement();\n if (comment.replyComments.length > 0) {\n this.serializeCommentInternal(writer, comment.replyComments);\n }\n }\n };\n // Serialize the comments (commentsExtended.xml)\n WordExport.prototype.serializeCommentsExtended = function () {\n if (this.mComments.length === 0 || (this.mComments.length === 1 && this.mComments[0].text === '')) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w15', 'commentsEx', this.wNamespace);\n this.serializeCommentCommonAttribute(writer);\n this.serializeCommentsExInternal(writer, this.mComments, false);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.commentsExtendedPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCommentsExInternal = function (writer, comments, isReply) {\n for (var i = 0; i < comments.length; i++) {\n var comment = comments[parseInt(i.toString(), 10)];\n writer.writeStartElement('w15', 'commentEx', this.wNamespace);\n //if (comment.blocks.length > 0) {\n var syncParaID = this.commentParaIDInfo[comment.commentId];\n if (isReply) {\n var paraID = this.commentParaIDInfo[comment.ownerComment.commentId];\n writer.writeAttributeString('w15', 'paraIdParent', this.wNamespace, paraID.toString());\n }\n writer.writeAttributeString('w15', 'paraId', this.wNamespace, syncParaID.toString());\n //}\n var val = comment.done ? 1 : 0;\n writer.writeAttributeString('w15', 'done', this.wNamespace, val.toString());\n writer.writeEndElement();\n if (comment.replyComments.length > 0) {\n this.serializeCommentsExInternal(writer, comment.replyComments, true);\n }\n }\n };\n // Serialize the section properties.\n WordExport.prototype.serializeSectionProperties = function (writer, section) {\n if (!isNullOrUndefined(this.document.optimizeSfdt)) {\n this.keywordIndex = this.document.optimizeSfdt ? 1 : 0;\n }\n writer.writeStartElement('w', 'sectPr', this.wNamespace);\n if (section[headersFootersProperty[this.keywordIndex]]) {\n this.serializeHFReference(writer, section[headersFootersProperty[this.keywordIndex]]);\n }\n // if (IsNeedToSerializeSectionFootNoteProperties(section))\n // SerializeFootnoteProperties(section);\n // if (IsNeedToSerializeSectionEndNoteProperties(section))\n // SerializeEndnoteProperties(section);\n if (!isNullOrUndefined(section[sectionFormatProperty[this.keywordIndex]][breakCodeProperty[this.keywordIndex]])) {\n var breakCode = this.getSectionBreakCode(section[sectionFormatProperty[this.keywordIndex]][breakCodeProperty[this.keywordIndex]]);\n this.serializeSectionType(writer, breakCode);\n }\n this.serializePageSetup(writer, section[sectionFormatProperty[this.keywordIndex]]);\n this.serializeColumns(writer, section[sectionFormatProperty[this.keywordIndex]]);\n this.serializeFootNotesPr(writer, section[sectionFormatProperty[this.keywordIndex]]);\n this.serializeEndNotesPr(writer, section[sectionFormatProperty[this.keywordIndex]]);\n // this.serializeSectionProtection(section);\n // if (section.PageSetup.VerticalAlignment !== PageAlignment.Top) {\n // writer.writeStartElement('vAlign', this.wNamespace);\n // switch (section.PageSetup.VerticalAlignment) {\n // case PageAlignment.Top:\n // writer.WriteAttributeString('val', this.wNamespace, 'top');\n // break;\n // case PageAlignment.Middle:\n // writer.WriteAttributeString('val', this.wNamespace, 'center');\n // break;\n // case PageAlignment.Justified:\n // writer.WriteAttributeString('val', this.wNamespace, 'both');\n // break;\n // case PageAlignment.Bottom:\n // writer.WriteAttributeString('val', this.wNamespace, 'bottom');\n // break;\n // }\n // writer.WriteEndElement();\n // }\n if (section[sectionFormatProperty[this.keywordIndex]] !== undefined\n && HelperMethods.parseBoolValue(section[sectionFormatProperty[this.keywordIndex]][differentFirstPageProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'titlePg', this.wNamespace);\n writer.writeEndElement();\n }\n // SerializeTextDirection(section);\n if (!isNullOrUndefined(section[sectionFormatProperty[this.keywordIndex]])\n && HelperMethods.parseBoolValue(section[sectionFormatProperty[this.keywordIndex]][bidiProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'bidi', this.wNamespace);\n writer.writeEndElement();\n }\n //rtlGutter\n // SerializeDocGrid(section);\n //printerSettings\n writer.writeEndElement(); //end of sectPr tag\n };\n WordExport.prototype.getSectionBreakCode = function (breakCode) {\n switch (breakCode) {\n case 'NoBreak':\n return 'continuous';\n case 'NewColumn':\n return 'nextColumn';\n case 'EvenPage':\n return 'evenPage';\n case 'Oddpage':\n return 'oddPage';\n default:\n return 'nextPage';\n }\n };\n WordExport.prototype.serializeFootNotesPr = function (writer, section) {\n if (section[footNoteNumberFormatProperty[this.keywordIndex]] || section[restartIndexForFootnotesProperty[this.keywordIndex]]) {\n writer.writeStartElement(undefined, 'footnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'pos', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, 'pageBottom');\n writer.writeEndElement();\n if (section[footNoteNumberFormatProperty[this.keywordIndex]] !== undefined) {\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberFormat(section[footNoteNumberFormatProperty[this.keywordIndex]]));\n writer.writeEndElement();\n }\n if (section[restartIndexForFootnotesProperty[this.keywordIndex]] !== undefined) {\n writer.writeStartElement(undefined, 'numRestart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberRestart(section[restartIndexForFootnotesProperty[this.keywordIndex]]));\n writer.writeEndElement();\n }\n if (section[initialFootNoteNumberProperty[this.keywordIndex]] !== undefined) {\n writer.writeStartElement(undefined, 'numStart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (section[initialFootNoteNumberProperty[this.keywordIndex]]).toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n WordExport.prototype.getFootNoteNumberFormat = function (numberFormat) {\n var patternType;\n switch (numberFormat) {\n case 'UpperCaseRoman':\n case 1:\n patternType = 'upperRoman';\n break;\n case 'LowerCaseRoman':\n case 2:\n patternType = 'lowerRoman';\n break;\n case 'UpperCaseLetter':\n case 3:\n patternType = 'upperLetter';\n break;\n case 'LowerCaseLetter':\n case 4:\n patternType = 'lowerLetter';\n break;\n default:\n patternType = 'decimal';\n break;\n }\n return patternType;\n };\n WordExport.prototype.getFootNoteNumberRestart = function (numberRestart) {\n switch (numberRestart) {\n case 'RestartForEachSection ':\n case 1:\n return 'eachSect';\n case 'RestartForEachPage':\n case 2:\n return 'eachPage';\n default:\n return 'continuous';\n }\n };\n WordExport.prototype.getPageNumberFormat = function (numberFormat) {\n var patternType;\n switch (numberFormat) {\n case 'RomanUpper':\n patternType = 'upperRoman';\n break;\n case 'RomanLower':\n patternType = 'lowerRoman';\n break;\n case 'LetterUpper':\n patternType = 'upperLetter';\n break;\n case 'LetterLower':\n patternType = 'lowerLetter';\n break;\n default:\n patternType = 'Arabic';\n break;\n }\n return patternType;\n };\n // Serialize the Footnote Properties\n WordExport.prototype.serializeEndNotesPr = function (writer, section) {\n if (section[endnoteNumberFormatProperty[this.keywordIndex]] || section[restartIndexForEndnotesProperty[this.keywordIndex]]) {\n writer.writeStartElement(undefined, 'endnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'pos', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, 'docEnd');\n writer.writeEndElement();\n if (section[endnoteNumberFormatProperty[this.keywordIndex]] !== undefined) {\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberFormat(section[endnoteNumberFormatProperty[this.keywordIndex]]));\n writer.writeEndElement();\n }\n if (section[restartIndexForEndnotesProperty[this.keywordIndex]] !== undefined) {\n writer.writeStartElement(undefined, 'numRestart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getFootNoteNumberRestart(section[restartIndexForEndnotesProperty[this.keywordIndex]]));\n writer.writeEndElement();\n }\n if (section[initialEndNoteNumberProperty[this.keywordIndex]] !== undefined) {\n writer.writeStartElement(undefined, 'numStart', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (section[initialEndNoteNumberProperty[this.keywordIndex]]).toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // Serialize the column properties of section.\n WordExport.prototype.serializeColumns = function (writer, sectionFormat) {\n if (sectionFormat[numberOfColumnsProperty[this.keywordIndex]] !== undefined\n && sectionFormat[numberOfColumnsProperty[this.keywordIndex]] > 1) {\n writer.writeStartElement(undefined, 'cols', this.wNamespace);\n writer.writeAttributeString(undefined, 'num', this.wNamespace, sectionFormat[numberOfColumnsProperty[this.keywordIndex]].toString());\n if (HelperMethods.parseBoolValue(sectionFormat[lineBetweenColumnsProperty[this.keywordIndex]])) {\n writer.writeAttributeString(undefined, 'sep', this.wNamespace, '1');\n }\n if (HelperMethods.parseBoolValue(sectionFormat[equalWidthProperty[this.keywordIndex]])) {\n writer.writeAttributeString(undefined, 'equalWidth', this.wNamespace, '1');\n }\n else {\n writer.writeAttributeString(undefined, 'equalWidth', this.wNamespace, '0');\n if (sectionFormat[columnsProperty[this.keywordIndex]] !== undefined\n && sectionFormat[columnsProperty[this.keywordIndex]].length > 0) {\n for (var i = 0; i < sectionFormat[columnsProperty[this.keywordIndex]].length; i++) {\n writer.writeStartElement(undefined, 'col', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(sectionFormat[columnsProperty[this.keywordIndex]][parseInt(i.toString(), 10)][widthProperty[this.keywordIndex]]\n * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'space', this.wNamespace, this.roundToTwoDecimal(sectionFormat[columnsProperty[this.keywordIndex]][parseInt(i.toString(), 10)][spaceProperty[this.keywordIndex]]\n * this.twentiethOfPoint).toString());\n writer.writeEndElement();\n }\n }\n }\n writer.writeEndElement();\n }\n // ColumnCollection columns = section.Columns;\n // writer.WriteStartElement('cols', this.wNamespace);\n // if (columns.length > 0)\n // {\n // writer.WriteAttributeString('num', this.wNamespace, columns.length.ToString());\n // }\n // if (section.PageSetup.DrawLinesBetweenCols)\n // writer.WriteAttributeString('sep', this.wNamespace, '1');\n // if (columns.OwnerSection.PageSetup.EqualColumnWidth)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '1');\n // //When the column count is negative, MS word just reset the column's count to zero\n // //To avoid index out of exception, checked the columns count\n // writer.WriteAttributeString('space', this.wNamespace, ToString(columns.length > 0 ? columns[0].Space * this.TwentiethOfPoint : 0));\n // }\n // else if (columns.length > 0)\n // {\n // writer.WriteAttributeString('equalWidth', this.wNamespace, '0');\n // foreach (Column column in columns)\n // {\n // writer.WriteStartElement('col', this.wNamespace);\n // writer.WriteAttributeString('w', this.wNamespace, ToString(column.Width * this.TwentiethOfPoint));\n // writer.WriteAttributeString('space', this.wNamespace, ToString(column.Space * this.TwentiethOfPoint));\n // writer.WriteEndElement();\n // }\n // }\n // writer.WriteEndElement();\n };\n // Serialize the page setup properties.\n WordExport.prototype.serializePageSetup = function (writer, pageSetup) {\n if (pageSetup !== undefined) {\n this.serializePageSize(writer, pageSetup);\n this.serializePageMargins(writer, pageSetup);\n this.serializePageNumberType(writer, pageSetup);\n }\n // // StartElement paperSrc (if any)\n // if (pageSetup.FirstPageTray > 0 || pageSetup.OtherPagesTray > 0) {\n // writer.WriteStartElement('paperSrc', this.wNamespace);\n // if (pageSetup.FirstPageTray > 0) {\n // writer.WriteAttributeString('first', this.wNamespace, pageSetup.FirstPageTray.ToString());\n // }\n // if (pageSetup.OtherPagesTray > 0) {\n // writer.WriteAttributeString('other', this.wNamespace, pageSetup.OtherPagesTray.ToString());\n // }\n // writer.WriteEndElement();\n // }\n if (HelperMethods.parseBoolValue(pageSetup[restartPageNumberingProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'pgNumType', this.wNamespace);\n writer.writeAttributeString(undefined, 'start', this.wNamespace, pageSetup[pageStartingNumberProperty[this.keywordIndex]].toString());\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'pgBorders', this.wNamespace);\n // //zOrder\n // if (pageSetup.PageBordersApplyType === PageBordersApplyType.FirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'firstPage');\n // else if (pageSetup.PageBordersApplyType === PageBordersApplyType.AllExceptFirstPage)\n // writer.WriteAttributeString('display', this.wNamespace, 'notFirstPage');\n // if (pageSetup.PageBorderOffsetFrom === PageBorderOffsetFrom.PageEdge) {\n // writer.WriteAttributeString('offsetFrom', this.wNamespace, 'page');\n // }\n // //Serializing zOrder of the front page border\n // if (!pageSetup.IsFrontPageBorder) {\n // writer.WriteAttributeString('zOrder', this.wNamespace, 'back');\n // }\n // SerializePageBorders(pageSetup.Borders);\n writer.writeEndElement();\n // this.serializeLineNumberType(writer, pageSetup);\n //this.serializePageNumberType(writer, pageSetup);\n };\n // serialize the page size\n WordExport.prototype.serializePageSize = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgSz', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(pageSetup[pageWidthProperty[this.keywordIndex]] * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'h', this.wNamespace, this.roundToTwoDecimal(pageSetup[pageHeightProperty[this.keywordIndex]] * this.twentiethOfPoint).toString());\n // if (pageSetup.Orientation === PageOrientation.Landscape)\n // {\n // writer.WriteAttributeString('orient', this.wNamespace, 'landscape');\n // }\n writer.writeEndElement();\n };\n // Serialize the border.\n WordExport.prototype.serializePageMargins = function (writer, pageSetup) {\n writer.writeStartElement(undefined, 'pgMar', this.wNamespace);\n var marginValue = Math.round(pageSetup[topMarginProperty[this.keywordIndex]] * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'top', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup[rightMarginProperty[this.keywordIndex]] * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'right', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup[bottomMarginProperty[this.keywordIndex]] * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'bottom', this.wNamespace, marginValue.toString());\n marginValue = Math.round(pageSetup[leftMarginProperty[this.keywordIndex]] * this.twentiethOfPoint);\n writer.writeAttributeString(undefined, 'left', this.wNamespace, marginValue.toString());\n writer.writeAttributeString(undefined, 'header', this.wNamespace, this.roundToTwoDecimal(pageSetup[headerDistanceProperty[this.keywordIndex]] * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'footer', this.wNamespace, this.roundToTwoDecimal(pageSetup[footerDistanceProperty[this.keywordIndex]] * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'gutter', this.wNamespace, '0');\n writer.writeEndElement();\n };\n //Serialize the page number type\n WordExport.prototype.serializePageNumberType = function (writer, pageSetup) {\n if (pageSetup[pageNumberStyleProperty[this.keywordIndex]] !== undefined) {\n writer.writeStartElement(undefined, 'pgNumType', this.wNamespace);\n writer.writeAttributeString(undefined, 'fmt', this.wNamespace, this.getPageNumberFormat(pageSetup[pageNumberStyleProperty[this.keywordIndex]]));\n writer.writeEndElement();\n }\n };\n // Serialize the section type.\n WordExport.prototype.serializeSectionType = function (writer, sectionBreakCode) {\n writer.writeStartElement('w', 'type', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, sectionBreakCode); //GetSectionBreakCode(sectionBreakCode));\n writer.writeEndElement();\n };\n // Serialize the heeader/footer reference.\n WordExport.prototype.serializeHFReference = function (writer, headersFooters) {\n var hfId = '';\n if (headersFooters !== undefined) {\n this.mDifferentFirstPage = HelperMethods.parseBoolValue(this.section[sectionFormatProperty[this.keywordIndex]][differentOddAndEvenPagesProperty[this.keywordIndex]]);\n var hf = headersFooters[firstPageHeaderProperty[this.keywordIndex]];\n if (hf && hf[blocksProperty[this.keywordIndex]] && hf[blocksProperty[this.keywordIndex]].length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters[firstPageFooterProperty[this.keywordIndex]];\n if (hf && hf[blocksProperty[this.keywordIndex]] && hf[blocksProperty[this.keywordIndex]].length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'first');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'FirstPageFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters[evenHeaderProperty[this.keywordIndex]];\n if (hf && hf[blocksProperty[this.keywordIndex]] && hf[blocksProperty[this.keywordIndex]].length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters[evenFooterProperty[this.keywordIndex]];\n if (hf && hf[blocksProperty[this.keywordIndex]] && hf[blocksProperty[this.keywordIndex]].length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'even');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'EvenFooter', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters[headerProperty[this.keywordIndex]];\n if (hf && hf[blocksProperty[this.keywordIndex]] && hf[blocksProperty[this.keywordIndex]].length > 0) {\n writer.writeStartElement(undefined, 'headerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddHeader', hfId);\n writer.writeEndElement();\n }\n hf = headersFooters[footerProperty[this.keywordIndex]];\n if (hf && hf[blocksProperty[this.keywordIndex]] && hf[blocksProperty[this.keywordIndex]].length > 0) {\n writer.writeStartElement(undefined, 'footerReference', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'default');\n hfId = this.getNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.rNamespace, hfId);\n this.addHeaderFooter(hf, 'OddFooter', hfId);\n writer.writeEndElement();\n }\n }\n };\n // Adds the header footer details to the collection.\n WordExport.prototype.addHeaderFooter = function (hf, hfType, id) {\n var hfColl = new Dictionary();\n this.headersFooters.add(hfType, hfColl);\n this.headersFooters.get(hfType).add(id, hf);\n };\n // Serializes the bodyItems\n WordExport.prototype.serializeBodyItems = function (writer, blockCollection, isLastSection) {\n for (var i = 0; i < blockCollection.length; i++) {\n this.serializeBodyItem(writer, blockCollection[parseInt(i.toString(), 10)], isLastSection);\n }\n };\n // serialize the content Control\n /* eslint-disable-next-line max-len */\n WordExport.prototype.serializeContentControl = function (writer, contentControlItem, item, isLastSection, inlines) {\n if (isNullOrUndefined(contentControlItem)) {\n throw new Error('contentCOntrol should not be undefined');\n }\n writer.writeStartElement('w', 'sdt', this.wNamespace);\n writer.writeStartElement(undefined, 'sdtPr', this.wNamespace);\n if (!isNullOrUndefined(contentControlItem)) {\n this.serializeContentProperties(writer, contentControlItem, item, isLastSection, inlines);\n }\n };\n // serialize Content Control Properties\n /* eslint-disable-next-line max-len */\n WordExport.prototype.serializeContentProperties = function (writer, contentProperties, items, isLastSection, inlines) {\n var repeatSdt = undefined;\n if (!isNullOrUndefined(contentProperties[titleProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'alias', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, contentProperties[titleProperty[this.keywordIndex]]);\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'tag', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, contentProperties[tagProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[characterFormatProperty[this.keywordIndex]])) {\n this.serializeCharacterFormat(writer, items[contentControlPropertiesProperty[this.keywordIndex]][characterFormatProperty[this.keywordIndex]]);\n }\n // if (items.hasOwnProperty('blocks') && contentProperties.type !== 'CheckBox') {\n // this.serializeContentParagraph(writer, items);\n // }\n if (HelperMethods.parseBoolValue(contentProperties[lockContentsProperty[this.keywordIndex]])\n || HelperMethods.parseBoolValue(contentProperties[lockContentControlProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'lock', this.wNamespace);\n if (HelperMethods.parseBoolValue(contentProperties[lockContentControlProperty[this.keywordIndex]])\n && HelperMethods.parseBoolValue(contentProperties[lockContentsProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'sdtContentLocked');\n }\n else if (HelperMethods.parseBoolValue(contentProperties[lockContentControlProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'sdtLocked');\n }\n else if (HelperMethods.parseBoolValue(contentProperties[lockContentsProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'contentLocked');\n }\n writer.writeEndElement();\n }\n if (HelperMethods.parseBoolValue(contentProperties[hasPlaceHolderTextProperty[this.keywordIndex]])\n && isNullOrUndefined(repeatSdt)) {\n writer.writeStartElement('w', 'placeholder', undefined);\n writer.writeAttributeString('w', 'docPart', this.wNamespace, undefined);\n writer.writeEndElement();\n writer.writeStartElement('w', 'showingPlcHdr', undefined);\n writer.writeEndElement();\n }\n if (HelperMethods.parseBoolValue(contentProperties[isTemporaryProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'temporary', undefined);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[appearanceProperty[this.keywordIndex]])) {\n writer.writeStartElement('w15', 'appearance', undefined);\n writer.writeAttributeString('w15', 'val', undefined, this.keywordIndex === 1 ? this.getContentControlAppearance(contentProperties[appearanceProperty[this.keywordIndex]]).toLowerCase() : contentProperties[appearanceProperty[this.keywordIndex]].toLowerCase());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[colorProperty[this.keywordIndex]])) {\n writer.writeStartElement('w15', 'color', undefined);\n if (contentProperties[colorProperty[this.keywordIndex]] === 'empty' || contentProperties[colorProperty[this.keywordIndex]] === '#00000000') {\n writer.writeAttributeString('w', 'val', undefined, 'auto');\n }\n else {\n writer.writeAttributeString('w', 'val', undefined, this.getColor(contentProperties[colorProperty[this.keywordIndex]]));\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[typeProperty[this.keywordIndex]]) && (contentProperties[typeProperty[this.keywordIndex]] === (this.keywordIndex === 1 ? 9 : 'Text'))) {\n writer.writeStartElement(undefined, 'text', this.wNamespace);\n writer.writeEndElement();\n }\n if (HelperMethods.parseBoolValue(contentProperties[multiLineProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'text', this.wNamespace);\n writer.writeAttributeString('w', 'multiLine', this.wNamespace, '1');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[xmlMappingProperty[this.keywordIndex]])) {\n if (HelperMethods.parseBoolValue(contentProperties[xmlMappingProperty[this.keywordIndex]][isMappedProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'dataBinding', this.wNamespace);\n writer.writeAttributeString('w', 'xpath', undefined, contentProperties[xmlMappingProperty[this.keywordIndex]][xPathProperty[this.keywordIndex]]);\n writer.writeAttributeString('w', 'storeItemID', undefined, contentProperties[xmlMappingProperty[this.keywordIndex]][storeItemIdProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n }\n if (contentProperties.picture) {\n writer.writeStartElement('w', 'picture', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[uncheckedStateProperty[this.keywordIndex]]\n || contentProperties[checkedStateProperty[this.keywordIndex]])) {\n writer.writeStartElement('w14', 'checkbox', undefined);\n if (HelperMethods.parseBoolValue(contentProperties[isCheckedProperty[this.keywordIndex]])) {\n writer.writeStartElement('w14', 'checked', undefined);\n writer.writeAttributeString('w14', 'val', undefined, '1');\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement('w14', 'checked', undefined);\n writer.writeAttributeString('w14', 'val', undefined, '0');\n writer.writeEndElement();\n }\n if (contentProperties[uncheckedStateProperty[this.keywordIndex]]) {\n writer.writeStartElement('w14', 'uncheckedState', undefined);\n writer.writeAttributeString('w14', 'val', undefined, this.toUnicode(contentProperties[uncheckedStateProperty[this.keywordIndex]][valueProperty[this.keywordIndex]]));\n writer.writeAttributeString('w14', 'font', undefined, (contentProperties[uncheckedStateProperty[this.keywordIndex]][fontProperty[this.keywordIndex]]));\n writer.writeEndElement();\n }\n if (contentProperties[checkedStateProperty[this.keywordIndex]]) {\n writer.writeStartElement('w14', 'checkedState', undefined);\n writer.writeAttributeString('w14', 'val', undefined, this.toUnicode(contentProperties[checkedStateProperty[this.keywordIndex]][valueProperty[this.keywordIndex]]));\n writer.writeAttributeString('w14', 'font', undefined, contentProperties[checkedStateProperty[this.keywordIndex]][fontProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[contentControlListItemsProperty[this.keywordIndex]])\n && contentProperties[typeProperty[this.keywordIndex]] === (this.keywordIndex === 1 ? 5 : 'DropDownList')) {\n var dropDownLists = contentProperties[contentControlListItemsProperty[this.keywordIndex]];\n writer.writeStartElement(undefined, 'dropDownList', this.wNamespace);\n this.serializeContentControlList(writer, dropDownLists);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[contentControlListItemsProperty[this.keywordIndex]])\n && contentProperties[typeProperty[this.keywordIndex]] === (this.keywordIndex === 1 ? 3 : 'ComboBox')) {\n var comboList = contentProperties[contentControlListItemsProperty[this.keywordIndex]];\n writer.writeStartElement(undefined, 'comboBox', this.wNamespace);\n this.serializeContentControlList(writer, comboList);\n writer.writeEndElement();\n }\n this.serializeContentControlDate(writer, contentProperties);\n if (!isNullOrUndefined(contentProperties[typeProperty[this.keywordIndex]])) {\n if (contentProperties[typeProperty[this.keywordIndex]] === (this.keywordIndex === 1 ? 7 : 'Picture')) {\n writer.writeStartElement(undefined, 'picture', this.wNamespace);\n writer.writeEndElement();\n }\n }\n writer.writeEndElement();\n writer.writeStartElement('w', 'sdtContent', this.wNamespace);\n if (inlines) {\n return;\n }\n /* eslint-disable */\n if (items.hasOwnProperty(blocksProperty[this.keywordIndex]) && (isNullOrUndefined(items[cellFormatProperty[this.keywordIndex]]))) {\n for (var i = 0; i < items[blocksProperty[this.keywordIndex]].length; i++) {\n var block = items[blocksProperty[this.keywordIndex]][i];\n if (block.hasOwnProperty(inlinesProperty[this.keywordIndex])) {\n this.paragraph = block;\n this.serializeParagraph(writer, block, isLastSection);\n this.paragraph = undefined;\n }\n else if (block.hasOwnProperty(rowFormatProperty[this.keywordIndex])) {\n var mVerticalMerge = new Dictionary();\n this.serializeRow(writer, block, mVerticalMerge);\n }\n else if (block.hasOwnProperty(contentControlPropertiesProperty[this.keywordIndex])) {\n this.serializeContentControl(writer, block[contentControlPropertiesProperty[this.keywordIndex]], block, isLastSection);\n }\n else {\n var table = block;\n this.serializeTable(writer, table);\n }\n }\n }\n else if (items.hasOwnProperty(rowFormatProperty[this.keywordIndex])) {\n if (items[cellsProperty[this.keywordIndex]].length > 0) {\n var mVerticalMerge = new Dictionary();\n this.serializeRow(writer, items, mVerticalMerge);\n }\n }\n else if (items.hasOwnProperty(cellFormatProperty[this.keywordIndex])) {\n var mVerticalMerge = new Dictionary();\n this.serializeCell(writer, items, mVerticalMerge);\n }\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.toUnicode = function (code) {\n var charCode = code.charCodeAt(0);\n return charCode.toString(16);\n };\n //serialize dropdown and list property\n WordExport.prototype.serializeContentControlList = function (writer, lists) {\n for (var i = 0; i < lists.length; i++) {\n writer.writeStartElement(undefined, 'listItem', this.wNamespace);\n if (!isNullOrUndefined(lists[i][displayTextProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'displayText', this.wNamespace, lists[i][displayTextProperty[this.keywordIndex]]);\n }\n writer.writeAttributeString('w', 'value', this.wNamespace, lists[i][valueProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n };\n //Serialize character formatfor content control\n WordExport.prototype.serializeContentParagraph = function (writer, items) {\n for (var i = 0; i < items[blocksProperty[this.keywordIndex]].length; i++) {\n var blocks = items[blocksProperty[this.keywordIndex]][i];\n if (blocks.hasOwnProperty(inlinesProperty[this.keywordIndex])) {\n for (var j = 0; j < blocks[inlinesProperty[this.keywordIndex]].length; j++) {\n var inlines = blocks[inlinesProperty[this.keywordIndex]][j];\n if (!isNullOrUndefined(inlines[characterFormatProperty[this.keywordIndex]])) {\n this.serializeCharacterFormat(writer, inlines[characterFormatProperty[this.keywordIndex]]);\n }\n }\n }\n }\n };\n // serialize content control date property\n WordExport.prototype.serializeContentControlDate = function (writer, contentProperties) {\n if (contentProperties[typeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 4 : 'Date')) {\n writer.writeStartElement('w', 'date', this.wNamespace);\n if (!isNullOrUndefined(contentProperties[dateCalendarTypeProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'calender', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.keywordIndex == 1 ? this.getDateCalendarType(contentProperties[dateCalendarTypeProperty[this.keywordIndex]]) : contentProperties[dateCalendarTypeProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[dateDisplayLocaleProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'lid', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties[dateDisplayLocaleProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[dateStorageFormatProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'storeMappedDataAs', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.keywordIndex == 1 ? this.getDateStorageFormat(contentProperties[dateStorageFormatProperty[this.keywordIndex]]) : contentProperties[dateStorageFormatProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(contentProperties[dateDisplayFormatProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'dateFormat', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, contentProperties[dateDisplayFormatProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // Serialize the TextBody item\n WordExport.prototype.serializeBodyItem = function (writer, item, isLastSection) {\n if (isNullOrUndefined(item)) {\n throw new Error('BodyItem should not be undefined');\n }\n if (item.hasOwnProperty(contentControlPropertiesProperty[this.keywordIndex])) {\n this.serializeContentControl(writer, item[contentControlPropertiesProperty[this.keywordIndex]], item, isLastSection);\n }\n else if (item.hasOwnProperty(inlinesProperty[this.keywordIndex])) {\n this.paragraph = item;\n this.serializeParagraph(writer, item, isLastSection);\n this.paragraph = undefined;\n }\n else {\n var table = item;\n for (var i = 0; i < table[rowsProperty[this.keywordIndex]].length; i++) {\n if (table[rowsProperty[this.keywordIndex]][i][cellsProperty[this.keywordIndex]].length > 0) {\n this.serializeTable(writer, table);\n break;\n }\n }\n var sec = this.blockOwner;\n //Need to write the Section Properties if the Table is last item in the section\n if (!isLastSection && sec.hasOwnProperty(sectionFormatProperty[this.keywordIndex])\n && sec[blocksProperty[this.keywordIndex]].indexOf(table) === sec[blocksProperty[this.keywordIndex]].length - 1) {\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeSectionProperties(writer, sec);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n }\n };\n // Serialize the paragraph\n WordExport.prototype.serializeParagraph = function (writer, paragraph, isLastSection) {\n if (isNullOrUndefined(paragraph)) {\n throw new Error('Paragraph should not be undefined');\n }\n // if (paragraph.ParagraphFormat.PageBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.PageBreak);\n // if (paragraph.ParagraphFormat.ColumnBreakAfter && !IsPageBreakNeedToBeSkipped(paragraph as Entity))\n // paragraph.InsertBreak(BreakType.ColumnBreak);\n //Splits the paragraph based on the newline character\n // paragraph.SplitTextRange();\n if (!isNullOrUndefined(this.document.optimizeSfdt)) {\n this.keywordIndex = this.document.optimizeSfdt ? 1 : 0;\n }\n writer.writeStartElement('w', 'p', this.wNamespace);\n if (this.isInsideComment) {\n writer.writeAttributeString('w14', 'paraId', undefined, this.commentParaID.toString());\n }\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n if (!isNullOrUndefined(paragraph[paragraphFormatProperty[this.keywordIndex]])) {\n this.serializeParagraphFormat(writer, paragraph[paragraphFormatProperty[this.keywordIndex]], paragraph);\n }\n if (!isNullOrUndefined(paragraph[characterFormatProperty[this.keywordIndex]])) {\n this.serializeCharacterFormat(writer, paragraph[characterFormatProperty[this.keywordIndex]]);\n }\n var sec = this.blockOwner;\n //Need to write the Section Properties if the Paragraph is last item in the section\n if (!isLastSection && sec.hasOwnProperty(sectionFormatProperty[this.keywordIndex])\n && sec[blocksProperty[this.keywordIndex]].indexOf(paragraph) === sec[blocksProperty[this.keywordIndex]].length - 1) {\n this.serializeSectionProperties(writer, sec);\n }\n writer.writeEndElement(); //end of pPr\n // Serialize watermark if paragraph is the first item of Header document.\n // EnsureWatermark(paragraph);\n this.prevRevisionIds = [];\n this.serializeParagraphItems(writer, paragraph[inlinesProperty[this.keywordIndex]]);\n if (!this.isBookmarkAtEnd && !this.isBookmarkAtRowEnd) {\n writer.writeEndElement(); //end of paragraph tag.\n }\n this.isBookmarkAtEnd = false;\n };\n //Serialize Revision start\n WordExport.prototype.serializeRevisionStart = function (writer, item, previousNode) {\n if (item.hasOwnProperty(revisionIdsProperty[this.keywordIndex])) {\n if (!isNullOrUndefined(previousNode) && previousNode.hasOwnProperty(bookmarkTypeProperty[this.keywordIndex]) && (previousNode[bookmarkTypeProperty[this.keywordIndex]] === 0 && !(previousNode[nameProperty[this.keywordIndex]].indexOf('_Toc') >= 0) && isNullOrUndefined(item[revisionIdsProperty[this.keywordIndex]]))) {\n return;\n }\n var ids = item[revisionIdsProperty[this.keywordIndex]];\n for (var i = 0; i < ids.length; i++) {\n var revision = this.retrieveRevision(ids[i]);\n if (revision.revisionType === 'Insertion') {\n this.serializeTrackChanges(writer, 'ins', revision.author, revision.date);\n }\n if (revision.revisionType === 'Deletion') {\n this.serializeTrackChanges(writer, 'del', revision.author, revision.date);\n }\n }\n }\n };\n //Serialize track changes\n WordExport.prototype.serializeTrackChanges = function (writer, type, author, date) {\n writer.writeStartElement('w', type, this.wNamespace);\n writer.writeAttributeString('w', 'id', this.wNamespace, (this.trackChangesId++).toString());\n if (author != \"Unknown\") {\n writer.writeAttributeString('w', 'author', this.wNamespace, author);\n }\n writer.writeAttributeString('w', 'date', this.wNamespace, date);\n };\n WordExport.prototype.retrieveRevision = function (id) {\n var matchedRevisions = [];\n for (var i = 0; i < this.revisions.length; i++) {\n if (this.revisions[i].revisionID === id) {\n return this.revisions[i];\n }\n }\n return undefined;\n };\n // Serialize the paragraph items\n WordExport.prototype.serializeParagraphItems = function (writer, paraItems, keyindex) {\n if (isNullOrUndefined(paraItems)) {\n throw new Error('Paragraph should not be undefined');\n }\n var inlines;\n var previousNode = undefined;\n var isContinueOverride = false;\n if (isNullOrUndefined(this.keywordIndex)) {\n this.keywordIndex = keyindex;\n }\n for (var i = 0; i < paraItems.length; i++) {\n var item = paraItems[i];\n if (item.hasOwnProperty(contentControlPropertiesProperty[this.keywordIndex])) {\n inlines = true;\n this.serializeContentControl(writer, item[contentControlPropertiesProperty[this.keywordIndex]], item, undefined, inlines);\n this.serializeParagraphItems(writer, item[inlinesProperty[this.keywordIndex]]);\n }\n if (item.hasOwnProperty(inlinesProperty[this.keywordIndex])) {\n this.serializeParagraphItems(writer, item);\n }\n this.serializeRevisionStart(writer, item, previousNode);\n var isBdo = false;\n if (item[characterFormatProperty[this.keywordIndex]]) {\n isBdo = !isNullOrUndefined(item[characterFormatProperty[this.keywordIndex]][bdoProperty[this.keywordIndex]]) && item[characterFormatProperty[this.keywordIndex]][bdoProperty[this.keywordIndex]] !== 0;\n if (isBdo && !isContinueOverride) {\n this.serializeBiDirectionalOverride(writer, item[characterFormatProperty[this.keywordIndex]]);\n isContinueOverride = true;\n }\n }\n if (isContinueOverride && !isBdo) {\n writer.writeEndElement();\n isContinueOverride = false;\n }\n if (item.hasOwnProperty(fieldTypeProperty[this.keywordIndex])) {\n this.serializeFieldCharacter(writer, item);\n }\n else if (item.hasOwnProperty(imageStringProperty[this.keywordIndex])) {\n this.serializePicture(writer, item);\n }\n else if (item.hasOwnProperty(shapeIdProperty[this.keywordIndex])) {\n var currentParargaph = this.paragraph;\n this.serializeShape(writer, item);\n this.paragraph = currentParargaph;\n }\n else if (item.hasOwnProperty(bookmarkTypeProperty[this.keywordIndex])) {\n this.serializeBookMark(writer, item);\n }\n else if (item.hasOwnProperty(editRangeIdProperty[this.keywordIndex])) {\n this.serializeEditRange(writer, item);\n }\n else if (item.hasOwnProperty(chartTypeProperty[this.keywordIndex])) {\n this.chart = item;\n this.serializeChart(writer, item);\n // chart.xml\n this.serializeChartStructure();\n }\n else if (item.hasOwnProperty(commentCharacterTypeProperty[this.keywordIndex])) {\n this.serializeComment(writer, item);\n }\n else if (item.hasOwnProperty(footnoteTypeProperty[this.keywordIndex])) {\n this.serializeEFReference(writer, item);\n }\n else {\n this.serializeTextRange(writer, item, previousNode);\n }\n //Serialize revision end\n this.serializeRevisionEnd(writer, item, previousNode);\n previousNode = item;\n if (inlines) {\n writer.writeEndElement();\n writer.writeEndElement();\n inlines = false;\n }\n }\n if (isContinueOverride) {\n writer.writeEndElement();\n }\n };\n WordExport.prototype.serializeEFReference = function (writer, item) {\n var efId = '';\n var ef = item[blocksProperty[this.keywordIndex]];\n if (item[footnoteTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Footnote')) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, item[characterFormatProperty[this.keywordIndex]]);\n writer.writeStartElement(undefined, 'footnoteReference', this.wNamespace);\n if (this.document[footnotesProperty[this.keywordIndex]][continuationNoticeProperty[this.keywordIndex]] && this.efRelationShipId === 0) {\n this.efRelationShipId = 1;\n }\n efId = this.getEFNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.wNamespace, efId);\n this.addFootnotesEndnotes(ef, 'footnote', efId);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, item[characterFormatProperty[this.keywordIndex]]);\n writer.writeStartElement(undefined, 'endnoteReference', this.wNamespace);\n efId = this.getEFNextRelationShipID();\n writer.writeAttributeString(undefined, 'id', this.wNamespace, efId);\n this.addFootnotesEndnotes(ef, 'endnote', efId);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n WordExport.prototype.addFootnotesEndnotes = function (ef, efType, id) {\n var efColl = new Dictionary();\n this.endnotesFootnotes.add(efType, efColl);\n this.endnotesFootnotes.get(efType).add(id, ef);\n };\n WordExport.prototype.serializeEndnotesFootnote = function (writer, efType) {\n if (this.endnotesFootnotes.length === 0) {\n return;\n }\n var endnoteFootnotePath;\n var endnoteFootnoteRelsPath;\n if (!this.endnotesFootnotes.containsKey(efType)) {\n return;\n }\n var efColl = this.endnotesFootnotes.get(efType);\n var ef = undefined;\n for (var i = 0; i < efColl.keys.length; i++) {\n var id = efColl.keys[i];\n ef = efColl.get(id);\n if (efType === 'endnote') {\n endnoteFootnotePath = this.endnotesPath;\n endnoteFootnoteRelsPath = this.endnotesRelationPath;\n this.serializeInlineEndnotes(writer, ef, id);\n }\n else {\n endnoteFootnotePath = this.footnotesPath;\n endnoteFootnoteRelsPath = this.footnotesRelationPath;\n this.serializeInlineFootnotes(writer, ef, id);\n }\n }\n };\n WordExport.prototype.serializeInlineEndnotes = function (writer, endNote, id) {\n this.isSerializeFootEndNote = \"Endnote\";\n this.endNoteFootnote = endNote;\n var owner = this.blockOwner;\n this.blockOwner = endNote;\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, id);\n this.serializeBodyItems(writer, endNote, true);\n writer.writeEndElement();\n this.blockOwner = owner;\n this.endNoteFootnote = undefined;\n this.isSerializeFootEndNote = undefined;\n };\n WordExport.prototype.serializeInlineFootnotes = function (writer, footNote, id) {\n this.isSerializeFootEndNote = \"Footnote\";\n this.endNoteFootnote = footNote;\n var owner = this.blockOwner;\n this.blockOwner = footNote;\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, id);\n this.serializeBodyItems(writer, footNote, true);\n writer.writeEndElement();\n this.blockOwner = owner;\n this.endNoteFootnote = undefined;\n this.isSerializeFootEndNote = undefined;\n };\n // private footnoteXMLItem(fileIndex: number): any {\n // let writer = new XmlWriter;\n // writer.writeStartElement(undefined, 'Sources', this.wNamespace)\n // writer.writeAttributeString('xmlns', 'b', undefined, 'http://schemas.openxmlformats.org/officeDocument/2006/bibliography')\n // writer.writeAttributeString(undefined,'xmlns', undefined, 'http://schemas.openxmlformats.org/officeDocument/2006/bibliography')\n // writer.writeAttributeString(undefined,'SelectedStyle', undefined,\"\\APASixthEditionOfficeOnline.xsl\")\n // writer.writeAttributeString(undefined,'StyleName', undefined,\"APA\")\n // writer.writeAttributeString(undefined,'Version', undefined,\"6\")\n // writer.writeEndElement();\n // let itemPath: string = this.customXMLItemsPath + fileIndex + '.xml';\n // let zipArchiveItem: ZipArchiveItem = new ZipArchiveItem(writer.buffer, itemPath);\n // this.mArchive.addItem(zipArchiveItem);\n // return itemPath;\n // }\n // private footnoteXMLItemProps(itemID: string, fileIndex: number): any {\n // let writer: XmlWriter = new XmlWriter();\n // let customitemPropsPath: string = this.customXMLItemsPropspath + fileIndex + '.xml';\n // let itemPropsPath: string = this.itemPropsPath + fileIndex + '.xml';\n // writer.writeStartElement('ds', 'datastoreItem', this.wNamespace);\n // writer.writeAttributeString('ds', 'itemID', undefined, itemID);\n // writer.writeAttributeString('xmlns', 'ds', undefined, this.dsNamespace);\n // writer.writeStartElement('ds','schemaRefs', this.wNamespace);\n // writer.writeStartElement('ds', 'schemaRef', this.wNamespace);\n // writer.writeAttributeString('ds','uri', undefined,'http://schemas.openxmlformats.org/officeDocument/2006/bibliography' )\n // writer.writeEndElement();\n // writer.writeEndElement();\n // writer.writeEndElement();\n // this.customXMLProps.push(customitemPropsPath);\n // let zipArchiveItem: ZipArchiveItem = new ZipArchiveItem(writer.buffer, customitemPropsPath);\n // this.mArchive.addItem(zipArchiveItem);\n // return itemPropsPath;\n // }\n //Serialize the Footnote Endnotes Common Atributes\n WordExport.prototype.writeEFCommonAttributes = function (writer) {\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'cx', undefined, this.cxNamespace);\n writer.writeAttributeString('xmlns', 'aink', undefined, 'http://schemas.microsoft.com/office/drawing/2016/ink');\n writer.writeAttributeString('xmlns', 'am3d', undefined, 'http://schemas.microsoft.com/office/drawing/2017/,odel3d');\n this.writeCustom(writer);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n };\n WordExport.prototype.serializeFootnotes = function () {\n if (isNullOrUndefined(this.document[footnotesProperty[this.keywordIndex]])) {\n return;\n }\n else {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'footnotes', this.wNamespace);\n this.writeEFCommonAttributes(writer);\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'separator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n this.serializeBodyItems(writer, this.document[footnotesProperty[this.keywordIndex]][separatorProperty[this.keywordIndex]], true);\n writer.writeEndElement();\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationSeparator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n this.serializeBodyItems(writer, this.document[footnotesProperty[this.keywordIndex]][continuationSeparatorProperty[this.keywordIndex]], true);\n writer.writeEndElement();\n if (this.document[footnotesProperty[this.keywordIndex]][continuationNoticeProperty[this.keywordIndex]]) {\n writer.writeStartElement('w', 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationNotice');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '1');\n this.serializeBodyItems(writer, this.document[footnotesProperty[this.keywordIndex]][continuationNoticeProperty[this.keywordIndex]], true);\n writer.writeEndElement();\n }\n this.serializeEndnotesFootnote(writer, 'footnote');\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.footnotesPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n };\n WordExport.prototype.serializeEndnotes = function () {\n if (isNullOrUndefined(this.document[endnotesProperty[this.keywordIndex]])) {\n return;\n }\n else {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'endnotes', this.wNamespace);\n this.writeEFCommonAttributes(writer);\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'separator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n this.serializeBodyItems(writer, this.document[endnotesProperty[this.keywordIndex]][separatorProperty[this.keywordIndex]], true);\n writer.writeEndElement();\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationSeparator');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n this.serializeBodyItems(writer, this.document[endnotesProperty[this.keywordIndex]][continuationSeparatorProperty[this.keywordIndex]], true);\n writer.writeEndElement();\n if (this.document[endnotesProperty[this.keywordIndex]][continuationNoticeProperty[this.keywordIndex]]) {\n writer.writeStartElement('w', 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'continuationNotice');\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '1');\n this.serializeBodyItems(writer, this.document[endnotesProperty[this.keywordIndex]][continuationNoticeProperty[this.keywordIndex]], true);\n writer.writeEndElement();\n }\n this.serializeEndnotesFootnote(writer, 'endnote');\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.endnotesPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n };\n //Serialize Revision end\n WordExport.prototype.serializeRevisionEnd = function (writer, item, previousNode) {\n if (item.hasOwnProperty(revisionIdsProperty[this.keywordIndex])) {\n if (!isNullOrUndefined(previousNode) && previousNode.hasOwnProperty(fieldTypeProperty[this.keywordIndex]) && (previousNode[fieldTypeProperty[this.keywordIndex]] === 0 && item[textProperty[this.keywordIndex]].indexOf('TOC') >= 0)) {\n return;\n }\n for (var i = 0; i < item[revisionIdsProperty[this.keywordIndex]].length; i++) {\n var revision = this.retrieveRevision(item[revisionIdsProperty[this.keywordIndex]][i]);\n if (revision.revisionType === 'Insertion' || revision.revisionType === 'Deletion') {\n writer.writeEndElement();\n }\n }\n }\n };\n // Serialize the comment\n WordExport.prototype.serializeComment = function (writer, comment) {\n if (!(this.mComments.length === 1 && this.mComments[0].text === '')) {\n if (comment[commentCharacterTypeProperty[this.keywordIndex]] === 0) {\n writer.writeStartElement('w', 'commentRangeStart', this.wNamespace);\n }\n else if (comment[commentCharacterTypeProperty[this.keywordIndex]] === 1) {\n writer.writeStartElement('w', 'commentRangeEnd', this.wNamespace);\n }\n var commentId = this.commentId[comment[commentIdProperty[this.keywordIndex]]];\n if (isNullOrUndefined(commentId)) {\n commentId = this.commentId[comment[commentIdProperty[this.keywordIndex]]] = this.currentCommentId++;\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, commentId.toString());\n writer.writeEndElement();\n if (comment[commentCharacterTypeProperty[this.keywordIndex]] === 1) {\n this.serializeCommentItems(writer, commentId);\n }\n }\n };\n WordExport.prototype.serializeCommentItems = function (writer, commentId) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n writer.writeStartElement('w', 'commentReference', this.wNamespace);\n writer.writeAttributeString('w', 'id', this.wNamespace, commentId.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeBiDirectionalOverride = function (writer, characterFormat) {\n writer.writeStartElement(undefined, 'bdo', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.keywordIndex == 1 ? this.getBiDirectionalOverride(characterFormat[bdoProperty[this.keywordIndex]]).toLowerCase() : characterFormat[bdoProperty[this.keywordIndex]].toLowerCase());\n };\n // Serialize Document Protection\n //\n WordExport.prototype.serializeEditRange = function (writer, editElement) {\n if (editElement.hasOwnProperty(editableRangeStartProperty[this.keywordIndex])) {\n writer.writeStartElement('w', 'permEnd', this.wNamespace);\n }\n else {\n writer.writeStartElement('w', 'permStart', this.wNamespace);\n if (editElement[userProperty[this.keywordIndex]] && editElement[userProperty[this.keywordIndex]] !== '') {\n writer.writeAttributeString('w', 'ed', this.wNamespace, editElement[userProperty[this.keywordIndex]]);\n }\n if (editElement[groupProperty[this.keywordIndex]] && editElement[groupProperty[this.keywordIndex]] !== '') {\n writer.writeAttributeString('w', 'edGrp', this.wNamespace, editElement[groupProperty[this.keywordIndex]].toLowerCase());\n }\n if (editElement[columnFirstProperty[this.keywordIndex]] && editElement[columnFirstProperty[this.keywordIndex]] !== -1) {\n writer.writeAttributeString('w', 'colFirst', this.wNamespace, editElement[columnFirstProperty[this.keywordIndex]].toString());\n }\n if (editElement[columnLastProperty[this.keywordIndex]] && editElement[columnLastProperty[this.keywordIndex]] !== -1) {\n writer.writeAttributeString('w', 'colLast', this.wNamespace, editElement[columnLastProperty[this.keywordIndex]].toString());\n }\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, editElement[editRangeIdProperty[this.keywordIndex]]);\n writer.writeEndElement();\n };\n // Serialize the book mark\n WordExport.prototype.serializeBookMark = function (writer, bookmark) {\n var bookmarkId = this.getBookmarkId(bookmark[nameProperty[this.keywordIndex]]);\n var bookmarkName = bookmark[nameProperty[this.keywordIndex]];\n if (bookmark[bookmarkTypeProperty[this.keywordIndex]] === 0) {\n writer.writeStartElement('w', 'bookmarkStart', this.wNamespace);\n writer.writeAttributeString('w', 'name', this.wNamespace, bookmarkName);\n if (!isNullOrUndefined(bookmark[propertiesProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'colFirst', this.wNamespace, bookmark[propertiesProperty[this.keywordIndex]][columnFirstProperty[this.keywordIndex]].toString());\n writer.writeAttributeString('w', 'colLast', this.wNamespace, bookmark[propertiesProperty[this.keywordIndex]][columnLastProperty[this.keywordIndex]].toString());\n }\n }\n else if (bookmark[bookmarkTypeProperty[this.keywordIndex]] === 1) {\n if (!isNullOrUndefined(bookmark[propertiesProperty[this.keywordIndex]]) && !this.isBookmarkAtEnd && !this.isBookmarkAtRowEnd) {\n if (HelperMethods.parseBoolValue(bookmark[propertiesProperty[this.keywordIndex]][isAfterParagraphMarkProperty[this.keywordIndex]])) {\n writer.writeEndElement();\n this.isBookmarkAtEnd = true;\n }\n else if (HelperMethods.parseBoolValue(bookmark[propertiesProperty[this.keywordIndex]][isAfterRowMarkProperty[this.keywordIndex]])) {\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n this.isBookmarkAtRowEnd = true;\n }\n }\n writer.writeStartElement('w', 'bookmarkEnd', this.wNamespace);\n }\n writer.writeAttributeString('w', 'id', this.wNamespace, bookmarkId.toString());\n writer.writeEndElement();\n };\n WordExport.prototype.getBookmarkId = function (name) {\n var index = this.bookmarks.indexOf(name);\n if (index < 0) {\n index = this.bookmarks.length;\n this.bookmarks.push(name);\n }\n return index;\n };\n // Serialize the picture.\n WordExport.prototype.serializePicture = function (writer, image) {\n if (image[widthProperty[this.keywordIndex]] >= 0 && image[heightProperty[this.keywordIndex]] >= 0) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, image[characterFormatProperty[this.keywordIndex]]);\n this.serializeDrawing(writer, image);\n writer.writeEndElement(); //end of run element\n }\n };\n WordExport.prototype.serializeShape = function (writer, item) {\n if (item[widthProperty[this.keywordIndex]] >= 0 && item[heightProperty[this.keywordIndex]] >= 0) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, item[characterFormatProperty[this.keywordIndex]]);\n if (item[horizontalRuleProperty[this.keywordIndex]] > 0) {\n this.serializeHorizontalRule(writer, item);\n }\n else {\n this.serializeDrawing(writer, item);\n }\n writer.writeEndElement(); //end of run element\n }\n };\n WordExport.prototype.serializeHorizontalRule = function (writer, shape) {\n writer.writeStartElement(undefined, 'pict', this.wNamespace);\n writer.writeStartElement('v', 'rect', undefined);\n var cx = Math.round(shape[widthProperty[this.keywordIndex]]);\n var cy = Math.round(shape[heightProperty[this.keywordIndex]]);\n writer.writeAttributeString(undefined, 'style', undefined, 'width:' + cx.toString() + ';height:' + cy.toString());\n if (shape[horizontalAlignmentProperty[this.keywordIndex]] > 0) {\n var horAlig = this.keywordIndex == 1 ? this.getShapeHorizontalAlignment(shape[horizontalAlignmentProperty[this.keywordIndex]]) : shape[horizontalAlignmentProperty[this.keywordIndex]].toString();\n writer.writeAttributeString('o', 'hralign', undefined, horAlig.toLowerCase());\n }\n writer.writeAttributeString('o', 'hrstd', undefined, 't');\n writer.writeAttributeString('o', 'hr', undefined, 't');\n writer.writeAttributeString(undefined, 'fillcolor', undefined, this.getColor(shape[fillFormatProperty[this.keywordIndex]][colorProperty[this.keywordIndex]]));\n writer.writeAttributeString(undefined, 'stroked', undefined, 'f');\n writer.writeEndElement();\n writer.writeEndElement();\n };\n // Serialize the drawing element.\n WordExport.prototype.serializeDrawing = function (writer, draw) {\n writer.writeStartElement(undefined, 'drawing', this.wNamespace);\n if (draw.hasOwnProperty(chartTypeProperty[this.keywordIndex])) {\n this.serializeInlineCharts(writer, draw);\n }\n else {\n if (draw[textWrappingStyleProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Inline')) {\n this.serializeInlinePictureAndShape(writer, draw);\n }\n else {\n this.serializeWrappingPictureAndShape(writer, draw);\n }\n }\n writer.writeEndElement();\n };\n // Serialize the Other Wrapping picture & Shape.\n WordExport.prototype.serializeWrappingPictureAndShape = function (writer, picture) {\n if (!isNullOrUndefined(this.document.optimizeSfdt)) {\n this.keywordIndex = this.document.optimizeSfdt ? 1 : 0;\n }\n writer.writeStartElement('wp', 'anchor', this.wpNamespace);\n this.serializePictureAndShapeDistance(writer, picture);\n writer.writeAttributeString(undefined, 'simplePos', undefined, '0');\n writer.writeAttributeString(undefined, 'relativeHeight', undefined, picture[zOrderPositionProperty[this.keywordIndex]] ? Math.abs(picture[zOrderPositionProperty[this.keywordIndex]]).toString() : '0');\n var behindText = (picture[textWrappingStyleProperty[this.keywordIndex]] && picture[textWrappingStyleProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 4 : 'Behind'));\n writer.writeAttributeString(undefined, 'behindDoc', undefined, behindText ? '1' : '0');\n // LockAnchor & LayoutInCell & AllowOverlap in these boolean has 0 and 1 as values.If the value is null or undefined then set the default value as 0.\n var lockAnchor = this.keywordIndex == 1 ? !isNullOrUndefined(picture[lockAnchorProperty[this.keywordIndex]]) ? picture[lockAnchorProperty[this.keywordIndex]].toString() : '0' : (picture[lockAnchorProperty[this.keywordIndex]]) ? '1' : '0';\n writer.writeAttributeString(undefined, 'locked', undefined, lockAnchor);\n var layoutcell = this.keywordIndex == 1 ? !isNullOrUndefined(picture[layoutInCellProperty[this.keywordIndex]]) ? picture[layoutInCellProperty[this.keywordIndex]].toString() : '0' : (picture[layoutInCellProperty[this.keywordIndex]]) ? '1' : '0';\n writer.writeAttributeString(undefined, 'layoutInCell', undefined, layoutcell);\n var allowOverlap = this.keywordIndex == 1 ? !isNullOrUndefined(picture[allowOverlapProperty[this.keywordIndex]]) ? picture[allowOverlapProperty[this.keywordIndex]].toString() : '0' : (picture[allowOverlapProperty[this.keywordIndex]]) ? '1' : '0';\n writer.writeAttributeString(undefined, 'allowOverlap', undefined, allowOverlap);\n writer.writeStartElement('wp', 'simplePos', this.wpNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('wp', 'positionH', this.wpNamespace);\n var horizontalOrigin = this.keywordIndex == 1 ? this.getHorizontalOrigin(picture[horizontalOriginProperty[this.keywordIndex]]) : picture[horizontalOriginProperty[this.keywordIndex]].toString();\n writer.writeAttributeString(undefined, 'relativeFrom', undefined, HelperMethods.formatText(\"firstlower\", horizontalOrigin));\n if (picture[horizontalAlignmentProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'None')) {\n writer.writeStartElement('wp', 'posOffset', this.wpNamespace);\n var horPos = Math.round(picture[horizontalPositionProperty[this.keywordIndex]] * this.emusPerPoint);\n writer.writeString(horPos.toString());\n writer.writeEndElement(); //end of posOffset\n }\n else {\n writer.writeStartElement('wp', 'align', this.wpNamespace);\n var horAlig = this.keywordIndex == 1 ? this.getShapeHorizontalAlignment(picture[horizontalAlignmentProperty[this.keywordIndex]]) : picture[horizontalAlignmentProperty[this.keywordIndex]].toString();\n writer.writeString(horAlig.toLowerCase());\n writer.writeEndElement(); //end of align\n }\n writer.writeEndElement(); //end of postionH\n writer.writeStartElement('wp', 'positionV', this.wpNamespace);\n var verticalOrigin = this.keywordIndex == 1 ? this.getVerticalOrigin(picture[verticalOriginProperty[this.keywordIndex]]) : picture[verticalOriginProperty[this.keywordIndex]].toString();\n writer.writeAttributeString(undefined, 'relativeFrom', undefined, HelperMethods.formatText(\"firstlower\", verticalOrigin));\n if (picture[verticalAlignmentProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'None')) {\n writer.writeStartElement('wp', 'posOffset', this.wpNamespace);\n var vertPos = Math.round(picture[verticalPositionProperty[this.keywordIndex]] * this.emusPerPoint);\n writer.writeString(vertPos.toString());\n writer.writeEndElement(); // end of posOffset\n }\n else {\n writer.writeStartElement('wp', 'align', this.wpNamespace);\n var verAlig = this.keywordIndex == 1 ? this.getShapeVerticalAlignment(picture[verticalAlignmentProperty[this.keywordIndex]]) : picture[verticalAlignmentProperty[this.keywordIndex]];\n writer.writeString(verAlig.toLowerCase());\n writer.writeEndElement(); //end of align\n }\n writer.writeEndElement(); //end of postionV\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(picture[widthProperty[this.keywordIndex]] * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(picture[heightProperty[this.keywordIndex]] * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n if (!isNullOrUndefined(picture[imageStringProperty[this.keywordIndex]])) {\n // this.serializePicProperties(writer, draw);\n this.serializeShapeWrapStyle(writer, picture);\n this.serializeDrawingGraphics(writer, picture);\n }\n else {\n this.serializeShapeDrawingGraphics(writer, picture);\n }\n writer.writeEndElement(); // end of anchor\n };\n // Serialize the inline picture & Shape.\n WordExport.prototype.serializeInlinePictureAndShape = function (writer, draw) {\n writer.writeStartElement(undefined, 'inline', this.wpNamespace);\n this.writeDefaultDistAttribute(writer);\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(draw[widthProperty[this.keywordIndex]] * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(draw[heightProperty[this.keywordIndex]] * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n // double borderWidth = (double)picture.PictureShape.PictureDescriptor.BorderLeft.LineWidth / DLSConstants.BorderLineFactor;\n // if (borderWidth > 0 && picture.DocxProps.length === 0) {\n // long leftTop = 0, rightBottom = 0;\n // picture.PictureShape.GetEffectExtent(borderWidth, ref leftTop, ref rightBottom);\n // m_writer.WriteStartElement('effectExtent', WP_namespace);\n // m_writer.WriteAttributeString('l', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('t', leftTop.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('r', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteAttributeString('b', rightBottom.ToString(CultureInfo.InvariantCulture));\n // m_writer.WriteEndElement();\n // }\n //this.serializePicProperties(writer, image);\n if (!isNullOrUndefined(draw[imageStringProperty[this.keywordIndex]])) {\n this.serializeShapeWrapStyle(writer, draw);\n this.serializeDrawingGraphics(writer, draw);\n }\n else {\n this.serializeShapeDrawingGraphics(writer, draw);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializePictureAndShapeDistance = function (writer, draw) {\n var top = draw[distanceTopProperty[this.keywordIndex]] ? Math.round(draw[distanceTopProperty[this.keywordIndex]] * this.emusPerPoint).toString() : '0';\n writer.writeAttributeString(undefined, 'distT', undefined, top);\n var bottom = draw[distanceBottomProperty[this.keywordIndex]] ? Math.round(draw[distanceBottomProperty[this.keywordIndex]] * this.emusPerPoint).toString() : '0';\n writer.writeAttributeString(undefined, 'distB', undefined, bottom);\n var left = draw[distanceLeftProperty[this.keywordIndex]] ? Math.round(draw[distanceLeftProperty[this.keywordIndex]] * this.emusPerPoint).toString() : '114300';\n writer.writeAttributeString(undefined, 'distL', undefined, left);\n var right = draw[distanceRightProperty[this.keywordIndex]] ? Math.round(draw[distanceRightProperty[this.keywordIndex]] * this.emusPerPoint).toString() : '114300';\n writer.writeAttributeString(undefined, 'distR', undefined, right);\n };\n WordExport.prototype.writeDefaultDistAttribute = function (writer) {\n writer.writeAttributeString(undefined, 'distT', undefined, '0');\n writer.writeAttributeString(undefined, 'distB', undefined, '0');\n writer.writeAttributeString(undefined, 'distL', undefined, '0');\n writer.writeAttributeString(undefined, 'distR', undefined, '0');\n };\n // serialize inline chart\n WordExport.prototype.serializeInlineCharts = function (writer, item) {\n writer.writeStartElement(undefined, 'inline', this.wpNamespace);\n this.writeDefaultDistAttribute(writer);\n writer.writeStartElement(undefined, 'extent', this.wpNamespace);\n var cx = Math.round(item[widthProperty[this.keywordIndex]] * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round(item[heightProperty[this.keywordIndex]] * this.emusPerPoint);\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement(); // end of wp:extend\n writer.writeStartElement(undefined, 'effectExtent', this.wpNamespace);\n writer.writeAttributeString(undefined, 'l', undefined, '0');\n writer.writeAttributeString(undefined, 't', undefined, '0');\n writer.writeAttributeString(undefined, 'r', undefined, '0');\n writer.writeAttributeString(undefined, 'b', undefined, '0');\n writer.writeEndElement(); // end of wp: effectExtent\n this.serializeDrawingGraphicsChart(writer, item);\n writer.writeEndElement(); // end of inline\n };\n // Serialize the graphics element for chart.\n WordExport.prototype.serializeDrawingGraphicsChart = function (writer, chart) {\n var id = '';\n id = this.updatechartId(chart);\n // Processing chart\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n writer.writeAttributeString(undefined, 'name', undefined, this.getNextChartName());\n writer.writeEndElement(); // end of wp docPr\n writer.writeStartElement('wp', 'cNvGraphicFramePr', this.wpNamespace);\n writer.writeEndElement(); // end of cNvGraphicFramePr\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.chartNamespace);\n writer.writeStartElement('c', 'chart', this.chartNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('r', 'id', undefined, id);\n writer.writeEndElement(); // end of chart\n writer.writeEndElement(); // end of graphic data\n writer.writeEndElement(); // end of graphic\n };\n WordExport.prototype.getBase64ImageString = function (image) {\n var base64ImageString = !isNullOrUndefined(image[metaFileImageStringProperty[this.keywordIndex]]) ? this.mImages.get(parseInt(image[metaFileImageStringProperty[this.keywordIndex]])) : this.mImages.get(parseInt(image[imageStringProperty[this.keywordIndex]]));\n var imageString = base64ImageString[HelperMethods.parseBoolValue(image[isMetaFileProperty[this.keywordIndex]]) ? 1 : 0];\n var index = (this.startsWith(imageString, \"https://\") || this.startsWith(imageString, \"http://\") || this.startsWith(imageString, \"file://\")) ? 1 : 0;\n var metaFileImageString = base64ImageString[index];\n return { imageString: imageString, metaFileImageString: metaFileImageString };\n };\n WordExport.prototype.getNextChartName = function () {\n return 'Chart' + (++this.chartCount);\n };\n // serialize chart\n WordExport.prototype.serializeChart = function (writer, chart) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, chart[characterFormatProperty[this.keywordIndex]]);\n this.serializeDrawing(writer, chart);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeChartStructure = function () {\n this.serializeChartXML();\n this.serializeChartColors();\n this.serializeChartExcelData();\n this.serializeChartRelations();\n this.chart = undefined;\n this.saveExcel();\n };\n // serialize Chart.xml\n WordExport.prototype.serializeChartXML = function () {\n var chartPath = '';\n var writer = new XmlWriter();\n writer.writeStartElement('c', 'chartSpace', this.chartNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'c16r2', undefined, this.c15Namespace);\n this.serializeChartData(writer, this.chart);\n writer.writeStartElement('c', 'externalData', this.chartNamespace);\n writer.writeAttributeString('r', 'id', undefined, 'rId1');\n writer.writeStartElement('c', 'autoUpdate', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of autoUpdate\n writer.writeEndElement(); // end of externalData\n writer.writeEndElement(); // end of chartSpace\n chartPath = this.chartPath + '/chart' + this.chartCount + '.xml';\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, chartPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // serialize chart colors.xml\n WordExport.prototype.serializeChartColors = function () {\n var writer = new XmlWriter();\n var colorPath = '';\n writer.writeStartElement('cs', 'colorStyle', this.csNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString(undefined, 'meth', undefined, 'cycle');\n writer.writeAttributeString(undefined, 'id', undefined, '10');\n this.serializeChartColor(writer);\n colorPath = this.chartPath + '/colors' + this.chartCount + '.xml';\n writer.writeEndElement(); // end of cs:colorStyle chart color\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, colorPath);\n this.mArchive.addItem(zipArchiveItem);\n colorPath = '';\n };\n WordExport.prototype.serializeChartColor = function (writer) {\n for (var i = 1; i <= 6; i++) {\n writer.writeStartElement('a', 'schemeClr', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'accent' + i);\n writer.writeEndElement(); // end of a:schemeClr\n }\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '60000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '80000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '20000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '80000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '60000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '40000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '50000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '70000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '30000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '70000');\n writer.writeEndElement(); // end of lumMod\n writer.writeEndElement(); // end of cs:variation\n writer.writeStartElement('cs', 'variation', this.csNamespace);\n writer.writeStartElement('a', 'lumMod', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '50000');\n writer.writeEndElement(); // end of lumMod\n writer.writeStartElement('a', 'lumOff', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '50000');\n writer.writeEndElement(); // end of lumoff\n writer.writeEndElement(); // end of cs:variation\n };\n // serialize chart Excel Data\n WordExport.prototype.serializeChartExcelData = function () {\n if (isNullOrUndefined(this.excelFiles)) {\n this.excelFiles = new Dictionary();\n }\n this.mArchiveExcel = new ZipArchive();\n this.mArchiveExcel.compressionLevel = 'Normal';\n var type = this.chart[chartTypeProperty[this.keywordIndex]];\n var isScatterType = (type === 'Scatter_Markers' || type === 'Bubble');\n this.serializeWorkBook();\n this.serializeSharedString(isScatterType);\n this.serializeExcelContentTypes();\n this.serializeExcelData(isScatterType);\n this.serializeExcelStyles();\n this.serializeExcelRelation();\n this.serializeExcelGeneralRelations();\n this.chartStringCount = 0;\n };\n WordExport.prototype.serializeWorkBook = function () {\n var writer = new XmlWriter();\n var workbookPath = 'xl/workbook.xml';\n this.resetExcelRelationShipId();\n writer.writeStartElement(undefined, 'workbook', undefined);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n writer.writeStartElement(undefined, 'sheets', undefined);\n writer.writeStartElement(undefined, 'sheet', undefined);\n writer.writeAttributeString(undefined, 'name', undefined, 'Sheet1');\n writer.writeAttributeString(undefined, 'sheetId', undefined, '1');\n writer.writeAttributeString('r', 'id', undefined, this.getNextExcelRelationShipID());\n writer.writeEndElement(); // end of sheet\n writer.writeEndElement(); // end of sheets\n writer.writeEndElement(); // end of workbook\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, workbookPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelStyles = function () {\n var writer = new XmlWriter();\n var stylePath = 'xl/styles.xml';\n writer.writeStartElement(undefined, 'styleSheet', undefined);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'x14ac');\n writer.writeAttributeString('xmlns', 'x14ac', undefined, 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac');\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n writer.writeEndElement(); // end of styleSheet\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, stylePath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelData = function (isScatterType) {\n // excel data\n var sheetPath = '';\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'worksheet', undefined);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'x14', undefined, this.spreadSheet9);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n this.serializeExcelSheet(writer, isScatterType);\n writer.writeEndElement(); // end of worksheet\n sheetPath = 'xl/worksheets' + '/sheet1.xml';\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, sheetPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeSharedString = function (isScatterType) {\n var chart = this.chart;\n var writer = new XmlWriter();\n var sharedStringPath = '';\n var chartSharedString = [];\n var type = this.chart[chartTypeProperty[this.keywordIndex]];\n var seriesLength = chart[chartSeriesProperty[this.keywordIndex]].length;\n for (var column = 0; column < seriesLength; column++) {\n var series = chart[chartSeriesProperty[this.keywordIndex]][column];\n var seriesName = series[seriesNameProperty[this.keywordIndex]];\n var isString = seriesName.match(/[a-z]/i);\n if (isScatterType && column === 0) {\n chartSharedString.push('X-Values');\n }\n if (isString) {\n chartSharedString.push(series[seriesNameProperty[this.keywordIndex]]);\n this.chartStringCount++;\n }\n }\n if (type === 'Bubble') {\n chartSharedString.push('Size');\n }\n for (var row = 0; row < chart[chartCategoryProperty[this.keywordIndex]].length; row++) {\n var category = chart[chartCategoryProperty[this.keywordIndex]][row];\n var format = chart[chartPrimaryCategoryAxisProperty[this.keywordIndex]][numberFormatProperty[this.keywordIndex]];\n var categoryName = category[categoryXNameProperty[this.keywordIndex]];\n var isString = categoryName.match(/[a-z]/i);\n if (isString || format === 'm/d/yyyy') {\n chartSharedString.push(category[categoryXNameProperty[this.keywordIndex]]);\n this.chartStringCount++;\n }\n }\n var uniqueCount = this.chartStringCount + 1;\n writer.writeStartElement(undefined, 'sst', undefined);\n writer.writeAttributeString('xmlns', undefined, undefined, this.spreadSheetNamespace);\n writer.writeAttributeString(undefined, 'count', undefined, uniqueCount.toString());\n writer.writeAttributeString(undefined, 'uniqueCount', undefined, uniqueCount.toString());\n for (var i = 0; i <= chartSharedString.length; i++) {\n writer.writeStartElement(undefined, 'si', undefined);\n writer.writeStartElement(undefined, 't', undefined);\n if (i !== chartSharedString.length) {\n writer.writeString(chartSharedString[i]);\n }\n else if (!isScatterType) {\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString(' ');\n }\n writer.writeEndElement(); // end of t\n writer.writeEndElement(); // end of si\n }\n writer.writeEndElement(); // end of sst\n sharedStringPath = 'xl/sharedStrings' + '.xml';\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, sharedStringPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n // excel sheet data\n WordExport.prototype.serializeExcelSheet = function (writer, isScatterType) {\n var chart = this.chart;\n var type = 's';\n var isBubbleType = (chart[chartTypeProperty[this.keywordIndex]] === 'Bubble');\n var bubbleLength;\n var categoryLength = chart[chartCategoryProperty[this.keywordIndex]].length + 1;\n var format = chart[chartPrimaryCategoryAxisProperty[this.keywordIndex]][numberFormatProperty[this.keywordIndex]];\n var seriesLength = chart[chartSeriesProperty[this.keywordIndex]].length + 1;\n if (isBubbleType) {\n bubbleLength = seriesLength;\n seriesLength = seriesLength + 1;\n }\n var category = undefined;\n var series = undefined;\n var count = 0;\n writer.writeStartElement(undefined, 'sheetData', undefined);\n for (var row = 0; row < categoryLength; row++) {\n writer.writeStartElement(undefined, 'row', undefined);\n writer.writeAttributeString(undefined, 'r', undefined, (row + 1).toString());\n for (var column = 0; column < seriesLength; column++) {\n var alphaNumeric = String.fromCharCode('A'.charCodeAt(0) + column) + (row + 1).toString();\n writer.writeStartElement(undefined, 'c', undefined);\n writer.writeAttributeString(undefined, 'r', undefined, alphaNumeric);\n if (row !== 0 && column === 0) {\n category = chart[chartCategoryProperty[this.keywordIndex]][row - 1];\n var categoryName = category[categoryXNameProperty[this.keywordIndex]];\n var isString = categoryName.match(/[a-z]/i);\n if (isNullOrUndefined(isString) && format === 'm/d/yyyy') {\n type = 's';\n }\n else if (!isString || isScatterType) {\n type = 'n';\n }\n else {\n type = 's';\n }\n }\n else if (row === 0 && column !== 0 && column !== (bubbleLength)) {\n series = chart[chartSeriesProperty[this.keywordIndex]][column - 1];\n var seriesName = series[seriesNameProperty[this.keywordIndex]];\n var isString = seriesName.match(/[a-z]/i);\n if (!isString) {\n type = 'n';\n }\n else {\n type = 's';\n }\n }\n else if (row === 0 && isBubbleType && column === (bubbleLength)) {\n type = 's';\n }\n else if (row === 0 && column === 0) {\n type = 's';\n }\n else {\n type = 'n';\n }\n writer.writeAttributeString(undefined, 't', undefined, type);\n writer.writeStartElement(undefined, 'v', undefined);\n if (row === 0 && column === 0 && !isScatterType) {\n writer.writeString(this.chartStringCount.toString());\n }\n else if (type === 's' && count < this.chartStringCount) {\n writer.writeString(count.toString());\n count++;\n }\n else if (row !== 0 && type !== 's' && column === 0 && column !== (bubbleLength)) {\n writer.writeString(category[categoryXNameProperty[this.keywordIndex]]);\n }\n else if (column !== 0 && type !== 's' && row === 0 && column !== (bubbleLength)) {\n writer.writeString(series[seriesNameProperty[this.keywordIndex]]);\n }\n else if (column !== 0 && column !== (bubbleLength)) {\n var data = category[chartDataProperty[this.keywordIndex]][column - 1];\n var yValue = data[yValueProperty[this.keywordIndex]];\n writer.writeString(yValue.toString());\n }\n else if (isBubbleType && column === (bubbleLength)) {\n var data = category[chartDataProperty[this.keywordIndex]][column - 2];\n var size = data[sizeProperty[this.keywordIndex]];\n writer.writeString(size.toString());\n }\n writer.writeEndElement(); // end of v[value]\n writer.writeEndElement(); // end of c[column]\n type = '';\n }\n writer.writeEndElement(); // end of row\n }\n writer.writeEndElement(); // end of sheetData\n };\n // excel content types\n WordExport.prototype.serializeExcelContentTypes = function () {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Types', 'http://schemas.openxmlformats.org/package/2006/content-types');\n this.serializeDefaultContentType(writer, 'xml', this.xmlContentType);\n this.serializeDefaultContentType(writer, 'rels', this.relationContentType);\n this.serializeOverrideContentType(writer, 'xl/styles.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml');\n this.serializeOverrideContentType(writer, 'xl/workbook.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml');\n // this.serializeOverrideContentType(writer, '/docProps/app.xml', 'application/vnd.openxmlformats-officedocument.extended-properties+xml');\n // this.serializeOverrideContentType(writer, '/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml');\n this.serializeOverrideContentType(writer, 'xl/sharedStrings.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml');\n this.serializeOverrideContentType(writer, 'xl/worksheets/sheet1.xml', 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml');\n writer.writeEndElement(); // end of types tag\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.contentTypesPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelRelation = function () {\n var writer = new XmlWriter();\n this.resetExcelRelationShipId();\n var worksheetType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet';\n var sharedStringType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings';\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), worksheetType, 'worksheets/sheet1.xml');\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), this.stylesRelType, 'styles.xml');\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), sharedStringType, 'sharedStrings.xml');\n writer.writeEndElement(); // end of relationships\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.excelRelationPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeExcelGeneralRelations = function () {\n var writer = new XmlWriter();\n this.resetExcelRelationShipId();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextExcelRelationShipID(), this.documentRelType, 'xl/workbook.xml');\n writer.writeEndElement(); // end of relationships\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.generalRelationPath);\n this.mArchiveExcel.addItem(zipArchiveItem);\n };\n // get the next Excel relationship ID\n WordExport.prototype.getNextExcelRelationShipID = function () {\n return 'rId' + (++this.eRelationShipId);\n };\n // get the next Chart relationship ID\n WordExport.prototype.getNextChartRelationShipID = function () {\n return 'rId' + (++this.cRelationShipId);\n };\n // chart data\n WordExport.prototype.serializeChartData = function (writer, chart) {\n writer.writeStartElement('c', 'date1904', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('c', 'lang', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'en-US');\n writer.writeEndElement();\n writer.writeStartElement('c', 'roundedCorners', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('mc', 'AlternateContent', this.veNamespace);\n writer.writeStartElement('mc', 'Choice', this.veNamespace);\n writer.writeAttributeString('xmlns', 'c14', undefined, this.c7Namespace);\n writer.writeAttributeString(undefined, 'Requires', undefined, 'c14');\n writer.writeStartElement('c14', 'style', undefined);\n writer.writeAttributeString(undefined, 'val', undefined, '102');\n writer.writeEndElement(); // c14 style end\n writer.writeEndElement(); // mc:choice ened\n writer.writeStartElement('mc', 'Fallback', this.veNamespace);\n writer.writeStartElement('c', 'style', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '2');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement(); // end tag of mc alternate content\n writer.writeStartElement('c', 'chart', this.chartNamespace);\n if (!isNullOrUndefined(this.chart[chartTitleProperty[this.keywordIndex]])) {\n writer.writeStartElement('c', 'title', this.chartNamespace);\n this.serializeTextProperties(writer, this.chart[chartTitleAreaProperty[this.keywordIndex]], this.chart[chartTitleProperty[this.keywordIndex]]);\n writer.writeEndElement(); // end tag of title\n }\n // serialize plot area\n this.serializeChartPlotArea(writer, chart);\n writer.writeEndElement(); // end tag of chart\n this.serializeShapeProperties(writer, 'D9D9D9', true);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeAttributeString('xmlns', 'c', undefined, this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeEndElement(); // end tag of bodyPr\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeEndElement(); // end of a:lstStyle\n writer.writeStartElement('a', 'p', this.aNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeStartElement('a', 'pPr', this.aNamespace);\n writer.writeStartElement('a', 'defRPr', this.aNamespace);\n writer.writeEndElement(); // end tag of defRPr\n writer.writeEndElement(); // end tag of pPr\n writer.writeStartElement('a', 'endParaRPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'lang', undefined, 'en-US');\n writer.writeEndElement(); // end of a:endParaRPr\n writer.writeEndElement(); // end tag of p\n writer.writeEndElement(); // end tag of txPr\n };\n // chart plot area\n /* eslint-disable */\n WordExport.prototype.serializeChartPlotArea = function (writer, chart) {\n writer.writeStartElement('c', 'autoTitleDeleted', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of autoTitleDeleted\n writer.writeStartElement('c', 'plotArea', this.chartNamespace);\n writer.writeStartElement('c', 'layout', this.chartNamespace);\n writer.writeEndElement();\n // chart Type\n var serializationChartType = this.chartType(chart);\n var isPieTypeSerialization = (serializationChartType === 'pieChart' || serializationChartType === 'doughnutChart');\n var isScatterType = (serializationChartType === 'scatterChart' || serializationChartType === 'bubbleChart');\n writer.writeStartElement('c', serializationChartType, this.chartNamespace);\n if (serializationChartType === 'barChart') {\n var barDiv = '';\n if (chart[chartTypeProperty[this.keywordIndex]] === 'Column_Clustered' || chart[chartTypeProperty[this.keywordIndex]] === 'Column_Stacked'\n || chart[chartTypeProperty[this.keywordIndex]] === 'Column_Stacked_100') {\n barDiv = 'col';\n }\n else {\n barDiv = 'bar';\n }\n writer.writeStartElement('c', 'barDir', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, barDiv);\n writer.writeEndElement(); // end of barDir\n }\n if (!isPieTypeSerialization && !isScatterType) {\n var grouping = this.chartGrouping(chart[chartTypeProperty[this.keywordIndex]]);\n writer.writeStartElement('c', 'grouping', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, grouping);\n writer.writeEndElement(); // end of grouping\n }\n if (serializationChartType === 'scatterChart') {\n writer.writeStartElement('c', 'scatterStyle', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'marker');\n writer.writeEndElement(); // end of scatterStyle\n }\n writer.writeStartElement('c', 'varyColors', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c:varyColors\n var valueSheet = '';\n for (var i = 0; i < chart[chartSeriesProperty[this.keywordIndex]].length; i++) {\n var series = chart[chartSeriesProperty[this.keywordIndex]][i];\n this.seriesCount = i;\n writer.writeStartElement('c', 'ser', this.chartNamespace);\n writer.writeStartElement('c', 'idx', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, i.toString());\n writer.writeEndElement(); // end of c:idx\n writer.writeStartElement('c', 'order', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, i.toString());\n writer.writeEndElement(); // end of c:order\n writer.writeStartElement('c', 'tx', this.chartNamespace);\n writer.writeStartElement('c', 'strRef', this.chartNamespace);\n writer.writeStartElement('c', 'f', this.chartNamespace);\n var alphaNumeric = String.fromCharCode('B'.charCodeAt(0) + i);\n valueSheet = 'Sheet1!$' + alphaNumeric;\n writer.writeString(valueSheet + '$1');\n valueSheet = valueSheet + '$2:$' + alphaNumeric + '$';\n writer.writeEndElement(); // end of c:f\n writer.writeStartElement('c', 'strCache', this.chartNamespace);\n writer.writeStartElement('c', 'ptCount', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of ptCount\n writer.writeStartElement('c', 'pt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'idx', undefined, '0');\n writer.writeStartElement('c', 'v', this.chartNamespace);\n writer.writeString(series[seriesNameProperty[this.keywordIndex]]);\n writer.writeEndElement(); // end of c:v\n writer.writeEndElement(); // end of pt\n writer.writeEndElement(); // end of strCache\n writer.writeEndElement(); // end of strRef\n writer.writeEndElement(); // end of tx\n if (chart[chartTypeProperty[this.keywordIndex]] === 'Pie' || chart[chartTypeProperty[this.keywordIndex]] === 'Doughnut') {\n this.parseChartDataPoint(writer, series);\n writer.writeStartElement('c', 'explosion', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of explosion\n }\n else if (!isScatterType) {\n this.parseChartSeriesColor(writer, series[dataPointsProperty[this.keywordIndex]], serializationChartType);\n }\n if (serializationChartType === 'scatterChart') {\n var fillColor = series[dataPointsProperty[this.keywordIndex]][0][fillProperty[this.keywordIndex]][foreColorProperty[this.keywordIndex]];\n writer.writeStartElement('c', 'marker', this.chartNamespace);\n writer.writeStartElement('c', 'symbol', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'circle');\n writer.writeEndElement(); // end of a: symbol\n writer.writeStartElement('c', 'size', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '5');\n writer.writeEndElement(); // end of a: size\n this.serializeShapeProperties(writer, fillColor, false);\n writer.writeEndElement(); // end of a: marker\n }\n if (series[dataLabelProperty[this.keywordIndex]]) {\n this.parseChartDataLabels(writer, series[dataLabelProperty[this.keywordIndex]]);\n }\n if (series[trendLinesProperty[this.keywordIndex]]) {\n this.parseChartTrendLines(writer, series);\n }\n if (series[errorBarProperty[this.keywordIndex]]) {\n this.serializeChartErrorBar(writer, series);\n }\n if (serializationChartType === 'scatterChart') {\n this.serializeDefaultShapeProperties(writer);\n }\n else if (serializationChartType === 'bubbleChart') {\n this.serializeShapeProperties(writer, series[dataPointsProperty[this.keywordIndex]][i][fillProperty[this.keywordIndex]][foreColorProperty[this.keywordIndex]], false);\n }\n var categoryType = 'cat';\n var categoryRef = 'strRef';\n var cacheType = 'strCache';\n if (serializationChartType === 'scatterChart') {\n categoryType = 'xVal';\n categoryRef = 'numRef';\n cacheType = 'numCache';\n }\n writer.writeStartElement('c', categoryType, this.chartNamespace);\n writer.writeStartElement('c', categoryRef, this.chartNamespace);\n this.serializeChartCategory(writer, chart, cacheType); // serialize chart yvalue\n writer.writeEndElement(); // end of categoryRef\n writer.writeEndElement(); // end of cat\n this.serializeChartValue(writer, valueSheet, serializationChartType);\n writer.writeEndElement(); // end of c:ser\n }\n writer.writeStartElement('c', 'dLbls', this.chartNamespace);\n if (isPieTypeSerialization) {\n writer.writeStartElement('c', 'dLblPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'bestFit');\n writer.writeEndElement(); // end of dLblPos\n }\n writer.writeStartElement('c', 'showLegendKey', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showLegendKey\n writer.writeStartElement('c', 'showVal', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showVal\n writer.writeStartElement('c', 'showCatName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showCatName\n writer.writeStartElement('c', 'showSerName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showSerName\n writer.writeStartElement('c', 'showPercent', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showPercent\n writer.writeStartElement('c', 'showBubbleSize', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: showBubbleSize\n writer.writeStartElement('c', 'showLeaderLines', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of c: showLeaderLines\n writer.writeEndElement(); // end of c: dLbls\n if (isPieTypeSerialization) {\n var series = this.chart[chartSeriesProperty[this.keywordIndex]][0];\n var sliceAngle = 0;\n var holeSize = 0;\n if (series.hasOwnProperty(firstSliceAngleProperty[this.keywordIndex])) {\n sliceAngle = series[firstSliceAngleProperty[this.keywordIndex]];\n }\n writer.writeStartElement('c', 'firstSliceAng', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, sliceAngle.toString());\n writer.writeEndElement(); // end of c: firstSliceAng\n if (chart[chartTypeProperty[this.keywordIndex]] === 'Doughnut') {\n holeSize = series[holeSizeProperty[this.keywordIndex]];\n writer.writeStartElement('c', 'holeSize', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, holeSize.toString());\n writer.writeEndElement(); // end of c: holeSize\n }\n }\n if (serializationChartType !== 'lineChart' && !isScatterType) {\n writer.writeStartElement('c', 'gapWidth', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.chart[gapWidthProperty[this.keywordIndex]].toString());\n writer.writeEndElement(); // end of gapWidth\n writer.writeStartElement('c', 'overlap', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.chart[overlapProperty[this.keywordIndex]].toString());\n writer.writeEndElement(); // end of overlap\n }\n else if (serializationChartType !== 'bubbleChart') {\n writer.writeStartElement('c', 'smooth', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of smooth\n }\n if (serializationChartType === 'bubbleChart') {\n writer.writeStartElement('c', 'sizeRepresents', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'area');\n writer.writeEndElement(); // end of smooth\n }\n var type = this.chart[chartTypeProperty[this.keywordIndex]];\n if (!isPieTypeSerialization) {\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335265000');\n writer.writeEndElement(); // end of axId\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335263360');\n writer.writeEndElement(); // end of axId\n }\n writer.writeEndElement(); // end of chart type\n var isStackedPercentage = (type === 'Column_Stacked_100' || type === 'Area_Stacked_100' ||\n type === 'Bar_Stacked_100' || type === 'Line_Stacked_100' || type === 'Line_Markers_Stacked_100');\n var format = this.chart[chartPrimaryCategoryAxisProperty[this.keywordIndex]][chartTypeProperty[this.keywordIndex]];\n if (!isPieTypeSerialization) {\n this.serializeCategoryAxis(writer, format, isStackedPercentage);\n this.serializeValueAxis(writer, format, isStackedPercentage);\n }\n if (this.chart.hasOwnProperty(chartDataTableProperty[this.keywordIndex])) {\n var dataTable = this.chart[chartDataTableProperty[this.keywordIndex]];\n var showHorzBorder = 0;\n var showVertBorder = 0;\n var showOutline = 0;\n var showKeys = 0;\n if (HelperMethods.parseBoolValue(dataTable[showSeriesKeysProperty[this.keywordIndex]])) {\n showKeys = 1;\n }\n if (HelperMethods.parseBoolValue(dataTable[hasHorizontalBorderProperty[this.keywordIndex]])) {\n showHorzBorder = 1;\n }\n if (HelperMethods.parseBoolValue(dataTable[hasVerticalBorderProperty[this.keywordIndex]])) {\n showVertBorder = 1;\n }\n if (HelperMethods.parseBoolValue(dataTable[hasBordersProperty[this.keywordIndex]])) {\n showOutline = 1;\n }\n writer.writeStartElement('c', 'dTable', this.chartNamespace);\n writer.writeStartElement('c', 'showHorzBorder', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showHorzBorder.toString());\n writer.writeEndElement(); // end of showHorzBorder\n writer.writeStartElement('c', 'showVertBorder', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showVertBorder.toString());\n writer.writeEndElement(); // end of showVertBorder\n writer.writeStartElement('c', 'showOutline', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showOutline.toString());\n writer.writeEndElement(); // end of showOutline\n writer.writeStartElement('c', 'showKeys', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, showKeys.toString());\n writer.writeEndElement(); // end of showKeys\n writer.writeEndElement(); // end of dTable\n }\n this.serializeDefaultShapeProperties(writer);\n writer.writeEndElement(); // end of plot area\n // legend\n if (!isNullOrUndefined(this.chart[chartLegendProperty[this.keywordIndex]][positionProperty[this.keywordIndex]])) {\n this.serializeChartLegend(writer);\n }\n writer.writeStartElement('c', 'plotVisOnly', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of c: plotVisOnly\n writer.writeStartElement('c', 'dispBlanksAs', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'gap');\n writer.writeEndElement(); // end of c: dispBlanksAs\n };\n WordExport.prototype.serializeChartLegend = function (writer) {\n var legendPosition = this.chartLegendPosition(this.chart[chartLegendProperty[this.keywordIndex]]);\n var title = this.chart[chartLegendProperty[this.keywordIndex]][chartTitleAreaProperty[this.keywordIndex]];\n var fill = title[dataFormatProperty[this.keywordIndex]][fillProperty[this.keywordIndex]][foreColorProperty[this.keywordIndex]];\n writer.writeStartElement('c', 'legend', this.chartNamespace);\n writer.writeStartElement('c', 'legendPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, legendPosition);\n writer.writeEndElement();\n writer.writeStartElement('c', 'overlay', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement();\n this.serializeDefaultShapeProperties(writer);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, title[fontSizeProperty[this.keywordIndex]], fill, title[fontNameProperty[this.keywordIndex]]);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeChartErrorBar = function (writer, series) {\n var errorBar = series[errorBarProperty[this.keywordIndex]];\n var errorBarValueType = this.errorBarValueType(errorBar[typeProperty[this.keywordIndex]]);\n var endStyle = 0;\n if (errorBar[endStyleProperty[this.keywordIndex]] !== 'Cap') {\n endStyle = 1;\n }\n writer.writeStartElement('c', 'errBars', this.chartNamespace);\n writer.writeStartElement('c', 'errBarType', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, errorBar[directionProperty[this.keywordIndex]].toLowerCase());\n writer.writeEndElement(); // end of c: errBarType\n writer.writeStartElement('c', 'errValType', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, errorBarValueType);\n writer.writeEndElement(); // end of c: errValType\n writer.writeStartElement('c', 'noEndCap', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, endStyle.toString());\n writer.writeEndElement(); // end of c: noEndCap\n writer.writeStartElement('c', 'val', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, errorBar[numberValueProperty[this.keywordIndex]].toString());\n writer.writeEndElement(); // end of c: val\n this.serializeShapeProperties(writer, '595959', true);\n writer.writeEndElement(); // end of c: errBars\n };\n WordExport.prototype.errorBarValueType = function (type) {\n var valueType = '';\n switch (type) {\n case 'StandardError':\n valueType = 'stdErr';\n break;\n case 'StandardDeviation':\n valueType = 'stdDev';\n break;\n case 'Percentage':\n valueType = 'percentage';\n break;\n case 'Fixed':\n valueType = 'fixedVal';\n break;\n default:\n valueType = 'stdErr';\n break;\n }\n return valueType;\n };\n WordExport.prototype.serializeCategoryAxis = function (writer, format, isStackedPercentage) {\n // serialize category axis\n var axisType = 'catAx';\n var formatCode = this.chart[chartPrimaryCategoryAxisProperty[this.keywordIndex]][numberFormatProperty[this.keywordIndex]];\n var type = this.chart[chartTypeProperty[this.keywordIndex]];\n var isScatterType = (type === 'Scatter_Markers' || type === 'Bubble');\n if (format === 'Time') {\n axisType = 'dateAx';\n }\n if (isScatterType) {\n axisType = 'valAx';\n }\n writer.writeStartElement('c', axisType, this.chartNamespace);\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335265000');\n writer.writeEndElement(); // end of axId\n this.serializeAxis(writer, '335263360', this.chart[chartPrimaryCategoryAxisProperty[this.keywordIndex]], formatCode, isStackedPercentage);\n if (!isScatterType) {\n writer.writeStartElement('c', 'auto', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '1');\n writer.writeEndElement(); // end of auto\n writer.writeStartElement('c', 'lblAlgn', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'ctr');\n writer.writeEndElement(); // end of lblAlgn\n writer.writeStartElement('c', 'lblOffset', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '100');\n writer.writeEndElement(); // end of lblOffset\n }\n if (format === 'Time') {\n writer.writeStartElement('c', 'baseTimeUnit', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'days');\n writer.writeEndElement(); // end of baseTimeUnit\n }\n else if (this.chart[chartTypeProperty[this.keywordIndex]] !== 'Bubble') {\n writer.writeStartElement('c', 'noMultiLvlLbl', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of noMultiLvlLbl\n }\n writer.writeEndElement(); // end of catAx\n };\n WordExport.prototype.serializeValueAxis = function (writer, format, isStackedPercentage) {\n // serialize category axis\n var valueAxis = this.chart[chartPrimaryValueAxisProperty[this.keywordIndex]];\n var crossBetween = 'between';\n if (format === 'Time') {\n crossBetween = 'midCat';\n }\n writer.writeStartElement('c', 'valAx', this.chartNamespace);\n writer.writeStartElement('c', 'axId', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '335263360');\n writer.writeEndElement(); // end of axId\n this.serializeAxis(writer, '335265000', valueAxis, 'General', isStackedPercentage);\n writer.writeStartElement('c', 'crossBetween', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, crossBetween);\n writer.writeEndElement(); // end of crossBetween\n if (valueAxis[majorUnitProperty[this.keywordIndex]] !== 0 && !isStackedPercentage) {\n writer.writeStartElement('c', 'majorUnit', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, valueAxis[majorUnitProperty[this.keywordIndex]].toString());\n writer.writeEndElement(); // end of majorUnit\n }\n writer.writeEndElement(); // end of valAx\n };\n WordExport.prototype.serializeAxis = function (writer, axisID, axis, formatCode, isStackedPercentage) {\n var majorTickMark = 'none';\n var minorTickMark = 'none';\n var tickLabelPosition = 'nextTo';\n writer.writeStartElement('c', 'scaling', this.chartNamespace);\n writer.writeStartElement('c', 'orientation', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'minMax');\n writer.writeEndElement(); // end of orientation\n if (axis[maximumValueProperty[this.keywordIndex]] !== 0 && !isStackedPercentage) {\n writer.writeStartElement('c', 'max', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, axis[maximumValueProperty[this.keywordIndex]].toString());\n writer.writeEndElement(); // end of max\n writer.writeStartElement('c', 'min', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, axis[minimumValueProperty[this.keywordIndex]].toString());\n writer.writeEndElement(); // end of min\n }\n writer.writeEndElement(); // end of scaling\n writer.writeStartElement('c', 'delete', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of delete\n writer.writeStartElement('c', 'axPos', this.chartNamespace);\n if (axisID === '335265000') {\n writer.writeAttributeString(undefined, 'val', undefined, 'l');\n }\n else {\n writer.writeAttributeString(undefined, 'val', undefined, 'b');\n }\n writer.writeEndElement(); // end of axPos\n if (HelperMethods.parseBoolValue(axis[hasMajorGridLinesProperty[this.keywordIndex]])) {\n writer.writeStartElement('c', 'majorGridlines', this.chartNamespace);\n this.serializeShapeProperties(writer, 'D9D9D9', true);\n writer.writeEndElement(); // end of majorGridlines\n }\n if (HelperMethods.parseBoolValue(axis[hasMinorGridLinesProperty[this.keywordIndex]])) {\n writer.writeStartElement('c', 'minorGridlines', this.chartNamespace);\n this.serializeShapeProperties(writer, 'F2F2F2', true);\n writer.writeEndElement(); // end of minorGridlines\n }\n if (axis[chartTitleProperty[this.keywordIndex]]) {\n writer.writeStartElement('c', 'title', this.chartNamespace);\n this.serializeTextProperties(writer, axis[chartTitleAreaProperty[this.keywordIndex]], axis[chartTitleProperty[this.keywordIndex]]);\n writer.writeEndElement(); // end tag of title\n }\n writer.writeStartElement('c', 'numFmt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'formatCode', undefined, formatCode);\n writer.writeAttributeString(undefined, 'sourceLinked', undefined, '1');\n writer.writeEndElement(); // end of numFmt\n writer.writeStartElement('c', 'majorTickMark', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, majorTickMark);\n writer.writeEndElement(); // end of majorTickMark\n writer.writeStartElement('c', 'minorTickMark', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, minorTickMark);\n writer.writeEndElement(); // end of minorTickMark\n writer.writeStartElement('c', 'tickLblPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, tickLabelPosition);\n writer.writeEndElement(); // end of tickLblPos\n if (this.chart[chartTypeProperty[this.keywordIndex]] === 'Bubble') {\n this.serializeShapeProperties(writer, 'BFBFBF', true);\n }\n else {\n this.serializeDefaultShapeProperties(writer);\n }\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement(); // end of bodyPr\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, axis[fontSizeProperty[this.keywordIndex]], '595959', axis[fontNameProperty[this.keywordIndex]]);\n writer.writeEndElement(); // end of a: p\n writer.writeEndElement(); // end of c: txPr\n writer.writeStartElement('c', 'crossAx', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, axisID);\n writer.writeEndElement(); // end of crossAx\n writer.writeStartElement('c', 'crosses', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'autoZero');\n writer.writeEndElement(); // end of crosses\n };\n WordExport.prototype.parseChartTrendLines = function (writer, series) {\n for (var i = 0; i < series[trendLinesProperty[this.keywordIndex]].length; i++) {\n var data = series[trendLinesProperty[this.keywordIndex]][i];\n var type = this.chartTrendLineType(data[typeProperty[this.keywordIndex]]);\n var dispRSqr = 0;\n var dispEq = 0;\n if (HelperMethods.parseBoolValue(data[isDisplayEquationProperty[this.keywordIndex]])) {\n dispEq = 1;\n }\n else if (HelperMethods.parseBoolValue(data[isDisplayRSquaredProperty[this.keywordIndex]])) {\n dispRSqr = 1;\n }\n var solidFill = series[dataPointsProperty[this.keywordIndex]][i];\n writer.writeStartElement('c', 'trendline', this.chartNamespace);\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, '19050');\n this.serializeChartSolidFill(writer, solidFill[fillProperty[this.keywordIndex]][foreColorProperty[this.keywordIndex]], false);\n writer.writeStartElement('a', 'prstDash', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'sysDot');\n writer.writeEndElement(); // end of a: prstDash\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end of a: round\n writer.writeEndElement(); // end of a: ln\n writer.writeEndElement(); // end of c: spPr\n writer.writeStartElement('c', 'trendlineType', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, type);\n writer.writeEndElement(); // end of c: trendlineType\n writer.writeStartElement('c', 'forward', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, data[forwardProperty[this.keywordIndex]].toString());\n writer.writeEndElement(); // end of c: forward\n writer.writeStartElement('c', 'backward', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, data[backwardProperty[this.keywordIndex]].toString());\n writer.writeEndElement(); // end of c: backward\n if (data[interceptProperty[this.keywordIndex]] !== 'NaN') {\n writer.writeStartElement('c', 'intercept', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, data[interceptProperty[this.keywordIndex]].toString());\n writer.writeEndElement(); // end of c: intercept\n }\n writer.writeStartElement('c', 'dispRSqr', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, dispRSqr.toString());\n writer.writeEndElement(); // end of c: dispRSqr\n writer.writeStartElement('c', 'dispEq', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, dispEq.toString());\n writer.writeEndElement(); // end of c: dispEq\n writer.writeEndElement(); // end of c: trendline\n }\n };\n WordExport.prototype.chartTrendLineType = function (type) {\n var trendlineType = '';\n switch (type) {\n case 'Linear':\n trendlineType = 'linear';\n break;\n case 'Exponential':\n trendlineType = 'exp';\n break;\n }\n return trendlineType;\n };\n WordExport.prototype.parseChartDataLabels = function (writer, dataLabels) {\n var position = '';\n var dataLabelPosition = dataLabels[positionProperty[this.keywordIndex]];\n var isLegendKey = 0;\n var isBubbleSize = 0;\n var isCategoryName = 0;\n var isSeriesName = 0;\n var isValue = 0;\n var isPercentage = 0;\n var isLeaderLines = 0;\n switch (dataLabelPosition) {\n case 'Center':\n position = 'ctr';\n break;\n case 'Left':\n position = 'l';\n break;\n case 'Right':\n position = 'r';\n break;\n case 'Outside':\n position = 'outEnd';\n break;\n case 'BestFit':\n position = 'bestFit';\n break;\n case 'Bottom':\n case 'OutsideBase':\n position = 'inBase';\n break;\n case 'Inside':\n position = 'inEnd';\n break;\n case 'Above':\n position = 't';\n break;\n case 'Below':\n position = 'b';\n break;\n default:\n position = 'Automatic';\n break;\n }\n writer.writeStartElement('c', 'dLbls', this.chartNamespace);\n this.serializeDefaultShapeProperties(writer);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement(); //end of a:bodyPr.\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement(); //end of a:lstStyle.\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, dataLabels[fontSizeProperty[this.keywordIndex]], dataLabels[fontColorProperty[this.keywordIndex]], dataLabels[fontNameProperty[this.keywordIndex]]);\n writer.writeEndElement(); //end of a:p.\n writer.writeEndElement(); //end of c:txPr.\n if (HelperMethods.parseBoolValue(dataLabels[isLegendKeyProperty[this.keywordIndex]])) {\n isLegendKey = 1;\n }\n else if (HelperMethods.parseBoolValue(dataLabels[isBubbleSizeProperty[this.keywordIndex]])) {\n isBubbleSize = 1;\n }\n else if (HelperMethods.parseBoolValue(dataLabels[isCategoryNameProperty[this.keywordIndex]])) {\n isCategoryName = 1;\n }\n else if (HelperMethods.parseBoolValue(dataLabels[isSeriesNameProperty[this.keywordIndex]])) {\n isSeriesName = 1;\n }\n else if (HelperMethods.parseBoolValue(dataLabels[isValueProperty[this.keywordIndex]])) {\n isValue = 1;\n }\n else if (HelperMethods.parseBoolValue(dataLabels[isPercentageProperty[this.keywordIndex]])) {\n isPercentage = 1;\n }\n else if (HelperMethods.parseBoolValue(dataLabels[isLeaderLinesProperty[this.keywordIndex]])) {\n isLeaderLines = 1;\n }\n if (position !== 'Automatic') {\n writer.writeStartElement('c', 'dLblPos', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, position);\n writer.writeEndElement(); // end of dLblPos\n }\n writer.writeStartElement('c', 'showLegendKey', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isLegendKey.toString());\n writer.writeEndElement(); // end of showLegendKey\n writer.writeStartElement('c', 'showVal', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isValue.toString());\n writer.writeEndElement(); // end of showVal\n writer.writeStartElement('c', 'showCatName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isCategoryName.toString());\n writer.writeEndElement(); // end of showCatName\n writer.writeStartElement('c', 'showSerName', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isSeriesName.toString());\n writer.writeEndElement(); // end of showSerName\n writer.writeStartElement('c', 'showPercent', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isPercentage.toString());\n writer.writeEndElement(); // end of showPercent\n writer.writeStartElement('c', 'showBubbleSize', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isBubbleSize.toString());\n writer.writeEndElement(); // end of showBubbleSize\n writer.writeStartElement('c', 'showLeaderLines', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, isLeaderLines.toString());\n writer.writeEndElement(); // end of showBubbleSize\n writer.writeEndElement(); // end of dLbls\n };\n WordExport.prototype.serializeShapeProperties = function (writer, color, isLine) {\n var chartType = this.chart[chartTypeProperty[this.keywordIndex]];\n var isScatterType = (chartType === 'Scatter_Markers' || chartType === 'Bubble');\n // serialize shape\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n if (!isScatterType || isLine) {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, '9525');\n this.serializeChartSolidFill(writer, color, false);\n writer.writeStartElement('a', 'prstDash', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, 'solid');\n writer.writeEndElement(); // end of prstDash\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end tag of round\n writer.writeEndElement(); // end tag of ln\n }\n else if (chartType === 'Scatter_Markers') {\n this.serializeChartSolidFill(writer, color, false);\n this.serializeDefaultLineProperties(writer);\n }\n else if (chartType === 'Bubble') {\n this.serializeChartSolidFill(writer, color, true);\n this.serializeDefaultLineProperties(writer);\n }\n writer.writeStartElement('a', 'effectLst', this.aNamespace);\n writer.writeEndElement(); // end of a: effectLst\n writer.writeEndElement(); // end tag of spPr\n };\n WordExport.prototype.serializeDefaultShapeProperties = function (writer) {\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement(); // end of a: noFill\n this.serializeDefaultLineProperties(writer);\n writer.writeStartElement('a', 'effectLst', this.aNamespace);\n writer.writeEndElement(); // end of a: effectLst\n writer.writeEndElement(); // end of c: spPr\n };\n WordExport.prototype.serializeDefaultLineProperties = function (writer) {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement(); // end of a: noFill\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end of a: round\n writer.writeEndElement(); // end of a: ln\n };\n WordExport.prototype.serializeTextProperties = function (writer, title, chartTitleName) {\n var fill = title[dataFormatProperty[this.keywordIndex]][fillProperty[this.keywordIndex]][foreColorProperty[this.keywordIndex]];\n var fontSize = title[fontSizeProperty[this.keywordIndex]] * 100;\n writer.writeStartElement('c', 'tx', this.chartNamespace);\n writer.writeStartElement('c', 'rich', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'rot', undefined, '0');\n writer.writeAttributeString(undefined, 'vert', undefined, 'horz');\n writer.writeEndElement(); // end of a: bodyPr\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement(); // end of a:lstStyle\n writer.writeStartElement('a', 'p', this.aNamespace);\n this.serializeChartTitleFont(writer, title[fontSizeProperty[this.keywordIndex]], fill, title[fontNameProperty[this.keywordIndex]]);\n writer.writeStartElement('a', 'r', this.aNamespace);\n writer.writeStartElement('a', 'rPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'lang', undefined, 'en-US');\n writer.writeAttributeString(undefined, 'b', undefined, '0');\n writer.writeAttributeString(undefined, 'sz', undefined, fontSize.toString());\n writer.writeAttributeString(undefined, 'baseline', undefined, '0');\n this.serializeChartSolidFill(writer, fill, false);\n this.serializeFont(writer, title[fontNameProperty[this.keywordIndex]]);\n writer.writeEndElement(); // end of a: rPr\n writer.writeStartElement('a', 't', this.aNamespace);\n writer.writeString(chartTitleName);\n writer.writeEndElement(); // end of a:t\n writer.writeEndElement(); // end of a: r\n writer.writeEndElement(); // end of a: p\n writer.writeEndElement(); // end of c: rich\n writer.writeEndElement(); // end of c: tx\n writer.writeStartElement('c', 'layout', this.chartNamespace);\n // writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: layout\n writer.writeStartElement('c', 'overlay', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c: overlay\n this.serializeDefaultShapeProperties(writer);\n writer.writeStartElement('c', 'txPr', this.chartNamespace);\n writer.writeStartElement('a', 'bodyPr', this.aNamespace);\n writer.writeEndElement(); // end of a: bodyPr\n writer.writeStartElement('a', 'lstStyle', this.aNamespace);\n writer.writeEndElement(); // end of a: lstStyle\n writer.writeStartElement('a', 'p', this.aNamespace);\n writer.writeEndElement(); // end of a: p\n this.serializeChartTitleFont(writer, title[fontSizeProperty[this.keywordIndex]], fill, title[fontNameProperty[this.keywordIndex]]);\n writer.writeEndElement(); // end of c: txPr\n };\n WordExport.prototype.serializeChartTitleFont = function (writer, fontSize, fill, fontName) {\n var fontSizeCalc = fontSize * 100;\n writer.writeStartElement('a', 'pPr', this.aNamespace);\n writer.writeStartElement('a', 'defRPr', this.aNamespace);\n writer.writeAttributeString(undefined, 'lang', undefined, 'en-US');\n writer.writeAttributeString(undefined, 'b', undefined, '0');\n writer.writeAttributeString(undefined, 'sz', undefined, fontSizeCalc.toString());\n writer.writeAttributeString(undefined, 'baseline', undefined, '0');\n this.serializeChartSolidFill(writer, fill, false);\n this.serializeFont(writer, fontName);\n writer.writeEndElement(); // end of defRPr\n writer.writeEndElement(); // end of a: pPr\n };\n WordExport.prototype.serializeChartSolidFill = function (writer, fill, isSeriesFill) {\n writer.writeStartElement('a', 'solidFill', this.aNamespace);\n writer.writeStartElement('a', 'srgbClr', this.aNamespace);\n if (fill !== '000000') {\n writer.writeAttributeString(undefined, 'val', undefined, fill);\n }\n else {\n writer.writeAttributeString(undefined, 'val', undefined, '595959');\n }\n if (this.chart[chartTypeProperty[this.keywordIndex]] === 'Bubble' && isSeriesFill) {\n writer.writeStartElement('a', 'alpha', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '75000');\n writer.writeEndElement(); // end of alpha\n }\n writer.writeEndElement(); // end of srgbClr\n writer.writeEndElement(); // end of solidFill\n };\n WordExport.prototype.serializeFont = function (writer, fontName) {\n writer.writeStartElement('a', 'latin', this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, fontName);\n writer.writeEndElement(); // end of a:latin\n writer.writeStartElement('a', 'ea', this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, fontName);\n writer.writeEndElement(); // end of a:ea\n writer.writeStartElement('a', 'cs', this.aNamespace);\n writer.writeAttributeString(undefined, 'typeface', undefined, fontName);\n writer.writeEndElement(); // end of a:cs\n };\n WordExport.prototype.parseChartSeriesColor = function (writer, dataPoints, chartType) {\n for (var i = 0; i < dataPoints.length; i++) {\n var data = dataPoints[i];\n writer.writeStartElement('c', 'spPr', this.chartNamespace);\n if (chartType === 'lineChart') {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, '28575');\n writer.writeAttributeString(undefined, 'cap', undefined, 'rnd');\n }\n if (chartType !== 'lineChart') {\n this.serializeChartSolidFill(writer, this.getColor(data[fillProperty[this.keywordIndex]][rgbProperty[this.keywordIndex]]), true);\n }\n else {\n this.serializeChartSolidFill(writer, data[lineProperty[this.keywordIndex]][colorProperty[this.keywordIndex]], true);\n }\n if (chartType !== 'lineChart') {\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement(); // end of a: noFill\n }\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement(); // end of a: round\n writer.writeEndElement(); // end of a: ln\n writer.writeStartElement('a', 'effectLst', this.aNamespace);\n writer.writeEndElement(); // end of a: effectLst\n writer.writeEndElement(); // end of c: spPr\n if (chartType === 'lineChart') {\n var symbolType = 'none';\n var size = 0;\n if (this.chart[chartSeriesProperty[this.keywordIndex]][i].hasOwnProperty(seriesFormatProperty[this.keywordIndex])) {\n symbolType = this.chart[chartSeriesProperty[this.keywordIndex]][i][seriesFormatProperty[this.keywordIndex]][markerStyleProperty[this.keywordIndex]];\n size = this.chart[chartSeriesProperty[this.keywordIndex]][i][seriesFormatProperty[this.keywordIndex]][markerSizeProperty[this.keywordIndex]];\n }\n writer.writeStartElement('c', 'marker', this.chartNamespace);\n writer.writeStartElement('c', 'symbol', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, symbolType.toLowerCase());\n writer.writeEndElement(); // end of a: symbol\n if (this.chart[chartSeriesProperty[this.keywordIndex]][i].hasOwnProperty(seriesFormatProperty[this.keywordIndex])) {\n writer.writeStartElement('c', 'size', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, size.toString());\n writer.writeEndElement(); // end of a: size\n }\n writer.writeEndElement(); // end of a: marker\n }\n }\n };\n WordExport.prototype.parseChartDataPoint = function (writer, series) {\n // data point\n var dataPoints = series[dataPointsProperty[this.keywordIndex]];\n var points = [];\n for (var j = 0; j < dataPoints.length; j++) {\n points.push(dataPoints[j]);\n writer.writeStartElement('c', 'dPt', this.chartNamespace);\n writer.writeStartElement('c', 'idx', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, j.toString());\n writer.writeEndElement(); // end of c:idx\n writer.writeStartElement('c', 'bubble3D', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of c:bubble3D\n this.parseChartSeriesColor(writer, points, this.chart[chartTypeProperty[this.keywordIndex]]);\n writer.writeEndElement(); // end of c:dPt\n points = [];\n }\n };\n // chart data value\n WordExport.prototype.serializeChartCategory = function (writer, chart, cacheType) {\n var chartCategory = chart[chartCategoryProperty[this.keywordIndex]];\n var chartCategoryCount = chartCategory.length;\n writer.writeStartElement('c', 'f', this.chartNamespace);\n writer.writeString('Sheet1!$A$2:$A$' + (chartCategoryCount + 1).toString());\n writer.writeEndElement(); // end of f\n writer.writeStartElement('c', cacheType, this.chartNamespace);\n if (cacheType === 'numCache') {\n writer.writeStartElement('c', 'formatCode', this.chartNamespace);\n writer.writeString('General');\n writer.writeEndElement(); // end of formatCode\n }\n writer.writeStartElement('c', 'ptCount', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, chartCategoryCount.toString());\n writer.writeEndElement(); // end of ptCount\n for (var i = 0; i < chartCategory.length; i++) {\n var category = chartCategory[i];\n writer.writeStartElement('c', 'pt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'idx', undefined, i.toString());\n writer.writeStartElement('c', 'v', this.chartNamespace);\n if (category[categoryXNameProperty[this.keywordIndex]] !== '') {\n writer.writeString(category[categoryXNameProperty[this.keywordIndex]]);\n }\n writer.writeEndElement(); // end of v\n writer.writeEndElement(); // end of pt\n }\n writer.writeEndElement(); // end of cacheType\n };\n // chart value\n WordExport.prototype.serializeChartValue = function (writer, valueSheet, chartType) {\n var isScatterType = (chartType === 'scatterChart' || chartType === 'bubbleChart');\n var valueType = 'val';\n if (isScatterType) {\n valueType = 'yVal';\n }\n this.serializeChartYValue(writer, valueType, valueSheet);\n if (chartType === 'bubbleChart') {\n valueType = 'bubbleSize';\n valueSheet = 'Sheet1!$C$2:$C$';\n this.serializeChartYValue(writer, valueType, valueSheet);\n }\n if (chartType === 'lineChart' || chartType === 'scatterChart') {\n writer.writeStartElement('c', 'smooth', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, '0');\n writer.writeEndElement(); // end of smooth\n }\n };\n WordExport.prototype.serializeChartYValue = function (writer, valueType, valueSheet) {\n var chart = this.chart;\n var chartCategory = chart[chartCategoryProperty[this.keywordIndex]];\n var chartCategoryCount = chartCategory.length;\n writer.writeStartElement('c', valueType, this.chartNamespace);\n writer.writeStartElement('c', 'numRef', this.chartNamespace);\n writer.writeStartElement('c', 'f', this.chartNamespace);\n writer.writeString(valueSheet + (chartCategoryCount + 1).toString());\n writer.writeEndElement(); // end of f\n writer.writeStartElement('c', 'numCache', this.chartNamespace);\n writer.writeStartElement('c', 'formatCode', this.chartNamespace);\n writer.writeString('General');\n writer.writeEndElement(); // end of formatCode\n writer.writeStartElement('c', 'ptCount', this.chartNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, chartCategoryCount.toString());\n writer.writeEndElement(); // end of ptCount\n for (var j = 0; j < chartCategoryCount; j++) {\n var category = chartCategory[j];\n for (var k = 0; k < category[chartDataProperty[this.keywordIndex]].length; k++) {\n if (k === this.seriesCount) {\n var chartData = category[chartDataProperty[this.keywordIndex]][this.seriesCount];\n writer.writeStartElement('c', 'pt', this.chartNamespace);\n writer.writeAttributeString(undefined, 'idx', undefined, j.toString());\n writer.writeStartElement('c', 'v', this.chartNamespace);\n if (valueType !== 'bubbleSize') {\n writer.writeString(chartData[yValueProperty[this.keywordIndex]].toString());\n }\n else {\n writer.writeString(chartData[sizeProperty[this.keywordIndex]].toString());\n }\n writer.writeEndElement(); // end of v\n writer.writeEndElement(); // end of pt\n }\n }\n }\n writer.writeEndElement(); // end of numCache\n writer.writeEndElement(); // end of numRef\n writer.writeEndElement(); // end of val\n };\n // chart type\n WordExport.prototype.chartType = function (chart) {\n var chartType = chart[chartTypeProperty[this.keywordIndex]];\n switch (chartType) {\n case 'Pie':\n chartType = 'pieChart';\n break;\n case 'Doughnut':\n chartType = 'doughnutChart';\n break;\n case 'Scatter_Markers':\n chartType = 'scatterChart';\n break;\n case 'Bubble':\n chartType = 'bubbleChart';\n break;\n }\n if (chartType === 'Area' || chartType === 'Area_Stacked' || chartType === 'Area_Stacked_100') {\n chartType = 'areaChart';\n }\n if (chartType === 'Bar_Stacked_100' || chartType === 'Bar_Stacked' || chartType === 'Bar_Clustered' ||\n chartType === 'Column_Clustered' || chartType === 'Column_Stacked' || chartType === 'Column_Stacked_100') {\n chartType = 'barChart';\n }\n if (chartType === 'Line' || chartType === 'Line_Markers' || chartType === 'Line_Markers_Stacked' || chartType === 'Line_Stacked'\n || chartType === 'Line_Markers_Stacked_100' || chartType === 'Line_Stacked_100') {\n chartType = 'lineChart';\n }\n return chartType;\n };\n // chart group\n WordExport.prototype.chartGrouping = function (type) {\n var grouping = 'standard';\n if (type === 'Bar_Stacked' || type === 'Column_Stacked' || type === 'Area_Stacked'\n || type === 'Line_Stacked' || type === 'Line_Markers_Stacked') {\n grouping = 'stacked';\n }\n else if (type === 'Bar_Stacked_100' || type === 'Column_Stacked_100' ||\n type === 'Area_Stacked_100' || type === 'Line_Stacked_100' ||\n type === 'Line_Markers_Stacked_100') {\n grouping = 'percentStacked';\n }\n else if (type === 'Bar_Clustered' || type === 'Column_Clustered') {\n grouping = 'clustered';\n }\n return grouping;\n };\n // chart legend position\n WordExport.prototype.chartLegendPosition = function (chart) {\n var legendPosition = chart[positionProperty[this.keywordIndex]];\n switch (legendPosition) {\n case 'Top':\n legendPosition = 't';\n break;\n case 'Bottom':\n legendPosition = 'b';\n break;\n case 'Left':\n legendPosition = 'l';\n break;\n case 'Right':\n legendPosition = 'r';\n break;\n case 'Corner':\n legendPosition = 'tr';\n break;\n default:\n legendPosition = 'b';\n break;\n }\n return legendPosition;\n };\n // update the chard id\n WordExport.prototype.updatechartId = function (chart) {\n var id = '';\n if (id === '') {\n id = this.addChartRelation(this.documentCharts, chart);\n }\n return id;\n };\n // adds the chart relation.\n WordExport.prototype.addChartRelation = function (chartCollection, chart) {\n var relationId = '';\n relationId = this.getNextRelationShipID();\n chartCollection.add(relationId, chart);\n return relationId;\n };\n /**\n * @private\n */\n WordExport.prototype.startsWith = function (sourceString, startString) {\n return startString.length > 0 && sourceString.substring(0, startString.length) === startString;\n };\n WordExport.prototype.serializeShapeDrawingGraphics = function (writer, shape) {\n var val = shape[autoShapeTypeProperty[this.keywordIndex]];\n var id = shape[shapeIdProperty[this.keywordIndex]];\n this.serializeShapeWrapStyle(writer, shape);\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n writer.writeAttributeString(undefined, 'name', undefined, shape[nameProperty[this.keywordIndex]]);\n writer.writeAttributeString(undefined, 'title', undefined, shape[titleProperty[this.keywordIndex]]);\n writer.writeEndElement();\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.wpShapeNamespace);\n writer.writeStartElement('wps', 'wsp', this.wpShapeNamespace);\n writer.writeStartElement('wps', 'cNvCnPr', this.wpShapeNamespace);\n writer.writeStartElement('a', 'cxnSpLocks', this.aNamespace);\n writer.writeAttributeString(undefined, 'noChangeShapeType', undefined, '1');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('wps', 'spPr', this.wpShapeNamespace);\n writer.writeAttributeString(undefined, 'bwMode', undefined, 'auto');\n writer.writeStartElement('a', 'xfrm', this.aNamespace);\n writer.writeStartElement('a', 'off', this.aNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('a', 'ext', this.aNamespace);\n var cx = Math.round((shape[widthProperty[this.keywordIndex]] * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round((shape[heightProperty[this.keywordIndex]] * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'prstGeom', this.aNamespace);\n if (val === (this.keywordIndex == 1 ? 3 : 'StraightConnector')) {\n writer.writeAttributeString(undefined, 'prst', undefined, 'straightConnector1');\n }\n else if (val === (this.keywordIndex == 1 ? 2 : 'RoundedRectangle')) {\n writer.writeAttributeString(undefined, 'prst', undefined, 'roundRect');\n }\n else {\n writer.writeAttributeString(undefined, 'prst', undefined, 'rect');\n }\n writer.writeStartElement('a', 'avLst', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n if (shape[fillFormatProperty[this.keywordIndex]] && shape[fillFormatProperty[this.keywordIndex]][colorProperty[this.keywordIndex]] && HelperMethods.parseBoolValue(shape[fillFormatProperty[this.keywordIndex]][fillProperty[this.keywordIndex]])) {\n writer.writeStartElement('a', 'solidFill', this.aNamespace);\n writer.writeStartElement('a', 'srgbClr', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.getColor(shape[fillFormatProperty[this.keywordIndex]][colorProperty[this.keywordIndex]]));\n writer.writeEndElement();\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement();\n }\n var lineWeight = shape[lineFormatProperty[this.keywordIndex]][weightProperty[this.keywordIndex]] ? shape[lineFormatProperty[this.keywordIndex]][weightProperty[this.keywordIndex]] * this.emusPerPoint : this.emusPerPoint;\n writer.writeStartElement('a', 'ln', this.aNamespace);\n writer.writeAttributeString(undefined, 'w', undefined, Math.round(lineWeight).toString());\n if ((!isNullOrUndefined(shape[lineFormatProperty[this.keywordIndex]][lineFormatTypeProperty[this.keywordIndex]]) && shape[lineFormatProperty[this.keywordIndex]][lineFormatTypeProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 3 : 'None'))\n && HelperMethods.parseBoolValue(shape[lineFormatProperty[this.keywordIndex]][lineProperty[this.keywordIndex]])) {\n writer.writeStartElement('a', 'solidFill', this.aNamespace);\n writer.writeStartElement('a', 'srgbClr', this.aNamespace);\n writer.writeAttributeString(undefined, 'val', undefined, this.getColor(shape[lineFormatProperty[this.keywordIndex]][colorProperty[this.keywordIndex]]));\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'round', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'headEnd', this.aNamespace);\n writer.writeEndElement();\n writer.writeStartElement('a', 'tailEnd', this.aNamespace);\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement('a', 'noFill', this.aNamespace);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n writer.writeEndElement();\n if (val === (this.keywordIndex == 1 ? 1 : 'Rectangle') || val === (this.keywordIndex == 1 ? 2 : 'RoundedRectangle')) {\n writer.writeStartElement('wps', 'txbx', this.wpShapeNamespace);\n writer.writeStartElement(undefined, 'txbxContent', this.wNamespace);\n this.serializeBodyItems(writer, shape[textFrameProperty[this.keywordIndex]][blocksProperty[this.keywordIndex]], true);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n writer.writeStartElement('wps', 'bodyPr', this.wpShapeNamespace);\n if (!isNullOrUndefined(shape[textFrameProperty[this.keywordIndex]])) {\n var margin = void 0;\n if (shape[textFrameProperty[this.keywordIndex]][leftMarginProperty[this.keywordIndex]] >= 0) {\n margin = Math.round(shape[textFrameProperty[this.keywordIndex]][leftMarginProperty[this.keywordIndex]] * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'lIns', undefined, margin);\n }\n if (shape[textFrameProperty[this.keywordIndex]][topMarginProperty[this.keywordIndex]] >= 0) {\n margin = Math.round(shape[textFrameProperty[this.keywordIndex]][topMarginProperty[this.keywordIndex]] * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'tIns', undefined, margin);\n }\n if (shape[textFrameProperty[this.keywordIndex]][rightMarginProperty[this.keywordIndex]] >= 0) {\n margin = Math.round(shape[textFrameProperty[this.keywordIndex]][rightMarginProperty[this.keywordIndex]] * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'rIns', undefined, margin);\n }\n if (shape[textFrameProperty[this.keywordIndex]][bottomMarginProperty[this.keywordIndex]] >= 0) {\n margin = Math.round(shape[textFrameProperty[this.keywordIndex]][bottomMarginProperty[this.keywordIndex]] * this.emusPerPoint).toString();\n writer.writeAttributeString(undefined, 'bIns', undefined, margin);\n }\n if (shape[textFrameProperty[this.keywordIndex]][textVerticalAlignmentProperty[this.keywordIndex]]) {\n var vert = void 0;\n if (this.keywordIndex == 1) {\n vert = HelperMethods.getTextVerticalAlignment(shape[textFrameProperty[this.keywordIndex]][textVerticalAlignmentProperty[this.keywordIndex]]).toString().toLowerCase();\n }\n else {\n vert = shape[textFrameProperty[this.keywordIndex]][textVerticalAlignmentProperty[this.keywordIndex]].toString().toLowerCase();\n }\n writer.writeAttributeString(undefined, 'anchor', undefined, this.getTextVerticalAlignmentProperty(vert));\n }\n writer.writeAttributeString(undefined, 'anchorCtr', undefined, '0');\n }\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.getTextVerticalAlignmentProperty = function (vert) {\n switch (vert) {\n case 'top':\n return 't';\n case 'middle':\n case 'center':\n return 'ctr';\n case 'bottom':\n return 'b';\n default:\n return vert;\n }\n };\n WordExport.prototype.serializeShapeWrapStyle = function (writer, shape) {\n var wrappingStyle = this.keywordIndex == 1 ? this.getTextWrappingStyle(shape[textWrappingStyleProperty[this.keywordIndex]]) : shape[textWrappingStyleProperty[this.keywordIndex]];\n if (wrappingStyle !== 'Inline') {\n var textWrappingStyle = 'wrapNone';\n if (wrappingStyle && wrappingStyle !== 'InFrontOfText' && wrappingStyle !== 'Behind') {\n textWrappingStyle = 'wrap' + wrappingStyle;\n if (wrappingStyle === 'Tight') {\n textWrappingStyle = 'wrap' + 'Square';\n }\n }\n writer.writeStartElement('wp', textWrappingStyle, this.wpNamespace);\n if (wrappingStyle && wrappingStyle !== 'InFrontOfText' && wrappingStyle !== 'Behind' &&\n !isNullOrUndefined(shape[textWrappingTypeProperty[this.keywordIndex]])) {\n var wrapType = this.keywordIndex == 1 ? this.getTextWrappingType(shape[textWrappingTypeProperty[this.keywordIndex]]) : shape[textWrappingTypeProperty[this.keywordIndex]] === 'Both' ? 'bothSides' : shape[textWrappingTypeProperty[this.keywordIndex]].toLowerCase();\n writer.writeAttributeString(undefined, 'wrapText', undefined, wrapType);\n }\n writer.writeEndElement();\n }\n };\n // Serialize the graphics element for pictures.\n WordExport.prototype.serializeDrawingGraphics = function (writer, picture) {\n var id = '';\n var format;\n var imageStringInfo = this.getBase64ImageString(picture);\n var imageString = imageStringInfo.imageString;\n if (HelperMethods.parseBoolValue(picture[isMetaFileProperty[this.keywordIndex]])) {\n format = HelperMethods.formatClippedString(imageStringInfo.metaFileImageString).extension;\n if (format !== '.svg') {\n imageString = imageStringInfo.metaFileImageString;\n }\n }\n id = this.updateShapeId(picture, false);\n // picture.ShapeId = this.getNextDocPrID();\n // Processing picture\n writer.writeStartElement('wp', 'docPr', this.wpNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, (this.mDocPrID++).toString());\n if (!isNullOrUndefined(picture[alternativeTextProperty[this.keywordIndex]])) {\n writer.writeAttributeString(undefined, 'descr', undefined, picture[alternativeTextProperty[this.keywordIndex]]);\n }\n writer.writeAttributeString(undefined, 'name', undefined, !isNullOrUndefined(picture[nameProperty[this.keywordIndex]]) ? picture[nameProperty[this.keywordIndex]] : '');\n if (!isNullOrUndefined(picture[titleProperty[this.keywordIndex]]))\n writer.writeAttributeString(undefined, 'title', undefined, picture[titleProperty[this.keywordIndex]]);\n // else\n // writer.writeAttributeString(undefined, 'title', undefined, '');\n // if (!picture.Visible)\n // m_writer.WriteAttributeString('hidden', '1');\n // SerializePictureHyperlink(picture);\n writer.writeEndElement();\n writer.writeStartElement('a', 'graphic', this.aNamespace);\n writer.writeStartElement('a', 'graphicData', this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, this.pictureNamespace);\n writer.writeStartElement('pic', 'pic', this.pictureNamespace);\n writer.writeStartElement('pic', 'nvPicPr', this.pictureNamespace);\n writer.writeStartElement('pic', 'cNvPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'id', undefined, '0');\n writer.writeAttributeString(undefined, 'name', undefined, '');\n writer.writeAttributeString(undefined, 'descr', undefined, '');\n writer.writeEndElement();\n writer.writeStartElement('pic', 'cNvPicPr', this.pictureNamespace);\n writer.writeStartElement('a', 'picLocks', this.aNamespace);\n writer.writeAttributeString(undefined, 'noChangeAspect', undefined, '1');\n writer.writeAttributeString(undefined, 'noChangeArrowheads', undefined, '1');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'blipFill', this.pictureNamespace);\n writer.writeStartElement('a', 'blip', this.aNamespace);\n if (this.startsWith(imageString, 'data:image')) {\n writer.writeAttributeString('r', 'embed', this.rNamespace, id);\n }\n else {\n if (this.documentImages.containsKey(id)) {\n //Remove the image document images collection for this particular key\n //If the picture image data has href means MS Word contains the image in media folder as well as \n //it is having external relationship id\n // if (!this.startsWith(picture.imageString, 'data:image')) {\n this.documentImages.remove(id);\n this.externalImages.add(id, imageString);\n writer.writeAttributeString(undefined, 'link', this.rNamespace, id);\n if (!isNullOrUndefined(imageStringInfo.metaFileImageString) && (this.startsWith(imageString, \"https://\") || this.startsWith(imageString, \"http://\") || this.startsWith(imageString, \"file://\"))) {\n var newRId = this.getNextRelationShipID();\n this.documentImages.add(newRId, imageStringInfo.metaFileImageString);\n writer.writeAttributeString('r', 'embed', this.rNamespace, newRId);\n }\n }\n }\n if (format === '.svg') {\n this.serializeBlipExtensions(writer, picture);\n }\n //End Element Blip\n writer.writeEndElement();\n if (!isNullOrUndefined(picture[topProperty[this.keywordIndex]]) && picture[topProperty[this.keywordIndex]] !== 0 ||\n !isNullOrUndefined(picture[bottomProperty[this.keywordIndex]]) && picture[bottomProperty[this.keywordIndex]] !== 0 ||\n !isNullOrUndefined(picture[leftProperty[this.keywordIndex]]) && picture[leftProperty[this.keywordIndex]] !== 0 ||\n !isNullOrUndefined(picture[rightProperty[this.keywordIndex]]) && picture[rightProperty[this.keywordIndex]] !== 0) {\n writer.writeStartElement('a', 'srcRect', this.aNamespace);\n var l = Math.round(picture[leftProperty[this.keywordIndex]] * 1000);\n writer.writeAttributeString(undefined, 'l', undefined, l.toString());\n var t = Math.round(picture[topProperty[this.keywordIndex]] * 1000);\n writer.writeAttributeString(undefined, 't', undefined, t.toString());\n var r = Math.round(picture[rightProperty[this.keywordIndex]] * 1000);\n writer.writeAttributeString(undefined, 'r', undefined, r.toString());\n var b = Math.round(picture[bottomProperty[this.keywordIndex]] * 1000);\n writer.writeAttributeString(undefined, 'b', undefined, b.toString());\n writer.writeEndElement();\n }\n writer.writeStartElement('a', 'stretch', this.aNamespace);\n writer.writeStartElement('a', 'fillRect', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('pic', 'spPr', this.pictureNamespace);\n writer.writeAttributeString(undefined, 'bwMode', undefined, 'auto');\n writer.writeStartElement('a', 'xfrm', this.aNamespace);\n // if (picture.Rotation !== 0)\n // m_writer.WriteAttributeString('rot', picture.Rotation.ToString());\n writer.writeStartElement('a', 'off', this.aNamespace);\n writer.writeAttributeString(undefined, 'x', undefined, '0');\n writer.writeAttributeString(undefined, 'y', undefined, '0');\n writer.writeEndElement();\n writer.writeStartElement('a', 'ext', this.aNamespace);\n var cx = Math.round((picture[widthProperty[this.keywordIndex]] * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cx', undefined, cx.toString());\n var cy = Math.round((picture[heightProperty[this.keywordIndex]] * this.emusPerPoint));\n writer.writeAttributeString(undefined, 'cy', undefined, cy.toString());\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeStartElement('a', 'prstGeom', this.aNamespace);\n writer.writeAttributeString(undefined, 'prst', undefined, 'rect');\n writer.writeStartElement('a', 'avLst', this.aNamespace);\n writer.writeEndElement();\n writer.writeEndElement();\n //When the picture border has been added next to effect list\n //if not, Picture border has not been preserved\n // if (picture.HasBorder)\n // {\n // if (picture.TextWrappingStyle === TextWrappingStyle.Inline && picture.IsShape)\n // SerializeInlineShapeLine(picture.PictureShape);\n // else\n // SerializeShapeLine(picture.PictureShape);\n // }\n // if (picture.DocxProps.length > 0)\n // SerializeDocxProps(picture.DocxProps, 'effectLst');\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n WordExport.prototype.serializeBlipExtensions = function (writer, picture) {\n writer.writeStartElement('a', 'extLst', this.aNamespace);\n writer.writeStartElement('a', \"ext\", this.aNamespace);\n writer.writeAttributeString(undefined, 'uri', undefined, '{96DAC541-7B7A-43D3-8B79-37D633B846F1}');\n writer.writeStartElement(\"asvg\", \"svgBlip\", this.svgNamespace);\n var id = this.updateShapeId(picture, true);\n writer.writeAttributeString(\"r\", \"embed\", undefined, id);\n writer.writeEndElement();\n writer.writeEndElement();\n writer.writeEndElement();\n };\n /// Update the shape id.\n WordExport.prototype.updateShapeId = function (picture, isSvgData) {\n var id = '';\n var tOwner = this.paragraph;\n // Adding picture byte data to the corresponding picture collection \n // depending on its owner subdocument\n if (this.headerFooter) {\n id = this.updateHFImageRels(this.headerFooter, picture, isSvgData);\n }\n else {\n if (id === '') {\n if (tOwner.hasOwnProperty(sectionFormatProperty[this.keywordIndex]) || tOwner.hasOwnProperty(inlinesProperty[this.keywordIndex])) {\n id = this.addImageRelation(!isSvgData ? this.documentImages : this.svgImages, picture, isSvgData);\n // if (owner is WFootnote)\n // {\n // if ((owner as WFootnote).FootnoteType === FootnoteType.Footnote)\n // id = AddImageRelation(FootnoteImages, picture.ImageRecord);\n // else\n // id = AddImageRelation(EndnoteImages, picture.ImageRecord);\n // }\n // if (owner is WComment)\n // id = AddImageRelation(CommentImages, picture.ImageRecord);\n }\n }\n }\n return id;\n };\n // Adds the image relation.\n WordExport.prototype.addImageRelation = function (imageCollection, image, isSvgData) {\n var relationId = '';\n var index = isSvgData ? this.svgImageRelationIds.keys.indexOf(parseInt(image[imageStringProperty[this.keywordIndex]])) : this.imageRelationIds.keys.indexOf(parseInt(image[imageStringProperty[this.keywordIndex]]));\n if (index < 0 || this.isHeaderFooter) {\n relationId = this.getNextRelationShipID();\n isSvgData ? this.svgImageRelationIds.add(parseInt(image[imageStringProperty[this.keywordIndex]]), relationId) : this.imageRelationIds.add(parseInt(image[imageStringProperty[this.keywordIndex]]), relationId);\n }\n else {\n relationId = isSvgData ? this.svgImageRelationIds.get(parseInt(image[imageStringProperty[this.keywordIndex]])) : this.imageRelationIds.get(parseInt(image[imageStringProperty[this.keywordIndex]]));\n }\n imageCollection.add(relationId, image);\n return relationId;\n };\n // Update the HeaderFooter image relations.\n WordExport.prototype.updateHFImageRels = function (hf, image, isSvgImage) {\n var id = '';\n // UpdateImages(image);\n var headerId = '';\n var types = this.headersFooters.keys;\n for (var i = 0; i < types.length; i++) {\n var hfColl = this.headersFooters.get(types[i]);\n var hfKeys = hfColl.keys;\n for (var j = 0; j < hfKeys.length; j++) {\n if (hfColl.get(hfKeys[j]) === hf) {\n headerId = hfKeys[j];\n var headerImages = void 0;\n if (isSvgImage) {\n if (this.headerFooterSvgImages.containsKey(headerId)) {\n headerImages = this.headerFooterSvgImages.get(headerId);\n id = this.addImageRelation(headerImages, image, true);\n }\n else {\n headerImages = new Dictionary();\n id = this.addImageRelation(headerImages, image, true);\n this.headerFooterSvgImages.add(headerId, headerImages);\n }\n }\n else {\n if (this.headerFooterImages.containsKey(headerId)) {\n headerImages = this.headerFooterImages.get(headerId);\n id = this.addImageRelation(headerImages, image, false);\n }\n else {\n headerImages = new Dictionary();\n id = this.addImageRelation(headerImages, image, false);\n this.headerFooterImages.add(headerId, headerImages);\n }\n }\n }\n }\n }\n return id;\n };\n // Serialize the table\n WordExport.prototype.serializeTable = function (writer, table) {\n if (isNullOrUndefined(this.keywordIndex)) {\n this.keywordIndex = 0;\n }\n if (table[rowsProperty[this.keywordIndex]].length <= 0) {\n return;\n }\n var owner = this.table;\n this.table = table;\n writer.writeStartElement(undefined, 'tbl', this.wNamespace);\n var tableFormat = table[rowsProperty[this.keywordIndex]][0][rowFormatProperty[this.keywordIndex]];\n this.serializeTableFormat(writer, tableFormat, table);\n this.serializeTableGrid(writer, table);\n var mVerticalMerge = new Dictionary();\n var mHorizontalMerge = new Dictionary();\n var cellFormats = new Dictionary();\n var rows = table[rowsProperty[this.keywordIndex]];\n if (rows.length > 0) {\n for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n var row = rows[rowIndex];\n if (row[cellsProperty[this.keywordIndex]].length > 0) {\n if (row.hasOwnProperty(contentControlPropertiesProperty[this.keywordIndex])) {\n this.serializeContentControl(writer, row[contentControlPropertiesProperty[this.keywordIndex]], row);\n continue;\n }\n var owner_1 = this.row;\n this.row = row;\n writer.writeStartElement(undefined, 'tr', this.wNamespace);\n this.serializeRowFormat(writer, row);\n var cells = row[cellsProperty[this.keywordIndex]];\n var cellLength = cells.length;\n var prevColIndex = 0;\n for (var i = 0; i < cellLength; i++) {\n var cell = cells[i];\n var columnIndex = cell[columnIndexProperty[this.keywordIndex]];\n if (cell.hasOwnProperty(contentControlPropertiesProperty[this.keywordIndex])) {\n this.serializeContentControl(writer, cell[contentControlPropertiesProperty[this.keywordIndex]], cell);\n continue;\n }\n var cellFormat = cell[cellFormatProperty[this.keywordIndex]];\n if ((columnIndex - prevColIndex) > 0) {\n var checkIndex = i === 0 ? 0 : (prevColIndex + 1);\n for (var k = checkIndex; k < columnIndex; k++) {\n if (mVerticalMerge.containsKey(k)) {\n var format = this.getMergeCellFormat(cellFormat, cellFormats.get(k), k < cell[columnIndexProperty[this.keywordIndex]]);\n this.serializeTableCell(writer, cell, format, false);\n mVerticalMerge.set(k, mVerticalMerge.get(k) - 1);\n if (mVerticalMerge.get(k) === 1) {\n mVerticalMerge.remove(k);\n cellFormats.remove(k);\n if (mHorizontalMerge.containsKey(k)) {\n mHorizontalMerge.remove(k);\n }\n }\n if (mHorizontalMerge.containsKey(k)) {\n prevColIndex += mHorizontalMerge.get(k) - 1;\n k += mHorizontalMerge.get(k);\n if (k > 0) {\n k--;\n }\n }\n }\n }\n }\n prevColIndex = columnIndex;\n if (cellFormat[rowSpanProperty[this.keywordIndex]] > 1) {\n mVerticalMerge.add(columnIndex, cellFormat[rowSpanProperty[this.keywordIndex]]);\n cellFormats.add(columnIndex, cellFormat);\n }\n this.serializeTableCell(writer, cell, cellFormat, true);\n if (cellFormat[columnSpanProperty[this.keywordIndex]] > 1 && cellFormat[rowSpanProperty[this.keywordIndex]] > 1) {\n mHorizontalMerge.add(columnIndex, cellFormat[columnSpanProperty[this.keywordIndex]]);\n }\n for (var j = columnIndex + 1;; j++) {\n if (mVerticalMerge.containsKey(j)) {\n var mergeFormat = this.getMergeCellFormat(cellFormat, cellFormats.get(j), j < cell[columnIndexProperty[this.keywordIndex]]);\n this.serializeTableCell(writer, cell, mergeFormat, false);\n mVerticalMerge.set(j, mVerticalMerge.get(j) - 1);\n prevColIndex++;\n if (mVerticalMerge.get(j) === 1) {\n mVerticalMerge.remove(j);\n cellFormats.remove(j);\n if (mHorizontalMerge.containsKey(j)) {\n mHorizontalMerge.remove(j);\n }\n }\n if (mHorizontalMerge.containsKey(j)) {\n prevColIndex += mHorizontalMerge.get(j) - 1;\n j += mHorizontalMerge.get(j);\n }\n }\n else if (!(i === (cellLength - 1) && j < table[columnCountProperty[this.keywordIndex]])) {\n break;\n }\n }\n }\n if (!this.isBookmarkAtRowEnd) {\n writer.writeEndElement(); //end od table row 'tr'\n }\n this.isBookmarkAtRowEnd = false;\n this.row = owner_1;\n }\n }\n }\n writer.writeEndElement();\n this.table = owner;\n };\n WordExport.prototype.getMergeCellFormat = function (cellFormat, mergedCellFormat, before) {\n var format = mergedCellFormat;\n if (before) {\n format[bordersProperty[this.keywordIndex]][rightProperty[this.keywordIndex]] = cellFormat[bordersProperty[this.keywordIndex]][leftProperty[this.keywordIndex]];\n }\n else {\n format[bordersProperty[this.keywordIndex]][leftProperty[this.keywordIndex]] = cellFormat[bordersProperty[this.keywordIndex]][rightProperty[this.keywordIndex]];\n }\n return format;\n };\n WordExport.prototype.serializeTableCell = function (xmlWriter, cell, cellFormat, mergeStart) {\n var owner = this.blockOwner;\n this.blockOwner = cell;\n xmlWriter.writeStartElement(undefined, 'tc', this.wNamespace);\n xmlWriter.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeCellWidth(xmlWriter, cellFormat);\n this.serializeCellMargins(xmlWriter, cellFormat);\n xmlWriter.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(xmlWriter, cellFormat[bordersProperty[this.keywordIndex]], 8, false);\n xmlWriter.writeEndElement(); // end of tcBorders\n this.serializeShading(xmlWriter, cell[cellFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]]);\n this.serializeTableCellDirection(xmlWriter, cellFormat);\n this.serializeCellVerticalAlign(xmlWriter, cellFormat[verticalAlignmentProperty[this.keywordIndex]]);\n if (cellFormat[columnSpanProperty[this.keywordIndex]] > 1) {\n var num = cellFormat[columnSpanProperty[this.keywordIndex]];\n xmlWriter.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n xmlWriter.writeAttributeString('w', 'val', this.wNamespace, num.toString());\n xmlWriter.writeEndElement();\n }\n if (cellFormat[rowSpanProperty[this.keywordIndex]] > 1) {\n xmlWriter.writeStartElement(undefined, 'vMerge', this.wNamespace);\n xmlWriter.writeAttributeString('w', 'val', this.wNamespace, mergeStart ? 'restart' : 'continue');\n xmlWriter.writeEndElement(); // end of vMerge\n }\n xmlWriter.writeEndElement(); // end of tcPr\n if (cell && cell[blocksProperty[this.keywordIndex]].length > 0) {\n var itemIndex = 0;\n var item = undefined;\n while (itemIndex < cell[blocksProperty[this.keywordIndex]].length) {\n item = cell[blocksProperty[this.keywordIndex]][itemIndex];\n this.serializeBodyItem(xmlWriter, item, false);\n itemIndex += 1;\n }\n }\n else {\n xmlWriter.writeStartElement(undefined, 'p', this.wNamespace);\n xmlWriter.writeStartElement(undefined, 'pPr', this.wNamespace);\n xmlWriter.writeStartElement(undefined, 'pStyle', this.wNamespace);\n xmlWriter.writeAttributeString('w', 'val', this.wNamespace, 'Normal');\n xmlWriter.writeEndElement(); //end of pStyle\n xmlWriter.writeEndElement(); //end of pPr\n xmlWriter.writeEndElement(); //end of P\n }\n if (!this.isBookmarkAtRowEnd) {\n xmlWriter.writeEndElement(); //end of table cell 'tc' \n }\n this.blockOwner = owner;\n };\n // Serialize the table grid\n WordExport.prototype.serializeTableGrid = function (writer, table) {\n writer.writeStartElement(undefined, 'tblGrid', this.wNamespace);\n if (table[gridProperty[this.keywordIndex]].length !== 0) {\n this.serializeGridColumns(writer, table[gridProperty[this.keywordIndex]]);\n }\n writer.writeEndElement();\n };\n // Serialize the table rows\n WordExport.prototype.serializeTableRows = function (writer, rows) {\n var mVerticalMerge = new Dictionary();\n if (rows.length > 0) {\n for (var i = 0; i < rows.length; i++) {\n var row = rows[i];\n if (row[cellsProperty[this.keywordIndex]].length > 0) {\n if (row.hasOwnProperty(contentControlPropertiesProperty[this.keywordIndex])) {\n this.serializeContentControl(writer, row[contentControlPropertiesProperty[this.keywordIndex]], row);\n continue;\n }\n this.serializeRow(writer, row, mVerticalMerge);\n }\n }\n }\n };\n // Serialize the table row\n WordExport.prototype.serializeRow = function (writer, row, mVerticalMerge) {\n var owner = this.row;\n this.row = row;\n writer.writeStartElement(undefined, 'tr', this.wNamespace);\n this.serializeRowFormat(writer, row);\n this.serializeCells(writer, row[cellsProperty[this.keywordIndex]], mVerticalMerge);\n writer.writeEndElement(); //end od table row 'tr'\n this.row = owner;\n };\n // Serialize the row format\n WordExport.prototype.serializeRowFormat = function (writer, row) {\n this.serializeRowMargins(writer, row[rowFormatProperty[this.keywordIndex]]);\n writer.writeStartElement(undefined, 'trPr', this.wNamespace);\n //Serialize Row Height\n if (row[rowFormatProperty[this.keywordIndex]][heightProperty[this.keywordIndex]] > 0) {\n writer.writeStartElement(undefined, 'trHeight', this.wNamespace);\n if (row[rowFormatProperty[this.keywordIndex]][heightTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 1 : 'Exactly')) {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'exact');\n }\n else if (row[rowFormatProperty[this.keywordIndex]][heightTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'AtLeast')) {\n writer.writeAttributeString('w', 'hRule', this.wNamespace, 'atLeast');\n }\n var height = this.roundToTwoDecimal(row[rowFormatProperty[this.keywordIndex]][heightProperty[this.keywordIndex]] * this.twentiethOfPoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, height);\n writer.writeEndElement();\n }\n var rowFormat = row[rowFormatProperty[this.keywordIndex]];\n // //Serialize 'gridBefore' element\n var gridBefore = rowFormat[gridBeforeProperty[this.keywordIndex]];\n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'gridBefore', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridBefore.toString());\n writer.writeEndElement();\n }\n // //Serialize 'gridAfter' element\n var gridAfter = rowFormat[gridAfterProperty[this.keywordIndex]];\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'gridAfter', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, gridAfter.toString());\n writer.writeEndElement();\n }\n // //Serialize 'wBefore' element \n if (gridBefore > 0) {\n writer.writeStartElement(undefined, 'wBefore', this.wNamespace);\n switch (rowFormat[gridBeforeWidthTypeProperty[this.keywordIndex]]) {\n case 'Percent':\n case 1:\n var width = this.roundToTwoDecimal(rowFormat[gridBeforeWidthProperty[this.keywordIndex]] * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'w', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n case 2:\n var pointWidth = this.roundToTwoDecimal(rowFormat[gridBeforeWidthProperty[this.keywordIndex]] * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'w', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'wAfter' element\n if (gridAfter > 0) {\n writer.writeStartElement(undefined, 'wAfter', this.wNamespace);\n switch (rowFormat[gridAfterWidthTypeProperty[this.keywordIndex]]) {\n case 'Percent':\n case 1:\n var width = this.roundToTwoDecimal(rowFormat[gridAfterWidthProperty[this.keywordIndex]] * this.percentageFactor).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, width);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'pct');\n break;\n case 'Point':\n case 2:\n var pointWidth = this.roundToTwoDecimal(rowFormat[gridAfterWidthProperty[this.keywordIndex]] * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'val', this.wNamespace, pointWidth);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'dxa');\n break;\n }\n writer.writeEndElement();\n }\n //Serialize 'cantSplit' element \n if (!HelperMethods.parseBoolValue(rowFormat[allowBreakAcrossPagesProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'cantSplit', this.wNamespace);\n writer.writeEndElement();\n }\n // //Serialize 'tblHeader' element \n if (HelperMethods.parseBoolValue(rowFormat[isHeaderProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'tblHeader', this.wNamespace);\n writer.writeEndElement();\n }\n //serialize revision\n if (!isNullOrUndefined(rowFormat[revisionIdsProperty[this.keywordIndex]]) && rowFormat[revisionIdsProperty[this.keywordIndex]].length > 0) {\n this.serializeRevisionStart(writer, rowFormat, undefined);\n this.serializeRevisionEnd(writer, rowFormat, undefined);\n }\n writer.writeEndElement();\n };\n // serialize the table cells\n WordExport.prototype.serializeCells = function (writer, cells, mVerticalMerge) {\n for (var i = 0; i < cells.length; i++) {\n if (cells[i].hasOwnProperty(contentControlPropertiesProperty[this.keywordIndex])) {\n this.serializeContentControl(writer, cells[i][contentControlPropertiesProperty[this.keywordIndex]], cells[i]);\n continue;\n }\n this.serializeCell(writer, cells[i], mVerticalMerge);\n }\n };\n // Serialize the table cell\n WordExport.prototype.serializeCell = function (writer, cell, mVerticalMerge) {\n var owner = this.blockOwner;\n this.blockOwner = cell;\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n mVerticalMerge = this.serializeCellFormat(writer, cell[cellFormatProperty[this.keywordIndex]], true, true, mVerticalMerge);\n if (cell[blocksProperty[this.keywordIndex]].length > 0) {\n var itemIndex = 0;\n var item = undefined;\n while (itemIndex < cell[blocksProperty[this.keywordIndex]].length) {\n item = cell[blocksProperty[this.keywordIndex]][itemIndex];\n this.serializeBodyItem(writer, item, false);\n itemIndex += 1;\n }\n }\n else {\n writer.writeStartElement(undefined, 'p', this.wNamespace);\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'Normal');\n writer.writeEndElement(); //end of pStyle\n writer.writeEndElement(); //end of pPr\n writer.writeEndElement(); //end of P\n }\n writer.writeEndElement(); //end of table cell 'tc' \n var increment = 1;\n // let count: number = 0;\n if (mVerticalMerge.containsKey((cell[columnIndexProperty[this.keywordIndex]] + cell[cellFormatProperty[this.keywordIndex]][columnSpanProperty[this.keywordIndex]] - 1) + increment) && this.row[cellsProperty[this.keywordIndex]].length === 1) {\n var length_1 = mVerticalMerge.keys[mVerticalMerge.keys.length - 1];\n while (increment <= length_1) {\n increment = this.createCellForMerge(writer, cell, mVerticalMerge, increment);\n increment++;\n }\n }\n else {\n this.createCellForMerge(writer, cell, mVerticalMerge, increment);\n }\n this.blockOwner = owner;\n };\n WordExport.prototype.createCellForMerge = function (writer, cell, mVerticalMerge, increment) {\n while (mVerticalMerge.containsKey((cell[columnIndexProperty[this.keywordIndex]] + cell[cellFormatProperty[this.keywordIndex]][columnSpanProperty[this.keywordIndex]] - 1) + increment)\n && (((this.row[cellsProperty[this.keywordIndex]].indexOf(cell) === this.row[cellsProperty[this.keywordIndex]].length - 1) || this.row[cellsProperty[this.keywordIndex]].indexOf(cell) === cell[columnIndexProperty[this.keywordIndex]]))\n && cell.nextNode === undefined) {\n var collKey = (cell[columnIndexProperty[this.keywordIndex]] + cell[cellFormatProperty[this.keywordIndex]][columnSpanProperty[this.keywordIndex]] - 1) + increment;\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n var endProperties = true;\n if (!isNullOrUndefined(this.spanCellFormat)) {\n endProperties = false;\n mVerticalMerge = this.serializeCellFormat(writer, this.spanCellFormat, false, endProperties, mVerticalMerge);\n }\n else {\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n endProperties = false;\n }\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n if (isNullOrUndefined(this.spanCellFormat)) {\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cell[cellFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]], 8, false);\n writer.writeEndElement();\n }\n if (!endProperties) {\n writer.writeEndElement();\n }\n mVerticalMerge = this.checkMergeCell(collKey, mVerticalMerge);\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement(); //end of P\n writer.writeEndElement(); //end of table cell 'tc' \n increment++;\n //count++;\n }\n return increment;\n };\n // Serialize the cell formatting\n WordExport.prototype.serializeCellFormat = function (writer, cellFormat, ensureMerge, endProperties, mVerticalMerge) {\n var cell = this.blockOwner;\n //Get the table fomat\n var tf = this.table[tableFormatProperty[this.keywordIndex]];\n //Get the row format\n var rf = this.row[rowFormatProperty[this.keywordIndex]];\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n //w:cnfStyle - Table Cell Conditional Formatting\n // SerializeCnfStyleElement(cell);\n //w:tcW - Preferred Table Cell Width\n this.serializeCellWidth(writer, cellFormat);\n // serialize cell margins\n this.serializeCellMargins(writer, cellFormat);\n if (ensureMerge) {\n //w:hMerge - Horizontally Merged Cell and w:vMerge - Vertically Merged Cell\n mVerticalMerge = this.serializeCellMerge(writer, cellFormat, mVerticalMerge);\n //w:gridSpan - Grid Columns Spanned by Current Table Cell\n this.serializeGridSpan(writer, cell);\n }\n //w:tcBorders - Table Cell Borders\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cellFormat[bordersProperty[this.keywordIndex]], 8, false);\n writer.writeEndElement();\n //w:shd - Table Cell Shading\n this.serializeShading(writer, cell[cellFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]]);\n // //w:noWrap - Don't Wrap Cell Content\n // if (cellFormat.HasValue(CellFormat.TextWrapKey)) {\n // m_writer.WriteStartElement('noWrap', W_namespace);\n // if (cellFormat.TextWrap)\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'false');\n // m_writer.WriteEndElement();\n // }\n // //w:tcMar - Single Table Cell Margins\n // if (!cellFormat.SamePaddingsAsTable) {\n // m_writer.WriteStartElement('tcMar', W_namespace);\n // SerializePaddings(cellFormat.Paddings);\n // m_writer.WriteEndElement();\n // }\n //w:textDirection - Table Cell Text Flow Direction\n this.serializeTableCellDirection(writer, cellFormat);\n // //w:tcFitText - Fit Text Within Cell\n // if (cellFormat.FitText) {\n // m_writer.WriteStartElement('tcFitText', W_namespace);\n // m_writer.WriteEndElement();\n // }\n // //w:hideMark \n // if (cellFormat.HideMark) {\n // m_writer.WriteStartElement('hideMark', W_namespace);\n // m_writer.WriteEndElement();\n // }\n //w:vAlign - Table Cell Vertical Alignment\n // if (cellFormat.HasValue(CellFormat.VrAlignmentKey))\n this.serializeCellVerticalAlign(writer, cellFormat[verticalAlignmentProperty[this.keywordIndex]]);\n // //w:hideMark - Ignore End Of Cell Marker In Row Height Calculation\n // SerializeDocxProps(tempDocxProps, 'hideMark');\n // //w:cellIns - Table Cell Insertion\n // SerializeDocxProps(tempDocxProps, 'cellIns');\n // //w:cellDel - Table Cell Deletion\n // SerializeDocxProps(tempDocxProps, 'cellDel');\n // //w:cellMerge - Vertically Merged/Split Table Cells\n // SerializeDocxProps(tempDocxProps, 'cellMerge');\n // if (cellFormat.OldPropertiesHash.length > 0 && !m_isAlternativeCellFormat) {\n // m_isAlternativeCellFormat = true;\n // SerializeTrackChangeProps('tcPrChange', cellFormat.FormatChangeAuthorName, cellFormat.FormatChangeDateTime);\n // Dictionary < int, object > oldPropertyHash = new Dictionary(cellFormat.OldPropertiesHash);\n // Dictionary < int, object > propertyHash = new Dictionary(cellFormat.PropertiesHash);\n // cellFormat.PropertiesHash.Clear();\n // cellFormat.OldPropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // SerializeCellFormat(cellFormat);\n // cellFormat.PropertiesHash.Clear();\n // foreach(KeyValuePair < int, object > keyValue in propertyHash)\n // cellFormat.PropertiesHash[keyValue.Key] = keyValue.Value;\n // foreach(KeyValuePair < int, object > keyValue in oldPropertyHash)\n // cellFormat.OldPropertiesHash[keyValue.Key] = keyValue.Value;\n // m_writer.WriteEndElement();\n // m_isAlternativeCellFormat = false;\n // }\n if (endProperties) {\n writer.writeEndElement();\n }\n return mVerticalMerge;\n };\n // Serialize the cell width\n WordExport.prototype.serializeCellWidth = function (writer, cf) {\n writer.writeStartElement(undefined, 'tcW', this.wNamespace);\n if (cf[preferredWidthTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 1 : 'Percent')) {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf[preferredWidthProperty[this.keywordIndex]] * this.percentageFactor).toString());\n }\n else if (cf[preferredWidthTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Auto')) {\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n }\n else {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal(cf[preferredWidthProperty[this.keywordIndex]] * this.twipsInOnePoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n writer.writeEndElement();\n };\n // Serialize cell merge\n WordExport.prototype.serializeCellMerge = function (writer, cellFormat, mVerticalMerge) {\n var cell = this.blockOwner;\n var isserialized = false;\n var collKey;\n var currentIndex = cell[columnIndexProperty[this.keywordIndex]];\n var cellIndex = this.row[cellsProperty[this.keywordIndex]].indexOf(cell);\n var prevIndex = cellIndex > 0 ? this.row[cellsProperty[this.keywordIndex]][cellIndex - 1][columnIndexProperty[this.keywordIndex]] : cell[columnIndexProperty[this.keywordIndex]];\n if (cell[columnIndexProperty[this.keywordIndex]] === cellIndex) {\n collKey = cell[columnIndexProperty[this.keywordIndex]];\n isserialized = true;\n }\n else {\n isserialized = false;\n }\n if (!isserialized) {\n if (cellIndex === 0) {\n currentIndex = cell[columnIndexProperty[this.keywordIndex]];\n prevIndex = -1;\n }\n for (var i = prevIndex; i < currentIndex; i++) {\n collKey = prevIndex + 1;\n prevIndex += 1;\n if (collKey === 0 && mVerticalMerge.containsKey(collKey)) {\n mVerticalMerge = this.createMerge(writer, collKey, cell, mVerticalMerge);\n }\n }\n }\n if (cellFormat[rowSpanProperty[this.keywordIndex]] > 1) {\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n this.spanCellFormat = cellFormat;\n mVerticalMerge.add(collKey, cellFormat[rowSpanProperty[this.keywordIndex]] - 1);\n if (cellFormat[columnSpanProperty[this.keywordIndex]] > 1) {\n this.mGridSpans.add(collKey, cellFormat[columnSpanProperty[this.keywordIndex]]);\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, 'restart');\n writer.writeEndElement();\n }\n else if (mVerticalMerge.containsKey(collKey) && isserialized) {\n mVerticalMerge = this.createMerge(writer, collKey, cell, mVerticalMerge);\n }\n return mVerticalMerge;\n };\n WordExport.prototype.createMerge = function (writer, collKey, cell, mVerticalMerge) {\n this.serializeColumnSpan(collKey, writer);\n writer.writeStartElement(undefined, 'vMerge', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'continue');\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'tcBorders', this.wNamespace);\n this.serializeBorders(writer, cell[cellFormatProperty[this.keywordIndex]][bordersProperty[this.keywordIndex]], 8, false);\n writer.writeEndElement();\n writer.writeEndElement(); //end tcPr\n writer.writeStartElement('w', 'p', this.wNamespace);\n writer.writeEndElement();\n writer.writeEndElement(); //end tc\n writer.writeStartElement(undefined, 'tc', this.wNamespace);\n writer.writeStartElement(undefined, 'tcPr', this.wNamespace);\n this.serializeCellWidth(writer, cell[cellFormatProperty[this.keywordIndex]]);\n mVerticalMerge = this.checkMergeCell(collKey, mVerticalMerge);\n return mVerticalMerge;\n };\n WordExport.prototype.serializeColumnSpan = function (collKey, writer) {\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.mGridSpans.get(collKey).toString());\n writer.writeEndElement();\n }\n };\n WordExport.prototype.checkMergeCell = function (collKey, mVerticalMerge) {\n if ((mVerticalMerge.get(collKey) - 1) === 0) {\n mVerticalMerge.remove(collKey);\n this.spanCellFormat = undefined;\n if (this.mGridSpans.keys.length > 0 && this.mGridSpans.containsKey(collKey)) {\n this.mGridSpans.remove(collKey);\n }\n }\n else {\n mVerticalMerge.set(collKey, mVerticalMerge.get(collKey) - 1);\n }\n return mVerticalMerge;\n };\n // Serialize the grid span element of cell.\n WordExport.prototype.serializeGridSpan = function (writer, cell) {\n // int gridSpan = cell.cellFormat.GridSpan;\n if (cell[cellFormatProperty[this.keywordIndex]][columnSpanProperty[this.keywordIndex]] > 1) {\n var num = cell[cellFormatProperty[this.keywordIndex]][columnSpanProperty[this.keywordIndex]];\n writer.writeStartElement(undefined, 'gridSpan', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, num.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the table cell direction\n WordExport.prototype.serializeTableCellDirection = function (writer, cellFormat) {\n // if (cellFormat..textDirection !== TextDirection.Horizontal)\n // {\n // m_writer.WriteStartElement('textDirection', W_namespace);\n // switch (cellFormat.TextDirection)\n // {\n // case TextDirection.Horizontal:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTb');\n // break;\n // case TextDirection.VerticalBottomToTop:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'btLr');\n // break;\n // case TextDirection.VerticalTopToBottom:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRl');\n // break;\n // case TextDirection.HorizontalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'lrTbV');\n // break;\n // case TextDirection.Vertical:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbLrV');\n // break;\n // case TextDirection.VerticalFarEast:\n // m_writer.WriteAttributeString('w', 'val', W_namespace, 'tbRlV');\n // break;\n // }\n // m_writer.WriteEndElement();\n // }\n };\n // Serialize the cell vertical alignment\n WordExport.prototype.serializeCellVerticalAlign = function (writer, alignment) {\n writer.writeStartElement(undefined, 'vAlign', this.wNamespace);\n switch (alignment) {\n case 'Center':\n case 1:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n case 'Bottom':\n case 2:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'bottom');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'top');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the table grid columns.\n WordExport.prototype.serializeGridColumns = function (writer, grid) {\n for (var i = 0, count = grid.length; i < count; i++) {\n var gridValue = Math.round(grid[i] * 20);\n writer.writeStartElement(undefined, 'gridCol', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, gridValue.toString());\n writer.writeEndElement();\n }\n };\n // Serialize the row formattings.\n // Table parameter is passed for serializing table format and undefined for serializing row format.\n WordExport.prototype.serializeTableFormat = function (writer, format, table) {\n // if (!isNullOrUndefined(table))\n // {\n // List tempDocxProps = new List();\n // for (int i = 0, cnt = table.DocxTableFormat.NodeArray.length; i < cnt; i++)\n // tempDocxProps.Add(table.DocxTableFormat.NodeArray[i]);\n writer.writeStartElement(undefined, 'tblPr', this.wNamespace);\n // SerializeTableStlye(format);\n // if (format.WrapTextAround &&!((table.OwnerTextBody.Owner is WTextBox) || \n //(table.OwnerTextBody.Owner is WComment) || (table.OwnerTextBody.Owner is WFootnote)))\n // {\n // SerializeTablePositioning(format.Positioning);\n // if (!format.Positioning.AllowOverlap)\n // {\n // m_writer.WriteStartElement('tblOverlap', W_namespace);\n // m_writer.WriteAttributeString('val', W_namespace, 'never');\n // m_writer.WriteEndElement();\n // }\n // }\n // SerializeDocxProps(tempDocxProps, 'tblStyleRowBandSize');\n // SerializeDocxProps(tempDocxProps, 'tblStyleColBandSize'); \n if (!isNullOrUndefined(table[tableFormatProperty[this.keywordIndex]][styleNameProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, \"tblStyle\", this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, table[tableFormatProperty[this.keywordIndex]][styleNameProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n this.serializeTablePositioning(writer, table);\n this.serializeTableWidth(writer, table);\n this.serializeTableAlignment(writer, table[tableFormatProperty[this.keywordIndex]]);\n this.serializeCellSpacing(writer, table[tableFormatProperty[this.keywordIndex]]);\n this.serializeTableIndentation(writer, table[tableFormatProperty[this.keywordIndex]]);\n this.serializeTableMargins(writer, table[tableFormatProperty[this.keywordIndex]]);\n this.serializeTableBorders(writer, table[tableFormatProperty[this.keywordIndex]]);\n this.serializeShading(writer, table[tableFormatProperty[this.keywordIndex]][shadingProperty[this.keywordIndex]]);\n if (HelperMethods.parseBoolValue(table[tableFormatProperty[this.keywordIndex]][bidiProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'bidiVisual', this.wNamespace);\n writer.writeEndElement();\n }\n this.serializeTblLayout(writer, table[tableFormatProperty[this.keywordIndex]]);\n // this.serializeTableCellMargin(writer, table.tableFormat);\n // SerializeTableLook(table);\n // if (!isNullOrUndefined(table.Title))\n // SerializeTableTitle(table);\n // if (!isNullOrUndefined(table.Description))\n // SerializeTableDescription(table);\n // }\n // else\n // {\n // SerializeCellSpacing(format);\n // SerializeTableIndentation(format);\n // SerializeTableBorders(format);\n // SerializeTableShading(format);\n // SerializeTblLayout(format);\n // SerializeTableCellMargin(format);\n // }\n // if (!isNullOrUndefined(format.OwnerBase) && format.OwnerBase is WTable\n // && format.OldPropertiesHash.length > 0 && !m_isAlternativeTableFormat)\n // {\n // m_isAlternativeTableFormat = true;\n // SerializeTrackChangeProps('tblPrChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, format.OwnerBase as WTable);\n // m_writer.WriteEndElement();\n // m_isAlternativeTableFormat = false;\n // }\n // if (!isNullOrUndefined(format.OwnerRow) && format.OldPropertiesHash.length > 0)\n // {\n // SerializeTrackChangeProps('tblPrExChange', format.FormatChangeAuthorName, format.FormatChangeDateTime);\n // SerializeTableTrackChanges(format, undefined);\n // m_writer.WriteEndElement();\n // }\n // SerializeTblTrackChanges(format);\n if (!isNullOrUndefined(table)) {\n writer.writeEndElement(); //end of tblPr\n }\n };\n // Serialize the table position\n WordExport.prototype.serializeTablePositioning = function (writer, table) {\n if (HelperMethods.parseBoolValue(table[wrapTextAroundProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'tblpPr', this.wNamespace);\n if (table[positioningProperty[this.keywordIndex]][distanceLeftProperty[this.keywordIndex]] > 0) {\n var left = Math.round(table[positioningProperty[this.keywordIndex]][distanceLeftProperty[this.keywordIndex]] * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'leftFromText', this.wNamespace, left);\n }\n if (table[positioningProperty[this.keywordIndex]][distanceRightProperty[this.keywordIndex]] > 0) {\n var right = Math.round(table[positioningProperty[this.keywordIndex]][distanceRightProperty[this.keywordIndex]] * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'rightFromText', this.wNamespace, right);\n }\n if (table[positioningProperty[this.keywordIndex]][distanceTopProperty[this.keywordIndex]] > 0) {\n var top_1 = Math.round(table[positioningProperty[this.keywordIndex]][distanceTopProperty[this.keywordIndex]] * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'topFromText', this.wNamespace, top_1);\n }\n if (table[positioningProperty[this.keywordIndex]][distanceBottomProperty[this.keywordIndex]] > 0) {\n var bottom = Math.round(table[positioningProperty[this.keywordIndex]][distanceBottomProperty[this.keywordIndex]] * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'bottomFromText', this.wNamespace, bottom);\n }\n if (!isNullOrUndefined(table[positioningProperty[this.keywordIndex]][verticalOriginProperty[this.keywordIndex]])) {\n var verticalOrigin = table[positioningProperty[this.keywordIndex]][verticalOriginProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Paragraph') ? 'text' : this.keywordIndex == 1 ? this.getTableVerticalRelation(table[positioningProperty[this.keywordIndex]][verticalOriginProperty[this.keywordIndex]]).toLowerCase() : this.getTableVerticalRelation(this.getTableVerticalRelationEnumValue(table[positioningProperty[this.keywordIndex]][verticalOriginProperty[this.keywordIndex]])).toLowerCase();\n writer.writeAttributeString('w', 'vertAnchor', this.wNamespace, verticalOrigin);\n }\n if (!isNullOrUndefined(table[positioningProperty[this.keywordIndex]][horizontalOriginProperty[this.keywordIndex]]) && table[positioningProperty[this.keywordIndex]][horizontalOriginProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 0 : 'Column')) {\n var horizontalOrigin = this.keywordIndex == 1 ? this.getTableHorizontalRelation(table[positioningProperty[this.keywordIndex]][horizontalOriginProperty[this.keywordIndex]]).toLowerCase() : table[positioningProperty[this.keywordIndex]][horizontalOriginProperty[this.keywordIndex]].toLowerCase();\n writer.writeAttributeString('w', 'horzAnchor', this.wNamespace, horizontalOrigin);\n }\n if (!isNullOrUndefined(table[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]]) && table[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 0 : 'Left')) {\n var horizontalAlignment = this.keywordIndex == 1 ? this.getTableHorizontalAlignment(table[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]]) : table[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]].toLowerCase();\n writer.writeAttributeString('w', 'tblpXSpec', this.wNamespace, horizontalAlignment);\n }\n if (!isNullOrUndefined(table[positioningProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]]) && table[positioningProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 0 : 'None')) {\n var verticalAlignment = this.keywordIndex == 1 ? this.getTableVerticalAlignment(table[positioningProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]]) : table[positioningProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]].toLowerCase();\n writer.writeAttributeString('w', 'tblpYSpec', this.wNamespace, verticalAlignment);\n }\n if (((!isNullOrUndefined(table[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]]) && table[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Left'))\n || !table[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]])\n && table[positioningProperty[this.keywordIndex]][horizontalPositionProperty[this.keywordIndex]] > 0) {\n var horizontalPosition = Math.round(table[positioningProperty[this.keywordIndex]][horizontalPositionProperty[this.keywordIndex]] * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'tblpX', this.wNamespace, horizontalPosition);\n }\n if (!isNullOrUndefined(table[positioningProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]]) && table[positioningProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'None')) {\n var verticalPosition = Math.round(table[positioningProperty[this.keywordIndex]][verticalPositionProperty[this.keywordIndex]] * this.twipsInOnePoint).toString();\n writer.writeAttributeString('w', 'tblpY', this.wNamespace, verticalPosition);\n }\n writer.writeEndElement();\n if (!HelperMethods.parseBoolValue(table[positioningProperty[this.keywordIndex]][allowOverlapProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'tblOverlap', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'never');\n writer.writeEndElement();\n }\n }\n if (!isNullOrUndefined(table[descriptionProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'tblDescription', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, table[descriptionProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(table[titleProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'tblCaption', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, table[titleProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n };\n // serialize the table margin\n WordExport.prototype.serializeTableMargins = function (writer, format) {\n this.serializeMargins(writer, format, 'tblCellMar');\n };\n // serialize the row margin\n WordExport.prototype.serializeRowMargins = function (writer, format) {\n writer.writeStartElement(undefined, 'tblPrEx', this.wNamespace);\n // serialize the row borders\n writer.writeStartElement(undefined, 'tblBorders', this.wNamespace);\n this.serializeBorders(writer, format[bordersProperty[this.keywordIndex]], 8, false);\n writer.writeEndElement();\n this.serializeMargins(writer, format, 'tblCellMar');\n writer.writeEndElement();\n };\n // serialize the cell margins\n WordExport.prototype.serializeCellMargins = function (writer, format) {\n this.serializeMargins(writer, format, 'tcMar');\n };\n // serialize the table margins, row margins, cell margins\n WordExport.prototype.serializeMargins = function (writer, format, tag) {\n writer.writeStartElement(undefined, tag, this.wNamespace);\n if (!isNullOrUndefined(format[topMarginProperty[this.keywordIndex]])) {\n var topMargin = Math.round(format[topMarginProperty[this.keywordIndex]] * 20);\n writer.writeStartElement(undefined, 'top', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, topMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(format[leftMarginProperty[this.keywordIndex]])) {\n var leftMargin = Math.round(format[leftMarginProperty[this.keywordIndex]] * 20);\n writer.writeStartElement(undefined, 'left', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, leftMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(format[bottomMarginProperty[this.keywordIndex]])) {\n var bottomMargin = Math.round(format[bottomMarginProperty[this.keywordIndex]] * 20);\n writer.writeStartElement(undefined, 'bottom', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, bottomMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(format[rightMarginProperty[this.keywordIndex]])) {\n var rightMargin = Math.round(format[rightMarginProperty[this.keywordIndex]] * 20);\n writer.writeStartElement(undefined, 'right', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, rightMargin.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n // Serialize the table borders\n WordExport.prototype.serializeShading = function (writer, format) {\n // if (format.textureStyle !== 'TextureNone') {\n writer.writeStartElement(undefined, 'shd', this.wNamespace);\n if (format[backgroundColorProperty[this.keywordIndex]] && format[backgroundColorProperty[this.keywordIndex]] !== 'empty') {\n writer.writeAttributeString(undefined, 'fill', this.wNamespace, this.getColor(format[backgroundColorProperty[this.keywordIndex]]));\n }\n else {\n writer.writeAttributeString(undefined, 'fill', this.wNamespace, 'auto');\n }\n if (format[foregroundColorProperty[this.keywordIndex]] === 'empty' || isNullOrUndefined(format[foregroundColorProperty[this.keywordIndex]])) {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n }\n else {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(format[foregroundColorProperty[this.keywordIndex]]));\n }\n if (!isNullOrUndefined(format[textureProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTextureStyle(format[textureProperty[this.keywordIndex]]));\n }\n writer.writeEndElement();\n // }\n };\n WordExport.prototype.getTextureStyle = function (textureStyle) {\n switch (textureStyle) {\n case 'Texture5Percent':\n case 'Texture2Pt5Percent':\n case 'Texture7Pt5Percent':\n case 1:\n case 2:\n case 3:\n return 'pct5';\n case 'Texture10Percent':\n case 4:\n return 'pct10';\n case 'Texture12Pt5Percent':\n case 5:\n return 'pct12';\n case 'Texture15Percent':\n case 'Texture17Pt5Percent':\n case 6:\n case 7:\n return 'pct15';\n case 'Texture20Percent':\n case 'Texture22Pt5Percent':\n case 8:\n case 9:\n return 'pct20';\n case 'Texture25Percent':\n case 'Texture27Pt5Percent':\n case 10:\n case 11:\n return 'pct25';\n case 'Texture30Percent':\n case 'Texture32Pt5Percent':\n case 12:\n case 13:\n return 'pct30';\n case 'Texture35Percent':\n case 14:\n return 'pct35';\n case 'Texture37Pt5Percent':\n case 15:\n return 'pct37';\n case 'Texture40Percent':\n case 'Texture42Pt5Percent':\n case 16:\n case 17:\n return 'pct40';\n case 'Texture45Percent':\n case 'Texture47Pt5Percent':\n case 18:\n case 19:\n return 'pct45';\n case 'Texture50Percent':\n case 'Texture52Pt5Percent':\n case 20:\n case 21:\n return 'pct50';\n case 'Texture55Percent':\n case 'Texture57Pt5Percent':\n case 22:\n case 23:\n return 'pct55';\n case 'Texture60Percent':\n case 24:\n return 'pct60';\n case 'Texture62Pt5Percent':\n case 25:\n return 'pct62';\n case 'Texture65Percent':\n case 'Texture67Pt5Percent':\n case 26:\n case 27:\n return 'pct65';\n case 'Texture70Percent':\n case 'Texture72Pt5Percent':\n case 28:\n case 29:\n return 'pct70';\n case 'Texture75Percent':\n case 'Texture77Pt5Percent':\n case 30:\n case 31:\n return 'pct75';\n case 'Texture80Percent':\n case 'Texture82Pt5Percent':\n case 32:\n case 33:\n return 'pct80';\n case 'Texture85Percent':\n case 34:\n return 'pct85';\n case 'Texture87Pt5Percent':\n case 35:\n return 'pct87';\n case 'Texture90Percent':\n case 'Texture92Pt5Percent':\n case 36:\n case 37:\n return 'pct90';\n case 'Texture95Percent':\n case 'Texture97Pt5Percent':\n case 38:\n case 39:\n return 'pct95';\n case 40:\n return 'solid';\n case 'TextureCross':\n return 'thinHorzCross';\n case 'TextureDarkCross':\n return 'horzCross';\n case 'TextureDarkDiagonalCross':\n return 'diagCross';\n case 'TextureDarkDiagonalDown':\n return 'reverseDiagStripe';\n case 'TextureDarkDiagonalUp':\n return 'diagStripe';\n case 'TextureDarkHorizontal':\n case 41:\n return 'horzStripe';\n case 'TextureDarkVertical':\n case 42:\n return 'vertStripe';\n case 43:\n return 'reverseDiagStripe';\n case 44:\n return 'diagStripe';\n case 45:\n return 'horzCross';\n case 46:\n return 'diagCross';\n case 'TextureDiagonalCross':\n return 'thinDiagCross';\n case 'TextureDiagonalDown':\n return 'thinReverseDiagStripe';\n case 'TextureDiagonalUp':\n return 'thinDiagStripe';\n case 'TextureHorizontal':\n case 47:\n return 'thinHorzStripe';\n case 'TextureSolid':\n return 'solid';\n case 'TextureVertical':\n case 48:\n return 'thinVertStripe';\n case 49:\n return 'thinReverseDiagStripe';\n case 50:\n return 'thinDiagStripe';\n case 51:\n return 'thinHorzCross';\n case 52:\n return 'thinDiagCross';\n default:\n return 'clear';\n }\n };\n //serialize the paragraph border\n WordExport.prototype.serializeParagraphBorders = function (writer, formatPara) {\n var borders = formatPara[bordersProperty[this.keywordIndex]];\n if (isNullOrUndefined(borders)) {\n return;\n }\n writer.writeStartElement(undefined, 'pBdr', this.wNamespace);\n this.serializeBorders(writer, formatPara[bordersProperty[this.keywordIndex]], 8, true);\n writer.writeEndElement();\n };\n // Serialize the table borders\n WordExport.prototype.serializeTableBorders = function (writer, format) {\n var borders = format[bordersProperty[this.keywordIndex]];\n if (isNullOrUndefined(borders)) {\n return;\n }\n writer.writeStartElement(undefined, 'tblBorders', this.wNamespace);\n this.serializeBorders(writer, format[bordersProperty[this.keywordIndex]], 8, false);\n writer.writeEndElement();\n };\n // Serialize the borders.\n WordExport.prototype.serializeBorders = function (writer, borders, multipler, isParagraphBorder) {\n this.serializeBorder(writer, borders[topProperty[this.keywordIndex]], 'top', multipler);\n this.serializeBorder(writer, borders[leftProperty[this.keywordIndex]], 'left', multipler);\n this.serializeBorder(writer, borders[bottomProperty[this.keywordIndex]], 'bottom', multipler);\n this.serializeBorder(writer, borders[rightProperty[this.keywordIndex]], 'right', multipler);\n if (isParagraphBorder) {\n this.serializeBorder(writer, borders[horizontalProperty[this.keywordIndex]], 'between', multipler);\n this.serializeBorder(writer, borders[verticalProperty[this.keywordIndex]], 'bar', multipler);\n }\n else {\n this.serializeBorder(writer, borders[horizontalProperty[this.keywordIndex]], 'insideH', multipler);\n this.serializeBorder(writer, borders[verticalProperty[this.keywordIndex]], 'insideV', multipler);\n this.serializeBorder(writer, borders[diagonalDownProperty[this.keywordIndex]], 'tl2br', multipler);\n this.serializeBorder(writer, borders[diagonalUpProperty[this.keywordIndex]], 'tr2bl', multipler);\n }\n };\n // Serialize the table layout element\n WordExport.prototype.serializeTblLayout = function (writer, format) {\n if (!HelperMethods.parseBoolValue(format[allowAutoFitProperty[this.keywordIndex]]) || format[preferredWidthProperty[this.keywordIndex]] > this.containerWidth) {\n writer.writeStartElement(undefined, 'tblLayout', this.wNamespace);\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'fixed');\n writer.writeEndElement();\n }\n };\n // Serializes the Border\n WordExport.prototype.serializeBorder = function (writer, border, tagName, multiplier) {\n var borderStyle = border[lineStyleProperty[this.keywordIndex]];\n var sz = ((border[lineWidthProperty[this.keywordIndex]] ? border[lineWidthProperty[this.keywordIndex]] : 0) * multiplier);\n var space = border[spaceProperty[this.keywordIndex]] ? border[spaceProperty[this.keywordIndex]] : 0;\n if (borderStyle === (this.keywordIndex == 1 ? 26 : 'Cleared')) {\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, 'nil');\n writer.writeEndElement();\n return;\n }\n else if (((borderStyle === (this.keywordIndex == 1 ? 1 : 'None') || isNullOrUndefined(borderStyle)) && !HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]])) || (sz < 0 && !HelperMethods.parseBoolValue(border[hasNoneStyleProperty[this.keywordIndex]]))) {\n return;\n }\n writer.writeStartElement(undefined, tagName, this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getBorderStyle(borderStyle));\n // if (border.color === '#000000')\n // {\n // writer.writeAttributeString(undefined, 'color', this.wNamespace, 'auto');\n // }\n // else\n // {\n if (border[colorProperty[this.keywordIndex]]) {\n writer.writeAttributeString(undefined, 'color', this.wNamespace, this.getColor(border[colorProperty[this.keywordIndex]]));\n }\n // }\n writer.writeAttributeString(undefined, 'sz', this.wNamespace, this.roundToTwoDecimal(sz).toString());\n writer.writeAttributeString(undefined, 'space', this.wNamespace, space.toString());\n if (HelperMethods.parseBoolValue(border[shadowProperty[this.keywordIndex]])) {\n writer.writeAttributeString(undefined, 'shadow', this.wNamespace, 'on');\n }\n writer.writeEndElement();\n };\n // Get the border style as string\n WordExport.prototype.getBorderStyle = function (borderStyle) {\n switch (borderStyle) {\n case 'Cleared':\n return 'cleared';\n case 'None':\n case 1:\n return 'None';\n case 'DashSmallGap':\n return 'dashSmallGap';\n case 'Triple':\n return 'triple';\n case 'Dot':\n case 2:\n return 'dotted';\n case 3:\n return 'dashSmallGap';\n case 'DashDot':\n return 'dotDash';\n case 'DashLargeGap':\n case 4:\n return 'dashed';\n case 5:\n return 'dotDash';\n case 'DashDotDot':\n case 6:\n return 'dotDotDash';\n case 'Double':\n case 7:\n return 'double';\n case 8:\n return 'triple';\n case 'ThinThickSmallGap':\n case 9:\n return 'thinThickSmallGap';\n case 'ThickThinSmallGap':\n case 10:\n return 'thickThinSmallGap';\n case 'ThinThickThinSmallGap':\n case 11:\n return 'thinThickThinSmallGap';\n case 'ThickThinMediumGap':\n case 12:\n return 'thickThinMediumGap';\n case 'ThinThickMediumGap':\n case 13:\n return 'thinThickMediumGap';\n case 'ThinThickThinMediumGap':\n case 14:\n return 'thinThickThinMediumGap';\n case 'ThickThinLargeGap':\n return 'thickThinLargeGap';\n case 'ThinThickLargeGap':\n case 15:\n return 'thinThickLargeGap';\n case 16:\n return 'thickThinLargeGap';\n case 'ThinThickThinLargeGap':\n case 17:\n return 'thinThickThinLargeGap';\n case 'Thick':\n return 'thick';\n case 'SingleWavy':\n case 18:\n return 'wave';\n case 'DoubleWavy':\n case 19:\n return 'doubleWave';\n case 'DashDotStroked':\n case 20:\n return 'dashDotStroked';\n case 'Engrave3D':\n return 'threeDEngrave';\n case 'Emboss3D':\n case 21:\n return 'threeDEmboss';\n case 22:\n return 'threeDEngrave';\n case 'Outset':\n case 23:\n return 'outset';\n case 'Inset':\n case 24:\n return 'inset';\n case 25:\n return 'thick';\n case 26:\n return 'cleared';\n // case 'None':\n // return 'none';\n default:\n return 'single';\n }\n };\n // Serialize the table indentation.\n WordExport.prototype.serializeTableIndentation = function (writer, format) {\n if (!isNullOrUndefined(format[leftIndentProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'tblInd', this.wNamespace);\n var tableIndent = Math.round(format[leftIndentProperty[this.keywordIndex]] * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableIndent.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n };\n // Serialize the cell spacing.\n WordExport.prototype.serializeCellSpacing = function (writer, format) {\n if (!isNullOrUndefined(format[cellSpacingProperty[this.keywordIndex]]) && format[cellSpacingProperty[this.keywordIndex]] > 0) {\n writer.writeStartElement(undefined, 'tblCellSpacing', this.wNamespace);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, this.roundToTwoDecimal((format[cellSpacingProperty[this.keywordIndex]] / 2) * this.twentiethOfPoint).toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n writer.writeEndElement();\n }\n };\n // Serialize the table width\n WordExport.prototype.serializeTableWidth = function (writer, table) {\n writer.writeStartElement(undefined, 'tblW', this.wNamespace);\n if (table[tableFormatProperty[this.keywordIndex]][preferredWidthTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 1 : 'Percent')) {\n var tableWidth = Math.round(table[tableFormatProperty[this.keywordIndex]][preferredWidthProperty[this.keywordIndex]] * this.percentageFactor);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableWidth.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'pct');\n }\n else if (table[tableFormatProperty[this.keywordIndex]][preferredWidthTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 2 : 'Point')) {\n var tableWidth = Math.round(table[tableFormatProperty[this.keywordIndex]][preferredWidthProperty[this.keywordIndex]] * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'w', this.wNamespace, tableWidth.toString());\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'dxa');\n }\n else {\n writer.writeAttributeString(undefined, 'w', this.wNamespace, '0');\n writer.writeAttributeString(undefined, 'type', this.wNamespace, 'auto');\n }\n writer.writeEndElement();\n };\n // Serialize the table alignment\n WordExport.prototype.serializeTableAlignment = function (writer, format) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n switch (format[tableAlignmentProperty[this.keywordIndex]]) {\n case 'Right':\n writer.writeAttributeString('w', 'val', this.wNamespace, 'right');\n break;\n case 'Center':\n case 1:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'center');\n break;\n case 2:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'right');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'left');\n break;\n }\n writer.writeEndElement();\n };\n // Serialize the field\n WordExport.prototype.serializeFieldCharacter = function (writer, field) {\n writer.writeStartElement(undefined, 'r', this.wNamespace);\n this.serializeCharacterFormat(writer, field[characterFormatProperty[this.keywordIndex]]);\n writer.writeStartElement(undefined, 'fldChar', this.wNamespace);\n var type = field[fieldTypeProperty[this.keywordIndex]] === 0 ? 'begin'\n : field[fieldTypeProperty[this.keywordIndex]] === 1 ? 'end' : 'separate';\n writer.writeAttributeString(undefined, 'fldCharType', this.wNamespace, type);\n if (type === 'begin' && !isNullOrUndefined(field[formFieldDataProperty[this.keywordIndex]])) {\n var formFieldData = field[formFieldDataProperty[this.keywordIndex]];\n writer.writeStartElement(undefined, 'ffData', this.wNamespace);\n writer.writeStartElement(undefined, 'name', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData[nameProperty[this.keywordIndex]]);\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'enabled', this.wNamespace);\n writer.writeEndElement();\n if (formFieldData.hasOwnProperty(textInputProperty[this.keywordIndex])) {\n writer.writeStartElement(undefined, 'textInput', this.wNamespace);\n var type_1 = this.keywordIndex == 1 ? this.getTextFormFieldType(formFieldData[textInputProperty[this.keywordIndex]][typeProperty[this.keywordIndex]]) : formFieldData[textInputProperty[this.keywordIndex]][typeProperty[this.keywordIndex]].toString();\n if (type_1 === 'Number' || 'Date') {\n writer.writeStartElement(undefined, 'type', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, type_1 == 'Calculation' ? 'calculated' : type_1.toLowerCase());\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'default', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData[textInputProperty[this.keywordIndex]][defaultValueProperty[this.keywordIndex]]);\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'format', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.keywordIndex == 1 && type_1 === 'Text' ? this.getTextFormFieldFormat(formFieldData[textInputProperty[this.keywordIndex]][formatProperty[this.keywordIndex]]) : formFieldData[textInputProperty[this.keywordIndex]][formatProperty[this.keywordIndex]]);\n writer.writeEndElement();\n writer.writeEndElement();\n }\n else if (formFieldData.hasOwnProperty(checkBoxProperty[this.keywordIndex])) {\n writer.writeStartElement(undefined, 'checkBox', this.wNamespace);\n if (formFieldData[checkBoxProperty[this.keywordIndex]][sizeTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Auto')) {\n writer.writeStartElement(undefined, 'sizeAuto', this.wNamespace);\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement(undefined, 'size', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.roundToTwoDecimal(formFieldData[checkBoxProperty[this.keywordIndex]][sizeProperty[this.keywordIndex]] * 2).toString());\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'defalut', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData[checkBoxProperty[this.keywordIndex]][defaultValueProperty[this.keywordIndex]] ? '1' : '0');\n writer.writeEndElement();\n if (formFieldData[checkBoxProperty[this.keywordIndex]][checkedProperty[this.keywordIndex]]) {\n writer.writeStartElement(undefined, 'checked', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData[checkBoxProperty[this.keywordIndex]][checkedProperty[this.keywordIndex]] ? '1' : '0');\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n else {\n writer.writeStartElement(undefined, 'ddList', this.wNamespace);\n if (formFieldData[dropDownListProperty[this.keywordIndex]][selectedIndexProperty[this.keywordIndex]] !== 0) {\n writer.writeStartElement(undefined, 'result', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData[dropDownListProperty[this.keywordIndex]][selectedIndexProperty[this.keywordIndex]].toString());\n writer.writeEndElement();\n }\n for (var i = 0; i < formFieldData[dropDownListProperty[this.keywordIndex]][dropDownItemsProperty[this.keywordIndex]].length; i++) {\n writer.writeStartElement(undefined, 'listEntry', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, formFieldData[dropDownListProperty[this.keywordIndex]][dropDownItemsProperty[this.keywordIndex]][i].toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n writer.writeEndElement();\n writer.writeEndElement();\n if (field[fieldTypeProperty[this.keywordIndex]] === 0 && field[fieldTypeProperty[this.keywordIndex]] === 'FieldFormTextInput') {\n writer.writeStartElement('w', 'r', this.wNamespace);\n writer.writeStartElement(undefined, 'instrText', this.wNamespace);\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString('FORMTEXT');\n writer.writeEndElement();\n writer.writeEndElement();\n }\n };\n // Serialize the text range.\n WordExport.prototype.serializeTextRange = function (writer, span, previousNode, efType) {\n writer.writeStartElement('w', 'r', this.wNamespace);\n if (!isNullOrUndefined(span[characterFormatProperty[this.keywordIndex]])) {\n this.serializeCharacterFormat(writer, span[characterFormatProperty[this.keywordIndex]]);\n }\n if (span[textProperty[this.keywordIndex]] === '\\t') {\n writer.writeElementString(undefined, 'tab', this.wNamespace, undefined);\n }\n else if (span[textProperty[this.keywordIndex]] === '\\v') {\n writer.writeElementString(undefined, 'br', this.wNamespace, undefined);\n }\n else if (!isNullOrUndefined(span[breakClearTypeProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'br', this.wNamespace);\n writer.writeAttributeString('w', 'type', this.wNamespace, \"textWrapping\");\n writer.writeAttributeString('w', 'clear', this.wNamespace, this.getBreakClearType(span[breakClearTypeProperty[this.keywordIndex]]).toString().toLowerCase());\n writer.writeEndElement();\n }\n else if (span[textProperty[this.keywordIndex]] === '\\f') {\n writer.writeStartElement(undefined, 'br', this.wNamespace);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'page');\n writer.writeEndElement();\n }\n else if (span[textProperty[this.keywordIndex]] === '\\r') {\n writer.writeStartElement('w', 'cr', this.wNamespace);\n writer.writeEndElement();\n }\n else if (span[textProperty[this.keywordIndex]] === String.fromCharCode(14)) {\n writer.writeStartElement(undefined, 'br', this.wNamespace);\n writer.writeAttributeString('w', 'type', this.wNamespace, 'column');\n writer.writeEndElement();\n }\n else if (encodeURI(span[textProperty[this.keywordIndex]]) === '%02') {\n writer.writeStartElement(undefined, 'footnoteRef', this.wNamespace);\n writer.writeEndElement();\n }\n else if (encodeURI(span[textProperty[this.keywordIndex]]) === '%02' && efType === 'endnote') {\n writer.writeStartElement(undefined, 'endnoteRef', this.wNamespace);\n writer.writeEndElement();\n }\n else if (encodeURI(span[textProperty[this.keywordIndex]]) === '%03') {\n writer.writeStartElement(undefined, 'separator', this.wNamespace);\n writer.writeEndElement();\n }\n else if (encodeURI(span[textProperty[this.keywordIndex]]) === '%04') {\n writer.writeStartElement(undefined, 'continuationSeparator', this.wNamespace);\n writer.writeEndElement();\n }\n else {\n var isDeleteText = this.retrieveDeleteRevision(span);\n var isField = !isNullOrUndefined(previousNode)\n && previousNode.hasOwnProperty(fieldTypeProperty[this.keywordIndex]) && previousNode[fieldTypeProperty[this.keywordIndex]] !== 2;\n var localName = isField ? isDeleteText ? 'delInstrText' : 'instrText' : isDeleteText ? 'delText' : 't';\n writer.writeStartElement(undefined, localName, this.wNamespace);\n writer.writeAttributeString('xml', 'space', this.xmlNamespace, 'preserve');\n writer.writeString(span[textProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n WordExport.prototype.retrieveDeleteRevision = function (span) {\n if (span.hasOwnProperty(revisionIdsProperty[this.keywordIndex])) {\n if (span[revisionIdsProperty[this.keywordIndex]].length > 0) {\n for (var i = 0; i < span[revisionIdsProperty[this.keywordIndex]].length; i++) {\n if (this.retrieveRevision(span[revisionIdsProperty[this.keywordIndex]][i]).revisionType === 'Deletion') {\n return true;\n }\n }\n }\n }\n return false;\n };\n // Serializes the paragraph format\n WordExport.prototype.serializeParagraphFormat = function (writer, paragraphFormat, paragraph, keyindex) {\n if (isNullOrUndefined(paragraphFormat)) {\n return;\n }\n if (isNullOrUndefined(this.keywordIndex)) {\n this.keywordIndex = keyindex;\n }\n this.serializeParagraphBorders(writer, paragraphFormat);\n if (!isNullOrUndefined(paragraphFormat[styleNameProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, paragraphFormat[styleNameProperty[this.keywordIndex]]);\n writer.writeEndElement(); //end of pStyle\n }\n if (!isNullOrUndefined(paragraph)) {\n this.serializeListFormat(writer, paragraph[paragraphFormatProperty[this.keywordIndex]][listFormatProperty[this.keywordIndex]]);\n }\n else {\n this.serializeListFormat(writer, paragraphFormat[listFormatProperty[this.keywordIndex]]);\n }\n if (HelperMethods.parseBoolValue(paragraphFormat[bidiProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'bidi', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat[keepWithNextProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'keepNext', this.wNamespace);\n if (!HelperMethods.parseBoolValue(paragraphFormat[keepWithNextProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat[keepLinesTogetherProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'keepLines', this.wNamespace);\n if (!HelperMethods.parseBoolValue(paragraphFormat[keepLinesTogetherProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat[outlineLevelProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'outlineLvl', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getOutlineLevelValue(paragraphFormat[outlineLevelProperty[this.keywordIndex]]).toString());\n writer.writeEndElement();\n }\n this.serializeParagraphSpacing(writer, paragraphFormat);\n if (!isNullOrUndefined(paragraphFormat[contextualSpacingProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'contextualSpacing', this.wNamespace);\n if (!HelperMethods.parseBoolValue(paragraphFormat[contextualSpacingProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(paragraphFormat[widowControlProperty[this.keywordIndex]])) {\n writer.writeStartElement('w', 'widowControl', this.wNamespace);\n if (HelperMethods.parseBoolValue(paragraphFormat[widowControlProperty[this.keywordIndex]])) {\n writer.writeAttributeString('w', 'val', this.wNamespace, '1');\n }\n else {\n writer.writeAttributeString('w', 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n }\n this.serializeIndentation(writer, paragraphFormat);\n this.serializeParagraphAlignment(writer, paragraphFormat[textAlignmentProperty[this.keywordIndex]], HelperMethods.parseBoolValue(paragraphFormat[bidiProperty[this.keywordIndex]]));\n if (!isNullOrUndefined(paragraphFormat[tabsProperty[this.keywordIndex]]) && paragraphFormat[tabsProperty[this.keywordIndex]].length > 0) {\n this.serializeTabs(writer, paragraphFormat[tabsProperty[this.keywordIndex]]);\n }\n };\n WordExport.prototype.getOutlineLevelValue = function (outlineLvl) {\n if (this.keywordIndex == 1) {\n if (outlineLvl > 0) {\n return outlineLvl - 1;\n }\n }\n else {\n if (outlineLvl.toString().indexOf('Level') !== -1) {\n var lvlNumber = parseInt(outlineLvl.toString().substring(5), 10);\n if (lvlNumber > 0) {\n return lvlNumber - 1;\n }\n }\n }\n return 9;\n };\n // Serialize Tabs\n WordExport.prototype.serializeTabs = function (writer, tabStops) {\n writer.writeStartElement('w', 'tabs', this.wNamespace);\n for (var i = 0; i < tabStops.length; i++) {\n this.serializeTab(writer, tabStops[i]);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializeTab = function (writer, tabStop) {\n var position = 0;\n writer.writeStartElement('w', 'tab', this.wNamespace);\n if (tabStop[positionProperty[this.keywordIndex]] === 0 && tabStop[deletePositionProperty[this.keywordIndex]] !== 0) {\n position = tabStop[deletePositionProperty[this.keywordIndex]] * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, 'clear');\n }\n else {\n position = tabStop[positionProperty[this.keywordIndex]] * this.twentiethOfPoint;\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getTabJustification(tabStop[tabJustificationProperty[this.keywordIndex]]));\n }\n if (!isNullOrUndefined(tabStop[tabLeaderProperty[this.keywordIndex]]) && (tabStop[tabLeaderProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 0 : 'None'))) {\n writer.writeAttributeString('w', 'leader', this.wNamespace, this.getTabLeader(tabStop[tabLeaderProperty[this.keywordIndex]]));\n }\n if (!isNaN(position)) {\n writer.writeAttributeString('w', 'pos', this.wNamespace, position.toString() + '');\n }\n writer.writeEndElement();\n };\n WordExport.prototype.getTextWrappingType = function (textWrappingType) {\n switch (textWrappingType) {\n case 0:\n return 'bothSides';\n case 1:\n return 'left';\n case 2:\n return 'right';\n case 3:\n return 'largest';\n default:\n return 'bothSides';\n }\n };\n WordExport.prototype.getTextWrappingStyle = function (textWrappingStyle) {\n switch (textWrappingStyle) {\n case 1:\n return 'InFrontOfText';\n case 2:\n return 'Square';\n case 3:\n return 'TopAndBottom';\n case 4:\n return 'Behind';\n default:\n return 'Inline';\n }\n };\n WordExport.prototype.getDateStorageFormat = function (dateStorageFormat) {\n switch (dateStorageFormat) {\n case 2:\n return 'DateStorageDateTime';\n case 3:\n return 'DateStorageText';\n default:\n return 'DateStorageDate';\n }\n };\n WordExport.prototype.getDateCalendarType = function (dateCalendarType) {\n switch (dateCalendarType) {\n case 1:\n return 'GregorianArabic';\n case 2:\n return 'GregorianEnglish';\n case 3:\n return 'GregorianMiddleEastFrench';\n case 4:\n return 'GregorianTransliteratedEnglish';\n case 5:\n return 'GregorianTransliteratedFrench';\n case 6:\n return 'Hebrew';\n case 7:\n return 'Hijri';\n case 8:\n return 'Japan';\n case 9:\n return 'Korean';\n case 10:\n return 'Saka';\n case 11:\n return 'Taiwan';\n case 12:\n return 'Thai';\n default:\n return 'Gregorian';\n }\n };\n WordExport.prototype.getContentControlAppearance = function (contentControlAppearance) {\n switch (contentControlAppearance) {\n case 2:\n return 'Hidden';\n case 3:\n return 'Tags';\n default:\n return 'BoundingBox';\n }\n };\n WordExport.prototype.getTextFormFieldFormat = function (textFormFieldFormat) {\n switch (textFormFieldFormat) {\n case 1:\n return 'FirstCapital';\n case 2:\n return 'Lowercase';\n case 3:\n return 'Uppercase';\n case 4:\n return 'Titlecase';\n default:\n return 'None';\n }\n };\n WordExport.prototype.getTextFormFieldType = function (textFormFieldType) {\n switch (textFormFieldType) {\n case 1:\n return 'Number';\n case 2:\n return 'Date';\n case 3:\n return 'Calculation';\n default:\n return 'Text';\n }\n };\n WordExport.prototype.getTabLeader = function (tabLeader) {\n switch (tabLeader) {\n case 'Dot':\n case 2:\n return 'dot';\n case 'Hyphen':\n case 3:\n return 'hyphen';\n case 'Underscore':\n case 4:\n return 'underscore';\n default:\n return 'none';\n }\n };\n WordExport.prototype.getTabJustification = function (tabJustification) {\n switch (tabJustification) {\n case 'Bar':\n case 0:\n return 'left';\n case 1:\n return 'bar';\n case 'Center':\n case 2:\n return 'center';\n case 'Decimal':\n case 3:\n return 'decimal';\n case 'Left':\n return 'left';\n case 'List':\n case 4:\n return 'num';\n case 'Right':\n case 5:\n return 'right';\n default:\n return 'clear';\n }\n };\n WordExport.prototype.getTableVerticalAlignment = function (tableVerticalPosition) {\n switch (tableVerticalPosition) {\n case 1:\n return 'top';\n case 2:\n return 'center';\n case 3:\n return 'bottom';\n case 4:\n return 'inside';\n case 5:\n return 'outside';\n default:\n return 'none';\n }\n };\n WordExport.prototype.getTableHorizontalAlignment = function (tableHorizontalPosition) {\n switch (tableHorizontalPosition) {\n case 1:\n return 'center';\n case 2:\n return 'inside';\n case 3:\n return 'outside';\n case 4:\n return 'right';\n default:\n return 'left';\n }\n };\n WordExport.prototype.getTableVerticalRelationEnumValue = function (tableRelation) {\n switch (tableRelation) {\n case 'Paragraph':\n return 0;\n case 'Margin':\n return 1;\n case 'Page':\n return 2;\n default:\n return 0;\n }\n };\n WordExport.prototype.getTableVerticalRelation = function (tableRelation) {\n switch (tableRelation) {\n case 1:\n return 'Margin';\n case 2:\n return 'Page';\n default:\n return 'Paragraph';\n }\n };\n WordExport.prototype.getTableHorizontalRelation = function (tableRelation) {\n switch (tableRelation) {\n case 1:\n return 'Margin';\n case 2:\n return 'Page';\n default:\n return 'Column';\n }\n };\n WordExport.prototype.getVerticalOrigin = function (verticalOrigin) {\n switch (verticalOrigin) {\n case 1:\n return 'BottomMargin';\n case 2:\n return 'InsideMargin';\n case 3:\n return 'Line';\n case 4:\n return 'Margin';\n case 5:\n return 'OutsideMargin';\n case 6:\n return 'Page';\n case 7:\n return 'TopMargin';\n default:\n return 'Paragraph';\n }\n };\n WordExport.prototype.getHorizontalOrigin = function (horizontalOrigin) {\n switch (horizontalOrigin) {\n case 1:\n return 'Character';\n case 2:\n return 'InsideMargin';\n case 3:\n return 'LeftMargin';\n case 4:\n return 'Margin';\n case 5:\n return 'OutsideMargin';\n case 6:\n return 'Page';\n case 7:\n return 'RightMargin';\n default:\n return 'Column';\n }\n };\n WordExport.prototype.getShapeVerticalAlignment = function (shapeVerticalAlignment) {\n switch (shapeVerticalAlignment) {\n case 1:\n return 'Top';\n case 2:\n return 'Center';\n case 3:\n return 'Bottom';\n case 4:\n return 'Inline';\n case 5:\n return 'Inside';\n case 6:\n return 'Outside';\n default:\n return 'None';\n }\n };\n WordExport.prototype.getShapeHorizontalAlignment = function (shapeHorizontalAlignment) {\n switch (shapeHorizontalAlignment) {\n case 1:\n return 'Center';\n case 2:\n return 'Inside';\n case 3:\n return 'Left';\n case 4:\n return 'Outside';\n case 5:\n return 'Right';\n default:\n return 'None';\n }\n };\n WordExport.prototype.getBiDirectionalOverride = function (biDirectionalOverride) {\n switch (biDirectionalOverride) {\n case 1:\n return 'LTR';\n case 2:\n return 'RTL';\n default:\n return 'None';\n }\n };\n WordExport.prototype.getBreakClearType = function (breakClearType) {\n switch (breakClearType) {\n case 0:\n return 'None';\n case 1:\n return 'Left';\n case 2:\n return 'Right';\n case 3:\n return 'All';\n default:\n return breakClearType;\n }\n };\n // // Seraializes the pargraph list format\n // private serializeListParagraph(writer: XmlWriter, paragraph: any): void {\n // if (!isNullOrUndefined(paragraph.paragraphFormat.listFormat)) {\n // this.serializeListFormat(writer, paragraph.paragraphFormat.listFormat);\n // }\n // }\n // Serialize the list format\n WordExport.prototype.serializeListFormat = function (writer, lf) {\n // let pStyleName = undefined;\n // if (lf.CurrentListStyle.IsBuiltInStyle && !isNullOrUndefined(lf.OwnerParagraph))\n // {\n // pStyleName = lf.OwnerParagraph.StyleName;\n // }\n // int listId = GetListId(lf);\n // if (!isNullOrUndefined(pStyleName) && string.IsNullOrEmpty(lf.LFOStyleName)) \n // {\n // WordDocument doc = lf.OwnerParagraph.Document;\n // WParagraphStyle style = doc.Styles.FindByName(pStyleName, StyleType.ParagraphStyle) as WParagraphStyle;\n // if (style.ListIndex === -1)\n // {\n // ListStyle lstStyle = lf.OwnerParagraph.Document.ListStyles.FindByName(lf.CustomStyleName);\n // style.ListIndex = listId;\n // if (lstStyle.Levels.length > 1)\n // {\n // style.ListLevel = lf.ListLevelNumber;\n // }\n // pStyleName = pStyleName.Replace(' ', '');\n // lstStyle.Levels[lf.ListLevelNumber].ParaStyleName = pStyleName;\n // }\n // }\n // else\n // {\n // if (!isNullOrUndefined(lf.listId) && !isNullOrUndefined(lf.listLevelNumber)) {\n // this.serializeNumPr(writer, lf.listId, lf.listLevelNumber);\n // }\n // }\n if (!isNullOrUndefined(lf[listIdProperty[this.keywordIndex]]) || !isNullOrUndefined(lf[listLevelNumberProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n if (!isNullOrUndefined(lf[listLevelNumberProperty[this.keywordIndex]]) && lf[listLevelNumberProperty[this.keywordIndex]] !== -1) {\n writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, lf[listLevelNumberProperty[this.keywordIndex]].toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(lf[listIdProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'numId', this.wNamespace);\n var listId = (lf[listIdProperty[this.keywordIndex]] + 1).toString();\n // When attempting to open the exported document in tika server, the empty listId value is having trouble.So commented this below lines\n // if (lf[listIdProperty[this.keywordIndex]] === -1) {\n // listId = '';\n // }\n writer.writeAttributeString('w', 'val', this.wNamespace, listId);\n writer.writeEndElement();\n }\n writer.writeEndElement();\n }\n };\n // // Serializes the numbering properties to the paragraph\n // private serializeNumPr(writer: XmlWriter, listId: number, listLevel: number): void {\n // writer.writeStartElement(undefined, 'numPr', this.wNamespace);\n // if (listLevel !== -1) {\n // writer.writeStartElement(undefined, 'ilvl', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listLevel.toString());\n // writer.writeEndElement();\n // }\n // if (listId !== -1) {\n // writer.writeStartElement(undefined, 'numId', this.wNamespace);\n // writer.writeAttributeString('w', 'val', this.wNamespace, listId.toString());\n // writer.writeEndElement();\n // }\n // writer.writeEndElement();\n // }\n WordExport.prototype.serializeParagraphAlignment = function (writer, txtAlignment, isBidi) {\n if (!isNullOrUndefined(txtAlignment)) {\n writer.writeStartElement(undefined, 'jc', this.wNamespace);\n var alignment = void 0;\n switch (txtAlignment) {\n case 'Center':\n case 1:\n alignment = 'center';\n break;\n case 'Right':\n case 2:\n alignment = 'right';\n break;\n case 'Justify':\n case 3:\n alignment = 'both';\n break;\n default:\n alignment = 'left';\n break;\n }\n writer.writeAttributeString('w', 'val', this.wNamespace, alignment);\n writer.writeEndElement();\n }\n };\n // Serializes the paragraph spacings\n WordExport.prototype.serializeParagraphSpacing = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'spacing', this.wNamespace);\n // if (paragraphFormat.HasValue(WParagraphFormat.BeforeLinesKey))\n // {\n // short beforeLines = (short)Math.Round(paragraphFormat.BeforeLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('beforeLines', this.wNamespace, ToString((float)beforeLines)); \n // }\n // if (paragraphFormat.HasValue(WParagraphFormat.AfterLinesKey))\n // {\n // short afterLines = (short)Math.Round(paragraphFormat.AfterLines * DLSConstants.HundredthsUnit);\n // writer.WriteAttributeString('afterLines', this.wNamespace, ToString((float)afterLines)); \n // }\n if (!isNullOrUndefined(paragraphFormat[beforeSpacingProperty[this.keywordIndex]])) {\n writer.writeAttributeString(undefined, 'before', this.wNamespace, this.roundToTwoDecimal(paragraphFormat[beforeSpacingProperty[this.keywordIndex]] * this.twentiethOfPoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat[spaceBeforeAutoProperty[this.keywordIndex]])) {\n var value = this.keywordIndex == 1 ? paragraphFormat[spaceBeforeAutoProperty[this.keywordIndex]].toString() : (paragraphFormat[spaceBeforeAutoProperty[this.keywordIndex]]) ? \"1\" : \"0\";\n writer.writeAttributeString(undefined, 'beforeAutospacing', this.wNamespace, value);\n }\n //TODO:ISSUEFIX(paragraphFormat.beforeSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingBeforeAutoKey))\n // {\n // if (paragraphFormat.SpaceBeforeAuto)\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('beforeAutospacing', this.wNamespace, '0');\n // }\n // }\n if (!isNullOrUndefined(paragraphFormat[afterSpacingProperty[this.keywordIndex]])) {\n writer.writeAttributeString(undefined, 'after', this.wNamespace, this.roundToTwoDecimal(paragraphFormat[afterSpacingProperty[this.keywordIndex]] * this.twentiethOfPoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat[spaceAfterAutoProperty[this.keywordIndex]])) {\n var value = this.keywordIndex == 1 ? paragraphFormat[spaceAfterAutoProperty[this.keywordIndex]].toString() : (paragraphFormat[spaceAfterAutoProperty[this.keywordIndex]]) ? \"1\" : \"0\";\n writer.writeAttributeString(undefined, 'afterAutospacing', this.wNamespace, value);\n }\n //TODO:ISSUEFIX(paragraphFormat.afterSpacing * this.twentiethOfPoint).toString());\n // if (paragraphFormat.HasValue(WParagraphFormat.SpacingAfterAutoKey))\n // {\n // if (paragraphFormat.SpaceAfterAuto)\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '1');\n // }\n // else\n // {\n // writer.WriteAttributeString('afterAutospacing', this.wNamespace, '0');\n // }\n // }\n //TODO:ISSUEFIX((paragraphFormat.lineSpacing) * this.twentiethOfPoint).toString());\n // lineSpacingType has enum values 0,1,2 for AtLeast, Exactly and Multiple respectively\n if (!isNullOrUndefined(paragraphFormat[lineSpacingProperty[this.keywordIndex]])) {\n var lineSpacingValue = (paragraphFormat[lineSpacingTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 1 : 'AtLeast') || paragraphFormat[lineSpacingTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 2 : 'Exactly')) ? this.roundToTwoDecimal(paragraphFormat[lineSpacingProperty[this.keywordIndex]] * this.twentiethOfPoint) : this.roundToTwoDecimal(paragraphFormat[lineSpacingProperty[this.keywordIndex]] * 240);\n writer.writeAttributeString(undefined, 'line', this.wNamespace, lineSpacingValue.toString());\n }\n if (!isNullOrUndefined(paragraphFormat[lineSpacingTypeProperty[this.keywordIndex]])) {\n var lineSpacingType = 'auto';\n if (paragraphFormat[lineSpacingTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 1 : 'AtLeast')) {\n lineSpacingType = 'atLeast';\n }\n else if (paragraphFormat[lineSpacingTypeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 2 : 'Exactly')) {\n lineSpacingType = 'exact';\n }\n writer.writeAttributeString(undefined, 'lineRule', this.wNamespace, lineSpacingType);\n }\n writer.writeEndElement();\n };\n // Serializes the paragraph indentation\n WordExport.prototype.serializeIndentation = function (writer, paragraphFormat) {\n writer.writeStartElement(undefined, 'ind', this.wNamespace);\n if (!isNullOrUndefined(paragraphFormat[leftIndentProperty[this.keywordIndex]])) {\n writer.writeAttributeString(undefined, 'left', this.wNamespace, this.roundToTwoDecimal(paragraphFormat[leftIndentProperty[this.keywordIndex]] * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat[rightIndentProperty[this.keywordIndex]])) {\n writer.writeAttributeString(undefined, 'right', this.wNamespace, this.roundToTwoDecimal(paragraphFormat[rightIndentProperty[this.keywordIndex]] * this.twipsInOnePoint).toString());\n }\n if (!isNullOrUndefined(paragraphFormat[firstLineIndentProperty[this.keywordIndex]])) {\n if (paragraphFormat[firstLineIndentProperty[this.keywordIndex]] < 0) {\n writer.writeAttributeString(undefined, 'hanging', this.wNamespace, this.roundToTwoDecimal(-1 * paragraphFormat[firstLineIndentProperty[this.keywordIndex]] * this.twipsInOnePoint).toString());\n }\n else {\n writer.writeAttributeString(undefined, 'firstLine', this.wNamespace, this.roundToTwoDecimal(paragraphFormat[firstLineIndentProperty[this.keywordIndex]] * this.twipsInOnePoint).toString());\n }\n }\n writer.writeEndElement();\n };\n //creates custom xml mapping\n WordExport.prototype.serializeCustomXMLMapping = function (customXML, writer) {\n if (customXML.length > 0) {\n var keys = customXML.keys;\n for (var i = 0; i < keys.length; i++) {\n var customXmlWriter = new XmlWriter();\n customXmlWriter.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n var xmlData = this.mCustomXML.get(keys[i]);\n var itemID = keys[i];\n var id = this.getNextRelationShipID();\n var fileIndex = i + 1;\n var itemPath = this.createXMLItem(xmlData, id, fileIndex);\n var itemPropsPath = this.createXMLItemProps(itemID, fileIndex);\n this.serializeRelationShip(writer, id, this.customXmlRelType, '../' + itemPath);\n this.customXMLRelation(customXmlWriter, fileIndex, itemPropsPath);\n customXmlWriter.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(customXmlWriter.buffer, this.customXMLRelPath + fileIndex + '.xml.rels');\n this.mArchive.addItem(zipArchiveItem);\n }\n }\n };\n WordExport.prototype.customXMLRelation = function (writer, fileIndex, itemPropsPath) {\n this.serializeRelationShip(writer, 'rId1', this.wordMLCustomXmlPropsRelType, itemPropsPath);\n };\n WordExport.prototype.createXMLItem = function (xmlData, id, fileIndex) {\n var xmlBlob = new Blob([xmlData], { type: 'text/plain' });\n var itemPath = this.customXMLItemsPath + fileIndex + '.xml';\n var zipArchiveItem = new ZipArchiveItem(xmlBlob, itemPath);\n this.mArchive.addItem(zipArchiveItem);\n return itemPath;\n };\n WordExport.prototype.createXMLItemProps = function (itemID, fileIndex) {\n var writer = new XmlWriter();\n var customitemPropsPath = this.customXMLItemsPropspath + fileIndex + '.xml';\n var itemPropsPath = this.itemPropsPath + fileIndex + '.xml';\n writer.writeStartElement('ds', 'datastoreItem', this.wNamespace);\n writer.writeAttributeString('ds', 'itemID', undefined, itemID);\n writer.writeAttributeString('xmlns', 'ds', undefined, this.dsNamespace);\n writer.writeEndElement();\n this.customXMLProps.push(customitemPropsPath);\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, customitemPropsPath);\n this.mArchive.addItem(zipArchiveItem);\n return itemPropsPath;\n };\n // Serialize the styles (styles.xml)\n WordExport.prototype.serializeStyles = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'styles', this.wNamespace);\n writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'w', undefined, this.wNamespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n //writes the document defaults, latent styles and default styles.\n this.serializeDefaultStyles(writer);\n //writes the document styles\n this.serializeDocumentStyles(writer);\n writer.writeEndElement(); //end of styles tag\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.stylePath);\n this.mArchive.addItem(zipArchiveItem); //this.stylePath, styleStream, false, FileAttributes.Archive);\n };\n // Serializes the default styles (document default paragraph and character format)\n WordExport.prototype.serializeDefaultStyles = function (writer) {\n writer.writeStartElement(undefined, 'docDefaults', this.wNamespace);\n //if (HasDefaultCharFormat())\n //{\n writer.writeStartElement(undefined, 'rPrDefault', this.wNamespace);\n // if (!isNullOrUndefined(this.mDocument.characterFormat)) {\n this.serializeCharacterFormat(writer, this.defCharacterFormat);\n writer.writeEndElement(); // end of rPrDefault\n // }\n // else {\n // writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n // writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n // if (!string.IsNullOrEmpty(m_document.StandardAsciiFont))\n // writer.WriteAttributeString('ascii', this.wNamespace, m_document.StandardAsciiFont);\n // if (!string.IsNullOrEmpty(m_document.StandardFarEastFont))\n // writer.WriteAttributeString('eastAsia', this.wNamespace, m_document.StandardFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardNonFarEastFont))\n // writer.WriteAttributeString('hAnsi', this.wNamespace, m_document.StandardNonFarEastFont);\n // if (!string.IsNullOrEmpty(m_document.StandardBidiFont))\n // writer.WriteAttributeString('cs', this.wNamespace, m_document.StandardBidiFont);\n // writer.WriteEndElement();\n // float fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('sz', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // fontSize = GetDefFontSize(m_document, WCharacterFormat.FontSizeBidiKey);\n // if (fontSize !== 0f)\n // {\n // writer.WriteStartElement('szCs', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, (fontSize * 2).ToString(CultureInfo.InvariantCulture));\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // }\n // writer.WriteEndElement();\n // //}\n writer.writeStartElement(undefined, 'pPrDefault', this.wNamespace);\n if (!isNullOrUndefined(this.defParagraphFormat)) {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, this.defParagraphFormat, undefined);\n writer.writeEndElement(); //end of pPr\n }\n writer.writeEndElement(); //end of pPrDefault\n // writer.WriteEndElement();\n // SerializeLatentStyles();\n // //Default styles\n // if (m_document.Styles.length === 0 || isNullOrUndefined(m_document.Styles.FindByName('Normal')))\n // {\n // SerializeDefaultParagraphStyle();\n // }\n // if (!IsDocumentContainsDefaultTableStyle())\n // {\n // SerializeTableNormalStyle();\n // }\n // if (isNullOrUndefined(m_document.Styles.FindByName('No List')) && isNullOrUndefined(m_document.Styles.FindByName('NoList')))\n // SerializeNoListStyle();\n // if (isNullOrUndefined(m_document.Styles.FindByName('Table Grid')) && isNullOrUndefined(m_document.Styles.FindByName('TableGrid')))\n // {\n // SerializeTableGridStyle();\n // }\n // } \n writer.writeEndElement();\n };\n WordExport.prototype.serializeDocumentStyles = function (writer) {\n for (var i = 0; i < this.mStyles.length; i++) {\n var style = this.mStyles[i];\n writer.writeStartElement(undefined, 'style', this.wNamespace);\n var type = this.getStyleType(style[typeProperty[this.keywordIndex]]);\n writer.writeAttributeString('w', 'type', this.wNamespace, type);\n writer.writeAttributeString('w', 'styleId', this.wNamespace, style[nameProperty[this.keywordIndex]]);\n //name\n writer.writeStartElement(undefined, 'name', this.wNamespace);\n var list = [\"TOC 1\", \"TOC 2\", \"TOC 3\", \"TOC 4\", \"TOC 5\", \"TOC 6\", \"TOC 7\", \"TOC 8\", \"TOC 9\"];\n if (list.indexOf(style[nameProperty[this.keywordIndex]]) != -1) {\n writer.writeAttributeString('w', 'val', this.wNamespace, style[nameProperty[this.keywordIndex]].toLowerCase());\n }\n else {\n writer.writeAttributeString('w', 'val', this.wNamespace, style[nameProperty[this.keywordIndex]]);\n }\n writer.writeEndElement();\n //basedOn\n if (!isNullOrUndefined(style[basedOnProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'basedOn', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style[basedOnProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n //next\n if (!isNullOrUndefined(style[nextProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'next', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style[nextProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n //link\n if (!isNullOrUndefined(style[linkProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'link', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, style[linkProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n if (style[typeProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Paragraph')) {\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, style[paragraphFormatProperty[this.keywordIndex]], undefined);\n writer.writeEndElement();\n }\n // let value = (style.characterFormat as WCharacterFormat).newgetCharacterFormat();\n if (style[typeProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 2 : 'Table')) {\n this.serializeCharacterFormat(writer, style[characterFormatProperty[this.keywordIndex]]);\n }\n writer.writeEndElement(); //end of Style\n }\n };\n // Serializes the Character format\n WordExport.prototype.serializeCharacterFormat = function (writer, characterFormat) {\n if (isNullOrUndefined(this.keywordIndex)) {\n this.keywordIndex = 0;\n }\n writer.writeStartElement(undefined, 'rPr', this.wNamespace);\n if (!isNullOrUndefined(characterFormat[styleNameProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'rStyle', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, characterFormat[styleNameProperty[this.keywordIndex]]);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat[fontFamilyProperty[this.keywordIndex]]) || !isNullOrUndefined(characterFormat[fontFamilyBidiProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'rFonts', this.wNamespace);\n if (!isNullOrUndefined(characterFormat[fontFamilyAsciiProperty[this.keywordIndex]])) {\n var key = HelperMethods.isThemeFont(characterFormat[fontFamilyAsciiProperty[this.keywordIndex]]) ? 'asciiTheme' : 'ascii';\n writer.writeAttributeString(undefined, key, this.wNamespace, characterFormat[fontFamilyAsciiProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(characterFormat[fontFamilyFarEastProperty[this.keywordIndex]])) {\n var key = HelperMethods.isThemeFont(characterFormat[fontFamilyFarEastProperty[this.keywordIndex]]) ? 'eastAsiaTheme' : 'eastAsia';\n writer.writeAttributeString(undefined, key, this.wNamespace, characterFormat[fontFamilyFarEastProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(characterFormat[fontFamilyNonFarEastProperty[this.keywordIndex]])) {\n var key = HelperMethods.isThemeFont(characterFormat[fontFamilyNonFarEastProperty[this.keywordIndex]]) ? 'hAnsiTheme' : 'hAnsi';\n writer.writeAttributeString(undefined, key, this.wNamespace, characterFormat[fontFamilyNonFarEastProperty[this.keywordIndex]]);\n }\n if (!isNullOrUndefined(characterFormat[fontFamilyBidiProperty[this.keywordIndex]])) {\n var key = HelperMethods.isThemeFont(characterFormat[fontFamilyBidiProperty[this.keywordIndex]]) ? 'cstheme' : 'cs';\n writer.writeAttributeString(undefined, key, this.wNamespace, characterFormat[fontFamilyBidiProperty[this.keywordIndex]]);\n }\n writer.writeEndElement(); //end \n }\n if (!isNullOrUndefined(characterFormat[boldProperty[this.keywordIndex]])) {\n this.serializeBoolProperty(writer, 'b', HelperMethods.parseBoolValue(characterFormat[boldProperty[this.keywordIndex]]));\n }\n if (HelperMethods.parseBoolValue(characterFormat[boldBidiProperty[this.keywordIndex]])) {\n this.serializeBoolProperty(writer, 'bCs', HelperMethods.parseBoolValue(characterFormat[boldBidiProperty[this.keywordIndex]]));\n }\n if (!isNullOrUndefined(characterFormat[italicProperty[this.keywordIndex]])) {\n this.serializeBoolProperty(writer, 'i', HelperMethods.parseBoolValue(characterFormat[italicProperty[this.keywordIndex]]));\n }\n if (!isNullOrUndefined(characterFormat[italicBidiProperty[this.keywordIndex]])) {\n this.serializeBoolProperty(writer, 'iCs', HelperMethods.parseBoolValue(characterFormat[italicBidiProperty[this.keywordIndex]]));\n }\n if (HelperMethods.parseBoolValue(characterFormat[bidiProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'rtl', this.wNamespace);\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat[allCapsProperty[this.keywordIndex]])) {\n this.serializeBoolProperty(writer, 'caps', HelperMethods.parseBoolValue(characterFormat[allCapsProperty[this.keywordIndex]]));\n }\n if (HelperMethods.parseBoolValue(characterFormat[complexScriptProperty[this.keywordIndex]])) {\n this.serializeBoolProperty(writer, 'cs', HelperMethods.parseBoolValue(characterFormat[complexScriptProperty[this.keywordIndex]]));\n }\n if (!isNullOrUndefined(characterFormat[strikethroughProperty[this.keywordIndex]])) {\n switch (characterFormat[strikethroughProperty[this.keywordIndex]]) {\n case 'SingleStrike':\n case 1:\n this.serializeBoolProperty(writer, 'strike', true);\n break;\n case 'DoubleStrike':\n case 2:\n this.serializeBoolProperty(writer, 'dstrike', true);\n break;\n default:\n this.serializeBoolProperty(writer, 'strike', false);\n this.serializeBoolProperty(writer, 'dstrike', false);\n break;\n }\n }\n if (!isNullOrUndefined(characterFormat[fontColorProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'color', this.wNamespace);\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (characterFormat[fontColorProperty[this.keywordIndex]] === 'empty' || characterFormat[fontColorProperty[this.keywordIndex]] === '#00000000') {\n writer.writeAttributeString('w', 'val', this.wNamespace, 'auto');\n }\n else {\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getColor(characterFormat[fontColorProperty[this.keywordIndex]]));\n }\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat[fontSizeProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'sz', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.roundToTwoDecimal(characterFormat[fontSizeProperty[this.keywordIndex]] * 2).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat[characterSpacingProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'spacing', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, (characterFormat[characterSpacingProperty[this.keywordIndex]] * 20).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat[scalingProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'w', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, (characterFormat[scalingProperty[this.keywordIndex]]).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat[fontSizeBidiProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'szCs', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.roundToTwoDecimal(characterFormat[fontSizeBidiProperty[this.keywordIndex]] * 2).toString());\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat[highlightColorProperty[this.keywordIndex]]) && characterFormat[highlightColorProperty[this.keywordIndex]] !== (this.keywordIndex == 1 ? 0 : 'NoColor')) {\n writer.writeStartElement(undefined, 'highlight', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getHighlightColor(characterFormat[highlightColorProperty[this.keywordIndex]]));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat[revisionIdsProperty[this.keywordIndex]]) && characterFormat[revisionIdsProperty[this.keywordIndex]].length > 0) {\n this.serializeRevisionStart(writer, characterFormat, undefined);\n this.serializeRevisionEnd(writer, characterFormat, undefined);\n }\n if (!isNullOrUndefined(characterFormat[underlineProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'u', this.wNamespace);\n writer.writeAttributeString('w', 'val', this.wNamespace, this.getUnderlineStyle(characterFormat[underlineProperty[this.keywordIndex]]));\n writer.writeEndElement();\n }\n if (!isNullOrUndefined(characterFormat[baselineAlignmentProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'vertAlign', this.wNamespace);\n switch (characterFormat[baselineAlignmentProperty[this.keywordIndex]]) {\n case 'Superscript':\n case 1:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'superscript');\n break;\n case 'Subscript':\n case 2:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'subscript');\n break;\n default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'baseline');\n break;\n }\n writer.writeEndElement();\n }\n writer.writeEndElement(); //end of rPrChange\n };\n WordExport.prototype.getColor = function (color) {\n if (color.length > 0) {\n if (color[0] === '#') {\n color = color.substr(1);\n }\n if (color.length > 6) {\n color = color.substr(0, 6);\n }\n }\n return color;\n };\n WordExport.prototype.getStyleType = function (styleType) {\n switch (styleType) {\n case 'Character':\n case 1:\n return 'character';\n case 'Table':\n case 2:\n return 'table';\n default:\n return 'paragraph';\n }\n };\n // Get the underline style as string\n WordExport.prototype.getUnderlineStyle = function (underlineStyle) {\n switch (underlineStyle) {\n case 'None':\n case 0:\n return 'none';\n case 'Single':\n case 1:\n return 'single';\n case 'Words':\n case 2:\n return 'words';\n case 'Double':\n case 3:\n return 'double';\n case 'Dotted':\n case 4:\n return 'dotted';\n case 'Thick':\n case 5:\n return 'thick';\n case 6:\n return 'dash';\n case 'DashLong':\n case 7:\n return 'dashLong';\n case 'DotDash':\n case 8:\n return 'dotDash';\n case 'DotDotDash':\n case 9:\n return 'dotDotDash';\n case 'Wavy':\n case 10:\n return 'wave';\n case 'DottedHeavy':\n case 11:\n return 'dottedHeavy';\n case 'DashHeavy':\n case 12:\n return 'dashedHeavy';\n case 'DashLongHeavy':\n case 13:\n return 'dashLongHeavy';\n case 'DotDashHeavy':\n case 14:\n return 'dashDotHeavy';\n case 'DotDotDashHeavy':\n case 15:\n return 'dashDotDotHeavy';\n case 'WavyHeavy':\n case 16:\n return 'wavyHeavy';\n case 'WavyDouble':\n case 17:\n return 'wavyDouble';\n default:\n return 'dash';\n }\n };\n WordExport.prototype.getHighlightColor = function (highlight) {\n switch (highlight) {\n // Highlights the content with bright green (#ff00ff00) color.\n case 'BrightGreen':\n case 2:\n return 'green';\n // Highlights the content with turquoise (#ff00ffff) color.\n case 'Turquoise':\n case 3:\n return 'cyan';\n // Highlights the content with pink (#ffff00ff) color.\n case 'Pink':\n case 4:\n return 'magenta';\n // Highlights the content with blue (#ff0000ff) color.\n case 'Blue':\n case 5:\n return 'blue';\n // Highlights the content with red (#ffff0000) color.\n case 'Red':\n case 6:\n return 'red';\n // Highlights the content with dark blue (#ff000080) color.\n case 'DarkBlue':\n case 7:\n return 'darkBlue';\n // Highlights the content with teal (#ff008080) color.\n case 'Teal':\n case 8:\n return 'darkCyan';\n // Highlights the content with green (#ff008000) color.\n case 'Green':\n case 9:\n return 'darkGreen';\n // Highlights the content with violet (#ff800080) color.\n case 'Violet':\n case 10:\n return 'darkMagenta';\n // Highlights the content with dark red (#ff800000) color.\n case 'DarkRed':\n case 11:\n return 'darkRed';\n // Highlights the content with dark yellow (#ff808000) color.\n case 'DarkYellow':\n case 12:\n return 'darkYellow';\n // Highlights the content with gray 50 (#ff808080) color.\n case 'Gray50':\n case 13:\n return 'darkGray';\n // Highlights the content with gray 25 (#ffc0c0c0) color.\n case 'Gray25':\n case 14:\n return 'lightGray';\n // Highlights the content with black (#ff000000) color.\n case 'Black':\n case 15:\n return 'black';\n // Highlights the content with yellow (#ffffff00) color.\n default:\n return 'yellow';\n }\n };\n /*private toggleFirstCahar(text: string) {\n return text.charAt(0).toLowerCase() + text.slice(1);\n }*/\n // Serializes the bool character format property\n WordExport.prototype.serializeBoolProperty = function (writer, tag, value) {\n writer.writeStartElement(undefined, tag, this.wNamespace);\n if (!value) {\n writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n }\n writer.writeEndElement();\n };\n // Serialize the list styles and numberings (numberings.xml)\n WordExport.prototype.serializeNumberings = function () {\n if (this.document[listsProperty[this.keywordIndex]].length === 0) {\n return;\n }\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'numbering', this.wNamespace);\n this.writeCommonAttributeStrings(writer);\n // this.serializePictureBullets(writer, this.mDocument.lists);\n this.serializeAbstractListStyles(writer, this.document[abstractListsProperty[this.keywordIndex]]);\n this.serializeListInstances(writer, this.document[listsProperty[this.keywordIndex]]);\n // SerializeListOverrides(writer, this.mDocument.ridesm_document.ListOverrides);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.numberingPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the abstract list styles\n WordExport.prototype.serializeAbstractListStyles = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var abstractList = listStyles[i];\n writer.writeStartElement(undefined, 'abstractNum', this.wNamespace);\n writer.writeAttributeString(undefined, 'abstractNumId', this.wNamespace, abstractList[abstractListIdProperty[this.keywordIndex]].toString());\n writer.writeStartElement(undefined, 'nsid', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.generateHex());\n writer.writeEndElement();\n for (var ilvl = 0, cnt = abstractList[levelsProperty[this.keywordIndex]].length; ilvl < cnt; ilvl++) {\n this.serializeListLevel(writer, abstractList[levelsProperty[this.keywordIndex]][ilvl], ilvl);\n }\n writer.writeEndElement(); //end of abstractNum\n }\n };\n // Serializes the list styles\n WordExport.prototype.serializeListInstances = function (writer, listStyles) {\n for (var i = 0; i < listStyles.length; i++) {\n var list = listStyles[i];\n writer.writeStartElement(undefined, 'num', this.wNamespace);\n writer.writeAttributeString(undefined, 'numId', this.wNamespace, (list[listIdProperty[this.keywordIndex]] + 1).toString());\n writer.writeStartElement(undefined, 'abstractNumId', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, list[abstractListIdProperty[this.keywordIndex]].toString());\n writer.writeEndElement();\n for (var lvl = 0, cnt = list[levelOverridesProperty[this.keywordIndex]].length; lvl < cnt; lvl++) {\n this.serializeLevelOverrides(writer, list[levelOverridesProperty[this.keywordIndex]][lvl], list[levelOverridesProperty[this.keywordIndex]][lvl][levelNumberProperty[this.keywordIndex]]);\n }\n writer.writeEndElement();\n }\n };\n WordExport.prototype.generateHex = function () {\n return (Math.floor(Math.random() * (4000000000 - 270000000)) + 270000000).toString(16).toUpperCase();\n };\n WordExport.prototype.roundToTwoDecimal = function (num) {\n return Math.round(num); // * 100) / 100;\n };\n // Serialize the list level\n WordExport.prototype.serializeListLevel = function (writer, listLevel, levelIndex) {\n writer.writeStartElement(undefined, 'lvl', this.wNamespace);\n writer.writeAttributeString(undefined, 'ilvl', this.wNamespace, levelIndex.toString());\n if (!isNullOrUndefined(listLevel[isLegalStyleNumberingProperty[this.keywordIndex]]) && listLevel[isLegalStyleNumberingProperty[this.keywordIndex]]) {\n writer.writeElementString(undefined, 'isLgl', this.wNamespace, undefined);\n }\n writer.writeStartElement(undefined, 'start', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel[startAtProperty[this.keywordIndex]].toString());\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'numFmt', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, this.getLevelPattern(listLevel[listLevelPatternProperty[this.keywordIndex]]));\n writer.writeEndElement();\n if (!isNullOrUndefined(listLevel[paraStyleNameProperty[this.keywordIndex]]) && listLevel[paraStyleNameProperty[this.keywordIndex]].toString() !== '') {\n writer.writeStartElement(undefined, 'pStyle', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel[paraStyleNameProperty[this.keywordIndex]].toString());\n writer.writeEndElement();\n }\n // if (listLevel.restartLevel > 0) {\n // writer.writeStartElement(undefined, 'lvlRestart', this.wNamespace);\n // writer.writeAttributeString(undefined, 'val', this.wNamespace, '0');\n // writer.writeEndElement();\n // }\n // if (!isNullOrUndefined(listLevel.paragraphFormat)) {\n // string name = listLevel.ParaStyleName.Substring(0, 1).ToUpper() + listLevel.ParaStyleName.Remove(0, 1);\n // writer.WriteStartElement('pStyle', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, name);\n // writer.WriteEndElement();\n // }\n // if (listLevel.IsLegalStyleNumbering) {\n // writer.WriteStartElement('isLgl', this.wNamespace);\n // writer.WriteEndElement();\n // }\n this.serializeLevelFollow(writer, listLevel);\n this.serializeLevelText(writer, listLevel, levelIndex + 1);\n // SerializeLegacyProperties(listLevel);\n // if (listLevel.PicBulletId > 0) {\n // writer.WriteStartElement('lvlPicBulletId', this.wNamespace);\n // writer.WriteAttributeString('val', this.wNamespace, listLevel.PicBulletId.ToString());\n // writer.WriteEndElement();\n // }\n // //lvlJc\n // if (listLevel.NumberAlignment !== ListNumberAlignment.Left) {\n // writer.WriteStartElement('lvlJc', this.wNamespace);\n // string alignment = string.Empty;\n // if (listLevel.NumberAlignment === ListNumberAlignment.Right) {\n // alignment = 'right';\n // }\n // else {\n // alignment = 'center';\n // }\n // writer.WriteAttributeString('val', this.wNamespace, alignment);\n // writer.WriteEndElement();\n // }\n writer.writeStartElement(undefined, 'pPr', this.wNamespace);\n this.serializeParagraphFormat(writer, listLevel[paragraphFormatProperty[this.keywordIndex]], undefined);\n writer.writeEndElement(); //end of pPr\n this.serializeCharacterFormat(writer, listLevel[characterFormatProperty[this.keywordIndex]]);\n writer.writeEndElement();\n };\n //Serialize the levelOverrides\n WordExport.prototype.serializeLevelOverrides = function (writer, listLevel, levelIndex) {\n writer.writeStartElement(undefined, 'lvlOverride', this.wNamespace);\n writer.writeAttributeString(undefined, 'ilvl', this.wNamespace, levelIndex.toString());\n if (!isNullOrUndefined(listLevel[overrideListLevelProperty[this.keywordIndex]]))\n this.serializeListLevel(writer, listLevel[overrideListLevelProperty[this.keywordIndex]], levelIndex);\n if (!isNullOrUndefined(listLevel[startAtProperty[this.keywordIndex]])) {\n writer.writeStartElement(undefined, 'startOverride', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, listLevel[startAtProperty[this.keywordIndex]].toString());\n writer.writeEndElement();\n }\n writer.writeEndElement();\n };\n WordExport.prototype.getLevelPattern = function (levelPattern) {\n var patternType;\n switch (levelPattern) {\n case 'None':\n case 0:\n patternType = 'none';\n break;\n case 'Arabic':\n case 1:\n patternType = 'decimal';\n break;\n case 'UpRoman':\n case 2:\n patternType = 'upperRoman';\n break;\n case 'LowRoman':\n case 3:\n patternType = 'lowerRoman';\n break;\n case 'UpLetter':\n case 4:\n patternType = 'upperLetter';\n break;\n case 'LowLetter':\n case 5:\n patternType = 'lowerLetter';\n break;\n case 'Ordinal':\n case 6:\n patternType = 'ordinal';\n break;\n case 'Number':\n case 7:\n patternType = 'cardinalText';\n break;\n case 'OrdinalText':\n case 8:\n patternType = 'ordinalText';\n break;\n case 'LeadingZero':\n case 9:\n patternType = 'decimalZero';\n break;\n case 'FarEast':\n case 11:\n patternType = 'aiueoFullWidth';\n break;\n case 'Special':\n case 12:\n patternType = 'russianLower';\n break;\n // case 'Bullet':\n default:\n patternType = 'bullet';\n break;\n }\n return patternType;\n };\n // Serializes the level text\n WordExport.prototype.serializeLevelText = function (writer, listLevel, lvlIndex) {\n writer.writeStartElement(undefined, 'lvlText', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, (listLevel[numberFormatProperty[this.keywordIndex]]));\n writer.writeEndElement();\n };\n // Serialize the level follow character\n WordExport.prototype.serializeLevelFollow = function (writer, listLevel) {\n var fc;\n //TODO:Type issue returns number instead of string\n if (listLevel[followCharacterProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 0 : 'Tab')) {\n fc = 'tab';\n }\n else if (listLevel[followCharacterProperty[this.keywordIndex]] === (this.keywordIndex == 1 ? 1 : 'Space')) {\n fc = 'space';\n }\n else {\n fc = 'nothing';\n }\n writer.writeStartElement(undefined, 'suff', this.wNamespace);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, fc);\n writer.writeEndElement();\n };\n WordExport.prototype.serializeThemeFontLang = function (writer) {\n var isLanguageIdBi = this.themeFontLang[localeIdBidiProperty[this.keywordIndex]] > 0;\n var isLanguageId = this.themeFontLang[localeIdProperty[this.keywordIndex]] > 0;\n var isLanguageIdFarEast = this.themeFontLang[localeIdFarEastProperty[this.keywordIndex]] > 0;\n if (isLanguageId || isLanguageIdFarEast || isLanguageIdBi) {\n writer.writeStartElement('w', 'themeFontLang', undefined);\n if (isLanguageId) {\n var ascii = LocaleId[this.themeFontLang[localeIdProperty[this.keywordIndex]]];\n writer.writeAttributeString('w', 'val', undefined, ascii.replace('_', '-')); //Ascii key\n }\n if (isLanguageIdBi) {\n var bidi = LocaleId[this.themeFontLang[localeIdBidiProperty[this.keywordIndex]]];\n writer.writeAttributeString('w', 'bidi', undefined, bidi.replace('_', '-')); //Bidi key\n }\n if (isLanguageIdFarEast) {\n var farEast = LocaleId[this.themeFontLang[localeIdFarEastProperty[this.keywordIndex]]];\n writer.writeAttributeString('w', 'eastAsia', undefined, farEast.replace('_', '-')); //EastAsia key\n }\n writer.writeEndElement();\n }\n };\n WordExport.prototype.serializeDocumentProtectionSettings = function (writer) {\n writer.writeStartElement('w', 'documentProtection', this.wNamespace);\n if (this.formatting) {\n writer.writeAttributeString('w', 'formatting', this.wNamespace, '1');\n }\n if (this.protectionType && this.protectionType !== 0) {\n var editMode = void 0;\n switch (this.protectionType) {\n case 'ReadOnly':\n case 1:\n editMode = 'readOnly';\n break;\n case 'FormFieldsOnly':\n case 2:\n editMode = 'forms';\n break;\n case 'CommentsOnly':\n case 3:\n editMode = 'comments';\n break;\n case 'RevisionsOnly':\n case 4:\n editMode = 'trackedChanges';\n break;\n }\n writer.writeAttributeString('w', 'edit', this.wNamespace, editMode);\n }\n writer.writeAttributeString('w', 'cryptProviderType', this.wNamespace, 'rsaAES');\n writer.writeAttributeString('w', 'cryptAlgorithmClass', this.wNamespace, 'hash');\n writer.writeAttributeString('w', 'cryptAlgorithmType', this.wNamespace, 'typeAny');\n writer.writeAttributeString('w', 'cryptAlgorithmSid', this.wNamespace, '14');\n writer.writeAttributeString('w', 'cryptSpinCount', this.wNamespace, '100000');\n if (this.enforcement) {\n writer.writeAttributeString('w', 'enforcement', this.wNamespace, '1');\n }\n if (this.hashValue) {\n writer.writeAttributeString('w', 'hash', this.wNamespace, this.hashValue);\n }\n if (this.saltValue) {\n writer.writeAttributeString('w', 'salt', this.wNamespace, this.saltValue);\n }\n writer.writeEndElement();\n };\n WordExport.prototype.serializeSettings = function () {\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'settings', this.wNamespace);\n this.writeCustom(writer);\n // writer.writeAttributeString('xmlns', 'mc', undefined, this.veNamespace);\n // writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n // writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n // writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n // writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'w14', undefined, this.w14Namespace);\n writer.writeAttributeString('xmlns', 'w15', undefined, this.w15Namespace);\n writer.writeAttributeString('xmlns', 'sl', undefined, this.slNamespace);\n writer.writeAttributeString('mc', 'Ignorable', undefined, 'w14 w15');\n // //w:writeProtection - Write Protection\n this.serializeDocumentProtectionSettings(writer);\n //w:view - Document View Setting\n // if (this.mDocument.ViewSetup.DocumentViewType !== DocumentViewType.PrintLayout &&\n // m_document.ViewSetup.DocumentViewType !== DocumentViewType.NormalLayout)\n // {\n // writer.writeStartElement('view', this.wNamespace);\n // string viewTypeStr = string.Empty;\n // if (m_document.ViewSetup.DocumentViewType === DocumentViewType.OutlineLayout)\n // {\n // viewTypeStr = 'outline';\n // }\n // else if (m_document.ViewSetup.DocumentViewType === DocumentViewType.WebLayout)\n // {\n // viewTypeStr = 'web';\n // }\n // writer.writeAttributeString('val', this.wNamespace, viewTypeStr);\n // writer.writeEndElement();\n // }\n //w:zoom - Magnification Setting\n writer.writeStartElement('w', 'zoom', this.wNamespace);\n // switch (m_document.ViewSetup.ZoomType)\n // {\n // case ZoomType.FullPage:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'fullPage');\n // break;\n // case ZoomType.PageWidth:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'bestFit');\n // break;\n // case ZoomType.TextFit:\n // writer.writeAttributeString('w', 'val', this.wNamespace, 'textFit');\n // break;\n // default:\n writer.writeAttributeString('w', 'val', this.wNamespace, 'none');\n // break;\n // }\n writer.writeAttributeString('w', 'percent', this.wNamespace, '100');\n writer.writeEndElement();\n //\n this.serializeThemeFontLang(writer);\n //w:displayBackgroundShape - Display Background Objects When Displaying Document\n // if (m_document.Background.Type !== BackgroundType.NoBackground)\n // {\n writer.writeStartElement(undefined, 'displayBackgroundShape', this.wNamespace);\n writer.writeEndElement();\n // }\n //w:defaultTabStop - Distance Between Automatic Tab Stops\n writer.writeStartElement(undefined, 'defaultTabStop', this.wNamespace);\n var tabWidth = Math.round(this.defaultTabWidthValue * this.twipsInOnePoint);\n writer.writeAttributeString(undefined, 'val', this.wNamespace, tabWidth.toString());\n writer.writeEndElement();\n if (this.trackChanges) {\n writer.writeStartElement(undefined, 'trackRevisions', this.wNamespace);\n writer.writeEndElement();\n }\n //w:evenAndOddHeaders - Different Even/Odd Page Headers and Footers \n if (this.mDifferentFirstPage) {\n writer.writeStartElement(undefined, 'evenAndOddHeaders', this.wNamespace);\n writer.writeEndElement();\n }\n //w:footnotePr - Document-Wide Footnote Properties and w:endnotePr - Document-Wide Endnote Properties\n // SerializeFootnoteSettings();\n //w:compat - Compatibility Settings\n if (!this.formFieldShading) {\n writer.writeStartElement(undefined, 'doNotShadeFormData', this.wNamespace);\n writer.writeEndElement();\n }\n writer.writeStartElement(undefined, 'compat', this.wNamespace);\n if (this.dontUseHtmlParagraphAutoSpacing) {\n this.serializeBoolProperty(writer, 'doNotUseHTMLParagraphAutoSpacing', this.dontUseHtmlParagraphAutoSpacing);\n }\n if (this.allowSpaceOfSameStyleInTable) {\n this.serializeBoolProperty(writer, 'allowSpaceOfSameStyleInTable', this.allowSpaceOfSameStyleInTable);\n }\n writer.writeStartElement(undefined, 'compatSetting', this.wNamespace);\n writer.writeAttributeString(undefined, 'name', this.wNamespace, 'compatibilityMode');\n writer.writeAttributeString(undefined, 'uri', this.wNamespace, 'http://schemas.microsoft.com/office/word');\n var compatValue = this.keywordIndex === 1 ? HelperMethods.getCompatibilityModeValue(this.compatibilityMode) : HelperMethods.getCompatibilityModeValue(this.getCompatibilityModeEnumValue(this.compatibilityMode.toString()));\n writer.writeAttributeString(undefined, 'val', this.wNamespace, compatValue);\n writer.writeEndElement();\n writer.writeEndElement();\n if (this.document[footnotesProperty[this.keywordIndex]]) {\n //this.serializeFootNotesPr(writer, this.document.section.sectionFormat);\n writer.writeStartElement(undefined, 'footnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'footnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n writer.writeEndElement();\n writer.writeEndElement();\n }\n if (this.document[endnotesProperty[this.keywordIndex]]) {\n // this.serializeEndNotesPr(writer, this.document.section.sectionFormat);\n writer.writeStartElement(undefined, 'endnotePr', this.wNamespace);\n writer.writeStartElement(undefined, 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '-1');\n writer.writeEndElement();\n writer.writeStartElement(undefined, 'endnote', this.wNamespace);\n writer.writeAttributeString(undefined, 'id', this.wNamespace, '0');\n writer.writeEndElement();\n writer.writeEndElement();\n }\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.settingsPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeCoreProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeAppProperties = function () {\n //implementation\n };\n WordExport.prototype.serializeFontTable = function (contentType) {\n //implementation\n };\n WordExport.prototype.serializeSettingsRelation = function () {\n //implementation\n };\n WordExport.prototype.getCompatibilityModeEnumValue = function (compatibilityMode) {\n switch (compatibilityMode) {\n case 'Word2013':\n return 0;\n case 'Word2003':\n return 1;\n case 'Word2007':\n return 2;\n case 'Word2010':\n return 3;\n }\n };\n WordExport.prototype.serializeHeaderFooters = function () {\n this.isHeaderFooter = true;\n this.serializeHeaderFooter('EvenFooter');\n this.serializeHeaderFooter('EvenHeader');\n this.serializeHeaderFooter('FirstPageFooter');\n this.serializeHeaderFooter('FirstPageHeader');\n this.serializeHeaderFooter('OddFooter');\n this.serializeHeaderFooter('OddHeader');\n this.isHeaderFooter = false;\n };\n // Serializes the Header/Footer\n WordExport.prototype.serializeHeaderFooter = function (hfType) {\n if (this.headersFooters.length === 0) {\n return;\n }\n var headerFooterPath;\n var headerFooterRelsPath;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n var hf = undefined;\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n hf = hfColl.get(id);\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = this.headerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.headerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeHeader(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n else {\n headerFooterPath = this.footerPath + id.replace('rId', '') + '.xml';\n headerFooterRelsPath = this.footerRelationPath + id.replace('rId', '') + '.xml.rels';\n this.serializeFooter(hf, id, headerFooterPath, headerFooterRelsPath);\n }\n }\n };\n // Serialize the header part\n WordExport.prototype.serializeHeader = function (header, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = header;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'hdr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n var owner = this.blockOwner;\n this.blockOwner = header;\n this.serializeBodyItems(writer, header[blocksProperty[this.keywordIndex]], true);\n this.blockOwner = owner;\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n this.headerFooter = undefined;\n };\n // Serializes the HeaderFooter relations\n WordExport.prototype.serializeHFRelations = function (hfId, headerFooterRelsPath) {\n var hasHFImage = this.headerFooterImages.containsKey(hfId);\n // let hasHFHyperlinks = HeaderFooterHyperlinks.ContainsKey(hfId);\n // let hasHFInclPics = HeaderFooterInclPicUrls.ContainsKey(hfId);\n // let hasHFAlternateChunks = HeaderFooterAlternateChunks.ContainsKey(hfId);\n if (hasHFImage) { // || hasHFHyperlinks ||hasHFAlternateChunks\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeImagesRelations(this.headerFooterImages.get(hfId), writer, false);\n if (this.headerFooterSvgImages.containsKey(hfId)) {\n this.serializeSvgImageRelation(this.headerFooterSvgImages.get(hfId), writer);\n }\n // if (hasHFHyperlinks)\n // SerializeHyperlinkRelations(stream, HeaderFooterHyperlinks[hfId]);\n // if (hasHFAlternateChunks)\n // SerializeAltChunkRelations(stream, HeaderFooterAlternateChunks[hfId]);\n // if (hasHFInclPics)\n // SerializeIncludePictureUrlRelations(stream, HeaderFooterInclPicUrls[hfId]);\n // if (HFOleContainers.ContainsKey(hfId))\n // {\n // AddOLEToZip(HFOleContainers[hfId]);\n // }\n // if (HFRelations.ContainsKey(hfId))\n // SerializeHFCommonRelations(stream, HFRelations[hfId]);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterRelsPath);\n this.mArchive.addItem(zipArchiveItem);\n }\n else {\n return;\n }\n };\n WordExport.prototype.writeHFCommonAttributes = function (writer) {\n writer.writeAttributeString('xmlns', 'v', undefined, this.vNamespace);\n writer.writeAttributeString('xmlns', 'w10', undefined, this.w10Namespace);\n writer.writeAttributeString('xmlns', 'o', undefined, this.oNamespace);\n writer.writeAttributeString('xmlns', 've', undefined, this.veNamespace);\n writer.writeAttributeString('xmlns', 'r', undefined, this.rNamespace);\n writer.writeAttributeString('xmlns', 'm', undefined, this.mNamespace);\n writer.writeAttributeString('xmlns', 'wne', undefined, this.wneNamespace);\n writer.writeAttributeString('xmlns', 'a', undefined, this.aNamespace);\n writer.writeAttributeString('xmlns', 'pic', undefined, this.pictureNamespace);\n writer.writeAttributeString('xmlns', 'wp', undefined, this.wpNamespace);\n writer.writeAttributeString('xmlns', 'wpc', undefined, this.wpCanvasNamespace);\n writer.writeAttributeString('xmlns', 'wp14', undefined, this.wpDrawingNamespace);\n this.writeDup(writer);\n writer.writeAttributeString('xmlns', 'wps', undefined, this.wpShapeNamespace);\n writer.writeAttributeString('ve', 'Ignorable', undefined, 'w14 w15 wp14');\n };\n // Serailize the footer and its relations\n WordExport.prototype.serializeFooter = function (footer, id, headerFooterPath, headerFooterRelsPath) {\n this.headerFooter = footer;\n var writer = new XmlWriter();\n writer.writeStartElement('w', 'ftr', this.wNamespace);\n this.writeHFCommonAttributes(writer);\n this.serializeBodyItems(writer, footer[blocksProperty[this.keywordIndex]], true);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, headerFooterPath);\n this.mArchive.addItem(zipArchiveItem);\n this.serializeHFRelations(id, headerFooterRelsPath);\n };\n WordExport.prototype.serializeDocumentRelations = function () {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.stylesRelType, 'styles.xml');\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.settingsRelType, 'settings.xml');\n if (this.document[endnotesProperty[this.keywordIndex]]) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.endnoteRelType, 'endnotes.xml');\n }\n if (this.document[footnotesProperty[this.keywordIndex]]) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.footnoteRelType, 'footnotes.xml');\n }\n if (this.mComments.length > 0) {\n if (!(this.mComments.length === 1 && this.mComments[0].text === '')) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.commentsRelType, 'comments.xml');\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.commentsExRelType, 'commentsExtended.xml');\n }\n }\n if (!isNullOrUndefined(this.mThemes)) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.ThemeRelType, 'theme/theme1.xml');\n }\n if (this.document[listsProperty[this.keywordIndex]].length > 0) {\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.numberingRelType, 'numbering.xml');\n }\n //this.serializeFootnoteEndnoteRelations(writer);\n this.serializeHeaderFooterRelations(writer);\n //this.serializeFootnoteXMLMapping(writer);\n // if (HasFontTable) {\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.FontTableRelType, 'fontTable.xml');\n // }\n // SerializeIncludePictureUrlRelations(docRelstream, InclPicFieldUrl);\n // //// Creating relationships for every hyperlink and image containing in the document\n this.serializeImagesRelations(this.documentImages, writer, false);\n this.serializeSvgImageRelation(this.svgImages, writer);\n // serialize custom xml\n this.serializeCustomXMLMapping(this.mCustomXML, writer);\n // serialize chart relations\n this.serializeChartDocumentRelations(this.documentCharts, writer);\n this.serializeExternalLinkImages(writer);\n // if (HasHyperlink && HyperlinkTargets.length > 0) {\n // SerializeHyperlinkRelations(docRelstream, HyperlinkTargets);\n // }\n // if (m_document.HasMacros\n // && IsMacroEnabled)\n // SerializeRelationShip(docRelstream, GetNextRelationShipID(), this.VbaProjectRelType, this.VbaProject);\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.wordRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n this.headerFooter = undefined;\n };\n // serialize chart relations\n WordExport.prototype.serializeChartDocumentRelations = function (charts, writer) {\n if (charts.length > 0) {\n var keys = charts.keys;\n for (var i = 1; i <= keys.length; i++) {\n this.serializeRelationShip(writer, keys[i - 1], this.chartRelType, 'charts/chart' + i + '.xml');\n }\n }\n };\n WordExport.prototype.serializeChartRelations = function () {\n var writer = new XmlWriter();\n this.resetChartRelationShipId();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n var chartColorPath = 'colors' + this.chartCount + '.xml';\n var chartRelationPath = this.chartPath + '/_rels/chart' + this.chartCount + '.xml.rels';\n var chartExcelPath = '../embeddings/Microsoft_Excel_Worksheet' + this.chartCount + '.xlsx';\n this.serializeRelationShip(writer, this.getNextChartRelationShipID(), this.packageRelType, chartExcelPath);\n this.serializeRelationShip(writer, this.getNextChartRelationShipID(), this.chartColorStyleRelType, chartColorPath);\n writer.writeEndElement(); // end of relationships\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, chartRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the image relations\n WordExport.prototype.serializeImagesRelations = function (images, writer, isSvg) {\n if (images.length > 0) {\n var imagePath = '';\n var base64ImageString = void 0;\n var keys = images.keys;\n for (var i = 0; i < keys.length; i++) {\n var mImage = images.get(keys[i]);\n var imageStringInfo = void 0;\n if (typeof mImage === 'string' && this.startsWith(mImage, 'data')) {\n base64ImageString = mImage;\n }\n else {\n imageStringInfo = this.getBase64ImageString(mImage);\n base64ImageString = imageStringInfo.imageString;\n if (HelperMethods.parseBoolValue(mImage[isMetaFileProperty[this.keywordIndex]])) {\n var format = HelperMethods.formatClippedString(imageStringInfo.metaFileImageString).extension;\n if (format !== '.svg' || isSvg) {\n base64ImageString = imageStringInfo.metaFileImageString;\n }\n }\n }\n if (isNullOrUndefined(base64ImageString)) {\n imagePath = this.imagePath + '/0.jpeg';\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n }\n else {\n var imageInfo = HelperMethods.formatClippedString(base64ImageString);\n var extension = imageInfo.extension;\n var formatClippedString = imageInfo.formatClippedString;\n imagePath = this.imagePath + keys[i] + extension;\n this.serializeRelationShip(writer, keys[i], this.imageRelType, imagePath.replace('word/', ''));\n //if (m_archive.Find(imagePath.Replace('\\\\', '/')) === -1)\n // {\n var imageBlob = void 0;\n if (this.startsWith(base64ImageString, 'data:image/svg+xml;utf8,')) {\n imageBlob = new Blob([formatClippedString]);\n }\n else {\n imageBlob = new Blob([this.encodedString(formatClippedString)]);\n }\n var zipArchiveItem = new ZipArchiveItem(imageBlob, imagePath);\n // let TestArchive = new ZipArchive();\n this.mArchive.addItem(zipArchiveItem);\n // TestArchive.save('image.zip').then(function (): void {\n // TestArchive.destroy();\n // });\n // }\n }\n }\n }\n };\n WordExport.prototype.serializeSvgImageRelation = function (svgImages, writer) {\n this.serializeImagesRelations(svgImages, writer, true);\n };\n /**\n * @private\n */\n WordExport.prototype.encodedString = function (input) {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var chr1;\n var chr2;\n var chr3;\n var encode1;\n var encode2;\n var encode3;\n var encode4;\n var count = 0;\n var resultIndex = 0;\n /*let dataUrlPrefix: string = 'data:';*/\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n var totalLength = input.length * 3 / 4;\n if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 variant (base64url for example)\n throw new Error('Invalid base64 input, bad content length.');\n }\n var output = new Uint8Array(totalLength | 0);\n while (count < input.length) {\n encode1 = keyStr.indexOf(input.charAt(count++));\n encode2 = keyStr.indexOf(input.charAt(count++));\n encode3 = keyStr.indexOf(input.charAt(count++));\n encode4 = keyStr.indexOf(input.charAt(count++));\n chr1 = (encode1 << 2) | (encode2 >> 4);\n chr2 = ((encode2 & 15) << 4) | (encode3 >> 2);\n chr3 = ((encode3 & 3) << 6) | encode4;\n output[resultIndex++] = chr1;\n if (encode3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (encode4 !== 64) {\n output[resultIndex++] = chr3;\n }\n }\n return output;\n };\n WordExport.prototype.serializeExternalLinkImages = function (writer) {\n var imagePath = '';\n var keys = this.externalImages.keys;\n for (var i = 0; i < this.externalImages.keys.length; i++) {\n this.serializeRelationShip(writer, keys[i], this.imageRelType, this.externalImages.get(keys[i]));\n }\n };\n // Serializes the HeaderFooters relations to the document relations stream\n WordExport.prototype.serializeHeaderFooterRelations = function (writer) {\n this.serializeHFRelation(writer, 'EvenFooter');\n this.serializeHFRelation(writer, 'EvenHeader');\n this.serializeHFRelation(writer, 'FirstPageFooter');\n this.serializeHFRelation(writer, 'FirstPageHeader');\n this.serializeHFRelation(writer, 'OddFooter');\n this.serializeHFRelation(writer, 'OddHeader');\n };\n // Serializes the headers footers relations.\n WordExport.prototype.serializeHFRelation = function (writer, hfType) {\n var headerFooterPath = '';\n var relType;\n if (!this.headersFooters.containsKey(hfType)) {\n return;\n }\n var hfColl = this.headersFooters.get(hfType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (hfType === 'EvenHeader' || hfType === 'FirstPageHeader' ||\n hfType === 'OddHeader') {\n headerFooterPath = 'header' + id.replace('rId', '') + '.xml';\n relType = this.headerRelType;\n }\n else {\n headerFooterPath = 'footer' + id.replace('rId', '') + '.xml';\n relType = this.footerRelType;\n }\n this.serializeRelationShip(writer, id, relType, headerFooterPath);\n }\n };\n // Serializes the relationship\n WordExport.prototype.serializeRelationShip = function (writer, relationshipID, relationshipType, targetPath) {\n writer.writeStartElement(undefined, 'Relationship', undefined);\n writer.writeAttributeString(undefined, 'Id', undefined, relationshipID);\n writer.writeAttributeString(undefined, 'Type', undefined, relationshipType);\n writer.writeAttributeString(undefined, 'Target', undefined, targetPath.replace('\\\\', '/').replace('\\v', ''));\n if (relationshipType === this.hyperlinkRelType || this.startsWith(targetPath, 'http://') || this.startsWith(targetPath, 'https://') || this.startsWith(targetPath, 'file:///')) {\n // Uri targetUri;\n // if ((!targetPath.StartsWith('file:///')) && Uri.TryCreate(targetPath, UriKind.Absolute, out targetUri))\n // {\n // //Handled using Try catch to avoid exception if the Host name type is None because in \n //Silverlight 'HostNameType' property is not available.\n // try\n // {\n // m_writer.WriteAttributeString('Target', targetUri.AbsoluteUri);\n // }\n // catch\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n // }\n // else\n // {\n // m_writer.WriteAttributeString('Target', targetPath.Replace('\\\\', '/').Replace(ControlChar.LineBreak, string.Empty));\n // }\n writer.writeAttributeString(undefined, 'TargetMode', undefined, 'External');\n }\n writer.writeEndElement();\n };\n // Get the next relationship ID\n WordExport.prototype.getNextRelationShipID = function () {\n return 'rId' + (++this.mRelationShipID);\n };\n WordExport.prototype.getEFNextRelationShipID = function () {\n return (++this.efRelationShipId).toString();\n };\n WordExport.prototype.serializeGeneralRelations = function () {\n var writer = new XmlWriter();\n this.resetRelationShipID();\n writer.writeStartElement(undefined, 'Relationships', this.rpNamespace);\n this.serializeRelationShip(writer, this.getNextRelationShipID(), this.documentRelType, this.documentPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.AppRelType, this.appPath);\n // this.serializeRelationShip(writer, this.getNextRelationShipID(), this.CoreRelType, this.corePath);\n //End of Relationships tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.generalRelationPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n WordExport.prototype.serializeContentTypes = function (contentType, formatType) {\n var writer = new XmlWriter();\n writer.writeStartElement(undefined, 'Types', 'http://schemas.openxmlformats.org/package/2006/content-types');\n //if (m_hasOleObject)\n //{\n // //\n // SerializeDefaultContentType(contentStream, 'bin', 'application/vnd.openxmlformats-officedocument.oleObject');\n //}\n this.serializeDefaultContentType(writer, 'rels', this.relationContentType);\n this.serializeDefaultContentType(writer, 'xml', this.xmlContentType);\n // if (m_hasEmbedFonts && !string.IsNullOrEmpty(type))\n // {\n // SerializeDefaultContentType(contentStream,type, this.fontContentType);\n // }\n if (this.documentImages.length > 0 || this.externalImages.length > 0 || this.headerFooterImages.length > 0) {\n this.serializeDefaultContentType(writer, 'png', 'image/png');\n this.serializeDefaultContentType(writer, 'bmp', 'image/bmp');\n this.serializeDefaultContentType(writer, 'emf', 'image/x-emf');\n this.serializeDefaultContentType(writer, 'wmf', 'image/x-wmf');\n this.serializeDefaultContentType(writer, 'gif', 'image/gif');\n this.serializeDefaultContentType(writer, 'ico', 'image/x-icon');\n this.serializeDefaultContentType(writer, 'tif', 'image/tiff');\n this.serializeDefaultContentType(writer, 'tiff', 'image/tiff');\n this.serializeDefaultContentType(writer, 'jpeg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'jpg', 'image/jpeg');\n this.serializeDefaultContentType(writer, 'svg', 'image/svg+xml');\n }\n // if (m_document.HasMacros\n // && IsMacroEnabled && !m_isSkipBinExtension)\n // {\n // SerializeDefaultContentType(contentStream, 'bin', this.VbaProjectContentType);\n // m_isSkipBinExtension = true;\n // }\n // if (m_hasOleObject)\n // {\n // SerializeOleContentType(contentStream);\n // }\n //document.xml\n if (formatType == 'Docx') {\n this.serializeOverrideContentType(writer, this.documentPath, this.documentContentType);\n }\n else if (formatType == 'Dotx') {\n this.serializeOverrideContentType(writer, this.documentPath, this.TemplateContentType);\n }\n //\n // if (HasNumbering) {\n this.serializeOverrideContentType(writer, this.numberingPath, this.numberingContentType);\n // }\n //Add the header/footer Alternate chunks\n // if (HeaderFooterAlternateChunks.length > 0) {\n // foreach(Dictionary < string, string > item in m_headerFooterAlternateChunks.Values)\n // AddAlternateChunkItem(item);\n // }\n //styles.xml\n this.serializeOverrideContentType(writer, this.stylePath, this.stylesContentType);\n //settings.xml\n this.serializeOverrideContentType(writer, this.settingsPath, this.settingsContentType);\n this.serializeOverrideContentType(writer, this.commentsPath, this.commentsContentType);\n this.serializeOverrideContentType(writer, this.themePath, this.themeContentType);\n //comments.xml\n this.serializeOverrideContentType(writer, this.commentsExtendedPath, this.commentsExContentType);\n //charts.xml\n if (this.chartCount > 0) {\n var count = 1;\n this.serializeDefaultContentType(writer, 'xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n while (count <= this.chartCount) {\n this.serializeOverrideContentType(writer, 'word/charts/chart' + count + '.xml', this.chartsContentType);\n this.serializeOverrideContentType(writer, 'word/charts/colors' + count + '.xml', this.chartColorStyleContentType);\n count++;\n }\n }\n // Custom XML mapping\n if (this.customXMLProps.length > 0) {\n for (var i = 0; i < this.customXMLProps.length; i++) {\n this.serializeOverrideContentType(writer, this.customXMLProps[i], this.customXmlContentType);\n }\n }\n // //core.xml\n // SerializeOverrideContentType(contentStream, this.corePath, this.CoreContentType);\n // //app.xml\n // SerializeOverrideContentType(contentStream, this.appPath, this.AppContentType);\n // //custom.xml\n // if (!isNullOrUndefined(m_document.CustomDocumentProperties) && m_document.CustomDocumentProperties.length > 0)\n // SerializeOverrideContentType(contentStream, this.CustomPath, this.CustomContentType);\n // #if Chart\n // if (m_hasChart)\n // SerializeChartContentType(contentStream);\n // #endif\n this.serializeHFContentTypes(writer);\n this.SerializeEFContentTypes(writer);\n // WriteXmlItemsContentTypes(contentStream);\n //End of Types tag\n writer.writeEndElement();\n var zipArchiveItem = new ZipArchiveItem(writer.buffer, this.contentTypesPath);\n this.mArchive.addItem(zipArchiveItem);\n };\n // Serializes the HeaderFooter content types\n WordExport.prototype.serializeHFContentTypes = function (writer) {\n this.serializeHeaderFootersContentType(writer, 'EvenFooter');\n this.serializeHeaderFootersContentType(writer, 'EvenHeader');\n this.serializeHeaderFootersContentType(writer, 'FirstPageFooter');\n this.serializeHeaderFootersContentType(writer, 'FirstPageHeader');\n this.serializeHeaderFootersContentType(writer, 'OddFooter');\n this.serializeHeaderFootersContentType(writer, 'OddHeader');\n };\n // Serializes the HeaderFooter content types.\n WordExport.prototype.serializeHeaderFootersContentType = function (writer, headerFooterType) {\n var contentType;\n var partName;\n if (!this.headersFooters.containsKey(headerFooterType)) {\n return;\n }\n var hfColl = this.headersFooters.get(headerFooterType);\n for (var i = 0; i < hfColl.keys.length; i++) {\n var id = hfColl.keys[i];\n if (headerFooterType === 'EvenHeader' || headerFooterType === 'FirstPageHeader' ||\n headerFooterType === 'OddHeader') {\n partName = this.headerPath + id.replace('rId', '') + '.xml';\n contentType = this.headerContentType;\n }\n else {\n partName = this.footerPath + id.replace('rId', '') + '.xml';\n contentType = this.footerContentType;\n }\n this.serializeOverrideContentType(writer, partName, contentType);\n }\n };\n WordExport.prototype.SerializeEFContentTypes = function (writer) {\n this.serializeEFContentType(writer);\n };\n // Serializes the HeaderFooter content types.\n WordExport.prototype.serializeEFContentType = function (writer) {\n var contentType;\n var partName;\n partName = this.endnotesPath;\n contentType = this.endnoteContentType;\n this.serializeOverrideContentType(writer, partName, contentType);\n partName = this.footnotesPath;\n contentType = this.footnoteContentType;\n this.serializeOverrideContentType(writer, partName, contentType);\n };\n // Serializes the Override content type.\n WordExport.prototype.serializeOverrideContentType = function (writer, partName, contentType) {\n writer.writeStartElement(undefined, 'Override', undefined);\n writer.writeAttributeString(undefined, 'PartName', undefined, '/' + partName.replace('\\\\', '/'));\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Serializes the default content type\n WordExport.prototype.serializeDefaultContentType = function (writer, extension, contentType) {\n writer.writeStartElement(undefined, 'Default', undefined);\n writer.writeAttributeString(undefined, 'Extension', undefined, extension);\n writer.writeAttributeString(undefined, 'ContentType', undefined, contentType);\n writer.writeEndElement();\n };\n // Reset the relationship id counter\n WordExport.prototype.resetRelationShipID = function () {\n this.mRelationShipID = 0;\n };\n WordExport.prototype.resetExcelRelationShipId = function () {\n this.eRelationShipId = 0;\n };\n WordExport.prototype.resetChartRelationShipId = function () {\n this.cRelationShipId = 0;\n };\n WordExport.prototype.close = function () {\n //Implement\n };\n return WordExport;\n}());\nexport { WordExport };\n","/* eslint-disable */\nimport { StreamWriter } from '@syncfusion/ej2-file-utils';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Exports the document to Text format.\n */\nvar TextExport = /** @class */ (function () {\n function TextExport() {\n /**\n * @private\n */\n this.pageContent = '';\n this.curSectionIndex = 0;\n this.inField = false;\n }\n TextExport.prototype.getModuleName = function () {\n return 'TextExport';\n };\n /**\n * @private\n * @param {DocumentHelper} documentHelper - Document helper.\n * @param {string} fileName - Specified file name.\n * @return {void}\n */\n TextExport.prototype.save = function (documentHelper, fileName) {\n this.serialize(documentHelper);\n var writer = new StreamWriter();\n this.writeInternal(writer);\n writer.save(fileName + '.txt');\n };\n /**\n * Save text document as Blob.\n *\n * @private\n * @param {DocumentHelper} documentHelper - Document helper.\n * @return {Promise} - Returns promise object.\n */\n TextExport.prototype.saveAsBlob = function (documentHelper) {\n this.serialize(documentHelper);\n var streamWriter = new StreamWriter();\n this.writeInternal(streamWriter);\n var blob = streamWriter.buffer;\n streamWriter.destroy();\n return new Promise(function (resolve, reject) {\n resolve(blob);\n });\n };\n TextExport.prototype.serialize = function (documentHelper) {\n var document = documentHelper.owner.sfdtExportModule.write(0);\n this.setDocument(document);\n };\n /**\n * @private\n * @param document\n */\n TextExport.prototype.setDocument = function (document) {\n this.document = document;\n this.mSections = document.sections;\n };\n /**\n * @private\n * @param streamWriter - Stream writer instance.\n * @return {void}\n */\n TextExport.prototype.writeInternal = function (streamWriter) {\n var section = undefined;\n var sectionCount = this.document.sections.length - 1;\n var isLastSection = false;\n this.updateLastParagraph();\n for (var i = 0; i <= sectionCount; i++) {\n section = this.document.sections[i];\n isLastSection = (i === sectionCount) ? true : false;\n this.writeBody(streamWriter, section.blocks, false);\n this.writeNewLine(streamWriter);\n this.writeSectionEnd(section, isLastSection);\n }\n for (var j = 0; j <= sectionCount; j++) {\n section = this.document.sections[j];\n this.writeHeadersFooters(streamWriter, section);\n }\n };\n /// \n /// Writes the specified document content to the text file.\n /// \n TextExport.prototype.writeBody = function (streamWriter, body, isHeaderFooter) {\n var bodyItemsCount = body.length - 1;\n var bodyItem = undefined;\n for (var i = 0; i <= bodyItemsCount; i++) {\n bodyItem = body[i];\n if (bodyItem.hasOwnProperty('inlines')) {\n var isLastPara = (bodyItem === this.lastPara) ? true : false;\n this.writeParagraph(streamWriter, bodyItem, isLastPara, isHeaderFooter);\n }\n else if (bodyItem.blocks) {\n this.writeBody(streamWriter, bodyItem.blocks, isHeaderFooter);\n }\n else {\n this.writeTable(streamWriter, bodyItem);\n }\n }\n };\n TextExport.prototype.writeParagraph = function (streamWriter, paragraph, isLastPara, isHeaderFooter) {\n for (var i = 0; i < paragraph.inlines.length; i++) {\n var item = paragraph.inlines[i];\n if (item.hasOwnProperty('fieldType')) {\n this.inField = item.fieldType === 0;\n }\n else if (item.hasOwnProperty('text') && !this.inField) {\n this.writeText(streamWriter, item.text);\n }\n }\n if (!isHeaderFooter || paragraph.inlines.length > 0)\n if (!isLastPara) {\n this.writeNewLine(streamWriter);\n }\n };\n /// }\n /// \n /// Writes the specified table text content to the text file.\n /// \n TextExport.prototype.writeTable = function (streamWriter, table) {\n for (var i = 0; i < table.rows.length; i++) {\n var row = table.rows[i];\n for (var j = 0; j < row.cells.length; j++) {\n var cell = row.cells[j];\n this.writeBody(streamWriter, cell.blocks, false);\n }\n }\n };\n /// \n /// Writes the specified Header Footer text content to the text file.\n /// \n TextExport.prototype.writeHeadersFooters = function (streamWriter, section) {\n var headersFooters = section.headersFooters;\n if (isNullOrUndefined(headersFooters)) {\n return;\n }\n this.writeHeaderFooter(streamWriter, section.headersFooters.header);\n this.writeHeaderFooter(streamWriter, section.headersFooters.footer);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenFooter);\n this.writeHeaderFooter(streamWriter, section.headersFooters.evenHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageHeader);\n this.writeHeaderFooter(streamWriter, section.headersFooters.firstPageFooter);\n };\n TextExport.prototype.writeHeaderFooter = function (streamWriter, headerFooter) {\n if (headerFooter && headerFooter.blocks) {\n this.writeBody(streamWriter, headerFooter.blocks, true);\n }\n };\n /// \n /// Writes the end of the section.\n /// \n TextExport.prototype.writeSectionEnd = function (section, lastSection) {\n this.curSectionIndex++;\n };\n TextExport.prototype.writeNewLine = function (writer) {\n if (!isNullOrUndefined(writer)) {\n writer.writeLine('');\n }\n else {\n this.pageContent = this.pageContent + ' ';\n }\n };\n TextExport.prototype.writeText = function (writer, text) {\n if (!isNullOrUndefined(writer)) {\n writer.write(text);\n }\n else {\n this.pageContent += text;\n }\n };\n TextExport.prototype.updateLastParagraph = function () {\n var cnt = this.document.sections.length;\n var sec;\n if (cnt > 0) {\n sec = this.document.sections[cnt - 1];\n }\n if (!isNullOrUndefined(sec)) {\n var paragraphs = [];\n for (var i = 0; i < sec.blocks.length; i++) {\n if (sec.blocks[i].hasOwnProperty('inlines')) {\n paragraphs.push(sec.blocks[i]);\n }\n }\n var pCount = paragraphs.length;\n if (pCount > 0) {\n this.lastPara = paragraphs[pCount - 1];\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TextExport.prototype.destroy = function () {\n this.document = undefined;\n this.lastPara = undefined;\n this.mSections = undefined;\n this.sections = [];\n this.sections = undefined;\n this.pageContent = undefined;\n };\n return TextExport;\n}());\nexport { TextExport };\n","import { select, detach } from '@syncfusion/ej2-base';\nimport { VScroll } from './v-scroll';\nimport { HScroll } from './h-scroll';\n/**\n * Used to add scroll in menu.\n *\n * @param {createElementType} createElement - Specifies the create element model\n * @param {HTMLElement} container - Specifies the element container\n * @param {HTMLElement} content - Specifies the content element\n * @param {string} scrollType - Specifies the scroll type\n * @param {boolean} enableRtl - Specifies the enable RTL property\n * @param {boolean} offset - Specifies the offset value\n * @returns {HTMLElement} - Element\n * @hidden\n */\nexport function addScrolling(createElement, container, content, scrollType, enableRtl, offset) {\n var containerOffset;\n var contentOffset;\n var parentElem = container.parentElement;\n if (scrollType === 'vscroll') {\n containerOffset = offset || container.getBoundingClientRect().height;\n contentOffset = content.getBoundingClientRect().height;\n }\n else {\n containerOffset = container.getBoundingClientRect().width;\n contentOffset = content.getBoundingClientRect().width;\n }\n if (containerOffset < contentOffset) {\n return createScrollbar(createElement, container, content, scrollType, enableRtl, offset);\n }\n else if (parentElem) {\n var width = parentElem.getBoundingClientRect().width;\n if (width < containerOffset && scrollType === 'hscroll') {\n contentOffset = width;\n container.style.maxWidth = width + 'px';\n return createScrollbar(createElement, container, content, scrollType, enableRtl, offset);\n }\n return content;\n }\n else {\n return content;\n }\n}\n/**\n * Used to create scroll bar in menu.\n *\n * @param {createElementType} createElement - Specifies the create element model\n * @param {HTMLElement} container - Specifies the element container\n * @param {HTMLElement} content - Specifies the content element\n * @param {string} scrollType - Specifies the scroll type\n * @param {boolean} enableRtl - Specifies the enable RTL property\n * @param {boolean} offset - Specifies the offset value\n * @returns {HTMLElement} - Element\n * @hidden\n */\nfunction createScrollbar(createElement, container, content, scrollType, enableRtl, offset) {\n var scrollEle = createElement('div', { className: 'e-menu-' + scrollType });\n container.appendChild(scrollEle);\n scrollEle.appendChild(content);\n if (offset) {\n scrollEle.style.overflow = 'hidden';\n scrollEle.style.height = offset + 'px';\n }\n else {\n scrollEle.style.maxHeight = container.style.maxHeight;\n container.style.overflow = 'hidden';\n }\n var scrollObj;\n if (scrollType === 'vscroll') {\n scrollObj = new VScroll({ enableRtl: enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetHeight / 2;\n }\n else {\n scrollObj = new HScroll({ enableRtl: enableRtl }, scrollEle);\n scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetWidth;\n }\n return scrollEle;\n}\n/**\n * Used to destroy the scroll option.\n *\n * @param {VScroll | HScroll} scrollObj - Specifies the scroller object\n * @param {Element} element - Specifies the element\n * @param {HTMLElement} skipEle - Specifies the skip element\n * @returns {void}\n * @hidden\n */\nexport function destroyScroll(scrollObj, element, skipEle) {\n if (scrollObj) {\n var menu = select('.e-menu-parent', element);\n if (menu) {\n if (!skipEle || skipEle === menu) {\n scrollObj.destroy();\n element.parentElement.appendChild(menu);\n detach(element);\n }\n }\n else {\n scrollObj.destroy();\n detach(element);\n }\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges, isBlazor } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, detach, append, rippleEffect, isVisible, Complex, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { getZindexPartial, calculatePosition, isCollide, fit, Popup } from '@syncfusion/ej2-popups';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nimport { addScrolling, destroyScroll } from '../common/menu-scroll';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar DOWNARROW = 'downarrow';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar HOME = 'home';\nvar END = 'end';\nvar TAB = 'tab';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\nvar RTL = 'e-rtl';\nvar POPUP = 'e-menu-popup';\nvar TEMPLATE_PROPERTY = 'Template';\n/**\n * Configures the field options of the Menu.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n __extends(FieldSettings, _super);\n function FieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('id')\n ], FieldSettings.prototype, \"itemId\", void 0);\n __decorate([\n Property('parentId')\n ], FieldSettings.prototype, \"parentId\", void 0);\n __decorate([\n Property('text')\n ], FieldSettings.prototype, \"text\", void 0);\n __decorate([\n Property('iconCss')\n ], FieldSettings.prototype, \"iconCss\", void 0);\n __decorate([\n Property('url')\n ], FieldSettings.prototype, \"url\", void 0);\n __decorate([\n Property('separator')\n ], FieldSettings.prototype, \"separator\", void 0);\n __decorate([\n Property('items')\n ], FieldSettings.prototype, \"children\", void 0);\n return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Specifies menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n __extends(MenuItem, _super);\n function MenuItem() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], MenuItem.prototype, \"iconCss\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"id\", void 0);\n __decorate([\n Property(false)\n ], MenuItem.prototype, \"separator\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuItem.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"text\", void 0);\n __decorate([\n Property('')\n ], MenuItem.prototype, \"url\", void 0);\n return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * Animation configuration settings.\n */\nvar MenuAnimationSettings = /** @class */ (function (_super) {\n __extends(MenuAnimationSettings, _super);\n function MenuAnimationSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SlideDown')\n ], MenuAnimationSettings.prototype, \"effect\", void 0);\n __decorate([\n Property(400)\n ], MenuAnimationSettings.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], MenuAnimationSettings.prototype, \"easing\", void 0);\n return MenuAnimationSettings;\n}(ChildProperty));\nexport { MenuAnimationSettings };\n/**\n * Base class for Menu and ContextMenu components.\n *\n * @private\n */\nvar MenuBase = /** @class */ (function (_super) {\n __extends(MenuBase, _super);\n /**\n * Constructor for creating the widget.\n *\n * @private\n * @param {MenuBaseModel} options - Specifies the menu base model\n * @param {string | HTMLUListElement} element - Specifies the element\n */\n function MenuBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.navIdx = [];\n _this.animation = new Animation({});\n _this.isTapHold = false;\n _this.tempItem = [];\n _this.showSubMenuOn = 'Auto';\n return _this;\n }\n /**\n * Initialized third party configuration settings.\n *\n * @private\n * @returns {void}\n */\n MenuBase.prototype.preRender = function () {\n if (!this.isMenu) {\n var ul = void 0;\n if (this.element.tagName === 'EJS-CONTEXTMENU') {\n ul = this.createElement('ul', {\n id: getUniqueID(this.getModuleName()), className: 'e-control e-lib e-' + this.getModuleName()\n });\n var ejInst = getValue('ej2_instances', this.element);\n removeClass([this.element], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n this.clonedElement = this.element;\n this.element = ul;\n setValue('ej2_instances', ejInst, this.element);\n }\n else {\n ul = this.createElement('ul', { id: getUniqueID(this.getModuleName()) });\n append([].slice.call(this.element.cloneNode(true).children), ul);\n var refEle = this.element.nextElementSibling;\n if (refEle) {\n this.element.parentElement.insertBefore(ul, refEle);\n }\n else {\n this.element.parentElement.appendChild(ul);\n }\n this.clonedElement = ul;\n }\n this.clonedElement.style.display = 'none';\n }\n if (this.element.tagName === 'EJS-MENU') {\n var ele = this.element;\n var ejInstance = getValue('ej2_instances', ele);\n var ul = this.createElement('ul');\n var wrapper = this.createElement('EJS-MENU', { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n ul.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = ul;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.clonedElement = wrapper;\n this.element = ele;\n if (!this.element.id) {\n this.element.id = getUniqueID(this.getModuleName());\n }\n }\n };\n /**\n * Initialize the control rendering.\n *\n * @private\n * @returns {void}\n */\n MenuBase.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.renderItems();\n this.wireEvents();\n this.renderComplete();\n var wrapper = this.getWrapper();\n // eslint-disable-next-line\n if (this.template && this.enableScrolling && (this.isReact || this.isAngular)) {\n requestAnimationFrame(function () {\n addScrolling(_this.createElement, wrapper, _this.element, 'hscroll', _this.enableRtl);\n });\n }\n };\n MenuBase.prototype.initialize = function () {\n var wrapper = this.getWrapper();\n if (!wrapper) {\n wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n if (this.isMenu) {\n this.element.parentElement.insertBefore(wrapper, this.element);\n }\n else {\n document.body.appendChild(wrapper);\n }\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n wrapper.appendChild(this.element);\n if (this.isMenu && this.hamburgerMode) {\n if (!this.target) {\n this.createHeaderContainer(wrapper);\n }\n }\n this.defaultOption = this.showItemOnClick;\n };\n MenuBase.prototype.renderItems = function () {\n if (!this.items.length) {\n var items = ListBase.createJsonFromElement(this.element, { fields: { child: 'items' } });\n this.setProperties({ items: items }, true);\n if (isBlazor() && !this.isMenu) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n }\n var ul = this.createItems(this.items);\n append(Array.prototype.slice.call(ul.children), this.element);\n this.element.classList.add('e-menu-parent');\n if (this.isMenu) {\n if (!this.hamburgerMode && this.element.classList.contains('e-vertical')) {\n this.setBlankIconStyle(this.element);\n }\n if (this.enableScrolling) {\n var wrapper = this.getWrapper();\n if (this.element.classList.contains('e-vertical')) {\n addScrolling(this.createElement, wrapper, this.element, 'vscroll', this.enableRtl);\n }\n else {\n addScrolling(this.createElement, wrapper, this.element, 'hscroll', this.enableRtl);\n }\n }\n }\n else {\n this.element.parentElement.setAttribute('role', 'dialog');\n this.element.parentElement.setAttribute('aria-label', 'context menu');\n }\n };\n MenuBase.prototype.wireEvents = function () {\n var wrapper = this.getWrapper();\n if (this.target) {\n var target = void 0;\n var targetElems = selectAll(this.target);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (this.isMenu) {\n EventHandler.add(target, 'click', this.menuHeaderClickHandler, this);\n }\n else {\n if (Browser.isIos) {\n new Touch(target, { tapHold: this.touchHandler.bind(this) });\n }\n else {\n EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n }\n }\n }\n this.targetElement = target;\n if (!this.isMenu) {\n EventHandler.add(this.targetElement, 'scroll', this.scrollHandler, this);\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_1 = _a[_i];\n EventHandler.add(parent_1, 'scroll', this.scrollHandler, this);\n }\n }\n }\n if (!Browser.isDevice) {\n this.delegateMoverHandler = this.moverHandler.bind(this);\n this.delegateMouseDownHandler = this.mouseDownHandler.bind(this);\n EventHandler.add(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler, this);\n EventHandler.add(document, 'mousedown', this.delegateMouseDownHandler, this);\n }\n this.delegateClickHandler = this.clickHandler.bind(this);\n EventHandler.add(document, 'click', this.delegateClickHandler, this);\n this.wireKeyboardEvent(wrapper);\n this.rippleFn = rippleEffect(wrapper, { selector: '.' + ITEM });\n };\n MenuBase.prototype.wireKeyboardEvent = function (element) {\n var keyConfigs = {\n downarrow: DOWNARROW,\n uparrow: UPARROW,\n enter: ENTER,\n leftarrow: LEFTARROW,\n rightarrow: RIGHTARROW,\n escape: ESCAPE\n };\n if (this.isMenu) {\n keyConfigs.home = HOME;\n keyConfigs.end = END;\n keyConfigs.tab = TAB;\n }\n new KeyboardEvents(element, {\n keyAction: this.keyBoardHandler.bind(this),\n keyConfigs: keyConfigs\n });\n };\n MenuBase.prototype.mouseDownHandler = function (e) {\n if (closest(e.target, '.e-' + this.getModuleName() + '-wrapper') !== this.getWrapper()\n && (!closest(e.target, '.e-' + this.getModuleName() + '-popup'))) {\n this.closeMenu(this.isMenu ? null : this.navIdx.length, e);\n }\n };\n MenuBase.prototype.keyHandler = function (e) {\n if (e.keyCode === 38 || e.keyCode === 40) {\n if (e.target && (e.target.classList.contains('e-contextmenu') || e.target.classList.contains('e-menu-item'))) {\n e.preventDefault();\n }\n }\n };\n MenuBase.prototype.keyBoardHandler = function (e) {\n var actionName = '';\n var trgt = e.target;\n var actionNeeded = this.isMenu && !this.hamburgerMode && !this.element.classList.contains('e-vertical')\n && this.navIdx.length < 1;\n e.preventDefault();\n if (this.enableScrolling && e.keyCode === 13 && trgt.classList.contains('e-scroll-nav')) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [closest(trgt, '.e-' + this.getModuleName() + '-wrapper')]);\n }\n if (actionNeeded) {\n switch (e.action) {\n case RIGHTARROW:\n actionName = RIGHTARROW;\n e.action = DOWNARROW;\n break;\n case LEFTARROW:\n actionName = LEFTARROW;\n e.action = UPARROW;\n break;\n case DOWNARROW:\n actionName = DOWNARROW;\n e.action = RIGHTARROW;\n break;\n case UPARROW:\n actionName = UPARROW;\n e.action = '';\n break;\n }\n }\n else if (this.enableRtl) {\n switch (e.action) {\n case LEFTARROW:\n actionNeeded = true;\n actionName = LEFTARROW;\n e.action = RIGHTARROW;\n break;\n case RIGHTARROW:\n actionNeeded = true;\n actionName = RIGHTARROW;\n e.action = LEFTARROW;\n break;\n }\n }\n switch (e.action) {\n case DOWNARROW:\n case UPARROW:\n case END:\n case HOME:\n case TAB:\n this.upDownKeyHandler(e);\n break;\n case RIGHTARROW:\n this.rightEnterKeyHandler(e);\n break;\n case LEFTARROW:\n this.leftEscKeyHandler(e);\n break;\n case ENTER:\n if (this.hamburgerMode && trgt.tagName === 'SPAN' && trgt.classList.contains('e-menu-icon')) {\n this.menuHeaderClickHandler(e);\n }\n else {\n this.rightEnterKeyHandler(e);\n }\n break;\n case ESCAPE:\n this.leftEscKeyHandler(e);\n break;\n }\n if (actionNeeded) {\n e.action = actionName;\n }\n };\n MenuBase.prototype.upDownKeyHandler = function (e) {\n var cul = this.getUlByNavIdx();\n var defaultIdx = (e.action === DOWNARROW || e.action === HOME || e.action === TAB) ? 0 : cul.childElementCount - 1;\n var fliIdx = defaultIdx;\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n if (e.action !== END && e.action !== HOME) {\n fliIdx = this.getIdx(cul, fli);\n }\n fli.classList.remove(FOCUSED);\n if (e.action !== END && e.action !== HOME) {\n if (e.action === DOWNARROW) {\n fliIdx++;\n }\n else {\n fliIdx--;\n }\n if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n fliIdx = defaultIdx;\n }\n }\n }\n var cli = cul.children[fliIdx];\n fliIdx = this.isValidLI(cli, fliIdx, e.action);\n cul.children[fliIdx].classList.add(FOCUSED);\n cul.children[fliIdx].focus();\n };\n MenuBase.prototype.isValidLI = function (cli, index, action) {\n var cul = this.getUlByNavIdx();\n var defaultIdx = (action === DOWNARROW || action === HOME || action === TAB) ? 0 : cul.childElementCount - 1;\n if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n if (action === DOWNARROW && index === cul.childElementCount - 1) {\n index = defaultIdx;\n }\n else if (action === UPARROW && index === 0) {\n index = defaultIdx;\n }\n else if ((action === DOWNARROW) || (action === RIGHTARROW)) {\n index++;\n }\n else if (action === 'tab' && cli.classList.contains(SEPARATOR)) {\n index++;\n }\n else {\n index--;\n }\n }\n cli = cul.children[index];\n if (cli && (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE))) {\n index = this.isValidLI(cli, index, action);\n }\n return index;\n };\n MenuBase.prototype.getUlByNavIdx = function (navIdxLen) {\n var _this = this;\n if (navIdxLen === void 0) { navIdxLen = this.navIdx.length; }\n if (this.isMenu) {\n var popup = [this.getWrapper()].concat([].slice.call(selectAll('.' + POPUP)))[navIdxLen];\n var popups_1 = [];\n var allPopup = selectAll('.' + POPUP);\n allPopup.forEach(function (elem) {\n if (_this.element.id === elem.id.split('-')[2] || elem.id.split('-')[2] + '-' + elem.id.split('-')[3]) {\n popups_1.push(elem);\n }\n });\n popup = [this.getWrapper()].concat([].slice.call(popups_1))[navIdxLen];\n return isNullOrUndefined(popup) ? null : select('.e-menu-parent', popup);\n }\n else {\n if (!document.body.contains(this.element) && navIdxLen === 0) {\n return null;\n }\n return this.getWrapper().children[navIdxLen];\n }\n };\n MenuBase.prototype.rightEnterKeyHandler = function (e) {\n var eventArgs;\n var cul = this.getUlByNavIdx();\n var fli = this.getLIByClass(cul, FOCUSED);\n if (fli) {\n var fliIdx = this.getIdx(cul, fli);\n var navIdx = this.navIdx.concat(fliIdx);\n var item = this.getItem(navIdx);\n if (item.items.length) {\n this.navIdx.push(fliIdx);\n this.keyType = 'right';\n this.action = e.action;\n this.openMenu(fli, item, -1, -1, e);\n }\n else {\n if (e.action === ENTER) {\n if (this.isMenu && this.navIdx.length === 0) {\n this.removeLIStateByClass([SELECTED], [this.getWrapper()]);\n }\n else {\n fli.classList.remove(FOCUSED);\n }\n fli.classList.add(SELECTED);\n eventArgs = { element: fli, item: item, event: e };\n this.trigger('select', eventArgs);\n var aEle = fli.querySelector('.e-menu-url');\n if (item.url && aEle) {\n switch (aEle.getAttribute('target')) {\n case '_blank':\n window.open(item.url, '_blank');\n break;\n case '_parent':\n window.parent.location.href = item.url;\n break;\n default:\n window.location.href = item.url;\n }\n }\n this.closeMenu(null, e);\n var sli = this.getLIByClass(this.getUlByNavIdx(), SELECTED);\n if (sli) {\n sli.classList.add(FOCUSED);\n sli.focus();\n }\n }\n }\n }\n };\n MenuBase.prototype.leftEscKeyHandler = function (e) {\n if (this.navIdx.length) {\n this.keyType = 'left';\n this.closeMenu(this.navIdx.length, e);\n }\n else {\n if (e.action === ESCAPE) {\n this.closeMenu(null, e);\n }\n }\n };\n MenuBase.prototype.scrollHandler = function (e) {\n this.closeMenu(null, e);\n };\n MenuBase.prototype.touchHandler = function (e) {\n this.isTapHold = true;\n this.cmenuHandler(e.originalEvent);\n };\n MenuBase.prototype.cmenuHandler = function (e) {\n e.preventDefault();\n this.currentTarget = e.target;\n this.isCMenu = true;\n this.pageX = e.changedTouches ? e.changedTouches[0].pageX + 1 : e.pageX + 1;\n this.pageY = e.changedTouches ? e.changedTouches[0].pageY + 1 : e.pageY + 1;\n this.closeMenu(null, e);\n if (this.isCMenu) {\n if (this.canOpen(e.target)) {\n this.openMenu(null, null, this.pageY, this.pageX, e);\n }\n this.isCMenu = false;\n }\n };\n // eslint:disable-next-line:max-func-body-length\n MenuBase.prototype.closeMenu = function (ulIndex, e, isIterated) {\n var _this = this;\n if (ulIndex === void 0) { ulIndex = 0; }\n if (e === void 0) { e = null; }\n if (this.isMenuVisible()) {\n var sli = void 0;\n var item_1;\n var wrapper_1 = this.getWrapper();\n var beforeCloseArgs = void 0;\n var items_1;\n var popups = this.getPopups();\n var isClose = false;\n var cnt = this.isMenu ? popups.length + 1 : wrapper_1.childElementCount;\n var ul_1 = this.isMenu && cnt !== 1 ? select('.e-ul', popups[cnt - 2])\n : selectAll('.e-menu-parent', wrapper_1)[cnt - 1];\n if (this.isMenu && ul_1.classList.contains('e-menu')) {\n sli = this.getLIByClass(ul_1, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n isClose = true;\n }\n if (!isClose) {\n var liElem_1 = e && e.target && this.getLI(e.target);\n if (liElem_1) {\n this.cli = liElem_1;\n }\n else {\n this.cli = ul_1.children[0];\n }\n item_1 = this.navIdx.length ? this.getItem(this.navIdx) : null;\n items_1 = item_1 ? item_1.items : this.items;\n beforeCloseArgs = { element: ul_1, parentItem: item_1, items: items_1, event: e, cancel: false, isFocused: true };\n this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n var popupEle;\n var closeArgs;\n var popupId = '';\n var popupObj;\n var isOpen = !observedCloseArgs.cancel;\n if (isOpen || _this.isCMenu) {\n if (_this.isMenu) {\n popupEle = closest(ul_1, '.' + POPUP);\n if (_this.hamburgerMode) {\n popupEle.parentElement.style.minHeight = '';\n closest(ul_1, '.e-menu-item').setAttribute('aria-expanded', 'false');\n }\n _this.unWireKeyboardEvent(popupEle);\n destroyScroll(getInstance(popupEle.children[0], VScroll), popupEle.children[0]);\n popupObj = getInstance(popupEle, Popup);\n popupObj.hide();\n popupId = popupEle.id;\n popupObj.destroy();\n detach(popupEle);\n }\n else {\n _this.toggleAnimation(ul_1, false);\n }\n closeArgs = { element: ul_1, parentItem: item_1, items: items_1 };\n _this.trigger('onClose', closeArgs);\n _this.navIdx.pop();\n if (_this.navIdx.length === 0 && e && e.type === 'keyup') {\n _this.showSubMenu = false;\n }\n if (!_this.isMenu) {\n EventHandler.remove(ul_1, 'keydown', _this.keyHandler);\n if (_this.keyType === 'right') {\n _this.keyType = '';\n }\n }\n }\n _this.updateReactTemplate();\n var trgtliId;\n var closedLi;\n var trgtLi;\n var trgtpopUp = _this.getWrapper() && _this.getUlByNavIdx();\n if (_this.isCMenu) {\n if (_this.canOpen(e.target)) {\n _this.openMenu(null, null, _this.pageY, _this.pageX, e);\n }\n _this.isCMenu = false;\n }\n if (_this.isMenu && trgtpopUp && popupId.length) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var regExp = RegExp;\n trgtliId = new regExp('(.*)-ej2menu-' + _this.element.id + '-popup').exec(popupId)[1];\n closedLi = trgtpopUp.querySelector('[id=\"' + trgtliId + '\"]');\n trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n }\n else if (trgtpopUp) {\n closedLi = trgtpopUp.querySelector('.e-menu-item.e-selected');\n trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n }\n var submenus = liElem_1 && liElem_1.querySelectorAll('.e-menu-item');\n if (isOpen && _this.hamburgerMode && ulIndex && !(submenus.length)) {\n _this.afterCloseMenu(e);\n }\n else if (isOpen && !_this.hamburgerMode && closedLi && !trgtLi && _this.keyType !== 'left' && (_this.navIdx.length || !_this.isMenu && _this.navIdx.length === 0)) {\n var ele = (e && (e.target.classList.contains('e-vscroll') || e.target.classList.contains('e-scroll-nav')))\n ? closest(e.target, '.e-menu-wrapper') : null;\n if (ele) {\n ele = ele.querySelector('.e-menu-item');\n if (_this.showItemOnClick || (ele && _this.getIndex(ele.id, true).length <= _this.navIdx.length)) {\n _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e, true);\n }\n }\n else {\n if (!(e && e.target.classList.contains('e-nav-arrow'))) {\n _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e);\n }\n }\n }\n else if (isOpen && !isIterated && !ulIndex && ((_this.hamburgerMode && _this.navIdx.length) ||\n _this.navIdx.length === 1 && liElem_1 && trgtpopUp !== liElem_1.parentElement)) {\n _this.closeMenu(null, e);\n }\n else if (isOpen && isNullOrUndefined(ulIndex) && _this.navIdx.length) {\n _this.closeMenu(null, e);\n }\n else if (isOpen && !_this.isMenu && !ulIndex && _this.navIdx.length === 0 &&\n !_this.isMenusClosed && !_this.isCmenuHover) {\n _this.isMenusClosed = true;\n _this.closeMenu(0, e);\n }\n else if (isOpen && _this.isMenu && e && e.target &&\n _this.navIdx.length !== 0 && closest(e.target, '.e-menu-parent.e-control')) {\n _this.closeMenu(0, e);\n }\n else if (isOpen && !_this.isMenu && selectAll('.e-menu-parent', wrapper_1)[ulIndex - 1] && e.which === 3) {\n _this.closeMenu(null, e);\n }\n else {\n if (isOpen && (_this.keyType === 'right' || _this.keyType === 'click')) {\n _this.afterCloseMenu(e);\n }\n else {\n var cul = _this.getUlByNavIdx();\n var sli_1 = _this.getLIByClass(cul, SELECTED);\n if (sli_1) {\n sli_1.setAttribute('aria-expanded', 'false');\n sli_1.classList.remove(SELECTED);\n if (observedCloseArgs.isFocused && liElem_1 || _this.keyType === 'left') {\n sli_1.classList.add(FOCUSED);\n if (!e.target || !e.target.classList.contains('e-edit-template')) {\n sli_1.focus();\n }\n }\n }\n if (!isOpen && _this.hamburgerMode && liElem_1 && liElem_1.getAttribute('aria-expanded') === 'false' &&\n liElem_1.getAttribute('aria-haspopup') === 'true') {\n if (closest(liElem_1, '.e-menu-parent.e-control')) {\n _this.navIdx = [];\n }\n else {\n _this.navIdx.pop();\n }\n _this.navIdx.push(_this.cliIdx);\n var item_2 = _this.getItem(_this.navIdx);\n liElem_1.setAttribute('aria-expanded', 'true');\n _this.openMenu(liElem_1, item_2, -1, -1, e);\n }\n }\n if (_this.navIdx.length < 1) {\n if (_this.showSubMenuOn === 'Hover' || _this.showSubMenuOn === 'Click') {\n _this.showItemOnClick = _this.defaultOption;\n _this.showSubMenuOn = 'Auto';\n }\n }\n }\n _this.removeStateWrapper();\n });\n }\n }\n };\n MenuBase.prototype.updateReactTemplate = function () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact && this.template && this.navIdx.length === 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var portals = this.portals.splice(0, this.items.length);\n this.clearTemplate(['template']);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.portals = portals;\n this.renderReactTemplates();\n }\n };\n MenuBase.prototype.getMenuItemModel = function (item, level) {\n if (isNullOrUndefined(item)) {\n return null;\n }\n if (isNullOrUndefined(level)) {\n level = 0;\n }\n var fields = this.getFields(level);\n return { text: item[fields.text], id: item[fields.id], items: item[fields.child], separator: item[fields.separator],\n iconCss: item[fields.iconCss], url: item[fields.url] };\n };\n MenuBase.prototype.getPopups = function () {\n var _this = this;\n var popups = [];\n [].slice.call(document.querySelectorAll('.' + POPUP)).forEach(function (elem) {\n if (!isNullOrUndefined(elem.querySelector('.' + ITEM)) && _this.getIndex(elem.querySelector('.' + ITEM).id, true).length) {\n popups.push(elem);\n }\n });\n return popups;\n };\n MenuBase.prototype.isMenuVisible = function () {\n return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n };\n MenuBase.prototype.canOpen = function (target) {\n var canOpen = true;\n if (this.filter) {\n canOpen = false;\n var filter = this.filter.split(' ');\n for (var i = 0, len = filter.length; i < len; i++) {\n if (closest(target, '.' + filter[i])) {\n canOpen = true;\n break;\n }\n }\n }\n return canOpen;\n };\n MenuBase.prototype.openMenu = function (li, item, top, left, e, target) {\n var _this = this;\n if (top === void 0) { top = 0; }\n if (left === void 0) { left = 0; }\n if (e === void 0) { e = null; }\n if (target === void 0) { target = this.targetElement; }\n var wrapper = this.getWrapper();\n this.lItem = li;\n var elemId = this.element.id !== '' ? this.element.id : 'menu';\n this.isMenusClosed = false;\n if (isNullOrUndefined(top)) {\n top = -1;\n }\n if (isNullOrUndefined(left)) {\n left = -1;\n }\n if (li) {\n this.uList = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);\n if (!this.isMenu && Browser.isDevice) {\n wrapper.lastChild.style.display = 'none';\n var data = {\n text: item[this.getField('text')].toString(), iconCss: ICONS + ' e-previous'\n };\n var hdata = new MenuItem(this.items[0], 'items', data, true);\n var hli = this.createItems([hdata]).children[0];\n hli.classList.add(HEADER);\n this.uList.insertBefore(hli, this.uList.children[0]);\n }\n if (this.isMenu) {\n this.popupWrapper = this.createElement('div', {\n className: 'e-' + this.getModuleName() + '-wrapper ' + POPUP, id: li.id + '-ej2menu-' + elemId + '-popup'\n });\n if (this.hamburgerMode) {\n top = li.offsetHeight;\n li.appendChild(this.popupWrapper);\n }\n else {\n document.body.appendChild(this.popupWrapper);\n }\n this.isNestedOrVertical = this.element.classList.contains('e-vertical') || this.navIdx.length !== 1;\n this.popupObj = this.generatePopup(this.popupWrapper, this.uList, li, this.isNestedOrVertical);\n if (this.template) {\n this.renderReactTemplates();\n }\n if (this.hamburgerMode) {\n this.calculateIndentSize(this.uList, li);\n }\n else {\n if (this.cssClass) {\n addClass([this.popupWrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n this.popupObj.hide();\n }\n if (!this.hamburgerMode && !this.showItemOnClick && this.hoverDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, 0, 0, 'menu'); }, this.hoverDelay);\n }\n else {\n this.triggerBeforeOpen(li, this.uList, item, e, 0, 0, 'menu');\n }\n }\n else {\n this.uList.style.zIndex = this.element.style.zIndex;\n wrapper.appendChild(this.uList);\n if (!this.showItemOnClick && this.hoverDelay) {\n window.clearInterval(this.timer);\n this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, top, left, 'none'); }, this.hoverDelay);\n }\n else {\n this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n }\n }\n }\n else {\n this.uList = this.element;\n this.uList.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n if (isNullOrUndefined(e)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var ev = document.createEvent('MouseEvents');\n ev.initEvent('click', true, false);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var targetEvent = this.copyObject(ev, {});\n targetEvent.target = targetEvent.srcElement = target;\n targetEvent.currentTarget = target;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.triggerBeforeOpen(li, this.uList, item, targetEvent, top, left, 'none');\n }\n else {\n this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MenuBase.prototype.copyObject = function (source, destination) {\n // eslint-disable-next-line guard-for-in\n for (var prop in source) {\n destination[\"\" + prop] = source[\"\" + prop];\n }\n return destination;\n };\n MenuBase.prototype.calculateIndentSize = function (ul, li) {\n var liStyle = getComputedStyle(li);\n var liIndent = parseInt(liStyle.textIndent, 10);\n if (this.navIdx.length < 2 && !li.classList.contains('e-blankicon')) {\n liIndent *= 2;\n }\n else {\n liIndent += (liIndent / 4);\n }\n ul.style.textIndent = liIndent + 'px';\n var blankIconElem = ul.querySelectorAll('.e-blankicon');\n if (blankIconElem && blankIconElem.length) {\n var menuIconElem = ul.querySelector('.e-menu-icon');\n var menuIconElemStyle = getComputedStyle(menuIconElem);\n var blankIconIndent = (parseInt(menuIconElemStyle.marginRight, 10) + menuIconElem.offsetWidth + liIndent);\n for (var i = 0; i < blankIconElem.length; i++) {\n blankIconElem[i].style.textIndent = blankIconIndent + 'px';\n }\n }\n };\n MenuBase.prototype.generatePopup = function (popupWrapper, ul, li, isNestedOrVertical) {\n var _this = this;\n var popupObj = new Popup(popupWrapper, {\n actionOnScroll: this.hamburgerMode ? 'none' : 'reposition',\n relateTo: li,\n collision: this.hamburgerMode ? { X: 'none', Y: 'none' } : { X: isNestedOrVertical ||\n this.enableRtl ? 'none' : 'flip', Y: 'fit' },\n position: (isNestedOrVertical && !this.hamburgerMode) ? { X: 'right', Y: 'top' } : { X: 'left', Y: 'bottom' },\n targetType: 'relative',\n enableRtl: this.enableRtl,\n content: ul,\n open: function () {\n var scrollEle = select('.e-menu-vscroll', popupObj.element);\n if (scrollEle) {\n scrollEle.style.height = 'inherit';\n scrollEle.style.maxHeight = '';\n }\n var ul = select('.e-ul', popupObj.element);\n popupObj.element.style.maxHeight = '';\n ul.focus();\n _this.triggerOpen(ul);\n }\n });\n return popupObj;\n };\n MenuBase.prototype.createHeaderContainer = function (wrapper) {\n wrapper = wrapper || this.getWrapper();\n var spanElem = this.createElement('span', { className: 'e-' + this.getModuleName() + '-header' });\n var tempTitle = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.title) : this.title;\n var spanTitle = this.createElement('span', {\n className: 'e-' + this.getModuleName() + '-title', innerHTML: tempTitle\n });\n var spanIcon = this.createElement('span', {\n className: 'e-icons e-' + this.getModuleName() + '-icon', attrs: { 'tabindex': '0' }\n });\n spanElem.appendChild(spanTitle);\n spanElem.appendChild(spanIcon);\n wrapper.insertBefore(spanElem, this.element);\n };\n MenuBase.prototype.openHamburgerMenu = function (e) {\n if (this.hamburgerMode) {\n this.triggerBeforeOpen(null, this.element, null, e, 0, 0, 'hamburger');\n }\n };\n MenuBase.prototype.closeHamburgerMenu = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.element, parentItem: null, event: e,\n items: this.items, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedHamburgerCloseArgs) {\n if (!observedHamburgerCloseArgs.cancel) {\n _this.closeMenu(null, e);\n _this.element.classList.add('e-hide-menu');\n _this.trigger('onClose', { element: _this.element, parentItem: null, items: _this.items });\n }\n });\n };\n MenuBase.prototype.callFit = function (element, x, y, top, left) {\n return fit(element, null, { X: x, Y: y }, { top: top, left: left });\n };\n MenuBase.prototype.triggerBeforeOpen = function (li, ul, item, e, top, left, type) {\n var _this = this;\n var items = li ? item[this.getField('children', this.navIdx.length - 1)] : this.items;\n var eventArgs = {\n element: ul, items: items, parentItem: item, event: e, cancel: false, top: top, left: left, showSubMenuOn: 'Auto'\n };\n var menuType = type;\n this.trigger('beforeOpen', eventArgs, function (observedOpenArgs) {\n switch (menuType) {\n case 'menu':\n if (!_this.hamburgerMode) {\n if (observedOpenArgs.showSubMenuOn !== 'Auto') {\n _this.showItemOnClick = !_this.defaultOption;\n _this.showSubMenuOn = observedOpenArgs.showSubMenuOn;\n }\n _this.top = observedOpenArgs.top;\n _this.left = observedOpenArgs.left;\n }\n _this.popupWrapper.style.display = 'block';\n if (!_this.hamburgerMode) {\n _this.popupWrapper.style.maxHeight = _this.popupWrapper.getBoundingClientRect().height + 'px';\n if (_this.enableScrolling) {\n addScrolling(_this.createElement, _this.popupWrapper, _this.uList, 'vscroll', _this.enableRtl);\n }\n _this.checkScrollOffset(e);\n }\n if (!_this.hamburgerMode && !_this.left && !_this.top) {\n _this.popupObj.refreshPosition(_this.lItem, true);\n _this.left = parseInt(_this.popupWrapper.style.left, 10);\n _this.top = parseInt(_this.popupWrapper.style.top, 10);\n if (_this.enableRtl) {\n _this.left =\n _this.isNestedOrVertical ? _this.left - _this.popupWrapper.offsetWidth - _this.lItem.parentElement.offsetWidth + 2\n : _this.left - _this.popupWrapper.offsetWidth + _this.lItem.offsetWidth;\n }\n // eslint-disable-next-line\n if (_this.template && (_this.isReact || _this.isAngular)) {\n requestAnimationFrame(function () {\n _this.collision();\n _this.popupWrapper.style.display = '';\n });\n }\n else {\n _this.collision();\n _this.popupWrapper.style.display = '';\n }\n }\n else {\n _this.popupObj.collision = { X: 'none', Y: 'none' };\n _this.popupWrapper.style.display = '';\n }\n break;\n case 'none':\n _this.top = observedOpenArgs.top;\n _this.left = observedOpenArgs.left;\n break;\n case 'hamburger':\n if (!observedOpenArgs.cancel) {\n _this.element.classList.remove('e-hide-menu');\n _this.triggerOpen(_this.element);\n }\n break;\n }\n if (menuType !== 'hamburger') {\n if (observedOpenArgs.cancel) {\n if (_this.isMenu) {\n _this.popupObj.destroy();\n detach(_this.popupWrapper);\n }\n else if (ul.className.indexOf('e-ul') > -1) {\n detach(ul);\n }\n _this.navIdx.pop();\n }\n else {\n if (_this.isMenu) {\n if (_this.hamburgerMode) {\n _this.popupWrapper.style.top = _this.top + 'px';\n _this.popupWrapper.style.left = 0 + 'px';\n _this.toggleAnimation(_this.popupWrapper);\n }\n else {\n _this.setBlankIconStyle(_this.popupWrapper);\n _this.wireKeyboardEvent(_this.popupWrapper);\n rippleEffect(_this.popupWrapper, { selector: '.' + ITEM });\n _this.popupWrapper.style.left = _this.left + 'px';\n _this.popupWrapper.style.top = _this.top + 'px';\n var animationOptions = _this.animationSettings.effect !== 'None' ? {\n name: _this.animationSettings.effect, duration: _this.animationSettings.duration,\n timingFunction: _this.animationSettings.easing\n } : null;\n _this.popupObj.show(animationOptions, _this.lItem);\n }\n }\n else {\n _this.setBlankIconStyle(_this.uList);\n _this.setPosition(_this.lItem, _this.uList, _this.top, _this.left);\n _this.toggleAnimation(_this.uList);\n }\n }\n }\n if (_this.keyType === 'right') {\n var cul = _this.getUlByNavIdx();\n li.classList.remove(FOCUSED);\n if (_this.isMenu && _this.navIdx.length === 1) {\n _this.removeLIStateByClass([SELECTED], [_this.getWrapper()]);\n }\n li.classList.add(SELECTED);\n if (_this.action === ENTER) {\n var eventArgs_1 = { element: li, item: item, event: e };\n _this.trigger('select', eventArgs_1);\n }\n li.focus();\n cul = _this.getUlByNavIdx();\n var index = _this.isValidLI(cul.children[0], 0, _this.action);\n cul.children[index].classList.add(FOCUSED);\n cul.children[index].focus();\n }\n });\n };\n MenuBase.prototype.collision = function () {\n var collide;\n collide = isCollide(this.popupWrapper, null, this.left, this.top);\n if ((this.isNestedOrVertical || this.enableRtl) && (collide.indexOf('right') > -1\n || collide.indexOf('left') > -1)) {\n this.popupObj.collision.X = 'none';\n var offWidth = closest(this.lItem, '.e-' + this.getModuleName() + '-wrapper').offsetWidth;\n this.left =\n this.enableRtl ? calculatePosition(this.lItem, this.isNestedOrVertical ? 'right' : 'left', 'top').left\n : this.left - this.popupWrapper.offsetWidth - offWidth + 2;\n }\n collide = isCollide(this.popupWrapper, null, this.left, this.top);\n if (collide.indexOf('left') > -1 || collide.indexOf('right') > -1) {\n this.left = this.callFit(this.popupWrapper, true, false, this.top, this.left).left;\n }\n this.popupWrapper.style.left = this.left + 'px';\n };\n MenuBase.prototype.setBlankIconStyle = function (menu) {\n var blankIconList = [].slice.call(menu.getElementsByClassName('e-blankicon'));\n if (!blankIconList.length) {\n return;\n }\n var iconLi = menu.querySelector('.e-menu-item:not(.e-blankicon):not(.e-separator)');\n if (!iconLi) {\n return;\n }\n var icon = iconLi.querySelector('.e-menu-icon');\n if (!icon) {\n return;\n }\n var cssProp = this.enableRtl ? { padding: 'paddingRight', margin: 'marginLeft' } :\n { padding: 'paddingLeft', margin: 'marginRight' };\n var iconCssProps = getComputedStyle(icon);\n var iconSize = parseInt(iconCssProps.fontSize, 10);\n if (!!parseInt(iconCssProps.width, 10) && parseInt(iconCssProps.width, 10) > iconSize) {\n iconSize = parseInt(iconCssProps.width, 10);\n }\n // eslint:disable\n var size = iconSize + parseInt(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n iconCssProps[cssProp.margin], 10) + parseInt(getComputedStyle(iconLi)[cssProp.padding], 10) + \"px\";\n blankIconList.forEach(function (li) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n li.style[cssProp.padding] = size;\n });\n // eslint:enable\n };\n MenuBase.prototype.checkScrollOffset = function (e) {\n var wrapper = this.getWrapper();\n if (wrapper.children[0].classList.contains('e-menu-hscroll') && this.navIdx.length === 1) {\n var trgt = isNullOrUndefined(e) ? this.element : closest(e.target, '.' + ITEM);\n var offsetEle = select('.e-hscroll-bar', wrapper);\n if (offsetEle.scrollLeft > trgt.offsetLeft) {\n offsetEle.scrollLeft -= (offsetEle.scrollLeft - trgt.offsetLeft);\n }\n var offsetLeft = offsetEle.scrollLeft + offsetEle.offsetWidth;\n var offsetRight = trgt.offsetLeft + trgt.offsetWidth;\n if (offsetLeft < offsetRight) {\n offsetEle.scrollLeft += (offsetRight - offsetLeft);\n }\n }\n };\n MenuBase.prototype.setPosition = function (li, ul, top, left) {\n var px = 'px';\n this.toggleVisiblity(ul);\n if (ul === this.element || (left > -1 && top > -1)) {\n var collide = isCollide(ul, null, left, top);\n if (collide.indexOf('right') > -1) {\n left = left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n var offset = this.callFit(ul, false, true, top, left);\n top = offset.top - 20;\n if (top < 0) {\n var newTop = (pageYOffset + document.documentElement.clientHeight) - ul.getBoundingClientRect().height;\n if (newTop > -1) {\n top = newTop;\n }\n }\n }\n collide = isCollide(ul, null, left, top);\n if (collide.indexOf('left') > -1) {\n var offset = this.callFit(ul, true, false, top, left);\n left = offset.left;\n }\n }\n else {\n if (Browser.isDevice) {\n top = Number(this.element.style.top.replace(px, ''));\n left = Number(this.element.style.left.replace(px, ''));\n }\n else {\n var x = this.enableRtl ? 'left' : 'right';\n var offset = calculatePosition(li, x, 'top');\n top = offset.top;\n left = offset.left;\n var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n if (xCollision) {\n offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n left = offset.left;\n }\n if (this.enableRtl || xCollision) {\n left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n }\n if (collide.indexOf('bottom') > -1) {\n offset = this.callFit(ul, false, true, top, left);\n top = offset.top;\n }\n }\n }\n this.toggleVisiblity(ul, false);\n ul.style.top = top + px;\n ul.style.left = left + px;\n };\n MenuBase.prototype.toggleVisiblity = function (ul, isVisible) {\n if (isVisible === void 0) { isVisible = true; }\n ul.style.visibility = isVisible ? 'hidden' : '';\n ul.style.display = isVisible ? 'block' : 'none';\n };\n MenuBase.prototype.createItems = function (items) {\n var _this = this;\n var level = this.navIdx ? this.navIdx.length : 0;\n var fields = this.getFields(level);\n var showIcon = this.hasField(items, this.getField('iconCss', level));\n var listBaseOptions = {\n showIcon: showIcon,\n moduleName: 'menu',\n fields: fields,\n template: this.template,\n itemNavigable: true,\n itemCreating: function (args) {\n if (!args.curData[args.fields[fields.id]]) {\n args.curData[args.fields[fields.id]] = getUniqueID('menuitem');\n }\n if (isNullOrUndefined(args.curData.htmlAttributes)) {\n args.curData.htmlAttributes = {};\n }\n if (Browser.isIE) {\n args.curData.htmlAttributes.role = 'menuitem';\n args.curData.htmlAttributes.tabindex = '-1';\n }\n else {\n Object.assign(args.curData.htmlAttributes, { role: 'menuitem', tabindex: '-1' });\n }\n if (_this.isMenu && !args.curData[_this.getField('separator', level)]) {\n args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text] ?\n args.curData[args.fields.text] : args.curData[args.fields.id];\n }\n if (args.curData[args.fields[fields.iconCss]] === '') {\n args.curData[args.fields[fields.iconCss]] = null;\n }\n },\n itemCreated: function (args) {\n if (args.curData[_this.getField('separator', level)]) {\n args.item.classList.add(SEPARATOR);\n args.item.setAttribute('role', 'separator');\n }\n if (showIcon && !args.curData[args.fields.iconCss]\n && !args.curData[_this.getField('separator', level)]) {\n args.item.classList.add('e-blankicon');\n }\n if (args.curData[args.fields.child]\n && args.curData[args.fields.child].length) {\n var span = _this.createElement('span', { className: ICONS + ' ' + CARET });\n args.item.appendChild(span);\n args.item.setAttribute('aria-haspopup', 'true');\n args.item.setAttribute('aria-expanded', 'false');\n args.item.classList.add('e-menu-caret-icon');\n }\n if (_this.isMenu && _this.template) {\n args.item.setAttribute('id', args.curData[args.fields.id].toString());\n args.item.removeAttribute('data-uid');\n if (args.item.classList.contains('e-level-1')) {\n args.item.classList.remove('e-level-1');\n }\n if (args.item.classList.contains('e-has-child')) {\n args.item.classList.remove('e-has-child');\n }\n args.item.removeAttribute('aria-level');\n }\n var eventArgs = { item: args.curData, element: args.item };\n _this.trigger('beforeItemRender', eventArgs);\n }\n };\n this.setProperties({ 'items': this.items }, true);\n if (this.isMenu) {\n listBaseOptions.templateID = this.element.id + TEMPLATE_PROPERTY;\n }\n var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template, this);\n ul.setAttribute('tabindex', '0');\n if (this.isMenu) {\n ul.setAttribute('role', 'menu');\n }\n else {\n ul.setAttribute('role', 'menubar');\n }\n return ul;\n };\n MenuBase.prototype.moverHandler = function (e) {\n var trgt = e.target;\n this.liTrgt = trgt;\n if (!this.isMenu) {\n this.isCmenuHover = true;\n }\n var cli = this.getLI(trgt);\n var wrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : this.getWrapper();\n var hdrWrapper = this.getWrapper();\n var regex = new RegExp('-ej2menu-(.*)-popup');\n var ulId;\n var isDifferentElem = false;\n if (!wrapper) {\n return;\n }\n if (wrapper.id !== '') {\n ulId = regex.exec(wrapper.id)[1];\n }\n else {\n ulId = wrapper.querySelector('ul').id;\n }\n if (ulId !== this.element.id) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [this.getWrapper()]);\n if (this.navIdx.length) {\n isDifferentElem = true;\n }\n else {\n return;\n }\n }\n if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper') && !isDifferentElem) {\n this.removeLIStateByClass([FOCUSED], this.isMenu ? [wrapper].concat(this.getPopups()) : [wrapper]);\n this.removeLIStateByClass([FOCUSED], this.isMenu ? [hdrWrapper].concat(this.getPopups()) : [hdrWrapper]);\n cli.classList.add(FOCUSED);\n if (!this.showItemOnClick) {\n this.clickHandler(e);\n }\n }\n else if (this.isMenu && this.showItemOnClick && !isDifferentElem) {\n this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n }\n if (this.isMenu) {\n if (!this.showItemOnClick && (trgt.parentElement !== wrapper && !closest(trgt, '.e-' + this.getModuleName() + '-popup'))\n && (!cli || (cli && !this.getIndex(cli.id, true).length)) && this.showSubMenuOn !== 'Hover') {\n this.removeLIStateByClass([FOCUSED], [wrapper]);\n if (this.navIdx.length) {\n this.isClosed = true;\n this.closeMenu(null, e);\n }\n }\n else if (isDifferentElem && !this.showItemOnClick) {\n if (this.navIdx.length) {\n this.isClosed = true;\n this.closeMenu(null, e);\n }\n }\n if (!this.isClosed) {\n this.removeStateWrapper();\n }\n this.isClosed = false;\n }\n if (!this.isMenu) {\n this.isCmenuHover = false;\n }\n };\n MenuBase.prototype.removeStateWrapper = function () {\n if (this.liTrgt) {\n var wrapper = closest(this.liTrgt, '.e-menu-vscroll');\n if (this.liTrgt.tagName === 'DIV' && wrapper) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [wrapper]);\n }\n }\n };\n MenuBase.prototype.removeLIStateByClass = function (classList, element) {\n var li;\n var _loop_1 = function (i) {\n classList.forEach(function (className) {\n li = select('.' + className, element[i]);\n if (li) {\n li.classList.remove(className);\n }\n });\n };\n for (var i = 0; i < element.length; i++) {\n _loop_1(i);\n }\n };\n MenuBase.prototype.getField = function (propName, level) {\n if (level === void 0) { level = 0; }\n var fieldName = this.fields[\"\" + propName];\n return typeof fieldName === 'string' ? fieldName :\n (!fieldName[level] ? fieldName[fieldName.length - 1].toString()\n : fieldName[level].toString());\n };\n MenuBase.prototype.getFields = function (level) {\n if (level === void 0) { level = 0; }\n return {\n id: this.getField('itemId', level),\n iconCss: this.getField('iconCss', level),\n text: this.getField('text', level),\n url: this.getField('url', level),\n child: this.getField('children', level),\n separator: this.getField('separator', level)\n };\n };\n MenuBase.prototype.hasField = function (items, field) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (items[i][\"\" + field]) {\n return true;\n }\n }\n return false;\n };\n MenuBase.prototype.menuHeaderClickHandler = function (e) {\n var menuWrapper = closest(e.target, '.e-menu-wrapper');\n if (menuWrapper && menuWrapper.querySelector('ul.e-menu-parent').id !== this.element.id) {\n return;\n }\n if (this.element.className.indexOf('e-hide-menu') > -1) {\n this.openHamburgerMenu(e);\n }\n else {\n this.closeHamburgerMenu(e);\n }\n };\n MenuBase.prototype.clickHandler = function (e) {\n this.isTapHold = this.isTapHold ? false : this.isTapHold;\n var wrapper = this.getWrapper();\n var trgt = e.target;\n var cli = this.cli = this.getLI(trgt);\n var regex = new RegExp('-ej2menu-(.*)-popup');\n var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;\n var isInstLI = cli && cliWrapper && (this.isMenu ? this.getIndex(cli.id, true).length > 0\n : wrapper.firstElementChild.id === cliWrapper.firstElementChild.id);\n if (Browser.isDevice && this.isMenu) {\n this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n this.mouseDownHandler(e);\n }\n if (cli && cliWrapper && this.isMenu) {\n var cliWrapperId = cliWrapper.id ? regex.exec(cliWrapper.id)[1] : cliWrapper.querySelector('.e-menu-parent').id;\n if (this.element.id !== cliWrapperId) {\n return;\n }\n }\n if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n this.setLISelected(cli);\n var navIdx = this.getIndex(cli.id, true);\n var item = this.getItem(navIdx);\n var eventArgs = { element: cli, item: item, event: e };\n this.trigger('select', eventArgs);\n }\n if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n var ul = void 0;\n if (cli.classList.contains(HEADER)) {\n ul = wrapper.children[this.navIdx.length - 1];\n this.toggleAnimation(ul);\n var sli = this.getLIByClass(ul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n detach(cli.parentNode);\n this.navIdx.pop();\n }\n else {\n if (!cli.classList.contains(SEPARATOR)) {\n this.showSubMenu = true;\n var cul = cli.parentNode;\n if (isNullOrUndefined(cul)) {\n return;\n }\n this.cliIdx = this.getIdx(cul, cli);\n if (this.isMenu || !Browser.isDevice) {\n var culIdx = this.isMenu ? Array.prototype.indexOf.call([wrapper].concat(this.getPopups()), closest(cul, '.' + 'e-' + this.getModuleName() + '-wrapper'))\n : this.getIdx(wrapper, cul);\n if (this.navIdx[culIdx] === this.cliIdx) {\n this.showSubMenu = false;\n }\n if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || this.showSubMenu)) {\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n this.isClosed = true;\n this.keyType = 'click';\n if (this.showItemOnClick) {\n this.setLISelected(cli);\n if (!this.isMenu) {\n this.isCmenuHover = true;\n }\n }\n this.closeMenu(culIdx + 1, e);\n if (this.showItemOnClick) {\n this.setLISelected(cli);\n if (!this.isMenu) {\n this.isCmenuHover = false;\n }\n }\n }\n }\n if (!this.isClosed) {\n this.afterCloseMenu(e);\n }\n this.isClosed = false;\n }\n }\n }\n else {\n if (this.isMenu && trgt.tagName === 'DIV' && this.navIdx.length && closest(trgt, '.e-menu-vscroll')) {\n var popupEle = closest(trgt, '.' + POPUP);\n var cIdx = Array.prototype.indexOf.call(this.getPopups(), popupEle) + 1;\n if (cIdx < this.navIdx.length) {\n this.closeMenu(cIdx + 1, e);\n if (popupEle) {\n this.removeLIStateByClass([FOCUSED, SELECTED], [popupEle]);\n }\n }\n }\n else if (this.isMenu && this.hamburgerMode && trgt.tagName === 'SPAN'\n && trgt.classList.contains('e-menu-icon')) {\n this.menuHeaderClickHandler(e);\n }\n else {\n if (trgt.tagName !== 'UL' || (this.isMenu ? trgt.parentElement.classList.contains('e-menu-wrapper') &&\n !this.getIndex(trgt.querySelector('.' + ITEM).id, true).length : trgt.parentElement !== wrapper)) {\n if (!cli) {\n this.removeLIStateByClass([SELECTED], [wrapper]);\n }\n if (!cli || !cli.querySelector('.' + CARET)) {\n this.closeMenu(null, e);\n }\n }\n }\n }\n };\n MenuBase.prototype.afterCloseMenu = function (e) {\n if (isNullOrUndefined(e)) {\n return;\n }\n var isHeader;\n if (this.showSubMenu) {\n if (this.showItemOnClick && this.navIdx.length === 0) {\n isHeader = closest(e.target, '.e-menu-parent.e-control');\n }\n else {\n isHeader = closest(this.element, '.e-menu-parent.e-control');\n }\n var idx = this.navIdx.concat(this.cliIdx);\n var item = this.getItem(idx);\n if (item && item[this.getField('children', idx.length - 1)] &&\n item[this.getField('children', idx.length - 1)].length) {\n if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {\n this.setLISelected(this.cli);\n }\n if ((!this.hamburgerMode && isHeader) || (this.hamburgerMode && this.cli.getAttribute('aria-expanded') === 'false')) {\n this.cli.setAttribute('aria-expanded', 'true');\n this.navIdx.push(this.cliIdx);\n this.openMenu(this.cli, item, null, null, e);\n }\n }\n else {\n if (e.type !== 'mouseover') {\n this.closeMenu(null, e);\n }\n }\n if (!isHeader) {\n var cul = this.getUlByNavIdx();\n var sli = this.getLIByClass(cul, SELECTED);\n if (sli) {\n sli.setAttribute('aria-expanded', 'false');\n sli.classList.remove(SELECTED);\n }\n }\n }\n this.keyType = '';\n };\n MenuBase.prototype.setLISelected = function (li) {\n var sli = this.getLIByClass(li.parentElement, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n if (!this.isMenu) {\n li.classList.remove(FOCUSED);\n }\n li.classList.add(SELECTED);\n };\n MenuBase.prototype.getLIByClass = function (ul, classname) {\n if (ul && ul.children) {\n for (var i = 0, len = ul.children.length; i < len; i++) {\n if (ul.children[i].classList.contains(classname)) {\n return ul.children[i];\n }\n }\n }\n return null;\n };\n /**\n * This method is used to get the index of the menu item in the Menu based on the argument.\n *\n * @param {MenuItem | string} item - item be passed to get the index | id to be passed to get the item index.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.getItemIndex = function (item, isUniqueId) {\n var idx;\n if (typeof item === 'string') {\n idx = item;\n }\n else {\n idx = item.id;\n }\n var isText = (isUniqueId === false) ? false : true;\n var navIdx = this.getIndex(idx, isText);\n return navIdx;\n };\n /**\n * This method is used to set the menu item in the Menu based on the argument.\n *\n * @param {MenuItem} item - item need to be updated.\n * @param {string} id - id / text to be passed to update the item.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.setItem = function (item, id, isUniqueId) {\n var idx;\n if (isUniqueId) {\n idx = id ? id : item.id;\n }\n else {\n idx = id ? id : item.text;\n }\n var navIdx = this.getIndex(idx, isUniqueId);\n var newItem = this.getItem(navIdx);\n Object.assign(newItem, item);\n };\n MenuBase.prototype.getItem = function (navIdx) {\n navIdx = navIdx.slice();\n var idx = navIdx.pop();\n var items = this.getItems(navIdx);\n return items[idx];\n };\n MenuBase.prototype.getItems = function (navIdx) {\n var items = this.items;\n for (var i = 0; i < navIdx.length; i++) {\n items = items[navIdx[i]][this.getField('children', i)];\n }\n return items;\n };\n MenuBase.prototype.setItems = function (newItems, navIdx) {\n var items = this.getItems(navIdx);\n items.splice(0, items.length);\n for (var i = 0; i < newItems.length; i++) {\n items.splice(i, 0, newItems[i]);\n }\n };\n MenuBase.prototype.getIdx = function (ul, li, skipHdr) {\n if (skipHdr === void 0) { skipHdr = true; }\n var idx = Array.prototype.indexOf.call(ul.children, li);\n if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n idx--;\n }\n return idx;\n };\n MenuBase.prototype.getLI = function (elem) {\n if (elem.tagName === 'LI' && elem.classList.contains('e-menu-item')) {\n return elem;\n }\n return closest(elem, 'li.e-menu-item');\n };\n MenuBase.prototype.updateItemsByNavIdx = function () {\n var items = this.items;\n var count = 0;\n for (var index = 0; index < this.navIdx.length; index++) {\n items = items[index].items;\n if (!items) {\n break;\n }\n count++;\n var ul = this.getUlByNavIdx(count);\n if (!ul) {\n break;\n }\n this.updateItem(ul, items);\n }\n };\n MenuBase.prototype.removeChildElement = function (elem) {\n while (elem.firstElementChild) {\n elem.removeChild(elem.firstElementChild);\n }\n return elem;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {MenuBaseModel} newProp - Specifies the new properties\n * @param {MenuBaseModel} oldProp - Specifies the old properties\n * @returns {void}\n */\n MenuBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n var wrapper = this.getWrapper();\n var _loop_2 = function (prop) {\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (this_1.enableRtl) {\n wrapper.classList.add(RTL);\n }\n else {\n wrapper.classList.remove(RTL);\n }\n break;\n case 'showItemOnClick':\n this_1.unWireEvents();\n this_1.showItemOnClick = newProp.showItemOnClick;\n this_1.wireEvents();\n break;\n case 'enableScrolling':\n if (newProp.enableScrolling) {\n var ul_2;\n if (this_1.element.classList.contains('e-vertical')) {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);\n }\n else {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n }\n this_1.getPopups().forEach(function (wrapper) {\n ul_2 = select('.e-ul', wrapper);\n addScrolling(_this.createElement, wrapper, ul_2, 'vscroll', _this.enableRtl);\n });\n }\n else {\n var ul_3 = wrapper.children[0];\n if (this_1.element.classList.contains('e-vertical')) {\n destroyScroll(getInstance(ul_3, VScroll), ul_3);\n }\n else {\n destroyScroll(getInstance(ul_3, HScroll), ul_3);\n }\n wrapper.style.overflow = '';\n wrapper.appendChild(this_1.element);\n this_1.getPopups().forEach(function (wrapper) {\n ul_3 = wrapper.children[0];\n destroyScroll(getInstance(ul_3, VScroll), ul_3);\n wrapper.style.overflow = '';\n });\n }\n break;\n case 'items': {\n var idx = void 0;\n var navIdx = void 0;\n var item = void 0;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this_1.isReact && this_1.template) {\n this_1.clearTemplate(['template']);\n }\n if (!Object.keys(oldProp.items).length) {\n this_1.updateItem(this_1.element, this_1.items);\n if (this_1.enableScrolling && this_1.element.parentElement.classList.contains('e-custom-scroll')) {\n if (this_1.element.classList.contains('e-vertical')) {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);\n }\n else {\n addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n }\n }\n if (!this_1.hamburgerMode) {\n for (var i = 1, count = wrapper.childElementCount; i < count; i++) {\n detach(wrapper.lastElementChild);\n }\n }\n this_1.navIdx = [];\n }\n else {\n var keys = Object.keys(newProp.items);\n for (var i = 0; i < keys.length; i++) {\n navIdx = this_1.getChangedItemIndex(newProp, [], Number(keys[i]));\n if (navIdx.length <= this_1.getWrapper().children.length) {\n idx = navIdx.pop();\n item = this_1.getItems(navIdx);\n this_1.insertAfter([item[idx]], item[idx].text);\n this_1.removeItem(item, navIdx, idx);\n this_1.setItems(item, navIdx);\n }\n navIdx.length = 0;\n }\n }\n break;\n }\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_2(prop);\n }\n };\n MenuBase.prototype.updateItem = function (ul, items) {\n if (isBlazor() && !this.isMenu) {\n ul = this.removeChildElement(ul);\n }\n else {\n if (this.enableScrolling) {\n var wrapper1 = this.getWrapper();\n var ul1 = wrapper1.children[0];\n if (this.element.classList.contains('e-vertical')) {\n destroyScroll(getInstance(ul1, VScroll), ul1);\n }\n else {\n destroyScroll(getInstance(ul1, HScroll), ul1);\n }\n }\n ul.innerHTML = '';\n }\n var lis = [].slice.call(this.createItems(items).children);\n lis.forEach(function (li) {\n ul.appendChild(li);\n });\n };\n MenuBase.prototype.getChangedItemIndex = function (newProp, index, idx) {\n index.push(idx);\n var key = Object.keys(newProp.items[idx]).pop();\n if (key === 'items') {\n var item = newProp.items[idx];\n var popStr = Object.keys(item.items).pop();\n if (popStr) {\n this.getChangedItemIndex(item, index, Number(popStr));\n }\n }\n else {\n if (key === 'isParentArray' && index.length > 1) {\n index.pop();\n }\n }\n return index;\n };\n MenuBase.prototype.removeItem = function (item, navIdx, idx) {\n item.splice(idx, 1);\n var uls = this.getWrapper().children;\n if (navIdx.length < uls.length) {\n detach(uls[navIdx.length].children[idx]);\n }\n };\n /**\n * Used to unwire the bind events.\n *\n * @private\n * @param {string} targetSelctor - Specifies the target selector\n * @returns {void}\n */\n MenuBase.prototype.unWireEvents = function (targetSelctor) {\n if (targetSelctor === void 0) { targetSelctor = this.target; }\n var wrapper = this.getWrapper();\n if (targetSelctor) {\n var target = void 0;\n var touchModule = void 0;\n var targetElems = selectAll(targetSelctor);\n for (var i = 0, len = targetElems.length; i < len; i++) {\n target = targetElems[i];\n if (this.isMenu) {\n EventHandler.remove(target, 'click', this.menuHeaderClickHandler);\n }\n else {\n if (Browser.isIos) {\n touchModule = getInstance(target, Touch);\n if (touchModule) {\n touchModule.destroy();\n }\n }\n else {\n EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n }\n }\n }\n if (!this.isMenu) {\n EventHandler.remove(this.targetElement, 'scroll', this.scrollHandler);\n for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n var parent_2 = _a[_i];\n EventHandler.remove(parent_2, 'scroll', this.scrollHandler);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.remove(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler);\n EventHandler.remove(document, 'mousedown', this.delegateMouseDownHandler);\n }\n EventHandler.remove(document, 'click', this.delegateClickHandler);\n this.unWireKeyboardEvent(wrapper);\n this.rippleFn();\n };\n MenuBase.prototype.unWireKeyboardEvent = function (element) {\n var keyboardModule = getInstance(element, KeyboardEvents);\n if (keyboardModule) {\n keyboardModule.destroy();\n }\n };\n MenuBase.prototype.toggleAnimation = function (ul, isMenuOpen) {\n var _this = this;\n if (isMenuOpen === void 0) { isMenuOpen = true; }\n var pUlHeight;\n var pElement;\n if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n this.end(ul, isMenuOpen);\n }\n else {\n this.animation.animate(ul, {\n name: this.animationSettings.effect,\n duration: this.animationSettings.duration,\n timingFunction: this.animationSettings.easing,\n begin: function (options) {\n if (_this.hamburgerMode) {\n pElement = options.element.parentElement;\n options.element.style.position = 'absolute';\n pUlHeight = pElement.offsetHeight;\n options.element.style.maxHeight = options.element.offsetHeight + 'px';\n pElement.style.maxHeight = '';\n }\n else {\n options.element.style.display = 'block';\n options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n }\n },\n progress: function (options) {\n if (_this.hamburgerMode) {\n pElement.style.minHeight = (pUlHeight + options.element.offsetHeight) + 'px';\n }\n },\n end: function (options) {\n if (_this.hamburgerMode) {\n options.element.style.position = '';\n options.element.style.maxHeight = '';\n pElement.style.minHeight = '';\n options.element.style.top = 0 + 'px';\n options.element.children[0].focus();\n _this.triggerOpen(options.element.children[0]);\n }\n else {\n _this.end(options.element, isMenuOpen);\n }\n }\n });\n }\n };\n MenuBase.prototype.triggerOpen = function (ul) {\n var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n var eventArgs = {\n element: ul, parentItem: item, items: item ? item.items : this.items\n };\n this.trigger('onOpen', eventArgs);\n if (!this.isMenu) {\n EventHandler.add(ul, 'keydown', this.keyHandler, this);\n }\n };\n MenuBase.prototype.end = function (ul, isMenuOpen) {\n if (isMenuOpen) {\n if (this.isMenu || !Browser.isDevice) {\n ul.style.display = 'block';\n }\n ul.style.maxHeight = '';\n this.triggerOpen(ul);\n if (ul.querySelector('.' + FOCUSED)) {\n ul.querySelector('.' + FOCUSED).focus();\n }\n else {\n var ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n if (this.currentTarget) {\n if (!(this.currentTarget.classList.contains('e-numerictextbox') || this.currentTarget.classList.contains('e-textbox') || this.currentTarget.tagName === 'INPUT')) {\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n else {\n if (ele) {\n ele.querySelector('.' + SELECTED).focus();\n }\n else {\n this.element.focus();\n }\n }\n }\n }\n else {\n if (ul === this.element) {\n var fli = this.getLIByClass(this.element, FOCUSED);\n if (fli) {\n fli.classList.remove(FOCUSED);\n }\n var sli = this.getLIByClass(this.element, SELECTED);\n if (sli) {\n sli.classList.remove(SELECTED);\n }\n ul.style.display = 'none';\n }\n else {\n detach(ul);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n MenuBase.prototype.getPersistData = function () {\n return '';\n };\n /**\n * Get wrapper element.\n *\n * @returns {Element} - Wrapper element\n * @private\n */\n MenuBase.prototype.getWrapper = function () {\n return closest(this.element, '.e-' + this.getModuleName() + '-wrapper');\n };\n MenuBase.prototype.getIndex = function (data, isUniqueId, items, nIndex, isCallBack, level) {\n if (items === void 0) { items = this.items; }\n if (nIndex === void 0) { nIndex = []; }\n if (isCallBack === void 0) { isCallBack = false; }\n if (level === void 0) { level = 0; }\n var item;\n level = isCallBack ? level + 1 : 0;\n for (var i = 0, len = items.length; i < len; i++) {\n item = items[i];\n if ((isUniqueId ? item[this.getField('itemId', level)] : item[this.getField('text', level)]) === data) {\n nIndex.push(i);\n break;\n }\n else if (item[this.getField('children', level)]\n && item[this.getField('children', level)].length) {\n nIndex = this.getIndex(data, isUniqueId, item[this.getField('children', level)], nIndex, true, level);\n if (nIndex[nIndex.length - 1] === -1) {\n if (i !== len - 1) {\n nIndex.pop();\n }\n }\n else {\n nIndex.unshift(i);\n break;\n }\n }\n else {\n if (i === len - 1) {\n nIndex.push(-1);\n }\n }\n }\n return (!isCallBack && nIndex[0] === -1) ? [] : nIndex;\n };\n /**\n * This method is used to enable or disable the menu items in the Menu based on the items and enable argument.\n *\n * @param {string[]} items - Text items that needs to be enabled/disabled.\n * @param {boolean} enable - Set `true`/`false` to enable/disable the list items.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.enableItems = function (items, enable, isUniqueId) {\n if (enable === void 0) { enable = true; }\n var ul;\n var idx;\n var navIdx;\n var disabled = DISABLED;\n var skipItem;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n if (this.navIdx.length) {\n if (navIdx.length !== 1) {\n skipItem = false;\n for (var i_1 = 0, len = navIdx.length - 1; i_1 < len; i_1++) {\n if (navIdx[i_1] !== this.navIdx[i_1]) {\n skipItem = true;\n break;\n }\n }\n if (skipItem) {\n continue;\n }\n }\n }\n else {\n if (navIdx.length !== 1) {\n continue;\n }\n }\n idx = navIdx.pop();\n ul = this.getUlByNavIdx(navIdx.length);\n if (ul && !isNullOrUndefined(idx)) {\n if (enable) {\n if (this.isMenu) {\n ul.children[idx].classList.remove(disabled);\n ul.children[idx].removeAttribute('aria-disabled');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.remove(disabled);\n }\n else {\n ul.children[idx].classList.remove(disabled);\n }\n }\n }\n else {\n if (this.isMenu) {\n ul.children[idx].classList.add(disabled);\n ul.children[idx].setAttribute('aria-disabled', 'true');\n }\n else {\n if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n ul.children[idx + 1].classList.add(disabled);\n }\n else {\n ul.children[idx].classList.add(disabled);\n }\n }\n }\n }\n }\n };\n /**\n * This method is used to show the menu items in the Menu based on the items text.\n *\n * @param {string[]} items - Text items that needs to be shown.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.showItems = function (items, isUniqueId) {\n this.showHideItems(items, false, isUniqueId);\n };\n /**\n * This method is used to hide the menu items in the Menu based on the items text.\n *\n * @param {string[]} items - Text items that needs to be hidden.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.hideItems = function (items, isUniqueId) {\n this.showHideItems(items, true, isUniqueId);\n };\n MenuBase.prototype.showHideItems = function (items, ishide, isUniqueId) {\n var ul;\n var index;\n var navIdx;\n var item;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n index = navIdx.pop();\n ul = this.getUlByNavIdx(navIdx.length);\n item = this.getItems(navIdx);\n if (ul) {\n var validUl = isUniqueId ? ul.children[index].id : item[index].text.toString();\n if (ishide && validUl === items[i]) {\n ul.children[index].classList.add(HIDE);\n }\n else if (!ishide && validUl === items[i]) {\n ul.children[index].classList.remove(HIDE);\n }\n }\n }\n };\n /**\n * It is used to remove the menu items from the Menu based on the items text.\n *\n * @param {string[]} items Text items that needs to be removed.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.removeItems = function (items, isUniqueId) {\n var idx;\n var navIdx;\n var iitems;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(items[i], isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n if (!isNullOrUndefined(idx)) {\n this.removeItem(iitems, navIdx, idx);\n }\n }\n };\n /**\n * It is used to insert the menu items after the specified menu item text.\n *\n * @param {MenuItemModel[]} items - Items that needs to be inserted.\n * @param {string} text - Text item after that the element to be inserted.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.insertAfter = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId);\n };\n /**\n * It is used to insert the menu items before the specified menu item text.\n *\n * @param {MenuItemModel[]} items - Items that needs to be inserted.\n * @param {string} text - Text item before that the element to be inserted.\n * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n * @returns {void}\n */\n MenuBase.prototype.insertBefore = function (items, text, isUniqueId) {\n this.insertItems(items, text, isUniqueId, false);\n };\n MenuBase.prototype.insertItems = function (items, text, isUniqueId, isAfter) {\n if (isAfter === void 0) { isAfter = true; }\n var li;\n var idx;\n var navIdx;\n var iitems;\n var menuitem;\n for (var i = 0; i < items.length; i++) {\n navIdx = this.getIndex(text, isUniqueId);\n idx = navIdx.pop();\n iitems = this.getItems(navIdx);\n menuitem = new MenuItem(iitems[0], 'items', items[i], true);\n iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n var uls = this.isMenu ? [this.getWrapper()].concat(this.getPopups()) : [].slice.call(this.getWrapper().children);\n if (!isNullOrUndefined(idx) && navIdx.length < uls.length) {\n idx = isAfter ? idx + 1 : idx;\n li = this.createItems(iitems).children[idx];\n var ul = this.isMenu ? select('.e-menu-parent', uls[navIdx.length]) : uls[navIdx.length];\n ul.insertBefore(li, ul.children[idx]);\n }\n }\n };\n MenuBase.prototype.removeAttributes = function () {\n var _this = this;\n ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n _this.element.style.removeProperty(key);\n });\n ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n if (key === 'class' && _this.element.classList.contains('e-menu-parent')) {\n _this.element.classList.remove('e-menu-parent');\n }\n if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n _this.element.removeAttribute(key);\n }\n if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {\n _this.element.classList.remove('e-vertical');\n }\n });\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n MenuBase.prototype.destroy = function () {\n var wrapper = this.getWrapper();\n if (wrapper) {\n this.unWireEvents();\n if (!this.isMenu) {\n this.clonedElement.style.display = '';\n if (this.clonedElement.tagName === 'EJS-CONTEXTMENU') {\n addClass([this.clonedElement], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n this.element = this.clonedElement;\n }\n else {\n if (this.refreshing && this.clonedElement.childElementCount && this.clonedElement.children[0].tagName === 'LI') {\n this.setProperties({ 'items': [] }, true);\n }\n if (document.getElementById(this.clonedElement.id)) {\n var refEle = this.clonedElement.nextElementSibling;\n if (refEle && refEle !== wrapper) {\n this.clonedElement.parentElement.insertBefore(this.element, refEle);\n }\n else {\n this.clonedElement.parentElement.appendChild(this.element);\n }\n if (isBlazor() && !this.isMenu) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n append([].slice.call(this.clonedElement.children), this.element);\n detach(this.clonedElement);\n this.removeAttributes();\n }\n }\n this.clonedElement = null;\n }\n else {\n this.closeMenu();\n if (isBlazor() && !this.isMenu) {\n this.element = this.removeChildElement(this.element);\n }\n else {\n this.element.innerHTML = '';\n }\n this.removeAttributes();\n wrapper.parentNode.insertBefore(this.element, wrapper);\n this.clonedElement = null;\n }\n if (this.isMenu && this.clonedElement) {\n detach(this.element);\n wrapper.style.display = '';\n wrapper.classList.remove('e-' + this.getModuleName() + '-wrapper');\n wrapper.removeAttribute('data-ripple');\n }\n else {\n detach(wrapper);\n }\n _super.prototype.destroy.call(this);\n if (this.template) {\n this.clearTemplate(['template']);\n }\n }\n this.rippleFn = null;\n };\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onOpen\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"onClose\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], MenuBase.prototype, \"created\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(0)\n ], MenuBase.prototype, \"hoverDelay\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"showItemOnClick\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], MenuBase.prototype, \"filter\", void 0);\n __decorate([\n Property(null)\n ], MenuBase.prototype, \"template\", void 0);\n __decorate([\n Property(false)\n ], MenuBase.prototype, \"enableScrolling\", void 0);\n __decorate([\n Property(true)\n ], MenuBase.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Complex({ itemId: 'id', text: 'text', parentId: 'parentId', iconCss: 'iconCss', url: 'url', separator: 'separator', children: 'items' }, FieldSettings)\n ], MenuBase.prototype, \"fields\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], MenuBase.prototype, \"items\", void 0);\n __decorate([\n Complex({ duration: 400, easing: 'ease', effect: 'SlideDown' }, MenuAnimationSettings)\n ], MenuBase.prototype, \"animationSettings\", void 0);\n MenuBase = __decorate([\n NotifyPropertyChanges\n ], MenuBase);\n return MenuBase;\n}(Component));\nexport { MenuBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/triple-slash-reference */\n/// \nimport { attributes, getUniqueID, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { getZindexPartial } from '@syncfusion/ej2-popups';\nimport { MenuBase, MenuItem } from '../common/menu-base';\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n *
    \n *
      \n * ```\n * ```typescript\n * \n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n __extends(ContextMenu, _super);\n /**\n * Constructor for creating the widget.\n *\n * @private\n * @param {ContextMenuModel} options - Specifies the context menu model\n * @param {string} element - Specifies the element\n */\n function ContextMenu(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * For internal use only - prerender processing.\n *\n * @private\n * @returns {void}\n */\n ContextMenu.prototype.preRender = function () {\n this.isMenu = false;\n this.element.id = this.element.id || getUniqueID('ej2-contextmenu');\n _super.prototype.preRender.call(this);\n };\n ContextMenu.prototype.initialize = function () {\n _super.prototype.initialize.call(this);\n attributes(this.element, { 'role': 'menubar', 'tabindex': '0' });\n this.element.style.zIndex = getZindexPartial(this.element).toString();\n };\n /**\n * This method is used to open the ContextMenu in specified position.\n *\n * @param {number} top - To specify ContextMenu vertical positioning.\n * @param {number} left - To specify ContextMenu horizontal positioning.\n * @param {HTMLElement} target - To calculate z-index for ContextMenu based upon the specified target.\n * @function open\n * @returns {void}\n */\n ContextMenu.prototype.open = function (top, left, target) {\n _super.prototype.openMenu.call(this, null, null, top, left, null, target);\n };\n /**\n * Closes the ContextMenu if it is opened.\n *\n * @function close\n * @returns {void}\n */\n ContextMenu.prototype.close = function () {\n _super.prototype.closeMenu.call(this);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {ContextMenuModel} newProp - Specifies new properties\n * @param {ContextMenuModel} oldProp - Specifies old properties\n * @returns {void}\n */\n ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'filter':\n this.close();\n this.filter = newProp.filter;\n break;\n case 'target':\n this.unWireEvents(oldProp.target);\n this.wireEvents();\n break;\n }\n }\n };\n /**\n * Get module name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ContextMenu.prototype.getModuleName = function () {\n return 'contextmenu';\n };\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"target\", void 0);\n __decorate([\n Property('')\n ], ContextMenu.prototype, \"filter\", void 0);\n __decorate([\n Collection([], MenuItem)\n ], ContextMenu.prototype, \"items\", void 0);\n ContextMenu = __decorate([\n NotifyPropertyChanges\n ], ContextMenu);\n return ContextMenu;\n}(MenuBase));\nexport { ContextMenu };\n","import { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { isNullOrUndefined, L10n, classList, Browser } from '@syncfusion/ej2-base';\nimport { FieldElementBox, TextFormField, CheckBoxFormField, DropDownFormField, ContentControl } from './viewer/page';\nimport { HelperMethods } from './editor/editor-helper';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { createElement } from '@syncfusion/ej2-base';\nvar CONTEXTMENU_LOCK = '_contextmenu_lock';\nvar CONTEXTMENU_UNLOCK = '_contextmenu_unlock';\nvar CONTEXTMENU_COPY = '_contextmenu_copy';\nvar CONTEXTMENU_CUT = '_contextmenu_cut';\nvar CONTEXTMENU_PASTE = '_contextmenu_paste';\nvar CONTEXTMENU_ADD_COMMENT = '_add_comment';\nvar CONTEXTMENU_UPDATE_FIELD = '_contextmenu_update_field';\nvar CONTEXTMENU_EDIT_FIELD = '_contextmenu_edit_field';\nvar CONTEXTMENU_HYPERLINK = '_contextmenu_hyperlink';\nvar CONTEXTMENU_OPEN_HYPERLINK = '_contextmenu_open_hyperlink';\nvar CONTEXTMENU_COPY_HYPERLINK = '_contextmenu_copy_hyperlink';\nvar CONTEXTMENU_REMOVE_HYPERLINK = '_contextmenu_remove_hyperlink';\nvar CONTEXTMENU_PROPERTIES = '_properties';\nvar CONTEXTMENU_EDIT_HYPERLINK = '_contextmenu_edit_hyperlink';\nvar CONTEXTMENU_FONT_DIALOG = '_contextmenu_font_dialog';\nvar CONTEXTMENU_PARAGRAPH = '_contextmenu_paragraph_dialog';\nvar CONTEXTMENU_TABLE = '_contextmenu_table_dialog';\nvar CONTEXTMENU_INSERT_TABLE = '_contextmenu_insert_table';\nvar CONTEXTMENU_DELETE_TABLE = '_contextmenu_delete_table';\nvar CONTEXTMENU_INSERT_ABOVE = '_contextmenu_insert_above';\nvar CONTEXTMENU_INSERT_BELOW = '_contextmenu_insert_below';\nvar CONTEXTMENU_INSERT_RIGHT = '_contextmenu_insert_right';\nvar CONTEXTMENU_INSERT_LEFT = '_contextmenu_insert_left';\nvar CONTEXTMENU_COMPLETE_DELETE_TABLE = '_contextmenu_complete_table_delete';\nvar CONTEXTMENU_DELETE_ROW = '_contextmenu_delete_row';\nvar CONTEXTMENU_DELETE_COLUMN = '_contextmenu_delete_column';\nvar CONTEXTMENU_MERGE_CELL = '_contextmenu_merge_cell';\nvar CONTEXTMENU_AUTO_FIT = '_contextmenu_auto_fit';\nvar CONTEXTMENU_AUTO_FIT_TO_CONTENTS = '_contextmenu_auto_fit_contents';\nvar CONTEXTMENU_AUTO_FIT_TO_WINDOW = '_contextmenu_auto_fit_window';\nvar CONTEXTMENU_FIXED_COLUMN_WIDTH = '_contextmenu_fixed_column_width';\nvar CONTEXTMENU_CONTINUE_NUMBERING = '_contextmenu_continue_numbering';\nvar CONTEXTMENU_RESTART_AT = '_contextmenu_restart_at';\nvar CONTEXTMENU_SPELLING_DIALOG = '_contextmenu_spelling_dialog';\nvar CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS = '_contextmenu_otherSuggestions_spellcheck_';\nvar CONTEXTMENU_NO_SUGGESTION = '_contextmenu_no_suggestion';\nvar CONTEXTMENU_ACCEPT_CHANGES = '_contextmenu_accept_changes';\nvar CONTEXTMENU_REJECT_CHANGES = '_contextmenu_reject_changes';\nvar CONTEXTMENU_NOTE_OPTIONS = '_contextmenu_note_options';\nvar CONTEXTMENU_REMOVE_CONTENT_CONTROL = '_remove_content_control';\nvar CONTEXTMENU_CONTENT_CONTROL_PROPERTIES = '_content_control_properties';\n/**\n * Context Menu class\n */\nvar ContextMenu = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ContextMenu(documentHelper) {\n var _this = this;\n /**\n * @private\n */\n this.contextMenuInstance = undefined;\n /**\n * @private\n */\n this.menuItems = [];\n /**\n * @private\n */\n this.customMenuItems = [];\n /**\n * @private\n */\n this.ids = [];\n this.spellContextItems = [];\n this.customItems = [];\n /**\n * Handles on context menu key pressed.\n * @param {MouseEvent} event\n * @private\n */\n this.onContextMenuInternal = function (event) {\n var isTouch = !(event instanceof MouseEvent);\n if (_this.documentHelper.owner.isSpellCheck && _this.spellChecker.allowSpellCheckAndSuggestion) {\n event.preventDefault();\n _this.currentContextInfo = _this.spellChecker.findCurretText();\n var splittedSuggestion_1;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var allSuggestions_1;\n var exactData_1 = _this.spellChecker.manageSpecialCharacters(_this.currentContextInfo.text, undefined, true);\n if (!isNullOrUndefined(exactData_1) && _this.spellChecker.errorWordCollection.containsKey(exactData_1)) {\n _this.spellChecker.currentContextInfo = _this.currentContextInfo;\n if (_this.spellChecker.errorSuggestions.containsKey(exactData_1)) {\n allSuggestions_1 = _this.spellChecker.errorSuggestions.get(exactData_1).slice();\n splittedSuggestion_1 = _this.spellChecker.handleSuggestions(allSuggestions_1);\n _this.processSuggestions(allSuggestions_1, splittedSuggestion_1, isTouch ? event : event);\n }\n else {\n if (_this.spellChecker.enableOptimizedSpellCheck) {\n _this.spellChecker.callSpellChecker(_this.spellChecker.languageID, exactData_1, false, true, false, false).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n allSuggestions_1 = jsonObject.Suggestions;\n if (!isNullOrUndefined(allSuggestions_1)) {\n _this.spellChecker.errorSuggestions.add(exactData_1, allSuggestions_1.slice());\n splittedSuggestion_1 = _this.spellChecker.handleSuggestions(allSuggestions_1);\n }\n _this.processSuggestions(allSuggestions_1, splittedSuggestion_1, isTouch ? event : event);\n });\n }\n else {\n _this.processSuggestions(allSuggestions_1, splittedSuggestion_1, isTouch ? event : event);\n }\n }\n }\n else {\n _this.hideSpellContextItems();\n _this.showContextMenuOnSel(isTouch ? event : event);\n }\n }\n else {\n _this.hideSpellContextItems();\n _this.showContextMenuOnSel(isTouch ? event : event);\n }\n };\n if (!isNullOrUndefined(documentHelper)) {\n this.documentHelper = documentHelper;\n this.locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.locale.setLocale(this.documentHelper.owner.locale);\n this.initContextMenu(this.locale, this.documentHelper.owner.enableRtl);\n }\n }\n Object.defineProperty(ContextMenu.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ContextMenu.prototype, \"spellChecker\", {\n get: function () {\n return this.documentHelper.owner.spellCheckerModule;\n },\n enumerable: true,\n configurable: true\n });\n ContextMenu.prototype.getModuleName = function () {\n return 'ContextMenu';\n };\n /**\n * Initialize context menu.\n *\n * @param localValue Localize value.\n * @private\n */\n /* eslint-disable */\n ContextMenu.prototype.initContextMenu = function (localValue, isRtl) {\n var _this = this;\n var id = this.documentHelper.owner.element.id;\n this.contextMenu = document.createElement('div');\n this.contextMenu.id = this.documentHelper.owner.containerId + 'e-de-contextmenu';\n document.body.appendChild(this.contextMenu);\n var ul = document.createElement('ul');\n ul.contentEditable = 'false';\n ul.style.width = 'auto';\n ul.id = this.documentHelper.owner.containerId + 'e-de-contextmenu-list';\n ul.style.listStyle = 'none';\n ul.style.margin = '0px';\n ul.style.maxHeight = 'auto';\n ul.oncontextmenu = this.disableBrowserContextmenu;\n this.contextMenu.appendChild(ul);\n this.menuItems = [\n {\n text: localValue.getConstant('Lock'),\n iconCss: 'e-icons e-de-ctnr-lock',\n id: id + CONTEXTMENU_LOCK\n },\n {\n text: localValue.getConstant('Unlock'),\n iconCss: 'e-icons',\n id: id + CONTEXTMENU_UNLOCK\n },\n {\n text: localValue.getConstant('Cut'),\n iconCss: 'e-icons e-de-cut',\n id: id + CONTEXTMENU_CUT\n },\n {\n text: localValue.getConstant('Copy'),\n iconCss: 'e-icons e-de-copy',\n id: id + CONTEXTMENU_COPY\n },\n {\n text: localValue.getConstant('Paste'),\n iconCss: 'e-icons e-de-paste',\n id: id + CONTEXTMENU_PASTE\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Remove Content Control'),\n iconCss: 'e-icons',\n id: id + CONTEXTMENU_REMOVE_CONTENT_CONTROL\n },\n {\n text: localValue.getConstant('Content Control Properties'),\n iconCss: 'e-icons e-de-formproperties',\n id: id + CONTEXTMENU_CONTENT_CONTROL_PROPERTIES\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('New Comment'),\n iconCss: 'e-icons e-de-cmt-add',\n id: id + CONTEXTMENU_ADD_COMMENT\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Accept Changes'),\n iconCss: 'e-icons e-de-acceptchange',\n id: id + CONTEXTMENU_ACCEPT_CHANGES\n },\n {\n text: localValue.getConstant('Reject Changes'),\n iconCss: 'e-icons e-de-rejectchange',\n id: id + CONTEXTMENU_REJECT_CHANGES\n },\n {\n text: localValue.getConstant('Update Field'),\n iconCss: 'e-icons e-de-update-field',\n id: id + CONTEXTMENU_UPDATE_FIELD\n },\n {\n text: localValue.getConstant('Edit Field') + '...',\n iconCss: 'e-icons e-de-edit_field',\n id: id + CONTEXTMENU_EDIT_FIELD\n },\n {\n text: localValue.getConstant('Continue Numbering'),\n iconCss: 'e-icons e-de-continue-numbering',\n id: id + CONTEXTMENU_CONTINUE_NUMBERING\n },\n {\n text: localValue.getConstant('Restart At') + ' 1',\n iconCss: 'e-icons e-de-restart-at',\n id: id + CONTEXTMENU_RESTART_AT\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Hyperlink') + '...',\n iconCss: 'e-icons e-de-insertlink',\n id: id + CONTEXTMENU_HYPERLINK\n },\n {\n text: localValue.getConstant('Edit Hyperlink') + '...',\n iconCss: 'e-icons e-de-edit-hyperlink',\n id: id + CONTEXTMENU_EDIT_HYPERLINK\n },\n {\n text: localValue.getConstant('Open Hyperlink'),\n iconCss: 'e-icons e-de-open-hyperlink',\n id: id + CONTEXTMENU_OPEN_HYPERLINK\n },\n {\n text: localValue.getConstant('Copy Hyperlink'),\n iconCss: 'e-icons e-de-copy-hyperlink',\n id: id + CONTEXTMENU_COPY_HYPERLINK\n },\n {\n text: localValue.getConstant('Remove Hyperlink'),\n iconCss: 'e-icons e-de-remove-hyperlink',\n id: id + CONTEXTMENU_REMOVE_HYPERLINK\n },\n {\n text: localValue.getConstant('Properties'),\n iconCss: 'e-icons e-de-formproperties',\n id: id + CONTEXTMENU_PROPERTIES\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Font') + '...',\n iconCss: 'e-icons e-de-fonts',\n id: id + CONTEXTMENU_FONT_DIALOG\n },\n {\n text: localValue.getConstant('Paragraph') + '...',\n iconCss: 'e-icons e-de-paragraph',\n id: id + CONTEXTMENU_PARAGRAPH\n },\n {\n text: localValue.getConstant('Notes Options') + '...',\n id: id + CONTEXTMENU_NOTE_OPTIONS\n },\n {\n separator: true\n },\n {\n text: localValue.getConstant('Table Properties') + '...',\n id: id + CONTEXTMENU_TABLE,\n iconCss: 'e-icons e-de-table'\n },\n {\n text: localValue.getConstant('Merge Cells'),\n id: id + CONTEXTMENU_MERGE_CELL,\n iconCss: 'e-icons e-de-ctnr-mergecell'\n },\n {\n text: localValue.getConstant('AutoFit'),\n id: id + CONTEXTMENU_AUTO_FIT,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('AutoFit to Contents'),\n id: id + CONTEXTMENU_AUTO_FIT_TO_CONTENTS,\n iconCss: 'e-icons e-de-icon-autofit e-de-autofit-contents'\n },\n {\n text: localValue.getConstant('AutoFit to Window'),\n id: id + CONTEXTMENU_AUTO_FIT_TO_WINDOW,\n iconCss: 'e-icons e-de-icon-auto-fitwindow e-de-autofit-window'\n },\n {\n text: localValue.getConstant('Fixed Column Width'),\n id: id + CONTEXTMENU_FIXED_COLUMN_WIDTH,\n iconCss: 'e-icons e-de-icon-fixed-columnwidth e-de-fixed-column'\n }\n ]\n },\n {\n text: localValue.getConstant('Insert'),\n id: id + CONTEXTMENU_INSERT_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Insert Above'),\n id: id + CONTEXTMENU_INSERT_ABOVE,\n iconCss: 'e-icons e-de-insertabove'\n },\n {\n text: localValue.getConstant('Insert Below'),\n id: id + CONTEXTMENU_INSERT_BELOW,\n iconCss: 'e-icons e-de-insertbelow'\n },\n {\n text: localValue.getConstant('Insert Left'),\n id: id + CONTEXTMENU_INSERT_LEFT,\n iconCss: 'e-icons e-de-insertleft'\n },\n {\n text: localValue.getConstant('Insert Right'),\n id: id + CONTEXTMENU_INSERT_RIGHT,\n iconCss: 'e-icons e-de-insertright'\n }\n ]\n },\n {\n text: localValue.getConstant('Delete'),\n id: id + CONTEXTMENU_DELETE_TABLE,\n iconCss: 'e-icons',\n items: [\n {\n text: localValue.getConstant('Delete Table'),\n id: id + CONTEXTMENU_COMPLETE_DELETE_TABLE,\n iconCss: 'e-icons e-de-delete-table'\n },\n {\n text: localValue.getConstant('Delete Row'),\n id: id + CONTEXTMENU_DELETE_ROW,\n iconCss: 'e-icons e-de-deleterow'\n },\n {\n text: localValue.getConstant('Delete Column'),\n id: id + CONTEXTMENU_DELETE_COLUMN,\n iconCss: 'e-icons e-de-deletecolumn'\n }\n ]\n },\n ];\n var menuOptions = {\n target: '#' + this.documentHelper.owner.containerId + 'e-de-contextmenu',\n enableRtl: isRtl,\n items: this.addMenuItems(this.menuItems),\n cssClass: 'e-de-contextmenu-wrapper',\n select: function (args) {\n var item = args.element.id;\n _this.handleContextMenuItem(item);\n },\n };\n this.contextMenuInstance = new Menu(menuOptions, '#' + this.documentHelper.owner.containerId + 'e-de-contextmenu-list');\n this.contextMenuInstance.beforeOpen = function () {\n for (var index = 0; index < _this.customMenuItems.length; index++) {\n if (typeof _this.customMenuItems[index].id !== 'undefined') {\n _this.ids[index] = _this.customMenuItems[index].id;\n }\n else {\n _this.ids[index] = _this.customMenuItems[index + 1].id;\n }\n }\n _this.documentHelper.owner.fireCustomContextMenuBeforeOpen(_this.ids);\n if (_this.enableCustomContextMenu) {\n for (var index = 0; index < _this.menuItems.length; index++) {\n if (typeof _this.menuItems[index].id !== 'undefined') {\n document.getElementById(_this.menuItems[index].id).style.display = 'none';\n }\n else {\n document.getElementById(_this.menuItems[index - 1].id).nextSibling.style.display = 'none';\n }\n }\n }\n if (_this.viewer && _this.documentHelper.selection) {\n classList(_this.documentHelper.selection.caret, [], ['e-de-cursor-animation']);\n _this.documentHelper.selection.showCaret();\n }\n };\n if (!isNullOrUndefined(this.documentHelper.owner.documentEditorSettings.popupTarget)) {\n this.documentHelper.owner.documentEditorSettings.popupTarget.append(document.getElementsByClassName('e-de-contextmenu-wrapper')[0]);\n }\n this.contextMenuInstance.onClose = function () {\n if (_this.viewer && _this.documentHelper.selection) {\n classList(_this.documentHelper.selection.caret, ['e-de-cursor-animation'], []);\n if (id + CONTEXTMENU_FONT_DIALOG !== _this.itemsmenu && id + CONTEXTMENU_HYPERLINK !== _this.itemsmenu && id + CONTEXTMENU_TABLE !== _this.itemsmenu && id + CONTEXTMENU_PARAGRAPH !== _this.itemsmenu) {\n _this.documentHelper.updateFocus();\n }\n }\n };\n };\n /**\n * Disable browser context menu.\n */\n ContextMenu.prototype.disableBrowserContextmenu = function () {\n return false;\n };\n /**\n * paste Dialog box.\n */\n ContextMenu.prototype.openPasteDialog = function () {\n var _this = this;\n var container = createElement('div');\n var contentDiv = createElement('div');\n var contentValue = createElement('p');\n var contentDialog = this.locale.getConstant('Paste Content Dialog');\n if (this.documentHelper.isIosDevice) {\n contentValue.textContent = contentDialog + \" Command + V.\";\n }\n else {\n contentValue.textContent = contentDialog + \" Ctrl + V.\";\n }\n contentDiv.appendChild(contentValue);\n container.appendChild(contentDiv);\n var contentWithBookMark = createElement('div');\n this.pasteCheckBoxDialog = createElement('input', { attrs: { type: 'checkbox' } });\n contentWithBookMark.appendChild(this.pasteCheckBoxDialog);\n var bookmarkCheckbox = new CheckBox({ label: this.locale.getConstant('Paste Content CheckBox') });\n bookmarkCheckbox.appendTo(this.pasteCheckBoxDialog);\n container.appendChild(contentWithBookMark);\n var getDialogBox = JSON.parse(localStorage.getItem(\"ej_de_hidePasteAlert\"));\n if (!getDialogBox) {\n var dialogUtility = DialogUtility.alert({\n title: this.locale.getConstant('Information'),\n content: container,\n okButton: { text: this.locale.getConstant('Ok') },\n showCloseIcon: true,\n closeOnEscape: true,\n animationSettings: { effect: 'Zoom' },\n close: function () {\n if (_this.pasteCheckBoxDialog.checked) {\n localStorage.setItem(\"ej_de_hidePasteAlert\", \"true\");\n }\n }\n });\n }\n };\n /**\n * Handles context menu items.\n * @param {string} item Specifies which item is selected.\n * @private\n */\n ContextMenu.prototype.handleContextMenuItem = function (item) {\n var id = this.documentHelper.owner.element.id;\n this.itemsmenu = item;\n switch (item) {\n case id + CONTEXTMENU_LOCK:\n if (this.documentHelper.owner.collaborativeEditingModule) {\n this.documentHelper.owner.collaborativeEditingModule.lockContent(this.documentHelper.owner.currentUser);\n }\n break;\n case id + CONTEXTMENU_UNLOCK:\n if (this.documentHelper.owner.collaborativeEditingModule) {\n this.documentHelper.owner.collaborativeEditingModule.unlockContent(this.documentHelper.owner.currentUser);\n }\n break;\n case id + CONTEXTMENU_COPY:\n this.documentHelper.selection.copy();\n break;\n case id + CONTEXTMENU_CUT:\n this.documentHelper.owner.editorModule.cut();\n break;\n case id + CONTEXTMENU_PASTE:\n if (!this.documentHelper.owner.isReadOnlyMode) {\n if (this.documentHelper.owner.enableLocalPaste) {\n this.documentHelper.owner.editorModule.pasteInternal(undefined);\n }\n else {\n this.openPasteDialog();\n }\n }\n break;\n case id + CONTEXTMENU_ADD_COMMENT:\n if (!this.documentHelper.owner.isReadOnlyMode || this.documentHelper.isCommentOnlyMode) {\n this.documentHelper.owner.editorModule.isUserInsert = true;\n this.documentHelper.owner.editorModule.insertComment();\n this.documentHelper.owner.editorModule.isUserInsert = false;\n }\n break;\n case id + CONTEXTMENU_UPDATE_FIELD:\n var isReadOnly = this.documentHelper.owner.isReadOnlyMode;\n if (this.documentHelper.selection.isReferenceField() && (!isReadOnly ||\n (isReadOnly && this.documentHelper.protectionType === 'FormFieldsOnly'))) {\n this.documentHelper.selection.updateRefField();\n }\n else if (!this.documentHelper.owner.isReadOnlyMode) {\n this.documentHelper.owner.editorModule.updateToc();\n }\n break;\n case id + CONTEXTMENU_EDIT_FIELD:\n if (!this.documentHelper.owner.isReadOnlyMode) {\n this.documentHelper.owner.tableOfContentsDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_FONT_DIALOG:\n if (this.documentHelper.owner.fontDialogModule) {\n this.documentHelper.owner.fontDialogModule.showFontDialog();\n }\n break;\n case id + CONTEXTMENU_REMOVE_CONTENT_CONTROL:\n if (!isNullOrUndefined(this.documentHelper.selection) && this.documentHelper.selection.checkContentControlLocked) {\n this.documentHelper.owner.editor.removeContentControl();\n }\n break;\n case id + CONTEXTMENU_CONTENT_CONTROL_PROPERTIES:\n if (!isNullOrUndefined(this.documentHelper.selection) && this.documentHelper.selection.checkContentControlLocked && this.documentHelper.owner.contentControlPropertiesDialogModule) {\n this.documentHelper.owner.contentControlPropertiesDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_OPEN_HYPERLINK:\n this.documentHelper.selection.navigateHyperlink();\n break;\n case id + CONTEXTMENU_COPY_HYPERLINK:\n this.documentHelper.selection.copyHyperlink();\n break;\n case id + CONTEXTMENU_EDIT_HYPERLINK:\n case id + CONTEXTMENU_HYPERLINK:\n if (this.documentHelper.owner.hyperlinkDialogModule) {\n this.documentHelper.owner.hyperlinkDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_REMOVE_HYPERLINK:\n this.documentHelper.owner.editorModule.removeHyperlink();\n break;\n case id + CONTEXTMENU_PARAGRAPH:\n if (this.documentHelper.owner.paragraphDialogModule) {\n this.documentHelper.owner.paragraphDialogModule.show();\n }\n break;\n case id + CONTEXTMENU_TABLE:\n this.documentHelper.owner.tablePropertiesDialogModule.show();\n break;\n case id + CONTEXTMENU_MERGE_CELL:\n this.documentHelper.owner.editorModule.mergeCells();\n break;\n case id + CONTEXTMENU_INSERT_ABOVE:\n this.documentHelper.owner.editorModule.insertRow(true);\n break;\n case id + CONTEXTMENU_INSERT_BELOW:\n this.documentHelper.owner.editorModule.insertRow(false);\n break;\n case id + CONTEXTMENU_INSERT_LEFT:\n this.documentHelper.owner.editorModule.insertColumn(true);\n break;\n case id + CONTEXTMENU_INSERT_RIGHT:\n this.documentHelper.owner.editorModule.insertColumn(false);\n break;\n case id + CONTEXTMENU_COMPLETE_DELETE_TABLE:\n this.documentHelper.owner.editorModule.deleteTable();\n break;\n case id + CONTEXTMENU_DELETE_ROW:\n this.documentHelper.owner.editorModule.deleteRow();\n break;\n case id + CONTEXTMENU_DELETE_COLUMN:\n this.documentHelper.owner.editorModule.deleteColumn();\n break;\n case id + CONTEXTMENU_CONTINUE_NUMBERING:\n this.documentHelper.owner.editorModule.applyContinueNumbering();\n break;\n case id + CONTEXTMENU_RESTART_AT:\n this.documentHelper.owner.editorModule.applyRestartNumbering(this.documentHelper.selection);\n break;\n case id + CONTEXTMENU_AUTO_FIT_TO_CONTENTS:\n this.documentHelper.owner.editorModule.autoFitTable('FitToContents');\n break;\n case id + CONTEXTMENU_AUTO_FIT_TO_WINDOW:\n this.documentHelper.owner.editorModule.autoFitTable('FitToWindow');\n break;\n case id + CONTEXTMENU_FIXED_COLUMN_WIDTH:\n this.documentHelper.owner.editorModule.autoFitTable('FixedColumnWidth');\n break;\n case id + CONTEXTMENU_SPELLING_DIALOG:\n var contextInfo = this.spellChecker.retriveText();\n this.currentContextInfo = null;\n this.documentHelper.owner.spellCheckDialogModule.show(contextInfo.text, contextInfo.element);\n break;\n case id + CONTEXTMENU_ACCEPT_CHANGES:\n this.documentHelper.selection.handleAcceptReject(true);\n break;\n case id + CONTEXTMENU_REJECT_CHANGES:\n this.documentHelper.selection.handleAcceptReject(false);\n break;\n case id + CONTEXTMENU_PROPERTIES:\n var inline = this.documentHelper.selection.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n if (inline.formFieldData instanceof TextFormField) {\n this.documentHelper.owner.textFormFieldDialogModule.show();\n }\n else if (inline.formFieldData instanceof CheckBoxFormField) {\n this.documentHelper.owner.checkBoxFormFieldDialogModule.show();\n }\n else if (inline.formFieldData instanceof DropDownFormField) {\n this.documentHelper.owner.dropDownFormFieldDialogModule.show();\n }\n }\n break;\n case id + CONTEXTMENU_NOTE_OPTIONS:\n this.documentHelper.owner.showFootNotesDialog();\n break;\n default:\n var expectedData = this.documentHelper.owner.element.id + CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS;\n if (item.substring(0, expectedData.length) === expectedData) {\n var content = item.substring(item.lastIndexOf('_') + 1);\n this.callSelectedOption(content);\n break;\n }\n else {\n // fires customContextMenuSelect while selecting the added custom menu item\n this.documentHelper.owner.fireCustomContextMenuSelect(item);\n break;\n }\n }\n };\n /**\n * Method to call the selected item\n * @param {string} content\n */\n ContextMenu.prototype.callSelectedOption = function (content) {\n if (content === 'Add to Dictionary') {\n this.spellChecker.handleAddToDictionary();\n }\n else if (content === 'Ignore All') {\n this.spellChecker.handleIgnoreAllItems();\n }\n else {\n this.spellChecker.manageReplace(content);\n }\n };\n /**\n * To add and customize custom context menu\n * @param {MenuItemModel[]} items - To add custom menu item\n * @param {boolean} isEnable - To hide existing menu item and show custom menu item alone\n * @param {boolean} isBottom - To show the custom menu item in bottom of the existing item\n * @returns {void}\n */\n ContextMenu.prototype.addCustomMenu = function (items, isEnable, isBottom) {\n var menuItems = JSON.parse(HelperMethods.sanitizeString(JSON.stringify(items)));\n this.destroy();\n if (this.spellContextItems.length === 0) {\n this.customItems = items;\n }\n for (var index = 0; index < menuItems.length; index++) {\n this.customMenuItems.push(menuItems[index]);\n this.customMenuItems[index].id = this.documentHelper.owner.element.id + this.customMenuItems[index].id;\n }\n this.enableCustomContextMenu = isEnable;\n this.enableCustomContextMenuBottom = isBottom;\n this.initContextMenu(this.locale);\n };\n /**\n * Context Menu Items.\n * @param {MenuItemModel[]} menuItems - To add MenuItem to context menu\n * @private\n */\n ContextMenu.prototype.addMenuItems = function (menuItems) {\n if (this.enableCustomContextMenuBottom) {\n return menuItems.concat(this.customMenuItems);\n }\n else {\n return this.customMenuItems.concat(menuItems);\n }\n };\n /**\n * Opens context menu.\n * @param {MouseEvent | TouchEvent} event\n */\n ContextMenu.prototype.showContextMenuOnSel = function (event) {\n var isTouch = !(event instanceof MouseEvent);\n var xPos = 0;\n var yPos = 0;\n if (isTouch) {\n var point = this.documentHelper.getTouchOffsetValue(event);\n xPos = point.x;\n yPos = point.y;\n }\n else {\n yPos = ((Browser.isIE) ? event.clientY : event.y) + document.body.scrollTop + document.documentElement.scrollTop;\n xPos = ((Browser.isIE) ? event.clientX : event.x) + document.body.scrollLeft + document.documentElement.scrollLeft;\n }\n if (this.showHideElements(this.documentHelper.selection)) {\n if (isTouch) {\n this.documentHelper.isMouseDown = false;\n }\n this.contextMenuInstance.open(yPos, xPos);\n event.preventDefault();\n }\n };\n /**\n * Method to hide spell context items\n */\n ContextMenu.prototype.hideSpellContextItems = function () {\n if (this.spellContextItems.length > 0) {\n for (var i = 0; i < this.spellContextItems.length; i++) {\n var item = document.getElementById(this.documentHelper.owner.element.id + this.spellContextItems[i].id);\n if (!isNullOrUndefined(item)) {\n item.style.display = 'none';\n }\n }\n }\n };\n /**\n * Method to process suggestions to add in context menu\n * @param {any} allSuggestions\n * @param {string[]} splittedSuggestion\n * @param {MouseEvent} event\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ContextMenu.prototype.processSuggestions = function (allSuggestions, splittedSuggestion, event) {\n this.spellContextItems = this.constructContextmenu(allSuggestions, splittedSuggestion);\n this.addCustomMenu(this.spellContextItems);\n this.noSuggestion = document.getElementById(this.documentHelper.owner.element.id + CONTEXTMENU_NO_SUGGESTION);\n if (!isNullOrUndefined(this.noSuggestion)) {\n this.noSuggestion.style.display = 'block';\n classList(this.noSuggestion, ['e-disabled'], ['e-focused']);\n }\n this.showContextMenuOnSel(event);\n };\n /**\n * Method to add inline menu\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ContextMenu.prototype.constructContextmenu = function (allSuggestion, splittedSuggestion) {\n var contextMenuItems = this.customItems.length > 0 ? this.customItems.slice() : [];\n // classList(this.noSuggestion,['e-disabled'],[]);\n if (isNullOrUndefined(allSuggestion) || allSuggestion.length === 0) {\n contextMenuItems.push({ text: this.locale.getConstant('no suggestions'), id: CONTEXTMENU_NO_SUGGESTION, classList: ['e-focused'], iconCss: '' });\n }\n else {\n for (var i = 0; i < allSuggestion.length; i++) {\n contextMenuItems.push({ text: allSuggestion[i], id: CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS + allSuggestion[i], iconCss: '' });\n }\n }\n contextMenuItems.push({ separator: true, id: '_contextmenu_suggestion_separator' });\n if (!isNullOrUndefined(splittedSuggestion) && splittedSuggestion.length > 1) {\n contextMenuItems.push({ text: this.locale.getConstant('More Suggestion'), items: splittedSuggestion });\n contextMenuItems.push({ separator: true, id: '_contextmenu_moreSuggestion_separator' });\n }\n else {\n contextMenuItems.push({ text: this.locale.getConstant('Add to Dictionary'), id: '_contextmenu_otherSuggestions_spellcheck_Add to Dictionary', iconCss: '' });\n }\n contextMenuItems.push({ text: this.locale.getConstant('Ignore Once'), id: '_contextmenu_otherSuggestions_spellcheck_Ignore Once', iconCss: '' });\n contextMenuItems.push({ text: this.locale.getConstant('Ignore All'), id: '_contextmenu_otherSuggestions_spellcheck_Ignore All', iconCss: '' });\n contextMenuItems.push({ separator: true, id: '_contextmenu_change_separator' });\n contextMenuItems.push({ text: this.locale.getConstant('Spelling'), id: CONTEXTMENU_SPELLING_DIALOG, iconCss: 'e-icons e-de-spellcheck', items: [] });\n contextMenuItems.push({ separator: true, id: '_contextmenu_spelling_separator' });\n return contextMenuItems;\n };\n ContextMenu.prototype.showHideElements = function (selection) {\n if (isNullOrUndefined(selection)) {\n return false;\n }\n selection.hideToolTip();\n var owner = this.documentHelper.owner;\n var id = owner.element.id;\n var lock = document.getElementById(id + CONTEXTMENU_LOCK);\n var unlock = document.getElementById(id + CONTEXTMENU_UNLOCK);\n var copy = document.getElementById(id + CONTEXTMENU_COPY);\n var cut = document.getElementById(id + CONTEXTMENU_CUT);\n var paste = document.getElementById(id + CONTEXTMENU_PASTE);\n var updateField = document.getElementById(id + CONTEXTMENU_UPDATE_FIELD);\n var editField = document.getElementById(id + CONTEXTMENU_EDIT_FIELD);\n var font = document.getElementById(id + CONTEXTMENU_FONT_DIALOG);\n var paragraph = document.getElementById(id + CONTEXTMENU_PARAGRAPH);\n var tableProperties = document.getElementById(id + CONTEXTMENU_TABLE);\n var insertTable = document.getElementById(id + CONTEXTMENU_INSERT_TABLE);\n var deleteTable = document.getElementById(id + CONTEXTMENU_DELETE_TABLE);\n var mergeCells = document.getElementById(id + CONTEXTMENU_MERGE_CELL);\n var hyperlink = document.getElementById(id + CONTEXTMENU_HYPERLINK);\n var openHyperlink = document.getElementById(id + CONTEXTMENU_OPEN_HYPERLINK);\n var editHyperlink = document.getElementById(id + CONTEXTMENU_EDIT_HYPERLINK);\n var copyHyperlink = document.getElementById(id + CONTEXTMENU_COPY_HYPERLINK);\n var removeHyperlink = document.getElementById(id + CONTEXTMENU_REMOVE_HYPERLINK);\n var properties = document.getElementById(id + CONTEXTMENU_PROPERTIES);\n var continueNumbering = document.getElementById(id + CONTEXTMENU_CONTINUE_NUMBERING);\n var restartAt = document.getElementById(id + CONTEXTMENU_RESTART_AT);\n var autoFitTable = document.getElementById(id + CONTEXTMENU_AUTO_FIT);\n var addComment = document.getElementById(id + CONTEXTMENU_ADD_COMMENT);\n var editNoteoptions = document.getElementById(id + CONTEXTMENU_NOTE_OPTIONS);\n var removeContentControl = document.getElementById(id + CONTEXTMENU_REMOVE_CONTENT_CONTROL);\n var contentControlProperties = document.getElementById(id + CONTEXTMENU_CONTENT_CONTROL_PROPERTIES);\n if (!this.documentHelper.owner.enableLockAndEdit) {\n lock.style.display = 'none';\n unlock.style.display = 'none';\n }\n else {\n if (this.documentHelper.editRanges.containsKey(this.documentHelper.owner.currentUser)) {\n lock.style.display = 'none';\n unlock.style.display = 'block';\n if (this.documentHelper.selection.isSelectionInEditRegion()) {\n classList(unlock, ['e-blankicon'], ['e-disabled']);\n }\n else {\n classList(unlock, ['e-disabled', 'e-blankicon'], []);\n }\n }\n else {\n lock.style.display = 'block';\n if (this.documentHelper.owner.collaborativeEditingModule &&\n this.documentHelper.owner.collaborativeEditingModule.canLock()) {\n classList(unlock, ['e-disabled'], []);\n }\n else {\n classList(unlock, [], ['e-disabled']);\n }\n unlock.style.display = 'none';\n }\n }\n var isDialogHidden = false;\n cut.style.display = 'none';\n paste.style.display = 'none';\n paste.nextSibling.style.display = 'none';\n var acceptChange = document.getElementById(id + CONTEXTMENU_ACCEPT_CHANGES);\n var rejectChange = document.getElementById(id + CONTEXTMENU_REJECT_CHANGES);\n hyperlink.style.display = 'none';\n editNoteoptions.style.display = 'none';\n editNoteoptions.nextSibling.style.display = 'none';\n font.previousSibling.style.display = 'none';\n openHyperlink.style.display = 'none';\n copyHyperlink.style.display = 'none';\n editHyperlink.style.display = 'none';\n removeHyperlink.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n properties.style.display = 'none';\n mergeCells.style.display = 'none';\n autoFitTable.style.display = 'none';\n font.style.display = 'none';\n paragraph.style.display = 'none';\n removeContentControl.style.display = 'none';\n contentControlProperties.style.display = 'none';\n // (paragraph.nextSibling as HTMLElement).style.display = 'none';\n insertTable.style.display = 'none';\n deleteTable.style.display = 'none';\n tableProperties.style.display = 'none';\n updateField.style.display = 'none';\n var field = selection.getHyperlinkField();\n var isCrossRefField = false;\n acceptChange.style.display = 'none';\n rejectChange.style.display = 'none';\n var contentControl = this.documentHelper.owner.editor.getContentControl();\n var contentControlImage = this.documentHelper.owner.getImageContentControl();\n if ((!isNullOrUndefined(contentControl) && contentControl instanceof ContentControl && !contentControl.contentControlProperties.lockContentControl && !this.documentHelper.owner.isReadOnlyMode) || (contentControlImage instanceof ContentControl && !contentControlImage.contentControlProperties.lockContentControl && contentControlImage.contentControlProperties.type == 'Picture' && !this.documentHelper.owner.isReadOnlyMode)) {\n removeContentControl.style.display = 'block';\n }\n else {\n removeContentControl.style.display = 'none';\n }\n if ((!this.documentHelper.owner.isReadOnlyMode && !isNullOrUndefined(contentControl) && contentControl instanceof ContentControl) || (contentControlImage instanceof ContentControl && contentControlImage.contentControlProperties.type == 'Picture' && !this.documentHelper.owner.isReadOnlyMode)) {\n contentControlProperties.style.display = 'block';\n contentControlProperties.nextSibling.style.display = 'block';\n }\n else {\n contentControlProperties.style.display = 'none';\n contentControlProperties.nextSibling.style.display = 'none';\n }\n if (field instanceof FieldElementBox && selection.isReferenceField(field)) {\n isCrossRefField = true;\n }\n if (field instanceof FieldElementBox && isCrossRefField &&\n (this.documentHelper.protectionType === 'FormFieldsOnly' || !this.documentHelper.owner.isReadOnlyMode)) {\n updateField.style.display = 'block';\n }\n editField.style.display = 'none';\n continueNumbering.style.display = 'none';\n restartAt.style.display = 'none';\n restartAt.nextSibling.style.display = 'none';\n var isSelectionEmpty = selection.isEmpty;\n classList(cut, isSelectionEmpty ? ['e-disabled'] : [], !isSelectionEmpty ? ['e-disabled'] : []);\n classList(copy, isSelectionEmpty ? ['e-disabled'] : [], !isSelectionEmpty ? ['e-disabled'] : []);\n var isHideComment = this.documentHelper.owner.isReadOnlyMode || this.documentHelper.owner.enableHeaderAndFooter || !this.documentHelper.owner.enableComment;\n addComment.style.display = isHideComment ? 'none' : 'block';\n if (this.documentHelper.isCommentOnlyMode) {\n addComment.style.display = 'block';\n }\n addComment.nextSibling.style.display = isHideComment ? 'none' : 'block';\n if (owner.isReadOnlyMode) {\n if (!isNullOrUndefined(field) && field instanceof FieldElementBox) {\n openHyperlink.style.display = 'block';\n copyHyperlink.style.display = 'block';\n }\n return true;\n }\n if (this.viewer && this.documentHelper.owner && this.documentHelper.owner.commentReviewPane &&\n this.documentHelper.owner.commentReviewPane.commentPane.isEditMode) {\n classList(addComment, ['e-disabled'], []);\n }\n else {\n classList(addComment, [], ['e-disabled']);\n }\n acceptChange.previousSibling.style.display = 'none';\n cut.style.display = 'block';\n paste.style.display = 'block';\n paste.nextSibling.style.display = 'block';\n classList(insertTable, ['e-blankicon'], []);\n classList(deleteTable, ['e-blankicon'], []);\n classList(editField, ['e-blankicon'], []);\n classList(autoFitTable, ['e-blankicon'], []);\n if (!Browser.isIE) {\n var getDialogBox = JSON.parse(localStorage.getItem(\"ej_de_hidePasteAlert\"));\n if (getDialogBox) {\n var enablePaste = (owner.enableLocalPaste && !isNullOrUndefined(owner.editorModule.copiedData));\n classList(paste, enablePaste ? [] : ['e-disabled'], enablePaste ? ['e-disabled'] : []);\n }\n }\n if (selection.contextType === 'TableOfContents') {\n updateField.style.display = 'block';\n editField.style.display = 'block';\n }\n else {\n var start = selection.start;\n var end = selection.end;\n if (selection.contextType === 'List'\n && owner.selectionModule.getListLevel(start.paragraph).listLevelPattern !== 'Bullet') {\n continueNumbering.style.display = 'block';\n restartAt.style.display = 'block';\n restartAt.nextSibling.style.display = 'block';\n }\n var isCellOrRowSelected = start.paragraph.isInsideTable && (!end.paragraph.isInsideTable\n || start.paragraph.associatedCell !== end.paragraph.associatedCell\n || selection.isCellSelected(start.paragraph.associatedCell, start, end));\n if (isCellOrRowSelected) {\n hyperlink.classList.add('e-disabled');\n }\n else {\n if (hyperlink.classList.contains('e-disabled')) {\n hyperlink.classList.remove('e-disabled');\n }\n }\n if (field instanceof FieldElementBox && !isCrossRefField) {\n openHyperlink.style.display = 'block';\n if (!selection.isImageField()) {\n copyHyperlink.style.display = 'block';\n }\n if (owner.hyperlinkDialogModule) {\n editHyperlink.style.display = 'block';\n }\n removeHyperlink.style.display = 'block';\n removeHyperlink.nextSibling.style.display = 'block';\n isDialogHidden = true;\n properties.style.display = 'none';\n }\n else {\n if (owner.hyperlinkDialogModule) {\n hyperlink.style.display = 'block';\n font.previousSibling.style.display = 'block';\n isDialogHidden = true;\n }\n }\n if (selection.isFormField() && this.documentHelper.owner.enableFormField) {\n hyperlink.style.display = 'none';\n properties.style.display = 'block';\n }\n if (field instanceof FieldElementBox && isCrossRefField) {\n hyperlink.style.display = 'none';\n updateField.style.display = 'block';\n }\n }\n if (this.documentHelper.owner.selectionModule.start.paragraph.isInsideTable\n && this.documentHelper.owner.selectionModule.end.paragraph.isInsideTable) {\n if (owner.tablePropertiesDialogModule) {\n tableProperties.style.display = 'block';\n }\n insertTable.style.display = 'block';\n deleteTable.style.display = 'block';\n if (this.documentHelper.owner.editorModule.canMergeCells()) {\n mergeCells.style.display = 'block';\n }\n autoFitTable.style.display = this.documentHelper.selection.isTableSelected() ? 'block' : 'none';\n }\n if (this.documentHelper.owner.fontDialogModule) {\n font.style.display = 'block';\n }\n if (this.documentHelper.owner.paragraphDialogModule) {\n paragraph.style.display = 'block';\n }\n else if (!isDialogHidden && !this.documentHelper.owner.fontDialogModule && !isHideComment) {\n addComment.nextSibling.style.display = 'none';\n }\n if (selection.contextType === 'Image') {\n font.style.display = 'none';\n paragraph.style.display = 'none';\n font.previousSibling.style.display = 'none';\n removeHyperlink.nextSibling.style.display = 'none';\n }\n if (this.documentHelper.selection.hasRevisions()) {\n acceptChange.previousSibling.style.display = this.documentHelper.owner.enableHeaderAndFooter ? 'none' : 'block';\n if (this.documentHelper.isTrackedOnlyMode) {\n acceptChange.style.display = 'none';\n rejectChange.style.display = 'none';\n }\n else {\n acceptChange.style.display = 'block';\n rejectChange.style.display = 'block';\n }\n }\n if (this.documentHelper.selection.isinFootnote || this.documentHelper.selection.isinEndnote) {\n editNoteoptions.style.display = 'block';\n }\n return true;\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ContextMenu.prototype.destroy = function () {\n if (this.contextMenuInstance) {\n this.contextMenuInstance.destroy();\n }\n this.contextMenuInstance = undefined;\n if (this.contextMenu && this.contextMenu.parentElement) {\n this.contextMenu.parentElement.removeChild(this.contextMenu);\n this.contextMenu.innerHTML = '';\n }\n this.contextMenu = undefined;\n this.menuItems = [];\n this.customMenuItems = [];\n this.ids = [];\n };\n /**\n * Disposes the internal objects which are maintained.\n * @private\n */\n ContextMenu.prototype.componentDestroy = function () {\n if (this.contextMenuInstance) {\n this.contextMenuInstance.destroy();\n }\n this.contextMenuInstance = undefined;\n if (this.contextMenu && this.contextMenu.parentElement) {\n this.contextMenu.parentElement.removeChild(this.contextMenu);\n this.contextMenu.innerHTML = '';\n }\n this.contextMenu = undefined;\n this.menuItems = [];\n this.menuItems = undefined;\n this.customMenuItems = [];\n this.customMenuItems = undefined;\n this.ids = [];\n this.ids = undefined;\n this.customItems = [];\n this.customItems = undefined;\n this.spellContextItems = [];\n this.spellContextItems = undefined;\n this.documentHelper = undefined;\n };\n return ContextMenu;\n}());\nexport { ContextMenu };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { PageLayoutViewer, WebLayoutViewer } from '../index';\nimport { Dictionary } from '../../base/dictionary';\nimport { ImageSizeInfo } from '../selection/selection-helper';\nimport { ImageElementBox, ShapeElementBox } from '../viewer/page';\nimport { Point, HelperMethods } from './editor-helper';\nimport { BaseHistoryInfo } from '../editor-history/base-history-info';\nimport { CONTROL_CHARACTERS } from '../../base/types';\n/**\n * Image resizer implementation.\n */\nvar ImageResizer = /** @class */ (function () {\n /**\n * Constructor for image resizer module.\n *\n * @param {DocumentEditor} node - Specfies the document editor\n * @param {DocumentHelper} documentHelper - Specified the document helper\n * @private\n */\n function ImageResizer(node, documentHelper) {\n /**\n * @private\n */\n this.resizeContainerDiv = undefined;\n /**\n * @private\n */\n this.topLeftRect = undefined;\n /**\n * @private\n */\n this.topMiddleRect = undefined;\n /**\n * @private\n */\n this.topRightRect = undefined;\n /**\n * @private\n */\n this.bottomLeftRect = undefined;\n /**\n * @private\n */\n this.bottomMiddleRect = undefined;\n /**\n * @private\n */\n this.bottomRightRect = undefined;\n /**\n * @private\n */\n this.leftMiddleRect = undefined;\n /**\n * @private\n */\n this.rightMiddleRect = undefined;\n /**\n * @private\n */\n this.topLeftRectParent = undefined;\n /**\n * @private\n */\n this.topMiddleRectParent = undefined;\n /**\n * @private\n */\n this.topRightRectParent = undefined;\n /**\n * @private\n */\n this.bottomLeftRectParent = undefined;\n /**\n * @private\n */\n this.bottomMiddleRectParent = undefined;\n /**\n * @private\n */\n this.bottomRightRectParent = undefined;\n /**\n * @private\n */\n this.leftMiddleRectParent = undefined;\n /**\n * @private\n */\n this.rightMiddleRectParent = undefined;\n /**\n * @private\n */\n this.resizeMarkSizeIn = 7;\n /**\n * @private\n */\n this.selectedImageWidget = undefined;\n /**\n * @private\n */\n this.baseHistoryInfo = undefined;\n /**\n * @private\n */\n this.isImageResizing = false;\n /**\n * @private\n */\n this.isImageResizerVisible = false;\n /**\n * @private\n */\n this.isImageMoveToNextPage = false;\n /**\n * @private\n */\n this.selectedResizeElement = undefined;\n /**\n * @private\n */\n this.topValue = undefined;\n /**\n * @private\n */\n this.leftValue = undefined;\n this.owner = node;\n this.selectedImageWidget = new Dictionary();\n this.documentHelper = documentHelper;\n this.imageResizerPoints = new ImageResizingPoints();\n if (isNullOrUndefined(this.imageResizerDiv) && this.viewer && this.documentHelper.pageContainer) {\n this.initializeImageResizer();\n }\n }\n Object.defineProperty(ImageResizer.prototype, \"currentImageElementBox\", {\n /**\n * Gets or Sets the current image element box.\n *\n * @private\n * @returns {ImageElementBox | ShapeElementBox} - Returns the image element.\n */\n get: function () {\n return this.currentImageElementBoxIn;\n },\n /**\n * @param {ImageElementBox | ShapeElementBox} value - Specifies the current element box.\n */\n set: function (value) {\n this.currentImageElementBoxIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"resizeMarkSize\", {\n /**\n * Gets or Sets the resize mark size.\n *\n * @private\n * @returns {number} - Returns resize mark size\n */\n get: function () {\n return this.resizeMarkSizeIn;\n },\n /**\n * @private\n * @param {number} value - Specifies resize mark size.\n */\n set: function (value) {\n this.resizeMarkSizeIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"isShapeResize\", {\n /**\n * @returns {boolean} - Returns the shape size.\n */\n get: function () {\n if (this.currentImageElementBox instanceof ShapeElementBox) {\n return true;\n }\n return false;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ImageResizer.prototype, \"viewer\", {\n get: function () {\n return this.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n ImageResizer.prototype.getModuleName = function () {\n return 'ImageResizer';\n };\n //Image Resizing Methods\n /**\n * Sets image resizer position.\n *\n * @param {number} x - Specifies for image resizer left value.\n * @param {number} y - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.setImageResizerPositions = function (x, y, width, height) {\n this.imageResizerDivElement.style.top = y.toString() + 'px';\n this.imageResizerDivElement.style.left = x.toString() + 'px';\n this.imageResizerDivElement.style.borderWidth = '0px';\n this.imageResizerDivElement.style.height = height + 'px';\n if (this.owner.viewer instanceof WebLayoutViewer) {\n this.imageResizerDivElement.style.width = width - x - this.documentHelper.scrollbarWidth + 'px';\n }\n else {\n this.imageResizerDivElement.style.width = width + 'px';\n }\n this.imageResizerDivElement.style.backgroundColor = 'transparent';\n this.imageResizerDivElement.style.overflow = 'hidden';\n this.imageResizerDivElement.style.position = 'absolute';\n };\n /**\n * Creates image resizer DOM element.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.initializeImageResizer = function () {\n this.imageResizerDivElement = document.createElement('div');\n this.imageResizerDivElement.style.zIndex = '1';\n this.imageResizerDivElement.style.display = 'none';\n this.documentHelper.pageContainer.appendChild(this.imageResizerDivElement);\n };\n /**\n * Position an image resizer\n *\n * @private\n * @param {ImageElementBox} elementBox - Specifies the image position.\n * @returns {void}\n */\n ImageResizer.prototype.positionImageResizer = function (elementBox) {\n this.selectedImageWidget.clear();\n // Initializes the image resizer on demand, i.e at the time of selecting an image for the first time.\n var resizeDiv;\n if (!isNullOrUndefined(this.documentHelper.currentPage)) {\n resizeDiv = this.imageResizerDivElement;\n }\n if (!isNullOrUndefined(resizeDiv) && !resizeDiv.contains(this.imageResizerDiv)) {\n this.imageResizerDiv = this.initResizeMarks(resizeDiv, this);\n }\n this.imageResizerDiv.style.width = (elementBox.width) + 'px';\n this.imageResizerDiv.style.height = (elementBox.height) + 'px';\n this.currentImageElementBox = elementBox;\n var lineWidget = elementBox.line;\n var top;\n var left;\n if (elementBox instanceof ImageElementBox && elementBox.textWrappingStyle !== 'Inline') {\n top = elementBox.y;\n left = elementBox.x;\n }\n else {\n top = this.documentHelper.selection.getTop(lineWidget) + elementBox.margin.top;\n left = this.documentHelper.selection.getLeftInternal(lineWidget, elementBox, 0);\n }\n var page = this.documentHelper.selection.getPage(lineWidget.paragraph);\n this.currentPage = page;\n var x = 0;\n //let y: number = 0;\n if (!isNullOrUndefined(resizeDiv)) {\n if (this.owner.viewer instanceof WebLayoutViewer) {\n this.imageResizerDivElement.style.width = page.boundingRectangle.width - page.boundingRectangle.x - left - this.documentHelper.scrollbarWidth + 'px';\n }\n this.imageResizerDivElement.style.display = 'block';\n if (this.owner.viewer instanceof WebLayoutViewer) {\n resizeDiv.style.width = (page.boundingRectangle.width - this.documentHelper.scrollbarWidth - page.boundingRectangle.x - left) + 'px';\n }\n else {\n resizeDiv.style.width = page.boundingRectangle.width + 'px';\n }\n resizeDiv.style.height = page.boundingRectangle.height + 'px';\n resizeDiv.style.left = page.boundingRectangle.x + 'px';\n resizeDiv.style.top = page.boundingRectangle.y + 'px';\n resizeDiv.style.borderWidth = '0px';\n resizeDiv.style.backgroundColor = 'transparent';\n resizeDiv.style.overflow = 'hidden';\n resizeDiv.style.position = 'absolute';\n }\n var horizontalWidth = 0;\n var pageWidth = this.documentHelper.getPageWidth(page);\n //const pagelayout: PageLayoutViewer = this.viewer as PageLayoutViewer;\n horizontalWidth = parseFloat(this.imageResizerDivElement.style.width);\n x = (this.documentHelper.visibleBounds.width - horizontalWidth * this.documentHelper.zoomFactor) / 2;\n if (x < 30) {\n x = 30;\n }\n if (pageWidth < horizontalWidth) {\n x += (horizontalWidth - pageWidth) * this.documentHelper.zoomFactor / 2;\n }\n var currentPageDiv = this.imageResizerDivElement;\n var currentPageDivWidth = parseFloat(currentPageDiv.style.width);\n var currentPageDivHeight = parseFloat(currentPageDiv.style.height);\n var imageResizerDivWidth = parseFloat(this.imageResizerDiv.style.width);\n var imageResizerDivHeight = parseFloat(this.imageResizerDiv.style.height);\n var margin = (this.resizeMarkSize - 1) / 2;\n var width = imageResizerDivWidth + 2 * margin;\n var height = imageResizerDivHeight + 2 * margin;\n if (width > (currentPageDivWidth - left) * this.documentHelper.zoomFactor + margin) {\n width = (currentPageDivWidth - left) * this.documentHelper.zoomFactor;\n }\n if (height > (currentPageDivHeight - top) * this.documentHelper.zoomFactor + margin) {\n height = (currentPageDivHeight - top) * this.documentHelper.zoomFactor;\n }\n // if (width < imageResizerDivHeight + margin || height < imageResizerDivHeight + margin) {\n // }\n this.imageResizerDivElement.style.width = parseInt(this.imageResizerDivElement.style.width.replace('px', ''), 10) * this.documentHelper.zoomFactor + 'px';\n this.imageResizerDivElement.style.height = parseInt(this.imageResizerDivElement.style.height.replace('px', ''), 10) * this.documentHelper.zoomFactor + 'px';\n height = this.documentHelper.render.getScaledValue(elementBox.height);\n width = this.documentHelper.render.getScaledValue(elementBox.width);\n if (elementBox instanceof ImageElementBox) {\n left = this.documentHelper.render.getScaledValue(left);\n top = this.documentHelper.render.getScaledValue(top);\n }\n else {\n left = elementBox.x * this.documentHelper.zoomFactor;\n top = elementBox.y * this.documentHelper.zoomFactor;\n }\n this.setImageResizerPosition(left, top, width, height, this);\n if (this.owner.selectionModule.isInShape) {\n this.resizeContainerDiv.style.borderStyle = 'dashed';\n }\n else {\n this.resizeContainerDiv.style.borderStyle = 'solid';\n }\n if (!this.selectedImageWidget.containsKey(lineWidget)) {\n var selectedImageInfo = new SelectedImageInfo(elementBox.height, elementBox.width);\n this.selectedImageWidget.add(lineWidget, selectedImageInfo);\n }\n };\n /**\n * Shows the image resizer.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.showImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = '';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = '';\n this.bottomLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = '';\n this.bottomRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = '';\n this.bottomMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = '';\n this.rightMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = '';\n this.topRightRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = '';\n this.topLeftRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = '';\n this.leftMiddleRectParent.style.display = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = '';\n this.topMiddleRectParent.style.display = '';\n }\n this.isImageResizerVisible = true;\n };\n /**\n * Hides the image resizer.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.hideImageResizer = function () {\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.style.display = 'none';\n }\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.style.display = 'none';\n this.bottomLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.style.display = 'none';\n this.bottomRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.style.display = 'none';\n this.bottomMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.style.display = 'none';\n this.rightMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.style.display = 'none';\n this.topRightRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.style.display = 'none';\n this.topLeftRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.style.display = 'none';\n this.leftMiddleRectParent.style.display = 'none';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.style.display = 'none';\n this.topMiddleRectParent.style.display = 'none';\n }\n this.isImageResizerVisible = false;\n this.currentPage = undefined;\n };\n /**\n * Initialize the resize marks.\n *\n * @private\n * @param {HTMLElement} resizeDiv - Specifies to appending resizer container div element.\n * @param {ImageResizer} imageResizer - Specifies to creating div element of each position.\n * @returns {void}\n */\n /* eslint-disable */\n ImageResizer.prototype.initResizeMarks = function (resizeDiv, imageResizer) {\n this.initResizeContainerDiv(imageResizer);\n resizeDiv.appendChild(imageResizer.resizeContainerDiv);\n imageResizer.topRightRectParent = document.createElement('div');\n imageResizer.topRightRectParent.style.cursor = 'ne-resize';\n imageResizer.topRightRectParent.id = this.documentHelper.owner.containerId + '_TopRightRectParent';\n this.applyProperties(imageResizer.topRightRectParent);\n imageResizer.topRightRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topRightRectParent);\n imageResizer.topRightRect = document.createElement('div');\n imageResizer.topRightRect.id = this.documentHelper.owner.containerId + '_TopRightRect';\n imageResizer.topRightRect.style.cursor = 'ne-resize';\n this.applyProperties(imageResizer.topRightRect);\n resizeDiv.appendChild(imageResizer.topRightRect);\n imageResizer.topLeftRectParent = document.createElement('div');\n imageResizer.topLeftRectParent.style.cursor = 'nw-resize';\n imageResizer.topLeftRectParent.id = this.documentHelper.owner.containerId + '_TopLeftRectParent';\n this.applyProperties(imageResizer.topLeftRectParent);\n imageResizer.topLeftRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topLeftRectParent);\n imageResizer.topLeftRect = document.createElement('div');\n imageResizer.topLeftRect.id = this.documentHelper.owner.containerId + '_TopLeftRect';\n imageResizer.topLeftRect.style.cursor = 'nw-resize';\n this.applyProperties(imageResizer.topLeftRect);\n resizeDiv.appendChild(imageResizer.topLeftRect);\n imageResizer.topMiddleRectParent = document.createElement('div');\n imageResizer.topMiddleRectParent.style.cursor = 'n-resize';\n imageResizer.topMiddleRectParent.id = this.documentHelper.owner.containerId + '_TopMiddleRectParent';\n this.applyProperties(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.topMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.topMiddleRectParent);\n imageResizer.topMiddleRect = document.createElement('div');\n imageResizer.topMiddleRect.id = this.documentHelper.owner.containerId + '_TopMiddleRect';\n imageResizer.topMiddleRect.style.cursor = 'n-resize';\n this.applyProperties(imageResizer.topMiddleRect);\n resizeDiv.appendChild(imageResizer.topMiddleRect);\n imageResizer.bottomRightRectParent = document.createElement('div');\n imageResizer.bottomRightRectParent.style.cursor = 'se-resize';\n imageResizer.bottomRightRectParent.id = this.documentHelper.owner.containerId + '_BottomRightRectParent';\n this.applyProperties(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomRightRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomRightRectParent);\n imageResizer.bottomRightRect = document.createElement('div');\n imageResizer.bottomRightRect.id = this.documentHelper.owner.containerId + '_BottomRightRect';\n imageResizer.bottomRightRect.style.cursor = 'se-resize';\n this.applyProperties(imageResizer.bottomRightRect);\n resizeDiv.appendChild(imageResizer.bottomRightRect);\n imageResizer.bottomLeftRectParent = document.createElement('div');\n imageResizer.bottomLeftRectParent.style.cursor = 'sw-resize';\n imageResizer.bottomLeftRectParent.id = this.documentHelper.owner.containerId + '_BottomLeftRectParent';\n this.applyProperties(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomLeftRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomLeftRectParent);\n imageResizer.bottomLeftRect = document.createElement('div');\n imageResizer.bottomLeftRect.id = this.documentHelper.owner.containerId + '_BottomLeftRect';\n imageResizer.bottomLeftRect.style.cursor = 'sw-resize';\n this.applyProperties(imageResizer.bottomLeftRect);\n resizeDiv.appendChild(imageResizer.bottomLeftRect);\n imageResizer.bottomMiddleRectParent = document.createElement('div');\n imageResizer.bottomMiddleRectParent.style.cursor = 's-resize';\n imageResizer.bottomMiddleRectParent.id = this.documentHelper.owner.containerId + '_BottomMiddleRectParent';\n this.applyProperties(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.bottomMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.bottomMiddleRectParent);\n imageResizer.bottomMiddleRect = document.createElement('div');\n imageResizer.bottomMiddleRect.id = this.documentHelper.owner.containerId + '_BottomMiddleRect';\n imageResizer.bottomMiddleRect.style.cursor = 's-resize';\n this.applyProperties(imageResizer.bottomMiddleRect);\n resizeDiv.appendChild(imageResizer.bottomMiddleRect);\n imageResizer.rightMiddleRectParent = document.createElement('div');\n imageResizer.rightMiddleRectParent.style.cursor = 'e-resize';\n imageResizer.rightMiddleRectParent.id = this.documentHelper.owner.containerId + '_RightMiddleRectParent';\n this.applyProperties(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.rightMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.rightMiddleRectParent);\n imageResizer.rightMiddleRect = document.createElement('div');\n imageResizer.rightMiddleRect.id = this.documentHelper.owner.containerId + '_RightMiddleRect';\n imageResizer.rightMiddleRect.style.cursor = 'e-resize';\n this.applyProperties(imageResizer.rightMiddleRect);\n resizeDiv.appendChild(imageResizer.rightMiddleRect);\n imageResizer.leftMiddleRectParent = document.createElement('div');\n imageResizer.leftMiddleRectParent.style.cursor = 'w-resize';\n imageResizer.leftMiddleRectParent.id = this.documentHelper.owner.containerId + '_LeftMiddleRectParent';\n this.applyProperties(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRectParent.style.width = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.height = !this.documentHelper.isTouchInput ? '14px' : '30px';\n imageResizer.leftMiddleRectParent.style.opacity = '-1';\n resizeDiv.appendChild(imageResizer.leftMiddleRectParent);\n imageResizer.leftMiddleRect = document.createElement('div');\n imageResizer.leftMiddleRect.id = this.documentHelper.owner.containerId + '_LeftMiddleRect';\n imageResizer.leftMiddleRect.style.cursor = 'w-resize';\n this.applyProperties(imageResizer.leftMiddleRect);\n resizeDiv.appendChild(imageResizer.leftMiddleRect);\n return imageResizer.resizeContainerDiv;\n };\n /**\n * Sets the image resizer position.\n *\n * @private\n * @param {number} left - Specifies for image resizer left value.\n * @param {number} top - Specifies for image resizer top value.\n * @param {number} width - Specifies for image resizer width value.\n * @param {number} height - Specifies for image resizer height value.\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @returns {void}\n */\n ImageResizer.prototype.setImageResizerPosition = function (left, top, width, height, imageResizer) {\n //Positions Updating For Image Resize Div\n imageResizer.resizeContainerDiv.style.width = width + 'px';\n imageResizer.resizeContainerDiv.style.height = height + 'px';\n imageResizer.resizeContainerDiv.style.left = left + 'px';\n imageResizer.resizeContainerDiv.style.top = top + 'px';\n //Positions Updating For Image Resizing Points\n imageResizer.topRightRect.style.left = ((left + width) - 5) + 'px';\n imageResizer.topRightRect.style.top = (top - 4) + 'px';\n imageResizer.topLeftRect.style.left = (left - 5) + 'px';\n imageResizer.topLeftRect.style.top = (top - 4) + 'px';\n imageResizer.topMiddleRect.style.left = ((parseFloat(imageResizer.topLeftRect.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRect.style.top = (top - 4) + 'px';\n imageResizer.bottomRightRect.style.left = imageResizer.topRightRect.style.left;\n imageResizer.bottomRightRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + height) + 'px';\n imageResizer.bottomLeftRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.bottomLeftRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + height) + 'px';\n imageResizer.bottomMiddleRect.style.left = imageResizer.topMiddleRect.style.left;\n imageResizer.bottomMiddleRect.style.top = (parseFloat(imageResizer.topMiddleRect.style.top) + height) + 'px';\n imageResizer.rightMiddleRect.style.left = ((left + width) - 4) + 'px';\n imageResizer.rightMiddleRect.style.top = (parseFloat(imageResizer.topRightRect.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRect.style.left = imageResizer.topLeftRect.style.left;\n imageResizer.leftMiddleRect.style.top = (parseFloat(imageResizer.topLeftRect.style.top) + (height / 2)) + 'px';\n imageResizer.topRightRectParent.style.left = !this.documentHelper.isTouchInput ? ((left + width) - 8) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.topRightRectParent.style.top = !this.documentHelper.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topLeftRectParent.style.left = !this.documentHelper.isTouchInput ? (left - 8) + 'px' : (left - 15) + 'px';\n imageResizer.topLeftRectParent.style.top = !this.documentHelper.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.topMiddleRectParent.style.left = ((parseFloat(imageResizer.topLeftRectParent.style.left) + (width / 2)) - 4) + 'px';\n imageResizer.topMiddleRectParent.style.top = !this.documentHelper.isTouchInput ? (top - 7) + 'px' : (top - 15) + 'px';\n imageResizer.bottomRightRectParent.style.left = imageResizer.topRightRectParent.style.left;\n imageResizer.bottomRightRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + height) + 'px';\n imageResizer.bottomLeftRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.bottomLeftRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + height) + 'px';\n imageResizer.bottomMiddleRectParent.style.left = imageResizer.topMiddleRectParent.style.left;\n imageResizer.bottomMiddleRectParent.style.top = (parseFloat(imageResizer.topMiddleRectParent.style.top) + height) + 'px';\n imageResizer.rightMiddleRectParent.style.left = !this.documentHelper.isTouchInput ? ((left + width) - 7) + 'px' : ((left + width) - 15) + 'px';\n imageResizer.rightMiddleRectParent.style.top = (parseFloat(imageResizer.topRightRectParent.style.top) + (height / 2)) + 'px';\n imageResizer.leftMiddleRectParent.style.left = imageResizer.topLeftRectParent.style.left;\n imageResizer.leftMiddleRectParent.style.top = (parseFloat(imageResizer.topLeftRectParent.style.top) + (height / 2)) + 'px';\n this.setImageResizingPoints(imageResizer);\n if (this.documentHelper.isTouchInput) {\n this.applyPropertiesForTouch();\n }\n else {\n this.applyPropertiesForMouse();\n }\n };\n /**\n * Sets the image resizing points.\n *\n * @private\n * @param {ImageResizer} imageResizer - Specifies for position of each resizing elements.\n * @returns {void}\n */\n ImageResizer.prototype.setImageResizingPoints = function (imageResizer) {\n this.imageResizerPoints.resizeContainerDiv.x = parseFloat(imageResizer.resizeContainerDiv.style.left);\n this.imageResizerPoints.resizeContainerDiv.y = parseFloat(imageResizer.resizeContainerDiv.style.top);\n this.imageResizerPoints.bottomLeftRectParent.x = parseFloat(imageResizer.bottomLeftRectParent.style.left);\n this.imageResizerPoints.bottomLeftRectParent.y = parseFloat(imageResizer.bottomLeftRectParent.style.top);\n this.imageResizerPoints.bottomRightRectParent.x = parseFloat(imageResizer.bottomRightRectParent.style.left);\n this.imageResizerPoints.bottomRightRectParent.y = parseFloat(imageResizer.bottomRightRectParent.style.top);\n this.imageResizerPoints.bottomMiddleRectParent.x = parseFloat(imageResizer.bottomMiddleRectParent.style.left);\n this.imageResizerPoints.bottomMiddleRectParent.y = parseFloat(imageResizer.bottomMiddleRectParent.style.top);\n this.imageResizerPoints.topLeftRectParent.x = parseFloat(imageResizer.topLeftRectParent.style.left);\n this.imageResizerPoints.topLeftRectParent.y = parseFloat(imageResizer.topLeftRectParent.style.top);\n this.imageResizerPoints.topRightRectParent.x = parseFloat(imageResizer.topRightRectParent.style.left);\n this.imageResizerPoints.topRightRectParent.y = parseFloat(imageResizer.topRightRectParent.style.top);\n this.imageResizerPoints.topMiddleRectParent.x = parseFloat(imageResizer.topMiddleRectParent.style.left);\n this.imageResizerPoints.topMiddleRectParent.y = parseFloat(imageResizer.topMiddleRectParent.style.top);\n this.imageResizerPoints.leftMiddleRectParent.x = parseFloat(imageResizer.leftMiddleRectParent.style.left);\n this.imageResizerPoints.leftMiddleRectParent.y = parseFloat(imageResizer.leftMiddleRectParent.style.top);\n this.imageResizerPoints.rightMiddleRectParent.x = parseFloat(imageResizer.rightMiddleRectParent.style.left);\n this.imageResizerPoints.rightMiddleRectParent.y = parseFloat(imageResizer.rightMiddleRectParent.style.top);\n };\n /**\n * Initialize the resize container div element.\n *\n * @private\n * @param {ImageResizer} imageResizer - Specifies for creating resize container div element.\n * @returns {void}\n */\n ImageResizer.prototype.initResizeContainerDiv = function (imageResizer) {\n imageResizer.resizeContainerDiv = document.createElement('div');\n imageResizer.resizeContainerDiv.id = this.documentHelper.owner.containerId + '_ResizeDivElement';\n imageResizer.resizeContainerDiv.style.position = 'absolute';\n imageResizer.resizeContainerDiv.style.border = '1px solid #bfbfbf';\n imageResizer.resizeContainerDiv.style.zIndex = '30';\n imageResizer.resizeContainerDiv.style.backgroundColor = 'transparent';\n imageResizer.resizeContainerDiv.style.display = 'block';\n };\n /**\n * Apply the properties of each resize rectangle element.\n *\n * @private\n * @param {HTMLDivElement} resizeRectElement - Specifies for applying properties to resize rectangle element.\n * @returns {void}\n */\n ImageResizer.prototype.applyProperties = function (resizeRectElement) {\n resizeRectElement.style.position = 'absolute';\n resizeRectElement.style.width = '8px';\n resizeRectElement.style.height = '8px';\n resizeRectElement.style.fontSize = '0px';\n resizeRectElement.style.zIndex = ' 551';\n resizeRectElement.style.backgroundColor = '#ffffff';\n resizeRectElement.style.border = '1px solid #bfbfbf';\n resizeRectElement.style.boxShadow = '0 1px 2px 0 #bfbfbf 0.35';\n resizeRectElement.style.color = '#000000';\n };\n /**\n * Handles an image resizing.\n *\n * @private\n * @param {number} x - Specifies for left value while resizing.\n * @param {number} y - Specifies for top value while resizing.\n * @returns {void}\n */\n ImageResizer.prototype.handleImageResizing = function (touchPoint, prevX, prevY) {\n prevX = prevX / this.documentHelper.zoomFactor;\n prevY = prevY / this.documentHelper.zoomFactor;\n this.leftValue = isNullOrUndefined(this.leftValue) ? prevX : this.leftValue;\n this.topValue = isNullOrUndefined(this.topValue) ? prevY : this.topValue;\n var points;\n var id = this.selectedResizeElement.id.split('_');\n var currentElementId = id[id.length - 1];\n switch (currentElementId) {\n case 'TopRightRectParent':\n points = this.topRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'TopLeftRectParent':\n points = this.topLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'TopMiddleRectParent':\n prevX = 0;\n prevY = this.topMiddleResizing(touchPoint);\n break;\n case 'BottomRightRectParent':\n points = this.bottomRightResizing(touchPoint);\n prevX = points.left;\n prevY = points.top;\n break;\n case 'BottomLeftRectParent':\n points = this.bottomLeftResizing(touchPoint);\n prevX = -points.left;\n prevY = -points.top;\n break;\n case 'BottomMiddleRectParent':\n prevY = touchPoint.y - prevY;\n prevX = 0;\n break;\n case 'RightMiddleRectParent':\n prevX = touchPoint.x - prevX;\n prevY = 0;\n break;\n case 'LeftMiddleRectParent':\n prevX = this.leftMiddleResizing(touchPoint);\n prevY = 0;\n break;\n default:\n break;\n }\n if (prevX !== 0 || prevY !== 0) {\n var widget = this.currentImageElementBox.line.paragraph;\n var image = this.currentImageElementBox;\n if (!isNullOrUndefined(widget) && widget.isInsideTable) {\n var cellWidget = widget.containerWidget;\n if (!isNullOrUndefined(cellWidget)) {\n var rowWidget = cellWidget.containerWidget;\n var imageHeight = HelperMethods.convertPointToPixel(image.height);\n var widgetHeight = rowWidget.height - imageHeight;\n if (prevY > 0 && rowWidget.y + widgetHeight + imageHeight + prevY > this.viewer.clientArea.bottom) {\n this.isImageMoveToNextPage = true;\n }\n }\n }\n if (this.owner.enableHistoryMode) {\n this.initHistoryForImageResizer(this.currentImageElementBox);\n }\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n var width = this.currentImageElementBox.width + prevX > 10 ? this.currentImageElementBox.width + prevX : 10;\n var height = this.currentImageElementBox.height + prevY > 10 ? this.currentImageElementBox.height + prevY : 10;\n if (currentElementId === 'BottomRightRectParent'\n || currentElementId === 'TopRightRectParent'\n || currentElementId === 'BottomLeftRectParent'\n || currentElementId === 'TopLeftRectParent') {\n height = this.currentImageElementBox.height / this.currentImageElementBox.width * width;\n width = this.currentImageElementBox.width / this.currentImageElementBox.height * height;\n }\n this.currentImageElementBox.width = width;\n this.currentImageElementBox.height = height;\n var owner = this.currentImageElementBox.line.paragraph;\n this.positionImageResizer(this.currentImageElementBox);\n }\n this.isImageResizing = true;\n }\n };\n /**\n * Handles image resizing on mouse.\n *\n * @private\n * @param {MouseEvent} event - Specifies for image resizing using mouse event.\n * @returns {void}\n */\n ImageResizer.prototype.handleImageResizingOnMouse = function (event) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left);\n var prevY = parseFloat(this.selectedResizeElement.style.top);\n var cursorPoint = new Point(event.offsetX, event.offsetY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n ImageResizer.prototype.topMiddleResizing = function (touchPoint) {\n var prevY;\n if (this.topValue >= touchPoint.y) {\n prevY = this.topValue / touchPoint.y;\n this.topValue = touchPoint.y;\n if (this.viewer instanceof PageLayoutViewer) {\n if (this.topValue <= this.viewer.pageGap) {\n prevY = 1;\n }\n }\n }\n else {\n prevY = -(touchPoint.y / this.topValue);\n this.topValue = touchPoint.y;\n if (this.topValue === 0) {\n prevY = -1;\n }\n }\n return prevY;\n };\n ImageResizer.prototype.leftMiddleResizing = function (touchPoint) {\n var prevX;\n if (this.leftValue >= touchPoint.x) {\n prevX = this.leftValue / touchPoint.x;\n this.leftValue = touchPoint.x;\n if (this.leftValue === 0) {\n prevX = 1;\n this.leftValue = parseFloat(this.selectedResizeElement.style.left);\n }\n }\n else {\n prevX = -(touchPoint.x / this.leftValue);\n this.leftValue = touchPoint.x;\n }\n return prevX;\n };\n ImageResizer.prototype.topRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.topLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue >= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomRightResizing = function (touchPoint) {\n var points;\n if (this.leftValue <= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.bottomLeftResizing = function (touchPoint) {\n var points;\n if (this.leftValue >= touchPoint.x && this.topValue <= touchPoint.y) {\n points = this.getOuterResizingPoint(touchPoint);\n }\n else {\n points = this.getInnerResizingPoint(touchPoint);\n }\n return points;\n };\n ImageResizer.prototype.getOuterResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = touchPoint.x - this.leftValue;\n this.leftValue = touchPoint.x;\n prevY = touchPoint.y - this.topValue;\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n ImageResizer.prototype.getInnerResizingPoint = function (touchPoint) {\n var prevX;\n var prevY;\n prevX = -(this.leftValue - touchPoint.x);\n this.leftValue = touchPoint.x;\n prevY = -(this.topValue - touchPoint.y);\n this.topValue = touchPoint.y;\n return { left: prevX, top: prevY };\n };\n /**\n * Handles image resizing on touch.\n *\n * @private\n * @param {TouchEvent} touchEvent - Specifies for image resizing using touch event.\n * @returns {void}\n */\n ImageResizer.prototype.handleImageResizingOnTouch = function (touchEvent) {\n if (!isNullOrUndefined(this.selectedResizeElement)) {\n var prevX = parseFloat(this.selectedResizeElement.style.left) + 24;\n var prevY = parseFloat(this.selectedResizeElement.style.top) + 24;\n var touch = touchEvent.touches;\n var cursorPoint = new Point(touch[0].clientX, touch[0].clientY);\n var touchPoint = this.viewer.findFocusedPage(cursorPoint, true);\n if (isNullOrUndefined(this.currentImageElementBox) || isNullOrUndefined(this.currentImageElementBox)) {\n return;\n }\n this.handleImageResizing(touchPoint, prevX, prevY);\n }\n };\n /**\n * Gets the image point of mouse.\n *\n * @private\n * @param {Point} touchPoint - Specifies for resizer cursor position.\n * @returns {ImagePointInfo} - Returns image point\n */\n ImageResizer.prototype.getImagePoint = function (touchPoint) {\n var x = this.documentHelper.render.getScaledValue(touchPoint.x, 1);\n var y = this.documentHelper.render.getScaledValue(touchPoint.y, 2);\n touchPoint = new Point(x, y);\n var imageResizingPoints = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElement = undefined;\n var bottomMiddle = imageResizingPoints.bottomMiddleRectParent;\n var bottomRight = imageResizingPoints.bottomRightRectParent;\n var bottomLeft = imageResizingPoints.bottomLeftRectParent;\n var topMiddle = imageResizingPoints.topMiddleRectParent;\n var topRight = imageResizingPoints.topRightRectParent;\n var topLeft = imageResizingPoints.topLeftRectParent;\n var rightMiddle = imageResizingPoints.rightMiddleRectParent;\n var leftMiddle = imageResizingPoints.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n if ((touchPoint.x > bottomMiddle.x && touchPoint.x <= bottomMiddle.x + 15) && (touchPoint.y > bottomMiddle.y && touchPoint.y <= bottomMiddle.y + 15)) {\n selectedElement = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n }\n else if ((touchPoint.x > bottomRight.x && touchPoint.x <= bottomRight.x + 15) && (touchPoint.y > bottomRight.y && touchPoint.y <= bottomRight.y + 15)) {\n selectedElement = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n }\n else if ((touchPoint.x > bottomLeft.x && touchPoint.x <= bottomLeft.x + 15) && (touchPoint.y > bottomLeft.y && touchPoint.y <= bottomLeft.y + 15)) {\n selectedElement = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n }\n else if ((touchPoint.x > topMiddle.x && touchPoint.x <= topMiddle.x + 15) && (touchPoint.y > topMiddle.y && touchPoint.y <= topMiddle.y + 15)) {\n selectedElement = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n }\n else if ((touchPoint.x > topRight.x && touchPoint.x <= topRight.x + 15) && (touchPoint.y > topRight.y && touchPoint.y <= topRight.y + 15)) {\n selectedElement = this.topRightRectParent;\n resizePosition = 'ne-resize';\n }\n else if ((touchPoint.x > topLeft.x && touchPoint.x <= topLeft.x + 15) && (touchPoint.y > topLeft.y && touchPoint.y <= topLeft.y + 15)) {\n selectedElement = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n }\n else if ((touchPoint.x > leftMiddle.x && touchPoint.x <= leftMiddle.x + 15) && (touchPoint.y > leftMiddle.y && touchPoint.y <= leftMiddle.y + 15)) {\n selectedElement = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n }\n else if ((touchPoint.x > rightMiddle.x && touchPoint.x <= rightMiddle.x + 15) && (touchPoint.y > rightMiddle.y && touchPoint.y <= rightMiddle.y + 15)) {\n selectedElement = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoint.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoint.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoint.y > parseFloat(this.resizeContainerDiv.style.top)\n && touchPoint.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElement, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForMouse = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '14px';\n this.bottomMiddleRectParent.style.height = '14px';\n this.bottomRightRectParent.style.width = '14px';\n this.bottomRightRectParent.style.height = '14px';\n this.bottomLeftRectParent.style.width = '14px';\n this.bottomLeftRectParent.style.height = '14px';\n this.topMiddleRectParent.style.width = '14px';\n this.topMiddleRectParent.style.height = '14px';\n this.topRightRectParent.style.width = '14px';\n this.topRightRectParent.style.height = '14px';\n this.topLeftRectParent.style.width = '14px';\n this.topLeftRectParent.style.height = '14px';\n this.leftMiddleRectParent.style.width = '14px';\n this.leftMiddleRectParent.style.height = '14px';\n this.rightMiddleRectParent.style.width = '14px';\n this.rightMiddleRectParent.style.height = '14px';\n }\n };\n /**\n * Gets the image point of touch.\n *\n * @private\n * @param {Point} touchPoints - Specifies for resizer cursor position.\n * @returns {ImagePointInfo} - Returns image point info.\n */\n ImageResizer.prototype.getImagePointOnTouch = function (touchPoints) {\n var x = this.documentHelper.render.getScaledValue(touchPoints.x, 1);\n var y = this.documentHelper.render.getScaledValue(touchPoints.y, 2);\n touchPoints = new Point(x, y);\n var imageResizingPointsOnTouch = this.imageResizerPoints;\n var resizePosition = '';\n var selectedElements = undefined;\n var bottomMiddle = imageResizingPointsOnTouch.bottomMiddleRectParent;\n var bottomRight = imageResizingPointsOnTouch.bottomRightRectParent;\n var bottomLeft = imageResizingPointsOnTouch.bottomLeftRectParent;\n var topMiddle = imageResizingPointsOnTouch.topMiddleRectParent;\n var topRight = imageResizingPointsOnTouch.topRightRectParent;\n var topLeft = imageResizingPointsOnTouch.topLeftRectParent;\n var rightMiddle = imageResizingPointsOnTouch.rightMiddleRectParent;\n var leftMiddle = imageResizingPointsOnTouch.leftMiddleRectParent;\n if (!isNullOrUndefined(this.bottomMiddleRectParent) && this.bottomMiddleRectParent.style.display !== 'none') {\n if ((touchPoints.x > bottomMiddle.x && touchPoints.x <= bottomMiddle.x + 25) && (touchPoints.y > bottomMiddle.y && touchPoints.y <= bottomMiddle.y + 25)) {\n selectedElements = this.bottomMiddleRectParent;\n resizePosition = 's-resize';\n }\n else if ((touchPoints.x > bottomRight.x && touchPoints.x <= bottomRight.x + 25) && (touchPoints.y > bottomRight.y && touchPoints.y <= bottomRight.y + 25)) {\n selectedElements = this.bottomRightRectParent;\n resizePosition = 'se-resize';\n }\n else if ((touchPoints.x > bottomLeft.x && touchPoints.x <= bottomLeft.x + 25) && (touchPoints.y > bottomLeft.y && touchPoints.y <= bottomLeft.y + 25)) {\n selectedElements = this.bottomLeftRectParent;\n resizePosition = 'sw-resize';\n }\n else if ((touchPoints.x > topMiddle.x && touchPoints.x <= topMiddle.x + 25) && (touchPoints.y > topMiddle.y && touchPoints.y <= topMiddle.y + 25)) {\n selectedElements = this.topMiddleRectParent;\n resizePosition = 'n-resize';\n }\n else if ((touchPoints.x > topRight.x && touchPoints.x <= topRight.x + 25) && (touchPoints.y > topRight.y && touchPoints.y <= topRight.y + 25)) {\n selectedElements = this.topRightRectParent;\n resizePosition = 'ne-resize';\n }\n else if ((touchPoints.x > topLeft.x && touchPoints.x <= topLeft.x + 25) && (touchPoints.y > topLeft.y && touchPoints.y <= topLeft.y + 25)) {\n selectedElements = this.topLeftRectParent;\n resizePosition = 'nw-resize';\n }\n else if ((touchPoints.x > leftMiddle.x && touchPoints.x <= leftMiddle.x + 25) && (touchPoints.y > leftMiddle.y && touchPoints.y <= leftMiddle.y + 25)) {\n selectedElements = this.leftMiddleRectParent;\n resizePosition = 'w-resize';\n }\n else if ((touchPoints.x > rightMiddle.x && touchPoints.x <= rightMiddle.x + 25) && (touchPoints.y > rightMiddle.y && touchPoints.y <= rightMiddle.y + 25)) {\n selectedElements = this.rightMiddleRectParent;\n resizePosition = 'e-resize';\n }\n else if (!isNullOrUndefined(this.resizeContainerDiv) && (touchPoints.x > parseFloat(this.resizeContainerDiv.style.left)\n && touchPoints.x <= (parseFloat(this.resizeContainerDiv.style.left) + parseFloat(this.resizeContainerDiv.style.width)))\n && (touchPoints.y > parseFloat(this.resizeContainerDiv.style.top)\n && touchPoints.y <= (parseFloat(this.resizeContainerDiv.style.top) + parseFloat(this.resizeContainerDiv.style.height)))) {\n resizePosition = 'move';\n }\n }\n return { 'selectedElement': selectedElements, 'resizePosition': resizePosition };\n };\n ImageResizer.prototype.applyPropertiesForTouch = function () {\n if (!isNullOrUndefined(this.bottomLeftRectParent)) {\n this.bottomMiddleRectParent.style.width = '30px';\n this.bottomMiddleRectParent.style.height = '30px';\n this.bottomRightRectParent.style.width = '30px';\n this.bottomRightRectParent.style.height = '30px';\n this.bottomLeftRectParent.style.width = '30px';\n this.bottomLeftRectParent.style.height = '30px';\n this.topMiddleRectParent.style.width = '30px';\n this.topMiddleRectParent.style.height = '30px';\n this.topRightRectParent.style.width = '30px';\n this.topRightRectParent.style.height = '30px';\n this.topLeftRectParent.style.width = '30px';\n this.topLeftRectParent.style.height = '30px';\n this.leftMiddleRectParent.style.width = '30px';\n this.leftMiddleRectParent.style.height = '30px';\n this.rightMiddleRectParent.style.width = '30px';\n this.rightMiddleRectParent.style.height = '30px';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.mouseUpInternal = function () {\n this.currentImageElementBox.width = parseFloat(this.imageResizerDiv.style.width) / this.documentHelper.zoomFactor;\n this.currentImageElementBox.height = parseFloat(this.imageResizerDiv.style.height) / this.documentHelper.zoomFactor;\n this.owner.isShiftingEnabled = true;\n this.owner.editorModule.setOffsetValue(this.owner.selectionModule);\n this.documentHelper.layout.layoutBodyWidgetCollection(this.currentImageElementBox.line.paragraph.index, this.currentImageElementBox.line.paragraph.containerWidget, this.currentImageElementBox.line.paragraph, false);\n this.updateHistoryForImageResizer();\n this.owner.editorModule.reLayout(this.owner.selectionModule, true);\n this.viewer.updateScrollBars();\n };\n /**\n * Initialize history for image resizer.\n *\n * @private\n * @param {ImageResizer} imageResizer - Specifies for image resizer.\n * @param {WImage} imageContainer - Specifies for an image.\n * @returns {void}\n */\n ImageResizer.prototype.initHistoryForImageResizer = function (imageContainer) {\n if (!isNullOrUndefined(this.owner) && isNullOrUndefined(this.baseHistoryInfo)) {\n this.baseHistoryInfo = new BaseHistoryInfo(this.owner);\n this.baseHistoryInfo.action = 'ImageResizing';\n this.baseHistoryInfo.updateSelection();\n this.baseHistoryInfo.modifiedProperties.push(new ImageSizeInfo(imageContainer));\n }\n };\n /**\n * Updates histroy for image resizer.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.updateHistoryForImageResizer = function () {\n if (!isNullOrUndefined(this.owner) && !isNullOrUndefined(this.baseHistoryInfo)) {\n var imageFormat = this.baseHistoryInfo.modifiedProperties[0];\n if (this.currentImageElementBox.width === imageFormat.width\n && this.currentImageElementBox.height === imageFormat.height) {\n this.baseHistoryInfo.modifiedProperties.pop();\n }\n else {\n //Records the image size modifications\n this.baseHistoryInfo.insertedText = CONTROL_CHARACTERS.Image;\n this.baseHistoryInfo.insertedData = { width: HelperMethods.convertPixelToPoint(this.currentImageElementBox.width), height: HelperMethods.convertPixelToPoint(this.currentImageElementBox.height), alternativeText: this.currentImageElementBox.alternateText };\n this.owner.editorHistoryModule.recordChanges(this.baseHistoryInfo);\n }\n //Fires the content changed event for the image size modifications\n this.baseHistoryInfo = undefined;\n }\n };\n /**\n * Updates image resize container when applying zooming\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.updateImageResizerPosition = function () {\n if (!isNullOrUndefined(this.currentImageElementBox)) {\n var elementBox = this.currentImageElementBox instanceof ImageElementBox ? this.currentImageElementBox : this.currentImageElementBox;\n var lineWidget = elementBox.line;\n var top_1;\n var left = void 0;\n var topValue = void 0;\n var leftValue = void 0;\n if (this.currentImageElementBox instanceof ImageElementBox) {\n top_1 = this.documentHelper.selection.getTop(lineWidget) + elementBox.margin.top;\n left = this.documentHelper.selection.getLeftInternal(lineWidget, elementBox, 0);\n topValue = top_1 * this.documentHelper.zoomFactor;\n leftValue = left * this.documentHelper.zoomFactor;\n }\n else {\n leftValue = elementBox.x * this.documentHelper.zoomFactor;\n topValue = elementBox.y * this.documentHelper.zoomFactor;\n }\n var height = this.documentHelper.render.getScaledValue(elementBox.height, 2);\n var width = this.documentHelper.render.getScaledValue(elementBox.width, 1);\n this.setImageResizerPosition(leftValue, topValue, width, height, this);\n }\n };\n /**\n * Dispose the internal objects which are maintained.\n *\n * @private\n * @returns {void}\n */\n ImageResizer.prototype.destroy = function () {\n if (!isNullOrUndefined(this.resizeContainerDiv)) {\n this.resizeContainerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topLeftRect)) {\n this.topLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topMiddleRect)) {\n this.topMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.topRightRect)) {\n this.topRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomLeftRect)) {\n this.bottomLeftRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomMiddleRect)) {\n this.bottomMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.bottomRightRect)) {\n this.bottomRightRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.leftMiddleRect)) {\n this.leftMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.rightMiddleRect)) {\n this.rightMiddleRect.innerHTML = '';\n }\n if (!isNullOrUndefined(this.imageResizerDiv)) {\n this.imageResizerDiv.innerHTML = '';\n }\n if (!isNullOrUndefined(this.selectedImageWidget)) {\n this.selectedImageWidget.destroy();\n }\n if (!isNullOrUndefined(this.imageResizerDivElement)) {\n this.imageResizerDivElement.innerHTML = '';\n if (!isNullOrUndefined(this.imageResizerDivElement.parentElement)) {\n this.imageResizerDivElement.parentElement.removeChild(this.imageResizerDivElement);\n }\n }\n this.imageResizerDivElement = undefined;\n this.resizeContainerDiv = undefined;\n this.topLeftRect = undefined;\n this.topMiddleRect = undefined;\n this.topRightRect = undefined;\n this.bottomLeftRect = undefined;\n this.bottomMiddleRect = undefined;\n this.bottomRightRect = undefined;\n this.leftMiddleRect = undefined;\n this.rightMiddleRect = undefined;\n this.imageResizerDiv = undefined;\n this.selectedImageWidget = undefined;\n this.isImageResizing = false;\n this.isImageResizerVisible = false;\n this.currentImageElementBoxIn = undefined;\n this.imageResizerPoints = undefined;\n //this.baseHistoryInfo = undefined;\n this.resizeMarkSizeIn = undefined;\n this.currentPage = undefined;\n this.documentHelper = undefined;\n this.owner = undefined;\n };\n return ImageResizer;\n}());\nexport { ImageResizer };\n/**\n * @private\n */\nvar ImageResizingPoints = /** @class */ (function () {\n function ImageResizingPoints() {\n /**\n * @private\n */ this.resizeContainerDiv = new Point(0, 0);\n /**\n * @private\n */\n this.topLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.topRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomLeftRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.bottomRightRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.leftMiddleRectParent = new Point(0, 0);\n /**\n * @private\n */\n this.rightMiddleRectParent = new Point(0, 0);\n }\n return ImageResizingPoints;\n}());\nexport { ImageResizingPoints };\n/**\n * @private\n */\nvar SelectedImageInfo = /** @class */ (function () {\n /**\n * Constructor for selected image info class.\n * @param {number} height - Specifies for height value.\n * @param {number} width - Specifies for width value.\n */\n function SelectedImageInfo(height, width) {\n this.heightIn = 0;\n this.widthIn = 0;\n this.heightIn = height;\n this.widthIn = width;\n }\n Object.defineProperty(SelectedImageInfo.prototype, \"height\", {\n get: function () {\n return this.heightIn;\n },\n set: function (value) {\n this.heightIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SelectedImageInfo.prototype, \"width\", {\n get: function () {\n return this.widthIn;\n },\n set: function (value) {\n this.widthIn = value;\n },\n enumerable: true,\n configurable: true\n });\n return SelectedImageInfo;\n}());\nexport { SelectedImageInfo };\n","import { WParagraphFormat } from '../format/paragraph-format';\nimport { WCharacterFormat } from '../format/index';\nimport { LineWidget, ParagraphWidget, BodyWidget, TextElementBox, FieldElementBox, TableWidget, TableRowWidget, TableCellWidget, ImageElementBox, ContentControl, ListTextElementBox, BookmarkElementBox, EditRangeStartElementBox, EditRangeEndElementBox, ChartElementBox, CommentCharacterElementBox, TextFormField, CheckBoxFormField, ShapeElementBox, FootnoteElementBox, BreakElementBox, FootnoteEndnoteMarkerElementBox } from '../viewer/page';\nimport { BlockWidget } from '../viewer/page';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { sectionsProperty, imagesProperty, fontSubstitutionTableProperty, paraStyleNameProperty, characterFormatProperty, paragraphFormatProperty, listsProperty, abstractListsProperty, backgroundProperty, stylesProperty, commentsProperty, revisionsProperty, customXmlProperty, defaultTabWidthProperty, formattingProperty, trackChangesProperty, protectionTypeProperty, enforcementProperty, hashValueProperty, saltValueProperty, doNotUseHTMLParagraphAutoSpacingProperty, formFieldShadingProperty, footnotesProperty, endnotesProperty, compatibilityModeProperty, themeFontLanguagesProperty, themesProperty, nameProperty, basedOnProperty, nextProperty, linkProperty, fontSizeProperty, fontColorProperty, styleNameProperty, bidiProperty, boldBidiProperty, italicBidiProperty, revisionIdsProperty, listIdProperty, listLevelNumberProperty, leftIndentProperty, listFormatProperty, bordersProperty, tabsProperty, headerDistanceProperty, footerDistanceProperty, differentFirstPageProperty, differentOddAndEvenPagesProperty, pageWidthProperty, pageHeightProperty, leftMarginProperty, rightMarginProperty, topMarginProperty, bottomMarginProperty, restartPageNumberingProperty, pageStartingNumberProperty, endnoteNumberFormatProperty, footNoteNumberFormatProperty, restartIndexForFootnotesProperty, restartIndexForEndnotesProperty, initialFootNoteNumberProperty, initialEndNoteNumberProperty, pageNumberStyleProperty, columnsProperty, numberOfColumnsProperty, equalWidthProperty, lineBetweenColumnsProperty, breakCodeProperty, cellWidthProperty, columnSpanProperty, rowSpanProperty, verticalAlignmentProperty, allowBreakAcrossPagesProperty, isHeaderProperty, heightTypeProperty, gridBeforeProperty, gridBeforeWidthProperty, gridBeforeWidthTypeProperty, gridAfterProperty, gridAfterWidthProperty, gridAfterWidthTypeProperty, allowAutoFitProperty, cellSpacingProperty, shadingProperty, tableAlignmentProperty, preferredWidthProperty, preferredWidthTypeProperty, textureProperty, backgroundColorProperty, foregroundColorProperty, verticalProperty, horizontalProperty, diagonalUpProperty, diagonalDownProperty, lineStyleProperty, layoutProperty, dataFormatProperty, yValueProperty, chartDataProperty, categoryXNameProperty, lineProperty, foreColorProperty, layoutXProperty, layoutYProperty, directionProperty, endStyleProperty, numberValueProperty, markerStyleProperty, markerColorProperty, markerSizeProperty, forwardProperty, backwardProperty, interceptProperty, isDisplayRSquaredProperty, isDisplayEquationProperty, seriesNameProperty, dataLabelProperty, errorBarProperty, seriesFormatProperty, trendLinesProperty, dataPointsProperty, firstSliceAngleProperty, holeSizeProperty, isLegendKeyProperty, isBubbleSizeProperty, isCategoryNameProperty, isSeriesNameProperty, isValueProperty, isPercentageProperty, isLeaderLinesProperty, showSeriesKeysProperty, hasHorizontalBorderProperty, hasVerticalBorderProperty, hasBordersProperty, categoryTypeProperty, chartCategoryProperty, chartSeriesProperty, chartAreaProperty, chartTitleAreaProperty, plotAreaProperty, chartLegendProperty, chartPrimaryCategoryAxisProperty, chartPrimaryValueAxisProperty, chartTitleProperty, chartTypeProperty, gapWidthProperty, overlapProperty, chartDataTableProperty, textProperty, shapeIdProperty, alternativeTextProperty, visibleProperty, widthProperty, heightProperty, widthScaleProperty, heightScaleProperty, lineFormatProperty, fillFormatProperty, textWrappingStyleProperty, textWrappingTypeProperty, verticalRelativePercentProperty, horizontalRelativePercentProperty, heightRelativePercentProperty, widthRelativePercentProperty, zOrderPositionProperty, layoutInCellProperty, lockAnchorProperty, autoShapeTypeProperty, textFrameProperty, colorProperty, fillProperty, textVerticalAlignmentProperty, imageStringProperty, metaFileImageStringProperty, isMetaFileProperty, topProperty, bottomProperty, rightProperty, leftProperty, getImageHeightProperty, getImageWidthProperty, hasFieldEndProperty, formFieldDataProperty, fieldTypeProperty, enabledProperty, helpTextProperty, statusTextProperty, textInputProperty, checkBoxProperty, dropDownListProperty, maxLengthProperty, defaultValueProperty, formatProperty, sizeTypeProperty, sizeProperty, checkedProperty, dropDownItemsProperty, selectedIndexProperty, commentIdProperty, commentCharacterTypeProperty, authorProperty, dateProperty, doneProperty, replyCommentsProperty, revisionTypeProperty, revisionIdProperty, itemIDProperty, xmlProperty, footnoteTypeProperty, symbolCodeProperty, symbolFontNameProperty, customMarkerProperty, inlinesProperty, contentControlPropertiesProperty, lockContentControlProperty, lockContentsProperty, tagProperty, titleProperty, hasPlaceHolderTextProperty, multiLineProperty, isTemporaryProperty, dateCalendarTypeProperty, dateStorageFormatProperty, dateDisplayLocaleProperty, dateDisplayFormatProperty, isCheckedProperty, uncheckedStateProperty, checkedStateProperty, contentControlListItemsProperty, xmlMappingProperty, fontProperty, valueProperty, displayTextProperty, isMappedProperty, isWordMlProperty, prefixMappingProperty, xPathProperty, storeItemIdProperty, customXmlPartProperty, idProperty, cellFormatProperty, rowFormatProperty, cellsProperty, rowsProperty, descriptionProperty, wrapTextAroundProperty, positioningProperty, tableFormatProperty, allowOverlapProperty, distanceTopProperty, distanceRightProperty, distanceLeftProperty, distanceBottomProperty, verticalOriginProperty, verticalPositionProperty, horizontalOriginProperty, horizontalAlignmentProperty, horizontalPositionProperty, blocksProperty, headerProperty, footerProperty, evenHeaderProperty, evenFooterProperty, firstPageHeaderProperty, firstPageFooterProperty, headersFootersProperty, sectionFormatProperty, listLevelPatternProperty, followCharacterProperty, startAtProperty, restartLevelProperty, levelNumberProperty, numberFormatProperty, abstractListIdProperty, levelsProperty, overrideListLevelProperty, levelOverridesProperty, separatorProperty, continuationSeparatorProperty, continuationNoticeProperty, bookmarkTypeProperty, propertiesProperty, tabJustificationProperty, positionProperty, deletePositionProperty, tabLeaderProperty, editRangeIdProperty, columnFirstProperty, columnLastProperty, userProperty, groupProperty, editableRangeStartProperty, spaceProperty, fontSchemeProperty, fontSchemeNameProperty, majorFontSchemeProperty, minorFontSchemeProperty, fontSchemeListProperty, fontTypefaceProperty, typefaceProperty, panoseProperty, typeProperty, majorUnitProperty, maximumValueProperty, minimumValueProperty, hasMajorGridLinesProperty, hasMinorGridLinesProperty, majorTickMarkProperty, minorTickMarkProperty, tickLabelPositionProperty, rgbProperty, appearanceProperty, lineFormatTypeProperty, allowSpaceOfSameStyleInTableProperty, weightProperty, inlineFormatProperty, fontNameProperty, isCompressedProperty, columnIndexProperty, columnCountProperty, gridProperty, isAfterParagraphMarkProperty, isAfterCellMarkProperty, isAfterRowMarkProperty, isAfterTableMarkProperty, belowTextProperty, breakClearTypeProperty, nsidProperty, isLegalStyleNumberingProperty, horizontalRuleProperty, isAutoMajorProperty } from '../../index';\n/**\n * Exports the document to Sfdt format.\n */\nvar SfdtExport = /** @class */ (function () {\n function SfdtExport(documentHelper) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.startLine = undefined;\n this.endLine = undefined;\n this.endOffset = undefined;\n this.endCell = undefined;\n this.startColumnIndex = undefined;\n this.endColumnIndex = undefined;\n this.lists = undefined;\n this.images = undefined;\n this.document = undefined;\n this.writeInlineStyles = undefined;\n this.blockContent = false;\n this.startContent = false;\n this.multipleLineContent = false;\n this.nestedContent = false;\n this.editRangeId = -1;\n this.selectedCommentsId = [];\n this.selectedRevisionId = [];\n this.nestedBlockContent = false;\n this.nestedBlockEnabled = false;\n this.blocks = [];\n this.contentInline = [];\n this.isContentControl = false;\n this.isBlockClosed = true;\n this.isWriteInlinesFootNote = false;\n this.isWriteEndFootNote = false;\n /**\n * @private\n */\n this.iscontentInsert = true;\n /**\n * @private\n */\n this.keywordIndex = undefined;\n /**\n * @private\n */\n this.isExport = true;\n /**\n * @private\n */\n this.isWordExport = false;\n /**\n * @private\n */\n this.isPartialExport = false;\n this.checkboxOrDropdown = false;\n /**\n * @private\n */\n this.copyWithTrackChange = false;\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(SfdtExport.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SfdtExport.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner;\n },\n enumerable: true,\n configurable: true\n });\n SfdtExport.prototype.getModuleName = function () {\n return 'SfdtExport';\n };\n SfdtExport.prototype.clear = function () {\n this.writeInlineStyles = undefined;\n this.startLine = undefined;\n this.endLine = undefined;\n this.lists = undefined;\n this.images = undefined;\n this.document = undefined;\n this.endCell = undefined;\n this.startColumnIndex = undefined;\n this.endColumnIndex = undefined;\n this.selectedCommentsId = [];\n this.selectedRevisionId = [];\n this.startBlock = undefined;\n this.endBlock = undefined;\n this.isPartialExport = false;\n this.keywordIndex = undefined;\n };\n /**\n * Serialize the data as Syncfusion document text.\n *\n * @private\n */\n SfdtExport.prototype.serialize = function () {\n return this.seralizeInternal(this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0);\n };\n /**\n * Serialize the data as Syncfusion document text.\n *\n * @private\n */\n SfdtExport.prototype.seralizeInternal = function (index) {\n return JSON.stringify(this.write(index));\n };\n /**\n * @private\n * @param documentHelper - Specifies document helper instance.\n * @returns {Promise}\n */\n SfdtExport.prototype.saveAsBlobNonOptimized = function (documentHelper) {\n var sfdt = new Blob([this.serialize()], { type: 'text/plain' });\n return new Promise(function (resolve, reject) {\n resolve(sfdt);\n });\n };\n /**\n * @private\n * @param documentHelper - Specifies document helper instance.\n * @returns {Promise}\n */\n SfdtExport.prototype.saveAsBlob = function (documentHelper) {\n var jsonString = this.serialize();\n var blob = new Blob([jsonString], {\n type: 'application/json'\n });\n var archiveItem = new ZipArchiveItem(blob, \"sfdt\");\n var mArchive = new ZipArchive();\n mArchive.addItem(archiveItem);\n return mArchive.saveAsBlob();\n };\n SfdtExport.prototype.updateEditRangeId = function () {\n var index = -1;\n for (var i = 0; i < this.documentHelper.editRanges.keys.length; i++) {\n var keys = this.documentHelper.editRanges.keys;\n for (var j = 0; j < keys[i].length; j++) {\n var editRangeStart = this.documentHelper.editRanges.get(keys[i]);\n for (var z = 0; z < editRangeStart.length; z++) {\n index++;\n editRangeStart[z].editRangeId = index;\n editRangeStart[z].editRangeEnd.editRangeId = index;\n }\n }\n }\n };\n /**\n * @private\n */\n /* eslint-disable */\n SfdtExport.prototype.write = function (index, line, startOffset, endLine, endOffset, writeInlineStyles, isExport) {\n var _a;\n if (writeInlineStyles) {\n this.writeInlineStyles = true;\n }\n if (!isNullOrUndefined(index)) {\n this.keywordIndex = index;\n }\n else {\n this.keywordIndex = this.owner.documentEditorSettings.optimizeSfdt ? 1 : 0;\n }\n this.Initialize();\n this.updateEditRangeId();\n if (line instanceof LineWidget && endLine instanceof LineWidget) {\n this.isExport = false;\n if (!isNullOrUndefined(isExport)) {\n this.isExport = isExport;\n }\n // For selection\n var startPara = line.paragraph;\n var endPara = endLine.paragraph;\n if (this.isPartialExport) {\n this.startBlock = this.getParentBlock(startPara);\n this.endBlock = this.getParentBlock(endPara);\n }\n var startCell = startPara.associatedCell;\n var endCell = endPara.associatedCell;\n // Creates section\n var bodyWidget = startPara.bodyWidget;\n var section = this.createSection(line.paragraph.bodyWidget);\n this.document[sectionsProperty[this.keywordIndex]].push(section);\n var selectionStartCell = startCell;\n var selectionEndCell = endCell;\n if (startCell instanceof TableCellWidget) {\n selectionStartCell = this.getParentCell(selectionStartCell);\n }\n if (endCell instanceof TableCellWidget) {\n selectionEndCell = this.getParentCell(selectionEndCell);\n }\n var isSameCell = selectionStartCell instanceof TableCellWidget && selectionEndCell instanceof TableCellWidget\n && selectionStartCell.equals(selectionEndCell);\n if (isSameCell || isNullOrUndefined(endCell)) {\n this.startLine = line;\n this.endLine = endLine;\n this.endOffset = endOffset;\n }\n else {\n // Todo: Handle nested table cases\n if (startCell instanceof TableCellWidget) {\n var startTable = startCell.getContainerTable();\n var endTable = endCell.getContainerTable();\n if (startTable.tableFormat === endTable.tableFormat) {\n this.endCell = endCell;\n if (this.endCell.ownerTable !== startCell.ownerTable && startCell.ownerTable.associatedCell\n && startCell.ownerTable.associatedCell.ownerTable === this.endCell.ownerTable &&\n (startCell.ownerTable.associatedCell.childWidgets.indexOf(startCell.ownerTable) === 0)) {\n startCell = startCell.ownerTable.associatedCell;\n }\n this.endColumnIndex = this.endCell.columnIndex + this.endCell.cellFormat.columnSpan;\n this.startColumnIndex = startCell.columnIndex;\n }\n }\n else {\n this.endCell = endCell;\n }\n }\n var nextBlock = void 0;\n if ((isSameCell && !this.isPartialExport) || isNullOrUndefined(startCell)) {\n var paragraph = this.createParagraph(line.paragraph);\n section[blocksProperty[this.keywordIndex]].push(paragraph);\n var lastBlock = line.paragraph;\n nextBlock = this.writeParagraph(line.paragraph, paragraph, section[blocksProperty[this.keywordIndex]], line.indexInOwner, startOffset);\n if (this.isPartialExport) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document[sectionsProperty[this.keywordIndex]][this.document[sectionsProperty[this.keywordIndex]].length - 1];\n }\n while (nextBlock) {\n lastBlock = nextBlock;\n nextBlock = this.writeBlock(nextBlock, 0, section[blocksProperty[this.keywordIndex]]);\n if (this.isPartialExport && isNullOrUndefined(nextBlock)) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document[sectionsProperty[this.keywordIndex]][this.document[sectionsProperty[this.keywordIndex]].length - 1];\n }\n }\n // Todo:continue in next section\n }\n else {\n // Specially handled for nested table cases\n // selection start inside table and end in paragraph outside table\n if (isNullOrUndefined(endCell) && startCell.ownerTable.associatedCell) {\n var startTable = startCell.getContainerTable();\n var lastRow = startTable.childWidgets[startTable.childWidgets.length - 1];\n var endCell_1 = lastRow.childWidgets[lastRow.childWidgets.length - 1];\n if (endCell_1.ownerTable !== startCell.ownerTable && startCell.ownerTable.associatedCell\n && (startCell.ownerTable.associatedCell.childWidgets.indexOf(startCell.ownerTable) === 0)) {\n while (startCell.ownerTable !== endCell_1.ownerTable) {\n startCell = startCell.ownerTable.associatedCell;\n }\n }\n this.endColumnIndex = endCell_1.columnIndex + endCell_1.cellFormat.columnSpan;\n this.startColumnIndex = startCell.columnIndex;\n }\n var table = this.createTable(startCell.ownerTable);\n section[blocksProperty[this.keywordIndex]].push(table);\n var lastBlock = startCell.ownerTable;\n nextBlock = this.writeTable(startCell.ownerTable, table, startCell.ownerRow.indexInOwner, section[blocksProperty[this.keywordIndex]]);\n if (this.isPartialExport) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document[sectionsProperty[this.keywordIndex]][this.document[sectionsProperty[this.keywordIndex]].length - 1];\n }\n while (nextBlock) {\n lastBlock = nextBlock;\n nextBlock = this.writeBlock(nextBlock, 0, section[blocksProperty[this.keywordIndex]]);\n if (this.isPartialExport) {\n nextBlock = this.getNextBlock(nextBlock, lastBlock);\n section = this.document[sectionsProperty[this.keywordIndex]][this.document[sectionsProperty[this.keywordIndex]].length - 1];\n }\n }\n }\n }\n else {\n this.isExport = true;\n if (this.documentHelper.pages.length > 0) {\n var page = this.documentHelper.pages[0];\n this.writePage(page);\n }\n }\n this.document[backgroundProperty[this.keywordIndex]] = (_a = {}, _a[colorProperty[this.keywordIndex]] = this.documentHelper.backgroundColor, _a);\n this.writeStyles(this.documentHelper);\n this.writeLists(this.documentHelper);\n this.writeComments(this.documentHelper);\n this.writeRevisions(this.documentHelper);\n this.writeCustomXml(this.documentHelper);\n this.writeImages(this.documentHelper);\n this.footnotes(this.documentHelper);\n this.endnotes(this.documentHelper);\n var doc = this.document;\n this.clear();\n return doc;\n };\n SfdtExport.prototype.getNextBlock = function (nextBlock, lastBlock) {\n if (isNullOrUndefined(nextBlock) && this.isPartialExport && this.endBlock\n && !this.endBlock.equals(lastBlock)) {\n nextBlock = lastBlock.getSplitWidgets().pop().nextRenderedWidget;\n if (nextBlock && lastBlock.bodyWidget.index !== nextBlock.bodyWidget.index) {\n var section = this.createSection(nextBlock.bodyWidget);\n this.document[sectionsProperty[this.keywordIndex]].push(section);\n }\n else {\n nextBlock = undefined;\n }\n }\n return nextBlock;\n };\n /**\n * @private\n */\n SfdtExport.prototype.Initialize = function () {\n this.lists = [];\n this.images = [];\n this.document = {};\n this.document.optimizeSfdt = this.owner.documentEditorSettings.optimizeSfdt;\n this.document[sectionsProperty[this.keywordIndex]] = [];\n this.document[characterFormatProperty[this.keywordIndex]] = this.writeCharacterFormat(this.documentHelper.characterFormat, this.keywordIndex);\n this.document[paragraphFormatProperty[this.keywordIndex]] = this.writeParagraphFormat(this.documentHelper.paragraphFormat, this.keywordIndex);\n if (!isNullOrUndefined(this.documentHelper.fontSubstitutionTable)) {\n this.document[fontSubstitutionTableProperty[this.keywordIndex]] = this.writeFontSubsitutionTable(this.documentHelper);\n }\n this.document[themeFontLanguagesProperty[this.keywordIndex]] = this.writeCharacterFormat(this.documentHelper.themeFontLanguage, this.keywordIndex);\n this.document[defaultTabWidthProperty[this.keywordIndex]] = this.documentHelper.defaultTabWidth;\n this.document[trackChangesProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(this.owner.enableTrackChanges, this.keywordIndex);\n this.document[enforcementProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(this.documentHelper.isDocumentProtected, this.keywordIndex);\n this.document[hashValueProperty[this.keywordIndex]] = this.documentHelper.hashValue;\n this.document[saltValueProperty[this.keywordIndex]] = this.documentHelper.saltValue;\n this.document[formattingProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(this.documentHelper.restrictFormatting, this.keywordIndex);\n this.document[protectionTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getProtectionTypeEnumValue(this.documentHelper.protectionType) : this.documentHelper.protectionType;\n this.document[doNotUseHTMLParagraphAutoSpacingProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(this.documentHelper.dontUseHtmlParagraphAutoSpacing, this.keywordIndex);\n this.document[formFieldShadingProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(this.documentHelper.owner.documentEditorSettings.formFieldSettings.applyShading, this.keywordIndex);\n this.document[compatibilityModeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getCompatibilityModeEnumValue(this.documentHelper.compatibilityMode) : this.documentHelper.compatibilityMode;\n this.document[allowSpaceOfSameStyleInTableProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(this.documentHelper.allowSpaceOfSameStyleInTable, this.keywordIndex);\n if (this.documentHelper.hasThemes) {\n this.document[themesProperty[this.keywordIndex]] = this.writeThemes(this.documentHelper.themes);\n }\n };\n SfdtExport.prototype.writeFontSubsitutionTable = function (documentHelper) {\n var fontSubstitutionTable = {};\n for (var i = 0; i < documentHelper.fontSubstitutionTable.length; i++) {\n var key = documentHelper.fontSubstitutionTable.keys[i];\n fontSubstitutionTable[key] = this.documentHelper.fontSubstitutionTable.get(key);\n }\n return fontSubstitutionTable;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writePage = function (page) {\n if (page.bodyWidgets.length > 0) {\n var nextBlock = page.bodyWidgets[0];\n do {\n nextBlock = this.writeBodyWidget(nextBlock, 0);\n } while (!isNullOrUndefined(nextBlock));\n }\n return this.document;\n };\n SfdtExport.prototype.writeBodyWidget = function (bodyWidget, index) {\n if (!(bodyWidget instanceof BodyWidget)) {\n return undefined;\n }\n var section = this.createSection(bodyWidget);\n this.document[sectionsProperty[this.keywordIndex]].push(section);\n this.writeHeaderFooters(this.documentHelper.headersFooters[bodyWidget.index], section);\n var firstBlock = bodyWidget.childWidgets[index];\n if (isNullOrUndefined(firstBlock) && bodyWidget.nextRenderedWidget) {\n firstBlock = bodyWidget.nextRenderedWidget.childWidgets[index];\n }\n do {\n firstBlock = this.writeBlock(firstBlock, 0, section[blocksProperty[this.keywordIndex]]);\n } while (firstBlock);\n var next = bodyWidget;\n do {\n bodyWidget = next;\n next = next.nextRenderedWidget;\n if (isNullOrUndefined(next) && !isNullOrUndefined(bodyWidget.page.nextPage) && !isNullOrUndefined(bodyWidget.page.nextPage)) {\n next = bodyWidget.page.nextPage.bodyWidgets[0];\n }\n } while (next instanceof BodyWidget && next.index === bodyWidget.index);\n // While importing, If the last paragraph is empty and the section break is present, then the empty paragraph is removed. So, added the empty paragraph at the end of the section while exporting.\n var islastEmptyParagraph;\n if (!isNullOrUndefined(bodyWidget.lastChild) && bodyWidget.lastChild instanceof ParagraphWidget) {\n islastEmptyParagraph = bodyWidget.lastChild.isEmpty();\n if (bodyWidget.lastChild.isSectionBreak && !isNullOrUndefined(bodyWidget.lastChild.previousRenderedWidget) && bodyWidget.lastChild.previousRenderedWidget instanceof TableWidget) {\n islastEmptyParagraph = false;\n }\n }\n if (!isNullOrUndefined(next) && next instanceof BodyWidget && bodyWidget.sectionIndex !== next.sectionIndex && islastEmptyParagraph && !this.isWordExport) {\n var paragraph = {};\n paragraph[inlinesProperty[this.keywordIndex]] = [];\n section[blocksProperty[this.keywordIndex]].push(paragraph);\n }\n return next;\n };\n SfdtExport.prototype.writeHeaderFooters = function (hfs, section) {\n if (isNullOrUndefined(hfs)) {\n return;\n }\n var headersFooters = section[headersFootersProperty[this.keywordIndex]];\n if (!(isNullOrUndefined(hfs[0]) || hfs[0].isEmpty)) {\n headersFooters[headerProperty[this.keywordIndex]] = this.writeHeaderFooter(hfs[0]);\n if (JSON.stringify(headersFooters[headerProperty[this.keywordIndex]]) == \"{}\") {\n delete headersFooters[headerProperty[this.keywordIndex]];\n }\n }\n if (!(isNullOrUndefined(hfs[1]) || hfs[1].isEmpty)) {\n headersFooters[footerProperty[this.keywordIndex]] = this.writeHeaderFooter(hfs[1]);\n if (JSON.stringify(headersFooters[footerProperty[this.keywordIndex]]) == \"{}\") {\n delete headersFooters[footerProperty[this.keywordIndex]];\n }\n }\n if (!(isNullOrUndefined(hfs[2]) || hfs[2].isEmpty)) {\n headersFooters[evenHeaderProperty[this.keywordIndex]] = this.writeHeaderFooter(hfs[2]);\n if (JSON.stringify(headersFooters[evenHeaderProperty[this.keywordIndex]]) == \"{}\") {\n delete headersFooters[evenHeaderProperty[this.keywordIndex]];\n }\n }\n if (!(isNullOrUndefined(hfs[3]) || hfs[3].isEmpty)) {\n headersFooters[evenFooterProperty[this.keywordIndex]] = this.writeHeaderFooter(hfs[3]);\n if (JSON.stringify(headersFooters[evenFooterProperty[this.keywordIndex]]) == \"{}\") {\n delete headersFooters[evenFooterProperty[this.keywordIndex]];\n }\n }\n if (!(isNullOrUndefined(hfs[4]) || hfs[4].isEmpty)) {\n headersFooters[firstPageHeaderProperty[this.keywordIndex]] = this.writeHeaderFooter(hfs[4]);\n if (JSON.stringify(headersFooters[firstPageHeaderProperty[this.keywordIndex]]) == \"{}\") {\n delete headersFooters[firstPageHeaderProperty[this.keywordIndex]];\n }\n }\n if (!(isNullOrUndefined(hfs[5]) || hfs[5].isEmpty)) {\n headersFooters[firstPageFooterProperty[this.keywordIndex]] = this.writeHeaderFooter(hfs[5]);\n if (JSON.stringify(headersFooters[firstPageFooterProperty[this.keywordIndex]]) == \"{}\") {\n delete headersFooters[firstPageFooterProperty[this.keywordIndex]];\n }\n }\n };\n SfdtExport.prototype.writeHeaderFooter = function (widget) {\n if (isNullOrUndefined(widget) || widget.isEmpty) {\n return undefined;\n }\n var headerFooter = {};\n if (widget && widget.childWidgets && widget.childWidgets.length > 0) {\n headerFooter[blocksProperty[this.keywordIndex]] = [];\n var firstBlock = widget.firstChild;\n do {\n firstBlock = this.writeBlock(firstBlock, 0, headerFooter[blocksProperty[this.keywordIndex]]);\n } while (firstBlock);\n }\n return headerFooter;\n };\n SfdtExport.prototype.createSection = function (bodyWidget) {\n var section = {};\n section[sectionFormatProperty[this.keywordIndex]] = {};\n section[sectionFormatProperty[this.keywordIndex]] = this.writeSectionFormat(bodyWidget.sectionFormat, section[sectionFormatProperty[this.keywordIndex]], this.keywordIndex);\n section[blocksProperty[this.keywordIndex]] = [];\n section[headersFootersProperty[this.keywordIndex]] = {};\n return section;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeSectionFormat = function (sectionFormat, section, keywordIndex) {\n section[pageWidthProperty[keywordIndex]] = sectionFormat.pageWidth;\n section[pageHeightProperty[keywordIndex]] = sectionFormat.pageHeight;\n section[leftMarginProperty[keywordIndex]] = sectionFormat.leftMargin;\n section[rightMarginProperty[keywordIndex]] = sectionFormat.rightMargin;\n section[topMarginProperty[keywordIndex]] = sectionFormat.topMargin;\n section[bottomMarginProperty[keywordIndex]] = sectionFormat.bottomMargin;\n section[headerDistanceProperty[keywordIndex]] = sectionFormat.headerDistance;\n section[footerDistanceProperty[keywordIndex]] = sectionFormat.footerDistance;\n section[differentFirstPageProperty[keywordIndex]] = HelperMethods.getBoolInfo(sectionFormat.differentFirstPage, keywordIndex);\n section[differentOddAndEvenPagesProperty[keywordIndex]] = HelperMethods.getBoolInfo(sectionFormat.differentOddAndEvenPages, keywordIndex);\n section[bidiProperty[keywordIndex]] = HelperMethods.getBoolInfo(sectionFormat.bidi, keywordIndex);\n if (!isNullOrUndefined(sectionFormat.breakCode)) {\n section[breakCodeProperty[keywordIndex]] = sectionFormat.breakCode;\n }\n if (sectionFormat.restartPageNumbering) {\n section[restartPageNumberingProperty[keywordIndex]] = HelperMethods.getBoolInfo(sectionFormat.restartPageNumbering, keywordIndex);\n section[pageStartingNumberProperty[keywordIndex]] = sectionFormat.pageStartingNumber;\n }\n section[endnoteNumberFormatProperty[keywordIndex]] = keywordIndex == 1 ? this.getFootEndNoteNumberFormatEnumValue(sectionFormat.endnoteNumberFormat) : sectionFormat.endnoteNumberFormat;\n section[footNoteNumberFormatProperty[keywordIndex]] = keywordIndex == 1 ? this.getFootEndNoteNumberFormatEnumValue(sectionFormat.footNoteNumberFormat) : sectionFormat.footNoteNumberFormat;\n section[restartIndexForFootnotesProperty[keywordIndex]] = keywordIndex == 1 ? this.getFootnoteRestartIndexEnumValue(sectionFormat.restartIndexForFootnotes) : sectionFormat.restartIndexForFootnotes;\n section[restartIndexForEndnotesProperty[keywordIndex]] = keywordIndex == 1 ? this.getFootnoteRestartIndexEnumValue(sectionFormat.restartIndexForEndnotes) : sectionFormat.restartIndexForEndnotes;\n section[initialFootNoteNumberProperty[keywordIndex]] = sectionFormat.initialFootNoteNumber;\n section[initialEndNoteNumberProperty[keywordIndex]] = sectionFormat.initialEndNoteNumber;\n if (!isNullOrUndefined(sectionFormat.pageNumberStyle)) {\n section[pageNumberStyleProperty[keywordIndex]] = sectionFormat.pageNumberStyle;\n }\n if (!isNullOrUndefined(sectionFormat.columns) && !isNullOrUndefined(sectionFormat.numberOfColumns && sectionFormat.numberOfColumns > 1)) {\n var cols = sectionFormat.columns;\n section[numberOfColumnsProperty[keywordIndex]] = sectionFormat.numberOfColumns;\n section[equalWidthProperty[keywordIndex]] = HelperMethods.getBoolInfo(sectionFormat.equalWidth, keywordIndex);\n section[lineBetweenColumnsProperty[keywordIndex]] = HelperMethods.getBoolInfo(sectionFormat.lineBetweenColumns, keywordIndex);\n section[columnsProperty[keywordIndex]] = [];\n for (var i = 0; i < cols.length; i++) {\n var newCol = {};\n newCol[widthProperty[keywordIndex]] = HelperMethods.convertPixelToPoint(cols[i].width);\n newCol[spaceProperty[keywordIndex]] = HelperMethods.convertPixelToPoint(cols[i].space);\n section[columnsProperty[keywordIndex]].push(newCol);\n }\n }\n return section;\n };\n SfdtExport.prototype.writeBlock = function (widget, index, blocks) {\n if (!(widget instanceof BlockWidget)) {\n return undefined;\n }\n if (widget instanceof ParagraphWidget) {\n if (widget.hasOwnProperty('contentControlProperties') && widget.contentControlProperties.type !== 'BuildingBlockGallery') {\n var block = this.blockContentControl(widget);\n this.blockContent = false;\n if (!isNullOrUndefined(block) && (this.isBlockClosed || !this.nestedBlockContent)) {\n this.nestedBlockEnabled = false;\n blocks.push(block);\n this.blocks = [];\n }\n return this.nextBlock;\n }\n else {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n return this.writeParagraph(widget, paragraph, blocks);\n }\n }\n else {\n var tableWidget = widget;\n if (tableWidget.hasOwnProperty('contentControlProperties') && tableWidget.contentControlProperties.type !== 'BuildingBlockGallery') {\n var block = this.tableContentControl(tableWidget);\n if (!isNullOrUndefined(block) && this.isBlockClosed) {\n blocks.push(block);\n }\n return this.nextBlock;\n }\n var table = this.createTable(tableWidget);\n blocks.push(table);\n return this.writeTable(tableWidget, table, 0, blocks);\n }\n };\n SfdtExport.prototype.writeParagraphs = function (widget) {\n var blocks = this.blocks;\n var child = widget.childWidgets[0];\n var firstElement = child.children[0];\n var secondElement = child.children[1];\n if (firstElement instanceof ListTextElementBox || secondElement instanceof ListTextElementBox) {\n firstElement = child.children[2];\n secondElement = child.children[3];\n }\n if (!isNullOrUndefined(widget.contentControlProperties)\n && widget.containerWidget instanceof TableCellWidget\n && !isNullOrUndefined(widget.containerWidget.containerWidget)\n && !isNullOrUndefined(widget.containerWidget.containerWidget.containerWidget.contentControlProperties)) {\n blocks = [];\n }\n if (this.nestedBlockEnabled) {\n blocks = [];\n }\n if ((firstElement instanceof ContentControl && secondElement instanceof ContentControl && !this.nestedBlockContent) || (this.blockContent && firstElement instanceof ContentControl && !this.nestedBlockContent)) {\n var nestedBlocks = false;\n if (secondElement instanceof ContentControl) {\n if (secondElement.contentControlWidgetType === 'Block') {\n nestedBlocks = true;\n }\n }\n if ((nestedBlocks || (this.blockContent && firstElement instanceof ContentControl && !this.nestedBlockContent && firstElement.type === 0 && secondElement instanceof ContentControl && firstElement.contentControlWidgetType === 'Block'))) {\n this.nestedBlockContent = true;\n this.nestedBlockEnabled = true;\n var block = this.blockContentControl(widget);\n if (!isNullOrUndefined(block)) {\n this.blocks.push(block);\n }\n }\n else {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n this.nextBlock = this.writeParagraph(widget, paragraph, blocks);\n }\n }\n else {\n var paragraph = this.createParagraph(widget);\n blocks.push(paragraph);\n this.nextBlock = this.writeParagraph(widget, paragraph, blocks);\n }\n if (!this.nestedBlockContent && this.nestedBlockEnabled) {\n this.nestedBlockEnabled = false;\n }\n return blocks;\n };\n SfdtExport.prototype.contentControlProperty = function (contentControlPropertie) {\n var contentControlProperties = {};\n var contentControlListItems = [];\n contentControlProperties[lockContentControlProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(contentControlPropertie.lockContentControl, this.keywordIndex);\n contentControlProperties[lockContentsProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(contentControlPropertie.lockContents, this.keywordIndex);\n contentControlProperties[tagProperty[this.keywordIndex]] = contentControlPropertie.tag;\n contentControlProperties[colorProperty[this.keywordIndex]] = contentControlPropertie.color;\n contentControlProperties[titleProperty[this.keywordIndex]] = contentControlPropertie.title;\n if (!isNullOrUndefined(contentControlPropertie.appearance)) {\n contentControlProperties[appearanceProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getContentControlAppearanceEnumValue(contentControlPropertie.appearance) : contentControlPropertie.appearance;\n }\n contentControlProperties[typeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getContentControlTypeEnumValue(contentControlPropertie.type) : contentControlPropertie.type;\n contentControlProperties[hasPlaceHolderTextProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(contentControlPropertie.hasPlaceHolderText, this.keywordIndex);\n contentControlProperties[multiLineProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(contentControlPropertie.multiline, this.keywordIndex);\n contentControlProperties[isTemporaryProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(contentControlPropertie.isTemporary, this.keywordIndex);\n if (!isNullOrUndefined(contentControlPropertie.isChecked)) {\n contentControlProperties[isCheckedProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(contentControlPropertie.isChecked, this.keywordIndex);\n }\n if (!isNullOrUndefined(contentControlPropertie.uncheckedState)) {\n contentControlProperties[uncheckedStateProperty[this.keywordIndex]] = this.tounCheckedState(contentControlPropertie.uncheckedState);\n }\n if (!isNullOrUndefined(contentControlPropertie.checkedState)) {\n contentControlProperties[checkedStateProperty[this.keywordIndex]] = this.toCheckedState(contentControlPropertie.checkedState);\n }\n if (!isNullOrUndefined(contentControlPropertie.dateCalendarType)) {\n contentControlProperties[dateCalendarTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getDateCalendarTypeEnumValue(contentControlPropertie.dateCalendarType) : contentControlPropertie.dateCalendarType;\n }\n if (!isNullOrUndefined(contentControlPropertie.dateStorageFormat)) {\n contentControlProperties[dateStorageFormatProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getDateStorageFormatEnumValue(contentControlPropertie.dateStorageFormat) : contentControlPropertie.dateStorageFormat;\n }\n if (!isNullOrUndefined(contentControlPropertie.dateDisplayLocale)) {\n contentControlProperties[dateDisplayLocaleProperty[this.keywordIndex]] = contentControlPropertie.dateDisplayLocale;\n }\n if (!isNullOrUndefined(contentControlPropertie.dateDisplayFormat)) {\n contentControlProperties[dateDisplayFormatProperty[this.keywordIndex]] = contentControlPropertie.dateDisplayFormat;\n }\n if (!isNullOrUndefined(contentControlPropertie.xmlMapping)) {\n var xmlMapping = {};\n var customXmlPart = {};\n xmlMapping[isMappedProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(contentControlPropertie.xmlMapping.isMapped, this.keywordIndex);\n xmlMapping[isWordMlProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(contentControlPropertie.xmlMapping.isWordMl, this.keywordIndex);\n if (!isNullOrUndefined(contentControlPropertie.xmlMapping.prefixMapping)) {\n xmlMapping[prefixMappingProperty[this.keywordIndex]] = contentControlPropertie.xmlMapping.prefixMapping;\n }\n xmlMapping[xPathProperty[this.keywordIndex]] = contentControlPropertie.xmlMapping.xPath;\n xmlMapping[storeItemIdProperty[this.keywordIndex]] = contentControlPropertie.xmlMapping.storeItemId;\n if (!isNullOrUndefined(contentControlPropertie.xmlMapping.customXmlPart)) {\n customXmlPart[idProperty[this.keywordIndex]] = contentControlPropertie.xmlMapping.customXmlPart.id;\n customXmlPart[xmlProperty[this.keywordIndex]] = contentControlPropertie.xmlMapping.customXmlPart.xml;\n xmlMapping[customXmlPartProperty[this.keywordIndex]] = customXmlPart;\n }\n contentControlProperties[xmlMappingProperty[this.keywordIndex]] = xmlMapping;\n }\n if (!isNullOrUndefined(contentControlPropertie.characterFormat)) {\n contentControlProperties[characterFormatProperty[this.keywordIndex]] = this.writeCharacterFormat(contentControlPropertie.characterFormat, this.keywordIndex);\n }\n if (!isNullOrUndefined(contentControlPropertie.contentControlListItems)) {\n for (var i = 0; i < contentControlPropertie.contentControlListItems.length; i++) {\n var listItems = {};\n listItems[displayTextProperty[this.keywordIndex]] = contentControlPropertie.contentControlListItems[i].displayText;\n listItems[valueProperty[this.keywordIndex]] = contentControlPropertie.contentControlListItems[i].value;\n contentControlListItems.push(listItems);\n }\n }\n contentControlProperties[contentControlListItemsProperty[this.keywordIndex]] = contentControlListItems;\n return contentControlProperties;\n };\n SfdtExport.prototype.tounCheckedState = function (state) {\n var unCheckedState = {};\n unCheckedState[fontProperty[this.keywordIndex]] = state.font;\n unCheckedState[valueProperty[this.keywordIndex]] = state.value;\n return unCheckedState;\n };\n SfdtExport.prototype.toCheckedState = function (state) {\n var checkedState = {};\n checkedState[fontProperty[this.keywordIndex]] = state.font;\n checkedState[valueProperty[this.keywordIndex]] = state.value;\n return checkedState;\n };\n SfdtExport.prototype.blockContentControl = function (widget) {\n var block = {};\n if (widget.childWidgets.length === 0) {\n this.nextBlock = widget.nextWidget;\n return undefined;\n }\n block[blocksProperty[this.keywordIndex]] = this.writeParagraphs(widget);\n if (!isNullOrUndefined(this.nextBlock)) {\n if (widget.contentControlProperties === this.nextBlock.contentControlProperties) {\n this.isBlockClosed = false;\n this.nestedBlockContent = true;\n return this.blocks = block[blocksProperty[this.keywordIndex]];\n }\n else {\n this.isBlockClosed = true;\n }\n }\n else {\n this.isBlockClosed = true;\n }\n if (!isNullOrUndefined(block[blocksProperty[this.keywordIndex]])) {\n var child = widget.childWidgets[0];\n var firstChild = child.children[0];\n var secondChild = child.children[1];\n if (firstChild instanceof ListTextElementBox || secondChild instanceof ListTextElementBox) {\n firstChild = child.children[2];\n secondChild = child.children[3];\n }\n if ((firstChild instanceof ContentControl && secondChild instanceof ContentControl && !this.nestedBlockContent) || (this.blockContent && firstChild instanceof ContentControl && !this.nestedBlockContent)) {\n if (!(secondChild instanceof ContentControl)) {\n block[contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(firstChild.contentControlProperties);\n return block;\n }\n else if (secondChild.contentControlWidgetType === 'Block') {\n block[contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(secondChild.contentControlProperties);\n }\n else {\n block[contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(widget.contentControlProperties);\n }\n }\n else {\n block[contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(widget.contentControlProperties);\n }\n return block;\n }\n };\n SfdtExport.prototype.tableContentControl = function (tableWidget) {\n var block = {};\n block[blocksProperty[this.keywordIndex]] = this.tableContentControls(tableWidget);\n if (!isNullOrUndefined(this.nextBlock)) {\n if (tableWidget.contentControlProperties === this.nextBlock.contentControlProperties) {\n this.isBlockClosed = false;\n return this.blocks = block[blocksProperty[this.keywordIndex]];\n }\n else {\n this.isBlockClosed = true;\n }\n }\n block[contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(tableWidget.contentControlProperties);\n return block;\n };\n SfdtExport.prototype.tableContentControls = function (tableWidget) {\n var blocks = [];\n if (!this.isBlockClosed) {\n blocks = this.blocks;\n }\n var table = this.createTable(tableWidget);\n blocks.push(table);\n this.nextBlock = this.writeTable(tableWidget, table, 0, blocks);\n return blocks;\n };\n SfdtExport.prototype.writeParagraph = function (paragraphWidget, paragraph, blocks, lineIndex, start) {\n if (isNullOrUndefined(lineIndex)) {\n lineIndex = 0;\n }\n if (isNullOrUndefined(start)) {\n start = 0;\n }\n var next = paragraphWidget;\n while (next instanceof ParagraphWidget) {\n if (this.writeLines(next, lineIndex, start, paragraph[inlinesProperty[this.keywordIndex]])) {\n if (this.endLine === next.lastChild && this.endOffset === this.owner.selection.getLineLength(next.lastChild) + 1) {\n blocks.push(this.createParagraph(next));\n }\n return undefined;\n }\n lineIndex = 0;\n start = 0;\n paragraphWidget = next;\n next = paragraphWidget.nextSplitWidget;\n }\n next = paragraphWidget.nextRenderedWidget;\n if (this.documentHelper.owner.layoutType !== 'Continuous' && isNullOrUndefined(next) && paragraphWidget.containerWidget instanceof BodyWidget &&\n !isNullOrUndefined(paragraphWidget.containerWidget.page.nextPage) &&\n !isNullOrUndefined(paragraphWidget.containerWidget.page.nextPage.bodyWidgets)) {\n next = paragraphWidget.containerWidget.page.nextPage.bodyWidgets[0].childWidgets[0];\n }\n if (this.isExport) {\n return (next instanceof BlockWidget && paragraphWidget.containerWidget.index === next.containerWidget.index) ? next : undefined;\n }\n else {\n return next;\n }\n };\n SfdtExport.prototype.writeInlines = function (paragraph, line, inlines) {\n this.contentInline = [];\n var lineWidget = line;\n var isformField = false;\n for (var i = 0; i < lineWidget.children.length; i++) {\n var element = lineWidget.children[i];\n if (this.isExport && this.checkboxOrDropdown) {\n if (isformField && element instanceof TextElementBox) {\n continue;\n }\n if (element instanceof FieldElementBox && element.fieldType === 2) {\n isformField = true;\n }\n }\n if (element instanceof ListTextElementBox) {\n continue;\n }\n if (element instanceof FootnoteElementBox) {\n inlines.push(this.writeInlinesFootNote(element));\n continue;\n }\n if (element instanceof ContentControl || (this.startContent && !this.blockContent)) {\n this.writeInlinesContentControl(element, line, inlines, i);\n }\n else {\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines.push(inline);\n }\n }\n if (this.isExport && element instanceof FieldElementBox && element.fieldType === 1) {\n isformField = false;\n this.checkboxOrDropdown = false;\n }\n }\n };\n SfdtExport.prototype.inlineContentControl = function (element, nextElement, inlines) {\n var inline = {};\n var nestedContentInline = [];\n if (!isNullOrUndefined(inlines)) {\n if (this.nestedContent) {\n inlines = inlines[inlines.length - 1][inlinesProperty[this.keywordIndex]];\n if (inlines[inlines.length - 1][inlinesProperty[this.keywordIndex]] == undefined) {\n inlines[inlines.length - 1][inlinesProperty[this.keywordIndex]] = [];\n }\n // if (isNullOrUndefined(inlines[inlines.length - 1][inlinesProperty[this.keywordIndex]])) {\n // let nestInlines:any =[];\n // // nestInlines.inlines=[];\n // let inlineObject:{}={[inlinesProperty[this.keywordIndex]]:nestInlines}\n // inlines.push(inlineObject);\n // }\n inline = this.inlineContentControls(element, inlines[inlines.length - 1][inlinesProperty[this.keywordIndex]]);\n var nestedContentinline = this.nestedContentProperty(nextElement, inlines[inlines.length - 1]);\n if (!isNullOrUndefined(nestedContentinline)) {\n this.contentInline.push(inline);\n nestedContentInline = [];\n }\n }\n else {\n this.inlineContentControls(element, inlines[inlines.length - 1][inlinesProperty[this.keywordIndex]]);\n }\n }\n else {\n if (this.nestedContent) {\n inline[inlinesProperty[this.keywordIndex]] = this.inlineContentControls(element, undefined, nestedContentInline);\n var nestedContentinline = this.nestedContentProperty(nextElement, inline);\n if (!isNullOrUndefined(nestedContentinline) || this.multipleLineContent) {\n this.contentInline.push(inline);\n nestedContentInline = [];\n }\n }\n else {\n inline[inlinesProperty[this.keywordIndex]] = this.inlineContentControls(element, this.contentInline);\n }\n }\n if (nextElement instanceof ContentControl && nextElement.type === 1 && !this.nestedContent) {\n if (this.multipleLineContent && !isNullOrUndefined(inlines)) {\n inlines[inlines.length - 1][contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(nextElement.contentControlProperties);\n this.multipleLineContent = false;\n return;\n }\n else {\n inline[contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(nextElement.contentControlProperties);\n }\n return inline;\n }\n else if (this.startContent) {\n this.multipleLineContent = true;\n return inline;\n }\n };\n SfdtExport.prototype.nestedContentProperty = function (nextElement, inline, inlines) {\n if (!isNullOrUndefined(nextElement)) {\n if (nextElement.type === 1) {\n inline[contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(nextElement.contentControlProperties);\n return inline;\n }\n else if (this.startContent) {\n this.multipleLineContent = true;\n return inline;\n }\n }\n else if (this.startContent) {\n this.multipleLineContent = true;\n return inline;\n }\n };\n SfdtExport.prototype.inlineContentControls = function (element, contentInline, nestedContentInline) {\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(nestedContentInline)) {\n nestedContentInline.push(inline);\n return nestedContentInline;\n }\n contentInline.push(inline);\n return contentInline;\n };\n /* eslint-disable */\n SfdtExport.prototype.writeInline = function (element) {\n var inline = {};\n if (element.removedIds.length > 0) {\n for (var i = 0; i < element.removedIds.length; i++) {\n element.revisions[i] = this.documentHelper.revisionsInternal.get(element.removedIds[i]);\n }\n }\n inline[characterFormatProperty[this.keywordIndex]] = this.writeCharacterFormat(element.characterFormat, this.keywordIndex);\n if (element instanceof FieldElementBox) {\n inline[fieldTypeProperty[this.keywordIndex]] = element.fieldType;\n if (element.fieldType === 0) {\n inline[hasFieldEndProperty[this.keywordIndex]] = element.hasFieldEnd;\n if (element.formFieldData) {\n inline[formFieldDataProperty[this.keywordIndex]] = {};\n inline[formFieldDataProperty[this.keywordIndex]][nameProperty[this.keywordIndex]] = element.formFieldData.name;\n inline[formFieldDataProperty[this.keywordIndex]][enabledProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.formFieldData.enabled, this.keywordIndex);\n inline[formFieldDataProperty[this.keywordIndex]][helpTextProperty[this.keywordIndex]] = element.formFieldData.helpText;\n inline[formFieldDataProperty[this.keywordIndex]][statusTextProperty[this.keywordIndex]] = element.formFieldData.statusText;\n if (element.formFieldData instanceof TextFormField) {\n inline[formFieldDataProperty[this.keywordIndex]][textInputProperty[this.keywordIndex]] = {};\n inline[formFieldDataProperty[this.keywordIndex]][textInputProperty[this.keywordIndex]][typeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTextFormFieldTypeEnumValue(element.formFieldData.type) : element.formFieldData.type;\n inline[formFieldDataProperty[this.keywordIndex]][textInputProperty[this.keywordIndex]][maxLengthProperty[this.keywordIndex]] = element.formFieldData.maxLength;\n inline[formFieldDataProperty[this.keywordIndex]][textInputProperty[this.keywordIndex]][defaultValueProperty[this.keywordIndex]] = element.formFieldData.defaultValue;\n inline[formFieldDataProperty[this.keywordIndex]][textInputProperty[this.keywordIndex]][formatProperty[this.keywordIndex]] = this.keywordIndex == 1 && element.formFieldData.type === 'Text' ? this.getTextFormFieldFormatEnumValue(element.formFieldData.format) : element.formFieldData.format;\n }\n else if (element.formFieldData instanceof CheckBoxFormField) {\n inline[formFieldDataProperty[this.keywordIndex]][checkBoxProperty[this.keywordIndex]] = {};\n this.checkboxOrDropdown = true;\n inline[formFieldDataProperty[this.keywordIndex]][checkBoxProperty[this.keywordIndex]][sizeTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getCheckBoxSizeTypeEnumValue(element.formFieldData.sizeType) : element.formFieldData.sizeType;\n inline[formFieldDataProperty[this.keywordIndex]][checkBoxProperty[this.keywordIndex]][sizeProperty[this.keywordIndex]] = element.formFieldData.size;\n inline[formFieldDataProperty[this.keywordIndex]][checkBoxProperty[this.keywordIndex]][defaultValueProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.formFieldData.defaultValue, this.keywordIndex);\n inline[formFieldDataProperty[this.keywordIndex]][checkBoxProperty[this.keywordIndex]][checkedProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.formFieldData.checked, this.keywordIndex);\n }\n else {\n inline[formFieldDataProperty[this.keywordIndex]][dropDownListProperty[this.keywordIndex]] = {};\n this.checkboxOrDropdown = true;\n inline[formFieldDataProperty[this.keywordIndex]][dropDownListProperty[this.keywordIndex]][dropDownItemsProperty[this.keywordIndex]] = element.formFieldData.dropdownItems;\n inline[formFieldDataProperty[this.keywordIndex]][dropDownListProperty[this.keywordIndex]][selectedIndexProperty[this.keywordIndex]] = element.formFieldData.selectedIndex;\n }\n }\n }\n if (element.fieldCodeType && element.fieldCodeType !== '') {\n inline.fieldCodeType = element.fieldCodeType;\n }\n }\n else if (element instanceof ChartElementBox) {\n this.writeChart(element, inline);\n }\n else if (element instanceof ImageElementBox) {\n inline[imageStringProperty[this.keywordIndex]] = element.imageString;\n this.images.push(parseInt(element.imageString, 10));\n inline[metaFileImageStringProperty[this.keywordIndex]] = element.metaFileImageString;\n inline[isMetaFileProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.isMetaFile, this.keywordIndex);\n inline[isCompressedProperty[this.keywordIndex]] = element.isCompressed;\n inline[widthProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.width);\n inline[heightProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.height);\n //inline.iscrop = element.isCrop;\n if (element.isCrop) {\n inline[bottomProperty[this.keywordIndex]] = element.bottom;\n inline[rightProperty[this.keywordIndex]] = element.right;\n inline[leftProperty[this.keywordIndex]] = element.left;\n inline[topProperty[this.keywordIndex]] = element.top;\n inline[getImageWidthProperty[this.keywordIndex]] = element.cropWidthScale;\n inline[getImageHeightProperty[this.keywordIndex]] = element.cropHeightScale;\n }\n inline[nameProperty[this.keywordIndex]] = element.name;\n inline[alternativeTextProperty[this.keywordIndex]] = element.alternateText;\n inline[titleProperty[this.keywordIndex]] = element.title;\n inline[visibleProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.visible, this.keywordIndex);\n inline[widthScaleProperty[this.keywordIndex]] = element.widthScale;\n inline[heightScaleProperty[this.keywordIndex]] = element.heightScale;\n inline[verticalPositionProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.verticalPosition);\n inline[verticalOriginProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getVerticalOriginEnumValue(element.verticalOrigin) : element.verticalOrigin;\n inline[verticalAlignmentProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getShapeVerticalAlignmentEnumValue(element.verticalAlignment) : element.verticalAlignment;\n inline[horizontalPositionProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.horizontalPosition);\n inline[horizontalOriginProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getHorizontalOriginEnumValue(element.horizontalOrigin) : element.horizontalOrigin;\n inline[horizontalAlignmentProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getShapeHorizontalAlignmentEnumValue(element.horizontalAlignment) : element.horizontalAlignment;\n inline[allowOverlapProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.allowOverlap, this.keywordIndex);\n inline[textWrappingStyleProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTextWrappingStyleEnumValue(element.textWrappingStyle) : element.textWrappingStyle;\n inline[textWrappingTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTextWrappingTypeEnumValue(element.textWrappingType) : element.textWrappingType;\n inline[belowTextProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.isBelowText, this.keywordIndex);\n if (!isNullOrUndefined(element.distanceBottom)) {\n inline[distanceBottomProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.distanceBottom);\n }\n if (!isNullOrUndefined(element.distanceLeft)) {\n inline[distanceLeftProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.distanceLeft);\n }\n if (!isNullOrUndefined(element.distanceRight)) {\n inline[distanceRightProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.distanceRight);\n }\n if (!isNullOrUndefined(element.distanceTop)) {\n inline[distanceTopProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.distanceTop);\n }\n inline[layoutInCellProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.layoutInCell, this.keywordIndex);\n inline[zOrderPositionProperty[this.keywordIndex]] = element.zOrderPosition;\n }\n else if (element instanceof BookmarkElementBox) {\n inline[bookmarkTypeProperty[this.keywordIndex]] = element.bookmarkType;\n inline[nameProperty[this.keywordIndex]] = element.name;\n if (!isNullOrUndefined(element.properties)) {\n var properties = {};\n if (!isNullOrUndefined(element.properties['isAfterParagraphMark'])) {\n properties[isAfterParagraphMarkProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.properties['isAfterParagraphMark'], this.keywordIndex);\n }\n if (!isNullOrUndefined(element.properties['isAfterTableMark'])) {\n properties[isAfterTableMarkProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.properties['isAfterTableMark'], this.keywordIndex);\n }\n if (!isNullOrUndefined(element.properties['isAfterRowMark'])) {\n properties[isAfterRowMarkProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.properties['isAfterRowMark'], this.keywordIndex);\n }\n if (!isNullOrUndefined(element.properties['isAfterCellMark'])) {\n properties[isAfterCellMarkProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.properties['isAfterCellMark'], this.keywordIndex);\n }\n if (!isNullOrUndefined(element.properties['columnFirst'])) {\n properties[columnFirstProperty[this.keywordIndex]] = element.properties['columnFirst'];\n }\n if (!isNullOrUndefined(element.properties['columnLast'])) {\n properties[columnLastProperty[this.keywordIndex]] = element.properties['columnLast'];\n }\n inline[propertiesProperty[this.keywordIndex]] = properties;\n }\n }\n else if (element instanceof BreakElementBox) {\n inline[breakClearTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? HelperMethods.getBreakClearType(element.breakClearType) : element.breakClearType;\n }\n else if (element instanceof FootnoteElementBox) {\n inline = this.writeInlinesFootNote(element);\n }\n else if (element instanceof TextElementBox) {\n var elementText = element.text;\n if (!this.isWriteEndFootNote && (isNullOrUndefined(this.owner.editorModule) || !this.owner.editorModule.isPaste)) {\n elementText = HelperMethods.removeInvalidXmlChars(elementText);\n }\n if (this.isWriteInlinesFootNote\n && element.indexInOwner === 0\n && element.line.indexInOwner === 0\n && element.paragraph.indexInOwner == 0\n && HelperMethods.checkTextFormat(elementText)) {\n elementText = \"\\u0002\";\n }\n // replacing the no break hyphen character by '-'\n if (elementText.indexOf(String.fromCharCode(30)) !== -1) {\n inline[textProperty[this.keywordIndex]] = elementText.replace(/\\u001e/g, '-');\n }\n else if (elementText.indexOf(String.fromCharCode(31)) !== -1) {\n inline[textProperty[this.keywordIndex]] = elementText.replace(/\\u001f/g, '');\n }\n else if (element instanceof FootnoteEndnoteMarkerElementBox) {\n inline[textProperty[this.keywordIndex]] = '\\u0002';\n }\n else if (element.revisions.length !== 0) {\n if (!this.isExport && this.owner.enableTrackChanges && !this.isPartialExport) {\n this.copyWithTrackChange = true;\n for (var x = 0; x < element.revisions.length; x++) {\n var revision = element.revisions[x];\n if (this.selectedRevisionId.indexOf(revision.revisionID) === -1) {\n this.selectedRevisionId.push(revision.revisionID);\n }\n if (element.revisions[x].revisionType !== 'Deletion') {\n inline[textProperty[this.keywordIndex]] = elementText;\n }\n }\n }\n else {\n inline[textProperty[this.keywordIndex]] = elementText;\n }\n }\n else {\n inline[textProperty[this.keywordIndex]] = elementText;\n }\n }\n else if (element instanceof EditRangeStartElementBox) {\n if (element.user !== '') {\n inline[userProperty[this.keywordIndex]] = element.user;\n }\n inline[groupProperty[this.keywordIndex]] = element.group;\n inline[columnFirstProperty[this.keywordIndex]] = element.columnFirst;\n inline[columnLastProperty[this.keywordIndex]] = element.columnLast;\n inline[editRangeIdProperty[this.keywordIndex]] = element.editRangeId.toString();\n }\n else if (element instanceof EditRangeEndElementBox) {\n inline[editableRangeStartProperty[this.keywordIndex]] = {};\n inline[editableRangeStartProperty[this.keywordIndex]][userProperty[this.keywordIndex]] = element.editRangeStart.user;\n inline[editableRangeStartProperty[this.keywordIndex]][groupProperty[this.keywordIndex]] = element.editRangeStart.group;\n inline[editableRangeStartProperty[this.keywordIndex]][columnFirstProperty[this.keywordIndex]] = element.editRangeStart.columnFirst;\n inline[editableRangeStartProperty[this.keywordIndex]][columnLastProperty[this.keywordIndex]] = element.editRangeStart.columnLast;\n inline[editRangeIdProperty[this.keywordIndex]] = element.editRangeId.toString();\n }\n else if (element instanceof CommentCharacterElementBox) {\n if (this.iscontentInsert) {\n if (!this.isExport && element.commentType === 0) {\n this.selectedCommentsId.push(element.commentId);\n }\n inline[commentCharacterTypeProperty[this.keywordIndex]] = element.commentType;\n inline[commentIdProperty[this.keywordIndex]] = element.commentId;\n }\n else {\n return undefined;\n }\n }\n else if (element instanceof ShapeElementBox) {\n this.writeShape(element, inline);\n }\n else {\n inline = undefined;\n }\n this.writeInlineRevisions(inline, element);\n /*if(element.removedIds.length > 0){\n inline.revisionIds = [];\n for(let x:number = 0;x < element.removedIds.length; x++){\n inline.revisionIds.push(element.removedIds);\n }\n }*/\n return inline;\n };\n SfdtExport.prototype.writeInlineRevisions = function (inline, element) {\n if ((element.revisions.length > 0) && (this.isExport || !this.isExport && !this.owner.enableTrackChanges)) {\n inline[revisionIdsProperty[this.keywordIndex]] = [];\n for (var x = 0; x < element.revisions.length; x++) {\n //revisionIdes[x] = element.revisions[x];\n if (this.selectedRevisionId.indexOf(element.revisions[x].revisionID) === -1) {\n this.selectedRevisionId.push(element.revisions[x].revisionID);\n }\n inline[revisionIdsProperty[this.keywordIndex]].push(element.revisions[x].revisionID);\n //this.document.revisionIdes.push(inline.revisionIds)\n }\n }\n };\n SfdtExport.prototype.writeShape = function (element, inline) {\n inline[shapeIdProperty[this.keywordIndex]] = element.shapeId;\n inline[nameProperty[this.keywordIndex]] = element.name;\n inline[alternativeTextProperty[this.keywordIndex]] = element.alternateText;\n inline[titleProperty[this.keywordIndex]] = element.title;\n inline[visibleProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.visible, this.keywordIndex);\n inline[widthProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.width);\n inline[heightProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.height);\n if (element.isZeroHeight) {\n inline[heightProperty[this.keywordIndex]] = 0;\n }\n else {\n inline[heightProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.height);\n }\n inline[widthScaleProperty[this.keywordIndex]] = element.widthScale;\n inline[heightScaleProperty[this.keywordIndex]] = element.heightScale;\n inline[verticalPositionProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.verticalPosition);\n inline[verticalOriginProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getVerticalOriginEnumValue(element.verticalOrigin) : element.verticalOrigin;\n inline[verticalAlignmentProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getShapeVerticalAlignmentEnumValue(element.verticalAlignment) : element.verticalAlignment;\n inline[verticalRelativePercentProperty[this.keywordIndex]] = element.verticalRelativePercent;\n inline[horizontalPositionProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.horizontalPosition);\n inline[horizontalOriginProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getHorizontalOriginEnumValue(element.horizontalOrigin) : element.horizontalOrigin;\n inline[horizontalAlignmentProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getShapeHorizontalAlignmentEnumValue(element.horizontalAlignment) : element.horizontalAlignment;\n inline[horizontalRelativePercentProperty[this.keywordIndex]] = element.horizontalRelativePercent;\n inline[heightRelativePercentProperty[this.keywordIndex]] = element.heightRelativePercent;\n inline[widthRelativePercentProperty[this.keywordIndex]] = element.widthRelativePercent;\n inline[zOrderPositionProperty[this.keywordIndex]] = element.zOrderPosition;\n inline[allowOverlapProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.allowOverlap, this.keywordIndex);\n inline[textWrappingStyleProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTextWrappingStyleEnumValue(element.textWrappingStyle) : element.textWrappingStyle;\n inline[textWrappingTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTextWrappingTypeEnumValue(element.textWrappingType) : element.textWrappingType;\n inline[belowTextProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.isBelowText, this.keywordIndex);\n inline[horizontalRuleProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.isHorizontalRule, this.keywordIndex);\n if (!isNullOrUndefined(element.distanceBottom)) {\n inline[distanceBottomProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.distanceBottom);\n }\n if (!isNullOrUndefined(element.distanceLeft)) {\n inline[distanceLeftProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.distanceLeft);\n }\n if (!isNullOrUndefined(element.distanceRight)) {\n inline[distanceRightProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.distanceRight);\n }\n if (!isNullOrUndefined(element.distanceTop)) {\n inline[distanceTopProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.distanceTop);\n }\n inline[layoutInCellProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.layoutInCell, this.keywordIndex);\n inline[lockAnchorProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.lockAnchor, this.keywordIndex);\n inline[autoShapeTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getAutoShapeTypeEnumValue(element.autoShapeType) : element.autoShapeType;\n if (element.fillFormat) {\n inline[fillFormatProperty[this.keywordIndex]] = {};\n inline[fillFormatProperty[this.keywordIndex]][colorProperty[this.keywordIndex]] = element.fillFormat.color;\n inline[fillFormatProperty[this.keywordIndex]][fillProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.fillFormat.fill, this.keywordIndex);\n }\n if (element.lineFormat) {\n inline[lineFormatProperty[this.keywordIndex]] = {};\n inline[lineFormatProperty[this.keywordIndex]][lineFormatTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getLineFormatTypeEnumValue(element.lineFormat.lineFormatType) : element.lineFormat.lineFormatType;\n inline[lineFormatProperty[this.keywordIndex]][colorProperty[this.keywordIndex]] = element.lineFormat.color;\n inline[lineFormatProperty[this.keywordIndex]][weightProperty[this.keywordIndex]] = element.lineFormat.weight;\n inline[lineFormatProperty[this.keywordIndex]][lineStyleProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getLineDashStyleEnumValue(element.lineFormat.dashStyle) : element.lineFormat.dashStyle;\n inline[lineFormatProperty[this.keywordIndex]][lineProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(element.lineFormat.line, this.keywordIndex);\n }\n if (element.textFrame) {\n inline[textFrameProperty[this.keywordIndex]] = {};\n inline[textFrameProperty[this.keywordIndex]][textVerticalAlignmentProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTextVerticalAlignmentEnumValue(element.textFrame.textVerticalAlignment) : element.textFrame.textVerticalAlignment;\n inline[textFrameProperty[this.keywordIndex]][leftMarginProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.textFrame.marginLeft);\n inline[textFrameProperty[this.keywordIndex]][rightMarginProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.textFrame.marginRight);\n inline[textFrameProperty[this.keywordIndex]][topMarginProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.textFrame.marginTop);\n inline[textFrameProperty[this.keywordIndex]][bottomMarginProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.textFrame.marginBottom);\n inline[textFrameProperty[this.keywordIndex]][blocksProperty[this.keywordIndex]] = [];\n for (var j = 0; j < element.textFrame.childWidgets.length; j++) {\n var textFrameBlock = element.textFrame.childWidgets[j];\n if (textFrameBlock.hasOwnProperty('contentControlProperties') && !isNullOrUndefined(element.paragraph) && (element.paragraph.hasOwnProperty('contentControlProperties'))) {\n this.blocks = [];\n }\n this.writeBlock(textFrameBlock, 0, inline[textFrameProperty[this.keywordIndex]][blocksProperty[this.keywordIndex]]);\n }\n }\n };\n SfdtExport.prototype.writeChart = function (element, inline) {\n inline[chartLegendProperty[this.keywordIndex]] = {};\n inline[chartTitleAreaProperty[this.keywordIndex]] = {};\n inline[chartAreaProperty[this.keywordIndex]] = {};\n inline[plotAreaProperty[this.keywordIndex]] = {};\n inline[chartCategoryProperty[this.keywordIndex]] = [];\n inline[chartSeriesProperty[this.keywordIndex]] = [];\n inline[chartPrimaryCategoryAxisProperty[this.keywordIndex]] = {};\n inline[chartPrimaryValueAxisProperty[this.keywordIndex]] = {};\n this.writeChartTitleArea(element.chartTitleArea, inline[chartTitleAreaProperty[this.keywordIndex]]);\n this.writeChartArea(element.chartArea, inline[chartAreaProperty[this.keywordIndex]]);\n this.writeChartArea(element.chartPlotArea, inline[plotAreaProperty[this.keywordIndex]]);\n this.writeChartCategory(element, inline[chartCategoryProperty[this.keywordIndex]]);\n this.createChartSeries(element, inline[chartSeriesProperty[this.keywordIndex]]);\n this.writeChartLegend(element.chartLegend, inline[chartLegendProperty[this.keywordIndex]]);\n this.writeChartCategoryAxis(element.chartPrimaryCategoryAxis, inline[chartPrimaryCategoryAxisProperty[this.keywordIndex]]);\n this.writeChartCategoryAxis(element.chartPrimaryValueAxis, inline[chartPrimaryValueAxisProperty[this.keywordIndex]]);\n if (element.chartDataTable.showSeriesKeys !== undefined) {\n inline[chartDataTableProperty[this.keywordIndex]] = {};\n this.writeChartDataTable(element.chartDataTable, inline[chartDataTableProperty[this.keywordIndex]]);\n }\n inline[chartTitleProperty[this.keywordIndex]] = element.title;\n inline[chartTypeProperty[this.keywordIndex]] = element.type;\n inline[gapWidthProperty[this.keywordIndex]] = element.chartGapWidth;\n inline[overlapProperty[this.keywordIndex]] = element.chartOverlap;\n inline[heightProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.height);\n inline[widthProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(element.width);\n };\n SfdtExport.prototype.writeChartTitleArea = function (titleArea, chartTitleArea) {\n chartTitleArea[fontNameProperty[this.keywordIndex]] = titleArea.chartfontName;\n chartTitleArea[fontSizeProperty[this.keywordIndex]] = titleArea.chartFontSize;\n chartTitleArea[layoutProperty[this.keywordIndex]] = {};\n chartTitleArea[dataFormatProperty[this.keywordIndex]] = this.writeChartDataFormat(titleArea.dataFormat);\n this.writeChartLayout(titleArea.layout, chartTitleArea[layoutProperty[this.keywordIndex]]);\n };\n SfdtExport.prototype.writeChartDataFormat = function (format) {\n var chartDataFormat = {};\n chartDataFormat[fillProperty[this.keywordIndex]] = {};\n chartDataFormat[lineProperty[this.keywordIndex]] = {};\n if (!isNullOrUndefined(format.fill.color)) {\n if (format.fill.color.length > 6) {\n chartDataFormat[fillProperty[this.keywordIndex]][foreColorProperty[this.keywordIndex]] = format.fill.color.substring(2);\n }\n else {\n chartDataFormat[fillProperty[this.keywordIndex]][foreColorProperty[this.keywordIndex]] = format.fill.color;\n }\n }\n chartDataFormat[fillProperty[this.keywordIndex]][rgbProperty[this.keywordIndex]] = format.fill.rgb;\n chartDataFormat[lineProperty[this.keywordIndex]][colorProperty[this.keywordIndex]] = format.line.color;\n chartDataFormat[lineProperty[this.keywordIndex]][rgbProperty[this.keywordIndex]] = format.line.rgb;\n return chartDataFormat;\n };\n SfdtExport.prototype.writeChartLayout = function (layout, chartLayout) {\n chartLayout[layoutXProperty[this.keywordIndex]] = layout.chartLayoutLeft;\n chartLayout[layoutYProperty[this.keywordIndex]] = layout.chartLayoutTop;\n };\n SfdtExport.prototype.writeChartArea = function (area, chartArea) {\n chartArea[foreColorProperty[this.keywordIndex]] = area.chartForeColor;\n };\n SfdtExport.prototype.writeChartLegend = function (legend, chartLegend) {\n chartLegend[positionProperty[this.keywordIndex]] = legend.chartLegendPostion;\n chartLegend[chartTitleAreaProperty[this.keywordIndex]] = {};\n this.writeChartTitleArea(legend.chartTitleArea, chartLegend[chartTitleAreaProperty[this.keywordIndex]]);\n };\n SfdtExport.prototype.writeChartCategoryAxis = function (categoryAxis, primaryCategoryAxis) {\n primaryCategoryAxis[chartTitleProperty[this.keywordIndex]] = categoryAxis.categoryAxisTitle;\n primaryCategoryAxis[chartTitleAreaProperty[this.keywordIndex]] = {};\n this.writeChartTitleArea(categoryAxis.chartTitleArea, primaryCategoryAxis[chartTitleAreaProperty[this.keywordIndex]]);\n primaryCategoryAxis[categoryTypeProperty[this.keywordIndex]] = categoryAxis.categoryAxisType;\n primaryCategoryAxis[fontSizeProperty[this.keywordIndex]] = categoryAxis.axisFontSize;\n primaryCategoryAxis[fontNameProperty[this.keywordIndex]] = categoryAxis.axisFontName;\n primaryCategoryAxis[numberFormatProperty[this.keywordIndex]] = categoryAxis.categoryNumberFormat;\n primaryCategoryAxis[maximumValueProperty[this.keywordIndex]] = categoryAxis.max;\n primaryCategoryAxis[minimumValueProperty[this.keywordIndex]] = categoryAxis.min;\n primaryCategoryAxis[isAutoMajorProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(categoryAxis.isAutoInternal, this.keywordIndex);\n primaryCategoryAxis[majorUnitProperty[this.keywordIndex]] = categoryAxis.interval;\n primaryCategoryAxis[hasMajorGridLinesProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(categoryAxis.majorGridLines, this.keywordIndex);\n primaryCategoryAxis[hasMinorGridLinesProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(categoryAxis.minorGridLines, this.keywordIndex);\n primaryCategoryAxis[majorTickMarkProperty[this.keywordIndex]] = categoryAxis.majorTick;\n primaryCategoryAxis[minorTickMarkProperty[this.keywordIndex]] = categoryAxis.minorTick;\n primaryCategoryAxis[tickLabelPositionProperty[this.keywordIndex]] = categoryAxis.tickPosition;\n };\n SfdtExport.prototype.writeChartDataTable = function (chartDataTable, dataTable) {\n dataTable[showSeriesKeysProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(chartDataTable.showSeriesKeys, this.keywordIndex);\n dataTable[hasHorizontalBorderProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(chartDataTable.hasHorzBorder, this.keywordIndex);\n dataTable[hasVerticalBorderProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(chartDataTable.hasVertBorder, this.keywordIndex);\n dataTable[hasBordersProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(chartDataTable.hasBorders, this.keywordIndex);\n };\n SfdtExport.prototype.writeChartCategory = function (element, chartCategory) {\n var data = element.chartCategory;\n chartCategory[chartDataProperty[this.keywordIndex]] = [];\n for (var i = 0; i < data.length; i++) {\n var xData = data[i];\n var categories = this.createChartCategory(xData, element.chartType);\n chartCategory.push(categories);\n }\n };\n SfdtExport.prototype.createChartCategory = function (data, type) {\n var chartCategory = {};\n chartCategory[chartDataProperty[this.keywordIndex]] = [];\n this.writeChartData(data, chartCategory[chartDataProperty[this.keywordIndex]], type);\n chartCategory[categoryXNameProperty[this.keywordIndex]] = data.categoryXName;\n return chartCategory;\n };\n SfdtExport.prototype.writeChartData = function (element, chartData, type) {\n var data = element.chartData;\n for (var i = 0; i < data.length; i++) {\n var yData = data[i];\n var yCategory = this.createChartData(yData, type);\n chartData.push(yCategory);\n }\n };\n SfdtExport.prototype.createChartData = function (data, type) {\n var chartData = {};\n chartData[yValueProperty[this.keywordIndex]] = data.yValue;\n if (type === 'Bubble') {\n chartData[sizeProperty[this.keywordIndex]] = data.size;\n }\n return chartData;\n };\n SfdtExport.prototype.createChartSeries = function (element, chartSeries) {\n var data = element.chartSeries;\n var type = element.chartType;\n for (var i = 0; i < data.length; i++) {\n var yData = data[i];\n var series = this.writeChartSeries(yData, type);\n chartSeries.push(series);\n }\n };\n SfdtExport.prototype.writeChartSeries = function (series, type) {\n var isPieType = (type === 'Pie' || type === 'Doughnut');\n var chartSeries = {};\n var errorBar = {};\n var errorBarData = series.errorBar;\n chartSeries[dataPointsProperty[this.keywordIndex]] = [];\n chartSeries[seriesNameProperty[this.keywordIndex]] = series.seriesName;\n if (isPieType) {\n if (!isNullOrUndefined(series.firstSliceAngle)) {\n chartSeries[firstSliceAngleProperty[this.keywordIndex]] = series.firstSliceAngle;\n }\n if (type === 'Doughnut') {\n chartSeries[holeSizeProperty[this.keywordIndex]] = series.doughnutHoleSize;\n }\n }\n if (!isNullOrUndefined(series.dataLabels.labelPosition)) {\n var dataLabel = this.writeChartDataLabels(series.dataLabels);\n chartSeries[dataLabelProperty[this.keywordIndex]] = dataLabel;\n }\n if (!isNullOrUndefined(series.seriesFormat.markerStyle)) {\n var seriesFormat = {};\n var format = series.seriesFormat;\n seriesFormat[markerStyleProperty[this.keywordIndex]] = format.markerStyle;\n seriesFormat[markerSizeProperty[this.keywordIndex]] = format.numberValue;\n seriesFormat[markerColorProperty[this.keywordIndex]] = format.markerColor;\n chartSeries[seriesFormatProperty[this.keywordIndex]] = seriesFormat;\n }\n if (!isNullOrUndefined(errorBarData.type)) {\n errorBar[typeProperty[this.keywordIndex]] = errorBarData.type;\n errorBar[directionProperty[this.keywordIndex]] = errorBarData.direction;\n errorBar[endStyleProperty[this.keywordIndex]] = errorBarData.endStyle;\n errorBar[numberValueProperty[this.keywordIndex]] = errorBarData.numberValue;\n chartSeries[errorBarProperty[this.keywordIndex]] = errorBar;\n }\n if (series.trendLines.length > 0) {\n chartSeries[trendLinesProperty[this.keywordIndex]] = [];\n for (var i = 0; i < series.trendLines.length; i++) {\n var trendLine = this.writeChartTrendLines(series.trendLines[i]);\n chartSeries[trendLinesProperty[this.keywordIndex]].push(trendLine);\n }\n }\n for (var i = 0; i < series.chartDataFormat.length; i++) {\n var format = this.writeChartDataFormat(series.chartDataFormat[i]);\n chartSeries[dataPointsProperty[this.keywordIndex]].push(format);\n }\n return chartSeries;\n };\n SfdtExport.prototype.writeChartDataLabels = function (dataLabels) {\n var dataLabel = {};\n dataLabel[positionProperty[this.keywordIndex]] = dataLabels.position;\n dataLabel[fontNameProperty[this.keywordIndex]] = dataLabels.fontName;\n dataLabel[fontColorProperty[this.keywordIndex]] = HelperMethods.convertArgbToRgb(dataLabels.fontColor);\n dataLabel[fontSizeProperty[this.keywordIndex]] = dataLabels.fontSize;\n dataLabel[isLegendKeyProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(dataLabels.isLegendKey, this.keywordIndex);\n dataLabel[isBubbleSizeProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(dataLabels.isBubbleSize, this.keywordIndex);\n dataLabel[isCategoryNameProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(dataLabels.isCategoryName, this.keywordIndex);\n dataLabel[isSeriesNameProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(dataLabels.isSeriesName, this.keywordIndex);\n dataLabel[isValueProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(dataLabels.isValue, this.keywordIndex);\n dataLabel[isPercentageProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(dataLabels.isPercentage, this.keywordIndex);\n dataLabel[isLeaderLinesProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(dataLabels.isLeaderLines, this.keywordIndex);\n return dataLabel;\n };\n SfdtExport.prototype.writeChartTrendLines = function (trendLines) {\n var trendLine = {};\n trendLine[nameProperty[this.keywordIndex]] = trendLines.trendLineName;\n trendLine[typeProperty[this.keywordIndex]] = trendLines.trendLineType;\n trendLine[forwardProperty[this.keywordIndex]] = trendLines.forwardValue;\n trendLine[backwardProperty[this.keywordIndex]] = trendLines.backwardValue;\n trendLine[interceptProperty[this.keywordIndex]] = trendLines.interceptValue;\n trendLine[isDisplayEquationProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(trendLines.isDisplayEquation, this.keywordIndex);\n trendLine[isDisplayRSquaredProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(trendLines.isDisplayRSquared, this.keywordIndex);\n return trendLine;\n };\n SfdtExport.prototype.writeLines = function (paragraph, lineIndex, offset, inlines) {\n var startIndex = lineIndex;\n var endParagraph = this.endLine instanceof LineWidget && this.endLine.paragraph === paragraph;\n var endIndex = endParagraph ? this.endLine.indexInOwner : paragraph.childWidgets.length - 1;\n for (var i = startIndex; i <= endIndex; i++) {\n var child = paragraph.childWidgets[i];\n if (this.endLine === child || (lineIndex === i && offset !== 0)) {\n if (this.endLine === child && paragraph.paragraphFormat.bidi && this.startLine !== this.endLine) {\n this.endOffset = child.getEndOffset();\n }\n this.writeLine(child, (this.startLine !== this.endLine && child !== this.startLine) ? 0 : offset, inlines);\n }\n else {\n this.writeInlines(paragraph, child, inlines);\n }\n }\n return endParagraph;\n };\n SfdtExport.prototype.writeLine = function (line, offset, inlines) {\n this.contentInline = [];\n var isContentStarted = false;\n var contentControl = false;\n var isEnd = line === this.endLine;\n var lineWidget = line;\n var started = false;\n var ended = false;\n var length = 0;\n for (var j = 0; j < lineWidget.children.length; j++) {\n var element = lineWidget.children[j];\n if (element instanceof ListTextElementBox) {\n continue;\n }\n var inline = undefined;\n length += element.length;\n started = length > offset;\n if (element instanceof ContentControl) {\n if (!started) {\n isContentStarted = element.type === 0 ? true : false;\n }\n contentControl = true;\n }\n if (element instanceof TextElementBox && element.hasOwnProperty('contentControlProperties') && started && !contentControl) {\n isContentStarted = true;\n }\n if (element instanceof ContentControl) {\n if (isContentStarted) {\n if (element.type === 1) {\n isContentStarted = false;\n }\n }\n if (contentControl) {\n if (element.type === 1) {\n contentControl = false;\n }\n }\n }\n ended = isEnd && length >= this.endOffset;\n if (!started || isContentStarted) {\n continue;\n }\n if (element instanceof ContentControl || this.startContent || this.blockContent) {\n if (ended) {\n this.startContent = false;\n break;\n }\n this.writeInlinesContentControl(element, line, inlines, j);\n continue;\n }\n inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines[inlines.length] = inline;\n if (length > offset || ended) {\n if (inline.hasOwnProperty(textProperty[this.keywordIndex])) {\n var startIndex = length - element.length;\n var indexInInline = offset - startIndex;\n var endIndex = ended ? this.endOffset - startIndex : element.length;\n inline[textProperty[this.keywordIndex]] = inline[textProperty[this.keywordIndex]].substring(indexInInline, endIndex);\n }\n offset = -1;\n }\n }\n if (ended) {\n break;\n }\n }\n };\n SfdtExport.prototype.writeInlinesFootNote = function (element) {\n this.isWriteInlinesFootNote = true;\n var inline = {};\n inline[footnoteTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getFootnoteTypeEnumValue(element.footnoteType) : element.footnoteType;\n inline[characterFormatProperty[this.keywordIndex]] = {};\n inline[characterFormatProperty[this.keywordIndex]] = this.writeCharacterFormat(element.characterFormat, this.keywordIndex);\n inline[blocksProperty[this.keywordIndex]] = [];\n for (var i = 0; i < element.bodyWidget.childWidgets.length; i++) {\n this.writeBlock(element.bodyWidget.childWidgets[i], 0, inline[blocksProperty[this.keywordIndex]]);\n }\n inline[symbolCodeProperty[this.keywordIndex]] = element.symbolCode;\n inline[symbolFontNameProperty[this.keywordIndex]] = element.symbolFontName;\n inline[customMarkerProperty[this.keywordIndex]] = element.customMarker;\n this.writeInlineRevisions(inline, element);\n this.isWriteInlinesFootNote = false;\n return inline;\n };\n SfdtExport.prototype.writeInlinesContentControl = function (element, lineWidget, inlines, i) {\n if (element instanceof ContentControl) {\n if (element.contentControlWidgetType === 'Block') {\n this.isBlockClosed = false;\n if (this.blockContent && element.type === 0) {\n this.nestedBlockContent = true;\n return true;\n }\n else if (this.nestedBlockContent && element.type === 1) {\n this.nestedBlockContent = false;\n return true;\n }\n this.blockContent = (element.type === 0) ? true : false;\n if (lineWidget.children[i - 1] instanceof ContentControl) {\n if (lineWidget.children[i - 1].contentControlWidgetType === 'Block') {\n this.blockContent = true;\n }\n }\n if (!this.blockContent) {\n this.isBlockClosed = true;\n }\n return true;\n }\n }\n if (element instanceof ContentControl) {\n if (this.startContent && element.type === 0) {\n this.nestedContent = true;\n return true;\n }\n else if (this.startContent && this.nestedContent) {\n var inline = {};\n inline[inlinesProperty[this.keywordIndex]] = this.contentInline;\n if (this.contentInline.length > 0) {\n var nestedContent = this.nestedContentProperty(lineWidget.children[i + 1], inline);\n inlines.push(nestedContent);\n this.contentInline = [];\n }\n if (this.multipleLineContent) {\n inline = inlines[inlines.length - 1];\n this.nestedContentProperty(lineWidget.children[i + 1], inline);\n this.multipleLineContent = false;\n }\n this.nestedContent = false;\n return true;\n }\n this.contentType = element.contentControlWidgetType;\n this.startContent = (element.type === 0) ? true : false;\n return true;\n }\n if (this.startContent && ((this.contentType === 'Inline'))) {\n if (this.multipleLineContent) {\n this.inlineContentControl(element, lineWidget.children[i + 1], inlines);\n this.contentInline = [];\n }\n else {\n var contentinline = this.inlineContentControl(element, lineWidget.children[i + 1]);\n if (!isNullOrUndefined(contentinline)) {\n if (this.nestedContent && this.multipleLineContent) {\n var inline = {};\n inline[inlinesProperty[this.keywordIndex]] = this.contentInline;\n inlines.push(inline);\n this.contentInline = [];\n }\n else {\n inlines.push(contentinline);\n this.contentInline = [];\n return false;\n }\n }\n }\n }\n else {\n var inline = this.writeInline(element);\n if (!isNullOrUndefined(inline)) {\n inlines.push(inline);\n }\n }\n };\n SfdtExport.prototype.createParagraph = function (paragraphWidget) {\n var paragraph = {};\n var isParaSelected = false;\n var isListPara = false;\n if (this.documentHelper.selection && !this.documentHelper.selection.isEmpty && !this.isExport) {\n var endPos = this.documentHelper.selection.end;\n if (!this.documentHelper.selection.isForward) {\n endPos = this.documentHelper.selection.start;\n }\n var lastLine = endPos.paragraph.childWidgets[endPos.paragraph.childWidgets.length - 1];\n isListPara = !isNullOrUndefined(paragraphWidget.paragraphFormat.listFormat.list);\n isParaSelected = this.documentHelper.selection.isParagraphLastLine(lastLine) && endPos.currentWidget === lastLine\n && (endPos.offset === this.documentHelper.selection.getLineLength(lastLine) + 1 || (!(paragraphWidget.indexInOwner == endPos.paragraph.indexInOwner) && isListPara));\n }\n else {\n isParaSelected = true;\n }\n paragraph[paragraphFormatProperty[this.keywordIndex]] = this.writeParagraphFormat(isParaSelected ? paragraphWidget.paragraphFormat : new WParagraphFormat(paragraphWidget), this.keywordIndex);\n paragraph[characterFormatProperty[this.keywordIndex]] = this.writeCharacterFormat(isParaSelected ? paragraphWidget.characterFormat : new WCharacterFormat(paragraphWidget), this.keywordIndex);\n paragraph[inlinesProperty[this.keywordIndex]] = [];\n return paragraph;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeCharacterFormat = function (format, keywordIndex, isInline) {\n var characterFormat = {};\n HelperMethods.writeCharacterFormat(characterFormat, isInline, format, keywordIndex);\n characterFormat[boldBidiProperty[keywordIndex]] = isInline ? HelperMethods.getBoolInfo(format.boldBidi, keywordIndex) : format.getValue('boldBidi');\n characterFormat[italicBidiProperty[keywordIndex]] = isInline ? HelperMethods.getBoolInfo(format.italicBidi, keywordIndex) : format.getValue('italicBidi');\n if (format.revisions.length > 0) {\n characterFormat[revisionIdsProperty[keywordIndex]] = [];\n for (var x = 0; x < format.revisions.length; x++) {\n characterFormat[revisionIdsProperty[keywordIndex]].push(format.revisions[x].revisionID);\n }\n }\n if (this.writeInlineStyles && !isInline) {\n characterFormat[inlineFormatProperty[keywordIndex]] = this.writeCharacterFormat(format, keywordIndex, true);\n }\n return characterFormat;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeParagraphFormat = function (format, keywordIndex, isInline) {\n var paragraphFormat = {};\n this.keywordIndex = isNullOrUndefined(this.keywordIndex) ? 0 : this.keywordIndex;\n HelperMethods.writeParagraphFormat(paragraphFormat, isInline, format, keywordIndex);\n paragraphFormat[listFormatProperty[keywordIndex]] = this.writeListFormat(format.listFormat, isInline);\n paragraphFormat[tabsProperty[keywordIndex]] = this.writeTabs(format.tabs);\n if (this.writeInlineStyles && !isInline) {\n paragraphFormat[inlineFormatProperty[keywordIndex]] = this.writeParagraphFormat(format, keywordIndex, true);\n }\n return paragraphFormat;\n };\n SfdtExport.prototype.writeThemes = function (source) {\n var themes = {};\n themes[fontSchemeProperty[this.keywordIndex]] = {};\n themes[fontSchemeProperty[this.keywordIndex]][fontSchemeNameProperty[this.keywordIndex]] = source.fontScheme.fontSchemeName;\n themes[fontSchemeProperty[this.keywordIndex]][majorFontSchemeProperty[this.keywordIndex]] = this.writeMajorMinorFontScheme(source.fontScheme.majorFontScheme);\n themes[fontSchemeProperty[this.keywordIndex]][minorFontSchemeProperty[this.keywordIndex]] = this.writeMajorMinorFontScheme(source.fontScheme.minorFontScheme);\n return themes;\n };\n SfdtExport.prototype.writeMajorMinorFontScheme = function (source) {\n var majorMinorFontScheme = {};\n majorMinorFontScheme[fontSchemeListProperty[this.keywordIndex]] = this.writeFontSchemeList(source.fontSchemeList);\n var keys = source.fontTypeface.keys;\n var fontTypeface = {};\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n fontTypeface[key] = source.fontTypeface.get(key);\n }\n majorMinorFontScheme[fontTypefaceProperty[this.keywordIndex]] = fontTypeface;\n return majorMinorFontScheme;\n };\n SfdtExport.prototype.writeFontSchemeList = function (source) {\n var _this = this;\n var fontSchemeStructs = [];\n source.forEach(function (val) {\n var schemeStruct = {};\n schemeStruct[nameProperty[_this.keywordIndex]] = val.name;\n schemeStruct[typefaceProperty[_this.keywordIndex]] = val.typeface;\n schemeStruct[panoseProperty[_this.keywordIndex]] = val.panose;\n fontSchemeStructs.push(schemeStruct);\n });\n return fontSchemeStructs;\n };\n SfdtExport.prototype.writeTabs = function (tabStops) {\n if (isNullOrUndefined(tabStops) || tabStops.length < 1) {\n return undefined;\n }\n var tabs = [];\n for (var i = 0; i < tabStops.length; i++) {\n var tabStop = tabStops[i];\n var tab = {};\n tab[positionProperty[this.keywordIndex]] = tabStop.position;\n tab[deletePositionProperty[this.keywordIndex]] = tabStop.deletePosition;\n tab[tabJustificationProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTabJustificationEnumValue(tabStop.tabJustification) : tabStop.tabJustification;\n tab[tabLeaderProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTabLeaderEnumValue(tabStop.tabLeader) : tabStop.tabLeader;\n tabs.push(tab);\n }\n return tabs;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeListFormat = function (format, isInline) {\n var listFormat = {};\n var listIdValue = format.getValue('listId');\n if (!isNullOrUndefined(listIdValue)) {\n listFormat[listIdProperty[this.keywordIndex]] = listIdValue;\n if (isNullOrUndefined(this.lists)) {\n this.lists = [];\n }\n if (this.lists.indexOf(format.listId) < 0) {\n this.lists.push(format.listId);\n }\n }\n var listLevelNumber = format.getValue('listLevelNumber');\n if (!isNullOrUndefined(listLevelNumber)) {\n listFormat[listLevelNumberProperty[this.keywordIndex]] = listLevelNumber;\n }\n var nsid = format.getValue('nsid');\n if (!isNullOrUndefined(nsid)) {\n listFormat[nsidProperty] = nsid;\n }\n return listFormat;\n };\n SfdtExport.prototype.writeTable = function (tableWidget, table, index, blocks) {\n var widget = tableWidget.childWidgets[index];\n if (widget instanceof TableRowWidget) {\n if (this.writeRow(widget, table[rowsProperty[this.keywordIndex]])) {\n return undefined;\n }\n }\n var next = tableWidget;\n do {\n tableWidget = next;\n next = tableWidget.nextSplitWidget;\n } while (next instanceof BlockWidget);\n next = tableWidget.nextRenderedWidget;\n return (next instanceof BlockWidget && next.containerWidget.index === tableWidget.containerWidget.index) ? next : undefined;\n };\n SfdtExport.prototype.writeRow = function (rowWidget, rows) {\n var next = rowWidget;\n do {\n rowWidget = next;\n next = this.writeRowInternal(next, rows);\n if (rowWidget === next) {\n return true;\n }\n } while (next instanceof TableRowWidget);\n return false;\n };\n SfdtExport.prototype.writeRowInternal = function (rowWidget, rows) {\n if (!(rowWidget instanceof TableRowWidget)) {\n return rowWidget;\n }\n if (!rowWidget.isCellsHaveSameWidthUnit()) {\n rowWidget.updateUniformWidthUnitForCells();\n }\n var row = this.createRow(rowWidget);\n rows.push(row);\n for (var i = 0; i < rowWidget.childWidgets.length; i++) {\n var widget = rowWidget.childWidgets[i];\n if (widget instanceof TableCellWidget) {\n if (rowWidget.index === widget.rowIndex\n && (isNullOrUndefined(this.startColumnIndex) || widget.columnIndex >= this.startColumnIndex)\n && (isNullOrUndefined(this.endColumnIndex) || widget.columnIndex < this.endColumnIndex)) {\n if (this.writeCell(widget, row[cellsProperty[this.keywordIndex]])) {\n return rowWidget;\n }\n }\n }\n }\n var next = rowWidget;\n var skip = false;\n do {\n rowWidget = next;\n next = rowWidget.nextRenderedWidget;\n if (!isNullOrUndefined(rowWidget.ownerTable.bodyWidget) && next && ((rowWidget.ownerTable.index !== next.ownerTable.index &&\n rowWidget.ownerTable.bodyWidget.sectionIndex === next.ownerTable.bodyWidget.sectionIndex)\n || rowWidget.ownerTable.bodyWidget.sectionIndex !== next.ownerTable.bodyWidget.sectionIndex)) {\n next = undefined;\n }\n skip = !isNullOrUndefined(rowWidget.nextSplitWidget) && rowWidget.childWidgets.length !== next.childWidgets.length;\n } while (next instanceof TableRowWidget && next.index === rowWidget.index && !skip);\n return next;\n };\n SfdtExport.prototype.writeCell = function (cellWidget, cells) {\n var cell = this.createCell(cellWidget);\n cells.push(cell);\n var firstBlock = cellWidget.firstChild;\n do {\n firstBlock = this.writeBlock(firstBlock, 0, cell[blocksProperty[this.keywordIndex]]);\n } while (firstBlock);\n return this.endCell instanceof TableCellWidget ? this.endCell.cellFormat === cellWidget.cellFormat : false;\n };\n SfdtExport.prototype.createTable = function (tableWidget) {\n var table = {};\n if (isNullOrUndefined(this.keywordIndex)) {\n this.keywordIndex = 0;\n }\n table[rowsProperty[this.keywordIndex]] = [];\n table[gridProperty[this.keywordIndex]] = [];\n for (var i = 0; i < tableWidget.tableHolder.columns.length; i++) {\n table[gridProperty[this.keywordIndex]][i] = tableWidget.tableHolder.columns[i].preferredWidth;\n }\n table[tableFormatProperty[this.keywordIndex]] = this.writeTableFormat(tableWidget.tableFormat, this.keywordIndex);\n table[descriptionProperty[this.keywordIndex]] = tableWidget.tableFormat.description;\n table[titleProperty[this.keywordIndex]] = tableWidget.tableFormat.title;\n table[columnCountProperty[this.keywordIndex]] = tableWidget.tableHolder.columns.length;\n this.writeTablePositioning(table, tableWidget);\n return table;\n };\n SfdtExport.prototype.writeTablePositioning = function (table, tableWidget) {\n if (tableWidget.wrapTextAround) {\n table[wrapTextAroundProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(tableWidget.wrapTextAround, this.keywordIndex);\n table[positioningProperty[this.keywordIndex]] = {};\n table[positioningProperty[this.keywordIndex]][allowOverlapProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(tableWidget.positioning.allowOverlap, this.keywordIndex);\n if (!isNullOrUndefined(tableWidget.positioning.distanceBottom)) {\n table[positioningProperty[this.keywordIndex]][distanceBottomProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceBottom);\n }\n if (!isNullOrUndefined(tableWidget.positioning.distanceLeft)) {\n table[positioningProperty[this.keywordIndex]][distanceLeftProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceLeft);\n }\n if (!isNullOrUndefined(tableWidget.positioning.distanceRight)) {\n table[positioningProperty[this.keywordIndex]][distanceRightProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceRight);\n }\n if (!isNullOrUndefined(tableWidget.positioning.distanceTop)) {\n table[positioningProperty[this.keywordIndex]][distanceTopProperty[this.keywordIndex]] = HelperMethods.convertPixelToPoint(tableWidget.positioning.distanceTop);\n }\n if (!isNullOrUndefined(tableWidget.positioning.verticalAlignment)) {\n table[positioningProperty[this.keywordIndex]][verticalAlignmentProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTableVerticalPositionEnumValue(tableWidget.positioning.verticalAlignment) : tableWidget.positioning.verticalAlignment;\n }\n if (!isNullOrUndefined(tableWidget.positioning.verticalOrigin)) {\n table[positioningProperty[this.keywordIndex]][verticalOriginProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTableVerticalRelationEnumValue(tableWidget.positioning.verticalOrigin) : tableWidget.positioning.verticalOrigin;\n }\n table[positioningProperty[this.keywordIndex]][verticalPositionProperty[this.keywordIndex]] = tableWidget.positioning.verticalPosition;\n if (!isNullOrUndefined(tableWidget.positioning.horizontalAlignment)) {\n table[positioningProperty[this.keywordIndex]][horizontalAlignmentProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTableHorizontalPositionEnumValue(tableWidget.positioning.horizontalAlignment) : tableWidget.positioning.horizontalAlignment;\n }\n if (!isNullOrUndefined(tableWidget.positioning.horizontalOrigin)) {\n table[positioningProperty[this.keywordIndex]][horizontalOriginProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getTableHorizontalRelationEnumValue(tableWidget.positioning.horizontalOrigin) : tableWidget.positioning.horizontalOrigin;\n }\n table[positioningProperty[this.keywordIndex]][horizontalPositionProperty[this.keywordIndex]] = tableWidget.positioning.horizontalPosition;\n }\n };\n SfdtExport.prototype.createRow = function (rowWidget) {\n var row = {};\n row[cellsProperty[this.keywordIndex]] = [];\n row[rowFormatProperty[this.keywordIndex]] = this.writeRowFormat(rowWidget.rowFormat, this.keywordIndex);\n if (rowWidget.hasOwnProperty('contentControlProperties')) {\n row[contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(rowWidget.contentControlProperties);\n }\n return row;\n };\n SfdtExport.prototype.createCell = function (cellWidget) {\n var cell = {};\n cell[blocksProperty[this.keywordIndex]] = [];\n cell[cellFormatProperty[this.keywordIndex]] = this.writeCellFormat(cellWidget.cellFormat, this.keywordIndex);\n cell[columnIndexProperty[this.keywordIndex]] = cellWidget.columnIndex;\n if (cellWidget.hasOwnProperty('contentControlProperties')) {\n cell[contentControlPropertiesProperty[this.keywordIndex]] = this.contentControlProperty(cellWidget.contentControlProperties);\n }\n return cell;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeShading = function (wShading, keyIndex) {\n var shading = {};\n shading[backgroundColorProperty[keyIndex]] = wShading.hasValue('backgroundColor') ? wShading.backgroundColor : undefined;\n shading[foregroundColorProperty[keyIndex]] = wShading.hasValue('foregroundColor') ? wShading.foregroundColor : undefined;\n shading[textureProperty[keyIndex]] = wShading.hasValue('textureStyle') ?\n keyIndex == 1 ? this.getTextureStyleEnumValue(wShading.textureStyle) : wShading.textureStyle : undefined;\n return shading;\n };\n SfdtExport.prototype.writeBorders = function (wBorders, keyIndex) {\n var borders = {};\n borders[topProperty[keyIndex]] = HelperMethods.writeBorder(wBorders.top, keyIndex);\n borders[leftProperty[keyIndex]] = HelperMethods.writeBorder(wBorders.left, keyIndex);\n borders[rightProperty[keyIndex]] = HelperMethods.writeBorder(wBorders.right, keyIndex);\n borders[bottomProperty[keyIndex]] = HelperMethods.writeBorder(wBorders.bottom, keyIndex);\n borders[diagonalDownProperty[keyIndex]] = HelperMethods.writeBorder(wBorders.diagonalDown, keyIndex);\n borders[diagonalUpProperty[keyIndex]] = HelperMethods.writeBorder(wBorders.diagonalUp, keyIndex);\n borders[horizontalProperty[keyIndex]] = HelperMethods.writeBorder(wBorders.horizontal, keyIndex);\n borders[verticalProperty[keyIndex]] = HelperMethods.writeBorder(wBorders.vertical, keyIndex);\n return borders;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeCellFormat = function (wCellFormat, keyIndex) {\n var cellFormat = {};\n cellFormat[bordersProperty[keyIndex]] = this.writeBorders(wCellFormat.borders, keyIndex);\n cellFormat[shadingProperty[keyIndex]] = this.writeShading(wCellFormat.shading, keyIndex);\n cellFormat[topMarginProperty[keyIndex]] = wCellFormat.hasValue('topMargin') ? wCellFormat.topMargin : undefined;\n cellFormat[rightMarginProperty[keyIndex]] = wCellFormat.hasValue('rightMargin') ? wCellFormat.rightMargin : undefined;\n cellFormat[leftMarginProperty[keyIndex]] = wCellFormat.hasValue('leftMargin') ? wCellFormat.leftMargin : undefined;\n cellFormat[bottomMarginProperty[keyIndex]] = wCellFormat.hasValue('bottomMargin') ? wCellFormat.bottomMargin : undefined;\n cellFormat[preferredWidthProperty[keyIndex]] = wCellFormat.hasValue('preferredWidth') ? wCellFormat.preferredWidth : undefined;\n cellFormat[preferredWidthTypeProperty[keyIndex]] = wCellFormat.hasValue('preferredWidthType') ? keyIndex == 1 ? this.getWidthTypeEnumValue(wCellFormat.preferredWidthType) : wCellFormat.preferredWidthType : undefined;\n cellFormat[cellWidthProperty[keyIndex]] = wCellFormat.hasValue('cellWidth') ? wCellFormat.cellWidth : undefined;\n cellFormat[columnSpanProperty[keyIndex]] = wCellFormat.columnSpan;\n cellFormat[rowSpanProperty[keyIndex]] = wCellFormat.rowSpan;\n cellFormat[verticalAlignmentProperty[keyIndex]] = wCellFormat.hasValue('verticalAlignment') ? keyIndex == 1 ? this.getCellVerticalAlignmentEnumValue(wCellFormat.verticalAlignment) : wCellFormat.verticalAlignment : undefined;\n return cellFormat;\n };\n SfdtExport.prototype.writeRowFormat = function (wRowFormat, keyIndex) {\n var rowFormat = {};\n var revisionIds = [];\n this.assignRowFormat(rowFormat, wRowFormat, keyIndex);\n for (var j = 0; j < wRowFormat.revisions.length; j++) {\n rowFormat[revisionIdsProperty[keyIndex]] = this.writeRowRevisions(wRowFormat.revisions[j], revisionIds);\n }\n return rowFormat;\n };\n /**\n * @private\n */\n SfdtExport.prototype.assignRowFormat = function (rowFormat, wRowFormat, keyIndex) {\n rowFormat[heightProperty[keyIndex]] = wRowFormat.hasValue('height') ? wRowFormat.height : undefined;\n rowFormat[allowBreakAcrossPagesProperty[keyIndex]] = wRowFormat.hasValue('allowBreakAcrossPages') ? HelperMethods.getBoolInfo(wRowFormat.allowBreakAcrossPages, this.keywordIndex) : undefined;\n rowFormat[heightTypeProperty[keyIndex]] = wRowFormat.hasValue('heightType') ? this.keywordIndex == 1 ? this.getHeighTypeEnumValue(wRowFormat.heightType) : wRowFormat.heightType : undefined;\n rowFormat[isHeaderProperty[keyIndex]] = wRowFormat.hasValue('isHeader') ? HelperMethods.getBoolInfo(wRowFormat.isHeader, this.keywordIndex) : undefined;\n rowFormat[bordersProperty[keyIndex]] = this.writeBorders(wRowFormat.borders, keyIndex);\n rowFormat[gridBeforeProperty[keyIndex]] = wRowFormat.gridBefore;\n rowFormat[gridBeforeWidthProperty[keyIndex]] = wRowFormat.hasValue('gridBeforeWidth') ? wRowFormat.gridBeforeWidth : undefined;\n rowFormat[gridBeforeWidthTypeProperty[keyIndex]] = wRowFormat.hasValue('gridBeforeWidthType') ? this.keywordIndex == 1 ? this.getWidthTypeEnumValue(wRowFormat.gridBeforeWidthType) : wRowFormat.gridBeforeWidthType : undefined;\n rowFormat[gridAfterProperty[keyIndex]] = wRowFormat.gridAfter;\n rowFormat[gridAfterWidthProperty[keyIndex]] = wRowFormat.hasValue('gridAfterWidth') ? wRowFormat.gridAfterWidth : undefined;\n rowFormat[gridAfterWidthTypeProperty[keyIndex]] = wRowFormat.hasValue('gridAfterWidthType') ? this.keywordIndex == 1 ? this.getWidthTypeEnumValue(wRowFormat.gridAfterWidthType) : wRowFormat.gridAfterWidthType : undefined;\n rowFormat[leftMarginProperty[keyIndex]] = wRowFormat.hasValue('leftMargin') ? wRowFormat.leftMargin : undefined;\n rowFormat[topMarginProperty[keyIndex]] = wRowFormat.hasValue('topMargin') ? wRowFormat.topMargin : undefined;\n rowFormat[rightMarginProperty[keyIndex]] = wRowFormat.hasValue('rightMargin') ? wRowFormat.rightMargin : undefined;\n rowFormat[bottomMarginProperty[keyIndex]] = wRowFormat.hasValue('bottomMargin') ? wRowFormat.bottomMargin : undefined;\n rowFormat[leftIndentProperty[keyIndex]] = wRowFormat.hasValue('leftIndent') ? wRowFormat.leftIndent : undefined;\n };\n SfdtExport.prototype.writeRowRevisions = function (wrevisions, revisionIds) {\n if (this.selectedRevisionId.indexOf(wrevisions.revisionID) === -1) {\n this.selectedRevisionId.push(wrevisions.revisionID);\n }\n revisionIds.push(wrevisions.revisionID);\n return revisionIds;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeTableFormat = function (wTableFormat, keyIndex) {\n var tableFormat = {};\n tableFormat[bordersProperty[keyIndex]] = this.writeBorders(wTableFormat.borders, keyIndex);\n tableFormat[shadingProperty[keyIndex]] = this.writeShading(wTableFormat.shading, keyIndex);\n tableFormat[cellSpacingProperty[keyIndex]] = wTableFormat.hasValue('cellSpacing') ? wTableFormat.cellSpacing : undefined;\n tableFormat[leftIndentProperty[keyIndex]] = wTableFormat.hasValue('leftIndent') ? wTableFormat.leftIndent : undefined;\n tableFormat[tableAlignmentProperty[keyIndex]] = wTableFormat.hasValue('tableAlignment') ? this.keywordIndex == 1 ? this.getTableAlignmentEnumValue(wTableFormat.tableAlignment) : wTableFormat.tableAlignment : undefined;\n tableFormat[topMarginProperty[keyIndex]] = wTableFormat.hasValue('topMargin') ? wTableFormat.topMargin : undefined;\n tableFormat[rightMarginProperty[keyIndex]] = wTableFormat.hasValue('rightMargin') ? wTableFormat.rightMargin : undefined;\n tableFormat[leftMarginProperty[keyIndex]] = wTableFormat.hasValue('leftMargin') ? wTableFormat.leftMargin : undefined;\n tableFormat[bottomMarginProperty[keyIndex]] = wTableFormat.hasValue('bottomMargin') ? wTableFormat.bottomMargin : undefined;\n tableFormat[preferredWidthProperty[keyIndex]] = wTableFormat.hasValue('preferredWidth') ? wTableFormat.preferredWidth : undefined;\n tableFormat[preferredWidthTypeProperty[keyIndex]] = wTableFormat.hasValue('preferredWidthType') ? this.keywordIndex == 1 ? this.getWidthTypeEnumValue(wTableFormat.preferredWidthType) : wTableFormat.preferredWidthType : undefined;\n tableFormat[bidiProperty[keyIndex]] = wTableFormat.hasValue('bidi') ? HelperMethods.getBoolInfo(wTableFormat.bidi, this.keywordIndex) : undefined;\n tableFormat[allowAutoFitProperty[keyIndex]] = wTableFormat.hasValue('allowAutoFit') ? HelperMethods.getBoolInfo(wTableFormat.allowAutoFit, this.keywordIndex) : undefined;\n tableFormat[styleNameProperty[keyIndex]] = !isNullOrUndefined(wTableFormat.styleName) ? wTableFormat.styleName : undefined;\n return tableFormat;\n };\n SfdtExport.prototype.footnotes = function (documentHelper) {\n this.isWriteEndFootNote = true;\n for (var i = 0; i < documentHelper.footnotes.separator.length; i++) {\n this.seprators(documentHelper);\n }\n this.isWriteEndFootNote = false;\n };\n SfdtExport.prototype.seprators = function (documentHelper) {\n if (documentHelper.footnotes.separator.length > 0) {\n this.document[footnotesProperty[this.keywordIndex]] = {};\n this.document[footnotesProperty[this.keywordIndex]][separatorProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.footnotes.separator.length; i++) {\n this.writeBlock(documentHelper.footnotes.separator[i], 0, this.document[footnotesProperty[this.keywordIndex]][separatorProperty[this.keywordIndex]]);\n }\n }\n if (documentHelper.footnotes.continuationSeparator.length > 0) {\n this.document[footnotesProperty[this.keywordIndex]][continuationSeparatorProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.footnotes.continuationSeparator.length; i++) {\n this.writeBlock(documentHelper.footnotes.continuationSeparator[i], 0, this.document[footnotesProperty[this.keywordIndex]][continuationSeparatorProperty[this.keywordIndex]]);\n }\n }\n if (documentHelper.footnotes.continuationNotice.length > 0) {\n this.document[footnotesProperty[this.keywordIndex]][continuationNoticeProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.footnotes.continuationNotice.length; i++) {\n this.writeBlock(documentHelper.footnotes.continuationNotice[i], 0, this.document[footnotesProperty[this.keywordIndex]][continuationNoticeProperty[this.keywordIndex]]);\n }\n }\n };\n SfdtExport.prototype.endnotes = function (documentHelper) {\n this.isWriteEndFootNote = true;\n for (var i = 0; i < this.documentHelper.endnotes.separator.length; i++) {\n this.endnoteSeparator(documentHelper);\n }\n this.isWriteEndFootNote = false;\n };\n SfdtExport.prototype.endnoteSeparator = function (documentHelper) {\n if (documentHelper.endnotes.separator.length > 0) {\n this.document[endnotesProperty[this.keywordIndex]] = {};\n this.document[endnotesProperty[this.keywordIndex]][separatorProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.endnotes.separator.length; i++) {\n this.writeBlock(documentHelper.endnotes.separator[i], 0, this.document[endnotesProperty[this.keywordIndex]][separatorProperty[this.keywordIndex]]);\n }\n }\n if (documentHelper.endnotes.continuationSeparator.length > 0) {\n this.document[endnotesProperty[this.keywordIndex]][continuationSeparatorProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.endnotes.continuationSeparator.length; i++) {\n this.writeBlock(documentHelper.endnotes.continuationSeparator[i], 0, this.document[endnotesProperty[this.keywordIndex]][continuationSeparatorProperty[this.keywordIndex]]);\n }\n }\n if (documentHelper.endnotes.continuationNotice.length > 0) {\n this.document[endnotesProperty[this.keywordIndex]][continuationNoticeProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.endnotes.continuationNotice.length; i++) {\n this.writeBlock(documentHelper.endnotes.continuationNotice[i], 0, this.document[endnotesProperty[this.keywordIndex]][continuationNoticeProperty[this.keywordIndex]]);\n }\n }\n };\n SfdtExport.prototype.writeStyles = function (documentHelper) {\n var styles = [];\n this.document[stylesProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.styles.length; i++) {\n this.document[stylesProperty[this.keywordIndex]].push(this.writeStyle(documentHelper.styles.getItem(i)));\n }\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeStyle = function (style) {\n var wStyle = {};\n wStyle[nameProperty[this.keywordIndex]] = style.name;\n if (style.type === 'Paragraph') {\n wStyle[typeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getStyleTypeEnumValue(style.type) : style.type;\n wStyle[paragraphFormatProperty[this.keywordIndex]] = this.writeParagraphFormat(style.paragraphFormat, this.keywordIndex);\n wStyle[characterFormatProperty[this.keywordIndex]] = this.writeCharacterFormat(style.characterFormat, this.keywordIndex);\n }\n if (style.type === 'Character') {\n wStyle[typeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getStyleTypeEnumValue(style.type) : style.type;\n wStyle[characterFormatProperty[this.keywordIndex]] = this.writeCharacterFormat(style.characterFormat, this.keywordIndex);\n }\n if (style.type === 'Table') {\n wStyle[typeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getStyleTypeEnumValue(style.type) : style.type;\n }\n if (!isNullOrUndefined(style.basedOn)) {\n wStyle[basedOnProperty[this.keywordIndex]] = style.basedOn.name;\n }\n if (!isNullOrUndefined(style.link)) {\n wStyle[linkProperty[this.keywordIndex]] = style.link.name;\n }\n if (!isNullOrUndefined(style.next)) {\n wStyle[nextProperty[this.keywordIndex]] = style.next.name;\n }\n return wStyle;\n };\n SfdtExport.prototype.writeRevisions = function (documentHelper) {\n this.document[revisionsProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.owner.revisions.changes.length; i++) {\n if (this.isExport ||\n (!this.isExport && !this.owner.enableTrackChanges && this.selectedRevisionId.indexOf(documentHelper.owner.revisions.changes[i].revisionID) !== -1)) {\n this.document[revisionsProperty[this.keywordIndex]].push(this.writeRevision(documentHelper.owner.revisions.changes[i]));\n }\n }\n };\n SfdtExport.prototype.writeRevision = function (revisions) {\n var revision = {};\n revision[authorProperty[this.keywordIndex]] = revisions.author;\n revision[dateProperty[this.keywordIndex]] = revisions.date;\n revision[revisionTypeProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getRevisionTypeEnumValue(revisions.revisionType) : revisions.revisionType;\n revision[revisionIdProperty[this.keywordIndex]] = revisions.revisionID;\n return revision;\n };\n SfdtExport.prototype.writeComments = function (documentHelper) {\n this.document[commentsProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.comments.length; i++) {\n if (this.isExport ||\n (!this.isExport && this.selectedCommentsId.indexOf(this.documentHelper.comments[i].commentId) !== -1)) {\n this.document[commentsProperty[this.keywordIndex]].push(this.writeComment(this.documentHelper.comments[i]));\n }\n }\n };\n SfdtExport.prototype.writeCustomXml = function (documentHelper) {\n this.document[customXmlProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.customXmlData.length; i++) {\n var customXml = {};\n var key = documentHelper.customXmlData.keys[i];\n customXml[itemIDProperty[this.keywordIndex]] = key;\n var xmlValue = this.documentHelper.customXmlData.get(key);\n customXml[xmlProperty[this.keywordIndex]] = xmlValue;\n this.document[customXmlProperty[this.keywordIndex]].push(customXml);\n }\n };\n SfdtExport.prototype.writeImages = function (documentHelper) {\n this.document[imagesProperty[this.keywordIndex]] = {};\n for (var i = 0; i < this.images.length; i++) {\n var key = this.images[i];\n var base64ImageString = documentHelper.images.get(key);\n this.document[imagesProperty[this.keywordIndex]][key] = base64ImageString;\n }\n };\n SfdtExport.prototype.writeComment = function (comments) {\n var comment = {};\n comment[commentIdProperty[this.keywordIndex]] = comments.commentId;\n comment[authorProperty[this.keywordIndex]] = comments.author;\n comment[dateProperty[this.keywordIndex]] = comments.date;\n comment[blocksProperty[this.keywordIndex]] = HelperMethods.commentInlines(comments.text, comments.mentions, this.keywordIndex);\n comment[doneProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(comments.isResolved, this.keywordIndex);\n comment[replyCommentsProperty[this.keywordIndex]] = [];\n for (var i = 0; i < comments.replyComments.length; i++) {\n comment[replyCommentsProperty[this.keywordIndex]].push(this.writeComment(comments.replyComments[i]));\n }\n return comment;\n };\n SfdtExport.prototype.writeLists = function (documentHelper) {\n var abstractLists = [];\n this.document[listsProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.lists.length; i++) {\n var list = documentHelper.lists[i];\n if (this.lists.indexOf(list.listId) > -1) {\n this.document[listsProperty[this.keywordIndex]].push(this.writeList(list));\n if (abstractLists.indexOf(list.abstractListId) < 0) {\n abstractLists.push(list.abstractListId);\n }\n }\n }\n this.document[abstractListsProperty[this.keywordIndex]] = [];\n for (var i = 0; i < documentHelper.abstractLists.length; i++) {\n var abstractList = documentHelper.abstractLists[i];\n if (abstractLists.indexOf(abstractList.abstractListId) > -1) {\n this.document[abstractListsProperty[this.keywordIndex]].push(this.writeAbstractList(abstractList));\n }\n }\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeAbstractList = function (wAbstractList) {\n var abstractList = {};\n abstractList[abstractListIdProperty[this.keywordIndex]] = wAbstractList.abstractListId;\n abstractList[nsidProperty] = wAbstractList.nsid;\n abstractList[levelsProperty[this.keywordIndex]] = [];\n for (var i = 0; i < wAbstractList.levels.length; i++) {\n abstractList[levelsProperty[this.keywordIndex]][i] = this.writeListLevel(wAbstractList.levels[i]);\n }\n return abstractList;\n };\n /**\n * @private\n */\n SfdtExport.prototype.writeList = function (wList) {\n var list = {};\n if (!isNullOrUndefined(wList)) {\n list[abstractListIdProperty[this.keywordIndex]] = wList.abstractListId;\n list[levelOverridesProperty[this.keywordIndex]] = [];\n for (var i = 0; i < wList.levelOverrides.length; i++) {\n list[levelOverridesProperty[this.keywordIndex]].push(this.writeLevelOverrides(wList.levelOverrides[i]));\n }\n list[listIdProperty[this.keywordIndex]] = wList.listId;\n list[nsidProperty] = wList.nsid;\n }\n return list;\n };\n SfdtExport.prototype.writeLevelOverrides = function (wlevel) {\n var levelOverrides = {};\n levelOverrides[levelNumberProperty[this.keywordIndex]] = wlevel.levelNumber;\n if (wlevel.overrideListLevel) {\n levelOverrides[overrideListLevelProperty[this.keywordIndex]] = this.writeListLevel(wlevel.overrideListLevel);\n }\n levelOverrides[startAtProperty[this.keywordIndex]] = wlevel.startAt;\n return levelOverrides;\n };\n SfdtExport.prototype.writeListLevel = function (wListLevel) {\n var listLevel = {};\n listLevel[characterFormatProperty[this.keywordIndex]] = this.writeCharacterFormat(wListLevel.characterFormat, this.keywordIndex);\n listLevel[paragraphFormatProperty[this.keywordIndex]] = this.writeParagraphFormat(wListLevel.paragraphFormat, this.keywordIndex);\n listLevel[isLegalStyleNumberingProperty[this.keywordIndex]] = HelperMethods.getBoolInfo(wListLevel.isLegalStyleNumbering, this.keywordIndex);\n listLevel[followCharacterProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getFollowCharacterType(wListLevel.followCharacter) : wListLevel.followCharacter;\n listLevel[listLevelPatternProperty[this.keywordIndex]] = this.keywordIndex == 1 ? this.getListLevelPatternEnumValue(wListLevel.listLevelPattern) : wListLevel.listLevelPattern;\n listLevel[numberFormatProperty[this.keywordIndex]] = wListLevel.numberFormat;\n listLevel[paraStyleNameProperty[this.keywordIndex]] = wListLevel.paraStyleName;\n listLevel[restartLevelProperty[this.keywordIndex]] = wListLevel.restartLevel;\n listLevel[startAtProperty[this.keywordIndex]] = wListLevel.startAt;\n return listLevel;\n };\n SfdtExport.prototype.getParentBlock = function (widget) {\n if (widget.isInsideTable) {\n widget = this.owner.documentHelper.layout.getParentTable(widget);\n }\n return widget;\n };\n SfdtExport.prototype.getParentCell = function (cell) {\n while (cell.ownerTable.isInsideTable) {\n cell = cell.ownerTable.associatedCell;\n }\n return cell;\n };\n SfdtExport.prototype.getWidthTypeEnumValue = function (widthType) {\n switch (widthType) {\n case 'Auto':\n return 0;\n case 'Percent':\n return 1;\n case 'Point':\n return 2;\n }\n };\n SfdtExport.prototype.getTableAlignmentEnumValue = function (tableAlignment) {\n switch (tableAlignment) {\n case 'Left':\n return 0;\n case 'Center':\n return 1;\n case 'Right':\n return 2;\n }\n };\n SfdtExport.prototype.getTextureStyleEnumValue = function (textureStyle) {\n switch (textureStyle) {\n case 'TextureNone':\n return 0;\n case 'Texture2Pt5Percent':\n return 1;\n case 'Texture5Percent':\n return 2;\n case 'Texture7Pt5Percent':\n return 3;\n case 'Texture10Percent':\n return 4;\n case 'Texture12Pt5Percent':\n return 5;\n case 'Texture15Percent':\n return 6;\n case 'Texture17Pt5Percent':\n return 7;\n case 'Texture20Percent':\n return 8;\n case 'Texture22Pt5Percent':\n return 9;\n case 'Texture25Percent':\n return 10;\n case 'Texture27Pt5Percent':\n return 11;\n case 'Texture30Percent':\n return 12;\n case 'Texture32Pt5Percent':\n return 13;\n case 'Texture35Percent':\n return 14;\n case 'Texture37Pt5Percent':\n return 15;\n case 'Texture40Percent':\n return 16;\n case 'Texture42Pt5Percent':\n return 17;\n case 'Texture45Percent':\n return 18;\n case 'Texture47Pt5Percent':\n return 19;\n case 'Texture50Percent':\n return 20;\n case 'Texture52Pt5Percent':\n return 21;\n case 'Texture55Percent':\n return 22;\n case 'Texture57Pt5Percent':\n return 23;\n case 'Texture60Percent':\n return 24;\n case 'Texture62Pt5Percent':\n return 25;\n case 'Texture65Percent':\n return 26;\n case 'Texture67Pt5Percent':\n return 27;\n case 'Texture70Percent':\n return 28;\n case 'Texture72Pt5Percent':\n return 29;\n case 'Texture75Percent':\n return 30;\n case 'Texture77Pt5Percent':\n return 31;\n case 'Texture80Percent':\n return 32;\n case 'Texture82Pt5Percent':\n return 33;\n case 'Texture85Percent':\n return 34;\n case 'Texture87Pt5Percent':\n return 35;\n case 'Texture90Percent':\n return 36;\n case 'Texture92Pt5Percent':\n return 37;\n case 'Texture95Percent':\n return 38;\n case 'Texture97Pt5Percent':\n return 39;\n case 'TextureSolid':\n return 40;\n case 'TextureDarkHorizontal':\n return 41;\n case 'TextureDarkVertical':\n return 42;\n case 'TextureDarkDiagonalDown':\n return 43;\n case 'TextureDarkDiagonalUp':\n return 44;\n case 'TextureDarkCross':\n return 45;\n case 'TextureDarkDiagonalCross':\n return 46;\n case 'TextureHorizontal':\n return 47;\n case 'TextureVertical':\n return 48;\n case 'TextureDiagonalDown':\n return 49;\n case 'TextureDiagonalUp':\n return 50;\n case 'TextureCross':\n return 51;\n case 'TextureDiagonalCross':\n return 52;\n }\n };\n SfdtExport.prototype.getHeighTypeEnumValue = function (heightType) {\n switch (heightType) {\n case 'AtLeast':\n return 0;\n case 'Exactly':\n return 1;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getCellVerticalAlignmentEnumValue = function (cellVerticalAlignment) {\n switch (cellVerticalAlignment) {\n case 'Top':\n return 0;\n case 'Center':\n return 1;\n case 'Bottom':\n return 2;\n }\n };\n SfdtExport.prototype.getListLevelPatternEnumValue = function (listLevelPattern) {\n switch (listLevelPattern) {\n case 'None':\n return 0;\n case 'KanjiDigit':\n case 'Arabic':\n return 1;\n case 'UpRoman':\n return 2;\n case 'LowRoman':\n return 3;\n case 'UpLetter':\n return 4;\n case 'LowLetter':\n return 5;\n case 'Ordinal':\n return 6;\n case 'Number':\n return 7;\n case 'OrdinalText':\n return 8;\n case 'LeadingZero':\n return 9;\n case 'Bullet':\n return 10;\n case 'FarEast':\n return 11;\n case 'Special':\n return 12;\n }\n };\n SfdtExport.prototype.getStyleTypeEnumValue = function (styleType) {\n switch (styleType) {\n case 'Paragraph':\n return 0;\n case 'Character':\n return 1;\n case 'Table':\n return 2;\n }\n };\n SfdtExport.prototype.getProtectionTypeEnumValue = function (protectionType) {\n switch (protectionType) {\n case 'NoProtection':\n return 0;\n case 'ReadOnly':\n return 1;\n case 'FormFieldsOnly':\n return 2;\n case 'CommentsOnly':\n return 3;\n case 'RevisionsOnly':\n return 4;\n }\n };\n SfdtExport.prototype.getRevisionTypeEnumValue = function (revisionType) {\n switch (revisionType) {\n case 'Insertion':\n return 1;\n case 'Deletion':\n return 2;\n case 'MoveTo':\n return 3;\n case 'MoveFrom':\n return 4;\n }\n };\n SfdtExport.prototype.getFootnoteTypeEnumValue = function (footnoteType) {\n switch (footnoteType) {\n case 'Footnote':\n return 0;\n case 'Endnote':\n return 1;\n }\n };\n SfdtExport.prototype.getFootnoteRestartIndexEnumValue = function (footnoteRestartIndex) {\n switch (footnoteRestartIndex) {\n case 'DoNotRestart':\n return 0;\n case 'RestartForEachSection':\n return 1;\n case 'RestartForEachPage':\n return 2;\n }\n };\n SfdtExport.prototype.getFootEndNoteNumberFormatEnumValue = function (footEndNoteNumberFormat) {\n switch (footEndNoteNumberFormat) {\n case 'Arabic':\n return 0;\n case 'UpperCaseRoman':\n return 1;\n case 'LowerCaseRoman':\n return 2;\n case 'UpperCaseLetter':\n return 3;\n case 'LowerCaseLetter':\n return 4;\n }\n };\n SfdtExport.prototype.getTextVerticalAlignmentEnumValue = function (textVerticalAlignment) {\n switch (textVerticalAlignment) {\n case 'Top':\n return 0;\n case 'Center':\n return 1;\n case 'Bottom':\n return 2;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getShapeVerticalAlignmentEnumValue = function (shapeVerticalAlignment) {\n switch (shapeVerticalAlignment) {\n case 'None':\n return 0;\n case 'Top':\n return 1;\n case 'Center':\n return 2;\n case 'Bottom':\n return 3;\n case 'Inline':\n return 4;\n case 'Inside':\n return 5;\n case 'Outside':\n return 6;\n }\n };\n SfdtExport.prototype.getShapeHorizontalAlignmentEnumValue = function (shapeHorizontalAlignment) {\n switch (shapeHorizontalAlignment) {\n case 'None':\n return 0;\n case 'Center':\n return 1;\n case 'Inside':\n return 2;\n case 'Left':\n return 3;\n case 'Outside':\n return 4;\n case 'Right':\n return 5;\n }\n };\n SfdtExport.prototype.getVerticalOriginEnumValue = function (verticalOrigin) {\n switch (verticalOrigin) {\n case 'Paragraph':\n return 0;\n case 'BottomMargin':\n return 1;\n case 'InsideMargin':\n return 2;\n case 'Line':\n return 3;\n case 'Margin':\n return 4;\n case 'OutsideMargin':\n return 5;\n case 'Page':\n return 6;\n case 'TopMargin':\n return 7;\n }\n };\n SfdtExport.prototype.getHorizontalOriginEnumValue = function (horizontalOrigin) {\n switch (horizontalOrigin) {\n case 'Column':\n return 0;\n case 'Character':\n return 1;\n case 'InsideMargin':\n return 2;\n case 'LeftMargin':\n return 3;\n case 'Margin':\n return 4;\n case 'OutsideMargin':\n return 5;\n case 'Page':\n return 6;\n case 'RightMargin':\n return 7;\n }\n };\n SfdtExport.prototype.getTableVerticalRelationEnumValue = function (tableRelation) {\n switch (tableRelation) {\n case 'Paragraph':\n return 0;\n case 'Margin':\n return 1;\n case 'Page':\n return 2;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getTableHorizontalRelationEnumValue = function (tableRelation) {\n switch (tableRelation) {\n case 'Column':\n return 0;\n case 'Margin':\n return 1;\n case 'Page':\n return 2;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getTableVerticalPositionEnumValue = function (tableVerticalPosition) {\n switch (tableVerticalPosition) {\n case 'None':\n return 0;\n case 'Top':\n return 1;\n case 'Center':\n return 2;\n case 'Bottom':\n return 3;\n case 'Inside':\n return 4;\n case 'Outside':\n return 5;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getTableHorizontalPositionEnumValue = function (tableHorizontalPosition) {\n switch (tableHorizontalPosition) {\n case 'Left':\n return 0;\n case 'Center':\n return 1;\n case 'Inside':\n return 2;\n case 'Outside':\n return 3;\n case 'Right':\n return 4;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getLineDashStyleEnumValue = function (lineDashStyle) {\n switch (lineDashStyle) {\n case 'Solid':\n return 0;\n case 'Dash':\n return 1;\n case 'DashDot':\n return 2;\n case 'DashDotDot':\n return 3;\n case 'DashDotGEL':\n return 4;\n case 'DashGEL':\n return 5;\n case 'Dot':\n return 6;\n case 'DotGEL':\n return 7;\n case 'LongDashDotDotGEL':\n return 8;\n case 'LongDashDotGEL':\n return 9;\n case 'LongDashGEL':\n return 10;\n }\n };\n SfdtExport.prototype.getHorizontalPositionAbsEnumValue = function (horizontalPositionAbs) {\n switch (horizontalPositionAbs) {\n case 'Left':\n return 0;\n case 'Center':\n return 1;\n case 'Right':\n return 2;\n case 'Inside':\n return 3;\n case 'Outside':\n return 4;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getTabJustificationEnumValue = function (tabJustification) {\n switch (tabJustification) {\n case 'Left':\n return 0;\n case 'Bar':\n return 1;\n case 'Center':\n return 2;\n case 'Decimal':\n return 3;\n case 'List':\n return 4;\n case 'Right':\n return 5;\n }\n };\n SfdtExport.prototype.getTabLeaderEnumValue = function (tabLeader) {\n switch (tabLeader) {\n case 'None':\n return 0;\n case 'Single':\n return 1;\n case 'Dot':\n return 2;\n case 'Hyphen':\n return 3;\n case 'Underscore':\n return 4;\n }\n };\n SfdtExport.prototype.getTextFormFieldTypeEnumValue = function (textFormFieldType) {\n switch (textFormFieldType) {\n case 'Text':\n return 0;\n case 'Number':\n return 1;\n case 'Date':\n return 2;\n case 'Calculation':\n return 3;\n }\n };\n SfdtExport.prototype.getTextFormFieldFormatEnumValue = function (textFormFieldFormat) {\n switch (textFormFieldFormat) {\n case 'None':\n return 0;\n case 'FirstCapital':\n return 1;\n case 'Lowercase':\n return 2;\n case 'Uppercase':\n return 3;\n case 'Titlecase':\n return 4;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getCheckBoxSizeTypeEnumValue = function (checkBoxSizeType) {\n switch (checkBoxSizeType) {\n case 'Auto':\n return 0;\n case 'Exactly':\n return 1;\n }\n };\n SfdtExport.prototype.getContentControlAppearanceEnumValue = function (contentControlAppearance) {\n switch (contentControlAppearance) {\n case 'BoundingBox':\n return 1;\n case 'Hidden':\n return 2;\n case 'Tags':\n return 3;\n default:\n return 1;\n }\n };\n SfdtExport.prototype.getContentControlTypeEnumValue = function (contentControlType) {\n switch (contentControlType) {\n case 'RichText':\n return 0;\n case 'BuildingBlockGallery':\n return 1;\n case 'CheckBox':\n return 2;\n case 'ComboBox':\n return 3;\n case 'Date':\n return 4;\n case 'DropDownList':\n return 5;\n case 'Group':\n return 6;\n case 'Picture':\n return 7;\n case 'RepeatingSection':\n return 8;\n case 'Text':\n return 9;\n }\n };\n SfdtExport.prototype.getDateCalendarTypeEnumValue = function (dateCalendarType) {\n switch (dateCalendarType) {\n case 'Gregorian':\n return 0;\n case 'GregorianArabic':\n return 1;\n case 'GregorianEnglish':\n return 2;\n case 'GregorianMiddleEastFrench':\n return 3;\n case 'GregorianTransliteratedEnglish':\n return 4;\n case 'GregorianTransliteratedFrench':\n return 5;\n case 'Hebrew':\n return 6;\n case 'Hijri':\n return 7;\n case 'Japan':\n return 8;\n case 'Korean':\n return 9;\n case 'Saka':\n return 10;\n case 'Taiwan':\n return 11;\n case 'Thai':\n return 12;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getDateStorageFormatEnumValue = function (dateStorageFormat) {\n switch (dateStorageFormat) {\n case 'DateStorageDate':\n return 1;\n case 'DateStorageDateTime':\n return 2;\n case 'DateStorageText':\n return 3;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getTextWrappingStyleEnumValue = function (textWrappingStyle) {\n switch (textWrappingStyle) {\n case 'Inline':\n return 0;\n case 'InFrontOfText':\n return 1;\n case 'Square':\n return 2;\n case 'TopAndBottom':\n return 3;\n case 'Behind':\n return 4;\n default:\n return 0;\n }\n };\n SfdtExport.prototype.getTextWrappingTypeEnumValue = function (textWrappingType) {\n switch (textWrappingType) {\n case 'Both':\n return 0;\n case 'Left':\n return 1;\n case 'Right':\n return 2;\n case 'Largest':\n return 3;\n }\n };\n SfdtExport.prototype.getCompatibilityModeEnumValue = function (compatibilityMode) {\n switch (compatibilityMode) {\n case 'Word2013':\n return 0;\n case 'Word2003':\n return 1;\n case 'Word2007':\n return 2;\n case 'Word2010':\n return 3;\n }\n };\n SfdtExport.prototype.getLineFormatTypeEnumValue = function (lineFormatType) {\n switch (lineFormatType) {\n case 'Solid':\n return 0;\n case 'Patterned':\n return 1;\n case 'Gradient':\n return 2;\n case 'None':\n return 3;\n }\n };\n SfdtExport.prototype.getAutoShapeTypeEnumValue = function (autoShapeType) {\n switch (autoShapeType) {\n case 'Rectangle':\n return 1;\n case 'RoundedRectangle':\n return 2;\n case 'StraightConnector':\n return 3;\n default:\n return 1;\n }\n };\n SfdtExport.prototype.getFollowCharacterType = function (followCharacterType) {\n switch (followCharacterType) {\n case 'Tab':\n return 0;\n case 'Space':\n return 1;\n case 'None':\n return 2;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n SfdtExport.prototype.destroy = function () {\n this.lists = undefined;\n this.images = undefined;\n this.endLine = undefined;\n this.startLine = undefined;\n this.endOffset = undefined;\n this.documentHelper = undefined;\n };\n return SfdtExport;\n}());\nexport { SfdtExport };\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * The Hyperlink dialog is used to insert or edit hyperlink at selection.\n */\n/* eslint-disable max-len */\nvar HyperlinkDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function HyperlinkDialog(documentHelper) {\n var _this = this;\n this.displayText = '';\n this.navigationUrl = undefined;\n this.screenTipText = '';\n this.bookmarkDropdown = undefined;\n this.bookmarkCheckbox = undefined;\n this.bookmarks = [];\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.onKeyUpOnUrlBox = function (event) {\n if (event.keyCode === 13) {\n if (_this.displayTextBox.value !== '' && _this.urlTextBox.value !== '') {\n _this.onInsertHyperlink();\n }\n return;\n }\n //const selectedText: string = this.documentHelper.selection.text;\n var urlValue = _this.urlTextBox.value;\n if (urlValue.substring(0, 4).toLowerCase() === 'www.') {\n _this.urlTextBox.value = 'http://' + urlValue;\n }\n if (_this.displayText === '') {\n _this.displayTextBox.value = urlValue;\n }\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnDisplayBox = function () {\n _this.displayText = _this.displayTextBox.value;\n _this.enableOrDisableInsertButton();\n };\n this.onScreenTipTextBox = function () {\n _this.screenTipText = _this.screenTipTextBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertButtonClick = function () {\n _this.onInsertHyperlink();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.clearValue();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadHyperlinkDialog = function () {\n _this.documentHelper.updateFocus();\n _this.bookmarks = [];\n for (var i = 0; i < _this.documentHelper.bookmarks.keys.length; i++) {\n var bookmark = _this.documentHelper.bookmarks.keys[parseInt(i.toString(), 10)];\n if (bookmark.indexOf('_') !== 0) {\n _this.bookmarks.push(bookmark);\n }\n }\n var fieldBegin = _this.documentHelper.selection.getHyperlinkField();\n if (!isNullOrUndefined(fieldBegin)) {\n if (!isNullOrUndefined(fieldBegin.fieldSeparator)) {\n var format = undefined;\n var fieldObj = _this.documentHelper.selection.getHyperlinkDisplayText(fieldBegin.fieldSeparator.line.paragraph, fieldBegin.fieldSeparator, fieldBegin.fieldEnd, false, format);\n _this.displayText = fieldObj.displayText;\n _this.displayTextBox.disabled = fieldObj.isNestedField;\n }\n _this.displayTextBox.value = _this.displayText;\n _this.screenTipTextBox.value = _this.documentHelper.selection.getLinkText(fieldBegin, false);\n var link = _this.documentHelper.selection.getLinkText(fieldBegin, true);\n _this.urlTextBox.value = _this.navigationUrl = link;\n _this.documentHelper.dialog.header = _this.localObj.getConstant('Edit Hyperlink');\n }\n else {\n _this.displayText = _this.documentHelper.selection.getText(true);\n if (_this.displayText !== '') {\n if (_this.displayText.indexOf(String.fromCharCode(65532)) !== -1 ||\n _this.displayText.indexOf('\\r') !== -1 && (_this.displayText.lastIndexOf('\\r') !== -1 &&\n _this.displayText.slice(0, -1).indexOf('\\r') !== -1)) {\n _this.displayTextBox.value = '<>';\n _this.displayTextBox.disabled = true;\n }\n else {\n _this.displayTextBox.value = _this.displayText;\n }\n }\n }\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n _this.bookmarkCheckbox.checked = false;\n _this.bookmarkDropdown.dataSource = _this.documentHelper.bookmarks.keys;\n _this.insertButton = document.getElementsByClassName('e-hyper-insert')[0];\n _this.enableOrDisableInsertButton();\n _this.urlTextBox.focus();\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeHyperlinkDialog = function () {\n _this.clearValue();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {CheckBoxChangeArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.onUseBookmarkChange = function (args) {\n if (args.checked) {\n _this.bookmarkDiv.style.display = 'block';\n _this.bookmarkDropdown.dataSource = _this.bookmarks;\n _this.addressText.style.display = 'none';\n _this.urlTextBox.style.display = 'none';\n }\n else {\n _this.bookmarkDiv.style.display = 'none';\n _this.addressText.style.display = 'block';\n _this.urlTextBox.style.display = 'block';\n }\n _this.enableOrDisableInsertButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onBookmarkchange = function () {\n if (_this.bookmarkDropdown.value !== '') {\n _this.insertButton.disabled = false;\n }\n };\n this.documentHelper = documentHelper;\n }\n HyperlinkDialog.prototype.getModuleName = function () {\n return 'HyperlinkDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n HyperlinkDialog.prototype.initHyperlinkDialog = function (localValue, isRtl) {\n this.target = createElement('div', { className: 'e-de-hyperlink' });\n var container = createElement('div');\n var displayText = createElement('div', { className: 'e-de-dlg-container' });\n this.displayTextBox = createElement('input', { className: 'e-input' });\n this.displayTextBox.addEventListener('keyup', this.onKeyUpOnDisplayBox);\n displayText.appendChild(this.displayTextBox);\n container.appendChild(displayText);\n //container.appendChild(this.displayTextBox);\n this.addressText = createElement('div', { className: 'e-de-dlg-container' });\n this.urlTextBox = createElement('input', { className: 'e-input', attrs: { autofocus: 'true' } });\n this.urlTextBox.addEventListener('input', this.onKeyUpOnUrlBox);\n this.urlTextBox.addEventListener('keyup', this.onKeyUpOnUrlBox);\n this.addressText.appendChild(this.urlTextBox);\n container.appendChild(this.addressText);\n //container.appendChild(this.urlTextBox);\n var screenTipText = createElement('div', { className: 'e-de-dlg-container' });\n this.screenTipTextBox = createElement('input', { className: 'e-input' });\n this.screenTipTextBox.addEventListener('keyup', this.onScreenTipTextBox);\n screenTipText.appendChild(this.screenTipTextBox);\n container.appendChild(screenTipText);\n //container.appendChild(this.screenTipTextBox);\n this.bookmarkDiv = createElement('div', { styles: 'display:none;' });\n var bookmarkText = createElement('div', { className: 'e-de-dlg-container' });\n //const bookmarkTextElement: HTMLElement = createElement('div', { className: 'e-de-hyperlink-dlg-bookmark' });\n var bookmarkValue = createElement('input');\n bookmarkText.appendChild(bookmarkValue);\n this.bookmarkDropdown = new DropDownList({\n dataSource: [], change: this.onBookmarkchange,\n noRecordsTemplate: localValue.getConstant('No bookmarks found'),\n placeholder: localValue.getConstant('Bookmark'), floatLabelType: 'Always'\n });\n this.bookmarkDropdown.appendTo(bookmarkValue);\n this.bookmarkDiv.appendChild(bookmarkText);\n //this.bookmarkDiv.appendChild(bookmarkTextElement);\n container.appendChild(this.bookmarkDiv);\n var bookmarkCheckDiv = createElement('div');\n var bookmarkCheck = createElement('input', { attrs: { type: 'checkbox' } });\n bookmarkCheckDiv.appendChild(bookmarkCheck);\n this.bookmarkCheckbox = new CheckBox({\n label: localValue.getConstant('Use bookmarks'),\n enableRtl: isRtl, change: this.onUseBookmarkChange\n });\n this.bookmarkCheckbox.appendTo(bookmarkCheck);\n container.appendChild(bookmarkCheckDiv);\n this.target.appendChild(container);\n new TextBox({ placeholder: localValue.getConstant('Text to display'), floatLabelType: 'Always' }, this.displayTextBox);\n new TextBox({ placeholder: localValue.getConstant('Address'), floatLabelType: 'Always' }, this.urlTextBox);\n new TextBox({ placeholder: localValue.getConstant('ScreenTip text'), floatLabelType: 'Always' }, this.screenTipTextBox);\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.show = function () {\n this.localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localObj.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initHyperlinkDialog(this.localObj, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog.header = this.localObj.getConstant('Insert Hyperlink');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertButtonClick,\n buttonModel: { content: this.localObj.getConstant('Ok'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.beforeOpen = this.loadHyperlinkDialog;\n this.documentHelper.dialog.close = this.closeHyperlinkDialog;\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.hide = function () {\n this.closeHyperlinkDialog();\n };\n HyperlinkDialog.prototype.enableOrDisableInsertButton = function () {\n if (!isNullOrUndefined(this.insertButton)) {\n if (this.bookmarkCheckbox.checked) {\n this.insertButton.disabled = this.bookmarkDropdown.value === '' || this.bookmarkDropdown.value == null;\n }\n else {\n this.insertButton.disabled = this.urlTextBox.value === '' || this.displayTextBox.value === '';\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.onInsertHyperlink = function () {\n var displayText = SanitizeHtmlHelper.sanitize(this.displayTextBox.value.trim());\n var address = this.urlTextBox.value.trim();\n if (HelperMethods.startsWith(address, 'http://') || HelperMethods.startsWith(address, 'https://')) {\n address = SanitizeHtmlHelper.sanitize(address.replace(/\\s/g, ''));\n }\n var screenTipText = SanitizeHtmlHelper.sanitize(this.screenTipTextBox.value.trim());\n var isBookmark = false;\n if (!isNullOrUndefined(this.bookmarkDropdown.value) && this.bookmarkDropdown.value !== '' && this.bookmarkCheckbox.checked === true) {\n address = this.bookmarkDropdown.value;\n isBookmark = true;\n }\n if (address === '') {\n this.documentHelper.hideDialog();\n return;\n }\n if (screenTipText !== '') {\n address = address + '\\\"\\\\o \\\"' + screenTipText;\n }\n if (displayText === '' && address !== '') {\n displayText = address;\n }\n else {\n displayText = this.displayTextBox.value;\n }\n if (!isNullOrUndefined(this.navigationUrl)) {\n this.documentHelper.owner.editorModule.editHyperlink(this.documentHelper.selection, address, displayText, isBookmark);\n }\n else {\n var remove = (this.documentHelper.selection.text !== displayText ||\n this.documentHelper.selection.text.indexOf('\\r') === -1) && !this.displayTextBox.disabled;\n this.documentHelper.owner.editorModule.insertHyperlinkInternal(address, displayText, remove, isBookmark);\n }\n this.documentHelper.hideDialog();\n this.navigationUrl = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.clearValue = function () {\n this.displayTextBox.value = '';\n this.urlTextBox.value = '';\n this.screenTipText = '';\n this.screenTipTextBox.value = '';\n this.displayText = '';\n this.displayTextBox.disabled = false;\n this.bookmarks = [];\n };\n /**\n * @private\n * @returns {void}\n */\n HyperlinkDialog.prototype.destroy = function () {\n if (this.displayTextBox) {\n this.displayTextBox.innerHTML = '';\n this.displayTextBox = undefined;\n }\n if (this.urlTextBox) {\n this.urlTextBox.parentElement.removeChild(this.urlTextBox);\n this.urlTextBox = undefined;\n }\n if (this.screenTipTextBox) {\n this.screenTipTextBox.parentElement.removeChild(this.screenTipTextBox);\n this.screenTipTextBox = undefined;\n }\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n this.target.innerHTML = '';\n this.target = undefined;\n }\n };\n return HyperlinkDialog;\n}());\nexport { HyperlinkDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\n/**\n * The Table dialog is used to insert table at selection.\n */\nvar TableDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper\n * @private\n */\n function TableDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertTableClick = function () {\n if (_this.columnValueTexBox.value < 1 || _this.columnValueTexBox.value\n > _this.documentHelper.owner.documentEditorSettings.maximumColumns) {\n var columnAlertPopup = _this.localeValue.getConstant('Number of columns must be between') + ' 1 ' + _this.localeValue.getConstant('and') + ' ' + _this.documentHelper.owner.documentEditorSettings.maximumColumns.toString();\n DialogUtility.alert(columnAlertPopup).enableRtl = _this.documentHelper.owner.enableRtl;\n return;\n }\n if (_this.rowValueTextBox.value < 1 || _this.rowValueTextBox.value > _this.documentHelper.owner.documentEditorSettings.maximumRows) {\n var rowAlertPopup = _this.localeValue.getConstant('Number of rows must be between') + ' 1 ' + _this.localeValue.getConstant('and') + ' ' + _this.documentHelper.owner.documentEditorSettings.maximumColumns.toString();\n DialogUtility.alert(rowAlertPopup).enableRtl = _this.documentHelper.owner.enableRtl;\n return;\n }\n if (_this.rowValueTextBox.value <= _this.documentHelper.owner.documentEditorSettings.maximumRows\n && _this.columnValueTexBox.value <= _this.documentHelper.owner.documentEditorSettings.maximumColumns) {\n var rowCount = _this.rowValueTextBox.value;\n var columnCount = _this.columnValueTexBox.value;\n if (!(isNullOrUndefined(rowCount) && isNullOrUndefined(columnCount))) {\n _this.documentHelper.owner.editorModule.insertTable(rowCount, columnCount);\n }\n _this.documentHelper.hideDialog();\n }\n };\n this.documentHelper = documentHelper;\n }\n TableDialog.prototype.getModuleName = function () {\n return 'TableDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specified the locale value.\n * @returns {void}\n */\n TableDialog.prototype.initTableDialog = function (localValue) {\n this.target = createElement('div', { className: 'e-de-insert-table' });\n var parentDiv = createElement('div');\n var columnValue = createElement('div', { className: 'e-de-container-row' });\n this.columnsCountBox = createElement('input', {\n attrs: { type: 'text' }\n });\n columnValue.appendChild(this.columnsCountBox);\n this.columnsCountBox.setAttribute('aria-labelledby', localValue.getConstant('Insert Table'));\n var rowValue = createElement('div');\n this.rowsCountBox = createElement('input', {\n attrs: { type: 'text' }\n });\n rowValue.appendChild(this.rowsCountBox);\n parentDiv.appendChild(columnValue);\n parentDiv.appendChild(rowValue);\n this.target.appendChild(parentDiv);\n this.rowValueTextBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n strictMode: true,\n enablePersistence: false,\n placeholder: localValue.getConstant('Number of rows'),\n floatLabelType: 'Always'\n });\n this.rowValueTextBox.appendTo(this.rowsCountBox);\n this.rowsCountBox.setAttribute('aria-labelledby', localValue.getConstant('Number of rows'));\n this.columnValueTexBox = new NumericTextBox({\n format: '#',\n value: 2,\n min: 1,\n strictMode: true,\n enablePersistence: false,\n placeholder: localValue.getConstant('Number of columns'),\n floatLabelType: 'Always'\n });\n this.columnsCountBox.setAttribute('aria-labelledby', localValue.getConstant('Number of columns'));\n parentDiv.setAttribute('aria-labelledby', localValue.getConstant('Insert Table'));\n parentDiv.setAttribute('aria-describedby', localValue.getConstant('Insert Table'));\n this.columnValueTexBox.appendTo(this.columnsCountBox);\n };\n /**\n * @private\n * @returns {void}\n */\n TableDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n this.localeValue = localValue;\n if (!this.target) {\n this.initTableDialog(localValue);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog.header = localValue.getConstant('Insert Table');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertTableClick,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ok', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cancel' }\n }];\n this.rowValueTextBox.value = 2;\n this.columnValueTexBox.value = 2;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.columnValueTexBox.focusIn();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n TableDialog.prototype.destroy = function () {\n if (this.columnsCountBox) {\n if (this.columnsCountBox.parentElement) {\n this.columnsCountBox.parentElement.removeChild(this.columnsCountBox);\n }\n this.columnsCountBox = undefined;\n }\n if (this.rowsCountBox) {\n if (this.rowsCountBox.parentElement) {\n this.rowsCountBox.parentElement.removeChild(this.rowsCountBox);\n }\n this.rowsCountBox = undefined;\n }\n if (this.columnValueTexBox) {\n this.columnValueTexBox.destroy();\n this.columnValueTexBox = undefined;\n }\n if (this.rowValueTextBox) {\n this.rowValueTextBox.destroy();\n this.rowValueTextBox = undefined;\n }\n this.columnsCountBox = undefined;\n this.rowsCountBox = undefined;\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var i = 0; i < this.target.childNodes.length; i++) {\n this.target.removeChild(this.target.childNodes[parseInt(i.toString(), 10)]);\n i--;\n }\n this.target = undefined;\n }\n };\n return TableDialog;\n}());\nexport { TableDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * The Bookmark dialog is used to add, navigate or delete bookmarks.\n */\nvar BookmarkDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function BookmarkDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnTextBox = function () {\n _this.enableOrDisableButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.addBookmark = function () {\n _this.documentHelper.owner.editorModule.insertBookmark(SanitizeHtmlHelper.sanitize(_this.textBoxInput.value));\n _this.documentHelper.hideDialog();\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.selectHandler = function (args) {\n _this.focusTextBox(args.text);\n };\n /**\n * @private\n * @returns {void}\n */\n this.gotoBookmark = function () {\n _this.documentHelper.selection.selectBookmark(_this.textBoxInput.value);\n };\n /**\n * @private\n * @returns {void}\n */\n this.deleteBookmark = function () {\n _this.documentHelper.owner.editorModule.deleteBookmark(_this.textBoxInput.value);\n _this.show();\n };\n this.documentHelper = documentHelper;\n }\n BookmarkDialog.prototype.getModuleName = function () {\n return 'BookmarkDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale.\n * @param {string[]} bookmarks - Specifies bookmark collection.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n BookmarkDialog.prototype.initBookmarkDialog = function (localValue, bookmarks, isRtl) {\n var id = this.documentHelper.owner.containerId + '_insert_bookmark';\n this.target = createElement('div', { id: id, className: 'e-de-bookmark' });\n var headerValue = localValue.getConstant('Bookmark name') + ':';\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-bookmark-dlgfields' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-bookmark-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-bookmark-list' });\n commonDiv.appendChild(searchDiv);\n if (isRtl) {\n searchDiv.classList.add('e-de-rtl');\n }\n var textBoxDiv = createElement('div', { className: 'e-bookmark-textboxdiv' });\n searchDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input e-bookmark-textbox-input', id: 'bookmark_text_box', attrs: { autofocus: 'true' } });\n this.textBoxInput.setAttribute('type', 'text');\n this.textBoxInput.setAttribute('aria-label', localValue.getConstant('Bookmark name'));\n textBoxDiv.appendChild(this.textBoxInput);\n var listviewDiv = createElement('div', { className: 'e-bookmark-listViewDiv', id: 'bookmark_listview', attrs: { tabindex: '-1', role: 'listbox' } });\n listviewDiv.setAttribute('aria-label', localValue.getConstant('BookMarkList'));\n searchDiv.appendChild(listviewDiv);\n // const arts: string[] = this.documentHelper.bookmarks.keys;\n this.listviewInstance = new ListView({\n dataSource: bookmarks,\n cssClass: 'e-bookmark-listview'\n });\n var hasNoBookmark = (bookmarks === undefined || bookmarks.length === 0);\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-bookmark-button' });\n commonDiv.appendChild(buttonDiv);\n var addbuttonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n buttonDiv.appendChild(addbuttonDiv);\n var addButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Add'), id: 'add',\n attrs: { type: 'button' }\n });\n addButtonElement.setAttribute('aria-label', localValue.getConstant('Add'));\n addbuttonDiv.appendChild(addButtonElement);\n this.addButton = new Button({ cssClass: 'e-button-custom' });\n this.addButton.disabled = true;\n this.addButton.appendTo(addButtonElement);\n this.textBoxInput.addEventListener('input', this.onKeyUpOnTextBox);\n this.textBoxInput.addEventListener('keyup', this.onKeyUpOnTextBox);\n addButtonElement.addEventListener('click', this.addBookmark);\n var deleteButtonDiv = createElement('div', { className: 'e-bookmark-deletebutton' });\n buttonDiv.appendChild(deleteButtonDiv);\n var deleteButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Delete'), id: 'delete',\n attrs: { type: 'button' }\n });\n deleteButtonElement.setAttribute('aria-label', localValue.getConstant('Delete'));\n deleteButtonDiv.appendChild(deleteButtonElement);\n this.deleteButton = new Button({ cssClass: 'e-button-custom' });\n this.deleteButton.disabled = hasNoBookmark;\n this.deleteButton.appendTo(deleteButtonElement);\n deleteButtonElement.addEventListener('click', this.deleteBookmark);\n var gotoButtonDiv = createElement('div', { className: 'e-bookmark-gotobutton' });\n buttonDiv.appendChild(gotoButtonDiv);\n var gotoButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Go To'), id: 'goto',\n attrs: { type: 'button' }\n });\n gotoButtonElement.setAttribute('aria-label', localValue.getConstant('Go To'));\n gotoButtonDiv.appendChild(gotoButtonElement);\n this.gotoButton = new Button({ cssClass: 'e-button-custom' });\n this.gotoButton.disabled = hasNoBookmark;\n this.gotoButton.appendTo(gotoButtonElement);\n gotoButtonElement.addEventListener('click', this.gotoBookmark);\n };\n /**\n * @private\n * @returns {void}\n */\n BookmarkDialog.prototype.show = function () {\n var bookmarks = this.documentHelper.getBookmarks();\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n // if (!this.target) {\n this.initBookmarkDialog(localObj, bookmarks, this.documentHelper.owner.enableRtl);\n //}\n this.documentHelper.dialog.header = localObj.getConstant('Bookmark');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.removeObjects.bind(this),\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.documentHelper.dialog.dataBind();\n var hasNoBookmark = (bookmarks === undefined || bookmarks.length === 0);\n if (!hasNoBookmark) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var firstItem = bookmarks[0];\n this.listviewInstance.selectItem(firstItem);\n }\n this.documentHelper.dialog.show();\n };\n BookmarkDialog.prototype.enableOrDisableButton = function () {\n // Regex pattern for valid characters (alphanumeric and underscore)\n var validRegex = /^[_a-zA-Z0-9]+$/;\n var text = this.textBoxInput.value.trim();\n if (!isNullOrUndefined(this.addButton)) {\n this.addButton.disabled = !validRegex.test(text);\n }\n };\n BookmarkDialog.prototype.focusTextBox = function (text) {\n this.textBoxInput.value = text;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var value = document.getElementById('bookmark_text_box');\n value.setSelectionRange(0, text.length);\n value.focus();\n this.enableOrDisableButton();\n };\n BookmarkDialog.prototype.removeObjects = function () {\n this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n BookmarkDialog.prototype.destroy = function () {\n if (this.textBoxInput) {\n this.textBoxInput.remove();\n this.textBoxInput = undefined;\n }\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n this.documentHelper = undefined;\n };\n return BookmarkDialog;\n}());\nexport { BookmarkDialog };\n","import { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\n/**\n * The Table of contents dialog is used to insert or edit table of contents at selection.\n */\nvar TableOfContentsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TableOfContentsDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.loadTableofContentDialog = function () {\n _this.documentHelper.updateFocus();\n _this.pageNumber.checked = true;\n _this.rightAlign.disabled = false;\n _this.rightAlign.checked = true;\n _this.tabLeader.enabled = true;\n _this.hyperlink.checked = true;\n _this.style.checked = true;\n _this.outline.checked = true;\n _this.outline.disabled = false;\n _this.showLevel.enabled = true;\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTableOfContentDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog3.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.textBoxInput.value = args.text;\n var value = _this.textBoxInput;\n value.setSelectionRange(0, args.text.length);\n value.focus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.showStyleDialog = function () {\n if (!isNullOrUndefined(_this.documentHelper.owner.styleDialogModule)) {\n _this.documentHelper.owner.styleDialogModule.show(_this.textBoxInput.value);\n }\n };\n /**\n * @returns {void}\n */\n this.reset = function () {\n _this.showLevel.enabled = true;\n _this.showLevel.value = 3;\n _this.outline.disabled = false;\n _this.outline.checked = true;\n var values = ['1', '2', '3', null, null, null, null, null, null];\n _this.changeByValue(values);\n _this.normal.value = null;\n };\n /**\n * @param {KeyboardEvent} args - Specifies the event args.\n * @returns {void}\n */\n this.changeStyle = function (args) {\n var headingLevel = 0;\n if (!isNullOrUndefined(args.srcElement.value)) {\n var headingValue = args.srcElement.value;\n headingLevel = parseInt(headingValue);\n if (!headingValue.match(/^[0-9]+$/) && headingValue !== '') {\n _this.initAlertDialog(false);\n return;\n }\n else if (headingLevel < 1 || headingLevel > 9) {\n _this.initAlertDialog(true);\n return;\n }\n else {\n var value = _this.getElementValue(args.srcElement);\n if (headingValue !== value && headingValue !== '') {\n _this.showLevel.enabled = false;\n }\n else {\n _this.showLevel.enabled = true;\n _this.checkLevel();\n }\n }\n }\n };\n /**\n * @param {KeyboardEvent} args - Specifies the event args.\n * @returns {void}\n */\n this.changeHeadingStyle = function (args) {\n var headingLevel = 0;\n if (!isNullOrUndefined(args.srcElement.value)) {\n var headingValue = args.srcElement.value;\n headingLevel = parseInt(headingValue);\n if (!headingValue.match(/^[0-9]+$/) && headingValue !== '') {\n _this.initAlertDialog(false);\n return;\n }\n else if (headingLevel < 1 || headingLevel > 9) {\n _this.initAlertDialog(true);\n return;\n }\n else {\n if (headingValue === '') {\n _this.showLevel.enabled = true;\n }\n else {\n _this.showLevel.enabled = false;\n }\n if (_this.normal === args.srcElement) {\n _this.outline.checked = false;\n _this.outline.disabled = true;\n }\n }\n }\n };\n /**\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.changePageNumberValue = function (args) {\n if (args.checked) {\n _this.rightAlign.checked = true;\n _this.rightAlign.disabled = false;\n _this.tabLeader.enabled = true;\n }\n else {\n _this.rightAlign.disabled = true;\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.changeRightAlignValue = function (args) {\n if (args.checked) {\n _this.tabLeader.enabled = true;\n }\n else {\n _this.tabLeader.enabled = false;\n }\n };\n /**\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.changeStyleValue = function (args) {\n if (args.checked) {\n _this.heading1.disabled = false;\n _this.heading2.disabled = false;\n _this.heading3.disabled = false;\n _this.heading4.disabled = false;\n _this.heading5.disabled = false;\n _this.heading6.disabled = false;\n _this.heading7.disabled = false;\n _this.heading8.disabled = false;\n _this.heading9.disabled = false;\n _this.normal.disabled = false;\n }\n else {\n _this.heading1.disabled = true;\n _this.heading2.disabled = true;\n _this.heading3.disabled = true;\n _this.heading4.disabled = true;\n _this.heading5.disabled = true;\n _this.heading6.disabled = true;\n _this.heading7.disabled = true;\n _this.heading8.disabled = true;\n _this.heading9.disabled = true;\n _this.normal.disabled = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableOfContentProperties = function () {\n var tocSettings = {\n startLevel: 1,\n endLevel: _this.showLevel.value,\n includeHyperlink: _this.hyperlink.checked,\n includePageNumber: _this.pageNumber.checked,\n rightAlign: _this.rightAlign.checked,\n tabLeader: _this.tabLeader.value,\n includeOutlineLevels: _this.outline.checked\n };\n if (_this.applyLevelSetting(tocSettings)) {\n _this.documentHelper.owner.editorModule.insertTableOfContents(tocSettings);\n _this.documentHelper.dialog3.hide();\n _this.documentHelper.updateFocus();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.pageNumber.checked = false;\n _this.rightAlign.checked = false;\n _this.tabLeader.value = '';\n _this.hyperlink.checked = false;\n _this.style.checked = false;\n _this.outline.checked = false;\n _this.normal.value = '';\n };\n this.documentHelper = documentHelper;\n }\n TableOfContentsDialog.prototype.getModuleName = function () {\n return 'TableOfContentsDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n TableOfContentsDialog.prototype.initTableOfContentDialog = function (locale, isRtl) {\n var instance = this;\n var ownerId = this.documentHelper.owner.containerId;\n var id = ownerId + '_toc_dialog';\n this.target = createElement('div', { id: id, className: 'e-de-toc-dlg-container' });\n var generalDiv = createElement('div', { id: 'general_div', className: 'e-de-toc-dlg-sub-container' });\n this.target.appendChild(generalDiv);\n var genLabel = createElement('div', { id: ownerId + '_genLabel', className: 'e-de-toc-dlg-main-heading', styles: 'margin-bottom: 13px;', innerHTML: locale.getConstant('General') });\n generalDiv.appendChild(genLabel);\n var leftGeneralDivStyles;\n var rightBottomGeneralDivStyles;\n if (isRtl) {\n leftGeneralDivStyles = 'float:right;';\n rightBottomGeneralDivStyles = 'float:left;position:relative;';\n }\n else {\n leftGeneralDivStyles = 'float:left;';\n rightBottomGeneralDivStyles = 'float:right;';\n }\n var topContainer = createElement('div', { className: 'e-de-container-row' });\n var leftGeneralDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n topContainer.appendChild(leftGeneralDiv);\n var rightGeneralDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n topContainer.appendChild(rightGeneralDiv);\n generalDiv.appendChild(topContainer);\n var bottomContainer = createElement('div', { className: 'e-de-dlg-row' });\n var leftBottomGeneralDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n bottomContainer.appendChild(leftBottomGeneralDiv);\n var rightBottomGeneralDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n bottomContainer.appendChild(rightBottomGeneralDiv);\n var pageNumberDiv = createElement('div', { className: 'e-de-toc-dlg-sub-container' });\n var pageNumber = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_pageNumber'\n });\n pageNumberDiv.appendChild(pageNumber);\n var rightAlignDiv = createElement('div', { className: 'e-de-toc-dlg-sub-container' });\n var rightAlign = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_rightAlign'\n });\n rightAlignDiv.appendChild(rightAlign);\n this.pageNumber = new CheckBox({ label: locale.getConstant('Show page numbers'), enableRtl: isRtl, checked: true, change: this.changePageNumberValue });\n this.rightAlign = new CheckBox({ label: locale.getConstant('Right align page numbers'), enableRtl: isRtl, checked: true, change: this.changeRightAlignValue });\n this.pageNumber.appendTo(pageNumber);\n this.rightAlign.appendTo(rightAlign);\n var tabDivContainer = createElement('div', { className: 'e-de-container-row' });\n var tabDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var tabLeaderLabelDiv = createElement('div');\n var tabLeaderLabel = createElement('label', { className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Tab leader') + ':' });\n tabLeaderLabelDiv.appendChild(tabLeaderLabel);\n var tabLeaderDiv = createElement('div', { id: 'tabLeader_div' });\n var tabLeader = createElement('select', {\n id: ownerId + '_tabLeader',\n innerHTML: ''\n });\n tabLeaderDiv.appendChild(tabLeader);\n tabDiv.appendChild(tabLeaderLabelDiv);\n tabDiv.appendChild(tabLeaderDiv);\n leftGeneralDiv.appendChild(pageNumberDiv);\n leftGeneralDiv.appendChild(rightAlignDiv);\n tabDivContainer.appendChild(tabDiv);\n this.tabLeader = new DropDownList({ enableRtl: isRtl });\n this.tabLeader.appendTo(tabLeader);\n var hyperlink = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_hyperlink'\n });\n rightGeneralDiv.appendChild(hyperlink);\n this.hyperlink = new CheckBox({ label: locale.getConstant('Use hyperlinks instead of page numbers'), cssClass: 'e-de-toc-label', enableRtl: isRtl, checked: true });\n this.hyperlink.appendTo(hyperlink);\n var showDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var showLevelLabelDiv = createElement('div', { className: 'e-de-toc-dlg-show-level-div' });\n var showLevelLabel = createElement('label', { className: 'e-de-toc-dlg-heading', innerHTML: locale.getConstant('Show levels') + ':' });\n showLevelLabelDiv.appendChild(showLevelLabel);\n var showLevelDiv = createElement('div', { className: 'e-de-toc-dlg-showlevel-div' });\n var showLevel = createElement('input', { id: ownerId + '_showLevel', attrs: { 'type': 'text', 'aria-label': 'showLevel' } });\n showLevelDiv.appendChild(showLevel);\n showDiv.appendChild(showLevelLabelDiv);\n showDiv.appendChild(showLevelDiv);\n tabDivContainer.appendChild(showDiv);\n generalDiv.appendChild(tabDivContainer);\n this.showLevel = new NumericTextBox({ format: '#', value: 3, min: 1, max: 9, change: this.changeShowLevelValue.bind(this) });\n this.showLevel.appendTo(showLevel);\n if (isRtl) {\n this.hyperlink.cssClass = 'e-de-toc-label-rtl';\n showLevelLabelDiv.classList.add('e-de-rtl');\n showLevelDiv.classList.add('e-de-rtl');\n rightBottomGeneralDiv.classList.add('e-de-rtl');\n }\n //let buildTableDiv: HTMLDivElement = createElement('div', { className: 'e-de-toc-dlg-sub-container' }) as HTMLDivElement;\n var buildTableLabel = createElement('div', { className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-build-table', innerHTML: locale.getConstant('Build table of contents from') + ':' });\n //leftBottomGeneralDiv.appendChild(buildTableDiv);\n // generalDiv.appendChild(buildTableLabel);\n generalDiv.appendChild(bottomContainer);\n var style = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_style',\n });\n leftBottomGeneralDiv.appendChild(buildTableLabel);\n leftBottomGeneralDiv.appendChild(style);\n this.style = new CheckBox({ label: locale.getConstant('Styles'), enableRtl: isRtl, checked: true, change: this.changeStyleValue });\n this.style.appendTo(style);\n var table = createElement('TABLE', { styles: 'margin-top:3px;' });\n var tr1 = createElement('tr');\n var td1 = createElement('td', { styles: 'width:120px;padding-left:10px;' });\n var availableLabel = createElement('label', {\n innerHTML: locale.getConstant('Available styles'), className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading', id: this.target.id + '_availableLabel'\n });\n td1.appendChild(availableLabel);\n var td2 = createElement('td');\n var tocLabel = createElement('label', {\n innerHTML: locale.getConstant('TOC level') + ':', className: 'e-de-toc-dlg-main-heading e-de-toc-dlg-sub-level-heading',\n id: this.target.id + '_tocLabel'\n });\n td2.appendChild(tocLabel);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n table.appendChild(tr1);\n var tableDiv = createElement('div', { id: 'table_div', className: 'e-de-toc-table-div' });\n var table1 = createElement('TABLE');\n var tr2 = createElement('tr');\n var td3 = createElement('td');\n var heading1Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 1',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading1Label'\n });\n td3.appendChild(heading1Label);\n var td4 = createElement('td');\n this.heading1 = createElement('input', { id: '_heading1', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Heading') + ' 1' } });\n this.heading1.value = '1';\n this.heading1.addEventListener('keyup', this.changeStyle);\n td4.appendChild(this.heading1);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var heading2Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 2',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading2Label'\n });\n td5.appendChild(heading2Label);\n var td6 = createElement('td');\n this.heading2 = createElement('input', { id: '_heading2', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Heading') + ' 2' } });\n this.heading2.value = '2';\n this.heading2.addEventListener('keyup', this.changeStyle);\n td6.appendChild(this.heading2);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n var tr4 = createElement('tr');\n var td7 = createElement('td');\n var heading3Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 3',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading3Label'\n });\n td7.appendChild(heading3Label);\n var td8 = createElement('td');\n this.heading3 = createElement('input', { id: '_heading3', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Heading') + ' 3' } });\n this.heading3.value = '3';\n this.heading3.addEventListener('keyup', this.changeStyle);\n td8.appendChild(this.heading3);\n tr4.appendChild(td7);\n tr4.appendChild(td8);\n var tr5 = createElement('tr');\n var td9 = createElement('td');\n var heading4Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 4',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading4Label'\n });\n td9.appendChild(heading4Label);\n var td10 = createElement('td');\n this.heading4 = createElement('input', { id: '_heading4', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Heading') + ' 4' } });\n this.heading4.addEventListener('keyup', this.changeStyle);\n td10.appendChild(this.heading4);\n tr5.appendChild(td9);\n tr5.appendChild(td10);\n var tr6 = createElement('tr');\n var td11 = createElement('td');\n var heading5Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 5',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading5Label'\n });\n td11.appendChild(heading5Label);\n var td12 = createElement('td');\n this.heading5 = createElement('input', { id: '_heading5', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Heading') + ' 5' } });\n this.heading5.addEventListener('keyup', this.changeStyle);\n td12.appendChild(this.heading5);\n tr6.appendChild(td11);\n tr6.appendChild(td12);\n var tr7 = createElement('tr');\n var td13 = createElement('td');\n var heading6Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 6',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading6Label'\n });\n td13.appendChild(heading6Label);\n var td14 = createElement('td');\n this.heading6 = createElement('input', { id: '_heading6', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Heading') + ' 6' } });\n this.heading6.addEventListener('keyup', this.changeStyle);\n td14.appendChild(this.heading6);\n tr7.appendChild(td13);\n tr7.appendChild(td14);\n var tr8 = createElement('tr');\n var td15 = createElement('td');\n var heading7Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 7',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading7Label'\n });\n td15.appendChild(heading7Label);\n var td16 = createElement('td');\n this.heading7 = createElement('input', { id: '_heading7', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Heading') + ' 7' } });\n this.heading7.addEventListener('keyup', this.changeStyle);\n td16.appendChild(this.heading7);\n tr8.appendChild(td15);\n tr8.appendChild(td16);\n var tr9 = createElement('tr');\n var td17 = createElement('td');\n var heading8Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 8',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading8Label'\n });\n td17.appendChild(heading8Label);\n var td18 = createElement('td');\n this.heading8 = createElement('input', { id: '_heading8', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Heading') + ' 8' } });\n this.heading8.addEventListener('keyup', this.changeStyle);\n td18.appendChild(this.heading8);\n tr9.appendChild(td17);\n tr9.appendChild(td18);\n var tr10 = createElement('tr');\n var td19 = createElement('td');\n var heading9Label = createElement('label', {\n innerHTML: locale.getConstant('Heading') + ' 9',\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_heading9Label'\n });\n td19.appendChild(heading9Label);\n var td20 = createElement('td');\n this.heading9 = createElement('input', { id: '_heading9', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Heading') + ' 9' } });\n this.heading9.addEventListener('keyup', this.changeStyle);\n td20.appendChild(this.heading9);\n tr10.appendChild(td19);\n tr10.appendChild(td20);\n var tr12 = createElement('tr');\n var td23 = createElement('td');\n var normalLabel = createElement('label', {\n innerHTML: locale.getConstant('Normal'),\n className: 'e-de-toc-dlg-sub-heading', id: this.target.id + '_normalLabel'\n });\n td23.appendChild(normalLabel);\n var td24 = createElement('td');\n this.normal = createElement('input', { id: '_normal', className: 'e-input e-de-toc-dlg-toc-level', attrs: { 'aria-label': locale.getConstant('Normal') } });\n this.normal.addEventListener('keyup', this.changeHeadingStyle);\n td24.appendChild(this.normal);\n tr12.appendChild(td23);\n tr12.appendChild(td24);\n if (isRtl) {\n this.normal.classList.add('e-de-rtl');\n this.heading1.classList.add('e-de-rtl');\n this.heading2.classList.add('e-de-rtl');\n this.heading3.classList.add('e-de-rtl');\n this.heading4.classList.add('e-de-rtl');\n this.heading5.classList.add('e-de-rtl');\n this.heading6.classList.add('e-de-rtl');\n this.heading7.classList.add('e-de-rtl');\n this.heading8.classList.add('e-de-rtl');\n this.heading9.classList.add('e-de-rtl');\n }\n table1.appendChild(tr2);\n table1.appendChild(tr3);\n table1.appendChild(tr4);\n table1.appendChild(tr5);\n table1.appendChild(tr6);\n table1.appendChild(tr7);\n table1.appendChild(tr8);\n table1.appendChild(tr9);\n table1.appendChild(tr10);\n table1.appendChild(tr12);\n tableDiv.appendChild(table1);\n var stylesLevelDiv = createElement('div', { className: 'e-de-toc-styles-table-div' });\n stylesLevelDiv.appendChild(table);\n stylesLevelDiv.appendChild(tableDiv);\n leftBottomGeneralDiv.appendChild(stylesLevelDiv);\n //leftBottomGeneralDiv.appendChild(table); leftBottomGeneralDiv.appendChild(tableDiv);\n var fieldsDiv = createElement('div', { id: 'fields_div', styles: 'display: flex;' });\n leftBottomGeneralDiv.appendChild(fieldsDiv);\n var outDiv = createElement('div', { id: 'out_div' });\n var outlineDiv = createElement('div', { id: 'outline_div', className: 'e-de-toc-dlg-sub-container e-de-toc-dlg-outline-levels' });\n var outline = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: '_outline'\n });\n outlineDiv.appendChild(outline);\n outDiv.appendChild(outlineDiv);\n fieldsDiv.appendChild(outDiv);\n this.outline = new CheckBox({\n label: locale.getConstant('Outline levels'),\n enableRtl: isRtl, checked: true, cssClass: 'e-de-outline-rtl'\n });\n this.outline.appendTo(outline);\n var resetButtonDiv = createElement('div', { className: 'e-de-toc-reset-button' });\n fieldsDiv.appendChild(resetButtonDiv);\n var resetElement = createElement('button', {\n innerHTML: locale.getConstant('Reset'), id: 'reset',\n attrs: { type: 'button' }\n });\n resetButtonDiv.appendChild(resetElement);\n var resetButton = new Button({ cssClass: 'e-btn e-flat' });\n resetButton.appendTo(resetElement);\n resetElement.addEventListener('click', this.reset);\n // let tocStylesDiv: HTMLDivElement = createElement('div', { id: 'tocStyles_div', className: 'e-de-toc-dlg-sub-container' }) as HTMLDivElement;\n var tocStylesLabel = createElement('div', {\n id: ownerId + '_tocStylesLabel', className: 'e-de-toc-dlg-main-heading',\n innerHTML: locale.getConstant('Styles') + ':'\n });\n //rightBottomGeneralDiv.appendChild(tocStylesDiv);\n rightBottomGeneralDiv.appendChild(tocStylesLabel);\n var textBoxDiv = createElement('div');\n rightBottomGeneralDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input', attrs: { 'aria-label': 'Type of TOC' } });\n this.textBoxInput.setAttribute('type', 'text');\n textBoxDiv.appendChild(this.textBoxInput);\n var listViewDiv = createElement('div', { className: 'e-de-toc-list-view' });\n var styleLocale = ['TOC 1', 'TOC 2', 'TOC 3', 'TOC 4', 'TOC 5', 'TOC 6', 'TOC 7', 'TOC 8', 'TOC 9'];\n var styleValues = this.styleLocaleValue(styleLocale, locale);\n this.listViewInstance = new ListView({ dataSource: styleValues, cssClass: 'e-toc-list-view' });\n this.listViewInstance.appendTo(listViewDiv);\n this.listViewInstance.addEventListener('select', this.selectHandler);\n rightBottomGeneralDiv.appendChild(listViewDiv);\n var modifyButtonDiv = createElement('div', { className: 'e-de-toc-modify-button' });\n rightBottomGeneralDiv.appendChild(modifyButtonDiv);\n var modifyElement = createElement('button', {\n innerHTML: locale.getConstant('Modify') + '...', id: 'modify',\n attrs: { type: 'button' }\n });\n modifyButtonDiv.appendChild(modifyElement);\n var modifyButton = new Button({ cssClass: 'e-btn e-flat' });\n modifyButton.appendTo(modifyElement);\n modifyElement.addEventListener('click', this.showStyleDialog);\n if (isRtl) {\n resetButtonDiv.classList.add('e-de-rtl');\n tocStylesLabel.classList.add('e-de-rtl');\n textBoxDiv.classList.add('e-de-rtl');\n listViewDiv.classList.add('e-de-rtl');\n modifyButtonDiv.classList.add('e-de-rtl');\n }\n };\n TableOfContentsDialog.prototype.styleLocaleValue = function (styleLocale, localValue) {\n var styleName = [];\n for (var index = 0; index < styleLocale.length; index++) {\n styleName.push(localValue.getConstant(styleLocale[index]));\n }\n return styleName;\n };\n /**\n * @private\n */\n TableOfContentsDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initTableOfContentDialog(localValue, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog3.header = localValue.getConstant('Table of Contents');\n this.documentHelper.dialog3.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog3.width = 'auto';\n this.documentHelper.dialog3.height = 'auto';\n this.documentHelper.dialog3.content = this.target;\n this.documentHelper.dialog3.beforeOpen = this.loadTableofContentDialog;\n this.documentHelper.dialog3.close = this.closeTableOfContentDialog;\n this.documentHelper.dialog3.buttons = [{\n click: this.applyTableOfContentProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-toc-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-toc-cancel' }\n }];\n this.documentHelper.dialog3.dataBind();\n this.documentHelper.dialog3.show();\n };\n TableOfContentsDialog.prototype.changeShowLevelValue = function (event) {\n var levels = event.value;\n var values = [];\n switch (levels) {\n case 1:\n values = ['1', null, null, null, null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 2:\n values = ['1', '2', null, null, null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 3:\n values = ['1', '2', '3', null, null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 4:\n values = ['1', '2', '3', '4', null, null, null, null, null];\n this.changeByValue(values);\n break;\n case 5:\n values = ['1', '2', '3', '4', '5', null, null, null, null];\n this.changeByValue(values);\n break;\n case 6:\n values = ['1', '2', '3', '4', '5', '6', null, null, null];\n this.changeByValue(values);\n break;\n case 7:\n values = ['1', '2', '3', '4', '5', '6', '7', null, null];\n this.changeByValue(values);\n break;\n case 8:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', null];\n this.changeByValue(values);\n break;\n case 9:\n values = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\n this.changeByValue(values);\n break;\n }\n };\n TableOfContentsDialog.prototype.changeByValue = function (headings) {\n this.heading1.value = headings[0];\n this.heading2.value = headings[1];\n this.heading3.value = headings[2];\n this.heading4.value = headings[3];\n this.heading5.value = headings[4];\n this.heading6.value = headings[5];\n this.heading7.value = headings[6];\n this.heading8.value = headings[7];\n this.heading9.value = headings[8];\n };\n TableOfContentsDialog.prototype.initAlertDialog = function (isvalid) {\n var localValue = new L10n(\"documenteditor\", this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n var dialogContent = isvalid ? localValue.getConstant(\"The number must be between\") : localValue.getConstant(\"The Invalid number\");\n DialogUtility.alert({\n title: localValue.getConstant(\"Information\"),\n content: dialogContent,\n closeOnEscape: true,\n showCloseIcon: true,\n position: { X: \"center\", Y: \"center\" },\n }).enableRtl = this.documentHelper.owner.enableRtl;\n };\n TableOfContentsDialog.prototype.checkLevel = function () {\n if (this.heading1.value !== '') {\n this.showLevel.value = 1;\n }\n if (this.heading2.value !== '') {\n this.showLevel.value = 2;\n }\n if (this.heading3.value !== '') {\n this.showLevel.value = 3;\n }\n if (this.heading4.value !== '') {\n this.showLevel.value = 4;\n }\n if (this.heading5.value !== '') {\n this.showLevel.value = 5;\n }\n if (this.heading6.value !== '') {\n this.showLevel.value = 6;\n }\n if (this.heading7.value !== '') {\n this.showLevel.value = 7;\n }\n if (this.heading8.value !== '') {\n this.showLevel.value = 8;\n }\n if (this.heading9.value !== '') {\n this.showLevel.value = 9;\n }\n };\n TableOfContentsDialog.prototype.getElementValue = function (element) {\n switch (element) {\n case this.heading1:\n return '1';\n case this.heading2:\n return '2';\n case this.heading3:\n return '3';\n case this.heading4:\n return '4';\n case this.heading5:\n return '5';\n case this.heading6:\n return '6';\n case this.heading7:\n return '7';\n case this.heading8:\n return '8';\n case this.heading9:\n return '9';\n default:\n return '1';\n }\n };\n TableOfContentsDialog.prototype.getHeadingLevel = function (index) {\n switch (index) {\n case 1:\n return parseInt(this.heading1.value);\n case 2:\n return parseInt(this.heading2.value);\n case 3:\n return parseInt(this.heading3.value);\n case 4:\n return parseInt(this.heading4.value);\n case 5:\n return parseInt(this.heading5.value);\n case 6:\n return parseInt(this.heading6.value);\n case 7:\n return parseInt(this.heading7.value);\n case 8:\n return parseInt(this.heading8.value);\n case 9:\n return parseInt(this.heading9.value);\n default:\n return 0;\n }\n };\n TableOfContentsDialog.prototype.applyLevelSetting = function (tocSettings) {\n tocSettings.levelSettings = {};\n var headingPrefix = 'Heading ';\n var newStartLevel = 0;\n var newEndLevel = 0;\n var isEndLevel = false;\n for (var i = 1; i <= tocSettings.endLevel; i++) {\n var outlineLevelValue = this.getTOCInputValue(i);\n var outlineLevel = this.getHeadingLevel(i);\n if (i === outlineLevel && outlineLevelValue.match(/^[0-9]+$/)) {\n if (newStartLevel === 0) {\n newStartLevel = i;\n isEndLevel = false;\n }\n if (!isEndLevel) {\n newEndLevel = i;\n }\n }\n else {\n isEndLevel = true;\n if (!outlineLevelValue.match(/^[0-9]+$/)) {\n this.initAlertDialog(false);\n return false;\n }\n else if (outlineLevel < 1 || outlineLevel > 9) {\n this.initAlertDialog(true);\n return false;\n }\n else {\n var headingStyle = headingPrefix + i.toString();\n tocSettings.levelSettings[headingStyle] = outlineLevel;\n }\n }\n }\n tocSettings.startLevel = newStartLevel;\n tocSettings.endLevel = newEndLevel;\n if (newEndLevel) {\n for (var j = newEndLevel + 1; j <= 9; j++) {\n var outlineHeader = this.getTOCInputValue(j);\n var outlineLevel = this.getHeadingLevel(j);\n if (!outlineHeader.match(/^[0-9]+$/) && outlineHeader !== \"\") {\n this.initAlertDialog(false);\n return false;\n }\n else {\n if (outlineLevel < 1 || outlineLevel > 9) {\n this.initAlertDialog(true);\n return false;\n }\n }\n }\n }\n if (this.normal.value !== '') {\n var normalvalue = parseInt(this.normal.value);\n if (!this.normal.value.match(/^[0-9]+$/)) {\n this.initAlertDialog(false);\n return false;\n }\n else if (normalvalue < 1 || normalvalue > 9) {\n this.initAlertDialog(true);\n return false;\n }\n else {\n tocSettings.levelSettings[\"Normal\"] = normalvalue;\n }\n }\n return true;\n };\n TableOfContentsDialog.prototype.getTOCInputValue = function (input) {\n switch (input) {\n case 1:\n return this.heading1.value;\n case 2:\n return this.heading2.value;\n case 3:\n return this.heading3.value;\n case 4:\n return this.heading4.value;\n case 5:\n return this.heading5.value;\n case 6:\n return this.heading6.value;\n case 7:\n return this.heading7.value;\n case 8:\n return this.heading8.value;\n case 9:\n return this.heading9.value;\n default:\n return \"\";\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TableOfContentsDialog.prototype.destroy = function () {\n if (this.pageNumber) {\n this.pageNumber.destroy();\n this.pageNumber = undefined;\n }\n if (this.rightAlign) {\n this.rightAlign.destroy();\n this.rightAlign = undefined;\n }\n if (this.tabLeader) {\n this.tabLeader.destroy();\n this.tabLeader = undefined;\n }\n if (this.showLevel) {\n this.showLevel.destroy();\n this.showLevel = undefined;\n }\n if (this.hyperlink) {\n this.hyperlink.destroy();\n this.hyperlink = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.outline) {\n this.outline.destroy();\n this.outline = undefined;\n }\n if (this.listViewInstance) {\n this.listViewInstance.destroy();\n this.listViewInstance = undefined;\n }\n this.heading1 = undefined;\n this.heading2 = undefined;\n this.heading3 = undefined;\n this.heading4 = undefined;\n this.heading5 = undefined;\n this.heading6 = undefined;\n this.heading7 = undefined;\n this.heading8 = undefined;\n this.heading9 = undefined;\n this.normal = undefined;\n this.textBoxInput = undefined;\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var count = 0; count < this.target.childNodes.length; count++) {\n this.target.removeChild(this.target.childNodes[count]);\n count--;\n }\n this.target = undefined;\n }\n };\n return TableOfContentsDialog;\n}());\nexport { TableOfContentsDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\n/**\n * The Styles dialog is used to create or modify styles.\n */\nvar StylesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function StylesDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.modifyStyles = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.owner.styleDialogModule.show(_this.styleName, _this.localValue.getConstant('Modify Style'));\n };\n /**\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.styleName = _this.getStyleName(args.text);\n };\n /**\n * @private\n * @returns {void}\n */\n this.addNewStyles = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.owner.styleDialogModule.show();\n };\n this.documentHelper = documentHelper;\n }\n StylesDialog.prototype.getModuleName = function () {\n return 'StylesDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value.\n * @param {string[]} styles - Specifies the styles.\n * @param {boolean} isRtl - Specifies the is rtl.\n * @returns {void}\n */\n StylesDialog.prototype.initStylesDialog = function (localValue, styles, isRtl) {\n var id = this.documentHelper.owner.containerId + '_insert_styles';\n this.target = createElement('div', { id: id, className: 'e-de-styles' });\n var headerValue = localValue.getConstant('Styles');\n var dlgFields = createElement('div', { innerHTML: headerValue, className: 'e-de-para-dlg-heading' });\n this.target.appendChild(dlgFields);\n var commonDiv = createElement('div', { className: 'e-styles-common' });\n this.target.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-styles-list' });\n commonDiv.appendChild(searchDiv);\n if (isRtl) {\n searchDiv.classList.add('e-de-rtl');\n }\n var listviewDiv = createElement('div', { className: 'e-styles-listViewDiv', id: 'styles_listview' });\n searchDiv.appendChild(listviewDiv);\n this.listviewInstance = new ListView({\n dataSource: styles,\n cssClass: 'e-styles-listview',\n fields: { text: 'StyleName', iconCss: 'IconClass' },\n showIcon: true\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n var buttonDiv = createElement('div', { className: 'e-styles-button' });\n commonDiv.appendChild(buttonDiv);\n var newButtonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(newButtonDiv);\n var newButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('New') + '...', id: 'new',\n attrs: { type: 'button' }\n });\n newButtonDiv.appendChild(newButtonElement);\n var newbutton = new Button({ cssClass: 'e-button-custom' });\n newbutton.appendTo(newButtonElement);\n newButtonElement.addEventListener('click', this.addNewStyles);\n var modifybuttonDiv = createElement('div', { className: 'e-styles-addbutton' });\n buttonDiv.appendChild(modifybuttonDiv);\n var modifyButtonElement = createElement('button', {\n innerHTML: localValue.getConstant('Modify') + '...', id: 'modify',\n attrs: { type: 'button' }\n });\n modifybuttonDiv.appendChild(modifyButtonElement);\n var addbutton = new Button({ cssClass: 'e-button-custom' });\n addbutton.appendTo(modifyButtonElement);\n modifyButtonElement.addEventListener('click', this.modifyStyles);\n };\n /**\n * @private\n * @returns {void}\n */\n StylesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n var paraStyles = this.updateStyleNames('Paragraph').filter(function (obj) { return obj.Type === 'Paragraph'; });\n var linkedStyles = this.updateStyleNames('Paragraph').filter(function (obj) { return obj.Type === 'Linked'; });\n var charStyles = this.updateStyleNames('Character').filter(function (obj) { return obj.Type === 'Character'; });\n for (var _i = 0, linkedStyles_1 = linkedStyles; _i < linkedStyles_1.length; _i++) {\n var linkedStyle = linkedStyles_1[_i];\n for (var _a = 0, charStyles_1 = charStyles; _a < charStyles_1.length; _a++) {\n var charStyle = charStyles_1[_a];\n if (linkedStyle['StyleName'] + ' Char' === charStyle['StyleName']) {\n charStyles.splice(charStyles.indexOf(charStyle), 1);\n break;\n }\n }\n }\n var styles = paraStyles.concat(linkedStyles, charStyles);\n this.localValue = localValue;\n this.initStylesDialog(localValue, styles, this.documentHelper.owner.enableRtl);\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.header = localValue.getConstant('Styles');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.buttons = [{\n click: this.hideObjects.bind(this),\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-hyper-insert', isPrimary: true }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n StylesDialog.prototype.updateStyleNames = function (type) {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n var collection = this.documentHelper.owner.documentHelper.styles.getStyles(type);\n var paraIcon = 'e-de-listview-icon e-de-e-paragraph-style-mark e-icons';\n var charIcon = 'e-de-listview-icon e-de-e-character-style-mark e-icons';\n var linkedIcon = 'e-de-listview-icon e-de-e-linked-style-mark e-icons';\n var finalList = [];\n for (var i = 0; i < collection.length; i++) {\n var styleName = localValue.getConstant(collection[parseInt(i.toString(), 10)].name);\n if (styleName === '') {\n styleName = collection[parseInt(i.toString(), 10)].name;\n }\n if (collection[parseInt(i.toString(), 10)].type === 'Paragraph') {\n finalList.push({ StyleName: styleName, IconClass: paraIcon, Type: collection[parseInt(i.toString(), 10)].type });\n }\n else if (collection[parseInt(i.toString(), 10)].type === 'Character') {\n finalList.push({ StyleName: styleName, IconClass: charIcon, Type: collection[parseInt(i.toString(), 10)].type });\n }\n else {\n finalList.push({ StyleName: styleName, IconClass: linkedIcon, Type: collection[parseInt(i.toString(), 10)].type });\n }\n }\n return finalList;\n };\n StylesDialog.prototype.defaultStyleName = function (styleNames) {\n var styleName = [];\n for (var index = 0; index < styleNames.length; index++) {\n styleName.push(styleNames[parseInt(index.toString(), 10)]);\n }\n return styleName;\n };\n /**\n * @param {string} styleName - Specifies the style name.\n * @private\n * @returns {string} - Returns the style name.\n */\n StylesDialog.prototype.getStyleName = function (styleName) {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (localValue.getConstant('Heading 1') === styleName) {\n styleName = 'Heading 1';\n }\n else if (localValue.getConstant('Heading 2') === styleName) {\n styleName = 'Heading 2';\n }\n else if (localValue.getConstant('Heading 3') === styleName) {\n styleName = 'Heading 3';\n }\n else if (localValue.getConstant('Heading 4') === styleName) {\n styleName = 'Heading 4';\n }\n else if (localValue.getConstant('Heading 5') === styleName) {\n styleName = 'Heading 5';\n }\n else if (localValue.getConstant('Heading 6') === styleName) {\n styleName = 'Heading 6';\n }\n else if (localValue.getConstant('Normal') === styleName) {\n styleName = 'Normal';\n }\n else if (localValue.getConstant('Header') === styleName) {\n styleName = 'Header';\n }\n else if (localValue.getConstant('Footer') === styleName) {\n styleName = 'Footer';\n }\n return styleName;\n };\n /**\n * @private\n * @returns {void}\n */\n StylesDialog.prototype.hideObjects = function () {\n this.documentHelper.dialog.hide();\n this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n StylesDialog.prototype.destroy = function () {\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n this.documentHelper = undefined;\n this.styleName = undefined;\n this.localValue = undefined;\n this.target = undefined;\n };\n return StylesDialog;\n}());\nexport { StylesDialog };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, rippleEffect, NotifyPropertyChanges, Property, closest, setValue } from '@syncfusion/ej2-base';\nimport { addClass, getInstance, getUniqueID, isRippleEnabled, removeClass, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\nvar ATTRIBUTES = ['title', 'class', 'style', 'disabled', 'readonly', 'name', 'value', 'id'];\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * \n * \n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n __extends(RadioButton, _super);\n /**\n * Constructor for creating the widget\n *\n * @private\n * @param {RadioButtonModel} options - Specifies Radio button model\n * @param {string | HTMLInputElement} element - Specifies target element\n */\n function RadioButton(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isFocused = false;\n return _this;\n }\n RadioButton_1 = RadioButton;\n RadioButton.prototype.changeHandler = function (event) {\n this.checked = true;\n this.dataBind();\n var value = this.element.getAttribute('value');\n value = this.isVue && value ? this.element.value : this.value;\n var type = typeof this.value;\n if (this.isVue && type === 'boolean') {\n value = value === 'true' ? true : false;\n }\n this.trigger('change', { value: value, event: event });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isAngular) {\n event.stopPropagation();\n }\n };\n RadioButton.prototype.updateChange = function () {\n var input;\n var instance;\n var radioGrp = this.getRadioGroup();\n for (var i = 0; i < radioGrp.length; i++) {\n input = radioGrp[i];\n if (input !== this.element) {\n instance = getInstance(input, RadioButton_1);\n instance.checked = false;\n if (this.tagName === 'EJS-RADIOBUTTON') {\n instance.angularValue = this.value;\n }\n }\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n RadioButton.prototype.destroy = function () {\n var _this = this;\n var radioWrap = this.wrapper;\n _super.prototype.destroy.call(this);\n if (radioWrap) {\n if (!this.disabled) {\n this.unWireEvents();\n }\n if (this.tagName === 'INPUT') {\n if (radioWrap.parentNode) {\n radioWrap.parentNode.insertBefore(this.element, radioWrap);\n }\n detach(radioWrap);\n this.element.checked = false;\n ['name', 'value', 'disabled'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n }\n else {\n ['role', 'aria-checked', 'class'].forEach(function (key) {\n radioWrap.removeAttribute(key);\n });\n radioWrap.innerHTML = '';\n this.element = this.wrapper;\n if (this.refreshing) {\n ['e-control', 'e-radio', 'e-lib'].forEach(function (key) {\n _this.element.classList.add(key);\n });\n setValue('ej2_instances', [this], this.element);\n }\n }\n }\n };\n RadioButton.prototype.focusHandler = function () {\n this.isFocused = true;\n };\n RadioButton.prototype.focusOutHandler = function () {\n var label = this.getLabel();\n if (label) {\n label.classList.remove('e-focus');\n }\n };\n RadioButton.prototype.getModuleName = function () {\n return 'radio';\n };\n /**\n * To get the value of selected radio button in a group.\n *\n * @method getSelectedValue\n * @returns {string} - Selected Value\n */\n RadioButton.prototype.getSelectedValue = function () {\n var input;\n var radioGrp = this.getRadioGroup();\n for (var i = 0, len = radioGrp.length; i < len; i++) {\n input = radioGrp[i];\n if (input.checked) {\n return input.value;\n }\n }\n return '';\n };\n RadioButton.prototype.getRadioGroup = function () {\n return document.querySelectorAll('input.e-radio[name=\"' + this.element.getAttribute('name') + '\"]');\n };\n /**\n * Gets the properties to be maintained in the persistence state.\n *\n * @private\n * @returns {string} - Persist Data\n */\n RadioButton.prototype.getPersistData = function () {\n return this.addOnPersist(['checked']);\n };\n RadioButton.prototype.getWrapper = function () {\n if (this.element.parentElement) {\n return this.element.parentElement;\n }\n else {\n return null;\n }\n };\n RadioButton.prototype.getLabel = function () {\n if (this.element.nextElementSibling) {\n return this.element.nextElementSibling;\n }\n else {\n return null;\n }\n };\n RadioButton.prototype.initialize = function () {\n if (isNullOrUndefined(this.initialCheckedValue)) {\n this.initialCheckedValue = this.checked;\n }\n this.initWrapper();\n this.updateHtmlAttribute();\n if (this.name) {\n this.element.setAttribute('name', this.name);\n }\n var value = this.element.getAttribute('value');\n var type = typeof this.value;\n if (this.isVue && type === 'boolean') {\n value = value === 'true' ? true : false;\n }\n if (this.isVue ? this.value && type !== 'boolean' && !value : this.value) {\n this.element.setAttribute('value', this.value);\n }\n if (this.checked) {\n this.element.checked = true;\n }\n if (this.disabled) {\n this.setDisabled();\n }\n };\n RadioButton.prototype.initWrapper = function () {\n var rippleSpan;\n var wrapper = this.element.parentElement;\n if (!wrapper.classList.contains(WRAPPER)) {\n wrapper = this.createElement('div', { className: WRAPPER });\n if (this.element.parentNode) {\n this.element.parentNode.insertBefore(wrapper, this.element);\n }\n }\n var label = this.createElement('label', { attrs: { for: this.element.id } });\n wrapper.appendChild(this.element);\n wrapper.appendChild(label);\n if (isRippleEnabled) {\n rippleSpan = this.createElement('span', { className: (RIPPLE) });\n label.appendChild(rippleSpan);\n rippleEffect(rippleSpan, {\n duration: 400,\n isCenterRipple: true\n });\n }\n wrapper.classList.add('e-wrapper');\n if (this.enableRtl) {\n label.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (this.label) {\n this.setText(this.label);\n }\n };\n RadioButton.prototype.keyUpHandler = function () {\n if (this.isFocused) {\n this.getLabel().classList.add('e-focus');\n }\n };\n RadioButton.prototype.labelMouseDownHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n rippleMouseHandler(e, rippleSpan);\n };\n RadioButton.prototype.labelMouseLeaveHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = rippleElem.length - 1; i > 0; i--) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n RadioButton.prototype.labelMouseUpHandler = function (e) {\n var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n if (rippleSpan) {\n var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n for (var i = rippleElem.length - 1; i > 0; i--) {\n rippleSpan.removeChild(rippleSpan.childNodes[i]);\n }\n rippleMouseHandler(e, rippleSpan);\n }\n };\n RadioButton.prototype.formResetHandler = function () {\n this.checked = this.initialCheckedValue;\n if (this.initialCheckedValue) {\n attributes(this.element, { 'checked': 'true' });\n }\n };\n /**\n * Called internally if any of the property value changes.\n *\n * @private\n * @param {RadioButtonModel} newProp - Specifies New Properties\n * @param {RadioButtonModel} oldProp - Specifies Old Properties\n * @returns {void}\n */\n RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var wrap = this.getWrapper();\n var label = this.getLabel();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'checked':\n if (newProp.checked) {\n this.updateChange();\n }\n this.element.checked = newProp.checked;\n break;\n case 'disabled':\n if (newProp.disabled) {\n this.setDisabled();\n this.unWireEvents();\n }\n else {\n this.element.disabled = false;\n this.wireEvents();\n }\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([wrap], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([wrap], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n label.classList.add(RTL);\n }\n else {\n label.classList.remove(RTL);\n }\n break;\n case 'label':\n this.setText(newProp.label);\n break;\n case 'labelPosition':\n if (newProp.labelPosition === 'Before') {\n label.classList.add('e-right');\n }\n else {\n label.classList.remove('e-right');\n }\n break;\n case 'name':\n this.element.setAttribute('name', newProp.name);\n break;\n case 'value':\n // eslint-disable-next-line no-case-declarations\n var type = typeof this.htmlAttributes.value;\n if (!isNullOrUndefined(this.htmlAttributes) && (this.htmlAttributes.value || type === 'boolean' && !this.htmlAttributes.value)) {\n break;\n }\n this.element.setAttribute('value', newProp.value);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttribute();\n break;\n }\n }\n };\n /**\n * Initialize checked Property, Angular and React and Unique ID support.\n *\n * @private\n * @returns {void}\n */\n RadioButton.prototype.preRender = function () {\n var element = this.element;\n this.formElement = closest(this.element, 'form');\n this.tagName = this.element.tagName;\n element = wrapperInitialize(this.createElement, 'EJS-RADIOBUTTON', 'radio', element, WRAPPER, 'radio');\n this.element = element;\n if (this.element.getAttribute('type') !== 'radio') {\n this.element.setAttribute('type', 'radio');\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n if (this.tagName === 'EJS-RADIOBUTTON') {\n var formControlName = this.element.getAttribute('formcontrolname');\n if (formControlName) {\n this.setProperties({ 'name': formControlName }, true);\n this.element.setAttribute('name', formControlName);\n }\n }\n };\n /**\n * Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n RadioButton.prototype.render = function () {\n this.initialize();\n if (!this.disabled) {\n this.wireEvents();\n }\n this.renderComplete();\n this.wrapper = this.getWrapper();\n };\n RadioButton.prototype.setDisabled = function () {\n this.element.disabled = true;\n };\n RadioButton.prototype.setText = function (text) {\n var label = this.getLabel();\n var textLabel = label.getElementsByClassName(LABEL)[0];\n if (textLabel) {\n textLabel.textContent = text;\n }\n else {\n text = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(text) : text;\n textLabel = this.createElement('span', { className: LABEL, innerHTML: text });\n label.appendChild(textLabel);\n }\n if (this.labelPosition === 'Before') {\n this.getLabel().classList.add('e-right');\n }\n else {\n this.getLabel().classList.remove('e-right');\n }\n };\n RadioButton.prototype.updateHtmlAttribute = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n var wrapper = this.element.parentElement;\n if (ATTRIBUTES.indexOf(key) > -1) {\n if (key === 'class') {\n addClass([wrapper], this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ').trim().split(' '));\n }\n else if (key === 'title' || key === 'style') {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n else {\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n else {\n wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n RadioButton.prototype.unWireEvents = function () {\n var label = this.wrapper;\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n var rippleLabel = label.getElementsByTagName('label')[0];\n if (rippleLabel) {\n EventHandler.remove(rippleLabel, 'mousedown', this.labelMouseDownHandler);\n EventHandler.remove(rippleLabel, 'mouseup', this.labelMouseUpHandler);\n EventHandler.remove(rippleLabel, 'mouseleave', this.labelMouseLeaveHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n RadioButton.prototype.wireEvents = function () {\n var label = this.getLabel();\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n var rippleLabel = label.getElementsByClassName(LABEL)[0];\n if (rippleLabel) {\n EventHandler.add(rippleLabel, 'mousedown', this.labelMouseDownHandler, this);\n EventHandler.add(rippleLabel, 'mouseup', this.labelMouseUpHandler, this);\n EventHandler.add(rippleLabel, 'mouseleave', this.labelMouseLeaveHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n };\n /**\n * Click the RadioButton element\n * its native method\n *\n * @public\n * @returns {void}\n */\n RadioButton.prototype.click = function () {\n this.element.click();\n };\n /**\n * Sets the focus to RadioButton\n * its native method\n *\n * @public\n * @returns {void}\n */\n RadioButton.prototype.focusIn = function () {\n this.element.focus();\n };\n var RadioButton_1;\n __decorate([\n Event()\n ], RadioButton.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], RadioButton.prototype, \"created\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"checked\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], RadioButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"label\", void 0);\n __decorate([\n Property('After')\n ], RadioButton.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"name\", void 0);\n __decorate([\n Property('')\n ], RadioButton.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], RadioButton.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property({})\n ], RadioButton.prototype, \"htmlAttributes\", void 0);\n RadioButton = RadioButton_1 = __decorate([\n NotifyPropertyChanges\n ], RadioButton);\n return RadioButton;\n}(Component));\nexport { RadioButton };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WColumnFormat, WSectionFormat } from './../../implementation/format/index';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\n/**\n * The Page setup dialog is used to modify formatting of selected sections.\n */\nvar PageSetupDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function PageSetupDialog(documentHelper) {\n var _this = this;\n this.isPortrait = true;\n /**\n * @private\n * @returns {void}\n */\n this.loadPageSetupDialog = function () {\n _this.documentHelper.updateFocus();\n var sectionFormat = _this.documentHelper.selection.sectionFormat;\n _this.topMarginBox.value = sectionFormat.topMargin;\n _this.leftMarginBox.value = sectionFormat.leftMargin;\n _this.bottomMarginBox.value = sectionFormat.bottomMargin;\n _this.rightMarginBox.value = sectionFormat.rightMargin;\n _this.widthBox.value = sectionFormat.pageWidth;\n _this.heightBox.value = sectionFormat.pageHeight;\n _this.checkBox1.checked = sectionFormat.differentOddAndEvenPages;\n _this.checkBox2.checked = sectionFormat.differentFirstPage;\n _this.headerBox.value = sectionFormat.headerDistance;\n _this.footerBox.value = sectionFormat.footerDistance;\n if (_this.widthBox.value > _this.heightBox.value) {\n _this.landscape.checked = true;\n }\n else {\n _this.portrait.checked = true;\n }\n /* eslint-disable-next-line max-len */\n _this.setPageSize(_this.portrait.checked, parseFloat(sectionFormat.pageWidth.toFixed(1)), parseFloat(sectionFormat.pageHeight.toFixed(1)));\n };\n /**\n * @private\n * @returns {void}\n */\n this.closePageSetupDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.keyUpInsertPageSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyPageSetupProperties();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyPageSetupProperties = function () {\n var sectionFormat = new WSectionFormat();\n var localValue = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n localValue.setLocale(_this.documentHelper.owner.locale);\n var currentSectionFormat = _this.documentHelper.selection.sectionFormat;\n sectionFormat.bottomMargin = _this.bottomMarginBox.value;\n sectionFormat.topMargin = _this.topMarginBox.value;\n sectionFormat.leftMargin = _this.leftMarginBox.value;\n sectionFormat.rightMargin = _this.rightMarginBox.value;\n sectionFormat.pageWidth = _this.widthBox.value;\n sectionFormat.pageHeight = _this.heightBox.value;\n sectionFormat.differentOddAndEvenPages = _this.checkBox1.checked;\n sectionFormat.differentFirstPage = _this.checkBox2.checked;\n sectionFormat.headerDistance = _this.headerBox.value;\n sectionFormat.footerDistance = _this.footerBox.value;\n if (_this.widthBox.value < (_this.leftMarginBox.value + _this.rightMarginBox.value)) {\n DialogUtility.alert(localValue.getConstant('Left and right margins.'));\n return;\n }\n if (_this.widthBox.value < (_this.leftMarginBox.value + _this.rightMarginBox.value + 36)) {\n DialogUtility.alert(localValue.getConstant('Column width cannot be less than 36 pt.'));\n return;\n }\n if (Math.abs((_this.topMarginBox.value + _this.bottomMarginBox.value)) > _this.heightBox.value) {\n DialogUtility.alert(localValue.getConstant('The top/bottom margins are too large for the page height in some sections.'));\n return;\n }\n sectionFormat.numberOfColumns = currentSectionFormat.numberOfColumns;\n sectionFormat.equalWidth = currentSectionFormat.equalWidth;\n sectionFormat.lineBetweenColumns = currentSectionFormat.lineBetweenColumns;\n var cols = [];\n var pageWidth = HelperMethods.convertPointToPixel(sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin);\n for (var i = 0; i < currentSectionFormat.columns.length; i++) {\n var colFormat = new WColumnFormat();\n var width = HelperMethods.convertPointToPixel(currentSectionFormat.columns[parseInt(i.toString(), 10)].width);\n var space = HelperMethods.convertPointToPixel(currentSectionFormat.columns[parseInt(i.toString(), 10)].space);\n var totalSpace = (currentSectionFormat.numberOfColumns - 1) * space;\n if ((currentSectionFormat.equalWidth || width === 0) && !isNullOrUndefined(pageWidth)) {\n width = (pageWidth - totalSpace) / currentSectionFormat.numberOfColumns;\n }\n colFormat.width = width;\n colFormat.space = space;\n colFormat.index = i;\n cols.push(colFormat);\n }\n sectionFormat.columns = cols;\n if (currentSectionFormat.pageHeight === sectionFormat.pageHeight && currentSectionFormat.pageWidth === sectionFormat.pageWidth) {\n sectionFormat.breakCode = currentSectionFormat.breakCode;\n }\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, sectionFormat);\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @param {ChangeEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeByPaperSize = function (event) {\n var value = event.value;\n // const sectionFormat: SelectionSectionFormat = this.documentHelper.selection.sectionFormat;\n // const width: number = sectionFormat.pageWidth;\n // const height: number = sectionFormat.pageHeight;\n /* eslint-disable-next-line max-len */\n if (_this.documentHelper.selection.sectionFormat.pageWidth > _this.documentHelper.selection.sectionFormat.pageHeight || _this.landscape.checked) {\n _this.isPortrait = false;\n _this.portrait.checked = false;\n }\n else {\n _this.isPortrait = true;\n }\n if (value === 'letter') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 792;\n }\n else {\n _this.widthBox.value = 792;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'tabloid') {\n if (_this.isPortrait) {\n _this.widthBox.value = 792;\n _this.heightBox.value = 1224;\n }\n else {\n _this.widthBox.value = 1224;\n _this.heightBox.value = 792;\n }\n }\n else if (value === 'legal') {\n if (_this.isPortrait) {\n _this.widthBox.value = 612;\n _this.heightBox.value = 1008;\n }\n else {\n _this.widthBox.value = 1008;\n _this.heightBox.value = 612;\n }\n }\n else if (value === 'statement') {\n if (_this.isPortrait) {\n _this.widthBox.value = 392;\n _this.heightBox.value = 612;\n }\n else {\n _this.widthBox.value = 612;\n _this.heightBox.value = 392;\n }\n }\n else if (value === 'executive') {\n if (_this.isPortrait) {\n _this.widthBox.value = 522;\n _this.heightBox.value = 756;\n }\n else {\n _this.widthBox.value = 756;\n _this.heightBox.value = 522;\n }\n }\n else if (value === 'a3') {\n if (_this.isPortrait) {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 1190.55;\n }\n else {\n _this.widthBox.value = 1190.55;\n _this.heightBox.value = 841.9;\n }\n }\n else if (value === 'a4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 841.9;\n }\n else {\n _this.widthBox.value = 841.9;\n _this.heightBox.value = 595.3;\n }\n }\n else if (value === 'a5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 419.55;\n _this.heightBox.value = 595.3;\n }\n else {\n _this.widthBox.value = 595.3;\n _this.heightBox.value = 419.55;\n }\n }\n else if (value === 'b4') {\n if (_this.isPortrait) {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 1031.8;\n }\n else {\n _this.widthBox.value = 1031.8;\n _this.heightBox.value = 728.5;\n }\n }\n else if (value === 'b5') {\n if (_this.isPortrait) {\n _this.widthBox.value = 515.9;\n _this.heightBox.value = 728.5;\n }\n else {\n _this.widthBox.value = 728.5;\n _this.heightBox.value = 515.9;\n }\n }\n else if (value === 'customsize') {\n if (_this.isPortrait) {\n _this.widthBox.value = _this.documentHelper.selection.sectionFormat.pageWidth;\n _this.heightBox.value = _this.documentHelper.selection.sectionFormat.pageHeight;\n }\n else {\n _this.widthBox.value = _this.documentHelper.selection.sectionFormat.pageWidth;\n _this.heightBox.value = _this.documentHelper.selection.sectionFormat.pageHeight;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onPortrait = function () {\n _this.landscape.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width > height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onLandscape = function () {\n _this.portrait.checked = false;\n var width = _this.widthBox.value;\n var height = _this.heightBox.value;\n if (width < height) {\n _this.widthBox.value = height;\n _this.heightBox.value = width;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.paperSize.value = undefined;\n _this.topMarginBox.value = undefined;\n _this.bottomMarginBox.value = undefined;\n _this.leftMarginBox.value = undefined;\n _this.rightMarginBox.value = undefined;\n _this.headerBox.value = undefined;\n _this.footerBox.value = undefined;\n _this.widthBox.value = undefined;\n _this.heightBox.value = undefined;\n _this.checkBox1.checked = false;\n _this.checkBox2.checked = false;\n _this.portrait.checked = false;\n _this.landscape.checked = false;\n };\n this.documentHelper = documentHelper;\n }\n PageSetupDialog.prototype.getModuleName = function () {\n return 'PageSetupDialog';\n };\n /**\n * @private\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initPageSetupDialog = function (locale, isRtl) {\n this.target = createElement('div');\n var ejtabContainer = createElement('div');\n this.target.appendChild(ejtabContainer);\n this.marginTab = createElement('div', {\n styles: 'position: relative;', className: 'e-de-dlg-tab-first-child'\n });\n this.paperTab = createElement('div', {\n styles: 'position: relative;', className: 'e-de-dlg-tab-first-child'\n });\n this.layoutTab = createElement('div', {\n styles: 'position: relative;', className: 'e-de-dlg-tab-first-child'\n });\n var ejtab = createElement('div', { className: 'e-de-page-setup-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var marginHeader = createElement('div', {\n innerHTML: locale.getConstant('Margin')\n });\n var paperHeader = createElement('div', {\n innerHTML: locale.getConstant('Paper')\n });\n var layoutHeader = createElement('div', {\n innerHTML: locale.getConstant('Layout')\n });\n headerContainer.appendChild(marginHeader);\n headerContainer.appendChild(paperHeader);\n headerContainer.appendChild(layoutHeader);\n var marginContent = createElement('div');\n var paperContent = createElement('div');\n var layoutContent = createElement('div');\n marginContent.appendChild(this.marginTab);\n paperContent.appendChild(this.paperTab);\n layoutContent.appendChild(this.layoutTab);\n ejtabContainer.appendChild(ejtab);\n this.initMarginProperties(this.marginTab, locale, isRtl);\n this.initPaperSizeProperties(this.paperTab, locale, isRtl);\n this.initLayoutProperties(this.layoutTab, locale, isRtl);\n var items = [\n { header: { text: marginHeader }, content: marginContent },\n { header: { text: paperHeader }, content: paperContent },\n { header: { text: layoutHeader }, content: layoutContent }\n ];\n var tabObj = new Tab({ items: items, enableRtl: isRtl }, ejtab);\n tabObj.isStringTemplate = true;\n this.target.addEventListener('keyup', this.keyUpInsertPageSettings);\n };\n /**\n * @private\n * @param {HTMLDivElement} element - Specifies the div element\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initMarginProperties = function (element, locale, isRtl) {\n var marginDiv = createElement('div');\n var leftMarginDiv = createElement('div', { className: 'e-de-container-row' });\n marginDiv.appendChild(leftMarginDiv);\n var rightMarginDiv = createElement('div', { className: 'e-de-container-row' });\n marginDiv.appendChild(rightMarginDiv);\n if (isRtl) {\n leftMarginDiv.classList.add('e-de-rtl');\n rightMarginDiv.classList.add('e-de-rtl');\n }\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n var topContainer = createElement('div', { className: 'e-de-subcontainer-left' });\n topContainer.appendChild(topTextBox);\n leftMarginDiv.appendChild(topContainer);\n var bottomContainer = createElement('div', { className: 'e-de-subcontainer-right' });\n bottomContainer.appendChild(bottomTextBox);\n leftMarginDiv.appendChild(bottomContainer);\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_left'\n });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n var leftContainer = createElement('div', { className: 'e-de-subcontainer-left' });\n leftContainer.appendChild(leftTextBox);\n rightMarginDiv.appendChild(leftContainer);\n var rightContainer = createElement('div', { className: 'e-de-subcontainer-right' });\n rightContainer.appendChild(rightTextBox);\n rightMarginDiv.appendChild(rightContainer);\n element.appendChild(marginDiv);\n this.topMarginBox = new NumericTextBox({ value: 71, max: 1584, min: -1584, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Top') });\n this.topMarginBox.appendTo(topTextBox);\n this.leftMarginBox = new NumericTextBox({ value: 73, max: 1584, min: 0, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Left') });\n this.leftMarginBox.appendTo(leftTextBox);\n this.bottomMarginBox = new NumericTextBox({ value: 72, max: 1584, min: -1584, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Bottom') });\n this.bottomMarginBox.appendTo(bottomTextBox);\n this.rightMarginBox = new NumericTextBox({ value: 74, max: 1584, min: 0, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Right') });\n this.rightMarginBox.appendTo(rightTextBox);\n var orientationDiv = createElement('div');\n var orientationLabeldiv = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Orientation') });\n var orientationPropDiv = createElement('div', { styles: 'display: flex;' });\n topTextBox.setAttribute('aria-labelledby', locale.getConstant('Top'));\n bottomTextBox.setAttribute('aria-labelledby', locale.getConstant('Bottom'));\n leftTextBox.setAttribute('aria-labelledby', locale.getConstant('Left'));\n rightTextBox.setAttribute('aria-labelledby', locale.getConstant('Right'));\n var portraitDivStyles;\n if (isRtl) {\n portraitDivStyles = 'padding-left: 30px;';\n }\n else {\n portraitDivStyles = 'padding-right: 30px;';\n }\n var portraitDiv = createElement('div', { id: '_portraitDiv', styles: portraitDivStyles });\n var portrait = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n var landscapeDiv = createElement('div', { id: '_landscapeDiv' });\n var landscape = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n portraitDiv.appendChild(portrait);\n landscapeDiv.appendChild(landscape);\n orientationPropDiv.appendChild(portraitDiv);\n orientationPropDiv.appendChild(landscapeDiv);\n orientationDiv.appendChild(orientationLabeldiv);\n orientationDiv.appendChild(orientationPropDiv);\n this.portrait = new RadioButton({ label: locale.getConstant('Portrait'), checked: true, enableRtl: isRtl, change: this.onPortrait });\n this.landscape = new RadioButton({ label: locale.getConstant('Landscape'), enableRtl: isRtl, change: this.onLandscape });\n this.portrait.appendTo(portrait);\n this.landscape.appendTo(landscape);\n element.appendChild(orientationDiv);\n portrait.setAttribute('aria-label', locale.getConstant('Portrait'));\n landscape.setAttribute('aria-label', locale.getConstant('Landscape'));\n };\n /**\n * @private\n * @param {HTMLDivElement} element - Specifies the div element\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initPaperSizeProperties = function (element, locale, isRtl) {\n var sizeDiv = createElement('div', {\n className: 'e-de-container-row'\n });\n var leftSizeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n sizeDiv.appendChild(leftSizeDiv);\n var rightSizeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n sizeDiv.appendChild(rightSizeDiv);\n if (isRtl) {\n leftSizeDiv.classList.add('e-de-rtl');\n rightSizeDiv.classList.add('e-de-rtl');\n }\n // const widthLabel: HTMLLabelElement = createElement('label', {\n // innerHTML: locale.getConstant('Width'), className: 'e-de-page-setup-dlg-sub-header',\n // id: this.target.id + '_widthLabel', styles: 'padding-top:0px;'\n // }) as HTMLLabelElement;\n var widthTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n //leftSizeDiv.appendChild(widthLabel);\n leftSizeDiv.appendChild(widthTextBox);\n // const heightLabel: HTMLLabelElement = createElement('label', {\n // innerHTML: locale.getConstant('Height'), className: 'e-de-page-setup-dlg-sub-header', styles: 'padding-top:0px;',\n // id: this.target.id + '_heightLabel'\n // });\n var heightTextBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n //rightSizeDiv.appendChild(heightLabel);\n rightSizeDiv.appendChild(heightTextBox);\n element.appendChild(sizeDiv);\n this.widthBox = new NumericTextBox({ value: 612, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Width') });\n this.widthBox.appendTo(widthTextBox);\n this.heightBox = new NumericTextBox({ value: 792, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Height') });\n this.heightBox.appendTo(heightTextBox);\n widthTextBox.setAttribute('arial-label', locale.getConstant('Width'));\n heightTextBox.setAttribute('arial-label', locale.getConstant('Height'));\n var paperSizeDiv = createElement('div');\n var paperSize = createElement('select', {\n styles: 'width:170px;padding-bottom: 20px;',\n innerHTML: ''\n });\n paperSizeDiv.appendChild(paperSize);\n this.paperSize = new DropDownList({ change: this.changeByPaperSize, width: '170px', enableRtl: isRtl });\n this.paperSize.appendTo(paperSize);\n this.paperSize.htmlAttributes = { 'aria-labelledby': 'PaperSize', 'aria-describedby': 'PaperSize' };\n element.appendChild(paperSizeDiv);\n };\n /**\n * @private\n * @param {HTMLDivElement} element - Specifies the div element\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n PageSetupDialog.prototype.initLayoutProperties = function (element, locale, isRtl) {\n var layoutDiv = createElement('div', { className: 'e-de-dlg-container' });\n var firstPageDiv = createElement('div', { styles: 'height: 27px;' });\n var checkBox1 = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n firstPageDiv.appendChild(checkBox1);\n var oddOrEvenDiv = createElement('div', { styles: 'height: 27px;' });\n var checkBox2 = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n firstPageDiv.setAttribute('aria-label', locale.getConstant('Different first page'));\n oddOrEvenDiv.setAttribute('aria-label', locale.getConstant('Different odd and even'));\n oddOrEvenDiv.appendChild(checkBox2);\n layoutDiv.appendChild(firstPageDiv);\n layoutDiv.appendChild(oddOrEvenDiv);\n this.checkBox1 = new CheckBox({ label: locale.getConstant('Different odd and even'), enableRtl: isRtl });\n this.checkBox2 = new CheckBox({ label: locale.getConstant('Different first page'), enableRtl: isRtl });\n this.checkBox1.appendTo(checkBox1);\n this.checkBox2.appendTo(checkBox2);\n element.appendChild(layoutDiv);\n var textLabelDiv = createElement('div');\n var textLabel = createElement('label', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('From edge')\n });\n textLabelDiv.appendChild(textLabel);\n element.appendChild(textLabelDiv);\n var propertyDiv = createElement('div', { className: 'e-de-dlg-row' });\n var leftLayoutDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n propertyDiv.appendChild(leftLayoutDiv);\n var rightLayoutDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n propertyDiv.appendChild(rightLayoutDiv);\n if (isRtl) {\n rightLayoutDiv.classList.add('e-de-rtl');\n leftLayoutDiv.classList.add('e-de-rtl');\n }\n var headerBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n leftLayoutDiv.appendChild(headerBox);\n var footerBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n rightLayoutDiv.appendChild(footerBox);\n element.appendChild(propertyDiv);\n this.headerBox = new NumericTextBox({ value: 612, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Header') });\n this.headerBox.appendTo(headerBox);\n this.footerBox = new NumericTextBox({ value: 792, width: 170, decimals: 2, floatLabelType: 'Always', placeholder: locale.getConstant('Footer') });\n this.footerBox.appendTo(footerBox);\n headerBox.setAttribute('aria-labelledby', locale.getConstant('Header'));\n footerBox.setAttribute('aria-labelledby', locale.getConstant('Footer'));\n };\n /**\n * @private\n * @returns {void}\n */\n PageSetupDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initPageSetupDialog(localValue, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog.header = localValue.getConstant('Page Setup');\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadPageSetupDialog;\n this.documentHelper.dialog.close = this.closePageSetupDialog;\n this.documentHelper.dialog.buttons = [{\n click: this.applyPageSetupProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-layout-ppty-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-layout-ppty-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n var dialogElement = this.documentHelper.dialog.element;\n if (dialogElement) {\n this.documentHelper.updateDialogTabHeight(dialogElement, this.target);\n }\n };\n PageSetupDialog.prototype.setPageSize = function (isPortrait, width, height) {\n if ((isPortrait && width === 612 && height === 792)\n || (!isPortrait && width === 792 && height === 612)) {\n this.paperSize.value = 'letter';\n }\n else if ((isPortrait && width === 792 && height === 1224)\n || (!isPortrait && width === 1224 && height === 792)) {\n this.paperSize.value = 'tabloid';\n }\n else if ((isPortrait && width === 612 && height === 1008)\n || (!isPortrait && width === 1008 && height === 612)) {\n this.paperSize.value = 'legal';\n }\n else if ((isPortrait && width === 392 && height === 612)\n || (!isPortrait && width === 392 && height === 612)) {\n this.paperSize.value = 'statement';\n }\n else if ((isPortrait && width === 522 && height === 756)\n || (!isPortrait && width === 756 && height === 522)) {\n this.paperSize.value = 'executive';\n }\n else if ((isPortrait && width === 841.9 && height === 1190.5)\n || (!isPortrait && width === 1190.5 && height === 841.9)) {\n this.paperSize.value = 'a3';\n }\n else if ((isPortrait && width === 595.3 && height === 841.9)\n || (!isPortrait && width === 841.9 && height === 595.3)) {\n this.paperSize.value = 'a4';\n }\n else if ((isPortrait && width === 419.6 && height === 595.3)\n || (!isPortrait && width === 595.3 && height === 419.6)) {\n this.paperSize.value = 'a5';\n }\n else if ((isPortrait && width === 728.5 && height === 1031.8)\n || (!isPortrait && width === 1031.8 && height === 728.5)) {\n this.paperSize.value = 'b4';\n }\n else if ((isPortrait && width === 515.9 && height === 728.5)\n || (!isPortrait && width === 728.5 && height === 515.9)) {\n this.paperSize.value = 'b5';\n }\n else {\n this.paperSize.value = 'customsize';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n PageSetupDialog.prototype.destroy = function () {\n if (this.topMarginBox) {\n this.topMarginBox.destroy();\n this.topMarginBox = undefined;\n }\n if (this.leftMarginBox) {\n this.leftMarginBox.destroy();\n this.leftMarginBox = undefined;\n }\n if (this.bottomMarginBox) {\n this.bottomMarginBox.destroy();\n this.bottomMarginBox = undefined;\n }\n if (this.rightMarginBox) {\n this.rightMarginBox.destroy();\n this.rightMarginBox = undefined;\n }\n if (this.headerBox) {\n this.headerBox.destroy();\n this.headerBox = undefined;\n }\n if (this.footerBox) {\n this.footerBox.destroy();\n this.footerBox = undefined;\n }\n if (this.widthBox) {\n this.widthBox.destroy();\n this.widthBox = undefined;\n }\n if (this.heightBox) {\n this.heightBox.destroy();\n this.heightBox = undefined;\n }\n if (this.paperSize) {\n this.paperSize.destroy();\n this.paperSize = undefined;\n }\n if (this.checkBox1) {\n this.checkBox1.destroy();\n this.checkBox1 = undefined;\n }\n if (this.checkBox2) {\n this.checkBox2.destroy();\n this.checkBox2 = undefined;\n }\n if (this.portrait) {\n this.portrait.destroy();\n this.portrait = undefined;\n }\n if (this.landscape) {\n this.landscape.destroy();\n this.landscape = undefined;\n }\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[parseInt(s.toString(), 10)]);\n s--;\n }\n this.target = undefined;\n }\n };\n return PageSetupDialog;\n}());\nexport { PageSetupDialog };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { EventHandler, Property, Event, addClass, Browser, removeClass, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, NotifyPropertyChanges, getValue, setValue } from '@syncfusion/ej2-base';\nimport { DropDownList, dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { Search } from '../common/incremental-search';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nvar SPINNER_CLASS = 'e-atc-spinner-icon';\ndropDownListClasses.root = 'e-combobox';\nvar inputObject = {\n container: null,\n buttons: []\n};\n/**\n * The ComboBox component allows the user to type a value or choose an option from the list of predefined options.\n * ```html\n * \n * ```\n * ```typescript\n * let games:ComboBox = new ComboBox();\n * games.appendTo(\"#list\");\n * ```\n */\nvar ComboBox = /** @class */ (function (_super) {\n __extends(ComboBox, _super);\n /**\n * *Constructor for creating the component\n *\n * @param {ComboBoxModel} options - Specifies the ComboBox model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function ComboBox(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler\n *\n * @private\n * @returns {void}\n */\n ComboBox.prototype.preRender = function () {\n _super.prototype.preRender.call(this);\n };\n ComboBox.prototype.getLocaleName = function () {\n return 'combo-box';\n };\n ComboBox.prototype.wireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur, this);\n EventHandler.add(this.inputWrapper.container, 'blur', this.onBlurHandler, this);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick, this);\n }\n EventHandler.add(this.inputElement, 'focus', this.targetFocus, this);\n if (!this.readonly) {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n EventHandler.add(this.inputElement, 'paste', this.pasteHandler, this);\n EventHandler.add(window, 'resize', this.windowResize, this);\n }\n this.bindCommonEvent();\n };\n ComboBox.prototype.preventBlur = function (e) {\n if ((!this.allowFiltering && document.activeElement !== this.inputElement &&\n !document.activeElement.classList.contains(dropDownListClasses.input) && Browser.isDevice || !Browser.isDevice)) {\n e.preventDefault();\n }\n };\n ComboBox.prototype.onBlurHandler = function (e) {\n var inputValue = this.inputElement && this.inputElement.value === '' ?\n null : this.inputElement && this.inputElement.value;\n if (!isNullOrUndefined(this.listData) && !isNullOrUndefined(inputValue) && inputValue !== this.text) {\n this.customValue(e);\n }\n _super.prototype.onBlurHandler.call(this, e);\n };\n ComboBox.prototype.targetElement = function () {\n return this.inputElement;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ComboBox.prototype.setOldText = function (text) {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n this.removeSelection();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ComboBox.prototype.setOldValue = function (value) {\n if (this.allowCustom) {\n this.valueMuteChange(this.value);\n }\n else {\n this.valueMuteChange(null);\n }\n this.removeSelection();\n this.setHiddenValue();\n };\n ComboBox.prototype.valueMuteChange = function (value) {\n value = this.allowObjectBinding && !isNullOrUndefined(value) ? getValue((this.fields.value) ? this.fields.value : '', value) : value;\n var inputValue = isNullOrUndefined(value) ? null : value.toString();\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n if (this.allowObjectBinding) {\n value = this.getDataByValue(value);\n }\n this.setProperties({ value: value, text: value, index: null }, true);\n this.activeIndex = this.index;\n var fields = this.fields;\n var dataItem = {};\n dataItem[fields.text] = isNullOrUndefined(value) ? null : value.toString();\n dataItem[fields.value] = isNullOrUndefined(value) ? null : value.toString();\n this.itemData = dataItem;\n this.item = null;\n if ((!this.allowObjectBinding && (this.previousValue !== this.value)) || (this.allowObjectBinding && this.previousValue && this.value && !this.isObjectInArray(this.previousValue, [this.value]))) {\n this.detachChangeEvent(null);\n }\n };\n ComboBox.prototype.updateValues = function () {\n if (this.fields.disabled) {\n if (this.value != null) {\n this.value = !this.isDisableItemValue(this.value) ? this.value : null;\n }\n if (this.text != null) {\n this.text = !this.isDisabledItemByIndex(this.getIndexByValue(this.getValueByText(this.text))) ? this.text : null;\n }\n if (this.index != null) {\n this.index = !this.isDisabledItemByIndex(this.index) ? this.index : null;\n this.activeIndex = this.index;\n }\n }\n if (!isNullOrUndefined(this.value)) {\n var currentValue = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n var li = this.getElementByValue(currentValue);\n var doesItemExist = !isNullOrUndefined(li) ? true : false;\n if (this.enableVirtualization && this.value) {\n var fields = (this.fields.value) ? this.fields.value : '';\n var currentValue_1 = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n if (this.dataSource instanceof DataManager) {\n var getItem = new DataManager(this.virtualGroupDataSource).executeLocal(new Query().where(new Predicate(fields, 'equal', currentValue_1)));\n if (getItem && getItem.length > 0) {\n this.itemData = getItem[0];\n doesItemExist = true;\n var dataItem = this.getItemData();\n var value = this.allowObjectBinding ? this.getDataByValue(dataItem.value) : dataItem.value;\n if ((this.value === dataItem.value && this.text !== dataItem.text) || (this.value !== dataItem.value && this.text === dataItem.text)) {\n this.setProperties({ 'text': dataItem.text, 'value': value });\n }\n }\n }\n else {\n var getItem = new DataManager(this.dataSource).executeLocal(new Query().where(new Predicate(fields, 'equal', currentValue_1)));\n if (getItem && getItem.length > 0) {\n this.itemData = getItem[0];\n doesItemExist = true;\n var dataItem = this.getItemData();\n var value = this.allowObjectBinding ? this.getDataByValue(dataItem.value) : dataItem.value;\n if ((this.value === dataItem.value && this.text !== dataItem.text) || (this.value !== dataItem.value && this.text === dataItem.text)) {\n this.setProperties({ 'text': dataItem.text, 'value': value });\n }\n }\n }\n }\n if (li) {\n this.setSelection(li, null);\n }\n else if ((!this.enableVirtualization && this.allowCustom) || (this.allowCustom && this.enableVirtualization && !doesItemExist)) {\n this.valueMuteChange(this.value);\n }\n else if (!this.enableVirtualization || (this.enableVirtualization && !doesItemExist)) {\n this.valueMuteChange(null);\n }\n }\n else if (this.text && isNullOrUndefined(this.value)) {\n var li = this.getElementByText(this.text);\n if (li) {\n this.setSelection(li, null);\n }\n else {\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n this.customValue();\n }\n }\n else {\n this.setSelection(this.liCollections[this.activeIndex], null);\n }\n this.setHiddenValue();\n Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n ComboBox.prototype.updateIconState = function () {\n if (this.showClearButton) {\n if (this.inputElement && this.inputElement.value !== '' && !this.readonly) {\n removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n else {\n addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n }\n }\n };\n ComboBox.prototype.getAriaAttributes = function () {\n var ariaAttributes = {\n 'role': 'combobox',\n 'aria-autocomplete': 'both',\n 'aria-labelledby': this.hiddenElement.id,\n 'aria-expanded': 'false',\n 'aria-readonly': this.readonly.toString(),\n 'autocomplete': 'off',\n 'autocapitalize': 'off',\n 'spellcheck': 'false'\n };\n return ariaAttributes;\n };\n ComboBox.prototype.searchLists = function (e) {\n this.isTyped = true;\n if (this.isFiltering()) {\n _super.prototype.searchLists.call(this, e);\n if (this.ulElement && this.filterInput.value.trim() === '') {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n }\n else {\n if (this.ulElement && this.inputElement.value === '' && this.preventAutoFill) {\n this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n }\n this.incrementalSearch(e);\n }\n };\n ComboBox.prototype.getNgDirective = function () {\n return 'EJS-COMBOBOX';\n };\n ComboBox.prototype.setSearchBox = function () {\n this.filterInput = this.inputElement;\n var searchBoxContainer = (this.isFiltering() || (this.isReact && this.getModuleName() === 'combobox')) ? this.inputWrapper : inputObject;\n return searchBoxContainer;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ComboBox.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n var _this = this;\n _super.prototype.onActionComplete.call(this, ulElement, list, e);\n if (this.isSelectCustom) {\n this.removeSelection();\n }\n if (!this.preventAutoFill && this.getModuleName() === 'combobox' && this.isTyped && !this.enableVirtualization) {\n setTimeout(function () {\n _this.inlineSearch();\n });\n }\n };\n ComboBox.prototype.getFocusElement = function () {\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = !isNullOrUndefined(this.list) ? this.list.querySelector('.' + dropDownListClasses.selected) : this.list;\n var isSelected = dataItem.text && dataItem.text.toString() === this.inputElement.value && !isNullOrUndefined(selected);\n if (isSelected) {\n return selected;\n }\n if ((Browser.isDevice && !this.isDropDownClick || !Browser.isDevice) &&\n !isNullOrUndefined(this.liCollections) && this.liCollections.length > 0) {\n var inputValue = this.inputElement.value;\n var dataSource = this.sortedData;\n var type = this.typeOfData(dataSource).typeof;\n var activeItem = Search(inputValue, this.liCollections, this.filterType, true, dataSource, this.fields, type);\n if (this.enableVirtualization && inputValue !== '' && this.getModuleName() !== 'autocomplete' && this.isTyped && !this.allowFiltering) {\n var updatingincrementalindex = false;\n if ((this.viewPortInfo.endIndex >= this.incrementalEndIndex && this.incrementalEndIndex <= this.totalItemCount) || this.incrementalEndIndex == 0) {\n updatingincrementalindex = true;\n this.incrementalStartIndex = this.incrementalEndIndex;\n if (this.incrementalEndIndex == 0) {\n this.incrementalEndIndex = 100 > this.totalItemCount ? this.totalItemCount : 100;\n }\n else {\n this.incrementalEndIndex = this.incrementalEndIndex + 100 > this.totalItemCount ? this.totalItemCount : this.incrementalEndIndex + 100;\n }\n this.updateIncrementalInfo(this.incrementalStartIndex, this.incrementalEndIndex);\n updatingincrementalindex = true;\n }\n if (this.viewPortInfo.startIndex !== 0 || updatingincrementalindex) {\n this.updateIncrementalView(0, this.itemCount);\n }\n activeItem = Search(inputValue, this.incrementalLiCollections, this.filterType, true, dataSource, this.fields, type);\n while (isNullOrUndefined(activeItem.item) && this.incrementalEndIndex < this.totalItemCount) {\n this.incrementalStartIndex = this.incrementalEndIndex;\n this.incrementalEndIndex = this.incrementalEndIndex + 100 > this.totalItemCount ? this.totalItemCount : this.incrementalEndIndex + 100;\n this.updateIncrementalInfo(this.incrementalStartIndex, this.incrementalEndIndex);\n updatingincrementalindex = true;\n if (this.viewPortInfo.startIndex !== 0 || updatingincrementalindex) {\n this.updateIncrementalView(0, this.itemCount);\n }\n activeItem = Search(inputValue, this.incrementalLiCollections, this.filterType, true, dataSource, this.fields, type);\n if (!isNullOrUndefined(activeItem)) {\n activeItem.index = activeItem.index + this.incrementalStartIndex;\n break;\n }\n if (isNullOrUndefined(activeItem) && this.incrementalEndIndex >= this.totalItemCount) {\n this.incrementalStartIndex = 0;\n this.incrementalEndIndex = 100 > this.totalItemCount ? this.totalItemCount : 100;\n break;\n }\n }\n if (activeItem.index) {\n if ((!(this.viewPortInfo.startIndex >= activeItem.index)) || (!(activeItem.index >= this.viewPortInfo.endIndex))) {\n var startIndex = activeItem.index - ((this.itemCount / 2) - 2) > 0 ? activeItem.index - ((this.itemCount / 2) - 2) : 0;\n var endIndex = this.viewPortInfo.startIndex + this.itemCount > this.totalItemCount ? this.totalItemCount : this.viewPortInfo.startIndex + this.itemCount;\n if (startIndex != this.viewPortInfo.startIndex) {\n this.updateIncrementalView(startIndex, endIndex);\n }\n }\n }\n if (!isNullOrUndefined(activeItem.item)) {\n var index_1 = this.getIndexByValue(activeItem.item.getAttribute('data-value')) - this.skeletonCount;\n if (index_1 > this.itemCount / 2) {\n var startIndex = this.viewPortInfo.startIndex + ((this.itemCount / 2) - 2) < this.totalItemCount ? this.viewPortInfo.startIndex + ((this.itemCount / 2) - 2) : this.totalItemCount;\n var endIndex = this.viewPortInfo.startIndex + this.itemCount > this.totalItemCount ? this.totalItemCount : this.viewPortInfo.startIndex + this.itemCount;\n this.updateIncrementalView(startIndex, endIndex);\n }\n activeItem.item = this.getElementByValue(activeItem.item.getAttribute('data-value'));\n }\n else {\n this.updateIncrementalView(0, this.itemCount);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n this.list.scrollTop = 0;\n }\n if (activeItem && activeItem.item) {\n activeItem.item = this.getElementByValue(activeItem.item.getAttribute('data-value'));\n }\n }\n var activeElement = activeItem.item;\n if (!isNullOrUndefined(activeElement)) {\n var count = this.getIndexByValue(activeElement.getAttribute('data-value')) - 1;\n var height = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n if (!isNaN(height) && this.getModuleName() !== 'autocomplete') {\n this.removeFocus();\n var fixedHead = this.fields.groupBy ? this.liCollections[0].offsetHeight : 0;\n if (!this.enableVirtualization) {\n this.list.scrollTop = count * height + fixedHead;\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n if (this.enableVirtualization && !this.fields.groupBy) {\n var selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex ? activeElement.offsetTop + (this.virtualListInfo.startIndex * activeElement.offsetHeight) : activeElement.offsetTop;\n this.list.scrollTop = selectedLiOffsetTop - (this.list.querySelectorAll('.e-virtual-list').length * activeElement.offsetHeight);\n }\n }\n addClass([activeElement], dropDownListClasses.focus);\n }\n }\n else {\n if (this.isSelectCustom && this.inputElement.value.trim() !== '') {\n this.removeFocus();\n if (!this.enableVirtualization) {\n this.list.scrollTop = 0;\n }\n }\n }\n return activeElement;\n }\n else {\n return null;\n }\n };\n ComboBox.prototype.setValue = function (e) {\n if ((e && e.type === 'keydown' && e.action === 'enter') || (e && e.type === 'click')) {\n this.removeFillSelection();\n }\n if (this.autofill && this.getModuleName() === 'combobox' && e && e.type === 'keydown' && e.action !== 'enter') {\n this.preventAutoFill = false;\n this.inlineSearch(e);\n return false;\n }\n else {\n return _super.prototype.setValue.call(this, e);\n }\n };\n ComboBox.prototype.checkCustomValue = function () {\n var value = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n this.itemData = this.getDataByValue(value);\n var dataItem = this.getItemData();\n var setValue = this.allowObjectBinding ? this.itemData : dataItem.value;\n if (!(this.allowCustom && isNullOrUndefined(dataItem.value) && isNullOrUndefined(dataItem.text))) {\n this.setProperties({ 'value': setValue }, !this.allowCustom);\n }\n };\n /**\n * Shows the spinner loader.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.showSpinner = function () {\n if (isNullOrUndefined(this.spinnerElement)) {\n this.spinnerElement = (this.getModuleName() === 'autocomplete') ? (this.inputWrapper.buttons[0] ||\n this.inputWrapper.clearButton ||\n Input.appendSpan('e-input-group-icon ' + SPINNER_CLASS, this.inputWrapper.container, this.createElement)) :\n (this.inputWrapper.buttons[0] || this.inputWrapper.clearButton);\n addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n createSpinner({\n target: this.spinnerElement,\n width: Browser.isDevice ? '16px' : '14px'\n }, this.createElement);\n showSpinner(this.spinnerElement);\n }\n };\n /**\n * Hides the spinner loader.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.hideSpinner = function () {\n if (!isNullOrUndefined(this.spinnerElement)) {\n hideSpinner(this.spinnerElement);\n removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n detach(this.spinnerElement);\n }\n else {\n this.spinnerElement.innerHTML = '';\n }\n this.spinnerElement = null;\n }\n };\n ComboBox.prototype.setAutoFill = function (activeElement, isHover) {\n if (!isHover) {\n this.setHoverList(activeElement);\n }\n if (this.autofill && !this.preventAutoFill) {\n var currentValue = this.getTextByValue(activeElement.getAttribute('data-value')).toString();\n var currentFillValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n if (this.getModuleName() === 'combobox') {\n if (!this.isSelected && ((!this.allowObjectBinding && this.previousValue !== currentFillValue)) || (this.allowObjectBinding && this.previousValue && currentFillValue && !this.isObjectInArray(this.previousValue, [this.getDataByValue(currentFillValue)]))) {\n this.updateSelectedItem(activeElement, null);\n this.isSelected = true;\n this.previousValue = this.allowObjectBinding ? this.getDataByValue(this.getFormattedValue(activeElement.getAttribute('data-value'))) : this.getFormattedValue(activeElement.getAttribute('data-value'));\n }\n else {\n this.updateSelectedItem(activeElement, null, true);\n }\n }\n if (!this.isAndroidAutoFill(currentValue)) {\n this.setAutoFillSelection(currentValue, isHover);\n }\n }\n };\n ComboBox.prototype.isAndroidAutoFill = function (value) {\n if (Browser.isAndroid) {\n var currentPoints = this.getSelectionPoints();\n var prevEnd = this.prevSelectPoints.end;\n var curEnd = currentPoints.end;\n var prevStart = this.prevSelectPoints.start;\n var curStart = currentPoints.start;\n if (prevEnd !== 0 && ((prevEnd === value.length && prevStart === value.length) ||\n (prevStart > curStart && prevEnd > curEnd) || (prevEnd === curEnd && prevStart === curStart))) {\n return true;\n }\n else {\n return false;\n }\n }\n else {\n return false;\n }\n };\n ComboBox.prototype.clearAll = function (e, property) {\n if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n _super.prototype.clearAll.call(this, e);\n }\n if (this.isFiltering() && !isNullOrUndefined(e) && e.target === this.inputWrapper.clearButton) {\n this.searchLists(e);\n }\n };\n ComboBox.prototype.isSelectFocusItem = function (element) {\n return !isNullOrUndefined(element);\n };\n ComboBox.prototype.inlineSearch = function (e) {\n var isKeyNavigate = (e && (e.action === 'down' || e.action === 'up' ||\n e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown'));\n var activeElement = isKeyNavigate ? this.liCollections[this.activeIndex] : this.getFocusElement();\n if (!isNullOrUndefined(activeElement)) {\n if (!isKeyNavigate) {\n var value = this.getFormattedValue(activeElement.getAttribute('data-value'));\n this.activeIndex = this.getIndexByValue(value);\n this.activeIndex = !isNullOrUndefined(this.activeIndex) ? this.activeIndex : null;\n }\n this.preventAutoFill = this.inputElement.value === '' ? false : this.preventAutoFill;\n this.setAutoFill(activeElement, isKeyNavigate);\n }\n else if (!isNullOrUndefined(this.inputElement) && this.inputElement.value === '') {\n this.activeIndex = null;\n if (!isNullOrUndefined(this.list)) {\n if (!this.enableVirtualization) {\n this.list.scrollTop = 0;\n }\n var focusItem = this.list.querySelector('.' + dropDownListClasses.li);\n this.setHoverList(focusItem);\n }\n }\n else {\n this.activeIndex = null;\n this.removeSelection();\n if (this.liCollections && this.liCollections.length > 0 && !this.isCustomFilter) {\n this.removeFocus();\n }\n }\n };\n ComboBox.prototype.incrementalSearch = function (e) {\n this.showPopup(e);\n if (!isNullOrUndefined(this.listData)) {\n this.inlineSearch(e);\n e.preventDefault();\n }\n };\n ComboBox.prototype.setAutoFillSelection = function (currentValue, isKeyNavigate) {\n if (isKeyNavigate === void 0) { isKeyNavigate = false; }\n var selection = this.getSelectionPoints();\n var value = this.inputElement.value.substr(0, selection.start);\n if (value && (value.toLowerCase() === currentValue.substr(0, selection.start).toLowerCase())) {\n var inputValue = value + currentValue.substr(value.length, currentValue.length);\n Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(selection.start, this.inputElement.value.length);\n }\n else if (isKeyNavigate) {\n Input.setValue(currentValue, this.inputElement, this.floatLabelType, this.showClearButton);\n this.inputElement.setSelectionRange(0, this.inputElement.value.length);\n }\n };\n ComboBox.prototype.getValueByText = function (text) {\n return _super.prototype.getValueByText.call(this, text, true, this.ignoreAccent);\n };\n ComboBox.prototype.unWireEvent = function () {\n if (this.getModuleName() === 'combobox') {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur);\n EventHandler.remove(this.inputWrapper.container, 'blur', this.onBlurHandler);\n }\n if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n }\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'focus', this.targetFocus);\n if (!this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n EventHandler.remove(this.inputElement, 'paste', this.pasteHandler);\n EventHandler.remove(window, 'resize', this.windowResize);\n }\n }\n this.unBindCommonEvent();\n };\n ComboBox.prototype.setSelection = function (li, e) {\n _super.prototype.setSelection.call(this, li, e);\n if (!isNullOrUndefined(li) && !this.autofill && !this.isDropDownClick) {\n this.removeFocus();\n }\n };\n ComboBox.prototype.selectCurrentItem = function (e) {\n var li;\n if (this.isPopupOpen) {\n if (this.isSelected) {\n li = this.list.querySelector('.' + dropDownListClasses.selected);\n }\n else {\n li = this.list.querySelector('.' + dropDownListClasses.focus);\n }\n if (this.isDisabledElement(li)) {\n return;\n }\n if (li) {\n this.setSelection(li, e);\n this.isTyped = false;\n }\n if (this.isSelected) {\n this.isSelectCustom = false;\n this.onChangeEvent(e);\n }\n }\n if (e.action === 'enter' && this.inputElement.value.trim() === '') {\n this.clearAll(e);\n }\n else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n this.customValue(e);\n }\n this.hidePopup(e);\n };\n ComboBox.prototype.setHoverList = function (li) {\n this.removeSelection();\n if (this.isValidLI(li) && !li.classList.contains(dropDownListClasses.selected)) {\n this.removeFocus();\n li.classList.add(dropDownListClasses.focus);\n }\n };\n ComboBox.prototype.targetFocus = function (e) {\n if (Browser.isDevice && !this.allowFiltering) {\n this.preventFocus = false;\n }\n this.onFocus(e);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n };\n ComboBox.prototype.dropDownClick = function (e) {\n e.preventDefault();\n if (Browser.isDevice && !this.isFiltering()) {\n this.preventFocus = true;\n }\n _super.prototype.dropDownClick.call(this, e);\n };\n ComboBox.prototype.customValue = function (e) {\n var _this = this;\n var value = this.getValueByText(this.inputElement.value);\n if (!this.allowCustom && this.inputElement.value !== '') {\n var previousValue = this.previousValue;\n var currentValue = this.value;\n value = this.allowObjectBinding ? this.getDataByValue(value) : value;\n this.setProperties({ value: value });\n if (isNullOrUndefined(this.value)) {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n }\n var newValue = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n if (this.autofill && ((!this.allowObjectBinding && previousValue === this.value) || (this.allowObjectBinding && previousValue && this.isObjectInArray(previousValue, [this.value]))) && ((!this.allowObjectBinding && currentValue !== this.value) || (this.allowObjectBinding && currentValue && !this.isObjectInArray(currentValue, [this.value])))) {\n this.onChangeEvent(null);\n }\n }\n else if (this.inputElement.value.trim() !== '') {\n var previousValue_1 = this.value;\n if (isNullOrUndefined(value)) {\n var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n // eslint-disable-next-line max-len\n var eventArgs = { text: value_1, item: {} };\n this.isObjectCustomValue = true;\n if (!this.initial) {\n this.trigger('customValueSpecifier', eventArgs, function (eventArgs) {\n _this.updateCustomValueCallback(value_1, eventArgs, previousValue_1, e);\n });\n }\n else {\n this.updateCustomValueCallback(value_1, eventArgs, previousValue_1);\n }\n }\n else {\n this.isSelectCustom = false;\n value = this.allowObjectBinding ? this.getDataByValue(value) : value;\n this.setProperties({ value: value });\n if ((!this.allowObjectBinding && previousValue_1 !== this.value) || (this.allowObjectBinding && previousValue_1 && this.value && !this.isObjectInArray(previousValue_1, [this.value]))) {\n this.onChangeEvent(e);\n }\n }\n }\n else if (this.allowCustom) {\n this.isSelectCustom = true;\n }\n };\n ComboBox.prototype.updateCustomValueCallback = function (value, eventArgs, previousValue, e) {\n var _this = this;\n var fields = this.fields;\n var item = eventArgs.item;\n var dataItem = {};\n if (item && getValue(fields.text, item) && getValue(fields.value, item)) {\n dataItem = item;\n }\n else {\n setValue(fields.text, value, dataItem);\n setValue(fields.value, value, dataItem);\n }\n this.itemData = dataItem;\n var emptyObject = {};\n if (this.allowObjectBinding) {\n var keys = this.listData && this.listData.length > 0 ? Object.keys(this.listData[0]) : Object.keys(this.itemData);\n if ((!(this.listData && this.listData.length > 0)) && (this.getModuleName() === 'autocomplete' || (this.getModuleName() === 'combobox' && this.allowFiltering))) {\n keys = this.firstItem ? Object.keys(this.firstItem) : Object.keys(this.itemData);\n }\n // Create an empty object with predefined keys\n keys.forEach(function (key) {\n emptyObject[key] = ((key === fields.value) || (key === fields.text)) ? getValue(fields.value, _this.itemData) : null;\n });\n }\n var changeData = {\n text: getValue(fields.text, this.itemData),\n value: this.allowObjectBinding ? emptyObject : getValue(fields.value, this.itemData),\n index: null\n };\n this.setProperties(changeData, true);\n this.setSelection(null, null);\n this.isSelectCustom = true;\n this.isObjectCustomValue = false;\n if ((!this.allowObjectBinding && (previousValue !== this.value)) || (this.allowObjectBinding && ((previousValue == null && this.value !== null) || (previousValue && !this.isObjectInArray(previousValue, [this.value]))))) {\n this.onChangeEvent(e, true);\n }\n };\n /**\n * Dynamically change the value of properties.\n *\n * @param {ComboBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {ComboBoxModel} oldProp - Returns the previous property value of the component.\n * @private\n * @returns {void}\n */\n ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.getModuleName() === 'combobox') {\n this.checkData(newProp);\n this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp, oldProp);\n }\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n if (this.readonly) {\n EventHandler.remove(this.inputElement, 'input', this.onInput);\n EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n }\n else {\n EventHandler.add(this.inputElement, 'input', this.onInput, this);\n EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n }\n this.setReadOnly();\n break;\n case 'allowFiltering':\n this.setSearchBox();\n if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n _super.prototype.renderList.call(this);\n }\n break;\n case 'allowCustom':\n break;\n default: {\n // eslint-disable-next-line max-len\n var comboProps = this.getPropObject(prop, newProp, oldProp);\n _super.prototype.onPropertyChanged.call(this, comboProps.newProperty, comboProps.oldProperty);\n if (this.isFiltering() && prop === 'dataSource' && isNullOrUndefined(this.list) && this.itemTemplate &&\n this.getModuleName() === 'combobox') {\n _super.prototype.renderList.call(this);\n }\n break;\n }\n }\n }\n };\n /**\n * To initialize the control rendering.\n *\n * @private\n * @returns {void}\n */\n ComboBox.prototype.render = function () {\n _super.prototype.render.call(this);\n this.setSearchBox();\n this.renderComplete();\n };\n /**\n * Return the module name of this component.\n *\n * @private\n * @returns {string} Return the module name of this component.\n */\n ComboBox.prototype.getModuleName = function () {\n return 'combobox';\n };\n /**\n * Adds a new item to the combobox popup list. By default, new item appends to the list as the last item,\n * but you can insert based on the index parameter.\n *\n * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n * @returns {void}\n\n */\n ComboBox.prototype.addItem = function (items, itemIndex) {\n _super.prototype.addItem.call(this, items, itemIndex);\n };\n /**\n * To filter the data from given data source by using query\n *\n * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n * @param {Query} query - Specify the query to filter the data.\n * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n * @returns {void}\n\n */\n ComboBox.prototype.filter = function (dataSource, query, fields) {\n _super.prototype.filter.call(this, dataSource, query, fields);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup that displays the list of items.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.showPopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n _super.prototype.showPopup.call(this, e);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Hides the popup if it is in open state.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.hidePopup = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n var inputValue = this.inputElement && this.inputElement.value === '' ? null\n : this.inputElement && this.inputElement.value;\n if (!isNullOrUndefined(this.listData)) {\n var isEscape = this.isEscapeKey;\n if (this.isEscapeKey) {\n Input.setValue(this.typedString, this.inputElement, this.floatLabelType, this.showClearButton);\n this.isEscapeKey = false;\n }\n if (this.autofill) {\n this.removeFillSelection();\n }\n var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n var selected = !isNullOrUndefined(this.list) ? this.list.querySelector('.' + dropDownListClasses.selected) : null;\n if (this.inputElement && dataItem.text === this.inputElement.value && !isNullOrUndefined(selected)) {\n if (this.isSelected) {\n this.onChangeEvent(e);\n this.isSelectCustom = false;\n }\n _super.prototype.hidePopup.call(this, e);\n return;\n }\n if (this.getModuleName() === 'combobox' && this.inputElement.value.trim() !== '') {\n var dataSource = this.sortedData;\n var type = this.typeOfData(dataSource).typeof;\n var searchItem = Search(this.inputElement.value, this.liCollections, 'Equal', true, dataSource, this.fields, type);\n this.selectedLI = searchItem.item;\n if (isNullOrUndefined(searchItem.index)) {\n searchItem.index = Search(this.inputElement.value, this.liCollections, 'StartsWith', true, dataSource, this.fields, type).index;\n }\n this.activeIndex = searchItem.index;\n if (!isNullOrUndefined(this.selectedLI)) {\n this.updateSelectedItem(this.selectedLI, null, true);\n }\n else if (isEscape) {\n this.isSelectCustom = true;\n this.removeSelection();\n }\n }\n if (!this.isEscapeKey && this.isTyped && !this.isInteracted) {\n this.customValue(e);\n }\n }\n var value = this.allowObjectBinding && !isNullOrUndefined(this.value) ? getValue((this.fields.value) ? this.fields.value : '', this.value) : this.value;\n if (isNullOrUndefined(this.listData) && this.allowCustom && !isNullOrUndefined(inputValue) && inputValue !== value) {\n this.customValue();\n }\n _super.prototype.hidePopup.call(this, e);\n };\n /**\n * Sets the focus to the component for interaction.\n *\n * @returns {void}\n */\n ComboBox.prototype.focusIn = function () {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice && !this.isFiltering()) {\n this.preventFocus = true;\n }\n _super.prototype.focusIn.call(this);\n };\n /**\n * Allows you to clear the selected values from the component.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.clear = function () {\n this.value = null;\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Moves the focus from the component if the component is already focused.\n *\n * @returns {void}\n\n */\n ComboBox.prototype.focusOut = function (e) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n _super.prototype.focusOut.call(this, e);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets all the list items bound on this component.\n *\n * @returns {Element[]}\n\n */\n ComboBox.prototype.getItems = function () {\n return _super.prototype.getItems.call(this);\n };\n /**\n * Gets the data Object that matches the given value.\n *\n * @param { string | number } value - Specifies the value of the list item.\n * @returns {Object}\n\n */\n ComboBox.prototype.getDataByValue = function (value) {\n return _super.prototype.getDataByValue.call(this, value);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n ComboBox.prototype.renderHightSearch = function () {\n // update high light search\n };\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"autofill\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"allowCustom\", void 0);\n __decorate([\n Property({})\n ], ComboBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"allowFiltering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"query\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"index\", void 0);\n __decorate([\n Property(true)\n ], ComboBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"enableRtl\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"customValueSpecifier\", void 0);\n __decorate([\n Event()\n ], ComboBox.prototype, \"filtering\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"valueTemplate\", void 0);\n __decorate([\n Property('Never')\n ], ComboBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"filterBarPlaceholder\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"headerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"footerTemplate\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('100%')\n ], ComboBox.prototype, \"width\", void 0);\n __decorate([\n Property('300px')\n ], ComboBox.prototype, \"popupHeight\", void 0);\n __decorate([\n Property('100%')\n ], ComboBox.prototype, \"popupWidth\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"text\", void 0);\n __decorate([\n Property(null)\n ], ComboBox.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], ComboBox.prototype, \"allowObjectBinding\", void 0);\n ComboBox = __decorate([\n NotifyPropertyChanges\n ], ComboBox);\n return ComboBox;\n}(DropDownList));\nexport { ComboBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \nimport { Event, remove, addClass, removeClass, detach, getValue, setValue } from '@syncfusion/ej2-base';\nimport { EventHandler, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { attributes, getUniqueID, getInstance, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { getModel, Item } from './../common/common';\nimport { DropDownButton } from '../drop-down-button/drop-down-button';\nvar RTL = 'e-rtl';\nvar TAGNAME = 'EJS-SPLITBUTTON';\n/**\n * SplitButton component has primary and secondary button. Primary button is used to select\n * default action and secondary button is used to toggle contextual overlays for displaying list of\n * action items. It can contain both text and images.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar SplitButton = /** @class */ (function (_super) {\n __extends(SplitButton, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {SplitButtonModel} options - Specifies the splitbutton model\n * @param {string|HTMLButtonElement} element - Specifies the element\n * @hidden\n */\n function SplitButton(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize Angular support.\n *\n * @private\n * @returns {void}\n */\n SplitButton.prototype.preRender = function () {\n var ele = this.element;\n if (ele.tagName === TAGNAME) {\n var ejInstance = getValue('ej2_instances', ele);\n var btn = this.createElement('button', { attrs: { 'type': 'button' } });\n var wrapper = this.createElement(TAGNAME, { className: 'e-' + this.getModuleName() + '-wrapper' });\n for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n btn.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n }\n ele.parentNode.insertBefore(wrapper, ele);\n detach(ele);\n ele = btn;\n wrapper.appendChild(ele);\n setValue('ej2_instances', ejInstance, ele);\n this.wrapper = wrapper;\n this.element = ele;\n }\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n /**\n * Initialize the Component rendering.\n *\n * @returns {void}\n * @private\n */\n SplitButton.prototype.render = function () {\n this.initWrapper();\n this.createPrimaryButton();\n this.renderControl();\n };\n SplitButton.prototype.renderControl = function () {\n this.createSecondaryButton();\n this.setActiveElem([this.element, this.secondaryBtnObj.element]);\n this.setAria();\n this.wireEvents();\n this.renderComplete();\n };\n /**\n * Adds a new item to the menu. By default, new item appends to the list as the last item,\n * but you can insert based on the text parameter.\n *\n * @param { ItemModel[] } items - Specifies an array of JSON data.\n * @param { string } text - Specifies the text to insert the newly added item in the menu.\n * @returns {void}.\n */\n SplitButton.prototype.addItems = function (items, text) {\n _super.prototype.addItems.call(this, items, text);\n this.secondaryBtnObj.items = this.items;\n };\n /**\n * Removes the items from the menu.\n *\n * @param { string[] } items - Specifies an array of string to remove the items.\n * @param { string } isUniqueId - Set `true` if specified items is a collection of unique id.\n * @returns {void}.\n */\n SplitButton.prototype.removeItems = function (items, isUniqueId) {\n _super.prototype.removeItems.call(this, items, isUniqueId);\n this.secondaryBtnObj.items = this.items;\n };\n SplitButton.prototype.initWrapper = function () {\n if (!this.wrapper) {\n this.wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(this.wrapper, this.element);\n }\n this.element.classList.remove('e-' + this.getModuleName());\n if (this.enableRtl) {\n this.wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([this.wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n };\n SplitButton.prototype.createPrimaryButton = function () {\n var btnModel = {\n cssClass: this.cssClass,\n enableRtl: this.enableRtl,\n iconCss: this.iconCss,\n iconPosition: this.iconPosition,\n content: this.content,\n disabled: this.disabled\n };\n this.primaryBtnObj = new Button(btnModel);\n this.primaryBtnObj.createElement = this.createElement;\n this.primaryBtnObj.appendTo(this.element);\n this.element.classList.add('e-' + this.getModuleName());\n this.element.type = 'button';\n this.wrapper.appendChild(this.element);\n };\n SplitButton.prototype.createSecondaryButton = function () {\n var _this = this;\n var btnElem = this.createElement('button', {\n className: 'e-icon-btn',\n attrs: { 'tabindex': '-1' },\n id: this.element.id + '_dropdownbtn'\n });\n this.wrapper.appendChild(btnElem);\n var dropDownBtnModel = {\n cssClass: this.cssClass,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n items: this.items,\n target: this.target,\n createPopupOnClick: this.createPopupOnClick\n };\n dropDownBtnModel.beforeItemRender = function (args) {\n if (_this.createPopupOnClick) {\n _this.secondaryBtnObj.dropDown.relateTo = _this.wrapper;\n _this.dropDown = _this.secondaryBtnObj.dropDown;\n }\n _this.trigger('beforeItemRender', args);\n };\n dropDownBtnModel.open = function (args) {\n _this.trigger('open', args);\n };\n dropDownBtnModel.close = function (args) {\n _this.trigger('close', args);\n };\n dropDownBtnModel.select = function (args) {\n _this.trigger('select', args);\n };\n dropDownBtnModel.beforeOpen = function (args) {\n if (_this.createPopupOnClick && _this.items.length === 0) {\n _this.secondaryBtnObj.dropDown.relateTo = _this.wrapper;\n _this.dropDown = _this.secondaryBtnObj.dropDown;\n }\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observedArgs) {\n callBackPromise.resolve(observedArgs);\n });\n return callBackPromise;\n };\n dropDownBtnModel.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeClose', args, function (observedArgs) {\n callBackPromise.resolve(observedArgs);\n });\n return callBackPromise;\n };\n this.secondaryBtnObj = new DropDownButton(dropDownBtnModel);\n this.secondaryBtnObj.createElement = this.createElement;\n this.secondaryBtnObj.appendTo(btnElem);\n if (!this.createPopupOnClick) {\n this.secondaryBtnObj.dropDown.relateTo = this.wrapper;\n this.dropDown = this.secondaryBtnObj.dropDown;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.isPopupCreated = this.secondaryBtnObj.isPopupCreated;\n this.secondaryBtnObj.activeElem = [this.element, this.secondaryBtnObj.element];\n this.secondaryBtnObj.element.querySelector('.e-btn-icon').classList.remove('e-icon-right');\n if (this.disabled) {\n this.wrapper.classList.add('e-splitbtn-disabled');\n }\n };\n SplitButton.prototype.setAria = function () {\n attributes(this.element, {\n 'aria-expanded': 'false', 'aria-haspopup': 'true',\n 'aria-label': this.element.textContent ? this.element.textContent + ' splitbutton' : 'splitbutton', 'aria-owns': this.element.id + '_dropdownbtn-popup'\n });\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n SplitButton.prototype.getModuleName = function () {\n return 'split-btn';\n };\n /**\n * To open/close SplitButton popup based on current state of the SplitButton.\n *\n * @returns {void}\n */\n SplitButton.prototype.toggle = function () {\n this.secondaryBtnObj.toggle();\n };\n SplitButton.prototype.destroy = function () {\n var _this = this;\n var classList = [RTL];\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n if (this.element) {\n var element = document.getElementById(this.element.id);\n if (element && element.parentElement === this.wrapper) {\n if (this.wrapper.tagName === TAGNAME) {\n this.wrapper.innerHTML = '';\n removeClass([this.wrapper], ['e-rtl', 'e-' + this.getModuleName() + '-wrapper']);\n removeClass([this.wrapper], this.cssClass.split(' '));\n }\n else {\n removeClass([this.element], classList);\n ['aria-label', 'aria-haspopup', 'aria-expanded', 'aria-owns', 'type'].forEach(function (key) {\n _this.element.removeAttribute(key);\n });\n this.wrapper.parentNode.insertBefore(this.element, this.wrapper);\n remove(this.wrapper);\n }\n this.unWireEvents();\n }\n }\n this.primaryBtnObj.destroy();\n this.secondaryBtnObj.destroy();\n _super.prototype.destroy.call(this);\n if (this.element && !this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.refreshing && this.isAngular) {\n this.element = this.wrapper;\n ['e-control', 'e-split-btn', 'e-lib'].forEach(function (key) {\n _this.element.classList.add(key);\n });\n setValue('ej2_instances', [this], this.element);\n }\n this.wrapper = null;\n };\n SplitButton.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'click', this.primaryBtnClickHandler, this);\n new KeyboardEvents(this.element, {\n keyAction: this.btnKeyBoardHandler.bind(this),\n keyConfigs: {\n altdownarrow: 'alt+downarrow',\n enter: 'enter'\n }\n });\n };\n SplitButton.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'click', this.primaryBtnClickHandler);\n getInstance(this.element, KeyboardEvents).destroy();\n };\n SplitButton.prototype.primaryBtnClickHandler = function () {\n this.trigger('click', { element: this.element });\n };\n SplitButton.prototype.btnKeyBoardHandler = function (e) {\n switch (e.action) {\n case 'altdownarrow':\n this.clickHandler(e);\n break;\n case 'enter':\n this.clickHandler(e);\n if (this.getPopUpElement() && !this.getPopUpElement().classList.contains('e-popup-close')) {\n this.element.classList.remove('e-active');\n this.secondaryBtnObj.element.classList.add('e-active');\n }\n else {\n this.secondaryBtnObj.element.classList.remove('e-active');\n }\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {SplitButtonModel} newProp - Specifies new properties\n * @param {SplitButtonModel} oldProp - Specifies old properties\n * @returns {void}\n */\n SplitButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n var model = ['content', 'iconCss', 'iconPosition', 'cssClass', 'disabled', 'enableRtl'];\n this.primaryBtnObj.setProperties(getModel(newProp, model));\n model = ['beforeOpen', 'beforeItemRender', 'select', 'open',\n 'close', 'cssClass', 'disabled', 'enableRtl', 'createPopupOnClick'];\n if (Object.keys(newProp).indexOf('items') > -1) {\n this.secondaryBtnObj.items = newProp.items;\n this.secondaryBtnObj.dataBind();\n }\n this.secondaryBtnObj.setProperties(getModel(newProp, model));\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.wrapper], oldProp.cssClass.split(' '));\n }\n addClass([this.wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n break;\n case 'enableRtl':\n if (newProp.enableRtl) {\n addClass([this.wrapper], RTL);\n }\n else {\n removeClass([this.wrapper], RTL);\n }\n break;\n case 'disabled':\n if (newProp.disabled) {\n addClass([this.wrapper], 'e-splitbtn-disabled');\n }\n else {\n removeClass([this.wrapper], 'e-splitbtn-disabled');\n }\n }\n }\n };\n /**\n * Sets the focus to SplitButton\n * its native method\n *\n * @public\n * @returns {void}\n */\n SplitButton.prototype.focusIn = function () {\n this.element.focus();\n };\n __decorate([\n Property('')\n ], SplitButton.prototype, \"content\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"iconCss\", void 0);\n __decorate([\n Property('Left')\n ], SplitButton.prototype, \"iconPosition\", void 0);\n __decorate([\n Property(false)\n ], SplitButton.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Collection([], Item)\n ], SplitButton.prototype, \"items\", void 0);\n __decorate([\n Property('')\n ], SplitButton.prototype, \"target\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], SplitButton.prototype, \"created\", void 0);\n SplitButton = __decorate([\n NotifyPropertyChanges\n ], SplitButton);\n return SplitButton;\n}(DropDownButton));\nexport { SplitButton };\n/**\n * Deferred is used to handle asynchronous operation.\n */\nvar Deferred = /** @class */ (function () {\n function Deferred() {\n var _this = this;\n /**\n * Promise is an object that represents a value that may not be available yet, but will be resolved at some point in the future.\n */\n this.promise = new Promise(function (resolve, reject) {\n _this.resolve = resolve;\n _this.reject = reject;\n });\n /**\n * Defines the callback function triggers when the Deferred object is rejected.\n */\n this.catch = this.promise.catch.bind(this.promise);\n /**\n * Defines the callback function triggers when the Deferred object is resolved.\n */\n this.then = this.promise.then.bind(this.promise);\n }\n return Deferred;\n}());\nexport { Deferred };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event, append, compile } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation, animationMode } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit, select, selectAll } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit, destroy as collisionDestroy } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar POPUP_LIB = 'e-lib';\nvar HIDE_POPUP = 'e-hidden';\nvar POPUP_CONTAINER = 'e-tooltip-popup-container';\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n ], Animation.prototype, \"open\", void 0);\n __decorate([\n Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n ], Animation.prototype, \"close\", void 0);\n return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n *
      Show Tooltip
      \n * ```\n * ```typescript\n * \n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the Tooltip Component\n *\n * @param {TooltipModel} options - specifies the options for the constructor\n * @param {string| HTMLElement} element - specifies the element for the constructor\n *\n */\n function Tooltip(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.mouseMoveEvent = null;\n _this.mouseMoveTarget = null;\n _this.containerElement = null;\n _this.isBodyContainer = true;\n return _this;\n }\n Tooltip.prototype.initialize = function () {\n this.formatPosition();\n addClass([this.element], ROOT);\n };\n Tooltip.prototype.formatPosition = function () {\n var _a, _b;\n if (!this.position)\n return;\n if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n }\n else {\n _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n }\n };\n Tooltip.prototype.renderArrow = function () {\n this.setTipClass(this.position);\n var tip = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n this.tooltipEle.appendChild(tip);\n };\n Tooltip.prototype.setTipClass = function (position) {\n if (position.indexOf('Right') === 0) {\n this.tipClass = TIP_LEFT;\n }\n else if (position.indexOf('Bottom') === 0) {\n this.tipClass = TIP_TOP;\n }\n else if (position.indexOf('Left') === 0) {\n this.tipClass = TIP_RIGHT;\n }\n else {\n this.tipClass = TIP_BOTTOM;\n }\n };\n Tooltip.prototype.renderPopup = function (target) {\n var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n this.tooltipEle.classList.remove(POPUP_LIB);\n this.popupObj = new Popup(this.tooltipEle, {\n height: this.height,\n width: this.width,\n position: { X: elePos.left, Y: elePos.top },\n enableRtl: this.enableRtl,\n open: this.openPopupHandler.bind(this),\n close: this.closePopupHandler.bind(this)\n });\n };\n Tooltip.prototype.getScalingFactor = function (target) {\n if (!target) {\n return { x: 1, y: 1 };\n }\n var scalingFactors = { x: 1, y: 1 };\n var elementsWithTransform = target.closest('[style*=\"transform: scale\"]');\n if (elementsWithTransform && elementsWithTransform !== this.tooltipEle && elementsWithTransform.contains(this.tooltipEle)) {\n var computedStyle = window.getComputedStyle(elementsWithTransform);\n var transformValue = computedStyle.getPropertyValue('transform');\n var matrixValues = transformValue.match(/matrix\\(([^)]+)\\)/)[1].split(',').map(parseFloat);\n scalingFactors.x = matrixValues[0];\n scalingFactors.y = matrixValues[3];\n }\n return scalingFactors;\n };\n Tooltip.prototype.getTooltipPosition = function (target) {\n this.tooltipEle.style.display = 'block';\n var parentWithZoomStyle = this.element.closest('[style*=\"zoom\"]');\n if (parentWithZoomStyle) {\n if (!parentWithZoomStyle.contains(this.tooltipEle)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.tooltipEle.style.zoom = getComputedStyle(parentWithZoomStyle).zoom;\n }\n }\n var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY, !this.isBodyContainer, this.isBodyContainer ? null : this.containerElement.getBoundingClientRect());\n var scalingFactors = this.getScalingFactor(target);\n var offsetPos = this.calculateTooltipOffset(this.position, scalingFactors.x, scalingFactors.y);\n var collisionPosition = this.calculateElementPosition(pos, offsetPos);\n var collisionLeft = collisionPosition[0];\n var collisionTop = collisionPosition[1];\n var elePos = this.collisionFlipFit(target, collisionLeft, collisionTop);\n elePos.left = elePos.left / scalingFactors.x;\n elePos.top = elePos.top / scalingFactors.y;\n this.tooltipEle.style.display = '';\n return elePos;\n };\n Tooltip.prototype.windowResize = function () {\n this.reposition(this.findTarget());\n };\n Tooltip.prototype.reposition = function (target) {\n if (this.popupObj && target) {\n var elePos = this.getTooltipPosition(target);\n this.popupObj.position = { X: elePos.left, Y: elePos.top };\n this.popupObj.dataBind();\n }\n };\n Tooltip.prototype.openPopupHandler = function () {\n if (!this.mouseTrail && this.needTemplateReposition()) {\n this.reposition(this.findTarget());\n }\n this.trigger('afterOpen', this.tooltipEventArgs);\n this.tooltipEventArgs = null;\n };\n Tooltip.prototype.closePopupHandler = function () {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact && !(this.opensOn === 'Click' || typeof (this.content) === 'function')) {\n this.clearTemplate(['content']);\n }\n this.clear();\n var tooltipAfterCloseEventArgs = {\n type: this.tooltipEventArgs.event ? this.tooltipEventArgs.event.type : null, cancel: false, target: this.tooltipEventArgs.target, event: this.tooltipEventArgs.event ? this.tooltipEventArgs.event : null,\n element: this.tooltipEle, isInteracted: !isNullOrUndefined(this.tooltipEventArgs.event)\n };\n this.trigger('afterClose', tooltipAfterCloseEventArgs);\n tooltipAfterCloseEventArgs = null;\n };\n Tooltip.prototype.calculateTooltipOffset = function (position, xScalingFactor, yScalingFactor) {\n if (xScalingFactor === void 0) { xScalingFactor = 1; }\n if (yScalingFactor === void 0) { yScalingFactor = 1; }\n var pos = { top: 0, left: 0 };\n var tipWidth;\n var tipHeight;\n var tooltipEleWidth;\n var tooltipEleHeight;\n var arrowEle;\n var tipAdjust;\n var tipHeightAdjust;\n var tipWidthAdjust;\n if (xScalingFactor !== 1 || yScalingFactor !== 1) {\n var tooltipEleRect = this.tooltipEle.getBoundingClientRect();\n var arrowEleRect = void 0;\n tooltipEleWidth = Math.round(tooltipEleRect.width);\n tooltipEleHeight = Math.round(tooltipEleRect.height);\n arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n if (arrowEle) {\n arrowEleRect = arrowEle.getBoundingClientRect();\n }\n tipWidth = arrowEle ? Math.round(arrowEleRect.width) : 0;\n tipHeight = arrowEle ? Math.round(arrowEleRect.height) : 0;\n tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (tooltipEleHeight - (this.tooltipEle.clientHeight * yScalingFactor));\n tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (tooltipEleWidth - (this.tooltipEle.clientWidth * xScalingFactor));\n }\n else {\n tooltipEleWidth = this.tooltipEle.offsetWidth;\n tooltipEleHeight = this.tooltipEle.offsetHeight;\n arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n }\n if (this.mouseTrail) {\n tipAdjust += MOUSE_TRAIL_GAP;\n }\n switch (position) {\n case 'RightTop':\n pos.left += tipWidth + tipAdjust;\n pos.top -= tooltipEleHeight - tipHeightAdjust;\n break;\n case 'RightCenter':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'RightBottom':\n pos.left += tipWidth + tipAdjust;\n pos.top -= (tipHeightAdjust);\n break;\n case 'BottomRight':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n case 'BottomCenter':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n case 'BottomLeft':\n pos.top += (tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'LeftBottom':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tipHeightAdjust);\n break;\n case 'LeftCenter':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight / 2);\n break;\n case 'LeftTop':\n pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n pos.top -= (tooltipEleHeight - tipHeightAdjust);\n break;\n case 'TopLeft':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth - tipWidthAdjust);\n break;\n case 'TopRight':\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tipWidthAdjust);\n break;\n default:\n pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n pos.left -= (tooltipEleWidth / 2);\n break;\n }\n pos.left += this.offsetX;\n pos.top += this.offsetY;\n return pos;\n };\n Tooltip.prototype.updateTipPosition = function (position) {\n var selEle = selectAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER, this.tooltipEle);\n var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n removeClass(selEle, removeList);\n this.setTipClass(position);\n addClass(selEle, this.tipClass);\n };\n Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n var arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n if (this.showTipPointer === false || arrowEle === null) {\n return;\n }\n this.updateTipPosition(position);\n var leftValue;\n var topValue;\n this.tooltipEle.style.display = 'block';\n var tooltipWidth = this.tooltipEle.clientWidth;\n var tooltipHeight = this.tooltipEle.clientHeight;\n var arrowInnerELe = select('.' + ARROW_TIP_INNER, this.tooltipEle);\n var tipWidth = arrowEle.offsetWidth;\n var tipHeight = arrowEle.offsetHeight;\n this.tooltipEle.style.display = '';\n if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n if (this.tipClass === TIP_BOTTOM) {\n topValue = '99.9%';\n // Arrow icon aligned -2px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n }\n else {\n topValue = -(tipHeight - 1) + 'px';\n // Arrow icon aligned -6px height from ArrowOuterTip div\n arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n }\n if (target) {\n var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n leftValue = POINTER_ADJUST + 'px';\n }\n else if ((tipPosExclude) && (this.tipPointerPosition === 'End' || this.tipPointerPosition === 'Start')) {\n leftValue = (this.tipPointerPosition === 'End') ? ((target.offsetWidth + ((this.tooltipEle.offsetWidth - target.offsetWidth) / 2)) - (tipWidth / 2)) - POINTER_ADJUST + 'px'\n : ((this.tooltipEle.offsetWidth - target.offsetWidth) / 2) - (tipWidth / 2) + POINTER_ADJUST + 'px';\n }\n else {\n leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n }\n }\n }\n else {\n if (this.tipClass === TIP_RIGHT) {\n leftValue = '99.9%';\n // Arrow icon aligned -2px left from ArrowOuterTip div\n arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n }\n else {\n leftValue = -(tipWidth - 1) + 'px';\n // Arrow icon aligned -2px from ArrowOuterTip width\n arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n }\n var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n }\n else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n topValue = POINTER_ADJUST + 'px';\n }\n else {\n topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n }\n }\n arrowEle.style.top = topValue;\n arrowEle.style.left = leftValue;\n };\n Tooltip.prototype.renderContent = function (target) {\n var _this = this;\n var tooltipContent = select('.' + CONTENT, this.tooltipEle);\n if (this.cssClass) {\n addClass([this.tooltipEle], this.cssClass.split(' '));\n }\n if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n target.setAttribute('data-content', target.getAttribute('title'));\n target.removeAttribute('title');\n }\n if (!isNullOrUndefined(this.content)) {\n tooltipContent.innerHTML = '';\n if (this.content instanceof HTMLElement) {\n tooltipContent.appendChild(this.content);\n }\n else if (typeof this.content === 'string') {\n if (this.isAngular) {\n this.setProperties({ content: SanitizeHtmlHelper.sanitize(this.content) }, true);\n }\n else {\n this.content = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.content) : this.content;\n }\n if (this.enableHtmlParse) {\n var tempFunction = compile(this.content);\n var tempArr = tempFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent, this.root);\n if (tempArr) {\n append(tempArr, tooltipContent);\n }\n }\n else {\n tooltipContent['textContent'] = this.content;\n }\n }\n else {\n var templateFunction = compile(this.content);\n var tempArr_1 = templateFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent);\n if (tempArr_1) {\n if (this.isAngular) {\n setTimeout(function () {\n append(tempArr_1, tooltipContent);\n _this.reposition(target);\n }, 0);\n }\n else {\n append(tempArr_1, tooltipContent);\n }\n }\n this.renderReactTemplates();\n }\n }\n else {\n if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n tooltipContent.innerHTML = target.getAttribute('data-content');\n }\n }\n };\n Tooltip.prototype.renderCloseIcon = function () {\n if (!this.isSticky) {\n var existingCloseIcon = this.tooltipEle.querySelector('.' + ICON + '.' + CLOSE);\n if (existingCloseIcon) {\n remove(existingCloseIcon);\n }\n return;\n }\n var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n this.tooltipEle.appendChild(tipClose);\n EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n };\n Tooltip.prototype.addDescribedBy = function (target, id) {\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n if (describedby.indexOf(id) < 0) {\n describedby.push(id);\n }\n attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n };\n Tooltip.prototype.removeDescribedBy = function (target) {\n var id = target.getAttribute('data-tooltip-id');\n var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n var index = describedby.indexOf(id);\n if (index !== -1) {\n describedby.splice(index, 1);\n }\n target.removeAttribute('data-tooltip-id');\n var orgdescribedby = describedby.join(' ').trim();\n if (orgdescribedby) {\n target.setAttribute('aria-describedby', orgdescribedby);\n }\n else {\n target.removeAttribute('aria-describedby');\n }\n };\n Tooltip.prototype.tapHoldHandler = function (evt) {\n clearTimeout(this.autoCloseTimer);\n this.targetHover(evt.originalEvent);\n };\n Tooltip.prototype.touchEndHandler = function () {\n var _this = this;\n if (this.isSticky) {\n return;\n }\n var close = function () {\n _this.close();\n };\n this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n };\n Tooltip.prototype.targetClick = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target)) {\n return;\n }\n if (target.getAttribute('data-tooltip-id') === null) {\n this.targetHover(e);\n }\n else if (!this.isSticky) {\n this.hideTooltip(this.animation.close, e, target);\n }\n };\n Tooltip.prototype.targetHover = function (e) {\n var target;\n if (this.target) {\n target = closest(e.target, this.target);\n }\n else {\n target = this.element;\n }\n if (isNullOrUndefined(target) || (target.getAttribute('data-tooltip-id') !== null && this.closeDelay === 0)) {\n return;\n }\n var targetList = [].slice.call(selectAll('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document));\n for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n var target_1 = targetList_1[_i];\n this.restoreElement(target_1);\n }\n this.showTooltip(target, this.animation.open, e);\n };\n Tooltip.prototype.mouseMoveBeforeOpen = function (e) {\n this.mouseMoveEvent = e;\n };\n Tooltip.prototype.mouseMoveBeforeRemove = function () {\n if (this.mouseMoveTarget) {\n EventHandler.remove(this.mouseMoveTarget, 'mousemove touchstart', this.mouseMoveBeforeOpen);\n }\n };\n Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n var _this = this;\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n if (this.openDelay && this.mouseTrail) {\n this.mouseMoveBeforeRemove();\n this.mouseMoveTarget = target;\n EventHandler.add(this.mouseMoveTarget, 'mousemove touchstart', this.mouseMoveBeforeOpen, this);\n }\n this.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n var observeCallback = function (beforeRenderArgs) {\n _this.beforeRenderCallback(beforeRenderArgs, target, e, showAnimation);\n };\n this.trigger('beforeRender', this.tooltipEventArgs, observeCallback.bind(this));\n };\n Tooltip.prototype.beforeRenderCallback = function (beforeRenderArgs, target, e, showAnimation) {\n if (beforeRenderArgs.cancel) {\n this.isHidden = true;\n this.clear();\n this.mouseMoveBeforeRemove();\n }\n else {\n this.isHidden = false;\n if (isNullOrUndefined(this.tooltipEle)) {\n this.ctrlId = this.element.getAttribute('id') ?\n getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n this.tooltipEle = this.createElement('div', {\n className: TOOLTIP_WRAP + ' ' + POPUP_ROOT + ' ' + POPUP_LIB, attrs: {\n role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n }, styles: 'width:' +\n formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n });\n this.tooltipBeforeRender(target, this);\n this.tooltipAfterRender(target, e, showAnimation, this);\n }\n else {\n if (target) {\n this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n this.addDescribedBy(target, this.ctrlId + '_content');\n this.renderContent(target);\n PopupAnimation.stop(this.tooltipEle);\n this.reposition(target);\n this.tooltipAfterRender(target, e, showAnimation, this);\n }\n }\n }\n };\n Tooltip.prototype.appendContainer = function (ctrlObj) {\n if (typeof this.container == 'string') {\n if (this.container === 'body') {\n this.containerElement = document.body;\n }\n else {\n this.isBodyContainer = false;\n this.containerElement = select(this.container, document);\n }\n }\n else if (this.container instanceof HTMLElement) {\n this.containerElement = this.container;\n this.isBodyContainer = this.containerElement.tagName === 'BODY';\n }\n if (!this.isBodyContainer) {\n addClass([this.containerElement], POPUP_CONTAINER);\n }\n this.containerElement.appendChild(ctrlObj.tooltipEle);\n };\n Tooltip.prototype.tooltipBeforeRender = function (target, ctrlObj) {\n if (target) {\n if (Browser.isDevice) {\n addClass([ctrlObj.tooltipEle], DEVICE);\n }\n if (ctrlObj.width !== 'auto') {\n ctrlObj.tooltipEle.style.maxWidth = formatUnit(ctrlObj.width);\n }\n ctrlObj.tooltipEle.appendChild(ctrlObj.createElement('div', { className: CONTENT }));\n this.appendContainer(ctrlObj);\n removeClass([ctrlObj.tooltipEle], HIDE_POPUP);\n ctrlObj.addDescribedBy(target, ctrlObj.ctrlId + '_content');\n ctrlObj.renderContent(target);\n addClass([ctrlObj.tooltipEle], POPUP_OPEN);\n if (ctrlObj.showTipPointer) {\n ctrlObj.renderArrow();\n }\n ctrlObj.renderCloseIcon();\n ctrlObj.renderPopup(target);\n ctrlObj.adjustArrow(target, ctrlObj.position, ctrlObj.tooltipPositionX, ctrlObj.tooltipPositionY);\n PopupAnimation.stop(ctrlObj.tooltipEle);\n ctrlObj.reposition(target);\n }\n };\n Tooltip.prototype.tooltipAfterRender = function (target, e, showAnimation, ctrlObj) {\n if (target) {\n removeClass([ctrlObj.tooltipEle], POPUP_OPEN);\n addClass([ctrlObj.tooltipEle], POPUP_CLOSE);\n ctrlObj.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: ctrlObj.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n if (ctrlObj.needTemplateReposition() && !ctrlObj.mouseTrail && (showAnimation.effect === 'None' || showAnimation.effect == 'FadeIn' ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this.isReact && typeof ctrlObj.content != 'string'))) {\n ctrlObj.tooltipEle.style.display = 'none';\n }\n var observeCallback = function (observedArgs) {\n ctrlObj.beforeOpenCallback(observedArgs, target, showAnimation, e);\n };\n ctrlObj.trigger('beforeOpen', ctrlObj.tooltipEventArgs, observeCallback.bind(ctrlObj));\n }\n };\n Tooltip.prototype.beforeOpenCallback = function (observedArgs, target, showAnimation, e) {\n var _this = this;\n if (observedArgs.cancel) {\n this.isHidden = true;\n this.clear();\n this.mouseMoveBeforeRemove();\n this.restoreElement(target);\n }\n else {\n var openAnimation_1 = {\n name: (showAnimation.effect === 'None' && animationMode === 'Enable') ? 'FadeIn' : this.animation.open.effect,\n duration: showAnimation.duration,\n delay: showAnimation.delay,\n timingFunction: 'easeOut'\n };\n if (showAnimation.effect === 'None') {\n openAnimation_1 = undefined;\n }\n if (this.openDelay > 0) {\n var show = function () {\n if (_this.mouseTrail) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', _this.onMouseMove, _this);\n }\n if (_this.popupObj) {\n _this.popupObj.show(openAnimation_1, target);\n if (_this.mouseMoveEvent && _this.mouseTrail) {\n _this.onMouseMove(_this.mouseMoveEvent);\n }\n }\n };\n this.showTimer = setTimeout(show, this.openDelay);\n }\n else {\n if (this.popupObj) {\n this.popupObj.show(openAnimation_1, target);\n }\n }\n }\n if (e) {\n this.wireMouseEvents(e, target);\n }\n };\n Tooltip.prototype.needTemplateReposition = function () {\n // eslint-disable-next-line\n var tooltip = this;\n return !isNullOrUndefined(tooltip.viewContainerRef)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n && typeof tooltip.viewContainerRef !== 'string' || this.isReact;\n };\n Tooltip.prototype.checkCollision = function (target, x, y) {\n var elePos = {\n left: x, top: y, position: this.position,\n horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n };\n var affectedPos = isCollide(this.tooltipEle, this.checkCollideTarget(), x, y);\n if (affectedPos.length > 0) {\n elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n this.tooltipPositionX;\n elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n this.tooltipPositionY;\n }\n return elePos;\n };\n Tooltip.prototype.calculateElementPosition = function (pos, offsetPos) {\n return [this.isBodyContainer ? pos.left + offsetPos.left :\n (pos.left - this.containerElement.getBoundingClientRect().left) + offsetPos.left + window.pageXOffset + this.containerElement.scrollLeft,\n this.isBodyContainer ? pos.top + offsetPos.top :\n (pos.top - this.containerElement.getBoundingClientRect().top) +\n offsetPos.top + window.pageYOffset + this.containerElement.scrollTop];\n };\n Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n var elePos = this.checkCollision(target, x, y);\n var newpos = elePos.position;\n if (this.tooltipPositionY !== elePos.vertical) {\n newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n }\n if (this.tooltipPositionX !== elePos.horizontal) {\n if (newpos.indexOf('Left') === 0) {\n elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Left');\n }\n if (newpos.indexOf('Right') === 0) {\n elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n newpos = (elePos.vertical + 'Right');\n }\n elePos.horizontal = this.tooltipPositionX;\n }\n this.tooltipEventArgs = {\n type: null, cancel: false, target: target, event: null,\n element: this.tooltipEle, collidedPosition: newpos\n };\n this.trigger('beforeCollision', this.tooltipEventArgs);\n if (this.tooltipEventArgs.cancel) {\n newpos = this.position;\n }\n else {\n var elePosVertical = elePos.vertical;\n var elePosHorizontal = elePos.horizontal;\n if (elePos.position !== newpos) {\n var pos = calculatePosition(target, elePosHorizontal, elePosVertical, !this.isBodyContainer, this.isBodyContainer ? null : this.containerElement.getBoundingClientRect());\n this.adjustArrow(target, newpos, elePosHorizontal, elePosVertical);\n var scalingFactors = this.getScalingFactor(target);\n var offsetPos = this.calculateTooltipOffset(newpos, scalingFactors.x, scalingFactors.y);\n offsetPos.top -= this.getOffSetPosition('TopBottom', newpos, this.offsetY);\n offsetPos.left -= this.getOffSetPosition('RightLeft', newpos, this.offsetX);\n elePos.position = newpos;\n var elePosition = this.calculateElementPosition(pos, offsetPos);\n elePos.left = elePosition[0];\n elePos.top = elePosition[1];\n }\n else {\n this.adjustArrow(target, newpos, elePosHorizontal, elePosVertical);\n }\n }\n var eleOffset = { left: elePos.left, top: elePos.top };\n var position = this.isBodyContainer ?\n fit(this.tooltipEle, this.checkCollideTarget(), { X: true, Y: this.windowCollision }, eleOffset) : eleOffset;\n this.tooltipEle.style.display = 'block';\n var arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n if (this.showTipPointer && arrowEle != null && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n var arrowleft = parseInt(arrowEle.style.left, 10) - (position.left - elePos.left);\n if (arrowleft < 0) {\n arrowleft = 0;\n }\n else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n }\n arrowEle.style.left = arrowleft.toString() + 'px';\n }\n this.tooltipEle.style.display = '';\n eleOffset.left = position.left;\n eleOffset.top = position.top;\n return eleOffset;\n };\n Tooltip.prototype.getOffSetPosition = function (positionString, newPos, offsetType) {\n return ((positionString.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n (positionString.indexOf(newPos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * offsetType) : 0;\n };\n Tooltip.prototype.checkCollideTarget = function () {\n return !this.windowCollision && this.target ? this.element : null;\n };\n Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n var _this = this;\n if (this.closeDelay > 0) {\n clearTimeout(this.hideTimer);\n clearTimeout(this.showTimer);\n var hide = function () {\n if (_this.closeDelay && _this.tooltipEle && _this.isTooltipOpen) {\n return;\n }\n _this.tooltipHide(hideAnimation, e, targetElement);\n };\n this.hideTimer = setTimeout(hide, this.closeDelay);\n }\n else {\n this.tooltipHide(hideAnimation, e, targetElement);\n }\n };\n Tooltip.prototype.tooltipHide = function (hideAnimation, e, targetElement) {\n var _this = this;\n var target;\n if (e) {\n target = this.target ? (targetElement || e.target) : this.element;\n }\n else {\n target = select('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document);\n }\n this.tooltipEventArgs = {\n type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n };\n // this line commented for close the tooltip popup element even the target element destroyed in a page.\n //if (isNullOrUndefined(target)) { return; }\n this.trigger('beforeClose', this.tooltipEventArgs, function (observedArgs) {\n if (!observedArgs.cancel) {\n _this.mouseMoveBeforeRemove();\n _this.popupHide(hideAnimation, target, e);\n }\n else {\n _this.isHidden = false;\n }\n });\n };\n Tooltip.prototype.popupHide = function (hideAnimation, target, e) {\n if (target && e) {\n this.restoreElement(target);\n }\n this.isHidden = true;\n var closeAnimation = {\n name: (hideAnimation.effect === 'None' && animationMode === 'Enable') ? 'FadeOut' : this.animation.close.effect,\n duration: hideAnimation.duration,\n delay: hideAnimation.delay,\n timingFunction: 'easeIn'\n };\n if (hideAnimation.effect === 'None') {\n closeAnimation = undefined;\n }\n if (this.popupObj) {\n this.popupObj.hide(closeAnimation);\n }\n };\n Tooltip.prototype.restoreElement = function (target) {\n this.unwireMouseEvents(target);\n if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n target.setAttribute('title', target.getAttribute('data-content'));\n target.removeAttribute('data-content');\n }\n this.removeDescribedBy(target);\n };\n Tooltip.prototype.clear = function () {\n var target = this.findTarget();\n if (target) {\n this.restoreElement(target);\n }\n if (this.tooltipEle) {\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n }\n if (this.isHidden) {\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n this.tooltipEle = null;\n this.popupObj = null;\n }\n };\n Tooltip.prototype.tooltipHover = function () {\n if (this.tooltipEle) {\n this.isTooltipOpen = true;\n }\n };\n Tooltip.prototype.tooltipMouseOut = function (e) {\n this.isTooltipOpen = false;\n this.hideTooltip(this.animation.close, e, this.findTarget());\n };\n Tooltip.prototype.onMouseOut = function (e) {\n var enteredElement = e.relatedTarget;\n // don't close the tooltip only if it is tooltip content element\n if (enteredElement && !this.mouseTrail) {\n var checkForTooltipElement = closest(enteredElement, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT);\n if (checkForTooltipElement) {\n EventHandler.add(checkForTooltipElement, 'mouseleave', this.tooltipElementMouseOut, this);\n }\n else {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n if (this.closeDelay === 0 && (this.animation.close.effect === 'None' || (this.isReact && typeof this.content != 'string'))) {\n this.clear();\n }\n }\n }\n else {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n this.clear();\n }\n if (this.popupObj && !this.popupObj.element.classList.contains(POPUP_OPEN)) {\n this.clear();\n }\n };\n Tooltip.prototype.tooltipElementMouseOut = function (e) {\n this.hideTooltip(this.animation.close, e, this.findTarget());\n EventHandler.remove(this.element, 'mouseleave', this.tooltipElementMouseOut);\n this.clear();\n };\n Tooltip.prototype.onStickyClose = function () {\n this.close();\n };\n Tooltip.prototype.onMouseMove = function (event) {\n var eventPageX = 0;\n var eventPageY = 0;\n if (event.type.indexOf('touch') > -1) {\n event.preventDefault();\n eventPageX = event.touches[0].pageX;\n eventPageY = event.touches[0].pageY;\n }\n else {\n eventPageX = event.pageX;\n eventPageY = event.pageY;\n }\n PopupAnimation.stop(this.tooltipEle);\n removeClass([this.tooltipEle], POPUP_CLOSE);\n addClass([this.tooltipEle], POPUP_OPEN);\n this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n var scalingFactors = this.getScalingFactor(event.target);\n var pos = this.calculateTooltipOffset(this.position, scalingFactors.x, scalingFactors.y);\n var x = eventPageX + pos.left + this.offsetX;\n var y = eventPageY + pos.top + this.offsetY;\n var elePos = this.checkCollision(event.target, x, y);\n if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n elePos.position = newpos;\n this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n var colpos = this.calculateTooltipOffset(elePos.position, scalingFactors.x, scalingFactors.y);\n elePos.left = eventPageX + colpos.left - this.offsetX;\n elePos.top = eventPageY + colpos.top - this.offsetY;\n }\n this.tooltipEle.style.left = elePos.left + 'px';\n this.tooltipEle.style.top = elePos.top + 'px';\n };\n Tooltip.prototype.keyDown = function (event) {\n if (this.tooltipEle && event.keyCode === 27) {\n this.close();\n }\n };\n Tooltip.prototype.touchEnd = function (e) {\n if (this.tooltipEle && closest(e.target, '.' + ROOT) === null && !this.isSticky) {\n this.close();\n }\n };\n Tooltip.prototype.scrollHandler = function (e) {\n if (this.tooltipEle && !this.isSticky) {\n if (!(closest(e.target, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT))\n && !this.isSticky) {\n this.close();\n }\n }\n };\n /**\n * Core method that initializes the control rendering.\n *\n * @private\n * @returns {void}\n */\n Tooltip.prototype.render = function () {\n this.initialize();\n this.wireEvents(this.opensOn);\n this.renderComplete();\n };\n /**\n * Initializes the values of private members.\n *\n * @private\n * @returns {void}\n */\n Tooltip.prototype.preRender = function () {\n this.tipClass = TIP_BOTTOM;\n this.tooltipPositionX = 'Center';\n this.tooltipPositionY = 'Top';\n this.isHidden = true;\n };\n /**\n * Binding events to the Tooltip element.\n *\n * @hidden\n * @param {string} trigger - specify the trigger string to the function\n * @returns {void}\n *\n */\n Tooltip.prototype.wireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n var opensOn = triggerList_1[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.wireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n this.touchModule = new Touch(this.element, {\n tapHoldThreshold: TAPHOLD_THRESHOLD,\n tapHold: this.tapHoldHandler.bind(this)\n });\n EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n }\n else {\n EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n }\n }\n }\n this.windowResizeBound = this.windowResize.bind(this);\n this.keyDownBound = this.keyDown.bind(this);\n this.touchEndBound = this.touchEnd.bind(this);\n this.scrollWheelBound = this.scrollHandler.bind(this);\n document.addEventListener('wheel', this.scrollWheelBound);\n document.addEventListener('scroll', this.scrollWheelBound);\n document.addEventListener('touchend', this.touchEndBound);\n document.addEventListener('keydown', this.keyDownBound);\n window.addEventListener('resize', this.windowResizeBound);\n };\n Tooltip.prototype.getTriggerList = function (trigger) {\n if (!trigger)\n return [];\n if (trigger === 'Auto') {\n trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n }\n return trigger.split(' ');\n };\n Tooltip.prototype.wireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(selectAll(this.target, this.element));\n this.targetsList = targetList;\n if (!isNullOrUndefined(this.targetsList) && this.targetsList.length > 0) {\n for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n var target = targetList_2[_i];\n EventHandler.add(target, 'focus', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focusin', this.targetHover, this);\n }\n }\n else {\n EventHandler.add(this.element, 'focusin', this.targetHover, this);\n }\n };\n Tooltip.prototype.wireMouseEvents = function (e, target) {\n if (this.tooltipEle) {\n if (!this.isSticky) {\n if (e.type === 'focus') {\n EventHandler.add(target, 'blur', this.onMouseOut, this);\n }\n if (e.type === 'focusin') {\n EventHandler.add(target, 'focusout', this.onMouseOut, this);\n }\n if (e.type === 'mouseover') {\n EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n }\n if (this.closeDelay) {\n EventHandler.add(this.tooltipEle, 'mouseenter', this.tooltipHover, this);\n EventHandler.add(this.tooltipEle, 'mouseleave', this.tooltipMouseOut, this);\n }\n }\n if (this.mouseTrail && this.openDelay === 0) {\n EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n }\n }\n };\n /**\n * Unbinding events from the element on widget destroy.\n *\n * @hidden\n *\n * @param {string} trigger - specify the trigger string to the function\n * @returns {void}\n *\n */\n Tooltip.prototype.unwireEvents = function (trigger) {\n var triggerList = this.getTriggerList(trigger);\n for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n var opensOn = triggerList_2[_i];\n if (opensOn === 'Custom') {\n return;\n }\n if (opensOn === 'Focus') {\n this.unwireFocusEvents();\n }\n if (opensOn === 'Click') {\n EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n }\n if (opensOn === 'Hover') {\n if (Browser.isDevice) {\n if (this.touchModule) {\n this.touchModule.destroy();\n }\n EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n }\n else {\n EventHandler.remove(this.element, 'mouseover', this.targetHover);\n }\n }\n }\n document.removeEventListener('touchend', this.touchEndBound);\n this.touchEndBound = null;\n document.removeEventListener('wheel', this.scrollWheelBound);\n document.removeEventListener('scroll', this.scrollWheelBound);\n this.scrollWheelBound = null;\n window.removeEventListener('resize', this.windowResizeBound);\n this.windowResizeBound = null;\n document.removeEventListener('keydown', this.keyDownBound);\n this.keyDownBound = null;\n };\n Tooltip.prototype.unwireFocusEvents = function () {\n if (!isNullOrUndefined(this.target)) {\n var targetList = [].slice.call(selectAll(this.target, this.element));\n if (!isNullOrUndefined(this.targetsList) && this.targetsList.length > 0) {\n for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n var target = targetList_3[_i];\n EventHandler.remove(target, 'focus', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focusin', this.targetHover);\n }\n }\n else {\n EventHandler.remove(this.element, 'focusin', this.targetHover);\n }\n };\n Tooltip.prototype.unwireMouseEvents = function (target) {\n if (!this.isSticky) {\n var triggerList = this.getTriggerList(this.opensOn);\n for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n var opensOn = triggerList_3[_i];\n if (opensOn === 'Focus') {\n EventHandler.remove(target, 'blur', this.onMouseOut);\n EventHandler.remove(target, 'focusout', this.onMouseOut);\n }\n if (opensOn === 'Hover' && !Browser.isDevice) {\n EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n }\n }\n if (this.closeDelay) {\n EventHandler.remove(target, 'mouseenter', this.tooltipHover);\n EventHandler.remove(target, 'mouseleave', this.tooltipMouseOut);\n }\n }\n if (this.mouseTrail) {\n EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n }\n };\n Tooltip.prototype.findTarget = function () {\n var target = select('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document);\n return target;\n };\n /**\n * Core method to return the component name.\n *\n * @private\n *\n * @returns {string} - this method returns module name.\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * Returns the properties to be maintained in the persisted state.\n *\n * @private\n *\n * @returns {string} - this method returns persisted data.\n */\n Tooltip.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Called internally, if any of the property value changed.\n *\n * @private\n *\n * @param {TooltipModel} newProp - this param gives new property values to the method\n * @param {TooltipModel} oldProp - this param gives old property values to the method\n * @returns {void}\n *\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n var targetElement = this.findTarget();\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.width = this.tooltipEle.style.maxWidth = formatUnit(newProp.width);\n this.reposition(targetElement);\n }\n break;\n case 'height':\n if (this.tooltipEle && targetElement) {\n this.tooltipEle.style.height = formatUnit(newProp.height);\n this.reposition(targetElement);\n }\n break;\n case 'content':\n if (this.tooltipEle) {\n this.renderContent();\n }\n break;\n case 'opensOn':\n this.unwireEvents(oldProp.opensOn);\n this.wireEvents(newProp.opensOn);\n break;\n case 'position':\n this.formatPosition();\n if (this.tooltipEle && targetElement) {\n var arrowInnerELe = select('.' + ARROW_TIP_INNER, this.tooltipEle);\n if (arrowInnerELe) {\n arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n }\n this.reposition(targetElement);\n }\n break;\n case 'tipPointerPosition':\n if (this.tooltipEle && targetElement) {\n this.reposition(targetElement);\n }\n break;\n case 'offsetX':\n if (this.tooltipEle) {\n var x = newProp.offsetX - oldProp.offsetX;\n this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n }\n break;\n case 'offsetY':\n if (this.tooltipEle) {\n var y = newProp.offsetY - oldProp.offsetY;\n this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n }\n break;\n case 'cssClass':\n if (this.tooltipEle) {\n if (oldProp.cssClass) {\n removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.tooltipEle], newProp.cssClass.split(' '));\n }\n }\n break;\n case 'enableRtl':\n if (this.tooltipEle) {\n if (this.enableRtl) {\n addClass([this.tooltipEle], RTL);\n }\n else {\n removeClass([this.tooltipEle], RTL);\n }\n }\n break;\n case 'isSticky':\n if (this.tooltipEle && targetElement) {\n this.renderCloseIcon();\n this.reposition(targetElement);\n }\n break;\n case 'container':\n if (!isNullOrUndefined(this.containerElement)) {\n removeClass([this.containerElement], POPUP_CONTAINER);\n }\n this.container = newProp.container;\n if (this.tooltipEle && targetElement) {\n this.appendContainer(this);\n this.reposition(targetElement);\n }\n }\n }\n };\n /**\n * It is used to show the Tooltip on the specified target with specific animation settings.\n *\n * @param {HTMLElement} element - Target element where the Tooltip is to be displayed. (It is an optional parameter)\n * @param {TooltipAnimationSettings} animation - Sets the specific animation, while showing the Tooltip on the screen. (It is an optional parameter)\n * @returns {void}\n */\n Tooltip.prototype.open = function (element, animation) {\n if (isNullOrUndefined(animation)) {\n animation = this.animation.open;\n }\n if (isNullOrUndefined(element)) {\n element = this.element;\n }\n if (element.style.display === 'none') {\n return;\n }\n this.showTooltip(element, animation);\n };\n /**\n * It is used to hide the Tooltip with specific animation effect.\n *\n * @param {TooltipAnimationSettings} animation - Sets the specific animation when hiding Tooltip from the screen. (It is an optional parameter)\n * @returns {void}\n */\n Tooltip.prototype.close = function (animation) {\n if (!animation) {\n animation = this.animation.close;\n }\n this.hideTooltip(animation);\n };\n /**\n * It is used to refresh the Tooltip content and its position.\n *\n * @param {HTMLElement} target - Target element where the Tooltip content or position needs to be refreshed.\n * @returns {void}\n */\n Tooltip.prototype.refresh = function (target) {\n if (this.tooltipEle) {\n this.renderContent(target);\n }\n if (this.popupObj && target) {\n this.reposition(target);\n }\n if (!isNullOrUndefined(this.targetsList) && !isNullOrUndefined(this.target)) {\n var target_2 = selectAll(this.target, this.element);\n if (target_2.length !== this.targetsList.length) {\n this.unwireEvents(this.opensOn);\n this.wireEvents(this.opensOn);\n }\n }\n };\n /**\n *\n * It is used to destroy the Tooltip component.\n *\n * @method destroy\n * @returns {void}\n * @memberof Tooltip\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.tooltipEle) {\n remove(this.tooltipEle);\n }\n if (this.popupObj) {\n this.popupObj.destroy();\n }\n collisionDestroy();\n removeClass([this.element], ROOT);\n this.unwireEvents(this.opensOn);\n this.unwireMouseEvents(this.element);\n this.tooltipEle = null;\n this.popupObj = null;\n var currentTarget = selectAll('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', this.element);\n for (var _i = 0, currentTarget_1 = currentTarget; _i < currentTarget_1.length; _i++) {\n var target = currentTarget_1[_i];\n this.restoreElement(target);\n }\n this.containerElement = null;\n this.tipClass = null;\n this.tooltipPositionX = null;\n this.tooltipPositionY = null;\n this.ctrlId = null;\n this.tooltipEventArgs = null;\n this.touchModule = null;\n this.mouseMoveEvent = null;\n this.mouseMoveTarget = null;\n this.containerElement = null;\n this.targetsList = null;\n };\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"width\", void 0);\n __decorate([\n Property('auto')\n ], Tooltip.prototype, \"height\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property('body')\n ], Tooltip.prototype, \"container\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"target\", void 0);\n __decorate([\n Property('TopCenter')\n ], Tooltip.prototype, \"position\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetX\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offsetY\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"showTipPointer\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableHtmlParse\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"windowCollision\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n __decorate([\n Property('Auto')\n ], Tooltip.prototype, \"opensOn\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"mouseTrail\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isSticky\", void 0);\n __decorate([\n Complex({}, Animation)\n ], Tooltip.prototype, \"animation\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"openDelay\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"closeDelay\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterOpen\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"afterClose\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"beforeCollision\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"destroyed\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n __extends(ColorRangeData, _super);\n function ColorRangeData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"end\", void 0);\n return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHorizantalColor: 'e-slider-horizantal-color',\n sliderVerticalColor: 'e-slider-vertical-color',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n *
      \n * ```\n * ```typescript\n * \n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.isDragComplete = false;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Slider.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n this.renderComplete();\n if (this.element.tagName === 'EJS-SLIDER') {\n if (this.getTheme(this.sliderContainer) === 'none') {\n setTimeout(function () {\n _this.refresh();\n }, 0);\n }\n }\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width) && !isNullOrUndefined(this.sliderContainer)) {\n if (typeof width === 'number') {\n this.sliderContainer.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.sliderContainer.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.add(classNames.sliderDisabled);\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.remove(classNames.sliderDisabled);\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n *\n * @returns {void}\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.setElementWidth(this.width);\n this.element.tabIndex = -1;\n this.getThemeInitialization();\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? (isNullOrUndefined(this.min) ? '0' : this.min.toString()) : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? (isNullOrUndefined(this.min) ? 0 : parseFloat(formatUnit(this.min.toString()))) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.getThemeInitialization = function () {\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n || this.getTheme(this.sliderContainer) === 'material-dark';\n this.isMaterial3 = this.getTheme(this.sliderContainer) === 'Material3'\n || this.getTheme(this.sliderContainer) === 'Material3-dark';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n this.isTailwind = this.getTheme(this.sliderContainer) === 'tailwind' || this.getTheme(this.sliderContainer) === 'tailwind-dark';\n this.isBootstrap5 = this.getTheme(this.sliderContainer) === 'bootstrap5';\n this.isFluent = this.getTheme(this.sliderContainer) === 'FluentUI';\n this.isFluent2 = this.getTheme(this.sliderContainer) === 'fluent2';\n this.isMaterialTooltip = (this.isMaterial || this.isMaterial3) && this.type !== 'Range' && this.tooltip.isVisible;\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': isNullOrUndefined(min) ? '0' : min.toString(), 'aria-valuemax': (isNullOrUndefined(max) ? '100' : max.toString())\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0', 'aria-label': 'slider'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0', 'aria-label': 'slider'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterialTooltip) {\n this.materialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.materialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n if (this.type !== 'Range') {\n this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.isMaterialTooltip) {\n this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.tooltipElement) {\n this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n if (e.propertyName !== 'transform') {\n this.handleStart();\n if (!this.enableAnimation) {\n this.getHandle().style.transition = 'none';\n }\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if ((this.isMaterial || this.isMaterial3) && this.tooltip.isVisible && this.type === 'Default') {\n this.tooltipElement.style.transition = this.transition.handle;\n }\n this.tooltipToggle(this.getHandle());\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n this.focusSliderElement();\n this.sliderBarClick(e);\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n this.firstHandle.classList.add(classNames.sliderTabHandle);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n this.secondHandle.classList.add(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n if (this.type === 'Default') {\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n addClass([this.sliderContainer], classNames.rtl);\n }\n else {\n removeClass([this.sliderContainer], classNames.rtl);\n }\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n this.setBarColor();\n };\n Slider.prototype.tooltipValue = function () {\n var _this = this;\n var text;\n var args = {\n value: this.value,\n text: ''\n };\n if (this.initialTooltip) {\n this.initialTooltip = false;\n this.setTooltipContent();\n args.text = text = (typeof (this.tooltipObj.content) === 'function' ? this.tooltipObj.content() : this.tooltipObj.content);\n this.trigger('tooltipChange', args, function (observedArgs) {\n _this.addTooltipClass(observedArgs.text);\n if (text !== observedArgs.text) {\n _this.customAriaText = observedArgs.text;\n if (_this.enableHtmlSanitizer) {\n observedArgs.text = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n observedArgs.text = observedArgs.text.toString();\n }\n var contentTemp = function () {\n return observedArgs.text;\n };\n _this.tooltipObj.content = initializeCSPTemplate(contentTemp);\n _this.setAriaAttrValue(_this.firstHandle);\n if (_this.type === 'Range') {\n _this.setAriaAttrValue(_this.secondHandle);\n }\n }\n });\n if (this.isMaterialTooltip) {\n this.setPreviousVal('change', this.value);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content = this.formatContent(this.tooltipFormatInfo, false);\n var contentTemp = function () {\n return content;\n };\n this.tooltipObj.content = initializeCSPTemplate(contentTemp);\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n if (this.isMaterialTooltip) {\n var count = content.toString().length;\n if (!this.tooltipElement) {\n var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n var cssClass = count > 4 ?\n { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n this.tooltipElement.classList.remove(cssClass.oldCss);\n if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n this.tooltipElement.classList.add(cssClass.newCss);\n this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n this.tooltipElement = args.element;\n if (this.tooltip.cssClass) {\n addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterialTooltip) {\n this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n this.setTooltipTransform();\n }\n };\n Slider.prototype.tooltipCollision = function (position) {\n if (this.isBootstrap || this.isBootstrap4 || ((this.isMaterial || this.isMaterial3) && !this.isMaterialTooltip)) {\n var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n switch (position) {\n case 'TopCenter':\n this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n break;\n case 'BottomCenter':\n this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n break;\n case 'LeftCenter':\n this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n break;\n case 'RightCenter':\n this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n break;\n }\n }\n };\n Slider.prototype.materialTooltipEventCallBack = function (event) {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterialTooltip) {\n if (!destroy) {\n EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n }\n else {\n EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n var transformProperties;\n if (this.tooltipElement) {\n var position = this.orientation === 'Horizontal' ?\n ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n }\n return transformProperties;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n this.refreshTooltip(this.firstHandle);\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n tooltipContentElement.classList.add(classNames.materialTooltipShow);\n this.firstHandle.style.cursor = 'default';\n this.tooltipElement.style.transition = this.scaleTransform;\n this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n this.materialHandle.style.transform = 'scale(0)';\n if (tooltipContentElement.innerText.length > 4) {\n this.tooltipElement.style.transform = 'scale(1)';\n }\n else {\n this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { if (_this.tooltipElement) {\n _this.tooltipElement.style.transition = _this.transition.handle;\n } }, 2500);\n }\n else {\n setTimeout(function () { if (_this.tooltipElement) {\n _this.tooltipElement.style.transition = 'none';\n } }, 2500);\n }\n }\n };\n Slider.prototype.closeMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n this.tooltipElement.style.transition = this.scaleTransform;\n tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n tooltipContentElement.classList.add(classNames.materialTooltipHide);\n this.firstHandle.style.cursor = '-webkit-grab';\n this.firstHandle.style.cursor = 'grab';\n if (this.materialHandle) {\n this.materialHandle.style.transform = 'scale(1)';\n }\n this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n this.setTooltipTransform();\n this.tooltipTarget = undefined;\n setTimeout(function () { if (_this.tooltipElement) {\n _this.tooltipElement.style.transition = 'none';\n } }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n if (this.isMaterialTooltip) {\n if (tooltipClass !== undefined) {\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n }\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length <= 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n this.tooltipCollidedPosition = args.collidedPosition;\n }\n if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n this.setTooltipTransform();\n }\n };\n Slider.prototype.setTooltipTransform = function () {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n if (isNullOrUndefined(this.tooltipElement)) {\n return;\n }\n if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n };\n Slider.prototype.renderTooltip = function () {\n this.tooltipObj = new Tooltip({\n showTipPointer: this.isBootstrap || this.isMaterial || this.isMaterial3 ||\n this.isBootstrap4 || this.isTailwind || this.isBootstrap5 || this.isFluent || this.isFluent2,\n cssClass: classNames.sliderTooltip,\n height: (this.isMaterial || this.isMaterial3) ? 30 : 'auto',\n animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n beforeClose: this.tooltipBeforeClose.bind(this),\n enableHtmlSanitizer: this.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.firstHandle);\n this.initializeTooltipProps();\n };\n Slider.prototype.initializeTooltipProps = function () {\n var tooltipShowOn = (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n this.tooltipObj.position = this.tooltipPlacement();\n this.tooltipCollision(this.tooltipObj.position);\n [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n if (!isNullOrUndefined(handle)) {\n handle.style.transition = 'none';\n }\n });\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.tooltipObj.animation.close.effect = 'None';\n this.tooltipObj.open(this.firstHandle);\n }\n };\n Slider.prototype.tooltipBeforeClose = function () {\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.firstBtn.querySelector('span').classList.add('e-icons');\n }\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.secondBtn.querySelector('span').classList.add('e-icons');\n }\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial || this.isMaterial3) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.step.toString()), true);\n }\n else {\n value = this.add(hVal, parseFloat(this.step.toString()), false);\n }\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.step.toString()), false);\n }\n else {\n value = this.add(hVal, parseFloat(this.step.toString()), true);\n }\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.focusHandle = function () {\n if (!this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.getHandle().classList.add(classNames.sliderTabHandle);\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n Slider.prototype.renderScale = function () {\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n if (this.ticks.largeStep > 0) {\n smallStep = this.ticks.largeStep;\n }\n else {\n smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)));\n }\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n if (orien === 'h') {\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n }\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n if (orien === 'h') {\n li.style.width = tickWidth + '%';\n }\n else {\n li.style.height = tickWidth + '%';\n }\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start, tickWidth);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n if (this.min > this.max) {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.ticksAlignment(orien, tickWidth);\n };\n Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n if (triggerEvent === void 0) { triggerEvent = true; }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n if (triggerEvent) {\n this.trigger('renderedTicks', eventArgs);\n }\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start, tickWidth) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start, span);\n }\n else {\n if (this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n }\n else {\n span.innerHTML = start.toString();\n }\n }\n };\n Slider.prototype.formatTicksValue = function (li, start, spanElement) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (spanElement) {\n if (_this.enableHtmlSanitizer) {\n spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n spanElement.innerHTML = observedArgs.text.toString();\n }\n }\n });\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n if (this.orientation === 'Vertical') {\n if (this.element.getBoundingClientRect().width <= 15) {\n this.sliderContainer.classList.add(classNames.sliderSmallSize);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n }\n else {\n if (this.element.getBoundingClientRect().height <= 15) {\n this.sliderContainer.classList.add(classNames.sliderSmallSize);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n }\n };\n Slider.prototype.tickValuePosition = function () {\n this.firstChild = this.element.querySelector('ul').children[0];\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var otherChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n if (!this.enableRtl) {\n if (element === this.firstHandle) {\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] });\n }\n else {\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] });\n }\n }\n else {\n if (element === this.firstHandle) {\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] });\n }\n else {\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] });\n }\n }\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.step.toString()), true);\n }\n else {\n value = this.add(hVal, parseFloat(this.step.toString()), false);\n }\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.step.toString()), false);\n }\n else {\n value = this.add(hVal, parseFloat(this.step.toString()), true);\n }\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false);\n }\n else {\n value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true);\n }\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true);\n }\n else {\n value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false);\n }\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min < this.max ? this.min.toString() : this.max.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.min < this.max ? this.max.toString() : this.min.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if ((this.isMaterial || this.isMaterial3) && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\n this.focusHandle();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n if (!this.tooltipElement.classList.contains(classNames.materialTooltipOpen)) {\n this.openMaterialTooltip();\n }\n else {\n this.refreshTooltip(this.firstHandle);\n }\n }\n else {\n if (!this.tooltipElement) {\n this.openTooltip(target);\n }\n else {\n this.refreshTooltip(target);\n }\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal' && !isNullOrUndefined(this.rangeBar)) {\n if (this.type === 'MinRange') {\n if (this.enableRtl) {\n this.rangeBar.style.right = '0px';\n }\n else {\n this.rangeBar.style.left = '0px';\n }\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n if (this.enableRtl) {\n this.rangeBar.style.right = this.handlePos1 + 'px';\n }\n else {\n this.rangeBar.style.left = this.handlePos1 + 'px';\n }\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else if (!isNullOrUndefined(this.rangeBar)) {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos1 + 'px' : '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.min > this.max ? this.element.clientHeight - this.handlePos1 + 'px' : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos2 + 'px' : this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.min > this.max ? this.handlePos1 - this.handlePos2 + 'px' : this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = (this.min < this.max ? fromMinPostion : fromMaxpostion) + 'px';\n this.limitBarFirst.style.height = (this.min < this.max ? (fromMaxpostion - fromMinPostion) : (fromMinPostion - fromMaxpostion)) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = (this.min < this.max ? toMinPostion : toMaxpostion) + 'px';\n this.limitBarSecond.style.height = (this.min < this.max ? (toMaxpostion - toMinPostion) : (toMinPostion - toMaxpostion)) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min < this.max ? this.min : this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.min < this.max ? this.max : this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n this.setBarColor();\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n if (isNullOrUndefined(this.activeHandle)) {\n this.activeHandle = this.type === 'Range' ? 2 : 1;\n }\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition(null);\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed', null);\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range' && !isNullOrUndefined(this.firstHandle) && !isNullOrUndefined(this.secondHandle)) {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n else if (this.isMaterialTooltip && this.tooltipElement) {\n this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n }\n };\n Slider.prototype.setHandlePosition = function (event) {\n var _this = this;\n var handle;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n if (this.isMaterialTooltip) {\n handle = [this.firstHandle, this.materialHandle];\n }\n else {\n handle = [this.getHandle()];\n }\n this.handleStart();\n handle.forEach(function (handle) {\n if (isNullOrUndefined(handle)) {\n return;\n }\n if (_this.orientation === 'Horizontal') {\n if (_this.enableRtl) {\n handle.style.right = pos + \"px\";\n }\n else {\n handle.style.left = pos + \"px\";\n }\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change', event);\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition(null);\n this.activeHandle = 2;\n this.setHandlePosition(null);\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName, e) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.initialTooltip = false;\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName, e) {\n var eventArgs;\n if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: (typeof (this.tooltipObj.content) === 'function' ? this.tooltipObj.content() : this.tooltipObj.content), isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.min < this.max && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.min > this.max && this.handlePos1 < this.handlePos2) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n /**\n * It is used to reposition slider.\n *\n * @returns {void}\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n if (!isNullOrUndefined(this.firstHandle)) {\n this.firstHandle.style.transition = 'none';\n }\n if (this.type !== 'Default' && !isNullOrUndefined(this.rangeBar)) {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range' && !isNullOrUndefined(this.secondHandle)) {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n if (this.enableRtl) {\n this.firstHandle.style.right = this.handlePos1 + \"px\";\n }\n else {\n this.firstHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.isMaterialTooltip && !isNullOrUndefined(this.materialHandle)) {\n if (this.enableRtl) {\n this.materialHandle.style.right = this.handlePos1 + \"px\";\n }\n else {\n this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n }\n if (this.type === 'MinRange' && !isNullOrUndefined(this.rangeBar)) {\n if (this.enableRtl) {\n this.rangeBar.style.right = '0px';\n }\n else {\n this.rangeBar.style.left = '0px';\n }\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range' && !isNullOrUndefined(this.secondHandle) && !isNullOrUndefined(this.rangeBar)) {\n if (this.enableRtl) {\n this.secondHandle.style.right = this.handlePos2 + \"px\";\n this.rangeBar.style.right = this.handlePos1 + 'px';\n }\n else {\n this.secondHandle.style.left = this.handlePos2 + \"px\";\n this.rangeBar.style.left = this.handlePos1 + 'px';\n }\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos1 + 'px' : '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.min > this.max ? this.element.clientHeight - this.handlePos1 + 'px' : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos2 + 'px' : this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.min > this.max ? this.handlePos1 - this.handlePos2 + 'px' : this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n if (!isNullOrUndefined(_this.firstHandle)) {\n _this.firstHandle.style.transition = _this.scaleTransform;\n }\n if (_this.type === 'Range' && !isNullOrUndefined(_this.secondHandle)) {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip(this.tooltipTarget);\n this.setBarColor();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && ((this.handlePos1 > this.handlePos2 && this.min < this.max) || (this.handlePos1 < this.handlePos2 && this.min > this.max))) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && ((this.handlePos2 < this.handlePos1 && this.min < this.max) || (this.handlePos2 > this.handlePos1 && this.min > this.max))) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition(null);\n }\n };\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.min < (this.max) && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1) || (this.min > this.max) && (this.handlePos1 - handlepos) > (handlepos - this.handlePos2))) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n var behindElement;\n if ((evt.type === 'click' || evt.type === 'mousedown') && evt.target === handle) {\n var eventX = evt.clientX, eventY = evt.clientY;\n behindElement = document.elementFromPoint(eventX, eventY);\n }\n if (evt.target === handle && behindElement !== handle) {\n if ((this.isMaterial || this.isMaterial3) && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.sliderBarUp(evt);\n this.tooltipToggle(this.getHandle());\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = (this.isMaterial || this.isMaterial3) && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition(evt);\n if (this.isMaterialTooltip) {\n this.initialTooltip = false;\n }\n if (evt.target !== handle) {\n this.changeEvent('changed', evt);\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n this.rangeBarDragged = true;\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n if (this.min > this.max) {\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n }\n else {\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n }\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n if (this.min > this.max) {\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n }\n else {\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n }\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === (this.min > this.max ? this.min : this.max)) {\n this.handleValueAdjust(this.handleVal2, (this.min > this.max ? this.min : this.max), 2);\n }\n if (this.handleVal1 === (this.min > this.max ? this.max : this.min)) {\n this.handleValueAdjust(this.handleVal1, (this.min > this.max ? this.max : this.min), 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition(event);\n this.activeHandle = 2;\n this.setHandlePosition(event);\n this.tooltipToggle(this.rangeBar);\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function (event) {\n this.changeEvent('changed', event);\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.initialTooltip = false;\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n this.closeTooltip();\n if (this.isMaterial || this.isMaterial3) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if ((this.min < this.max && handlepos > this.handlePos2 || (this.min > this.max && handlepos < this.handlePos2))) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if ((this.min < this.max && handlepos < this.handlePos1) || (this.min > this.max && handlepos > this.handlePos1)) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition(evt);\n if ((this.isMaterial || this.isMaterial3) && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n if (!this.rangeBarDragged) {\n this.focusSliderElement();\n this.sliderBarClick(event);\n }\n else {\n this.isDragComplete = true;\n }\n this.changeEvent('changed', event);\n this.closeTooltip();\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n this.rangeBarDragged = false;\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj) {\n this.tooltipValue();\n if (target) {\n this.tooltipObj.refresh(target);\n this.tooltipTarget = target;\n }\n }\n };\n Slider.prototype.openTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.open(target);\n this.tooltipTarget = target;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.close();\n this.tooltipTarget = undefined;\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.rangeBarMousedown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.tooltipToggle(this.rangeBar);\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n };\n Slider.prototype.elementClick = function (event) {\n if (this.isDragComplete) {\n this.isDragComplete = false;\n return;\n }\n event.preventDefault();\n this.focusSliderElement();\n this.sliderBarClick(event);\n this.focusHandle();\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n var previousSibling = event.target.previousSibling;\n if (previousSibling && previousSibling.classList.contains(classNames.sliderHandle)) {\n this.activeHandle = 2;\n }\n else {\n this.activeHandle = 1;\n }\n }\n this.getHandle().focus();\n this.tooltipToggle(this.getHandle());\n }\n }\n this.closeTooltip();\n this.changeEvent('changed', event);\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n var curTarget = event.currentTarget;\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && this.tooltipObj && this.isMaterialTooltip &&\n !curTarget.classList.contains(classNames.sliderHandleFocused) &&\n !curTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeMaterialTooltip();\n }\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.closeMaterialTooltip();\n this.closeTooltip();\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type, args) {\n if (this.isMaterialTooltip && this.materialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.materialHandle);\n this.materialHandle = undefined;\n }\n this.removeElement(this.firstHandle);\n this.firstHandle = undefined;\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n this.secondHandle = undefined;\n }\n this.removeElement(this.rangeBar);\n this.rangeBar = undefined;\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n }\n if (this.limits.enabled) {\n if (type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n this.limitBarFirst = undefined;\n }\n }\n else {\n if (!isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarSecond);\n this.limitBarSecond = undefined;\n }\n }\n }\n this.activeHandle = 1;\n this.getThemeInitialization();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.setBarColor();\n if (args !== 'tooltip') {\n this.updateConfig();\n }\n if (this.readonly) {\n this.sliderContainer.classList.remove(classNames.readonly);\n this.setReadOnly();\n }\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.tooltipObj.refresh(this.firstHandle);\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type, 'null');\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns the string\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n if (this.sliderContainer.parentNode) {\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n }\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n this.hiddenInput = null;\n this.sliderContainer = null;\n this.sliderTrack = null;\n this.rangeBar = null;\n this.firstHandle = null;\n this.secondHandle = null;\n this.tickElementCollection = null;\n this.ul = null;\n this.firstBtn = null;\n this.secondBtn = null;\n this.materialHandle = null;\n this.tooltipObj = null;\n this.tooltipTarget = null;\n this.limitBarFirst = null;\n this.limitBarSecond = null;\n this.firstChild = null;\n this.lastChild = null;\n this.tooltipElement = null;\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {SliderModel} newProp - Specifies the new properties\n * @param {SliderModel} oldProp - Specifies the old properties\n * @returns {void}\n * @private\n */\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (newProp && oldProp) {\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.initialTooltip = true;\n this.setTooltip(prop);\n if (!this.showButtons) {\n this.wireEvents();\n }\n }\n break;\n case 'type':\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.reposition();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n this.reposition();\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValues':\n this.setValue();\n this.reposition();\n break;\n case 'colorRange':\n this.reposition();\n break;\n case 'width':\n this.setElementWidth(newProp.width);\n this.setMinMaxValue();\n if (this.limits) {\n this.limitsPropertyChange();\n }\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None' && !isNullOrUndefined(this.ul) && !isNullOrUndefined(this.element)) {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !this.isMaterial3 && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!isNullOrUndefined(this.firstHandle)) {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n if (this.type === 'Range' && !isNullOrUndefined(this.secondHandle)) {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function (args) {\n this.changeSliderType(this.type, args);\n };\n Slider.prototype.setBarColor = function () {\n var trackPosition;\n var trackClassName;\n var child = this.sliderTrack.lastElementChild;\n while (child) {\n this.sliderTrack.removeChild(child);\n child = this.sliderTrack.lastElementChild;\n }\n for (var i = 0; i < this.colorRange.length; i++) {\n if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n if (this.colorRange[i].end > this.colorRange[i].start) {\n if (this.colorRange[i].start < this.min) {\n this.colorRange[i].start = this.min;\n }\n if (this.colorRange[i].end > this.max) {\n this.colorRange[i].end = this.max;\n }\n var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n var trackContainer = this.createElement('div');\n trackContainer.style.backgroundColor = this.colorRange[i].color;\n trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n if (this.orientation === 'Horizontal') {\n trackClassName = classNames.sliderHorizantalColor;\n if (this.enableRtl) {\n if (isNullOrUndefined(this.customValues)) {\n trackPosition =\n this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n }\n else {\n trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n }\n }\n else {\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n }\n trackContainer.style.width = endPosition - startingPosition + 'px';\n trackContainer.style.left = trackPosition + 'px';\n }\n else {\n trackClassName = classNames.sliderVerticalColor;\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n trackContainer.style.height = endPosition - startingPosition + 'px';\n trackContainer.style.bottom = trackPosition + 'px';\n }\n trackContainer.classList.add(trackClassName);\n this.sliderTrack.appendChild(trackContainer);\n }\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} - Returns the string\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Collection([{}], ColorRangeData)\n ], Slider.prototype, \"colorRange\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable prefer-spread */\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Deferred } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup, isCollide } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var ele = this.element;\n this.formElement = closest(this.element, 'form');\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n if (ele.getAttribute('ejs-for') && !ele.getAttribute('name')) {\n ele.setAttribute('name', ele.id);\n }\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n this.renderComplete();\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false', 'aria-label': 'colorpicker' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n if (this.noColor && this.mode === 'Palette' && this.value === '') {\n value = '';\n }\n var slicedValue = value.slice(0, 7);\n if (isNullOrUndefined(this.initialInputValue)) {\n this.initialInputValue = slicedValue;\n }\n this.element.value = slicedValue;\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': slicedValue }, true);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n createPopupOnClick: this.createPopupOnClick,\n open: this.onOpen.bind(this),\n click: function () {\n var ev = new MouseEvent('click', { bubbles: true, cancelable: false });\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }, value: _this.value, event: ev\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (Browser.isDevice && !this.createPopupOnClick) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n this.bindCallBackEvent();\n };\n ColorPicker.prototype.onOpen = function () {\n this.trigger('open', { element: this.container });\n if (!Browser.isDevice) {\n var popupInst = this.getPopupInst();\n var collision = isCollide(popupInst.element);\n if (collision.length > 0) {\n popupInst.collision = { X: 'flip', Y: 'fit' };\n popupInst.position = { X: 'right', Y: 'bottom' };\n popupInst.targetType = 'container';\n }\n }\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.bindCallBackEvent = function () {\n var _this = this;\n this.splitBtn.beforeOpen = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observeOpenArgs) {\n if (!observeOpenArgs.cancel) {\n var popupEle = _this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n _this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n if (_this.createPopupOnClick) {\n var popupInst = _this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(_this.splitBtn.element).toString();\n }\n _this.modal = _this.createElement('div');\n _this.modal.className = 'e-' + _this.getModuleName() + ' e-modal';\n _this.modal.style.display = 'none';\n document.body.insertBefore(_this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n _this.modal.style.display = 'block';\n _this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n args.cancel = observeOpenArgs.cancel;\n callBackPromise.resolve(observeOpenArgs);\n });\n return callBackPromise;\n };\n this.splitBtn.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: _this.container, event: args.event, cancel: false };\n _this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n if (Browser.isDevice && args.event.target === _this.modal) {\n observedCloseArgs.cancel = true;\n }\n if (!observedCloseArgs.cancel) {\n _this.onPopupClose();\n }\n args.cancel = observedCloseArgs.cancel;\n callBackPromise.resolve(observedCloseArgs);\n });\n }\n else {\n callBackPromise.resolve(args);\n }\n return callBackPromise;\n };\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0', 'role': 'grid' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'row' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false', 'tabindex': '0' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = this.container.querySelector('.e-row').children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n if (refEle) {\n this.container.insertBefore(ele, refEle);\n }\n else {\n this.container.appendChild(ele);\n }\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n if (this.value === null || this.value === '') {\n this.value = '#008000ff';\n }\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n var opacityEle = select('.e-opacity-empty-track', this.opacitySlider.element);\n if (opacityEle) {\n opacityEle.style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n }\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n this.updateOpacityInput(value);\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.updateOpacityInput = function (value) {\n if (this.enableOpacity && !this.getWrapper().classList.contains(HIDEVALUE)) {\n var opacityTextBoxInst = getInstance(select('.' + OPACITY, this.container), NumericTextBox);\n opacityTextBoxInst.value = value;\n opacityTextBoxInst.dataBind();\n }\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n if (isPicker) {\n this.appendElement(inputWrap, 2);\n }\n else {\n this.appendElement(inputWrap, 1);\n }\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false', 'aria-label': 'HEX' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', {\n className: 'e-icons e-css e-btn e-flat e-icon-btn ' + FORMATSWITCH,\n attrs: { 'title': 'Toggle format' }\n });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-css e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-css e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n htmlAttributes: { title: 'tooltip' },\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n this.tooltipEle.setAttribute('aria-label', 'colorpicker-tooltip');\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n if (enable) {\n this.getWrapper().classList.add(DISABLED);\n }\n else {\n this.getWrapper().classList.remove(DISABLED);\n }\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n if (enable) {\n attributes(ele, { 'disabled': '' });\n }\n else {\n ele.removeAttribute('disabled');\n }\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey, e) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey, e);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n *\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @returns {string} - Color value\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @method toggle\n * @returns {void}\n */\n ColorPicker.prototype.toggle = function () {\n if (this.container.parentElement.classList.contains('e-popup-close')) {\n this.splitBtn.toggle();\n }\n else {\n this.closePopup(null);\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n var ctrlBtn = select('.' + CTRLBTN, this.container);\n if (ctrlBtn) {\n EventHandler.add(ctrlBtn, 'keydown', this.ctrlBtnKeyDown, this);\n }\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.formResetHandler = function () {\n this.value = this.initialInputValue;\n attributes(this.element, { 'value': this.initialInputValue });\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n var ctrlSwitchBtn = select('.' + CTRLSWITCH, this.container);\n if (ctrlSwitchBtn) {\n EventHandler.add(ctrlSwitchBtn, 'click', this.btnClickHandler, this);\n }\n };\n ColorPicker.prototype.ctrlBtnKeyDown = function (e) {\n if (e.keyCode === 13) {\n var applyBtn = select('.' + APPLY, this.container);\n if (applyBtn) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13: {\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedcloseArgs) {\n if (!observedcloseArgs.cancel) {\n _this.splitBtn.toggle();\n _this.onPopupClose();\n }\n });\n };\n ColorPicker.prototype.triggerChangeEvent = function (value, e) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) }, event: e,\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) },\n value: this.enableOpacity ? value : hex\n });\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true, e);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat(false, e);\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n this.updateHsv();\n this.convertToOtherFormat(false, e);\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n //for image editor popup position refreshing\n if (this.element.parentElement && this.element.parentElement.parentElement && this.element.parentElement.parentElement.classList.contains('e-ie-ddb-popup')) {\n this.refreshImageEditorPopupPos();\n }\n ;\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\n };\n //for image editor popup position refreshing\n ColorPicker.prototype.refreshImageEditorPopupPos = function () {\n if (Browser.isDevice) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n var btnElem = document.querySelector(\"#\" + this.element.parentElement.parentElement.id.split('-popup')[0]);\n if (btnElem) {\n popupEle.parentElement.ej2_instances[0].refreshPosition(btnElem);\n }\n }\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function () {\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), false, e);\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), false, e);\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler();\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n //for image editor popup position refreshing\n if (this.element.parentElement && this.element.parentElement.parentElement && this.element.parentElement.parentElement.classList.contains('e-ie-ddb-popup')) {\n this.refreshImageEditorPopupPos();\n }\n ;\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Picker' });\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue, e);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n else if (ele.classList.contains(CANCEL)) {\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n if (idx < 0) {\n idx += n + emptyCount;\n }\n else {\n idx %= n + emptyCount;\n }\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX': {\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value, e);\n }\n else {\n return;\n }\n break;\n }\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue, null, e);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue, null, e);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue, null, e);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat(false, e);\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat(false, e);\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value, e) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba, false, e);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey, e) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (isNullOrUndefined(e)) {\n e = new MouseEvent('click', { bubbles: true, cancelable: false });\n }\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba }, event: e,\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }, value: cValue });\n if (this.enableOpacity) {\n this.setProperties({ 'value': cValue }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', {\n currentValue: { hex: hex, rgba: rgba }, event: e,\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n });\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n if (this.element.nextElementSibling) {\n detach(this.element.nextElementSibling);\n }\n if (wrapper) {\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n }\n this.container = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n var popup = closest(this.hueSlider.element, '.e-color-picker');\n var numericElemColl = popup.querySelectorAll('.e-numerictextbox');\n for (var i = 0; i < numericElemColl.length; i++) {\n getInstance(numericElemColl[i], NumericTextBox).destroy();\n }\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n var ctrlBtn = select('.' + CTRLBTN, this.container);\n if (ctrlBtn) {\n EventHandler.remove(ctrlBtn, 'keydown', this.ctrlBtnKeyDown);\n }\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n if (this.rgb.length === 4) {\n this.updateOpacityInput(this.rgb[3] * 100);\n }\n }\n else {\n this.removeTileSelection();\n var ele = this.container.querySelector('span[aria-label=\"' + this.roundValue(newProp) + '\"]');\n if (ele) {\n this.addTileSelection(ele);\n }\n }\n };\n ColorPicker.prototype.setInputEleProps = function () {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps();\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.replace(/\\s+/g, ' ').trim().split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ColorPickerModel} newProp - Specifies new properties\n * @param {ColorPickerModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (!isNullOrUndefined(newProp.value)) {\n var value = this.roundValue(newProp.value);\n if (value.length === 9) {\n this.element.value = this.roundValue(value).slice(0, 7);\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n if (preview) {\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(newProp.value));\n }\n }\n else if (this.noColor && this.mode === 'Palette' && this.value === '') {\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n preview.style.backgroundColor = '';\n }\n else {\n this.value = oldProp.value;\n }\n }\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass': {\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n }\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps();\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n if (this_1.value !== oldProp.value) {\n this_1.changeValueProp(newProp.value);\n }\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n /**\n * Sets the focus to Colorpicker\n * its native method\n *\n * @public\n * @returns {void}\n */\n ColorPicker.prototype.focusIn = function () {\n this.element.parentElement.focus();\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"onModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\n","import { createElement, isNullOrUndefined, L10n, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { WCharacterStyle, WParagraphStyle } from '../../implementation/format/style';\nimport { internalStyleCollectionChange } from '../../base/index';\nimport { BulletsAndNumberingDialog } from './index';\nimport { Query } from '@syncfusion/ej2-data';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WParagraphFormat } from '../index';\nimport { ColorPicker, TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * The Style dialog is used to create or modify styles.\n */\nvar StyleDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function StyleDialog(documentHelper) {\n var _this = this;\n this.target = undefined;\n this.styleType = undefined;\n this.styleBasedOn = undefined;\n this.styleParagraph = undefined;\n this.onlyThisDocument = undefined;\n this.template = undefined;\n this.fontFamily = undefined;\n this.fontSize = undefined;\n this.characterFormat = undefined;\n this.paragraphFormat = undefined;\n this.textAlignment = undefined;\n this.lineSpacing = undefined;\n this.leftIndent = undefined;\n this.beforeSpacing = undefined;\n this.afterSpacing = undefined;\n /**\n *\n * @param {DropDownButtonMenuEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.openDialog = function (args) {\n switch (args.item.id) {\n case 'style_font':\n _this.showFontDialog();\n break;\n case 'style_paragraph':\n _this.showParagraphDialog();\n break;\n case 'style_numbering':\n _this.showNumberingBulletDialog();\n break;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.setBoldProperty = function () {\n _this.characterFormat.bold = !_this.characterFormat.bold;\n _this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setItalicProperty = function () {\n _this.characterFormat.italic = !_this.characterFormat.italic;\n _this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setUnderlineProperty = function () {\n _this.characterFormat.underline = _this.characterFormat.underline === 'None' ? 'Single' : 'None';\n _this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontButtonClicked = function () {\n if (_this.characterFormat.bold) {\n if (!_this.bold.classList.contains('e-active')) {\n _this.bold.classList.add('e-active');\n }\n }\n else {\n if (_this.bold.classList.contains('e-active')) {\n _this.bold.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.italic) {\n if (!_this.italic.classList.contains('e-active')) {\n _this.italic.classList.add('e-active');\n }\n }\n else {\n if (_this.italic.classList.contains('e-active')) {\n _this.italic.classList.remove('e-active');\n }\n }\n if (_this.characterFormat.underline !== undefined && _this.characterFormat.underline !== 'None') {\n if (!_this.underline.classList.contains('e-active')) {\n _this.underline.classList.add('e-active');\n _this.characterFormat.underline = 'Single';\n }\n }\n else {\n if (_this.underline.classList.contains('e-active')) {\n _this.underline.classList.remove('e-active');\n _this.characterFormat.underline = 'None';\n }\n }\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.fontSizeUpdate = function (args) {\n _this.characterFormat.fontSize = args.value;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.fontFamilyChanged = function (args) {\n _this.characterFormat.fontFamily = args.value.toString();\n };\n /**\n * @private\n * @param {ColorPickerEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.fontColorUpdate = function (args) {\n _this.characterFormat.fontColor = args.currentValue.hex;\n };\n /**\n * @private\n * @returns {void}\n */\n this.setLeftAlignment = function () {\n if (_this.textAlignment === 'Left') {\n _this.textAlignment = 'Justify';\n }\n else {\n _this.textAlignment = 'Left';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setRightAlignment = function () {\n if (_this.textAlignment === 'Right') {\n _this.textAlignment = 'Left';\n }\n else {\n _this.textAlignment = 'Right';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setCenterAlignment = function () {\n if (_this.textAlignment === 'Center') {\n _this.textAlignment = 'Left';\n }\n else {\n _this.textAlignment = 'Center';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.setJustifyAlignment = function () {\n if (_this.textAlignment === 'Justify') {\n _this.textAlignment = 'Left';\n }\n else {\n _this.textAlignment = 'Justify';\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.increaseBeforeAfterSpacing = function () {\n _this.beforeSpacing += 6;\n _this.afterSpacing += 6;\n };\n /**\n * @private\n * @returns {void}\n */\n this.decreaseBeforeAfterSpacing = function () {\n if (_this.beforeSpacing >= 6) {\n _this.beforeSpacing -= 6;\n }\n else {\n _this.beforeSpacing = 0;\n }\n if (_this.afterSpacing >= 6) {\n _this.afterSpacing -= 6;\n }\n else {\n _this.afterSpacing = 0;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.updateNextStyle = function (args) {\n var typedName = args.srcElement.value;\n if (_this.getTypeValue() === _this.localObj.getConstant('Paragraph') && !isNullOrUndefined(typedName) && typedName !== '' && !_this.isUserNextParaUpdated) {\n var styles = _this.documentHelper.styles.getStyleNames(_this.getTypeValue());\n if (_this.isEdit) {\n styles = styles.filter(function (e) { return e !== _this.editStyleName; });\n }\n styles.push(typedName);\n _this.styleParagraph.dataSource = styles;\n _this.styleParagraph.index = null;\n _this.styleParagraph.index = styles.indexOf(typedName);\n // this.styleParagraph.dataBind();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.updateOkButton = function () {\n var styleName = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0).value;\n _this.enableOrDisableOkButton();\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.styleTypeChange = function (args) {\n if (args.isInteracted) {\n var type = void 0;\n if (args.value === 'Character') {\n _this.style = new WCharacterStyle();\n type = 'Character';\n }\n if (args.value === 'Paragraph' || args.value === 'Linked Style') {\n _this.style = new WParagraphStyle();\n type = 'Paragraph';\n }\n _this.toggleDisable();\n _this.updateStyleNames(type);\n }\n };\n /**\n * @returns {void}\n */\n this.styleBasedOnChange = function () {\n //Based on change\n };\n /**\n * @private\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.styleParagraphChange = function (args) {\n if (args.isInteracted) {\n _this.isUserNextParaUpdated = true;\n }\n //Next change\n };\n /**\n * @private\n * @returns {void}\n */\n this.showFontDialog = function () {\n if (!isNullOrUndefined(_this.documentHelper.owner.fontDialogModule)) {\n _this.documentHelper.owner.showFontDialog(_this.characterFormat);\n }\n _this.updateCharacterFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.showParagraphDialog = function () {\n if (!isNullOrUndefined(_this.documentHelper.owner.paragraphDialogModule)) {\n _this.documentHelper.owner.showParagraphDialog(_this.paragraphFormat);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.showNumberingBulletDialog = function () {\n _this.numberingBulletDialog = new BulletsAndNumberingDialog(_this.documentHelper);\n if (_this.style instanceof WParagraphStyle && (!isNullOrUndefined(_this.style.paragraphFormat))) {\n _this.numberingBulletDialog.showNumberBulletDialog(_this.style.paragraphFormat.listFormat, _this.abstractList);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onOkButtonClick = function () {\n var styleName = SanitizeHtmlHelper.sanitize(_this.styleNameElement.value);\n if (styleName.length > 0) {\n var style = _this.documentHelper.styles.findByName(styleName);\n var name_1;\n if (!isNullOrUndefined(style)) {\n _this.documentHelper.owner.editorHistoryModule.initializeHistory('ModifyStyle');\n if (_this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo && _this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'ModifyStyle') {\n var listId_1 = style instanceof WParagraphStyle ? style.paragraphFormat.listFormat.listId : -1;\n var styleObject = _this.documentHelper.owner.getStyleObject(style, listId_1);\n _this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.modifiedProperties.push(styleObject);\n _this.applyParagraphFormat();\n }\n _this.documentHelper.owner.editorHistoryModule.updateHistory();\n _this.style.type = _this.getTypeValue();\n _this.style.basedOn = _this.documentHelper.styles.findByName(_this.documentHelper.owner.stylesDialogModule.getStyleName(_this.styleBasedOn.value));\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked Style') {\n _this.style.next = _this.documentHelper.styles.findByName(_this.documentHelper.owner.stylesDialogModule.getStyleName(_this.styleParagraph.value));\n _this.style.characterFormat.mergeFormat(_this.characterFormat);\n _this.style.paragraphFormat.mergeFormat(_this.paragraphFormat, true);\n _this.updateList();\n _this.style.link = (_this.styleType.value === 'Linked Style') ? _this.createLinkStyle(styleName, _this.isEdit) : undefined;\n }\n //Updating existing style implementation\n _this.style.name = style.name;\n name_1 = style.name;\n style = _this.style;\n var listId = _this.style instanceof WParagraphStyle ? _this.style.paragraphFormat.listFormat.listId : -1;\n _this.documentHelper.owner.setStyleData(name_1, listId);\n _this.documentHelper.owner.isShiftingEnabled = true;\n _this.documentHelper.owner.editorModule.isSkipOperationsBuild = _this.documentHelper.owner.enableCollaborativeEditing;\n _this.documentHelper.owner.editorModule.layoutWholeDocument();\n _this.documentHelper.owner.editorModule.isSkipOperationsBuild = false;\n _this.documentHelper.owner.isShiftingEnabled = false;\n }\n else {\n var tmpStyle = _this.getTypeValue() === 'Paragraph' ? new WParagraphStyle() : new WCharacterStyle;\n tmpStyle.copyStyle(_this.style);\n if (_this.getTypeValue() === 'Character') {\n tmpStyle.characterFormat.copyFormat(_this.characterFormat);\n }\n var basedOn = _this.documentHelper.styles.findByName(_this.documentHelper.owner.stylesDialogModule.getStyleName(_this.styleBasedOn.value));\n if (_this.styleType.value === 'Paragraph' || _this.styleType.value === 'Linked Style') {\n if (styleName === _this.documentHelper.owner.stylesDialogModule.getStyleName(_this.styleParagraph.value)) {\n tmpStyle.next = tmpStyle;\n }\n else {\n tmpStyle.next = _this.documentHelper.styles.findByName(_this.documentHelper.owner.stylesDialogModule.getStyleName(_this.styleParagraph.value));\n }\n _this.updateList();\n }\n tmpStyle.link = (_this.styleType.value === 'Linked Style') ? _this.createLinkStyle(styleName) : undefined;\n tmpStyle.type = _this.getTypeValue();\n tmpStyle.name = styleName;\n tmpStyle.basedOn = basedOn;\n _this.documentHelper.styles.push(tmpStyle);\n _this.documentHelper.addToStylesMap(tmpStyle);\n name_1 = styleName;\n _this.documentHelper.owner.editorHistoryModule.initializeHistory('ModifyStyle');\n if (_this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo && _this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.action === 'ModifyStyle') {\n var listId_2 = tmpStyle instanceof WParagraphStyle ? tmpStyle.paragraphFormat.listFormat.listId : -1;\n var styleObject = _this.documentHelper.owner.getStyleObject(tmpStyle, listId_2);\n styleObject[\"isNew\"] = true;\n _this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.modifiedProperties.push(styleObject);\n _this.applyParagraphFormat();\n }\n _this.documentHelper.owner.editorHistoryModule.updateHistory();\n var listId = _this.style instanceof WParagraphStyle ? _this.style.paragraphFormat.listFormat.listId : -1;\n _this.documentHelper.owner.setStyleData(name_1, listId);\n _this.documentHelper.owner.editorModule.isSkipOperationsBuild = _this.styleType.value === 'Character' && _this.documentHelper.owner.enableCollaborativeEditing;\n _this.documentHelper.owner.editorModule.applyStyle(name_1, true);\n _this.documentHelper.owner.editorModule.isSkipOperationsBuild = false;\n _this.documentHelper.owner.notify(internalStyleCollectionChange, {});\n }\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n }\n else {\n throw new Error('Enter valid Style name');\n }\n if (_this.style) {\n //this.style.destroy();\n }\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadStyleDialog = function () {\n _this.documentHelper.updateFocus();\n _this.isUserNextParaUpdated = false;\n _this.styleNameElement = _this.target.getElementsByClassName('e-input e-de-style-dlg-name-input').item(0);\n _this.styleNameElement.value = null;\n if (!_this.isEdit) {\n _this.styleType.index = 0; //Set to paragraph \n }\n var name;\n if (_this.isEdit) {\n var localValue = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n localValue.setLocale(_this.documentHelper.owner.locale);\n var styleName = localValue.getConstant(_this.editStyleName);\n if (styleName === '') {\n styleName = _this.editStyleName;\n }\n _this.styleNameElement.value = styleName;\n name = _this.editStyleName;\n }\n _this.okButton = _this.documentHelper.dialog2.element.getElementsByClassName('e-flat e-style-okay').item(0);\n _this.enableOrDisableOkButton();\n _this.updateStyleNames(_this.getTypeValue(), name);\n _this.updateCharacterFormat(_this.style.characterFormat);\n _this.updateParagraphFormat(_this.style.paragraphFormat);\n };\n this.applyParagraphFormat = function () {\n if (isNullOrUndefined(_this.paragraphFormat)) {\n _this.paragraphFormat = new WParagraphFormat();\n }\n if (!isNullOrUndefined(_this.textAlignment)) {\n _this.paragraphFormat.textAlignment = _this.textAlignment;\n }\n if (!isNullOrUndefined(_this.beforeSpacing)) {\n _this.paragraphFormat.beforeSpacing = _this.beforeSpacing;\n }\n if (!isNullOrUndefined(_this.afterSpacing)) {\n _this.paragraphFormat.afterSpacing = _this.afterSpacing;\n }\n if (!isNullOrUndefined(_this.leftIndent)) {\n _this.paragraphFormat.leftIndent = _this.leftIndent;\n }\n if (!isNullOrUndefined(_this.lineSpacing)) {\n _this.paragraphFormat.lineSpacing = _this.lineSpacing;\n }\n _this.updateParagraphFormat();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n // if (!this.isEdit && this.style) {\n _this.style = undefined;\n _this.characterFormat = undefined;\n _this.paragraphFormat = undefined;\n _this.textAlignment = undefined;\n _this.lineSpacing = undefined;\n _this.leftIndent = undefined;\n _this.beforeSpacing = undefined;\n _this.afterSpacing = undefined;\n // }\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeStyleDialog = function () {\n _this.documentHelper.updateFocus();\n _this.textAlignment = undefined;\n _this.lineSpacing = undefined;\n _this.leftIndent = undefined;\n _this.beforeSpacing = undefined;\n _this.afterSpacing = undefined;\n };\n this.documentHelper = documentHelper;\n }\n /**\n * @private\n * @returns {string} Returns module name\n */\n StyleDialog.prototype.getModuleName = function () {\n return 'StyleDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n /* eslint-disable */\n StyleDialog.prototype.initStyleDialog = function (localValue, isRtl) {\n var instance = this;\n this.localObj = localValue;\n this.target = createElement('div', { className: 'e-de-style-dialog' });\n var container = createElement('div');\n var properties = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localValue.getConstant('Properties') });\n container.appendChild(properties);\n var styleNameTypeDiv = createElement('div', { className: 'e-de-container-row' });\n container.appendChild(styleNameTypeDiv);\n var nameWholeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n styleNameTypeDiv.appendChild(nameWholeDiv);\n // let name: HTMLElement = createElement('div', { className: 'e-de-style-name', innerHTML: localValue.getConstant('Name') + ':' });\n // nameWholeDiv.appendChild(name);\n var nameValue = createElement('input', { className: 'e-input e-de-style-dlg-name-input' });\n nameValue.addEventListener('keyup', this.updateOkButton);\n nameValue.addEventListener('input', this.updateOkButton);\n nameValue.addEventListener('blur', this.updateNextStyle);\n nameWholeDiv.appendChild(nameValue);\n new TextBox({ placeholder: localValue.getConstant('Name') + ':', floatLabelType: 'Always' }, nameValue);\n var styleTypeWholeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n styleNameTypeDiv.appendChild(styleTypeWholeDiv);\n // let styleType: HTMLElement = createElement('div', { className: 'e-de-style-styletype', innerHTML: });\n // styleTypeWholeDiv.appendChild(styleType);\n var styleTypeDivElement = createElement('div');\n var styleTypeValue = createElement('select');\n styleTypeValue.innerHTML = '';\n styleTypeDivElement.appendChild(styleTypeValue);\n this.styleType = new DropDownList({\n change: this.styleTypeChange,\n popupHeight: '253px', enableRtl: isRtl,\n placeholder: localValue.getConstant('Style type') + ':', floatLabelType: 'Always'\n });\n this.styleType.appendTo(styleTypeValue);\n styleTypeWholeDiv.appendChild(styleTypeDivElement);\n var styleBasedParaDiv = createElement('div', { className: 'e-de-container-row' });\n container.appendChild(styleBasedParaDiv);\n var styleBasedOnWholeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n styleBasedParaDiv.appendChild(styleBasedOnWholeDiv);\n //let styleBasedOn: HTMLElement = createElement('div', { className: 'e-de-style-style-based-on', innerHTML: });\n //styleBasedOnWholeDiv.appendChild(styleBasedOn);\n var styleBasedOnDivElement = createElement('div', { className: 'e-de-style-style-based-on-div' });\n var styleBasedOnValue = createElement('input');\n //styleBasedOnValue.innerHTML = '';\n styleBasedOnDivElement.appendChild(styleBasedOnValue);\n this.styleBasedOn = new DropDownList({\n dataSource: [], select: this.styleBasedOnChange, popupHeight: '253px', enableRtl: isRtl,\n placeholder: localValue.getConstant('Style based on') + ':', floatLabelType: 'Always'\n });\n this.styleBasedOn.appendTo(styleBasedOnValue);\n styleBasedOnWholeDiv.appendChild(styleBasedOnDivElement);\n var styleParagraphWholeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n styleBasedParaDiv.appendChild(styleParagraphWholeDiv);\n if (isRtl) {\n nameWholeDiv.classList.add('e-de-rtl');\n styleBasedOnWholeDiv.classList.add('e-de-rtl');\n styleParagraphWholeDiv.classList.add('e-de-rtl');\n }\n //let styleParagraph: HTMLElement = createElement('div', { className: 'e-de-style-style-paragraph', innerHTML: });\n //styleParagraphWholeDiv.appendChild(styleParagraph);\n var styleParagraphDivElement = createElement('div');\n var styleParagraphValue = createElement('input');\n //styleParagraphValue.innerHTML = '';\n styleParagraphDivElement.appendChild(styleParagraphValue);\n this.styleParagraph = new DropDownList({\n dataSource: [], select: this.styleParagraphChange, popupHeight: '253px', enableRtl: isRtl,\n placeholder: localValue.getConstant('Style for following paragraph') + ':', floatLabelType: 'Always'\n });\n this.styleParagraph.appendTo(styleParagraphValue);\n styleParagraphWholeDiv.appendChild(styleParagraphDivElement);\n var formatting = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localValue.getConstant('Formatting') });\n container.appendChild(formatting);\n var optionsDiv = createElement('div', { className: 'e-de-style-options-div' });\n container.appendChild(optionsDiv);\n var fontOptionsDiv = createElement('div', { styles: 'display:flex;margin-bottom: 14px;' });\n optionsDiv.appendChild(fontOptionsDiv);\n this.createFontOptions(fontOptionsDiv, isRtl);\n var paragraphOptionsDiv = createElement('div', { styles: 'display:flex', className: 'e-style-paragraph' });\n optionsDiv.appendChild(paragraphOptionsDiv);\n this.createParagraphOptions(paragraphOptionsDiv);\n // let radioOptionsDiv: HTMLElement = createElement('div', { styles: 'display:flex' });\n // container.appendChild(radioOptionsDiv);\n // let onlyThisDocumentDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // let onlyThisDocument: HTMLInputElement = createElement('input', { className: 'e-de-style-only-this-doc', attrs: { type: 'radio' } }) as HTMLInputElement;\n // onlyThisDocumentDiv.appendChild(onlyThisDocument);\n // this.onlyThisDocument = new RadioButton({ label: 'Only in this document', value: 'only in this document', checked: true, name: 'styles' });\n // this.onlyThisDocument.appendTo(onlyThisDocument);\n // radioOptionsDiv.appendChild(onlyThisDocumentDiv);\n // let templateDiv: HTMLElement = createElement('div', { className: 'e-de-style-radio-button' });\n // let template: HTMLInputElement = createElement('input', { className: 'e-de-style-temp', attrs: { type: 'radio' } }) as HTMLInputElement;\n // templateDiv.appendChild(template);\n // this.template = new RadioButton({ label: 'Template', value: 'template', name: 'styles' });\n // this.template.appendTo(template);\n // radioOptionsDiv.appendChild(templateDiv);\n this.createFormatDropdown(container, localValue, isRtl);\n this.target.appendChild(container);\n };\n StyleDialog.prototype.createFormatDropdown = function (parentDiv, localValue, isRtl) {\n var _this = this;\n var formatBtn = createElement('button', {\n id: 'style_format_dropdown', innerHTML: localValue.getConstant('Format'),\n attrs: { type: 'button' }\n });\n formatBtn.style.height = '31px';\n parentDiv.appendChild(formatBtn);\n var items = [{ text: localValue.getConstant('Font') + '...', id: 'style_font' },\n { text: localValue.getConstant('Paragraph') + '...', id: 'style_paragraph' },\n { text: localValue.getConstant('Numbering') + '...', id: 'style_numbering' }];\n this.styleDropdwn = new DropDownButton({\n items: items, cssClass: 'e-de-style-format-dropdwn', enableRtl: isRtl,\n beforeItemRender: function (args) {\n if (_this.styleType.value === localValue.getConstant('Character')) {\n if (args.item.id === \"style_paragraph\") {\n args.element.classList.add('e-disabled');\n }\n if (args.item.id === 'style_numbering') {\n args.element.classList.add('e-disabled');\n }\n }\n else {\n if (args.item.id === \"style_paragraph\") {\n args.element.classList.remove('e-disabled');\n }\n if (args.item.id === 'style_numbering') {\n args.element.classList.remove('e-disabled');\n }\n }\n },\n });\n this.styleDropdwn.appendTo(formatBtn);\n this.styleDropdwn.addEventListener('select', this.openDialog);\n };\n StyleDialog.prototype.createFontOptions = function (parentDiv, isRtl) {\n var _this = this;\n var fontFamilyElement = createElement('input', {\n id: this.target.id + '_fontName',\n });\n var fontStyle;\n var isStringTemplate = true;\n var itemTemplate = initializeCSPTemplate(function (data) { return \"\" + data.FontName + \"\"; });\n parentDiv.appendChild(fontFamilyElement);\n this.fontFamily = new ComboBox({\n dataSource: fontStyle, query: new Query().select(['FontName']), fields: { text: 'FontName', value: 'value' },\n allowCustom: true, width: '123px', popupWidth: '123px',\n cssClass: 'e-style-font-fmaily-right', enableRtl: isRtl, change: this.fontFamilyChanged,\n showClearButton: false, itemTemplate: itemTemplate\n });\n this.fontFamily.appendTo(fontFamilyElement);\n this.fontFamily.isStringTemplate = isStringTemplate;\n var fontFamilyValue = this.documentHelper.owner.documentEditorSettings.fontFamilies;\n for (var i = 0; i < fontFamilyValue.length; i++) {\n var fontValue = fontFamilyValue[i];\n var fontStyleValue = { 'FontName': fontValue, 'value': fontValue };\n this.fontFamily.addItem(fontStyleValue, i);\n }\n this.fontFamily.focus = function () { _this.fontFamily.element.select(); };\n this.fontFamily.element.parentElement.setAttribute('title', this.localObj.getConstant('Font'));\n var fontSizeElement = createElement('input');\n parentDiv.appendChild(fontSizeElement);\n var sizeDataSource = [8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72];\n this.fontSize = new ComboBox({\n dataSource: sizeDataSource, width: '73px', cssClass: 'e-style-font-fmaily-right',\n enableRtl: isRtl, change: this.fontSizeUpdate\n });\n this.fontSize.showClearButton = false;\n this.fontSize.appendTo(fontSizeElement);\n var fontGroupButton = createElement('div', { className: 'e-de-style-font-group-button' });\n parentDiv.appendChild(fontGroupButton);\n this.bold = this.createButtonElement(fontGroupButton, 'e-de-bold', 'e-de-style-bold-button-size', this.documentHelper.owner.containerId + '_style_bold');\n this.bold.setAttribute('aria-label', 'bold');\n this.bold.addEventListener('click', this.setBoldProperty);\n this.italic = this.createButtonElement(fontGroupButton, 'e-de-italic', 'e-de-style-icon-button-size', this.documentHelper.owner.containerId + '_style_italic');\n this.italic.setAttribute('aria-label', 'italic');\n this.italic.addEventListener('click', this.setItalicProperty);\n this.underline = this.createButtonElement(fontGroupButton, 'e-de-underline', 'e-de-style-icon-button-size', this.documentHelper.owner.containerId + '_style_underline');\n this.underline.setAttribute('aria-label', 'underline');\n this.underline.addEventListener('click', this.setUnderlineProperty);\n var fontColorElement = createElement('input', { attrs: { type: 'color' }, className: 'e-de-style-icon-button-size' });\n parentDiv.appendChild(fontColorElement);\n var _a = this.documentHelper.owner.documentEditorSettings.colorPickerSettings, columns = _a.columns, createPopupOnClick = _a.createPopupOnClick, disabled = _a.disabled, enablePersistence = _a.enablePersistence, enableRtl = _a.enableRtl, inline = _a.inline, mode = _a.mode, modeSwitcher = _a.modeSwitcher, noColor = _a.noColor, presetColors = _a.presetColors, showButtons = _a.showButtons;\n this.fontColor = new ColorPicker({ cssClass: 'e-de-style-font-color-picker', enableRtl: isRtl, change: this.fontColorUpdate, locale: this.documentHelper.owner.locale, enableOpacity: false, mode: mode, modeSwitcher: modeSwitcher, showButtons: showButtons, columns: columns, createPopupOnClick: createPopupOnClick, disabled: disabled, enablePersistence: enablePersistence, inline: inline, noColor: noColor, presetColors: presetColors });\n this.documentHelper.fontColor = this.fontColor;\n this.fontColor.appendTo(fontColorElement);\n };\n StyleDialog.prototype.createParagraphOptions = function (parentDiv) {\n var _this = this;\n var alignmentDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(alignmentDiv);\n this.leftAlign = this.createButtonElement(alignmentDiv, 'e-de-align-left', 'e-de-style-icon-button-size');\n this.leftAlign.setAttribute('aria-label', 'leftAlign');\n this.leftAlign.addEventListener('click', this.setLeftAlignment);\n this.centerAlign = this.createButtonElement(alignmentDiv, 'e-de-align-center', 'e-de-style-icon-button-size');\n this.centerAlign.setAttribute('aria-label', 'centerAlign');\n this.centerAlign.addEventListener('click', this.setCenterAlignment);\n this.rightAlign = this.createButtonElement(alignmentDiv, 'e-de-align-right', 'e-de-style-icon-button-size');\n this.rightAlign.setAttribute('aria-label', 'rightAlign');\n this.rightAlign.addEventListener('click', this.setRightAlignment);\n this.justify = this.createButtonElement(alignmentDiv, 'e-de-justify', 'e-de-style-icon-button-last-size');\n this.justify.setAttribute('aria-label', 'justify');\n this.justify.addEventListener('click', this.setJustifyAlignment);\n var lineSpacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(lineSpacingDiv);\n this.singleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-single-spacing', 'e-de-style-icon-button-first-size');\n this.singleLineSpacing.setAttribute('aria-label', 'singleLineSpacing');\n this.singleLineSpacing.addEventListener('click', function () {\n _this.lineSpacing = 1;\n _this.updateParagraphFormat();\n });\n this.onePointFiveLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-one-point-five-spacing', 'e-de-style-icon-button-size');\n this.onePointFiveLineSpacing.setAttribute('aria-label', 'onePointFiveLineSpacing');\n this.onePointFiveLineSpacing.addEventListener('click', function () {\n _this.lineSpacing = 1.5;\n _this.updateParagraphFormat();\n });\n this.doubleLineSpacing = this.createButtonElement(lineSpacingDiv, 'e-de-double-spacing', 'e-de-style-icon-button-last-size');\n this.doubleLineSpacing.setAttribute('aria-label', 'doubleLineSpacing');\n this.doubleLineSpacing.addEventListener('click', function () {\n _this.lineSpacing = 2;\n _this.updateParagraphFormat();\n });\n var spacingDiv = createElement('div', { className: 'e-de-style-paragraph-group-button' });\n parentDiv.appendChild(spacingDiv);\n var beforeSpacing = this.createButtonElement(spacingDiv, 'e-de-before-spacing', 'e-de-style-icon-button-first-size');\n beforeSpacing.setAttribute('aria-label', 'beforeSpacing');\n var afterSpacing = this.createButtonElement(spacingDiv, 'e-de-after-spacing', 'e-de-style-icon-button-last-size');\n afterSpacing.setAttribute('aria-label', 'afterSpacing');\n beforeSpacing.addEventListener('click', this.increaseBeforeAfterSpacing);\n afterSpacing.addEventListener('click', this.decreaseBeforeAfterSpacing);\n var indentingDiv = createElement('div', { className: 'e-de-style-paragraph-indent-group-button' });\n parentDiv.appendChild(indentingDiv);\n var decreaseIndent = this.createButtonElement(indentingDiv, 'e-de-indent', 'e-de-style-icon-button-first-size');\n decreaseIndent.setAttribute('aria-label', 'decreaseIndent');\n decreaseIndent.addEventListener('click', function () {\n if (_this.leftIndent >= 36) {\n _this.leftIndent -= 36;\n }\n else {\n _this.leftIndent = 0;\n }\n });\n var increaseindent = this.createButtonElement(indentingDiv, 'e-de-outdent', 'e-de-style-icon-button-size');\n increaseindent.setAttribute('aria-label', 'increaseindent');\n increaseindent.addEventListener('click', function () {\n _this.leftIndent += 36;\n });\n };\n StyleDialog.prototype.createButtonElement = function (parentDiv, iconCss, className, id) {\n var buttonElement = createElement('button', { attrs: { type: 'button' } });\n if (!isNullOrUndefined(id)) {\n buttonElement.id = id;\n }\n parentDiv.appendChild(buttonElement);\n var button = new Button({ iconCss: iconCss, cssClass: className });\n button.appendTo(buttonElement);\n return buttonElement;\n };\n StyleDialog.prototype.toggleDisable = function () {\n if (this.styleType.value === this.localObj.getConstant('Character')) {\n this.styleParagraph.enabled = false;\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex;pointer-events:none;opacity:0.5');\n }\n else {\n this.styleParagraph.enabled = true;\n this.target.getElementsByClassName('e-style-paragraph').item(0).removeAttribute('style');\n this.target.getElementsByClassName('e-style-paragraph').item(0).setAttribute('style', 'display:flex');\n }\n this.styleBasedOn.enabled = true;\n };\n /**\n * @private\n * @param {string} styleName - Specifies the style name.\n * @param {string} header - Specifies the header.\n * @returns {void}\n */\n StyleDialog.prototype.show = function (styleName, header) {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.isEdit = (!isNullOrUndefined(styleName) && styleName.length > 0) ? true : false;\n this.editStyleName = styleName;\n this.abstractList = new WAbstractList();\n var style = this.documentHelper.styles.findByName(styleName);\n this.style = !this.isEdit ? new WParagraphStyle() : style ? style : this.getStyle(styleName);\n localObj.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initStyleDialog(localObj, this.documentHelper.owner.enableRtl);\n }\n if (!this.isEdit) {\n this.styleType.value = 'Paragraph';\n }\n else {\n this.styleType.value = this.style instanceof WCharacterStyle ? 'Character' : 'Paragraph';\n }\n if (isNullOrUndefined(header)) {\n header = localObj.getConstant('Create New Style');\n }\n this.documentHelper.dialog2.header = header;\n this.documentHelper.dialog2.height = 'auto';\n this.documentHelper.dialog2.width = 'auto';\n this.documentHelper.dialog2.content = this.target;\n this.documentHelper.dialog2.buttons = [{\n click: this.onOkButtonClick,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-style-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-style-cancel' }\n }];\n this.toggleDisable();\n this.documentHelper.dialog2.dataBind();\n this.documentHelper.dialog2.beforeOpen = this.loadStyleDialog;\n this.documentHelper.dialog2.close = this.closeStyleDialog;\n this.documentHelper.dialog2.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog2.show();\n };\n StyleDialog.prototype.updateList = function () {\n var listId = this.style.paragraphFormat.listFormat.listId;\n if (listId > -1) {\n if (this.documentHelper.lists.filter(function (a) { return (a.listId === listId); }).length === 0) {\n this.documentHelper.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n else {\n this.documentHelper.lists = this.documentHelper.lists.filter(function (a) { return (a.listId !== listId); });\n this.documentHelper.lists.push(this.style.paragraphFormat.listFormat.list);\n }\n }\n if (this.abstractList.abstractListId !== -1) {\n this.documentHelper.abstractLists.push(this.abstractList);\n }\n };\n StyleDialog.prototype.createLinkStyle = function (name, isEdit) {\n var charStyle;\n if (isEdit) {\n charStyle = this.documentHelper.styles.findByName((name + ' Char'), 'Character');\n }\n else {\n charStyle = new WCharacterStyle();\n }\n charStyle.type = 'Character';\n charStyle.name = name + ' Char';\n charStyle.characterFormat = this.style.characterFormat.cloneFormat();\n charStyle.basedOn = this.style.basedOn;\n if (!isEdit) {\n this.documentHelper.styles.push(charStyle);\n }\n return this.documentHelper.styles.findByName(charStyle.name, 'Character');\n };\n /**\n * @private\n * @param {L10n} characterFormat - Specifies the character format\n * @returns {void}\n */\n StyleDialog.prototype.updateCharacterFormat = function (characterFormat) {\n if (!isNullOrUndefined(characterFormat)) {\n this.characterFormat = characterFormat.cloneFormat();\n }\n this.fontFamily.value = this.characterFormat.fontFamily;\n this.fontSize.value = this.characterFormat.fontSize;\n var color = this.characterFormat.fontColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n this.fontColor.value = (color === 'empty' || color === '#00000000') ? '#000000' : color;\n this.fontButtonClicked();\n };\n /**\n * @private\n * @returns {void}\n */\n StyleDialog.prototype.updateParagraphFormat = function (paragraphFOrmat) {\n if (!isNullOrUndefined(paragraphFOrmat)) {\n this.paragraphFormat = paragraphFOrmat.cloneFormat();\n this.textAlignment = paragraphFOrmat.textAlignment;\n this.lineSpacing = paragraphFOrmat.lineSpacing;\n }\n if (isNullOrUndefined(this.paragraphFormat)) {\n return;\n }\n if (this.textAlignment === 'Left') {\n if (!this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.add('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.textAlignment === 'Right') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (!this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.add('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.textAlignment === 'Center') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (!this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.add('e-active');\n }\n if (this.justify.classList.contains('e-active')) {\n this.justify.classList.remove('e-active');\n }\n }\n else if (this.textAlignment === 'Justify') {\n if (this.leftAlign.classList.contains('e-active')) {\n this.leftAlign.classList.remove('e-active');\n }\n if (this.rightAlign.classList.contains('e-active')) {\n this.rightAlign.classList.remove('e-active');\n }\n if (this.centerAlign.classList.contains('e-active')) {\n this.centerAlign.classList.remove('e-active');\n }\n if (!this.justify.classList.contains('e-active')) {\n this.justify.classList.add('e-active');\n }\n }\n if (this.lineSpacing === 1) {\n this.singleLineSpacing.classList.add('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.lineSpacing === 1.5) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.add('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n else if (this.lineSpacing === 2) {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.add('e-active');\n }\n else {\n this.singleLineSpacing.classList.remove('e-active');\n this.onePointFiveLineSpacing.classList.remove('e-active');\n this.doubleLineSpacing.classList.remove('e-active');\n }\n };\n StyleDialog.prototype.enableOrDisableOkButton = function () {\n if (!isNullOrUndefined(this.okButton)) {\n this.okButton.disabled = (this.styleNameElement.value === '');\n }\n };\n /**\n * @private\n */\n StyleDialog.prototype.getTypeValue = function (type) {\n var value = !isNullOrUndefined(type) ? type : this.styleType.value;\n if (value === 'Linked Style' || value === 'Paragraph') {\n return 'Paragraph';\n }\n else {\n return 'Character';\n }\n };\n StyleDialog.prototype.updateStyleNames = function (type, name) {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n var styles = this.documentHelper.styles.getStyleNames(type);\n var finalList = [];\n for (var i = 0; i < styles.length; i++) {\n var styleName = localValue.getConstant(styles[parseInt(i.toString(), 10)]);\n if (styleName === '') {\n styleName = styles[parseInt(i.toString(), 10)];\n }\n finalList.push(styleName);\n }\n this.styleParagraph.dataSource = finalList;\n this.styleParagraph.index = null;\n if (name) {\n this.styleBasedOn.dataSource = finalList.filter(function (e) { return e !== name; });\n this.styleBasedOn.index = null;\n var style = this.getStyle(name);\n if (style.basedOn instanceof String || isNullOrUndefined(style.basedOn)) {\n this.styleBasedOn.enabled = false;\n }\n else {\n this.styleBasedOn.index = styles.indexOf(style.basedOn.name) > -1 ? styles.indexOf(style.basedOn.name) : 0;\n }\n if (style.type === 'Paragraph') {\n if (!isNullOrUndefined(style.link)) {\n this.styleType.index = 2;\n }\n else {\n this.styleType.index = 0;\n }\n }\n else {\n this.styleType.index = 1;\n }\n if (!isNullOrUndefined(style.next)) {\n var nxtName = style.next.name;\n var index = 0;\n if (styles.indexOf(nxtName) > -1) {\n index = styles.indexOf(nxtName);\n }\n this.styleParagraph.index = index;\n this.isUserNextParaUpdated = (nxtName === name) ? false : true;\n }\n }\n else {\n this.styleBasedOn.dataSource = finalList;\n this.styleBasedOn.index = null;\n var basedOnIndex = 0;\n if (this.documentHelper.owner.selectionModule) {\n var styleName = void 0;\n if (type === 'Character') {\n styleName = this.documentHelper.owner.selectionModule.characterFormat.styleName;\n }\n else {\n styleName = this.documentHelper.owner.selectionModule.paragraphFormat.styleName;\n }\n basedOnIndex = styles.indexOf(styleName);\n }\n this.styleBasedOn.index = basedOnIndex;\n this.styleParagraph.index = 0;\n }\n if (this.isEdit) {\n this.styleType.enabled = false;\n }\n else {\n this.styleType.enabled = true;\n }\n // this.styleBasedOn.dataBind();\n // this.styleParagraph.dataBind();\n };\n StyleDialog.prototype.getStyle = function (styleName) {\n if (isNullOrUndefined(this.documentHelper.styles.findByName(styleName))) {\n this.documentHelper.owner.editorModule.createStyle(this.documentHelper.preDefinedStyles.get(styleName));\n }\n return this.documentHelper.styles.findByName(styleName);\n };\n /**\n * @private\n * @returns {void}\n */\n StyleDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var n = 0; n < this.target.childNodes.length; n++) {\n this.target.removeChild(this.target.childNodes[n]);\n n--;\n }\n this.target = undefined;\n }\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (this.paragraphFormat) {\n this.paragraphFormat.destroy();\n this.paragraphFormat = undefined;\n }\n if (this.fontColor) {\n this.fontColor.destroy();\n this.fontColor = undefined;\n }\n if (this.fontSize) {\n this.fontSize.destroy();\n this.fontSize = undefined;\n }\n if (this.fontFamily) {\n this.fontFamily.destroy();\n this.fontFamily = undefined;\n }\n if (this.styleType) {\n this.styleType.destroy();\n this.styleType = undefined;\n }\n if (this.styleBasedOn) {\n this.styleBasedOn.destroy();\n this.styleBasedOn = undefined;\n }\n if (this.styleParagraph) {\n this.styleParagraph.destroy();\n this.styleParagraph = undefined;\n }\n if (this.onlyThisDocument) {\n this.onlyThisDocument.destroy();\n }\n this.onlyThisDocument = undefined;\n if (this.template) {\n this.template.destroy();\n this.template = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.abstractList) {\n this.abstractList.destroy();\n this.abstractList = undefined;\n }\n if (this.numberingBulletDialog) {\n this.numberingBulletDialog.destroy();\n this.numberingBulletDialog = undefined;\n }\n if (this.styleDropdwn) {\n this.styleDropdwn.destroy();\n this.styleDropdwn = undefined;\n }\n if (this.textAlignment) {\n this.textAlignment = undefined;\n }\n if (this.lineSpacing) {\n this.lineSpacing = undefined;\n }\n if (this.leftIndent) {\n this.leftIndent = undefined;\n }\n if (this.beforeSpacing) {\n this.beforeSpacing = undefined;\n }\n if (this.afterSpacing) {\n this.afterSpacing = undefined;\n }\n this.documentHelper = undefined;\n };\n return StyleDialog;\n}());\nexport { StyleDialog };\n","import { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WList } from '../list/list';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WListLevel } from '../list/list-level';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * List view model implementation\n *\n * @private\n */\nvar ListViewModel = /** @class */ (function () {\n /**\n * @private\n */\n function ListViewModel() {\n this.listIn = undefined;\n this.levelNumberIn = undefined;\n this.dialog = undefined;\n this.levelNumber = 0;\n }\n Object.defineProperty(ListViewModel.prototype, \"levelNumber\", {\n get: function () {\n return this.levelNumberIn;\n },\n set: function (value) {\n this.levelNumberIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"list\", {\n get: function () {\n return this.listIn;\n },\n set: function (value) {\n if (isNullOrUndefined(value)) {\n this.createList();\n }\n else {\n this.listIn = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevel\", {\n get: function () {\n if (!isNullOrUndefined(this.list) && this.levelNumber >= 0 && this.levelNumber < 9) {\n if (!isNullOrUndefined(this.dialog.documentHelper.getAbstractListById(this.list.abstractListId))) {\n if (this.dialog.documentHelper.getAbstractListById(this.list.abstractListId).levels.length <= this.levelNumber) {\n this.dialog.documentHelper.layout.addListLevels(this.list.abstractList);\n }\n return this.dialog.documentHelper.getAbstractListById(this.list.abstractListId).levels[this.levelNumber];\n }\n else {\n this.dialog.documentHelper.lists.push(this.list);\n var abstractList = this.list.abstractList;\n if (!this.list.abstractList) {\n abstractList = new WAbstractList();\n abstractList.abstractListId = this.list.abstractListId;\n }\n this.dialog.documentHelper.abstractLists.push(abstractList);\n abstractList = this.dialog.documentHelper.getAbstractListById(this.list.abstractListId);\n if (abstractList.levels.length <= this.levelNumber) {\n this.dialog.documentHelper.layout.addListLevels(this.list.abstractList);\n }\n return abstractList.levels[this.levelNumber];\n }\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"listLevelPattern\", {\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.listLevelPattern;\n }\n return 'Arabic';\n },\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.listLevelPattern = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListViewModel.prototype, \"followCharacter\", {\n get: function () {\n if (!isNullOrUndefined(this.listLevel)) {\n return this.listLevel.followCharacter;\n }\n return 'None';\n },\n set: function (value) {\n if (!isNullOrUndefined(this.listLevel)) {\n this.listLevel.followCharacter = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n ListViewModel.prototype.createList = function () {\n this.list = new WList();\n this.list.listId = this.dialog.documentHelper.lists.length + 1;\n var abstractList = new WAbstractList();\n abstractList.abstractListId = this.dialog.documentHelper.abstractLists.length + 1;\n this.list.abstractListId = abstractList.abstractListId;\n this.list.abstractList = abstractList;\n this.dialog.documentHelper.lists.push(this.list);\n var listLevel = new WListLevel(abstractList);\n listLevel.paragraphFormat = new WParagraphFormat(listLevel);\n listLevel.paragraphFormat.leftIndent = 48;\n listLevel.paragraphFormat.firstLineIndent = -24;\n listLevel.characterFormat = new WCharacterFormat(listLevel);\n listLevel.numberFormat = '%1.';\n listLevel.startAt = 1;\n abstractList.levels.push(listLevel);\n this.dialog.documentHelper.abstractLists.push(abstractList);\n };\n ListViewModel.prototype.addListLevels = function () {\n if (!isNullOrUndefined(this.list) && !isNullOrUndefined(this.list.abstractListId)) {\n for (var i = this.dialog.documentHelper.getAbstractListById(this.list.abstractListId).levels.length; i < 9; i++) {\n var listLevelAdv = new WListLevel(this.dialog.documentHelper.getAbstractListById(this.list.abstractListId));\n listLevelAdv.characterFormat = new WCharacterFormat(listLevelAdv);\n listLevelAdv.paragraphFormat = new WParagraphFormat(listLevelAdv);\n listLevelAdv.paragraphFormat.leftIndent = (i + 1) * 48;\n listLevelAdv.paragraphFormat.firstLineIndent = -24;\n listLevelAdv.numberFormat = '%' + (i + 1).toString() + '.';\n listLevelAdv.listLevelPattern = 'Arabic';\n listLevelAdv.followCharacter = 'Tab';\n listLevelAdv.startAt = 1;\n listLevelAdv.restartLevel = i;\n (this.dialog.documentHelper).getAbstractListById(this.list.abstractListId).levels.push(listLevelAdv);\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ListViewModel.prototype.destroy = function () {\n if (this.dialog && this.listIn) {\n this.dialog.documentHelper.layout.clearInvalidList(this.listIn);\n }\n this.listIn = undefined;\n this.levelNumberIn = undefined;\n this.listLevelPattern = undefined;\n };\n return ListViewModel;\n}());\nexport { ListViewModel };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { WCharacterFormat, WParagraphFormat } from '../format/index';\nimport { WAbstractList } from '../list/abstract-list';\nimport { WLevelOverride } from '../list/level-override';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nimport { ListViewModel } from './list-view-model';\n/**\n * The List dialog is used to create or modify lists.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nvar ListDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ListDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n */\n this.dialog = undefined;\n this.target = undefined;\n /**\n * @private\n */\n this.documentHelper = undefined;\n this.viewModel = undefined;\n this.startAt = undefined;\n this.textIndent = undefined;\n this.alignedAt = undefined;\n this.listLevelElement = undefined;\n this.followNumberWith = undefined;\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n this.restartBy = undefined;\n /**\n * @private\n */\n this.isListCharacterFormat = false;\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onTextIndentChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevel.paragraphFormat.leftIndent = args.value;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onStartValueChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n if (!isNullOrUndefined(_this.viewModel) && !isNullOrUndefined(_this.viewModel.listLevel)) {\n _this.viewModel.listLevel.startAt = args.value;\n }\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onListLevelValueChanged = function (args) {\n _this.viewModel.levelNumber = parseInt(args.value.slice(args.value.length - 1), 10) - 1;\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n _this.updateDialogValues();\n _this.updateRestartLevelBox();\n };\n /**\n * @private\n * @param {any} args - Specifies the change event args.\n * @returns {void}\n */\n this.onNumberFormatChanged = function (args) {\n _this.viewModel.listLevel.numberFormat = args.target.value;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onAlignedAtValueChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevel.paragraphFormat.firstLineIndent =\n _this.alignedAt.value - _this.viewModel.listLevel.paragraphFormat.leftIndent;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onFollowCharacterValueChanged = function (args) {\n if (args.isInteracted) {\n _this.viewModel.followCharacter = args.value;\n }\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the change event args.\n * @returns {void}\n */\n this.onLevelPatternValueChanged = function (args) {\n if (!args.isInteracted) {\n return;\n }\n _this.viewModel.listLevelPattern = args.value;\n var numberFormat = '%' + (_this.levelNumber + 1).toString();\n var numberFormatTextBox = document.getElementById(_this.documentHelper.owner.containerId + '_numberFormat');\n if (_this.listLevel.listLevelPattern === 'Bullet') {\n _this.listLevel.numberFormat = String.fromCharCode(61623);\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n }\n else {\n if (_this.listLevel.listLevelPattern === 'None') {\n _this.listLevel.numberFormat = '';\n }\n if (!_this.listLevel.numberFormat.match(numberFormat) && _this.listLevel.listLevelPattern !== 'None') {\n _this.listLevel.numberFormat = numberFormat + '.';\n }\n numberFormatTextBox.value = _this.listLevel.numberFormat;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadListDialog = function () {\n _this.documentHelper.updateFocus();\n if (isNullOrUndefined(_this.documentHelper.owner)) {\n return;\n }\n _this.viewModel = new ListViewModel();\n _this.viewModel.dialog = _this;\n if (_this.documentHelper.selection.paragraphFormat.listLevelNumber > 0) {\n _this.viewModel.levelNumber = _this.documentHelper.selection.paragraphFormat.listLevelNumber;\n }\n _this.viewModel.list = _this.documentHelper.selection.paragraphFormat.getList();\n if (isNullOrUndefined(_this.listLevel)) {\n return;\n }\n _this.updateDialogValues();\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.showFontDialog = function () {\n _this.documentHelper.owner.fontDialogModule.showFontDialog(_this.listLevel.characterFormat, true);\n };\n /**\n * @private\n * @returns {void}\n */\n this.onApplyList = function () {\n if (!isNullOrUndefined(_this.owner)) {\n _this.documentHelper.selection.paragraphFormat.setList(_this.list, true);\n }\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.disposeBindingForListUI();\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n _this.isListCharacterFormat = false;\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeListDialog = function () {\n _this.disposeBindingForListUI();\n _this.documentHelper.updateFocus();\n _this.isListCharacterFormat = false;\n };\n this.documentHelper = documentHelper;\n this.viewModel = new ListViewModel();\n }\n Object.defineProperty(ListDialog.prototype, \"listLevel\", {\n /**\n * @private\n * @returns {WListLevel} Returns list level\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.listLevel;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"list\", {\n /**\n * @private\n * @returns {WList} Returns list\n */\n get: function () {\n if (!isNullOrUndefined(this.viewModel)) {\n return this.viewModel.list;\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"levelNumber\", {\n /**\n * @private\n * @returns {number} Returns level number\n */\n get: function () {\n if (this.listLevel.ownerBase instanceof WLevelOverride) {\n return this.listLevel.ownerBase.levelNumber;\n /* eslint-disable-next-line max-len */\n }\n else if (this.listLevel.ownerBase instanceof WAbstractList && !isNullOrUndefined(this.listLevel.ownerBase.levels)) {\n return this.listLevel.ownerBase.levels.indexOf(this.listLevel);\n }\n else {\n return -1;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ListDialog.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @returns {string} Returns module name\n */\n ListDialog.prototype.getModuleName = function () {\n return 'ListDialog';\n };\n /**\n * @private\n * @returns {void}\n */\n ListDialog.prototype.showListDialog = function () {\n var locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n locale.setLocale(this.documentHelper.owner.locale);\n var bindEvent = false;\n if (!this.target) {\n this.initListDialog(locale, this.documentHelper.owner.enableRtl);\n bindEvent = true;\n }\n this.isListCharacterFormat = true;\n this.documentHelper.dialog2.header = locale.getConstant('Define new Multilevel list');\n this.documentHelper.dialog2.height = 'auto';\n this.documentHelper.dialog2.width = 'auto';\n this.documentHelper.dialog2.content = this.target;\n var buttonClass;\n var isRtl = this.documentHelper.owner.enableRtl;\n if (isRtl) {\n buttonClass = 'e-flat e-list-dlg-font e-de-dlg-target.e-de-rtl e-font-rtl';\n }\n else {\n buttonClass = 'e-flat e-list-dlg-font e-font';\n }\n this.documentHelper.dialog2.buttons = [{\n click: this.showFontDialog,\n buttonModel: { content: locale.getConstant('Font'), cssClass: buttonClass }\n }, {\n click: this.onApplyList,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-list-dlg', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-list-dlg' }\n }];\n var dialogElement = this.documentHelper.dialog2.element;\n this.documentHelper.dialog2.dataBind();\n if (bindEvent) {\n this.wireAndBindEvent(locale, isRtl);\n }\n this.documentHelper.dialog2.beforeOpen = this.loadListDialog;\n this.documentHelper.dialog2.close = this.closeListDialog;\n this.documentHelper.dialog2.position = { X: 'center', Y: 'top' };\n this.documentHelper.dialog2.show();\n };\n /**\n * Shows the table properties dialog\n *\n * @private\n * @param {L10n} locale - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n ListDialog.prototype.initListDialog = function (locale, isRtl) {\n var containerId = this.documentHelper.owner.containerId;\n var id = containerId + '_insert_list';\n this.target = createElement('div', { id: id, className: 'e-de-list-dlg' });\n var listLevelDiv = createElement('div', { innerHTML: '' });\n this.target.appendChild(listLevelDiv);\n var div = createElement('div');\n var divStyle;\n if (isRtl) {\n divStyle = '
      ';\n }\n else {\n divStyle = '
      ';\n }\n var numberStyleDiv = createElement('div', { innerHTML: divStyle + '' });\n div.appendChild(numberStyleDiv);\n this.numberFormatDiv = createElement('div', { className: 'e-de-list-dlg-subdiv', innerHTML: '
      ' });\n div.appendChild(this.numberFormatDiv);\n this.target.appendChild(div);\n var indentsDivLabelStyle;\n if (isRtl) {\n indentsDivLabelStyle = 'display:block;position:relative; ';\n }\n else {\n indentsDivLabelStyle = 'display:block; ';\n }\n var indentsDiv = createElement('div', { innerHTML: divStyle + '
      ' });\n this.target.appendChild(indentsDiv);\n };\n ListDialog.prototype.wireAndBindEvent = function (locale, isRtl) {\n var containerId = this.documentHelper.owner.containerId;\n if (isRtl) {\n document.getElementById('e-de-list-dlg-div').classList.add('e-de-rtl');\n this.numberFormatDiv.classList.add('e-de-rtl');\n }\n var startAtTextBox = document.getElementById(containerId + '_startAt');\n startAtTextBox.setAttribute('aria-label', 'startAt');\n var textIndentAtTextBox = document.getElementById(containerId + '_textIndent');\n textIndentAtTextBox.setAttribute('aria-label', 'textIndent');\n var alignedAtTextBox = document.getElementById(containerId + '_alignedAt');\n alignedAtTextBox.setAttribute('aria-label', 'alignedAt');\n this.startAt = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 50,\n width: '180px',\n enablePersistence: false\n });\n this.startAt.addEventListener('change', this.onStartValueChanged);\n this.startAt.appendTo(startAtTextBox);\n this.textIndent = new NumericTextBox({\n format: '#',\n decimals: 0,\n min: 0,\n max: 1584,\n width: '180px',\n step: 4,\n enablePersistence: false\n });\n this.textIndent.addEventListener('change', this.onTextIndentChanged);\n this.textIndent.appendTo(textIndentAtTextBox);\n this.alignedAt = new NumericTextBox({\n format: '#',\n max: 1584,\n step: 6,\n width: '180px',\n enablePersistence: false\n });\n this.alignedAt.addEventListener('change', this.onAlignedAtValueChanged);\n this.alignedAt.appendTo(alignedAtTextBox);\n var listLevel = document.getElementById(containerId + '_listLevel');\n this.listLevelElement = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl, change: this.onListLevelValueChanged });\n this.listLevelElement.appendTo(listLevel);\n var followCharacterElement = document.getElementById(containerId + '_followCharacter');\n this.followNumberWith = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl, change: this.onFollowCharacterValueChanged });\n this.followNumberWith.appendTo(followCharacterElement);\n var numberStyleEle = document.getElementById(containerId + '_numberStyle');\n this.numberStyle = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl, change: this.onLevelPatternValueChanged });\n this.numberStyle.appendTo(numberStyleEle);\n this.numberFormat = document.getElementById(containerId + '_numberFormat');\n this.numberFormat.addEventListener('change', this.onNumberFormatChanged);\n var restartElement = document.getElementById(containerId + '_restartBy');\n this.restartBy = new DropDownList({ popupHeight: '150px', width: '180px', enableRtl: isRtl });\n this.restartBy.appendTo(restartElement);\n var button = document.getElementById(containerId + '_list_info');\n this.formatInfoToolTip = new Tooltip({ width: 200 });\n this.formatInfoToolTip.content = locale.getConstant('Number format tooltip information');\n this.formatInfoToolTip.position = 'RightTop';\n this.formatInfoToolTip.appendTo(button);\n };\n ListDialog.prototype.updateRestartLevelBox = function () {\n var containerId = this.documentHelper.owner.containerId;\n var listLevel = document.getElementById(containerId + '_listLevel');\n var restartBy = document.getElementById(containerId + '_restartBy');\n for (var i = 0; i < restartBy.options.length; i) {\n restartBy.options.remove(i);\n }\n if (listLevel.selectedIndex === 0) {\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n else {\n for (var i = listLevel.selectedIndex; i > 0; i--) {\n var option_1 = document.createElement('option');\n option_1.value = 'Level ' + i;\n option_1.innerHTML = 'Level ' + i;\n restartBy.appendChild(option_1);\n }\n var option = document.createElement('option');\n option.value = 'No Restart';\n option.innerHTML = 'No Restart';\n restartBy.appendChild(option);\n }\n restartBy.selectedIndex = 0;\n };\n ListDialog.prototype.listPatternConverter = function (listLevelPattern) {\n switch (listLevelPattern) {\n case 'Arabic': return 0;\n case 'UpRoman': return 1;\n case 'LowRoman': return 2;\n case 'UpLetter': return 3;\n case 'LowLetter': return 4;\n case 'Number': return 5;\n case 'LeadingZero': return 6;\n case 'Bullet': return 7;\n case 'Ordinal': return 8;\n case 'OrdinalText': return 9;\n case 'Special': return 10;\n case 'FarEast': return 11;\n default: return 12;\n }\n };\n ListDialog.prototype.followCharacterConverter = function (followCharacter) {\n switch (followCharacter) {\n case 'Tab':\n return 0;\n case 'Space':\n return 1;\n default:\n return 2;\n }\n };\n ListDialog.prototype.calculateAlignedAt = function () {\n if (this.viewModel.listLevel.paragraphFormat.firstLineIndent < 0) {\n return this.viewModel.listLevel.paragraphFormat.leftIndent + this.viewModel.listLevel.paragraphFormat.firstLineIndent;\n }\n else {\n return this.viewModel.listLevel.paragraphFormat.firstLineIndent;\n }\n };\n ListDialog.prototype.updateDialogValues = function () {\n if (isNullOrUndefined(this.listLevel.characterFormat)) {\n this.listLevel.characterFormat = new WCharacterFormat(this.viewModel.listLevel);\n }\n if (isNullOrUndefined(this.listLevel.paragraphFormat)) {\n this.listLevel.paragraphFormat = new WParagraphFormat(this.viewModel.listLevel);\n }\n //const restartByTextBox: HTMLSelectElement = document.getElementById(this.documentHelper.owner.containerId + '_restartBy') as HTMLSelectElement;\n if (!isNullOrUndefined(this.viewModel) && !isNullOrUndefined(this.viewModel.listLevel)) {\n this.startAt.value = this.viewModel.listLevel.startAt;\n this.textIndent.value = this.viewModel.listLevel.paragraphFormat.leftIndent;\n this.alignedAt.value = this.calculateAlignedAt();\n this.followNumberWith.index = this.followCharacterConverter(this.viewModel.followCharacter);\n this.numberFormat.value = this.viewModel.listLevel.numberFormat;\n this.numberFormat.style.fontFamily = this.viewModel.listLevel.characterFormat.fontFamily;\n this.numberStyle.index = this.listPatternConverter(this.viewModel.listLevelPattern);\n this.listLevelElement.index = this.viewModel.levelNumber;\n //this.viewModel.levelNumber = this.viewModel.levelNumber;\n }\n };\n /**\n * @param {WCharacterFormat} format - Specifies the character format.\n * @private\n * @returns {void}\n */\n ListDialog.prototype.updateCharacterFormat = function (format) {\n this.listLevel.characterFormat.copyFormat(format);\n };\n ListDialog.prototype.disposeBindingForListUI = function () {\n this.followNumberWith.index = -1;\n this.numberFormat.value = ' ';\n this.numberStyle.index = -1;\n this.listLevelElement.index = -1;\n this.restartBy.index = -1;\n this.viewModel.destroy();\n };\n /**\n * @private\n * @returns {void}\n */\n ListDialog.prototype.destroy = function () {\n if (this.alignedAt) {\n this.alignedAt.destroy();\n }\n this.alignedAt = undefined;\n this.dialog = undefined;\n if (this.followNumberWith) {\n this.followNumberWith.destroy();\n }\n this.followNumberWith = undefined;\n if (this.listLevelElement) {\n this.listLevelElement.destroy();\n }\n this.listLevelElement = undefined;\n if (this.textIndent) {\n this.textIndent.destroy();\n }\n this.textIndent = undefined;\n if (this.startAt) {\n this.startAt.destroy();\n }\n this.startAt = undefined;\n if (this.numberStyle) {\n this.numberStyle.destroy();\n }\n this.numberStyle = undefined;\n this.numberFormat = undefined;\n if (this.restartBy) {\n this.restartBy.destroy();\n }\n this.restartBy = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var l = 0; l < this.target.childNodes.length; l++) {\n this.target.removeChild(this.target.childNodes[parseInt(l.toString(), 10)]);\n l--;\n }\n this.target = undefined;\n }\n this.documentHelper = undefined;\n this.viewModel = undefined;\n };\n return ListDialog;\n}());\nexport { ListDialog };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { createElement, L10n } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { WParagraphFormat } from '../index';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { Tab } from '@syncfusion/ej2-navigations';\n/**\n * The Paragraph dialog is used to modify formatting of selected paragraphs.\n */\nvar ParagraphDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ParagraphDialog(documentHelper) {\n var _this = this;\n //paragraph Format properties\n this.leftIndent = undefined;\n this.rightIndent = undefined;\n this.beforeSpacing = undefined;\n this.afterSpacing = undefined;\n this.spaceBeforeAuto = false;\n this.spaceAfterAuto = false;\n this.textAlignment = undefined;\n this.paraOutlineLevel = undefined;\n this.firstLineIndent = undefined;\n this.lineSpacingIn = undefined;\n this.lineSpacingType = undefined;\n this.paragraphFormat = undefined;\n this.bidi = undefined;\n this.contextualSpacing = undefined;\n this.isStyleDialog = false;\n this.directionDiv = undefined;\n this.keepWithNextValue = undefined;\n this.keepLineTogetherValue = undefined;\n this.widowControlValue = undefined;\n this.tabObj = undefined;\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.keyUpParagraphSettings = function (event) {\n if (event.keyCode === 13) {\n _this.applyParagraphFormat();\n }\n };\n /**\n * @private\n * @param {KeyboardEvent} event - Specifies the event args.\n * @returns {void}\n */\n this.changeBeforeSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.beforeSpacingIn.element.value = local.getConstant('Auto');\n _this.beforeSpacingIn.step = 1;\n _this.spaceBeforeAuto = true;\n _this.beforeSpacing = 5;\n }\n else {\n _this.beforeSpacing = event.value;\n _this.beforeSpacingIn.step = 6;\n _this.spaceBeforeAuto = false;\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.focusBeforeSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.beforeSpacingIn.element.value = local.getConstant('Auto');\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.blurBeforeSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n var proxy_1 = _this.beforeSpacingIn;\n setTimeout(function () {\n proxy_1.element.value = local.getConstant('Auto');\n }, 0);\n }\n };\n /**\n * @private\n * @param {ClickEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.clickBeforeSpacing = function () {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (_this.beforeSpacingIn.element.value === '-1.0')\n _this.beforeSpacingIn.element.value = local.getConstant('Auto');\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeAfterSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.afterSpacingIn.element.value = local.getConstant('Auto');\n _this.afterSpacingIn.step = 1;\n _this.spaceAfterAuto = true;\n _this.afterSpacing = 5;\n }\n else {\n _this.afterSpacing = event.value;\n _this.afterSpacingIn.step = 6;\n _this.spaceAfterAuto = false;\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.focusAfterSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n _this.afterSpacingIn.element.value = local.getConstant('Auto');\n }\n };\n /**\n * @private\n * @param {NumericFocusEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.blurAfterSpacing = function (event) {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (event.value === -1) {\n var proxy_2 = _this.afterSpacingIn;\n setTimeout(function () {\n proxy_2.element.value = local.getConstant('Auto');\n }, 0);\n }\n };\n /**\n * @private\n * @param {ClickEventArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.clickAfterSpacing = function () {\n var local = new L10n('documenteditor', _this.documentHelper.owner.defaultLocale);\n local.setLocale(_this.documentHelper.owner.locale);\n if (_this.afterSpacingIn.element.value === '-1.0')\n _this.afterSpacingIn.element.value = local.getConstant('Auto');\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeLeftIndent = function (event) {\n _this.leftIndent = event.value;\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeRightIndent = function (event) {\n _this.rightIndent = event.value;\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeLineSpacingValue = function (event) {\n _this.lineSpacingIn = event.value;\n };\n /**\n * @private\n * @param {NumericChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeFirstLineIndent = function (event) {\n _this.firstLineIndent = event.value;\n if (_this.special.index === 2) {\n _this.firstLineIndent = -(_this.firstLineIndent);\n _this.leftIndent = _this.leftIndentIn.value + event.value;\n }\n };\n /**\n * @private\n * @param {DropDownChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeByTextAlignment = function (args) {\n _this.textAlignment = args.value;\n };\n /**\n * @private\n * @param {DropDownChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeByOutlineLevel = function (args) {\n _this.paraOutlineLevel = args.value;\n };\n /**\n * @private\n * @param {ChangeArgs} event - Specifies change event args.\n * @returns {void}\n */\n this.changeBidirectional = function (event) {\n if (event.value === 'ltr') {\n _this.rtlButton.checked = !_this.ltrButton.checked;\n _this.bidi = false;\n }\n else {\n _this.ltrButton.checked = !_this.rtlButton.checked;\n _this.bidi = true;\n }\n _this.changeAlignmentByBidi();\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeContextualSpacing = function (args) {\n _this.contextualSpacing = args.checked;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeKeepWithNext = function (args) {\n _this.keepWithNextValue = args.checked;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeKeepLinesTogether = function (args) {\n _this.keepLineTogetherValue = args.checked;\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies change event args.\n * @returns {void}\n */\n this.changeWidowControl = function (args) {\n _this.widowControlValue = args.checked;\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeByValue = function () {\n var paragraphFormat = _this.documentHelper.selection.paragraphFormat;\n switch (_this.special.index) {\n case 0:\n if (paragraphFormat.firstLineIndent !== 0) {\n _this.byIn.value = 0;\n _this.leftIndent = _this.leftIndentIn.value;\n }\n break;\n case 1:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n _this.byIn.value = 0.1;\n }\n else if (paragraphFormat.firstLineIndent < 0) {\n _this.byIn.value = -(paragraphFormat.firstLineIndent);\n if (Math.abs(paragraphFormat.firstLineIndent) <= _this.leftIndent) {\n _this.leftIndent = paragraphFormat.firstLineIndent + _this.leftIndent;\n }\n }\n break;\n case 2:\n if (paragraphFormat.firstLineIndent === 0 || isNullOrUndefined(paragraphFormat.firstLineIndent)) {\n paragraphFormat.firstLineIndent = -0.1;\n }\n else if (paragraphFormat.firstLineIndent > 0) {\n _this.byIn.value = (paragraphFormat.firstLineIndent);\n if (!isNullOrUndefined(_this.leftIndent)) {\n _this.leftIndent = _this.leftIndent + paragraphFormat.firstLineIndent;\n }\n else {\n _this.leftIndent = paragraphFormat.firstLineIndent;\n }\n }\n break;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeBySpacing = function () {\n if (isNullOrUndefined(_this.lineSpacing)) {\n return;\n }\n switch (_this.lineSpacing.index) {\n case 0:\n _this.lineSpacingType = 'AtLeast';\n _this.atIn.value = 12;\n break;\n case 1:\n _this.lineSpacingType = 'Exactly';\n _this.atIn.value = 12;\n break;\n case 2:\n _this.lineSpacingType = 'Multiple';\n _this.atIn.value = 1;\n break;\n }\n };\n /* eslint-enable */\n /**\n * @private\n * @returns {void}\n */\n this.loadParagraphDialog = function () {\n if (_this.isStyleDialog) {\n _this.directionDiv.classList.add('e-de-disabledbutton');\n }\n else {\n _this.directionDiv.classList.remove('e-de-disabledbutton');\n }\n var selectionFormat;\n if (_this.paragraphFormat) {\n selectionFormat = _this.paragraphFormat;\n }\n else {\n selectionFormat = _this.documentHelper.selection.paragraphFormat;\n }\n var alignValue = _this.getAlignmentValue(selectionFormat.textAlignment);\n _this.alignment.index = alignValue;\n var outlineValue = _this.getOutlineValue(selectionFormat.outlineLevel);\n _this.outlineLevel.index = outlineValue;\n if (_this.isHeadingStyle()) {\n _this.outlineLevel.readonly = true;\n }\n else {\n _this.outlineLevel.readonly = false;\n }\n if (selectionFormat.spaceBeforeAuto) {\n _this.beforeSpacingIn.value = -1;\n }\n else {\n if (selectionFormat.beforeSpacing === -1) {\n _this.beforeSpacingIn.value = undefined;\n }\n else {\n _this.beforeSpacingIn.value = selectionFormat.beforeSpacing;\n }\n }\n if (selectionFormat.spaceAfterAuto) {\n _this.afterSpacingIn.value = -1;\n }\n else {\n if (selectionFormat.afterSpacing === -1) {\n _this.afterSpacingIn.value = undefined;\n }\n else {\n _this.afterSpacingIn.value = selectionFormat.afterSpacing;\n }\n }\n _this.leftIndentIn.value = selectionFormat.leftIndent;\n _this.rightIndentIn.value = selectionFormat.rightIndent;\n _this.byIn.value = Math.abs(selectionFormat.firstLineIndent);\n var lineSpaceValue = _this.lineSpacing.index;\n _this.keepWithNextValue = undefined;\n _this.keepLineTogetherValue = undefined;\n _this.widowControlValue = undefined;\n if (selectionFormat.firstLineIndent > 0) {\n _this.special.index = 1;\n }\n else if (selectionFormat.firstLineIndent < 0) {\n _this.special.index = 2;\n _this.leftIndentIn.value = selectionFormat.leftIndent - _this.byIn.value;\n }\n if (selectionFormat.lineSpacingType === 'AtLeast') {\n lineSpaceValue = 0;\n }\n else if (selectionFormat.lineSpacingType === 'Exactly') {\n lineSpaceValue = 1;\n }\n else {\n lineSpaceValue = 2;\n }\n _this.lineSpacing.index = lineSpaceValue;\n _this.atIn.value = selectionFormat.lineSpacing;\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n if (selectionFormat.bidi) {\n _this.rtlButton.checked = true;\n _this.ltrButton.checked = false;\n }\n else {\n _this.ltrButton.checked = true;\n _this.rtlButton.checked = false;\n }\n if (isNullOrUndefined(selectionFormat.keepWithNext)) {\n _this.keepWithNext.indeterminate = true;\n }\n else {\n _this.keepWithNext.checked = selectionFormat.keepWithNext;\n }\n if (isNullOrUndefined(selectionFormat.keepLinesTogether)) {\n _this.keepLinesTogether.indeterminate = true;\n }\n else {\n _this.keepLinesTogether.checked = selectionFormat.keepLinesTogether;\n }\n if (isNullOrUndefined(selectionFormat.widowControl)) {\n _this.widowControlIn.indeterminate = true;\n }\n else {\n _this.widowControlIn.checked = selectionFormat.widowControl;\n }\n _this.contextSpacing.checked = selectionFormat.contextualSpacing;\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyParagraphFormat = function () {\n var paraFormat;\n var isApply;\n if (_this.paragraphFormat) {\n paraFormat = _this.paragraphFormat;\n isApply = false;\n }\n else {\n paraFormat = new WParagraphFormat();\n paraFormat.borders = undefined;\n isApply = true;\n }\n if (!isNullOrUndefined(_this.beforeSpacing)) {\n paraFormat.beforeSpacing = _this.beforeSpacing;\n }\n if (!isNullOrUndefined(_this.afterSpacing)) {\n paraFormat.afterSpacing = _this.afterSpacing;\n }\n if (!isNullOrUndefined(_this.spaceBeforeAuto)) {\n paraFormat.spaceBeforeAuto = _this.spaceBeforeAuto;\n }\n if (!isNullOrUndefined(_this.spaceAfterAuto)) {\n paraFormat.spaceAfterAuto = _this.spaceAfterAuto;\n }\n if (!isNullOrUndefined(_this.lineSpacingType)) {\n paraFormat.lineSpacingType = _this.lineSpacingType;\n }\n if (!isNullOrUndefined(_this.leftIndent)) {\n paraFormat.leftIndent = _this.leftIndent;\n }\n if (!isNullOrUndefined(_this.rightIndent)) {\n paraFormat.rightIndent = _this.rightIndent;\n }\n if (!isNullOrUndefined(_this.lineSpacingIn)) {\n paraFormat.lineSpacing = _this.lineSpacingIn;\n }\n if (!isNullOrUndefined(_this.firstLineIndent)) {\n paraFormat.firstLineIndent = Math.abs(_this.firstLineIndent);\n if (_this.special.index === 2) {\n paraFormat.firstLineIndent = -paraFormat.firstLineIndent;\n paraFormat.leftIndent = _this.leftIndentIn.value + _this.byIn.value;\n }\n }\n if (!isNullOrUndefined(_this.paraOutlineLevel)) {\n paraFormat.outlineLevel = _this.paraOutlineLevel;\n }\n if (!isNullOrUndefined(_this.bidi)) {\n paraFormat.bidi = _this.bidi;\n }\n if (!isNullOrUndefined(_this.textAlignment)) {\n var textAlignment = _this.textAlignment;\n if (paraFormat.bidi) {\n if (textAlignment === 'Right') {\n textAlignment = 'Left';\n }\n else if (textAlignment === 'Left') {\n textAlignment = 'Right';\n }\n }\n paraFormat.textAlignment = textAlignment;\n }\n if (!isNullOrUndefined(_this.contextualSpacing)) {\n paraFormat.contextualSpacing = _this.contextualSpacing;\n }\n if (!isNullOrUndefined(_this.keepWithNextValue)) {\n paraFormat.keepWithNext = _this.keepWithNextValue;\n }\n else if (_this.documentHelper.selection.paragraphFormat.keepWithNext) {\n paraFormat.keepWithNext = _this.documentHelper.selection.paragraphFormat.keepWithNext;\n }\n if (!isNullOrUndefined(_this.keepLineTogetherValue)) {\n paraFormat.keepLinesTogether = _this.keepLineTogetherValue;\n }\n else if (_this.documentHelper.selection.paragraphFormat.keepLinesTogether) {\n paraFormat.keepLinesTogether = _this.documentHelper.selection.paragraphFormat.keepLinesTogether;\n }\n if (!isNullOrUndefined(_this.widowControlValue)) {\n paraFormat.widowControl = _this.widowControlValue;\n }\n else if (_this.documentHelper.selection.paragraphFormat.widowControl) {\n paraFormat.widowControl = _this.documentHelper.selection.paragraphFormat.widowControl;\n }\n if (isApply) {\n _this.onParagraphFormat(paraFormat);\n }\n else {\n _this.documentHelper.owner.styleDialogModule.updateParagraphFormat();\n }\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.openTabDialog = function () {\n _this.documentHelper.hideDialog();\n _this.documentHelper.owner.tabDialogModule.show();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeParagraphDialog = function () {\n _this.leftIndent = undefined;\n _this.afterSpacing = undefined;\n _this.beforeSpacing = undefined;\n _this.firstLineIndent = undefined;\n _this.textAlignment = undefined;\n _this.paraOutlineLevel = undefined;\n _this.rightIndent = undefined;\n _this.lineSpacingIn = undefined;\n _this.lineSpacingType = undefined;\n _this.paragraphFormat = undefined;\n _this.documentHelper.hideDialog();\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(ParagraphDialog.prototype, \"owner\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @returns {string} Returns module name\n */\n ParagraphDialog.prototype.getModuleName = function () {\n return 'ParagraphDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @returns {void}\n */\n ParagraphDialog.prototype.initParagraphDialog = function (locale) {\n var tabContainer = createElement('div');\n var ejtab = createElement('div');\n var instance = this;\n var ownerId = this.documentHelper.owner.containerId;\n //let id: string = ownerId + '_paragraph_dialog';\n var indentContainer = createElement('div', { className: 'e-de-dlg-tab-first-child e-de-para-dlg-container' });\n this.target = tabContainer;\n tabContainer.appendChild(ejtab);\n var div = createElement('div', { styles: 'width:400px;' });\n var generalDiv = createElement('div');\n var genLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('General') });\n generalDiv.appendChild(genLabel);\n var alignmentWholeDiv = createElement('div', { className: 'e-de-container-row' });\n generalDiv.appendChild(alignmentWholeDiv);\n var alignmentDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n alignmentWholeDiv.appendChild(alignmentDiv);\n var alignment = createElement('select', {\n id: ownerId + '_Alignment',\n innerHTML: ''\n });\n var outlineLevel = createElement('select', {\n id: ownerId + '_Outline',\n innerHTML: ''\n });\n alignmentDiv.appendChild(alignment);\n alignmentDiv.setAttribute('aria-labelledby', alignment.innerText);\n alignmentDiv.appendChild(outlineLevel);\n alignmentDiv.setAttribute('aria-labelledby', outlineLevel.innerText);\n var dirLabel = createElement('div', {\n className: 'e-de-dlg-sub-header', innerHTML: locale.getConstant('Direction')\n });\n this.directionDiv = createElement('div', { className: 'e-de-container-row' });\n var rtlDiv = createElement('div', { className: 'e-de-rtl-btn-div' });\n var rtlInputELe = createElement('input', { id: ownerId + '_rtlEle' });\n rtlDiv.appendChild(rtlInputELe);\n this.directionDiv.appendChild(rtlDiv);\n var isRtl = this.documentHelper.owner.enableRtl;\n if (isRtl) {\n rtlDiv.classList.add('e-de-rtl');\n }\n var ltrDiv = createElement('div', { className: 'e-de-ltr-btn-div' });\n var ltrInputELe = createElement('input', { id: ownerId + '_ltrEle' });\n ltrDiv.appendChild(ltrInputELe);\n this.directionDiv.appendChild(ltrDiv);\n generalDiv.appendChild(dirLabel);\n generalDiv.appendChild(this.directionDiv);\n this.rtlButton = new RadioButton({\n label: locale.getConstant('Right-to-left'), enableRtl: isRtl,\n value: 'rtl', cssClass: 'e-small', change: this.changeBidirectional\n });\n this.rtlButton.appendTo(rtlInputELe);\n rtlInputELe.setAttribute('aria-label', locale.getConstant('Right-to-left'));\n this.ltrButton = new RadioButton({\n label: locale.getConstant('Left-to-right'), enableRtl: isRtl,\n value: 'ltr', cssClass: 'e-small', change: this.changeBidirectional\n });\n this.ltrButton.appendTo(ltrInputELe);\n ltrInputELe.setAttribute('aria-label', locale.getConstant('Left-to-right'));\n var indentionWholeDiv = createElement('div');\n var indentLabel = createElement('div', { className: 'e-de-para-dlg-heading',\n innerHTML: locale.getConstant('Indentation')\n });\n indentionWholeDiv.appendChild(indentLabel);\n var indentionSubDiv1 = createElement('div', { className: 'e-de-container-row' });\n indentionWholeDiv.appendChild(indentionSubDiv1);\n var indentionSubDiv2 = createElement('div', { className: 'e-de-container-row' });\n indentionWholeDiv.appendChild(indentionSubDiv2);\n var beforeTextDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n indentionSubDiv1.appendChild(beforeTextDiv);\n var afterTextDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n indentionSubDiv1.appendChild(afterTextDiv);\n var specialDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n indentionSubDiv2.appendChild(specialDiv);\n var byDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n indentionSubDiv2.appendChild(byDiv);\n var spacingDiv = createElement('div');\n var leftSpacingDiv = createElement('div');\n spacingDiv.appendChild(leftSpacingDiv);\n // let contextSpacingStyles: string = 'float:left';\n // if (isRtl) {\n // contextSpacingStyles = 'float:right;';\n // }\n var contextSpacingDiv = createElement('div', { className: 'e-de-container-row' });\n spacingDiv.appendChild(contextSpacingDiv);\n var rightSpacingDiv = createElement('div', { className: 'e-de-container-row' });\n spacingDiv.appendChild(rightSpacingDiv);\n var contextInputEle = createElement('input', {\n attrs: { type: 'checkbox' },\n id: ownerId + '_contextSpacing'\n });\n contextSpacingDiv.appendChild(contextInputEle);\n var leftIndent = createElement('input', { id: ownerId + '_leftIndent', attrs: { 'type': 'text' } });\n var rightIndent = createElement('input', { id: ownerId + '_rightIndent', attrs: { 'type': 'text' } });\n beforeTextDiv.appendChild(leftIndent);\n beforeTextDiv.setAttribute('aria-labelledby', locale.getConstant('Indent from left'));\n afterTextDiv.appendChild(rightIndent);\n afterTextDiv.setAttribute('aria-labelledby', locale.getConstant('Indent from right'));\n var special = createElement('select', {\n id: ownerId + '_special',\n innerHTML: ' '\n });\n var by = createElement('input', { id: ownerId + '_By', attrs: { 'type': 'text' } });\n specialDiv.setAttribute('aria-labelledby', 'Special');\n specialDiv.appendChild(special);\n byDiv.appendChild(by);\n byDiv.setAttribute('aria-labelledby', 'By');\n var spaceLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Spacing') });\n var spacingWholeDiv = createElement('div', { className: 'e-de-container-row' });\n var beforeSpacingWholeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var beforeSpacing = createElement('input', { id: ownerId + '_beforeSpacing', attrs: { 'type': 'text' } });\n var afterSpacingWholeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var afterSpacing = createElement('input', { id: ownerId + '_afterSpacing', attrs: { 'type': 'text' } });\n leftSpacingDiv.appendChild(spaceLabel);\n leftSpacingDiv.appendChild(spacingWholeDiv);\n beforeSpacingWholeDiv.appendChild(beforeSpacing);\n spacingWholeDiv.appendChild(beforeSpacingWholeDiv);\n afterSpacingWholeDiv.appendChild(afterSpacing);\n spacingWholeDiv.appendChild(afterSpacingWholeDiv);\n var lineSpacingDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var lineSpacing = createElement('select', {\n id: ownerId + '_lineSpacing',\n innerHTML: ''\n });\n var lineTypeDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var lineSpacingAt = createElement('input', { id: ownerId + '_lineSpacingAt', attrs: { 'type': 'text' } });\n lineSpacingDiv.appendChild(lineSpacing);\n rightSpacingDiv.appendChild(lineSpacingDiv);\n lineTypeDiv.appendChild(lineSpacingAt);\n rightSpacingDiv.appendChild(lineTypeDiv);\n div.appendChild(generalDiv);\n div.appendChild(indentionWholeDiv);\n div.appendChild(spacingDiv);\n indentContainer.appendChild(div);\n this.leftIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('Before text'), change: this.changeLeftIndent\n });\n this.leftIndentIn.appendTo(leftIndent);\n this.rightIndentIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1584, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('After text'), change: this.changeRightIndent\n });\n this.rightIndentIn.appendTo(rightIndent);\n this.byIn = new NumericTextBox({\n format: 'n1', value: 0, min: 0, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('By'), change: this.changeFirstLineIndent\n });\n this.byIn.appendTo(by);\n this.beforeSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1, max: 1584, step: 6, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('Before'),\n change: this.changeBeforeSpacing,\n focus: this.focusBeforeSpacing,\n blur: this.blurBeforeSpacing,\n });\n this.beforeSpacingIn.appendTo(beforeSpacing);\n var beforeSpacingSpinDown = beforeSpacingWholeDiv.getElementsByClassName(\"e-input-group-icon e-spin-down\")[0];\n beforeSpacingSpinDown.addEventListener('click', this.clickBeforeSpacing);\n this.afterSpacingIn = new NumericTextBox({\n format: 'n1', value: 0, min: -1, max: 1584, step: 6, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('After'),\n change: this.changeAfterSpacing,\n focus: this.focusAfterSpacing,\n blur: this.blurAfterSpacing\n });\n this.afterSpacingIn.appendTo(afterSpacing);\n var afterSpacingSpinDown = afterSpacingWholeDiv.getElementsByClassName(\"e-input-group-icon e-spin-down\")[0];\n afterSpacingSpinDown.addEventListener('click', this.clickAfterSpacing);\n this.atIn = new NumericTextBox({\n format: 'n1', value: 0, min: 1, max: 1584, step: 0.5, enablePersistence: false, floatLabelType: 'Always', placeholder: locale.getConstant('At'), change: this.changeLineSpacingValue\n });\n this.special = new DropDownList({ change: this.changeByValue, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('Special') });\n this.special.appendTo(special);\n this.lineSpacing = new DropDownList({ change: this.changeBySpacing, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('Line Spacing'), htmlAttributes: { 'aria-labelledby': locale.getConstant('Line Spacing') } });\n this.lineSpacing.appendTo(lineSpacing);\n this.alignment = new DropDownList({ change: this.changeByTextAlignment, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('Alignment'), htmlAttributes: { 'aria-labelledby': locale.getConstant('Alignment') } });\n this.alignment.appendTo(alignment);\n this.outlineLevel = new DropDownList({ change: this.changeByOutlineLevel, enableRtl: isRtl, floatLabelType: 'Always', placeholder: locale.getConstant('OutlineLevel'), htmlAttributes: { 'aria-labelledby': locale.getConstant('OutlineLevel') } });\n this.outlineLevel.appendTo(outlineLevel);\n this.atIn.appendTo(lineSpacingAt);\n this.contextSpacing = new CheckBox({\n change: this.changeContextualSpacing,\n label: locale.getConstant(\"Contextual Spacing\"),\n enableRtl: isRtl\n });\n this.contextSpacing.appendTo(contextInputEle);\n contextInputEle.setAttribute('aria-labelledby', locale.getConstant(\"Contextual Spacing\"));\n indentContainer.addEventListener('keyup', instance.keyUpParagraphSettings);\n if (isRtl) {\n afterSpacingWholeDiv.classList.add('e-de-rtl');\n lineTypeDiv.classList.add('e-de-rtl');\n }\n var lineBreakContainer = createElement('div', { className: 'e-de-dlg-tab-first-child' });\n var paginationDiv = createElement('div', { className: 'e-de-para-dlg-sub-container' });\n this.paginationDiv = paginationDiv;\n var paginationLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: locale.getConstant('Pagination') });\n paginationDiv.appendChild(paginationLabel);\n var widowContorlContainer = createElement('div', { styles: 'display:block' });\n paginationDiv.appendChild(widowContorlContainer);\n var keepNextContainer = createElement('div', { styles: 'display:block' });\n paginationDiv.appendChild(keepNextContainer);\n var keepLines = createElement('div', { styles: 'display:block' });\n paginationDiv.appendChild(keepLines);\n var keepWithNext = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n keepNextContainer.appendChild(keepWithNext);\n this.keepWithNext = new CheckBox({\n change: this.changeKeepWithNext,\n label: locale.getConstant('Keep With Next'),\n enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.keepWithNext.appendTo(keepWithNext);\n keepWithNext.setAttribute('aria-label', locale.getConstant('Keep With Next'));\n var keepLinesTogether = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n keepLines.appendChild(keepLinesTogether);\n this.keepLinesTogether = new CheckBox({\n change: this.changeKeepLinesTogether,\n label: locale.getConstant('Keep Lines Together'),\n enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.keepLinesTogether.appendTo(keepLinesTogether);\n keepLinesTogether.setAttribute('aria-label', locale.getConstant('Keep Lines Together'));\n var widowControl = createElement('input', {\n attrs: { type: 'checkbox' },\n });\n widowContorlContainer.appendChild(widowControl);\n this.widowControlIn = new CheckBox({\n change: this.changeWidowControl,\n label: locale.getConstant('WidowControl'),\n enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.widowControlIn.appendTo(widowControl);\n widowControl.setAttribute('aria-label', locale.getConstant('WidowControl'));\n lineBreakContainer.appendChild(paginationDiv);\n var items = [\n { header: { text: locale.getConstant('Indents and Spacing') }, content: indentContainer },\n { header: { text: locale.getConstant('Line and Page Breaks') }, content: lineBreakContainer }\n ];\n this.tabObj = new Tab({ items: items, enableRtl: isRtl, animation: { previous: { effect: 'None' }, next: { effect: 'None' } } }, ejtab);\n this.tabObj.isStringTemplate = true;\n };\n ParagraphDialog.prototype.changeAlignmentByBidi = function () {\n if (this.textAlignment === 'Left') {\n this.textAlignment = 'Right';\n }\n else if (this.textAlignment === 'Right') {\n this.textAlignment = 'Left';\n }\n if (!isNullOrUndefined(this.textAlignment)) {\n this.alignment.index = this.getAlignmentValue(this.textAlignment);\n }\n else {\n if (this.alignment.index === 0) {\n this.textAlignment = 'Center';\n }\n else {\n this.textAlignment = 'Justify';\n }\n }\n };\n ParagraphDialog.prototype.getAlignmentValue = function (textAlignment) {\n var alignValue;\n if (textAlignment === 'Center') {\n alignValue = 0;\n }\n else if (textAlignment === 'Left') {\n alignValue = 1;\n }\n else if (textAlignment === 'Right') {\n alignValue = 2;\n }\n else {\n alignValue = 3;\n }\n return alignValue;\n };\n ParagraphDialog.prototype.isHeadingStyle = function () {\n var parastyle = this.documentHelper.selection.paragraphFormat.styleName;\n if (parastyle === 'Heading 1' || parastyle === 'Heading 2' || parastyle === 'Heading 3' || parastyle === 'Heading 4' || parastyle === 'Heading 5' || parastyle === 'Heading 6' || parastyle === 'Heading 7' || parastyle === 'Heading 8' || parastyle === 'Heading 9') {\n return true;\n }\n else {\n return false;\n }\n };\n ParagraphDialog.prototype.getOutlineValue = function (outlineLevel) {\n var alignValue;\n if (outlineLevel === 'BodyText') {\n alignValue = 0;\n }\n else if (outlineLevel === 'Level1') {\n alignValue = 1;\n }\n else if (outlineLevel === 'Level2') {\n alignValue = 2;\n }\n else if (outlineLevel === 'Level3') {\n alignValue = 3;\n }\n else if (outlineLevel === 'Level4') {\n alignValue = 4;\n }\n else if (outlineLevel === 'Level5') {\n alignValue = 5;\n }\n else if (outlineLevel === 'Level6') {\n alignValue = 6;\n }\n else if (outlineLevel === 'Level7') {\n alignValue = 7;\n }\n else if (outlineLevel === 'Level8') {\n alignValue = 8;\n }\n else {\n alignValue = 9;\n }\n return alignValue;\n };\n /**\n * Applies Paragraph Format\n *\n * @private\n * @param {WParagraphFormat} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n ParagraphDialog.prototype.onParagraphFormat = function (paragraphFormat) {\n var selection = this.documentHelper.selection;\n var isListBidi = paragraphFormat.bidi && selection.paragraphFormat.listId !== -1;\n if (!isListBidi) {\n this.documentHelper.layout.isBidiReLayout = true;\n }\n this.documentHelper.owner.editorModule.setPreviousBlockToLayout();\n this.documentHelper.owner.editorModule.initHistory('ParagraphFormat');\n this.documentHelper.owner.isShiftingEnabled = true;\n if (this.documentHelper.selection.isEmpty) {\n this.documentHelper.owner.editorModule.applyParaFormatProperty(selection.start.paragraph, undefined, paragraphFormat, false);\n this.documentHelper.owner.editorModule.isMeasureParaWidth = true;\n this.documentHelper.owner.editorModule.layoutItemBlock(selection.start.paragraph, false);\n this.documentHelper.owner.editorModule.isMeasureParaWidth = true;\n }\n else {\n this.documentHelper.owner.editorModule.updateSelectionParagraphFormatting('ParagraphFormat', paragraphFormat, false);\n }\n this.documentHelper.owner.editorModule.reLayout(selection);\n if (!isListBidi) {\n this.documentHelper.layout.isBidiReLayout = false;\n }\n };\n /**\n * @private\n * @param {WParagraphFormat} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n ParagraphDialog.prototype.show = function (paragraphFormat) {\n if (paragraphFormat) {\n this.isStyleDialog = true;\n this.paragraphFormat = paragraphFormat;\n }\n else {\n this.isStyleDialog = false;\n }\n var local = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n local.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initParagraphDialog(local);\n }\n this.loadParagraphDialog();\n this.documentHelper.dialog.header = local.getConstant('Paragraph');\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.buttons = [\n {\n click: this.openTabDialog,\n buttonModel: { content: local.getConstant('Tabs') + '....', cssClass: 'e-flat e-de-para-tab', enableRtl: this.documentHelper.owner.enableRtl }\n },\n {\n click: this.applyParagraphFormat,\n buttonModel: { content: local.getConstant('Ok'), cssClass: 'e-flat e-para-okay', isPrimary: true }\n },\n {\n click: this.closeParagraphDialog,\n buttonModel: { content: local.getConstant('Cancel'), cssClass: 'e-flat e-para-cancel' }\n }\n ];\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.alignment.focusIn();\n this.documentHelper.dialog.show();\n var dialogElement = this.documentHelper.dialog.element;\n if (dialogElement) {\n var width = this.documentHelper.updateDialogTabHeight(dialogElement, this.target);\n this.paginationDiv.style.width = width.toString() + 'px';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ParagraphDialog.prototype.destroy = function () {\n if (this.afterSpacingIn) {\n this.afterSpacingIn.destroy();\n this.afterSpacingIn = undefined;\n }\n if (this.beforeSpacingIn) {\n this.beforeSpacingIn.destroy();\n this.beforeSpacingIn = undefined;\n }\n if (this.leftIndentIn) {\n this.leftIndentIn.destroy();\n this.leftIndentIn = undefined;\n }\n if (this.rightIndentIn) {\n this.rightIndentIn.destroy();\n this.rightIndentIn = undefined;\n }\n if (this.byIn) {\n this.byIn.destroy();\n this.byIn = undefined;\n }\n if (this.special) {\n this.special.destroy();\n this.special = undefined;\n }\n if (this.atIn) {\n this.atIn.destroy();\n this.atIn = undefined;\n }\n if (this.alignment) {\n this.alignment.change = undefined;\n this.alignment.destroy();\n }\n this.alignment = undefined;\n if (this.outlineLevel) {\n this.outlineLevel.change = undefined;\n this.outlineLevel.destroy();\n }\n this.outlineLevel = undefined;\n if (this.lineSpacing) {\n this.lineSpacing.change = undefined;\n this.lineSpacing.destroy();\n }\n this.lineSpacing = undefined;\n if (this.special) {\n this.special.change = undefined;\n this.special.destroy();\n }\n this.special = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var q = 0; q < this.target.childNodes.length; q++) {\n this.target.removeChild(this.target.childNodes[parseInt(q.toString(), 10)]);\n q--;\n }\n this.target = undefined;\n if (this.paragraphFormat) {\n this.paragraphFormat.destroy();\n this.paragraphFormat = undefined;\n }\n this.documentHelper = undefined;\n }\n };\n return ParagraphDialog;\n}());\nexport { ParagraphDialog };\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { WCharacterFormat } from '../format/character-format';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/* eslint-disable */\n/**\n * The Font dialog is used to modify formatting of selected text.\n */\nvar FontDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function FontDialog(documentHelper) {\n var _this = this;\n this.fontStyleInternal = undefined;\n this.fontNameList = undefined;\n this.fontStyleText = undefined;\n this.fontSizeText = undefined;\n this.colorPicker = undefined;\n this.underlineDrop = undefined;\n this.strikethroughBox = undefined;\n this.doublestrikethrough = undefined;\n this.superscript = undefined;\n this.subscript = undefined;\n this.allcaps = undefined;\n //Character Format Property\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n this.fontColor = undefined;\n this.allCaps = undefined;\n this.isListDialog = false;\n /**\n * @private\n */\n this.characterFormat = undefined;\n /**\n * @private\n * @returns {void}\n */\n this.loadFontDialog = function () {\n _this.documentHelper.updateFocus();\n var characterFormat;\n if (_this.characterFormat) {\n characterFormat = _this.characterFormat;\n }\n else {\n characterFormat = _this.documentHelper.owner.selectionModule.characterFormat;\n }\n _this.fontNameList.value = characterFormat.fontFamily;\n _this.fontNameList.dataBind();\n if (!characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 0;\n }\n else if (characterFormat.bold && !characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 1;\n }\n else if (!characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 2;\n }\n else if (characterFormat.bold && characterFormat.italic) {\n _this.fontStyleText.value = _this.fontSizeText.value;\n _this.fontStyleText.index = 3;\n }\n if (!isNullOrUndefined(characterFormat.fontSize)) {\n _this.fontSizeText.value = characterFormat.fontSize;\n }\n if (!isNullOrUndefined(characterFormat.fontColor)) {\n var fontColor = characterFormat.fontColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (fontColor === 'empty' || fontColor === '#00000000') {\n fontColor = '#000000';\n }\n _this.colorPicker.value = fontColor;\n }\n else {\n _this.colorPicker.value = '#000000';\n }\n if (characterFormat.underline === 'None') {\n _this.underlineDrop.index = 0;\n }\n else if (characterFormat.underline === 'Single') {\n _this.underlineDrop.index = 1;\n }\n if (characterFormat.strikethrough === 'SingleStrike') {\n _this.strikethroughBox.checked = true;\n }\n else if (characterFormat.strikethrough === 'DoubleStrike') {\n _this.doublestrikethrough.checked = true;\n }\n else {\n _this.strikethroughBox.checked = false;\n _this.doublestrikethrough.checked = false;\n }\n if (characterFormat.baselineAlignment === 'Superscript') {\n _this.superscript.checked = true;\n }\n else if (characterFormat.baselineAlignment === 'Subscript') {\n _this.subscript.checked = true;\n }\n else {\n _this.superscript.checked = false;\n _this.subscript.checked = false;\n }\n if (_this.documentHelper.selection.caret.style.display !== 'none') {\n _this.documentHelper.selection.caret.style.display = 'none';\n }\n if (characterFormat.allCaps) {\n _this.allcaps.checked = true;\n }\n else {\n _this.allcaps.checked = false;\n _this.allCaps = false;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeFontDialog = function () {\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertFontFormat = function () {\n var format;\n if (_this.characterFormat) {\n format = _this.characterFormat;\n }\n else {\n format = new WCharacterFormat(undefined);\n }\n if (!isNullOrUndefined(_this.bold)) {\n format.bold = _this.bold;\n }\n if (!isNullOrUndefined(_this.italic)) {\n format.italic = _this.italic;\n }\n if (!isNullOrUndefined(_this.fontSize) && _this.fontSize > 0) {\n format.fontSize = _this.fontSize;\n }\n if (!isNullOrUndefined(_this.fontColor)) {\n format.fontColor = _this.fontColor;\n }\n if (!isNullOrUndefined(_this.baselineAlignment)) {\n format.baselineAlignment = _this.baselineAlignment;\n }\n if (!isNullOrUndefined(_this.strikethrough)) {\n format.strikethrough = _this.strikethrough;\n }\n if (!isNullOrUndefined(_this.underline)) {\n format.underline = _this.underline;\n }\n if (!isNullOrUndefined(_this.fontFamily)) {\n var fontFamily = SanitizeHtmlHelper.sanitize(_this.fontFamily);\n format.fontFamily = fontFamily;\n format.fontFamilyAscii = fontFamily;\n format.fontFamilyFarEast = fontFamily;\n format.fontFamilyNonFarEast = fontFamily;\n format.fontFamilyBidi = fontFamily;\n }\n if (!isNullOrUndefined(_this.allCaps)) {\n format.allCaps = _this.allCaps;\n }\n if (!_this.characterFormat) {\n _this.onCharacterFormat(_this.documentHelper.selection, format);\n }\n else {\n if (_this.isListDialog) {\n _this.documentHelper.owner.listDialogModule.updateCharacterFormat(format);\n }\n else {\n _this.documentHelper.owner.styleDialogModule.updateCharacterFormat();\n }\n }\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontSizeUpdate = function (args) {\n _this.fontSize = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontStyleUpdate = function (args) {\n _this.fontStyle = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontFamilyUpdate = function (args) {\n _this.fontFamily = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.underlineUpdate = function (args) {\n _this.underline = args.value;\n };\n /**\n * @private\n * @returns {void}\n */\n this.fontColorUpdate = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n _this.fontColor = args.currentValue.hex;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.singleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'SingleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.doubleStrikeUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.strikethrough = 'DoubleStrike';\n }\n else {\n _this.strikethrough = 'None';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.superscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Superscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.subscriptUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.baselineAlignment = 'Subscript';\n }\n else {\n _this.baselineAlignment = 'Normal';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.allcapsUpdate = function (args) {\n _this.enableCheckBoxProperty(args);\n if (args.checked) {\n _this.allCaps = true;\n }\n else {\n _this.allCaps = false;\n }\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(FontDialog.prototype, \"fontStyle\", {\n /**\n * @private\n * @returns {string} returns font style\n */\n get: function () {\n return this.fontStyleInternal;\n },\n /**\n * @private\n * @param {string} value Specifies font style\n */\n set: function (value) {\n this.fontStyleInternal = value;\n switch (this.fontStyle) {\n case 'Bold':\n this.bold = true;\n this.italic = false;\n break;\n case 'Italic':\n this.bold = false;\n this.italic = true;\n break;\n case 'BoldItalic':\n this.bold = true;\n this.italic = true;\n break;\n case 'Regular':\n this.bold = false;\n this.italic = false;\n break;\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @returns {string} Returns module name\n */\n FontDialog.prototype.getModuleName = function () {\n return 'FontDialog';\n };\n FontDialog.prototype.createInputElement = function (type, id, className) {\n var element = createElement('input', {\n attrs: { type: type },\n id: id,\n className: className\n });\n return element;\n };\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n FontDialog.prototype.initFontDialog = function (locale, isRtl) {\n var effectLabel;\n var strikeThroughElement;\n var superScriptElement;\n var subScriptElement;\n var doubleStrikeThroughElement;\n var allCapsElement;\n var fontEffectSubDiv1;\n var id = this.documentHelper.owner.containerId;\n this.target = createElement('div', { className: 'e-de-font-dlg' });\n var fontDiv = this.getFontDiv(locale, isRtl);\n this.target.appendChild(fontDiv);\n var sizeDiv = this.getFontSizeDiv(locale, isRtl);\n this.target.appendChild(sizeDiv);\n var colorDiv = createElement('div', { className: 'e-de-container-row' });\n this.fontColorDiv = createElement('div', { className: 'e-de-font-dlg-display' });\n var fontColorLabel = createElement('label', {\n className: 'e-de-font-dlg-header-font-color e-de-font-color-margin',\n innerHTML: locale.getConstant('Font color')\n });\n if (isRtl) {\n fontColorLabel.classList.add('e-de-rtl');\n }\n this.fontColorDiv.appendChild(fontColorLabel);\n var fontColorElement = this.createInputElement('color', this.target.id + '_ColorDiv', 'e-de-font-dlg-color');\n this.fontColorDiv.appendChild(fontColorElement);\n colorDiv.appendChild(this.fontColorDiv);\n this.target.appendChild(colorDiv);\n var fontEffectsDiv = createElement('div');\n fontEffectSubDiv1 = createElement('div');\n effectLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: locale.getConstant('Effects'),\n });\n fontEffectSubDiv1.appendChild(effectLabel);\n fontEffectsDiv.appendChild(fontEffectSubDiv1);\n this.target.appendChild(fontEffectsDiv);\n var effectsProperties = createElement('div', { className: 'e-de-container-row' });\n var fontEffectSubDiv2 = createElement('div', { className: 'e-de-subcontainer-left' });\n strikeThroughElement = this.createInputElement('checkbox', this.target.id + '_strikeThrough', '');\n fontEffectSubDiv2.appendChild(strikeThroughElement);\n var checkBoxDiv = createElement('div', { className: 'e-de-font-checkbox' });\n subScriptElement = this.createInputElement('checkbox', this.target.id + '_subScript', '');\n checkBoxDiv.appendChild(subScriptElement);\n fontEffectSubDiv2.appendChild(checkBoxDiv);\n checkBoxDiv = createElement('div', { className: 'e-de-font-checkbox' });\n allCapsElement = this.createInputElement('checkbox', this.target.id + '_allCaps', '');\n checkBoxDiv.appendChild(allCapsElement);\n fontEffectSubDiv2.appendChild(checkBoxDiv);\n effectsProperties.appendChild(fontEffectSubDiv2);\n var fontEffectSubDiv3 = createElement('div', { className: 'e-de-subcontainer-right' });\n superScriptElement = this.createInputElement('checkbox', this.target.id + '_superScript', '');\n fontEffectSubDiv3.appendChild(superScriptElement);\n checkBoxDiv = createElement('div', { className: 'e-de-font-checkbox' });\n doubleStrikeThroughElement = this.createInputElement('checkbox', this.target.id + '_doubleStrikeThrough', '');\n checkBoxDiv.appendChild(doubleStrikeThroughElement);\n fontEffectSubDiv3.appendChild(checkBoxDiv);\n effectsProperties.appendChild(fontEffectSubDiv3);\n this.target.appendChild(effectsProperties);\n var _a = this.documentHelper.owner.documentEditorSettings.colorPickerSettings, columns = _a.columns, createPopupOnClick = _a.createPopupOnClick, cssClass = _a.cssClass, disabled = _a.disabled, enablePersistence = _a.enablePersistence, inline = _a.inline, mode = _a.mode, modeSwitcher = _a.modeSwitcher, noColor = _a.noColor, presetColors = _a.presetColors, showButtons = _a.showButtons;\n this.colorPicker = new ColorPicker({\n change: this.fontColorUpdate, value: '#000000', enableRtl: isRtl, locale: this.documentHelper.owner.locale, enableOpacity: false, mode: mode, modeSwitcher: modeSwitcher, showButtons: showButtons, columns: columns, createPopupOnClick: createPopupOnClick, cssClass: cssClass, disabled: disabled, enablePersistence: enablePersistence, inline: inline, noColor: noColor, presetColors: presetColors\n });\n this.colorPicker.appendTo(fontColorElement);\n this.strikethroughBox = new CheckBox({\n change: this.singleStrikeUpdate,\n cssClass: 'e-de-font-content-label',\n label: locale.getConstant('Strikethrough'),\n enableRtl: isRtl\n });\n this.documentHelper.colorPicker = this.colorPicker;\n this.strikethroughBox.appendTo(strikeThroughElement);\n this.doublestrikethrough = new CheckBox({\n change: this.doubleStrikeUpdate,\n label: locale.getConstant('Double strikethrough'),\n enableRtl: isRtl\n });\n this.doublestrikethrough.appendTo(doubleStrikeThroughElement);\n this.subscript = new CheckBox({\n label: locale.getConstant('Subscript'),\n cssClass: 'e-de-font-content-label-width',\n change: this.subscriptUpdate,\n enableRtl: isRtl\n });\n this.subscript.appendTo(subScriptElement);\n this.superscript = new CheckBox({\n label: locale.getConstant('Superscript'),\n cssClass: 'e-de-font-content-label', change: this.superscriptUpdate,\n enableRtl: isRtl\n });\n this.superscript.appendTo(superScriptElement);\n this.allcaps = new CheckBox({\n label: locale.getConstant('All caps'),\n cssClass: 'e-de-font-content-label-caps',\n change: this.allcapsUpdate,\n enableRtl: isRtl\n });\n this.allcaps.appendTo(allCapsElement);\n if (isRtl) {\n fontEffectSubDiv2.classList.add('e-de-rtl');\n fontEffectSubDiv3.classList.add('e-de-rtl');\n fontEffectSubDiv1.classList.remove('e-de-font-content-checkbox-label');\n }\n };\n FontDialog.prototype.getFontSizeDiv = function (locale, isRtl) {\n var fontSize;\n var sizeDiv;\n var id = this.documentHelper.owner.containerId;\n sizeDiv = createElement('div', { className: 'e-de-container-row' });\n var sizeSubDiv1 = createElement('div', { className: 'e-de-subcontainer-left' });\n var sizeLabel = locale.getConstant('Size');\n fontSize = createElement('select', { id: this.target.id + '_fontSize' });\n fontSize.innerHTML = '' +\n '' +\n '';\n sizeSubDiv1.appendChild(fontSize);\n sizeDiv.appendChild(sizeSubDiv1);\n var sizeSubDiv2 = createElement('div', {\n className: 'e-de-subcontainer-right',\n });\n if (isRtl) {\n sizeSubDiv2.classList.add('e-de-rtl');\n }\n var html = locale.getConstant('Underline style');\n var underlineElement;\n underlineElement = createElement('select', { id: this.target.id + '_underLine' });\n underlineElement.innerHTML = '';\n sizeSubDiv2.appendChild(underlineElement);\n sizeDiv.appendChild(sizeSubDiv2);\n this.fontSizeText = new ComboBox({ change: this.fontSizeUpdate, allowCustom: true, showClearButton: false, enableRtl: isRtl, floatLabelType: 'Always', placeholder: sizeLabel, htmlAttributes: { 'aria-labelledby': sizeLabel } });\n this.fontSizeText.appendTo(fontSize);\n this.underlineDrop = new DropDownList({ change: this.underlineUpdate, enableRtl: isRtl, floatLabelType: 'Always', placeholder: html, htmlAttributes: { 'aria-labelledby': html } });\n this.underlineDrop.appendTo(underlineElement);\n return sizeDiv;\n };\n FontDialog.prototype.getFontDiv = function (locale, isRtl) {\n var id = this.documentHelper.owner.containerId;\n var fontDiv = createElement('div', { className: 'e-de-container-row' });\n var fontSubDiv1 = createElement('div', { className: 'e-de-subcontainer-left' });\n var fontLabel = locale.getConstant('Font');\n var fontNameValues = createElement('select', { id: this.target.id + '_fontName' });\n var fontValues = this.documentHelper.owner.documentEditorSettings.fontFamilies;\n for (var i = 0; i < fontValues.length; i++) {\n fontNameValues.innerHTML += '';\n }\n fontSubDiv1.appendChild(fontNameValues);\n fontDiv.appendChild(fontSubDiv1);\n var fontSubDiv2;\n var fontStyleValues;\n fontSubDiv2 = createElement('div', { className: 'e-de-subcontainer-right' });\n if (isRtl) {\n fontSubDiv2.classList.add('e-de-rtl');\n }\n var fontStyleLabel = locale.getConstant('Font style');\n fontStyleValues = createElement('select', { id: this.target.id + '_fontStyle' });\n fontStyleValues.innerHTML = '';\n fontSubDiv2.appendChild(fontStyleValues);\n fontDiv.appendChild(fontSubDiv2);\n this.fontNameList = new ComboBox({ change: this.fontFamilyUpdate, enableRtl: isRtl, floatLabelType: 'Always', placeholder: fontLabel });\n this.fontNameList.showClearButton = false;\n this.fontNameList.appendTo(fontNameValues);\n this.fontStyleText = new DropDownList({ change: this.fontStyleUpdate, enableRtl: isRtl, floatLabelType: 'Always', placeholder: fontStyleLabel });\n this.fontStyleText.appendTo(fontStyleValues);\n return fontDiv;\n };\n /**\n * @param characterFormat\n * @private\n */\n FontDialog.prototype.showFontDialog = function (characterFormat, isListDialog) {\n if (characterFormat) {\n this.characterFormat = characterFormat;\n }\n this.isListDialog = isListDialog;\n var locale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n locale.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initFontDialog(locale, this.documentHelper.owner.enableRtl);\n }\n this.documentHelper.dialog.header = locale.getConstant('Font');\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadFontDialog;\n this.documentHelper.dialog.close = this.closeFontDialog;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertFontFormat,\n buttonModel: { content: locale.getConstant('Ok'), cssClass: 'e-flat e-font-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: locale.getConstant('Cancel'), cssClass: 'e-flat e-font-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @param {Selection} selection Specifies the selection\n * @param {WCharacterFormat} format Specifies the character format\n * @returns {void}\n */\n FontDialog.prototype.onCharacterFormat = function (selection, format) {\n this.documentHelper.owner.editorModule.initHistory('CharacterFormat');\n if (selection.isEmpty) {\n if (selection.start.offset === selection.getParagraphLength(selection.start.paragraph)) {\n this.documentHelper.owner.editorModule.applyCharFormatValueInternal(selection, selection.start.paragraph.characterFormat, undefined, format);\n this.documentHelper.owner.editorModule.reLayout(selection);\n }\n this.documentHelper.updateFocus();\n return;\n }\n else {\n //Iterate and update formating.\n this.documentHelper.owner.editorModule.setOffsetValue(this.documentHelper.selection);\n this.documentHelper.owner.editorModule.updateSelectionCharacterFormatting('CharacterFormat', format, false);\n }\n };\n FontDialog.prototype.enableCheckBoxProperty = function (args) {\n if (this.strikethroughBox.checked && this.doublestrikethrough.checked) {\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_doubleStrikeThrough') {\n this.doublestrikethrough.checked = true;\n }\n else {\n this.strikethroughBox.checked = true;\n }\n }\n if (this.superscript.checked && this.subscript.checked) {\n this.subscript.checked = false;\n this.superscript.checked = false;\n if (args.event.currentTarget.id === this.target.id + '_subScript') {\n this.subscript.checked = true;\n }\n else {\n this.superscript.checked = true;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FontDialog.prototype.unWireEventsAndBindings = function () {\n this.fontNameList.value = '';\n this.fontSizeText.value = '';\n this.fontStyleText.value = '';\n this.strikethroughBox.checked = false;\n this.doublestrikethrough.checked = false;\n this.superscript.checked = false;\n this.subscript.checked = false;\n this.allcaps.checked = false;\n this.bold = undefined;\n this.italic = undefined;\n this.underline = undefined;\n this.strikethrough = undefined;\n this.baselineAlignment = undefined;\n this.fontColor = undefined;\n this.fontSize = undefined;\n this.fontFamily = undefined;\n };\n /**\n * @private\n * @returns {void}\n */\n FontDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (this.characterFormat) {\n this.characterFormat.destroy();\n this.characterFormat = undefined;\n }\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var m = 0; m < this.target.childNodes.length; m++) {\n this.target.removeChild(this.target.childNodes[m]);\n m--;\n }\n this.target = undefined;\n }\n if (this.fontNameList) {\n this.fontNameList.destroy();\n }\n this.fontNameList = undefined;\n if (this.fontStyleText) {\n this.fontStyleText.destroy();\n }\n this.fontStyleText = undefined;\n if (this.fontSizeText) {\n this.fontSizeText.destroy();\n }\n this.fontSizeText = undefined;\n if (this.colorPicker) {\n this.colorPicker.destroy();\n }\n this.colorPicker = undefined;\n if (this.underlineDrop) {\n this.underlineDrop.destroy();\n }\n this.underlineDrop = undefined;\n if (this.strikethroughBox) {\n this.strikethroughBox.destroy();\n }\n this.strikethroughBox = undefined;\n if (this.doublestrikethrough) {\n this.doublestrikethrough.destroy();\n }\n this.doublestrikethrough = undefined;\n if (this.superscript) {\n this.superscript.destroy();\n }\n this.superscript = undefined;\n if (this.subscript) {\n this.subscript.destroy();\n }\n this.subscript = undefined;\n if (this.allcaps) {\n this.allcaps.destroy();\n }\n this.allcaps = undefined;\n };\n return FontDialog;\n}());\nexport { FontDialog };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { createElement, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WRowFormat, WCellFormat, WParagraphFormat } from '../format/index';\nimport { CheckBox, RadioButton } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { classList } from '@syncfusion/ej2-base';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * The Table properties dialog is used to modify properties of selected table.\n */\nvar TablePropertiesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TablePropertiesDialog(documentHelper) {\n var _this = this;\n this.hasTableWidth = false;\n this.hasCellWidth = false;\n this.bidi = false;\n /**\n * @private\n */\n this.isTableBordersAndShadingUpdated = false;\n /**\n * @private\n */\n this.isCellBordersAndShadingUpdated = false;\n this.tabObj = undefined;\n this.localValue = undefined;\n /**\n * @private\n */\n this.isCellOptionsUpdated = false;\n /**\n * @private\n */\n this.isTableOptionsUpdated = false;\n /**\n * @returns {void}\n */\n this.onBeforeOpen = function () {\n _this.documentHelper.updateFocus();\n _this.loadTableProperties();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCloseTablePropertyDialog = function () {\n _this.unWireEvent.bind(_this);\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableProperties = function () {\n var selection = _this.documentHelper.selection;\n if (selection.tableFormat.title !== _this.titleTextBox.value) {\n if (!isNullOrUndefined(_this.titleTextBox.value)) {\n _this.tableFormat.title = SanitizeHtmlHelper.sanitize((_this.titleTextBox).value);\n }\n }\n if (selection.tableFormat.description !== _this.descriptionTextBox.value) {\n if (!isNullOrUndefined(_this.descriptionTextBox.value)) {\n _this.tableFormat.description = SanitizeHtmlHelper.sanitize((_this.descriptionTextBox).value);\n }\n }\n if (!_this.preferCheckBox.checked && !_this.preferCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.tableFormat.preferredWidth) || selection.tableFormat.preferredWidth !== 0) {\n _this.tableFormat.preferredWidth = 0;\n _this.tableFormat.preferredWidthType = 'Point';\n }\n }\n if (_this.tableFormat.hasValue('tableAlignment') && _this.tableFormat.tableAlignment !== 'Left') {\n if (isNullOrUndefined(selection.tableFormat.leftIndent) || selection.tableFormat.leftIndent !== 0) {\n _this.tableFormat.leftIndent = 0;\n }\n }\n if (!_this.rowHeightCheckBox.checked && !_this.rowHeightCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.rowFormat.height) || selection.rowFormat.height !== 0) {\n _this.rowFormat.heightType = 'AtLeast';\n _this.rowFormat.height = 0;\n }\n }\n if (!_this.preferredCellWidthCheckBox.checked && !_this.preferredCellWidthCheckBox.indeterminate) {\n if (isNullOrUndefined(selection.cellFormat.preferredWidth) || selection.cellFormat.preferredWidth !== 0) {\n _this.cellFormat.preferredWidthType = 'Point';\n _this.cellFormat.preferredWidth = 0;\n }\n }\n else {\n var ownerTable = _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var containerWidth = ownerTable.getOwnerWidth(true);\n var tableWidth = ownerTable.getTableClientWidth(containerWidth);\n for (var i = 0; i < ownerTable.childWidgets.length; i++) {\n var rowWidget = ownerTable.childWidgets[parseInt(i.toString(), 10)];\n for (var j = 0; j < rowWidget.childWidgets.length; j++) {\n var cellWidget = rowWidget.childWidgets[parseInt(j.toString(), 10)];\n if (_this.cellFormat.preferredWidthType === 'Percent' && cellWidget.cellFormat.preferredWidthType === 'Point') {\n cellWidget.cellFormat.preferredWidthType = 'Percent';\n cellWidget.cellFormat.preferredWidth = cellWidget.cellFormat.preferredWidth / tableWidth * 100;\n }\n else if (_this.cellFormat.preferredWidthType === 'Point' && cellWidget.cellFormat.preferredWidthType === 'Percent') {\n cellWidget.cellFormat.preferredWidthType = 'Point';\n cellWidget.cellFormat.preferredWidth = cellWidget.cellFormat.cellWidth;\n }\n }\n }\n if (_this.cellFormat.preferredWidthType === 'Percent') {\n if (!_this.tableFormat.hasValue('preferredWidth') && !_this.tableFormat.hasValue('preferredWidthType')\n && _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.tableFormat.preferredWidth === 0) {\n /* eslint-disable-next-line max-len */\n var containerWidth_1 = _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.getOwnerWidth(true);\n /* eslint-disable-next-line max-len */\n var tableWidth_1 = _this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.getTableClientWidth(containerWidth_1);\n _this.tableFormat.preferredWidthType = 'Percent';\n /* eslint-disable-next-line max-len */\n _this.tableFormat.preferredWidth = tableWidth_1 / HelperMethods.convertPixelToPoint(_this.documentHelper.owner.viewer.clientArea.width) * 100;\n }\n }\n }\n if (_this.rowHeightValue) {\n if (!_this.rowFormat.hasValue('heightType')\n && selection.rowFormat.heightType !== _this.rowFormat.heightType) {\n _this.rowFormat.heightType = selection.rowFormat.heightType;\n }\n _this.rowFormat.height = _this.rowHeightValue;\n }\n if (!(_this.isEqualTableFormat(selection.tableFormat, _this.tableFormat) && _this.isEqualRowFormat(selection.rowFormat, _this.rowFormat)\n && _this.isEqualCellFormat(selection.cellFormat, _this.cellFormat))) {\n _this.documentHelper.owner.editorModule.initComplexHistory('TableProperties');\n _this.documentHelper.owner.editorModule.onTableFormat(_this.tableFormat);\n _this.documentHelper.owner.editorModule.onRowFormat(_this.rowFormat);\n _this.documentHelper.owner.editorModule.onCellFormat(_this.cellFormat);\n _this.documentHelper.owner.editorHistoryModule.updateComplexHistory();\n }\n _this.closeTablePropertiesDialog();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableSubProperties = function () {\n if (_this.isCellOptionsUpdated) {\n var cellFormat = _this.documentHelper.owner.cellOptionsDialogModule.cellFormat;\n _this.documentHelper.owner.cellOptionsDialogModule.applySubCellOptions(cellFormat);\n }\n if (_this.isTableOptionsUpdated) {\n var tableFormat = _this.documentHelper.owner.tableOptionsDialogModule.tableFormat;\n _this.documentHelper.owner.tableOptionsDialogModule.applySubTableOptions(tableFormat);\n }\n _this.isCellOptionsUpdated = false;\n _this.isTableOptionsUpdated = false;\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEvent = function () {\n //Table Format\n _this.preferCheckBox.change = undefined;\n _this.tableWidthBox.change = undefined;\n _this.tableWidthType.change = undefined;\n _this.leftIndentBox.change = undefined;\n //Row Format\n _this.rowHeightCheckBox.change = undefined;\n _this.rowHeightBox.change = undefined;\n _this.rowHeightType.change = undefined;\n _this.repeatHeader.change = undefined;\n _this.allowRowBreak.change = undefined;\n //Cell Format\n _this.preferredCellWidthCheckBox.change = undefined;\n _this.cellWidthBox.change = undefined;\n _this.cellWidthType.change = undefined;\n _this.cellFormat.destroy();\n _this.rowFormat.destroy();\n _this.tableFormat.destroy();\n _this.rowHeightValue = undefined;\n _this.documentHelper.dialog2.open = _this.documentHelper.selection.hideCaret.bind(_this.documentHelper.owner.viewer);\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTablePropertiesDialog = function () {\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {Event} event - Specified the event.\n * @returns {void}\n */\n this.changeBidirectional = function (event) {\n if (event.value === 'ltr') {\n _this.rtlButton.checked = !_this.ltrButton.checked;\n _this.tableFormat.bidi = false;\n }\n else {\n _this.ltrButton.checked = !_this.rtlButton.checked;\n _this.tableFormat.bidi = true;\n }\n if (_this.tableFormat.bidi && _this.tableFormat.tableAlignment === 'Left') {\n _this.tableFormat.tableAlignment = 'Right';\n }\n else if (!_this.tableFormat.bidi && _this.tableFormat.tableAlignment === 'Right') {\n _this.tableFormat.tableAlignment = 'Left';\n }\n _this.activeTableAlignment(_this.tableFormat, true);\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeTableCheckBox = function () {\n var enable = (_this.preferCheckBox.checked || _this.preferCheckBox.indeterminate);\n _this.tableWidthBox.enabled = enable;\n _this.tableWidthType.enabled = enable;\n if (enable) {\n _this.tableFormat.preferredWidthType = (_this.tableWidthType.value === 'Points') ?\n 'Point' : _this.tableWidthType.value;\n }\n else {\n _this.tableFormat.preferredWidthType = _this.documentHelper.selection.tableFormat.preferredWidthType;\n }\n };\n /**\n * @private\n * @param {Event} event - Specified the event.\n * @returns {void}\n */\n this.changeTableAlignment = function (event) {\n _this.updateClassForAlignmentProperties(_this.tableTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n var bidi = _this.tableFormat.bidi || _this.rtlButton.checked;\n if ((element.classList.contains('e-de-table-left-alignment') && !bidi) ||\n (element.classList.contains('e-de-table-right-alignment') && bidi)) {\n _this.leftIndentBox.enabled = true;\n }\n else {\n _this.leftIndentBox.enabled = false;\n }\n _this.tableFormat.tableAlignment = _this.getTableAlignment();\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeTableRowCheckBox = function () {\n _this.rowHeightType.enabled = _this.rowHeightCheckBox.checked;\n _this.rowHeightBox.enabled = _this.rowHeightCheckBox.checked;\n if (_this.rowHeightType.enabled) {\n _this.rowFormat.heightType = _this.rowHeightType.value;\n }\n else {\n _this.rowFormat.heightType = _this.documentHelper.selection.rowFormat.heightType;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeTableCellCheckBox = function () {\n _this.cellWidthType.enabled = _this.preferredCellWidthCheckBox.checked;\n _this.cellWidthBox.enabled = _this.preferredCellWidthCheckBox.checked;\n };\n /**\n * @private\n * @param {Event} event - Specified the event\n * @returns {void}\n */\n this.changeCellAlignment = function (event) {\n _this.updateClassForCellAlignment(_this.cellTab);\n var element = event.target;\n classList(element, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n _this.cellFormat.verticalAlignment = _this.getCellAlignment();\n };\n //#endregion\n /**\n * @private\n *\n * @returns {void}\n */\n this.showTableOptionsDialog = function () {\n _this.documentHelper.owner.tableOptionsDialogModule.show();\n _this.documentHelper.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n *\n * @returns {void}\n */\n this.showBordersShadingsPropertiesDialog = function () {\n _this.documentHelper.owner.bordersAndShadingDialogModule.show();\n _this.documentHelper.dialog2.element.style.pointerEvents = 'none';\n };\n /**\n * @private\n *\n * @returns {void}\n */\n this.showCellOptionsDialog = function () {\n _this.documentHelper.owner.cellOptionsDialogModule.show();\n _this.documentHelper.dialog2.element.style.pointerEvents = 'none';\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(TablePropertiesDialog.prototype, \"cellFormat\", {\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n set: function (value) {\n this.cellFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"tableFormat\", {\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n this.tableFormatIn = new WTableFormat();\n return this.tableFormatIn;\n }\n return this.tableFormatIn;\n },\n set: function (value) {\n this.tableFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"paraFormat\", {\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n this.paraFormatIn = new WParagraphFormat();\n return this.paraFormatIn;\n }\n return this.paraFormatIn;\n },\n set: function (value) {\n this.paraFormatIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TablePropertiesDialog.prototype, \"rowFormat\", {\n get: function () {\n if (isNullOrUndefined(this.rowFormatInternal)) {\n this.rowFormatInternal = new WRowFormat();\n return this.rowFormatInternal;\n }\n return this.rowFormatInternal;\n },\n enumerable: true,\n configurable: true\n });\n TablePropertiesDialog.prototype.getModuleName = function () {\n return 'TablePropertiesDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n TablePropertiesDialog.prototype.initTablePropertyDialog = function (localValue, isRtl) {\n this.localValue = localValue;\n var id = this.documentHelper.owner.containerId + '_TablePropertiesDialog';\n this.target = createElement('div', { id: id, className: 'e-de-table-properties-dlg' });\n var ejtabContainer = createElement('div', { id: this.target.id + '_TabContainer' });\n this.target.appendChild(ejtabContainer);\n this.tableTab = createElement('div', {\n id: this.target.id + '_TablePropertiesContentDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.rowTab = createElement('div', {\n id: this.target.id + '_RowPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.cellTab = createElement('div', {\n id: this.target.id + '_CellPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n this.altTab = createElement('div', {\n id: this.target.id + '_AltPropertiesDialogTab', className: 'e-de-table-ppty-dlg-tabs'\n });\n var separatorLine = createElement('div', { className: 'e-de-table-dialog-separator-line' });\n var ejtab = createElement('div', { id: this.target.id + '_TablePropertiesDialogTab', className: 'e-de-table-ppty-tab' });\n var headerContainer = createElement('div', { className: 'e-tab-header' });\n var tableHeader = createElement('div', {\n id: this.target.id + '_tableHeader', innerHTML: localValue.getConstant('Table')\n });\n var rowHeader = createElement('div', {\n id: this.target.id + '_rowHeader', innerHTML: localValue.getConstant('Row')\n });\n var cellHeader = createElement('div', {\n id: this.target.id + '_cellHeader', innerHTML: localValue.getConstant('Cell')\n });\n var altHeader = createElement('div', {\n id: this.target.id + '_altHeader', innerHTML: localValue.getConstant('Alt Text')\n });\n headerContainer.appendChild(tableHeader);\n headerContainer.appendChild(rowHeader);\n headerContainer.appendChild(cellHeader);\n headerContainer.appendChild(altHeader);\n var tableContent = createElement('div', { id: this.target.id + '_tableContent' });\n var rowContent = createElement('div', { id: this.target.id + '_rowContent' });\n var cellContent = createElement('div', { id: this.target.id + '_cellContent' });\n var altContent = createElement('div', { id: this.target.id + '_altContent' });\n var items = [\n { header: { text: tableHeader }, content: tableContent },\n { header: { text: rowHeader }, content: rowContent },\n { header: { text: cellHeader }, content: cellContent },\n { header: { text: altHeader }, content: altContent }\n ];\n tableContent.appendChild(this.tableTab);\n rowContent.appendChild(this.rowTab);\n cellContent.appendChild(this.cellTab);\n altContent.appendChild(this.altTab);\n ejtabContainer.appendChild(ejtab);\n this.initTableProperties(this.tableTab, localValue, this.documentHelper.owner.enableRtl);\n this.initTableRowProperties(this.rowTab, localValue, this.documentHelper.owner.enableRtl);\n this.initTableCellProperties(this.cellTab, localValue, this.documentHelper.owner.enableRtl);\n this.initTableAltProperties(this.altTab, localValue, this.documentHelper.owner.enableRtl);\n this.tabObj = new Tab({ items: items, enableRtl: isRtl }, ejtab);\n this.tabObj.isStringTemplate = true;\n this.target.appendChild(separatorLine);\n var alignMentButtons = this.tableTab.getElementsByClassName(this.tableTab.id + 'e-de-table-alignment');\n for (var i = 0; i < alignMentButtons.length; i++) {\n alignMentButtons[parseInt(i.toString(), 10)].addEventListener('click', this.changeTableAlignment);\n }\n var cellAlignment = this.cellTab.getElementsByClassName(this.cellTab.id + 'e-de-table-cell-alignment');\n for (var i = 0; i < cellAlignment.length; i++) {\n cellAlignment[parseInt(i.toString(), 10)].addEventListener('click', this.changeCellAlignment);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initTablePropertyDialog(localValue, this.documentHelper.owner.enableRtl);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog2.header = localValue.getConstant('Table Properties');\n this.documentHelper.dialog2.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog2.animationSettings = { effect: 'None', duration: 400, delay: 0 };\n this.documentHelper.dialog2.width = 'auto';\n this.documentHelper.dialog2.height = 'auto';\n this.documentHelper.dialog2.content = this.target;\n this.documentHelper.dialog2.beforeOpen = this.onBeforeOpen;\n this.documentHelper.dialog2.close = this.onCloseTablePropertyDialog;\n this.documentHelper.dialog2.open = this.wireEvent.bind(this);\n this.documentHelper.dialog2.buttons = [{\n click: this.applyTableProperties,\n buttonModel: { content: localValue.getConstant('Ok'), cssClass: 'e-flat e-table-ppty-okay', isPrimary: true }\n },\n {\n click: this.closeTablePropertiesDialog,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-ppty-cancel' }\n }];\n //this.tabObj.select(0);\n this.documentHelper.dialog2.dataBind();\n this.documentHelper.dialog2.show();\n var dialogElement = this.documentHelper.dialog2.element;\n if (dialogElement) {\n this.documentHelper.updateDialogTabHeight(dialogElement, this.target);\n }\n };\n TablePropertiesDialog.prototype.isEqualTableFormat = function (sourceFormat, applyFormat) {\n if (applyFormat.hasValue('preferredWidth') && sourceFormat.preferredWidth !== applyFormat.preferredWidth) {\n return false;\n }\n if (applyFormat.hasValue('preferredWidthType') && sourceFormat.preferredWidthType !== applyFormat.preferredWidthType) {\n return false;\n }\n if (applyFormat.hasValue('tableAlignment') && sourceFormat.tableAlignment !== applyFormat.tableAlignment) {\n return false;\n }\n if (applyFormat.hasValue('leftIndent') && sourceFormat.leftIndent !== applyFormat.leftIndent) {\n return false;\n }\n if (applyFormat.hasValue('bidi') && sourceFormat.bidi !== applyFormat.bidi) {\n return false;\n }\n if (isNullOrUndefined(sourceFormat.title) ? '' !== applyFormat.title : sourceFormat.title !== applyFormat.title) {\n return false;\n }\n if (isNullOrUndefined(sourceFormat.description) ? '' !== applyFormat.description : sourceFormat.description !== applyFormat.description) {\n return false;\n }\n return true;\n };\n TablePropertiesDialog.prototype.isEqualRowFormat = function (sourceFormat, applyFormat) {\n if (applyFormat.hasValue('height') && sourceFormat.height !== applyFormat.height) {\n return false;\n }\n if (applyFormat.hasValue('heightType') && sourceFormat.heightType !== applyFormat.heightType) {\n return false;\n }\n if (applyFormat.hasValue('allowBreakAcrossPages') && sourceFormat.allowBreakAcrossPages !== applyFormat.allowBreakAcrossPages) {\n return false;\n }\n if (applyFormat.hasValue('isHeader') && sourceFormat.isHeader !== applyFormat.isHeader) {\n return false;\n }\n return true;\n };\n TablePropertiesDialog.prototype.isEqualCellFormat = function (sourceFormat, applyFormat) {\n if (applyFormat.hasValue('preferredWidth') && sourceFormat.preferredWidth !== applyFormat.preferredWidth) {\n return false;\n }\n if (applyFormat.hasValue('preferredWidthType') && sourceFormat.preferredWidthType !== applyFormat.preferredWidthType) {\n return false;\n }\n if (applyFormat.hasValue('verticalAlignment') && sourceFormat.verticalAlignment !== applyFormat.verticalAlignment) {\n return false;\n }\n return true;\n };\n /**\n * @private\n * @param {TableWidget} table - Specifies the table widget.\n * @returns {void}\n */\n TablePropertiesDialog.prototype.calculateGridValue = function (table) {\n table.isGridUpdated = false;\n table.buildTableColumns();\n table.isGridUpdated = true;\n this.documentHelper.selection.owner.isLayoutEnabled = true;\n this.documentHelper.layout.reLayoutTable(table);\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection);\n this.documentHelper.owner.editorModule.updateSelectionTextPosition(true);\n var history = this.documentHelper.owner.editorHistoryModule;\n if (history && history.currentBaseHistoryInfo) {\n if (history.currentBaseHistoryInfo.modifiedProperties.length > 0) {\n history.currentBaseHistoryInfo.updateSelection();\n }\n history.updateHistory();\n }\n this.documentHelper.owner.editorModule.fireContentChange();\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.loadTableProperties = function () {\n this.setTableProperties();\n this.setTableRowProperties();\n this.setTableCellProperties();\n this.setTableAltProperties();\n if (!this.documentHelper.owner.bordersAndShadingDialogModule) {\n this.bordersAndShadingButton.disabled = true;\n }\n else {\n this.bordersAndShadingButton.disabled = false;\n }\n // if (!this.documentHelper.owner.tableOptionsDialogModule) {\n // this.tableOptionButton.disabled = true;\n // } else {\n this.tableOptionButton.disabled = false;\n // }\n // if (!this.documentHelper.owner.cellOptionsDialogModule) {\n // this.cellOptionButton.disabled = true;\n // } else {\n this.cellOptionButton.disabled = false;\n // }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.wireEvent = function () {\n this.documentHelper.selection.hideCaret();\n //Table Format\n this.preferCheckBox.change = this.changeTableCheckBox.bind(this);\n this.tableWidthBox.change = this.onTableWidthChange.bind(this);\n this.tableWidthType.change = this.onTableWidthTypeChange.bind(this);\n this.leftIndentBox.change = this.onLeftIndentChange.bind(this);\n //Row Format\n this.rowHeightCheckBox.change = this.changeTableRowCheckBox.bind(this);\n this.rowHeightBox.change = this.onRowHeightChange.bind(this);\n this.rowHeightType.change = this.onRowHeightTypeChange.bind(this);\n this.allowRowBreak.change = this.onAllowBreakAcrossPage.bind(this);\n this.repeatHeader.change = this.onRepeatHeader.bind(this);\n //Cell Format\n this.preferredCellWidthCheckBox.change = this.changeTableCellCheckBox.bind(this);\n this.cellWidthBox.change = this.onCellWidthChange.bind(this);\n this.cellWidthType.change = this.onCellWidthTypeChange.bind(this);\n };\n //#region Table Format\n TablePropertiesDialog.prototype.initTableProperties = function (element, localValue, isRtl) {\n var container = createElement('div', { className: 'e-de-table-dialog-size-label' });\n var sizeHeader = createElement('div', {\n innerHTML: localValue.getConstant('Size'),\n className: 'e-de-para-dlg-heading'\n });\n //const parentContainer: HTMLDivElement = createElement('div', { styles: 'display: inline-flex;' });\n var childContainer1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var preferCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var childContainer2 = createElement('div', {\n className: 'e-de-container-row'\n });\n var preferredWidthDiv = createElement('div', {\n className: 'e-de-subcontainer-left e-de-table-dialog-row-height'\n });\n this.preferredWidth = createElement('input');\n var controlDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n var tableWidthType = createElement('select', {\n innerHTML: ''\n });\n // const labeltext: HTMLInputElement = createElement('span', {\n // innerHTML: localValue.getConstant('Measure in'),\n // className: 'e-de-table-measure-lbl'\n // });\n var alignment = createElement('div', { className: 'e-de-dlg-row' });\n var alignmentContainer = createElement('div', { className: 'e-de-subcontainer-left' });\n var alignmentHeader = createElement('div', {\n innerHTML: localValue.getConstant('Alignment'), className: 'e-de-table-dlg-alignment-heading'\n });\n var alignmentSubContainer = createElement('div', { className: 'e-de-container-row' });\n var classDivName = element.id + 'e-de-table-alignment e-de-table-dialog-alignment-icon';\n var leftDiv = createElement('div');\n var leftAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.left = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-left-alignment ' + classDivName,\n id: element.id + '_left_alignment'\n //styles: 'width:54px;height:54px;margin:2px'\n });\n leftAlignDiv.appendChild(this.left);\n leftAlignDiv.setAttribute('aria-label', localValue.getConstant('Left'));\n var centerAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n this.center = createElement('div', {\n className: 'e-icons e-de-table-properties-alignment e-de-table-center-alignment ' + classDivName,\n id: element.id + '_center_alignment'\n //styles: 'width:54px;height:54px;margin:2px'\n });\n centerAlignDiv.appendChild(this.center);\n centerAlignDiv.setAttribute('aria-label', localValue.getConstant('Center'));\n this.right = createElement('div', {\n //styles: 'width:54px;height:54px;margin:2px',\n className: 'e-icons e-de-table-properties-alignment e-de-table-right-alignment ' + classDivName,\n id: element.id + '_right_alignment'\n });\n var rightAlignDiv = createElement('div', { className: 'e-de-table-dia-align-div' });\n rightAlignDiv.appendChild(this.right);\n rightAlignDiv.setAttribute('aria-label', localValue.getConstant('Right'));\n var leftlabel = createElement('label', {\n innerHTML: localValue.getConstant('Left'), className: 'e-de-table-dia-align-label'\n });\n var centerlabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var rightlabel = createElement('label', {\n innerHTML: localValue.getConstant('Right'), className: 'e-de-table-dia-align-label'\n });\n var leftIndenetContainer = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n // let leftIndentLabelMargin: string;\n // let leftIndentBoxMargin: string;\n // if (isRtl) {\n // leftIndentLabelMargin = 'left: 45px;';\n // leftIndentBoxMargin = 'left: 45px;';\n // } else {\n // leftIndentLabelMargin = 'right: 45px;';\n // leftIndentBoxMargin = 'right: 45px;';\n // }\n // this.indentingLabel = createElement('label', {\n // innerHTML: localValue.getConstant('Indent from left'),\n // //styles: leftIndentLabelMargin,\n // className: 'e-de-tbl-indent-lbl'\n // }) as HTMLLabelElement;\n // const leftIndentBox: HTMLDivElement = createElement('div', {\n // styles: 'margin-top: 15px;position: relative;' + leftIndentBoxMargin\n // });\n this.leftIndent = createElement('input');\n var tableDirHeader = createElement('div', {\n innerHTML: localValue.getConstant('Table direction'), className: 'e-de-para-dlg-heading'\n });\n var tableDirContainer = createElement('div', { className: 'e-de-dlg-row' });\n var rtlDiv = createElement('div', { className: 'e-de-tbl-rtl-btn-div' });\n var rtlInputELe = createElement('input');\n rtlDiv.appendChild(rtlInputELe);\n tableDirContainer.appendChild(rtlDiv);\n var ltrDiv = createElement('div', { className: 'e-de-tbl-ltr-btn-div' });\n var ltrInputELe = createElement('input');\n ltrDiv.appendChild(ltrInputELe);\n tableDirContainer.appendChild(ltrDiv);\n this.rtlButton = new RadioButton({\n label: localValue.getConstant('Right-to-left'),\n value: 'rtl', cssClass: 'e-small', change: this.changeBidirectional,\n enableRtl: isRtl\n });\n this.rtlButton.appendTo(rtlInputELe);\n rtlInputELe.setAttribute('aria-label', localValue.getConstant('Right-to-left'));\n this.ltrButton = new RadioButton({\n label: localValue.getConstant('Left-to-right'),\n value: 'ltr', cssClass: 'e-small', change: this.changeBidirectional,\n enableRtl: isRtl\n });\n this.ltrButton.appendTo(ltrInputELe);\n ltrInputELe.setAttribute('aria-label', localValue.getConstant('Left-to-right'));\n var tableOptionContiner = createElement('div', {\n className: 'e-de-tbl-dlg-border-btn'\n });\n // if (isRtl) {\n // tableOptionContiner.style.cssFloat = 'left';\n // }\n this.bordersAndShadingButton = createElement('button', {\n innerHTML: localValue.getConstant('Borders and Shading') + '...',\n className: 'e-control e-btn e-de-ok-button',\n attrs: { type: 'button' }\n });\n this.tableOptionButton = createElement('button', {\n className: 'e-control e-btn', innerHTML: localValue.getConstant('Options') + '...',\n attrs: { type: 'button' }\n });\n this.tableOptionButton.addEventListener('click', this.showTableOptionsDialog);\n this.bordersAndShadingButton.addEventListener('click', this.showBordersShadingsPropertiesDialog);\n tableOptionContiner.appendChild(this.bordersAndShadingButton);\n tableOptionContiner.appendChild(this.tableOptionButton);\n leftIndenetContainer.appendChild(this.leftIndent);\n alignmentSubContainer.appendChild(leftDiv);\n alignmentContainer.appendChild(alignmentHeader);\n leftDiv.appendChild(leftAlignDiv);\n alignmentContainer.appendChild(alignmentSubContainer);\n alignmentSubContainer.appendChild(centerAlignDiv);\n alignmentSubContainer.appendChild(rightAlignDiv);\n leftAlignDiv.appendChild(leftlabel);\n centerAlignDiv.appendChild(centerlabel);\n rightAlignDiv.appendChild(rightlabel);\n alignment.appendChild(alignmentContainer);\n container.appendChild(sizeHeader);\n element.appendChild(container);\n childContainer1.appendChild(preferCheckBox);\n container.appendChild(childContainer1);\n preferredWidthDiv.appendChild(this.preferredWidth);\n container.appendChild(childContainer2);\n controlDiv.appendChild(tableWidthType);\n alignment.appendChild(leftIndenetContainer);\n childContainer2.appendChild(preferredWidthDiv);\n childContainer2.appendChild(controlDiv);\n element.appendChild(alignment);\n element.appendChild(tableDirHeader);\n element.appendChild(tableDirContainer);\n element.appendChild(tableOptionContiner);\n this.tableWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, enablePersistence: false\n });\n this.tableWidthBox.appendTo(this.preferredWidth);\n this.leftIndentBox = new NumericTextBox({\n value: 0, decimals: 2, min: -1584, max: 1584, enablePersistence: false, floatLabelType: 'Always', placeholder: localValue.getConstant('Indent from left')\n });\n this.leftIndentBox.appendTo(this.leftIndent);\n this.preferCheckBox = new CheckBox({\n label: localValue.getConstant('Preferred Width'), enableRtl: isRtl\n });\n this.preferCheckBox.appendTo(preferCheckBox);\n preferCheckBox.setAttribute('aria-label', localValue.getConstant('Preferred Width'));\n this.leftIndent.setAttribute('aria-labelledby', localValue.getConstant('Indent from left'));\n this.tableWidthType = new DropDownList({ enableRtl: isRtl, floatLabelType: 'Always', placeholder: localValue.getConstant('Measure in'), htmlAttributes: { 'aria-labelledby': localValue.getConstant('Measure in') } });\n this.tableWidthType.appendTo(tableWidthType);\n if (isRtl) {\n rtlDiv.classList.add('e-de-rtl');\n //childContainer2.classList.add('e-de-rtl');\n leftIndenetContainer.classList.add('e-de-rtl');\n tableOptionContiner.classList.add('e-de-rtl');\n //this.bordersAndShadingButton.classList.add('e-de-rtl');\n leftAlignDiv.classList.add('e-de-rtl');\n centerAlignDiv.classList.add('e-de-rtl');\n rightAlignDiv.classList.add('e-de-rtl');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onTableWidthChange = function () {\n this.tableFormat.preferredWidth = this.tableWidthBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onTableWidthTypeChange = function () {\n var value;\n //const table: TableWidget = this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var width = HelperMethods.convertPixelToPoint(this.documentHelper.owner.viewer.clientArea.width);\n if (this.tableWidthType.text === 'Percent' && this.documentHelper.selection.tableFormat.preferredWidthType !== 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n this.formatNumericTextBox(this.tableWidthBox, 'Percent', value);\n }\n else if (this.tableWidthType.text === 'Points' && this.documentHelper.selection.tableFormat.preferredWidthType !== 'Point') {\n value = width / 100 * this.tableWidthBox.value;\n this.formatNumericTextBox(this.tableWidthBox, 'Point', value);\n }\n else {\n if (this.tableWidthBox.format === '#\\'%\\'') {\n if (this.tableWidthType.text === 'Points') {\n value = width / 100 * this.tableWidthBox.value;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n else {\n if (this.tableWidthType.text === 'Percent') {\n value = this.tableWidthBox.value / width * 100;\n }\n else {\n value = this.tableWidthBox.value;\n }\n }\n this.formatNumericTextBox(this.tableWidthBox, (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text, value);\n }\n this.tableFormat.preferredWidthType = (this.tableWidthType.text === 'Points') ? 'Point' : this.tableWidthType.text;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onLeftIndentChange = function () {\n this.tableFormat.leftIndent = this.leftIndentBox.value;\n };\n TablePropertiesDialog.prototype.setTableAltProperties = function () {\n var tableFormat = this.documentHelper.selection.tableFormat;\n if (isNullOrUndefined(tableFormat.title)) {\n this.titleTextBox.value = '';\n }\n else {\n this.titleTextBox.value = tableFormat.title;\n }\n if (isNullOrUndefined(tableFormat.description)) {\n this.descriptionTextBox.value = '';\n }\n else {\n this.descriptionTextBox.value = tableFormat.description;\n }\n };\n TablePropertiesDialog.prototype.setTableProperties = function () {\n //instance of Table Property values\n var tableFormat = this.documentHelper.selection.tableFormat;\n var tableHasWidth = tableFormat.preferredWidth > 0;\n var preferredWidth = tableFormat.preferredWidth;\n if (isNullOrUndefined(tableFormat.preferredWidth)) {\n this.preferCheckBox.indeterminate = true;\n var startTable = this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var table = startTable.combineWidget(this.documentHelper.owner.viewer);\n preferredWidth = table.tableFormat.preferredWidth;\n }\n else {\n this.preferCheckBox.checked = tableHasWidth;\n }\n this.tableWidthBox.enabled = tableHasWidth;\n this.tableWidthType.enabled = tableHasWidth;\n this.formatNumericTextBox(this.tableWidthBox, tableFormat.preferredWidthType, preferredWidth);\n if (tableFormat.preferredWidthType === 'Auto' || tableFormat.preferredWidthType === 'Point') {\n this.tableWidthType.index = 0;\n }\n else {\n this.tableWidthType.index = 1;\n }\n this.activeTableAlignment(tableFormat, false);\n if (tableFormat.bidi) {\n this.rtlButton.checked = true;\n this.ltrButton.checked = false;\n }\n else {\n this.ltrButton.checked = true;\n this.rtlButton.checked = false;\n }\n };\n TablePropertiesDialog.prototype.activeTableAlignment = function (tableFormat, isChanged) {\n var tableAlignment = isChanged ? this.tableFormat.tableAlignment : undefined;\n // Consider the TableAlignment based on the Bidirectional property.\n if (isNullOrUndefined(tableAlignment)) {\n if (tableFormat.bidi) {\n if (tableFormat.tableAlignment === 'Left') {\n tableAlignment = 'Right';\n }\n else if (tableFormat.tableAlignment === 'Right') {\n tableAlignment = 'Left';\n }\n }\n else {\n tableAlignment = tableFormat.tableAlignment;\n }\n }\n if (tableFormat.bidi) {\n this.leftIndentBox.enabled = tableAlignment === 'Right';\n //this.indentingLabel.innerHTML = this.localValue.getConstant('Indent from right');\n this.leftIndentBox.placeholder = this.localValue.getConstant('Indent from right');\n }\n else {\n this.leftIndentBox.enabled = tableAlignment === 'Left';\n //this.indentingLabel.innerHTML = this.localValue.getConstant('Indent from left');\n this.leftIndentBox.placeholder = this.localValue.getConstant('Indent from left');\n }\n this.leftIndentBox.value = tableFormat.leftIndent;\n classList(this.left, [], ['e-de-table-alignment-active']);\n classList(this.right, [], ['e-de-table-alignment-active']);\n classList(this.center, [], ['e-de-table-alignment-active']);\n if (tableAlignment === 'Left') {\n classList(this.left, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n //this.left.classList.add('e-de-table-alignment-active');\n }\n else if (tableAlignment === 'Center') {\n classList(this.center, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n //this.center.classList.add('e-de-table-alignment-active');\n }\n else if (tableAlignment === 'Right') {\n classList(this.right, ['e-de-table-alignment-active'], ['e-de-table-properties-alignment']);\n //this.right.classList.add('e-de-table-alignment-active');\n }\n };\n /**\n * @private\n * @returns {string} Resturns table alignment\n */\n TablePropertiesDialog.prototype.getTableAlignment = function () {\n var id = this.tableTab.id;\n var groupButtons = this.tableTab.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[parseInt(j.toString(), 10)];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return this.ltrButton.checked ? 'Left' : 'Right';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return this.ltrButton.checked ? 'Right' : 'Left';\n }\n }\n }\n return undefined;\n };\n TablePropertiesDialog.prototype.updateClassForAlignmentProperties = function (element) {\n var id = element.id;\n var groupButtons = element.getElementsByClassName(id + 'e-de-table-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[parseInt(j.toString(), 10)];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n classList(groupButton, ['e-de-table-properties-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n //#endregion\n //#region Row Format\n TablePropertiesDialog.prototype.initTableRowProperties = function (element, localValue, isRtl) {\n var sizeDiv = createElement('div', { className: 'e-de-table-dialog-size-label' });\n var sizeLabeldiv = createElement('div', {\n innerHTML: localValue.getConstant('Size'),\n className: 'e-de-para-dlg-heading'\n });\n //const parentDiv: HTMLDivElement = createElement('div');\n // let childDiv1Float: string;\n // if (isRtl) {\n // childDiv1Float = 'float: right;';\n // } else {\n // childDiv1Float = 'float: left;';\n // }\n var childDiv1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var rowHeightCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var childdiv2 = createElement('div', {\n className: 'e-de-container-row'\n });\n var rowHeightDiv = createElement('div', {\n className: 'e-de-subcontainer-left e-de-table-dialog-row-height'\n });\n this.rowHeight = createElement('input', {\n attrs: { 'type': 'text' }\n });\n //let child2Float: string;\n // if (isRtl) {\n // child2Float = 'float: left;';\n // } else {\n // child2Float = 'float: right;';\n // }\n var controlDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n //const child3: HTMLDivElement = createElement('div') as HTMLDivElement;\n //const child4: HTMLDivElement = createElement('div') as HTMLDivElement;\n //const controlDiv: HTMLDivElement = createElement('div', {className: 'e-de-subcontainer-right'}) as HTMLDivElement;\n var rowHeightType = createElement('select', {\n innerHTML: ''\n });\n // const labeltext: HTMLLabelElement = createElement('span', {\n // innerHTML: localValue.getConstant('Row height is'),\n // className: 'e-de-table-measure-lbl'\n // });\n sizeDiv.appendChild(sizeLabeldiv);\n element.appendChild(sizeDiv);\n childDiv1.appendChild(rowHeightCheckBox);\n sizeDiv.appendChild(childDiv1);\n childdiv2.appendChild(rowHeightDiv);\n sizeDiv.appendChild(childdiv2);\n rowHeightDiv.appendChild(this.rowHeight);\n controlDiv.appendChild(rowHeightType);\n childdiv2.appendChild(controlDiv);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Options') + '...',\n className: 'e-de-para-dlg-heading'\n });\n var allowRowContainer = createElement('div', { className: 'e-de-table-ppty-options-break' });\n var repeatHeaderContaniner = createElement('div', { className: 'e-de-table-ppty-options-header-row' });\n var allowRowBreak = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var repeatHeader = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n allowRowContainer.appendChild(allowRowBreak);\n repeatHeaderContaniner.appendChild(repeatHeader);\n element.appendChild(alignmentDiv);\n element.appendChild(allowRowContainer);\n element.appendChild(repeatHeaderContaniner);\n this.rowHeightBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, enablePersistence: false\n });\n this.rowHeightBox.appendTo(this.rowHeight);\n this.rowHeightCheckBox = new CheckBox({\n label: localValue.getConstant('Specify height'),\n enableRtl: isRtl\n });\n this.rowHeightCheckBox.appendTo(rowHeightCheckBox);\n rowHeightCheckBox.setAttribute('aria-label', localValue.getConstant('Specify height'));\n this.rowHeightType = new DropDownList({ enableRtl: isRtl, floatLabelType: 'Always', placeholder: localValue.getConstant('Row height is'), htmlAttributes: { 'aria-labelledby': localValue.getConstant('Row height is') } });\n this.rowHeightType.appendTo(rowHeightType);\n this.allowRowBreak = new CheckBox({\n label: localValue.getConstant('Allow row to break across pages'),\n enableRtl: isRtl\n });\n this.allowRowBreak.appendTo(allowRowBreak);\n allowRowBreak.setAttribute('aria-label', localValue.getConstant('Allow row to break across pages'));\n this.repeatHeader = new CheckBox({\n label: localValue.getConstant('Repeat as header row at the top of each page'),\n enableRtl: isRtl\n });\n this.repeatHeader.appendTo(repeatHeader);\n repeatHeader.setAttribute('aria-label', localValue.getConstant('Repeat as header row at the top of each page'));\n // if (isRtl) {\n // child3.classList.add('e-de-rtl');\n // child4.classList.add('e-de-rtl');\n // childdiv2.classList.add('e-de-rtl');\n // }\n };\n TablePropertiesDialog.prototype.setTableRowProperties = function () {\n var rowFormat = this.documentHelper.selection.rowFormat;\n var enableRowHeight = (rowFormat.height > 0 || rowFormat.heightType === 'Exactly');\n //instance of table row values\n if (enableRowHeight) {\n this.rowHeightCheckBox.checked = true;\n }\n else {\n if (rowFormat.heightType === undefined) {\n this.rowHeightCheckBox.indeterminate = true;\n enableRowHeight = true;\n }\n else {\n this.rowHeightCheckBox.checked = false;\n }\n }\n this.rowHeightBox.enabled = enableRowHeight;\n this.rowHeightType.enabled = enableRowHeight;\n var enabledHeader = this.enableRepeatHeader() ? false : true;\n if (isNullOrUndefined(this.documentHelper.selection.rowFormat.isHeader)) {\n this.repeatHeader.indeterminate = true;\n this.repeatHeader.disabled = true;\n }\n else if (this.documentHelper.selection.rowFormat.isHeader) {\n this.repeatHeader.checked = !enabledHeader;\n this.repeatHeader.indeterminate = enabledHeader;\n this.repeatHeader.disabled = enabledHeader;\n }\n else {\n this.repeatHeader.checked = false;\n this.repeatHeader.indeterminate = false;\n this.repeatHeader.disabled = enabledHeader;\n }\n if (isNullOrUndefined(rowFormat.allowBreakAcrossPages)) {\n this.allowRowBreak.indeterminate = true;\n }\n else {\n this.allowRowBreak.checked = rowFormat.allowBreakAcrossPages;\n }\n this.rowHeightBox.value = rowFormat.height;\n if (rowFormat.heightType === 'Auto' || rowFormat.heightType === 'AtLeast') {\n this.rowHeightType.index = 0;\n }\n else {\n this.rowHeightType.index = 1;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onRowHeightChange = function () {\n this.rowHeightValue = this.rowHeightBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onRowHeightTypeChange = function () {\n this.rowFormat.heightType = this.rowHeightType.text;\n };\n TablePropertiesDialog.prototype.onAllowBreakAcrossPage = function () {\n this.rowFormat.allowBreakAcrossPages = this.allowRowBreak.checked;\n };\n TablePropertiesDialog.prototype.onRepeatHeader = function () {\n this.rowFormat.isHeader = this.repeatHeader.checked;\n };\n /**\n * @private\n * @returns {boolean} Returns enable repeat header\n */\n TablePropertiesDialog.prototype.enableRepeatHeader = function () {\n var selection = this.documentHelper.selection;\n var start = selection.start;\n var end = selection.end;\n if (!selection.isForward) {\n start = selection.end;\n end = selection.start;\n }\n var startCell = start.paragraph.associatedCell;\n var endCell = end.paragraph.associatedCell;\n return startCell.ownerRow.index === 0 && endCell.ownerTable.equals(startCell.ownerTable);\n };\n //#endregion\n TablePropertiesDialog.prototype.initTableAltProperties = function (element, localValue, isRtl) {\n var altDiv = createElement('div', { className: 'e-de-table-dialog-size-label' });\n element.appendChild(altDiv);\n var titleDiv = createElement('div', {\n innerHTML: localValue.getConstant('Title'), className: 'e-de-para-dlg-heading'\n });\n altDiv.appendChild(titleDiv);\n var childdiv1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var titleTextBox1 = createElement('input', {});\n this.titleTextBox = new TextBox({\n floatLabelType: 'Never'\n });\n altDiv.appendChild(childdiv1);\n childdiv1.appendChild(titleTextBox1);\n this.titleTextBox.appendTo(titleTextBox1);\n var descriptionDiv = createElement('div', {\n innerHTML: localValue.getConstant('Description'), className: 'e-de-para-dlg-heading'\n });\n altDiv.appendChild(descriptionDiv);\n var childdiv2 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var descriptionText = createElement('textarea', {});\n this.descriptionTextBox = new TextBox({\n floatLabelType: 'Never'\n });\n childdiv2.appendChild(descriptionText);\n this.descriptionTextBox.appendTo(descriptionText);\n altDiv.appendChild(childdiv2);\n };\n //#region Cell Format\n TablePropertiesDialog.prototype.initTableCellProperties = function (element, localValue, isRtl) {\n var sizeDiv = createElement('div', { className: 'e-de-table-dialog-size-label' });\n var div = createElement('div', {\n innerHTML: localValue.getConstant('Size'), className: 'e-de-para-dlg-heading'\n });\n //const parentdiv: HTMLDivElement = createElement('div');\n // let childdiv1Float: string;\n // if (isRtl) {\n // childdiv1Float = 'float: right';\n // } else {\n // childdiv1Float = 'float: left';\n // }\n var childdiv1 = createElement('div', {\n className: 'e-de-table-ppty-options-break'\n });\n var preferredCellWidthCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }\n });\n var childdiv2 = createElement('div', {\n className: 'e-de-container-row'\n });\n var preferredCellDiv = createElement('div', {\n className: 'e-de-subcontainer-left e-de-table-dialog-row-height'\n });\n this.preferredCellWidth = createElement('input', {\n attrs: { 'type': 'text' }\n });\n // let child2Float: string;\n // if (isRtl) {\n // child2Float = 'float: left;';\n // } else {\n // child2Float = 'float: right;';\n // }\n var controlDiv = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n //const child3: HTMLDivElement = createElement('div');\n // let child4Float: string;\n // if (isRtl) {\n // child4Float = 'float: left;';\n // } else {\n // child4Float = 'float: right;';\n // }\n //const child4: HTMLDivElement = createElement('div');\n //const controlDiv: HTMLDivElement = createElement('div') as HTMLDivElement;\n var cellWidthType = createElement('select', {\n innerHTML: ''\n });\n // const labeltext: HTMLLabelElement = createElement('span', {\n // innerHTML: localValue.getConstant('Measure in'),\n // className: 'e-de-table-measure-lbl'\n // }) as HTMLLabelElement;\n sizeDiv.appendChild(div);\n element.appendChild(sizeDiv);\n childdiv1.appendChild(preferredCellWidthCheckBox);\n preferredCellWidthCheckBox.setAttribute('aria-label', localValue.getConstant('Preferred Width'));\n sizeDiv.appendChild(childdiv1);\n preferredCellDiv.appendChild(this.preferredCellWidth);\n sizeDiv.appendChild(childdiv2);\n childdiv2.appendChild(preferredCellDiv);\n childdiv2.appendChild(controlDiv);\n controlDiv.appendChild(cellWidthType);\n var alignmentDiv = createElement('div', {\n innerHTML: localValue.getConstant('Vertical alignment'),\n className: 'e-de-para-dlg-heading'\n });\n var classDivName = element.id + 'e-de-table-cell-alignment e-de-tablecell-dialog-alignment-icon';\n var divAlignment = createElement('div', {\n className: 'e-de-container-row'\n });\n var topDiv = createElement('div');\n //const divStyle: string = 'width:54px;height:54px;margin:2px;border-style:solid;border-width:1px';\n var topAlignDiv = createElement('div', { className: 'e-de-tablecell-dia-align-div' });\n this.cellTopAlign = createElement('div', {\n id: element.id + '_cell_top-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-top-alignment ' + classDivName\n });\n topAlignDiv.appendChild(this.cellTopAlign);\n topAlignDiv.setAttribute('aria-label', localValue.getConstant('Top'));\n var centerAlignDiv = createElement('div', { className: 'e-de-tablecell-dia-align-div' });\n this.cellCenterAlign = createElement('div', {\n id: element.id + '_cell_center-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-center-alignment ' + classDivName\n });\n centerAlignDiv.appendChild(this.cellCenterAlign);\n centerAlignDiv.setAttribute('aria-label', localValue.getConstant('Center'));\n var bottomAlignDiv = createElement('div', { className: 'e-de-tablecell-dia-align-div' });\n this.cellBottomAlign = createElement('div', {\n id: element.id + '_cell_bottom-alignment',\n className: 'e-icons e-de-tablecell-alignment e-de-tablecell-bottom-alignment ' + classDivName\n });\n bottomAlignDiv.appendChild(this.cellBottomAlign);\n bottomAlignDiv.setAttribute('aria-label', localValue.getConstant('Bottom'));\n var topLabel = createElement('label', {\n innerHTML: localValue.getConstant('Top'), className: 'e-de-table-dia-align-label'\n });\n var centerLabel = createElement('label', {\n innerHTML: localValue.getConstant('Center'), className: 'e-de-table-dia-align-label'\n });\n var bottomLabel = createElement('label', {\n innerHTML: localValue.getConstant('Bottom'), className: 'e-de-table-dia-align-label'\n });\n this.cellOptionButton = createElement('button', {\n innerHTML: localValue.getConstant('Options') + '...',\n className: 'e-control e-btn', attrs: { type: 'button' }\n });\n this.cellOptionButton.style.cssFloat = isRtl ? 'left' : 'right';\n divAlignment.appendChild(topDiv);\n topDiv.appendChild(topAlignDiv);\n divAlignment.appendChild(centerAlignDiv);\n divAlignment.appendChild(bottomAlignDiv);\n topAlignDiv.appendChild(topLabel);\n centerAlignDiv.appendChild(centerLabel);\n bottomAlignDiv.appendChild(bottomLabel);\n element.appendChild(alignmentDiv);\n element.appendChild(divAlignment);\n element.appendChild(this.cellOptionButton);\n this.cellOptionButton.addEventListener('click', this.showCellOptionsDialog);\n this.cellWidthBox = new NumericTextBox({\n value: 0, decimals: 2, min: 0, max: 1584, enablePersistence: false\n });\n this.cellWidthBox.appendTo(this.preferredCellWidth);\n this.preferredCellWidthCheckBox = new CheckBox({ label: localValue.getConstant('Preferred Width'), enableRtl: isRtl });\n this.preferredCellWidthCheckBox.appendTo(preferredCellWidthCheckBox);\n preferredCellWidthCheckBox.setAttribute('aria-label', localValue.getConstant('Preferred Width'));\n this.cellWidthType = new DropDownList({ enableRtl: isRtl, floatLabelType: 'Always', placeholder: localValue.getConstant('Measure in'), htmlAttributes: { 'aria-labelledby': localValue.getConstant('Measure in') } });\n this.cellWidthType.appendTo(cellWidthType);\n // if (isRtl) {\n // childdiv2.classList.add('e-de-rtl');\n // child3.classList.add('e-de-rtl');\n // child4.classList.add('e-de-rtl');\n // this.cellOptionButton.classList.add('e-de-rtl');\n // topAlignDiv.classList.add('e-de-rtl');\n // centerAlignDiv.classList.add('e-de-rtl');\n // bottomAlignDiv.classList.add('e-de-rtl');\n // }\n };\n TablePropertiesDialog.prototype.setTableCellProperties = function () {\n var cellFormat = this.documentHelper.selection.cellFormat;\n //instance of table cell Values\n this.hasCellWidth = cellFormat.preferredWidth > 0;\n var preferredWidth = cellFormat.preferredWidth;\n if (isNullOrUndefined(cellFormat.preferredWidth)) {\n this.preferredCellWidthCheckBox.indeterminate = true;\n preferredWidth = this.documentHelper.selection.start.paragraph.associatedCell.cellFormat.preferredWidth;\n }\n else {\n this.preferredCellWidthCheckBox.checked = this.hasCellWidth;\n }\n this.cellWidthBox.enabled = this.hasCellWidth;\n this.cellWidthType.enabled = this.hasCellWidth;\n if (cellFormat.preferredWidthType === 'Auto' || cellFormat.preferredWidthType === 'Point') {\n this.cellWidthType.index = 0;\n }\n else {\n this.cellWidthType.index = 1;\n }\n this.formatNumericTextBox(this.cellWidthBox, cellFormat.preferredWidthType, preferredWidth);\n classList(this.cellTopAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellCenterAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n classList(this.cellBottomAlign, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n if (cellFormat.verticalAlignment === 'Top') {\n classList(this.cellTopAlign, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n //this.cellTopAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Center') {\n classList(this.cellCenterAlign, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n //this.cellCenterAlign.classList.add('e-de-table-alignment-active');\n }\n else if (cellFormat.verticalAlignment === 'Bottom') {\n classList(this.cellBottomAlign, ['e-de-table-alignment-active'], ['e-de-tablecell-alignment']);\n //this.cellBottomAlign.classList.add('e-de-table-alignment-active');\n }\n };\n TablePropertiesDialog.prototype.updateClassForCellAlignment = function (element) {\n var cellAlignments = element.getElementsByClassName(element.id + 'e-de-table-cell-alignment');\n for (var j = 0; j < cellAlignments.length; j++) {\n var cellAlignment = cellAlignments[parseInt(j.toString(), 10)];\n if (cellAlignment.classList.contains('e-de-table-alignment-active')) {\n classList(cellAlignment, ['e-de-tablecell-alignment'], ['e-de-table-alignment-active']);\n }\n }\n };\n TablePropertiesDialog.prototype.formatNumericTextBox = function (textBox, format, value) {\n if (format === 'Auto' || format === 'Point') {\n textBox.format = 'n2';\n }\n else {\n textBox.format = '#\\'%\\'';\n }\n textBox.step = 1;\n textBox.decimals = 2;\n textBox.value = value;\n textBox.htmlAttributes = { 'aria-label': 'cellWidth' };\n };\n /**\n * @private\n * @returns {string} - Returns the alignement.\n */\n TablePropertiesDialog.prototype.getCellAlignment = function () {\n var id = this.cellTab.id;\n var groupButtons = this.cellTab.getElementsByClassName(id + 'e-de-table-cell-alignment');\n for (var j = 0; j < groupButtons.length; j++) {\n var groupButton = groupButtons[parseInt(j.toString(), 10)];\n if (groupButton.classList.contains('e-de-table-alignment-active')) {\n if (j === 0) {\n return 'Top';\n }\n else if (j === 1) {\n return 'Center';\n }\n else {\n return 'Bottom';\n }\n }\n }\n return this.documentHelper.selection.cellFormat.verticalAlignment;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onCellWidthChange = function () {\n this.cellFormat.preferredWidth = this.cellWidthBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TablePropertiesDialog.prototype.onCellWidthTypeChange = function () {\n var value;\n var table = this.documentHelper.selection.start.paragraph.associatedCell.ownerTable;\n var containerWidth = table.getOwnerWidth(true);\n var tableWidth = table.getTableClientWidth(containerWidth);\n if (this.cellWidthType.text === 'Percent' && this.documentHelper.selection.cellFormat.preferredWidthType !== 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n this.formatNumericTextBox(this.cellWidthBox, 'Percent', value);\n }\n else if (this.cellWidthType.text === 'Points' && this.documentHelper.selection.cellFormat.preferredWidthType !== 'Point') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n this.formatNumericTextBox(this.cellWidthBox, 'Point', value);\n }\n else {\n if (this.cellWidthBox.format === '#\\'%\\'') {\n if (this.cellWidthType.text === 'Points') {\n value = tableWidth / 100 * this.cellWidthBox.value;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n else {\n if (this.cellWidthType.text === 'Percent') {\n value = this.cellWidthBox.value / tableWidth * 100;\n }\n else {\n value = this.cellWidthBox.value;\n }\n }\n this.formatNumericTextBox(this.cellWidthBox, (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text, value);\n }\n this.cellFormat.preferredWidthType = (this.cellWidthType.text === 'Points') ? 'Point' : this.cellWidthType.text;\n };\n /**\n * @private\n *\n * @returns {void}\n */\n TablePropertiesDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var s = 0; s < this.target.childNodes.length; s++) {\n this.target.removeChild(this.target.childNodes[parseInt(s.toString(), 10)]);\n s--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.cellAlignment = undefined;\n this.tableAlignment = undefined;\n this.documentHelper = undefined;\n this.preferCheckBox = undefined;\n this.tableWidthType = undefined;\n this.preferredWidth = undefined;\n this.rowHeightType = undefined;\n this.rowHeightCheckBox = undefined;\n this.rowHeight = undefined;\n this.cellWidthType = undefined;\n this.preferredCellWidthCheckBox = undefined;\n this.preferredCellWidth = undefined;\n this.tableTab = undefined;\n this.rowTab = undefined;\n this.cellTab = undefined;\n this.left = undefined;\n this.center = undefined;\n this.right = undefined;\n this.leftIndent = undefined;\n this.allowRowBreak = undefined;\n this.repeatHeader = undefined;\n this.cellTopAlign = undefined;\n this.cellCenterAlign = undefined;\n this.cellBottomAlign = undefined;\n this.titleTextBox = undefined;\n this.descriptionTextBox = undefined;\n this.altTab = undefined;\n if (this.paraFormatIn) {\n this.paraFormatIn.destroy();\n this.paraFormatIn = undefined;\n }\n if (this.tableFormatIn) {\n this.tableFormatIn.destroy();\n }\n if (this.cellFormatIn) {\n this.cellFormatIn.destroy();\n }\n this.tableFormatIn = undefined;\n this.cellFormatIn = undefined;\n };\n return TablePropertiesDialog;\n}());\nexport { TablePropertiesDialog };\n","import { classList, createElement, initializeCSPTemplate, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat, WBorder, WBorders, WShading, WCellFormat } from '../format/index';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * The Borders and Shading dialog is used to modify borders and shading options for selected table or cells.\n */\nvar BordersAndShadingDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function BordersAndShadingDialog(documentHelper) {\n var _this = this;\n this.cellFormat = new WCellFormat();\n this.tableFormat = new WTableFormat();\n this.isShadingChanged = false;\n /**\n * @private\n * @returns {void}\n */\n this.applyBordersShadingsProperties = function () {\n var tablePropertiesDialog = _this.documentHelper.owner.tablePropertiesDialogModule;\n var selectedCell = _this.documentHelper.selection.start.paragraph.associatedCell;\n //Need to bind the properties with current cell and current table formats.\n var borders = undefined;\n if (_this.checkClassName(_this.previewDivTopTop) || _this.checkClassName(_this.previewDivTopBottom)\n || _this.checkClassName(_this.previewDivTopCenter) || _this.checkClassName(_this.previewDivBottomcenter)\n || _this.checkClassName(_this.previewDivBottomLeft) || _this.checkClassName(_this.previewDivBottomRight)\n || _this.checkClassName(_this.previewDivDiagonalRight) || _this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders = new WBorders();\n if (_this.checkClassName(_this.previewDivTopTop)) {\n borders.top = _this.getBorder('top');\n }\n if (_this.checkClassName(_this.previewDivTopBottom)) {\n borders.bottom = _this.getBorder('bottom');\n }\n if (_this.checkClassName(_this.previewDivBottomLeft)) {\n borders.left = _this.getBorder('left');\n }\n if (_this.checkClassName(_this.previewDivBottomRight)) {\n borders.right = _this.getBorder('right');\n }\n if (_this.checkClassName(_this.previewDivTopCenter)) {\n borders.horizontal = _this.getBorder('horizontal');\n }\n if (_this.checkClassName(_this.previewDivBottomcenter)) {\n borders.vertical = _this.getBorder('vertical');\n }\n if (_this.checkClassName(_this.previewDivLeftDiagonal)) {\n borders.diagonalDown = _this.getBorder('diagonalDown');\n }\n if (_this.checkClassName(_this.previewDivDiagonalRight)) {\n borders.diagonalUp = _this.getBorder('diagonalUp');\n }\n }\n var shading = new WShading();\n var editorModule = _this.documentHelper.owner.editorModule;\n shading.backgroundColor = _this.shadingColorPicker.value;\n if (_this.ulelementShading.value === 'Cell') {\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isCellBordersAndShadingUpdated = true;\n }\n _this.cellFormat.borders = new WBorders();\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.cellFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(selectedCell.cellFormat.shading)) {\n shading.foregroundColor = selectedCell.cellFormat.shading.foregroundColor;\n shading.textureStyle = selectedCell.cellFormat.shading.textureStyle;\n }\n _this.cellFormat.shading = new WShading();\n editorModule.applyShading(_this.cellFormat.shading, shading);\n }\n else if (_this.ulelementShading.value === 'Table') {\n if (tablePropertiesDialog) {\n tablePropertiesDialog.isTableBordersAndShadingUpdated = true;\n }\n var currentTableFormat = _this.documentHelper.owner.selectionModule.tableFormat.table.tableFormat;\n _this.tableFormat.copyFormat(currentTableFormat);\n _this.tableFormat.borders = new WBorders();\n // when we copy a table and paste it in documentEditor, in that case rowFormat and cellFormat has a border value instead of tableFormat. So, we need to clear the border value from rowFormat and cellFormat.\n if (!isNullOrUndefined(borders) || _this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n var table = _this.documentHelper.owner.selectionModule.tableFormat.table;\n for (var _i = 0, _a = table.childWidgets; _i < _a.length; _i++) {\n var rowWidget = _a[_i];\n _this.updateBorder(table.tableFormat.borders.left, rowWidget.rowFormat.borders.left);\n _this.updateBorder(table.tableFormat.borders.top, rowWidget.rowFormat.borders.top);\n _this.updateBorder(table.tableFormat.borders.right, rowWidget.rowFormat.borders.right);\n _this.updateBorder(table.tableFormat.borders.bottom, rowWidget.rowFormat.borders.bottom);\n var rowHorizontalBorder = rowWidget.rowFormat.borders.horizontal;\n var tableHorizontalBorder = table.tableFormat.borders.horizontal;\n if ((rowHorizontalBorder.lineStyle === 'Single' && tableHorizontalBorder.lineStyle === 'None') ||\n (rowHorizontalBorder.lineStyle === 'Cleared' && tableHorizontalBorder.lineStyle === 'Cleared')) {\n tableHorizontalBorder.lineStyle = 'Single';\n tableHorizontalBorder.lineWidth = rowHorizontalBorder.lineWidth;\n }\n var rowVerticalBorder = rowWidget.rowFormat.borders.vertical;\n var tableVerticalBorder = table.tableFormat.borders.vertical;\n if ((rowVerticalBorder.lineStyle === 'Single' && tableVerticalBorder.lineStyle === 'None') ||\n (rowVerticalBorder.lineStyle === 'Cleared' && tableVerticalBorder.lineStyle === 'Cleared')) {\n tableVerticalBorder.lineStyle = 'Single';\n tableVerticalBorder.lineWidth = rowVerticalBorder.lineWidth;\n }\n rowWidget.rowFormat.borders.clearFormat();\n for (var _b = 0, _c = rowWidget.childWidgets; _b < _c.length; _b++) {\n var cellWidget = _c[_b];\n cellWidget.cellFormat.borders.clearFormat();\n }\n }\n }\n if (!isNullOrUndefined(borders)) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, borders);\n }\n else if (_this.noneDiv.classList.contains('e-de-table-border-inside-setting-click')) {\n editorModule.applyBordersInternal(_this.tableFormat.borders, new WBorders());\n }\n // Once option has been added for texture and foreground, need to handle this similar to Shading Fill.\n if (!isNullOrUndefined(currentTableFormat.shading)) {\n shading.foregroundColor = currentTableFormat.shading.foregroundColor;\n shading.textureStyle = currentTableFormat.shading.textureStyle;\n }\n _this.tableFormat.shading = new WShading();\n _this.isShadingChanged = currentTableFormat.shading.backgroundColor !== shading.backgroundColor;\n editorModule.applyShading(_this.tableFormat.shading, shading);\n }\n else if (_this.ulelementShading.value === 'Paragraph') {\n var isNoneBorder = _this.noneDiv.classList.contains('e-de-table-border-inside-setting-click');\n if (!isNullOrUndefined(_this.paragraphFormat)) {\n editorModule.applyBordersInternal(_this.paragraphFormat.borders, isNoneBorder ? new WBorders() : borders);\n }\n else {\n editorModule.onApplyParagraphFormat('borders', isNoneBorder ? new WBorders() : borders, false, false);\n }\n }\n _this.applyFormat();\n _this.closeDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.closeBordersShadingsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeBordersShadingsDialog = function () {\n _this.paragraphFormat = undefined;\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @param {Event} event - Specifies the event args.\n * @returns {void}\n */\n this.handleSettingCheckBoxAction = function (event) {\n var targetId = event.target.id;\n var tableBorderDialogId = _this.target.id;\n // let targetDiv: HTMLDivElement;\n if (targetId === tableBorderDialogId + '_None_Div' || targetId === tableBorderDialogId + '_None_Div_Container'\n || targetId === tableBorderDialogId + '_None_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('none');\n }\n else if (targetId === tableBorderDialogId + '_Box_Div' || targetId === tableBorderDialogId + '_Box_Div_Container'\n || targetId === tableBorderDialogId + '_Box_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('box');\n }\n else if (targetId === tableBorderDialogId + '_All_Div' || targetId === tableBorderDialogId + '_All_Div_Container'\n || targetId === tableBorderDialogId + '_All_Div_Transparent') {\n _this.updateClassForSettingDivElements();\n _this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('all');\n }\n else {\n if (_this.ulelementShading.value === 'Paragraph') {\n _this.updateClassForSettingDivElements();\n _this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('customDiv');\n }\n else {\n _this.updateClassForSettingDivElements();\n _this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('customDiv');\n }\n }\n };\n /**\n * @private\n * @param {Event} event - Specifies the event args.\n * @returns {void}\n */\n this.handlePreviewCheckBoxAction = function (event) {\n var target = event.target;\n var targetId = target.id;\n // const tableBorderDialog: HTMLElement = this.target;\n var tableBorderDialogId = _this.target.id;\n var compareClass = 'e-de-table-border-inside-preview-click';\n _this.customDiv.click();\n if (targetId === tableBorderDialogId + '_Preview_Div_TopTop_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopTop'\n || targetId === tableBorderDialogId + '_previewDivTopTopTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopTop);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopTop', 'TopTop');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_TopCenter'\n || targetId === tableBorderDialogId + '_previewDivTopCenterTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopCenter);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Horizontal', '_Preview_Div_TopCenter', 'TopCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_TopBottom_Container' || targetId === tableBorderDialogId + '_Preview_Div_TopBottom'\n || targetId === tableBorderDialogId + '_previewDivTopBottomTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivTopBottom);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_TopBottom', 'TopBottom');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_LeftDiagonal'\n || targetId === tableBorderDialogId + '_previewDivLeftDiagonalTransParent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivLeftDiagonal);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Left_Diagonal', '_Preview_Div_LeftDiagonal', 'LeftDiagonal');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomLeft_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomLeft'\n || targetId === tableBorderDialogId + '_previewDivBottomLeftTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomLeft);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomLeft', 'BottomLeft');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomCenter_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_BottomCenter'\n || targetId === tableBorderDialogId + '_previewDivBottomcenterTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomcenter);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Vertical', '_Preview_Div_BottomCenter', 'BottomCenter');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_BottomRight_Container' || targetId === tableBorderDialogId + '_Preview_Div_BottomRight'\n || targetId === tableBorderDialogId + '_previewDivBottomRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivBottomRight);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div', '_Preview_Div_BottomRight', 'BottomRight');\n }\n else if (targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal_Container'\n || targetId === tableBorderDialogId + '_Preview_Div_RightDiagonal'\n || targetId === tableBorderDialogId + '_previewDivDiagonalRightTransparent') {\n _this.handlePreviewCheckBoxShowHide(tableBorderDialogId, compareClass, _this.previewDivDiagonalRight);\n _this.showHidePreviewDivElements(tableBorderDialogId, compareClass, '_Preview_Div_Right_Diagonal', '_Preview_Div_RightDiagonal', 'RightDiagonal');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableCellPreviewBoxes = function () {\n //this.customDiv.click();\n if (!isNullOrUndefined(_this.ulelementShading)) {\n if (_this.ulelementShading.value === 'Cell') {\n _this.shadingColorPicker.disabled = false;\n _this.previewDivBottomcenterContainer.style.visibility = 'hidden';\n _this.previewDivTopCenterContainer.style.visibility = 'hidden';\n _this.previewVerticalDiv.style.display = 'none';\n _this.previewHorizontalDiv.style.display = 'none';\n _this.previewDivLeftDiagonal.style.display = '';\n _this.previewDivDiagonalRight.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '80px';\n classList(_this.noneDivTransparent, ['e-de-table-border-none-setting'], ['e-de-para-border-none-setting']);\n classList(_this.boxDivTransparent, ['e-de-table-border-box-setting'], ['e-de-para-border-box-setting']);\n classList(_this.allDivTransparent, ['e-de-table-border-all-setting'], ['e-de-para-border-shadow-setting']);\n classList(_this.customDivTransparent, ['e-de-table-border-custom-setting'], ['e-de-para-border-custom-setting']);\n }\n else if (_this.ulelementShading.value === 'Table') {\n _this.shadingColorPicker.disabled = false;\n _this.previewDivLeftDiagonal.style.display = 'none';\n _this.previewDivDiagonalRight.style.display = 'none';\n _this.previewDivBottomcenterContainer.style.visibility = 'visible';\n _this.previewDivTopCenterContainer.style.visibility = 'visible';\n _this.previewVerticalDiv.style.display = '';\n _this.previewHorizontalDiv.style.display = '';\n _this.previewDivBottomRightContainer.style.left = '110px';\n classList(_this.noneDivTransparent, ['e-de-table-border-none-setting'], ['e-de-para-border-none-setting']);\n classList(_this.boxDivTransparent, ['e-de-table-border-box-setting'], ['e-de-para-border-box-setting']);\n classList(_this.allDivTransparent, ['e-de-table-border-all-setting'], ['e-de-para-border-shadow-setting']);\n classList(_this.customDivTransparent, ['e-de-table-border-custom-setting'], ['e-de-para-border-custom-setting']);\n }\n else {\n _this.shadingColorPicker.disabled = true;\n _this.previewDivBottomcenterContainer.style.visibility = 'hidden';\n _this.previewDivTopCenterContainer.style.visibility = 'hidden';\n _this.previewVerticalDiv.style.display = 'none';\n _this.previewHorizontalDiv.style.display = 'none';\n _this.previewLeftDiagonalDiv.style.display = 'none';\n _this.previewRightDiagonalDiv.style.display = 'none';\n classList(_this.noneDivTransparent, ['e-de-para-border-none-setting'], ['e-de-table-border-none-setting']);\n classList(_this.boxDivTransparent, ['e-de-para-border-box-setting'], ['e-de-table-border-box-setting']);\n classList(_this.allDivTransparent, ['e-de-para-border-shadow-setting'], ['e-de-table-border-all-setting']);\n classList(_this.customDivTransparent, ['e-de-para-border-custom-setting'], ['e-de-table-border-custom-setting']);\n }\n }\n };\n /**\n * @private\n * @param {ColorPickerEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.applyPreviewTableBackgroundColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.backgroundColor = color;\n }\n };\n /**\n * @private\n * @param {ColorPickerEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.applyPreviewTableBorderColor = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n var color = args.currentValue.hex;\n _this.previewDiv.style.borderColor = color;\n _this.previewRightDiagonalDiv.style.backgroundColor = color;\n _this.previewLeftDiagonalDiv.style.backgroundColor = color;\n _this.previewVerticalDiv.style.backgroundColor = color;\n _this.previewHorizontalDiv.style.backgroundColor = color;\n }\n };\n this.documentHelper = documentHelper;\n }\n BordersAndShadingDialog.prototype.getModuleName = function () {\n return 'BordersAndShadingDialog';\n };\n /**\n * @private\n * @param {L10n} localeValue - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n BordersAndShadingDialog.prototype.initBordersAndShadingsDialog = function (localeValue, isRtl) {\n this.target = createElement('div', {\n id: this.documentHelper.owner.containerId + '_table_border_shadings',\n className: 'e-de-table-border-shading-dlg'\n });\n var displayText = createElement('div', {\n innerHTML: localeValue.getConstant('Borders'),\n className: 'e-de-table-border-heading'\n });\n var settingAndPreviewContainer = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var settingsContiner = createElement('div', {});\n var styleContainer = createElement('div', {});\n var previewContiner = createElement('div', {\n className: 'e-de-table-border-preview-container'\n });\n var previewSubContainer1 = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var previewSubContainer2 = createElement('div', {});\n var styleSubContainer = createElement('div', {\n className: 'e-de-container-row'\n });\n var dropdownListDiv = createElement('div', {\n className: 'e-de-subcontainer-left'\n });\n var dropDownList = createElement('input', {});\n var widthcontainerDiv = createElement('div', {\n className: 'e-de-container-row'\n });\n var widthNumericDiv = createElement('div', {\n className: 'e-de-subcontainer-left'\n });\n var widthNumeric = createElement('input', {});\n var colorDiv = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n var colorText = createElement('div', {\n innerHTML: localeValue.getConstant('Color'),\n className: 'e-de-table-border-clr-heading'\n });\n var borderColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n className: 'e-dlg-clr-pkr-top'\n });\n var settingText = createElement('div', {\n innerHTML: localeValue.getConstant('Setting'),\n className: 'e-de-table-setting-heading'\n });\n var settingsSubContiner = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var noneDivContainer = createElement('div', {\n id: this.target.id + '_None_Div_Container'\n });\n this.noneDiv = createElement('div', {\n id: this.target.id + '_None_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var noneDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('None'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_None_Div_Label'\n });\n var boxDivContainer = createElement('div', {\n id: this.target.id + '_Box_Div_Container'\n });\n this.boxDiv = createElement('div', {\n id: this.target.id + '_Box_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var boxDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Box'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_Box_Div_Label'\n });\n var allDivContainer = createElement('div', {\n id: this.target.id + '_All_Div_Container'\n });\n this.allDiv = createElement('div', {\n id: this.target.id + '_All_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var allDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('All'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_All_Div_Label'\n });\n var customDivContainer = createElement('div', {\n id: this.target.id + '_Custom_Div_Container'\n });\n this.customDiv = createElement('div', {\n id: this.target.id + '_Custom_Div',\n className: 'e-de-table-border-inside-setting e-de-table-border-setting-genral'\n });\n var customDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Custom'), className: 'e-de-table-setting-labels-heading',\n id: this.target.id + '_Custom_Div_Label'\n });\n this.noneDivTransparent = createElement('div', {\n id: this.target.id + '_None_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-none-setting'\n });\n this.boxDivTransparent = createElement('div', {\n id: this.target.id + '_Box_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-box-setting'\n });\n this.allDivTransparent = createElement('div', {\n id: this.target.id + '_All_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-all-setting'\n });\n this.customDivTransparent = createElement('div', {\n id: this.target.id + '_Custom_Div_Transparent', className: 'e-icons e-de-table-border-setting e-de-table-border-custom-setting'\n });\n if (isRtl) {\n this.noneDivTransparent.classList.add('e-de-rtl');\n this.boxDivTransparent.classList.add('e-de-rtl');\n this.allDivTransparent.classList.add('e-de-rtl');\n this.customDivTransparent.classList.add('e-de-rtl');\n }\n var previewText = createElement('div', {\n innerHTML: localeValue.getConstant('Preview'), className: 'e-de-table-setting-heading'\n });\n this.previewDiv = createElement('div', {\n id: this.target.id + '_Preview_Div', className: 'e-de-border-dlg-preview-div',\n styles: 'position: relative'\n });\n this.previewRightDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width:1px;height:111px;left: 38px;top: -17px;transform: rotate(135deg); background-color: black',\n id: this.target.id + '_Preview_Div_Right_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewLeftDiagonalDiv = createElement('div', {\n styles: 'position: absolute;width: 1px;height: 111px;left: 38px;top: -17px;transform:rotate(45deg); background-color: black',\n id: this.target.id + '_Preview_Div_Left_Diagonal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewVerticalDiv = createElement('div', {\n styles: 'width: 1px;height: 80px;position: absolute;left: 39px;top: -1px; background-color: black',\n id: this.target.id + '_Preview_Div_Vertical',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n this.previewHorizontalDiv = createElement('div', {\n styles: 'width: 80px;height: 1px;position: absolute;left: -1px;top: 41px; background-color: black',\n id: this.target.id + '_Preview_Div_Horizontal',\n className: 'e-de-border-dlg-preview-inside-divs'\n });\n var previewDivVerticalContainer = createElement('div');\n this.previewDivTopTopContainer = createElement('div', {\n styles: 'margin-top: 0',\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_TopTop_Container'\n });\n this.previewDivTopTop = createElement('div', {\n id: this.target.id + '_Preview_Div_TopTop',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopCenterContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_TopCenter_Container'\n });\n this.previewDivTopCenter = createElement('div', {\n id: this.target.id + '_Preview_Div_TopCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopBottomContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_TopBottom_Container'\n });\n this.previewDivTopBottom = createElement('div', {\n id: this.target.id + '_Preview_Div_TopBottom',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivLeftDiagonalContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_LeftDiagonal_Container'\n });\n this.previewDivLeftDiagonal = createElement('div', {\n id: this.target.id + '_Preview_Div_LeftDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n var previewDivHorizontalContainer = createElement('div', { className: 'e-de-dlg-row' });\n this.previewDivBottomLeftContainer = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomLeft_Container',\n className: 'e-de-table-border-icon-container'\n });\n this.previewDivBottomLeft = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomLeft',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomcenterContainer = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomCenter_Container',\n className: 'e-de-table-border-icon-container'\n });\n this.previewDivBottomcenter = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomCenter',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivBottomRightContainer = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomRight_Container',\n className: 'e-de-table-border-icon-container'\n });\n this.previewDivBottomRight = createElement('div', {\n id: this.target.id + '_Preview_Div_BottomRight',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivDiagonalRightContainer = createElement('div', {\n className: 'e-de-table-border-icon-container',\n id: this.target.id + '_Preview_Div_RightDiagonal_Container'\n });\n this.previewDivDiagonalRight = createElement('div', {\n id: this.target.id + '_Preview_Div_RightDiagonal',\n className: 'e-de-table-border-inside-preview e-de-table-border-preview-genral'\n });\n this.previewDivTopTopTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopTopTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-toptop-alignment'\n });\n this.previewDivTopCenterTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopCenterTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topcenter-alignment'\n });\n this.previewDivTopBottomTransParent = createElement('div', {\n id: this.target.id + '_previewDivTopBottomTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-topbottom-alignment'\n });\n this.previewDivLeftDiagonalTransParent = createElement('div', {\n id: this.target.id + '_previewDivLeftDiagonalTransParent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionalup-alignment'\n });\n this.previewDivBottomLeftTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomLeftTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomleft-alignment'\n });\n this.previewDivBottomcenterTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomcenterTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomcenter-alignment'\n });\n this.previewDivBottomRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivBottomRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-bottomright-alignment'\n });\n this.previewDivDiagonalRightTransparent = createElement('div', {\n id: this.target.id + '_previewDivDiagonalRightTransparent',\n className: 'e-icons e-de-table-border-preview e-de-table-border-diagionaldown-alignment'\n });\n this.shadingContiner = createElement('div', {});\n var shadingText = createElement('div', {\n innerHTML: localeValue.getConstant('Shading'), className: 'e-de-table-border-heading'\n });\n var shadings = createElement('div', { className: 'e-de-dlg-row' });\n var colorPickerDiv = createElement('div', { className: 'e-de-table-border-clr-left-container' });\n var label = createElement('div', {\n innerHTML: localeValue.getConstant('Fill'), className: 'e-de-table-border-clr-heading'\n });\n var shadingColorPickerElement = createElement('input', {\n attrs: { 'type': 'color' },\n id: this.target.id + '_shading_color'\n });\n var shdApply = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n var ulelementShading = createElement('input', {\n id: this.target.id + '_shading'\n });\n var ulelementShadingValue = [\n { Value: 'Cell', Name: localeValue.getConstant('Cell ') },\n { Value: 'Table', Name: localeValue.getConstant('Table') },\n { Value: 'Paragraph', Name: localeValue.getConstant('Paragraph') }\n ];\n shdApply.appendChild(ulelementShading);\n this.noneDiv.appendChild(this.noneDivTransparent);\n this.boxDiv.appendChild(this.boxDivTransparent);\n this.allDiv.appendChild(this.allDivTransparent);\n this.customDiv.appendChild(this.customDivTransparent);\n noneDivContainer.appendChild(this.noneDiv);\n noneDivContainer.appendChild(noneDivLabel);\n boxDivContainer.appendChild(this.boxDiv);\n boxDivContainer.appendChild(boxDivLabel);\n allDivContainer.appendChild(this.allDiv);\n allDivContainer.appendChild(allDivLabel);\n customDivContainer.appendChild(this.customDiv);\n customDivContainer.appendChild(customDivLabel);\n settingsContiner.appendChild(settingText);\n settingsContiner.appendChild(settingsSubContiner);\n settingsSubContiner.appendChild(noneDivContainer);\n settingsSubContiner.appendChild(boxDivContainer);\n settingsSubContiner.appendChild(allDivContainer);\n settingsSubContiner.appendChild(customDivContainer);\n this.previewDivBottomcenter.appendChild(this.previewDivBottomcenterTransparent);\n this.previewDivBottomRight.appendChild(this.previewDivBottomRightTransparent);\n this.previewDivBottomLeft.appendChild(this.previewDivBottomLeftTransparent);\n this.previewDivTopTop.appendChild(this.previewDivTopTopTransParent);\n this.previewDivTopCenter.appendChild(this.previewDivTopCenterTransParent);\n this.previewDivTopBottom.appendChild(this.previewDivTopBottomTransParent);\n this.previewDivDiagonalRight.appendChild(this.previewDivDiagonalRightTransparent);\n this.previewDivLeftDiagonal.appendChild(this.previewDivLeftDiagonalTransParent);\n this.previewDivBottomcenterContainer.appendChild(this.previewDivBottomcenter);\n this.previewDivBottomLeftContainer.appendChild(this.previewDivBottomLeft);\n this.previewDivBottomRightContainer.appendChild(this.previewDivBottomRight);\n this.previewDivDiagonalRightContainer.appendChild(this.previewDivDiagonalRight);\n this.previewDivLeftDiagonalContainer.appendChild(this.previewDivLeftDiagonal);\n this.previewDivTopBottomContainer.appendChild(this.previewDivTopBottom);\n this.previewDivTopCenterContainer.appendChild(this.previewDivTopCenter);\n this.previewDivTopTopContainer.appendChild(this.previewDivTopTop);\n previewContiner.appendChild(previewText);\n previewContiner.appendChild(previewSubContainer1);\n previewSubContainer1.appendChild(previewDivVerticalContainer);\n previewSubContainer1.appendChild(previewSubContainer2);\n previewSubContainer2.appendChild(this.previewDiv);\n previewSubContainer2.appendChild(previewDivHorizontalContainer);\n this.previewDiv.appendChild(this.previewLeftDiagonalDiv);\n this.previewDiv.appendChild(this.previewRightDiagonalDiv);\n this.previewDiv.appendChild(this.previewHorizontalDiv);\n this.previewDiv.appendChild(this.previewVerticalDiv);\n previewDivHorizontalContainer.appendChild(this.previewDivBottomLeftContainer);\n previewDivHorizontalContainer.appendChild(this.previewDivBottomcenterContainer);\n previewDivHorizontalContainer.appendChild(this.previewDivBottomRightContainer);\n previewDivHorizontalContainer.appendChild(this.previewDivDiagonalRightContainer);\n previewDivVerticalContainer.appendChild(this.previewDivTopTopContainer);\n previewDivVerticalContainer.appendChild(this.previewDivTopCenterContainer);\n previewDivVerticalContainer.appendChild(this.previewDivTopBottomContainer);\n previewDivVerticalContainer.appendChild(this.previewDivLeftDiagonalContainer);\n shadings.appendChild(colorPickerDiv);\n colorPickerDiv.appendChild(label);\n colorPickerDiv.appendChild(shadingColorPickerElement);\n shadings.appendChild(shdApply);\n this.shadingContiner.appendChild(shadingText);\n this.shadingContiner.appendChild(shadings);\n styleContainer.appendChild(styleSubContainer);\n styleSubContainer.appendChild(dropdownListDiv);\n dropdownListDiv.appendChild(dropDownList);\n styleContainer.appendChild(widthcontainerDiv);\n widthcontainerDiv.appendChild(widthNumericDiv);\n widthNumericDiv.appendChild(widthNumeric);\n widthcontainerDiv.appendChild(colorDiv);\n colorDiv.appendChild(colorText);\n colorDiv.appendChild(borderColorPickerElement);\n borderColorPickerElement.setAttribute('aria-label', colorText.innerHTML);\n settingAndPreviewContainer.appendChild(settingsContiner);\n settingAndPreviewContainer.appendChild(previewContiner);\n this.target.appendChild(displayText);\n this.target.appendChild(settingAndPreviewContainer);\n this.target.appendChild(styleContainer);\n this.target.appendChild(this.shadingContiner);\n // Handling Setting Container\n noneDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n boxDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n allDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n customDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n // Handling Preview Div Container\n this.previewDivBottomcenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomLeftContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivBottomRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopTopContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopBottomContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivTopCenterContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivDiagonalRightContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n this.previewDivLeftDiagonalContainer.addEventListener('click', this.handlePreviewCheckBoxAction);\n // handling dropdown change\n this.borderWidth = new NumericTextBox({\n value: 0.5, min: 0.25, max: 6, decimals: 2, step: 0.25,\n floatLabelType: 'Always', placeholder: localeValue.getConstant('Width'),\n enablePersistence: false\n });\n this.borderWidth.appendTo(widthNumeric);\n var empList = [\n { 'Svg': '
      ', 'LineStyle': 'Single' },\n { 'Svg': '
      ', 'LineStyle': 'Dot' },\n { 'Svg': '
      ', 'LineStyle': 'DashSmallGap' },\n { 'Svg': '
      ', 'LineStyle': 'DashLargeGap' },\n { 'Svg': '
      ', 'LineStyle': 'DashDot' },\n { 'Svg': '
      ', 'LineStyle': 'DashDotDot' },\n { 'Svg': '
      ', 'LineStyle': 'Double' },\n { 'Svg': '
      ', 'LineStyle': 'Triple' },\n { 'Svg': '
      ', 'LineStyle': 'ThinThickSmallGap' },\n { 'Svg': '
      ', 'LineStyle': 'ThickThinSmallGap' },\n { 'Svg': '
      ', 'LineStyle': 'ThinThickThinSmallGap' },\n { 'Svg': '
      ', 'LineStyle': 'ThickThinMediumGap' },\n { 'Svg': '
      ', 'LineStyle': 'ThinThickMediumGap' },\n { 'Svg': '
      ', 'LineStyle': 'ThinThickThinMediumGap' },\n { 'Svg': '
      ', 'LineStyle': 'ThinThickLargeGap' },\n { 'Svg': '
      ', 'LineStyle': 'ThickThinLargeGap' },\n { 'Svg': '
      ', 'LineStyle': 'ThinThickThinLargeGap' },\n { 'Svg': '
      ', 'LineStyle': 'SingleWavy' },\n { 'Svg': '
      ', 'LineStyle': 'DoubleWavy' },\n { 'Svg': '
      ', 'LineStyle': 'DashDotStroked' },\n { 'Svg': '
      ', 'LineStyle': 'Emboss3D' },\n { 'Svg': '
      ', 'LineStyle': 'Engrave3D' },\n { 'Svg': '
      ', 'LineStyle': 'Outset' },\n { 'Svg': '
      ', 'LineStyle': 'Inset' }\n ];\n widthNumeric.setAttribute('aria-labelledby', localeValue.getConstant('width'));\n var itemTemplate = initializeCSPTemplate(function (data) { return \"
      \" + data.Svg + \"
      \"; });\n this.borderStyle = new DropDownList({\n popupHeight: '150px', dataSource: empList,\n floatLabelType: 'Always',\n fields: { text: 'Svg', value: 'LineStyle' },\n itemTemplate: itemTemplate,\n valueTemplate: itemTemplate,\n placeholder: localeValue.getConstant('Style'),\n enableRtl: isRtl\n });\n this.borderStyle.appendTo(dropDownList);\n dropDownList.setAttribute('aria-lablledby', localeValue.getConstant('Style'));\n this.ulelementShading = new DropDownList({\n dataSource: ulelementShadingValue,\n fields: { text: 'Name', value: 'Value' },\n change: this.applyTableCellPreviewBoxes, index: 1,\n floatLabelType: 'Always', placeholder: localeValue.getConstant('Apply To'),\n enableRtl: isRtl,\n htmlAttributes: { 'aria-labelledby': localeValue.getConstant('Apply To') }\n });\n this.ulelementShading.appendTo(ulelementShading);\n var _a = this.documentHelper.owner.documentEditorSettings.colorPickerSettings, columns = _a.columns, createPopupOnClick = _a.createPopupOnClick, cssClass = _a.cssClass, disabled = _a.disabled, enablePersistence = _a.enablePersistence, inline = _a.inline, mode = _a.mode, modeSwitcher = _a.modeSwitcher, noColor = _a.noColor, presetColors = _a.presetColors, showButtons = _a.showButtons;\n this.borderColorPicker = new ColorPicker({\n value: '#000000', change: this.applyPreviewTableBorderColor,\n enableRtl: isRtl, locale: this.documentHelper.owner.locale, cssClass: 'e-de-dlg-clr-picker',\n enableOpacity: false,\n mode: mode, modeSwitcher: modeSwitcher, showButtons: showButtons, columns: columns,\n createPopupOnClick: createPopupOnClick, disabled: disabled,\n enablePersistence: enablePersistence, inline: inline, noColor: noColor, presetColors: presetColors\n });\n this.documentHelper.borderColorPicker = this.borderColorPicker;\n this.borderColorPicker.appendTo(borderColorPickerElement);\n this.shadingColorPicker = new ColorPicker({\n value: '#FFFFFF', change: this.applyPreviewTableBackgroundColor,\n enableRtl: isRtl, locale: this.documentHelper.owner.locale, cssClass: 'e-de-dlg-clr-picker',\n enableOpacity: false,\n mode: mode, modeSwitcher: modeSwitcher, showButtons: showButtons, columns: columns,\n createPopupOnClick: createPopupOnClick, disabled: disabled,\n enablePersistence: enablePersistence, inline: inline, noColor: noColor, presetColors: presetColors\n });\n this.documentHelper.shadingColorPicker = this.shadingColorPicker;\n this.shadingColorPicker.appendTo(shadingColorPickerElement);\n if (isRtl) {\n label.classList.add('e-de-rtl');\n }\n };\n BordersAndShadingDialog.prototype.updateBorder = function (tableBorder, rowBorder) {\n if (rowBorder.lineStyle === 'Single' && tableBorder.lineStyle === 'None') {\n tableBorder.lineStyle = 'Single';\n tableBorder.lineWidth = rowBorder.lineWidth;\n }\n };\n BordersAndShadingDialog.prototype.applyFormat = function () {\n // const selection: Selection = this.documentHelper.selection;\n var editorModule = this.documentHelper.owner.editorModule;\n if (this.ulelementShading.value !== 'Paragraph') {\n editorModule.initComplexHistory('BordersAndShading');\n editorModule.isBordersAndShadingDialog = true;\n if (this.ulelementShading.value === 'Cell') {\n editorModule.onCellFormat(this.cellFormat);\n }\n else if (this.ulelementShading.value === 'Table') {\n editorModule.onTableFormat(this.tableFormat, true);\n }\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistoryModule.currentHistoryInfo)) {\n this.documentHelper.owner.editorHistoryModule.updateComplexHistory();\n }\n if (this.ulelementShading.value === 'Cell') {\n editorModule.isCellFormatApplied = true;\n }\n else {\n editorModule.isCellFormatApplied = false;\n }\n }\n if (this.ulelementShading.value === 'Cell') {\n editorModule.isCellFormatApplied = true;\n }\n else {\n editorModule.isCellFormatApplied = false;\n }\n editorModule.isBordersAndShadingDialog = false;\n };\n BordersAndShadingDialog.prototype.getBorder = function (type) {\n var border = new WBorder();\n border.color = this.borderColorPicker.value;\n border.lineStyle = this.borderStyle.value;\n border.lineWidth = this.borderWidth.value;\n if (type === 'left' || type === 'right') {\n border.space = 4;\n }\n else {\n border.space = 1;\n }\n return border;\n };\n BordersAndShadingDialog.prototype.checkClassName = function (element) {\n return element.classList.contains('e-de-table-border-inside-preview-click');\n };\n /**\n * @private\n * @returns {void}\n */\n BordersAndShadingDialog.prototype.show = function () {\n var localeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initBordersAndShadingsDialog(localeValue, this.documentHelper.owner.enableRtl);\n }\n this.loadBordersShadingsPropertiesDialog(localeValue);\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.header = localeValue.getConstant('Borders and Shading');\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.closeBordersShadingsDialog;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.buttons = [{\n click: this.applyBordersShadingsProperties,\n buttonModel: { content: localeValue.getConstant('Ok'), cssClass: 'e-flat e-table-border-shading-okay', isPrimary: true }\n },\n {\n click: this.closeDialog,\n buttonModel: { content: localeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-border-shading-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n BordersAndShadingDialog.prototype.updateClassForSettingDivElements = function () {\n var settingDivs = this.target.getElementsByClassName('e-de-table-border-inside-setting');\n for (var j = 0; j < settingDivs.length; j++) {\n if (settingDivs[parseInt(j.toString(), 10)].className.indexOf('e-de-table-border-inside-setting-click') !== -1) {\n var tempClassName = settingDivs[parseInt(j.toString(), 10)].className;\n tempClassName = tempClassName.replace('e-de-table-border-inside-setting-click', '');\n settingDivs[parseInt(j.toString(), 10)].className = tempClassName;\n }\n }\n };\n BordersAndShadingDialog.prototype.setSettingPreviewDivElement = function (position) {\n switch (position) {\n case 'none':\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('none');\n break;\n case 'box':\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('box');\n break;\n case 'all':\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('all');\n }\n else {\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n this.isShowHidePreviewTableElements('all');\n }\n break;\n }\n };\n BordersAndShadingDialog.prototype.isShowHidePreviewTableElements = function (settingDiv) {\n switch (settingDiv) {\n case 'none':\n this.previewDiv.style.border = 'none';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'box':\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n break;\n case 'all':\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'block';\n this.previewVerticalDiv.style.display = 'block';\n }\n else {\n this.previewDiv.style.border = '1px solid rgba(0, 0, 0, .54)';\n this.previewRightDiagonalDiv.style.display = 'none';\n this.previewLeftDiagonalDiv.style.display = 'none';\n this.previewHorizontalDiv.style.display = 'none';\n this.previewVerticalDiv.style.display = 'none';\n }\n break;\n }\n };\n BordersAndShadingDialog.prototype.handlePreviewCheckBoxShowHide = function (tableBorderDialogId, compareClass, element) {\n if (element.classList.contains(compareClass)) {\n element.classList.remove(compareClass);\n }\n else {\n element.classList.add(compareClass);\n }\n };\n BordersAndShadingDialog.prototype.showHidePreviewDivElements = function (tableBorderDialogId, compareClass, elementClass, compareElementClass, position) {\n var setElement = document.getElementById(tableBorderDialogId + elementClass);\n var compareElement = document.getElementById(tableBorderDialogId + compareElementClass);\n if (position === 'TopTop') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-top');\n }\n else if (position === 'TopCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'TopBottom') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-bottom');\n }\n else if (position === 'LeftDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomLeft') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-left');\n }\n else if (position === 'BottomCenter') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n else if (position === 'BottomRight') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'border-right');\n }\n else if (position === 'RightDiagonal') {\n this.setPropertyPreviewDivElement(setElement, compareElement, compareClass, 'display');\n }\n };\n BordersAndShadingDialog.prototype.setPropertyPreviewDivElement = function (ele, compareElement, compareClass, property) {\n if (compareElement.classList.contains(compareClass) && property.split('-')[0] === 'border') {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ele.style[\"\" + property] = '1px solid rgba(0, 0, 0, .54)';\n }\n else if (compareElement.classList.contains(compareClass) && property === 'display') {\n ele.style[\"\" + property] = 'block';\n }\n else {\n ele.style[\"\" + property] = 'none';\n /* eslint-enable @typescript-eslint/no-explicit-any */\n }\n };\n BordersAndShadingDialog.prototype.loadBordersShadingsPropertiesDialog = function (localeValue) {\n var lineStyle;\n var borderColor;\n var fillColor;\n var borderWidth;\n if (!isNullOrUndefined(this.documentHelper.selection.tableFormat.table)) {\n this.shadingContiner.style.display = 'block';\n this.ulelementShading.dataSource = [\n { Value: 'Cell', Name: localeValue.getConstant('Cell') },\n { Value: 'Table', Name: localeValue.getConstant('Table') },\n { Value: 'Paragraph', Name: localeValue.getConstant('Paragraph') }\n ];\n this.ulelementShading.dataBind();\n var tableFormat = this.documentHelper.selection.tableFormat.table.tableFormat;\n if (!isNullOrUndefined(tableFormat) && !isNullOrUndefined(tableFormat.borders)) {\n this.cloneBorders(tableFormat.borders);\n if (isNullOrUndefined(tableFormat.borders) || isNullOrUndefined(tableFormat.borders.top)) {\n lineStyle = 0;\n borderColor = '#000000';\n borderWidth = 0;\n fillColor = '#000000';\n }\n else {\n lineStyle = this.getLineStyle(tableFormat.borders.top.lineStyle);\n borderColor = tableFormat.borders.top.color;\n borderWidth = tableFormat.borders.top.getLineWidth();\n fillColor = tableFormat.shading.backgroundColor;\n }\n this.ulelementShading.value = 'Table';\n this.shadingColorPicker.value = fillColor;\n this.shadingColorPicker.disabled = false;\n }\n }\n else {\n this.shadingContiner.style.display = 'none';\n this.ulelementShading.dataSource = [\n { Value: 'Paragraph', Name: localeValue.getConstant('Paragraph') }\n ];\n this.ulelementShading.dataBind();\n var paraFormat = this.documentHelper.selection.start.paragraph.paragraphFormat;\n this.ulelementShading.value = 'Paragraph';\n this.cloneBorders(paraFormat.borders);\n var border = this.getSelectionBorderFormat();\n if (!border.hasValues()) {\n lineStyle = 0;\n borderColor = '#000000';\n borderWidth = 0.5;\n }\n else {\n lineStyle = this.getLineStyle(border.lineStyle);\n borderColor = border.color;\n borderWidth = border.lineWidth;\n }\n this.shadingColorPicker.disabled = true;\n }\n this.borderColorPicker.value = borderColor;\n this.previewDivLeftDiagonal.style.display = 'none';\n this.previewDivDiagonalRight.style.display = 'none';\n this.borderWidth.value = borderWidth;\n this.borderStyle.index = lineStyle;\n };\n BordersAndShadingDialog.prototype.getSelectionBorderFormat = function () {\n var border = new WBorder();\n var borders = this.documentHelper.selection.paragraphFormat.borders;\n if (borders.top.lineStyle !== 'None') {\n return this.copyToBorder(border, borders.top);\n }\n else if (borders.left.lineStyle !== 'None') {\n return this.copyToBorder(border, borders.left);\n }\n else if (borders.bottom.lineStyle !== 'None') {\n return this.copyToBorder(border, borders.bottom);\n }\n else if (borders.right.lineStyle !== 'None') {\n return this.copyToBorder(border, borders.right);\n }\n return border;\n };\n BordersAndShadingDialog.prototype.copyToBorder = function (border, selectionBorder) {\n if (!isNullOrUndefined(selectionBorder.lineStyle)) {\n border.lineStyle = selectionBorder.lineStyle;\n }\n if (!isNullOrUndefined(selectionBorder.color)) {\n border.color = selectionBorder.color;\n }\n if (!isNullOrUndefined(selectionBorder.lineWidth)) {\n border.lineWidth = selectionBorder.lineWidth;\n }\n return border;\n };\n /* eslint-disable */\n BordersAndShadingDialog.prototype.cloneBorders = function (borders) {\n var topBorder = false;\n var bottomBorder = false;\n var leftBorder = false;\n var rightBorder = false;\n var horizontalBorder = false;\n var verticalBorder = false;\n var diagonalDownBorder = false;\n var customBorder = false;\n var diagonalUpBorder = false;\n if (borders !== null) {\n if (borders.top && (borders.top.hasNoneStyle || borders.top.lineStyle !== 'None')) {\n topBorder = true;\n }\n if (borders.bottom && (borders.bottom.hasNoneStyle || borders.bottom.lineStyle !== 'None')) {\n bottomBorder = true;\n }\n if (borders.left && (borders.left.hasNoneStyle || borders.left.lineStyle !== 'None')) {\n leftBorder = true;\n }\n if (borders.right && (borders.right.hasNoneStyle || borders.right.lineStyle !== 'None')) {\n rightBorder = true;\n }\n if (borders.horizontal && (borders.horizontal.hasNoneStyle || borders.horizontal.lineStyle !== 'None')) {\n horizontalBorder = true;\n }\n if (borders.vertical && (borders.vertical.hasNoneStyle || borders.vertical.lineStyle !== 'None')) {\n verticalBorder = true;\n }\n if (borders.diagonalDown && (borders.diagonalDown.hasNoneStyle || borders.diagonalDown.lineStyle !== 'None')) {\n diagonalDownBorder = true;\n }\n if (borders.diagonalUp && (borders.diagonalUp.hasNoneStyle || borders.diagonalUp.lineStyle !== 'None')) {\n diagonalUpBorder = true;\n }\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder)) {\n if (!(!topBorder || !bottomBorder || !leftBorder || !rightBorder || !horizontalBorder\n || !verticalBorder || diagonalUpBorder || diagonalDownBorder)) {\n if ((topBorder && bottomBorder && leftBorder && rightBorder && horizontalBorder && verticalBorder\n && !diagonalUpBorder && !diagonalDownBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('all');\n this.allDiv.classList.add('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n }\n else if ((leftBorder && bottomBorder && topBorder && rightBorder && !horizontalBorder && !verticalBorder)) {\n if (borders.top.hasNoneStyle && borders.bottom.hasNoneStyle && borders.left.hasNoneStyle\n && borders.right.hasNoneStyle && borders.horizontal.hasNoneStyle && borders.vertical.hasNoneStyle) {\n this.setSettingPreviewDivElement('none');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('box');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.add('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n else {\n customBorder = true;\n }\n }\n else {\n customBorder = true;\n }\n this.previewDivLeftDiagonal.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDivDiagonalRight.classList.remove('e-de-table-border-inside-preview-click');\n if (!topBorder && !bottomBorder && !leftBorder && !rightBorder && !horizontalBorder && !verticalBorder) {\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else {\n this.setSettingPreviewDivElement('none');\n this.customDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.add('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n }\n else if (customBorder) {\n this.customDiv.classList.add('e-de-table-border-inside-setting-click');\n this.noneDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.boxDiv.classList.remove('e-de-table-border-inside-setting-click');\n this.allDiv.classList.remove('e-de-table-border-inside-setting-click');\n if (this.ulelementShading.value === 'Cell' || this.ulelementShading.value === 'Table') {\n if (topBorder) {\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (topBorder) {\n this.previewDivTopTop.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderTop = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivTopTop.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderTop = '0px';\n }\n }\n if (this.ulelementShading.value == 'Cell' || this.ulelementShading.value === 'Table') {\n if (bottomBorder) {\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (bottomBorder) {\n this.previewDivTopBottom.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderBottom = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivTopBottom.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderBottom = '0px';\n }\n }\n if (this.ulelementShading.value == 'Cell' || this.ulelementShading.value === 'Table') {\n if (leftBorder) {\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (leftBorder) {\n this.previewDivBottomLeft.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderLeft = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivBottomLeft.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderLeft = '0px';\n }\n }\n if (this.ulelementShading.value == 'Cell' || this.ulelementShading.value === 'Table') {\n if (rightBorder) {\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n else {\n if (rightBorder) {\n this.previewDivBottomRight.classList.add('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderRight = '1px solid rgba(0,0,0,.54)';\n }\n else {\n this.previewDivBottomRight.classList.remove('e-de-table-border-inside-preview-click');\n this.previewDiv.style.borderRight = '0px';\n }\n }\n if (verticalBorder) {\n this.previewDivBottomcenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivBottomcenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n if (horizontalBorder) {\n this.previewDivTopCenter.classList.add('e-de-table-border-inside-preview-click');\n }\n else {\n this.previewDivTopCenter.classList.remove('e-de-table-border-inside-preview-click');\n }\n }\n }\n };\n BordersAndShadingDialog.prototype.getLineStyle = function (lineStyle) {\n switch (lineStyle) {\n case 'Single': return 0;\n case 'Dot': return 1;\n case 'DashSmallGap': return 2;\n case 'DashLargeGap': return 3;\n case 'DashDot': return 4;\n case 'DashDotDot': return 5;\n case 'Double': return 6;\n case 'Triple': return 7;\n case 'ThinThickSmallGap': return 8;\n case 'ThickThinSmallGap': return 9;\n case 'ThinThickThinSmallGap': return 10;\n case 'ThinThickMediumGap': return 11;\n case 'ThickThinMediumGap': return 12;\n case 'ThinThickThinMediumGap': return 13;\n case 'ThinThickLargeGap': return 14;\n case 'ThickThinLargeGap': return 15;\n case 'ThinThickThinLargeGap': return 16;\n case 'SingleWavy': return 17;\n case 'DoubleWavy': return 18;\n case 'DashDotStroked': return 29;\n case 'Emboss3D': return 20;\n case 'Engrave3D': return 21;\n case 'Outset': return 22;\n case 'Inset': return 23;\n }\n return 0;\n };\n /**\n * @private\n * @returns {void}\n */\n BordersAndShadingDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var k = 0; k < this.target.childNodes.length; k++) {\n this.target.removeChild(this.target.childNodes[k]);\n k--;\n }\n this.target = undefined;\n }\n if (this.cellFormat) {\n this.cellFormat.destroy();\n this.cellFormat = undefined;\n }\n if (this.tableFormat) {\n this.tableFormat.destroy();\n this.tableFormat = undefined;\n }\n if (this.paragraphFormat) {\n this.paragraphFormat.destroy();\n this.paragraphFormat = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n if (!isNullOrUndefined(this.borderStyle)) {\n this.borderStyle.destroy();\n }\n this.borderStyle = undefined;\n if (!isNullOrUndefined(this.borderColorPicker)) {\n this.borderColorPicker.destroy();\n }\n this.borderColorPicker = undefined;\n if (!isNullOrUndefined(this.shadingColorPicker)) {\n this.shadingColorPicker.destroy();\n }\n this.shadingColorPicker = undefined;\n if (!isNullOrUndefined(this.ulelementShading)) {\n this.ulelementShading.destroy();\n }\n this.ulelementShading = undefined;\n this.noneDivTransparent = undefined;\n this.boxDivTransparent = undefined;\n this.allDivTransparent = undefined;\n this.customDivTransparent = undefined;\n this.previewDiv = undefined;\n this.previewRightDiagonalDiv = undefined;\n this.previewLeftDiagonalDiv = undefined;\n this.previewVerticalDiv = undefined;\n this.previewHorizontalDiv = undefined;\n this.previewDivTopTopContainer = undefined;\n this.previewDivTopTop = undefined;\n this.previewDivTopCenterContainer = undefined;\n this.previewDivTopCenter = undefined;\n this.previewDivTopBottomContainer = undefined;\n this.previewDivTopBottom = undefined;\n this.previewDivLeftDiagonalContainer = undefined;\n this.previewDivLeftDiagonal = undefined;\n this.previewDivBottomLeftContainer = undefined;\n this.previewDivBottomLeft = undefined;\n this.previewDivBottomcenterContainer = undefined;\n this.previewDivBottomcenter = undefined;\n this.previewDivBottomRightContainer = undefined;\n this.previewDivBottomRight = undefined;\n this.previewDivDiagonalRightContainer = undefined;\n this.previewDivDiagonalRight = undefined;\n this.previewDivTopTopTransParent = undefined;\n this.previewDivTopCenterTransParent = undefined;\n this.previewDivTopBottomTransParent = undefined;\n this.previewDivLeftDiagonalTransParent = undefined;\n this.previewDivBottomLeftTransparent = undefined;\n this.previewDivBottomcenterTransparent = undefined;\n this.previewDivBottomRightTransparent = undefined;\n this.previewDivDiagonalRightTransparent = undefined;\n this.shadingContiner = undefined;\n this.noneDiv = undefined;\n this.customDiv = undefined;\n this.allDiv = undefined;\n this.boxDiv = undefined;\n this.documentHelper = undefined;\n };\n return BordersAndShadingDialog;\n}());\nexport { BordersAndShadingDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WCellFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement } from '@syncfusion/ej2-base';\n/**\n * The Cell options dialog is used to modify margins of selected cells.\n */\nvar CellOptionsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function CellOptionsDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.removeEvents = function () {\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeSameAsTable = function () {\n if (_this.sameAsTableCheckBox.checked) {\n _this.leftMarginBox.enabled = false;\n _this.rightMarginBox.enabled = false;\n _this.bottomMarginBox.enabled = false;\n _this.topMarginBox.enabled = false;\n }\n else {\n _this.leftMarginBox.enabled = true;\n _this.rightMarginBox.enabled = true;\n _this.bottomMarginBox.enabled = true;\n _this.topMarginBox.enabled = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyTableCellProperties = function () {\n var cellFormat = _this.documentHelper.selection.cellFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value) &&\n (cellFormat.bottomMargin !== _this.bottomMarginBox.value || cellFormat.leftMargin !== _this.leftMarginBox.value\n || cellFormat.rightMargin !== _this.rightMarginBox.value || cellFormat.topMargin !== _this.topMarginBox.value)) {\n _this.documentHelper.owner.tablePropertiesDialogModule.isCellOptionsUpdated = true;\n _this.applyTableOptions(_this.cellFormat);\n _this.documentHelper.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeCellMarginsDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(CellOptionsDialog.prototype, \"cellFormat\", {\n /**\n * @private\n * @returns {WCellFormat} - Returns cell format.\n */\n get: function () {\n if (isNullOrUndefined(this.cellFormatIn)) {\n return this.cellFormatIn = new WCellFormat();\n }\n return this.cellFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n CellOptionsDialog.prototype.getModuleName = function () {\n return 'CellOptionsDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n CellOptionsDialog.prototype.initCellMarginsDialog = function (localValue, isRtl) {\n this.owner = this.documentHelper.owner.viewer;\n this.target = createElement('div', {\n className: 'e-de-table-cell-margin-dlg'\n });\n var innerDiv = createElement('div');\n var innerDivLabel = createElement('Label', {\n className: 'e-de-para-dlg-heading'\n });\n innerDivLabel.innerHTML = localValue.getConstant('Cell margins');\n innerDiv.appendChild(innerDivLabel);\n var table = createElement('TABLE', {\n styles: 'padding-bottom: 8px;padding-top: 8px;', className: 'e-de-cell-margin-top'\n });\n var tr = createElement('tr');\n var td = createElement('td', { className: 'e-de-tbl-btn-separator' });\n var sameAsTableCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_sameAsCheckBox'\n });\n sameAsTableCheckBox.setAttribute('aria-label', localValue.getConstant('Same as the whole table'));\n td.appendChild(sameAsTableCheckBox);\n tr.appendChild(td);\n table.appendChild(tr);\n innerDiv.appendChild(table);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue, true);\n var divBtn = document.createElement('div');\n this.target.appendChild(divBtn);\n this.sameAsTableCheckBox = new CheckBox({\n label: localValue.getConstant('Same as the whole table'),\n change: this.changeSameAsTable,\n enableRtl: isRtl\n });\n sameAsTableCheckBox.setAttribute('aria-label', localValue.getConstant('Same as the whole table'));\n this.sameAsTableCheckBox.appendTo(sameAsTableCheckBox);\n this.sameAsTableCheckBox.addEventListener('change', this.changeSameAsTable);\n };\n /**\n * @private\n * @returns {void}\n */\n CellOptionsDialog.prototype.show = function () {\n var localizeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localizeValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initCellMarginsDialog(localizeValue, this.documentHelper.owner.enableRtl);\n }\n this.loadCellMarginsDialog();\n this.documentHelper.dialog.header = localizeValue.getConstant('Cell Options');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = undefined;\n this.documentHelper.dialog.open = undefined;\n this.documentHelper.dialog.close = this.removeEvents;\n this.documentHelper.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: localizeValue.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: localizeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n CellOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var cellFormat = this.documentHelper.selection.cellFormat;\n this.sameAsTable = isNullOrUndefined(cellFormat.leftMargin || cellFormat.topMargin\n || cellFormat.rightMargin || cellFormat.bottomMargin);\n if (this.sameAsTable) {\n var tableFormat = this.documentHelper.selection.tableFormat;\n this.loadCellProperties(tableFormat, false, true);\n }\n else {\n this.loadCellProperties(cellFormat, true, false);\n }\n };\n CellOptionsDialog.prototype.loadCellProperties = function (format, enableTextBox, enableCheckBox) {\n this.leftMarginBox.value = format.leftMargin;\n this.rightMarginBox.value = format.rightMargin;\n this.topMarginBox.value = format.topMargin;\n this.bottomMarginBox.value = format.bottomMargin;\n this.leftMarginBox.enabled = enableTextBox;\n this.rightMarginBox.enabled = enableTextBox;\n this.topMarginBox.enabled = enableTextBox;\n this.bottomMarginBox.enabled = enableTextBox;\n this.sameAsTableCheckBox.checked = enableCheckBox;\n };\n /**\n * @private\n * @param {WCellFormat} cellFormat Specifies cell format.\n * @returns {void}\n */\n CellOptionsDialog.prototype.applySubCellOptions = function (cellFormat) {\n this.documentHelper.owner.editorHistoryModule.initComplexHistory(this.documentHelper.selection, 'CellMarginsSelection');\n this.documentHelper.owner.editorModule.initHistory('CellOptions');\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo)) {\n this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.insertedFormat = cellFormat;\n }\n /* eslint-disable max-len */\n this.documentHelper.selection.start.paragraph.associatedCell.ownerTable.combineWidget(this.owner);\n this.applyCellMarginValue(this.documentHelper.selection.start.paragraph.associatedCell.ownerRow.combineWidget(this.owner), this.documentHelper.selection.start, this.documentHelper.selection.end, cellFormat);\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection, false);\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistoryModule.currentHistoryInfo)) {\n this.documentHelper.owner.editorHistoryModule.updateComplexHistory();\n }\n };\n CellOptionsDialog.prototype.applyCellMarginValue = function (row, start, end, cellFormat) {\n this.applyCellMarginsInternal(row, cellFormat);\n if (end.paragraph.associatedCell.ownerRow === row) {\n return;\n }\n var newRow = row.nextWidget;\n if (!isNullOrUndefined(newRow)) {\n this.applyCellMarginValue(newRow, start, end, cellFormat);\n }\n };\n CellOptionsDialog.prototype.applyCellMarginsInternal = function (row, cellFormat) {\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo)) {\n var currentFormat = row.childWidgets[0].cellFormat;\n /* eslint-disable max-len */\n cellFormat = this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.addModifiedCellOptions(currentFormat, cellFormat, row.ownerTable);\n }\n if (!isNullOrUndefined(cellFormat)) {\n this.applyCellMarginsForCells(row, cellFormat);\n }\n };\n CellOptionsDialog.prototype.applyCellMarginsForCells = function (row, cellFormat) {\n var rowCells = row.childWidgets;\n this.iterateCells(rowCells, cellFormat);\n };\n CellOptionsDialog.prototype.iterateCells = function (cells, cellFormat) {\n for (var i = 0; i < cells.length; i++) {\n this.applySubCellMargins(cells[parseInt(i.toString(), 10)].cellFormat, cellFormat);\n }\n this.documentHelper.owner.tablePropertiesDialogModule.calculateGridValue(cells[0].ownerTable);\n };\n CellOptionsDialog.prototype.applySubCellMargins = function (sourceFormat, cellFormat) {\n sourceFormat.leftMargin = cellFormat.leftMargin;\n sourceFormat.topMargin = cellFormat.topMargin;\n sourceFormat.rightMargin = cellFormat.rightMargin;\n sourceFormat.bottomMargin = cellFormat.bottomMargin;\n };\n CellOptionsDialog.prototype.applyTableOptions = function (cellFormat) {\n if (!this.sameAsTableCheckBox.checked) {\n cellFormat.leftMargin = this.leftMarginBox.value;\n cellFormat.topMargin = this.topMarginBox.value;\n cellFormat.bottomMargin = this.bottomMarginBox.value;\n cellFormat.rightMargin = this.rightMarginBox.value;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n CellOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var y = 0; y < this.target.childNodes.length; y++) {\n this.target.removeChild(this.target.childNodes[parseInt(y.toString(), 10)]);\n y--;\n }\n this.target = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.documentHelper = undefined;\n this.sameAsTableCheckBox = undefined;\n };\n /**\n * @private\n * @param {CellOptionsDialog | TableOptionsDialog} dialog - Specifies cell options dialog.\n * @param {HTMLDivElement} div - Specifies the html element.\n * @param {L10n} locale - Specifies the locale\n * @param {boolean} cellOptions - Specifies is cell options.\n * @returns {void}\n */\n CellOptionsDialog.getCellMarginDialogElements = function (dialog, div, locale, cellOptions) {\n if (!isNullOrUndefined(dialog)) {\n var table = createElement('div');\n var tr1 = createElement('div', { className: 'e-de-container-row' });\n var td1 = createElement('div', { className: 'e-de-subcontainer-left' });\n var topTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n // topTextBox.setAttribute('aria-label','TopMargin');\n td1.appendChild(topTextBox);\n var td2 = createElement('div', { className: 'e-de-subcontainer-right' });\n var leftTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n // leftTextBox.setAttribute('aria-label','LeftMargin');\n td2.appendChild(leftTextBox);\n tr1.appendChild(td1);\n tr1.appendChild(td2);\n var tr2 = createElement('div', { className: cellOptions ? 'e-de-dlg-row' : 'e-de-container-row' });\n var td3 = createElement('div', { className: 'e-de-subcontainer-left' });\n var bottomTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n // bottomTextBox.setAttribute('aria-label','BottomMargin');\n td3.appendChild(bottomTextBox);\n var td4 = createElement('div', { className: 'e-de-subcontainer-right' });\n var rightTextBox = createElement('input', {\n attrs: { 'type': 'text' }, styles: 'width:100%'\n });\n // rightTextBox.setAttribute('aria-label','RightMargin');\n td4.appendChild(rightTextBox);\n tr2.appendChild(td3);\n tr2.appendChild(td4);\n table.appendChild(tr1);\n table.appendChild(tr2);\n div.appendChild(table);\n dialog.target.appendChild(div);\n dialog.topMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2,\n enablePersistence: false, placeholder: locale.getConstant('Top'),\n floatLabelType: 'Always'\n });\n dialog.topMarginBox.appendTo(topTextBox);\n dialog.leftMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2, enablePersistence: false, placeholder: locale.getConstant('Left'),\n floatLabelType: 'Always'\n });\n dialog.leftMarginBox.appendTo(leftTextBox);\n dialog.bottomMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2,\n enablePersistence: false, placeholder: locale.getConstant('Bottom'),\n floatLabelType: 'Always'\n });\n dialog.bottomMarginBox.appendTo(bottomTextBox);\n dialog.rightMarginBox = new NumericTextBox({\n value: 0, min: 0, max: 1584, decimals: 2, enablePersistence: false, placeholder: locale.getConstant('Right'),\n floatLabelType: 'Always'\n });\n dialog.rightMarginBox.appendTo(rightTextBox);\n rightTextBox.setAttribute('aria-labelledby', locale.getConstant('Right'));\n leftTextBox.setAttribute('aria-labelledby', locale.getConstant('Left'));\n bottomTextBox.setAttribute('aria-labelledby', locale.getConstant('Bottom'));\n topTextBox.setAttribute('aria-labelledby', locale.getConstant('Top'));\n }\n };\n return CellOptionsDialog;\n}());\nexport { CellOptionsDialog };\n","import { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WTableFormat } from '../index';\nimport { isNullOrUndefined, L10n, createElement } from '@syncfusion/ej2-base';\nimport { CellOptionsDialog } from './index';\n/**\n * The Table options dialog is used to modify default cell margins and cell spacing of selected table.\n */\nvar TableOptionsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TableOptionsDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.applyTableCellProperties = function () {\n var tableFormat = _this.documentHelper.selection.tableFormat;\n if (!isNullOrUndefined(_this.bottomMarginBox.value || _this.leftMarginBox.value\n || _this.rightMarginBox.value || _this.topMarginBox.value || _this.cellSpaceTextBox.value)\n && (tableFormat.bottomMargin !== _this.bottomMarginBox.value\n || tableFormat.leftMargin !== _this.leftMarginBox.value\n || tableFormat.rightMargin !== _this.rightMarginBox.value\n || tableFormat.topMargin !== _this.topMarginBox.value\n || tableFormat.cellSpacing !== _this.cellSpaceTextBox.value)) {\n _this.documentHelper.owner.tablePropertiesDialogModule.isTableOptionsUpdated = true;\n _this.applyTableOptions(_this.tableFormat);\n _this.documentHelper.owner.tablePropertiesDialogModule.applyTableSubProperties();\n }\n _this.closeCellMarginsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeCellMarginsDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeAllowSpaceCheckBox = function () {\n if (_this.allowSpaceCheckBox.checked) {\n _this.cellSpaceTextBox.enabled = true;\n }\n else {\n _this.cellSpaceTextBox.enabled = false;\n _this.cellSpaceTextBox.value = 0;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.removeEvents = function () {\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.documentHelper.updateFocus();\n };\n this.documentHelper = documentHelper;\n }\n Object.defineProperty(TableOptionsDialog.prototype, \"tableFormat\", {\n /**\n * @private\n * @returns {WTableFormat} - Returns table format.\n */\n get: function () {\n if (isNullOrUndefined(this.tableFormatIn)) {\n return this.tableFormatIn = new WTableFormat();\n }\n return this.tableFormatIn;\n },\n enumerable: true,\n configurable: true\n });\n TableOptionsDialog.prototype.getModuleName = function () {\n return 'TableOptionsDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n TableOptionsDialog.prototype.initTableOptionsDialog = function (localValue, isRtl) {\n this.target = createElement('div', {\n id: this.documentHelper.owner.containerId + '_insertCellMarginsDialog', className: 'e-de-table-options-dlg'\n });\n var innerDiv = createElement('div');\n var innerDivLabel = createElement('Label', {\n id: this.target.id + '_innerDivLabel', className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Default cell margins')\n });\n innerDiv.appendChild(innerDivLabel);\n CellOptionsDialog.getCellMarginDialogElements(this, innerDiv, localValue, false);\n var div = createElement('div');\n var cellSpaceLabel = createElement('Label', {\n className: 'e-de-para-dlg-heading',\n id: this.target.id + '_cellSpaceLabel'\n });\n cellSpaceLabel.innerHTML = localValue.getConstant('Default cell spacing');\n div.appendChild(cellSpaceLabel);\n var table2 = createElement('TABLE', {\n styles: 'height: 30px;'\n });\n var tr3 = createElement('tr');\n var td5 = createElement('td');\n var allowSpaceCheckBox = createElement('input', {\n attrs: { 'type': 'checkbox' }, id: this.target.id + '_cellcheck'\n });\n var td6Padding;\n if (isRtl) {\n td6Padding = 'padding-right:25px;';\n }\n else {\n td6Padding = 'padding-left:25px;';\n }\n var td6 = createElement('td', { styles: td6Padding });\n this.cellspacingTextBox = createElement('input', {\n attrs: { 'type': 'text' }, id: this.target.id + '_cellspacing'\n });\n td5.appendChild(allowSpaceCheckBox);\n td6.appendChild(this.cellspacingTextBox);\n tr3.appendChild(td5);\n tr3.appendChild(td6);\n table2.appendChild(tr3);\n div.appendChild(table2);\n var divBtn = document.createElement('div');\n this.target.appendChild(div);\n this.target.appendChild(divBtn);\n this.cellSpaceTextBox = new NumericTextBox({\n value: 0, min: 0, max: 264.5, width: 174,\n decimals: 2, enablePersistence: false\n });\n this.cellSpaceTextBox.appendTo(this.cellspacingTextBox);\n this.allowSpaceCheckBox = new CheckBox({\n label: localValue.getConstant('Allow spacing between cells'),\n change: this.changeAllowSpaceCheckBox,\n enableRtl: isRtl,\n cssClass: 'e-de-tbl-margin-sub-header'\n });\n this.allowSpaceCheckBox.appendTo(allowSpaceCheckBox);\n allowSpaceCheckBox.setAttribute('aria-label', localValue.getConstant('Allow spacing between cells'));\n this.cellspacingTextBox.setAttribute('aria-label', 'cell spacing');\n };\n /**\n * @private\n * @returns {void}\n */\n TableOptionsDialog.prototype.loadCellMarginsDialog = function () {\n var tableFormat = this.documentHelper.selection.tableFormat;\n this.cellSpaceTextBox.value = tableFormat.cellSpacing;\n this.bottomMarginBox.value = tableFormat.bottomMargin;\n this.topMarginBox.value = tableFormat.topMargin;\n this.rightMarginBox.value = tableFormat.rightMargin;\n this.leftMarginBox.value = tableFormat.leftMargin;\n if (tableFormat.cellSpacing > 0) {\n this.allowSpaceCheckBox.checked = true;\n this.cellSpaceTextBox.enabled = true;\n }\n else {\n this.allowSpaceCheckBox.checked = false;\n this.cellSpaceTextBox.enabled = false;\n }\n };\n /**\n * @private\n * @param {WTableFormat} tableFormat Specifies table format.\n * @returns {void}\n */\n TableOptionsDialog.prototype.applySubTableOptions = function (tableFormat, sourceTable) {\n this.documentHelper.owner.editorHistoryModule.initComplexHistory(this.documentHelper.selection, 'TableMarginsSelection');\n this.applyTableOptionsHistory(tableFormat, sourceTable);\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistoryModule.currentHistoryInfo)) {\n this.documentHelper.owner.editorHistoryModule.updateComplexHistory();\n }\n };\n /**\n * @private\n * @param {WTableFormat} tableFormat Specifies table format.\n * @returns {void}\n */\n TableOptionsDialog.prototype.applyTableOptionsHelper = function (tableFormat) {\n this.applySubTableOptionsHelper(tableFormat, undefined);\n };\n TableOptionsDialog.prototype.applyTableOptionsHistory = function (tableFormat, sourceTable) {\n this.documentHelper.owner.editorModule.initHistory('TableOptions');\n this.applySubTableOptionsHelper(tableFormat, sourceTable);\n };\n TableOptionsDialog.prototype.applySubTableOptionsHelper = function (tableFormat, ownerTable) {\n if (isNullOrUndefined(ownerTable)) {\n ownerTable = this.documentHelper.selection.start.currentWidget.paragraph.associatedCell.ownerTable;\n ownerTable = ownerTable.combineWidget(this.documentHelper.owner.viewer);\n }\n var currentTableFormat = ownerTable.tableFormat;\n if (!isNullOrUndefined(this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo)) {\n this.documentHelper.owner.editorHistoryModule.currentBaseHistoryInfo.addModifiedTableOptions(currentTableFormat);\n }\n currentTableFormat.cellSpacing = tableFormat.cellSpacing;\n currentTableFormat.leftMargin = tableFormat.leftMargin;\n currentTableFormat.topMargin = tableFormat.topMargin;\n currentTableFormat.rightMargin = tableFormat.rightMargin;\n currentTableFormat.bottomMargin = tableFormat.bottomMargin;\n this.documentHelper.owner.tablePropertiesDialogModule.calculateGridValue(ownerTable);\n };\n /**\n * @private\n * @param {WTableFormat} tableFormat Specifies the table format\n */\n TableOptionsDialog.prototype.applyTableOptions = function (tableFormat) {\n tableFormat.leftMargin = this.leftMarginBox.value;\n tableFormat.topMargin = this.topMarginBox.value;\n tableFormat.bottomMargin = this.bottomMarginBox.value;\n tableFormat.rightMargin = this.rightMarginBox.value;\n tableFormat.cellSpacing = this.cellSpaceTextBox.value;\n };\n /**\n * @private\n * @returns {void}\n */\n TableOptionsDialog.prototype.show = function () {\n var documentLocale = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n documentLocale.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initTableOptionsDialog(documentLocale, this.documentHelper.owner.enableRtl);\n }\n this.loadCellMarginsDialog();\n this.documentHelper.dialog.header = documentLocale.getConstant('Table Options');\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = undefined;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n // this.documentHelper.dialog.cssClass = 'e-de-table-margin-size';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.open = undefined;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.removeEvents;\n this.documentHelper.dialog.buttons = [{\n click: this.applyTableCellProperties,\n buttonModel: { content: documentLocale.getConstant('Ok'), cssClass: 'e-flat e-table-cell-okay', isPrimary: true }\n },\n {\n click: this.closeCellMarginsDialog,\n buttonModel: { content: documentLocale.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n TableOptionsDialog.prototype.destroy = function () {\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var p = 0; p < this.target.childNodes.length; p++) {\n this.target.removeChild(this.target.childNodes[p]);\n p--;\n }\n this.target = undefined;\n }\n if (this.tableFormatIn) {\n this.tableFormatIn.destroy();\n this.tableFormatIn = undefined;\n }\n this.dialog = undefined;\n this.target = undefined;\n this.documentHelper = undefined;\n this.cellspacingTextBox = undefined;\n this.allowSpaceCheckBox = undefined;\n };\n return TableOptionsDialog;\n}());\nexport { TableOptionsDialog };\n","/* eslint-disable */\nimport { TextSearchResults } from '../index';\nimport { beforeXmlHttpRequestSend } from './../../index';\nimport { Dictionary } from '../../base/dictionary';\nimport { TextElementBox, ErrorTextElementBox, TableCellWidget, FieldElementBox } from '../viewer/page';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * The spell checker module\n */\nvar SpellChecker = /** @class */ (function () {\n function SpellChecker(documentHelper) {\n this.langIDInternal = 0;\n /**\n * Specifies whether spell check has to be performed or not.\n */\n this.enableSpellCheckInternal = true;\n /**\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.uniqueSpelledWords = {};\n this.spellSuggestionInternal = true;\n /**\n * @private\n */\n this.uniqueKey = '';\n this.removeUnderlineInternal = false;\n /**\n * @default 1000\n */\n this.uniqueWordsCountInternal = 15000;\n this.performOptimizedCheck = true;\n /**\n * @private\n */\n this.isChangeAll = false;\n this.documentHelper = documentHelper;\n this.errorWordCollection = new Dictionary();\n this.uniqueWordsCollection = new Dictionary();\n this.errorSuggestions = new Dictionary();\n this.ignoreAllItems = [];\n this.uniqueSpelledWords = {};\n this.textSearchResults = new TextSearchResults(this.documentHelper.owner);\n this.uniqueKey = this.documentHelper.owner.element.id + '_' + this.createGuid();\n }\n /**\n * Gets module name.\n */\n SpellChecker.prototype.getModuleName = function () {\n return 'SpellChecker';\n };\n Object.defineProperty(SpellChecker.prototype, \"enableOptimizedSpellCheck\", {\n /**\n * Gets the boolean indicating whether optimized spell check to be performed.\n *\n * @aspType bool\n * @returns {boolean} Returns enableOptimizedSpellCheck\n */\n get: function () {\n return this.performOptimizedCheck;\n },\n /**\n * Sets the boolean indicating whether optimized spell check to be performed.\n *\n * @aspType bool\n */\n set: function (value) {\n this.performOptimizedCheck = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"uniqueWordsCount\", {\n /**\n * Gets the spell checked Unique words.\n *\n * @aspType int\n */\n get: function () {\n return isNullOrUndefined(this.uniqueWordsCountInternal) ? 0 : this.uniqueWordsCountInternal;\n },\n /**\n * Sets the spell checked Unique words.\n *\n * @aspType int\n */\n set: function (value) {\n this.uniqueWordsCountInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"languageID\", {\n /**\n * Gets the languageID.\n *\n * @aspType int\n */\n get: function () {\n return isNullOrUndefined(this.langIDInternal) ? 0 : this.langIDInternal;\n },\n /**\n * Sets the languageID.\n *\n * @aspType int\n */\n set: function (value) {\n this.langIDInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"allowSpellCheckAndSuggestion\", {\n /**\n * Getter indicates whether suggestion enabled.\n *\n * @aspType bool\n */\n get: function () {\n return this.spellSuggestionInternal;\n },\n /**\n * Setter to enable or disable suggestion\n *\n * @aspType bool\n */\n set: function (value) {\n this.spellSuggestionInternal = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"removeUnderline\", {\n /**\n * Getter indicates whether underline removed for mis-spelled word.\n *\n * @aspType bool\n */\n get: function () {\n return this.removeUnderlineInternal;\n },\n /**\n * Setter to enable or disable underline for mis-spelled word\n *\n * @aspType bool\n */\n set: function (value) {\n this.removeUnderlineInternal = value;\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"enableSpellCheck\", {\n /**\n * Getter indicates whether spell check has to be performed or not.\n *\n * @aspType bool\n */\n get: function () {\n return this.enableSpellCheckInternal;\n },\n /**\n * Setter to enable or disable spell check has to be performed or not\n *\n * @aspType bool\n */\n set: function (value) {\n this.enableSpellCheckInternal = value;\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SpellChecker.prototype, \"viewer\", {\n get: function () {\n return this.documentHelper.owner.viewer;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Method to manage replace logic\n *\n * @private\n */\n SpellChecker.prototype.manageReplace = function (content, dialogElement) {\n this.documentHelper.triggerSpellCheck = true;\n var exactText = '';\n var elementInfo;\n if (!isNullOrUndefined(dialogElement) && dialogElement instanceof ErrorTextElementBox) {\n var exactText_1 = dialogElement.text;\n this.documentHelper.selection.start = dialogElement.start.clone();\n this.documentHelper.selection.end = dialogElement.end.clone();\n if (content !== 'Ignore Once') {\n content = this.manageSpecialCharacters(exactText_1, content);\n this.documentHelper.owner.editorModule.insertTextInternal(content, true);\n this.documentHelper.selection.start.setPositionInternal(this.documentHelper.selection.end);\n this.documentHelper.clearSelectionHighlight();\n return;\n }\n else {\n this.currentContextInfo = { 'text': exactText_1, 'element': dialogElement };\n }\n }\n if (!isNullOrUndefined(this.currentContextInfo) && this.currentContextInfo.element && content !== 'Ignore Once') {\n var elementBox = this.currentContextInfo.element;\n exactText = this.currentContextInfo.element.text;\n this.documentHelper.selection.start = elementBox.start.clone();\n this.documentHelper.selection.end = elementBox.end.clone();\n }\n else {\n this.handleReplace(content);\n }\n if (content !== 'Ignore Once') {\n this.documentHelper.owner.editorModule.insertTextInternal(content, true);\n if (!isNullOrUndefined(this.currentContextInfo)) {\n this.removeErrorsFromCollection(this.currentContextInfo);\n }\n this.documentHelper.selection.start.setPositionInternal(this.documentHelper.selection.end);\n this.documentHelper.clearSelectionHighlight();\n }\n //this.documentHelper.owner.errorWordCollection.remove(content);\n this.documentHelper.triggerSpellCheck = false;\n };\n /**\n * Method to handle replace logic\n *\n * @private\n */\n SpellChecker.prototype.handleReplace = function (content) {\n var startPosition = this.documentHelper.selection.start;\n var offset = startPosition.offset;\n var startIndex = 0;\n var startInlineObj = startPosition.currentWidget.getInline(offset, startIndex, false, true);\n var startOffset = startInlineObj.element.line.getOffset(startInlineObj.element, 0) + startInlineObj.element.length;\n if (startOffset === offset) {\n this.retrieveExactElementInfo(startInlineObj);\n }\n var exactText = startInlineObj.element.text;\n var startPattern = new RegExp('^[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\`\\\\s]+', 'g');\n var matches = [];\n var matchInfo;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = startPattern.exec(exactText))) {\n matches.push(matchInfo);\n }\n if (content === 'Ignore Once') {\n this.handleIgnoreOnce(startInlineObj);\n return;\n }\n startPosition.offset = offset - startInlineObj.index;\n if (!isNullOrUndefined(matches) && matches.length > 0) {\n startPosition.offset += matches[0].toString().length;\n }\n startPosition.location = this.documentHelper.owner.selectionModule.getPhysicalPositionInternal(startPosition.currentWidget, startPosition.offset, true);\n startPosition = this.documentHelper.owner.searchModule.textSearch.getTextPosition(startPosition.currentWidget, startPosition.offset.toString());\n //startPosition.location = this.owner.selection.getPhysicalPositionInternal(span.line, offset, true);\n startPosition.setPositionParagraph(startPosition.currentWidget, startPosition.offset);\n var index = (startPosition.offset + startInlineObj.element.length) - startPosition.offset;\n var endOffset = startPosition.currentWidget.getOffset(startInlineObj.element, index);\n var lineWidget = startPosition.currentWidget;\n var endPattern = new RegExp('[#\\\\@\\\\!\\\\~\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\s\\\\`]+$', 'g');\n matches = [];\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = endPattern.exec(exactText))) {\n matches.push(matchInfo);\n }\n if (!isNullOrUndefined(matches) && matches.length > 0) {\n endOffset -= matches[0].toString().length;\n }\n this.documentHelper.selection.end = this.documentHelper.owner.searchModule.textSearch.getTextPosition(lineWidget, endOffset.toString());\n this.documentHelper.selection.end.location = this.documentHelper.owner.selectionModule.getPhysicalPositionInternal(startPosition.currentWidget, endOffset, true);\n this.documentHelper.selection.end.setPositionParagraph(lineWidget, endOffset);\n this.currentContextInfo = { 'element': startInlineObj.element, 'text': startInlineObj.element.text };\n };\n /**\n * Method to retrieve exact element info\n *\n * @private\n */\n SpellChecker.prototype.retrieveExactElementInfo = function (startInlineObj) {\n var nextElement = startInlineObj.element.nextElement;\n if (!isNullOrUndefined(nextElement) && nextElement instanceof TextElementBox) {\n var nextTextElBox = nextElement;\n if (nextTextElBox.text.trim() != \"\") {\n startInlineObj.element = nextElement;\n }\n }\n };\n /**\n * Method to handle to ignore error Once\n *\n * @private\n */\n SpellChecker.prototype.handleIgnoreOnce = function (startInlineObj) {\n var textElement = startInlineObj.element;\n var exactText = '';\n if (!isNullOrUndefined(this.currentContextInfo) && this.currentContextInfo.element) {\n exactText = this.currentContextInfo.element.text;\n }\n else {\n exactText = textElement.text;\n }\n exactText = this.manageSpecialCharacters(exactText, undefined, true);\n if (textElement.ignoreOnceItems.indexOf(exactText) === -1) {\n textElement.ignoreOnceItems.push(exactText);\n }\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection);\n };\n /**\n * Method to handle ignore all items\n *\n * @private\n */\n SpellChecker.prototype.handleIgnoreAllItems = function (contextElement) {\n var contextItem = (!isNullOrUndefined(contextElement)) ? contextElement : this.retriveText();\n var retrievedText = this.manageSpecialCharacters(contextItem.text, undefined, true);\n if (this.ignoreAllItems.indexOf(retrievedText) === -1) {\n this.ignoreAllItems.push(retrievedText);\n this.removeErrorsFromCollection(contextItem);\n this.documentHelper.triggerSpellCheck = true;\n this.documentHelper.owner.editorModule.reLayout(this.documentHelper.selection);\n this.documentHelper.triggerSpellCheck = false;\n this.documentHelper.clearSelectionHighlight();\n }\n };\n /**\n * Method to handle dictionary\n *\n * @private\n */\n SpellChecker.prototype.handleAddToDictionary = function (contextElement) {\n var _this = this;\n var contextItem = (!isNullOrUndefined(contextElement)) ? contextElement : this.retriveText();\n var retrievedText = this.manageSpecialCharacters(contextItem.text, undefined, true);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.callSpellChecker(this.languageID, retrievedText, false, false, true).then(function (data) {\n _this.documentHelper.triggerSpellCheck = true;\n _this.removeErrorsFromCollection(contextItem);\n _this.ignoreAllItems.push(retrievedText);\n _this.documentHelper.owner.editorModule.reLayout(_this.documentHelper.selection, true);\n _this.documentHelper.triggerSpellCheck = false;\n });\n };\n /**\n * Method to append/remove special characters\n *\n * @private\n */\n SpellChecker.prototype.manageSpecialCharacters = function (exactText, replaceText, isRemove) {\n if (!isNullOrUndefined(exactText)) {\n if (isNullOrUndefined(replaceText)) {\n replaceText = exactText;\n }\n var pattern = new RegExp('^[#\\\\@\\\\!\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\\\”\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\`\\\\s\\\\’]+', 'g');\n var matches = [];\n var matchInfo = void 0;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = pattern.exec(exactText))) {\n matches.push(matchInfo);\n }\n if (matches.length > 0) {\n for (var i = 0; i < matches.length; i++) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var match = matches[i];\n replaceText = (!isRemove) ? match[0] + replaceText : replaceText.replace(match[0], '');\n }\n }\n var endPattern = new RegExp('[#\\\\@\\\\!\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\_\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\:\\\\;\\\\\"\\\\”\\'\\\\,\\\\<\\\\.\\\\>\\\\/\\\\?\\\\s\\\\`\\\\’]+$', 'g');\n matches = [];\n var originalText = replaceText;\n if (!isRemove) {\n originalText = exactText;\n }\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchInfo = endPattern.exec(originalText))) {\n matches.push(matchInfo);\n }\n if (matches.length > 0) {\n for (var i = 0; i < matches.length; i++) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var match = matches[i];\n replaceText = (!isRemove) ? replaceText + match[0] : replaceText.slice(0, match.index);\n }\n }\n }\n return replaceText;\n };\n /**\n * Method to remove errors\n *\n * @private\n */\n SpellChecker.prototype.removeErrorsFromCollection = function (contextItem) {\n if (!isNullOrUndefined(contextItem.text) && this.errorWordCollection.containsKey(contextItem.text)) {\n var textElement = this.errorWordCollection.get(contextItem.text);\n if (textElement.indexOf(contextItem.element) >= 0) {\n textElement.splice(0, 1);\n }\n if (textElement.length === 0) {\n this.errorWordCollection.remove(contextItem.text);\n }\n }\n };\n /**\n * Method to retrieve exact text\n *\n * @private\n */\n SpellChecker.prototype.retriveText = function () {\n var exactText;\n var currentElement;\n if (!isNullOrUndefined(this.currentContextInfo) && this.currentContextInfo.element) {\n currentElement = this.currentContextInfo.element;\n exactText = this.currentContextInfo.element.text;\n this.documentHelper.selection.start = currentElement.start.clone();\n this.documentHelper.selection.end = currentElement.end.clone();\n }\n else {\n var startPosition = this.documentHelper.selection.start;\n var offset = startPosition.offset;\n var startIndex = 0;\n var startInlineObj = startPosition.currentWidget.getInline(offset, startIndex);\n currentElement = startInlineObj.element;\n exactText = startInlineObj.element.text;\n }\n return { 'text': exactText, 'element': currentElement };\n };\n /**\n * Method to handle suggestions\n *\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n SpellChecker.prototype.handleSuggestions = function (allsuggestions) {\n this.spellCheckSuggestion = [];\n if (allsuggestions.length === 0) {\n this.spellCheckSuggestion.push(this.documentHelper.owner.contextMenuModule.locale.getConstant('Add to Dictionary'));\n }\n else {\n allsuggestions = (allsuggestions.length > 3) ? this.constructInlineMenu(allsuggestions) : allsuggestions;\n this.spellCheckSuggestion.push(this.documentHelper.owner.contextMenuModule.locale.getConstant('Add to Dictionary'));\n }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var spellSuggestion = [];\n if (this.spellCheckSuggestion.length > 0) {\n for (var _i = 0, _a = this.spellCheckSuggestion; _i < _a.length; _i++) {\n var str = _a[_i];\n spellSuggestion.push({\n text: str,\n id: this.documentHelper.owner.element.id + '_contextmenu_otherSuggestions_spellcheck_' + (str === this.documentHelper.owner.contextMenuModule.locale.getConstant('Add to Dictionary') ? 'Add to Dictionary' : str),\n iconCss: ''\n });\n }\n }\n return spellSuggestion;\n };\n /**\n * Method to check whether text element has errors\n *\n * @private\n */\n SpellChecker.prototype.checktextElementHasErrors = function (text, element, left) {\n var hasError = false;\n var erroElements = [];\n text = text.replace(/[\\s]+/g, '');\n if (!isNullOrUndefined(element.errorCollection) && element.errorCollection.length > 0) {\n if (!this.documentHelper.isScrollHandler && (element.ischangeDetected || element.paragraph.isChangeDetected)) {\n this.updateStatusForGlobalErrors(element.errorCollection, element);\n element.errorCollection = [];\n element.ischangeDetected = true;\n return { 'errorFound': hasError, 'elements': erroElements };\n }\n for (var i = 0; i < element.errorCollection.length; i++) {\n if (this.handleErrorCollection(element.errorCollection[i])) {\n hasError = true;\n erroElements.push(element.errorCollection[i]);\n }\n }\n }\n else if (!this.documentHelper.isScrollHandler && element.paragraph.isChangeDetected) {\n element.ischangeDetected = true;\n }\n else if (!element.ischangeDetected && this.handleErrorCollection(element)) {\n hasError = true;\n erroElements.push(element);\n }\n return { 'errorFound': hasError, 'elements': erroElements };\n };\n SpellChecker.prototype.updateStatusForGlobalErrors = function (erroElements, parentElement) {\n if (erroElements.length > 0) {\n for (var i = 0; i < erroElements.length; i++) {\n var exactText = this.manageSpecialCharacters(erroElements[i].text, undefined, true);\n if (this.errorWordCollection.containsKey(exactText)) {\n var elements = this.errorWordCollection.get(exactText);\n for (var j = 0; j < elements.length; j++) {\n if (elements[j] instanceof ErrorTextElementBox && elements[j] === erroElements[i]) {\n elements[j].ischangeDetected = true;\n elements[j].start.offset = parentElement.line.getOffset(parentElement.istextCombined ? this.getCombinedElement(parentElement) : parentElement, 0);\n elements[j].line = parentElement.line;\n break;\n }\n }\n }\n }\n }\n };\n /**\n * Method to handle document error collection.\n *\n * @param {string} errorInElement\n * @private\n */\n SpellChecker.prototype.handleErrorCollection = function (errorInElement) {\n var errors = this.errorWordCollection;\n var exactText = this.manageSpecialCharacters(errorInElement.text, undefined, true);\n if (errors.containsKey(exactText) && errorInElement.length > 1) {\n var ignoreAllIndex = this.ignoreAllItems.indexOf(exactText);\n if (ignoreAllIndex > -1) {\n if (errors.containsKey(exactText)) {\n errors.remove(exactText);\n }\n return false;\n }\n return true;\n }\n return false;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n SpellChecker.prototype.constructInlineMenu = function (inlineSuggestion) {\n for (var i = inlineSuggestion.length - 1; i > 0; i--) {\n if (inlineSuggestion.length > 3) {\n this.spellCheckSuggestion.push(inlineSuggestion[i]);\n inlineSuggestion.pop();\n }\n }\n return inlineSuggestion;\n };\n /**\n * Method to retrieve error element text\n *\n * @private\n */\n SpellChecker.prototype.findCurretText = function () {\n var insertPosition = this.documentHelper.selection.start;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var element;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var inlineObj = insertPosition.currentWidget.getInline(this.documentHelper.selection.start.offset, 0);\n var text;\n if (!isNullOrUndefined(inlineObj.element)) {\n if (!isNullOrUndefined(inlineObj.element.errorCollection) && inlineObj.element.errorCollection.length > 0) {\n for (var i = 0; i < inlineObj.element.errorCollection.length; i++) {\n var errorElement = inlineObj.element.errorCollection[i];\n if (errorElement.start.location.x <= insertPosition.location.x && errorElement.end.location.x >= insertPosition.location.x) {\n text = errorElement.text;\n element = errorElement;\n break;\n }\n }\n }\n else {\n text = inlineObj.element.text;\n }\n if (text === ' ') {\n inlineObj = insertPosition.currentWidget.getInline(this.documentHelper.selection.start.offset + 1, 0);\n text = inlineObj.element.text;\n }\n }\n return { 'text': text, 'element': element };\n };\n SpellChecker.prototype.addErrorCollection = function (text, elementToCompare, suggestions) {\n text = this.manageSpecialCharacters(text, undefined, true);\n if (this.errorWordCollection.containsKey(text)) {\n var errorElements = this.errorWordCollection.get(text);\n if (elementToCompare instanceof ErrorTextElementBox) {\n if (!this.compareErrorTextElement(elementToCompare, errorElements)) {\n errorElements.push(elementToCompare);\n }\n }\n else if (elementToCompare instanceof TextElementBox) {\n if (!this.compareTextElement(elementToCompare, errorElements)) {\n errorElements.push(elementToCompare);\n }\n }\n }\n else {\n if (!isNullOrUndefined(suggestions) && suggestions.length > 0) {\n this.errorSuggestions.add(text, suggestions);\n }\n this.errorWordCollection.add(text, [elementToCompare]);\n if (!this.uniqueWordsCollection.containsKey(text)) {\n this.uniqueWordsCollection.add(text, true);\n }\n }\n };\n SpellChecker.prototype.addCorrectWordCollection = function (text) {\n text = this.manageSpecialCharacters(text, undefined, true);\n if (!this.uniqueWordsCollection.containsKey(text)) {\n this.uniqueWordsCollection.add(text, false);\n }\n };\n /**\n * @private\n */\n SpellChecker.prototype.isInUniqueWords = function (text) {\n text = text.replace(/[\\s]+/g, '');\n return this.uniqueWordsCollection.containsKey(text);\n };\n /**\n * @private\n */\n SpellChecker.prototype.isErrorWord = function (text) {\n text = text.replace(/[\\s]+/g, '');\n return this.uniqueWordsCollection.get(text);\n };\n /**\n * @private\n */\n SpellChecker.prototype.isCorrectWord = function (text) {\n text = text.replace(/[\\s]+/g, '');\n return !this.uniqueWordsCollection.get(text);\n };\n SpellChecker.prototype.compareErrorTextElement = function (errorElement, errorCollection) {\n var copyElement = [];\n var isChanged = false;\n for (var i = 0; i < errorCollection.length; i++) {\n copyElement.push(errorCollection[i]);\n }\n var length = errorCollection.length;\n for (var i = 0; i < length; i++) {\n if (copyElement[i] instanceof ErrorTextElementBox) {\n if (copyElement[i].ischangeDetected) {\n var exactText = this.manageSpecialCharacters(copyElement[i].text, undefined, true);\n isChanged = true;\n this.removeErrorsFromCollection({ 'element': copyElement[i], 'text': exactText });\n }\n else {\n var currentElement = copyElement[i];\n if (errorElement.start.offset === currentElement.start.offset && errorElement.end.offset === currentElement.end.offset) {\n return true;\n }\n }\n }\n }\n if (isChanged) {\n this.errorWordCollection.add(this.manageSpecialCharacters(errorElement.text, undefined, true), [errorElement]);\n }\n return false;\n };\n /**\n * Method to compare text elements\n *\n * @private\n */\n SpellChecker.prototype.compareTextElement = function (errorElement, errorCollection) {\n for (var i = 0; i < errorCollection.length; i++) {\n if (errorCollection[i] instanceof TextElementBox) {\n var currentElement = errorCollection[i];\n if (currentElement === errorElement) {\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Method to handle Word by word spell check\n *\n * @private\n */\n SpellChecker.prototype.handleWordByWordSpellCheck = function (jsonObject, elementBox, left, top, underlineY, baselineAlignment, isSamePage) {\n if (jsonObject.HasSpellingError && isSamePage) {\n this.addErrorCollection(elementBox.text, elementBox, jsonObject.Suggestions);\n var backgroundColor = (elementBox.line.paragraph.containerWidget instanceof TableCellWidget) ? elementBox.line.paragraph.containerWidget.cellFormat.shading.backgroundColor : this.documentHelper.backgroundColor;\n this.documentHelper.render.renderWavyLine(elementBox, left, top, underlineY, '#FF0000', 'Single', baselineAlignment, backgroundColor);\n elementBox.isSpellChecked = true;\n }\n else {\n this.addCorrectWordCollection(elementBox.text);\n elementBox.isSpellChecked = true;\n }\n };\n /**\n * Method to check errors for combined elements\n *\n * @private\n */\n SpellChecker.prototype.checkElementCanBeCombined = function (elementBox, underlineY, beforeIndex, callSpellChecker, textToCombine, isNext, isPrevious, canCombine) {\n var currentText = isNullOrUndefined(textToCombine) ? '' : textToCombine;\n var isCombined = isNullOrUndefined(canCombine) ? false : canCombine;\n var checkPrevious = !isNullOrUndefined(isPrevious) ? isPrevious : true;\n var checkNext = !isNullOrUndefined(isNext) ? isNext : true;\n var combinedElements = [];\n var line = this.documentHelper.selection.getLineWidget(elementBox, 0);\n var index = line.children.indexOf(elementBox);\n var prevText = elementBox.text;\n combinedElements.push(elementBox);\n var difference = (isPrevious) ? 0 : 1;\n var prevCombined = false;\n var isPrevField = false;\n if (elementBox.text !== '\\v') {\n if (checkPrevious) {\n var textElement = undefined;\n for (var i = index - difference; i >= 0; i--) {\n textElement = line.children[i];\n if (textElement instanceof TextElementBox && !isPrevField) {\n if (prevText.indexOf(' ') !== 0 && textElement.text.lastIndexOf(' ') !== textElement.text.length - 1) {\n prevCombined = !isNullOrUndefined(textToCombine) ? true : false;\n currentText = textElement.text + currentText;\n prevText = textElement.text;\n isPrevField = false;\n combinedElements.push(textElement);\n isCombined = true;\n }\n else if (!isNullOrUndefined(textElement)) {\n textElement = textElement.nextElement;\n break;\n }\n }\n else if (textElement instanceof FieldElementBox && textElement.fieldType !== 1) {\n isPrevField = true;\n }\n }\n var currentElement = (isCombined) ? textElement : elementBox;\n if (this.lookThroughPreviousLine(currentText, prevText, currentElement, underlineY, beforeIndex)) {\n return true;\n }\n }\n if (isPrevious) {\n currentText = (prevCombined) ? currentText : elementBox.text + currentText;\n }\n else {\n currentText += elementBox.text;\n }\n isPrevField = false;\n var nextText = elementBox.text;\n if (checkNext) {\n var canCombine_1 = false;\n var element = undefined;\n for (var i = index + 1; i < line.children.length; i++) {\n element = line.children[i];\n if (element instanceof TextElementBox && !isPrevField) {\n if (nextText.lastIndexOf(' ') !== nextText.length - 1 && element.text.indexOf(' ') !== 0) {\n currentText += element.text;\n nextText = element.text;\n isPrevField = false;\n combinedElements.push(element);\n canCombine_1 = true;\n isCombined = true;\n }\n else if (!isNullOrUndefined(element)) {\n element = element.previousElement;\n break;\n }\n }\n else if (element instanceof FieldElementBox && element.fieldType !== 2) {\n isPrevField = true;\n }\n }\n var currentElement = (canCombine_1) ? element : elementBox;\n if (currentElement.text !== '\\f' && currentElement.text !== String.fromCharCode(14) && this.lookThroughNextLine(currentText, prevText, currentElement, underlineY, beforeIndex)) {\n return true;\n }\n }\n }\n if (isCombined && callSpellChecker && !this.checkCombinedElementsBeIgnored(combinedElements, currentText)) {\n this.handleCombinedElements(elementBox, currentText, underlineY, beforeIndex);\n }\n return isCombined;\n };\n SpellChecker.prototype.lookThroughPreviousLine = function (currentText, prevText, currentElement, underlineY, beforeIndex) {\n if (!isNullOrUndefined(currentElement) && currentElement.indexInOwner === 0 && !isNullOrUndefined(currentElement.line.previousLine)) {\n var previousLine = currentElement.line.previousLine;\n var index = previousLine.children.length - 1;\n if (!isNullOrUndefined(previousLine.children[index]) && previousLine.children[index] instanceof TextElementBox) {\n var firstElement = previousLine.children[index];\n if (!isNullOrUndefined(currentElement.text)) {\n if (currentElement.text.indexOf(' ') !== 0 && firstElement.text.lastIndexOf(' ') !== firstElement.text.length - 1) {\n currentText = (currentText.length > 0) ? currentText : prevText;\n this.checkElementCanBeCombined(firstElement, underlineY, beforeIndex, true, currentText, false, true, true);\n return true;\n }\n }\n }\n }\n return false;\n };\n SpellChecker.prototype.lookThroughNextLine = function (currentText, prevText, elementBox, underlineY, beforeIndex) {\n if (elementBox instanceof TextElementBox && !isNullOrUndefined(elementBox) && elementBox.indexInOwner === elementBox.line.children.length - 1 && !isNullOrUndefined(elementBox.line.nextLine)) {\n var nextLine = elementBox.line.nextLine;\n if (!isNullOrUndefined(nextLine.children[0]) && nextLine.children[0] instanceof TextElementBox) {\n var firstElement = nextLine.children[0];\n if (elementBox.text.lastIndexOf(' ') !== elementBox.text.length - 1 && firstElement.text.indexOf(' ') !== 0) {\n currentText = (currentText.length > 0) ? currentText : prevText;\n this.checkElementCanBeCombined(firstElement, underlineY, beforeIndex, true, currentText, true, false, true);\n return true;\n }\n }\n }\n return false;\n };\n /**\n * Method to handle combined elements\n *\n * @param {TextElementBox} elementBox\n * @param {string} currentText\n * @param {number} underlineY\n * @param {number} beforeIndex\n * @private\n */\n SpellChecker.prototype.handleCombinedElements = function (elementBox, currentText, underlineY, beforeIndex) {\n elementBox.istextCombined = true;\n var splittedText = currentText.split(/[\\s]+/);\n if (this.ignoreAllItems.indexOf(currentText) === -1 && elementBox instanceof TextElementBox && elementBox.ignoreOnceItems.indexOf(currentText) === -1) {\n if (splittedText.length > 1) {\n for (var i = 0; i < splittedText.length; i++) {\n var currentText_1 = splittedText[i];\n currentText_1 = this.manageSpecialCharacters(currentText_1, undefined, true);\n this.documentHelper.render.handleUnorderedElements(currentText_1, elementBox, underlineY, i, 0, i === splittedText.length - 1, beforeIndex);\n }\n }\n else {\n currentText = this.manageSpecialCharacters(currentText, undefined, true);\n this.documentHelper.render.handleUnorderedElements(currentText, elementBox, underlineY, 0, 0, true, beforeIndex);\n }\n }\n };\n /**\n * Method to check error element collection has unique element\n *\n * @param {ErrorTextElementBox[]} errorCollection\n * @param {ErrorTextElementBox} elementToCheck\n * @private\n */\n SpellChecker.prototype.checkArrayHasSameElement = function (errorCollection, elementToCheck) {\n for (var i = 0; i < errorCollection.length; i++) {\n var errorText = errorCollection[i];\n if ((errorText.start.location.x === elementToCheck.start.location.x) && (errorText.start.location.y === elementToCheck.start.location.y)) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n */\n SpellChecker.prototype.handleSplitWordSpellCheck = function (jsonObject, currentText, elementBox, isSamePage, underlineY, iteration, markIndex, isLastItem) {\n if (jsonObject.HasSpellingError && elementBox.text !== ' ' && isSamePage) {\n var matchResults = this.getMatchedResultsFromElement(elementBox, currentText);\n markIndex = (elementBox.istextCombined) ? elementBox.line.getOffset(this.getCombinedElement(elementBox), 0) : markIndex;\n this.documentHelper.owner.searchModule.textSearch.updateMatchedTextLocation(matchResults.matches, matchResults.textResults, matchResults.elementInfo, 0, elementBox, false, null, markIndex);\n this.handleMatchedResults(matchResults.textResults, elementBox, underlineY, iteration, jsonObject.Suggestions, isLastItem);\n }\n else {\n this.addCorrectWordCollection(currentText);\n if (isLastItem) {\n elementBox.isSpellChecked = true;\n }\n }\n this.updateUniqueWords([{ Text: currentText, HasSpellError: jsonObject.HasSpellingError }]);\n };\n SpellChecker.prototype.handleMatchedResults = function (results, elementBox, wavyLineY, index, suggestions, isLastItem) {\n if (results.length === 0 && isLastItem) {\n elementBox.isSpellChecked = true;\n return;\n }\n for (var i = 0; i < results.length; i++) {\n var span = this.createErrorElementWithInfo(results.innerList[i], elementBox);\n var color = '#FF0000';\n if (!isNullOrUndefined(elementBox.errorCollection) && !this.checkArrayHasSameElement(elementBox.errorCollection, span)) {\n elementBox.errorCollection.splice(index, 0, span);\n }\n this.addErrorCollection(span.text, span, suggestions);\n var elements = this.errorWordCollection.get(span.text);\n if (elements.indexOf(elementBox) !== -1 && elements.indexOf(elementBox) !== elements.indexOf(span)) {\n elements.splice(elements.indexOf(elementBox), 1);\n }\n var backgroundColor = (elementBox.line.paragraph.containerWidget instanceof TableCellWidget) ? elementBox.paragraph.containerWidget.cellFormat.shading.backgroundColor : this.documentHelper.backgroundColor;\n var para = elementBox.line.paragraph;\n var lineY = para.y;\n for (var i_1 = 0; i_1 < para.childWidgets.length; i_1++) {\n if (para.childWidgets[i_1] == elementBox.line)\n break;\n lineY += para.childWidgets[i_1].height;\n }\n if (elementBox.isRightToLeft) {\n this.documentHelper.render.renderWavyLine(span, span.end.location.x, lineY, wavyLineY, color, 'Single', elementBox.characterFormat.baselineAlignment, backgroundColor);\n }\n else {\n this.documentHelper.render.renderWavyLine(span, span.start.location.x, lineY, wavyLineY, color, 'Single', elementBox.characterFormat.baselineAlignment, backgroundColor);\n }\n if (isLastItem) {\n elementBox.isSpellChecked = true;\n }\n }\n };\n /**\n * Calls the spell checker service\n * @private\n */\n /* eslint-disable @typescript-eslint/no-explicit-any */\n SpellChecker.prototype.callSpellChecker = function (languageID, word, checkSpelling, checkSuggestion, addWord, isByPage) {\n var _this = this;\n var spellchecker = this;\n return new Promise(function (resolve, reject) {\n if (!isNullOrUndefined(_this)) {\n var httpRequest_1 = new XMLHttpRequest();\n var service_1 = _this.documentHelper.owner.serviceUrl;\n service_1 = (isByPage) ? service_1 + _this.documentHelper.owner.serverActionSettings.spellCheckByPage : service_1 + _this.documentHelper.owner.serverActionSettings.spellCheck;\n httpRequest_1.open('POST', service_1, true);\n httpRequest_1.setRequestHeader('Content-Type', 'application/json');\n _this.setCustomHeaders(httpRequest_1);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var spellCheckData = { LanguageID: languageID, TexttoCheck: word, CheckSpelling: checkSpelling, CheckSuggestion: checkSuggestion, AddWord: addWord };\n var httprequestEventArgs = { serverActionType: 'SpellCheck', headers: _this.documentHelper.owner.headers, timeout: 0, cancel: false, withCredentials: false };\n _this.documentHelper.owner.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (!httprequestEventArgs.cancel) {\n httpRequest_1.send(JSON.stringify(spellCheckData));\n }\n httpRequest_1.onreadystatechange = function () {\n if (httpRequest_1.readyState === 4) {\n if (httpRequest_1.status === 200 || httpRequest_1.status === 304) {\n resolve(httpRequest_1.response);\n }\n else {\n var result = {\n status: httpRequest_1.status.toString(),\n statusText: httpRequest_1.responseText,\n url: service_1\n };\n result.name = 'onFailure';\n if (!isNullOrUndefined(spellchecker.documentHelper)) {\n spellchecker.documentHelper.owner.fireServiceFailure(result);\n }\n reject(httpRequest_1.response);\n }\n }\n };\n }\n });\n };\n SpellChecker.prototype.setCustomHeaders = function (httpRequest) {\n for (var i = 0; i < this.documentHelper.owner.headers.length; i++) {\n var header = this.documentHelper.owner.headers[i];\n for (var _i = 0, _a = Object.keys(header); _i < _a.length; _i++) {\n var key = _a[_i];\n httpRequest.setRequestHeader(key, header[key]);\n }\n }\n };\n /**\n * Method to check for next error\n *\n * @private\n * @returns {void}\n */\n SpellChecker.prototype.checkForNextError = function () {\n if (!isNullOrUndefined(this.viewer)) {\n var errorWords = this.errorWordCollection;\n if (errorWords.length > 0) {\n for (var i = 0; i < errorWords.length; i++) {\n var errorElements = errorWords.get(errorWords.keys[i]);\n for (var j = 0; j < errorElements.length; j++) {\n if (errorElements[j] instanceof ErrorTextElementBox && !errorElements[j].ischangeDetected) {\n this.updateErrorElementTextBox(errorWords.keys[i], errorElements[j]);\n }\n else if (errorElements[j] instanceof TextElementBox) {\n var matchResults = this.getMatchedResultsFromElement(errorElements[j]);\n var results = matchResults.textResults;\n var markIndex = (errorElements[j].ischangeDetected) ? errorElements[j].start.offset : errorElements[j].line.getOffset(errorElements[j], 0);\n this.documentHelper.owner.searchModule.textSearch.updateMatchedTextLocation(matchResults.matches, results, matchResults.elementInfo, 0, errorElements[j], false, null, markIndex);\n for (var i_2 = 0; i_2 < results.length; i_2++) {\n var element = this.createErrorElementWithInfo(results.innerList[i_2], errorElements[j]);\n this.updateErrorElementTextBox(element.text, element);\n break;\n }\n }\n break;\n }\n break;\n }\n }\n else {\n this.documentHelper.clearSelectionHighlight();\n }\n }\n };\n /**\n * Method to create error element with matched results\n *\n * @param {TextSearchResult} result\n * @param {ElementBox} errorElement\n * @private\n */\n SpellChecker.prototype.createErrorElementWithInfo = function (result, errorElement) {\n var element = new ErrorTextElementBox();\n var isUpdated = false;\n if (errorElement instanceof ErrorTextElementBox && (isNullOrUndefined(result.start) || isNullOrUndefined(result.end) || isNullOrUndefined(result.text))) {\n element.text = errorElement.text;\n var line = errorElement.line;\n for (var i = 0; i < line.children.length; i++) {\n if (line.children[i] instanceof TextElementBox) {\n var text = line.children[i].text;\n var exactText = errorElement.text;\n if (text.indexOf(exactText) !== -1) {\n errorElement.start.offset = text.indexOf(exactText);\n errorElement.end.offset = errorElement.start.offset + exactText.length;\n element.start = errorElement.start;\n element.end = errorElement.end;\n element.start.currentWidget = errorElement.line;\n element.end.currentWidget = errorElement.line;\n isUpdated = true;\n break;\n }\n }\n }\n if (!isUpdated) {\n element.text = errorElement.text;\n element.start = errorElement.start;\n element.end = errorElement.end;\n isUpdated = true;\n }\n }\n if (!isUpdated) {\n element.text = result.text;\n element.start = result.start;\n element.end = result.end;\n }\n element.height = errorElement.height;\n element.canTrigger = errorElement.canTrigger;\n element.characterFormat.copyFormat(errorElement.characterFormat);\n // element.width = this.documentHelper.textHelper.getWidth(element.text, errorElement.characterFormat, (errorElement as TextElementBox).scriptType);\n element.width = Math.abs(element.start.location.x - element.end.location.x);\n return element;\n };\n /**\n * Method to get matched results from element box\n *\n * @private\n * @param {ElementBox} errorElement - Specifies the error element box.\n * @param {string} currentText - Specifies the current text\n * @returns {MatchResults} - Returns match results info.\n */\n SpellChecker.prototype.getMatchedResultsFromElement = function (errorElement, currentText) {\n var line = errorElement.line;\n var pattern = this.documentHelper.owner.searchModule.textSearch.stringToRegex((isNullOrUndefined(currentText)) ? errorElement.text : currentText, 'CaseSensitive');\n this.textSearchResults.clearResults();\n var results = this.textSearchResults;\n var textLineInfo = this.documentHelper.owner.searchModule.textSearch.getElementInfo(line.children[0], 0, false, pattern, undefined, undefined, undefined, undefined, true);\n var text = textLineInfo.fullText;\n var matches = [];\n var spans = textLineInfo.elementsWithOffset;\n var matchObject;\n // eslint-disable no-cond-assign\n while (!isNullOrUndefined(matchObject = pattern.exec(text))) {\n if (this.isChangeAll) {\n matchObject.index = spans.get(errorElement);\n }\n matches.push(matchObject);\n }\n return { 'matches': matches, 'elementInfo': spans, 'textResults': results };\n };\n /**\n * Method to update error element information\n *\n * @private\n * @param {string} error - Specifies the error word.\n * @param {ErrorTextElementBox} errorElement - Specifies the error element box.\n * @returns {void}\n */\n SpellChecker.prototype.updateErrorElementTextBox = function (error, errorElement) {\n var element = errorElement;\n this.documentHelper.clearSelectionHighlight();\n this.documentHelper.selection.start = element.start.clone();\n this.documentHelper.selection.end = element.end.clone();\n this.documentHelper.selection.highlight(errorElement.start.paragraph, errorElement.start, errorElement.end);\n this.documentHelper.owner.spellCheckDialogModule.updateSuggestionDialog(error, element);\n };\n /**\n * Method to retrieve space information in a text\n *\n * @private\n * @param {string} text - Specifies the text\n * @param {WCharacterFormat} characterFormat - Specifies the character format.\n * @returns {SpecialCharacterInfo} - Returs special character info.\n */\n SpellChecker.prototype.getWhiteSpaceCharacterInfo = function (elementBox) {\n var text = elementBox.text;\n var characterFormat = elementBox.characterFormat;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var matchedText = [];\n var width = 0;\n var length = 0;\n matchedText = text.match(/[\\s]+/);\n if (!isNullOrUndefined(matchedText) && matchedText.length > 0) {\n for (var i = 0; i < matchedText.length; i++) {\n width += this.documentHelper.textHelper.getWidth(matchedText[i], characterFormat, elementBox.scriptType);\n length += matchedText[i].length;\n }\n }\n return { 'width': width, 'wordLength': length, 'isBeginning': (!isNullOrUndefined(matchedText) && matchedText.index === 0) };\n };\n /**\n * Retrieve Special character info\n *\n * @private\n * @param {string} text - Specifies the text\n * @param {WCharacterFormat} characterFormat - Specifies the character format.\n * @returns {SpecialCharacterInfo} - Returs special character info.\n */\n SpellChecker.prototype.getSpecialCharactersInfo = function (elementBox) {\n var text = elementBox.text;\n var characterFormat = elementBox.characterFormat;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var matchedText = [];\n var beginingwidth = 0;\n var endWidth = 0;\n var length = 0;\n matchedText = text.match(/^[\\#\\@\\!\\~\\$\\%\\^\\&\\*\\(\\)\\-\\_\\+\\=\\{\\}\\[\\]\\:\\;\\\"\\'\\,\\<\\.\\>\\/\\?\\`]*/);\n for (var i = 0; i < matchedText.length; i++) {\n if (!isNullOrUndefined(matchedText[i]) && matchedText[i].length > 0) {\n beginingwidth = this.documentHelper.textHelper.getWidth(matchedText[i], characterFormat, elementBox.scriptType);\n }\n length = matchedText.length;\n }\n matchedText = text.match(/[\\#\\@\\!\\~\\$\\%\\^\\&\\*\\(\\)\\-\\_\\+\\=\\{\\}\\[\\]\\:\\;\\\"\\'\\,\\<\\.\\>\\/\\?\\`]*$/);\n for (var i = 0; i < matchedText.length; i++) {\n if (!isNullOrUndefined(matchedText[i]) && matchedText[i].length > 0) {\n endWidth = this.documentHelper.textHelper.getWidth(matchedText[i], characterFormat, elementBox.scriptType);\n }\n length = matchedText.length;\n }\n return { 'beginningWidth': beginingwidth, 'endWidth': endWidth, 'wordLength': length };\n };\n /**\n * Method to retrieve next available combined element\n *\n * @private\n * @param {ElementBox} element - Specified the element.\n * @returns {ElementBox} - Returns combined element.\n */\n SpellChecker.prototype.getCombinedElement = function (element) {\n var prevElement = element;\n while (!isNullOrUndefined(element) && element instanceof TextElementBox && element.istextCombined) {\n prevElement = element;\n element = element.previousElement;\n }\n return prevElement;\n };\n SpellChecker.prototype.checkCombinedElementsBeIgnored = function (elements, exactText) {\n exactText = this.manageSpecialCharacters(exactText, undefined, true);\n for (var i = 0; i < elements.length; i++) {\n if (elements[i].ignoreOnceItems.indexOf(exactText) !== -1) {\n return true;\n }\n }\n return false;\n };\n /**\n * Method to update error collection\n *\n * @private\n * @param {TextElementBox} currentElement - Specifies current element.\n * @param {TextElementBox} splittedElement - Specifies splitted element.\n * @returns {void}\n */\n SpellChecker.prototype.updateSplittedElementError = function (currentElement, splittedElement) {\n var errorCount = currentElement.errorCollection.length;\n if (errorCount > 0) {\n var errorCollection = [];\n for (var i = 0; i < errorCount; i++) {\n errorCollection.push(currentElement.errorCollection[i]);\n }\n for (var i = 0; i < errorCount; i++) {\n if (currentElement.text.indexOf(errorCollection[i].text) === -1) {\n splittedElement.ischangeDetected = true;\n currentElement.errorCollection.splice(0, 1);\n }\n }\n }\n };\n /**\n * @private\n * @param {Page} page - Specifies the page.\n * @returns {string} - Returns page content.\n */\n SpellChecker.prototype.getPageContent = function (page) {\n var content = '';\n if (this.documentHelper.owner.sfdtExportModule) {\n var sfdtExport = this.documentHelper.owner.sfdtExportModule;\n var index = sfdtExport.keywordIndex;\n sfdtExport.keywordIndex = 0;\n sfdtExport.Initialize();\n var document_1 = sfdtExport.writePage(page);\n sfdtExport.keywordIndex = index;\n if (this.documentHelper.owner.textExportModule) {\n var textExport = this.documentHelper.owner.textExportModule;\n textExport.pageContent = '';\n textExport.setDocument(document_1);\n textExport.writeInternal();\n content = textExport.pageContent;\n }\n }\n return content;\n };\n /**\n * @private\n * @param {any[]} spelledWords - Specifies spelledWords\n * @returns {void}\n */\n SpellChecker.prototype.updateUniqueWords = function (spelledWords) {\n if (!isNullOrUndefined(localStorage.getItem(this.uniqueKey))) {\n this.uniqueSpelledWords = JSON.parse(localStorage.getItem(this.uniqueKey));\n }\n this.uniqueSpelledWords = this.uniqueSpelledWords || {};\n var totalCount = spelledWords.length + Object.keys(this.uniqueSpelledWords).length;\n if (totalCount <= this.uniqueWordsCount) {\n for (var i = 0; i < spelledWords.length; i++) {\n this.checkForUniqueWords(spelledWords[i]);\n }\n }\n this.addUniqueWordsToLocalStorage(this.uniqueKey, JSON.stringify(this.uniqueSpelledWords));\n this.uniqueSpelledWords = {};\n };\n SpellChecker.prototype.addUniqueWordsToLocalStorage = function (uniqueKey, value) {\n try {\n localStorage.setItem(uniqueKey, value);\n }\n catch (e) {\n if (e.name === 'QuotaExceededError') {\n this.clearCache();\n localStorage.setItem(uniqueKey, value);\n }\n }\n };\n SpellChecker.prototype.checkForUniqueWords = function (spellData) {\n var identityMatched = this.uniqueSpelledWords[spellData.Text];\n if (!identityMatched) {\n this.uniqueSpelledWords[spellData.Text] = spellData.HasSpellError;\n }\n };\n /**\n * Method to clear cached words for spell check\n *\n * @returns {void}\n */\n SpellChecker.prototype.clearCache = function () {\n if (!isNullOrUndefined(localStorage.getItem(this.uniqueKey))) {\n localStorage.removeItem(this.uniqueKey);\n }\n };\n SpellChecker.prototype.createGuid = function () {\n var dateTime = new Date().getTime();\n var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (char) {\n var randNo = (dateTime + Math.random() * 16) % 16 | 0;\n dateTime = Math.floor(dateTime / 16);\n return (char === 'x' ? randNo : (randNo & 0x3 | 0x8)).toString(16);\n });\n return uuid;\n };\n /**\n * Check spelling in page data\n *\n * @private\n * @param {string} wordToCheck - Specifies wordToCheck\n * @returns {WordSpellInfo} - Retruns WordSpellInfo\n */\n SpellChecker.prototype.checkSpellingInPageInfo = function (wordToCheck) {\n var hasError = false;\n var elementPresent = false;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var uniqueWords = JSON.parse(localStorage.getItem(this.uniqueKey));\n if (!isNullOrUndefined(uniqueWords)) {\n if (!isNullOrUndefined(uniqueWords[wordToCheck])) {\n return { hasSpellError: uniqueWords[wordToCheck], isElementPresent: true };\n }\n }\n return { hasSpellError: hasError, isElementPresent: elementPresent };\n };\n /**\n * @private\n * @returns {void}\n */\n SpellChecker.prototype.destroy = function () {\n this.errorWordCollection = undefined;\n this.ignoreAllItems = undefined;\n this.errorSuggestions = undefined;\n this.uniqueWordsCollection = undefined;\n this.uniqueSpelledWords = {};\n this.textSearchResults = undefined;\n if (!isNullOrUndefined(localStorage.getItem(this.uniqueKey))) {\n localStorage.removeItem(this.uniqueKey);\n }\n this.documentHelper = undefined;\n };\n return SpellChecker;\n}());\nexport { SpellChecker };\n","/* eslint-disable */\nimport { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { TextElementBox, ErrorTextElementBox } from '../viewer/page';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\n/**\n * Spell check dialog\n */\nvar SpellCheckDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function SpellCheckDialog(documentHelper) {\n var _this = this;\n /**\n * @param {SelectEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.selectedText = args.text;\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.clearSelectionHighlight();\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onIgnoreClicked = function () {\n if (!isNullOrUndefined(_this.elementBox)) {\n showSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellCheckerModule.manageReplace('Ignore Once', _this.elementBox);\n _this.removeErrors();\n _this.parent.spellCheckerModule.checkForNextError();\n // this.documentHelper.hideDialog();\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onIgnoreAllClicked = function () {\n if (!isNullOrUndefined(_this.elementBox)) {\n showSpinner(_this.documentHelper.dialog.element);\n var text = _this.elementBox.text;\n _this.parent.spellCheckerModule.handleIgnoreAllItems({ element: _this.elementBox, text: text });\n _this.parent.spellCheckerModule.checkForNextError();\n // this.documentHelper.hideDialog();\n hideSpinner(_this.documentHelper.dialog.element);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.addToDictClicked = function () {\n if (!isNullOrUndefined(_this.elementBox)) {\n showSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellCheckerModule.handleAddToDictionary({ element: _this.elementBox, text: _this.elementBox.text });\n if (_this.parent.spellCheckerModule.errorWordCollection.containsKey(_this.errorText)) {\n _this.parent.spellCheckerModule.errorWordCollection.remove(_this.errorText);\n }\n _this.parent.spellCheckerModule.checkForNextError();\n _this.documentHelper.hideDialog();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeButtonClicked = function () {\n if (!isNullOrUndefined(_this.selectedText)) {\n _this.isSpellChecking = true;\n showSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellCheckerModule.manageReplace(_this.selectedText, _this.elementBox);\n _this.removeErrors();\n _this.parent.spellCheckerModule.checkForNextError();\n hideSpinner(_this.documentHelper.dialog.element);\n _this.selectedText = undefined;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.changeAllButtonClicked = function () {\n if (!isNullOrUndefined(_this.selectedText)) {\n _this.isSpellChecking = true;\n _this.parent.spellCheckerModule.isChangeAll = true;\n showSpinner(_this.documentHelper.dialog.element);\n var elements = _this.parent.spellCheckerModule.errorWordCollection.get(_this.errorText);\n for (var i = 0; i < elements.length; i++) {\n if (elements[i] instanceof ErrorTextElementBox && !elements[i].ischangeDetected) {\n _this.parent.spellCheckerModule.manageReplace(_this.selectedText, elements[i]);\n }\n else if (elements[i] instanceof TextElementBox) {\n var matchResults = _this.parent.spellCheckerModule.getMatchedResultsFromElement(elements[i]);\n var results = matchResults.textResults;\n var markIndex = (elements[i].ischangeDetected) ?\n elements[i].start.offset : elements[i].line.getOffset(elements[i], 0);\n _this.parent.searchModule.textSearch.updateMatchedTextLocation(matchResults.matches, results, matchResults.elementInfo, 0, elements[i], false, null, markIndex);\n for (var j = 0; j < results.length; j++) {\n var element = _this.parent.spellCheckerModule.createErrorElementWithInfo(results.innerList[j], elements[i]);\n _this.parent.spellCheckerModule.manageReplace(_this.selectedText, element);\n }\n }\n }\n if (_this.parent.spellCheckerModule.errorWordCollection.containsKey(_this.errorText)) {\n _this.parent.spellCheckerModule.errorWordCollection.remove(_this.errorText);\n }\n _this.parent.spellCheckerModule.checkForNextError();\n _this.documentHelper.hideDialog();\n hideSpinner(_this.documentHelper.dialog.element);\n _this.parent.spellCheckerModule.isChangeAll = false;\n _this.selectedText = undefined;\n }\n };\n this.documentHelper = documentHelper;\n createSpinner({ target: this.documentHelper.dialog.element, cssClass: 'e-spin-overlay' });\n }\n Object.defineProperty(SpellCheckDialog.prototype, \"parent\", {\n get: function () {\n return this.documentHelper.owner;\n },\n enumerable: true,\n configurable: true\n });\n SpellCheckDialog.prototype.getModuleName = function () {\n return 'SpellCheckDialog';\n };\n SpellCheckDialog.prototype.removeErrors = function () {\n if (!isNullOrUndefined(this.errorText) && this.parent.spellCheckerModule.errorWordCollection.containsKey(this.errorText)) {\n var textElement = this.parent.spellCheckerModule.errorWordCollection.get(this.errorText);\n textElement.splice(0, 1);\n if (textElement.length === 0) {\n this.parent.spellCheckerModule.errorWordCollection.remove(this.errorText);\n }\n }\n if (this.parent.spellCheckerModule.errorWordCollection.length === 0) {\n this.documentHelper.hideDialog();\n }\n };\n /**\n * @private\n * @param {string} error - Specifies error element box.\n * @param {ElementBox} elementbox - Specifies the element box.\n * @returns {void}\n */\n SpellCheckDialog.prototype.show = function (error, elementbox) {\n this.target = undefined;\n this.localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.updateSuggestionDialog(error, elementbox);\n }\n };\n /**\n * @private\n * @param {string} error - Specifies error element box.\n * @param {ElementBox} elementbox - Specifies the element box.\n * @returns {void}\n */\n SpellCheckDialog.prototype.updateSuggestionDialog = function (error, elementBox) {\n var _this = this;\n this.elementBox = elementBox;\n var suggestions;\n if (this.isSpellChecking) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.parent.spellCheckerModule.callSpellChecker(this.parent.spellCheckerModule.languageID, error, false, true).then(function (data) {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var jsonObject = JSON.parse(data);\n suggestions = jsonObject.Suggestions;\n _this.isSpellChecking = false;\n _this.handleRetrievedSuggestion(error, suggestions);\n });\n }\n else {\n error = this.parent.spellCheckerModule.manageSpecialCharacters(error, undefined, true);\n suggestions = this.parent.spellCheckerModule.errorSuggestions.containsKey(error) ?\n this.parent.spellCheckerModule.errorSuggestions.get(error) : [];\n this.handleRetrievedSuggestion(error, suggestions);\n }\n };\n SpellCheckDialog.prototype.handleRetrievedSuggestion = function (error, suggestions) {\n error = this.parent.spellCheckerModule.manageSpecialCharacters(error, undefined, true);\n this.initSpellCheckDialog(this.localValue, error, suggestions);\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog.header = this.localValue.getConstant('Spelling Editor');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localValue.getConstant('Cancel'), cssClass: 'e-control e-flat', isPrimary: true }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n hideSpinner(this.documentHelper.dialog.element);\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value.\n * @param {string} error - Specifies the error text.\n * @param {string[]} suggestion - Specifies the suggestion.\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n SpellCheckDialog.prototype.initSpellCheckDialog = function (localValue, error, suggestion, isRtl) {\n var id = this.documentHelper.owner.containerId + '_add_SpellCheck';\n this.target = createElement('div', { id: id, className: 'e-de-insert-spellchecker' });\n this.errorText = error;\n var textContainer = createElement('div', {\n className: 'e-de-dlg-sub-header', innerHTML: localValue.getConstant('Spelling')\n });\n this.target.appendChild(textContainer);\n var spellContainer = createElement('div', { className: 'e-de-spellcheck-error-container' });\n var listviewDiv = createElement('div', { className: 'e-de-dlg-spellcheck-listview' });\n spellContainer.appendChild(listviewDiv);\n this.spellingListView = new ListView({\n dataSource: [error],\n cssClass: 'e-dlg-spellcheck-listitem'\n });\n this.spellingListView.appendTo(listviewDiv);\n var buttonDiv = createElement('div', { className: 'e-de-spellcheck-btncontainer' });\n spellContainer.appendChild(buttonDiv);\n var ignoreButtonElement = createElement('button', { innerHTML: localValue.getConstant('Ignore') });\n buttonDiv.appendChild(ignoreButtonElement);\n ignoreButtonElement.setAttribute('aria-label', localValue.getConstant('Ignore'));\n var ignorebutton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n ignorebutton.appendTo(ignoreButtonElement);\n ignoreButtonElement.addEventListener('click', this.onIgnoreClicked);\n var ignoreAllButtonElement = createElement('button', { innerHTML: localValue.getConstant('Ignore All') });\n ignoreAllButtonElement.setAttribute('aria-label', localValue.getConstant('Ignore All'));\n buttonDiv.appendChild(ignoreAllButtonElement);\n var ignoreAllbutton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n ignoreAllbutton.appendTo(ignoreAllButtonElement);\n ignoreAllButtonElement.addEventListener('click', this.onIgnoreAllClicked);\n var addDictButtonElement = createElement('button', { innerHTML: localValue.getConstant('Add to Dictionary') });\n addDictButtonElement.setAttribute('aria-label', localValue.getConstant('Add to Dictionary'));\n buttonDiv.appendChild(addDictButtonElement);\n var addDictButton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n addDictButton.appendTo(addDictButtonElement);\n addDictButtonElement.addEventListener('click', this.addToDictClicked);\n this.target.appendChild(spellContainer);\n var suggestionDiv = createElement('div', {\n className: 'e-de-dlg-sub-header', innerHTML: localValue.getConstant('Suggestions')\n });\n this.target.appendChild(suggestionDiv);\n var suggestionContainer = createElement('div', { className: 'e-de-spellcheck-suggestion-container' });\n this.target.appendChild(suggestionContainer);\n var suggestListDiv = createElement('div', { className: 'e-de-dlg-spellcheck-listview' });\n suggestListDiv.setAttribute('aria-label', localValue.getConstant('Suggestions'));\n suggestionContainer.appendChild(suggestListDiv);\n this.suggestionListView = new ListView({\n dataSource: suggestion,\n cssClass: 'e-dlg-spellcheck-listitem'\n });\n this.suggestionListView.appendTo(suggestListDiv);\n this.suggestionListView.addEventListener('select', this.selectHandler);\n var suggestBtnContainder = createElement('div', { className: 'e-de-spellcheck-btncontainer' });\n suggestionContainer.appendChild(suggestBtnContainder);\n var changeButtonElement = createElement('button', { innerHTML: localValue.getConstant('Change') });\n changeButtonElement.setAttribute('aria-label', localValue.getConstant('Change'));\n suggestBtnContainder.appendChild(changeButtonElement);\n var changeButton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n changeButton.appendTo(changeButtonElement);\n changeButtonElement.addEventListener('click', this.changeButtonClicked);\n var changeAllButtonElement = createElement('button', { innerHTML: localValue.getConstant('Change All') });\n changeAllButtonElement.setAttribute('aria-label', localValue.getConstant('Change All'));\n suggestBtnContainder.appendChild(changeAllButtonElement);\n var changeAllbutton = new Button({ cssClass: 'e-control e-de-ok-button e-de-spellcheck-btn' });\n changeAllbutton.appendTo(changeAllButtonElement);\n changeAllButtonElement.addEventListener('click', this.changeAllButtonClicked);\n if (isNullOrUndefined(suggestion) || suggestion.length === 0) {\n changeButton.disabled = true;\n changeAllbutton.disabled = true;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n SpellCheckDialog.prototype.destroy = function () {\n if (this.target) {\n this.target.remove();\n this.target = undefined;\n }\n if (this.elementBox) {\n this.elementBox.destroy();\n this.elementBox = undefined;\n }\n this.documentHelper = undefined;\n if (this.spellingListView) {\n this.spellingListView.destroy();\n this.spellingListView = undefined;\n }\n if (this.suggestionListView) {\n this.suggestionListView.destroy();\n this.suggestionListView = undefined;\n }\n this.selectedText = undefined;\n };\n return SpellCheckDialog;\n}());\nexport { SpellCheckDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { FieldElementBox, CheckBoxFormField } from '../viewer/page';\nimport { NumericTextBox, TextBox } from '@syncfusion/ej2-inputs';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * Form field checkbox dialog is used to modify the value in checkbox form field.\n */\nvar CheckBoxFormFieldDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} owner - Specifies the document helper.\n * @private\n */\n function CheckBoxFormFieldDialog(owner) {\n var _this = this;\n /**\n * @private\n * @param {ChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeBidirectional = function (event) {\n if (event.value === 'exact') {\n _this.autoButton.checked = !_this.exactButton.checked;\n _this.exactlyNumber.enabled = true;\n }\n else {\n _this.exactButton.checked = !_this.autoButton.checked;\n _this.exactlyNumber.enabled = false;\n }\n };\n /**\n * @private\n * @param {ChangeArgs} event - Specifies the event args.\n * @returns {void}\n */\n this.changeBidirect = function (event) {\n if (event.value === 'check') {\n _this.notCheckedButton.checked = !_this.checkedButton.checked;\n }\n else {\n _this.checkedButton.checked = !_this.notCheckedButton.checked;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.insertCheckBoxField = function () {\n _this.closeCheckBoxField();\n var checkBoxField = new CheckBoxFormField();\n checkBoxField.defaultValue = _this.checkedButton.checked;\n checkBoxField.name = SanitizeHtmlHelper.sanitize(_this.bookmarkInputText.value);\n checkBoxField.helpText = SanitizeHtmlHelper.sanitize(_this.tooltipInputText.value);\n checkBoxField.checked = checkBoxField.defaultValue;\n checkBoxField.enabled = _this.checBoxEnableElement.checked;\n if (_this.exactButton.checked) {\n checkBoxField.sizeType = 'Exactly';\n checkBoxField.size = _this.exactlyNumber.value;\n }\n else {\n checkBoxField.sizeType = 'Auto';\n checkBoxField.size = 11;\n }\n _this.owner.editorModule.editFormField('CheckBox', checkBoxField);\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeCheckBoxField = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.owner = owner;\n }\n Object.defineProperty(CheckBoxFormFieldDialog.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n CheckBoxFormFieldDialog.prototype.getModuleName = function () {\n return 'CheckBoxFormFieldDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.initCheckBoxDialog = function (localValue, isRtl) {\n this.target = createElement('div');\n var dialogDiv = createElement('div');\n var headingLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Check box size')\n });\n var sizeParentDiv = createElement('div', { className: 'e-de-container-row' });\n var autoDiv = createElement('div', { className: 'e-de-ff-radio-scnd-div' });\n var exactDiv = createElement('div', { className: 'e-de-ff-radio-scnd-div' });\n var autoEle = createElement('input', { className: 'e-de-rtl-btn-div', attrs: { 'aria-label': localValue.getConstant('Auto') } });\n var exactEle = createElement('input', { className: 'e-de-rtl-btn-div', attrs: { 'aria-label': localValue.getConstant('Exactly') } });\n this.autoButton = new RadioButton({\n label: localValue.getConstant('Auto'), cssClass: 'e-small', change: this.changeBidirectional, checked: true,\n enableRtl: isRtl\n });\n this.exactButton = new RadioButton({\n label: localValue.getConstant('Exactly'), value: 'exact', cssClass: 'e-small', change: this.changeBidirectional,\n enableRtl: isRtl\n });\n this.exactNumberDiv = createElement('div', { className: 'e-de-ff-chck-exact' });\n var exactNumber = createElement('input', { attrs: { 'type': 'text', 'aria-label': localValue.getConstant('Exactly') } });\n this.exactlyNumber = new NumericTextBox({\n format: 'n', value: 10, min: 1, max: 1584, enablePersistence: false, enabled: false, cssClass: 'e-de-check-exactnumbr-width',\n enableRtl: isRtl\n });\n var defaultValueLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Default value')\n });\n var defaultcheckDiv = createElement('div', { className: 'e-de-container-row' });\n var notcheckDiv = createElement('div', { className: 'e-de-ff-radio-div' });\n var checkDiv = createElement('div', { className: 'e-de-ff-radio-div' });\n var notcheckEle = createElement('input', { className: 'e-de-rtl-btn-div', attrs: { 'aria-label': localValue.getConstant('Not checked') } });\n var checkEle = createElement('input', { className: 'e-de-rtl-btn-div', attrs: { 'aria-label': localValue.getConstant('Checked') } });\n this.notCheckedButton = new RadioButton({\n label: localValue.getConstant('Not checked'), enableRtl: isRtl, cssClass: 'e-small', change: this.changeBidirect\n });\n this.checkedButton = new RadioButton({\n label: localValue.getConstant('Checked'), value: 'check', enableRtl: isRtl, cssClass: 'e-small',\n change: this.changeBidirect, checked: true\n });\n var fieldSettingsLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Field settings')\n });\n var settingsTotalDiv = createElement('div', { className: 'e-de-container-row' });\n var totalToolTipDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var totalBookmarkDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n this.tooltipInputText = createElement('input', { className: 'e-input e-bookmark-textbox-input', attrs: { 'aira-label': localValue.getConstant('Tooltip') } });\n this.bookmarkInputText = createElement('input', { className: 'e-input e-bookmark-textbox-input', attrs: { 'aira-label': localValue.getConstant('Name') } });\n var checkBoxEnableDiv = createElement('div');\n var checBoxEnableEle = createElement('input', { attrs: { type: 'checkbox' } });\n checBoxEnableEle.setAttribute('aria-label', localValue.getConstant('Check box enabled'));\n this.checBoxEnableElement = new CheckBox({\n cssClass: 'e-de-ff-dlg-check',\n label: localValue.getConstant('Check box enabled'),\n enableRtl: isRtl\n });\n if (isRtl) {\n autoDiv.classList.add('e-de-rtl');\n exactDiv.classList.add('e-de-rtl');\n this.exactNumberDiv.classList.add('e-de-rtl');\n notcheckDiv.classList.add('e-de-rtl');\n checkDiv.classList.add('e-de-rtl');\n totalToolTipDiv.classList.add('e-de-rtl');\n totalBookmarkDiv.classList.add('e-de-rtl');\n }\n this.target.appendChild(dialogDiv);\n dialogDiv.appendChild(defaultValueLabel);\n dialogDiv.appendChild(defaultcheckDiv);\n defaultcheckDiv.appendChild(notcheckDiv);\n notcheckDiv.appendChild(notcheckEle);\n this.notCheckedButton.appendTo(notcheckEle);\n defaultcheckDiv.appendChild(checkDiv);\n checkDiv.appendChild(checkEle);\n this.checkedButton.appendTo(checkEle);\n dialogDiv.appendChild(headingLabel);\n dialogDiv.appendChild(sizeParentDiv);\n sizeParentDiv.appendChild(autoDiv);\n autoDiv.appendChild(autoEle);\n this.autoButton.appendTo(autoEle);\n sizeParentDiv.appendChild(exactDiv);\n exactDiv.appendChild(exactEle);\n this.exactButton.appendTo(exactEle);\n exactDiv.appendChild(this.exactNumberDiv);\n this.exactNumberDiv.appendChild(exactNumber);\n this.exactlyNumber.appendTo(exactNumber);\n dialogDiv.appendChild(fieldSettingsLabel);\n dialogDiv.appendChild(settingsTotalDiv);\n settingsTotalDiv.appendChild(totalToolTipDiv);\n settingsTotalDiv.appendChild(totalBookmarkDiv);\n totalToolTipDiv.appendChild(this.tooltipInputText);\n totalBookmarkDiv.appendChild(this.bookmarkInputText);\n dialogDiv.appendChild(checkBoxEnableDiv);\n checkBoxEnableDiv.appendChild(checBoxEnableEle);\n this.checBoxEnableElement.appendTo(checBoxEnableEle);\n new TextBox({ placeholder: localValue.getConstant('Tooltip'), floatLabelType: 'Always' }, this.tooltipInputText);\n new TextBox({ placeholder: localValue.getConstant('Name'), floatLabelType: 'Always' }, this.bookmarkInputText);\n };\n /**\n * @private\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.show = function () {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.target)) {\n this.initCheckBoxDialog(localObj, this.documentHelper.owner.enableRtl);\n }\n this.loadCheckBoxDialog();\n this.documentHelper.dialog.header = localObj.getConstant('Check Box Form Field');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = '400px';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.insertCheckBoxField,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.loadCheckBoxDialog = function () {\n var inline = this.owner.selectionModule.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n this.fieldBegin = inline;\n var fieldData = this.fieldBegin.formFieldData;\n if (!fieldData.defaultValue) {\n this.checkedButton.checked = false;\n this.notCheckedButton.checked = true;\n }\n else {\n this.checkedButton.checked = true;\n this.notCheckedButton.checked = false;\n }\n if (fieldData.sizeType !== 'Auto') {\n this.exactButton.checked = true;\n this.autoButton.checked = false;\n this.exactlyNumber.enabled = true;\n }\n else {\n this.autoButton.checked = true;\n this.exactButton.checked = false;\n this.exactlyNumber.enabled = false;\n }\n if (fieldData.size) {\n this.exactlyNumber.value = fieldData.size;\n }\n if (fieldData.enabled) {\n this.checBoxEnableElement.checked = true;\n }\n else {\n this.checBoxEnableElement.checked = false;\n }\n if (fieldData.name && fieldData.name !== '') {\n this.bookmarkInputText.value = fieldData.name;\n }\n else {\n this.bookmarkInputText.value = '';\n }\n if (fieldData.helpText && fieldData.helpText !== '') {\n this.tooltipInputText.value = fieldData.helpText;\n }\n else {\n this.tooltipInputText.value = '';\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n CheckBoxFormFieldDialog.prototype.destroy = function () {\n var checkBoxDialogTarget = this.target;\n if (checkBoxDialogTarget) {\n if (checkBoxDialogTarget.parentElement) {\n checkBoxDialogTarget.parentElement.removeChild(checkBoxDialogTarget);\n }\n this.target = undefined;\n }\n this.owner = undefined;\n if (this.autoButton) {\n this.autoButton.destroy();\n this.autoButton = undefined;\n }\n if (this.exactButton) {\n this.exactButton.destroy();\n this.exactButton = undefined;\n }\n if (this.notCheckedButton) {\n this.notCheckedButton.destroy();\n this.notCheckedButton = undefined;\n }\n if (this.checkedButton) {\n this.checkedButton.destroy();\n this.checkedButton = undefined;\n }\n this.bookmarkInputText = undefined;\n this.tooltipInputText = undefined;\n if (this.checBoxEnableElement) {\n this.checBoxEnableElement.destroy();\n this.checBoxEnableElement = undefined;\n }\n if (this.exactlyNumber) {\n this.exactlyNumber.destroy();\n this.exactlyNumber = undefined;\n }\n this.exactNumberDiv = undefined;\n };\n return CheckBoxFormFieldDialog;\n}());\nexport { CheckBoxFormFieldDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { FieldElementBox, TextFormField } from '../viewer/page';\nimport { NumericTextBox, TextBox } from '@syncfusion/ej2-inputs';\nimport { DropDownList, ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * Form field text dialog is used to modify the value in text form field.\n */\nvar TextFormFieldDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} owner - Specifies the document helper.\n * @private\n */\n function TextFormFieldDialog(owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.updateTextFormtas = function () {\n var defautText = SanitizeHtmlHelper.sanitize(_this.updateFormats(_this.defaultTextInput.value));\n _this.defaultTextInput.value = !isNullOrUndefined(defautText) ? defautText : '';\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.insertTextField = function () {\n var valid = true;\n if (_this.typeDropDown.value === 'Date') {\n valid = _this.isValidDateFormat();\n }\n if (valid) {\n _this.updateTextFormtas();\n if (_this.defaultTextInput.value.length > _this.maxLengthNumber.value && !isNullOrUndefined(_this.maxLengthNumber.value) &&\n _this.maxLengthNumber.value !== 0) {\n DialogUtility.alert({\n content: 'The maximum length value must be equal or greater than the length of the default text.',\n showCloseIcon: true,\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n }).enableRtl = _this.owner.enableRtl;\n }\n else {\n var type = void 0;\n if (_this.typeDropDown.value === 'Date') {\n type = 'Date';\n }\n else if (_this.typeDropDown.value === 'Number') {\n type = 'Number';\n }\n else {\n type = 'Text';\n }\n var format = SanitizeHtmlHelper.sanitize(_this.textFormatDropDown.value);\n var formField = new TextFormField();\n formField.type = type;\n formField.defaultValue = _this.defaultTextInput.value;\n formField.maxLength = _this.maxLengthNumber.value;\n formField.format = !isNullOrUndefined(format) ? format : '';\n formField.name = SanitizeHtmlHelper.sanitize(_this.bookmarkTextInput.value);\n formField.helpText = SanitizeHtmlHelper.sanitize(_this.tooltipTextInput.value);\n formField.enabled = _this.fillInEnable.checked;\n _this.owner.editorModule.editFormField('Text', formField);\n _this.closeTextField();\n }\n }\n else {\n DialogUtility.alert({\n content: 'A valid date or time is required',\n showCloseIcon: true,\n closeOnEscape: true,\n position: { X: 'center', Y: 'center' },\n animationSettings: { effect: 'Zoom' }\n }).enableRtl = _this.owner.enableRtl;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTextField = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.owner = owner;\n }\n Object.defineProperty(TextFormFieldDialog.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n TextFormFieldDialog.prototype.getModuleName = function () {\n return 'TextFormFieldDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @returns {void}\n */\n TextFormFieldDialog.prototype.initTextDialog = function (localValue, isRtl) {\n var _this = this;\n this.target = createElement('div');\n var dialogDiv = createElement('div');\n var firstDiv = createElement('div', { className: 'e-de-container-row' });\n var typeDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n this.defaultTextDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n // let typeLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Type')\n // });\n //define the array of complex data\n var typeDropDownitems = [\n { Value: 'Regular text', Name: localValue.getConstant('Regular text') },\n { Value: 'Number', Name: localValue.getConstant('Number') },\n { Value: 'Date', Name: localValue.getConstant('Date') }\n ];\n var typeDropDownList = createElement('input');\n this.typeDropDown = new DropDownList({\n dataSource: typeDropDownitems,\n popupHeight: '150px',\n value: 'Regular text',\n change: this.changeTypeDropDown.bind(this),\n floatLabelType: 'Always',\n placeholder: localValue.getConstant('Type'),\n fields: { text: 'Name', value: 'Value' },\n htmlAttributes: { 'aria-labelledby': localValue.getConstant('Type') }\n });\n // this.defaultTextLabel = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Default text')\n // });\n this.defaultTextInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var secondDiv = createElement('div', { className: 'e-de-container-row' });\n var maxLengthDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n // let maxLengthLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Maximum length')\n // });\n var maxLength = createElement('input', { attrs: { 'aria-labelledby': localValue.getConstant('Maximum length') } });\n this.maxLengthNumber = new NumericTextBox({\n format: 'n', value: 0, min: 0, max: 32767, width: '100%', enablePersistence: false,\n placeholder: localValue.getConstant('Maximum length'), floatLabelType: 'Always',\n change: function (args) {\n if (!args.value) {\n this.element.value = localValue.getConstant('Unlimited');\n }\n },\n focus: function (args) {\n if (!args.value) {\n this.element.value = localValue.getConstant('Unlimited');\n }\n },\n blur: function (args) {\n if (!args.value) {\n var proxy_1 = this;\n setTimeout(function () {\n proxy_1.element.value = localValue.getConstant('Unlimited');\n }, 0);\n }\n },\n });\n var textFromatDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n // this.textFormatLabel = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Text format')\n // });\n var textFormatList = createElement('input');\n var formatDropDownitems = [\n { Value: \"Uppercase\", Name: localValue.getConstant(\"Uppercase\") },\n { Value: \"Lowercase\", Name: localValue.getConstant(\"Lowercase\") },\n { Value: \"FirstCapital\", Name: localValue.getConstant(\"FirstCapital\") },\n { Value: \"Titlecase\", Name: localValue.getConstant(\"TitleCase\") }\n ];\n this.textFormatDropDown = new ComboBox({\n dataSource: formatDropDownitems,\n popupHeight: '150px',\n allowCustom: true,\n showClearButton: false,\n change: this.updateTextFormtas.bind(this),\n placeholder: localValue.getConstant('Text format'),\n floatLabelType: 'Always',\n fields: { text: 'Name', value: 'Value' }\n });\n this.textFormatDropDown.focus = function () {\n _this.textFormatDropDown.element.select();\n };\n var fileSettingsLabel = createElement('div', {\n className: 'e-de-ff-dlg-heading',\n innerHTML: localValue.getConstant('Field settings')\n });\n var thirdDiv = createElement('div', { className: 'e-de-container-row' });\n var toolTipTotalDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var bookmarkTotalDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n // let toolTipHeadingLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Tooltip')\n // });\n this.tooltipTextInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n // let bookmarkHeadingLabel: HTMLElement = createElement('div', {\n // className: 'e-de-ff-dlg-heading-small',\n // innerHTML: localValue.getConstant('Name')\n // });\n this.bookmarkTextInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var fillInEnableDiv = createElement('div');\n var fillInEnableEle = createElement('input', { attrs: { type: 'checkbox' } });\n fillInEnableEle.setAttribute('aria-label', localValue.getConstant('Fillin enabled'));\n this.fillInEnable = new CheckBox({\n cssClass: 'e-de-ff-dlg-check',\n label: localValue.getConstant('Fillin enabled'),\n enableRtl: isRtl\n });\n if (isRtl) {\n typeDiv.classList.add('e-de-rtl');\n maxLengthDiv.classList.add('e-de-rtl');\n toolTipTotalDiv.classList.add('e-de-rtl');\n bookmarkTotalDiv.classList.add('e-de-rtl');\n }\n this.target.appendChild(dialogDiv);\n dialogDiv.appendChild(firstDiv);\n firstDiv.appendChild(typeDiv);\n //typeDiv.appendChild(typeLabel);\n typeDiv.appendChild(typeDropDownList);\n this.typeDropDown.appendTo(typeDropDownList);\n firstDiv.appendChild(this.defaultTextDiv);\n //this.defaultTextDiv.appendChild(this.defaultTextLabel);\n this.defaultTextDiv.appendChild(this.defaultTextInput);\n dialogDiv.appendChild(secondDiv);\n secondDiv.appendChild(maxLengthDiv);\n //maxLengthDiv.appendChild(maxLengthLabel);\n maxLengthDiv.appendChild(maxLength);\n this.maxLengthNumber.appendTo(maxLength);\n secondDiv.appendChild(textFromatDiv);\n //textFromatDiv.appendChild(this.textFormatLabel);\n textFromatDiv.appendChild(textFormatList);\n this.textFormatDropDown.appendTo(textFormatList);\n dialogDiv.appendChild(fileSettingsLabel);\n dialogDiv.appendChild(thirdDiv);\n thirdDiv.appendChild(toolTipTotalDiv);\n //toolTipTotalDiv.appendChild(toolTipHeadingLabel);\n toolTipTotalDiv.appendChild(this.tooltipTextInput);\n thirdDiv.appendChild(bookmarkTotalDiv);\n //bookmarkTotalDiv.appendChild(bookmarkHeadingLabel);\n bookmarkTotalDiv.appendChild(this.bookmarkTextInput);\n dialogDiv.appendChild(fillInEnableDiv);\n fillInEnableDiv.appendChild(fillInEnableEle);\n this.fillInEnable.appendTo(fillInEnableEle);\n this.defaultTextLabel = new TextBox({ placeholder: localValue.getConstant('Default text'), floatLabelType: 'Always' }, this.defaultTextInput);\n new TextBox({ placeholder: localValue.getConstant('Tooltip'), floatLabelType: 'Always' }, this.tooltipTextInput);\n new TextBox({ placeholder: localValue.getConstant('Name'), floatLabelType: 'Always', htmlAttributes: { 'aria-labelledby': localValue.getConstant('Name') } }, this.bookmarkTextInput);\n this.defaultTextInput.setAttribute('aria-labelledby', localValue.getConstant('Default text'));\n this.tooltipTextInput.setAttribute('aria-labelledby', localValue.getConstant('Tooltip'));\n this.bookmarkTextInput.setAttribute('aria-labelledby', localValue.getConstant('Name'));\n };\n /**\n * @private\n * @returns {void}\n */\n TextFormFieldDialog.prototype.show = function () {\n this.localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n this.localObj.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.target)) {\n this.initTextDialog(this.localObj, this.documentHelper.owner.enableRtl);\n }\n this.loadTextDialog(this.localObj);\n this.documentHelper.dialog.header = this.localObj.getConstant('Text Form Field');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = '448px';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.insertTextField,\n buttonModel: { content: this.localObj.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: this.localObj.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @param {ChangeEventArgs} args - Specifies the event args.\n * @returns {void}\n */\n TextFormFieldDialog.prototype.changeTypeDropDown = function (args) {\n if (args.isInteracted) {\n this.defaultTextInput.value = '';\n this.textFormatDropDown.value = '';\n }\n if (args.value === 'Regular text') {\n this.textFormatDropDown.fields = { text: 'Name', value: 'Value' };\n this.defaultTextLabel.placeholder = this.localObj.getConstant('Default text');\n this.textFormatDropDown.placeholder = this.localObj.getConstant('Text format');\n this.textFormatDropDown.dataSource = [\n { Value: \"Uppercase\", Name: this.localObj.getConstant(\"Uppercase\") },\n { Value: \"Lowercase\", Name: this.localObj.getConstant(\"Lowercase\") },\n { Value: \"FirstCapital\", Name: this.localObj.getConstant(\"FirstCapital\") },\n { Value: \"Titlecase\", Name: this.localObj.getConstant(\"TitleCase\") }\n ];\n }\n else if (args.value === 'Number') {\n this.textFormatDropDown.fields = { text: null, value: null };\n this.defaultTextLabel.placeholder = this.localObj.getConstant('Default number');\n this.textFormatDropDown.placeholder = this.localObj.getConstant('Number format');\n this.textFormatDropDown.dataSource = ['0', '0.00', '#,##0', '#,##0.00', '$#,##0.00;($#,##0.00)', '0%'];\n }\n else if (args.value === 'Date') {\n this.textFormatDropDown.fields = { text: null, value: null };\n this.defaultTextLabel.placeholder = this.localObj.getConstant('Default date');\n this.textFormatDropDown.placeholder = this.localObj.getConstant('Date format');\n this.textFormatDropDown.dataSource = ['M/d/yyyy', 'dddd, MMMM d, yyyy', 'MMMM d, yyyy', 'M/d/yy', 'yyyy-MM-dd', 'd-MMM-yy',\n 'M.d.yyyy', 'MMM. d, yy', 'd MMMM yyyy', 'MMMM yy', 'MMM-yy', 'M/d/yyyy h:mm am/pm', 'M/d/yyyy h:mm:ss am/pm', 'h:mm am/pm', 'h:mm:ss am/pm',\n 'HH:mm', 'HH:mm:ss'];\n }\n this.defaultTextLabel.dataBind();\n this.textFormatDropDown.dataBind();\n };\n /**\n * @private\n * @returns {void}\n */\n TextFormFieldDialog.prototype.loadTextDialog = function (local) {\n var inline = this.owner.selectionModule.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n this.fieldBegin = inline;\n var data = inline.formFieldData;\n if (data.maxLength > 0) {\n this.maxLengthNumber.value = data.maxLength;\n }\n else {\n this.maxLengthNumber.value = 0;\n this.maxLengthNumber.element.value = local ? local.getConstant('Unlimited') : 'Unlimited';\n }\n if (data.type === 'Date') {\n this.typeDropDown.value = 'Date';\n }\n else if (data.type === 'Number') {\n this.typeDropDown.value = 'Number';\n }\n else {\n this.typeDropDown.value = 'Regular text';\n }\n if (data.format) {\n this.textFormatDropDown.value = data.format;\n }\n else {\n this.textFormatDropDown.value = '';\n }\n this.defaultTextInput.value = !isNullOrUndefined(data.defaultValue) ? data.defaultValue : '';\n this.fillInEnable.checked = data.enabled;\n this.tooltipTextInput.value = !isNullOrUndefined(data.helpText) ? data.helpText : '';\n this.bookmarkTextInput.value = !isNullOrUndefined(data.name) ? data.name : '';\n }\n };\n TextFormFieldDialog.prototype.updateFormats = function (value) {\n var format = isNullOrUndefined(this.textFormatDropDown.value) ? '' : this.textFormatDropDown.value.toString();\n if (this.typeDropDown.value === 'Regular text') {\n return HelperMethods.formatText(format, value);\n }\n if (this.typeDropDown.value === 'Number') {\n var data = HelperMethods.formatNumber(format, value);\n if (!(data.toString() === 'NaN')) {\n return data;\n }\n return '';\n }\n if (this.typeDropDown.value === 'Date') {\n return HelperMethods.formatDate(format, value);\n }\n return '';\n };\n /**\n * @private\n * @returns {boolean} returns is valid date format.\n */\n TextFormFieldDialog.prototype.isValidDateFormat = function () {\n var value = this.defaultTextInput.value;\n if (value !== '') {\n var date = new Date(value);\n if (isNaN(date.getDate())) {\n return false;\n }\n }\n return true;\n };\n /**\n * @private\n * @returns {void}\n */\n TextFormFieldDialog.prototype.destroy = function () {\n var textDialogTarget = this.target;\n if (textDialogTarget) {\n if (textDialogTarget.parentElement) {\n textDialogTarget.parentElement.removeChild(textDialogTarget);\n }\n this.target = undefined;\n }\n if (this.maxLengthNumber) {\n this.maxLengthNumber.destroy();\n this.maxLengthNumber = undefined;\n }\n if (this.fillInEnable) {\n this.fillInEnable.destroy();\n this.fillInEnable = undefined;\n }\n if (this.typeDropDown) {\n this.typeDropDown.destroy();\n this.typeDropDown = undefined;\n }\n if (this.textFormatDropDown) {\n this.textFormatDropDown.destroy();\n this.textFormatDropDown = undefined;\n }\n this.owner = undefined;\n this.defaultTextInput = undefined;\n this.tooltipTextInput = undefined;\n this.bookmarkTextInput = undefined;\n this.defaultTextLabel = undefined;\n this.defaultTextDiv = undefined;\n this.textFormatLabel = undefined;\n };\n return TextFormFieldDialog;\n}());\nexport { TextFormFieldDialog };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox, Button } from '@syncfusion/ej2-buttons';\nimport { FieldElementBox, DropDownFormField } from '../viewer/page';\nimport { ListView } from '@syncfusion/ej2-lists';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * Form field drop-down dialog is used to modify the value in drop-down form field.\n */\nvar DropDownFormFieldDialog = /** @class */ (function () {\n function DropDownFormFieldDialog(owner) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.addItemtoList = function () {\n _this.dropDownItems.push(SanitizeHtmlHelper.sanitize(_this.drpDownItemsInput.value));\n _this.currentSelectedItem = SanitizeHtmlHelper.sanitize(_this.drpDownItemsInput.value);\n _this.drpDownItemsInput.value = '';\n _this.enableOrDisableButton();\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.removeItemFromList = function () {\n for (var i = 0; i < _this.dropDownItems.length; i++) {\n if (_this.dropDownItems[i] === _this.currentSelectedItem) {\n _this.dropDownItems.splice(i, 1);\n }\n }\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.selectHandler = function (args) {\n _this.currentSelectedItem = args.text;\n };\n /**\n * @private\n * @returns {void}\n */\n this.moveUpItem = function () {\n var index = _this.getSelectedIndex();\n _this.moveUp(index, (index - 1));\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.moveDownItem = function () {\n var index = _this.getSelectedIndex();\n _this.moveDown(index, (index + 1));\n _this.updateList();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnTextBox = function () {\n _this.enableOrDisableButton();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n };\n /**\n * @private\n * @returns {void}\n */\n this.insertDropDownField = function () {\n var dropDownField = new DropDownFormField();\n dropDownField.dropdownItems = _this.dropDownItems;\n dropDownField.selectedIndex = 0;\n dropDownField.name = SanitizeHtmlHelper.sanitize(_this.bookmarkInput.value);\n dropDownField.helpText = SanitizeHtmlHelper.sanitize(_this.tooltipInput.value);\n dropDownField.enabled = _this.dropDownEnable.checked;\n _this.owner.editorModule.editFormField('DropDown', dropDownField);\n _this.closeDropDownField();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeDropDownField = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.dialog.element.style.pointerEvents = '';\n };\n this.owner = owner;\n }\n Object.defineProperty(DropDownFormFieldDialog.prototype, \"documentHelper\", {\n get: function () {\n return this.owner.documentHelper;\n },\n enumerable: true,\n configurable: true\n });\n DropDownFormFieldDialog.prototype.getModuleName = function () {\n return 'DropDownFormFieldDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.initTextDialog = function (localValue, isRtl) {\n this.target = createElement('div');\n var dialogDiv = createElement('div');\n var firstDiv = createElement('div', { className: 'e-de-drp-dwn-frst-div' });\n this.drpDownItemsInput = createElement('input', {\n className: 'e-input e-bookmark-textbox-input',\n id: 'fielditems_text_box'\n });\n this.drpDownItemsInput.addEventListener('keyup', this.onKeyUpOnTextBox);\n var secondDiv = createElement('div', { className: 'e-de-ff-drpdwn-dlg-scndiv' });\n var itemsDrpItemsLabel = createElement('div', {\n className: 'e-de-ff-dlg-drpdwn-heading',\n innerHTML: localValue.getConstant('Items in dropdown list')\n });\n var listviewDiv = createElement('div', {\n className: 'e-bookmark-listViewDiv e-de-ff-drpdwn-listview',\n attrs: { style: 'height:100%' }\n });\n this.listviewInstance = new ListView({\n cssClass: 'e-bookmark-listview',\n select: this.selectHandler\n });\n var buttonDiv = createElement('div');\n var addButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var addButtonEle = createElement('button', {\n innerHTML: localValue.getConstant('ADD'),\n attrs: { type: 'button', style: 'height:36px;width:100%' }\n });\n this.addButton = new Button({ cssClass: 'e-button-custom' });\n this.addButton.disabled = true;\n addButtonEle.setAttribute('aria-label', localValue.getConstant('ADD'));\n addButtonEle.addEventListener('click', this.addItemtoList.bind(this));\n var editButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n editButtonDiv.style.display = 'none';\n var editButtonEle = createElement('button', {\n innerHTML: 'EDIT',\n attrs: { type: 'button', style: 'height:36px;width:100%' }\n });\n this.editButton = new Button({ cssClass: 'e-button-custom' });\n editButtonEle.setAttribute('aria-label', 'EDIT');\n var removeButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var removeButtonEle = createElement('button', {\n innerHTML: localValue.getConstant('REMOVE'),\n attrs: { type: 'button', style: 'height:36px;width:100%' }\n });\n removeButtonEle.setAttribute('aria-label', localValue.getConstant('REMOVE'));\n this.removeButton = new Button({ cssClass: 'e-button-custom' });\n removeButtonEle.addEventListener('click', this.removeItemFromList.bind(this));\n var moveBtnDiv = createElement('div', { attrs: { style: 'display:inline-flex' } });\n var moveUpButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var moveUpButtonEle = createElement('button', {\n attrs: { type: 'button', style: 'height:36px;width:40px' },\n className: 'e-de-ff-drpdwn-mvup'\n });\n moveUpButtonEle.setAttribute('aria-label', 'moveUp');\n this.moveUpButton = new Button({ cssClass: 'e-button-custom', iconCss: 'e-de-arrow-up' });\n moveUpButtonEle.addEventListener('click', this.moveUpItem.bind(this));\n var moveDownButtonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n var moveDownButtonEle = createElement('button', {\n attrs: { type: 'button', style: 'height:36px;width:40px' },\n className: 'e-de-ff-drpdwn-mvdn'\n });\n moveDownButtonEle.setAttribute('aria-label', 'moveDown');\n this.moveDownButton = new Button({ cssClass: 'e-button-custom', iconCss: 'e-de-arrow-down' });\n moveDownButtonEle.addEventListener('click', this.moveDownItem.bind(this));\n var fileSettingsLabel = createElement('div', {\n className: 'e-de-para-dlg-heading',\n innerHTML: localValue.getConstant('Field settings')\n });\n var thirdDiv = createElement('div', { className: 'e-de-container-row' });\n var toolTipDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n var bookmarkDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n this.tooltipInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n this.bookmarkInput = createElement('input', { className: 'e-input e-bookmark-textbox-input' });\n var dropDownEnableDiv = createElement('div');\n var dropDownEnableEle = createElement('input', { attrs: { type: 'checkbox' } });\n this.dropDownEnable = new CheckBox({\n cssClass: 'e-de-ff-dlg-check',\n label: localValue.getConstant('Dropdown enabled'),\n enableRtl: isRtl\n });\n if (isRtl) {\n listviewDiv.classList.add('e-de-rtl');\n moveUpButtonEle.classList.add('e-de-rtl');\n toolTipDiv.classList.add('e-de-rtl');\n bookmarkDiv.classList.add('e-de-rtl');\n }\n dropDownEnableDiv.setAttribute('aria-label', localValue.getConstant('Dropdown enabled'));\n this.target.appendChild(dialogDiv);\n dialogDiv.appendChild(firstDiv);\n firstDiv.appendChild(this.drpDownItemsInput);\n dialogDiv.appendChild(itemsDrpItemsLabel);\n dialogDiv.appendChild(secondDiv);\n secondDiv.appendChild(listviewDiv);\n this.listviewInstance.appendTo(listviewDiv);\n secondDiv.appendChild(buttonDiv);\n buttonDiv.appendChild(addButtonDiv);\n addButtonDiv.appendChild(addButtonEle);\n this.addButton.appendTo(addButtonEle);\n buttonDiv.appendChild(editButtonDiv);\n editButtonDiv.appendChild(editButtonEle);\n this.editButton.appendTo(editButtonEle);\n buttonDiv.appendChild(removeButtonDiv);\n removeButtonDiv.appendChild(removeButtonEle);\n this.removeButton.appendTo(removeButtonEle);\n buttonDiv.appendChild(moveBtnDiv);\n moveBtnDiv.appendChild(moveUpButtonDiv);\n moveUpButtonDiv.appendChild(moveUpButtonEle);\n this.moveUpButton.appendTo(moveUpButtonEle);\n moveBtnDiv.appendChild(moveDownButtonDiv);\n moveDownButtonDiv.appendChild(moveDownButtonEle);\n this.moveDownButton.appendTo(moveDownButtonEle);\n dialogDiv.appendChild(fileSettingsLabel);\n dialogDiv.appendChild(thirdDiv);\n thirdDiv.appendChild(toolTipDiv);\n toolTipDiv.appendChild(this.tooltipInput);\n thirdDiv.appendChild(bookmarkDiv);\n bookmarkDiv.appendChild(this.bookmarkInput);\n dialogDiv.appendChild(dropDownEnableDiv);\n dropDownEnableDiv.appendChild(dropDownEnableEle);\n this.dropDownEnable.appendTo(dropDownEnableEle);\n new TextBox({ placeholder: localValue.getConstant('Tooltip'), floatLabelType: 'Always' }, this.tooltipInput);\n new TextBox({ placeholder: localValue.getConstant('Name'), floatLabelType: 'Always' }, this.bookmarkInput);\n new TextBox({ placeholder: localValue.getConstant('Dropdown items'), floatLabelType: 'Always' }, this.drpDownItemsInput);\n this.tooltipInput.setAttribute('aria-labelledby', localValue.getConstant('Tooltip'));\n this.bookmarkInput.setAttribute('aria-labelledby', localValue.getConstant('Name'));\n this.drpDownItemsInput.setAttribute('aria-labelledby', localValue.getConstant('Dropdown items'));\n };\n /**\n * @private\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.show = function () {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n if (isNullOrUndefined(this.target)) {\n this.initTextDialog(localObj, this.documentHelper.owner.enableRtl);\n }\n this.loadDropDownDialog();\n this.documentHelper.dialog.header = localObj.getConstant('Drop Down Form Field');\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = '448px';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [{\n click: this.insertDropDownField,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-table-cell-margin-okay', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-table-cell-margin-cancel' }\n }];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.loadDropDownDialog = function () {\n var inline = this.owner.selectionModule.getCurrentFormField();\n if (inline instanceof FieldElementBox) {\n this.fieldBegin = inline;\n this.dropDownInstance = inline.formFieldData;\n if (this.dropDownInstance.dropdownItems.length > 0) {\n var index = this.dropDownInstance.selectedIndex;\n this.currentSelectedItem = this.dropDownInstance.dropdownItems[index];\n }\n if (this.dropDownInstance.enabled) {\n this.dropDownEnable.checked = true;\n }\n else {\n this.dropDownEnable.disabled = false;\n }\n if (this.dropDownInstance.helpText !== '') {\n this.tooltipInput.value = this.dropDownInstance.helpText;\n }\n else {\n this.tooltipInput.value = '';\n }\n if (this.dropDownInstance.name !== '') {\n this.bookmarkInput.value = this.dropDownInstance.name;\n }\n else {\n this.bookmarkInput.value = '';\n }\n this.dropDownItems = this.dropDownInstance.dropdownItems.slice();\n this.updateList();\n }\n };\n // sets updated list to dialog & refresh the List\n DropDownFormFieldDialog.prototype.updateList = function () {\n this.listviewInstance.dataSource = this.dropDownItems.slice();\n this.listviewInstance.dataBind();\n if (this.currentSelectedItem) {\n var toSelectItem = this.currentSelectedItem;\n this.listviewInstance.selectItem(toSelectItem);\n }\n };\n DropDownFormFieldDialog.prototype.getSelectedIndex = function () {\n for (var i = 0; i < this.dropDownItems.length; i++) {\n if (this.dropDownItems[i] === this.currentSelectedItem) {\n return i;\n }\n }\n return 0;\n };\n DropDownFormFieldDialog.prototype.moveUp = function (fromIndex, toIndex) {\n var tempData = [];\n if (fromIndex === 0) {\n for (var i = 0; i < this.dropDownItems.length; i++) {\n if (i < (this.dropDownItems.length - 1)) {\n tempData[i] = this.dropDownItems[i + 1];\n }\n else {\n tempData[i] = this.dropDownItems[0];\n }\n }\n this.dropDownItems = tempData;\n }\n else {\n var temp = this.dropDownItems[fromIndex];\n this.dropDownItems[fromIndex] = this.dropDownItems[toIndex];\n this.dropDownItems[toIndex] = temp;\n }\n };\n DropDownFormFieldDialog.prototype.moveDown = function (fromIndex, toIndex) {\n var tempData = [];\n if (fromIndex === (this.dropDownItems.length - 1)) {\n for (var i = 0; i < this.dropDownItems.length; i++) {\n if (i !== 0) {\n tempData[i] = this.dropDownItems[i - 1];\n }\n else {\n tempData[i] = this.dropDownItems[(this.dropDownItems.length - 1)];\n }\n }\n this.dropDownItems = tempData;\n }\n else {\n var temp = this.dropDownItems[fromIndex];\n this.dropDownItems[fromIndex] = this.dropDownItems[toIndex];\n this.dropDownItems[toIndex] = temp;\n }\n };\n DropDownFormFieldDialog.prototype.enableOrDisableButton = function () {\n if (!isNullOrUndefined(this.addButton)) {\n this.addButton.disabled = (this.drpDownItemsInput.value === '');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n DropDownFormFieldDialog.prototype.destroy = function () {\n var dropDownDialogTarget = this.target;\n if (dropDownDialogTarget) {\n if (dropDownDialogTarget.parentElement) {\n dropDownDialogTarget.parentElement.removeChild(dropDownDialogTarget);\n }\n this.target = undefined;\n }\n this.owner = undefined;\n this.drpDownItemsInput = undefined;\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n if (this.addButton) {\n this.addButton.destroy();\n this.addButton = undefined;\n }\n if (this.editButton) {\n this.editButton.destroy();\n this.editButton = undefined;\n }\n if (this.removeButton) {\n this.removeButton.destroy();\n this.removeButton = undefined;\n }\n if (this.moveUpButton) {\n this.moveUpButton.destroy();\n this.moveUpButton = undefined;\n }\n if (this.moveDownButton) {\n this.moveDownButton.destroy();\n this.moveDownButton = undefined;\n }\n this.tooltipInput = undefined;\n this.bookmarkInput = undefined;\n if (this.dropDownEnable) {\n this.dropDownEnable.destroy();\n this.dropDownEnable = undefined;\n }\n this.dropDownInstance = undefined;\n };\n return DropDownFormFieldDialog;\n}());\nexport { DropDownFormFieldDialog };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { WSectionFormat } from '../format/section-format';\n/**\n * The notes dialog is used to insert footnote.\n */\nvar NotesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function NotesDialog(documentHelper) {\n var _this = this;\n this.list = undefined;\n /**\n * @private\n */\n this.noteNumberFormat = undefined;\n this.sectionFormat = undefined;\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.updateFocus();\n _this.unWireEventsAndBindings();\n };\n /**\n * @private\n * @returns {void}\n */\n this.loadFontDialog = function () {\n _this.documentHelper.updateFocus();\n var format;\n var section;\n if (_this.sectionFormat) {\n section = _this.sectionFormat;\n }\n else {\n section = _this.documentHelper.owner.selectionModule.sectionFormat;\n }\n if (_this.documentHelper.selection.isinFootnote) {\n var footnotesFormat = section.footNoteNumberFormat;\n var startAt = section.initialFootNoteNumber;\n format = _this.reversetype(footnotesFormat);\n _this.notesList.value = format;\n _this.startValueTextBox.value = startAt;\n }\n else {\n var endnotesFormat = section.endnoteNumberFormat;\n format = _this.reversetype(endnotesFormat);\n var startAt = section.initialEndNoteNumber;\n _this.notesList.value = format;\n _this.startValueTextBox.value = startAt;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertFootnoteClick = function () {\n var format = new WSectionFormat(undefined);\n if (!isNullOrUndefined(_this.notesList)) {\n var formats = (_this.notesList.value).toString();\n var renderFormat = _this.types(formats);\n var startValue = _this.startValueTextBox.value;\n if (!isNullOrUndefined(_this.notesList)) {\n if (_this.documentHelper.selection.isinFootnote) {\n format.footNoteNumberFormat = renderFormat;\n format.initialFootNoteNumber = startValue;\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, format);\n }\n else {\n format.endnoteNumberFormat = renderFormat;\n format.initialEndNoteNumber = startValue;\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, format);\n }\n }\n }\n _this.documentHelper.hideDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.notesList.value = undefined;\n };\n this.documentHelper = documentHelper;\n }\n NotesDialog.prototype.getModuleName = function () {\n return 'FootNotesDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specifies the locale value\n * @param {boolean} isRtl - Specifies the is rtl\n * @returns {void}\n */\n NotesDialog.prototype.notesDialog = function (localValue, isRtl) {\n var idName = this.documentHelper.owner.containerId + '_insert_Footnote';\n this.target = createElement('div', { id: idName, className: 'e-de-insert-footnote' });\n var firstDiv = createElement('div');\n var startatValue = createElement('div');\n this.footCount = createElement('input', {\n attrs: { type: 'text' }, id: this.documentHelper.owner.containerId + 'row'\n });\n startatValue.appendChild(this.footCount);\n var numberFormatDiv = createElement('div', { className: 'e-de-container-row' });\n var formatType = createElement('select', {\n id: this.target.id + '_papersize', styles: 'padding-bottom: 20px;',\n innerHTML: ''\n });\n numberFormatDiv.appendChild(formatType);\n this.notesList = new DropDownList({\n enableRtl: isRtl, placeholder: localValue.getConstant('Start at'),\n floatLabelType: 'Always',\n htmlAttributes: { 'aria-labelledby': localValue.getConstant('Start at') }\n });\n this.notesList.appendTo(formatType);\n firstDiv.appendChild(numberFormatDiv);\n firstDiv.appendChild(startatValue);\n this.target.appendChild(firstDiv);\n this.startValueTextBox = new NumericTextBox({\n format: '#',\n min: 1,\n max: 99999,\n enablePersistence: false,\n placeholder: localValue.getConstant('Number format'),\n floatLabelType: 'Always'\n });\n this.startValueTextBox.appendTo(this.footCount);\n this.footCount.setAttribute('aria-labelledby', localValue.getConstant('Number format'));\n };\n /**\n * @private\n * @returns {void}\n */\n NotesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.notesDialog(localValue);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n //let footType: any = this.documentHelper.selection.startInternal.currentWidget.paragraph.containerWidget;\n if (this.documentHelper.selection.isinFootnote) {\n this.documentHelper.dialog.header = localValue.getConstant('Footnote');\n }\n else {\n this.documentHelper.dialog.header = localValue.getConstant('Endnote');\n }\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.loadFontDialog;\n this.documentHelper.dialog.buttons = [{\n click: this.onInsertFootnoteClick,\n buttonModel: { content: localValue.getConstant('Apply'), cssClass: 'e-flat e-table-ok', isPrimary: true }\n },\n {\n click: this.onCancelButtonClick,\n buttonModel: { content: localValue.getConstant('Cancel'), cssClass: 'e-flat e-table-cancel' }\n }];\n this.startValueTextBox.value = 1;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n if (this.documentHelper.selection.isinEndnote) {\n var alignValue = this.endnoteListValue(this.list);\n this.notesList.index = alignValue;\n }\n };\n NotesDialog.prototype.types = function (type) {\n switch (type) {\n case '1, 2, 3, ...':\n return 'Arabic';\n case 'A, B, C, ...':\n return 'UpperCaseLetter';\n case 'a, b, c, ...':\n return 'LowerCaseLetter';\n case 'I, II, III, ...':\n return 'LowerCaseRoman';\n case 'i, ii, iii, ...':\n return 'UpperCaseRoman';\n default:\n return 'Arabic';\n }\n };\n NotesDialog.prototype.reversetype = function (type) {\n switch (type) {\n case 'Arabic':\n return '1, 2, 3, ...';\n case 'UpperCaseLetter':\n return 'A, B, C, ...';\n case 'LowerCaseLetter':\n return 'a, b, c, ...';\n case 'UpperCaseRoman':\n return 'I, II, III, ...';\n case 'LowerCaseRoman':\n return 'i, ii, iii, ...';\n default:\n return '1, 2, 3, ...';\n }\n };\n // eslint-disable-next-line\n NotesDialog.prototype.endnoteListValue = function (listFocus) {\n var value;\n if (listFocus === 'A, B, C, ...') {\n value = 0;\n }\n else if (listFocus === '1, 2, 3, ...') {\n value = 1;\n }\n else if (listFocus === 'a, b, c, ...') {\n value = 2;\n }\n else {\n value = 3;\n }\n // else {\n // value = 4;\n // }\n return value;\n };\n /**\n * @private\n * @returns {void}\n */\n NotesDialog.prototype.destroy = function () {\n if (this.footCount) {\n if (this.footCount.parentElement) {\n this.footCount.parentElement.removeChild(this.footCount);\n }\n this.footCount = undefined;\n }\n if (this.startValueTextBox) {\n this.startValueTextBox.destroy();\n this.startValueTextBox = undefined;\n }\n if (this.notesList) {\n this.notesList.destroy();\n this.notesList = undefined;\n }\n this.footCount = undefined;\n this.documentHelper = undefined;\n };\n return NotesDialog;\n}());\nexport { NotesDialog };\n","import { isNullOrUndefined, createElement } from '@syncfusion/ej2-base';\n/**\n * Class which performs optimized text measuring logic to find font height.\n */\nvar Optimized = /** @class */ (function () {\n /**\n * Constructor to initialize Optimized module.\n *\n * @param {DocumentHelper} documentHelper - the document helper object.\n */\n function Optimized(documentHelper) {\n this.documentHelper = documentHelper;\n this.optimizedHeightCollection = {};\n }\n Optimized.prototype.getModuleName = function () {\n return 'Optimized';\n };\n /**\n * Construct key based on the character format.\n *\n * @param {WCharacterFormat} characterFormat - the character format to construct key.\n * @returns {string} - the constructed key.\n */\n Optimized.prototype.getkeyFromCharFormat = function (characterFormat) {\n var formatText = characterFormat.fontFamily.toLocaleLowerCase();\n if (characterFormat.bold) {\n formatText += ';' + 'bold';\n }\n if (characterFormat.italic) {\n formatText += ';' + 'italic';\n }\n return formatText;\n };\n /**\n * Method to retrieve font information with optimized text measuring logic.\n *\n * @param {WCharacterFormat} characterFormat -character format to apply.\n * @returns {string} - returns font size information.\n */\n Optimized.prototype.getFontInfo = function (characterFormat) {\n var iframe = createElement('iframe');\n document.body.appendChild(iframe);\n var innerHtml = ''\n + ''\n + ''\n + ''\n + '';\n if (!isNullOrUndefined(iframe.contentDocument)) {\n iframe.contentDocument.open();\n iframe.contentDocument.write(innerHtml);\n iframe.contentDocument.close();\n }\n var container = document.createElement('div');\n container.setAttribute('style', 'position:absolute;top:-1000px;left:-1000px;opacity:0;font-size:0px;line-height:normal;');\n // constant tested height value for calculating height factor which matches 90% accuracy with GDI+ value.\n var maxFontHeight = 288;\n var factor = 1.0 / window.devicePixelRatio;\n container.style.transform = 'scale(' + factor.toString() + ',' + factor.toString() + ')';\n /* eslint-disable-next-line max-len */\n container.innerHTML = 'mm';\n iframe.contentDocument.body.appendChild(container);\n /* eslint-disable-next-line max-len */\n var baseLineFactor = container.firstChild.offsetTop / container.lastChild.offsetHeight;\n var heightFactor = parseFloat((container.lastChild.offsetHeight / maxFontHeight).toFixed(2));\n document.body.removeChild(iframe);\n return { HeightFactor: heightFactor, BaselineFactor: baseLineFactor };\n };\n /**\n * @private\n * @param {WCharacterFormat} characterFormat - character format to apply.\n * @returns {TextSizeInfo} returns text size information.\n */\n Optimized.prototype.getHeightInternal = function (characterFormat) {\n var key = this.getkeyFromCharFormat(characterFormat);\n //With optimized technique, height and baseline factor will be same for each font-family, hence we maintaining cache for the factors and updating height based on font size.\n if (isNullOrUndefined(this.optimizedHeightCollection[\"\" + key])) {\n var fontInfo = this.getFontInfo(characterFormat);\n this.optimizedHeightCollection[\"\" + key] = fontInfo;\n var fontHeight = fontInfo.HeightFactor * characterFormat.fontSize;\n return { Height: fontHeight, BaselineOffset: fontInfo.BaselineFactor * fontHeight };\n }\n else {\n var fontSizeInfo = this.optimizedHeightCollection[\"\" + key];\n var fontHeight = fontSizeInfo.HeightFactor * characterFormat.fontSize;\n return { Height: fontHeight, BaselineOffset: fontSizeInfo.BaselineFactor * fontHeight };\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Optimized.prototype.destroy = function () {\n this.documentHelper = undefined;\n this.optimizedHeightCollection = undefined;\n };\n return Optimized;\n}());\nexport { Optimized };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Class which performs regular text measuring logic to find font height.\n */\nvar Regular = /** @class */ (function () {\n /**\n * Constructor to initialize Regular module.\n *\n * @param {DocumentHelper} documentHelper - the document helper object\n */\n function Regular(documentHelper) {\n this.documentHelper = documentHelper;\n }\n /**\n * Gets module name.\n *\n * @returns {string} - the module name.\n */\n Regular.prototype.getModuleName = function () {\n return 'Regular';\n };\n /**\n * @private\n * @param {WCharacterFormat} characterFormat - character format to apply.\n * @param {string} fontToRender - font to render.\n * @returns {TextSizeInfo} returns text size information.\n */\n Regular.prototype.getHeightInternal = function (characterFormat, fontToRender) {\n var textHeight = 0;\n var baselineOffset = 0;\n var spanElement = document.createElement('span');\n spanElement.innerText = 'm';\n var iframe = createElement('iframe');\n document.body.appendChild(iframe);\n var innerHtml = ''\n + ''\n + ''\n + ''\n + '';\n if (!isNullOrUndefined(iframe.contentDocument)) {\n iframe.contentDocument.open();\n iframe.contentDocument.write(innerHtml);\n iframe.contentDocument.close();\n }\n this.applyStyle(spanElement, characterFormat, fontToRender);\n var parentDiv = document.createElement('div');\n parentDiv.setAttribute('style', 'display:inline-block;position:absolute;');\n var tempDiv = document.createElement('div');\n tempDiv.setAttribute('style', 'display:inline-block;width: 1px; height: 0px;vertical-align: baseline;');\n parentDiv.appendChild(spanElement);\n parentDiv.appendChild(tempDiv);\n iframe.contentDocument.body.appendChild(parentDiv);\n textHeight = spanElement.offsetHeight;\n var textTopVal = spanElement.offsetTop;\n var tempDivTopVal = tempDiv.offsetTop;\n baselineOffset = tempDivTopVal - textTopVal;\n document.body.removeChild(iframe);\n return { 'Height': textHeight, 'BaselineOffset': baselineOffset };\n };\n Regular.prototype.applyStyle = function (spanElement, characterFormat, fontToRender) {\n if (!isNullOrUndefined(spanElement) && !isNullOrUndefined(characterFormat)) {\n var style = 'white-space:nowrap;';\n if (!isNullOrUndefined(fontToRender) && fontToRender !== '') {\n style += 'font-family:' + fontToRender + ';';\n }\n else {\n style += 'font-family:' + characterFormat.fontFamily + ';';\n }\n var fontSize = characterFormat.fontSize;\n if (fontSize <= 0.5) {\n fontSize = 0.5;\n }\n style += 'font-size:' + fontSize.toString() + 'pt;';\n if (characterFormat.bold) {\n style += 'font-weight:bold;';\n }\n if (characterFormat.italic) {\n style += 'font-style:italic;';\n }\n spanElement.setAttribute('style', style);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n Regular.prototype.destroy = function () {\n this.documentHelper = undefined;\n };\n return Regular;\n}());\nexport { Regular };\n","import { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { WSectionFormat, WColumnFormat, HelperMethods } from '../index';\nimport { SectionBreakType } from '../../base/types';\n/**\n * @private\n */\nvar Column = /** @class */ (function () {\n function Column() {\n }\n return Column;\n}());\nvar ColumnsDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper\n * @private\n */\n function ColumnsDialog(documentHelper) {\n var _this = this;\n this.lineCheckbox = undefined;\n this.equalCheckbox = undefined;\n this.checkBox = function (args) {\n for (var i = 0; i < _this.columns.length; i++) {\n var col = _this.columns[parseInt(i.toString(), 10)];\n if (_this.equalCheckbox.checked === true) {\n if (i !== 0) {\n col.width.enabled = false;\n col.space.enabled = false;\n }\n }\n else {\n col.width.enabled = true;\n col.space.enabled = true;\n }\n }\n };\n this.createTextBox = function (args) {\n if (_this.columnValueTexBox.value === 1) {\n _this.oneDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.twoDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.threeDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.leftDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.rightDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else if (_this.columnValueTexBox.value === 2) {\n _this.oneDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.twoDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.threeDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.leftDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.rightDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n else if (_this.columnValueTexBox.value === 3) {\n _this.oneDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.twoDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.threeDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.leftDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.rightDiv.classList.remove('e-de-table-border-inside-setting-click');\n }\n _this.numberOfColumns = args.value;\n if (args.value >= 1) {\n _this.equalCheckbox.disabled = false;\n _this.lineCheckbox.disabled = false;\n var i = args.previousValue;\n while (i < _this.numberOfColumns) {\n _this.createColumn(i + 1);\n i++;\n }\n while (i > _this.numberOfColumns) {\n _this.columnTable.deleteRow(_this.columnTable.rows.length - 1);\n _this.columns.splice(_this.columns.length - 1, _this.columns.length);\n if (_this.numberOfColumns === 1) {\n _this.equalCheckbox.disabled = true;\n _this.columns[0].space.enabled = false;\n }\n i--;\n }\n _this.canUpdateColumnWidthAndSpacing(args.value, undefined, undefined, undefined);\n }\n };\n this.widthChange = function (args) {\n if (args.isInteracted === true) {\n var val = (args.event.target).parentElement.classList;\n val.replace(val.item(4), 'Width');\n _this.checkAndApplyColumnFormatWidth(args.value);\n }\n };\n this.spaceChange = function (args) {\n if (args.isInteracted === true) {\n var val = (args.event.target).parentElement.classList;\n val.replace(val.item(4), 'Space');\n _this.checkAndApplyColumnFormatSpace(args.value);\n }\n };\n this.checkAndApplyColumnFormatWidth = function (columnWidth) {\n if (_this.numberOfColumns === 1) {\n if (columnWidth > _this.pageWidth) {\n _this.columns[0].width.value = columnWidth - 1;\n }\n else {\n _this.columns[0].width.value = columnWidth + 1;\n }\n }\n else {\n if (_this.equalCheckbox.checked === true) {\n for (var i = 0; i < _this.columns.length; i++) {\n var col = _this.columns[parseInt(i.toString(), 10)];\n if (columnWidth >= 36 && _this.columns[0].space.value >= 0) {\n var spaceCal = (_this.pageWidth - (_this.numberOfColumns * columnWidth)) / (_this.numberOfColumns - 1);\n col.width.value = columnWidth;\n if (i < _this.columns.length - 1) {\n col.space.value = spaceCal;\n }\n }\n else {\n _this.columns[0].width.value = _this.columns[1].width.value;\n }\n }\n }\n if (_this.equalCheckbox.checked === false) {\n for (var i = 0; i < _this.columns.length; i++) {\n var col = _this.columns[parseInt(i.toString(), 10)];\n var updatedNumber = void 0;\n if (columnWidth === _this.columns[parseInt(i.toString(), 10)].width.value) {\n updatedNumber = i;\n if (updatedNumber + 1 !== _this.columns.length) {\n if (columnWidth > _this.columns[0].width.value\n || columnWidth > _this.columns[_this.columns.length - 1].width.value) {\n for (var y = updatedNumber + 1; y <= _this.columns.length; y++) {\n var col_1 = _this.columns[parseInt(y.toString(), 10)];\n //1\n if (y < _this.columns.length) {\n if (col_1.width.value > 36) {\n col_1.width.value = col_1.width.value - 1;\n }\n }\n //2\n if (_this.columns[0].space.value === 0) {\n for (var k = updatedNumber - 1; k >= 0; k--) {\n var col_2 = _this.columns[parseInt(k.toString(), 10)];\n if (col_2.width.value > 36) {\n col_2.width.value = col_2.width.value - 1;\n }\n }\n }\n //3\n if ((y >= _this.columns.length && _this.columns[0].width.value === 36)\n || (_this.columns[y - 1].width.value === 36 && _this.columns[0].space.value !== 0)) {\n for (var j = 0; j < _this.columns.length - 1; j++) {\n var col_3 = _this.columns[parseInt(j.toString(), 10)];\n if (col_3.space.value > 0) {\n if (j < _this.columns.length - 1) {\n col_3.space.value = col_3.space.value - 1;\n }\n }\n }\n }\n //4\n if (_this.columns[0].width.value === 36 && _this.columns[0].space.value === 0\n || _this.columns[y - 1].width.value === 36 && _this.columns[0].space.value === 0) {\n for (var j = 0; j < _this.columns.length; j++) {\n var col_4 = _this.columns[parseInt(j.toString(), 10)];\n if (col_4.width.value !== 36 && columnWidth\n > (_this.pageWidth - ((_this.numberOfColumns - 1) * 36))) {\n col_4.width.value = columnWidth - 1;\n }\n }\n }\n }\n }\n else {\n for (var y = updatedNumber + 1; y < _this.columns.length; y++) {\n var col_5 = _this.columns[parseInt(y.toString(), 10)];\n if (col_5.width.value > 36) {\n col_5.width.value = col_5.width.value + 1;\n }\n }\n }\n }\n else {\n if (columnWidth > _this.columns[0].width.value\n || columnWidth > _this.columns[_this.columns.length - 1].width.value) {\n for (var y = updatedNumber + 1; y <= _this.columns.length; y++) {\n //2\n if (_this.columns[0].space.value === 0) {\n for (var k = updatedNumber - 1; k >= 0; k--) {\n var col_6 = _this.columns[parseInt(k.toString(), 10)];\n if (col_6.width.value > 36) {\n col_6.width.value = col_6.width.value - 1;\n }\n }\n }\n //3\n if ((y <= _this.columns.length && _this.columns[0].space.value !== 0)) {\n for (var j = 0; j < _this.columns.length - 1; j++) {\n var col_7 = _this.columns[parseInt(j.toString(), 10)];\n if (col_7.space.value > 0) {\n if (j < _this.columns.length - 1) {\n col_7.space.value = col_7.space.value - 1;\n }\n }\n }\n }\n //4\n if (_this.columns[0].width.value === 36 && _this.columns[0].space.value === 0) {\n for (var j = 0; j < _this.columns.length; j++) {\n var col_8 = _this.columns[parseInt(j.toString(), 10)];\n if (col_8.width.value !== 36 && columnWidth\n > (_this.pageWidth - ((_this.numberOfColumns - 1) * 36))) {\n col_8.width.value = columnWidth - 1;\n }\n }\n }\n }\n }\n else {\n for (var y = updatedNumber + 1; y < _this.columns.length; y++) {\n var col_9 = _this.columns[parseInt(y.toString(), 10)];\n if (col_9.width.value > 36) {\n col_9.width.value = col_9.width.value + 1;\n }\n }\n }\n }\n }\n }\n }\n }\n };\n this.checkAndApplyColumnFormatSpace = function (columnSpace) {\n if (_this.equalCheckbox.checked === true) {\n for (var i = 0; i < _this.columns.length; i++) {\n var col = _this.columns[parseInt(i.toString(), 10)];\n if (columnSpace >= 0 && _this.columns[0].width.value >= 36) {\n var widthCal = (_this.pageWidth - (columnSpace * (_this.numberOfColumns - 1))) / (_this.numberOfColumns);\n col.width.value = widthCal;\n if (i < _this.columns.length - 1) {\n col.space.value = columnSpace;\n }\n }\n else {\n _this.columns[0].space.value = _this.columns[1].space.value;\n }\n }\n }\n if (_this.equalCheckbox.checked === false) {\n for (var i = 0; i < _this.columns.length; i++) {\n var col = _this.columns[parseInt(i.toString(), 10)];\n var updatedNumber = void 0;\n if (columnSpace === _this.columns[parseInt(i.toString(), 10)].space.value) {\n updatedNumber = i;\n if (updatedNumber + 1 !== _this.columns.length) {\n _this.columns[_this.columns.length - 1].space.value = 0;\n if (columnSpace > _this.columns[0].space.value || columnSpace > _this.columns[_this.columns.length - 2].space.value) {\n //1\n for (var y = updatedNumber + 1; y <= _this.columns.length; y++) {\n var col_10 = _this.columns[parseInt(y.toString(), 10)];\n if (y < _this.columns.length) {\n if (col_10.width.value > 36) {\n col_10.width.value = col_10.width.value - 1;\n }\n }\n //2\n if ((_this.columns[updatedNumber + 1].width.value === 36\n && _this.columns[parseInt(updatedNumber.toString(), 10)].width.value > 36)) {\n for (var j = updatedNumber; j >= 0; j--) {\n var col_11 = _this.columns[parseInt(j.toString(), 10)];\n if (col_11.width.value > 36) {\n col_11.width.value = col_11.width.value - 1;\n }\n }\n }\n //3\n if (_this.columns[parseInt(updatedNumber.toString(), 10)].width.value === 36) {\n if (_this.columns[0].space.value !== 0 || _this.columns[updatedNumber + 1].space.value !== 0) {\n for (var k = 0; k < _this.columns.length - 1; k++) {\n var col_12 = _this.columns[parseInt(k.toString(), 10)];\n if (col_12.space.value > 0) {\n if (k < _this.columns.length - 1) {\n col_12.space.value = col_12.space.value - 1;\n _this.columns[parseInt(updatedNumber.toString(), 10)].space.value = columnSpace;\n }\n }\n }\n }\n }\n //4\n if (_this.columns[0].width.value === 36 && (_this.columns[0].space.value === 0\n || _this.columns[updatedNumber + 1].space.value === 0)) {\n for (var j = 0; j < _this.columns.length; j++) {\n var col_13 = _this.columns[parseInt(j.toString(), 10)];\n if (col_13.space.value !== 0 && columnSpace > (_this.pageWidth - ((_this.numberOfColumns) * 36))) {\n col_13.space.value = columnSpace - 1;\n }\n }\n }\n }\n }\n else {\n for (var y = updatedNumber + 1; y < _this.columns.length; y++) {\n var col_14 = _this.columns[parseInt(y.toString(), 10)];\n if (col_14.width.value > 36) {\n col_14.width.value = col_14.width.value + 0.5;\n }\n }\n }\n }\n else {\n _this.columns[parseInt(updatedNumber.toString(), 10)].space.value = 0;\n }\n }\n }\n }\n };\n this.canUpdateColumnWidthAndSpacing = function (numberOfColumns, colIndex, colWidth, colSpace) {\n var spaceValue = 36;\n var valueWidthEqualFirst = (_this.pageWidth - 36 * (numberOfColumns - 1)) / numberOfColumns;\n var valueWidthEqualsecond = (_this.pageWidth - 36 * (numberOfColumns)) / (numberOfColumns - 1);\n if (numberOfColumns === 2) {\n _this.equalCheckbox.checked = true;\n }\n if (_this.equalCheckbox.checked === true) {\n if (numberOfColumns > 1) {\n var col = _this.columns[numberOfColumns - 1];\n col.index.value = numberOfColumns;\n for (var i = 0; i < numberOfColumns; i++) {\n var col_15 = _this.columns[parseInt(i.toString(), 10)];\n if (numberOfColumns <= 6) {\n col_15.width.value = valueWidthEqualFirst;\n }\n else {\n col_15.width.value = spaceValue;\n }\n col_15.width.value = valueWidthEqualFirst;\n if (i < numberOfColumns - 1) {\n if (numberOfColumns <= 6) {\n col_15.space.value = spaceValue;\n }\n else {\n col_15.space.value = valueWidthEqualsecond;\n }\n }\n col_15.width.enabled = false;\n col_15.space.enabled = false;\n }\n }\n else {\n _this.columns[0].width.value = _this.pageWidth;\n }\n _this.columns[0].width.enabled = true;\n if (numberOfColumns > 1) {\n _this.columns[0].space.enabled = true;\n }\n else {\n _this.columns[0].space.enabled = false;\n }\n }\n if (_this.equalCheckbox.checked === false) {\n if (numberOfColumns > 2) {\n var col = _this.columns[numberOfColumns - 1];\n col.index.value = numberOfColumns;\n for (var i = 0; i < numberOfColumns; i++) {\n var col_16 = _this.columns[parseInt(i.toString(), 10)];\n col_16.width.value = valueWidthEqualFirst;\n if (i < numberOfColumns - 1) {\n if (col_16.width.value <= 36) {\n col_16.space.value = valueWidthEqualsecond;\n }\n else {\n col_16.space.value = spaceValue;\n }\n }\n col_16.width.enabled = true;\n col_16.space.enabled = true;\n }\n }\n else {\n _this.columns[0].width.value = _this.pageWidth;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n _this.closeColumnsDialog();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeColumnsDialog = function () {\n _this.documentHelper.dialog2.element.style.pointerEvents = '';\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.unWireEventsAndBindings = function () {\n _this.equalCheckbox.checked = true;\n _this.lineCheckbox.checked = false;\n _this.equalCheckbox.disabled = true;\n var cols = [];\n for (var i = 0; i < _this.columns.length; i++) {\n _this.columns.splice(1, _this.columns.length - 1);\n _this.columns[0].space.enabled = false;\n }\n while (_this.columnTable.rows.length > 1) {\n _this.columnTable.deleteRow(_this.columnTable.rows.length - 1);\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.openColumnsDialog = function () {\n var sectionFormat = _this.documentHelper.selection.sectionFormat;\n var pageWidthBox = sectionFormat.pageWidth - sectionFormat.leftMargin - sectionFormat.rightMargin;\n _this.columnValueTexBox.max = pageWidthBox / 36;\n _this.columns[0].width.value = pageWidthBox;\n _this.documentHelper.updateFocus();\n _this.equalCheckbox.checked = sectionFormat.equalWidth;\n _this.lineCheckbox.checked = sectionFormat.lineBetweenColumns;\n _this.columnValueTexBox.value = sectionFormat.columns.length === 0 ? 1 : sectionFormat.columns.length;\n switch (_this.columnValueTexBox.value) {\n case 1:\n _this.oneDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.twoDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.threeDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.leftDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.rightDiv.classList.remove('e-de-table-border-inside-setting-click');\n break;\n case 2:\n _this.twoDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.oneDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.threeDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.leftDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.rightDiv.classList.remove('e-de-table-border-inside-setting-click');\n break;\n case 3:\n _this.threeDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.twoDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.oneDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.leftDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.rightDiv.classList.remove('e-de-table-border-inside-setting-click');\n break;\n }\n if (_this.columnValueTexBox.value !== 1) {\n _this.columns[0].space.value = sectionFormat.columns[0].space;\n _this.columns[0].width.value = sectionFormat.columns[0].width;\n }\n if (_this.columnValueTexBox.value === 1) {\n _this.columns[0].space.value = 0;\n }\n /* eslint-disable */\n for (var i = 1; i < _this.columnValueTexBox.value; i++) {\n _this.createColumn(i + 1, sectionFormat.columns[i].width, sectionFormat.columns[i].space);\n }\n /* eslint-enable */\n };\n /**\n * @private\n * @param {Event} event - Specifies the event args.\n * @returns {void}\n */\n this.handleSettingCheckBoxAction = function (event) {\n var targetId = event.target.id;\n var columnDialogId = _this.target.id;\n if (targetId === columnDialogId + '_One_Div' || targetId === columnDialogId + '_One_Div_Container') {\n _this.oneDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('one');\n }\n else if (targetId === columnDialogId + '_Two_Div' || targetId === columnDialogId + '_Two_Div_Container') {\n _this.twoDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('two');\n }\n else if (targetId === columnDialogId + '_Three_Div' || targetId === columnDialogId + '_Three_Div_Container') {\n _this.threeDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('three');\n }\n else if (targetId === columnDialogId + '_Left_Div' || targetId === columnDialogId + '_Left_Div_Container') {\n _this.oneDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.threeDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.rightDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('two', 'left');\n }\n else if (targetId === columnDialogId + '_Right_Div' || targetId === columnDialogId + '_Right_Div_Container') {\n _this.oneDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.threeDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.leftDiv.classList.remove('e-de-table-border-inside-setting-click');\n _this.setSettingPreviewDivElement('two', 'right');\n }\n };\n /**\n * @private\n * @returns {void}\n */\n this.applyColumnDialog = function () {\n if (!_this.documentHelper.selection.isEmpty) {\n if (_this.documentHelper.owner.editorHistory) {\n _this.documentHelper.owner.editor.initComplexHistory('InsertSectionBreak');\n }\n var startParagraphInfo = _this.documentHelper.selection.getParagraphInfo(_this.documentHelper.selection.start);\n var endParagraphInfo = _this.documentHelper.selection.getParagraphInfo(_this.documentHelper.selection.end);\n var startIndex = _this.documentHelper.selection.getHierarchicalIndex(startParagraphInfo.paragraph, startParagraphInfo.offset.toString());\n var endIndex = _this.documentHelper.selection.getHierarchicalIndex(endParagraphInfo.paragraph, endParagraphInfo.offset.toString());\n _this.documentHelper.selection.select(endIndex, endIndex);\n _this.documentHelper.owner.editorModule.insertSectionBreak(SectionBreakType.Continuous);\n _this.documentHelper.selection.select(startIndex, startIndex);\n _this.documentHelper.owner.editorModule.insertSectionBreak(SectionBreakType.Continuous);\n }\n var sectionFormat = new WSectionFormat();\n var currentSectionFormat = _this.documentHelper.selection.sectionFormat;\n sectionFormat.bottomMargin = currentSectionFormat.bottomMargin;\n sectionFormat.topMargin = currentSectionFormat.topMargin;\n sectionFormat.leftMargin = currentSectionFormat.leftMargin;\n sectionFormat.rightMargin = currentSectionFormat.rightMargin;\n sectionFormat.pageWidth = currentSectionFormat.pageWidth;\n sectionFormat.pageHeight = currentSectionFormat.pageHeight;\n sectionFormat.differentOddAndEvenPages = currentSectionFormat.differentOddAndEvenPages;\n sectionFormat.differentFirstPage = currentSectionFormat.differentFirstPage;\n sectionFormat.headerDistance = currentSectionFormat.headerDistance;\n sectionFormat.footerDistance = currentSectionFormat.footerDistance;\n sectionFormat.numberOfColumns = _this.numberOfColumns;\n sectionFormat.equalWidth = _this.equalCheckbox.checked;\n sectionFormat.lineBetweenColumns = _this.lineCheckbox.checked;\n var cols = [];\n for (var i = 0; i < _this.columns.length; i++) {\n var colFormat = new WColumnFormat();\n colFormat.width = HelperMethods.convertPointToPixel(_this.columns[parseInt(i.toString(), 10)].width.value);\n colFormat.space = HelperMethods.convertPointToPixel(_this.columns[parseInt(i.toString(), 10)].space.value);\n cols.push(colFormat);\n }\n sectionFormat.columns = cols;\n sectionFormat.breakCode = currentSectionFormat.breakCode;\n _this.documentHelper.owner.editorModule.onApplySectionFormat(undefined, sectionFormat);\n if (_this.documentHelper.owner.editorHistory) {\n _this.documentHelper.owner.editorHistory.updateComplexHistory();\n }\n _this.documentHelper.hideDialog();\n };\n this.documentHelper = documentHelper;\n }\n ColumnsDialog.prototype.getModuleName = function () {\n return 'ColumnsDialog';\n };\n /**\n * @private\n * @param {L10n} localeValue - Specifies the locale.\n * @param {boolean} isRtl - Specifies is rtl.\n * @returns {void}\n */\n ColumnsDialog.prototype.initColumnsDialog = function (localeValue, isRtl) {\n this.columns = [];\n this.target = createElement('div', {\n id: this.documentHelper.owner.containerId + '_Columns',\n className: 'e-de-table-border-shading-dlg'\n });\n var displayText = createElement('div', {\n innerHTML: localeValue.getConstant('Presets'),\n className: 'e-de-para-dlg-heading'\n });\n var PresetsContainer = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var oneDivContainer = createElement('div', {\n id: this.target.id + '_One_Div_Container', className: 'e-de-preset-container'\n });\n this.oneDiv = createElement('div', {\n id: this.target.id + '_One_Div',\n className: 'e-icons e-de-ctnr-columns-one e-de-columns-presets-genral'\n });\n var oneDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('One'), className: 'e-de-column-label',\n id: this.target.id + '_One_Div_Label'\n });\n var twoDivContainer = createElement('div', {\n id: this.target.id + '_Two_Div_Container', className: 'e-de-preset-container'\n });\n this.twoDiv = createElement('div', {\n id: this.target.id + '_Two_Div',\n className: 'e-icons e-de-ctnr-columns-two e-de-columns-presets-genral'\n });\n var twoDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Two'), className: 'e-de-column-label',\n id: this.target.id + '_Two_Div_Label'\n });\n var threeDivContainer = createElement('div', {\n id: this.target.id + '_Three_Div_Container', className: 'e-de-preset-container'\n });\n this.threeDiv = createElement('div', {\n id: this.target.id + '_Three_Div',\n className: 'e-icons e-de-ctnr-columns-three e-de-columns-presets-genral'\n });\n var threeDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Three'), className: 'e-de-column-label',\n id: this.target.id + '_Three_Div_Label'\n });\n var leftDivContainer = createElement('div', {\n id: this.target.id + '_Left_Div_Container', className: 'e-de-preset-container'\n });\n this.leftDiv = createElement('div', {\n id: this.target.id + '_Left_Div',\n className: 'e-icons e-de-ctnr-columns-left e-de-columns-presets-genral'\n });\n var leftDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Left'), className: 'e-de-column-label',\n id: this.target.id + '_Left_Div_Label'\n });\n var rightDivContainer = createElement('div', {\n id: this.target.id + '_Right_Div_Container', className: 'e-de-preset-container'\n });\n this.rightDiv = createElement('div', {\n id: this.target.id + '_Right_Div',\n className: 'e-icons e-de-ctnr-columns-right e-de-columns-presets-genral'\n });\n var rightDivLabel = createElement('label', {\n innerHTML: localeValue.getConstant('Right'), className: 'e-de-column-label',\n id: this.target.id + '_Right_Div_Label'\n });\n var nuberOfColumnsContainer = createElement('div', {\n className: 'e-de-container-row e-de-columns-padding-alignment'\n });\n var subcontainer = createElement('div', {\n className: 'e-de-subcontainer-left'\n });\n oneDivContainer.setAttribute('aria-label', localeValue.getConstant('One'));\n twoDivContainer.setAttribute('aria-label', localeValue.getConstant('Two'));\n threeDivContainer.setAttribute('aria-label', localeValue.getConstant('Three'));\n leftDivContainer.setAttribute('aria-label', localeValue.getConstant('Left'));\n rightDivContainer.setAttribute('aria-label', localeValue.getConstant('Right'));\n if (isRtl) {\n this.oneDiv.classList.add('e-de-rtl');\n this.twoDiv.classList.add('e-de-rtl');\n this.threeDiv.classList.add('e-de-rtl');\n this.leftDiv.classList.add('e-de-rtl');\n this.rightDiv.classList.add('e-de-rtl');\n oneDivContainer.classList.add('e-de-rtl');\n twoDivContainer.classList.add('e-de-rtl');\n threeDivContainer.classList.add('e-de-rtl');\n leftDivContainer.classList.add('e-de-rtl');\n rightDivContainer.classList.add('e-de-rtl');\n oneDivLabel.classList.add('e-de-rtl');\n twoDivLabel.classList.add('e-de-rtl');\n threeDivLabel.classList.add('e-de-rtl');\n leftDivLabel.classList.add('e-de-rtl');\n rightDivLabel.classList.add('e-de-rtl');\n }\n this.columnsCountBox = createElement('input', {\n attrs: { type: 'text' }\n });\n subcontainer.appendChild(this.columnsCountBox);\n nuberOfColumnsContainer.appendChild(subcontainer);\n this.section = this.documentHelper.selection.sectionFormat;\n this.pageWidth = this.section.pageWidth - this.section.leftMargin - this.section.rightMargin;\n this.columnValueTexBox = new NumericTextBox({\n format: '#',\n value: 1,\n min: 1,\n strictMode: true,\n placeholder: localeValue.getConstant('Number of columns'),\n floatLabelType: 'Always',\n change: this.createTextBox\n });\n this.columnValueTexBox.appendTo(this.columnsCountBox);\n var subcontainer1 = createElement('div', {\n className: 'e-de-subcontainer-right'\n });\n var lineCheckDiv = createElement('div', {\n className: 'e-de-columns-padding-alignment'\n });\n var lineCheck = createElement('input', { attrs: { type: 'checkbox' } });\n subcontainer1.appendChild(lineCheckDiv);\n lineCheckDiv.appendChild(lineCheck);\n lineCheck.setAttribute('aria-labelledby', localeValue.getConstant('Line between column'));\n this.columnsCountBox.setAttribute('aria-labelledby', localeValue.getConstant('Number of columns'));\n this.lineCheckbox = new CheckBox({\n label: localeValue.getConstant('Line between column')\n });\n var widthAndSpacingContainer = createElement('div', {\n className: 'e-de-dlg-row'\n });\n var widthAndSpacingContainerDiv = createElement('div', {});\n var widthAndSpacingText = createElement('div', {\n innerHTML: localeValue.getConstant('Width and Spacing'),\n className: 'e-de-para-dlg-heading'\n });\n // this.subWidthAndSpacingContainerDiv = createElement('div',{\n // className:'e-bookmark-listview e-width-space-div',\n // styles: \"width:100%;\"\n // });\n this.columnElementDiv = createElement('div', {\n className: 'e-width-space-div '\n });\n this.widthcontainerDiv1 = createElement('div', {\n className: 'e-de-container-row'\n });\n this.widthContainer = createElement('div', {\n className: 'e-de-container-row'\n });\n // Heading\n // this.containerHead = createElement('div', {\n // className: 'e-de-container-row'\n // });\n var tableElement = createElement('table');\n tableElement.style.width = '96%';\n var row = tableElement.insertRow();\n var cell = row.insertCell();\n cell.innerHTML = localeValue.getConstant('Column');\n cell.style.width = '20%';\n cell.style.display = 'table-cell';\n cell.classList.add('e-de-dlg-sub-header');\n cell = row.insertCell();\n cell.innerHTML = localeValue.getConstant('Width');\n cell.style.width = '40%';\n cell.style.display = 'table-cell';\n cell.classList.add('e-de-dlg-sub-header');\n cell = row.insertCell();\n cell.innerHTML = localeValue.getConstant('Spacing');\n cell.style.width = '40%';\n cell.style.display = 'table-cell';\n cell.classList.add('e-de-dlg-sub-header');\n //wC\n //this.columnCountSI = createElement('input', {\n //});\n // this.columnValueSI = new NumericTextBox({\n // //placeholder: localeValue.getConstant('Column'),\n // enabled: false,\n // showSpinButton: false\n // });\n //this.containerHead.appendChild(this.columnCountSI);\n // this.columnValueSI.appendTo(this.columnCountSI);\n //wSi\n //this.widthCountSI = createElement('input', {\n //});\n // this.widthValueSI = new NumericTextBox({\n // //placeholder: localeValue.getConstant('Width'),\n // enabled: false,\n // showSpinButton: false\n // });\n //this.containerHead.appendChild(this.widthCountSI);\n //this.widthValueSI.appendTo(this.widthCountSI);\n //ws\n //this.spaceCountSI = createElement('input', {\n //});\n // this.spaceValueSI = new NumericTextBox({\n // //placeholder: localeValue.getConstant('Spacing'),\n // enabled: false,\n // showSpinButton: false\n // });\n //this.containerHead.appendChild(this.spaceCountSI);\n //this.spaceValueSI.appendTo(this.spaceCountSI);\n var columnDiv = createElement('div', { styles: 'width:100%;height:100px;overflow-y: scroll;overflow-x: hidden;' });\n this.columnTable = createElement('table', { styles: 'width:100%;' });\n var row1 = this.columnTable.insertRow();\n var cell1 = row1.insertCell();\n cell1.style.width = '20%';\n //NUMERIC TEXT BOX\n // column\n var col = new Column();\n this.columnCountBox1 = createElement('input', {});\n col.index = new NumericTextBox({\n format: '#',\n min: 1,\n value: 1,\n enabled: false,\n cssClass: 'index1',\n showSpinButton: false,\n floatLabelType: 'Always',\n change: this.spaceChange\n });\n cell1.appendChild(this.columnCountBox1);\n col.index.appendTo(this.columnCountBox1);\n // width\n var cell2 = row1.insertCell();\n cell2.style.width = '40%';\n this.widthCountBox1 = createElement('input', {\n attrs: { 'type': 'text' }\n });\n col.width = new NumericTextBox({\n min: 36,\n decimals: 2,\n strictMode: true,\n enablePersistence: false,\n cssClass: 'width1',\n floatLabelType: 'Always',\n change: this.widthChange\n });\n cell2.appendChild(this.widthCountBox1);\n cell2.style.width = '40%';\n col.width.appendTo(this.widthCountBox1);\n //spacing\n var cell3 = row1.insertCell();\n cell3.style.width = '40%';\n this.spacingCountBox1 = createElement('input', {\n attrs: { 'type': 'text' }\n });\n col.space = new NumericTextBox({\n min: 0,\n decimals: 2,\n strictMode: true,\n enablePersistence: false,\n cssClass: 'space1',\n floatLabelType: 'Always',\n change: this.spaceChange\n });\n cell3.appendChild(this.spacingCountBox1);\n col.space.appendTo(this.spacingCountBox1);\n this.columns.push(col);\n col.space.enabled = false;\n this.widthCountBox1.setAttribute('aria-labelledby', 'Width');\n this.spacingCountBox1.setAttribute('aria-labelledby', 'Space');\n var equalCheckDiv = createElement('div', {\n className: 'e-de-columns-padding-alignment'\n });\n var equalCheck = createElement('input', { attrs: { type: 'checkbox' } });\n equalCheckDiv.appendChild(equalCheck);\n equalCheckDiv.setAttribute('aria-label', localeValue.getConstant('Equal column width'));\n this.equalCheckbox = new CheckBox({\n label: localeValue.getConstant('Equal column width'),\n change: this.checkBox\n });\n this.equalCheckbox.appendTo(equalCheck);\n this.lineCheckbox.appendTo(lineCheck);\n nuberOfColumnsContainer.appendChild(subcontainer1);\n oneDivContainer.appendChild(this.oneDiv);\n oneDivContainer.appendChild(oneDivLabel);\n twoDivContainer.appendChild(this.twoDiv);\n twoDivContainer.appendChild(twoDivLabel);\n threeDivContainer.appendChild(this.threeDiv);\n threeDivContainer.appendChild(threeDivLabel);\n leftDivContainer.appendChild(this.leftDiv);\n leftDivContainer.appendChild(leftDivLabel);\n rightDivContainer.appendChild(this.rightDiv);\n rightDivContainer.appendChild(rightDivLabel);\n PresetsContainer.appendChild(oneDivContainer);\n PresetsContainer.appendChild(twoDivContainer);\n PresetsContainer.appendChild(threeDivContainer);\n PresetsContainer.appendChild(leftDivContainer);\n PresetsContainer.appendChild(rightDivContainer);\n //this.subWidthAndSpacingContainerDiv.appendChild(this.containerHead);\n //this.subWidthAndSpacingContainerDiv.appendChild(this.widthcontainerDiv1);//<- First add\n widthAndSpacingContainerDiv.appendChild(widthAndSpacingText);\n widthAndSpacingContainerDiv.appendChild(tableElement);\n columnDiv.appendChild(this.columnTable);\n widthAndSpacingContainerDiv.appendChild(columnDiv);\n //widthAndSpacingContainerDiv.appendChild(this.subWidthAndSpacingContainerDiv);\n widthAndSpacingContainer.appendChild(widthAndSpacingContainerDiv);\n this.target.appendChild(displayText);\n this.target.appendChild(PresetsContainer);\n this.target.appendChild(nuberOfColumnsContainer);\n this.target.appendChild(widthAndSpacingContainer);\n this.target.appendChild(equalCheckDiv);\n // Handling clicking\n oneDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n twoDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n threeDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n leftDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n rightDivContainer.addEventListener('click', this.handleSettingCheckBoxAction);\n this.widthcontainerDiv1.style.display = 'flex';\n this.equalCheckbox.checked = true;\n this.equalCheckbox.disabled = true;\n this.lineCheckbox.disabled = true;\n };\n ColumnsDialog.prototype.createColumn = function (index, width, space) {\n this.widthContainer = createElement('div', {\n className: 'e-de-container-row'\n });\n this.widthContainer.style.display = 'flex';\n var row = this.columnTable.insertRow();\n var cell1 = row.insertCell();\n cell1.style.width = '20%';\n var col = new Column();\n // column\n var columnCount = createElement('input', {});\n col.index = new NumericTextBox({\n format: '#',\n min: 1,\n value: index,\n enabled: false,\n cssClass: 'column1',\n showSpinButton: false,\n floatLabelType: 'Always'\n });\n cell1.appendChild(columnCount);\n col.index.appendTo(columnCount);\n // width\n var cell2 = row.insertCell();\n cell2.style.width = '40%';\n var widthCountBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n col.width = new NumericTextBox({\n min: 36,\n decimals: 2,\n strictMode: true,\n enablePersistence: false,\n cssClass: 'width1',\n floatLabelType: 'Always',\n change: this.widthChange\n });\n if (!isNullOrUndefined(width)) {\n col.width.value = width;\n }\n cell2.appendChild(widthCountBox);\n col.width.appendTo(widthCountBox);\n //spacing\n var cell3 = row.insertCell();\n cell3.style.width = '40%';\n var spacingCountBox = createElement('input', {\n attrs: { 'type': 'text' }\n });\n col.space = new NumericTextBox({\n min: 0,\n decimals: 2,\n strictMode: true,\n enablePersistence: false,\n cssClass: 'space1',\n floatLabelType: 'Always',\n change: this.spaceChange\n });\n if (!isNullOrUndefined(space)) {\n col.space.value = space;\n }\n cell3.appendChild(spacingCountBox);\n col.space.appendTo(spacingCountBox);\n //this.columnElementDiv.appendChild(this.widthContainer);\n //this.subWidthAndSpacingContainerDiv.appendChild(this.columnElementDiv);//<- Second Add\n this.columns.push(col);\n };\n /**\n * @private\n * @returns {void}\n */\n ColumnsDialog.prototype.show = function () {\n var localeValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localeValue.setLocale(this.documentHelper.owner.locale);\n if (!this.target) {\n this.initColumnsDialog(localeValue, this.documentHelper.owner.enableRtl);\n }\n // this.loadColumnsDialog(localeValue);\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.header = localeValue.getConstant('Columns');\n this.documentHelper.dialog.beforeOpen = this.openColumnsDialog;\n this.documentHelper.dialog.close = this.closeColumnsDialog;\n this.documentHelper.dialog.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.buttons = [{\n click: this.applyColumnDialog,\n buttonModel: { content: localeValue.getConstant('Ok'), cssClass: 'e-flat e-table-border-shading-okay', isPrimary: true }\n },\n {\n click: this.closeDialog,\n buttonModel: { content: localeValue.getConstant('Cancel'), cssClass: 'e-flat e-table-border-shading-cancel' }\n }];\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n ColumnsDialog.prototype.setSettingPreviewDivElement = function (position, type) {\n var _this = this;\n this.equalCheckbox.checked = true;\n switch (position) {\n case 'one':\n this.columnValueTexBox.value = 1;\n break;\n case 'two':\n this.columnValueTexBox.value = 2;\n setTimeout(function () {\n if (type === 'left' || type === 'right') {\n _this.equalCheckbox.checked = false;\n }\n if (type === 'left') {\n _this.numberOfColumns = 2;\n _this.leftDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.twoDiv.classList.remove('e-de-table-border-inside-setting-click');\n var colWidth = ((_this.pageWidth - (2 * 36)) / 3);\n _this.columns[0].width.value = colWidth;\n _this.columns[1].width.value = colWidth + colWidth + 36;\n _this.columns[1].space.value = undefined;\n }\n else if (type === 'right') {\n _this.numberOfColumns = 2;\n _this.rightDiv.classList.add('e-de-table-border-inside-setting-click');\n _this.twoDiv.classList.remove('e-de-table-border-inside-setting-click');\n var colWidth = ((_this.pageWidth - (2 * 36)) / 3);\n _this.columns[0].width.value = colWidth + colWidth + 36;\n _this.columns[1].width.value = colWidth;\n _this.columns[1].space.value = undefined;\n }\n }, 5);\n break;\n case 'three':\n this.columnValueTexBox.value = 3;\n break;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n ColumnsDialog.prototype.destroy = function () {\n this.target = undefined;\n this.oneDiv = undefined;\n this.twoDiv = undefined;\n this.threeDiv = undefined;\n this.leftDiv = undefined;\n this.rightDiv = undefined;\n this.documentHelper = undefined;\n };\n return ColumnsDialog;\n}());\nexport { ColumnsDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button, RadioButton } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { HelperMethods } from '../editor/editor-helper';\nimport { WTabStop } from '../format/paragraph-format';\nvar TabDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function TabDialog(documentHelper) {\n var _this = this;\n this.isBarClicked = false;\n this.removedItems = [];\n this.tabStopList = [];\n this.isAddUnits = true;\n /**\n * @private\n * @returns {void}\n */\n this.applyParagraphFormat = function () {\n if (_this.defaultTabStopIn.value !== _this.documentHelper.defaultTabWidth) {\n _this.documentHelper.defaultTabWidth = _this.defaultTabStopIn.value;\n }\n if (_this.removedItems.length > 0) {\n var values_1 = [];\n for (var i = 0; i < _this.removedItems.length; i++) {\n values_1.push(_this.removedItems[parseInt(i.toString(), 10)].value);\n }\n _this.documentHelper.owner.editorModule.removeTabStops(_this.documentHelper.selection.getParagraphsInSelection(), values_1);\n }\n var tab = !isNullOrUndefined(_this.selectedTabStop) ? _this.selectedTabStop.value : new WTabStop();\n tab.deletePosition = 0;\n tab.tabJustification = _this.getTabAlignmentValue();\n tab.tabLeader = _this.getTabLeaderValue();\n var values = [];\n for (var i = 0; i < _this.tabStopList.length; i++) {\n values.push(_this.tabStopList[parseInt(i.toString(), 10)].value);\n }\n if (isNullOrUndefined(_this.selectedTabStop)) {\n var value = HelperMethods.getNumberFromString(_this.textBoxInput.value);\n if (value.toString() !== 'NaN') {\n tab.position = value;\n values.push(tab);\n }\n }\n _this.documentHelper.owner.editorModule.onApplyParagraphFormat('tabStop', values, false, false);\n _this.closeTabDialog();\n };\n this.textBoxInputChange = function (args) {\n var value = HelperMethods.getNumberFromString(_this.textBoxInput.value);\n for (var i = 0; i < _this.tabStopList.length; i++) {\n var tabValue = HelperMethods.getNumberFromString(_this.tabStopList[parseInt(i.toString(), 10)].displayText);\n if (tabValue === value) {\n _this.selectedTabStop = _this.tabStopList[parseInt(i.toString(), 10)];\n break;\n }\n else {\n _this.selectedTabStop = undefined;\n }\n }\n _this.isAddUnits = false;\n var index = _this.listviewInstance.dataSource.indexOf(_this.selectedTabStop);\n var item = index >= 0 ? _this.listviewInstance.dataSource[parseInt(index.toString(), 10)] : undefined;\n _this.listviewInstance.selectItem(item);\n _this.isAddUnits = true;\n };\n this.setButtonClick = function (args) {\n if (!isNullOrUndefined(_this.selectedTabStop)) {\n var value = _this.selectedTabStop.value;\n value.tabJustification = _this.getTabAlignmentValue();\n value.tabLeader = _this.getTabLeaderValue();\n }\n else {\n var value = parseFloat(HelperMethods.getNumberFromString(_this.textBoxInput.value).toFixed(2));\n if (value.toString() === 'NaN') {\n return;\n }\n var tabStop = new WTabStop();\n tabStop.position = value;\n tabStop.tabJustification = _this.getTabAlignmentValue();\n tabStop.tabLeader = _this.getTabLeaderValue();\n tabStop.deletePosition = 0;\n var tempCollection = [];\n for (var i = 0; i < _this.tabStopList.length; i++) {\n tempCollection.push(_this.tabStopList[parseInt(i.toString(), 10)].value);\n }\n var index = _this.documentHelper.owner.editorModule.addTabStopToCollection(tempCollection, tabStop, true);\n var tabStopListObj = { 'displayText': parseFloat(value.toFixed(2)) + ' pt', 'value': tabStop };\n _this.tabStopList.splice(index, 0, tabStopListObj);\n _this.selectedTabStop = tabStopListObj;\n _this.listviewInstance.dataSource = _this.tabStopList;\n _this.listviewInstance.refresh();\n _this.listviewInstance.selectItem(_this.selectedTabStop);\n }\n };\n this.clearAllButtonClick = function (args) {\n for (var i = 0; i < _this.tabStopList.length; i++) {\n _this.removedItems.push(_this.tabStopList[parseInt(i.toString(), 10)]);\n }\n _this.displayDiv.innerText = _this.localeValue.getConstant('All');\n _this.tabStopList = [];\n _this.listviewInstance.dataSource = [];\n _this.listviewInstance.refresh();\n _this.selectedTabStop = undefined;\n _this.textBoxInput.value = '';\n _this.updateButtons();\n };\n this.clearButtonClick = function (args) {\n _this.removedItems.push(_this.selectedTabStop);\n if (_this.displayDiv.innerText !== _this.localeValue.getConstant('All')) {\n if (_this.displayDiv.innerText !== '') {\n _this.displayDiv.innerText += ', ';\n }\n _this.displayDiv.innerText += _this.selectedTabStop.displayText;\n }\n var index = _this.tabStopList.indexOf(_this.selectedTabStop);\n if (index === _this.tabStopList.length - 1) {\n _this.tabStopList.splice(index, 1);\n _this.selectedTabStop = _this.tabStopList[index - 1];\n }\n else if (_this.tabStopList.length === 0) {\n _this.selectedTabStop = undefined;\n }\n else {\n _this.tabStopList.splice(index, 1);\n _this.selectedTabStop = _this.tabStopList[parseInt(index.toString(), 10)];\n }\n _this.listviewInstance.refresh();\n if (!isNullOrUndefined(_this.selectedTabStop)) {\n _this.textBoxInput.value = !isNullOrUndefined(_this.selectedTabStop) && _this.tabStopList.length > 0 ? _this.selectedTabStop.displayText : '';\n }\n else {\n _this.textBoxInput.value = '';\n }\n _this.updateButtons();\n };\n /**\n * @private\n * @returns {void}\n */\n this.closeTabDialog = function () {\n _this.documentHelper.hideDialog();\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n this.selectHandler = function (args) {\n if (_this.isAddUnits) {\n _this.focusTextBox(args.text);\n }\n _this.selectedTabStop = args.data;\n if (!isNullOrUndefined(_this.selectedTabStop) && _this.selectedTabStop.value.tabJustification === 'Bar') {\n _this.isBarClicked = true;\n }\n _this.updateButtons();\n };\n this.onBarClick = function (args) {\n _this.clearTabLeaderButton();\n _this.disableOrEnableTabLeaderButton(true);\n _this.isBarClicked = true;\n };\n this.onTabAlignmentButtonClick = function (args) {\n _this.disableOrEnableTabLeaderButton(false);\n if (_this.isBarClicked) {\n _this.updateTabLeaderButton('None');\n _this.isBarClicked = false;\n }\n };\n this.documentHelper = documentHelper;\n }\n TabDialog.prototype.getModuleName = function () {\n return 'TabDialog';\n };\n /* eslint-disable */\n /**\n * @private\n * @param {L10n} locale - Specifies the locale.\n * @param {boolean} enableRtl - Specifies is rtl.\n * @returns {void}\n */\n TabDialog.prototype.initTabsDialog = function (localeValue, enableRtl) {\n var ownerId = this.documentHelper.owner.containerId;\n this.target = createElement('div', { id: ownerId + '_tab', className: 'e-de-tab' });\n var commonDiv = createElement('div', { className: 'e-de-container-row' });\n this.target.appendChild(commonDiv);\n var tabStopLabelDiv = createElement('div', { innerHTML: localeValue.getConstant('Tab stop position') + ':', className: 'e-de-para-dlg-heading' });\n var tabStopDiv = createElement('div', { className: 'e-de-subcontainer-left' });\n tabStopDiv.appendChild(tabStopLabelDiv);\n var tabListDiv = createElement('div', { className: 'e-tab-list' });\n tabStopDiv.appendChild(tabListDiv);\n if (enableRtl) {\n tabListDiv.classList.add('e-de-rtl');\n }\n var textBoxDiv = createElement('div', { className: 'e-bookmark-textboxdiv' });\n tabListDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input e-tab-textbox-input', attrs: { autofocus: 'true' } });\n this.textBoxInput.setAttribute('type', 'text');\n this.textBoxInput.setAttribute('aria-label', localeValue.getConstant('Tab stop position'));\n textBoxDiv.appendChild(this.textBoxInput);\n textBoxDiv.addEventListener('keyup', this.textBoxInputChange);\n this.textBoxInput.value = !isNullOrUndefined(this.tabStopList) && this.tabStopList.length > 0 ? this.tabStopList[0].displayText : '';\n var listviewDiv = createElement('div', { className: 'e-tab-listViewDiv', attrs: { tabindex: '-1' } });\n listviewDiv.setAttribute('aria-label', localeValue.getConstant('TabMarkList'));\n tabListDiv.appendChild(listviewDiv);\n this.listviewInstance = new ListView({\n dataSource: this.tabStopList,\n fields: { text: 'displayText' },\n cssClass: 'e-bookmark-listview'\n });\n this.listviewInstance.appendTo(listviewDiv);\n this.listviewInstance.addEventListener('select', this.selectHandler);\n commonDiv.appendChild(tabStopDiv);\n var defaultTablabelDiv = createElement('div', { innerHTML: localeValue.getConstant('Default tab stops') + ':', className: 'e-de-para-dlg-heading' });\n var defaultTabDiv = createElement('div', { className: 'e-de-subcontainer-right' });\n commonDiv.appendChild(defaultTabDiv);\n var defaultTabStopDiv = createElement('div', { className: 'e-de-dlg-container' });\n var defaultTabStop = createElement('input', { attrs: { 'type': 'text' } });\n defaultTabStopDiv.appendChild(defaultTablabelDiv);\n defaultTabStopDiv.appendChild(defaultTabStop);\n defaultTabDiv.appendChild(defaultTabStopDiv);\n this.defaultTabStopIn = new NumericTextBox({\n format: '# pt', value: this.documentHelper.defaultTabWidth, min: 0, max: 1584, step: 1, enablePersistence: false, placeholder: localeValue.getConstant('Default tab stops'),\n });\n this.defaultTabStopIn.appendTo(defaultTabStop);\n var defaultTabWarningDiv = createElement('div', { innerHTML: localeValue.getConstant('Tab stops to be cleared') + ':', className: 'e-de-dlg-container' });\n defaultTabDiv.appendChild(defaultTabWarningDiv);\n this.displayDiv = createElement('div', { className: 'e-defaultTablabelDiv' });\n if (this.documentHelper.owner.enableRtl) {\n this.displayDiv.style.marginRight = '20px';\n }\n else {\n this.displayDiv.style.marginLeft = '20px';\n }\n defaultTabDiv.appendChild(this.displayDiv);\n var alignmentDiv = createElement('div', { className: 'e-de-dlg-container' });\n this.target.appendChild(alignmentDiv);\n var alignmentLabelDiv = createElement('div', { innerHTML: localeValue.getConstant('Alignment') + ':', className: 'e-de-para-dlg-heading' });\n alignmentDiv.appendChild(alignmentLabelDiv);\n var alignmentPropertyDiv = createElement('div', { styles: 'display: flex;' });\n alignmentDiv.appendChild(alignmentPropertyDiv);\n var alignmentPropertyDiv1 = createElement('div', { styles: 'display: flex; flex-direction: column; width: 33.33%' });\n var leftDiv = createElement('div');\n var leftRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n var decimalDiv = createElement('div');\n var decimalRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n leftDiv.appendChild(leftRadioBtn);\n decimalDiv.appendChild(decimalRadioBtn);\n alignmentPropertyDiv1.appendChild(leftDiv);\n alignmentPropertyDiv1.appendChild(decimalDiv);\n alignmentPropertyDiv.appendChild(alignmentPropertyDiv1);\n this.left = new RadioButton({ label: localeValue.getConstant('Left'), name: 'alignment', value: 'left', cssClass: 'e-small', checked: true, enableRtl: enableRtl, change: this.onTabAlignmentButtonClick });\n this.decimal = new RadioButton({ label: localeValue.getConstant('Decimal'), name: 'alignment', value: 'decimal', cssClass: 'e-small', enableRtl: enableRtl, change: this.onTabAlignmentButtonClick });\n this.left.appendTo(leftRadioBtn);\n this.decimal.appendTo(decimalRadioBtn);\n leftRadioBtn.setAttribute('aria-label', localeValue.getConstant('Left'));\n decimalRadioBtn.setAttribute('aria-label', localeValue.getConstant('Decimal'));\n var alignmentPropertyDiv2 = createElement('div', { styles: 'display: flex; flex-direction: column; width: 33.33%' });\n var centerDiv = createElement('div');\n var centerRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n var barDiv = createElement('div');\n var barRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n barDiv.appendChild(barRadioBtn);\n centerDiv.appendChild(centerRadioBtn);\n alignmentPropertyDiv2.appendChild(centerDiv);\n alignmentPropertyDiv2.appendChild(barDiv);\n this.bar = new RadioButton({ label: localeValue.getConstant('Bar'), name: 'alignment', value: 'bar', cssClass: 'e-small', enableRtl: enableRtl, change: this.onBarClick });\n this.center = new RadioButton({ label: localeValue.getConstant('Center'), name: 'alignment', value: 'center', cssClass: 'e-small', enableRtl: enableRtl, change: this.onTabAlignmentButtonClick });\n this.bar.appendTo(barRadioBtn);\n this.center.appendTo(centerRadioBtn);\n barRadioBtn.setAttribute('aria-label', localeValue.getConstant('Bar'));\n centerRadioBtn.setAttribute('aria-label', localeValue.getConstant('Center'));\n alignmentPropertyDiv.appendChild(alignmentPropertyDiv2);\n var alignmentPropertyDiv3 = createElement('div', { styles: 'display: flex; flex-direction: column;width: 33.33%' });\n var rightDiv = createElement('div');\n var rightRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n rightDiv.appendChild(rightRadioBtn);\n alignmentPropertyDiv3.appendChild(rightDiv);\n this.right = new RadioButton({ label: localeValue.getConstant('Right'), name: 'alignment', value: 'right', cssClass: 'e-small', enableRtl: enableRtl, change: this.onTabAlignmentButtonClick });\n this.right.appendTo(rightRadioBtn);\n rightRadioBtn.setAttribute('aria-label', localeValue.getConstant('Right'));\n alignmentPropertyDiv.appendChild(alignmentPropertyDiv3);\n var tabLeaderDiv = createElement('div', { className: 'e-de-dlg-container' });\n var tabLeaderLabelDiv = createElement('div', { innerHTML: localeValue.getConstant('Leader') + ':', className: 'e-de-para-dlg-heading' });\n tabLeaderDiv.appendChild(tabLeaderLabelDiv);\n this.target.appendChild(tabLeaderDiv);\n var tabLeaderPropertyDiv = createElement('div', { styles: 'display: flex;' });\n tabLeaderDiv.appendChild(tabLeaderPropertyDiv);\n var tabLeaderPropertyDiv1 = createElement('div', { styles: 'display: flex; flex-direction: column; width: 33.33%' });\n var noneDiv = createElement('div');\n var noneRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n var underscoreDiv = createElement('div');\n var underscoreRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n noneDiv.appendChild(noneRadioBtn);\n underscoreDiv.appendChild(underscoreRadioBtn);\n tabLeaderPropertyDiv1.appendChild(noneDiv);\n tabLeaderPropertyDiv1.appendChild(underscoreDiv);\n this.none = new RadioButton({ label: '1 ' + localeValue.getConstant('None'), name: 'tabLeader', value: 'none', cssClass: 'e-small', checked: true, enableRtl: enableRtl });\n this.underscore = new RadioButton({ label: '4 _____', name: 'tabLeader', value: 'underscore', cssClass: 'e-small', enableRtl: enableRtl });\n this.none.appendTo(noneRadioBtn);\n this.underscore.appendTo(underscoreRadioBtn);\n tabLeaderPropertyDiv.appendChild(tabLeaderPropertyDiv1);\n var tabLeaderPropertyDiv2 = createElement('div', { styles: 'display: flex; flex-direction: column; width: 33.33%' });\n var dottedDiv = createElement('div');\n var dottedRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n var singleDiv = createElement('div');\n var singleRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n dottedDiv.appendChild(dottedRadioBtn);\n singleDiv.appendChild(singleRadioBtn);\n this.dotted = new RadioButton({ label: '2 .......', name: 'tabLeader', value: 'dotted', cssClass: 'e-small', enableRtl: enableRtl });\n this.single = new RadioButton({ label: '5 -------', name: 'tabLeader', value: 'single', cssClass: 'e-small', enableRtl: enableRtl });\n this.dotted.appendTo(dottedRadioBtn);\n this.single.appendTo(singleRadioBtn);\n tabLeaderPropertyDiv2.appendChild(dottedDiv);\n tabLeaderPropertyDiv2.appendChild(singleDiv);\n tabLeaderPropertyDiv.appendChild(tabLeaderPropertyDiv2);\n var tabLeaderPropertyDiv3 = createElement('div', { styles: 'display: flex; flex-direction: column; width: 33.33%' });\n var HyphenDiv = createElement('div');\n var HyphenRadioBtn = createElement('input', {\n attrs: { 'type': 'radiobutton' }\n });\n HyphenDiv.appendChild(HyphenRadioBtn);\n tabLeaderPropertyDiv3.appendChild(HyphenDiv);\n this.Hyphen = new RadioButton({ label: '3 -------', name: 'tabLeader', value: 'hyphen', cssClass: 'e-small', enableRtl: enableRtl });\n this.Hyphen.appendTo(HyphenRadioBtn);\n tabLeaderPropertyDiv.appendChild(tabLeaderPropertyDiv3);\n var buttonDiv = createElement('div', { className: 'e-de-tab-button', styles: 'display: flex;' });\n this.target.appendChild(buttonDiv);\n var tableElement = createElement('table');\n buttonDiv.appendChild(tableElement);\n tableElement.style.width = '100%';\n var row = tableElement.insertRow();\n var cell = row.insertCell();\n var setbuttonDiv = createElement('div', { className: 'e-de-tab-setBtn' });\n buttonDiv.appendChild(setbuttonDiv);\n var setButtonElement = createElement('button', {\n innerHTML: localeValue.getConstant('Set'),\n attrs: { type: 'button' }\n });\n setButtonElement.setAttribute('aria-label', localeValue.getConstant('Set'));\n setbuttonDiv.appendChild(setButtonElement);\n this.setButton = new Button({ cssClass: 'e-button-custom' });\n this.setButton.appendTo(setButtonElement);\n cell.appendChild(setbuttonDiv);\n setButtonElement.addEventListener('click', this.setButtonClick);\n //setButtonElement.addEventListener('click', this.setTabStop);\n cell.style.width = '33.33%';\n cell.style.display = 'table-cell';\n cell = row.insertCell();\n var clearbuttonDiv = createElement('div', { className: 'e-de-tab-clearBtn' });\n buttonDiv.appendChild(clearbuttonDiv);\n var clearButtonElement = createElement('button', {\n innerHTML: localeValue.getConstant('Clear'),\n attrs: { type: 'button' }\n });\n clearButtonElement.setAttribute('aria-label', localeValue.getConstant('Clear'));\n clearbuttonDiv.appendChild(clearButtonElement);\n this.clearButton = new Button({ cssClass: 'e-button-custom' });\n this.clearButton.appendTo(clearButtonElement);\n clearButtonElement.addEventListener('click', this.clearButtonClick);\n //clearButtonElement.addEventListener('click', this.clearTabStop);\n cell.appendChild(clearbuttonDiv);\n cell.style.width = '33.33%';\n cell.style.display = 'table-cell';\n cell = row.insertCell();\n var clearAllbuttonDiv = createElement('div', { className: 'e-de-tab-clearAllBtn' });\n buttonDiv.appendChild(clearAllbuttonDiv);\n var clearAllButtonElement = createElement('button', {\n innerHTML: localeValue.getConstant('Clear All'),\n attrs: { type: 'button' }\n });\n clearAllButtonElement.setAttribute('aria-label', localeValue.getConstant('Clear All'));\n clearAllbuttonDiv.appendChild(clearAllButtonElement);\n this.clearAllButton = new Button({ cssClass: 'e-button-custom' });\n this.clearAllButton.appendTo(clearAllButtonElement);\n clearAllButtonElement.addEventListener('click', this.clearAllButtonClick);\n //clearButtonElement.addEventListener('click', this.clearTabStop);\n cell.appendChild(clearAllbuttonDiv);\n cell.style.width = '33.33%';\n cell.style.display = 'table-cell';\n this.selectedTabStop = !isNullOrUndefined(this.tabStopList) && this.tabStopList.length > 0 ? this.tabStopList[0] : undefined;\n this.updateButtons();\n };\n TabDialog.prototype.getTabAlignmentValue = function () {\n if (this.left.checked) {\n return 'Left';\n }\n else if (this.center.checked) {\n return 'Center';\n }\n else if (this.right.checked) {\n return 'Right';\n }\n else if (this.decimal.checked) {\n return 'Decimal';\n }\n else if (this.bar.checked) {\n return 'Bar';\n }\n return 'Left';\n };\n TabDialog.prototype.getTabLeaderValue = function () {\n if (this.none.checked) {\n return 'None';\n }\n else if (this.dotted.checked) {\n return 'Dot';\n }\n else if (this.Hyphen.checked) {\n return 'Hyphen';\n }\n else if (this.underscore.checked) {\n return 'Underscore';\n }\n else if (this.single.checked) {\n return 'Single';\n }\n return 'None';\n };\n TabDialog.prototype.updateButtons = function () {\n if (!isNullOrUndefined(this.selectedTabStop)) {\n this.updateTabAlignmentButton(this.selectedTabStop.value.tabJustification);\n this.updateTabLeaderButton(this.selectedTabStop.value.tabLeader);\n }\n else {\n this.updateTabAlignmentButton('Left');\n this.updateTabLeaderButton('None');\n }\n };\n TabDialog.prototype.updateTabLeaderButton = function (value) {\n this.clearTabLeaderButton();\n if (this.getTabAlignmentValue() === 'Bar') {\n return;\n }\n switch (value) {\n case 'None':\n this.none.checked = true;\n break;\n case 'Single':\n this.single.checked = true;\n break;\n case 'Dot':\n this.dotted.checked = true;\n break;\n case 'Hyphen':\n this.Hyphen.checked = true;\n break;\n case 'Underscore':\n this.underscore.checked = true;\n break;\n default:\n this.none.checked = true;\n break;\n }\n };\n TabDialog.prototype.updateTabAlignmentButton = function (value) {\n this.clearTabAlignmentButton();\n switch (value) {\n case 'Left':\n this.left.checked = true;\n break;\n case 'Center':\n this.center.checked = true;\n break;\n case 'Right':\n this.right.checked = true;\n break;\n case 'Decimal':\n this.decimal.checked = true;\n break;\n case 'Bar':\n this.bar.checked = true;\n this.clearTabLeaderButton();\n this.disableOrEnableTabLeaderButton(true);\n return;\n default:\n break;\n }\n this.disableOrEnableTabLeaderButton(false);\n };\n TabDialog.prototype.clearTabLeaderButton = function () {\n this.none.checked = false;\n this.single.checked = false;\n this.dotted.checked = false;\n this.Hyphen.checked = false;\n this.underscore.checked = false;\n };\n TabDialog.prototype.disableOrEnableTabLeaderButton = function (isDisable) {\n this.none.disabled = isDisable;\n this.single.disabled = isDisable;\n this.dotted.disabled = isDisable;\n this.Hyphen.disabled = isDisable;\n this.underscore.disabled = isDisable;\n };\n TabDialog.prototype.clearTabAlignmentButton = function () {\n this.left.checked = false;\n this.center.checked = false;\n this.right.checked = false;\n this.decimal.checked = false;\n this.bar.checked = false;\n };\n TabDialog.prototype.focusTextBox = function (text) {\n this.textBoxInput.value = text;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n var value = this.textBoxInput;\n value.setSelectionRange(0, text.length);\n value.focus();\n };\n /**\n * @private\n * @returns {void}\n */\n TabDialog.prototype.show = function () {\n var localObj = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localObj.setLocale(this.documentHelper.owner.locale);\n this.localeValue = localObj;\n var tabs = this.documentHelper.owner.editorModule.getTabsInSelection();\n this.tabStopList = [];\n for (var i = 0; i < tabs.length; i++) {\n var value = parseFloat((tabs[i].position).toFixed(2)) + ' pt';\n var objectValue = { 'displayText': value, 'value': tabs[i].clone() };\n this.tabStopList.push(objectValue);\n }\n this.initTabsDialog(localObj, this.documentHelper.owner.enableRtl);\n this.documentHelper.dialog.header = localObj.getConstant('Tabs');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.buttons = [{\n click: this.applyParagraphFormat,\n buttonModel: { content: localObj.getConstant('Ok'), cssClass: 'e-flat e-para-okay', isPrimary: true }\n },\n {\n click: this.closeTabDialog,\n buttonModel: { content: localObj.getConstant('Cancel'), cssClass: 'e-flat e-para-cancel' }\n }\n ];\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n TabDialog.prototype.destroy = function () {\n this.target = undefined;\n this.textBoxInput = undefined;\n this.defaultTabStopIn = undefined;\n this.left = undefined;\n this.right = undefined;\n this.center = undefined;\n this.decimal = undefined;\n this.bar = undefined;\n this.none = undefined;\n this.dotted = undefined;\n this.single = undefined;\n this.Hyphen = undefined;\n this.setButton = undefined;\n this.clearButton = undefined;\n this.clearAllButton = undefined;\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n this.selectedTabStop = undefined;\n this.isBarClicked = undefined;\n this.removedItems = undefined;\n this.tabStopList = undefined;\n this.localeValue = undefined;\n };\n return TabDialog;\n}());\nexport { TabDialog };\n","/**\n * Size defines and processes the size(width/height) of the objects\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n /**\n * isEmpty method \\\n *\n * @returns { boolean } isEmpty method .\\\n *\n * @private\n */\n Size.prototype.isEmpty = function () {\n return this.height === 0 && this.width === 0;\n };\n // public static get empty(): Size {\n // return new Size();\n // }\n // public get isEmpty(): boolean {\n // return this.equals(Size.empty);\n // }\n // public equals(size2: Size): boolean {\n // return this.width === size2.width && this.height === size2.height;\n // }\n // public union(size: Size): void {\n // size.width = Math.max(size.width, this.width);\n // size.height = Math.max(size.height, this.height);\n // }\n /**\n * clone method \\\n *\n * @returns { Size } clone method .\\\n *\n * @private\n */\n Size.prototype.clone = function () {\n return new Size(this.width, this.height);\n };\n return Size;\n}());\nexport { Size };\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { HelperMethods } from '../editor/editor-helper';\nimport { Size } from '../utility/size';\n/**\n * @private\n */\nvar Ruler = /** @class */ (function () {\n /**\n * Constructor for creating the Ruler Component\n *\n * @param {string | HTMLElement} element The ruler element.\n * @param {RulerHelper} rulerHelper The ruler helper.\n */\n function Ruler(element, rulerHelper) {\n /**\n * Defines the unique interval of the ruler.\n *\n * @default 6\n */\n this.interval = 4;\n /**\n * Sets the segment width of the ruler.\n *\n * @default 36\n */\n this.segmentWidth = 47.9988;\n /**\n * Defines the orientation of the ruler.\n *\n * @default 'Horizontal'\n */\n this.orientation = 'Horizontal';\n /**\n * Defines the alignment of the tick in the ruler.\n *\n *\n * @default 'RightOrBottom'\n */\n this.tickAlignment = 'RightOrBottom';\n /**\n * Defines the color of the marker.\n *\n * @default 'red'\n */\n this.markerColor = 'red';\n /**\n * Defines the thickness of the ruler.\n *\n * @default 15\n */\n this.thickness = 15;\n /**\n * Sets the segment width of the ruler.\n *\n * @default null\n\n */\n this.arrangeTick = null;\n /**\n * Defines the length of the ruler.\n *\n * @default 400\n */\n this.length = 400;\n /** @private */\n this.offset = 0;\n /** @private */\n this.scale = 1;\n /** @private */\n this.rulerStartValue = 1584;\n /** @private */\n this.zeroPosition = HelperMethods.convertPointToPixel(1584);\n /** @private */\n this.addSegmentWidth = false;\n this.element = element;\n this.rulerHelper = rulerHelper;\n }\n /**\n * @private\n * @returns {void} To append the ruler\n */\n Ruler.prototype.appendTo = function () {\n this.preRender();\n this.render();\n };\n /**\n * Initializes the values of private members.\n *\n * @returns {void} Initializes the values of private members.\n * @private\n */\n Ruler.prototype.preRender = function () {\n this.unWireEvents();\n this.wireEvents();\n };\n /**\n * Renders the rulers.\n *\n * @returns {void} Renders the rulers.\n * @private\n */\n Ruler.prototype.render = function () {\n this.updateRulerGeometry();\n //this.renderComplete();\n };\n /**\n * Core method to return the component name.\n *\n * @returns {string} Core method to return the component name.\n * @private\n */\n Ruler.prototype.getModuleName = function () {\n return 'Ruler';\n };\n /**\n *To destroy the ruler\n *\n * @returns {void} To destroy the ruler\n */\n Ruler.prototype.destroy = function () {\n this.unWireEvents();\n // this.notify('destroy', {});\n // super.destroy();\n this.element.classList.remove('e-ruler');\n };\n /**\n * Refreshes the ruler when the Ruler properties are updated\\\n *\n * @returns { void} Refreshes the ruler when the Ruler properties are updated .\\\n * @param {RulerModel} newProp - provide the newProp value.\n * @param {RulerModel} oldProp - provide the oldProp value.\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n // public onPropertyChanged(newProp: RulerModel, oldProp: RulerModel): void {\n // for (const prop of Object.keys(newProp)) {\n // switch (prop) {\n // case 'interval':\n // case 'segmentWidth':\n // case 'tickAlignment':\n // case 'markerColor':\n // case 'thickness':\n // this.updateRuler();\n // break;\n // }\n // }\n // }\n /**\n * @param {boolean} show - provide the show value.\n * @private\n * @returns {void} To show or hide the ruler\n */\n Ruler.prototype.showHideRuler = function (show) {\n if (show) {\n this.element.style.display = 'block';\n }\n else {\n this.element.style.display = 'none';\n }\n };\n Ruler.prototype.updateRulerGeometry = function () {\n this.element.style.textAlign = 'left';\n this.renderRulerSpace();\n this.updateRuler();\n };\n Ruler.prototype.renderRulerSpace = function () {\n var rulerGeometry = this.getRulerGeometry();\n var div = document.getElementById(this.element.id + '_ruler_space');\n if (!div) {\n div = this.rulerHelper.createHtmlElement('div', {\n 'id': this.element.id + '_ruler_space',\n 'style': 'height:' + rulerGeometry.height + 'px;width:' + rulerGeometry.width + 'px;cssFloat:' + 'left;'\n });\n this.element.appendChild(div);\n }\n return div;\n };\n /**\n * @private\n *\n * @returns {void} To update the ruler\n */\n Ruler.prototype.updateRuler = function () {\n var rulerSize = this.getRulerSize();\n var rulerGeometry = this.getRulerGeometry();\n var length = 0;\n var offset = 0;\n var availableSize = new Size();\n var svg = this.getRulerSVG(rulerGeometry);\n if (svg) {\n length = this.length;\n availableSize.height = rulerSize;\n offset = this.offset;\n if (length && length !== Infinity) {\n var unitLength = length;\n var unitOffset = offset;\n this.updateSegments(unitOffset, (unitLength + Math.abs(unitOffset)), svg, rulerSize);\n }\n }\n };\n Ruler.prototype.updateSegments = function (start, end, svg, rulerSize) {\n var run = start;\n var trans = { trans: 0 };\n this.rulerStartValue = HelperMethods.convertPixelToPoint(this.zeroPosition);\n while (run < end) {\n var rulerSegment = this.getNewSegment(run, svg);\n if (rulerSegment) {\n svg.appendChild(rulerSegment.segment);\n run = this.updateSegment(start, end, rulerSegment, run, trans, rulerSize);\n }\n }\n this.addSegmentWidth = false;\n };\n Ruler.prototype.updateSegment = function (start, end, rulerSegment, run, trans, rulerSize) {\n var segWidth = this.updateSegmentWidth(this.scale);\n if (run === start) {\n this.startValue = Math.floor(start / segWidth) * segWidth / this.scale;\n this.startValue = (this.startValue % 1) !== 0 ? Number((this.startValue).toFixed(1)) : this.startValue;\n rulerSegment.label.textContent = this.rulerStartValue.toString();\n this.defStartValue = run = this.startValue * this.scale;\n if (this.orientation === 'Horizontal') {\n this.hRulerOffset = start - run;\n }\n else {\n this.vRulerOffset = start - run;\n }\n }\n else {\n // this.startValue = (run / this.scale);\n this.startValue = HelperMethods.convertPixelToPoint(run);\n this.startValue = (this.startValue % 1) !== 0 ? Number((this.startValue).toFixed(1)) : this.startValue;\n // rulerSegment.label.textContent = (this.startValue).toString();\n var labeltext = void 0;\n if (this.rulerStartValue === 0) {\n this.addSegmentWidth = true;\n }\n if (this.addSegmentWidth) {\n labeltext = Math.abs(this.rulerStartValue + 36);\n }\n else {\n labeltext = Math.abs(this.rulerStartValue - 36);\n }\n // const labeltext = this.subtractAndAdd(this.rulerStartValue, 36);\n rulerSegment.label.textContent = (labeltext).toString();\n this.rulerStartValue = labeltext;\n // if (this.addSegmentWidth) {\n // if ((1584 - this.startValue) <= this.leftMargin && !((1584 -this.startValue) >= (HelperMethods.convertPixelToPoint(this.pageWidth) - this.rightMargin))) {\n // rulerSegment.label.textContent = (this.startValue - this.leftMargin).toString();\n // if (this.startValue >= 1584 && (Math.round(HelperMethods.convertPointToPixel(this.startValue)) < ((2112 - HelperMethods.convertPointToPixel(this.startMargin)) + ((pageLength) - HelperMethods.convertPointToPixel(this.endMargin))))) {\n // const rectElement = rulerSegment.segment.querySelector('.e-ruler-segment1') as SVGRectElement;\n // var rect = rulerSegment.segment.firstChild;\n // rectElement.setAttribute(\"fill\", \"white\");\n // }\n //}\n }\n this.updateTickLabel(rulerSegment, rulerSize);\n var translate = (this.orientation === 'Horizontal') ? ((trans.trans + 0.5) + ',0.5') : ('0.5,' + (trans.trans + 0.5));\n rulerSegment.segment.setAttribute('transform', 'translate(' + translate + ') scale(' + 1 + ',1)');\n trans.trans += segWidth * this.scale;\n run += segWidth;\n return run;\n };\n Ruler.prototype.updateTickLabel = function (rulerSegment, rulerSize) {\n var bBox = rulerSegment.segment.lastChild.getBBox();\n var isHorizontal = (this.orientation === 'Horizontal') ? true : false;\n var isRightOrBottom = (this.tickAlignment === 'RightOrBottom') ? true : false;\n var x = isHorizontal ? -4 : 0;\n var y = isHorizontal ? (isRightOrBottom ? (rulerSize / 2 + (11 / 2) - (11 / 2)) :\n (rulerSize / 2 + (11 / 2))) : bBox.height;\n if (isHorizontal) {\n y = y + 2;\n }\n if (!isHorizontal) {\n x = x + 10;\n y = y + 2;\n }\n var translate = isRightOrBottom ? (-(bBox.width + 2) + ',' + ((rulerSize / 2) - bBox.height)) :\n (-(bBox.width + 2) + ',' + ((rulerSize / 2) - bBox.height / 2));\n var attr = isHorizontal ? { 'x': x, 'y': y } :\n { 'x': x, 'y': y, 'transform': 'rotate(270)' + 'translate(' + translate + ')' };\n this.rulerHelper.setAttributeSvg(rulerSegment.segment.lastChild, attr);\n };\n Ruler.prototype.getNewSegment = function (run, svg) {\n var segment = this.createNewTicks(run, svg);\n var label = this.createTickLabel(svg, segment);\n return { segment: segment, label: label };\n };\n Ruler.prototype.createNewTicks = function (run, svg) {\n var tick;\n var tickInterval;\n var segmentWidth = this.updateSegmentWidth(this.scale);\n //let g: SVGElement;\n var attr = { 'class': 'e-de-ruler-segment' };\n var g = this.rulerHelper.createSvgElement('g', attr);\n //let rect: SVGElement;\n var rectattr = { 'class': 'e-de-ruler-segment1' };\n var rect = this.rulerHelper.createSvgElement('rect', rectattr);\n var width = this.orientation === 'Horizontal' ? (segmentWidth * this.scale) : 15;\n var height = this.orientation === 'Horizontal' ? 15 : segmentWidth;\n rect.setAttribute('x', '0');\n rect.setAttribute('y', '0');\n rect.setAttribute('width', width.toString());\n rect.setAttribute('height', height.toString());\n rect.setAttribute('fill', 'lightgrey');\n // g.appendChild(rect);\n for (var i = 0; i < this.interval; i++) {\n tickInterval = segmentWidth / this.interval;\n tick = this.createTick(svg, tickInterval, i + 1, run);\n if (tick) {\n g.appendChild(tick);\n }\n }\n return g;\n };\n Ruler.prototype.getLinePoint = function (svg, tickInterval, length) {\n var segmentWidth = this.updateSegmentWidth(this.scale);\n var rulerSize = this.getRulerSize();\n tickInterval = tickInterval * (length - 1);\n length = ((tickInterval % segmentWidth) === 0) ? rulerSize : rulerSize * 0.3;\n return length;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Ruler.prototype.createTick = function (svg, tickInterval, length, run) {\n var ruler;\n //let line: SVGElement;\n var linePoint = this.getLinePoint(svg, tickInterval, length);\n var rulerSize = this.getRulerSize();\n //let args: IArrangeTickOptions;\n //let attr: Object;\n var isHorizontal = (this.orientation === 'Horizontal') ? true : false;\n var isRightOrBottom = (this.tickAlignment === 'RightOrBottom') ? true : false;\n // const arrangeTick: Function = getFunction(this.arrangeTick);\n // // eslint-disable-next-line\n // const args:IArrangeTickOptions = { ruler: ruler, tickLength: linePoint, tickInterval: ((this.segmentWidth / this.interval) * (length - 1)) };\n // if (arrangeTick) {\n // arrangeTick(args);\n // }\n // linePoint = args.tickLength;\n var point = tickInterval * (length - 1) * this.scale;\n var x1 = isHorizontal ? point : (isRightOrBottom ? rulerSize : 0);\n var x2 = isHorizontal ? point : (isRightOrBottom ? (rulerSize - linePoint) : (rulerSize - (rulerSize - linePoint)));\n var y1 = isHorizontal ? (isRightOrBottom ? rulerSize : (rulerSize - (rulerSize - linePoint))) : point;\n var y2 = isHorizontal ? (isRightOrBottom ? (rulerSize - linePoint) : 0) : point;\n var line;\n if (y2 !== 0) {\n y1 = y1 - 6;\n y2 = y2 - 6;\n if (!isHorizontal) {\n x1 = x1 - 6;\n x2 = x2 - 6;\n }\n var attr = { 'x1': x1, 'y1': y1, 'x2': x2, 'y2': y2, 'stroke-width': '0.25', 'stroke': 'black' };\n line = this.rulerHelper.createSvgElement('line', attr);\n line.setAttribute('class', 'e-de-ruler-tick');\n }\n return line;\n };\n Ruler.prototype.createTickLabel = function (svg, segment) {\n var text;\n if (segment) {\n var attr = { 'class': 'e-de-ruler-tick-label', 'style': 'font-weight: 400' };\n text = this.rulerHelper.createSvgElement('text', attr);\n segment.appendChild(text);\n }\n return text;\n };\n /**\n * @private\n * @param {number} scale\n */\n /**\n * updateSegmentWidth method\\\n *\n * @returns {number} updateSegmentWidth method .\\\n * @param {string} scale - provide the scale value.\n *\n * @private\n */\n Ruler.prototype.updateSegmentWidth = function (scale) {\n if (this.segmentWidth !== 100) {\n return this.segmentWidth;\n }\n var five = 25;\n var multiples = 1;\n var div;\n //let scaleRound: number;\n var fifty = 100;\n var scaleRound = Math.pow(2, Math.round(Math.log(scale) / Math.log(2)));\n div = fifty;\n div = (fifty / scaleRound);\n while (div > 100) {\n multiples /= 10;\n div /= 10;\n }\n while (div < 25) {\n multiples *= 10;\n div *= 10;\n }\n if (div >= five && div % five !== 0) {\n div = Math.round(div / five) * five;\n }\n return div * scale / multiples;\n };\n Ruler.prototype.createMarkerLine = function (rulerSvg, rulerObj, attr) {\n var line;\n if (rulerObj) {\n line = rulerSvg.getElementById(rulerObj.id + '_marker');\n if (line) {\n line.parentNode.removeChild(line);\n }\n line = this.rulerHelper.createSvgElement('line', attr);\n }\n return line;\n };\n /**\n * updateSegmentWidth method\\\n *\n * @returns {void} updateSegmentWidth method .\\\n * @param {HTMLElement} rulerObj - Defines the ruler Object\n * @param {PointModel} currentPoint - Defines the current point for ruler Object\n * @param {number} offset - Defines the offset ruler Object\n *\n * @private\n */\n Ruler.prototype.drawRulerMarker = function (rulerObj, currentPoint, offset) {\n var rulerSvg;\n var rulerSize;\n var scale;\n var diff;\n var i;\n var attr;\n var line;\n var isHorizontal = this.orientation === 'Horizontal' ? true : false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rulerSvgElements = rulerObj.getElementsByTagName('svg');\n for (i = 0; i < rulerSvgElements.length; i++) {\n if (rulerSvgElements[parseInt(i.toString(), 10)]) {\n rulerSvg = rulerSvgElements[parseInt(i.toString(), 10)];\n }\n break;\n }\n if (rulerSvg) {\n rulerSize = this.getRulerSize();\n attr = {\n 'id': rulerObj.id + '_marker', 'x1': 0, 'y1': 0, 'x2': (isHorizontal ? 0 : rulerSize),\n 'y2': (isHorizontal ? rulerSize : 0), 'stroke': this.markerColor, 'stroke-width': 1.5,\n 'class': 'e-d-ruler-marker'\n };\n line = this.createMarkerLine(rulerSvg, rulerObj, attr);\n scale = this.scale;\n diff = this.offset - this.defStartValue;\n var point = isHorizontal ? currentPoint.x : currentPoint.y;\n var move = (point * scale) + offset + diff;\n line.setAttribute('transform', 'translate(' + (isHorizontal ? ((move + 0.5) + ' 0.5') : ('0.5 ' + (move + 0.5))) + ')');\n rulerSvg.appendChild(line);\n }\n };\n Ruler.prototype.getRulerGeometry = function () {\n if (this.orientation === 'Horizontal') {\n return new Size(this.length, this.element ? this.element.getBoundingClientRect().height : 0);\n }\n else {\n return new Size(this.element ? this.element.getBoundingClientRect().width : 0, this.length);\n }\n };\n Ruler.prototype.getRulerSize = function () {\n return this.thickness;\n };\n Ruler.prototype.getRulerSVG = function (rulerGeometry) {\n var rulerSpace;\n var rulerSize = this.getRulerSize();\n var svg;\n if (this.element) {\n rulerSpace = document.getElementById(this.element.id + '_ruler_space');\n if (rulerSpace) {\n var attr = {\n 'id': this.element.id + '_Ruler_svg',\n width: this.orientation === 'Horizontal' ? this.length : rulerSize + 'px',\n height: this.orientation === 'Horizontal' ? rulerSize : (rulerGeometry.height) + 'px',\n style: 'position:inherit;'\n };\n svg = this.rulerHelper.createSvgElement('svg', attr);\n if (rulerSpace.childNodes.length > 0) {\n for (var i = rulerSpace.childNodes.length - 1; i >= 0; i--) {\n rulerSpace.childNodes[parseInt(i.toString(), 10)].parentNode.removeChild(rulerSpace.childNodes[parseInt(i.toString(), 10)]);\n }\n }\n rulerSpace.appendChild(svg);\n }\n }\n return svg;\n };\n /**\n * Method to bind events for the ruler \\\n *\n * @returns {void} Method to bind events for the ruler .\\\n * @private\n */\n Ruler.prototype.wireEvents = function () {\n //wire Events\n };\n /**\n * Method to unbind events for the ruler \\\n *\n * @returns {void} Method to unbind events for the ruler .\\\n * @private\n */\n Ruler.prototype.unWireEvents = function () {\n //unWire Events\n };\n return Ruler;\n}());\nexport { Ruler };\n","import { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\n//import { DocumentEditorRulerModel } from '../ruler-settings-model';\nimport { Ruler } from '../ruler/index';\nimport { HelperMethods, Point } from '../editor/editor-helper';\nimport { WTabStop } from '../format/paragraph-format';\n/**\n * Size defines and processes the size(width/height) of the objects\n *\n * @private\n */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n /**\n * isEmpty method \\\n *\n * @returns { boolean } isEmpty method .\\\n *\n * @private\n */\n Size.prototype.isEmpty = function () {\n return this.height === 0 && this.width === 0;\n };\n /**\n * clone method \\\n *\n * @returns { Size } clone method .\\\n *\n * @private\n */\n Size.prototype.clone = function () {\n return new Size(this.width, this.height);\n };\n return Size;\n}());\nexport { Size };\n/* eslint-disable */\n/**\n * defines the helper methods for the ruler\n * @private\n */\nvar RulerHelper = /** @class */ (function () {\n function RulerHelper() {\n }\n /**\n * @private\n */\n RulerHelper.prototype.hideTabStopSwitch = function (show) {\n if (this.tabStopStwitch) {\n this.showHideElement(show, this.tabStopStwitch);\n }\n };\n /**\n * @private\n */\n RulerHelper.prototype.hideRulerBottom = function (show) {\n if (this.hRulerBottom) {\n this.showHideElement(show, this.hRulerBottom);\n }\n if (this.vRulerBottom) {\n this.showHideElement(show, this.vRulerBottom);\n }\n };\n RulerHelper.prototype.showHideElement = function (show, element) {\n if (show) {\n element.style.display = 'block';\n }\n else {\n element.style.display = 'none';\n }\n };\n /* eslint-enable */\n /**\n * createHtmlElement method \\\n *\n * @returns {SVGSVGElement} createHtmlElement method .\\\n * @param { string } elementType - provide the diagramId value.\n * @param { Object } attribute - provide the diagramId value.\n * @private\n */\n RulerHelper.prototype.createHtmlElement = function (elementType, attribute) {\n var element = createElement(elementType, attribute);\n this.setAttributeHtml(element, attribute);\n return element;\n };\n /**\n * createSvgElement method \\\n *\n * @returns {SVGSVGElement} createSvgElement method .\\\n * @param { string } elementType - provide the elementType value.\n * @param { Object } attribute - provide the attribute value.\n * @private\n */\n RulerHelper.prototype.createSvgElement = function (elementType, attribute) {\n var element = document.createElementNS('http://www.w3.org/2000/svg', elementType);\n this.setAttributeSvg(element, attribute);\n return element;\n };\n /**\n * applyStyleAgainstCsp method \\\n *\n * @returns {void} applyStyleAgainstCsp method .\\\n * @param { SVGElement } svg - provide the svg value.\n * @param { string } attributes - provide the boolean value.\n * @private\n */\n RulerHelper.prototype.applyStyleAgainstCsp = function (svg, attributes) {\n var keys = attributes.split(';');\n for (var i = 0; i < keys.length; i++) {\n var attribute = keys[parseInt(i.toString(), 10)].split(':');\n if (attribute.length === 2) {\n svg.style[attribute[0].trim()] = attribute[1].trim();\n }\n }\n };\n /**\n * setAttributeSvg method.\n *\n * @returns {void} setAttributeSvg method .\\\n * @param { SVGElement } svg - provide the svg value.\n * @param { Object } attributes - provide the boolean value.\n * @private\n */\n RulerHelper.prototype.setAttributeSvg = function (svg, attributes) {\n var keys = Object.keys(attributes);\n for (var i = 0; i < keys.length; i++) {\n // Added below condition to check whether svg is undefined or not\n if (svg && keys[parseInt(i.toString(), 10)] !== 'style') {\n svg.setAttribute(keys[parseInt(i.toString(), 10)], attributes[keys[parseInt(i.toString(), 10)]]);\n }\n else {\n this.applyStyleAgainstCsp(svg, attributes[keys[parseInt(i.toString(), 10)]]);\n }\n }\n };\n /**\n * setAttributeHtml method \\\n *\n * @returns {void} setAttributeHtml method .\\\n * @param { HTMLElement } element - provide the svg value.\n * @param { Object } attributes - provide the boolean value.\n * @private\n */\n RulerHelper.prototype.setAttributeHtml = function (element, attributes) {\n var keys = Object.keys(attributes);\n for (var i = 0; i < keys.length; i++) {\n if (keys[parseInt(i.toString(), 10)] !== 'style') {\n element.setAttribute(keys[parseInt(i.toString(), 10)], attributes[keys[parseInt(i.toString(), 10)]]);\n }\n else {\n this.applyStyleAgainstCsp(element, attributes[keys[parseInt(i.toString(), 10)]]);\n }\n }\n };\n /**\n * renderOverlapElement method \\\n *\n * @returns {void} renderOverlapElement method .\\\n * @param { DocumentEditor} documentEditor - provide the content value.\n * @private\n */\n RulerHelper.prototype.renderOverlapElement = function (documentEditor) {\n var rulerSize = this.getRulerSize(documentEditor);\n var attributes = {\n 'id': documentEditor.element.id + '_overlapRuler',\n style: 'height:' + rulerSize.height + 'px;width:' + rulerSize.width + 'px;position:absolute;margin-left:0;margin-top:0;diplay:none',\n class: 'e-ruler-overlap'\n };\n var overlap = this.createHtmlElement('div', attributes);\n var element = document.getElementById(documentEditor.element.id + '_viewerContainer');\n element.insertBefore(overlap, element.firstChild);\n return overlap;\n };\n RulerHelper.prototype.renderRulerMarkerIndicatorElement = function (documentEditor) {\n if (!documentEditor.enableSelection) {\n return;\n }\n var rulerSize = this.getRulerSize(documentEditor);\n var attributes = {\n 'id': documentEditor.element.id + '_markIndicator',\n style: 'height:' + rulerSize.height + 'px;width:' + rulerSize.width + 'px;position:absolute;margin-left:0;margin-top:0;z-index:5;border:1px solid #ccc;display:' + (documentEditor.layoutType === 'Pages' ? 'block;' : 'none;'),\n class: 'e-de-ruler-markIndicator'\n };\n var markIndicator = this.createHtmlElement('div', attributes);\n this.tabStopStwitch = markIndicator;\n var element = document.getElementById(documentEditor.element.id + '_viewerContainer');\n element.insertBefore(markIndicator, element.firstChild);\n var ownerId = documentEditor.element.id;\n var firstLineIndent = document.getElementById(ownerId + '_firstLineIndent').cloneNode(true);\n var hangingIndent = document.getElementById(ownerId + '_hangingIndent').cloneNode(true);\n firstLineIndent.style.left = '1px';\n firstLineIndent.style.top = rulerSize.height / 2 - 3 + 'px';\n firstLineIndent.style.display = 'none';\n firstLineIndent.classList.add('e-de-ruler-marker');\n firstLineIndent.setAttribute('id', ownerId + '_firstLineIndent_-1');\n hangingIndent.style.left = '1px';\n hangingIndent.style.top = rulerSize.height / 2 - 3 + 'px';\n hangingIndent.style.display = 'none';\n hangingIndent.classList.add('e-de-ruler-marker');\n hangingIndent.setAttribute('id', ownerId + '_hangingIndent_-1');\n markIndicator.appendChild(hangingIndent);\n markIndicator.appendChild(firstLineIndent);\n var justification = ['Left', 'Center', 'Right', 'Decimal', 'Bar'];\n var locale = new L10n('documenteditor', documentEditor.defaultLocale);\n locale.setLocale(documentEditor.locale);\n for (var i = 0; i < 5; i++) {\n this.renderTab(documentEditor, rulerSize, undefined, justification[parseInt(i.toString(), 10)], -1, locale);\n var element_1 = document.getElementById(documentEditor.element.id + '_' + justification[parseInt(i.toString(), 10)] + 'Tab_-1');\n if (!isNullOrUndefined(element_1)) {\n element_1.classList.remove('e-de-ruler-tab');\n element_1.classList.add('e-de-ruler-marker');\n element_1.style.display = i === 0 ? 'block' : 'none';\n element_1.style.position = 'absolute';\n element_1.style.margin = '4px 3px';\n markIndicator.appendChild(element_1);\n }\n }\n markIndicator.addEventListener('click', function (event) {\n var divElements = document.querySelector('.e-de-ruler-markIndicator');\n for (var i = 0; i < divElements.childNodes.length; i++) {\n var currentDiv = divElements.childNodes[parseInt(i.toString(), 10)];\n if (currentDiv.style.display === 'block') {\n currentDiv.style.display = 'none';\n var nextIndex = (i + 1) % divElements.childNodes.length;\n divElements.childNodes[parseInt(nextIndex.toString(), 10)].style.display = 'block';\n break;\n }\n }\n });\n };\n /**\n * renderRuler method \\\n *\n * @returns {void} renderRuler method .\\\n * @param { DocumentEditor} documentEditor - provide the content value.\n * @param { boolean} isHorizontal - provide the content value.\n * @private\n */\n RulerHelper.prototype.renderRuler = function (documentEditor, isHorizontal) {\n var _this = this;\n if (!documentEditor.enableSelection) {\n return;\n }\n var div = document.getElementById(documentEditor.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n var rulerSize = this.getRulerSize(documentEditor);\n var rulerGeometry = this.getRulerGeometry(documentEditor);\n var height = isHorizontal ? documentEditor.selectionModule.end.paragraph.bodyWidget.page.boundingRectangle.x\n : (documentEditor.selectionModule.getPageTop(documentEditor.selectionModule.end.paragraph.bodyWidget.page));\n var margin = isHorizontal ? ('margin-left:' + height + 'px;') : ('margin-top:' + height + 'px;');\n if (documentEditor.selectionModule.isForward) {\n this.position = documentEditor.selectionModule.start;\n }\n else {\n this.position = documentEditor.selectionModule.end;\n }\n // const margin: string = isHorizontal ? ('margin-left:' + (pixelsToPoints(documentEditor.selection.end.paragraph.bodyWidget.page.boundingRectangle.x)) + 'px;') : ('margin-top:' + rulerSize.height + 'px;');\n if (!div) {\n var style_1 = 'height:' + (isHorizontal ? rulerSize.height : rulerGeometry.height) + 'px;overflow:hidden;width:' +\n (isHorizontal ? rulerGeometry.width : rulerSize.width) + 'px;position:absolute;font-size:9px;text-align: left;z-index: 4;user-select:none;' + margin;\n var attributes_1 = {\n 'id': documentEditor.element.id + (isHorizontal ? '_hRuler' : '_vRuler'),\n style: style_1, class: (isHorizontal ? 'e-de-hRuler' : 'e-de-vRuler')\n };\n div = this.createHtmlElement('div', attributes_1);\n }\n div.addEventListener('dblclick', function () {\n documentEditor.showDialog('PageSetup');\n });\n var pageElement = document.getElementById(documentEditor.element.id + '_pageContainer');\n var style = 'height:' + (isHorizontal ? rulerSize.height : pageElement.getBoundingClientRect().height) + 'px;overflow:hidden;width:' +\n (isHorizontal ? pageElement.getBoundingClientRect().width : rulerSize.width) + 'px;position:absolute;z-index: 3;';\n var attributes = {\n 'id': documentEditor.element.id + (isHorizontal ? '_hRulerBottom' : '_vRulerBottom'),\n style: style, class: (isHorizontal ? 'e-de-hRuler' : 'e-de-vRuler')\n };\n var overlap = this.createHtmlElement('div', attributes);\n // isHorizontal ? (this.hRulerBottom = overlap) : (this.vRulerBottom = overlap);\n if (isHorizontal) {\n this.hRulerBottom = overlap;\n }\n else {\n this.vRulerBottom = overlap;\n }\n var parentElement = document.getElementById(documentEditor.element.id + '_viewerContainer');\n parentElement.insertBefore(overlap, parentElement.firstChild);\n var element = isHorizontal ? document.getElementById(documentEditor.element.id + '_hRulerBottom') : document.getElementById(documentEditor.element.id + '_vRulerBottom');\n element.insertBefore(div, element.firstChild);\n this.renderRulerMargins(documentEditor, isHorizontal, div);\n //const documentEditorRuler: DocumentEditorRulerModel = isHorizontal ? documentEditor.documentEditorSettings.rulerSettings.horizontalRuler : documentEditor.documentEditorSettings.rulerSettings.verticalRuler;\n var ruler = new Ruler(div, this);\n ruler.orientation = isHorizontal ? 'Horizontal' : 'Vertical';\n this.updateMargin(ruler, documentEditor, isHorizontal);\n // ruler.pageWidth = documentEditor.selection.end.paragraph.bodyWidget.page.boundingRectangle.width;\n // ruler.pageHeight = documentEditor.selection.end.paragraph.bodyWidget.page.boundingRectangle.height;\n // ruler.length = (isHorizontal ? rulerGeometry.width : rulerGeometry.height) + documentEditorRuler.segmentWidth;\n ruler.length = ruler.zeroPosition * 2;\n ruler.appendTo();\n // eslint-disable-next-line\n isHorizontal ? documentEditor.hRuler = ruler : documentEditor.vRuler = ruler;\n this.updateRulerPosition(documentEditor, isHorizontal);\n var rulerObj = document.getElementById(documentEditor.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n // eslint-disable-next-line\n isHorizontal ? documentEditor.hRuler.element = rulerObj : documentEditor.vRuler.element = rulerObj;\n if (rulerObj) {\n // Set the scrollLeft property to the desired value (e.g., 100 pixels)\n if (isHorizontal) {\n rulerObj.scrollLeft = ruler.zeroPosition -\n HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin);\n }\n else {\n rulerObj.scrollTop = ruler.zeroPosition -\n HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.topMargin);\n }\n }\n this.locale = new L10n('documenteditor', documentEditor.defaultLocale);\n if (isHorizontal) {\n this.renderIndents(documentEditor, isHorizontal, rulerSize, rulerGeometry, this.locale);\n }\n var resizerEnabled = false;\n var isDragging = false;\n var isLeftRulerMargin = undefined;\n var isLeftMultiColumn = false;\n var isRightMultiColumn = false;\n var multiColumnElement;\n var hRuler = document.getElementById(documentEditor.element.id + '_hRuler');\n var columnInitialValue;\n var initialValue;\n var currentScrollLeft;\n var initialRightMargin;\n var finalmouseXRelativeToDiv;\n if (isHorizontal) {\n document.addEventListener('mousemove', function (e) {\n if (documentEditor.isDestroyed || !documentEditor.documentEditorSettings.showRuler) {\n return;\n }\n var divRect = hRuler.getBoundingClientRect();\n var leftMargin = documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin\n * documentEditor.zoomFactor;\n var rightMargin = (HelperMethods.convertPixelToPoint(divRect.width) -\n documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin * documentEditor.zoomFactor);\n var pixelValue = Math.round(e.clientX - divRect.left);\n var mouseXRelativeToDiv = HelperMethods.convertPixelToPoint(pixelValue);\n if (!isDragging) {\n if (documentEditor.isOnIndent) {\n hRuler.style.cursor = 'default';\n if (hRuler.hasAttribute('title')) {\n hRuler.removeAttribute('title');\n }\n resizerEnabled = false;\n }\n else if (((leftMargin - 3) <= mouseXRelativeToDiv) && ((leftMargin + 3) >= mouseXRelativeToDiv)) {\n if (documentEditor.layoutType === 'Pages') {\n hRuler.style.cursor = 'e-resize';\n hRuler.setAttribute('title', _this.locale.getConstant('Left Margin'));\n resizerEnabled = true;\n isLeftRulerMargin = true;\n }\n }\n else if ((((rightMargin - 3) <= mouseXRelativeToDiv) && ((rightMargin + 3) >= mouseXRelativeToDiv))) {\n if (documentEditor.layoutType === 'Pages') {\n hRuler.style.cursor = 'e-resize';\n hRuler.setAttribute('title', _this.locale.getConstant('Right Margin'));\n resizerEnabled = true;\n isLeftRulerMargin = false;\n }\n }\n else if (documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.columns.length > 0) {\n var columns = documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.columns;\n if (documentEditor.layoutType === 'Pages') {\n for (var i = 1; i <= columns.length; i++) {\n var rulerMarginDiv = document.getElementById(documentEditor.element.id + '_hRuler_Margin' + i);\n var maginLeft = rulerMarginDiv.getBoundingClientRect().left;\n var width = rulerMarginDiv.getBoundingClientRect().width;\n if (((maginLeft - 3) <= e.clientX) && ((maginLeft + 3) >= e.clientX)) {\n hRuler.style.cursor = 'e-resize';\n multiColumnElement = rulerMarginDiv;\n hRuler.setAttribute('title', _this.locale.getConstant('Left Margin'));\n isLeftMultiColumn = true;\n resizerEnabled = true;\n break;\n }\n else if (((maginLeft + width - 3) <= e.clientX) && ((maginLeft + width + 3) >= e.clientX)) {\n hRuler.style.cursor = 'e-resize';\n multiColumnElement = rulerMarginDiv;\n hRuler.setAttribute('title', _this.locale.getConstant('Right Margin'));\n isRightMultiColumn = true;\n resizerEnabled = true;\n break;\n }\n else {\n hRuler.style.cursor = 'default';\n if (hRuler.hasAttribute('title')) {\n hRuler.removeAttribute('title');\n }\n isLeftMultiColumn = false;\n isRightMultiColumn = false;\n resizerEnabled = false;\n }\n }\n }\n }\n else {\n hRuler.style.cursor = 'default';\n if (hRuler.hasAttribute('title')) {\n hRuler.removeAttribute('title');\n }\n resizerEnabled = false;\n }\n }\n if (isDragging) {\n var rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n var pageWidth = documentEditor.selectionModule.sectionFormat.pageWidth;\n var rightMarginValue = documentEditor.selectionModule.sectionFormat.rightMargin;\n var rightIndentValue = documentEditor.selectionModule.paragraphFormat.rightIndent;\n rightIndentValue = rightIndentValue > 0 ? rightIndentValue : 0;\n var minimumValue = 42;\n var firstLineIndent = documentEditor.selectionModule.paragraphFormat.firstLineIndent;\n var leftMarginValue = documentEditor.selectionModule.sectionFormat.leftMargin;\n firstLineIndent = firstLineIndent >= 0 ? firstLineIndent : 0;\n var leftIndent = documentEditor.selectionModule.paragraphFormat.leftIndent;\n if (isLeftRulerMargin) {\n var leftMaxLimit = rulerZeroPoint + (HelperMethods.convertPointToPixel(pageWidth - rightMarginValue -\n rightIndentValue - minimumValue - firstLineIndent - leftIndent) * documentEditor.zoomFactor);\n var leftMinLimit = rulerZeroPoint;\n if (pixelValue + rulerZeroPoint > leftMaxLimit) {\n pixelValue = leftMaxLimit - rulerZeroPoint;\n mouseXRelativeToDiv = HelperMethods.convertPixelToPoint(pixelValue);\n }\n else if (pixelValue + rulerZeroPoint < leftMinLimit) {\n pixelValue = leftMinLimit - rulerZeroPoint;\n mouseXRelativeToDiv = HelperMethods.convertPixelToPoint(pixelValue);\n }\n }\n else {\n var rightMinLimit = rulerZeroPoint + (HelperMethods.convertPointToPixel(leftMarginValue + leftIndent + firstLineIndent + minimumValue + rightIndentValue) * documentEditor.zoomFactor);\n var rightMaxLimit = rulerZeroPoint + (HelperMethods.convertPointToPixel(pageWidth) * documentEditor.zoomFactor);\n if (pixelValue + rulerZeroPoint > rightMaxLimit) {\n pixelValue = rightMaxLimit - rulerZeroPoint;\n mouseXRelativeToDiv = HelperMethods.convertPixelToPoint(pixelValue);\n }\n else if (pixelValue + rulerZeroPoint < rightMinLimit) {\n pixelValue = rightMinLimit - rulerZeroPoint;\n mouseXRelativeToDiv = HelperMethods.convertPixelToPoint(pixelValue);\n }\n }\n finalmouseXRelativeToDiv = mouseXRelativeToDiv;\n var currentRightMargin = (HelperMethods.convertPixelToPoint(divRect.width)\n - (documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin * documentEditor.zoomFactor));\n if (documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.numberOfColumns <= 1) {\n _this.resizeRulerMargins(isLeftRulerMargin, initialValue, currentScrollLeft, currentRightMargin, hRuler, mouseXRelativeToDiv, true, documentEditor);\n }\n var rightIndent = document.getElementById(documentEditor.element.id + '_rightIndent');\n if (isLeftRulerMargin) {\n var difference = mouseXRelativeToDiv - initialValue;\n rightIndent.style.left = (initialRightMargin - HelperMethods.convertPointToPixel(difference)) + 'px';\n }\n else {\n var difference = mouseXRelativeToDiv - initialValue;\n rightIndent.style.left = (initialRightMargin + HelperMethods.convertPointToPixel(difference)) + 'px';\n }\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n var indicatorLineValue = startValue + pixelValue;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n }\n });\n var mouseDownTabValue_1;\n var mouseUpTabValue_1;\n hRuler.addEventListener('mouseenter', function (e) {\n if (!isNullOrUndefined(_this.currentTabStopElement)) {\n _this.currentTabStopElement.style.display = 'block';\n }\n });\n hRuler.addEventListener('mouseleave', function (e) {\n if (!isNullOrUndefined(_this.currentTabStopElement)) {\n _this.currentTabStopElement.style.display = 'none';\n //this.currentTabStopElement = undefined;\n }\n });\n hRuler.addEventListener('mousedown', function (e) {\n if (resizerEnabled && !documentEditor.isTableMarkerDragging) {\n isDragging = true;\n if (documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.columns.length > 0) {\n if (isLeftMultiColumn) {\n columnInitialValue = multiColumnElement.getBoundingClientRect().left;\n }\n else if (isRightMultiColumn) {\n columnInitialValue = multiColumnElement.getBoundingClientRect().left\n + multiColumnElement.getBoundingClientRect().width;\n }\n }\n var divRect_1 = hRuler.getBoundingClientRect();\n initialValue = HelperMethods.convertPixelToPoint(Math.round(e.clientX - divRect_1.left));\n currentScrollLeft = hRuler.scrollLeft;\n var rightIndent = document.getElementById(documentEditor.element.id + '_rightIndent');\n initialRightMargin = HelperMethods.getNumberFromString(rightIndent.style.left);\n var pixelValue = Math.round(e.clientX - divRect_1.left);\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n var indicatorLineValue = startValue + pixelValue;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n lineSvg.style.display = 'block';\n }\n var divRect = hRuler.getBoundingClientRect();\n if (divRect.y + (divRect.height / 2) <= e.clientY) {\n mouseDownTabValue_1 = e.clientX - hRuler.getBoundingClientRect().left;\n if (documentEditor.layoutType === 'Pages') {\n mouseDownTabValue_1 = HelperMethods.convertPixelToPoint(mouseDownTabValue_1 - HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin) *\n documentEditor.zoomFactor);\n if (_this.position.paragraph.paragraphFormat.bidi) {\n var paraWidth = !isNullOrUndefined(_this.position.paragraph['absoluteXPosition']) ? parseFloat(_this.position.paragraph['absoluteXPosition']['width'].toString()) : _this.position.paragraph.width;\n paraWidth = HelperMethods.convertPixelToPoint(paraWidth * documentEditor.zoomFactor);\n mouseDownTabValue_1 = paraWidth - mouseDownTabValue_1;\n }\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (_this.position.paragraph.paragraphFormat.bidi) {\n mouseDownTabValue_1 = HelperMethods.convertPixelToPoint((mouseDownTabValue_1) - 20);\n var paraWidth = !isNullOrUndefined(_this.position.paragraph['absoluteXPosition']) ? parseFloat(_this.position.paragraph['absoluteXPosition']['width'].toString()) : _this.position.paragraph.width;\n paraWidth = HelperMethods.convertPixelToPoint(paraWidth * documentEditor.zoomFactor);\n mouseDownTabValue_1 = paraWidth - mouseDownTabValue_1;\n }\n else {\n mouseDownTabValue_1 = HelperMethods.convertPixelToPoint((mouseDownTabValue_1) - 20);\n }\n }\n }\n });\n hRuler.addEventListener('mouseup', function (e) {\n var container = document.getElementById(documentEditor.element.id + '_markIndicator');\n var divRect = hRuler.getBoundingClientRect();\n if (divRect.y + (divRect.height / 2) <= e.clientY) {\n mouseUpTabValue_1 = e.clientX - hRuler.getBoundingClientRect().left;\n if (documentEditor.layoutType === 'Pages') {\n mouseUpTabValue_1 = HelperMethods.convertPixelToPoint(mouseUpTabValue_1 -\n HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin)\n * documentEditor.zoomFactor);\n if (_this.position.paragraph.paragraphFormat.bidi) {\n var paraWidth = !isNullOrUndefined(_this.position.paragraph['absoluteXPosition']) ? parseFloat(_this.position.paragraph['absoluteXPosition']['width'].toString()) : _this.position.paragraph.width;\n paraWidth = HelperMethods.convertPixelToPoint(paraWidth * documentEditor.zoomFactor);\n mouseUpTabValue_1 = paraWidth - mouseUpTabValue_1;\n }\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (_this.position.paragraph.paragraphFormat.bidi) {\n mouseUpTabValue_1 = HelperMethods.convertPixelToPoint((mouseUpTabValue_1) - 20);\n var paraWidth = !isNullOrUndefined(_this.position.paragraph['absoluteXPosition']) ? parseFloat(_this.position.paragraph['absoluteXPosition']['width'].toString()) : _this.position.paragraph.width;\n paraWidth = HelperMethods.convertPixelToPoint(paraWidth * documentEditor.zoomFactor);\n mouseUpTabValue_1 = paraWidth - mouseUpTabValue_1;\n }\n else {\n mouseUpTabValue_1 = HelperMethods.convertPixelToPoint((mouseUpTabValue_1) - 20);\n }\n }\n var rightIndent = document.getElementById(documentEditor.element.id + '_rightIndent');\n var rightIndentValue = HelperMethods.getNumberFromString(rightIndent.style.left);\n var maxValue = rightIndentValue;\n if (mouseUpTabValue_1 > 0 && mouseUpTabValue_1 < maxValue && mouseDownTabValue_1 === mouseUpTabValue_1) {\n if (!isNullOrUndefined(container)) {\n var visibleElement = container.querySelector('.e-de-ruler-marker[style*=\"display: block;\"]');\n if (!isNullOrUndefined(visibleElement)) {\n mouseUpTabValue_1 /= documentEditor.zoomFactor;\n var dataNameValue = visibleElement.getAttribute('data-name');\n if (dataNameValue === 'LeftTab' || dataNameValue === 'CenterTab'\n || dataNameValue === 'RightTab' || dataNameValue === 'DecimalTab' || dataNameValue === 'BarTab') {\n var tabStop = new WTabStop();\n tabStop.position = mouseUpTabValue_1;\n tabStop.tabJustification = _this.getTabJustification(dataNameValue);\n tabStop.deletePosition = 0;\n tabStop.tabLeader = 'None';\n documentEditor.editorModule.onApplyParagraphFormat('tabStop', [tabStop], false, false);\n }\n else if (dataNameValue === 'FirstLineIndent' || dataNameValue === 'HangingIndent') {\n var property = 'firstLineIndent';\n if (dataNameValue === 'HangingIndent') {\n var initialValue_1 = documentEditor.selectionModule.paragraphFormat.firstLineIndent;\n var differenceValue = mouseUpTabValue_1 + initialValue_1;\n var currentValue = documentEditor.selectionModule.start.paragraph.paragraphFormat.firstLineIndent;\n documentEditor.editorModule.onApplyParagraphFormat('firstLineIndent', currentValue - differenceValue, false, false);\n var leftIndentCurrentValue = documentEditor.selectionModule.start.paragraph.paragraphFormat.leftIndent + currentValue;\n currentValue = currentValue - differenceValue;\n documentEditor.editorModule.onApplyParagraphFormat('leftIndent', leftIndentCurrentValue - currentValue, false, false, true);\n }\n else {\n documentEditor.editorModule.onApplyParagraphFormat(property, mouseDownTabValue_1, false, false);\n }\n }\n }\n }\n }\n }\n });\n document.addEventListener('mouseup', function (e) {\n if (isDragging && !documentEditor.isTableMarkerDragging) {\n var divRect = hRuler.getBoundingClientRect();\n var mouseXRelativeToDiv = finalmouseXRelativeToDiv; // HelperMethods.convertPixelToPoint(Math.round(e.clientX - divRect.left));\n // const currentLeftMargin = documentEditor.hRuler.startMargin * documentEditor.zoomFactor;\n // const currentScrollLeft = hRuler.scrollLeft;\n // const currentRightMargin = (HelperMethods.convertPixelToPoint(divRect.width) - (documentEditor.selection.end.paragraph.bodyWidget.sectionFormat.rightMargin * documentEditor.zoomFactor));\n // resizeRulerMargins(isLeftRulerMargin, currentLeftMargin, currentScrollLeft, currentRightMargin, hRuler, mouseXRelativeToDiv, true, documentEditor);\n // if (hRuler) {\n // rulerObj.scrollLeft = rulerObj.scrollLeft - HelperMethods.convertPointToPixel((documentEditor.hRuler.leftMargin < mouseXRelativeToDiv) ? (mouseXRelativeToDiv - documentEditor.hRuler.leftMargin) : (documentEditor.hRuler.leftMargin - mouseXRelativeToDiv));\n // }\n // updateRuler(documentEditor, documentEditor.hRuler, true);\n if (isLeftMultiColumn || isRightMultiColumn) {\n var finalvalue = 0;\n finalvalue = e.clientX - columnInitialValue;\n var secFormat = documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.cloneFormat();\n var pageWidth = documentEditor.selectionModule.sectionFormat.pageWidth\n - documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin -\n documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin;\n var columnSpace = isLeftMultiColumn ? (secFormat.columns[0].space +\n ((HelperMethods.convertPixelToPoint(finalvalue))))\n : (secFormat.columns[0].space - ((HelperMethods.convertPixelToPoint(finalvalue))));\n for (var i = 0; i < secFormat.columns.length; i++) {\n var col = secFormat.columns[parseInt(i.toString(), 10)];\n if (columnSpace >= 0 && col.width >= 36) {\n var widthCal = HelperMethods.convertPointToPixel((pageWidth - (HelperMethods.convertPixelToPoint(columnSpace) * (secFormat.numberOfColumns - 1))) / (secFormat.numberOfColumns));\n col.width = widthCal;\n if (i < secFormat.columns.length - 1) {\n col.space = columnSpace;\n }\n }\n else {\n col[0].space = col[1].space;\n }\n }\n documentEditor.editorModule.onApplySectionFormat(undefined, secFormat);\n isLeftMultiColumn = false;\n isRightMultiColumn = false;\n }\n else if (isLeftRulerMargin) {\n documentEditor.hRuler.startMargin = (mouseXRelativeToDiv / documentEditor.zoomFactor);\n documentEditor.selectionModule.sectionFormat.leftMargin = mouseXRelativeToDiv / documentEditor.zoomFactor;\n }\n else {\n var rightMargin = HelperMethods.convertPixelToPoint(rulerGeometry.width) - (mouseXRelativeToDiv / documentEditor.zoomFactor);\n // documentEditor.hRuler.endMargin = rightMargin;\n documentEditor.selectionModule.sectionFormat.rightMargin = rightMargin;\n }\n resizerEnabled = false;\n isDragging = false;\n isLeftRulerMargin = undefined;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.display = 'none';\n }\n });\n }\n //Vertical Ruler Resizing\n var vRuler = document.getElementById(documentEditor.element.id + '_vRuler');\n var isTopRulerMargin = false;\n var initialYValue;\n var currentScrollTop;\n if (!isHorizontal) {\n document.addEventListener('mousemove', function (e) {\n if (documentEditor.isDestroyed || !documentEditor.documentEditorSettings.showRuler) {\n return;\n }\n var divRect = vRuler.getBoundingClientRect();\n var topMargin = documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.topMargin\n * documentEditor.zoomFactor;\n var bottomMargin = (HelperMethods.convertPixelToPoint(divRect.height) - documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.bottomMargin\n * documentEditor.zoomFactor);\n var mouseXRelativeToDiv = HelperMethods.convertPixelToPoint(Math.round(e.clientY - divRect.top));\n var pixelValue = Math.round(e.clientY - divRect.top);\n if (!isDragging) {\n if (((topMargin - 3) <= mouseXRelativeToDiv) && ((topMargin + 3) >= mouseXRelativeToDiv)) {\n vRuler.style.cursor = 'n-resize';\n vRuler.setAttribute('title', _this.locale.getConstant('Top Margin'));\n resizerEnabled = true;\n isTopRulerMargin = true;\n }\n else if ((((bottomMargin - 3) <= mouseXRelativeToDiv) && ((bottomMargin + 3) >= mouseXRelativeToDiv))) {\n vRuler.style.cursor = 'n-resize';\n vRuler.setAttribute('title', _this.locale.getConstant('Bottom Margin'));\n resizerEnabled = true;\n isTopRulerMargin = false;\n }\n else {\n vRuler.style.cursor = 'default';\n if (vRuler.hasAttribute('title')) {\n vRuler.removeAttribute('title');\n }\n resizerEnabled = false;\n }\n }\n if (isDragging) {\n var mouseXRelativeToDiv_1 = HelperMethods.convertPixelToPoint(Math.round(e.clientY - divRect.top));\n var rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.topMargin)\n * documentEditor.zoomFactor;\n var pageHeight = documentEditor.selectionModule.sectionFormat.pageHeight;\n var minimumValue = 12;\n var bottomMarginValue = documentEditor.selectionModule.sectionFormat.bottomMargin;\n var topMarginValue = documentEditor.selectionModule.sectionFormat.topMargin;\n if (isTopRulerMargin) {\n var topMinLimit = rulerZeroPoint;\n var topMaxLimit = rulerZeroPoint + (HelperMethods.convertPointToPixel(pageHeight - bottomMarginValue - minimumValue) * documentEditor.zoomFactor);\n if (pixelValue + rulerZeroPoint > topMaxLimit) {\n pixelValue = topMaxLimit - rulerZeroPoint;\n mouseXRelativeToDiv_1 = HelperMethods.convertPixelToPoint(pixelValue);\n }\n else if (pixelValue + rulerZeroPoint < topMinLimit) {\n pixelValue = topMinLimit - rulerZeroPoint;\n mouseXRelativeToDiv_1 = HelperMethods.convertPixelToPoint(pixelValue);\n }\n }\n else {\n var bottomMinLimit = rulerZeroPoint + (HelperMethods.convertPointToPixel(topMarginValue + minimumValue) * documentEditor.zoomFactor);\n var bottomMaxLimit = rulerZeroPoint + (HelperMethods.convertPointToPixel(pageHeight) * documentEditor.zoomFactor);\n if (pixelValue + rulerZeroPoint > bottomMaxLimit) {\n pixelValue = bottomMaxLimit - rulerZeroPoint;\n mouseXRelativeToDiv_1 = HelperMethods.convertPixelToPoint(pixelValue);\n }\n else if (pixelValue + rulerZeroPoint < bottomMinLimit) {\n pixelValue = bottomMinLimit - rulerZeroPoint;\n mouseXRelativeToDiv_1 = HelperMethods.convertPixelToPoint(pixelValue);\n }\n }\n var currentBottomMargin = (HelperMethods.convertPixelToPoint(divRect.height) -\n (documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.bottomMargin * documentEditor.zoomFactor));\n _this.resizeVRulerMargins(isTopRulerMargin, initialYValue, currentScrollTop, currentBottomMargin, vRuler, mouseXRelativeToDiv_1, documentEditor);\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.y * documentEditor.zoomFactor;\n var indicatorLineValue = startValue + pixelValue; // + 15;\n var lineSvg = document.getElementById(documentEditor.element.id + '_vRuler_indicator_svg');\n lineSvg.style.top = indicatorLineValue + 'px';\n }\n });\n vRuler.addEventListener('mousedown', function (e) {\n if (resizerEnabled) {\n isDragging = true;\n var divRect = vRuler.getBoundingClientRect();\n initialYValue = HelperMethods.convertPixelToPoint(Math.round(e.clientY - divRect.top));\n currentScrollTop = vRuler.scrollTop;\n var pixelValue = Math.round(e.clientY - divRect.top);\n var lineSvg = document.getElementById(documentEditor.element.id + '_vRuler_indicator_svg');\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.y * documentEditor.zoomFactor;\n var indicatorLineValue = (startValue + pixelValue); // + 15;\n lineSvg.style.top = indicatorLineValue + 'px';\n lineSvg.style.display = 'block';\n }\n });\n document.addEventListener('mouseup', function (e) {\n if (isDragging) {\n var divRect = vRuler.getBoundingClientRect();\n var mouseXRelativeToDiv = HelperMethods.convertPixelToPoint(Math.round(e.clientY - divRect.top));\n // const currentTopMargin = documentEditor.hRuler.startMargin * documentEditor.zoomFactor;\n // const currentScrollTop = vRuler.scrollTop;\n // const currentBottomMargin = (HelperMethods.convertPixelToPoint(divRect.height) - (documentEditor.selection.end.paragraph.bodyWidget.sectionFormat.bottomMargin * documentEditor.zoomFactor));\n // resizeVRulerMargins(isTopRulerMargin, currentTopMargin, currentScrollTop, currentBottomMargin, vRuler, mouseXRelativeToDiv, documentEditor);\n // if (hRuler) {\n // rulerObj.scrollLeft = rulerObj.scrollLeft - HelperMethods.convertPointToPixel((documentEditor.hRuler.leftMargin < mouseXRelativeToDiv) ? (mouseXRelativeToDiv - documentEditor.hRuler.leftMargin) : (documentEditor.hRuler.leftMargin - mouseXRelativeToDiv));\n // }\n // updateRuler(documentEditor, documentEditor.hRuler, true);\n if (isTopRulerMargin) {\n documentEditor.vRuler.startMargin = (mouseXRelativeToDiv / documentEditor.zoomFactor);\n documentEditor.selectionModule.sectionFormat.topMargin = mouseXRelativeToDiv / documentEditor.zoomFactor;\n }\n else {\n var bottomtMargin = HelperMethods.convertPixelToPoint(rulerGeometry.height) - (mouseXRelativeToDiv / documentEditor.zoomFactor);\n documentEditor.vRuler.endMargin = bottomtMargin;\n documentEditor.selectionModule.sectionFormat.bottomMargin = bottomtMargin;\n }\n resizerEnabled = false;\n isDragging = false;\n var lineSvg = document.getElementById(documentEditor.element.id + '_vRuler_indicator_svg');\n lineSvg.style.display = 'none';\n isTopRulerMargin = undefined;\n }\n });\n }\n };\n RulerHelper.prototype.updateRulerPosition = function (documentEditor, isHorizontal) {\n var rulerObj = document.getElementById(documentEditor.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n // eslint-disable-next-line\n isHorizontal ? documentEditor.hRuler.element = rulerObj : documentEditor.vRuler.element = rulerObj;\n if (rulerObj) {\n // Set the scrollLeft property to the desired value (e.g., 100 pixels)\n rulerObj.scrollLeft = 2112 - HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin);\n }\n };\n RulerHelper.prototype.updateIndicatorLines = function (documentEditor) {\n var hRulerSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n var hRulerLine = document.getElementById(documentEditor.element.id + '_hRuler_indicator');\n var vRulerSvg = document.getElementById(documentEditor.element.id + '_vRuler_indicator_svg');\n var vRulerLine = document.getElementById(documentEditor.element.id + '_vRuler_indicator');\n var pageContainer = document.getElementById(documentEditor.element.id + '_pageContainer');\n var pageData = pageContainer.getBoundingClientRect();\n var pageHeight = pageData.height;\n var pageWidth = pageData.width;\n hRulerSvg.style.height = pageHeight + 'px';\n hRulerLine.setAttribute('y2', \"\" + pageHeight);\n vRulerSvg.style.width = pageWidth + 'px';\n vRulerLine.setAttribute('x2', \"\" + pageWidth);\n };\n RulerHelper.prototype.createIndicatorLines = function (documentEditor) {\n if (!documentEditor.enableSelection) {\n return;\n }\n var viewerContainer = document.getElementById(documentEditor.element.id + '_viewerContainer');\n var pageContainer = document.getElementById(documentEditor.element.id + '_pageContainer');\n // let container = document.getElementById(documentEditor.element.id);\n var data = viewerContainer.getBoundingClientRect();\n var pageData = pageContainer.getBoundingClientRect();\n var pageHeight = pageData.height;\n var pageWidth = pageData.width;\n var hRuler = document.getElementById(documentEditor.element.id + '_hRuler');\n var hSvgAttr = {\n id: documentEditor.element.id + '_hRuler_indicator_svg',\n width: 0.5 + 'px',\n height: pageHeight + 'px',\n style: 'position:absolute;z-index:1;display:none;'\n };\n var hSvg = this.createSvgElement('svg', hSvgAttr);\n var verticalLineAttr = { 'x1': 0, 'y1': hRuler.getBoundingClientRect().height + 5, 'x2': 0, 'y2': pageHeight, 'stroke-width': 0.5, 'stroke': 'black' };\n var vLine = this.createSvgElement('line', verticalLineAttr);\n vLine.setAttribute('id', documentEditor.element.id + '_hRuler_indicator');\n hSvg.appendChild(vLine);\n viewerContainer.insertBefore(hSvg, viewerContainer.firstChild);\n var vRuler = document.getElementById(documentEditor.element.id + '_vRuler');\n var vSvgAttr = {\n id: documentEditor.element.id + '_vRuler_indicator_svg',\n width: pageWidth + 'px',\n height: 0.5 + 'px',\n style: 'position:absolute;z-index:1;display:none;'\n };\n var vSvg = this.createSvgElement('svg', vSvgAttr);\n var horizontalLineAttr = { 'x1': vRuler.getBoundingClientRect().width + 5, 'y1': 0, 'x2': pageWidth, 'y2': 0, 'stroke-width': 0.5, 'stroke': 'black' };\n var hLine = this.createSvgElement('line', horizontalLineAttr);\n hLine.setAttribute('id', documentEditor.element.id + '_vRuler_indicator');\n vSvg.appendChild(hLine);\n viewerContainer.insertBefore(vSvg, viewerContainer.firstChild);\n };\n RulerHelper.prototype.updateIndentMarkers = function (documentEditor) {\n if (isNullOrUndefined(documentEditor) || isNullOrUndefined(documentEditor.element)\n || isNullOrUndefined(documentEditor.element.id) || isNullOrUndefined(documentEditor.hRuler)\n || isNullOrUndefined(documentEditor.hRuler.zeroPosition)) {\n return;\n }\n var indent = undefined;\n var ownerId = documentEditor.element.id;\n var rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin);\n var currentIndentValue;\n var finalValue;\n var currentMargin;\n var pixelValue;\n // if (documentEditor.selection.end.paragraph.isInsideTable) {\n // currentIndentValue = documentEditor.selection.paragraphFormat.leftIndent;\n // currentMargin = documentEditor.selection.sectionFormat.leftMargin;\n // finalValue = HelperMethods.convertPointToPixel(currentIndentValue) + currentCell.x;\n // pixelValue = (((rulerZeroPoint + ((finalValue))) * documentEditor.zoomFactor)) + 'px';\n // indent = document.getElementById(ownerId + '_leftIndent');\n // if (!isNullOrUndefined(indent)) {\n // indent.style.left = pixelValue;\n // }\n // indent = document.getElementById(ownerId + '_hangingIndent');\n // if (!isNullOrUndefined(indent)) {\n // indent.style.left = pixelValue;\n // }\n // indent = document.getElementById(ownerId + '_firstLineIndent');\n // currentIndentValue = documentEditor.selection.paragraphFormat.firstLineIndent;\n // currentMargin = documentEditor.selection.paragraphFormat.leftIndent;\n // finalValue = HelperMethods.convertPointToPixel(currentIndentValue + currentMargin) + currentCell.x;\n // pixelValue = (((rulerZeroPoint + ((finalValue))) * documentEditor.zoomFactor)) + 'px';\n // if (!isNullOrUndefined(indent)) {\n // indent.style.left = pixelValue;\n // }\n // indent = document.getElementById(ownerId + '_rightIndent');\n // currentIndentValue = documentEditor.selection.paragraphFormat.rightIndent;\n // currentMargin = documentEditor.selection.sectionFormat.rightMargin;\n // finalValue = (currentCell.x + currentCell.width) - HelperMethods.convertPointToPixel(currentIndentValue);\n // pixelValue = ((rulerZeroPoint + finalValue - 2) * documentEditor.zoomFactor) + 'px';\n // if (!isNullOrUndefined(indent)) {\n // indent.style.left = pixelValue;\n // }\n // }\n // else {\n // indent = document.getElementById(ownerId + '_leftIndent');\n // currentIndentValue = documentEditor.selection.paragraphFormat.leftIndent;\n // currentMargin = documentEditor.selection.sectionFormat.leftMargin;\n // finalValue = currentMargin + currentIndentValue;\n // pixelValue = (((rulerZeroPoint + (HelperMethods.convertPointToPixel(finalValue))) * documentEditor.zoomFactor) - 6) + 'px';\n // if (!isNullOrUndefined(indent)) {\n // indent.style.left = pixelValue;\n // }\n // indent = document.getElementById(ownerId + '_hangingIndent');\n // if (!isNullOrUndefined(indent)) {\n // indent.style.left = pixelValue;\n // }\n // indent = document.getElementById(ownerId + '_firstLineIndent');\n // currentIndentValue = documentEditor.selection.paragraphFormat.firstLineIndent;\n // let leftIndent = documentEditor.selection.paragraphFormat.leftIndent;\n // let leftMargin = documentEditor.selection.sectionFormat.leftMargin;\n // if (currentIndentValue < 0 && leftIndent < 0) {\n // currentIndentValue = currentIndentValue < 0 ? 0 : currentIndentValue;\n // }\n // finalValue = leftMargin + leftIndent + currentIndentValue;\n // pixelValue = (((rulerZeroPoint + HelperMethods.convertPointToPixel(finalValue)) * documentEditor.zoomFactor) - 6) + 'px';\n // if (!isNullOrUndefined(indent)) {\n // indent.style.left = pixelValue;\n // }\n // indent = document.getElementById(ownerId + '_rightIndent');\n // currentIndentValue = documentEditor.selection.paragraphFormat.rightIndent;\n // currentMargin = documentEditor.selection.sectionFormat.rightMargin;\n // finalValue = documentEditor.selection.sectionFormat.pageWidth - (currentIndentValue + currentMargin);\n // pixelValue = (((rulerZeroPoint + HelperMethods.convertPointToPixel(finalValue)) * documentEditor.zoomFactor) - 6) + 'px';\n // if (!isNullOrUndefined(indent)) {\n // indent.style.left = pixelValue;\n // }\n // }\n var rulerGeometry = this.getRulerGeometry(documentEditor);\n if (this.position.paragraph.paragraphFormat.bidi || (this.position.paragraph.isInsideTable\n && this.position.paragraph.associatedCell.ownerTable.tableFormat.bidi)) {\n var rulerMarginDivWidth = ((rulerGeometry.width / documentEditor.zoomFactor) -\n (HelperMethods.convertPointToPixel((this.position.paragraph.bodyWidget.sectionFormat.rightMargin)\n + (this.position.paragraph.bodyWidget.sectionFormat.leftMargin))));\n rulerZeroPoint -= rulerMarginDivWidth;\n }\n var paraStart = !isNullOrUndefined(this.position.paragraph['absoluteXPosition']) ? parseFloat(this.position.paragraph['absoluteXPosition']['x'].toString()) : this.position.paragraph.x;\n var paraWidth = !isNullOrUndefined(this.position.paragraph['absoluteXPosition']) ? parseFloat(this.position.paragraph['absoluteXPosition']['width'].toString()) : this.position.paragraph.width;\n var finalValueTemp;\n if (this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin -\n (documentEditor.selectionModule.sectionFormat.pageWidth -\n documentEditor.selectionModule.sectionFormat.leftMargin -\n documentEditor.selectionModule.sectionFormat.rightMargin));\n }\n var leftIndent = document.getElementById(documentEditor.element.id + '_leftIndent');\n var rightIndent = document.getElementById(documentEditor.element.id + '_rightIndent');\n if (this.position.paragraph.paragraphFormat.bidi) {\n leftIndent.setAttribute('title', this.locale.getConstant('Right Indent'));\n rightIndent.setAttribute('title', this.locale.getConstant('Left Indent'));\n finalValueTemp = rulerZeroPoint + paraStart + paraWidth;\n }\n else {\n leftIndent.setAttribute('title', this.locale.getConstant('Left Indent'));\n rightIndent.setAttribute('title', this.locale.getConstant('Right Indent'));\n finalValueTemp = rulerZeroPoint + paraStart;\n }\n var firstLineIndent = this.position.paragraph.paragraphFormat.firstLineIndent;\n indent = document.getElementById(ownerId + '_leftIndent');\n if (!isNullOrUndefined(indent)) {\n if (documentEditor.layoutType === 'Pages') {\n indent.style.left = ((finalValueTemp * documentEditor.zoomFactor) - 6) + 'px';\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - documentEditor.viewer.clientArea.width;\n finalValueTemp = rulerZeroPoint + paraStart + paraWidth;\n indent.style.left = finalValueTemp + 'px';\n }\n else {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n finalValueTemp = rulerZeroPoint + (paraStart * documentEditor.zoomFactor);\n indent.style.left = finalValueTemp + 'px';\n }\n }\n }\n indent = document.getElementById(ownerId + '_hangingIndent');\n if (!isNullOrUndefined(indent)) {\n if (documentEditor.layoutType === 'Pages') {\n indent.style.left = ((finalValueTemp * documentEditor.zoomFactor) - 6) + 'px';\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - documentEditor.viewer.clientArea.width;\n finalValueTemp = rulerZeroPoint + paraStart + paraWidth;\n indent.style.left = finalValueTemp + 'px';\n }\n else {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n finalValueTemp = rulerZeroPoint + (paraStart * documentEditor.zoomFactor);\n indent.style.left = finalValueTemp + 'px';\n }\n }\n }\n indent = document.getElementById(ownerId + '_firstLineIndent');\n if (documentEditor.layoutType === 'Pages') {\n if (!isNullOrUndefined(indent)) {\n if (this.position.paragraph.paragraphFormat.bidi) {\n indent.style.left = (((finalValueTemp - HelperMethods.convertPointToPixel(firstLineIndent)) * documentEditor.zoomFactor) - 6) + 'px';\n }\n else {\n indent.style.left = (((finalValueTemp + HelperMethods.convertPointToPixel(firstLineIndent)) * documentEditor.zoomFactor) - 6) + 'px';\n }\n }\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - documentEditor.viewer.clientArea.width;\n finalValueTemp = rulerZeroPoint + paraStart + paraWidth - (HelperMethods.convertPointToPixel(firstLineIndent) * documentEditor.zoomFactor);\n }\n else {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n finalValueTemp = rulerZeroPoint + ((paraStart + HelperMethods.convertPointToPixel(firstLineIndent)) * documentEditor.zoomFactor);\n }\n indent.style.left = finalValueTemp + 'px';\n }\n indent = document.getElementById(ownerId + '_rightIndent');\n if (documentEditor.layoutType === 'Pages') {\n if (this.position.paragraph.paragraphFormat.bidi) {\n finalValueTemp = rulerZeroPoint + paraStart;\n }\n else {\n finalValueTemp = rulerZeroPoint + paraStart + paraWidth;\n }\n if (!isNullOrUndefined(indent)) {\n indent.style.left = ((finalValueTemp * documentEditor.zoomFactor) - 6) + 'px';\n }\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n finalValueTemp = rulerZeroPoint + paraStart;\n indent.style.left = finalValueTemp + 'px';\n }\n else {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n finalValueTemp = rulerZeroPoint + ((paraStart + paraWidth) * documentEditor.zoomFactor);\n indent.style.left = finalValueTemp + 'px';\n }\n }\n };\n RulerHelper.prototype.updateTabStopMarkers = function (documentEditor) {\n if (isNullOrUndefined(documentEditor) || isNullOrUndefined(documentEditor.element)\n || isNullOrUndefined(documentEditor.element.id) || isNullOrUndefined(documentEditor.hRuler)\n || isNullOrUndefined(documentEditor.hRuler.zeroPosition)) {\n return;\n }\n var locale = new L10n('documenteditor', documentEditor.defaultLocale);\n locale.setLocale(documentEditor.locale);\n var ownerId = documentEditor.element.id;\n var element = document.getElementById(ownerId + '_markIndicator');\n element.style.display = documentEditor.layoutType === 'Pages' ? 'block' : 'none';\n var paragarph = this.position.paragraph;\n var tabs = paragarph.paragraphFormat.tabs;\n var zoomFactor = documentEditor.zoomFactor;\n var rulerSize = this.getRulerSize(documentEditor);\n var RenderedTabElement = HelperMethods.convertNodeListToArray(document.querySelectorAll('.e-de-ruler-tab'));\n for (var i = 0; i < tabs.length; i++) {\n var tabStop = tabs[parseInt(i.toString(), 10)];\n var justification = tabStop.tabJustification;\n // const position: number = tabStop.position;\n var id = documentEditor.element.id + '_' + justification + 'Tab_' + i.toString();\n var tabMarker = document.getElementById(id);\n if (!isNullOrUndefined(tabMarker)) {\n if (!isNullOrUndefined(RenderedTabElement) && RenderedTabElement.length > 0) {\n RenderedTabElement.splice(RenderedTabElement.indexOf(tabMarker), 1);\n }\n var value = this.position.paragraph.paragraphFormat.bidi ?\n (HelperMethods.convertPointToPixel(1584 - tabStop.position))\n : (HelperMethods.convertPointToPixel(1584 + tabStop.position));\n if (justification === 'Center' || justification === 'Decimal') {\n tabMarker.style.left = ((value * zoomFactor) - 4) + 'px';\n }\n else if (justification === 'Right') {\n tabMarker.style.left = ((value * zoomFactor) - 5.5) + 'px';\n }\n else {\n tabMarker.style.left = ((value * zoomFactor) - 1.5) + 'px';\n }\n }\n else {\n if (justification !== 'List') {\n this.renderTab(documentEditor, rulerSize, tabStop, justification, i, locale);\n }\n }\n }\n if (!isNullOrUndefined(RenderedTabElement)) {\n for (var i = 0; i < RenderedTabElement.length; i++) {\n var elementToRemove = RenderedTabElement[parseInt(i.toString(), 10)];\n if (!isNullOrUndefined(elementToRemove)) {\n elementToRemove.parentNode.removeChild(elementToRemove);\n }\n }\n }\n };\n RulerHelper.prototype.renderRulerMargins = function (documentEditor, isHorizontal, rulerContainer) {\n var rulerSize = this.getRulerSize(documentEditor);\n var rulerGeometry = this.getRulerGeometry(documentEditor);\n var height = isHorizontal ? documentEditor.selectionModule.end.paragraph.bodyWidget.page.boundingRectangle.x\n : (documentEditor.selectionModule.end.paragraph.bodyWidget.page.boundingRectangle.y + rulerSize.height);\n // const margin: string = isHorizontal ? ('margin-left:' + height + 'px;') : ('margin-top:' + height + 'px;');\n //const leftMarginValue = 2112 - (HelperMethods.convertPointToPixel(documentEditor.selection.end.paragraph.bodyWidget.sectionFormat.leftMargin));\n var leftMarginValue = 2112 * documentEditor.zoomFactor;\n var rulerMarginDiv;\n var rulerMargin = isHorizontal ? ('margin-left:' + leftMarginValue + 'px;') : ('margin-top:' + leftMarginValue + 'px;');\n var rulerHeight = (isHorizontal ? rulerSize.height : (rulerGeometry.height -\n (HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.topMargin\n + documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.bottomMargin) * documentEditor.zoomFactor)));\n // const rulerHeight = (isHorizontal ? rulerSize.height : rulerGeometry.height);\n if (isHorizontal) {\n for (var i = 1; i <= 13; i++) {\n rulerMarginDiv = document.getElementById(documentEditor.element.id + '_hRuler_Margin' + i);\n if (!rulerMarginDiv) {\n var rulerstyle = 'height:' + rulerHeight + 'px;overflow:hidden;width:' +\n (rulerGeometry.width - (HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin + documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin) * documentEditor.zoomFactor)) + 'px;position:absolute;' + 'font-size:9px;text-align: left;z-index: -1;display: block' + rulerMargin;\n var rulerattributes = {\n 'id': documentEditor.element.id + '_hRuler_Margin' + i,\n style: rulerstyle,\n class: 'e-de-ruler-margin'\n };\n rulerMarginDiv = this.createHtmlElement('div', rulerattributes);\n }\n rulerContainer.appendChild(rulerMarginDiv);\n }\n }\n else {\n if (!rulerMarginDiv) {\n rulerMarginDiv = document.getElementById(documentEditor.element.id + '_vRuler_Margin');\n var rulerstyle = 'height:' + rulerHeight + 'px;overflow:hidden;width:' +\n rulerSize.width + 'px;position:absolute;' + 'font-size:9px;text-align: left;z-index: -1;' + rulerMargin;\n var rulerattributes = {\n 'id': documentEditor.element.id + '_vRuler_Margin',\n style: rulerstyle,\n class: 'e-de-ruler-margin'\n };\n rulerMarginDiv = this.createHtmlElement('div', rulerattributes);\n }\n rulerContainer.appendChild(rulerMarginDiv);\n }\n };\n RulerHelper.prototype.updateRulerMargins = function (documentEditor) {\n var rulerGeometry = this.getRulerGeometry(documentEditor);\n var leftMarginValue = (documentEditor.hRuler.zeroPosition) * documentEditor.zoomFactor;\n this.updateHorizontalRulerMargin(documentEditor);\n var verticalRulerMarginDiv = document.getElementById(documentEditor.element.id + '_vRuler_Margin');\n var rulerMarginDivHeight = rulerGeometry.height - (HelperMethods.convertPointToPixel((documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.bottomMargin\n * documentEditor.zoomFactor) + (documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.topMargin\n * documentEditor.zoomFactor)));\n verticalRulerMarginDiv.style.marginTop = leftMarginValue + 'px';\n verticalRulerMarginDiv.style.height = rulerMarginDivHeight + 'px';\n };\n RulerHelper.prototype.updateHorizontalRulerMargin = function (documentEditor) {\n var columns = documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.columns;\n var leftMarginValue = (documentEditor.hRuler.zeroPosition) * documentEditor.zoomFactor;\n var skipLoop = false;\n var paraBidi = this.position.paragraph.paragraphFormat.bidi;\n var tableBidi = false;\n var currnLefttMargin = HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin - 72);\n var currentRightMargin = HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin - 72);\n if (this.position.paragraph.isInsideTable) {\n tableBidi = this.position.paragraph.associatedCell.ownerTable.tableFormat.bidi;\n }\n var rulerMarginDivWidth = (this.getRulerGeometry(documentEditor).width -\n (HelperMethods.convertPointToPixel((documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin\n * documentEditor.zoomFactor) + (documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin\n * documentEditor.zoomFactor))));\n if (paraBidi || tableBidi) {\n leftMarginValue = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - rulerMarginDivWidth;\n }\n for (var i = 0; i < 13; i++) {\n var horizontalRulerMarginDiv = document.getElementById(documentEditor.element.id + '_hRuler_Margin' + (i + 1));\n if (horizontalRulerMarginDiv) {\n if ((columns.length === 0 && !skipLoop) || (documentEditor.layoutType === 'Continuous' && !skipLoop)) {\n if (paraBidi || tableBidi) {\n var startValue = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - rulerMarginDivWidth;\n horizontalRulerMarginDiv.style.marginLeft = startValue + 'px';\n }\n else {\n horizontalRulerMarginDiv.style.marginLeft = leftMarginValue + 'px';\n }\n horizontalRulerMarginDiv.style.display = 'block';\n if (documentEditor.layoutType === 'Continuous') {\n var paraWidth = !isNullOrUndefined(this.position.paragraph['absoluteXPosition']) ? parseFloat(this.position.paragraph['absoluteXPosition']['width'].toString()) : this.position.paragraph.width;\n horizontalRulerMarginDiv.style.width = (paraWidth * documentEditor.zoomFactor) + 'px';\n }\n else {\n horizontalRulerMarginDiv.style.width = rulerMarginDivWidth + 'px';\n }\n skipLoop = true;\n }\n else if ((columns.length >= i + 1) && documentEditor.layoutType === 'Pages') {\n if (paraBidi || tableBidi) {\n horizontalRulerMarginDiv.style.marginLeft = leftMarginValue + 'px';\n leftMarginValue -= ((currnLefttMargin + currentRightMargin) / (columns.length)) * documentEditor.zoomFactor;\n leftMarginValue = leftMarginValue + (columns[parseInt(i.toString(), 10)].width +\n columns[parseInt(i.toString(), 10)].space) * documentEditor.zoomFactor;\n }\n else {\n horizontalRulerMarginDiv.style.marginLeft = leftMarginValue + 'px';\n leftMarginValue -= ((currnLefttMargin + currentRightMargin) / (columns.length)) * documentEditor.zoomFactor;\n leftMarginValue = leftMarginValue + (columns[parseInt(i.toString(), 10)].width +\n columns[parseInt(i.toString(), 10)].space) * documentEditor.zoomFactor;\n }\n horizontalRulerMarginDiv.style.display = 'block';\n horizontalRulerMarginDiv.style.width = (columns[parseInt(i.toString(), 10)].width - ((currnLefttMargin + currentRightMargin) / columns.length)) * documentEditor.zoomFactor + 'px';\n }\n else {\n horizontalRulerMarginDiv.style.display = 'none';\n }\n }\n }\n };\n RulerHelper.prototype.resizeVRulerMargins = function (isRulerTopMargin, currentTopMargin, currentScrollTop, currentBottomMargin, ruler, mousePosition, documentEditor) {\n var rulerMarginDiv = document.getElementById(documentEditor.element.id + '_vRuler_Margin');\n var rulerGeometry = this.getRulerGeometry(documentEditor);\n if (isRulerTopMargin) {\n rulerMarginDiv.style.height = (rulerGeometry.height - HelperMethods.convertPointToPixel((documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.bottomMargin * documentEditor.zoomFactor) + mousePosition)).toString() + 'px';\n if (currentTopMargin < mousePosition) {\n ruler.scrollTop = currentScrollTop - HelperMethods.convertPointToPixel(mousePosition - currentTopMargin);\n }\n else {\n ruler.scrollTop = currentScrollTop + HelperMethods.convertPointToPixel(currentTopMargin - mousePosition);\n }\n }\n else {\n var bottomMargin = HelperMethods.convertPixelToPoint(rulerGeometry.height) - mousePosition;\n rulerMarginDiv.style.height = (rulerGeometry.height - HelperMethods.convertPointToPixel((documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.topMargin * documentEditor.zoomFactor) + (bottomMargin))).toString() + 'px';\n if (currentBottomMargin < mousePosition) {\n // ruler.scrollLeft = currentScrollLeft - HelperMethods.convertPointToPixel(mousePosition - currentRightMargin);\n }\n else {\n // ruler.scrollLeft = currentScrollLeft + HelperMethods.convertPointToPixel(currentRightMargin - mousePosition);\n }\n }\n };\n RulerHelper.prototype.resizeRulerMargins = function (isRulerLeftMargin, currentLeftMargin, currentScrollLeft, currentRightMargin, ruler, mousePosition, isHorizontal, documentEditor) {\n var rulerMarginDiv = document.getElementById(documentEditor.element.id + (isHorizontal ? '_hRuler_Margin1' : '_vRuler_Margin'));\n var rulerGeometry = this.getRulerGeometry(documentEditor);\n if (!isNullOrUndefined(isRulerLeftMargin) && isRulerLeftMargin) {\n rulerMarginDiv.style.width = (rulerGeometry.width - HelperMethods.convertPointToPixel((documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin * documentEditor.zoomFactor) + mousePosition)).toString() + 'px';\n if (currentLeftMargin < mousePosition) {\n ruler.scrollLeft = currentScrollLeft - HelperMethods.convertPointToPixel(mousePosition - currentLeftMargin);\n }\n else {\n ruler.scrollLeft = currentScrollLeft + HelperMethods.convertPointToPixel(currentLeftMargin - mousePosition);\n }\n }\n else {\n var rightMargin = HelperMethods.convertPixelToPoint(rulerGeometry.width) - mousePosition;\n rulerMarginDiv.style.width = (rulerGeometry.width - HelperMethods.convertPointToPixel((documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin * documentEditor.zoomFactor) + (rightMargin))).toString() + 'px';\n if (currentRightMargin < mousePosition) {\n // ruler.scrollLeft = currentScrollLeft - HelperMethods.convertPointToPixel(mousePosition - currentRightMargin);\n }\n else {\n // ruler.scrollLeft = currentScrollLeft + HelperMethods.convertPointToPixel(currentRightMargin - mousePosition);\n }\n }\n };\n RulerHelper.prototype.getRulerOrigin = function () {\n var range = 1584;\n var pixelValue = HelperMethods.convertPointToPixel(1584);\n //console.log('PixelValue: ', pixelValue);\n //console.log('PointsValue: ', range);\n };\n RulerHelper.prototype.renderIndents = function (documentEditor, isHorizontal, rulerSize, rulerGeometry, locale) {\n var _this = this;\n var hRuler = document.getElementById(documentEditor.element.id + '_hRuler');\n var firstLineIndent = document.getElementById(documentEditor.element.id + '_firstLineIndent');\n if (!firstLineIndent) {\n var margin = ('left:' + (HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin) - 6) * documentEditor.zoomFactor + 'px;');\n var style = 'height:' + ((rulerSize.height - 3) / 2) + 'px;overflow:hidden;width:12px;position:absolute;font-size:11px;text-align: left;z-index: 5;' + margin;\n var attributes = {\n 'id': documentEditor.element.id + '_firstLineIndent',\n style: style,\n 'data-name': 'FirstLineIndent',\n class: 'e-de-ruler-indent'\n };\n firstLineIndent = this.createHtmlElement('div', attributes);\n firstLineIndent.setAttribute('title', locale.getConstant('First Line Indent'));\n // let svg: SVGElement;\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_firstLineIndent_svg',\n width: rulerSize.width + 'px',\n height: ((rulerSize.height - 3) / 2) + 'px',\n style: 'position:inherit;left:0px'\n };\n var svg = this.createSvgElement('svg', attr);\n svg.setAttribute('fill', 'none');\n var pathattr = {\n style: 'position:inherit;left:0px'\n };\n // Create a path element inside the SVG\n var pathElement = this.createSvgElement('path', pathattr);\n pathElement.setAttribute('class', 'e-de-ruler-indent-svg');\n pathElement.setAttribute('d', 'M 0.5 0.5 H 11.5 V 2.7128 L 6 5.4211 L 0.5 2.7128 V 0.5 Z');\n pathElement.setAttribute('fill', 'white');\n pathElement.setAttribute('stroke', '#A1A1A1');\n // Append the path element to the SVG element\n svg.appendChild(pathElement);\n firstLineIndent.appendChild(svg);\n hRuler.append(firstLineIndent);\n firstLineIndent.addEventListener('dblclick', function (event) {\n documentEditor.showDialog('Paragraph');\n event.stopPropagation();\n });\n //Draggable for first line Indent.\n var isDragging_1 = false;\n var firstLineOffset_1;\n var initialValue_2 = HelperMethods.getNumberFromString(firstLineIndent.style.left); // for mouse up event\n var initialValue2 = HelperMethods.getNumberFromString(firstLineIndent.style.left); // for mouse move event\n firstLineIndent.addEventListener('mouseenter', function (e) {\n documentEditor.isOnIndent = true;\n });\n firstLineIndent.addEventListener('mouseleave', function (e) {\n documentEditor.isOnIndent = false;\n });\n firstLineIndent.addEventListener('mousedown', function (e) {\n isDragging_1 = true;\n firstLineOffset_1 = e.clientX - firstLineIndent.getBoundingClientRect().left;\n initialValue_2 = HelperMethods.getNumberFromString(firstLineIndent.style.left);\n var rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin -\n (documentEditor.selectionModule.sectionFormat.pageWidth -\n documentEditor.selectionModule.sectionFormat.leftMargin -\n documentEditor.selectionModule.sectionFormat.rightMargin)) * documentEditor.zoomFactor;\n }\n if (documentEditor.layoutType === 'Continuous') {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n }\n }\n var value = rulerZeroPoint + e.clientX - firstLineOffset_1 - hRuler.getBoundingClientRect().left;\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n lineSvg.style.display = 'block';\n e.stopPropagation();\n });\n document.addEventListener('mousemove', function (e) {\n if (isDragging_1) {\n var rulerZeroPoint = void 0;\n var maxValue = void 0;\n var minValue = void 0;\n var rightIndent_1 = document.getElementById(documentEditor.element.id + '_rightIndent');\n var rightIndentValue = HelperMethods.getNumberFromString(rightIndent_1.style.left);\n if (documentEditor.layoutType === 'Pages') {\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin -\n (documentEditor.selectionModule.sectionFormat.pageWidth -\n documentEditor.selectionModule.sectionFormat.leftMargin -\n documentEditor.selectionModule.sectionFormat.rightMargin)) * documentEditor.zoomFactor;\n maxValue = rulerZeroPoint - 6 + (HelperMethods.convertPointToPixel(documentEditor.selectionModule.sectionFormat.pageWidth) * documentEditor.zoomFactor);\n minValue = rightIndentValue + HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor;\n }\n else {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin)\n * documentEditor.zoomFactor;\n minValue = rulerZeroPoint - 6;\n maxValue = rightIndentValue - HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor;\n }\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (_this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n maxValue = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20 + 40 - 6;\n minValue = rightIndentValue + (HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n }\n else {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n minValue = rulerZeroPoint - 6;\n maxValue = rightIndentValue - (HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n }\n }\n var value = rulerZeroPoint + e.clientX - firstLineOffset_1 - hRuler.getBoundingClientRect().left;\n if (value < minValue) {\n value = minValue;\n }\n else if (value > maxValue) {\n value = maxValue;\n }\n firstLineIndent.style.left = value + 'px';\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n }\n });\n document.addEventListener('mouseup', function () {\n if (isDragging_1) {\n isDragging_1 = false;\n var finalValue = HelperMethods.getNumberFromString(firstLineIndent.style.left);\n if (parseInt(firstLineIndent.style.left.replace('px', ''), 10) < 0) {\n finalValue *= -1;\n }\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n documentEditor.editorModule.applyRulerMarkerValues('firstLineIndent', finalValue, initialValue_2);\n }\n else {\n documentEditor.editorModule.applyRulerMarkerValues('firstLineIndent', initialValue_2, finalValue);\n }\n initialValue_2 = finalValue;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.display = 'none';\n }\n });\n }\n //Rendering HangingIndent\n var hangingIndent = document.getElementById(documentEditor.element.id + '_hangingIndent');\n if (!hangingIndent) {\n var margin = ('left:' + (HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin) - 6) + 'px;');\n var style = 'height:' + (rulerSize.height / 2) + 'px;top:' + (((rulerSize.height - 3) / 2) + 1) + 'px;overflow:hidden;width:12px;position:absolute;font-size:11px;text-align: left;z-index: 5;' + margin;\n var attributes = {\n 'id': documentEditor.element.id + '_hangingIndent',\n style: style,\n 'data-name': 'HangingIndent',\n class: 'e-de-ruler-indent'\n };\n hangingIndent = this.createHtmlElement('div', attributes);\n hangingIndent.setAttribute('title', locale.getConstant('Hanging Indent'));\n // let hangingIndentSvg: SVGElement;\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_hangingIndent_svg',\n width: rulerSize.width + 'px',\n height: ((rulerSize.height - 3) / 2) + 'px',\n style: 'position:inherit;left:0px'\n };\n var hangingIndentSvg = this.createSvgElement('svg', attr);\n hangingIndentSvg.setAttribute('fill', 'none');\n var pathattr = {\n style: 'position:inherit;left:0px'\n };\n // Create a path element inside the SVG\n var pathElement = this.createSvgElement('path', pathattr);\n pathElement.setAttribute('class', 'e-de-ruler-indent-svg');\n pathElement.setAttribute('d', 'M 0.5 5.3211 H 11.5 V 3.1083 L 6 0.4 L 0.5 3.1083 V 5.3211 Z');\n pathElement.setAttribute('fill', 'white');\n pathElement.setAttribute('stroke', '#A1A1A1');\n // Append the path element to the SVG element\n hangingIndentSvg.appendChild(pathElement);\n hangingIndent.appendChild(hangingIndentSvg);\n hRuler.append(hangingIndent);\n hangingIndent.addEventListener('dblclick', function (event) {\n documentEditor.showDialog('Paragraph');\n event.stopPropagation();\n });\n //Draggable for hanging line Indent.\n var isDragging_2 = false;\n var hangingLineOffset_1;\n var initialValue_3 = HelperMethods.getNumberFromString(hangingIndent.style.left); // for mouse up event\n var initialValue2 = HelperMethods.getNumberFromString(hangingIndent.style.left); // for mouse move event\n var minLimit_1;\n var maxLimit_1;\n var leftIndent_1;\n hangingIndent.addEventListener('mouseenter', function (e) {\n documentEditor.isOnIndent = true;\n });\n hangingIndent.addEventListener('mouseleave', function (e) {\n documentEditor.isOnIndent = false;\n });\n hangingIndent.addEventListener('mousedown', function (e) {\n isDragging_2 = true;\n hangingLineOffset_1 = e.clientX - hangingIndent.getBoundingClientRect().left;\n initialValue_3 = HelperMethods.getNumberFromString(hangingIndent.style.left);\n var rightIndent = document.getElementById(documentEditor.element.id + '_rightIndent');\n var rightPosition = HelperMethods.getNumberFromString(rightIndent.style.left);\n var rulerZeroPoint;\n if (documentEditor.layoutType === 'Pages') {\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin -\n (documentEditor.selectionModule.sectionFormat.pageWidth -\n documentEditor.selectionModule.sectionFormat.leftMargin -\n documentEditor.selectionModule.sectionFormat.rightMargin)) * documentEditor.zoomFactor;\n minLimit_1 = rightPosition + (HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n maxLimit_1 = rulerZeroPoint - 6 + (HelperMethods.convertPointToPixel(documentEditor.selectionModule.sectionFormat.pageWidth) * documentEditor.zoomFactor);\n }\n else {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n minLimit_1 = rulerZeroPoint - 6;\n maxLimit_1 = (rightPosition - HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n }\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (_this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n maxLimit_1 = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20 + 40 - 6;\n minLimit_1 = rightPosition + (HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n }\n else {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n minLimit_1 = rulerZeroPoint - 6;\n maxLimit_1 = (rightPosition - HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n }\n }\n leftIndent_1 = document.getElementById(documentEditor.element.id + '_leftIndent');\n var value = rulerZeroPoint + e.clientX - hangingLineOffset_1 - hRuler.getBoundingClientRect().left;\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n lineSvg.style.display = 'block';\n e.stopPropagation();\n });\n document.addEventListener('mousemove', function (e) {\n if (isDragging_2) {\n var rulerZeroPoint = void 0;\n if (documentEditor.layoutType === 'Pages') {\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin -\n (documentEditor.selectionModule.sectionFormat.pageWidth -\n documentEditor.selectionModule.sectionFormat.leftMargin -\n documentEditor.selectionModule.sectionFormat.rightMargin)) * documentEditor.zoomFactor;\n }\n else {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n }\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (_this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n }\n else {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n }\n }\n var value = rulerZeroPoint + e.clientX - hangingLineOffset_1 - hRuler.getBoundingClientRect().left;\n if ((value) > maxLimit_1) {\n value = maxLimit_1;\n }\n else if (value < minLimit_1) {\n value = minLimit_1;\n }\n leftIndent_1.style.left = value + 'px';\n hangingIndent.style.left = value + 'px';\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n }\n });\n document.addEventListener('mouseup', function () {\n if (isDragging_2) {\n isDragging_2 = false;\n var finalValue = HelperMethods.getNumberFromString(hangingIndent.style.left);\n if (parseInt(hangingIndent.style.left.replace('px', ''), 10) < 0) {\n finalValue *= -1;\n }\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n documentEditor.editorModule.applyRulerMarkerValues('hangingIndent', finalValue, initialValue_3);\n }\n else {\n documentEditor.editorModule.applyRulerMarkerValues('hangingIndent', initialValue_3, finalValue);\n }\n initialValue_3 = finalValue;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.display = 'none';\n }\n });\n }\n //Rendering LeftIndent\n var leftIndent = document.getElementById(documentEditor.element.id + '_leftIndent');\n if (!leftIndent) {\n var margin = ('left:' + (HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin) - 6) + 'px;');\n var style = 'height:4px;top:11px;overflow:hidden;width:12px;position:absolute;font-size:11px;text-align: left;z-index: 5;' + margin;\n var attributes = {\n 'id': documentEditor.element.id + '_leftIndent',\n style: style,\n class: 'e-de-ruler-indent'\n };\n leftIndent = this.createHtmlElement('div', attributes);\n leftIndent.setAttribute('title', locale.getConstant('Left Indent'));\n // let leftIndentSvg: SVGElement;\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_leftIndent_svg',\n width: rulerSize.width + 'px',\n height: '4px',\n style: 'position:inherit;left:0px'\n };\n var leftIndentSvg = this.createSvgElement('svg', attr);\n leftIndentSvg.setAttribute('fill', 'none');\n var pathattr = {\n style: 'position:inherit;left:0px'\n };\n // Create a path element inside the SVG\n var pathElement = this.createSvgElement('path', pathattr);\n pathElement.setAttribute('class', 'e-de-ruler-indent-svg');\n pathElement.setAttribute('d', 'M 0.5 3.5 H 11.5 V 0.5 H 0.5 V 3.5 Z');\n pathElement.setAttribute('fill', 'white');\n pathElement.setAttribute('stroke', '#A1A1A1');\n // Append the path element to the SVG element\n leftIndentSvg.appendChild(pathElement);\n leftIndent.appendChild(leftIndentSvg);\n hRuler.append(leftIndent);\n leftIndent.addEventListener('dblclick', function (event) {\n documentEditor.showDialog('Paragraph');\n event.stopPropagation();\n });\n //Draggable for left line Indent.\n var isDragging_3 = false;\n var leftLineOffset_1;\n var initialValue_4 = HelperMethods.getNumberFromString(leftIndent.style.left); // for mouse down event\n var initialValue2 = HelperMethods.getNumberFromString(leftIndent.style.left); // for mouse move event\n var firstIndentInitialValue_1;\n var diff_1;\n var minLimit_2;\n var maxLimit_2;\n var isHangingIndent_1;\n leftIndent.addEventListener('mouseenter', function (e) {\n documentEditor.isOnIndent = true;\n });\n leftIndent.addEventListener('mouseleave', function (e) {\n documentEditor.isOnIndent = false;\n });\n leftIndent.addEventListener('mousedown', function (e) {\n var rulerZeroPoint;\n isDragging_3 = true;\n leftLineOffset_1 = e.clientX - leftIndent.getBoundingClientRect().left;\n initialValue_4 = HelperMethods.getNumberFromString(leftIndent.style.left);\n firstIndentInitialValue_1 = HelperMethods.getNumberFromString(firstLineIndent.style.left);\n diff_1 = firstIndentInitialValue_1 - initialValue_4;\n firstLineIndent = document.getElementById(documentEditor.element.id + '_firstLineIndent');\n var rightIndent = document.getElementById(documentEditor.element.id + '_rightIndent');\n var rightPosition = HelperMethods.getNumberFromString(rightIndent.style.left);\n if (documentEditor.layoutType === 'Pages') {\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin -\n (documentEditor.selectionModule.sectionFormat.pageWidth -\n documentEditor.selectionModule.sectionFormat.leftMargin -\n documentEditor.selectionModule.sectionFormat.rightMargin)) * documentEditor.zoomFactor;\n minLimit_2 = (rightPosition + HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n maxLimit_2 = rulerZeroPoint - 6 + (HelperMethods.convertPointToPixel(documentEditor.selectionModule.sectionFormat.pageWidth) * documentEditor.zoomFactor);\n isHangingIndent_1 = (HelperMethods.getNumberFromString(hangingIndent.style.left) - rightPosition)\n <= (HelperMethods.getNumberFromString(firstLineIndent.style.left) - rightPosition);\n }\n else {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n minLimit_2 = rulerZeroPoint - 6;\n maxLimit_2 = (rightPosition - HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n isHangingIndent_1 = (rightPosition - HelperMethods.getNumberFromString(hangingIndent.style.left))\n <= (rightPosition - HelperMethods.getNumberFromString(firstLineIndent.style.left));\n }\n }\n else if (documentEditor.layoutType === 'Continuous') {\n if (_this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n maxLimit_2 = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20 + 40 - 6;\n minLimit_2 = rightPosition + (HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n isHangingIndent_1 = (HelperMethods.getNumberFromString(hangingIndent.style.left) - rightPosition)\n <= (HelperMethods.getNumberFromString(firstLineIndent.style.left) - rightPosition);\n }\n else {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n minLimit_2 = rulerZeroPoint - 6;\n maxLimit_2 = (rightPosition - HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n isHangingIndent_1 = (rightPosition - HelperMethods.getNumberFromString(hangingIndent.style.left))\n <= (rightPosition - HelperMethods.getNumberFromString(firstLineIndent.style.left));\n }\n }\n var value = rulerZeroPoint + e.clientX - leftLineOffset_1 - hRuler.getBoundingClientRect().left;\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n lineSvg.style.display = 'block';\n e.stopPropagation();\n });\n document.addEventListener('mousemove', function (e) {\n if (isDragging_3) {\n var rulerZeroPoint = void 0;\n var value = void 0;\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n if (documentEditor.layoutType === 'Pages') {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin -\n (documentEditor.selectionModule.sectionFormat.pageWidth -\n documentEditor.selectionModule.sectionFormat.leftMargin\n - documentEditor.selectionModule.sectionFormat.rightMargin)) * documentEditor.zoomFactor;\n }\n else if (documentEditor.layoutType === 'Continuous') {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n }\n value = rulerZeroPoint + e.clientX - leftLineOffset_1 - hRuler.getBoundingClientRect().left;\n if (isHangingIndent_1) {\n if ((value + diff_1) > maxLimit_2) {\n value = maxLimit_2 - diff_1;\n }\n }\n else {\n if ((value) > maxLimit_2) {\n value = maxLimit_2;\n }\n }\n if (isHangingIndent_1) {\n if (value < minLimit_2) {\n value = minLimit_2;\n }\n }\n else {\n if ((value + diff_1) < minLimit_2) {\n value = minLimit_2 - diff_1;\n }\n }\n }\n else {\n if (documentEditor.layoutType === 'Pages') {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n }\n else if (documentEditor.layoutType === 'Continuous') {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n }\n value = rulerZeroPoint + e.clientX - leftLineOffset_1 - hRuler.getBoundingClientRect().left;\n if (isHangingIndent_1) {\n if ((value) > maxLimit_2) {\n value = maxLimit_2;\n }\n }\n else {\n if ((value + diff_1) > maxLimit_2) {\n value = maxLimit_2 - diff_1;\n }\n }\n if (isHangingIndent_1) {\n if ((value + diff_1) < minLimit_2) {\n value = minLimit_2 - diff_1;\n }\n }\n else {\n if (value < minLimit_2) {\n value = minLimit_2;\n }\n }\n }\n hangingIndent.style.left = value + 'px';\n leftIndent.style.left = value + 'px';\n firstLineIndent.style.left = (firstIndentInitialValue_1 + (value - initialValue_4)) + 'px';\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n }\n });\n document.addEventListener('mouseup', function () {\n if (isDragging_3) {\n isDragging_3 = false;\n var finalValue = HelperMethods.getNumberFromString(leftIndent.style.left);\n if (parseInt(leftIndent.style.left.replace('px', ''), 10) < 0) {\n finalValue *= -1;\n }\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n documentEditor.editorModule.applyRulerMarkerValues('leftIndent', finalValue, initialValue_4);\n }\n else {\n documentEditor.editorModule.applyRulerMarkerValues('leftIndent', initialValue_4, finalValue);\n }\n initialValue_4 = finalValue;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.display = 'none';\n }\n });\n }\n //Rendering RightIndent\n var rightIndent = document.getElementById(documentEditor.element.id + '_rightIndent');\n if (!rightIndent) {\n var margin = ('left:' + (documentEditor.selectionModule.end.paragraph.bodyWidget.page.boundingRectangle.width - HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin) - 6) + 'px;');\n var style = 'height:7px;top:8px;overflow:hidden;width:12px;position:absolute;font-size:11px;text-align: left;z-index: 4;' + margin;\n var attributes = {\n 'id': documentEditor.element.id + '_rightIndent',\n style: style,\n class: 'e-de-ruler-indent'\n };\n rightIndent = this.createHtmlElement('div', attributes);\n rightIndent.setAttribute('title', locale.getConstant('Right Indent'));\n // let rightIndentSvg: SVGElement;\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_rightIndent_svg',\n width: rulerSize.width + 'px',\n height: '7px',\n style: 'position:inherit;left:0px'\n };\n var rightIndentSvg = this.createSvgElement('svg', attr);\n rightIndentSvg.setAttribute('fill', 'none');\n var pathattr = {\n style: 'position:inherit;left:0px'\n };\n // Create a path element inside the SVG\n var pathElement = this.createSvgElement('path', pathattr);\n pathElement.setAttribute('class', 'e-de-ruler-indent-svg');\n pathElement.setAttribute('d', 'M 0.5 6.5 H 11.5 V 4.2872 L 6 1.5789 L 0.5 4.2872 V 6.5 Z');\n pathElement.setAttribute('fill', 'white');\n pathElement.setAttribute('stroke', '#A1A1A1');\n // Append the path element to the SVG element\n rightIndentSvg.appendChild(pathElement);\n rightIndent.appendChild(rightIndentSvg);\n hRuler.append(rightIndent);\n rightIndent.addEventListener('dblclick', function (event) {\n documentEditor.showDialog('Paragraph');\n event.stopPropagation();\n });\n //Draggable for left line Indent.\n var isDragging_4 = false;\n var rightLineOffset_1;\n var initialValue_5 = HelperMethods.getNumberFromString(rightIndent.style.left); // for mouse down event\n var initialValue2 = HelperMethods.getNumberFromString(rightIndent.style.left); // for mouse move event\n rightIndent.addEventListener('mouseenter', function (e) {\n documentEditor.isOnIndent = true;\n });\n rightIndent.addEventListener('mouseleave', function (e) {\n documentEditor.isOnIndent = false;\n });\n rightIndent.addEventListener('mousedown', function (e) {\n isDragging_4 = true;\n rightLineOffset_1 = e.clientX - rightIndent.getBoundingClientRect().left;\n initialValue_5 = HelperMethods.getNumberFromString(rightIndent.style.left);\n var rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin -\n (documentEditor.selectionModule.sectionFormat.pageWidth - documentEditor.selectionModule.sectionFormat.leftMargin -\n documentEditor.selectionModule.sectionFormat.rightMargin)) * documentEditor.zoomFactor;\n }\n if (documentEditor.layoutType === 'Continuous') {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n }\n }\n var value = rulerZeroPoint + e.clientX - rightLineOffset_1 - hRuler.getBoundingClientRect().left;\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n lineSvg.style.display = 'block';\n e.stopPropagation();\n });\n document.addEventListener('mousemove', function (e) {\n if (isDragging_4) {\n var rulerZeroPoint = void 0;\n var value = void 0;\n var leftIndent_2 = document.getElementById(documentEditor.element.id + '_leftIndent');\n var firstLineIndent_1 = document.getElementById(documentEditor.element.id + '_firstLineIndent');\n var maxValue = void 0;\n var minValue = void 0;\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n if (documentEditor.layoutType === 'Pages') {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin -\n (documentEditor.selectionModule.sectionFormat.pageWidth -\n documentEditor.selectionModule.sectionFormat.leftMargin -\n documentEditor.selectionModule.sectionFormat.rightMargin)) * documentEditor.zoomFactor;\n }\n else if (documentEditor.layoutType === 'Continuous') {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor)\n - 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n }\n value = rulerZeroPoint + e.clientX - rightLineOffset_1 - hRuler.getBoundingClientRect().left;\n var nearestElement = (HelperMethods.getNumberFromString(leftIndent_2.style.left) - value) <= (HelperMethods.getNumberFromString(firstLineIndent_1.style.left) - value) ? leftIndent_2 : firstLineIndent_1;\n var indentValue = HelperMethods.getNumberFromString(nearestElement.style.left);\n maxValue = indentValue - (HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n minValue = rulerZeroPoint - 6;\n }\n else {\n if (documentEditor.layoutType === 'Pages') {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n }\n else if (documentEditor.layoutType === 'Continuous') {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n }\n value = rulerZeroPoint + e.clientX - rightLineOffset_1 - hRuler.getBoundingClientRect().left;\n var nearestElement = (value - HelperMethods.getNumberFromString(leftIndent_2.style.left))\n <= (value - HelperMethods.getNumberFromString(firstLineIndent_1.style.left)) ? leftIndent_2 : firstLineIndent_1;\n var indentValue = HelperMethods.getNumberFromString(nearestElement.style.left);\n maxValue = rulerZeroPoint + (documentEditor.documentHelper.currentPage.boundingRectangle.width\n * documentEditor.zoomFactor) - 6;\n minValue = indentValue + (HelperMethods.convertPointToPixel(42) * documentEditor.zoomFactor);\n }\n if (value < minValue) {\n value = minValue;\n }\n else if (value > maxValue) {\n value = maxValue;\n }\n rightIndent.style.left = value + 'px';\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n }\n });\n document.addEventListener('mouseup', function () {\n if (isDragging_4) {\n isDragging_4 = false;\n var finalValue = HelperMethods.getNumberFromString(rightIndent.style.left);\n if (documentEditor.selectionModule.paragraphFormat.bidi) {\n documentEditor.editorModule.applyRulerMarkerValues('rightIndent', initialValue_5, finalValue);\n }\n else {\n documentEditor.editorModule.applyRulerMarkerValues('rightIndent', finalValue, initialValue_5);\n }\n initialValue_5 = finalValue;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.display = 'none';\n }\n });\n }\n this.updateIndentMarkers(documentEditor);\n };\n /**\n * updateRuler method\n *\n * @returns {void} updateRuler method.\n * @param {DocumentEditor} documentEditor - provide the documentEditor value.\n * @param {boolean} rerenderRuler - provide the rerenderRuler value.\n * @private\n */\n RulerHelper.prototype.updateRuler = function (documentEditor, rerenderRuler) {\n if (documentEditor.rulerHelper && documentEditor.documentEditorSettings && !documentEditor.documentEditorSettings.showRuler ||\n documentEditor.isReadOnlyMode) {\n return;\n }\n // const hOffset: number = - documentEditor.scroller.horizontalOffset;\n // const vOffset: number = - documentEditor.scroller.verticalOffset;\n var hOffset = 0;\n // const vOffset: number = - documentEditor.scroller.verticalOffset;\n if (isNullOrUndefined(documentEditor.hRuler) && isNullOrUndefined(documentEditor.vRuler)) {\n return;\n }\n if (documentEditor.selectionModule.isForward) {\n this.position = documentEditor.selectionModule.start;\n }\n else {\n this.position = documentEditor.selectionModule.end;\n }\n this.updateRulerDimension(documentEditor, documentEditor.hRuler, hOffset, rerenderRuler);\n this.updateRulerDimension(documentEditor, documentEditor.vRuler, hOffset, rerenderRuler);\n this.updateRulerMargins(documentEditor);\n this.updateIndentMarkers(documentEditor);\n this.updateTabStopMarkers(documentEditor);\n if (this.position.paragraph.isInsideTable) {\n this.updateTableMarkers(documentEditor, documentEditor.hRuler);\n }\n else {\n this.removeTableMarkers(documentEditor, documentEditor.hRuler);\n }\n this.updateIndicatorLines(documentEditor);\n };\n RulerHelper.prototype.removeTableMarkers = function (documentEditor, ruler) {\n var renderedTableMarkers = HelperMethods.convertNodeListToArray(document.querySelectorAll('.e-de-ruler-table-marker'));\n if (!isNullOrUndefined(renderedTableMarkers)) {\n for (var i = 0; i < renderedTableMarkers.length; i++) {\n var elementToRemove = renderedTableMarkers[parseInt(i.toString(), 10)];\n if (!isNullOrUndefined(elementToRemove)) {\n elementToRemove.parentNode.removeChild(elementToRemove);\n }\n }\n }\n };\n RulerHelper.prototype.updateTableMarkers = function (documentEditor, ruler) {\n var renderedTableMarkers = HelperMethods.convertNodeListToArray(document.querySelectorAll('.e-de-ruler-table-marker'));\n if (isNullOrUndefined(renderedTableMarkers)) {\n // const tablewidget: TableWidget =\n // ((documentEditor.selection.end.paragraph.containerWidget as TableCellWidget).ownerTable as TableWidget);\n // const tableColumns = ((documentEditor.selection.end.paragraph.containerWidget as TableCellWidget).ownerTable\n // as TableWidget).tableHolder.columns.length;\n // const tableXPos: number = undefined;\n // const hRuler: HTMLElement = document.getElementById(documentEditor.element.id + '_hRuler');\n this.renderTableMarkers(documentEditor, ruler);\n }\n else if (this.position.paragraph.isInsideTable) {\n this.renderTableMarkers(documentEditor, ruler);\n }\n };\n RulerHelper.prototype.renderTableMarkers = function (documentEditor, ruler) {\n var _this = this;\n this.removeTableMarkers(documentEditor, documentEditor.hRuler);\n var intialPosition;\n var tablewidget = this.position.paragraph.containerWidget.ownerTable;\n var tableRowWidget = this.position.paragraph.associatedCell.ownerRow.clone();\n var cellWidgets = tableRowWidget.childWidgets;\n var value = this.position.paragraph.associatedCell.ownerTable.tableFormat.bidi ? cellWidgets.length : 0;\n if (this.position.paragraph.associatedCell.ownerTable.tableFormat.bidi) {\n cellWidgets.reverse();\n }\n var tableXPos;\n var hRuler = document.getElementById(documentEditor.element.id + '_hRuler');\n var _loop_1 = function (i) {\n var tableMarker = document.getElementById(documentEditor.element.id + '_tableMarker_' + value);\n //if (!tableMarker) {\n var margin = void 0;\n if (i === 0) {\n tableXPos = (cellWidgets[parseInt(i.toString(), 10)].x\n - cellWidgets[parseInt(i.toString(), 10)].margin.left)\n * documentEditor.zoomFactor + hRuler.scrollLeft;\n margin = ('left:' + (tableXPos - 4) + 'px;');\n }\n else {\n tableXPos = tableXPos + ((cellWidgets[i - 1].width\n + cellWidgets[i - 1].margin.left\n + cellWidgets[i - 1].margin.right) * documentEditor.zoomFactor);\n margin = 'left:' + (tableXPos - 4) + 'px;';\n }\n var style = 'height:' + (ruler.thickness) + 'px;overflow:hidden;width:10px;position:absolute;font-size:11px;text-align: left;z-index: 4;' + margin;\n var attributes = {\n 'id': documentEditor.element.id + '_tableMarker_' + value,\n 'class': 'e-de-ruler-table-marker',\n style: style\n };\n tableMarker = this_1.createHtmlElement('div', attributes);\n var locale = new L10n('documenteditor', documentEditor.defaultLocale);\n tableMarker.setAttribute('title', locale.getConstant('Move Table Column'));\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_tableMarker_svg' + i,\n width: 9 + 'px',\n height: 11 + 'px',\n style: 'position:inherit;left:0px;top:3px;'\n };\n var svg = this_1.createSvgElement('svg', attr);\n svg.setAttribute('fill', 'none');\n var pathattr = {\n style: 'position:inherit;left:0px;'\n };\n // Create a path element inside the SVG\n var pathElement = this_1.createSvgElement('path', pathattr);\n pathElement.setAttribute('class', 'e-de-ruler-table-svg');\n pathElement.setAttribute('d', 'M1 1V0H2V1H3V0H4V1H5V0H6V1H7V2H6V3H7V4H6V5H7V6H6V7H7V8H0V7H1V6H0V5H1V4H0V3H1V2H0V1H1ZM2 2V3H3V2H2ZM4 2V3H5V2H4ZM5 4H4V5H5V4ZM5 6H4V7H5V6ZM3 7V6H2V7H3ZM2 5H3V4H2V5Z');\n pathElement.setAttribute('fill', '#A1A1A1');\n // Append the path element to the SVG element\n svg.appendChild(pathElement);\n tableMarker.appendChild(svg);\n hRuler.append(tableMarker);\n // }\n if (this_1.position.paragraph.associatedCell.ownerTable.tableFormat.bidi) {\n value--;\n }\n else {\n value++;\n }\n tableMarker.addEventListener('dblclick', function (event) {\n documentEditor.showDialog('TableProperties');\n event.stopPropagation();\n });\n var tableMarkerOffset;\n tableMarker.addEventListener('mousedown', function (e) {\n tableMarkerOffset = e.clientX - tableMarker.getBoundingClientRect().left;\n documentEditor.startXPosition = HelperMethods.convertPixelToPoint(e.clientX);\n documentEditor.isTableMarkerDragging = true;\n var cursorPoint = new Point(e.clientX, e.clientY);\n var touchPoint = documentEditor.viewer.findFocusedPage(cursorPoint, true, true);\n var currentMarkerPostion;\n if (e.currentTarget instanceof HTMLElement) {\n var parts = e.currentTarget.id.split('_');\n var value_1 = parts[parts.length - 1];\n currentMarkerPostion = parseInt(value_1, 10);\n }\n var tableWidget = documentEditor.selectionModule.end.paragraph.containerWidget.ownerTable;\n documentEditor.editorModule.tableResize.currentResizingTable = tableWidget;\n documentEditor.editorModule.tableResize.resizeNode = 0;\n documentEditor.editorModule.tableResize.resizerPosition = currentMarkerPostion;\n documentEditor.editorModule.tableResize.startingPoint.x = touchPoint.x;\n documentEditor.editorModule.tableResize.startingPoint.y = touchPoint.y;\n documentEditor.editorHistoryModule.initResizingHistory(touchPoint, documentEditor.editorModule.tableResize);\n var rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n var value = rulerZeroPoint + e.clientX - tableMarkerOffset - hRuler.getBoundingClientRect().left;\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n var indicatorLineValue = startValue + (value - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = (indicatorLineValue - 6) + 'px';\n lineSvg.style.display = 'block';\n });\n document.addEventListener('mousemove', function (e) {\n if (documentEditor.isDestroyed || !documentEditor.documentEditorSettings.showRuler) {\n return;\n }\n if (documentEditor.isTableMarkerDragging) {\n var hRuler_1 = document.getElementById(documentEditor.element.id + '_hRuler');\n var rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin) * documentEditor.zoomFactor;\n if (documentEditor.selectionModule.end.paragraph.associatedCell.ownerTable.tableFormat.bidi) {\n var rulerGeometry = _this.getRulerGeometry(documentEditor);\n var rulerMarginDivWidth = (rulerGeometry.width - (HelperMethods.convertPointToPixel((documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin * documentEditor.zoomFactor)\n + (documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin\n * documentEditor.zoomFactor))));\n rulerZeroPoint -= rulerMarginDivWidth;\n }\n var value_2 = rulerZeroPoint + e.clientX - tableMarkerOffset - hRuler_1.getBoundingClientRect().left;\n tableMarker.style.left = value_2 + 'px';\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n var indicatorLineValue = startValue + (value_2 - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = (indicatorLineValue - 6) + 'px';\n }\n });\n document.addEventListener('mouseup', function (e) {\n if (documentEditor.isDestroyed || !documentEditor.documentEditorSettings.showRuler) {\n return;\n }\n if (documentEditor.isTableMarkerDragging) {\n var cursorPoint = new Point(e.clientX, e.clientY);\n var dragValue = _this.position.paragraph.associatedCell.ownerTable.tableFormat.bidi ?\n (documentEditor.startXPosition - HelperMethods.convertPixelToPoint(e.clientX))\n : (HelperMethods.convertPixelToPoint(e.clientX) - documentEditor.startXPosition);\n documentEditor.editorModule.tableResize.handleResizing(cursorPoint, true, (dragValue / documentEditor.zoomFactor));\n documentEditor.editorModule.tableResize.updateResizingHistory(documentEditor.viewer.findFocusedPage(cursorPoint, true, true));\n documentEditor.isTableMarkerDragging = false;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.display = 'none';\n }\n });\n };\n var this_1 = this;\n for (var i = 0; i <= cellWidgets.length; i++) {\n _loop_1(i);\n }\n };\n /**\n * updateRulerDimension method \\\n *\n * @returns {void} updateRulerDimension method .\\\n * @param {DocumentEditor} documentEditor - provide the documentEditor value.\n * @param {Ruler} ruler - provide the content value.\n * @param {number} offset - provide the content value.\n * @param {boolean} rerenderRuler - provide the rerenderRuler value.\n * @private\n */\n RulerHelper.prototype.updateRulerDimension = function (documentEditor, ruler, offset, rerenderRuler) {\n var isHorizontal = ruler.orientation === 'Horizontal' ? true : false;\n var rulerSize = this.getRulerSize(documentEditor);\n var rulerGeometry = this.getRulerGeometry(documentEditor);\n //const documentEditorRuler: DocumentEditorRulerModel = isHorizontal ? documentEditor.documentEditorSettings.rulerSettings.horizontalRuler : documentEditor.documentEditorSettings.rulerSettings.verticalRuler;\n this.updateRulerDiv(documentEditor, rulerGeometry, isHorizontal, ruler);\n this.updateRulerSpace(documentEditor, rulerGeometry, isHorizontal, ruler);\n this.updateMargin(ruler, documentEditor, isHorizontal);\n // ruler.pageWidth = documentEditor.selection.end.paragraph.bodyWidget.page.boundingRectangle.width * documentEditor.zoomFactor;\n // ruler.pageHeight = documentEditor.selection.end.paragraph.bodyWidget.page.boundingRectangle.height * documentEditor.zoomFactor;\n ruler.length = documentEditor.zoomFactor < 1 ?\n ((ruler.zeroPosition * 2) / documentEditor.zoomFactor)\n : ((ruler.zeroPosition * 2) * documentEditor.zoomFactor);\n var rulerObj = ruler.element;\n if (isHorizontal) {\n rulerObj.style.marginLeft = (documentEditor.layoutType === 'Pages' ? documentEditor.selectionModule.end.paragraph.bodyWidget.page.boundingRectangle.x : 0) + 'px';\n }\n else {\n rulerObj.parentElement.style.display = documentEditor.layoutType === 'Pages' ? 'block' : 'none';\n rulerObj.style.marginTop = documentEditor.selectionModule.getPageTop(documentEditor.selectionModule.end.paragraph.bodyWidget.page) + 'px';\n }\n if (rerenderRuler) {\n ruler.offset = offset;\n ruler.scale = documentEditor.zoomFactor;\n // if (documentEditor.layoutType === 'Pages') {\n ruler.length = documentEditor.zoomFactor < 1 ?\n ((ruler.zeroPosition * 2) / documentEditor.zoomFactor)\n : ((ruler.zeroPosition * 2) * documentEditor.zoomFactor);\n // } else if (documentEditor.layoutType === 'Continuous') {\n // ruler.length = (ruler.zeroPosition * 2) / documentEditor.zoomFactor;\n // }\n ruler.updateRuler();\n }\n if (isHorizontal) {\n if (documentEditor.layoutType === 'Pages') {\n var paraBidi = this.position.paragraph.paragraphFormat.bidi;\n var tableBidi = false;\n if (this.position.paragraph.isInsideTable) {\n tableBidi = this.position.paragraph.associatedCell.ownerTable.tableFormat.bidi;\n }\n if (paraBidi || tableBidi) {\n var rulerMarginDivWidth = (rulerGeometry.width - (HelperMethods.convertPointToPixel((documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin * documentEditor.zoomFactor))));\n rulerObj.scrollLeft = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - rulerMarginDivWidth;\n }\n else {\n rulerObj.scrollLeft = (ruler.zeroPosition - HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin)) * documentEditor.zoomFactor;\n }\n }\n else {\n var paraBidi = this.position.paragraph.paragraphFormat.bidi;\n var tableBidi = false;\n if (this.position.paragraph.isInsideTable) {\n tableBidi = this.position.paragraph.associatedCell.ownerTable.tableFormat.bidi;\n }\n if (paraBidi || tableBidi) {\n // const rulerMarginDivWidth = (rulerGeometry.width - 40);\n rulerObj.scrollLeft = ((ruler.zeroPosition - documentEditor.viewer.clientActiveArea.width)\n * documentEditor.zoomFactor) - 20;\n }\n else {\n // 20 is set approximately to the web layout.\n rulerObj.scrollLeft = (ruler.zeroPosition * documentEditor.zoomFactor) - 20;\n }\n }\n }\n else {\n rulerObj.scrollTop = (ruler.zeroPosition - HelperMethods.convertPointToPixel(documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.topMargin)) * documentEditor.zoomFactor;\n }\n };\n /**\n * updateRulerSpace method \\\n *\n * @returns {void} updateRulerDiv method .\\\n * @param {DocumentEditor} documentEditor - provide the documentEditor value.\n * @param {Size} rulerGeometry - provide the content value.\n * @param {boolean} isHorizontal - provide the content value.\n * @param {Ruler} ruler - provide the ruler value.\n * @private\n */\n RulerHelper.prototype.updateRulerSpace = function (documentEditor, rulerGeometry, isHorizontal, ruler) {\n var div = document.getElementById(documentEditor.element.id + (isHorizontal ? '_hRuler_ruler_space' : '_vRuler_ruler_space'));\n if (div && documentEditor && rulerGeometry) {\n div.style.width = (isHorizontal ? (rulerGeometry.width + (ruler.segmentWidth * 2)) : ruler.thickness) + 'px';\n div.style.height = (isHorizontal ? ruler.thickness : (rulerGeometry.height + (ruler.segmentWidth * 2))) + 'px';\n }\n };\n /**\n * updateRulerDiv method \\\n *\n * @returns {void} updateRulerDiv method .\\\n * @param {DocumentEditor} documentEditor - provide the documentEditor value.\n * @param {Size} rulerGeometry - provide the content value.\n * @param {boolean} isHorizontal - provide the content value.\n * @param {Ruler} ruler - provide the ruler value.\n * @private\n */\n RulerHelper.prototype.updateRulerDiv = function (documentEditor, rulerGeometry, isHorizontal, ruler) {\n // parent div\n var div = document.getElementById(documentEditor.element.id + (isHorizontal ? '_hRuler' : '_vRuler'));\n if (div && documentEditor && rulerGeometry) {\n div.style.width = (isHorizontal ? documentEditor.layoutType === 'Continuous' ? rulerGeometry.width / documentEditor.zoomFactor : rulerGeometry.width : ruler.thickness) + 'px';\n div.style.height = (isHorizontal ? ruler.thickness : rulerGeometry.height) + 'px';\n div = document.getElementById(documentEditor.element.id + '_overlapRuler');\n if (div) {\n // eslint-disable-next-line\n isHorizontal ? (div.style.height === ruler.thickness + 'px') : (div.style.width === ruler.thickness + 'px');\n }\n }\n if (isHorizontal) {\n if (this.hRulerBottom) {\n var pageElement = document.getElementById(documentEditor.element.id + '_pageContainer');\n this.hRulerBottom.style.width = pageElement.getBoundingClientRect().width + 'px';\n }\n }\n // let vRulerDiv: HTMLElement = document.getElementById(documentEditor.element.id + '_vRuler');\n // if (vRulerDiv) {\n // vRulerDiv.style.width = ruler.thickness + 'px';\n // vRulerDiv.style.height = rulerGeometry.height + 'px';\n // }\n };\n /**\n * getRulerGeometry method \\\n *\n * @returns {void} getRulerGeometry method .\\\n * @param { DocumentEditor} documentEditor - provide the documentEditor value.\n * @private\n */\n RulerHelper.prototype.getRulerGeometry = function (documentEditor) {\n var rulerSize = this.getRulerSize(documentEditor);\n var height = (documentEditor.selectionModule.end.paragraph.bodyWidget.page.boundingRectangle.height\n * documentEditor.zoomFactor);\n var width = (documentEditor.selectionModule.end.paragraph.bodyWidget.page.boundingRectangle.width\n * documentEditor.zoomFactor);\n return new Size(width, height);\n };\n RulerHelper.prototype.getVerticalHeight = function (documentEditor) {\n var pageheight = HelperMethods.convertPixelToPoint(documentEditor.selectionModule.end.paragraph.bodyWidget.page.boundingRectangle.height);\n var containerHeight = documentEditor.element.getBoundingClientRect().height;\n if (pageheight < containerHeight) {\n return pageheight;\n }\n else {\n return containerHeight - documentEditor.documentHelper.pages[0].boundingRectangle.y;\n }\n };\n RulerHelper.prototype.renderTab = function (documentEditor, rulerSize, tabStop, tabJustification, i, locale) {\n var _this = this;\n var hRuler = document.getElementById(documentEditor.element.id + '_hRuler');\n var zoomFactor = documentEditor.documentHelper.zoomFactor;\n var value;\n switch (tabJustification) {\n case 'Left': {\n var leftTab = document.getElementById(documentEditor.element.id + '_LeftTab' + '_' + i);\n if (!leftTab) {\n var style = '';\n if (!isNullOrUndefined(tabStop)) {\n value = this.position.paragraph.paragraphFormat.bidi ?\n (HelperMethods.convertPointToPixel(1584 - tabStop.position))\n : (HelperMethods.convertPointToPixel(1584 + tabStop.position));\n var margin = ('left:' + ((value - 1.5) * zoomFactor) + 'px;');\n style = 'height:9px;overflow:hidden;top:7px;width:12px;position:absolute;font-size:11px;text-align: left;z-index: 4;' + margin;\n }\n var attributes = {\n 'id': documentEditor.element.id + '_LeftTab' + '_' + i,\n 'class': 'e-de-ruler-tab e-de-ruler-tab-left',\n style: style,\n 'data-name': 'LeftTab'\n };\n leftTab = this.createHtmlElement('div', attributes);\n leftTab.setAttribute('title', locale.getConstant('Left Tab'));\n // let svg: SVGElement;\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_leftTab_svg',\n width: rulerSize.width / 2 + 'px',\n height: rulerSize.height / 2 + 'px',\n style: 'position:inherit;left:0px'\n };\n var svg = this.createSvgElement('svg', attr);\n svg.setAttribute('fill', 'none');\n var pathattr = {\n style: 'position:inherit;left:0px'\n };\n // Create a path element inside the SVG\n var pathElement = this.createSvgElement('path', pathattr);\n pathElement.setAttribute('class', 'e-de-ruler-tab-svg');\n pathElement.setAttribute('d', 'M3 5H7V7H1V1H3V5Z');\n pathElement.setAttribute('fill', '#605E5C');\n pathElement.setAttribute('stroke', '#A1A1A1');\n // Append the path element to the SVG element\n svg.appendChild(pathElement);\n leftTab.appendChild(svg);\n hRuler.append(leftTab);\n }\n break;\n }\n case 'Center': {\n var centerTab = document.getElementById(documentEditor.element.id + '_CenterTab' + '_' + i);\n if (!centerTab) {\n var style = '';\n if (!isNullOrUndefined(tabStop)) {\n value = this.position.paragraph.paragraphFormat.bidi ?\n (HelperMethods.convertPointToPixel(1584 - tabStop.position))\n : (HelperMethods.convertPointToPixel(1584 + tabStop.position));\n var margin = ('left:' + ((value - 4) * zoomFactor) + 'px;');\n style = 'height:9px;overflow:hidden;top:7px;width:12px;position:absolute;font-size:11px;text-align: left;z-index: 4;' + margin;\n }\n var attributes = {\n 'id': documentEditor.element.id + '_CenterTab' + '_' + i,\n 'class': 'e-de-ruler-tab e-de-ruler-tab-center',\n style: style,\n 'data-name': 'CenterTab'\n };\n centerTab = this.createHtmlElement('div', attributes);\n centerTab.setAttribute('title', locale.getConstant('Center Tab'));\n // let svg: SVGElement;\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_centerTab_svg',\n width: rulerSize.width / 2 + 'px',\n height: rulerSize.height / 2 + 'px',\n style: 'position:inherit;left:0px'\n };\n var svg = this.createSvgElement('svg', attr);\n svg.setAttribute('fill', 'none');\n var pathattr = {\n style: 'position:inherit;left:0px'\n };\n // Create a path element inside the SVG\n var pathElement = this.createSvgElement('path', pathattr);\n pathElement.setAttribute('class', 'e-de-ruler-tab-svg');\n pathElement.setAttribute('d', 'M5 5H8V7H0V5H3V1H5V5Z');\n pathElement.setAttribute('fill', '#605E5C');\n pathElement.setAttribute('stroke', '#A1A1A1');\n // Append the path element to the SVG element\n svg.appendChild(pathElement);\n centerTab.appendChild(svg);\n hRuler.append(centerTab);\n }\n break;\n }\n case 'Right': {\n var rightTab = document.getElementById(documentEditor.element.id + '_RightTab' + '_' + i);\n if (!rightTab) {\n var style = '';\n if (!isNullOrUndefined(tabStop)) {\n value = this.position.paragraph.paragraphFormat.bidi ?\n (HelperMethods.convertPointToPixel(1584 - tabStop.position))\n : (HelperMethods.convertPointToPixel(1584 + tabStop.position));\n var margin = ('left:' + ((value - 5.5) * zoomFactor) + 'px;');\n style = 'height:9px;overflow:hidden;top:7px;width:12px;position:absolute;font-size:11px;text-align: left;z-index: 4;' + margin;\n }\n var attributes = {\n 'id': documentEditor.element.id + '_RightTab' + '_' + i,\n 'class': 'e-de-ruler-tab e-de-ruler-tab-right',\n style: style,\n 'data-name': 'RightTab'\n };\n rightTab = this.createHtmlElement('div', attributes);\n rightTab.setAttribute('title', locale.getConstant('Right Tab'));\n // let svg: SVGElement;\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_rightTab_svg',\n width: rulerSize.width / 2 + 'px',\n height: rulerSize.height / 2 + 'px',\n style: 'position:inherit;left:0px'\n };\n var svg = this.createSvgElement('svg', attr);\n svg.setAttribute('fill', 'none');\n var pathattr = {\n style: 'position:inherit;left:0px'\n };\n // Create a path element inside the SVG\n var pathElement = this.createSvgElement('path', pathattr);\n pathElement.setAttribute('class', 'e-de-ruler-tab-svg');\n pathElement.setAttribute('d', 'M5 5V1H7V7H1V5H5Z');\n pathElement.setAttribute('fill', '#605E5C');\n pathElement.setAttribute('stroke', '#A1A1A1');\n // Append the path element to the SVG element\n svg.appendChild(pathElement);\n rightTab.appendChild(svg);\n hRuler.append(rightTab);\n }\n break;\n }\n case 'Decimal': {\n var decimalTab = document.getElementById(documentEditor.element.id + '_DecimalTab' + '_' + i);\n if (!decimalTab) {\n var style = '';\n if (!isNullOrUndefined(tabStop)) {\n value = this.position.paragraph.paragraphFormat.bidi ?\n (HelperMethods.convertPointToPixel(1584 - tabStop.position))\n : (HelperMethods.convertPointToPixel(1584 + tabStop.position));\n var margin = ('left:' + ((value * zoomFactor) - 4) + 'px;');\n style = 'height:9px;overflow:hidden;top:7px;width:12px;position:absolute;font-size:11px;text-align: left;z-index: 4;' + margin;\n }\n var attributes = {\n 'id': documentEditor.element.id + '_DecimalTab' + '_' + i,\n 'class': 'e-de-ruler-tab e-de-ruler-tab-decimal',\n style: style,\n 'data-name': 'DecimalTab'\n };\n decimalTab = this.createHtmlElement('div', attributes);\n decimalTab.setAttribute('title', locale.getConstant('Decimal Tab'));\n // const svg: SVGElement;\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_decimalTab_svg',\n width: rulerSize.width / 2 + 'px',\n height: rulerSize.height / 2 + 'px',\n style: 'position:inherit;left:0px'\n };\n var svg = this.createSvgElement('svg', attr);\n svg.setAttribute('fill', 'none');\n var pathattr = {\n style: 'position:inherit;left:0px'\n };\n // Create a path element inside the SVG\n var pathElement = this.createSvgElement('path', pathattr);\n pathElement.setAttribute('class', 'e-de-ruler-tab-svg');\n pathElement.setAttribute('d', 'M6 0H4V6H0V8H4H6H10V6H6V0Z');\n pathElement.setAttribute('fill', '#605E5C');\n pathElement.setAttribute('clip-rule', 'evenodd');\n pathElement.setAttribute('fill-rule', 'evenodd');\n pathElement.setAttribute('stroke', '#A1A1A1');\n // Append the path element to the SVG element\n svg.appendChild(pathElement);\n decimalTab.appendChild(svg);\n hRuler.append(decimalTab);\n }\n break;\n }\n case 'Bar': {\n var barTab = document.getElementById(documentEditor.element.id + '_BarTab' + '_' + i);\n if (!barTab) {\n var style = '';\n if (!isNullOrUndefined(tabStop)) {\n value = this.position.paragraph.paragraphFormat.bidi ?\n (HelperMethods.convertPointToPixel(1584 - tabStop.position))\n : (HelperMethods.convertPointToPixel(1584 + tabStop.position));\n var margin = ('left:' + ((value - 1.5) * zoomFactor) + 'px;');\n style = 'height:9px;overflow:hidden;top:7px;width:12px;position:absolute;font-size:11px;text-align: left;z-index: 4;' + margin;\n }\n var attributes = {\n 'id': documentEditor.element.id + '_BarTab' + '_' + i,\n 'class': 'e-de-ruler-tab e-de-ruler-tab-bar',\n style: style,\n 'data-name': 'BarTab'\n };\n barTab = this.createHtmlElement('div', attributes);\n barTab.setAttribute('title', locale.getConstant('Bar Tab'));\n // const svg: SVGElement;\n // Create an SVG element\n var attr = {\n 'id': documentEditor.element.id + '_barTab_svg',\n width: rulerSize.width / 2 + 'px',\n height: rulerSize.height / 2 + 'px',\n style: 'position:inherit;left:0px'\n };\n var svg = this.createSvgElement('svg', attr);\n svg.setAttribute('fill', 'none');\n var rectAttr = {\n style: 'position:inherit;left:0px'\n };\n var rect = this.createSvgElement('rect', rectAttr);\n rect.setAttribute('width', '2');\n rect.setAttribute('height', '8');\n rect.setAttribute('fill', '#605E5C');\n rect.setAttribute('stroke', '#A1A1A1');\n // Append the path element to the SVG element\n svg.appendChild(rect);\n barTab.appendChild(svg);\n hRuler.append(barTab);\n }\n break;\n }\n }\n if (!isNullOrUndefined(tabStop)) {\n var tabStopElement_1 = document.getElementById(documentEditor.element.id + '_' + tabJustification + 'Tab' + '_' + i);\n if (!isNullOrUndefined(tabStop)) {\n tabStopElement_1.addEventListener('dblclick', function (event) {\n documentEditor.showTabDialog();\n event.stopPropagation();\n });\n }\n //Draggable for tab stop.\n var isDragging_5 = false;\n var tabStopOffset_1;\n var initialValue_6 = HelperMethods.getNumberFromString(tabStopElement_1.style.left); // for mouse up event\n var initialValue2 = HelperMethods.getNumberFromString(tabStopElement_1.style.left); // for mouse move event\n var justification_1 = tabStopElement_1.getAttribute('data-name');\n var currrentParagraph_1 = this.position.paragraph;\n var tabIndex_1 = 0;\n var currentTabStop_1 = undefined;\n tabStopElement_1.addEventListener('mousedown', function (e) {\n e.stopPropagation();\n isDragging_5 = true;\n tabStopOffset_1 = e.clientX - tabStopElement_1.getBoundingClientRect().left;\n initialValue_6 = HelperMethods.getNumberFromString(tabStopElement_1.style.left);\n tabIndex_1 = parseInt(tabStopElement_1.id.split('_')[tabStopElement_1.id.split('_').length - 1], 10);\n currentTabStop_1 = currrentParagraph_1.paragraphFormat.tabs[parseInt(tabIndex_1.toString(), 10)];\n _this.currentTabStopElement = tabStopElement_1;\n var rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin)\n * documentEditor.zoomFactor;\n if (documentEditor.layoutType === 'Continuous') {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n if (_this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor)\n - 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n }\n }\n var value = rulerZeroPoint + e.clientX - tabStopOffset_1 - hRuler.getBoundingClientRect().left;\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value - rulerZeroPoint);\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n lineSvg.style.display = 'block';\n });\n tabStopElement_1.addEventListener('mouseup', function () {\n if (!isNullOrUndefined(_this.currentTabStopElement)) {\n _this.currentTabStopElement = undefined;\n }\n });\n document.addEventListener('mousemove', function (e) {\n if (isDragging_5) {\n var rulerZeroPoint = void 0;\n if (documentEditor.layoutType === 'Continuous') {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) - 20;\n if (_this.position.paragraph.paragraphFormat.bidi) {\n rulerZeroPoint = (documentEditor.hRuler.zeroPosition * documentEditor.zoomFactor) -\n 20 - (documentEditor.viewer.clientArea.width * documentEditor.zoomFactor);\n }\n }\n else if (documentEditor.layoutType === 'Pages') {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 - documentEditor.selectionModule.sectionFormat.leftMargin)\n * documentEditor.zoomFactor;\n if (_this.position.paragraph.bidi) {\n rulerZeroPoint = HelperMethods.convertPointToPixel(1584 + documentEditor.selectionModule.sectionFormat.rightMargin\n - documentEditor.selectionModule.sectionFormat.pageWidth) * documentEditor.zoomFactor;\n }\n }\n var value_3 = rulerZeroPoint + e.clientX - tabStopOffset_1 - hRuler.getBoundingClientRect().left;\n var minValue = rulerZeroPoint;\n var rightIndent = document.getElementById(documentEditor.element.id + '_rightIndent');\n var rightIndentValue = HelperMethods.getNumberFromString(rightIndent.style.left);\n var maxValue = rightIndentValue;\n var leftIndent = document.getElementById(documentEditor.element.id + '_leftIndent');\n var leftIndentValue = HelperMethods.getNumberFromString(leftIndent.style.left);\n minValue = leftIndentValue;\n if (_this.position.paragraph.paragraphFormat.bidi) {\n minValue = rightIndentValue;\n maxValue = leftIndentValue;\n }\n if (justification_1 === 'CenterTab' || justification_1 === 'DecimalTab') {\n maxValue += 4;\n }\n else if (justification_1 === 'RightTab') {\n maxValue += 5.5;\n }\n else {\n maxValue += 1.5;\n }\n if (value_3 < minValue) {\n value_3 = minValue;\n }\n else if (value_3 > maxValue) {\n value_3 = maxValue;\n }\n tabStopElement_1.style.left = value_3 + 'px';\n var startValue = documentEditor.documentHelper.currentPage.boundingRectangle.x;\n startValue = documentEditor.layoutType === 'Continuous' ? 0 : startValue;\n var indicatorLineValue = startValue + (value_3 - rulerZeroPoint) + 6;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.left = indicatorLineValue + 'px';\n }\n });\n document.addEventListener('mouseup', function () {\n if (isDragging_5 && !isNullOrUndefined(currentTabStop_1)) {\n if (!isNullOrUndefined(_this.currentTabStopElement) && _this.currentTabStopElement.style.display === 'none') {\n documentEditor.editorModule.removeTabStops([currrentParagraph_1], [currentTabStop_1]);\n _this.currentTabStopElement.parentNode.removeChild(_this.currentTabStopElement);\n }\n else {\n var finalValue = HelperMethods.getNumberFromString(tabStopElement_1.style.left);\n initialValue_6 = finalValue;\n documentEditor.editorModule.removeTabStops([currrentParagraph_1], [currentTabStop_1]);\n finalValue = HelperMethods.convertPixelToPoint(finalValue / documentEditor.zoomFactor) - 1584;\n finalValue = currrentParagraph_1.paragraphFormat.bidi ? finalValue * -1 : finalValue;\n currentTabStop_1.position = finalValue;\n documentEditor.editorModule.updateTabStopCollection(currrentParagraph_1, [currentTabStop_1]);\n }\n _this.updateTabStopMarkers(documentEditor);\n isDragging_5 = false;\n var lineSvg = document.getElementById(documentEditor.element.id + '_hRuler_indicator_svg');\n lineSvg.style.display = 'none';\n _this.currentTabStopElement = undefined;\n }\n });\n }\n };\n RulerHelper.prototype.updateMargin = function (ruler, documentEditor, isHorizontal) {\n if (isHorizontal) {\n ruler.startMargin = documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.leftMargin;\n ruler.endMargin = documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.rightMargin;\n }\n else {\n ruler.startMargin = documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.topMargin;\n ruler.endMargin = documentEditor.selectionModule.end.paragraph.bodyWidget.sectionFormat.bottomMargin;\n }\n };\n RulerHelper.prototype.getTabJustification = function (dataNameValue) {\n switch (dataNameValue) {\n case 'LeftTab':\n return 'Left';\n case 'CenterTab':\n return 'Center';\n case 'RightTab':\n return 'Right';\n case 'DecimalTab':\n return 'Decimal';\n case 'BarTab':\n return 'Bar';\n }\n return 'Left';\n };\n /**\n * getRulerSize method \\\n *\n * @returns {void} getRulerSize method .\\\n * @param { DocumentEditor} documentEditor - provide the documentEditor value.\n * @private\n */\n RulerHelper.prototype.getRulerSize = function (documentEditor) {\n var top = 0;\n var left = 0;\n //if (diagram.rulerSettings.showRulers) {\n // top = documentEditor.documentEditorSettings.rulerSettings.horizontalRuler.thickness;\n // left = documentEditor.documentEditorSettings.rulerSettings.verticalRuler.thickness;\n top = 15;\n left = 15;\n //}\n return new Size(left, top);\n };\n return RulerHelper;\n}());\nexport { RulerHelper };\n","import { L10n, createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Calendar } from '@syncfusion/ej2-calendars';\n/**\n * The DateContent dialog is used to display calendar\n */\nvar DatePickerDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper\n * @private\n */\n function DatePickerDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog.hide();\n _this.documentHelper.updateFocus();\n };\n this.documentHelper = documentHelper;\n }\n DatePickerDialog.prototype.getModuleName = function () {\n return 'DateContentDialog';\n };\n /**\n * @private\n * @param {L10n} localValue - Specified the locale value.\n * @returns {void}\n */\n DatePickerDialog.prototype.initDateContentDialog = function (localValue) {\n this.target = createElement('div');\n var parentDiv = createElement('div');\n this.target.appendChild(parentDiv);\n var calendar = new Calendar({\n change: this.valueChange.bind(this)\n });\n calendar.appendTo(parentDiv);\n if (this.documentHelper.owner.editor.dateValue) {\n calendar.value = new Date(this.documentHelper.owner.editor.dateValue);\n }\n //parentDiv.append(calendar);\n };\n DatePickerDialog.prototype.valueChange = function (args) {\n if (args.event) {\n var value = args.value.toLocaleDateString();\n var contenControl = this.documentHelper.owner.editor.getContentControl();\n this.documentHelper.owner.editor.dropDownChange(contenControl, value);\n this.documentHelper.hideDialog();\n }\n };\n /**\n * @private\n * @returns {void}\n */\n DatePickerDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n this.localeValue = localValue;\n if (!this.target) {\n this.initDateContentDialog(localValue);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n this.documentHelper.dialog.header = localValue.getConstant('Datepicker Content Control');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n /**\n * @private\n * @returns {void}\n */\n DatePickerDialog.prototype.destroy = function () {\n if (this.calendar) {\n this.calendar.destroy();\n this.calendar = undefined;\n }\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var i = 0; i < this.target.childNodes.length; i++) {\n this.target.removeChild(this.target.childNodes[parseInt(i.toString(), 10)]);\n i--;\n }\n this.target = undefined;\n }\n };\n return DatePickerDialog;\n}());\nexport { DatePickerDialog };\n","import { ListView } from '@syncfusion/ej2-lists';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ContentControl, ContentControlListItems } from '../viewer/page';\nimport { ColorPicker, TextBox } from '@syncfusion/ej2-inputs';\nvar ContentControlPropertiesDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper.\n * @private\n */\n function ContentControlPropertiesDialog(documentHelper) {\n var _this = this;\n this.colorPicker = undefined;\n this.fontColor = undefined;\n /**\n * @private\n */\n this.characterFormat = undefined;\n /* eslint-disable */\n this.clearButtonClick = function (args) {\n _this.textBoxInput.value = '';\n _this.valueBoxInput.value = '';\n for (var i = 0; i < _this.convertedItems.length; i++) {\n if (_this.convertedItems[parseInt(i.toString(), 10)].value === _this.currentSelectedItem) {\n _this.currentContentControl.contentControlProperties.contentControlListItems.splice(i, 1);\n _this.convertedItems.splice(i, 1);\n }\n }\n _this.listviewInstance.dataSource = _this.convertedItems.slice();\n _this.listviewInstance.dataBind();\n };\n /* eslint-disable */\n this.setButtonClick = function (args) {\n if (!isNullOrUndefined(_this.textBoxInput.value) ||\n !isNullOrUndefined(_this.valueBoxInput.value)) {\n var newItem = new ContentControlListItems();\n newItem.displayText = _this.textBoxInput.value ? _this.textBoxInput.value : '';\n newItem.value = _this.valueBoxInput.value ? _this.valueBoxInput.value : '';\n _this.currentContentControl.contentControlProperties.contentControlListItems.push(newItem);\n var convertedItem = {\n displayText: newItem.displayText,\n value: newItem.value\n };\n _this.convertedItems.push(convertedItem);\n _this.listviewInstance.addItem([convertedItem]);\n }\n _this.textBoxInput.value = '';\n _this.valueBoxInput.value = '';\n };\n /**\n * @private\n * @returns {void}\n */\n this.onKeyUpOnTextBox = function () {\n _this.enableOrDisableButton();\n };\n this.loadPropertiesdialog = function () {\n _this.currentContentControl = _this.documentHelper.owner.editor.getContentControl();\n if (!isNullOrUndefined(_this.currentContentControl)) {\n _this.contentEditedCheckBox.checked = _this.currentContentControl.contentControlProperties.lockContents;\n _this.contentDeletedCheckBox.checked = _this.currentContentControl.contentControlProperties.lockContentControl;\n _this.removeCheckBox.checked = _this.currentContentControl.contentControlProperties.isTemporary;\n _this.multilineCheckBox.checked = _this.currentContentControl.contentControlProperties.multiline;\n _this.colorPicker.value = _this.currentContentControl.contentControlProperties.color;\n if (_this.removeCheckBox.checked) {\n _this.contentEditedCheckBox.checked = false;\n }\n _this.titleText.value = _this.currentContentControl.contentControlProperties.title ? _this.currentContentControl.contentControlProperties.title : '';\n _this.tagText.value = _this.currentContentControl.contentControlProperties.tag ? _this.currentContentControl.contentControlProperties.tag : '';\n _this.fontColor = _this.currentContentControl.contentControlProperties.color;\n if (_this.currentContentControl.contentControlProperties.type === 'Text') {\n _this.plainTextPropertiesDiv.style.display = 'block';\n }\n else {\n _this.plainTextPropertiesDiv.style.display = 'none';\n }\n if (_this.currentContentControl.contentControlProperties.type === 'ComboBox' || _this.currentContentControl.contentControlProperties.type === 'DropDownList') {\n _this.dropDownPropertiesDiv.style.display = 'block';\n }\n else {\n _this.dropDownPropertiesDiv.style.display = 'none';\n }\n if (!isNullOrUndefined(_this.currentContentControl.contentControlProperties.contentControlListItems !== undefined)) {\n _this.convertedItems = _this.currentContentControl.contentControlProperties.contentControlListItems.map(function (item) {\n var convertedItem = {};\n for (var prop in item) {\n convertedItem[\"\" + prop] = item[\"\" + prop];\n }\n return convertedItem;\n });\n _this.listviewInstance.dataSource = _this.convertedItems;\n _this.listviewInstance.dataBind();\n }\n }\n _this.documentHelper.updateFocus();\n };\n this.applyProperties = function () {\n if (!isNullOrUndefined(_this.fontColor)) {\n _this.currentContentControl.contentControlProperties.color = _this.fontColor;\n }\n var contentControlImage = _this.documentHelper.owner.getImageContentControl();\n if ((contentControlImage instanceof ContentControl && contentControlImage.contentControlProperties.type == 'Picture')) {\n contentControlImage.contentControlProperties.lockContents = _this.contentEditedCheckBox.checked;\n contentControlImage.contentControlProperties.lockContentControl = _this.contentDeletedCheckBox.checked;\n contentControlImage.contentControlProperties.isTemporary = _this.removeCheckBox.checked;\n if (_this.removeCheckBox.checked) {\n contentControlImage.contentControlProperties.lockContents = false;\n }\n contentControlImage.contentControlProperties.title = _this.titleText.value !== undefined ? _this.titleText.value : '';\n contentControlImage.contentControlProperties.tag = _this.tagText.value !== undefined ? _this.tagText.value : '';\n contentControlImage.contentControlProperties.multiline = _this.multilineCheckBox.checked;\n }\n if (!isNullOrUndefined(_this.currentContentControl)) {\n _this.currentContentControl.contentControlProperties.lockContents = _this.contentEditedCheckBox.checked;\n _this.currentContentControl.contentControlProperties.lockContentControl = _this.contentDeletedCheckBox.checked;\n _this.currentContentControl.contentControlProperties.isTemporary = _this.removeCheckBox.checked;\n if (_this.removeCheckBox.checked) {\n _this.currentContentControl.contentControlProperties.lockContents = false;\n }\n _this.currentContentControl.contentControlProperties.title = _this.titleText.value !== undefined ? _this.titleText.value : '';\n _this.currentContentControl.contentControlProperties.tag = _this.tagText.value !== undefined ? _this.tagText.value : '';\n _this.currentContentControl.contentControlProperties.multiline = _this.multilineCheckBox.checked;\n }\n _this.unWireEventsAndBindings();\n _this.documentHelper.dialog.hide();\n _this.documentHelper.viewer.updateScrollBars();\n _this.documentHelper.updateFocus();\n };\n this.closePropertiesDialog = function () {\n _this.documentHelper.dialog.hide();\n _this.unWireEventsAndBindings();\n _this.documentHelper.updateFocus();\n };\n this.fontColorUpdate = function (args) {\n if (!isNullOrUndefined(args.currentValue)) {\n _this.fontColor = args.currentValue.hex;\n }\n };\n /**\n * @private\n * @param args args value.\n * @returns {void}\n */\n /* eslint-disable */\n this.selectHandler = function (args) {\n _this.currentSelectedItem = args.text;\n };\n this.documentHelper = documentHelper;\n }\n ContentControlPropertiesDialog.prototype.getModuleName = function () {\n return 'ContentControlPropertiesDialog';\n };\n ContentControlPropertiesDialog.prototype.createInputElement = function (type, id, className) {\n var element = createElement('input', {\n attrs: { type: type },\n id: id,\n className: className\n });\n return element;\n };\n ContentControlPropertiesDialog.prototype.initContentControlPropertiesDialog = function (localeValue, enableRtl) {\n var _this = this;\n this.target = createElement('div', { className: 'e-de-hyperlink' });\n var container = createElement('div');\n var generalDiv = createElement('div');\n var genLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localeValue.getConstant('General') });\n generalDiv.appendChild(genLabel);\n var displayText = createElement('div', { className: 'e-de-dlg-container' });\n this.titleText = createElement('input', { className: 'e-input' });\n displayText.appendChild(this.titleText);\n generalDiv.appendChild(displayText);\n this.tagText = createElement('input', { className: 'e-input' });\n generalDiv.appendChild(this.tagText);\n var colorDiv = createElement('div', { className: 'e-de-container-row' });\n colorDiv.style.paddingTop = '10px';\n this.fontColorDiv = createElement('div', { className: 'e-de-font-dlg-display' });\n var fontColorLabel = createElement('label', {\n className: 'e-de-font-dlg-header-font-color e-de-font-color-margin',\n innerHTML: localeValue.getConstant('Color')\n });\n // if (isRtl) {\n // fontColorLabel.classList.add('e-de-rtl');\n // }\n this.fontColorDiv.appendChild(fontColorLabel);\n var fontColorElement = this.createInputElement('color', this.target.id + '_ColorDiv', 'e-de-font-dlg-color');\n this.fontColorDiv.appendChild(fontColorElement);\n colorDiv.appendChild(this.fontColorDiv);\n generalDiv.appendChild(colorDiv);\n var _a = this.documentHelper.owner.documentEditorSettings.colorPickerSettings, columns = _a.columns, createPopupOnClick = _a.createPopupOnClick, cssClass = _a.cssClass, disabled = _a.disabled, enablePersistence = _a.enablePersistence, inline = _a.inline, mode = _a.mode, modeSwitcher = _a.modeSwitcher, noColor = _a.noColor, presetColors = _a.presetColors, showButtons = _a.showButtons;\n this.colorPicker = new ColorPicker({\n change: this.fontColorUpdate, value: '#000000', locale: this.documentHelper.owner.locale, enableOpacity: false, mode: mode, modeSwitcher: modeSwitcher, showButtons: showButtons, columns: columns, createPopupOnClick: createPopupOnClick, cssClass: cssClass, disabled: disabled, enablePersistence: enablePersistence, inline: inline, noColor: noColor, presetColors: presetColors\n });\n this.colorPicker.appendTo(fontColorElement);\n var style = createElement('div', { styles: 'display:block' });\n generalDiv.appendChild(style);\n var remove = createElement('div', { styles: 'display:block' });\n generalDiv.appendChild(remove);\n var removeContent = createElement('input', {\n attrs: { type: 'checkbox' }\n });\n remove.appendChild(removeContent);\n this.removeCheckBox = new CheckBox({\n label: localeValue.getConstant('Remove content control when contents are edited'),\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.removeCheckBox.appendTo(removeContent);\n removeContent.setAttribute('aria-label', localeValue.getConstant('Remove content control when contents are edited'));\n container.appendChild(generalDiv);\n var lockedDiv = createElement('div');\n lockedDiv.style.paddingTop = '10px';\n var lockedLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localeValue.getConstant('Locking') });\n lockedDiv.appendChild(lockedLabel);\n var contentDelete = createElement('div', { styles: 'display:block' });\n lockedDiv.appendChild(contentDelete);\n var contentDeleted = createElement('input', {\n attrs: { type: 'checkbox' }\n });\n contentDelete.appendChild(contentDeleted);\n this.contentDeletedCheckBox = new CheckBox({\n label: localeValue.getConstant('Content control cannot be deleted'),\n cssClass: 'e-de-para-dlg-cs-check-box',\n change: function (args) {\n if (args.checked) {\n _this.removeCheckBox.disabled = true;\n _this.removeCheckBox.dataBind();\n }\n else {\n _this.removeCheckBox.disabled = false;\n _this.removeCheckBox.dataBind();\n }\n }\n });\n this.contentDeletedCheckBox.appendTo(contentDeleted);\n contentDeleted.setAttribute('aria-label', localeValue.getConstant('Content control cannot be deleted'));\n var contentEdit = createElement('div', { styles: 'display:block' });\n lockedDiv.appendChild(contentEdit);\n var contentEdited = createElement('input', {\n attrs: { type: 'checkbox' }\n });\n contentEdit.appendChild(contentEdited);\n this.contentEditedCheckBox = new CheckBox({\n label: localeValue.getConstant('Contents cannot be edited'),\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.contentEditedCheckBox.appendTo(contentEdited);\n contentEdited.setAttribute('aria-label', localeValue.getConstant('Contents cannot be edited'));\n container.appendChild(lockedDiv);\n this.plainTextPropertiesDiv = createElement('div');\n this.plainTextPropertiesDiv.style.marginTop = '10px';\n this.plainTextPropertiesDiv.style.display = 'none';\n var plainTextLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localeValue.getConstant('Plain Text properties') });\n this.plainTextPropertiesDiv.appendChild(plainTextLabel);\n var multiline = createElement('input', {\n attrs: { type: 'checkbox' }\n });\n this.plainTextPropertiesDiv.appendChild(multiline);\n this.multilineCheckBox = new CheckBox({\n label: localeValue.getConstant('Allow carriage returns'),\n //enableRtl: isRtl,\n cssClass: 'e-de-para-dlg-cs-check-box'\n });\n this.multilineCheckBox.appendTo(multiline);\n multiline.setAttribute('aria-label', localeValue.getConstant('Allow carriage returns'));\n container.appendChild(this.plainTextPropertiesDiv);\n this.dropDownPropertiesDiv = createElement('div');\n this.dropDownPropertiesDiv.style.marginTop = '10px';\n this.dropDownPropertiesDiv.style.display = 'none';\n var lockedcontentLabel = createElement('div', { className: 'e-de-para-dlg-heading', innerHTML: localeValue.getConstant('Drop_Down List properties') });\n this.dropDownPropertiesDiv.appendChild(lockedcontentLabel);\n var commonDiv = createElement('div', { className: 'e-bookmark-common' });\n this.dropDownPropertiesDiv.appendChild(commonDiv);\n var searchDiv = createElement('div', { className: 'e-bookmark-list' });\n commonDiv.appendChild(searchDiv);\n var textBoxDiv = createElement('div', { className: 'e-bookmark-textboxdiv' });\n searchDiv.appendChild(textBoxDiv);\n this.textBoxInput = createElement('input', { className: 'e-input e-bookmark-textbox-input', id: 'bookmark_text_box' });\n this.textBoxInput.setAttribute('type', 'text');\n this.textBoxInput.addEventListener('keyup', this.onKeyUpOnTextBox);\n this.textBoxInput.setAttribute('aria-label', localeValue.getConstant('Display Text'));\n textBoxDiv.appendChild(this.textBoxInput);\n var valueBoxDiv = createElement('div', { className: 'e-bookmark-textboxdiv' });\n searchDiv.appendChild(valueBoxDiv);\n this.valueBoxInput = createElement('input', { className: 'e-input e-bookmark-textbox-input', id: 'bookmark_text_box' });\n this.valueBoxInput.setAttribute('type', 'text');\n this.valueBoxInput.addEventListener('keyup', this.onKeyUpOnTextBox);\n this.valueBoxInput.setAttribute('aria-label', localeValue.getConstant('Value'));\n valueBoxDiv.appendChild(this.valueBoxInput);\n var listviewDiv = createElement('div', { className: 'e-bookmark-listViewDiv', id: 'bookmark_listview', attrs: { tabindex: '-1', role: 'listbox' } });\n searchDiv.appendChild(listviewDiv);\n this.listviewInstance = new ListView({\n cssClass: 'e-bookmark-listview',\n select: this.selectHandler,\n fields: { text: 'value' }\n });\n this.listviewInstance.appendTo(listviewDiv);\n var buttonDiv = createElement('div', { className: 'e-bookmark-button' });\n commonDiv.appendChild(buttonDiv);\n var addbuttonDiv = createElement('div', { className: 'e-bookmark-addbutton' });\n buttonDiv.appendChild(addbuttonDiv);\n var addButtonElement = createElement('button', {\n innerHTML: 'Add', id: 'add',\n attrs: { type: 'button' }\n });\n addButtonElement.setAttribute('aria-label', localeValue.getConstant('Add'));\n addbuttonDiv.appendChild(addButtonElement);\n this.addButton = new Button({ cssClass: 'e-button-custom' });\n this.addButton.disabled = true;\n this.addButton.appendTo(addButtonElement);\n //addButtonElement.addEventListener('click', this.setButtonClick);\n addButtonElement.addEventListener('click', this.setButtonClick.bind(this));\n var deleteButtonDiv = createElement('div', { className: 'e-bookmark-deletebutton' });\n buttonDiv.appendChild(deleteButtonDiv);\n var deleteButtonElement = createElement('button', {\n innerHTML: 'Delete', id: 'delete',\n attrs: { type: 'button' }\n });\n deleteButtonElement.setAttribute('aria-label', 'Delete');\n deleteButtonDiv.appendChild(deleteButtonElement);\n this.deleteButton = new Button({ cssClass: 'e-button-custom' });\n this.deleteButton.appendTo(deleteButtonElement);\n deleteButtonElement.addEventListener('click', this.clearButtonClick);\n container.appendChild(this.dropDownPropertiesDiv);\n this.target.appendChild(container);\n new TextBox({ placeholder: localeValue.getConstant('Title'), floatLabelType: 'Always' }, this.titleText);\n new TextBox({ placeholder: localeValue.getConstant('Tag'), floatLabelType: 'Always' }, this.tagText);\n new TextBox({ placeholder: localeValue.getConstant('Display Text'), floatLabelType: 'Always' }, this.textBoxInput);\n new TextBox({ placeholder: localeValue.getConstant('Value'), floatLabelType: 'Always' }, this.valueBoxInput);\n };\n /**\n * @private\n * @returns {void}\n */\n ContentControlPropertiesDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n this.localeValue = localValue;\n if (!this.target) {\n this.initContentControlPropertiesDialog(localValue, false);\n }\n if (this.documentHelper.selection.caret.style.display !== 'none') {\n this.documentHelper.selection.caret.style.display = 'none';\n }\n if (this.dropDownPropertiesDiv.style.display !== 'none' || this.plainTextPropertiesDiv.style.display !== 'none') {\n this.dropDownPropertiesDiv.style.display = 'none';\n this.plainTextPropertiesDiv.style.display = 'none';\n }\n this.documentHelper.dialog.header = localValue.getConstant('Content Control Properties');\n this.documentHelper.dialog.height = 'auto';\n this.documentHelper.dialog.width = 'auto';\n this.documentHelper.dialog.beforeOpen = this.loadPropertiesdialog;\n this.documentHelper.dialog.content = this.target;\n this.documentHelper.dialog.buttons = [\n {\n click: this.applyProperties,\n buttonModel: { content: this.localeValue.getConstant('Ok'), cssClass: 'e-flat e-para-okay', isPrimary: true }\n },\n {\n click: this.closePropertiesDialog,\n buttonModel: { content: this.localeValue.getConstant('Cancel'), cssClass: 'e-flat e-para-cancel' }\n }\n ];\n this.documentHelper.dialog.close = this.documentHelper.updateFocus;\n this.documentHelper.dialog.dataBind();\n this.documentHelper.dialog.show();\n };\n ContentControlPropertiesDialog.prototype.enableOrDisableButton = function () {\n if (!isNullOrUndefined(this.addButton)) {\n this.addButton.disabled = this.textBoxInput.value === '' || this.valueBoxInput.value === '';\n }\n };\n ContentControlPropertiesDialog.prototype.unWireEventsAndBindings = function () {\n this.fontColor = undefined;\n this.currentContentControl = undefined;\n this.currentSelectedItem = undefined;\n this.convertedItems = [];\n };\n /**\n * @private\n * @returns {void}\n */\n ContentControlPropertiesDialog.prototype.destroy = function () {\n if (this.contentDeletedCheckBox) {\n this.contentDeletedCheckBox.destroy();\n this.contentDeletedCheckBox = undefined;\n }\n if (this.contentEditedCheckBox) {\n this.contentEditedCheckBox.destroy();\n this.contentEditedCheckBox = undefined;\n }\n if (this.removeCheckBox) {\n this.removeCheckBox.destroy();\n this.removeCheckBox = undefined;\n }\n if (this.multilineCheckBox) {\n this.multilineCheckBox.destroy();\n this.multilineCheckBox = undefined;\n }\n if (this.listviewInstance) {\n this.listviewInstance.destroy();\n this.listviewInstance = undefined;\n }\n if (this.textBoxInput) {\n this.textBoxInput.remove();\n this.textBoxInput = undefined;\n }\n if (this.valueBoxInput) {\n this.valueBoxInput.remove();\n this.valueBoxInput = undefined;\n }\n if (this.titleText) {\n this.titleText.remove();\n this.titleText = undefined;\n }\n if (this.tagText) {\n this.tagText.remove();\n this.tagText = undefined;\n }\n if (this.colorPicker) {\n this.colorPicker.destroy();\n }\n this.colorPicker = undefined;\n this.documentHelper = undefined;\n if (!isNullOrUndefined(this.target)) {\n if (this.target.parentElement) {\n this.target.parentElement.removeChild(this.target);\n }\n for (var i = 0; i < this.target.childNodes.length; i++) {\n this.target.removeChild(this.target.childNodes[parseInt(i.toString(), 10)]);\n i--;\n }\n this.target = undefined;\n }\n };\n return ContentControlPropertiesDialog;\n}());\nexport { ContentControlPropertiesDialog };\n","import { Browser, EventHandler, L10n, createElement } from '@syncfusion/ej2-base';\n/**\n * To show the dialog is used to insert image on picture Content Control.\n */\nvar PicContentControlDialog = /** @class */ (function () {\n /**\n * @param {DocumentHelper} documentHelper - Specifies the document helper\n * @private\n */\n function PicContentControlDialog(documentHelper) {\n var _this = this;\n /**\n * @private\n * @returns {void}\n */\n this.onCancelButtonClick = function () {\n _this.documentHelper.dialog2.hide();\n _this.documentHelper.updateFocus();\n };\n /**\n * @private\n * @returns {void}\n */\n this.onInsertPicClick = function () {\n _this.documentHelper.dialog2.hide();\n _this.imagePicker = createElement('input', {\n attrs: { type: 'file', accept: '.jpg,.jpeg,.png,.bmp,.svg' }, className: 'e-de-ctnr-file-picker'\n });\n if (Browser.isIE) {\n document.body.appendChild(_this.imagePicker);\n }\n _this.imagePicker.value = '';\n _this.imagePicker.click();\n EventHandler.add(_this.imagePicker, 'change', _this.onImageChange, _this);\n };\n this.documentHelper = documentHelper;\n }\n PicContentControlDialog.prototype.getModuleName = function () {\n return 'PicContentControlDialog';\n };\n /**\n * @private\n * @returns {void}\n */\n PicContentControlDialog.prototype.show = function () {\n var localValue = new L10n('documenteditor', this.documentHelper.owner.defaultLocale);\n localValue.setLocale(this.documentHelper.owner.locale);\n this.localeValue = localValue;\n this.documentHelper.dialog2.header = localValue.getConstant('Insert Pictures');\n this.documentHelper.dialog2.showCloseIcon = true;\n this.documentHelper.dialog2.allowDragging = true;\n this.documentHelper.dialog2.position = { X: 'center', Y: 'center' };\n this.documentHelper.dialog2.beforeOpen = this.documentHelper.updateFocus;\n this.documentHelper.dialog2.buttons = [{\n click: this.onInsertPicClick,\n buttonModel: { content: localValue.getConstant('Upload from computer'), iconCss: 'e-icons e-de-ctnr-upload', iconPosition: 'Left' }\n }];\n this.documentHelper.dialog2.dataBind();\n this.documentHelper.dialog2.show();\n };\n PicContentControlDialog.prototype.onImageChange = function () {\n var _this = this;\n var file = this.imagePicker.files[0];\n var fileReader = new FileReader();\n fileReader.onload = function () {\n _this.insertImage(fileReader.result);\n };\n fileReader.readAsDataURL(file);\n };\n PicContentControlDialog.prototype.insertImage = function (data) {\n var image = document.createElement('img');\n var documentHelper = this.documentHelper;\n var container = this.container;\n image.addEventListener('load', function () {\n documentHelper.owner.editorModule.insertImageInternal(data, true, this.width, this.height, this.alt);\n //to upload an image newly = false, this condition applies and to replace the new image = true , this condition not applies\n if (!documentHelper.owner.selection.isImageSelected) {\n documentHelper.owner.selection.handleShiftLeftKey();\n documentHelper.owner.editor.insertContentControl('Picture');\n }\n });\n image.src = data;\n };\n /**\n * @private\n * @returns {void}\n */\n PicContentControlDialog.prototype.destroy = function () {\n this.documentHelper = undefined;\n if (this.imagePicker) {\n this.imagePicker.remove();\n this.imagePicker = undefined;\n }\n };\n return PicContentControlDialog;\n}());\nexport { PicContentControlDialog };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { Component, Property, NotifyPropertyChanges, Event, ChildProperty, classList, Complex, formatUnit } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, L10n, Browser } from '@syncfusion/ej2-base';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { XmlHttpRequestHandler, beforeXmlHttpRequestSend } from './index';\nimport { LayoutViewer, PageLayoutViewer, WebLayoutViewer, BulletsAndNumberingDialog } from './index';\nimport { Print } from './index';\nimport { BodyWidget, ParagraphWidget } from './index';\nimport { WSectionFormat, WParagraphFormat, WCharacterFormat } from './index';\nimport { SfdtReader } from './index';\nimport { Selection } from './index';\nimport { Editor, EditorHistory } from './index';\nimport { WStyles } from './index';\nimport { Search } from './index';\nimport { OptionsPane } from './index';\nimport { WordExport } from './index';\nimport { TextExport } from './index';\nimport { ContextMenu } from './index';\nimport { ImageResizer } from './index';\nimport { SfdtExport } from './index';\nimport { HyperlinkDialog, TableDialog, BookmarkDialog, StylesDialog, TableOfContentsDialog } from './index';\nimport { PageSetupDialog, ParagraphDialog, ListDialog, StyleDialog, FontDialog } from './index';\nimport { TablePropertiesDialog, BordersAndShadingDialog, CellOptionsDialog, TableOptionsDialog } from './index';\nimport { SpellChecker } from './implementation/spell-check/spell-checker';\nimport { SpellCheckDialog } from './implementation/dialogs/spellCheck-dialog';\nimport { DocumentHelper, listsProperty, abstractListsProperty } from './index';\nimport { CheckBoxFormFieldDialog, DropDownFormField, TextFormField, CheckBoxFormField } from './implementation/index';\nimport { TextFormFieldDialog } from './implementation/dialogs/form-field-text-dialog';\nimport { DropDownFormFieldDialog } from './implementation/dialogs/form-field-drop-down-dialog';\nimport { RevisionCollection } from './implementation/track-changes/track-changes';\nimport { NotesDialog } from './implementation/dialogs/notes-dialog';\nimport { ContentControl, FootNoteWidget, ImageElementBox, TextElementBox } from './implementation/viewer/page';\nimport { internalZoomFactorChange, contentChangeEvent, documentChangeEvent, selectionChangeEvent, zoomFactorChangeEvent, beforeFieldFillEvent, afterFieldFillEvent, serviceFailureEvent, viewChangeEvent, customContextMenuSelectEvent, customContextMenuBeforeOpenEvent, internalviewChangeEvent, internalDocumentEditorSettingsChange, trackChanges, internalOptionPaneChange } from './base/constants';\nimport { Optimized, Regular, HelperMethods } from './index';\nimport { ColumnsDialog } from './implementation/dialogs/columns-dialog';\nimport { ZipArchiveItem, ZipArchive } from '@syncfusion/ej2-compression';\nimport { TabDialog } from './implementation/dialogs/tab-dialog';\nimport { RulerHelper } from './implementation/utility/dom-util';\nimport { DatePickerDialog } from './implementation/dialogs/datepicker-dialog';\nimport { ContentControlPropertiesDialog } from './implementation/dialogs/content-control-properties-dialog';\nimport { PicContentControlDialog } from './implementation/dialogs/pic-contentControl-dialog';\nimport { DialogUtility, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\n/**\n * The `DocumentEditorSettings` module is used to provide the customize property of Document Editor.\n */\nvar DocumentEditorSettings = /** @class */ (function (_super) {\n __extends(DocumentEditorSettings, _super);\n function DocumentEditorSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], DocumentEditorSettings.prototype, \"popupTarget\", void 0);\n __decorate([\n Property('#FFE97F')\n ], DocumentEditorSettings.prototype, \"searchHighlightColor\", void 0);\n __decorate([\n Property(['Algerian', 'Arial', 'Calibri', 'Cambria', 'Cambria Math', 'Candara', 'Courier New', 'Georgia', 'Impact', 'Segoe Print', 'Segoe Script', 'Segoe UI', 'Symbol', 'Times New Roman', 'Verdana', 'Wingdings'])\n ], DocumentEditorSettings.prototype, \"fontFamilies\", void 0);\n __decorate([\n Property({ shadingColor: '#cfcfcf', applyShading: true, selectionColor: '#cccccc', formFillingMode: 'Popup' })\n ], DocumentEditorSettings.prototype, \"formFieldSettings\", void 0);\n __decorate([\n Property({ interval: 2000, itertationCount: 5 })\n ], DocumentEditorSettings.prototype, \"autoResizeSettings\", void 0);\n __decorate([\n Property({ roomName: '', editableRegionColor: '#22b24b', lockedRegionColor: '#f44336' })\n ], DocumentEditorSettings.prototype, \"collaborativeEditingSettings\", void 0);\n __decorate([\n Property(1)\n ], DocumentEditorSettings.prototype, \"printDevicePixelRatio\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorSettings.prototype, \"enableOptimizedTextMeasuring\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorSettings.prototype, \"allowDragAndDrop\", void 0);\n __decorate([\n Property(32767)\n ], DocumentEditorSettings.prototype, \"maximumRows\", void 0);\n __decorate([\n Property(63)\n ], DocumentEditorSettings.prototype, \"maximumColumns\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorSettings.prototype, \"showHiddenMarks\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorSettings.prototype, \"showBookmarks\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorSettings.prototype, \"highlightEditableRanges\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorSettings.prototype, \"optimizeSfdt\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorSettings.prototype, \"showRuler\", void 0);\n __decorate([\n Property({ mode: 'Picker', modeSwitcher: true, showButtons: true })\n ], DocumentEditorSettings.prototype, \"colorPickerSettings\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorSettings.prototype, \"showNavigationPane\", void 0);\n __decorate([\n Property({ mentionChar: '@' })\n ], DocumentEditorSettings.prototype, \"mentionSettings\", void 0);\n return DocumentEditorSettings;\n}(ChildProperty));\nexport { DocumentEditorSettings };\n/**\n * Represents the settings and properties of the document that is opened in Document editor component.\n */\nvar DocumentSettings = /** @class */ (function (_super) {\n __extends(DocumentSettings, _super);\n function DocumentSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Word2013')\n ], DocumentSettings.prototype, \"compatibilityMode\", void 0);\n return DocumentSettings;\n}(ChildProperty));\nexport { DocumentSettings };\n/**\n * Represents the settings required for resizing the Document editor automatically when the visibility of parent element changed.\n */\nvar AutoResizeSettings = /** @class */ (function (_super) {\n __extends(AutoResizeSettings, _super);\n function AutoResizeSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(2000)\n ], AutoResizeSettings.prototype, \"interval\", void 0);\n __decorate([\n Property(5)\n ], AutoResizeSettings.prototype, \"iterationCount\", void 0);\n return AutoResizeSettings;\n}(ChildProperty));\nexport { AutoResizeSettings };\n/**\n * The Document editor component is used to draft, save or print rich text contents as page by page.\n */\nvar DocumentEditor = /** @class */ (function (_super) {\n __extends(DocumentEditor, _super);\n /**\n * Initializes a new instance of the DocumentEditor class.\n *\n * @param {DocumentEditorModel} options Specifies the document editor model.\n * @param {string | HTMLElement} element Specifies the element.\n */\n function DocumentEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.enableHeaderFooterIn = false;\n /**\n * @private\n */\n _this.isShiftingEnabled = false;\n /**\n * @private\n */\n _this.isContainerResize = false;\n /**\n * @private\n */\n _this.isLayoutEnabled = true;\n /**\n * @private\n */\n _this.isPastingContent = false;\n /**\n * @private\n */\n _this.isOnIndent = false;\n /**\n * @private\n */\n _this.isTableMarkerDragging = false;\n /**\n * @private\n */\n _this.startXPosition = 0;\n /**\n * @private\n */\n _this.parser = undefined;\n /**\n * @private\n */\n _this.isUpdateTrackChanges = false;\n _this.disableHistoryIn = false;\n _this.documentSettingOps = [];\n /**\n * @private\n */\n _this.skipSettingsOps = false;\n _this.isSettingOp = false;\n /**\n * @private\n */\n _this.findResultsList = undefined;\n /**\n * @private\n */\n _this.tablePropertiesDialogModule = undefined;\n /**\n * @private\n */\n _this.bordersAndShadingDialogModule = undefined;\n /**\n * @private\n */\n _this.cellOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.tableOptionsDialogModule = undefined;\n /**\n * @private\n */\n _this.paragraphDialogModule = undefined;\n /**\n * @private\n */\n _this.imageResizerModule = undefined;\n _this.createdTriggered = false;\n /**\n * @private\n */\n _this.serverActionSettingsImport = 'Import';\n /**\n * @private\n */\n _this.defaultLocale = {\n 'Table': 'Table',\n 'Row': 'Row',\n 'Cell': 'Cell',\n 'Ok': 'OK',\n 'Apply': 'Apply',\n 'Alt Text': 'Alt Text',\n 'Title': 'Title',\n 'Description': 'Description',\n 'Cancel': 'Cancel',\n 'Size': 'Size',\n 'Preferred Width': 'Preferred width',\n 'Points': 'Points',\n 'Percent': 'Percent',\n 'Measure in': 'Measure in',\n 'Alignment': 'Alignment',\n 'OutlineLevel': 'Outline Level',\n 'BodyText': 'Body Text',\n 'Level1': 'Level 1',\n 'Level2': 'Level 2',\n 'Level3': 'Level 3',\n 'Level4': 'Level 4',\n 'Level5': 'Level 5',\n 'Level6': 'Level 6',\n 'Level7': 'Level 7',\n 'Level8': 'Level 8',\n 'Level9': 'Level 9',\n 'Left': 'Left',\n 'Center': 'Center',\n 'Right': 'Right',\n 'Decimal': 'Decimal',\n 'Bar': 'Bar',\n 'Justify': 'Justify',\n 'Indent from left': 'Indent from left',\n 'Borders and Shading': 'Borders and Shading',\n 'Options': 'Options',\n 'Specify height': 'Specify height',\n 'At least': 'At least',\n 'Exactly': 'Exactly',\n 'Row height is': 'Row height is',\n 'Allow row to break across pages': 'Allow row to break across pages',\n 'Repeat as header row at the top of each page': 'Repeat as header row at the top of each page',\n 'Vertical alignment': 'Vertical alignment',\n 'Top': 'Top',\n 'Bottom': 'Bottom',\n 'Default cell margins': 'Default cell margins',\n 'Default cell spacing': 'Default cell spacing',\n 'Allow spacing between cells': 'Allow spacing between cells',\n 'Cell margins': 'Cell margins',\n 'Same as the whole table': 'Same as the whole table',\n 'Borders': 'Borders',\n 'None': 'None',\n 'Style': 'Style',\n 'Width': 'Width',\n 'Height': 'Height',\n 'Letter': 'Letter',\n '1, 2, 3, ...': '1, 2, 3, ...',\n 'a, b, c, ...': 'a, b, c, ...',\n 'A, B, C, ...': 'A, B, C, ...',\n 'I, II, III, ...': 'I, II, III, ...',\n 'i, ii, iii, ...': 'i, ii, iii, ...',\n 'Tabloid': 'Tabloid',\n 'Legal': 'Legal',\n 'Statement': 'Statement',\n 'Executive': 'Executive',\n 'A3': 'A3',\n 'A4': 'A4',\n 'A5': 'A5',\n 'B4': 'B4',\n 'B5': 'B5',\n 'Custom Size': 'Custom size',\n 'Different odd and even': 'Different odd and even',\n 'Different first page': 'Different first page',\n 'From edge': 'From edge',\n 'Header': 'Header',\n 'Footer': 'Footer',\n 'First Page Header': 'First Page Header',\n 'First Page Footer': 'First Page Footer',\n 'Even Page Header': 'Even Page Header',\n 'Even Page Footer': 'Even Page Footer',\n 'Odd Page Header': 'Odd Page Header',\n 'Odd Page Footer': 'Odd Page Footer',\n 'Same as Previous': 'Same as Previous',\n 'Section': 'Section',\n 'Margin': 'Margins',\n 'Paper': 'Paper',\n 'Layout': 'Layout',\n 'Orientation': 'Orientation',\n 'Landscape': 'Landscape',\n 'Portrait': 'Portrait',\n 'Show page numbers': 'Show page numbers',\n 'Right align page numbers': 'Right align page numbers',\n 'Nothing': 'Nothing',\n 'Tab leader': 'Tab leader',\n 'Leader': 'Leader',\n 'Show levels': 'Show levels',\n 'Use hyperlinks instead of page numbers': 'Use hyperlinks instead of page numbers',\n 'Build table of contents from': 'Build table of contents from',\n 'Styles': 'Styles',\n 'Available styles': 'Available styles',\n 'TOC level': 'TOC level',\n 'Heading': 'Heading',\n 'Heading 1': 'Heading 1',\n 'Heading 2': 'Heading 2',\n 'Heading 3': 'Heading 3',\n 'Heading 4': 'Heading 4',\n 'Heading 5': 'Heading 5',\n 'Heading 6': 'Heading 6',\n 'Heading 7': 'Heading 7',\n 'Heading 8': 'Heading 8',\n 'Heading 9': 'Heading 9',\n 'List Paragraph': 'List Paragraph',\n 'Normal': 'Normal',\n 'Outline levels': 'Outline levels',\n 'Table entry fields': 'Table entry fields',\n 'Modify': 'Modify',\n 'Color': 'Color',\n 'Setting': 'Setting',\n 'Box': 'Box',\n 'All': 'All',\n 'Custom': 'Custom',\n 'Preview': 'Preview',\n 'Shading': 'Shading',\n 'Fill': 'Fill',\n 'Apply To': 'Apply to',\n 'Table Properties': 'Table Properties',\n 'Cell Options': 'Cell Options',\n 'Table Options': 'Table Options',\n 'Insert Table': 'Insert Table',\n 'Number of columns': 'Number of columns',\n 'Number of rows': 'Number of rows',\n 'Text to display': 'Text to display',\n 'ScreenTip text': 'ScreenTip text',\n 'Address': 'Address',\n 'Insert Hyperlink': 'Insert Hyperlink',\n 'Edit Hyperlink': 'Edit Hyperlink',\n 'Insert': 'Insert',\n 'General': 'General',\n 'The number must be between': 'The number must be between 1 and 9',\n 'The Invalid number': 'This is not a valid number',\n 'Indentation': 'Indentation',\n 'Before text': 'Before text',\n 'Special': 'Special',\n 'First line': 'First line',\n 'Hanging': 'Hanging',\n 'After text': 'After text',\n 'By': 'By',\n 'Before': 'Before',\n 'Line Spacing': 'Line spacing',\n 'After': 'After',\n 'At': 'At',\n 'Multiple': 'Multiple',\n 'Spacing': 'Spacing',\n 'Define new Multilevel list': 'Define new Multilevel list',\n 'List level': 'List level',\n 'Choose level to modify': 'Choose level to modify',\n 'Level': 'Level',\n 'Number format': 'Number format',\n 'Number style for this level': 'Number style for this level',\n 'Enter formatting for number': 'Enter formatting for number',\n 'Start at': 'Start at',\n 'Restart list after': 'Restart list after',\n 'Position': 'Position',\n 'Text indent at': 'Text indent at',\n 'Aligned at': 'Aligned at',\n 'Follow number with': 'Follow number with',\n 'Tab character': 'Tab character',\n 'Space': 'Space',\n 'Arabic': 'Arabic',\n 'UpRoman': 'UpRoman',\n 'LowRoman': 'LowRoman',\n 'UpLetter': 'UpLetter',\n 'LowLetter': 'LowLetter',\n 'Number': 'Number',\n 'Leading zero': 'Leading zero',\n 'Bullet': 'Bullet',\n 'Ordinal': 'Ordinal',\n 'Ordinal Text': 'Ordinal Text',\n 'For East': 'For East',\n 'No Restart': 'No Restart',\n 'Font': 'Font',\n 'Font style': 'Font style',\n 'Underline style': 'Underline style',\n 'Font color': 'Font color',\n 'Effects': 'Effects',\n 'Strikethrough': 'Strikethrough',\n 'Superscript': 'Superscript',\n 'Subscript': 'Subscript',\n 'Double strikethrough': 'Double strikethrough',\n 'Regular': 'Regular',\n 'Bold': 'Bold',\n 'Italic': 'Italic',\n 'Cut': 'Cut',\n 'Copy': 'Copy',\n 'Paste': 'Paste',\n 'Hyperlink': 'Hyperlink',\n 'Remove Content Control': 'Remove Content Control',\n 'Content Control Properties': 'Content Control Properties',\n 'Remove content control when contents are edited': 'Remove content control when contents are edited',\n 'Content control cannot be deleted': 'Content control cannot be deleted',\n 'Contents cannot be edited': 'Contents cannot be edited',\n 'Plain Text properties': 'Plain Text properties',\n 'Allow carriage returns': 'Allow carriage returns',\n 'Drop_Down List properties': 'Drop_Down List properties',\n 'Display Text': 'Display Text',\n 'Locking': 'Locking',\n 'Tag': 'Tag',\n 'Value': 'Value',\n 'PictureContentControl': 'PictureContentControl',\n 'Upload from computer': 'Upload from computer',\n 'Picture': 'Picture',\n 'Choose an item': 'Choose an item',\n 'Insert Pictures': 'Insert Pictures',\n 'Open Hyperlink': 'Open Hyperlink',\n 'Copy Hyperlink': 'Copy Hyperlink',\n 'Remove Hyperlink': 'Remove Hyperlink',\n 'Paragraph': 'Paragraph',\n 'Linked Style': 'Linked(Paragraph and Character)',\n 'Character': 'Character',\n 'Merge Cells': 'Merge Cells',\n 'Insert Above': 'Insert Above',\n 'Insert Below': 'Insert Below',\n 'Insert Left': 'Insert Left',\n 'Insert Right': 'Insert Right',\n 'Delete': 'Delete',\n 'Delete Table': 'Delete Table',\n 'Delete Row': 'Delete Row',\n 'Delete Column': 'Delete Column',\n 'File Name': 'File Name',\n 'Format Type': 'Format Type',\n 'Save': 'Save',\n 'Navigation': 'Navigation',\n 'Results': 'Results',\n 'Replace': 'Replace',\n 'Replace All': 'Replace All',\n 'We replaced all': 'We replaced all',\n 'Find': 'Find',\n 'No matches': 'No matches',\n 'All Done': 'All Done',\n 'Result': 'Result',\n 'of': 'of',\n 'instances': 'instances',\n 'with': 'with',\n 'Click to follow link': 'Click to follow link',\n 'Continue Numbering': 'Continue Numbering',\n 'Bookmark name': 'Bookmark name',\n 'Tab': 'Tab',\n 'Tab stop position': 'Tab stop position',\n 'Close': 'Close',\n 'Restart At': 'Restart At',\n 'Properties': 'Properties',\n 'Name': 'Name',\n 'Style type': 'Style type',\n 'Style based on': 'Style based on',\n 'Style for following paragraph': 'Style for following paragraph',\n 'Formatting': 'Formatting',\n 'Numbering and Bullets': 'Numbering and Bullets',\n 'Numbering': 'Numbering',\n 'Update Field': 'Update Field',\n 'Edit Field': 'Edit Field',\n 'Bookmark': 'Bookmark',\n 'Page Setup': 'Page Setup',\n 'No bookmarks found': 'No bookmarks found',\n 'Number format tooltip information': 'Single-level number format:
      [PREFIX]%[LEVELNUMBER][SUFFIX]
      '\n + 'For example, \"Chapter %1.\" will display numbering like
      Chapter 1. Item
      Chapter 2. Item
      …'\n + '
      Chapter N. Item
      '\n + '
      Multilevel number format:
      [PREFIX]%[LEVELNUMBER][SUFFIX]+[PREFIX]%[LEVELNUMBER][SUFFIX]'\n + '
      For example, \"%1.%2.\" will display numbering like
      1.1. Item
      1.2. Item

      1.N. Item',\n 'Format': 'Format',\n 'Create New Style': 'Create New Style',\n 'Modify Style': 'Modify Style',\n 'New': 'New',\n 'InsertFootnote': 'InsertFootnote',\n 'InsertEndnote': 'InsertEndnote',\n 'Footnote': 'Footnote',\n 'Endnote': 'Endnote',\n 'Notes Options': 'Notes Options',\n 'Bullets': 'Bullets',\n 'Use bookmarks': 'Use bookmarks',\n 'Table of Contents': 'Table of Contents',\n 'AutoFit': 'AutoFit',\n 'AutoFit to Contents': 'AutoFit to Contents',\n 'AutoFit to Window': 'AutoFit to Window',\n 'Fixed Column Width': 'Fixed Column Width',\n 'Reset': 'Reset',\n 'Match case': 'Match case',\n 'Whole words': 'Whole words',\n 'Add': 'Add',\n 'Go To': 'Go To',\n 'Search for': 'Search for',\n 'Replace with': 'Replace with',\n 'TOC 1': 'TOC 1',\n 'TOC 2': 'TOC 2',\n 'TOC 3': 'TOC 3',\n 'TOC 4': 'TOC 4',\n 'TOC 5': 'TOC 5',\n 'TOC 6': 'TOC 6',\n 'TOC 7': 'TOC 7',\n 'TOC 8': 'TOC 8',\n 'TOC 9': 'TOC 9',\n 'Right-to-left': 'Right-to-left',\n 'Left-to-right': 'Left-to-right',\n 'Direction': 'Direction',\n 'Table direction': 'Table direction',\n 'Indent from right': 'Indent from right',\n /* eslint-disable */\n \"Contextual Spacing\": \"Don't add space between paragraphs of the same style\",\n \"Password Mismatch\": \"The password don't match\",\n 'Restrict Editing': 'Restrict Editing',\n 'Formatting restrictions': 'Formatting restrictions',\n 'Allow formatting': 'Allow formatting',\n 'Editing restrictions': 'Editing restrictions',\n 'Read only': 'Read only',\n 'Exceptions Optional': 'Exceptions (optional)',\n 'Select Part Of Document And User': 'Select parts of the document and choose users who are allowed to freely edit them.',\n 'Everyone': 'Everyone',\n 'More users': 'More users',\n 'Add Users': 'Add Users',\n 'Enforcing Protection': 'Yes, Start Enforcing Protection',\n 'Start Enforcing Protection': 'Start Enforcing Protection',\n 'Enter User': 'Enter User',\n 'Users': 'Users',\n 'Enter new password': 'Enter new password',\n 'Reenter new password to confirm': 'Reenter new password to confirm',\n 'Your permissions': 'Your permissions',\n 'Protected Document': 'This document is protected from unintentional editing.',\n 'FormFieldsOnly': 'You may only fill in forms in this region.',\n 'CommentsOnly': 'You may only insert comments into this region.',\n 'ReadOnlyProtection': 'You may edit in this region.',\n 'Stop Protection': 'Stop Protection',\n 'Password': 'Password',\n 'Spelling Editor': 'Spelling Editor',\n 'Spelling': 'Spelling',\n 'Spell Check': 'Spell Check',\n 'Underline errors': 'Underline errors',\n 'Ignore': 'Ignore',\n 'Ignore All': 'Ignore All',\n 'Add to Dictionary': 'Add to Dictionary',\n 'Change': 'Change',\n 'Change All': 'Change All',\n 'Suggestions': 'Suggestions',\n 'The password is incorrect': 'The password is incorrect',\n 'Error in establishing connection with web server': 'Error in establishing connection with web server',\n 'Highlight the regions I can edit': 'Highlight the regions I can edit',\n 'Show All Regions I Can Edit': 'Show All Regions I Can Edit',\n 'Find Next Region I Can Edit': 'Find Next Region I Can Edit',\n 'Keep source formatting': 'Keep source formatting',\n 'Match destination formatting': 'Match destination formatting',\n 'InsertAsRows': 'Insert as New Rows',\n 'InsertAsColumns': 'Insert as New Columns',\n 'OverwriteCells': 'Overwrite Cells',\n 'NestTable': 'Nest Table',\n 'Text only': 'Text only',\n 'Comments': 'Comments',\n 'Type your comment': 'Type your comment',\n 'Post': 'Post',\n 'Reply': 'Reply',\n 'New Comment': 'New Comment',\n 'Edit': 'Edit',\n 'Resolve': 'Resolve',\n 'Reopen': 'Reopen',\n 'No comments in this document': 'No comments in this document',\n 'more': 'more',\n 'Type your comment here': 'Type your comment here',\n 'Next Comment': 'Next Comment',\n 'Previous Comment': 'Previous Comment',\n 'Un-posted comments': 'Un-posted comments',\n 'Discard Comment': 'Added comments not posted. If you continue, that comment will be discarded.',\n 'No Headings': 'No Heading Found!',\n 'Add Headings': 'This document has no headings. Please add headings and try again.',\n 'More Options': 'More Options',\n 'Click to see this comment': 'Click to see this comment',\n 'Form Fields': 'Form Fields',\n 'Text Form': 'Text Form',\n 'Check Box': 'Check Box',\n 'Drop Down Form Field': 'Drop Down Form Field',\n 'Dropdown items': 'Drop-down items',\n 'Items in dropdown list': 'Items in drop-down list',\n 'ADD': 'ADD',\n 'REMOVE': 'REMOVE',\n 'Field settings': 'Field settings',\n 'Tooltip': 'Tooltip',\n 'Dropdown enabled': 'Drop-down enabled',\n 'Check Box Form Field': 'Check Box Form Field',\n 'Check box size': 'Check box size',\n 'Auto': 'Auto',\n 'Default value': 'Default value',\n 'Not checked': 'Not checked',\n 'Checked': 'Checked',\n 'Check box enabled': 'Check box enabled',\n 'Text Form Field': 'Text Form Field',\n 'Type': 'Type',\n 'Default text': 'Default text',\n 'Maximum length': 'Maximum length',\n 'Text format': 'Text format',\n 'Fillin enabled': 'Fill-in enabled',\n 'Default number': 'Default number',\n 'Default date': 'Default date',\n 'Date format': 'Date format',\n 'Merge Track': 'This action wont be marked as change. Do you want to continue?',\n 'UnTrack': 'Cannot be tracked !',\n 'Accept': 'Accept',\n 'Reject': 'Reject',\n 'Previous Changes': 'Previous Changes',\n 'Next Changes': 'Next Changes',\n 'Inserted': 'Inserted',\n 'Deleted': 'Deleted',\n 'Move From': 'Move From',\n 'Move To': 'Move To',\n 'Changes': 'Changes',\n 'Accept all': 'Accept all',\n 'Reject all': 'Reject all',\n 'No changes': 'No changes',\n 'Accept Changes': 'Accept Changes',\n 'Reject Changes': 'Reject Changes',\n 'User': 'User',\n 'View': 'View',\n 'Insertion': 'Insertion',\n 'Deletion': 'Deletion',\n 'All caps': 'All caps',\n 'This region is locked by': 'This region is locked by',\n 'Lock': 'Lock',\n 'Unlock': 'Unlock',\n 'Already locked': 'Selected or part of region is already locked by another user',\n 'Click to View/Edit Footnote': 'Click to View/Edit Footnote',\n 'Click to View/Edit Endnote': 'Click to View/Edit Endnote',\n 'Multiple Comment': 'Please post your comment',\n 'No suggestions': 'No suggestions',\n 'More Suggestion': 'More Suggestion',\n 'Ignore Once': 'Ignore Once',\n 'Keep With Next': 'Keep with next',\n 'Keep Lines Together': 'Keep lines together',\n 'WidowControl': 'Widow/Orphan control',\n 'Indents and Spacing': 'Indents and Spacing',\n 'Line and Page Breaks': 'Line and Page Breaks',\n 'Pagination': 'Pagination',\n 'Single': 'Single',\n 'DashSmallGap': 'DashSmallGap',\n 'DashDot': 'DashDot',\n 'Double': 'Double',\n 'ThinThickSmallGap': 'ThinThickSmallGap',\n 'ThickThinSmallGap': 'ThickThinSmallGap',\n 'ThickThinMediumGap': 'ThickThinMediumGap',\n 'ThickThinLargeGap': 'ThickThinLargeGap',\n 'SingleWavy': 'SingleWavy',\n 'DoubleWavy': 'DoubleWavy',\n 'Inset': 'Inset',\n 'DashLargeGap': 'DashLargeGap',\n 'Dot': 'Dot',\n 'DashDotDot': 'DashDotDot',\n 'Triple': 'Triple',\n 'ThinThickThinSmallGap': 'ThinThickThinSmallGap',\n 'ThinThickThinMediumGap': 'ThinThickThinMediumGap',\n 'ThinThickThinLargeGap': 'ThinThickThinLargeGap',\n 'DashDotStroked': 'DashDotStroked',\n 'Engrave3D': 'Engrave3D',\n 'Thick': 'Thick',\n 'Outset': 'Outset',\n 'Emboss3D': 'Emboss3D',\n 'ThinThickLargeGap': 'ThinThickLargeGap',\n 'ThinThickMediumGap': 'ThinThickMediumGap',\n 'Number of rows must be between': 'Number of rows must be between',\n 'Number of columns must be between': 'Number of columns must be between',\n 'and': 'and',\n 'Unlimited': 'Unlimited',\n 'Regular text': 'Regular text',\n 'Date': 'Date',\n 'Uppercase': 'Uppercase',\n 'Lowercase': 'Lowercase',\n 'FirstCapital': 'FirstCapital',\n 'TitleCase': 'Titlecase',\n 'Filling in forms': 'Filling in forms',\n 'px': 'px',\n 'Tracked changes': 'Tracked changes',\n 'TrackChangesOnly': 'You may edit in this region, but all change will be tracked.',\n 'RemovedIgnoreExceptions': 'If you make this change in document protection, Word will ignore all the exceptions in this document.',\n 'RemovedIgnore': 'Do you want to remove the ignored exceptions?',\n 'Information': 'Information',\n 'Yes': 'Yes',\n 'No': 'No',\n 'Page Break': 'Page Break',\n 'Column Break': 'Column Break',\n 'Section Break Next Page': 'Section Break (Next Page)',\n 'Section Break Continuous': 'Section Break (Continuous)',\n 'Unsupported format': 'The file format you have selected isn\\'t supported. Please choose valid format.',\n 'One': 'One',\n 'Two': 'Two',\n 'Three': 'Three',\n 'Presets': 'Presets',\n 'Columns': 'Columns',\n 'Split your text into two or more columns': 'Split your text into two or more columns',\n 'Line between column': 'Line between column',\n 'Width and Spacing': 'Width and Spacing',\n 'Equal column width': 'Equal column width',\n 'Column': 'Column',\n 'Paste Content Dialog': 'Due to browser’s security policy, paste from system clipboard is restricted. Alternatively use the keyboard shortcut',\n 'Paste Content CheckBox': 'Don’t show again',\n 'BookMarkList': 'List of bookmarks in the document',\n 'TabMarkList': 'List of tab stops in the paragraph',\n 'Default tab stops': 'Default tab stops',\n 'Tab stops to be cleared': 'Tab stops to be cleared',\n 'Tabs': 'Tabs',\n 'Set': 'Set',\n 'Clear': 'Clear',\n 'Clear All': 'Clear All',\n 'Discard': 'Discard',\n 'The top/bottom margins are too large for the page height in some sections.': 'The top/bottom margins are too large for the page height in some sections.',\n 'Column width cannot be less than 36 pt.': 'Column width cannot be less than 36 pt.',\n 'Left and right margins.': 'Settings you chose for the left and right margins, column spacing, or pargraph indents are too large for the page width in same secitions.',\n 'Left Indent': 'Left Indent',\n 'Right Indent': 'Right Indent',\n 'Hanging Indent': 'Hanging Indent',\n 'First Line Indent': 'First Line Indent',\n 'Left Margin': 'Left Margin',\n 'Right Margin': 'Right Margin',\n 'Top Margin': 'Top Margin',\n 'Bottom Margin': 'Bottom Margin',\n 'Left Tab': 'Left Tab',\n 'Right Tab': 'Right Tab',\n 'Center Tab': 'Center Tab',\n 'Decimal Tab': 'Decimal Tab',\n 'Bar Tab': 'Bar Tab',\n 'Move Table Column': 'Move Table Column',\n };\n _this.initHelper();\n return _this;\n }\n DocumentEditor_1 = DocumentEditor;\n Object.defineProperty(DocumentEditor.prototype, \"enableHeaderAndFooter\", {\n /**\n * @private\n * @returns {boolean} Returns true if header and footer is enabled.\n */\n get: function () {\n return this.enableHeaderFooterIn;\n },\n /**\n * @private\n * @param {boolean} value True if enable the header and footer; Otherwise, false.\n */\n set: function (value) {\n this.enableHeaderFooterIn = value;\n if (!value && this.selectionModule && this.selectionModule.isWebLayout) {\n this.selectionModule.isWebLayout = false;\n }\n this.viewer.updateScrollBars();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"pageCount\", {\n /**\n * Gets the total number of pages.\n *\n * @returns {number} Returns the page count.\n */\n get: function () {\n if (!this.isDocumentLoaded || isNullOrUndefined(this.viewer) || this.viewer instanceof WebLayoutViewer) {\n return 1;\n }\n return this.documentHelper.pages.length;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"selection\", {\n /**\n * Gets the selection object of the document editor.\n *\n * @default undefined\n * @aspType Selection\n * @returns {Selection} Returns the selection object.\n */\n get: function () {\n if (!this.selectionModule) {\n this.checkModuleInjection('Selection', this.enableSelection);\n }\n return this.selectionModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editor\", {\n /**\n * Gets the editor object of the document editor.\n *\n * @aspType Editor\n * @returns {Editor} Returns the editor object.\n */\n get: function () {\n if (!this.editorModule) {\n this.checkModuleInjection('Editor', this.enableEditor);\n }\n return this.editorModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"editorHistory\", {\n /**\n * Gets the editor history object of the document editor.\n *\n * @aspType EditorHistory\n * @returns {EditorHistory} Returns the editor history object.\n */\n get: function () {\n if (!this.editorHistoryModule) {\n this.checkModuleInjection('EditorHistory', this.enableEditorHistory);\n }\n return this.editorHistoryModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"search\", {\n /**\n * Gets the search object of the document editor.\n *\n * @aspType Search\n * @returns { Search } Returns the search object.\n */\n get: function () {\n if (!this.searchModule) {\n this.checkModuleInjection('Search', this.enableSearch);\n }\n return this.searchModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"contextMenu\", {\n /**\n * Gets the context menu object of the document editor.\n *\n * @aspType ContextMenu\n * @returns {ContextMenu} Returns the context menu object.\n */\n get: function () {\n if (!this.contextMenuModule) {\n this.checkModuleInjection('ContextMenu', this.enableContextMenu);\n }\n return this.contextMenuModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"spellCheckDialog\", {\n /**\n * Gets the spell check dialog object of the document editor.\n *\n * @returns {SpellCheckDialog} Returns the spell check dialog object.\n */\n get: function () {\n if (!this.spellCheckDialogModule) {\n this.checkModuleInjection('SpellCheck', this.enableSpellCheck);\n }\n return this.spellCheckDialogModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"spellChecker\", {\n /**\n * Gets the spell check object of the document editor.\n *\n * @aspType SpellChecker\n * @returns {SpellChecker} Returns the spell checker object.\n */\n get: function () {\n if (!this.spellCheckerModule) {\n this.checkModuleInjection('SpellCheck', this.enableSpellCheck);\n }\n return this.spellCheckerModule;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"containerId\", {\n /**\n * @private\n * @returns {string }- Returns the container id.\n */\n get: function () {\n return this.element.id;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isDocumentLoaded\", {\n /**\n * @private\n * @returns {boolean} - Returns true if document is loaded.\n */\n get: function () {\n return this.isDocumentLoadedIn;\n },\n /**\n * @private\n * @param {boolean} value - Specifies whether the document is loaded or not.\n * @returns {void}\n */\n set: function (value) {\n this.isDocumentLoadedIn = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isDocumentEmpty\", {\n /**\n * Describes whether Document contains any content or not\n *\n * @returns {boolean} Returns `true` if Document does not contains any content; otherwise, `false`\n * @aspType bool\n * @default false\n */\n get: function () {\n if (this.documentHelper.pages.length === 1) {\n var firstPage = this.documentHelper.pages[0];\n var headerWidget = firstPage.headerWidget;\n var footerWidget = firstPage.footerWidget;\n var isHeaderEmpty = true;\n var isFooterEmpty = true;\n if (!isNullOrUndefined(headerWidget) && !isNullOrUndefined(headerWidget.firstChild)) {\n if (!(headerWidget.firstChild instanceof ParagraphWidget) || !headerWidget.firstChild.isEmpty()) {\n isHeaderEmpty = false;\n }\n }\n if (!isNullOrUndefined(footerWidget) && !isNullOrUndefined(footerWidget.firstChild)) {\n if (!(footerWidget.firstChild instanceof ParagraphWidget) || !footerWidget.firstChild.isEmpty()) {\n isFooterEmpty = false;\n }\n }\n if (isHeaderEmpty && isFooterEmpty) {\n var firstBodywidget = firstPage.bodyWidgets[0];\n if (isNullOrUndefined(firstBodywidget.nextWidget)) {\n var firstChild = firstBodywidget.firstChild;\n if (firstChild instanceof ParagraphWidget\n && firstChild.isEmpty()\n && isNullOrUndefined(firstChild.nextWidget)) {\n return true;\n }\n }\n }\n return false;\n }\n else {\n return false;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"revisions\", {\n /**\n * Gets the revision collection which contains information about changes made from original document\n *\n * @returns {RevisionCollection} Returns the revision collection object.\n */\n get: function () {\n if (isNullOrUndefined(this.revisionsInternal)) {\n this.revisionsInternal = new RevisionCollection(this);\n }\n return this.revisionsInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableHistoryMode\", {\n /**\n * Determines whether history needs to be enabled or not.\n *\n * @default - false\n * @private\n * @returns {boolean} Returns true if history module is enabled.\n */\n get: function () {\n return this.enableEditorHistory && !isNullOrUndefined(this.editorHistoryModule);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentStart\", {\n /**\n * Gets the start text position in the document.\n *\n * @default undefined\n * @private\n * @returns {TextPosition} - Returns the document start.\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selectionModule.getDocumentStart();\n }\n else {\n this.checkModuleInjection('Selection', this.enableSelection);\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"documentEnd\", {\n /**\n * Gets the end text position in the document.\n *\n * @default undefined\n * @private\n * @returns {TextPosition} - Returns the document end.\n */\n get: function () {\n if (!isNullOrUndefined(this.selectionModule)) {\n return this.selectionModule.getDocumentEnd();\n }\n else {\n this.checkModuleInjection('Selection', this.enableSelection);\n }\n return undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isReadOnlyMode\", {\n /**\n * @private\n * @returns {TextPosition} - Returns isReadOnlyMode.\n */\n get: function () {\n return this.isReadOnly || isNullOrUndefined(this.editorModule)\n || isNullOrUndefined(this.selectionModule) || !isNullOrUndefined(this.editorModule) && this.editorModule.restrictEditing;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"isSpellCheck\", {\n /**\n * @private\n * @returns {TextPosition} - Returns isSpellCheck.\n */\n get: function () {\n return this.enableSpellCheck && this.spellCheckerModule.enableSpellCheck;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditor.prototype, \"enableImageResizerMode\", {\n /**\n * Specifies to enable image resizer option\n *\n * @private\n * @returns {boolean} - Returns enableImageResizerMode.\n */\n get: function () {\n return this.enableImageResizer && !isNullOrUndefined(this.imageResizerModule);\n },\n enumerable: true,\n configurable: true\n });\n DocumentEditor.prototype.preRender = function () {\n var _this = this;\n if (this.documentEditorSettings && this.documentEditorSettings.enableOptimizedTextMeasuring) {\n DocumentEditor_1.Inject(Optimized);\n }\n else {\n DocumentEditor_1.Inject(Regular);\n }\n //pre render section\n this.findResultsList = [];\n setTimeout(function () {\n if (isNullOrUndefined(_this.documentEditorSettings.popupTarget)) {\n _this.documentEditorSettings.popupTarget = document.body;\n }\n }, 0);\n if (!isNullOrUndefined(this.element) && this.element.id === '') {\n //Set unique id, if id is empty\n this.element.id = HelperMethods.getUniqueElementId();\n }\n if (this.refreshing) {\n this.initHelper();\n }\n };\n DocumentEditor.prototype.initHelper = function () {\n this.documentHelper = new DocumentHelper(this);\n if (this.layoutType === 'Pages') {\n this.viewer = new PageLayoutViewer(this);\n }\n else {\n this.viewer = new WebLayoutViewer(this);\n }\n this.parser = new SfdtReader(this.documentHelper);\n };\n DocumentEditor.prototype.render = function () {\n if (!isNullOrUndefined(this.element)) {\n var container = this.element;\n container.style.minHeight = '200px';\n container.style.minWidth = '200px';\n if (this.height !== '') {\n this.element.style.height = formatUnit(this.height);\n }\n if (this.width !== '') {\n this.element.style.width = formatUnit(this.width);\n }\n }\n this.textMeasureHelper = (this.optimizedModule) ? this.optimizedModule : this.regularModule;\n if (isNullOrUndefined(this.textMeasureHelper)) {\n this.textMeasureHelper = new Optimized(this.documentHelper);\n }\n this.documentHelper.initializeComponents();\n this.openBlank();\n this.renderComplete();\n this.renderRulers();\n this.renderNavigationPane();\n this.createdTriggered = true;\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.renderRulers = function () {\n // if (this.documentEditorSettings.showRuler) {\n this.rulerHelper = new RulerHelper();\n this.rulerContainer = this.rulerHelper.renderOverlapElement(this);\n this.rulerHelper.renderRuler(this, true);\n this.rulerHelper.renderRuler(this, false);\n this.rulerHelper.renderRulerMarkerIndicatorElement(this);\n this.rulerHelper.createIndicatorLines(this);\n this.showHideRulers();\n // }\n };\n /**\n * @private\n */\n DocumentEditor.prototype.showHideRulers = function () {\n if (this.rulerHelper && this.documentEditorSettings && !isNullOrUndefined(!this.documentEditorSettings.showRuler)) {\n var showRuler = this.documentEditorSettings.showRuler && !this.isReadOnlyMode;\n this.rulerHelper.hideTabStopSwitch(showRuler);\n this.rulerHelper.hideRulerBottom(showRuler);\n if (this.vRuler) {\n this.vRuler.showHideRuler(showRuler);\n }\n if (this.hRuler) {\n this.hRuler.showHideRuler(showRuler);\n }\n }\n };\n DocumentEditor.prototype.renderNavigationPane = function () {\n if (!this.isReadOnly && this.optionsPaneModule) {\n this.optionsPaneModule.showHideOptionsPane(this.documentEditorSettings.showNavigationPane);\n }\n };\n /**\n * Get component name\n *\n * @private\n * @returns {string} - Returns module name.\n */\n DocumentEditor.prototype.getModuleName = function () {\n return 'DocumentEditor';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @private\n * @param {DocumentEditorModel} model - Specifies the new model.\n * @param {DocumentEditorModel} oldProp - Specifies the old model.\n * @returns {void}\n */\n DocumentEditor.prototype.onPropertyChanged = function (model, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(model); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableTrackChanges':\n this.notify(trackChanges, model);\n this.getSettingData('enableTrackChanges', model.enableTrackChanges);\n if (this.documentHelper.isTrackedOnlyMode && !model.enableTrackChanges) {\n this.enableTrackChanges = true;\n }\n break;\n case 'autoResizeOnVisibilityChange':\n if (model.autoResizeOnVisibilityChange) {\n this.documentHelper.triggerAutoResizeInterval();\n }\n break;\n case 'zoomFactor':\n if (this.viewer && oldProp.zoomFactor !== model.zoomFactor) {\n this.documentHelper.zoomFactor = model.zoomFactor;\n if (this.rulerHelper && this.documentEditorSettings && this.documentEditorSettings.showRuler) {\n this.rulerHelper.updateRuler(this, true);\n }\n if (this.enableCollaborativeEditing && this.collaborativeEditingHandlerModule) {\n this.collaborativeEditingHandlerModule.updateCaretPosition();\n }\n }\n break;\n case 'layoutType':\n if (this.selectionModule && this.selectionModule.isWebLayout) {\n break;\n }\n this.viewer.destroy();\n if (this.layoutType === 'Pages') {\n this.viewer = new PageLayoutViewer(this);\n }\n else {\n if (this.enableHeaderAndFooter === true) {\n this.selectionModule.closeHeaderFooter();\n }\n this.viewer = new WebLayoutViewer(this);\n }\n /* eslint-disable */\n var paragraph = this.selectionModule.start.paragraph;\n if (paragraph.containerWidget instanceof FootNoteWidget) {\n this.selectionModule.clearSelectionHighlightInSelectedWidgets();\n this.selectionModule.selectContent(this.documentStart, true);\n }\n this.editorModule.layoutWholeDocument(true);\n setTimeout(function () {\n _this.fireViewChange();\n }, 200);\n break;\n case 'locale':\n this.localizeDialogs();\n break;\n case 'isReadOnly':\n if (!isNullOrUndefined(this.optionsPaneModule) && this.optionsPaneModule.isOptionsPaneShow) {\n this.optionsPaneModule.showHideOptionsPane(false);\n this.documentHelper.updateFocus();\n }\n if (this.showComments) {\n this.commentReviewPane.showHidePane(true, 'Comments');\n }\n this.commentReviewPane.enableDisableItems();\n this.trackChangesPane.enableDisableButton(!this.isReadOnly && !this.documentHelper.isDocumentProtected);\n this.showHideRulers();\n break;\n case 'currentUser':\n case 'userColor':\n if (this.selectionModule && this.documentHelper.isDocumentProtected) {\n this.selectionModule.highlightEditRegion();\n }\n this.viewer.updateScrollBars();\n break;\n case 'pageGap':\n case 'pageOutline':\n this.viewer.updateScrollBars();\n break;\n case 'zIndex':\n if (this.documentHelper.dialog) {\n this.documentHelper.dialog.zIndex = model.zIndex + 10;\n }\n if (this.documentHelper.dialog2) {\n this.documentHelper.dialog2.zIndex = model.zIndex;\n }\n break;\n case 'showComments':\n if (this.viewer && model.showComments !== oldProp.showComments) {\n this.documentHelper.showComments(model.showComments);\n }\n this.viewer.updateScrollBars();\n break;\n case 'enableRtl':\n this.localizeDialogs(model.enableRtl);\n break;\n case 'enableComment':\n if (this.viewer && this.showComments) {\n this.showComments = this.showComments ? this.enableComment : false;\n this.documentHelper.showComments(model.enableComment);\n }\n this.viewer.updateScrollBars();\n break;\n case 'showRevisions':\n if (this.isReadOnly || this.documentHelper.isDocumentProtected) {\n this.documentHelper.showRevisions(false);\n }\n else if (this.viewer) {\n this.documentHelper.showRevisions(model.showRevisions);\n }\n this.viewer.updateScrollBars();\n break;\n case 'documentSettings':\n if (!isNullOrUndefined(model.documentSettings.compatibilityMode)) {\n var oldValue = oldProp.documentSettings.compatibilityMode;\n var newValue = model.documentSettings.compatibilityMode;\n if ((oldValue == \"Word2013\" && newValue != \"Word2013\") || (oldValue != \"Word2013\" && newValue == \"Word2013\")) {\n if (this.documentHelper.compatibilityMode !== newValue) {\n this.documentHelper.compatibilityMode = newValue;\n this.editorModule.layoutWholeDocument(true);\n }\n }\n }\n this.viewer.updateScrollBars();\n break;\n case 'documentEditorSettings':\n if (!isNullOrUndefined(model.documentEditorSettings.enableOptimizedTextMeasuring)) {\n //Clears previously cached height information.\n this.documentHelper.heightInfoCollection = {};\n if (model.documentEditorSettings.enableOptimizedTextMeasuring) {\n this.textMeasureHelper = this.optimizedModule;\n }\n else {\n this.textMeasureHelper = this.regularModule;\n }\n this.viewer.updateScrollBars();\n }\n if ((!isNullOrUndefined(model.documentEditorSettings.showHiddenMarks) && (model.documentEditorSettings.showHiddenMarks !== oldProp.documentEditorSettings.showHiddenMarks))\n || (!isNullOrUndefined(model.documentEditorSettings.showBookmarks) && (model.documentEditorSettings.showBookmarks !== oldProp.documentEditorSettings.showBookmarks))) {\n this.viewer.updateScrollBars();\n }\n if (!isNullOrUndefined(model.documentEditorSettings.highlightEditableRanges)) {\n if (this.documentHelper && this.documentHelper.restrictEditingPane) {\n this.documentHelper.restrictEditingPane.highlightCheckBox.checked = model.documentEditorSettings.highlightEditableRanges;\n }\n }\n if (!isNullOrUndefined(model.documentEditorSettings.colorPickerSettings)) {\n if (model.documentEditorSettings.colorPickerSettings) {\n this.applyColorPickerProperties(model);\n }\n }\n if (!isNullOrUndefined(model.documentEditorSettings.showRuler)) {\n this.showHideRulers();\n if (model.documentEditorSettings.showRuler) {\n // if (isNullOrUndefined(this.rulerHelper)) {\n // this.renderRulers();\n // }\n this.rulerHelper.updateRuler(this, true);\n }\n }\n if (!isNullOrUndefined(model.documentEditorSettings.showNavigationPane)) {\n if (!this.isReadOnly && this.optionsPaneModule) {\n this.optionsPaneModule.showHideOptionsPane(this.documentEditorSettings.showNavigationPane);\n }\n }\n if (this.enableCollaborativeEditing && this.collaborativeEditingHandlerModule) {\n this.collaborativeEditingHandlerModule.updateCaretPosition();\n }\n break;\n case 'height':\n this.element.style.height = formatUnit(this.height);\n this.resize();\n break;\n case 'width':\n this.element.style.width = formatUnit(this.width);\n this.resize();\n break;\n case 'enableAutoFocus':\n this.enableAutoFocus = model.enableAutoFocus;\n break;\n }\n }\n };\n DocumentEditor.prototype.applyColorPickerProperties = function (model) {\n if (model.documentEditorSettings.colorPickerSettings) {\n var settings = model.documentEditorSettings.colorPickerSettings;\n if (!this.isReadOnly && !isNullOrUndefined(settings) && this.bordersAndShadingDialogModule && this.documentHelper.borderColorPicker && this.documentHelper.shadingColorPicker) {\n // setting border and shading color picker properties\n if (!isNullOrUndefined(settings.mode)) {\n this.documentHelper.borderColorPicker.mode = model.documentEditorSettings.colorPickerSettings.mode;\n this.documentHelper.shadingColorPicker.mode = model.documentEditorSettings.colorPickerSettings.mode;\n }\n if (!isNullOrUndefined(settings.showButtons)) {\n this.documentHelper.borderColorPicker.showButtons = model.documentEditorSettings.colorPickerSettings.showButtons;\n this.documentHelper.shadingColorPicker.showButtons = model.documentEditorSettings.colorPickerSettings.showButtons;\n }\n if (!isNullOrUndefined(settings.modeSwitcher)) {\n this.documentHelper.borderColorPicker.modeSwitcher = model.documentEditorSettings.colorPickerSettings.modeSwitcher;\n this.documentHelper.shadingColorPicker.modeSwitcher = model.documentEditorSettings.colorPickerSettings.modeSwitcher;\n }\n }\n // setting fontColor picker properties\n if (!this.isReadOnly && !isNullOrUndefined(settings) && this.fontDialogModule && this.documentHelper.fontColor) {\n if (!isNullOrUndefined(settings.mode)) {\n this.documentHelper.fontColor.mode = model.documentEditorSettings.colorPickerSettings.mode;\n }\n if (!isNullOrUndefined(settings.showButtons)) {\n this.documentHelper.fontColor.showButtons = model.documentEditorSettings.colorPickerSettings.showButtons;\n }\n if (!isNullOrUndefined(settings.modeSwitcher)) {\n this.documentHelper.fontColor.modeSwitcher = model.documentEditorSettings.colorPickerSettings.modeSwitcher;\n }\n }\n // settingstyle dialog color picker\n if (!this.isReadOnly && !isNullOrUndefined(settings) && this.styleDialogModule && this.documentHelper.colorPicker) {\n if (!isNullOrUndefined(settings.mode)) {\n this.documentHelper.colorPicker.mode = model.documentEditorSettings.colorPickerSettings.mode;\n }\n if (!isNullOrUndefined(settings.showButtons)) {\n this.documentHelper.colorPicker.showButtons = model.documentEditorSettings.colorPickerSettings.showButtons;\n }\n if (!isNullOrUndefined(settings.modeSwitcher)) {\n this.documentHelper.colorPicker.modeSwitcher = model.documentEditorSettings.colorPickerSettings.modeSwitcher;\n }\n }\n // setting font and table properties \n if (!isNullOrUndefined(settings)) {\n if (!isNullOrUndefined(settings.mode)) {\n this.documentHelper.fontColorInputElement.mode = model.documentEditorSettings.colorPickerSettings.mode;\n this.documentHelper.shadingBtn.mode = model.documentEditorSettings.colorPickerSettings.mode;\n this.documentHelper.borderBtn.mode = model.documentEditorSettings.colorPickerSettings.mode;\n }\n if (!isNullOrUndefined(settings.showButtons)) {\n this.documentHelper.fontColorInputElement.showButtons = model.documentEditorSettings.colorPickerSettings.showButtons;\n this.documentHelper.shadingBtn.showButtons = model.documentEditorSettings.colorPickerSettings.showButtons;\n this.documentHelper.borderBtn.showButtons = model.documentEditorSettings.colorPickerSettings.showButtons;\n }\n if (!isNullOrUndefined(settings.modeSwitcher)) {\n this.documentHelper.fontColorInputElement.modeSwitcher = model.documentEditorSettings.colorPickerSettings.modeSwitcher;\n this.documentHelper.shadingBtn.modeSwitcher = model.documentEditorSettings.colorPickerSettings.modeSwitcher;\n this.documentHelper.borderBtn.modeSwitcher = model.documentEditorSettings.colorPickerSettings.modeSwitcher;\n }\n }\n }\n };\n DocumentEditor.prototype.localizeDialogs = function (enableRtl) {\n if (this.locale !== '') {\n var l10n = new L10n('documenteditor', this.defaultLocale);\n l10n.setLocale(this.locale);\n if (!isNullOrUndefined(enableRtl)) {\n this.documentHelper.dialog.enableRtl = enableRtl;\n this.documentHelper.dialog2.enableRtl = enableRtl;\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.initOptionsPane(l10n, enableRtl);\n }\n if (this.paragraphDialogModule) {\n this.paragraphDialogModule.initParagraphDialog(l10n);\n }\n if (this.footNotesDialogModule) {\n this.footNotesDialogModule.notesDialog(l10n, enableRtl);\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.initPageSetupDialog(l10n, enableRtl);\n }\n if (this.columnsDialogModule) {\n this.columnsDialogModule.initColumnsDialog(l10n, enableRtl);\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.initFontDialog(l10n, enableRtl);\n }\n if (this.hyperlinkDialogModule) {\n this.hyperlinkDialogModule.initHyperlinkDialog(l10n, enableRtl);\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.contextMenuInstance.destroy();\n this.contextMenuModule.initContextMenu(l10n, enableRtl);\n }\n if (this.listDialogModule) {\n this.listDialogModule.initListDialog(l10n, enableRtl);\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.initTablePropertyDialog(l10n, enableRtl);\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.initBordersAndShadingsDialog(l10n, enableRtl);\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.initCellMarginsDialog(l10n, enableRtl);\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.initTableOptionsDialog(l10n, enableRtl);\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.initTableDialog(l10n);\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.initStyleDialog(l10n, enableRtl);\n }\n if (this.tabDialogModule) {\n this.tabDialogModule.initTabsDialog(l10n, enableRtl);\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.initTableOfContentDialog(l10n, enableRtl);\n }\n if (this.commentReviewPane && this.commentReviewPane.parentPaneElement) {\n if (this.enableRtl) {\n classList(this.commentReviewPane.parentPaneElement, ['e-rtl'], []);\n }\n else {\n classList(this.commentReviewPane.parentPaneElement, [], ['e-rtl']);\n }\n }\n }\n };\n /**\n * Sets the default character format for document editor\n *\n * @param {CharacterFormatProperties} characterFormat Specifies the character format.\n * @returns {void}\n */\n DocumentEditor.prototype.setDefaultCharacterFormat = function (characterFormat) {\n this.characterFormat = JSON.parse(HelperMethods.sanitizeString(JSON.stringify(characterFormat)));\n this.documentHelper.setDefaultDocumentFormat();\n if (!isNullOrUndefined(this.selectionModule)) {\n this.selectionModule.retrieveCurrentFormatProperties();\n }\n };\n /**\n * Sets the default paragraph format for document editor\n *\n * @param {ParagraphFormatProperties} paragraphFormat Specifies the paragraph format.\n * @returns {void}\n */\n DocumentEditor.prototype.setDefaultParagraphFormat = function (paragraphFormat) {\n this.paragraphFormat = JSON.parse(HelperMethods.sanitizeString(JSON.stringify(paragraphFormat)));\n this.documentHelper.setDefaultDocumentFormat();\n if (!isNullOrUndefined(this.selectionModule)) {\n this.selectionModule.retrieveCurrentFormatProperties();\n }\n };\n /**\n * Sets the default section format for document editor\n *\n * @param {SectionFormatProperties} sectionFormat Specifies the section format.\n * @returns {void}\n */\n DocumentEditor.prototype.setDefaultSectionFormat = function (sectionFormat) {\n this.sectionFormat = JSON.parse(HelperMethods.sanitizeString(JSON.stringify(sectionFormat)));\n this.documentHelper.setDefaultDocumentFormat();\n if (!isNullOrUndefined(this.selectionModule)) {\n this.selectionModule.retrieveCurrentFormatProperties();\n }\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @private\n * @returns {string} - Returns the persisted data.\n */\n DocumentEditor.prototype.getPersistData = function () {\n return 'documenteditor';\n };\n DocumentEditor.prototype.clearPreservedCollectionsInViewer = function () {\n if (this.viewer instanceof LayoutViewer) {\n this.documentHelper.clearDocumentItems();\n }\n };\n /**\n * @private\n * @returns {HTMLElement} - Returns the document editor element.\n */\n DocumentEditor.prototype.getDocumentEditorElement = function () {\n return this.element;\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireContentChange = function () {\n if (this.enableEditor && this.editorModule.isIncrementalSave) {\n return;\n }\n if (this.enableLockAndEdit && this.collaborativeEditingModule) {\n this.collaborativeEditingModule.saveContent();\n }\n var eventArgs = { source: this };\n if (this.enableCollaborativeEditing) {\n eventArgs.operations = [];\n if (this.isSettingOp) {\n eventArgs.operations = this.documentSettingOps;\n this.documentSettingOps = [];\n this.isSettingOp = false;\n }\n else {\n if (!isNullOrUndefined(this.editorHistoryModule)) {\n if (!isNullOrUndefined(this.editorHistoryModule.currentHistoryInfo) && this.editorHistoryModule.currentHistoryInfo.action === 'IMEInput') {\n eventArgs.operations = this.editorHistoryModule.currentHistoryInfo.getActionInfo();\n }\n else if (!isNullOrUndefined(this.editorHistoryModule.lastOperation)) {\n var history_1 = this.editorHistoryModule.lastOperation;\n if (history_1.action === 'IMEInput') {\n eventArgs.operations = history_1.getActionInfo(true);\n }\n else {\n eventArgs.operations = history_1.getActionInfo();\n }\n this.editorHistoryModule.lastOperation = undefined;\n }\n if (this.enableTrackChanges && eventArgs.operations.length > 0) {\n for (var i = 0; i < eventArgs.operations.length; i++) {\n if (isNullOrUndefined(eventArgs.operations[i].markerData)) {\n eventArgs.operations[i].markerData = {};\n }\n eventArgs.operations[i].markerData.author = this.currentUser;\n }\n }\n }\n }\n }\n this.trigger(contentChangeEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireDocumentChange = function () {\n if (this.enableLockAndEdit && this.enableEditor) {\n this.editorModule.enforceProtection('', false, true);\n }\n var eventArgs = { source: this };\n this.trigger(documentChangeEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireSelectionChange = function () {\n if (this.enableEditor && this.editorModule.isIncrementalSave) {\n return;\n }\n if (!this.documentHelper.isCompositionStart && Browser.isDevice && this.editorModule) {\n this.editorModule.predictText();\n }\n var eventArgs = { source: this, isCompleted: this.documentHelper.isCompleted };\n // if (this.createdTriggered) {\n this.trigger(selectionChangeEvent, eventArgs);\n this.documentHelper.isSelectionCompleted = this.documentHelper.isCompleted;\n this.documentHelper.isCompleted = true;\n // }\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireZoomFactorChange = function () {\n var eventArgs = { source: this };\n this.trigger(zoomFactorChangeEvent, eventArgs);\n this.notify(internalZoomFactorChange, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireOptionPaneChange = function (show) {\n var eventArgs = { show: show };\n this.notify(internalOptionPaneChange, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireBeformFieldFill = function () {\n var eventArgs = {};\n this.trigger(beforeFieldFillEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireAfterFormFieldFill = function () {\n var eventArgs = {};\n this.trigger(afterFieldFillEvent, eventArgs);\n };\n /**\n * @private\n * @param {ServiceFailureArgs} eventArgs - Specifies the event args.\n * @returns {void}\n */\n DocumentEditor.prototype.fireServiceFailure = function (eventArgs) {\n this.trigger(serviceFailureEvent, eventArgs);\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.fireViewChange = function () {\n if (this.viewer && this.documentHelper.pages.length > 0) {\n if (this.viewer.visiblePages.length > 0) {\n var pages = this.viewer.visiblePages;\n var eventArgs = {\n startPage: pages[0].index + 1,\n endPage: pages[pages.length - 1].index + 1,\n source: this\n };\n this.trigger(viewChangeEvent, eventArgs);\n this.notify(internalviewChangeEvent, eventArgs);\n }\n }\n };\n /**\n * @private\n * @param {string} item - Specifies the menu items.\n * @returns {void}\n */\n DocumentEditor.prototype.fireCustomContextMenuSelect = function (item) {\n var eventArgs = { id: item };\n this.trigger(customContextMenuSelectEvent, eventArgs);\n };\n /**\n * @private\n * @param {string[]} item - Specifies the menu items.\n * @returns {void}\n */\n DocumentEditor.prototype.fireCustomContextMenuBeforeOpen = function (item) {\n var eventArgs = { ids: item };\n this.trigger(customContextMenuBeforeOpenEvent, eventArgs);\n };\n /**\n * Shows the Paragraph dialog\n *\n * @private\n * @param {WParagraphFormat} paragraphFormat - Specifies the paragraph format.\n * @returns {void}\n */\n DocumentEditor.prototype.showParagraphDialog = function (paragraphFormat) {\n if (this.paragraphDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.paragraphDialogModule.show(paragraphFormat);\n }\n else {\n this.checkModuleInjection('ParagraphDialog', this.enableParagraphDialog);\n }\n };\n /**\n * Shows the margin dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showPageSetupDialog = function () {\n if (this.pageSetupDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.pageSetupDialogModule.show();\n }\n else {\n this.checkModuleInjection('PageSetupDialog', this.enablePageSetupDialog);\n }\n };\n /**\n * Shows insert columns dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showColumnsDialog = function () {\n if (this.columnsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.columnsDialogModule.show();\n }\n else {\n this.checkModuleInjection('ColumnsDialog', this.enableColumnsDialog);\n }\n };\n /**\n * Shows the Footnote dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showFootNotesDialog = function () {\n if (this.footNotesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.footNotesDialogModule.show();\n }\n };\n /**\n * Shows the font dialog\n *\n * @private\n * @param {WCharacterFormat} characterFormat - Specifies character format.\n * @returns {void}\n */\n DocumentEditor.prototype.showFontDialog = function (characterFormat) {\n if (this.fontDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.fontDialogModule.showFontDialog(characterFormat);\n }\n else {\n this.checkModuleInjection('FontDialog', this.enableFontDialog);\n }\n };\n /**\n * Shows the cell option dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showCellOptionsDialog = function () {\n if (this.cellOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.cellOptionsDialogModule.show();\n }\n };\n /**\n * Shows the table options dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTableOptionsDialog = function () {\n if (this.tableOptionsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOptionsDialogModule.show();\n }\n else {\n this.checkModuleInjection('TableOptionsDialog', this.enableTableOptionsDialog);\n }\n };\n /**\n * Shows insert table dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTableDialog = function () {\n if (this.tableDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableDialogModule.show();\n }\n else {\n this.checkModuleInjection('TableDialog', this.enableTableDialog);\n }\n };\n /**\n * Shows Date picker content dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showDateContentDialog = function () {\n if (this.dateContentDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.dateContentDialogModule.show();\n }\n else {\n this.checkModuleInjection('DateContentDialog', this.enableDateContentDialog);\n }\n };\n /**\n * Apply Content control properties\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showPicContentControlDialog = function () {\n var contentControlImage = this.getImageContentControl();\n var showPicCCButton = true;\n var pictureElement = true;\n var picturePositionY = this.picturePositionY;\n // to check whether the selection is empty =true, open the pic content control dialog \n if (this.selection.isEmpty) {\n this.renderPictureContentControlElement(this, showPicCCButton, pictureElement, picturePositionY);\n }\n // to check whether selected image have content control =false , apply content control \n if (this.selection.isImageSelected) {\n this.renderPictureContentControlElement(this, showPicCCButton, pictureElement, picturePositionY);\n if (!(contentControlImage instanceof ContentControl && contentControlImage.contentControlProperties.type != 'Picture')) {\n this.editor.insertContentControl('Picture');\n }\n }\n };\n /**\n * Shows Picture Content Control dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showpicContentControlDialogModule = function () {\n if (this.picContentControlDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.picContentControlDialogModule.show();\n }\n else {\n this.checkModuleInjection('PicContentControlDialog', this.enablePicContentControlDialog);\n }\n };\n /**\n * Shows Picture Content Control button\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.renderPictureContentControlElement = function (documentEditor, showPicContentControl, pictureElement, picturePositionY) {\n var _this = this;\n var PICTURE_CONTENT_CONTROL = '_picture_Content_Control';\n if (!this.enableSelection) {\n return;\n }\n var left = this.documentHelper.owner.selection.sectionFormat.leftMargin;\n var top;\n if (!this.selection.isForward) {\n left += this.selection.end.location.x;\n top = this.selection.end.location.y;\n }\n else {\n left += this.selection.start.location.x;\n top = picturePositionY;\n }\n var attributes = {\n 'id': this.element.id + 'PICTURE_CONTENT_CONTROL', innerHTML: 'Picture',\n class: 'e-btn-icon e-icons e-de-ctnr-image e-icon-left',\n style: 'height:' + 20 + 'px;width:' + 70 + 'px;left:' + left + 'px;top:' + top + 'px;z-index:5;position:absolute;background-color:#ccc;border:1px solid #ccc;display:',\n };\n var pictureCC;\n var contentControlImage;\n var element = document.getElementById(this.element.id + '_viewerContainer');\n var picture_cc = document.getElementById(this.element.id + 'PICTURE_CONTENT_CONTROL');\n if ((isNullOrUndefined(picture_cc) && showPicContentControl) || pictureElement) {\n pictureCC = this.rulerHelper.createHtmlElement('div', attributes);\n element.insertBefore(pictureCC, element.firstChild);\n pictureCC.style.display = \"block\";\n pictureCC.addEventListener('click', function (event) {\n contentControlImage = _this.getImageContentControl();\n if (isNullOrUndefined(contentControlImage) || !(contentControlImage.contentControlProperties.type == 'Picture')) {\n _this.picContentControlDialogModule.show();\n }\n });\n }\n else if (!isNullOrUndefined(picture_cc) && showPicContentControl && !pictureElement) {\n picture_cc.style.display = \"block\";\n picture_cc.addEventListener('click', function (event) {\n contentControlImage = _this.getImageContentControl();\n if ((contentControlImage instanceof ContentControl && !contentControlImage.contentControlProperties.lockContentControl && contentControlImage.contentControlProperties.type == 'Picture' && !_this.documentHelper.owner.isReadOnlyMode)) {\n _this.picContentControlDialogModule.show();\n }\n });\n }\n else if (!isNullOrUndefined(picture_cc) && !showPicContentControl && !pictureElement) {\n picture_cc.style.display = \"none\";\n }\n var locale = new L10n('documenteditor', this.defaultLocale);\n locale.setLocale(this.locale);\n locale.getConstant('Picture');\n };\n /**\n * @private\n * @returns {ElementBox}\n */\n DocumentEditor.prototype.getImageContentControl = function () {\n var contentControlImage;\n var contentControlPara = this.documentHelper.owner.selectionModule.start.currentWidget.paragraph;\n for (var i = 0; i < contentControlPara.childWidgets.length; i++) {\n for (var j = 0; j < contentControlPara.childWidgets[i].children.length; j++) {\n var contentControlImageCheck = contentControlPara.childWidgets[i].children[j];\n if (contentControlImageCheck instanceof ContentControl && contentControlImageCheck.type == 0 && contentControlImageCheck.contentControlProperties.type == 'Picture') {\n contentControlImage = contentControlPara.childWidgets[i].children[j];\n break;\n }\n }\n }\n return contentControlImage;\n };\n /**\n * Shows content Control properties dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showContentPropertiesDialog = function () {\n if (this.contentControlPropertiesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.contentControlPropertiesDialogModule.show();\n }\n else {\n this.checkModuleInjection('ContentControlPropertiesDialog', this.enableContentControlPropertiesDialog);\n }\n };\n /**\n * Shows the table of content dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTableOfContentsDialog = function () {\n if (this.tableOfContentsDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tableOfContentsDialogModule.show();\n }\n else {\n this.checkModuleInjection('TableOfContentsDialog', this.enableTableOfContentsDialog);\n }\n };\n /**\n * Shows the style dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showStyleDialog = function () {\n if (this.styleDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.styleDialogModule.show();\n }\n else {\n this.checkModuleInjection('StyleDialog', this.enableStyleDialog);\n }\n };\n /**\n * Shows the hyperlink dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showHyperlinkDialog = function () {\n if (this.hyperlinkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.hyperlinkDialogModule.show();\n }\n else {\n this.checkModuleInjection('HyperlinkDialog', this.enableHyperlinkDialog);\n }\n };\n /**\n * Shows the bookmark dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showBookmarkDialog = function () {\n if (this.bookmarkDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bookmarkDialogModule.show();\n }\n else {\n this.checkModuleInjection('BookmarkDialog', this.enableBookmarkDialog);\n }\n };\n /**\n * Shows the styles dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showStylesDialog = function () {\n if (this.stylesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.stylesDialogModule.show();\n }\n else {\n this.checkModuleInjection('StylesDialog', this.enableStyleDialog);\n }\n };\n /**\n * Shows the List dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showListDialog = function () {\n if (this.listDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.listDialogModule.showListDialog();\n }\n else {\n this.checkModuleInjection('ListDialog', this.enableListDialog);\n }\n };\n /**\n * Shows the table properties dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTablePropertiesDialog = function () {\n if (this.tablePropertiesDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tablePropertiesDialogModule.show();\n }\n else {\n this.checkModuleInjection('TablePropertiesDialog', this.enableTablePropertiesDialog);\n }\n };\n /**\n * Shows the borders and shading dialog\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showBordersAndShadingDialog = function () {\n if (this.bordersAndShadingDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.bordersAndShadingDialogModule.show();\n }\n else {\n this.checkModuleInjection('BordersAndShadingDialog', this.enableBordersAndShadingDialog);\n }\n };\n /* eslint-disable */\n DocumentEditor.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableCollaborativeEditing) {\n modules.push({\n member: 'CollaborativeEditingHandler', args: [this]\n });\n }\n if (this.enableLockAndEdit) {\n modules.push({\n member: 'CollaborativeEditing', args: [this]\n });\n }\n if (this.enablePrint) {\n modules.push({\n member: 'Print', args: []\n });\n }\n if (this.enableSfdtExport || this.enableWordExport || this.enableTextExport || this.enableSelection || this.enableEditor) {\n modules.push({\n member: 'SfdtExport', args: [this.documentHelper]\n });\n }\n if (this.enableWordExport) {\n modules.push({\n member: 'WordExport', args: []\n });\n }\n if (this.enableTextExport) {\n modules.push({\n member: 'TextExport', args: []\n });\n }\n if (this.enableSelection || this.enableSearch || this.enableEditor) {\n modules.push({\n member: 'Selection', args: [this]\n });\n if (this.enableContextMenu) {\n modules.push({\n member: 'ContextMenu', args: [this.documentHelper]\n });\n }\n }\n if (this.enableSearch) {\n modules.push({\n member: 'Search', args: [this]\n });\n if (this.enableOptionsPane) {\n modules.push({\n member: 'OptionsPane', args: [this.documentHelper]\n });\n }\n }\n if (this.documentEditorSettings && this.documentEditorSettings.enableOptimizedTextMeasuring) {\n DocumentEditor_1.Inject(Optimized);\n modules.push({ member: 'Optimized', args: [this.documentHelper] });\n }\n else {\n DocumentEditor_1.Inject(Regular);\n modules.push({ member: 'Regular', args: [this.documentHelper] });\n }\n if (this.enableEditor) {\n modules.push({\n member: 'Editor', args: [this.documentHelper]\n });\n if (this.enableImageResizer) {\n modules.push({\n member: 'ImageResizer', args: [this, this.documentHelper]\n });\n }\n if (this.enableEditorHistory) {\n modules.push({\n member: 'EditorHistory', args: [this]\n });\n }\n if (this.enableHyperlinkDialog) {\n modules.push({\n member: 'HyperlinkDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTableDialog) {\n modules.push({\n member: 'TableDialog', args: [this.documentHelper]\n });\n }\n if (this.enableDateContentDialog) {\n modules.push({\n member: 'DateContentDialog', args: [this.documentHelper]\n });\n }\n if (this.enablePicContentControlDialog) {\n modules.push({\n member: 'PicContentControlDialog', args: [this.documentHelper]\n });\n }\n if (this.enableContentControlPropertiesDialog) {\n modules.push({\n member: 'ContentControlPropertiesDialog', args: [this.documentHelper]\n });\n }\n if (this.enableBookmarkDialog) {\n modules.push({\n member: 'BookmarkDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTableOfContentsDialog) {\n modules.push({\n member: 'TableOfContentsDialog', args: [this.documentHelper]\n });\n }\n if (this.enablePageSetupDialog) {\n modules.push({\n member: 'PageSetupDialog', args: [this.documentHelper]\n });\n }\n if (this.enableColumnsDialog) {\n modules.push({\n member: 'ColumnsDialog', args: [this.documentHelper]\n });\n }\n if (this.enableFootnoteAndEndnoteDialog) {\n modules.push({\n member: 'FootNotesDialog', args: [this.documentHelper]\n });\n }\n if (this.enableStyleDialog) {\n modules.push({\n member: 'StylesDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'StyleDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'BulletsAndNumberingDialog', args: [this.documentHelper]\n });\n }\n if (this.enableListDialog) {\n modules.push({\n member: 'ListDialog', args: [this.documentHelper]\n });\n }\n if (this.enableParagraphDialog) {\n modules.push({\n member: 'ParagraphDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'TabDialog', args: [this.documentHelper]\n });\n }\n if (this.enableFontDialog) {\n modules.push({\n member: 'FontDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTablePropertiesDialog) {\n modules.push({\n member: 'TablePropertiesDialog', args: [this.documentHelper]\n });\n modules.push({\n member: 'CellOptionsDialog', args: [this.documentHelper]\n });\n }\n if (this.enableBordersAndShadingDialog) {\n modules.push({\n member: 'BordersAndShadingDialog', args: [this.documentHelper]\n });\n }\n if (this.enableTableOptionsDialog) {\n modules.push({\n member: 'TableOptionsDialog', args: [this.documentHelper]\n });\n }\n if (this.enableSpellCheck) {\n modules.push({\n member: 'SpellChecker', args: [this.documentHelper]\n });\n modules.push({\n member: 'SpellCheckDialog', args: [this.documentHelper]\n });\n }\n if (this.enableFormField) {\n modules.push({\n member: 'TextFormFieldDialog', args: [this]\n });\n modules.push({\n member: 'DropDownFormFieldDialog', args: [this]\n });\n modules.push({\n member: 'CheckBoxFormFieldDialog', args: [this]\n });\n }\n }\n return modules;\n };\n /**\n * @private\n * @param moduleName\n * @param value\n */\n DocumentEditor.prototype.checkModuleInjection = function (moduleName, value) {\n if (!value && !this.isReadOnly) {\n console.warn(\"[WARNING] :: Module \\\"\" + moduleName + \"\\\" is not available in Document Editor component! You either misspelled the module name or forgot to load it.\");\n throw new Error(\"Inject \" + moduleName + \" module\");\n }\n };\n DocumentEditor.prototype.open = function (sfdtText) {\n var _this = this;\n // sfdtText = HelperMethods.sanitizeString(sfdtText);\n showSpinner(this.element);\n try {\n if (!isNullOrUndefined(sfdtText)) {\n var fileName = this.isValidUrl(sfdtText);\n if (fileName !== null) {\n this.getSfdtFromUrl(sfdtText, fileName)\n .then(function (sfdt) {\n sfdtText = sfdt;\n // Continue with the next steps after getting sfdt from URL\n _this.processSfdt(sfdtText);\n })\n .catch(function (error) {\n // Handle error\n console.error(error);\n });\n ;\n }\n else if (this.isValidBase64(sfdtText)) {\n this.getSfdtFromBase64string(sfdtText)\n .then(function (sfdt) {\n sfdtText = sfdt;\n // Continue with the next steps after getting sfdt from base64 string\n _this.processSfdt(sfdtText);\n })\n .catch(function (error) {\n // Handle error\n console.error(error);\n });\n }\n else if (sfdtText instanceof File) {\n this.convertToSfdt(sfdtText)\n .then(function (sfdt) {\n sfdtText = sfdt;\n // Continue with the next steps after converting file to sfdt\n _this.processSfdt(sfdtText);\n })\n .catch(function (error) {\n // Handle error\n console.error(error);\n });\n }\n else if (sfdtText instanceof Blob) {\n var name_1 = sfdtText.type.split('/');\n if (name_1[name_1.length - 1] === 'sfdt') {\n this.convertFromSfdtBlob(sfdtText)\n .then(function (sfdt) {\n sfdtText = sfdt;\n // Continue with the next steps after converting from sfdt blob\n _this.processSfdt(sfdtText);\n })\n .catch(function (error) {\n // Handle error\n console.error(error);\n });\n }\n else {\n this.convertFromBlob(sfdtText)\n .then(function (sfdt) {\n sfdtText = sfdt;\n // Continue with the next steps after converting from blob\n _this.processSfdt(sfdtText);\n })\n .catch(function (error) {\n // Handle error\n console.error(error);\n });\n }\n }\n else {\n this.processSfdt(sfdtText);\n }\n }\n }\n catch (error) {\n hideSpinner(this.element);\n this.failureHandler('onError');\n }\n };\n DocumentEditor.prototype.processSfdt = function (sfdtText) {\n if (!isNullOrUndefined(this.viewer) && !isNullOrUndefined(sfdtText)) {\n this.clearPreservedCollectionsInViewer();\n this.documentHelper.userCollection.push('Everyone');\n this.documentHelper.lists = [];\n this.documentHelper.abstractLists = [];\n this.documentHelper.styles = new WStyles();\n this.documentHelper.cachedPages = [];\n this.clearSpellCheck();\n if (this.isSpellCheck) {\n if (this.isSpellCheck && !this.spellCheckerModule.enableOptimizedSpellCheck) {\n this.documentHelper.triggerElementsOnLoading = true;\n this.documentHelper.triggerSpellCheck = true;\n }\n }\n if (!isNullOrUndefined(sfdtText) && this.viewer) {\n var incrementalOps = {};\n this.documentHelper.setDefaultDocumentFormat();\n this.documentHelper.onDocumentChanged(this.parser.convertJsonToDocument(sfdtText, incrementalOps), incrementalOps);\n }\n if (this.isSpellCheck) {\n if (this.isSpellCheck && !this.spellCheckerModule.enableOptimizedSpellCheck) {\n this.documentHelper.triggerElementsOnLoading = false;\n this.documentHelper.triggerSpellCheck = false;\n }\n }\n }\n hideSpinner(this.element);\n };\n DocumentEditor.prototype.isValidUrl = function (url) {\n try {\n var parsedUrl = new URL(url);\n var pathname = parsedUrl.pathname;\n var segments = pathname.split('/');\n var fileName = segments.pop();\n return fileName || null;\n }\n catch (error) {\n return null;\n }\n };\n DocumentEditor.prototype.isValidBase64 = function (input) {\n try {\n var decoded = atob(input);\n var reencoded = btoa(decoded);\n return reencoded === input;\n }\n catch (error) {\n return false;\n }\n };\n DocumentEditor.prototype.getSfdtFromUrl = function (value, fileName) {\n return __awaiter(this, void 0, void 0, function () {\n var documentEditor;\n return __generator(this, function (_a) {\n documentEditor = this;\n return [2 /*return*/, new Promise(function (resolve, reject) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', value, true);\n xhr.responseType = 'blob';\n xhr.onload = function () {\n return __awaiter(this, void 0, void 0, function () {\n var blob, formData, sfdt;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(xhr.status === 200)) return [3 /*break*/, 2];\n blob = xhr.response;\n formData = new FormData();\n formData.append('file', blob, fileName);\n return [4 /*yield*/, documentEditor.send(formData)];\n case 1:\n sfdt = _a.sent();\n resolve(sfdt);\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n });\n };\n xhr.onerror = function () {\n reject(null);\n };\n xhr.send();\n })];\n });\n });\n };\n ;\n DocumentEditor.prototype.convertToSfdt = function (file) {\n return __awaiter(this, void 0, void 0, function () {\n var formData;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n formData = new FormData();\n formData.append('files', file);\n return [4 /*yield*/, this.send(formData)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n DocumentEditor.prototype.getSfdtFromBase64string = function (value) {\n return __awaiter(this, void 0, void 0, function () {\n var binaryString, byteArray, i, blob, formData;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n binaryString = atob(value);\n byteArray = new Uint8Array(binaryString.length);\n for (i = 0; i < binaryString.length; i++) {\n byteArray[parseInt(i.toString(), 10)] = binaryString.charCodeAt(parseInt(i.toString(), 10));\n }\n blob = new Blob([byteArray], { type: 'application/octet-stream' });\n formData = new FormData();\n formData.append('file', blob);\n return [4 /*yield*/, this.send(formData)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n DocumentEditor.prototype.convertFromBlob = function (blob) {\n return __awaiter(this, void 0, void 0, function () {\n var formData, name, type;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n formData = new FormData();\n name = blob.type.split('/');\n type = null;\n if (name[name.length - 1] === 'html' || name[name.length - 1] === 'rtf') {\n type = '.' + name[name.length - 1];\n }\n else {\n type = blob.type;\n }\n formData.append('files', blob, type);\n return [4 /*yield*/, this.send(formData)];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n DocumentEditor.prototype.send = function (formData) {\n var _this = this;\n var serviceUrl = this.serviceUrl + this.serverActionSettingsImport;\n return new Promise(function (resolve, reject) {\n var ajax = new XmlHttpRequestHandler();\n ajax.url = serviceUrl;\n ajax.onSuccess = function (result) {\n resolve(result.data);\n };\n ajax.onFailure = _this.failureHandler.bind(_this);\n ajax.onError = _this.failureHandler.bind(_this);\n ajax.customHeaders = _this.headers;\n var httprequestEventArgs = { serverActionType: _this.serverActionSettingsImport, headers: _this.headers, timeout: 0, cancel: false, withCredentials: false };\n _this.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n if (httprequestEventArgs.cancel) {\n reject(null);\n }\n else {\n ajax.send(formData);\n }\n });\n };\n DocumentEditor.prototype.convertFromSfdtBlob = function (blob) {\n return new Promise(function (resolve) {\n var reader = new FileReader();\n reader.onload = function (event) {\n var text = event.target.result;\n resolve(text);\n };\n reader.readAsText(blob);\n });\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n DocumentEditor.prototype.failureHandler = function (args) {\n var locale = new L10n('documenteditor', this.defaultLocale);\n if (args.name === 'onError') {\n DialogUtility.alert({\n content: locale.getConstant('Error in establishing connection with web server'),\n closeOnEscape: true, showCloseIcon: true,\n position: { X: 'center', Y: 'center' }\n }).enableRtl = this.enableRtl;\n }\n else if (args === 'onError') {\n alert(locale.getConstant('Failed to load the file'));\n //this.fireServiceFailure(args);\n }\n };\n /**\n * Scrolls view to start of the given page number if exists.\n *\n * @param {number} pageNumber Specifies the page number.\n * @returns {void}\n */\n DocumentEditor.prototype.scrollToPage = function (pageNumber) {\n if (isNullOrUndefined(this.viewer) || pageNumber < 1 || pageNumber > this.documentHelper.pages.length) {\n return false;\n }\n this.viewer.scrollToPage(pageNumber - 1);\n return true;\n };\n /**\n * Enables all the modules.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.enableAllModules = function () {\n this.enablePrint = this.enableSfdtExport = this.enableWordExport = this.enableTextExport\n = this.enableSelection = this.enableContextMenu = this.enableSearch = this.enableOptionsPane\n = this.enableEditor = this.enableImageResizer = this.enableEditorHistory\n = this.enableHyperlinkDialog = this.enableTableDialog = this.enableBookmarkDialog\n = this.enableTableOfContentsDialog = this.enableFootnoteAndEndnoteDialog\n = this.enablePageSetupDialog = this.enableStyleDialog = this.enableDateContentDialog\n = this.enablePicContentControlDialog\n = this.enableContentControlPropertiesDialog\n = this.enableListDialog = this.enableParagraphDialog = this.enableFontDialog\n = this.enableTablePropertiesDialog = this.enableBordersAndShadingDialog\n = this.enableTableOptionsDialog = this.enableSpellCheck = this.enableComment\n = this.enableFormField = this.enableColumnsDialog = true;\n /* eslint-disable-next-line max-len */\n DocumentEditor_1.Inject(Print, SfdtExport, WordExport, TextExport, Selection, Search, Editor, ImageResizer, EditorHistory, ContextMenu, OptionsPane, HyperlinkDialog, TableDialog, NotesDialog, BookmarkDialog, TableOfContentsDialog, PageSetupDialog, StyleDialog, ListDialog, ParagraphDialog, TabDialog, DatePickerDialog, PicContentControlDialog, ContentControlPropertiesDialog, BulletsAndNumberingDialog, FontDialog, TablePropertiesDialog, BordersAndShadingDialog, TableOptionsDialog, CellOptionsDialog, StylesDialog, SpellChecker, SpellCheckDialog, CheckBoxFormFieldDialog, TextFormFieldDialog, DropDownFormFieldDialog, ColumnsDialog);\n };\n /**\n * Resizes the component and its sub elements based on given size or container size.\n *\n * @param {number} width Specifies the width\n * @param {number} height Specifies the hight\n * @returns {void}\n */\n DocumentEditor.prototype.resize = function (width, height) {\n if (this.element) {\n if (!isNullOrUndefined(width) && width > 200) {\n this.element.style.width = width + 'px';\n }\n if (!isNullOrUndefined(height) && height > 200) {\n this.element.style.height = height + 'px';\n }\n if (this.viewer) {\n this.documentHelper.updateViewerSize();\n }\n if (this.trackChangesPane.toolbar) {\n this.trackChangesPane.toolbar.refreshOverflow();\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.refreshHeadingPaneHeight();\n }\n }\n if (this.rulerHelper && this.documentEditorSettings && this.documentEditorSettings.showRuler) {\n this.rulerHelper.updateRuler(this, false);\n }\n if (this.enableCollaborativeEditing && this.collaborativeEditingHandlerModule) {\n this.collaborativeEditingHandlerModule.updateCaretPosition();\n }\n };\n /**\n * Resize Document Editor\n * @private\n */\n DocumentEditor.prototype.triggerResize = function () {\n var _this = this;\n if (this) {\n setTimeout(function () {\n if (_this) {\n _this.resize();\n }\n }, 10);\n }\n };\n /**\n * Gets all the form field names in current document.\n *\n * @returns {string[]} Returns all the form field names in current document.\n */\n DocumentEditor.prototype.getFormFieldNames = function () {\n var formFieldNames = [];\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if (formFields[parseInt(i.toString(), 10)].formFieldData.name !== '') {\n formFieldNames.push(formFields[parseInt(i.toString(), 10)].formFieldData.name);\n }\n }\n return formFieldNames;\n };\n /**\n * Gets the form field by name\n *\n * @param {string} name - The form field name.\n * @returns {TextFormFieldInfo | CheckBoxFormFieldInfo | DropDownFormFieldInfo} Returns the form field info.\n */\n DocumentEditor.prototype.getFormFieldInfo = function (name) {\n name = HelperMethods.sanitizeString(name);\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if ((formFields[parseInt(i.toString(), 10)].formFieldData.name === name) && (formFields[parseInt(i.toString(), 10)].formFieldData.name !== '')) {\n return formFields[parseInt(i.toString(), 10)].formFieldData.getFormFieldInfo();\n }\n }\n return undefined;\n };\n /**\n * Sets the form field info with the specified name.\n *\n * @param {string} name Specifies the form field name\n * @param {TextFormFieldInfo | CheckBoxFormFieldInfo | DropDownFormFieldInfo} formFieldInfo - Form Field info.\n * @returns {void}\n */\n DocumentEditor.prototype.setFormFieldInfo = function (name, formFieldInfo) {\n name = HelperMethods.sanitizeString(name);\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if ((formFields[parseInt(i.toString(), 10)].formFieldData.name === name) && (formFields[parseInt(i.toString(), 10)].formFieldData.name !== '')) {\n var currentField = formFields[parseInt(i.toString(), 10)];\n if (this.selectionModule) {\n this.selectionModule.selectFieldInternal(currentField);\n if (this.editorModule) {\n this.editorModule.setFormField(currentField, formFieldInfo);\n }\n else {\n this.checkModuleInjection('Editor', this.enableEditor);\n }\n }\n else {\n this.checkModuleInjection('Selection', this.enableSelection);\n }\n return;\n }\n }\n };\n /**\n * Resets the form field value to default with the specified form field name.\n *\n * @param {string} name Specifies the form field name\n * @returns {void}\n */\n DocumentEditor.prototype.resetFormFields = function (name) {\n if (!this.editorModule) {\n this.checkModuleInjection('Editor', this.enableEditor);\n }\n if (!isNullOrUndefined(name)) {\n name = HelperMethods.sanitizeString(name);\n }\n var formFields = this.documentHelper.formFields;\n for (var i = 0; i < formFields.length; i++) {\n if (isNullOrUndefined(name) || name === formFields[parseInt(i.toString(), 10)].formFieldData.name) {\n if (formFields[parseInt(i.toString(), 10)].formFieldData instanceof TextFormField) {\n this.editorModule.updateFormField(formFields[parseInt(i.toString(), 10)], formFields[parseInt(i.toString(), 10)].formFieldData.defaultValue, true);\n }\n else if (formFields[parseInt(i.toString(), 10)].formFieldData instanceof CheckBoxFormField) {\n /* eslint-disable-next-line max-len */\n this.editorModule.toggleCheckBoxFormField(formFields[parseInt(i.toString(), 10)], true, formFields[parseInt(i.toString(), 10)].formFieldData.defaultValue);\n }\n else if (formFields[parseInt(i.toString(), 10)].formFieldData instanceof DropDownFormField) {\n this.editorModule.updateFormField(formFields[parseInt(i.toString(), 10)], 0, true);\n }\n }\n }\n };\n /**\n * Imports the form field values.\n *\n * @param {FormFieldData[]} formData Specifies the form field values.\n * @returns {void}\n */\n DocumentEditor.prototype.importFormData = function (formData) {\n if (!this.editorModule) {\n this.checkModuleInjection('Editor', this.enableEditor);\n }\n var formField = this.documentHelper.formFields;\n for (var i = 0; i < formData.length; i++) {\n var formFieldData = formData[parseInt(i.toString(), 10)];\n var fieldName = formFieldData.fieldName;\n for (var j = 0; j < formField.length; j++) {\n if (formField[parseInt(j.toString(), 10)].formFieldData.name === fieldName) {\n if (formField[parseInt(j.toString(), 10)].formFieldData instanceof CheckBoxFormField) {\n this.editorModule.toggleCheckBoxFormField(formField[parseInt(j.toString(), 10)], true, formFieldData.value);\n }\n else if (formField[parseInt(j.toString(), 10)].formFieldData instanceof TextFormField) {\n this.editorModule.updateFormField(formField[parseInt(j.toString(), 10)], formFieldData.value);\n }\n else if (formField[parseInt(j.toString(), 10)].formFieldData instanceof DropDownFormField) {\n this.editorModule.updateFormField(formField[parseInt(j.toString(), 10)], formFieldData.value);\n }\n }\n }\n }\n };\n /**\n * Exports the form field values.\n *\n * @returns {FormFieldData[]} Returns the form field data.\n */\n DocumentEditor.prototype.exportFormData = function () {\n var data = [];\n var formField = this.documentHelper.formFields;\n for (var i = 0; i < formField.length; i++) {\n if (formField[parseInt(i.toString(), 10)].formFieldData.name !== '') {\n var formData = { fieldName: '', value: '' };\n formData.fieldName = formField[parseInt(i.toString(), 10)].formFieldData.name;\n if (formField[parseInt(i.toString(), 10)].formFieldData instanceof CheckBoxFormField) {\n formData.value = formField[parseInt(i.toString(), 10)].formFieldData.checked;\n }\n else if (formField[parseInt(i.toString(), 10)].formFieldData instanceof TextFormField) {\n var resultText = '';\n if (this.documentHelper.isInlineFormFillProtectedMode) {\n resultText = this.editorModule.getFieldResultText(formField[parseInt(i.toString(), 10)]);\n }\n else {\n resultText = formField[parseInt(i.toString(), 10)].resultText;\n }\n var rex = RegExp(this.documentHelper.textHelper.getEnSpaceCharacter(), 'gi');\n if (resultText.replace(rex, '') === '') {\n resultText = '';\n }\n formData.value = resultText;\n }\n else if (formField[parseInt(i.toString(), 10)].formFieldData instanceof DropDownFormField) {\n formData.value = formField[parseInt(i.toString(), 10)].formFieldData.selectedIndex;\n }\n data.push(formData);\n }\n }\n return data;\n };\n /**\n * Imports content control data and returns the processed content control information.\n *\n * @param {ContentControlInfo[]} contentControlInfo - The array of content control information to be imported.\n * @returns {ContentControlInfo[]} The processed content control information.\n */\n DocumentEditor.prototype.importContentControlData = function (contentControlInfo) {\n for (var i = 0; i < contentControlInfo.length; i++) {\n var contentInfo = contentControlInfo[parseInt(i.toString(), 10)];\n for (var j = 0; j < this.documentHelper.contentControlCollection.length; j++) {\n var contentControl = this.documentHelper.contentControlCollection[parseInt(j.toString(), 10)];\n if (contentInfo.title === contentControl.contentControlProperties.title) {\n this.editorModule.updateContentControl(contentControl, contentInfo.value);\n }\n }\n }\n return [];\n };\n /**\n * Exports the content control values.\n *\n * @returns {ContentControlInfo[]} The array of content control data.\n */\n DocumentEditor.prototype.exportContentControlData = function () {\n this.selection.contentControleditRegionHighlighters.clear();\n this.selection.isHighlightContentControlEditRegion = true;\n var data = [];\n var properties = this.documentHelper.contentControlCollection;\n for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n var contentControl = properties_1[_i];\n if (contentControl instanceof ContentControl) {\n var contentControlData = { title: '', tag: '', value: '', canDelete: false, canEdit: false, type: contentControl.contentControlProperties.type };\n contentControlData.title = contentControl.contentControlProperties.title;\n contentControlData.tag = contentControl.contentControlProperties.tag;\n if (contentControl.contentControlProperties.lockContentControl) {\n contentControlData.canDelete = true;\n }\n if (contentControl.contentControlProperties.lockContents) {\n contentControlData.canEdit = true;\n }\n var element = contentControl.nextElement;\n if (contentControl.contentControlProperties.type === 'Picture') {\n if (element instanceof ImageElementBox) {\n contentControlData.value = this.documentHelper.getImageString(element);\n }\n }\n else if (contentControl.contentControlProperties.type === 'CheckBox') {\n contentControlData.value = String(contentControl.contentControlProperties.isChecked);\n }\n else if (contentControl.contentControlProperties.type === 'Date') {\n contentControlData.value = element.text;\n }\n else if (contentControl.contentControlProperties.type === 'ComboBox' || contentControl.contentControlProperties.type === 'DropDownList') {\n contentControlData.value = this.getContentControlValue(element);\n }\n else {\n contentControlData.value = this.getContentControlValueForText(contentControl);\n }\n data.push(contentControlData);\n }\n }\n return data;\n };\n /**\n * Resets the content control data.\n * @param {ContentControlInfo[]} contentControlInfo - The array of content control information to be reset\n * @returns void\n */\n DocumentEditor.prototype.resetContentControlData = function (contentControInfo) {\n for (var i = 0; i < contentControInfo.length; i++) {\n var contentInfo = contentControInfo[parseInt(i.toString(), 10)];\n for (var j = 0; j < this.documentHelper.contentControlCollection.length; j++) {\n var contentControl = this.documentHelper.contentControlCollection[parseInt(j.toString(), 10)];\n if (contentInfo.title === contentControl.contentControlProperties.title) {\n this.editorModule.updateContentControl(contentControl, contentInfo.value, true);\n }\n }\n }\n };\n /**\n * @private\n * @returns {String}\n */\n DocumentEditor.prototype.getContentControlValue = function (element) {\n var text = '';\n while (element) {\n if (element instanceof ContentControl) {\n break;\n }\n if (element instanceof TextElementBox) {\n text += element.text;\n }\n element = element.nextElement;\n }\n return text;\n };\n /**\n * @private\n * @returns {String}\n */\n DocumentEditor.prototype.getContentControlValueForText = function (element) {\n var text = '';\n var startIndex = element.line.children.indexOf(element) + 1;\n var skip = false;\n if (this.selection.contentControleditRegionHighlighters.containsKey(element)) {\n var contentInfo = this.selection.contentControleditRegionHighlighters.get(element);\n for (var i = 0; i < contentInfo.keys.length; i++) {\n var line = contentInfo.keys[parseInt(i.toString(), 10)];\n if (i > 0 && line.paragraph !== contentInfo.keys[i - 1].paragraph) {\n text += '/n';\n }\n for (var j = startIndex; j < line.children.length; j++) {\n startIndex = 0;\n var textElement = line.children[parseInt(j.toString(), 10)];\n if (textElement instanceof TextElementBox) {\n text += textElement.text;\n }\n if (textElement instanceof ContentControl) {\n skip = true;\n break;\n }\n }\n if (skip) {\n break;\n }\n }\n }\n return text;\n };\n /**\n * Updates the fields in the current document.\n * Currently cross reference field only supported.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.updateFields = function () {\n if (!this.selectionModule) {\n this.checkModuleInjection('Selection', this.enableSelection);\n }\n for (var i = 0; i < this.documentHelper.fields.length; i++) {\n var field = this.documentHelper.fields[parseInt(i.toString(), 10)];\n var code = this.selectionModule.getFieldCode(field);\n if (code.toLowerCase().trim().indexOf('ref ') === 0) {\n var fieldPara = field.line.paragraph;\n if (!isNullOrUndefined(fieldPara)\n && !isNullOrUndefined(this.selectionModule)\n && !isNullOrUndefined(this.selectionModule.getPage(fieldPara))) {\n this.selectionModule.updateRefField(field);\n }\n }\n }\n };\n /**\n * Shifts the focus to the document.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.focusIn = function () {\n if (this.viewer) {\n this.documentHelper.updateFocus();\n }\n };\n /**\n * Fits the page based on given fit type.\n *\n * @param {PageFitType} pageFitType - The default value of ‘pageFitType’ parameter is 'None'\n * @returns {void}\n */\n DocumentEditor.prototype.fitPage = function (pageFitType) {\n if (isNullOrUndefined(pageFitType)) {\n pageFitType = 'None';\n }\n if (this.viewer) {\n this.viewer.pageFitType = pageFitType;\n }\n };\n /**\n * Exports the specified page as image.\n *\n * @param {number} pageNumber Specifies the page number starts from index `1`.\n * @param {number} format Specifies the image format.\n * @returns {HTMLImageElement} Returns the html image element.\n */\n DocumentEditor.prototype.exportAsImage = function (pageNumber, format) {\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (this.printModule) {\n var mimeType = format === 'Png' ? 'image/png' : 'image/jpeg';\n return this.printModule.exportAsImage(this.documentHelper, pageNumber, mimeType);\n }\n else {\n this.checkModuleInjection('Print', this.enablePrint);\n }\n return undefined;\n };\n /**\n * Exports the specified page as content.\n *\n * @param {number} pageNumber Specifies the page number starts from index `1`.\n * @private\n * @returns {string} Returns the page as content.\n */\n DocumentEditor.prototype.exportAsPath = function (pageNumber) {\n if (!isNullOrUndefined(pageNumber) && pageNumber <= this.documentHelper.pages.length && pageNumber >= 1) {\n var printPage = this.documentHelper.pages[(pageNumber - 1)];\n this.documentHelper.render.isExporting = true;\n this.documentHelper.render.renderWidgets(printPage, 0, 0, 0, 0);\n //get the image data from the canvas\n var imageData = this.documentHelper.render.pageCanvas.toDataURL();\n this.documentHelper.render.pageCanvas.getContext('2d').renderedPath = '';\n this.documentHelper.render.isExporting = false;\n return imageData;\n }\n return undefined;\n };\n /**\n * Prints the document.\n *\n * @param {Window} printWindow - Default value of 'printWindow' parameter is undefined.\n * @returns {void}\n */\n DocumentEditor.prototype.print = function (printWindow) {\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation.');\n }\n if (this.printModule) {\n if (this.layoutType === 'Continuous') {\n this.documentHelper.isWebPrinting = true;\n this.viewer = new PageLayoutViewer(this);\n this.editorModule.layoutWholeDocument();\n this.printModule.print(this.documentHelper, printWindow);\n this.viewer = new WebLayoutViewer(this);\n this.editorModule.layoutWholeDocument();\n this.documentHelper.isWebPrinting = false;\n }\n else {\n this.printModule.print(this.documentHelper, printWindow);\n }\n }\n else {\n this.checkModuleInjection('Print', this.enablePrint);\n }\n };\n /**\n * Serializes the data to JSON string.\n *\n * @returns {string} Returns the data as JSON string.\n */\n DocumentEditor.prototype.serialize = function () {\n var json = '';\n if (this.enableSfdtExport && this.sfdtExportModule instanceof SfdtExport) {\n json = this.sfdtExportModule.serialize();\n }\n else {\n this.checkModuleInjection('SfdtExport', this.enableSfdtExport);\n }\n return json;\n };\n /**\n * Saves the document.\n *\n * @param {string} fileName Specifies the file name.\n * @param {FormatType} formatType Specifies the format type.\n * @returns {void}\n */\n DocumentEditor.prototype.save = function (fileName, formatType) {\n var _this = this;\n if (!isNullOrUndefined(fileName)) {\n fileName = HelperMethods.sanitizeString(fileName);\n }\n fileName = fileName || 'Untitled';\n if (isNullOrUndefined(this.documentHelper)) {\n throw new Error('Invalid operation.');\n }\n if (formatType === 'Docx' || formatType === 'Dotx') {\n if (this.wordExportModule) {\n this.documentHelper.owner.sfdtExportModule.isWordExport = true;\n this.wordExportModule.save(this.documentHelper, fileName, formatType);\n this.documentHelper.owner.sfdtExportModule.isWordExport = false;\n }\n else {\n this.checkModuleInjection('WordExport', this.enableWordExport);\n }\n }\n else if (formatType === 'Txt') {\n if (this.textExportModule) {\n this.textExportModule.save(this.documentHelper, fileName);\n }\n else {\n this.checkModuleInjection('TextExport', this.enableTextExport);\n }\n }\n else if (formatType === 'Sfdt') {\n if (this.sfdtExportModule) {\n if (this.documentEditorSettings.optimizeSfdt) {\n var jsonString = this.serialize();\n var blob = new Blob([jsonString], {\n type: 'application/json'\n });\n var archiveItem = new ZipArchiveItem(blob, 'sfdt');\n var mArchive = new ZipArchive();\n mArchive.addItem(archiveItem);\n mArchive.saveAsBlob().then(function (blob) {\n _this.zipArchiveBlobToSfdtFile(blob, fileName);\n });\n }\n else {\n var jsonString = this.serialize();\n var blob = new Blob([jsonString], {\n type: 'application/json'\n });\n Save.save(fileName + '.sfdt', blob);\n }\n }\n else {\n this.checkModuleInjection('SfdtExport', this.enableSfdtExport);\n }\n }\n else {\n throw new Error('Invalid operation. Specified export is not enabled.');\n }\n };\n DocumentEditor.prototype.zipArchiveBlobToSfdtFile = function (blob, fileName) {\n var reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = function () {\n var dataUrl = reader.result;\n var base64 = dataUrl.split(',')[1];\n var jsonString = {};\n jsonString.sfdt = base64;\n var blob = new Blob([JSON.stringify(jsonString)], {\n type: 'application/json'\n });\n Save.save(fileName + '.sfdt', blob);\n };\n };\n /**\n * Saves the document as blob.\n *\n * @param {FormatType} formatType Specifies the format type.\n * @returns {Promise} Returns the document as blob.\n */\n DocumentEditor.prototype.saveAsBlob = function (formatType) {\n var _this = this;\n if (isNullOrUndefined(this.viewer)) {\n throw new Error('Invalid operation');\n }\n return new Promise(function (resolve) {\n if (formatType === 'Docx' || formatType === 'Dotx') {\n if (_this.wordExportModule) {\n resolve(_this.wordExportModule.saveAsBlob(_this.documentHelper, formatType));\n }\n else {\n _this.checkModuleInjection('WordExport', _this.enableWordExport);\n }\n }\n else if (formatType === 'Txt') {\n if (_this.textExportModule) {\n resolve(_this.textExportModule.saveAsBlob(_this.documentHelper));\n }\n else {\n _this.checkModuleInjection('TextExport', _this.enableTextExport);\n }\n }\n else if (formatType === 'Sfdt') {\n if (_this.sfdtExportModule) {\n if (_this.documentEditorSettings.optimizeSfdt) {\n _this.sfdtExportModule.saveAsBlob(_this.documentHelper).then(function (blob) {\n _this.getBase64StringFromBlob(blob).then(function (base64) {\n var jsonString = {};\n jsonString.sfdt = base64;\n var blob = new Blob([JSON.stringify(jsonString)], {\n type: 'application/json'\n });\n resolve(blob);\n });\n });\n }\n else {\n resolve(_this.sfdtExportModule.saveAsBlobNonOptimized(_this.documentHelper));\n }\n }\n else {\n _this.checkModuleInjection('SfdtExport', _this.enableSfdtExport);\n }\n }\n });\n };\n DocumentEditor.prototype.getBase64StringFromBlob = function (blob) {\n return new Promise(function (resolve, reject) {\n var reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = function () {\n var dataUrl = reader.result;\n var base64 = dataUrl.split(',')[1];\n resolve(base64);\n };\n });\n };\n /**\n * Opens a blank document.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.openBlank = function () {\n var sections = [];\n sections.push(this.createNewBodyWidget());\n /* eslint-disable-next-line max-len */\n var hfs = this.parser.parseHeaderFooter({ header: {}, footer: {}, evenHeader: {}, evenFooter: {}, firstPageHeader: {}, firstPageFooter: {} }, undefined);\n if (this.viewer) {\n this.clearPreservedCollectionsInViewer();\n this.documentHelper.userCollection.push('Everyone');\n this.documentHelper.cachedPages = [];\n this.clearSpellCheck();\n this.documentHelper.setDefaultDocumentFormat();\n this.documentHelper.headersFooters.push(hfs);\n if (this.editorModule) {\n this.editorModule.intializeDefaultStyles();\n var style = this.documentHelper.styles.findByName('Normal');\n for (var i = 0; i < sections.length; i++) {\n var paragraph = sections[parseInt(i.toString(), 10)].childWidgets[0];\n paragraph.paragraphFormat.baseStyle = style;\n paragraph.paragraphFormat.listFormat.baseStyle = style;\n }\n }\n this.documentHelper.onDocumentChanged(sections);\n }\n };\n /**\n * Gets the style names based on given style type.\n *\n * @param {StyleType} styleType Specifies the style type.\n * @returns {string[]} Returns the style names.\n */\n DocumentEditor.prototype.getStyleNames = function (styleType) {\n if (this.viewer) {\n return this.documentHelper.styles.getStyleNames(styleType);\n }\n return [];\n };\n /**\n * Gets the style objects on given style type.\n *\n * @param {StyleType} styleType Specifies the style type.\n * @returns {Object[]} Returns the Specifies styles.\n */\n DocumentEditor.prototype.getStyles = function (styleType) {\n if (this.viewer) {\n return this.documentHelper.styles.getStyles(styleType);\n }\n return [];\n };\n /* eslint-enable */\n /**\n * Gets the bookmarks.\n *\n * @returns {string[]} Returns the bookmark collection.\n */\n DocumentEditor.prototype.getBookmarks = function () {\n var bookmarks = [];\n if (this.viewer) {\n bookmarks = this.documentHelper.getBookmarks(true);\n }\n return bookmarks;\n };\n /**\n * Shows the dialog.\n *\n * @param {DialogType} dialogType Specifies the dialog type.\n * @returns {void}\n */\n DocumentEditor.prototype.showDialog = function (dialogType) {\n switch (dialogType) {\n case 'Hyperlink':\n this.showHyperlinkDialog();\n break;\n case 'Table':\n this.showTableDialog();\n break;\n case 'Bookmark':\n this.showBookmarkDialog();\n break;\n case 'TableOfContents':\n this.showTableOfContentsDialog();\n break;\n case 'PageSetup':\n this.showPageSetupDialog();\n break;\n case 'Columns':\n this.showColumnsDialog();\n break;\n case 'List':\n this.showListDialog();\n break;\n case 'Styles':\n this.showStylesDialog();\n break;\n case 'Style':\n this.showStyleDialog();\n break;\n case 'Paragraph':\n this.showParagraphDialog();\n break;\n case 'Font':\n this.showFontDialog();\n break;\n case 'TableProperties':\n this.showTablePropertiesDialog();\n break;\n case 'BordersAndShading':\n this.showBordersAndShadingDialog();\n break;\n case 'TableOptions':\n this.showTableOptionsDialog();\n break;\n case 'SpellCheck':\n this.showSpellCheckDialog();\n break;\n case 'DatepickerContentControl':\n this.showDateContentDialog();\n break;\n case 'PictureContentControl':\n this.showPicContentControlDialog();\n break;\n case 'ContentControlProperties':\n this.showContentPropertiesDialog();\n break;\n // case 'TabStop':\n // this.showTabDialog();\n // break;\n }\n };\n /**\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.toggleShowHiddenMarksInternal = function () {\n this.documentEditorSettings.showHiddenMarks = !this.documentEditorSettings.showHiddenMarks;\n this.notify(internalDocumentEditorSettingsChange, this.documentEditorSettings);\n };\n /**\n * Shows the options pane.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.showOptionsPane = function () {\n if (!isNullOrUndefined(this.optionsPaneModule) && !isNullOrUndefined(this.viewer)) {\n this.optionsPaneModule.showHideOptionsPane(true);\n }\n else {\n this.checkModuleInjection('OptionsPane', this.enableOptionsPane);\n }\n };\n /**\n * Shows the restrict editing pane.\n *\n * @param {boolean} show Specifies to show or hide restrict editing pane.\n * @returns {void}\n */\n DocumentEditor.prototype.showRestrictEditingPane = function (show) {\n show = isNullOrUndefined(show) ? true : show;\n if (this.documentHelper && this.documentHelper.restrictEditingPane) {\n this.documentHelper.restrictEditingPane.showHideRestrictPane(show);\n }\n };\n /**\n * Shows the spell check dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showSpellCheckDialog = function () {\n if (this.spellCheckDialogModule && this.spellCheckerModule) {\n var element = this.spellCheckerModule.retriveText();\n if (!isNullOrUndefined(element)) {\n this.spellCheckDialogModule.show(element.text, element.element);\n }\n }\n else {\n this.checkModuleInjection('SpellCheck', this.enableSpellCheck);\n }\n };\n /**\n * Shows the tab dialog.\n *\n * @private\n * @returns {void}\n */\n DocumentEditor.prototype.showTabDialog = function () {\n if (this.tabDialogModule && !this.isReadOnlyMode && this.viewer) {\n this.tabDialogModule.show();\n }\n };\n /**\n * Destroys all managed resources used by this object.\n *\n * @returns {void}\n */\n DocumentEditor.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.destroyDependentModules();\n if (!isNullOrUndefined(this.documentHelper)) {\n this.documentHelper.destroy();\n }\n if (this.viewer) {\n this.viewer.componentDestroy();\n }\n this.viewer = undefined;\n if (!isNullOrUndefined(this.element)) {\n this.element.classList.remove('e-documenteditor');\n this.element.innerHTML = '';\n }\n if (!this.refreshing) {\n this.element = undefined;\n }\n if (this.parser) {\n this.parser.destroy();\n this.parser = undefined;\n }\n if (this.revisionsInternal) {\n this.revisionsInternal.destroy();\n this.revisionsInternal = undefined;\n }\n this.findResultsList = [];\n this.findResultsList = undefined;\n this.documentHelper = undefined;\n };\n /**\n * @param {WStyle} styleInCollection - Specifies the style in collection.\n * @param {WStyle} style - Specifies the style.\n * @private\n * @returns {void} - Returns the void.\n */\n DocumentEditor.prototype.updateStyle = function (styleInCollection, style) {\n if (!isNullOrUndefined(this.styleDialogModule)) {\n var type = style.type === 'Paragraph' ? !isNullOrUndefined(style.link) ? 'Linked Style' : 'Paragraph' : 'Character';\n styleInCollection.type = this.styleDialogModule.getTypeValue(type);\n styleInCollection.basedOn = style.basedOn;\n if (type === 'Paragraph' || type === 'Linked Style') {\n styleInCollection.next = style.next;\n styleInCollection.characterFormat.destroy();\n styleInCollection.characterFormat.copyFormat(style.characterFormat);\n var oldListId = styleInCollection.paragraphFormat.listFormat.listId;\n styleInCollection.paragraphFormat.destroy();\n styleInCollection.paragraphFormat.copyFormat(style.paragraphFormat);\n // this.updateList();\n styleInCollection.link = style.link;\n if (!isNullOrUndefined(oldListId) && oldListId > -1) {\n var list = this.documentHelper.getListById(oldListId);\n if (!isNullOrUndefined(list)) {\n this.documentHelper.lists.splice(this.documentHelper.lists.indexOf(list), 1);\n }\n }\n }\n else if (type === 'Character') {\n styleInCollection.characterFormat.destroy();\n styleInCollection.characterFormat.copyFormat(style.characterFormat);\n }\n styleInCollection.name = style.name;\n }\n };\n DocumentEditor.prototype.createNewBodyWidget = function () {\n var section = new BodyWidget();\n section.index = 0;\n section.sectionFormat = new WSectionFormat(section);\n if (this.sectionFormat) {\n this.parser.parseSectionFormat(0, this.sectionFormat, section.sectionFormat);\n }\n var paragraph = new ParagraphWidget();\n paragraph.index = 0;\n paragraph.paragraphFormat = new WParagraphFormat(paragraph);\n paragraph.characterFormat = new WCharacterFormat(paragraph);\n section.childWidgets.push(paragraph);\n paragraph.containerWidget = section;\n return section;\n };\n DocumentEditor.prototype.clearSpellCheck = function () {\n if (!isNullOrUndefined(this.spellCheckerModule)) {\n if (!isNullOrUndefined(this.spellCheckerModule.errorWordCollection)) {\n this.spellCheckerModule.errorWordCollection.clear();\n }\n if (!isNullOrUndefined(this.spellCheckerModule.uniqueWordsCollection)) {\n this.spellCheckerModule.uniqueWordsCollection.clear();\n }\n }\n };\n /**\n * @param {string} name - Specifies the name.\n * @param {number} listId - Specifies the list id.\n * @private\n * @returns {void} - Returns the void.\n */\n DocumentEditor.prototype.setStyleData = function (name, listId) {\n if (!this.enableCollaborativeEditing) {\n return;\n }\n this.isSettingOp = true;\n var operation;\n if (!isNullOrUndefined(name) && !isNullOrUndefined(this.documentHelper.owner.sfdtExportModule)) {\n var style = this.documentHelper.styles.findByName(name);\n if (!isNullOrUndefined(style)) {\n var styleObject = this.getStyleObject(style, listId);\n if (!isNullOrUndefined(style) && this.enableCollaborativeEditing) {\n operation = {\n action: 'Update',\n styleData: JSON.stringify(styleObject)\n };\n this.documentSettingOps.push(operation);\n }\n }\n }\n this.fireContentChange();\n };\n /**\n *\n * @private\n * @param style\n * @param listId\n * @returns\n */\n DocumentEditor.prototype.getStyleObject = function (style, listId) {\n if (!isNullOrUndefined(style)) {\n var keyIndex = this.documentHelper.owner.sfdtExportModule.keywordIndex;\n this.documentHelper.owner.sfdtExportModule.keywordIndex = 1;\n var styleData = this.documentHelper.owner.sfdtExportModule.writeStyle(style);\n var styleObject = {\n 'optimizeSfdt': true,\n 'sty': [styleData]\n };\n if (this.editorModule.isLinkedStyle(style.name)) {\n var linkedStyle = this.documentHelper.styles.findByName(style.name + ' Char');\n var linkedStyleData = this.documentHelper.owner.sfdtExportModule.writeStyle(linkedStyle);\n styleObject.sty.push(linkedStyleData);\n }\n if (!isNullOrUndefined(listId) && listId > -1) {\n var list = this.documentHelper.getListById(listId);\n styleObject[listsProperty[1]] = [];\n styleObject[listsProperty[1]].push(this.sfdtExportModule.writeList(list));\n styleObject[abstractListsProperty[1]] = [];\n styleObject[abstractListsProperty[1]].push(this.sfdtExportModule.writeAbstractList(list.abstractList));\n }\n this.documentHelper.owner.sfdtExportModule.keywordIndex = keyIndex;\n return styleObject;\n }\n return undefined;\n };\n /**\n * @param {string} name - Specifies the name.\n * @param {boolean} value - Specifies the value.\n * @param {string} hashValue - Specifies the hash value.\n * @param {string} saltValue - Specifies the salt value.\n * @param {ProtectionType} protectionType - Specifies the protection type.\n * @private\n * @returns {void} - Returns the void.\n */\n DocumentEditor.prototype.getSettingData = function (name, value, hashValue, saltValue, protectionType) {\n if (!this.enableCollaborativeEditing || this.editorModule.isRemoteAction) {\n return;\n }\n this.isSettingOp = true;\n var protectionData;\n var operation;\n if (name === 'protection') {\n protectionData = {\n saltValue: saltValue,\n hashValue: hashValue,\n protectionType: protectionType\n };\n operation = {\n text: name,\n protectionData: protectionData\n };\n }\n else {\n operation = {\n text: name,\n enableTrackChanges: value\n };\n }\n if (!this.skipSettingsOps) {\n this.documentSettingOps.push(operation);\n this.fireContentChange();\n }\n this.skipSettingsOps = false;\n this.isSettingOp = false;\n };\n DocumentEditor.prototype.destroyDependentModules = function () {\n if (this.printModule) {\n this.printModule.destroy();\n this.printModule = undefined;\n }\n if (this.sfdtExportModule) {\n this.sfdtExportModule.destroy();\n this.sfdtExportModule = undefined;\n }\n if (this.optionsPaneModule) {\n this.optionsPaneModule.destroy();\n this.optionsPaneModule = undefined;\n }\n if (this.commentReviewPane) {\n this.commentReviewPane.destroy();\n this.commentReviewPane = undefined;\n }\n if (this.trackChangesPane) {\n this.trackChangesPane.destroy();\n this.trackChangesPane = undefined;\n }\n if (!isNullOrUndefined(this.hyperlinkDialogModule)) {\n this.hyperlinkDialogModule.destroy();\n this.hyperlinkDialogModule = undefined;\n }\n if (this.searchModule) {\n this.searchModule.destroy();\n this.searchModule = undefined;\n }\n if (this.contextMenuModule) {\n this.contextMenuModule.componentDestroy();\n this.contextMenuModule = undefined;\n }\n if (this.editorModule) {\n this.editorModule.destroy();\n this.editorModule = undefined;\n }\n if (this.selectionModule) {\n this.selectionModule.destroy();\n this.selectionModule = undefined;\n }\n if (this.editorHistoryModule) {\n this.editorHistoryModule.destroy();\n this.editorHistoryModule = undefined;\n }\n if (!isNullOrUndefined(this.paragraphDialogModule)) {\n this.paragraphDialogModule.destroy();\n this.paragraphDialogModule = undefined;\n }\n if (this.tabDialogModule) {\n this.tabDialogModule.destroy();\n this.tabDialogModule = undefined;\n }\n if (this.pageSetupDialogModule) {\n this.pageSetupDialogModule.destroy();\n this.pageSetupDialogModule = undefined;\n }\n if (this.columnsDialogModule) {\n this.columnsDialogModule.destroy();\n this.columnsDialogModule = undefined;\n }\n if (this.footNotesDialogModule) {\n this.footNotesDialogModule.destroy();\n this.footNotesDialogModule = undefined;\n }\n if (this.fontDialogModule) {\n this.fontDialogModule.destroy();\n this.fontDialogModule = undefined;\n }\n if (this.listDialogModule) {\n this.listDialogModule.destroy();\n this.listDialogModule = undefined;\n }\n if (this.imageResizerModule) {\n this.imageResizerModule.destroy();\n this.imageResizerModule = undefined;\n }\n if (this.tablePropertiesDialogModule) {\n this.tablePropertiesDialogModule.destroy();\n this.tablePropertiesDialogModule = undefined;\n }\n if (this.contentControlPropertiesDialogModule) {\n this.contentControlPropertiesDialogModule.destroy();\n this.contentControlPropertiesDialogModule = undefined;\n }\n if (this.picContentControlDialogModule) {\n this.picContentControlDialogModule.destroy();\n this.picContentControlDialogModule = undefined;\n }\n if (this.bordersAndShadingDialogModule) {\n this.bordersAndShadingDialogModule.destroy();\n this.bordersAndShadingDialogModule = undefined;\n }\n if (this.cellOptionsDialogModule) {\n this.cellOptionsDialogModule.destroy();\n this.cellOptionsDialogModule = undefined;\n }\n if (this.tableOptionsDialogModule) {\n this.tableOptionsDialogModule.destroy();\n this.tableOptionsDialogModule = undefined;\n }\n if (this.tableDialogModule) {\n this.tableDialogModule.destroy();\n this.tableDialogModule = undefined;\n }\n if (this.bookmarkDialogModule) {\n this.bookmarkDialogModule.destroy();\n this.bookmarkDialogModule = undefined;\n }\n if (this.styleDialogModule) {\n this.styleDialogModule.destroy();\n this.styleDialogModule = undefined;\n }\n if (this.textExportModule) {\n this.textExportModule.destroy();\n this.textExportModule = undefined;\n }\n if (this.wordExportModule) {\n this.wordExportModule.destroy();\n this.wordExportModule = undefined;\n }\n if (this.tableOfContentsDialogModule) {\n this.tableOfContentsDialogModule.destroy();\n this.tableOfContentsDialogModule = undefined;\n }\n if (this.spellCheckerModule) {\n this.spellCheckerModule.destroy();\n this.spellCheckerModule = undefined;\n }\n if (this.checkBoxFormFieldDialogModule) {\n this.checkBoxFormFieldDialogModule.destroy();\n this.checkBoxFormFieldDialogModule = undefined;\n }\n if (this.dropDownFormFieldDialogModule) {\n this.dropDownFormFieldDialogModule.destroy();\n this.dropDownFormFieldDialogModule = undefined;\n }\n if (this.textFormFieldDialogModule) {\n this.textFormFieldDialogModule.destroy();\n this.textFormFieldDialogModule = undefined;\n }\n if (this.spellCheckDialogModule) {\n this.spellCheckDialogModule.destroy();\n this.spellCheckDialogModule = undefined;\n }\n if (this.stylesDialogModule) {\n this.stylesDialogModule.destroy();\n this.stylesDialogModule = undefined;\n }\n if (this.optimizedModule) {\n this.optimizedModule.destroy();\n this.optimizedModule = undefined;\n }\n if (this.regularModule) {\n this.regularModule.destroy();\n this.regularModule = undefined;\n }\n };\n var DocumentEditor_1;\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableCollaborativeEditing\", void 0);\n __decorate([\n Property('KeepSourceFormatting')\n ], DocumentEditor.prototype, \"defaultPasteOption\", void 0);\n __decorate([\n Property('Pages')\n ], DocumentEditor.prototype, \"layoutType\", void 0);\n __decorate([\n Property('')\n ], DocumentEditor.prototype, \"currentUser\", void 0);\n __decorate([\n Property('#FFFF00')\n ], DocumentEditor.prototype, \"userColor\", void 0);\n __decorate([\n Property(20)\n ], DocumentEditor.prototype, \"pageGap\", void 0);\n __decorate([\n Property('')\n ], DocumentEditor.prototype, \"documentName\", void 0);\n __decorate([\n Property('100%')\n ], DocumentEditor.prototype, \"width\", void 0);\n __decorate([\n Property('200px')\n ], DocumentEditor.prototype, \"height\", void 0);\n __decorate([\n Property('')\n ], DocumentEditor.prototype, \"serviceUrl\", void 0);\n __decorate([\n Property(1)\n ], DocumentEditor.prototype, \"zoomFactor\", void 0);\n __decorate([\n Property(2000)\n ], DocumentEditor.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePrint\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSelection\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditor\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableEditorHistory\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSfdtExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableWordExport\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"enableAutoFocus\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTextExport\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableOptionsPane\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableContextMenu\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableHyperlinkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBookmarkDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOfContentsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSearch\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableParagraphDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableListDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTablePropertiesDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableBordersAndShadingDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableFootnoteAndEndnoteDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableColumnsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enablePageSetupDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableStyleDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableFontDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableOptionsDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTableDialog\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableImageResizer\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableSpellCheck\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableComment\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableTrackChanges\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"enableFormField\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"acceptTab\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditor.prototype, \"useCtrlClickToFollowHyperlink\", void 0);\n __decorate([\n Property('#000000')\n ], DocumentEditor.prototype, \"pageOutline\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableCursorOnReadOnly\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableLocalPaste\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"enableLockAndEdit\", void 0);\n __decorate([\n Complex({}, DocumentEditorSettings)\n ], DocumentEditor.prototype, \"documentEditorSettings\", void 0);\n __decorate([\n Complex({}, DocumentSettings)\n ], DocumentEditor.prototype, \"documentSettings\", void 0);\n __decorate([\n Property({ systemClipboard: 'SystemClipboard', spellCheck: 'SpellCheck', spellCheckByPage: 'SpellCheckByPage', restrictEditing: 'RestrictEditing', canLock: 'CanLock', getPendingActions: 'GetPendingActions' })\n ], DocumentEditor.prototype, \"serverActionSettings\", void 0);\n __decorate([\n Property([])\n ], DocumentEditor.prototype, \"headers\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"showComments\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"showRevisions\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditor.prototype, \"autoResizeOnVisibilityChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"documentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"viewChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"zoomFactorChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"requestNavigate\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"contentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"keyDown\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"searchResultsChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"customContextMenuSelect\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"customContextMenuBeforeOpen\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforePaneSwitch\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"commentBegin\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"commentEnd\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeFileOpen\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"commentDelete\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeAcceptRejectChanges\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeCommentAction\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"trackChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeFormFieldFill\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"serviceFailure\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"afterFormFieldFill\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"contentControl\", void 0);\n __decorate([\n Event()\n ], DocumentEditor.prototype, \"beforeXmlHttpRequestSend\", void 0);\n DocumentEditor = DocumentEditor_1 = __decorate([\n NotifyPropertyChanges\n ], DocumentEditor);\n return DocumentEditor;\n}(Component));\nexport { DocumentEditor };\n/**\n * The `ServerActionSettings` module is used to provide the server action methods of Document Editor.\n */\nvar ServerActionSettings = /** @class */ (function (_super) {\n __extends(ServerActionSettings, _super);\n function ServerActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('SystemClipboard')\n ], ServerActionSettings.prototype, \"systemClipboard\", void 0);\n __decorate([\n Property('SpellCheck')\n ], ServerActionSettings.prototype, \"spellCheck\", void 0);\n __decorate([\n Property('SpellCheckByPage')\n ], ServerActionSettings.prototype, \"spellCheckByPage\", void 0);\n __decorate([\n Property('RestrictEditing')\n ], ServerActionSettings.prototype, \"restrictEditing\", void 0);\n __decorate([\n Property('CanLock')\n ], ServerActionSettings.prototype, \"canLock\", void 0);\n __decorate([\n Property('GetPendingActions')\n ], ServerActionSettings.prototype, \"getPendingActions\", void 0);\n return ServerActionSettings;\n}(ChildProperty));\nexport { ServerActionSettings };\n/**\n * Form field settings.\n */\nvar FormFieldSettings = /** @class */ (function (_super) {\n __extends(FormFieldSettings, _super);\n function FormFieldSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('#cfcfcf')\n ], FormFieldSettings.prototype, \"shadingColor\", void 0);\n __decorate([\n Property(true)\n ], FormFieldSettings.prototype, \"applyShading\", void 0);\n __decorate([\n Property('#cccccc')\n ], FormFieldSettings.prototype, \"selectionColor\", void 0);\n __decorate([\n Property('Popup')\n ], FormFieldSettings.prototype, \"formFillingMode\", void 0);\n __decorate([\n Property([])\n ], FormFieldSettings.prototype, \"formattingExceptions\", void 0);\n return FormFieldSettings;\n}(ChildProperty));\nexport { FormFieldSettings };\n/**\n * Represents the collaborative editing settings.\n */\nvar CollaborativeEditingSettings = /** @class */ (function (_super) {\n __extends(CollaborativeEditingSettings, _super);\n function CollaborativeEditingSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], CollaborativeEditingSettings.prototype, \"roomName\", void 0);\n __decorate([\n Property('#22b24b')\n ], CollaborativeEditingSettings.prototype, \"editableRegionColor\", void 0);\n __decorate([\n Property('#f44336')\n ], CollaborativeEditingSettings.prototype, \"lockedRegionColor\", void 0);\n __decorate([\n Property(3000)\n ], CollaborativeEditingSettings.prototype, \"saveTimeout\", void 0);\n return CollaborativeEditingSettings;\n}(ChildProperty));\nexport { CollaborativeEditingSettings };\n/**\n * The `ServerActionSettings` module is used to provide the server action methods of Document Editor Container.\n */\nvar ContainerServerActionSettings = /** @class */ (function (_super) {\n __extends(ContainerServerActionSettings, _super);\n function ContainerServerActionSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Import')\n ], ContainerServerActionSettings.prototype, \"import\", void 0);\n return ContainerServerActionSettings;\n}(ServerActionSettings));\nexport { ContainerServerActionSettings };\n","/**\n * Represents document editor header and footer.\n */\nimport { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\n/**\n * @private\n */\nvar HeaderFooterProperties = /** @class */ (function () {\n function HeaderFooterProperties(container, isRtl) {\n this.isHeaderTopApply = false;\n this.isFooterTopApply = false;\n this.container = container;\n this.isRtl = isRtl;\n this.initHeaderFooterPane();\n this.wireEvents();\n }\n Object.defineProperty(HeaderFooterProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HeaderFooterProperties.prototype, \"toolbar\", {\n get: function () {\n return this.container.toolbarModule;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {boolean} enable - enable/disable header footer pane.\n * @returns {void}\n */\n HeaderFooterProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n HeaderFooterProperties.prototype.initHeaderFooterPane = function () {\n this.initializeHeaderFooter();\n this.element.style.display = 'none';\n this.container.propertiesPaneContainer.appendChild(this.element);\n };\n HeaderFooterProperties.prototype.showHeaderFooterPane = function (isShow) {\n if (isShow) {\n if (this.toolbar) {\n this.toolbar.enableDisablePropertyPaneButton(false);\n }\n this.onSelectionChange();\n }\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.documentEditor.resize();\n };\n HeaderFooterProperties.prototype.initializeHeaderFooter = function () {\n var _this = this;\n var localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var elementId = 'header_footer_properties';\n this.element = createElement('div', { id: this.documentEditor.element.id + elementId, className: 'e-de-prop-pane' });\n var headerDiv = this.createDivTemplate('_header_footer', this.element, 'padding-bottom:0');\n classList(headerDiv, ['e-de-cntr-pane-padding'], []);\n var headerLabel = createElement('label', { className: 'e-de-prop-header-label' });\n headerLabel.innerHTML = localObj.getConstant('Header And Footer');\n var closeButtonFloat;\n //let optionsLabelDivPadding: string;\n //let positionLabelDivPadding: string;\n if (!this.isRtl) {\n closeButtonFloat = 'float:right;';\n //optionsLabelDivPadding = 'padding-left: 14px';\n //positionLabelDivPadding = 'padding-left: 14px;';\n }\n else {\n closeButtonFloat = 'float:left;';\n //optionsLabelDivPadding = 'padding-right: 14px';\n //positionLabelDivPadding = 'padding-right: 14px;';\n }\n var closeIcon = createElement('span', {\n id: '_header_footer_close',\n className: 'e-de-ctnr-close e-de-close-icon e-icons',\n styles: 'display:inline-block;cursor:pointer;' + closeButtonFloat\n });\n closeIcon.addEventListener('click', function () {\n _this.onClose();\n });\n headerDiv.appendChild(headerLabel);\n headerDiv.appendChild(closeIcon);\n var optionsLabelDiv = this.createDivTemplate(elementId + '_options', this.element);\n classList(optionsLabelDiv, ['e-de-cntr-pane-padding', 'e-de-prop-separator-line'], []);\n var optionsLabel = createElement('label', { className: 'e-de-ctnr-prop-label', styles: 'height:20px;' });\n optionsLabel.innerHTML = localObj.getConstant('Options');\n optionsLabelDiv.appendChild(optionsLabel);\n var optionsDiv = this.createDivTemplate(elementId + '_optionsDiv', optionsLabelDiv);\n var firstPageDiv = this.createDivTemplate(elementId + '_firstPageDiv', optionsDiv);\n classList(firstPageDiv, ['e-de-hdr-ftr-frst-div'], []);\n var firstPage = createElement('input', { id: 'firstPage', className: 'e-de-prop-sub-label' });\n firstPageDiv.appendChild(firstPage);\n this.firstPage = new CheckBox({ label: localObj.getConstant('Different First Page'), change: this.changeFirstPageOptions.bind(this), cssClass: 'e-de-prop-sub-label', enableRtl: this.isRtl });\n this.firstPage.appendTo(firstPage);\n firstPageDiv.children[0].setAttribute('title', localObj.getConstant('Different header and footer for first page'));\n var oddOrEvenDiv = this.createDivTemplate(elementId + '_oddOrEvenDiv', optionsDiv);\n classList(oddOrEvenDiv, ['e-de-hdr-ftr-frst-div'], []);\n var oddOrEven = createElement('input', { id: 'oddOrEven', className: 'e-de-sub-prop-label' });\n oddOrEvenDiv.appendChild(oddOrEven);\n this.oddOrEven = new CheckBox({ label: localObj.getConstant('Different Odd And Even Pages'), change: this.changeoddOrEvenOptions.bind(this), cssClass: 'e-de-prop-sub-label', enableRtl: this.isRtl });\n this.oddOrEven.appendTo(oddOrEven);\n oddOrEvenDiv.children[0].setAttribute('title', localObj.getConstant('Different header and footer for odd and even pages'));\n var linkToPreviousDiv = this.createDivTemplate(elementId + '_linkToPreviousDiv', optionsDiv);\n var linkToPrevious = createElement('input', { id: 'linkToPrevious', className: 'e-de-sub-prop-label' });\n linkToPreviousDiv.appendChild(linkToPrevious);\n this.linkToPrevious = new CheckBox({ label: localObj.getConstant('Link to Previous'), change: this.changeLinkToPreviousOptions.bind(this), cssClass: 'e-de-prop-sub-label', enableRtl: this.isRtl, checked: true });\n this.linkToPrevious.appendTo(linkToPrevious);\n linkToPreviousDiv.children[0].setAttribute('title', localObj.getConstant('Link to the previous Title'));\n // let autoFieldLabelDiv: HTMLElement = this.createDivTemplate(element + '_autoFieldLabelDiv', div, 'padding-top:10px;padding-left: 10px;');\n // let autoFieldLabel: HTMLElement = createElement('label', { className: 'e-de-header-prop-label', styles: 'height:20px;' });\n // autoFieldLabel.innerHTML = 'Insert Autofield';\n // autoFieldLabelDiv.appendChild(autoFieldLabel);\n // let autofieldDiv: HTMLElement = this.createDivTemplate(element + '_autofieldDiv', autoFieldLabelDiv, 'display:inline-flex;');\n // let pageNumberDiv: HTMLElement = this.createDivTemplate(element + '_pageNumberDiv', autofieldDiv, 'margin-right:8px;');\n // let pageNumber: HTMLInputElement = createElement('input', { id: 'pageNumber' }) as HTMLInputElement;\n // pageNumberDiv.appendChild(pageNumber);\n // this.pageNumber = new CheckBox({ label: 'Page Number', change: this.changePageNumber });\n // this.pageNumber.appendTo(pageNumber);\n // let pageCountDiv: HTMLElement = this.createDivTemplate(element + '_pageCountDiv', autofieldDiv);\n // let pageCount: HTMLInputElement = createElement('input', { id: 'pageCount' }) as HTMLInputElement;\n // pageCountDiv.appendChild(pageCount);\n // this.pageCount = new CheckBox({ label: 'Page Count', change: this.changePageCount });\n // this.pageCount.appendTo(pageCount);\n // let autoFieldLine: HTMLElement = createElement('div', { className: 'e-de-prop-separator-line', styles: 'margin-top:7px;' });\n // autoFieldLabelDiv.appendChild(autoFieldLine);\n var positionLabelDiv = this.createDivTemplate(elementId + '_positionLabelDiv', this.element);\n classList(positionLabelDiv, ['e-de-cntr-pane-padding', 'e-de-prop-separator-line'], []);\n var positionLabel = createElement('label', { className: 'e-de-ctnr-prop-label', styles: 'height:20px;' });\n positionLabel.innerHTML = localObj.getConstant('Position');\n positionLabelDiv.appendChild(positionLabel);\n var positionDiv = this.createDivTemplate(elementId + '_positionDiv', positionLabelDiv);\n //let width: string;\n //let headerFooterDivMargin: string;\n //if (!this.isRtl) {\n //width = 'width: 128px;';\n //headerFooterDivMargin = 'margin-right:8px;';\n //} else {\n //width = 'width: 150px;';\n //headerFooterDivMargin = 'margin-left:8px;';\n //}\n var headerTopDiv = this.createDivTemplate(elementId + '_headerTopDiv', positionDiv);\n classList(headerTopDiv, ['e-de-hdr-ftr-top-div'], []);\n var headerTopLabel = createElement('label', { className: 'e-de-prop-sub-label', styles: 'display:block' });\n headerTopLabel.innerHTML = localObj.getConstant('Header from Top');\n headerTopDiv.appendChild(headerTopLabel);\n var headerFromTop = createElement('input', { id: this.documentEditor.element.id + '_headerFromTop', className: 'e-de-prop-sub-label' });\n headerFromTop.setAttribute('aria-label', localObj.getConstant('Header from Top'));\n headerTopDiv.appendChild(headerFromTop);\n this.headerFromTop = new NumericTextBox({\n value: 36, cssClass: 'e-de-prop-header-numeric',\n showSpinButton: false, format: 'n0', decimals: 2, max: 1584, min: 0, enableRtl: this.isRtl\n });\n this.headerFromTop.appendTo(headerFromTop);\n this.headerFromTop.element.parentElement.setAttribute('title', localObj.getConstant('Distance from top of the page to top of the header'));\n var footerBottomDiv = this.createDivTemplate(elementId + '_footerBottomDiv', positionDiv);\n var footerBottomLabel = createElement('label', { className: 'e-de-prop-sub-label', styles: 'display:block' });\n footerBottomLabel.innerHTML = localObj.getConstant('Footer from Bottom');\n footerBottomDiv.appendChild(footerBottomLabel);\n var footerFromTop = createElement('input', { id: this.documentEditor.element.id + '_footerFromTop', className: 'e-de-prop-sub-label' });\n footerFromTop.setAttribute('aria-label', localObj.getConstant('Footer from Bottom'));\n footerBottomDiv.appendChild(footerFromTop);\n this.footerFromTop = new NumericTextBox({\n value: 36, cssClass: 'e-de-prop-header-numeric',\n showSpinButton: false, format: 'n0', decimals: 2, max: 1584, min: 0, enableRtl: this.isRtl\n });\n this.footerFromTop.appendTo(footerFromTop);\n this.footerFromTop.element.parentElement.setAttribute('title', localObj.getConstant('Distance from bottom of the page to bottom of the footer'));\n };\n HeaderFooterProperties.prototype.createDivTemplate = function (id, parentDiv, style) {\n var divElement;\n if (style) {\n divElement = createElement('div', { id: id, styles: style });\n }\n else {\n divElement = createElement('div', { id: id });\n }\n parentDiv.appendChild(divElement);\n return divElement;\n };\n HeaderFooterProperties.prototype.wireEvents = function () {\n var _this = this;\n this.headerFromTop.element.addEventListener('click', function () {\n _this.isHeaderTopApply = true;\n });\n this.footerFromTop.element.addEventListener('click', function () {\n _this.isFooterTopApply = true;\n });\n this.headerFromTop.element.addEventListener('keydown', this.onHeaderValue.bind(this));\n this.footerFromTop.element.addEventListener('keydown', this.onFooterValue.bind(this));\n this.headerFromTop.element.addEventListener('blur', function () {\n _this.changeHeaderValue();\n _this.isHeaderTopApply = false;\n });\n this.footerFromTop.element.addEventListener('blur', function () {\n _this.changeFooterValue();\n _this.isFooterTopApply = false;\n });\n };\n HeaderFooterProperties.prototype.onClose = function () {\n this.container.showHeaderProperties = true;\n this.container.documentEditor.selectionModule.closeHeaderFooter();\n };\n HeaderFooterProperties.prototype.changeFirstPageOptions = function () {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n this.documentEditor.selectionModule.sectionFormat.differentFirstPage = this.firstPage.checked;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n HeaderFooterProperties.prototype.changeoddOrEvenOptions = function () {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n this.documentEditor.selectionModule.sectionFormat.differentOddAndEvenPages = this.oddOrEven.checked;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n HeaderFooterProperties.prototype.changeLinkToPreviousOptions = function () {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n var headerFooterType = (this.documentEditor.selectionModule.start.paragraph.containerWidget).headerFooterType;\n var value = this.linkToPrevious.checked;\n switch (headerFooterType) {\n case 'OddHeader':\n this.documentEditor.selectionModule.sectionFormat.oddPageHeader.linkToPrevious = value;\n break;\n case 'OddFooter':\n this.documentEditor.selectionModule.sectionFormat.oddPageFooter.linkToPrevious = value;\n break;\n case 'EvenHeader':\n this.documentEditor.selectionModule.sectionFormat.evenPageHeader.linkToPrevious = value;\n break;\n case 'EvenFooter':\n this.documentEditor.selectionModule.sectionFormat.evenPageFooter.linkToPrevious = value;\n break;\n case 'FirstPageHeader':\n this.documentEditor.selectionModule.sectionFormat.firstPageHeader.linkToPrevious = value;\n break;\n case 'FirstPageFooter':\n this.documentEditor.selectionModule.sectionFormat.firstPageFooter.linkToPrevious = value;\n break;\n }\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n HeaderFooterProperties.prototype.changeHeaderValue = function () {\n if (!this.isHeaderTopApply) {\n return;\n }\n if (!this.documentEditor.isReadOnly) {\n var headerTop = this.headerFromTop.value;\n if (headerTop > this.headerFromTop.max) {\n headerTop = this.headerFromTop.max;\n }\n this.documentEditor.selectionModule.sectionFormat.headerDistance = headerTop;\n }\n };\n HeaderFooterProperties.prototype.onHeaderValue = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.changeHeaderValue();\n _this.isHeaderTopApply = false;\n }, 30);\n }\n };\n HeaderFooterProperties.prototype.onFooterValue = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.changeFooterValue();\n _this.isFooterTopApply = false;\n }, 30);\n }\n };\n HeaderFooterProperties.prototype.changeFooterValue = function () {\n if (!this.isFooterTopApply) {\n return;\n }\n if (!this.documentEditor.isReadOnly) {\n var footerTop = this.footerFromTop.value;\n if (footerTop > this.footerFromTop.max) {\n footerTop = this.footerFromTop.max;\n }\n this.documentEditor.selectionModule.sectionFormat.footerDistance = footerTop;\n }\n };\n HeaderFooterProperties.prototype.onSelectionChange = function () {\n this.headerFromTop.value = this.documentEditor.selectionModule.sectionFormat.headerDistance;\n this.footerFromTop.value = this.documentEditor.selectionModule.sectionFormat.footerDistance;\n if (this.documentEditor.selectionModule.sectionFormat.differentFirstPage) {\n this.firstPage.checked = true;\n }\n else {\n this.firstPage.checked = false;\n }\n if (this.documentEditor.selectionModule.sectionFormat.differentOddAndEvenPages) {\n this.oddOrEven.checked = true;\n }\n else {\n this.oddOrEven.checked = false;\n }\n if (this.documentEditor.selectionModule.start.paragraph.bodyWidget.sectionIndex === 0) {\n this.linkToPrevious.disabled = true;\n }\n else {\n this.linkToPrevious.disabled = false;\n var headerFooterType = (this.documentEditor.selectionModule.start.paragraph.containerWidget).headerFooterType;\n switch (headerFooterType) {\n case 'OddHeader':\n this.linkToPrevious.checked = this.documentEditor.selectionModule.sectionFormat.oddPageHeader.linkToPrevious;\n break;\n case 'OddFooter':\n this.linkToPrevious.checked = this.documentEditor.selectionModule.sectionFormat.oddPageFooter.linkToPrevious;\n break;\n case 'EvenHeader':\n this.linkToPrevious.checked = this.documentEditor.selectionModule.sectionFormat.evenPageHeader.linkToPrevious;\n break;\n case 'EvenFooter':\n this.linkToPrevious.checked = this.documentEditor.selectionModule.sectionFormat.evenPageFooter.linkToPrevious;\n break;\n case 'FirstPageHeader':\n this.linkToPrevious.checked = this.documentEditor.selectionModule.sectionFormat.firstPageHeader.linkToPrevious;\n break;\n case 'FirstPageFooter':\n this.linkToPrevious.checked = this.documentEditor.selectionModule.sectionFormat.firstPageFooter.linkToPrevious;\n break;\n }\n }\n };\n HeaderFooterProperties.prototype.destroy = function () {\n if (this.element) {\n this.element.innerHTML = '';\n if (this.element.parentElement) {\n this.element.parentElement.removeChild(this.element);\n }\n }\n this.element = undefined;\n if (this.firstPage) {\n this.firstPage.destroy();\n }\n this.firstPage = undefined;\n if (this.oddOrEven) {\n this.oddOrEven.destroy();\n }\n this.oddOrEven = undefined;\n if (this.linkToPrevious) {\n this.linkToPrevious.destroy();\n }\n this.linkToPrevious = undefined;\n if (this.headerFromTop) {\n this.headerFromTop.destroy();\n this.headerFromTop = undefined;\n }\n if (this.footerFromTop) {\n this.footerFromTop.destroy();\n this.footerFromTop = undefined;\n }\n this.container = undefined;\n };\n return HeaderFooterProperties;\n}());\nexport { HeaderFooterProperties };\n","import { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Image Property pane\n *\n * @private\n */\nvar ImageProperties = /** @class */ (function () {\n function ImageProperties(container, isRtl) {\n this.isWidthApply = false;\n this.isHeightApply = false;\n this.container = container;\n this.elementId = this.documentEditor.element.id;\n this.isMaintainAspectRatio = false;\n this.isRtl = isRtl;\n this.initializeImageProperties();\n }\n Object.defineProperty(ImageProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {boolean} enable - enable/disable image properties pane.\n * @returns {void}\n */\n ImageProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n ImageProperties.prototype.initializeImageProperties = function () {\n this.element = createElement('div', { id: this.elementId + '_imageProperties', className: 'e-de-prop-pane' });\n this.element.style.display = 'none';\n this.container.propertiesPaneContainer.appendChild(this.element);\n this.initImageProp();\n this.initImageAltProp();\n this.wireEvents();\n };\n ImageProperties.prototype.initImageProp = function () {\n var localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var imageDiv = createElement('div', { id: this.elementId + '_imageDiv', className: 'e-de-cntr-pane-padding e-de-prop-separator-line' });\n this.element.appendChild(imageDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.textContent = localObj.getConstant('Image');\n imageDiv.appendChild(label);\n var outerDiv = createElement('div');\n imageDiv.appendChild(outerDiv);\n this.widthElement = this.createImagePropertiesDiv('_widthDiv', outerDiv, '_widthInput', localObj.getConstant('W'), localObj.getConstant('Width'));\n this.widthNumericBox = new NumericTextBox({ min: 0, max: 23500, cssClass: 'e-de-image-property', showSpinButton: false, format: 'n0', decimals: 2 });\n this.widthNumericBox.appendTo(this.widthElement);\n this.heightElement = this.createImagePropertiesDiv('_heightDiv', outerDiv, '_heightInput', localObj.getConstant('H'), localObj.getConstant('Height'));\n this.heightNumericBox = new NumericTextBox({ min: 0, max: 23500, cssClass: 'e-de-image-property', showSpinButton: false, format: 'n0', decimals: 2 });\n this.heightNumericBox.appendTo(this.heightElement);\n var aspectRatioDiv = createElement('div', { id: this.elementId + '_aspectRatioDiv' });\n aspectRatioDiv.setAttribute('title', localObj.getConstant('Aspect ratio'));\n outerDiv.appendChild(aspectRatioDiv);\n var aspectRatio = createElement('input', { id: this.elementId + '_aspectRatio', className: 'e-de-ctnr-prop-label' });\n aspectRatioDiv.appendChild(aspectRatio);\n this.aspectRatioBtn = new CheckBox({ label: localObj.getConstant('Aspect ratio'), enableRtl: this.isRtl }, aspectRatio);\n };\n ImageProperties.prototype.initImageAltProp = function () {\n var localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var AltDiv = createElement('div', { id: this.elementId + '_altDiv', className: 'e-de-cntr-pane-padding e-de-prop-separator-line' });\n this.element.appendChild(AltDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.textContent = localObj.getConstant('Alternate Text');\n AltDiv.appendChild(label);\n this.textArea = createElement('textarea', { id: this.elementId + '_textarea', className: 'e-de-ctnr-prop-label ' });\n AltDiv.appendChild(this.textArea);\n var textareaObj = new TextBox({\n floatLabelType: 'Never'\n });\n textareaObj.appendTo(this.textArea);\n };\n /* eslint-disable-next-line max-len */\n ImageProperties.prototype.createImagePropertiesDiv = function (id, outerDiv, inputId, spanContent, tooltip) {\n var divElement = createElement('div', { id: this.elementId + id, styles: 'position: relative;width: 100%;', className: 'e-de-ctnr-segment' });\n divElement.setAttribute('title', tooltip);\n outerDiv.appendChild(divElement);\n var inputElement = createElement('input', { id: this.elementId + inputId, className: 'e-textbox', styles: 'width:100%;' });\n divElement.appendChild(inputElement);\n var spanElement = createElement('span', { className: 'e-de-img-prty-span' });\n spanElement.textContent = spanContent;\n divElement.appendChild(spanElement);\n return inputElement;\n };\n ImageProperties.prototype.wireEvents = function () {\n var _this = this;\n this.aspectRatioBtn.element.addEventListener('change', this.onAspectRatioBtnClick.bind(this));\n this.widthNumericBox.element.addEventListener('click', function () {\n _this.isWidthApply = true;\n });\n this.heightNumericBox.element.addEventListener('click', function () {\n _this.isHeightApply = true;\n });\n this.widthNumericBox.element.addEventListener('keydown', this.onImageWidth.bind(this));\n this.heightNumericBox.element.addEventListener('keydown', this.onImageHeight.bind(this));\n this.widthNumericBox.element.addEventListener('blur', function () {\n _this.applyImageWidth();\n _this.isWidthApply = false;\n });\n this.heightNumericBox.element.addEventListener('blur', function () {\n _this.applyImageHeight();\n _this.isHeightApply = false;\n });\n this.textArea.addEventListener('blur', function () {\n if (_this.documentEditor.selectionModule.imageFormat.alternateText !== _this.textArea.value) {\n _this.applyImageAlternativeText();\n }\n });\n };\n ImageProperties.prototype.applyImageAlternativeText = function () {\n var altText = SanitizeHtmlHelper.sanitize(this.textArea.value);\n if (!isNullOrUndefined(altText)) {\n this.documentEditor.selectionModule.imageFormat.applyImageAlternativeText(altText);\n }\n };\n ImageProperties.prototype.onImageWidth = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyImageWidth();\n _this.isWidthApply = false;\n }, 30);\n }\n };\n ImageProperties.prototype.onImageHeight = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyImageHeight();\n _this.isHeightApply = false;\n }, 30);\n }\n };\n ImageProperties.prototype.applyImageWidth = function () {\n if (!this.isMaintainAspectRatio) {\n var width = this.widthNumericBox.value;\n var height = this.heightNumericBox.value;\n if (width > this.widthNumericBox.max) {\n width = this.widthNumericBox.max;\n }\n if (height > this.heightNumericBox.max) {\n height = this.heightNumericBox.max;\n }\n if (!(width === null || height === null)) {\n this.documentEditor.selectionModule.imageFormat.resize(width, height);\n }\n }\n else if (this.isMaintainAspectRatio) {\n var width = this.widthNumericBox.value;\n if (width > this.widthNumericBox.max) {\n width = this.widthNumericBox.max;\n }\n var ratio = width / this.documentEditor.selectionModule.imageFormat.width;\n var height = this.heightNumericBox.value * ratio;\n this.heightNumericBox.value = height;\n if (!(width === null || height === null)) {\n this.documentEditor.selectionModule.imageFormat.resize(width, height);\n }\n }\n };\n ImageProperties.prototype.applyImageHeight = function () {\n if (!this.isMaintainAspectRatio) {\n var width = this.widthNumericBox.value;\n var height = this.heightNumericBox.value;\n if (!(width === null || height === null)) {\n this.documentEditor.selectionModule.imageFormat.resize(width, height);\n }\n }\n else if (this.isMaintainAspectRatio) {\n var height = this.heightNumericBox.value;\n var ratio = height / this.documentEditor.selectionModule.imageFormat.height;\n var width = this.widthNumericBox.value * ratio;\n this.widthNumericBox.value = width;\n if (!(width === null || height === null)) {\n this.documentEditor.selectionModule.imageFormat.resize(width, height);\n }\n }\n };\n ImageProperties.prototype.onAspectRatioBtnClick = function () {\n if (this.isMaintainAspectRatio) {\n this.isMaintainAspectRatio = false;\n }\n else {\n this.isMaintainAspectRatio = true;\n }\n };\n ImageProperties.prototype.showImageProperties = function (isShow) {\n if (this.element.style.display === 'block') {\n this.updateImageProperties();\n }\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.documentEditor.resize();\n };\n ImageProperties.prototype.updateImageProperties = function () {\n this.widthNumericBox.value = this.documentEditor.selectionModule.imageFormat.width;\n this.heightNumericBox.value = this.documentEditor.selectionModule.imageFormat.height;\n if (isNullOrUndefined(this.documentEditor.selectionModule.imageFormat.alternateText)) {\n this.textArea.value = '';\n }\n else {\n this.textArea.value = this.documentEditor.selectionModule.imageFormat.alternateText;\n }\n };\n ImageProperties.prototype.destroy = function () {\n this.container = undefined;\n if (this.widthNumericBox) {\n this.widthNumericBox.destroy();\n }\n this.widthNumericBox = undefined;\n if (this.heightNumericBox) {\n this.heightNumericBox.destroy();\n }\n this.heightNumericBox = undefined;\n if (this.aspectRatioBtn) {\n this.aspectRatioBtn.destroy();\n }\n this.aspectRatioBtn = undefined;\n };\n return ImageProperties;\n}());\nexport { ImageProperties };\n","import { createElement, L10n, classList } from '@syncfusion/ej2-base';\nimport { Button, CheckBox } from '@syncfusion/ej2-buttons';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * TOC Properties pane\n *\n * @private\n */\nvar TocProperties = /** @class */ (function () {\n function TocProperties(container, isRtl) {\n this.container = container;\n this.elementId = this.documentEditor.element.id;\n this.isRtl = isRtl;\n this.initializeTocPane();\n }\n Object.defineProperty(TocProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TocProperties.prototype, \"toolbar\", {\n get: function () {\n return this.container.toolbarModule;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * @private\n * @param {boolean} enable - enable/disable table of content pane.\n * @returns {void}\n */\n TocProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n TocProperties.prototype.initializeTocPane = function () {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.element = createElement('div', { id: this.elementId + '_tocProperties', className: 'e-de-prop-pane' });\n var container = createElement('div', { className: 'e-de-cntr-pane-padding e-de-prop-separator-line' });\n this.tocHeaderDiv(container);\n this.initTemplates(container);\n container = createElement('div', { className: 'e-de-cntr-pane-padding' });\n this.tocOptionsDiv(container);\n this.contentStylesDropdown(container);\n this.checkboxContent(container);\n this.buttonDiv(container);\n this.wireEvents();\n this.updateTocProperties();\n this.container.propertiesPaneContainer.appendChild(this.element);\n };\n TocProperties.prototype.updateTocProperties = function () {\n this.rightalignPageNumber.checked = true;\n this.showPageNumber.checked = true;\n this.hyperlink.checked = true;\n };\n TocProperties.prototype.wireEvents = function () {\n var _this = this;\n this.cancelBtn.element.addEventListener('click', function () {\n _this.onClose();\n });\n this.updateBtn.element.addEventListener('click', this.onInsertToc.bind(this));\n this.closeButton.addEventListener('click', function () {\n _this.onClose();\n });\n };\n TocProperties.prototype.onClose = function () {\n if (this.container.showPropertiesPane\n && this.container.previousContext !== 'TableOfContents') {\n this.container.showPropertiesPaneOnSelection();\n }\n else {\n this.showTocPane(false);\n if (this.toolbar) {\n this.toolbar.enableDisablePropertyPaneButton(false);\n }\n this.container.showPropertiesPane = false;\n }\n };\n TocProperties.prototype.tocHeaderDiv = function (container) {\n var closeButtonFloat;\n //let headerDivMargin: string;\n var closeButtonMargin;\n if (!this.isRtl) {\n closeButtonFloat = 'float:right;';\n //headerDivMargin = 'margin-left:5.5px;';\n closeButtonMargin = 'margin-right:7px;';\n }\n else {\n closeButtonFloat = 'float:left;';\n //headerDivMargin = 'margin-right:5.5px;';\n closeButtonMargin = 'margin-left:7px;';\n }\n var headerDiv = createElement('div', {\n id: this.elementId + 'toc_id',\n styles: 'display: block;'\n });\n container.appendChild(headerDiv);\n this.element.appendChild(container);\n var title = createElement('label', {\n className: 'e-de-ctnr-prop-label'\n });\n title.textContent = this.localObj.getConstant('Table of Contents');\n headerDiv.appendChild(title);\n this.closeButton = createElement('span', {\n className: 'e-de-ctnr-close e-icons',\n styles: 'cursor: pointer;display:inline-block;color: #4A4A4A;' + closeButtonFloat + closeButtonMargin\n });\n headerDiv.appendChild(this.closeButton);\n };\n TocProperties.prototype.initTemplates = function (container) {\n this.template1(container);\n // let div: HTMLElement = createElement('div', { styles: 'display:block;border-top: 1px solid #E0E0E0;' }); this.element.appendChild(div);\n };\n TocProperties.prototype.template1 = function (container) {\n this.template1Div = createElement('div', {\n className: 'e-de-toc-template1'\n });\n if (this.isRtl) {\n this.template1Div.classList.add('e-de-rtl');\n }\n container.appendChild(this.template1Div);\n var templateContent1 = createElement('div', {\n className: 'e-de-toc-template1-content1'\n });\n templateContent1.textContent = this.localObj.getConstant('HEADING - - - - 1');\n this.template1Div.appendChild(templateContent1);\n var templateContent2 = createElement('div', {\n className: 'e-de-toc-template1-content2'\n });\n templateContent2.textContent = this.localObj.getConstant('HEADING - - - - 2');\n this.template1Div.appendChild(templateContent2);\n var templateContent3 = createElement('div', {\n className: 'e-de-toc-template1-content3'\n });\n templateContent3.textContent = this.localObj.getConstant('HEADING - - - - 3');\n this.template1Div.appendChild(templateContent3);\n };\n TocProperties.prototype.tocOptionsDiv = function (container) {\n var optionsDiv = createElement('div');\n container.appendChild(optionsDiv);\n this.element.appendChild(container);\n if (this.isRtl) {\n optionsDiv.classList.add('e-de-rtl');\n }\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.textContent = this.localObj.getConstant('Options');\n optionsDiv.appendChild(label);\n };\n /* eslint-disable-next-line max-len */\n TocProperties.prototype.createDropDownButton = function (id, parentDiv, iconCss, content, selectedIndex) {\n var buttonElement = createElement('input', { id: id });\n parentDiv.appendChild(buttonElement);\n var dropDownBtn = new DropDownList({ index: selectedIndex, dataSource: content, popupHeight: '150px', cssClass: 'e-de-prop-font-button', placeholder: this.localObj.getConstant('Levels') }, buttonElement);\n return dropDownBtn;\n };\n /* eslint-disable */\n TocProperties.prototype.contentStylesDropdown = function (container) {\n var _this = this;\n var contentStyleElementMargin;\n if (!this.isRtl) {\n contentStyleElementMargin = 'margin-left:5.5px;';\n }\n else {\n contentStyleElementMargin = 'margin-right:5.5px;';\n }\n var contentStyleElement = createElement('div', { id: 'contentstyle_div' });\n contentStyleElement.setAttribute('title', this.localObj.getConstant('Number of heading or outline levels to be shown in table of contents'));\n container.appendChild(contentStyleElement);\n // let items: ItemModel[] = [{ text: '___________', id: 'solid' }];\n // this.borderStyle = this.createDropDownButton(\n // this.elementId + '_borderStyleDiv',\n // 'width:120px;height:28px;margin-top:8px', contentStyleElement, 'e-de-icon-stroke-size', 'Solid', items\n // );\n var labelMargin;\n if (!this.isRtl) {\n labelMargin = 'margin-right:8px;';\n }\n else {\n labelMargin = 'margin-left:8px';\n }\n var label = createElement('label', { className: 'e-de-prop-sub-label', styles: 'display:block' });\n label.textContent = this.localObj.getConstant('Levels');\n contentStyleElement.appendChild(label);\n container.appendChild(contentStyleElement);\n var dataSource = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];\n this.borderLevelStyle = this.createDropDownButton(this.elementId + '_borderLevelDiv', contentStyleElement, '', dataSource, 2);\n this.borderLevelStyle.change = function (args) {\n _this.borderLevelStyle.value = args.item.value;\n };\n container.appendChild(contentStyleElement);\n };\n TocProperties.prototype.checkboxContent = function (container) {\n var checkboxElementMargin;\n if (!this.isRtl) {\n checkboxElementMargin = 'margin-left:5.5px;';\n }\n else {\n checkboxElementMargin = 'margin-right:5.5px;';\n }\n var checkboxElement = createElement('div', { id: 'toc_checkboxDiv', styles: 'margin-bottom:36px;' });\n container.appendChild(checkboxElement);\n var showPageNumberDiv = createElement('div', { className: 'e-de-toc-checkbox1' });\n showPageNumberDiv.setAttribute('title', this.localObj.getConstant('Show page numbers in table of contents'));\n checkboxElement.appendChild(showPageNumberDiv);\n var showpagenumberCheckboxElement = createElement('input', { id: 'showpagenumber', styles: 'width:12px;height:12px;margin-bottom:8px', className: 'e-de-prop-sub-label' });\n showPageNumberDiv.appendChild(showpagenumberCheckboxElement);\n this.showPageNumber = new CheckBox({\n label: this.localObj.getConstant('Show page numbers'),\n enableRtl: this.isRtl\n });\n this.showPageNumber.appendTo(showpagenumberCheckboxElement);\n var rightAlignDiv = createElement('div', { className: 'e-de-toc-checkbox2' });\n rightAlignDiv.setAttribute('title', this.localObj.getConstant('Right align page numbers in table of contents'));\n checkboxElement.appendChild(rightAlignDiv);\n var rightalignpagenumberCheckboxElement = createElement('input', { id: 'rightalignpagenumber', styles: 'width:12px;height:12px', className: 'e-de-prop-sub-label' });\n rightAlignDiv.appendChild(rightalignpagenumberCheckboxElement);\n this.rightalignPageNumber = new CheckBox({\n label: this.localObj.getConstant('Right align page numbers'),\n enableRtl: this.isRtl\n });\n this.rightalignPageNumber.appendTo(rightalignpagenumberCheckboxElement);\n var hyperlinkDiv = createElement('div', { className: 'e-de-toc-checkbox3' });\n hyperlinkDiv.setAttribute('title', this.localObj.getConstant('Use hyperlinks instead of page numbers'));\n checkboxElement.appendChild(hyperlinkDiv);\n var hyperlinkCheckboxElement = createElement('input', { id: 'hyperlinkdiv', styles: 'width:12px;height:12px', className: 'e-de-prop-sub-label' });\n hyperlinkDiv.appendChild(hyperlinkCheckboxElement);\n this.hyperlink = new CheckBox({\n label: this.localObj.getConstant('Use hyperlinks'),\n enableRtl: this.isRtl\n });\n this.hyperlink.appendTo(hyperlinkCheckboxElement);\n };\n TocProperties.prototype.buttonDiv = function (container) {\n var footerElementFloat;\n if (!this.isRtl) {\n footerElementFloat = 'float:right';\n }\n else {\n footerElementFloat = 'float:left';\n }\n var footerElement = createElement('div', { id: 'footerDiv', styles: footerElementFloat });\n container.appendChild(footerElement);\n var updatebuttoncontentStyleElement = createElement('button', {\n id: 'footerupdatebuttonDiv',\n attrs: { type: 'button' }\n });\n footerElement.appendChild(updatebuttoncontentStyleElement);\n this.updateBtn = new Button({\n content: this.localObj.getConstant('Update'), cssClass: 'btn-update', isPrimary: true\n });\n this.updateBtn.appendTo(updatebuttoncontentStyleElement);\n var cancelbuttoncontentStyleElement = createElement('button', {\n id: 'footercancelbuttonDiv',\n attrs: { type: 'button' }\n });\n footerElement.appendChild(cancelbuttoncontentStyleElement);\n this.cancelBtn = new Button({\n content: this.localObj.getConstant('Cancel'), cssClass: this.isRtl ? 'e-de-btn-cancel-rtl' : 'e-de-btn-cancel'\n });\n cancelbuttoncontentStyleElement.setAttribute('aria-label', this.cancelBtn.content);\n this.cancelBtn.appendTo(cancelbuttoncontentStyleElement);\n };\n TocProperties.prototype.showTocPane = function (isShow, previousContextType) {\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.updateBtn.content = this.documentEditor.selectionModule.contextType === 'TableOfContents' ? this.localObj.getConstant('Update') : this.localObj.getConstant('Insert');\n this.updateBtn.element.setAttribute('aria-label', this.updateBtn.content);\n this.prevContext = this.documentEditor.selectionModule.contextType;\n this.documentEditor.resize();\n if (isShow) {\n this.updateBtn.element.focus();\n }\n };\n TocProperties.prototype.onInsertToc = function () {\n var tocSettings = {\n startLevel: 1,\n endLevel: parseInt(this.borderLevelStyle.value, 0),\n includeHyperlink: this.hyperlink.checked,\n includeOutlineLevels: true,\n includePageNumber: this.showPageNumber.checked,\n rightAlign: this.rightalignPageNumber.checked\n };\n if (tocSettings.rightAlign) {\n tocSettings.tabLeader = 'Dot';\n }\n this.documentEditor.editorModule.insertTableOfContents(tocSettings);\n this.documentEditor.focusIn();\n };\n TocProperties.prototype.destroy = function () {\n this.container = undefined;\n if (this.showPageNumber) {\n this.showPageNumber.destroy();\n this.showPageNumber = undefined;\n }\n if (this.rightalignPageNumber) {\n this.rightalignPageNumber.destroy();\n this.rightalignPageNumber = undefined;\n }\n if (this.borderBtn) {\n this.borderBtn.destroy();\n this.borderBtn = undefined;\n }\n if (this.borderLevelStyle) {\n this.borderLevelStyle.destroy();\n this.borderLevelStyle = undefined;\n }\n if (this.hyperlink) {\n this.hyperlink.destroy();\n }\n this.hyperlink = undefined;\n if (this.updateBtn) {\n this.updateBtn.destroy();\n }\n this.updateBtn = undefined;\n if (this.cancelBtn) {\n this.cancelBtn.destroy();\n }\n this.cancelBtn = undefined;\n };\n return TocProperties;\n}());\nexport { TocProperties };\n","/* eslint-disable */\nimport { createElement, L10n, classList, isNullOrUndefined, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport { ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker } from '@syncfusion/ej2-inputs';\nimport { Query } from '@syncfusion/ej2-data';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * Text Properties\n *\n * @private\n */\nvar Text = /** @class */ (function () {\n /**\n * Initialize text properties.\n *\n * @param {DocumentEditorContainer} container - DocumentEditorContainer instance.\n * @param {boolean} isRtl - Specifies the RTL layout.\n */\n function Text(container, isRtl) {\n var _this = this;\n this.isRetrieving = false;\n this.appliedHighlightColor = 'rgb(255, 255, 0)';\n this.createChangecase = function (container) {\n var items = [\n {\n text: _this.localObj.getConstant('SentenceCase'), id: 'sentencecase'\n }, {\n text: _this.localObj.getConstant('UPPERCASE'), id: 'uppercase'\n }, {\n text: _this.localObj.getConstant('Lowercase'), id: 'lowercase'\n }, {\n text: _this.localObj.getConstant('CapitalizeEachWord'), id: 'capitalizeEachWord'\n }, {\n text: _this.localObj.getConstant('ToggleCase'), id: 'togglecase'\n }\n ];\n _this.changeCaseDropdown = new DropDownButton({\n items: items,\n iconCss: 'e-icons e-de-ctnr-change-case',\n enableRtl: _this.isRtl\n });\n var changeCaseContainer = createElement('div', {\n id: container.id + '_changeCase', className: 'e-de-ctnr-group-btn'\n });\n var buttonElement = createElement('button', {\n id: changeCaseContainer.id + '_dropdownBtn',\n attrs: { type: 'button' }\n });\n changeCaseContainer.appendChild(buttonElement);\n container.appendChild(changeCaseContainer);\n _this.changeCaseDropdown.appendTo(buttonElement);\n };\n this.changeCase = function (args) {\n if (_this.isRetrieving) {\n return;\n }\n var text = args.item.id;\n switch (text) {\n case 'sentencecase':\n if (!_this.documentEditor.isReadOnly && _this.documentEditor.editorModule) {\n _this.documentEditor.editorModule.changeCase('SentenceCase');\n }\n break;\n case 'uppercase':\n if (!_this.documentEditor.isReadOnly && _this.documentEditor.editorModule) {\n _this.documentEditor.editorModule.changeCase('Uppercase');\n }\n break;\n case 'lowercase':\n if (!_this.documentEditor.isReadOnly && _this.documentEditor.editorModule) {\n _this.documentEditor.editorModule.changeCase('Lowercase');\n }\n break;\n case 'capitalizeEachWord':\n if (!_this.documentEditor.isReadOnly && _this.documentEditor.editorModule) {\n _this.documentEditor.editorModule.changeCase('CapitalizeEachWord');\n }\n break;\n case 'togglecase':\n if (!_this.documentEditor.isReadOnly && _this.documentEditor.editorModule) {\n _this.documentEditor.editorModule.changeCase('ToggleCase');\n }\n break;\n default:\n break;\n }\n };\n this.container = container;\n this.isRtl = isRtl;\n }\n Object.defineProperty(Text.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Text.prototype.initializeTextPropertiesDiv = function (wholeDiv, isRtl) {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.textProperties = wholeDiv;\n var element = this.documentEditor.element.id + '_font_properties';\n var textDiv = this.createDiv(element + '_text', wholeDiv);\n classList(textDiv, ['e-de-cntr-pane-padding', 'e-de-prop-separator-line'], []);\n var fontDiv = this.createDiv(element + '_sizeStyle', textDiv, 'display:inline-flex;');\n classList(fontDiv, ['e-de-ctnr-segment'], []);\n if (isRtl) {\n classList(fontDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n var fontFamilyDiv = this.createDiv(element + '_fontFamilyDiv', fontDiv);\n var fontFamily = createElement('input', {\n id: element + '_fontFamily', className: 'e-prop-font-style'\n });\n fontFamilyDiv.appendChild(fontFamily);\n classList(fontFamilyDiv, ['e-de-panel-left-width'], []);\n this.createDropDownListForFamily(fontFamily);\n var fontSizeDiv = this.createDiv(element + '_fontSizeDiv', fontDiv);\n var divClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-left e-btn-group';\n if (isRtl) {\n divClassName = 'e-rtl ' + divClassName;\n }\n var fontSize = createElement('input', {\n id: element + '_fontSize', innerHTML: 'type:number', className: 'e-prop-font-style'\n });\n fontSizeDiv.appendChild(fontSize);\n classList(fontSizeDiv, ['e-de-panel-right-width'], []);\n this.createDropDownListForSize(fontSize);\n var propertiesDiv = createElement('div', {\n id: element + '_properties', styles: 'display:inline-flex;', className: 'e-de-ctnr-segment'\n });\n if (isRtl) {\n classList(propertiesDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n textDiv.appendChild(propertiesDiv);\n var leftDiv = createElement('div', {\n id: element + '_leftDiv', className: divClassName, styles: 'display:inline-flex;'\n });\n propertiesDiv.appendChild(leftDiv);\n this.bold = this.createButtonTemplate(element + '_bold', 'e-de-ctnr-bold e-icons', leftDiv, 'e-de-prop-font-button', '40.5', 'Bold Tooltip');\n this.italic = this.createButtonTemplate(element + '_italic', 'e-de-ctnr-italic e-icons', leftDiv, 'e-de-prop-font-button', '40.5', 'Italic Tooltip');\n this.underline = this.createButtonTemplate(element + '_underline', 'e-de-ctnr-underline e-icons', leftDiv, 'e-de-prop-font-button', '40.5', 'Underline Tooltip');\n this.strikethrough = this.createButtonTemplate(element + '_strikethrough', 'e-de-ctnr-strikethrough e-icons', leftDiv, 'e-de-prop-font-last-button', '40.5', 'Strikethrough');\n divClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-right e-btn-group';\n if (isRtl) {\n divClassName = 'e-rtl ' + divClassName;\n }\n var rightDiv = createElement('div', { id: element + '_rightDiv', className: divClassName, styles: 'display:inline-flex;' });\n propertiesDiv.appendChild(rightDiv);\n this.superscript = this.createButtonTemplate(element + '_superscript', 'e-de-ctnr-superscript e-icons', rightDiv, 'e-de-prop-font-button', '38.5', 'Superscript Tooltip');\n this.subscript = this.createButtonTemplate(element + '_subscript', 'e-de-ctnr-subscript e-icons', rightDiv, 'e-de-prop-font-last-button', '38.5', 'Subscript Tooltip');\n var colorDiv = createElement('div', {\n id: element + '_colorDiv', styles: 'display:inline-flex;', className: 'e-de-ctnr-segment'\n });\n if (isRtl) {\n classList(propertiesDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n var leftDiv2 = createElement('div', { id: element + '_color', className: 'e-de-font-clr-picker e-de-ctnr-group-btn', styles: 'display:inline-flex;' });\n if (isRtl) {\n classList(leftDiv2, ['e-rtl'], []);\n }\n colorDiv.appendChild(leftDiv2);\n textDiv.appendChild(colorDiv);\n this.fontColor = this.createFontColorPicker(element + '_textColor', 40.5, leftDiv2, this.localObj.getConstant('Font color'));\n classList(leftDiv2.firstElementChild.lastElementChild.lastElementChild.firstChild, ['e-de-ctnr-fontcolor', 'e-icons'], ['e-caret']);\n this.initializeHighlightColorElement();\n this.highlightColor = this.createHighlightColorSplitButton(element + '_highlightColor', 34.5, leftDiv2, this.localObj.getConstant('Text highlight color'));\n classList(this.highlightColor.element.nextElementSibling.firstElementChild, ['e-de-ctnr-highlight', 'e-icons'], ['e-caret']);\n this.highlightColorInputElement = this.highlightColor.element.firstChild;\n this.clearFormat = this.createButtonTemplate(element + '_clearFormat', 'e-de-ctnr-clearall e-icons', leftDiv2, 'e-de-prop-font-last-button', '40.5', 'Clear all formatting');\n var rightDiv2 = createElement('div', {\n id: element + '_rightDiv2', className: divClassName.replace('e-btn-group', ''), styles: 'display:inline-flex;'\n });\n if (isRtl) {\n classList(rightDiv2, ['e-rtl'], []);\n }\n rightDiv2.setAttribute('title', this.container.localObj.getConstant('Change case Tooltip'));\n textDiv.appendChild(rightDiv2);\n this.createChangecase(rightDiv2);\n };\n Text.prototype.createHighlightColorSplitButton = function (id, width, divElement, toolTipText) {\n var _this = this;\n var buttonElement = createElement('button', { id: id, attrs: { type: 'button' } });\n // buttonElement.style.width = width + 'px';\n // buttonElement.style.padding = '1px';\n // buttonElement.style.height = 30 + 'px';\n divElement.appendChild(buttonElement);\n var hgltSplitObj = new SplitButton({\n cssClass: 'e-de-btn-hghlclr',\n iconCss: 'e-de-ctnr-hglt-color',\n /* eslint-disable-next-line max-len */\n target: this.highlightColorElement, close: this.closePopup.bind(this), beforeOpen: this.openPopup.bind(this), enableRtl: this.isRtl\n });\n hgltSplitObj.appendTo(buttonElement);\n hgltSplitObj.click = function () {\n _this.applyHighlightColor(_this.highlightColorInputElement.style.backgroundColor);\n };\n hgltSplitObj.element.firstChild.style.backgroundColor = 'rgb(255, 255, 0)';\n hgltSplitObj.element.parentElement.setAttribute('title', toolTipText);\n hgltSplitObj.element.parentElement.setAttribute('aria-label', toolTipText);\n return hgltSplitObj;\n };\n Text.prototype.openPopup = function () {\n this.highlightColorElement.style.display = 'block';\n };\n Text.prototype.closePopup = function () {\n this.highlightColorElement.style.display = 'none';\n };\n Text.prototype.initializeHighlightColorElement = function () {\n this.highlightColorElement = createElement('div', {\n styles: 'display:none;width:157px',\n className: 'e-de-cntr-highlight-pane'\n });\n var yellowDiv = this.createHightlighColorPickerDiv('#ffff00', 'yellowDiv');\n var brightGreenDiv = this.createHightlighColorPickerDiv('#00ff00', 'brightGreenDiv');\n var turquoiseDiv = this.createHightlighColorPickerDiv('#00ffff', 'turquoiseDiv');\n var hotPinkDiv = this.createHightlighColorPickerDiv('#ff00ff', 'hotPinkDiv');\n var blueDiv = this.createHightlighColorPickerDiv('#0000ff', 'blueDiv');\n var redDiv = this.createHightlighColorPickerDiv('#ff0000', 'redDiv');\n var darkBlueDiv = this.createHightlighColorPickerDiv('#000080', 'darkBlueDiv');\n var tealDiv = this.createHightlighColorPickerDiv('#008080', 'tealDiv');\n var greenDiv = this.createHightlighColorPickerDiv('#008000', 'greenDiv');\n var violetDiv = this.createHightlighColorPickerDiv('#800080', 'violetDiv');\n var darkRedDiv = this.createHightlighColorPickerDiv('#800000', 'darkRedDiv');\n var darkYellowDiv = this.createHightlighColorPickerDiv('#808000', 'darkYellowDiv');\n var gray50Div = this.createHightlighColorPickerDiv('#808080', 'gray50Div');\n var gray25Div = this.createHightlighColorPickerDiv('#c0c0c0', 'gray25Div');\n var blackDiv = this.createHightlighColorPickerDiv('#000000', 'blackDiv');\n var nocolor = createElement('div', { className: 'e-hglt-no-color' });\n this.highlightColorElement.appendChild(nocolor);\n var nocolorDiv = createElement('div', { styles: 'width:24px;height:24px;background-color:#ffffff;margin:3px;', id: 'noColorDiv' });\n nocolor.appendChild(nocolorDiv);\n var nocolorDivValue = createElement('div', { innerHTML: this.localObj.getConstant('No color'), className: 'e-de-ctnr-hglt-no-color' });\n nocolorDiv.appendChild(nocolorDivValue);\n yellowDiv.addEventListener('click', this.onHighLightColor.bind(this));\n brightGreenDiv.addEventListener('click', this.onHighLightColor.bind(this));\n turquoiseDiv.addEventListener('click', this.onHighLightColor.bind(this));\n hotPinkDiv.addEventListener('click', this.onHighLightColor.bind(this));\n blueDiv.addEventListener('click', this.onHighLightColor.bind(this));\n redDiv.addEventListener('click', this.onHighLightColor.bind(this));\n darkBlueDiv.addEventListener('click', this.onHighLightColor.bind(this));\n tealDiv.addEventListener('click', this.onHighLightColor.bind(this));\n greenDiv.addEventListener('click', this.onHighLightColor.bind(this));\n violetDiv.addEventListener('click', this.onHighLightColor.bind(this));\n darkRedDiv.addEventListener('click', this.onHighLightColor.bind(this));\n darkYellowDiv.addEventListener('click', this.onHighLightColor.bind(this));\n gray50Div.addEventListener('click', this.onHighLightColor.bind(this));\n gray25Div.addEventListener('click', this.onHighLightColor.bind(this));\n blackDiv.addEventListener('click', this.onHighLightColor.bind(this));\n nocolor.addEventListener('click', this.onHighLightColor.bind(this));\n };\n Text.prototype.createHightlighColorPickerDiv = function (backgroundColor, id) {\n var colorDiv = createElement('div', { className: 'e-de-ctnr-hglt-btn', id: id });\n colorDiv.style.backgroundColor = backgroundColor;\n this.highlightColorElement.appendChild(colorDiv);\n return colorDiv;\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Text.prototype.onHighLightColor = function (event) {\n if (this.documentEditor.selectionModule) {\n this.applyHighlightColor(event.currentTarget.style.backgroundColor);\n this.highlightColor.toggle();\n }\n };\n Text.prototype.applyHighlightColorAsBackground = function (color) {\n this.removeSelectedColorDiv();\n if (color === 'NoColor') {\n this.highlightColorElement.querySelector('#noColorDiv').classList.add('e-color-selected');\n }\n else if (color === 'Yellow') {\n this.highlightColorElement.querySelector('#yellowDiv').classList.add('e-color-selected');\n }\n else if (color === 'BrightGreen') {\n this.highlightColorElement.querySelector('#brightGreenDiv').classList.add('e-color-selected');\n }\n else if (color === 'Turquoise') {\n this.highlightColorElement.querySelector('#turquoiseDiv').classList.add('e-color-selected');\n }\n else if (color === 'Pink') {\n this.highlightColorElement.querySelector('#hotPinkDiv').classList.add('e-color-selected');\n }\n else if (color === 'Red') {\n this.highlightColorElement.querySelector('#redDiv').classList.add('e-color-selected');\n }\n else if (color === 'DarkBlue') {\n this.highlightColorElement.querySelector('#darkBlueDiv').classList.add('e-color-selected');\n }\n else if (color === 'Teal') {\n this.highlightColorElement.querySelector('#tealDiv').classList.add('e-color-selected');\n }\n else if (color === 'Green') {\n this.highlightColorElement.querySelector('#greenDiv').classList.add('e-color-selected');\n }\n else if (color === 'Violet') {\n this.highlightColorElement.querySelector('#violetDiv').classList.add('e-color-selected');\n }\n else if (color === 'DarkRed') {\n this.highlightColorElement.querySelector('#darkRedDiv').classList.add('e-color-selected');\n }\n else if (color === 'DarkYellow') {\n this.highlightColorElement.querySelector('#darkYellowDiv').classList.add('e-color-selected');\n }\n else if (color === 'Gray50') {\n this.highlightColorElement.querySelector('#gray50Div').classList.add('e-color-selected');\n }\n else if (color === 'Gray25') {\n this.highlightColorElement.querySelector('#gray25Div').classList.add('e-color-selected');\n }\n else if (color === 'Black') {\n this.highlightColorElement.querySelector('#blackDiv').classList.add('e-color-selected');\n }\n else if (color === 'Blue') {\n this.highlightColorElement.querySelector('#blueDiv').classList.add('e-color-selected');\n }\n };\n Text.prototype.removeSelectedColorDiv = function () {\n this.highlightColorElement.querySelector('#noColorDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#yellowDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#brightGreenDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#turquoiseDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#hotPinkDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#redDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#darkBlueDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#tealDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#greenDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#violetDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#darkRedDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#darkYellowDiv').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#gray50Div').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#gray25Div').classList.remove('e-color-selected');\n this.highlightColorElement.querySelector('#blackDiv').classList.remove('e-color-selected');\n };\n Text.prototype.applyHighlightColor = function (color) {\n this.appliedHighlightColor = color;\n var hgltColor = this.getHighLightColor(color);\n if (hgltColor === 'NoColor') {\n this.documentEditor.selectionModule.characterFormat.highlightColor = null;\n }\n this.documentEditor.selectionModule.characterFormat.highlightColor = hgltColor;\n this.documentEditor.focusIn();\n };\n Text.prototype.getHighLightColor = function (color) {\n switch (color) {\n case 'rgb(255, 255, 0)':\n return 'Yellow';\n case 'rgb(0, 255, 0)':\n return 'BrightGreen';\n case 'rgb(0, 255, 255)':\n return 'Turquoise';\n case 'rgb(255, 0, 255)':\n return 'Pink';\n case 'rgb(0, 0, 255)':\n return 'Blue';\n case 'rgb(255, 0, 0)':\n return 'Red';\n case 'rgb(0, 0, 128)':\n return 'DarkBlue';\n case 'rgb(0, 128, 128)':\n return 'Teal';\n case 'rgb(0, 128, 0)':\n return 'Green';\n case 'rgb(128, 0, 128)':\n return 'Violet';\n case 'rgb(128, 0, 0)':\n return 'DarkRed';\n case 'rgb(128, 128, 0)':\n return 'DarkYellow';\n case 'rgb(128, 128, 128)':\n return 'Gray50';\n case 'rgb(192, 192, 192)':\n return 'Gray25';\n case 'rgb(0, 0, 0)':\n return 'Black';\n default:\n return 'NoColor';\n }\n };\n Text.prototype.createDiv = function (id, parentDiv, style) {\n var div;\n if (style) {\n div = createElement('div', { id: id, styles: style });\n }\n else {\n div = createElement('div', { id: id });\n }\n parentDiv.appendChild(div);\n return div;\n };\n /* eslint-disable-next-line max-len */\n Text.prototype.createButtonTemplate = function (id, iconcss, div, buttonClass, width, toolTipText) {\n var button = createElement('Button', { id: id, attrs: { type: 'button' } });\n // button.style.width = width + 'px';\n // buttonElement.style.height = 32 + 'px';\n div.appendChild(button);\n var btn = new Button({\n cssClass: buttonClass, iconCss: iconcss, enableRtl: this.isRtl\n });\n btn.appendTo(button);\n button.setAttribute('title', this.localObj.getConstant(toolTipText));\n button.setAttribute('aria-label', this.localObj.getConstant(toolTipText));\n button.setAttribute('aria-pressed', 'false');\n switch (toolTipText) {\n case 'Bold Tooltip':\n this.boldBtn = btn;\n break;\n case 'Italic Tooltip':\n this.italicBtn = btn;\n break;\n case 'Underline Tooltip':\n this.underlineBtn = btn;\n break;\n case 'Strikethrough':\n this.strikethroughBtn = btn;\n break;\n case 'Superscript Tooltip':\n this.superscriptBtn = btn;\n break;\n case 'Subscript Tooltip':\n this.subscriptBtn = btn;\n break;\n default:\n this.clearFormatBtn = btn;\n }\n return button;\n };\n Text.prototype.createFontColorPicker = function (id, width, divElement, toolTipText) {\n var _a = this.documentEditor.documentEditorSettings.colorPickerSettings, columns = _a.columns, createPopupOnClick = _a.createPopupOnClick, cssClass = _a.cssClass, disabled = _a.disabled, enablePersistence = _a.enablePersistence, inline = _a.inline, mode = _a.mode, modeSwitcher = _a.modeSwitcher, noColor = _a.noColor, presetColors = _a.presetColors, showButtons = _a.showButtons;\n var inputElement = createElement('input', { id: id, attrs: { 'type': 'color' } });\n inputElement.style.width = width + 'px';\n divElement.appendChild(inputElement);\n this.fontColorInputElement = new ColorPicker({ value: '#000000', enableRtl: this.isRtl, locale: this.container.locale, enableOpacity: false, mode: mode, modeSwitcher: modeSwitcher, showButtons: showButtons, columns: columns, createPopupOnClick: createPopupOnClick, cssClass: cssClass, disabled: disabled, enablePersistence: enablePersistence, inline: inline, noColor: noColor, presetColors: presetColors }, inputElement);\n this.fontColorInputElement.element.parentElement.setAttribute('title', toolTipText);\n this.fontColorInputElement.element.parentElement.setAttribute('aria-label', toolTipText);\n this.documentEditor.documentHelper.fontColorInputElement = this.fontColorInputElement;\n return inputElement;\n };\n Text.prototype.createDropDownListForSize = function (fontSelectElement) {\n var _this = this;\n var fontSize = ['8', '9', '10', '11', '12', '14', '16', '18', '20', '22', '24', '26', '28', '36', '48', '72', '96'];\n this.fontSize = new ComboBox({\n dataSource: fontSize, popupHeight: '180px',\n popupWidth: '80px',\n cssClass: 'e-de-prop-dropdown',\n allowCustom: true,\n showClearButton: false,\n enableRtl: this.isRtl\n });\n this.fontSize.focus = function () {\n _this.isRetrieving = false;\n _this.fontSize.element.select();\n };\n this.fontSize.value = this.documentEditor.selectionModule.characterFormat.fontSize.toString();\n this.fontSize.appendTo(fontSelectElement);\n this.fontSize.element.parentElement.setAttribute('title', this.localObj.getConstant('Font Size'));\n };\n Text.prototype.createDropDownListForFamily = function (fontSelectElement) {\n var _this = this;\n /* eslint-disable */\n var fontStyle;\n var isStringTemplate = false;\n var itemTemplate = '';\n if (!this.container.enableCsp) {\n itemTemplate = initializeCSPTemplate(function (data) { return \"\" + data.FontName + \"\"; });\n isStringTemplate = true;\n }\n this.fontFamily = new ComboBox({\n dataSource: fontStyle,\n query: new Query().select(['FontName']),\n fields: { text: 'FontName', value: 'FontValue' },\n popupHeight: '150px',\n cssClass: 'e-de-prop-dropdown',\n allowCustom: true,\n showClearButton: false,\n enableRtl: this.isRtl,\n itemTemplate: itemTemplate\n });\n this.fontFamily.appendTo(fontSelectElement);\n this.fontFamily.isStringTemplate = isStringTemplate;\n var fontFamilyValue = this.container.documentEditorSettings.fontFamilies;\n for (var i = 0; i < fontFamilyValue.length; i++) {\n var fontValue = fontFamilyValue[i];\n var fontStyleValue = { 'FontName': fontValue, 'FontValue': fontValue };\n this.fontFamily.addItem(fontStyleValue, i);\n }\n this.fontFamily.focus = function () {\n _this.isRetrieving = false;\n _this.fontFamily.element.select();\n };\n this.fontFamily.element.parentElement.setAttribute('title', this.localObj.getConstant('Font'));\n };\n /* eslint-enable */\n Text.prototype.wireEvent = function () {\n var _this = this;\n this.fontFamily.addEventListener('change', function () {\n _this.changeFontFamily();\n });\n this.fontSize.addEventListener('change', function () {\n _this.changeFontSize();\n });\n this.bold.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.boldAction();\n });\n this.italic.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.italicAction();\n });\n this.underline.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.underlineAction();\n });\n this.strikethrough.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.strikethroughAction();\n });\n this.superscript.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.superscriptAction();\n });\n this.subscript.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.subscriptAction();\n });\n this.fontColorInputElement.addEventListener('change', function (args) {\n _this.isRetrieving = false;\n _this.changeFontColor(args);\n });\n this.clearFormat.addEventListener('click', function () {\n _this.isRetrieving = false;\n _this.clearFormatAction();\n });\n this.changeCaseDropdown.addEventListener('select', function (args) {\n _this.isRetrieving = false;\n _this.changeCase(args);\n });\n };\n Text.prototype.unwireEvents = function () {\n this.fontFamily.change = undefined;\n this.fontSize.change = undefined;\n this.bold.click = undefined;\n this.italic.click = undefined;\n this.underline.click = undefined;\n this.strikethrough.click = undefined;\n this.superscript.click = undefined;\n this.subscript.click = undefined;\n this.fontColorInputElement.change = undefined;\n this.highlightColorElement.click = undefined;\n this.highlightColor.click = undefined;\n this.clearFormat.click = undefined;\n this.changeCaseDropdown.select = undefined;\n };\n Text.prototype.boldAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleBold();\n this.documentEditor.focusIn();\n }\n };\n Text.prototype.italicAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleItalic();\n this.documentEditor.focusIn();\n }\n };\n Text.prototype.underlineAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleUnderline('Single');\n this.documentEditor.focusIn();\n }\n };\n Text.prototype.strikethroughAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleStrikethrough();\n this.documentEditor.focusIn();\n }\n };\n Text.prototype.clearFormatAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.clearFormatting();\n }\n };\n Text.prototype.subscriptAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleSubscript();\n this.documentEditor.focusIn();\n }\n };\n Text.prototype.superscriptAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleSuperscript();\n this.documentEditor.focusIn();\n }\n };\n Text.prototype.changeFontColor = function (arg) {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.selectionModule) {\n this.documentEditor.selectionModule.characterFormat.fontColor = arg.currentValue.hex;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Text.prototype.changeFontFamily = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.selectionModule && this.fontFamily.value !== '') {\n setTimeout(function () {\n _this.documentEditor.selectionModule.characterFormat.fontFamily =\n SanitizeHtmlHelper.sanitize(_this.fontFamily.value);\n }, 10);\n this.documentEditor.focusIn();\n }\n };\n Text.prototype.changeFontSize = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.selectionModule && this.fontSize.value !== '') {\n setTimeout(function () {\n _this.documentEditor.selectionModule.characterFormat.fontSize = _this.fontSize.value;\n }, 10);\n this.documentEditor.focusIn();\n }\n };\n Text.prototype.onSelectionChange = function () {\n this.isRetrieving = true;\n if (this.documentEditor.selectionModule) {\n //#region character format\n if (this.documentEditor.selectionModule.characterFormat.fontFamily) {\n var fontFamily = void 0;\n if (!isNullOrUndefined(this.documentEditor.selectionModule.characterFormat.renderedFontFamily)\n && !isNullOrUndefined(this.documentEditor.selectionModule.characterFormat.fontFamily)) {\n fontFamily = this.documentEditor.selectionModule.characterFormat.renderedFontFamily;\n }\n else {\n fontFamily = this.documentEditor.selectionModule.characterFormat.fontFamily;\n }\n this.fontFamily.value = fontFamily;\n this.fontFamily.dataBind();\n if (isNullOrUndefined(this.fontFamily.getDataByValue(fontFamily))) {\n var fontStyleValue = { 'FontName': fontFamily, 'FontValue': fontFamily };\n this.fontFamily.addItem(fontStyleValue);\n }\n }\n else {\n this.fontFamily.value = '';\n }\n if (this.documentEditor.selectionModule.characterFormat.fontSize) {\n this.fontSize.value = this.documentEditor.selectionModule.characterFormat.fontSize.toString();\n this.fontSize.dataBind();\n }\n else {\n this.fontSize.value = '';\n }\n if (this.documentEditor.selectionModule.characterFormat.bold) {\n if (!this.bold.classList.contains('e-btn-toggle')) {\n this.bold.classList.add('e-btn-toggle');\n this.bold.setAttribute('aria-pressed', 'true');\n }\n }\n else {\n if (this.bold.classList.contains('e-btn-toggle')) {\n this.bold.classList.remove('e-btn-toggle');\n this.bold.setAttribute('aria-pressed', 'false');\n }\n }\n if (this.documentEditor.selectionModule.characterFormat.italic) {\n if (!this.italic.classList.contains('e-btn-toggle')) {\n this.italic.classList.add('e-btn-toggle');\n this.italic.setAttribute('aria-pressed', 'true');\n }\n }\n else {\n if (this.italic.classList.contains('e-btn-toggle')) {\n this.italic.classList.remove('e-btn-toggle');\n this.italic.setAttribute('aria-pressed', 'false');\n }\n }\n if (this.documentEditor.selectionModule.characterFormat.underline\n && this.documentEditor.selectionModule.characterFormat.underline !== 'None') {\n if (!this.underline.classList.contains('e-btn-toggle')) {\n this.underline.classList.add('e-btn-toggle');\n this.underline.setAttribute('aria-pressed', 'true');\n }\n }\n else {\n if (this.underline.classList.contains('e-btn-toggle')) {\n this.underline.classList.remove('e-btn-toggle');\n this.underline.setAttribute('aria-pressed', 'false');\n }\n }\n if (this.documentEditor.selectionModule.characterFormat.strikethrough\n && this.documentEditor.selectionModule.characterFormat.strikethrough !== 'None') {\n if (!this.strikethrough.classList.contains('e-btn-toggle')) {\n this.strikethrough.classList.add('e-btn-toggle');\n this.strikethrough.setAttribute('aria-pressed', 'true');\n }\n }\n else {\n if (this.strikethrough.classList.contains('e-btn-toggle')) {\n this.strikethrough.classList.remove('e-btn-toggle');\n this.strikethrough.setAttribute('aria-pressed', 'false');\n }\n }\n if (this.documentEditor.selectionModule.characterFormat.baselineAlignment\n && this.documentEditor.selectionModule.characterFormat.baselineAlignment === 'Subscript') {\n if (!this.subscript.classList.contains('e-btn-toggle')) {\n this.subscript.classList.add('e-btn-toggle');\n this.subscript.setAttribute('aria-pressed', 'true');\n }\n }\n else {\n if (this.subscript.classList.contains('e-btn-toggle')) {\n this.subscript.classList.remove('e-btn-toggle');\n this.subscript.setAttribute('aria-pressed', 'false');\n }\n }\n if (this.documentEditor.selectionModule.characterFormat.baselineAlignment\n && this.documentEditor.selectionModule.characterFormat.baselineAlignment === 'Superscript') {\n if (!this.superscript.classList.contains('e-btn-toggle')) {\n this.superscript.classList.add('e-btn-toggle');\n this.superscript.setAttribute('aria-pressed', 'true');\n }\n }\n else {\n if (this.superscript.classList.contains('e-btn-toggle')) {\n this.superscript.classList.remove('e-btn-toggle');\n this.superscript.setAttribute('aria-pressed', 'false');\n }\n }\n if (this.documentEditor.selectionModule.characterFormat.fontColor) {\n var fontColor = this.documentEditor.selectionModule.characterFormat.fontColor;\n // \"empty\" is old value used for auto color till v19.2.49. It is maintained for backward compatibility.\n if (fontColor === 'empty' || fontColor === '#00000000') {\n fontColor = '#000000';\n }\n this.fontColorInputElement.value = fontColor;\n }\n if (this.documentEditor.selectionModule.characterFormat.highlightColor) {\n this.highlightColorInputElement.style.backgroundColor = this.appliedHighlightColor;\n this.applyHighlightColorAsBackground(this.documentEditor.selectionModule.characterFormat.highlightColor);\n }\n //#endregion\n }\n };\n Text.prototype.destroy = function () {\n if (this.highlightColor) {\n this.highlightColor.destroy();\n this.highlightColor = undefined;\n }\n if (this.fontColorInputElement) {\n this.fontColorInputElement.destroy();\n this.fontColorInputElement = undefined;\n }\n if (this.fontSize) {\n this.fontSize.destroy();\n this.fontSize = undefined;\n }\n if (this.fontFamily) {\n this.fontFamily.destroy();\n this.fontFamily = undefined;\n }\n if (this.changeCaseDropdown) {\n this.changeCaseDropdown.destroy();\n this.changeCaseDropdown = undefined;\n }\n if (this.boldBtn) {\n this.boldBtn.destroy();\n this.boldBtn = undefined;\n }\n if (this.italicBtn) {\n this.italicBtn.destroy();\n this.italicBtn = undefined;\n }\n if (this.underlineBtn) {\n this.underlineBtn.destroy();\n this.underlineBtn = undefined;\n }\n if (this.strikethroughBtn) {\n this.strikethroughBtn.destroy();\n this.strikethroughBtn = undefined;\n }\n if (this.subscriptBtn) {\n this.subscriptBtn.destroy();\n this.subscriptBtn = undefined;\n }\n if (this.superscriptBtn) {\n this.superscriptBtn.destroy();\n this.superscriptBtn = undefined;\n }\n if (this.clearFormatBtn) {\n this.clearFormatBtn.destroy();\n this.clearFormatBtn = undefined;\n }\n this.container = undefined;\n };\n return Text;\n}());\nexport { Text };\n","import { createElement, isNullOrUndefined, classList, L10n, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport { ComboBox } from '@syncfusion/ej2-dropdowns';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton, SplitButton } from '@syncfusion/ej2-splitbuttons';\nimport { Query } from '@syncfusion/ej2-data';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\n/**\n * Paragraph Properties\n *\n * @private\n */\nvar Paragraph = /** @class */ (function () {\n function Paragraph(container) {\n this.isRetrieving = false;\n this.appliedBulletStyle = 'dot';\n this.appliedNumberingStyle = 'arabic';\n this.appliedLineSpacing = '';\n this.splitButtonClass = 'e-de-prop-splitbutton';\n this.container = container;\n }\n Object.defineProperty(Paragraph.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Paragraph.prototype.initializeParagraphPropertiesDiv = function (wholeDiv, isRtl) {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.isRtl = isRtl;\n if (this.isRtl) {\n this.splitButtonClass = 'e-rtl ' + this.splitButtonClass;\n }\n this.textProperties = wholeDiv;\n var element = this.documentEditor.element.id + '_font_properties';\n var paragraphDiv = this.createDivElement(element + '_paragraph', wholeDiv, '');\n classList(paragraphDiv, ['e-de-cntr-pane-padding'], []);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n label.innerHTML = this.localObj.getConstant('Paragraph');\n paragraphDiv.appendChild(label);\n var styleDiv = this.createDivElement(element + '_styleDiv', paragraphDiv);\n styleDiv.classList.add('e-de-ctnr-segment', 'e-de-ctnr-style-div');\n var styleSelect = createElement('input', { id: element + '_style', styles: 'width:248px;letter-spacing: 0.05px;' });\n styleDiv.appendChild(styleSelect);\n this.createStyleDropDownList(styleSelect);\n var indentWholeDiv = this.createDivElement(element + '_indentWholeDiv', paragraphDiv);\n indentWholeDiv.style.display = 'flex';\n indentWholeDiv.classList.add('e-de-ctnr-segment');\n if (isRtl) {\n classList(indentWholeDiv, ['e-de-ctnr-segment-rtl'], []);\n }\n var indentDiv = this.createDivElement(element + '_indentDiv', indentWholeDiv, 'display:flex;');\n var indentClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-left e-btn-group';\n if (isRtl) {\n indentClassName = 'e-rtl ' + indentClassName;\n }\n indentDiv.className = indentClassName;\n this.leftAlignment = this.createButtonTemplate(element + '_leftIndent', 'e-de-ctnr-alignleft e-icons', indentDiv, 'e-de-prop-indent-button', '40.5', 'Align left Tooltip');\n this.centerAlignment = this.createButtonTemplate(element + '_centerIndent', 'e-de-ctnr-aligncenter e-icons', indentDiv, 'e-de-prop-indent-button', '40.5', 'Center Tooltip');\n this.rightAlignment = this.createButtonTemplate(element + '_rightIndent', 'e-de-ctnr-alignright e-icons', indentDiv, 'e-de-prop-indent-button', '40.5', 'Align right Tooltip');\n this.justify = this.createButtonTemplate(element + '_justify', 'e-de-ctnr-justify e-icons', indentDiv, 'e-de-prop-indent-last-button', '40.5', 'Justify Tooltip');\n var increaseIndentIconCss = 'e-de-ctnr-increaseindent e-icons';\n var decreaseIndentIconCss = 'e-de-ctnr-decreaseindent e-icons';\n var incDecIndentDiv = this.createDivElement(element + '_lineindentDiv', indentWholeDiv, 'display:flex;');\n indentClassName = 'e-de-ctnr-group-btn e-de-char-fmt-btn-right e-btn-group';\n if (isRtl) {\n indentClassName = 'e-rtl ' + indentClassName;\n increaseIndentIconCss += ' e-de-flip';\n decreaseIndentIconCss += ' e-de-flip';\n }\n incDecIndentDiv.className = indentClassName;\n this.decreaseIndent = this.createButtonTemplate(element + '_decreaseIndent', decreaseIndentIconCss, incDecIndentDiv, 'e-de-prop-indent-button', '37', 'Decrease indent');\n this.increaseIndent = this.createButtonTemplate(element + '_increaseIndent', increaseIndentIconCss, incDecIndentDiv, 'e-de-prop-indent-last-button', '37', 'Increase indent');\n var listDiv = this.createDivElement(element + '_listDiv', paragraphDiv, 'display:flex;');\n var paraDiv = this.createDivElement(element + '_paraDiv', paragraphDiv, 'display:flex');\n classList(listDiv, ['e-de-ctnr-segment', 'e-de-ctnr-group-btn'], []);\n classList(paraDiv, ['e-de-ctnr-segment', 'e-de-ctnr-group-btn'], []);\n if (isRtl) {\n classList(listDiv, ['e-de-ctnr-segment-rtl', 'e-de-ctnr-group-btn'], []);\n classList(paraDiv, ['e-de-ctnr-segment-rtl', 'e-de-ctnr-group-btn'], []);\n }\n var lineHeight = createElement('button', { id: element + '_lineHeight', attrs: { type: 'button' } });\n listDiv.appendChild(lineHeight);\n this.lineSpacing = this.createLineSpacingDropdown(lineHeight);\n var listDropDown = this.createDivElement(element + '_listDropDiv', listDiv);\n classList(listDropDown, ['de-split-button', 'e-de-ctnr-segment-list'], []);\n if (isRtl) {\n classList(listDropDown, ['e-de-ctnr-segment-list-rtl'], []);\n }\n var bulletButton = createElement('button', { id: element + '_bullet', attrs: { type: 'button' } });\n listDropDown.appendChild(bulletButton);\n var numberingList = createElement('button', { id: element + '_numberingList', attrs: { type: 'button' } });\n listDropDown.appendChild(numberingList);\n var bulletIconCss = 'e-de-ctnr-bullets e-icons';\n var numberIconCss = 'e-de-ctnr-numbering e-icons';\n if (isRtl) {\n bulletIconCss += ' e-de-flip';\n numberIconCss += ' e-de-flip';\n }\n this.createBulletListDropButton(bulletIconCss, bulletButton);\n this.createNumberListDropButton(numberIconCss, numberingList);\n this.borders = this.createButtonTemplate(element + '_borders', 'e-de-ctnr-borders e-icons', paraDiv, 'e-de-ctnr-group-btn', '37', 'Borders');\n this.showHiddenMarks = this.createButtonTemplate(element + '_paraMark', 'e-de-e-paragraph-mark e-icons', paraDiv, 'e-de-ctnr-group-btn', '37', 'ShowHiddenMarks Tooltip');\n };\n Paragraph.prototype.createSeparator = function (parentDiv) {\n var separator = createElement('div', { className: 'e-de-prop-vline' });\n parentDiv.appendChild(separator);\n };\n Paragraph.prototype.createDivElement = function (id, parentDiv, style) {\n var element;\n if (style) {\n element = createElement('div', { id: id, styles: style });\n }\n else {\n element = createElement('div', { id: id });\n }\n parentDiv.appendChild(element);\n return element;\n };\n /* eslint-disable-next-line max-len */\n Paragraph.prototype.createButtonTemplate = function (id, iconcss, div, buttonClass, width, toolTipText) {\n var buttonElement = createElement('Button', { id: id, attrs: { type: 'button' } });\n // buttonElement.style.width = width + 'px';\n // buttonElement.style.height = 32 + 'px';\n div.appendChild(buttonElement);\n var btn = new Button({\n cssClass: buttonClass, iconCss: iconcss\n });\n btn.appendTo(buttonElement);\n buttonElement.setAttribute('title', this.localObj.getConstant(toolTipText));\n buttonElement.setAttribute('aria-label', this.localObj.getConstant(toolTipText));\n if (this.localObj.getConstant(toolTipText) !== 'Decrease indent' && this.localObj.getConstant(toolTipText) !== 'Increase indent' && this.localObj.getConstant(toolTipText) !== 'Borders') {\n buttonElement.setAttribute('aria-pressed', 'false');\n }\n switch (toolTipText) {\n case 'Align left Tooltip':\n this.leftAlignmentBtn = btn;\n break;\n case 'Align right Tooltip':\n this.rightAlignmentBtn = btn;\n break;\n case 'Justify Tooltip':\n this.justifyBtn = btn;\n break;\n case 'Decrease indent':\n this.decreaseIndentBtn = btn;\n break;\n case 'Increase indent':\n this.increaseIndentBtn = btn;\n break;\n case 'Borders':\n this.bordersBtn = btn;\n break;\n case 'ShowHiddenMarks Tooltip':\n this.showHiddenMarksBtn = btn;\n break;\n default:\n this.centerAlignmentBtn = btn;\n }\n return buttonElement;\n };\n Paragraph.prototype.createLineSpacingDropdown = function (button) {\n var _this = this;\n var items = [{\n text: this.localObj.getConstant('Single')\n }, {\n text: '1.15'\n }, {\n text: '1.5'\n }, {\n text: this.localObj.getConstant('Double')\n }];\n var dropdown = new DropDownButton({\n items: items,\n iconCss: 'e-de-ctnr-linespacing e-icons',\n enableRtl: this.isRtl,\n select: this.lineSpacingAction.bind(this),\n cssClass: this.splitButtonClass,\n beforeItemRender: function (args) {\n args.element.innerHTML = '' + args.item.text;\n var span = args.element.children[0];\n if (args.item.text === _this.appliedLineSpacing) {\n span.style.marginRight = '10px';\n span.setAttribute('class', 'e-de-selected-item e-icons e-de-linespacing');\n }\n else {\n args.element.children[0].style.marginRight = '25px';\n args.element.children[0].classList.remove('e-de-selected-item');\n }\n }\n });\n dropdown.appendTo(button);\n button.setAttribute('title', this.localObj.getConstant('Line spacing'));\n return dropdown;\n };\n Paragraph.prototype.createNumberListDropButton = function (iconcss, button) {\n var _this = this;\n var div = createElement('div', { id: 'target', styles: 'width: 211px;height: auto;display:none' });\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;',\n id: 'listMenu',\n className: 'e-de-floating-menu e-de-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n div.appendChild(ulTag);\n this.noneNumberTag = this.createNumberNoneListTag(ulTag);\n this.noneNumberTag.addEventListener('click', this.numberedNoneClick.bind(this));\n this.numberList = this.createNumberListTag(ulTag, '1.', '2.', '3.');\n this.numberList.addEventListener('click', this.numberedNumberDotClick.bind(this));\n this.lowLetter = this.createNumberListTag(ulTag, 'a.', 'b.', 'c.');\n this.lowLetter.addEventListener('click', this.numberedLowLetterClick.bind(this));\n this.upLetter = this.createNumberListTag(ulTag, 'A.', 'B.', 'C.');\n this.upLetter.addEventListener('click', this.numberedUpLetterClick.bind(this));\n this.lowRoman = this.createNumberListTag(ulTag, 'i.', 'ii.', 'iii.');\n this.lowRoman.addEventListener('click', this.numberedLowRomanClick.bind(this));\n this.upRoman = this.createNumberListTag(ulTag, 'I.', 'II.', 'III.');\n this.upRoman.addEventListener('click', this.numberedUpRomanClick.bind(this));\n var menuOptions = {\n target: div,\n iconCss: iconcss,\n cssClass: this.splitButtonClass,\n beforeOpen: function () {\n div.style.display = 'block';\n var levelPattern = 'None';\n if (!isNullOrUndefined(_this.documentEditor.selectionModule.paragraphFormat)) {\n if (isNullOrUndefined(_this.documentEditor.selectionModule.paragraphFormat.listId)\n || _this.documentEditor.selectionModule.paragraphFormat.listId === -1) {\n levelPattern = 'None';\n }\n else {\n var list = _this.documentEditor.documentHelper.getListById(_this.documentEditor.selectionModule.paragraphFormat.listId);\n var abstractList = _this.documentEditor.documentHelper.getAbstractListById(list.abstractListId);\n var startParagraph = _this.documentEditor.selectionModule.isForward ?\n _this.documentEditor.selectionModule.start.paragraph : _this.documentEditor.selectionModule.end.paragraph;\n var level = abstractList.levels[startParagraph.paragraphFormat.listFormat.listLevelNumber];\n levelPattern = level.listLevelPattern;\n }\n }\n _this.updateSelectedNumberedListType(levelPattern);\n },\n beforeClose: function () {\n div.style.display = 'none';\n _this.removeSelectedList();\n }\n };\n this.numberedListBtn = new SplitButton(menuOptions);\n this.numberedListBtn.click = function () {\n _this.applyLastAppliedNumbering();\n };\n this.numberedListBtn.appendTo(button);\n button.parentElement.setAttribute('title', this.localObj.getConstant('Numbering'));\n button.parentElement.setAttribute('aria-label', this.localObj.getConstant('Numbering'));\n };\n Paragraph.prototype.updateSelectedBulletListType = function (listText) {\n switch (listText) {\n case String.fromCharCode(61623):\n this.dotBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61551) + String.fromCharCode(32):\n this.circleBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61607):\n this.squareBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61558):\n this.flowerBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61656):\n this.arrowBullet.classList.add('de-list-item-selected');\n break;\n case String.fromCharCode(61692):\n this.tickBullet.classList.add('de-list-item-selected');\n break;\n default:\n this.noneBulletTag.classList.add('de-list-item-selected');\n break;\n }\n };\n Paragraph.prototype.updateSelectedNumberedListType = function (listText) {\n switch (listText) {\n case 'Arabic':\n this.numberList.classList.add('de-list-item-selected');\n break;\n case 'UpRoman':\n this.upRoman.classList.add('de-list-item-selected');\n break;\n case 'UpLetter':\n this.upLetter.classList.add('de-list-item-selected');\n break;\n case 'LowLetter':\n this.lowLetter.classList.add('de-list-item-selected');\n break;\n case 'LowRoman':\n this.lowRoman.classList.add('de-list-item-selected');\n break;\n default:\n this.noneNumberTag.classList.add('de-list-item-selected');\n break;\n }\n };\n Paragraph.prototype.removeSelectedList = function () {\n var className = 'de-list-item-selected';\n this.noneNumberTag.classList.remove(className);\n this.numberList.classList.remove(className);\n this.lowLetter.classList.remove(className);\n this.upLetter.classList.remove(className);\n this.lowRoman.classList.remove(className);\n this.upRoman.classList.remove(className);\n this.noneBulletTag.classList.remove(className);\n this.dotBullet.classList.remove(className);\n this.circleBullet.classList.remove(className);\n this.squareBullet.classList.remove(className);\n this.flowerBullet.classList.remove(className);\n this.arrowBullet.classList.remove(className);\n this.tickBullet.classList.remove(className);\n };\n /**\n * @private\n * @returns {void}\n */\n Paragraph.prototype.applyLastAppliedNumbering = function () {\n switch (this.appliedNumberingStyle) {\n case 'arabic':\n this.numberedNumberDotClick();\n break;\n case 'lowletter':\n this.numberedLowLetterClick();\n break;\n case 'upletter':\n this.numberedUpLetterClick();\n break;\n case 'lowroman':\n this.numberedLowRomanClick();\n break;\n case 'uproman':\n this.numberedUpRomanClick();\n break;\n }\n };\n Paragraph.prototype.applyLastAppliedBullet = function () {\n switch (this.appliedBulletStyle) {\n case 'dot':\n this.bulletDotClick();\n break;\n case 'circle':\n this.bulletCircleClick();\n break;\n case 'square':\n this.bulletSquareClick();\n break;\n case 'arrow':\n this.bulletArrowClick();\n break;\n case 'tick':\n this.bulletTickClick();\n break;\n case 'flower':\n this.bulletFlowerClick();\n break;\n }\n };\n Paragraph.prototype.createBulletListDropButton = function (iconcss, button) {\n var _this = this;\n var div = createElement('div', { id: 'bullet_list', styles: 'width: 196px;height: auto;display:none' });\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px;', id: 'listMenu',\n className: 'e-de-floating-menu e-de-bullets-menu e-de-list-container e-de-list-thumbnail'\n });\n div.appendChild(ulTag);\n this.noneBulletTag = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-none e-icons e-de-ctnr-list', true);\n this.noneBulletTag.addEventListener('click', this.numberedNoneClick.bind(this));\n this.dotBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-dot e-icons e-de-ctnr-list', false);\n this.dotBullet.addEventListener('click', this.bulletDotClick.bind(this));\n this.circleBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-circle e-icons e-de-ctnr-list', false);\n this.circleBullet.addEventListener('click', this.bulletCircleClick.bind(this));\n this.squareBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-square e-icons e-de-ctnr-list', false);\n this.squareBullet.addEventListener('click', this.bulletSquareClick.bind(this));\n this.flowerBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-flower e-icons e-de-ctnr-list', false);\n this.flowerBullet.addEventListener('click', this.bulletFlowerClick.bind(this));\n this.arrowBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-arrow e-icons e-de-ctnr-list', false);\n this.arrowBullet.addEventListener('click', this.bulletArrowClick.bind(this));\n this.tickBullet = this.createBulletListTag(ulTag, 'e-de-ctnr-bullet-tick e-icons e-de-ctnr-list', false);\n this.tickBullet.addEventListener('click', this.bulletTickClick.bind(this));\n var menuOptions = {\n target: div,\n iconCss: iconcss,\n cssClass: this.splitButtonClass,\n beforeOpen: function () {\n div.style.display = 'block';\n if (isNullOrUndefined(_this.documentEditor.selectionModule.paragraphFormat.listId) ||\n _this.documentEditor.selectionModule.paragraphFormat.listId === -1) {\n _this.updateSelectedBulletListType(_this.documentEditor.selectionModule.paragraphFormat.listText);\n }\n else {\n var startParagraph = _this.documentEditor.selectionModule.isForward ?\n _this.documentEditor.selectionModule.start.paragraph : _this.documentEditor.selectionModule.end.paragraph;\n _this.updateSelectedBulletListType(startParagraph.paragraphFormat.listFormat.listLevel.numberFormat);\n }\n },\n beforeClose: function () {\n div.style.display = 'none';\n _this.removeSelectedList();\n }\n };\n this.bulletListBtn = new SplitButton(menuOptions);\n this.bulletListBtn.click = function () {\n _this.applyLastAppliedBullet();\n };\n this.bulletListBtn.appendTo(button);\n button.parentElement.setAttribute('title', this.localObj.getConstant('Bullets'));\n button.parentElement.setAttribute('aria-label', this.localObj.getConstant('Bullets'));\n };\n Paragraph.prototype.createNumberListTag = function (ulTag, text1, text2, text3) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-floating-menuitem e-de-floating-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
      ' + text1 + '
      ' + text2 + '';\n innerHTML += '
      ' + text3 + '
      ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-list-header-presetmenu',\n innerHTML: innerHTML\n });\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n Paragraph.prototype.createNumberNoneListTag = function (ulTag) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-floating-menuitem e-de-floating-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var innerHTML = '
      ' + this.localObj.getConstant('None') + '
      ';\n var liInnerDiv = createElement('div', {\n className: 'e-de-list-header-presetmenu', styles: 'position:relative;left:11px;top:13px',\n innerHTML: innerHTML\n });\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n Paragraph.prototype.createBulletListTag = function (ulTag, iconCss, isNone) {\n var liTag = createElement('li', {\n styles: 'display:block;',\n className: 'e-de-floating-menuitem e-de-floating-bullet-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var liInnerDiv = createElement('div', { className: 'e-de-bullet-list-header-presetmenu' });\n var spanDiv = createElement('div', { styles: isNone ? 'font-size:8px;text-align: center;top: 8px;line-height:normal' : '' });\n liInnerDiv.appendChild(spanDiv);\n var span = createElement('span', { className: !isNone ? iconCss : '' });\n spanDiv.appendChild(span);\n if (isNone) {\n liInnerDiv.style.display = 'inline-table';\n span.textContent = this.localObj.getConstant('None');\n }\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n Paragraph.prototype.createStyleDropDownList = function (selectElement) {\n var _this = this;\n this.style = new ComboBox({\n dataSource: [{ StyleName: 'Normal', IconClass: 'e-de-e-paragraph-mark e-icons' }],\n cssClass: 'e-de-prop-dropdown',\n popupHeight: '240px',\n enableRtl: this.isRtl,\n allowFiltering: true,\n query: new Query().select(['StyleName', 'Style', 'IconClass']),\n fields: { text: 'StyleName', value: 'StyleName' },\n showClearButton: false,\n change: this.selectStyleValue.bind(this)\n });\n var itemTemplate = '';\n // const instance: Paragraph = this;\n this.style.open = this.updateOptions.bind(this);\n if (!this.container.enableCsp) {\n if (this.isRtl) {\n itemTemplate = initializeCSPTemplate(function (data) {\n return \"\" + data.StyleName + \"\";\n });\n }\n else {\n itemTemplate = initializeCSPTemplate(function (data) {\n return \"\" + data.StyleName + \"\";\n });\n }\n this.style.itemTemplate = itemTemplate;\n this.style.isStringTemplate = true;\n }\n this.style.footerTemplate = initializeCSPTemplate(function (data) {\n return \"\\n \" + _this.localObj.getConstant('Manage Styles') + \"...\";\n });\n this.style.appendTo(selectElement);\n this.style.focus = function () {\n _this.isRetrieving = false;\n _this.style.element.select();\n };\n selectElement.parentElement.setAttribute('title', this.localObj.getConstant('Styles'));\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Paragraph.prototype.updateOptions = function (args) {\n args.popup.element.getElementsByClassName('e-de-ctnr-dropdown-ftr')[0].addEventListener('click', this.createStyle.bind(this));\n };\n /* eslint-disable */\n Paragraph.prototype.updateStyleNames = function () {\n this.styleName = !isNullOrUndefined(this.style.itemData) ? this.style.itemData.StyleName : undefined;\n var stylesMap = this.documentEditor.documentHelper.stylesMap;\n var paraStyles = stylesMap.get(\"Paragraph\") ? stylesMap.get(\"Paragraph\") : [];\n var linkedStyles = stylesMap.get(\"Linked\") ? stylesMap.get(\"Linked\") : [];\n var charStyles = stylesMap.get(\"Character\") ? stylesMap.get(\"Character\") : [];\n for (var _i = 0, linkedStyles_1 = linkedStyles; _i < linkedStyles_1.length; _i++) {\n var linkedStyle = linkedStyles_1[_i];\n for (var i = 0; i < charStyles.length; i++) {\n var charStyle = charStyles[i];\n if (linkedStyle[\"StyleName\"] + \" Char\" === charStyle[\"StyleName\"]) {\n charStyles.splice(i, 1);\n break;\n }\n }\n }\n this.style.dataSource = paraStyles.concat(linkedStyles, charStyles);\n this.onSelectionChange();\n };\n Paragraph.prototype.createStyle = function () {\n this.style.hidePopup();\n if (!this.documentEditor.isReadOnly) {\n this.documentEditor.showDialog('Styles');\n }\n };\n Paragraph.prototype.constructStyleDropItems = function (styles) {\n var collection = [];\n var paraIcon = 'e-list-icon e-de-listview-icon e-de-e-paragraph-style-mark e-icons';\n var charIcon = 'e-list-icon e-de-listview-icon e-de-e-character-style-mark e-icons';\n var linkedIcon = 'e-list-icon e-de-listview-icon e-de-e-linked-style-mark e-icons';\n for (var _i = 0, styles_1 = styles; _i < styles_1.length; _i++) {\n var styleObj = styles_1[_i];\n var obj = {};\n var styleName = this.localObj.getConstant(styleObj.name);\n obj.StyleName = styleName === '' ? styleObj.name : styleName;\n obj.Style = this.parseStyle(styleObj.style);\n if (styleObj.type == \"Paragraph\") {\n obj.IconClass = paraIcon;\n }\n else if (styleObj.type == \"Character\") {\n obj.IconClass = charIcon;\n }\n else {\n obj.IconClass = linkedIcon;\n }\n collection.push(obj);\n }\n return collection;\n };\n Paragraph.prototype.parseStyle = function (style) {\n var domStyle = '';\n var styleObj = JSON.parse(style);\n var textDecoration = '';\n if (!isNullOrUndefined(styleObj.characterFormat.baselineAlignment) && styleObj.characterFormat.baselineAlignment !== 'Normal') {\n var vAlign = '';\n switch (styleObj.characterFormat.baselineAlignment) {\n case 'Superscript':\n vAlign = 'super';\n break;\n case 'Subscript':\n vAlign = 'sub';\n break;\n }\n if (vAlign.length > 1) {\n domStyle += 'vertical-align:' + vAlign + ';';\n }\n }\n if (!isNullOrUndefined(styleObj.characterFormat.underline) && styleObj.characterFormat.underline !== 'None') {\n textDecoration += 'underline ';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.strikethrough) && styleObj.characterFormat.strikethrough !== 'None') {\n textDecoration += 'line-through ';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.fontSize)) {\n domStyle += 'font-size:' + styleObj.characterFormat.fontSize + 'px;';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.fontFamily)) {\n domStyle += 'font-family:' + styleObj.characterFormat.fontFamily + ';';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.bold) && styleObj.characterFormat.bold) {\n domStyle += 'font-weight:bold;';\n }\n if (!isNullOrUndefined(styleObj.characterFormat.italic) && styleObj.characterFormat.italic) {\n domStyle += 'font-style:italic;';\n }\n // if (!isNullOrUndefined(styleObj.characterFormat.fontColor)) {\n // domStyle += 'color: ' + styleObj.characterFormat.fontColor + ';';\n // }\n if (textDecoration.length > 1) {\n domStyle += 'text-decoration:' + textDecoration + ';';\n }\n return domStyle;\n };\n Paragraph.prototype.wireEvent = function () {\n var _this = this;\n this.leftAlignment.addEventListener('click', function () {\n _this.leftAlignmentAction();\n });\n this.rightAlignment.addEventListener('click', function () {\n _this.rightAlignmentAction();\n });\n this.centerAlignment.addEventListener('click', function () {\n _this.centerAlignmentAction();\n });\n this.justify.addEventListener('click', function () {\n _this.justifyAction();\n });\n this.increaseIndent.addEventListener('click', function () {\n _this.increaseIndentAction();\n });\n this.showHiddenMarks.addEventListener('click', function () {\n _this.container.documentEditorSettings.showHiddenMarks = !_this.container.documentEditorSettings.showHiddenMarks;\n _this.toggleHiddenMarks();\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n });\n this.decreaseIndent.addEventListener('click', function () {\n _this.decreaseIndentAction();\n });\n this.lineSpacing.addEventListener('select', function (args) {\n _this.lineSpacingAction(args);\n });\n this.borders.addEventListener('click', function () {\n _this.documentEditor.showBordersAndShadingDialog();\n });\n };\n Paragraph.prototype.unwireEvents = function () {\n this.leftAlignment.click = undefined;\n this.rightAlignment.click = undefined;\n this.centerAlignment.click = undefined;\n this.justify.click = undefined;\n this.increaseIndent.click = undefined;\n this.decreaseIndent.click = undefined;\n this.lineSpacing.select = undefined;\n this.style.select = undefined;\n };\n /**\n * @private\n */\n Paragraph.prototype.toggleHiddenMarks = function () {\n if (this.container.documentEditorSettings.showHiddenMarks) {\n classList(this.showHiddenMarks, ['e-btn-toggle'], []);\n this.showHiddenMarks.setAttribute('aria-pressed', 'true');\n }\n else {\n classList(this.showHiddenMarks, [], ['e-btn-toggle']);\n this.showHiddenMarks.setAttribute('aria-pressed', 'false');\n }\n };\n Paragraph.prototype.leftAlignmentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleTextAlignment('Left');\n this.documentEditor.focusIn();\n }\n };\n Paragraph.prototype.lineSpacingAction = function (args) {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n var text = args.item.text;\n switch (text) {\n case this.localObj.getConstant('Single'):\n this.documentEditor.selectionModule.paragraphFormat.lineSpacing = 1;\n break;\n case '1.15':\n this.documentEditor.selectionModule.paragraphFormat.lineSpacing = 1.15;\n break;\n case '1.5':\n this.documentEditor.selectionModule.paragraphFormat.lineSpacing = 1.5;\n break;\n case this.localObj.getConstant('Double'):\n this.documentEditor.selectionModule.paragraphFormat.lineSpacing = 2;\n break;\n }\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n };\n Paragraph.prototype.setLineSpacing = function () {\n var lineSpacing = this.documentEditor.selectionModule.paragraphFormat.lineSpacing;\n if (lineSpacing === 1) {\n this.appliedLineSpacing = this.localObj.getConstant('Single');\n }\n else if (lineSpacing === 1.15) {\n this.appliedLineSpacing = '1.15';\n }\n else if (lineSpacing === 1.5) {\n this.appliedLineSpacing = '1.5';\n }\n else if (lineSpacing === 2) {\n this.appliedLineSpacing = this.localObj.getConstant('Double');\n }\n else {\n this.appliedLineSpacing = '';\n }\n };\n Paragraph.prototype.selectStyleValue = function (args) {\n var _this = this;\n var treeViewResult = document.getElementById(this.documentEditor.containerId + '_treeDiv');\n if (!isNullOrUndefined(treeViewResult) && !isNullOrUndefined(this.documentEditor.optionsPaneModule) && this.documentEditor.optionsPaneModule.isOptionsPaneShow) {\n treeViewResult.innerHTML = '';\n this.documentEditor.optionsPaneModule.data = this.documentEditor.optionsPaneModule.dataForTreeview();\n this.documentEditor.optionsPaneModule.initHeadingTab();\n }\n if (this.isRetrieving || !args.isInteracted) {\n return;\n }\n setTimeout(function () {\n _this.applyStyleValue(args);\n }, 10);\n };\n Paragraph.prototype.applyStyleValue = function (args) {\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n var styleName = this.documentEditor.stylesDialogModule.getStyleName(SanitizeHtmlHelper.sanitize(args.itemData.StyleName));\n if (!isNullOrUndefined(this.documentEditor.documentHelper.styles.findByName(styleName))) {\n this.documentEditor.editorModule.applyStyle(styleName, true);\n var treeViewResult = document.getElementById(this.documentEditor.containerId + '_treeDiv');\n if (!isNullOrUndefined(treeViewResult) && !isNullOrUndefined(this.documentEditor.optionsPaneModule) && this.documentEditor.optionsPaneModule.isOptionsPaneShow) {\n treeViewResult.innerHTML = '';\n this.documentEditor.optionsPaneModule.data = this.documentEditor.optionsPaneModule.dataForTreeview();\n this.documentEditor.optionsPaneModule.initHeadingTab();\n }\n }\n }\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n Paragraph.prototype.rightAlignmentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleTextAlignment('Right');\n this.documentEditor.focusIn();\n }\n };\n Paragraph.prototype.centerAlignmentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleTextAlignment('Center');\n this.documentEditor.focusIn();\n }\n };\n Paragraph.prototype.justifyAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.toggleTextAlignment('Justify');\n this.documentEditor.focusIn();\n }\n };\n Paragraph.prototype.increaseIndentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.increaseIndent();\n this.documentEditor.focusIn();\n }\n };\n Paragraph.prototype.decreaseIndentAction = function () {\n if (this.isRetrieving) {\n return;\n }\n if (!this.documentEditor.isReadOnly && this.documentEditor.editorModule) {\n this.documentEditor.editorModule.decreaseIndent();\n this.documentEditor.focusIn();\n }\n };\n Paragraph.prototype.numberedNoneClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.documentEditor.editorModule.clearList();\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedNumberDotClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedNumberingStyle = 'arabic';\n this.documentEditor.editorModule.applyNumbering(this.getLevelFormatNumber(), 'Arabic');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedUpRomanClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedNumberingStyle = 'uproman';\n this.documentEditor.editorModule.applyNumbering(this.getLevelFormatNumber(), 'UpRoman');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedUpLetterClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedNumberingStyle = 'upletter';\n this.documentEditor.editorModule.applyNumbering(this.getLevelFormatNumber(), 'UpLetter');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedLowLetterClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedNumberingStyle = 'lowletter';\n this.documentEditor.editorModule.applyNumbering(this.getLevelFormatNumber(), 'LowLetter');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.numberedLowRomanClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedNumberingStyle = 'lowroman';\n this.documentEditor.editorModule.applyNumbering(this.getLevelFormatNumber(), 'LowRoman');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.getLevelFormatNumber = function () {\n var numberFormat = '%';\n numberFormat = numberFormat + (((this.documentEditor.selectionModule.paragraphFormat.listLevelNumber <= 0) ? 0 : this.documentEditor.selectionModule.paragraphFormat.listLevelNumber) + 1) + '.';\n return numberFormat;\n };\n Paragraph.prototype.bulletDotClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedBulletStyle = 'dot';\n this.documentEditor.editorModule.applyBullet(String.fromCharCode(61623), 'Symbol');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletCircleClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedBulletStyle = 'circle';\n this.documentEditor.editorModule.applyBullet(String.fromCharCode(61551) + String.fromCharCode(32), 'Symbol');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletSquareClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedBulletStyle = 'square';\n this.documentEditor.editorModule.applyBullet(String.fromCharCode(61607), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletFlowerClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedBulletStyle = 'flower';\n this.documentEditor.editorModule.applyBullet(String.fromCharCode(61558), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletArrowClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedBulletStyle = 'arrow';\n this.documentEditor.editorModule.applyBullet(String.fromCharCode(61656), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.bulletTickClick = function () {\n var _this = this;\n if (this.isRetrieving) {\n return;\n }\n if (this.documentEditor.editorModule) {\n this.appliedBulletStyle = 'tick';\n this.documentEditor.editorModule.applyBullet(String.fromCharCode(61692), 'Wingdings');\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n }\n };\n Paragraph.prototype.onSelectionChange = function () {\n this.isRetrieving = true;\n if (this.documentEditor.editorModule) {\n //#region paragraph format\n var style = this.documentEditor.selectionModule.characterFormat.styleName;\n if (this.documentEditor.selectionModule.characterFormat.styleName === \"Default Paragraph Font\") {\n style = this.documentEditor.selectionModule.paragraphFormat.styleName;\n }\n if (style) {\n var localeValue = this.localObj.getConstant(style);\n this.style.value = (isNullOrUndefined(localeValue) || localeValue == '') ? style : localeValue;\n // this.style.dataBind();\n }\n else {\n this.style.value = null;\n }\n classList(this.leftAlignment, [], ['e-btn-toggle']);\n classList(this.rightAlignment, [], ['e-btn-toggle']);\n classList(this.centerAlignment, [], ['e-btn-toggle']);\n classList(this.justify, [], ['e-btn-toggle']);\n if (this.documentEditor.selectionModule.paragraphFormat.textAlignment === 'Left') {\n classList(this.leftAlignment, ['e-btn-toggle'], []);\n this.leftAlignment.setAttribute('aria-pressed', 'true');\n this.rightAlignment.setAttribute('aria-pressed', 'false');\n this.centerAlignment.setAttribute('aria-pressed', 'false');\n this.justify.setAttribute('aria-pressed', 'false');\n }\n else if (this.documentEditor.selectionModule.paragraphFormat.textAlignment === 'Right') {\n classList(this.rightAlignment, ['e-btn-toggle'], []);\n this.leftAlignment.setAttribute('aria-pressed', 'false');\n this.rightAlignment.setAttribute('aria-pressed', 'true');\n this.centerAlignment.setAttribute('aria-pressed', 'false');\n this.justify.setAttribute('aria-pressed', 'false');\n }\n else if (this.documentEditor.selectionModule.paragraphFormat.textAlignment === 'Center') {\n classList(this.centerAlignment, ['e-btn-toggle'], []);\n this.leftAlignment.setAttribute('aria-pressed', 'false');\n this.rightAlignment.setAttribute('aria-pressed', 'false');\n this.centerAlignment.setAttribute('aria-pressed', 'true');\n this.justify.setAttribute('aria-pressed', 'false');\n }\n else if (this.documentEditor.selectionModule.paragraphFormat.textAlignment === 'Justify') {\n classList(this.justify, ['e-btn-toggle'], []);\n this.leftAlignment.setAttribute('aria-pressed', 'false');\n this.rightAlignment.setAttribute('aria-pressed', 'false');\n this.centerAlignment.setAttribute('aria-pressed', 'false');\n this.justify.setAttribute('aria-pressed', 'true');\n }\n this.toggleHiddenMarks();\n }\n this.setLineSpacing();\n this.isRetrieving = false;\n };\n Paragraph.prototype.destroy = function () {\n this.container = undefined;\n if (this.lineSpacing) {\n this.lineSpacing.destroy();\n this.lineSpacing = undefined;\n }\n if (this.style) {\n this.style.destroy();\n this.style = undefined;\n }\n if (this.bulletListBtn) {\n this.bulletListBtn.destroy();\n this.bulletListBtn = undefined;\n }\n if (this.numberedListBtn) {\n this.numberedListBtn.destroy();\n this.numberedListBtn = undefined;\n }\n if (this.leftAlignmentBtn) {\n this.leftAlignmentBtn.destroy();\n this.leftAlignmentBtn = undefined;\n }\n if (this.rightAlignmentBtn) {\n this.rightAlignmentBtn.destroy();\n this.rightAlignmentBtn = undefined;\n }\n if (this.centerAlignmentBtn) {\n this.centerAlignmentBtn.destroy();\n this.centerAlignmentBtn = undefined;\n }\n if (this.showHiddenMarksBtn) {\n this.showHiddenMarksBtn.destroy();\n this.showHiddenMarksBtn = undefined;\n }\n if (this.justifyBtn) {\n this.justifyBtn.destroy();\n this.justifyBtn = undefined;\n }\n if (this.decreaseIndentBtn) {\n this.decreaseIndentBtn.destroy();\n this.decreaseIndentBtn = undefined;\n }\n if (this.increaseIndentBtn) {\n this.increaseIndentBtn.destroy();\n this.increaseIndentBtn = undefined;\n }\n if (this.bordersBtn) {\n this.bordersBtn.destroy();\n this.bordersBtn = undefined;\n }\n if (this.showHiddenMarksBtn) {\n this.showHiddenMarksBtn.destroy();\n this.showHiddenMarksBtn = undefined;\n }\n };\n return Paragraph;\n}());\nexport { Paragraph };\n","import { createElement, classList } from '@syncfusion/ej2-base';\nimport { Text } from './text-properties';\nimport { Paragraph } from './paragraph-properties';\n/**\n * Text Properties pane\n *\n * @private\n */\nvar TextProperties = /** @class */ (function () {\n /**\n * Initialize the Text properties pane.\n *\n * @param {DocumentEditorContainer} container DocumentEditorContainer instance.\n * @param {string} id Identifier element reference.\n * @param {boolean} isTableProperties Specified if text properties is inside the text properties.\n * @param {boolean} isRtl Specifies the RTL layout.\n */\n function TextProperties(container, id, isTableProperties, isRtl) {\n this.isInitial = true;\n this.container = container;\n this.text = new Text(container, isRtl);\n this.paragraph = new Paragraph(container);\n this.initializeTextProperties(id, isTableProperties, isRtl);\n this.wireEvents();\n }\n Object.defineProperty(TextProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n TextProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n TextProperties.prototype.updateStyles = function () {\n this.paragraph.updateStyleNames();\n };\n Object.defineProperty(TextProperties.prototype, \"appliedHighlightColor\", {\n get: function () {\n return this.text.appliedHighlightColor;\n },\n set: function (value) {\n this.text.appliedHighlightColor = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextProperties.prototype, \"appliedBulletStyle\", {\n get: function () {\n return this.paragraph.appliedBulletStyle;\n },\n set: function (value) {\n this.paragraph.appliedBulletStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TextProperties.prototype, \"appliedNumberingStyle\", {\n get: function () {\n return this.paragraph.appliedNumberingStyle;\n },\n set: function (value) {\n this.paragraph.appliedNumberingStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n TextProperties.prototype.showTextProperties = function (isShow) {\n if (isShow) {\n this.onSelectionChange();\n }\n if (!isShow && this.element.style.display === 'none' || (isShow && this.element.style.display === 'block')) {\n return;\n }\n this.element.style.display = isShow ? 'block' : 'none';\n this.documentEditor.resize();\n };\n TextProperties.prototype.initializeTextProperties = function (id, isTableProperties, isRtl) {\n this.element = createElement('div', { className: 'e-de-prop-pane e-de-scrollbar-hide' });\n this.element.setAttribute('tabindex', '0');\n this.text.initializeTextPropertiesDiv(this.element, isRtl);\n this.paragraph.initializeParagraphPropertiesDiv(this.element, isRtl);\n this.paragraph.updateStyleNames();\n if (!isTableProperties) {\n this.container.propertiesPaneContainer.appendChild(this.element);\n }\n };\n TextProperties.prototype.generateUniqueID = function () {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n };\n TextProperties.prototype.wireEvents = function () {\n this.text.wireEvent();\n this.paragraph.wireEvent();\n };\n TextProperties.prototype.onSelectionChange = function () {\n this.text.onSelectionChange();\n this.paragraph.onSelectionChange();\n };\n TextProperties.prototype.destroy = function () {\n if (this.text) {\n this.text.destroy();\n this.text = undefined;\n }\n if (this.paragraph) {\n this.paragraph.destroy();\n this.paragraph = undefined;\n }\n this.container = undefined;\n };\n return TextProperties;\n}());\nexport { TextProperties };\n","import { createElement, classList, L10n } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { TextProperties } from './text-properties-pane';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { NumericTextBox, ColorPicker } from '@syncfusion/ej2-inputs';\n/**\n * Represents table properties\n *\n * @private\n */\nvar TableProperties = /** @class */ (function () {\n /* eslint-disable-next-line max-len */\n function TableProperties(container, imageProperty, isRtl) {\n this.isTopMarginApply = false;\n this.isRightMarginApply = false;\n this.isBottomMarginApply = false;\n this.isLeftMarginApply = false;\n this.borderColor = '#000000';\n this.groupButtonClass = 'e-de-ctnr-group-btn e-btn-group';\n this.container = container;\n this.isRtl = isRtl;\n if (this.isRtl) {\n this.groupButtonClass = 'e-rtl ' + this.groupButtonClass;\n }\n this.tableTextProperties = new TextProperties(container, 'textProperties', true, this.isRtl);\n this.imageProperty = imageProperty;\n this.elementId = this.documentEditor.element.id;\n this.initializeTablePropPane();\n this.prevContext = this.documentEditor.selectionModule.contextType;\n }\n Object.defineProperty(TableProperties.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n TableProperties.prototype.initializeTablePropPane = function () {\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n this.tableProperties = createElement('div', { className: 'e-de-scrollbar-hide', styles: 'overflow: auto' });\n this.initFillColorDiv();\n this.initBorderStylesDiv();\n this.initCellDiv();\n this.initInsertOrDelCell();\n this.initCellMargin();\n this.initAlignText();\n this.addTablePropertyTab();\n // wire fnt property\n this.wireEvent();\n };\n /**\n * @private\n * @param {boolean} enable - enable/disable table properties pane.\n * @returns {void}\n */\n TableProperties.prototype.enableDisableElements = function (enable) {\n if (enable) {\n classList(this.element, [], ['e-de-overlay']);\n }\n else {\n classList(this.element, ['e-de-overlay'], []);\n }\n };\n TableProperties.prototype.addTablePropertyTab = function () {\n var tableHeader = createElement('div', { innerHTML: this.localObj.getConstant('Table') });\n var textHeader = createElement('div', { innerHTML: this.localObj.getConstant('Text') });\n this.parentElement = createElement('div', { styles: 'height:100%;overflow:auto;display:none', className: 'e-de-prop-pane e-de-scrollbar-hide' });\n this.element = createElement('div', { id: this.elementId + '_propertyTabDiv', className: 'e-de-property-tab' });\n /* eslint-disable-next-line max-len */\n var items = [{ header: { text: textHeader }, content: this.tableTextProperties.element }, { header: { text: tableHeader }, content: this.tableProperties }];\n this.propertiesTab = new Tab({ items: items, animation: { previous: { effect: 'None' }, next: { effect: 'None' } }, selected: this.onTabSelection.bind(this) });\n this.propertiesTab.isStringTemplate = true;\n this.propertiesTab.appendTo(this.element);\n this.parentElement.appendChild(this.element);\n this.container.propertiesPaneContainer.appendChild(this.parentElement);\n };\n TableProperties.prototype.onTabSelection = function (args) {\n args.preventFocus = true;\n this.documentEditor.resize();\n if (this.documentEditor.enableAutoFocus) {\n this.documentEditor.focusIn();\n }\n };\n TableProperties.prototype.wireEvent = function () {\n var _this = this;\n this.shadingBtn.addEventListener('change', this.changeBackgroundColor.bind(this));\n this.borderBtn.addEventListener('change', function (args) {\n setTimeout(function () {\n _this.borderColor = args.currentValue.hex;\n _this.tableOutlineBorder.element.focus();\n }, 10);\n });\n this.tableOutlineBorder.element.addEventListener('click', this.onOutlineBorder.bind(this));\n this.tableAllBorder.element.addEventListener('click', this.onAllBorder.bind(this));\n this.tableCenterBorder.element.addEventListener('click', this.onInsideBorder.bind(this));\n this.tableLeftBorder.element.addEventListener('click', this.onLeftBorder.bind(this));\n this.tableCenterVerticalBorder.element.addEventListener('click', this.onVerticalBorder.bind(this));\n this.tableRightBorder.element.addEventListener('click', this.onRightBorder.bind(this));\n this.tableTopBorder.element.addEventListener('click', this.onTopBorder.bind(this));\n this.tableCenterHorizontalBorder.element.addEventListener('click', this.onHorizontalBorder.bind(this));\n this.tableBottomBorder.element.addEventListener('click', this.onBottomBorder.bind(this));\n this.insertRowAbove.element.addEventListener('click', this.onInsertRowAbove.bind(this));\n this.insertRowBelow.element.addEventListener('click', this.onInsertRowBelow.bind(this));\n this.insertColumnLeft.element.addEventListener('click', this.onInsertColumnLeft.bind(this));\n this.insertColumnRight.element.addEventListener('click', this.onInsertColumnRight.bind(this));\n this.deleteRow.element.addEventListener('click', this.onDeleteRow.bind(this));\n this.deleteColumn.element.addEventListener('click', this.onDeleteColumn.bind(this));\n this.horizontalMerge.element.addEventListener('click', this.onMergeCell.bind(this));\n this.alignTop.element.addEventListener('click', this.applyAlignTop.bind(this));\n this.alignBottom.element.addEventListener('click', this.applyAlignBottom.bind(this));\n this.alignCenterHorizontal.element.addEventListener('click', this.applyAlignCenterHorizontal.bind(this));\n this.topMargin.htmlAttributes = { 'aria-label': 'top-margin' };\n this.bottomMargin.htmlAttributes = { 'aria-label': 'bottom-margin' };\n this.leftMargin.htmlAttributes = { 'aria-label': 'left-margin' };\n this.rightMargin.htmlAttributes = { 'aria-label': 'right-Margin' };\n this.topMargin.element.addEventListener('click', function () {\n _this.isTopMarginApply = true;\n });\n this.rightMargin.element.addEventListener('click', function () {\n _this.isRightMarginApply = true;\n });\n this.leftMargin.element.addEventListener('click', function () {\n _this.isLeftMarginApply = true;\n });\n this.bottomMargin.element.addEventListener('click', function () {\n _this.isBottomMarginApply = true;\n });\n this.topMargin.element.addEventListener('keydown', this.onTopMargin.bind(this));\n this.rightMargin.element.addEventListener('keydown', this.onRightMargin.bind(this));\n this.leftMargin.element.addEventListener('keydown', this.onLeftMargin.bind(this));\n this.bottomMargin.element.addEventListener('keydown', this.onBottomMargin.bind(this));\n this.topMargin.element.addEventListener('blur', function () {\n _this.applyTopMargin();\n _this.isTopMarginApply = false;\n });\n this.rightMargin.element.addEventListener('blur', function () {\n _this.applyRightMargin();\n _this.isRightMarginApply = false;\n });\n this.leftMargin.element.addEventListener('blur', function () {\n _this.applyLeftMargin();\n _this.isLeftMarginApply = false;\n });\n this.bottomMargin.element.addEventListener('blur', function () {\n _this.applyBottomMargin();\n _this.isBottomMarginApply = false;\n });\n };\n TableProperties.prototype.getBorder = function (border) {\n var lineWidth = (this.borderSize.content.indexOf('No Border') >= 0) ? 0 : parseFloat(this.borderSize.content);\n var linestyle = (lineWidth === 0) ? 'Cleared' : 'Single';\n var borderSettings = {\n type: border,\n borderColor: this.borderColor,\n lineWidth: lineWidth,\n borderStyle: linestyle\n };\n return borderSettings;\n };\n TableProperties.prototype.onOutlineBorder = function () {\n this.documentEditor.editorModule.applyBorders(this.getBorder('OutsideBorders'));\n };\n TableProperties.prototype.onAllBorder = function () {\n this.documentEditor.editorModule.applyBorders(this.getBorder('AllBorders'));\n };\n TableProperties.prototype.onInsideBorder = function () {\n this.documentEditor.editorModule.applyBorders(this.getBorder('InsideBorders'));\n };\n TableProperties.prototype.onLeftBorder = function () {\n this.documentEditor.editorModule.applyBorders(this.getBorder('LeftBorder'));\n };\n TableProperties.prototype.onVerticalBorder = function () {\n this.documentEditor.editorModule.applyBorders(this.getBorder('InsideVerticalBorder'));\n };\n TableProperties.prototype.onRightBorder = function () {\n this.documentEditor.editorModule.applyBorders(this.getBorder('RightBorder'));\n };\n TableProperties.prototype.onTopBorder = function () {\n this.documentEditor.editorModule.applyBorders(this.getBorder('TopBorder'));\n };\n TableProperties.prototype.onHorizontalBorder = function () {\n this.documentEditor.editorModule.applyBorders(this.getBorder('InsideHorizontalBorder'));\n };\n TableProperties.prototype.onBottomBorder = function () {\n this.documentEditor.editorModule.applyBorders(this.getBorder('BottomBorder'));\n };\n TableProperties.prototype.onTopMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyTopMargin();\n _this.isTopMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.onBottomMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyBottomMargin();\n _this.isBottomMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.onLeftMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyLeftMargin();\n _this.isLeftMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.onRightMargin = function (e) {\n var _this = this;\n if (e.keyCode === 13) {\n setTimeout(function () {\n _this.applyRightMargin();\n _this.isRightMarginApply = false;\n }, 30);\n }\n };\n TableProperties.prototype.applyTopMargin = function () {\n if (!this.isTopMarginApply) {\n return;\n }\n this.documentEditor.selectionModule.cellFormat.topMargin = (this.topMargin.value > this.topMargin.max)\n ? this.topMargin.max : this.topMargin.value;\n };\n TableProperties.prototype.applyBottomMargin = function () {\n if (!this.isBottomMarginApply) {\n return;\n }\n this.documentEditor.selectionModule.cellFormat.bottomMargin = (this.bottomMargin.value > this.bottomMargin.max)\n ? this.bottomMargin.max : this.bottomMargin.value;\n };\n TableProperties.prototype.applyLeftMargin = function () {\n if (!this.isLeftMarginApply) {\n return;\n }\n this.documentEditor.selectionModule.cellFormat.leftMargin = (this.leftMargin.value > this.leftMargin.max)\n ? this.leftMargin.max : this.leftMargin.value;\n };\n TableProperties.prototype.applyRightMargin = function () {\n if (!this.isRightMarginApply) {\n return;\n }\n this.documentEditor.selectionModule.cellFormat.rightMargin = (this.rightMargin.value > this.rightMargin.max)\n ? this.rightMargin.max : this.rightMargin.value;\n };\n TableProperties.prototype.applyAlignTop = function () {\n this.documentEditor.selectionModule.cellFormat.verticalAlignment = 'Top';\n };\n TableProperties.prototype.applyAlignBottom = function () {\n this.documentEditor.selectionModule.cellFormat.verticalAlignment = 'Bottom';\n };\n TableProperties.prototype.applyAlignCenterHorizontal = function () {\n this.documentEditor.selectionModule.cellFormat.verticalAlignment = 'Center';\n };\n TableProperties.prototype.onMergeCell = function () {\n this.documentEditor.editorModule.mergeCells();\n };\n TableProperties.prototype.onInsertRowAbove = function () {\n this.documentEditor.editorModule.insertRow(true);\n };\n TableProperties.prototype.onInsertRowBelow = function () {\n this.documentEditor.editorModule.insertRow(false);\n };\n TableProperties.prototype.onInsertColumnLeft = function () {\n this.documentEditor.editorModule.insertColumn(true);\n };\n TableProperties.prototype.onInsertColumnRight = function () {\n this.documentEditor.editorModule.insertColumn(false);\n };\n TableProperties.prototype.onDeleteRow = function () {\n this.documentEditor.editorModule.deleteRow();\n this.documentEditor.focusIn();\n };\n TableProperties.prototype.onDeleteColumn = function () {\n this.documentEditor.editorModule.deleteColumn();\n this.documentEditor.focusIn();\n };\n TableProperties.prototype.onSelectionChange = function () {\n if (this.documentEditor.selectionModule) {\n if (this.documentEditor.editorModule && this.documentEditor.editorModule.canMergeCells()) {\n this.horizontalMerge.disabled = false;\n }\n else {\n this.horizontalMerge.disabled = true;\n }\n if (this.documentEditor.selectionModule.contextType === 'TableText' || this.documentEditor.selectionModule.contextType === 'TableImage') {\n this.shadingBtn.value = this.documentEditor.selectionModule.cellFormat.background ? this.documentEditor.selectionModule.cellFormat.background : '';\n }\n /* eslint-disable-next-line max-len */\n this.topMargin.value = this.documentEditor.selectionModule.cellFormat.topMargin ? this.documentEditor.selectionModule.cellFormat.topMargin : 0;\n /* eslint-disable-next-line max-len */\n this.bottomMargin.value = this.documentEditor.selectionModule.cellFormat.bottomMargin ? this.documentEditor.selectionModule.cellFormat.bottomMargin : 0;\n /* eslint-disable-next-line max-len */\n this.rightMargin.value = this.documentEditor.selectionModule.cellFormat.rightMargin ? this.documentEditor.selectionModule.cellFormat.rightMargin : 0;\n /* eslint-disable-next-line max-len */\n this.leftMargin.value = this.documentEditor.selectionModule.cellFormat.leftMargin ? this.documentEditor.selectionModule.cellFormat.leftMargin : 0;\n }\n };\n TableProperties.prototype.changeBackgroundColor = function (args) {\n var _this = this;\n if (!this.documentEditor.isReadOnly) {\n //Handle API for shading.\n this.documentEditor.selectionModule.cellFormat.background = args.currentValue.hex;\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 10);\n }\n };\n TableProperties.prototype.initFillColorDiv = function () {\n var fillDiv = createElement('div', { id: this.elementId + '_fillColorDiv', className: 'e-de-property-div-padding de-tbl-fill-clr' });\n this.tableProperties.appendChild(fillDiv);\n var label = createElement('label', { className: 'e-de-prop-sub-label' });\n label.classList.add('e-de-prop-fill-label');\n if (this.isRtl) {\n label.classList.add('e-de-rtl');\n }\n label.textContent = this.localObj.getConstant('Fill');\n fillDiv.appendChild(label);\n // const buttonStyle: string = 'width:92px;display:inline-flex;padding:3px';\n this.shadingBtn = this.createColorPickerTemplate(this.elementId + '_tableShading', fillDiv, this.localObj.getConstant('Fill color'), false);\n classList(fillDiv.lastElementChild.lastElementChild.lastElementChild.firstChild, ['e-de-ctnr-cellbg-clr-picker'], ['e-caret']);\n this.documentEditor.documentHelper.shadingBtn = this.shadingBtn;\n };\n TableProperties.prototype.initBorderStylesDiv = function () {\n var borderStyleDiv = createElement('div', { className: 'e-de-property-div-padding' });\n this.tableProperties.appendChild(borderStyleDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Border Style');\n borderStyleDiv.appendChild(label);\n var parentDiv = createElement('div', { styles: 'display:inline-flex;' });\n var styleDiv = createElement('div', { styles: 'width:min-content;height:126px', className: 'e-de-grp-btn-ctnr' });\n var div1 = createElement('div', { className: this.groupButtonClass + ' e-de-ctnr-group-btn-top' });\n styleDiv.appendChild(div1);\n var div2 = createElement('div', { className: this.groupButtonClass + ' e-de-ctnr-group-btn-middle' });\n styleDiv.appendChild(div2);\n var div3 = createElement('div', { className: this.groupButtonClass + ' e-de-ctnr-group-btn-bottom' });\n styleDiv.appendChild(div3);\n if (this.isRtl) {\n div1.classList.add('e-de-rtl');\n div3.classList.add('e-de-rtl');\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n var btnStyle = '';\n this.tableOutlineBorder = this.createButtonTemplate(this.elementId + '_tableOutlineBorder', 'e-de-ctnr-outsideborder e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Outside borders'));\n this.tableAllBorder = this.createButtonTemplate(this.elementId + '_tableAllBorder', 'e-de-ctnr-allborders e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('All borders'));\n this.tableCenterBorder = this.createButtonTemplate(this.elementId + '_tableCenterBorder', 'e-de-ctnr-insideborders e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Inside borders'));\n this.tableLeftBorder = this.createButtonTemplate(this.elementId + '_tableLeftBorder', 'e-de-ctnr-leftborders e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Left border'));\n this.tableCenterVerticalBorder = this.createButtonTemplate(this.elementId + '_tableCenterVBorder', 'e-de-ctnr-insideverticalborder e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Inside vertical border'));\n this.tableRightBorder = this.createButtonTemplate(this.elementId + '_tableRightBorder', 'e-de-ctnr-rightborder e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Right border'));\n this.tableTopBorder = this.createButtonTemplate(this.elementId + '_tableTopBorder', 'e-de-ctnr-topborder e-icons', div3, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Top border'));\n this.tableCenterHorizontalBorder = this.createButtonTemplate(this.elementId + '_tableCenterHBorder', 'e-de-ctnr-insidehorizondalborder e-icons', div3, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Inside horizontal border'));\n this.tableBottomBorder = this.createButtonTemplate(this.elementId + '_tableBottomBorder', 'e-de-ctnr-bottomborder e-icons', div3, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Bottom border'));\n parentDiv.appendChild(styleDiv);\n var styleTypeDiv = createElement('div', { className: 'de-tbl-fill-clr' });\n if (!this.isRtl) {\n styleTypeDiv.classList.add('e-de-stylediv');\n }\n else {\n styleTypeDiv.classList.add('e-de-stylediv-rtl');\n }\n this.borderBtn = this.createColorPickerTemplate(this.elementId + '_tableBorderColor', styleTypeDiv, this.localObj.getConstant('Border color'), true);\n this.documentEditor.documentHelper.borderBtn = this.borderBtn;\n this.borderBtn.value = '#000000';\n styleTypeDiv.firstElementChild.lastElementChild.lastElementChild.style.width = '30px';\n styleTypeDiv.firstElementChild.lastElementChild.firstElementChild.firstElementChild.style.width = '100%';\n classList(styleTypeDiv.lastElementChild.lastElementChild.lastElementChild.firstChild, ['e-de-ctnr-highlightcolor'], ['e-caret']);\n var borderSizeButton = createElement('button', { id: this.elementId + '_tableBorderSize', className: 'e-de-border-size-button', styles: 'font-size:10px;padding:0px;', attrs: { type: 'button' } });\n styleTypeDiv.appendChild(borderSizeButton);\n this.borderSize = this.createBorderSizeDropDown('e-de-ctnr-strokesize e-icons', borderSizeButton);\n parentDiv.appendChild(styleTypeDiv);\n this.borderSizeColorElement = document.getElementsByClassName('e-de-border-width');\n borderStyleDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initCellDiv = function () {\n var cellDiv = createElement('div', { className: 'e-de-property-div-padding' });\n this.tableProperties.appendChild(cellDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Cell');\n cellDiv.appendChild(label);\n var parentDiv = createElement('div', { className: 'e-de-ctnr-group-btn' });\n parentDiv.classList.add('e-de-cell-div');\n if (this.isRtl) {\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n var btnStyle = '';\n this.horizontalMerge = this.createButtonTemplate(this.elementId + '_tableOutlineBorder', 'e-de-ctnr-mergecell e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Merge cells'));\n //this.verticalMerge = this.createButtonTemplate(this.elementId + '_tableAllBorder', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Vertical Merge');\n cellDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initInsertOrDelCell = function () {\n var tableOperationDiv = createElement('div', { className: 'e-de-property-div-padding' });\n this.tableProperties.appendChild(tableOperationDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Insert Or Delete');\n tableOperationDiv.appendChild(label);\n var parentDiv = createElement('div', { className: 'e-de-insert-del-cell', styles: 'display:inline-flex' });\n var div1 = createElement('div', { className: this.groupButtonClass });\n parentDiv.appendChild(div1);\n var div2 = createElement('div', { className: this.groupButtonClass });\n if (!this.isRtl) {\n div2.style.marginLeft = '12px';\n }\n else {\n div2.style.marginRight = '12px';\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n parentDiv.appendChild(div2);\n var btnStyle = '';\n this.insertColumnLeft = this.createButtonTemplate(this.elementId + '_insertColumnLeft', 'e-de-ctnr-insertleft e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert columns to the left'));\n this.insertColumnRight = this.createButtonTemplate(this.elementId + '_insertColumnRight', 'e-de-ctnr-insertright e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert columns to the right'));\n this.insertRowAbove = this.createButtonTemplate(this.elementId + '_insertRowAbove', 'e-de-ctnr-insertabove e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert rows above'));\n this.insertRowBelow = this.createButtonTemplate(this.elementId + '_insertRowBelow', 'e-de-ctnr-insertbelow e-icons', div1, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Insert rows below'));\n this.deleteRow = this.createButtonTemplate(this.elementId + '_deleteRow', 'e-de-ctnr-deleterows e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Delete rows'));\n this.deleteColumn = this.createButtonTemplate(this.elementId + '_deleteColumn', 'e-de-ctnr-deletecolumns e-icons', div2, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Delete columns'));\n tableOperationDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initCellMargin = function () {\n var cellMarginDiv = createElement('div', { className: 'e-de-property-div-padding e-de-cellmargin-text' });\n this.tableProperties.appendChild(cellMarginDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Cell Margin');\n cellMarginDiv.appendChild(label);\n var parentDiv = createElement('div', { styles: 'display:inline-flex' });\n if (this.isRtl) {\n label.classList.add('e-de-rtl');\n }\n var textboxDivStyle = 'width:' + 48 + 'px';\n var textboxParentDivStyle = 'width:' + 50 + 'px;float:left;';\n this.topMargin = this.createCellMarginTextBox(this.localObj.getConstant('Top'), this.elementId + '_topMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Top margin'));\n this.bottomMargin = this.createCellMarginTextBox(this.localObj.getConstant('Bottom'), this.elementId + '_bottomMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Bottom margin'));\n this.leftMargin = this.createCellMarginTextBox(this.localObj.getConstant('Left'), this.elementId + '_leftMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Left margin'));\n this.rightMargin = this.createCellMarginTextBox(this.localObj.getConstant('Right'), this.elementId + '_rightMargin', parentDiv, textboxDivStyle, textboxParentDivStyle, 500, this.localObj.getConstant('Right margin'), true);\n cellMarginDiv.appendChild(parentDiv);\n };\n TableProperties.prototype.initAlignText = function () {\n var alignmentDiv = createElement('div', { className: 'e-de-property-div-padding', styles: 'border-bottom-width:0px' });\n this.tableProperties.appendChild(alignmentDiv);\n var label = createElement('label', { className: 'e-de-ctnr-prop-label' });\n //label.classList.add('e-de-table-prop-label');\n label.textContent = this.localObj.getConstant('Align Text');\n alignmentDiv.appendChild(label);\n var parentDiv = createElement('div');\n if (this.isRtl) {\n parentDiv.classList.add('e-de-rtl');\n label.classList.add('e-de-rtl');\n }\n var div = createElement('div', { className: this.groupButtonClass });\n parentDiv.appendChild(div);\n var btnStyle = '';\n this.alignTop = this.createButtonTemplate(this.elementId + '_alignTop', 'e-de-ctnr-aligntop e-icons', div, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Align top'));\n // this.alignCenterVertical = this.createButtonTemplate(this.elementId + '_alignCenterVertical', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Align Center Vertical');\n // this.alignRight = this.createButtonTemplate(this.elementId + '_alignRight', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Align Right');\n this.alignBottom = this.createButtonTemplate(this.elementId + '_alignBottom', 'e-de-ctnr-alignbottom e-icons', div, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Align bottom'));\n // this.alignCenterHorizontal = this.createButtonTemplate(this.elementId + '_alignCenterHorizontal', 'e-de-icon-merge-column e-icons', parentDiv, 'e-de-prop-font-button', btnStyle, 'Align Center Horizontal');\n this.alignCenterHorizontal = this.createButtonTemplate(this.elementId + '_alignCenterHorizontal', 'e-de-ctnr-aligncenter-table e-icons', div, 'e-de-prop-font-button', btnStyle, this.localObj.getConstant('Align center'));\n this.alignCenterHorizontal.addEventListener('click', this.applyAlignCenterHorizontal.bind(this));\n alignmentDiv.appendChild(parentDiv);\n };\n /* eslint-disable-next-line max-len */\n TableProperties.prototype.createCellMarginTextBox = function (textboxLabel, textboxId, parentDiv, styles, parentStyle, maxValue, toolTipText, isRight) {\n var cellMarginParentDiv = createElement('div', { styles: parentStyle });\n if (!isRight) {\n cellMarginParentDiv.classList.add('e-de-cell-text-box');\n }\n var cellMarginLabel = createElement('label', { className: 'e-de-prop-sub-label' });\n cellMarginLabel.textContent = textboxLabel;\n cellMarginParentDiv.appendChild(cellMarginLabel);\n var cellMarginTextbox = createElement('input', { className: 'e-textbox', id: textboxId, styles: styles });\n cellMarginParentDiv.appendChild(cellMarginTextbox);\n var cellMarginNumericText = new NumericTextBox({ showSpinButton: false, min: 0, format: 'n0', max: maxValue, enableRtl: this.isRtl }, cellMarginTextbox);\n parentDiv.appendChild(cellMarginParentDiv);\n cellMarginTextbox.setAttribute('title', toolTipText);\n return cellMarginNumericText;\n };\n TableProperties.prototype.createBorderSizeDropDown = function (iconcss, button) {\n var _this = this;\n var div = createElement('div', { id: 'borderSizeTarget', styles: 'display:none' });\n var ulTag = createElement('ul', {\n styles: 'display: block; outline: 0px; width: 126px; height: auto;',\n id: 'borderSizeListMenu'\n });\n div.appendChild(ulTag);\n var noneOption = this.createDropdownOption(ulTag, this.localObj.getConstant('No Border'));\n noneOption.addEventListener('click', function () {\n _this.onBorderSizeChange('No Border');\n });\n var pixel = this.localObj.getConstant('px');\n var quaterOption = this.createDropdownOption(ulTag, '.25' + pixel);\n quaterOption.addEventListener('click', function () {\n _this.onBorderSizeChange('.25px');\n });\n var halfOption = this.createDropdownOption(ulTag, '.5' + pixel);\n halfOption.addEventListener('click', function () {\n _this.onBorderSizeChange('.5px');\n });\n var threeQuatersOption = this.createDropdownOption(ulTag, '.75' + pixel);\n threeQuatersOption.addEventListener('click', function () {\n _this.onBorderSizeChange('.75px');\n });\n var oneOption = this.createDropdownOption(ulTag, '1' + pixel);\n oneOption.addEventListener('click', function () {\n _this.onBorderSizeChange('1px');\n });\n var oneHalfOption = this.createDropdownOption(ulTag, '1.5' + pixel);\n oneHalfOption.addEventListener('click', function () {\n _this.onBorderSizeChange('1.5px');\n });\n var twoOption = this.createDropdownOption(ulTag, '2' + pixel);\n twoOption.addEventListener('click', function () {\n _this.onBorderSizeChange('2px');\n });\n var threeOption = this.createDropdownOption(ulTag, '3' + pixel);\n threeOption.addEventListener('click', function () {\n _this.onBorderSizeChange('3px');\n });\n var fourOption = this.createDropdownOption(ulTag, '4' + pixel);\n fourOption.addEventListener('click', function () {\n _this.onBorderSizeChange('4px');\n });\n var fiveOption = this.createDropdownOption(ulTag, '5' + pixel);\n fiveOption.addEventListener('click', function () {\n _this.onBorderSizeChange('5px');\n });\n var sixOption = this.createDropdownOption(ulTag, '6' + pixel);\n sixOption.addEventListener('click', function () {\n _this.onBorderSizeChange('6px');\n });\n var menuOptions = {\n target: div,\n iconCss: iconcss,\n cssClass: 'e-de-prop-bordersize',\n enableRtl: this.isRtl,\n content: '1.5px'\n };\n var dropdown = new DropDownButton(menuOptions);\n dropdown.beforeOpen = function () {\n div.style.display = 'block';\n for (var i = 0; i < _this.borderSizeColorElement.length; i++) {\n _this.borderSizeColorElement[parseInt(i.toString(), 10)].style.borderBottomColor = _this.borderColor;\n }\n };\n dropdown.beforeClose = function () {\n div.style.display = 'none';\n };\n dropdown.appendTo(button);\n dropdown.element.setAttribute('title', this.localObj.getConstant('Border width'));\n return dropdown;\n };\n TableProperties.prototype.onBorderSizeChange = function (value) {\n var _this = this;\n this.borderSize.content = value;\n setTimeout(function () {\n _this.tableOutlineBorder.element.focus();\n }, 10);\n };\n TableProperties.prototype.createDropdownOption = function (ulTag, text) {\n var liTag = createElement('li', {\n styles: 'display:block',\n className: 'e-de-floating-menuitem e-de-floating-menuitem-md e-de-list-items e-de-list-item-size'\n });\n ulTag.appendChild(liTag);\n var innerHTML;\n if (text === 'No Border') {\n innerHTML = '
      ' + text + '
      ';\n }\n else if (text === '1.5px') {\n innerHTML = '
      ' + text + '
      ';\n }\n else {\n innerHTML = '
      ' + text + '
      ';\n }\n var liInnerDiv = createElement('div', {\n className: 'e-de-list-header-presetmenu',\n innerHTML: innerHTML\n });\n liTag.appendChild(liInnerDiv);\n return liTag;\n };\n /* eslint-disable-next-line max-len */\n TableProperties.prototype.createDropDownButton = function (id, styles, parentDiv, iconCss, content, items, target) {\n var buttonElement = createElement('button', { id: id, styles: styles, attrs: { type: 'button' } });\n parentDiv.appendChild(buttonElement);\n var splitButtonClass = 'e-de-prop-splitbutton';\n if (this.isRtl) {\n splitButtonClass = 'e-rtl ' + splitButtonClass;\n }\n /* eslint-disable-next-line max-len */\n var dropDownBtn = new DropDownButton({ iconCss: iconCss, content: content, enableRtl: this.isRtl, cssClass: splitButtonClass }, buttonElement);\n if (items) {\n dropDownBtn.items = items;\n }\n if (target) {\n dropDownBtn.target = target;\n }\n return dropDownBtn;\n };\n /* eslint-disable-next-line max-len */\n TableProperties.prototype.createButtonTemplate = function (id, iconcss, div, buttonClass, styles, toolTipText, content, iconPos) {\n var buttonElement = createElement('Button', { id: id, styles: styles, attrs: { type: 'button' } });\n div.appendChild(buttonElement);\n var btn = new Button({\n cssClass: buttonClass, iconCss: iconcss, enableRtl: this.isRtl, iconPosition: (iconPos ? iconPos : 'Left'),\n content: content ? content : ''\n });\n btn.appendTo(buttonElement);\n buttonElement.setAttribute('title', toolTipText);\n buttonElement.setAttribute('aria-label', toolTipText);\n return btn;\n };\n TableProperties.prototype.createColorPickerTemplate = function (id, divElement, toolTipText, isBorderWidth) {\n var _a = this.documentEditor.documentEditorSettings.colorPickerSettings, columns = _a.columns, createPopupOnClick = _a.createPopupOnClick, disabled = _a.disabled, enablePersistence = _a.enablePersistence, inline = _a.inline, mode = _a.mode, modeSwitcher = _a.modeSwitcher, noColor = _a.noColor, presetColors = _a.presetColors, showButtons = _a.showButtons;\n var inputElement = createElement('input', { id: id });\n divElement.appendChild(inputElement);\n var cssClass = 'e-de-prop-font-button e-de-prop-font-colorpicker';\n if (isBorderWidth) {\n cssClass = cssClass + ' e-de-border-clr-picker';\n }\n /* eslint-disable-next-line max-len */\n var colorPicker = new ColorPicker({ cssClass: cssClass, enableRtl: this.isRtl, locale: this.container.locale, enableOpacity: false,\n mode: mode, modeSwitcher: modeSwitcher, showButtons: showButtons, columns: columns,\n createPopupOnClick: createPopupOnClick, disabled: disabled, enablePersistence: enablePersistence, inline: inline,\n noColor: noColor, presetColors: presetColors }, inputElement);\n inputElement.parentElement.setAttribute('title', toolTipText);\n inputElement.parentElement.setAttribute('aria-label', toolTipText);\n return colorPicker;\n };\n TableProperties.prototype.showTableProperties = function (isShow, propertyType) {\n if (isShow) {\n if (propertyType === 'text') {\n this.propertiesTab.hideTab(1, true);\n }\n else {\n this.propertiesTab.hideTab(1, false);\n if (this.prevContext !== this.documentEditor.selectionModule.contextType) {\n this.propertiesTab.selectedItem = 1;\n }\n }\n this.prevContext = this.documentEditor.selectionModule.contextType;\n this.onSelectionChange();\n this.tableTextProperties.onSelectionChange();\n }\n if (!isShow && this.parentElement.style.display === 'none' || (isShow && this.parentElement.style.display === 'block')) {\n return;\n }\n this.parentElement.style.display = isShow ? 'block' : 'none';\n if (isShow) {\n this.updateTabContainerHeight();\n }\n this.documentEditor.resize();\n this.prevContext = this.documentEditor.selectionModule.contextType;\n };\n /**\n * @private\n * @returns {void} - Update tab container height.\n */\n TableProperties.prototype.updateTabContainerHeight = function () {\n if (this.parentElement && this.parentElement.style.display === 'block') {\n var tabHeaderHeight = this.parentElement.getElementsByClassName('e-tab-header')[0];\n if (tabHeaderHeight) {\n var paneHeight = this.parentElement.offsetHeight - tabHeaderHeight.offsetHeight;\n this.tableProperties.style.height = paneHeight + 'px';\n this.tableTextProperties.element.style.height = paneHeight + 'px';\n }\n }\n };\n TableProperties.prototype.destroy = function () {\n this.container = undefined;\n if (this.shadingBtn) {\n this.shadingBtn.destroy();\n this.shadingBtn = undefined;\n }\n if (this.borderBtn) {\n this.borderBtn.destroy();\n this.borderBtn = undefined;\n }\n if (this.borderSize) {\n this.borderSize.destroy();\n this.borderSize = undefined;\n }\n if (this.topMargin) {\n this.topMargin.destroy();\n this.topMargin = undefined;\n }\n if (this.bottomMargin) {\n this.bottomMargin.destroy();\n this.bottomMargin = undefined;\n }\n if (this.leftMargin) {\n this.leftMargin.destroy();\n this.leftMargin = undefined;\n }\n if (this.rightMargin) {\n this.rightMargin.destroy();\n this.rightMargin = undefined;\n }\n if (this.tableTextProperties) {\n this.tableTextProperties.destroy();\n this.tableTextProperties = undefined;\n }\n if (this.propertiesTab) {\n this.propertiesTab.destroy();\n this.propertiesTab = undefined;\n }\n if (this.imageProperty) {\n this.imageProperty.destroy();\n this.imageProperty = undefined;\n }\n if (this.tableOutlineBorder) {\n this.tableOutlineBorder.destroy();\n }\n this.tableOutlineBorder = undefined;\n if (this.tableAllBorder) {\n this.tableAllBorder.destroy();\n }\n this.tableAllBorder = undefined;\n if (this.tableCenterBorder) {\n this.tableCenterBorder.destroy();\n }\n this.tableCenterBorder = undefined;\n if (this.tableLeftBorder) {\n this.tableLeftBorder.destroy();\n }\n this.tableLeftBorder = undefined;\n if (this.tableCenterVerticalBorder) {\n this.tableCenterVerticalBorder.destroy();\n }\n this.tableCenterVerticalBorder = undefined;\n if (this.tableRightBorder) {\n this.tableRightBorder.destroy();\n }\n this.tableRightBorder = undefined;\n if (this.tableTopBorder) {\n this.tableTopBorder.destroy();\n }\n this.tableTopBorder = undefined;\n if (this.tableCenterHorizontalBorder) {\n this.tableCenterHorizontalBorder.destroy();\n }\n this.tableCenterHorizontalBorder = undefined;\n if (this.tableBottomBorder) {\n this.tableBottomBorder.destroy();\n }\n this.tableBottomBorder = undefined;\n if (this.horizontalMerge) {\n this.horizontalMerge.destroy();\n }\n this.horizontalMerge = undefined;\n if (this.insertRowAbove) {\n this.insertRowAbove.destroy();\n }\n this.insertRowAbove = undefined;\n if (this.insertRowBelow) {\n this.insertRowBelow.destroy();\n }\n this.insertRowBelow = undefined;\n if (this.insertColumnLeft) {\n this.insertColumnLeft.destroy();\n }\n this.insertColumnLeft = undefined;\n if (this.insertColumnRight) {\n this.insertColumnRight.destroy();\n }\n this.insertColumnRight = undefined;\n if (this.deleteRow) {\n this.deleteRow.destroy();\n }\n this.deleteRow = undefined;\n if (this.deleteColumn) {\n this.deleteColumn.destroy();\n }\n this.deleteColumn = undefined;\n if (this.alignBottom) {\n this.alignBottom.destroy();\n }\n this.alignBottom = undefined;\n if (this.alignCenterHorizontal) {\n this.alignCenterHorizontal.destroy();\n }\n this.alignCenterHorizontal = undefined;\n if (this.alignTop) {\n this.alignTop.destroy();\n }\n this.alignTop = undefined;\n this.groupButtonClass = undefined;\n this.borderColor = undefined;\n this.elementId = undefined;\n };\n return TableProperties;\n}());\nexport { TableProperties };\n","import { createElement, L10n, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { Button } from '@syncfusion/ej2-buttons';\n/**\n * Represents document editor status bar.\n *\n * @private\n */\nvar StatusBar = /** @class */ (function () {\n function StatusBar(parentElement, docEditor) {\n this.startPage = 1;\n this.statusBarDiv = parentElement;\n this.container = docEditor;\n this.initializeStatusBar();\n this.wireEvents();\n }\n Object.defineProperty(StatusBar.prototype, \"documentEditor\", {\n get: function () {\n return this.container ? this.container.documentEditor : undefined;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(StatusBar.prototype, \"editorPageCount\", {\n get: function () {\n return this.documentEditor ? this.documentEditor.pageCount : 1;\n },\n enumerable: true,\n configurable: true\n });\n StatusBar.prototype.initializeStatusBar = function () {\n var _this = this;\n var isRtl = this.container.enableRtl;\n this.documentEditor.enableSpellCheck = (this.container.enableSpellCheck) ? true : false;\n this.localObj = new L10n('documenteditorcontainer', this.container.defaultLocale, this.container.locale);\n var styles = isRtl ? 'padding-right:16px' : 'padding-left:16px';\n var div = createElement('div', { className: (this.container.enableSpellCheck) ? 'e-de-ctnr-pg-no' : 'e-de-ctnr-pg-no-spellout', styles: styles });\n this.statusBarDiv.appendChild(div);\n var label = createElement('span');\n label.textContent = this.localObj.getConstant('Page') + ' ';\n div.appendChild(label);\n this.pageNumberInput = createElement('input', { styles: 'text-transform:capitalize;white-space:pre;overflow:hidden;user-select:none;cursor:text', attrs: { type: 'text', 'aria-label': this.localObj.getConstant('Current Page Number') }, className: 'e-de-pagenumber-input' });\n this.editablePageNumber = createElement('div', { styles: 'display: inline-flex', className: 'e-input e-de-pagenumber-text' });\n this.editablePageNumber.appendChild(this.pageNumberInput);\n var pageNumberOfLabelStyle = '';\n if (isRtl) {\n label.style.marginLeft = '6px';\n this.editablePageNumber.style.marginLeft = '6px';\n pageNumberOfLabelStyle = 'padding-left:5px';\n }\n else {\n label.style.marginRight = '6px';\n this.editablePageNumber.style.marginRight = '6px';\n pageNumberOfLabelStyle = 'padding-right:5px';\n }\n this.updatePageNumber();\n div.appendChild(this.editablePageNumber);\n this.editablePageNumber.setAttribute('title', this.localObj.getConstant('Current Page Number'));\n var label1 = createElement('span', { styles: pageNumberOfLabelStyle });\n label1.textContent = ' ' + this.localObj.getConstant('of') + ' ';\n div.appendChild(label1);\n this.pageCount = createElement('span');\n div.appendChild(this.pageCount);\n this.updatePageCount();\n if (this.documentEditor.enableSpellCheck) {\n var verticalLine = createElement('div', { className: 'e-de-statusbar-separator' });\n this.statusBarDiv.appendChild(verticalLine);\n var spellCheckBtn = this.addSpellCheckElement();\n this.spellCheckButton.appendTo(spellCheckBtn);\n }\n this.pageButton = this.createButtonTemplate((this.container.enableSpellCheck) ? 'e-de-statusbar-pageweb e-btn-pageweb-spellcheck' : 'e-de-statusbar-pageweb', 'e-de-printlayout e-icons', 'Print layout', this.statusBarDiv, this.pageButton, (this.documentEditor.layoutType === 'Pages') ? true : false);\n this.webButton = this.createButtonTemplate('e-de-statusbar-pageweb', 'e-de-weblayout e-icons', 'Web layout', this.statusBarDiv, this.webButton, (this.documentEditor.layoutType === 'Continuous') ? true : false);\n this.pageButton.addEventListener('click', function () {\n _this.documentEditor.layoutType = 'Pages';\n _this.addRemoveClass(_this.pageButton, _this.webButton);\n _this.documentEditor.focusIn();\n });\n this.webButton.addEventListener('click', function () {\n _this.documentEditor.layoutType = 'Continuous';\n _this.addRemoveClass(_this.webButton, _this.pageButton);\n _this.documentEditor.focusIn();\n });\n var zoomBtn = createElement('button', {\n className: 'e-de-statusbar-zoom', attrs: { type: 'button' }\n });\n this.statusBarDiv.appendChild(zoomBtn);\n zoomBtn.setAttribute('title', this.localObj.getConstant('ZoomLevelTooltip'));\n var items = [\n {\n text: '200%'\n },\n {\n text: '175%'\n },\n {\n text: '150%'\n },\n {\n text: '125%'\n },\n {\n text: '100%'\n },\n {\n text: '75%'\n },\n {\n text: '50%'\n },\n {\n text: '25%'\n },\n {\n separator: true\n },\n {\n text: this.localObj.getConstant('Fit one page')\n },\n {\n text: this.localObj.getConstant('Fit page width')\n }\n ];\n this.zoom = new DropDownButton({ content: '100%', items: items, enableRtl: this.container.enableRtl, select: this.onZoom.bind(this) });\n this.zoom.isStringTemplate = true;\n this.zoom.appendTo(zoomBtn);\n };\n StatusBar.prototype.addSpellCheckElement = function () {\n var _this = this;\n var spellCheckBtn = createElement('button', {\n className: 'e-de-statusbar-spellcheck'\n });\n this.statusBarDiv.appendChild(spellCheckBtn);\n spellCheckBtn.setAttribute('title', 'Spell Checker options');\n var spellCheckItems = [\n {\n text: this.localObj.getConstant('Spell Check')\n },\n {\n text: this.localObj.getConstant('Underline errors')\n }\n ];\n this.spellCheckButton = new DropDownButton({\n content: this.localObj.getConstant('Spelling'), items: spellCheckItems, enableRtl: this.container.enableRtl, select: this.onSpellCheck.bind(this),\n beforeItemRender: function (args) {\n args.element.innerHTML = '' + args.item.text;\n if (isNullOrUndefined(_this.currentLanguage)) {\n _this.currentLanguage = _this.documentEditor.spellCheckerModule.languageID;\n }\n if (isNullOrUndefined(_this.allowSuggestion)) {\n _this.allowSuggestion = _this.documentEditor.spellCheckerModule.allowSpellCheckAndSuggestion;\n }\n var span = args.element.children[0];\n if (args.item.text === _this.localObj.getConstant('Spell Check') && _this.documentEditor.enableSpellCheck &&\n _this.documentEditor.spellCheckerModule.enableSpellCheck) {\n span.style.marginRight = '10px';\n span.setAttribute('class', 'e-de-selected-spellcheck-item');\n }\n else if (args.item.text === _this.localObj.getConstant('Underline errors') && _this.documentEditor.enableSpellCheck &&\n _this.documentEditor.spellCheckerModule.enableSpellCheck && !_this.documentEditor.spellCheckerModule.removeUnderline) {\n span.style.marginRight = '10px';\n span.setAttribute('class', 'e-de-selected-underline-item');\n }\n else {\n span.style.marginRight = '25px';\n args.element.children[0].classList.remove('e-de-selected-spellcheck-item');\n args.element.children[0].classList.remove('e-de-selected-underline-item');\n }\n }\n });\n return spellCheckBtn;\n };\n StatusBar.prototype.onZoom = function (args) {\n this.setZoomValue(args.item.text);\n this.updateZoomContent();\n };\n StatusBar.prototype.onSpellCheck = function (args) {\n this.setSpellCheckValue(args.item.text);\n };\n StatusBar.prototype.updateZoomContent = function () {\n this.zoom.content = Math.round(this.documentEditor.zoomFactor * 100) + '%';\n };\n StatusBar.prototype.setSpellCheckValue = function (text) {\n this.spellCheckButton.content = this.localObj.getConstant('Spelling');\n if (text.match(this.localObj.getConstant('Spell Check'))) {\n this.documentEditor.spellCheckerModule.enableSpellCheck =\n (this.documentEditor.spellCheckerModule.enableSpellCheck) ? false : true;\n this.documentEditor.documentHelper.triggerSpellCheck = false;\n this.documentEditor.documentHelper.triggerElementsOnLoading = false;\n }\n else if (text.match(this.localObj.getConstant('Underline errors'))) {\n if (this.documentEditor.enableSpellCheck && this.documentEditor.spellCheckerModule.enableSpellCheck) {\n this.documentEditor.spellCheckerModule.removeUnderline =\n (this.documentEditor.spellCheckerModule.removeUnderline) ? false : true;\n }\n }\n };\n StatusBar.prototype.setZoomValue = function (text) {\n if (text.match(this.localObj.getConstant('Fit one page'))) {\n this.documentEditor.fitPage('FitOnePage');\n }\n else if (text.match(this.localObj.getConstant('Fit page width'))) {\n this.documentEditor.fitPage('FitPageWidth');\n }\n else {\n this.documentEditor.zoomFactor = parseInt(text, 10) / 100;\n }\n };\n /**\n * Updates page count.\n *\n * @returns {void}\n */\n StatusBar.prototype.updatePageCount = function () {\n this.pageCount.textContent = this.editorPageCount.toString();\n };\n /**\n * Updates page number.\n *\n * @returns {void}\n */\n StatusBar.prototype.updatePageNumber = function () {\n this.pageNumberInput.value = this.startPage.toString();\n this.updatePageNumberWidth();\n };\n StatusBar.prototype.updatePageNumberOnViewChange = function (args) {\n if (this.documentEditor.selectionModule\n && this.documentEditor.selectionModule.startPage >= args.startPage\n && this.documentEditor.selectionModule.startPage <= args.endPage) {\n this.startPage = this.documentEditor.selectionModule.startPage;\n }\n else {\n this.startPage = args.startPage;\n }\n this.updatePageNumber();\n this.updatePageCount();\n };\n StatusBar.prototype.wireEvents = function () {\n var _this = this;\n this.pageNumberInput.addEventListener('keydown', function (e) {\n if (e.which === 13) {\n e.preventDefault();\n var pageNumber = parseInt(_this.pageNumberInput.value, 10);\n if (pageNumber > _this.editorPageCount) {\n _this.updatePageNumber();\n }\n else {\n if (_this.documentEditor.selectionModule) {\n _this.documentEditor.selectionModule.goToPage(parseInt(_this.pageNumberInput.value, 10));\n _this.documentEditor.focusIn();\n }\n else {\n _this.documentEditor.scrollToPage(parseInt(_this.pageNumberInput.value, 10));\n }\n }\n _this.pageNumberInput.contentEditable = 'false';\n if (_this.pageNumberInput.value === '') {\n _this.updatePageNumber();\n }\n }\n if (e.which > 64) {\n e.preventDefault();\n }\n });\n this.pageNumberInput.addEventListener('keyup', function () {\n _this.updatePageNumberWidth();\n });\n this.pageNumberInput.addEventListener('blur', function () {\n if (_this.pageNumberInput.value === '' || parseInt(_this.pageNumberInput.value, 10) > _this.editorPageCount) {\n _this.updatePageNumber();\n }\n _this.pageNumberInput.contentEditable = 'false';\n });\n this.pageNumberInput.addEventListener('focus', function () {\n _this.pageNumberInput.select();\n });\n };\n StatusBar.prototype.updatePageNumberWidth = function () {\n if (this.pageNumberInput) {\n this.pageNumberInput.style.width = this.pageNumberInput.value.length >= 3 ? '30px' : '22px';\n }\n };\n /**\n * @private\n * @returns {void}\n */\n StatusBar.prototype.toggleWebLayout = function () {\n this.addRemoveClass(this.pageButton, this.webButton);\n };\n /**\n * @private\n * @returns {void}\n */\n StatusBar.prototype.togglePageLayout = function () {\n this.addRemoveClass(this.webButton, this.pageButton);\n };\n StatusBar.prototype.addRemoveClass = function (addToElement, removeFromElement) {\n addToElement.classList.add('e-btn-toggle');\n if (removeFromElement.classList.contains('e-btn-toggle')) {\n removeFromElement.classList.remove('e-btn-toggle');\n }\n };\n /* eslint-disable-next-line max-len */\n StatusBar.prototype.createButtonTemplate = function (className, iconcss, toolTipText, div, appendDiv, toggle) {\n appendDiv = createElement('Button', { className: className, attrs: { type: 'button' } });\n div.appendChild(appendDiv);\n var btn = new Button({\n cssClass: className, iconCss: iconcss, enableRtl: this.container.enableRtl\n });\n if (toggle === true) {\n appendDiv.classList.add('e-btn-toggle');\n }\n btn.appendTo(appendDiv);\n appendDiv.setAttribute('title', this.localObj.getConstant(toolTipText));\n if (toolTipText === 'Web layout') {\n this.webBtn = btn;\n }\n else {\n this.pageBtn = btn;\n }\n return appendDiv;\n };\n /**\n * @private\n * @returns {void}\n */\n StatusBar.prototype.destroy = function () {\n if (this.zoom) {\n this.zoom.destroy();\n this.zoom = undefined;\n }\n if (this.spellCheckButton) {\n this.spellCheckButton.destroy();\n this.spellCheckButton = undefined;\n }\n if (this.pageBtn) {\n this.pageBtn.destroy();\n this.pageBtn = undefined;\n }\n if (this.webBtn) {\n this.webBtn.destroy();\n this.webBtn = undefined;\n }\n this.pageButton = undefined;\n this.webButton = undefined;\n this.pageNumberInput = undefined;\n this.statusBarDiv = undefined;\n this.pageCount = undefined;\n this.editablePageNumber = undefined;\n this.localObj = undefined;\n this.container = undefined;\n };\n return StatusBar;\n}());\nexport { StatusBar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, L10n, Complex, isNullOrUndefined, formatUnit } from '@syncfusion/ej2-base';\nimport { Event } from '@syncfusion/ej2-base';\nimport { DocumentEditor, DocumentEditorSettings, DocumentSettings } from '../document-editor/document-editor';\nimport { HeaderFooterProperties } from './properties-pane/header-footer-pane';\nimport { ImageProperties } from './properties-pane/image-properties-pane';\nimport { TocProperties } from './properties-pane/table-of-content-pane';\nimport { TableProperties } from './properties-pane/table-properties-pane';\nimport { StatusBar } from './properties-pane/status-bar';\nimport { createSpinner } from '@syncfusion/ej2-popups';\nimport { beforeAutoResize, internalAutoResize, internalZoomFactorChange, beforeCommentActionEvent, commentDeleteEvent, contentChangeEvent, trackChangeEvent, beforePaneSwitchEvent, serviceFailureEvent, documentChangeEvent, selectionChangeEvent, customContextMenuSelectEvent, customContextMenuBeforeOpenEvent, internalviewChangeEvent, beforeXmlHttpRequestSend, protectionTypeChangeEvent, internalDocumentEditorSettingsChange, internalStyleCollectionChange, revisionActionEvent, trackChanges, internalOptionPaneChange } from '../document-editor/base/constants';\nimport { HelperMethods } from '../index';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { DialogUtility } from '@syncfusion/ej2-popups';\n/**\n * Document Editor container component.\n */\nvar DocumentEditorContainer = /** @class */ (function (_super) {\n __extends(DocumentEditorContainer, _super);\n /**\n * Initializes a new instance of the DocumentEditorContainer class.\n *\n * @param { DocumentEditorContainerModel } options Specifies the DocumentEditorContainer model as options.\n * @param { string | HTMLElement } element Specifies the element that is rendered as a DocumentEditorContainer.\n */\n function DocumentEditorContainer(options, element) {\n var _this = _super.call(this, options, element) || this;\n /**\n * @private\n */\n _this.previousContext = '';\n /**\n * @private\n */\n _this.showHeaderProperties = true;\n /**\n * default locale\n *\n * @private\n */\n _this.defaultLocale = {\n 'New': 'New',\n 'Insert Footnote': 'Insert Footnote',\n 'Insert Endnote': 'Insert Endnote',\n 'Footnote Tooltip': 'Insert Footnote (Alt+Ctrl+F).',\n 'Endnote Tooltip': 'Insert Endnote (Alt+Ctrl+D).',\n 'Open': 'Open',\n 'Undo': 'Undo',\n 'Redo': 'Redo',\n 'Image': 'Image',\n 'Table': 'Table',\n 'Link': 'Link',\n 'Bookmark': 'Bookmark',\n 'Table of Contents': 'Table of Contents',\n 'HEADING - - - - 1': 'HEADING - - - - 1',\n 'HEADING - - - - 2': 'HEADING - - - - 2',\n 'HEADING - - - - 3': 'HEADING - - - - 3',\n 'Header': 'Header',\n 'Footer': 'Footer',\n 'Page Setup': 'Page Setup',\n 'Page Number': 'Page Number',\n 'Break': 'Break',\n 'Find': 'Find',\n 'Local Clipboard': 'Local Clipboard',\n 'Restrict Editing': 'Restrict Editing',\n 'Upload from computer': 'Upload from computer',\n 'By URL': 'By URL',\n 'Page': 'Page',\n 'Show properties pane': 'Show properties pane',\n 'Hide properties pane': 'Hide properties pane',\n 'Next Page': 'Next Page',\n 'Continuous': 'Continuous',\n 'Header And Footer': 'Header & Footer',\n 'Options': 'Options',\n 'Levels': 'Levels',\n 'Different First Page': 'Different First Page',\n 'Different header and footer for odd and even pages': 'Different header and footer for odd and even pages.',\n 'Different Odd And Even Pages': 'Different Odd & Even Pages',\n 'Different header and footer for first page': 'Different header and footer for first page.',\n 'Position': 'Position',\n 'Header from Top': 'Header from Top',\n 'Footer from Bottom': 'Footer from Bottom',\n 'Distance from top of the page to top of the header': 'Distance from top of the page to top of the header.',\n 'Distance from bottom of the page to bottom of the footer': 'Distance from bottom of the page to bottom of the footer.',\n 'Aspect ratio': 'Aspect ratio',\n 'W': 'W',\n 'H': 'H',\n 'Width': 'Width',\n 'Height': 'Height',\n 'Text': 'Text',\n 'Paragraph': 'Paragraph',\n 'Fill': 'Fill',\n 'Fill color': 'Fill color',\n 'Border Style': 'Border Style',\n 'Outside borders': 'Outside borders',\n 'All borders': 'All borders',\n 'Inside borders': 'Inside borders',\n 'Left border': 'Left border',\n 'Inside vertical border': 'Inside vertical border',\n 'Right border': 'Right border',\n 'Top border': 'Top border',\n 'Inside horizontal border': 'Inside horizontal border',\n 'Bottom border': 'Bottom border',\n 'Border color': 'Border color',\n 'Border width': 'Border width',\n 'Cell': 'Cell',\n 'Merge cells': 'Merge cells',\n 'Insert Or Delete': 'Insert / Delete',\n 'Insert columns to the left': 'Insert columns to the left',\n 'Insert columns to the right': 'Insert columns to the right',\n 'Insert rows above': 'Insert rows above',\n 'Insert rows below': 'Insert rows below',\n 'Delete rows': 'Delete rows',\n 'Delete columns': 'Delete columns',\n 'Cell Margin': 'Cell Margin',\n 'Top': 'Top',\n 'Bottom': 'Bottom',\n 'Left': 'Left',\n 'Right': 'Right',\n 'Align Text': 'Align Text',\n 'Align top': 'Align top',\n 'Align bottom': 'Align bottom',\n 'Align center': 'Align center',\n 'Number of heading or outline levels to be shown in table of contents': 'Number of heading or outline levels to be shown in table of contents.',\n 'Show page numbers': 'Show page numbers',\n 'Show page numbers in table of contents': 'Show page numbers in table of contents.',\n 'Right align page numbers': 'Right align page numbers',\n 'Right align page numbers in table of contents': 'Right align page numbers in table of contents.',\n 'Use hyperlinks': 'Use hyperlinks',\n 'Use hyperlinks instead of page numbers': 'Use hyperlinks instead of page numbers.',\n 'Font': 'Font',\n 'Font Size': 'Font Size',\n 'Font color': 'Font color',\n 'Text highlight color': 'Text highlight color',\n 'Clear all formatting': 'Clear all formatting',\n 'Bold Tooltip': 'Bold (Ctrl+B)',\n 'Italic Tooltip': 'Italic (Ctrl+I)',\n 'Underline Tooltip': 'Underline (Ctrl+U)',\n 'Strikethrough': 'Strikethrough',\n 'Superscript Tooltip': 'Superscript (Ctrl+Shift++)',\n 'Subscript Tooltip': 'Subscript (Ctrl+=)',\n 'Align left Tooltip': 'Align left (Ctrl+L)',\n 'Center Tooltip': 'Center (Ctrl+E)',\n 'Align right Tooltip': 'Align right (Ctrl+R)',\n 'Justify Tooltip': 'Justify (Ctrl+J)',\n 'Decrease indent': 'Decrease indent',\n 'Increase indent': 'Increase indent',\n 'Line spacing': 'Line spacing',\n 'Bullets': 'Bullets',\n 'Numbering': 'Numbering',\n 'Styles': 'Styles',\n 'Manage Styles': 'Manage Styles',\n 'of': 'of',\n 'Fit one page': 'Fit one page',\n 'Spell Check': 'Spell Check',\n 'Spelling': 'Spelling',\n 'Underline errors': 'Underline errors',\n 'Fit page width': 'Fit page width',\n 'Update': 'Update',\n 'Cancel': 'Cancel',\n 'Insert': 'Insert',\n 'No Border': 'No Border',\n 'Create a new document': 'Create a new document.',\n 'Open a document': 'Open a document.',\n 'Undo Tooltip': 'Undo the last operation (Ctrl+Z).',\n 'Redo Tooltip': 'Redo the last operation (Ctrl+Y).',\n 'Insert inline picture from a file': 'Insert inline picture from a file.',\n 'Insert a table into the document': 'Insert a table into the document',\n 'Create Hyperlink': 'Create a link in your document for quick access to web pages and files (Ctrl+K).',\n 'Insert a bookmark in a specific place in this document': 'Insert a bookmark in a specific place in this document.',\n 'Provide an overview of your document by adding a table of contents': 'Provide an overview of your document by adding a table of contents.',\n 'Add or edit the header': 'Add or edit the header.',\n 'Add or edit the footer': 'Add or edit the footer.',\n 'Open the page setup dialog': 'Open the page setup dialog.',\n 'Content Control': 'Content Control',\n 'Insert Content Control': 'Insert Content Control',\n 'Add page numbers': 'Add page numbers.',\n 'Find Text': 'Find text in the document (Ctrl+F).',\n 'Toggle between the internal clipboard and system clipboard': 'Toggle between the internal clipboard and system clipboard.
      ' +\n 'Access to system clipboard through script is denied due to browsers security policy. Instead,
      ' +\n ' 1. You can enable internal clipboard to cut, copy and paste within the component.
      ' +\n ' 2. You can use the keyboard shortcuts (Ctrl+X, Ctrl+C and Ctrl+V) to cut, copy and paste with system clipboard.',\n 'Current Page Number': 'The current page number in the document. Click or tap to navigate specific page.',\n 'Read only': 'Read only',\n 'Protections': 'Protections',\n 'Error in establishing connection with web server': 'Error in establishing connection with web server',\n 'Single': 'Single',\n 'Double': 'Double',\n 'New comment': 'New comment',\n 'Comments': 'Comments',\n 'Print layout': 'Print layout',\n 'Web layout': 'Web layout',\n 'Form Fields': 'Form Fields',\n 'Text Form': 'Text Form',\n 'Check Box': 'Check Box',\n 'DropDown': 'Drop-Down',\n 'Update Fields': 'Update Fields',\n 'Update cross reference fields': 'Update cross reference fields',\n 'Track Changes': 'Keep track of the changes made in the document',\n 'TrackChanges': 'Track Changes',\n 'AllCaps': 'AllCaps',\n 'Change case Tooltip': 'Change case',\n 'UPPERCASE': 'UPPERCASE',\n 'SentenceCase': 'Sentence case',\n 'Lowercase': 'Lowercase',\n 'CapitalizeEachWord': 'Capitalize each word',\n 'ToggleCase': 'tOGGLE cASE',\n 'No color': 'No color',\n 'Top margin': 'Top margin',\n 'Bottom margin': 'Bottom margin',\n 'Left margin': 'Left margin',\n 'Right margin': 'Right margin',\n 'Normal': 'Normal',\n 'Heading': 'Heading',\n 'Heading 1': 'Heading 1',\n 'Heading 2': 'Heading 2',\n 'Heading 3': 'Heading 3',\n 'Heading 4': 'Heading 4',\n 'Heading 5': 'Heading 5',\n 'Heading 6': 'Heading 6',\n 'Heading 7': 'Heading 7',\n 'Heading 8': 'Heading 8',\n 'Heading 9': 'Heading 9',\n 'ZoomLevelTooltip': 'Zoom level. Click or tap to open the Zoom options.',\n 'None': 'None',\n 'Borders': 'Borders',\n 'ShowHiddenMarks Tooltip': 'Show the hidden characters like spaces, tab, paragraph marks, and breaks.(Ctrl + *)',\n 'Columns': 'Columns',\n 'Column': 'Column',\n 'Page Breaks': 'Page Breaks',\n 'Section Breaks': 'Section Breaks',\n 'Link to Previous': 'Link to Previous',\n 'Link to PreviousTooltip': 'Link this section with previous section header or footer',\n 'Alternate Text': 'Alternate Text',\n 'The address of this site is not valid. Check the address and try again.': 'The address of this site is not valid. Check the address and try again.',\n 'OK': 'OK',\n 'Information': 'Information',\n 'Rich Text Content Control': 'Rich Text Content Control',\n 'Plain Text Content Control': 'Plain Text Content Control',\n 'Picture Content Control': 'Picture Content Control',\n 'Combo Box Content Control': 'Combo Box Content Control',\n 'Drop-Down List Content Control': 'Drop-Down List Content Control',\n 'Date Picker Content Control': 'Date Picker Content Control',\n 'Check Box Content Control': 'Check Box Content Control'\n };\n return _this;\n }\n Object.defineProperty(DocumentEditorContainer.prototype, \"documentEditor\", {\n /* eslint-enable */\n /**\n * Gets the DocumentEditor instance.\n *\n * @aspType DocumentEditor\n * @returns {DocumentEditor} Returns the DocumentEditor instance.\n */\n get: function () {\n return this.documentEditorInternal;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DocumentEditorContainer.prototype, \"toolbar\", {\n /**\n * Gets the toolbar instance.\n *\n * @returns {Toolbar} Returns the toolbar module.\n */\n get: function () {\n return this.toolbarModule;\n },\n enumerable: true,\n configurable: true\n });\n /* eslint-enable @typescript-eslint/naming-convention */\n /**\n * @private\n * @returns {string} Returns the DocumentEditorContainer module name.\n */\n DocumentEditorContainer.prototype.getModuleName = function () {\n return 'DocumentEditorContainer';\n };\n /**\n * @private\n */\n /* eslint-disable */\n DocumentEditorContainer.prototype.onPropertyChanged = function (newModel, oldModel) {\n for (var _i = 0, _a = Object.keys(newModel); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'restrictEditing':\n this.restrictEditingToggleHelper(newModel.restrictEditing);\n break;\n case 'showPropertiesPane':\n this.showHidePropertiesPane(newModel.showPropertiesPane);\n break;\n case 'enableTrackChanges':\n if (this.documentEditor.documentHelper.isTrackedOnlyMode && !newModel.enableTrackChanges && newModel.enableTrackChanges !== this.enableTrackChanges) {\n this.enableTrackChanges = true;\n }\n if (this.documentEditor) {\n this.documentEditor.enableTrackChanges = newModel.enableTrackChanges;\n if (this.toolbarModule) {\n this.toolbarModule.toggleTrackChanges(newModel.enableTrackChanges);\n }\n if (this.documentEditor.enableTrackChanges) {\n this.documentEditor.documentHelper.showRevision = true;\n }\n this.documentEditor.resize();\n }\n break;\n case 'enableLocalPaste':\n if (this.documentEditor) {\n this.documentEditor.enableLocalPaste = newModel.enableLocalPaste;\n }\n break;\n case 'serviceUrl':\n if (this.documentEditor) {\n this.documentEditor.serviceUrl = newModel.serviceUrl;\n }\n break;\n case 'serverActionSettings':\n if (this.documentEditor) {\n this.setserverActionSettings();\n }\n break;\n case 'zIndex':\n if (this.documentEditor) {\n this.documentEditor.zIndex = newModel.zIndex;\n }\n break;\n case 'headers':\n if (this.documentEditor) {\n this.documentEditor.headers = newModel.headers;\n }\n break;\n case 'locale':\n case 'enableRtl':\n this.refresh();\n break;\n case 'enableComment':\n if (this.documentEditor) {\n this.documentEditor.enableComment = newModel.enableComment;\n }\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableInsertComment(newModel.enableComment);\n }\n break;\n case 'enableSpellCheck':\n if (this.documentEditor) {\n this.documentEditor.enableSpellCheck = newModel.enableSpellCheck;\n }\n break;\n case 'documentSettings':\n if (this.documentEditor) {\n this.documentEditor.documentSettings.compatibilityMode = this.documentSettings.compatibilityMode;\n }\n break;\n case 'documentEditorSettings':\n if (this.documentEditor) {\n this.customizeDocumentEditorSettings();\n }\n if (!isNullOrUndefined(newModel.documentEditorSettings.fontFamilies)) {\n var fontFamilyValue = newModel.documentEditorSettings.fontFamilies;\n this.refreshFontFamilies(fontFamilyValue);\n }\n break;\n case 'toolbarItems':\n if (this.toolbarModule) {\n this.toolbarModule.reInitToolbarItems(newModel.toolbarItems);\n }\n break;\n case 'currentUser':\n if (this.documentEditor) {\n this.documentEditor.currentUser = newModel.currentUser;\n }\n break;\n case 'userColor':\n if (this.documentEditor) {\n this.documentEditor.userColor = newModel.userColor;\n }\n break;\n case 'layoutType':\n if (this.documentEditor) {\n this.documentEditor.layoutType = newModel.layoutType;\n if (newModel.layoutType === 'Continuous') {\n this.statusBar.togglePageLayout();\n }\n else {\n this.statusBar.toggleWebLayout();\n }\n }\n break;\n case 'enableToolbar':\n this.createToolbarContainer(this.enableRtl, true);\n if (newModel.enableToolbar && this.toolbarModule) {\n this.toolbarModule.initToolBar(this.toolbarItems);\n this.toolbarModule.enableDisableInsertComment(this.enableComment);\n this.toolbarModule.toggleTrackChanges(this.enableTrackChanges);\n }\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n break;\n case 'height':\n this.element.style.height = formatUnit(this.height);\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n this.resize();\n break;\n case 'width':\n this.element.style.width = formatUnit(this.width);\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n break;\n case 'enableAutoFocus':\n if (this.documentEditor) {\n this.documentEditor.enableAutoFocus = newModel.enableAutoFocus;\n }\n break;\n case 'autoResizeOnVisibilityChange':\n if (this.documentEditor) {\n this.documentEditor.autoResizeOnVisibilityChange = newModel.autoResizeOnVisibilityChange;\n }\n break;\n }\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.preRender = function () {\n this.localObj = new L10n('documenteditorcontainer', this.defaultLocale, this.locale);\n if (!isNullOrUndefined(this.element) && this.element.id === '') {\n //Set unique id, if id is empty\n this.element.id = HelperMethods.getUniqueElementId();\n }\n this.initContainerElement();\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.render = function () {\n if (this.toolbarModule) {\n this.toolbarModule.initToolBar(this.toolbarItems);\n this.toolbarModule.enableDisableInsertComment(this.enableComment);\n }\n if (this.height !== '') {\n this.element.style.height = formatUnit(this.height);\n }\n if (this.width !== '') {\n this.element.style.width = formatUnit(this.width);\n }\n this.element.style.minHeight = '320px';\n this.initializeDocumentEditor();\n if (this.restrictEditing) {\n this.restrictEditingToggleHelper(this.restrictEditing);\n }\n this.headerFooterProperties = new HeaderFooterProperties(this, this.enableRtl);\n this.imageProperties = new ImageProperties(this, this.enableRtl);\n this.tocProperties = new TocProperties(this, this.enableRtl);\n this.tableProperties = new TableProperties(this, this.imageProperties, this.enableRtl);\n this.statusBar = new StatusBar(this.statusBarElement, this);\n // Waiting popup\n createSpinner({ target: this.containerTarget, cssClass: 'e-spin-overlay' });\n this.setserverActionSettings();\n this.renderComplete();\n };\n DocumentEditorContainer.prototype.restrictEditingToggleHelper = function (restrictEditing) {\n this.documentEditor.isReadOnly = restrictEditing;\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableToolBarItem(!restrictEditing, false);\n this.toolbarModule.toggleRestrictEditing(restrictEditing);\n }\n this.showPropertiesPane = !restrictEditing;\n this.showHidePropertiesPane(!restrictEditing);\n this.documentEditor.trackChangesPane.enableDisableButton(!restrictEditing && !this.documentEditor.documentHelper.isDocumentProtected);\n };\n DocumentEditorContainer.prototype.setFormat = function () {\n if (this.characterFormat && this.documentEditor) {\n this.documentEditor.setDefaultCharacterFormat(this.characterFormat);\n }\n if (this.paragraphFormat && this.documentEditor) {\n this.documentEditor.setDefaultParagraphFormat(this.paragraphFormat);\n }\n if (this.sectionFormat && this.documentEditor) {\n this.documentEditor.setDefaultSectionFormat(this.sectionFormat);\n }\n };\n DocumentEditorContainer.prototype.setserverActionSettings = function () {\n if (this.serviceUrl) {\n this.documentEditor.serviceUrl = HelperMethods.sanitizeString(this.serviceUrl);\n }\n if (this.serverActionSettings.spellCheck) {\n this.documentEditor.serverActionSettings.spellCheck = HelperMethods.sanitizeString(this.serverActionSettings.spellCheck);\n }\n if (this.serverActionSettings.spellCheckByPage) {\n this.documentEditor.serverActionSettings.spellCheckByPage = HelperMethods.sanitizeString(this.serverActionSettings.spellCheckByPage);\n }\n if (this.serverActionSettings.restrictEditing) {\n this.documentEditor.serverActionSettings.restrictEditing = HelperMethods.sanitizeString(this.serverActionSettings.restrictEditing);\n }\n if (this.serverActionSettings.systemClipboard) {\n this.documentEditor.serverActionSettings.systemClipboard = HelperMethods.sanitizeString(this.serverActionSettings.systemClipboard);\n }\n if (this.serverActionSettings.import) {\n this.documentEditor.serverActionSettingsImport = HelperMethods.sanitizeString(this.serverActionSettings.import);\n }\n if (this.headers) {\n this.documentEditor.headers = JSON.parse(HelperMethods.sanitizeString(JSON.stringify(this.headers)));\n }\n };\n DocumentEditorContainer.prototype.customizeDocumentEditorSettings = function () {\n if (this.documentEditorSettings.formFieldSettings) {\n var settings = this.documentEditorSettings.formFieldSettings;\n var documentEditor = this.documentEditor;\n if (!isNullOrUndefined(settings.applyShading)) {\n documentEditor.documentEditorSettings.formFieldSettings.applyShading = settings.applyShading;\n }\n if (!isNullOrUndefined(settings.formFillingMode)) {\n documentEditor.documentEditorSettings.formFieldSettings.formFillingMode = settings.formFillingMode;\n }\n if (!isNullOrUndefined(settings.formattingExceptions)) {\n documentEditor.documentEditorSettings.formFieldSettings.formattingExceptions = settings.formattingExceptions;\n }\n if (!isNullOrUndefined(settings.selectionColor)) {\n documentEditor.documentEditorSettings.formFieldSettings.selectionColor = settings.selectionColor;\n }\n if (!isNullOrUndefined(settings.shadingColor)) {\n documentEditor.documentEditorSettings.formFieldSettings.shadingColor = settings.shadingColor;\n }\n }\n if (this.documentEditorSettings.searchHighlightColor) {\n this.documentEditor.documentEditorSettings.searchHighlightColor = HelperMethods.sanitizeString(this.documentEditorSettings.searchHighlightColor);\n }\n if (this.documentEditorSettings.fontFamilies) {\n this.documentEditor.documentEditorSettings.fontFamilies = JSON.parse(HelperMethods.sanitizeString(JSON.stringify(this.documentEditorSettings.fontFamilies)));\n }\n if (this.documentEditorSettings.collaborativeEditingSettings) {\n this.documentEditor.documentEditorSettings.collaborativeEditingSettings = this.documentEditorSettings.collaborativeEditingSettings;\n }\n if (this.documentEditorSettings.printDevicePixelRatio) {\n this.documentEditor.documentEditorSettings.printDevicePixelRatio = this.documentEditorSettings.printDevicePixelRatio;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.enableOptimizedTextMeasuring)) {\n this.documentEditor.documentEditorSettings.enableOptimizedTextMeasuring = this.documentEditorSettings.enableOptimizedTextMeasuring;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.maximumRows)) {\n this.documentEditor.documentEditorSettings.maximumRows = this.documentEditorSettings.maximumRows;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.maximumColumns)) {\n this.documentEditor.documentEditorSettings.maximumColumns = this.documentEditorSettings.maximumColumns;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.showHiddenMarks)) {\n this.documentEditor.documentEditorSettings.showHiddenMarks = this.documentEditorSettings.showHiddenMarks;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.showBookmarks)) {\n this.documentEditor.documentEditorSettings.showBookmarks = this.documentEditorSettings.showBookmarks;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.highlightEditableRanges)) {\n this.documentEditor.documentEditorSettings.highlightEditableRanges = this.documentEditorSettings.highlightEditableRanges;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.allowDragAndDrop)) {\n this.documentEditor.documentEditorSettings.allowDragAndDrop = this.documentEditorSettings.allowDragAndDrop;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.optimizeSfdt)) {\n this.documentEditor.documentEditorSettings.optimizeSfdt = this.documentEditorSettings.optimizeSfdt;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.autoResizeSettings)) {\n this.documentEditor.documentEditorSettings.autoResizeSettings = this.documentEditorSettings.autoResizeSettings;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.showRuler)) {\n this.documentEditor.documentEditorSettings.showRuler = this.documentEditorSettings.showRuler;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.colorPickerSettings)) {\n this.documentEditor.documentEditorSettings.colorPickerSettings = this.documentEditorSettings.colorPickerSettings;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.popupTarget)) {\n this.documentEditor.documentEditorSettings.popupTarget = this.documentEditorSettings.popupTarget;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.showNavigationPane)) {\n this.documentEditor.documentEditorSettings.showNavigationPane = this.documentEditorSettings.showNavigationPane;\n }\n if (!isNullOrUndefined(this.documentEditorSettings.mentionSettings)) {\n this.documentEditor.documentEditorSettings.mentionSettings = this.documentEditorSettings.mentionSettings;\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.getPersistData = function () {\n return 'documenteditor-container';\n };\n /* eslint-disable */\n DocumentEditorContainer.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableToolbar) {\n modules.push({\n member: 'toolbar', args: [this]\n });\n }\n return modules;\n };\n DocumentEditorContainer.prototype.initContainerElement = function () {\n // Toolbar container\n var isRtl = this.enableRtl;\n this.containerTarget = this.createElement('div', { className: 'e-de-ctn' });\n this.containerTarget.contentEditable = 'false';\n this.createToolbarContainer(isRtl);\n var propertiesPaneContainerBorder;\n if (!isRtl) {\n propertiesPaneContainerBorder = 'e-de-pane';\n }\n else {\n propertiesPaneContainerBorder = 'e-de-pane-rtl';\n }\n this.propertiesPaneContainer = this.createElement('div', { className: propertiesPaneContainerBorder, styles: 'display:none' });\n this.editorContainer.appendChild(this.propertiesPaneContainer);\n this.containerTarget.appendChild(this.editorContainer);\n this.statusBarElement = this.createElement('div', { className: 'e-de-status-bar' });\n if (isRtl) {\n this.statusBarElement.style.direction = 'rtl';\n }\n this.containerTarget.appendChild(this.statusBarElement);\n this.element.appendChild(this.containerTarget);\n };\n DocumentEditorContainer.prototype.createToolbarContainer = function (isRtl, isCustom) {\n if (isNullOrUndefined((this.editorContainer))) {\n this.editorContainer = this.createElement('div', { className: 'e-de-tool-ctnr-properties-pane' + (isRtl ? ' e-de-ctnr-rtl' : '') });\n }\n if (this.enableToolbar) {\n this.toolbarContainer = this.createElement('div', { className: 'e-de-ctnr-toolbar' + (isRtl ? ' e-de-ctnr-rtl' : '') });\n if (isCustom) {\n this.containerTarget.insertBefore(this.toolbarContainer, this.containerTarget.firstChild);\n }\n else {\n this.containerTarget.appendChild(this.toolbarContainer);\n }\n this.editorContainer.classList.remove('e-de-ctnr-properties-pane');\n this.editorContainer.classList.add('e-de-tool-ctnr-properties-pane');\n }\n else {\n this.editorContainer.classList.remove('e-de-tool-ctnr-properties-pane');\n this.editorContainer.classList.add('e-de-ctnr-properties-pane');\n }\n };\n DocumentEditorContainer.prototype.initializeDocumentEditor = function () {\n var id = this.element.id + '_editor';\n var documentEditorTarget = this.createElement('div', { id: id, styles: 'width:100%;height:100%' });\n this.documentEditorInternal = new DocumentEditor({\n isReadOnly: false, enableRtl: this.enableRtl,\n selectionChange: this.onSelectionChange.bind(this),\n contentChange: this.onContentChange.bind(this),\n documentChange: this.onDocumentChange.bind(this),\n requestNavigate: this.onRequestNavigate.bind(this),\n viewChange: this.onViewChange.bind(this),\n customContextMenuSelect: this.onCustomContextMenuSelect.bind(this),\n customContextMenuBeforeOpen: this.onCustomContextMenuBeforeOpen.bind(this),\n beforePaneSwitch: this.onBeforePaneSwitch.bind(this),\n commentBegin: this.onCommentBegin.bind(this),\n commentEnd: this.onCommentEnd.bind(this),\n commentDelete: this.onCommentDelete.bind(this),\n beforeAcceptRejectChanges: this.onBeforeAcceptRejectChanges.bind(this),\n beforeCommentAction: this.onCommentAction.bind(this),\n trackChange: this.onTrackChange.bind(this),\n serviceFailure: this.fireServiceFailure.bind(this),\n beforeXmlHttpRequestSend: this.beforeXmlHttpSend.bind(this),\n locale: this.locale,\n acceptTab: true,\n zIndex: this.zIndex,\n enableLocalPaste: this.enableLocalPaste,\n layoutType: this.layoutType,\n pageOutline: '#E0E0E0',\n currentUser: this.currentUser,\n userColor: this.userColor,\n height: '100%',\n width: '100%',\n enableTrackChanges: this.enableTrackChanges,\n showRevisions: true,\n showComments: true,\n enableLockAndEdit: this.enableLockAndEdit,\n enableAutoFocus: this.enableAutoFocus\n });\n this.wireEvents();\n this.customizeDocumentEditorSettings();\n this.documentEditor.enableAllModules();\n this.documentEditor.enableComment = this.enableComment;\n this.editorContainer.insertBefore(documentEditorTarget, this.editorContainer.firstChild);\n this.setFormat();\n this.documentEditor.appendTo(documentEditorTarget);\n this.documentEditor.resize();\n };\n DocumentEditorContainer.prototype.wireEvents = function () {\n window.addEventListener('resize', this.onWindowResize.bind(this));\n this.documentEditor.on(internalZoomFactorChange, this.onZoomFactorChange, this);\n this.documentEditor.on(internalviewChangeEvent, this.onViewChange, this);\n this.documentEditor.on(protectionTypeChangeEvent, this.showPropertiesPaneOnSelection, this);\n this.documentEditor.on(internalDocumentEditorSettingsChange, this.updateShowHiddenMarks, this);\n this.documentEditor.on(internalStyleCollectionChange, this.updateStyleCollection, this);\n // Internal event to trigger auto resize.\n this.documentEditor.on(internalAutoResize, this.triggerAutoResize, this);\n this.documentEditor.on(beforeAutoResize, this.onBeforeAutoResize, this);\n this.documentEditor.on(trackChanges, this.onEnableTrackChanges, this);\n this.documentEditor.on(internalOptionPaneChange, this.onOptionPaneChange, this);\n };\n DocumentEditorContainer.prototype.onWindowResize = function () {\n if (!isNullOrUndefined(this.documentEditor)) {\n this.documentEditor.isContainerResize = true;\n this.resize();\n }\n };\n DocumentEditorContainer.prototype.onOptionPaneChange = function (args) {\n //this.documentEditorSettings.showNavigationPane = args.show;\n };\n DocumentEditorContainer.prototype.onEnableTrackChanges = function (model) {\n if (model.enableTrackChanges !== this.enableTrackChanges) {\n this.enableTrackChanges = model.enableTrackChanges;\n }\n };\n DocumentEditorContainer.prototype.triggerAutoResize = function (args) {\n // Cancels the auto resize of the document editor.\n args.cancel = true;\n this.resize();\n };\n DocumentEditorContainer.prototype.onBeforeAutoResize = function (args) {\n args.element = this.element;\n };\n DocumentEditorContainer.prototype.unWireEvents = function () {\n if (isNullOrUndefined(this.documentEditor)) {\n return;\n }\n else {\n if (this.documentEditor.isDestroyed) {\n return;\n }\n }\n this.documentEditor.off(internalZoomFactorChange, this.onZoomFactorChange);\n this.documentEditor.off(internalviewChangeEvent, this.onViewChange);\n this.documentEditor.off(protectionTypeChangeEvent, this.showPropertiesPaneOnSelection);\n this.documentEditor.off(internalDocumentEditorSettingsChange, this.updateShowHiddenMarks);\n this.documentEditor.off(internalStyleCollectionChange, this.updateStyleCollection);\n };\n DocumentEditorContainer.prototype.onCommentBegin = function () {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableInsertComment(false);\n }\n };\n DocumentEditorContainer.prototype.onCommentEnd = function () {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableInsertComment(true && this.enableComment);\n }\n };\n DocumentEditorContainer.prototype.beforeXmlHttpSend = function (args) {\n this.trigger(beforeXmlHttpRequestSend, args);\n };\n DocumentEditorContainer.prototype.onCommentDelete = function (args) {\n this.trigger(commentDeleteEvent, args);\n };\n DocumentEditorContainer.prototype.onBeforeAcceptRejectChanges = function (args) {\n this.trigger(revisionActionEvent, args);\n };\n DocumentEditorContainer.prototype.onCommentAction = function (args) {\n this.trigger(beforeCommentActionEvent, args);\n };\n DocumentEditorContainer.prototype.onTrackChange = function (args) {\n this.trigger(trackChangeEvent, args);\n if (this.toolbarModule) {\n this.toolbarModule.toggleTrackChanges(args.isTrackChangesEnabled);\n }\n };\n DocumentEditorContainer.prototype.onBeforePaneSwitch = function (args) {\n this.trigger(beforePaneSwitchEvent, args);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.fireServiceFailure = function (eventArgs) {\n this.trigger(serviceFailureEvent, eventArgs);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.showHidePropertiesPane = function (show) {\n if (this.showPropertiesPane) {\n this.showPropertiesPaneOnSelection();\n }\n this.propertiesPaneContainer.style.display = show ? 'block' : 'none';\n if (this.toolbarModule) {\n this.toolbarModule.propertiesPaneButton.element.style.opacity = show ? '1' : '0.5';\n }\n this.documentEditor.resize();\n };\n DocumentEditorContainer.prototype.updateStyleCollection = function () {\n if (!isNullOrUndefined(this.tableProperties) && !isNullOrUndefined(this.tableProperties.tableTextProperties) && !isNullOrUndefined(this.tableProperties.tableTextProperties.paragraph)) {\n this.tableProperties.tableTextProperties.paragraph.updateStyleNames();\n }\n };\n /**\n * Resizes the container component and its sub elements based on given size or client size.\n * @param width The width to be applied.\n * @param height The height to be applied.\n */\n DocumentEditorContainer.prototype.resize = function (width, height) {\n if (this.element) {\n if (!this.documentEditor.isContainerResize) {\n if (isNullOrUndefined(height) && this.element && this.element.parentElement) {\n height = this.element.parentElement.clientHeight;\n }\n if (isNullOrUndefined(width) && this.element && this.element.parentElement) {\n width = this.element.parentElement.clientWidth;\n }\n if (!isNullOrUndefined(width) && width > 200) {\n this.width = width.toString();\n this.element.style.width = width + 'px';\n }\n if (!isNullOrUndefined(height) && height > 200) {\n this.height = height.toString();\n this.element.style.height = height + 'px';\n }\n }\n if (this.documentEditor) {\n this.documentEditor.resize();\n }\n if (this.toolbarModule) {\n this.toolbarModule.toolbar.refreshOverflow();\n }\n if (this.showPropertiesPane) {\n this.tableProperties.updateTabContainerHeight();\n }\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.refreshFontFamilies = function (fontFamilies) {\n if (!isNullOrUndefined(this.tableProperties) && !isNullOrUndefined(this.tableProperties.tableTextProperties) && !isNullOrUndefined(this.tableProperties.tableTextProperties.text)) {\n var text = this.tableProperties.tableTextProperties.text;\n text.fontFamily.refresh();\n for (var i = 0; i < fontFamilies.length; i++) {\n var fontValue = fontFamilies[i];\n var fontStyleValue = { 'FontName': fontValue, 'FontValue': fontValue };\n text.fontFamily.addItem(fontStyleValue, i);\n }\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onContentChange = function (args) {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableUndoRedo();\n }\n if (this.statusBar) {\n this.statusBar.updatePageCount();\n }\n var eventArgs = { source: this, operations: args.operations };\n this.trigger(contentChangeEvent, eventArgs);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onDocumentChange = function () {\n this.enableTrackChanges = this.documentEditor.enableTrackChanges;\n if (!isNullOrUndefined(this.documentSettings) && !isNullOrUndefined(this.documentEditor)\n && !isNullOrUndefined(this.documentEditor.documentSettings)) {\n this.documentSettings.compatibilityMode = this.documentEditor.documentSettings.compatibilityMode;\n }\n if (!isNullOrUndefined(this.documentEditorSettings) && !isNullOrUndefined(this.documentEditorSettings.fontFamilies)) {\n var fontFamilyValue = this.documentEditorSettings.fontFamilies;\n this.refreshFontFamilies(fontFamilyValue);\n }\n if (this.toolbarModule) {\n this.toolbarModule.isCommentEditing = false;\n this.toolbarModule.enableDisableInsertComment(true);\n this.toolbarModule.enableDisableUndoRedo();\n }\n if (this.statusBar) {\n this.statusBar.updatePageCount();\n }\n if (this.documentEditor.documentHelper.contentControlCollection.length > 0) {\n this.documentEditor.selection.isHighlightContentControlEditRegion = true;\n this.documentEditor.selection.onHighlightContentControl();\n }\n var eventArgs = { source: this };\n this.trigger(documentChangeEvent, eventArgs);\n this.updateStyleCollection();\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onSelectionChange = function () {\n var _this = this;\n setTimeout(function () {\n if (!isNullOrUndefined(_this.documentEditor)) {\n _this.showPropertiesPaneOnSelection();\n var eventArgs = { source: _this, isCompleted: _this.documentEditor.documentHelper.isSelectionCompleted };\n _this.trigger(selectionChangeEvent, eventArgs);\n _this.documentEditor.documentHelper.isSelectionCompleted = true;\n }\n });\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onZoomFactorChange = function () {\n if (this.statusBar) {\n this.statusBar.updateZoomContent();\n }\n };\n DocumentEditorContainer.prototype.updateShowHiddenMarks = function (settings) {\n this.documentEditorSettings.showHiddenMarks = settings.showHiddenMarks;\n this.tableProperties.tableTextProperties.paragraph.toggleHiddenMarks();\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onRequestNavigate = function (args) {\n if (args.linkType !== 'Bookmark') {\n var navLink = args.navigationLink;\n var link = SanitizeHtmlHelper.sanitize(navLink);\n if (args.localReference.length > 0) {\n link += '#' + args.localReference;\n }\n if (navLink.substring(0, 8) === 'file:///'\n || (navLink.substring(0, 7) === 'http://' && navLink.length > 7)\n || (navLink.substring(0, 8) === 'https://' && navLink.length > 8)\n || (navLink.substring(0, 4) === 'www.' && navLink.length > 4)\n || (navLink.substring(0, 7) === 'mailto:' && navLink.length > 7)) {\n window.open(link);\n }\n else {\n DialogUtility.alert({\n title: this.localObj.getConstant(\"Information\"),\n content: this.localObj.getConstant(\"The address of this site is not valid. Check the address and try again.\"),\n okButton: { text: this.localObj.getConstant(\"OK\") },\n closeOnEscape: true,\n });\n }\n args.isHandled = true;\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onViewChange = function (args) {\n if (this.statusBar) {\n this.statusBar.updatePageNumberOnViewChange(args);\n }\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onCustomContextMenuSelect = function (args) {\n this.trigger(customContextMenuSelectEvent, args);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.onCustomContextMenuBeforeOpen = function (args) {\n this.trigger(customContextMenuBeforeOpenEvent, args);\n };\n /**\n * @private\n */\n DocumentEditorContainer.prototype.showPropertiesPaneOnSelection = function () {\n if (((this.restrictEditing) && !this.showPropertiesPane) || isNullOrUndefined(this.tableProperties)) {\n return;\n }\n var isProtectedDocument = this.documentEditor.documentHelper.protectionType !== 'NoProtection';\n var allowFormatting = isProtectedDocument && this.documentEditor.documentHelper.restrictFormatting;\n var isSelectionInProtectecRegion = this.documentEditor.editorModule.restrictEditing;\n if (isProtectedDocument) {\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableToolBarItem(!isSelectionInProtectecRegion, true);\n }\n this.tableProperties.enableDisableElements(!allowFormatting && !isSelectionInProtectecRegion);\n this.tocProperties.enableDisableElements(!isSelectionInProtectecRegion);\n this.headerFooterProperties.enableDisableElements(!isSelectionInProtectecRegion);\n this.imageProperties.enableDisableElements(!isSelectionInProtectecRegion);\n }\n else {\n var isReadOnly = !this.documentEditor.isReadOnly;\n if (this.toolbarModule) {\n this.toolbarModule.enableDisableToolBarItem(isReadOnly, true || this.showPropertiesPane);\n }\n this.tableProperties.enableDisableElements(true);\n this.tocProperties.enableDisableElements(true);\n this.headerFooterProperties.enableDisableElements(true);\n this.imageProperties.enableDisableElements(true);\n }\n var currentContext = this.documentEditor.selectionModule.contextType;\n var isInHeaderFooter = currentContext.indexOf('Header') >= 0\n || currentContext.indexOf('Footer') >= 0;\n if (!isInHeaderFooter) {\n this.showHeaderProperties = true;\n }\n if (!this.showPropertiesPane) {\n this.showHidePropertiesPane(false);\n this.propertiesPaneContainer.style.display = 'none';\n }\n else {\n this.propertiesPaneContainer.style.display = 'block';\n if (isInHeaderFooter && this.showHeaderProperties) {\n this.showProperties('headerfooter');\n }\n else if (currentContext.indexOf('List') >= 0 || currentContext.indexOf('Text') >= 0\n && currentContext.indexOf('Table') < 0) {\n this.showProperties('text');\n }\n else if (currentContext.indexOf('Image') >= 0) {\n this.showProperties('image');\n }\n else if (currentContext.indexOf('TableOfContents') >= 0) {\n this.showProperties('toc');\n }\n else if (currentContext.indexOf('Table') >= 0) {\n this.showProperties('table');\n }\n }\n this.previousContext = this.documentEditor.selectionModule.contextType;\n if (this.toolbarModule && this.toolbarModule.toolbar) {\n this.toolbarModule.enableDisableInsertComment(!this.documentEditor.enableHeaderAndFooter && this.enableComment && !this.documentEditor.isReadOnlyMode && !this.documentEditor.selectionModule.isinFootnote && !this.documentEditor.selectionModule.isinEndnote);\n }\n };\n /**\n * @private\n * @param property\n */\n DocumentEditorContainer.prototype.showProperties = function (property) {\n if (this.toolbarModule && property !== 'headerfooter' && property !== 'toc') {\n this.toolbarModule.enableDisablePropertyPaneButton(true);\n }\n this.tableProperties.showTableProperties((property === 'table' || property === 'text'), property);\n this.imageProperties.showImageProperties(property === 'image');\n this.headerFooterProperties.showHeaderFooterPane(property === 'headerfooter');\n this.tocProperties.showTocPane(property === 'toc');\n };\n /**\n * Set the default character format for document editor container\n * @param characterFormat Specify the character format properties to be applied for document editor.\n */\n DocumentEditorContainer.prototype.setDefaultCharacterFormat = function (characterFormat) {\n this.characterFormat = characterFormat;\n this.setFormat();\n };\n /**\n * Set the default paragraph format for document editor container\n * @param paragraphFormat Specify the paragraph format properties to be applied for document editor.\n */\n DocumentEditorContainer.prototype.setDefaultParagraphFormat = function (paragraphFormat) {\n this.paragraphFormat = paragraphFormat;\n this.setFormat();\n };\n /**\n * Set the default section format for document editor container\n * @param sectionFormat Specify the section format properties to be applied for document editor.\n */\n DocumentEditorContainer.prototype.setDefaultSectionFormat = function (sectionFormat) {\n this.sectionFormat = sectionFormat;\n this.setFormat();\n };\n /**\n * Destroys all managed resources used by this object.\n */\n DocumentEditorContainer.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.element) {\n if (!this.refreshing) {\n this.element.classList.remove('e-documenteditorcontainer');\n }\n this.element.innerHTML = '';\n }\n if (!this.refreshing) {\n this.element = undefined;\n this.paragraphFormat = undefined;\n this.sectionFormat = undefined;\n this.characterFormat = undefined;\n }\n if (this.toolbarContainer && this.toolbarContainer.parentElement) {\n this.toolbarContainer.innerHTML = '';\n this.toolbarContainer.parentElement.removeChild(this.toolbarContainer);\n }\n this.toolbarContainer = undefined;\n if (this.documentEditorInternal) {\n this.unWireEvents();\n this.documentEditorInternal.destroy();\n this.documentEditorInternal = undefined;\n }\n if (this.headerFooterProperties) {\n this.headerFooterProperties.destroy();\n }\n this.headerFooterProperties = undefined;\n if (this.imageProperties) {\n this.imageProperties.destroy();\n }\n this.imageProperties = undefined;\n if (this.tocProperties) {\n this.tocProperties.destroy();\n }\n this.tocProperties = undefined;\n if (this.tableProperties) {\n this.tableProperties.destroy();\n }\n this.tableProperties = undefined;\n if (this.statusBar) {\n this.statusBar.destroy();\n }\n if (this.propertiesPaneContainer && this.propertiesPaneContainer.parentElement) {\n this.propertiesPaneContainer.innerHTML = '';\n this.propertiesPaneContainer.parentElement.removeChild(this.propertiesPaneContainer);\n }\n this.propertiesPaneContainer = undefined;\n if (this.editorContainer && this.editorContainer.parentElement) {\n this.editorContainer.innerHTML = '';\n this.editorContainer.parentElement.removeChild(this.editorContainer);\n }\n if (this.statusBarElement && this.statusBarElement.parentElement) {\n this.statusBarElement.innerHTML = '';\n this.statusBarElement.parentElement.removeChild(this.statusBarElement);\n }\n if (this.containerTarget && this.containerTarget.parentElement) {\n this.containerTarget.innerHTML = '';\n this.containerTarget.parentElement.removeChild(this.containerTarget);\n }\n this.containerTarget = undefined;\n this.statusBarElement = undefined;\n this.editorContainer = undefined;\n this.statusBar = undefined;\n this.previousContext = undefined;\n };\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"showPropertiesPane\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"enableToolbar\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"restrictEditing\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableSpellCheck\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableTrackChanges\", void 0);\n __decorate([\n Property('Pages')\n ], DocumentEditorContainer.prototype, \"layoutType\", void 0);\n __decorate([\n Property('')\n ], DocumentEditorContainer.prototype, \"currentUser\", void 0);\n __decorate([\n Property('#FFFF00')\n ], DocumentEditorContainer.prototype, \"userColor\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableLocalPaste\", void 0);\n __decorate([\n Property()\n ], DocumentEditorContainer.prototype, \"serviceUrl\", void 0);\n __decorate([\n Property(2000)\n ], DocumentEditorContainer.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableCsp\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"enableComment\", void 0);\n __decorate([\n Property('100%')\n ], DocumentEditorContainer.prototype, \"width\", void 0);\n __decorate([\n Property('320px')\n ], DocumentEditorContainer.prototype, \"height\", void 0);\n __decorate([\n Property(true)\n ], DocumentEditorContainer.prototype, \"enableAutoFocus\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"enableLockAndEdit\", void 0);\n __decorate([\n Property(false)\n ], DocumentEditorContainer.prototype, \"autoResizeOnVisibilityChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"contentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"selectionChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"documentChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"toolbarClick\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"customContextMenuSelect\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"customContextMenuBeforeOpen\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforePaneSwitch\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"commentDelete\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforeAcceptRejectChanges\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforeCommentAction\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"serviceFailure\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"trackChange\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"contentControl\", void 0);\n __decorate([\n Event()\n ], DocumentEditorContainer.prototype, \"beforeXmlHttpRequestSend\", void 0);\n __decorate([\n Complex({}, DocumentEditorSettings)\n ], DocumentEditorContainer.prototype, \"documentEditorSettings\", void 0);\n __decorate([\n Complex({}, DocumentSettings)\n ], DocumentEditorContainer.prototype, \"documentSettings\", void 0);\n __decorate([\n Property({ import: 'Import', systemClipboard: 'SystemClipboard', spellCheck: 'SpellCheck', spellCheckByPage: 'SpellCheckByPage', restrictEditing: 'RestrictEditing', canLock: 'CanLock', getPendingActions: 'GetPendingActions' })\n ], DocumentEditorContainer.prototype, \"serverActionSettings\", void 0);\n __decorate([\n Property(['New', 'Open', 'Separator', 'Undo', 'Redo', 'Separator', 'Image', 'Table', 'Hyperlink', 'Bookmark', 'TableOfContents', 'Separator', 'Header', 'Footer', 'PageSetup', 'PageNumber', 'Break', 'InsertFootnote', 'InsertEndnote', 'Separator', 'Find', 'Separator', 'Comments', 'TrackChanges', 'Separator', 'LocalClipboard', 'RestrictEditing', 'Separator', 'FormFields', 'UpdateFields', 'ContentControl'])\n ], DocumentEditorContainer.prototype, \"toolbarItems\", void 0);\n __decorate([\n Property([])\n ], DocumentEditorContainer.prototype, \"headers\", void 0);\n DocumentEditorContainer = __decorate([\n NotifyPropertyChanges\n ], DocumentEditorContainer);\n return DocumentEditorContainer;\n}(Component));\nexport { DocumentEditorContainer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\n/**\n * React Component Base\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { extend, isNullOrUndefined, setValue, getValue, isObject, onIntlChange } from '@syncfusion/ej2-base';\nvar defaulthtmlkeys = ['alt', 'className', 'disabled', 'form', 'id',\n 'readOnly', 'style', 'tabIndex', 'title', 'type', 'name',\n 'onClick', 'onFocus', 'onBlur'];\nvar delayUpdate = ['accordion', 'tab', 'splitter'];\nvar isColEName = /\\]/;\nvar ComponentBase = /** @class */ (function (_super) {\n __extends(ComponentBase, _super);\n function ComponentBase() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.mountingState = false;\n _this.attrKeys = [];\n _this.cachedTimeOut = 0;\n _this.isAppendCalled = false;\n _this.initRenderCalled = false;\n _this.isReactForeceUpdate = false;\n _this.isReact = true;\n _this.isshouldComponentUpdateCalled = false;\n _this.isCreated = false;\n return _this;\n }\n // Lifecycle methods are changed by React team and so we can deprecate this method and use\n // Reference link:https://reactjs.org/docs/react-component.html#unsafe_componentWillMount\n ComponentBase.prototype.componentDidMount = function () {\n this.refreshChild(true);\n this.canDelayUpdate = delayUpdate.indexOf(this.getModuleName()) !== -1;\n // Used timeout to resolve template binding\n // Reference link: https://github.com/facebook/react/issues/10309#issuecomment-318433235\n this.renderReactComponent();\n if (this.portals && this.portals.length) {\n this.mountingState = true;\n this.renderReactTemplates();\n this.mountingState = false;\n }\n };\n ComponentBase.prototype.componentDidUpdate = function (prev) {\n if (!this.isshouldComponentUpdateCalled && this.initRenderCalled && !this.isReactForeceUpdate) {\n if (prev !== this.props) {\n this.isshouldComponentUpdateCalled = true;\n this.updateProperties(this.props, false, prev);\n }\n }\n };\n ComponentBase.prototype.renderReactComponent = function () {\n var ele = this.reactElement;\n if (ele && !this.isAppendCalled) {\n this.isAppendCalled = true;\n this.appendTo(ele);\n }\n };\n // Lifecycle methods are changed by React team and so we can deprecate this method and use\n // Reference link:https://reactjs.org/docs/react-component.html#unsafe_componentwillreceiveprops\n /**\n * @param {Object} nextProps - Specifies the property value.\n * @returns {boolean} - Returns boolean value.\n * @private\n */\n ComponentBase.prototype.shouldComponentUpdate = function (nextProps) {\n this.isshouldComponentUpdateCalled = true;\n if (!this.initRenderCalled) {\n this.updateProperties(nextProps, true);\n return true;\n }\n if (!this.isAppendCalled) {\n clearTimeout(this.cachedTimeOut);\n this.isAppendCalled = true;\n this.appendTo(this.reactElement);\n }\n this.updateProperties(nextProps);\n return true;\n };\n ComponentBase.prototype.updateProperties = function (nextProps, silent, prev) {\n var _this = this;\n var dProps = extend({}, nextProps);\n var keys = Object.keys(nextProps);\n var prevProps = extend({}, prev || this.props);\n // The statelessTemplates props value is taken from sample level property or default component property.\n var statelessTemplates = !isNullOrUndefined(prevProps['statelessTemplates']) ? prevProps['statelessTemplates'] :\n (!isNullOrUndefined(this['statelessTemplateProps']) ? this['statelessTemplateProps'] : []);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var propkey = keys_1[_i];\n var isClassName = propkey === 'className';\n if (propkey === 'children') {\n continue;\n }\n if (!isClassName && !isNullOrUndefined(this.htmlattributes[\"\" + propkey]) &&\n this.htmlattributes[\"\" + propkey] !== dProps[\"\" + propkey]) {\n this.htmlattributes[\"\" + propkey] = dProps[\"\" + propkey];\n }\n if (this.compareValues(prevProps[\"\" + propkey], nextProps[\"\" + propkey])) {\n delete dProps[\"\" + propkey];\n }\n else if (this.attrKeys.indexOf(propkey) !== -1) {\n if (isClassName) {\n this.clsName = true;\n var propsClsName = prevProps[\"\" + propkey].split(' ');\n for (var i = 0; i < propsClsName.length; i++) {\n this.element.classList.remove(propsClsName[parseInt(i.toString(), 10)]);\n }\n var dpropsClsName = dProps[\"\" + propkey].split(' ');\n for (var j = 0; j < dpropsClsName.length; j++) {\n this.element.classList.add(dpropsClsName[parseInt(j.toString(), 10)]);\n }\n }\n else if (propkey !== 'disabled' && !Object.prototype.hasOwnProperty.call(this.properties, propkey)) {\n delete dProps[\"\" + propkey];\n }\n }\n else if (propkey === 'value' && nextProps[\"\" + propkey] === this[\"\" + propkey]) {\n delete dProps[\"\" + propkey];\n }\n else if (statelessTemplates.indexOf(propkey) > -1 && ((propkey === 'content' && typeof dProps[\"\" + propkey] === 'function') || (nextProps[\"\" + propkey].toString() === this[\"\" + propkey].toString()))) {\n delete dProps[\"\" + propkey];\n }\n }\n if (dProps['children']) {\n delete dProps['children'];\n }\n if (this.initRenderCalled && (this.canDelayUpdate || prevProps.delayUpdate)) {\n setTimeout(function () {\n _this.refreshProperties(dProps, nextProps, silent);\n });\n }\n else {\n this.refreshProperties(dProps, nextProps, silent);\n }\n };\n ComponentBase.prototype.refreshProperties = function (dProps, nextProps, silent) {\n var statelessTemplates = !isNullOrUndefined(this.props['statelessTemplates']) ? this.props['statelessTemplates'] : [];\n if (Object.keys(dProps).length) {\n if (!silent) {\n this.processComplexTemplate(dProps, this);\n }\n this.setProperties(dProps, silent);\n }\n if (statelessTemplates.indexOf('directiveTemplates') === -1) {\n this.refreshChild(silent, nextProps);\n }\n };\n ComponentBase.prototype.processComplexTemplate = function (curObject, context) {\n var compTemplate = context.complexTemplate;\n if (compTemplate) {\n for (var prop in compTemplate) {\n if (Object.prototype.hasOwnProperty.call(compTemplate, prop)) {\n var PropVal = compTemplate[\"\" + prop];\n if (curObject[\"\" + prop]) {\n setValue(PropVal, getValue(prop, curObject), curObject);\n }\n }\n }\n }\n };\n ComponentBase.prototype.getDefaultAttributes = function () {\n var _this = this;\n this.isReact = true;\n var propKeys = Object.keys(this.props);\n //let stringValue: string[] = ['autocomplete', 'dropdownlist', 'combobox'];\n var ignoreProps = ['children', 'statelessTemplates', 'immediateRender', 'isLegacyTemplate', 'delayUpdate'];\n // if ((stringValue.indexOf(this.getModuleName()) !== -1) && (!isNullOrUndefined(this.props[\"value\"]))) {\n // this.value = (<{ [key: string]: Object }>this.props)[\"value\"];\n // }\n if (!this.htmlattributes) {\n this.htmlattributes = {};\n }\n this.attrKeys = defaulthtmlkeys.concat(this.controlAttributes || []);\n for (var _i = 0, propKeys_1 = propKeys; _i < propKeys_1.length; _i++) {\n var prop = propKeys_1[_i];\n if (prop.indexOf('data-') !== -1 || prop.indexOf('aria-') !== -1 || this.attrKeys.indexOf(prop) !== -1 || (Object.keys(this.properties).indexOf(\"\" + prop) === -1 && ignoreProps.indexOf(\"\" + prop) === -1)) {\n if (this.htmlattributes[\"\" + prop] !== this.props[\"\" + prop]) {\n this.htmlattributes[\"\" + prop] = this.props[\"\" + prop];\n }\n }\n }\n if (!this.htmlattributes.ref) {\n this.htmlattributes.ref = function (ele) {\n _this.reactElement = ele;\n };\n var keycompoentns = ['autocomplete', 'combobox', 'dropdownlist', 'dropdowntree', 'multiselect',\n 'listbox', 'colorpicker', 'numerictextbox', 'textbox',\n 'uploader', 'maskedtextbox', 'slider', 'datepicker', 'datetimepicker', 'daterangepicker', 'timepicker', 'checkbox', 'switch', 'radio', 'rating', 'textarea', 'multicolumncombobox'];\n if (keycompoentns.indexOf(this.getModuleName()) !== -1) {\n this.htmlattributes.key = '' + ComponentBase.reactUid;\n ComponentBase.reactUid++;\n if (this.type && !this.htmlattributes['type']) {\n this.htmlattributes['type'] = this.multiline ? 'hidden' : this.type;\n }\n if (this.name && !this.htmlattributes['name']) {\n this.htmlattributes['name'] = this.name;\n }\n }\n }\n if (this.clsName) {\n var clsList = this.element.classList;\n var className = this.htmlattributes['className'];\n for (var i = 0; i < clsList.length; i++) {\n if ((className.indexOf(clsList[parseInt(i.toString(), 10)]) === -1)) {\n this.htmlattributes['className'] = this.htmlattributes['className'] + ' ' + clsList[parseInt(i.toString(), 10)];\n }\n }\n }\n return this.htmlattributes;\n };\n ComponentBase.prototype.trigger = function (eventName, eventProp, successHandler) {\n var _this = this;\n if (this.isDestroyed !== true && this.modelObserver) {\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n handler.call(this, eventProp);\n if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n if ((eventName === 'change' || eventName === 'input')) {\n if (this.props.onChange && eventProp.event) {\n this.props.onChange.call(undefined, {\n syntheticEvent: eventProp.event,\n nativeEvent: { text: eventProp.value },\n value: eventProp.value,\n target: this\n });\n }\n }\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n if (eventName === 'created') {\n setTimeout(function () {\n _this.isCreated = true;\n if (!_this.isDestroyed) {\n _this.modelObserver.notify(eventName, eventProp, successHandler);\n }\n }, 10);\n }\n else {\n this.modelObserver.notify(eventName, eventProp, successHandler);\n }\n this.isProtectedOnChange = prevDetection;\n }\n };\n ComponentBase.prototype.compareValues = function (value1, value2) {\n var typeVal = typeof value1;\n var typeVal2 = typeof value2;\n if (typeVal === typeVal2) {\n if (value1 === value2) {\n return true;\n }\n if ((!isNullOrUndefined(value1) && value1.constructor) !== (!isNullOrUndefined(value2) && value2.constructor)) {\n return false;\n }\n if (value1 instanceof Date ||\n value1 instanceof RegExp ||\n value1 instanceof String ||\n value1 instanceof Number) {\n return value1.toString() === value2.toString();\n }\n if (isObject(value1) || Array.isArray(value1)) {\n var tempVal = value1;\n var tempVal2 = value2;\n if (isObject(tempVal)) {\n tempVal = [value1];\n tempVal2 = [value2];\n }\n return this.compareObjects(tempVal, tempVal2).status;\n }\n if (value1.constructor &&\n value1.constructor.name === value2.constructor.name &&\n (value1.constructor.name === 'Query' ||\n value1.constructor.name === 'DataManager')) {\n if (JSON.stringify(value1) === JSON.stringify(value2)) {\n return true;\n }\n }\n }\n return false;\n };\n ComponentBase.prototype.compareObjects = function (oldProps, newProps, propName) {\n var status = true;\n var lenSimilarity = (oldProps.length === newProps.length);\n var diffArray = [];\n var templateProps = !isNullOrUndefined(this['templateProps']) ? this['templateProps'] : [];\n if (lenSimilarity) {\n for (var i = 0, len = newProps.length; i < len; i++) {\n var curObj = {};\n var oldProp = oldProps[parseInt(i.toString(), 10)];\n var newProp = newProps[parseInt(i.toString(), 10)];\n var keys = Object.keys(newProp);\n if (keys.length !== 0) {\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n var oldValue = oldProp[\"\" + key];\n var newValue = newProp[\"\" + key];\n if (key === 'items') {\n for (var _j = 0; _j < newValue.length; _j++) {\n if (this.getModuleName() === 'richtexteditor' && typeof (newValue[parseInt(_j.toString(), 10)]) === 'object') {\n return { status: true };\n }\n }\n }\n if (this.getModuleName() === 'grid' && key === 'field') {\n curObj[\"\" + key] = newValue;\n }\n if (!Object.prototype.hasOwnProperty.call(oldProp, key) || !((templateProps.length > 0 && templateProps.indexOf(\"\" + key) === -1 && typeof (newValue) === 'function') ? this.compareValues(oldValue.toString(), newValue.toString()) : this.compareValues(oldValue, newValue))) {\n if (!propName) {\n return { status: false };\n }\n status = false;\n curObj[\"\" + key] = newValue;\n }\n }\n }\n else if (newProps[parseInt(i.toString(), 10)] === oldProps[parseInt(i.toString(), 10)]) {\n status = true;\n }\n else {\n if (!propName) {\n return { status: false };\n }\n status = false;\n }\n if (this.getModuleName() === 'grid' && propName === 'columns' && isNullOrUndefined(curObj['field'])) {\n curObj['field'] = undefined;\n }\n if (Object.keys(curObj).length) {\n diffArray.push({ index: i, value: curObj, key: propName });\n }\n }\n }\n else {\n status = false;\n }\n return { status: status, changedProperties: diffArray };\n };\n ComponentBase.prototype.refreshChild = function (silent, props) {\n if (this.checkInjectedModules) {\n var prevModule = this.getInjectedModules() || [];\n var curModule = this.getInjectedServices() || [];\n for (var _i = 0, curModule_1 = curModule; _i < curModule_1.length; _i++) {\n var mod = curModule_1[_i];\n if (prevModule.indexOf(mod) === -1) {\n prevModule.push(mod);\n }\n }\n this.injectedModules = prevModule;\n }\n if (this.directivekeys) {\n var changedProps = [];\n var key = '';\n var directiveValue = this.validateChildren({}, this.directivekeys, (props || this.props));\n if (directiveValue && Object.keys(directiveValue).length) {\n if (!silent && this.skipRefresh) {\n for (var _a = 0, _b = this.skipRefresh; _a < _b.length; _a++) {\n var fields = _b[_a];\n delete directiveValue[\"\" + fields];\n }\n }\n if (this.prevProperties) {\n var dKeys = Object.keys(this.prevProperties);\n for (var i = 0; i < dKeys.length; i++) {\n key = dKeys[parseInt(i.toString(), 10)];\n if (!Object.prototype.hasOwnProperty.call(directiveValue, key)) {\n continue;\n }\n var compareOutput = this.compareObjects(this.prevProperties[\"\" + key], directiveValue[\"\" + key], key);\n if (compareOutput.status) {\n delete directiveValue[\"\" + key];\n }\n else {\n if (compareOutput.changedProperties.length) {\n changedProps = changedProps.concat(compareOutput.changedProperties);\n }\n var obj = {};\n obj[\"\" + key] = directiveValue[\"\" + key];\n this.prevProperties = extend(this.prevProperties, obj);\n }\n }\n }\n else {\n this.prevProperties = extend({}, directiveValue, {}, true);\n }\n if (changedProps.length) {\n if (this.getModuleName() === 'grid' && key === 'columns') {\n for (var _c1 = 0, allColumns = this.columns; _c1 < allColumns.length; _c1++) {\n var compareField1 = getValue('field', allColumns[parseInt(_c1.toString(), 10)]);\n var compareField2 = getValue(_c1 + '.value.field', changedProps);\n if (compareField1 === compareField2) {\n var propInstance = getValue(changedProps[parseInt(_c1.toString(), 10)].key + '.' + changedProps[parseInt(_c1.toString(), 10)].index, this);\n if (propInstance && propInstance.setProperties) {\n propInstance.setProperties(changedProps[parseInt(_c1.toString(), 10)].value);\n }\n else {\n extend(propInstance, changedProps[parseInt(_c1.toString(), 10)].value);\n }\n }\n else {\n this.setProperties(directiveValue, silent);\n }\n }\n }\n else {\n for (var _c = 0, changedProps_1 = changedProps; _c < changedProps_1.length; _c++) {\n var changes = changedProps_1[_c];\n var propInstance = getValue(changes.key + '.' + changes.index, this);\n if (propInstance && propInstance.setProperties) {\n propInstance.setProperties(changes.value);\n }\n else {\n extend(propInstance, changes.value);\n }\n }\n }\n }\n else {\n this.setProperties(directiveValue, silent);\n }\n }\n }\n };\n ComponentBase.prototype.componentWillUnmount = function () {\n clearTimeout(this.cachedTimeOut);\n var modulesName = ['dropdowntree', 'checkbox'];\n var hasModule = ((!modulesName.indexOf(this.getModuleName())) ? document.body.contains(this.element) : true);\n if (this.initRenderCalled && this.isAppendCalled && this.element && hasModule && !this.isDestroyed && this.isCreated) {\n this.destroy();\n }\n onIntlChange.offIntlEvents();\n };\n ComponentBase.prototype.appendReactElement = function (element, container) {\n var portal = ReactDOM.createPortal(element, container);\n if (!this.portals) {\n this.portals = [portal];\n }\n else {\n this.portals.push(portal);\n }\n };\n ComponentBase.prototype.renderReactTemplates = function (callback) {\n this.isReactForeceUpdate = true;\n if (callback) {\n this.forceUpdate(callback);\n }\n else {\n this.forceUpdate();\n }\n this.isReactForeceUpdate = false;\n };\n ComponentBase.prototype.clearTemplate = function (templateNames, index, callback) {\n var _this = this;\n var tempPortal = [];\n if (templateNames && templateNames.length) {\n Array.prototype.forEach.call(templateNames, function (propName) {\n var propIndexCount = 0;\n _this.portals.forEach(function (portal) {\n if (portal.propName === propName) {\n tempPortal.push(propIndexCount);\n propIndexCount++;\n }\n });\n if (!isNullOrUndefined(index) && _this.portals[index] && _this.portals[index].propName === propName) {\n _this.portals.splice(index, 1);\n }\n else {\n for (var i = 0; i < _this.portals.length; i++) {\n if (_this.portals[parseInt(i.toString(), 10)].propName === propName) {\n _this.portals.splice(i, 1);\n i--;\n }\n }\n }\n });\n }\n else {\n this.portals = [];\n }\n this.renderReactTemplates(callback);\n };\n ComponentBase.prototype.validateChildren = function (childCache, mapper, props) {\n var flag = false;\n var childs = React.Children.toArray(props.children);\n for (var _i = 0, childs_1 = childs; _i < childs_1.length; _i++) {\n var child = childs_1[_i];\n var ifield = this.getChildType(child);\n var key = mapper[\"\" + ifield];\n if (ifield && mapper) {\n var childProps = this.getChildProps(React.Children.toArray(child.props.children), key);\n if (childProps.length) {\n flag = true;\n childCache[child.type.propertyName || ifield] = childProps;\n }\n }\n }\n if (flag) {\n return childCache;\n }\n return null;\n };\n ComponentBase.prototype.getChildType = function (child) {\n if (child.type && child.type.isDirective) {\n return child.type.moduleName || '';\n }\n return '';\n };\n ComponentBase.prototype.getChildProps = function (subChild, matcher) {\n var ret = [];\n for (var _i = 0, subChild_1 = subChild; _i < subChild_1.length; _i++) {\n var child = subChild_1[_i];\n var accessProp = false;\n var key = void 0;\n if (typeof matcher === 'string') {\n accessProp = true;\n key = matcher;\n }\n else {\n key = Object.keys(matcher)[0];\n }\n var prop = child.props;\n var field = this.getChildType(child);\n if (field === key) {\n if (accessProp || !prop.children) {\n var cacheVal = extend({}, prop, {}, true);\n this.processComplexTemplate(cacheVal, child.type);\n ret.push(cacheVal);\n }\n else {\n var cachedValue = this.validateChildren(extend({}, prop), matcher[\"\" + key], prop) || prop;\n if (cachedValue['children']) {\n delete cachedValue['children'];\n }\n this.processComplexTemplate(cachedValue, child.type);\n ret.push(cachedValue);\n }\n }\n }\n return ret;\n };\n ComponentBase.prototype.getInjectedServices = function () {\n var childs = React.Children.toArray(this.props.children);\n for (var _i = 0, childs_2 = childs; _i < childs_2.length; _i++) {\n var child = childs_2[_i];\n if (child.type && child.type.isService) {\n return child.props.services;\n }\n }\n return [];\n };\n /**\n * @private\n */\n ComponentBase.reactUid = 1;\n return ComponentBase;\n}(React.Component));\nexport { ComponentBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as React from 'react';\n/**\n * Directory base\n */\nvar ComplexBase = /** @class */ (function (_super) {\n __extends(ComplexBase, _super);\n function ComplexBase() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ComplexBase.prototype.render = function () {\n return null;\n };\n ComplexBase.isDirective = true;\n return ComplexBase;\n}(React.PureComponent));\nexport { ComplexBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Dependency injection\n */\nimport * as React from 'react';\nvar Inject = /** @class */ (function (_super) {\n __extends(Inject, _super);\n function Inject() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Inject.prototype.render = function () {\n return null;\n };\n Inject.isService = true;\n return Inject;\n}(React.PureComponent));\nexport { Inject };\n","/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types */\n/**\n * Template compiler for react\n */\nimport { setTemplateEngine, getTemplateEngine, extend } from '@syncfusion/ej2-base';\nimport * as ReactDOM from 'react-dom';\nimport * as React from 'react';\n/**\n * Compile the string value to DOM elements.\n */\nvar stringCompiler = getTemplateEngine();\n/**\n * Compile the template property to the DOM elements.\n *\n * @param {any} templateElement ?\n * @param {Object} helper ?\n * @returns {Function} ?\n * @private\n */\nexport function compile(templateElement, helper) {\n if (typeof templateElement === 'string' || (templateElement.prototype && templateElement.prototype.CSPTemplate && typeof templateElement === 'function')) {\n return stringCompiler(templateElement, helper);\n }\n else {\n return function (data, component, prop, element) {\n var actTemplate = templateElement;\n var actData = data;\n if (typeof actTemplate === 'object') {\n actTemplate = templateElement.template;\n actData = extend({}, data, templateElement.data || {});\n }\n var cEle;\n if (element) {\n cEle = element;\n }\n else {\n cEle = document.createElement('div');\n }\n var rele = React.createElement(actTemplate, actData);\n var portal = ReactDOM.createPortal(rele, cEle);\n portal.propName = prop;\n if (!component.portals) {\n component.portals = [portal];\n }\n else {\n component.portals.push(portal);\n }\n if (!element) {\n return [cEle];\n }\n };\n }\n}\nsetTemplateEngine({ compile: compile });\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as React from 'react';\nimport { DocumentEditorContainer } from '@syncfusion/ej2-documenteditor';\nimport { ComponentBase, applyMixins } from '@syncfusion/ej2-react-base';\n/**\n * Represents react Document Editor Container\n * ```ts\n * \n * ```\n */\nvar DocumentEditorContainerComponent = /** @class */ (function (_super) {\n __extends(DocumentEditorContainerComponent, _super);\n function DocumentEditorContainerComponent(props) {\n var _this = _super.call(this, props) || this;\n _this.initRenderCalled = false;\n _this.checkInjectedModules = true;\n _this.statelessTemplateProps = null;\n _this.templateProps = null;\n _this.immediateRender = true;\n _this.portals = [];\n return _this;\n }\n DocumentEditorContainerComponent.prototype.render = function () {\n if (((this.element && !this.initRenderCalled) || this.refreshing) && !this.isReactForeceUpdate) {\n _super.prototype.render.call(this);\n this.initRenderCalled = true;\n }\n else {\n return React.createElement('div', this.getDefaultAttributes(), [].concat(this.props.children, this.portals));\n }\n };\n return DocumentEditorContainerComponent;\n}(DocumentEditorContainer));\nexport { DocumentEditorContainerComponent };\napplyMixins(DocumentEditorContainerComponent, [ComponentBase, React.Component]);\n","/**\n * Apply mixins for the React components.\n *\n * @param {any} derivedClass ?\n * @param {any[]} baseClass ?\n * @returns {void} ?\n * @private\n */\nexport function applyMixins(derivedClass, baseClass) {\n baseClass.forEach(function (baseClass) {\n Object.getOwnPropertyNames(baseClass.prototype).forEach(function (name) {\n if (name !== 'isMounted' && name !== 'replaceState' && name !== 'render') {\n derivedClass.prototype[\"\" + name] = baseClass.prototype[\"\" + name];\n }\n });\n });\n}\n","import { createElement, L10n, isNullOrUndefined, EventHandler, classList, Browser } from '@syncfusion/ej2-base';\nimport { Toolbar as EJ2Toolbar } from '@syncfusion/ej2-navigations';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { hideSpinner, DialogUtility } from '@syncfusion/ej2-popups';\nimport { XmlHttpRequestHandler, beforePaneSwitchEvent, toolbarClickEvent, beforeFileOpenEvent } from '../../document-editor/base/index';\nimport { SectionBreakType } from './../../index';\nimport { ListView } from '@syncfusion/ej2-lists';\nvar TOOLBAR_ID = '_toolbar';\nvar NEW_ID = '_new';\nvar OPEN_ID = '_open';\nvar UNDO_ID = '_undo';\nvar REDO_ID = '_redo';\nvar INSERT_IMAGE_ID = '_image';\nvar INSERT_IMAGE_LOCAL_ID = '_image_local';\nvar INSERT_IMAGE_ONLINE_ID = '_image_url';\nvar INSERT_TABLE_ID = '_table';\nvar INSERT_LINK_ID = '_link';\nvar BOOKMARK_ID = '_bookmark';\nvar COMMENT_ID = '_comment';\nvar TRACK_ID = '_track';\nvar TABLE_OF_CONTENT_ID = '_toc';\nvar HEADER_ID = '_header';\nvar FOOTER_ID = '_footer';\nvar PAGE_SET_UP_ID = '_page_setup';\nvar PAGE_NUMBER_ID = '_page_number';\nvar BREAK_ID = '_break';\nvar LISTVIEW_ID = '_listView';\nvar FIND_ID = '_find';\nvar CLIPBOARD_ID = '_use_local_clipboard';\nvar RESTRICT_EDITING_ID = '_restrict_edit';\nvar PAGE_BREAK = '_page_break';\nvar SECTION_BREAK = '_section_break';\nvar SECTION_BREAK_CONTINUOUS = '_section_break_continuous';\nvar COLUMN_BREAK = '_column_break';\nvar READ_ONLY = '_read_only';\nvar PROTECTIONS = '_protections';\nvar FORM_FIELDS_ID = '_form_fields';\nvar UPDATE_FIELDS_ID = '_update_fields';\nvar TEXT_FORM = '_text_form';\nvar CHECKBOX = '_checkbox';\nvar DROPDOWN = '_dropdown';\nvar FOOTNOTE_ID = '_footnote';\nvar ENDNOTE_ID = '_endnote';\nvar COLUMNS_ID = '_columns';\nvar PAGE_SET_UP = '_page_set';\nvar CONTENT_CONTROL_ID = '_content_control';\nvar RICHTEXT_CONTENT_CONTROL_ID = '_richtext_content_control';\nvar PLAINTEXT_CONTENT_CONTROL_ID = '_plaintext_content_control';\nvar COMBOBOX_CONTENT_CONTROL_ID = '_combobox_content_control';\nvar DROPDOWNDOWN_CONTENT_CONTROL_ID = '_dropdown_content_control';\nvar DATEPICKER_CONTENT_CONTROL_ID = '_datepicker_content_control';\nvar CHECKBOX_CONTENT_CONTROL_ID = '_checkbox_content_control';\nvar PICTURE_CONTENT_CONTROL_ID = '_picture_content_control';\n/**\n * Toolbar Module\n */\nvar Toolbar = /** @class */ (function () {\n /**\n * @private\n * @param {DocumentEditorContainer} container - DocumentEditorContainer object.\n */\n function Toolbar(container) {\n /**\n * @private\n */\n this.isCommentEditing = false;\n this.container = container;\n this.importHandler = new XmlHttpRequestHandler();\n }\n Object.defineProperty(Toolbar.prototype, \"documentEditor\", {\n get: function () {\n return this.container.documentEditor;\n },\n enumerable: true,\n configurable: true\n });\n Toolbar.prototype.getModuleName = function () {\n return 'toolbar';\n };\n /**\n * Enables or disables the specified Toolbar item.\n *\n * @param {number} itemIndex - Index of the toolbar items that need to be enabled or disabled.\n * @param {boolean} isEnable - Boolean value that determines whether the toolbar item should be enabled or disabled. By default, `isEnable` is set to true.\n * @returns {void}\n */\n Toolbar.prototype.enableItems = function (itemIndex, isEnable) {\n this.toolbar.enableItems(itemIndex, isEnable);\n };\n /**\n * @private\n * @param {CustomToolbarItemModel|ToolbarItem} items - Toolbar items\n * @returns {void}\n */\n Toolbar.prototype.initToolBar = function (items) {\n // items = JSON.parse(HelperMethods.sanitizeString(JSON.stringify(items)));\n this.toolbarItems = items;\n this.renderToolBar();\n this.wireEvent();\n };\n Toolbar.prototype.renderToolBar = function () {\n if (isNullOrUndefined(this.container)) {\n return;\n }\n var toolbarContainer = this.container.toolbarContainer;\n var toolbarWrapper = createElement('div', { className: 'e-de-tlbr-wrapper' });\n var toolbarTarget = createElement('div', { className: 'e-de-toolbar' });\n this.initToolbarItems();\n toolbarWrapper.appendChild(toolbarTarget);\n toolbarContainer.appendChild(toolbarWrapper);\n // Show hide pane button initialization\n var locale = this.container.localObj;\n var propertiesPaneDiv = createElement('div', { className: 'e-de-ctnr-properties-pane-btn' });\n this.buttonElement = createElement('button', { attrs: { type: 'button', 'aria-label': locale.getConstant('Hide properties pane'), 'aria-pressed': 'true' } });\n propertiesPaneDiv.appendChild(this.buttonElement);\n var cssClassName = 'e-tbar-btn e-tbtn-txt e-control e-btn e-de-showhide-btn';\n var iconCss = 'e-icons e-de-ctnr-showhide';\n if (this.container.enableRtl) {\n cssClassName += '-rtl';\n iconCss = 'e-icons e-de-ctnr-showhide e-de-flip';\n }\n this.propertiesPaneButton = new Button({\n cssClass: cssClassName,\n iconCss: iconCss\n });\n if (this.container.showPropertiesPane) {\n this.buttonElement.title = locale.getConstant('Hide properties pane');\n }\n else {\n this.buttonElement.title = locale.getConstant('Show properties pane');\n classList(propertiesPaneDiv, this.container.restrictEditing ? ['e-de-overlay'] : [], this.container.restrictEditing ? [] : ['e-de-overlay']);\n propertiesPaneDiv.classList.add('e-de-pane-disable-clr');\n }\n this.propertiesPaneButton.appendTo(this.buttonElement);\n EventHandler.add(this.buttonElement, 'click', this.showHidePropertiesPane, this);\n toolbarContainer.appendChild(propertiesPaneDiv);\n this.toolbar.appendTo(toolbarTarget);\n this.initToolbarDropdown(toolbarTarget);\n };\n Toolbar.prototype.initToolbarDropdown = function (toolbarTarget) {\n var _this = this;\n if (this.container) {\n var locale = this.container.localObj;\n var id_1 = this.container.element.id + TOOLBAR_ID;\n if (this.toolbarItems.indexOf('Image') >= 0) {\n this.imgDropDwn = new DropDownButton({\n items: [\n {\n text: locale.getConstant('Upload from computer'), iconCss: 'e-icons e-de-ctnr-upload',\n id: id_1 + INSERT_IMAGE_LOCAL_ID\n }\n ],\n //,{ text: locale.getConstant('By URL'), iconCss: 'e-icons e-de-ctnr-link', id: id + INSERT_IMAGE_ONLINE_ID }],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.imgDropDwn.appendTo('#' + id_1 + INSERT_IMAGE_ID);\n }\n if (this.toolbarItems.indexOf('PageSetup') >= 0) {\n this.PageSetUpDropDwn = new DropDownButton({\n items: [\n { text: locale.getConstant('Page Setup'), iconCss: 'e-icons e-de-ctnr-page-size', id: id_1 + PAGE_SET_UP },\n { text: locale.getConstant('Columns'), iconCss: 'e-icons e-de-ctnr-columns', id: id_1 + COLUMNS_ID }\n ],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.PageSetUpDropDwn.appendTo('#' + id_1 + PAGE_SET_UP_ID);\n }\n if (this.toolbarItems.indexOf('ContentControl') >= 0) {\n //e-btn-icon e-icons e-de-ctnr-image e-icon-left\n this.ContentControlDropDwn = new DropDownButton({\n items: [\n { text: locale.getConstant('Rich Text Content Control'), iconCss: 'e-icons e-de-ctnr-change-case', id: id_1 + RICHTEXT_CONTENT_CONTROL_ID },\n { text: locale.getConstant('Plain Text Content Control'), iconCss: 'e-icons e-de-ctnr-change-case', id: id_1 + PLAINTEXT_CONTENT_CONTROL_ID },\n { text: locale.getConstant('Picture Content Control'), iconCss: 'e-icons e-de-ctnr-image', id: id_1 + PICTURE_CONTENT_CONTROL_ID },\n { text: locale.getConstant('Combo Box Content Control'), iconCss: 'e-icons e-de-combo-box', id: id_1 + COMBOBOX_CONTENT_CONTROL_ID },\n { text: locale.getConstant('Drop-Down List Content Control'), iconCss: 'e-icons e-de-dropdown-list', id: id_1 + DROPDOWNDOWN_CONTENT_CONTROL_ID },\n { text: locale.getConstant('Date Picker Content Control'), iconCss: 'e-icons e-timeline-today', id: id_1 + DATEPICKER_CONTENT_CONTROL_ID },\n { text: locale.getConstant('Check Box Content Control'), iconCss: 'e-icons e-check-box', id: id_1 + CHECKBOX_CONTENT_CONTROL_ID }\n ],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.ContentControlDropDwn.appendTo('#' + id_1 + CONTENT_CONTROL_ID);\n }\n if (this.toolbarItems.indexOf('Break') >= 0) {\n var breakDataSource = [\n { text: locale.getConstant('Page'), iconCss: 'e-de-listview e-de-listview-icon e-icons e-de-ctnr-page-break', id: PAGE_BREAK, category: locale.getConstant('Page Breaks') },\n { text: locale.getConstant('Column'), iconCss: 'e-de-listview e-de-listview-icon e-icons e-de-ctnr-page-break-column', id: COLUMN_BREAK, category: locale.getConstant('Page Breaks') },\n { text: locale.getConstant('Next Page'), iconCss: 'e-de-listview e-de-listview-icon e-icons e-de-ctnr-section-break', id: SECTION_BREAK, category: locale.getConstant('Section Breaks') },\n { text: locale.getConstant('Continuous'), iconCss: 'e-de-listview e-de-listview-icon e-icons e-de-ctnr-section-break-continuous', id: SECTION_BREAK_CONTINUOUS, category: locale.getConstant('Section Breaks') }\n ];\n var ddbOption = {\n target: '#' + id_1 + BREAK_ID + LISTVIEW_ID,\n cssClass: 'e-caret-hide'\n };\n this.breakDropDwn = new DropDownButton(ddbOption, '#' + id_1 + BREAK_ID);\n this.breakListView = new ListView({\n dataSource: breakDataSource,\n width: '170px',\n fields: { iconCss: 'iconCss', groupBy: 'category' },\n showIcon: true,\n select: this.onListViewSelection.bind(this)\n });\n this.breakListView.appendTo('#' + id_1 + BREAK_ID + LISTVIEW_ID);\n }\n this.filePicker = createElement('input', {\n attrs: { type: 'file', accept: '.doc,.docx,.rtf,.txt,.htm,.html,.sfdt' }, className: 'e-de-ctnr-file-picker'\n });\n if (Browser.isIE) {\n document.body.appendChild(this.filePicker);\n }\n this.imagePicker = createElement('input', {\n attrs: { type: 'file', accept: '.jpg,.jpeg,.png,.bmp,.svg' }, className: 'e-de-ctnr-file-picker'\n });\n if (Browser.isIE) {\n document.body.appendChild(this.imagePicker);\n }\n if (this.toolbarItems.indexOf('LocalClipboard') >= 0) {\n this.toggleButton(id_1 + CLIPBOARD_ID, this.container.enableLocalPaste);\n }\n if (this.toolbarItems.indexOf('TrackChanges') >= 0) {\n this.toggleButton(id_1 + TRACK_ID, this.container.enableTrackChanges);\n }\n if (this.toolbarItems.indexOf('RestrictEditing') >= 0) {\n this.toggleButton(id_1 + RESTRICT_EDITING_ID, this.container.restrictEditing);\n var restrictIconCss = '';\n if (this.container.restrictEditing) {\n restrictIconCss = ' e-de-selected-item';\n }\n this.restrictDropDwn = new DropDownButton({\n items: [\n { text: locale.getConstant('Read only'), id: id_1 + READ_ONLY, iconCss: 'e-icons' + restrictIconCss },\n { text: locale.getConstant('Protections'), id: id_1 + PROTECTIONS, iconCss: 'e-icons' }\n ],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this),\n beforeItemRender: function (args) {\n _this.onBeforeRenderRestrictDropdown(args, id_1);\n }\n });\n this.restrictDropDwn.appendTo('#' + id_1 + RESTRICT_EDITING_ID);\n }\n if (this.toolbarItems.indexOf('FormFields') >= 0) {\n this.formFieldDropDown = new DropDownButton({\n items: [\n { text: locale.getConstant('Text Form'), iconCss: 'e-icons e-de-textform', id: id_1 + TEXT_FORM },\n { text: locale.getConstant('Check Box'), iconCss: 'e-icons e-de-checkbox-form', id: id_1 + CHECKBOX },\n { text: locale.getConstant('DropDown'), iconCss: 'e-icons e-de-dropdownform', id: id_1 + DROPDOWN }\n ],\n cssClass: 'e-de-toolbar-btn-first e-caret-hide',\n select: this.onDropDownButtonSelect.bind(this)\n });\n this.formFieldDropDown.appendTo('#' + id_1 + FORM_FIELDS_ID);\n }\n }\n };\n Toolbar.prototype.onListViewSelection = function (args) {\n var parentId = this.container.element.id + TOOLBAR_ID;\n var id = args.item.id;\n if (id === parentId + BREAK_ID + LISTVIEW_ID + '_' + PAGE_BREAK) {\n this.container.documentEditor.editorModule.insertPageBreak();\n }\n else if (id === parentId + BREAK_ID + LISTVIEW_ID + '_' + SECTION_BREAK) {\n this.container.documentEditor.editorModule.insertSectionBreak();\n }\n else if (id === parentId + BREAK_ID + LISTVIEW_ID + '_' + SECTION_BREAK_CONTINUOUS) {\n this.container.documentEditor.editorModule.insertSectionBreak(SectionBreakType.Continuous);\n }\n else if (id === parentId + BREAK_ID + LISTVIEW_ID + '_' + COLUMN_BREAK) {\n this.container.documentEditor.editorModule.insertColumnBreak();\n }\n args.item.classList.remove('e-active');\n };\n Toolbar.prototype.onBeforeRenderRestrictDropdown = function (args, id) {\n var selectedIcon = args.element.getElementsByClassName('e-menu-icon')[0];\n if (!isNullOrUndefined(selectedIcon)) {\n if (args.item.id === id + READ_ONLY) {\n this.toggleRestrictIcon(selectedIcon, this.container.restrictEditing);\n }\n if (args.item.id === id + PROTECTIONS) {\n var restrictPane = document.getElementsByClassName('e-de-restrict-pane')[0];\n if (!isNullOrUndefined(restrictPane)) {\n var toggleProtection = !(restrictPane.style.display === 'none');\n this.toggleRestrictIcon(selectedIcon, toggleProtection);\n }\n }\n }\n };\n Toolbar.prototype.toggleRestrictIcon = function (icon, toggle) {\n if (toggle) {\n icon.classList.add('e-de-selected-item');\n }\n else {\n icon.classList.remove('e-de-selected-item');\n }\n };\n Toolbar.prototype.showHidePropertiesPane = function () {\n var paneDiv = document.getElementsByClassName('e-de-ctnr-properties-pane-btn')[0];\n var locale = this.container.localObj;\n if (this.container.propertiesPaneContainer.style.display === 'none') {\n this.container.showPropertiesPane = true;\n paneDiv.classList.remove('e-de-pane-disable-clr');\n this.buttonElement.title = locale.getConstant('Hide properties pane');\n this.buttonElement.setAttribute('aria-label', locale.getConstant('Hide properties pane'));\n this.buttonElement.setAttribute('aria-pressed', 'true');\n classList(paneDiv, ['e-de-pane-enable-clr'], []);\n this.container.trigger(beforePaneSwitchEvent, { type: 'PropertiesPane' });\n }\n else if (this.container.previousContext.indexOf('Header') >= 0\n || this.container.previousContext.indexOf('Footer') >= 0) {\n this.container.showHeaderProperties = !this.container.showHeaderProperties;\n }\n else {\n this.container.showPropertiesPane = false;\n paneDiv.classList.remove('e-de-pane-enable-clr');\n this.buttonElement.title = locale.getConstant('Show properties pane');\n this.buttonElement.setAttribute('aria-label', locale.getConstant('Show properties pane'));\n this.buttonElement.setAttribute('aria-pressed', 'false');\n classList(paneDiv, ['e-de-pane-disable-clr'], []);\n }\n this.enableDisablePropertyPaneButton(this.container.showPropertiesPane);\n this.container.showPropertiesPaneOnSelection();\n this.documentEditor.focusIn();\n };\n Toolbar.prototype.onWrapText = function (text) {\n var content = '';\n var index = text.lastIndexOf(' ');\n if (index !== -1) {\n content = text.slice(0, index);\n text.slice(index);\n content += '
      ' + text.slice(index) + '
      ';\n }\n else {\n content = text;\n }\n return content;\n };\n Toolbar.prototype.wireEvent = function () {\n this.propertiesPaneButton.on('click', this.togglePropertiesPane.bind(this));\n EventHandler.add(this.filePicker, 'change', this.onFileChange, this);\n EventHandler.add(this.imagePicker, 'change', this.onImageChange, this);\n };\n Toolbar.prototype.initToolbarItems = function () {\n this.toolbar = new EJ2Toolbar({\n enableRtl: this.container.enableRtl,\n clicked: this.clickHandler.bind(this),\n items: this.getToolbarItems()\n });\n };\n /**\n * @private\n * @param {CustomToolbarItemModel|ToolbarItem} items - Toolbar items\n * @returns {void}\n */\n Toolbar.prototype.reInitToolbarItems = function (items) {\n var _this = this;\n // items = JSON.parse(HelperMethods.sanitizeString(JSON.stringify(items)));\n for (var i = 0; i < items.length; i++) {\n switch (items[parseInt(i.toString(), 10)]) {\n case 'RestrictEditing':\n if (!isNullOrUndefined(this.restrictDropDwn)) {\n this.restrictDropDwn.destroy();\n }\n break;\n case 'Break':\n if (!isNullOrUndefined(this.breakDropDwn)) {\n this.breakDropDwn.destroy();\n }\n break;\n case 'PageSetup':\n if (!isNullOrUndefined(this.PageSetUpDropDwn)) {\n this.PageSetUpDropDwn.destroy();\n }\n break;\n case 'Image':\n if (!isNullOrUndefined(this.imgDropDwn)) {\n this.imgDropDwn.destroy();\n }\n break;\n case 'FormFields':\n if (!isNullOrUndefined(this.formFieldDropDown)) {\n this.formFieldDropDown.destroy();\n }\n break;\n }\n }\n this.toolbarItems = items;\n var toolbarTarget = this.container.toolbarContainer;\n this.toolbar.items = this.getToolbarItems();\n /* eslint-disable @typescript-eslint/indent */\n this.toolbarTimer = Number(setTimeout(function () {\n if (_this.toolbarTimer) {\n clearTimeout(_this.toolbarTimer);\n }\n _this.initToolbarDropdown(toolbarTarget);\n if (items.indexOf('Open') >= 0) {\n EventHandler.add(_this.filePicker, 'change', _this.onFileChange, _this);\n }\n if (items.indexOf('Image') >= 0) {\n EventHandler.add(_this.imagePicker, 'change', _this.onImageChange, _this);\n }\n }, 200));\n };\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Toolbar.prototype.getToolbarItems = function () {\n var locale = this.container.localObj;\n var id = this.container.element.id + TOOLBAR_ID;\n var toolbarItems = [];\n var className;\n var tItem = this.toolbarItems;\n for (var i = 0; i < this.toolbarItems.length; i++) {\n if (i === 0) {\n className = 'e-de-toolbar-btn-start';\n }\n else if ((tItem[i + 1] === 'Separator') && (tItem[i - 1] === 'Separator')) {\n className = 'e-de-toolbar-btn';\n }\n else if (tItem[i + 1] === 'Separator') {\n className = 'e-de-toolbar-btn-last';\n }\n else if (tItem[i - 1] === 'Separator') {\n className = 'e-de-toolbar-btn-first';\n }\n else if (i === (this.toolbarItems.length - 1)) {\n className = 'e-de-toolbar-btn-end';\n }\n else {\n className = 'e-de-toolbar-btn-middle';\n }\n switch (tItem[parseInt(i.toString(), 10)]) {\n case 'Separator':\n toolbarItems.push({\n type: 'Separator', cssClass: 'e-de-separator'\n });\n break;\n case 'New':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-new', tooltipText: locale.getConstant('Create a new document'),\n id: id + NEW_ID, text: locale.getConstant('New'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Create a new document') }\n });\n break;\n case 'Open':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-open', tooltipText: locale.getConstant('Open a document'), id: id + OPEN_ID,\n text: locale.getConstant('Open'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Open a document') }\n });\n break;\n case 'Undo':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-undo', tooltipText: locale.getConstant('Undo Tooltip'),\n id: id + UNDO_ID, text: locale.getConstant('Undo'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Undo Tooltip') }\n });\n break;\n case 'Redo':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-redo', tooltipText: locale.getConstant('Redo Tooltip'),\n id: id + REDO_ID, text: locale.getConstant('Redo'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Redo Tooltip') }\n });\n break;\n case 'Comments':\n toolbarItems.push({\n prefixIcon: 'e-de-cnt-cmt-add',\n tooltipText: locale.getConstant('Show comments'),\n id: id + COMMENT_ID, text: locale.getConstant('Comments'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Show comments') }\n });\n break;\n case 'TrackChanges':\n toolbarItems.push({\n prefixIcon: 'e-de-cnt-track',\n tooltipText: locale.getConstant('Track Changes'),\n id: id + TRACK_ID, text: this.onWrapText(locale.getConstant('TrackChanges')), cssClass: className,\n htmlAttributes: { 'aria-label': locale.getConstant('TrackChanges'), 'aria-pressed': this.container.enableTrackChanges, role: 'button', 'aria-hidden': 'true' }\n });\n break;\n case 'Image':\n toolbarItems.push({\n template: '',\n id: id + INSERT_IMAGE_ID, htmlAttributes: { 'aria-label': locale.getConstant('Insert inline picture from a file'), 'aria-haspopup': false }\n });\n break;\n case 'Table':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-table', tooltipText: locale.getConstant('Insert a table into the document'),\n id: id + INSERT_TABLE_ID, text: locale.getConstant('Table'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Insert a table into the document'), 'aria-haspopup': true }\n });\n break;\n case 'Hyperlink':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-link',\n tooltipText: locale.getConstant('Create Hyperlink'),\n id: id + INSERT_LINK_ID, text: locale.getConstant('Link'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Create Hyperlink'), 'aria-haspopup': true }\n });\n break;\n case 'Bookmark':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-bookmark',\n tooltipText: locale.getConstant('Insert a bookmark in a specific place in this document'),\n id: id + BOOKMARK_ID, text: locale.getConstant('Bookmark'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Insert a bookmark in a specific place in this document'), 'aria-haspopup': true }\n });\n break;\n case 'TableOfContents':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-tableofcontent',\n tooltipText: locale.getConstant('Provide an overview of your document by adding a table of contents'),\n id: id + TABLE_OF_CONTENT_ID, text: this.onWrapText(locale.getConstant('Table of Contents')),\n cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Table of Contents') }\n });\n break;\n case 'Header':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-header', tooltipText: locale.getConstant('Add or edit the header'),\n id: id + HEADER_ID, text: locale.getConstant('Header'), cssClass: className,\n htmlAttributes: { 'aria-label': locale.getConstant('Add or edit the header') }\n });\n break;\n case 'Footer':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-footer', tooltipText: locale.getConstant('Add or edit the footer'),\n id: id + FOOTER_ID, text: locale.getConstant('Footer'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Add or edit the footer') }\n });\n break;\n case 'PageSetup':\n toolbarItems.push({\n template: '',\n id: id + PAGE_SET_UP_ID, htmlAttributes: { 'aria-label': locale.getConstant('Page Setup') }\n });\n break;\n case 'PageNumber':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-pagenumber', tooltipText: locale.getConstant('Add page numbers'),\n id: id + PAGE_NUMBER_ID, text: this.onWrapText(locale.getConstant('Page Number')),\n cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Page Number') }\n });\n break;\n case 'Break':\n toolbarItems.push({\n template: '
      ',\n id: id + BREAK_ID, htmlAttributes: { 'aria-label': locale.getConstant('Break') }\n });\n break;\n case 'Find':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-find', tooltipText: locale.getConstant('Find Text'),\n id: id + FIND_ID, text: locale.getConstant('Find'), cssClass: className, htmlAttributes: { 'aria-label': locale.getConstant('Find Text') }\n });\n break;\n case 'LocalClipboard':\n toolbarItems.push({\n prefixIcon: 'e-de-ctnr-paste',\n tooltipText: locale.getConstant('Toggle between the internal clipboard and system clipboard'),\n id: id + CLIPBOARD_ID, text: this.onWrapText(locale.getConstant('Local Clipboard')),\n cssClass: className,\n htmlAttributes: { 'aria-label': locale.getConstant('Local Clipboard'), 'aria-pressed': this.container.enableLocalPaste, role: 'button', 'aria-hidden': 'true' }\n });\n break;\n case 'RestrictEditing':\n toolbarItems.push({\n template: '',\n htmlAttributes: { 'aria-label': locale.getConstant('Restrict editing') }\n });\n break;\n case 'FormFields':\n toolbarItems.push({\n template: '',\n id: id + FORM_FIELDS_ID,\n htmlAttributes: { 'aria-label': locale.getConstant('Form Fields') }\n });\n break;\n case 'UpdateFields':\n toolbarItems.push({\n prefixIcon: 'e-de-update-field', tooltipText: locale.getConstant('Update cross reference fields'),\n id: id + UPDATE_FIELDS_ID, text: this.onWrapText(locale.getConstant('Update Fields')),\n cssClass: className + ' e-de-formfields',\n htmlAttributes: { 'aria-label': locale.getConstant('Update cross reference fields') }\n });\n break;\n case 'InsertFootnote':\n toolbarItems.push({\n prefixIcon: 'e-de-footnote', tooltipText: locale.getConstant('Footnote Tooltip'),\n text: this.onWrapText(locale.getConstant('Insert Footnote')), id: id + FOOTNOTE_ID,\n cssClass: className,\n htmlAttributes: { 'aria-label': locale.getConstant('Insert Footnote') }\n });\n break;\n case 'InsertEndnote':\n toolbarItems.push({\n prefixIcon: 'e-de-endnote', tooltipText: locale.getConstant('Endnote Tooltip'),\n text: this.onWrapText(locale.getConstant('Insert Endnote')), id: id + ENDNOTE_ID,\n cssClass: className,\n htmlAttributes: { 'aria-label': locale.getConstant('Insert Endnote') }\n });\n break;\n case 'ContentControl':\n toolbarItems.push({\n template: '',\n id: id + CONTENT_CONTROL_ID, htmlAttributes: { 'aria-label': locale.getConstant('Content Control') }\n });\n break;\n default:\n //Here we need to process the items\n toolbarItems.push(tItem[parseInt(i.toString(), 10)]);\n break;\n }\n }\n /* eslint-disable */\n for (var i = 0; i < toolbarItems.length; i++) {\n var tabindex = void 0;\n if (toolbarItems[i].text !== 'Separator') {\n tabindex = i.toString();\n toolbarItems[i].htmlattributes = { 'tabindex': tabindex };\n }\n }\n /* eslint-enable */\n return toolbarItems;\n };\n Toolbar.prototype.clickHandler = function (args) {\n var id = this.container.element.id + TOOLBAR_ID;\n switch (args.item.id) {\n case id + NEW_ID:\n this.container.documentEditor.openBlank();\n this.documentEditor.focusIn();\n break;\n case id + OPEN_ID:\n this.filePicker.value = '';\n this.filePicker.click();\n this.documentEditor.focusIn();\n break;\n case id + UNDO_ID:\n this.container.documentEditor.editorHistoryModule.undo();\n break;\n case id + REDO_ID:\n this.container.documentEditor.editorHistoryModule.redo();\n break;\n case id + INSERT_TABLE_ID:\n this.container.documentEditor.showDialog('Table');\n break;\n case id + INSERT_LINK_ID:\n this.container.documentEditor.showDialog('Hyperlink');\n break;\n case id + BOOKMARK_ID:\n this.container.documentEditor.showDialog('Bookmark');\n break;\n case id + COMMENT_ID:\n this.documentEditor.editorModule.isUserInsert = true;\n this.documentEditor.editorModule.insertComment('');\n this.documentEditor.editorModule.isUserInsert = false;\n break;\n case id + TRACK_ID:\n this.toggleTrackChangesInternal(args.item.id);\n break;\n case id + HEADER_ID:\n this.container.documentEditor.selectionModule.goToHeader();\n this.container.statusBar.toggleWebLayout();\n break;\n case id + TABLE_OF_CONTENT_ID:\n this.onToc();\n break;\n case id + FOOTER_ID:\n this.container.documentEditor.selectionModule.goToFooter();\n this.container.statusBar.toggleWebLayout();\n break;\n // case id + PAGE_SET_UP_ID:\n // this.container.documentEditor.showDialog('PageSetup');\n // break;\n case id + PAGE_NUMBER_ID:\n this.container.documentEditor.editorModule.insertPageNumber();\n break;\n case id + FIND_ID:\n this.container.documentEditor.showOptionsPane();\n break;\n case id + CLIPBOARD_ID:\n this.toggleLocalPaste(args.item.id);\n break;\n case id + UPDATE_FIELDS_ID:\n this.documentEditor.updateFields();\n break;\n case id + FOOTNOTE_ID:\n this.documentEditor.editorModule.insertFootnote();\n break;\n case id + ENDNOTE_ID:\n this.documentEditor.editorModule.insertEndnote();\n break;\n default:\n this.container.trigger(toolbarClickEvent, args);\n break;\n }\n if (args.item.id === id + NEW_ID || args.item.id === id + OPEN_ID || args.item.id === id + UNDO_ID || args.item.id === REDO_ID\n || args.item.id === id + COMMENT_ID || args.item.id === id + TRACK_ID || args.item.id === id + HEADER_ID\n || args.item.id === id + TABLE_OF_CONTENT_ID || args.item.id === id + FOOTER_ID || args.item.id === id + PAGE_NUMBER_ID ||\n args.item.id === id + CLIPBOARD_ID || args.item.id === id + UPDATE_FIELDS_ID || args.item.id === id + FOOTNOTE_ID\n || args.item.id === id + ENDNOTE_ID || args.item.id === id + PAGE_SET_UP_ID ||\n args.item.id === id + BREAK_ID || args.item.id === id + RESTRICT_EDITING_ID || args.item.id === id + FORM_FIELDS_ID) {\n this.documentEditor.focusIn();\n }\n };\n Toolbar.prototype.toggleLocalPaste = function (id) {\n this.container.enableLocalPaste = !this.container.enableLocalPaste;\n this.toggleButton(id, this.container.enableLocalPaste);\n };\n Toolbar.prototype.toggleEditing = function () {\n this.container.restrictEditing = !this.container.restrictEditing;\n this.container.showPropertiesPane = !this.container.restrictEditing;\n };\n /**\n * @private\n * @param {boolean} enable - Enable/Disable restrictEditing changes toolbar item.\n * @returns {void}\n */\n Toolbar.prototype.toggleRestrictEditing = function (enable) {\n var restrictEditingId = this.container.element.id + TOOLBAR_ID + RESTRICT_EDITING_ID;\n var element = document.getElementById(restrictEditingId);\n if (element) {\n this.toggleButton(restrictEditingId, enable);\n }\n };\n Toolbar.prototype.toggleButton = function (id, toggle) {\n var element = document.getElementById(id);\n if (toggle) {\n classList(element, ['e-btn-toggle'], []);\n element.setAttribute('aria-pressed', 'true');\n }\n else {\n classList(element, [], ['e-btn-toggle']);\n element.setAttribute('aria-pressed', 'false');\n }\n };\n Toolbar.prototype.toggleTrackChangesInternal = function (id, enable) {\n if (!isNullOrUndefined(enable)) {\n this.container.enableTrackChanges = !enable;\n }\n this.container.enableTrackChanges = !this.container.enableTrackChanges;\n this.toggleButton(id, this.container.enableTrackChanges);\n };\n Toolbar.prototype.togglePropertiesPane = function () {\n this.container.showPropertiesPane = !this.container.showPropertiesPane;\n };\n Toolbar.prototype.onDropDownButtonSelect = function (args) {\n var _this = this;\n var parentId = this.container.element.id + TOOLBAR_ID;\n var id = args.item.id;\n if (id === parentId + INSERT_IMAGE_LOCAL_ID) {\n this.imagePicker.value = '';\n this.imagePicker.click();\n }\n else if (id === parentId + PAGE_SET_UP) {\n this.container.documentEditor.showDialog('PageSetup');\n }\n else if (id === parentId + COLUMNS_ID) {\n this.container.documentEditor.showDialog('Columns');\n }\n else if (id === parentId + DATEPICKER_CONTENT_CONTROL_ID) {\n this.container.documentEditor.editor.insertContentControl('Date');\n }\n else if (id === parentId + CHECKBOX_CONTENT_CONTROL_ID) {\n this.container.documentEditor.editor.insertContentControl('CheckBox');\n }\n else if (id === parentId + COMBOBOX_CONTENT_CONTROL_ID) {\n this.container.documentEditor.editor.insertContentControl('ComboBox');\n }\n else if (id === parentId + RICHTEXT_CONTENT_CONTROL_ID) {\n this.container.documentEditor.editor.insertContentControl('RichText');\n }\n else if (id === parentId + PLAINTEXT_CONTENT_CONTROL_ID) {\n this.container.documentEditor.editor.insertContentControl('Text');\n }\n else if (id === parentId + PICTURE_CONTENT_CONTROL_ID) {\n this.container.documentEditor.showDialog('PictureContentControl');\n }\n else if (id === parentId + DROPDOWNDOWN_CONTENT_CONTROL_ID) {\n this.container.documentEditor.editor.insertContentControl('DropDownList');\n }\n else if (id === parentId + INSERT_IMAGE_ONLINE_ID) {\n // Need to implement image dialog;\n }\n else if (id === parentId + READ_ONLY) {\n this.toggleEditing();\n }\n else if (id === parentId + PROTECTIONS) {\n this.documentEditor.documentHelper.restrictEditingPane.showHideRestrictPane(true);\n }\n else if (id === parentId + CHECKBOX) {\n this.documentEditor.editorModule.insertFormField('CheckBox');\n }\n else if (id === parentId + DROPDOWN) {\n this.documentEditor.editorModule.insertFormField('DropDown');\n }\n else if (id === parentId + TEXT_FORM) {\n this.documentEditor.editorModule.insertFormField('Text');\n }\n setTimeout(function () {\n _this.documentEditor.focusIn();\n }, 30);\n };\n Toolbar.prototype.onFileChange = function () {\n var _this = this;\n var file = this.filePicker.files[0];\n var filesize = file.size;\n var check;\n var eventArgs = { fileSize: filesize, isCanceled: check };\n this.documentEditor.trigger(beforeFileOpenEvent, eventArgs);\n if (eventArgs.isCanceled) {\n return;\n }\n if (file) {\n var formatType_1 = file.name.substr(file.name.lastIndexOf('.'));\n if (formatType_1 === '.sfdt' || formatType_1 === '.txt') {\n var fileReader_1 = new FileReader();\n fileReader_1.onload = function () {\n if (formatType_1 === '.txt') {\n _this.container.documentEditor.documentHelper.openTextFile(fileReader_1.result);\n }\n else {\n /* eslint-disable */\n _this.container.documentEditor.open(fileReader_1.result);\n /* eslint-enable */\n }\n };\n fileReader_1.readAsText(file);\n }\n else {\n if (this.isSupportedFormatType(formatType_1.toLowerCase())) {\n //this.convertToSfdt(file);\n this.documentEditor.open(file);\n }\n else {\n var localizeValue = new L10n('documenteditor', this.documentEditor.defaultLocale);\n DialogUtility.alert({\n content: localizeValue.getConstant('Unsupported format'),\n closeOnEscape: true, showCloseIcon: true,\n position: { X: 'center', Y: 'center' }\n }).enableRtl = this.container.enableRtl;\n }\n }\n this.container.documentEditor.documentName = file.name.substr(0, file.name.lastIndexOf('.'));\n }\n };\n Toolbar.prototype.isSupportedFormatType = function (formatType) {\n switch (formatType) {\n case '.dotx':\n case '.docx':\n case '.docm':\n case '.dotm':\n case '.dot':\n case '.doc':\n case '.rtf':\n case '.txt':\n case '.xml':\n case '.html':\n return true;\n default:\n return false;\n }\n };\n // private convertToSfdt(file: File): void {\n // showSpinner(this.container.containerTarget);\n // this.importHandler.url = this.container.serviceUrl + this.container.serverActionSettings.import;\n // this.importHandler.onSuccess = this.successHandler.bind(this);\n // this.importHandler.onFailure = this.failureHandler.bind(this);\n // this.importHandler.onError = this.failureHandler.bind(this);\n // this.importHandler.customHeaders = this.container.headers;\n // const httprequestEventArgs: XmlHttpRequestEventArgs = { serverActionType: 'Import', headers: this.container.headers, timeout: 0, cancel: false, withCredentials: false };\n // this.container.trigger(beforeXmlHttpRequestSend, httprequestEventArgs);\n // const formData: FormData = new FormData();\n // formData.append('files', file);\n // if (httprequestEventArgs.cancel) {\n // hideSpinner(this.container.containerTarget);\n // } else {\n // this.importHandler.send(formData, httprequestEventArgs);\n // }\n // }\n /* eslint-disable @typescript-eslint/no-explicit-any */\n Toolbar.prototype.failureHandler = function (args) {\n if (args.name === 'onError') {\n DialogUtility.alert({\n content: this.container.localObj.getConstant('Error in establishing connection with web server'),\n closeOnEscape: true, showCloseIcon: true,\n position: { X: 'center', Y: 'center' }\n }).enableRtl = this.container.enableRtl;\n }\n else {\n alert('Failed to load the file');\n this.documentEditor.fireServiceFailure(args);\n }\n hideSpinner(this.container.containerTarget);\n };\n Toolbar.prototype.successHandler = function (result) {\n /* eslint-disable */\n this.container.documentEditor.open(result.data);\n hideSpinner(this.container.containerTarget);\n /* eslint-enable */\n };\n /* eslint-enable @typescript-eslint/no-explicit-any */\n Toolbar.prototype.onImageChange = function () {\n var _this = this;\n var file = this.imagePicker.files[0];\n var fileReader = new FileReader();\n fileReader.onload = function () {\n _this.insertImage(fileReader.result);\n };\n fileReader.readAsDataURL(file);\n };\n Toolbar.prototype.insertImage = function (data) {\n var image = document.createElement('img');\n var container = this.container;\n image.addEventListener('load', function () {\n container.documentEditor.editorModule.insertImageInternal(data, true, this.width, this.height, this.alt);\n });\n image.src = data;\n };\n Toolbar.prototype.enableDisableFormField = function (enable) {\n var ele = document.getElementById('container_toolbar_form_fields');\n if (!isNullOrUndefined(ele)) {\n this.toolbar.enableItems(ele.parentElement, enable);\n }\n };\n /**\n * @private\n * @param {boolean} enable - Emable/Disable insert comment toolbar item.\n * @returns {void}\n */\n Toolbar.prototype.enableDisableInsertComment = function (enable) {\n this.isCommentEditing = !enable;\n var id = this.container.element.id + TOOLBAR_ID;\n var commentId = id + COMMENT_ID;\n var element = document.getElementById(commentId);\n if (!this.container.enableComment && element) {\n this.toolbar.removeItems(element.parentElement);\n }\n else if (element) {\n if (!isNullOrUndefined(this.documentEditor) && (this.documentEditor.isReadOnly ||\n this.documentEditor.documentHelper.isDocumentProtected)) {\n enable = this.documentEditor.documentHelper.isCommentOnlyMode || !this.documentEditor.isReadOnlyMode;\n }\n this.toolbar.enableItems(element.parentElement, enable);\n }\n };\n /**\n * @private\n * @param {boolean} enable - Emable/Disable track changes toolbar item.\n * @returns {void}\n */\n Toolbar.prototype.toggleTrackChanges = function (enable) {\n var trackId = this.container.element.id + TOOLBAR_ID + TRACK_ID;\n var element = document.getElementById(trackId);\n if (element) {\n this.toggleTrackChangesInternal(trackId, enable);\n }\n };\n // /**\n // * @private\n // */\n // public enableDisableTrackChanges(enable: boolean): void {\n // let id: string = this.container.element.id + TOOLBAR_ID + TRACK_ID;\n // if (!isNullOrUndefined(this.documentEditor) && (this.documentEditor.isReadOnly ||\n // this.documentEditor.documentHelper.isDocumentProtected)) {\n // enable = false;\n // }\n // this.toggleTrackChanges(id, enable);\n // }\n /**\n * @private\n * @param {boolean} enable - Enable/Diable toolbar items.\n * @param {boolean} isProtectedContent - Define whether document is protected.\n * @returns {void}\n */\n Toolbar.prototype.enableDisableToolBarItem = function (enable, isProtectedContent) {\n if (!isNullOrUndefined(this.container.element)) {\n var id = this.container.element.id + TOOLBAR_ID;\n for (var _i = 0, _a = this.toolbar.items; _i < _a.length; _i++) {\n var item = _a[_i];\n var itemId = item.id;\n if (itemId !== id + NEW_ID && itemId !== id + OPEN_ID && itemId !== id + FIND_ID &&\n itemId !== id + CLIPBOARD_ID && itemId !== id + RESTRICT_EDITING_ID\n && item.type !== 'Separator') {\n if (enable && this.isCommentEditing && itemId === id + COMMENT_ID) {\n continue;\n }\n if (itemId !== id + UNDO_ID && itemId !== id + REDO_ID && itemId !== id + INSERT_TABLE_ID &&\n itemId !== id + INSERT_LINK_ID && itemId !== id + BOOKMARK_ID && itemId !== id + COMMENT_ID &&\n itemId !== id + HEADER_ID && itemId !== id + TABLE_OF_CONTENT_ID && itemId !== id + FOOTER_ID &&\n itemId !== id + PAGE_SET_UP_ID && itemId !== id + CONTENT_CONTROL_ID && itemId !== id + PAGE_NUMBER_ID &&\n itemId !== id + INSERT_IMAGE_ID && itemId !== id + FORM_FIELDS_ID && itemId !== id + BREAK_ID &&\n itemId !== id + TRACK_ID && itemId !== id + FOOTNOTE_ID && itemId !== id + ENDNOTE_ID && itemId !== id + UPDATE_FIELDS_ID) {\n continue;\n }\n if (isProtectedContent && this.documentEditor.documentHelper.isFormFillProtectedMode && itemId === id + UPDATE_FIELDS_ID) {\n continue;\n }\n var element = document.getElementById(item.id);\n if (!isNullOrUndefined(element) && !isNullOrUndefined(element.parentElement)) {\n this.toolbar.enableItems(element.parentElement, enable);\n }\n }\n }\n if (!isNullOrUndefined(this.documentEditor)) {\n this.enableDisableFormField(!this.documentEditor.enableHeaderAndFooter && enable && !this.documentEditor.isReadOnlyMode);\n }\n if (this.documentEditor.selectionModule.isinFootnote || this.documentEditor.selectionModule.isinEndnote\n || this.documentEditor.enableHeaderAndFooter) {\n if (this.containsItem(id + ENDNOTE_ID)) {\n this.toolbar.enableItems(document.getElementById(id + ENDNOTE_ID).parentElement, false);\n }\n if (this.containsItem(id + FOOTNOTE_ID)) {\n this.toolbar.enableItems(document.getElementById(id + FOOTNOTE_ID).parentElement, false);\n }\n if (this.containsItem(id + BREAK_ID)) {\n this.toolbar.enableItems(document.getElementById(id + BREAK_ID).parentElement, false);\n }\n }\n if (!isProtectedContent || this.container.showPropertiesPane) {\n if (isProtectedContent) {\n enable = this.container.showPropertiesPane;\n }\n classList(this.propertiesPaneButton.element.parentElement, !enable ? ['e-de-overlay'] : [], !enable ? [] : ['e-de-overlay']);\n }\n var protectionType = this.documentEditor.documentHelper.protectionType;\n if (enable || (this.documentEditor.documentHelper.isDocumentProtected &&\n (protectionType === 'FormFieldsOnly' || protectionType === 'CommentsOnly'))) {\n this.enableDisableUndoRedo();\n }\n if (this.documentEditor.documentHelper.isTrackedOnlyMode && this.containsItem(id + TRACK_ID)) {\n this.toolbar.enableItems(document.getElementById(id + TRACK_ID).parentElement, false);\n }\n }\n };\n Toolbar.prototype.containsItem = function (id) {\n for (var _i = 0, _a = this.toolbar.items; _i < _a.length; _i++) {\n var item = _a[_i];\n if (item.id === id) {\n return true;\n }\n }\n return false;\n };\n /**\n * @private\n * @returns {void}\n */\n Toolbar.prototype.enableDisableUndoRedo = function () {\n var id = this.container.element.id + TOOLBAR_ID;\n if (this.toolbarItems.indexOf('Undo') >= 0) {\n var undoElement = document.getElementById(id + UNDO_ID);\n // We can optimize this condition check to single bool validation instead of array collection.\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(undoElement)) {\n this.toolbar.enableItems(undoElement.parentElement, this.container.documentEditor.editorHistoryModule.canUndo());\n }\n }\n if (this.toolbarItems.indexOf('Redo') >= 0) {\n var redoElement = document.getElementById(id + REDO_ID);\n // We can optimize this condition check to single bool validation instead of array collection.\n /* eslint-disable-next-line max-len */\n if (!isNullOrUndefined(redoElement)) {\n this.toolbar.enableItems(redoElement.parentElement, this.container.documentEditor.editorHistoryModule.canRedo());\n }\n }\n };\n Toolbar.prototype.onToc = function () {\n if (this.container.previousContext === 'TableOfContents' && this.container.propertiesPaneContainer.style.display === 'none') {\n this.container.showPropertiesPane = false;\n this.documentEditor.focusIn();\n return;\n }\n if (this.container.headerFooterProperties.element.style.display === 'block') {\n this.documentEditor.selectionModule.closeHeaderFooter();\n }\n this.enableDisablePropertyPaneButton(false);\n this.container.showProperties('toc');\n };\n /**\n * @private\n * @param {boolean} isShow - show/hide property pane.\n * @returns {void}\n */\n Toolbar.prototype.enableDisablePropertyPaneButton = function (isShow) {\n if (isShow) {\n classList(this.propertiesPaneButton.element.firstChild, ['e-pane-enabled'], ['e-pane-disabled']);\n }\n else {\n classList(this.propertiesPaneButton.element.firstChild, ['e-pane-disabled'], ['e-pane-enabled']);\n }\n };\n /**\n * @private\n * @returns { void }\n */\n Toolbar.prototype.destroy = function () {\n if (this.restrictDropDwn) {\n this.restrictDropDwn.destroy();\n this.restrictDropDwn = undefined;\n }\n if (this.imgDropDwn) {\n this.imgDropDwn.destroy();\n this.imgDropDwn = undefined;\n }\n if (this.PageSetUpDropDwn) {\n this.PageSetUpDropDwn.destroy();\n this.PageSetUpDropDwn = undefined;\n }\n if (this.breakDropDwn) {\n this.breakDropDwn.destroy();\n this.breakDropDwn = undefined;\n }\n if (this.formFieldDropDown) {\n this.formFieldDropDown.destroy();\n this.formFieldDropDown = undefined;\n }\n if (this.ContentControlDropDwn) {\n this.ContentControlDropDwn.destroy();\n this.ContentControlDropDwn = undefined;\n }\n if (this.toolbar) {\n var toolbarElement = this.toolbar.element;\n this.toolbar.destroy();\n this.toolbar = undefined;\n toolbarElement.parentElement.removeChild(toolbarElement);\n }\n if (this.container.toolbarContainer) {\n this.container.containerTarget.removeChild(this.container.toolbarContainer);\n this.container.toolbarContainer = undefined;\n }\n if (this.container.toolbarModule) {\n this.container.toolbarModule = undefined;\n }\n if (this.propertiesPaneButton) {\n this.propertiesPaneButton.destroy();\n }\n if (this.breakListView) {\n this.breakListView.destroy();\n this.breakListView = undefined;\n }\n this.propertiesPaneButton = undefined;\n this.toolbarItems = [];\n this.toolbarItems = undefined;\n this.container = undefined;\n };\n return Toolbar;\n}());\nexport { Toolbar };\n","'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[Symbol.iterator];\n\n const iterator = generator.call(obj);\n\n let result;\n\n while ((result = iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n while (size--) {\n str += alphabet[Math.random() * length|0]\n }\n\n return str;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n ALPHABET,\n generateString,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?object} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = (\n (product) => {\n return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0\n })(typeof navigator !== 'undefined' && navigator.product);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isHeaders(header)) {\n for (const [key, value] of header.entries()) {\n setHeader(value, key, rewrite);\n }\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\nimport utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n const msie = /(msie|trident)/i.test(navigator.userAgent);\n const urlParsingNode = document.createElement('a');\n let originURL;\n\n /**\n * Parse a URL to discover its components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n let href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })();\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\n }\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst composeSignals = (signals, timeout) => {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (cancel) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = cancel instanceof Error ? cancel : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal &&\n (signal.removeEventListener ? signal.removeEventListener('abort', onabort) : signal.unsubscribe(onabort));\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal && signal.addEventListener && signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = unsubscribe;\n\n return [signal, () => {\n timer && clearTimeout(timer);\n timer = null;\n }];\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize, encode) {\n for await (const chunk of iterable) {\n yield* streamChunk(ArrayBuffer.isView(chunk) ? chunk : (await encode(String(chunk))), chunkSize);\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish, encode) => {\n const iterator = readBytes(stream, chunkSize, encode);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n return (await new Request(body).arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let [composedSignal, stopTimeout] = (signal || cancelToken || timeout) ?\n composeSignals([signal, cancelToken], timeout) : [];\n\n let finished, request;\n\n const onFinish = () => {\n !finished && setTimeout(() => {\n composedSignal && composedSignal.unsubscribe();\n });\n\n finished = true;\n }\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush, encodeText);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: withCredentials\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || isStreamResponse)) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n isStreamResponse && onFinish();\n }, encodeText),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && onFinish();\n\n stopTimeout && stopTimeout();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n onFinish();\n\n if (err && err.name === 'TypeError' && /fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.7.3\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy;\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy = {}) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import { createElement } from \"@syncfusion/ej2-base\";\nimport { Button } from \"@syncfusion/ej2-buttons\";\nimport { DropDownButton } from \"@syncfusion/ej2-splitbuttons\";\nimport axios from \"axios\";\n\n/**\n * Represents document editor title bar.\n */\nexport class TitleBar {\n tileBarDiv;\n documentTitle;\n documentTitleContentEditor;\n export;\n close;\n print;\n open;\n documentEditor;\n isRtl;\n dialogComponent;\n constructor(element, docEditor, isShareNeeded, isRtl, dialogComponent) {\n //initializes title bar elements.\n this.tileBarDiv = element;\n this.documentEditor = docEditor;\n this.isRtl = isRtl;\n this.dialogComponent = dialogComponent;\n this.initializeTitleBar(isShareNeeded);\n this.wireEvents();\n }\n initializeTitleBar = (isShareNeeded) => {\n let downloadText;\n let downloadToolTip;\n let printText;\n let closeToolTip;\n let printToolTip;\n let openText;\n let documentTileText;\n let storeText;\n let storeToolTip;\n if (!this.isRtl) {\n downloadText = \"Download\";\n downloadToolTip = \"Download this document.\";\n storeText = \"Save\";\n storeToolTip = \"Save this document.\";\n printText = \"Print\";\n printToolTip = \"Print this document (Ctrl+P).\";\n closeToolTip = \"Close this document\";\n openText = \"Open\";\n documentTileText = \"Document Name. Click or tap to rename this document.\";\n }\n // tslint:disable-next-line:max-line-length\n this.documentTitle = createElement(\"label\", {\n id: \"documenteditor_title_name\",\n styles:\n \"font-weight:400;text-overflow:ellipsis;white-space:pre;overflow:hidden;user-select:none;cursor:text\",\n });\n // tslint:disable-next-line:max-line-length\n this.documentTitleContentEditor = createElement(\"div\", {\n id: \"documenteditor_title_contentEditor\",\n className: \"single-line\",\n });\n this.documentTitleContentEditor.appendChild(this.documentTitle);\n this.tileBarDiv.appendChild(this.documentTitleContentEditor);\n this.documentTitleContentEditor.setAttribute(\"title\", documentTileText);\n let btnStyles =\n \"float:right;background: transparent;box-shadow:none; font-family: inherit;border-color: transparent;\" +\n \"border-radius: 2px;color:inherit;font-size:12px;text-transform:capitalize;height:28px;font-weight:400;margin-top: 2px;\";\n // tslint:disable-next-line:max-line-length\n this.close = this.addButton(\n \"e-icons e-close e-de-padding-right\",\n \"\",\n btnStyles,\n \"de-close\",\n closeToolTip,\n false\n );\n this.print = this.addButton(\n \"e-de-icon-Print e-de-padding-right\",\n printText,\n btnStyles,\n \"de-print\",\n printToolTip,\n false\n );\n this.store = this.addButton(\n \"e-de-icon-Open e-de-padding-right\",\n storeText,\n btnStyles,\n \"de-open\",\n storeToolTip,\n false\n );\n this.open = this.addButton(\n \"e-de-icon-Open e-de-padding-right\",\n openText,\n btnStyles,\n \"de-open\",\n openText,\n false\n );\n let items = [\n { text: \"Syncfusion Document Text (*.sfdt)\", id: \"sfdt\" },\n { text: \"Word Document (*.docx)\", id: \"word\" },\n { text: \"Word Template (*.dotx)\", id: \"dotx\" },\n { text: \"Plain Text (*.txt)\", id: \"txt\" },\n ];\n // tslint:disable-next-line:max-line-length\n this.export = this.addButton(\n \"e-de-icon-Download e-de-padding-right\",\n downloadText,\n btnStyles,\n \"documenteditor-share\",\n downloadToolTip,\n true,\n items\n );\n if (!isShareNeeded) {\n this.export.element.style.display = \"none\";\n } else {\n this.open.element.style.display = \"none\";\n }\n if (this.dialogComponent == null) this.close.element.style.display = \"none\";\n };\n setTooltipForPopup() {\n // tslint:disable-next-line:max-line-length\n document\n .getElementById(\"documenteditor-share-popup\")\n .querySelectorAll(\"li\")[0]\n .setAttribute(\n \"title\",\n \"Download a copy of this document to your computer as an SFDT file.\"\n );\n // tslint:disable-next-line:max-line-length\n document\n .getElementById(\"documenteditor-share-popup\")\n .querySelectorAll(\"li\")[1]\n .setAttribute(\n \"title\",\n \"Download a copy of this document to your computer as a DOCX file.\"\n );\n // tslint:disable-next-line:max-line-length\n document\n .getElementById(\"documenteditor-share-popup\")\n .querySelectorAll(\"li\")[2]\n .setAttribute(\n \"title\",\n \"Download a copy of this document to your computer as a DOTX file.\"\n );\n // tslint:disable-next-line:max-line-length\n document\n .getElementById(\"documenteditor-share-popup\")\n .querySelectorAll(\"li\")[3]\n .setAttribute(\n \"title\",\n \"Download a copy of this document to your computer as a TXT file.\"\n );\n }\n wireEvents = () => {\n this.store.element.addEventListener(\"click\", this.storeFile);\n this.print.element.addEventListener(\"click\", this.onPrint);\n this.close.element.addEventListener(\"click\", this.onClose);\n this.open.element.addEventListener(\"click\", (e) => {\n if (e.target.id === \"de-open\") {\n let fileUpload = document.getElementById(\"uploadfileButton\");\n fileUpload.value = \"\";\n fileUpload.click();\n }\n });\n this.documentTitleContentEditor.addEventListener(\"keydown\", (e) => {\n if (e.keyCode === 13) {\n e.preventDefault();\n this.documentTitleContentEditor.contentEditable = \"false\";\n if (this.documentTitleContentEditor.textContent === \"\") {\n this.documentTitleContentEditor.textContent = \"Document1\";\n }\n }\n });\n this.documentTitleContentEditor.addEventListener(\"blur\", () => {\n if (this.documentTitleContentEditor.textContent === \"\") {\n this.documentTitleContentEditor.textContent = \"Document1\";\n }\n this.documentTitleContentEditor.contentEditable = \"false\";\n this.documentEditor.documentName = this.documentTitle.textContent;\n });\n this.documentTitleContentEditor.addEventListener(\"click\", () => {\n this.updateDocumentEditorTitle();\n });\n };\n updateDocumentEditorTitle = () => {\n this.documentTitleContentEditor.contentEditable = \"true\";\n this.documentTitleContentEditor.focus();\n window.getSelection().selectAllChildren(this.documentTitleContentEditor);\n };\n // Updates document title.\n updateDocumentTitle = () => {\n if (this.documentEditor.documentName === \"\") {\n this.documentEditor.documentName = \"Untitled\";\n }\n this.documentTitle.textContent = this.documentEditor.documentName;\n };\n // tslint:disable-next-line:max-line-length\n addButton(iconClass, btnText, styles, id, tooltipText, isDropDown, items) {\n let button = createElement(\"button\", { id: id, styles: styles });\n this.tileBarDiv.appendChild(button);\n button.setAttribute(\"title\", tooltipText);\n if (isDropDown) {\n // tslint:disable-next-line:max-line-length\n let dropButton = new DropDownButton(\n {\n select: this.onExportClick,\n items: items,\n iconCss: iconClass,\n cssClass: \"e-caret-hide\",\n content: btnText,\n open: () => {\n this.setTooltipForPopup();\n },\n },\n button\n );\n return dropButton;\n } else {\n let ejButton = new Button(\n { iconCss: iconClass, content: btnText },\n button\n );\n return ejButton;\n }\n }\n onPrint = () => {\n this.documentEditor.print();\n };\n onClose = () => {\n this.dialogComponent.hide();\n };\n onExportClick = (args) => {\n let value = args.item.id;\n switch (value) {\n case \"word\":\n this.save(\"Docx\");\n break;\n case \"sfdt\":\n this.save(\"Sfdt\");\n break;\n case \"txt\":\n this.save(\"Txt\");\n break;\n case \"dotx\":\n this.save(\"Dotx\");\n break;\n }\n };\n save = (format) => {\n // tslint:disable-next-line:max-line-length\n this.documentEditor.save(\n this.documentEditor.documentName === \"\"\n ? \"sample\"\n : this.documentEditor.documentName,\n format\n );\n };\n storeFile = (format) => {\n // tslint:disable-next-line:max-line-length\n // this.documentEditor.save(\n // this.documentEditor.documentName === \"\"\n // ? \"sample\"\n // : this.documentEditor.documentName,\n // format\n // );\n this.documentEditor.saveAsBlob(\"Docx\").then(async (data) => {\n let formData = new FormData();\n formData.append(\"transcripts\", data);\n formData.append(\"path\", this.documentEditor.documentName);\n\n formData.append(\"manual\", this.documentEditor.manual);\n formData.append(\"file_id\", this.documentEditor.file_id);\n\n axios({\n method: \"post\",\n url: \"https://doc-app.capricontechnology.com/api/upload-sync-fusion\",\n // url: \"http://localhost:1337/api/upload-sync-fusion\",\n data: formData,\n headers: { \"Content-Type\": \"multipart/form-data\" },\n })\n .then(function (response) {\n //handle success\n console.log(response);\n alert(\"File Saved Successfully!!\");\n window.onbeforeunload = null;\n })\n .catch(function (response) {\n //handle error\n console.log(response);\n });\n // Replace your running Url here\n\n // req.open(\"POST\", \"localhost:1337/api/upload-sync-fusion\", true);\n // req.onreadystatechange = () => {\n // if (req.readyState === 4) {\n // if (req.status === 200 || req.status === 304) {\n // console.log(\"Reuest\", req);\n // console.log(\"Saved sucessfully\");\n // }\n // }\n // };\n // req.send(formData);\n });\n };\n}\n","import { createRoot } from \"react-dom/client\";\nimport \"./index.css\";\nimport * as React from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useSearchParams } from \"react-router-dom\";\nimport { BrowserRouter } from \"react-router-dom\";\n\nimport {\n DocumentEditorContainerComponent,\n Toolbar,\n} from \"@syncfusion/ej2-react-documenteditor\";\nimport { TitleBar } from \"./title-bar\";\nimport { registerLicense } from \"@syncfusion/ej2-base\";\nregisterLicense(\n // \"Ngo9BigBOggjHTQxAR8/V1NBaF1cXmhIfEx1RHxQdld5ZFRHallYTnNWUj0eQnxTdEFjXH5fcnRXQmVcU0d1Xw==\"\n // \"Ngo9BigBOggjHTQxAR8/V1NBaF5cXmZCf1FpRmJGdld5fUVHYVZUTXxaS00DNHVRdkdnWXpfcXRSQmBZUkJzW0s=\"\n \"Ngo9BigBOggjHTQxAR8/V1NCaF5cXmZCf1FpRmJGdld5fUVHYVZUTXxaS00DNHVRdkdnWXdec3VRQmlcUERxVkM=\"\n // \"Ngo9BigBOggjHTQxAR8/V1NBaF5cXmZCf1FpRmJGdld5fUVHYVZUTXxaS00DNHVRdkdnWXpdcXRTRmFYWUJyW0I=\"\n);\n\nDocumentEditorContainerComponent.Inject(Toolbar);\n// tslint:disable:max-line-length\nconst Default = () => {\n const [fileData, setFileData] = useState(null);\n const [searchParams, setSearchParams] = useSearchParams();\n useEffect(() => {\n console.log(\"LAWDA 123\");\n rendereComplete();\n }, []);\n let hostUrl =\n \"https://services.syncfusion.com/react/production/api/documenteditor/\";\n let container = useRef(null);\n let titleBar;\n //\n\n const fetchFile = async (fileUrl) => {\n const response = await fetch(fileUrl);\n const blob = await response.blob();\n const file = new File([blob], \"downloaded.docx\", { type: blob.type });\n return file;\n };\n\n const handleFetchAndUpload = async (file_name, manual) => {\n let fileUrl = \"\";\n\n if (manual || manual === \"true\") {\n fileUrl = searchParams.get(\"file_url\");\n // \"https://storage.googleapis.com/doc-app-static-site/\" + file_name;\n } else {\n fileUrl =\n \"https://storage.googleapis.com/doc-app-static-site/reports/\" +\n file_name;\n // \"https://storage.googleapis.com/doc-app-static-site/reports/d88b259257df4a96889f0c2e5e6f4235.docx\"; // Replace with your file URL\n }\n try {\n const file = await fetchFile(fileUrl);\n\n // Now you have a File object similar to what you get from an input element\n setFileData(file);\n\n // Create FormData and append the file\n const formData = new FormData();\n formData.append(\"File\", file);\n\n // Send the FormData to the backend\n const response = await fetch(\n \"https://word-editor.capricontechnology.com/api/uploads\",\n {\n method: \"POST\",\n body: formData,\n }\n );\n console.log(\"response\", response);\n\n const result = await response.json();\n console.log(result);\n return result;\n } catch (error) {\n console.error(\"Error fetching and uploading file:\", error);\n }\n };\n\n const onLoadDefault = async () => {\n // tslint:disable\n let defaultDocument = {};\n console.log(\n \"FIle name before and after\",\n searchParams.get(\"file\"),\n decodeURIComponent(searchParams.get(\"file\"))\n );\n if (searchParams.get(\"file\") && searchParams.get(\"manual\")) {\n defaultDocument = await handleFetchAndUpload(\n decodeURIComponent(searchParams.get(\"file\")),\n Boolean(searchParams.get(\"manual\"))\n );\n console.log(\"INSIDE\", defaultDocument);\n\n // tslint:enable\n container.current.documentEditor.open(JSON.stringify(defaultDocument));\n\n container.current.documentEditor.documentName = decodeURIComponent(\n searchParams.get(\"file\")\n );\n container.current.documentEditor.manual = searchParams.get(\"manual\");\n container.current.documentEditor.file_id = decodeURIComponent(\n searchParams.get(\"file_id\")\n );\n }\n titleBar.updateDocumentTitle();\n container.current.documentChange = () => {\n titleBar.updateDocumentTitle();\n container.current.documentEditor.focusIn();\n };\n };\n const rendereComplete = () => {\n window.onbeforeunload = function () {\n return \"Want to save your changes?\";\n };\n\n container.current.documentEditor.pageOutline = \"#E0E0E0\";\n container.current.documentEditor.acceptTab = true;\n container.current.documentEditor.resize();\n titleBar = new TitleBar(\n document.getElementById(\"documenteditor_titlebar\"),\n container.current.documentEditor,\n true\n );\n\n // onLoadDefault();\n\n // let http = new XMLHttpRequest();\n // //add your url in which you want to open document inside the \"\"\n // let content = { fileUrl: \"\" };\n // let baseurl =\n // \"https://storage.googleapis.com/doc-app-static-site/reports/d88b259257df4a96889f0c2e5e6f4235.docx\";\n // http.open(\"GET\", baseurl, true);\n // http.setRequestHeader(\"Content-Type\", \"application/json;charset=UTF-8\");\n // http.onreadystatechange = () => {\n // if (http.readyState === 4) {\n // if (http.status === 200 || http.status === 304) {\n // //open the SFDT text in Document Editor\n // console.log(\"HTTP\", http.responseText);\n // container.current.documentEditor.open(http.responseText);\n // }\n // }\n // };\n // http.send(JSON.stringify(content));\n onLoadDefault();\n };\n return (\n //
      \n
      \n
      \n
      \n \n
      \n
      \n //
      \n );\n};\nexport default Default;\n\nconst root = createRoot(document.getElementById(\"sample\"));\nroot.render(\n <>\n \n \n \n \n);\n"],"names":["aa","require","ba","p","a","b","c","arguments","length","encodeURIComponent","da","Set","ea","fa","ha","add","ia","window","document","createElement","ja","Object","prototype","hasOwnProperty","ka","la","ma","t","d","e","f","g","this","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","type","sanitizeURL","removeEmptyString","z","split","forEach","toLowerCase","qa","ra","toUpperCase","sa","slice","oa","isNaN","pa","call","test","na","removeAttribute","setAttribute","setAttributeNS","replace","xlinkHref","ta","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ua","Symbol","for","va","wa","xa","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","iterator","Ja","Ka","A","assign","La","Error","stack","trim","match","Ma","Na","prepareStackTrace","defineProperty","set","Reflect","construct","l","h","k","displayName","includes","name","Oa","tag","render","Pa","$$typeof","_context","_payload","_init","Qa","Ra","Sa","nodeName","Ua","_valueTracker","getOwnPropertyDescriptor","constructor","get","configurable","enumerable","getValue","setValue","stopTracking","Ta","Va","checked","value","Wa","activeElement","body","Xa","defaultChecked","defaultValue","_wrapperState","initialChecked","Ya","initialValue","controlled","Za","$a","bb","cb","ownerDocument","db","Array","isArray","eb","options","selected","defaultSelected","disabled","fb","dangerouslySetInnerHTML","children","gb","hb","ib","textContent","jb","kb","lb","mb","namespaceURI","innerHTML","valueOf","toString","firstChild","removeChild","appendChild","MSApp","execUnsafeLocalFunction","nb","lastChild","nodeType","nodeValue","ob","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","pb","qb","rb","style","indexOf","setProperty","keys","charAt","substring","sb","menuitem","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","tb","ub","is","vb","wb","target","srcElement","correspondingUseElement","parentNode","xb","yb","zb","Ab","Bb","stateNode","Cb","Db","push","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","addEventListener","removeEventListener","Mb","apply","n","onError","Nb","Ob","Pb","Qb","Rb","Sb","Ub","alternate","return","flags","Vb","memoizedState","dehydrated","Wb","Yb","child","sibling","current","Xb","Zb","$b","unstable_scheduleCallback","ac","unstable_cancelCallback","bc","unstable_shouldYield","cc","unstable_requestPaint","B","unstable_now","dc","unstable_getCurrentPriorityLevel","ec","unstable_ImmediatePriority","fc","unstable_UserBlockingPriority","gc","unstable_NormalPriority","hc","unstable_LowPriority","ic","unstable_IdlePriority","jc","kc","nc","Math","clz32","oc","pc","log","LN2","qc","rc","sc","tc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","uc","wc","xc","yc","zc","eventTimes","Bc","C","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Map","Oc","Pc","Qc","Rc","delete","pointerId","Sc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Uc","Vc","priority","isDehydrated","containerInfo","Wc","Xc","dispatchEvent","shift","Yc","Zc","$c","ad","bd","ReactCurrentBatchConfig","cd","dd","transition","ed","fd","gd","hd","Tc","stopPropagation","id","jd","kd","ld","md","nd","keyCode","charCode","od","pd","qd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","cancelBubble","persist","isPersistent","vd","wd","xd","rd","eventPhase","bubbles","cancelable","timeStamp","Date","now","isTrusted","sd","td","view","detail","ud","zd","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","yd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Ad","Cd","dataTransfer","Ed","Gd","animationName","elapsedTime","pseudoElement","Hd","clipboardData","Id","Kd","data","Ld","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Md","Nd","Alt","Control","Meta","Shift","Od","Pd","key","String","fromCharCode","code","location","repeat","locale","which","Qd","Sd","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Ud","touches","targetTouches","changedTouches","Wd","Xd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Yd","Zd","$d","ae","documentMode","be","ce","de","ee","fe","ge","he","ke","color","date","datetime","email","month","number","password","range","search","tel","text","time","url","week","le","me","ne","event","listeners","oe","pe","qe","re","se","te","ue","ve","we","xe","ye","oninput","ze","detachEvent","Ae","Be","attachEvent","Ce","De","Ee","Ge","He","Ie","Je","node","offset","nextSibling","Ke","contains","compareDocumentPosition","Le","HTMLIFrameElement","contentWindow","href","Me","contentEditable","Ne","focusedElem","selectionRange","documentElement","start","end","selectionStart","selectionEnd","min","defaultView","getSelection","extend","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","element","left","scrollLeft","top","scrollTop","focus","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","animationend","animationiteration","animationstart","transitionend","We","Xe","Ye","animation","Ze","$e","af","bf","cf","df","ef","ff","gf","kf","lf","concat","mf","Tb","instance","listener","D","nf","has","of","pf","qf","random","rf","bind","capture","passive","m","w","J","v","r","x","F","sf","tf","parentWindow","uf","vf","Z","ya","ab","ca","ie","char","je","unshift","wf","xf","yf","zf","Af","Bf","Cf","Df","__html","Ef","setTimeout","Ff","clearTimeout","Gf","Promise","If","queueMicrotask","resolve","then","catch","Hf","Jf","Kf","Lf","previousSibling","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","E","G","Uf","H","Vf","Wf","Xf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Yf","childContextTypes","Zf","$f","ag","getChildContext","bg","__reactInternalMemoizedMergedChildContext","cg","dg","eg","fg","gg","ig","jg","kg","defaultProps","lg","mg","ng","og","pg","qg","_currentValue","rg","childLanes","sg","dependencies","firstContext","lanes","tg","ug","context","memoizedValue","next","vg","wg","xg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","pending","interleaved","effects","yg","zg","eventTime","lane","payload","callback","Ag","Bg","Cg","Dg","Eg","u","q","y","Fg","Gg","Hg","Component","refs","Ig","Mg","isMounted","_reactInternals","enqueueSetState","Jg","Kg","Lg","enqueueReplaceState","enqueueForceUpdate","Ng","shouldComponentUpdate","isPureReactComponent","Og","contextType","state","updater","Pg","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Qg","props","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","I","fh","gh","hh","elementType","deletions","ih","pendingProps","overflow","treeContext","retryLane","jh","mode","kh","lh","mh","memoizedProps","nh","oh","ph","ref","_owner","_stringRef","qh","join","rh","sh","index","th","uh","vh","implementation","wh","xh","done","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","tagName","Gh","Hh","Ih","K","Jh","revealOrder","Kh","Lh","_workInProgressVersionPrimary","Mh","ReactCurrentDispatcher","Nh","Oh","L","M","N","Ph","Qh","Rh","Sh","O","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","baseQueue","queue","ai","bi","ci","lastRenderedReducer","action","hasEagerState","eagerState","lastRenderedState","dispatch","di","ei","fi","gi","hi","getSnapshot","ii","ji","P","ki","lastEffect","stores","li","mi","ni","create","destroy","deps","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Hi","message","Ii","console","error","Ti","Ui","Vi","Wi","Ji","WeakMap","Ki","Li","Mi","Ni","getDerivedStateFromError","componentDidCatch","Oi","componentStack","Pi","pingCache","Qi","Ri","Si","Xi","tailMode","tail","Q","subtreeFlags","Yi","pendingContext","Zi","wasMultiple","multiple","suppressHydrationWarning","onClick","onclick","size","createElementNS","autoFocus","createTextNode","R","$i","rendering","aj","renderingStartTime","isBackwards","last","bj","cj","dj","ReactCurrentOwner","ej","fj","gj","hj","ij","compare","jj","kj","lj","baseLanes","cachePool","transitions","mj","nj","oj","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","pj","qj","rj","sj","tj","uj","vj","fallback","wj","xj","yj","zj","_reactRetry","Aj","Bj","Cj","Dj","Ej","Gj","Hj","S","Ij","WeakSet","T","Jj","U","Kj","Lj","Nj","Oj","Pj","Qj","Rj","Sj","Tj","insertBefore","_reactRootContainer","Uj","V","Vj","Wj","Xj","onCommitFiberUnmount","componentWillUnmount","Yj","Zj","ak","bk","ck","dk","display","ek","fk","gk","hk","ik","__reactInternalSnapshotBeforeUpdate","src","Uk","jk","ceil","kk","lk","mk","W","X","Y","nk","ok","pk","qk","rk","Infinity","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","callbackNode","expirationTimes","expiredLanes","vc","callbackPriority","hg","Dk","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","finishedWork","finishedLanes","Ok","timeoutHandle","Pk","Qk","Rk","Sk","Tk","mutableReadLanes","Ac","Mj","onCommitFiberRoot","lc","onRecoverableError","Vk","onPostCommitFiberRoot","Wk","Xk","Zk","isReactComponent","pendingChildren","$k","mutableSourceEagerHydrationData","al","cache","pendingSuspenseBoundaries","cl","dl","el","fl","gl","hl","Fj","Yk","jl","reportError","kl","_internalRoot","ll","ml","nl","ol","ql","pl","unmount","unstable_scheduleHydration","splice","querySelectorAll","JSON","stringify","form","rl","usingClientEntryPoint","Events","sl","findFiberByHostInstance","bundleType","version","rendererPackageName","tl","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","ul","isDisabled","supportsFiber","inject","exports","createPortal","bl","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","err","module","__self","__source","Fragment","jsx","jsxs","setState","forceUpdate","escape","_status","_result","default","Children","map","count","toArray","only","Profiler","PureComponent","StrictMode","Suspense","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","memo","startTransition","unstable_act","pop","sortIndex","performance","setImmediate","startTime","expirationTime","priorityLevel","navigator","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","floor","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","delay","unstable_wrapCallback","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","leafPrototypes","getProto","getPrototypeOf","obj","__esModule","ns","def","getOwnPropertyNames","definition","o","prop","toStringTag","Action","PopStateEventType","invariant","getHistoryState","usr","idx","createLocation","to","_extends","pathname","hash","parsePath","substr","createPath","_ref","path","parsedPath","hashIndex","searchIndex","getUrlBasedHistory","getLocation","createHref","validateLocation","v5Compat","globalHistory","history","Pop","getIndex","handlePop","nextIndex","delta","createURL","origin","URL","replaceState","listen","fn","encodeLocation","Push","historyState","pushState","DOMException","Replace","go","ResultType","stripBasename","basename","startsWith","startIndex","endsWith","nextChar","getInvalidPathError","field","dest","getPathContributingMatches","matches","filter","route","getResolveToMatches","v7_relativeSplatPath","pathMatches","pathnameBase","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","from","isEmptyPath","toPathname","routePathnameIndex","toSegments","fromPathname","relativePath","segments","segment","resolvePathname","normalizeSearch","normalizeHash","resolvePath","hasExplicitTrailingSlash","hasCurrentTrailingSlash","joinPaths","paths","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","React","NavigationContext","LocationContext","RouteContext","outlet","isDataRoute","useInRouterContext","useLocation","UNSAFE_invariant","useIsomorphicLayoutEffect","static","useNavigate","router","useDataRouterContext","DataRouterHook","UseNavigateStable","useCurrentRouteId","DataRouterStateHook","activeRef","navigate","fromRouteId","useNavigateStable","dataRouterContext","future","routePathnamesJson","UNSAFE_getResolveToMatches","parse","relative","useNavigateUnstable","hookName","ctx","useRouteContext","thisRoute","Router","_ref5","basenameProp","locationProp","navigationType","staticProp","navigationContext","locationContext","trailingPathname","createSearchParams","init","URLSearchParams","reduce","__reactRouterVersion","startTransitionImpl","ReactDOM","BrowserRouter","_ref4","historyRef","setStateImpl","v7_startTransition","newState","useSearchParams","defaultInit","defaultSearchParamsRef","hasSetSearchParamsRef","searchParams","locationSearch","defaultSearchParams","_","getAll","append","getSearchParamsForLocation","setSearchParams","nextInit","navigateOptions","newSearchParams","instances","uid","isBlazorPlatform","createInstance","classFunction","params","arrayParam","Function","handler","unbind","num","Uint16Array","msCrypto","crypto","getRandomValues","secret","ret","i","parseInt","combineArray","messageHandler","nameSpace","splits","isUndefined","fromObj","isNullOrUndefined","deleteObject","containerObject","isObject","merge","destination","temrObj","tempProp","deepmerge","_i","keys_1","copied","first","second","deep","result","args","_loop_1","obj1","clone","copy","isArrayChanged","blazorEventExtend","isBlazor","Event","getUniqueID","definedName","compareElementParent","parent","throwError","formatUnit","getElement","xPath","Node","evaluate","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","getInstance","component","elem","querySelector","_a","inst","HijriParser","defaultNumberingSystem","defaultNumberSymbols","latnNumberSystem","ParserBase","getMainObject","cName","getNumberingSystem","numberingSystems","reverseObject","res","propKeys_1","getSymbolRegex","regexStr","str","RegExp","getSymbolMatch","matchKeys_1","constructRegex","val","len","convertValueParts","regex","getDefaultNumberingSystem","nSystem","getCurrentNumericOptions","curObj","numberSystem","needSymbols","blazorMode","cur","digits","numericPair","regExp","numberParseRegex","numericRegex","symbolNumberSystem","symbolMatch","getNumberMapper","isNumber","mapper","numberSymbols","timeSeparator","latnNumberSystem_1","nPair","nRegex","blazorCurrencyData","dateCorrection","getHijriDate","gDate","day","getDate","getMonth","year","getFullYear","tMonth","tYear","yPrefix","julilanOffset","julianNumber","tempMonth","modifiedJulianDate","iyear","cyc","j","iy","im","tempDay","iln","hYear","hmonth","hDate","toGregorian","julianDate","gDay","gMonth","gYear","abbreviateRegexGlobal","standalone","weekdayKey","timeSetter","s","datePartMatcher","DateFormat","dateFormat","culture","option","cldr","_this","dependable","getDependables","calendar","numObject","dateObject","formatOptions","isIslamic","islamicRegex","isServerRendered","compareBlazorDateFormats","resPattern","format","getResultantPattern","skeleton","dateSeperator","getDateSeparator","ConvertDateToWeekFormat","pattern","numMapper","parser","parserObject","patternMatch_1","weekday","monthIndex","days","designator","eText","era","timeZone","intDateFormatter","dateParseRegex","dObject","getCurrentDateValue","matches_1","length_1","curval","curvalstr","processNumber","curstr","getDay","curlength","desig","getHours","dec","retu","timezone","getTimezoneOffset","pattern_1","hourFormat","gmtZeroFormat","getTimeZoneValue","gmtFormat","getWeekOfYear","checkTwodigitNumber","latnParseRegex","tVal","curPattern","no","abs","ishour","errorText","NumberFormat","numberFormatter","symbolPattern","fOptions","cOptions","dOptions","numericObject","numberMapper","currencySymbol","getCurrencySymbol","currency","defaultCurrencyCode","altSymbol","percentSymbol","minusSymbol","symbols","formatRegex","customFormat","useGrouping","pData","getProperNumericSkeleton","isCurrency","isPercent","getSymbolPattern","isAccount","groupOne","checkValueRange","maximumSignificantDigits","minimumSignificantDigits","maximumFractionDigits","minimumFractionDigits","fractionDigits","defaultCurrency","nData","replaceBlazorCurrency","getFormatData","groupSeparator","groupData","getGroupingDetails","minimumFraction","mval","maximumFraction","mfrac","lfrac","isFinite","intNumberFormatter","negativeDataRegex","lastIndexOf","temp","primary","secondary","val1","val2","checkbothExist","isFraction","decide","dint","str1","str2","checkRange","curData","zeroData","fValue","processSignificantDigits","processFraction","minimumIntegerDigits","processMinimumIntegers","isCustomFormat","decimalPart","toExponential","customPivotFormat","groupNumbers","nlead","nend","max","toPrecision","level1","sep","decimalSymbol","level2","flag","prefix","toFixed","lead","decimal","latnRegex","minute","hour","milliseconds","DateParser","dateParser","numOptions","parseOptions","hourOnly","regexString","evalposition","patternMatch","gmtCorrection","zCorrectTemp","isgmtTraversed","nRegx","numbers","canUpdate","charKey","optional","weekData","weekObject","monthData","hour12","periodValur","tzone","hpattern","parseTimeZoneRegx","pos","parserRegex","parsedDateParts","internalDateParse","dobj","tDate","ystrig","is2DigitYear","getDateObject","setMilliseconds","setFullYear","tKeys_1","tValue","setDate","pDate","lDate","lastDay","setHours","tzValue","setMinutes","getMinutes","retOptions","props_1","curObject","matchString","internalNumberParser","tmatch","getZoneValue","tZone","cRegex","splitStr","ival","parseRegex","groupRegex","NumberParser","numberParser","custom","symbolpattern","symbolRegex","infinity","getParsedNumber","isNegative","tempValue","NaN","exponent","parseFloat","convertMaxFracDigits","decimalSplitValue","Observer","ranArray","boundedEvents","on","property","cntxt","notExist","isHandlerPresent","off","indexLocation","notify","argument","successHandler","errorHandler","blazorCallback","curObject_1","objs","isTrigger","obj_1","promise","isJson","dateReviver","offIntlEvents","eventsArr","curContext","detectFunction","randomId","isRendered","boundedEvents_1","onIntlChange","rightToLeft","cldrData","defaultCulture","Internationalization","cultureName","getDateFormat","getCulture","getNumberFormat","getDateParser","getNumberParser","formatNumber","formatDate","parseDate","parseNumber","getDatePattern","isExcelFormat","IntlBase","getActualDateTimeFormat","getNumberPattern","isExcel","getActualNumberFormat","getFirstDayOfWeek","getWeekData","getNumericObject","numSystem","symbPattern","getDefaultDateObject","blazorCultureFormats","customRegex","fractionRegex","patternRegex","dateConverterMapper","firstDayMapper","currencyFormatRegex","curWithoutNumberRegex","typeMapper","blazorCulture","iType","basicPatterns","dPattern","tPattern","calendartype","blazorDefaultObject","defaultObject","dateString","convertMapper","tempString","curFormatMapper","patternMatcher","needFraction","cSymbol","fractionOnly","changeCurrencySymbol","groupPattern","fraction","fmatch","sym","currencyCode","customNumberFormat","integerPart","spaceCapture","spaceGrouping","fractionPart","isCurrencyPercent","parts","actual","symbol","part","loc","processSymbol","fractionDigitsPattern","minDigits","maxDigits","diff","minimumIntegerPattern","integer","groupingPattern","formatSplit","dateObj","actualPattern","tLength","timeZonePattern","options_1","minFrac","numrericObject","curMatch","curCode","hasNegativePattern","cPattern","firstDay","iCulture","aCurrency","rCurrency","iCurrency","pData_1","weeknum","newYear","daynum","getTime","nday","headerRegex","Fetch","Ajax","async","contentType","emitError","send","eventArgs","cancel","httpRequest","reject","XMLHttpRequest","onreadystatechange","stateChange","onLoad","onload","onProgress","onprogress","onAbort","onabort","onerror","onUploadProgress","upload","open","setRequestHeader","beforeSend","onSuccess","failureHandler","reason","onFailure","responseText","dataType","readyState","status","statusText","getResponseHeader","responseHeaders","headers","exec","getAllResponseHeaders","header","isNOU","contentTypes","fetchRequest","Request","method","triggerEvent","fetchResponse","fetch","response","responseType","returnVal","REGX_MOBILE","REGX_IE","REGX_IE11","REGX_IOS","REGX_IOS7","REGX_ANDROID","REGX_WINDOWS","REGX_VERSION","REGX_BROWSER","OPERA","EDGE","CHROME","PANTHOMEJS","SAFARI","WEBKIT","MSIE","MOZILLA","browserDetails","Browser","extractBrowserDetail","browserInfo","clientInfo","userAgent","language","getEvent","events","isPointer","isTouch","isDevice","move","getTouchStartEvent","getTouchEndEvent","getTouchMoveEvent","getTouchCancelEvent","isSafari","isIos","regX","platform","maxTouchPoints","uA","info","isMSPointer","isWebView","cordova","PhoneGap","phonegap","forge","touchStartEvent","touchMoveEvent","touchEndEvent","touchCancelEvent","EventHandler","addOrGetEventData","__eventList","eventName","bindTo","intDebounce","debounceListener","eventData","eventFunction","out","debounce","isIE","remove","some","clearEvents","copyData","parseValue","trigger","eventProp","eventData_1","event_1","SVG_REG","properties","className","styles","attrs","attributes","addClass","elements","classes","classList","getClassList","ele","_b","classList_1","curClass","removeClass","classList_2","classArr","isVisible","visibility","offsetWidth","prepend","fromElements","isEval","docFrag","createDocumentFragment","firstElementChild","executeScript","NodeList","script","head","detach","iKey","select","selector","needsVDOM","querySelectId","selectAll","charRegex","idList","list","splitId","setId","closest","setStyleAttribute","addClasses","removeClasses","msMatchesSelector","webkitMatchesSelector","proxyToRaw","isColEName","Base","isComplexArraySetter","allowServerDataBinding","isProtectedOnChange","changedProperties","oldProperties","bulkChanges","refreshing","ignoreCollectionWatch","finalUpdate","childChangedProperties","modelObserver","addInstance","setProperties","isDestroyed","muteOnChange","prevDetection","dataBind","serverDataBind","callChildDataBind","clearChanges","newChanges","oldChanges","onPropertyChanged","sfBlazor","updateModel","saveChanges","newValue","oldValue","moduleClass","getModuleName","ej2_instances","getComponent","comp","getElementById","getObject","curKey","getObjectArray","isSetter","isFactory","curType","propertyGetter","propertySetter","oldVal","complexGetter","complexSetter","complexArrayGetter","defCollection","ignore","controlParent","extendFunc","descriptor","complexArrayDefinedCallback","complexArraySetter","oldValueCollection","newValCollection","dFunc","keyString","propName","getParentKey","newValueParse","model","getArrayModel","ejsAction","isControlParent","arrayFunction","modelObject","Property","propertyDescriptor","addPropertyCollection","Complex","Collection","eventDescriptor","finalContext","getParentContext","NotifyPropertyChanges","classConstructor","propertyType","propList","complexProps","colProps","propNames","complexPropNames","colPropNames","eventNames","curText","__extends","extendStatics","setPrototypeOf","__proto__","__","__decorate","decorators","desc","decorate","Animation","_super","easing","ease","linear","easeIn","easeOut","easeInOut","elasticInOut","elasticIn","elasticOut","Animation_1","animate","getModel","elements_1","element_1","delayAnimation","stop","animationId","getAttribute","frameId","cancelAnimationFrame","animationMode","GlobalAnimationMode","Disable","begin","applyAnimation","step","timerId","prevTimeStamp","duration","startAnimation","avg","timingFunction","progress","requestAnimationFrame","fail","newProp","oldProp","rippleEffect","rippleOptions","rippleModel","rippleFlag","isCenterRipple","getRippleModel","isRippleEnabled","rippleHandler","rippleUpHandler","rippleLeaveHandler","getBoundingClientRect","offsetX","offsetY","right","bottom","radius","sqrt","diameter","rippleElement","getComputedStyle","getPropertyValue","transform","removeRipple","rippleElements","getElementsByClassName","accountURL","ModuleLoader","loadedModules","requiredModules","moduleList","reqLength","clearUnusedModule","modl","moduleList_1","modName","member","isModuleLoaded","moduleObject","memberName","getMemberName","isProperty","loadedModule","clean","modules","getNonInjectedModules","usedModules","arg","removableModule_1","mod","ChildProperty","parentObj","isParentArray","updateChange","updateTimeOut","changeTime_1","curIndex","restrictServerDataBind","isSaveChanges","parent_1","parentKey","complexKeys","isFinal","valueLength","componentList","bypassKey","LicenseValidator","isValidated","isLicensed","errors","noLicense","trailExpired","versionMismatched","platformMismatched","invalidKey","manager","licKey","setKey","getKey","npxManager","validate","convertToChar","validateMsg","validateURL","getInfoFromKey","result_1","invalidPlatform","expiryDate","expDate","currDate","licenseContent","errorDiv","getDecryptedData","atob","pkey","decryptedStr","resultArray","isNpxKey","licKeySplit","licKeySplit_1","lKey","decodeStr","buffr","decryptedKey","charCodeAt","licenseValidator","cArr","cArr_1","arr","registerLicense","lastPageID","componentCount","lastHistoryLen","instancecount","isvalid","isBannerAdded","versionBasedStatePersistence","uniqueID","isStringTemplate","needsID","isReactHybrid","isAngular","isReact","isVue","enableRtl","moduleLoader","localObserver","appendTo","enablePersistence","setPersistData","detachUnloadEvent","refresh","preRender","injectModules","accessMount","mount","getRootElement","actualElement","getLocalData","eleId","localStorage","getItem","ej2StatePersistenceVersion","attachUnloadEvent","handleUnload","mergePersistData","ignoredComponents","schedule","diagram","PdfViewer","grid","richtexteditor","treegrid","gantt","chart","accumulationchart","modulesRequired","moduleName","componentName","warn","bannerTemplate","errorBackground","createLicenseOverlay","renderComplete","wrapperElement","event_2","getInjectedModules","injectedModules","Inject","isVDOM","triggerStateChange","currentContext","calls","setItem","getPersistData","renderReactTemplates","clearTemplate","templateName","isHistoryChanged","pageID","addOnPersist","persistObj","objValue","getActualProperties","ignoreOnPersist","iterateJsonProperties","ignoreList","newObj","newList","this_1","defaultPosition","isDraggedObject","isDragged","Position","Draggable","dragLimit","Draggable_1","getDefaultPosition","borderWidth","padding","diffX","prevLeft","prevTop","dragProcessStarted","eleTop","tapHoldTimer","externalInitialize","diffY","parentScrollX","parentScrollY","droppables","toggleEvents","scope","isUnWire","handle","enableTapHold","mobileInitialize","initialize","evt","removeTapholdTimer","tapHoldThreshold","getScrollableParent","axis","tempScrollHeight","scrollHeight","tempScrollWidth","scrollWidth","getScrollableValues","curTarget","currentStateTarget","isDragStarted","abort","abortSelectors","intCoord","getCoordinates","initialPosition","relativeXPosition","relativeYPosition","intDragStart","intDestroy","isPreventSelect","isChangeTouch","intCordinate","styleProp","margin","marginLeft","marginTop","marginRight","marginBottom","dragTarget","intClosest","isReplaceDragEle","currentStateCheck","calculateParentPosition","position","getMousePosition","isDragScroll","distance","getHelperElement","dragTargetElement","helperElement","parentClientRect","offsetParent","dragStart","getProperTargetElement","bindEvents","bindDragEvents","dragElement","dragArea","setDragArea","enableTailMode","enableScrollHandler","posValue","getProcessedPositionValue","dragElePosition","getDragPosition","intDrag","intDragStop","setGlobalDroppables","elementInViewport","offsetTop","offsetLeft","offsetHeight","pageYOffset","pageXOffset","innerHeight","innerWidth","queryPositionInfo","rect","docHeight","getDocumentWidthHeight","docWidth","drag","eleObj","checkTargetElement","hoverObject","triggerOutFunction","dragData","intOver","helper","tLeft","tTop","pagex","pagey","dLeft","dTop","enableAutoScroll","skipDistanceCheck","helperWidth","helperHeight","draEleTop","draEleLeft","iTop","iLeft","isDialogEle","tempDraEleTop","dragValue","scrollIntoView","getPathElements","scrollParent","getScrollParent","getScrollPosition","reverse","hasScroll","nodeEl","clientHeight","scrollingElement","nodeEle","docScrollTop","helperClientHeight","elementTop","elementLeft","elementsFromPoint","intOut","docBody","docEle","dragStop","dragStopCalled","intDrop","change","eleWidthBound","eleHeightBound","elementArea","tborder","tpadding","lowerKey","prevStyle","pointerEvents","elementFromPoint","oldEle","isdragscroll","dragEle","isOffsetParent","isVerticalScroll","clientWidth","cursorAt","sender","reset","draggable","draggedElement","dropIns","getDropInstance","parentElement","drop","eleInst","eleInst_1","Droppable","mouseOver","wireEvents","accept","isDrag","isDropArea","canDrop","droppedElement","coord","KeyboardEvents","keyPressHandler","isAltKey","isCtrlKey","isShiftKey","curkeyCode","keyConfigs","configCollection_1","rconfig","rKeyObj","KeyboardEvents_1","getKeyConfigData","keyAction","unwireEvents","config","configCache","keyData","Number","getKeyCode","keyVal","L10n","controlName","localeStrings","setLocale","intLocale","intGetControlConstant","currentLocale","load","localeObject","getConstant","SwipeSettings","swipeRegex","Touch","touchAction","tapCount","startEvent","point","updateChangeTouches","isTouchMoved","movedDirection","startPoint","lastMovedPoint","startEventData","hScrollLocked","vScrollLocked","tStampStart","timeOutTapHold","tapHoldEvent","moveEvent","endEvent","cancelEvent","movedPoint","eScrollArgs","calcScrollPoints","startEvents","originalEvent","startX","startY","distanceX","distanceY","scrollDirection","velocity","getVelocity","timeOutTap","swipeFn","tap","tapThreshold","modeclear","endPoint","calcPoints","swipeArgs","swipeDirection","tDistance","swipeSettings","swipeThresholdDistance","eSwipeArgs","defaultArgs","canTrigger","scrollBool","isScrollable","moved","checkSwipe","modeClear","lastTapTime","eleStyle","overflowX","overflowY","eTapArgs","pnt","newX","newY","newT","xDist","yDist","interval","LINES","QUOTES","IF_STMT","ELSEIF_STMT","ELSE_STMT","FOR_STMT","IF_OR_FOR","CALL_FUNCTION","NOT_NUMBER","WORD","DBL_QUOTED_STR","WORDIF","exp","ARR_OBJ","SINGLE_SLASH","DOUBLE_SLASH","WORDFUNC","WINDOWFUNC","compile","template","ignorePrefix","argName","evalExpResult","varCOunt","localKeys","isClass","singleSpace","insideBraces","outputString","cnt","matchStr","SPECIAL_CHAR","rlStr","addNameSpace","strs","HandleSpecialCharArrObj","rlStr_1","mtc","fnStr","fNameSpace","ftArray","splRegexp","arrObj","SlashReplace","NameSpaceForspecialChar","evalExp","addNS","tempStr","nameSpaceNew","quotes","NameSpaceArrObj","HAS_ROW","HAS_SVG","blazorTemplates","getRandomId","templateString","compiler","engineObj","templateId","root","blazorTemplateId","blazorId","childNodes","updateBlazorTemplate","isEmpty","callBack","updateTemplate","resetBlazorTemplate","templateDiv","innerTemplates","tempId","tempElement","initializeCSPTemplate","boundFunc","CSPTemplate","CharacterRangeType","FontScriptType","FontHintType","LocaleId","SectionBreakType","Engine","removeTags","removeAttrs","attribute","jsEvents","SanitizeHtmlHelper","beforeSanitize","selectors","tags","sanitize","item","serializeValue","wrapElement","removeXssTags","removeJsEvents","removeXssAttrs","tempEleValue","removeElement","nodes","localName","attr","hasAttribute","Save","save","fileName","buffer","extension","mimeType","getMimeType","Blob","isMicrosoftBrowser","msSaveBlob","downloadLink","saveInternal","hasDownloadAttribute","download","dataUrl_1","createObjectURL","createEvent","initEvent","revokeObjectURL","reader_1","FileReader","onloadend","readAsDataURL","XmlHttpRequestHandler","jsonObject","httpRequestEventArgs","isAsync","xmlHttpRequest","timeout","withCredentials","customHeaders","sendRequest","jsonObj","setCustomAjaxHeaders","FormData","proxyReq","internalZoomFactorChange","contentChangeEvent","documentChangeEvent","selectionChangeEvent","afterFormFieldFillEvent","beforeFormFieldFillEvent","serviceFailureEvent","customContextMenuSelectEvent","customContextMenuBeforeOpenEvent","contentControlEvent","beforeCommentActionEvent","commentDeleteEvent","revisionActionEvent","beforePaneSwitchEvent","trackChangeEvent","searchResultsChangeEvent","internalviewChangeEvent","beforeXmlHttpRequestSend","protectionTypeChangeEvent","internalDocumentEditorSettingsChange","internalStyleCollectionChange","defaultFont","internalAutoResize","beforeAutoResize","trackChanges","internalOptionPaneChange","Dictionary","keysInternal","valuesInternal","ReferenceError","RangeError","containsKey","clear","WAbstractList","abstractListIdIn","nsid","levels","abstractListId","listLevel","clearFormat","absList","WLevelOverride","overrideListLevel","levelNumber","startAt","levelOverride","WUniqueFormat","referenceCount","uniqueFormatType","propertiesHash","isEqual","modifiedValue","isBorderEqual","isCharacterFormatEqual","isParagraphFormatEqual","isCellFormatEqual","isShadingEqual","isRowFormatEqual","isListFormatEqual","isTableFormatEqual","isListLevelEqual","isSectionFormatEqual","isColumnFormatEqual","isNotEqual","modifiedProperty","targetValue","getPropertyType","sourceValue","getBorderPropertyType","getCharacterFormatPropertyType","getParaFormatPropertyType","getCellFormatPropertyType","getShadingPropertyType","getRowFormatType","getListFormatType","getTableFormatType","getListLevelType","getSectionFormatType","getColumnFormatType","cloneItems","mergeProperties","cloneProperties","WUniqueFormats","items","addUniqueFormat","matchedFormat","updateUniqueFormat","uniqueFormat","WBorder","uniqueBorderFormat","ownerBase","setPropertyValue","lineStyle","hasNoneStyle","hasValue","propValue","getPropertyDefaultValue","initializeUniqueBorder","uniqueBorderFormats","uniqueBorderFormatTemp","addUniqueBorderFormat","getLineWidth","lineArray","getBorderLineWidthArray","lineWidth","borderLineArray","getBorderWeight","weight","borderNumber","getNumberOfLines","getBorderNumber","getPrecedence","hasValues","cloneFormat","border","shadow","space","isEqualFormat","copyFormat","WBorders","leftIn","rightIn","topIn","bottomIn","horizontalIn","verticalIn","diagonalUpIn","diagonalDownIn","isParsing","WParagraphFormat","getBorder","baseStyle","currentFormat","listParaFormat","listFormat","paragraphFormat","getListPargaraphFormat","borders","basedOn","getDefaultValue","docParagraphFormat","documentParagraphFormat","getDocumentParagraphFormat","diagonalDown","diagonalUp","horizontal","vertical","top_1","WList","listId","sourceListId","abstractList","levelOverrides","getListLevel","getLevelOverride","mergeList","WListFormat","uniqueListFormat","getDocumentHelperObject","getListById","baseListStyle","WParagraphStyle","listLevelNumber","initializeUniqueListFormat","uniqueListFormats","uniqueListFormatTemp","addUniqueListFormat","applyStyle","mergeFormat","cloneListFormat","WShading","uniqueShadingFormat","initializeUniqueShading","uniqueShadingFormats","uniqueShadingTemp","addUniqueShading","shading","backgroundColor","foregroundColor","textureStyle","WTableFormat","owner","uniqueTableFormat","_title","_description","_styleName","assignTableMarginValue","initializeUniqueTableFormat","uniqueTableFormats","uniqueTableFormatTemp","addUniqueTableFormat","leftMargin","topMargin","rightMargin","bottomMargin","initializeTableBorders","tableFormat","leftIndent","tableAlignment","cellSpacing","preferredWidth","preferredWidthType","horizontalPositionAbs","horizontalPosition","bidi","allowAutoFit","styleName","title","description","WCharacterFormat","uniqueCharacterFormat","baseCharStyle","removedIds","revisions","charStyleValue","checkCharacterStyle","paragraph","line","TextElementBox","baseStyleValue","checkBaseStyle","docCharacterFormat","documentCharacterFormat","bodyWidget","page","documentHelper","characterFormat","ParagraphWidget","returnPropertyType","initializeUniqueCharacterFormat","uniqueCharacterFormats","uniqueCharFormatTemp","addUniqueCharacterFormat","fontSize","fontFamily","bold","italic","baselineAlignment","underline","fontColor","strikethrough","highlightColor","bdo","allCaps","Uppercase","Lowercase","ToggleCase","SentenceCase","CapitalizeEachWord","localeIdBidi","localeIdAscii","localeIdFarEast","complexScript","fontFamilyAscii","fontFamilyBidi","fontFamilyFarEast","characterSpacing","scaling","fontFamilyNonFarEast","isSameFormat","Revision","cloneRevisions","updateUniqueCharacterFormat","isEqualTocFormat","copyTocFormat","hasValueWithParent","WCharacterStyle","defFormat","author","revisionID","isContentRemoved","isTableRevision","canSkipTableItems","skipUnLinkElement","handleAcceptReject","isFromAccept","selectionModule","selectRevision","selection","startPos","endPos","isExistBefore","blockInfo","getParagraphInfo","editorModule","initHistory","fieldBegin","getHyperlinkField","revisionType","fieldEnd","fieldSeparator","editorHistoryModule","currentBaseHistoryInfo","isHyperlinkField","markerData","getMarkerData","editPosition","getHierarchicalIndex","updateInsertPosition","isShiftingEnabled","rangeIndex","ElementBox","WRowFormat","BookmarkElementBox","inline","bookmarks","unlinkRangeItem","textPosition","getTextPosBasedOnLogicalIndex","selectContent","updateEndPosition","selectRange","updateHistoryPosition","removedNodes","trackChangesPane","isTrackingPageBreak","editorHistory","currentHistoryInfo","blockToShift","layout","shiftLayoutedItems","updateHistory","reLayout","isInHeaderFooter","updateHeaderFooterWidget","handleGroupAcceptReject","isAccept","tableRevisions","initComplexHistory","groupingAcceptReject","updateComplexHistory","isInsideTable","table","containerWidget","ownerTable","reLayoutTable","actionType","isTrackedOnlyMode","skipGroupAcceptReject","revision","removeRangeRevisionForItem","removeChanges","isTOC","deleteSelectedContents","currentElement","addRemovedNodes","skipeElementRemoval","updateRevisionID","removeRevisionFromPara","endInfo","endIndex","endPosition","enableTrackChanges","updateHyperlinkFormat","tableWidget","currentRow","cloneTableToHistoryInfo","combineWidget","viewer","currentPara","removeRevisionItemsFromRange","FootnoteElementBox","footnoteType","removeFootnote","removeItem","reLayoutParagraph","childWidgets","updateCurrentTrackChanges","isAcceptOrReject","removeDeletedCellRevision","removeFieldInBlock","removeBlock","updateTable","removedBookmarkElements","enableCollaborativeEditing","bookmarkName","endBlockInfo","para","revisionIndex","nextWidget","currentRevision","elementPara","removeRevisionFromRow","row","unlinkRangeFromRevision","rowFormat","cellWidget","removeRevisionForCell","paraWidget","unLinkFieldCharacter","elementIndex","paraFloatingElementIndex","floatingElements","blockFloatingElementIndex","removeEmptyLine","canSkipCloning","clonedRevisions","RevisionCollection","changes","changesSingleView","changesInfoDiv","outerSingleDiv","renderedChanges","acceptAll","isReadOnly","handleRevisionCollection","rejectAll","isfromAcceptAll","revisionCollec","enableHeaderAndFooter","undoStack","isSkipOperationsBuild","uniqueRowFormat","beforeWidth","afterWidth","heightType","initializeUniqueRowFormat","uniqueRowFormats","uniqueRowFormatTemp","addUniqueRowFormat","containsMargins","allowBreakAcrossPages","isHeader","gridBefore","gridBeforeWidth","gridBeforeWidthType","gridAfter","gridAfterWidth","gridAfterWidthType","WCellFormat","uniqueCellFormat","initializeUniqueCellFormat","uniqueCellFormats","uniqueCellFormatTemp","addUniqueCellFormat","verticalAlignment","cellWidth","columnSpan","rowSpan","CONTROL_CHARACTERS","Utils","bitReverse","reverseBits","bitConverterToInt32","bitConverterToInt16","bitConverterToUInt32","uint","Uint32Array","bitConverterToUInt16","bitConverterUintToInt32","Int32Array","bitConverterInt32ToUint","bitConverterInt32ToInt16","Int16Array","byteToString","byteIntToString","arrayCopy","sourceIndex","destinationIndex","dataToCopy","Uint8Array","subarray","mergeArray","arrayOne","arrayTwo","mergedArray","encodedString","chr1","chr2","chr3","encode2","encode3","encode4","keyStr","resultIndex","totalLength","output","huffCodeLengthOrders","DecompressorHuffmanTree","lengths","buildTree","m_LengthTree","m_DistanceTree","prepareData","blCount","nextCode","treeSize","bits","MAX_BITLEN","treeFromData","tree","pointer","revcode","subTree","treeLen","m_Tree","unpackSymbol","lookahead","peekBits","skipBits","subtree","bitlen","availableBits","ChecksumCalculator","ChecksumUpdate","checksum","checkSumUInt","s1","s2","DEF_CHECKSUM_BIT_OFFSET","steps","DEF_CHECKSUM_ITERATIONSCOUNT","DEF_CHECKSUM_BASE","ChecksumGenerate","CompressedStreamReader","stream","bNoWrap","defaultHuffmanDynamicTree","DEF_HEADER_METHOD_MASK","DEF_HEADER_INFO_MASK","DEF_HEADER_FLAGS_FCHECK","DEF_HEADER_FLAGS_FDICT","DEF_HEADER_FLAGS_FLEVEL","DEF_MAX_WINDOW_SIZE","DEF_HUFFMAN_REPEATE_MAX","DEF_HUFFMAN_END_BLOCK","DEF_HUFFMAN_LENGTH_MINIMUMCODE","DEF_HUFFMAN_LENGTH_MAXIMUMCODE","DEF_HUFFMAN_DISTANCE_MAXIMUMCODE","mCheckSum","tBuffer","mBufferedBits","mTempBuffer","mBlockBuffer","mbNoWrap","mWindowSize","mCurrentPosition","mDataLength","mbCanReadNextBlock","mbCanReadMoreData","mbCheckSumRead","mInputStream","Stream","readZLibHeader","decodeBlockHeader","fillBuffer","bitMask","mBuffer","bytesRead","read","readInt16","pow","readBits","bFinalBlock","blockType","mbReadingUncompressed","skipToBoundary","readInt16Inverted","mUncompressedDataLength","mCurrentLengthTree","mCurrentDistanceTree","lengthTree","distanceTree","trees","decodeDynamicHeader","bLastSymbol","iLengthsCount","iDistancesCount","iCodeLengthsCount","iResultingCodeLengthsCount","arrResultingCodeLengths","arrDecoderCodeLengths","iCurrentCode","treeInternalDecoder","bNeedBreak","miRepSymbol","DEF_HUFFMAN_DYNTREE_REPEAT_BITS","DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS","tempArray","readHuffman","free","dataRead","readdata","numDataRead","iRepeatLength","DEF_HUFFMAN_REPEAT_LENGTH_BASE","iRepeatExtraBits","DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION","extra","DEF_HUFFMAN_REPEAT_DISTANCE_BASE","iRepeatDistance","DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION","initialLength","inBlockPosition","oldDataLength","dataToRead","readPackedBytes","checksumUpdate","readInt32","DEF_REVERSE_BITS","inputStream","byteLength","readByte","write","inputBuffer","toByteArray","Encoding","includeBom","emitBOM","encodingType","initBOM","getByteCount","chars","validateNullOrUndefined","utf8Len","getByteCountInternal","codePoint","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","high","low","getBytes","ArrayBuffer","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","getString","bytes","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint16","byteUni","byte16","ARR_LITERAL_CODES","ARR_LITERAL_LENGTHS","ARR_DISTANCE_CODES","ARR_DISTANCE_LENGTHS","CompressedStreamWriter","noWrap","pendingBuffer","pendingBufLength","pendingBufCache","pendingBufBitsInCache","bufferPosition","extraBits","currentHash","matchStart","matchLength","matchPrevAvail","blockStart","stringStart","lookAhead","totalBytesIn","inputOffset","inputEnd","windowSize","windowMask","hashSize","hashMask","hashShift","maxDist","checkSum","isHuffmanTreeInitiated","initHuffmanTree","treeLiteral","CompressorHuffmanTree","treeDistances","treeCodeLengths","arrDistances","arrLiterals","dataWindow","hashHead","hashPrevious","writeZLibHeader","compressedString","encode","pendingBufferFlush","compressData","headerDate","pendingBufferWriteShortBytes","finish","success","fillWindow","canFlush","compressSlow","flush","lookAheadCompleted","slideWindow","prevMatch","prevLen","discardMatch","matchPreviousBest","matchPreviousAvailable","huffmanIsFull","insertString","findLongestMatch","huffmanTallyLit","huffmanTallyDist","huffmanFlushBlock","lastBlock","more","updateHash","chainLen","niceLen","scan","bestEnd","bestLength","limit","stringEnd","scanEnd1","scanEnd","literal","codeFrequencies","dist","huffmanLengthCode","huffmanDistanceCode","stored","storedOffset","storedLength","calculateBLFreq","blTreeCodes","codeLengths","opt_len","getEncodedLength","static_len","huffmanFlushStoredBlock","pendingBufferWriteBits","setStaticCodes","huffmanCompressBlock","huffmanReset","huffmanSendAllTrees","pendingBufferAlignToByte","pendingBufferWriteShort","pendingBufferWriteByteBlock","buildCodes","treeLength","rank","writeTree","literalLen","writeCodeToStream","pendingBufferFlushBits","isClose","array","close","writer","elementCount","minCodes","maxLength","codeMinCount","codeFrequency","lengthCount","codeCount","codeLength","codes","lengthTemp","bitsCount","blTree","maxCount","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","freq","pPos","nodesCount","values","iIndex","constructHuffmanTree","buildLength","lastVal","minDepth","numNodes","numLeafs","calculateOptimalCodeLength","iIncreasableLength","recreateTree","nodePtr","childPtr","childIndex","bitLength","checksum_uint","checkSumBitOffset","checksumIterationCount","checksumBase","CRC32TABLE","BufferSize","ZipArchive","initCrc32Table","files","level","addItem","file","ZipArchiveItem","addDirectory","directoryName","base64String","zipByteArray","lCentralDirEndPosition","findValueFromEnd","lCentralDirPosition","ReadInt32","readCentralDirectoryDataAndExtractItems","itemHelper","ZipArchiveItemHelper","readCentralDirectoryData","readData","checkCrc","decompressData","unCompressedStream","zipArchive","saveAsBlob","blob","skipFileSave","zipData","dirLength","getCompressedData","constructZippedObject","isDirectory","writeZippedContent","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","crc32Table","compressor","currentIndex","subArray","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","writeFooter","externalFileAttribute","centralLength","localLength","modTime","getSeconds","modiDate","lStreamSize","arrBuffer","lLastPos","lCurrentPosition","uiCurValue","bFound","ReadInt16","ReadUInt16","headerSignature","crc32","compressionMethod","originalSize","iFileNameLength","iExtraFieldLenth","iCommentLength","externalAttributes","localHeaderOffset","m_strItemName","readLocalHeader","readCompressedData","decompressDataOld","decompressedData","reader","compressedStream","iReadBytes","iNameLength","iExtraLength","dataStream","iBytesLeft","iBytesToRead","itemName","decompressedStream","sectionsProperty","fontSubstitutionTableProperty","characterFormatProperty","paragraphFormatProperty","listsProperty","abstractListsProperty","backgroundProperty","stylesProperty","commentsProperty","revisionsProperty","customXmlProperty","defaultTabWidthProperty","formattingProperty","trackChangesProperty","protectionTypeProperty","enforcementProperty","hashValueProperty","saltValueProperty","doNotUseHTMLParagraphAutoSpacingProperty","alignTablesRowByRowProperty","formFieldShadingProperty","lastParagraphMarkCopiedProperty","footnotesProperty","endnotesProperty","compatibilityModeProperty","themeFontLanguagesProperty","themesProperty","nameProperty","basedOnProperty","nextProperty","linkProperty","localeIdProperty","localeIdFarEastProperty","localeIdBidiProperty","boldProperty","italicProperty","underlineProperty","baselineAlignmentProperty","strikethroughProperty","highlightColorProperty","fontSizeProperty","fontColorProperty","fontFamilyProperty","styleNameProperty","bidiProperty","bdoProperty","breakClearTypeProperty","fontSizeBidiProperty","fontFamilyBidiProperty","boldBidiProperty","italicBidiProperty","allCapsProperty","complexScriptProperty","fontFamilyAsciiProperty","fontFamilyFarEastProperty","fontFamilyNonFarEastProperty","revisionIdsProperty","listIdProperty","characterSpacingProperty","scalingProperty","listLevelNumberProperty","leftIndentProperty","rightIndentProperty","firstLineIndentProperty","textAlignmentProperty","afterSpacingProperty","beforeSpacingProperty","spaceAfterAutoProperty","spaceBeforeAutoProperty","lineSpacingProperty","lineSpacingTypeProperty","listFormatProperty","keepWithNextProperty","widowControlProperty","keepLinesTogetherProperty","outlineLevelProperty","contextualSpacingProperty","bordersProperty","tabsProperty","headerDistanceProperty","footerDistanceProperty","differentFirstPageProperty","differentOddAndEvenPagesProperty","pageWidthProperty","pageHeightProperty","leftMarginProperty","rightMarginProperty","topMarginProperty","bottomMarginProperty","restartPageNumberingProperty","pageStartingNumberProperty","endnoteNumberFormatProperty","footNoteNumberFormatProperty","restartIndexForFootnotesProperty","restartIndexForEndnotesProperty","initialFootNoteNumberProperty","initialEndNoteNumberProperty","pageNumberStyleProperty","columnsProperty","numberOfColumnsProperty","equalWidthProperty","lineBetweenColumnsProperty","breakCodeProperty","cellWidthProperty","columnSpanProperty","rowSpanProperty","verticalAlignmentProperty","allowBreakAcrossPagesProperty","isHeaderProperty","heightTypeProperty","gridBeforeProperty","gridBeforeWidthProperty","gridBeforeWidthTypeProperty","gridAfterProperty","gridAfterWidthProperty","gridAfterWidthTypeProperty","allowAutoFitProperty","cellSpacingProperty","shadingProperty","tableAlignmentProperty","preferredWidthProperty","preferredWidthTypeProperty","horizontalPositionAbsProperty","textureProperty","backgroundColorProperty","foregroundColorProperty","shadowProperty","hasNoneStyleProperty","verticalProperty","horizontalProperty","diagonalUpProperty","diagonalDownProperty","lineStyleProperty","lineWidthProperty","layoutProperty","dataFormatProperty","yValueProperty","chartDataProperty","categoryXNameProperty","lineProperty","foreColorProperty","layoutXProperty","layoutYProperty","directionProperty","endStyleProperty","numberValueProperty","markerStyleProperty","markerColorProperty","markerSizeProperty","forwardProperty","backwardProperty","interceptProperty","isDisplayRSquaredProperty","isDisplayEquationProperty","seriesNameProperty","dataLabelProperty","errorBarProperty","seriesFormatProperty","trendLinesProperty","dataPointsProperty","firstSliceAngleProperty","holeSizeProperty","isLegendKeyProperty","isBubbleSizeProperty","isCategoryNameProperty","isSeriesNameProperty","isValueProperty","isPercentageProperty","isLeaderLinesProperty","showSeriesKeysProperty","hasHorizontalBorderProperty","hasVerticalBorderProperty","hasBordersProperty","categoryTypeProperty","chartCategoryProperty","chartSeriesProperty","chartAreaProperty","chartTitleAreaProperty","plotAreaProperty","chartLegendProperty","chartPrimaryCategoryAxisProperty","chartPrimaryValueAxisProperty","chartTitleProperty","chartTypeProperty","gapWidthProperty","overlapProperty","chartDataTableProperty","textProperty","shapeIdProperty","alternativeTextProperty","visibleProperty","belowTextProperty","horizontalRuleProperty","widthProperty","heightProperty","widthScaleProperty","heightScaleProperty","lineFormatProperty","fillFormatProperty","textWrappingStyleProperty","textWrappingTypeProperty","verticalRelativePercentProperty","horizontalRelativePercentProperty","heightRelativePercentProperty","widthRelativePercentProperty","zOrderPositionProperty","layoutInCellProperty","lockAnchorProperty","autoShapeTypeProperty","textFrameProperty","colorProperty","fillProperty","textVerticalAlignmentProperty","imageStringProperty","metaFileImageStringProperty","isInlineImageProperty","isMetaFileProperty","topProperty","bottomProperty","rightProperty","leftProperty","getImageHeightProperty","getImageWidthProperty","hasFieldEndProperty","formFieldDataProperty","fieldTypeProperty","enabledProperty","helpTextProperty","statusTextProperty","textInputProperty","checkBoxProperty","dropDownListProperty","maxLengthProperty","defaultValueProperty","formatProperty","sizeTypeProperty","sizeProperty","checkedProperty","dropDownItemsProperty","selectedIndexProperty","commentIdProperty","commentCharacterTypeProperty","authorProperty","initialProperty","dateProperty","doneProperty","replyCommentsProperty","revisionTypeProperty","revisionIdProperty","itemIDProperty","xmlProperty","footnoteTypeProperty","symbolCodeProperty","symbolFontNameProperty","customMarkerProperty","inlinesProperty","contentControlPropertiesProperty","lockContentControlProperty","lockContentsProperty","tagProperty","titleProperty","hasPlaceHolderTextProperty","multiLineProperty","isTemporaryProperty","dateCalendarTypeProperty","dateStorageFormatProperty","dateDisplayLocaleProperty","dateDisplayFormatProperty","isCheckedProperty","uncheckedStateProperty","checkedStateProperty","contentControlListItemsProperty","xmlMappingProperty","fontProperty","valueProperty","displayTextProperty","isMappedProperty","isWordMlProperty","prefixMappingProperty","xPathProperty","storeItemIdProperty","customXmlPartProperty","idProperty","cellFormatProperty","rowFormatProperty","cellsProperty","rowsProperty","descriptionProperty","wrapTextAroundProperty","isLegalStyleNumberingProperty","positioningProperty","tableFormatProperty","allowOverlapProperty","distanceTopProperty","distanceRightProperty","distanceLeftProperty","distanceBottomProperty","verticalOriginProperty","verticalPositionProperty","horizontalOriginProperty","horizontalAlignmentProperty","horizontalPositionProperty","blocksProperty","headerProperty","footerProperty","evenHeaderProperty","evenFooterProperty","firstPageHeaderProperty","firstPageFooterProperty","headersFootersProperty","sectionFormatProperty","listLevelPatternProperty","followCharacterProperty","startAtProperty","restartLevelProperty","levelNumberProperty","numberFormatProperty","paraStyleNameProperty","abstractListIdProperty","nsidProperty","levelsProperty","overrideListLevelProperty","levelOverridesProperty","separatorProperty","continuationSeparatorProperty","continuationNoticeProperty","bookmarkTypeProperty","propertiesProperty","tabJustificationProperty","positionProperty","deletePositionProperty","tabLeaderProperty","editRangeIdProperty","columnFirstProperty","columnLastProperty","userProperty","groupProperty","editableRangeStartProperty","spaceProperty","fontSchemeProperty","fontSchemeNameProperty","majorFontSchemeProperty","minorFontSchemeProperty","fontSchemeListProperty","fontTypefaceProperty","typefaceProperty","panoseProperty","typeProperty","majorUnitProperty","isAutoMajorProperty","maximumValueProperty","minimumValueProperty","hasMajorGridLinesProperty","hasMinorGridLinesProperty","majorTickMarkProperty","minorTickMarkProperty","tickLabelPositionProperty","rgbProperty","appearanceProperty","lineFormatTypeProperty","allowSpaceOfSameStyleInTableProperty","weightProperty","inlineFormatProperty","fontNameProperty","isCompressedProperty","columnIndexProperty","imagesProperty","isAfterParagraphMarkProperty","isAfterCellMarkProperty","isAfterRowMarkProperty","gridProperty","columnCountProperty","isAfterTableMarkProperty","incrementalOps","HelperMethods","insert","spanText","replaceSpecialChars","getSpellCheckData","spellColl","stringarr_1","spellInfo","Text","HasSpellError","checkTextFormat","sanitizeString","getSfdtDocument","json","sfdt","zipItem","TextDecoder","decode","generateUniqueId","lists","abstractLists","isAbstractList","randomNumber","isSameListIDExists","indexOfAny","wordSplitCharacter","lastIndexOfAny","convertArgbToRgb","convertRgbToHex","hex","getNumberFromString","currentNumber","input_1","convertHexToRgb","colorCode","colCodeNo","addCssStyle","css","cssText","getElementsByTagName","convertNodeListToArray","nodeList","getHighlightColorCode","isVeryDark","backColor","getColor","getTextVerticalAlignment","textVerticalAlignment","convertPointToPixel","round","convertPixelToPoint","pixel","isLinkedFieldCharacter","FieldElementBox","fieldType","removeSpace","trimStart","trimEnd","addSpace","getBoolValue","getBoolInfo","keywordIndex","parseBoolValue","getBaselineAlignmentEnumValue","getUnderlineEnumValue","getStrikeThroughEnumValue","getHighlightColorEnumValue","getBiDirectionalOverride","biDirectionalOverride","getBreakClearType","breakClearType","getOutlineLevelEnumValue","outlineLevel","getTextAlignmentEnumValue","textAlignment","getLineStyleEnumValue","getLineSpacingTypeEnumValue","lineSpacing","writeBorder","wBorder","writeBorders","wBorders","writeParagraphFormat","isInline","rightIndent","firstLineIndent","beforeSpacing","afterSpacing","spaceBeforeAuto","spaceAfterAuto","lineSpacingType","keepLinesTogether","keepWithNext","contextualSpacing","widowControl","writeCharacterFormat","isWriteAllValues","toWriteInline","boldBidi","italicBidi","fontSizeBidi","isThemeFont","fontName","decimalDigits","removeInvalidXmlChars","commentInlines","ctext","mentions","blocks","outputArray","Boolean","flat","block","content","name_1","getEmailIdByName","serializeMentions","inlines","mentions_1","inlines2","inlines3","inlines4","inlines5","reverseString","splitString","formatClippedString","base64ImageString","sourceString","startString","formatText","lowerFirstChar","capitaliseFirst","intl","dotData","numberValue","numberFormat","splitBy","valArry","capitaliseFirstInternal","modifiedDate","getLocaleDate","toLocaleDateString","toLocaleTimeString","getUtcDate","toISOString","dt","getCompatibilityModeValue","compatibilityMode","compatValue","getUniqueElementId","splitSpaceInTextElementBox","fromStart","elementText","emptySpace","textBox","isMarkedForRevision","lineChildren","getTextIndexAfterWhitespace","splitWordByMaxLength","textElementBox","lineWidget","isInitialParsing","textLength","splittedText","spanIndex","spaceIndex","isWidthUpdated","splittedElement","wordBefore","wordAfter","wordSplitCharacters","Point","xPosition","yPosition","xIn","yIn","Base64","encodeString","enc1","enc2","enc3","enc4","unicodeEncode","tempInput","utftext","decodeString","WrapPosition","Rect","isIntersecting","currentBound","Padding","Margin","Widget","BodyWidget","FootNoteWidget","bodyWidgets","widget","indexInOwner","removeEditRange","previousPage","footnoteWidget","previousContainer","TableCellWidget","getPreviousSplitWidget","footNoteType","previousWidget","previousRenderedWidget","TableRowWidget","HeaderFooterWidget","allowNextPageRendering","nextPage","nextContainer","getNextSplitWidget","nextRenderedWidget","previous","equals","BlockWidget","getPreviousSplitWidgets","widgets","previousSplitWidget","getSplitWidgets","nextSplitWidget","splitWidget","combine","TableWidget","combineRows","addWidgets","destroyInternal","LineWidget","previousRow","previousCell","cellFormat","currentCell","columnIndex","isSplittedCell","ownerRow","componentDestroy","BlockContainer","footNoteReference","sectionFormatIn","isWord2010NextColumn","container","sectionFormat","hierarchicalIndex","headerFooterType","pages","removedHeaderFooters","getTableCellWidget","touchPoint","childWidget","tableWidth","wrapTextAround","getTableCellWidth","tableCellWidget","chilgWidget","headerWidget","footerWidget","headerWidgetIn","footerWidgetIn","tableCell","headerFooter","parentHeaderFooter","isLayouted","isFieldCodeBlock","locked","lockedBy","TextFrame","containerShape","blockAdv","isPageBreak","isColumnBreak","getContainerWidth","associatedCell","isGridUpdated","containerWidth","tableHolder","getCellWidth","shape","textFrame","firstRow","colIndex","pageWidth","contentControlProperties","getMinimumAndMaximumWordWidth","minimumWordWidth","maximumWordWidth","footNote","isSectionBreak","isChangeDetected","isEndsWithPageBreak","isEndsWithColumnBreak","isContainsShapeAlone","containsShape","ShapeBase","textWrappingStyle","inlineElement","ImageElementBox","EditRangeEndElementBox","EditRangeStartElementBox","ChartElementBox","ShapeElementBox","ContentControl","getInline","indexInInline","isStarted","splittedWidget","ListTextElementBox","getLength","getTotalLength","imageWidths","nextNode","matchInfo","matchedValue","wordStartIndex","wordEndIndex","span","spanLength","textHelper","getWidth","scriptType","imageWidth","maximum","measureParagraph","paraIndent","isArabicChar","character","isHebrewChar","isHindiChar","isKoreanChar","isJapanese","isThaiCharacter","isChineseChar","getFontScriptType","inputCharacter","Hindi","Korean","Japanese","Chinese","Arabic","Hebrew","Thai","English","splitTextByFontScriptType","inputText","fontScriptTypes","prevCharacterType","currCharacterType","surrogateRegex","splitTextRangeByScriptType","lineIndex","isField","iIncrementer","nextLineWidget","elementBox","textElement","splitedTextCollection","clonedtextElement","updateTextElementInRevisionRange","splitLtrAndRtlText","isPrevLTRText","hasRTLCharacter","characterRangeTypes","isTextBidi","isRTLLang","charTypeIndex","isRightToLeftLanguage","splitTextByConsecutiveLtrAndRtl","clonedTextElement","characterRange","splittedElementBox","inlineIndex","combineconsecutiveRTL","currentTxtRange","nextTxtRange","RightToLeft","isWordSplitChar","compareRevisions","revisionA","revisionB","cloneLine","TablePosition","positioning","allowOverlap","distanceTop","distanceRight","distanceLeft","distanceBottom","verticalOrigin","verticalPosition","horizontalAlignment","horizontalOrigin","isDefaultFormatUpdated","isContainInsideTable","footnoteElement","leftBorderWidth","rightBorderWidth","topBorderWidth","bottomBorderWidth","WTableHolder","spannedRowCollection","combineCells","getOwnerWidth","isBasedOnViewer","getTableWidth","rowWidth","rowWidget","getTableClientWidth","cell","getMinimumPreferredWidth","fitCellsToClientArea","factor","calculateGrid","isInsertRow","tempGrid","tempSpanDecimal","spannedCells","tableCellInfo","rowCellInfo","currOffset","startOffset","removeSpannedCell","rowIndex","cellIndex","sort","updateColumnSpans","tempSpan","getGridCount","checkTableColumns","isAllColumnHasPointWidth","isAllColumnHasPointWidthType","getTotalWidth","isAutoFit","buildTableColumns","getParentTable","resetColumns","rowSpannedCells","isAutoWidth","WebLayoutViewer","clientArea","isZeroWidth","pageContainerWidth","splitWidthToTableCells","hasSpannedCells","sizeInfo","ColumnSizeInfo","alignTablesRowByRow","minimumWidth","addColumns","rowSpannedCell","getCellSizeInfo","ownerColumn","insertIndex","validateColumnWidths","autoFitColumn","fitColumns","setWidthToCells","rw","updateProperties","updateAllowAutoFit","currentSelectedTable","autoFitBehavior","getMaxRowWidth","updateWidth","totalPreferredWidth","ownerWidth","convertPointToPercent","tablePreferredWidth","updateChildWidgetLeft","updateLeftIndent","shiftWidgetsForRtlTable","clientAreaX","clientAreaRight","cellSpace","updateWidgetLeft","isBidiTable","getTableOf","getRowOf","fitChildToClientArea","getColumnCellsForSelection","startCell","endCell","cells","tableClientWidth","splitWidthToRowCells","insertTableRowsInternal","tableRows","updateRowIndex","getCellStartOffset","headerHeight","isRenderBookmarkEnd","editRangeID","getCellOf","getCell","getCellUsingColumnIndex","tableGrid","prevOffset","tabGrid","gridStartIndex","getOffsetIndex","gridWidth","getCellOffset","updateRowBySpannedCells","getPreviousRowSpannedCells","currentRowIndex","spannedCell","include","isCellsHaveSameWidthUnit","firstCellWidthUnit","updateUniformWidthUnitForCells","getFirstRowWidth","getCellWidget","getValidColumnIndex","colSpan","getVerticalMergeStartCell","matchedCell","spacing","shiftWidgetForRtlTable","prevSpannedCellWidth","prevColumnIndex","getPreviousSpannedCellWidth","sizeInfoInternal","updatedTopBorders","isRenderBookmarkStart","isRenderEditRangeStart","isRenderEditRangeEnd","getContainerTable","nextCell","cellPreferredWidth","getCellLeftBorder","leftBorder","cellBorder","rowBorders","tableBorders","getLeftBorderToRenderByHierarchy","prevCell","getPreviousCell","getPreviousCellLeftBorder","getLeftBorderWidth","getRightBorderWidth","getCellRightBorder","getCellSpacing","actualCellSpacing","isSetWidth","hasMinimumWidth","hasMinimumWordWidth","prevCellRightBorder","getBorderBasedOnPriority","adjacentBorder","borderWeight","adjacentBorderWeight","borderPriority","adjacentBorderPriority","borderColInRGB","R1","G1","B1","adjacentBorderColInRGB","R2","G2","B2","borderBrightness","adjacentBorderBrightness","ownerCell","isFirstCell","isRowBorderDefined","isBorderDefined","rightBorder","getRightBorderToRenderByHierarchy","getNextCell","getAdjacentCellRightBorder","nextCellLeftBorder","isLastCell","getCellTopBorder","topBorder","getTopBorderToRenderByHierarchy","prevTopCell","getTopAdjacentCell","getPreviousCellTopBorder","previousTopCell","prevTopCellBottomBorder","getBottomBorderToRenderByHierarchy","isFirstRow","getCellBottomBorder","bottomBorder","nextBottomCell","nextRow","getAdjacentCellBottomBorder","prevBottomCellTopBorder","isLastRow","widthInfo","selectedWidgets","paragraphWidget","maxBaseLine","skipClipImage","layoutedElements","splitParagraph","lastElement","isFirstLine","isLastLine","getOffset","textIndex","getEndOffset","CommentCharacterElementBox","isInsert","isSpellCheck","previousLine","getNextTextElement","isRightToLeft","ischangeDetected","isSpellChecked","canTrack","skipformFieldLength","linkFieldCharacter","linkFieldTraversingForward","fields","formFieldData","formFields","isInsertFormField","linkFieldTraversingBackwardSeparator","linkFieldTraversingBackward","previousNode","childNode","prevParagraph","nextLine","childElement","objectCharacter","fieldCodeType","hasFieldEnd","fieldBeginInternal","fieldSeparatorInternal","fieldEndInternal","nextElement","FormField","enabled","helpText","TextFormField","textForm","getFormFieldInfo","copyFieldInfo","CheckBoxFormField","sizeType","checkBoxForm","DropDownFormField","dropdownItems","selectedIndex","dropDown","baselineOffset","trimEndWidth","ignoreOnceItems","istextCombined","renderedFontFamily","errorCollection","textEle","Footnote","separator","continuationNotice","continuationSeparator","isLayout","symbolCode","symbolFontName","customMarker","ErrorTextElementBox","startIn","endIn","FieldTextElementBox","fieldText","fieldSpan","revisionChanges","TabElementBox","tabText","tabLeader","tabSpan","bookmarkTypeIn","refereneceIn","nameIn","propertiesIn","reference","bookmarkType","widgetType","contentControlWidgetType","ContentControlProperties","revisionChange","contentControlListItems","xmlMapping","lockContentControl","lockContents","appearance","hasPlaceHolderText","multiline","isTemporary","isChecked","dateCalendarType","dateStorageFormat","dateDisplayLocale","dateDisplayFormat","checkedState","uncheckedState","ContentControlListItems","displayText","CheckBoxState","font","XmlMapping","isMapped","isWordMl","prefixMapping","storeItemId","customXmlPart","CustomXmlPart","xml","ShapeCommon","alternateText","shapeId","widthScale","heightScale","visible","verticalRelativePercent","horizontalRelativePercent","heightRelativePercent","widthRelativePercent","zOrderPosition","textWrappingType","layoutInCell","lockAnchor","autoShapeType","lineFormat","fillFormat","LineFormat","lineFormatType","dashStyle","FillFormat","fill","isInlineImage","imageStr","imgElement","isInlineImageIn","crop","isMetaFile","isCompressed","cropX","cropWidthScale","cropY","cropHeightScale","cropWidth","cropHeight","image","imageString","metaFileImageString","isCrop","isListFollowCharacter","isFollowCharacter","editRangeStart","editRangeId","columnFirst","columnLast","user","group","renderLockMark","currentUser","editRangeMark","pageContainer","removeEditRangeMark","editRangeEnd","chartTitle","chartType","chartElement","chartCategory","chartSeries","chartArea","ChartArea","chartPlotArea","chartTitleArea","ChartTitleArea","chartLegend","ChartLegend","chartPrimaryCategoryAxis","ChartCategoryAxis","chartPrimaryValueAxis","chartDataTable","ChartDataTable","gapWidth","overlap","div","officeChartInternal","loaded","onChartLoaded","officeChart","convertChartToImage","dataURL","series","foreColor","ChartCategory","categoryXName","chartData","ChartData","yValue","xValue","legendPostion","ChartSeries","chartDataFormat","trendLines","errorBar","ChartErrorBar","dataLabels","ChartDataLabels","seriesFormat","ChartSeriesFormat","sliceAngle","holeSize","trendLine","direction","endStyle","errorValue","errorDirection","isLegend","isBubble","isCategory","isSeries","isValueEnabled","isPercentageEnabled","showLeaderLines","ChartTrendLines","intercept","forward","backward","displayRSquared","displayEquation","dataFormat","ChartDataFormat","ChartLayout","ChartFill","fillColor","fillRGB","layoutX","layoutY","majorTickMark","minorTickMark","tickLabelPostion","hasMinorGridLines","hasMajorGridLines","majorUnit","isAutoMajor","maximumValue","minimumValue","categoryType","isSeriesKeys","isHorzBorder","isVertBorder","isBorders","commentType","commentId","commentInternal","comment","renderCommentMark","topPosition","leftPosition","commentMarkDictionary","commentMark","selectComment","overlapKey","positionOverlap","elementsOverlap","ifNotPresent","isResolved","z_1","elementOne","elementOneTop","elementOneLeft","elementOneBottom","elementOneRight","elementTwoTop","elementTwoLeft","navigationArray","currentSelectedComment","commentReviewPane","commentPane","isEditMode","showComments","removeCommentMark","CommentElementBox","authorIn","initialIn","textIn","isReply","ownerComment","mentionsIn","createdDate","replyComments","commentStartIn","commentEndIn","initial","Page","boundingRectangle","repeatHeaderRowTableWidget","endnoteWidget","currentPageNum","removeFieldInWidget","removePage","tableColumns","previousColumnIndex","curColumnIndex","currentColumnIndex","WColumn","availableWidth","endOffset","widthType","column","isFitColumns","preferredTableWidth","totalColumnWidth","minWidth","isPointWidthType","isAuto","isNestedTable","indent","maxTotal","minTotal","remainingWidthTotal","isAllColumnPointWidth","minWidthExceedCellWidth","columnIndexCollection","difference","preferred","averageWidth","considerMinAsTableWidth","totalMinimumWordWidth","totalMinWidth","totalCellWidth","getPreviousValidOffset","maxWidth","hasMaximumWordWidth","BreakElementBox","breakElement","FootnoteEndnoteMarkerElementBox","footEndEle","WTabStop","positionIn","deletePositionIn","justification","leader","tabStop","deletePosition","tabJustification","tab","uniqueParagraphFormat","tabs","getUpdatedTabs","inTabs","tabStops","tabsInListFormat_1","getTabStopsFromListFormat","_c","_d","hasTabStop","getListFormatParagraphFormat","paraFormat","formatInList","isInsideBodyWidget","isPaste","clearProperty","initializeUniqueParagraphFormat","uniqueParagraphFormats","uniqueParaFormatTemp","addUniqueParaFormat","clearIndent","clearPropertyValue","findByName","updateUniqueParagraphFormat","isStyle","WStyle","copyStyle","paraStyle","charStyle","WTableStyle","WStyles","collection","returnStyle","getStyleNames","getStyles","styleObjects","styles_1","returnStyleObject","WSectionFormat","uniqueSectionFormat","uniqueSectionFormats","initializeUniqueSectionFormat","uniqueSectionFormatTemp","addUniqueSectionFormat","isUndoing","isRedoing","updateUniqueSectionFormat","WColumnFormat","uniqueColumnFormat","uniqueColumnFormats","indexIn","initializeUniqueColumnFormat","uniqueColumnFormatTemp","addUniqueColumnFormat","updateUniqueColumnFormat","colFormat","WListLevel","uniqueListLevel","listLevelPattern","followCharacter","paraStyleName","restartLevel","isLegalStyleNumbering","initializeUniqueWListLevel","uniqueListLevels","uniqueListLevelTemp","addUniqueWListLevel","dotBullet","squareBullet","arrowBullet","circleBullet","TextHelper","paragraphMarkInfo","containerContext","getEnSpaceCharacter","repeatChar","getParagraphMarkWidth","getParagraphMarkSize","Width","getFormatText","paragraphMark","getHeight","textSizeInfo","Height","BaselineOffset","getTextSize","textTrimEndWidth","isRTL","isRTLText","setText","fontToRender","getFontNameToRender","heightInfoCollection","textMeasureHelper","getHeightInternal","toLocaleLowerCase","measureTextExcludingSpaceAtEnd","lineBreakMark","letterSpacing","scaleFactor","measureText","textToRender","isBidi","isRender","isRtlText","spaceCount","updateTextSize","listCharacterFormat","breakCharacterFormat","containsSpecialCharAlone","specialChars","containsNumberAlone","containsCombinationText","inverseCharacter","containsSpecialChar","isUnicodeText","isUnicode","getRtlLanguage","isRtl","lastLtrIndex","ltrText","rtlText","wordSplitChars","numberText","currentCharacterType","separateEachWordSplitChars","LeftToRight","WordSplit","charType","isNumberNonReversingCharacter","isNonWordSplitCharacter","lang","numberNonReversingCharacters","isNonWordSplitChar","charFormat","getFontNameBidiToRender","isEastAsiaScript","getFontNameEAToRender","getFontNameAsciiToRender","getFontNameFromTheme","EastAsia","Default","CS","hintType","fontScheme","hasThemes","themes","majorFontScheme","updateFontNameFromTheme","minorFontScheme","majorMinorFontScheme","fontNameFromTheme","fontSchemeList","fontSchemeStruct","typeface","fontTypeface","themeFontLanguage","getFontNameWithFontScript","localeID","fontTypeFaces","CHECK_BOX_FACTOR","Layout","islayoutFootnote","isMultiColumnDoc","allowLayout","isReplaceAll","isTextFormat","isSectionBreakCont","isReplacingAll","footHeight","existFootnoteHeight","isfootMove","footnoteHeight","isTableFootNote","isRelayout","isRelayoutneed","isOverlapFloatTable","isInitialLoad","maxTextHeight","maxBaseline","maxTextBaseline","isFieldCode","isRtlFieldCode","isRTLLayout","isSkipFirstLineIndent","isFootnoteContentChanged","isEndnoteContentChanged","is2013Justification","nextElementToLayout","endNoteHeight","isMultiColumnSplit","isMultiColumnLayout","skipUpdateContainerWidget","isIFfield","isRelayoutEndnote","isLayoutWhole","isBidiReLayout","defaultTabWidthPixel","isRelayoutFootnote","isRelayoutOverlap","skipRelayoutOverlap","isWrapText","isYPositionUpdated","isXPositionUpdated","hasFloatingElement","isFootNoteLayoutStart","wrapPosition","shiftedFloatingItemsFromTable","isDocumentContainsRtl","layoutedFootnoteElement","isSameStyle","currentParagraph","isAfterSpacing","nextOrPrevSibling","allowSpaceOfSameStyleInTable","updateFirstParagraphSpacingBasedOnContextualSpacing","updateLastParagraphSpacingBasedOnContextualSpacing","checkOwnerTablePrevItem","nextCellFirstItem","layoutItems","sections","isReLayout","isContinuousSection","section","numberOfColumns","nextSection","columnLayoutArea","setColumns","lastpage","breakCode","prevSection","splitWidgets","nextColumn","getNextColumnByBodyWidget","clientActiveArea","pageHeight","createNewPage","section_1","getBodyWidget","height_1","getNextWidgetHeight","updateClientArea","addBodyWidget","pageIndex","i_1","prevPage","sectionIndex","insertPage","layoutSection","sectionHeight","layoutComments","comments","updateFieldElements","layoutType","layoutEndNoteElement","isScrollHandler","clearContent","updateScrollBars","nextBlock","updateClientAreaForBlock","layoutBlock","PageLayoutViewer","getColumnBreak","splittedSection","firstBody","splitBodyWidgetBasedOnColumn","layoutfootNote","reLayoutMultiColumn","isFirstBlock","blockIndex","combineMultiColumnForRelayout","previousSection","isUpdatedClientArea","firstLine","getMaxElementHeight","previousBlock","moveBlocksToNextPage","previousParagraph","nextBodyWidget","removeEmptyPages","clearBlockWidget","reLayoutMultiColumnBlock","splitSections","lastSection","firstSection","isPreviousSplit","updateCellHeightInCombinedTable","equalWidth","previousStartIndex","previousEndIndex","combineMultiColumn","layoutMultiColumnBody","totalHeight","getCountOrLine","lineCount","lineToBeSplit","lineCountInfo_1","lineIndexInCell","moveToNextLine","rows","getParentRow","updateWidgetsToTable","clearRowWidget","layoutRow","lastBody","nonEqualBody","initialCount","updatePosition","skipPosition","POSITIVE_INFINITY","clearTableWidget","isUpdatedList","updatedHeight","getBookmarkMargin","isSplit","splitCountLine","totalNoOflines","skip","maxHeight","lineMargin","getCountOrLineTable","maxSplitHeight","isNested","minHeight","minCountCell","maxCountCell","countInCell","i_2","maxCellHeight","minCellHeight","layoutHeaderFooter","headerFooterWidget","getCurrentPageHeaderFooter","parentHeader","updateHFClientArea","layoutHeaderFooterItems","updateRevisionsToHeaderFooter","shiftItemsForVerticalAlignment","footer","floatingItem","updateHeaderFooterToParent","typeIndex","getHeaderFooter","headersFooters","childWidge","lineWidge","childrens","removeId","revisionsInternal","updateRevisionRange","linkFieldInHeaderFooter","linkFieldInParagraph","linkFieldInTable","previousElement","firstBlock","getCommentById","commentStart","commentEnd","commentsCollection","updateClientAreaLocation","pargaraph","shiftChildLocation","shiftTop","widgetTop","footerMaxHeight","childTop","getFloatingItemPoints","updateChildLocationForCellOrShape","shiftChildLocationForTableWidget","shiftChildLocationForTableRowWidget","shiftChildLocationForTableCellWidget","layoutParagraph","nextBlockToLayout","checkAndRelayoutPreviousOverlappingBlock","layoutTable","updateTableYPositionBasedonTextWrap","tableY_1","tableRect_1","shapeRect","updateChildLocationForTable","cutFromTop","preivousBlock","startOverlapWidget","endOverlapWidget","paraRect","tableRect","blockRect","layoutStartEndBlocks","addParagraphWidget","updateXPositionForEmptyParagraph","previousPara","addLineWidget","isFirstElementWithPageBreak","footnote","updateColumnIndex","updateFootnoteClientArea","splitFootNoteWidgetBasedOnColumn","footBody","newPara","getFirstParagraphBlock","height_2","endnote","moveEndnoteToNextPage","getFootNoteBodyHeight","shiftChildWidgetInFootnote","sub","newBodyWidget","createSplitBody","newEndnote","currentBodyWidget","lineCountInfo_2","nextBody","increase","bodyWidgetHeight","getBodyWidgetHeight","multiColumnY","columnBody","checkParaHasField","hasField","fieldStacks","checkTableHasField","isListLayout","layoutListItems","layoutEmptyLineWidget","layoutFloatElements","updateClientWidth","layoutLine","updateWidgetToPage","clearLineMeasures","layoutShape","isHorizontalRule","moveToNextPage","updateShapeBaseLocation","updateClientAreaForTextBoxShape","moveElementFromNextLine","isNotEmptyField","layoutElement","lineIndex_1","isEmptyField","constructRevisionFromID","layoutFieldCharacters","moveFromNextPage","bookmrkElement","isRenderBookmarkAtEnd","lastLine","getLastParagraph","endRow","contentControlCollection","endPage","cCStart","hasValidElement","isTocField","getFieldResult","handleEnterKey","checkAndSplitTabOrLineBreakCharacter","isMeasureParaWidth","getTabWidth","adjustPosition","contentControl","getBeforeSpacing","updateFieldText","cutClientWidth","splitElementForClientArea","checkLineWidgetWithClientArea","layoutFootEndNoteElement","findDiff","textWrap","addElementToLine","currentLine","isElementMoved","addSplittedLineWidget","splitTextForClientArea","previousLeft","previousTop","previousWidth","adjustedRect","adjustClientAreaBasedOnTextWrap","wrapDiff","getFirstElement","wrapPos","updateWrapPosition","previousWrapPos","isFirstitemInPage","yposition","isTextFitBelow","isNeedToWrapForTopAndBottom","currWidgetOwnerPara","wrapOwnerIndex","wrapItemIndex","textWrappingBounds","wrapCollectionIndex","floatingEntity","isTextRangeInTextBox","floatingItemOwnerPara","isLayoutInCell","floatingItemOwnerCell","currParaOwnerCell","isNeedToWrapForSquareTightAndThrough","isNeedToWrapForSquareTightAndThroughForTable","wrapIndex","wrappingStyle","floatingElemnt","isInTextBox","isNeedToWrapLeafWidget","getMinWidth","currTextRange","minwidth","getNextSibling","nextSiblingText","getNextTextRangeWidth","nextSiblingTextRange","nextsibling","sizeNext","isNextSiblingSizeNeedToBeMeasure","isNextSibligSizeNeedToBeMeasure","isLeafWidgetNextSiblingIsTextRange","textRange","nextSiblingwidget","elementWidth","textInfo","isNeedDoIntermediateWrapping","remainingClientWidth","leafWidget","minimumWidthRequired","isFloatingItemOnLeft","bounds","currentElementBox","ownerPara","layouter","isFirstItem","clientLayoutArea","isExistAfter","listLeftIndent","paragraphLeftIndent","paragarphRightIndent","isnewline","isBorderValueZero","borderThickness","tableHorizontalPosition","getMaximumRightCellBorderWidth","getDefaultBorderSpacingValue","getMinimumWidthRequiredForTable","topMarginValue","updateClientAreaForTextWrap","xposition","isUpdateClientArea","rect1","prevY","adjustClientAreaBasedOnTextWrapForTable","floatingElement","isShape","wrappingBounds","tableHeight","getNestedTable","startat","initialFootNoteNumber","getFootEndNote","footNoteNumberFormat","footnoteCollection","initialEndNoteNumber","endnoteNumberFormat","endnoteCollection","isFitted","positionchanged","footIndex","isCreated","newParagraph","totalPage","foot","endNote","lastPage","getNextValidElementForField","splitByLineBreakOrTab","splittedParagraph","isNeedToLayoutShape","splitCurrentWidget","cutFromLeft","splitTextElementWordByWord","checkAndUpdateFieldData","fieldCode","getFieldCode","seperator","checkBoxTextElement","setCheckBoxFontSize","dropDownTextElement","isEmptyLine","isShiftEnter","subWidth","whiteSpaceCount","canRenderParagraphBorders","canRenderBorder","isUpdateMarginForCurrentLine","isContainsRtl","shiftElementsForRTLLayouting","isParagraphStart","isParagraphEnd","getWidthAndSpace","getSubWidth","checkInbetweenShapeOverlap","getLineSpacing","getAfterSpacing","skipTopBorder","skipBottomBorder","renderedElements","adjustPositionBasedOnTopAndBottom","isUpdate","clearListElementBox","layoutList","currentListLevel","updateListValues","getListNumber","isIosDevice","tabWidth","addListLevels","getListLevelPattern","columneBreak","movedElementBox","newLineWidget","splitByWord","getSplitIndexByWord","spitTextElementByWhitespace","updateRevisionForSplittedElement","splitErrorCollection","splittedBox","ignoreItems","splitByCharacter","atleastSpacing","getTextSplitIndexByCharacter","splitWidth","isSplitted","isJustify","paddingLeft","getTextIndexAfterSpace","isSplitByHyphen","isSplitByWord","textWidth","characterUptoWS","isWordFittedByJustification","checkPreviousElement","spiltBy","remainder","newSpan","newText","maxDescent","updateLineWidget","skip2013Justification","measurement","totalSpaceCount","trimmedSpaceWidth","isEndsWithLineBreak","totalSpaceWidth","getTotalSpaceWidth","widthForAdjustment","splitParagraphForMultiColumn","addSubWidth","maxElementHeight","maxElementBottomMargin","maxElementTopMargin","subWidthInfo","alignElements","alignLineElements","i_3","elementLeftMargin","i_4","updateShapeYPosition","startLineIndex","updateClientAreaForNextBlock","isFirstBody","parawidget","overlapShape_1","lineY_1","getLineY","isInsideTable_1","emptyParaPosition_1","isFloatingElementPresent_1","lineRect","considerShape","updatedFloatPosition","lineY","spaceHeight","spaceBaseline","isContainsImage","elementHeight","isCellContentControl","isCheckBoxElement","paragraphMarkSize","isList","startBlock","alignBlockElement","splitRow","isDocumentLoaded","updateWholeListItems","nextParagraph","moveChildsToParagraph","footWidget","getFootNoteWidgetsOf","moveFootNotesToPage","getFootNoteHeight","addRemoveFloatElementsFromBody","isImagePresent","block_1","srcParagraph","childStartIndex","paragarph","getPreviousBlock","getFirstParagraphInCell","startRow","newTable","createTableWidget","isMoveCurrentBlock","updateClientPositionForBlock","currentBlock","isClientAreaUpdated","addTableWidget","addTableRowWidget","updateChildLocationForRow","endBlock","startParagaraph","getFirstParagraphInFirstCell","isTableHasParaVerticalOrigin","isLastElement","getCellContentHeight","shiftFootnoteChildLocation","shiftFooterChildLocation","footerDistance","lastTextElement","index_1","clearInvalidList","isAutoList","renderedLevelOverrides","getAbstractListById","renderedLists","ClearSubListLevelValues","getListText","levelNumberTemp","getListStartValue","startVal","listAdv","listText","levelKey","getListTextListLevel","getAsLetter","quotient","letter","listValue","customPattern","getAsRoman","getAsLeadingZero","getOrdinalTextInSpanish","getOrdinalText","getAsOrdinal","generateNumber","magnitude","numberstring","retval","ordinalString","numberToWords","isCardText","words","unitsValue","numberToSpanishWords","tensValue","tensValue_Ordinal","getOrdinalInSwedish","getOrdinalInCatalan","getOrdinalInDanish","getOrdinalInEnglish","levelOverrideAdv","getOverrideListLevel","fPosition","isCustomTab","tabBeforeLeftIndent","clientActiveX","tabStopPosition","defaultTabWidth","breaked","tabPosition","tabInfo","getJustificationTabWidth","getRightTabWidth","areaWidth","clientActiveWidth","totalClientWidth","clientActiveAreaWidth","justify","trimSpace","lineText","subWidths","getSubWidthBasedOnTextWrap","renderElementBox","widthExcludeSpace","totalSubWidth","lineContent","getSubWidthInfo","nextWordWidth","availableLineWidth","effectiveWidth","normalWidth","currentWidget","lastWrapPositionWidth","wrappedSubWidth","dontUseHtmlParagraphAutoSpacing","before","alterLineSpacing","isParagraphFirstLine","isParagraphLastLine","lastLineWidget","lastInline","hyphenIndex","moveNextWidgetsToTable","moveFromNext","currentTable","nextWidgets","addTableCellWidget","maxCellMarginTop","maxCellMarginBottom","cellspace","linestyle","isLeftStyleNone","isRightStyleNone","isInsertTable","checkPreviousMargins","addWidgetToTable","tableCollection","rowCollection","footnotes","endRowWidget","isInitialLayout","startRowIndex","isRepeatRowHeader","prevWidget","rowWidgetIndex","footnoteWidgets","prevIndex","updateRowHeightBySpannedCell","updateRowHeightByCellSpacing","getFootnoteBody","layoutFootnoteInSplittedRow","updateHeightForRowWidget","addEmptyFootNoteToBody","getFootnoteHeightInternal","updateSpannedRowCollection","prevRowWidget","updateRowHeight","mergedCellHeight","isRowSpanEnd","splittedCellWidgets","splittedCell","isVerticalMergedCellContinue","tableRowWidget","footNoteCollection","isRowSpan","isFirstLineFitForRow","getSplittedWidgetForRow","insertSplittedCellWidgets","issplit","cellHeight","previousHeight","maximumCellWidgetHeight","getSplittedWidget","getSplittedWidgetForSpannedRow","combineSplittedRowWidgets","updateWidgetLocation","count_1","cellWidget_1","previousRowHeight","existingRow","existingCell","existingPara","isNeedToInsertNextCell","nextSplittedCell","nextSplittedCellColumnIndex","splitCell","nextColumnIndex","getFootNoteHeightInLine","getFootnoteFromLine","tableWidgets","rowWidgets","rearrangeRow","rowHeight","getRowHeight","headerRow","isAllowBreakAcrossPages","moveRowToNextTable","footnoteElements","continueHeader","isSplitRow","isInsertSplittedWidgets","isTableInsert","updateWidgetsToPage","rowToMove","keepNext","isTableFirstRow","removeTable","prev","curretTable","shiftFloatingItemsFromTable","insertHeaderRow","getMaxTopCellMargin","getMaxBottomCellMargin","updateClientAreaForCell","block_2","getHeader","getHeaderHeight","currentRenderingPage","row_1","getHeaderHeightForSpannedRow","updateWidgetToRow","isUpdateVerticalPosition","cellspacing","currentRowWidgetIndex","rowSpanWidgetEndIndex","splitSpannedCellWidget","spanEndRowWidget","childWidget_1","updateHeightForCellWidget","visiblePages","updateCellVerticalPosition","updateHeightForTableWidget","previousRowIndex","insertRowSpannedWidget","insertEmptySplittedCellWidget","emptyCellWidget","createCellWidget","splitMinimalWidget","nestedCount","isCellSplit","splittedPara","getSplittedWidgetForPara","tableCol","splittedTable","getSplittedWidgetForTable","lineBottom","moveEntireBlock","isSplitParagraph","isSplittedTable","rowBottom","splittedRow","allowRowBreakAcrossPages","isFirstLineFitForPara","cellwidget","isFirstLineFitInShiftWidgets","isFirstLineFitForTable","isFit","isFirstLineFitForCell","skipHeight","prevBodyWidgetFloatingElements","isRowMovedToNextTable","prevClientActiveAreaX","previousBodyWidget","isUpdateToTop","displacement","getDisplacement","updateCellContentVerticalPosition","updateShapeInsideCell","updateTableWidgetLocation","floatElement","cellContentHeight","isDisplacement","paraIndex","contentHeight","cellY","withShapeContentHeight","withShapeBottom","considerShapeHeight","considerAsTop","getFloatingItemsHeight","shapeBottom","paraBottom","considerPositionTableHeight","totalShapeHeight","nestedWrapTable","blockWidget","getTableLeftBorder","getTableRightBorder","getTableTopBorder","getTableBottomBorder","getCellDiagonalUpBorder","getCellDiagonalDownBorder","layoutNextItemsBlock","isFootnoteReLayout","isNextBlockToShift","updateNextBlockList","isFootnoteElementRemoved","floatingElementLength","isInsertingTOC","updateContainerWidget","updateListItemsTillEnd","updateClientAreaForLine","startLineWidget","getTop","elementBoxIndex","isSkip","layoutBodyWidgetCollection","reLayoutLine","reLayoutRow","updateHeaderFooterClientAreaWithTop","isBlockInHeader","block_3","shiftTableWidget","pageIndexBeforeLayouting","block_4","yPos","getYPosition","pageIndexAfterLayouting","clearFootnoteReference","updateClientHeight","startPage","footNoteWidget","clearPosition","clearHeight","clearGrid","clearCellWidget","shiftNextWidget","isSkipShifting","isLayoutEnabled","curretBlock","checkAndGetBlock","prevBodyWidget","footWidgets","prevPara","shiftNextWidgets","clientActiveAreaForTableWrap","clientAreaForTableWrap","tableView","updateClientAreaTopOrLeft","updateClientAreaForWrapTable","updateTableFloatPoints","tables","beforeLayout","clienactare","tableLefts","splittedTable_1","layoutedTable","isRowLayout","updateExistingFootnoteHeight","updateClientAreaForRow","layoutCell","startPosition","adjacentStartPosition","adjacentEndPosition","getAdjacentRowCell","cellStartPos","cellEndPos","adjCells","columnLength","adjRow","prevCellEndPos","prevCellEndIndex","adjCell","adjCellStartPos","adjCellEndPos","adjCellEndIndex","prevRowAdjCell","prevRowAdjCellEndPos","adjCellColumnSpan","prevRow","updateTopBorders","cellTopBorder","prevCellBottomBorder","isMultiColumnShift","checkAndShiftEndnote","lastbody","isSectionEndsWithColumnBreak","reLayoutOrShiftWidgets","lastPage_1","lastPageLastPara","firstPage","updateSectionIndex","enableLockAndEdit","lastPage_2","prevPageNum","isRealyoutList","isNeedToRelayout","updateContainerForTable","shiftWidgetsBlock","updateRenderedListItems","shiftWidgetsForPara","shiftWidgetsForTable","prevBodyObj","getBodyWidgetOfPreviousBlock","skipFootNoteHeight","shiftToPreviousWidget","updateFloatingElementPosition","updateClientAreaByWidget","isFitInClientArea","isPageBreakInsideField","createOrGetNextBodyWidget","isSplittedToNewPage","k_1","isFieldElement","getFootNotesOfBlock","getFootNotesWidgetsInLine","getFootNoteWidgetsBy","isShifting","k_2","blockfootnoteWidgets","getFootNodeWidgetsToShiftToPage","fromBodyWidget","splittedWidgets","footNoteWidgets","toBodyWidget","isClearHeight","shiftRowWidget","shiftCellWidget","footheight","updateFootnoteToBody","shiftParagraphWidget","k_3","prevObj","tempClientAreaX","updateVerticalPositionToTop","combinedTable","isUpdateTop","tablewidget","paragraphView","getMaximumLineHeightToSplit","footNoteInFirstLine","widgetIndex","updateParagraphWidgetInternal","line_1","activeArea","paragraphHeight","footNoteIndex","check","fromPage","toPage","createOrGetNextColumnBody","isLineInFootNote","footNotes","footContent","newParagraphWidget","shiftFloatingElements","destroyAndScroll","scrollToBottom","moveFootnoteFromLastBlock","sectionBreakContinuous","moveToNextColumnByBodyWidget","columnWidth","child_1","newBody","fromBody","nextColumnBody","isSkipList","lineToLayout","isFootNoteInsert","newBodyWidget_1","isEndnoteElementRemoved","isSelectionChangedOnMouseMoved","isContainsRTL","paraBidi","textRangeBidi","hasTextRangeBidi","isContainsRTLText","lineElementsBidiValues","Tab","isStartMark","isStartMarker","isEndMark","isEndMarker","nextltWidget","getNextValidWidget","rtlStartIndex","updateCharacterRange","reorderedWidgets","reorderElements","isNumberReverseLangForSlash","isNumberReverseLangForOthers","layoutedWidgets","previousIndex","joinArray","listElementsBidiValues","lastItemIndexWithoutRTLFlag","consecutiveRTLCount","consecutiveNumberCount","reorderedElements","prevCharType","prevBidi","isInsertWordSplitToLeft","shiftLayoutFloatingItems","indentX","indentY","headerDistance","pageClientWidth","pageClientHeight","textWrapStyle","vertOrigin","horzOrigin","horzAlignment","vertAlignment","verticalPercent","shapeHeight","shapeWidth","vertPosition","horzPosition","heightPercent","widthPercent","autoShape","getVerticalPosition","getHorizontalPosition","isXPositionUpated","getLeftMarginHorizPosition","getRightMarginHorizPosition","paraItem","cellWid","cellInnerWidth","pageLeft","tableTotalWidth","getTotalColumnSpan","tableRow","totalColumnSpan","highestBorderSize","DocumentCanvasElement","DocumentCanvasRenderingContext2D","getContext","contextId","toDataURL","quality","renderedPath","GLOBAL_ALPHA","GLOBAL_COMPOSITE_OPERATION","FILL_STYLE","STROKE_STYLE","DIRECTION","FONT","TEXT_ALIGN","TEXT_BASE_LINE","LINE_WIDTH","LINE_CAP","drawImage","sx","sy","sw","dx","dy","dw","beginPath","BEGIN_PATH","clip","fillRule","CLIP","FILL","stroke","STROKE","closePath","CLOSE_PATH","lineTo","LINE_TO","moveTo","MOVE_TO","RECT","setLineDash","SEGMENTS","clearRect","CLEAR_RECT","fillRect","FILL_RECT","strokeRect","STROKE_RECT","restore","RESTORE","SAVE","fillText","FILL_TEXT","MAX_WIDTH","strokeText","STROKE_TEXT","scale","SCALE","Renderer","isPrinting","isExporting","pageTop","isRenderHeader","pageCanvasIn","exportPageCanvas","containerCanvas","spellCheckerModule","selectionCanvas","pageCanvas","renderWidgets","pageContext","fillStyle","visibleBounds","strokeStyle","pageOutline","setPageSize","renderHFWidgets","renderfootNoteWidget","renderHeaderSeparator","selectionContext","dpr","devicePixelRatio","documentEditorSettings","printDevicePixelRatio","globalAlpha","cliped","headerFooterHeight","getScaledValue","footerHeight","renderFloatingItems","renderWidget","renderDashLine","getHeaderFooterType","l10n","defaultLocale","sectionMarkIndex","renderHeaderFooterMark","renderHeaderFooterMarkText","width_1","type_1","sectionIndex_1","headerFooterWidget_1","width_2","getFooterHeight","footerWidgetHeight","actualHeight","differentFirstPage","differentOddAndEvenPages","isSmallDash","renderSolidLine","textBaseline","isClipped","xPos","clipRect","renderHeader","lineBetweenColumns","linestartY","zoomFactor","endX","endY","renderSingleBorder","wrappingType","overLappedShapeWidgets","isOverLappedShapeWidget","renderImageElementBox","shapeLeft","shapeTop","renderShapeElementBox","sortedOverLappedShapeWidgets","isBelowText","isZeroShapeHeight","shapeType","renderLockRegionBorder","renderParagraphWidget","renderTableWidget","settinsModel","collaborativeEditingSettings","editableRegionColor","lockedRegionColor","parentTable","updateTableHeaderRows","j_1","renderTableCellWidget","clonedTable","clonedRow","clonedRow_1","renderParagraphBorder","renderLine","paragraphWidet","getParagraphLeftPosition","getTopMargin","getBottomMargin","renderImgBorder","borderStyle","revisionInfo","getPreviousTextElement","renderedHeight","hangingIndent","footerY","footWidth","footNoteElement","renderTableRowWidget","renderTableOutline","showBookmarks","lastPara","renderBookmark","getEndPosition","cellTopMargin","cellBottomMargin","renderSelectionHighlightOnTable","renderTableCellOutline","getFirstParagraph","xLeft","ytop","highlightEditableRanges","widgetInfo","highlighters","editRegionHighlighters","checkHeaderFooterLineWidget","selectedWidget","parentIndex","currentLineIndex","renderEditregionContentHighlight","contentControleditRegionHighlighters","contenControl","getContentControl","endUpdated","contentControlDropDownChange","contentMark","renderEditRegionHighlight","renderHighlight","renderSearchHighlight","searchModule","searchHighlighters","searchHighlightColor","renderSelectionHighlight","isScrollToSpellCheck","addSelectionHighlight","addSelectionHighlightTable","formFieldHighlighters","formFieldSettings","applyShading","shadingColor","isAltered","formField","getFormfieldInLine","commentIDList","underlineY","getUnderlineYPosition","pageGap","yTop","settings","enableComment","getBookmarks","isBookmarkEndAtStart","previousParaElement","prevRenderableElement","isRenderablePresent","isRenderable","getPreviousParagraphBlock","toSkipFieldCode","renderListTextElementBox","shapeLeftMargin","shapeTopMargin","renderTextElementBox","bookmark","showHiddenMarks","currentCharFormat","characterFont","retriveCharacterformat","authors","textinfo","isBookmarkAtStart","combineHexColors","color1","color2","hex1","hex2","r1","g1","b1","r2","g2","b2","restrictColor","combinedColor","fontSizeFactor","isParaBidi","bgColor","getBackgroundColorHeirachy","getDefaultFontColor","tabMark","replaceSpace","renderUnderline","renderStrikeThrough","isHeightType","doHighLight","checkRevisionType","getRevisionColor","renderFontFamily","scaledWidth","tabElement","getTabLeader","spellChecker","removeUnderline","triggerSpellCheck","errorDetails","checktextElementHasErrors","errorFound","errorWordCollection","exactText","manageSpecialCharacters","renderWavyLine","errorElements","triggerElementsOnLoading","handleChangeDetectedElements","currentInfo","getRevisionType","tabMarkString","tabMarkWidth","availableSpaceWidth","checkText","beforeIndex","checkElementCanBeCombined","markindex","currentText","retrievedText","ignoreAllItems","handleUnorderedElements","indexInLine_1","indexinParagraph_1","checkSpellingInPageInfo","isElementPresent","enableOptimizedSpellCheck","hasSpellError","handleWordByWordSpellCheck","isInUniqueWords","hasSpellingError","isErrorWord","triggerPageSpellCheck","callSpellChecker","languageID","allowSpellCheckAndSuggestion","iteration","markIndex","isLastItem","indexInLine","indexinParagraph","handleSplitWordSpellCheck","canUpdate_1","specialCharacter","getSpecialCharactersInfo","whiteSpaceData","getWhiteSpaceCharacterInfo","x1","beginningWidth","isBeginning","y1","x2","endWidth","startingPoint","endingPoint","drawWavy","frequency","amplitude","negative","lineCap","cx","cy","fx","fy","tx","ty","waveOffsetLength","ang","atan2","PI","sin","cos","tabString","getTabLeaderString","getTrimmedWidth","underlineHeight","widgetWidth","containerWid","fallbackImage_1","imgX_1","imgY_1","width_3","render_1","lastLoaded","addBase64StringInCollection","getImageString","picturePositionY","checkContentControlLocked","contentControlImage","getImageContentControl","color_1","cellRightMargin","cellLeftMargin","renderCellBackground","border_1","lineWidthInt","cellX","borderInfo","prevRowSpannedCells","isAffectedByRowSpan","nextRowIsInCurrentTableWidget","previousCellIndex","lastCellWidget","nextRowWidget","drawTextureStyle","isForeColorEmpty","isBackColorEmpty","percent","getForeColor","foreColorRgb","backColorRgb","getColorValue","foreColorValue","backColorValue","checkInsert","getTextNode","childnode","IconPosition","elementRect","popupRect","parentDocument","targetContainer","cssClassName","Button","removeRippleEffect","cssClass","tempContent","enableHtmlSanitizer","setIconCss","controlStatus","iconCss","iconPosition","isToggle","btnClickHandler","unWireEvents","click","focusIn","fixedParent","calculatePosition","positionX","positionY","targetValues","posX","posY","setPosx","getElementHCenter","setPosy","getElementTop","getElementRight","getElementVCenter","getElementLeft","getElementBottom","getBodyScrollTop","getBodyScrollLeft","popupWidth","fit","viewPortElement","elemData","getTargetContainerWidth","getViewPortWidth","containerLeft","ContainerLeft","containerRight","ContainerRight","overLeft","overRight","containerHeight","getTargetContainerHeight","getViewPortHeight","containerTop","ContainerTop","containerBottom","ContainerBottom","overTop","overBottom","isCollide","elemOffset","yAxis","topCollideCheck","xAxis","leftCollideCheck","topSide","rightSide","leftSide","bottomSide","flip","tEdge","TL","TR","BL","BR","eEdge","oldVisibility","removeProperty","edge","updateElementData","setPosition","leftFlip","topFlip","scaleX","scaleY","transformStyle","matrix","DOMMatrix","setPopup","eStatus","deepCheck","collideSide","getTargetContainerLeft","getTargetContainerTop","windowWidth","documentReact","PositionData","CLASSNAMES","Popup","setEnableRtl","refreshPosition","setContent","actionOnScroll","wireScrollEvents","unwireScrollEvents","resolveCollision","checkCollision","relateTo","collisionDestroy","orientationOnChange","getRelateToElement","scrollRefresh","parent_2","relateToElement","hide","targetVisible","isElementOnViewport","targetInvisibleStatus","scrollElement","scrollParents","parent_3","isElementVisible","checkGetBoundingClientRect","win","windowView","scrollY","scrollX","outerWidth","outerHeight","elementView","parent_4","reposition","relateToElem","collision","checkFixedParent","parentDisplay","getAnchorPosition","anchorEle","eleRect","anchorRect","anchor","anchorPos","fixedElement","tempAnchor","calculateRelativeBasedPosition","targetType","callFlip","callFit","viewPortRect","horz","vert","show","animationOptions","relativeElement","fmDialogContainer","zIndexElement","getZindexPartial","showAnimation","hideAnimation","parentStyle","overflowRegex","parentZindex","childrenZindex","isEqualNode","siblingsZindex","finalValue","currentZindexValue","upDownKeyHandler","defaultIdx","childElementCount","liIdx","selectedLi","isValidLI","Item","classNames","DropDownButton","isPopupCreated","toggle","canOpen","openPopUp","createPopupOnClick","createPopup","closePopup","addItems","newItem","createItems","removeItems","isUniqueId","len_1","getULElement","getTargetElement","popupContent","isColorPicker","appendItems","showIcon","hasIcon","tempItem","createAnchor","beforeDisabled","getPopUpElement","popup","blankIcon","blankIconList","paddingRight","iconLi","cssProp","icon","setBlankIconStyle","appendArrowSpan","setActiveElem","prevElem","activeElem","popupUnWireEvents","destroyPopup","popupEle","clickHandler","keyBoardHandler","dropDownBtn","delegateMousedownHandler","mousedownHandler","windowResize","popupWireEvents","popupElement","closeActionEvents","focusoutHandler","rippleFn","keyEventHandler","triggerSelect","getLI","trgt","liTarget","selectEventArgs","popupElem","splitButton","appendReactElement","beforeOpenArgs","observedArgs","ul_1","wrapperWidth","popupLeft","openArgs","focusEle","beforeCloseArgs","ul_2","closeArgs","arrowSpan","wrapperInitialize","WRAPPER","role","ejInstance","rippleMouseHandler","rippleSpan","CLS_RTL","CLS_DISABLE","CLS_NAVARROW","CLS_NAVRIGHTARROW","CLS_NAVLEFTARROW","CLS_HSCROLLNAV","CLS_HSCROLLNAVRIGHT","CLS_HSCROLLNAVLEFT","CLS_DEVICE","CLS_OVERLAY","CLS_RIGHTOVERLAY","CLS_LEFTOVERLAY","HScroll","browser","browserCheck","customStep","ieCheck","uniqueId","touchModule","scroll","touchHandler","swipe","swipeHandler","scrollEle","scrollHandler","createOverlay","createNavIcon","setScrollState","scrollStep","scrollDiv","innerEle_1","ele_1","scrollItems","nav","overlay","disable","navEles","rightOverlayEle","clsRight","rightEle","navItem","leftEle","eventBinding","rightAttributes","clsLeft","leftAttributes","navEle","navLeftItem","onKeyPress","keyTimer","keyTimeout","eleScrolling","onKeyUp","tapHold","tabHoldHandler","repeatScroll","clickEventHandler","clearInterval","setInterval","scrollDis","isContinuous","rootEle","frameScrollRequest","swipeEle","scrollUpdating","scrollVal","scrollValue","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","disEle","CLS_NAVUPARROW","CLS_NAVDOWNARROW","CLS_VSCROLLNAV","CLS_VSCROLLNAVUP","CLS_VSCROLLNAVDOWN","CLS_UPOVERLAY","CLS_DOWNOVERLAY","VScroll","scrollEventHandler","createOverlayElement","wheelEventHandler","scrollCnt","buildTag","scrollBar","navs","overlays","downOverlayEle","clsDown","downEle","upEle","clsUp","navElement","navUpItem","ev","swipeElement","addDisableCls","removeDisableCls","navUpEle","navDownEle","upOverlay","downOverlay","CLS_VERTICAL","CLS_ITEMS","CLS_ITEM","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_POPUPOPEN","CLS_TEMPLATE","CLS_POPUPTEXT","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARNAV","CLS_TBARSCRLNAV","CLS_TBARCENTER","CLS_TBARPOS","CLS_HSCROLLBAR","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARNAVACT","CLS_TBARIGNORE","CLS_POPPRI","CLS_HIDDEN","CLS_MULTIROW","CLS_MULTIROWPOS","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","CLS_EXTEANDABLE_TOOLBAR","CLS_EXTENDABLECLASS","CLS_EXTENDEDPOPOPEN","Toolbar","resizeContext","resize","orientationChangeContext","orientationChange","moveLeft","moveRight","moveUp","moveDown","popupOpen","popupClose","home","btnItems","destroyItems","lastElementChild","trgtEle","ctrlTem","popObj","activeEle","tbarAlign","tbarItemsCol","attrb","enableCollision","scrollModule","isVertical","isExtendedOpen","popupPriCount","allowKeyboard","wireKeyboardEvent","keyModule","keyActionHandler","docKeyDown","updateTabIndex","tabIndex","dataTabIndex","unwireKeyboardEvent","popCheck","overflowMode","destroyScroll","clickEvent","scrollEvent","tbarEle","tbarAlgEle","lefts","centers","rights","docEvent","popEle","tbarItems","destroyMode","tempEle","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","keyHandling","clst","navChk","scrollChk","popAnimate","eleFocus","popupCheck","extendedPopup","focusFirstVisibleEle","focusLastVisibleEle","popFrstEle","activeEleRemove","tbarScrollChk","eleContains","sib","tbrItems","itemObj","isPopupElement","clsList","popupNav","popupClickHandler","observers","clickedArgs","getToolbarPopupWidth","getElementOffsetY","eleStyles","borderRightWidth","renderControl","portals","refreshOverflow","setStyle","ariaAttr","renderItems","renderLayout","renderOverflowMode","itemPositioning","checkPopupRefresh","itemsAlign","itemEleDom","innerItem","innerPos","renderSubComponent","tbarItemAlign","align","showAlwaysInPopup","changeOrientation","initScroll","innerItems","checkOverflow","itemWidthCal","getScrollCntEle","trgClass","eleWidth","itemWidth","popNav","scrollNav","navEleWidth","toolbarAlign","priorityCheck","offsetWid","removePositioning","setOverflowAttributes","createPopupEle","eleItem","multiVar","extendVar","eleInlineItem","innerEle","innerNav","createPopupIcon","innerNavDom","checkPriority","pushingPoppedEle","tbarObj","popupPri","eleHeight","sepHeight","poppedEle","nodeIndex","nodePri","tbResize","tbarElement","sepItem","extendEle","popupInit","tbarPopupHandler","isOpen","toolEle","popupElePos","popIcon","overflowHeight","tbEleData","popupOffset","inEle","pre","eleOffset","popPriority","eleWid","sepCheck","itemCount","itemPopCount","checkClass","rVal","cls","mrgn","compuStyle","fstEleCheck","tbarEleMrgn","eleWid_1","sepEle","popedEle","tbarPriRef","indx","sepPri","des","elWid","wid","ignoreCount","query","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","previousElementSibling","isVer","dimension","popupEleWidth","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","tbarWidth","tbarItemsWid","elWidth","btnText","btn","eleSplice","inlineStyles","sepBeforePri_1","refreshPositioning","tbarWid","popWid","itemEle","alignDiv","alignEle","leftAlign_1","ctrlTemplate","cloneNode","setAttr","enableItems","isEnable","enable","itemElement","getElementByIndex","extendedOpen","itemsDiv","itemsRerender","itemAgn","items_1","algIndex","removeItemByIndex","eleIdx","indexAgn","clearToolbarTemplate","btnItem","templateRender","templateProp","isComponent","itemType","templateFn","regEx","outerHTML","templateCompiler","getDataTabindex","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","btnObj","tempDom","tooltipText","htmlAttributes","itemClick","showTextOn","sTxt","curEle","previousEle","tabindexValue","multirowele","updateHideEleTabIndex","isHidden","isElement","eleIndex","nextEle","templateEle","registeredTemplate","registeredTemplates","closestItem","rootNodes","tEle","changedProb","newProperty","popupPriCheck","booleanCheck","itemCol","hideItem","CLS_TAB","CLS_HEADER","CLS_CONTENT","CLS_NEST","CLS_ACTIVE","CLS_FOCUS","CLS_ICONS","CLS_ICON","CLS_ICON_TAB","CLS_ICON_CLOSE","CLS_CLOSE_SHOW","CLS_TEXT","CLS_INDICATOR","CLS_WRAP","CLS_TEXT_WRAP","CLS_TAB_ICON","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POP","CLS_TB_POPUP","CLS_PROGRESS","CLS_VTAB","CLS_VLEFT","CLS_VRIGHT","CLS_HBOTTOM","CLS_FILL","TABITEMPREFIX","CLS_REORDER_ACTIVE_ITEM","TabActionSettings","TabAnimationSettings","effect","Header","TabItem","isInteracted","lastIndex","isAdd","isIconAlone","draggableItems","refreshActiveTabBorder","enter","tbObj","expTemplateContent","isTemplate","cntEle","btnCls","hdrEle","tbItems","tbItem","tbPop","prevItem","bdrLine","dragItem","draggingItems","nested","isPopup","initRender","isSwiped","itemIndexArray","allowDragAndDrop","setCssClass","updatePopAnimationConfig","tabId","renderContainer","refreshActiveBorder","setOrientation","headerPlacement","renderContent","scrCnt","scrCntClass","setContentHeight","selectedItem","setRTL","hdrPlace","tabItems","getTabHeader","addVerticalClass","hdrItems","tabItems_1","txt","cont","wrap","parseObject","clicked","setCloseButton","showCloseButton","toolbarHeader","hdrItem","contents","reRenderItems","maxId","isReplace","idList_1","getIndexFromEle","txtWrapEle","tItems","spliceArray","headerTemplate","itemIndex","tbId","hidden","tHtml","txtEmpty","headerTextCompile","tCont","wrapAttrs","tItem","spliceItemIndex","removeActiveClass","tabHeader","checkPopupOverflow","isOverflow","popupHandler","ripEle","actEleId","prevEle","trg","prevCtnAnimation","triggerPrevAnimation","oldCnt","animateObj","triggerAnimation","prevActiveEle","newCnt","getTrgContent","extIndex","idNo","isPrevent","openEff","clsEff","setActiveBorder","keyPressed","trgParent","trgIndex","getEleIndex","selectTab","eleStr","templateCompile","compileElement","templateFUN","getContent","callType","eleVal","findEle","tbPos","place","activeTab","changeToolbarOrientation","focusItem","curActItem","headerPos","contentPos","heightAdjustMode","cs","trgHdrEle","reorderActiveTab","bar","tbWidth","setActive","skipDataBind","trg_1","enableAnimation","eleTrg","refreshItemVisibility","eventArg","previousItem","selectedContent","selectingID","preventFocus","setItems","showPopup","tbPopObj","bindDraggable","initializeDrag","hoverHandler","spaceKeyDown","keyHandler","tabKeyModule","openPopup","shiftTab","removeTab","nestedTab","actEle","nxtSib","scrBar","scrStart","scrEnd","eleStart","eleEnd","eleViewRange","closeButtonTitle","evalOnPropertyChangeItems","selectElement","changedProp","newVal","hdr","cntItem","textVal","clearTabTemplate","isHiddenEle","addTab","hideTab","enableTab","clearTemplates","dragObj","itemDragStart","dropIndex","dropItem","dragIndex","dragArgs","draggedItem","droppedItem","clonedElement","cursor","scrollRightNavEle","scrollLeftNavEle","hscrollBar","scrollContentWidth","isSameNode","dragAction","droppedIndex","itemDragStop","tabItemDragArgs","dragsIndex","nextElementSibling","popupContainer","lastEle","dragStopArgs","tabItemDropArgs","addArgs","addedItems","addingTabContent","tabAddingArgs","lastEleIndex","itemsCount","tabItems_2","textValue_1","removeArgs","removedItem","removedIndex","tabRemovingArgs","targetEleIndex","cntTrg","selectedID","selectingItem","selectingIndex","selectingContent","selectArgs","itemId","HTMLElement","getItemIndex","tabItemId","sortedKeys_1","headerEle","refreshActiveTab","innerText","detachContent","mainContents","txtString","conte","crElem","txtWrap","tConts","wrapAtt","wraper","targetElement","selectedHandler","containerElement","resizeWestWidth","elementClass","RESIZE_HANDLER","FOCUSED_HANDLER","DIALOG_RESIZABLE","RESTRICT_LEFT","RESIZE_WITHIN_VIEWPORT","dialogBorderResize","originalWidth","originalHeight","originalX","originalY","originalMouseX","originalMouseY","resizeStart","resizeEnd","setLeft","setWidth","setBorderResizeElm","calculateValues","borderBottom","getDOMElement","domElement","resizers","onMouseDown","onTouchStart","borderResizers","getEventType","targetEle","onMouseMove","onMouseUp","dialogResizeElement","coordinates","resizeTowards","resizeSouth","resizeNorth","resizeWest","resizeEast","getClientRectValues","containerRectValues","documentHeight","calculateValue","currentpageY","targetRectValues","calculatedHeight","borderValue","topWithoutborder","targetTop","calculatedTop","boundaryRectValues","currentHeight","rectValues","documentWidth","calculatedWidth","left_1","removeResize","handlers","DialogUtility","ButtonProps","AnimationSettings","ROOT","RTL","DLG_HEADER_CONTENT","DLG_HEADER","DLG_FOOTER_CONTENT","MODAL_DLG","DLG_CLOSE_ICON","DLG_TARGET","SCROLL_DISABLED","DEVICE","FULLSCREEN","DLG_CLOSE_ICON_BTN","DLG_SHOW","DLG_UTIL_DEFAULT_TITLE","DLG_UTIL_ROOT","DLG_UTIL_ALERT","DLG_UTIL_CONFIRM","DLG_RESIZABLE","DLG_RESTRICT_LEFT_VALUE","DLG_RESTRICT_WIDTH_VALUE","DLG_USER_ACTION_CLOSED","Dialog","enableResize","setResize","animationSettings","getMinHeight","initializeValue","dlgClosedBy","headerContent","allowMaxHeight","preventVisibility","clonedEle","closeIconClickEventHandler","dlgOverlayClickEventHandler","overlayClickEventArgs","focusContent","checkPositionData","prevOnChange","updatePersistData","isNumberValue","getEle","computedHeaderHeight","computedFooterHeight","footerEle","minimumHeight","onResizeStart","dialogObj","onResizing","onResizeComplete","isBlazorServerRender","computedHeight","computedWidth","resizeHandles","directionValue","isModal","resizeBegin","resizing","resizeComplete","boundary","directions","resizeHandler","proxy","createResize","wireWindowResizeEvent","unWireWindowResizeEvent","getFocusElement","keyDown","buttonObj","ftrTemplateContent","contentEle","focusableElements","isTagName","isContentEdit","closeOnEscape","primaryButtonEle","buttonIndex_1","firstPrimary","buttonModel","setCSSClass","setMaxHeight","initialRender","setzIndex","calculatezIndex","setTargetContent","setHeader","renderCloseIcon","footerTemplate","setButton","setFooterTemplate","allowDragging","setAllowDragging","setIsModal","dlgContainer","dlgOverlay","parentEle","refElement","popupObj","resetResizeIcon","openEventArgs","unBindEvent","blur","storeActiveElement","positionChange","setEnableRTL","setOverlayZindex","getTargetContainer","Element","setPopupPosition","dialogConHeight","resizeIcon","zIndexValue","handleContent","dragEventArgs","IsDragStop","buttonContent","buttonType","footerBtn","buttonClickHandler","isFlat","innerContentElement","setTemplate","templateProps","templateValue","sanitizeHelper","dialogItem","isContent","createHeaderContent","showCloseIcon","closeIcon","closeIconBtnObj","closeIconTitle","oldCSSClass","getValidFocusNode","disableElement","getAutoFocusNode","validNode","elementMatch","msGetRegionContent","bindEvent","updateSanitizeContent","insertAdjacentHTML","updateIsModal","unWireButtonEvents","destroyButtons","setTarget","setPopupZindex","currentzIndex","windowResizeHandler","removeAllChildren","classArray","boundWindowResizeHandler","getDimension","isFullScreen","fullScreen","eventArgs_1","openAnimation","dialogOpen","closedBy","closeAnimation","getButtons","createDialog","dialogObject","formOptions","isDraggable","formButtonModel","buttonPropModel","buttonProps","alert","alertDialogObj","dialogElement","alertButtonModel","okButton","setAlertButtonModel","alertOptions","confirm","confirmDialogObj","okButtonModel","cancelButtonModel","cancelButton","setConfirmButtonModel","confirmOptions","ListBase","Query","subQuery","isChild","distincts","queries","fKey","fromTable","lookups","expands","sortedColumns","groupedColumns","lazyLoad","using","dataManager","execute","always","executeQuery","DataUtil","executeLocal","cloned","subQuerySelector","isCountRequired","tableName","addParams","distinct","expand","where","fieldName","operator","ignoreCase","ignoreAccent","matchCase","predicate","Predicate","searchKey","fieldNames","comparer","fnOperators","sortBy","isFromGroup","sortByForeignKey","sorts","fnSort","filterQueries","sortByDesc","pageSize","take","nos","hierarchy","selectorFn","foreignKey","requiresCount","aggregate","filterQueryLists","singles","filtered","isComplex","processOperator","condition","predicates","and","combinePredicates","or","ornot","andnot","fromJson","fromJSONData","pred","record","isAnd","toJson","preds","consts","GroupGuid","Adaptor","ds","requestType","aggregates","dataSource","pvt","processResponse","xhr","JsonAdaptor","processQuery","countFlg","keyCount","agg","isGroupByFormat","lazyLoadData","lazyLoadGroup","getAggregate","onDemandGroupInfo","field_1","onSortBy","onPage","formGroupResult","req","onWhere","childLevel","records","aggQuery","tmp","batchRequest","dm","deletedRecordsLen","deletedRecords","addedRecords","changedRecords","update","onAggregates","onSearch","getFieldList","isLazyLoadGroupSort","fnCompare","onGroup","onRange","onTake","onSkip","onSelect","keyField","UrlAdaptor","hierarchyFilters","getQueryRequest","request","groups","filters","searches","callAdaptorFunction","getFiltersFrom","isNull","getRequestQuery","reqParams","keys_2","jsonDateReplacer","pvtData","convertToQueryString","request1","selects","handleTimeZone","timeZoneHandling","parseJson","requests","groupDs","isExpand","formRemoteGroupedData","getAggregateResult","getGroupedRecords","hasRecords","childGroupedRecords","original","batchUrl","crudUrl","removeUrl","changed","added","deleted","getAddParams","insertUrl","keyColumn","updateUrl","pKey","predicats","aggregateData","isServerGrouping","groupQuery","ODataAdaptor","multipartAccept","batch","changeSet","batchPre","contentId","batchContent","changeSetContent","batchChangeSetContentType","updateType","onPredicate","requiresCast","guid","getField","replacer","isGuid","odBiOperator","odUniOperator","odv4UniOperator","splittedStringValue","splittedValue","onComplexPredicate","onEachWhere","onEachSearch","onEachSort","onCount","metaCheck","rootUrl","dataUrls","resourceTableName","dataCopy","results","metaData","emptyAndBatch","processBatchResponse","versionCheck","oDataCount","requiresFormat","keys_4","localTimeReplacer","convertObj","dateParse","toLocalTime","localTime","compareAndRemove","initialGuid","getGuid","cid","cSet","generateInsertRequest","generateUpdateRequest","generateDeleteRequest","stat","toJSON","generateBodyContent","org","cIdx","exVal","changeGuid","isPlainObject","RemoteSaveAdaptor","ODataV4Adaptor","isDate","onExpand","expanded","exArr","sel","close_1","combineVal","expandQueryIndex","ex","onDistinct","distinctFields","metaName","metaV4Name","dataUrl","dataCount","dataV4Count","WebApiAdaptor","host","_loop_2","_loop_3","Count","Items","WebMethodAdaptor","updateKey","CustomDataAdaptor","getData","addRecord","updateRecord","deleteRecord","batchUpdate","CacheAdaptor","GraphQLAdaptor","opt","schema","getVariables","getQuery","datamanager","urlQuery","vars","variables","resData","inserted","generateCrudData","bData","crudData","parsed","getMutation","adaptor","isCrudAction","isInsertAction","cacheAdaptor","guidId","forDel","currentTime","requestTime","generateKey","currentFilter","newQuery","cachedItems","crossDomain","DataManager","persistQuery","offline","timeTillExpiration","cachingPageSize","enableCaching","jsonp","isCors","defaultQuery","isDataAvailable","ready","getPersistedData","persistedData","persistData","setPersistQuery","persistedQuery","keyword","allPredicates","predicateObj","nestedPredicates","nestedPredicate","setDefaultQuery","lookup","buildHierarchy","makeRequest","deffered","Deferred","isCustomDataAdaptor","getDeferedArgs","nextTick","extendRequest","fnSuccess","fnFail","processData","isSelector","process","virtualSelectRecords","fnQueryChild","subDeffer","childArgs","subUrl","childReq","subData","isGraphQLAdaptor","fetchReqOption","virtualRecords","fetch_1","all","pResult","cResult","dofetchRequest","deff_1","fetch_2","successFunc","failureFunc","fetchDeffered","fetchFunc","fetch_3","clearPersistence","notEndsWith","notStartsWith","wildCard","asteriskSplit","optionalSplit","like","fnAscending","fnDescending","localeCompare","extractFields","jsonArray","newData","isLazyLoad","jsonData","childLevels","grouped","groupedArray","this_2","getVal","tempObj","aggs","grp","fKeyData","copyObj","lowerCaseNameSpace","upperCaseNameSpace","casing","middle","ignoreDiacritics","diacritics","fnName","param1","param2","adp","rand","getItemFromComparer","castRequired","requiresCompleteRecord","prepareQuery","sampledata","requiresCounts","predicateList","getPredicate","sorted","mainPred","childPred","cpre","serverTimezoneOffset","sum","average","truecount","falsecount","operatorSymbols","equal","expected","notequal","lessthan","greaterthan","lessthanorequal","greaterthanorequal","doesnotcontain","isnotnull","isnull","startswith","doesnotstartwith","isempty","isnotempty","wildcard","endswith","doesnotendwith","processSymbols","jsonText","iterateAndReviveArray","iterateAndReviveJson","jsonReviver","ms","offSet","toTimeZone","isUTC","secondsMs","getUTCMilliseconds","utcFormat","hrs","mins","addSelfOffset","jsonReplacer","arrayReplacer","keys_3","toUTC","utc","unix","datefn","differenceString","localtimefn","norm","hasChild","collapsible","iconWrapper","anchorWrap","navigable","getFieldValues","dataItem","fieldData","dataField","compileTemplate","defaultMappedFields","hasChildren","tooltip","urlAttributes","imageAttributes","imageUrl","groupBy","defaultAriaAttributes","listRole","itemRole","groupItemRole","itemText","wrapperRole","defaultListBaseOptions","showCheckBox","expandCollapse","ariaAttributes","listClass","itemClass","processSubChild","sortOrder","groupTemplate","expandIconClass","expandIconPosition","itemNavigable","createListFromArray","isSingleLevel","componentInstance","generateUL","createListItemFromArray","subChild","curOpt","getModuleClass","generateId","itemCreating","generateSingleLevelLI","generateLI","itemCreated","createListItemFromJson","checkboxElement","anchorElement","typeofData","curItem","tooltipTextElement","alt","imageElemnt","insertAdjacentElement","iconElement","createListFromJson","elementArray","addSorting","getDataSource","typeof","elementAttributes","class","getAllAttributes","subDS","subLi","innerElements","grpLI","elementID","anchorTag","isFullNavigation","anchorWrapper","uID","compiledString","compiledElement","groupTemplateID","templateID","innerDiv","liElement","ulElement","createList","getSiblingLI","isPrevious","siblingLI","liIndex","liCollections","groupDataSource","curFields","cusQuery","grpItem","newtext","_id","createJsonFromElement","jsonAr","childs","hasChildNodes","attributes_1","renderContentTemplate","liCollection","currentID","renderGroupTemplate","headerItems","category","headerItems_1","headerData","generateIcon","SkeletonType","ShimmerEffect","TEXTSHAPE","CIRCLESHAPE","SQUARESHAPE","RECTANGLESHAPE","WAVEEFFECT","PULSEEFFECT","FADEEFFECT","VISIBLENONE","Skeleton","updateCssClass","label","updateDimension","updateShape","updateEffect","updateVisibility","shapeCss","removeCss","shimmerEffect","FieldSettings","dropDownBaseClasses","DropDownBase","preventChange","isPreventChange","isDynamicDataChange","addedNewItem","isAddNewItemTemplate","isRequesting","isVirtualizationEnabled","isCustomDataUpdated","isAllowFiltering","virtualizedItemsCount","isCheckBoxSelection","totalItemCount","remoteDataCount","isRemoteDataUpdated","isIncrementalRequest","virtualListHeight","isVirtualScrolling","isPreventScrollAction","scrollPreStartIndex","isScrollActionTriggered","isMouseScrollAction","isKeyBoardAction","isScrollChanged","isUpwardScrolling","currentPageNumber","pageCount","isPreventKeyAction","generatedDataObject","skeletonCount","isVirtualTrackHeight","virtualSelectAll","incrementalQueryString","incrementalEndIndex","incrementalStartIndex","incrementalPreQueryString","isObjectCustomValue","appendUncheckList","getInitialData","preventPopupOpen","virtualSelectAllState","CurrentEvent","virtualListInfo","sentinelInfo","offsets","viewPortInfo","selectedValueInfo","getPropObject","oldProperty","getValueByText","listData","checkValueCase","isTextByValue","typeOfData","dataSource_1","checkingAccent","checkIgnoreCase","getItemValue","checkNonIgnoreCase","compareValue_1","itemValue","textItem","typedText","getFormattedValue","baseTemplate","checkTemplate","exception","l10nUpdate","actionFailure","noRecordsTemplate","actionFailureTemplate","actionFailureTemplateId","noRecordsTemplateId","tempaltecheck","noDataElement","liElem","componentLocale","getLocaleName","checkAndResetCache","virtualItemStartIndex","virtualItemEndIndex","updateIncrementalInfo","updateVirtualItemIndex","resetList","updateIncrementalView","UpdateSkeleton","getFilteringSkeletonCount","currentSkeletonCount","getSkeletonCount","skeletonUpdated","GetVirtualTrackHeight","virualElement","getTransformValues","retainSkeleton","listContainerHeight","actualCount","listItemHeight","virtualItemCount","heightDimension","translateY","isSkeletonCountChange","isContainSkeleton","isContainVirtualList","totalSkeletonCount","itemTemplate","getTextByValue","allowCustomValue","enableRtlElements","jsonElement","setListData","renderItemsBySelect","updateDataAttribute","invalidAttr","getJSONfromOption","optionGroup","updateFields","scrollTimer","isRequested","isDataFetched","itemTemplateId","displayTemplateId","spinnerTemplateId","valueTemplateId","groupTemplateId","headerTemplateId","footerTemplateId","isActive","showSpinner","isWhereExist_1","emptyDataRequest","isReOrder","queryElements","listItems","onActionComplete","bindChildItems","setCurrentView","keyboardEvent","handleVirtualKeyboardActions","virtualSelectAllData","virtualSelectionAll","onActionFailure","hideSpinner","virtualGroupDataSource","localDataArgs","updateDataList","updatePopupState","updateRemoteData","remainingItems","sortedData","raiseDataBound","isObjectInArray","objectToFind","every","findListElement","findNode","listArr","dataBoundEventArgs","spliceData","listElements","templateListItem","listOption","fixedHeaderElement","postRender","listElement","disableListItem","updateVirtualizationProperties","filtering","isCheckbox","listEle","groupcheck","groupValue","tempHeaders","isGroupChecking","createListItems","getSortedDataSource","fieldValues","setFloatingHeader","setFixedHeader","scrollStop","isDownkey","liHeight","getValidLi","topIndex","virtualListCount","isCount","updateGroupHeader","getPageCount","returnExactCount","getItems","updateGroupFixedHeader","isCheckBoxUpdate","oldUlElement","virtualUlElement","replaceChild","reOrderList","updateListElements","createVirtualContent","incrementalLiCollections","incrementalUlElement","incrementalListData","itemcheck","liWidth","firstLi","textField","getIndexByValue","getIndexByValueFilter","setFields","selectData","updateSelectElementData","isFiltering","updateSelection","renderList","updateDataSource","oldProps","setUpdateInitial","updateData","setZIndex","isEmptyData","rippleFun","removeScrollEvent","isListboxEmpty","selectedItemValue","itemCheck","addItemTemplate","updateActionCompleteData","updateAddItemList","listGroupItem","tempLi","isDisabledElement","isDisabledItemByIndex","validationAttribute","getDataByValue","globalTimeOut","DEFT_MAT_WIDTH","DEFT_MAT3_WIDTH","DEFT_FAB_WIDTH","DEFT_FLUENT_WIDTH","DEFT_FLUENT2_WIDTH","DEFT_BOOT_WIDTH","DEFT_BOOT4_WIDTH","DEFT_BOOT5_WIDTH","CLS_SHOWSPIN","CLS_HIDESPIN","CLS_MATERIALSPIN","CLS_MATERIAL3SPIN","CLS_FABRICSPIN","CLS_FLUENTSPIN","CLS_FLUENT2SPIN","CLS_TAILWINDSPIN","CLS_BOOTSPIN","CLS_BOOT4SPIN","CLS_BOOT5SPIN","CLS_HIGHCONTRASTSPIN","CLS_SPINWRAP","CLS_SPININWRAP","CLS_SPINCIRCLE","CLS_SPINARC","CLS_SPINLABEL","CLS_SPINTEMPLATE","spinTemplate","spinCSSClass","createSpinner","internalCreateElement","makeElement","spinnerContainer","spinnerInnerContainer","inner_wrap","create_spinner_container","theme","getTheme","defaultSize","calculateRadius","setTheme","labelEle","createLabel","replaceContent","innerContainer","svg","random_generator","timeOut","create_material_element","mat_calculate_attributes","createMaterialSpinner","createMaterial3Spinner","create_fabric_element","fb_calculate_attributes","createFabricSpinner","createFluentSpinner","createFluent2Spinner","svgBoot","viewBoxValue","trans","defaultRadius","bootCircle","create_bootstrap_element","rad","startArc","defineArcPoints","circleEle","boot_calculate_attributes","createBootstrapSpinner","createHighContrastSpinner","createBootstrap4Spinner","createBootstrap5Spinner","createTailwindSpinner","generateSeries","increment","formSeries","innerCon","themeClass","svgFabric","fabricCirclePath","fabricCircleArc","svgMaterial","matCirclePath","animateMaterial","spinnerInfo","globalInfo","previousId","strokeSize","getStrokeSize","rotate","mat_animation","updatePath","getDashOffset","createCircle","easeAnimation","transformOrigin","drawArc","timestamp","timecount","innerConainer","centerX","centerY","circle","defineCircle","endArc","defineArc","angle","radians","showHideSpinner","isHide","spinnerWrap","spinWrapCollection","find","inner","svgEle","isAnimate","globalObject","globalVariables","timeOutVar","startMatAnimate","rotation","boot_animate","animateBootstrap","highlightSearch","ignoreRegex","findTextNode","revertHighlightSearch","contentElement","Mention","minLength","suffixText","allowSpaces","mentionChar","showMentionChar","newClass","oldClass","inputElement","initializeData","isSelected","isFiltered","beforePopupOpen","initRemoteRender","isListResetted","isPopupOpen","isCollided","lineBreak","isRTE","keyEventName","checkAndUpdateInternalComponent","isContentEditable","queryString","elementValue","wireEvent","bindCommonEvent","unWireEvent","unBindCommonEvent","keyDownHandler","hideWaitingSpinner","spinnerElement","spinnerTemplate","spinnerTemplateElement","showWaitingSpinner","setSpinnerTemplate","isKeyAction","isNavigation","isTabAction","getLastLetter","getTextRange","isUpDownKey","updateUpDownAction","setSelection","hidePopup","selectedLI","updateSelectedItem","isSelectFocusItem","activeIndex","nextItem","rangetextContent","isTyped","isRteImage","getCurrentRange","startContainer","currentRange","lastWordRange","lastTwoLetters","Regex","isMatchedText","searchLists","initValue","didPopupOpenByTypingInitialChar","isMatched","getRangeAt","unWireListEvents","wireListEvents","preventDefaultAction","filterAction","setDataIndex","isUpdated","selectEventCallback","renderPopup","fieldsSettings","highlight","getNgDirective","filterType","itemCreated_1","filterQuery","mapping","suggestionCount","renderHightSearch","selectedElem","workingNodeContent","selectStartOffset","selectedElementID","removeSelection","onDocumentClick","animModel","popupEle_1","coordinates_1","listHeight","popupHeight","rteRootElement","setHeight","initializePopup","popupLeft_1","popupHeight_1","getTriggerCharPosition","mostRecentTriggerCharPos","offsetValue","globalRange","computed","selectedNodePosition","collapse","getClientRects","rectTop","rectLeft","iframes","iframe","contentDocument","iframeRect","doc","windowLeft","clientLeft","windowTop","clientTop","TEXT_NODE","span_1","textNodeWidth","borderTopWidth","borderLeftWidth","updateValues","onMouseClick","onMouseOver","onMouseLeave","preventSelect","isSelection","removeHover","selectedData","setSelectOptions","detachChanges","itemData","isSelectCancel","previousSelectedLI","setScrollPosition","scrollBottom","isInitial","currentOffset","nextBottom","nextOffset","paddingTop","boxRange","selectLi","previousItemData","focusedItem","defineProperties","displayTemplate","updateMentionValue","setDisplayTemplate","textSuffix","getItemData","mentionVal","commonAncestorContainer","deleteContents","normalize","frag","lastNode","insertNode","cloneRange","setStartAfter","CustomEvent","onChangeEvent","myField","currentTriggerSnippet","showChar","displayTempElement","isAndroid","displayCompTemp","renderTemplates","spinnerCompTemp","eve","preItems","detachMentionChanges","dataValue","dataText","selectedItems","currentLi","setHover","hoveredItem","CommentReviewPane","isNewComment","isUserClosed","selectedTab","onTabSelection","updateHeight","localObj","initReviewPane","parentPaneElement","previousSelectedCommentInt","getCommentStart","removeSelectionMark","commentView","hideDrawer","hideMenuItems","selectReviewTab","reviewTab","showHidePane","updateTabHeaderWidth","showRevisions","isCommentTabVisible","isChangesTabVisible","updateTrackChanges","updateCommentStatus","enableDisableItems","enableAutoFocus","updateFocus","reviewPaneHelper","reviewTabsEle","localValue","reviewContainer","optionsPaneContainer","initPaneHeader","addReviewTab","initCommentPane","commentHeader","changesHeader","reviewPane","headerContainer","initToolbar","closePane","currentEditingComment","isInsertingReply","replyViewTextBox","cancelReply","textArea","confirmDialog","discardButtonClick","closeDialogUtils","cancelEditing","currentSelectedRevision","toolbarElement","toolbar","insertComment","navigatePreviousComment","navigateNextComment","isUserInsert","addComment","enableDisableToolbarItem","deleteComment","resolveComment","reopenComment","addReply","newComment","insertReply","menuBar","resolveView","CommentPane","isUnreferredComment","discardComment","undo","redoStack","deleteCommentInternal","pane","isEditModeInternal","parentPane","noCommentIndicator","CommentView","commentParent","layoutComment","replyView","replyViewContainer","tabHeaderHeight","replyComment","parentComment","parentView","replyElement","replyIndex","nextReply","editComment","selectedElement","showDrawer","getFirstCommentInLine","startComment","replyCmt","removeChildElements","isDrawerExpand","initCommentHeader","initCommentView","initDateView","initReplyView","initResolveOption","initDrawer","showMenuItems","hideMenuItemOnMouseLeave","commentDiv","resolveDiv","wrapperDiv","roundIcon","resolveText","justifyContent","alignItems","borderRadius","commentUserInfo","userName","getAvatar","userOption","menuItem","userOptionSelectEvent","dropDownButton","commentText","initEditView","textAreaContainer","updatePastedText","editMention","mentionSettings","updateTextAreaHeight","enableDisablePostButton","editRegionFooter","postButton","postComment","plainText","htmlString","convertToHtml","enableDisableReplyPostButton","commentDate","drawerElement","leftPane","spanElement","drawerSpanElement","drawerAction","showOrHideDrawer","enableReplyView","updateReplyTextAreaHeight","replyPostButton","replyMention","postReply","replyCancelButton","replyFooter","wrapperFooterDiv","reopenDeleteWrapper","reopenButton","reopenButtonClick","deleteButton","eventActionArgs","preventKeyboardShortcuts","ctrl","prevent","replyText","isRemoteAction","fireContentChange","updatedText","modifiedObject","modifiedProperties","showCommentView","documentEditor","unwireEvent","Zoom","onMouseWheelInternal","viewerContainer","isFirefFox","wheel","setZoomFactor","onZoomFactorChanged","updateCaretPosition","updateTouchMarkPosition","imageResizerModule","updateImageResizerPosition","fireZoomFactorChange","handleZoom","CHECK","DISABLED","FRAME","INDETERMINATE","LABEL","RIPPLE","RIPPLECHECK","RIPPLEINDETERMINATE","containerAttr","CheckBox","isFocused","isMouseClick","clickTriggered","validCheck","changeState","isInitialize","wrapper","getWrapper","frameSpan","required","indeterminate","focusOutHandler","changeEventArgs","updateVueArrayModel","focusHandler","getLabel","initialCheckedValue","setDisabled","initWrapper","setHiddenInput","labelPosition","keyUpHandler","labelMouseDownHandler","labelMouseLeaveHandler","labelMouseUpHandler","rippleElem","labelWrap","updateHtmlAttributeToWrapper","changeHandler","formResetHandler","formElem","Input","effectsConfig","effectsRTLConfig","hover","focused","parentItem","listItem","listIcon","listItemText","groupListItem","headerText","headerTemplateText","backIcon","backButton","checkboxWrapper","checkbox","checklist","checkboxIcon","checkboxRight","checkboxLeft","listviewCheckbox","itemCheckList","virtualElementContainer","LISTVIEW_TEMPLATE_PROPERTY","LISTVIEW_GROUPTEMPLATE_PROPERTY","ListView","previousSelectedItems","hiddenItems","enabledItems","disabledItems","setHTMLAttribute","setEnable","setSize","listBaseOption","enableVirtualization","virtualizationModule","reRenderUiVirtualization","reRender","curDSLevel","headerTitle","contentContainer","setCheckbox","curViewDS","getSubDS","resetCurrentList","isWindow","enableElement","isEnabled","showBack","showHeader","innerHeaderEle","hedBackButton","headerTemplateEle","LISTVIEW_HEADERTEMPLATE_ID","switchView","fromView","toView","fPos_1","overflow_1","anim","aniObj","curUL","renderCheckbox","initialization","animateOptions","currentLiElements","isNestedList","selectedId","LISTVIEW_TEMPLATE_ID","LISTVIEW_GROUPTEMPLATE_ID","fieldData_1","enableRipple","labelSpan","disableHtmlEncode","createCheckBox","frameElement_1","findIndex","checkInternally","checkBoxPosition","virtualCheckBox","checkItem","toggleCheckBase","HTMLLIElement","getLiFromObjOrElement","setSelectedItemData","updateSelectedId","uncheckItem","checkAllItems","toggleAllCheckBase","uncheckAllItems","checkIcon","checkedItem","refreshItemHeight","closestElement","back","removeFocus","setCheckboxLI","selectEventData","removeSelect","setSelectLI","curLi","setHoverLI","leaveHandler","homeKeyHandler","focusedElement","onArrowKeyDown","arrowKeyHandler","firstItemBounds","heightDiff","groupItemBounds","siblingTop","siblingHeight","uiFirstIndex","onUIScrolled","topHeight","headerBounds","enterKeyHandler","spaceKeyHandler","swipeActionHandler","focusout","onListScroll","focusedLI_1","hoverLI","selectedLI_1","textAreaFocus","renderSubList","lastLi","levelKeys","localData","levelKeys_1","curDSJSON","findItemFromDS","curDS","getElementUID","resultJSON","setViewDataSource","fieldValue","isInAnimation","renderRemoteLists","listViewComponent","triggerActionFailure","setLocalData","isOffline","renderIntoDom","setAttributes","liElements","isNgTemplate","createUIItem","uiVirtualization","tabindex","previousScrollTop","classAr","pID","toUL","fromUL","selectItem","unselectItem","selectMultipleItems","getParentId","parentId","tempData","getSelectedItems","isCompleted","liTextCollection","liDataCollection","dataParent","findItem","enableItem","setItemState","disableItem","showItem","showHideItem","addItemInternally","addItemAtIndex","targetUL","addItemIntoDom","addItemInNestedList","newDataSource","targetItemData","itemQueue","targetItemId","targetChildDS","isAlreadyRenderedUL","targetLi","targetDS","targetRefreshedElement","currentItem","addListItem","curItemDS","listDataSource","removeItemFromList","data_1","groupLi","validateNestedView","foundData","findParent","dsIndex","parentLi","li_1","liID","removeMultipleItems","currentScrollTop","AddUserDialog","initUserDialog","dialog","beforeOpen","loadUserDetails","okButtonClick","hideDialog","deleteButtonClick","userList","userCollection","restrictEditingPane","addedUser","isAddUser","showStopProtectionPane","addUserCollection","textBoxInput","onKeyUpOnDisplayBox","addButton","addButtonClick","validateUserName","bindListData","dlgFields","commonDiv","adduserDiv","autofocus","addButtonElement","userCollectionDiv","userDiv","listviewDiv","domain","domainParts","ext","containerAttributes","TEXTBOX_FOCUS","isBindClearAction","bindInitialEvent","checkInputValue","floatLabelType","getParentNode","calculateWidth","bindFocusEventHandler","blurHandler","bindBlurEventHandler","inputHandler","bindInputEventHandler","__eventHandlers","inputValue","inputParent","grandParent","_focusFn","_blurFn","wireFloatingEvents","unwireFloatingEvents","createFloatingInput","inputObject","createInputContainer","customTag","floatLinelement","floatLabelElement","placeholder","encodePlaceHolder","inputWrap","updateLabelState","inputFloatHandler","validateLabel","inputEventHandler","blurFloatHandler","blurEventHandler","unWireFloatLabelEvents","checkFloatLabelType","updateIconState","readonly","wireClearBtnEvents","clickHandlerEvent","readOnly","inputHandlerEvent","focusHandlerEvent","blurHandlerEvent","tagClass","spanEle","_isElementVisible","setPlaceholder","floatTextContent","setReadonly","isReadonly","setEnabled","inputContainer","disabledAttrs","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","clearButton","createClearButton","createSpanElement","labelSpanElement","_internalRipple","isRipple","argsButton","_onMouseDownRipple","_onMouseUpRipple","createIconEle","iconClass","prependSpan","innerWrapper","appendSpan","validateInputType","getInputValidClassList","inputClassName","createInput","bindClearAction","showClearButton","focusHandler_1","blurHandler_1","inputHandler_1","unbindInitialEvent","unWireClearBtnEvents","removeFloating","inputEle","addFloating","iconEle","inputObj","isPrependIcon","floatLine","floatText","setRipple","addIcon","icons","internalCreate","result_2","updateHTMLAttributesToElement","updateHTMLAttributesToWrapper","updatedClassValues","isBlank","inputString","TextBox","previousValue","isHiddenInput","isForm","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","bindClearEvent","raiseChangeEvent","checkAttributes","textarea","autocomplete","globalize","formElement","localeText","apiAttributes","isDynamic","attrs_1","autoCompleteTxt","updatedCssClassValue","setInitialValue","keydownHandler","resetForm","animationHandler","resetValue","textboxObj","localChange","interaction","isInteraction","resetInputHandler","keyupEvent","focusOut","EnforceProtectionDialog","localeValue","initDialog","passwordTextBox","confirmPasswordTextBox","addProtection","protectionType","passwordContainer","confirmPasswordcontainer","UnProtectDocumentDialog","empty","stopProtection","containerId","newPassWord","prevString","tempQueryString","prevElementId","incrementalSearch","elementId","queryStringUpdated","currentValue","isVirtual","strLength","indexUpdated","Search","inputVal","searchType","queryStr","itemsData","filterValue","checkField_1","fieldValue_1","state_1","TimePickerBase","dropDownListClasses","rtl","inputFocus","iconAnimation","device","filterBarClearIcon","filterInput","filterParent","mobileFilter","clearIcon","clearIconHide","popupFullScreen","disableIcon","hiddenElement","virtualList","DropDownList","isListSearched","isTouched","IsScrollerAtEnd","valueTempElement","isDocumentClick","isFilterFocus","initialRemoteRender","isNotSearchList","preventAutoFill","isValidKey","typedString","isEscapeKey","isPreventBlur","isTabKey","actionCompleteData","actionData","prevSelectPoints","isSelectCustom","isDropDownClick","preventAltUp","isCustomFilter","isSecondClick","keyConfigure","down","up","pageUp","pageDown","floatLabelChange","inputWrapper","resetHandler","clearAll","resetFocusElement","resetSelection","allowObjectBinding","allowCustom","updateInitialData","allowFiltering","cloneElements","setHTMLAttributes","htmlAttr","updatedClassValue","defaultAttr","getAriaAttributes","preventTabIndex","getElementByText","getElementByValue","listItems_1","liItem","isDisableItemValue","objectValue","setHiddenValue","onBlurHandler","isFilterLayout","focusOutAction","onFocusOut","onFocus","resetValueHandler","dropDownClick","keyboardModule","mobileKeyActionHandler","searchKeyEvent","onServerIncrementalSearch","updateIncrementalItemIndex","updatingincrementalindex","selectedLiOffsetTop","enableLiCollections","filterInputObj","preventAction","preventHomeEnd","isEditTextBox","pageUpSelection","pageDownSelection","updateHomeEndAction","focusDropDown","selectCurrentItem","selectCurrentValueOnTab","isVirtualKeyAction","value_1","filterIndex","virtualIndex","value_2","value_3","focusAtFirstElement","value_4","findLi","PageUpDownSelection","checkSelector","activeStateChange","proxy_1","checkFieldValue","activeItem","valueTemplate","setValueTemplate","clearElement","dropdownCompiler","dropdownTemplate","valuecheck","valueCompTemp","isCustomValue","datas","foundIndex","detachChangeEvent","onFilterUp","firstItem","onFilterDown","getSelectionPoints","removeFillSelection","setSelectionRange","customFilterQuery","takeValue","getTakeValue","alreadySkipAdded","queryTakeValue","querySkipValue","queryElements_1","queryElements_2","queryElements_3","filteringAction","baseEventArgs","isNoData","popupContentElement","focusIndexItem","setSearchBox","filterBarPlaceholder","clearIconElement","clearText","searchKeyModule","onInput","pasteHandler","updateActionCompleteDataValues","tempItemCount","value_5","checkVal","setInputValue","isValueInList","addNewItem","valueToFind","checkField","newElement","value_6","isExist","actionCompleteDataUpdate","updateSelectionList","highlightedItem","refreshPopup","searchBox","setHeaderTemplate","listitems","searchBoxHeight","getOffsetValue","isEmptyList","textIndent","setSearchBoxPosition","backIconElement","clickOnBackIcon","scrollParentElements_1","popupStyles","borderTop","borderBottomWidth","actionList","targetExitViewport","isElementInViewport","lastItem","paddingBottom","isInitialSelection","lastElementValue","isScrollerCHanged","currentElementValue","liCount","firstElementValue","isPageUpKeyAction","scrollTo","isPopupButton","setEleWidth","isFilterValue","scrollableParentElements_1","dataSourceCount","fixedHeader","currentData","preselectedIndex","updatedCssClassValues","setReadOnly","getListHeight","onselect","stopImmediatePropagation","onchange","listParent","listParentHeight","footercheck","footerCompTemp","headercheck","headerCompTemp","setOldText","setOldValue","checkData","isChangeValue","isChangeText","checkCustomValue","updateInputFields","checkValidLi","setSelectionData","listLength_1","listLength_2","value_7","ddlProps","invokeRenderPopup","proxy_2","onpopstate","isSelectVal","parsedData","attrArray","RestrictEditing","addRemove","previousProtectionType","isShowRestrictPane","usersCollection","restrictPane","showHideRulers","triggerResize","onYesButtonClick","removeAllEditRestrictions","onCancelButtonClick","protectionTypeDrop","onNoButtonClick","showAllRegion","showAllEditingRegion","addUserDialog","enforceProtectionDialog","unProtectDialog","base64","showHideRestrictPane","isShow","initPane","isHighlightEditRegion","updateViewerSize","loadPaneValue","headerWholeDiv","headerDiv1","closeButton","closeSpan","initRestrictEditingPane","restrictPaneWholeDiv","formatWholeDiv","formatDiv","allowFormatting","allowFormat","editRestrictWholeDiv","protectionTypeInput","protectionTypeValue","Value","Name","userWholeDiv","subContentDiv","emptyuserDiv","selectHandler","addUser","lastDiv","enforceProtection","stopProtectionDiv","headerDiv","contentWholeDiv","content1","contentDiv1","content2","contentDiv2","stopReadOnlyOptions","navigateNext","navigateNextButton","navigateNextRegion","showAllRegionButton","highlightRegion","highlightRegionInput","highlightCheckBox","changeHighlightOptions","lastButtonDiv","protectDocument","stopProtectionTriggered","enableFormatting","protectionTypeDropChanges","highlightClicked","restrictFormatting","saltValue","hashValue","unProtectDocument","showRemovedIgnoreDialog","editRanges","insertEditRangeElement","removeUserRestrictions","checkBox","isDocumentProtected","navigateToNextEditingRegion","editRangeCollection","editStart","updateUserInformation","checkSelectionIsAtEditRegion","editRange","getEditRangeStartElement","currentHashValue","currentSaltValue","SPINICON","SPINUP","ERROR","INCREMENT","DECREMENT","INTREGEXP","NUMERIC_FOCUS","wrapperAttributes","selectionTimeOut","NumericTextBox","isDynamicChange","numericOptions","isPrevFocused","decimalSeparator","intRegExp","isCalled","angularTagName","formEle","incrementTitle","decrementTitle","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","prevValue","updateHTMLAttrToElement","inputEleValue","validateMinMax","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","setElementWidth","changeValue","strictMode","trimValue","decimals","roundNumber","hiddenInput","elementPrevValue","setNumber","minValue","maxValue","stepValue","getNumericValidClassList","updateHTMLAttrToWrapper","pro","numericClassName","numericStyle","spinDown","spinUp","wireSpinBtnEvents","MAX_VALUE","formattedValue","operation","isInteract","performAction","checkErrorClass","setElementValue","resetFormHandler","updateValue","setSpinButton","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","beforeUpdate","preventHandler","iOS","currentPos","prevPos","valArray","ignoreKeyCode","prevVal","cursorPosChanged","validateDecimalOnType","numerictextboxObj","parsedValue","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","stepCount","roundValue","precision","divide","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","validateState","serverDecimalSeparator","EXPREGEXP","valueString","result1","result2","currentChar","isAlterNumPadDecimalChar","fractionRule","mouseWheel","rawEvent","focusEventArgs","formatValue_1","blurEventArgs","focusEvent","getElementData","mouseUpClick","touchEvent","floatLabelTypeUpdate","decrement","getText","updateSpinButton","updateClearButton","OTHERMONTH","OTHERDECADE","CONTENTTABLE","YEAR","MONTH","DECADE","ICON","OVERLAY","WEEKNUMBER","SELECTED","FOCUSEDDATE","FOCUSEDCELL","OTHERMONTHROW","TODAY","LINK","CELL","ZOOMIN","DAYHEADERLONG","dayMilliSeconds","CalendarBase","isPopupClicked","isDateSelected","isTodayClicked","previousDates","rangeValidation","calendarEleCopy","calendarMode","setSeconds","firstDayOfWeek","todayDisabled","todayDate","calendarElement","createHeader","createContent","getDefaultKeyConfig","defaultKeyConfigs","controlUp","controlDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","altUpArrow","spacebar","altRightArrow","altLeftArrow","validateDate","checkDateValue","checkValue","currentDate","setOverlayIndex","popupWrapper","modal","minMaxUpdate","tabIndexAttr","headerElement","iconContainer","previousIcon","nextIcon","headerTitleElement","adjustLongHeaderSize","createContentHeader","createContentBody","showTodayButton","createContentFooter","addContentFocus","removeContentFocus","focusedDate","tableBodyElement","selectedDate","getCultureValues","cldrObj","culShortNames","dayFormat","dayHeaderFormat","getCultureObjects","toCapitalize","html","tableHeadElement","weekNumber","shortNames","shiftArray","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","minimum","today","todayButtonClick","keyConfig","navigateTitle","keyActionHandle","dateWireEvents","serverModuleName","isCustomDate","currentView","depth","getViewNumber","navigateTo","resetCalendar","renderDayCellArgs","multiSelection","depthValue","levelRestrict","keyboardNavigate","selectDate","contentClick","navigatePrevious","addMonths","addYears","isMonthYearRange","addDay","isMinMaxRange","navigatePreviousHandler","navigateNextHandler","navigateHandler","triggerNavigate","minMaxDate","localDate","minDate","maxDate","tdEles","numCells","renderDays","islamicModule","islamicRenderDays","renderTemplate","islamicRenderTemplate","isTodayDate","currentMonth","titleUpdate","getMilliseconds","setStartDate","weekEle","weekAnchor","numberOfDays","weekRule","finalDate","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","isOutOfRange","renderDayCellEvent","argsDate","otherMnthBool","disabledCls","getDateVal","copyValues","formatOptions_1","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","mon","yr","curYrs","minYr","minMonth","maxYr","maxMonth","setMonth","localMonth","localYr","startYr","endYr","startFullYr","endFullYr","startHdrYr","endHdrYr","startYear","rowIterator","lastDate","timeOffset","findLastDay","classNm","trEle","otherMonthCell","iconHandler","islamicIconHandler","setAriaActiveDescendant","clickEventEmitter","getIdValue","islamicPreviousHeader","islamicDate","getIslamicDate","validateValues","checkView","skipIndex","tempValueString","minFormatOption","minString","maxFormatOption","maxString","setValueUpdate","dayFormatOptions","monthFormatOptions","setActiveDescendant","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","todayButtonEvent","stringVal","islamicPrevious","islamicNext","gregorianFormat","islamicFormat","tzOffset","tzOffsetDiff","setTime","getMaxDays","setDateDecade","setDateYear","checkPresentDate","dates","checkPrevious","navigatedEvent","navigatedArgs","startDate","endDate","modifier","findNextTD","rangeValue","tmpDate","inValue","toUTCString","toLocaleString","Calendar","isMultiSelection","tempValues","copyDate","previousValues","setClass","setTimeZone","newCssClass","oldCssClass","isDayLightSaving","secondOffset","firstOffset","timeZoneDiff","changedArgs","generateTodayVal","triggerChange","previousDate","previousDateTime","isMultiSelect","tempDays","islamicRenderYears","islamicRenderDecade","storeView","tempDate","addDate","tempDates","removeDate","setTodayDate","changeEvent","POPUPWRAPPER","INPUTFOCUS","ACTIVE","OVERFLOW","NONEDIT","DatePicker","isDateIconClicked","isAltKeyPressed","invalidValueString","checkPreviousValue","maskedDateValue","isIconClicked","isDynamicValueChanged","isBlur","datepickerOptions","updateInput","setAllowEdit","allowEdit","checkInvalidValue","enableMask","updateInputValue","previousElementValue","inputValueCopy","ariaAttrs","l10nLocale","fullScreenMode","INPUTWRAPPER","isCalendar","disabledDates","minMaxUpdates","dateValue","tempFormat","formatString","dateTimeFormat","errorClass","checkStringValue","returnDate","formatDateTime","valueDate","invalid","basicISOString","bindInputEvent","dateIconHandler","mouseUpHandler","inputFocusHandler","inputBlurHandler","keyupHandler","inputChangeHandler","keyboardModules","inputKeyActionHandle","unBindEvents","restoreValue","clearedArgs","popupUpdate","preventEventBubbling","interopAdaptor","invokeMethodAsync","updateHtmlAttributeToElement","calendarKeyActionHandle","focusArguments","openOnFocus","strictModeUpdate","changeTrigger","blurArguments","calendarKeyboardModules","documentHandler","clickedView","defaultAction","targetdate","dateOptions","toLocaleUpperCase","createCalendar","modelHeader","iconRight","CalendarSwipeHandler","TouchStartHandler","preventArgs","setAriaAttributes","touchStart","setAriaDisabled","yearHeading","h2","daySpan","monthSpan","modelCloseIcon","modelCloseHandler","modelTodayButton","selectCalendar","prevent_1","outOfRange","mobilePopupWrapper","prevent_2","closeEventCallback","inputElementCopy","ensureInputAttribute","ngTag","checkHtmlAttributes","altDownArrow","nameAttribute","checkFormat","skeletonString","dynamic","valueCopy","previousValCopy","renderDayCell","dateIdString","isDisabledDate","dayOfTheWeek","POPUPDIMENSION","DAY","HOVER","NAVIGATION","FOCUS","LISTCLASS","EDITABLE","createdEl","timeFormat","timeCollections","TimeMaskPlaceholder","TimePicker","disableItemCollection","timeOptions","angularTag","openPopupEventArgs","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","checkErrorState","clientTimeZoneDiff","clearIconState","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","checkTimeFormat","checkInValue","isNavigate","isTextSelected","valueWithMinutes","prevDate","updatedCssClassesValue","isNullOrEmpty","getCldrDateTimeFormat","cldrFormat","isInvalid","valueExp","valueExpression","setCurrentDate","getCultureTimeObject","listTag","propertyList","generateList","listWrapper","addSelection","getPopupHeight","containerStyle","setPopupWidth","modelTitleSpan","timePopupCloseHandler","createDateObj","updatedClassesValue","timeStyle","cssClassNew","cssClassOld","removeErrorClass","disableTimeIcon","selectInputText","setCursorToEnd","getMeridianText","meridian","getCursorSelection","getActiveElement","setScrollTo","findScrollTop","initialTime","scrollTime","cldrTimeFormat","cldrDateFormat","getCultureDateObject","dateToNumeric","getExactDateTime","compareFormatChange","updatePlaceHolder","mouseDownHandler","curPos","cursorDetails","focusSelection","isSeparator","objToString","createMask","previousState","documentClickHandler","mobileTimePopupWrap","disposeServerPopup","checkValueChange","valueProcess","minVal","maxVal","dateVal","strictOperation","clearHandler","inputEvent","timeValue","raiseClearedEvent","getTextFormat","strArray","validateValue","newval","findNextElement","timeVal","collections","selectNextItem","validLiElement","isCheck","getHoverItem","setActiveClass","timeParse","listBaseOptions","getProperty","popupAlignment","timePopupElement","formatValues","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","POPUP","ICONANIMATION","DateTimePicker","scrollInvoked","dateFormatString","dateTimeOptions","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timeIcon","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isDisable","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","listCreation","TimePopupFormat","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","timeModal","timeKeyActionHandle","unWireTimeListEvents","modelWrapper","dateTimeCloseHandler","timeContent","setDimension","setTimeHover","removeTimeHover","getFullDateTime","tempVal","combineDateTime","minutes","seconds","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","hours","tempStartValue","tempMin","formatCount","formattext","tempEndValue","tempMax","getUTCFullYear","dateTimeCloseEventCallback","maskedDateModule","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","FormFieldPopUp","applyTextFormFieldValue","updateFormField","textBoxInstance","resultText","isCanceled","applyNumberFormFieldValue","numberInput","applyDateFormFieldValue","datePickerInstance","dateInput","applyDropDownFormFieldValue","ddlInstance","enableDisableDatePickerOkButton","dataPickerOkButton","isFormFilling","initPopup","textBoxContainer","initTextBoxInput","initNumericTextBox","initDatePicker","initDropDownList","textBoxDiv","textBoxButtonDiv","textBoxOkButton","textBoxCancelButton","numericDiv","numericTextBox","numericTextBoxInstance","dateDiv","datePicker","dropDownDiv","dropDownInput","ddl","showPopUp","selectField","rex","inputElement_1","formFieldType","getLeftInternal","getTooltipPosition","ContentControlPopUp","dropDownChange","convertedItems","convertedItem","TrackChangesPane","users","enableButtons","viewTypeitems","sortedRevisions","noChangesVisibleInternal","selectedUser","selectedType","initTrackChangePane","trackChangeDiv","noChangeDivElement","currentSelectedRevisionInternal","singleInnerDiv","navigatePreviousChanges","navigateNextChanges","userButtonEle","userDropDownitems","userDropDown","onUserSelect","onUserOpen","beforeItemRender","beforeDropDownItemRender","userDropDownButton","getSpanView","viewTypeEle","viewTypeDropDownButton","onTypeSelect","menuoptionEle","menuDropDown","onMenuSelect","menuDropDownButton","alignSelf","selectedText","updateUsers","onSelection","sortCollectionToDisplay","updateMenuOptions","isRevisionVisible","singleChangesDiv","setNoChangesVisibility","enableDisableButton","enableButton","isUpdateTrackChanges","revisionCount","isNoChangeDiv","currentChangeView","changesDiv","layoutElementText","changesSingleView_1","removeAllChanges","ranges","acceptButtonElement","rejectButtonElement","groupedRevision","groupTableRevisions","changeView","nextRevision","ChangesSingleView","createSingleChangesDiv","nextRowFormat","appendRowToTable","totalCount","addChanges","updateRevisionIndexAndCount","startRevision","currentRevisionType","startTable","startParentTable","nextRevisionType","nextTable","nextRowIndex","revisionNavigateInternal","groupingAccept","selectTableRevision","changesCount","userNameTotalDiv","userNameLabel","revisionTypeLabel","whiteSpace","dateView","changesTextDiv","buttonTotalDiv","buttonDiv","acceptButton","acceptButtonClick","rejectButton","rejectButtonClick","currentCount","insertRow","insertCell","changesText","toSkip","addSpan","retrieveFieldResultantText","emptyChar","imageEle","paraMark","removeFromParentCollec","MajorMinorFontScheme","fntTypeface","fntSchemeList","majorMinor","FontScheme","majFontScheme","minFontScheme","schemeName","FontSchemeStruct","pnose","fontSchemeStructure","panose","Themes","fntScheme","__awaiter","thisArg","_arguments","generator","fulfilled","rejected","__generator","sent","trys","ops","verb","op","TypeError","DocumentHelper","isSelectionCompleted","scrollbarWidth","isWebPrinting","isHeaderFooter","currentPage","selectionStartPageIn","selectionEndPageIn","showRevision","timer","isTimerStarted","preZoomFactor","preDifference","isDragging","fieldEndParagraph","fieldToLayout","isMouseDown","isMouseEntered","scrollMoveTimer","isControlPressed","isTouchInput","useTouchSelectionMark","touchDownOnSelectionMark","isComposingIME","lastComposedText","isCompositionStart","isCompositionUpdated","isCompositionCanceled","isCompositionEnd","suffix","commentUserOptionId","stylesMap","preDefinedStyles","isRowOrCellResizing","endBookmarksUpdated","isMouseDownInFooterRegion","pageFitTypeIn","fieldCollection","isPageField","mouseDownOffset","zoomFactorInternal","moveCaretPosition","isTextInput","cachedPages","skipScrollToPosition","isMobileDevice","fontSubstitutionTable","endnotes","isFootnoteWidget","isMouseDownInSelection","isBookmarkInserted","isAutoResizeCanStart","isRestartNumbering","onTextInput","handleTextInput","compositionStart","isReadOnlyMode","positionEditableTarget","compositionUpdated","insertIMEText","getEditableDivTextContent","compositionEnd","editableDiv","onImageResizer","isImageResizerVisible","isImageResizing","MouseEvent","onMouseUpInternal","TouchEvent","onTouchUpInternal","onKeyPressInternal","canEditContentControl","isInlineFormFillMode","key_1","onTextInputInternal","onPaste","pasteInternal","contextMenuModule","contextMenuInstance","hideCaret","showCaret","markIndicator","hRuler","vRuler","rulerHelper","vRulerBottom","vtHeight","fireViewChange","onWindowResize","isContainerResize","resizeTimer","showRuler","updateRuler","collaborativeEditingHandlerModule","onContextMenu","onContextMenuInternal","onMouseDownInternal","isTableMarkerDragging","updateCursor","formFillPopup","contentDropDown","isLeftButtonPressed","enableImageResizerMode","selectedResizeElement","isInShape","getCurrentTextFrame","selectShape","cursorPoint","findFocusedPage","isCursorInsidePageRect","isCursorInFooterRegion","tableResize","isInCellResizerArea","isInRowResizerArea","handleResize","getLineWidget","checkCursorIsInSelection","onMouseMoveInternal","isImageMoveToNextPage","handleImageResizingOnMouse","currentResizingTable","setPositionForBlock","handleResizing","selectedImageWidget","isForward","dragStartParaInfo","dragEndParaInfo","caret","updateTextPositionForSelection","touchY","touchPoint_1","isShapeResize","moveTextPosition","autoScrollOnSelection","updateTextPosition","checkForCursorVisibility","onMouseLeaveInternal","viewerTop","scrollForwardOnSelection","scrollBackwardOnSelection","onMouseEnterInternal","onDoubleTap","checkAndEnableHeaderFooter","getHyperLinkFieldInCurrentSelection","getCurrentFormField","enableFormField","formatType","getFormFieldType","textFormFieldDialogModule","checkBoxFormFieldDialogModule","dropDownFormFieldDialogModule","footnoteText","setPositionParagraph","endnoteText","isinEndnote","isinFootnote","footnoteReferenceElement","selectCurrentWord","isListTextSelected","updateResizingHistory","editor","insertContentControlPlaceholder","isImageSelected","renderPictureContentControlElement","isCtrlkeyPressed","iscontentControl","toggleContentControlCheckBox","removeContentControl","useCtrlClickToFollowHyperlink","navigateHyperLinkOnEvent","formFillingMode","previousSelectedFormField","toggleCheckBoxFormField","isFormFillProtectedMode","navigateToNextFormField","getPhysicalPositionInternal","selectInternal","fireSelectionChanged","isSelectionInListText","selectListText","mouseUpInternal","scrollToPosition","moveSelectedContent","imageResizer","leftValue","topValue","isCellPrevSelected","onTouchStartInternal","zoomX","zoomY","getTouchOffsetValue","resizeObj","getImagePointOnTouch","getCaretBottom","longTouchTimer","onLongTouch","pointRelToPage","selStart","selEnd","updateSel","selStartPt","selEndPt","updateSelectionOnTouch","onTouchMoveInternal","touch","handleImageResizingOnTouch","currentDiff","onPinchOutInternal","onPinchInInternal","isImageField","touchEnd","onKeyUpInternal","setEditableDivCaretPosition","onKeyDownInternal","isHandled","keyEventArgs","print","documentName","initalizeStyles","customXmlData","images","visibleBoundsIn","containerCanvasIn","openTextFile","paragraph1","line1","singleLineLength","lineLength","onDocumentChanged","selectionCanvasIn","zoomModule","dialogInternal","dialogInternal2","initDialog2","dialogInternal3","initDialog3","currentSelectedCommentInternal","previousSelectedComment","clearDocumentItems","clearSearchHighlight","setDefaultCharacterValue","setDefaultParagraphValue","setDefaultDocumentFormat","parseCharacterFormat","parseParagraphFormat","isNsid","getListLevelNumber","addToCollection","imageStringCol","includeHidden","initializeComponents","viewerContainerStyle","outline","createEditableDiv","createEditableIFrame","initializeImageResizer","updateViewerSizeInternal","initTouchEllipse","measureScrollbarWidth","parentDiv","childDiv","initIframeContent","innerHtml","initCaret","wireInputEvents","onIframeLoad","updateAuthorIdentity","getAuthorColor","userInfo","userinitial","avatarDiv","avatar","authorName","generateRandomColor","getRect","getSelectionPage","iframeStyle","dialogTarget1","popupTarget","beforeClose","dialogTarget3","dialogTarget2","getBase64","Image","displayPixelRatio","draw","commentMarkElement","iOps","tocStyles","tocBookmarkId","highlightFormFields","documentStart","intializeDefaultStyles","enableEditor","isIncrementalSave","applyRemoteAction","optionsPaneModule","showHideOptionsPane","isViewPasteOptions","showHidePasteOptions","fireDocumentChange","ellipse","getPage","getSelectionInfo","updateSelectionInfo","dropSelectionStartParaInfo","dropSelectionEndParaInfo","dropSelectionStartParaIndex","dropSelectionEndParaIndex","dropSelectionStartPos","dropSelectionEndPos","dragOnSelectionStartParaIndex","dragOnSelectionEndParaIndex","dragOnSelectionStartPos","dragOnSelectionEndPos","isEnableLocalPasteTrue","enableLocalPaste","dropExtraOffset","hasNewLineChar","cut","copiedTextContent","paste","selectPosition","getLeftValue","isInsideRect","selectionLineWidget","isInShapeBorder","touchOffsetValues","updatedZoomFactor","getPageWidth","getDocumentEditorElement","resizerTimer","currentVisibleWidth","preVisibleWidth","layoutWholeDocument","triggerAutoResizeInterval","counter","internal","autoResizeSettings","tempRect","args_1","iterationCount","computedStyle","rectHeight","rectWidth","restrictPaneRect","getComputedWidth","optionsRect","isOptionsPaneShow","optionsPane","paneWidth","selectParagraph","skipCursorUpdate","isBookmark","getLineWidgetInternal","prevLineWidget","caretInfo","updateCaretSize","caretHeight","updateCaretToPage","scrollBarWidth","isMouseDragged","pageBottom","shapeElementInfo","checkFloatingItems","isShapeSelected","getLineWidgetBodyWidget","shapeInfo","behindShapeInfo","isEmptyShape","isInFootnoteWidget","bodyWidget_1","inlineShapeInfo","checkInlineShapeItems","checkPointIsInLine","selectionInShape","isMouseDraggedInShape","blockContainer","isBehind","clearSelectionHighlight","clearSelectionHighlightInSelectedWidgets","scrollToLastPage","startindex","fieldCodes","fieldCategory","fieldPattern","pageNumberStyle","restartPageNumbering","currentSectionIndex_1","pageStartingNumber","getFieldText","currentSectionIndex","currentPageCount","listParagraphs","hyperlinkField","isRowResize","isCellResize","floatItemInfo","checkAllFloatingElements","resizePosition","getImagePoint","lineLeft","isInInline","getLineStartLeft","updateTextPositionIn","getLeft","setHyperlinkContentToToolTip","isLocked","setLockInfoTooptip","getFootNoteElementInCurrentSelection","setFootnoteContentToToolTip","updateDialogTabHeight","contentStyle","dialogStyle","paddingVertical","borderVertical","paddingHorizontal","borderLeft","borderRight","borderHorizontal","isSameTopBorder","isSameBottomBorder","isSameLeftBorder","isSameRightBorder","paragraphX","previousBlockX","nextBlockX","checkEqualBorder","currentIndent","previousIndent","isPageInVisibleBound","pageH","getLastParagraphInLastCell","getLastParagraphBlock","getLastParagraphInFirstRow","getFirstParagraphInLastRow","addToStylesMap","StyleName","Style","parseStyle","IconClass","domStyle","styleObj","textDecoration","vAlign","LayoutViewer","ColumnLayout","onPageFitTypeChanged","top_3","isEmptyWidget","isFootNote","setClientArea","getColumnBoundsByBodyWidget","updateClientAreaForTable","updateClientAreaByWidgetFootNote","updateBoundsBasedOnTextWrap","updateBoundsBasedOnTextWrapTable","updateYPosition","updateXPosition","tableAlignmentForBidi","resizerPosition","updateParagraphYPositionBasedonTextWrap","updateParagraphXPositionBasedOnTextWrap","updateTableXPositionBasedOnTextWrap","isWord2013","isEmptyPara","isFirstItemBottomPositionUpdated","isInsideHeaderFooter","getTextWrappingBound","isPositionsUpdated","tempBounds","getIntersectingItemBounds","floatingItems","firstRowWidth","isFloatingItemIntersect","remainingHeightOfFloatingItem","intersectedfloatingItem","getMinBottomFloatingItem","getIntersectingFloatingItems","fItems","minBottomItemIndex","minBottom","skippedCount","itemTextWrapBound","intersectItemTextWrapBound","currentPoint","updateCurrentPage","updateHeaderFooterPage","pageRight","getPageHeightAndWidth","viewerWidth","viewerHeight","renderVisiblePages","renderPage","prevScaleFactor","verticalHeight","horizontalWidth","horWidth","prevPageTop","prevX","updateCanvasWidthAndHeight","updateScrollBarPosition","updatePageBoundingRectangle","pageFitType","getCurrentHeaderFooter","currentSecIndex","createHeaderFooterWidget","scrollToPage","updatePositionObj","updateObj","updateVisiblePages","addVisiblePage","setImageResizerPositions","isPasteContentCheck","getPageContent","updateUniqueWords","SpellCollection","getContentHeight","getContentWidth","currentWidth","contentlen","viewerIn","currentIndexIn","colCount","columnIn","numberOfColumnsIn","columnList","defaultSpaceIn","getColumnObj","getColumnBounds","getColumnBoundsByIndex","getColumnByIndex","colWidth","colSpace","noOfCols","isEqualWidth","totalSpace","colObj","colRect","curColumn","prevColumn","BulletsAndNumberingDialog","isBullet","numberListClick","setActiveElement","bulletListClick","loadNumberingBulletDialog","closeNumberingBulletDialog","unWireEventsAndBindings","onOkButtonClick","initNumberingBulletDialog","tabTarget","createNumberList","createBulletList","tabObj","numberListDiv","bulletListDiv","selecting","onTabSelect","ulTag","numberedNone","createNumberNoneListTag","numberedNumberDot","createNumberListTag","numberedNumberBrace","numberedUpRoman","numberedUpLettter","numberedLowLetterDot","numberedLowLetterBrace","numberedLowRoman","text1","text2","text3","liTag","liInnerDiv","cssFloat","createBulletListTag","isNone","liNextDiv","bulletNone","bulletDot","bulletCircle","bulletSquare","bulletFlower","bulletArrow","bulletTick","showNumberBulletDialog","Print","windowPrint","closePrintWindow","closed","printWindow","browserUserAgent","getPageHeight","printElement","generatePrintContent","exportAsImage","pageNumber","imageType","printPage","pgHeight","pgWidth","imageData","canvasURL","breakstring","Connector","titleBorder","titleSettings","Location","Font","Border","Offset","ContainerPadding","Indexes","CornerRadius","Index","seriesIndex","pointIndex","EmptyPointSettings","DragSettings","CenterLabel","fontStyle","TooltipSettings","Periods","StockTooltipSettings","SvgRenderer","PeriodSelectorSettings","rootID","svgLink","rootId","getOptionValue","createSvg","svgObj","setElementAttributes","setSVGSize","drawPath","drawLine","drawRectangle","rectangle","drawCircle","drawPolyline","polyline","drawEllipse","drawPolygon","polygon","preserveAspectRatio","createText","createTSpan","tSpan","createTitle","createDefs","createClipPath","clipPath","createForeignObject","foreignObject","createGroup","createPattern","createRadialGradient","colors","colorName","colorStop","newOptions","drawGradient","createLinearGradient","y2","gradientType","defs","gradient","stop_1","drawClipPath","drawCircularClipPath","createCanvas","CanvasRenderer","canvasObj","setCanvasSize","dashArray","dashArrayString","canvasTranslate","canvasCtx","cornerRadius","rx","translate","drawCornerRadius","arcTo","dataSplit","innerR","q1","q2","quadraticCurveTo","c1","c2","c3","c4","bezierCurveTo","arc","counterClockWise","transX","transY","isTSpan","textAlign","baseline","txtlngth","labelRotation","points","circumference","ry","imageObj","myGradient","setGradientValues","newColorStop","stopColor","addColorStop","updateCanvasAttributes","img_1","canvasClip","canvasRestore","themeFontStyle","breakText","htmlObject","textArray","fontWidth","fontHeight","Size","withInAreaBounds","areaBounds","Side","isRight","isBottom","CustomizeOption","TextOption","baseLine","drawSymbol","renderer","functionName","locX","locY","eq","renderOption","calculateShapes","PathOption","TooltipLocation","TextStyle","TooltipBorder","AreaBounds","ToolLocation","Tooltip","initPrivateVariable","isCanvas","removeSVG","createTooltipElement","themeStyle","tooltipFill","tooltipBoldLabel","tooltipLightLabel","tooltipHeaderLine","textStyle","getTooltipThemeColor","formattedText","highlightPadding","areaMargin","isFirst","markerPoint","svgObject","templateObject","blazorTemplate","fadeOuted","updateTemplateFn","createTemplate","renderText","argsData","markerSide","renderTooltipElement","drawMarker","markerSize","textElements","enableRTL","groupElement","pathElement","shapes","shapeOption","markerGroup","elementSize","marginX","arrowPadding","palette","tooltipContent","getTooltipTextContent","tooltipDiv","arrowLocation","tipLocation","isTop","isLeft","marginY","isFixed","sharedTooltipLocation","tooltipLocation","inverted","clipBounds","allowHighlight","wrapPadding","wrapHeader","isWrap","wrappedText","headerSize","pathElement_1","pointRect","crosshair","updateDiv","animateTooltipDiv","tooltipPlacement","rX","rY","tipX","tipY","findDirection","enableShadow","shadowId","defElement","borderColor","changeText","revert","findFormattedText","lines","tspanElement","textCollection","tspanOption","tspanStyle","leftSpace","rightSpace","isBoldTag","headerWidth","isLeftSpace","isRightSpace","headerSpace","isRow","isColumn","subStringLength","markerPadding","labelColor","contentWidth","textHeight","renderOptions","withoutHeader","pointsLength","isTextWrap","textFont","renderContentRTL","contentWidthIndex","characterCollection","isValidHTMLElement","firstElement","templateElement","sharedTemplateElement","controlInstance","tooltipRect","tooltipRendered","thisObject_1","tooltipRect1","getCurrentPosition","symbolLocation","clipX","clipY","markerHeight","boundsX","boundsY","outOfBounds","currenDiff","templateComplier","fadeOut","tooltipElement","tooltipGroup_1","ELEMENT_NODE","opacity_1","progressAnimation","endAnimation","tooltipGroup","DoubleRange","mStart","mEnd","Double","isStacking","calculateNumericNiceInterval","actualDesiredIntervalsCount","getActualDesiredIntervalsCount","niceInterval","desiredIntervals","isAutoIntervalOnBothAxis","minInterval","logBase","intervalDivs","currentInterval","zoomPosition","enableAutoIntervalOnZooming","getActualRange","initializeDoubleRange","startFromZero","actualRange","doubleRange","NEGATIVE_INFINITY","valueType","calculateRangeAndInterval","calculateRange","applyRangePadding","calculateVisibleLabels","setRange","paddingInterval","maxPointLength","orientation","rangePadding","getMinPointsDelta","requireInvertedAxis","yAxisRange","findMinMax","xMin","xMax","drawType","dragSettings","dragY","visibleRange","yMax","yMin","getRangePadding","findAdditional","findNormal","updateActualRange","calculateVisibleRange","startValue","chartAreaType","zoomingScrollBar","calculateVisibleRangeOnZooming","duplicateTempInterval","tempInterval","triggerRangeRender","visibleLabels","labelStyle","getFormat","isCustom","intervalDigits","formatDigits","labelFormat","useGroupingSeparator","startLabel","endLabel","withIn","triggerLabelRender","formatValue","getMaxLabelWidth","isStack100","labelValue","legendClick","legendRender","textRender","pointRender","sharedTooltipRender","seriesRender","axisLabelRender","axisRangeCalculated","tooltipRender","chartMouseMove","chartMouseClick","chartDoubleClick","pointClick","pointMove","chartMouseLeave","chartMouseDown","chartMouseUp","resized","beforeResize","beforePrint","regSub","regSup","beforeExport","afterExport","ChartAnnotationSettings","LabelBorder","MultiLevelCategories","StripLineSettings","MultiLevelLabels","ScrollbarSettingsRange","ScrollbarSettings","Row","axes","nearSizes","farSizes","insideFarSizes","insideNearSizes","computeSize","scrollBarHeight","innerPadding","internalVisibility","findTickSize","crossInAxis","findLabelSize","isAxisOpposedPosition","Column","MajorGridLines","MinorGridLines","AxisLine","MajorTickLines","MinorTickLines","CrosshairTooltip","Axis","axisBottomLine","crossAt","updatedRect","multiLevelLabelHeight","isChart","isIntervalInDecimal","titleCollection","titleSize","isRTLEnabled","crossAxis","tickPosition","isInside","majorTickLines","inside","isHorizontal","titleRotation","titleStyle","axisTitleFont","rotateTextSize","getTitle","labelSize","titlePadding","labelPadding","maxLabelSize","placeNextToAxisLine","findDifference","updateCrossValue","valueToCoefficient","isAxisInverse","isZoomSet","baseRange","baseModule","stockChart","pointX","isAxisLabelBreak","previousEnd","isIntersect","labelIntersectAction","isBreakLabel","originalText","axisLabelFont","breakLabelSize","enableTrim","rotatedLabel","width1","edgeLabelPlacement","findMultiRows","isHorizontalAngle","multiLevelLabelModule","multiLevelLabels","getMultilevelLabelsHeight","currentX","currentLabel","isBreakLabels","width2","store","getModule","firstToLowerCase","setIsInversedAndOpposedPosition","isPolar","opposedPosition","isInversed","updateAxis","chartAxisLayoutPanel","axisCollections","axisElement","axisLineElement","outsideElement","findAxisPosition","drawAxis","enableCanvas","appendChildElement","redraw","VisibleLabels","getVisiblePoints","tempPoint","tempPoints","transformValue","labelText","initialClipRect","delayRedraw","axisSvgObject","svgRenderer","box","pointsAdded","angleInRadians","rotatedTextWidth","rotatedTextHeight","showTooltip","isTitleOrLegendEnabled","bound","logWithIn","withInRange","previousPoint","nextPoint","mX2","mX1","mX3","xStart","xEnd","values_1","subtractThickness","thickness","degreeToLocation","degree","center","radian","ChartLocation","degreeToRadian","getRotatedRectangleCoordinates","actualPoints","coordinatesAfterRotation","tempX","tempY","rotatedX","rotatedY","isRotatedRectIntersect","minA","maxA","projected","i1","minB","maxB","polygons","i2","p1","p2","normal","TransformToVisible","isInverted","labelPlacement","CoefficientToVector","valueToPolarCoefficient","primaryXAxis","startAngle","indexFinder","isPoint","ids","coefficient","dateTimeInterval","Mean","verticalStandardMean","verticalSquareRoot","horizontalStandardMean","horizontalSquareRoot","verticalMean","horizontalMean","PolarArc","endAngle","innerRadius","currentXPosition","findCrosshairDirection","withInBounds","getValueXByPoint","getValueYByPoint","findClipRect","seriesCollection","xValues","seriesMin","minDelta","stackingGroups","xAxisName","stackingGroup","getAnimationFunction","endValue","markerAnimate","isLabel","pathAnimation","previousDirection","animateDuration","currentDireciton","startDirections","splitDirections","endDirections","startPath","endPath","animateAddPoints","removeDirection","currentDirection","startPathCommands","endPathCommands","startPathCommand","endPathCommand","startCoords","endCoords","interpolatedCoords","startCoord","endCoord","interpolatedValue","appendClipElement","clipElement","redrawElement","isLineBreakLabels","text_1","labelCollection","breakLabels","lineBreakLabelTrim","maximumLabelWidth","textTrim","availableSize","desiredIntervalsCount","maximumLabels","templateAnimate","isRemove","isChartControl","control","chartRenderer","dir","xVal","yVal","isBulletChart","sizeBullet","targetWidth","lx","ly","cartesianlarge","cartesiansmall","getAccumulationLegend","calculateLegendShapes","accReactTemplate","datalabelGroup","dataLabel","clientRect","accumulationDataLabelModule","calculateLabelSize","chartReactTemplate","labelIndex","dataLabelCollections","dataLabelModule","calculateTemplateLabelSize","marker","dataLabelId","getTemplateFunction","tempObject","elementData","reactCallback","getFontStyle","measureElementRect","isReactCallback","getPoint","xLength","yLength","forceAnimate","isRect","previousRect","scatterElement","currentTransform","existChild","currentRect","animateRectElement","previousTranform","animateRedrawElement","stopTimer","isOverlap","calculateRect","textSize","convertToHexCode","componentToHex","convertHexToColor","ColorValue","colorNameToHex","isRGBValue","getSaturationColor","rgb","applyZLight","RGB","isRtlEnabled","stringToNumber","containerSize","newTransform","previousTransform","isDiv","rotateX","rotateY","isMinus","seriesClipRect","isRotatedLabelIntersect","isDataLabelWrap","calculateSize","marginHeight","tooltipSpace","periodHeight","periodSelectorSettings","periods","enableGrouping","disableRangeSelector","scaleValue","canvasRender","chartObject","selectorObject","textOverflow","titlePositionX","maximumWidth","wrapAnyWhere","textWrapAnyWhere","getUnicodeText","regexp","digit","digitSpecific","convertedText","unicodeSub","unicodeSup","blazorTemplatesReset","annotations","StackValues","startValues","endValues","RectOption","ImageOption","CircleOption","Thickness","PointData","lierIndex","AccPointData","ControlPoints","controlPoint1","controlPoint2","getColorByValue","colorMap","rbgColorValue","previousColor","nextColor","previousOffset","full","length_2","splitColorValueOffset","splitColor","prevColor","getPercentage","getPercentageColor","getGradientColor","getTextAnchor","alignment","getSeriesColor","getThemeColor","canvas","darkBackground","axisLabel","axisTitle","axisLine","majorGridLine","minorGridLine","majorTickLine","minorTickLine","legendLabel","background","areaBorder","crosshairLine","crosshairFill","crosshairLabel","markerShadow","selectionRectFill","selectionRectStroke","selectionCircleStroke","tabColor","bearFillColor","bullFillColor","toolkitSelectionColor","toolkitFill","toolkitIconRectOverFill","toolkitIconRectSelectionFill","toolkitIconRect","chartTitleFont","legendTitleFont","legendLabelFont","tooltipLabelFont","datalabelFont","chartSubTitleFont","crosshairLabelFont","stripLineLabelFont","histogram","CartesianAxisLayoutPanel","chartModule","measureAxis","chartAreaWidth","leftSize","rightSize","topSize","bottomSize","measureRowAxis","measureColumnAxis","calculateAxisSize","calculateFixedChartArea","refreshAxis","legendSettings","legendModule","legendBounds","calculateRowSize","arrangeAxis","measureDefinition","calculateColumnSize","scrollbarSettings","scrollBarModule","zoomSettings","enableScrollbar","enableScrollbarOnZooming","isZoomed","axisOffset","nearCount","farCount","plotOffset","len_2","computedTop","plotOffsetTop","getAxisOffsetValue","plotOffsetBottom","len_3","len_4","computedLeft","plotOffsetLeft","plotOffsetRight","measure","actualIndex","verticalAxes","getActualRow","pushAxis","horizontalAxes","getActualColumn","position1","position2","crossesAt","crossesInAxis","updateCrossAt","primaryYAxis","dateFormatter","labels","axisCollection","actualLength","rowTop","remainingHeight","columnLeft","remainingWidth","renderAxes","axisVisibility","yAxisName","paretoOptions","showAxis","drawPaneLines","renderScrollbar","isScrollUI","drawBottomLine","axisName","drawAxisLine","majorGridLines","minorTickLines","minorGridLines","optionsLine","definitionName","plotX","plotY","plotBottom","plotTop","plotLeft","plotRight","drawYAxisGridLine","minorGridDirection","isLogAxis","isCategoryAxis","pointY","majorGrid","majorTick","isOpposed","tickSize","axisLineSize","ticksbwtLabel","isTickInside","ticks","chartThemeStyle","isBorder","renderGridLine","minorTicksPerInterval","renderMinorGridOnZooming","drawAxisMinorLine","drawYAxisLabels","isAxisBreakLabel","RotatedWidth","labelSpace","isLabelInside","isVerticalAngle","textPadding","maxLineWidth","intervalLength","labelHeight","yAxisLabelX","labelElement","isInverse","isLabelOnAxisLineLeft","sizeWidth","breakLabelSizeWidth","LabelMaxWidth","breakLabelMaxWidth","previousYValue","currentYValue","createZoomingLabel","getAxisLabelXvalue","lineBreakAlignment","drawYAxisBorder","gap","labelBorder","createAxisBorderElement","visibleSeries","renderYAxisMultiLevelLabels","drawYAxisTitle","isRotated","drawXAxisGridLine","minorDirection","numericIDs","calculateGridLineId","pointsRemoved","pointXValue","isPointRemoved","elementsLength","numericIds","isFirstLabel","logStart","coor","logInterval","logPosition","ticksX","ticksY","minorGird","minorTick","findLogNumeric","drawXAxisLabels","labelWidth","islabelInside","tickSpace","newPoints","textPoints","rotatedLabelSize","isLabelUnderAxisLine","axislabelElement","removeAxisLabelElements","isEndAnchor","paddingForBreakLabel","getAnchor","breakLabelWidth","getLabelText","xValue2","rect_1","xAdjustment","yAdjustment","rectCoordinates","getRectanglePoints","rectCenterX","rectCenterY","rotateAngle","textRect","textRectCoordinates","rectPoints","newRect","interSectPoint","calculateIntersection","rectPoint1","rectPoint2","optionsX","visibleLabelTexts_1","p3","p4","c2x","c3x","c2y","c3y","u1","u4","findAxisLabel","drawXAxisBorder","axisRect","renderXAxisMultiLevelLabels","borderElement","drawXAxisTitle","gridDirection","gridModel","gridId","gridIndex","themeColor","removeIndex","isRemoved","findParentNode","zoomElement","chartRect","createZoomingLabels","currentPoints","previousPoints","insideRegion","commonXvalues","mouseX","mouseY","isRectSeries","isTransposed","markerWidth","getRectPoint","selectionMode","fromCenterX","fromCenterY","clickAngle","distanceFromCenter","arcAngle","isScrolling","regionData","regions","isPointInThresholdRegion","checkRegionContainsPoint","regionRect","region","isBar","heightValue","getClosest","xvalues","xData","leftSideNearest","rightSideNearest","binarySearch","found","getClosestX","isDescending","sortData","symbolLocations","mergeXvalues","getDistinctValues","commonXValue","commonXValues","intial","DataLabelSettings","MarkerSettings","ParetoOptions","Points","percentage","isSelect","isPointInRange","verticalError","verticalNegativeError","horizontalError","horizontalNegativeError","verticalPositiveError","horizontalPositiveError","Trendline","setDataSource","trendLineModule","initDataSource","visibleSeriesCount","ErrorBarCapSettings","ChartSegment","ErrorBarSettings","SeriesBase","rangeColorPoints","isAdvancedColor","currentViewData","seriesType","isRectTypeSeries","removedPointIndex","isLegendClicked","processJsonData","xName","Series","textMappingName","processInternalData","paretoSeriesModule","performCumulativeCalculation","sizeMax","getSeriesType","pushCategoryPoint","pushDateTimePoint","pushDoublePoint","updateSplineValue","dataPoint","pushCategoryData","pushData","setEmptyPoint","rangeColorsInterior","isArea","isRange","findSplinePoint","calculateBinValues","histogramValues","binWidth","rangeColorSettings","interior","getObjectValueByMappingString","enableComplexProperty","getObjectValue","volume","pointColorMapping","errorBarColor","errorBarColorMapping","yName","tooltipMappingName","isAdvancedColorSupported","rangeColorName","colorValue","getPointFillColor","pointFill","rangeMap","mappingName","findVisibility","emptyPointSettings","yData","getAverage","yValues","yAxisMin","yAxisMax","setXYMinMax","setHiloMinMax","seriesMinY","isNegativeValue","isIndexed","indexLabels","refreshDataManager","dataModule","generateQuery","dataManagerSuccess","isRemoteData","findCurrentData","recordsCount","refreshChart","refreshTechnicalIndicator","trendlines","refreshBound","stockChartDataManagerSuccess","drawPoints","lowDrawPoints","delayedAnimation","refreshAxisLabel","findSeriesCollection","isStack","rowSeries","_e","_f","_g","rectSeriesInChart","calculateStackedValue","isStacking100","columnItem","calculateStackingValues","lastValue","lastPositive","lastNegative","frequencies","findFrequencies","groupingValues","visiblePoints","stackingSeies","stackedValues","seriesCollection_1","isColumnBarType","findPercentageOfStacking","stackingSeies_1","seriesCollection_3","renderSeries","createSeriesElements","errorBarModule","appendSeriesElement","seriesElements","performAnimation","explodeValue","markerMaxValue","clipRectElement","symbolElement","seriesElement","checkTabindex","errorBarElement","dataLabelElements","shapeElement","animateSeries","isStockChartRendered","doAnimation","doErrorBarAnimation","markerRender","doMarkerAnimation","doDataLabelAnimation","setPointColor","setBorderColor","addPoint","removeTrackballElements","updatePoint","calculateStackValues","chartDuration","renderMarker","updateSeries","updateChartAxis","removePoint","updatePointsAfterRemoval","baseId","trackball0","trackball1","baseClassPattern","pointIndexMatch","tooltipModule","setData","pointList","samePoints","newHistogramData","existingData","existingPoint","newPoint","updateDirection","annotationModule","renderAnnotations","calculateBounds","renderAreaBorder","stripLineModule","renderStripLine","seriesCollection_4","point_1","Data","initDataManager","dataQuery","dataManagerDeferred_1","MarkerExplode","mouseMoveHandler","markerMove","highlightMode","startMove","explodeSeries","pointData","showNearestPoint","enableTooltip","isPointMouseDown","removeHighlightedMarker","markerExplode","drawTrackBall","animationDuration","maxPointCount","seriesMarker","highlightModule","generateStyle","symbolId","markerElement","trackElement","selectionId","seletionElem","endAnimate","rectElements","trackballAnimate","delays","durations","trackballElements","markerShapes","Marker","previousLocation","previousPath","circlePath","isBoxPlot","isFilled","findlElement","outliers","markerFill","markerBorder","markerOpacity","markerShape","imageURL","markerClipRect","getRangeLowPoint","markerElements","animated","incFactor","lowPoint","LegendSettings","BaseLegend","maxItemHeight","rowHeights","pageHeights","columnHeights","pageXCollections","chartRowCount","legendTitleCollections","legendRegions","pagingRegions","legend","legendID","isAccChartControl","isBulletChartControl","isStockChartControl","bulletChart","fivePixel","rowCount","pageButtonSize","maxColumns","backwardArrowOpacity","forwardArrowOpacity","arrowWidth","arrowHeight","isTitle","calculateLegendBounds","getPosition","itemPadding","library","get3DLegendBounds","getLegendBounds","containerPadding","accumulation","setBounds","titleHeight","titlePosition","legendTitleSize","isPaging","enablePages","calculateLegendTitle","labelIns","ticklIns","categoryFieldValue","categoryField","legendHeight","legendWidth","alignLegend","axisTextSize","legendSize","renderLegend","titlePlusArrowWidth","requireLegendBounds","firstLegend","findFirstLegendPosition","legendCollections","upArrowHeight","legendGroup","legendTranslateGroup","createLegendElements","totalPages","isRtlEnable","getLinearLegend","legendSeriesGroup","previousLegend","startPadding","xLocation","textOptions","shapePadding","legendIndex","bottomSapce","legendOption","isReverse","accessbilityText","getRenderPoint","renderSymbol","toggleVisibility","renderPagingElements","xmlns","nextLegend","linerGradientEle","fillColors","numberItems","diffValue","colorsLength","calculatedValue","stopEle","startLabelY","endLabelY","startLabelX","endLabelX","startTextSize","endTextSize","otherSpaces","linearBarWidth","linearBarHeight","diffWidth","diffHeight","fontcolor","translatePage","gradientLegend","legendCollection","legendCollection_1","maximumTitleWidth","renderLegendTitle","topPadding","legendTitleTextOptions","legendItemsGroup","clippath","pagingClipRect","regionPadding","symbolColor","isStrokeWidth","isCustomBorder","strokewidth","seriesBorder","isLineShapemarker","symbolOption","markerVisibility","textOption","pageTextElement","paginggroup","grayColor","iconSize","titleWidth","clipPathHeight","translateX","totalNoOfPages","calTotalPage","pagingText","changePage","backwardArrow","forwardArrow","pageText","hideArrow","showArrow","arrowElement","targetId","clearTooltip","LegendOptions","TechnicalIndicator","targetSeries","PrintUtils","resizeTo","screen","availWidth","availHeight","htmlContent","getHTMLContent","links","blinks","actualBackgroundColor","isSVG","RangeColorSetting","CrosshairSettings","ZoomSettings","Chart","rotatedDataLabelCollections","checkResize","clickCount","singleClickTimer","isCrosshair","chartid","previousTargetId","currentPointIndex","currentSeriesIndex","currentLegendIndex","previousPageX","previousPageY","allowPan","mergePersistChartData","dataObj","isIdHasSpecialCharacter","numberRegex","childElementId","markerIndex","setCulture","refreshDefinition","elementid","svgId","loadEventData","cartesianChartRendering","applyZoomkit","beforeRenderData","createChartSvg","calculateAreaType","calculateVisibleSeries","initTechnicalIndicators","initTrendLines","calculateVisibleAxis","mouseMoveEvent","getLocalizedLabel","getLegendOptions","rangeFound","enablePeriodSelector","enableSelector","renderElements","isCalculateStacking","rectCount","filterArray","calculateDragSelectedElements","renderBorder","renderTitle","renderSeriesElements","performSelection","setSecondaryElementPosition","renderAnnotation","yAxisElements","mainObject","svgRect","initializeModuleElements","indicators","indicatorElements","hasTrendlines","trendLineElements","isTrendline","tooltipdiv","initializeIndicator","initializeTrendLine","appendElementsAfterSeries","renderCanvasSeries","seriesSvg","svgElement","indicator","createIndicatorElements","getTrendLineElements","calculateStockEvents","enablePan","performedUI","showToolbar","applyZoomToolkit","selectedDataIndexes","invokeSelection","invokeHighlight","redrawSelection","prevPointCount","initializeDataModule","techIndicator","subTitleHeight","elementSpacing","subTitleCollection","subTitle","subTitleStyle","marginTotal","stockLegendModule","exportChart","trendIndex","initSeriesCollection","polarSeriesModule","radarSeriesModule","paretoAxes","isPanning","isAxisZoomed","scrollSettingEnabled","initAxis","injectTo","seriesName","palettes","zOrder","isSecondaryAxis","initSeries","subtitleSize","borderOptions","renderSubTitle","subTitleElementSize","subTitleOptions","backGroundImage","backgroundImage","addSeries","removeSeries","clearSeries","addAxes","axisCollection_1","removeAxis","highlightElement","removeSvg","stopEvent","chartOnMouseDown","mouseMove","mouseEnd","chartOnMouseClick","chartOnDoubleClick","chartRightClick","mouseLeave","chartKeyDown","documentKeyHandler","chartKeyUp","resizeBound","touchObject","chartResize","longPressBound","longPress","crosshairModule","zooming","disableScroll","enableSelectionZooming","enablePinchZooming","msTouchAction","msContentZooming","msUserSelect","webkitUserSelect","isOrientation","setMouseXY","export","exportModule","getDataUrl","currentSize","previousSize","beforeResizeArgs","cancelResizedEvent","touchArg","chartOnMouseMove","onPanning","chartOnMouseLeave","isChartDrag","actionKey","removeLegendHighlightStyles","enableDeferredZooming","enableMouseWheelZooming","chartKeyboardNavigations","titleElement","legendElement","pagingElement","setTabIndex","focusChild","legendElement_1","getActualIndex","currentLegend","seriesIndexes","pointRegion","highlightChart","completeSelection","legendItemsId","legendSelection","calculateSelectedElements","removeTooltip","toolkit","zoomInOutCalculation","performZoomRedraw","yArrowPadding","xArrowPadding","doPan","XYvalues","FindXYPointValue","timeInterval","axisData","pointDoubleClick","triggerPointEvent","axisLabelClick","triggerAxisLabelClickEvent","Xvalue","Yvalue","clickEvt","axisIndex","currentAxis","labelID","titleTooltip","axisTooltip","dataEditingModule","pointMouseMove","texts","categories","mouseDownX","previousMouseMoveX","mouseDownY","previousMouseMoveY","isDoubleTap","threshold","pointMouseDown","chartOnMouseUp","pointMouseUp","setLocaleConstants","defaultLocalConstants","setAnnotationValue","annotationIndex","annotation","processAnnotation","ZoomIn","ZoomOut","Pan","Reset","ResetZoom","enableAnnotation","errorBarVisible","isPointDrag","dataLabelEnable","currentModule","findIndicatorModules","findTrendLineModules","findAxisModule","enableExport","allowExport","enableHighlight","datetimeEnabled","categoryEnabled","logarithmicEnabled","striplineEnabled","dateTimeCategoryEnabled","multiLevelEnabled","axisCollections_1","findStriplineVisibility","stripLines","macdEnable","bandEnable","isLine","isSpline","markerEnable","trendline","striplines","striplines_1","removeLength","pinchTarget","containerCollection","definitions","definitions_1","axisChange","getVisibleSeries","visibleSeries_1","refreshLiveData","removeStyles","mousemove","initMouseEvent","hideTooltip","showCrosshair","hideCrosshair","removeCrosshair","refreshBounds","crosshairTooltip","seriesRefresh","blazorProp","isClosed","boxPlotMode","showMean","binInterval","currentMode","styleId","highlightDataIndexes","LineBase","tempPoints2","xVisibleRange","yVisibleRange","seriesPoints","xTolerance","yTolerance","prevXValue","prevYValue","seriesPoints_1","getLineDirection","firstPoint","secondPoint","getPointLocation","point1","point2","appendLinePath","appendPathElement","addPath","addAreaPath","doProgressiveAnimation","strokeDashArray","pathLength","storePointLocation","withinYRange","GetStepLineDirection","stepLineType","command","getFirstLastVisiblePoint","points_1","getBorderDirection","stackingAreaSeriesModule","stackingStepAreaSeriesModule","removeEmptyPointsBorder","borderDirection","doLinearAnimation","xCenter","yCenter","MultiColoredSeries","getAreaPathDirection","getAreaEmptyDirection","isXSegment","getAxisValue","sortSegments","chartSegments","segmentAxis","applySegmentAxis","pointAnimate","includeSegment","attributeOptions","areaBorderCount","createClipRect","multiColoredAreaSeriesModule","addMulticolorPath","isSegnment","isX","isRequired","startPointLocation","endPointLocation","segmentValue","AreaSeries","pointUpdate","currentXValue","isDropMode","getCoordinate","emptyPointDirection","getPolarIsInversedPath","getRadarIsInversedPath","commonId","dataLabelElement","renderDataLabel","StackingAreaSeries","nextPointIndex","polarAreaType","lineDirection","stackedvalue","startvalue","connectPoints","getFirstSeriesIndex","previousSeries","getPreviousSeries","stackSeries","ColumnBase","getSideBySideInfo","enableSideBySidePlacement","getSideBySidePositions","columnWidthInPixel","seriesSpacing","columnSpacing","pointSpacing","minimumPointDelta","groupName","mainColumnWidth_1","mainWidth","mainDoubleRange","getRectangle","drawCylinder","cylinderSeriesOption","gradientColor","cx1","cx2","cy1","cy2","xl","yl","rxt","ryt","gx1","gx2","gy1","gy2","ini","stacking","isLastSeries","rgbaValues","checkColorFormat","AEx","AEy","LX","LY","GX","GY","X1","Y1","X2","Y2","optiong","gradientElement","linearGradientElement","stopElement","findRectPosition","vSeries","updateSymbolLocation","updateYRegion","updateXRegion","getRegion","calculateRoundedRectPath","topLeft","topRight","bottomLeft","bottomRight","columnFacet","visiblePoints_1","animateRect","isPlot","halfValue","BarSeries","sideBySideInfo","pointBar","renderPoint","AccumulationAnnotationSettings","AccumulationDataLabelSettings","PieCenter","AccPoints","labelRegion","labelVisible","isExplode","isClubbed","isSliced","isLabelUpdated","initialLabelRegion","AccumulationSeries","clubbedPoints","sumOfPoints","rightSidePoints","leftSidePoints","dateSource","resultData","getPoints","seriesCounts","findSumOfPoints","sumOfClub","clubValue","groupTo","setPoints","isClub","pushPoints","lastGroupTo","clubPoint_1","generateClubPoint","pointsLength_1","explode","explodeAll","explodeIndex","clubPoint","sliceRadius","groupMode","legendImageUrl","separatorY","setAccEmptyPoint","seriesGroup","renderPoints","findMaxBounds","labelBound","accumulationBound","pieSeriesModule","accumulationLegendModule","explodeDistance","pointId","getSeriesElement","findAreaRect","firstQuarter","secondQuarter","showZero","midAngle","drawDataLabels","dataLabelCallBack","totalbound","pointByIndex","PdfPageOrientation","PdfPageRotateAngle","PdfNumberStyle","PdfDockStyle","PdfAlignmentStyle","TemplateType","AccumulationBase","pieCenter","pieBaseCenter","pieRadius","pieBaseRadius","pieLabelRadius","pieBaseLabelRadius","isCircular","isVariousRadius","isRadiusMapped","processExplode","explodePoints","deExplodeAll","invokeExplode","pointExplode","accumulationSelectionModule","deExplodeSlice","clubPointsExploded","clubPointExplode","getSum","total","explodeSlice","sliceId","setTranslate","setElementTransform","PieBase","initProperties","initAngles","radiusCollection","minRadius","maxRadius","seriesRadius","connectorStyle","labelRadius","explodeOffset","findCenter","defaultLabelBound","totalAngle","getLabelRadius","accumulationRect","getSeriesBound","accumulationRectCenter","getRectFromAngle","nextQuandrant","lastQuadrant","getPathArc","getDoughnutPath","getPiePath","clockWise","innerStart","innerEnd","PieSeries","getPathOption","findSeries","toggleInnerPoint","createBorderEle","accumulationId","srcElem","innerPie","seriousGroup","addSvgClass","borderExplode","removeBorder","curentDegree","currentStartAngle","accBaseModule","groupId","clipslice","StackingBarSeries","stackedValue","pointStack","PolarRadarPanel","visibleAxisLabelRect","drawYAxisLine","vector","setPointerEventNone","labelRegions","isLabelVisible","intersectType","getLabelRegion","inversedRadius","renderRadarGrid","renderTickLine","vector2","minorGirdLine","tickXSize","tickYSize","legendRect","firstLabelX","lastLabelX","textAnchor","trimText","chartWidth","getAvailableSpaceToTrim","labelRect","legendX1","legendX2","labelX1","labelX2","tickOptions","gridOptions","PolarSeries","visiblePoint","columnDrawTypeRender","itemCurrentXPos","pointStartAngle","pointEndAngle","dStartX","dStartY","dEndX","dEndY","arcValue","isRangeColumn","sumofYValues","rangeInterval","getSeriesPosition","series_1","series_2","doPolarRadarAnimation","animateElement","chartcenterX","chartcenterY","circleRotate","ScatterSeries","scatterBorder","isLineShapeMarker","startLocation","currentTempPoint","BubbleSeries","percentChange","maximumSize","bubblePoint","segmentRadius","RadarSeries","NiceInterval","calculateDateTimeNiceInterval","totalDays","actualIntervalType","intervalType","getSkeleton","findCustomFormats","DateTime","datetimeInterval","getYear","getHour","endMinute","endSecond","endYear","endMonth","endDay","endHour","increaseDateTimeInterval","axisLabels","alignRangeStart","blazorCustomFormat","skeletonType","getDecimalInterval","sDate","intervalSize","sResult","decimalValue","sec","milliSec","ColumnSeries","pointColumn","StackingColumnSeries","LineSeries","prevPoint","isDrop","StackingLineSeries","visiblePts","ErrorBar","renderErrorBar","capId","errorbar","errorBarCap","errorX","errorY","capOption","findLocation","midPoint","negativeHeight","positiveHeight","getErrorDirection","calculateFixedValue","calculatePercentageValue","calculateStandardDeviationValue","getMean","meanCalculation","calculateStandardErrorValue","calculateCustomValue","getHorizontalDirection","mid","errorMode","capLength","capDirection","getVerticalDirection","getBothDirection","pathH","pathV","sumOfX","sumOfY","verStandardMean","verSquareRoot","horStandardMean","horSquareRoot","errorBarElements","Trendlines","trendLineSeries","setSeriesProperties","legendShape","connector","createTrendLineElements","trendLineElement","getDataPoint","trendPoint","findSlopeIntercept","xAvg","yAvg","xyAvg","xxAvg","slope","trendlineSeries","setLinearRange","setExponentialRange","setMovingAverageRange","setPolynomialRange","setPowerRange","setLogarithmicRange","splineSeriesModule","yDataValue","slopeIntercept","getExponentialPoints","xLogValue","yLogValue","xPointsLgr","xDataValue","getLogarithmicPoints","xPolyValues","yPolyValues","getPolynomialPoints","powerPoints","getPowerPoints","getLinearPoints","xAvgValues","getMovingAveragePoints","slopeInterceptLog","pts","x1Log","backwardForecast","y1Log","x2Log","y2Log","x3Log","forwardForecast","x3","y3Log","slopeInterceptPower","y3","polynomialOrder","polynomialSlopes","subIndex","numArray","newIndex","nIndex","num2","nIndex2","nnIndex","nnIndex2","gaussJordanElimination","period","slopeInterceptLinear","x1Linear","y1Linear","x2Linear","y2Linear","slopeInterceptExp","ptsExp","getPolynomialYValue","slopes","numArray1","numArray2","numArray3","index1","num1","index2","index3","index4","index5","index4_1","num3","num4","iindex4","iandex4","iindex1","iindex2","SplineBase","splinePoints","lowSplinePoints","lowPoints","realPoints","negativePoint","filterEmptyPoints","isLow","findSplineCoefficients","getPreviousIndex","getControlPoints","getNextIndex","points_2","ySpline","cardinalSplineTension","splineType","monotonicSplineCoefficients","cardinalSplineCofficients","clampedSplineCofficients","naturalSplineCoefficients","interPoint","slopeLength","ySplineDuplicate","dy1","dy2","coefficient1","coefficient2","coefficient3","ySpline1","ySpline2","ySplineDuplicate1","ySplineDuplicate2","xValue1","yValue1","yValue2","one3","deltaX2","SplineSeries","getSplineDirection","pt1","pt2","bpt1","bpt2","points_3","points_4","points_5","points_6","DataLabel","errorHeight","initPrivateVariables","calculateErrorHeight","chartBackground","yAxisInversed","labelLength","labelLocation","isDataLabelOverlap","enableRotation","argsFont","customLabelFormat","median","upperQuartile","lowerQuartile","liers","fontBackground","isDataLabelShape","createDataLabelTemplate","calculateTextPosition","rectRegion","actualRect","isDataLabelOverlapWithChartBound","rgbValue","contrast","vAxis","hAxis","getLabelLocation","locationY","alignmentValue","calculateAlignment","calculateRectPosition","locationX","calculatePathPosition","calculatePolarRectPosition","dataLabelOutRegion","columnRadius","alignmentSign","extraSpace","calculateRectActualPosition","calculateTopAndOuterPosition","seriesLength","nextSeries","nextSeriesPoint","calculatePathActualPosition","isOverLap","finalPosition","actualPosition","updateLabelLocation","yLocation","positionIndex","intersectY","shapeElements","textNode","Category","Legend","legendItemsId_1","visibleSeriesCollection","visibleSeriesCollection_1","extraHeight","extraWidth","verticalArrowSpace","titleSpace","legendEventArgs","columnHeight","titlePlusArrowSpace","getLegendHeight","previousBound","isWithinBounds","availwidth","LegendClick","changeDetection","legendClickArgs","legendText","changeSeriesVisiblity","refreshLegendToggle","redrawSeriesElements","refreshSeries","legendRegion","legendItemsId_2","checkWithinBounds","cRender","canvasRect","canvasPageUp","canvasPageDown","BaseTooltip","getTooltipElement","isTooltip","isStockChart","enable3D","stopAnimation","removeHighlight","highlightPoint","isSelectedElement","highlightPoints","createTooltip","clipLocation","crosshairEnabled","extraPoints","templatePoint","customTemplate","tooltip3DModule","accumulationTooltipModule","svgTooltip","SVGTooltip","findPalette","enableTextWrap","updatePreviousPoint","animationComplete","findColor","valueX","valueY","removeText","toolTipInterval","mouseLeaveHandler","fadeOutMode","fadeOutDuration","findData","disableTrackTooltip","isStockSvg","renderGroupedTooltip","renderSeriesTooltip","findHeader","parseTemplate","findShapes","enableMarker","isPointDragging","triggerTooltipRender","getTooltipText","findMouseValue","tooltipTemplate","pointText","chartTooltipSuccess","location_1","getSymbolLocation","findMarkerHeight","getTemplateText","getBoxLocation","getWaterfallRegion","getRangeArea","formatPointValue","lastData","dataCollection","pointYValue","closestXValue","closetYValue","dataCollection_1","triggerSharedTooltip","toolbarHeight","sharedTooltip","location_2","findSharedLocation","textValue","isXPoint","isYPoint","tooltipFormat","getIndicatorTooltipFormat","textX","data_2","PdfWriter","streamWriter","pdfDocument","overload","tempOverload","defaultToString","ObjectStatus","toStringFunction","nElements","toStr","pair","keysArray","namesOfKeys","pair1","valuesArray","namesOfValues","pair2","InternalEnum","PdfMainObjectCollection","objectCollections","mainObjectCollection","primitiveObjectCollection","isNew","objInfo","ObjectInfo","Registered","lookFor","object","getReference","wasNew","trySetReference","setReference","pdfObject","isSaving","objectCollectionIndex","pdfReference","StreamWriter","encoding","bufferBlob","bufferText","enc","setBomByte","arrayUnicode","uint8","arrayUtf8","utf8","bufferArray","writeLine","PdfDocumentBase","isStreamCopied","PdfDocument","objects","pdfCrossTable","currentSavingObject","pdfCatalog","viewerPreferences","setMainObjectCollection","setCrossTable","cTable","setCatalog","catalog","filename","SW","encoding_1","SW_1","blobData","docSave","PdfName","stringStartMark","internalValue","isSaving6","position6","normalizeValue","status6","index6","escapeString","crossTable","newName","stringValue","delimiters","replacements","Operators","forTest","endObj","slash","newLine","endStream","xref","trailer","startxref","eof","beginText","endText","appendLineSegment","fillEvenOdd","fillStroke","fillStrokeEvenOdd","appendbeziercurve","appendRectangle","saveState","restoreState","paintXObject","modifyCtm","modifyTM","setLineWidth","setLineCapStyle","setLineJoinStyle","setDashPattern","setFlatnessTolerance","closeStrokePath","closeFillStrokePath","setCharacterSpace","setWordSpace","setHorizontalScaling","setTextLeading","setFont","setRenderingMode","setTextRise","setTextScaling","setCoords","goToNextLine","setTextWithFormatting","setTextOnNewLine","selectcolorspaceforstroking","selectcolorspacefornonstroking","setrbgcolorforstroking","setrbgcolorfornonstroking","setcmykcolorforstroking","setcmykcolorfornonstroking","setgraycolorforstroking","setgraycolorfornonstroking","clipPathEvenOdd","setGraphicsState","evenOdd","setMiterLimit","setColorAndPattern","setColorAndPatternStroking","DictionaryProperties","kids","resources","mediaBox","decodeParms","type1","baseFont","subtype","procset","colorSpace","extGState","xObject","bitsPerComponent","dctdecode","blackIs1","predictor","deviceRgb","annot","uri","annots","CA","xyz","BM","flatedecode","bBox","cIDFontType2","cIDToGIDMap","identity","fontDescriptor","cIDSystemInfo","fontBBox","missingWidth","stemV","italicAngle","capHeight","ascent","descent","leading","avgWidth","fontFile2","xHeight","stemH","registry","ordering","supplement","type0","identityH","toUnicode","descendantFonts","antiAlias","function","shadingType","coords","functionType","bitsPerSample","patternType","paintType","tilingType","xStep","yStep","centerWindow","displayTitle","fitWindow","hideMenuBar","hideToolBar","hideWindowUI","pageMode","pageLayout","duplex","printScaling","PdfDictionary","dictionary","position7","primitiveItems","archive","isResource","encrypt","dictionaryProperties","freezeChanges","status7","isSaving7","index7","getArchive","setArchive","setEncrypt","modify","getEncrypt","freezer","bChanged","onBeginSave","beginSave","onFontDictionaryBeginSave","fontDictionaryBeginSave","onDescendantFontBeginSave","descendantFontBeginSave","onTemplateBeginSave","pageBeginDrawTemplate","pageBeginSave","onBeginAnnotationSave","annotationBeginSave","onSectionBeginSave","saveEvent","sectionBeginSave","bRaiseEvent","saveItems","SaveSectionCollectionEventHandler","SaveDescendantFontEventHandler","SaveFontDictionaryEventHandler","SaveSectionEventHandler","SaveTemplateEventHandler","PdfNumber","position5","status5","isSaving5","intValue","floatToString","returnString","PdfArray","startMark","endMark","position9","clonedObject9","isFont","internalElements","tempNumberArray","pdfNumber","status9","isSaving9","index9","markedChange","newArray","fromRectangle","tempElements","markChanged","removeAt","PdfStream","dicPrefix","dicSuffix","clonedObject2","bCompress","dataStream2","bCompress2","clearStream","internalStream","writeBytes","onCmapBeginSave","cmapBeginSave","onFontProgramBeginSave","fontProgramBeginSave","compressContent","byteArray","dataArray","getCompressedString","addFilter","filterName","PdfReferenceHolder","bytesToString","SaveCmapEventHandler","SaveFontProgramEventHandler","SourceType","ForceEncoding","ObjectType","PdfString","bHex","clonedObject1","bDecrypted","isParentDecrypted","isPacked","isFormField","isColorSpace","isHexString","status1","isSaving1","bConverted","bForceEncoding","bytesToHex","Ascii","pdfEncode","stringMark","escapeSymbols","CrossTable","newString","toUnicodeArray","bAddPrefix","hexStringMark","hexFormatPattern","PdfReference","objNumber","genNumber","position3","status3","isSaving3","obj2","position4","objectIndex","status4","isSaving4","primitiveObject","PdfPageMode","PdfPageLayout","DuplexMode","PageScalingMode","PdfBoolean","currentPosition","objectStatus","saving","boolToStr","PdfViewerPreferences","_dictionaryProperties","_centerWindow","_fitWindow","_displayTitle","_splitWindow","_hideMenuBar","_hideToolBar","_hideWindowUI","_pageMode","UseNone","_pageLayout","SinglePage","_dictionary","_duplex","None","_catalog","_mapPageMode","_mapDuplexMode","_mapPageLayout","_pageScaling","AppDefault","Simplex","DuplexFlipShortEdge","DuplexFlipLongEdge","UseOutlines","UseThumbs","FullScreen","UseOC","UseAttachments","OneColumn","TwoColumnLeft","TwoColumnRight","TwoPageLeft","TwoPageRight","PdfHorizontalAlignment","PdfVerticalAlignment","PdfTextAlignment","TextRenderingMode","PdfLineJoin","PdfLineCap","PdfDashStyle","PdfFillMode","PdfColorSpace","PdfBlendMode","PdfGraphicsUnit","PdfGridImagePosition","PdfTextDirection","PdfFontStyle","PdfFontFamily","PdfFontType","PdfWordWrapType","PdfSubSuperScript","FontEncoding","TtfCmapFormat","TtfCmapEncoding","TtfPlatformID","TtfMicrosoftEncodingID","TtfMacintoshEncodingID","FontDescriptorFlags","TtfCompositeGlyphFlags","PdfCatalog","tempDictionaryProperties","_viewerPreferences","PdfCrossTable","maxGenNumIndex","objectCount","merging","internalTrailer","pdfObjects","saveHead","mappedReferences","markTrailerReferences","saveObjects","saveCount","xrefPos","registerObject","saveSections","saveTrailer","saveTheEndess","objectCollection","prevXRef","objectNum","prepareSubsection","saveSubsection","Free","generation","isFree","addOffsetLength","addGenNumberLength","generateFileVersion","bNew","getSubReference","objnumber","nextObjNumber","tempIndex","tempkey","tempvalue","bForceNew","saveIndirectObject","currentSavingObj","doSaveObject","RegisteredObject","dereference","tempOffset","offsetNumber","tempReference","Normal","PointF","SizeF","RectangleF","arg1","arg2","arg3","arg4","pointf","sizef","Rectangle","PdfPageSize","note","legal","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b3","b4","b5","archE","archD","archC","archB","archA","flsa","halfLetter","letter11x17","ledger","PdfMargins","pdfMargin","setMargins","margin1","margin2","margin3","margin4","PdfPageSettings","margins","pageMargins","RotateAngle0","pageOrientation","Portrait","pageOrigin","isRotation","updateSize","Landscape","getActualSize","LineType","PdfStreamWriter","dictionaryName","writeOperator","executeObject","useEvenOddRule","fillStrokePath","fillPath","closeFillPath","textScaling","strokePath","restoreGraphicsState","saveGraphicsState","startNextLine","writePoint","showText","checkTextParam","writeText","setLeading","setTextRenderingMode","renderingMode","setCharacterSpacing","charSpacing","setWordSpacing","wordSpacing","showNextLineText","setColorSpace","temparg1","temparg2","opcode","updateY","string","builder","writeComment","setColorAndSpace","forStroking","setLineDashPattern","patternOffset","setLineDashPatternHelper","tempPattern","miterLimit","setLineCap","lineCapStyle","setLineJoin","lineJoinStyle","appendBezierSegment","arg5","arg6","setColourWithPattern","colours","patternName","PdfColor","color3","color4","assignRGB","filled","redColor","greenColor","blueColor","gray","alpha","maxColourChannelValue","cyanColor","magentaColor","yellowColor","blackColor","assignCMYK","red","green","blue","black","cyan","magenta","yellow","Rgb","rgbToString","GrayScale","grayScaleToString","Cmyk","cmykToString","ifStroking","colour","grayStringsSroke","grayStringsFill","rgbStrings","PdfBrush","PdfSolidBrush","pdfColor","monitorChanges","brush","getResources","currentColorSpace","resetChanges","PdfPen","dashOffsetValue","penDashPattern","pdfDashStyle","Solid","pdfLineCap","pdfLineJoin","penWidth","internalMiterLimit","setBrush","Custom","Dash","Dot","DashDot","DashDotDot","sBrush","pdfBrush","currentPen","dashControl","lineJoin","pen","getPattern","dashOffset","dashPattern","PdfStringFormat","scalingFactor","wordWrapType","Word","internalLineLimit","Top","internalCharacterSpacing","internalWordSpacing","pdfSubSuperScript","internalParagraphIndent","trailingSpaces","isNoClip","initialLineIndent","StringTokenizer","getCharsCount","numSymbols","readLine","peekLine","readWord","peekWord","word","peek","readToEnd","spaces","whiteSpacePattern","PdfStringLayouter","isOverloadWithPosition","arg7","clientSize","doLayout","rectSize","PdfStringLayoutResult","lineResult","lineIndent","getLineIndent","numSymbolsInserted","returnedValue","copyToResult","numInserted","finalizeResult","paragraphIndent","getLineHeight","layoutLineHeight","lineType","FirstParagraphLine","addToLineResult","NewLineBreak","curLine","curIndent","curLineWidth","getWrapType","WordOnly","textRemainder","wordWrap","Character","ln","LayoutBreak","LastParagraphLine","layoutLines","breakType","LineInfo","actualSize","allowPartialLines","lineLimit","expHeight","trimLine","size1","PdfLayoutType","PdfLayoutBreakType","PathPointType","PdfFont","Regular","metrics","Bold","Italic","Strikeout","Underline","fontMetrics","pdfFontInternals","measureString","layoutArea","temparg3","equalsTo","equalsToFont","getInternals","setInternals","internals","applyFormatSettings","realWidth","charSizeMultiplier","syncObject","PdfTransformationMatrix","radDegFactor","transformationMatrix","Matrix","multiply","degreesToRadians","degreesX","degRadFactor","radiansToDegrees","metrixElements","tempMatrix","dispose","ProcedureSets","pdf","imageB","imageC","imageI","TemporaryDictionary","mKeys","mValues","PdfTransparency","PdfAutomaticFieldInfoCollection","automaticFieldsInformation","fieldInfo","automaticFields","PdfGraphicsElement","drawHelper","graphics","bNeedSave","gState","translateTransform","drawInternal","PdfAutomaticField","internalBounds","internalTemplateSize","internalFont","internalBrush","internalPen","internalStringFormat","performDrawHelper","scalingX","scalingY","getFont","stringFormat","PdfAutomaticFieldInfo","getSize","getBrush","getPageFromGraphics","pageNumberFieldLocation","pageNumberField","ByteArray","mPosition","dataView","DataView","getBuffer","writeFromBase64String","readNextTwoBytes","TtfTableInfo","TtfNameTable","TtfNameRecord","TtfHeadTable","TtfMetrics","macStyle","TtfHorizontalHeaderTable","TtfOS2Table","TtfPostTable","TtfLongHorMetric","TtfCmapSubTable","TtfCmapTable","TtfGlyphInfo","compareTo","glyph","TtfLocaTable","TtfAppleCmapSubTable","TtfMicrosoftCmapSubTable","TtfTrimmedCmapSubTable","TtfGlyphHeader","BigEndianWriter","capacity","int32Size","int16Size","int64Size","bufferLength","internalPosition","writeShort","writeInt","i3","i4","writeUInt","buff","writeString","TtfReader","fontData","isTtcFont","isMacTtf","metricsName","isMacTTF","missedGlyphs","tableNames","entrySelectors","macintoshDictionary","microsoftDictionary","internalMacintoshGlyphs","internalMicrosoftGlyphs","readFontDictionary","nameTable","readNameTable","headTable","readHeadTable","initializeFontName","checkPreambula","numTables","tableDirectory","tableKey","readString","lowestPosition","fixOffsets","minOffset","tableKeys","tableInfo","getTable","formatSelector","readUInt16","nameRecords","platformID","encodingID","nameID","unicode","readFixed","fontRevision","checkSumAdjustment","readUInt32","magicNumber","unitsPerEm","created","readInt64","modified","lowestReadableSize","fontDirectionHint","indexToLocalFormat","glyphDataFormat","readHorizontalHeaderTable","ascender","descender","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","metricDataFormat","numberOfHMetrics","readOS2Table","xAvgCharWidth","usWeightClass","usWidthClass","fsType","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","sFamilyClass","readBytes","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","vendorIdentifier","fsSelection","usFirstCharIndex","usLastCharIndex","sTypoAscender","sTypoDescender","sTypoLineGap","usWinAscent","usWinDescent","ulCodePageRange1","ulCodePageRange2","sxHeight","sCapHeight","usDefaultChar","usBreakChar","usMaxContext","readPostTable","underlinePosition","underlineThickness","isFixedPitch","minType42","maxType42","minType1","maxType1","readWidthTable","glyphCount","advanceWidth","lsb","glyphWidth","readCmapTable","tablesCount","subTables","subTable","readCmapSubTable","getCmapEncoding","Macintosh","Microsoft","Unknown","Apple","readAppleCmapTable","readMicrosoftCmapTable","Trimmed","readTrimmedCmapTable","maxMacIndex","glyphInfo","macintosh","addGlyph","Unicode","microsoft","segCountX2","searchRange","entrySelector","rangeShift","segCount","endCount","readUshortArray","reservedPad","startCount","idDelta","idRangeOffset","glyphID","codeOffset","firstCode","entryCount","postScriptName","glyphCode","Undefined","Roman","microsoftGlyphs","macintoshGlyphs","initializeMetrics","horizontalHeadTable","os2Table","postTable","cmapTables","bSymbol","isSymbol","winAscent","macAscent","winDescent","macDescent","fontBox","widthTable","subScriptSizeFactor","superscriptSizeFactor","getGlyph","byteToProcess","getDefaultGlyph","readLocaTable","bShort","updateGlyphChars","glyphChars","locaTable","glyphCharKeys","nextKey","processCompositeGlyph","glyphOffset","glyphHeader","numberOfContours","skipBytes","glyphIndex","MoreComponents","Arg1And2AreWords","WeHaveScale","WeHaveAnXyScale","WeHaveTwoByTwo","generateGlyphTable","newLocaTable","newGlyphTable","activeGlyphs","glyphSize","glyphSizeAligned","nextGlyphOffset","nextGlyphIndex","oldGlyphOffset","oldNextGlyphOffset","glyphTableSize","updateLocaTable","bLocaIsShort","newLocaTableOut","newLocaUpdated","newLocaSize","getFontProgram","locaTableSize","getFontProgramLength","fontProgramLength","writeCheckSums","writeGlyphs","usedTablesSize","nextTableSize","calculateCheckSum","byte1","byte2","byte3","byte4","setOffset","createInternals","bIsLocaShort","isFontPresent","getGlyphChars","charKeys","getAllGlyphs","allGlyphInfo","readFontProgram","convertString","getCharWidth","written","PdfFontMetrics","getAscent","getDescent","getLineGap","clearTypeFonts","clearTypeFontCollection","subSuperScript","SubScript","SuperScript","WidthTable","internalWidthTable","StandardWidthTable","widths","UnicodeTrueTypeFont","nameString","isCompress","isEmbedFont","cmapPrefix","cmapEndCodespaceRange","cmapBeginRange","cmapEndRange","cmapSuffix","fontString","Initialize","ttfReader","internalBuffer","ttfMetrics","fontDictionary","fontProgram","cmap","descendantFont","subsetName","getFontName","createDescendantFont","createCmap","createFontDictionary","createFontProgram","isBold","formatName","createFontDescriptor","systemInfo","createSystemInfo","getDescriptorFlags","getBoundBox","descFonts","usedChars","getDescendantWidth","generateCmap","generateFontProgram","chLen","firstGlyphIndex","lastGlyphIndex","firstGlyphIndexWasSet","widthDetails","middlePart","toHexString","nextRange","FixedPitch","Symbolic","Nonsymbolic","isItalic","ForceBold","isCaseChange","setSymbols","ArabicShapeRenderer","arabicCharTable","alef","alefHamza","alefHamzaBelow","alefMadda","lam","hamza","zeroWidthJoiner","hamzaAbove","hamzaBelow","wawHamza","yehHamza","waw","alefMaksura","yeh","farsiYeh","shadda","madda","lwa","lwawh","lwawhb","lwawm","bwhb","fathatan","superScriptalef","vowel","arabicMapTable","getCharacterShape","doShape","ArabicShape","present","ligature","shapeCount","getShapeCount","Shapes","Ligature","Type","shapeValue","shapeVowel","shapeLigature","shapeShapes","Bidi","indexes","indexLevels","mirroringShapeCharacters","doMirrorShaping","getLogicalToVisualString","rtlCharacters","RtlCharacters","getVisualOrder","setDefaultIndexLevel","doOrder","resultBuilder","sIndex","eIndex","odd","even","pstart","pend","reArrange","types","textOrder","rtlCharacterTypes","LRE","LRO","AL","RLE","RLO","PDF","EN","ES","ET","AN","NSM","BN","WS","ON","charTypes","getCharacterCode","doVisualOrder","characterCodes","setDefaultLevels","setLevels","updateLevels","getEmbeddedCharactersLength","preview","preType","checkNSM","checkEmbeddedCharacters","startType","endType","checkEuropeanDigits","checkArabicCharacters","checkEuropeanNumberSeparator","checkEuropeanNumberTerminator","checkOtherNeutrals","checkOtherCharacters","pst","checkCommanCharacters","validSet","byte","lt","tt","rt","RtlRenderer","openBracket","closeBracket","wordSpace","customLayout","splitLayout","customSplitLayout","getGlyphIndex","glyphs","fontInternal","textDirection","layouted","addChars","ImageFormat","PdfGradientBrush","mbackground","mbStroking","mfunction","mpatternDictionary","mcolorSpace","csValue","colorSpaceToDeviceName","mshading","patternDictionary","mmatrix","resetFunction","getName","resetPatternDictionary","cloneAntiAliasingValue","cloneBackgroundValue","PdfTemplate","writeTransformation","tempSize","templateSize","pdfGraphics","gr","GetResourceEventHandler","PdfGraphics","initializeCoordinates","PdfResources","addType","addSubType","ImageDecoder","sof1Marker","sof2Marker","sof3Marker","sof5Marker","sof6Marker","sof7Marker","sof9Marker","sof10Marker","sof11Marker","sof13Marker","sof14Marker","sof15Marker","mFormat","mbitsPerComponent","mStream","mHeight","mWidth","mImageData","checkIfJpeg","Jpeg","parseJpegImage","imgData","isLengthExceed","readExceededJPGImage","mJpegHeader","getImageDictionary","imageStream","decodedString","imageDataAsNumberArray","compress","getColorSpace","getDecodeParams","decodeParams","isContinueReading","getMarker","skipStream","noOfBytes","markerLength","mPngHeader","GIF_HEADER","BMP_HEADER","PdfUnitConverter","dpi","updateProportionsHelper","convertUnits","convertFromPixels","convertToPixels","proportions","pixelPerInch","horizontalResolution","verticalResolution","PdfImage","imageHeight","imagePhysicalDimension","getPointSize","dpiX","dpiY","ucX","ucY","ptWidth","Pixel","ptHeight","PdfBitmap","imageStatus","loadImage","initializeAsync","decoder","baseDictionary","getNames","primitive","names","sName","generateName","PdfTilingBrush","pdfNames","fonts","requireProcedureSet","procedureSetName","procSets","removeFont","Guid","getNewGuidString","xobjects","savable","transDic","parentXObjects","hasSameImageStream","oldReference","mStroking","mLocation","mDictionaryProperties","PdfPage","mPage","brushStream","mResources","setBox","setObligatoryFields","mTransformationMatrix","tempBrushStream","tempResource","mBox","tileTransform","mGraphics","name1","previousTextRenderingMode","Fill","previousCharacterSpacing","previousWordSpacing","previousTextScaling","procedureSets","isNormalRender","isUseFontSize","isEmfTextScaled","isEmf","isEmfPlus","isBaselineFormat","emfScalingFactor","colorSpaceChanged","isPointOverload","currentColorSpaces","isImageOptimized","graphicsState","istransparencySet","internalAutomaticFields","startCutIndex","canvasSize","pdfStreamWriter","pdfStringLayoutResult","internalMediaBoxUpperRightBound","pageLayer","bStateSaved","currentBrush","currentFont","bCSInitialized","currentStringFormat","drawPdfTemplate","bNeedScale","getTranslateTransform","getScaleTransform","newLocation","drawString","arg8","arg9","temparg4","temparg5","temparg6","temparg7","temparg8","temparg9","checkCorrectLayoutRectangle","drawStringLayoutResult","stateControl","xOffset","yOffset","layer","drawPathHelper","drawRoundedRectangle","_pathPoints","_pathTypes","startFigure","_addArc","CloseSubpath","_drawPath","Alternate","sweepAngle","_getBezierArcPoints","_addArcPoints","Bezier3","pointType","_addPoint","Start","_getLastPoint","Line","lastPoint","e1","fragAngle","numFragments","xcen","ycen","halfAng","kappa","theta0","theta1","cos0","cos1","sin0","sin1","Winding","isPen","isBrush","isEvenOdd","physicalDimension","name_2","setResources","resource","getLineBounds","layoutRectangle","getTextVerticalAlignShift","hShift","getHorizontalAlignShift","shouldJustify","layoutedRectangle","Center","lineAlignment","Middle","Bottom","setLayer","pageSave","performDraw","applyStringSettings","horizontalScalingFactor","resultHeight","remainingString","drawLayoutResult","underlineStrikeoutText","getNextPage","getPages","setClip","tm","getTextRenderingMode","ws","boundsHeight","vAlignShift","ttfFont","lineInfo","hAlignShift","drawUnicodeLine","drawAsciiLine","justifyLine","useWordSpace","Justify","rtlRender","rightAlign","drawUnicodeBlocks","breakUnicodeLine","tokens","token","convertToUnicode","getUnicodeString","xShift","spaceWidth","tokenWidth","converted","boundsWidth","hasWordSpacing","whitespacesCount","justifyStyle","goodWidth","hasSpaces","goodLineBreakStyle","strikeout","linePen","createUnderlineStikeoutPen","vShift","underlineYOffset","strikeoutYOffset","FillStroke","Stroke","ClipFlag","layoutBounds","firstParagraphLine","lastDocumentCS","lastGraphicsCS","initCurrentColorSpace","penControl","brushControl","fontControl","colorspace","lgb","curSubSuper","prevSubSuper","setTransparency","trasparencies","transp","TransparencyData","name_3","clipTranslateMargins","clipArea","scaleTransform","rotateTransform","getRotateTransform","mediaBoxUpperRightBound","cropBox","PdfGraphicsState","textRenderingMode","doRestoreState","pathPoints","pathTypes","fillMode","buildUpPath","constructArcPath","typeValue","pathTypesValuesMask","getBezierPoints","checkFlags","startAng","getBezierArc","pt","numX1","numY1","numX2","numY2","fragAngle1","pointsList","thetaValue0","thetaValue1","transparencyObject","internalTextRenderingMode","internalTextScaling","pdfColorSpace","pdfPen","pdfFont","alphaPen","alphaBrush","blendMode","PdfPageLayer","streamClipPageTemplates","sublayer","contentLength","pdfPage","clipPageTemplates","layerid","layerName","initializeGraphics","PdfPageLayerCollection","sign","oPage","isSame","getActualBounds","pageSettings","PdfCollection","parentLayerCount","optionalContent","PdfPageBase","lPage","parseLayers","firstArgument","secondArgument","addLayer","insertLayer","loadedPage","saveStream","restoreStream","saveData","defLayerIndex","pageDictionary","pdfSection","layers","defaultLayerIndex","layerCollection","PdfAnnotationCollection","alreadyExistsAnnotationError","missingAnnotationException","internalAnnotations","doAdd","setPage","layoutResult","lastPosition","setColor","annotationCollection","defaultLayer","setSection","resetProgress","isProgressOn","getClientSize","drawPageTemplates","containsTemplates","backLayer","drawTemplates","frontLayer","PageAddedEventArgs","PdfSectionPageCollection","PdfDocumentTemplate","leftTemplate","checkElement","topTemplate","rightTemplate","bottomTemplate","evenLeft","evenTop","evenRight","evenBottom","oddLeft","oddTop","oddRight","oddBottom","isEven","EvenLeft","OddLeft","EvenTop","OddTop","getRight","EvenRight","OddRight","getBottom","EvenBottom","OddBottom","pageCollectionIndex","PdfSectionTemplate","rightValue","bottomValue","stampValue","PdfSection","pageAdded","pdfPages","initialSettings","sectionCollection","pagesReferences","pageTemplate","pagesCollection","pointToNativePdf","setPageSettings","PageSettingsState","foreground","documentHeaders","getDocumentTemplates","sectionTemplates","getSectionTemplates","templates","applyDocumentTopTemplate","applyDocumentBottomTemplate","applyDocumentLeftTemplate","applyDocumentRightTemplate","page_1","checkPresence","pageAddedMethod","onPageAdded","document_1","getLeftIndentWidth","getTopIndentHeight","getRightIndentWidth","getBottomIndentHeight","includeMargins","templateWidth","docTemplateWidth","templateHeight","docTemplateHeight","temproaryPages","applyPageSettings","parentSettings","PdfSectionCollection","rotateFactor","sectionHeaders","drawTemplatesHelper","pageRotate","sectionCount","pdfSectionCollection","checkSection","countPages","PdfDocumentPageCollection","pdfPageCollectionIndex","getLastSection","getPageByIndex","sectionStartIndex","numPages","PdfCacheCollection","referenceObjects","pdfFontCollection","getGroup","createNewGroup","tGroup","representative","removeGroup","PdfStandardFontMetricsFactory","getMetrics","Helvetica","getHelveticaMetrics","Courier","getCourierMetrics","TimesRoman","getTimesMetrics","getSymbolMetrics","ZapfDingbats","getZapfDingbatsMetrics","subSuperScriptFactor","helveticaBoldItalicAscent","helveticaBoldItalicDescent","helveticaBoldItalicName","arialBoldWidth","helveticaBoldAscent","helveticaBoldDescent","helveticaBoldName","helveticaItalicAscent","helveticaItalicDescent","helveticaItalicName","arialWidth","helveticaAscent","helveticaDescent","helveticaName","courierBoldItalicAscent","courierBoldItalicDescent","courierBoldItalicName","fixedWidth","courierBoldAscent","courierBoldDescent","courierBoldName","courierItalicAscent","courierItalicDescent","courierItalicName","courierAscent","courierDescent","courierName","timesBoldItalicAscent","timesBoldItalicDescent","timesBoldItalicName","timesRomanBoldItalicWidths","timesBoldAscent","timesBoldDescent","timesBoldName","timesRomanBoldWidth","timesItalicAscent","timesItalicDescent","timesItalicName","timesRomanItalicWidth","timesAscent","timesDescent","timesName","timesRomanWidth","symbolAscent","symbolDescent","symbolName","symbolWidth","zapfDingbatsAscent","zapfDingbatsDescent","zapfDingbatsName","zapfDingbatsWidth","PdfStandardFont","fontFamilyPrototype","encodings","pdfFontFamily","checkStyle","initializeInternals","convert","getCharWidthInternal","stFont","fontFamilyEqual","lineReducer","styleEqual","WinAnsiEncoding","charOffset","isMerging","defaultMargin","isMerge","cacheCollection","documentPageCollection","defaultStandardFont","isCacheEnabled","checkPagesPresence","PdfPageTemplateElement","InitiateBounds","dockStyle","resetAlignment","alignmentStyle","setAlignment","isForeground","currentLocation","pdfTemplate","templateType","updateDocking","dock","canBeSet","TopLeft","MiddleLeft","BottomLeft","TopCenter","TopRight","MiddleRight","BottomRight","BottomCenter","MiddleCenter","getAlignmentBounds","getDockBounds","getSimpleAlignmentBounds","getTemplateAlignmentBounds","actualBounds","convertSign","getSimpleDockBounds","getTemplateDockBounds","ExportUtils","controls","exportToMultiplePage","controlValue","getControlsValue","canvasElements","controlWidth","controlHeight","isDownload","svgData","XMLSerializer","serializeToString","msSaveOrOpenBlob","triggerDownload","exportPdf","doexport","image_1","ctx_1","toBlob","image_2","ctx_2","blobUrl","isMultiPages","controlValues","groupEle","pdfDefaultWidth","pdfDefaultHeight","exactWidth","exactHeight","pdfHeader","pdfFooter","fileType","exportImage","buffers","image1","byteString","intArray","Worksheets","Worksheet","isSummaryRowBelow","showGridLines","HyperLink","Grouping","FreezePane","MergeCell","MergeCells","mergeCell","mCell","intersectingCell","CellStyle","numFmtId","strikeThrough","wrapText","hAlign","Borders","isGlobalStyle","sz","strike","CellXfs","Alignment","CellStyleXfs","CellStyles","xfId","NumFmt","formatCode","mLine","mColor","Rows","Cell","Cells","ValueFormatter","getFormatFunction","CsvHelper","csvStr","formatter","globalStyles","worksheets","parseWorksheet","parseRows","rows_1","parseRow","parseCell","csv","parseCellValue","dwlLink","BlobHelper","getBlob","AutoFilters","Workbook","saveType","currencyString","sharedStringCount","unitsProportions","hyperlinkStyle","mSaveType","mArchive","sharedString","mFonts","mBorders","mStyles","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","drawingCount","imageCount","cellStyle","parserCellStyle","cellStylesIn","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","company","subject","jsonSheet","sheet","mergeCells","mergedCellsStyle","mHyperLinks","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","pageSetup","parserImages","autoFilters","parseFilters","hyperLinks","mergeOptions","applyProperties","sourceJson","destJson","getCellName","getColumnName","strColumnName","iCurrentDigit","titleRowName","titleColName","printTitleName","fromRow","toRow","fromColumn","toColumn","freezePanes","leftCell","columnsLength","rowsLength","rowId","parserRow","insertMergedCellsStyle","rowToInsert","createCell","styleIndex","cellToInsert","refName","grouping","parseGrouping","parseCells","isCollapsed","cellsLength","spanMin","spanMax","cellId","jsonCell","hyperlink","hyperLink","getCellValueType","rId","formula","parseCellType","processMergeCells","spans","GetColors","processColor","colorVal","rgbColors","processCellValue","cellValue","processedVal","processString","subString","subSplit","subSplit_1","applyGlobalStyle","cellType","defStyleIndex","parserBorder","processCellStyle","switchNumberFormat","numFmt","cellStyleXfs","cellXfs","changeNumberFormats","returnFormat","processNumFormatId","compareResult","compareStyle","isNewFont","toCompareStyle","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","toOADate","sstvalue","imagesLength","parserImage","lastRow","lastColumn","horizontalFlip","verticalFlip","blobSaveType","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","sheetName","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveSheetView","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","_h","_j","hLink","saveDrawings","saveSheetRelations","drawings","sheetDrawingString","imgId","pic","updatelastRowOffset","updatelastColumnOffSet","lastRowOffset","lastColOffset","convertBase64toImage","saveDrawingRelations","picture","iCurHeight","iCurRow","iCurOffset","iRowHeight","iSpaceInCell","rowHiddenHeight","iCurWidth","iCurCol","iColWidth","ColumnWidthToPixels","colHiddenWidth","byteStr","drawingRelation","pixels","dDigitWidth","trunc","fileWidth","relStr","paneString","sstStart","updateCellXfsStyleXfs","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","compareFontResult","fontId","fillId","borderId","applyAlignment","numFmtStyle_1","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","saveAlignment","cellXf","alignString","appString","coreString","wbRelation","contentTypeString","sheetsOverride","drawingIndex","xmlString","archiveItem","updatedMergedCellStyles","sCell","eCell","dateToTicks","isLeapYear","timeToTicks","daysTo1899","Export","actualRowCount","requiredValuesLength","histogramSeriesCount","excelExport","workSheets","requiredValues","headerStyle","isRangeNavigator","isAccumulation","createRangeNavigatorExcelSheet","getRequiredValues","getXValue","createExcelSheet","seriesCount","errorBar_1","errorType","xValueLength","additionalCells","axisCount","isYName","isXValue","requiredValuesCount","localIndex","xValuesLength","usedValueCount","usedValueLength","AccumulationChart","animateselected","temIndex","tempcolor","tempindex","tempindex1","currentSeries","datasource","currentSeries_1","entry1","entry2","accPoint","missing","refreshPoints","isIE11Pointer","accumulationMouseMove","accumulationMouseEnd","accumulationMouseStart","accumulationOnMouseClick","accumulationOnDoubleClick","accumulationRightClick","accumulationMouseLeave","accumulationChartKeyDown","accumulationChartKeyUp","accumulationResizeBound","accumulationResize","svgRectElement","centerLabel","hoverTextFormat","updateCenterLabel","enableBorderOnMouseMove","focusTarget","accumulationHighlightModule","createPieSvg","createSecondaryElement","doGrouppingProcess","renderCenterLabel","processSelection","tooltipParent","getSmartLegendLocation","expodeValue","getPieData","parseFormat","dataIndex","isanimate","ypos","maxwidth","centerLabelSize","collectionLength","centerLabelDelay","subTitleOption","findDatalabelVisibility","changeVisibleSeries","refreshElements","neckHeight","neckWidth","AccumulationLegend","titleRect","pageRowWidth","previousRowCount","convertHtmlEntities","totalRowCount","getMaxColumn","maxPageColumn","maxColumnWidth","columns_1","getAvailWidth","prevLegend","textStartLoc","availablewidth","legendBound","getTitleRect","legendByIndex","legendCollections_1","sliceVisibility","sliceAnimate","AccumulationTooltip","tooltipSuccess","getSeriesFromIndex","AccumulationDataLabel","rightSideRenderingPoints","leftSideRenderingPoints","getDataLabelPosition","getLabelDistance","marginValue","labelAngle","enableSmartLabels","getSmartLabel","calculateLabelCollection","areaRect","circular","findPreviousPoint","isOverlapping","isConnectorLineOverlapping","setOuterSmartLabel","labelRadius_1","textTrimming","setPointVisibileFalse","setPointVisibleTrue","textsize","getOverlappedAngle","setSmartLabelForSegments","textRegion","overlapHeight","getEdgeOfLabel","previousstart","previousend","isLineRectangleIntersect","line2","isLinesIntersect","point11","point12","lies","getAngle","getConnectorPath","getConnectorStartPoint","getPerpendicularDistance","getPolyLinePath","controlPoints","getBezierPoint","p0","labelshape","triangleSize","labelOffset","getDatalabelText","getTemplateSize","correctLabelRegion","modifiedPoints","extendedLabelsCalculation","modifiedPoints_1","finalizeDatalabels","location_3","setTemplateStyle","getSaturatedColor","dataLabelClipPath","getLabelBackground","doTemplateAnimation","saturatedColor","halfSidePoints","skipPoints","arrangeLeftSidePoints","isIncreaseAngle","arrangeRightSidePoints","startFresh","angleChanged","checkAngle","rightSideRenderPoints","changeLabelAngle","isOverlapWithNext","decreaseAngle","increaseAngle","leftSideRenderPoints","isOverlapWithPrevious","isRightSide","newAngle","variableR","halfsidePoints","angleDiff","prevAngleDiff","secondPrevPoint","thirdAngleDiff","ChartComponent","chartYValues","chartRender","isPieType","chartModel","chartPrimaryXAxis","chartPrimaryYAxis","parseChartLegend","dataInfo","canvasContext","officeChartType","seriesData","seriesValue","writeChartSeries","chartFormat","parseDataLabels","errorBarData","parseErrorBars","trendLinesData","parseTrendLines","dataLabelPosition","dataPoints","chartCategoryType","checkAndSetAxisValue","calculateMajorUnit","MIN_VALUE","roundToNiceNumber","log10","pow10","frac","plotValue","chartPlotData","seriesDataPoints","SfdtReader","commentStarts","commentEnds","revisionCollection","isPageBreakInsideTable","referedRevisions","isParseHeader","isCutPerformed","isHtmlPaste","editableRanges","isPastingContent","convertJsonToDocument","incrementalOperations","optimizeSfdt","parseFontSubstitutionTable","parseDocumentProtection","skipSettingsOps","getCompatibilityMode","documentSettings","parseAbstractList","parseList","parseStyles","parseComments","parseRevisions","parseImages","parseSections","parseCustomXml","parseFootnotes","parseEndtnotes","parseThemes","generalizeRevisions","removeUnmappedBookmark","bookmarkKeys","endBookmark","tempRevisionCollection","tempRevisons","parseBody","xmlData","getProtectionType","revisionData","parseRevision","revisionCheck","sfdtExportModule","copyWithTrackChange","checkAndApplyRevision","keyIndex","remotePasteRevision","commentData","commentElement","parseComment","parseCommentText","parseCommentMentions","isFieldDisplayText","mention","EmailId","resetKeyIndex","wStyle","getStyleType","basedStyle","getStyle","styleString","linkStyle","charaStyle","nextStyleString","abstract","parseListLevel","getFollowCharacterType","listCollection","parseLevelOverride","parseSectionFormat","parseHeaderFooter","parseTextBody","hfs","oddHeader","oddFooter","evenHeader","evenFooter","firstPageHeader","firstPageFooter","addCustomStyles","isFootnoteEndnote","hasValidElmts","parseParagraph","previousData","parseTable","blockStartContentControl","blockEndContentControl","parseContentControlProperties","parseTableFormat","parseTablePositioning","parseRowFormat","parseCellFormat","cellStartContentControl","cellEndContentControl","rowStartContentControl","rowEndContentControl","getTableVerticalPosition","getTableVerticalRelation","getTableHorizontalPosition","getTableHorizontalRelation","parseRowGridValues","getWidthType","wContentControlProperties","getContentControlAppearance","getContentControlType","getDateCalendarType","getDateStorageFormat","contentControlListItem","parseSymbol","characterCode","fontIndex","sizeIndex","writeInlineFormat","isContentControl","out_i_1","trackChange","isCreateTextEleBox","isCreateField","applyCharacterStyle","insertRevision","getFootnoteType","chartGapWidth","chartOverlap","parseChartTitleArea","parseChartArea","parseChartData","parseChartCategoryAxis","parseChartDataTable","validateImageUrl","pasteImageIndex","imgStr","crossOrigin","imageUrlString","getVerticalOrigin","getShapeVerticalAlignment","getHorizontalOrigin","getShapeHorizontalAlignment","getTextWrappingStyle","getTextWrappingType","parseFormFieldData","fieldTextElement","containsFieldBegin","bookmarkStart","isConsider","permEnd","permStart","parseEditableRangeStart","commentID","commentStartElement","commentEndElement","isZeroHeight","getAutoShapeType","getLineFormatType","getLineDashStyle","inlineStartContentControl","inlineEndContentControl","sourceData","getTextFormFieldType","getTextFormFieldFormat","getCheckBoxSizeType","elementbox","addEditRangeCollection","newEditStartCollection","titleArea","chartfontName","chartFontSize","parseChartDataFormat","parseChartLayout","chartLayout","chartLayoutLeft","chartLayoutTop","chartLegendPostion","categoryAxis","primaryAxis","categoryAxisType","categoryNumberFormat","isAutoInternal","axisFontSize","axisFontName","categoryAxisTitle","dataTable","showSeriesKeys","hasHorzBorder","hasVertBorder","hasBorders","chartForeColor","yAxisValue","bubbleSize","parseChartSeries","firstSliceAngle","doughnutHoleSize","parseChartDataLabels","markerStyle","markerColor","errorEndStyle","parseChartTrendLines","parseChartSeriesDataPoints","isLegendKey","isBubbleSize","isCategoryName","isSeriesName","isValue","isPercentage","isLeaderLines","trendLineName","trendLineType","forwardValue","backwardValue","interceptValue","isDisplayEquation","isDisplayRSquared","sourceFormat","parseBorders","parseShading","getTableAlignment","getHorizontalPositionAbs","isSamePaddingAsTable","parseCellMargin","getCellVerticalAlignment","getHeightType","sourceBorders","destBorder","parseBorder","sourceBorder","getLineStyle","sourceShading","destShading","getTextureStyle","inlineFormat","getBaseAlignment","getUnderline","getStrikethrough","isFontInstalled","getHighlightColor","monoWidth","sansWidth","serifWidth","defaultWidth","parseFontScheme","fontSchemeName","parseMajorMinorFontScheme","fontList","getLineSpacingType","getTextAlignment","getOutlineLevel","parseListFormat","parseTabStop","getFootEndNoteNumberFormat","restartIndexForFootnotes","getFootnoteRestartIndex","restartIndexForEndnotes","newCol","parseColumns","wCols","wTabs","getTabJustification","imagestr","cellVerticalAlignment","followCharacterType","styleType","footnoteRestartIndex","footEndNoteNumberFormat","shapeVerticalAlignment","shapeHorizontalAlignment","tableRelation","tableVerticalPosition","lineDashStyle","textFormFieldType","textFormFieldFormat","checkBoxSizeType","contentControlAppearance","contentControlType","SelectionCharacterFormat","boldIn","italicIn","underlineIn","strikeThroughIn","baselineAlignmentIn","highlightColorIn","fontSizeIn","fontColorIn","allCapsIn","notifyPropertyChanged","renderedFontFamilyIn","fontFamilyIn","isCleared","isRetrieveFormatting","propertyValue","onApplyCharacterFormat","combineFormat","canRetrieveNextCharacterFormat","selectionCharacterFormat","SelectionBorder","borderType","colorIn","lineStyleIn","lineWidthIn","shadowIn","spaceIn","applyParagraphBorders","SelectionBorders","SelectionParagraphFormat","leftIndentIn","rightIndentIn","beforeSpacingIn","afterSpacingIn","spaceAfterAutoIn","spaceBeforeAutoIn","textAlignmentIn","outlineLevelIn","firstLineIndentIn","lineSpacingIn","lineSpacingTypeIn","bidiIn","keepWithNextIn","keepLinesTogetherIn","widowControlIn","contextualSpacingIn","listLevelNumberIn","bordersIn","validateLineSpacing","levelPattern","listTextElement","getListTextElementBox","onApplyParagraphFormat","onApplyListInternal","copyToFormat","getList","currentAbstractList","cloneListLevel","cloneLevelOverride","setList","isListDialog","onApplyList","history_1","setOffsetValue","updateListChangesInHistory","updateListParagraphs","applyListChanges","updateSelectionTextPosition","SelectionHeaderFooter","linkToPreviousIn","getPropertyvalue","removeInlineHeaderFooterWidget","linkToPrevious","SelectionSectionFormat","differentFirstPageIn","differentOddAndEvenPagesIn","firstPageHeaderIn","firstPageFooterIn","oddPageHeaderIn","oddPageFooterIn","evenPageHeaderIn","evenPageFooterIn","pageHeightIn","pageWidthIn","leftMarginIn","bottomMarginIn","topMarginIn","rightMarginIn","headerDistanceIn","pageStartingNumberIn","restartPageNumberingIn","footerDistanceIn","endnoteNumberFormatIn","footNoteNumberFormatIn","initialFootNoteNumberIn","initialEndNoteNumberIn","restartIndexForFootnotesIn","restartIndexForEndnotesIn","equalWidthIn","lineBetweenColumnsIn","columnsIn","onApplyColumnFormat","breakCodeIn","selectCol","SelectionColumnFormat","headerFootersColletion","isLinkedToPrevious","oddPageHeader","oddPageFooter","evenPageHeader","evenPageFooter","applyColumnFormat","onApplySectionFormat","SelectionTableFormat","backgroundIn","tableAlignmentIn","cellSpacingIn","preferredWidthIn","tableIn","titleIn","descriptionIn","preferredWidthTypeIn","onApplyTableFormat","SelectionCellFormat","verticalAlignmentIn","onApplyTableCellFormat","clearCellFormat","SelectionRowFormat","heightIn","heightTypeIn","isHeaderIn","allowRowBreakAcrossPagesIn","onApplyTableRowFormat","clearRowFormat","SelectionImageFormat","updateImageFormat","applyImageAlternativeText","onImageFormat","copyImageFormat","clearImageFormat","widthIn","HtmlExport","prevListLevel","isOrdered","fieldCheck","writeHtml","isOptimizeSfdt","serializeImages","serializeSection","listCloseCount","serializeParagraph","closeList","serializeTable","blockStyle","isPreviousList","tagAttributes","getHtmlList","serializeParagraphStyle","createAttributesTag","getStyleName","serializeInlines","endTag","levelNumer","serializeContentInlines","serializeImageContainer","serializeInlineStyle","serializeSpan","inlineStyle","spanClass","decodeHtmlNames","imageStyle","imageSource","serializeCell","cellHtml","cellAlignment","convertVerticalAlignment","serializeCellBordersStyle","createTableStartTag","serializeRow","createTableEndTag","createRowStartTag","paragraphClass","serializeCharacterFormat","serializeParagraphFormat","serializeTableBorderStyle","serializeBorderStyle","borderPosition","convertBorderLineStyle","serializeTextDecoration","tagValue","localProperties","createTag","tableStyle","serializeTableWidth","createRowEndTag","htmlText","TextPosition","isUpdateLocation","getStartOffset","getLineLength","getHierarchicalIndexInternal","containsRtlText","setPositionForSelection","physicalLocation","isLastRenderedInline","getParagraphLength","setPositionFromLine","positionAtStart","updatePhysicalPosition","setPositionInternal","setPositionForCurrentIndex","getParagraphWidget","value1","moveNextLine","isAtSamePosition","isInSameParagraphIndex","isInSameParagraph","isInSameListParagraph","startParagraph","endParagraph","offsetInLine","setPositionForLineWidget","getNextRenderedBlock","prevLine","currentOffSet","moveNextPosition","getNextStartInline","moveNextPositionInternal","fieldEndOffset","fieldEndIndex","isForwardSelection","moveToInline","getNextValidOffset","nextValidInline","getNextValidElement","getStartLineOffset","inlineObj","updateOffsetToNextParagraph","moveToPreviousParagraphInTable","getPreviousSelectionCell","isHighlight","getNextSelectionBlock","getContainerCellOf","getNextParagraphBlock","updateOffsetToPrevPosition","inlineInfo","getPreviousSelectionBlock","previousInline","getPreviousValidElement","moveToNextParagraphStartInternal","movePreviousPosition","movePreviousPositionInternal","hasValidInline","moveBackward","nextInline","getNextRenderedElementBox","fieldBeginOffset","moveForward","fieldBeginIndex","selectionStartIndex","selectionStartInlineObj","selectionStartInline","inlineObj_1","moveToWordStartInternal","getPreviousWordOffset","calculateOffset","getNextWordOffset","isInField","endSelection","excludeSpace","getNextWordOffsetSpan","getNextWordOffsetImage","getNextWordOffsetFieldBegin","getNextWordOffsetFieldSeparator","getNextWordOffsetFieldEnd","getNextWordOffsetComment","spaceCharacter","isSpaceCharacter","nextNodeText","getPreviousWordOffsetSpan","getPreviousWordOffsetImage","getPreviousWordOffsetFieldBegin","getPreviousWordOffsetFieldSeparator","getPreviousWordOffsetFieldEnd","getPreviousWordOffsetBookMark","getPreviousWordOffsetComment","previousNodeText","setPreviousWordOffset","validateForwardFieldSelection","selectionEndIndex","isPositionMoved","validateBackwardFieldSelection","isSelectParaMark","paragraphStartInternal","moveToPreviousParagraph","moveToNextParagraphInTableCheck","paragraphValue","moveToParagraphStartInternal","moveToParagraphEndInternal","moveToNextParagraph","moveToNextParagraphInTable","moveToLineStartInternal","getFirstCellInRegion","lastParagraph","prevBlock","getLastBlockInLastCell","getLineWidgetParagraph","upDownSelectionLength","getLastCellInRegion","updateTextPositionWidget","moveToLineEndInternal","getFirstBlockInFirstCell","moveToPreviousLine","getFirstElementInternal","prevInline","isCellSelected","moveToWordEndInternal","incrementValue","getNextSelectionCell","moveUpInTable","lineStart","isMoveToLineEnd","moveDownInTable","firstItemWidth","top_2","isPositionUpdated","isBackwardSelection","containerCell","getSelectedCell","isInContainerCell","containsCell","isContainerCellSelected","isAtParagraphStart","getContainerCell","SelectionWidgetInfo","Hyperlink","fieldBeginAdv","linkInternal","localRef","opensNewWindow","isCrossRefField","screenTipText","lowercase","parseFieldValues","typeInternal","isHyperlink","parseFieldValue","isLocalRef","hyperlinkRef","setLinkType","endChar","navigationLink","ImageSizeInfo","imageContainer","alternatetext","Selection","isSkipLayouting","contextTypeInternal","skipFormatRetrieval","isModifyingSelectionInternally","isMoveDownOrMoveUp","isEndOffset","skipEditRangeRetrieval","isHighlightEditRegionIn","isHighlightContentControlEditRegionIn","isHighlightFormFields","isHightlightEditRegionInternal","isCurrentUser","isHighlightNext","isWebLayout","contentControlHighlighters","isSelectList","isFormatUpdated","currentFormField","pasteOptions","applyPasteOptions","applyTablePasteOptions","characterFormatIn","paragraphFormatIn","rowFormatIn","cellFormatIn","tableFormatIn","imageFormatInternal","onHighlight","onHighlightContentControl","htmlWriterIn","startInternal","endInternal","selectionStartPage","selectionEndPage","isFootNoteParagraph","isEndNoteParagraph","getHierarchicalIndexByPosition","getSelBookmarks","writeSfdt","getFieldInfo","getFieldResultText","getContainerWidget","isFootEndNoteParagraph","bookmrkStart","bookmrkEnd","bookmarkCln","selectedCells","getSelectedCells","bmStartPos","getElementPosition","bmEndPos","bmEndPosCell","getCellInTable","checkLayout","goToHeader","enableHeadersFootersRegion","goToFooter","closeHeaderFooter","disableHeaderFooter","goToPage","updateTextPositionForBlockContainer","selectTable","enableSelection","selectTableInternal","selectRow","selectTableRow","selectColumn","selectColumnInternal","selectCell","selectTableCell","selectionSettings","startOrEnd","pageCoordinates","selectByHierarchicalIndex","fieldStart","selectFieldInternal","selectContentControlInternal","endoffset","isKeyBoardEvent","isReplacingFormResult","triggerFormFillEvent","selectContentInternal","toggleBold","toggleItalic","toggleAllCaps","toggleUnderline","toggleStrikethrough","toggleHighlightColor","toggleSubscript","toggleSuperscript","toggleTextAlignment","increaseIndent","decreaseIndent","navigateHyperlink","fireRequestNavigate","linkType","localReference","navigateBookmark","copyHyperlink","hyperLinkField","linkText","getLinkText","copyToClipboard","isHideSelection","bodyWgt","pageHt","headerFooterHt","highlightSelection","isSelectionChanged","hideImageResizer","showResizerForShape","highlightSelectedContent","createHighlightBorder","isElementBoxHighlight","startTextPos","endTextPos","selectionWidget","selectionWidgetCollection","isHighlightContentControlEditRegion","addEditRegionHighlight","addFormFieldHighlight","getWrapPosition","selectionWidgetInfos","splitSelectionHighlightPosition","addContentControlEditRegionHighlight","getPageTop","clipSelection","startLeft","clipInfo","editRegionHighlight","userColor","formFieldHighlight","createHighlightBorderInsideTable","isVisiblePage","widgetInfoCollection","selectedWidgetInfo","copyInsertFormat","heightInfo","selectedWidgetInfoCollection","removeSelectionHighlight","selectedWidgetCollection","pageRect","selectCurrentWordRange","selectLine","moveToLineStart","handleShiftEndKey","moveToDocumentStart","handleControlHomeKey","moveToDocumentEnd","handleControlEndKey","moveToParagraphStart","moveToParagraphEnd","moveToNextCharacter","handleRightKey","moveToPreviousCharacter","handleLeftKey","wordStart","extendToParagraphStart","extendToParagraphEnd","updateForwardSelection","getFormFieldInFormFillMode","selectPrevNextFormField","nextFootnote","indexCount","nextFootnoteElement","referenceElement","previousFootnote","nextEndnote","endNoteElement","endnoteElement","previousEndnote","updateBackwardSelection","extendToPreviousLine","extendToLineEnd","extendToLineStart","beforeUp","isMultiColumn","afterUp","beforeDown","afterDown","firstrow","firstcell","selectionLength","isMovePrevious","cellStart","getCellLeft","cellEnd","cellLeft","lastCell","moveToLineEnd","isMouseLeave","getDocumentStart","getDocumentEnd","documentEnd","handleControlLeftKey","extendToWordStartInternal","handleControlRightKey","extendToWordEndInternal","handleControlDownKey","handleControlUpKey","handleShiftLeftKey","extendBackward","handleShiftUpKey","handleShiftRightKey","extendForward","handleShiftDownKey","extendToNextLine","handleControlShiftLeftKey","isCurrentParaBidi","handleControlShiftUpKey","handleControlShiftRightKey","handleControlShiftDownKey","handleUpKey","handleEndKey","handleHomeKey","handleDownKey","handleShiftHomeKey","handleControlShiftEndKey","handleControlShiftHomeKey","handleSpaceBarKey","handleTabKey","isNavigateInCell","isShiftTab","isCursorAtParaStart","isCursorAtLineStart","selectPreviousCell","selectNextCell","isFirstParaForList","updateListLevelIndent","updateListLevel","handlePageUpPageDownKey","isPageDown","isSameScrollTop","currentStart","isInlineFormFillProtectedMode","selectTextElementStartOfField","isKeyBoardNavigation","previousFieldData","currentFieldData","previousField","currentField","applyFormTextFormat","selectTableCellInternal","clearMultiSelection","firstParagraph","selectParagraphInternal","firstLineWidget","firstPara","getTableRevision","getAbsolutePositionFromRelativePosition","columnCells","startCellColumnCells","endCellColumnCells","pageLength","endNotes","extendToWordStartEnd","extendToWordStart","extendToWordEnd","getTextPosition","includeObject","getTextInternal","startInlineObj","elementInfo","getRenderedInline","endInlineObj","endInline","getTextInline","nextParagraphWidget","hfString","getParagraph","getLineInfoBasedOnParagraph","getLineInfo","getParagraphInternal","getHeaderFooterWidget","getFootNoteWidget","getBodyWidgetInternal","getBlockByIndex","getParagraphInfoInternal","getCellFromSelection","hasMergedCells","tableIndex","getCellFromSelectionInTable","requiredRow","requiredCol","getCellBoundsInfo","sortedRowIndexArray","sortedColumnIndexArray","rowLast","colLast","isRequiredCellExist","widget_1","rowFirst","colFirst","widget_2","getActualOffset","paraElement","getBookmarkProperties","isParagraphMarkSelected","isAfterParagraphMark","isAfterCellMark","isTableSelected","isAfterTableMark","isRowSelected","isAfterRowMark","paraLength","endIndices","lineOffset","currentList","endParagraphWidget","isSkipTrim","getFieldCodeInternal","getTocFieldInternal","getNextParagraph","getPreviousParagraph","getPreviousTextInline","getNextTextInline","isElementInSelection","isEnd","elemPosition","isSelectionInsideElement","cell1","cell2","isExistBeforeInline","currentInline","isExistAfterInline","isRetrieve","getPreviousRenderedBlock","getNextParagraphCell","getFirstBlockInNextHeaderFooter","getLastBlockInPreviousHeaderFooter","getPreviousParagraphCell","endLine","includeShape","childLength","getElementInfo","getPreviousParagraphSelection","getPreviousSelectionRow","getNextParagraphSelection","getNextSelection","getNextSelectionRow","getPreviousSelection","selLength","isMovePrev","validOffset","maxBaselineOffset","getPhysicalPositionInline","highlightCell","startInline","elementBoxObj","getElementBoxInternal","positionImageResizer","showImageResizer","highlightNextBlock","hightLightNextParagraph","startElement","endElement","endLineWidget","startLineObj","getStartLineWidget","endLineObj","getEndLineWidget","elementCollection","getElementsForward","elementIsRTL","paragraphMarkWidth","highlightParagraph","elementBoxCollection","highlightTable","getLineWidgetInternalInline","linewidget","highlightCells","endCellLeft","endCellRight","tableWidgetCollection","startTableIndex","endTableIndex","highlightRow","endRowIndex","highlightInternal","getNextParagraphRow","getPreviousParagraphRow","containsRow","highlightCellWidget","sourceCell","getLevelFormatNumber","highlightContainer","previousValidInline","validateTextPosition","getElementBox","getFieldCharacterPosition","handledEnter","getNextLineWidget","measureObj","firstInline","bookmarkElement","getRenderedField","elementObj","getCaretHeight","isEmptySelection","getFieldCharacterHeight","heightElement","maxLineHeight","charHeight","isNonEmptySelection","clearChildSelectionHighlight","clearSelectionHighlightLineWidget","isGetFirstChild","floatWidget","floatWidgetWidth","getLineWidgetTableWidget","selectionBody","footChild","getLineWidgetParaWidget","lineTotalHeight","getElementsBackward","getLineWidgetRowWidget","leftCellSpacing","rightCellSpacing","topCellSpacing","bottomCellSpacing","getLineWidgetCellWidget","getFirstBlock","caretPosition","comparePageWidthAndMargins","isImageSelectedObj","includeParagraphMark","elementValues","prevWidth","getTextLength","textMetrics","isLineEnd","renderedElement","renderedChild","getIndexInInline","renderedWidget","widgetInternal","childLen","selectFirstBlock","skipSelectionChange","retrieveCurrentFormatProperties","hideToolTip","fireSelectionChange","retrieveImageFormat","retrieveCharacterFormat","retrieveParagraphFormat","retrieveSectionFormat","retrieveTableFormat","setCurrentContextType","imageFormat","getPreviousContextType","getContextElement","getNextContextType","contextIsinImage","contextIsinTable","getCurrentRevision","isInHeader","addItemRevisions","hasRevisions","eleEndPosition","startPara","nextOffsetElement","processLineRevisions","getselectedRevisionElements","acceptReject","toAccept","getSelectedLineRevisions","addRevisionsCollec","eleStartPosition","revisCollec","tableAdv","retrieveCellFormat","retrieveRowFormat","getCellFormat","getRowFormat","tempTableRow","endTable","startParaSection","endParaSection","startPageIndex","endPageIndex","getParagraphFormatForSelection","getParagraphFormatInternalInParagraph","getParagraphFormatInternalInBlock","getParagraphFormatInternalInCell","getParagraphsInSelection","paragraphsInSelection","getParagraphFormatInternalInTable","getParagraphFormatInCell","getParagraphFormatInBlock","getParagraphFormatInParagraph","getParagraphFormatInTable","cellAdv","getParagraphFormatInRow","getParaFormatForCell","startCellIn","endCellIn","elemInfo","getCharacterFormatForSelection","getCharacterFormatInTableCell","getCharacterFormat","getCharacterFormatForTableRow","tableRowAdv","getCharacterFormatForSelectionCell","getCharacterFormatForBlock","getCharacterFormatInternalInTable","getCharacterFormatInternal","setCharacterFormat","inlineAndIndex","getNextValidCharacterFormatOfField","getNextValidCharacterFormat","getCharacterFormatInTable","top_4","widgetIn","copySelectionParagraphFormat","getHyperlinkDisplayText","isNestedField","copyAddress","screenTip","isCrossRef","toolTipElement","screenTipElement","toolTipTextElement","toolTipText","getScreenTipText","showToolTip","toolTipField","toolTipObject","positions","toolTipInfo","lastCellInRow","createPasteElement","currentPasteAction","pasteElement","pasteDropDwn","splitButtonEle","cursorPosition","lineStartLeft","checkedFields","getHyperLinkFields","getHyperLinkFieldInternal","lineStartInLeft","leftLength","checkFormField","isParagraph","paragraphIsInFieldResult","inlineIsInFieldResult","getBlock","bodyIndex","getBlockInternal","fieldParagraph","isReferenceField","checkFieldResult","fieldEndElement","nestedTable","selectionIndex","highlightListText","updateImageSize","getSelectedCellsInTable","startColumnIndex","endColumnIndex","startRowindex","copySelectedContent","isCut","getHtmlContent","handleCut","documentContent","copiedData","isOptimizedSfdt","htmlWriter","htmlBlob","textBlob","clipboard","hasFocus","ClipboardItem","copyExecCommand","shadowRoot","isSafariOnMac","vendor","isMobileDeviceOrInternetExplorer","attachShadow","selectNodeContents","copySuccess","execCommand","enableCursorOnReadOnly","caretLeft","caretStartLeft","caretEndLeft","top_5","skipUpdate","paragraphInfo","caretHeightInfo","insertText","toggleShowHiddenMarksInternal","showNavigationPane","isCommentOnlyMode","searchResults","pagePoint","isCursorInHeaderRegion","shiftBlockOnHeaderFooterEnableDisable","parentHFWidget","currentHFWidget","parentSectionFormat","currentSectionFormat","bodywidget","shiftPageContent","getCellsToSelect","cellArray","selectBookmarkInTable","moveToStart","excludeBookmarkStartEnd","bookmrkElmnt","selectBookmark","getTocField","tocPara","isTocStyle","commentNavigateInternal","navigatePreviousRevision","navigateNextRevision","firstCell","curentPosition","firstElementTable","lastElementTable","secondRowWidget","updateEditRangeCollection","everyOneArea","highlightEditRegion","unHighlightEditRegion","highlightContentControlEditRegionInternal","positionInfo","highlightEditRegionInternal","highlightEditRegions","sortEditRangeCollection","nextPosition","firstPosition","toggleEditingRegionHighlight","isSelectionInEditRegion","isSelectionInsideEditRange","editRangeRow","isEditRangeCellSelected","editRangeCell","isXmlMapped","contentControlStart","cCstart","cCend","cCStartInsideSelction","cCEndInsideSelction","updateRefField","bookmarkId","bookmarkEnd","pasteContents","tr","tablerow","tablecell","paragr","getPositionInfoForHeaderFooter","getPositionInfoForBodyContent","tableBlock","getBlockIndex","getBlockIndexFromHeaderFooter","headersFooters_1","currentHeaderFooter","fieldResult","getBlockOffsetByElement","getBlockLength","getBlockTotalLength","targetBlock","isDropdown","completed","skipShapeElement","childBlock","calculateCellLength","getTableRelativeValue","isRowSelect","length_3","table_1","row_2","Comment","commentProperties","ModifiedLevel","ownerListLevelIn","modifiedListLevelIn","ownerListLevel","modifiedListLevel","ModifiedParagraphFormat","ownerFormat","modifiedFormat","ownerFormatIn","modifiedFormatIn","RowHistoryFormat","rowHeightType","tableHierarchicalIndex","revertChanges","isRedo","currentRowHeightType","TableHistoryInfo","TableFormatHistoryInfo","copyProperties","RowFormatHistoryInfo","CellFormatHistoryInfo","BaseHistoryInfo","cellOperation","splittedRevisions","isRemovedNodes","modifiedFormatOperation","revisionOperation","ownerIn","modifiedPropertiesIn","modifiedNodeLength","removedNodesIn","insertedNodes","actionIn","insertedText","deleteColumnOperation","createAcceptRejectOperation","selectionStartIn","selectionEndIn","insertPositionIn","endPositionIn","updateCollaborativeSelection","startEdit","updateTableSelection","paraInclude","splitOperationForDelete","paragrapthInfo","PasteLength","tableStart","getDeleteOperation","pasteContent","getPasteOpertion","setBookmarkInfo","setContentControlInfo","setFormFieldInfo","setEditRangeInfo","revertFormTextFormat","applyTextFormatInternal","recordChanges","revertFormField","revertContentControl","contentControlInfo","contentcontrol","removeContentControlInternal","revertBookmark","bookmarkInfo","deleteBookmarkInternal","revertComment","insertPosition","resolveOrReopenComment","modifiedCommentObject","insertedElement","addReplyComment","addCommentWidget","getCommentElementBox","deleteCommentWidget","revertEditRangeRegion","editRangeInfo","updateRangeCollection","removeUserRestrictionsInternal","listNumberFormat","currentListLevelPattern","currentNUmberFormat","selectionStartTextPosition","selectionEndTextPosition","collabStart","collabEnd","revertModifiedProperties","deletedNodes","editModule","insertTextPosition","endTextPosition","isLastChild","getLastParaForBodywidgetCollection","endRevisionLogicalIndex","lastElementRevision","updateEndRevisionInfo","undoRevisionForElements","changeSelectedTextCase","isRemoveContent","isDeletecell","combineSectionInternal","skipDelete","removeSelectedContents","isRedoAction","revertModifiedNodes","removeContent","isDelete","checkAdjacentNodeForMarkedRevision","retrieveEndPosition","markedNode","revertResizing","revertTableDialogProperties","revertProperties","redoAction","singleBackspace","singleDelete","deleteTable","deleteColumn","deleteRow","mergeSelectedCellsInTable","insertColumn","insertSection","autoFitTable","isSkipTracking","insertTableInternal","insertRemovedNodes","insertBlock","initialStart","insertNewParagraphWidget","skipinsert","firstNode","insertInlineInSelection","updateNextBlocksIndex","insertBlockTable","wiget","endWidget","insertRevisionForBlock","endPara","startoffset","isSamePara","isSplittedWidget","applyRevisionForCurrentPara","prevTableHistoryInfo","tableHistoryInfoCurrent","updateGridValue","currentPropertyIndex","updateCellMargins","tableOptionsDialogModule","applyTableOptionsHelper","addModifiedPropertiesForSection","previousFormat","addModifiedProperties","skipRemove","prevLength","nextFormat","buildCharacterFormatOperation","characterData","addModifiedPropertiesForParagraphFormat","getParagraohFormatOperation","insertedFormat","getActionInfo","addModifiedPropertiesForContinueNumbering","addModifiedPropertiesForRestartNumbering","addModifiedPropertiesForList","previousLevel","updateListCharacterFormat","updateSelectionCharacterFormatting","revertContinueNumbering","updateSelectionParagraphFormatting","setPreviousBlockToLayout","updateHeaderFooters","updateSectionFormat","restartListAtInternal","modifiedLevel","updateListChanges","updateTableFormat","updateCellFormat","updateRowFormat","styleObject","updateStyleObject","addModifiedCellOptions","applyFormat","copyCellOptions","addModifiedTableOptions","copyTableOptions","getCharacterPropertyValue","addModifiedTableProperties","previousTableFormat","addModifiedRowProperties","rowData","assignRowFormat","addModifiedCellProperties","recordInsertRevisionDeletetion","retrieveRevisionInOder","getFormatOperation","isAllRevision","getRemovedText","getDeleteOperationsForTrackChanges","operations","checkValidRevision","revisionId","endIndex_1","getDeleteOperationForTrackChanges","getRevision","isInvertOperation","dropDownIndex","deleteOperation","operationCollection","getDeleteContent","getInsertOperation","revisionForFootnoteEndnoteContent","operation2","getElementAbsolutePosition","getUndoRedoOperation","tableRowOperation","buildTableRowCellOperation","tableCellOperation","getUpdateOperation","getCommentOperation","getRevisionOperation","getPasteContentLength","pasteOperation","isEditHyperlink","getEditHyperlinkOperation","getFieldOperation","operation1","getPasteMergeOperation","getTrackchangesOperation","getResizingOperation","buildFormatOperation","createCellFormat","getSelectedCellOperation","createTableFormat","numberingOperation","createListFormat","createSectionFormat","createRowFormat","markerInfo","buildRowOperationForTrackChanges","removeMarkerInfoRevision","isFieldEnd","elementOffset","elementLength","operation_1","getRevisionMarkerData","operation_2","paraEnd","isAtParagraphEnd","getRemovedFieldCode","getRowLength","rightColumnIndex","leftColumnIndex","isResize","writeCellFormat","rowStartIndex","writeTableFormat","setEndIndex","headerFooterStart","headerFooterEnd","removedText","tableRelatedLength","skipOperation","skipMarkerData","insertedData","issamePosition","startLine","enterOperation","buildRowOperation","cellOperations","buildCellOperation","cell_1","assignRevisionData","lastRevision","isCellInserted","getOwnerCell","deleteCells","cellInfo","updateSelectedCellsInTable","deleteCell","isRowOffset","startline","isRowDelete","skipIncrement","formatOperation","getParagraphText","getTableText","getRowText","commentRangeElement","ownerCommentId","commentIndex","commentAction","getDeleteCommentOperation","modifiedActions","currentHistory","HistoryInfo","ischarFormat","createParagraphFormat","createCharacterFormat","isShading","isCell","selectCells","length_4","writeBorderFormat","length_5","buildclearFormatOperations","isBreak","buildclearFormatOperation","tableClearFormatOperation","isParagraphFormat","paraFormatOperation","writeShading","writeList","writeAbstractList","LowerCase","tabFormat","tableOption","tabBorderFormat","getTableFormatString","rForamt","getRowString","cFormat","cellOption","getCellString","writeSectionFormat","secFormat","isChildHistoryInfo","addModifiedAction","baseHistoryInfo","breakOperation","iscontentInsert","removeOperation","insertOperation","operationsCollection","pasteOperations","tocOperations","lastelement","ddcOperations","formatstyleOperation","autoListOperations","tablePropHistory","cellProp","isBordersAndShadingDialog","updateComplexHistoryInternal","TableResizer","resizeNode","initResizingHistory","getRowReSizerPosition","getCellReSizerPosition","getTableWidget","startingPointX","resizerBoundaryWidth","getCellReSizerPositionInternal","childTableWidget","getTableWidgetFromWidget","childCellWidget","getActualWidth","resizeTableCellColumn","resizeTableRow","bodywid","selectionFlag","setPreferredWidth","newIndent","resizeColumnWithSelection","rightColumn","prevDragValue","newWidth","dragOffset","updateCellPreferredWidths","resizeColumnAtLastColumnIndex","resizeCellAtMiddle","resizeColumnAtStart","leftColumnCollection","getColumnCells","increaseOrDecreaseWidth","updateRowsGridAfterWidth","rightColumnCollection","isColumnResizing","isColumnSelected","changeWidthOfCells","selectedRow","newGridBefore","updateGridBefore","leastGridBefore","getLeastGridBefore","updateWidthForCells","hasTableWidth","leftColumn","isContinue","isLeftSideCollection","ignoreRow","isIncrease","maxRowWidth","currentRowWidth","getRowWidth","toUpdateGridAfter","leftColumnCells","rightColumnCells","columnCell","tableHistoryInfo","updateGridBeforeWidth","updateGridAfterWidth","Editor","editHyperlinkInternal","formFieldCounter","skipFieldDeleteTracking","skipFootNoteDeleteTracking","isForHyperlinkFormat","isTrackingFormField","isInsertText","casingIndex","checkLastLetterSpace","checkLastLetterSpaceDot","pasteFootNoteType","isRemoveRevision","isHandledComplex","removedEditRangeStartElements","removedEditRangeEndElements","pageRefFields","delBlockContinue","delBlock","delSection","editStartRangeCollection","skipReplace","skipTableElements","isImageInsert","isCellFormatApplied","isSkipComments","isLastParaMarkCopied","combineLastBlock","isFieldOperation","copiedContent","previousParaFormat","previousCharFormat","previousSectionFormat","pasteTextPosition","isPasteListUpdated","isInsertField","nbsp","lineFeed","textBoxText","handleBackKey","predictText","currentContentControl","setFieldInfo","insertField","insertPageCount","insertPageNumber","insertFormat","selectionFormat","fieldCodeSpan","fieldResultSpan","pasteContentsInternal","isLinkedStyle","clearDirectFormatting","isSelectionEmpty","clearFormattingInternal","preservedStartPosition","preservedEndPosition","getCompleteStyles","insertEditingRegion","credential","restrictFormatType","typeOfProtection","limitToFormatting","enforceProtectionAsync","getCommentHierarchicalIndex","alertBox","constructCommentInitial","authorInternal","dateTime","insertCommentInternal","commentInfo","endParagraphInfo","commentRangeStart","commentRangeEnd","isSameLine","initInsertInline","commentAdv","updateCommentElement","deleteAllComments","historyInfo","deleteCommentWidgetInternal","removeInline","commentWidget","currentCmtStart","currentCmtEnd","replyCmtLength","isAtSameLine","isInserted","currentProtectionType","enforceProtectionHandler","formObject","passwordBase64","saltBase64","spinCount","serviceUrl","serverActionSettings","restrictEditing","enforceProtectionInternal","protectionFailureHandler","httprequestEventArgs","serverActionType","fireServiceFailure","enforceProtectionAssign","toggleTrackChangesProtection","isTrackChangesEnabled","getSettingData","protect","unProtectDocumentHandler","onUnProtectionSuccess","stopProtectionAsync","validateHashValue","decodeUserHashValue","documentHashValue","defaultHashValue","clearHistory","collaborativeEditingModule","updateLockRegion","isUpdateHeading","updateHeadingTab","getPrefixAndSuffix","boxInfo","prefixAdded","endInlineInfo","suffixAdded","insertColumnBreak","toggleBaselineAlignment","insertFootnote","insertEndnote","acceptTab","handleDelete","handleShiftEnter","changeCase","toggleChangeCase","handleCtrlBackKey","handleCtrlDelete","insertPageBreak","fontDialogModule","showFontDialog","hyperlinkDialogModule","openBlank","enableEditorHistory","redo","onBackSpace","onEnter","animationTimer","sFormat","getResultContentControlText","insertElementsInternal","insertContentControl","typeOrInfo","canDelete","canEdit","applyRichText","applyPlainText","applyPictureContentControl","applyComboBox","applyDatePickerContentControl","applyCheckBoxContentControl","contantControl","lock","positionStart","positionEnd","endposition","insertTextInternal","insertImageAsync","updateXmlMappedContentControl","startInlineEle","updateCustomXml","xmlDoc","DOMParser","parseFromString","lastText","htmlCollec","getNamedItem","isInsertPositionUpdated","checkAndRemoveComments","extendSelectionToBookmarkStart","paragraphLength","isRepalceTracking","updatedParagraphLength","isSpecialChars","setCharFormatForCollaborativeEditing","matchedRevisions","getMatchedRevisionsToCombine","mapMatchedRevisions","checkToCombineRevisionWithPrevPara","removeErrorsFromCollection","inlineLangId","isTextContainsSpecChar","canInsertRevision","insertTextInline","isRevisionCombined","prevRevisionCount","checkToMapRevisionWithInlineText","checkToMapRevisionWithNextNode","checkToCombineRevisionsinBlocks","checkToMapRevisionWithPreviousNode","splittedSpan","updateRevisionForSpittedTextElement","copyElementRevision","updateElementInFieldRevision","updateSplittedElementError","checkAndConvertList","checkAndConvertToHyperlink","updateHistoryForComments","bookMark","selectionBookmark","bookmarkPargraph","selectionParagraphInfo","revisionElement","elementToInclude","resultantText","previousValidNodeForTracking","checkWidget","combineRevisionWithNextPara","combineRevisionWithPrevPara","inlinePara","nextElementPara","nextValidNodeForTracking","prevElement","updateLastElementRevision","applyMatchedRevisionInorder","combineElementRevisions","elementToCombine","prevRevision","isBegin","revisionsMatched","elementToCopy","isSplitElementMerged","isRevisionAlreadyIn","insertRevisionForFootnoteWidget","isRevisionMatched","decideInlineForTrackChanges","matched","insertSectionBreak","sectionBreakType","NewPage","Continuous","combineRevisionWithBlocks","lastElement_1","compareElementRevision","clearAndUpdateRevisons","nextPara","firstEleRevision","checkToCombineRevisionWithNextPara","mappedRevisions","removeRevision","revisionToRemove","clearElementRevision","spittedRange","parseRevisionId","newRevisionData","updateRevisionCollection","isSameRange","splitRevisionByElement","splittedRange","splittedRevision","elementRevision","insertRevisionAtEnd","insertRevisionAtPosition","prevRevisionLength","insertRevisionAtBegining","splitRevisionForSpittedElement","spittedElement","combineElementRevision","currentElementRevisions","revisionToCombine","rangeLength","combineRevisions","handleDeleteTrackingForParaMark","isRevisionInserted","skipReLayout","isRemoveInline","skipParaMark","elemets","editPostion","lastBodyWidget","updatePasteRevision","updateEditPosition","sectionBreakNewPage","newSectionFormat","splitTable","splitParagraphInternal","splitBodyWidget","temp_NewBody","insertRemoveHeaderFooter","updateBlockIndex","startBodyWidget","increaseIndex","isTab","convertList","isLeadingZero","tabValue","previousText","previousList","checkNumberFormat","checkLeadingZero","checkNextLevelAutoList","leadingZeroText","autoConvertList","isConvertList","listNumber","prevListText","currentListText","prevListNumber","getNumber","currentListNumber","roman","conversion","newAbstractList","isZero","getPageFromBlockWidget","insertImageText","insertFieldBeginText","insertFieldSeparatorText","insertFieldEndText","insertBookMarkText","spanObj","previousInlineObj","nextInlineObj","isEnter","tabCharIndex","lowerCaseText","containsURL","atIndex","dotIndex","autoFormatHyperlink","createHyperlinkElement","updateComplexWithoutHistory","appylingHyperlinkFormat","updateCharacterFormatWithUpdate","insertHyperlinkfield","removeCollection","constructRevisionnsForLink","historyInfoStack","isConstructRevision","addRemovedRevisionInfo","unlinkWholeRangeInRevision","fieldIndex","formFieldIndex","insertHyperlink","address","insertHyperlinkInternal","insertHyperlinkInternalInternal","fieldStartPosition","editHyperlink","isTrackEnabled","insertHyperlinkByFormat","insertElement","isInsertRemovedBookamrk","insertElementInCurrentLine","checkIsNotRedoing","checkEndPosition","fieldObj","newFieldBegin","insertInlineInternal","insertClonedFieldResult","getClonedFieldResultWithSel","getClonedFieldResult","insertParagraph","curParagraph","contentControlEnd","endElementInfo","picElement","removeHyperlink","fieldStartString","fieldSeparatorPosition","fieldSeparatorString","pasteWindow","currentPasteOptions","defaultPasteOption","rtfContent","clipbordData","pasteAjax","kind","pasteImage","getAsFile","imgFile","fileReader","onPasteImage","insertImageInternal","pasteRequestHandler","systemClipboard","pasteFormattedContent","onPasteFailure","getUniqueListOrAbstractListId","sortedList","sortedAbsList","checkSameLevelFormat","lstLevelNo","listLevelPatternInCollection","isEqualParagraphFormat","getBlocksToUpdate","blcks","updateListIdForBlocks","idToUpdate","existingList","toUpdate","updatePasteContent","sectionId","uniqueListId","sortedPasteList","uniqueAbsLstId","sortedPasteAbsList","out_k_1","lstDup","absListId","listObj","getBlocks","insertParaFormat","revision_1","applyMergeFormat","applyParaFormatInternal","applyFormatInternal","insertedParaFormat","isPasteOptionTextOnly","canUndo","pasteAsNestedTable","pasteAsNewRow","pasteAsNewColumn","pasteOverwriteCell","selectedTextLength","contentlength","newImages","commentStartToInsert","isTablePaste","defaultPaste","removeSelectedContentInternal","cloneTable","numberOfRows","newCell","addRows","tableUpdate","createColumn","rowspannedCollection","insertSpannedCells","tableReLayout","pasteCell","rowIndexPaste","newCells","row2","rowSpanIndex","cloneCells","rowWidgetLength","cellIndexSE","rowsToAdd","numberOfColumns_1","cellIterate","getRowCountToInsert","getColumnCountToInsert","pasteRowCount","newRow","copyContent","rowCell","rowInsertion","pasteCopiedData","hasFootNoteElement","isSectionEmpty","generateTableRevision","insertTableRows","insertBlockInternal","arrangeFootnoteCollection","arrangeEndnoteCollection","nextStart","tempElementBox","headerFooters","moveRows","skipRemoving","constructRevisionsForTable","removeRevisionFromTable","canConstructRevision","constructRevisionsForBlock","deleteRevision","constructRevisionForFootnote","linIndex","isParaMarkIncluded","skipElement","tempPara","moveInlines","checkInsertPosition","removedCommentStart","deleteSelectedContent","isValidNodeForTracking","updateFootnoteCollection","updateEndnoteCollection","curInline","insertElementInternal","isElementHasEndNote","isTrackingEnabled","prevRevisionsCount","updateRevisionForElement","isMiddle","relayout","skipTracking","incrementCommentIndex","bookmarkCol","updateFootNoteIndex","updateEndNoteIndex","revisionToInclude","isFieldBeginRedoing","isInsertEnd","currentElementIndex","existingIndex","isSkipEmptyPara","paraStart","insertImage","isUiInteracted","editor_1","insertPicture","insertTable","maximumColumns","columnAlertPopup","maximumRows","rowAlertPopup","removedComment","createTable","above","rowPlacement","isAffectedByRowSpannedCell","cellCountInfo","updateRowspan","createRowAndColumn","updateCellFormatForInsertedRow","cellFormats","fitType","insertAutoFitTable","rowInsertionForCE","cellCount","insertrow","cellData","paragraphData","isCellIncluded","isRowSpanned","clonedRowIndex","getInsertedTable","columnPlacement","copyCellFormats","cellInsertionForCE","newCellPara","nextCellpara","nextCellTextBox","isCollaborativePaste","isNewRow","getOwnerRow","isStart","getOwnerTable","canMergeCells","localizeValue","alertDialog","confirmCellMerge","startOwnerCell","endOwnerCell","mergedCell","mergeSelectedCells","mergeBorders","newBlock","updateBlockIndexAfterMerge","mergedCellborders","cellBorders","startCellIndex","canMergeSelectedCellsInTable","endLeft","selectionLeft","selectionRight","isRowLeftWithinSel","isRowRightWithinSel","rowLeft","rowRight","checkCellWithInSelection","isPrevCellWithinSel","checkPrevOrNextCellIsWithinSel","isNextCellWithinSel","isNoRowSpan","isCellWithInSel","checkCurrentCell","checkCellWidth","isPrev","prevOrNextCell","isPrevCellWithInSel","cellOwner","spannedCellOwner","checkRowSpannedCells","insertAfter","insertIndex_1","isMoved","moveContent","shapeIndex","updateRevisionForMovedContent","isLayoutChanged","previousBlockToLayout","isHandledComplexHistory","startInfo","shiftFootnotePageContent","updateHeaderFooterWidgetToPage","isEvenPage","isFirstPage","updateHeaderFooterWidgetToPageInternal","hfWidget","headerOrFooter","removeFieldTable","removeField","checkAndShiftFromBottom","isNotEmpty","allowFormattingInFormFields","formattingExceptions","checkPlainTextContentControl","endInlineEle","applyCharFormatValue","applyCharacterFormatForListText","applyListCharacterFormatByValue","updateListTextSelRange","startPositionInternal","endPositionInternal","initHistoryPosition","startSelectionReLayouting","clearList","applyBullet","bullet","applyBulletOrNumbering","applyNumbering","baseAlignment","updateProperty","isCompletePara","initializeHistory","updateParagraphFormatInternal","clearFormatting","currentUnderline","completeStylesString","existingStyles","styleNames_1","createStyle","modifyExistingStyle","createStyleIn","inputStyleType","getUniqueStyleName","styleData","styleFormCollection","styleLink","linkName","uniqueName","getUniqueName","matchArray","updateCharacterFormat","applyCharFormatSelectedContent","applyCharFormat","applyCharFormatCell","applyCharFormatForSelectedPara","splittedLastParagraph","splittedWidets","getNextParagraphForCharacterFormatting","widgetCollection","applyCharFormatForTable","inlineLength","applyCharFormatInline","getCurrentSelectionValue","removedTextNodes","isRevert","changeTextCase","changeCaseParagraph","changeCaseParaFormatInCell","startOffsetVal","endOffsetVal","textCount","endElementBox","isIncreaseIteration","isPreviousTextElementBox","changeCaseInline","changeCaseNextBlock","changeCaseInlineInternal","addRemovedTextNodes","makeFirstLetterCapital","textToChange","getChangeCaseText","preText","getNextBlockForChangeCase","changeCaseForTable","oldText","sentencecase","capitalizeFirst","togglecase","capitalizedWords","sentence","indexToStart","changeCaseForSelectedCell","changeCaseForSelectedPara","changeCaseForSelTable","firstLetter","cellContainer","changeCaseParaForCellInternal","changeCaseParaForRow","changeCaseParaForTableCell","wCell","cellStartValue","cellEndValue","cellEndLeft","cellEndRight","changeCaseParaFormatTableInternal","wRow","casings","getSelectedCharacterFormat","updateFontSize","fontsizeCollection","formatInline","indexCountForRevision","updateRevisionForFormattedContent","getCharacterFormatValueOfCell","applyCharFormatForSelectedCell","applyCharFormatRow","applyCharFormatForTableCell","applyCharFormatForSelTable","startCellLeft","startCellRight","applyCharFormatValueInternal","copyInlineCharacterFormat","destFormat","styleInCollection","getStyleObject","updateStyle","alternativeText","bordersType","applyRulerMarkerValues","differenceValue","leftIndentCurrentValue","isSkipPositionCheck","getIndentIncrementValue","applyParaFormatProperty","layoutItemBlock","increaseLevel","incrementFactor","currentParagraphIndent","getIndentIncrementValueInternal","updateParagraphFormat","isBidiList","applyParaFormatSelectedContent","applyParaFormat","applyParaFormatInCell","copyParagraphFormat","applyBorder","updateTabStopCollection","copyFromListLevelParagraphFormat","oldFormat","newFormat","applyContinueNumbering","applyContinueNumberingInternal","numberingInfo","getContinueNumberingInfo","getParagraphFormat","listPattern","changeListId","levelNum","listType","checkNumberArabic","applyRestartNumbering","restartListAt","changeRestartNumbering","getNextParagraphForFormatting","getParaFormatValueInCell","applyParaFormatCellInternal","applyParagraphFormatRow","applyParaFormatTableCell","isNext","applyParagraphFormatTableInternal","applyParaFormatTable","startSectionIndex","endSectionIndex","isMultipleSection","applyPropertyValueForSection","setPositionForHistory","HeaderFooterWidget_1","paraInfo","getFirstChildOfTable","getTableFormatAction","applyTablePropertyValue","updateSelectionTableFormat","getRowAction","applyRowPropertyValue","getTableCellAction","applyCellPropertyValue","skipClearContent","combineSection","combineSectionChild","combineFollowingSection","destoryPage","emptyBody","tableStartPosition","newStartPosition","updateFormatForCell","rowStartPosition","rowEndPosition","applyRowFormat","reLayoutSelectionOfTable","reLayoutSelection","isEnded","reLayoutSelectionOfBlock","isMultipleSectionSelected","checkMultipleSectionSelected","removeSelectedContent","getBodyWidgetIndex","hierarchicalPosition","editAction","deleteTableCell","shiftPara","deletePara","deleteSection","deleteBlock","considerTrackChanges","getParagraphForSelection","trackRowDeletion","onDeleteColumnConfirmed","onDeleteColumn","removeRow","canremoveRow","removeRevisionsInRow","trackInnerTable","returnDeleteRevision","skipCombine","tempStartOffset","paragraphStart","endParagraphStartOffset","isCombineNextParagraph","lastLinelength","isCombineLastBlock","isEndInAdjacentTable","paraReplace","isStartParagraph","removeInlines","deleteParagraphMark","deletaRevisionIDs","skipHistoryCollection","insertParagraphPaste","removeRevisionForBlock","removedNodeLength","charFormatRev","checkAndInsertBlock","removePrevParaMarkRevision","currentSection","previousY","lastBlockIndex","paragraphAdv","linewid","removeCommentsInBlock","removeCommentInPara","removeCommentsInline","skipElementRemoval","isPasteRevertAction","tableDelete","isFromDelete","nonEmptyEndPara","toCheckForTrack","removeEndnote","removeAutoShape","floatingElementIndex","endBookMarkElement","getTabsInSelection","oldTabstops","newCollection","itemsToRemove","oldCollection","newTab","oldTab","modifyTabStop","addTabStopToCollection","removeTabStops","paragraphs","tabCollection","isReturnIndex","isInsertBefore","deleteTableBlock","deletePreviousBlock","deleteCellsInTable","isCellCleared","deleteContainer","endCells","isDeleteCells","isWholeRowSelected","onConfirmedTableCellsDeletion","tiltle","canRemoveRow","onConfirmedCellDeletion","rowToRemove","prevRenderedRow","setActionInternal","j_2","removeRevisionForRow","rowRevision","removeRevisionForInnerTable","addToRevisionInfo","unlinkRangeByRevision","copyChildToClipboard","checkClearCells","paragrapghBookmarkCollection","existingBookmark","deleteContent","splitEndRow","enableHistoryMode","startAtIndex","canHandleDeletion","deleteCommentInSelection","curentBaseHistoryInfo","startText","fieldInline","clearFieldElementRevisions","handleDeleteTracking","removeEditRangeFromCollection","deleteCommentWidgetInline","removePrevRevisions","copyListLevel","updateListParagraphsInBlock","startListLevel","isSameList","tempList","abstractListAdv","listName","bulletCharacters","isInsertParaBeforeTable","breakParagraph","pageBreak","isAddRevToNxtPara","isPreviousRevision","checkToMatchEmptyParaMark","insertParaRevision","checkParaMarkMatchedWithElement","applyRevisionForParaMark","splitRevision","isCombined","prevRevCount","checkToMatchEmptyParaMarkBack","lineWid","textWid","fromSectionIndex","updateIndex","currentCellIndex","getSelectedComments","commentEndInfo","commentStartInfo","startBlockInfo","commentToDelete","commentEndMark","commentStartBlockInfo","commentEndBlockInfo","updateStartPosition","startLineInfo","endLineInfo","skipBackSpace","insertSpaceInFormField","insertRemoveBookMarkElements","isUpdateComplexHistory","bookMarkStart","bookMarkEnd","insertRemovedEditRangeEndElements","editRangeEndElementBox","insertRemovedEditRangeStartElements","editRangeStartElementBox","isBackSpace","deleteSelectedContentInternal","removeWholeElement","canRedo","isCommentDelete","currentLineWidget","initComplextHistory","start_1","start_2","start_3","deleteBookmark","checkCombine","indexcolle","removeOffset","removeAtOffset","removeCharacter","isRearrange","removeCharacterInLine","removedCount","removeRevisionsInformation","isSkipRecordRevision","removedNode","checkToCombineRevisionsInSides","updateEndRevisionIndex","revision_2","revision_3","handleDeletionForInsertRevision","revision_4","index_2","updateCursorForInsertRevision","startOff","endOff","toCombineOrInsertRevision","handleDeleteBySplitting","prevHistoryInfo","elementToEnsure","spittedSpan","deleteEditElement","removeContentControlMark","nextRenderedInline","editEnd","bookMarkBegin","nxtParagraph","paraEndOffset","nextParagraph_1","inline_1","singleDeleteInternal","handleParaMark","updateEditPositionOnMerge","handleDeleteParaMark","prevLastLineIndex","inline_2","canRemoveParaMark","retrieveRevisionByType","insertDeleteParaMarkRevision","revisionToRetrieve","combineRevisionOnDeleteParaMark","imageElementBox","generateFallBackImage","insertPictureInternal","isElementInserted","fitImageToPage","metaImageString","metaString","onPortrait","onLandscape","changeMarginValue","onPaperSize","isFindingListParagraph","listID","getNextBlockForList","listSearchResultInfo","updateListItems","updateListItemsForPara","updateListItemsForTable","updateListItemsForRow","updateListItemsForCell","updateRenderedListItemsForPara","updateRenderedListItemsForTable","updateRenderedListItemsForRow","updateRenderedListItemsForCell","updateListNumber","listWholeWidth","createFields","fieldtext","insertBookmark","isHistoryInitiated","createBookmarkElements","insertElements","startCell_1","endCell_1","endElements","startElements","blockObj","isInsertPosition","applyBorders","clearAllBorderValues","selectedCell","getTopBorderCellsOnSelection","getLeftBorderCellsOnSelection","getRightBorderCellsOnSelection","getBottomBorderCellsOnSelection","getAdjacentCellToApplyBottomBorder","clearBorder","getAdjacentCellToApplyRightBorder","applyAllBorders","applyInsideBorders","updateGridForTableDialog","isLastSelectedRow","isLastRightCell","getAdjacentBottomBorderOnEmptyCells","rightBorderCells","getSelectedCellsNextWidgets","topBorderCells","leftBorderCells","bottomBorderCells","nextCellColIndex","isSingleCell","startPosIn","endPosIn","applyBordersInternal","onTableFormat","applyTableFormat","handleTableFormat","shiftNextItem","onRowFormat","rowStartPos","rowEndPos","handleRowFormat","onCellFormat","onParaFormat","cellStartPosition","cellEndPosition","cellOptionsDialogModule","applyCellMarginValue","getSelectedCellInColumn","rowEndIndex","handleCellFormat","updateToc","tocField","insertTableOfContents","validateTocSettings","getTocSettings","tocSettings","startLevel","endLevel","swtiches","swtch","includeHyperlink","includePageNumber","includeOutlineLevels","decodeTSwitch","tSwitch","levelSettings","tableOfContentsSettings","constructTocFieldCode","buildToc","tocLastPara","tocLastLine","appendEndField","appendEmptyPara","updatePageRef","emptyPara","emptyLine","tocFieldCode","constructTSwitch","isFirstPara","isNavigationPane","tocDomBody","createHeadingLevels","createOutlineLevels","isHeadingStyle","isOutlineLevelStyle","insertTocBookmark","createTOCWidgets","levelStyle","headingStyle","createTocFieldElement","isSkipRevision","tocLine","emptyParaAppended","headingStyleName","tocStyleName","headingPaneStyleName","insertTocHyperlink","pageField","insertTocPageNumber","noramlStyle","getPageNumber","bookMarkname","isRightAlign","pageRef","generateBookmarkName","onCellContentAlignment","addEditElement","insertEditRangeInsideTable","addRestrictEditingForSelectedArea","cellSelectionStartIndex","cellSelectionEndIndex","newEndElement","startCell_2","getEditRangeID","addEditCollectionToDocument","numDigits","removeEditRangeElementsOnTable","removeEditRangeElements","editRangeElements","editRangeElements_1","notRemoveElement","insertFormField","insertFormFieldInternal","getFormFieldData","getBookmarkName","getFormFieldCode","addFormFieldWidget","setFormField","editFormField","formData","textFormat","getDefaultText","defaultText","checkBoxText","updateFormFieldInternal","updateContentControl","updateContentControlResult","updateFormFieldResult","checkBookmarkAvailability","available","dateContentDialogModule","splittedName","initials","footPara","footText","followText","endNoteCollec","footNoteCollec","EditorHistory","undoStackIn","redoStackIn","isUndoGroupingEnded","modifiedParaFormats","undoLimitIn","redoLimitIn","beginUndoAction","clearRedoStack","endUndoAction","rowHistoryFormat","cellHistoryFormat","redoLimit","undoLimit","lastOperation","hasAction","modifiedLevelsInternal","modifiedCollection","clearUndoStack","TextSearch","findOption","findNext","stringToRegex","textSearchResults","clearResults","findDocument","currentSearchResult","textToFind","isPatternEmpty","wordEmpty","patternRegExp","findAll","includeNextLine","isFirstMatch","stringBuilder","previousElementCount","findInlineText","elementBoxes","elementsWithOffset","fullText","updateMatchedTextLocation","addResult","spanKeys","isContainField","hierachicalPosition","findInline","endNoteCollection","inlineEle","matchObject","SearchWidgetInfo","leftInternal","widthInternal","TextSearchResult","TextSearchResults","innerList","textSearchResult","SearchResults","getTextSearchResultsOffset","textToReplace","replaceInternal","replaceAll","replaceAllInternal","textSearch","searchResultsInternal","findOptions","replaceText","highlightResult","highlightSearchResult","highlightSearchResultParaWidget","findHighLight","addSearchHighlightBorder","searchHighlight","addSearchResultItems","findResultsList","addFindResultView","addFindResultViewForSearch","suffixtext","boxObj","boxIndex","shiftIndex","headerFooterString","CONTROL","COLLAPSIBLE","EXPANDABLE","LISTITEM","LISTTEXT","PARENTITEM","LOAD","PROCESS","TEXTWRAP","INPUT","INPUTGROUP","TREEINPUT","EDITING","INTERACTION","DROPPABLE","DRAGGING","SIBLING","DROPIN","DROPNEXT","DROPOUT","NODROP","FULLROW","EXPANDED","NODECOLLAPSED","DISABLE","CHECKBOXWRAP","CHECKBOXFRAME","IMAGE","ITEM_ANIMATION_ACTIVE","PREVENTSELECT","treeAriaAttr","treeRole","FieldsSettings","ActionSettings","NodeAnimationSettings","TreeView","isRefreshed","preventExpand","checkedElement","disableNode","validArr","validNodes","expandChildren","isFieldChange","changeDataSource","hasTemplate","isFirstRender","isNodeDropped","isRightClick","mouseDownStatus","isDropIn","OldCheckedData","TreeView_1","checkActionNodes","parentNodeCheck","dragStartAction","f2","ctrlDown","ctrlUp","ctrlEnter","ctrlHome","ctrlEnd","ctrlA","shiftDown","shiftUp","shiftEnter","shiftHome","shiftEnd","csDown","csUp","csEnter","csHome","csEnd","shiftSpace","ctrlSpace","beforeNodeCreate","fullRowNavigable","updateListProp","treeList","isLoaded","isInitalExpand","setTouchClass","DDTTreeData","selectedNodes","checkedNodes","expandedNodes","setDataBinding","setDisabledMode","setExpandOnType","wireEditingEvents","allowEditing","setDragAndDrop","setFullRow","fullRowSelect","setTextWrap","nodeTemplateFn","nodeTemplate","iconModel","rippleIconFn","setMultiSelect","treeData","isNumberTypeId","getType","setRootData","finalize","rootData","parentID","getDataType","groupedData","getGroupedData","rootItems","getChildNodes","isChildObject","isSorted","getSortedData","loadOnDemand","renderChildNodes","finalizeNode","parentCheckData","updateCheckedStateFromDS","autoCheck","updateParentCheckState","resultId","childData","childId","mapper_1","checkState","getCheckedNodeDetails","checkIndeterminateState","checkedId","checkedData","fieldId","childItems","updateChildCheckState","checkNodes","preElement","childCheckedElement","nodeId","OldCheckedNodes","nodeCheck","checkedParent","checkedChild","subChildItems","checkboxEle","touchClass","addCheck","frame","frameMouseHandler","createFullRow","allowMultiSelection","addActionClass","dataId","renderNodeTemplate","nodeData","selectable","actionValue","iNodes","sNodes","selectNode","cNodes","disableExpandAttr","eNodes","updateList","updateCheckedProp","ensureIndeterminate","ensureParentCheckState","ensureChildCheckState","indeterminateNodes","checkBoxEle","checkedCount","dataUid","parentUL","currentParent","checkBoxes","parentCheck","childCheck","currentLoadData","isNodeChecked","doCheckBoxAction","doCheck","updateFieldChecked","liEle","setValidCheckedNode","dynamicCheckState","updateField","validateCheckNode","currLi","getNodeData","updateIndeterminate","updateChildIndeterminate","indeterminateData","getTreeData","subId","childElementCheck","innerChild","nodeCheckAction","getCheckEvent","ariaState","removeCheck","ensureStateChange","firstUl","updateIdAttr","allowTextWrap","updateWrap","hasPid","doExpandAction","ulEle","liList","calculateWrap","eUids","expandGivenNodes","eNode","expandAction","afterFinalized","expandCallback","eUid","doSelectionAction","sUids","sNode","selectGivenNodes","preventContextMenu","rippleIcons","setFocusElement","checkWrapper","triggerClickEvent","collapseNode","toggleSelect","nodeCheckedEvent","updateOldCheckedData","uncheckedItems","expandNode","end_1","liEle_1","activeElement_1","animateHeight","expandedNode","addExpand","expandArgs","getExpandEvent","colArgs","nodeCollapseAction","collapsedNode","removeExpand","toRemove","expandChild","eicon","parents","mapper_2","getChildFields","loadChild","setSelectionForChildNodes","ensureCheckNode","disableTreeNodes","renderSubChild","getNodeObject","doDisableAction","getFields","nodeLevel","dataLevel","getChildMapper","isRoot","getChildGroup","objlen","tempField","cIcons","multiSelect","unselectNode","getSelectEvent","nodeSelectAction","removeSelectAll","startNode","currNode","addSelect","nodeUnselectAction","focusedNode","getFocusedNode","expandOnType","expandOn","expandHandler","expandCollapseAction","nodeExpandAction","liEles","getId","icon_1","inpEle","checkNode","openNode","shiftKeySelect","navigateNode","navigateRootNode","createTextbox","navigateToFocus","isUp","parentPos","isVisibleInViewport","isTowards","getNextNode","getPrevNode","checkWrap","nodeCheckingAction","allCheckNode","getChildItems","childStateChange","childIsCheck","newCheck","validateCheck","hierChildId","childId_1","toBeOpened","focusNextNode","setFocus","rootNode","getRootNode","getEndNode","fNode","prevNode","endNode","preNode","hoveredNode","fromDS","pNode","pid","tempArr","destroyTemplate","reRenderNodes","editingHandler","oldInpEle","updateOldText","getEditEvent","style_1","renderTextBox","editData","editFields","inputFocusOut","txtEle","crudOperation","appendNewText","isInput","updateText","getNode","getChildNodeObject","toBind","destroyDrag","virtualEle","dragRoot","dragWrap","dragLi","cloneEle","DRAGITEM","nLen","cNode","getDragEvent","draggedNode","dragCancelAction","removeVirtualEle","dropTarget","dropRoot","preventTargetExpand","dragParent","draggedParentNode","dropObj","over","dropAction","dropWrap","dropLi","isDescendant","templateTarget","appendIndicator","renderVirtualEle","dropIndicator","virEle","liArray","dragInstance","appendNode","dropAsChildNode","dropAsSiblingNode","dropUl","dragParentUl","dragParentLi","moveData","updateElement","updateAriaLevel","updateInstance","dropParentUl","expandParent","childLi","dropParentLi","removedData","updateChildField","refId","getDataPos","currPid","removeChildNodes","addChildData","dropIcon","dragIcon","updateChildAriaLevel","sibEle","dragNode","dropData","draggedNodeData","newParent","dragLiParent","targetParent","indexValue","dropTar","clonedNode","droppedNode","droppedNodeData","dropLevel","addFullRow","toAdd","rowDiv","addMultiSelect","liEles_1","liEles_2","collapseByLevel","excludeHiddenNodes","getVisibleNodes","collapseAllNodes","expandByLevel","expandAllNodes","eIcons","vNodes","removeNode","removeData","updateSelectedNodes","updateExpandedNodes","newId","currId","doGivenAction","toExpand","addGivenNodes","isRemote","dropEle","updateMapper","dropIcon1","refNode","navigateUrl","updated","childObj","validID","checkValidId","doEnableAction","strNodes","filterNestedChild","updatePersistProp","sleNodes","slelen","enodes","nodelen","cnodes","getMapperProp","touchEditObj","isDoubleTapped","wireClickEvent","touchClickObj","wireExpandOnEvent","touchExpandObj","secondTap","firstTap","setCheckedNodes","uncheckAll","setIndeterminate","checkAll","setChildCheckState","isRefreshChild","childValue","updateChildPosition","currID","dynamicState","newNode","crud","matchedArr","nodesID","deleteSuccess","dmFailure","editSucess","addSuccess","updatePreviousText","getHierarchicalParentId","parentsID","collapseAll","onLoaded","addNodes","beginEdit","disableNodes","enableNodes","ensureVisible","parentsId","expandAll","behavior","getAllCheckedNodes","getDisabledNodes","moveNodes","sourceNodes","refreshNode","newNodeData","parentData","refreshData","newliEle","newTextEle","newIcon","fullEle","removeNodes","updateNode","OptionsPane","wholeWord","searchText","resultsText","messageDivText","replaceButtonText","replaceAllButtonText","focusedIndex","isOptionsPane","replacePaneText","findPaneText","headingPaneText","matchDivReplaceText","tabInstance","searchOptionChange","clearSearchResultItems","searchInput","navigateSearchResult","messageDiv","resultContainer","resultsListBlock","clearFocusElement","onEnableDisableReplaceButton","replaceButton","replaceAllButton","onKeyDownOnOptionPane","focusIndex","HTMLInputElement","hideMatchDiv","onReplaceButtonClick","findText","replaceWith","selectionText","onReplaceAllButtonClick","searchIconClickInternal","searchIcon","matchDiv","occurrenceDiv","patterns","getMessageDivHeight","resultsContainerHeight","findTab","navigateNextResultButtonClick","nextResult","navigateToNextResult","navigatePreviousResultButtonClick","previousResult","navigateToPreviousResult","onKeyDown","findDiv","resultListBlockClick","currentlist","list_1","currentelement","initOptionsPane","searchDiv","tabDiv","findTabButton","replaceTabButton","headingTabButton","wholeWordLabel","selectedTabItem","findTabContentDiv","searchTextBoxContainer","checkboxDiv","matchInput","matchChange","wholeInput","wholeWordsChange","replaceTabContentDiv","createReplacePane","resultDiv","treeviewDiv","initHeadingTab","onWireEvents","dataForTreeview","treeviewObject","nodeClicked","nodeClick","targetNodeId","createDataSourceForTreeview","headingPaneSettings","constructHeadingFieldCode","validateHeadingSettings","navigationSettings","headingFieldCode","replaceButtonDivTextAlign","replaceButtonMargin","replaceDiv","replaceButtonDiv","emptyDiv6","contentParent","previousTab","nextTab","onHeadingPane","onFindPane","onReplacePane","currentIndexValue","refreshHeadingPaneHeight","searchElements","fireOptionPaneChange","optionsPaneContainerStyle","treeViewResult","resultListBox","XmlWriter","currentState","namespaceStack","Namespace","elementStack","XmlElement","attributeStack","writeProcessingInstruction","checkName","writeStartDocument","writeProcessingInstructionInternal","rawText","writeEndDocument","writeEndElement","writeStartElement","namespace","startElementContent","lookupPrefix","lookupNamespace","writeStartElementInternal","writeEndElementInternal","writeElementString","writeAttributeString","writeStartAttribute","writeStringInternal","writeEndAttribute","writeInternal","writeRaw","isRawString","writeStartAttributePrefixAndNameSpace","writeStartAttributeSpecialAttribute","skipPushAndWrite","pushNamespaceExplicit","pushNamespaceImplicit","writeStartAttributeInternal","namespaceName","writeNamespaceDeclaration","namespaceUri","writeStartNamespaceDeclaration","inAttributeValue","addNamespace","lookupNamespaceIndex","existingNsIndex","addAttribute","XmlAttribute","isDuplicate","WordExport","customXMLItemsPath","customXMLItemsPropspath","itemPropsPath","documentPath","stylePath","chartPath","numberingPath","settingsPath","headerPath","footerPath","imagePath","footnotesPath","endnotesPath","appPath","corePath","contentTypesPath","defaultEmbeddingPath","commentsPath","commentsExtendedPath","themePath","generalRelationPath","wordRelationPath","customXMLRelPath","excelRelationPath","footnotesRelationPath","endnotesRelationPath","headerRelationPath","footerRelationPath","xmlContentType","fontContentType","documentContentType","TemplateContentType","settingsContentType","commentsContentType","commentsExContentType","endnoteContentType","footerContentType","footnoteContentType","headerContentType","numberingContentType","stylesContentType","webSettingsContentType","appContentType","coreContentType","customContentType","customXmlContentType","relationContentType","chartsContentType","themeContentType","tableStyleContentType","chartColorStyleContentType","commentsRelType","commentsExRelType","settingsRelType","endnoteRelType","footerRelType","footnoteRelType","headerRelType","documentRelType","numberingRelType","stylesRelType","chartRelType","ThemeRelType","fontRelType","tableStyleRelType","coreRelType","appRelType","customRelType","imageRelType","hyperlinkRelType","controlRelType","packageRelType","customXmlRelType","customUIRelType","attachedTemplateRelType","chartColorStyleRelType","wNamespace","wpNamespace","pictureNamespace","aNamespace","a14Namespace","svgNamespace","rNamespace","rpNamespace","vNamespace","oNamespace","xmlNamespace","w10Namespace","cpNamespace","dcNamespace","docPropsNamespace","veNamespace","mNamespace","wneNamespace","customPropsNamespace","vtNamespace","chartNamespace","slNamespace","dtNamespace","wmlNamespace","w14Namespace","wpCanvasNamespace","wpDrawingNamespace","wpGroupNamespace","wpInkNamespace","wpShapeNamespace","w15Namespace","diagramNamespace","eNamespace","pNamespace","certNamespace","cxNamespace","c15Namespace","c7Namespace","csNamespace","spreadSheetNamespace","spreadSheet9","cRelationshipsTag","cRelationshipTag","cIdTag","cTypeTag","cTargetTag","cUserShapesTag","cExternalData","twipsInOnePoint","twentiethOfPoint","borderMultiplier","percentageFactor","emusPerPoint","cConditionalTableStyleTag","cTableFormatTag","cTowFormatTag","cCellFormatTag","cParagraphFormatTag","cCharacterFormatTag","packageType","relsPartPath","documentRelsPartPath","webSettingsPath","wordMLDocumentPath","wordMLStylePath","wordMLNumberingPath","wordMLSettingsPath","wordMLHeaderPath","wordMLFooterPath","wordMLCommentsPath","wordMLImagePath","wordMLFootnotesPath","wordMLEndnotesPath","wordMLAppPath","wordMLCorePath","wordMLCustomPath","wordMLFontTablePath","wordMLChartsPath","wordMLDefaultEmbeddingPath","wordMLEmbeddingPath","wordMLDrawingPath","wordMLThemePath","wordMLFontsPath","wordMLDiagramPath","wordMLControlPath","wordMLVbaProject","wordMLVbaData","wordMLVbaProjectPath","wordMLVbaDataPath","wordMLWebSettingsPath","wordMLCustomItemProp1Path","wordMLFootnoteRelPath","wordMLEndnoteRelPath","wordMLSettingsRelPath","wordMLNumberingRelPath","wordMLFontTableRelPath","wordMLCustomXmlPropsRelType","wordMLControlRelType","wordMLDiagramContentType","dsNamespace","excelFiles","mRelationShipID","cRelationShipId","eRelationShipId","efRelationShipId","mDocPrID","chartCount","chartStringCount","mDifferentFirstPage","mBookmarks","mComments","customXMLProps","paraID","commentParaID","commentParaIDInfo","isInsideComment","currentCommentId","trackChangesId","prevRevisionIds","isRevisionContinuous","isBookmarkAtEnd","isBookmarkAtRowEnd","isSerializeFootEndNote","mDocumentImages","mSvgImages","mExternalLinkImages","mHeaderFooterImages","mHeaderFooterSvgImages","mDocumentCharts","mHeaderFooterColl","mFootEndnotesColl","serialize","serializeExcelFiles","excelPromise","zipArchiveItem","saveExcel","xlsxPath","mArchiveExcel","clearDocument","imageRelationIds","svgImageRelationIds","contenttype","setDocument","mCustomXML","mImages","compressionLevel","mVerticalMerge","mGridSpans","serializeDocument","serializeStyles","serializeNumberings","serializeComments","serializeCommentsExtended","serializeThemes","serializeSettings","serializeCoreProperties","serializeAppProperties","serializeFontTable","serializeSettingsRelation","serializeHeaderFooters","serializeFootnotes","serializeEndnotes","serializeDocumentRelations","serializeGeneralRelations","serializeContentTypes","keyindex","mSections","mLists","mAbstractLists","defCharacterFormat","defParagraphFormat","defaultTabWidthValue","themeFontLang","mThemes","formatting","enforcement","formFieldShading","blockOwner","writeCommonAttributeStrings","serializeDocumentBody","writeCustom","writeDup","serializeBodyItems","serializeSectionProperties","serializeCommentCommonAttribute","serializeCommentInternal","themeFont","themeType","typeFace","serializeBodyItem","serializeCommentsExInternal","syncParaID","serializeHFReference","getSectionBreakCode","serializeSectionType","serializePageSetup","serializeColumns","serializeFootNotesPr","serializeEndNotesPr","getFootNoteNumberFormat","getFootNoteNumberRestart","numberRestart","getPageNumberFormat","roundToTwoDecimal","serializePageSize","serializePageMargins","serializePageNumberType","sectionBreakCode","hfId","hf","getNextRelationShipID","addHeaderFooter","hfType","hfColl","blockCollection","isLastSection","serializeContentControl","contentControlItem","serializeContentProperties","contentProperties","dropDownLists","serializeContentControlList","comboList","serializeContentControlDate","serializeContentParagraph","serializeParagraphItems","serializeRevisionStart","retrieveRevision","serializeTrackChanges","paraItems","isContinueOverride","isBdo","serializeBiDirectionalOverride","serializeFieldCharacter","serializePicture","currentParargaph","serializeShape","serializeBookMark","serializeEditRange","serializeChart","serializeChartStructure","serializeComment","serializeEFReference","serializeTextRange","serializeRevisionEnd","efId","getEFNextRelationShipID","addFootnotesEndnotes","efType","efColl","endnotesFootnotes","serializeEndnotesFootnote","serializeInlineEndnotes","serializeInlineFootnotes","endNoteFootnote","writeEFCommonAttributes","serializeCommentItems","editElement","getBookmarkId","serializeDrawing","serializeHorizontalRule","horAlig","serializeInlineCharts","serializeInlinePictureAndShape","serializeWrappingPictureAndShape","serializePictureAndShapeDistance","behindText","layoutcell","horPos","vertPos","verAlig","serializeShapeDrawingGraphics","serializeShapeWrapStyle","serializeDrawingGraphics","writeDefaultDistAttribute","serializeDrawingGraphicsChart","updatechartId","getNextChartName","getBase64ImageString","serializeChartXML","serializeChartColors","serializeChartExcelData","serializeChartRelations","serializeChartData","colorPath","serializeChartColor","isScatterType","serializeWorkBook","serializeSharedString","serializeExcelContentTypes","serializeExcelData","serializeExcelStyles","serializeExcelRelation","serializeExcelGeneralRelations","resetExcelRelationShipId","getNextExcelRelationShipID","serializeExcelSheet","chartSharedString","isString","uniqueCount","bubbleLength","isBubbleType","categoryLength","alphaNumeric","serializeDefaultContentType","serializeOverrideContentType","serializeRelationShip","getNextChartRelationShipID","serializeTextProperties","serializeChartPlotArea","serializeShapeProperties","serializationChartType","isPieTypeSerialization","barDiv","chartGrouping","valueSheet","parseChartDataPoint","parseChartSeriesColor","serializeChartErrorBar","serializeDefaultShapeProperties","categoryRef","cacheType","serializeChartCategory","serializeChartValue","isStackedPercentage","serializeCategoryAxis","serializeValueAxis","showHorzBorder","showVertBorder","showOutline","showKeys","serializeChartLegend","legendPosition","chartLegendPosition","serializeChartTitleFont","errorBarValueType","axisType","serializeAxis","valueAxis","crossBetween","axisID","chartTrendLineType","dispRSqr","dispEq","solidFill","serializeChartSolidFill","trendlineType","serializeDefaultLineProperties","chartTitleName","serializeFont","fontSizeCalc","isSeriesFill","symbolType","chartCategoryCount","serializeChartYValue","addChartRelation","documentCharts","chartCollection","relationId","lineWeight","getTextVerticalAlignmentProperty","wrapType","imageStringInfo","updateShapeId","documentImages","externalImages","newRId","serializeBlipExtensions","isSvgData","tOwner","updateHFImageRels","addImageRelation","svgImages","imageCollection","isSvgImage","headerId","hfKeys","headerImages","headerFooterSvgImages","headerFooterImages","serializeTableFormat","serializeTableGrid","mHorizontalMerge","owner_1","serializeRowFormat","cellLength","prevColIndex","getMergeCellFormat","serializeTableCell","mergedCellFormat","xmlWriter","mergeStart","serializeCellWidth","serializeCellMargins","serializeBorders","serializeShading","serializeTableCellDirection","serializeCellVerticalAlign","serializeGridColumns","serializeTableRows","serializeCells","serializeRowMargins","pointWidth","serializeCellFormat","createCellForMerge","collKey","endProperties","spanCellFormat","serializeColumnSpan","checkMergeCell","ensureMerge","serializeCellMerge","serializeGridSpan","isserialized","createMerge","gridValue","serializeTablePositioning","serializeTableAlignment","serializeCellSpacing","serializeTableIndentation","serializeTableMargins","serializeTableBorders","serializeTblLayout","getTableVerticalRelationEnumValue","getTableHorizontalAlignment","getTableVerticalAlignment","serializeMargins","serializeParagraphBorders","formatPara","multipler","isParagraphBorder","serializeBorder","multiplier","getBorderStyle","tableIndent","encodeURI","isDeleteText","retrieveDeleteRevision","serializeListFormat","getOutlineLevelValue","serializeParagraphSpacing","serializeIndentation","serializeParagraphAlignment","serializeTabs","outlineLvl","lvlNumber","serializeTab","txtAlignment","lineSpacingValue","serializeCustomXMLMapping","customXML","customXmlWriter","itemID","fileIndex","itemPath","createXMLItem","createXMLItemProps","customXMLRelation","xmlBlob","customitemPropsPath","serializeDefaultStyles","serializeDocumentStyles","serializeBoolProperty","getUnderlineStyle","underlineStyle","serializeAbstractListStyles","serializeListInstances","listStyles","generateHex","ilvl","serializeListLevel","lvl","serializeLevelOverrides","levelIndex","getLevelPattern","serializeLevelFollow","serializeLevelText","lvlIndex","serializeThemeFontLang","isLanguageIdBi","isLanguageId","isLanguageIdFarEast","ascii","farEast","serializeDocumentProtectionSettings","editMode","getCompatibilityModeEnumValue","serializeHeaderFooter","headerFooterPath","headerFooterRelsPath","serializeHeader","serializeFooter","writeHFCommonAttributes","serializeHFRelations","serializeImagesRelations","serializeSvgImageRelation","serializeHeaderFooterRelations","serializeChartDocumentRelations","serializeExternalLinkImages","charts","resetChartRelationShipId","chartColorPath","chartRelationPath","chartExcelPath","isSvg","mImage","imageInfo","imageBlob","serializeHFRelation","relType","relationshipID","relationshipType","targetPath","resetRelationShipID","serializeHFContentTypes","SerializeEFContentTypes","serializeHeaderFootersContentType","partName","serializeEFContentType","TextExport","pageContent","curSectionIndex","inField","updateLastParagraph","writeBody","writeNewLine","writeSectionEnd","writeHeadersFooters","bodyItemsCount","bodyItem","isLastPara","writeParagraph","writeTable","writeHeaderFooter","pCount","addScrolling","scrollType","containerOffset","contentOffset","parentElem","createScrollbar","scrollObj","skipEle","menu","ENTER","ESCAPE","FOCUSED","HEADER","SEPARATOR","UPARROW","DOWNARROW","LEFTARROW","RIGHTARROW","HOME","END","TAB","CARET","ITEM","HIDE","ICONS","MenuItem","MenuAnimationSettings","MenuBase","navIdx","isTapHold","showSubMenuOn","isMenu","ejInst","refEle","enableScrolling","hamburgerMode","createHeaderContainer","defaultOption","showItemOnClick","removeChildElement","targetElems","menuHeaderClickHandler","cmenuHandler","delegateMoverHandler","moverHandler","delegateMouseDownHandler","delegateClickHandler","downarrow","uparrow","leftarrow","rightarrow","closeMenu","actionName","actionNeeded","removeLIStateByClass","rightEnterKeyHandler","leftEscKeyHandler","cul","getUlByNavIdx","fliIdx","fli","getLIByClass","getIdx","cli","navIdxLen","popups_1","keyType","openMenu","aEle","sli","isCMenu","ulIndex","isIterated","isMenuVisible","item_1","wrapper_1","popups","getPopups","liElem_1","observedCloseArgs","trgtliId","closedLi","trgtLi","popupId","unWireKeyboardEvent","toggleAnimation","showSubMenu","updateReactTemplate","trgtpopUp","submenus","afterCloseMenu","isMenusClosed","isCmenuHover","sli_1","cliIdx","item_2","removeStateWrapper","getMenuItemModel","lItem","elemId","uList","hdata","hli","isNestedOrVertical","generatePopup","calculateIndentSize","hoverDelay","triggerBeforeOpen","targetEvent","copyObject","liStyle","liIndent","blankIconElem","menuIconElem","menuIconElemStyle","blankIconIndent","triggerOpen","spanElem","tempTitle","spanTitle","spanIcon","openHamburgerMenu","closeHamburgerMenu","observedHamburgerCloseArgs","menuType","observedOpenArgs","checkScrollOffset","collide","offWidth","iconCssProps","offsetEle","offsetRight","px","toggleVisiblity","newTop","xCollision","liTrgt","hdrWrapper","isDifferentElem","menuWrapper","cliWrapper","isInstLI","cliWrapperId","setLISelected","culIdx","classname","isText","newItems","skipHdr","updateItemsByNavIdx","updateItem","ul_3","getChangedItemIndex","ul1","popStr","uls","targetSelctor","isMenuOpen","pUlHeight","pElement","isCallBack","skipItem","showItems","showHideItems","hideItems","ishide","validUl","iitems","insertItems","isAfter","ContextMenu","CONTEXTMENU_LOCK","CONTEXTMENU_UNLOCK","CONTEXTMENU_COPY","CONTEXTMENU_CUT","CONTEXTMENU_PASTE","CONTEXTMENU_ADD_COMMENT","CONTEXTMENU_UPDATE_FIELD","CONTEXTMENU_EDIT_FIELD","CONTEXTMENU_HYPERLINK","CONTEXTMENU_OPEN_HYPERLINK","CONTEXTMENU_COPY_HYPERLINK","CONTEXTMENU_REMOVE_HYPERLINK","CONTEXTMENU_PROPERTIES","CONTEXTMENU_EDIT_HYPERLINK","CONTEXTMENU_FONT_DIALOG","CONTEXTMENU_PARAGRAPH","CONTEXTMENU_TABLE","CONTEXTMENU_INSERT_TABLE","CONTEXTMENU_DELETE_TABLE","CONTEXTMENU_INSERT_ABOVE","CONTEXTMENU_INSERT_BELOW","CONTEXTMENU_INSERT_RIGHT","CONTEXTMENU_INSERT_LEFT","CONTEXTMENU_COMPLETE_DELETE_TABLE","CONTEXTMENU_DELETE_ROW","CONTEXTMENU_DELETE_COLUMN","CONTEXTMENU_MERGE_CELL","CONTEXTMENU_AUTO_FIT","CONTEXTMENU_AUTO_FIT_TO_CONTENTS","CONTEXTMENU_AUTO_FIT_TO_WINDOW","CONTEXTMENU_FIXED_COLUMN_WIDTH","CONTEXTMENU_CONTINUE_NUMBERING","CONTEXTMENU_RESTART_AT","CONTEXTMENU_SPELLING_DIALOG","CONTEXTMENU_SPELLCHECK_OTHERSUGGESTIONS","CONTEXTMENU_NO_SUGGESTION","CONTEXTMENU_ACCEPT_CHANGES","CONTEXTMENU_REJECT_CHANGES","CONTEXTMENU_NOTE_OPTIONS","CONTEXTMENU_REMOVE_CONTENT_CONTROL","CONTEXTMENU_CONTENT_CONTROL_PROPERTIES","menuItems","customMenuItems","spellContextItems","customItems","splittedSuggestion_1","allSuggestions_1","currentContextInfo","findCurretText","exactData_1","errorSuggestions","handleSuggestions","processSuggestions","Suggestions","hideSpellContextItems","showContextMenuOnSel","initContextMenu","contextMenu","listStyle","oncontextmenu","disableBrowserContextmenu","menuOptions","addMenuItems","handleContextMenuItem","fireCustomContextMenuBeforeOpen","enableCustomContextMenu","onClose","itemsmenu","openPasteDialog","contentDiv","contentValue","contentDialog","contentWithBookMark","pasteCheckBoxDialog","lockContent","unlockContent","tableOfContentsDialogModule","contentControlPropertiesDialogModule","paragraphDialogModule","tablePropertiesDialogModule","contextInfo","retriveText","spellCheckDialogModule","showFootNotesDialog","expectedData","callSelectedOption","fireCustomContextMenuSelect","handleAddToDictionary","handleIgnoreAllItems","manageReplace","addCustomMenu","enableCustomContextMenuBottom","showHideElements","allSuggestions","splittedSuggestion","constructContextmenu","noSuggestion","allSuggestion","contextMenuItems","unlock","editField","tableProperties","openHyperlink","continueNumbering","restartAt","editNoteoptions","canLock","isDialogHidden","acceptChange","rejectChange","isHideComment","enablePaste","ImageResizer","resizeContainerDiv","topLeftRect","topMiddleRect","topRightRect","bottomLeftRect","bottomMiddleRect","bottomRightRect","leftMiddleRect","rightMiddleRect","topLeftRectParent","topMiddleRectParent","topRightRectParent","bottomLeftRectParent","bottomMiddleRectParent","bottomRightRectParent","leftMiddleRectParent","rightMiddleRectParent","resizeMarkSizeIn","imageResizerPoints","ImageResizingPoints","imageResizerDiv","currentImageElementBoxIn","currentImageElementBox","imageResizerDivElement","resizeDiv","initResizeMarks","currentPageDiv","currentPageDivWidth","currentPageDivHeight","imageResizerDivWidth","imageResizerDivHeight","resizeMarkSize","setImageResizerPosition","selectedImageInfo","SelectedImageInfo","initResizeContainerDiv","setImageResizingPoints","applyPropertiesForTouch","applyPropertiesForMouse","resizeRectElement","boxShadow","handleImageResizing","currentElementId","topRightResizing","topLeftResizing","topMiddleResizing","bottomRightResizing","bottomLeftResizing","leftMiddleResizing","widgetHeight","initHistoryForImageResizer","getOuterResizingPoint","getInnerResizingPoint","imageResizingPoints","bottomMiddle","topMiddle","rightMiddle","leftMiddle","touchPoints","imageResizingPointsOnTouch","selectedElements","updateHistoryForImageResizer","SfdtExport","writeInlineStyles","blockContent","startContent","multipleLineContent","nestedContent","selectedCommentsId","selectedRevisionId","nestedBlockContent","nestedBlockEnabled","contentInline","isBlockClosed","isWriteInlinesFootNote","isWriteEndFootNote","isExport","isWordExport","isPartialExport","checkboxOrDropdown","seralizeInternal","saveAsBlobNonOptimized","jsonString","updateEditRangeId","getParentBlock","createSection","selectionStartCell","selectionEndCell","getParentCell","isSameCell","createParagraph","getNextBlock","writeBlock","writePage","writeStyles","writeLists","writeComments","writeRevisions","writeCustomXml","writeImages","writeFontSubsitutionTable","getProtectionTypeEnumValue","writeThemes","writeBodyWidget","writeHeaderFooters","islastEmptyParagraph","getFootEndNoteNumberFormatEnumValue","getFootnoteRestartIndexEnumValue","cols","blockContentControl","tableContentControl","writeParagraphs","secondElement","nestedBlocks","contentControlProperty","contentControlPropertie","getContentControlAppearanceEnumValue","getContentControlTypeEnumValue","tounCheckedState","toCheckedState","getDateCalendarTypeEnumValue","getDateStorageFormatEnumValue","unCheckedState","secondChild","tableContentControls","writeLines","writeInlines","isformField","writeInlinesFootNote","writeInlinesContentControl","writeInline","inlineContentControl","nestedContentInline","inlineContentControls","nestedContentProperty","getTextFormFieldTypeEnumValue","getTextFormFieldFormatEnumValue","getCheckBoxSizeTypeEnumValue","writeChart","getVerticalOriginEnumValue","getShapeVerticalAlignmentEnumValue","getHorizontalOriginEnumValue","getShapeHorizontalAlignmentEnumValue","getTextWrappingStyleEnumValue","getTextWrappingTypeEnumValue","writeShape","writeInlineRevisions","getAutoShapeTypeEnumValue","getLineFormatTypeEnumValue","getLineDashStyleEnumValue","getTextVerticalAlignmentEnumValue","textFrameBlock","writeChartTitleArea","writeChartArea","writeChartCategory","createChartSeries","writeChartLegend","writeChartCategoryAxis","writeChartDataTable","writeChartDataFormat","writeChartLayout","primaryCategoryAxis","createChartCategory","writeChartData","yCategory","createChartData","writeChartDataLabels","writeChartTrendLines","isContentStarted","started","ended","getFootnoteTypeEnumValue","contentinline","isParaSelected","isListPara","writeListFormat","writeTabs","writeMajorMinorFontScheme","writeFontSchemeList","fontSchemeStructs","schemeStruct","getTabJustificationEnumValue","getTabLeaderEnumValue","listIdValue","writeRow","writeRowInternal","createRow","writeCell","writeTablePositioning","getTableVerticalPositionEnumValue","getTableHorizontalPositionEnumValue","getTableHorizontalRelationEnumValue","writeRowFormat","wShading","getTextureStyleEnumValue","wCellFormat","getWidthTypeEnumValue","getCellVerticalAlignmentEnumValue","wRowFormat","revisionIds","writeRowRevisions","getHeighTypeEnumValue","wrevisions","wTableFormat","getTableAlignmentEnumValue","seprators","endnoteSeparator","writeStyle","getStyleTypeEnumValue","writeRevision","getRevisionTypeEnumValue","customXml","xmlValue","wAbstractList","writeListLevel","wList","writeLevelOverrides","wlevel","wListLevel","getListLevelPatternEnumValue","getHorizontalPositionAbsEnumValue","HyperlinkDialog","navigationUrl","bookmarkDropdown","bookmarkCheckbox","onKeyUpOnUrlBox","urlValue","urlTextBox","displayTextBox","enableOrDisableInsertButton","onInsertHyperlink","onScreenTipTextBox","screenTipTextBox","onInsertButtonClick","clearValue","loadHyperlinkDialog","bookmarkDiv","addressText","insertButton","closeHyperlinkDialog","onUseBookmarkChange","onBookmarkchange","initHyperlinkDialog","bookmarkText","bookmarkValue","bookmarkCheckDiv","bookmarkCheck","TableDialog","onInsertTableClick","columnValueTexBox","rowValueTextBox","initTableDialog","columnValue","columnsCountBox","rowValue","rowsCountBox","BookmarkDialog","onKeyUpOnTextBox","enableOrDisableButton","addBookmark","focusTextBox","gotoBookmark","initBookmarkDialog","listviewInstance","hasNoBookmark","addbuttonDiv","deleteButtonDiv","deleteButtonElement","gotoButtonDiv","gotoButtonElement","gotoButton","removeObjects","TableOfContentsDialog","loadTableofContentDialog","showLevel","closeTableOfContentDialog","dialog3","showStyleDialog","styleDialogModule","changeByValue","changeStyle","headingLevel","headingValue","initAlertDialog","getElementValue","checkLevel","changeHeadingStyle","changePageNumberValue","changeRightAlignValue","changeStyleValue","heading1","heading2","heading3","heading4","heading5","heading6","heading7","heading8","heading9","applyTableOfContentProperties","applyLevelSetting","initTableOfContentDialog","ownerId","generalDiv","genLabel","topContainer","leftGeneralDiv","rightGeneralDiv","bottomContainer","leftBottomGeneralDiv","rightBottomGeneralDiv","pageNumberDiv","rightAlignDiv","tabDivContainer","tabLeaderLabelDiv","tabLeaderLabel","tabLeaderDiv","showDiv","showLevelLabelDiv","showLevelLabel","showLevelDiv","changeShowLevelValue","buildTableLabel","tr1","td1","availableLabel","td2","tocLabel","tableDiv","table1","tr2","td3","heading1Label","td4","tr3","td5","heading2Label","td6","tr4","td7","heading3Label","td8","tr5","td9","heading4Label","td10","tr6","td11","heading5Label","td12","tr7","td13","heading6Label","td14","tr8","td15","heading7Label","td16","tr9","td17","heading8Label","td18","tr10","td19","heading9Label","td20","tr12","td23","normalLabel","td24","stylesLevelDiv","fieldsDiv","outDiv","outlineDiv","resetButtonDiv","resetElement","tocStylesLabel","listViewDiv","styleValues","styleLocaleValue","listViewInstance","modifyButtonDiv","modifyElement","styleLocale","headings","dialogContent","getHeadingLevel","newStartLevel","newEndLevel","isEndLevel","outlineLevelValue","getTOCInputValue","outlineHeader","normalvalue","StylesDialog","modifyStyles","addNewStyles","initStylesDialog","newButtonDiv","newButtonElement","modifybuttonDiv","modifyButtonElement","paraStyles","updateStyleNames","linkedStyles","charStyles","linkedStyles_1","linkedStyle","charStyles_1","hideObjects","finalList","defaultStyleName","styleNames","ATTRIBUTES","RadioButton","RadioButton_1","radioGrp","getRadioGroup","angularValue","radioWrap","getSelectedValue","updateHtmlAttribute","formControlName","textLabel","rippleLabel","PageSetupDialog","isPortrait","loadPageSetupDialog","topMarginBox","leftMarginBox","bottomMarginBox","rightMarginBox","widthBox","heightBox","checkBox1","checkBox2","headerBox","footerBox","landscape","portrait","closePageSetupDialog","keyUpInsertPageSettings","applyPageSetupProperties","changeByPaperSize","paperSize","initPageSetupDialog","ejtabContainer","marginTab","paperTab","layoutTab","ejtab","marginHeader","paperHeader","layoutHeader","marginContent","paperContent","layoutContent","initMarginProperties","initPaperSizeProperties","initLayoutProperties","marginDiv","leftMarginDiv","rightMarginDiv","topTextBox","bottomTextBox","leftTextBox","rightTextBox","leftContainer","rightContainer","orientationDiv","orientationLabeldiv","orientationPropDiv","portraitDiv","landscapeDiv","sizeDiv","leftSizeDiv","rightSizeDiv","widthTextBox","heightTextBox","paperSizeDiv","layoutDiv","firstPageDiv","oddOrEvenDiv","textLabelDiv","propertyDiv","leftLayoutDiv","rightLayoutDiv","SPINNER_CLASS","ComboBox","preventBlur","targetFocus","customValue","valueMuteChange","doesItemExist","currentValue_1","setHoverList","inlineSearch","fixedHead","autofill","setAutoFill","isHover","currentFillValue","isAndroidAutoFill","setAutoFillSelection","prevEnd","curEnd","prevStart","curStart","isKeyNavigate","previousValue_1","updateCustomValueCallback","emptyObject","changeData","comboProps","isEscape","searchItem","TAGNAME","SplitButton","createPrimaryButton","createSecondaryButton","secondaryBtnObj","setAria","btnModel","primaryBtnObj","btnElem","dropDownBtnModel","callBackPromise","primaryBtnClickHandler","btnKeyBoardHandler","altdownarrow","CLOSE","TOOLTIP_WRAP","CONTENT","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_TOP","TIP_LEFT","TIP_RIGHT","POPUP_ROOT","POPUP_OPEN","POPUP_CLOSE","POPUP_LIB","POPUP_CONTAINER","mouseMoveTarget","isBodyContainer","formatPosition","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","tipClass","tooltipEle","elePos","mouseTrail","openPopupHandler","closePopupHandler","getScalingFactor","scalingFactors","elementsWithTransform","matrixValues","parentWithZoomStyle","offsetPos","calculateTooltipOffset","collisionPosition","calculateElementPosition","collisionLeft","collisionTop","collisionFlipFit","findTarget","needTemplateReposition","tooltipEventArgs","opensOn","tooltipAfterCloseEventArgs","xScalingFactor","yScalingFactor","tipWidth","tipHeight","tooltipEleWidth","tooltipEleHeight","arrowEle","tipAdjust","tipHeightAdjust","tipWidthAdjust","tooltipEleRect","arrowEleRect","showTipPointer","updateTipPosition","selEle","adjustArrow","tipPosExclude","tooltipWidth","tooltipHeight","arrowInnerELe","tipPointerPosition","POINTER_ADJUST","enableHtmlParse","tempFunction","tempArr_1","templateFunction","isSticky","tipClose","onStickyClose","existingCloseIcon","addDescribedBy","describedby","removeDescribedBy","orgdescribedby","tapHoldHandler","autoCloseTimer","targetHover","touchEndHandler","targetClick","closeDelay","targetList_1","ctrlId","target_1","restoreElement","mouseMoveBeforeOpen","mouseMoveBeforeRemove","showTimer","hideTimer","openDelay","beforeRenderArgs","beforeRenderCallback","tooltipBeforeRender","tooltipAfterRender","PopupAnimation","appendContainer","ctrlObj","beforeOpenCallback","openAnimation_1","wireMouseEvents","viewContainerRef","affectedPos","checkCollideTarget","newpos","collidedPosition","elePosVertical","elePosHorizontal","getOffSetPosition","elePosition","windowCollision","arrowleft","positionString","newPos","offsetType","isTooltipOpen","tooltipHide","popupHide","unwireMouseEvents","tooltipHover","tooltipMouseOut","onMouseOut","enteredElement","checkForTooltipElement","tooltipElementMouseOut","eventPageX","eventPageY","colpos","triggerList_1","getTriggerList","wireFocusEvents","windowResizeBound","keyDownBound","touchEndBound","scrollWheelBound","targetList","targetsList","targetList_2","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","currentTarget_1","TicksData","ColorRangeData","LimitData","TooltipData","Slider","horDir","verDir","rangeBar","transitionOnMaterialTooltip","customAriaText","isDragComplete","initialTooltip","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","formChecker","formResetValue","internationalization","formatInfo","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","setZindex","sliderContainer","showOn","sliderTrack","getThemeInitialization","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","showButtons","setButtons","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isMaterial3","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isFluent","isFluent2","isMaterialTooltip","firstElementClassName","limitBarFirst","limitBarSecond","firstHandle","secondHandle","customValues","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setBarColor","tooltipValue","setTooltipContent","tooltipObj","addTooltipClass","setAriaAttrValue","setPreviousVal","formatContent","ariaContent","handle1","handleVal1","handle2","handleVal2","oldCss","newCss","getTooltipTransformProperties","previousTooltipClass","tooltipBeforeOpen","setTooltipTransform","tooltipCollision","tooltipOffsetValue","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","openMaterialTooltip","refreshTooltip","tooltipContentElement","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","tooltipCollidedPosition","beforeCollision","tooltipBeforeClose","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","focusHandle","repeatHandlerUp","customTickCounter","bigNum","tickCount","orien","smallStep","showSmallTicks","largeStep","islargeTick","tickWidth","largestep","createTick","formatTicksValue","decimalPoints","ticksAlignment","ticksWrapper","tickElements","scaleAlignment","tickText","tickElement","tickValuePosition","otherChild","other","ariaValueText","isTickFormatted","valuenow","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","limitBar","preHandlePos1","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","updateRangeValue","preHandlePos2","tempStartEnd","startHandleFixed","endHandleFixed","xyToPosition","stepValueCalculation","percentStep","remain","addition","positionToValue","handlepos","handleVal","behindElement","eventX","eventY","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","xPostion","yPostion","rangeBarDragged","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","changeSliderType","updateConfig","changeRtl","limitsPropertyChange","setMinMaxValue","setTooltip","trackPosition","trackClassName","colorRange","startingPosition","trackContainer","APPLY","CANCEL","CURRENT","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HANDLER","HEX","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","HSVCONTAINER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","TILE","presets","ColorPicker","Apply","Cancel","ModeSwitcher","createWidget","createSplitBtn","enableOpacity","noColor","slicedValue","initialInputValue","tileRipple","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitBtn","onOpen","rgba","convertToRgbString","hexToRgb","getPopupEle","popupInst","getPopupInst","bindCallBackEvent","observeOpenArgs","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendElement","appendPalette","modeSwitcher","setNoColor","hsv","rgbToHsv","tile","roundedColor","presetName","addTileSelection","noColorEle","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","opacityEle","convertToOtherFormat","pValue","rgbToHex","cValue","updateOpacityInput","updatePreview","opacityTextBoxInst","previewContainer","isPicker","createNumericInput","numericInput","appendValueSwitchBtn","hexInput","clsName","appendOpacityValue","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","getTooltipInst","setTooltipOffset","convertToHsvString","updateHsv","isKey","removeTileSelection","convertRgbToNumberArray","pickerKeyDown","ctrlBtn","ctrlBtnKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","triggerChangeEvent","handlerDragPosition","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","switchToPalette","ctrlBtnClick","refreshImageEditorPopupPos","noColorTile","switchToPicker","grpEle","tiles","prevSelectedEle","tilePosition","keySelectionChanges","newEle","emptyCount","inputValueChange","numericElemColl","tooltipInst","bigInt","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","changeRtlProps","changePaletteProps","changeOpacityProps","StyleDialog","styleBasedOn","styleParagraph","onlyThisDocument","openDialog","showParagraphDialog","showNumberingBulletDialog","setBoldProperty","fontButtonClicked","setItalicProperty","setUnderlineProperty","fontSizeUpdate","fontFamilyChanged","fontColorUpdate","setLeftAlignment","setRightAlignment","setCenterAlignment","setJustifyAlignment","increaseBeforeAfterSpacing","decreaseBeforeAfterSpacing","updateNextStyle","typedName","getTypeValue","isUserNextParaUpdated","isEdit","editStyleName","updateOkButton","enableOrDisableOkButton","styleTypeChange","toggleDisable","styleBasedOnChange","styleParagraphChange","numberingBulletDialog","styleNameElement","tmpStyle","stylesDialogModule","createLinkStyle","listId_2","applyParagraphFormat","setStyleData","listId_1","dialog2","loadStyleDialog","closeStyleDialog","initStyleDialog","styleNameTypeDiv","nameWholeDiv","nameValue","styleTypeWholeDiv","styleTypeDivElement","styleTypeValue","styleBasedParaDiv","styleBasedOnWholeDiv","styleBasedOnDivElement","styleBasedOnValue","styleParagraphWholeDiv","styleParagraphDivElement","styleParagraphValue","optionsDiv","fontOptionsDiv","createFontOptions","paragraphOptionsDiv","createParagraphOptions","createFormatDropdown","formatBtn","styleDropdwn","fontFamilyElement","FontName","fontFamilyValue","fontFamilies","fontValue","fontStyleValue","fontSizeElement","fontGroupButton","createButtonElement","fontColorElement","colorPickerSettings","alignmentDiv","leftAlign","centerAlign","lineSpacingDiv","singleLineSpacing","onePointFiveLineSpacing","doubleLineSpacing","spacingDiv","indentingDiv","increaseindent","buttonElement","paragraphFOrmat","nxtName","basedOnIndex","ListViewModel","listIn","levelNumberIn","listLevelAdv","ListDialog","viewModel","alignedAt","listLevelElement","followNumberWith","numberStyle","restartBy","isListCharacterFormat","onTextIndentChanged","onStartValueChanged","onListLevelValueChanged","updateDialogValues","updateRestartLevelBox","onNumberFormatChanged","onAlignedAtValueChanged","onFollowCharacterValueChanged","onLevelPatternValueChanged","numberFormatTextBox","loadListDialog","disposeBindingForListUI","closeListDialog","showListDialog","buttonClass","initListDialog","wireAndBindEvent","listLevelDiv","divStyle","indentsDivLabelStyle","numberStyleDiv","numberFormatDiv","indentsDiv","startAtTextBox","textIndentAtTextBox","alignedAtTextBox","followCharacterElement","numberStyleEle","restartElement","formatInfoToolTip","option_1","listPatternConverter","followCharacterConverter","calculateAlignedAt","ParagraphDialog","paraOutlineLevel","isStyleDialog","directionDiv","keepWithNextValue","keepLineTogetherValue","widowControlValue","keyUpParagraphSettings","changeBeforeSpacing","local","focusBeforeSpacing","blurBeforeSpacing","clickBeforeSpacing","changeAfterSpacing","focusAfterSpacing","blurAfterSpacing","clickAfterSpacing","changeLeftIndent","changeRightIndent","changeLineSpacingValue","changeFirstLineIndent","special","changeByTextAlignment","changeByOutlineLevel","changeBidirectional","rtlButton","ltrButton","changeAlignmentByBidi","changeContextualSpacing","changeKeepWithNext","changeKeepLinesTogether","changeWidowControl","byIn","changeBySpacing","atIn","loadParagraphDialog","alignValue","getAlignmentValue","outlineValue","getOutlineValue","lineSpaceValue","contextSpacing","isApply","onParagraphFormat","openTabDialog","tabDialogModule","closeParagraphDialog","initParagraphDialog","tabContainer","indentContainer","alignmentWholeDiv","dirLabel","rtlDiv","rtlInputELe","ltrDiv","ltrInputELe","indentionWholeDiv","indentLabel","indentionSubDiv1","indentionSubDiv2","beforeTextDiv","afterTextDiv","specialDiv","byDiv","leftSpacingDiv","contextSpacingDiv","rightSpacingDiv","contextInputEle","by","spaceLabel","spacingWholeDiv","beforeSpacingWholeDiv","afterSpacingWholeDiv","lineTypeDiv","lineSpacingAt","lineBreakContainer","paginationDiv","paginationLabel","widowContorlContainer","keepNextContainer","keepLines","parastyle","isListBidi","FontDialog","fontStyleInternal","fontNameList","fontStyleText","fontSizeText","colorPicker","underlineDrop","strikethroughBox","doublestrikethrough","superscript","subscript","allcaps","loadFontDialog","closeFontDialog","onInsertFontFormat","listDialogModule","onCharacterFormat","fontStyleUpdate","fontFamilyUpdate","underlineUpdate","singleStrikeUpdate","enableCheckBoxProperty","doubleStrikeUpdate","superscriptUpdate","subscriptUpdate","allcapsUpdate","initFontDialog","effectLabel","strikeThroughElement","superScriptElement","subScriptElement","doubleStrikeThroughElement","allCapsElement","fontEffectSubDiv1","fontDiv","getFontDiv","getFontSizeDiv","colorDiv","fontColorDiv","fontColorLabel","fontEffectsDiv","effectsProperties","fontEffectSubDiv2","checkBoxDiv","fontEffectSubDiv3","sizeSubDiv1","sizeLabel","sizeSubDiv2","underlineElement","fontSubDiv2","fontStyleValues","fontSubDiv1","fontLabel","fontNameValues","fontValues","fontStyleLabel","TablePropertiesDialog","hasCellWidth","isTableBordersAndShadingUpdated","isCellBordersAndShadingUpdated","isCellOptionsUpdated","isTableOptionsUpdated","onBeforeOpen","loadTableProperties","onCloseTablePropertyDialog","applyTableProperties","titleTextBox","descriptionTextBox","preferCheckBox","rowHeightCheckBox","preferredCellWidthCheckBox","containerWidth_1","tableWidth_1","rowHeightValue","isEqualTableFormat","isEqualRowFormat","isEqualCellFormat","closeTablePropertiesDialog","applyTableSubProperties","applySubCellOptions","applySubTableOptions","tableWidthBox","tableWidthType","leftIndentBox","rowHeightBox","repeatHeader","allowRowBreak","cellWidthBox","cellWidthType","activeTableAlignment","changeTableCheckBox","changeTableAlignment","updateClassForAlignmentProperties","tableTab","changeTableRowCheckBox","changeTableCellCheckBox","changeCellAlignment","updateClassForCellAlignment","cellTab","getCellAlignment","showTableOptionsDialog","showBordersShadingsPropertiesDialog","bordersAndShadingDialogModule","showCellOptionsDialog","paraFormatIn","rowFormatInternal","initTablePropertyDialog","rowTab","altTab","separatorLine","tableHeader","rowHeader","cellHeader","altHeader","tableContent","rowContent","cellContent","altContent","initTableProperties","initTableRowProperties","initTableCellProperties","initTableAltProperties","alignMentButtons","calculateGridValue","setTableProperties","setTableRowProperties","setTableCellProperties","setTableAltProperties","bordersAndShadingButton","tableOptionButton","cellOptionButton","onTableWidthChange","onTableWidthTypeChange","onLeftIndentChange","onRowHeightChange","onRowHeightTypeChange","onAllowBreakAcrossPage","onRepeatHeader","onCellWidthChange","onCellWidthTypeChange","sizeHeader","childContainer1","childContainer2","preferredWidthDiv","controlDiv","alignmentContainer","alignmentHeader","alignmentSubContainer","classDivName","leftDiv","leftAlignDiv","centerAlignDiv","leftlabel","centerlabel","rightlabel","leftIndenetContainer","tableDirHeader","tableDirContainer","tableOptionContiner","formatNumericTextBox","tableHasWidth","isChanged","groupButtons","groupButton","sizeLabeldiv","childDiv1","childdiv2","rowHeightDiv","allowRowContainer","repeatHeaderContaniner","enableRowHeight","enabledHeader","enableRepeatHeader","altDiv","titleDiv","childdiv1","titleTextBox1","descriptionDiv","descriptionText","preferredCellDiv","preferredCellWidth","divAlignment","topDiv","topAlignDiv","cellTopAlign","cellCenterAlign","bottomAlignDiv","cellBottomAlign","topLabel","bottomLabel","cellAlignments","BordersAndShadingDialog","isShadingChanged","applyBordersShadingsProperties","tablePropertiesDialog","checkClassName","previewDivTopTop","previewDivTopBottom","previewDivTopCenter","previewDivBottomcenter","previewDivBottomLeft","previewDivBottomRight","previewDivDiagonalRight","previewDivLeftDiagonal","shadingColorPicker","ulelementShading","noneDiv","currentTableFormat","updateBorder","rowHorizontalBorder","tableHorizontalBorder","rowVerticalBorder","tableVerticalBorder","isNoneBorder","closeDialog","closeBordersShadingsDialog","handleSettingCheckBoxAction","tableBorderDialogId","updateClassForSettingDivElements","setSettingPreviewDivElement","boxDiv","allDiv","customDiv","handlePreviewCheckBoxAction","compareClass","handlePreviewCheckBoxShowHide","showHidePreviewDivElements","applyTableCellPreviewBoxes","previewDivBottomcenterContainer","previewDivTopCenterContainer","previewVerticalDiv","previewHorizontalDiv","previewDivBottomRightContainer","noneDivTransparent","boxDivTransparent","allDivTransparent","customDivTransparent","previewLeftDiagonalDiv","previewRightDiagonalDiv","applyPreviewTableBackgroundColor","previewDiv","applyPreviewTableBorderColor","initBordersAndShadingsDialog","settingAndPreviewContainer","settingsContiner","styleContainer","previewContiner","previewSubContainer1","previewSubContainer2","styleSubContainer","dropdownListDiv","dropDownList","widthcontainerDiv","widthNumericDiv","widthNumeric","colorText","borderColorPickerElement","settingText","settingsSubContiner","noneDivContainer","noneDivLabel","boxDivContainer","boxDivLabel","allDivContainer","allDivLabel","customDivContainer","customDivLabel","previewText","previewDivVerticalContainer","previewDivTopTopContainer","previewDivTopBottomContainer","previewDivLeftDiagonalContainer","previewDivHorizontalContainer","previewDivBottomLeftContainer","previewDivDiagonalRightContainer","previewDivTopTopTransParent","previewDivTopCenterTransParent","previewDivTopBottomTransParent","previewDivLeftDiagonalTransParent","previewDivBottomLeftTransparent","previewDivBottomcenterTransparent","previewDivBottomRightTransparent","previewDivDiagonalRightTransparent","shadingContiner","shadingText","shadings","colorPickerDiv","shadingColorPickerElement","shdApply","ulelementShadingValue","Svg","borderColorPicker","tableBorder","rowBorder","loadBordersShadingsPropertiesDialog","settingDivs","tempClassName","isShowHidePreviewTableElements","settingDiv","compareElementClass","setElement","compareElement","setPropertyPreviewDivElement","cloneBorders","getSelectionBorderFormat","copyToBorder","selectionBorder","horizontalBorder","verticalBorder","diagonalDownBorder","customBorder","diagonalUpBorder","CellOptionsDialog","removeEvents","changeSameAsTable","sameAsTableCheckBox","applyTableCellProperties","applyTableOptions","closeCellMarginsDialog","initCellMarginsDialog","innerDivLabel","getCellMarginDialogElements","divBtn","loadCellMarginsDialog","sameAsTable","loadCellProperties","enableTextBox","enableCheckBox","applyCellMarginsInternal","applyCellMarginsForCells","rowCells","iterateCells","applySubCellMargins","cellOptions","TableOptionsDialog","cellSpaceTextBox","changeAllowSpaceCheckBox","allowSpaceCheckBox","initTableOptionsDialog","cellSpaceLabel","table2","cellspacingTextBox","sourceTable","applyTableOptionsHistory","applySubTableOptionsHelper","documentLocale","SpellChecker","langIDInternal","enableSpellCheckInternal","uniqueSpelledWords","spellSuggestionInternal","uniqueKey","removeUnderlineInternal","uniqueWordsCountInternal","performOptimizedCheck","isChangeAll","uniqueWordsCollection","createGuid","exactText_1","handleReplace","retrieveExactElementInfo","startPattern","endPattern","handleIgnoreOnce","contextElement","contextItem","allsuggestions","spellCheckSuggestion","constructInlineMenu","spellSuggestion","hasError","erroElements","updateStatusForGlobalErrors","handleErrorCollection","getCombinedElement","errorInElement","inlineSuggestion","errorElement","addErrorCollection","elementToCompare","suggestions","compareErrorTextElement","compareTextElement","addCorrectWordCollection","isCorrectWord","copyElement","isSamePage","HasSpellingError","textToCombine","canCombine","checkNext","combinedElements","prevText","prevCombined","isPrevField","lookThroughPreviousLine","nextText","canCombine_1","lookThroughNextLine","checkCombinedElementsBeIgnored","handleCombinedElements","currentText_1","checkArrayHasSameElement","elementToCheck","matchResults","getMatchedResultsFromElement","textResults","handleMatchedResults","wavyLineY","createErrorElementWithInfo","checkSpelling","checkSuggestion","addWord","isByPage","spellchecker","httpRequest_1","service_1","spellCheckByPage","spellCheck","setCustomHeaders","spellCheckData","LanguageID","TexttoCheck","CheckSpelling","CheckSuggestion","AddWord","checkForNextError","errorWords","updateErrorElementTextBox","textLineInfo","updateSuggestionDialog","matchedText","beginingwidth","errorCount","sfdtExport","textExportModule","textExport","spelledWords","uniqueWordsCount","checkForUniqueWords","addUniqueWordsToLocalStorage","clearCache","spellData","randNo","wordToCheck","uniqueWords","SpellCheckDialog","onIgnoreClicked","removeErrors","onIgnoreAllClicked","addToDictClicked","changeButtonClicked","isSpellChecking","changeAllButtonClicked","handleRetrievedSuggestion","initSpellCheckDialog","suggestion","textContainer","spellContainer","spellingListView","ignoreButtonElement","ignoreAllButtonElement","addDictButtonElement","suggestionDiv","suggestionContainer","suggestListDiv","suggestionListView","suggestBtnContainder","changeButtonElement","changeButton","changeAllButtonElement","changeAllbutton","CheckBoxFormFieldDialog","autoButton","exactButton","exactlyNumber","changeBidirect","notCheckedButton","checkedButton","insertCheckBoxField","closeCheckBoxField","checkBoxField","bookmarkInputText","tooltipInputText","checBoxEnableElement","initCheckBoxDialog","dialogDiv","headingLabel","sizeParentDiv","autoDiv","exactDiv","autoEle","exactEle","exactNumberDiv","exactNumber","defaultValueLabel","defaultcheckDiv","notcheckDiv","checkDiv","notcheckEle","checkEle","fieldSettingsLabel","settingsTotalDiv","totalToolTipDiv","totalBookmarkDiv","checkBoxEnableDiv","checBoxEnableEle","loadCheckBoxDialog","checkBoxDialogTarget","TextFormFieldDialog","updateTextFormtas","defautText","updateFormats","defaultTextInput","insertTextField","valid","typeDropDown","isValidDateFormat","maxLengthNumber","textFormatDropDown","bookmarkTextInput","tooltipTextInput","fillInEnable","closeTextField","initTextDialog","firstDiv","typeDiv","defaultTextDiv","typeDropDownitems","typeDropDownList","changeTypeDropDown","secondDiv","maxLengthDiv","textFromatDiv","textFormatList","formatDropDownitems","fileSettingsLabel","thirdDiv","toolTipTotalDiv","bookmarkTotalDiv","fillInEnableDiv","fillInEnableEle","defaultTextLabel","loadTextDialog","textDialogTarget","textFormatLabel","DropDownFormFieldDialog","addItemtoList","dropDownItems","drpDownItemsInput","currentSelectedItem","moveUpItem","getSelectedIndex","moveDownItem","insertDropDownField","dropDownField","bookmarkInput","tooltipInput","dropDownEnable","closeDropDownField","itemsDrpItemsLabel","addButtonDiv","addButtonEle","editButtonDiv","editButtonEle","editButton","removeButtonDiv","removeButtonEle","removeButton","moveBtnDiv","moveUpButtonDiv","moveUpButtonEle","moveUpButton","moveDownButtonDiv","moveDownButtonEle","moveDownButton","toolTipDiv","dropDownEnableDiv","dropDownEnableEle","loadDropDownDialog","dropDownInstance","toSelectItem","fromIndex","toIndex","dropDownDialogTarget","NotesDialog","noteNumberFormat","footnotesFormat","reversetype","notesList","startValueTextBox","endnotesFormat","onInsertFootnoteClick","formats","renderFormat","notesDialog","idName","startatValue","footCount","endnoteListValue","listFocus","Optimized","optimizedHeightCollection","getkeyFromCharFormat","getFontInfo","baseLineFactor","heightFactor","HeightFactor","BaselineFactor","fontInfo","fontSizeInfo","tempDiv","textTopVal","ColumnsDialog","lineCheckbox","equalCheckbox","createTextBox","oneDiv","twoDiv","threeDiv","rightDiv","columnTable","canUpdateColumnWidthAndSpacing","widthChange","checkAndApplyColumnFormatWidth","spaceChange","checkAndApplyColumnFormatSpace","spaceCal","updatedNumber","col_1","col_2","col_3","col_4","col_5","col_6","col_7","col_8","col_9","columnSpace","widthCal","col_10","col_11","col_12","col_13","col_14","valueWidthEqualFirst","valueWidthEqualsecond","col_15","col_16","closeColumnsDialog","openColumnsDialog","pageWidthBox","columnDialogId","applyColumnDialog","startParagraphInfo","initColumnsDialog","PresetsContainer","oneDivContainer","oneDivLabel","twoDivContainer","twoDivLabel","threeDivContainer","threeDivLabel","leftDivContainer","leftDivLabel","rightDivContainer","rightDivLabel","nuberOfColumnsContainer","subcontainer","subcontainer1","lineCheckDiv","lineCheck","widthAndSpacingContainer","widthAndSpacingContainerDiv","widthAndSpacingText","columnElementDiv","widthcontainerDiv1","widthContainer","columnDiv","row1","columnCountBox1","widthCountBox1","cell3","spacingCountBox1","equalCheckDiv","equalCheck","widthCountBox","spacingCountBox","TabDialog","isBarClicked","removedItems","tabStopList","isAddUnits","defaultTabStopIn","selectedTabStop","getTabAlignmentValue","getTabLeaderValue","closeTabDialog","textBoxInputChange","setButtonClick","tempCollection","tabStopListObj","clearAllButtonClick","displayDiv","updateButtons","clearButtonClick","onBarClick","clearTabLeaderButton","disableOrEnableTabLeaderButton","onTabAlignmentButtonClick","updateTabLeaderButton","initTabsDialog","tabStopLabelDiv","tabStopDiv","tabListDiv","defaultTablabelDiv","defaultTabDiv","defaultTabStopDiv","defaultTabStop","defaultTabWarningDiv","alignmentLabelDiv","alignmentPropertyDiv","alignmentPropertyDiv1","leftRadioBtn","decimalDiv","decimalRadioBtn","alignmentPropertyDiv2","centerDiv","centerRadioBtn","barRadioBtn","alignmentPropertyDiv3","rightRadioBtn","tabLeaderPropertyDiv","tabLeaderPropertyDiv1","noneRadioBtn","underscoreDiv","underscoreRadioBtn","none","underscore","tabLeaderPropertyDiv2","dottedDiv","dottedRadioBtn","singleDiv","singleRadioBtn","dotted","single","tabLeaderPropertyDiv3","HyphenDiv","HyphenRadioBtn","Hyphen","setbuttonDiv","setButtonElement","clearbuttonDiv","clearButtonElement","clearAllbuttonDiv","clearAllButtonElement","clearAllButton","updateTabAlignmentButton","clearTabAlignmentButton","Ruler","segmentWidth","tickAlignment","arrangeTick","rulerStartValue","zeroPosition","addSegmentWidth","updateRulerGeometry","showHideRuler","renderRulerSpace","rulerGeometry","getRulerGeometry","createHtmlElement","rulerSize","getRulerSize","getRulerSVG","unitLength","unitOffset","updateSegments","run","rulerSegment","getNewSegment","updateSegment","segWidth","updateSegmentWidth","defStartValue","hRulerOffset","vRulerOffset","labeltext","updateTickLabel","getBBox","isRightOrBottom","setAttributeSvg","createNewTicks","createTickLabel","tick","tickInterval","createSvgElement","getLinePoint","linePoint","multiples","createMarkerLine","rulerSvg","rulerObj","drawRulerMarker","rulerSvgElements","rulerSpace","RulerHelper","hideTabStopSwitch","tabStopStwitch","showHideElement","hideRulerBottom","hRulerBottom","setAttributeHtml","applyStyleAgainstCsp","renderOverlapElement","renderRulerMarkerIndicatorElement","renderTab","divElements","currentDiv","renderRuler","showDialog","pageElement","renderRulerMargins","ruler","updateMargin","updateRulerPosition","renderIndents","multiColumnElement","columnInitialValue","currentScrollLeft","initialRightMargin","finalmouseXRelativeToDiv","mouseDownTabValue_1","mouseUpTabValue_1","resizerEnabled","isLeftRulerMargin","isLeftMultiColumn","isRightMultiColumn","divRect","pixelValue","mouseXRelativeToDiv","isOnIndent","rulerMarginDiv","maginLeft","rulerZeroPoint","rightMarginValue","rightIndentValue","leftMarginValue","leftMaxLimit","leftMinLimit","rightMinLimit","rightMaxLimit","currentRightMargin","resizeRulerMargins","indicatorLineValue","currentTabStopElement","divRect_1","lineSvg","paraWidth","visibleElement","dataNameValue","initialValue_1","finalvalue","startMargin","initialYValue","isTopRulerMargin","mouseXRelativeToDiv_1","bottomMarginValue","topMinLimit","topMaxLimit","bottomMinLimit","bottomMaxLimit","currentBottomMargin","resizeVRulerMargins","bottomtMargin","endMargin","updateIndicatorLines","hRulerSvg","hRulerLine","vRulerSvg","vRulerLine","pageData","createIndicatorLines","hSvgAttr","hSvg","verticalLineAttr","vLine","vSvgAttr","vSvg","horizontalLineAttr","hLine","updateIndentMarkers","finalValueTemp","updateTabStopMarkers","RenderedTabElement","tabMarker","elementToRemove","rulerContainer","rulerMargin","rulerHeight","rulerstyle","rulerattributes","updateRulerMargins","updateHorizontalRulerMargin","verticalRulerMarginDiv","rulerMarginDivHeight","skipLoop","tableBidi","currnLefttMargin","rulerMarginDivWidth","horizontalRulerMarginDiv","isRulerTopMargin","currentTopMargin","mousePosition","isRulerLeftMargin","currentLeftMargin","getRulerOrigin","pathattr","firstLineOffset_1","isDragging_1","initialValue_2","rightIndent_1","hangingIndentSvg","hangingLineOffset_1","minLimit_1","maxLimit_1","leftIndent_1","isDragging_2","initialValue_3","rightPosition","leftIndentSvg","leftLineOffset_1","firstIndentInitialValue_1","diff_1","minLimit_2","maxLimit_2","isHangingIndent_1","isDragging_3","initialValue_4","rightIndentSvg","rightLineOffset_1","isDragging_4","initialValue_5","leftIndent_2","firstLineIndent_1","nearestElement","indentValue","rerenderRuler","updateRulerDimension","updateTableMarkers","removeTableMarkers","renderedTableMarkers","renderTableMarkers","tableXPos","cellWidgets","tableMarker","tableMarkerOffset","startXPosition","currentMarkerPostion","hRuler_1","updateRulerDiv","updateRulerSpace","getVerticalHeight","pageheight","leftTab","centerTab","rightTab","decimalTab","barTab","tabStopElement_1","showTabDialog","tabStopOffset_1","isDragging_5","justification_1","currrentParagraph_1","tabIndex_1","currentTabStop_1","leftIndentValue","DatePickerDialog","initDateContentDialog","valueChange","ContentControlPropertiesDialog","valueBoxInput","loadPropertiesdialog","contentEditedCheckBox","contentDeletedCheckBox","removeCheckBox","multilineCheckBox","titleText","tagText","plainTextPropertiesDiv","dropDownPropertiesDiv","closePropertiesDialog","initContentControlPropertiesDialog","lockedDiv","lockedLabel","contentDelete","contentDeleted","contentEdit","contentEdited","plainTextLabel","lockedcontentLabel","valueBoxDiv","PicContentControlDialog","onInsertPicClick","imagePicker","onImageChange","DocumentEditorSettings","selectionColor","itertationCount","roomName","DocumentSettings","DocumentEditor","AutoResizeSettings","enableHeaderFooterIn","disableHistoryIn","documentSettingOps","isSettingOp","createdTriggered","serverActionSettingsImport","initHelper","DocumentEditor_1","checkModuleInjection","enableSearch","enableContextMenu","enableSpellCheck","isDocumentLoadedIn","isHeaderEmpty","isFooterEmpty","firstBodywidget","enableImageResizer","enableOptimizedTextMeasuring","optimizedModule","regularModule","renderRulers","renderNavigationPane","autoResizeOnVisibilityChange","localizeDialogs","applyColorPickerProperties","fontColorInputElement","shadingBtn","borderBtn","footNotesDialogModule","pageSetupDialogModule","columnsDialogModule","tableDialogModule","setDefaultCharacterFormat","setDefaultParagraphFormat","setDefaultSectionFormat","clearPreservedCollectionsInViewer","saveContent","fireBeformFieldFill","fireAfterFormFieldFill","enableParagraphDialog","showPageSetupDialog","enablePageSetupDialog","showColumnsDialog","enableColumnsDialog","enableFontDialog","enableTableOptionsDialog","showTableDialog","enableTableDialog","showDateContentDialog","enableDateContentDialog","showPicContentControlDialog","showPicCCButton","pictureElement","showpicContentControlDialogModule","picContentControlDialogModule","enablePicContentControlDialog","showPicContentControl","pictureCC","picture_cc","contentControlPara","contentControlImageCheck","showContentPropertiesDialog","enableContentControlPropertiesDialog","showTableOfContentsDialog","enableTableOfContentsDialog","enableStyleDialog","showHyperlinkDialog","enableHyperlinkDialog","showBookmarkDialog","bookmarkDialogModule","enableBookmarkDialog","showStylesDialog","enableListDialog","showTablePropertiesDialog","enableTablePropertiesDialog","showBordersAndShadingDialog","enableBordersAndShadingDialog","enablePrint","enableSfdtExport","enableWordExport","enableTextExport","enableOptionsPane","enableFootnoteAndEndnoteDialog","sfdtText","isValidUrl","getSfdtFromUrl","processSfdt","isValidBase64","getSfdtFromBase64string","File","convertToSfdt","convertFromSfdtBlob","convertFromBlob","clearSpellCheck","decoded","btoa","binaryString","ajax","readAsText","enableAllModules","getFormFieldNames","formFieldNames","formFieldInfo","resetFormFields","importFormData","exportFormData","importContentControlData","contentInfo","exportContentControlData","properties_1","contentControlData","getContentControlValue","getContentControlValueForText","resetContentControlData","contentControInfo","fieldPara","fitPage","printModule","exportAsPath","wordExportModule","zipArchiveBlobToSfdtFile","getBase64StringFromBlob","createNewBodyWidget","dialogType","showSpellCheckDialog","showOptionsPane","showRestrictEditingPane","destroyDependentModules","oldListId","linkedStyleData","sty","protectionData","getPendingActions","ServerActionSettings","HeaderFooterProperties","FormFieldSettings","CollaborativeEditingSettings","ContainerServerActionSettings","isHeaderTopApply","isFooterTopApply","initHeaderFooterPane","toolbarModule","enableDisableElements","initializeHeaderFooter","propertiesPaneContainer","showHeaderFooterPane","enableDisablePropertyPaneButton","onSelectionChange","createDivTemplate","headerLabel","optionsLabelDiv","optionsLabel","changeFirstPageOptions","oddOrEven","changeoddOrEvenOptions","linkToPreviousDiv","changeLinkToPreviousOptions","positionLabelDiv","positionLabel","positionDiv","headerTopDiv","headerTopLabel","headerFromTop","footerBottomDiv","footerBottomLabel","footerFromTop","divElement","onHeaderValue","onFooterValue","changeHeaderValue","changeFooterValue","showHeaderProperties","headerTop","footerTop","ImageProperties","isWidthApply","isHeightApply","isMaintainAspectRatio","initializeImageProperties","initImageProp","initImageAltProp","imageDiv","outerDiv","widthElement","createImagePropertiesDiv","widthNumericBox","heightNumericBox","aspectRatioDiv","aspectRatioBtn","AltDiv","inputId","spanContent","onAspectRatioBtnClick","onImageWidth","onImageHeight","applyImageWidth","applyImageHeight","altText","ratio","showImageProperties","updateImageProperties","TocProperties","initializeTocPane","tocHeaderDiv","initTemplates","tocOptionsDiv","contentStylesDropdown","checkboxContent","updateTocProperties","rightalignPageNumber","showPageNumber","cancelBtn","updateBtn","onInsertToc","showPropertiesPane","previousContext","showPropertiesPaneOnSelection","showTocPane","closeButtonFloat","closeButtonMargin","template1","template1Div","templateContent1","templateContent2","templateContent3","createDropDownButton","contentStyleElement","borderLevelStyle","showPageNumberDiv","showpagenumberCheckboxElement","rightalignpagenumberCheckboxElement","hyperlinkDiv","hyperlinkCheckboxElement","footerElement","updatebuttoncontentStyleElement","cancelbuttoncontentStyleElement","previousContextType","prevContext","isRetrieving","appliedHighlightColor","createChangecase","changeCaseDropdown","changeCaseContainer","initializeTextPropertiesDiv","wholeDiv","textProperties","textDiv","createDiv","fontFamilyDiv","createDropDownListForFamily","fontSizeDiv","divClassName","createDropDownListForSize","propertiesDiv","createButtonTemplate","leftDiv2","createFontColorPicker","initializeHighlightColorElement","createHighlightColorSplitButton","highlightColorInputElement","rightDiv2","hgltSplitObj","highlightColorElement","applyHighlightColor","yellowDiv","createHightlighColorPickerDiv","brightGreenDiv","turquoiseDiv","hotPinkDiv","blueDiv","redDiv","darkBlueDiv","tealDiv","greenDiv","violetDiv","darkRedDiv","darkYellowDiv","gray50Div","gray25Div","blackDiv","nocolor","nocolorDiv","nocolorDivValue","onHighLightColor","applyHighlightColorAsBackground","removeSelectedColorDiv","hgltColor","getHighLightColor","iconcss","boldBtn","italicBtn","underlineBtn","strikethroughBtn","superscriptBtn","subscriptBtn","clearFormatBtn","fontSelectElement","enableCsp","changeFontFamily","changeFontSize","boldAction","italicAction","underlineAction","strikethroughAction","superscriptAction","subscriptAction","changeFontColor","clearFormatAction","Paragraph","appliedBulletStyle","appliedNumberingStyle","appliedLineSpacing","splitButtonClass","initializeParagraphPropertiesDiv","paragraphDiv","createDivElement","styleDiv","styleSelect","createStyleDropDownList","indentWholeDiv","indentDiv","indentClassName","leftAlignment","centerAlignment","rightAlignment","increaseIndentIconCss","decreaseIndentIconCss","incDecIndentDiv","listDiv","paraDiv","createLineSpacingDropdown","listDropDown","bulletButton","numberingList","bulletIconCss","numberIconCss","createBulletListDropButton","createNumberListDropButton","createSeparator","leftAlignmentBtn","rightAlignmentBtn","justifyBtn","decreaseIndentBtn","increaseIndentBtn","bordersBtn","showHiddenMarksBtn","centerAlignmentBtn","dropdown","lineSpacingAction","noneNumberTag","numberedNoneClick","numberList","numberedNumberDotClick","lowLetter","numberedLowLetterClick","upLetter","numberedUpLetterClick","lowRoman","numberedLowRomanClick","upRoman","numberedUpRomanClick","updateSelectedNumberedListType","removeSelectedList","numberedListBtn","applyLastAppliedNumbering","updateSelectedBulletListType","flowerBullet","tickBullet","noneBulletTag","applyLastAppliedBullet","bulletDotClick","bulletCircleClick","bulletSquareClick","bulletArrowClick","bulletTickClick","bulletFlowerClick","bulletListBtn","spanDiv","selectStyleValue","updateOptions","constructStyleDropItems","leftAlignmentAction","rightAlignmentAction","centerAlignmentAction","justifyAction","increaseIndentAction","toggleHiddenMarks","decreaseIndentAction","setLineSpacing","applyStyleValue","TextProperties","isTableProperties","initializeTextProperties","updateStyles","showTextProperties","generateUniqueID","TableProperties","imageProperty","isTopMarginApply","isRightMarginApply","isBottomMarginApply","isLeftMarginApply","groupButtonClass","tableTextProperties","initializeTablePropPane","initFillColorDiv","initBorderStylesDiv","initCellDiv","initInsertOrDelCell","initCellMargin","initAlignText","addTablePropertyTab","textHeader","propertiesTab","changeBackgroundColor","tableOutlineBorder","onOutlineBorder","tableAllBorder","onAllBorder","tableCenterBorder","onInsideBorder","tableLeftBorder","onLeftBorder","tableCenterVerticalBorder","onVerticalBorder","tableRightBorder","onRightBorder","tableTopBorder","onTopBorder","tableCenterHorizontalBorder","onHorizontalBorder","tableBottomBorder","onBottomBorder","insertRowAbove","onInsertRowAbove","insertRowBelow","onInsertRowBelow","insertColumnLeft","onInsertColumnLeft","insertColumnRight","onInsertColumnRight","onDeleteRow","horizontalMerge","onMergeCell","alignTop","applyAlignTop","alignBottom","applyAlignBottom","alignCenterHorizontal","applyAlignCenterHorizontal","onTopMargin","onRightMargin","onLeftMargin","onBottomMargin","applyTopMargin","applyRightMargin","applyLeftMargin","applyBottomMargin","borderSize","fillDiv","createColorPickerTemplate","borderStyleDiv","div1","div2","div3","btnStyle","styleTypeDiv","borderSizeButton","createBorderSizeDropDown","borderSizeColorElement","cellDiv","tableOperationDiv","cellMarginDiv","textboxDivStyle","textboxParentDivStyle","createCellMarginTextBox","textboxLabel","textboxId","cellMarginParentDiv","cellMarginLabel","cellMarginTextbox","cellMarginNumericText","createDropdownOption","onBorderSizeChange","borderBottomColor","isBorderWidth","showTableProperties","updateTabContainerHeight","paneHeight","StatusBar","docEditor","statusBarDiv","initializeStatusBar","pageNumberInput","editablePageNumber","pageNumberOfLabelStyle","updatePageNumber","label1","updatePageCount","verticalLine","spellCheckBtn","addSpellCheckElement","spellCheckButton","pageButton","webButton","addRemoveClass","zoomBtn","onZoom","spellCheckItems","onSpellCheck","currentLanguage","allowSuggestion","setZoomValue","updateZoomContent","setSpellCheckValue","editorPageCount","updatePageNumberWidth","updatePageNumberOnViewChange","toggleWebLayout","togglePageLayout","addToElement","removeFromElement","appendDiv","webBtn","pageBtn","DocumentEditorContainer","documentEditorInternal","newModel","oldModel","restrictEditingToggleHelper","showHidePropertiesPane","toggleTrackChanges","setserverActionSettings","enableDisableInsertComment","customizeDocumentEditorSettings","refreshFontFamilies","reInitToolbarItems","toolbarItems","statusBar","createToolbarContainer","enableToolbar","initToolBar","initContainerElement","initializeDocumentEditor","headerFooterProperties","imageProperties","tocProperties","statusBarElement","containerTarget","enableDisableToolBarItem","toggleRestrictEditing","setFormat","import","propertiesPaneContainerBorder","editorContainer","toolbarContainer","documentEditorTarget","selectionChange","contentChange","onContentChange","documentChange","onDocumentChange","requestNavigate","onRequestNavigate","viewChange","onViewChange","customContextMenuSelect","onCustomContextMenuSelect","customContextMenuBeforeOpen","onCustomContextMenuBeforeOpen","beforePaneSwitch","onBeforePaneSwitch","commentBegin","onCommentBegin","onCommentEnd","commentDelete","onCommentDelete","beforeAcceptRejectChanges","onBeforeAcceptRejectChanges","beforeCommentAction","onCommentAction","onTrackChange","serviceFailure","beforeXmlHttpSend","onZoomFactorChange","updateShowHiddenMarks","updateStyleCollection","triggerAutoResize","onBeforeAutoResize","onEnableTrackChanges","onOptionPaneChange","propertiesPaneButton","enableDisableUndoRedo","isCommentEditing","navLink","isProtectedDocument","isSelectionInProtectecRegion","showProperties","defaulthtmlkeys","delayUpdate","ComponentBase","mountingState","attrKeys","cachedTimeOut","isAppendCalled","initRenderCalled","isReactForeceUpdate","isshouldComponentUpdateCalled","refreshChild","canDelayUpdate","renderReactComponent","reactElement","nextProps","silent","dProps","prevProps","statelessTemplates","propkey","isClassName","htmlattributes","compareValues","propsClsName","dpropsClsName","refreshProperties","processComplexTemplate","compTemplate","complexTemplate","PropVal","getDefaultAttributes","propKeys","ignoreProps","controlAttributes","reactUid","onChange","syntheticEvent","value2","tempVal2","compareObjects","newProps","lenSimilarity","diffArray","checkInjectedModules","prevModule","curModule_1","getInjectedServices","directivekeys","changedProps","directiveValue","validateChildren","skipRefresh","prevProperties","dKeys","compareOutput","_c1","allColumns","propInstance","changedProps_1","hasModule","portal","templateNames","tempPortal","propIndexCount","childCache","childs_1","ifield","getChildType","childProps","getChildProps","isDirective","matcher","subChild_1","accessProp","cacheVal","cachedValue","childs_2","isService","services","classObj","ComplexBase","stringCompiler","cEle","actTemplate","actData","rele","derivedClass","DocumentEditorContainerComponent","statelessTemplateProps","immediateRender","baseClass","TOOLBAR_ID","NEW_ID","OPEN_ID","UNDO_ID","REDO_ID","INSERT_IMAGE_ID","INSERT_IMAGE_LOCAL_ID","INSERT_TABLE_ID","INSERT_LINK_ID","BOOKMARK_ID","COMMENT_ID","TRACK_ID","TABLE_OF_CONTENT_ID","HEADER_ID","FOOTER_ID","PAGE_SET_UP_ID","PAGE_NUMBER_ID","BREAK_ID","LISTVIEW_ID","FIND_ID","CLIPBOARD_ID","RESTRICT_EDITING_ID","PAGE_BREAK","SECTION_BREAK","SECTION_BREAK_CONTINUOUS","COLUMN_BREAK","READ_ONLY","PROTECTIONS","FORM_FIELDS_ID","UPDATE_FIELDS_ID","TEXT_FORM","CHECKBOX","DROPDOWN","FOOTNOTE_ID","ENDNOTE_ID","COLUMNS_ID","PAGE_SET_UP","CONTENT_CONTROL_ID","RICHTEXT_CONTENT_CONTROL_ID","PLAINTEXT_CONTENT_CONTROL_ID","COMBOBOX_CONTENT_CONTROL_ID","DROPDOWNDOWN_CONTENT_CONTROL_ID","DATEPICKER_CONTENT_CONTROL_ID","CHECKBOX_CONTENT_CONTROL_ID","PICTURE_CONTENT_CONTROL_ID","importHandler","renderToolBar","toolbarWrapper","toolbarTarget","initToolbarItems","propertiesPaneDiv","initToolbarDropdown","id_1","imgDropDwn","onDropDownButtonSelect","PageSetUpDropDwn","ContentControlDropDwn","breakDataSource","ddbOption","breakDropDwn","breakListView","onListViewSelection","filePicker","toggleButton","restrictIconCss","restrictDropDwn","onBeforeRenderRestrictDropdown","formFieldDropDown","selectedIcon","toggleRestrictIcon","toggleProtection","paneDiv","onWrapText","togglePropertiesPane","onFileChange","EJ2Toolbar","getToolbarItems","toolbarTimer","toggleTrackChangesInternal","onToc","toggleLocalPaste","toggleEditing","restrictEditingId","fileSize","formatType_1","fileReader_1","isSupportedFormatType","enableDisableFormField","trackId","isProtectedContent","containsItem","undoElement","redoElement","kindOf","thing","kindOfTest","typeOfTest","isArrayBuffer","isFunction","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","allOwnKeys","findKey","_key","_global","globalThis","self","global","isContextDefined","isTypedArray","TypedArray","isHTMLForm","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","ALPHA","DIGIT","ALPHABET","ALPHA_DIGIT","isAsyncFn","_setImmediate","setImmediateSupported","postMessageSupported","callbacks","_ref2","asap","isBuffer","isFormData","isArrayBufferView","isView","isBoolean","isStream","pipe","caseless","targetKey","stripBOM","inherits","superConstructor","toFlatObject","sourceObj","destObj","propFilter","merged","searchString","forEachEntry","matchAll","hasOwnProp","freezeMethods","writable","toObjectSet","arrayOrString","delimiter","define","toCamelCase","noop","toFiniteNumber","generateString","alphabet","isSpecCompliantForm","toJSONObject","visit","reducedValue","isThenable","AxiosError","captureStackTrace","utils","lineNumber","columnNumber","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","dots","metaTokens","visitor","defaultVisitor","useBlob","convertValue","Buffer","isFlatArray","exposedHelpers","build","charMap","AxiosURLSearchParams","_pairs","toFormData","encoder","_encode","buildURL","serializeFn","serializedParams","hashmarkIndex","use","synchronous","runWhen","eject","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","isBrowser","protocols","hasBrowserEnv","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","transitionalDefaults","adapter","transformRequest","getContentType","hasJSONContentType","isObjectPayload","formDataToJSON","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","stringifySafely","transformResponse","JSONRequested","strictJSONParsing","ERR_BAD_RESPONSE","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","ignoreDuplicateOf","$internals","normalizeHeader","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","parseHeaders","tokensRE","parseTokens","deleteHeader","normalized","formatHeader","_len","targets","asStrings","_len2","_key2","accessor","accessors","defineAccessor","accessorName","methodName","buildAccessors","mapped","headerValue","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","ERR_BAD_REQUEST","samplesCount","timestamps","firstSampleTS","chunkLength","startedAt","bytesCount","passed","lastArgs","invoke","progressEventReducer","isDownloadStream","bytesNotified","_speedometer","speedometer","throttle","lengthComputable","progressBytes","rate","estimated","progressEventDecorator","throttled","asyncDecorator","msie","urlParsingNode","originURL","resolveURL","protocol","hostname","port","requestURL","expires","secure","cookie","toGMTString","decodeURIComponent","buildFullPath","baseURL","requestedURL","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withXSRFToken","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","newConfig","auth","username","unescape","isURLSameOrigin","xsrfValue","cookies","_config","resolveConfig","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","responseURL","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","subscribe","aborted","parseProtocol","composeSignals","signals","controller","AbortController","streamChunk","chunk","chunkSize","trackStream","onFinish","iterable","_onFinish","ReadableStream","pull","loadedBytes","enqueue","highWaterMark","isFetchSupported","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","supportsResponseStream","resolvers","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","getBodyLength","fetchOptions","finished","composedSignal","stopTimeout","requestContentLength","contentTypeHeader","_request","credentials","isStreamResponse","responseContentLength","responseData","knownAdapters","http","xhrAdapter","fetchAdapter","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validator","formatMessage","opts","ERR_DEPRECATED","assertOptions","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","InterceptorManager","configOrUrl","dummy","boolean","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","responseInterceptorChain","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","axios","defaultConfig","promises","spread","isAxiosError","formToJSON","getAdapter","TitleBar","isShareNeeded","dialogComponent","initializeTitleBar","downloadText","downloadToolTip","printText","closeToolTip","printToolTip","openText","documentTileText","storeText","storeToolTip","documentTitle","documentTitleContentEditor","tileBarDiv","btnStyles","storeFile","onPrint","fileUpload","updateDocumentEditorTitle","selectAllChildren","updateDocumentTitle","onExportClick","manual","file_id","onbeforeunload","setTooltipForPopup","isDropDown","fileData","setFileData","rendereComplete","titleBar","handleFetchAndUpload","file_name","fileUrl","fetchFile","defaultDocument","onLoadDefault","_jsxs","_jsx","_Fragment"],"sourceRoot":""}